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 1tdj6O-0099oU-4P for pgsql-hackers@arkaria.postgresql.org; Fri, 31 Jan 2025 04:58:01 +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 1tdj6N-00FVHO-8k for pgsql-hackers@arkaria.postgresql.org; Fri, 31 Jan 2025 04:57:59 +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 1tdj6M-00FVGg-BX for pgsql-hackers@lists.postgresql.org; Fri, 31 Jan 2025 04:57:58 +0000 Received: from mail-pl1-x62c.google.com ([2607:f8b0:4864:20::62c]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1tdj6H-002POe-1p for pgsql-hackers@lists.postgresql.org; Fri, 31 Jan 2025 04:57:57 +0000 Received: by mail-pl1-x62c.google.com with SMTP id d9443c01a7336-2167141dfa1so27422025ad.1 for ; Thu, 30 Jan 2025 20:57:53 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1738299473; x=1738904273; darn=lists.postgresql.org; h=in-reply-to:from:content-language:references:cc:to:subject :user-agent:mime-version:date:message-id:from:to:cc:subject:date :message-id:reply-to; bh=EuHyoYkctYsM5KEtzhZuUDbAqVJ9wiYfJS3WqiEtEGI=; b=fUSi6NNlbMH/C556Qsp7fzcgEU0d6F+slviDeciBPzPjLYJf4vXeqeERlbfe3sFUqQ QWlnKCuAmBGnzBOH9jAP8p9PAe9/mu3IwiJLIYlct5OakpBecsSpO89JDaf2B7qzkttR AhxMGK9B89oZCxs1uGN/Tu70ZWIlq11bf1KTIL0khVR3vim8+J7sZEOub7Tji/sbFKT+ eghg9V7ALSfWOev+OdWfZa1uYaHYsFScbFs6j1MktOYC5CGX92Xz/94MJD3QLK5S8FOF 4ARU0NiWnd25l9hym8/eyqvPuahtoZinz7WGkiIgMsGtZQRhMCUZE5Pani0tFNMUz3QF kBJw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738299473; x=1738904273; h=in-reply-to:from:content-language:references:cc:to:subject :user-agent:mime-version:date:message-id:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=EuHyoYkctYsM5KEtzhZuUDbAqVJ9wiYfJS3WqiEtEGI=; b=EvqhAadKYZCZ7HdjzPQqjsf5CXGPS8+nOKJrVYQcfvHSdpgbR8dUdLywpIbcFhQPMR 1XVLpSQP514dXsVOJpEg9OAaWXpd13Epp6CfuSsy61IOdGVlGuns5nHprSYIuU4UT5II 3QwQ7h2YOC0A8t7WDQtNWE/Eircqg/r/VawF78eRkz1HT2Kiz1JcM2ZTx41Mop9yvQPR bQwTmdhFyE3aJ4goPmSoriJDNxlIRvoQbZdYbFiEfsLiAYPE20rrc9EIGQoRgEAQxyIF EnxS8MzojjAiL8oSLhw5lME2/lfGZr4S4DiVvDAa49dGt43eV1nIuIcdpzUDUwxDsMva uKtQ== X-Gm-Message-State: AOJu0Yz4AbVFtCCIARyNwxTKnH/xTQxUcx4TXe2K5iXnUrbDoPy2mNDy xTdj1yRfw/0Oz4LP689Dtigxqv3AGxxr8bQMPhESGm3K0rX79RkB X-Gm-Gg: ASbGnct7Ydss1OnRtOAz6OOtV6enphLP40Tp2nQ9uIxw1FpXGESD4c8Cbl5XfEYunTc EpAUr/ktCgOExeL3051Mwz4yBIuTIFsACrjKbjmPpsWW9jvbAm6yVfipiz/K0E70SO8ZjBiH/sf l8jSysqglHxNkVqtqNPC/u15idC/VYmP3swfT3OyUClPx4KeSx0NRkb2i/5iOKlzJTbwYmGJI/N 6/yoa1zDE6HTqTqMmcIKVVDTARhQASzFfc2fkLKmIf3SdylHZxjRtSZP8B8VMr7SMZw+KBBQRpj 1GbNrwG+6cQd1KSZjDVEc0kNSmRHCJJLZmFspa77aqptxxTkNqCd67uqZ/mWGEfzY7k= X-Google-Smtp-Source: AGHT+IHLYcyCy3Bv/wVYnVwt8isr+Aqh5JJ3jjU/ntZOsDlL+zzJhW05g7qLPLbf1OHGHdnkbZOJdg== X-Received: by 2002:a17:903:410a:b0:215:a56f:1e50 with SMTP id d9443c01a7336-21de195732amr72259995ad.8.1738299472739; Thu, 30 Jan 2025 20:57:52 -0800 (PST) Received: from [10.10.20.106] (node-ouv.pool-125-26.dynamic.totinternet.net. [125.26.125.215]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-21de331f8f5sm22225905ad.228.2025.01.30.20.57.48 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 30 Jan 2025 20:57:51 -0800 (PST) Content-Type: multipart/mixed; boundary="------------HA1d6WRm8WC0Ap70uxmp2y28" Message-ID: Date: Fri, 31 Jan 2025 11:57:46 +0700 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: Removing unneeded self joins To: Alexander Korotkov Cc: PostgreSQL Hackers , Tom Lane , Robert Haas , Richard Guo , Alexander Lakhin , "Gregory Stark (as CFM)" , =?UTF-8?Q?Micha=C5=82_K=C5=82eczek?= , Dean Rasheed References: <64486b0b-0404-e39e-322d-0801154901f3@postgrespro.ru> <2422119.1714691974@sss.pgh.pa.us> <24e93efd-eeac-43a6-a75a-ad68eacb32ee@postgrespro.ru> <3622801.1715010885@sss.pgh.pa.us> Content-Language: en-AU From: Andrei Lepikhov In-Reply-To: List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------HA1d6WRm8WC0Ap70uxmp2y28 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 1/10/25 10:13, Alexander Korotkov wrote: > I've got an off-list report from Alexander Lakhin. The failing query > is added to the regression tests in the revised patch. The query was > failing with an error "negative bitmapset member not allowed" issued > in adjust_relid_set(). In order to fix that I've to teach > adjust_relid_set() about negative newrelid, it became even more > similar to replace_relid(). Notable this error happens in > remove_leftjoinrel_from_query(). This seems to be consequence that we > made self-join removal and left-joins removal use common > infrastructure. I have analysed your change. It pertains to the situation where PHV references both the outer join and its inner join in phrels but actually utilises only the outer side of the join. I agree with your proposed fix and have just rewritten the query to make it simpler and more consistent with the regression tests (see new version of the patch in attachment). Additionally, I noticed that the remove_useless_joins code uses the term "join removal" in the join.sql tests. I wonder if it might be more appropriate to revert the name from "Self Join Elimination" back to "Self Join Removal." -- regards, Andrei Lepikhov --------------HA1d6WRm8WC0Ap70uxmp2y28 Content-Type: text/x-patch; charset=UTF-8; name="v10-0001-Remove-useless-self-joins.patch" Content-Disposition: attachment; filename="v10-0001-Remove-useless-self-joins.patch" Content-Transfer-Encoding: base64 RnJvbSA4OGUyY2M3ZjhkNzZiMzI4NDExNzZjMDdjNjllZGYwNjExZGY1YzlmIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiAiQW5kcmVpIFYuIExlcGlraG92IiA8bGVwaWhvdkBn bWFpbC5jb20+CkRhdGU6IEZyaSwgMjAgRGVjIDIwMjQgMTU6NTU6MDkgKzA3MDAKU3ViamVj dDogW1BBVENIIHYxMF0gUmVtb3ZlIHVzZWxlc3Mgc2VsZi1qb2lucwpNSU1FLVZlcnNpb246 IDEuMApDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKQ29udGVudC1U cmFuc2Zlci1FbmNvZGluZzogOGJpdAoKVGhlIFNlbGYgSm9pbiBFbGltaW5hdGlvbiAoU0pF KSBmZWF0dXJlIHJlbW92ZXMgYW4gaW5uZXIgam9pbiBvZiBhIHBsYWluIHRhYmxlCnRvIGl0 c2VsZiBpbiB0aGUgcXVlcnkgdHJlZSBpZiBpcyBwcm92ZWQgdGhhdCB0aGUgam9pbiBjYW4g YmUgcmVwbGFjZWQgd2l0aAphIHNjYW4gd2l0aG91dCBpbXBhY3RpbmcgdGhlIHF1ZXJ5IHJl c3VsdC4gU2VsZiBqb2luIGFuZCBpbm5lciByZWxhdGlvbiBhcmUKcmVwbGFjZWQgd2l0aCB0 aGUgb3V0ZXIgaW4gcXVlcnksIGVxdWl2YWxlbmNlIGNsYXNzZXMsIGFuZCBwbGFubmVyIGlu Zm8Kc3RydWN0dXJlcy4gQWxzbywgaW5uZXIgcmVzdHJpY3RsaXN0IG1vdmVzIHRvIHRoZSBv dXRlciBvbmUgd2l0aCByZW1vdmluZwpkdXBsaWNhdGVkIGNsYXVzZXMuIFRodXMsIHRoaXMg b3B0aW1pemF0aW9uIHJlZHVjZXMgdGhlIGxlbmd0aCBvZiB0aGUgcmFuZ2UKdGFibGUgbGlz dCAodGhpcyBlc3BlY2lhbGx5IG1ha2VzIHNlbnNlIGZvciBwYXJ0aXRpb25lZCByZWxhdGlv bnMpLCByZWR1Y2VzCnRoZSBudW1iZXIgb2YgcmVzdHJpY3Rpb24gY2xhdXNlcyA9PT0gc2Vs ZWN0aXZpdHkgZXN0aW1hdGlvbnMsIGFuZCBwb3RlbnRpYWxseQppbXByb3ZlcyB0b3RhbCBw bGFubmVyIHByZWRpY3Rpb24gZm9yIHRoZSBxdWVyeS4KClRoaXMgZmVhdHVyZSBpcyBkZWRp Y2F0ZWQgdG8gYXZvaWRpbmcgcmVkdW5kYW5jeSB3aGljaCBjYW4gYXBwZWFyIGFmdGVyIHB1 bGwtdXAKdHJhbnNmb3JtYXRpb25zIG9yIHRoZSBjcmVhdGlvbiBvZiBhbiBFcXVpdmFsZW5j ZUNsYXNzLWRlcml2ZWQgY2xhdXNlIGxpa2UKdGhlIGJlbG93OgoKU0VMRUNUICogRlJPTSB0 MSBXSEVSRSB4IElOIChTRUxFQ1QgdDMueCBGUk9NIHQxIHQzKTsKU0VMRUNUICogRlJPTSB0 MSBXSEVSRSBFWElTVFMgKFNFTEVDVCB0My54IEZST00gdDEgdDMgV0hFUkUgdDMueD10MS54 KTsKU0VMRUNUICogRlJPTSB0MSx0MiwgdDEgdDMgV0hFUkUgdDEueD10Mi54IEFORCB0Mi54 PXQzLng7CgpBZnRlciBzb21lIGFkZGl0aW9uYWwgY29kaW5nLCBpdCB3b3VsZCBwb3RlbnRp YWxseSByZWR1Y2UgcmVkdW5kYW5jeSBjYXVzZWQgYnkKc3VicXVlcnkgcHVsbC11cCBhZnRl ciB1bm5lY2Vzc2FyeSBvdXRlciBqb2luIHJlbW92YWwuIFNvbWV0aGluZyBsaWtlIHRoYXQK ClNFTEVDVCAqIEZST00gdDEgV0hFUkUgeCBJTiAoU0VMRUNUIHQzLnggRlJPTSB0MSB0MyBM RUZUIEpPSU4gdDIgT04gdDIueD10MS54KTsKCkFsc28sIGl0IGNhbiBkcmFzdGljYWxseSBo ZWxwIHRvIGpvaW4gcGFydGl0aW9uZWQgdGFibGVzLCByZW1vdmluZyBlbnRyaWVzIGV2ZW4K YmVmb3JlIHRoZWlyIGV4cGFuc2lvbi4KClRoZSBTSkUgcHJvb2YgaXMgYmFzZWQgb24gaW5u ZXJyZWxfaXNfdW5pcXVlIG1hY2hpbmVyeS4KCldlIGNhbiByZW1vdmUgYSBzZWxmLWpvaW4g d2hlbiBmb3IgZWFjaCBvdXRlciByb3c6CjEuIEF0IG1vc3Qgb25lIGlubmVyIHJvdyBtYXRj aGVzIHRoZSBqb2luIGNsYXVzZS4KMi4gRWFjaCBtYXRjaGVkIGlubmVyIHJvdyBtdXN0IGJl IChwaHlzaWNhbGx5KSB0aGUgc2FtZSByb3cgYXMgdGhlIG91dGVyIG9uZS4KCkluIHRoaXMg cGF0Y2ggd2UgdXNlIHRoZSBuZXh0IGFwcHJvYWNoIHRvIGlkZW50aWZ5IGEgc2VsZi1qb2lu OgoxLiBDb2xsZWN0IGFsbCBtZXJnZS1qb2luYWJsZSBqb2luIHF1YWxzIHdoaWNoIGxvb2sg bGlrZSBhLnggPSBiLngKMi4gQWRkIHRvIHRoZSBsaXN0IGFib3ZlIHRoZSBiYXNlcmV0cmlj dGluZm8gb2YgdGhlIGlubmVyIHRhYmxlLgozLiBDaGVjayBpbm5lcnJlbF9pc191bmlxdWUo KSBmb3IgdGhlIHF1YWwgbGlzdC4gIElmIGl0IHJldHVybnMgZmFsc2UsIHNraXAKdGhpcyBw YWlyIG9mIGpvaW5pbmcgdGFibGVzLgo0LiBDaGVjayB1bmlxdWVuZXNzLCBwcm92ZWQgYnkg dGhlIGJhc2VyZXN0cmljdGluZm8gY2xhdXNlcy4gVG8gcHJvdmUKdGhlIHBvc3NpYmlsaXR5 IG9mIHNlbGYtam9pbiBlbGltaW5hdGlvbiBpbm5lciBhbmQgb3V0ZXIgY2xhdXNlcyBtdXN0 IGhhdmUKYW4gZXhhY3QgbWF0Y2guCgpUaGUgcmVsYXRpb24gcmVwbGFjZW1lbnQgcHJvY2Vk dXJlIGlzIG5vdCB0cml2aWFsIGFuZCBpdCBpcyBwYXJ0bHkgY29tYmluZWQKd2l0aCB0aGUg b25lLCB1c2VkIHRvIHJlbW92ZSB1c2VsZXNzIGxlZnQgam9pbnMuICBUZXN0cywgY292ZXJp bmcgdGhpcyBmZWF0dXJlLAp3ZXJlIGFkZGVkIHRvIGpvaW4uc3FsLiAgU29tZSByZWdyZXNz aW9uIHRlc3RzIGNoYW5nZWQgZHVlIHRvIHNlbGYtam9pbiByZW1vdmFsCmxvZ2ljLgoKRGlz Y3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9mbGF0LzY0NDg2YjBiLTA0MDQtZTM5ZS0z MjJkLTA4MDExNTQ5MDFmMyU0MHBvc3RncmVzcHJvLnJ1CkF1dGhvcjogQW5kcmV5IExlcGlr aG92LCBBbGV4YW5kZXIgS3V6bWVua292ClJldmlld2VkLWJ5OiBUb20gTGFuZSwgUm9iZXJ0 IEhhYXMsIEFuZHJlcyBGcmV1bmQsIFNpbW9uIFJpZ2dzLCBKb25hdGhhbiBTLiBLYXR6ClJl dmlld2VkLWJ5OiBEYXZpZCBSb3dsZXksIFRob21hcyBNdW5ybywgS29uc3RhbnRpbiBLbml6 aG5paywgSGVpa2tpIExpbm5ha2FuZ2FzClJldmlld2VkLWJ5OiBIeXdlbCBDYXJ2ZXIsIExh dXJlbnogQWxiZSwgUm9uYW4gRHVua2xhdSwgdmlnbmVzaCBDLCBaaGlob25nIFl1ClJldmll d2VkLWJ5OiBHcmVnIFN0YXJrLCBKYWltZSBDYXNhbm92YSwgTWljaGHFgiBLxYJlY3playwg QWxlbmEgUnliYWtpbmEKUmV2aWV3ZWQtYnk6IEFsZXhhbmRlciBLb3JvdGtvdgotLS0KIGRv Yy9zcmMvc2dtbC9jb25maWcuc2dtbCAgICAgICAgICAgICAgICAgIHwgICAxNiArCiBzcmMv YmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9lcXVpdmNsYXNzLmMgICB8ICAgIDMgKy0KIHNyYy9i YWNrZW5kL29wdGltaXplci9wYXRoL2luZHhwYXRoLmMgICAgIHwgICAzOSArCiBzcmMvYmFj a2VuZC9vcHRpbWl6ZXIvcGxhbi9hbmFseXplam9pbnMuYyB8IDEyMzggKysrKysrKysrKysr KysrKysrKy0tCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubWFpbi5jICAgICB8 ICAgIDUgKwogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3ByZXAvcHJlcHVuaW9uLmMgICAgfCAg ICA3ICstCiBzcmMvYmFja2VuZC9yZXdyaXRlL3Jld3JpdGVNYW5pcC5jICAgICAgICB8ICAx MzcgKystCiBzcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMuYyAgICAgICB8ICAg MTAgKwogc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmggICAgICAgICAgICAgfCAgIDQw ICstCiBzcmMvaW5jbHVkZS9vcHRpbWl6ZXIvb3B0aW1pemVyLmggICAgICAgICB8ICAgIDIg Kwogc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhzLmggICAgICAgICAgICAgfCAgICAzICsK IHNyYy9pbmNsdWRlL29wdGltaXplci9wbGFubWFpbi5oICAgICAgICAgIHwgICAgNiArCiBz cmMvaW5jbHVkZS9yZXdyaXRlL3Jld3JpdGVNYW5pcC5oICAgICAgICB8ICAgIDQgKwogc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC9lcXVpdmNsYXNzLm91dCAgfCAgIDMwICsKIHNyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvam9pbi5vdXQgICAgICAgIHwgMTA4MSArKysrKysrKysr KysrKysrKysKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3lzdmlld3Mub3V0ICAgIHwg ICAgMyArLQogc3JjL3Rlc3QvcmVncmVzcy9zcWwvZXF1aXZjbGFzcy5zcWwgICAgICAgfCAg IDE2ICsKIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2pvaW4uc3FsICAgICAgICAgICAgIHwgIDQ5 NCArKysrKysrKwogc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgICAgICAgICAg fCAgICAzICsKIDE5IGZpbGVzIGNoYW5nZWQsIDI5OTcgaW5zZXJ0aW9ucygrKSwgMTQwIGRl bGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9jb25maWcuc2dtbCBiL2Rv Yy9zcmMvc2dtbC9jb25maWcuc2dtbAppbmRleCBhNzgyZjEwOTk4Li4yMzBmMjkwMmEwIDEw MDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvY29uZmlnLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21s L2NvbmZpZy5zZ21sCkBAIC01NTM4LDYgKzU1MzgsMjIgQEAgQU5ZIDxyZXBsYWNlYWJsZSBj bGFzcz0icGFyYW1ldGVyIj5udW1fc3luYzwvcmVwbGFjZWFibGU+ICggPHJlcGxhY2VhYmxl IGNsYXNzPSIKICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgIDwvdmFybGlzdGVudHJ5PgogCisg ICAgIDx2YXJsaXN0ZW50cnkgaWQ9Imd1Yy1lbmFibGVfc2VsZl9qb2luX2VsaW1pbmF0aW9u IiB4cmVmbGFiZWw9ImVuYWJsZV9zZWxmX2pvaW5fZWxpbWluYXRpb24iPgorICAgICAgPHRl cm0+PHZhcm5hbWU+ZW5hYmxlX3NlbGZfam9pbl9lbGltaW5hdGlvbjwvdmFybmFtZT4gKDx0 eXBlPmJvb2xlYW48L3R5cGU+KQorICAgICAgPGluZGV4dGVybT4KKyAgICAgICA8cHJpbWFy eT48dmFybmFtZT5lbmFibGVfc2VsZl9qb2luX2VsaW1pbmF0aW9uPC92YXJuYW1lPiBjb25m aWd1cmF0aW9uIHBhcmFtZXRlcjwvcHJpbWFyeT4KKyAgICAgIDwvaW5kZXh0ZXJtPgorICAg ICAgPC90ZXJtPgorICAgICAgPGxpc3RpdGVtPgorICAgICAgIDxwYXJhPgorICAgICAgICBF bmFibGVzIG9yIGRpc2FibGVzIHRoZSBxdWVyeSBwbGFubmVyJ3Mgb3B0aW1pemF0aW9uIHdo aWNoIGFuYWx5c2VzCisgICAgICAgIHRoZSBxdWVyeSB0cmVlIGFuZCByZXBsYWNlcyBzZWxm IGpvaW5zIHdpdGggc2VtYW50aWNhbGx5IGVxdWl2YWxlbnQKKyAgICAgICAgc2luZ2xlIHNj YW5zLiAgVGFrZXMgaW50byBjb25zaWRlcmF0aW9uIG9ubHkgcGxhaW4gdGFibGVzLgorICAg ICAgICBUaGUgZGVmYXVsdCBpcyA8bGl0ZXJhbD5vbjwvbGl0ZXJhbD4uCisgICAgICAgPC9w YXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgPC92YXJsaXN0ZW50cnk+CisKICAgICAg PHZhcmxpc3RlbnRyeSBpZD0iZ3VjLWVuYWJsZS1zZXFzY2FuIiB4cmVmbGFiZWw9ImVuYWJs ZV9zZXFzY2FuIj4KICAgICAgIDx0ZXJtPjx2YXJuYW1lPmVuYWJsZV9zZXFzY2FuPC92YXJu YW1lPiAoPHR5cGU+Ym9vbGVhbjwvdHlwZT4pCiAgICAgICA8aW5kZXh0ZXJtPgpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvZXF1aXZjbGFzcy5jIGIvc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3BhdGgvZXF1aXZjbGFzcy5jCmluZGV4IDdjYWZhY2EzM2MuLjBm OWVjZjVlZTggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2VxdWl2 Y2xhc3MuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9lcXVpdmNsYXNzLmMK QEAgLTg1Miw3ICs4NTIsOCBAQCBmaW5kX2NvbXB1dGFibGVfZWNfbWVtYmVyKFBsYW5uZXJJ bmZvICpyb290LAogCWV4cHJ2YXJzID0gcHVsbF92YXJfY2xhdXNlKChOb2RlICopIGV4cHJz LAogCQkJCQkJCSAgIFBWQ19JTkNMVURFX0FHR1JFR0FURVMgfAogCQkJCQkJCSAgIFBWQ19J TkNMVURFX1dJTkRPV0ZVTkNTIHwKLQkJCQkJCQkgICBQVkNfSU5DTFVERV9QTEFDRUhPTERF UlMpOworCQkJCQkJCSAgIFBWQ19JTkNMVURFX1BMQUNFSE9MREVSUyB8CisJCQkJCQkJICAg UFZDX0lOQ0xVREVfQ09OVkVSVFJPV1RZUEVTKTsKIAogCWZvcmVhY2gobGMsIGVjLT5lY19t ZW1iZXJzKQogCXsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2lu ZHhwYXRoLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9pbmR4cGF0aC5jCmluZGV4 IGZhM2VkZjYwZjMuLjY1ZGMyMzRkMWYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGlt aXplci9wYXRoL2luZHhwYXRoLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgv aW5keHBhdGguYwpAQCAtNDE0OSw2ICs0MTQ5LDIyIEBAIGJvb2wKIHJlbGF0aW9uX2hhc191 bmlxdWVfaW5kZXhfZm9yKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJ CQkJCQkJICBMaXN0ICpyZXN0cmljdGxpc3QsCiAJCQkJCQkJICBMaXN0ICpleHBybGlzdCwg TGlzdCAqb3BybGlzdCkKK3sKKwlyZXR1cm4gcmVsYXRpb25faGFzX3VuaXF1ZV9pbmRleF9l eHQocm9vdCwgcmVsLCByZXN0cmljdGxpc3QsCisJCQkJCQkJCQkJIGV4cHJsaXN0LCBvcHJs aXN0LCBOVUxMKTsKK30KKworLyoKKyAqIHJlbGF0aW9uX2hhc191bmlxdWVfaW5kZXhfZXh0 CisgKgkgIFNhbWUgYXMgcmVsYXRpb25faGFzX3VuaXF1ZV9pbmRleF9mb3IoKSwgYnV0IHN1 cHBvcnRzIGV4dHJhX2NsYXVzZXMKKyAqCSAgcGFyYW1ldGVyLiAgSWYgZXh0cmFfY2xhdXNl cyBpc24ndCBOVUxMLCByZXR1cm4gYmFzZXJlc3RyaWN0aW5mbyBjbGF1c2VzCisgKgkgIHdo aWNoIHdlcmUgdXNlZCB0byBkZXJpdmUgdW5pcXVlbmVzcy4KKyAqLworYm9vbAorcmVsYXRp b25faGFzX3VuaXF1ZV9pbmRleF9leHQoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8g KnJlbCwKKwkJCQkJCQkgIExpc3QgKnJlc3RyaWN0bGlzdCwKKwkJCQkJCQkgIExpc3QgKmV4 cHJsaXN0LCBMaXN0ICpvcHJsaXN0LAorCQkJCQkJCSAgTGlzdCAqKmV4dHJhX2NsYXVzZXMp CiB7CiAJTGlzdENlbGwgICAqaWM7CiAKQEAgLTQyMDQsNiArNDIyMCw3IEBAIHJlbGF0aW9u X2hhc191bmlxdWVfaW5kZXhfZm9yKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpy ZWwsCiAJewogCQlJbmRleE9wdEluZm8gKmluZCA9IChJbmRleE9wdEluZm8gKikgbGZpcnN0 KGljKTsKIAkJaW50CQkJYzsKKwkJTGlzdAkgICAqZXhwcnMgPSBOSUw7CiAKIAkJLyoKIAkJ ICogSWYgdGhlIGluZGV4IGlzIG5vdCB1bmlxdWUsIG9yIG5vdCBpbW1lZGlhdGVseSBlbmZv cmNlZCwgb3IgaWYgaXQncwpAQCAtNDI1NSw2ICs0MjcyLDI0IEBAIHJlbGF0aW9uX2hhc191 bmlxdWVfaW5kZXhfZm9yKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJ CQkJaWYgKG1hdGNoX2luZGV4X3RvX29wZXJhbmQocmV4cHIsIGMsIGluZCkpCiAJCQkJewog CQkJCQltYXRjaGVkID0gdHJ1ZTsgLyogY29sdW1uIGlzIHVuaXF1ZSAqLworCisJCQkJCWlm IChibXNfbWVtYmVyc2hpcChyaW5mby0+Y2xhdXNlX3JlbGlkcykgPT0gQk1TX1NJTkdMRVRP TikKKwkJCQkJeworCQkJCQkJTWVtb3J5Q29udGV4dCBvbGRNZW1DdHggPQorCQkJCQkJCU1l bW9yeUNvbnRleHRTd2l0Y2hUbyhyb290LT5wbGFubmVyX2N4dCk7CisKKwkJCQkJCS8qCisJ CQkJCQkgKiBBZGQgZmlsdGVyIGNsYXVzZSBpbnRvIGEgbGlzdCBhbGxvd2luZyBjYWxsZXIg dG8KKwkJCQkJCSAqIGtub3cgaWYgdW5pcXVlbmVzcyBoYXZlIG1hZGUgbm90IG9ubHkgYnkg am9pbgorCQkJCQkJICogY2xhdXNlcy4KKwkJCQkJCSAqLworCQkJCQkJQXNzZXJ0KGJtc19p c19lbXB0eShyaW5mby0+bGVmdF9yZWxpZHMpIHx8CisJCQkJCQkJICAgYm1zX2lzX2VtcHR5 KHJpbmZvLT5yaWdodF9yZWxpZHMpKTsKKwkJCQkJCWlmIChleHRyYV9jbGF1c2VzKQorCQkJ CQkJCWV4cHJzID0gbGFwcGVuZChleHBycywgcmluZm8pOworCQkJCQkJTWVtb3J5Q29udGV4 dFN3aXRjaFRvKG9sZE1lbUN0eCk7CisJCQkJCX0KKwogCQkJCQlicmVhazsKIAkJCQl9CiAJ CQl9CkBAIC00Mjk3LDcgKzQzMzIsMTEgQEAgcmVsYXRpb25faGFzX3VuaXF1ZV9pbmRleF9m b3IoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAogCQkvKiBNYXRjaGVk IGFsbCBrZXkgY29sdW1ucyBvZiB0aGlzIGluZGV4PyAqLwogCQlpZiAoYyA9PSBpbmQtPm5r ZXljb2x1bW5zKQorCQl7CisJCQlpZiAoZXh0cmFfY2xhdXNlcykKKwkJCQkqZXh0cmFfY2xh dXNlcyA9IGV4cHJzOwogCQkJcmV0dXJuIHRydWU7CisJCX0KIAl9CiAKIAlyZXR1cm4gZmFs c2U7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9hbmFseXplam9p bnMuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2FuYWx5emVqb2lucy5jCmluZGV4 IGIzM2ZjNjcxNzcuLjk2ODE3YmYzZGYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGlt aXplci9wbGFuL2FuYWx5emVqb2lucy5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9w bGFuL2FuYWx5emVqb2lucy5jCkBAIC0yMiw2ICsyMiw3IEBACiAgKi8KICNpbmNsdWRlICJw b3N0Z3Jlcy5oIgogCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19jbGFzcy5oIgogI2luY2x1ZGUg Im5vZGVzL25vZGVGdW5jcy5oIgogI2luY2x1ZGUgIm9wdGltaXplci9qb2luaW5mby5oIgog I2luY2x1ZGUgIm9wdGltaXplci9vcHRpbWl6ZXIuaCIKQEAgLTMwLDI3ICszMSw0NyBAQAog I2luY2x1ZGUgIm9wdGltaXplci9wbGFjZWhvbGRlci5oIgogI2luY2x1ZGUgIm9wdGltaXpl ci9wbGFubWFpbi5oIgogI2luY2x1ZGUgIm9wdGltaXplci9yZXN0cmljdGluZm8uaCIKKyNp bmNsdWRlICJyZXdyaXRlL3Jld3JpdGVNYW5pcC5oIgogI2luY2x1ZGUgInV0aWxzL2xzeXNj YWNoZS5oIgogCisvKgorICogVXRpbGl0eSBzdHJ1Y3R1cmUuIEl0IGlzIG5lZWRlZCB0byBw ZXJmb3JtIGEgc29ydGluZyBwcm9jZWR1cmUgYW5kIHNpbXBsaWZ5CisgKiB0aGUgc2VhcmNo IG9mIFNKRS1jYW5kaWRhdGUgYmFzZXJlbHMgcmVmZXJlbmNpbmcgdGhlIHNhbWUgZGF0YWJh c2UgcmVsYXRpb24uCisgKiBIYXZpbmcgY29sbGVjdGVkIGFsbCBiYXNlcmVscyBmcm9tIHRo ZSBxdWVyeSBqb2ludHJlZSwgdGhlIHBsYW5uZXIgc29ydHMgdGhlbQorICogYWNjb3JkaW5n IHRvIHRoZSByZWxvaWQgdmFsdWUsIGdyb3VwcyB0aGVtIHdpdGggdGhlIG5leHQgcGFzcyBh bmQgYXR0ZW1wdHMgdG8KKyAqIHJlbW92ZSBzZWxmLWpvaW5zLgorICogUHJlbGltaW5hcnkg c29ydGluZyBwcmV2ZW50cyBxdWFkcmF0aWMgYmVoYXZpb3VyIHRoYXQgY2FuIGJlIGhhcm1m dWwgaW4gdGhlCisgKiBjYXNlIG9mIG51bWVyb3VzIGpvaW5zLgorICovCit0eXBlZGVmIHN0 cnVjdAoreworCWludAkJCXJlbGlkOworCU9pZAkJCXJlbG9pZDsKK30gU2VsZkpvaW5DYW5k aWRhdGU7CisKK2Jvb2wJCWVuYWJsZV9zZWxmX2pvaW5fZWxpbWluYXRpb247CisKIC8qIGxv Y2FsIGZ1bmN0aW9ucyAqLwogc3RhdGljIGJvb2wgam9pbl9pc19yZW1vdmFibGUoUGxhbm5l ckluZm8gKnJvb3QsIFNwZWNpYWxKb2luSW5mbyAqc2ppbmZvKTsKLXN0YXRpYyB2b2lkIHJl bW92ZV9yZWxfZnJvbV9xdWVyeShQbGFubmVySW5mbyAqcm9vdCwgaW50IHJlbGlkLAotCQkJ CQkJCQkgIFNwZWNpYWxKb2luSW5mbyAqc2ppbmZvKTsKK3N0YXRpYyB2b2lkIHJlbW92ZV9s ZWZ0am9pbnJlbF9mcm9tX3F1ZXJ5KFBsYW5uZXJJbmZvICpyb290LCBpbnQgcmVsaWQsCisJ CQkJCQkJCQkJICBTcGVjaWFsSm9pbkluZm8gKnNqaW5mbyk7CiBzdGF0aWMgdm9pZCByZW1v dmVfcmVsX2Zyb21fcmVzdHJpY3RpbmZvKFJlc3RyaWN0SW5mbyAqcmluZm8sCiAJCQkJCQkJ CQkJIGludCByZWxpZCwgaW50IG9qcmVsaWQpOwogc3RhdGljIHZvaWQgcmVtb3ZlX3JlbF9m cm9tX2VjbGFzcyhFcXVpdmFsZW5jZUNsYXNzICplYywKLQkJCQkJCQkJICAgaW50IHJlbGlk LCBpbnQgb2pyZWxpZCk7CisJCQkJCQkJCSAgIGludCByZWxpZCwgaW50IG9qcmVsaWQsIGlu dCBzdWJzdCk7CiBzdGF0aWMgTGlzdCAqcmVtb3ZlX3JlbF9mcm9tX2pvaW5saXN0KExpc3Qg KmpvaW5saXN0LCBpbnQgcmVsaWQsIGludCAqbnJlbW92ZWQpOwogc3RhdGljIGJvb2wgcmVs X3N1cHBvcnRzX2Rpc3RpbmN0bmVzcyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAq cmVsKTsKIHN0YXRpYyBib29sIHJlbF9pc19kaXN0aW5jdF9mb3IoUGxhbm5lckluZm8gKnJv b3QsIFJlbE9wdEluZm8gKnJlbCwKLQkJCQkJCQkJTGlzdCAqY2xhdXNlX2xpc3QpOworCQkJ CQkJCQlMaXN0ICpjbGF1c2VfbGlzdCwgTGlzdCAqKmV4dHJhX2NsYXVzZXMpOwogc3RhdGlj IE9pZAlkaXN0aW5jdF9jb2xfc2VhcmNoKGludCBjb2xubywgTGlzdCAqY29sbm9zLCBMaXN0 ICpvcGlkcyk7CiBzdGF0aWMgYm9vbCBpc19pbm5lcnJlbF91bmlxdWVfZm9yKFBsYW5uZXJJ bmZvICpyb290LAogCQkJCQkJCQkgICBSZWxpZHMgam9pbnJlbGlkcywKIAkJCQkJCQkJICAg UmVsaWRzIG91dGVycmVsaWRzLAogCQkJCQkJCQkgICBSZWxPcHRJbmZvICppbm5lcnJlbCwK IAkJCQkJCQkJICAgSm9pblR5cGUgam9pbnR5cGUsCi0JCQkJCQkJCSAgIExpc3QgKnJlc3Ry aWN0bGlzdCk7CisJCQkJCQkJCSAgIExpc3QgKnJlc3RyaWN0bGlzdCwKKwkJCQkJCQkJICAg TGlzdCAqKmV4dHJhX2NsYXVzZXMpOworc3RhdGljIGludAlzZWxmX2pvaW5fY2FuZGlkYXRl c19jbXAoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYik7CiAKIAogLyoKQEAgLTg4LDcg KzEwOSw3IEBAIHJlc3RhcnQ6CiAJCSAqLwogCQlpbm5lcnJlbGlkID0gYm1zX3NpbmdsZXRv bl9tZW1iZXIoc2ppbmZvLT5taW5fcmlnaHRoYW5kKTsKIAotCQlyZW1vdmVfcmVsX2Zyb21f cXVlcnkocm9vdCwgaW5uZXJyZWxpZCwgc2ppbmZvKTsKKwkJcmVtb3ZlX2xlZnRqb2lucmVs X2Zyb21fcXVlcnkocm9vdCwgaW5uZXJyZWxpZCwgc2ppbmZvKTsKIAogCQkvKiBXZSB2ZXJp ZnkgdGhhdCBleGFjdGx5IG9uZSByZWZlcmVuY2UgZ2V0cyByZW1vdmVkIGZyb20gam9pbmxp c3QgKi8KIAkJbnJlbW92ZWQgPSAwOwpAQCAtMjc2LDcgKzI5Nyw3IEBAIGpvaW5faXNfcmVt b3ZhYmxlKFBsYW5uZXJJbmZvICpyb290LCBTcGVjaWFsSm9pbkluZm8gKnNqaW5mbykKIAkg KiBOb3cgdGhhdCB3ZSBoYXZlIHRoZSByZWxldmFudCBlcXVhbGl0eSBqb2luIGNsYXVzZXMs IHRyeSB0byBwcm92ZSB0aGUKIAkgKiBpbm5lcnJlbCBkaXN0aW5jdC4KIAkgKi8KLQlpZiAo cmVsX2lzX2Rpc3RpbmN0X2Zvcihyb290LCBpbm5lcnJlbCwgY2xhdXNlX2xpc3QpKQorCWlm IChyZWxfaXNfZGlzdGluY3RfZm9yKHJvb3QsIGlubmVycmVsLCBjbGF1c2VfbGlzdCwgTlVM TCkpCiAJCXJldHVybiB0cnVlOwogCiAJLyoKQEAgLTI4OCwzNiArMzA5LDMxIEBAIGpvaW5f aXNfcmVtb3ZhYmxlKFBsYW5uZXJJbmZvICpyb290LCBTcGVjaWFsSm9pbkluZm8gKnNqaW5m bykKIAogCiAvKgotICogUmVtb3ZlIHRoZSB0YXJnZXQgcmVsaWQgYW5kIHJlZmVyZW5jZXMg dG8gdGhlIHRhcmdldCBqb2luIGZyb20gdGhlCisgKiBSZW1vdmUgdGhlIHRhcmdldCByZWwt PnJlbGlkIGFuZCByZWZlcmVuY2VzIHRvIHRoZSB0YXJnZXQgam9pbiBmcm9tIHRoZQogICog cGxhbm5lcidzIGRhdGEgc3RydWN0dXJlcywgaGF2aW5nIGRldGVybWluZWQgdGhhdCB0aGVy ZSBpcyBubyBuZWVkCi0gKiB0byBpbmNsdWRlIHRoZW0gaW4gdGhlIHF1ZXJ5LgorICogdG8g aW5jbHVkZSB0aGVtIGluIHRoZSBxdWVyeS4gT3B0aW9uYWxseSByZXBsYWNlIHRoZW0gd2l0 aCBzdWJzdCBpZiBzdWJzdAorICogaXMgbm9uLW5lZ2F0aXZlLgogICoKLSAqIFdlIGFyZSBu b3QgdGVycmlibHkgdGhvcm91Z2ggaGVyZS4gIFdlIG9ubHkgYm90aGVyIHRvIHVwZGF0ZSBw YXJ0cyBvZgotICogdGhlIHBsYW5uZXIncyBkYXRhIHN0cnVjdHVyZXMgdGhhdCB3aWxsIGFj dHVhbGx5IGJlIGNvbnN1bHRlZCBsYXRlci4KKyAqIFRoaXMgZnVuY3Rpb24gdXBkYXRlcyBv bmx5IHBhcnRzIG5lZWRlZCBmb3IgYm90aCBsZWZ0LWpvaW4gcmVtb3ZhbCBhbmQKKyAqIHNl bGYtam9pbiByZW1vdmFsLgogICovCiBzdGF0aWMgdm9pZAotcmVtb3ZlX3JlbF9mcm9tX3F1 ZXJ5KFBsYW5uZXJJbmZvICpyb290LCBpbnQgcmVsaWQsIFNwZWNpYWxKb2luSW5mbyAqc2pp bmZvKQorcmVtb3ZlX3JlbF9mcm9tX3F1ZXJ5KFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJ bmZvICpyZWwsCisJCQkJCSAgaW50IHN1YnN0LCBTcGVjaWFsSm9pbkluZm8gKnNqaW5mbywK KwkJCQkJICBSZWxpZHMgam9pbnJlbGlkcykKIHsKLQlSZWxPcHRJbmZvICpyZWwgPSBmaW5k X2Jhc2VfcmVsKHJvb3QsIHJlbGlkKTsKLQlpbnQJCQlvanJlbGlkID0gc2ppbmZvLT5vanJl bGlkOwotCVJlbGlkcwkJam9pbnJlbGlkczsKLQlSZWxpZHMJCWpvaW5fcGx1c19jb21tdXRl OwotCUxpc3QJICAgKmpvaW5pbmZvczsKKwlpbnQJCQlyZWxpZCA9IHJlbC0+cmVsaWQ7CisJ aW50CQkJb2pyZWxpZCA9IChzamluZm8gIT0gTlVMTCkgPyBzamluZm8tPm9qcmVsaWQgOiAt MTsKIAlJbmRleAkJcnRpOwogCUxpc3RDZWxsICAgKmw7CiAKLQkvKiBDb21wdXRlIHRoZSBy ZWxpZCBzZXQgZm9yIHRoZSBqb2luIHdlIGFyZSBjb25zaWRlcmluZyAqLwotCWpvaW5yZWxp ZHMgPSBibXNfdW5pb24oc2ppbmZvLT5taW5fbGVmdGhhbmQsIHNqaW5mby0+bWluX3JpZ2h0 aGFuZCk7Ci0JQXNzZXJ0KG9qcmVsaWQgIT0gMCk7Ci0Jam9pbnJlbGlkcyA9IGJtc19hZGRf bWVtYmVyKGpvaW5yZWxpZHMsIG9qcmVsaWQpOwotCiAJLyoKIAkgKiBVcGRhdGUgYWxsX2Jh c2VyZWxzIGFuZCByZWxhdGVkIHJlbGlkIHNldHMuCiAJICovCi0Jcm9vdC0+YWxsX2Jhc2Vy ZWxzID0gYm1zX2RlbF9tZW1iZXIocm9vdC0+YWxsX2Jhc2VyZWxzLCByZWxpZCk7Ci0Jcm9v dC0+b3V0ZXJfam9pbl9yZWxzID0gYm1zX2RlbF9tZW1iZXIocm9vdC0+b3V0ZXJfam9pbl9y ZWxzLCBvanJlbGlkKTsKLQlyb290LT5hbGxfcXVlcnlfcmVscyA9IGJtc19kZWxfbWVtYmVy KHJvb3QtPmFsbF9xdWVyeV9yZWxzLCByZWxpZCk7Ci0Jcm9vdC0+YWxsX3F1ZXJ5X3JlbHMg PSBibXNfZGVsX21lbWJlcihyb290LT5hbGxfcXVlcnlfcmVscywgb2pyZWxpZCk7CisJcm9v dC0+YWxsX2Jhc2VyZWxzID0gcmVwbGFjZV9yZWxpZChyb290LT5hbGxfYmFzZXJlbHMsIHJl bGlkLCBzdWJzdCk7CisJcm9vdC0+b3V0ZXJfam9pbl9yZWxzID0gcmVwbGFjZV9yZWxpZChy b290LT5vdXRlcl9qb2luX3JlbHMsIG9qcmVsaWQsIHN1YnN0KTsKKwlyb290LT5hbGxfcXVl cnlfcmVscyA9IHJlcGxhY2VfcmVsaWQocm9vdC0+YWxsX3F1ZXJ5X3JlbHMsIHJlbGlkLCBz dWJzdCk7CisJcm9vdC0+YWxsX3F1ZXJ5X3JlbHMgPSByZXBsYWNlX3JlbGlkKHJvb3QtPmFs bF9xdWVyeV9yZWxzLCBvanJlbGlkLCBzdWJzdCk7CiAKIAkvKgogCSAqIExpa2V3aXNlIHJl bW92ZSByZWZlcmVuY2VzIGZyb20gU3BlY2lhbEpvaW5JbmZvIGRhdGEgc3RydWN0dXJlcy4K QEAgLTM0MSwyMCArMzU3LDMzIEBAIHJlbW92ZV9yZWxfZnJvbV9xdWVyeShQbGFubmVySW5m byAqcm9vdCwgaW50IHJlbGlkLCBTcGVjaWFsSm9pbkluZm8gKnNqaW5mbykKIAkJc2ppbmYt Pm1pbl9yaWdodGhhbmQgPSBibXNfY29weShzamluZi0+bWluX3JpZ2h0aGFuZCk7CiAJCXNq aW5mLT5zeW5fbGVmdGhhbmQgPSBibXNfY29weShzamluZi0+c3luX2xlZnRoYW5kKTsKIAkJ c2ppbmYtPnN5bl9yaWdodGhhbmQgPSBibXNfY29weShzamluZi0+c3luX3JpZ2h0aGFuZCk7 Ci0JCS8qIE5vdyByZW1vdmUgcmVsaWQgYW5kIG9qcmVsaWQgYml0cyBmcm9tIHRoZSBzZXRz OiAqLwotCQlzamluZi0+bWluX2xlZnRoYW5kID0gYm1zX2RlbF9tZW1iZXIoc2ppbmYtPm1p bl9sZWZ0aGFuZCwgcmVsaWQpOwotCQlzamluZi0+bWluX3JpZ2h0aGFuZCA9IGJtc19kZWxf bWVtYmVyKHNqaW5mLT5taW5fcmlnaHRoYW5kLCByZWxpZCk7Ci0JCXNqaW5mLT5zeW5fbGVm dGhhbmQgPSBibXNfZGVsX21lbWJlcihzamluZi0+c3luX2xlZnRoYW5kLCByZWxpZCk7Ci0J CXNqaW5mLT5zeW5fcmlnaHRoYW5kID0gYm1zX2RlbF9tZW1iZXIoc2ppbmYtPnN5bl9yaWdo dGhhbmQsIHJlbGlkKTsKLQkJc2ppbmYtPm1pbl9sZWZ0aGFuZCA9IGJtc19kZWxfbWVtYmVy KHNqaW5mLT5taW5fbGVmdGhhbmQsIG9qcmVsaWQpOwotCQlzamluZi0+bWluX3JpZ2h0aGFu ZCA9IGJtc19kZWxfbWVtYmVyKHNqaW5mLT5taW5fcmlnaHRoYW5kLCBvanJlbGlkKTsKLQkJ c2ppbmYtPnN5bl9sZWZ0aGFuZCA9IGJtc19kZWxfbWVtYmVyKHNqaW5mLT5zeW5fbGVmdGhh bmQsIG9qcmVsaWQpOwotCQlzamluZi0+c3luX3JpZ2h0aGFuZCA9IGJtc19kZWxfbWVtYmVy KHNqaW5mLT5zeW5fcmlnaHRoYW5kLCBvanJlbGlkKTsKLQkJLyogcmVsaWQgY2Fubm90IGFw cGVhciBpbiB0aGVzZSBmaWVsZHMsIGJ1dCBvanJlbGlkIGNhbjogKi8KLQkJc2ppbmYtPmNv bW11dGVfYWJvdmVfbCA9IGJtc19kZWxfbWVtYmVyKHNqaW5mLT5jb21tdXRlX2Fib3ZlX2ws IG9qcmVsaWQpOwotCQlzamluZi0+Y29tbXV0ZV9hYm92ZV9yID0gYm1zX2RlbF9tZW1iZXIo c2ppbmYtPmNvbW11dGVfYWJvdmVfciwgb2pyZWxpZCk7Ci0JCXNqaW5mLT5jb21tdXRlX2Jl bG93X2wgPSBibXNfZGVsX21lbWJlcihzamluZi0+Y29tbXV0ZV9iZWxvd19sLCBvanJlbGlk KTsKLQkJc2ppbmYtPmNvbW11dGVfYmVsb3dfciA9IGJtc19kZWxfbWVtYmVyKHNqaW5mLT5j b21tdXRlX2JlbG93X3IsIG9qcmVsaWQpOworCQkvKiBOb3cgcmVtb3ZlIHJlbGlkIGZyb20g dGhlIHNldHM6ICovCisJCXNqaW5mLT5taW5fbGVmdGhhbmQgPSByZXBsYWNlX3JlbGlkKHNq aW5mLT5taW5fbGVmdGhhbmQsIHJlbGlkLCBzdWJzdCk7CisJCXNqaW5mLT5taW5fcmlnaHRo YW5kID0gcmVwbGFjZV9yZWxpZChzamluZi0+bWluX3JpZ2h0aGFuZCwgcmVsaWQsIHN1YnN0 KTsKKwkJc2ppbmYtPnN5bl9sZWZ0aGFuZCA9IHJlcGxhY2VfcmVsaWQoc2ppbmYtPnN5bl9s ZWZ0aGFuZCwgcmVsaWQsIHN1YnN0KTsKKwkJc2ppbmYtPnN5bl9yaWdodGhhbmQgPSByZXBs YWNlX3JlbGlkKHNqaW5mLT5zeW5fcmlnaHRoYW5kLCByZWxpZCwgc3Vic3QpOworCisJCWlm IChzamluZm8gIT0gTlVMTCkKKwkJeworCQkJQXNzZXJ0KHN1YnN0IDw9IDAgJiYgb2pyZWxp ZCA+IDApOworCisJCQkvKiBSZW1vdmUgb2pyZWxpZCBiaXRzIGZyb20gdGhlIHNldHM6ICov CisJCQlzamluZi0+bWluX2xlZnRoYW5kID0gYm1zX2RlbF9tZW1iZXIoc2ppbmYtPm1pbl9s ZWZ0aGFuZCwgb2pyZWxpZCk7CisJCQlzamluZi0+bWluX3JpZ2h0aGFuZCA9IGJtc19kZWxf bWVtYmVyKHNqaW5mLT5taW5fcmlnaHRoYW5kLCBvanJlbGlkKTsKKwkJCXNqaW5mLT5zeW5f bGVmdGhhbmQgPSBibXNfZGVsX21lbWJlcihzamluZi0+c3luX2xlZnRoYW5kLCBvanJlbGlk KTsKKwkJCXNqaW5mLT5zeW5fcmlnaHRoYW5kID0gYm1zX2RlbF9tZW1iZXIoc2ppbmYtPnN5 bl9yaWdodGhhbmQsIG9qcmVsaWQpOworCQkJLyogcmVsaWQgY2Fubm90IGFwcGVhciBpbiB0 aGVzZSBmaWVsZHMsIGJ1dCBvanJlbGlkIGNhbjogKi8KKwkJCXNqaW5mLT5jb21tdXRlX2Fi b3ZlX2wgPSBibXNfZGVsX21lbWJlcihzamluZi0+Y29tbXV0ZV9hYm92ZV9sLCBvanJlbGlk KTsKKwkJCXNqaW5mLT5jb21tdXRlX2Fib3ZlX3IgPSBibXNfZGVsX21lbWJlcihzamluZi0+ Y29tbXV0ZV9hYm92ZV9yLCBvanJlbGlkKTsKKwkJCXNqaW5mLT5jb21tdXRlX2JlbG93X2wg PSBibXNfZGVsX21lbWJlcihzamluZi0+Y29tbXV0ZV9iZWxvd19sLCBvanJlbGlkKTsKKwkJ CXNqaW5mLT5jb21tdXRlX2JlbG93X3IgPSBibXNfZGVsX21lbWJlcihzamluZi0+Y29tbXV0 ZV9iZWxvd19yLCBvanJlbGlkKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCUFzc2VydChzdWJz dCA+IDAgJiYgb2pyZWxpZCA9PSAtMSk7CisKKwkJCUNoYW5nZVZhck5vZGVzKChOb2RlICop IHNqaW5mLT5zZW1pX3Joc19leHBycywgcmVsaWQsIHN1YnN0LCAwKTsKKwkJfQogCX0KIAog CS8qCkBAIC0zNzUsMTAgKzQwNCwxMCBAQCByZW1vdmVfcmVsX2Zyb21fcXVlcnkoUGxhbm5l ckluZm8gKnJvb3QsIGludCByZWxpZCwgU3BlY2lhbEpvaW5JbmZvICpzamluZm8pCiAJewog CQlQbGFjZUhvbGRlckluZm8gKnBoaW5mbyA9IChQbGFjZUhvbGRlckluZm8gKikgbGZpcnN0 KGwpOwogCi0JCUFzc2VydCghYm1zX2lzX21lbWJlcihyZWxpZCwgcGhpbmZvLT5waF9sYXRl cmFsKSk7CisJCUFzc2VydChzamluZm8gPT0gTlVMTCB8fCAhYm1zX2lzX21lbWJlcihyZWxp ZCwgcGhpbmZvLT5waF9sYXRlcmFsKSk7CiAJCWlmIChibXNfaXNfc3Vic2V0KHBoaW5mby0+ cGhfbmVlZGVkLCBqb2lucmVsaWRzKSAmJgogCQkJYm1zX2lzX21lbWJlcihyZWxpZCwgcGhp bmZvLT5waF9ldmFsX2F0KSAmJgotCQkJIWJtc19pc19tZW1iZXIob2pyZWxpZCwgcGhpbmZv LT5waF9ldmFsX2F0KSkKKwkJCShzamluZm8gPT0gTlVMTCB8fCAhYm1zX2lzX21lbWJlcihv anJlbGlkLCBwaGluZm8tPnBoX2V2YWxfYXQpKSkKIAkJewogCQkJcm9vdC0+cGxhY2Vob2xk ZXJfbGlzdCA9IGZvcmVhY2hfZGVsZXRlX2N1cnJlbnQocm9vdC0+cGxhY2Vob2xkZXJfbGlz dCwKIAkJCQkJCQkJCQkJCQkJCWwpOwpAQCAtMzg4LDIxICs0MTcsMTExIEBAIHJlbW92ZV9y ZWxfZnJvbV9xdWVyeShQbGFubmVySW5mbyAqcm9vdCwgaW50IHJlbGlkLCBTcGVjaWFsSm9p bkluZm8gKnNqaW5mbykKIAkJewogCQkJUGxhY2VIb2xkZXJWYXIgKnBodiA9IHBoaW5mby0+ cGhfdmFyOwogCi0JCQlwaGluZm8tPnBoX2V2YWxfYXQgPSBibXNfZGVsX21lbWJlcihwaGlu Zm8tPnBoX2V2YWxfYXQsIHJlbGlkKTsKLQkJCXBoaW5mby0+cGhfZXZhbF9hdCA9IGJtc19k ZWxfbWVtYmVyKHBoaW5mby0+cGhfZXZhbF9hdCwgb2pyZWxpZCk7CisJCQlwaGluZm8tPnBo X2V2YWxfYXQgPSByZXBsYWNlX3JlbGlkKHBoaW5mby0+cGhfZXZhbF9hdCwgcmVsaWQsIHN1 YnN0KTsKKwkJCXBoaW5mby0+cGhfZXZhbF9hdCA9IHJlcGxhY2VfcmVsaWQocGhpbmZvLT5w aF9ldmFsX2F0LCBvanJlbGlkLCBzdWJzdCk7CiAJCQlBc3NlcnQoIWJtc19pc19lbXB0eShw aGluZm8tPnBoX2V2YWxfYXQpKTsJLyogY2hlY2tlZCBwcmV2aW91c2x5ICovCiAJCQkvKiBS ZWR1Y2UgcGhfbmVlZGVkIHRvIGNvbnRhaW4gb25seSAicmVsYXRpb24gMCI7IHNlZSBiZWxv dyAqLwogCQkJaWYgKGJtc19pc19tZW1iZXIoMCwgcGhpbmZvLT5waF9uZWVkZWQpKQogCQkJ CXBoaW5mby0+cGhfbmVlZGVkID0gYm1zX21ha2Vfc2luZ2xldG9uKDApOwogCQkJZWxzZQog CQkJCXBoaW5mby0+cGhfbmVlZGVkID0gTlVMTDsKLQkJCXBodi0+cGhyZWxzID0gYm1zX2Rl bF9tZW1iZXIocGh2LT5waHJlbHMsIHJlbGlkKTsKLQkJCXBodi0+cGhyZWxzID0gYm1zX2Rl bF9tZW1iZXIocGh2LT5waHJlbHMsIG9qcmVsaWQpOworCisJCQlwaGluZm8tPnBoX2xhdGVy YWwgPSByZXBsYWNlX3JlbGlkKHBoaW5mby0+cGhfbGF0ZXJhbCwgcmVsaWQsIHN1YnN0KTsK KwkJCS8qCisJCQkgKiBwaF9sYXRlcmFsIG1pZ2h0IGNvbnRhaW4gcmVscyBtZW50aW9uZWQg aW4gcGhfZXZhbF9hdCBhZnRlciB0aGUKKwkJCSAqIHJlcGxhY2VtZW50LCByZW1vdmUgdGhl bS4KKwkJCSAqLworCQkJcGhpbmZvLT5waF9sYXRlcmFsID0gYm1zX2RpZmZlcmVuY2UocGhp bmZvLT5waF9sYXRlcmFsLCBwaGluZm8tPnBoX2V2YWxfYXQpOworCQkJLyogcGhfbGF0ZXJh bCBtaWdodCBvciBtaWdodCBub3QgYmUgZW1wdHkgKi8KKworCQkJcGh2LT5waHJlbHMgPSBy ZXBsYWNlX3JlbGlkKHBodi0+cGhyZWxzLCByZWxpZCwgc3Vic3QpOworCQkJcGh2LT5waHJl bHMgPSByZXBsYWNlX3JlbGlkKHBodi0+cGhyZWxzLCBvanJlbGlkLCBzdWJzdCk7CiAJCQlB c3NlcnQoIWJtc19pc19lbXB0eShwaHYtPnBocmVscykpOworCisJCQlDaGFuZ2VWYXJOb2Rl cygoTm9kZSAqKSBwaHYtPnBoZXhwciwgcmVsaWQsIHN1YnN0LCAwKTsKKwogCQkJQXNzZXJ0 KHBodi0+cGhudWxsaW5ncmVscyA9PSBOVUxMKTsgLyogbm8gbmVlZCB0byBhZGp1c3QgKi8K IAkJfQogCX0KIAorCS8qCisJICogTGlrZXdpc2UgcmVtb3ZlIHJlZmVyZW5jZXMgZnJvbSBF cXVpdmFsZW5jZUNsYXNzZXMuCisJICovCisJZm9yZWFjaChsLCByb290LT5lcV9jbGFzc2Vz KQorCXsKKwkJRXF1aXZhbGVuY2VDbGFzcyAqZWMgPSAoRXF1aXZhbGVuY2VDbGFzcyAqKSBs Zmlyc3QobCk7CisKKwkJaWYgKGJtc19pc19tZW1iZXIocmVsaWQsIGVjLT5lY19yZWxpZHMp IHx8CisJCQkoc2ppbmZvID09IE5VTEwgfHwgYm1zX2lzX21lbWJlcihvanJlbGlkLCBlYy0+ ZWNfcmVsaWRzKSkpCisJCQlyZW1vdmVfcmVsX2Zyb21fZWNsYXNzKGVjLCByZWxpZCwgb2py ZWxpZCwgc3Vic3QpOworCX0KKworCS8qCisJICogRmluYWxseSwgd2UgbXVzdCByZWNvbXB1 dGUgcGVyLVZhciBhdHRyX25lZWRlZCBhbmQgcGVyLVBsYWNlSG9sZGVyVmFyCisJICogcGhf bmVlZGVkIHJlbGlkIHNldHMuICBUaGVzZSBoYXZlIHRvIGJlIGtub3duIGFjY3VyYXRlbHks IGVsc2Ugd2UgbWF5CisJICogZmFpbCB0byByZW1vdmUgb3RoZXIgbm93LXJlbW92YWJsZSBv dXRlciBqb2lucy4gIEFuZCBvdXIgcmVtb3ZhbCBvZiB0aGUKKwkgKiBqb2luIGNsYXVzZShz KSBmb3IgdGhpcyBvdXRlciBqb2luIG1heSBtZWFuIHRoYXQgVmFycyB0aGF0IHdlcmUKKwkg KiBmb3JtZXJseSBuZWVkZWQgbm8gbG9uZ2VyIGFyZS4gIFNvIHdlIGhhdmUgdG8gZG8gdGhp cyBob25lc3RseSBieQorCSAqIHJlcGVhdGluZyB0aGUgY29uc3RydWN0aW9uIG9mIHRob3Nl IHJlbGlkIHNldHMuICBXZSBjYW4gY2hlYXQgdG8gb25lCisJICogc21hbGwgZXh0ZW50OiB3 ZSBjYW4gYXZvaWQgcmUtZXhhbWluaW5nIHRoZSB0YXJnZXRsaXN0IGFuZCBIQVZJTkcgcXVh bAorCSAqIGJ5IHByZXNlcnZpbmcgInJlbGF0aW9uIDAiIGJpdHMgZnJvbSB0aGUgZXhpc3Rp bmcgcmVsaWQgc2V0cy4gIFRoaXMgaXMKKwkgKiBzYWZlIGJlY2F1c2Ugd2UnZCBuZXZlciBy ZW1vdmUgc3VjaCByZWZlcmVuY2VzLgorCSAqCisJICogU28sIHN0YXJ0IGJ5IHJlbW92aW5n IGFsbCBvdGhlciBiaXRzIGZyb20gYXR0cl9uZWVkZWQgc2V0cyBhbmQKKwkgKiBsYXRlcmFs X3ZhcnMgbGlzdHMuICAoV2UgYWxyZWFkeSBkaWQgdGhpcyBhYm92ZSBmb3IgcGhfbmVlZGVk LikKKwkgKi8KKwlmb3IgKHJ0aSA9IDE7IHJ0aSA8IHJvb3QtPnNpbXBsZV9yZWxfYXJyYXlf c2l6ZTsgcnRpKyspCisJeworCQlSZWxPcHRJbmZvICpvdGhlcnJlbCA9IHJvb3QtPnNpbXBs ZV9yZWxfYXJyYXlbcnRpXTsKKwkJaW50CQkJYXR0cm9mZjsKKworCQkvKiB0aGVyZSBtYXkg YmUgZW1wdHkgc2xvdHMgY29ycmVzcG9uZGluZyB0byBub24tYmFzZXJlbCBSVEVzICovCisJ CWlmIChvdGhlcnJlbCA9PSBOVUxMKQorCQkJY29udGludWU7CisKKwkJQXNzZXJ0KG90aGVy cmVsLT5yZWxpZCA9PSBydGkpOyAvKiBzYW5pdHkgY2hlY2sgb24gYXJyYXkgKi8KKworCQlm b3IgKGF0dHJvZmYgPSBvdGhlcnJlbC0+bWF4X2F0dHIgLSBvdGhlcnJlbC0+bWluX2F0dHI7 CisJCQkgYXR0cm9mZiA+PSAwOworCQkJIGF0dHJvZmYtLSkKKwkJeworCQkJaWYgKGJtc19p c19tZW1iZXIoMCwgb3RoZXJyZWwtPmF0dHJfbmVlZGVkW2F0dHJvZmZdKSkKKwkJCQlvdGhl cnJlbC0+YXR0cl9uZWVkZWRbYXR0cm9mZl0gPSBibXNfbWFrZV9zaW5nbGV0b24oMCk7CisJ CQllbHNlCisJCQkJb3RoZXJyZWwtPmF0dHJfbmVlZGVkW2F0dHJvZmZdID0gTlVMTDsKKwkJ fQorCisJCWlmIChzdWJzdCA+IDApCisJCQlDaGFuZ2VWYXJOb2RlcygoTm9kZSAqKSBvdGhl cnJlbC0+bGF0ZXJhbF92YXJzLCByZWxpZCwgc3Vic3QsIDApOworCX0KK30KKworLyoKKyAq IFJlbW92ZSB0aGUgdGFyZ2V0IHJlbGlkIGFuZCByZWZlcmVuY2VzIHRvIHRoZSB0YXJnZXQg am9pbiBmcm9tIHRoZQorICogcGxhbm5lcidzIGRhdGEgc3RydWN0dXJlcywgaGF2aW5nIGRl dGVybWluZWQgdGhhdCB0aGVyZSBpcyBubyBuZWVkCisgKiB0byBpbmNsdWRlIHRoZW0gaW4g dGhlIHF1ZXJ5LgorICoKKyAqIFdlIGFyZSBub3QgdGVycmlibHkgdGhvcm91Z2ggaGVyZS4g IFdlIG9ubHkgYm90aGVyIHRvIHVwZGF0ZSBwYXJ0cyBvZgorICogdGhlIHBsYW5uZXIncyBk YXRhIHN0cnVjdHVyZXMgdGhhdCB3aWxsIGFjdHVhbGx5IGJlIGNvbnN1bHRlZCBsYXRlci4K KyAqLworc3RhdGljIHZvaWQKK3JlbW92ZV9sZWZ0am9pbnJlbF9mcm9tX3F1ZXJ5KFBsYW5u ZXJJbmZvICpyb290LCBpbnQgcmVsaWQsCisJCQkJCQkJICBTcGVjaWFsSm9pbkluZm8gKnNq aW5mbykKK3sKKwlSZWxPcHRJbmZvICpyZWwgPSBmaW5kX2Jhc2VfcmVsKHJvb3QsIHJlbGlk KTsKKwlpbnQJCQlvanJlbGlkID0gc2ppbmZvLT5vanJlbGlkOworCVJlbGlkcwkJam9pbnJl bGlkczsKKwlSZWxpZHMJCWpvaW5fcGx1c19jb21tdXRlOworCUxpc3QJICAgKmpvaW5pbmZv czsKKwlMaXN0Q2VsbCAgICpsOworCisJLyogQ29tcHV0ZSB0aGUgcmVsaWQgc2V0IGZvciB0 aGUgam9pbiB3ZSBhcmUgY29uc2lkZXJpbmcgKi8KKwlqb2lucmVsaWRzID0gYm1zX3VuaW9u KHNqaW5mby0+bWluX2xlZnRoYW5kLCBzamluZm8tPm1pbl9yaWdodGhhbmQpOworCUFzc2Vy dChvanJlbGlkICE9IDApOworCWpvaW5yZWxpZHMgPSBibXNfYWRkX21lbWJlcihqb2lucmVs aWRzLCBvanJlbGlkKTsKKworCXJlbW92ZV9yZWxfZnJvbV9xdWVyeShyb290LCByZWwsIC0x LCBzamluZm8sIGpvaW5yZWxpZHMpOworCiAJLyoKIAkgKiBSZW1vdmUgYW55IGpvaW5xdWFs cyByZWZlcmVuY2luZyB0aGUgcmVsIGZyb20gdGhlIGpvaW5pbmZvIGxpc3RzLgogCSAqCkBA IC00NjUsMTggKzU4NCw2IEBAIHJlbW92ZV9yZWxfZnJvbV9xdWVyeShQbGFubmVySW5mbyAq cm9vdCwgaW50IHJlbGlkLCBTcGVjaWFsSm9pbkluZm8gKnNqaW5mbykKIAkJfQogCX0KIAot CS8qCi0JICogTGlrZXdpc2UgcmVtb3ZlIHJlZmVyZW5jZXMgZnJvbSBFcXVpdmFsZW5jZUNs YXNzZXMuCi0JICovCi0JZm9yZWFjaChsLCByb290LT5lcV9jbGFzc2VzKQotCXsKLQkJRXF1 aXZhbGVuY2VDbGFzcyAqZWMgPSAoRXF1aXZhbGVuY2VDbGFzcyAqKSBsZmlyc3QobCk7Ci0K LQkJaWYgKGJtc19pc19tZW1iZXIocmVsaWQsIGVjLT5lY19yZWxpZHMpIHx8Ci0JCQlibXNf aXNfbWVtYmVyKG9qcmVsaWQsIGVjLT5lY19yZWxpZHMpKQotCQkJcmVtb3ZlX3JlbF9mcm9t X2VjbGFzcyhlYywgcmVsaWQsIG9qcmVsaWQpOwotCX0KLQogCS8qCiAJICogVGhlcmUgbWF5 IGJlIHJlZmVyZW5jZXMgdG8gdGhlIHJlbCBpbiByb290LT5ma2V5X2xpc3QsIGJ1dCBpZiBz bywKIAkgKiBtYXRjaF9mb3JlaWduX2tleXNfdG9fcXVhbHMoKSB3aWxsIGdldCByaWQgb2Yg dGhlbS4KQEAgLTQ5Miw0MiArNTk5LDYgQEAgcmVtb3ZlX3JlbF9mcm9tX3F1ZXJ5KFBsYW5u ZXJJbmZvICpyb290LCBpbnQgcmVsaWQsIFNwZWNpYWxKb2luSW5mbyAqc2ppbmZvKQogCS8q IEFuZCBudWtlIHRoZSBSZWxPcHRJbmZvLCBqdXN0IGluIGNhc2UgdGhlcmUncyBhbm90aGVy IGFjY2VzcyBwYXRoICovCiAJcGZyZWUocmVsKTsKIAotCS8qCi0JICogRmluYWxseSwgd2Ug bXVzdCByZWNvbXB1dGUgcGVyLVZhciBhdHRyX25lZWRlZCBhbmQgcGVyLVBsYWNlSG9sZGVy VmFyCi0JICogcGhfbmVlZGVkIHJlbGlkIHNldHMuICBUaGVzZSBoYXZlIHRvIGJlIGtub3du IGFjY3VyYXRlbHksIGVsc2Ugd2UgbWF5Ci0JICogZmFpbCB0byByZW1vdmUgb3RoZXIgbm93 LXJlbW92YWJsZSBvdXRlciBqb2lucy4gIEFuZCBvdXIgcmVtb3ZhbCBvZiB0aGUKLQkgKiBq b2luIGNsYXVzZShzKSBmb3IgdGhpcyBvdXRlciBqb2luIG1heSBtZWFuIHRoYXQgVmFycyB0 aGF0IHdlcmUKLQkgKiBmb3JtZXJseSBuZWVkZWQgbm8gbG9uZ2VyIGFyZS4gIFNvIHdlIGhh dmUgdG8gZG8gdGhpcyBob25lc3RseSBieQotCSAqIHJlcGVhdGluZyB0aGUgY29uc3RydWN0 aW9uIG9mIHRob3NlIHJlbGlkIHNldHMuICBXZSBjYW4gY2hlYXQgdG8gb25lCi0JICogc21h bGwgZXh0ZW50OiB3ZSBjYW4gYXZvaWQgcmUtZXhhbWluaW5nIHRoZSB0YXJnZXRsaXN0IGFu ZCBIQVZJTkcgcXVhbAotCSAqIGJ5IHByZXNlcnZpbmcgInJlbGF0aW9uIDAiIGJpdHMgZnJv bSB0aGUgZXhpc3RpbmcgcmVsaWQgc2V0cy4gIFRoaXMgaXMKLQkgKiBzYWZlIGJlY2F1c2Ug d2UnZCBuZXZlciByZW1vdmUgc3VjaCByZWZlcmVuY2VzLgotCSAqCi0JICogU28sIHN0YXJ0 IGJ5IHJlbW92aW5nIGFsbCBvdGhlciBiaXRzIGZyb20gYXR0cl9uZWVkZWQgc2V0cy4gIChX ZQotCSAqIGFscmVhZHkgZGlkIHRoaXMgYWJvdmUgZm9yIHBoX25lZWRlZC4pCi0JICovCi0J Zm9yIChydGkgPSAxOyBydGkgPCByb290LT5zaW1wbGVfcmVsX2FycmF5X3NpemU7IHJ0aSsr KQotCXsKLQkJUmVsT3B0SW5mbyAqb3RoZXJyZWwgPSByb290LT5zaW1wbGVfcmVsX2FycmF5 W3J0aV07Ci0JCWludAkJCWF0dHJvZmY7Ci0KLQkJLyogdGhlcmUgbWF5IGJlIGVtcHR5IHNs b3RzIGNvcnJlc3BvbmRpbmcgdG8gbm9uLWJhc2VyZWwgUlRFcyAqLwotCQlpZiAob3RoZXJy ZWwgPT0gTlVMTCkKLQkJCWNvbnRpbnVlOwotCi0JCUFzc2VydChvdGhlcnJlbC0+cmVsaWQg PT0gcnRpKTsgLyogc2FuaXR5IGNoZWNrIG9uIGFycmF5ICovCi0KLQkJZm9yIChhdHRyb2Zm ID0gb3RoZXJyZWwtPm1heF9hdHRyIC0gb3RoZXJyZWwtPm1pbl9hdHRyOwotCQkJIGF0dHJv ZmYgPj0gMDsKLQkJCSBhdHRyb2ZmLS0pCi0JCXsKLQkJCWlmIChibXNfaXNfbWVtYmVyKDAs IG90aGVycmVsLT5hdHRyX25lZWRlZFthdHRyb2ZmXSkpCi0JCQkJb3RoZXJyZWwtPmF0dHJf bmVlZGVkW2F0dHJvZmZdID0gYm1zX21ha2Vfc2luZ2xldG9uKDApOwotCQkJZWxzZQotCQkJ CW90aGVycmVsLT5hdHRyX25lZWRlZFthdHRyb2ZmXSA9IE5VTEw7Ci0JCX0KLQl9Ci0KIAkv KgogCSAqIE5vdyByZXBlYXQgY29uc3RydWN0aW9uIG9mIGF0dHJfbmVlZGVkIGJpdHMgY29t aW5nIGZyb20gYWxsIG90aGVyCiAJICogc291cmNlcy4KQEAgLTYwNywxMyArNjc4LDEzIEBA IHJlbW92ZV9yZWxfZnJvbV9yZXN0cmljdGluZm8oUmVzdHJpY3RJbmZvICpyaW5mbywgaW50 IHJlbGlkLCBpbnQgb2pyZWxpZCkKICAqIGxldmVsKHMpLgogICovCiBzdGF0aWMgdm9pZAot cmVtb3ZlX3JlbF9mcm9tX2VjbGFzcyhFcXVpdmFsZW5jZUNsYXNzICplYywgaW50IHJlbGlk LCBpbnQgb2pyZWxpZCkKK3JlbW92ZV9yZWxfZnJvbV9lY2xhc3MoRXF1aXZhbGVuY2VDbGFz cyAqZWMsIGludCByZWxpZCwgaW50IG9qcmVsaWQsIGludCBzdWJzdCkKIHsKIAlMaXN0Q2Vs bCAgICpsYzsKIAogCS8qIEZpeCB1cCB0aGUgRUMncyBvdmVyYWxsIHJlbGlkcyAqLwotCWVj LT5lY19yZWxpZHMgPSBibXNfZGVsX21lbWJlcihlYy0+ZWNfcmVsaWRzLCByZWxpZCk7Ci0J ZWMtPmVjX3JlbGlkcyA9IGJtc19kZWxfbWVtYmVyKGVjLT5lY19yZWxpZHMsIG9qcmVsaWQp OworCWVjLT5lY19yZWxpZHMgPSByZXBsYWNlX3JlbGlkKGVjLT5lY19yZWxpZHMsIHJlbGlk LCBzdWJzdCk7CisJZWMtPmVjX3JlbGlkcyA9IHJlcGxhY2VfcmVsaWQoZWMtPmVjX3JlbGlk cywgb2pyZWxpZCwgc3Vic3QpOwogCiAJLyoKIAkgKiBGaXggdXAgdGhlIG1lbWJlciBleHBy ZXNzaW9ucy4gIEFueSBub24tY29uc3QgbWVtYmVyIHRoYXQgZW5kcyB3aXRoCkBAIC02MjUs MTEgKzY5NiwxMSBAQCByZW1vdmVfcmVsX2Zyb21fZWNsYXNzKEVxdWl2YWxlbmNlQ2xhc3Mg KmVjLCBpbnQgcmVsaWQsIGludCBvanJlbGlkKQogCQlFcXVpdmFsZW5jZU1lbWJlciAqY3Vy X2VtID0gKEVxdWl2YWxlbmNlTWVtYmVyICopIGxmaXJzdChsYyk7CiAKIAkJaWYgKGJtc19p c19tZW1iZXIocmVsaWQsIGN1cl9lbS0+ZW1fcmVsaWRzKSB8fAotCQkJYm1zX2lzX21lbWJl cihvanJlbGlkLCBjdXJfZW0tPmVtX3JlbGlkcykpCisJCQkob2pyZWxpZCAhPSAtMSAmJiBi bXNfaXNfbWVtYmVyKG9qcmVsaWQsIGN1cl9lbS0+ZW1fcmVsaWRzKSkpCiAJCXsKIAkJCUFz c2VydCghY3VyX2VtLT5lbV9pc19jb25zdCk7Ci0JCQljdXJfZW0tPmVtX3JlbGlkcyA9IGJt c19kZWxfbWVtYmVyKGN1cl9lbS0+ZW1fcmVsaWRzLCByZWxpZCk7Ci0JCQljdXJfZW0tPmVt X3JlbGlkcyA9IGJtc19kZWxfbWVtYmVyKGN1cl9lbS0+ZW1fcmVsaWRzLCBvanJlbGlkKTsK KwkJCWN1cl9lbS0+ZW1fcmVsaWRzID0gcmVwbGFjZV9yZWxpZChjdXJfZW0tPmVtX3JlbGlk cywgcmVsaWQsIHN1YnN0KTsKKwkJCWN1cl9lbS0+ZW1fcmVsaWRzID0gcmVwbGFjZV9yZWxp ZChjdXJfZW0tPmVtX3JlbGlkcywgb2pyZWxpZCwgc3Vic3QpOwogCQkJaWYgKGJtc19pc19l bXB0eShjdXJfZW0tPmVtX3JlbGlkcykpCiAJCQkJZWMtPmVjX21lbWJlcnMgPSBmb3JlYWNo X2RlbGV0ZV9jdXJyZW50KGVjLT5lY19tZW1iZXJzLCBsYyk7CiAJCX0KQEAgLTY0MCw3ICs3 MTEsMTAgQEAgcmVtb3ZlX3JlbF9mcm9tX2VjbGFzcyhFcXVpdmFsZW5jZUNsYXNzICplYywg aW50IHJlbGlkLCBpbnQgb2pyZWxpZCkKIAl7CiAJCVJlc3RyaWN0SW5mbyAqcmluZm8gPSAo UmVzdHJpY3RJbmZvICopIGxmaXJzdChsYyk7CiAKLQkJcmVtb3ZlX3JlbF9mcm9tX3Jlc3Ry aWN0aW5mbyhyaW5mbywgcmVsaWQsIG9qcmVsaWQpOworCQlpZiAob2pyZWxpZCA9PSAtMSkK KwkJCUNoYW5nZVZhck5vZGVzKChOb2RlICopIHJpbmZvLCByZWxpZCwgc3Vic3QsIDApOwor CQllbHNlCisJCQlyZW1vdmVfcmVsX2Zyb21fcmVzdHJpY3RpbmZvKHJpbmZvLCByZWxpZCwg b2pyZWxpZCk7CiAJfQogCiAJLyoKQEAgLTg0NCw5ICs5MTgsMTQgQEAgcmVsX3N1cHBvcnRz X2Rpc3RpbmN0bmVzcyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsKQogICog Tm90ZSB0aGF0IHRoZSBwYXNzZWQtaW4gY2xhdXNlX2xpc3QgbWF5IGJlIGRlc3RydWN0aXZl bHkgbW9kaWZpZWQhICBUaGlzCiAgKiBpcyBPSyBmb3IgY3VycmVudCB1c2VzLCBiZWNhdXNl IHRoZSBjbGF1c2VfbGlzdCBpcyBidWlsdCBieSB0aGUgY2FsbGVyIGZvcgogICogdGhlIHNv bGUgcHVycG9zZSBvZiBwYXNzaW5nIHRvIHRoaXMgZnVuY3Rpb24uCisgKgorICogZXh0cmFf Y2xhdXNlcyBjb250YWlucyB0aGUgcmlnaHQgc2lkZXMgb2YgYmFzZXJlc3RyaWN0aW5mbyBj bGF1c2VzIGxvb2tpbmcKKyAqIGxpa2UgeCA9IGNvbnN0IGlmIGRpc3RpbmN0bmVzcyBpcyBk ZXJpdmVkIGZyb20gc3VjaCBjbGF1c2VzLCBub3Qgam9pbmluZm8KKyAqIGNsYXVzZS4gIFBh c3MgTlVMTCB0byB0aGUgZXh0cmFfY2xhdXNlcywgaWYgaXRzIHZhbHVlIGlzIG5vdCBuZWVk ZWQuCiAgKi8KIHN0YXRpYyBib29sCi1yZWxfaXNfZGlzdGluY3RfZm9yKFBsYW5uZXJJbmZv ICpyb290LCBSZWxPcHRJbmZvICpyZWwsIExpc3QgKmNsYXVzZV9saXN0KQorcmVsX2lzX2Rp c3RpbmN0X2ZvcihQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLCBMaXN0ICpj bGF1c2VfbGlzdCwKKwkJCQkJTGlzdCAqKmV4dHJhX2NsYXVzZXMpCiB7CiAJLyoKIAkgKiBX ZSBjb3VsZCBza2lwIGEgY291cGxlIG9mIHRlc3RzIGhlcmUgaWYgd2UgYXNzdW1lIGFsbCBj YWxsZXJzIGNoZWNrZWQKQEAgLTg1OSwxMCArOTM4LDExIEBAIHJlbF9pc19kaXN0aW5jdF9m b3IoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwgTGlzdCAqY2xhdXNlX2xp c3QpCiAJewogCQkvKgogCQkgKiBFeGFtaW5lIHRoZSBpbmRleGVzIHRvIHNlZSBpZiB3ZSBo YXZlIGEgbWF0Y2hpbmcgdW5pcXVlIGluZGV4LgotCQkgKiByZWxhdGlvbl9oYXNfdW5pcXVl X2luZGV4X2ZvciBhdXRvbWF0aWNhbGx5IGFkZHMgYW55IHVzYWJsZQorCQkgKiByZWxhdGlv bl9oYXNfdW5pcXVlX2luZGV4X2V4dCBhdXRvbWF0aWNhbGx5IGFkZHMgYW55IHVzYWJsZQog CQkgKiByZXN0cmljdGlvbiBjbGF1c2VzIGZvciB0aGUgcmVsLCBzbyB3ZSBuZWVkbid0IGRv IHRoYXQgaGVyZS4KIAkJICovCi0JCWlmIChyZWxhdGlvbl9oYXNfdW5pcXVlX2luZGV4X2Zv cihyb290LCByZWwsIGNsYXVzZV9saXN0LCBOSUwsIE5JTCkpCisJCWlmIChyZWxhdGlvbl9o YXNfdW5pcXVlX2luZGV4X2V4dChyb290LCByZWwsIGNsYXVzZV9saXN0LCBOSUwsIE5JTCwK KwkJCQkJCQkJCQkgIGV4dHJhX2NsYXVzZXMpKQogCQkJcmV0dXJuIHRydWU7CiAJfQogCWVs c2UgaWYgKHJlbC0+cnRla2luZCA9PSBSVEVfU1VCUVVFUlkpCkBAIC0xMTc2LDkgKzEyNTYs MzMgQEAgaW5uZXJyZWxfaXNfdW5pcXVlKFBsYW5uZXJJbmZvICpyb290LAogCQkJCSAgIEpv aW5UeXBlIGpvaW50eXBlLAogCQkJCSAgIExpc3QgKnJlc3RyaWN0bGlzdCwKIAkJCQkgICBi b29sIGZvcmNlX2NhY2hlKQoreworCXJldHVybiBpbm5lcnJlbF9pc191bmlxdWVfZXh0KHJv b3QsIGpvaW5yZWxpZHMsIG91dGVycmVsaWRzLCBpbm5lcnJlbCwKKwkJCQkJCQkJICBqb2lu dHlwZSwgcmVzdHJpY3RsaXN0LCBmb3JjZV9jYWNoZSwgTlVMTCk7Cit9CisKKy8qCisgKiBp bm5lcnJlbF9pc191bmlxdWVfZXh0CisgKgkgIERvIHRoZSBzYW1lIGFzIGlubmVycmVsX2lz X3VuaXF1ZSgpLCBidXQgYWxzbyBzZXQgdG8gJypleHRyYV9jbGF1c2VzJworICoJICBhZGRp dGlvbmFsIGNsYXVzZXMgZnJvbSBhIGJhc2VyZXN0cmljdGluZm8gbGlzdCB0aGF0IHdlcmUg dXNlZCB0byBwcm92ZQorICoJICB1bmlxdWVuZXNzLiAgQSBub24gTlVMTCAnZXh0cmFfY2xh dXNlcycgaW5kaWNhdGVzIHRoYXQgd2UncmUgY2hlY2tpbmcKKyAqCSAgZm9yIHNlbGYtam9p biBhbmQgY29ycmVzcG9uZGluZ2x5IGRlYWxpbmcgd2l0aCBmaWx0ZXJlZCBjbGF1c2VzLgor ICovCitib29sCitpbm5lcnJlbF9pc191bmlxdWVfZXh0KFBsYW5uZXJJbmZvICpyb290LAor CQkJCQkgICBSZWxpZHMgam9pbnJlbGlkcywKKwkJCQkJICAgUmVsaWRzIG91dGVycmVsaWRz LAorCQkJCQkgICBSZWxPcHRJbmZvICppbm5lcnJlbCwKKwkJCQkJICAgSm9pblR5cGUgam9p bnR5cGUsCisJCQkJCSAgIExpc3QgKnJlc3RyaWN0bGlzdCwKKwkJCQkJICAgYm9vbCBmb3Jj ZV9jYWNoZSwKKwkJCQkJICAgTGlzdCAqKmV4dHJhX2NsYXVzZXMpCiB7CiAJTWVtb3J5Q29u dGV4dCBvbGRfY29udGV4dDsKIAlMaXN0Q2VsbCAgICpsYzsKKwlVbmlxdWVSZWxJbmZvICp1 bmlxdWVSZWxJbmZvOworCUxpc3QJICAgKm91dGVyX2V4cHJzID0gTklMOworCWJvb2wJCXNl bGZfam9pbiA9IChleHRyYV9jbGF1c2VzICE9IE5VTEwpOwogCiAJLyogQ2VydGFpbmx5IGNh bid0IHByb3ZlIHVuaXF1ZW5lc3Mgd2hlbiB0aGVyZSBhcmUgbm8gam9pbmNsYXVzZXMgKi8K IAlpZiAocmVzdHJpY3RsaXN0ID09IE5JTCkKQEAgLTExOTMsMTcgKzEyOTcsMjggQEAgaW5u ZXJyZWxfaXNfdW5pcXVlKFBsYW5uZXJJbmZvICpyb290LAogCiAJLyoKIAkgKiBRdWVyeSB0 aGUgY2FjaGUgdG8gc2VlIGlmIHdlJ3ZlIG1hbmFnZWQgdG8gcHJvdmUgdGhhdCBpbm5lcnJl bCBpcwotCSAqIHVuaXF1ZSBmb3IgYW55IHN1YnNldCBvZiB0aGlzIG91dGVycmVsLiAgV2Ug ZG9uJ3QgbmVlZCBhbiBleGFjdCBtYXRjaCwKLQkgKiBhcyBleHRyYSBvdXRlcnJlbHMgY2Fu J3QgbWFrZSB0aGUgaW5uZXJyZWwgYW55IGxlc3MgdW5pcXVlIChvciBtb3JlCi0JICogZm9y bWFsbHksIHRoZSByZXN0cmljdGxpc3QgZm9yIGEgam9pbiB0byBhIHN1cGVyc2V0IG91dGVy cmVsIG11c3QgYmUgYQotCSAqIHN1cGVyc2V0IG9mIHRoZSBjb25kaXRpb25zIHdlIHN1Y2Nl c3NmdWxseSB1c2VkIGJlZm9yZSkuCisJICogdW5pcXVlIGZvciBhbnkgc3Vic2V0IG9mIHRo aXMgb3V0ZXJyZWwuICBGb3Igbm9uIHNlbGYtam9pbiBzZWFyY2gsIHdlCisJICogZG9uJ3Qg bmVlZCBhbiBleGFjdCBtYXRjaCwgYXMgZXh0cmEgb3V0ZXJyZWxzIGNhbid0IG1ha2UgdGhl IGlubmVycmVsCisJICogYW55IGxlc3MgdW5pcXVlIChvciBtb3JlIGZvcm1hbGx5LCB0aGUg cmVzdHJpY3RsaXN0IGZvciBhIGpvaW4gdG8gYQorCSAqIHN1cGVyc2V0IG91dGVycmVsIG11 c3QgYmUgYSBzdXBlcnNldCBvZiB0aGUgY29uZGl0aW9ucyB3ZSBzdWNjZXNzZnVsbHkKKwkg KiB1c2VkIGJlZm9yZSkuIEZvciBzZWxmLWpvaW4gc2VhcmNoLCB3ZSByZXF1aXJlIGFuIGV4 YWN0IG1hdGNoIG9mCisJICogb3V0ZXJyZWxzLCBiZWNhdXNlIHdlIG5lZWQgZXh0cmEgY2xh dXNlcyB0byBiZSB2YWxpZCBmb3Igb3VyIGNhc2UuCisJICogQWxzbywgZm9yIHNlbGYtam9p biBjaGVja2luZyB3ZSd2ZSBmaWx0ZXJlZCB0aGUgY2xhdXNlcyBsaXN0LiAgVGh1cywKKwkg KiBmb3IgYSBzZWxmLWpvaW4gc2VhcmNoLCB3ZSBjYW4gbWF0Y2ggb25seSB0aGUgcmVzdWx0 IGNhY2hlZCBmb3IgYW5vdGhlcgorCSAqIHNlbGYtam9pbiBjaGVjay4KIAkgKi8KIAlmb3Jl YWNoKGxjLCBpbm5lcnJlbC0+dW5pcXVlX2Zvcl9yZWxzKQogCXsKLQkJUmVsaWRzCQl1bmlx dWVfZm9yX3JlbHMgPSAoUmVsaWRzKSBsZmlyc3QobGMpOworCQl1bmlxdWVSZWxJbmZvID0g KFVuaXF1ZVJlbEluZm8gKikgbGZpcnN0KGxjKTsKIAotCQlpZiAoYm1zX2lzX3N1YnNldCh1 bmlxdWVfZm9yX3JlbHMsIG91dGVycmVsaWRzKSkKKwkJaWYgKCghc2VsZl9qb2luICYmIGJt c19pc19zdWJzZXQodW5pcXVlUmVsSW5mby0+b3V0ZXJyZWxpZHMsIG91dGVycmVsaWRzKSkg fHwKKwkJCShzZWxmX2pvaW4gJiYgYm1zX2VxdWFsKHVuaXF1ZVJlbEluZm8tPm91dGVycmVs aWRzLCBvdXRlcnJlbGlkcykgJiYKKwkJCSB1bmlxdWVSZWxJbmZvLT5zZWxmX2pvaW4pKQor CQl7CisJCQlpZiAoZXh0cmFfY2xhdXNlcykKKwkJCQkqZXh0cmFfY2xhdXNlcyA9IHVuaXF1 ZVJlbEluZm8tPmV4dHJhX2NsYXVzZXM7CiAJCQlyZXR1cm4gdHJ1ZTsJCS8qIFN1Y2Nlc3Mh ICovCisJCX0KIAl9CiAKIAkvKgpAQCAtMTIyMCw3ICsxMzM1LDggQEAgaW5uZXJyZWxfaXNf dW5pcXVlKFBsYW5uZXJJbmZvICpyb290LAogCiAJLyogTm8gY2FjaGVkIGluZm9ybWF0aW9u LCBzbyB0cnkgdG8gbWFrZSB0aGUgcHJvb2YuICovCiAJaWYgKGlzX2lubmVycmVsX3VuaXF1 ZV9mb3Iocm9vdCwgam9pbnJlbGlkcywgb3V0ZXJyZWxpZHMsIGlubmVycmVsLAotCQkJCQkJ CSAgIGpvaW50eXBlLCByZXN0cmljdGxpc3QpKQorCQkJCQkJCSAgIGpvaW50eXBlLCByZXN0 cmljdGxpc3QsCisJCQkJCQkJICAgc2VsZl9qb2luID8gJm91dGVyX2V4cHJzIDogTlVMTCkp CiAJewogCQkvKgogCQkgKiBDYWNoZSB0aGUgcG9zaXRpdmUgcmVzdWx0IGZvciBmdXR1cmUg cHJvYmVzLCBiZWluZyBzdXJlIHRvIGtlZXAgaXQKQEAgLTEyMzMsMTAgKzEzNDksMTYgQEAg aW5uZXJyZWxfaXNfdW5pcXVlKFBsYW5uZXJJbmZvICpyb290LAogCQkgKiBzdXBlcnNldHMg b2YgdGhlbSBhbnl3YXkuCiAJCSAqLwogCQlvbGRfY29udGV4dCA9IE1lbW9yeUNvbnRleHRT d2l0Y2hUbyhyb290LT5wbGFubmVyX2N4dCk7CisJCXVuaXF1ZVJlbEluZm8gPSBtYWtlTm9k ZShVbmlxdWVSZWxJbmZvKTsKKwkJdW5pcXVlUmVsSW5mby0+b3V0ZXJyZWxpZHMgPSBibXNf Y29weShvdXRlcnJlbGlkcyk7CisJCXVuaXF1ZVJlbEluZm8tPnNlbGZfam9pbiA9IHNlbGZf am9pbjsKKwkJdW5pcXVlUmVsSW5mby0+ZXh0cmFfY2xhdXNlcyA9IG91dGVyX2V4cHJzOwog CQlpbm5lcnJlbC0+dW5pcXVlX2Zvcl9yZWxzID0gbGFwcGVuZChpbm5lcnJlbC0+dW5pcXVl X2Zvcl9yZWxzLAotCQkJCQkJCQkJCQlibXNfY29weShvdXRlcnJlbGlkcykpOworCQkJCQkJ CQkJCQl1bmlxdWVSZWxJbmZvKTsKIAkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZF9jb250 ZXh0KTsKIAorCQlpZiAoZXh0cmFfY2xhdXNlcykKKwkJCSpleHRyYV9jbGF1c2VzID0gb3V0 ZXJfZXhwcnM7CiAJCXJldHVybiB0cnVlOwkJCS8qIFN1Y2Nlc3MhICovCiAJfQogCWVsc2UK QEAgLTEyODIsNyArMTQwNCw4IEBAIGlzX2lubmVycmVsX3VuaXF1ZV9mb3IoUGxhbm5lcklu Zm8gKnJvb3QsCiAJCQkJCSAgIFJlbGlkcyBvdXRlcnJlbGlkcywKIAkJCQkJICAgUmVsT3B0 SW5mbyAqaW5uZXJyZWwsCiAJCQkJCSAgIEpvaW5UeXBlIGpvaW50eXBlLAotCQkJCQkgICBM aXN0ICpyZXN0cmljdGxpc3QpCisJCQkJCSAgIExpc3QgKnJlc3RyaWN0bGlzdCwKKwkJCQkJ ICAgTGlzdCAqKmV4dHJhX2NsYXVzZXMpCiB7CiAJTGlzdAkgICAqY2xhdXNlX2xpc3QgPSBO SUw7CiAJTGlzdENlbGwgICAqbGM7CkBAIC0xMzEyLDE3ICsxNDM1LDg5OCBAQCBpc19pbm5l cnJlbF91bmlxdWVfZm9yKFBsYW5uZXJJbmZvICpyb290LAogCQkJY29udGludWU7CQkJLyog bm90IG1lcmdlam9pbmFibGUgKi8KIAogCQkvKgotCQkgKiBDaGVjayBpZiBjbGF1c2UgaGFz IHRoZSBmb3JtICJvdXRlciBvcCBpbm5lciIgb3IgImlubmVyIG9wIG91dGVyIiwKLQkJICog YW5kIGlmIHNvIG1hcmsgd2hpY2ggc2lkZSBpcyBpbm5lci4KKwkJICogQ2hlY2sgaWYgdGhl IGNsYXVzZSBoYXMgdGhlIGZvcm0gIm91dGVyIG9wIGlubmVyIiBvciAiaW5uZXIgb3AKKwkJ ICogb3V0ZXIiLCBhbmQgaWYgc28gbWFyayB3aGljaCBzaWRlIGlzIGlubmVyLgogCQkgKi8K IAkJaWYgKCFjbGF1c2Vfc2lkZXNfbWF0Y2hfam9pbihyZXN0cmljdGluZm8sIG91dGVycmVs aWRzLAogCQkJCQkJCQkJIGlubmVycmVsLT5yZWxpZHMpKQogCQkJY29udGludWU7CQkJLyog bm8gZ29vZCBmb3IgdGhlc2UgaW5wdXQgcmVsYXRpb25zICovCiAKLQkJLyogT0ssIGFkZCB0 byBsaXN0ICovCisJCS8qIE9LLCBhZGQgdG8gdGhlIGxpc3QgKi8KIAkJY2xhdXNlX2xpc3Qg PSBsYXBwZW5kKGNsYXVzZV9saXN0LCByZXN0cmljdGluZm8pOwogCX0KIAogCS8qIExldCBy ZWxfaXNfZGlzdGluY3RfZm9yKCkgZG8gdGhlIGhhcmQgd29yayAqLwotCXJldHVybiByZWxf aXNfZGlzdGluY3RfZm9yKHJvb3QsIGlubmVycmVsLCBjbGF1c2VfbGlzdCk7CisJcmV0dXJu IHJlbF9pc19kaXN0aW5jdF9mb3Iocm9vdCwgaW5uZXJyZWwsIGNsYXVzZV9saXN0LCBleHRy YV9jbGF1c2VzKTsKK30KKworLyoKKyAqIFVwZGF0ZSBFQyBtZW1iZXJzIHRvIHBvaW50IHRv IHRoZSByZW1haW5pbmcgcmVsYXRpb24gaW5zdGVhZCBvZiB0aGUgcmVtb3ZlZAorICogb25l LCByZW1vdmluZyBkdXBsaWNhdGVzLgorICoKKyAqIFJlc3RyaWN0aW9uIGNsYXVzZXMgZm9y IGJhc2UgcmVsYXRpb25zIGFyZSBhbHJlYWR5IGRpc3RyaWJ1dGVkIHRvCisgKiB0aGUgcmVz cGVjdGl2ZSBiYXNlcmVzdHJpY3RpbmZvIGxpc3RzIChzZWUKKyAqIGdlbmVyYXRlX2ltcGxp ZWRfZXF1YWxpdGllc19mb3JfY29sdW1uKS4gVGhlIGFib3ZlIGNvZGUgaGFzIGFscmVhZHkg cHJvY2Vzc2VkCisgKiB0aGlzIGxpc3QsIGFuZCB1cGRhdGVkIHRoZXNlIGNsYXVzZXMgdG8g cmVmZXJlbmNlIHRoZSByZW1haW5pbmcKKyAqIHJlbGF0aW9uLCBzbyB3ZSBjYW4gc2tpcCB0 aGVtIGhlcmUgYmFzZWQgb24gdGhlaXIgcmVsaWRzLgorICoKKyAqIExpa2V3aXNlLCB3ZSBo YXZlIGFscmVhZHkgcHJvY2Vzc2VkIHRoZSBqb2luIGNsYXVzZXMgdGhhdCBqb2luIHRoZQor ICogcmVtb3ZlZCByZWxhdGlvbiB0byB0aGUgcmVtYWluaW5nIG9uZS4KKyAqCisgKiBGaW5h bGx5LCB0aGVyZSBhcmUgam9pbiBjbGF1c2VzIHRoYXQgam9pbiB0aGUgcmVtb3ZlZCByZWxh dGlvbiB0bworICogc29tZSB0aGlyZCByZWxhdGlvbi4gV2UgY2FuJ3QganVzdCBkZWxldGUg dGhlIHNvdXJjZSBjbGF1c2VzIGFuZAorICogcmVnZW5lcmF0ZSB0aGVtIGZyb20gdGhlIEVD IGJlY2F1c2UgdGhlIGNvcnJlc3BvbmRpbmcgZXF1YWxpdHkKKyAqIG9wZXJhdG9ycyBtaWdo dCBiZSBtaXNzaW5nIChzZWUgdGhlIGhhbmRsaW5nIG9mIGVjX2Jyb2tlbikuCisgKiBUaGVy ZWZvcmUsIHdlIHdpbGwgdXBkYXRlIHRoZSByZWZlcmVuY2VzIGluIHRoZSBzb3VyY2UgY2xh dXNlcy4KKyAqCisgKiBEZXJpdmVkIGNsYXVzZXMgY2FuIGJlIGdlbmVyYXRlZCBhZ2Fpbiwg c28gaXQgaXMgc2ltcGxlciB0byBqdXN0CisgKiBkZWxldGUgdGhlbS4KKyAqLworc3RhdGlj IHZvaWQKK3VwZGF0ZV9lY2xhc3NlcyhFcXVpdmFsZW5jZUNsYXNzICplYywgaW50IGZyb20s IGludCB0bykKK3sKKwlMaXN0CSAgICpuZXdfbWVtYmVycyA9IE5JTDsKKwlMaXN0CSAgICpu ZXdfc291cmNlcyA9IE5JTDsKKworCWZvcmVhY2hfbm9kZShFcXVpdmFsZW5jZU1lbWJlciwg ZW0sIGVjLT5lY19tZW1iZXJzKQorCXsKKwkJYm9vbAkJaXNfcmVkdW5kYW50ID0gZmFsc2U7 CisKKwkJaWYgKCFibXNfaXNfbWVtYmVyKGZyb20sIGVtLT5lbV9yZWxpZHMpKQorCQl7CisJ CQluZXdfbWVtYmVycyA9IGxhcHBlbmQobmV3X21lbWJlcnMsIGVtKTsKKwkJCWNvbnRpbnVl OworCQl9CisKKwkJZW0tPmVtX3JlbGlkcyA9IHJlcGxhY2VfcmVsaWQoZW0tPmVtX3JlbGlk cywgZnJvbSwgdG8pOworCQllbS0+ZW1famRvbWFpbi0+amRfcmVsaWRzID0gcmVwbGFjZV9y ZWxpZChlbS0+ZW1famRvbWFpbi0+amRfcmVsaWRzLCBmcm9tLCB0byk7CisKKwkJLyogV2Ug b25seSBwcm9jZXNzIGlubmVyIGpvaW5zICovCisJCUNoYW5nZVZhck5vZGVzKChOb2RlICop IGVtLT5lbV9leHByLCBmcm9tLCB0bywgMCk7CisKKwkJZm9yZWFjaF9ub2RlKEVxdWl2YWxl bmNlTWVtYmVyLCBvdGhlciwgbmV3X21lbWJlcnMpCisJCXsKKwkJCWlmICghZXF1YWwoZW0t PmVtX3JlbGlkcywgb3RoZXItPmVtX3JlbGlkcykpCisJCQkJY29udGludWU7CisKKwkJCWlm IChlcXVhbChlbS0+ZW1fZXhwciwgb3RoZXItPmVtX2V4cHIpKQorCQkJeworCQkJCWlzX3Jl ZHVuZGFudCA9IHRydWU7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlpZiAoIWlzX3Jl ZHVuZGFudCkKKwkJCW5ld19tZW1iZXJzID0gbGFwcGVuZChuZXdfbWVtYmVycywgZW0pOwor CX0KKworCWxpc3RfZnJlZShlYy0+ZWNfbWVtYmVycyk7CisJZWMtPmVjX21lbWJlcnMgPSBu ZXdfbWVtYmVyczsKKworCWxpc3RfZnJlZShlYy0+ZWNfZGVyaXZlcyk7CisJZWMtPmVjX2Rl cml2ZXMgPSBOVUxMOworCisJLyogVXBkYXRlIEVDIHNvdXJjZSBleHByZXNzaW9ucyAqLwor CWZvcmVhY2hfbm9kZShSZXN0cmljdEluZm8sIHJpbmZvLCBlYy0+ZWNfc291cmNlcykKKwl7 CisJCWJvb2wJCWlzX3JlZHVuZGFudCA9IGZhbHNlOworCisJCWlmICghYm1zX2lzX21lbWJl cihmcm9tLCByaW5mby0+cmVxdWlyZWRfcmVsaWRzKSkKKwkJeworCQkJbmV3X3NvdXJjZXMg PSBsYXBwZW5kKG5ld19zb3VyY2VzLCByaW5mbyk7CisJCQljb250aW51ZTsKKwkJfQorCisJ CUNoYW5nZVZhck5vZGVzKChOb2RlICopIHJpbmZvLCBmcm9tLCB0bywgMCk7CisKKwkJLyoK KwkJICogQWZ0ZXIgc3dpdGNoaW5nIHRoZSBjbGF1c2UgdG8gdGhlIHJlbWFpbmluZyByZWxh dGlvbiwgY2hlY2sgaXQgZm9yCisJCSAqIHJlZHVuZGFuY3kgd2l0aCBleGlzdGluZyBvbmVz LiBXZSBkb24ndCBoYXZlIHRvIGNoZWNrIGZvcgorCQkgKiByZWR1bmRhbmN5IHdpdGggZGVy aXZlZCBjbGF1c2VzLCBiZWNhdXNlIHdlJ3ZlIGp1c3QgZGVsZXRlZCB0aGVtLgorCQkgKi8K KwkJZm9yZWFjaF9ub2RlKFJlc3RyaWN0SW5mbywgb3RoZXIsIG5ld19zb3VyY2VzKQorCQl7 CisJCQlpZiAoIWVxdWFsKHJpbmZvLT5jbGF1c2VfcmVsaWRzLCBvdGhlci0+Y2xhdXNlX3Jl bGlkcykpCisJCQkJY29udGludWU7CisKKwkJCWlmIChlcXVhbChyaW5mby0+Y2xhdXNlLCBv dGhlci0+Y2xhdXNlKSkKKwkJCXsKKwkJCQlpc19yZWR1bmRhbnQgPSB0cnVlOworCQkJCWJy ZWFrOworCQkJfQorCQl9CisKKwkJaWYgKCFpc19yZWR1bmRhbnQpCisJCQluZXdfc291cmNl cyA9IGxhcHBlbmQobmV3X3NvdXJjZXMsIHJpbmZvKTsKKwl9CisKKwlsaXN0X2ZyZWUoZWMt PmVjX3NvdXJjZXMpOworCWVjLT5lY19zb3VyY2VzID0gbmV3X3NvdXJjZXM7CisJZWMtPmVj X3JlbGlkcyA9IHJlcGxhY2VfcmVsaWQoZWMtPmVjX3JlbGlkcywgZnJvbSwgdG8pOworfQor CisvKgorICogIkxvZ2ljYWxseSIgY29tcGFyZXMgdHdvIFJlc3RyaWN0SW5mbydzIGlnbm9y aW5nIHRoZSAncmluZm9fc2VyaWFsJyBmaWVsZCwKKyAqIHdoaWNoIG1ha2VzIGFsbW9zdCBl dmVyeSBSZXN0cmljdEluZm8gdW5pcXVlLiAgVGhpcyB0eXBlIG9mIGNvbXBhcmlzb24gaXMK KyAqIHVzZWZ1bCB3aGVuIHJlbW92aW5nIGR1cGxpY2F0ZXMgd2hpbGUgbW92aW5nIFJlc3Ry aWN0SW5mbydzIGZyb20gcmVtb3ZlZAorICogcmVsYXRpb24gdG8gcmVtYWluaW5nIHJlbGF0 aW9uIGR1cmluZyBzZWxmLWpvaW4gZWxpbWluYXRpb24uCisgKgorICogWFhYOiBJbiB0aGUg ZnV0dXJlLCB3ZSBtaWdodCByZW1vdmUgdGhlICdyaW5mb19zZXJpYWwnIGZpZWxkIGNvbXBs ZXRlbHkgYW5kCisgKiBnZXQgcmlkIG9mIHRoaXMgZnVuY3Rpb24uCisgKi8KK3N0YXRpYyBi b29sCityZXN0cmljdF9pbmZvc19sb2dpY2FsbHlfZXF1YWwoUmVzdHJpY3RJbmZvICphLCBS ZXN0cmljdEluZm8gKmIpCit7CisJaW50CQkJc2F2ZWRfcmluZm9fc2VyaWFsID0gYS0+cmlu Zm9fc2VyaWFsOworCWJvb2wJCXJlc3VsdDsKKworCWEtPnJpbmZvX3NlcmlhbCA9IGItPnJp bmZvX3NlcmlhbDsKKwlyZXN1bHQgPSBlcXVhbChhLCBiKTsKKwlhLT5yaW5mb19zZXJpYWwg PSBzYXZlZF9yaW5mb19zZXJpYWw7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICog UmVtb3ZlIGEgcmVsYXRpb24gYWZ0ZXIgd2UgaGF2ZSBwcm92ZW4gdGhhdCBpdCBwYXJ0aWNp cGF0ZXMgb25seSBpbiBhbgorICogdW5uZWVkZWQgdW5pcXVlIHNlbGYgam9pbi4KKyAqCisg KiBSZXBsYWNlIGFueSBsaW5rcyBpbiBwbGFubmVyIGluZm8gc3RydWN0dXJlcy4KKyAqCisg KiBUcmFuc2ZlciBqb2luIGFuZCByZXN0cmljdGlvbiBjbGF1c2VzIGZyb20gdGhlIHJlbW92 ZWQgcmVsYXRpb24gdG8gdGhlCisgKiByZW1haW5pbmcgb25lLiBXZSBjaGFuZ2UgdGhlIFZh cnMgb2YgdGhlIGNsYXVzZSB0byBwb2ludCB0byB0aGUKKyAqIHJlbWFpbmluZyByZWxhdGlv biBpbnN0ZWFkIG9mIHRoZSByZW1vdmVkIG9uZS4gVGhlIGNsYXVzZXMgdGhhdCByZXF1aXJl CisgKiBhIHN1YnNldCBvZiBqb2lucmVsaWRzIGJlY29tZSByZXN0cmljdGlvbiBjbGF1c2Vz IG9mIHRoZSByZW1haW5pbmcKKyAqIHJlbGF0aW9uLCBhbmQgb3RoZXJzIHJlbWFpbiBqb2lu IGNsYXVzZXMuIFdlIGFwcGVuZCB0aGVtIHRvCisgKiBiYXNlcmVzdHJpY3RpbmZvIGFuZCBq b2luaW5mbyByZXNwZWN0aXZlbHksIHRyeWluZyBub3QgdG8gaW50cm9kdWNlCisgKiBkdXBs aWNhdGVzLgorICoKKyAqIFdlIGFsc28gaGF2ZSB0byBwcm9jZXNzIHRoZSAnam9pbmNsYXVz ZXMnIGxpc3QgaGVyZSwgYmVjYXVzZSBpdAorICogY29udGFpbnMgRUMtZGVyaXZlZCBqb2lu IGNsYXVzZXMgd2hpY2ggbXVzdCBiZWNvbWUgZmlsdGVyIGNsYXVzZXMuIEl0CisgKiBpcyBu b3QgZW5vdWdoIHRvIGp1c3QgY29ycmVjdCB0aGUgRUNzIGJlY2F1c2UgdGhlIEVDLWRlcml2 ZWQKKyAqIHJlc3RyaWN0aW9ucyBhcmUgZ2VuZXJhdGVkIGJlZm9yZSBqb2luIHJlbW92YWwg KHNlZQorICogZ2VuZXJhdGVfYmFzZV9pbXBsaWVkX2VxdWFsaXRpZXMpLgorICoKKyAqIE5P VEU6IFJlbWVtYmVyIHRvIGtlZXAgdGhlIGNvZGUgaW4gc3luYyB3aXRoIFBsYW5uZXJJbmZv IHRvIGJlIHN1cmUgYWxsCisgKiBjYWNoZWQgcmVsaWRzIGFuZCByZWxpZCBiaXRtYXBzZXRz IGNhbiBiZSBjb3JyZWN0bHkgY2xlYW5lZCBkdXJpbmcgdGhlIHNlbGYKKyAqIGpvaW4gZWxp bWluYXRpb24gcHJvY2VkdXJlLgorICovCitzdGF0aWMgdm9pZAorcmVtb3ZlX3NlbGZfam9p bl9yZWwoUGxhbm5lckluZm8gKnJvb3QsIFBsYW5Sb3dNYXJrICprbWFyaywgUGxhblJvd01h cmsgKnJtYXJrLAorCQkJCQkgUmVsT3B0SW5mbyAqdG9LZWVwLCBSZWxPcHRJbmZvICp0b1Jl bW92ZSwKKwkJCQkJIExpc3QgKnJlc3RyaWN0bGlzdCkKK3sKKwlMaXN0CSAgICpqb2luaW5m b3M7CisJTGlzdENlbGwgICAqbGM7CisJaW50CQkJaTsKKwlMaXN0CSAgICpqaW5mb19jYW5k aWRhdGVzID0gTklMOworCUxpc3QJICAgKmJpbmZvX2NhbmRpZGF0ZXMgPSBOSUw7CisKKwlB c3NlcnQodG9LZWVwLT5yZWxpZCA+IDApOworCUFzc2VydCh0b1JlbW92ZS0+cmVsaWQgPiAw KTsKKworCS8qCisJICogUmVwbGFjZSB0aGUgaW5kZXggb2YgdGhlIHJlbW92aW5nIHRhYmxl IHdpdGggdGhlIGtlZXBpbmcgb25lLiBUaGUKKwkgKiB0ZWNobmlxdWUgb2YgcmVtb3Zpbmcv ZGlzdHJpYnV0aW5nIHJlc3RyaWN0aW5mbyBpcyB1c2VkIGhlcmUgdG8gYXR0YWNoCisJICog anVzdCBhcHBlYXJlZCAoZm9yIGtlZXBpbmcgcmVsYXRpb24pIGpvaW4gY2xhdXNlcyBhbmQg YXZvaWQgYWRkaW5nCisJICogZHVwbGljYXRlcyBvZiB0aG9zZSB0aGF0IGFscmVhZHkgZXhp c3QgaW4gdGhlIGpvaW5pbmZvIGxpc3QuCisJICovCisJam9pbmluZm9zID0gbGlzdF9jb3B5 KHRvUmVtb3ZlLT5qb2luaW5mbyk7CisJZm9yZWFjaF9ub2RlKFJlc3RyaWN0SW5mbywgcmlu Zm8sIGpvaW5pbmZvcykKKwl7CisJCXJlbW92ZV9qb2luX2NsYXVzZV9mcm9tX3JlbHMocm9v dCwgcmluZm8sIHJpbmZvLT5yZXF1aXJlZF9yZWxpZHMpOworCQlDaGFuZ2VWYXJOb2Rlcygo Tm9kZSAqKSByaW5mbywgdG9SZW1vdmUtPnJlbGlkLCB0b0tlZXAtPnJlbGlkLCAwKTsKKwor CQlpZiAoYm1zX21lbWJlcnNoaXAocmluZm8tPnJlcXVpcmVkX3JlbGlkcykgPT0gQk1TX01V TFRJUExFKQorCQkJamluZm9fY2FuZGlkYXRlcyA9IGxhcHBlbmQoamluZm9fY2FuZGlkYXRl cywgcmluZm8pOworCQllbHNlCisJCQliaW5mb19jYW5kaWRhdGVzID0gbGFwcGVuZChiaW5m b19jYW5kaWRhdGVzLCByaW5mbyk7CisJfQorCisJLyoKKwkgKiBDb25jYXRlbmF0ZSByZXN0 cmljdGxpc3QgdG8gdGhlIGxpc3Qgb2YgYmFzZSByZXN0cmljdGlvbnMgb2YgdGhlCisJICog cmVtb3ZpbmcgdGFibGUganVzdCB0byBzaW1wbGlmeSB0aGUgcmVwbGFjZW1lbnQgcHJvY2Vk dXJlOiBhbGwgb2YgdGhlbQorCSAqIHdlcmVuJ3QgY29ubmVjdGVkIHRvIGFueSBrZWVwaW5n IHJlbGF0aW9ucyBhbmQgbmVlZCB0byBiZSBhZGRlZCB0byBzb21lCisJICogcmVscy4KKwkg Ki8KKwl0b1JlbW92ZS0+YmFzZXJlc3RyaWN0aW5mbyA9IGxpc3RfY29uY2F0KHRvUmVtb3Zl LT5iYXNlcmVzdHJpY3RpbmZvLAorCQkJCQkJCQkJCQkgcmVzdHJpY3RsaXN0KTsKKwlmb3Jl YWNoX25vZGUoUmVzdHJpY3RJbmZvLCByaW5mbywgdG9SZW1vdmUtPmJhc2VyZXN0cmljdGlu Zm8pCisJeworCQlDaGFuZ2VWYXJOb2RlcygoTm9kZSAqKSByaW5mbywgdG9SZW1vdmUtPnJl bGlkLCB0b0tlZXAtPnJlbGlkLCAwKTsKKworCQlpZiAoYm1zX21lbWJlcnNoaXAocmluZm8t PnJlcXVpcmVkX3JlbGlkcykgPT0gQk1TX01VTFRJUExFKQorCQkJamluZm9fY2FuZGlkYXRl cyA9IGxhcHBlbmQoamluZm9fY2FuZGlkYXRlcywgcmluZm8pOworCQllbHNlCisJCQliaW5m b19jYW5kaWRhdGVzID0gbGFwcGVuZChiaW5mb19jYW5kaWRhdGVzLCByaW5mbyk7CisJfQor CisJLyoKKwkgKiBOb3csIGFkZCBhbGwgbm9uLXJlZHVuZGFudCBjbGF1c2VzIHRvIHRoZSBr ZWVwaW5nIHJlbGF0aW9uLgorCSAqIENvbnRyYWRpY3Rvcnkgb3BlcmF0aW9uLiBPbiB0aGUg b25lIHNpZGUsIHdlIHJlZHVjZSB0aGUgbGVuZ3RoIG9mCisJICogcmVzdHJpY3QgbGlzdHMg dGhhdCBjYW4gaW1wYWN0IHBsYW5uaW5nIG9yIGV4ZWN1dGluZyB0aW1lLgorCSAqIEFkZGl0 aW9uYWxseSwgd2UgaW1wcm92ZSB0aGUgYWNjdXJhY3kgb2YgY2FyZGluYWxpdHkgZXN0aW1h dGlvbi4gT24gdGhlCisJICogb3RoZXIgc2lkZSwgaXQgaXMgb25lIG1vcmUgcGxhY2UgdGhh dCBjYW4gbWFrZSBwbGFubmluZyB0aW1lIG11Y2gKKwkgKiBsb25nZXIgaW4gc3BlY2lmaWMg Y2FzZXMuIEl0IHdvdWxkIGhhdmUgYmVlbiBiZXR0ZXIgdG8gYXZvaWQgY2FsbGluZworCSAq IHRoZSBlcXVhbCgpIGZ1bmN0aW9uIGhlcmUsIGJ1dCBpdCdzIHRoZSBvbmx5IHdheSB0byBk ZXRlY3QgZHVwbGljYXRlZAorCSAqIGluZXF1YWxpdHkgZXhwcmVzc2lvbnMuCisJICovCisJ Zm9yZWFjaF9ub2RlKFJlc3RyaWN0SW5mbywgcmluZm8sIGJpbmZvX2NhbmRpZGF0ZXMpCisJ eworCQlib29sCQlpc19yZWR1bmRhbnQgPSBmYWxzZTsKKworCQlBc3NlcnQoIWJtc19pc19t ZW1iZXIodG9SZW1vdmUtPnJlbGlkLCByaW5mby0+cmVxdWlyZWRfcmVsaWRzKSk7CisKKwkJ Zm9yZWFjaF9ub2RlKFJlc3RyaWN0SW5mbywgc3JjLCB0b0tlZXAtPmJhc2VyZXN0cmljdGlu Zm8pCisJCXsKKwkJCWlmICghYm1zX2VxdWFsKHNyYy0+Y2xhdXNlX3JlbGlkcywgcmluZm8t PmNsYXVzZV9yZWxpZHMpKQorCQkJCS8qIENvbnN0IGFuZCBub24tY29uc3QgZXhwcmVzc2lv bnMgY2FuJ3QgYmUgZXF1YWwgKi8KKwkJCQljb250aW51ZTsKKworCQkJaWYgKHNyYyA9PSBy aW5mbyB8fAorCQkJCShyaW5mby0+cGFyZW50X2VjICE9IE5VTEwKKwkJCQkgJiYgc3JjLT5w YXJlbnRfZWMgPT0gcmluZm8tPnBhcmVudF9lYykKKwkJCQl8fCByZXN0cmljdF9pbmZvc19s b2dpY2FsbHlfZXF1YWwocmluZm8sIHNyYykpCisJCQl7CisJCQkJaXNfcmVkdW5kYW50ID0g dHJ1ZTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlpZiAoIWlzX3JlZHVuZGFudCkKKwkJ CWRpc3RyaWJ1dGVfcmVzdHJpY3RpbmZvX3RvX3JlbHMocm9vdCwgcmluZm8pOworCX0KKwlm b3JlYWNoX25vZGUoUmVzdHJpY3RJbmZvLCByaW5mbywgamluZm9fY2FuZGlkYXRlcykKKwl7 CisJCWJvb2wJCWlzX3JlZHVuZGFudCA9IGZhbHNlOworCisJCUFzc2VydCghYm1zX2lzX21l bWJlcih0b1JlbW92ZS0+cmVsaWQsIHJpbmZvLT5yZXF1aXJlZF9yZWxpZHMpKTsKKworCQlm b3JlYWNoX25vZGUoUmVzdHJpY3RJbmZvLCBzcmMsIHRvS2VlcC0+am9pbmluZm8pCisJCXsK KwkJCWlmICghYm1zX2VxdWFsKHNyYy0+Y2xhdXNlX3JlbGlkcywgcmluZm8tPmNsYXVzZV9y ZWxpZHMpKQorCQkJCS8qIENhbid0IGNvbXBhcmUgdHJpdmlhbGx5IGRpZmZlcmVudCBjbGF1 c2VzICovCisJCQkJY29udGludWU7CisKKwkJCWlmIChzcmMgPT0gcmluZm8gfHwKKwkJCQko cmluZm8tPnBhcmVudF9lYyAhPSBOVUxMCisJCQkJICYmIHNyYy0+cGFyZW50X2VjID09IHJp bmZvLT5wYXJlbnRfZWMpCisJCQkJfHwgcmVzdHJpY3RfaW5mb3NfbG9naWNhbGx5X2VxdWFs KHJpbmZvLCBzcmMpKQorCQkJeworCQkJCWlzX3JlZHVuZGFudCA9IHRydWU7CisJCQkJYnJl YWs7CisJCQl9CisJCX0KKwkJaWYgKCFpc19yZWR1bmRhbnQpCisJCQlkaXN0cmlidXRlX3Jl c3RyaWN0aW5mb190b19yZWxzKHJvb3QsIHJpbmZvKTsKKwl9CisJbGlzdF9mcmVlKGJpbmZv X2NhbmRpZGF0ZXMpOworCWxpc3RfZnJlZShqaW5mb19jYW5kaWRhdGVzKTsKKworCS8qCisJ ICogQXJyYW5nZSBlcXVpdmFsZW5jZSBjbGFzc2VzLCBtZW50aW9uZWQgcmVtb3ZpbmcgYSB0 YWJsZSwgd2l0aCB0aGUKKwkgKiBrZWVwaW5nIG9uZTogdmFybm8gb2YgcmVtb3ZpbmcgdGFi bGUgc2hvdWxkIGJlIHJlcGxhY2VkIGluIG1lbWJlcnMgYW5kCisJICogc291cmNlcyBsaXN0 cy4gQWxzbywgcmVtb3ZlIGR1cGxpY2F0ZWQgZWxlbWVudHMgaWYgdGhpcyByZXBsYWNlbWVu dAorCSAqIHByb2NlZHVyZSBjcmVhdGVkIHRoZW0uCisJICovCisJaSA9IC0xOworCXdoaWxl ICgoaSA9IGJtc19uZXh0X21lbWJlcih0b1JlbW92ZS0+ZWNsYXNzX2luZGV4ZXMsIGkpKSA+ PSAwKQorCXsKKwkJRXF1aXZhbGVuY2VDbGFzcyAqZWMgPSAoRXF1aXZhbGVuY2VDbGFzcyAq KSBsaXN0X250aChyb290LT5lcV9jbGFzc2VzLCBpKTsKKworCQl1cGRhdGVfZWNsYXNzZXMo ZWMsIHRvUmVtb3ZlLT5yZWxpZCwgdG9LZWVwLT5yZWxpZCk7CisJCXRvS2VlcC0+ZWNsYXNz X2luZGV4ZXMgPSBibXNfYWRkX21lbWJlcih0b0tlZXAtPmVjbGFzc19pbmRleGVzLCBpKTsK Kwl9CisKKwkvKgorCSAqIFRyYW5zZmVyIHRoZSB0YXJnZXRsaXN0IGFuZCBhdHRyX25lZWRl ZCBmbGFncy4KKwkgKi8KKworCWZvcmVhY2gobGMsIHRvUmVtb3ZlLT5yZWx0YXJnZXQtPmV4 cHJzKQorCXsKKwkJTm9kZQkgICAqbm9kZSA9IGxmaXJzdChsYyk7CisJCUNoYW5nZVZhck5v ZGVzKG5vZGUsIHRvUmVtb3ZlLT5yZWxpZCwgdG9LZWVwLT5yZWxpZCwgMCk7CisJCWlmICgh bGlzdF9tZW1iZXIodG9LZWVwLT5yZWx0YXJnZXQtPmV4cHJzLCBub2RlKSkKKwkJCXRvS2Vl cC0+cmVsdGFyZ2V0LT5leHBycyA9IGxhcHBlbmQodG9LZWVwLT5yZWx0YXJnZXQtPmV4cHJz LCBub2RlKTsKKwl9CisKKwlmb3IgKGkgPSB0b0tlZXAtPm1pbl9hdHRyOyBpIDw9IHRvS2Vl cC0+bWF4X2F0dHI7IGkrKykKKwl7CisJCWludAkJCWF0dG5vID0gaSAtIHRvS2VlcC0+bWlu X2F0dHI7CisKKwkJdG9SZW1vdmUtPmF0dHJfbmVlZGVkW2F0dG5vXSA9IHJlcGxhY2VfcmVs aWQodG9SZW1vdmUtPmF0dHJfbmVlZGVkW2F0dG5vXSwKKwkJCQkJCQkJCQkJCQkgdG9SZW1v dmUtPnJlbGlkLCB0b0tlZXAtPnJlbGlkKTsKKwkJdG9LZWVwLT5hdHRyX25lZWRlZFthdHRu b10gPSBibXNfYWRkX21lbWJlcnModG9LZWVwLT5hdHRyX25lZWRlZFthdHRub10sCisJCQkJ CQkJCQkJCQkJIHRvUmVtb3ZlLT5hdHRyX25lZWRlZFthdHRub10pOworCX0KKworCS8qCisJ ICogSWYgdGhlIHJlbW92ZWQgcmVsYXRpb24gaGFzIGEgcm93IG1hcmssIHRyYW5zZmVyIGl0 IHRvIHRoZSByZW1haW5pbmcKKwkgKiBvbmUuCisJICoKKwkgKiBJZiBib3RoIHJlbHMgaGF2 ZSByb3cgbWFya3MsIGp1c3Qga2VlcCB0aGUgb25lIGNvcnJlc3BvbmRpbmcgdG8gdGhlCisJ ICogcmVtYWluaW5nIHJlbGF0aW9uLCBiZWNhdXNlIHdlIHZlcmlmaWVkIGVhcmxpZXIgdGhh dCB0aGV5IGhhdmUgdGhlIHNhbWUKKwkgKiBzdHJlbmd0aC4KKwkgKi8KKwlpZiAocm1hcmsp CisJeworCQlpZiAoa21hcmspCisJCXsKKwkJCUFzc2VydChrbWFyay0+bWFya1R5cGUgPT0g cm1hcmstPm1hcmtUeXBlKTsKKworCQkJcm9vdC0+cm93TWFya3MgPSBsaXN0X2RlbGV0ZV9w dHIocm9vdC0+cm93TWFya3MsIHJtYXJrKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCS8qIFNo b3VsZG4ndCBoYXZlIGluaGVyaXRhbmNlIGNoaWxkcmVuIGhlcmUuICovCisJCQlBc3NlcnQo cm1hcmstPnJ0aSA9PSBybWFyay0+cHJ0aSk7CisKKwkJCXJtYXJrLT5ydGkgPSBybWFyay0+ cHJ0aSA9IHRvS2VlcC0+cmVsaWQ7CisJCX0KKwl9CisKKwkvKgorCSAqIFJlcGxhY2UgdmFy bm8gaW4gYWxsIHRoZSBxdWVyeSBzdHJ1Y3R1cmVzLCBleGNlcHQgbm9kZXMgUmFuZ2VUYmxS ZWYKKwkgKiBvdGhlcndpc2UgbGF0ZXIgcmVtb3ZlX3JlbF9mcm9tX2pvaW5saXN0IHdpbGwg eWllbGQgZXJyb3JzLgorCSAqLworCUNoYW5nZVZhck5vZGVzRXh0ZW5kZWQoKE5vZGUgKikg cm9vdC0+cGFyc2UsIHRvUmVtb3ZlLT5yZWxpZCwgdG9LZWVwLT5yZWxpZCwgMCwgZmFsc2Up OworCisJLyogUmVwbGFjZSBsaW5rcyBpbiB0aGUgcGxhbm5lciBpbmZvICovCisJcmVtb3Zl X3JlbF9mcm9tX3F1ZXJ5KHJvb3QsIHRvUmVtb3ZlLCB0b0tlZXAtPnJlbGlkLCBOVUxMLCBO VUxMKTsKKworCS8qIEF0IGxhc3QsIHJlcGxhY2UgdmFybm8gaW4gcm9vdCB0YXJnZXRsaXN0 IGFuZCBIQVZJTkcgY2xhdXNlICovCisJQ2hhbmdlVmFyTm9kZXMoKE5vZGUgKikgcm9vdC0+ cHJvY2Vzc2VkX3RsaXN0LCB0b1JlbW92ZS0+cmVsaWQsIHRvS2VlcC0+cmVsaWQsIDApOwor CUNoYW5nZVZhck5vZGVzKChOb2RlICopIHJvb3QtPnByb2Nlc3NlZF9ncm91cENsYXVzZSwg dG9SZW1vdmUtPnJlbGlkLCB0b0tlZXAtPnJlbGlkLCAwKTsKKworCXJlcGxhY2VfcmVsaWQo cm9vdC0+YWxsX3Jlc3VsdF9yZWxpZHMsIHRvUmVtb3ZlLT5yZWxpZCwgdG9LZWVwLT5yZWxp ZCk7CisJcmVwbGFjZV9yZWxpZChyb290LT5sZWFmX3Jlc3VsdF9yZWxpZHMsIHRvUmVtb3Zl LT5yZWxpZCwgdG9LZWVwLT5yZWxpZCk7CisKKwkvKgorCSAqIFRoZXJlIG1heSBiZSByZWZl cmVuY2VzIHRvIHRoZSByZWwgaW4gcm9vdC0+ZmtleV9saXN0LCBidXQgaWYgc28sCisJICog bWF0Y2hfZm9yZWlnbl9rZXlzX3RvX3F1YWxzKCkgd2lsbCBnZXQgcmlkIG9mIHRoZW0uCisJ ICovCisKKwkvKgorCSAqIEZpbmFsbHksIHJlbW92ZSB0aGUgcmVsIGZyb20gdGhlIGJhc2Vy ZWwgYXJyYXkgdG8gcHJldmVudCBpdCBmcm9tIGJlaW5nCisJICogcmVmZXJlbmNlZCBhZ2Fp bi4gIChXZSBjYW4ndCBkbyB0aGlzIGVhcmxpZXIgYmVjYXVzZQorCSAqIHJlbW92ZV9qb2lu X2NsYXVzZV9mcm9tX3JlbHMgd2lsbCB0b3VjaCBpdC4pCisJICovCisJcm9vdC0+c2ltcGxl X3JlbF9hcnJheVt0b1JlbW92ZS0+cmVsaWRdID0gTlVMTDsKKworCS8qIEFuZCBudWtlIHRo ZSBSZWxPcHRJbmZvLCBqdXN0IGluIGNhc2UgdGhlcmUncyBhbm90aGVyIGFjY2VzcyBwYXRo ICovCisJcGZyZWUodG9SZW1vdmUpOworCisJLyoKKwkgKiBOb3cgcmVwZWF0IGNvbnN0cnVj dGlvbiBvZiBhdHRyX25lZWRlZCBiaXRzIGNvbWluZyBmcm9tIGFsbCBvdGhlcgorCSAqIHNv dXJjZXMuCisJICovCisJcmVidWlsZF9wbGFjZWhvbGRlcl9hdHRyX25lZWRlZChyb290KTsK KwlyZWJ1aWxkX2pvaW5jbGF1c2VfYXR0cl9uZWVkZWQocm9vdCk7CisJcmVidWlsZF9lY2xh c3NfYXR0cl9uZWVkZWQocm9vdCk7CisJcmVidWlsZF9sYXRlcmFsX2F0dHJfbmVlZGVkKHJv b3QpOworfQorCisvKgorICogc3BsaXRfc2VsZmpvaW5fcXVhbHMKKyAqCQlQcm9jZXNzZXMg J2pvaW5xdWFscycgYnkgYnVpbGRpbmcgdHdvIGxpc3RzOiBvbmUgY29udGFpbmluZyB0aGUg cXVhbHMKKyAqCQl3aGVyZSB0aGUgY29sdW1ucy9leHBycyBhcmUgb24gZWl0aGVyIHNpZGUg b2YgdGhlIGpvaW4gbWF0Y2gsIGFuZAorICoJCWFub3RoZXIgb25lIGNvbnRhaW5pbmcgdGhl IHJlbWFpbmluZyBxdWFscy4KKyAqCisgKiAnam9pbnF1YWxzJyBtdXN0IG9ubHkgY29udGFp biBxdWFscyBmb3IgYSBSVEVfUkVMQVRJT04gYmVpbmcgam9pbmVkIHRvCisgKiBpdHNlbGYu CisgKi8KK3N0YXRpYyB2b2lkCitzcGxpdF9zZWxmam9pbl9xdWFscyhQbGFubmVySW5mbyAq cm9vdCwgTGlzdCAqam9pbnF1YWxzLCBMaXN0ICoqc2VsZmpvaW5xdWFscywKKwkJCQkJIExp c3QgKipvdGhlcmpvaW5xdWFscywgaW50IGZyb20sIGludCB0bykKK3sKKwlMaXN0CSAgICpz am9pbnF1YWxzID0gTklMOworCUxpc3QJICAgKm9qb2lucXVhbHMgPSBOSUw7CisKKwlmb3Jl YWNoX25vZGUoUmVzdHJpY3RJbmZvLCByaW5mbywgam9pbnF1YWxzKQorCXsKKwkJT3BFeHBy CSAgICpleHByOworCQlOb2RlCSAgICpsZWZ0ZXhwcjsKKwkJTm9kZQkgICAqcmlnaHRleHBy OworCisJCS8qIEluIGdlbmVyYWwsIGNsYXVzZSBsb29rcyBsaWtlIEYoYXJnMSkgPSBHKGFy ZzIpICovCisJCWlmICghcmluZm8tPm1lcmdlb3BmYW1pbGllcyB8fAorCQkJYm1zX251bV9t ZW1iZXJzKHJpbmZvLT5jbGF1c2VfcmVsaWRzKSAhPSAyIHx8CisJCQlibXNfbWVtYmVyc2hp cChyaW5mby0+bGVmdF9yZWxpZHMpICE9IEJNU19TSU5HTEVUT04gfHwKKwkJCWJtc19tZW1i ZXJzaGlwKHJpbmZvLT5yaWdodF9yZWxpZHMpICE9IEJNU19TSU5HTEVUT04pCisJCXsKKwkJ CW9qb2lucXVhbHMgPSBsYXBwZW5kKG9qb2lucXVhbHMsIHJpbmZvKTsKKwkJCWNvbnRpbnVl OworCQl9CisKKwkJZXhwciA9IChPcEV4cHIgKikgcmluZm8tPmNsYXVzZTsKKworCQlpZiAo IUlzQShleHByLCBPcEV4cHIpIHx8IGxpc3RfbGVuZ3RoKGV4cHItPmFyZ3MpICE9IDIpCisJ CXsKKwkJCW9qb2lucXVhbHMgPSBsYXBwZW5kKG9qb2lucXVhbHMsIHJpbmZvKTsKKwkJCWNv bnRpbnVlOworCQl9CisKKwkJbGVmdGV4cHIgPSBnZXRfbGVmdG9wKHJpbmZvLT5jbGF1c2Up OworCQlyaWdodGV4cHIgPSBjb3B5T2JqZWN0KGdldF9yaWdodG9wKHJpbmZvLT5jbGF1c2Up KTsKKworCQlpZiAobGVmdGV4cHIgJiYgSXNBKGxlZnRleHByLCBSZWxhYmVsVHlwZSkpCisJ CQlsZWZ0ZXhwciA9IChOb2RlICopICgoUmVsYWJlbFR5cGUgKikgbGVmdGV4cHIpLT5hcmc7 CisJCWlmIChyaWdodGV4cHIgJiYgSXNBKHJpZ2h0ZXhwciwgUmVsYWJlbFR5cGUpKQorCQkJ cmlnaHRleHByID0gKE5vZGUgKikgKChSZWxhYmVsVHlwZSAqKSByaWdodGV4cHIpLT5hcmc7 CisKKwkJLyoKKwkJICogUXVpdGUgYW4gZXhwZW5zaXZlIG9wZXJhdGlvbiwgbmFycm93aW5n IHRoZSB1c2UgY2FzZS4gRm9yIGV4YW1wbGUsCisJCSAqIHdoZW4gd2UgaGF2ZSBjYXN0IG9m IHRoZSBzYW1lIHZhciB0byBkaWZmZXJlbnQgKGJ1dCBjb21wYXRpYmxlKQorCQkgKiB0eXBl cy4KKwkJICovCisJCUNoYW5nZVZhck5vZGVzKHJpZ2h0ZXhwciwgYm1zX3NpbmdsZXRvbl9t ZW1iZXIocmluZm8tPnJpZ2h0X3JlbGlkcyksCisJCQkJCSAgYm1zX3NpbmdsZXRvbl9tZW1i ZXIocmluZm8tPmxlZnRfcmVsaWRzKSwgMCk7CisKKwkJaWYgKGVxdWFsKGxlZnRleHByLCBy aWdodGV4cHIpKQorCQkJc2pvaW5xdWFscyA9IGxhcHBlbmQoc2pvaW5xdWFscywgcmluZm8p OworCQllbHNlCisJCQlvam9pbnF1YWxzID0gbGFwcGVuZChvam9pbnF1YWxzLCByaW5mbyk7 CisJfQorCisJKnNlbGZqb2lucXVhbHMgPSBzam9pbnF1YWxzOworCSpvdGhlcmpvaW5xdWFs cyA9IG9qb2lucXVhbHM7Cit9CisKKy8qCisgKiBDaGVjayBmb3IgYSBjYXNlIHdoZW4gdW5p cXVlbmVzcyBpcyBhdCBsZWFzdCBwYXJ0bHkgZGVyaXZlZCBmcm9tIGEKKyAqIGJhc2VyZXN0 cmljdGluZm8gY2xhdXNlLiBJbiB0aGlzIGNhc2UsIHdlIGhhdmUgYSBjaGFuY2UgdG8gcmV0 dXJuIG9ubHkKKyAqIG9uZSByb3cgKGlmIHN1Y2ggY2xhdXNlcyBvbiBib3RoIHNpZGVzIG9m IFNKIGFyZSBlcXVhbCkgb3Igbm90aGluZyAoaWYgdGhleQorICogYXJlIGRpZmZlcmVudCku CisgKi8KK3N0YXRpYyBib29sCittYXRjaF91bmlxdWVfY2xhdXNlcyhQbGFubmVySW5mbyAq cm9vdCwgUmVsT3B0SW5mbyAqb3V0ZXIsIExpc3QgKnVjbGF1c2VzLAorCQkJCQkgSW5kZXgg cmVsaWQpCit7CisJZm9yZWFjaF9ub2RlKFJlc3RyaWN0SW5mbywgcmluZm8sIHVjbGF1c2Vz KQorCXsKKwkJRXhwcgkgICAqY2xhdXNlOworCQlOb2RlCSAgICppY2xhdXNlOworCQlOb2Rl CSAgICpjMTsKKwkJYm9vbAkJbWF0Y2hlZCA9IGZhbHNlOworCisJCUFzc2VydChvdXRlci0+ cmVsaWQgPiAwICYmIHJlbGlkID4gMCk7CisKKwkJLyogT25seSBmaWx0ZXJzIGxpa2UgZihS LngxLC4uLixSLnhOKSA9PSBleHByIHdlIHNob3VsZCBjb25zaWRlci4gKi8KKwkJQXNzZXJ0 KGJtc19pc19lbXB0eShyaW5mby0+bGVmdF9yZWxpZHMpIF4KKwkJCSAgIGJtc19pc19lbXB0 eShyaW5mby0+cmlnaHRfcmVsaWRzKSk7CisKKwkJY2xhdXNlID0gKEV4cHIgKikgY29weU9i amVjdChyaW5mby0+Y2xhdXNlKTsKKwkJQ2hhbmdlVmFyTm9kZXMoKE5vZGUgKikgY2xhdXNl LCByZWxpZCwgb3V0ZXItPnJlbGlkLCAwKTsKKworCQlpY2xhdXNlID0gYm1zX2lzX2VtcHR5 KHJpbmZvLT5sZWZ0X3JlbGlkcykgPyBnZXRfcmlnaHRvcChjbGF1c2UpIDoKKwkJCWdldF9s ZWZ0b3AoY2xhdXNlKTsKKwkJYzEgPSBibXNfaXNfZW1wdHkocmluZm8tPmxlZnRfcmVsaWRz KSA/IGdldF9sZWZ0b3AoY2xhdXNlKSA6CisJCQlnZXRfcmlnaHRvcChjbGF1c2UpOworCisJ CS8qCisJCSAqIENvbXBhcmUgdGhlc2UgbGVmdCBhbmQgcmlnaHQgc2lkZXMgd2l0aCB0aGUg Y29ycmVzcG9uZGluZyBzaWRlcyBvZgorCQkgKiB0aGUgb3V0ZXIncyBmaWx0ZXJzLiBJZiBu byBvbmUgaXMgZGV0ZWN0ZWQgLSByZXR1cm4gaW1tZWRpYXRlbHkuCisJCSAqLworCQlmb3Jl YWNoX25vZGUoUmVzdHJpY3RJbmZvLCBvcmluZm8sIG91dGVyLT5iYXNlcmVzdHJpY3RpbmZv KQorCQl7CisJCQlOb2RlCSAgICpvY2xhdXNlOworCQkJTm9kZQkgICAqYzI7CisKKwkJCWlm IChvcmluZm8tPm1lcmdlb3BmYW1pbGllcyA9PSBOSUwpCisJCQkJLyogRG9uJ3QgY29uc2lk ZXIgY2xhdXNlcyB3aGljaCBhcmVuJ3Qgc2ltaWxhciB0byAnRihYKT1HKFkpJyAqLworCQkJ CWNvbnRpbnVlOworCisJCQlBc3NlcnQoaXNfb3BjbGF1c2Uob3JpbmZvLT5jbGF1c2UpKTsK KworCQkJb2NsYXVzZSA9IGJtc19pc19lbXB0eShvcmluZm8tPmxlZnRfcmVsaWRzKSA/CisJ CQkJZ2V0X3JpZ2h0b3Aob3JpbmZvLT5jbGF1c2UpIDogZ2V0X2xlZnRvcChvcmluZm8tPmNs YXVzZSk7CisJCQljMiA9IChibXNfaXNfZW1wdHkob3JpbmZvLT5sZWZ0X3JlbGlkcykgPwor CQkJCSAgZ2V0X2xlZnRvcChvcmluZm8tPmNsYXVzZSkgOiBnZXRfcmlnaHRvcChvcmluZm8t PmNsYXVzZSkpOworCisJCQlpZiAoZXF1YWwoaWNsYXVzZSwgb2NsYXVzZSkgJiYgZXF1YWwo YzEsIGMyKSkKKwkJCXsKKwkJCQltYXRjaGVkID0gdHJ1ZTsKKwkJCQlicmVhazsKKwkJCX0K KwkJfQorCisJCWlmICghbWF0Y2hlZCkKKwkJCXJldHVybiBmYWxzZTsKKwl9CisKKwlyZXR1 cm4gdHJ1ZTsKK30KKworLyoKKyAqIEZpbmQgYW5kIHJlbW92ZSB1bmlxdWUgc2VsZiBqb2lu cyBpbiBhIGdyb3VwIG9mIGJhc2UgcmVsYXRpb25zIHRoYXQgaGF2ZQorICogdGhlIHNhbWUg T2lkLgorICoKKyAqIFJldHVybnMgYSBzZXQgb2YgcmVsaWRzIHRoYXQgd2VyZSByZW1vdmVk LgorICovCitzdGF0aWMgUmVsaWRzCityZW1vdmVfc2VsZl9qb2luc19vbmVfZ3JvdXAoUGxh bm5lckluZm8gKnJvb3QsIFJlbGlkcyByZWxpZHMpCit7CisJUmVsaWRzCQlyZXN1bHQgPSBO VUxMOworCWludAkJCWs7CQkJCS8qIEluZGV4IG9mIGtlcHQgcmVsYXRpb24gKi8KKwlpbnQJ CQlyID0gLTE7CQkJLyogSW5kZXggb2YgcmVtb3ZlZCByZWxhdGlvbiAqLworCisJd2hpbGUg KChyID0gYm1zX25leHRfbWVtYmVyKHJlbGlkcywgcikpID4gMCkKKwl7CisJCVJlbE9wdElu Zm8gKmlubmVyID0gcm9vdC0+c2ltcGxlX3JlbF9hcnJheVtyXTsKKworCQlrID0gcjsKKwor CQl3aGlsZSAoKGsgPSBibXNfbmV4dF9tZW1iZXIocmVsaWRzLCBrKSkgPiAwKQorCQl7CisJ CQlSZWxpZHMJCWpvaW5yZWxpZHMgPSBOVUxMOworCQkJUmVsT3B0SW5mbyAqb3V0ZXIgPSBy b290LT5zaW1wbGVfcmVsX2FycmF5W2tdOworCQkJTGlzdAkgICAqcmVzdHJpY3RsaXN0Owor CQkJTGlzdAkgICAqc2VsZmpvaW5xdWFsczsKKwkJCUxpc3QJICAgKm90aGVyam9pbnF1YWxz OworCQkJTGlzdENlbGwgICAqbGM7CisJCQlib29sCQlqaW5mb19jaGVjayA9IHRydWU7CisJ CQlQbGFuUm93TWFyayAqb21hcmsgPSBOVUxMOworCQkJUGxhblJvd01hcmsgKmltYXJrID0g TlVMTDsKKwkJCUxpc3QJICAgKnVjbGF1c2VzID0gTklMOworCisJCQkvKiBBIHNhbml0eSBj aGVjazogdGhlIHJlbGF0aW9ucyBoYXZlIHRoZSBzYW1lIE9pZC4gKi8KKwkJCUFzc2VydChy b290LT5zaW1wbGVfcnRlX2FycmF5W2tdLT5yZWxpZCA9PQorCQkJCSAgIHJvb3QtPnNpbXBs ZV9ydGVfYXJyYXlbcl0tPnJlbGlkKTsKKworCQkJLyoKKwkJCSAqIEl0IGlzIGltcG9zc2li bGUgdG8gZWxpbWluYXRlIGpvaW4gb2YgdHdvIHJlbGF0aW9ucyBpZiB0aGV5CisJCQkgKiBi ZWxvbmcgdG8gZGlmZmVyZW50IHJ1bGVzIG9mIG9yZGVyLiBPdGhlcndpc2UgcGxhbm5lciBj YW4ndCBiZQorCQkJICogYWJsZSB0byBmaW5kIGFueSB2YXJpYW50cyBvZiBjb3JyZWN0IHF1 ZXJ5IHBsYW4uCisJCQkgKi8KKwkJCWZvcmVhY2gobGMsIHJvb3QtPmpvaW5faW5mb19saXN0 KQorCQkJeworCQkJCVNwZWNpYWxKb2luSW5mbyAqaW5mbyA9IChTcGVjaWFsSm9pbkluZm8g KikgbGZpcnN0KGxjKTsKKworCQkJCWlmICgoYm1zX2lzX21lbWJlcihrLCBpbmZvLT5zeW5f bGVmdGhhbmQpIF4KKwkJCQkJIGJtc19pc19tZW1iZXIociwgaW5mby0+c3luX2xlZnRoYW5k KSkgfHwKKwkJCQkJKGJtc19pc19tZW1iZXIoaywgaW5mby0+c3luX3JpZ2h0aGFuZCkgXgor CQkJCQkgYm1zX2lzX21lbWJlcihyLCBpbmZvLT5zeW5fcmlnaHRoYW5kKSkpCisJCQkJewor CQkJCQlqaW5mb19jaGVjayA9IGZhbHNlOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJ CQlpZiAoIWppbmZvX2NoZWNrKQorCQkJCWNvbnRpbnVlOworCisJCQkvKgorCQkJICogQ2hl Y2sgUm93IE1hcmtzIGVxdWl2YWxlbmNlLiAgV2UgY2FuJ3QgcmVtb3ZlIHRoZSBqb2luIGlm IHRoZQorCQkJICogcmVsYXRpb25zIGhhdmUgcm93IG1hcmtzIG9mIGRpZmZlcmVudCBzdHJl bmd0aCAoZS5nLiBvbmUgaXMKKwkJCSAqIGxvY2tlZCBGT1IgVVBEQVRFIGFuZCBhbm90aGVy IGp1c3QgaGFzIFJPV19NQVJLX1JFRkVSRU5DRSBmb3IKKwkJCSAqIEV2YWxQbGFuUXVhbCBy ZWNoZWNraW5nKS4KKwkJCSAqLworCQkJZm9yZWFjaChsYywgcm9vdC0+cm93TWFya3MpCisJ CQl7CisJCQkJUGxhblJvd01hcmsgKnJvd01hcmsgPSAoUGxhblJvd01hcmsgKikgbGZpcnN0 KGxjKTsKKworCQkJCWlmIChyb3dNYXJrLT5ydGkgPT0gaykKKwkJCQl7CisJCQkJCUFzc2Vy dChpbWFyayA9PSBOVUxMKTsKKwkJCQkJaW1hcmsgPSByb3dNYXJrOworCQkJCX0KKwkJCQll bHNlIGlmIChyb3dNYXJrLT5ydGkgPT0gcikKKwkJCQl7CisJCQkJCUFzc2VydChvbWFyayA9 PSBOVUxMKTsKKwkJCQkJb21hcmsgPSByb3dNYXJrOworCQkJCX0KKworCQkJCWlmIChvbWFy ayAmJiBpbWFyaykKKwkJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAob21hcmsgJiYgaW1hcmsg JiYgb21hcmstPm1hcmtUeXBlICE9IGltYXJrLT5tYXJrVHlwZSkKKwkJCQljb250aW51ZTsK KworCQkJLyoKKwkJCSAqIFdlIG9ubHkgZGVhbCB3aXRoIGJhc2UgcmVscyBoZXJlLCBzbyB0 aGVpciByZWxpZHMgYml0c2V0CisJCQkgKiBjb250YWlucyBvbmx5IG9uZSBtZW1iZXIgLS0g dGhlaXIgcmVsaWQuCisJCQkgKi8KKwkJCWpvaW5yZWxpZHMgPSBibXNfYWRkX21lbWJlcihq b2lucmVsaWRzLCByKTsKKwkJCWpvaW5yZWxpZHMgPSBibXNfYWRkX21lbWJlcihqb2lucmVs aWRzLCBrKTsKKworCQkJLyoKKwkJCSAqIFBIVnMgc2hvdWxkIG5vdCBpbXBvc2UgYW55IGNv bnN0cmFpbnRzIG9uIHJlbW92aW5nIHNlbGYgam9pbnMuCisJCQkgKi8KKworCQkJLyoKKwkJ CSAqIEF0IHRoaXMgc3RhZ2UsIGpvaW5pbmZvIGxpc3RzIG9mIGlubmVyIGFuZCBvdXRlciBj YW4gY29udGFpbgorCQkJICogb25seSBjbGF1c2VzLCByZXF1aXJlZCBmb3IgYSBzdXBlcmlv ciBvdXRlciBqb2luIHRoYXQgY2FuJ3QKKwkJCSAqIGluZmx1ZW5jZSB0aGlzIG9wdGltaXph dGlvbi4gU28sIHdlIGNhbiBhdm9pZCB0byBjYWxsIHRoZQorCQkJICogYnVpbGRfam9pbnJl bF9yZXN0cmljdGxpc3QoKSByb3V0aW5lLgorCQkJICovCisJCQlyZXN0cmljdGxpc3QgPSBn ZW5lcmF0ZV9qb2luX2ltcGxpZWRfZXF1YWxpdGllcyhyb290LCBqb2lucmVsaWRzLAorCQkJ CQkJCQkJCQkJCQkJaW5uZXItPnJlbGlkcywKKwkJCQkJCQkJCQkJCQkJCW91dGVyLCBOVUxM KTsKKwkJCWlmIChyZXN0cmljdGxpc3QgPT0gTklMKQorCQkJCWNvbnRpbnVlOworCisJCQkv KgorCQkJICogUHJvY2VzcyByZXN0cmljdGxpc3QgdG8gc2VwYXJhdGUgdGhlIHNlbGYgam9p biBxdWFscyBvdXQgb2YgdGhlCisJCQkgKiBvdGhlciBxdWFscy4gZS5nIHggPSB4IGdvZXMg dG8gc2VsZmpvaW5xdWFscyBhbmQgYSA9IGIgdG8KKwkJCSAqIG90aGVyam9pbnF1YWxzLgor CQkJICovCisJCQlzcGxpdF9zZWxmam9pbl9xdWFscyhyb290LCByZXN0cmljdGxpc3QsICZz ZWxmam9pbnF1YWxzLAorCQkJCQkJCQkgJm90aGVyam9pbnF1YWxzLCBpbm5lci0+cmVsaWQs IG91dGVyLT5yZWxpZCk7CisKKwkJCUFzc2VydChsaXN0X2xlbmd0aChyZXN0cmljdGxpc3Qp ID09CisJCQkJCShsaXN0X2xlbmd0aChzZWxmam9pbnF1YWxzKSArIGxpc3RfbGVuZ3RoKG90 aGVyam9pbnF1YWxzKSkpOworCisJCQkvKgorCQkJICogVG8gZW5hYmxlIFNKRSBmb3IgdGhl IG9ubHkgZGVnZW5lcmF0ZSBjYXNlIHdpdGhvdXQgYW55IHNlbGYKKwkJCSAqIGpvaW4gY2xh dXNlcyBhdCBhbGwsIGFkZCBiYXNlcmVzdHJpY3RpbmZvIHRvIHRoaXMgbGlzdC4gVGhlCisJ CQkgKiBkZWdlbmVyYXRlIGNhc2Ugd29ya3Mgb25seSBpZiBib3RoIHNpZGVzIGhhdmUgdGhl IHNhbWUgY2xhdXNlLgorCQkJICogU28gZG9lc24ndCBtYXR0ZXIgd2hpY2ggc2lkZSB0byBh ZGQuCisJCQkgKi8KKwkJCXNlbGZqb2lucXVhbHMgPSBsaXN0X2NvbmNhdChzZWxmam9pbnF1 YWxzLCBvdXRlci0+YmFzZXJlc3RyaWN0aW5mbyk7CisKKwkJCS8qCisJCQkgKiBEZXRlcm1p bmUgaWYgdGhlIGlubmVyIHRhYmxlIGNhbiBkdXBsaWNhdGUgb3V0ZXIgcm93cy4gIFdlIG11 c3QKKwkJCSAqIGJ5cGFzcyB0aGUgdW5pcXVlIHJlbCBjYWNoZSBoZXJlIHNpbmNlIHdlJ3Jl IHBvc3NpYmx5IHVzaW5nIGEKKwkJCSAqIHN1YnNldCBvZiBqb2luIHF1YWxzLiBXZSBjYW4g dXNlICdmb3JjZV9jYWNoZScgPT0gdHJ1ZSB3aGVuIGFsbAorCQkJICogam9pbiBxdWFscyBh cmUgc2VsZi1qb2luIHF1YWxzLiAgT3RoZXJ3aXNlLCB3ZSBjb3VsZCBlbmQgdXAKKwkJCSAq IHB1dHRpbmcgZmFsc2UgbmVnYXRpdmVzIGluIHRoZSBjYWNoZS4KKwkJCSAqLworCQkJaWYg KCFpbm5lcnJlbF9pc191bmlxdWVfZXh0KHJvb3QsIGpvaW5yZWxpZHMsIGlubmVyLT5yZWxp ZHMsCisJCQkJCQkJCQkJb3V0ZXIsIEpPSU5fSU5ORVIsIHNlbGZqb2lucXVhbHMsCisJCQkJ CQkJCQkJbGlzdF9sZW5ndGgob3RoZXJqb2lucXVhbHMpID09IDAsCisJCQkJCQkJCQkJJnVj bGF1c2VzKSkKKwkJCQljb250aW51ZTsKKworCQkJLyoKKwkJCSAqIHVjbGF1c2VzIGlzIHRo ZSBjb3B5IG9mIG91dGVyLT5iYXNlcmVzdHJpY3RpbmZvIHRoYXQgYXNzb2NpYXRlZCB3aXRo IGEgaW5kZXguCisJCQkgKiBXZSBhbHJlYWR5IHByb3ZlbiB0aGF0IGJhc2VkIG9uIHtvdXRl ci0+YmFzZXJlc3RyaWN0aW5mbywgc2VsZmpvaW5xdWFsc30KKwkJCSAqIGNvbXBhcnNpb24g d2l0aCB1bmlxdWUgaW5kZXggd2UgY2FuIGd1YXJhbnRlZXMgdGhhdCBmb3IgdGhlIG91dGVy IHJlbCB0aGVyZSBpcworCQkJICogYXQgbW9zdCBvbmUgcm93IHdoZXJlIGNvbHVtbnMgZXF1 YWwgZ2l2ZW4gdmFsdWVzLiBTb21ldGltZXMgdGhhdCBpcyBub3Qgb2suIGUuZy4KKwkJCSAq ICJ3aGVyZSBzMS5iID0gczIuYiBhbmQgczEuYSA9IDEgYW5kIHMyLmEgPSAyIi4gKHRoZSBp bmRleCBpcyBiYXNlZCBvbiBjb2x1bW4oYSxiKS4KKwkJCSAqIGluIHRoZXNlIHNjYXJlbmlv LCB3ZSBhbHNvIG5lZWQgdG8gdmFsaWRhdGUgZXF1YWxpdHkgb2Ygb3V0ZXItPmJhc2VyZXN0 cmljdGluZm8KKwkJCSAqIHdpdGggaW5uZXItPm91dGVyLT5iYXNlcmVzdHJpY3RpbmZvLAor CQkJICogb3IgZWxzZSB3ZSB3b24ndCBtYXRjaCB0aGUgc2FtZSByb3cgb24gZWFjaCBzaWRl IG9mIHRoZSBqb2luLgorCQkJICovCisJCQlpZiAoIW1hdGNoX3VuaXF1ZV9jbGF1c2VzKHJv b3QsIGlubmVyLCB1Y2xhdXNlcywgb3V0ZXItPnJlbGlkKSkKKwkJCQljb250aW51ZTsKKwor CQkJLyoKKwkJCSAqIFdlIGNhbiByZW1vdmUgZWl0aGVyIHJlbGF0aW9uLCBzbyByZW1vdmUg dGhlIGlubmVyIG9uZSBpbiBvcmRlcgorCQkJICogdG8gc2ltcGxpZnkgdGhpcyBsb29wLgor CQkJICovCisJCQlyZW1vdmVfc2VsZl9qb2luX3JlbChyb290LCBvbWFyaywgaW1hcmssIG91 dGVyLCBpbm5lciwgcmVzdHJpY3RsaXN0KTsKKworCQkJcmVzdWx0ID0gYm1zX2FkZF9tZW1i ZXIocmVzdWx0LCByKTsKKworCQkJLyogV2UgaGF2ZSByZW1vdmVkIHRoZSBvdXRlciByZWxh dGlvbiwgdHJ5IHRoZSBuZXh0IG9uZS4gKi8KKwkJCWJyZWFrOworCQl9CisJfQorCisJcmV0 dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIEdhdGhlciBpbmRleGVzIG9mIGJhc2UgcmVsYXRp b25zIGZyb20gdGhlIGpvaW5saXN0IGFuZCB0cnkgdG8gZWxpbWluYXRlIHNlbGYKKyAqIGpv aW5zLgorICovCitzdGF0aWMgUmVsaWRzCityZW1vdmVfc2VsZl9qb2luc19yZWN1cnNlKFBs YW5uZXJJbmZvICpyb290LCBMaXN0ICpqb2lubGlzdCwgUmVsaWRzIHRvUmVtb3ZlKQorewor CUxpc3RDZWxsICAgKmpsOworCVJlbGlkcwkJcmVsaWRzID0gTlVMTDsKKwlTZWxmSm9pbkNh bmRpZGF0ZSAqY2FuZGlkYXRlcyA9IE5VTEw7CisJaW50CQkJaTsKKwlpbnQJCQlqOworCWlu dAkJCW51bVJlbHM7CisKKwkvKiBDb2xsZWN0IGluZGV4ZXMgb2YgYmFzZSByZWxhdGlvbnMg b2YgdGhlIGpvaW4gdHJlZSAqLworCWZvcmVhY2goamwsIGpvaW5saXN0KQorCXsKKwkJTm9k ZQkgICAqamxub2RlID0gKE5vZGUgKikgbGZpcnN0KGpsKTsKKworCQlpZiAoSXNBKGpsbm9k ZSwgUmFuZ2VUYmxSZWYpKQorCQl7CisJCQlpbnQJCQl2YXJubyA9ICgoUmFuZ2VUYmxSZWYg Kikgamxub2RlKS0+cnRpbmRleDsKKwkJCVJhbmdlVGJsRW50cnkgKnJ0ZSA9IHJvb3QtPnNp bXBsZV9ydGVfYXJyYXlbdmFybm9dOworCisJCQkvKgorCQkJICogV2Ugb25seSBjb25zaWRl ciBvcmRpbmFyeSByZWxhdGlvbnMgYXMgY2FuZGlkYXRlcyB0byBiZSByZW1vdmVkLAorCQkJ ICogYW5kIHRoZXNlIHJlbGF0aW9ucyBzaG91bGQgbm90IGhhdmUgVEFCTEVTQU1QTEUgY2xh dXNlcworCQkJICogc3BlY2lmaWVkLiAgUmVtb3ZpbmcgYSByZWxhdGlvbiB3aXRoIFRBQkxF U0FNUExFIGNsYXVzZSBjb3VsZAorCQkJICogcG90ZW50aWFsbHkgY2hhbmdlIHRoZSBzeW50 YXggb2YgdGhlIHF1ZXJ5LgorCQkJICogQmVjYXVzZSBvZiBVUERBVEUvREVMRVRFIEVQUSBt ZWFjaGFuaXNtLCBjdXJyZW50bHkgUXVlcnktPnJlc3VsdFJlbGF0aW9uCisJCQkgKiBvciBR dWVyeS0+bWVyZ2VUYXJnZXRSZWxhdGlvbiBhc3NvY2lhdGVkIHJlbCBjYW5ub3QgYmUgZWxp bWluYXRlZC4KKwkJCSAqLworCQkJaWYgKHJ0ZS0+cnRla2luZCA9PSBSVEVfUkVMQVRJT04g JiYKKwkJCQlydGUtPnJlbGtpbmQgPT0gUkVMS0lORF9SRUxBVElPTiAmJgorCQkJCXJ0ZS0+ dGFibGVzYW1wbGUgPT0gTlVMTCAmJgorCQkJCXZhcm5vICE9IHJvb3QtPnBhcnNlLT5yZXN1 bHRSZWxhdGlvbiAmJgorCQkJCXZhcm5vICE9IHJvb3QtPnBhcnNlLT5tZXJnZVRhcmdldFJl bGF0aW9uKQorCQkJeworCQkJCUFzc2VydCghYm1zX2lzX21lbWJlcih2YXJubywgcmVsaWRz KSk7CisJCQkJcmVsaWRzID0gYm1zX2FkZF9tZW1iZXIocmVsaWRzLCB2YXJubyk7CisJCQl9 CisJCX0KKwkJZWxzZSBpZiAoSXNBKGpsbm9kZSwgTGlzdCkpCisJCXsKKwkJCS8qIFJlY3Vy c2l2ZWx5IGdvIGluc2lkZSB0aGUgc3ViLWpvaW5saXN0ICovCisJCQl0b1JlbW92ZSA9IHJl bW92ZV9zZWxmX2pvaW5zX3JlY3Vyc2Uocm9vdCwgKExpc3QgKikgamxub2RlLAorCQkJCQkJ CQkJCQkJIHRvUmVtb3ZlKTsKKwkJfQorCQllbHNlCisJCQllbG9nKEVSUk9SLCAidW5yZWNv Z25pemVkIGpvaW5saXN0IG5vZGUgdHlwZTogJWQiLAorCQkJCSAoaW50KSBub2RlVGFnKGps bm9kZSkpOworCX0KKworCW51bVJlbHMgPSBibXNfbnVtX21lbWJlcnMocmVsaWRzKTsKKwor CS8qIE5lZWQgYXQgbGVhc3QgdHdvIHJlbGF0aW9ucyBmb3IgdGhlIGpvaW4gKi8KKwlpZiAo bnVtUmVscyA8IDIpCisJCXJldHVybiB0b1JlbW92ZTsKKworCS8qCisJICogSW4gb3JkZXIg dG8gZmluZCByZWxhdGlvbnMgd2l0aCB0aGUgc2FtZSBvaWQgd2UgZmlyc3QgYnVpbGQgYW4g YXJyYXkgb2YKKwkgKiBjYW5kaWRhdGVzIGFuZCB0aGVuIHNvcnQgaXQgYnkgb2lkLgorCSAq LworCWNhbmRpZGF0ZXMgPSAoU2VsZkpvaW5DYW5kaWRhdGUgKikgcGFsbG9jKHNpemVvZihT ZWxmSm9pbkNhbmRpZGF0ZSkgKgorCQkJCQkJCQkJCQkgIG51bVJlbHMpOworCWkgPSAtMTsK KwlqID0gMDsKKwl3aGlsZSAoKGkgPSBibXNfbmV4dF9tZW1iZXIocmVsaWRzLCBpKSkgPj0g MCkKKwl7CisJCWNhbmRpZGF0ZXNbal0ucmVsaWQgPSBpOworCQljYW5kaWRhdGVzW2pdLnJl bG9pZCA9IHJvb3QtPnNpbXBsZV9ydGVfYXJyYXlbaV0tPnJlbGlkOworCQlqKys7CisJfQor CisJcXNvcnQoY2FuZGlkYXRlcywgbnVtUmVscywgc2l6ZW9mKFNlbGZKb2luQ2FuZGlkYXRl KSwKKwkJICBzZWxmX2pvaW5fY2FuZGlkYXRlc19jbXApOworCisJLyoKKwkgKiBJdGVyYXRp dmVseSBmb3JtIGEgZ3JvdXAgb2YgcmVsYXRpb24gaW5kZXhlcyB3aXRoIHRoZSBzYW1lIG9p ZCBhbmQKKwkgKiBsYXVuY2ggdGhlIHJvdXRpbmUgdGhhdCBkZXRlY3RzIHNlbGYtam9pbnMg aW4gdGhpcyBncm91cCBhbmQgcmVtb3ZlcworCSAqIGV4Y2Vzc2l2ZSByYW5nZSB0YWJsZSBl bnRyaWVzLgorCSAqCisJICogQXQgdGhlIGVuZCBvZiB0aGUgaXRlcmF0aW9uLCBleGNsdWRl IHRoZSBncm91cCBmcm9tIHRoZSBvdmVyYWxsIHJlbGlkcworCSAqIGxpc3QuIFNvIGVhY2gg bmV4dCBpdGVyYXRpb24gb2YgdGhlIGN5Y2xlIHdpbGwgaW52b2x2ZSBsZXNzIGFuZCBsZXNz CisJICogdmFsdWUgb2YgcmVsaWRzLgorCSAqLworCWkgPSAwOworCWZvciAoaiA9IDE7IGog PCBudW1SZWxzICsgMTsgaisrKQorCXsKKwkJaWYgKGogPT0gbnVtUmVscyB8fCBjYW5kaWRh dGVzW2pdLnJlbG9pZCAhPSBjYW5kaWRhdGVzW2ldLnJlbG9pZCkKKwkJeworCQkJaWYgKGog LSBpID49IDIpCisJCQl7CisJCQkJLyogQ3JlYXRlIGEgZ3JvdXAgb2YgcmVsYXRpb24gaW5k ZXhlcyB3aXRoIHRoZSBzYW1lIG9pZCAqLworCQkJCVJlbGlkcwkJZ3JvdXAgPSBOVUxMOwor CQkJCVJlbGlkcwkJcmVtb3ZlZDsKKworCQkJCXdoaWxlIChpIDwgaikKKwkJCQl7CisJCQkJ CWdyb3VwID0gYm1zX2FkZF9tZW1iZXIoZ3JvdXAsIGNhbmRpZGF0ZXNbaV0ucmVsaWQpOwor CQkJCQlpKys7CisJCQkJfQorCQkJCXJlbGlkcyA9IGJtc19kZWxfbWVtYmVycyhyZWxpZHMs IGdyb3VwKTsKKworCQkJCS8qCisJCQkJICogVHJ5IHRvIHJlbW92ZSBzZWxmLWpvaW5zIGZy b20gYSBncm91cCBvZiBpZGVudGljYWwgZW50cmllcy4KKwkJCQkgKiBNYWtlIHRoZSBuZXh0 IGF0dGVtcHQgaXRlcmF0aXZlbHkgLSBpZiBzb21ldGhpbmcgaXMgZGVsZXRlZAorCQkJCSAq IGZyb20gYSBncm91cCwgY2hhbmdlcyBpbiBjbGF1c2VzIGFuZCBlcXVpdmFsZW5jZSBjbGFz c2VzCisJCQkJICogY2FuIGdpdmUgdXMgYSBjaGFuY2UgdG8gZmluZCBtb3JlIGNhbmRpZGF0 ZXMuCisJCQkJICovCisJCQkJZG8KKwkJCQl7CisJCQkJCUFzc2VydCghYm1zX292ZXJsYXAo Z3JvdXAsIHRvUmVtb3ZlKSk7CisJCQkJCXJlbW92ZWQgPSByZW1vdmVfc2VsZl9qb2luc19v bmVfZ3JvdXAocm9vdCwgZ3JvdXApOworCQkJCQl0b1JlbW92ZSA9IGJtc19hZGRfbWVtYmVy cyh0b1JlbW92ZSwgcmVtb3ZlZCk7CisJCQkJCWdyb3VwID0gYm1zX2RlbF9tZW1iZXJzKGdy b3VwLCByZW1vdmVkKTsKKwkJCQl9IHdoaWxlICghYm1zX2lzX2VtcHR5KHJlbW92ZWQpICYm CisJCQkJCQkgYm1zX21lbWJlcnNoaXAoZ3JvdXApID09IEJNU19NVUxUSVBMRSk7CisJCQkJ Ym1zX2ZyZWUocmVtb3ZlZCk7CisJCQkJYm1zX2ZyZWUoZ3JvdXApOworCQkJfQorCQkJZWxz ZQorCQkJeworCQkJCS8qIFNpbmdsZSByZWxhdGlvbiwganVzdCByZW1vdmUgaXQgZnJvbSB0 aGUgc2V0ICovCisJCQkJcmVsaWRzID0gYm1zX2RlbF9tZW1iZXIocmVsaWRzLCBjYW5kaWRh dGVzW2ldLnJlbGlkKTsKKwkJCQlpID0gajsKKwkJCX0KKwkJfQorCX0KKworCUFzc2VydChi bXNfaXNfZW1wdHkocmVsaWRzKSk7CisKKwlyZXR1cm4gdG9SZW1vdmU7Cit9CisKKy8qCisg KiBDb21wYXJlIHNlbGYtam9pbiBjYW5kaWRhdGVzIGJ5IHRoZWlyIG9pZHMuCisgKi8KK3N0 YXRpYyBpbnQKK3NlbGZfam9pbl9jYW5kaWRhdGVzX2NtcChjb25zdCB2b2lkICphLCBjb25z dCB2b2lkICpiKQoreworCWNvbnN0IFNlbGZKb2luQ2FuZGlkYXRlICpjYSA9IChjb25zdCBT ZWxmSm9pbkNhbmRpZGF0ZSAqKSBhOworCWNvbnN0IFNlbGZKb2luQ2FuZGlkYXRlICpjYiA9 IChjb25zdCBTZWxmSm9pbkNhbmRpZGF0ZSAqKSBiOworCisJaWYgKGNhLT5yZWxvaWQgIT0g Y2ItPnJlbG9pZCkKKwkJcmV0dXJuIChjYS0+cmVsb2lkIDwgY2ItPnJlbG9pZCA/IC0xIDog MSk7CisJZWxzZQorCQlyZXR1cm4gMDsKK30KKworLyoKKyAqIEZpbmQgYW5kIHJlbW92ZSB1 c2VsZXNzIHNlbGYgam9pbnMuCisgKgorICogU2VhcmNoIGZvciBqb2lucyB3aGVyZSBhIHJl bGF0aW9uIGlzIGpvaW5lZCB0byBpdHNlbGYuIElmIHRoZSBqb2luIGNsYXVzZQorICogZm9y IGVhY2ggdHVwbGUgZnJvbSBvbmUgc2lkZSBvZiB0aGUgam9pbiBpcyBwcm92ZW4gdG8gbWF0 Y2ggdGhlIHNhbWUKKyAqIHBoeXNpY2FsIHJvdyAob3Igbm90aGluZykgb24gdGhlIG90aGVy IHNpZGUsIHRoYXQgc2VsZi1qb2luIGNhbiBiZQorICogZWxpbWluYXRlZCBmcm9tIHRoZSBx dWVyeS4gIFN1aXRhYmxlIGpvaW4gY2xhdXNlcyBhcmUgYXNzdW1lZCB0byBiZSBpbiB0aGUK KyAqIGZvcm0gb2YgWCA9IFgsIGFuZCBjYW4gYmUgcmVwbGFjZWQgd2l0aCBOT1QgTlVMTCBj bGF1c2VzLgorICoKKyAqIEZvciB0aGUgc2FrZSBvZiBzaW1wbGljaXR5LCB3ZSBkb24ndCBh cHBseSB0aGlzIG9wdGltaXphdGlvbiB0byBzcGVjaWFsCisgKiBqb2lucy4gSGVyZSBpcyBh IGxpc3Qgb2Ygd2hhdCB3ZSBjb3VsZCBkbyBpbiBzb21lIHBhcnRpY3VsYXIgY2FzZXM6Cisg KiAnYSBhMSBzZW1pIGpvaW4gYSBhMic6IGlzIHJlZHVjZWQgdG8gaW5uZXIgYnkgcmVkdWNl X3VuaXF1ZV9zZW1pam9pbnMsCisgKiBhbmQgdGhlbiByZW1vdmVkIG5vcm1hbGx5LgorICog J2EgYTEgYW50aSBqb2luIGEgYTInOiBjb3VsZCBzaW1wbGlmeSB0byBhIHNjYW4gd2l0aCAn b3V0ZXIgcXVhbHMgQU5ECisgKiAoSVMgTlVMTCBvbiBqb2luIGNvbHVtbnMgT1IgTk9UIGlu bmVyIHF1YWxzKScuCisgKiAnYSBhMSBsZWZ0IGpvaW4gYSBhMic6IGNvdWxkIHNpbXBsaWZ5 IHRvIGEgc2NhbiBsaWtlIGlubmVyIGJ1dCB3aXRob3V0CisgKiBOT1QgTlVMTCBjb25kaXRp b25zIG9uIGpvaW4gY29sdW1ucy4KKyAqICdhIGExIGxlZnQgam9pbiAoYSBhMiBqb2luIGIp JzogY2FuJ3Qgc2ltcGxpZnkgdGhpcywgYmVjYXVzZSBqb2luIHRvIGIKKyAqIGNhbiBib3Ro IHJlbW92ZSByb3dzIGFuZCBpbnRyb2R1Y2UgZHVwbGljYXRlcy4KKyAqCisgKiBUbyBzZWFy Y2ggZm9yIHJlbW92YWJsZSBqb2lucywgd2Ugb3JkZXIgYWxsIHRoZSByZWxhdGlvbnMgb24g dGhlaXIgT2lkLAorICogZ28gb3ZlciBlYWNoIHNldCB3aXRoIHRoZSBzYW1lIE9pZCwgYW5k IGNvbnNpZGVyIGVhY2ggcGFpciBvZiByZWxhdGlvbnMKKyAqIGluIHRoaXMgc2V0LgorICoK KyAqIFRvIHJlbW92ZSB0aGUgam9pbiwgd2UgbWFyayBvbmUgb2YgdGhlIHBhcnRpY2lwYXRp bmcgcmVsYXRpb25zIGFzIGRlYWQKKyAqIGFuZCByZXdyaXRlIGFsbCByZWZlcmVuY2VzIHRv IGl0IHRvIHBvaW50IHRvIHRoZSByZW1haW5pbmcgcmVsYXRpb24uCisgKiBUaGlzIGluY2x1 ZGVzIG1vZGlmeWluZyBSZXN0cmljdEluZm9zLCBFcXVpdmFsZW5jZUNsYXNzZXMsIGFuZAor ICogRXF1aXZhbGVuY2VNZW1iZXJzLiBXZSBhbHNvIGhhdmUgdG8gbW9kaWZ5IHRoZSByb3cg bWFya3MuIFRoZSBqb2luIGNsYXVzZXMKKyAqIG9mIHRoZSByZW1vdmVkIHJlbGF0aW9uIGJl Y29tZSBlaXRoZXIgcmVzdHJpY3Rpb24gb3Igam9pbiBjbGF1c2VzLCBiYXNlZCBvbgorICog d2hldGhlciB0aGV5IHJlZmVyZW5jZSBhbnkgcmVsYXRpb25zIG5vdCBwYXJ0aWNpcGF0aW5n IGluIHRoZSByZW1vdmVkIGpvaW4uCisgKgorICogJ2pvaW5saXN0JyBpcyB0aGUgdG9wLWxl dmVsIGpvaW5saXN0IG9mIHRoZSBxdWVyeS4gSWYgaXQgaGFzIGFueQorICogcmVmZXJlbmNl cyB0byB0aGUgcmVtb3ZlZCByZWxhdGlvbnMsIHdlIHVwZGF0ZSB0aGVtIHRvIHBvaW50IHRv IHRoZQorICogcmVtYWluaW5nIG9uZXMuCisgKi8KK0xpc3QgKgorcmVtb3ZlX3VzZWxlc3Nf c2VsZl9qb2lucyhQbGFubmVySW5mbyAqcm9vdCwgTGlzdCAqam9pbmxpc3QpCit7CisJUmVs aWRzCQl0b1JlbW92ZSA9IE5VTEw7CisJaW50CQkJcmVsaWQgPSAtMTsKKworCWlmICghZW5h YmxlX3NlbGZfam9pbl9lbGltaW5hdGlvbiB8fCBqb2lubGlzdCA9PSBOSUwgfHwKKwkJKGxp c3RfbGVuZ3RoKGpvaW5saXN0KSA9PSAxICYmICFJc0EobGluaXRpYWwoam9pbmxpc3QpLCBM aXN0KSkpCisJCXJldHVybiBqb2lubGlzdDsKKworCS8qCisJICogTWVyZ2UgcGFpcnMgb2Yg cmVsYXRpb25zIHBhcnRpY2lwYXRlZCBpbiBzZWxmLWpvaW4uIFJlbW92ZSB1bm5lY2Vzc2Fy eQorCSAqIHJhbmdlIHRhYmxlIGVudHJpZXMuCisJICovCisJdG9SZW1vdmUgPSByZW1vdmVf c2VsZl9qb2luc19yZWN1cnNlKHJvb3QsIGpvaW5saXN0LCB0b1JlbW92ZSk7CisKKwlpZiAo dW5saWtlbHkodG9SZW1vdmUgIT0gTlVMTCkpCisJeworCQkvKiBBdCB0aGUgZW5kLCByZW1v dmUgb3JwaGFuZWQgcmVsYXRpb24gbGlua3MgKi8KKwkJd2hpbGUgKChyZWxpZCA9IGJtc19u ZXh0X21lbWJlcih0b1JlbW92ZSwgcmVsaWQpKSA+PSAwKQorCQl7CisJCQlpbnQJbnJlbW92 ZWQgPSAwOworCisJCQlqb2lubGlzdCA9IHJlbW92ZV9yZWxfZnJvbV9qb2lubGlzdChqb2lu bGlzdCwgcmVsaWQsICZucmVtb3ZlZCk7CisJCQlpZiAobnJlbW92ZWQgIT0gMSkKKwkJCQll bG9nKEVSUk9SLCAiZmFpbGVkIHRvIGZpbmQgcmVsYXRpb24gJWQgaW4gam9pbmxpc3QiLCBy ZWxpZCk7CisJCX0KKwl9CisKKwlyZXR1cm4gam9pbmxpc3Q7CiB9CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubWFpbi5jIGIvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3BsYW4vcGxhbm1haW4uYwppbmRleCBhZGUyM2ZkOWQ1Li41NDY3ZTA5NGNhIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubWFpbi5jCisrKyBi L3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5tYWluLmMKQEAgLTIzMyw2ICsyMzMs MTEgQEAgcXVlcnlfcGxhbm5lcihQbGFubmVySW5mbyAqcm9vdCwKIAkgKi8KIAlyZWR1Y2Vf dW5pcXVlX3NlbWlqb2lucyhyb290KTsKIAorCS8qCisJICogUmVtb3ZlIHNlbGYgam9pbnMg b24gYSB1bmlxdWUgY29sdW1uLgorCSAqLworCWpvaW5saXN0ID0gcmVtb3ZlX3VzZWxlc3Nf c2VsZl9qb2lucyhyb290LCBqb2lubGlzdCk7CisKIAkvKgogCSAqIE5vdyBkaXN0cmlidXRl ICJwbGFjZWhvbGRlcnMiIHRvIGJhc2UgcmVscyBhcyBuZWVkZWQuICBUaGlzIGhhcyB0byBi ZQogCSAqIGRvbmUgYWZ0ZXIgam9pbiByZW1vdmFsIGJlY2F1c2UgcmVtb3ZhbCBjb3VsZCBj aGFuZ2Ugd2hldGhlciBhCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcHJl cC9wcmVwdW5pb24uYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wcmVwL3ByZXB1bmlvbi5j CmluZGV4IDdjMjdkYzI0ZTIuLmFmOTM2NGU5NTYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L29wdGltaXplci9wcmVwL3ByZXB1bmlvbi5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXpl ci9wcmVwL3ByZXB1bmlvbi5jCkBAIC02MzksNyArNjM5LDcgQEAgYnVpbGRfc2V0b3BfY2hp bGRfcGF0aHMoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAkgKiBvdGhl cndpc2UgZG8gc3RhdGlzdGljYWwgZXN0aW1hdGlvbi4KIAkgKgogCSAqIFhYWCB5b3UgZG9u J3QgcmVhbGx5IHdhbnQgdG8ga25vdyBhYm91dCB0aGlzOiB3ZSBkbyB0aGUgZXN0aW1hdGlv bgotCSAqIHVzaW5nIHRoZSBzdWJxdWVyeSdzIG9yaWdpbmFsIHRhcmdldGxpc3QgZXhwcmVz c2lvbnMsIG5vdCB0aGUKKwkgKiB1c2luZyB0aGUgc3Vicm9vdC0+cGFyc2UncyBvcmlnaW5h bCB0YXJnZXRsaXN0IGV4cHJlc3Npb25zLCBub3QgdGhlCiAJICogc3Vicm9vdC0+cHJvY2Vz c2VkX3RsaXN0IHdoaWNoIG1pZ2h0IHNlZW0gbW9yZSBhcHByb3ByaWF0ZS4gIFRoZSByZWFz b24KIAkgKiBpcyB0aGF0IGlmIHRoZSBzdWJxdWVyeSBpcyBpdHNlbGYgYSBzZXRvcCwgaXQg bWF5IHJldHVybiBhCiAJICogcHJvY2Vzc2VkX3RsaXN0IGNvbnRhaW5pbmcgInZhcm5vIDAi IFZhcnMgZ2VuZXJhdGVkIGJ5CkBAIC02NDcsNiArNjQ3LDkgQEAgYnVpbGRfc2V0b3BfY2hp bGRfcGF0aHMoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAkgKiBtaWdo dGlseS4gIFdlIG91Z2h0IHRvIGdldCByaWQgb2YgdGhlICJ2YXJubyAwIiBoYWNrLCBidXQg dGhhdCByZXF1aXJlcwogCSAqIGEgcmVkZXNpZ24gb2YgdGhlIHBhcnNldHJlZSByZXByZXNl bnRhdGlvbiBvZiBzZXRvcHMsIHNvIHRoYXQgdGhlcmUgY2FuCiAJICogYmUgYW4gUlRFIGNv cnJlc3BvbmRpbmcgdG8gZWFjaCBzZXRvcCdzIG91dHB1dC4KKwkgKiBOb3RlLCB3ZSB1c2Ug dGhpcyBub3Qgc3VicXVlcnkncyB0YXJnZXRsaXN0IGJ1dCBzdWJyb290LT5wYXJzZSdzCisJ ICogdGFyZ2V0bGlzdCwgYmVjYXVzZSBpdCB3YXMgcmV2aXNlZCBieSBzZWxmLWpvaW4gcmVt b3ZhbC4gIHN1YnF1ZXJ5J3MKKwkgKiB0YXJnZXRsaXN0IG1pZ2h0IGNvbnRhaW4gdGhlIHJl ZmVyZW5jZXMgdG8gdGhlIHJlbW92ZWQgcmVsaWRzLgogCSAqLwogCWlmIChwTnVtR3JvdXBz KQogCXsKQEAgLTY1OSw3ICs2NjIsNyBAQCBidWlsZF9zZXRvcF9jaGlsZF9wYXRocyhQbGFu bmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCQkJKnBOdW1Hcm91cHMgPSByZWwt PmNoZWFwZXN0X3RvdGFsX3BhdGgtPnJvd3M7CiAJCWVsc2UKIAkJCSpwTnVtR3JvdXBzID0g ZXN0aW1hdGVfbnVtX2dyb3VwcyhzdWJyb290LAotCQkJCQkJCQkJCQkgIGdldF90bGlzdF9l eHBycyhzdWJxdWVyeS0+dGFyZ2V0TGlzdCwgZmFsc2UpLAorCQkJCQkJCQkJCQkgIGdldF90 bGlzdF9leHBycyhzdWJyb290LT5wYXJzZS0+dGFyZ2V0TGlzdCwgZmFsc2UpLAogCQkJCQkJ CQkJCQkgIHJlbC0+Y2hlYXBlc3RfdG90YWxfcGF0aC0+cm93cywKIAkJCQkJCQkJCQkJICBO VUxMLAogCQkJCQkJCQkJCQkgIE5VTEwpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmV3 cml0ZS9yZXdyaXRlTWFuaXAuYyBiL3NyYy9iYWNrZW5kL3Jld3JpdGUvcmV3cml0ZU1hbmlw LmMKaW5kZXggYTExNWIyMTdjOS4uNzkxMTZkNWZjOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvcmV3cml0ZS9yZXdyaXRlTWFuaXAuYworKysgYi9zcmMvYmFja2VuZC9yZXdyaXRlL3Jl d3JpdGVNYW5pcC5jCkBAIC01MzYsNiArNTM2LDMzIEBAIG9mZnNldF9yZWxpZF9zZXQoUmVs aWRzIHJlbGlkcywgaW50IG9mZnNldCkKIAlyZXR1cm4gcmVzdWx0OwogfQogCisvKgorICog U3Vic3RpdHV0ZSBuZXdJZCBieSBvbGRJZCBpbiByZWxpZHMuCisgKgorICogV2UgbXVzdCBt YWtlIGEgY29weSBvZiB0aGUgb3JpZ2luYWwgQml0bWFwc2V0IGJlZm9yZSBtYWtpbmcgYW55 CisgKiBtb2RpZmljYXRpb25zLCBiZWNhdXNlIHRoZSBzYW1lIHBvaW50ZXIgdG8gaXQgbWln aHQgYmUgc2hhcmVkIGFtb25nCisgKiBkaWZmZXJlbnQgcGxhY2VzLgorICogQWxzbywgdGhp cyBmdW5jdGlvbiBjYW4gYmUgdXNlZCBpbiAnZGVsZXRlIG9ubHknIG1vZGUgKG5ld0lkIDwg MCkuCisgKiBJdCBhbGxvd3MgdXMgdG8gdXRpbGlzZSB0aGUgc2FtZSBjb2RlIGluIHRoZSBy ZW1vdmVfdXNlbGVzc19qb2lucyBhbmQgdGhlCisgKiByZW1vdmVfc2VsZl9qb2lucyBmZWF0 dXJlcy4KKyAqLworQml0bWFwc2V0ICoKK3JlcGxhY2VfcmVsaWQoUmVsaWRzIHJlbGlkcywg aW50IG9sZElkLCBpbnQgbmV3SWQpCit7CisJaWYgKElTX1NQRUNJQUxfVkFSTk8ob2xkSWQp KQorCQlyZXR1cm4gcmVsaWRzOworCisJLyogRGVsZXRlIHJlbGlkIHdpdGhvdXQgc3Vic3Rp dHV0aW9uLiAqLworCWlmIChJU19TUEVDSUFMX1ZBUk5PKG5ld0lkKSkKKwkJcmV0dXJuIGJt c19kZWxfbWVtYmVyKGJtc19jb3B5KHJlbGlkcyksIG9sZElkKTsKKworCS8qIFN1YnN0aXR1 dGUgbmV3SWQgZm9yIG9sZElkLiAqLworCWlmIChibXNfaXNfbWVtYmVyKG9sZElkLCByZWxp ZHMpKQorCQlyZXR1cm4gYm1zX2FkZF9tZW1iZXIoYm1zX2RlbF9tZW1iZXIoYm1zX2NvcHko cmVsaWRzKSwgb2xkSWQpLCBuZXdJZCk7CisKKwlyZXR1cm4gcmVsaWRzOworfQorCiAvKgog ICogQ2hhbmdlVmFyTm9kZXMgLSBhZGp1c3QgVmFyIG5vZGVzIGZvciBhIHNwZWNpZmljIGNo YW5nZSBvZiBSVCBpbmRleAogICoKQEAgLTU0NCw2ICs1NzEsNyBAQCBvZmZzZXRfcmVsaWRf c2V0KFJlbGlkcyByZWxpZHMsIGludCBvZmZzZXQpCiAgKiB0byAnbmV3X2luZGV4Jy4gIFRo ZSB2YXJub3N5biBmaWVsZHMgYXJlIGNoYW5nZWQgdG9vLiAgQWxzbywgYWRqdXN0IG90aGVy CiAgKiBub2RlcyB0aGF0IGNvbnRhaW4gcmFuZ2V0YWJsZSBpbmRleGVzLCBzdWNoIGFzIFJh bmdlVGJsUmVmIGFuZCBKb2luRXhwci4KICAqCisgKiBjaGFuZ2VfUmFuZ2VUYmxSZWY6IGRv IHdlIGNoYW5nZSBSYW5nZVRibFJlZiBvciBub3QuIHNlZSBDaGFuZ2VWYXJOb2Rlc0V4dGVu ZGVkLgogICogTk9URTogYWx0aG91Z2ggdGhpcyBoYXMgdGhlIGZvcm0gb2YgYSB3YWxrZXIs IHdlIGNoZWF0IGFuZCBtb2RpZnkgdGhlCiAgKiBub2RlcyBpbi1wbGFjZS4gIFRoZSBnaXZl biBleHByZXNzaW9uIHRyZWUgc2hvdWxkIGhhdmUgYmVlbiBjb3BpZWQKICAqIGVhcmxpZXIg dG8gZW5zdXJlIHRoYXQgbm8gdW53YW50ZWQgc2lkZS1lZmZlY3RzIG9jY3VyIQpAQCAtNTU0 LDYgKzU4Miw3IEBAIHR5cGVkZWYgc3RydWN0CiAJaW50CQkJcnRfaW5kZXg7CiAJaW50CQkJ bmV3X2luZGV4OwogCWludAkJCXN1YmxldmVsc191cDsKKwlib29sCQljaGFuZ2VfUmFuZ2VU YmxSZWY7CiB9IENoYW5nZVZhck5vZGVzX2NvbnRleHQ7CiAKIHN0YXRpYyBib29sCkBAIC01 ODYsNyArNjE1LDcgQEAgQ2hhbmdlVmFyTm9kZXNfd2Fsa2VyKE5vZGUgKm5vZGUsIENoYW5n ZVZhck5vZGVzX2NvbnRleHQgKmNvbnRleHQpCiAJCQljZXhwci0+Y3Zhcm5vID0gY29udGV4 dC0+bmV3X2luZGV4OwogCQlyZXR1cm4gZmFsc2U7CiAJfQotCWlmIChJc0Eobm9kZSwgUmFu Z2VUYmxSZWYpKQorCWlmIChJc0Eobm9kZSwgUmFuZ2VUYmxSZWYpICYmIGNvbnRleHQtPmNo YW5nZV9SYW5nZVRibFJlZikKIAl7CiAJCVJhbmdlVGJsUmVmICpydHIgPSAoUmFuZ2VUYmxS ZWYgKikgbm9kZTsKIApAQCAtNjMzLDYgKzY2Miw3NSBAQCBDaGFuZ2VWYXJOb2Rlc193YWxr ZXIoTm9kZSAqbm9kZSwgQ2hhbmdlVmFyTm9kZXNfY29udGV4dCAqY29udGV4dCkKIAkJfQog CQlyZXR1cm4gZmFsc2U7CiAJfQorCWlmIChJc0Eobm9kZSwgUmVzdHJpY3RJbmZvKSkKKwl7 CisJCVJlc3RyaWN0SW5mbyAqcmluZm8gPSAoUmVzdHJpY3RJbmZvICopIG5vZGU7CisJCWlu dAkJCXJlbGlkID0gLTE7CisJCWJvb2wJCWlzX3JlcV9lcXVhbCA9CisJCQkocmluZm8tPnJl cXVpcmVkX3JlbGlkcyA9PSByaW5mby0+Y2xhdXNlX3JlbGlkcyk7CisJCWJvb2wJCWNsYXVz ZV9yZWxpZHNfaXNfbXVsdGlwbGUgPQorCQkJKGJtc19tZW1iZXJzaGlwKHJpbmZvLT5jbGF1 c2VfcmVsaWRzKSA9PSBCTVNfTVVMVElQTEUpOworCisJCWlmIChibXNfaXNfbWVtYmVyKGNv bnRleHQtPnJ0X2luZGV4LCByaW5mby0+Y2xhdXNlX3JlbGlkcykpCisJCXsKKwkJCWV4cHJl c3Npb25fdHJlZV93YWxrZXIoKE5vZGUgKikgcmluZm8tPmNsYXVzZSwgQ2hhbmdlVmFyTm9k ZXNfd2Fsa2VyLCAodm9pZCAqKSBjb250ZXh0KTsKKwkJCWV4cHJlc3Npb25fdHJlZV93YWxr ZXIoKE5vZGUgKikgcmluZm8tPm9yY2xhdXNlLCBDaGFuZ2VWYXJOb2Rlc193YWxrZXIsICh2 b2lkICopIGNvbnRleHQpOworCisJCQlyaW5mby0+Y2xhdXNlX3JlbGlkcyA9CisJCQkJcmVw bGFjZV9yZWxpZChyaW5mby0+Y2xhdXNlX3JlbGlkcywgY29udGV4dC0+cnRfaW5kZXgsIGNv bnRleHQtPm5ld19pbmRleCk7CisJCQlyaW5mby0+bnVtX2Jhc2VfcmVscyA9IGJtc19udW1f bWVtYmVycyhyaW5mby0+Y2xhdXNlX3JlbGlkcyk7CisJCQlyaW5mby0+bGVmdF9yZWxpZHMg PQorCQkJCXJlcGxhY2VfcmVsaWQocmluZm8tPmxlZnRfcmVsaWRzLCBjb250ZXh0LT5ydF9p bmRleCwgY29udGV4dC0+bmV3X2luZGV4KTsKKwkJCXJpbmZvLT5yaWdodF9yZWxpZHMgPQor CQkJCXJlcGxhY2VfcmVsaWQocmluZm8tPnJpZ2h0X3JlbGlkcywgY29udGV4dC0+cnRfaW5k ZXgsIGNvbnRleHQtPm5ld19pbmRleCk7CisJCX0KKworCQlpZiAoaXNfcmVxX2VxdWFsKQor CQkJcmluZm8tPnJlcXVpcmVkX3JlbGlkcyA9IHJpbmZvLT5jbGF1c2VfcmVsaWRzOworCQll bHNlCisJCQlyaW5mby0+cmVxdWlyZWRfcmVsaWRzID0KKwkJCQlyZXBsYWNlX3JlbGlkKHJp bmZvLT5yZXF1aXJlZF9yZWxpZHMsIGNvbnRleHQtPnJ0X2luZGV4LCBjb250ZXh0LT5uZXdf aW5kZXgpOworCisJCXJpbmZvLT5vdXRlcl9yZWxpZHMgPQorCQkJcmVwbGFjZV9yZWxpZChy aW5mby0+b3V0ZXJfcmVsaWRzLCBjb250ZXh0LT5ydF9pbmRleCwgY29udGV4dC0+bmV3X2lu ZGV4KTsKKwkJcmluZm8tPmluY29tcGF0aWJsZV9yZWxpZHMgPQorCQkJcmVwbGFjZV9yZWxp ZChyaW5mby0+aW5jb21wYXRpYmxlX3JlbGlkcywgY29udGV4dC0+cnRfaW5kZXgsIGNvbnRl eHQtPm5ld19pbmRleCk7CisKKwkJaWYgKHJpbmZvLT5tZXJnZW9wZmFtaWxpZXMgJiYKKwkJ CWJtc19nZXRfc2luZ2xldG9uX21lbWJlcihyaW5mby0+Y2xhdXNlX3JlbGlkcywgJnJlbGlk KSAmJgorCQkJY2xhdXNlX3JlbGlkc19pc19tdWx0aXBsZSAmJgorCQkJcmVsaWQgPT0gY29u dGV4dC0+bmV3X2luZGV4ICYmIElzQShyaW5mby0+Y2xhdXNlLCBPcEV4cHIpKQorCQl7CisJ CQlFeHByCSAgICpsZWZ0T3A7CisJCQlFeHByCSAgICpyaWdodE9wOworCisJCQlsZWZ0T3Ag PSAoRXhwciAqKSBnZXRfbGVmdG9wKHJpbmZvLT5jbGF1c2UpOworCQkJcmlnaHRPcCA9IChF eHByICopIGdldF9yaWdodG9wKHJpbmZvLT5jbGF1c2UpOworCisJCQkvKgorCQkJICogZm9y IFNKRSAoc2VsZiBqb2luIGVsaW1pbmF0aW9uKSwgY2hhbmdpbmcgdmFybm9zIHdpbGwgbWFr ZSB0MS5hID0gdDIuYQorCQkJICogdG8gInQxLmEgPSB0MS5hIiwgd2hpY2ggaXMgYWx3YXlz IHRydWUsIHdlIGNhbiBvcHRpem1pZWQgaXQgb3V0LgorCQkJICogdG8gb3B0aW16aWVkIGl0 IG91dCwgd2UgdXNlIGVxdWFsIHRvIHZhbGlkYXRlLAorCQkJICogYnV0IHdlIGFsc28gbmVl ZCB0byBhZGQgYSBub3QgbnVsbCBxdWFsIChOdWxsVGVzdCkuCisJCQkgKgorCQkJKi8KKwkJ CWlmIChsZWZ0T3AgIT0gTlVMTCAmJiBlcXVhbChsZWZ0T3AsIHJpZ2h0T3ApKQorCQkJewor CQkJCU51bGxUZXN0ICAgKm50ZXN0ID0gbWFrZU5vZGUoTnVsbFRlc3QpOworCisJCQkJbnRl c3QtPmFyZyA9IGxlZnRPcDsKKwkJCQludGVzdC0+bnVsbHRlc3R0eXBlID0gSVNfTk9UX05V TEw7CisJCQkJbnRlc3QtPmFyZ2lzcm93ID0gZmFsc2U7CisJCQkJbnRlc3QtPmxvY2F0aW9u ID0gLTE7CisJCQkJcmluZm8tPmNsYXVzZSA9IChFeHByICopIG50ZXN0OworCQkJCXJpbmZv LT5tZXJnZW9wZmFtaWxpZXMgPSBOSUw7CisJCQkJcmluZm8tPmxlZnRfZW0gPSBOVUxMOwor CQkJCXJpbmZvLT5yaWdodF9lbSA9IE5VTEw7CisJCQl9CisJCQlBc3NlcnQocmluZm8tPm9y Y2xhdXNlID09IE5VTEwpOworCQl9CisJCXJldHVybiBmYWxzZTsKKwl9CiAJaWYgKElzQShu b2RlLCBBcHBlbmRSZWxJbmZvKSkKIAl7CiAJCUFwcGVuZFJlbEluZm8gKmFwcGluZm8gPSAo QXBwZW5kUmVsSW5mbyAqKSBub2RlOwpAQCAtNjY1LDMyICs3NjMsMzEgQEAgQ2hhbmdlVmFy Tm9kZXNfd2Fsa2VyKE5vZGUgKm5vZGUsIENoYW5nZVZhck5vZGVzX2NvbnRleHQgKmNvbnRl eHQpCiAJcmV0dXJuIGV4cHJlc3Npb25fdHJlZV93YWxrZXIobm9kZSwgQ2hhbmdlVmFyTm9k ZXNfd2Fsa2VyLCBjb250ZXh0KTsKIH0KIAorLyoKKyAqIGFsbW9zdCBlcXVpdmFsZW50IHRv IENoYW5nZVZhck5vZGVzLiBhbHNvIHNlZSBjb21tZW50cyBpbiBDaGFuZ2VWYXJOb2Rlcy4K KyAqIGRpZmZlcmVuY2Ugd2l0aCBDaGFuZ2VWYXJOb2RlczoKKyAqIHdoZW4gd2UgdXNlIENo YW5nZVZhck5vZGVzIGZvciBub2RlIHdlIGNoYW5nZSBhbGwgb2YgaXQncyB1bmRlcmx5aW5n IG5vZGVzLgorICogYnV0IGZvciBTSkUgd2UgZG9uJ3Qgd2FudCB0byBjaGFuZ2Ugbm9kZSB0 eXBlOiBSYW5nZVRibFJlZiwgaW4gc29tZSBvY2Nhc2lvbi4KKyAqIGJlY2F1c2UgU0pFIGxh c3Qgc3RlcCwgcmVtb3ZlX3JlbF9mcm9tX2pvaW5saXN0IGlzIHRvCisgKiByZW1vdmUgbGVm dCBub2RlIChSYW5nZVRibFJlZikgb25lIGJ5IG9uZS4gaWYgaW4gYW55IGNhc2Ugd2hpbGUg dXNpbmcKKyAqIENoYW5nZVZhck5vZGVzLCBieSBhY2NpZGVudGx5IGxlYWYgbm9kZSBSYW5n ZVRibFJlZiBhbHNvIGJlaW5nIHVwZGF0ZWQKKyAqIHRoZW4gcmVtb3ZlX3JlbF9mcm9tX2pv aW5saXN0IHdpbGwgaGF2ZSBlcnJvci4KKyovCiB2b2lkCi1DaGFuZ2VWYXJOb2RlcyhOb2Rl ICpub2RlLCBpbnQgcnRfaW5kZXgsIGludCBuZXdfaW5kZXgsIGludCBzdWJsZXZlbHNfdXAp CitDaGFuZ2VWYXJOb2Rlc0V4dGVuZGVkKE5vZGUgKm5vZGUsIGludCBydF9pbmRleCwgaW50 IG5ld19pbmRleCwKKwkJCQkJICAgaW50IHN1YmxldmVsc191cCwgYm9vbCBjaGFuZ2VfUmFu Z2VUYmxSZWYpCiB7CiAJQ2hhbmdlVmFyTm9kZXNfY29udGV4dCBjb250ZXh0OwogCiAJY29u dGV4dC5ydF9pbmRleCA9IHJ0X2luZGV4OwogCWNvbnRleHQubmV3X2luZGV4ID0gbmV3X2lu ZGV4OwogCWNvbnRleHQuc3VibGV2ZWxzX3VwID0gc3VibGV2ZWxzX3VwOworCWNvbnRleHQu Y2hhbmdlX1JhbmdlVGJsUmVmID0gY2hhbmdlX1JhbmdlVGJsUmVmOwogCi0JLyoKLQkgKiBN dXN0IGJlIHByZXBhcmVkIHRvIHN0YXJ0IHdpdGggYSBRdWVyeSBvciBhIGJhcmUgZXhwcmVz c2lvbiB0cmVlOyBpZgotCSAqIGl0J3MgYSBRdWVyeSwgZ28gc3RyYWlnaHQgdG8gcXVlcnlf dHJlZV93YWxrZXIgdG8gbWFrZSBzdXJlIHRoYXQKLQkgKiBzdWJsZXZlbHNfdXAgZG9lc24n dCBnZXQgaW5jcmVtZW50ZWQgcHJlbWF0dXJlbHkuCi0JICovCiAJaWYgKG5vZGUgJiYgSXNB KG5vZGUsIFF1ZXJ5KSkKIAl7CiAJCVF1ZXJ5CSAgICpxcnkgPSAoUXVlcnkgKikgbm9kZTsK IAotCQkvKgotCQkgKiBJZiB3ZSBhcmUgc3RhcnRpbmcgYXQgYSBRdWVyeSwgYW5kIHN1Ymxl dmVsc191cCBpcyB6ZXJvLCB0aGVuIHdlCi0JCSAqIG11c3QgYWxzbyBmaXggcmFuZ2V0YWJs ZSBpbmRleGVzIGluIHRoZSBRdWVyeSBpdHNlbGYgLS0tIG5hbWVseQotCQkgKiByZXN1bHRS ZWxhdGlvbiwgbWVyZ2VUYXJnZXRSZWxhdGlvbiwgZXhjbFJlbEluZGV4ICBhbmQgcm93TWFy a3MKLQkJICogZW50cmllcy4gIHN1YmxldmVsc191cCBjYW5ub3QgYmUgemVybyB3aGVuIHJl Y3Vyc2luZyBpbnRvIGEKLQkJICogc3VicXVlcnksIHNvIHRoZXJlJ3Mgbm8gbmVlZCB0byBo YXZlIHRoZSBzYW1lIGxvZ2ljIGluc2lkZQotCQkgKiBDaGFuZ2VWYXJOb2Rlc193YWxrZXIu Ci0JCSAqLwogCQlpZiAoc3VibGV2ZWxzX3VwID09IDApCiAJCXsKIAkJCUxpc3RDZWxsICAg Kmw7CkBAIC03MDEsNyArNzk4LDYgQEAgQ2hhbmdlVmFyTm9kZXMoTm9kZSAqbm9kZSwgaW50 IHJ0X2luZGV4LCBpbnQgbmV3X2luZGV4LCBpbnQgc3VibGV2ZWxzX3VwKQogCQkJaWYgKHFy eS0+bWVyZ2VUYXJnZXRSZWxhdGlvbiA9PSBydF9pbmRleCkKIAkJCQlxcnktPm1lcmdlVGFy Z2V0UmVsYXRpb24gPSBuZXdfaW5kZXg7CiAKLQkJCS8qIHRoaXMgaXMgdW5saWtlbHkgdG8g ZXZlciBiZSB1c2VkLCBidXQgLi4uICovCiAJCQlpZiAocXJ5LT5vbkNvbmZsaWN0ICYmIHFy eS0+b25Db25mbGljdC0+ZXhjbFJlbEluZGV4ID09IHJ0X2luZGV4KQogCQkJCXFyeS0+b25D b25mbGljdC0+ZXhjbFJlbEluZGV4ID0gbmV3X2luZGV4OwogCkBAIC03MTksNiArODE1LDEy IEBAIENoYW5nZVZhck5vZGVzKE5vZGUgKm5vZGUsIGludCBydF9pbmRleCwgaW50IG5ld19p bmRleCwgaW50IHN1YmxldmVsc191cCkKIAkJQ2hhbmdlVmFyTm9kZXNfd2Fsa2VyKG5vZGUs ICZjb250ZXh0KTsKIH0KIAordm9pZAorQ2hhbmdlVmFyTm9kZXMoTm9kZSAqbm9kZSwgaW50 IHJ0X2luZGV4LCBpbnQgbmV3X2luZGV4LCBpbnQgc3VibGV2ZWxzX3VwKQoreworCUNoYW5n ZVZhck5vZGVzRXh0ZW5kZWQobm9kZSwgcnRfaW5kZXgsIG5ld19pbmRleCwgc3VibGV2ZWxz X3VwLCB0cnVlKTsKK30KKwogLyoKICAqIFN1YnN0aXR1dGUgbmV3cmVsaWQgZm9yIG9sZHJl bGlkIGluIGEgUmVsaWQgc2V0CiAgKgpAQCAtNzM2LDcgKzgzOCw4IEBAIGFkanVzdF9yZWxp ZF9zZXQoUmVsaWRzIHJlbGlkcywgaW50IG9sZHJlbGlkLCBpbnQgbmV3cmVsaWQpCiAJCXJl bGlkcyA9IGJtc19jb3B5KHJlbGlkcyk7CiAJCS8qIFJlbW92ZSBvbGQsIGFkZCBuZXcgKi8K IAkJcmVsaWRzID0gYm1zX2RlbF9tZW1iZXIocmVsaWRzLCBvbGRyZWxpZCk7Ci0JCXJlbGlk cyA9IGJtc19hZGRfbWVtYmVyKHJlbGlkcywgbmV3cmVsaWQpOworCQlpZiAoIUlTX1NQRUNJ QUxfVkFSTk8obmV3cmVsaWQpKQorCQkJcmVsaWRzID0gYm1zX2FkZF9tZW1iZXIocmVsaWRz LCBuZXdyZWxpZCk7CiAJfQogCXJldHVybiByZWxpZHM7CiB9CmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL21p c2MvZ3VjX3RhYmxlcy5jCmluZGV4IDM4Y2I5ZTk3MGQuLmM4MDI3M2E1MjEgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3RhYmxlcy5jCisrKyBiL3NyYy9iYWNr ZW5kL3V0aWxzL21pc2MvZ3VjX3RhYmxlcy5jCkBAIC05ODcsNiArOTg3LDE2IEBAIHN0cnVj dCBjb25maWdfYm9vbCBDb25maWd1cmVOYW1lc0Jvb2xbXSA9CiAJCXRydWUsCiAJCU5VTEws IE5VTEwsIE5VTEwKIAl9LAorCXsKKwkJeyJlbmFibGVfc2VsZl9qb2luX2VsaW1pbmF0aW9u IiwgUEdDX1VTRVJTRVQsIFFVRVJZX1RVTklOR19NRVRIT0QsCisJCQlnZXR0ZXh0X25vb3Ao IkVuYWJsZSByZW1vdmFsIG9mIHVuaXF1ZSBzZWxmLWpvaW5zLiIpLAorCQkJTlVMTCwKKwkJ CUdVQ19FWFBMQUlOIHwgR1VDX05PVF9JTl9TQU1QTEUKKwkJfSwKKwkJJmVuYWJsZV9zZWxm X2pvaW5fZWxpbWluYXRpb24sCisJCXRydWUsCisJCU5VTEwsIE5VTEwsIE5VTEwKKwl9LAog CXsKIAkJeyJlbmFibGVfZ3JvdXBfYnlfcmVvcmRlcmluZyIsIFBHQ19VU0VSU0VULCBRVUVS WV9UVU5JTkdfTUVUSE9ELAogCQkJZ2V0dGV4dF9ub29wKCJFbmFibGVzIHJlb3JkZXJpbmcg b2YgR1JPVVAgQlkga2V5cy4iKSwKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3Bh dGhub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKaW5kZXggNTJkNDRm NDMwMi4uNDA0YzBjNGExZiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5v ZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKQEAgLTE4OCw2ICsx ODgsMTEgQEAgdHlwZWRlZiBzdHJ1Y3QgUGxhbm5lckdsb2JhbAogICogTm90IGFsbCBmaWVs ZHMgYXJlIHByaW50ZWQuICAoSW4gc29tZSBjYXNlcywgdGhlcmUgaXMgbm8gcHJpbnQgc3Vw cG9ydCBmb3IKICAqIHRoZSBmaWVsZCB0eXBlOyBpbiBvdGhlcnMsIGRvaW5nIHNvIHdvdWxk IGxlYWQgdG8gaW5maW5pdGUgcmVjdXJzaW9uIG9yCiAgKiBibG9hdCBkdW1wIG91dHB1dCBt b3JlIHRoYW4gc2VlbXMgdXNlZnVsLikKKyAqCisgKiBOT1RFOiBXaGVuIGFkZGluZyBuZXcg ZW50cmllcyBjb250YWluaW5nIHJlbGlkcyBhbmQgcmVsaWQgYml0bWFwc2V0cywKKyAqIHJl bWVtYmVyIHRvIGNoZWNrIHRoYXQgdGhleSB3aWxsIGJlIGNvcnJlY3RseSBwcm9jZXNzZWQg YnkKKyAqIHRoZSByZW1vdmVfc2VsZl9qb2luX3JlbCBmdW5jdGlvbiAtIHJlbGlkIG9mIHJl bW92aW5nIHJlbGF0aW9uIHdpbGwgYmUKKyAqIGNvcnJlY3RseSByZXBsYWNlZCB3aXRoIHRo ZSBrZWVwaW5nIG9uZS4KICAqLS0tLS0tLS0tLQogICovCiAjaWZuZGVmIEhBVkVfUExBTk5F UklORk9fVFlQRURFRgpAQCAtNzQwLDcgKzc0NSw3IEBAIHR5cGVkZWYgc3RydWN0IFBhcnRp dGlvblNjaGVtZURhdGEgKlBhcnRpdGlvblNjaGVtZTsKICAqIHBvcHVsYXRlIHRoZXNlIGZp ZWxkcywgZm9yIGJhc2UgcmVsczsgYnV0IHNvbWVkYXkgdGhleSBtaWdodCBiZSB1c2VkIGZv cgogICogam9pbiByZWxzIHRvbzoKICAqCi0gKgkJdW5pcXVlX2Zvcl9yZWxzIC0gbGlzdCBv ZiBSZWxpZCBzZXRzLCBlYWNoIG9uZSBiZWluZyBhIHNldCBvZiBvdGhlcgorICoJCXVuaXF1 ZV9mb3JfcmVscyAtIGxpc3Qgb2YgVW5pcXVlUmVsSW5mbywgZWFjaCBvbmUgYmVpbmcgYSBz ZXQgb2Ygb3RoZXIKICAqCQkJCQlyZWxzIGZvciB3aGljaCB0aGlzIG9uZSBoYXMgYmVlbiBw cm92ZW4gdW5pcXVlCiAgKgkJbm9uX3VuaXF1ZV9mb3JfcmVscyAtIGxpc3Qgb2YgUmVsaWQg c2V0cywgZWFjaCBvbmUgYmVpbmcgYSBzZXQgb2YKICAqCQkJCQlvdGhlciByZWxzIGZvciB3 aGljaCB3ZSBoYXZlIHRyaWVkIGFuZCBmYWlsZWQgdG8gcHJvdmUKQEAgLTk3OSw3ICs5ODQs NyBAQCB0eXBlZGVmIHN0cnVjdCBSZWxPcHRJbmZvCiAJLyoKIAkgKiBjYWNoZSBzcGFjZSBm b3IgcmVtZW1iZXJpbmcgaWYgd2UgaGF2ZSBwcm92ZW4gdGhpcyByZWxhdGlvbiB1bmlxdWUK IAkgKi8KLQkvKiBrbm93biB1bmlxdWUgZm9yIHRoZXNlIG90aGVyIHJlbGlkIHNldChzKSAq LworCS8qIGtub3duIHVuaXF1ZSBmb3IgdGhlc2Ugb3RoZXIgcmVsaWQgc2V0KHMpIGdpdmVu IGluIFVuaXF1ZVJlbEluZm8ocykgKi8KIAlMaXN0CSAgICp1bmlxdWVfZm9yX3JlbHM7CiAJ Lyoga25vd24gbm90IHVuaXF1ZSBmb3IgdGhlc2Ugc2V0KHMpICovCiAJTGlzdAkgICAqbm9u X3VuaXF1ZV9mb3JfcmVsczsKQEAgLTM0NTAsNCArMzQ1NSwzNSBAQCB0eXBlZGVmIHN0cnVj dCBBZ2dUcmFuc0luZm8KIAlib29sCQlpbml0VmFsdWVJc051bGw7CiB9IEFnZ1RyYW5zSW5m bzsKIAorLyoKKyAqIFVuaXF1ZVJlbEluZm8gY2FjaGVzIGEgZmFjdCB0aGF0IGEgcmVsYXRp b24gaXMgdW5pcXVlIHdoZW4gYmVpbmcgam9pbmVkCisgKiB0byBvdGhlciByZWxhdGlvbihz KS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgVW5pcXVlUmVsSW5mbworeworCXBnX25vZGVfYXR0 cihub19jb3B5X2VxdWFsLCBub19yZWFkLCBub19xdWVyeV9qdW1ibGUpCisKKwlOb2RlVGFn CQl0eXBlOworCisJLyoKKwkgKiBUaGUgcmVsYXRpb24gaW4gY29uc2lkZXJhdGlvbiBpcyB1 bmlxdWUgd2hlbiBiZWluZyBqb2luZWQgd2l0aCB0aGlzIHNldAorCSAqIG9mIG90aGVyIHJl bGF0aW9uKHMpLgorCSAqLworCVJlbGlkcwkJb3V0ZXJyZWxpZHM7CisKKwkvKgorCSAqIFRo ZSByZWxhdGlvbiBpbiBjb25zaWRlcmF0aW9uIGlzIHVuaXF1ZSB3aGVuIGNvbnNpZGVyaW5n IG9ubHkgY2xhdXNlcworCSAqIHN1aXRhYmxlIGZvciBzZWxmLWpvaW4gKHBhc3NlZCBzcGxp dF9zZWxmam9pbl9xdWFscygpKS4KKwkgKi8KKwlib29sCQlzZWxmX2pvaW47CisKKwkvKgor CSAqIEFkZGl0aW9uYWwgY2xhdXNlcyBmcm9tIGEgYmFzZXJlc3RyaWN0aW5mbyBsaXN0IHRo YXQgd2VyZSB1c2VkIHRvIHByb3ZlCisJICogdGhlIHVuaXF1ZW5lc3MuICAgV2UgY2FjaGUg aXQgZm9yIHRoZSBzZWxmLWpvaW4gY2hlY2tpbmcgcHJvY2VkdXJlOiBhCisJICogc2VsZi1q b2luIGNhbiBiZSByZW1vdmVkIGlmIHRoZSBvdXRlciByZWxhdGlvbiBjb250YWlucyBzdHJp Y3RseSB0aGUKKwkgKiBzYW1lIHNldCBvZiBjbGF1c2VzLgorCSAqLworCUxpc3QJICAgKmV4 dHJhX2NsYXVzZXM7Cit9IFVuaXF1ZVJlbEluZm87CisKICNlbmRpZgkJCQkJCQkvKiBQQVRI Tk9ERVNfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL29wdGltaXpl ci5oIGIvc3JjL2luY2x1ZGUvb3B0aW1pemVyL29wdGltaXplci5oCmluZGV4IGJjZjhlZDY0 NWMuLjRjOTg0MzcyODYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL29wdGltaXplci9vcHRp bWl6ZXIuaAorKysgYi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvb3B0aW1pemVyLmgKQEAgLTE5 Miw2ICsxOTIsOCBAQCBleHRlcm4gU29ydEdyb3VwQ2xhdXNlICpnZXRfc29ydGdyb3VwcmVm X2NsYXVzZV9ub2VycihJbmRleCBzb3J0cmVmLAogCQkJCQkJCQkJCQkgKiBvdXRwdXQgbGlz dCAqLwogI2RlZmluZSBQVkNfUkVDVVJTRV9QTEFDRUhPTERFUlMJMHgwMDIwCS8qIHJlY3Vy c2UgaW50byBQbGFjZUhvbGRlclZhcgogCQkJCQkJCQkJCQkgKiBhcmd1bWVudHMgKi8KKyNk ZWZpbmUgUFZDX0lOQ0xVREVfQ09OVkVSVFJPV1RZUEVTCTB4MDA0MCAgICAgLyogaW5jbHVk ZSBDb252ZXJ0Um93dHlwZUV4cHJzIGluCisJCQkJCQkJKiBvdXRwdXQgbGlzdCAqLwogCiBl eHRlcm4gQml0bWFwc2V0ICpwdWxsX3Zhcm5vcyhQbGFubmVySW5mbyAqcm9vdCwgTm9kZSAq bm9kZSk7CiBleHRlcm4gQml0bWFwc2V0ICpwdWxsX3Zhcm5vc19vZl9sZXZlbChQbGFubmVy SW5mbyAqcm9vdCwgTm9kZSAqbm9kZSwgaW50IGxldmVsc3VwKTsKZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL29wdGltaXplci9wYXRocy5oIGIvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3Bh dGhzLmgKaW5kZXggNDY5NTVkMTI4Zi4uYmM1ZGZkN2RiNCAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvb3B0aW1pemVyL3BhdGhzLmgKKysrIGIvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3Bh dGhzLmgKQEAgLTcyLDYgKzcyLDkgQEAgZXh0ZXJuIHZvaWQgY3JlYXRlX2luZGV4X3BhdGhz KFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwpOwogZXh0ZXJuIGJvb2wgcmVs YXRpb25faGFzX3VuaXF1ZV9pbmRleF9mb3IoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdElu Zm8gKnJlbCwKIAkJCQkJCQkJCQkgIExpc3QgKnJlc3RyaWN0bGlzdCwKIAkJCQkJCQkJCQkg IExpc3QgKmV4cHJsaXN0LCBMaXN0ICpvcHJsaXN0KTsKK2V4dGVybiBib29sIHJlbGF0aW9u X2hhc191bmlxdWVfaW5kZXhfZXh0KFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpy ZWwsCisJCQkJCQkJCQkJICBMaXN0ICpyZXN0cmljdGxpc3QsIExpc3QgKmV4cHJsaXN0LAor CQkJCQkJCQkJCSAgTGlzdCAqb3BybGlzdCwgTGlzdCAqKmV4dHJhX2NsYXVzZXMpOwogZXh0 ZXJuIGJvb2wgaW5kZXhjb2xfaXNfYm9vbF9jb25zdGFudF9mb3JfcXVlcnkoUGxhbm5lcklu Zm8gKnJvb3QsCiAJCQkJCQkJCQkJCQlJbmRleE9wdEluZm8gKmluZGV4LAogCQkJCQkJCQkJ CQkJaW50IGluZGV4Y29sKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL29wdGltaXplci9w bGFubWFpbi5oIGIvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BsYW5tYWluLmgKaW5kZXggZmVl MzM3OGJiZS4uNWE5MzAxOTk2MSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvb3B0aW1pemVy L3BsYW5tYWluLmgKKysrIGIvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BsYW5tYWluLmgKQEAg LTIwLDYgKzIwLDcgQEAKIC8qIEdVQyBwYXJhbWV0ZXJzICovCiAjZGVmaW5lIERFRkFVTFRf Q1VSU09SX1RVUExFX0ZSQUNUSU9OIDAuMQogZXh0ZXJuIFBHRExMSU1QT1JUIGRvdWJsZSBj dXJzb3JfdHVwbGVfZnJhY3Rpb247CitleHRlcm4gUEdETExJTVBPUlQgYm9vbCBlbmFibGVf c2VsZl9qb2luX2VsaW1pbmF0aW9uOwogCiAvKiBxdWVyeV9wbGFubmVyIGNhbGxiYWNrIHRv IGNvbXB1dGUgcXVlcnlfcGF0aGtleXMgKi8KIHR5cGVkZWYgdm9pZCAoKnF1ZXJ5X3BhdGhr ZXlzX2NhbGxiYWNrKSAoUGxhbm5lckluZm8gKnJvb3QsIHZvaWQgKmV4dHJhKTsKQEAgLTEx Myw2ICsxMTQsMTEgQEAgZXh0ZXJuIGJvb2wgcXVlcnlfaXNfZGlzdGluY3RfZm9yKFF1ZXJ5 ICpxdWVyeSwgTGlzdCAqY29sbm9zLCBMaXN0ICpvcGlkcyk7CiBleHRlcm4gYm9vbCBpbm5l cnJlbF9pc191bmlxdWUoUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJCQkJICAgUmVsaWRzIGpv aW5yZWxpZHMsIFJlbGlkcyBvdXRlcnJlbGlkcywgUmVsT3B0SW5mbyAqaW5uZXJyZWwsCiAJ CQkJCQkJICAgSm9pblR5cGUgam9pbnR5cGUsIExpc3QgKnJlc3RyaWN0bGlzdCwgYm9vbCBm b3JjZV9jYWNoZSk7CitleHRlcm4gYm9vbCBpbm5lcnJlbF9pc191bmlxdWVfZXh0KFBsYW5u ZXJJbmZvICpyb290LCBSZWxpZHMgam9pbnJlbGlkcywKKwkJCQkJCQkJICAgUmVsaWRzIG91 dGVycmVsaWRzLCBSZWxPcHRJbmZvICppbm5lcnJlbCwKKwkJCQkJCQkJICAgSm9pblR5cGUg am9pbnR5cGUsIExpc3QgKnJlc3RyaWN0bGlzdCwKKwkJCQkJCQkJICAgYm9vbCBmb3JjZV9j YWNoZSwgTGlzdCAqKnVjbGF1c2VzKTsKK2V4dGVybiBMaXN0ICpyZW1vdmVfdXNlbGVzc19z ZWxmX2pvaW5zKFBsYW5uZXJJbmZvICpyb290LCBMaXN0ICpqb2ludHJlZSk7CiAKIC8qCiAg KiBwcm90b3R5cGVzIGZvciBwbGFuL3NldHJlZnMuYwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvcmV3cml0ZS9yZXdyaXRlTWFuaXAuaCBiL3NyYy9pbmNsdWRlL3Jld3JpdGUvcmV3cml0 ZU1hbmlwLmgKaW5kZXggNTEyODIzMDMzYi4uZjBhYWE2Nzg2OSAxMDA2NDQKLS0tIGEvc3Jj L2luY2x1ZGUvcmV3cml0ZS9yZXdyaXRlTWFuaXAuaAorKysgYi9zcmMvaW5jbHVkZS9yZXdy aXRlL3Jld3JpdGVNYW5pcC5oCkBAIC0xNSw2ICsxNSw3IEBACiAjZGVmaW5lIFJFV1JJVEVN QU5JUF9ICiAKICNpbmNsdWRlICJub2Rlcy9wYXJzZW5vZGVzLmgiCisjaW5jbHVkZSAibm9k ZXMvcGF0aG5vZGVzLmgiCiAKIHN0cnVjdCBBdHRyTWFwOwkJCQkJLyogYXZvaWQgaW5jbHVk aW5nIGF0dG1hcC5oIGhlcmUgKi8KIApAQCAtNDEsMTEgKzQyLDE0IEBAIHR5cGVkZWYgZW51 bSBSZXBsYWNlVmFyc05vTWF0Y2hPcHRpb24KIH0gUmVwbGFjZVZhcnNOb01hdGNoT3B0aW9u OwogCiAKK2V4dGVybiBCaXRtYXBzZXQgKnJlcGxhY2VfcmVsaWQoUmVsaWRzIHJlbGlkcywg aW50IG9sZElkLCBpbnQgbmV3SWQpOwogZXh0ZXJuIHZvaWQgQ29tYmluZVJhbmdlVGFibGVz KExpc3QgKipkc3RfcnRhYmxlLCBMaXN0ICoqZHN0X3Blcm1pbmZvcywKIAkJCQkJCQkgICBM aXN0ICpzcmNfcnRhYmxlLCBMaXN0ICpzcmNfcGVybWluZm9zKTsKIGV4dGVybiB2b2lkIE9m ZnNldFZhck5vZGVzKE5vZGUgKm5vZGUsIGludCBvZmZzZXQsIGludCBzdWJsZXZlbHNfdXAp OwogZXh0ZXJuIHZvaWQgQ2hhbmdlVmFyTm9kZXMoTm9kZSAqbm9kZSwgaW50IHJ0X2luZGV4 LCBpbnQgbmV3X2luZGV4LAogCQkJCQkJICAgaW50IHN1YmxldmVsc191cCk7Cit2b2lkIENo YW5nZVZhck5vZGVzRXh0ZW5kZWQoTm9kZSAqbm9kZSwgaW50IHJ0X2luZGV4LCBpbnQgbmV3 X2luZGV4LAorCQkJCQkJCWludCBzdWJsZXZlbHNfdXAsIGJvb2wgY2hhbmdlX1JhbmdlVGJs UmVmKTsKIGV4dGVybiB2b2lkIEluY3JlbWVudFZhclN1YmxldmVsc1VwKE5vZGUgKm5vZGUs IGludCBkZWx0YV9zdWJsZXZlbHNfdXAsCiAJCQkJCQkJCQlpbnQgbWluX3N1YmxldmVsc191 cCk7CiBleHRlcm4gdm9pZCBJbmNyZW1lbnRWYXJTdWJsZXZlbHNVcF9ydGFibGUoTGlzdCAq cnRhYmxlLApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9lcXVpdmNs YXNzLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZXF1aXZjbGFzcy5vdXQKaW5k ZXggNTYyMjc1MDUwMC4uYWQ4YWIyOTRmZiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVz cy9leHBlY3RlZC9lcXVpdmNsYXNzLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVj dGVkL2VxdWl2Y2xhc3Mub3V0CkBAIC00MzQsNiArNDM0LDM2IEBAIGV4cGxhaW4gKGNvc3Rz IG9mZikKICAgIEZpbHRlcjogKCh1bmlxdWUxIElTIE5PVCBOVUxMKSBBTkQgKHVuaXF1ZTIg SVMgTk9UIE5VTEwpKQogKDIgcm93cykKIAorLS0gVGVzdCB0aGF0IGJyb2tlbiBFQ3MgYXJl IHByb2Nlc3NlZCBjb3JyZWN0bHkgZHVyaW5nIHNlbGYgam9pbiByZW1vdmFsLgorLS0gRGlz YWJsZSBtZXJnZSBqb2lucyBzbyB0aGF0IHdlIGRvbid0IGdldCBhbiBlcnJvciBhYm91dCBt aXNzaW5nIGNvbW11dGF0b3IuCistLSBUZXN0IGJvdGggb3JpZW50YXRpb25zIG9mIHRoZSBq b2luIGNsYXVzZSwgYmVjYXVzZSBvbmx5IG9uZSBvZiB0aGVtIGJyZWFrcworLS0gdGhlIEVD Lgorc2V0IGVuYWJsZV9tZXJnZWpvaW4gdG8gb2ZmOworZXhwbGFpbiAoY29zdHMgb2ZmKQor ICBzZWxlY3QgKiBmcm9tIGVjMCBtIGpvaW4gZWMwIG4gb24gbS5mZiA9IG4uZmYKKyAgam9p biBlYzEgcCBvbiBtLmZmICsgbi5mZiA9IHAuZjE7CisgICAgICAgICAgICAgIFFVRVJZIFBM QU4gICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorIE5lc3RlZCBMb29wCisgICBKb2luIEZpbHRlcjogKChuLmZmICsgbi5mZikgPSBw LmYxKQorICAgLT4gIFNlcSBTY2FuIG9uIGVjMCBuCisgICAtPiAgTWF0ZXJpYWxpemUKKyAg ICAgICAgIC0+ICBTZXEgU2NhbiBvbiBlYzEgcAorKDUgcm93cykKKworZXhwbGFpbiAoY29z dHMgb2ZmKQorICBzZWxlY3QgKiBmcm9tIGVjMCBtIGpvaW4gZWMwIG4gb24gbS5mZiA9IG4u ZmYKKyAgam9pbiBlYzEgcCBvbiBwLmYxOjppbnQ4ID0gKG0uZmYgKyBuLmZmKTo6aW50OGFs aWFzMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAg ICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIEpvaW4gRmls dGVyOiAoKHAuZjEpOjpiaWdpbnQgPSAoKG4uZmYgKyBuLmZmKSk6OmludDhhbGlhczEpCisg ICAtPiAgU2VxIFNjYW4gb24gZWMwIG4KKyAgIC0+ICBNYXRlcmlhbGl6ZQorICAgICAgICAg LT4gIFNlcSBTY2FuIG9uIGVjMSBwCisoNSByb3dzKQorCityZXNldCBlbmFibGVfbWVyZ2Vq b2luOwogLS0gdGhpcyBjb3VsZCBiZSBjb252ZXJ0ZWQsIGJ1dCBpc24ndCBhdCBwcmVzZW50 CiBleHBsYWluIChjb3N0cyBvZmYpCiAgIHNlbGVjdCAqIGZyb20gdGVuazEgd2hlcmUgdW5p cXVlMSA9IHVuaXF1ZTEgb3IgdW5pcXVlMiA9IHVuaXF1ZTI7CmRpZmYgLS1naXQgYS9zcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pvaW4ub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC9qb2luLm91dAppbmRleCAwNzlmY2Y0NmYwLi43NzUwMzZiMjY0IDEwMDY0NAotLS0g YS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pvaW4ub3V0CisrKyBiL3NyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvam9pbi5vdXQKQEAgLTU5NjksNiArNTk2OSwyNSBAQCBzZWxlY3Qg Yy5pZCwgc3MuYSBmcm9tIGMKICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBjCiAoNyByb3dz KQogCitleHBsYWluIChjb3N0cyBvZmYpCitTRUxFQ1QgcS52YWwgRlJPTSBiIExFRlQgSk9J TiAoCisgIFNFTEVDVCAocTEueiBJUyBOT1QgTlVMTCkgQVMgdmFsCisgIEZST00gYiBMRUZU IEpPSU4gKAorICAgIFNFTEVDVCAodDEuYl9pZCBJUyBOT1QgTlVMTCkgQVMgeiBGUk9NIGEg dDEgTEVGVCBKT0lOIGEgdDIgVVNJTkcgKGlkKQorICAgICkgQVMgcTEKKyAgT04gdHJ1ZQor KSBBUyBxIE9OIHRydWU7CisgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5l c3RlZCBMb29wIExlZnQgSm9pbgorICAgLT4gIFNlcSBTY2FuIG9uIGIKKyAgIC0+ICBNYXRl cmlhbGl6ZQorICAgICAgICAgLT4gIE5lc3RlZCBMb29wIExlZnQgSm9pbgorICAgICAgICAg ICAgICAgLT4gIFNlcSBTY2FuIG9uIGIgYl8xCisgICAgICAgICAgICAgICAtPiAgTWF0ZXJp YWxpemUKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBhIHQxCisoNyBy b3dzKQorCiBDUkVBVEUgVEVNUCBUQUJMRSBwYXJ0ZWRfYiAoaWQgaW50IFBSSU1BUlkgS0VZ KSBwYXJ0aXRpb24gYnkgcmFuZ2UoaWQpOwogQ1JFQVRFIFRFTVAgVEFCTEUgcGFydGVkX2Ix IHBhcnRpdGlvbiBvZiBwYXJ0ZWRfYiBmb3IgdmFsdWVzIGZyb20gKDApIHRvICgxMCk7CiAt LSB0ZXN0IGpvaW4gcmVtb3ZhbHMgb24gYSBwYXJ0aXRpb25lZCB0YWJsZQpAQCAtNjM4MCw2 ICs2Mzk5LDEwNjggQEAgc2VsZWN0ICogZnJvbQogLS0tLSstLS0tKy0tLS0rLS0tLQogKDAg cm93cykKIAorLS0KKy0tIHRlc3QgdGhhdCBzZW1pLSBvciBpbm5lciBzZWxmLWpvaW5zIG9u IGEgdW5pcXVlIGNvbHVtbiBhcmUgcmVtb3ZlZAorLS0KKy0tIGVuYWJsZSBvbmx5IG5lc3Rs b29wIHRvIGdldCBtb3JlIHByZWRpY3RhYmxlIHBsYW5zCitzZXQgZW5hYmxlX2hhc2hqb2lu IHRvIG9mZjsKK3NldCBlbmFibGVfbWVyZ2Vqb2luIHRvIG9mZjsKK2NyZWF0ZSB0YWJsZSBz aiAoYSBpbnQgdW5pcXVlLCBiIGludCwgYyBpbnQgdW5pcXVlKTsKK2luc2VydCBpbnRvIHNq IHZhbHVlcyAoMSwgbnVsbCwgMiksIChudWxsLCAyLCBudWxsKSwgKDIsIDEsIDEpOworYW5h bHl6ZSBzajsKKy0tIFRyaXZpYWwgc2VsZi1qb2luIGNhc2UuCitleHBsYWluIChjb3N0cyBv ZmYpCitzZWxlY3QgcC4qIGZyb20gc2ogcCwgc2ogcSB3aGVyZSBxLmEgPSBwLmEgYW5kIHEu YiA9IHEuYSAtIDE7CisgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyBTZXEgU2NhbiBvbiBzaiBxCisgICBGaWx0ZXI6ICgoYSBJUyBOT1QgTlVMTCkgQU5E IChiID0gKGEgLSAxKSkpCisoMiByb3dzKQorCitzZWxlY3QgcC4qIGZyb20gc2ogcCwgc2og cSB3aGVyZSBxLmEgPSBwLmEgYW5kIHEuYiA9IHEuYSAtIDE7CisgYSB8IGIgfCBjIAorLS0t Ky0tLSstLS0KKyAyIHwgMSB8IDEKKygxIHJvdykKKworLS0gU2VsZi1qb2luIHJlbW92YWwg cGVyZm9ybXMgYWZ0ZXIgYSBzdWJxdWVyeSBwdWxsLXVwIHByb2Nlc3MgYW5kIGNvdWxkIHJl bW92ZQorLS0gc3VjaCBraW5kIG9mIHNlbGYtam9pbiB0b28uIENoZWNrIHRoaXMgb3B0aW9u LgorZXhwbGFpbiAoY29zdHMgb2ZmKQorc2VsZWN0ICogZnJvbSBzaiBwCit3aGVyZSBleGlz dHMgKHNlbGVjdCAqIGZyb20gc2ogcQorICAgICAgICAgICAgICB3aGVyZSBxLmEgPSBwLmEg YW5kIHEuYiA8IDEwKTsKKyAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2Vx IFNjYW4gb24gc2ogcQorICAgRmlsdGVyOiAoKGEgSVMgTk9UIE5VTEwpIEFORCAoYiA8IDEw KSkKKygyIHJvd3MpCisKK3NlbGVjdCAqIGZyb20gc2ogcAord2hlcmUgZXhpc3RzIChzZWxl Y3QgKiBmcm9tIHNqIHEKKyAgICAgICAgICAgICAgd2hlcmUgcS5hID0gcC5hIGFuZCBxLmIg PCAxMCk7CisgYSB8IGIgfCBjIAorLS0tKy0tLSstLS0KKyAyIHwgMSB8IDEKKygxIHJvdykK KworLS0gRG9uJ3QgcmVtb3ZlIHNlbGYtam9pbiBmb3IgdGhlIGNhc2Ugb2YgZXF1YWxpdHkg b2YgdHdvIGRpZmZlcmVudCB1bmlxdWUgY29sdW1ucy4KK2V4cGxhaW4gKGNvc3RzIG9mZikK K3NlbGVjdCAqIGZyb20gc2ogdDEsIHNqIHQyIHdoZXJlIHQxLmEgPSB0Mi5jIGFuZCB0MS5i IGlzIG5vdCBudWxsOworICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9v cAorICAgSm9pbiBGaWx0ZXI6ICh0MS5hID0gdDIuYykKKyAgIC0+ICBTZXEgU2NhbiBvbiBz aiB0MgorICAgLT4gIE1hdGVyaWFsaXplCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gc2og dDEKKyAgICAgICAgICAgICAgIEZpbHRlcjogKGIgSVMgTk9UIE5VTEwpCisoNiByb3dzKQor CistLSBFbnN1cmUgdGhhdCByZWxhdGlvbnMgd2l0aCBUQUJMRVNBTVBMRSBjbGF1c2VzIGFy ZSBub3QgY29uc2lkZXJlZCBhcworLS0gY2FuZGlkYXRlcyB0byBiZSByZW1vdmVkCitleHBs YWluIChjb3N0cyBvZmYpCitzZWxlY3QgKiBmcm9tIHNqIHQxCisgICAgam9pbiBsYXRlcmFs CisgICAgICAoc2VsZWN0ICogZnJvbSBzaiB0YWJsZXNhbXBsZSBzeXN0ZW0odDEuYikpIHMK KyAgICBvbiB0MS5hID0gcy5hOworICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAg ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0 ZWQgTG9vcAorICAgLT4gIFNlcSBTY2FuIG9uIHNqIHQxCisgICAtPiAgTWVtb2l6ZQorICAg ICAgICAgQ2FjaGUgS2V5OiB0MS5hLCB0MS5iCisgICAgICAgICBDYWNoZSBNb2RlOiBiaW5h cnkKKyAgICAgICAgIC0+ICBTYW1wbGUgU2NhbiBvbiBzagorICAgICAgICAgICAgICAgU2Ft cGxpbmc6IHN5c3RlbSAodDEuYikKKyAgICAgICAgICAgICAgIEZpbHRlcjogKHQxLmEgPSBh KQorKDggcm93cykKKworLS0gRW5zdXJlIHRoYXQgU0pFIGRvZXMgbm90IGZvcm0gYSBzZWxm LXJlZmVyZW50aWFsIGxhdGVyYWwgZGVwZW5kZW5jeQorZXhwbGFpbiAoY29zdHMgb2ZmKQor c2VsZWN0ICogZnJvbSBzaiB0MQorICAgIGxlZnQgam9pbiBsYXRlcmFsCisgICAgICAoc2Vs ZWN0IHQxLmEgYXMgdDFhLCAqIGZyb20gc2ogdDIpIHMKKyAgICBvbiB0cnVlCit3aGVyZSB0 MS5hID0gcy5hOworICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBzaiB0MgorICAgRmlsdGVyOiAoYSBJUyBO T1QgTlVMTCkKKygyIHJvd3MpCisKKy0tIERlZ2VuZXJhdGVkIGNhc2UuCitleHBsYWluIChj b3N0cyBvZmYpCitzZWxlY3QgKiBmcm9tCisgIChzZWxlY3QgYSBhcyB4IGZyb20gc2ogd2hl cmUgZmFsc2UpIGFzIHExLAorICAoc2VsZWN0IGEgYXMgeSBmcm9tIHNqIHdoZXJlIGZhbHNl KSBhcyBxMgord2hlcmUgcTEueCA9IHEyLnk7CisgICAgICAgIFFVRVJZIFBMQU4gICAgICAg IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBSZXN1bHQKKyAgIE9uZS1UaW1lIEZp bHRlcjogZmFsc2UKKygyIHJvd3MpCisKKy0tIFdlIGNhbid0IHVzZSBhIGNyb3NzLUVDIGdl bmVyYXRlZCBzZWxmIGpvaW4gcXVhbCBiZWNhdXNlIG9mIGN1cnJlbnQgbG9naWMgb2YKKy0t IHRoZSBnZW5lcmF0ZV9qb2luX2ltcGxpZWRfZXF1YWxpdGllcyByb3V0aW5lLgorZXhwbGFp biAoY29zdHMgb2ZmKQorc2VsZWN0ICogZnJvbSBzaiB0MSwgc2ogdDIgd2hlcmUgdDEuYSA9 IHQxLmIgYW5kIHQxLmIgPSB0Mi5iIGFuZCB0Mi5iID0gdDIuYTsKKyAgICAgICAgICBRVUVS WSBQTEFOICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVz dGVkIExvb3AKKyAgIEpvaW4gRmlsdGVyOiAodDEuYSA9IHQyLmIpCisgICAtPiAgU2VxIFNj YW4gb24gc2ogdDEKKyAgICAgICAgIEZpbHRlcjogKGEgPSBiKQorICAgLT4gIFNlcSBTY2Fu IG9uIHNqIHQyCisgICAgICAgICBGaWx0ZXI6IChiID0gYSkKKyg2IHJvd3MpCisKK2V4cGxh aW4gKGNvc3RzIG9mZikKK3NlbGVjdCAqIGZyb20gc2ogdDEsIHNqIHQyLCBzaiB0Mword2hl cmUgdDEuYSA9IHQxLmIgYW5kIHQxLmIgPSB0Mi5iIGFuZCB0Mi5iID0gdDIuYSBhbmQKKyAg ICAgIHQxLmIgPSB0My5iIGFuZCB0My5iID0gdDMuYTsKKyAgICAgICAgICAgICBRVUVSWSBQ TEFOICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgTmVzdGVkIExvb3AKKyAgIEpvaW4gRmlsdGVyOiAodDEuYSA9IHQzLmIpCisgICAtPiAg TmVzdGVkIExvb3AKKyAgICAgICAgIEpvaW4gRmlsdGVyOiAodDEuYSA9IHQyLmIpCisgICAg ICAgICAtPiAgU2VxIFNjYW4gb24gc2ogdDEKKyAgICAgICAgICAgICAgIEZpbHRlcjogKGEg PSBiKQorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHNqIHQyCisgICAgICAgICAgICAgICBG aWx0ZXI6IChiID0gYSkKKyAgIC0+ICBTZXEgU2NhbiBvbiBzaiB0MworICAgICAgICAgRmls dGVyOiAoYiA9IGEpCisoMTAgcm93cykKKworLS0gRG91YmxlIHNlbGYtam9pbiByZW1vdmFs LgorLS0gVXNlIGEgY29uZGl0aW9uIG9uICJiICsgMSIsIG5vdCBvbiAiYiIsIGZvciB0aGUg c2Vjb25kIGpvaW4sIHNvIHRoYXQKKy0tIHRoZSBlcXVpdmFsZW5jZSBjbGFzcyBpcyBkaWZm ZXJlbnQgZnJvbSB0aGUgZmlyc3Qgb25lLCBhbmQgd2UgY2FuCistLSB0ZXN0IHRoZSBub24t ZWMgY29kZSBwYXRoLgorZXhwbGFpbiAoY29zdHMgb2ZmKQorc2VsZWN0ICoKK2Zyb20gIHNq IHQxCisgICAgICBqb2luIHNqIHQyIG9uIHQxLmEgPSB0Mi5hIGFuZCB0MS5iID0gdDIuYgor CSAgam9pbiBzaiB0MyBvbiB0Mi5hID0gdDMuYSBhbmQgdDIuYiArIDEgPSB0My5iICsgMTsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNj YW4gb24gc2ogdDMKKyAgIEZpbHRlcjogKChhIElTIE5PVCBOVUxMKSBBTkQgKGIgSVMgTk9U IE5VTEwpIEFORCAoKGIgKyAxKSBJUyBOT1QgTlVMTCkpCisoMiByb3dzKQorCistLSBzdWJz ZWxlY3QgdGhhdCByZWZlcmVuY2VzIHRoZSByZW1vdmVkIHJlbGF0aW9uCitleHBsYWluIChj b3N0cyBvZmYpCitzZWxlY3QgdDEuYSwgKHNlbGVjdCBhIGZyb20gc2ogd2hlcmUgYSA9IHQy LmEgYW5kIGEgPSB0MS5hKQorZnJvbSBzaiB0MSwgc2ogdDIKK3doZXJlIHQxLmEgPSB0Mi5h OworICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBzaiB0 MgorICAgRmlsdGVyOiAoYSBJUyBOT1QgTlVMTCkKKyAgIFN1YlBsYW4gMQorICAgICAtPiAg UmVzdWx0CisgICAgICAgICAgIE9uZS1UaW1lIEZpbHRlcjogKHQyLmEgPSB0Mi5hKQorICAg ICAgICAgICAtPiAgU2VxIFNjYW4gb24gc2oKKyAgICAgICAgICAgICAgICAgRmlsdGVyOiAo YSA9IHQyLmEpCisoNyByb3dzKQorCistLSBzZWxmLWpvaW4gdW5kZXIgb3V0ZXIgam9pbgor ZXhwbGFpbiAoY29zdHMgb2ZmKQorc2VsZWN0ICogZnJvbSBzaiB4IGpvaW4gc2ogeSBvbiB4 LmEgPSB5LmEKK2xlZnQgam9pbiBpbnQ4X3RibCB6IG9uIHguYSA9IHoucTE7CisgICAgICAg ICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wIExlZnQgSm9pbgorICAgSm9pbiBGaWx0ZXI6 ICh5LmEgPSB6LnExKQorICAgLT4gIFNlcSBTY2FuIG9uIHNqIHkKKyAgICAgICAgIEZpbHRl cjogKGEgSVMgTk9UIE5VTEwpCisgICAtPiAgTWF0ZXJpYWxpemUKKyAgICAgICAgIC0+ICBT ZXEgU2NhbiBvbiBpbnQ4X3RibCB6CisoNiByb3dzKQorCitleHBsYWluIChjb3N0cyBvZmYp CitzZWxlY3QgKiBmcm9tIHNqIHggam9pbiBzaiB5IG9uIHguYSA9IHkuYQorbGVmdCBqb2lu IGludDhfdGJsIHogb24geS5hID0gei5xMTsKKyAgICAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVz dGVkIExvb3AgTGVmdCBKb2luCisgICBKb2luIEZpbHRlcjogKHkuYSA9IHoucTEpCisgICAt PiAgU2VxIFNjYW4gb24gc2ogeQorICAgICAgICAgRmlsdGVyOiAoYSBJUyBOT1QgTlVMTCkK KyAgIC0+ICBNYXRlcmlhbGl6ZQorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGludDhfdGJs IHoKKyg2IHJvd3MpCisKK2V4cGxhaW4gKGNvc3RzIG9mZikKK3NlbGVjdCAqIGZyb20gKAor ICBzZWxlY3QgdDEuKiwgdDIuYSBhcyBheCBmcm9tIHNqIHQxIGpvaW4gc2ogdDIKKyAgb24g KHQxLmEgPSB0Mi5hIGFuZCB0MS5jICogdDEuYyA9IHQyLmMgKyAyIGFuZCB0Mi5iIGlzIG51 bGwpCispIGFzIHExCitsZWZ0IGpvaW4KKyAgKHNlbGVjdCB0My4qIGZyb20gc2ogdDMsIHNq IHQ0IHdoZXJlIHQzLmMgPSB0NC5jKSBhcyBxMgorb24gcTEuYXggPSBxMi5hOworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcCBM ZWZ0IEpvaW4KKyAgIEpvaW4gRmlsdGVyOiAodDIuYSA9IHQ0LmEpCisgICAtPiAgU2VxIFNj YW4gb24gc2ogdDIKKyAgICAgICAgIEZpbHRlcjogKChiIElTIE5VTEwpIEFORCAoYSBJUyBO T1QgTlVMTCkgQU5EICgoYyAqIGMpID0gKGMgKyAyKSkpCisgICAtPiAgU2VxIFNjYW4gb24g c2ogdDQKKyAgICAgICAgIEZpbHRlcjogKGMgSVMgTk9UIE5VTEwpCisoNiByb3dzKQorCist LSBUZXN0IHRoYXQgcGxhY2Vob2xkZXJzIGFyZSB1cGRhdGVkIGNvcnJlY3RseSBhZnRlciBq b2luIHJlbW92YWwKK2V4cGxhaW4gKGNvc3RzIG9mZikKK3NlbGVjdCAqIGZyb20gKHZhbHVl cyAoMSkpIHgKK2xlZnQgam9pbiAoc2VsZWN0IGNvYWxlc2NlKHkucTEsIDEpIGZyb20gaW50 OF90YmwgeQorCXJpZ2h0IGpvaW4gc2ogajEgaW5uZXIgam9pbiBzaiBqMiBvbiBqMS5hID0g ajIuYQorCW9uIHRydWUpIHoKK29uIHRydWU7CisgICAgICAgICAgICAgICAgUVVFUlkgUExB TiAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIE5lc3RlZCBMb29wIExlZnQgSm9pbgorICAgLT4gIFJlc3VsdAorICAgLT4g IE5lc3RlZCBMb29wIExlZnQgSm9pbgorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHNqIGoy CisgICAgICAgICAgICAgICBGaWx0ZXI6IChhIElTIE5PVCBOVUxMKQorICAgICAgICAgLT4g IE1hdGVyaWFsaXplCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gaW50OF90Ymwg eQorKDcgcm93cykKKworLS0gVGVzdCB0aGF0IHJlZmVyZW5jZXMgdG8gdGhlIHJlbW92ZWQg cmVsIGluIGxhdGVyYWwgc3VicXVlcmllcyBhcmUgcmVwbGFjZWQKKy0tIGNvcnJlY3RseSBh ZnRlciBqb2luIHJlbW92YWwKK2V4cGxhaW4gKHZlcmJvc2UsIGNvc3RzIG9mZikKK3NlbGVj dCB0My5hIGZyb20gc2ogdDEKKwlqb2luIHNqIHQyIG9uIHQxLmEgPSB0Mi5hCisJam9pbiBs YXRlcmFsIChzZWxlY3QgdDEuYSBvZmZzZXQgMCkgdDMgb24gdHJ1ZTsKKyAgICAgICAgICAg ICBRVUVSWSBQTEFOICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIE91dHB1dDogKHQyLmEpCisgICAtPiAgU2Vx IFNjYW4gb24gcHVibGljLnNqIHQyCisgICAgICAgICBPdXRwdXQ6IHQyLmEsIHQyLmIsIHQy LmMKKyAgICAgICAgIEZpbHRlcjogKHQyLmEgSVMgTk9UIE5VTEwpCisgICAtPiAgUmVzdWx0 CisgICAgICAgICBPdXRwdXQ6IHQyLmEKKyg3IHJvd3MpCisKK2V4cGxhaW4gKHZlcmJvc2Us IGNvc3RzIG9mZikKK3NlbGVjdCB0My5hIGZyb20gc2ogdDEKKwlqb2luIHNqIHQyIG9uIHQx LmEgPSB0Mi5hCisJam9pbiBsYXRlcmFsIChzZWxlY3QgKiBmcm9tIChzZWxlY3QgdDEuYSBv ZmZzZXQgMCkgb2Zmc2V0IDApIHQzIG9uIHRydWU7CisgICAgICAgICAgICAgUVVFUlkgUExB TiAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IE5lc3RlZCBMb29wCisgICBPdXRwdXQ6ICh0Mi5hKQorICAgLT4gIFNlcSBTY2FuIG9uIHB1 YmxpYy5zaiB0MgorICAgICAgICAgT3V0cHV0OiB0Mi5hLCB0Mi5iLCB0Mi5jCisgICAgICAg ICBGaWx0ZXI6ICh0Mi5hIElTIE5PVCBOVUxMKQorICAgLT4gIFJlc3VsdAorICAgICAgICAg T3V0cHV0OiB0Mi5hCisoNyByb3dzKQorCitleHBsYWluICh2ZXJib3NlLCBjb3N0cyBvZmYp CitzZWxlY3QgdDQuYSBmcm9tIHNqIHQxCisJam9pbiBzaiB0MiBvbiB0MS5hID0gdDIuYQor CWpvaW4gbGF0ZXJhbCAoc2VsZWN0IHQzLmEgZnJvbSBzaiB0MywgKHNlbGVjdCB0MS5hKSBv ZmZzZXQgMCkgdDQgb24gdHJ1ZTsKKyAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExv b3AKKyAgIE91dHB1dDogdDMuYQorICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5zaiB0Mgor ICAgICAgICAgT3V0cHV0OiB0Mi5hLCB0Mi5iLCB0Mi5jCisgICAgICAgICBGaWx0ZXI6ICh0 Mi5hIElTIE5PVCBOVUxMKQorICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5zaiB0MworICAg ICAgICAgT3V0cHV0OiB0My5hCisoNyByb3dzKQorCistLSBDaGVjayB1cGRhdGluZyBvZiBz ZW1pX3Joc19leHBycyBsaW5rcyBmcm9tIHVwcGVyLWxldmVsIHNlbWkgam9pbiB0bworLS0g dGhlIHJlbW92aW5nIHJlbGF0aW9uCitleHBsYWluICh2ZXJib3NlLCBjb3N0cyBvZmYpCitz ZWxlY3QgdDEuYSBmcm9tIHNqIHQxIHdoZXJlIHQxLmIgaW4gKAorICBzZWxlY3QgdDIuYiBm cm9tIHNqIHQyIGpvaW4gc2ogdDMgb24gdDIuYz10My5jKTsKKyAgICAgICAgICAgICAgICBR VUVSWSBQTEFOICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AgU2VtaSBKb2luCisgICBPdXRwdXQ6IHQx LmEKKyAgIEpvaW4gRmlsdGVyOiAodDEuYiA9IHQzLmIpCisgICAtPiAgU2VxIFNjYW4gb24g cHVibGljLnNqIHQxCisgICAgICAgICBPdXRwdXQ6IHQxLmEsIHQxLmIsIHQxLmMKKyAgIC0+ ICBNYXRlcmlhbGl6ZQorICAgICAgICAgT3V0cHV0OiB0My5jLCB0My5iCisgICAgICAgICAt PiAgU2VxIFNjYW4gb24gcHVibGljLnNqIHQzCisgICAgICAgICAgICAgICBPdXRwdXQ6IHQz LmMsIHQzLmIKKyAgICAgICAgICAgICAgIEZpbHRlcjogKHQzLmMgSVMgTk9UIE5VTEwpCiso MTAgcm93cykKKworLS0KKy0tIFNKRSBjb3JuZXIgY2FzZTogdW5pcXVlbmVzcyBvZiBhbiBp bm5lciBpcyBbcGFydGlhbGx5XSBkZXJpdmVkIGZyb20KKy0tIGJhc2VyZXN0cmljdGluZm8g Y2xhdXNlcy4KKy0tIFhYWDogV2UgcmVhbGx5IHNob3VsZCBhbGxvdyBTSkUgZm9yIHRoZXNl IGNvcm5lciBjYXNlcz8KKy0tCitJTlNFUlQgSU5UTyBzaiBWQUxVRVMgKDMsIDEsIDMpOwor LS0gRG9uJ3QgcmVtb3ZlIFNKCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9N IHNqIGoxLCBzaiBqMiBXSEVSRSBqMS5iID0gajIuYiBBTkQgajEuYSA9IDIgQU5EIGoyLmEg PSAzOworICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgSm9pbiBGaWx0ZXI6IChqMS5iID0g ajIuYikKKyAgIC0+ICBTZXEgU2NhbiBvbiBzaiBqMQorICAgICAgICAgRmlsdGVyOiAoYSA9 IDIpCisgICAtPiAgU2VxIFNjYW4gb24gc2ogajIKKyAgICAgICAgIEZpbHRlcjogKGEgPSAz KQorKDYgcm93cykKKworLS0gUmV0dXJuIG9uZSByb3cKK1NFTEVDVCAqIEZST00gc2ogajEs IHNqIGoyIFdIRVJFIGoxLmIgPSBqMi5iIEFORCBqMS5hID0gMiBBTkQgajIuYSA9IDM7Cisg YSB8IGIgfCBjIHwgYSB8IGIgfCBjIAorLS0tKy0tLSstLS0rLS0tKy0tLSstLS0KKyAyIHwg MSB8IDEgfCAzIHwgMSB8IDMKKygxIHJvdykKKworLS0gUmVtb3ZlIFNKLCBkZWZpbmUgdW5p cXVlbmVzcyBieSBhIGNvbnN0YW50CitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgKiBG Uk9NIHNqIGoxLCBzaiBqMiBXSEVSRSBqMS5iID0gajIuYiBBTkQgajEuYSA9IDIgQU5EIGoy LmEgPSAyOworICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24g c2ogajIKKyAgIEZpbHRlcjogKChiIElTIE5PVCBOVUxMKSBBTkQgKGEgPSAyKSkKKygyIHJv d3MpCisKKy0tIFJldHVybiBvbmUgcm93CitTRUxFQ1QgKiBGUk9NIHNqIGoxLCBzaiBqMiBX SEVSRSBqMS5iID0gajIuYiBBTkQgajEuYSA9IDIgQU5EIGoyLmEgPSAyOworIGEgfCBiIHwg YyB8IGEgfCBiIHwgYyAKKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tCisgMiB8IDEgfCAxIHwg MiB8IDEgfCAxCisoMSByb3cpCisKKy0tIFJlbW92ZSBTSiwgZGVmaW5lIHVuaXF1ZW5lc3Mg YnkgYSBjb25zdGFudCBleHByZXNzaW9uCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1Qg KiBGUk9NIHNqIGoxLCBzaiBqMgorV0hFUkUgajEuYiA9IGoyLmIKKyAgQU5EIGoxLmEgPSAo RVhUUkFDVChET1cgRlJPTSBjdXJyZW50X3RpbWVzdGFtcCgwKSkvMTUgKyAzKTo6aW50Cisg IEFORCAoRVhUUkFDVChET1cgRlJPTSBjdXJyZW50X3RpbWVzdGFtcCgwKSkvMTUgKyAzKTo6 aW50ID0gajIuYTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEg U2NhbiBvbiBzaiBqMgorICAgRmlsdGVyOiAoKGIgSVMgTk9UIE5VTEwpIEFORCAoYSA9ICgo KEVYVFJBQ1QoZG93IEZST00gQ1VSUkVOVF9USU1FU1RBTVAoMCkpIC8gJzE1Jzo6bnVtZXJp YykgKyAnMyc6Om51bWVyaWMpKTo6aW50ZWdlcikpCisoMiByb3dzKQorCistLSBSZXR1cm4g b25lIHJvdworU0VMRUNUICogRlJPTSBzaiBqMSwgc2ogajIKK1dIRVJFIGoxLmIgPSBqMi5i CisgIEFORCBqMS5hID0gKEVYVFJBQ1QoRE9XIEZST00gY3VycmVudF90aW1lc3RhbXAoMCkp LzE1ICsgMyk6OmludAorICBBTkQgKEVYVFJBQ1QoRE9XIEZST00gY3VycmVudF90aW1lc3Rh bXAoMCkpLzE1ICsgMyk6OmludCA9IGoyLmE7CisgYSB8IGIgfCBjIHwgYSB8IGIgfCBjIAor LS0tKy0tLSstLS0rLS0tKy0tLSstLS0KKyAzIHwgMSB8IDMgfCAzIHwgMSB8IDMKKygxIHJv dykKKworLS0gUmVtb3ZlIFNKCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9N IHNqIGoxLCBzaiBqMiBXSEVSRSBqMS5iID0gajIuYiBBTkQgajEuYSA9IDEgQU5EIGoyLmEg PSAxOworICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2VxIFNjYW4gb24gc2og ajIKKyAgIEZpbHRlcjogKChiIElTIE5PVCBOVUxMKSBBTkQgKGEgPSAxKSkKKygyIHJvd3Mp CisKKy0tIFJldHVybiBubyByb3dzCitTRUxFQ1QgKiBGUk9NIHNqIGoxLCBzaiBqMiBXSEVS RSBqMS5iID0gajIuYiBBTkQgajEuYSA9IDEgQU5EIGoyLmEgPSAxOworIGEgfCBiIHwgYyB8 IGEgfCBiIHwgYyAKKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tCisoMCByb3dzKQorCistLSBT aHVmZmxlIGEgY2xhdXNlLiBSZW1vdmUgU0oKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVD VCAqIEZST00gc2ogajEsIHNqIGoyIFdIRVJFIGoxLmIgPSBqMi5iIEFORCAxID0gajEuYSBB TkQgajIuYSA9IDE7CisgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAg IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2Nh biBvbiBzaiBqMgorICAgRmlsdGVyOiAoKGIgSVMgTk9UIE5VTEwpIEFORCAoYSA9IDEpKQor KDIgcm93cykKKworLS0gUmV0dXJuIG5vIHJvd3MKK1NFTEVDVCAqIEZST00gc2ogajEsIHNq IGoyIFdIRVJFIGoxLmIgPSBqMi5iIEFORCAxID0gajEuYSBBTkQgajIuYSA9IDE7CisgYSB8 IGIgfCBjIHwgYSB8IGIgfCBjIAorLS0tKy0tLSstLS0rLS0tKy0tLSstLS0KKygwIHJvd3Mp CisKKy0tIFNKRSBDb3JuZXIgY2FzZTogYSAnYS54PWEueCcgY2xhdXNlLCBoYXZlIHJlcGxh Y2VkIHdpdGggJ2EueCBJUyBOT1QgTlVMTCcKKy0tIGFmdGVyIFNKIGVsaW1pbmF0aW9uIGl0 IHNob3VsZG4ndCBiZSBhIG1lcmdlam9pbmFibGUgY2xhdXNlLgorRVhQTEFJTiAoQ09TVFMg T0ZGKQorU0VMRUNUIHQ0LioKK0ZST00gKFNFTEVDVCB0MS4qLCB0Mi5hIEFTIGExIEZST00g c2ogdDEsIHNqIHQyIFdIRVJFIHQxLmIgPSB0Mi5iKSBBUyB0MworSk9JTiBzaiB0NCBPTiAo dDQuYSA9IHQzLmEpIFdIRVJFIHQzLmExID0gNDI7CisgICAgICAgICAgIFFVRVJZIFBMQU4g ICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3Rl ZCBMb29wCisgICBKb2luIEZpbHRlcjogKHQxLmIgPSB0Mi5iKQorICAgLT4gIFNlcSBTY2Fu IG9uIHNqIHQyCisgICAgICAgICBGaWx0ZXI6IChhID0gNDIpCisgICAtPiAgU2VxIFNjYW4g b24gc2ogdDEKKyAgICAgICAgIEZpbHRlcjogKGEgSVMgTk9UIE5VTEwpCisoNiByb3dzKQor CitTRUxFQ1QgdDQuKgorRlJPTSAoU0VMRUNUIHQxLiosIHQyLmEgQVMgYTEgRlJPTSBzaiB0 MSwgc2ogdDIgV0hFUkUgdDEuYiA9IHQyLmIpIEFTIHQzCitKT0lOIHNqIHQ0IE9OICh0NC5h ID0gdDMuYSkgV0hFUkUgdDMuYTEgPSA0MjsKKyBhIHwgYiB8IGMgCistLS0rLS0tKy0tLQor KDAgcm93cykKKworLS0gRnVuY3Rpb25hbCBpbmRleAorQ1JFQVRFIFVOSVFVRSBJTkRFWCBz al9mbl9pZHggT04gc2ooKGEgKiBhKSk7CistLSBSZW1vdmUgU0oKK0VYUExBSU4gKENPU1RT IE9GRikKK1NFTEVDVCAqIEZST00gc2ogajEsIHNqIGoyCisJV0hFUkUgajEuYiA9IGoyLmIg QU5EIGoxLmEqajEuYSA9IDEgQU5EIGoyLmEqajIuYSA9IDE7CisgICAgICAgICAgICAgICAg ICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBzaiBqMgorICAgRmls dGVyOiAoKGIgSVMgTk9UIE5VTEwpIEFORCAoKGEgKiBhKSA9IDEpKQorKDIgcm93cykKKwor LS0gRG9uJ3QgcmVtb3ZlIFNKCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9N IHNqIGoxLCBzaiBqMgorCVdIRVJFIGoxLmIgPSBqMi5iIEFORCBqMS5hKmoxLmEgPSAxIEFO RCBqMi5hKmoyLmEgPSAyOworICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wCisgICBKb2luIEZp bHRlcjogKGoxLmIgPSBqMi5iKQorICAgLT4gIFNlcSBTY2FuIG9uIHNqIGoxCisgICAgICAg ICBGaWx0ZXI6ICgoYSAqIGEpID0gMSkKKyAgIC0+ICBTZXEgU2NhbiBvbiBzaiBqMgorICAg ICAgICAgRmlsdGVyOiAoKGEgKiBhKSA9IDIpCisoNiByb3dzKQorCistLSBSZXN0cmljdGlv biBjb250YWlucyBleHByZXNzaW9ucyBpbiBib3RoIHNpZGVzLCBSZW1vdmUgU0ouCitFWFBM QUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIHNqIGoxLCBzaiBqMgorV0hFUkUgajEu YiA9IGoyLmIKKyAgQU5EIChqMS5hKmoxLmEpID0gKEVYVFJBQ1QoRE9XIEZST00gY3VycmVu dF90aW1lc3RhbXAoMCkpLzE1ICsgMyk6OmludAorICBBTkQgKEVYVFJBQ1QoRE9XIEZST00g Y3VycmVudF90aW1lc3RhbXAoMCkpLzE1ICsgMyk6OmludCA9IChqMi5hKmoyLmEpOworICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2Fu IG9uIHNqIGoyCisgICBGaWx0ZXI6ICgoYiBJUyBOT1QgTlVMTCkgQU5EICgoYSAqIGEpID0g KCgoRVhUUkFDVChkb3cgRlJPTSBDVVJSRU5UX1RJTUVTVEFNUCgwKSkgLyAnMTUnOjpudW1l cmljKSArICczJzo6bnVtZXJpYykpOjppbnRlZ2VyKSkKKygyIHJvd3MpCisKKy0tIEVtcHR5 IHNldCBvZiByb3dzIHNob3VsZCBiZSByZXR1cm5lZAorU0VMRUNUICogRlJPTSBzaiBqMSwg c2ogajIKK1dIRVJFIGoxLmIgPSBqMi5iCisgIEFORCAoajEuYSpqMS5hKSA9IChFWFRSQUNU KERPVyBGUk9NIGN1cnJlbnRfdGltZXN0YW1wKDApKS8xNSArIDMpOjppbnQKKyAgQU5EIChF WFRSQUNUKERPVyBGUk9NIGN1cnJlbnRfdGltZXN0YW1wKDApKS8xNSArIDMpOjppbnQgPSAo ajIuYSpqMi5hKTsKKyBhIHwgYiB8IGMgfCBhIHwgYiB8IGMgCistLS0rLS0tKy0tLSstLS0r LS0tKy0tLQorKDAgcm93cykKKworLS0gUmVzdHJpY3Rpb24gY29udGFpbnMgdm9sYXRpbGUg ZnVuY3Rpb24gLSBkaXNhYmxlIFNKRSBmZWF0dXJlLgorRVhQTEFJTiAoQ09TVFMgT0ZGKQor U0VMRUNUICogRlJPTSBzaiBqMSwgc2ogajIKK1dIRVJFIGoxLmIgPSBqMi5iCisgIEFORCAo ajEuYSpqMS5jLzMpID0gKHJhbmRvbSgpLzMgKyAzKTo6aW50CisgIEFORCAocmFuZG9tKCkv MyArIDMpOjppbnQgPSAoajIuYSpqMi5jLzMpOworICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIEpvaW4g RmlsdGVyOiAoajEuYiA9IGoyLmIpCisgICAtPiAgU2VxIFNjYW4gb24gc2ogajEKKyAgICAg ICAgIEZpbHRlcjogKCgoYSAqIGMpIC8gMykgPSAoKChyYW5kb20oKSAvICczJzo6ZG91Ymxl IHByZWNpc2lvbikgKyAnMyc6OmRvdWJsZSBwcmVjaXNpb24pKTo6aW50ZWdlcikKKyAgIC0+ ICBTZXEgU2NhbiBvbiBzaiBqMgorICAgICAgICAgRmlsdGVyOiAoKCgocmFuZG9tKCkgLyAn Myc6OmRvdWJsZSBwcmVjaXNpb24pICsgJzMnOjpkb3VibGUgcHJlY2lzaW9uKSk6OmludGVn ZXIgPSAoKGEgKiBjKSAvIDMpKQorKDYgcm93cykKKworLS0gUmV0dXJuIG9uZSByb3cKK1NF TEVDVCAqIEZST00gc2ogajEsIHNqIGoyCitXSEVSRSBqMS5iID0gajIuYgorICBBTkQgKGox LmEqajEuYy8zKSA9IChyYW5kb20oKS8zICsgMyk6OmludAorICBBTkQgKHJhbmRvbSgpLzMg KyAzKTo6aW50ID0gKGoyLmEqajIuYy8zKTsKKyBhIHwgYiB8IGMgfCBhIHwgYiB8IGMgCist LS0rLS0tKy0tLSstLS0rLS0tKy0tLQorIDMgfCAxIHwgMyB8IDMgfCAxIHwgMworKDEgcm93 KQorCistLSBNdWx0aXBsZSBmaWx0ZXJzCitDUkVBVEUgVU5JUVVFIElOREVYIHNqX3RlbXBf aWR4MSBPTiBzaihhLGIsYyk7CistLSBSZW1vdmUgU0oKK0VYUExBSU4gKENPU1RTIE9GRikK K1NFTEVDVCAqIEZST00gc2ogajEsIHNqIGoyCisJV0hFUkUgajEuYiA9IGoyLmIgQU5EIGox LmEgPSAyIEFORCBqMS5jID0gMyBBTkQgajIuYSA9IDIgQU5EIDMgPSBqMi5jOworICAgICAg ICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2Vx IFNjYW4gb24gc2ogajIKKyAgIEZpbHRlcjogKChiIElTIE5PVCBOVUxMKSBBTkQgKGEgPSAy KSBBTkQgKGMgPSAzKSkKKygyIHJvd3MpCisKKy0tIERvbid0IHJlbW92ZSBTSgorRVhQTEFJ TiAoQ09TVFMgT0ZGKQorCVNFTEVDVCAqIEZST00gc2ogajEsIHNqIGoyCisJV0hFUkUgajEu YiA9IGoyLmIgQU5EIDIgPSBqMS5hIEFORCBqMS5jID0gMyBBTkQgajIuYSA9IDEgQU5EIDMg PSBqMi5jOworICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAg Sm9pbiBGaWx0ZXI6IChqMS5iID0gajIuYikKKyAgIC0+ICBTZXEgU2NhbiBvbiBzaiBqMQor ICAgICAgICAgRmlsdGVyOiAoKDIgPSBhKSBBTkQgKGMgPSAzKSkKKyAgIC0+ICBTZXEgU2Nh biBvbiBzaiBqMgorICAgICAgICAgRmlsdGVyOiAoKGMgPSAzKSBBTkQgKGEgPSAxKSkKKyg2 IHJvd3MpCisKK0NSRUFURSBVTklRVUUgSU5ERVggc2pfdGVtcF9pZHggT04gc2ooYSxiKTsK Ky0tIERvbid0IHJlbW92ZSBTSgorRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUICogRlJP TSBzaiBqMSwgc2ogajIgV0hFUkUgajEuYiA9IGoyLmIgQU5EIGoxLmEgPSAyOworICAgICAg ICAgIFFVRVJZIFBMQU4gICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyBOZXN0ZWQgTG9vcAorICAgSm9pbiBGaWx0ZXI6IChqMS5iID0gajIuYikKKyAgIC0+ ICBTZXEgU2NhbiBvbiBzaiBqMQorICAgICAgICAgRmlsdGVyOiAoYSA9IDIpCisgICAtPiAg U2VxIFNjYW4gb24gc2ogajIKKyg1IHJvd3MpCisKKy0tIERvbid0IHJlbW92ZSBTSgorRVhQ TEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBzaiBqMSwgc2ogajIgV0hFUkUgajEu YiA9IGoyLmIgQU5EIDIgPSBqMi5hOworICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAg CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgSm9p biBGaWx0ZXI6IChqMS5iID0gajIuYikKKyAgIC0+ICBTZXEgU2NhbiBvbiBzaiBqMgorICAg ICAgICAgRmlsdGVyOiAoMiA9IGEpCisgICAtPiAgU2VxIFNjYW4gb24gc2ogajEKKyg1IHJv d3MpCisKKy0tIERvbid0IHJlbW92ZSBTSgorRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNU ICogRlJPTSBzaiBqMSwgc2ogajIgV0hFUkUgajEuYiA9IGoyLmIgQU5EIChqMS5hID0gMSBP UiBqMi5hID0gMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAg ICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wCisgICBK b2luIEZpbHRlcjogKChqMS5iID0gajIuYikgQU5EICgoajEuYSA9IDEpIE9SIChqMi5hID0g MSkpKQorICAgLT4gIFNlcSBTY2FuIG9uIHNqIGoxCisgICAtPiAgTWF0ZXJpYWxpemUKKyAg ICAgICAgIC0+ICBTZXEgU2NhbiBvbiBzaiBqMgorKDUgcm93cykKKworRFJPUCBJTkRFWCBz al9mbl9pZHgsIHNqX3RlbXBfaWR4MSwgc2pfdGVtcF9pZHg7CistLSBUZXN0IHRoYXQgT1Ig cHJlZGljYXRlZCBhcmUgdXBkYXRlZCBjb3JyZWN0bHkgYWZ0ZXIgam9pbiByZW1vdmFsCitD UkVBVEUgVEFCTEUgdGFiX3dpdGhfZmxhZyAoIGlkIElOVCBQUklNQVJZIEtFWSwgaXNfZmxh ZyBTTUFMTElOVCk7CitDUkVBVEUgSU5ERVggaWR4X3Rlc3RfaXNfZmxhZyBPTiB0YWJfd2l0 aF9mbGFnIChpc19mbGFnKTsKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCBDT1VOVCgq KSBGUk9NIHRhYl93aXRoX2ZsYWcKK1dIRVJFCisJKGlzX2ZsYWcgSVMgTlVMTCBPUiBpc19m bGFnID0gMCkKKwlBTkQgaWQgSU4gKFNFTEVDVCBpZCBGUk9NIHRhYl93aXRoX2ZsYWcgV0hF UkUgaWQgSU4gKDIsIDMpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4g ICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEFnZ3JlZ2F0ZQorICAgLT4gIEJp dG1hcCBIZWFwIFNjYW4gb24gdGFiX3dpdGhfZmxhZworICAgICAgICAgUmVjaGVjayBDb25k OiAoaWQgPSBBTlkgKCd7MiwzfSc6OmludGVnZXJbXSkpCisgICAgICAgICBGaWx0ZXI6ICgo aXNfZmxhZyBJUyBOVUxMKSBPUiAoaXNfZmxhZyA9IDApKQorICAgICAgICAgLT4gIEJpdG1h cCBJbmRleCBTY2FuIG9uIHRhYl93aXRoX2ZsYWdfcGtleQorICAgICAgICAgICAgICAgSW5k ZXggQ29uZDogKGlkID0gQU5ZICgnezIsM30nOjppbnRlZ2VyW10pKQorKDYgcm93cykKKwor RFJPUCBUQUJMRSB0YWJfd2l0aF9mbGFnOworLS0gSEFWSU5HIGNsYXVzZQorZXhwbGFpbiAo Y29zdHMgb2ZmKQorc2VsZWN0IHAuYiBmcm9tIHNqIHAgam9pbiBzaiBxIG9uIHAuYSA9IHEu YSBncm91cCBieSBwLmIgaGF2aW5nIHN1bShwLmEpID0gMTsKKyAgICAgICAgICAgUVVFUlkg UExBTiAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg SGFzaEFnZ3JlZ2F0ZQorICAgR3JvdXAgS2V5OiBxLmIKKyAgIEZpbHRlcjogKHN1bShxLmEp ID0gMSkKKyAgIC0+ICBTZXEgU2NhbiBvbiBzaiBxCisgICAgICAgICBGaWx0ZXI6IChhIElT IE5PVCBOVUxMKQorKDUgcm93cykKKworLS0gdXBkYXRlIGxhdGVyYWwgcmVmZXJlbmNlcyBh bmQgcmFuZ2UgdGFibGUgZW50cnkgcmVmZXJlbmNlCitleHBsYWluICh2ZXJib3NlLCBjb3N0 cyBvZmYpCitzZWxlY3QgMSBmcm9tIChzZWxlY3QgeC4qIGZyb20gc2ogeCwgc2ogeSB3aGVy ZSB4LmEgPSB5LmEpIHEsCisgIGxhdGVyYWwgZ2VuZXJhdGVfc2VyaWVzKDEsIHEuYSkgZ3Mo aSk7CisgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIE5lc3RlZCBMb29wCisgICBPdXRwdXQ6IDEKKyAgIC0+ICBTZXEgU2NhbiBv biBwdWJsaWMuc2ogeQorICAgICAgICAgT3V0cHV0OiB5LmEsIHkuYiwgeS5jCisgICAgICAg ICBGaWx0ZXI6ICh5LmEgSVMgTk9UIE5VTEwpCisgICAtPiAgRnVuY3Rpb24gU2NhbiBvbiBw Z19jYXRhbG9nLmdlbmVyYXRlX3NlcmllcyBncworICAgICAgICAgT3V0cHV0OiBncy5pCisg ICAgICAgICBGdW5jdGlvbiBDYWxsOiBnZW5lcmF0ZV9zZXJpZXMoMSwgeS5hKQorKDggcm93 cykKKworZXhwbGFpbiAodmVyYm9zZSwgY29zdHMgb2ZmKQorc2VsZWN0IDEgZnJvbSAoc2Vs ZWN0IHkuKiBmcm9tIHNqIHgsIHNqIHkgd2hlcmUgeC5hID0geS5hKSBxLAorICBsYXRlcmFs IGdlbmVyYXRlX3NlcmllcygxLCBxLmEpIGdzKGkpOworICAgICAgICAgICAgICAgICAgICAg IFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAg T3V0cHV0OiAxCisgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLnNqIHkKKyAgICAgICAgIE91 dHB1dDogeS5hLCB5LmIsIHkuYworICAgICAgICAgRmlsdGVyOiAoeS5hIElTIE5PVCBOVUxM KQorICAgLT4gIEZ1bmN0aW9uIFNjYW4gb24gcGdfY2F0YWxvZy5nZW5lcmF0ZV9zZXJpZXMg Z3MKKyAgICAgICAgIE91dHB1dDogZ3MuaQorICAgICAgICAgRnVuY3Rpb24gQ2FsbDogZ2Vu ZXJhdGVfc2VyaWVzKDEsIHkuYSkKKyg4IHJvd3MpCisKKy0tIFRlc3QgdGhhdCBhIG5vbi1F Qy1kZXJpdmVkIGpvaW4gY2xhdXNlIGlzIHByb2Nlc3NlZCBjb3JyZWN0bHkuIFVzZSBhbgor LS0gb3V0ZXIgam9pbiBzbyB0aGF0IHdlIGNhbid0IGZvcm0gYW4gRUMuCitleHBsYWluIChj b3N0cyBvZmYpIHNlbGVjdCAqIGZyb20gc2ogcCBqb2luIHNqIHEgb24gcC5hID0gcS5hCisg IGxlZnQgam9pbiBzaiByIG9uIHAuYSArIHEuYSA9IHIuYTsKKyAgICAgICAgICAgICBRVUVS WSBQTEFOICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisgTmVzdGVkIExvb3AgTGVmdCBKb2luCisgICBKb2luIEZpbHRlcjogKChxLmEgKyBx LmEpID0gci5hKQorICAgLT4gIFNlcSBTY2FuIG9uIHNqIHEKKyAgICAgICAgIEZpbHRlcjog KGEgSVMgTk9UIE5VTEwpCisgICAtPiAgTWF0ZXJpYWxpemUKKyAgICAgICAgIC0+ICBTZXEg U2NhbiBvbiBzaiByCisoNiByb3dzKQorCistLSBGSVhNRSB0aGlzIGNvbnN0YW50IGZhbHNl IGZpbHRlciBkb2Vzbid0IGxvb2sgZ29vZC4gU2hvdWxkIHdlIG1lcmdlCistLSBlcXVpdmFs ZW5jZSBjbGFzc2VzPworZXhwbGFpbiAoY29zdHMgb2ZmKQorc2VsZWN0ICogZnJvbSBzaiBw LCBzaiBxIHdoZXJlIHAuYSA9IHEuYSBhbmQgcC5iID0gMSBhbmQgcS5iID0gMjsKKyAgICAg ICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNl cSBTY2FuIG9uIHNqIHEKKyAgIEZpbHRlcjogKChhIElTIE5PVCBOVUxMKSBBTkQgKGIgPSAy KSBBTkQgKGIgPSAxKSkKKygyIHJvd3MpCisKKy0tIENoZWNrIHRoYXQgYXR0cl9uZWVkZWQg aXMgdXBkYXRlZCBjb3JyZWN0bHkgYWZ0ZXIgc2VsZi1qb2luIHJlbW92YWwuIEluIHRoaXMK Ky0tIHRlc3QsIHRoZSBqb2luIG9mIGoxIHdpdGggajIgaXMgcmVtb3ZlZC4gazEuYiBpcyBy ZXF1aXJlZCBhdCBlaXRoZXIgajEgb3IgajIuCistLSBJZiB0aGlzIGluZm8gaXMgbG9zdCwg am9pbiB0YXJnZXRsaXN0IGZvciAoazEsIGsyKSB3aWxsIG5vdCBjb250YWluIGsxLmIuCist LSBVc2UgaW5kZXggc2NhbiBmb3IgazEgc28gdGhhdCB3ZSBkb24ndCBnZXQgJ2InIGZyb20g cGh5c2ljYWwgdGxpc3QgdXNlZCBmb3IKKy0tIHNlcXNjYW4uIEFsc28gZGlzYWJsZSByZW9y ZGVyaW5nIG9mIGpvaW5zIGJlY2F1c2UgdGhpcyB0ZXN0IGRlcGVuZHMgb24gYQorLS0gcGFy dGljdWxhciBqb2luIHRyZWUuCitjcmVhdGUgdGFibGUgc2sgKGEgaW50LCBiIGludCk7Citj cmVhdGUgaW5kZXggb24gc2soYSk7CitzZXQgam9pbl9jb2xsYXBzZV9saW1pdCB0byAxOwor c2V0IGVuYWJsZV9zZXFzY2FuIHRvIG9mZjsKK2V4cGxhaW4gKGNvc3RzIG9mZikgc2VsZWN0 IDEgZnJvbQorCShzayBrMSBqb2luIHNrIGsyIG9uIGsxLmEgPSBrMi5hKQorCWpvaW4gKHNq IGoxIGpvaW4gc2ogajIgb24gajEuYSA9IGoyLmEpIG9uIGoxLmIgPSBrMS5iOworICAgICAg ICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVz dGVkIExvb3AKKyAgIEpvaW4gRmlsdGVyOiAoazEuYiA9IGoyLmIpCisgICAtPiAgTmVzdGVk IExvb3AKKyAgICAgICAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIHNrX2FfaWR4IG9uIHNrIGsx CisgICAgICAgICAtPiAgSW5kZXggT25seSBTY2FuIHVzaW5nIHNrX2FfaWR4IG9uIHNrIGsy CisgICAgICAgICAgICAgICBJbmRleCBDb25kOiAoYSA9IGsxLmEpCisgICAtPiAgTWF0ZXJp YWxpemUKKyAgICAgICAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIHNqX2Ffa2V5IG9uIHNqIGoy CisgICAgICAgICAgICAgICBJbmRleCBDb25kOiAoYSBJUyBOT1QgTlVMTCkKKyg5IHJvd3Mp CisKK2V4cGxhaW4gKGNvc3RzIG9mZikgc2VsZWN0IDEgZnJvbQorCShzayBrMSBqb2luIHNr IGsyIG9uIGsxLmEgPSBrMi5hKQorCWpvaW4gKHNqIGoxIGpvaW4gc2ogajIgb24gajEuYSA9 IGoyLmEpIG9uIGoyLmIgPSBrMS5iOworICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExB TiAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIEpvaW4gRmlsdGVy OiAoazEuYiA9IGoyLmIpCisgICAtPiAgTmVzdGVkIExvb3AKKyAgICAgICAgIC0+ICBJbmRl eCBTY2FuIHVzaW5nIHNrX2FfaWR4IG9uIHNrIGsxCisgICAgICAgICAtPiAgSW5kZXggT25s eSBTY2FuIHVzaW5nIHNrX2FfaWR4IG9uIHNrIGsyCisgICAgICAgICAgICAgICBJbmRleCBD b25kOiAoYSA9IGsxLmEpCisgICAtPiAgTWF0ZXJpYWxpemUKKyAgICAgICAgIC0+ICBJbmRl eCBTY2FuIHVzaW5nIHNqX2Ffa2V5IG9uIHNqIGoyCisgICAgICAgICAgICAgICBJbmRleCBD b25kOiAoYSBJUyBOT1QgTlVMTCkKKyg5IHJvd3MpCisKK3Jlc2V0IGpvaW5fY29sbGFwc2Vf bGltaXQ7CityZXNldCBlbmFibGVfc2Vxc2NhbjsKKy0tIENoZWNrIHRoYXQgY2xhdXNlcyBm cm9tIHRoZSBqb2luIGZpbHRlciBsaXN0IGlzIG5vdCBsb3N0IG9uIHRoZSBzZWxmLWpvaW4g cmVtb3ZhbAorQ1JFQVRFIFRBQkxFIGVtcDEgKGlkIFNFUklBTCBQUklNQVJZIEtFWSBOT1Qg TlVMTCwgY29kZSBpbnQpOworRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQorU0VMRUNU ICogRlJPTSBlbXAxIGUxLCBlbXAxIGUyIFdIRVJFIGUxLmlkID0gZTIuaWQgQU5EIGUyLmNv ZGUgPD4gZTEuY29kZTsKKyAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAg ICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgU2Vx IFNjYW4gb24gcHVibGljLmVtcDEgZTIKKyAgIE91dHB1dDogZTIuaWQsIGUyLmNvZGUsIGUy LmlkLCBlMi5jb2RlCisgICBGaWx0ZXI6IChlMi5jb2RlIDw+IGUyLmNvZGUpCisoMyByb3dz KQorCistLSBTaHVmZmxlIHNlbGYtam9pbmVkIHJlbGF0aW9ucy4gT25seSBpbiB0aGUgY2Fz ZSBvZiBpdGVyYXRpdmUgZGVsZXRpb24KKy0tIGF0dGVtcHRzIGV4cGxhaW5zIG9mIHRoZXNl IHF1ZXJpZXMgd2lsbCBiZSBpZGVudGljYWwuCitDUkVBVEUgVU5JUVVFIElOREVYIE9OIGVt cDEoKGlkKmlkKSk7CitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgY291bnQoKikgRlJP TSBlbXAxIGMxLCBlbXAxIGMyLCBlbXAxIGMzCitXSEVSRSBjMS5pZD1jMi5pZCBBTkQgYzEu aWQqYzIuaWQ9YzMuaWQqYzMuaWQ7CisgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAg ICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyBBZ2dyZWdhdGUKKyAgIC0+ICBTZXEgU2NhbiBvbiBlbXAxIGMzCisgICAgICAgICBGaWx0 ZXI6ICgoaWQgKiBpZCkgSVMgTk9UIE5VTEwpCisoMyByb3dzKQorCitFWFBMQUlOIChDT1NU UyBPRkYpCitTRUxFQ1QgY291bnQoKikgRlJPTSBlbXAxIGMxLCBlbXAxIGMyLCBlbXAxIGMz CitXSEVSRSBjMS5pZD1jMy5pZCBBTkQgYzEuaWQqYzMuaWQ9YzIuaWQqYzIuaWQ7CisgICAg ICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBBZ2dyZWdhdGUKKyAgIC0+ICBTZXEgU2Nh biBvbiBlbXAxIGMzCisgICAgICAgICBGaWx0ZXI6ICgoaWQgKiBpZCkgSVMgTk9UIE5VTEwp CisoMyByb3dzKQorCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgY291bnQoKikgRlJP TSBlbXAxIGMxLCBlbXAxIGMyLCBlbXAxIGMzCitXSEVSRSBjMy5pZD1jMi5pZCBBTkQgYzMu aWQqYzIuaWQ9YzEuaWQqYzEuaWQ7CisgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAg ICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyBBZ2dyZWdhdGUKKyAgIC0+ICBTZXEgU2NhbiBvbiBlbXAxIGMzCisgICAgICAgICBGaWx0 ZXI6ICgoaWQgKiBpZCkgSVMgTk9UIE5VTEwpCisoMyByb3dzKQorCistLSBDaGVjayB0aGUg dXNhZ2Ugb2YgYSBwYXJzZSB0cmVlIGJ5IHRoZSBzZXQgb3BlcmF0aW9ucyAoYnVnICMxODE3 MCkKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCBjMS5jb2RlIEZST00gZW1wMSBjMSBM RUZUIEpPSU4gZW1wMSBjMiBPTiBjMS5pZCA9IGMyLmlkCitXSEVSRSBjMi5pZCBJUyBOT1Qg TlVMTAorRVhDRVBUIEFMTAorU0VMRUNUIGMzLmNvZGUgRlJPTSBlbXAxIGMzOworICAgICAg ICBRVUVSWSBQTEFOICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBI YXNoU2V0T3AgRXhjZXB0IEFsbAorICAgLT4gIFNlcSBTY2FuIG9uIGVtcDEgYzIKKyAgIC0+ ICBTZXEgU2NhbiBvbiBlbXAxIGMzCisoMyByb3dzKQorCistLSBDaGVjayB0aGF0IFNKRSBy ZW1vdmVzIHJlZmVyZW5jZXMgZnJvbSBQSFZzIGNvcnJlY3RseQorZXhwbGFpbiAoY29zdHMg b2ZmKQorc2VsZWN0ICogZnJvbSBlbXAxIHQxIGxlZnQgam9pbgorICAgIChzZWxlY3QgY29h bGVzY2UodDMuY29kZSwgMSkgZnJvbSBlbXAxIHQyCisgICAgICAgIGxlZnQgam9pbiAoZW1w MSB0MyBqb2luIGVtcDEgdDQgb24gdDMuaWQgPSB0NC5pZCkKKyAgICAgICAgb24gdHJ1ZSkK K29uIHRydWU7CisgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5l c3RlZCBMb29wIExlZnQgSm9pbgorICAgLT4gIFNlcSBTY2FuIG9uIGVtcDEgdDEKKyAgIC0+ ICBNYXRlcmlhbGl6ZQorICAgICAgICAgLT4gIE5lc3RlZCBMb29wIExlZnQgSm9pbgorICAg ICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGVtcDEgdDIKKyAgICAgICAgICAgICAgIC0+ ICBNYXRlcmlhbGl6ZQorICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGVt cDEgdDQKKyg3IHJvd3MpCisKKy0tIENoZWNrIHRoYXQgU0pFIHJlbW92ZXMgdGhlIHdob2xl IFBIVnMgY29ycmVjdGx5CitleHBsYWluICh2ZXJib3NlLCBjb3N0cyBvZmYpCitzZWxlY3Qg MSBmcm9tIGVtcDEgdDEgbGVmdCBqb2luCisgICAgKChzZWxlY3QgMSBhcyB4LCAqIGZyb20g ZW1wMSB0MikgczEgaW5uZXIgam9pbgorICAgICAgICAoc2VsZWN0ICogZnJvbSBlbXAxIHQz KSBzMiBvbiBzMS5pZCA9IHMyLmlkKQorICAgIG9uIHRydWUKK3doZXJlIHMxLnggPSAxOwor ICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wCisgICBPdXRwdXQ6 IDEKKyAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZW1wMSB0MQorICAgICAgICAgT3V0cHV0 OiB0MS5pZCwgdDEuY29kZQorICAgLT4gIE1hdGVyaWFsaXplCisgICAgICAgICBPdXRwdXQ6 IHQzLmlkCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmVtcDEgdDMKKyAgICAg ICAgICAgICAgIE91dHB1dDogdDMuaWQKKyAgICAgICAgICAgICAgIEZpbHRlcjogKDEgPSAx KQorKDkgcm93cykKKworLS0gQ2hlY2sgdGhhdCBQSFZzIGRvIG5vdCBpbXBvc2UgYW55IGNv bnN0cmFpbnRzIG9uIHJlbW92aW5nIHNlbGYgam9pbnMKK2V4cGxhaW4gKHZlcmJvc2UsIGNv c3RzIG9mZikKK3NlbGVjdCAqIGZyb20gZW1wMSB0MSBqb2luIGVtcDEgdDIgb24gdDEuaWQg PSB0Mi5pZCBsZWZ0IGpvaW4KKyAgICBsYXRlcmFsIChzZWxlY3QgdDEuaWQgYXMgdDFpZCwg KiBmcm9tIGdlbmVyYXRlX3NlcmllcygxLDEpIHQzKSBzIG9uIHRydWU7CisgICAgICAgICAg ICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgTmVzdGVkIExvb3AgTGVmdCBKb2luCisgICBPdXRwdXQ6IHQyLmlkLCB0Mi5jb2RlLCB0 Mi5pZCwgdDIuY29kZSwgKHQyLmlkKSwgdDMudDMKKyAgIC0+ICBTZXEgU2NhbiBvbiBwdWJs aWMuZW1wMSB0MgorICAgICAgICAgT3V0cHV0OiB0Mi5pZCwgdDIuY29kZQorICAgLT4gIEZ1 bmN0aW9uIFNjYW4gb24gcGdfY2F0YWxvZy5nZW5lcmF0ZV9zZXJpZXMgdDMKKyAgICAgICAg IE91dHB1dDogdDMudDMsIHQyLmlkCisgICAgICAgICBGdW5jdGlvbiBDYWxsOiBnZW5lcmF0 ZV9zZXJpZXMoMSwgMSkKKyg3IHJvd3MpCisKK2V4cGxhaW4gKHZlcmJvc2UsIGNvc3RzIG9m ZikKK3NlbGVjdCAqIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDEsMTApIHQxKGlkKSBsZWZ0IGpv aW4KKyAgICBsYXRlcmFsIChzZWxlY3QgdDEuaWQgYXMgdDFpZCwgdDIuaWQgZnJvbSBlbXAx IHQyIGpvaW4gZW1wMSB0MyBvbiB0Mi5pZCA9IHQzLmlkKQorb24gdHJ1ZTsKKyAgICAgICAg ICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVz dGVkIExvb3AgTGVmdCBKb2luCisgICBPdXRwdXQ6IHQxLmlkLCAodDEuaWQpLCB0My5pZAor ICAgLT4gIEZ1bmN0aW9uIFNjYW4gb24gcGdfY2F0YWxvZy5nZW5lcmF0ZV9zZXJpZXMgdDEK KyAgICAgICAgIE91dHB1dDogdDEuaWQKKyAgICAgICAgIEZ1bmN0aW9uIENhbGw6IGdlbmVy YXRlX3NlcmllcygxLCAxMCkKKyAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuZW1wMSB0Mwor ICAgICAgICAgT3V0cHV0OiB0My5pZCwgdDEuaWQKKyg3IHJvd3MpCisKKy0tIENoZWNrIHRo YXQgU0pFIHJlcGxhY2VzIGpvaW4gY2xhdXNlcyBpbnZvbHZpbmcgdGhlIHJlbW92ZWQgcmVs IGNvcnJlY3RseQorZXhwbGFpbiAoY29zdHMgb2ZmKQorc2VsZWN0ICogZnJvbSBlbXAxIHQx CisgICBpbm5lciBqb2luIGVtcDEgdDIgb24gdDEuaWQgPSB0Mi5pZAorICAgIGxlZnQgam9p biBlbXAxIHQzIG9uIHQxLmlkID4gMSBhbmQgdDEuaWQgPCAyOworICAgICAgICAgICAgICAg ICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wIExlZnQgSm9pbgorICAg Sm9pbiBGaWx0ZXI6ICgodDIuaWQgPiAxKSBBTkQgKHQyLmlkIDwgMikpCisgICAtPiAgU2Vx IFNjYW4gb24gZW1wMSB0MgorICAgLT4gIE1hdGVyaWFsaXplCisgICAgICAgICAtPiAgU2Vx IFNjYW4gb24gZW1wMSB0MworKDUgcm93cykKKworLS0gQ2hlY2sgdGhhdCBTSkUgZG9lc24n dCByZXBsYWNlIHRoZSB0YXJnZXQgcmVsYXRpb24KK0VYUExBSU4gKENPU1RTIE9GRikKK1dJ VEggdDEgQVMgKFNFTEVDVCAqIEZST00gZW1wMSkKK1VQREFURSBlbXAxIFNFVCBjb2RlID0g dDEuY29kZSArIDEgRlJPTSB0MQorV0hFUkUgdDEuaWQgPSBlbXAxLmlkIFJFVFVSTklORyBl bXAxLmlkLCBlbXAxLmNvZGUsIHQxLmNvZGU7CisgICAgICAgICAgICAgICAgICAgICAgUVVF UlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgVXBkYXRlIG9uIGVtcDEKKyAg IC0+ICBOZXN0ZWQgTG9vcAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGVtcDEKKyAgICAg ICAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIGVtcDFfcGtleSBvbiBlbXAxIGVtcDFfMQorICAg ICAgICAgICAgICAgSW5kZXggQ29uZDogKGlkID0gZW1wMS5pZCkKKyg1IHJvd3MpCisKK0lO U0VSVCBJTlRPIGVtcDEgVkFMVUVTICgxLCAxKSwgKDIsIDEpOworV0lUSCB0MSBBUyAoU0VM RUNUICogRlJPTSBlbXAxKQorVVBEQVRFIGVtcDEgU0VUIGNvZGUgPSB0MS5jb2RlICsgMSBG Uk9NIHQxCitXSEVSRSB0MS5pZCA9IGVtcDEuaWQgUkVUVVJOSU5HIGVtcDEuaWQsIGVtcDEu Y29kZSwgdDEuY29kZTsKKyBpZCB8IGNvZGUgfCBjb2RlIAorLS0tLSstLS0tLS0rLS0tLS0t CisgIDEgfCAgICAyIHwgICAgMQorICAyIHwgICAgMiB8ICAgIDEKKygyIHJvd3MpCisKK1RS VU5DQVRFIGVtcDE7CitFWFBMQUlOIChDT1NUUyBPRkYpCitVUERBVEUgc2ogc3EgU0VUIGIg PSAxIEZST00gc2ogYXMgc3ogV0hFUkUgc3EuYSA9IHN6LmE7CisgICAgICAgICAgICAgUVVF UlkgUExBTiAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgVXBkYXRlIG9uIHNqIHNxCisgICAtPiAgTmVzdGVkIExvb3AKKyAgICAgICAg IEpvaW4gRmlsdGVyOiAoc3EuYSA9IHN6LmEpCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24g c2ogc3EKKyAgICAgICAgIC0+ICBNYXRlcmlhbGl6ZQorICAgICAgICAgICAgICAgLT4gIFNl cSBTY2FuIG9uIHNqIHN6CisoNiByb3dzKQorCitDUkVBVEUgUlVMRSBzal9kZWxfcnVsZSBB UyBPTiBERUxFVEUgVE8gc2oKKyAgRE8gSU5TVEVBRAorICAgIFVQREFURSBzaiBTRVQgYSA9 IDEgV0hFUkUgYSA9IG9sZC5hOworRVhQTEFJTiAoQ09TVFMgT0ZGKSBERUxFVEUgRlJPTSBz ajsKKyAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFVwZGF0ZSBvbiBzaiBzal8xCisgICAt PiAgTmVzdGVkIExvb3AKKyAgICAgICAgIEpvaW4gRmlsdGVyOiAoc2ouYSA9IHNqXzEuYSkK KyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBzaiBzal8xCisgICAgICAgICAtPiAgTWF0ZXJp YWxpemUKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBzagorKDYgcm93cykKKwor RFJPUCBSVUxFIHNqX2RlbF9ydWxlIE9OIHNqIENBU0NBREU7CistLSBDaGVjayB0aGF0IFNK RSBkb2VzIG5vdCBtaXN0YWtlbmx5IG9taXQgcXVhbCBjbGF1c2VzIChidWcgIzE4MTg3KQor aW5zZXJ0IGludG8gZW1wMSB2YWx1ZXMgKDEsIDEpOworZXhwbGFpbiAoY29zdHMgb2ZmKQor c2VsZWN0IDEgZnJvbSBlbXAxIGZ1bGwgam9pbgorICAgIChzZWxlY3QgKiBmcm9tIGVtcDEg dDEgam9pbgorICAgICAgICBlbXAxIHQyIGpvaW4gZW1wMSB0MyBvbiB0Mi5pZCA9IHQzLmlk CisgICAgICAgIG9uIHRydWUKKyAgICB3aGVyZSBmYWxzZSkgcyBvbiB0cnVlCit3aGVyZSBm YWxzZTsKKyAgICAgICAgUVVFUlkgUExBTiAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorIFJlc3VsdAorICAgT25lLVRpbWUgRmlsdGVyOiBmYWxzZQorKDIgcm93cykK Kworc2VsZWN0IDEgZnJvbSBlbXAxIGZ1bGwgam9pbgorICAgIChzZWxlY3QgKiBmcm9tIGVt cDEgdDEgam9pbgorICAgICAgICBlbXAxIHQyIGpvaW4gZW1wMSB0MyBvbiB0Mi5pZCA9IHQz LmlkCisgICAgICAgIG9uIHRydWUKKyAgICB3aGVyZSBmYWxzZSkgcyBvbiB0cnVlCit3aGVy ZSBmYWxzZTsKKyA/Y29sdW1uPyAKKy0tLS0tLS0tLS0KKygwIHJvd3MpCisKKy0tIENoZWNr IHRoYXQgU0pFIGRvZXMgbm90IG1pc3Rha2VubHkgcmUtdXNlIGtub3dsZWRnZSBvZiByZWxh dGlvbiB1bmlxdWVuZXNzCistLSBtYWRlIHdpdGggZGlmZmVyZW50IHNldCBvZiBxdWFscwor aW5zZXJ0IGludG8gZW1wMSB2YWx1ZXMgKDIsIDEpOworZXhwbGFpbiAoY29zdHMgb2ZmKQor c2VsZWN0ICogZnJvbSBlbXAxIHQxIHdoZXJlIGV4aXN0cyAoc2VsZWN0ICogZnJvbSBlbXAx IHQyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSB0Mi5pZCA9 IHQxLmNvZGUgYW5kIHQyLmNvZGUgPiAwKTsKKyAgICAgICAgICAgICAgICAgUVVFUlkgUExB TiAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AKKyAgIC0+ICBTZXEgU2NhbiBvbiBlbXAxIHQx CisgICAtPiAgSW5kZXggU2NhbiB1c2luZyBlbXAxX3BrZXkgb24gZW1wMSB0MgorICAgICAg ICAgSW5kZXggQ29uZDogKGlkID0gdDEuY29kZSkKKyAgICAgICAgIEZpbHRlcjogKGNvZGUg PiAwKQorKDUgcm93cykKKworc2VsZWN0ICogZnJvbSBlbXAxIHQxIHdoZXJlIGV4aXN0cyAo c2VsZWN0ICogZnJvbSBlbXAxIHQyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB3aGVyZSB0Mi5pZCA9IHQxLmNvZGUgYW5kIHQyLmNvZGUgPiAwKTsKKyBpZCB8IGNv ZGUgCistLS0tKy0tLS0tLQorICAxIHwgICAgMQorICAyIHwgICAgMQorKDIgcm93cykKKwor LS0gV2UgY2FuIHJlbW92ZSB0aGUgam9pbiBldmVuIGlmIHdlIGZpbmQgdGhlIGpvaW4gY2Fu J3QgZHVwbGljYXRlIHJvd3MgYW5kCistLSB0aGUgYmFzZSBxdWFscyBvZiBlYWNoIHNpZGUg YXJlIGRpZmZlcmVudC4gIEluIHRoZSBmb2xsb3dpbmcgY2FzZSB3ZSBlbmQgdXAKKy0tIG1v dmluZyBxdWFscyBvdmVyIHRvIHMxIHRvIG1ha2UgaXQgc28gaXQgY2FuJ3QgbWF0Y2ggYW55 IHJvd3MuCitjcmVhdGUgdGFibGUgc2woYSBpbnQsIGIgaW50LCBjIGludCk7CitjcmVhdGUg dW5pcXVlIGluZGV4IG9uIHNsKGEsIGIpOwordmFjdXVtIGFuYWx5emUgc2w7CistLSBCb3Ro IHNpZGVzIGFyZSB1bmlxdWUsIGJ1dCBiYXNlIHF1YWxzIGFyZSBkaWZmZXJlbnQKK2V4cGxh aW4gKGNvc3RzIG9mZikKK3NlbGVjdCAqIGZyb20gc2wgdDEsIHNsIHQyIHdoZXJlIHQxLmEg PSB0Mi5hIGFuZCB0MS5iID0gMSBhbmQgdDIuYiA9IDI7CisgICAgICAgICAgUVVFUlkgUExB TiAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBM b29wCisgICBKb2luIEZpbHRlcjogKHQxLmEgPSB0Mi5hKQorICAgLT4gIFNlcSBTY2FuIG9u IHNsIHQxCisgICAgICAgICBGaWx0ZXI6IChiID0gMSkKKyAgIC0+ICBTZXEgU2NhbiBvbiBz bCB0MgorICAgICAgICAgRmlsdGVyOiAoYiA9IDIpCisoNiByb3dzKQorCistLSBDaGVjayBO dWxsVGVzdCBpbiBiYXNlcmVzdHJpY3RpbmZvIGxpc3QKK2V4cGxhaW4gKGNvc3RzIG9mZikK K3NlbGVjdCAqIGZyb20gc2wgdDEsIHNsIHQyCit3aGVyZSB0MS5hID0gdDIuYSBhbmQgdDEu YiA9IDEgYW5kIHQyLmIgPSAyCisgIGFuZCB0MS5jIElTIE5PVCBOVUxMIGFuZCB0Mi5jIElT IE5PVCBOVUxMCisgIGFuZCB0Mi5iIElTIE5PVCBOVUxMIGFuZCB0MS5iIElTIE5PVCBOVUxM CisgIGFuZCB0MS5hIElTIE5PVCBOVUxMIGFuZCB0Mi5hIElTIE5PVCBOVUxMOworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgSm9pbiBGaWx0ZXI6ICh0MS5hID0gdDIuYSkK KyAgIC0+ICBTZXEgU2NhbiBvbiBzbCB0MQorICAgICAgICAgRmlsdGVyOiAoKGMgSVMgTk9U IE5VTEwpIEFORCAoYiBJUyBOT1QgTlVMTCkgQU5EIChhIElTIE5PVCBOVUxMKSBBTkQgKGIg PSAxKSkKKyAgIC0+ICBTZXEgU2NhbiBvbiBzbCB0MgorICAgICAgICAgRmlsdGVyOiAoKGMg SVMgTk9UIE5VTEwpIEFORCAoYiBJUyBOT1QgTlVMTCkgQU5EIChhIElTIE5PVCBOVUxMKSBB TkQgKGIgPSAyKSkKKyg2IHJvd3MpCisKK2V4cGxhaW4gKHZlcmJvc2UsIGNvc3RzIG9mZikK K3NlbGVjdCAqIGZyb20gc2wgdDEsIHNsIHQyCit3aGVyZSB0MS5iID0gdDIuYiBhbmQgdDIu YSA9IDMgYW5kIHQxLmEgPSAzCisgIGFuZCB0MS5jIElTIE5PVCBOVUxMIGFuZCB0Mi5jIElT IE5PVCBOVUxMCisgIGFuZCB0Mi5iIElTIE5PVCBOVUxMIGFuZCB0MS5iIElTIE5PVCBOVUxM CisgIGFuZCB0MS5hIElTIE5PVCBOVUxMIGFuZCB0Mi5hIElTIE5PVCBOVUxMOworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBwdWJsaWMuc2wgdDIKKyAgIE91 dHB1dDogdDIuYSwgdDIuYiwgdDIuYywgdDIuYSwgdDIuYiwgdDIuYworICAgRmlsdGVyOiAo KHQyLmMgSVMgTk9UIE5VTEwpIEFORCAodDIuYiBJUyBOT1QgTlVMTCkgQU5EICh0Mi5hIElT IE5PVCBOVUxMKSBBTkQgKHQyLmEgPSAzKSkKKygzIHJvd3MpCisKKy0tIEpvaW4gcXVhbCBp c24ndCBtZXJnZWpvaW5hYmxlLCBidXQgaW5uZXIgaXMgdW5pcXVlLgorRVhQTEFJTiAoQ09T VFMgT0ZGKQorU0VMRUNUIG4yLmEgRlJPTSBzaiBuMSwgc2ogbjIgV0hFUkUgbjEuYSA8PiBu Mi5hIEFORCBuMi5hID0gMTsKKyAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBOZXN0ZWQgTG9vcAorICAgSm9pbiBG aWx0ZXI6IChuMS5hIDw+IG4yLmEpCisgICAtPiAgU2VxIFNjYW4gb24gc2ogbjIKKyAgICAg ICAgIEZpbHRlcjogKGEgPSAxKQorICAgLT4gIFNlcSBTY2FuIG9uIHNqIG4xCisoNSByb3dz KQorCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NCisoU0VMRUNUIG4yLmEg RlJPTSBzaiBuMSwgc2ogbjIgV0hFUkUgbjEuYSA8PiBuMi5hKSBxMCwgc2wKK1dIRVJFIHEw LmEgPSAxOworICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIE5lc3RlZCBMb29wCisgICBKb2luIEZpbHRlcjogKG4x LmEgPD4gbjIuYSkKKyAgIC0+ICBOZXN0ZWQgTG9vcAorICAgICAgICAgLT4gIFNlcSBTY2Fu IG9uIHNsCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gc2ogbjIKKyAgICAgICAgICAgICAg IEZpbHRlcjogKGEgPSAxKQorICAgLT4gIFNlcSBTY2FuIG9uIHNqIG4xCisoNyByb3dzKQor CistLSBDaGVjayBvcHRpbWl6YXRpb24gZGlzYWJsaW5nIGlmIGl0IHdpbGwgdmlvbGF0ZSBz cGVjaWFsIGpvaW4gY29uZGl0aW9ucy4KKy0tIFR3byBpZGVudGljYWwgam9pbmVkIHJlbGF0 aW9ucyBzYXRpc2ZpZXMgc2VsZiBqb2luIHJlbW92YWwgY29uZGl0aW9ucyBidXQKKy0tIHN0 YXkgaW4gZGlmZmVyZW50IHNwZWNpYWwgam9pbiBpbmZvcy4KK0NSRUFURSBUQUJMRSBzal90 MSAoaWQgc2VyaWFsLCBhIGludCk7CitDUkVBVEUgVEFCTEUgc2pfdDIgKGlkIHNlcmlhbCwg YSBpbnQpOworQ1JFQVRFIFRBQkxFIHNqX3QzIChpZCBzZXJpYWwsIGEgaW50KTsKK0NSRUFU RSBUQUJMRSBzal90NCAoaWQgc2VyaWFsLCBhIGludCk7CitDUkVBVEUgVU5JUVVFIElOREVY IE9OIHNqX3QzIFVTSU5HIGJ0cmVlIChhLGlkKTsKK0NSRUFURSBVTklRVUUgSU5ERVggT04g c2pfdDIgVVNJTkcgYnRyZWUgKGlkKTsKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAq IEZST00gc2pfdDEKK0pPSU4gKAorCVNFTEVDVCBzal90Mi5pZCBBUyBpZCBGUk9NIHNqX3Qy CisJV0hFUkUgRVhJU1RTCisJCSgKKwkJU0VMRUNUIFRSVUUgRlJPTSBzal90Myxzal90NCBX SEVSRSBzal90My5hID0gMSBBTkQgc2pfdDMuaWQgPSBzal90Mi5pZAorCQkpCisJKSB0MnQz dDQKK09OIHNqX3QxLmlkID0gdDJ0M3Q0LmlkCitKT0lOICgKKwlTRUxFQ1Qgc2pfdDIuaWQg QVMgaWQgRlJPTSBzal90MgorCVdIRVJFIEVYSVNUUworCQkoCisJCVNFTEVDVCBUUlVFIEZS T00gc2pfdDMsc2pfdDQgV0hFUkUgc2pfdDMuYSA9IDEgQU5EIHNqX3QzLmlkID0gc2pfdDIu aWQKKwkJKQorCSkgX3QydDN0NAorT04gc2pfdDEuaWQgPSBfdDJ0M3Q0LmlkOworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorIE5lc3RlZCBMb29wCisgICBKb2luIEZpbHRlcjogKHNqX3QzLmlkID0gc2pfdDEu aWQpCisgICAtPiAgTmVzdGVkIExvb3AKKyAgICAgICAgIEpvaW4gRmlsdGVyOiAoc2pfdDIu aWQgPSBzal90My5pZCkKKyAgICAgICAgIC0+ICBOZXN0ZWQgTG9vcCBTZW1pIEpvaW4KKyAg ICAgICAgICAgICAgIC0+ICBOZXN0ZWQgTG9vcAorICAgICAgICAgICAgICAgICAgICAgLT4g IEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyb3VwIEtleTog c2pfdDMuaWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBOZXN0ZWQgTG9vcAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHNqX3Q0 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgTWF0ZXJpYWxpemUKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBCaXRtYXAgSGVhcCBT Y2FuIG9uIHNqX3QzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBSZWNoZWNrIENvbmQ6IChhID0gMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC0+ICBCaXRtYXAgSW5kZXggU2NhbiBvbiBzal90M19hX2lk X2lkeAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgSW5kZXggQ29uZDogKGEgPSAxKQorICAgICAgICAgICAgICAgICAgICAgLT4gIEluZGV4 IE9ubHkgU2NhbiB1c2luZyBzal90Ml9pZF9pZHggb24gc2pfdDIgc2pfdDJfMQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGlkID0gc2pfdDMuaWQpCisgICAg ICAgICAgICAgICAtPiAgTmVzdGVkIExvb3AKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBJ bmRleCBPbmx5IFNjYW4gdXNpbmcgc2pfdDNfYV9pZF9pZHggb24gc2pfdDMgc2pfdDNfMQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKChhID0gMSkgQU5EIChp ZCA9IHNqX3QzLmlkKSkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBz al90NCBzal90NF8xCisgICAgICAgICAtPiAgSW5kZXggT25seSBTY2FuIHVzaW5nIHNqX3Qy X2lkX2lkeCBvbiBzal90MgorICAgICAgICAgICAgICAgSW5kZXggQ29uZDogKGlkID0gc2pf dDJfMS5pZCkKKyAgIC0+ICBTZXEgU2NhbiBvbiBzal90MQorKDI0IHJvd3MpCisKKy0tCist LSBUZXN0IFJvd01hcmtzLXJlbGF0ZWQgY29kZQorLS0KKy0tIEJvdGggc2lkZXMgaGF2ZSBl eHBsaWNpdCBMb2NrUm93cyBtYXJrcworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIGEx LmEgRlJPTSBzaiBhMSxzaiBhMiBXSEVSRSAoYTEuYT1hMi5hKSBGT1IgVVBEQVRFOworICAg ICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyBMb2NrUm93cworICAgLT4gIFNlcSBTY2FuIG9uIHNqIGEyCisgICAg ICAgICBGaWx0ZXI6IChhIElTIE5PVCBOVUxMKQorKDMgcm93cykKKworcmVzZXQgZW5hYmxl X2hhc2hqb2luOworcmVzZXQgZW5hYmxlX21lcmdlam9pbjsKIC0tCiAtLSBUZXN0IGhpbnRz IGdpdmVuIG9uIGluY29ycmVjdCBjb2x1bW4gcmVmZXJlbmNlcyBhcmUgdXNlZnVsCiAtLQpk aWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zeXN2aWV3cy5vdXQgYi9z cmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N5c3ZpZXdzLm91dAppbmRleCAzNTJhYmMwYmQ0 Li44MzIyOGNmY2EyIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N5 c3ZpZXdzLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N5c3ZpZXdzLm91 dApAQCAtMTY4LDEwICsxNjgsMTEgQEAgc2VsZWN0IG5hbWUsIHNldHRpbmcgZnJvbSBwZ19z ZXR0aW5ncyB3aGVyZSBuYW1lIGxpa2UgJ2VuYWJsZSUnOwogIGVuYWJsZV9wYXJ0aXRpb253 aXNlX2FnZ3JlZ2F0ZSB8IG9mZgogIGVuYWJsZV9wYXJ0aXRpb253aXNlX2pvaW4gICAgICB8 IG9mZgogIGVuYWJsZV9wcmVzb3J0ZWRfYWdncmVnYXRlICAgICB8IG9uCisgZW5hYmxlX3Nl bGZfam9pbl9lbGltaW5hdGlvbiAgIHwgb24KICBlbmFibGVfc2Vxc2NhbiAgICAgICAgICAg ICAgICAgfCBvbgogIGVuYWJsZV9zb3J0ICAgICAgICAgICAgICAgICAgICB8IG9uCiAgZW5h YmxlX3RpZHNjYW4gICAgICAgICAgICAgICAgIHwgb24KLSgyMyByb3dzKQorKDI0IHJvd3Mp CiAKIC0tIFRoZXJlIGFyZSBhbHdheXMgd2FpdCBldmVudCBkZXNjcmlwdGlvbnMgZm9yIHZh cmlvdXMgdHlwZXMuICBJbmplY3Rpb25Qb2ludAogLS0gbWF5IGJlIHByZXNlbnQgb3IgYWJz ZW50LCBkZXBlbmRpbmcgb24gaGlzdG9yeSBzaW5jZSBsYXN0IHBvc3RtYXN0ZXIgc3RhcnQu CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9lcXVpdmNsYXNzLnNxbCBiL3Ny Yy90ZXN0L3JlZ3Jlc3Mvc3FsL2VxdWl2Y2xhc3Muc3FsCmluZGV4IDI4ZWQ3OTEwZDAuLjdm YzIxNTkzNDkgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2VxdWl2Y2xhc3Mu c3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2VxdWl2Y2xhc3Muc3FsCkBAIC0yNTks NiArMjU5LDIyIEBAIGRyb3AgdXNlciByZWdyZXNzX3VzZXJfZWN0ZXN0OwogZXhwbGFpbiAo Y29zdHMgb2ZmKQogICBzZWxlY3QgKiBmcm9tIHRlbmsxIHdoZXJlIHVuaXF1ZTEgPSB1bmlx dWUxIGFuZCB1bmlxdWUyID0gdW5pcXVlMjsKIAorLS0gVGVzdCB0aGF0IGJyb2tlbiBFQ3Mg YXJlIHByb2Nlc3NlZCBjb3JyZWN0bHkgZHVyaW5nIHNlbGYgam9pbiByZW1vdmFsLgorLS0g RGlzYWJsZSBtZXJnZSBqb2lucyBzbyB0aGF0IHdlIGRvbid0IGdldCBhbiBlcnJvciBhYm91 dCBtaXNzaW5nIGNvbW11dGF0b3IuCistLSBUZXN0IGJvdGggb3JpZW50YXRpb25zIG9mIHRo ZSBqb2luIGNsYXVzZSwgYmVjYXVzZSBvbmx5IG9uZSBvZiB0aGVtIGJyZWFrcworLS0gdGhl IEVDLgorc2V0IGVuYWJsZV9tZXJnZWpvaW4gdG8gb2ZmOworCitleHBsYWluIChjb3N0cyBv ZmYpCisgIHNlbGVjdCAqIGZyb20gZWMwIG0gam9pbiBlYzAgbiBvbiBtLmZmID0gbi5mZgor ICBqb2luIGVjMSBwIG9uIG0uZmYgKyBuLmZmID0gcC5mMTsKKworZXhwbGFpbiAoY29zdHMg b2ZmKQorICBzZWxlY3QgKiBmcm9tIGVjMCBtIGpvaW4gZWMwIG4gb24gbS5mZiA9IG4uZmYK KyAgam9pbiBlYzEgcCBvbiBwLmYxOjppbnQ4ID0gKG0uZmYgKyBuLmZmKTo6aW50OGFsaWFz MTsKKworcmVzZXQgZW5hYmxlX21lcmdlam9pbjsKKwogLS0gdGhpcyBjb3VsZCBiZSBjb252 ZXJ0ZWQsIGJ1dCBpc24ndCBhdCBwcmVzZW50CiBleHBsYWluIChjb3N0cyBvZmYpCiAgIHNl bGVjdCAqIGZyb20gdGVuazEgd2hlcmUgdW5pcXVlMSA9IHVuaXF1ZTEgb3IgdW5pcXVlMiA9 IHVuaXF1ZTI7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9qb2luLnNxbCBi L3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2pvaW4uc3FsCmluZGV4IDc3OWQ1NmNiMzAuLjY4YjU1 MjllOGYgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2pvaW4uc3FsCisrKyBi L3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2pvaW4uc3FsCkBAIC0yMTc1LDYgKzIxNzUsMTcgQEAg c2VsZWN0IGMuaWQsIHNzLmEgZnJvbSBjCiAgIGxlZnQgam9pbiAoc2VsZWN0IGQuYSBmcm9t IG9uZXJvdywgZCBsZWZ0IGpvaW4gYiBvbiBkLmEgPSBiLmlkKSBzcwogICBvbiBjLmlkID0g c3MuYTsKIAorLS0gY2hlY2sgdGhlIGNhc2Ugd2hlbiBwbGFjZWhvbGRlciByZWxhdGVzIG9u IGFuIG91dGVyIGpvaW4gYW5kIGl0cyBpbm5lciBpbiB0aGUKKy0tIHBocmVscyBmaWVsZCBi dXQgYWN0dWFsbHkgdXNlcyBvbmx5IG91dGVyIHNpZGUgb2YgdGhlIGpvaW4uCitleHBsYWlu IChjb3N0cyBvZmYpCitTRUxFQ1QgcS52YWwgRlJPTSBiIExFRlQgSk9JTiAoCisgIFNFTEVD VCAocTEueiBJUyBOT1QgTlVMTCkgQVMgdmFsCisgIEZST00gYiBMRUZUIEpPSU4gKAorICAg IFNFTEVDVCAodDEuYl9pZCBJUyBOT1QgTlVMTCkgQVMgeiBGUk9NIGEgdDEgTEVGVCBKT0lO IGEgdDIgVVNJTkcgKGlkKQorICAgICkgQVMgcTEKKyAgT04gdHJ1ZQorKSBBUyBxIE9OIHRy dWU7CisKIENSRUFURSBURU1QIFRBQkxFIHBhcnRlZF9iIChpZCBpbnQgUFJJTUFSWSBLRVkp IHBhcnRpdGlvbiBieSByYW5nZShpZCk7CiBDUkVBVEUgVEVNUCBUQUJMRSBwYXJ0ZWRfYjEg cGFydGl0aW9uIG9mIHBhcnRlZF9iIGZvciB2YWx1ZXMgZnJvbSAoMCkgdG8gKDEwKTsKIApA QCAtMjQwOSw2ICsyNDIwLDQ4OSBAQCBzZWxlY3QgKiBmcm9tCiBzZWxlY3QgKiBmcm9tCiAg IGludDhfdGJsIHggam9pbiAoaW50NF90YmwgeCBjcm9zcyBqb2luIGludDRfdGJsIHkoZmYp KSBqIG9uIHExID0gZjE7IC0tIG9rCiAKKy0tCistLSB0ZXN0IHRoYXQgc2VtaS0gb3IgaW5u ZXIgc2VsZi1qb2lucyBvbiBhIHVuaXF1ZSBjb2x1bW4gYXJlIHJlbW92ZWQKKy0tCisKKy0t IGVuYWJsZSBvbmx5IG5lc3Rsb29wIHRvIGdldCBtb3JlIHByZWRpY3RhYmxlIHBsYW5zCitz ZXQgZW5hYmxlX2hhc2hqb2luIHRvIG9mZjsKK3NldCBlbmFibGVfbWVyZ2Vqb2luIHRvIG9m ZjsKKworY3JlYXRlIHRhYmxlIHNqIChhIGludCB1bmlxdWUsIGIgaW50LCBjIGludCB1bmlx dWUpOworaW5zZXJ0IGludG8gc2ogdmFsdWVzICgxLCBudWxsLCAyKSwgKG51bGwsIDIsIG51 bGwpLCAoMiwgMSwgMSk7CithbmFseXplIHNqOworCistLSBUcml2aWFsIHNlbGYtam9pbiBj YXNlLgorZXhwbGFpbiAoY29zdHMgb2ZmKQorc2VsZWN0IHAuKiBmcm9tIHNqIHAsIHNqIHEg d2hlcmUgcS5hID0gcC5hIGFuZCBxLmIgPSBxLmEgLSAxOworc2VsZWN0IHAuKiBmcm9tIHNq IHAsIHNqIHEgd2hlcmUgcS5hID0gcC5hIGFuZCBxLmIgPSBxLmEgLSAxOworCistLSBTZWxm LWpvaW4gcmVtb3ZhbCBwZXJmb3JtcyBhZnRlciBhIHN1YnF1ZXJ5IHB1bGwtdXAgcHJvY2Vz cyBhbmQgY291bGQgcmVtb3ZlCistLSBzdWNoIGtpbmQgb2Ygc2VsZi1qb2luIHRvby4gQ2hl Y2sgdGhpcyBvcHRpb24uCitleHBsYWluIChjb3N0cyBvZmYpCitzZWxlY3QgKiBmcm9tIHNq IHAKK3doZXJlIGV4aXN0cyAoc2VsZWN0ICogZnJvbSBzaiBxCisgICAgICAgICAgICAgIHdo ZXJlIHEuYSA9IHAuYSBhbmQgcS5iIDwgMTApOworc2VsZWN0ICogZnJvbSBzaiBwCit3aGVy ZSBleGlzdHMgKHNlbGVjdCAqIGZyb20gc2ogcQorICAgICAgICAgICAgICB3aGVyZSBxLmEg PSBwLmEgYW5kIHEuYiA8IDEwKTsKKworLS0gRG9uJ3QgcmVtb3ZlIHNlbGYtam9pbiBmb3Ig dGhlIGNhc2Ugb2YgZXF1YWxpdHkgb2YgdHdvIGRpZmZlcmVudCB1bmlxdWUgY29sdW1ucy4K K2V4cGxhaW4gKGNvc3RzIG9mZikKK3NlbGVjdCAqIGZyb20gc2ogdDEsIHNqIHQyIHdoZXJl IHQxLmEgPSB0Mi5jIGFuZCB0MS5iIGlzIG5vdCBudWxsOworCistLSBFbnN1cmUgdGhhdCBy ZWxhdGlvbnMgd2l0aCBUQUJMRVNBTVBMRSBjbGF1c2VzIGFyZSBub3QgY29uc2lkZXJlZCBh cworLS0gY2FuZGlkYXRlcyB0byBiZSByZW1vdmVkCitleHBsYWluIChjb3N0cyBvZmYpCitz ZWxlY3QgKiBmcm9tIHNqIHQxCisgICAgam9pbiBsYXRlcmFsCisgICAgICAoc2VsZWN0ICog ZnJvbSBzaiB0YWJsZXNhbXBsZSBzeXN0ZW0odDEuYikpIHMKKyAgICBvbiB0MS5hID0gcy5h OworCistLSBFbnN1cmUgdGhhdCBTSkUgZG9lcyBub3QgZm9ybSBhIHNlbGYtcmVmZXJlbnRp YWwgbGF0ZXJhbCBkZXBlbmRlbmN5CitleHBsYWluIChjb3N0cyBvZmYpCitzZWxlY3QgKiBm cm9tIHNqIHQxCisgICAgbGVmdCBqb2luIGxhdGVyYWwKKyAgICAgIChzZWxlY3QgdDEuYSBh cyB0MWEsICogZnJvbSBzaiB0MikgcworICAgIG9uIHRydWUKK3doZXJlIHQxLmEgPSBzLmE7 CisKKy0tIERlZ2VuZXJhdGVkIGNhc2UuCitleHBsYWluIChjb3N0cyBvZmYpCitzZWxlY3Qg KiBmcm9tCisgIChzZWxlY3QgYSBhcyB4IGZyb20gc2ogd2hlcmUgZmFsc2UpIGFzIHExLAor ICAoc2VsZWN0IGEgYXMgeSBmcm9tIHNqIHdoZXJlIGZhbHNlKSBhcyBxMgord2hlcmUgcTEu eCA9IHEyLnk7CisKKy0tIFdlIGNhbid0IHVzZSBhIGNyb3NzLUVDIGdlbmVyYXRlZCBzZWxm IGpvaW4gcXVhbCBiZWNhdXNlIG9mIGN1cnJlbnQgbG9naWMgb2YKKy0tIHRoZSBnZW5lcmF0 ZV9qb2luX2ltcGxpZWRfZXF1YWxpdGllcyByb3V0aW5lLgorZXhwbGFpbiAoY29zdHMgb2Zm KQorc2VsZWN0ICogZnJvbSBzaiB0MSwgc2ogdDIgd2hlcmUgdDEuYSA9IHQxLmIgYW5kIHQx LmIgPSB0Mi5iIGFuZCB0Mi5iID0gdDIuYTsKK2V4cGxhaW4gKGNvc3RzIG9mZikKK3NlbGVj dCAqIGZyb20gc2ogdDEsIHNqIHQyLCBzaiB0Mword2hlcmUgdDEuYSA9IHQxLmIgYW5kIHQx LmIgPSB0Mi5iIGFuZCB0Mi5iID0gdDIuYSBhbmQKKyAgICAgIHQxLmIgPSB0My5iIGFuZCB0 My5iID0gdDMuYTsKKworLS0gRG91YmxlIHNlbGYtam9pbiByZW1vdmFsLgorLS0gVXNlIGEg Y29uZGl0aW9uIG9uICJiICsgMSIsIG5vdCBvbiAiYiIsIGZvciB0aGUgc2Vjb25kIGpvaW4s IHNvIHRoYXQKKy0tIHRoZSBlcXVpdmFsZW5jZSBjbGFzcyBpcyBkaWZmZXJlbnQgZnJvbSB0 aGUgZmlyc3Qgb25lLCBhbmQgd2UgY2FuCistLSB0ZXN0IHRoZSBub24tZWMgY29kZSBwYXRo LgorZXhwbGFpbiAoY29zdHMgb2ZmKQorc2VsZWN0ICoKK2Zyb20gIHNqIHQxCisgICAgICBq b2luIHNqIHQyIG9uIHQxLmEgPSB0Mi5hIGFuZCB0MS5iID0gdDIuYgorCSAgam9pbiBzaiB0 MyBvbiB0Mi5hID0gdDMuYSBhbmQgdDIuYiArIDEgPSB0My5iICsgMTsKKworLS0gc3Vic2Vs ZWN0IHRoYXQgcmVmZXJlbmNlcyB0aGUgcmVtb3ZlZCByZWxhdGlvbgorZXhwbGFpbiAoY29z dHMgb2ZmKQorc2VsZWN0IHQxLmEsIChzZWxlY3QgYSBmcm9tIHNqIHdoZXJlIGEgPSB0Mi5h IGFuZCBhID0gdDEuYSkKK2Zyb20gc2ogdDEsIHNqIHQyCit3aGVyZSB0MS5hID0gdDIuYTsK KworLS0gc2VsZi1qb2luIHVuZGVyIG91dGVyIGpvaW4KK2V4cGxhaW4gKGNvc3RzIG9mZikK K3NlbGVjdCAqIGZyb20gc2ogeCBqb2luIHNqIHkgb24geC5hID0geS5hCitsZWZ0IGpvaW4g aW50OF90YmwgeiBvbiB4LmEgPSB6LnExOworCitleHBsYWluIChjb3N0cyBvZmYpCitzZWxl Y3QgKiBmcm9tIHNqIHggam9pbiBzaiB5IG9uIHguYSA9IHkuYQorbGVmdCBqb2luIGludDhf dGJsIHogb24geS5hID0gei5xMTsKKworZXhwbGFpbiAoY29zdHMgb2ZmKQorc2VsZWN0ICog ZnJvbSAoCisgIHNlbGVjdCB0MS4qLCB0Mi5hIGFzIGF4IGZyb20gc2ogdDEgam9pbiBzaiB0 MgorICBvbiAodDEuYSA9IHQyLmEgYW5kIHQxLmMgKiB0MS5jID0gdDIuYyArIDIgYW5kIHQy LmIgaXMgbnVsbCkKKykgYXMgcTEKK2xlZnQgam9pbgorICAoc2VsZWN0IHQzLiogZnJvbSBz aiB0Mywgc2ogdDQgd2hlcmUgdDMuYyA9IHQ0LmMpIGFzIHEyCitvbiBxMS5heCA9IHEyLmE7 CisKKy0tIFRlc3QgdGhhdCBwbGFjZWhvbGRlcnMgYXJlIHVwZGF0ZWQgY29ycmVjdGx5IGFm dGVyIGpvaW4gcmVtb3ZhbAorZXhwbGFpbiAoY29zdHMgb2ZmKQorc2VsZWN0ICogZnJvbSAo dmFsdWVzICgxKSkgeAorbGVmdCBqb2luIChzZWxlY3QgY29hbGVzY2UoeS5xMSwgMSkgZnJv bSBpbnQ4X3RibCB5CisJcmlnaHQgam9pbiBzaiBqMSBpbm5lciBqb2luIHNqIGoyIG9uIGox LmEgPSBqMi5hCisJb24gdHJ1ZSkgegorb24gdHJ1ZTsKKworLS0gVGVzdCB0aGF0IHJlZmVy ZW5jZXMgdG8gdGhlIHJlbW92ZWQgcmVsIGluIGxhdGVyYWwgc3VicXVlcmllcyBhcmUgcmVw bGFjZWQKKy0tIGNvcnJlY3RseSBhZnRlciBqb2luIHJlbW92YWwKK2V4cGxhaW4gKHZlcmJv c2UsIGNvc3RzIG9mZikKK3NlbGVjdCB0My5hIGZyb20gc2ogdDEKKwlqb2luIHNqIHQyIG9u IHQxLmEgPSB0Mi5hCisJam9pbiBsYXRlcmFsIChzZWxlY3QgdDEuYSBvZmZzZXQgMCkgdDMg b24gdHJ1ZTsKKworZXhwbGFpbiAodmVyYm9zZSwgY29zdHMgb2ZmKQorc2VsZWN0IHQzLmEg ZnJvbSBzaiB0MQorCWpvaW4gc2ogdDIgb24gdDEuYSA9IHQyLmEKKwlqb2luIGxhdGVyYWwg KHNlbGVjdCAqIGZyb20gKHNlbGVjdCB0MS5hIG9mZnNldCAwKSBvZmZzZXQgMCkgdDMgb24g dHJ1ZTsKKworZXhwbGFpbiAodmVyYm9zZSwgY29zdHMgb2ZmKQorc2VsZWN0IHQ0LmEgZnJv bSBzaiB0MQorCWpvaW4gc2ogdDIgb24gdDEuYSA9IHQyLmEKKwlqb2luIGxhdGVyYWwgKHNl bGVjdCB0My5hIGZyb20gc2ogdDMsIChzZWxlY3QgdDEuYSkgb2Zmc2V0IDApIHQ0IG9uIHRy dWU7CisKKy0tIENoZWNrIHVwZGF0aW5nIG9mIHNlbWlfcmhzX2V4cHJzIGxpbmtzIGZyb20g dXBwZXItbGV2ZWwgc2VtaSBqb2luIHRvCistLSB0aGUgcmVtb3ZpbmcgcmVsYXRpb24KK2V4 cGxhaW4gKHZlcmJvc2UsIGNvc3RzIG9mZikKK3NlbGVjdCB0MS5hIGZyb20gc2ogdDEgd2hl cmUgdDEuYiBpbiAoCisgIHNlbGVjdCB0Mi5iIGZyb20gc2ogdDIgam9pbiBzaiB0MyBvbiB0 Mi5jPXQzLmMpOworCistLQorLS0gU0pFIGNvcm5lciBjYXNlOiB1bmlxdWVuZXNzIG9mIGFu IGlubmVyIGlzIFtwYXJ0aWFsbHldIGRlcml2ZWQgZnJvbQorLS0gYmFzZXJlc3RyaWN0aW5m byBjbGF1c2VzLgorLS0gWFhYOiBXZSByZWFsbHkgc2hvdWxkIGFsbG93IFNKRSBmb3IgdGhl c2UgY29ybmVyIGNhc2VzPworLS0KKworSU5TRVJUIElOVE8gc2ogVkFMVUVTICgzLCAxLCAz KTsKKworLS0gRG9uJ3QgcmVtb3ZlIFNKCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1Qg KiBGUk9NIHNqIGoxLCBzaiBqMiBXSEVSRSBqMS5iID0gajIuYiBBTkQgajEuYSA9IDIgQU5E IGoyLmEgPSAzOworLS0gUmV0dXJuIG9uZSByb3cKK1NFTEVDVCAqIEZST00gc2ogajEsIHNq IGoyIFdIRVJFIGoxLmIgPSBqMi5iIEFORCBqMS5hID0gMiBBTkQgajIuYSA9IDM7CisKKy0t IFJlbW92ZSBTSiwgZGVmaW5lIHVuaXF1ZW5lc3MgYnkgYSBjb25zdGFudAorRVhQTEFJTiAo Q09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBzaiBqMSwgc2ogajIgV0hFUkUgajEuYiA9IGoy LmIgQU5EIGoxLmEgPSAyIEFORCBqMi5hID0gMjsKKy0tIFJldHVybiBvbmUgcm93CitTRUxF Q1QgKiBGUk9NIHNqIGoxLCBzaiBqMiBXSEVSRSBqMS5iID0gajIuYiBBTkQgajEuYSA9IDIg QU5EIGoyLmEgPSAyOworCistLSBSZW1vdmUgU0osIGRlZmluZSB1bmlxdWVuZXNzIGJ5IGEg Y29uc3RhbnQgZXhwcmVzc2lvbgorRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUICogRlJP TSBzaiBqMSwgc2ogajIKK1dIRVJFIGoxLmIgPSBqMi5iCisgIEFORCBqMS5hID0gKEVYVFJB Q1QoRE9XIEZST00gY3VycmVudF90aW1lc3RhbXAoMCkpLzE1ICsgMyk6OmludAorICBBTkQg KEVYVFJBQ1QoRE9XIEZST00gY3VycmVudF90aW1lc3RhbXAoMCkpLzE1ICsgMyk6OmludCA9 IGoyLmE7CistLSBSZXR1cm4gb25lIHJvdworU0VMRUNUICogRlJPTSBzaiBqMSwgc2ogajIK K1dIRVJFIGoxLmIgPSBqMi5iCisgIEFORCBqMS5hID0gKEVYVFJBQ1QoRE9XIEZST00gY3Vy cmVudF90aW1lc3RhbXAoMCkpLzE1ICsgMyk6OmludAorICBBTkQgKEVYVFJBQ1QoRE9XIEZS T00gY3VycmVudF90aW1lc3RhbXAoMCkpLzE1ICsgMyk6OmludCA9IGoyLmE7CisKKy0tIFJl bW92ZSBTSgorRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBzaiBqMSwgc2og ajIgV0hFUkUgajEuYiA9IGoyLmIgQU5EIGoxLmEgPSAxIEFORCBqMi5hID0gMTsKKy0tIFJl dHVybiBubyByb3dzCitTRUxFQ1QgKiBGUk9NIHNqIGoxLCBzaiBqMiBXSEVSRSBqMS5iID0g ajIuYiBBTkQgajEuYSA9IDEgQU5EIGoyLmEgPSAxOworCistLSBTaHVmZmxlIGEgY2xhdXNl LiBSZW1vdmUgU0oKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gc2ogajEs IHNqIGoyIFdIRVJFIGoxLmIgPSBqMi5iIEFORCAxID0gajEuYSBBTkQgajIuYSA9IDE7Cist LSBSZXR1cm4gbm8gcm93cworU0VMRUNUICogRlJPTSBzaiBqMSwgc2ogajIgV0hFUkUgajEu YiA9IGoyLmIgQU5EIDEgPSBqMS5hIEFORCBqMi5hID0gMTsKKworLS0gU0pFIENvcm5lciBj YXNlOiBhICdhLng9YS54JyBjbGF1c2UsIGhhdmUgcmVwbGFjZWQgd2l0aCAnYS54IElTIE5P VCBOVUxMJworLS0gYWZ0ZXIgU0ogZWxpbWluYXRpb24gaXQgc2hvdWxkbid0IGJlIGEgbWVy Z2Vqb2luYWJsZSBjbGF1c2UuCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgdDQuKgor RlJPTSAoU0VMRUNUIHQxLiosIHQyLmEgQVMgYTEgRlJPTSBzaiB0MSwgc2ogdDIgV0hFUkUg dDEuYiA9IHQyLmIpIEFTIHQzCitKT0lOIHNqIHQ0IE9OICh0NC5hID0gdDMuYSkgV0hFUkUg dDMuYTEgPSA0MjsKK1NFTEVDVCB0NC4qCitGUk9NIChTRUxFQ1QgdDEuKiwgdDIuYSBBUyBh MSBGUk9NIHNqIHQxLCBzaiB0MiBXSEVSRSB0MS5iID0gdDIuYikgQVMgdDMKK0pPSU4gc2og dDQgT04gKHQ0LmEgPSB0My5hKSBXSEVSRSB0My5hMSA9IDQyOworCistLSBGdW5jdGlvbmFs IGluZGV4CitDUkVBVEUgVU5JUVVFIElOREVYIHNqX2ZuX2lkeCBPTiBzaigoYSAqIGEpKTsK KworLS0gUmVtb3ZlIFNKCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIHNq IGoxLCBzaiBqMgorCVdIRVJFIGoxLmIgPSBqMi5iIEFORCBqMS5hKmoxLmEgPSAxIEFORCBq Mi5hKmoyLmEgPSAxOworLS0gRG9uJ3QgcmVtb3ZlIFNKCitFWFBMQUlOIChDT1NUUyBPRkYp CitTRUxFQ1QgKiBGUk9NIHNqIGoxLCBzaiBqMgorCVdIRVJFIGoxLmIgPSBqMi5iIEFORCBq MS5hKmoxLmEgPSAxIEFORCBqMi5hKmoyLmEgPSAyOworCistLSBSZXN0cmljdGlvbiBjb250 YWlucyBleHByZXNzaW9ucyBpbiBib3RoIHNpZGVzLCBSZW1vdmUgU0ouCitFWFBMQUlOIChD T1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIHNqIGoxLCBzaiBqMgorV0hFUkUgajEuYiA9IGoy LmIKKyAgQU5EIChqMS5hKmoxLmEpID0gKEVYVFJBQ1QoRE9XIEZST00gY3VycmVudF90aW1l c3RhbXAoMCkpLzE1ICsgMyk6OmludAorICBBTkQgKEVYVFJBQ1QoRE9XIEZST00gY3VycmVu dF90aW1lc3RhbXAoMCkpLzE1ICsgMyk6OmludCA9IChqMi5hKmoyLmEpOworLS0gRW1wdHkg c2V0IG9mIHJvd3Mgc2hvdWxkIGJlIHJldHVybmVkCitTRUxFQ1QgKiBGUk9NIHNqIGoxLCBz aiBqMgorV0hFUkUgajEuYiA9IGoyLmIKKyAgQU5EIChqMS5hKmoxLmEpID0gKEVYVFJBQ1Qo RE9XIEZST00gY3VycmVudF90aW1lc3RhbXAoMCkpLzE1ICsgMyk6OmludAorICBBTkQgKEVY VFJBQ1QoRE9XIEZST00gY3VycmVudF90aW1lc3RhbXAoMCkpLzE1ICsgMyk6OmludCA9IChq Mi5hKmoyLmEpOworCistLSBSZXN0cmljdGlvbiBjb250YWlucyB2b2xhdGlsZSBmdW5jdGlv biAtIGRpc2FibGUgU0pFIGZlYXR1cmUuCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1Qg KiBGUk9NIHNqIGoxLCBzaiBqMgorV0hFUkUgajEuYiA9IGoyLmIKKyAgQU5EIChqMS5hKmox LmMvMykgPSAocmFuZG9tKCkvMyArIDMpOjppbnQKKyAgQU5EIChyYW5kb20oKS8zICsgMyk6 OmludCA9IChqMi5hKmoyLmMvMyk7CistLSBSZXR1cm4gb25lIHJvdworU0VMRUNUICogRlJP TSBzaiBqMSwgc2ogajIKK1dIRVJFIGoxLmIgPSBqMi5iCisgIEFORCAoajEuYSpqMS5jLzMp ID0gKHJhbmRvbSgpLzMgKyAzKTo6aW50CisgIEFORCAocmFuZG9tKCkvMyArIDMpOjppbnQg PSAoajIuYSpqMi5jLzMpOworCistLSBNdWx0aXBsZSBmaWx0ZXJzCitDUkVBVEUgVU5JUVVF IElOREVYIHNqX3RlbXBfaWR4MSBPTiBzaihhLGIsYyk7CisKKy0tIFJlbW92ZSBTSgorRVhQ TEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBzaiBqMSwgc2ogajIKKwlXSEVSRSBq MS5iID0gajIuYiBBTkQgajEuYSA9IDIgQU5EIGoxLmMgPSAzIEFORCBqMi5hID0gMiBBTkQg MyA9IGoyLmM7CisKKy0tIERvbid0IHJlbW92ZSBTSgorRVhQTEFJTiAoQ09TVFMgT0ZGKQor CVNFTEVDVCAqIEZST00gc2ogajEsIHNqIGoyCisJV0hFUkUgajEuYiA9IGoyLmIgQU5EIDIg PSBqMS5hIEFORCBqMS5jID0gMyBBTkQgajIuYSA9IDEgQU5EIDMgPSBqMi5jOworCitDUkVB VEUgVU5JUVVFIElOREVYIHNqX3RlbXBfaWR4IE9OIHNqKGEsYik7CisKKy0tIERvbid0IHJl bW92ZSBTSgorRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBzaiBqMSwgc2og ajIgV0hFUkUgajEuYiA9IGoyLmIgQU5EIGoxLmEgPSAyOworCistLSBEb24ndCByZW1vdmUg U0oKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gc2ogajEsIHNqIGoyIFdI RVJFIGoxLmIgPSBqMi5iIEFORCAyID0gajIuYTsKKworLS0gRG9uJ3QgcmVtb3ZlIFNKCitF WFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIHNqIGoxLCBzaiBqMiBXSEVSRSBq MS5iID0gajIuYiBBTkQgKGoxLmEgPSAxIE9SIGoyLmEgPSAxKTsKKworRFJPUCBJTkRFWCBz al9mbl9pZHgsIHNqX3RlbXBfaWR4MSwgc2pfdGVtcF9pZHg7CisKKy0tIFRlc3QgdGhhdCBP UiBwcmVkaWNhdGVkIGFyZSB1cGRhdGVkIGNvcnJlY3RseSBhZnRlciBqb2luIHJlbW92YWwK K0NSRUFURSBUQUJMRSB0YWJfd2l0aF9mbGFnICggaWQgSU5UIFBSSU1BUlkgS0VZLCBpc19m bGFnIFNNQUxMSU5UKTsKK0NSRUFURSBJTkRFWCBpZHhfdGVzdF9pc19mbGFnIE9OIHRhYl93 aXRoX2ZsYWcgKGlzX2ZsYWcpOworCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgQ09V TlQoKikgRlJPTSB0YWJfd2l0aF9mbGFnCitXSEVSRQorCShpc19mbGFnIElTIE5VTEwgT1Ig aXNfZmxhZyA9IDApCisJQU5EIGlkIElOIChTRUxFQ1QgaWQgRlJPTSB0YWJfd2l0aF9mbGFn IFdIRVJFIGlkIElOICgyLCAzKSk7CitEUk9QIFRBQkxFIHRhYl93aXRoX2ZsYWc7CisKKy0t IEhBVklORyBjbGF1c2UKK2V4cGxhaW4gKGNvc3RzIG9mZikKK3NlbGVjdCBwLmIgZnJvbSBz aiBwIGpvaW4gc2ogcSBvbiBwLmEgPSBxLmEgZ3JvdXAgYnkgcC5iIGhhdmluZyBzdW0ocC5h KSA9IDE7CisKKy0tIHVwZGF0ZSBsYXRlcmFsIHJlZmVyZW5jZXMgYW5kIHJhbmdlIHRhYmxl IGVudHJ5IHJlZmVyZW5jZQorZXhwbGFpbiAodmVyYm9zZSwgY29zdHMgb2ZmKQorc2VsZWN0 IDEgZnJvbSAoc2VsZWN0IHguKiBmcm9tIHNqIHgsIHNqIHkgd2hlcmUgeC5hID0geS5hKSBx LAorICBsYXRlcmFsIGdlbmVyYXRlX3NlcmllcygxLCBxLmEpIGdzKGkpOworCitleHBsYWlu ICh2ZXJib3NlLCBjb3N0cyBvZmYpCitzZWxlY3QgMSBmcm9tIChzZWxlY3QgeS4qIGZyb20g c2ogeCwgc2ogeSB3aGVyZSB4LmEgPSB5LmEpIHEsCisgIGxhdGVyYWwgZ2VuZXJhdGVfc2Vy aWVzKDEsIHEuYSkgZ3MoaSk7CisKKy0tIFRlc3QgdGhhdCBhIG5vbi1FQy1kZXJpdmVkIGpv aW4gY2xhdXNlIGlzIHByb2Nlc3NlZCBjb3JyZWN0bHkuIFVzZSBhbgorLS0gb3V0ZXIgam9p biBzbyB0aGF0IHdlIGNhbid0IGZvcm0gYW4gRUMuCitleHBsYWluIChjb3N0cyBvZmYpIHNl bGVjdCAqIGZyb20gc2ogcCBqb2luIHNqIHEgb24gcC5hID0gcS5hCisgIGxlZnQgam9pbiBz aiByIG9uIHAuYSArIHEuYSA9IHIuYTsKKworLS0gRklYTUUgdGhpcyBjb25zdGFudCBmYWxz ZSBmaWx0ZXIgZG9lc24ndCBsb29rIGdvb2QuIFNob3VsZCB3ZSBtZXJnZQorLS0gZXF1aXZh bGVuY2UgY2xhc3Nlcz8KK2V4cGxhaW4gKGNvc3RzIG9mZikKK3NlbGVjdCAqIGZyb20gc2og cCwgc2ogcSB3aGVyZSBwLmEgPSBxLmEgYW5kIHAuYiA9IDEgYW5kIHEuYiA9IDI7CisKKy0t IENoZWNrIHRoYXQgYXR0cl9uZWVkZWQgaXMgdXBkYXRlZCBjb3JyZWN0bHkgYWZ0ZXIgc2Vs Zi1qb2luIHJlbW92YWwuIEluIHRoaXMKKy0tIHRlc3QsIHRoZSBqb2luIG9mIGoxIHdpdGgg ajIgaXMgcmVtb3ZlZC4gazEuYiBpcyByZXF1aXJlZCBhdCBlaXRoZXIgajEgb3IgajIuCist LSBJZiB0aGlzIGluZm8gaXMgbG9zdCwgam9pbiB0YXJnZXRsaXN0IGZvciAoazEsIGsyKSB3 aWxsIG5vdCBjb250YWluIGsxLmIuCistLSBVc2UgaW5kZXggc2NhbiBmb3IgazEgc28gdGhh dCB3ZSBkb24ndCBnZXQgJ2InIGZyb20gcGh5c2ljYWwgdGxpc3QgdXNlZCBmb3IKKy0tIHNl cXNjYW4uIEFsc28gZGlzYWJsZSByZW9yZGVyaW5nIG9mIGpvaW5zIGJlY2F1c2UgdGhpcyB0 ZXN0IGRlcGVuZHMgb24gYQorLS0gcGFydGljdWxhciBqb2luIHRyZWUuCitjcmVhdGUgdGFi bGUgc2sgKGEgaW50LCBiIGludCk7CitjcmVhdGUgaW5kZXggb24gc2soYSk7CitzZXQgam9p bl9jb2xsYXBzZV9saW1pdCB0byAxOworc2V0IGVuYWJsZV9zZXFzY2FuIHRvIG9mZjsKK2V4 cGxhaW4gKGNvc3RzIG9mZikgc2VsZWN0IDEgZnJvbQorCShzayBrMSBqb2luIHNrIGsyIG9u IGsxLmEgPSBrMi5hKQorCWpvaW4gKHNqIGoxIGpvaW4gc2ogajIgb24gajEuYSA9IGoyLmEp IG9uIGoxLmIgPSBrMS5iOworZXhwbGFpbiAoY29zdHMgb2ZmKSBzZWxlY3QgMSBmcm9tCisJ KHNrIGsxIGpvaW4gc2sgazIgb24gazEuYSA9IGsyLmEpCisJam9pbiAoc2ogajEgam9pbiBz aiBqMiBvbiBqMS5hID0gajIuYSkgb24gajIuYiA9IGsxLmI7CityZXNldCBqb2luX2NvbGxh cHNlX2xpbWl0OworcmVzZXQgZW5hYmxlX3NlcXNjYW47CisKKy0tIENoZWNrIHRoYXQgY2xh dXNlcyBmcm9tIHRoZSBqb2luIGZpbHRlciBsaXN0IGlzIG5vdCBsb3N0IG9uIHRoZSBzZWxm LWpvaW4gcmVtb3ZhbAorQ1JFQVRFIFRBQkxFIGVtcDEgKGlkIFNFUklBTCBQUklNQVJZIEtF WSBOT1QgTlVMTCwgY29kZSBpbnQpOworRVhQTEFJTiAoVkVSQk9TRSwgQ09TVFMgT0ZGKQor U0VMRUNUICogRlJPTSBlbXAxIGUxLCBlbXAxIGUyIFdIRVJFIGUxLmlkID0gZTIuaWQgQU5E IGUyLmNvZGUgPD4gZTEuY29kZTsKKworLS0gU2h1ZmZsZSBzZWxmLWpvaW5lZCByZWxhdGlv bnMuIE9ubHkgaW4gdGhlIGNhc2Ugb2YgaXRlcmF0aXZlIGRlbGV0aW9uCistLSBhdHRlbXB0 cyBleHBsYWlucyBvZiB0aGVzZSBxdWVyaWVzIHdpbGwgYmUgaWRlbnRpY2FsLgorQ1JFQVRF IFVOSVFVRSBJTkRFWCBPTiBlbXAxKChpZCppZCkpOworCitFWFBMQUlOIChDT1NUUyBPRkYp CitTRUxFQ1QgY291bnQoKikgRlJPTSBlbXAxIGMxLCBlbXAxIGMyLCBlbXAxIGMzCitXSEVS RSBjMS5pZD1jMi5pZCBBTkQgYzEuaWQqYzIuaWQ9YzMuaWQqYzMuaWQ7CisKK0VYUExBSU4g KENPU1RTIE9GRikKK1NFTEVDVCBjb3VudCgqKSBGUk9NIGVtcDEgYzEsIGVtcDEgYzIsIGVt cDEgYzMKK1dIRVJFIGMxLmlkPWMzLmlkIEFORCBjMS5pZCpjMy5pZD1jMi5pZCpjMi5pZDsK KworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUIGNvdW50KCopIEZST00gZW1wMSBjMSwg ZW1wMSBjMiwgZW1wMSBjMworV0hFUkUgYzMuaWQ9YzIuaWQgQU5EIGMzLmlkKmMyLmlkPWMx LmlkKmMxLmlkOworCistLSBDaGVjayB0aGUgdXNhZ2Ugb2YgYSBwYXJzZSB0cmVlIGJ5IHRo ZSBzZXQgb3BlcmF0aW9ucyAoYnVnICMxODE3MCkKK0VYUExBSU4gKENPU1RTIE9GRikKK1NF TEVDVCBjMS5jb2RlIEZST00gZW1wMSBjMSBMRUZUIEpPSU4gZW1wMSBjMiBPTiBjMS5pZCA9 IGMyLmlkCitXSEVSRSBjMi5pZCBJUyBOT1QgTlVMTAorRVhDRVBUIEFMTAorU0VMRUNUIGMz LmNvZGUgRlJPTSBlbXAxIGMzOworCistLSBDaGVjayB0aGF0IFNKRSByZW1vdmVzIHJlZmVy ZW5jZXMgZnJvbSBQSFZzIGNvcnJlY3RseQorZXhwbGFpbiAoY29zdHMgb2ZmKQorc2VsZWN0 ICogZnJvbSBlbXAxIHQxIGxlZnQgam9pbgorICAgIChzZWxlY3QgY29hbGVzY2UodDMuY29k ZSwgMSkgZnJvbSBlbXAxIHQyCisgICAgICAgIGxlZnQgam9pbiAoZW1wMSB0MyBqb2luIGVt cDEgdDQgb24gdDMuaWQgPSB0NC5pZCkKKyAgICAgICAgb24gdHJ1ZSkKK29uIHRydWU7CisK Ky0tIENoZWNrIHRoYXQgU0pFIHJlbW92ZXMgdGhlIHdob2xlIFBIVnMgY29ycmVjdGx5Citl eHBsYWluICh2ZXJib3NlLCBjb3N0cyBvZmYpCitzZWxlY3QgMSBmcm9tIGVtcDEgdDEgbGVm dCBqb2luCisgICAgKChzZWxlY3QgMSBhcyB4LCAqIGZyb20gZW1wMSB0MikgczEgaW5uZXIg am9pbgorICAgICAgICAoc2VsZWN0ICogZnJvbSBlbXAxIHQzKSBzMiBvbiBzMS5pZCA9IHMy LmlkKQorICAgIG9uIHRydWUKK3doZXJlIHMxLnggPSAxOworCistLSBDaGVjayB0aGF0IFBI VnMgZG8gbm90IGltcG9zZSBhbnkgY29uc3RyYWludHMgb24gcmVtb3Zpbmcgc2VsZiBqb2lu cworZXhwbGFpbiAodmVyYm9zZSwgY29zdHMgb2ZmKQorc2VsZWN0ICogZnJvbSBlbXAxIHQx IGpvaW4gZW1wMSB0MiBvbiB0MS5pZCA9IHQyLmlkIGxlZnQgam9pbgorICAgIGxhdGVyYWwg KHNlbGVjdCB0MS5pZCBhcyB0MWlkLCAqIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDEsMSkgdDMp IHMgb24gdHJ1ZTsKKworZXhwbGFpbiAodmVyYm9zZSwgY29zdHMgb2ZmKQorc2VsZWN0ICog ZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMSwxMCkgdDEoaWQpIGxlZnQgam9pbgorICAgIGxhdGVy YWwgKHNlbGVjdCB0MS5pZCBhcyB0MWlkLCB0Mi5pZCBmcm9tIGVtcDEgdDIgam9pbiBlbXAx IHQzIG9uIHQyLmlkID0gdDMuaWQpCitvbiB0cnVlOworCistLSBDaGVjayB0aGF0IFNKRSBy ZXBsYWNlcyBqb2luIGNsYXVzZXMgaW52b2x2aW5nIHRoZSByZW1vdmVkIHJlbCBjb3JyZWN0 bHkKK2V4cGxhaW4gKGNvc3RzIG9mZikKK3NlbGVjdCAqIGZyb20gZW1wMSB0MQorICAgaW5u ZXIgam9pbiBlbXAxIHQyIG9uIHQxLmlkID0gdDIuaWQKKyAgICBsZWZ0IGpvaW4gZW1wMSB0 MyBvbiB0MS5pZCA+IDEgYW5kIHQxLmlkIDwgMjsKKworLS0gQ2hlY2sgdGhhdCBTSkUgZG9l c24ndCByZXBsYWNlIHRoZSB0YXJnZXQgcmVsYXRpb24KK0VYUExBSU4gKENPU1RTIE9GRikK K1dJVEggdDEgQVMgKFNFTEVDVCAqIEZST00gZW1wMSkKK1VQREFURSBlbXAxIFNFVCBjb2Rl ID0gdDEuY29kZSArIDEgRlJPTSB0MQorV0hFUkUgdDEuaWQgPSBlbXAxLmlkIFJFVFVSTklO RyBlbXAxLmlkLCBlbXAxLmNvZGUsIHQxLmNvZGU7CisKK0lOU0VSVCBJTlRPIGVtcDEgVkFM VUVTICgxLCAxKSwgKDIsIDEpOworCitXSVRIIHQxIEFTIChTRUxFQ1QgKiBGUk9NIGVtcDEp CitVUERBVEUgZW1wMSBTRVQgY29kZSA9IHQxLmNvZGUgKyAxIEZST00gdDEKK1dIRVJFIHQx LmlkID0gZW1wMS5pZCBSRVRVUk5JTkcgZW1wMS5pZCwgZW1wMS5jb2RlLCB0MS5jb2RlOwor CitUUlVOQ0FURSBlbXAxOworCitFWFBMQUlOIChDT1NUUyBPRkYpCitVUERBVEUgc2ogc3Eg U0VUIGIgPSAxIEZST00gc2ogYXMgc3ogV0hFUkUgc3EuYSA9IHN6LmE7CisKK0NSRUFURSBS VUxFIHNqX2RlbF9ydWxlIEFTIE9OIERFTEVURSBUTyBzagorICBETyBJTlNURUFECisgICAg VVBEQVRFIHNqIFNFVCBhID0gMSBXSEVSRSBhID0gb2xkLmE7CitFWFBMQUlOIChDT1NUUyBP RkYpIERFTEVURSBGUk9NIHNqOworRFJPUCBSVUxFIHNqX2RlbF9ydWxlIE9OIHNqIENBU0NB REU7CisKKy0tIENoZWNrIHRoYXQgU0pFIGRvZXMgbm90IG1pc3Rha2VubHkgb21pdCBxdWFs IGNsYXVzZXMgKGJ1ZyAjMTgxODcpCitpbnNlcnQgaW50byBlbXAxIHZhbHVlcyAoMSwgMSk7 CitleHBsYWluIChjb3N0cyBvZmYpCitzZWxlY3QgMSBmcm9tIGVtcDEgZnVsbCBqb2luCisg ICAgKHNlbGVjdCAqIGZyb20gZW1wMSB0MSBqb2luCisgICAgICAgIGVtcDEgdDIgam9pbiBl bXAxIHQzIG9uIHQyLmlkID0gdDMuaWQKKyAgICAgICAgb24gdHJ1ZQorICAgIHdoZXJlIGZh bHNlKSBzIG9uIHRydWUKK3doZXJlIGZhbHNlOworc2VsZWN0IDEgZnJvbSBlbXAxIGZ1bGwg am9pbgorICAgIChzZWxlY3QgKiBmcm9tIGVtcDEgdDEgam9pbgorICAgICAgICBlbXAxIHQy IGpvaW4gZW1wMSB0MyBvbiB0Mi5pZCA9IHQzLmlkCisgICAgICAgIG9uIHRydWUKKyAgICB3 aGVyZSBmYWxzZSkgcyBvbiB0cnVlCit3aGVyZSBmYWxzZTsKKworLS0gQ2hlY2sgdGhhdCBT SkUgZG9lcyBub3QgbWlzdGFrZW5seSByZS11c2Uga25vd2xlZGdlIG9mIHJlbGF0aW9uIHVu aXF1ZW5lc3MKKy0tIG1hZGUgd2l0aCBkaWZmZXJlbnQgc2V0IG9mIHF1YWxzCitpbnNlcnQg aW50byBlbXAxIHZhbHVlcyAoMiwgMSk7CitleHBsYWluIChjb3N0cyBvZmYpCitzZWxlY3Qg KiBmcm9tIGVtcDEgdDEgd2hlcmUgZXhpc3RzIChzZWxlY3QgKiBmcm9tIGVtcDEgdDIKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIHQyLmlkID0gdDEuY29k ZSBhbmQgdDIuY29kZSA+IDApOworc2VsZWN0ICogZnJvbSBlbXAxIHQxIHdoZXJlIGV4aXN0 cyAoc2VsZWN0ICogZnJvbSBlbXAxIHQyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB3aGVyZSB0Mi5pZCA9IHQxLmNvZGUgYW5kIHQyLmNvZGUgPiAwKTsKKworLS0g V2UgY2FuIHJlbW92ZSB0aGUgam9pbiBldmVuIGlmIHdlIGZpbmQgdGhlIGpvaW4gY2FuJ3Qg ZHVwbGljYXRlIHJvd3MgYW5kCistLSB0aGUgYmFzZSBxdWFscyBvZiBlYWNoIHNpZGUgYXJl IGRpZmZlcmVudC4gIEluIHRoZSBmb2xsb3dpbmcgY2FzZSB3ZSBlbmQgdXAKKy0tIG1vdmlu ZyBxdWFscyBvdmVyIHRvIHMxIHRvIG1ha2UgaXQgc28gaXQgY2FuJ3QgbWF0Y2ggYW55IHJv d3MuCitjcmVhdGUgdGFibGUgc2woYSBpbnQsIGIgaW50LCBjIGludCk7CitjcmVhdGUgdW5p cXVlIGluZGV4IG9uIHNsKGEsIGIpOwordmFjdXVtIGFuYWx5emUgc2w7CisKKy0tIEJvdGgg c2lkZXMgYXJlIHVuaXF1ZSwgYnV0IGJhc2UgcXVhbHMgYXJlIGRpZmZlcmVudAorZXhwbGFp biAoY29zdHMgb2ZmKQorc2VsZWN0ICogZnJvbSBzbCB0MSwgc2wgdDIgd2hlcmUgdDEuYSA9 IHQyLmEgYW5kIHQxLmIgPSAxIGFuZCB0Mi5iID0gMjsKKworLS0gQ2hlY2sgTnVsbFRlc3Qg aW4gYmFzZXJlc3RyaWN0aW5mbyBsaXN0CitleHBsYWluIChjb3N0cyBvZmYpCitzZWxlY3Qg KiBmcm9tIHNsIHQxLCBzbCB0Mgord2hlcmUgdDEuYSA9IHQyLmEgYW5kIHQxLmIgPSAxIGFu ZCB0Mi5iID0gMgorICBhbmQgdDEuYyBJUyBOT1QgTlVMTCBhbmQgdDIuYyBJUyBOT1QgTlVM TAorICBhbmQgdDIuYiBJUyBOT1QgTlVMTCBhbmQgdDEuYiBJUyBOT1QgTlVMTAorICBhbmQg dDEuYSBJUyBOT1QgTlVMTCBhbmQgdDIuYSBJUyBOT1QgTlVMTDsKK2V4cGxhaW4gKHZlcmJv c2UsIGNvc3RzIG9mZikKK3NlbGVjdCAqIGZyb20gc2wgdDEsIHNsIHQyCit3aGVyZSB0MS5i ID0gdDIuYiBhbmQgdDIuYSA9IDMgYW5kIHQxLmEgPSAzCisgIGFuZCB0MS5jIElTIE5PVCBO VUxMIGFuZCB0Mi5jIElTIE5PVCBOVUxMCisgIGFuZCB0Mi5iIElTIE5PVCBOVUxMIGFuZCB0 MS5iIElTIE5PVCBOVUxMCisgIGFuZCB0MS5hIElTIE5PVCBOVUxMIGFuZCB0Mi5hIElTIE5P VCBOVUxMOworCistLSBKb2luIHF1YWwgaXNuJ3QgbWVyZ2Vqb2luYWJsZSwgYnV0IGlubmVy IGlzIHVuaXF1ZS4KK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCBuMi5hIEZST00gc2og bjEsIHNqIG4yIFdIRVJFIG4xLmEgPD4gbjIuYSBBTkQgbjIuYSA9IDE7CisKK0VYUExBSU4g KENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00KKyhTRUxFQ1QgbjIuYSBGUk9NIHNqIG4xLCBz aiBuMiBXSEVSRSBuMS5hIDw+IG4yLmEpIHEwLCBzbAorV0hFUkUgcTAuYSA9IDE7CisKKy0t IENoZWNrIG9wdGltaXphdGlvbiBkaXNhYmxpbmcgaWYgaXQgd2lsbCB2aW9sYXRlIHNwZWNp YWwgam9pbiBjb25kaXRpb25zLgorLS0gVHdvIGlkZW50aWNhbCBqb2luZWQgcmVsYXRpb25z IHNhdGlzZmllcyBzZWxmIGpvaW4gcmVtb3ZhbCBjb25kaXRpb25zIGJ1dAorLS0gc3RheSBp biBkaWZmZXJlbnQgc3BlY2lhbCBqb2luIGluZm9zLgorQ1JFQVRFIFRBQkxFIHNqX3QxIChp ZCBzZXJpYWwsIGEgaW50KTsKK0NSRUFURSBUQUJMRSBzal90MiAoaWQgc2VyaWFsLCBhIGlu dCk7CitDUkVBVEUgVEFCTEUgc2pfdDMgKGlkIHNlcmlhbCwgYSBpbnQpOworQ1JFQVRFIFRB QkxFIHNqX3Q0IChpZCBzZXJpYWwsIGEgaW50KTsKKworQ1JFQVRFIFVOSVFVRSBJTkRFWCBP TiBzal90MyBVU0lORyBidHJlZSAoYSxpZCk7CitDUkVBVEUgVU5JUVVFIElOREVYIE9OIHNq X3QyIFVTSU5HIGJ0cmVlIChpZCk7CisKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAq IEZST00gc2pfdDEKK0pPSU4gKAorCVNFTEVDVCBzal90Mi5pZCBBUyBpZCBGUk9NIHNqX3Qy CisJV0hFUkUgRVhJU1RTCisJCSgKKwkJU0VMRUNUIFRSVUUgRlJPTSBzal90Myxzal90NCBX SEVSRSBzal90My5hID0gMSBBTkQgc2pfdDMuaWQgPSBzal90Mi5pZAorCQkpCisJKSB0MnQz dDQKK09OIHNqX3QxLmlkID0gdDJ0M3Q0LmlkCitKT0lOICgKKwlTRUxFQ1Qgc2pfdDIuaWQg QVMgaWQgRlJPTSBzal90MgorCVdIRVJFIEVYSVNUUworCQkoCisJCVNFTEVDVCBUUlVFIEZS T00gc2pfdDMsc2pfdDQgV0hFUkUgc2pfdDMuYSA9IDEgQU5EIHNqX3QzLmlkID0gc2pfdDIu aWQKKwkJKQorCSkgX3QydDN0NAorT04gc2pfdDEuaWQgPSBfdDJ0M3Q0LmlkOworCistLQor LS0gVGVzdCBSb3dNYXJrcy1yZWxhdGVkIGNvZGUKKy0tCisKKy0tIEJvdGggc2lkZXMgaGF2 ZSBleHBsaWNpdCBMb2NrUm93cyBtYXJrcworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNU IGExLmEgRlJPTSBzaiBhMSxzaiBhMiBXSEVSRSAoYTEuYT1hMi5hKSBGT1IgVVBEQVRFOwor CityZXNldCBlbmFibGVfaGFzaGpvaW47CityZXNldCBlbmFibGVfbWVyZ2Vqb2luOworCiAt LQogLS0gVGVzdCBoaW50cyBnaXZlbiBvbiBpbmNvcnJlY3QgY29sdW1uIHJlZmVyZW5jZXMg YXJlIHVzZWZ1bAogLS0KZGlmZiAtLWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVm cy5saXN0IGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggYTI2NDRh MmU2NS4uYTczNGJhNTA5OCAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVk ZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTM5 NCw2ICszOTQsNyBAQCBDYXRhbG9nSWQKIENhdGFsb2dJZE1hcEVudHJ5CiBDYXRhbG9nSW5k ZXhTdGF0ZQogQ2hhbmdlVmFyTm9kZXNfY29udGV4dAorUmVwbGFjZVZhcm5vQ29udGV4dAog Q2hlY2tQb2ludAogQ2hlY2tQb2ludFN0bXQKIENoZWNrcG9pbnRTdGF0c0RhdGEKQEAgLTI1 OTIsNiArMjU5Myw3IEBAIFNlZW5SZWxzRW50cnkKIFNlbGVjdExpbWl0CiBTZWxlY3RTdG10 CiBTZWxlY3Rpdml0eQorU2VsZkpvaW5DYW5kaWRhdGUKIFNlbVRQYWRkZWQKIFNlbWlBbnRp Sm9pbkZhY3RvcnMKIFNlcVNjYW4KQEAgLTQwNDgsNiArNDA1MCw3IEBAIHVuaWNvZGVTdHls ZUNvbHVtbkZvcm1hdAogdW5pY29kZVN0eWxlRm9ybWF0CiB1bmljb2RlU3R5bGVSb3dGb3Jt YXQKIHVuaWNvZGVfbGluZXN0eWxlCitVbmlxdWVSZWxJbmZvCiB1bml0X2NvbnZlcnNpb24K IHVubG9nZ2VkX3JlbGF0aW9uX2VudHJ5CiB1dGZfbG9jYWxfY29udmVyc2lvbl9mdW5jCi0t IAoyLjM5LjUKCg== --------------HA1d6WRm8WC0Ap70uxmp2y28--