Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wA2yb-0020xd-24 for pgpool-hackers@arkaria.postgresql.org; Tue, 07 Apr 2026 09:44:06 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wA2ya-00GSXT-0b for pgpool-hackers@arkaria.postgresql.org; Tue, 07 Apr 2026 09:44:04 +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.96) (envelope-from ) id 1wA2yZ-00GSXL-1W for pgpool-hackers@lists.postgresql.org; Tue, 07 Apr 2026 09:44:04 +0000 Received: from meldrar.postgresql.org ([2a02:c0:301:0:ffff::31]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.98.2) (envelope-from ) id 1wA2yX-000000010em-0oM4 for pgpool-hackers@lists.postgresql.org; Tue, 07 Apr 2026 09:44:03 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=postgresql.org; s=20171124; h=Content-Transfer-Encoding:Content-Type: Mime-Version:References:In-Reply-To:From:Subject:Cc:To:Message-Id:Date:Sender :Reply-To:Content-ID:Content-Description; bh=AYestfPjRhJm1JxI6I2h0Wsc62/PI6F9jTuHZuBMqeM=; b=qws68n2ah61W4zxOZfkyaTLS2d OZETgxQpYIwM95+LoKrCEvYqrhmdO0ONHCAUVdZMXLEeHItbhZ0ktNsqaKNgXD9O3wGedDrWhKdsz aZKGGNARu3TpYtW1ngDpAg4rVwEc+LdHNzR/s9YgzxhFXrAO0FxSv/nKK8AHSRJbJbtDJa7ZW1+A5 DcmYIJCotHUjw8pik5pDHUuGZfP66igAEgk3UxhPmko6ADXgR63v85NG89KytB947F+MR/VQ2Bkw+ BX/+Lhph/gwSGqRGLDJUXq4p1NEjPczsbgw0SkNH9AUvUUM7friCCarXh9401BW3dWX13SVK2l21e hfkUrgqw==; Received: from [2409:11:4120:300:7b2:58f5:d591:99e6] (helo=localhost) by meldrar.postgresql.org with esmtpsa (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wA2yR-002PHx-2s; Tue, 07 Apr 2026 09:44:00 +0000 Date: Tue, 07 Apr 2026 18:43:48 +0900 (JST) Message-Id: <20260407.184348.71921003141910652.ishii@postgresql.org> To: nadav@tailorbrands.com Cc: pgpool-hackers@lists.postgresql.org Subject: Re: Proposal: Recent mutated table tracking in memory From: Tatsuo Ishii In-Reply-To: <20260407.181009.1762204033074164841.ishii@postgresql.org> References: <20260407.090802.1335576118037412011.ishii@postgresql.org> <20260407.181009.1762204033074164841.ishii@postgresql.org> X-Mailer: Mew version 6.8 on Emacs 29.3 Mime-Version: 1.0 Content-Type: Multipart/Mixed; boundary="--Next_Part(Tue_Apr__7_18_43_48_2026_405)--" Content-Transfer-Encoding: 7bit X-Host-Lookup-Failed: Reverse DNS lookup failed for 2409:11:4120:300:7b2:58f5:d591:99e6 (failed) List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk ----Next_Part(Tue_Apr__7_18_43_48_2026_405)-- Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit Hi Nadav, >> Yes I ran into it during the work on the feature. Let me know if you want >> me to separately submit it. > > Thank you for the offering, but I have already pushed the part. > > https://git.postgresql.org/gitweb/?p=pgpool2.git;a=commit;h=24755985692be577bdcf487ebddb2c2ff6116661 I have modified your patch by just running pgindent (plus subtle addition to typedefs.list). No detailed code review is done yet. Also I created a commit message which tries to summarize the feature. Please let me know any correction and enhancement. Based on this, I will start more detailed review. It will take a while. Regards, -- Tatsuo Ishii SRA OSS K.K. English: http://www.sraoss.co.jp/index_en/ Japanese:http://www.sraoss.co.jp ----Next_Part(Tue_Apr__7_18_43_48_2026_405)-- Content-Type: Application/Octet-Stream Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="v1-0001-Feature-load-balancing-control-by-table-tracking.patch" RnJvbSA5MDA2NjEyZTcyMGEwMzFmOGRlOTNiYmU3ZjBkMzE0MDYxZGJkMjhiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUYXRzdW8gSXNoaWkgPGlzaGlpQHBvc3RncmVzcWwub3JnPgpE YXRlOiBUdWUsIDcgQXByIDIwMjYgMTg6Mjc6NDMgKzA5MDAKU3ViamVjdDogW1BBVENIIHYxXSBG ZWF0dXJlOiBsb2FkIGJhbGFuY2luZyBjb250cm9sIGJ5IHRhYmxlIHRyYWNraW5nLgoKUHJldmVu dCByb3V0aW5nIG9mIHJlYWQgb25seSBxdWVyaWVzIHRvIHN0YW5kYnkgaWYgcmVwbGljYXRpb24g ZGVsYXkKb2YgdGFibGVzIHVzZWQgaW4gdGhlIHF1ZXJ5IGV4Y2VlZHMgY2VydGFpbiBhbW91bnQg b2YgdmFsdWUKY29sbGVjdGVkIGJ5IHN0cmVhbWluZyByZXBsaWNhdGlvbiBwcm9jZXNzLiBUbyBl bmFibGUgdGhpcyBmZWF0dXJlLApzZXQgZGlzYWJsZV9sb2FkX2JhbGFuY2Vfb25fd3JpdGUgdG8g ZG1sX2FkYXB0aXZlX2dsb2JhbC4KCkluIHRoaXMgbW9kZSwgd2hlbiB0YWJsZXMgYXJlIG1vZGlm aWVkIGJ5CklOU0VSVC9VUERBVEUvREVMRVRFL1RSVU5DQVRFL01FUkdFL2RhdGEgbW9kaWZpY2F0 aW9uIFdJVEgsIGZvcgpjZXJ0YWluIHBlb3Jpb2QgU0VMRUNUcyB1c2luZyB0aGUgdGFibGVzIGFy ZSBub3QgbG9hZCBiYWxhbmNlZDoKaS5lLiByb3V0ZWQgdG8gdGhlIHByaW1hcnkgUG9zdGdyZVNR TCBzZXJ2ZXIgdG8gYXZvaWQgdGhlIGRhdGEKc3RhbGVuZXNzIGJ5IHJlcGxpY2F0aW9uIGRlbGF5 LgoKVW5saWtlIGRtbF9hZGFwdGl2ZSBtb2RlLCBhbnkgdGFibGUgbW9kaWZpY2F0aW9ucyBkZWNy aWJlZCBhYm92ZSBhcmUKZGV0ZWN0ZWQgZXZlbiB0aGV5IGhhcHBuIGluIG90aGVyIHNlc3Npb25z IChpbiBkbWxfYWRhcHRpdmUsIHRhYmxlCm1vZGlmaWNhdGlvbnMgYXJlIG9ubHkgZGV0ZWN0ZWQg aW4gdGhlIHNhbWUgdHJhbnNhY3Rpb24pLiBOb3RlLApob3dldmVyLCB5b3UgY2Fubm90IHVzZSBk bWxfYWRhcHRpdmVfb2JqZWN0X3JlbGF0aW9uc2hpcF9saXN0IHRvIHRyYWNrCmRlcGVuZGVuY3kg YW1vbmcgdGFibGUgYW5kIG90aGVyIG9iamVjdHMuCgpCZXNpZGVzIGRtbF9hZGFwdGl2ZV9nbG9i YWwsIHRoZXJlIGFyZSBzb21lIHR1bmluZyBrbm9icyBmb3IgdGhlCmZlYXR1cmU6CgotIHRyYWNr X3RhYmxlX211dGF0aW9uX3R0bF9mYWN0b3IKICBQYXJhbWV0ZXIgdG8gY2FsY3VsYXRlIFRUTCBv ZiBlYWNoIHRyYWNraW5nIGRhdGEuCgotIHRyYWNrX3RhYmxlX211dGF0aW9uX21heF9zdGFsZW5l c3MKICBNYXhpbXVtIGR1cmF0aW9uIGluIG1pbGxpc2Vjb25kcyB0aGF0IGEgc2luZ2xlIHRhYmxl IGVudHJ5IGNhbgogIGNvbnRpbnVvdXNseSBmb3JjZSBxdWVyaWVzIHRvIHByaW1hcnkuCgotIHRy YWNrX3RhYmxlX211dGF0aW9uX2NvbGRfc3RhcnRfZHVyYXRpb24KICBEdXJhdGlvbiBpbiBtaWxs aXNlY29uZHMgdG8gcm91dGUgYWxsIHF1ZXJpZXMgdG8gcHJpbWFyeSBhZnRlciBhCiAgY2hpbGQg cHJvY2VzcyBzdGFydHMuCgotIHRyYWNrX3RhYmxlX211dGF0aW9uX3RhYmxlX2J1Y2tldHMKICBO dW1iZXIgb2YgaGFzaCBidWNrZXRzIGZvciB0aGUgdHJhY2sgdGFibGUgbXV0YXRpb24gaGFzaCB0 YWJsZS4KCi0gdHJhY2tfdGFibGVfbXV0YXRpb25fdGFibGVfc2l6ZQogIE1heGltdW0gbnVtYmVy IG9mIHRhYmxlcyB0aGF0IGNhbiBiZSB0cmFja2VkIHNpbXVsdGFuZW91c2x5IGluIHRoZQogIHRy YWNrIHRhYmxlIG11dGF0aW9uLgoKLSB0cmFja190YWJsZV9tdXRhdGlvbl9xdWVyeV9idWNrZXRz CiAgTnVtYmVyIG9mIGhhc2ggYnVja2V0cyBmb3IgdGhlIHF1ZXJ5IHBhcnNlIGNhY2hlLgoKLSB0 cmFja190YWJsZV9tdXRhdGlvbl9xdWVyeV9wYXJzZV9jYWNoZV9zaXplCiAgTWF4aW11bSBudW1i ZXIgb2YgcXVlcnkgcGFyc2UgcmVzdWx0cyB0byBjYWNoZS4KCkF1dGhvcjogTmFkYXYgU2hhdHog PG5hZGF2QHRhaWxvcmJyYW5kcy5jb20+ClJldmlld2VkLWJ5OiBUYXRzdW8gSXNoaWkgPGlzaGlp QHBvc3RncmVzcWwub3JnPgpEaXNjdXNzaW9uOiBodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9t ZXNzYWdlLWlkL2ZsYXQvMjAyNjA0MDcuMTgxMDA5LjE3NjIyMDQwMzMwNzQxNjQ4NDEuaXNoaWkl NDBwb3N0Z3Jlc3FsLm9yZyM1OGMxMzljMWE3ZjhkNTU2Mjg2NTkyMWQwNzMzNjY3YgotLS0KIGRv Yy9zcmMvc2dtbC9sb2FkYmFsYW5jZS5zZ21sICAgICAgICAgICAgICAgICB8ICAzMzQgKysrKwog c3JjL01ha2VmaWxlLmFtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMSArCiBz cmMvY29uZmlnL3Bvb2xfY29uZmlnX3ZhcmlhYmxlcy5jICAgICAgICAgICAgfCAgIDkwICsKIHNy Yy9jb250ZXh0L3Bvb2xfcXVlcnlfY29udGV4dC5jICAgICAgICAgICAgICB8ICAyMzUgKystCiBz cmMvY29udGV4dC9wb29sX3Nlc3Npb25fY29udGV4dC5jICAgICAgICAgICAgfCAgIDE1ICstCiBz cmMvaW5jbHVkZS9wb29sLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA0ICstCiBz cmMvaW5jbHVkZS9wb29sX2NvbmZpZy5oICAgICAgICAgICAgICAgICAgICAgfCAgIDI4ICstCiBz cmMvaW5jbHVkZS91dGlscy9wb29sX3RyYWNrX3RhYmxlX211dGF0aW9uLmggfCAgMjQ3ICsrKwog c3JjL21haW4vcGdwb29sX21haW4uYyAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyOSArLQog c3JjL3Byb3RvY29sL0NvbW1hbmRDb21wbGV0ZS5jICAgICAgICAgICAgICAgIHwgICAyOCArCiBz cmMvcHJvdG9jb2wvY2hpbGQuYyAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA4ICsKIHNy Yy9wcm90b2NvbC9wb29sX3Byb3RvX21vZHVsZXMuYyAgICAgICAgICAgICB8ICAgIDYgKy0KIHNy Yy9zYW1wbGUvcGdwb29sLmNvbmYuc2FtcGxlLXN0cmVhbSAgICAgICAgICB8ICAgNTYgKwogc3Jj L3N0cmVhbWluZ19yZXBsaWNhdGlvbi9wb29sX3dvcmtlcl9jaGlsZC5jIHwgICAyNCArCiBzcmMv dGVzdC9yZWdyZXNzaW9uL2xpYnMuc2ggICAgICAgICAgICAgICAgICAgfCAgICAyICsKIC4uLi90 ZXN0cy8wNDIudHJhY2tfdGFibGVfbXV0YXRpb24vdGVzdC5zaCAgICB8ICAzNTQgKysrKwogLi4u LzA0My50cmFja190YWJsZV9tdXRhdGlvbl93YXRjaGRvZy90ZXN0LnNoIHwgIDE4NCArKysKIHNy Yy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0ICAgICAgICAgICAgICB8ICAgIDYgKwogc3Jj L3V0aWxzL3Bvb2xfdHJhY2tfdGFibGVfbXV0YXRpb24uYyAgICAgICAgIHwgMTQ1MCArKysrKysr KysrKysrKysrKwogMTkgZmlsZXMgY2hhbmdlZCwgMzA4MCBpbnNlcnRpb25zKCspLCAyMSBkZWxl dGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvaW5jbHVkZS91dGlscy9wb29sX3RyYWNr X3RhYmxlX211dGF0aW9uLmgKIGNyZWF0ZSBtb2RlIDEwMDc1NSBzcmMvdGVzdC9yZWdyZXNzaW9u L3Rlc3RzLzA0Mi50cmFja190YWJsZV9tdXRhdGlvbi90ZXN0LnNoCiBjcmVhdGUgbW9kZSAxMDA3 NTUgc3JjL3Rlc3QvcmVncmVzc2lvbi90ZXN0cy8wNDMudHJhY2tfdGFibGVfbXV0YXRpb25fd2F0 Y2hkb2cvdGVzdC5zaAogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy91dGlscy9wb29sX3RyYWNrX3Rh YmxlX211dGF0aW9uLmMKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvbG9hZGJhbGFuY2Uuc2dt bCBiL2RvYy9zcmMvc2dtbC9sb2FkYmFsYW5jZS5zZ21sCmluZGV4IDllMWU3YjM5Yi4uNzM4NGNl ODFhIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvbG9hZGJhbGFuY2Uuc2dtbAorKysgYi9kb2Mv c3JjL3NnbWwvbG9hZGJhbGFuY2Uuc2dtbApAQCAtMTExMCw2ICsxMTEwLDE4IEBAIGFwcF9uYW1l X3JlZGlyZWN0X3ByZWZlcmVuY2VfbGlzdCAmZ3Q7IGRhdGFiYXNlX3JlZGlyZWN0X3ByZWZlcmVu Y2VfbGlzdCAmZ3Q7IHVzCiAJCURlcGVuZGVudCBmdW5jdGlvbnMsIHRyaWdnZXJzLCBhbmQgdmll d3Mgb24gdGhlIHRhYmxlcyBjYW4gYmUgY29uZmlndXJlZAogCQl1c2luZyA8eHJlZiBsaW5rZW5k PSJndWMtZG1sLWFkYXB0aXZlLW9iamVjdC1yZWxhdGlvbnNoaXAtbGlzdCI+CiAgICAgIDwvcGFy YT4KKworICAgICA8cGFyYT4KKwkJSWYgdGhpcyBwYXJhbWV0ZXIgaXMgc2V0IHRvIDx2YXJuYW1l PmRtbF9hZGFwdGl2ZV9nbG9iYWw8L3Zhcm5hbWU+LAorCQk8cHJvZHVjdG5hbWU+UGdwb29sLUlJ PC8+IGJlaGF2ZXMgbGlrZSA8dmFybmFtZT5kbWxfYWRhcHRpdmU8L3Zhcm5hbWU+CisJCShwZXIt dHJhbnNhY3Rpb24gd3JpdGUgdHJhY2tpbmcpIGFuZCBhZGRpdGlvbmFsbHkgdXNlcyBzaGFyZWQg bWVtb3J5IHRvIHRyYWNrCisJCXJlY2VudGx5IHdyaXR0ZW4gdGFibGVzIGFjcm9zcyBhbGwgc2Vz c2lvbnMgY2x1c3Rlci13aWRlLiBXaGVuIGEgdGFibGUgaXMKKwkJd3JpdHRlbiBpbiBhbnkgc2Vz c2lvbiwgc3Vic2VxdWVudCByZWFkcyBvZiB0aGF0IHRhYmxlIGZyb20gYW55IHNlc3Npb24gYXJl CisJCXJvdXRlZCB0byBwcmltYXJ5IHVudGlsIGEgVFRMIChiYXNlZCBvbiBtZWFzdXJlZCByZXBs aWNhdGlvbiBkZWxheSkgZXhwaXJlcy4KKwkJVGhpcyBwcmV2ZW50cyBzdGFsZSByZWFkcyBhZnRl ciB3cml0ZXMgZXZlbiBhY3Jvc3MgZGlmZmVyZW50IGNvbm5lY3Rpb25zLgorCQlTZWUgPHhyZWYg bGlua2VuZD0icnVudGltZS1jb25maWctdGFibGUtbXV0YXRpb24tbWFwIj4gZm9yIHRoZSBzdWIt cGFyYW1ldGVycworCQl0aGF0IGNvbnRyb2wgdGhlIHNoYXJlZC1tZW1vcnkgdHJhY2tpbmcgYmVo YXZpb3IuCisgICAgIDwvcGFyYT4KICAgICA8L2xpc3RpdGVtPgogICAgPC92YXJsaXN0ZW50cnk+ CiAKQEAgLTExOTUsNCArMTIwNywzMjYgQEAgZG1sX2FkYXB0aXZlX29iamVjdF9yZWxhdGlvbnNo aXBfbGlzdCA9ICd0YWJsZV8xOnRhYmxlXzInCiAKICAgPC92YXJpYWJsZWxpc3Q+CiAgPC9zZWN0 Mj4KKworIDxzZWN0MiBpZD0icnVudGltZS1jb25maWctdGFibGUtbXV0YXRpb24tbWFwIj4KKyAg PHRpdGxlPlRhYmxlIE11dGF0aW9uIE1hcCBDb25maWd1cmF0aW9uIChMYWdsZXNzIFJlcGxpY2Eg UmVhZHMpPC90aXRsZT4KKworICA8cGFyYT4KKyAgIFRoZXNlIHBhcmFtZXRlcnMgY29uZmlndXJl IHRoZSB0cmFjayB0YWJsZSBtdXRhdGlvbiBmZWF0dXJlLCB3aGljaCBpcyBhY3RpdmF0ZWQgYnkg c2V0dGluZworICAgPHhyZWYgbGlua2VuZD0iZ3VjLWRpc2FibGUtbG9hZC1iYWxhbmNlLW9uLXdy aXRlIj4gdG8gPGxpdGVyYWw+ZG1sX2FkYXB0aXZlX2dsb2JhbDwvbGl0ZXJhbD4uCisgICBUaGUg ZmVhdHVyZSB0cmFja3MgcmVjZW50bHkgd3JpdHRlbiB0YWJsZXMgdG8gcHJldmVudCBzdGFsZSBy ZWFkcyBmcm9tIHJlcGxpY2Egbm9kZXMgZHVyaW5nCisgICByZXBsaWNhdGlvbiBsYWcsIGltcGxl bWVudGluZyB0aGUgImxhZ2xlc3MiIGFyY2hpdGVjdHVyZSBwYXR0ZXJuIGZvciBkaXN0cmlidXRl ZCBzeXN0ZW1zCisgICB3aXRoIHJlYWQgcmVwbGljYXMuCisgIDwvcGFyYT4KKworICA8cGFyYT4K KyAgIFdoZW4gYSB0YWJsZSBpcyBtb2RpZmllZCAoSU5TRVJUL1VQREFURS9ERUxFVEUpLCBpdCBp cyBtYXJrZWQgYXMgInN0YWxlIiBmb3IgYSBUVEwgcGVyaW9kCisgICAoPGxpdGVyYWw+cmVwbGlj YXRpb25fZGVsYXkgKiB0cmFja190YWJsZV9tdXRhdGlvbl90dGxfZmFjdG9yPC9saXRlcmFsPiku IEFueSBTRUxFQ1QgcXVlcmllcyBvbiBzdGFsZSB0YWJsZXMgYXJlIHJvdXRlZAorICAgdG8gdGhl IHByaW1hcnkgbm9kZSBpbnN0ZWFkIG9mIHJlcGxpY2FzLCBlbnN1cmluZyByZWFkLWFmdGVyLXdy aXRlIGNvbnNpc3RlbmN5LgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBUaGlzIGZlYXR1cmUg cmVxdWlyZXMgdGltZS1iYXNlZCByZXBsaWNhdGlvbiBkZWxheSBtb25pdG9yaW5nLiBUaGlzIGNh biBiZSBwcm92aWRlZCBieSBlaXRoZXIKKyAgIDx4cmVmIGxpbmtlbmQ9Imd1Yy1yZXBsaWNhdGlv bi1kZWxheS1zb3VyY2UtY21kIj4gKGV4dGVybmFsIGNvbW1hbmQgbW9kZSkgb3IgYnkgc2V0dGlu ZworICAgPHhyZWYgbGlua2VuZD0iZ3VjLWRlbGF5LXRocmVzaG9sZC1ieS10aW1lIj4gKHdoaWNo IHVzZXMgPGxpdGVyYWw+cGdfc3RhdF9yZXBsaWNhdGlvbi5yZXBsYXlfbGFnPC9saXRlcmFsPgor ICAgZnJvbSBQb3N0Z3JlU1FMIDEwKykuIEF0IGxlYXN0IG9uZSBvZiB0aGVzZSBtdXN0IGJlIGNv bmZpZ3VyZWQgZm9yIHRoZSBUVEwgY2FsY3VsYXRpb24gdG8gd29yay4KKyAgPC9wYXJhPgorCisg IDx3YXJuaW5nPgorICAgPHBhcmE+CisgICAgRW5hYmxpbmcgPGxpdGVyYWw+ZG1sX2FkYXB0aXZl X2dsb2JhbDwvbGl0ZXJhbD4gaW5jcmVhc2VzIHNoYXJlZCBtZW1vcnkgY29uc3VtcHRpb24uIFdp dGggZGVmYXVsdCBzZXR0aW5ncywKKyAgICB0aGUgZmVhdHVyZSByZXF1aXJlcyBhcHByb3hpbWF0 ZWx5IDYuNCBNQiBvZiBzaGFyZWQgbWVtb3J5ICgwLjEgTUIgZm9yIHRhYmxlIHRyYWNraW5nICsg Ni4zIE1CIGZvciBxdWVyeSBjYWNoZSkuCisgICAgTWVtb3J5IHVzYWdlIHNjYWxlcyB3aXRoIGNv bmZpZ3VyYXRpb24gcGFyYW1ldGVyczoKKyAgIDwvcGFyYT4KKyAgIDxpdGVtaXplZGxpc3Q+Cisg ICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIFRhYmxlIHRyYWNraW5nOiA8bGl0ZXJh bD50cmFja190YWJsZV9tdXRhdGlvbl90YWJsZV9zaXplICogNDAgYnl0ZXM8L2xpdGVyYWw+IChk ZWZhdWx0OiAyMDQ4ICogNDAgPSB+ODAgS0IpCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVt PgorICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBRdWVyeSBjYWNoZTogPGxpdGVy YWw+dHJhY2tfdGFibGVfbXV0YXRpb25fcXVlcnlfcGFyc2VfY2FjaGVfc2l6ZSAqIDY0MCBieXRl czwvbGl0ZXJhbD4gKGRlZmF1bHQ6IDEwMDAwICogNjQwID0gfjYuMyBNQikKKyAgICAgPC9wYXJh PgorICAgIDwvbGlzdGl0ZW0+CisgICA8L2l0ZW1pemVkbGlzdD4KKyAgIDxwYXJhPgorICAgIEZv ciBoaWdoLXRyYWZmaWMgc3lzdGVtcyB3aXRoIGxhcmdlIGNhY2hlIHNpemVzIChlLmcuLCA8bGl0 ZXJhbD50cmFja190YWJsZV9tdXRhdGlvbl9xdWVyeV9wYXJzZV9jYWNoZV9zaXplID0gMTAwMDAw PC9saXRlcmFsPiksCisgICAgbWVtb3J5IHVzYWdlIGNhbiByZWFjaCA2NCBNQiBvciBtb3JlLiBD b25zaWRlciB5b3VyIHN5c3RlbSdzIGF2YWlsYWJsZSBzaGFyZWQgbWVtb3J5IHdoZW4gdXNpbmcg PGxpdGVyYWw+ZG1sX2FkYXB0aXZlX2dsb2JhbDwvbGl0ZXJhbD4uCisgICA8L3BhcmE+CisgIDwv d2FybmluZz4KKworICA8dmFyaWFibGVsaXN0PgorCisgICA8dmFybGlzdGVudHJ5IGlkPSJndWMt dHJhY2stdGFibGUtbXV0YXRpb24tdHRsLWZhY3RvciIgeHJlZmxhYmVsPSJ0cmFja190YWJsZV9t dXRhdGlvbl90dGxfZmFjdG9yIj4KKyAgICA8dGVybT48dmFybmFtZT50cmFja190YWJsZV9tdXRh dGlvbl90dGxfZmFjdG9yPC92YXJuYW1lPiAoPHR5cGU+ZmxvYXRpbmcgcG9pbnQ8L3R5cGU+KQor ICAgICA8aW5kZXh0ZXJtPgorICAgICAgPHByaW1hcnk+PHZhcm5hbWU+dHJhY2tfdGFibGVfbXV0 YXRpb25fdHRsX2ZhY3RvcjwvdmFybmFtZT4gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXI8L3ByaW1h cnk+CisgICAgIDwvaW5kZXh0ZXJtPgorICAgIDwvdGVybT4KKyAgICA8bGlzdGl0ZW0+CisgICAg IDxwYXJhPgorICAgICAgTXVsdGlwbGllciBmb3IgY2FsY3VsYXRpbmcgdGhlIFRUTDogPGxpdGVy YWw+VFRMID0gcmVwbGljYXRpb25fZGVsYXkgKiB0cmFja190YWJsZV9tdXRhdGlvbl90dGxfZmFj dG9yPC9saXRlcmFsPi4KKyAgICAgIEhpZ2hlciB2YWx1ZXMgcHJvdmlkZSBtb3JlIHNhZmV0eSBt YXJnaW4gYnV0IG1heSByZWR1Y2UgcmVhZCByZXBsaWNhIHV0aWxpemF0aW9uLgorICAgICA8L3Bh cmE+CisgICAgIDxwYXJhPgorICAgICAgVmFsaWQgcmFuZ2U6IDEuMC0xMDAuMC4gRGVmYXVsdCBp cyA8bGl0ZXJhbD41LjA8L2xpdGVyYWw+LgorICAgICAgVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIGNo YW5nZWQgYnkgcmVsb2FkaW5nIHRoZSA8cHJvZHVjdG5hbWU+UGdwb29sLUlJPC8+IGNvbmZpZ3Vy YXRpb25zLgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvdmFybGlzdGVudHJ5 PgorCisgICA8dmFybGlzdGVudHJ5IGlkPSJndWMtdHJhY2stdGFibGUtbXV0YXRpb24tbWF4LXN0 YWxlbmVzcyIgeHJlZmxhYmVsPSJ0cmFja190YWJsZV9tdXRhdGlvbl9tYXhfc3RhbGVuZXNzIj4K KyAgICA8dGVybT48dmFybmFtZT50cmFja190YWJsZV9tdXRhdGlvbl9tYXhfc3RhbGVuZXNzPC92 YXJuYW1lPiAoPHR5cGU+aW50ZWdlcjwvdHlwZT4pCisgICAgIDxpbmRleHRlcm0+CisgICAgICA8 cHJpbWFyeT48dmFybmFtZT50cmFja190YWJsZV9tdXRhdGlvbl9tYXhfc3RhbGVuZXNzPC92YXJu YW1lPiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcjwvcHJpbWFyeT4KKyAgICAgPC9pbmRleHRlcm0+ CisgICAgPC90ZXJtPgorICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICBNYXhpbXVt IGR1cmF0aW9uIGluIG1pbGxpc2Vjb25kcyB0aGF0IGEgc2luZ2xlIHRhYmxlIGVudHJ5IGNhbiBj b250aW51b3VzbHkgZm9yY2UgcXVlcmllcyB0byBwcmltYXJ5LAorICAgICAgbWVhc3VyZWQgZnJv bSB3aGVuIHRoZSB0YWJsZSB3YXMgZmlyc3QgbWFya2VkIHN0YWxlLiBXaGVuIHRoaXMgY2FwIGlz IHJlYWNoZWQsIHRoZSBlbnRyeSBpcyBleHBpcmVkCisgICAgICByZWdhcmRsZXNzIG9mIHJlY2Vu dCB3cml0ZXMuIElmIHRoZSB0YWJsZSBpcyB3cml0dGVuIHRvIGFnYWluIGFmdGVyIGV4cGlyeSwg YSBmcmVzaCB0cmFja2luZyBlbnRyeQorICAgICAgaXMgY3JlYXRlZC4KKyAgICAgPC9wYXJhPgor ICAgICA8cGFyYT4KKyAgICAgIFRoaXMgcGFyYW1ldGVyIGJvdW5kcyB0aGUgY3Jvc3Mtc2Vzc2lv biBpbXBhY3Qgb2YgdGFibGUgbXV0YXRpb24gdHJhY2tpbmcuIEV2ZW4gaWYgYSB0YWJsZSBpcyB3 cml0dGVuCisgICAgICB0byBpbiBhIHRpZ2h0IGxvb3AsIGl0cyBlZmZlY3Qgb24gb3RoZXIgc2Vz c2lvbnMnIGxvYWQgYmFsYW5jaW5nIGlzIGxpbWl0ZWQgdG8gdGhpcyBkdXJhdGlvbi4gRm9yCisg ICAgICBsZWdpdGltYXRlbHkgYnVzeSB0YWJsZXMsIHRoZSBnYXAgYmV0d2VlbiBmb3JjZWQgZXhw aXJ5IGFuZCB0aGUgbmV4dCB3cml0ZSByZS1tYXJraW5nIHRoZSB0YWJsZSBpcworICAgICAgbmVn bGlnaWJsZSAodHlwaWNhbGx5IG1pbGxpc2Vjb25kcykuCisgICAgIDwvcGFyYT4KKyAgICAgPHBh cmE+CisgICAgICBTZXQgdG8gMCB0byBkaXNhYmxlIHRoZSBjYXAgKG5vdCByZWNvbW1lbmRlZCBm b3IgcHJvZHVjdGlvbikuCisgICAgICBWYWxpZCByYW5nZTogMC0zNjAwMDAwIG1zLiBEZWZhdWx0 IGlzIDxsaXRlcmFsPjYwMDAwPC9saXRlcmFsPiAoNjAgc2Vjb25kcykuCisgICAgICBUaGlzIHBh cmFtZXRlciBjYW4gYmUgY2hhbmdlZCBieSByZWxvYWRpbmcgdGhlIDxwcm9kdWN0bmFtZT5QZ3Bv b2wtSUk8Lz4gY29uZmlndXJhdGlvbnMuCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgor ICAgPC92YXJsaXN0ZW50cnk+CisKKyAgIDx2YXJsaXN0ZW50cnkgaWQ9Imd1Yy10cmFjay10YWJs ZS1tdXRhdGlvbi1jb2xkLXN0YXJ0LWR1cmF0aW9uIiB4cmVmbGFiZWw9InRyYWNrX3RhYmxlX211 dGF0aW9uX2NvbGRfc3RhcnRfZHVyYXRpb24iPgorICAgIDx0ZXJtPjx2YXJuYW1lPnRyYWNrX3Rh YmxlX211dGF0aW9uX2NvbGRfc3RhcnRfZHVyYXRpb248L3Zhcm5hbWU+ICg8dHlwZT5pbnRlZ2Vy PC90eXBlPikKKyAgICAgPGluZGV4dGVybT4KKyAgICAgIDxwcmltYXJ5Pjx2YXJuYW1lPnRyYWNr X3RhYmxlX211dGF0aW9uX2NvbGRfc3RhcnRfZHVyYXRpb248L3Zhcm5hbWU+IGNvbmZpZ3VyYXRp b24gcGFyYW1ldGVyPC9wcmltYXJ5PgorICAgICA8L2luZGV4dGVybT4KKyAgICA8L3Rlcm0+Cisg ICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIER1cmF0aW9uIGluIG1pbGxpc2Vjb25k cyB0byByb3V0ZSBhbGwgcXVlcmllcyB0byBwcmltYXJ5IGFmdGVyIGEgY2hpbGQgcHJvY2VzcyBz dGFydHMuCisgICAgICBUaGlzIHByZXZlbnRzIHN0YWxlIHJlYWRzIHdoZW4gYSBuZXcgY29ubmVj dGlvbiBpcyBlc3RhYmxpc2hlZCBiZWZvcmUgdGhlIHRyYWNrIHRhYmxlIG11dGF0aW9uCisgICAg ICBpcyBwb3B1bGF0ZWQgd2l0aCByZWNlbnQgd3JpdGUgaGlzdG9yeS4KKyAgICAgPC9wYXJhPgor ICAgICA8cGFyYT4KKyAgICAgIFdoZW4gd2F0Y2hkb2cgaXMgZW5hYmxlZCBhbmQgdGhlIGxvY2Fs IG5vZGUgYmVjb21lcyB0aGUgbGVhZGVyLCBQZ3Bvb2wtSUkgYWxzbyB0cmlnZ2VycyBhCisgICAg ICBnbG9iYWwgY29sZCBzdGFydCBmb3IgdGhpcyBkdXJhdGlvbiB0byBhdm9pZCBzdGFsZSByZWFk cyBhZnRlciBsZWFkZXJzaGlwIGNoYW5nZXMuCisgICAgIDwvcGFyYT4KKyAgICAgPHBhcmE+Cisg ICAgICBWYWxpZCByYW5nZTogMC02MDAwMCBtcy4gRGVmYXVsdCBpcyA8bGl0ZXJhbD4yMDAwPC9s aXRlcmFsPiAoMiBzZWNvbmRzKS4KKyAgICAgIFNldCB0byAwIHRvIGRpc2FibGUgY29sZCBzdGFy dCBiZWhhdmlvci4KKyAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBiZSBjaGFuZ2VkIGJ5IHJlbG9h ZGluZyB0aGUgPHByb2R1Y3RuYW1lPlBncG9vbC1JSTwvPiBjb25maWd1cmF0aW9ucy4KKyAgICAg PC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgPHZhcmxp c3RlbnRyeSBpZD0iZ3VjLXRyYWNrLXRhYmxlLW11dGF0aW9uLXRhYmxlLWJ1Y2tldHMiIHhyZWZs YWJlbD0idHJhY2tfdGFibGVfbXV0YXRpb25fdGFibGVfYnVja2V0cyI+CisgICAgPHRlcm0+PHZh cm5hbWU+dHJhY2tfdGFibGVfbXV0YXRpb25fdGFibGVfYnVja2V0czwvdmFybmFtZT4gKDx0eXBl PmludGVnZXI8L3R5cGU+KQorICAgICA8aW5kZXh0ZXJtPgorICAgICAgPHByaW1hcnk+PHZhcm5h bWU+dHJhY2tfdGFibGVfbXV0YXRpb25fdGFibGVfYnVja2V0czwvdmFybmFtZT4gY29uZmlndXJh dGlvbiBwYXJhbWV0ZXI8L3ByaW1hcnk+CisgICAgIDwvaW5kZXh0ZXJtPgorICAgIDwvdGVybT4K KyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgTnVtYmVyIG9mIGhhc2ggYnVja2V0 cyBmb3IgdGhlIHRyYWNrIHRhYmxlIG11dGF0aW9uIGhhc2ggdGFibGUuCisgICAgICBIaWdoZXIg dmFsdWVzIHJlZHVjZSBoYXNoIGNvbGxpc2lvbnMgYW5kIGltcHJvdmUgbG9va3VwIHBlcmZvcm1h bmNlLgorICAgICA8L3BhcmE+CisgICAgIDxwYXJhPgorICAgICAgVmFsaWQgcmFuZ2U6IDY0LTY1 NTM2LiBEZWZhdWx0IGlzIDxsaXRlcmFsPjEwMjQ8L2xpdGVyYWw+LgorICAgICAgVGhpcyBwYXJh bWV0ZXIgY2FuIG9ubHkgYmUgc2V0IGF0IHNlcnZlciBzdGFydC4KKyAgICAgPC9wYXJhPgorICAg IDwvbGlzdGl0ZW0+CisgICA8L3Zhcmxpc3RlbnRyeT4KKworICAgPHZhcmxpc3RlbnRyeSBpZD0i Z3VjLXRyYWNrLXRhYmxlLW11dGF0aW9uLXRhYmxlLXNpemUiIHhyZWZsYWJlbD0idHJhY2tfdGFi bGVfbXV0YXRpb25fdGFibGVfc2l6ZSI+CisgICAgPHRlcm0+PHZhcm5hbWU+dHJhY2tfdGFibGVf bXV0YXRpb25fdGFibGVfc2l6ZTwvdmFybmFtZT4gKDx0eXBlPmludGVnZXI8L3R5cGU+KQorICAg ICA8aW5kZXh0ZXJtPgorICAgICAgPHByaW1hcnk+PHZhcm5hbWU+dHJhY2tfdGFibGVfbXV0YXRp b25fdGFibGVfc2l6ZTwvdmFybmFtZT4gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXI8L3ByaW1hcnk+ CisgICAgIDwvaW5kZXh0ZXJtPgorICAgIDwvdGVybT4KKyAgICA8bGlzdGl0ZW0+CisgICAgIDxw YXJhPgorICAgICAgTWF4aW11bSBudW1iZXIgb2YgdGFibGVzIHRoYXQgY2FuIGJlIHRyYWNrZWQg c2ltdWx0YW5lb3VzbHkgaW4gdGhlIHRyYWNrIHRhYmxlIG11dGF0aW9uLgorICAgICAgV2hlbiBm dWxsLCBvbGRlc3QgZW50cmllcyBhcmUgZXZpY3RlZCB1c2luZyBhIHNpbXBsZSBldmljdGlvbiBz dHJhdGVneS4KKyAgICAgPC9wYXJhPgorICAgICA8cGFyYT4KKyAgICAgIFZhbGlkIHJhbmdlOiAx MjgtMTMxMDcyLiBEZWZhdWx0IGlzIDxsaXRlcmFsPjIwNDg8L2xpdGVyYWw+LgorICAgICAgTWVt b3J5IHVzYWdlOiBhcHByb3hpbWF0ZWx5IDQwIGJ5dGVzIHBlciBlbnRyeS4KKyAgICAgIFRoaXMg cGFyYW1ldGVyIGNhbiBvbmx5IGJlIHNldCBhdCBzZXJ2ZXIgc3RhcnQuCisgICAgIDwvcGFyYT4K KyAgICA8L2xpc3RpdGVtPgorICAgPC92YXJsaXN0ZW50cnk+CisKKyAgIDx2YXJsaXN0ZW50cnkg aWQ9Imd1Yy10cmFjay10YWJsZS1tdXRhdGlvbi1xdWVyeS1idWNrZXRzIiB4cmVmbGFiZWw9InRy YWNrX3RhYmxlX211dGF0aW9uX3F1ZXJ5X2J1Y2tldHMiPgorICAgIDx0ZXJtPjx2YXJuYW1lPnRy YWNrX3RhYmxlX211dGF0aW9uX3F1ZXJ5X2J1Y2tldHM8L3Zhcm5hbWU+ICg8dHlwZT5pbnRlZ2Vy PC90eXBlPikKKyAgICAgPGluZGV4dGVybT4KKyAgICAgIDxwcmltYXJ5Pjx2YXJuYW1lPnRyYWNr X3RhYmxlX211dGF0aW9uX3F1ZXJ5X2J1Y2tldHM8L3Zhcm5hbWU+IGNvbmZpZ3VyYXRpb24gcGFy YW1ldGVyPC9wcmltYXJ5PgorICAgICA8L2luZGV4dGVybT4KKyAgICA8L3Rlcm0+CisgICAgPGxp c3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIE51bWJlciBvZiBoYXNoIGJ1Y2tldHMgZm9yIHRo ZSBxdWVyeSBwYXJzZSBjYWNoZS4gVGhlIGNhY2hlIHN0b3JlcyBub3JtYWxpemVkCisgICAgICBx dWVyeSBzdHJpbmdzIG1hcHBlZCB0byB0aGVpciB0YWJsZSBkZXBlbmRlbmNpZXMgdG8gYXZvaWQg cmVwZWF0ZWQgcGFyc2luZy4KKyAgICAgPC9wYXJhPgorICAgICA8cGFyYT4KKyAgICAgIFZhbGlk IHJhbmdlOiA2NC02NTUzNi4gRGVmYXVsdCBpcyA8bGl0ZXJhbD4yMDQ4PC9saXRlcmFsPi4KKyAg ICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBvbmx5IGJlIHNldCBhdCBzZXJ2ZXIgc3RhcnQuCisgICAg IDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgPC92YXJsaXN0ZW50cnk+CisKKyAgIDx2YXJs aXN0ZW50cnkgaWQ9Imd1Yy10cmFjay10YWJsZS1tdXRhdGlvbi1xdWVyeS1wYXJzZS1jYWNoZS1z aXplIiB4cmVmbGFiZWw9InRyYWNrX3RhYmxlX211dGF0aW9uX3F1ZXJ5X3BhcnNlX2NhY2hlX3Np emUiPgorICAgIDx0ZXJtPjx2YXJuYW1lPnRyYWNrX3RhYmxlX211dGF0aW9uX3F1ZXJ5X3BhcnNl X2NhY2hlX3NpemU8L3Zhcm5hbWU+ICg8dHlwZT5pbnRlZ2VyPC90eXBlPikKKyAgICAgPGluZGV4 dGVybT4KKyAgICAgIDxwcmltYXJ5Pjx2YXJuYW1lPnRyYWNrX3RhYmxlX211dGF0aW9uX3F1ZXJ5 X3BhcnNlX2NhY2hlX3NpemU8L3Zhcm5hbWU+IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyPC9wcmlt YXJ5PgorICAgICA8L2luZGV4dGVybT4KKyAgICA8L3Rlcm0+CisgICAgPGxpc3RpdGVtPgorICAg ICA8cGFyYT4KKyAgICAgIE1heGltdW0gbnVtYmVyIG9mIHF1ZXJ5IHBhcnNlIHJlc3VsdHMgdG8g Y2FjaGUuIFVzZXMgTFJVIGV2aWN0aW9uIHdoZW4gZnVsbC4KKyAgICAgIExhcmdlciBjYWNoZXMg cmVkdWNlIHBhcnNpbmcgb3ZlcmhlYWQgYnV0IGNvbnN1bWUgbW9yZSBzaGFyZWQgbWVtb3J5Lgor ICAgICA8L3BhcmE+CisgICAgIDxwYXJhPgorICAgICAgVmFsaWQgcmFuZ2U6IDEwMC0xMDAwMDAw LiBEZWZhdWx0IGlzIDxsaXRlcmFsPjEwMDAwPC9saXRlcmFsPi4KKyAgICAgIE1lbW9yeSB1c2Fn ZTogYXBwcm94aW1hdGVseSA2NDAgYnl0ZXMgcGVyIGVudHJ5ICh+Ni4zIE1CIGZvciBkZWZhdWx0 LCB+NjQgTUIgZm9yIDEwMDAwMCBlbnRyaWVzKS4KKyAgICAgIFRoaXMgcGFyYW1ldGVyIGNhbiBv bmx5IGJlIHNldCBhdCBzZXJ2ZXIgc3RhcnQuCisgICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVt PgorICAgPC92YXJsaXN0ZW50cnk+CisKKyAgPC92YXJpYWJsZWxpc3Q+CisKKyAgPHNlY3QzIGlk PSJydW50aW1lLWNvbmZpZy10cmFjay10YWJsZS1tdXRhdGlvbi1leGFtcGxlIj4KKyAgIDx0aXRs ZT5UcmFjayBUYWJsZSBNdXRhdGlvbiBDb25maWd1cmF0aW9uIEV4YW1wbGU8L3RpdGxlPgorICAg PHBhcmE+CisgICAgVG8gZW5hYmxlIHRyYWNrIHRhYmxlIG11dGF0aW9uIHdpdGggcmVwbGljYXRp b24gZGVsYXkgbW9uaXRvcmluZzoKKyAgIDwvcGFyYT4KKyAgIDxwcm9ncmFtbGlzdGluZz4KKyMg RW5hYmxlIGRtbF9hZGFwdGl2ZV9nbG9iYWwgbW9kZSAoaW5jbHVkZXMgdHJhY2sgdGFibGUgbXV0 YXRpb24pCitkaXNhYmxlX2xvYWRfYmFsYW5jZV9vbl93cml0ZSA9ICdkbWxfYWRhcHRpdmVfZ2xv YmFsJwordHJhY2tfdGFibGVfbXV0YXRpb25fdHRsX2ZhY3RvciA9IDUuMAordHJhY2tfdGFibGVf bXV0YXRpb25fbWF4X3N0YWxlbmVzcyA9IDYwMDAwCit0cmFja190YWJsZV9tdXRhdGlvbl9jb2xk X3N0YXJ0X2R1cmF0aW9uID0gMjAwMAorCisjIE9wdGlvbiBBOiBVc2UgZXh0ZXJuYWwgY29tbWFu ZCBmb3IgcmVwbGljYXRpb24gZGVsYXkKK3JlcGxpY2F0aW9uX2RlbGF5X3NvdXJjZV9jbWQgPSAn L3BhdGgvdG8vZ2V0LXJlcGxpY2F0aW9uLWRlbGF5LnNoJworcmVwbGljYXRpb25fZGVsYXlfc291 cmNlX3RpbWVvdXQgPSAxMAorCisjIE9wdGlvbiBCOiBVc2UgcGdfc3RhdF9yZXBsaWNhdGlvbiBy ZXBsYXlfbGFnIChQRyAxMCspCisjIGRlbGF5X3RocmVzaG9sZF9ieV90aW1lID0gMTAwMAorCisj IEFkanVzdCBjYWNoZSBzaXplcyBiYXNlZCBvbiB3b3JrbG9hZCAoaW5jcmVhc2VzIG1lbW9yeSB1 c2FnZSkKK3RyYWNrX3RhYmxlX211dGF0aW9uX3RhYmxlX3NpemUgPSA0MDk2Cit0cmFja190YWJs ZV9tdXRhdGlvbl9xdWVyeV9wYXJzZV9jYWNoZV9zaXplID0gNTAwMDAKKyAgIDwvcHJvZ3JhbWxp c3Rpbmc+CisgICA8cGFyYT4KKyAgICBUb3RhbCBzaGFyZWQgbWVtb3J5IHJlcXVpcmVkIGZvciBh Ym92ZSBjb25maWd1cmF0aW9uOiBhcHByb3hpbWF0ZWx5IDMxLjIgTUIgKDMxIE1CIHF1ZXJ5IGNh Y2hlICsgMC4yIE1CIHRhYmxlIG1hcCArIG92ZXJoZWFkKS4KKyAgICBEZWZhdWx0IGNvbmZpZ3Vy YXRpb24gKDEwMDAwIHF1ZXJ5IGNhY2hlIGVudHJpZXMsIDIwNDggdGFibGVzKSByZXF1aXJlcyBh cHByb3hpbWF0ZWx5IDYuNCBNQi4KKyAgIDwvcGFyYT4KKyAgPC9zZWN0Mz4KKworICA8c2VjdDMg aWQ9InJ1bnRpbWUtY29uZmlnLXRyYWNrLXRhYmxlLW11dGF0aW9uLWxpbWl0YXRpb25zIj4KKyAg IDx0aXRsZT5MaW1pdGF0aW9uczwvdGl0bGU+CisgICA8cGFyYT4KKyAgICBUaGUgdHJhY2sgdGFi bGUgbXV0YXRpb24gZmVhdHVyZSBoYXMgdGhlIGZvbGxvd2luZyBsaW1pdGF0aW9uOgorICAgPC9w YXJhPgorICAgPGl0ZW1pemVkbGlzdD4KKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAg ICAgPGxpdGVyYWw+UFJFUEFSRTwvbGl0ZXJhbD4gc3RhdGVtZW50cyBhcmUgbm90IHRyYWNrZWQu IFdoZW4gYSBwcmVwYXJlZCBzdGF0ZW1lbnQKKyAgICAgIGNvbnRhaW5pbmcgZGF0YSBtb2RpZmlj YXRpb24gaXMgZXhlY3V0ZWQsIHRoZSB0YWJsZSBtdXRhdGlvbiBpcyBub3QgcmVjb3JkZWQuCisg ICAgIDwvcGFyYT4KKyAgICA8L2xpc3RpdGVtPgorICAgPC9pdGVtaXplZGxpc3Q+CisgICA8cGFy YT4KKyAgICBJZiB5b3VyIGFwcGxpY2F0aW9uIHVzZXMgcHJlcGFyZWQgc3RhdGVtZW50cyBhbmQg cmVxdWlyZXMgcmVhZC1hZnRlci13cml0ZSBjb25zaXN0ZW5jeSwKKyAgICBjb25zaWRlciB1c2lu ZyBleHBsaWNpdCB0cmFuc2FjdGlvbiByb3V0aW5nIG9yIHRoZSA8bGl0ZXJhbD4vKk5PIExPQUQg QkFMQU5DRSovPC9saXRlcmFsPgorICAgIGNvbW1lbnQgZGlyZWN0aXZlIGZvciBhZmZlY3RlZCBx dWVyaWVzLgorICAgPC9wYXJhPgorICAgPHBhcmE+CisgICAgVGhlIGZvbGxvd2luZyBzdGF0ZW1l bnQgdHlwZXMgPGVtcGhhc2lzPmFyZTwvZW1waGFzaXM+IHRyYWNrZWQgYW5kIHdpbGwgbWFyayB0 YWJsZXMgYXMgc3RhbGU6CisgICA8L3BhcmE+CisgICA8aXRlbWl6ZWRsaXN0PgorICAgIDxsaXN0 aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICA8bGl0ZXJhbD5JTlNFUlQ8L2xpdGVyYWw+LCA8bGl0 ZXJhbD5VUERBVEU8L2xpdGVyYWw+LCA8bGl0ZXJhbD5ERUxFVEU8L2xpdGVyYWw+CisgICAgICBz dGF0ZW1lbnRzIChpbmNsdWRpbmcgdGhvc2Ugd2l0aCA8bGl0ZXJhbD5SRVRVUk5JTkc8L2xpdGVy YWw+IGNsYXVzZXMpLgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgICA8bGlzdGl0 ZW0+CisgICAgIDxwYXJhPgorICAgICAgPGxpdGVyYWw+VFJVTkNBVEU8L2xpdGVyYWw+IHN0YXRl bWVudHMgKGluY2x1ZGluZyBtdWx0aXBsZSB0YWJsZXMpLgorICAgICA8L3BhcmE+CisgICAgPC9s aXN0aXRlbT4KKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgPGxpdGVyYWw+TUVS R0U8L2xpdGVyYWw+IHN0YXRlbWVudHMgKFBvc3RncmVTUUwgMTUrKS4KKyAgICAgPC9wYXJhPgor ICAgIDwvbGlzdGl0ZW0+CisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIDxsaXRl cmFsPldJVEg8L2xpdGVyYWw+IGNsYXVzZXMgY29udGFpbmluZyBkYXRhIG1vZGlmaWNhdGlvbnMg KENvbW1vbiBUYWJsZSBFeHByZXNzaW9ucworICAgICAgd2l0aCA8bGl0ZXJhbD5JTlNFUlQ8L2xp dGVyYWw+LCA8bGl0ZXJhbD5VUERBVEU8L2xpdGVyYWw+LCBvciA8bGl0ZXJhbD5ERUxFVEU8L2xp dGVyYWw+KS4KKyAgICAgIEZvciBleGFtcGxlLCA8bGl0ZXJhbD5XSVRIIGRlbGV0ZWQgQVMgKERF TEVURSBGUk9NIHQxIFJFVFVSTklORyAqKSBTRUxFQ1QgKiBGUk9NIGRlbGV0ZWQ8L2xpdGVyYWw+ CisgICAgICB3aWxsIHByb3Blcmx5IG1hcmsgdGFibGUgPGxpdGVyYWw+dDE8L2xpdGVyYWw+IGFz IHN0YWxlLgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvaXRlbWl6ZWRsaXN0 PgorICAgPHBhcmE+CisgICAgPGVtcGhhc2lzPlRyYW5zYWN0aW9uIFJvbGxiYWNrIEJlaGF2aW9y OjwvZW1waGFzaXM+IFdpdGhpbiBleHBsaWNpdCB0cmFuc2FjdGlvbnMsIHRhYmxlcworICAgIGFy ZSBvbmx5IG1hcmtlZCBhcyBzdGFsZSBpbiBzaGFyZWQgbWVtb3J5IHdoZW4gdGhlIHRyYW5zYWN0 aW9uIGlzIGNvbW1pdHRlZC4gSWYgdGhlCisgICAgdHJhbnNhY3Rpb24gaXMgcm9sbGVkIGJhY2ss IG5vIHRhYmxlcyBhcmUgbWFya2VkLCBzaW5jZSBubyBhY3R1YWwgZGF0YSBtb2RpZmljYXRpb24K KyAgICBvY2N1cnJlZCBvbiByZXBsaWNhcy4gVGhpcyBwcmV2ZW50cyByb2xsZWQtYmFjayB0cmFu c2FjdGlvbnMgZnJvbSB1bm5lY2Vzc2FyaWx5CisgICAgZGlzYWJsaW5nIGxvYWQgYmFsYW5jaW5n LiBGb3IgYXV0b2NvbW1pdCBzdGF0ZW1lbnRzIChvdXRzaWRlIGV4cGxpY2l0IHRyYW5zYWN0aW9u cyksCisgICAgdGFibGVzIGFyZSBtYXJrZWQgaW1tZWRpYXRlbHkgdXBvbiBjb21tYW5kIGNvbXBs ZXRpb24uCisgICA8L3BhcmE+CisKKyAgIDxwYXJhPgorICAgIDxlbXBoYXNpcz5Dcm9zcy1TZXNz aW9uIEltcGFjdCBhbmQgU2FmZXR5IEJvdW5kczo8L2VtcGhhc2lzPgorICAgIFVubGlrZSA8bGl0 ZXJhbD5kbWxfYWRhcHRpdmU8L2xpdGVyYWw+ICh3aGljaCBvbmx5IGFmZmVjdHMgdGhlIHNlc3Np b24gdGhhdCBpc3N1ZWQgdGhlIHdyaXRlKSwKKyAgICA8bGl0ZXJhbD5kbWxfYWRhcHRpdmVfZ2xv YmFsPC9saXRlcmFsPiBhZmZlY3RzIGFsbCBzZXNzaW9ucyByZWFkaW5nIHRoZSBzYW1lIHRhYmxl IGluIHRoZSBzYW1lIGRhdGFiYXNlLgorICAgIFRoZSBmb2xsb3dpbmcgc2FmZXR5IG1lY2hhbmlz bXMgYm91bmQgdGhpcyBjcm9zcy1zZXNzaW9uIGltcGFjdDoKKyAgIDwvcGFyYT4KKyAgIDxpdGVt aXplZGxpc3Q+CisgICAgPGxpc3RpdGVtPgorICAgICA8cGFyYT4KKyAgICAgIDxlbXBoYXNpcz5N YXhpbXVtIHN0YWxlbmVzcyBjYXA6PC9lbXBoYXNpcz4gVGhlIDx4cmVmIGxpbmtlbmQ9Imd1Yy10 cmFjay10YWJsZS1tdXRhdGlvbi1tYXgtc3RhbGVuZXNzIj4KKyAgICAgIHBhcmFtZXRlciAoZGVm YXVsdDogNjAgc2Vjb25kcykgbGltaXRzIGhvdyBsb25nIGFueSBzaW5nbGUgdGFibGUgZW50cnkg Y2FuIGNvbnRpbnVvdXNseSBmb3JjZSBwcmltYXJ5CisgICAgICByb3V0aW5nLiBFdmVuIHVuZGVy IHN1c3RhaW5lZCB3cml0ZXMsIHRoZSBlbnRyeSBleHBpcmVzIGFmdGVyIHRoaXMgcGVyaW9kIGFu ZCBpcyBvbmx5IHJlbmV3ZWQgYnkKKyAgICAgIHN1YnNlcXVlbnQgY29tbWl0dGVkIHdyaXRlcy4K KyAgICAgPC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICAgPGxpc3RpdGVtPgorICAgICA8cGFy YT4KKyAgICAgIDxlbXBoYXNpcz5EYXRhYmFzZSBpc29sYXRpb246PC9lbXBoYXNpcz4gVGFibGUg c3RhbGVuZXNzIHRyYWNraW5nIGlzIHNjb3BlZCBieSBkYXRhYmFzZSBPSUQuIFdyaXRlcworICAg ICAgaW4gb25lIGRhdGFiYXNlIG5ldmVyIGFmZmVjdCBsb2FkIGJhbGFuY2luZyBkZWNpc2lvbnMg Zm9yIHNlc3Npb25zIGNvbm5lY3RlZCB0byBhIGRpZmZlcmVudCBkYXRhYmFzZS4KKyAgICAgIElu IG11bHRpLXRlbmFudCBkZXBsb3ltZW50cyB3aGVyZSB0ZW5hbnRzIHVzZSBzZXBhcmF0ZSBkYXRh YmFzZXMsIG9uZSB0ZW5hbnQncyB3cml0ZSBhY3Rpdml0eSBjYW5ub3QKKyAgICAgIGluZmx1ZW5j ZSBhbm90aGVyIHRlbmFudCdzIHF1ZXJ5IHJvdXRpbmcuCisgICAgIDwvcGFyYT4KKyAgICA8L2xp c3RpdGVtPgorICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICA8ZW1waGFzaXM+Q29t bWl0dGVkIHdyaXRlcyBvbmx5OjwvZW1waGFzaXM+IE9ubHkgY29tbWl0dGVkIHRyYW5zYWN0aW9u cyBtYXJrIHRhYmxlcyBhcyBzdGFsZS4KKyAgICAgIFJvbGxlZC1iYWNrIHRyYW5zYWN0aW9ucyBo YXZlIG5vIGVmZmVjdCBvbiB0aGUgc2hhcmVkIHRyYWNraW5nIHN0YXRlLgorICAgICA8L3BhcmE+ CisgICAgPC9saXN0aXRlbT4KKyAgICA8bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgPGVt cGhhc2lzPkJvdW5kZWQgdGFibGUgbWFwIHNpemU6PC9lbXBoYXNpcz4gVGhlIHNoYXJlZCBtZW1v cnkgdGFibGUgbWFwIGhhcyBhIGZpeGVkIG1heGltdW0gc2l6ZQorICAgICAgKDx4cmVmIGxpbmtl bmQ9Imd1Yy10cmFjay10YWJsZS1tdXRhdGlvbi10YWJsZS1zaXplIj4pLiBBdCBtb3N0IHRoaXMg bWFueSB0YWJsZXMgY2FuIGJlIG1hcmtlZCBzdGFsZQorICAgICAgc2ltdWx0YW5lb3VzbHksIHBy b3ZpZGluZyBhIG5hdHVyYWwgY2VpbGluZyBvbiB0aGUgZmVhdHVyZSdzIGltcGFjdC4KKyAgICAg PC9wYXJhPgorICAgIDwvbGlzdGl0ZW0+CisgICA8L2l0ZW1pemVkbGlzdD4KKyAgPC9zZWN0Mz4K KworIDwvc2VjdDI+CisKIDwvc2VjdDE+CmRpZmYgLS1naXQgYS9zcmMvTWFrZWZpbGUuYW0gYi9z cmMvTWFrZWZpbGUuYW0KaW5kZXggNDY3OGFiNTMwLi4zOTU4OGFmNTggMTAwNjQ0Ci0tLSBhL3Ny Yy9NYWtlZmlsZS5hbQorKysgYi9zcmMvTWFrZWZpbGUuYW0KQEAgLTM1LDYgKzM1LDcgQEAgcGdw b29sX1NPVVJDRVMgPSBtYWluL21haW4uYyBcCiAJcmV3cml0ZS9wb29sX3RpbWVzdGFtcC5jIFwK IAlyZXdyaXRlL3Bvb2xfbG9iai5jIFwKIAl1dGlscy9wb29sX3NlbGVjdF93YWxrZXIuYyBcCisJ dXRpbHMvcG9vbF90cmFja190YWJsZV9tdXRhdGlvbi5jIFwKIAl1dGlscy9zdHJsY3B5LmMgXAog CXV0aWxzL3BzcHJpbnRmLmMgXAogCXV0aWxzL3Bvb2xfcGFyYW1zLmMgXApkaWZmIC0tZ2l0IGEv c3JjL2NvbmZpZy9wb29sX2NvbmZpZ192YXJpYWJsZXMuYyBiL3NyYy9jb25maWcvcG9vbF9jb25m aWdfdmFyaWFibGVzLmMKaW5kZXggY2UxM2M0MmY2Li5kNWY0ZmI2MDUgMTAwNjQ0Ci0tLSBhL3Ny Yy9jb25maWcvcG9vbF9jb25maWdfdmFyaWFibGVzLmMKKysrIGIvc3JjL2NvbmZpZy9wb29sX2Nv bmZpZ192YXJpYWJsZXMuYwpAQCAtMjkwLDYgKzI5MCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qg Y29uZmlnX2VudW1fZW50cnkgZGlzYWJsZV9sb2FkX2JhbGFuY2Vfb25fd3JpdGVfb3B0aW9uc1td ID0KIAl7InRyYW5zX3RyYW5zYWN0aW9uIiwgRExCT1dfVFJBTlNfVFJBTlNBQ1RJT04sIGZhbHNl fSwKIAl7ImFsd2F5cyIsIERMQk9XX0FMV0FZUywgZmFsc2V9LAogCXsiZG1sX2FkYXB0aXZlIiwg RExCT1dfRE1MX0FEQVBUSVZFLCBmYWxzZX0sCisJeyJkbWxfYWRhcHRpdmVfZ2xvYmFsIiwgRExC T1dfRE1MX0FEQVBUSVZFX0dMT0JBTCwgZmFsc2V9LAogCXtOVUxMLCAwLCBmYWxzZX0KIH07CiAK QEAgLTE3NzcsNiArMTc3OCwxOSBAQCBzdGF0aWMgc3RydWN0IGNvbmZpZ19pbnRfYXJyYXkgQ29u ZmlndXJlTmFtZXNJbnRBcnJheVtdID0KIAogc3RhdGljIHN0cnVjdCBjb25maWdfZG91YmxlIENv bmZpZ3VyZU5hbWVzRG91YmxlW10gPQogeworCXsKKwkJeyJ0cmFja190YWJsZV9tdXRhdGlvbl90 dGxfZmFjdG9yIiwKKwkJCUNGR0NYVF9SRUxPQUQsIExPQURfQkFMQU5DRV9DT05GSUcsCisJCQki VFRMIG11bHRpcGxpZXIgZm9yIHRyYWNrIHRhYmxlIG11dGF0aW9uICIKKwkJCSIoVFRMID0gcmVw bGljYXRpb25fZGVsYXkgKiBmYWN0b3IpIiwKKwkJCUNPTkZJR19WQVJfVFlQRV9ET1VCTEUsIGZh bHNlLCAwCisJCX0sCisJCSZnX3Bvb2xfY29uZmlnLnRyYWNrX3RhYmxlX211dGF0aW9uX3R0bF9m YWN0b3IsCisJCTUuMCwJCQkJCS8qIGJvb3QgdmFsdWU6IDV4IHJlcGxpY2F0aW9uIGRlbGF5ICov CisJCTEuMCwgMTAwLjAsCQkJCS8qIG1pbiwgbWF4ICovCisJCU5VTEwsIE5VTEwsIE5VTEwKKwl9 LAorCiAJLyogRW5kLW9mLWxpc3QgbWFya2VyICovCiAJRU1QVFlfQ09ORklHX0RPVUJMRQogfTsK QEAgLTIzOTcsNiArMjQxMSw4MSBAQCBzdGF0aWMgc3RydWN0IGNvbmZpZ19pbnQgQ29uZmlndXJl TmFtZXNJbnRbXSA9CiAJCU5VTEwsIE5VTEwsIE5VTEwKIAl9LAogCisJeworCQl7InRyYWNrX3Rh YmxlX211dGF0aW9uX21heF9zdGFsZW5lc3MiLAorCQkJQ0ZHQ1hUX1JFTE9BRCwgTE9BRF9CQUxB TkNFX0NPTkZJRywKKwkJCSJNYXhpbXVtIGR1cmF0aW9uIGluIG1pbGxpc2Vjb25kcyB0aGF0IGEg IgorCQkJInRhYmxlIGNhbiBiZSBtYXJrZWQgc3RhbGUgZnJvbSBpdHMgZmlyc3QgIgorCQkJIndy aXRlLiAwIGRpc2FibGVzIHRoZSBjYXAuIiwKKwkJCUNPTkZJR19WQVJfVFlQRV9JTlQsIGZhbHNl LCBHVUNfVU5JVF9NUworCQl9LAorCQkmZ19wb29sX2NvbmZpZy50cmFja190YWJsZV9tdXRhdGlv bl9tYXhfc3RhbGVuZXNzLAorCQk2MDAwMCwJCQkJCS8qIDYwIHNlY29uZHMgKi8KKwkJMCwgMzYw MDAwMCwJCQkJLyogMCB0byAxIGhvdXIgKi8KKwkJTlVMTCwgTlVMTCwgTlVMTAorCX0sCisKKwl7 CisJCXsidHJhY2tfdGFibGVfbXV0YXRpb25fY29sZF9zdGFydF9kdXJhdGlvbiIsCisJCQlDRkdD WFRfUkVMT0FELCBMT0FEX0JBTEFOQ0VfQ09ORklHLAorCQkJIkR1cmF0aW9uIGluIG1pbGxpc2Vj b25kcyB0byBmb3JjZSBxdWVyaWVzICIKKwkJCSJ0byBwcmltYXJ5IGFmdGVyIGNoaWxkIHByb2Nl c3Mgc3RhcnRzLiIsCisJCQlDT05GSUdfVkFSX1RZUEVfSU5ULCBmYWxzZSwgR1VDX1VOSVRfTVMK KwkJfSwKKwkJJmdfcG9vbF9jb25maWcudHJhY2tfdGFibGVfbXV0YXRpb25fY29sZF9zdGFydF9k dXJhdGlvbiwKKwkJMjAwMCwJCQkJCS8qIDIgc2Vjb25kcyAqLworCQkwLCA2MDAwMCwJCQkJLyog MCB0byA2MCBzZWNvbmRzICovCisJCU5VTEwsIE5VTEwsIE5VTEwKKwl9LAorCisJeworCQl7InRy YWNrX3RhYmxlX211dGF0aW9uX3RhYmxlX2J1Y2tldHMiLAorCQkJQ0ZHQ1hUX0lOSVQsIExPQURf QkFMQU5DRV9DT05GSUcsCisJCQkiTnVtYmVyIG9mIGhhc2ggYnVja2V0cyBmb3IgdHJhY2sgdGFi bGUgbXV0YXRpb24uIiwKKwkJCUNPTkZJR19WQVJfVFlQRV9JTlQsIGZhbHNlLCAwCisJCX0sCisJ CSZnX3Bvb2xfY29uZmlnLnRyYWNrX3RhYmxlX211dGF0aW9uX3RhYmxlX2J1Y2tldHMsCisJCTEw MjQsCisJCTY0LCA2NTUzNiwKKwkJTlVMTCwgTlVMTCwgTlVMTAorCX0sCisKKwl7CisJCXsidHJh Y2tfdGFibGVfbXV0YXRpb25fdGFibGVfc2l6ZSIsCisJCQlDRkdDWFRfSU5JVCwgTE9BRF9CQUxB TkNFX0NPTkZJRywKKwkJCSJNYXhpbXVtIG51bWJlciBvZiBlbnRyaWVzIGluIHRyYWNrIHRhYmxl IG11dGF0aW9uLiIsCisJCQlDT05GSUdfVkFSX1RZUEVfSU5ULCBmYWxzZSwgMAorCQl9LAorCQkm Z19wb29sX2NvbmZpZy50cmFja190YWJsZV9tdXRhdGlvbl90YWJsZV9zaXplLAorCQkyMDQ4LAor CQkxMjgsIDEzMTA3MiwKKwkJTlVMTCwgTlVMTCwgTlVMTAorCX0sCisKKwl7CisJCXsidHJhY2tf dGFibGVfbXV0YXRpb25fcXVlcnlfYnVja2V0cyIsCisJCQlDRkdDWFRfSU5JVCwgTE9BRF9CQUxB TkNFX0NPTkZJRywKKwkJCSJOdW1iZXIgb2YgaGFzaCBidWNrZXRzIGZvciBxdWVyeSBwYXJzZSBj YWNoZS4iLAorCQkJQ09ORklHX1ZBUl9UWVBFX0lOVCwgZmFsc2UsIDAKKwkJfSwKKwkJJmdfcG9v bF9jb25maWcudHJhY2tfdGFibGVfbXV0YXRpb25fcXVlcnlfYnVja2V0cywKKwkJMjA0OCwKKwkJ NjQsIDY1NTM2LAorCQlOVUxMLCBOVUxMLCBOVUxMCisJfSwKKworCXsKKwkJeyJ0cmFja190YWJs ZV9tdXRhdGlvbl9xdWVyeV9wYXJzZV9jYWNoZV9zaXplIiwKKwkJCUNGR0NYVF9JTklULCBMT0FE X0JBTEFOQ0VfQ09ORklHLAorCQkJIk1heGltdW0gbnVtYmVyIG9mIGVudHJpZXMgaW4gcXVlcnkg cGFyc2UgY2FjaGUuIiwKKwkJCUNPTkZJR19WQVJfVFlQRV9JTlQsIGZhbHNlLCAwCisJCX0sCisJ CSZnX3Bvb2xfY29uZmlnLnRyYWNrX3RhYmxlX211dGF0aW9uX3F1ZXJ5X3BhcnNlX2NhY2hlX3Np emUsCisJCTEwMDAwLAorCQkxMDAsIDEwMDAwMDAsCisJCU5VTEwsIE5VTEwsIE5VTEwKKwl9LAor CiAJLyogRW5kLW9mLWxpc3QgbWFya2VyICovCiAJRU1QVFlfQ09ORklHX0lOVAogfTsKQEAgLTQ2 MTUsNiArNDcwNCw3IEBAIHN0YXRpYyBjb25zdCBjaGFyICoKIEJhY2tlbmRGbGFnc1Nob3dGdW5j KGludCBpbmRleCkKIHsKIAl1bnNpZ25lZCBzaG9ydCBmbGFnID0gZ19wb29sX2NvbmZpZy5iYWNr ZW5kX2Rlc2MtPmJhY2tlbmRfaW5mb1tpbmRleF0uZmxhZzsKKwogCXJldHVybiBwb29sX2ZsYWdf dG9fc3RyKGZsYWcpOwogfQogCmRpZmYgLS1naXQgYS9zcmMvY29udGV4dC9wb29sX3F1ZXJ5X2Nv bnRleHQuYyBiL3NyYy9jb250ZXh0L3Bvb2xfcXVlcnlfY29udGV4dC5jCmluZGV4IGEwNTZhYzU5 Ni4uMDE5MGQzNjczIDEwMDY0NAotLS0gYS9zcmMvY29udGV4dC9wb29sX3F1ZXJ5X2NvbnRleHQu YworKysgYi9zcmMvY29udGV4dC9wb29sX3F1ZXJ5X2NvbnRleHQuYwpAQCAtMjksNiArMjksNyBA QAogI2luY2x1ZGUgInV0aWxzL3N0YXRpc3RpY3MuaCIKICNpbmNsdWRlICJ1dGlscy9wb29sX3Nl bGVjdF93YWxrZXIuaCIKICNpbmNsdWRlICJ1dGlscy9wb29sX3N0cmVhbS5oIgorI2luY2x1ZGUg InV0aWxzL3Bvb2xfdHJhY2tfdGFibGVfbXV0YXRpb24uaCIKICNpbmNsdWRlICJjb250ZXh0L3Bv b2xfc2Vzc2lvbl9jb250ZXh0LmgiCiAjaW5jbHVkZSAiY29udGV4dC9wb29sX3F1ZXJ5X2NvbnRl eHQuaCIKICNpbmNsdWRlICJwYXJzZXIvbm9kZXMuaCIKQEAgLTE4MjgsMTUgKzE4MjksMjMgQEAg aXNfaW5fbGlzdChjaGFyICpuYW1lLCBMaXN0ICpsaXN0KQogc3RhdGljIGJvb2wKIGlzX3NlbGVj dF9vYmplY3RfaW5fdGVtcF93cml0ZV9saXN0KE5vZGUgKm5vZGUsIHZvaWQgKmNvbnRleHQpCiB7 Ci0JaWYgKG5vZGUgPT0gTlVMTCB8fCBwb29sX2NvbmZpZy0+ZGlzYWJsZV9sb2FkX2JhbGFuY2Vf b25fd3JpdGUgIT0gRExCT1dfRE1MX0FEQVBUSVZFKQorCWlmIChub2RlID09IE5VTEwgfHwKKwkJ IURMQk9XX0lTX0RNTF9BREFQVElWRSgKKwkJCQkJCQkgICBwb29sX2NvbmZpZy0+ZGlzYWJsZV9s b2FkX2JhbGFuY2Vfb25fd3JpdGUpKQogCQlyZXR1cm4gZmFsc2U7CiAKIAlpZiAoSXNBKG5vZGUs IFJhbmdlVmFyKSkKIAl7CiAJCVJhbmdlVmFyICAgKnJndiA9IChSYW5nZVZhciAqKSBub2RlOwot CQlQT09MX1NFU1NJT05fQ09OVEVYVCAqc2Vzc2lvbl9jb250ZXh0ID0gcG9vbF9nZXRfc2Vzc2lv bl9jb250ZXh0KGZhbHNlKTsKKwkJUE9PTF9TRVNTSU9OX0NPTlRFWFQgKnNlc3Npb25fY29udGV4 dDsKKwkJYm9vbAkJaXNfYWRhcHRpdmU7CisKKwkJc2Vzc2lvbl9jb250ZXh0ID0gcG9vbF9nZXRf c2Vzc2lvbl9jb250ZXh0KGZhbHNlKTsKKwkJaXNfYWRhcHRpdmUgPSBETEJPV19JU19ETUxfQURB UFRJVkUoCisJCQkJCQkJCQkJCXBvb2xfY29uZmlnLT5kaXNhYmxlX2xvYWRfYmFsYW5jZV9vbl93 cml0ZSk7CiAKLQkJaWYgKHBvb2xfY29uZmlnLT5kaXNhYmxlX2xvYWRfYmFsYW5jZV9vbl93cml0 ZSA9PSBETEJPV19ETUxfQURBUFRJVkUgJiYgc2Vzc2lvbl9jb250ZXh0LT5pc19pbl90cmFuc2Fj dGlvbikKKwkJaWYgKGlzX2FkYXB0aXZlICYmCisJCQlzZXNzaW9uX2NvbnRleHQtPmlzX2luX3Ry YW5zYWN0aW9uKQogCQl7CiAJCQllcmVwb3J0KERFQlVHMSwKIAkJCQkJKGVycm1zZygiaXNfc2Vs ZWN0X29iamVjdF9pbl90ZW1wX3dyaXRlX2xpc3Q6IFwiJXNcIiwgZm91bmQgcmVsYXRpb24gXCIl c1wiIiwgKGNoYXIgKikgY29udGV4dCwgcmd2LT5yZWxuYW1lKSkpOwpAQCAtMTg4MCw3ICsxODg5 LDEzIEBAIHN0YXRpYyBjaGFyICpnZXRfYXNzb2NpYXRlZF9vYmplY3RfZnJvbV9kbWxfYWRhcHRp dmVfcmVsYXRpb25zCiB2b2lkCiBjaGVja19vYmplY3RfcmVsYXRpb25zaGlwX2xpc3QoY2hhciAq bmFtZSwgYm9vbCBpc19mdW5jX25hbWUpCiB7Ci0JaWYgKHBvb2xfY29uZmlnLT5kaXNhYmxlX2xv YWRfYmFsYW5jZV9vbl93cml0ZSA9PSBETEJPV19ETUxfQURBUFRJVkUgJiYgcG9vbF9jb25maWct PnBhcnNlZF9kbWxfYWRhcHRpdmVfb2JqZWN0X3JlbGF0aW9uc2hpcF9saXN0KQorCWJvb2wJCWlz X2FkYXB0aXZlOworCisJaXNfYWRhcHRpdmUgPSBETEJPV19JU19ETUxfQURBUFRJVkUoCisJCQkJ CQkJCQkJcG9vbF9jb25maWctPmRpc2FibGVfbG9hZF9iYWxhbmNlX29uX3dyaXRlKTsKKworCWlm IChpc19hZGFwdGl2ZSAmJgorCQlwb29sX2NvbmZpZy0+cGFyc2VkX2RtbF9hZGFwdGl2ZV9vYmpl Y3RfcmVsYXRpb25zaGlwX2xpc3QpCiAJewogCQlQT09MX1NFU1NJT05fQ09OVEVYVCAqc2Vzc2lv bl9jb250ZXh0ID0gcG9vbF9nZXRfc2Vzc2lvbl9jb250ZXh0KGZhbHNlKTsKIApAQCAtMTk0Nyw3 ICsxOTYyLDcgQEAgYWRkX29iamVjdF9pbnRvX3RlbXBfd3JpdGVfbGlzdChOb2RlICpub2RlLCB2 b2lkICpjb250ZXh0KQogc3RhdGljIHZvaWQKIGRtbF9hZGFwdGl2ZShOb2RlICpub2RlLCBjaGFy ICpxdWVyeSkKIHsKLQlpZiAocG9vbF9jb25maWctPmRpc2FibGVfbG9hZF9iYWxhbmNlX29uX3dy aXRlID09IERMQk9XX0RNTF9BREFQVElWRSkKKwlpZiAoRExCT1dfSVNfRE1MX0FEQVBUSVZFKHBv b2xfY29uZmlnLT5kaXNhYmxlX2xvYWRfYmFsYW5jZV9vbl93cml0ZSkpCiAJewogCQkvKiBTZXQv VW5zZXQgdHJhbnNhY3Rpb24gc3RhdHVzIGZsYWdzICovCiAJCWlmIChJc0Eobm9kZSwgVHJhbnNh Y3Rpb25TdG10KSkKQEAgLTE5NjYsNiArMTk4MSw0NSBAQCBkbWxfYWRhcHRpdmUoTm9kZSAqbm9k ZSwgY2hhciAqcXVlcnkpCiAJCQl9CiAJCQllbHNlIGlmIChpc19jb21taXRfb3Jfcm9sbGJhY2tf cXVlcnkobm9kZSkpCiAJCQl7CisJCQkJLyoKKwkJCQkgKiBGb3IgZG1sX2FkYXB0aXZlX2dsb2Jh bDogb24gQ09NTUlULCBmbHVzaCB0aGUgYWNjdW11bGF0ZWQKKwkJCQkgKiB0YWJsZSB3cml0ZXMg dG8gc2hhcmVkIG1lbW9yeS4gIE9uIFJPTExCQUNLLCBza2lwIC0tIHRoZQorCQkJCSAqIHdyaXRl cyBuZXZlciBjb21taXR0ZWQgc28gbm8gc3RhbGUtcmVhZCByaXNrIGV4aXN0cy4gIFRoaXMKKwkJ CQkgKiBwcmV2ZW50cyBwb2xsdXRpbmcgdGhlIHRhYmxlIG1hcCB3aXRoIHJvbGxlZC1iYWNrCisJ CQkJICogdHJhbnNhY3Rpb25zLgorCQkJCSAqLworCQkJCWludAkJCWRsYm93ID0KKwkJCQkJcG9v bF9jb25maWctPmRpc2FibGVfbG9hZF9iYWxhbmNlX29uX3dyaXRlOworCQkJCUxpc3QJICAgKnds aXN0ID0KKwkJCQkJc2Vzc2lvbl9jb250ZXh0LT50cmFuc2FjdGlvbl90ZW1wX3dyaXRlX2xpc3Q7 CisKKwkJCQlpZiAoZGxib3cgPT0gRExCT1dfRE1MX0FEQVBUSVZFX0dMT0JBTCAmJgorCQkJCQlp c19jb21taXRfcXVlcnkobm9kZSkgJiYKKwkJCQkJd2xpc3QgIT0gTklMKQorCQkJCXsKKwkJCQkJ TGlzdENlbGwgICAqY2VsbDsKKwkJCQkJaW50CQkJZGJvaWQ7CisKKwkJCQkJZGJvaWQgPQorCQkJ CQkJcG9vbF90cmFja190YWJsZV9tdXRhdGlvbl9nZXRfZGF0YWJhc2Vfb2lkKCk7CisJCQkJCWlm IChkYm9pZCA+IDApCisJCQkJCXsKKwkJCQkJCWZvcmVhY2goY2VsbCwgd2xpc3QpCisJCQkJCQl7 CisJCQkJCQkJY2hhcgkgICAqdG5hbWU7CisJCQkJCQkJaW50CQkJdG9pZDsKKworCQkJCQkJCXRu YW1lID0gKGNoYXIgKikgbGZpcnN0KGNlbGwpOworCQkJCQkJCXRvaWQgPQorCQkJCQkJCQlwb29s X3RhYmxlX25hbWVfdG9fb2lkKHRuYW1lKTsKKworCQkJCQkJCWlmICh0b2lkID4gMCkKKwkJCQkJ CQkJcG9vbF90cmFja190YWJsZV9tdXRhdGlvbl9tYXJrX3RhYmxlX3dyaXR0ZW4oCisJCQkJCQkJ CQkJCQkJCQkJCQkJIHRvaWQsIGRib2lkKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwogCQkJ CXNlc3Npb25fY29udGV4dC0+aXNfaW5fdHJhbnNhY3Rpb24gPSBmYWxzZTsKIAogCQkJCWlmIChz ZXNzaW9uX2NvbnRleHQtPnRyYW5zYWN0aW9uX3RlbXBfd3JpdGVfbGlzdCAhPSBOSUwpCkBAIC0y MDA4LDcgKzIwNjIsNyBAQCB3aGVyZV90b19zZW5kX21haW5fcmVwbGljYShQT09MX1FVRVJZX0NP TlRFWFQgKnF1ZXJ5X2NvbnRleHQsIGNoYXIgKnF1ZXJ5LCBOb2RlCiAJc2Vzc2lvbl9jb250ZXh0 ID0gcG9vbF9nZXRfc2Vzc2lvbl9jb250ZXh0KGZhbHNlKTsKIAliYWNrZW5kID0gc2Vzc2lvbl9j b250ZXh0LT5iYWNrZW5kOwogCi0JLyogCisJLyoKIAkgKiBDb2xsZWN0L2Rpc2NhcmQgaW5mb3Jt YXRpb24gZm9yIGRpc2FibGVfbG9hZF9iYWxhbmNlX29uX3dyaXRlID0KIAkgKiBkbWxfYWRhcHRp dmUgY2FzZS4KIAkgKi8KQEAgLTIwMjIsNiArMjA3NiwyMCBAQCB3aGVyZV90b19zZW5kX21haW5f cmVwbGljYShQT09MX1FVRVJZX0NPTlRFWFQgKnF1ZXJ5X2NvbnRleHQsIGNoYXIgKnF1ZXJ5LCBO b2RlCiAJaWYgKGRlc3QgPT0gUE9PTF9QUklNQVJZKQogCXsKIAkJcG9vbF9zZXRfbm9kZV90b19i ZV9zZW50KHF1ZXJ5X2NvbnRleHQsIFBSSU1BUllfTk9ERV9JRCk7CisKKwkJLyoKKwkJICogUmVz b2x2ZSB0YWJsZSBhbmQgZGF0YWJhc2UgT0lEcyBub3cgdG8gcG9wdWxhdGUgcmVsY2FjaGUuIFRo aXMKKwkJICogYXZvaWRzIHBvdGVudGlhbCBoYW5ncyBpbiBDb21tYW5kQ29tcGxldGUgd2hlcmUg d2Ugc2hvdWxkbid0IGJlCisJCSAqIHJ1bm5pbmcgbmV3IHF1ZXJpZXMgYWdhaW5zdCB0aGUgYmFj a2VuZC4KKwkJICovCisJCWlmIChwb29sX2NvbmZpZy0+ZGlzYWJsZV9sb2FkX2JhbGFuY2Vfb25f d3JpdGUgPT0KKwkJCURMQk9XX0RNTF9BREFQVElWRV9HTE9CQUwpCisJCXsKKwkJCWludAkJICAg Km9pZHM7CisKKwkJCXBvb2xfZXh0cmFjdF90YWJsZV9vaWRzKG5vZGUsICZvaWRzKTsKKwkJCXBv b2xfdHJhY2tfdGFibGVfbXV0YXRpb25fZ2V0X2RhdGFiYXNlX29pZCgpOworCQl9CiAJfQogCS8q IFNob3VsZCBiZSBzZW50IHRvIGJvdGggcHJpbWFyeSBhbmQgc3RhbmRieT8gKi8KIAllbHNlIGlm IChkZXN0ID09IFBPT0xfQk9USCkKQEAgLTIxNTEsNiArMjIxOSwxNTMgQEAgd2hlcmVfdG9fc2Vu ZF9tYWluX3JlcGxpY2EoUE9PTF9RVUVSWV9DT05URVhUICpxdWVyeV9jb250ZXh0LCBjaGFyICpx dWVyeSwgTm9kZQogCQkJCXsKIAkJCQkJcG9vbF9zZXRfbm9kZV90b19iZV9zZW50KHF1ZXJ5X2Nv bnRleHQsIFBSSU1BUllfTk9ERV9JRCk7CiAJCQkJfQorCisJCQkJLyoKKwkJCQkgKiBDaGVjayB0 cmFjayB0YWJsZSBtdXRhdGlvbiBmb3IgcmVjZW50bHkgd3JpdHRlbiB0YWJsZXMuICBJZgorCQkJ CSAqIGluIGNvbGQgc3RhcnQgb3IgYW55IHRhYmxlIHdhcyByZWNlbnRseSB3cml0dGVuLCByb3V0 ZSB0bworCQkJCSAqIHByaW1hcnkgdG8gYXZvaWQgc3RhbGUgcmVhZHMuCisJCQkJICovCisJCQkJ ZWxzZSBpZiAocG9vbF9jb25maWctPmRpc2FibGVfbG9hZF9iYWxhbmNlX29uX3dyaXRlID09CisJ CQkJCQkgRExCT1dfRE1MX0FEQVBUSVZFX0dMT0JBTCkKKwkJCQl7CisJCQkJCWJvb2wJCWZvcmNl X3ByaW1hcnkgPSBmYWxzZTsKKwkJCQkJaW50CQkJbGJfbm9kZTsKKwkJCQkJUE9PTF9RVUVSWV9D T05URVhUICpxY3R4ID0KKwkJCQkJCXNlc3Npb25fY29udGV4dC0+cXVlcnlfY29udGV4dDsKKwor CQkJCQlpZiAocG9vbF90cmFja190YWJsZV9tdXRhdGlvbl9pbl9jb2xkX3N0YXJ0KCkpCisJCQkJ CXsKKwkJCQkJCWVyZXBvcnQoREVCVUcxLAorCQkJCQkJCQkoZXJybXNnKCJjb3VsZCBub3QgbG9h ZCBiYWxhbmNlIgorCQkJCQkJCQkJCSIgYmVjYXVzZSBvZiB0cmFjayB0YWJsZSIKKwkJCQkJCQkJ CQkiIG11dGF0aW9uIGNvbGQgc3RhcnQiKSwKKwkJCQkJCQkJIGVycmRldGFpbCgiZGVzdGluYXRp b24gPSBQUklNQVJZIgorCQkJCQkJCQkJCSAgICIgZm9yIHF1ZXJ5PSBcIiVzXCIiLAorCQkJCQkJ CQkJCSAgIHF1ZXJ5KSkpOworCQkJCQkJZm9yY2VfcHJpbWFyeSA9IHRydWU7CisJCQkJCX0KKwkJ CQkJZWxzZQorCQkJCQl7CisJCQkJCQlTZWxlY3RDb250ZXh0IGN0eDsKKwkJCQkJCWludAkJCWRi b2lkOworCQkJCQkJaW50CQkJbnVtX29pZHM7CisJCQkJCQlpbnQJCQlpOworCisJCQkJCQltZW1z ZXQoJmN0eCwgMCwgc2l6ZW9mKGN0eCkpOworCQkJCQkJbnVtX29pZHMgPQorCQkJCQkJCXBvb2xf ZXh0cmFjdF90YWJsZV9vaWRzX2Zyb21fc2VsZWN0X3N0bXQoCisJCQkJCQkJCQkJCQkJCQkJCSBu b2RlLCAmY3R4KTsKKwkJCQkJCWlmIChudW1fb2lkcyA+IDApCisJCQkJCQl7CisJCQkJCQkJZGJv aWQgPQorCQkJCQkJCQlwb29sX3RyYWNrX3RhYmxlX211dGF0aW9uX2dldF9kYXRhYmFzZV9vaWQo KTsKKworCQkJCQkJCWlmIChkYm9pZCA8PSAwKQorCQkJCQkJCXsKKwkJCQkJCQkJZXJlcG9ydChE RUJVRzEsCisJCQkJCQkJCQkJKGVycm1zZygiY291bGQgbm90IGxvYWQiCisJCQkJCQkJCQkJCQki IGJhbGFuY2UgYmVjYXVzZSIKKwkJCQkJCQkJCQkJCSIgZGF0YWJhc2Ugb2lkIHdhcyIKKwkJCQkJ CQkJCQkJCSIgdW5hdmFpbGFibGUiKSwKKwkJCQkJCQkJCQkgZXJyZGV0YWlsKCJkZXN0aW5hdGlv biIKKwkJCQkJCQkJCQkJCSAgICIgPSBQUklNQVJZIGZvciIKKwkJCQkJCQkJCQkJCSAgICIgcXVl cnk9IFwiJXNcIiIsCisJCQkJCQkJCQkJCQkgICBxdWVyeSkpKTsKKwkJCQkJCQkJZm9yY2VfcHJp bWFyeSA9IHRydWU7CisJCQkJCQkJfQorCQkJCQkJCWVsc2UKKwkJCQkJCQl7CisJCQkJCQkJCWZv ciAoaSA9IDA7IGkgPCBudW1fb2lkczsgaSsrKQorCQkJCQkJCQl7CisJCQkJCQkJCQlib29sCQlz dGFsZTsKKworCQkJCQkJCQkJc3RhbGUgPQorCQkJCQkJCQkJCXBvb2xfdHJhY2tfdGFibGVfbXV0 YXRpb25fdGFibGVfaXNfc3RhbGUoCisJCQkJCQkJCQkJCQkJCQkJCQkJCSBjdHgudGFibGVfb2lk c1tpXSwKKwkJCQkJCQkJCQkJCQkJCQkJCQkJIGRib2lkKTsKKwkJCQkJCQkJCWlmIChzdGFsZSkK KwkJCQkJCQkJCXsKKwkJCQkJCQkJCQllcmVwb3J0KERFQlVHMSwKKwkJCQkJCQkJCQkJCShlcnJt c2coImNvdWxkIG5vdCBsb2FkIgorCQkJCQkJCQkJCQkJCQkiIGJhbGFuY2UgYmVjYXVzZSIKKwkJ CQkJCQkJCQkJCQkJIiB0YWJsZSBcIiVzXCIgd2FzIgorCQkJCQkJCQkJCQkJCQkiIHJlY2VudGx5 IHdyaXR0ZW4iLAorCQkJCQkJCQkJCQkJCQljdHgudGFibGVfbmFtZXNbaV0pLAorCQkJCQkJCQkJ CQkJIGVycmRldGFpbCgiZGVzdGluYXRpb24iCisJCQkJCQkJCQkJCQkJCSAgICIgPSBQUklNQVJZ IGZvciIKKwkJCQkJCQkJCQkJCQkJICAgIiBxdWVyeT0gXCIlc1wiIiwKKwkJCQkJCQkJCQkJCQkJ ICAgcXVlcnkpKSk7CisJCQkJCQkJCQkJZm9yY2VfcHJpbWFyeSA9IHRydWU7CisJCQkJCQkJCQkJ YnJlYWs7CisJCQkJCQkJCQl9CisJCQkJCQkJCX0KKwkJCQkJCQl9CisJCQkJCQl9CisJCQkJCX0K KworCQkJCQlpZiAoZm9yY2VfcHJpbWFyeSkKKwkJCQkJeworCQkJCQkJcG9vbF9zZXRfbm9kZV90 b19iZV9zZW50KAorCQkJCQkJCQkJCQkJIHF1ZXJ5X2NvbnRleHQsCisJCQkJCQkJCQkJCQkgUFJJ TUFSWV9OT0RFX0lEKTsKKwkJCQkJfQorCQkJCQllbHNlCisJCQkJCXsKKwkJCQkJCWlmIChwb29s X2NvbmZpZy0+c3RhdGVtZW50X2xldmVsX2xvYWRfYmFsYW5jZSkKKwkJCQkJCXsKKwkJCQkJCQlz ZXNzaW9uX2NvbnRleHQtPmxvYWRfYmFsYW5jZV9ub2RlX2lkID0KKwkJCQkJCQkJc2VsZWN0X2xv YWRfYmFsYW5jaW5nX25vZGUoKTsKKwkJCQkJCX0KKworCQkJCQkJLyoKKwkJCQkJCSAqIElmIHJl cGxpY2F0aW9uIGRlbGF5IGlzIHRvbyBtdWNoLCBhbmQKKwkJCQkJCSAqIHByZWZlcl9sb3dlcl9k ZWxheV9zdGFuZGJ5IGlzIHRydWUgdGhlbiBlbGVjdCB0aGUKKwkJCQkJCSAqIGxvd2VzdC1kZWxh eWVkIG5vZGUsIG90aGVyd2lzZSBzZW5kIHRvIHByaW1hcnkuCisJCQkJCQkgKi8KKwkJCQkJCWxi X25vZGUgPQorCQkJCQkJCXNlc3Npb25fY29udGV4dC0+bG9hZF9iYWxhbmNlX25vZGVfaWQ7CisJ CQkJCQlpZiAoU1RSRUFNICYmCisJCQkJCQkJY2hlY2tfcmVwbGljYXRpb25fZGVsYXkobGJfbm9k ZSkpCisJCQkJCQl7CisJCQkJCQkJZXJlcG9ydChERUJVRzEsCisJCQkJCQkJCQkoZXJybXNnKCJj b3VsZCBub3QgbG9hZCIKKwkJCQkJCQkJCQkJIiBiYWxhbmNlIGJlY2F1c2Ugb2YiCisJCQkJCQkJ CQkJCSIgdG9vIG11Y2ggcmVwbGljYXRpb24iCisJCQkJCQkJCQkJCSIgZGVsYXkiKSwKKwkJCQkJ CQkJCSBlcnJkZXRhaWwoImRlc3RpbmF0aW9uIgorCQkJCQkJCQkJCQkgICAiID0gJWQgZm9yIgor CQkJCQkJCQkJCQkgICAiIHF1ZXJ5PSBcIiVzXCIiLAorCQkJCQkJCQkJCQkgICBkZXN0LCBxdWVy eSkpKTsKKworCQkJCQkJCWlmIChwb29sX2NvbmZpZy0+cHJlZmVyX2xvd2VyX2RlbGF5X3N0YW5k YnkpCisJCQkJCQkJeworCQkJCQkJCQlsYl9ub2RlID0KKwkJCQkJCQkJCXNlbGVjdF9sb2FkX2Jh bGFuY2luZ19ub2RlKCk7CisJCQkJCQkJCXNlc3Npb25fY29udGV4dC0+bG9hZF9iYWxhbmNlX25v ZGVfaWQgPQorCQkJCQkJCQkJbGJfbm9kZTsKKwkJCQkJCQkJcWN0eC0+bG9hZF9iYWxhbmNlX25v ZGVfaWQgPQorCQkJCQkJCQkJbGJfbm9kZTsKKwkJCQkJCQkJcG9vbF9zZXRfbm9kZV90b19iZV9z ZW50KAorCQkJCQkJCQkJCQkJCQkgcXVlcnlfY29udGV4dCwKKwkJCQkJCQkJCQkJCQkJIGxiX25v ZGUpOworCQkJCQkJCX0KKwkJCQkJCQllbHNlCisJCQkJCQkJeworCQkJCQkJCQlwb29sX3NldF9u b2RlX3RvX2JlX3NlbnQoCisJCQkJCQkJCQkJCQkJCSBxdWVyeV9jb250ZXh0LAorCQkJCQkJCQkJ CQkJCQkgUFJJTUFSWV9OT0RFX0lEKTsKKwkJCQkJCQl9CisJCQkJCQl9CisJCQkJCQllbHNlCisJ CQkJCQl7CisJCQkJCQkJcWN0eC0+bG9hZF9iYWxhbmNlX25vZGVfaWQgPQorCQkJCQkJCQlzZXNz aW9uX2NvbnRleHQtPmxvYWRfYmFsYW5jZV9ub2RlX2lkOworCQkJCQkJCXBvb2xfc2V0X25vZGVf dG9fYmVfc2VudCgKKwkJCQkJCQkJCQkJCQkgcXVlcnlfY29udGV4dCwKKwkJCQkJCQkJCQkJCQkg cWN0eC0+bG9hZF9iYWxhbmNlX25vZGVfaWQpOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQogCQkJ CWVsc2UKIAkJCQl7CiAJCQkJCWlmIChwb29sX2NvbmZpZy0+c3RhdGVtZW50X2xldmVsX2xvYWRf YmFsYW5jZSkKQEAgLTIxNzEsNyArMjM4Niw4IEBAIHdoZXJlX3RvX3NlbmRfbWFpbl9yZXBsaWNh KFBPT0xfUVVFUllfQ09OVEVYVCAqcXVlcnlfY29udGV4dCwgY2hhciAqcXVlcnksIE5vZGUKIAkJ CQkJCQkJIGVycmRldGFpbCgiZGVzdGluYXRpb24gPSAlZCBmb3IgcXVlcnk9IFwiJXNcIiIsIGRl c3QsIHF1ZXJ5KSkpOwogCiAJCQkJCQkvKgotCQkJCQkJICogSWYgcHJlZmVyX2xvd2VyX2RlbGF5 X3N0YW5kYnkgaXMgb24sIGNob29zZSBsb3dlciBkZWxheSBzdGFuZGJ5LgorCQkJCQkJICogSWYg cHJlZmVyX2xvd2VyX2RlbGF5X3N0YW5kYnkgaXMgb24sIGNob29zZSBsb3dlcgorCQkJCQkJICog ZGVsYXkgc3RhbmRieS4KIAkJCQkJCSAqLwogCQkJCQkJaWYgKHBvb2xfY29uZmlnLT5wcmVmZXJf bG93ZXJfZGVsYXlfc3RhbmRieSkKIAkJCQkJCXsKQEAgLTIxODEsNyArMjM5Nyw4IEBAIHdoZXJl X3RvX3NlbmRfbWFpbl9yZXBsaWNhKFBPT0xfUVVFUllfQ09OVEVYVCAqcXVlcnlfY29udGV4dCwg Y2hhciAqcXVlcnksIE5vZGUKIAkJCQkJCQlzZXNzaW9uX2NvbnRleHQtPnF1ZXJ5X2NvbnRleHQt PmxvYWRfYmFsYW5jZV9ub2RlX2lkID0gc2Vzc2lvbl9jb250ZXh0LT5sb2FkX2JhbGFuY2Vfbm9k ZV9pZDsKIAkJCQkJCQlwb29sX3NldF9ub2RlX3RvX2JlX3NlbnQocXVlcnlfY29udGV4dCwgc2Vz c2lvbl9jb250ZXh0LT5xdWVyeV9jb250ZXh0LT5sb2FkX2JhbGFuY2Vfbm9kZV9pZCk7CiAJCQkJ CQl9Ci0JCQkJCQllbHNlCS8qIGRlbGF5IGlzIHRvbyBtdWNoLiBwcmVmZXIgdG8gc2VuZCB0byBw cmltYXJ5ICovCisJCQkJCQllbHNlCS8qIGRlbGF5IGlzIHRvbyBtdWNoLiBwcmVmZXIgdG8gc2Vu ZCB0bworCQkJCQkJCQkgKiBwcmltYXJ5ICovCiAJCQkJCQl7CiAJCQkJCQkJcG9vbF9zZXRfbm9k ZV90b19iZV9zZW50KHF1ZXJ5X2NvbnRleHQsIFBSSU1BUllfTk9ERV9JRCk7CiAJCQkJCQl9CkBA IC0yMTkxLDcgKzI0MDgsNyBAQCB3aGVyZV90b19zZW5kX21haW5fcmVwbGljYShQT09MX1FVRVJZ X0NPTlRFWFQgKnF1ZXJ5X2NvbnRleHQsIGNoYXIgKnF1ZXJ5LCBOb2RlCiAJCQkJCSAqIE5vdCBz dHJlYW1pbmcgcmVwbGljYXRpb24gbW9kZSwgb3IgZGVsYXlfdGhyZXNob2xkIGlzIDAKIAkJCQkJ ICogb3IgcmVwbGljYXRpb24gZGVsYXkgaXMgc21hbGwgZW5vdWdoLgogCQkJCQkgKi8KLQkJCQkJ ZWxzZQkKKwkJCQkJZWxzZQogCQkJCQl7CiAJCQkJCQlzZXNzaW9uX2NvbnRleHQtPnF1ZXJ5X2Nv bnRleHQtPmxvYWRfYmFsYW5jZV9ub2RlX2lkID0gc2Vzc2lvbl9jb250ZXh0LT5sb2FkX2JhbGFu Y2Vfbm9kZV9pZDsKIAkJCQkJCXBvb2xfc2V0X25vZGVfdG9fYmVfc2VudChxdWVyeV9jb250ZXh0 LApkaWZmIC0tZ2l0IGEvc3JjL2NvbnRleHQvcG9vbF9zZXNzaW9uX2NvbnRleHQuYyBiL3NyYy9j b250ZXh0L3Bvb2xfc2Vzc2lvbl9jb250ZXh0LmMKaW5kZXggZGVkNDFjN2ZjLi4wNWQwYjYzNWIg MTAwNjQ0Ci0tLSBhL3NyYy9jb250ZXh0L3Bvb2xfc2Vzc2lvbl9jb250ZXh0LmMKKysrIGIvc3Jj L2NvbnRleHQvcG9vbF9zZXNzaW9uX2NvbnRleHQuYwpAQCAtNTMyLDcgKzUzMiw3IEBAIGR1bXBf c2VudF9tZXNzYWdlKGNoYXIgKmNhbGxlciwgUE9PTF9TRU5UX01FU1NBR0UgKm0pCiBzdGF0aWMg dm9pZAogZG1sX2FkYXB0aXZlX2luaXQodm9pZCkKIHsKLQlpZiAocG9vbF9jb25maWctPmRpc2Fi bGVfbG9hZF9iYWxhbmNlX29uX3dyaXRlID09IERMQk9XX0RNTF9BREFQVElWRSkKKwlpZiAoRExC T1dfSVNfRE1MX0FEQVBUSVZFKHBvb2xfY29uZmlnLT5kaXNhYmxlX2xvYWRfYmFsYW5jZV9vbl93 cml0ZSkpCiAJewogCQlzZXNzaW9uX2NvbnRleHQtPmlzX2luX3RyYW5zYWN0aW9uID0gZmFsc2U7 CiAJCXNlc3Npb25fY29udGV4dC0+dHJhbnNhY3Rpb25fdGVtcF93cml0ZV9saXN0ID0gTklMOwpA QCAtNTQyLDcgKzU0Miw5IEBAIGRtbF9hZGFwdGl2ZV9pbml0KHZvaWQpCiBzdGF0aWMgdm9pZAog ZG1sX2FkYXB0aXZlX2Rlc3Ryb3kodm9pZCkKIHsKLQlpZiAocG9vbF9jb25maWctPmRpc2FibGVf bG9hZF9iYWxhbmNlX29uX3dyaXRlID09IERMQk9XX0RNTF9BREFQVElWRSAmJiBzZXNzaW9uX2Nv bnRleHQpCisJaWYgKERMQk9XX0lTX0RNTF9BREFQVElWRSgKKwkJCQkJCQkgIHBvb2xfY29uZmln LT5kaXNhYmxlX2xvYWRfYmFsYW5jZV9vbl93cml0ZSkgJiYKKwkJc2Vzc2lvbl9jb250ZXh0KQog CXsKIAkJaWYgKHNlc3Npb25fY29udGV4dC0+dHJhbnNhY3Rpb25fdGVtcF93cml0ZV9saXN0ICE9 IE5JTCkKIAkJCWxpc3RfZnJlZV9kZWVwKHNlc3Npb25fY29udGV4dC0+dHJhbnNhY3Rpb25fdGVt cF93cml0ZV9saXN0KTsKQEAgLTczOCwxMCArNzQwLDEzIEBAIHZvaWQKIHBvb2xfc2V0X3dyaXRp bmdfdHJhbnNhY3Rpb24odm9pZCkKIHsKIAkvKgotCSAqIElmIGRpc2FibGVfdHJhbnNhY3Rpb25f b25fd3JpdGUgaXMgJ29mZicgb3IgJ2RtbF9hZGFwdGl2ZScsIHRoZW4gbmV2ZXIKLQkgKiB0dXJu IG9uIHdyaXRpbmcgdHJhbnNhY3Rpb24gZmxhZy4KKwkgKiBJZiBkaXNhYmxlX2xvYWRfYmFsYW5j ZV9vbl93cml0ZSBpcyAnb2ZmJyBvciAnZG1sX2FkYXB0aXZlJyBvcgorCSAqICdkbWxfYWRhcHRp dmVfZ2xvYmFsJywgdGhlbiBuZXZlciB0dXJuIG9uIHdyaXRpbmcgdHJhbnNhY3Rpb24gZmxhZy4K IAkgKi8KLQlpZiAocG9vbF9jb25maWctPmRpc2FibGVfbG9hZF9iYWxhbmNlX29uX3dyaXRlICE9 IERMQk9XX09GRiAmJiBwb29sX2NvbmZpZy0+ZGlzYWJsZV9sb2FkX2JhbGFuY2Vfb25fd3JpdGUg IT0gRExCT1dfRE1MX0FEQVBUSVZFKQorCWlmIChwb29sX2NvbmZpZy0+ZGlzYWJsZV9sb2FkX2Jh bGFuY2Vfb25fd3JpdGUgIT0KKwkJRExCT1dfT0ZGICYmCisJCSFETEJPV19JU19ETUxfQURBUFRJ VkUoCisJCQkJCQkJICAgcG9vbF9jb25maWctPmRpc2FibGVfbG9hZF9iYWxhbmNlX29uX3dyaXRl KSkKIAl7CiAJCXBvb2xfZ2V0X3Nlc3Npb25fY29udGV4dChmYWxzZSktPndyaXRpbmdfdHJhbnNh Y3Rpb24gPSB0cnVlOwogCQllcmVwb3J0KERFQlVHNSwKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L3Bvb2wuaCBiL3NyYy9pbmNsdWRlL3Bvb2wuaAppbmRleCA2NTkwN2RjZjEuLjBlOTAxNjkxYSAx MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcG9vbC5oCisrKyBiL3NyYy9pbmNsdWRlL3Bvb2wuaApA QCAtNDI0LDcgKzQyNCw3IEBAIHR5cGVkZWYgZW51bQogI2RlZmluZSBNaW4oeCwgeSkJCSgoeCkg PCAoeSkgPyAoeCkgOiAoeSkpCiAKIAotI2RlZmluZSBNQVhfTlVNX1NFTUFQSE9SRVMJCTgKKyNk ZWZpbmUgTUFYX05VTV9TRU1BUEhPUkVTCQkxMAogI2RlZmluZSBDT05OX0NPVU5URVJfU0VNCQkw CiAjZGVmaW5lIFJFUVVFU1RfSU5GT19TRU0JCTEKICNkZWZpbmUgUVVFUllfQ0FDSEVfU1RBVFNf U0VNCTIKQEAgLTQzNCw2ICs0MzQsOCBAQCB0eXBlZGVmIGVudW0KICNkZWZpbmUgRk9MTE9XX1BS SU1BUllfU0VNCQk2CiAjZGVmaW5lIE1BSU5fRVhJVF9IQU5ETEVSX1NFTQk3CS8qIHVzZWQgaW4g ZXhpdF9oYW5kZXIgaW4gcGdwb29sIG1haW4KIAkJCQkJCQkJCSAqIHByb2Nlc3MgKi8KKyNkZWZp bmUgVFJBQ0tfVEFCTEVfTVVUQVRJT05fVEFCTEVfU0VNCTgKKyNkZWZpbmUgVFJBQ0tfVEFCTEVf TVVUQVRJT05fUVVFUllfU0VNCTkKICNkZWZpbmUgTUFYX1JFUVVFU1RfUVVFVUVfU0laRQkxMAog CiAjZGVmaW5lIE1BWF9TRUNfV0FJVF9GT1JfQ0xVU1RFUl9UUkFOU0FDVElPTiAxMCAvKiB0aW1l IGluIHNlY29uZHMgdG8ga2VlcApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcG9vbF9jb25maWcu aCBiL3NyYy9pbmNsdWRlL3Bvb2xfY29uZmlnLmgKaW5kZXggOWEzOTdkMTY2Li5hZTUwN2RjNjAg MTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3Bvb2xfY29uZmlnLmgKKysrIGIvc3JjL2luY2x1ZGUv cG9vbF9jb25maWcuaApAQCAtMTA1LDkgKzEwNSwxMyBAQCB0eXBlZGVmIGVudW0gRExCT1dfT1BU SU9OCiAJRExCT1dfVFJBTlNBQ1RJT04sCiAJRExCT1dfVFJBTlNfVFJBTlNBQ1RJT04sCiAJRExC T1dfQUxXQVlTLAotCURMQk9XX0RNTF9BREFQVElWRQorCURMQk9XX0RNTF9BREFQVElWRSwKKwlE TEJPV19ETUxfQURBUFRJVkVfR0xPQkFMCiB9IERMQk9XX09QVElPTjsKIAorI2RlZmluZSBETEJP V19JU19ETUxfQURBUFRJVkUob3B0KSBcCisJKChvcHQpID09IERMQk9XX0RNTF9BREFQVElWRSB8 fCAob3B0KSA9PSBETEJPV19ETUxfQURBUFRJVkVfR0xPQkFMKQorCiB0eXBlZGVmIGVudW0gUkVM UVRBUkdFVF9PUFRJT04KIHsKIAlSRUxRVEFSR0VUX1BSSU1BUlkgPSAxLApAQCAtMzYzLDggKzM2 NywyNiBAQCB0eXBlZGVmIHN0cnVjdAogCWNoYXIJICAgKnNyX2NoZWNrX3Bhc3N3b3JkOwkvKiBw YXNzd29yZCBmb3Igc3JfY2hlY2tfdXNlciAqLwogCWNoYXIJICAgKnNyX2NoZWNrX2RhdGFiYXNl OwkvKiBQb3N0Z3JlU1FMIGRhdGFiYXNlIG5hbWUgZm9yIHN0cmVhbWluZwogCQkJCQkJCQkJICog cmVwbGljYXRpb24gY2hlY2sgKi8KLQljaGFyCSAgICpyZXBsaWNhdGlvbl9kZWxheV9zb3VyY2Vf Y21kOwkvKiBleHRlcm5hbCBjb21tYW5kIGZvciByZXBsaWNhdGlvbiBkZWxheSAqLwotCWludAkJ CXJlcGxpY2F0aW9uX2RlbGF5X3NvdXJjZV90aW1lb3V0OwkvKiB0aW1lb3V0IGZvciBleHRlcm5h bCBjb21tYW5kIGluIHNlY29uZHMgKi8KKwljaGFyCSAgICpyZXBsaWNhdGlvbl9kZWxheV9zb3Vy Y2VfY21kOwkvKiBleHRlcm5hbCBjb21tYW5kIGZvcgorCQkJCQkJCQkJCQkJICogcmVwbGljYXRp b24gZGVsYXkgKi8KKwlpbnQJCQlyZXBsaWNhdGlvbl9kZWxheV9zb3VyY2VfdGltZW91dDsJLyog dGltZW91dCBmb3IgZXh0ZXJuYWwKKwkJCQkJCQkJCQkJCQkgKiBjb21tYW5kIGluIHNlY29uZHMg Ki8KKworCS8qIFRyYWNrIHRhYmxlIG11dGF0aW9uIGNvbmZpZ3VyYXRpb24gKi8KKwlkb3VibGUJ CXRyYWNrX3RhYmxlX211dGF0aW9uX3R0bF9mYWN0b3I7CS8qIFRUTCBtdWx0aXBsaWVyIGZvcgor CQkJCQkJCQkJCQkJCSAqIHJlcGxpY2F0aW9uIGRlbGF5ICovCisJaW50CQkJdHJhY2tfdGFibGVf bXV0YXRpb25fbWF4X3N0YWxlbmVzczsgLyogbWF4IHN0YWxlbmVzcyBkdXJhdGlvbgorCQkJCQkJ CQkJCQkJCSAqIG1zICovCisJaW50CQkJdHJhY2tfdGFibGVfbXV0YXRpb25fY29sZF9zdGFydF9k dXJhdGlvbjsJLyogY29sZCBzdGFydCBkdXJhdGlvbgorCQkJCQkJCQkJCQkJCQkJICogbXMgKi8K KwlpbnQJCQl0cmFja190YWJsZV9tdXRhdGlvbl90YWJsZV9idWNrZXRzOyAvKiBoYXNoIGJ1Y2tl dHMgZm9yIHRhYmxlCisJCQkJCQkJCQkJCQkJICogbWFwICovCisJaW50CQkJdHJhY2tfdGFibGVf bXV0YXRpb25fdGFibGVfc2l6ZTsJLyogbWF4IHRhYmxlIG1hcCBlbnRyaWVzICovCisJaW50CQkJ dHJhY2tfdGFibGVfbXV0YXRpb25fcXVlcnlfYnVja2V0czsgLyogaGFzaCBidWNrZXRzIGZvciBx dWVyeQorCQkJCQkJCQkJCQkJCSAqIGNhY2hlICovCisJaW50CQkJdHJhY2tfdGFibGVfbXV0YXRp b25fcXVlcnlfcGFyc2VfY2FjaGVfc2l6ZTsJLyogbWF4IHF1ZXJ5IGNhY2hlCisJCQkJCQkJCQkJ CQkJCQkJICogZW50cmllcyAqLworCiAJY2hhcgkgICAqZmFpbG92ZXJfY29tbWFuZDsJLyogZXhl Y3V0ZSBjb21tYW5kIHdoZW4gZmFpbG92ZXIgaGFwcGVucyAqLwogCWNoYXIJICAgKmZvbGxvd19w cmltYXJ5X2NvbW1hbmQ7IC8qIGV4ZWN1dGUgY29tbWFuZCB3aGVuIGZhaWxvdmVyIGlzCiAJCQkJ CQkJCQkJICogZW5kZWQgKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL3Bvb2xfdHJh Y2tfdGFibGVfbXV0YXRpb24uaCBiL3NyYy9pbmNsdWRlL3V0aWxzL3Bvb2xfdHJhY2tfdGFibGVf bXV0YXRpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAuLjI4ZGVjMWM4 YQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL3Bvb2xfdHJhY2tfdGFibGVf bXV0YXRpb24uaApAQCAtMCwwICsxLDI0NyBAQAorLyogLSotcGdzcWwtYy0qLSAqLworLyoKKyAq IHBncG9vbDogYSBsYW5ndWFnZSBpbmRlcGVuZGVudCBjb25uZWN0aW9uIHBvb2wgc2VydmVyIGZv ciBQb3N0Z3JlU1FMCisgKiB3cml0dGVuIGJ5IFRhdHN1byBJc2hpaQorICoKKyAqIENvcHlyaWdo dCAoYykgMjAwMy0yMDI2CVBnUG9vbCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKiBQ ZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3 YXJlIGFuZAorICogaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0 IGZlZSBpcyBoZXJlYnkKKyAqIGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHly aWdodCBub3RpY2UgYXBwZWFyIGluIGFsbAorICogY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdCBj b3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24KKyAqIG5vdGljZSBhcHBlYXIgaW4g c3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiB0aGUKKyAqIGF1 dGhvciBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0 bworICogZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0 dGVuIHByaW9yCisgKiBwZXJtaXNzaW9uLiBUaGUgYXV0aG9yIG1ha2VzIG5vIHJlcHJlc2VudGF0 aW9ucyBhYm91dCB0aGUKKyAqIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueSBw dXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzCisgKiBpcyIgd2l0aG91dCBleHByZXNzIG9yIGlt cGxpZWQgd2FycmFudHkuCisgKgorICogcG9vbF90cmFja190YWJsZV9tdXRhdGlvbi5oOiBJbi1t ZW1vcnkgdHJhY2tpbmcgb2YKKyAqICAgcmVjZW50bHkgd3JpdHRlbiB0YWJsZXMgdG8gcHJldmVu dCBzdGFsZSByZWFkcy4KKyAqLworCisjaWZuZGVmIFBPT0xfVFJBQ0tfVEFCTEVfTVVUQVRJT05f SAorI2RlZmluZSBQT09MX1RSQUNLX1RBQkxFX01VVEFUSU9OX0gKKworI2luY2x1ZGUgInBvb2wu aCIKKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorCisvKgorICogTWF4aW11bSB0YWJsZSBuYW1lIGxl bmd0aCBpbmNsdWRpbmcgc2NoZW1hOiAic2NoZW1hIi4idGFibGUiCisgKiBVc2luZyBOQU1FREFU QUxFTiAqIDIgKyA0IGZvciBxdW90ZXMgYW5kIGRvdAorICovCisjZGVmaW5lIFRSQUNLX1RBQkxF X01VVEFUSU9OX1RBQkxFX05BTUVfTEVOCShOQU1FREFUQUxFTiAqIDIgKyA0KQorCisvKgorICog TWF4aW11bSBudW1iZXIgb2YgdGFibGVzIHdlIHRyYWNrIHBlciBxdWVyeQorICovCisjZGVmaW5l IFRSQUNLX1RBQkxFX01VVEFUSU9OX01BWF9UQUJMRVNfUEVSX1FVRVJZCTgKKworLyoKKyAqIElu dmFsaWQgaW5kZXggbWFya2VyIGZvciBsaW5rZWQgbGlzdHMKKyAqLworI2RlZmluZSBUUkFDS19U QUJMRV9NVVRBVElPTl9JTlZBTElEX0lOREVYCSgtMSkKKworLyoKKyAqIERlZmF1bHQgVFRMIGlu IG1pY3Jvc2Vjb25kcyAoMTAwbXMpIHVzZWQgd2hlbiByZXBsaWNhdGlvbiBkZWxheSBpcyB1bmtu b3duCisgKi8KKyNkZWZpbmUgVFJBQ0tfVEFCTEVfTVVUQVRJT05fREVGQVVMVF9UVExfVVMJKDEw MCAqIDEwMDApCisKKy8qCisgKiBFbnRyeSBpbiB0aGUgdGFibGUgbXV0YXRpb24gaGFzaCB0YWJs ZSAoa2V5ZWQgYnkgdGFibGUvZGF0YWJhc2Ugb2lkcykKKyAqLwordHlwZWRlZiBzdHJ1Y3QgVHJh Y2tUYWJsZU11dGF0aW9uRW50cnkKK3sKKwlpbnQJCQl0YWJsZV9vaWQ7CQkvKiBUYWJsZSBvaWQg Ki8KKwlpbnQJCQlkYm9pZDsJCQkvKiBEYXRhYmFzZSBvaWQgKi8KKwlzdHJ1Y3QgdGltZXZhbCBm aXJzdF93cml0ZV90aW1lOwkvKiBXaGVuIHRoZSBlbnRyeSB3YXMgZmlyc3QgY3JlYXRlZCAqLwor CXN0cnVjdCB0aW1ldmFsIGxhc3Rfd3JpdGVfdGltZTsgLyogV2hlbiB0aGUgdGFibGUgd2FzIGxh c3Qgd3JpdHRlbiAqLworCXVpbnQzMgkJaGFzaDsJCQkvKiBQcmUtY29tcHV0ZWQgaGFzaCB2YWx1 ZSAqLworCWludAkJCW5leHQ7CQkJLyogTmV4dCBpbiBjb2xsaXNpb24gY2hhaW4gKi8KKwlib29s CQlpbl91c2U7CQkJLyogSXMgdGhpcyBlbnRyeSBpbiB1c2U/ICovCit9IFRyYWNrVGFibGVNdXRh dGlvbkVudHJ5OworCisvKgorICogSGVhZGVyIGZvciB0aGUgdGFibGUgbXV0YXRpb24gaGFzaCB0 YWJsZSBpbiBzaGFyZWQgbWVtb3J5CisgKi8KK3R5cGVkZWYgc3RydWN0IFRyYWNrVGFibGVNdXRh dGlvbkhhc2hUYWJsZQoreworCWludAkJCW51bV9idWNrZXRzOwkvKiBOdW1iZXIgb2YgaGFzaCBi dWNrZXRzICovCisJaW50CQkJbWF4X2VudHJpZXM7CS8qIE1heGltdW0gZW50cmllcyBhbGxvd2Vk ICovCisJaW50CQkJbnVtX2VudHJpZXM7CS8qIEN1cnJlbnQgbnVtYmVyIG9mIGVudHJpZXMgKi8K KwlpbnQJCQlmcmVlX2xpc3RfaGVhZDsgLyogSGVhZCBvZiBmcmVlIGVudHJ5IGxpc3QgKi8KKwor CS8qCisJICogRmxleGlibGUgYXJyYXkgbWVtYmVycyBmb2xsb3cgaW4gc2hhcmVkIG1lbW9yeTog aW50CisJICogYnVja2V0c1tudW1fYnVja2V0c107IFRyYWNrVGFibGVNdXRhdGlvbkVudHJ5IGVu dHJpZXNbbWF4X2VudHJpZXNdOworCSAqLworfSBUcmFja1RhYmxlTXV0YXRpb25IYXNoVGFibGU7 CisKKy8qCisgKiBFbnRyeSBpbiB0aGUgcXVlcnkgcGFyc2UgY2FjaGUKKyAqLwordHlwZWRlZiBz dHJ1Y3QgUXVlcnlQYXJzZUVudHJ5Cit7CisJdWludDY0CQlxdWVyeV9oYXNoOwkJLyogSGFzaCBv ZiBub3JtYWxpemVkIHF1ZXJ5ICovCisJYm9vbAkJaXNfd3JpdGU7CQkvKiBUcnVlIGlmIElOU0VS VC9VUERBVEUvREVMRVRFICovCisJaW50CQkJbnVtX3RhYmxlczsJCS8qIE51bWJlciBvZiB0YWJs ZXMgaW4gcXVlcnkgKi8KKwljaGFyCQl0YWJsZV9uYW1lcworCVsJCQlUUkFDS19UQUJMRV9NVVRB VElPTl9NQVhfVEFCTEVTX1BFUl9RVUVSWV0KKwlbCQkJVFJBQ0tfVEFCTEVfTVVUQVRJT05fVEFC TEVfTkFNRV9MRU5dOworCWludAkJCW5leHQ7CQkJLyogTmV4dCBlbnRyeSBpbiBjb2xsaXNpb24g Y2hhaW4gKi8KKwlpbnQJCQlscnVfcHJldjsJCS8qIFByZXZpb3VzIGluIExSVSBsaXN0ICovCisJ aW50CQkJbHJ1X25leHQ7CQkvKiBOZXh0IGluIExSVSBsaXN0ICovCisJYm9vbAkJaW5fdXNlOwkJ CS8qIElzIHRoaXMgZW50cnkgaW4gdXNlPyAqLworfSBRdWVyeVBhcnNlRW50cnk7CisKKy8qCisg KiBIZWFkZXIgZm9yIHRoZSBxdWVyeSBwYXJzZSBjYWNoZSBpbiBzaGFyZWQgbWVtb3J5CisgKi8K K3R5cGVkZWYgc3RydWN0IFF1ZXJ5UGFyc2VDYWNoZQoreworCWludAkJCW51bV9idWNrZXRzOwkv KiBOdW1iZXIgb2YgaGFzaCBidWNrZXRzICovCisJaW50CQkJbWF4X2VudHJpZXM7CS8qIE1heGlt dW0gZW50cmllcyBhbGxvd2VkICovCisJaW50CQkJbnVtX2VudHJpZXM7CS8qIEN1cnJlbnQgbnVt YmVyIG9mIGVudHJpZXMgKi8KKwlpbnQJCQlmcmVlX2xpc3RfaGVhZDsgLyogSGVhZCBvZiBmcmVl IGVudHJ5IGxpc3QgKi8KKwlpbnQJCQlscnVfaGVhZDsJCS8qIE1vc3QgcmVjZW50bHkgdXNlZCAq LworCWludAkJCWxydV90YWlsOwkJLyogTGVhc3QgcmVjZW50bHkgdXNlZCAqLworCisJLyoKKwkg KiBGbGV4aWJsZSBhcnJheSBtZW1iZXJzIGZvbGxvdyBpbiBzaGFyZWQgbWVtb3J5OiBpbnQKKwkg KiBidWNrZXRzW251bV9idWNrZXRzXTsgUXVlcnlQYXJzZUVudHJ5IGVudHJpZXNbbWF4X2VudHJp ZXNdOworCSAqLworfSBRdWVyeVBhcnNlQ2FjaGU7CisKKy8qCisgKiBHbG9iYWwgc3RhdGUgZm9y IHRyYWNrIHRhYmxlIG11dGF0aW9uIGZlYXR1cmUKKyAqLwordHlwZWRlZiBzdHJ1Y3QgVHJhY2tU YWJsZU11dGF0aW9uU3RhdGUKK3sKKwlib29sCQlpbml0aWFsaXplZDsJLyogU2htZW0gaW5pdGlh bGl6ZWQ/ICovCisJdWludDY0CQljdXJyZW50X3R0bF91czsgLyogQ3VycmVudCBUVEwgaW4gbWlj cm9zZWNvbmRzICovCisJc3RydWN0IHRpbWV2YWwgdHRsX2xhc3RfdXBkYXRlZDsJLyogV2hlbiBU VEwgd2FzIGxhc3QgdXBkYXRlZCAqLworCXN0cnVjdCB0aW1ldmFsIGxhc3RfY2xlYW51cF90aW1l OwkvKiBXaGVuIGxhc3QgZXhwaXJlZCBjbGVhbnVwIHJhbiAqLworCXN0cnVjdCB0aW1ldmFsIGds b2JhbF9jb2xkX3N0YXJ0X3VudGlsOyAvKiBHbG9iYWwgY29sZCBzdGFydCBlbmQgdGltZSAqLwor CXVpbnQzMgkJc3RhdHNfcXVlcmllc19jaGVja2VkOwkvKiBRdWVyaWVzIGNoZWNrZWQgKi8KKwl1 aW50MzIJCXN0YXRzX2ZvcmNlZF9wcmltYXJ5OwkvKiBGb3JjZWQgdG8gcHJpbWFyeSAqLworCXVp bnQzMgkJc3RhdHNfYWxsb3dlZF9yZXBsaWNhOwkvKiBBbGxvd2VkIHRvIHJlcGxpY2EgKi8KK30g VHJhY2tUYWJsZU11dGF0aW9uU3RhdGU7CisKKy8qCisgKiBNYWluIHNoYXJlZCBtZW1vcnkgc3Ry dWN0dXJlIGNvbnRhaW5pbmcgYWxsIGNvbXBvbmVudHMKKyAqLwordHlwZWRlZiBzdHJ1Y3QgVHJh Y2tUYWJsZU11dGF0aW9uU2htZW0KK3sKKwlUcmFja1RhYmxlTXV0YXRpb25TdGF0ZSBzdGF0ZTsK KwlUcmFja1RhYmxlTXV0YXRpb25IYXNoVGFibGUgKnRhYmxlX21hcDsKKwlRdWVyeVBhcnNlQ2Fj aGUgKnF1ZXJ5X2NhY2hlOworfSBUcmFja1RhYmxlTXV0YXRpb25TaG1lbTsKKworLyogLS0tLS0t LS0tLS0tLS0tLQorICogUHVibGljIEFQSSBmdW5jdGlvbnMKKyAqIC0tLS0tLS0tLS0tLS0tLS0K KyAqLworCisvKgorICogSW5pdGlhbGl6ZSBzaGFyZWQgbWVtb3J5IHN0cnVjdHVyZXMgZm9yIHRy YWNrIHRhYmxlIG11dGF0aW9uLgorICogQ2FsbGVkIGZyb20gcGdwb29sX21haW4uYyBhZnRlciBw b29sX2luaXRfcG9vbF9pbmZvKCkuCisgKi8KK2V4dGVybiB2b2lkIHBvb2xfdHJhY2tfdGFibGVf bXV0YXRpb25faW5pdCh2b2lkKTsKKworLyoKKyAqIEluaXRpYWxpemUgcGVyLWNoaWxkIHByb2Nl c3Mgc3RhdGUgZm9yIHRyYWNrIHRhYmxlIG11dGF0aW9uLgorICogQ2FsbGVkIGZyb20gY2hpbGQu YyB3aGVuIGEgbmV3IGNoaWxkIHByb2Nlc3Mgc3RhcnRzLgorICogU2V0cyB1cCBjb2xkIHN0YXJ0 IHRyYWNraW5nLgorICovCitleHRlcm4gdm9pZCBwb29sX3RyYWNrX3RhYmxlX211dGF0aW9uX2No aWxkX2luaXQodm9pZCk7CisKKy8qCisgKiBDaGVjayBpZiB0aGUgY2hpbGQgcHJvY2VzcyBpcyBp biBjb2xkIHN0YXJ0IHBlcmlvZC4KKyAqIER1cmluZyBjb2xkIHN0YXJ0LCBhbGwgcXVlcmllcyBh cmUgcm91dGVkIHRvIHByaW1hcnkuCisgKiBSZXR1cm5zIHRydWUgaWYgaW4gY29sZCBzdGFydCwg ZmFsc2Ugb3RoZXJ3aXNlLgorICovCitleHRlcm4gYm9vbCBwb29sX3RyYWNrX3RhYmxlX211dGF0 aW9uX2luX2NvbGRfc3RhcnQodm9pZCk7CisKKy8qCisgKiBUcmlnZ2VyIGEgZ2xvYmFsIGNvbGQg c3RhcnQgcGVyaW9kIGZvciBhbGwgcHJvY2Vzc2VzLgorICogVXNlZCBhZnRlciB3YXRjaGRvZyBs ZWFkZXIgY2hhbmdlIHRvIGF2b2lkIHN0YWxlIHJlYWRzLgorICovCitleHRlcm4gdm9pZCBwb29s X3RyYWNrX3RhYmxlX211dGF0aW9uX3RyaWdnZXJfZ2xvYmFsX2NvbGRfc3RhcnQodm9pZCk7CisK Ky8qCisgKiBHZXQgb2lkIG9mIGN1cnJlbnQgZGF0YWJhc2UuCisgKi8KK2V4dGVybiBpbnQJcG9v bF90cmFja190YWJsZV9tdXRhdGlvbl9nZXRfZGF0YWJhc2Vfb2lkKHZvaWQpOworCisvKgorICog Q2hlY2sgaWYgYSB0YWJsZSB3YXMgcmVjZW50bHkgd3JpdHRlbiB0byAoaXMgInN0YWxlIikuCisg KiBJZiBzdGFsZSwgcmVhZHMgZnJvbSB0aGlzIHRhYmxlIHNob3VsZCBnbyB0byBwcmltYXJ5Lgor ICogUmV0dXJucyB0cnVlIGlmIHRhYmxlIGlzIHN0YWxlIChyZWNlbnRseSB3cml0dGVuKSwgZmFs c2Ugb3RoZXJ3aXNlLgorICovCitleHRlcm4gYm9vbCBwb29sX3RyYWNrX3RhYmxlX211dGF0aW9u X3RhYmxlX2lzX3N0YWxlKAorCQkJCQkJCQkJCQkJCSBpbnQgdGFibGVfb2lkLCBpbnQgZGJvaWQp OworCisvKgorICogTWFyayB0YWJsZXMgYXMgcmVjZW50bHkgd3JpdHRlbi4KKyAqIENhbGxlZCBh ZnRlciBJTlNFUlQvVVBEQVRFL0RFTEVURSBxdWVyaWVzIGNvbXBsZXRlLgorICogdGFibGVfb2lk czogYXJyYXkgb2YgdGFibGUgb2lkcworICogbnVtX3RhYmxlczogbnVtYmVyIG9mIHRhYmxlcyBp biBhcnJheQorICogZGJvaWQ6IGRhdGFiYXNlIG9pZAorICovCitleHRlcm4gdm9pZCBwb29sX3Ry YWNrX3RhYmxlX211dGF0aW9uX21hcmtfdGFibGVzX3dyaXR0ZW4oCisJCQkJCQkJCQkJCQkJCSAg Y29uc3QgaW50ICp0YWJsZV9vaWRzLCBpbnQgbnVtX3RhYmxlcywgaW50IGRib2lkKTsKKworLyoK KyAqIENvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIG1hcmsgYSBzaW5nbGUgdGFibGUgYXMgd3JpdHRl bi4KKyAqIHRhYmxlX29pZDogdGFibGUgb2lkCisgKiBkYm9pZDogZGF0YWJhc2Ugb2lkCisgKi8K K2V4dGVybiB2b2lkIHBvb2xfdHJhY2tfdGFibGVfbXV0YXRpb25fbWFya190YWJsZV93cml0dGVu KAorCQkJCQkJCQkJCQkJCQkgaW50IHRhYmxlX29pZCwgaW50IGRib2lkKTsKKworLyoKKyAqIFVw ZGF0ZSB0aGUgVFRMIGJhc2VkIG9uIGN1cnJlbnQgcmVwbGljYXRpb24gZGVsYXkuCisgKiBDYWxs ZWQgZnJvbSBwb29sX3dvcmtlcl9jaGlsZC5jIHdoZW4gcmVwbGljYXRpb24gZGVsYXkgaXMgdXBk YXRlZC4KKyAqIGRlbGF5X3VzOiByZXBsaWNhdGlvbiBkZWxheSBpbiBtaWNyb3NlY29uZHMKKyAq LworZXh0ZXJuIHZvaWQgcG9vbF90cmFja190YWJsZV9tdXRhdGlvbl91cGRhdGVfdHRsKHVpbnQ2 NCBkZWxheV91cyk7CisKKy8qCisgKiBMb29rIHVwIGNhY2hlZCBwYXJzZSByZXN1bHQgZm9yIGEg cXVlcnkuCisgKiBoYXNoOiBoYXNoIG9mIG5vcm1hbGl6ZWQgcXVlcnkKKyAqIGlzX3dyaXRlOiBv dXRwdXQgLSB0cnVlIGlmIHF1ZXJ5IGlzIGEgd3JpdGUKKyAqIHRhYmxlX25hbWVzOiBvdXRwdXQg LSBhcnJheSB0byBmaWxsIHdpdGggdGFibGUgbmFtZXMKKyAqIG51bV90YWJsZXM6IG91dHB1dCAt IG51bWJlciBvZiB0YWJsZXMgZm91bmQKKyAqIFJldHVybnMgdHJ1ZSBpZiBmb3VuZCBpbiBjYWNo ZSwgZmFsc2Ugb3RoZXJ3aXNlLgorICovCitleHRlcm4gYm9vbCBwb29sX3RyYWNrX3RhYmxlX211 dGF0aW9uX2dldF9jYWNoZWRfcGFyc2UoCisJCQkJCQkJCQkJCQkJICAgdWludDY0IGhhc2gsIGJv b2wgKmlzX3dyaXRlLAorCQkJCQkJCQkJCQkJCSAgIGNoYXIgdGFibGVfbmFtZXNbXVtUUkFDS19U QUJMRV9NVVRBVElPTl9UQUJMRV9OQU1FX0xFTl0sCisJCQkJCQkJCQkJCQkJICAgaW50ICpudW1f dGFibGVzKTsKKworLyoKKyAqIENhY2hlIGEgcGFyc2UgcmVzdWx0IGZvciBhIHF1ZXJ5LgorICog aGFzaDogaGFzaCBvZiBub3JtYWxpemVkIHF1ZXJ5CisgKiBpc193cml0ZTogdHJ1ZSBpZiBxdWVy eSBpcyBhIHdyaXRlCisgKiB0YWJsZV9uYW1lczogYXJyYXkgb2YgdGFibGUgbmFtZXMKKyAqIG51 bV90YWJsZXM6IG51bWJlciBvZiB0YWJsZXMKKyAqLworZXh0ZXJuIHZvaWQgcG9vbF90cmFja190 YWJsZV9tdXRhdGlvbl9jYWNoZV9wYXJzZSgKKwkJCQkJCQkJCQkJCSAgdWludDY0IGhhc2gsIGJv b2wgaXNfd3JpdGUsCisJCQkJCQkJCQkJCQkgIGNvbnN0IGNoYXIgdGFibGVfbmFtZXNbXVtUUkFD S19UQUJMRV9NVVRBVElPTl9UQUJMRV9OQU1FX0xFTl0sCisJCQkJCQkJCQkJCQkgIGludCBudW1f dGFibGVzKTsKKworLyoKKyAqIE5vcm1hbGl6ZSBhIHF1ZXJ5IGFuZCBjb21wdXRlIGl0cyBoYXNo LgorICogU3RyaXBzIGNvbW1lbnRzLCBub3JtYWxpemVzIHdoaXRlc3BhY2UgYW5kIGxpdGVyYWxz LgorICogcXVlcnk6IGlucHV0IFNRTCBxdWVyeSBzdHJpbmcKKyAqIFJldHVybnM6IDY0LWJpdCBo YXNoIG9mIG5vcm1hbGl6ZWQgcXVlcnkKKyAqLworZXh0ZXJuIHVpbnQ2NCBwb29sX3RyYWNrX3Rh YmxlX211dGF0aW9uX25vcm1hbGl6ZV9hbmRfaGFzaChjb25zdCBjaGFyICpxdWVyeSk7CisKKy8q CisgKiBDYWxjdWxhdGUgcmVxdWlyZWQgc2hhcmVkIG1lbW9yeSBzaXplIGZvciB0cmFjayB0YWJs ZSBtdXRhdGlvbi4KKyAqLworZXh0ZXJuIFNpemUgcG9vbF90cmFja190YWJsZV9tdXRhdGlvbl9z aG1lbV9zaXplKHZvaWQpOworCisjZW5kaWYJCQkJCQkJLyogUE9PTF9UUkFDS19UQUJMRV9NVVRB VElPTl9IICovCmRpZmYgLS1naXQgYS9zcmMvbWFpbi9wZ3Bvb2xfbWFpbi5jIGIvc3JjL21haW4v cGdwb29sX21haW4uYwppbmRleCBiZjdjNDUyZTIuLmQ0ZTI3NGYwMiAxMDA2NDQKLS0tIGEvc3Jj L21haW4vcGdwb29sX21haW4uYworKysgYi9zcmMvbWFpbi9wZ3Bvb2xfbWFpbi5jCkBAIC01Nyw2 ICs1Nyw3IEBACiAjaW5jbHVkZSAiYXV0aC9wb29sX3Bhc3N3ZC5oIgogI2luY2x1ZGUgImF1dGgv cG9vbF9oYmEuaCIKICNpbmNsdWRlICJxdWVyeV9jYWNoZS9wb29sX21lbXFjYWNoZS5oIgorI2lu Y2x1ZGUgInV0aWxzL3Bvb2xfdHJhY2tfdGFibGVfbXV0YXRpb24uaCIKICNpbmNsdWRlICJ3YXRj aGRvZy93ZF9pbnRlcm5hbF9jb21tYW5kcy5oIgogI2luY2x1ZGUgIndhdGNoZG9nL3dkX2xpZmVj aGVjay5oIgogI2luY2x1ZGUgIndhdGNoZG9nL3dhdGNoZG9nLmgiCkBAIC0xNTAwLDExICsxNTAx LDE0IEBAIHNpZ3VzcjFfaW50ZXJydXB0X3Byb2Nlc3Nvcih2b2lkKQogCiAJaWYgKHVzZXIxU2ln bmFsU2xvdC0+c2lnbmFsRmxhZ3NbU0lHX1dBVENIRE9HX1NUQVRFX0NIQU5HRURdKQogCXsKKwkJ V0RfU1RBVEVTCXdkX3N0YXRlOworCiAJCWVyZXBvcnQoTE9HLAogCQkJCShlcnJtc2coIlBncG9v bC1JSSBwYXJlbnQgcHJvY2VzcyByZWNlaXZlZCB3YXRjaGRvZyBzdGF0ZSBjaGFuZ2Ugc2lnbmFs IGZyb20gd2F0Y2hkb2ciKSkpOwogCiAJCXVzZXIxU2lnbmFsU2xvdC0+c2lnbmFsRmxhZ3NbU0lH X1dBVENIRE9HX1NUQVRFX0NIQU5HRURdID0gZmFsc2U7Ci0JCWlmICh3ZF9pbnRlcm5hbF9nZXRf d2F0Y2hkb2dfbG9jYWxfbm9kZV9zdGF0ZSgpID09IFdEX1NUQU5EQlkpCisJCXdkX3N0YXRlID0g d2RfaW50ZXJuYWxfZ2V0X3dhdGNoZG9nX2xvY2FsX25vZGVfc3RhdGUoKTsKKwkJaWYgKHdkX3N0 YXRlID09IFdEX1NUQU5EQlkpCiAJCXsKIAkJCWVyZXBvcnQoTE9HLAogCQkJCQkoZXJybXNnKCJ3 ZSBoYXZlIGpvaW5lZCB0aGUgd2F0Y2hkb2cgY2x1c3RlciBhcyBTVEFOREJZIG5vZGUiKSwKQEAg LTE1MTgsNiArMTUyMiwxMiBAQCBzaWd1c3IxX2ludGVycnVwdF9wcm9jZXNzb3Iodm9pZCkKIAkJ CSAqLwogCQkJcG9vbF9yZWxlYXNlX2ZvbGxvd19wcmltYXJ5X2xvY2sodHJ1ZSk7CiAJCX0KKwkJ ZWxzZSBpZiAod2Rfc3RhdGUgPT0gV0RfQ09PUkRJTkFUT1IgJiYKKwkJCQkgcG9vbF9jb25maWct PmRpc2FibGVfbG9hZF9iYWxhbmNlX29uX3dyaXRlID09CisJCQkJIERMQk9XX0RNTF9BREFQVElW RV9HTE9CQUwpCisJCXsKKwkJCXBvb2xfdHJhY2tfdGFibGVfbXV0YXRpb25fdHJpZ2dlcl9nbG9i YWxfY29sZF9zdGFydCgpOworCQl9CiAJfQogCWlmICh1c2VyMVNpZ25hbFNsb3QtPnNpZ25hbEZs YWdzW1NJR19GQUlMT1ZFUl9JTlRFUlJVUFRdKQogCXsKQEAgLTMwODMsNiArMzA5MywxNiBAQCBp bml0aWFsaXplX3NoYXJlZF9tZW1fb2JqZWN0cyhib29sIGNsZWFyX21lbWNhY2hlX29pZG1hcHMp CiAJCWVsb2coREVCVUcxLCAid2F0Y2hkb2c6ICV6dSBieXRlcyByZXF1ZXN0ZWQgZm9yIHNoYXJl ZCBtZW1vcnkiLCBNQVhBTElHTih3ZF9pcGNfZ2V0X3NoYXJlZF9tZW1fc2l6ZSgpKSk7CiAJfQog CisJaWYgKHBvb2xfY29uZmlnLT5kaXNhYmxlX2xvYWRfYmFsYW5jZV9vbl93cml0ZSA9PQorCQlE TEJPV19ETUxfQURBUFRJVkVfR0xPQkFMKQorCXsKKwkJc2l6ZSArPSBNQVhBTElHTihwb29sX3Ry YWNrX3RhYmxlX211dGF0aW9uX3NobWVtX3NpemUoKSk7CisJCWVsb2coREVCVUcxLAorCQkJICJ0 cmFja190YWJsZV9tdXRhdGlvbjogJXp1IGJ5dGVzIHJlcXVlc3RlZCIKKwkJCSAiIGZvciBzaGFy ZWQgbWVtb3J5IiwKKwkJCSBNQVhBTElHTihwb29sX3RyYWNrX3RhYmxlX211dGF0aW9uX3NobWVt X3NpemUoKSkpOworCX0KKwogCWluaXRpYWxpemVfc2hhcmVkX21lbW9yeV9tYWluX3NlZ21lbnQo c2l6ZSk7CiAKIAkvKiBNb3ZlIHRoZSBiYWNrZW5kIGRlc2NyaXB0b3JzIHRvIHNoYXJlZCBtZW1v cnkgKi8KQEAgLTMxOTksNiArMzIxOSwxMyBAQCBpbml0aWFsaXplX3NoYXJlZF9tZW1fb2JqZWN0 cyhib29sIGNsZWFyX21lbWNhY2hlX29pZG1hcHMpCiAJCXdkX2lwY19pbml0aWFsaXplX2RhdGEo KTsKIAl9CiAKKwkvKiBJbml0aWFsaXplIHRyYWNrIHRhYmxlIG11dGF0aW9uIGZvciByZWNlbnRs eSB3cml0dGVuIHRhYmxlcyAqLworCWlmIChwb29sX2NvbmZpZy0+ZGlzYWJsZV9sb2FkX2JhbGFu Y2Vfb25fd3JpdGUgPT0KKwkJRExCT1dfRE1MX0FEQVBUSVZFX0dMT0JBTCkKKwl7CisJCXBvb2xf dHJhY2tfdGFibGVfbXV0YXRpb25faW5pdCgpOworCX0KKwogfQogCiAvKgpkaWZmIC0tZ2l0IGEv c3JjL3Byb3RvY29sL0NvbW1hbmRDb21wbGV0ZS5jIGIvc3JjL3Byb3RvY29sL0NvbW1hbmRDb21w bGV0ZS5jCmluZGV4IGEzYjhmMGVhMS4uZjQ0NWYyNjhiIDEwMDY0NAotLS0gYS9zcmMvcHJvdG9j b2wvQ29tbWFuZENvbXBsZXRlLmMKKysrIGIvc3JjL3Byb3RvY29sL0NvbW1hbmRDb21wbGV0ZS5j CkBAIC0zOCw2ICszOCw4IEBACiAjaW5jbHVkZSAidXRpbHMvcGFsbG9jLmgiCiAjaW5jbHVkZSAi dXRpbHMvbWVtdXRpbHMuaCIKICNpbmNsdWRlICJ1dGlscy9wb29sX3N0cmVhbS5oIgorI2luY2x1 ZGUgInV0aWxzL3Bvb2xfdHJhY2tfdGFibGVfbXV0YXRpb24uaCIKKyNpbmNsdWRlICJxdWVyeV9j YWNoZS9wb29sX21lbXFjYWNoZS5oIgogCiBzdGF0aWMgaW50CWV4dHJhY3RfbnR1cGxlcyhjaGFy ICptZXNzYWdlKTsKIHN0YXRpYyBQT09MX1NUQVRVUyBoYW5kbGVfbWlzbWF0Y2hfdHVwbGVzKFBP T0xfQ09OTkVDVElPTiAqZnJvbnRlbmQsIFBPT0xfQ09OTkVDVElPTl9QT09MICpiYWNrZW5kLCBj aGFyICpwYWNrZXQsIGludCBwYWNrZXRsZW4sIGJvb2wgY29tbWFuZF9jb21wbGV0ZSk7CkBAIC0z MDQsNiArMzA2LDMyIEBAIGhhbmRsZV9xdWVyeV9jb250ZXh0KFBPT0xfQ09OTkVDVElPTl9QT09M ICpiYWNrZW5kKQogCiAJbm9kZSA9IHNlc3Npb25fY29udGV4dC0+cXVlcnlfY29udGV4dC0+cGFy c2VfdHJlZTsKIAorCS8qCisJICogVHJhY2sgdGFibGUgd3JpdGVzIGZvciBkbWxfYWRhcHRpdmVf Z2xvYmFsIGZlYXR1cmUuIEZvciBhdXRvY29tbWl0CisJICogc3RhdGVtZW50cyAobm90IGluIGV4 cGxpY2l0IHRyYW5zYWN0aW9uKSwgbWFyayB0YWJsZXMgaW1tZWRpYXRlbHkuIEZvcgorCSAqIGV4 cGxpY2l0IHRyYW5zYWN0aW9ucywgbWFya2luZyBpcyBkZWZlcnJlZCB0byBDT01NSVQgaW4gZG1s X2FkYXB0aXZlKCkKKwkgKiBzbyB0aGF0IFJPTExCQUNLZWQgd3JpdGVzIGRvbid0IHBvbGx1dGUg dGhlIHNoYXJlZCBtZW1vcnkgdGFibGUgbWFwLgorCSAqLworCWlmIChwb29sX2NvbmZpZy0+ZGlz YWJsZV9sb2FkX2JhbGFuY2Vfb25fd3JpdGUgPT0KKwkJRExCT1dfRE1MX0FEQVBUSVZFX0dMT0JB TCAmJgorCQlub2RlICE9IE5VTEwgJiYKKwkJIXNlc3Npb25fY29udGV4dC0+aXNfaW5fdHJhbnNh Y3Rpb24pCisJeworCQlpbnQJCSAgICpvaWRzOworCQlpbnQJCQludW1fb2lkczsKKworCQludW1f b2lkcyA9IHBvb2xfZXh0cmFjdF90YWJsZV9vaWRzKG5vZGUsICZvaWRzKTsKKwkJaWYgKG51bV9v aWRzID4gMCkKKwkJeworCQkJaW50CQkJZGJvaWQ7CisKKwkJCWRib2lkID0gcG9vbF90cmFja190 YWJsZV9tdXRhdGlvbl9nZXRfZGF0YWJhc2Vfb2lkKCk7CisJCQlpZiAoZGJvaWQgPiAwKQorCQkJ CXBvb2xfdHJhY2tfdGFibGVfbXV0YXRpb25fbWFya190YWJsZXNfd3JpdHRlbigKKwkJCQkJCQkJ CQkJCQkJCSAgb2lkcywgbnVtX29pZHMsIGRib2lkKTsKKwkJfQorCX0KKwogCWlmIChJc0Eobm9k ZSwgUHJlcGFyZVN0bXQpKQogCXsKIAkJaWYgKHNlc3Npb25fY29udGV4dC0+dW5jb21wbGV0ZWRf bWVzc2FnZSkKZGlmZiAtLWdpdCBhL3NyYy9wcm90b2NvbC9jaGlsZC5jIGIvc3JjL3Byb3RvY29s L2NoaWxkLmMKaW5kZXggYzM0ZjA1NzI4Li4zMTZiNzYyMzkgMTAwNjQ0Ci0tLSBhL3NyYy9wcm90 b2NvbC9jaGlsZC5jCisrKyBiL3NyYy9wcm90b2NvbC9jaGlsZC5jCkBAIC01Nyw2ICs1Nyw3IEBA CiAjaW5jbHVkZSAidXRpbHMvZWxvZy5oIgogI2luY2x1ZGUgInV0aWxzL3BzX3N0YXR1cy5oIgog I2luY2x1ZGUgInV0aWxzL3RpbWVzdGFtcC5oIgorI2luY2x1ZGUgInV0aWxzL3Bvb2xfdHJhY2tf dGFibGVfbXV0YXRpb24uaCIKIAogI2luY2x1ZGUgImNvbnRleHQvcG9vbF9wcm9jZXNzX2NvbnRl eHQuaCIKICNpbmNsdWRlICJjb250ZXh0L3Bvb2xfc2Vzc2lvbl9jb250ZXh0LmgiCkBAIC0yMTMs NiArMjE0LDEzIEBAIGRvX2NoaWxkKGludCAqZmRzKQogCS8qIEluaXRpYWxpemUgcGVyIHByb2Nl c3MgY29udGV4dCAqLwogCXBvb2xfaW5pdF9wcm9jZXNzX2NvbnRleHQoKTsKIAorCS8qIEluaXRp YWxpemUgdHJhY2sgdGFibGUgbXV0YXRpb24gY2hpbGQgc3RhdGUgZm9yIGNvbGQgc3RhcnQgdHJh Y2tpbmcgKi8KKwlpZiAocG9vbF9jb25maWctPmRpc2FibGVfbG9hZF9iYWxhbmNlX29uX3dyaXRl ID09CisJCURMQk9XX0RNTF9BREFQVElWRV9HTE9CQUwpCisJeworCQlwb29sX3RyYWNrX3RhYmxl X211dGF0aW9uX2NoaWxkX2luaXQoKTsKKwl9CisKIAkvKiBpbml0aWFsaXplIGNvbm5lY3Rpb24g cG9vbCAqLwogCWlmIChwb29sX2luaXRfY3AoKSkKIAl7CmRpZmYgLS1naXQgYS9zcmMvcHJvdG9j b2wvcG9vbF9wcm90b19tb2R1bGVzLmMgYi9zcmMvcHJvdG9jb2wvcG9vbF9wcm90b19tb2R1bGVz LmMKaW5kZXggZjk0NThiYjU1Li43NGVlMDBkMTYgMTAwNjQ0Ci0tLSBhL3NyYy9wcm90b2NvbC9w b29sX3Byb3RvX21vZHVsZXMuYworKysgYi9zcmMvcHJvdG9jb2wvcG9vbF9wcm90b19tb2R1bGVz LmMKQEAgLTE0NjEsNyArMTQ2MSw5IEBAIFBhcnNlKFBPT0xfQ09OTkVDVElPTiAqZnJvbnRlbmQs IFBPT0xfQ09OTkVDVElPTl9QT09MICpiYWNrZW5kLAogCQlwb29sX3doZXJlX3RvX3NlbmQocXVl cnlfY29udGV4dCwgcXVlcnlfY29udGV4dC0+b3JpZ2luYWxfcXVlcnksCiAJCQkJCQkgICBxdWVy eV9jb250ZXh0LT5wYXJzZV90cmVlKTsKIAotCQlpZiAocG9vbF9jb25maWctPmRpc2FibGVfbG9h ZF9iYWxhbmNlX29uX3dyaXRlID09IERMQk9XX0RNTF9BREFQVElWRSAmJiBzdHJsZW4obmFtZSkg IT0gMCkKKwkJaWYgKERMQk9XX0lTX0RNTF9BREFQVElWRSgKKwkJCQkJCQkJICBwb29sX2NvbmZp Zy0+ZGlzYWJsZV9sb2FkX2JhbGFuY2Vfb25fd3JpdGUpCisJCQkmJiBzdHJsZW4obmFtZSkgIT0g MCkKIAkJCXBvb2xfc2V0YWxsX25vZGVfdG9fYmVfc2VudChxdWVyeV9jb250ZXh0KTsKIAogCQlp ZiAoUkVQTElDQVRJT04pCkBAIC0xODA0LDcgKzE4MDYsNyBAQCBCaW5kKFBPT0xfQ09OTkVDVElP TiAqZnJvbnRlbmQsIFBPT0xfQ09OTkVDVElPTl9QT09MICpiYWNrZW5kLAogCQkJcmV0dXJuIFBP T0xfRU5EOwogCX0KIAotCWlmIChwb29sX2NvbmZpZy0+ZGlzYWJsZV9sb2FkX2JhbGFuY2Vfb25f d3JpdGUgPT0gRExCT1dfRE1MX0FEQVBUSVZFICYmCisJaWYgKERMQk9XX0lTX0RNTF9BREFQVElW RShwb29sX2NvbmZpZy0+ZGlzYWJsZV9sb2FkX2JhbGFuY2Vfb25fd3JpdGUpICYmCiAJCVRTVEFU RShiYWNrZW5kLCBNQUlOX1JFUExJQ0EgPyBQUklNQVJZX05PREVfSUQgOiBSRUFMX01BSU5fTk9E RV9JRCkgPT0gJ1QnKQogCXsKIAkJcG9vbF93aGVyZV90b19zZW5kKHF1ZXJ5X2NvbnRleHQsIHF1 ZXJ5X2NvbnRleHQtPm9yaWdpbmFsX3F1ZXJ5LApkaWZmIC0tZ2l0IGEvc3JjL3NhbXBsZS9wZ3Bv b2wuY29uZi5zYW1wbGUtc3RyZWFtIGIvc3JjL3NhbXBsZS9wZ3Bvb2wuY29uZi5zYW1wbGUtc3Ry ZWFtCmluZGV4IDFhYzk4MjkwNy4uMDAxMzJkNTM0IDEwMDY0NAotLS0gYS9zcmMvc2FtcGxlL3Bn cG9vbC5jb25mLnNhbXBsZS1zdHJlYW0KKysrIGIvc3JjL3NhbXBsZS9wZ3Bvb2wuY29uZi5zYW1w bGUtc3RyZWFtCkBAIC00NzgsNiArNDc4LDE0IEBAIGJhY2tlbmRfY2x1c3RlcmluZ19tb2RlID0g c3RyZWFtaW5nX3JlcGxpY2F0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICMgICAgIG1vZGlmaWVkIHdpdGhpbiB0aGUgY3VycmVudCBleHBsaWNpdCB0cmFuc2FjdGlvbiB3 aWxsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgIG5vdCBiZSBsb2Fk IGJhbGFuY2VkIHVudGlsIHRoZSBlbmQgb2YgdGhlIHRyYW5zYWN0aW9uLgogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAjCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICMgZG1sX2FkYXB0aXZlX2dsb2JhbDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIyAgICAgU3VwZXJzZXQgb2YgZG1sX2FkYXB0aXZlLiBJbiBhZGRpdGlvbiB0byBwZXIt dHJhbnNhY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgdHJh Y2tpbmcsIHVzZXMgc2hhcmVkIG1lbW9yeSB0byB0cmFjayByZWNlbnRseSB3cml0dGVuCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgIHRhYmxlcyBhY3Jvc3MgYWxsIHNl c3Npb25zLiBSZWFkcyBmcm9tIHJlY2VudGx5IHdyaXR0ZW4KKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIyAgICAgdGFibGVzIGFyZSByb3V0ZWQgdG8gcHJpbWFyeSB1bnRpbCBh IFRUTCAoYmFzZWQgb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAg cmVwbGljYXRpb24gZGVsYXkpIGV4cGlyZXMuIFJlcXVpcmVzIGFkZGl0aW9uYWwgc2hhcmVkCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgIG1lbW9yeS4gU2VlIHRyYWNr X3RhYmxlX211dGF0aW9uXyogcGFyYW1ldGVycyBiZWxvdy4KKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGFs d2F5czoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgaWYgYSB3cml0 ZSBxdWVyeSBpcyBpc3N1ZWQsIHJlYWQgcXVlcmllcyB3aWxsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICMgICAgIG5vdCBiZSBsb2FkIGJhbGFuY2VkIHVudGlsIHRoZSBzZXNz aW9uIGVuZHMuCkBAIC00OTksNiArNTA3LDU0IEBAIGJhY2tlbmRfY2x1c3RlcmluZ19tb2RlID0g c3RyZWFtaW5nX3JlcGxpY2F0aW9uCiAjc3RhdGVtZW50X2xldmVsX2xvYWRfYmFsYW5jZSA9IG9m ZgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEVuYWJsZXMgc3RhdGVtZW50 IGxldmVsIGxvYWQgYmFsYW5jaW5nCiAKKyMgLSBUcmFjayBUYWJsZSBNdXRhdGlvbiAodXNlZCBi eSBkbWxfYWRhcHRpdmVfZ2xvYmFsKSAtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICMgV0FSTklORzogZG1sX2FkYXB0aXZlX2dsb2JhbCBpbmNyZWFzZXMgc2hhcmVkIG1lbW9y eSB1c2FnZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIERlZmF1bHQgc2V0 dGluZ3MgcmVxdWlyZSB+Ni40IE1CIHNoYXJlZCBtZW1vcnkKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIyAoMC4xIE1CIHRhYmxlIHRyYWNraW5nICsgNi4zIE1CIHF1ZXJ5IGNh Y2hlKQorCisjdHJhY2tfdGFibGVfbXV0YXRpb25fdHRsX2ZhY3RvciA9IDUuMAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAjIFRUTCBtdWx0aXBsaWVyOiBUVEwgPSByZXBsaWNh dGlvbl9kZWxheSAqIGZhY3RvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAj IEhpZ2hlciB2YWx1ZXMgcHJvdmlkZSBtb3JlIHNhZmV0eSBtYXJnaW4KKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIyBSYW5nZTogMS4wLTEwMC4wIChkZWZhdWx0OiA1LjApCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgKGNoYW5nZSByZXF1aXJlcyByZWxv YWQpCisKKyN0cmFja190YWJsZV9tdXRhdGlvbl9tYXhfc3RhbGVuZXNzID0gNjAwMDAKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBNYXhpbXVtIGR1cmF0aW9uIChtcykgYSB0 YWJsZSBjYW4gYmUgbWFya2VkIHN0YWxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICMgZnJvbSBpdHMgZmlyc3Qgd3JpdGUuIEJvdW5kcyBjcm9zcy1zZXNzaW9uIGltcGFjdDoK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBldmVuIHVuZGVyIGNvbnRpbnVv dXMgd3JpdGVzLCBzdGFsZW5lc3MgZXhwaXJlcworICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAjIGFmdGVyIHRoaXMgcGVyaW9kIGFuZCBpcyBvbmx5IHJlbmV3ZWQgYnkgbmV3IHdy aXRlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAwIGRpc2FibGVzIHRo ZSBjYXAuIFJhbmdlOiAwLTM2MDAwMDAgKGRlZmF1bHQ6IDYwMDAwID0gNjBzKQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAjIChjaGFuZ2UgcmVxdWlyZXMgcmVsb2FkKQorCisj dHJhY2tfdGFibGVfbXV0YXRpb25fY29sZF9zdGFydF9kdXJhdGlvbiA9IDIwMDAKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBEdXJhdGlvbiBpbiBtaWxsaXNlY29uZHMgdG8g cm91dGUgYWxsIHF1ZXJpZXMgdG8gcHJpbWFyeQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAjIGFmdGVyIGNoaWxkIHByb2Nlc3Mgc3RhcnRzIChjb2xkIHN0YXJ0IHBlcmlvZCkK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBSYW5nZTogMC02MDAwMCBtcyAo ZGVmYXVsdDogMjAwMCBtcyA9IDIgc2Vjb25kcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIyBTZXQgdG8gMCB0byBkaXNhYmxlIGNvbGQgc3RhcnQgYmVoYXZpb3IKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAoY2hhbmdlIHJlcXVpcmVzIHJlbG9hZCkK KworI3RyYWNrX3RhYmxlX211dGF0aW9uX3RhYmxlX2J1Y2tldHMgPSAxMDI0CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICMgTnVtYmVyIG9mIGhhc2ggYnVja2V0cyBmb3IgdHJh Y2sgdGFibGUgbXV0YXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBI aWdoZXIgdmFsdWVzIHJlZHVjZSBoYXNoIGNvbGxpc2lvbnMKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIyBSYW5nZTogNjQtNjU1MzYgKGRlZmF1bHQ6IDEwMjQpCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgKGNoYW5nZSByZXF1aXJlcyByZXN0YXJ0KQor CisjdHJhY2tfdGFibGVfbXV0YXRpb25fdGFibGVfc2l6ZSA9IDIwNDgKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIyBNYXhpbXVtIG51bWJlciBvZiB0YWJsZXMgdG8gdHJhY2sg c2ltdWx0YW5lb3VzbHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBSYW5n ZTogMTI4LTEzMTA3MiAoZGVmYXVsdDogMjA0OCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIyAoY2hhbmdlIHJlcXVpcmVzIHJlc3RhcnQpCisKKyN0cmFja190YWJsZV9tdXRh dGlvbl9xdWVyeV9idWNrZXRzID0gMjA0OAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAjIE51bWJlciBvZiBoYXNoIGJ1Y2tldHMgZm9yIHF1ZXJ5IHBhcnNlIGNhY2hlCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgUmFuZ2U6IDY0LTY1NTM2IChkZWZhdWx0 OiAyMDQ4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIChjaGFuZ2UgcmVx dWlyZXMgcmVzdGFydCkKKworI3RyYWNrX3RhYmxlX211dGF0aW9uX3F1ZXJ5X3BhcnNlX2NhY2hl X3NpemUgPSAxMDAwMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIE1heGlt dW0gbnVtYmVyIG9mIHF1ZXJ5IHBhcnNlIHJlc3VsdHMgdG8gY2FjaGUKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIyBSYW5nZTogMTAwLTEwMDAwMDAgKGRlZmF1bHQ6IDEwMDAw KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIE1lbW9yeSB1c2FnZTogfjY0 MCBieXRlcyBwZXIgZW50cnkgKH42LjMgTUIgZGVmYXVsdCwgfjY0IE1CIGZvciAxMDAwMDApCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgKGNoYW5nZSByZXF1aXJlcyByZXN0 YXJ0KQorCiAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIFNUUkVBTUlORyBSRVBMSUNBVElPTiBN T0RFCiAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9zcmMvc3RyZWFtaW5nX3Jl cGxpY2F0aW9uL3Bvb2xfd29ya2VyX2NoaWxkLmMgYi9zcmMvc3RyZWFtaW5nX3JlcGxpY2F0aW9u L3Bvb2xfd29ya2VyX2NoaWxkLmMKaW5kZXggMzExYjYzODY1Li5jZGQ1NzAzOTYgMTAwNjQ0Ci0t LSBhL3NyYy9zdHJlYW1pbmdfcmVwbGljYXRpb24vcG9vbF93b3JrZXJfY2hpbGQuYworKysgYi9z cmMvc3RyZWFtaW5nX3JlcGxpY2F0aW9uL3Bvb2xfd29ya2VyX2NoaWxkLmMKQEAgLTU4LDYgKzU4 LDcgQEAKICNpbmNsdWRlICJ1dGlscy9wb29sX2lwLmgiCiAjaW5jbHVkZSAidXRpbHMvcHNfc3Rh dHVzLmgiCiAjaW5jbHVkZSAidXRpbHMvcG9vbF9zdHJlYW0uaCIKKyNpbmNsdWRlICJ1dGlscy9w b29sX3RyYWNrX3RhYmxlX211dGF0aW9uLmgiCiAKICNpbmNsdWRlICJjb250ZXh0L3Bvb2xfcHJv Y2Vzc19jb250ZXh0LmgiCiAjaW5jbHVkZSAiY29udGV4dC9wb29sX3Nlc3Npb25fY29udGV4dC5o IgpAQCAtNDE5LDYgKzQyMCw3IEBAIGNoZWNrX3JlcGxpY2F0aW9uX3RpbWVfbGFnKHZvaWQpCiAJ QmFja2VuZEluZm8gKmJraW5mbzsKIAl1aW50NjQJCWxhZzsKIAl1aW50NjQJCWRlbGF5X3RocmVz aG9sZF9ieV90aW1lOworCXVpbnQ2NAkJbWF4X2RlbGF5X3VzID0gMDsKIAlFcnJvckNvbnRleHRD YWxsYmFjayBjYWxsYmFjazsKIAlpbnQJCQlhY3RpdmVfc3RhbmRieV9ub2RlOwogCWJvb2wJCXJl cGxpY2F0aW9uX2RlbGF5X2J5X3RpbWU7CkBAIC02NDMsNiArNjQ1LDEwIEBAIGNoZWNrX3JlcGxp Y2F0aW9uX3RpbWVfbGFnKHZvaWQpCiAJCQkJCQkJCQkJCQkJICogc2Vjb25kcyB0byBtaWNybwog CQkJCQkJCQkJCQkJCSAqIHNlY29uZHMgKi8KIAorCQkJCS8qIFRyYWNrIG1heCBkZWxheSBmb3Ig bXV0YXRpb24gVFRMICovCisJCQkJaWYgKGxhZyA+IG1heF9kZWxheV91cykKKwkJCQkJbWF4X2Rl bGF5X3VzID0gbGFnOworCiAJCQkJLyogTG9nIGRlbGF5IGlmIG5lY2Vzc2FyeSAqLwogCQkJCWlm ICgocG9vbF9jb25maWctPmxvZ19zdGFuZGJ5X2RlbGF5ID09IExTRF9BTFdBWVMgJiYgbGFnID4g MCkgfHwKIAkJCQkJKHBvb2xfY29uZmlnLT5sb2dfc3RhbmRieV9kZWxheSA9PSBMU0RfT1ZFUl9U SFJFU0hPTEQgJiYKQEAgLTY2OCw2ICs2NzQsMTMgQEAgY2hlY2tfcmVwbGljYXRpb25fdGltZV9s YWcodm9pZCkKIAkJfQogCX0KIAorCS8qCisJICogVXBkYXRlIHRyYWNrIHRhYmxlIG11dGF0aW9u IFRUTCBmcm9tIHRoZSBtYXggb2JzZXJ2ZWQgdGltZS1iYXNlZAorCSAqIHJlcGxpY2F0aW9uIGRl bGF5LgorCSAqLworCWlmIChyZXBsaWNhdGlvbl9kZWxheV9ieV90aW1lICYmIG1heF9kZWxheV91 cyA+IDApCisJCXBvb2xfdHJhY2tfdGFibGVfbXV0YXRpb25fdXBkYXRlX3R0bChtYXhfZGVsYXlf dXMpOworCiAJZXJyb3JfY29udGV4dF9zdGFjayA9IGNhbGxiYWNrLnByZXZpb3VzOwogfQogCkBA IC02OTUsNiArNzA4LDcgQEAgY2hlY2tfcmVwbGljYXRpb25fdGltZV9sYWdfd2l0aF9jbWQodm9p ZCkKIAlkb3VibGUJCWRlbGF5X21zOwogCXVpbnQ2NAkJZGVsYXk7CiAJdWludDY0CQlkZWxheV90 aHJlc2hvbGRfYnlfdGltZTsKKwl1aW50NjQJCW1heF9kZWxheV91cyA9IDA7CS8qIFRyYWNrIG1h eCBkZWxheSBmb3IgbXV0YXRpb24gbWFwICovCiAJaW50CQkJdG9rZW5fY291bnQgPSAwOwogCWlu dAkJCXByaW1hcnlfbm9kZV9pZDsKIAlpbnQJCQlzYXZlX2Vycm5vOwpAQCAtMTAwMyw2ICsxMDE3 LDEwIEBAIGNoZWNrX3JlcGxpY2F0aW9uX3RpbWVfbGFnX3dpdGhfY21kKHZvaWQpCiAJCQlia2lu Zm8tPnN0YW5kYnlfZGVsYXkgPSBkZWxheTsKIAkJCWJraW5mby0+c3RhbmRieV9kZWxheV9ieV90 aW1lID0gdHJ1ZTsKIAorCQkJLyogVHJhY2sgbWF4aW11bSBkZWxheSBmb3IgdGFibGUgbXV0YXRp b24gbWFwIFRUTCBjYWxjdWxhdGlvbiAqLworCQkJaWYgKGRlbGF5ID4gbWF4X2RlbGF5X3VzKQor CQkJCW1heF9kZWxheV91cyA9IGRlbGF5OworCiAJCQkvKgogCQkJICogTG9nIGRlbGF5IGlmIG5l Y2Vzc2FyeS4gdGhyZXNob2xkIGlzIGluIG1pbGxpc2Vjb25kcywgY29udmVydAogCQkJICogdG8g bWljcm9zZWNvbmRzLgpAQCAtMTAyMSw2ICsxMDM5LDEyIEBAIGNoZWNrX3JlcGxpY2F0aW9uX3Rp bWVfbGFnX3dpdGhfY21kKHZvaWQpCiAJCQl0b2tlbiA9IHN0cnRva19yKE5VTEwsICIgXHRcbiIs ICZzYXZlcHRyKTsKIAkJfQogCisJCS8qIFVwZGF0ZSB0YWJsZSBtdXRhdGlvbiBUVEwgYmFzZWQg b24gbWF4IG9ic2VydmVkIGRlbGF5ICovCisJCWlmIChwb29sX2NvbmZpZy0+ZGlzYWJsZV9sb2Fk X2JhbGFuY2Vfb25fd3JpdGUgPT0KKwkJCURMQk9XX0RNTF9BREFQVElWRV9HTE9CQUwgJiYKKwkJ CW1heF9kZWxheV91cyA+IDApCisJCQlwb29sX3RyYWNrX3RhYmxlX211dGF0aW9uX3VwZGF0ZV90 dGwobWF4X2RlbGF5X3VzKTsKKwogCX0KIAlQR19DQVRDSCgpOwogCXsKZGlmZiAtLWdpdCBhL3Ny Yy90ZXN0L3JlZ3Jlc3Npb24vbGlicy5zaCBiL3NyYy90ZXN0L3JlZ3Jlc3Npb24vbGlicy5zaApp bmRleCA3YzVhMGMxODIuLjFjOGFlMzkyZCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzc2lv bi9saWJzLnNoCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Npb24vbGlicy5zaApAQCAtNDIsNiArNDIs OCBAQCBmdW5jdGlvbiB3YWl0X2Zvcl9mYWlsb3Zlcl9kb25lIHsKIGZ1bmN0aW9uIGNsZWFuX2Fs bCB7CiAJcGdyZXAgcGdwb29sIHwgeGFyZ3Mga2lsbCAtOSA+IC9kZXYvbnVsbCAyPiYxCiAJcGdy ZXAgcG9zdGdyZXMgfCB4YXJncyBraWxsIC05ID4gL2Rldi9udWxsIDI+JjEKKwkjIENsZWFuIHVw IGxlYWtlZCBTeXNWIElQQyByZXNvdXJjZXMgbGVmdCBiZWhpbmQgYnkga2lsbCAtOQorCWlwY3Jt IC0tYWxsIDI+L2Rldi9udWxsIHx8IHRydWUKIAlybSAtZiAkUEdTT0NLRVRfRElSLy5zLlBHU1FM LioKIAluZXRzdGF0IC10IC1wIDI+L2Rldi9udWxsfGdyZXAgcGdwb29sCiB9CmRpZmYgLS1naXQg YS9zcmMvdGVzdC9yZWdyZXNzaW9uL3Rlc3RzLzA0Mi50cmFja190YWJsZV9tdXRhdGlvbi90ZXN0 LnNoIGIvc3JjL3Rlc3QvcmVncmVzc2lvbi90ZXN0cy8wNDIudHJhY2tfdGFibGVfbXV0YXRpb24v dGVzdC5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAuLjhiNGRkMTdiOAot LS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Npb24vdGVzdHMvMDQyLnRyYWNrX3Rh YmxlX211dGF0aW9uL3Rlc3Quc2gKQEAgLTAsMCArMSwzNTQgQEAKKyMhL3Vzci9iaW4vZW52IGJh c2gKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisjIHRlc3Qgc2NyaXB0IGZvciB0cmFjayB0YWJsZSBtdXRhdGlvbiBm ZWF0dXJlIChpbi1tZW1vcnkgdGFibGUgdHJhY2tpbmcpLgorIyBUZXN0cyByb3V0aW5nIG9mIHF1 ZXJpZXMgYmFzZWQgb24gcmVjZW50bHkgd3JpdHRlbiB0YWJsZXMuCisjCitzb3VyY2UgJFRFU1RM SUJTCitURVNURElSPXRlc3RkaXIKK1BTUUw9JFBHQklOL3BzcWwKK1BTUUxPUFRTPSItYSAtcSAt WCIKK1BHUE9PTEJJTj0kUEdQT09MX0lOU1RBTExfRElSL2JpbgorZXhwb3J0IFBHREFUQUJBU0U9 dGVzdAorCisjIE9ubHkgcnVuIGluIHN0cmVhbWluZyByZXBsaWNhdGlvbiBtb2RlIHNpbmNlIHRo YXQncyB0aGUgdGFyZ2V0IHVzZSBjYXNlCitmb3IgbW9kZSBpbiBzCitkbworICAgIHJtIC1mciAk VEVTVERJUgorICAgIG1rZGlyICRURVNURElSCisgICAgY2QgJFRFU1RESVIKKworICAgICMgQ3Jl YXRlIHRlc3QgZW52aXJvbm1lbnQgd2l0aCAyIG5vZGVzCisgICAgZWNobyAtbiAiY3JlYXRpbmcg dGVzdCBlbnZpcm9ubWVudC4uLiIKKyAgICAkUEdQT09MX1NFVFVQIC1tICRtb2RlIC1uIDIgfHwg ZXhpdCAxCisgICAgZWNobyAiZG9uZS4iCisKKyAgICBzb3VyY2UgLi9iYXNocmMucG9ydHMKKwor ICAgICMgQ29uZmlndXJlIHRyYWNrIHRhYmxlIG11dGF0aW9uIGZlYXR1cmUgdmlhIGRtbF9hZGFw dGl2ZV9nbG9iYWwKKyAgICBlY2hvICJkaXNhYmxlX2xvYWRfYmFsYW5jZV9vbl93cml0ZSA9ICdk bWxfYWRhcHRpdmVfZ2xvYmFsJyIgPj4gZXRjL3BncG9vbC5jb25mCisgICAgZWNobyAidHJhY2tf dGFibGVfbXV0YXRpb25fdHRsX2ZhY3RvciA9IDUuMCIgPj4gZXRjL3BncG9vbC5jb25mCisgICAg ZWNobyAidHJhY2tfdGFibGVfbXV0YXRpb25fY29sZF9zdGFydF9kdXJhdGlvbiA9IDEwMDAwIiA+ PiBldGMvcGdwb29sLmNvbmYKKworICAgICMgRW5hYmxlIGxvYWQgYmFsYW5jaW5nIGV4cGxpY2l0 bHkKKyAgICBlY2hvICJsb2FkX2JhbGFuY2VfbW9kZSA9IG9uIiA+PiBldGMvcGdwb29sLmNvbmYK KworICAgICMgQ29uZmlndXJlIHdlaWdodHMgc28gd2UgY2FuIGRpc3Rpbmd1aXNoIHJvdXRpbmcK KyAgICAjIEJhY2tlbmQgMCAocHJpbWFyeSkgd2VpZ2h0PTAsIEJhY2tlbmQgMSAoc3RhbmRieSkg d2VpZ2h0PTEKKyAgICAjIFRoaXMgbWVhbnMgbG9hZCBiYWxhbmNlZCBxdWVyaWVzIGdvIHRvIG5v ZGUgMSBieSBkZWZhdWx0CisgICAgZWNobyAiYmFja2VuZF93ZWlnaHQwID0gMCIgPj4gZXRjL3Bn cG9vbC5jb25mCisgICAgZWNobyAiYmFja2VuZF93ZWlnaHQxID0gMSIgPj4gZXRjL3BncG9vbC5j b25mCisKKyAgICAjIEVuYWJsZSBkZWJ1ZyBsb2dnaW5nIHRvIHNlZSByb3V0aW5nIGRlY2lzaW9u cworICAgIGVjaG8gImxvZ19taW5fbWVzc2FnZXMgPSBkZWJ1ZzEiID4+IGV0Yy9wZ3Bvb2wuY29u ZgorCisgICAgLi9zdGFydGFsbAorCisgICAgZXhwb3J0IFBHUE9SVD0kUEdQT09MX1BPUlQKKyAg ICBleHBvcnQgUEdIT1NUPWxvY2FsaG9zdAorCisgICAgd2FpdF9mb3JfcGdwb29sX3N0YXJ0dXAK KworICAgICMgQ3JlYXRlIHRlc3QgdGFibGVzCisgICAgJFBTUUwgdGVzdCA8PEVPRgorQ1JFQVRF IFRBQkxFIHQxKGkgSU5URUdFUik7CitDUkVBVEUgVEFCTEUgdDIoaSBJTlRFR0VSKTsKK0NSRUFU RSBUQUJMRSB0MyhpIElOVEVHRVIpOworRU9GCisKKyAgICBlY2hvICI9PT0gVGVzdCAxOiBDb2xk IFN0YXJ0IFJvdXRpbmcgPT09IgorICAgICMgRHVyaW5nIGNvbGQgc3RhcnQsIGFsbCBxdWVyaWVz IHNob3VsZCBnbyB0byBwcmltYXJ5CisgICAgIyBSZXN0YXJ0IHBncG9vbCB0byB0cmlnZ2VyIGNv bGQgc3RhcnQKKyAgICAuL3NodXRkb3duYWxsCisgICAgLi9zdGFydGFsbAorICAgIHdhaXRfZm9y X3BncG9vbF9zdGFydHVwCisKKyAgICAjIEltbWVkaWF0ZWx5IHF1ZXJ5IC0gc2hvdWxkIGdvIHRv IHByaW1hcnkgZHVlIHRvIGNvbGQgc3RhcnQKKyAgICAkUFNRTCB0ZXN0IC1jICJTRUxFQ1QgJ2Nv bGRfc3RhcnRfdGVzdCcgYXMgbWFya2VyLCAqIEZST00gdDE7IiA+IC9kZXYvbnVsbCAyPiYxCisK KyAgICAjIENoZWNrIGxvZyBmb3IgY29sZCBzdGFydCBtZXNzYWdlICh1c2UgLWEgdG8gaGFuZGxl IGJpbmFyeSBsb2cgZmlsZXMpCisgICAgaWYgZ3JlcCAtYSAtcSAiY291bGQgbm90IGxvYWQgYmFs YW5jZSBiZWNhdXNlIG9mIHRyYWNrIHRhYmxlIG11dGF0aW9uIGNvbGQgc3RhcnQiIGxvZy9wZ3Bv b2wubG9nOyB0aGVuCisgICAgICAgIGVjaG8gIlRlc3QgMSBQQVNTRUQ6IENvbGQgc3RhcnQgcm91 dGluZyB3b3JrcyIKKyAgICBlbHNlCisgICAgICAgIGVjaG8gIlRlc3QgMSBGQUlMRUQ6IENvbGQg c3RhcnQgcm91dGluZyBub3QgZGV0ZWN0ZWQiCisgICAgICAgIC4vc2h1dGRvd25hbGwKKyAgICAg ICAgZXhpdCAxCisgICAgZmkKKworICAgIGVjaG8gIj09PSBUZXN0IDI6IFdhaXQgZm9yIGNvbGQg c3RhcnQgdG8gZW5kID09PSIKKyAgICAjIFdhaXQgZm9yIGNvbGQgc3RhcnQgcGVyaW9kIHRvIGVu ZCAoMTAgc2Vjb25kcykuCisgICAgIyBVc2UgZ2VuZXJvdXMgbWFyZ2luIHRvIGF2b2lkIGZsYWtp bmVzcyB1bmRlciBsb2FkIChlLmcuIGZ1bGwgcmVncmVzc2lvbiBzdWl0ZSkuCisgICAgc2xlZXAg MTIKKworICAgICMgQ2xlYXIgdGhlIGxvZworICAgID4gbG9nL3BncG9vbC5sb2cKKworICAgICMg Tm93IGEgY2xlYW4gdGFibGUgcXVlcnkgc2hvdWxkIGxvYWQgYmFsYW5jZSAoZ28gdG8gbm9kZSAx KQorICAgICRQU1FMIHRlc3QgLWMgIlNFTEVDVCAnYWZ0ZXJfY29sZF9zdGFydCcgYXMgbWFya2Vy LCAqIEZST00gdDM7IiA+IC9kZXYvbnVsbCAyPiYxCisKKyAgICAjIEFmdGVyIGNvbGQgc3RhcnQs IHF1ZXJpZXMgdG8gY2xlYW4gdGFibGVzIHNob3VsZCBsb2FkIGJhbGFuY2UKKyAgICAjIENoZWNr IHRoYXQgaXQgZGlkIE5PVCBnZXQgZm9yY2VkIHRvIHByaW1hcnkgZHVlIHRvIHRyYWNrIHRhYmxl IG11dGF0aW9uCisgICAgaWYgZ3JlcCAtYSAtcSAiY291bGQgbm90IGxvYWQgYmFsYW5jZSBiZWNh dXNlIG9mIHRyYWNrIHRhYmxlIG11dGF0aW9uIGNvbGQgc3RhcnQiIGxvZy9wZ3Bvb2wubG9nOyB0 aGVuCisgICAgICAgIGVjaG8gIlRlc3QgMiBGQUlMRUQ6IFN0aWxsIGluIGNvbGQgc3RhcnQgYWZ0 ZXIgd2FpdGluZyIKKyAgICAgICAgLi9zaHV0ZG93bmFsbAorICAgICAgICBleGl0IDEKKyAgICBm aQorICAgIGVjaG8gIlRlc3QgMiBQQVNTRUQ6IENvbGQgc3RhcnQgZW5kZWQgY29ycmVjdGx5Igor CisgICAgZWNobyAiPT09IFRlc3QgMzogV3JpdGUtdGhlbi1SZWFkIFJvdXRpbmcgPT09IgorICAg ICMgQ2xlYXIgdGhlIGxvZworICAgID4gbG9nL3BncG9vbC5sb2cKKworICAgICMgV3JpdGUgdG8g dDEgYW5kIHRoZW4gcmVhZCAtIHVzZSBzaW5nbGUgY29ubmVjdGlvbiB0byBlbnN1cmUgc2FtZSBz ZXNzaW9uCisgICAgJFBTUUwgdGVzdCA8PEVPRgorSU5TRVJUIElOVE8gdDEgVkFMVUVTICgxKTsK K1NFTEVDVCAnd3JpdGVfcmVhZF90ZXN0JyBhcyBtYXJrZXIsICogRlJPTSB0MTsKK0VPRgorCisg ICAgIyBTbWFsbCBkZWxheSB0byBlbnN1cmUgbG9nIGlzIGZsdXNoZWQKKyAgICBzbGVlcCAwLjUK KworICAgICMgQ2hlY2sgbG9nIGZvciB0YWJsZSBzdGFsZW5lc3MgbWVzc2FnZQorICAgIGlmIGdy ZXAgLWEgLXEgImNvdWxkIG5vdCBsb2FkIGJhbGFuY2UgYmVjYXVzZSB0YWJsZS4qd2FzIHJlY2Vu dGx5IHdyaXR0ZW4iIGxvZy9wZ3Bvb2wubG9nOyB0aGVuCisgICAgICAgIGVjaG8gIlRlc3QgMyBQ QVNTRUQ6IFdyaXRlLXRoZW4tcmVhZCByb3V0aW5nIHdvcmtzIgorICAgIGVsc2UKKyAgICAgICAg ZWNobyAiVGVzdCAzIEZBSUxFRDogVGFibGUgc3RhbGVuZXNzIG5vdCBkZXRlY3RlZCBhZnRlciB3 cml0ZSIKKyAgICAgICAgIyBTaG93IHJlbGV2YW50IGxvZyBlbnRyaWVzIGZvciBkZWJ1Z2dpbmcK KyAgICAgICAgZ3JlcCAtYSAtaSAidHJhY2tfdGFibGVfbXV0YXRpb24iIGxvZy9wZ3Bvb2wubG9n IHwgdGFpbCAtMjAKKyAgICAgICAgLi9zaHV0ZG93bmFsbAorICAgICAgICBleGl0IDEKKyAgICBm aQorCisgICAgZWNobyAiPT09IFRlc3QgNDogQ2xlYW4gVGFibGUgU3RpbGwgTG9hZCBCYWxhbmNl cyA9PT0iCisgICAgIyBDbGVhciB0aGUgbG9nCisgICAgPiBsb2cvcGdwb29sLmxvZworCisgICAg IyBSZWFkIGZyb20gdDIgKG5ldmVyIHdyaXR0ZW4gdG8pIC0gc2hvdWxkIGxvYWQgYmFsYW5jZQor ICAgICRQU1FMIHRlc3QgLWMgIlNFTEVDVCAnY2xlYW5fdGFibGVfdGVzdCcgYXMgbWFya2VyLCAq IEZST00gdDI7IiA+IC9kZXYvbnVsbCAyPiYxCisKKyAgICAjIFNob3VsZCBOT1Qgc2VlIHRyYWNr IHRhYmxlIG11dGF0aW9uIGJsb2NraW5nIG1lc3NhZ2UgZm9yIHQyCisgICAgaWYgZ3JlcCAtYSAt cSAiY291bGQgbm90IGxvYWQgYmFsYW5jZSBiZWNhdXNlIHRhYmxlLip0Mi4qd2FzIHJlY2VudGx5 IHdyaXR0ZW4iIGxvZy9wZ3Bvb2wubG9nOyB0aGVuCisgICAgICAgIGVjaG8gIlRlc3QgNCBGQUlM RUQ6IENsZWFuIHRhYmxlIGluY29ycmVjdGx5IG1hcmtlZCBhcyBzdGFsZSIKKyAgICAgICAgLi9z aHV0ZG93bmFsbAorICAgICAgICBleGl0IDEKKyAgICBmaQorICAgIGVjaG8gIlRlc3QgNCBQQVNT RUQ6IENsZWFuIHRhYmxlcyBzdGlsbCBsb2FkIGJhbGFuY2UiCisKKyAgICBlY2hvICI9PT0gVGVz dCA1OiBVUERBVEUgTWFya3MgVGFibGUgYXMgU3RhbGUgPT09IgorICAgICMgQ2xlYXIgdGhlIGxv ZworICAgID4gbG9nL3BncG9vbC5sb2cKKworICAgICMgVXBkYXRlIHQyIGFuZCB0aGVuIHJlYWQg LSB1c2Ugc2luZ2xlIGNvbm5lY3Rpb24KKyAgICAkUFNRTCB0ZXN0IDw8RU9GCitVUERBVEUgdDIg U0VUIGkgPSA5OTkgV0hFUkUgaSA9IDA7CitTRUxFQ1QgJ3VwZGF0ZV90ZXN0JyBhcyBtYXJrZXIs ICogRlJPTSB0MjsKK0VPRgorCisgICAgIyBTbWFsbCBkZWxheSB0byBlbnN1cmUgbG9nIGlzIGZs dXNoZWQKKyAgICBzbGVlcCAwLjUKKworICAgIGlmIGdyZXAgLWEgLXEgImNvdWxkIG5vdCBsb2Fk IGJhbGFuY2UgYmVjYXVzZSB0YWJsZS4qd2FzIHJlY2VudGx5IHdyaXR0ZW4iIGxvZy9wZ3Bvb2wu bG9nOyB0aGVuCisgICAgICAgIGVjaG8gIlRlc3QgNSBQQVNTRUQ6IFVQREFURSBtYXJrcyB0YWJs ZSBhcyBzdGFsZSIKKyAgICBlbHNlCisgICAgICAgIGVjaG8gIlRlc3QgNSBGQUlMRUQ6IFVQREFU RSBkaWQgbm90IG1hcmsgdGFibGUgYXMgc3RhbGUiCisgICAgICAgIC4vc2h1dGRvd25hbGwKKyAg ICAgICAgZXhpdCAxCisgICAgZmkKKworICAgIGVjaG8gIj09PSBUZXN0IDY6IERFTEVURSBNYXJr cyBUYWJsZSBhcyBTdGFsZSA9PT0iCisgICAgIyBDbGVhciB0aGUgbG9nCisgICAgPiBsb2cvcGdw b29sLmxvZworCisgICAgIyBEZWxldGUgZnJvbSB0MyBhbmQgdGhlbiByZWFkIC0gdXNlIHNpbmds ZSBjb25uZWN0aW9uCisgICAgJFBTUUwgdGVzdCA8PEVPRgorREVMRVRFIEZST00gdDMgV0hFUkUg aSA9IDA7CitTRUxFQ1QgJ2RlbGV0ZV90ZXN0JyBhcyBtYXJrZXIsICogRlJPTSB0MzsKK0VPRgor CisgICAgIyBTbWFsbCBkZWxheSB0byBlbnN1cmUgbG9nIGlzIGZsdXNoZWQKKyAgICBzbGVlcCAw LjUKKworICAgIGlmIGdyZXAgLWEgLXEgImNvdWxkIG5vdCBsb2FkIGJhbGFuY2UgYmVjYXVzZSB0 YWJsZS4qd2FzIHJlY2VudGx5IHdyaXR0ZW4iIGxvZy9wZ3Bvb2wubG9nOyB0aGVuCisgICAgICAg IGVjaG8gIlRlc3QgNiBQQVNTRUQ6IERFTEVURSBtYXJrcyB0YWJsZSBhcyBzdGFsZSIKKyAgICBl bHNlCisgICAgICAgIGVjaG8gIlRlc3QgNiBGQUlMRUQ6IERFTEVURSBkaWQgbm90IG1hcmsgdGFi bGUgYXMgc3RhbGUiCisgICAgICAgIC4vc2h1dGRvd25hbGwKKyAgICAgICAgZXhpdCAxCisgICAg ZmkKKworICAgIGVjaG8gIj09PSBUZXN0IDc6IFRSVU5DQVRFIE1hcmtzIFRhYmxlIGFzIFN0YWxl ID09PSIKKyAgICAjIENsZWFyIHRoZSBsb2cKKyAgICA+IGxvZy9wZ3Bvb2wubG9nCisKKyAgICAj IENyZWF0ZSBhIGZyZXNoIHRhYmxlIGZvciBUUlVOQ0FURSB0ZXN0CisgICAgJFBTUUwgdGVzdCAt YyAiQ1JFQVRFIFRBQkxFIHRfdHJ1bmNhdGUoaSBJTlRFR0VSKTsiID4gL2Rldi9udWxsIDI+JjEK KyAgICAkUFNRTCB0ZXN0IC1jICJJTlNFUlQgSU5UTyB0X3RydW5jYXRlIFZBTFVFUyAoMSksICgy KSwgKDMpOyIgPiAvZGV2L251bGwgMj4mMQorCisgICAgIyBXYWl0IGZvciBhbnkgVFRMIHRvIGV4 cGlyZQorICAgIHNsZWVwIDMKKworICAgICMgQ2xlYXIgdGhlIGxvZyBhZ2FpbgorICAgID4gbG9n L3BncG9vbC5sb2cKKworICAgICMgVHJ1bmNhdGUgYW5kIHRoZW4gcmVhZCAtIHVzZSBzaW5nbGUg Y29ubmVjdGlvbgorICAgICRQU1FMIHRlc3QgPDxFT0YKK1RSVU5DQVRFIHRfdHJ1bmNhdGU7CitT RUxFQ1QgJ3RydW5jYXRlX3Rlc3QnIGFzIG1hcmtlciwgKiBGUk9NIHRfdHJ1bmNhdGU7CitFT0YK KworICAgICMgU21hbGwgZGVsYXkgdG8gZW5zdXJlIGxvZyBpcyBmbHVzaGVkCisgICAgc2xlZXAg MC41CisKKyAgICBpZiBncmVwIC1hIC1xICJjb3VsZCBub3QgbG9hZCBiYWxhbmNlIGJlY2F1c2Ug dGFibGUuKndhcyByZWNlbnRseSB3cml0dGVuIiBsb2cvcGdwb29sLmxvZzsgdGhlbgorICAgICAg ICBlY2hvICJUZXN0IDcgUEFTU0VEOiBUUlVOQ0FURSBtYXJrcyB0YWJsZSBhcyBzdGFsZSIKKyAg ICBlbHNlCisgICAgICAgIGVjaG8gIlRlc3QgNyBGQUlMRUQ6IFRSVU5DQVRFIGRpZCBub3QgbWFy ayB0YWJsZSBhcyBzdGFsZSIKKyAgICAgICAgZ3JlcCAtYSAtaSAidHJhY2tfdGFibGVfbXV0YXRp b24iIGxvZy9wZ3Bvb2wubG9nIHwgdGFpbCAtMjAKKyAgICAgICAgLi9zaHV0ZG93bmFsbAorICAg ICAgICBleGl0IDEKKyAgICBmaQorCisgICAgZWNobyAiPT09IFRlc3QgODogV0lUSCBDbGF1c2Ug KENURSB3aXRoIERFTEVURSkgTWFya3MgVGFibGUgYXMgU3RhbGUgPT09IgorICAgICMgQ2xlYXIg dGhlIGxvZworICAgID4gbG9nL3BncG9vbC5sb2cKKworICAgICMgQ3JlYXRlIGEgZnJlc2ggdGFi bGUgZm9yIFdJVEggdGVzdAorICAgICRQU1FMIHRlc3QgLWMgIkNSRUFURSBUQUJMRSB0X2N0ZShp IElOVEVHRVIpOyIgPiAvZGV2L251bGwgMj4mMQorICAgICRQU1FMIHRlc3QgLWMgIklOU0VSVCBJ TlRPIHRfY3RlIFZBTFVFUyAoMSksICgyKSwgKDMpOyIgPiAvZGV2L251bGwgMj4mMQorCisgICAg IyBXYWl0IGZvciBhbnkgVFRMIHRvIGV4cGlyZQorICAgIHNsZWVwIDMKKworICAgICMgQ2xlYXIg dGhlIGxvZyBhZ2FpbgorICAgID4gbG9nL3BncG9vbC5sb2cKKworICAgICMgVXNlIFdJVEggY2xh dXNlIHdpdGggREVMRVRFLCB0aGVuIHJlYWQgZnJvbSB0aGUgdGFibGUKKyAgICAkUFNRTCB0ZXN0 IDw8RU9GCitXSVRIIGRlbGV0ZWQgQVMgKERFTEVURSBGUk9NIHRfY3RlIFdIRVJFIGkgPSAxIFJF VFVSTklORyAqKQorU0VMRUNUICogRlJPTSBkZWxldGVkOworU0VMRUNUICdjdGVfdGVzdCcgYXMg bWFya2VyLCAqIEZST00gdF9jdGU7CitFT0YKKworICAgICMgU21hbGwgZGVsYXkgdG8gZW5zdXJl IGxvZyBpcyBmbHVzaGVkCisgICAgc2xlZXAgMC41CisKKyAgICBpZiBncmVwIC1hIC1xICJjb3Vs ZCBub3QgbG9hZCBiYWxhbmNlIGJlY2F1c2UgdGFibGUuKndhcyByZWNlbnRseSB3cml0dGVuIiBs b2cvcGdwb29sLmxvZzsgdGhlbgorICAgICAgICBlY2hvICJUZXN0IDggUEFTU0VEOiBXSVRIIGNs YXVzZSAoQ1RFKSBtYXJrcyB0YWJsZSBhcyBzdGFsZSIKKyAgICBlbHNlCisgICAgICAgIGVjaG8g IlRlc3QgOCBGQUlMRUQ6IFdJVEggY2xhdXNlIChDVEUpIGRpZCBub3QgbWFyayB0YWJsZSBhcyBz dGFsZSIKKyAgICAgICAgZ3JlcCAtYSAtaSAidHJhY2tfdGFibGVfbXV0YXRpb24iIGxvZy9wZ3Bv b2wubG9nIHwgdGFpbCAtMjAKKyAgICAgICAgLi9zaHV0ZG93bmFsbAorICAgICAgICBleGl0IDEK KyAgICBmaQorCisgICAgIyBUZXN0IDk6IE1FUkdFIChQb3N0Z3JlU1FMIDE1KyBvbmx5KQorICAg IFBHX01BSk9SX1ZFUlNJT049JCgkUFNRTCAtdCAtYyAiU0VMRUNUIHN1YnN0cmluZyh2ZXJzaW9u KCkgZnJvbSAnUG9zdGdyZVNRTCAoWzAtOV0rKScpOyIgfCB0ciAtZCAnICcpCisgICAgaWYgWyAi JFBHX01BSk9SX1ZFUlNJT04iIC1nZSAxNSBdIDI+L2Rldi9udWxsOyB0aGVuCisgICAgICAgIGVj aG8gIj09PSBUZXN0IDk6IE1FUkdFIE1hcmtzIFRhYmxlIGFzIFN0YWxlIChQb3N0Z3JlU1FMICRQ R19NQUpPUl9WRVJTSU9OKSA9PT0iCisgICAgICAgICMgQ2xlYXIgdGhlIGxvZworICAgICAgICA+ IGxvZy9wZ3Bvb2wubG9nCisKKyAgICAgICAgIyBDcmVhdGUgdGFibGVzIGZvciBNRVJHRSB0ZXN0 CisgICAgICAgICRQU1FMIHRlc3QgLWMgIkNSRUFURSBUQUJMRSB0X21lcmdlX3RhcmdldChpZCBJ TlRFR0VSIFBSSU1BUlkgS0VZLCB2YWwgVEVYVCk7IiA+IC9kZXYvbnVsbCAyPiYxCisgICAgICAg ICRQU1FMIHRlc3QgLWMgIkNSRUFURSBUQUJMRSB0X21lcmdlX3NvdXJjZShpZCBJTlRFR0VSLCB2 YWwgVEVYVCk7IiA+IC9kZXYvbnVsbCAyPiYxCisgICAgICAgICRQU1FMIHRlc3QgLWMgIklOU0VS VCBJTlRPIHRfbWVyZ2VfdGFyZ2V0IFZBTFVFUyAoMSwgJ29sZCcpOyIgPiAvZGV2L251bGwgMj4m MQorICAgICAgICAkUFNRTCB0ZXN0IC1jICJJTlNFUlQgSU5UTyB0X21lcmdlX3NvdXJjZSBWQUxV RVMgKDEsICduZXcnKSwgKDIsICdpbnNlcnQnKTsiID4gL2Rldi9udWxsIDI+JjEKKworICAgICAg ICAjIFdhaXQgZm9yIGFueSBUVEwgdG8gZXhwaXJlCisgICAgICAgIHNsZWVwIDMKKworICAgICAg ICAjIENsZWFyIHRoZSBsb2cgYWdhaW4KKyAgICAgICAgPiBsb2cvcGdwb29sLmxvZworCisgICAg ICAgICMgVXNlIE1FUkdFLCB0aGVuIHJlYWQgZnJvbSB0aGUgdGFyZ2V0IHRhYmxlCisgICAgICAg ICRQU1FMIHRlc3QgPDxFT0YKK01FUkdFIElOVE8gdF9tZXJnZV90YXJnZXQgdAorVVNJTkcgdF9t ZXJnZV9zb3VyY2UgcyBPTiB0LmlkID0gcy5pZAorV0hFTiBNQVRDSEVEIFRIRU4gVVBEQVRFIFNF VCB2YWwgPSBzLnZhbAorV0hFTiBOT1QgTUFUQ0hFRCBUSEVOIElOU0VSVCBWQUxVRVMgKHMuaWQs IHMudmFsKTsKK1NFTEVDVCAnbWVyZ2VfdGVzdCcgYXMgbWFya2VyLCAqIEZST00gdF9tZXJnZV90 YXJnZXQ7CitFT0YKKworICAgICAgICAjIFNtYWxsIGRlbGF5IHRvIGVuc3VyZSBsb2cgaXMgZmx1 c2hlZAorICAgICAgICBzbGVlcCAwLjUKKworICAgICAgICBpZiBncmVwIC1hIC1xICJjb3VsZCBu b3QgbG9hZCBiYWxhbmNlIGJlY2F1c2UgdGFibGUuKndhcyByZWNlbnRseSB3cml0dGVuIiBsb2cv cGdwb29sLmxvZzsgdGhlbgorICAgICAgICAgICAgZWNobyAiVGVzdCA5IFBBU1NFRDogTUVSR0Ug bWFya3MgdGFibGUgYXMgc3RhbGUiCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVjaG8gIlRl c3QgOSBGQUlMRUQ6IE1FUkdFIGRpZCBub3QgbWFyayB0YWJsZSBhcyBzdGFsZSIKKyAgICAgICAg ICAgIGdyZXAgLWEgLWkgInRyYWNrX3RhYmxlX211dGF0aW9uIiBsb2cvcGdwb29sLmxvZyB8IHRh aWwgLTIwCisgICAgICAgICAgICAuL3NodXRkb3duYWxsCisgICAgICAgICAgICBleGl0IDEKKyAg ICAgICAgZmkKKyAgICBlbHNlCisgICAgICAgIGVjaG8gIj09PSBUZXN0IDk6IE1FUkdFIHNraXBw ZWQgKHJlcXVpcmVzIFBvc3RncmVTUUwgMTUrLCBoYXZlICRQR19NQUpPUl9WRVJTSU9OKSA9PT0i CisgICAgZmkKKworICAgIGVjaG8gIj09PSBUZXN0IDEwOiBST0xMQkFDSyBEb2VzIE5PVCBNYXJr IFRhYmxlIGFzIFN0YWxlID09PSIKKyAgICAjIENyZWF0ZSBhIGZyZXNoIHRhYmxlIGZvciByb2xs YmFjayB0ZXN0CisgICAgJFBTUUwgdGVzdCAtYyAiQ1JFQVRFIFRBQkxFIHRfcm9sbGJhY2soaSBJ TlRFR0VSKTsiID4gL2Rldi9udWxsIDI+JjEKKworICAgICMgV2FpdCBmb3IgYW55IFRUTCB0byBl eHBpcmUKKyAgICBzbGVlcCAzCisKKyAgICAjIENsZWFyIHRoZSBsb2cKKyAgICA+IGxvZy9wZ3Bv b2wubG9nCisKKyAgICAjIFdyaXRlIGluc2lkZSBhIHRyYW5zYWN0aW9uLCB0aGVuIHJvbGxiYWNr CisgICAgJFBTUUwgdGVzdCA8PEVPRgorQkVHSU47CitJTlNFUlQgSU5UTyB0X3JvbGxiYWNrIFZB TFVFUyAoMSk7CitST0xMQkFDSzsKK1NFTEVDVCAncm9sbGJhY2tfdGVzdCcgYXMgbWFya2VyLCAq IEZST00gdF9yb2xsYmFjazsKK0VPRgorCisgICAgIyBTbWFsbCBkZWxheSB0byBlbnN1cmUgbG9n IGlzIGZsdXNoZWQKKyAgICBzbGVlcCAwLjUKKworICAgICMgU2hvdWxkIE5PVCBzZWUgdF9yb2xs YmFjayBtYXJrZWQgYXMgc3RhbGUgc2luY2UgdGhlIHdyaXRlIHdhcyByb2xsZWQgYmFjaworICAg IGlmIGdyZXAgLWEgLXEgImNvdWxkIG5vdCBsb2FkIGJhbGFuY2UgYmVjYXVzZSB0YWJsZS4qdF9y b2xsYmFjay4qd2FzIHJlY2VudGx5IHdyaXR0ZW4iIGxvZy9wZ3Bvb2wubG9nOyB0aGVuCisgICAg ICAgIGVjaG8gIlRlc3QgMTAgRkFJTEVEOiBSb2xsZWQtYmFjayB3cml0ZSBpbmNvcnJlY3RseSBt YXJrZWQgdGFibGUgYXMgc3RhbGUiCisgICAgICAgIGdyZXAgLWEgLWkgInRyYWNrX3RhYmxlX211 dGF0aW9uIiBsb2cvcGdwb29sLmxvZyB8IHRhaWwgLTIwCisgICAgICAgIC4vc2h1dGRvd25hbGwK KyAgICAgICAgZXhpdCAxCisgICAgZmkKKyAgICBlY2hvICJUZXN0IDEwIFBBU1NFRDogUk9MTEJB Q0sgZG9lcyBub3QgbWFyayB0YWJsZSBhcyBzdGFsZSIKKworICAgIGVjaG8gIj09PSBUZXN0IDEx OiBDT01NSVQgTWFya3MgVGFibGUgYXMgU3RhbGUgPT09IgorICAgICMgQ3JlYXRlIGEgZnJlc2gg dGFibGUgZm9yIGNvbW1pdCB0ZXN0CisgICAgJFBTUUwgdGVzdCAtYyAiQ1JFQVRFIFRBQkxFIHRf Y29tbWl0KGkgSU5URUdFUik7IiA+IC9kZXYvbnVsbCAyPiYxCisKKyAgICAjIFdhaXQgZm9yIGFu eSBUVEwgdG8gZXhwaXJlCisgICAgc2xlZXAgMworCisgICAgIyBDbGVhciB0aGUgbG9nCisgICAg PiBsb2cvcGdwb29sLmxvZworCisgICAgIyBXcml0ZSBpbnNpZGUgYSB0cmFuc2FjdGlvbiwgdGhl biBjb21taXQsIHRoZW4gcmVhZAorICAgICRQU1FMIHRlc3QgPDxFT0YKK0JFR0lOOworSU5TRVJU IElOVE8gdF9jb21taXQgVkFMVUVTICgxKTsKK0NPTU1JVDsKK1NFTEVDVCAnY29tbWl0X3Rlc3Qn IGFzIG1hcmtlciwgKiBGUk9NIHRfY29tbWl0OworRU9GCisKKyAgICAjIFNtYWxsIGRlbGF5IHRv IGVuc3VyZSBsb2cgaXMgZmx1c2hlZAorICAgIHNsZWVwIDAuNQorCisgICAgaWYgZ3JlcCAtYSAt cSAiY291bGQgbm90IGxvYWQgYmFsYW5jZSBiZWNhdXNlIHRhYmxlLip3YXMgcmVjZW50bHkgd3Jp dHRlbiIgbG9nL3BncG9vbC5sb2c7IHRoZW4KKyAgICAgICAgZWNobyAiVGVzdCAxMSBQQVNTRUQ6 IENPTU1JVCBtYXJrcyB0YWJsZSBhcyBzdGFsZSIKKyAgICBlbHNlCisgICAgICAgIGVjaG8gIlRl c3QgMTEgRkFJTEVEOiBDb21taXR0ZWQgd3JpdGUgZGlkIG5vdCBtYXJrIHRhYmxlIGFzIHN0YWxl IgorICAgICAgICBncmVwIC1hIC1pICJ0cmFja190YWJsZV9tdXRhdGlvbiIgbG9nL3BncG9vbC5s b2cgfCB0YWlsIC0yMAorICAgICAgICAuL3NodXRkb3duYWxsCisgICAgICAgIGV4aXQgMQorICAg IGZpCisKKyAgICBlY2hvICIiCisgICAgZWNobyAiPT09IEFsbCBUcmFjayBUYWJsZSBNdXRhdGlv biBUZXN0cyBQQVNTRUQgPT09IgorCisgICAgLi9zaHV0ZG93bmFsbAorCisgICAgY2QgLi4KK2Rv bmUKKworZXhpdCAwCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzaW9uL3Rlc3RzLzA0My50 cmFja190YWJsZV9tdXRhdGlvbl93YXRjaGRvZy90ZXN0LnNoIGIvc3JjL3Rlc3QvcmVncmVzc2lv bi90ZXN0cy8wNDMudHJhY2tfdGFibGVfbXV0YXRpb25fd2F0Y2hkb2cvdGVzdC5zaApuZXcgZmls ZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAuLmM1MGMyMTNkNgotLS0gL2Rldi9udWxsCisr KyBiL3NyYy90ZXN0L3JlZ3Jlc3Npb24vdGVzdHMvMDQzLnRyYWNrX3RhYmxlX211dGF0aW9uX3dh dGNoZG9nL3Rlc3Quc2gKQEAgLTAsMCArMSwxODQgQEAKKyMhL3Vzci9iaW4vZW52IGJhc2gKKyMt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisjIFRlc3Qgc2NyaXB0IGZvciB0cmFjayB0YWJsZSBtdXRhdGlvbiBnbG9iYWwg Y29sZCBzdGFydAorIyBvbiB3YXRjaGRvZyBsZWFkZXIgY2hhbmdlLgorIworIyBVc2VzICRXQVRD SERPR19TRVRVUCB0byBjcmVhdGUgYSAyLW5vZGUgd2F0Y2hkb2cgY2x1c3RlciwKKyMgdGhlbiB2 ZXJpZmllcyB0aGF0IHdoZW4gdGhlIGxlYWRlciBpcyBzdG9wcGVkIHRoZSBuZXcKKyMgbGVhZGVy IHRyaWdnZXJzIGEgZ2xvYmFsIGNvbGQgc3RhcnQuCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorc291cmNlICRURVNU TElCUworVEVTVERJUj10ZXN0ZGlyCitQU1FMPSRQR0JJTi9wc3FsCitzdWNjZXNzX2NvdW50PTAK KworZGlyPWBwd2RgCitybSAtZnIgJFRFU1RESVIKK21rZGlyICRURVNURElSCitjZCAkVEVTVERJ UgorCisjIENyZWF0ZSAyLW5vZGUgd2F0Y2hkb2cgY2x1c3RlcgorJFdBVENIRE9HX1NFVFVQIC13 biAyIHx8IGV4aXQgMQorCisjIEVuc3VyZSBwZXItbm9kZSBzY3JpcHRzIGFyZSBleGVjdXRhYmxl CisjIChzZWQgLWkgaW4gd2F0Y2hkb2dfc2V0dXAgY2FuIHN0cmlwIHBlcm1pc3Npb25zKQorY2ht b2QgNzU1IHBncG9vbCovc3RhcnRhbGwgcGdwb29sKi9zaHV0ZG93bmFsbAorCisjIEFwcGVuZCB0 cmFja190YWJsZV9tdXRhdGlvbiBjb25maWcgdG8gYm90aCBub2RlcworZm9yIGkgaW4gMCAxCitk bworCWNhdCA+PiBwZ3Bvb2wke2l9L2V0Yy9wZ3Bvb2wuY29uZiA8PEVPRgorZGlzYWJsZV9sb2Fk X2JhbGFuY2Vfb25fd3JpdGUgPSAnZG1sX2FkYXB0aXZlX2dsb2JhbCcKK3RyYWNrX3RhYmxlX211 dGF0aW9uX2NvbGRfc3RhcnRfZHVyYXRpb24gPSAyMDAwCitlbmFibGVfY29uc2Vuc3VzX3dpdGhf aGFsZl92b3RlcyA9IG9uCitsb2dfbWluX21lc3NhZ2VzID0gZGVidWcxCitFT0YKK2RvbmUKKwor Li9zdGFydGFsbAorZXhwb3J0IFBDUFBBU1NGSUxFPSRkaXIvJFRFU1RESVIvcGdwb29sMC9wY3Bw YXNzCisKKyMgV2FpdCBmb3Igd2F0Y2hkb2cgbGlmZWNoZWNrIG9uIG5vZGUgMAorZWNobyAtbiAi d2FpdGluZyBmb3Igd2F0Y2hkb2cgbm9kZSAwIHN0YXJ0aW5nIHVwLi4uIgorZm9yIGkgaW4gMSAy IDMgNCA1IDYgNyA4IDkgMTAKK2RvCisJZ3JlcCAibGlmZWNoZWNrIHN0YXJ0ZWQiIFwKKwkJcGdw b29sMC9sb2cvcGdwb29sLmxvZyA+IC9kZXYvbnVsbCAyPiYxCisJaWYgWyAkPyA9IDAgXTsgdGhl bgorCQlicmVhaworCWZpCisJc2xlZXAgMgorZG9uZQorZWNobyAiZG9uZS4iCisKKyMgVGVzdCAx OiBWZXJpZnkgbGVhZGVyIGNhbWUgdXAKK2VjaG8gIj09PSBUZXN0IDE6IFdhaXRpbmcgZm9yIHRo ZSBwZ3Bvb2wgbGVhZGVyLi4uID09PSIKK2ZvciBpIGluIDEgMiAzIDQgNSA2IDcgOCA5IDEwCitk bworCWdyZXAgIkkgYW0gdGhlIGNsdXN0ZXIgbGVhZGVyIG5vZGUiIFwKKwkJcGdwb29sMC9sb2cv cGdwb29sLmxvZyA+IC9kZXYvbnVsbCAyPiYxCisJaWYgWyAkPyA9IDAgXTsgdGhlbgorCQlzdWNj ZXNzX2NvdW50PSQoKCBzdWNjZXNzX2NvdW50ICsgMSApKQorCQllY2hvICJUZXN0IDEgUEFTU0VE OiBMZWFkZXIgYnJvdWdodCB1cC4iCisJCWJyZWFrCisJZmkKKwllY2hvICJbY2hlY2tdICRpIHRp bWVzIgorCXNsZWVwIDIKK2RvbmUKKworaWYgWyAkc3VjY2Vzc19jb3VudCAtbHQgMSBdOyB0aGVu CisJZWNobyAiVGVzdCAxIEZBSUxFRDogTGVhZGVyIGRpZCBub3Qgc3RhcnQiCisJLi9zaHV0ZG93 bmFsbAorCWV4aXQgMQorZmkKKworIyBUZXN0IDI6IFZlcmlmeSBzdGFuZGJ5IGpvaW5lZCBjbHVz dGVyCitlY2hvICI9PT0gVGVzdCAyOiBXYWl0aW5nIGZvciBzdGFuZGJ5IHRvIGpvaW4uLi4gPT09 IgorZm9yIGkgaW4gMSAyIDMgNCA1IDYgNyA4IDkgMTAKK2RvCisJZ3JlcCAic3VjY2Vzc2Z1bGx5 IGpvaW5lZCB0aGUgd2F0Y2hkb2cgY2x1c3RlciIgXAorCQlwZ3Bvb2wxL2xvZy9wZ3Bvb2wubG9n ID4gL2Rldi9udWxsIDI+JjEKKwlpZiBbICQ/ID0gMCBdOyB0aGVuCisJCXN1Y2Nlc3NfY291bnQ9 JCgoIHN1Y2Nlc3NfY291bnQgKyAxICkpCisJCWVjaG8gIlRlc3QgMiBQQVNTRUQ6IFN0YW5kYnkg am9pbmVkLiIKKwkJYnJlYWsKKwlmaQorCWVjaG8gIltjaGVja10gJGkgdGltZXMiCisJc2xlZXAg MgorZG9uZQorCitpZiBbICRzdWNjZXNzX2NvdW50IC1sdCAyIF07IHRoZW4KKwllY2hvICJUZXN0 IDIgRkFJTEVEOiBTdGFuZGJ5IGRpZCBub3Qgam9pbiIKKwkuL3NodXRkb3duYWxsCisJZXhpdCAx CitmaQorCisjIFRlc3QgMzogVmVyaWZ5IHRyYWNrX3RhYmxlX211dGF0aW9uIGluaXRpYWxpemVk CitlY2hvICI9PT0gVGVzdCAzOiBWZXJpZnkgZmVhdHVyZSBpbml0aWFsaXplZCA9PT0iCitpZiBn cmVwIC1hICJ0cmFja190YWJsZV9tdXRhdGlvbjogaW5pdGlhbGl6ZWQiIFwKKwlwZ3Bvb2wwL2xv Zy9wZ3Bvb2wubG9nID4gL2Rldi9udWxsIDI+JjE7IHRoZW4KKwlzdWNjZXNzX2NvdW50PSQoKCBz dWNjZXNzX2NvdW50ICsgMSApKQorCWVjaG8gIlRlc3QgMyBQQVNTRUQ6IEZlYXR1cmUgaW5pdGlh bGl6ZWQuIgorZWxzZQorCWVjaG8gIlRlc3QgMyBGQUlMRUQ6IEZlYXR1cmUgbm90IGluaXRpYWxp emVkIgorCS4vc2h1dGRvd25hbGwKKwlleGl0IDEKK2ZpCisKKyMgVGVzdCA0OiBTdG9wIGxlYWRl ciAocGdwb29sMCkgdG8gdHJpZ2dlciBmYWlsb3ZlcgorZWNobyAiPT09IFRlc3QgNDogU3RvcHBp bmcgbGVhZGVyLi4uID09PSIKK2NkIHBncG9vbDAKK3NvdXJjZSAuL2Jhc2hyYy5wb3J0cworJFBH UE9PTF9JTlNUQUxMX0RJUi9iaW4vcGdwb29sIFwKKwktZiBldGMvcGdwb29sLmNvbmYgLW0gZiBz dG9wCitjZCAuLgorCitlY2hvICJDaGVja2luZyBzdGFuZGJ5IGRldGVjdGVkIHNodXRkb3duLi4u IgorZm9yIGkgaW4gMSAyIDMgNCA1IDYgNyA4IDkgMTAKK2RvCisJZ3JlcCAtYSAiaXMgc2h1dHRp bmcgZG93biIgXAorCQlwZ3Bvb2wxL2xvZy9wZ3Bvb2wubG9nID4gL2Rldi9udWxsIDI+JjEKKwlp ZiBbICQ/ID0gMCBdOyB0aGVuCisJCXN1Y2Nlc3NfY291bnQ9JCgoIHN1Y2Nlc3NfY291bnQgKyAx ICkpCisJCWVjaG8gIlRlc3QgNCBQQVNTRUQ6IFNodXRkb3duIGRldGVjdGVkLiIKKwkJYnJlYWsK KwlmaQorCWVjaG8gIltjaGVja10gJGkgdGltZXMiCisJc2xlZXAgMgorZG9uZQorCitpZiBbICRz dWNjZXNzX2NvdW50IC1sdCA0IF07IHRoZW4KKwllY2hvICJUZXN0IDQgRkFJTEVEOiBTaHV0ZG93 biBub3QgZGV0ZWN0ZWQiCisJLi9zaHV0ZG93bmFsbAorCWV4aXQgMQorZmkKKworIyBUZXN0IDU6 IFZlcmlmeSBzdGFuZGJ5IGJlY2FtZSBuZXcgbGVhZGVyCitlY2hvICI9PT0gVGVzdCA1OiBDaGVj a2luZyBzdGFuZGJ5IHRha2VzIG92ZXIuLi4gPT09IgorZm9yIGkgaW4gMSAyIDMgNCA1IDYgNyA4 IDkgMTAKK2RvCisJZ3JlcCAtYSAiSSBhbSB0aGUgY2x1c3RlciBsZWFkZXIgbm9kZSIgXAorCQlw Z3Bvb2wxL2xvZy9wZ3Bvb2wubG9nID4gL2Rldi9udWxsIDI+JjEKKwlpZiBbICQ/ID0gMCBdOyB0 aGVuCisJCXN1Y2Nlc3NfY291bnQ9JCgoIHN1Y2Nlc3NfY291bnQgKyAxICkpCisJCWVjaG8gIlRl c3QgNSBQQVNTRUQ6IFN0YW5kYnkgYmVjYW1lIGxlYWRlci4iCisJCWJyZWFrCisJZmkKKwllY2hv ICJbY2hlY2tdICRpIHRpbWVzIgorCXNsZWVwIDIKK2RvbmUKKworaWYgWyAkc3VjY2Vzc19jb3Vu dCAtbHQgNSBdOyB0aGVuCisJZWNobyAiVGVzdCA1IEZBSUxFRDogU3RhbmRieSBkaWQgbm90IGJl Y29tZSBsZWFkZXIiCisJLi9zaHV0ZG93bmFsbAorCWV4aXQgMQorZmkKKworIyBUZXN0IDY6IFZl cmlmeSBnbG9iYWwgY29sZCBzdGFydCB3YXMgdHJpZ2dlcmVkCitlY2hvICI9PT0gVGVzdCA2OiBD aGVja2luZyBnbG9iYWwgY29sZCBzdGFydC4uLiA9PT0iCitmb3IgaSBpbiAxIDIgMyA0IDUgNiA3 IDggOSAxMAorZG8KKwlncmVwIC1hICJ0cmFja190YWJsZV9tdXRhdGlvbjogZ2xvYmFsIGNvbGQg c3RhcnQiIFwKKwkJcGdwb29sMS9sb2cvcGdwb29sLmxvZyA+IC9kZXYvbnVsbCAyPiYxCisJaWYg WyAkPyA9IDAgXTsgdGhlbgorCQlzdWNjZXNzX2NvdW50PSQoKCBzdWNjZXNzX2NvdW50ICsgMSAp KQorCQllY2hvICJUZXN0IDYgUEFTU0VEOiBHbG9iYWwgY29sZCBzdGFydCB0cmlnZ2VyZWQuIgor CQlicmVhaworCWZpCisJZWNobyAiW2NoZWNrXSAkaSB0aW1lcyIKKwlzbGVlcCAyCitkb25lCisK KyMgQ2xlYW51cAorLi9zaHV0ZG93bmFsbAorCitlY2hvICIiCitlY2hvICIkc3VjY2Vzc19jb3Vu dCBvdXQgb2YgNiBzdWNjZXNzZnVsIgorCitpZiB0ZXN0ICRzdWNjZXNzX2NvdW50IC1lcSA2Cit0 aGVuCisJZWNobyAiPT09IEFsbCBXYXRjaGRvZyBUZXN0cyBQQVNTRUQgPT09IgorCWV4aXQgMAor ZmkKKworZXhpdCAxCmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlz dCBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4IDkzOTIwMDk2NS4uMGYx ZmE4ODRjIDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysg Yi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApAQCAtNDMxLDYgKzQzMSw4IEBAIFB1 YmxpY2F0aW9uT2JqU3BlYwogUHVibGljYXRpb25PYmpTcGVjVHlwZQogUHVibGljYXRpb25UYWJs ZQogUXVlcnkKK1F1ZXJ5UGFyc2VDYWNoZQorUXVlcnlQYXJzZUVudHJ5CiBRdWVyeVNvdXJjZQog UkVMUVRBUkdFVF9PUFRJT04KIFJURUtpbmQKQEAgLTUxOSw2ICs1MjEsMTAgQEAgVGFibGVMaWtl Q2xhdXNlCiBUYWJsZVNhbXBsZUNsYXVzZQogVGFyZ2V0RW50cnkKIFRva2VuaXplZExpbmUKK1Ry YWNrVGFibGVNdXRhdGlvbkVudHJ5CitUcmFja1RhYmxlTXV0YXRpb25IYXNoVGFibGUKK1RyYWNr VGFibGVNdXRhdGlvblNobWVtCitUcmFja1RhYmxlTXV0YXRpb25TdGF0ZQogVHJhbnNhY3Rpb25J ZAogVHJhbnNhY3Rpb25TdG10CiBUcmFuc2FjdGlvblN0bXRLaW5kCmRpZmYgLS1naXQgYS9zcmMv dXRpbHMvcG9vbF90cmFja190YWJsZV9tdXRhdGlvbi5jIGIvc3JjL3V0aWxzL3Bvb2xfdHJhY2tf dGFibGVfbXV0YXRpb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAuLjli ZTQ2YjI4ZgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy91dGlscy9wb29sX3RyYWNrX3RhYmxlX211 dGF0aW9uLmMKQEAgLTAsMCArMSwxNDUwIEBACisvKiAtKi1wZ3NxbC1jLSotICovCisvKgorICog cGdwb29sOiBhIGxhbmd1YWdlIGluZGVwZW5kZW50IGNvbm5lY3Rpb24gcG9vbCBzZXJ2ZXIgZm9y IFBvc3RncmVTUUwKKyAqIHdyaXR0ZW4gYnkgVGF0c3VvIElzaGlpCisgKgorICogQ29weXJpZ2h0 IChjKSAyMDAzLTIwMjYJUGdQb29sIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqIFBl cm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdh cmUgYW5kCisgKiBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQg ZmVlIGlzIGhlcmVieQorICogZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJp Z2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsCisgKiBjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGF0IGNv cHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbgorICogbm90aWNlIGFwcGVhciBpbiBz dXBwb3J0aW5nIGRvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIG9mIHRoZQorICogYXV0 aG9yIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRv CisgKiBkaXN0cmlidXRpb24gb2YgdGhlIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0 ZW4gcHJpb3IKKyAqIHBlcm1pc3Npb24uIFRoZSBhdXRob3IgbWFrZXMgbm8gcmVwcmVzZW50YXRp b25zIGFib3V0IHRoZQorICogc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1 cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMKKyAqIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1w bGllZCB3YXJyYW50eS4KKyAqCisgKiBwb29sX3RyYWNrX3RhYmxlX211dGF0aW9uLmM6IEluLW1l bW9yeSB0cmFja2luZyBvZiByZWNlbnRseQorICogICB3cml0dGVuIHRhYmxlcyB0byBwcmV2ZW50 IHN0YWxlIHJlYWRzIGZyb20gcmVwbGljYXMuCisgKgorICogQmFzZWQgb24gdGhlICJsYWdsZXNz IiBhcmNoaXRlY3R1cmUgZnJvbSBUYWlsb3IgQnJhbmRzLgorICovCisKKyNpbmNsdWRlIDxzdHJp bmcuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2luY2x1 ZGUgPHVuaXN0ZC5oPgorCisjaW5jbHVkZSAicG9vbC5oIgorI2luY2x1ZGUgInBvb2xfY29uZmln LmgiCisjaW5jbHVkZSAiY29udGV4dC9wb29sX3Nlc3Npb25fY29udGV4dC5oIgorI2luY2x1ZGUg InV0aWxzL3Bvb2xfdHJhY2tfdGFibGVfbXV0YXRpb24uaCIKKyNpbmNsdWRlICJ1dGlscy9lbG9n LmgiCisjaW5jbHVkZSAidXRpbHMvcG9vbF9pcGMuaCIKKyNpbmNsdWRlICJ1dGlscy9wYWxsb2Mu aCIKKyNpbmNsdWRlICJ1dGlscy9wb29sX3JlbGNhY2hlLmgiCisKKyNkZWZpbmUgREFUQUJBU0Vf VE9fT0lEX1FVRVJZIFwKKwkiU0VMRUNUIG9pZCBGUk9NIHBnX2NhdGFsb2cucGdfZGF0YWJhc2Ui IFwKKwkiIFdIRVJFIGRhdG5hbWUgPSAnJXMnIgorCisvKgorICogSGVscGVyIG1hY3JvOiB0cnVl IHdoZW4gdGhlIGZlYXR1cmUgaXMgbm90IGFjdGl2ZS4KKyAqLworI2RlZmluZSBUUkFDS19UQUJM RV9NVVRBVElPTl9ESVNBQkxFRCgpIFwKKwkocG9vbF9jb25maWctPmRpc2FibGVfbG9hZF9iYWxh bmNlX29uX3dyaXRlICE9IFwKKwkgRExCT1dfRE1MX0FEQVBUSVZFX0dMT0JBTCB8fCBcCisJIHRy YWNrX3RhYmxlX211dGF0aW9uX3NobWVtID09IE5VTEwpCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0K KyAqIExvY2FsIHZhcmlhYmxlcworICogLS0tLS0tLS0tLS0tLS0tLQorICovCisKKy8qIFBvaW50 ZXIgdG8gc2hhcmVkIG1lbW9yeSBzdHJ1Y3R1cmUgKi8KK3N0YXRpYyBUcmFja1RhYmxlTXV0YXRp b25TaG1lbSAqdHJhY2tfdGFibGVfbXV0YXRpb25fc2htZW0gPSBOVUxMOworCisvKiBQZXItcHJv Y2VzcyBjb2xkIHN0YXJ0IHRyYWNraW5nIChub3QgaW4gc2hhcmVkIG1lbW9yeSkgKi8KK3N0YXRp YyBzdHJ1Y3QgdGltZXZhbCBwcm9jZXNzX3N0YXJ0X3RpbWU7CitzdGF0aWMgYm9vbCBjb2xkX3N0 YXJ0X2luaXRpYWxpemVkID0gZmFsc2U7CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0KKyAqIEhlbHBl ciBtYWNyb3MgZm9yIGZsZXhpYmxlIGFycmF5cyBpbiBzaGFyZWQgbWVtb3J5CisgKiAtLS0tLS0t LS0tLS0tLS0tCisgKi8KKworLyogR2V0IHBvaW50ZXIgdG8gYnVja2V0IGFycmF5IGluIHRhYmxl IG1hcCAqLworI2RlZmluZSBUQUJMRV9NQVBfQlVDS0VUUyhtYXApIFwKKwkoKGludCAqKSgoY2hh ciAqKShtYXApICsgXAorCQlzaXplb2YoVHJhY2tUYWJsZU11dGF0aW9uSGFzaFRhYmxlKSkpCisK Ky8qIEdldCBwb2ludGVyIHRvIGVudHJ5IGFycmF5IGluIHRhYmxlIG1hcCAqLworI2RlZmluZSBU QUJMRV9NQVBfRU5UUklFUyhtYXApIFwKKwkoKFRyYWNrVGFibGVNdXRhdGlvbkVudHJ5ICopKChj aGFyICopKG1hcCkgKyBcCisJCXNpemVvZihUcmFja1RhYmxlTXV0YXRpb25IYXNoVGFibGUpICsg XAorCQkobWFwKS0+bnVtX2J1Y2tldHMgKiBzaXplb2YoaW50KSkpCisKKy8qIEdldCBwb2ludGVy IHRvIGJ1Y2tldCBhcnJheSBpbiBwYXJzZSBjYWNoZSAqLworI2RlZmluZSBQQVJTRV9DQUNIRV9C VUNLRVRTKGNhY2hlKSBcCisJKChpbnQgKikoKGNoYXIgKikoY2FjaGUpICsgc2l6ZW9mKFF1ZXJ5 UGFyc2VDYWNoZSkpKQorCisvKiBHZXQgcG9pbnRlciB0byBlbnRyeSBhcnJheSBpbiBwYXJzZSBj YWNoZSAqLworI2RlZmluZSBQQVJTRV9DQUNIRV9FTlRSSUVTKGNhY2hlKSBcCisJKChRdWVyeVBh cnNlRW50cnkgKikoKGNoYXIgKikoY2FjaGUpICsgXAorCQlzaXplb2YoUXVlcnlQYXJzZUNhY2hl KSArIFwKKwkJKGNhY2hlKS0+bnVtX2J1Y2tldHMgKiBzaXplb2YoaW50KSkpCisKKy8qIC0tLS0t LS0tLS0tLS0tLS0KKyAqIFNlbWFwaG9yZSBsb2NrIGhlbHBlcnMKKyAqIC0tLS0tLS0tLS0tLS0t LS0KKyAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK3RhYmxlX21hcF9sb2NrKHZvaWQpCit7CisJ cG9vbF9zZW1hcGhvcmVfbG9jayhUUkFDS19UQUJMRV9NVVRBVElPTl9UQUJMRV9TRU0pOworfQor CitzdGF0aWMgaW5saW5lIHZvaWQKK3RhYmxlX21hcF91bmxvY2sodm9pZCkKK3sKKwlwb29sX3Nl bWFwaG9yZV91bmxvY2soVFJBQ0tfVEFCTEVfTVVUQVRJT05fVEFCTEVfU0VNKTsKK30KKworc3Rh dGljIGlubGluZSB2b2lkCitwYXJzZV9jYWNoZV9sb2NrKHZvaWQpCit7CisJcG9vbF9zZW1hcGhv cmVfbG9jayhUUkFDS19UQUJMRV9NVVRBVElPTl9RVUVSWV9TRU0pOworfQorCitzdGF0aWMgaW5s aW5lIHZvaWQKK3BhcnNlX2NhY2hlX3VubG9jayh2b2lkKQoreworCXBvb2xfc2VtYXBob3JlX3Vu bG9jayhUUkFDS19UQUJMRV9NVVRBVElPTl9RVUVSWV9TRU0pOworfQorCisvKiAtLS0tLS0tLS0t LS0tLS0tCisgKiBIYXNoIGZ1bmN0aW9ucworICogLS0tLS0tLS0tLS0tLS0tLQorICovCisKKy8q CisgKiBGTlYtMWEgaGFzaCBmb3IgdGFibGUvZGF0YWJhc2Ugb2lkIHBhaXIKKyAqLworc3RhdGlj IHVpbnQzMgorZm52MWFfaGFzaF90YWJsZV9rZXkoaW50IHRhYmxlX29pZCwgaW50IGRib2lkKQor eworCXVpbnQzMgkJaGFzaCA9IDIxNjYxMzYyNjF1OyAvKiBGTlYgb2Zmc2V0IGJhc2lzICovCisJ dWludDMyCQlkYXRhWzJdOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ5dGVzOworCXNpemVfdAkJ aTsKKworCWRhdGFbMF0gPSAodWludDMyKSB0YWJsZV9vaWQ7CisJZGF0YVsxXSA9ICh1aW50MzIp IGRib2lkOworCWJ5dGVzID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgZGF0YTsKKworCWZvciAo aSA9IDA7IGkgPCBzaXplb2YoZGF0YSk7IGkrKykKKwl7CisJCWhhc2ggXj0gYnl0ZXNbaV07CisJ CWhhc2ggKj0gMTY3Nzc2MTl1OwkJLyogRk5WIHByaW1lICovCisJfQorCisJcmV0dXJuIGhhc2g7 Cit9CisKKy8qCisgKiBGTlYtMWEgaGFzaCBmb3IgNjQtYml0IHZhbHVlCisgKi8KK3N0YXRpYyB1 aW50NjQKK2ZudjFhX2hhc2hfNjQoY29uc3QgY2hhciAqc3RyLCBzaXplX3QgbGVuKQoreworCS8q IEZOViBvZmZzZXQgYmFzaXMgZm9yIDY0LWJpdCAqLworCXVpbnQ2NAkJaGFzaCA9IDE0Njk1OTgx MDM5MzQ2NjU2MDM3VUxMOworCXNpemVfdAkJaTsKKworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkr KykKKwl7CisJCWhhc2ggXj0gKHVpbnQ4KSBzdHJbaV07CisJCWhhc2ggKj0gMTA5OTUxMTYyODIx MVVMTDsJLyogRk5WIHByaW1lICovCisJfQorCisJcmV0dXJuIGhhc2g7Cit9CisKKy8qIC0tLS0t LS0tLS0tLS0tLS0KKyAqIFRpbWUgdXRpbGl0aWVzCisgKiAtLS0tLS0tLS0tLS0tLS0tCisgKi8K KworLyoKKyAqIEdldCBlbGFwc2VkIHRpbWUgaW4gbWljcm9zZWNvbmRzIGJldHdlZW4gdHdvIHRp bWV2YWxzCisgKi8KK3N0YXRpYyBpbnQ2NAorZWxhcHNlZF91cyhzdHJ1Y3QgdGltZXZhbCAqc3Rh cnQsIHN0cnVjdCB0aW1ldmFsICplbmQpCit7CisJcmV0dXJuICgoaW50NjQpIChlbmQtPnR2X3Nl YyAtIHN0YXJ0LT50dl9zZWMpICogMTAwMDAwMCkKKwkJKyAoZW5kLT50dl91c2VjIC0gc3RhcnQt PnR2X3VzZWMpOworfQorCisvKgorICogR2V0IGN1cnJlbnQgdGltZQorICovCitzdGF0aWMgdm9p ZAorZ2V0X2N1cnJlbnRfdGltZShzdHJ1Y3QgdGltZXZhbCAqdHYpCit7CisJZ2V0dGltZW9mZGF5 KHR2LCBOVUxMKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLQorICogRGF0YWJhc2Ugb2lkIGxv b2t1cAorICogLS0tLS0tLS0tLS0tLS0tLQorICovCisKK3N0YXRpYyBpbnQKK3RyYWNrX3RhYmxl X211dGF0aW9uX2dldF9kYXRhYmFzZV9vaWRfaW50ZXJuYWwodm9pZCkKK3sKKwlpbnQJCQlvaWQg PSAwOworCXN0YXRpYyBQT09MX1JFTENBQ0hFICpyZWxjYWNoZTsKKwlQT09MX0NPTk5FQ1RJT05f UE9PTCAqYmFja2VuZDsKKwlQT09MX1NFU1NJT05fQ09OVEVYVCAqc2Vzc2lvbl9jb250ZXh0Owor CisJLyogU2FmZXR5IGNoZWNrOiBtdXN0IGhhdmUgc2htZW0gaW5pdGlhbGl6ZWQgKi8KKwlpZiAo dHJhY2tfdGFibGVfbXV0YXRpb25fc2htZW0gPT0gTlVMTCkKKwkJcmV0dXJuIG9pZDsKKworCXNl c3Npb25fY29udGV4dCA9IHBvb2xfZ2V0X3Nlc3Npb25fY29udGV4dChmYWxzZSk7CisJaWYgKHNl c3Npb25fY29udGV4dCA9PSBOVUxMKQorCQlyZXR1cm4gb2lkOworCisJYmFja2VuZCA9IHNlc3Np b25fY29udGV4dC0+YmFja2VuZDsKKwlpZiAoYmFja2VuZCA9PSBOVUxMIHx8CisJCU1BSU5fQ09O TkVDVElPTihiYWNrZW5kKSA9PSBOVUxMIHx8CisJCU1BSU5fQ09OTkVDVElPTihiYWNrZW5kKS0+ c3AgPT0gTlVMTCkKKwkJcmV0dXJuIG9pZDsKKworCS8qIEVuc3VyZSBkYXRhYmFzZSBuYW1lIGlz IHZhbGlkICovCisJaWYgKE1BSU5fQ09OTkVDVElPTihiYWNrZW5kKS0+c3AtPmRhdGFiYXNlID09 IE5VTEwpCisJCXJldHVybiBvaWQ7CisKKwlpZiAoIXJlbGNhY2hlKQorCXsKKwkJcmVsY2FjaGUg PSBwb29sX2NyZWF0ZV9yZWxjYWNoZSgKKwkJCQkJCQkJCQlwb29sX2NvbmZpZy0+cmVsY2FjaGVf c2l6ZSwKKwkJCQkJCQkJCQlEQVRBQkFTRV9UT19PSURfUVVFUlksCisJCQkJCQkJCQkJaW50X3Jl Z2lzdGVyX2Z1bmMsCisJCQkJCQkJCQkJaW50X3VucmVnaXN0ZXJfZnVuYywKKwkJCQkJCQkJCQlm YWxzZSk7CisJCWlmIChyZWxjYWNoZSA9PSBOVUxMKQorCQl7CisJCQllcmVwb3J0KExPRywKKwkJ CQkJKGVycm1zZygidHJhY2tfdGFibGVfbXV0YXRpb246ICIKKwkJCQkJCQkiZXJyb3IgY3JlYXRp bmcgcmVsY2FjaGUiKSkpOworCQkJcmV0dXJuIG9pZDsKKwkJfQorCX0KKworCW9pZCA9IChpbnQp IChpbnRwdHJfdCkgcG9vbF9zZWFyY2hfcmVsY2FjaGUoCisJCQkJCQkJCQkJCQlyZWxjYWNoZSwg YmFja2VuZCwKKwkJCQkJCQkJCQkJCU1BSU5fQ09OTkVDVElPTihiYWNrZW5kKS0+c3AtPmRhdGFi YXNlKTsKKwlyZXR1cm4gb2lkOworfQorCitpbnQKK3Bvb2xfdHJhY2tfdGFibGVfbXV0YXRpb25f Z2V0X2RhdGFiYXNlX29pZCh2b2lkKQoreworCXJldHVybiB0cmFja190YWJsZV9tdXRhdGlvbl9n ZXRfZGF0YWJhc2Vfb2lkX2ludGVybmFsKCk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0KKyAq IFRhYmxlIG11dGF0aW9uIGhhc2ggdGFibGUgb3BlcmF0aW9ucworICogLS0tLS0tLS0tLS0tLS0t LQorICovCisKKy8qCisgKiBJbml0aWFsaXplIHRhYmxlIG11dGF0aW9uIGhhc2ggdGFibGUKKyAq Lworc3RhdGljIHZvaWQKK3RhYmxlX21hcF9pbml0KFRyYWNrVGFibGVNdXRhdGlvbkhhc2hUYWJs ZSAqbWFwLAorCQkJICAgaW50IG51bV9idWNrZXRzLCBpbnQgbWF4X2VudHJpZXMpCit7CisJaW50 CQkgICAqYnVja2V0czsKKwlUcmFja1RhYmxlTXV0YXRpb25FbnRyeSAqZW50cmllczsKKwlpbnQJ CQlpOworCWludAkJCWludmFsaWQgPSBUUkFDS19UQUJMRV9NVVRBVElPTl9JTlZBTElEX0lOREVY OworCisJbWFwLT5udW1fYnVja2V0cyA9IG51bV9idWNrZXRzOworCW1hcC0+bWF4X2VudHJpZXMg PSBtYXhfZW50cmllczsKKwltYXAtPm51bV9lbnRyaWVzID0gMDsKKwltYXAtPmZyZWVfbGlzdF9o ZWFkID0gMDsKKworCWJ1Y2tldHMgPSBUQUJMRV9NQVBfQlVDS0VUUyhtYXApOworCWVudHJpZXMg PSBUQUJMRV9NQVBfRU5UUklFUyhtYXApOworCisJLyogSW5pdGlhbGl6ZSBhbGwgYnVja2V0cyB0 byBlbXB0eSAqLworCWZvciAoaSA9IDA7IGkgPCBudW1fYnVja2V0czsgaSsrKQorCQlidWNrZXRz W2ldID0gaW52YWxpZDsKKworCS8qIEluaXRpYWxpemUgZnJlZSBsaXN0IC0gY2hhaW4gYWxsIGVu dHJpZXMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbWF4X2VudHJpZXM7IGkrKykKKwl7CisJCWVudHJp ZXNbaV0uaW5fdXNlID0gZmFsc2U7CisJCWVudHJpZXNbaV0ubmV4dCA9IChpIDwgbWF4X2VudHJp ZXMgLSAxKSA/CisJCQlpICsgMSA6IGludmFsaWQ7CisJfQorCisJZXJlcG9ydChERUJVRzEsCisJ CQkoZXJybXNnKCJ0cmFja190YWJsZV9tdXRhdGlvbjogIgorCQkJCQkidGFibGUgbWFwIGluaXQg JWQgYnVja2V0cywgIgorCQkJCQkiJWQgbWF4IGVudHJpZXMiLAorCQkJCQludW1fYnVja2V0cywg bWF4X2VudHJpZXMpKSk7Cit9CisKKy8qCisgKiBBbGxvY2F0ZSBhbiBlbnRyeSBmcm9tIHRoZSBm cmVlIGxpc3QKKyAqLworc3RhdGljIGludAordGFibGVfbWFwX2FsbG9jX2VudHJ5KFRyYWNrVGFi bGVNdXRhdGlvbkhhc2hUYWJsZSAqbWFwKQoreworCVRyYWNrVGFibGVNdXRhdGlvbkVudHJ5ICpl bnRyaWVzOworCWludAkJCWlkeDsKKwlpbnQJCQlpbnZhbGlkID0gVFJBQ0tfVEFCTEVfTVVUQVRJ T05fSU5WQUxJRF9JTkRFWDsKKworCWVudHJpZXMgPSBUQUJMRV9NQVBfRU5UUklFUyhtYXApOwor CisJaWYgKG1hcC0+ZnJlZV9saXN0X2hlYWQgPT0gaW52YWxpZCkKKwkJcmV0dXJuIGludmFsaWQ7 CisKKwlpZHggPSBtYXAtPmZyZWVfbGlzdF9oZWFkOworCW1hcC0+ZnJlZV9saXN0X2hlYWQgPSBl bnRyaWVzW2lkeF0ubmV4dDsKKwllbnRyaWVzW2lkeF0uaW5fdXNlID0gdHJ1ZTsKKwllbnRyaWVz W2lkeF0ubmV4dCA9IGludmFsaWQ7CisJbWFwLT5udW1fZW50cmllcysrOworCisJcmV0dXJuIGlk eDsKK30KKworLyoKKyAqIEZyZWUgYW4gZW50cnkgYmFjayB0byB0aGUgZnJlZSBsaXN0CisgKi8K K3N0YXRpYyB2b2lkCit0YWJsZV9tYXBfZnJlZV9lbnRyeShUcmFja1RhYmxlTXV0YXRpb25IYXNo VGFibGUgKm1hcCwKKwkJCQkJIGludCBpZHgpCit7CisJVHJhY2tUYWJsZU11dGF0aW9uRW50cnkg KmVudHJpZXM7CisKKwllbnRyaWVzID0gVEFCTEVfTUFQX0VOVFJJRVMobWFwKTsKKworCWVudHJp ZXNbaWR4XS5pbl91c2UgPSBmYWxzZTsKKwllbnRyaWVzW2lkeF0ubmV4dCA9IG1hcC0+ZnJlZV9s aXN0X2hlYWQ7CisJbWFwLT5mcmVlX2xpc3RfaGVhZCA9IGlkeDsKKwltYXAtPm51bV9lbnRyaWVz LS07Cit9CisKKy8qCisgKiBMb29rIHVwIGEgdGFibGUgaW4gdGhlIGhhc2ggdGFibGUuCisgKiBS ZXR1cm5zIGVudHJ5IGluZGV4IG9yIElOVkFMSURfSU5ERVggaWYgbm90IGZvdW5kLgorICogTXVz dCBiZSBjYWxsZWQgd2l0aCBsb2NrIGhlbGQuCisgKi8KK3N0YXRpYyBpbnQKK3RhYmxlX21hcF9s b29rdXAoVHJhY2tUYWJsZU11dGF0aW9uSGFzaFRhYmxlICptYXAsCisJCQkJIGludCB0YWJsZV9v aWQsIGludCBkYm9pZCwKKwkJCQkgdWludDMyIGhhc2gpCit7CisJaW50CQkgICAqYnVja2V0cyA9 IFRBQkxFX01BUF9CVUNLRVRTKG1hcCk7CisJVHJhY2tUYWJsZU11dGF0aW9uRW50cnkgKmVudHJp ZXM7CisJaW50CQkJYnVja2V0ID0gaGFzaCAlIG1hcC0+bnVtX2J1Y2tldHM7CisJaW50CQkJaWR4 ID0gYnVja2V0c1tidWNrZXRdOworCWludAkJCWludmFsaWQgPSBUUkFDS19UQUJMRV9NVVRBVElP Tl9JTlZBTElEX0lOREVYOworCisJZW50cmllcyA9IFRBQkxFX01BUF9FTlRSSUVTKG1hcCk7CisK Kwl3aGlsZSAoaWR4ICE9IGludmFsaWQpCisJeworCQlpZiAoZW50cmllc1tpZHhdLmhhc2ggPT0g aGFzaCAmJgorCQkJZW50cmllc1tpZHhdLnRhYmxlX29pZCA9PSB0YWJsZV9vaWQgJiYKKwkJCWVu dHJpZXNbaWR4XS5kYm9pZCA9PSBkYm9pZCkKKwkJeworCQkJcmV0dXJuIGlkeDsKKwkJfQorCQlp ZHggPSBlbnRyaWVzW2lkeF0ubmV4dDsKKwl9CisKKwlyZXR1cm4gaW52YWxpZDsKK30KKworLyoK KyAqIEluc2VydCBvciB1cGRhdGUgYSB0YWJsZSBlbnRyeS4KKyAqIE11c3QgYmUgY2FsbGVkIHdp dGggbG9jayBoZWxkLgorICovCitzdGF0aWMgdm9pZAordGFibGVfbWFwX2luc2VydChUcmFja1Rh YmxlTXV0YXRpb25IYXNoVGFibGUgKm1hcCwKKwkJCQkgaW50IHRhYmxlX29pZCwgaW50IGRib2lk LAorCQkJCSB1aW50MzIgaGFzaCwKKwkJCQkgc3RydWN0IHRpbWV2YWwgKndyaXRlX3RpbWUpCit7 CisJaW50CQkgICAqYnVja2V0cyA9IFRBQkxFX01BUF9CVUNLRVRTKG1hcCk7CisJVHJhY2tUYWJs ZU11dGF0aW9uRW50cnkgKmVudHJpZXM7CisJaW50CQkJYnVja2V0ID0gaGFzaCAlIG1hcC0+bnVt X2J1Y2tldHM7CisJaW50CQkJaWR4OworCWludAkJCWludmFsaWQgPSBUUkFDS19UQUJMRV9NVVRB VElPTl9JTlZBTElEX0lOREVYOworCisJZW50cmllcyA9IFRBQkxFX01BUF9FTlRSSUVTKG1hcCk7 CisKKwkvKiBDaGVjayBpZiBlbnRyeSBhbHJlYWR5IGV4aXN0cyAqLworCWlkeCA9IHRhYmxlX21h cF9sb29rdXAobWFwLCB0YWJsZV9vaWQsIGRib2lkLCBoYXNoKTsKKwlpZiAoaWR4ICE9IGludmFs aWQpCisJeworCQkvKiBVcGRhdGUgbGFzdCB3cml0ZSB0aW1lOyBrZWVwIGZpcnN0X3dyaXRlX3Rp bWUgKi8KKwkJZW50cmllc1tpZHhdLmxhc3Rfd3JpdGVfdGltZSA9ICp3cml0ZV90aW1lOworCQly ZXR1cm47CisJfQorCisJLyogQWxsb2NhdGUgbmV3IGVudHJ5ICovCisJaWR4ID0gdGFibGVfbWFw X2FsbG9jX2VudHJ5KG1hcCk7CisJaWYgKGlkeCA9PSBpbnZhbGlkKQorCXsKKwkJaW50CQkJYjsK KworCQkvKiBUYWJsZSBpcyBmdWxsIC0gZXZpY3QgZmlyc3Qgbm9uLWVtcHR5IGJ1Y2tldCAqLwor CQlmb3IgKGIgPSAwOyBiIDwgbWFwLT5udW1fYnVja2V0czsgYisrKQorCQl7CisJCQlpZiAoYnVj a2V0c1tiXSAhPSBpbnZhbGlkKQorCQkJeworCQkJCWludAkJCXZpY3RpbSA9IGJ1Y2tldHNbYl07 CisKKwkJCQlidWNrZXRzW2JdID0gZW50cmllc1t2aWN0aW1dLm5leHQ7CisJCQkJdGFibGVfbWFw X2ZyZWVfZW50cnkobWFwLCB2aWN0aW0pOworCQkJCWlkeCA9IHRhYmxlX21hcF9hbGxvY19lbnRy eShtYXApOworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJaWYgKGlkeCA9PSBpbnZhbGlkKQor CQl7CisJCQllcmVwb3J0KFdBUk5JTkcsCisJCQkJCShlcnJtc2coInRyYWNrX3RhYmxlX211dGF0 aW9uOiAiCisJCQkJCQkJImZhaWxlZCB0byBhbGxvY2F0ZSBlbnRyeSAiCisJCQkJCQkJImZvciBv aWQgJWQgKGRib2lkICVkKSIsCisJCQkJCQkJdGFibGVfb2lkLCBkYm9pZCkpKTsKKwkJCXJldHVy bjsKKwkJfQorCX0KKworCS8qIEluaXRpYWxpemUgbmV3IGVudHJ5ICovCisJZW50cmllc1tpZHhd LnRhYmxlX29pZCA9IHRhYmxlX29pZDsKKwllbnRyaWVzW2lkeF0uZGJvaWQgPSBkYm9pZDsKKwll bnRyaWVzW2lkeF0uaGFzaCA9IGhhc2g7CisJZW50cmllc1tpZHhdLmZpcnN0X3dyaXRlX3RpbWUg PSAqd3JpdGVfdGltZTsKKwllbnRyaWVzW2lkeF0ubGFzdF93cml0ZV90aW1lID0gKndyaXRlX3Rp bWU7CisKKwkvKiBJbnNlcnQgYXQgaGVhZCBvZiBidWNrZXQgY2hhaW4gKi8KKwllbnRyaWVzW2lk eF0ubmV4dCA9IGJ1Y2tldHNbYnVja2V0XTsKKwlidWNrZXRzW2J1Y2tldF0gPSBpZHg7CisKKwll cmVwb3J0KERFQlVHMiwKKwkJCShlcnJtc2coInRyYWNrX3RhYmxlX211dGF0aW9uOiAiCisJCQkJ CSJtYXJrZWQgb2lkICVkIChkYm9pZCAlZCkgd3JpdHRlbiIsCisJCQkJCXRhYmxlX29pZCwgZGJv aWQpKSk7Cit9CisKKy8qCisgKiBSZW1vdmUgZXhwaXJlZCBlbnRyaWVzIGZyb20gdGhlIHRhYmxl IG1hcC4KKyAqIE11c3QgYmUgY2FsbGVkIHdpdGggbG9jayBoZWxkLgorICovCitzdGF0aWMgdm9p ZAordGFibGVfbWFwX2NsZWFudXBfZXhwaXJlZCgKKwkJCQkJCSAgVHJhY2tUYWJsZU11dGF0aW9u SGFzaFRhYmxlICptYXAsIHVpbnQ2NCB0dGxfdXMpCit7CisJaW50CQkgICAqYnVja2V0cyA9IFRB QkxFX01BUF9CVUNLRVRTKG1hcCk7CisJVHJhY2tUYWJsZU11dGF0aW9uRW50cnkgKmVudHJpZXM7 CisJc3RydWN0IHRpbWV2YWwgbm93OworCWludDY0CQltYXhfc3RhbGVfdXM7CisJaW50CQkJcmVt b3ZlZCA9IDA7CisJaW50CQkJYjsKKwlpbnQJCQlpbnZhbGlkID0gVFJBQ0tfVEFCTEVfTVVUQVRJ T05fSU5WQUxJRF9JTkRFWDsKKworCWVudHJpZXMgPSBUQUJMRV9NQVBfRU5UUklFUyhtYXApOwor CWdldF9jdXJyZW50X3RpbWUoJm5vdyk7CisKKwltYXhfc3RhbGVfdXMgPSAoaW50NjQpIHBvb2xf Y29uZmlnCisJCS0+dHJhY2tfdGFibGVfbXV0YXRpb25fbWF4X3N0YWxlbmVzcyAqIDEwMDBMTDsK KworCWZvciAoYiA9IDA7IGIgPCBtYXAtPm51bV9idWNrZXRzOyBiKyspCisJeworCQlpbnQJCSAg ICpwcmV2X3B0ciA9ICZidWNrZXRzW2JdOworCQlpbnQJCQlpZHggPSBidWNrZXRzW2JdOworCisJ CXdoaWxlIChpZHggIT0gaW52YWxpZCkKKwkJeworCQkJaW50NjQJCWFnZTsKKwkJCWludDY0CQl0 b3RhbF9hZ2U7CisJCQlib29sCQlleHBpcmVkOworCisJCQlhZ2UgPSBlbGFwc2VkX3VzKAorCQkJ CQkJCSAmZW50cmllc1tpZHhdLmxhc3Rfd3JpdGVfdGltZSwgJm5vdyk7CisJCQlleHBpcmVkID0g KGFnZSA+IChpbnQ2NCkgdHRsX3VzKTsKKworCQkJLyoKKwkJCSAqIEFsc28gZXZpY3QgZW50cmll cyB0aGF0IGV4Y2VlZCBtYXhfc3RhbGVuZXNzIGZyb20gZmlyc3Qgd3JpdGUuCisJCQkgKi8KKwkJ CWlmICghZXhwaXJlZCAmJiBtYXhfc3RhbGVfdXMgPiAwKQorCQkJeworCQkJCXRvdGFsX2FnZSA9 IGVsYXBzZWRfdXMoCisJCQkJCQkJCQkgICAmZW50cmllc1tpZHhdLmZpcnN0X3dyaXRlX3RpbWUs CisJCQkJCQkJCQkgICAmbm93KTsKKwkJCQlleHBpcmVkID0gKHRvdGFsX2FnZSA+PSBtYXhfc3Rh bGVfdXMpOworCQkJfQorCisJCQlpZiAoZXhwaXJlZCkKKwkJCXsKKwkJCQkvKiBFbnRyeSBoYXMg ZXhwaXJlZCAtIHJlbW92ZSBpdCAqLworCQkJCWludAkJCW5leHQgPSBlbnRyaWVzW2lkeF0ubmV4 dDsKKworCQkJCSpwcmV2X3B0ciA9IG5leHQ7CisJCQkJdGFibGVfbWFwX2ZyZWVfZW50cnkobWFw LCBpZHgpOworCQkJCWlkeCA9IG5leHQ7CisJCQkJcmVtb3ZlZCsrOworCQkJfQorCQkJZWxzZQor CQkJeworCQkJCXByZXZfcHRyID0gJmVudHJpZXNbaWR4XS5uZXh0OworCQkJCWlkeCA9IGVudHJp ZXNbaWR4XS5uZXh0OworCQkJfQorCQl9CisJfQorCisJaWYgKHJlbW92ZWQgPiAwKQorCXsKKwkJ ZXJlcG9ydChERUJVRzEsCisJCQkJKGVycm1zZygidHJhY2tfdGFibGVfbXV0YXRpb246ICIKKwkJ CQkJCSJjbGVhbmVkIHVwICVkIGV4cGlyZWQgZW50cmllcyIsCisJCQkJCQlyZW1vdmVkKSkpOwor CX0KK30KKworLyogLS0tLS0tLS0tLS0tLS0tLQorICogUGFyc2UgY2FjaGUgb3BlcmF0aW9ucwor ICogLS0tLS0tLS0tLS0tLS0tLQorICovCisKKy8qCisgKiBJbml0aWFsaXplIHBhcnNlIGNhY2hl CisgKi8KK3N0YXRpYyB2b2lkCitwYXJzZV9jYWNoZV9pbml0KFF1ZXJ5UGFyc2VDYWNoZSAqIGNh Y2hlLAorCQkJCSBpbnQgbnVtX2J1Y2tldHMsIGludCBtYXhfZW50cmllcykKK3sKKwlpbnQJCSAg ICpidWNrZXRzOworCVF1ZXJ5UGFyc2VFbnRyeSAqZW50cmllczsKKwlpbnQJCQlpOworCWludAkJ CWludmFsaWQgPSBUUkFDS19UQUJMRV9NVVRBVElPTl9JTlZBTElEX0lOREVYOworCisJY2FjaGUt Pm51bV9idWNrZXRzID0gbnVtX2J1Y2tldHM7CisJY2FjaGUtPm1heF9lbnRyaWVzID0gbWF4X2Vu dHJpZXM7CisJY2FjaGUtPm51bV9lbnRyaWVzID0gMDsKKwljYWNoZS0+ZnJlZV9saXN0X2hlYWQg PSAwOworCWNhY2hlLT5scnVfaGVhZCA9IGludmFsaWQ7CisJY2FjaGUtPmxydV90YWlsID0gaW52 YWxpZDsKKworCWJ1Y2tldHMgPSBQQVJTRV9DQUNIRV9CVUNLRVRTKGNhY2hlKTsKKwllbnRyaWVz ID0gUEFSU0VfQ0FDSEVfRU5UUklFUyhjYWNoZSk7CisKKwkvKiBJbml0aWFsaXplIGFsbCBidWNr ZXRzIHRvIGVtcHR5ICovCisJZm9yIChpID0gMDsgaSA8IG51bV9idWNrZXRzOyBpKyspCisJCWJ1 Y2tldHNbaV0gPSBpbnZhbGlkOworCisJLyogSW5pdGlhbGl6ZSBmcmVlIGxpc3QgKi8KKwlmb3Ig KGkgPSAwOyBpIDwgbWF4X2VudHJpZXM7IGkrKykKKwl7CisJCWVudHJpZXNbaV0uaW5fdXNlID0g ZmFsc2U7CisJCWVudHJpZXNbaV0ubmV4dCA9IChpIDwgbWF4X2VudHJpZXMgLSAxKSA/CisJCQlp ICsgMSA6IGludmFsaWQ7CisJCWVudHJpZXNbaV0ubHJ1X3ByZXYgPSBpbnZhbGlkOworCQllbnRy aWVzW2ldLmxydV9uZXh0ID0gaW52YWxpZDsKKwl9CisKKwllcmVwb3J0KERFQlVHMSwKKwkJCShl cnJtc2coInRyYWNrX3RhYmxlX211dGF0aW9uOiAiCisJCQkJCSJwYXJzZSBjYWNoZSBpbml0ICVk IGJ1Y2tldHMsICIKKwkJCQkJIiVkIG1heCBlbnRyaWVzIiwKKwkJCQkJbnVtX2J1Y2tldHMsIG1h eF9lbnRyaWVzKSkpOworfQorCisvKgorICogTW92ZSBlbnRyeSB0byBmcm9udCBvZiBMUlUgbGlz dCAobW9zdCByZWNlbnRseSB1c2VkKQorICovCitzdGF0aWMgdm9pZAorcGFyc2VfY2FjaGVfbHJ1 X3RvdWNoKFF1ZXJ5UGFyc2VDYWNoZSAqIGNhY2hlLCBpbnQgaWR4KQoreworCVF1ZXJ5UGFyc2VF bnRyeSAqZW50cmllcyA9IFBBUlNFX0NBQ0hFX0VOVFJJRVMoY2FjaGUpOworCWludAkJCWludmFs aWQgPSBUUkFDS19UQUJMRV9NVVRBVElPTl9JTlZBTElEX0lOREVYOworCisJLyogQWxyZWFkeSBh dCBoZWFkPyAqLworCWlmIChjYWNoZS0+bHJ1X2hlYWQgPT0gaWR4KQorCQlyZXR1cm47CisKKwkv KiBSZW1vdmUgZnJvbSBjdXJyZW50IHBvc2l0aW9uICovCisJaWYgKGVudHJpZXNbaWR4XS5scnVf cHJldiAhPSBpbnZhbGlkKQorCQllbnRyaWVzW2VudHJpZXNbaWR4XS5scnVfcHJldl0ubHJ1X25l eHQgPQorCQkJZW50cmllc1tpZHhdLmxydV9uZXh0OworCWlmIChlbnRyaWVzW2lkeF0ubHJ1X25l eHQgIT0gaW52YWxpZCkKKwkJZW50cmllc1tlbnRyaWVzW2lkeF0ubHJ1X25leHRdLmxydV9wcmV2 ID0KKwkJCWVudHJpZXNbaWR4XS5scnVfcHJldjsKKwlpZiAoY2FjaGUtPmxydV90YWlsID09IGlk eCkKKwkJY2FjaGUtPmxydV90YWlsID0gZW50cmllc1tpZHhdLmxydV9wcmV2OworCisJLyogSW5z ZXJ0IGF0IGhlYWQgKi8KKwllbnRyaWVzW2lkeF0ubHJ1X3ByZXYgPSBpbnZhbGlkOworCWVudHJp ZXNbaWR4XS5scnVfbmV4dCA9IGNhY2hlLT5scnVfaGVhZDsKKwlpZiAoY2FjaGUtPmxydV9oZWFk ICE9IGludmFsaWQpCisJCWVudHJpZXNbY2FjaGUtPmxydV9oZWFkXS5scnVfcHJldiA9IGlkeDsK KwljYWNoZS0+bHJ1X2hlYWQgPSBpZHg7CisJaWYgKGNhY2hlLT5scnVfdGFpbCA9PSBpbnZhbGlk KQorCQljYWNoZS0+bHJ1X3RhaWwgPSBpZHg7Cit9CisKKy8qCisgKiBBZGQgZW50cnkgdG8gTFJV IGxpc3QgKGF0IGhlYWQpCisgKi8KK3N0YXRpYyB2b2lkCitwYXJzZV9jYWNoZV9scnVfYWRkKFF1 ZXJ5UGFyc2VDYWNoZSAqIGNhY2hlLCBpbnQgaWR4KQoreworCVF1ZXJ5UGFyc2VFbnRyeSAqZW50 cmllcyA9IFBBUlNFX0NBQ0hFX0VOVFJJRVMoY2FjaGUpOworCWludAkJCWludmFsaWQgPSBUUkFD S19UQUJMRV9NVVRBVElPTl9JTlZBTElEX0lOREVYOworCisJZW50cmllc1tpZHhdLmxydV9wcmV2 ID0gaW52YWxpZDsKKwllbnRyaWVzW2lkeF0ubHJ1X25leHQgPSBjYWNoZS0+bHJ1X2hlYWQ7CisK KwlpZiAoY2FjaGUtPmxydV9oZWFkICE9IGludmFsaWQpCisJCWVudHJpZXNbY2FjaGUtPmxydV9o ZWFkXS5scnVfcHJldiA9IGlkeDsKKworCWNhY2hlLT5scnVfaGVhZCA9IGlkeDsKKworCWlmIChj YWNoZS0+bHJ1X3RhaWwgPT0gaW52YWxpZCkKKwkJY2FjaGUtPmxydV90YWlsID0gaWR4OworfQor CisvKgorICogUmVtb3ZlIGVudHJ5IGZyb20gTFJVIGxpc3QKKyAqLworc3RhdGljIHZvaWQKK3Bh cnNlX2NhY2hlX2xydV9yZW1vdmUoUXVlcnlQYXJzZUNhY2hlICogY2FjaGUsIGludCBpZHgpCit7 CisJUXVlcnlQYXJzZUVudHJ5ICplbnRyaWVzID0gUEFSU0VfQ0FDSEVfRU5UUklFUyhjYWNoZSk7 CisJaW50CQkJaW52YWxpZCA9IFRSQUNLX1RBQkxFX01VVEFUSU9OX0lOVkFMSURfSU5ERVg7CisK KwlpZiAoZW50cmllc1tpZHhdLmxydV9wcmV2ICE9IGludmFsaWQpCisJCWVudHJpZXNbZW50cmll c1tpZHhdLmxydV9wcmV2XS5scnVfbmV4dCA9CisJCQllbnRyaWVzW2lkeF0ubHJ1X25leHQ7CisJ ZWxzZQorCQljYWNoZS0+bHJ1X2hlYWQgPSBlbnRyaWVzW2lkeF0ubHJ1X25leHQ7CisKKwlpZiAo ZW50cmllc1tpZHhdLmxydV9uZXh0ICE9IGludmFsaWQpCisJCWVudHJpZXNbZW50cmllc1tpZHhd LmxydV9uZXh0XS5scnVfcHJldiA9CisJCQllbnRyaWVzW2lkeF0ubHJ1X3ByZXY7CisJZWxzZQor CQljYWNoZS0+bHJ1X3RhaWwgPSBlbnRyaWVzW2lkeF0ubHJ1X3ByZXY7CisKKwllbnRyaWVzW2lk eF0ubHJ1X3ByZXYgPSBpbnZhbGlkOworCWVudHJpZXNbaWR4XS5scnVfbmV4dCA9IGludmFsaWQ7 Cit9CisKKy8qCisgKiBBbGxvY2F0ZSBlbnRyeSBmcm9tIGZyZWUgbGlzdCwgZXZpY3RpbmcgTFJV IGlmIG5lZWRlZAorICovCitzdGF0aWMgaW50CitwYXJzZV9jYWNoZV9hbGxvY19lbnRyeShRdWVy eVBhcnNlQ2FjaGUgKiBjYWNoZSkKK3sKKwlRdWVyeVBhcnNlRW50cnkgKmVudHJpZXMgPSBQQVJT RV9DQUNIRV9FTlRSSUVTKGNhY2hlKTsKKwlpbnQJCSAgICpidWNrZXRzID0gUEFSU0VfQ0FDSEVf QlVDS0VUUyhjYWNoZSk7CisJaW50CQkJaWR4OworCWludAkJCWludmFsaWQgPSBUUkFDS19UQUJM RV9NVVRBVElPTl9JTlZBTElEX0lOREVYOworCisJaWYgKGNhY2hlLT5mcmVlX2xpc3RfaGVhZCAh PSBpbnZhbGlkKQorCXsKKwkJaWR4ID0gY2FjaGUtPmZyZWVfbGlzdF9oZWFkOworCQljYWNoZS0+ ZnJlZV9saXN0X2hlYWQgPSBlbnRyaWVzW2lkeF0ubmV4dDsKKwkJZW50cmllc1tpZHhdLmluX3Vz ZSA9IHRydWU7CisJCWVudHJpZXNbaWR4XS5uZXh0ID0gaW52YWxpZDsKKwkJY2FjaGUtPm51bV9l bnRyaWVzKys7CisJCXJldHVybiBpZHg7CisJfQorCisJLyogTm8gZnJlZSBlbnRyaWVzIC0gZXZp Y3QgTFJVICovCisJaWYgKGNhY2hlLT5scnVfdGFpbCA9PSBpbnZhbGlkKQorCQlyZXR1cm4gaW52 YWxpZDsKKworCWlkeCA9IGNhY2hlLT5scnVfdGFpbDsKKworCS8qIFJlbW92ZSBmcm9tIGhhc2gg YnVja2V0ICovCisJeworCQlpbnQJCQlidWNrZXQ7CisJCWludAkJICAgKnByZXZfcHRyOworCQlp bnQJCQljdXJyOworCisJCWJ1Y2tldCA9IGVudHJpZXNbaWR4XS5xdWVyeV9oYXNoICUKKwkJCWNh Y2hlLT5udW1fYnVja2V0czsKKwkJcHJldl9wdHIgPSAmYnVja2V0c1tidWNrZXRdOworCQljdXJy ID0gYnVja2V0c1tidWNrZXRdOworCisJCXdoaWxlIChjdXJyICE9IGludmFsaWQpCisJCXsKKwkJ CWlmIChjdXJyID09IGlkeCkKKwkJCXsKKwkJCQkqcHJldl9wdHIgPSBlbnRyaWVzW2N1cnJdLm5l eHQ7CisJCQkJYnJlYWs7CisJCQl9CisJCQlwcmV2X3B0ciA9ICZlbnRyaWVzW2N1cnJdLm5leHQ7 CisJCQljdXJyID0gZW50cmllc1tjdXJyXS5uZXh0OworCQl9CisJfQorCisJLyogUmVtb3ZlIGZy b20gTFJVIGxpc3QgKi8KKwlwYXJzZV9jYWNoZV9scnVfcmVtb3ZlKGNhY2hlLCBpZHgpOworCisJ LyogUmVpbml0aWFsaXplIGVudHJ5ICovCisJZW50cmllc1tpZHhdLmluX3VzZSA9IHRydWU7CisJ ZW50cmllc1tpZHhdLm5leHQgPSBpbnZhbGlkOworCisJcmV0dXJuIGlkeDsKK30KKworLyoKKyAq IExvb2sgdXAgYSBxdWVyeSBpbiB0aGUgcGFyc2UgY2FjaGUKKyAqLworc3RhdGljIGludAorcGFy c2VfY2FjaGVfbG9va3VwKFF1ZXJ5UGFyc2VDYWNoZSAqIGNhY2hlLCB1aW50NjQgaGFzaCkKK3sK KwlpbnQJCSAgICpidWNrZXRzID0gUEFSU0VfQ0FDSEVfQlVDS0VUUyhjYWNoZSk7CisJUXVlcnlQ YXJzZUVudHJ5ICplbnRyaWVzID0gUEFSU0VfQ0FDSEVfRU5UUklFUyhjYWNoZSk7CisJaW50CQkJ YnVja2V0ID0gaGFzaCAlIGNhY2hlLT5udW1fYnVja2V0czsKKwlpbnQJCQlpZHggPSBidWNrZXRz W2J1Y2tldF07CisJaW50CQkJaW52YWxpZCA9IFRSQUNLX1RBQkxFX01VVEFUSU9OX0lOVkFMSURf SU5ERVg7CisKKwl3aGlsZSAoaWR4ICE9IGludmFsaWQpCisJeworCQlpZiAoZW50cmllc1tpZHhd LnF1ZXJ5X2hhc2ggPT0gaGFzaCkKKwkJCXJldHVybiBpZHg7CisJCWlkeCA9IGVudHJpZXNbaWR4 XS5uZXh0OworCX0KKworCXJldHVybiBpbnZhbGlkOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0t CisgKiBRdWVyeSBub3JtYWxpemF0aW9uCisgKiAtLS0tLS0tLS0tLS0tLS0tCisgKi8KKworLyoK KyAqIFNpbXBsZSBxdWVyeSBub3JtYWxpemF0aW9uOgorICogLSBTdHJpcCBjb21tZW50cyAoLS0g YW5kIEMtc3R5bGUgYmxvY2sgY29tbWVudHMpCisgKiAtIENvbGxhcHNlIHdoaXRlc3BhY2UKKyAq IC0gQ29udmVydCB0byBsb3dlcmNhc2UgKGV4Y2VwdCBpbnNpZGUgc3RyaW5ncykKKyAqIC0gUmVw bGFjZSBsaXRlcmFsIHZhbHVlcyB3aXRoIHBsYWNlaG9sZGVycworICovCitzdGF0aWMgc2l6ZV90 Citub3JtYWxpemVfcXVlcnkoY29uc3QgY2hhciAqcXVlcnksIGNoYXIgKm91dHB1dCwKKwkJCQlz aXplX3Qgb3V0cHV0X3NpemUpCit7CisJY29uc3QgY2hhciAqc3JjID0gcXVlcnk7CisJY2hhcgkg ICAqZHN0ID0gb3V0cHV0OworCWNoYXIJICAgKmRzdF9lbmQgPSBvdXRwdXQgKyBvdXRwdXRfc2l6 ZSAtIDE7CisJYm9vbAkJaW5fc3RyaW5nID0gZmFsc2U7CisJY2hhcgkJc3RyaW5nX2NoYXIgPSAw OworCWJvb2wJCWxhc3Rfd2FzX3NwYWNlID0gdHJ1ZTsKKworCXdoaWxlICgqc3JjICYmIGRzdCA8 IGRzdF9lbmQpCisJeworCQkvKiBIYW5kbGUgc3RyaW5nIGxpdGVyYWxzICovCisJCWlmIChpbl9z dHJpbmcpCisJCXsKKwkJCWlmICgqc3JjID09IHN0cmluZ19jaGFyKQorCQkJeworCQkJCWlmICgq KHNyYyArIDEpID09IHN0cmluZ19jaGFyKQorCQkJCXsKKwkJCQkJLyogRXNjYXBlZCBxdW90ZSAq LworCQkJCQlzcmMgKz0gMjsKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJCWluX3N0cmluZyA9 IGZhbHNlOworCQkJCS8qIFJlcGxhY2Ugc3RyaW5nIHdpdGggcGxhY2Vob2xkZXIgKi8KKwkJCQkq ZHN0KysgPSAnJCc7CisJCQl9CisJCQlzcmMrKzsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyog Q2hlY2sgZm9yIHN0cmluZyBzdGFydCAqLworCQlpZiAoKnNyYyA9PSAnXCcnIHx8ICpzcmMgPT0g JyInKQorCQl7CisJCQlpbl9zdHJpbmcgPSB0cnVlOworCQkJc3RyaW5nX2NoYXIgPSAqc3JjOwor CQkJc3JjKys7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIEhhbmRsZSBzaW5nbGUtbGluZSBj b21tZW50cyAqLworCQlpZiAoKnNyYyA9PSAnLScgJiYgKihzcmMgKyAxKSA9PSAnLScpCisJCXsK KwkJCXdoaWxlICgqc3JjICYmICpzcmMgIT0gJ1xuJykKKwkJCQlzcmMrKzsKKwkJCWNvbnRpbnVl OworCQl9CisKKwkJLyogSGFuZGxlIG11bHRpLWxpbmUgY29tbWVudHMgKi8KKwkJaWYgKCpzcmMg PT0gJy8nICYmICooc3JjICsgMSkgPT0gJyonKQorCQl7CisJCQlzcmMgKz0gMjsKKwkJCXdoaWxl ICgqc3JjICYmCisJCQkJICAgISgqc3JjID09ICcqJyAmJiAqKHNyYyArIDEpID09ICcvJykpCisJ CQkJc3JjKys7CisJCQlpZiAoKnNyYykKKwkJCQlzcmMgKz0gMjsKKwkJCWNvbnRpbnVlOworCQl9 CisKKwkJLyogSGFuZGxlIHdoaXRlc3BhY2UgKi8KKwkJaWYgKCpzcmMgPT0gJyAnIHx8ICpzcmMg PT0gJ1x0JyB8fAorCQkJKnNyYyA9PSAnXG4nIHx8ICpzcmMgPT0gJ1xyJykKKwkJeworCQkJaWYg KCFsYXN0X3dhc19zcGFjZSkKKwkJCXsKKwkJCQkqZHN0KysgPSAnICc7CisJCQkJbGFzdF93YXNf c3BhY2UgPSB0cnVlOworCQkJfQorCQkJc3JjKys7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8q IEhhbmRsZSBudW1iZXJzIC0gcmVwbGFjZSB3aXRoIHBsYWNlaG9sZGVyICovCisJCWlmICgoKnNy YyA+PSAnMCcgJiYgKnNyYyA8PSAnOScpIHx8CisJCQkoKnNyYyA9PSAnLicgJiYgKihzcmMgKyAx KSA+PSAnMCcgJiYKKwkJCSAqKHNyYyArIDEpIDw9ICc5JykpCisJCXsKKwkJCXdoaWxlICgqc3Jj ICYmCisJCQkJICAgKCgqc3JjID49ICcwJyAmJiAqc3JjIDw9ICc5JykgfHwKKwkJCQkJKnNyYyA9 PSAnLicpKQorCQkJCXNyYysrOworCQkJaWYgKCFsYXN0X3dhc19zcGFjZSAmJgorCQkJCWRzdCA+ IG91dHB1dCAmJiAqKGRzdCAtIDEpICE9ICckJykKKwkJCQkqZHN0KysgPSAnJCc7CisJCQlsYXN0 X3dhc19zcGFjZSA9IGZhbHNlOworCQkJY29udGludWU7CisJCX0KKworCQkvKiBSZWd1bGFyIGNo YXJhY3RlciAtIGNvbnZlcnQgdG8gbG93ZXJjYXNlICovCisJCWlmICgqc3JjID49ICdBJyAmJiAq c3JjIDw9ICdaJykKKwkJCSpkc3QrKyA9ICpzcmMgKyAzMjsKKwkJZWxzZQorCQkJKmRzdCsrID0g KnNyYzsKKworCQlsYXN0X3dhc19zcGFjZSA9IGZhbHNlOworCQlzcmMrKzsKKwl9CisKKwkvKiBS ZW1vdmUgdHJhaWxpbmcgc3BhY2UgKi8KKwlpZiAoZHN0ID4gb3V0cHV0ICYmICooZHN0IC0gMSkg PT0gJyAnKQorCQlkc3QtLTsKKworCSpkc3QgPSAnXDAnOworCXJldHVybiBkc3QgLSBvdXRwdXQ7 Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0KKyAqIFB1YmxpYyBBUEkgaW1wbGVtZW50YXRpb24K KyAqIC0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisvKgorICogQ2FsY3VsYXRlIHRoZSB0b3RhbCBz aGFyZWQgbWVtb3J5IHNpemUgcmVxdWlyZWQKKyAqIGZvciB0aGUgdHJhY2sgdGFibGUgbXV0YXRp b24gZmVhdHVyZS4KKyAqLworU2l6ZQorcG9vbF90cmFja190YWJsZV9tdXRhdGlvbl9zaG1lbV9z aXplKHZvaWQpCit7CisJU2l6ZQkJc2l6ZSA9IDA7CisJaW50CQkJdGJsX2JrdDsKKwlpbnQJCQl0 Ymxfc3o7CisJaW50CQkJcXJ5X2JrdDsKKwlpbnQJCQlxcnlfc3o7CisKKwl0YmxfYmt0ID0gcG9v bF9jb25maWctPnRyYWNrX3RhYmxlX211dGF0aW9uX3RhYmxlX2J1Y2tldHM7CisJdGJsX3N6ID0g cG9vbF9jb25maWctPnRyYWNrX3RhYmxlX211dGF0aW9uX3RhYmxlX3NpemU7CisJcXJ5X2JrdCA9 IHBvb2xfY29uZmlnLT50cmFja190YWJsZV9tdXRhdGlvbl9xdWVyeV9idWNrZXRzOworCXFyeV9z eiA9IHBvb2xfY29uZmlnLT50cmFja190YWJsZV9tdXRhdGlvbl9xdWVyeV9wYXJzZV9jYWNoZV9z aXplOworCisJLyogTWFpbiBzdHJ1Y3R1cmUgKi8KKwlzaXplICs9IHNpemVvZihUcmFja1RhYmxl TXV0YXRpb25TaG1lbSk7CisKKwkvKiBUYWJsZSBtdXRhdGlvbiBoYXNoIHRhYmxlICovCisJc2l6 ZSArPSBzaXplb2YoVHJhY2tUYWJsZU11dGF0aW9uSGFzaFRhYmxlKTsKKwlzaXplICs9IHRibF9i a3QgKiBzaXplb2YoaW50KTsKKwlzaXplICs9IHRibF9zeiAqIHNpemVvZihUcmFja1RhYmxlTXV0 YXRpb25FbnRyeSk7CisKKwkvKiBQYXJzZSBjYWNoZSAqLworCXNpemUgKz0gc2l6ZW9mKFF1ZXJ5 UGFyc2VDYWNoZSk7CisJc2l6ZSArPSBxcnlfYmt0ICogc2l6ZW9mKGludCk7CisJc2l6ZSArPSBx cnlfc3ogKiBzaXplb2YoUXVlcnlQYXJzZUVudHJ5KTsKKworCXJldHVybiBzaXplOworfQorCisv KgorICogSW5pdGlhbGl6ZSBzaGFyZWQgbWVtb3J5IHN0cnVjdHVyZXMgZm9yIHRoZQorICogdHJh Y2sgdGFibGUgbXV0YXRpb24gZmVhdHVyZS4gIEFsbG9jYXRlcyBhbmQgc2V0cworICogdXAgdGhl IHRhYmxlIG1hcCBhbmQgcGFyc2UgY2FjaGUgaW4gc2hhcmVkIG1lbW9yeS4KKyAqIENhbGxlZCBv bmNlIGZyb20gcGdwb29sIG1haW4gcHJvY2VzcyBhdCBzdGFydHVwLgorICovCit2b2lkCitwb29s X3RyYWNrX3RhYmxlX211dGF0aW9uX2luaXQodm9pZCkKK3sKKyNpZm5kZWYgUE9PTF9QUklWQVRF CisJU2l6ZQkJc2htZW1fc2l6ZTsKKwljaGFyCSAgICpzaG1lbV9wdHI7CisJVHJhY2tUYWJsZU11 dGF0aW9uU3RhdGUgKnN0OworCWludAkJCXRibF9ia3Q7CisJaW50CQkJdGJsX3N6OworCWludAkJ CXFyeV9ia3Q7CisJaW50CQkJcXJ5X3N6OworCisJaWYgKHBvb2xfY29uZmlnLT5kaXNhYmxlX2xv YWRfYmFsYW5jZV9vbl93cml0ZSAhPQorCQlETEJPV19ETUxfQURBUFRJVkVfR0xPQkFMKQorCXsK KwkJZXJlcG9ydChERUJVRzEsCisJCQkJKGVycm1zZygidHJhY2tfdGFibGVfbXV0YXRpb246ICIK KwkJCQkJCSJmZWF0dXJlIGRpc2FibGVkIikpKTsKKwkJcmV0dXJuOworCX0KKworCXRibF9ia3Qg PSBwb29sX2NvbmZpZy0+dHJhY2tfdGFibGVfbXV0YXRpb25fdGFibGVfYnVja2V0czsKKwl0Ymxf c3ogPSBwb29sX2NvbmZpZy0+dHJhY2tfdGFibGVfbXV0YXRpb25fdGFibGVfc2l6ZTsKKwlxcnlf Ymt0ID0gcG9vbF9jb25maWctPnRyYWNrX3RhYmxlX211dGF0aW9uX3F1ZXJ5X2J1Y2tldHM7CisJ cXJ5X3N6ID0gcG9vbF9jb25maWctPnRyYWNrX3RhYmxlX211dGF0aW9uX3F1ZXJ5X3BhcnNlX2Nh Y2hlX3NpemU7CisKKwlzaG1lbV9zaXplID0gcG9vbF90cmFja190YWJsZV9tdXRhdGlvbl9zaG1l bV9zaXplKCk7CisKKwkvKgorCSAqIEFsbG9jYXRlIGZyb20gdGhlIG1haW4gc2hhcmVkIG1lbW9y eSBzZWdtZW50LiBNZW1vcnkgaXMgemVyb2VkIGJ5CisJICogaW5pdGlhbGl6ZV9zaGFyZWRfbWVt b3J5X21haW5fc2VnbWVudCgpLgorCSAqLworCXNobWVtX3B0ciA9IHBvb2xfc2hhcmVkX21lbW9y eV9zZWdtZW50X2dldF9jaHVuaygKKwkJCQkJCQkJCQkJCQkgc2htZW1fc2l6ZSk7CisJaWYgKHNo bWVtX3B0ciA9PSBOVUxMKQorCXsKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJybXNnKCJ0cmFj a190YWJsZV9tdXRhdGlvbjogIgorCQkJCQkJImZhaWxlZCB0byBhbGxvY2F0ZSAlenUgYnl0ZXMi LAorCQkJCQkJc2htZW1fc2l6ZSkpKTsKKwkJcmV0dXJuOworCX0KKworCS8qIFNldCB1cCBwb2lu dGVycyB3aXRoaW4gc2hhcmVkIG1lbW9yeSAqLworCXRyYWNrX3RhYmxlX211dGF0aW9uX3NobWVt ID0KKwkJKFRyYWNrVGFibGVNdXRhdGlvblNobWVtICopIHNobWVtX3B0cjsKKwlzaG1lbV9wdHIg Kz0gc2l6ZW9mKFRyYWNrVGFibGVNdXRhdGlvblNobWVtKTsKKworCXRyYWNrX3RhYmxlX211dGF0 aW9uX3NobWVtLT50YWJsZV9tYXAgPQorCQkoVHJhY2tUYWJsZU11dGF0aW9uSGFzaFRhYmxlICop IHNobWVtX3B0cjsKKwlzaG1lbV9wdHIgKz0gc2l6ZW9mKFRyYWNrVGFibGVNdXRhdGlvbkhhc2hU YWJsZSk7CisJc2htZW1fcHRyICs9IHRibF9ia3QgKiBzaXplb2YoaW50KTsKKwlzaG1lbV9wdHIg Kz0gdGJsX3N6ICogc2l6ZW9mKFRyYWNrVGFibGVNdXRhdGlvbkVudHJ5KTsKKworCXRyYWNrX3Rh YmxlX211dGF0aW9uX3NobWVtLT5xdWVyeV9jYWNoZSA9CisJCShRdWVyeVBhcnNlQ2FjaGUgKikg c2htZW1fcHRyOworCisJLyogSW5pdGlhbGl6ZSBzdHJ1Y3R1cmVzICovCisJdGFibGVfbWFwX2lu aXQoCisJCQkJICAgdHJhY2tfdGFibGVfbXV0YXRpb25fc2htZW0tPnRhYmxlX21hcCwKKwkJCQkg ICB0YmxfYmt0LCB0Ymxfc3opOworCisJcGFyc2VfY2FjaGVfaW5pdCgKKwkJCQkJIHRyYWNrX3Rh YmxlX211dGF0aW9uX3NobWVtLT5xdWVyeV9jYWNoZSwKKwkJCQkJIHFyeV9ia3QsIHFyeV9zeik7 CisKKwkvKiBJbml0aWFsaXplIGdsb2JhbCBzdGF0ZSAqLworCXN0ID0gJnRyYWNrX3RhYmxlX211 dGF0aW9uX3NobWVtLT5zdGF0ZTsKKwlzdC0+aW5pdGlhbGl6ZWQgPSB0cnVlOworCXN0LT5jdXJy ZW50X3R0bF91cyA9IFRSQUNLX1RBQkxFX01VVEFUSU9OX0RFRkFVTFRfVFRMX1VTOworCWdldF9j dXJyZW50X3RpbWUoJnN0LT50dGxfbGFzdF91cGRhdGVkKTsKKwlnZXRfY3VycmVudF90aW1lKCZz dC0+bGFzdF9jbGVhbnVwX3RpbWUpOworCXN0LT5nbG9iYWxfY29sZF9zdGFydF91bnRpbC50dl9z ZWMgPSAwOworCXN0LT5nbG9iYWxfY29sZF9zdGFydF91bnRpbC50dl91c2VjID0gMDsKKwlzdC0+ c3RhdHNfcXVlcmllc19jaGVja2VkID0gMDsKKwlzdC0+c3RhdHNfZm9yY2VkX3ByaW1hcnkgPSAw OworCXN0LT5zdGF0c19hbGxvd2VkX3JlcGxpY2EgPSAwOworCisJZXJlcG9ydChMT0csCisJCQko ZXJybXNnKCJ0cmFja190YWJsZV9tdXRhdGlvbjogIgorCQkJCQkiaW5pdGlhbGl6ZWQgd2l0aCAl enUgYnl0ZXMgc2htZW0iLAorCQkJCQlzaG1lbV9zaXplKSkpOworI2VuZGlmCit9CisKKy8qCisg KiBJbml0aWFsaXplIHBlci1jaGlsZCBwcm9jZXNzIHN0YXRlLgorICogUmVjb3JkcyB0aGUgcHJv Y2VzcyBzdGFydCB0aW1lIGZvciBjb2xkIHN0YXJ0CisgKiBwZXJpb2QgdHJhY2tpbmcuICBDYWxs ZWQgd2hlbiBhIGNoaWxkIHByb2Nlc3Mgc3RhcnRzLgorICovCit2b2lkCitwb29sX3RyYWNrX3Rh YmxlX211dGF0aW9uX2NoaWxkX2luaXQodm9pZCkKK3sKKwlpbnQJCQlkdXI7CisKKwlpZiAoVFJB Q0tfVEFCTEVfTVVUQVRJT05fRElTQUJMRUQoKSkKKwkJcmV0dXJuOworCisJZ2V0X2N1cnJlbnRf dGltZSgmcHJvY2Vzc19zdGFydF90aW1lKTsKKwljb2xkX3N0YXJ0X2luaXRpYWxpemVkID0gdHJ1 ZTsKKwlkdXIgPSBwb29sX2NvbmZpZy0+dHJhY2tfdGFibGVfbXV0YXRpb25fY29sZF9zdGFydF9k dXJhdGlvbjsKKworCWVyZXBvcnQoREVCVUcxLAorCQkJKGVycm1zZygidHJhY2tfdGFibGVfbXV0 YXRpb246ICIKKwkJCQkJImNoaWxkIGluaXQsIGNvbGQgc3RhcnQgJWQgbXMiLAorCQkJCQlkdXIp KSk7Cit9CisKKy8qCisgKiBDaGVjayBpZiB0aGUgcHJvY2VzcyBpcyBpbiBjb2xkIHN0YXJ0IHBl cmlvZC4KKyAqIER1cmluZyBjb2xkIHN0YXJ0LCBhbGwgcXVlcmllcyBhcmUgcm91dGVkIHRvCisg KiBwcmltYXJ5IHRvIGF2b2lkIHN0YWxlIHJlYWRzLiAgQ2hlY2tzIGJvdGgKKyAqIHBlci1wcm9j ZXNzIGFuZCBnbG9iYWwgKHdhdGNoZG9nKSBjb2xkIHN0YXJ0LgorICovCitib29sCitwb29sX3Ry YWNrX3RhYmxlX211dGF0aW9uX2luX2NvbGRfc3RhcnQodm9pZCkKK3sKKwlzdHJ1Y3QgdGltZXZh bCBub3c7CisJaW50NjQJCWVsYXBzZWRfbXM7CisJaW50CQkJZHVyOworCVRyYWNrVGFibGVNdXRh dGlvblN0YXRlICpzdDsKKworCWlmIChUUkFDS19UQUJMRV9NVVRBVElPTl9ESVNBQkxFRCgpKQor CQlyZXR1cm4gZmFsc2U7CisKKwlkdXIgPSBwb29sX2NvbmZpZy0+dHJhY2tfdGFibGVfbXV0YXRp b25fY29sZF9zdGFydF9kdXJhdGlvbjsKKwlpZiAoZHVyIDw9IDApCisJCXJldHVybiBmYWxzZTsK KworCWdldF9jdXJyZW50X3RpbWUoJm5vdyk7CisJc3QgPSAmdHJhY2tfdGFibGVfbXV0YXRpb25f c2htZW0tPnN0YXRlOworCisJLyogQ2hlY2sgd2F0Y2hkb2ctdHJpZ2dlcmVkIGdsb2JhbCBjb2xk IHN0YXJ0ICovCisJaWYgKHN0LT5nbG9iYWxfY29sZF9zdGFydF91bnRpbC50dl9zZWMgIT0gMCAm JgorCQllbGFwc2VkX3VzKCZub3csCisJCQkJICAgJnN0LT5nbG9iYWxfY29sZF9zdGFydF91bnRp bCkgPiAwKQorCXsKKwkJcmV0dXJuIHRydWU7CisJfQorCisJLyogQ2hlY2sgcGVyLXByb2Nlc3Mg Y29sZCBzdGFydCAqLworCWlmICghY29sZF9zdGFydF9pbml0aWFsaXplZCkKKwkJcmV0dXJuIGZh bHNlOworCisJZWxhcHNlZF9tcyA9IGVsYXBzZWRfdXMoJnByb2Nlc3Nfc3RhcnRfdGltZSwgJm5v dykgLyAxMDAwOworCisJaWYgKGVsYXBzZWRfbXMgPCBkdXIpCisJeworCQllcmVwb3J0KERFQlVH MiwKKwkJCQkoZXJybXNnKCJ0cmFja190YWJsZV9tdXRhdGlvbjogIgorCQkJCQkJImNvbGQgc3Rh cnQgKCVsZC8lZCBtcykiLAorCQkJCQkJKGxvbmcpIGVsYXBzZWRfbXMsIGR1cikpKTsKKwkJcmV0 dXJuIHRydWU7CisJfQorCisJcmV0dXJuIGZhbHNlOworfQorCisvKgorICogVHJpZ2dlciBhIGds b2JhbCBjb2xkIHN0YXJ0IGZvciBhbGwgcHJvY2Vzc2VzLgorICogU2V0cyB0aGUgY29sZCBzdGFy dCBlbmQgdGltZSBpbiBzaGFyZWQgbWVtb3J5LgorICogQ2FsbGVkIGFmdGVyIHdhdGNoZG9nIGxl YWRlciBjaGFuZ2UgdG8gZm9yY2UgYWxsCisgKiBxdWVyaWVzIHRvIHByaW1hcnkgZHVyaW5nIHRo ZSB0cmFuc2l0aW9uLgorICovCit2b2lkCitwb29sX3RyYWNrX3RhYmxlX211dGF0aW9uX3RyaWdn ZXJfZ2xvYmFsX2NvbGRfc3RhcnQodm9pZCkKK3sKKwlzdHJ1Y3QgdGltZXZhbCBub3c7CisJc3Ry dWN0IHRpbWV2YWwgKnVudGlsOworCWludAkJCWR1cjsKKworCWlmIChUUkFDS19UQUJMRV9NVVRB VElPTl9ESVNBQkxFRCgpKQorCQlyZXR1cm47CisKKwlkdXIgPSBwb29sX2NvbmZpZy0+dHJhY2tf dGFibGVfbXV0YXRpb25fY29sZF9zdGFydF9kdXJhdGlvbjsKKwlpZiAoZHVyIDw9IDApCisJCXJl dHVybjsKKworCWdldF9jdXJyZW50X3RpbWUoJm5vdyk7CisJdW50aWwgPSAmdHJhY2tfdGFibGVf bXV0YXRpb25fc2htZW0tPnN0YXRlCisJCS5nbG9iYWxfY29sZF9zdGFydF91bnRpbDsKKwkqdW50 aWwgPSBub3c7CisJdW50aWwtPnR2X3NlYyArPSBkdXIgLyAxMDAwOworCXVudGlsLT50dl91c2Vj ICs9IChkdXIgJSAxMDAwKSAqIDEwMDA7CisJaWYgKHVudGlsLT50dl91c2VjID49IDEwMDAwMDAp CisJeworCQl1bnRpbC0+dHZfc2VjICs9IHVudGlsLT50dl91c2VjIC8gMTAwMDAwMDsKKwkJdW50 aWwtPnR2X3VzZWMgJT0gMTAwMDAwMDsKKwl9CisKKwllcmVwb3J0KExPRywKKwkJCShlcnJtc2co InRyYWNrX3RhYmxlX211dGF0aW9uOiAiCisJCQkJCSJnbG9iYWwgY29sZCBzdGFydCBmb3IgJWQg bXMiLAorCQkJCQlkdXIpKSk7Cit9CisKKy8qCisgKiBDaGVjayBpZiBhIHRhYmxlIHdhcyByZWNl bnRseSB3cml0dGVuIChpcyAic3RhbGUiKS4KKyAqIFJldHVybnMgdHJ1ZSBpZiByZWFkcyBzaG91 bGQgZ28gdG8gcHJpbWFyeSBiZWNhdXNlCisgKiB0aGUgdGFibGUgd2FzIHdyaXR0ZW4gd2l0aGlu IHRoZSBjdXJyZW50IFRUTCB3aW5kb3cuCisgKi8KK2Jvb2wKK3Bvb2xfdHJhY2tfdGFibGVfbXV0 YXRpb25fdGFibGVfaXNfc3RhbGUoCisJCQkJCQkJCQkJIGludCB0YWJsZV9vaWQsIGludCBkYm9p ZCkKK3sKKwlUcmFja1RhYmxlTXV0YXRpb25IYXNoVGFibGUgKm1hcDsKKwlzdHJ1Y3QgdGltZXZh bCBub3c7CisJdWludDY0CQl0dGxfdXM7CisJdWludDMyCQloYXNoOworCWludAkJCWlkeDsKKwli b29sCQlpc19zdGFsZSA9IGZhbHNlOworCisJaWYgKFRSQUNLX1RBQkxFX01VVEFUSU9OX0RJU0FC TEVEKCkpCisJCXJldHVybiBmYWxzZTsKKworCWlmICh0YWJsZV9vaWQgPD0gMCB8fCBkYm9pZCA8 PSAwKQorCXsKKwkJaXNfc3RhbGUgPSB0cnVlOworCQlnb3RvIHVwZGF0ZV9zdGF0czsKKwl9CisK KwltYXAgPSB0cmFja190YWJsZV9tdXRhdGlvbl9zaG1lbS0+dGFibGVfbWFwOworCWhhc2ggPSBm bnYxYV9oYXNoX3RhYmxlX2tleSh0YWJsZV9vaWQsIGRib2lkKTsKKworCXRhYmxlX21hcF9sb2Nr KCk7CisKKwlpZHggPSB0YWJsZV9tYXBfbG9va3VwKG1hcCwgdGFibGVfb2lkLCBkYm9pZCwgaGFz aCk7CisJaWYgKGlkeCAhPSBUUkFDS19UQUJMRV9NVVRBVElPTl9JTlZBTElEX0lOREVYKQorCXsK KwkJVHJhY2tUYWJsZU11dGF0aW9uRW50cnkgKmVudHJpZXM7CisJCWludDY0CQlhZ2U7CisJCWlu dDY0CQl0b3RhbF9hZ2U7CisJCWludDY0CQltYXhfc3RhbGVfdXM7CisKKwkJZW50cmllcyA9IFRB QkxFX01BUF9FTlRSSUVTKG1hcCk7CisJCWdldF9jdXJyZW50X3RpbWUoJm5vdyk7CisJCXR0bF91 cyA9IHRyYWNrX3RhYmxlX211dGF0aW9uX3NobWVtLT5zdGF0ZQorCQkJLmN1cnJlbnRfdHRsX3Vz OworCisJCWFnZSA9IGVsYXBzZWRfdXMoCisJCQkJCQkgJmVudHJpZXNbaWR4XS5sYXN0X3dyaXRl X3RpbWUsICZub3cpOworCQlpc19zdGFsZSA9IChhZ2UgPCAoaW50NjQpIHR0bF91cyk7CisKKwkJ LyoKKwkJICogRW5mb3JjZSBtYXhfc3RhbGVuZXNzIGhhcmQgY2FwOiBubyBlbnRyeSBjYW4gZm9y Y2UgcHJpbWFyeSByb3V0aW5nCisJCSAqIGxvbmdlciB0aGFuIG1heF9zdGFsZW5lc3MgZnJvbSBp dHMgZmlyc3Qgd3JpdGUuCisJCSAqLworCQlpZiAoaXNfc3RhbGUpCisJCXsKKwkJCW1heF9zdGFs ZV91cyA9IChpbnQ2NCkgcG9vbF9jb25maWcKKwkJCQktPnRyYWNrX3RhYmxlX211dGF0aW9uX21h eF9zdGFsZW5lc3MKKwkJCQkqIDEwMDBMTDsKKwkJCWlmIChtYXhfc3RhbGVfdXMgPiAwKQorCQkJ eworCQkJCXRvdGFsX2FnZSA9IGVsYXBzZWRfdXMoCisJCQkJCQkJCQkgICAmZW50cmllc1tpZHhd LmZpcnN0X3dyaXRlX3RpbWUsCisJCQkJCQkJCQkgICAmbm93KTsKKwkJCQlpZiAodG90YWxfYWdl ID49IG1heF9zdGFsZV91cykKKwkJCQkJaXNfc3RhbGUgPSBmYWxzZTsKKwkJCX0KKwkJfQorCisJ CWVyZXBvcnQoREVCVUcyLAorCQkJCShlcnJtc2coInRyYWNrX3RhYmxlX211dGF0aW9uOiAiCisJ CQkJCQkib2lkICVkIGRib2lkICVkICIKKwkJCQkJCSJlbGFwc2VkPSVsZCB0dGw9JWx1IHN0YWxl PSVkIiwKKwkJCQkJCXRhYmxlX29pZCwgZGJvaWQsCisJCQkJCQkobG9uZykgYWdlLAorCQkJCQkJ KHVuc2lnbmVkIGxvbmcpIHR0bF91cywKKwkJCQkJCWlzX3N0YWxlKSkpOworCX0KKworCXRhYmxl X21hcF91bmxvY2soKTsKKwordXBkYXRlX3N0YXRzOgorCS8qIFVwZGF0ZSBzdGF0aXN0aWNzIHVz aW5nIHNlbWFwaG9yZSAqLworCWlmICh0cmFja190YWJsZV9tdXRhdGlvbl9zaG1lbSAhPSBOVUxM KQorCXsKKwkJVHJhY2tUYWJsZU11dGF0aW9uU3RhdGUgKnN0OworCisJCXRhYmxlX21hcF9sb2Nr KCk7CisJCXN0ID0gJnRyYWNrX3RhYmxlX211dGF0aW9uX3NobWVtLT5zdGF0ZTsKKwkJc3QtPnN0 YXRzX3F1ZXJpZXNfY2hlY2tlZCsrOworCQlpZiAoaXNfc3RhbGUpCisJCQlzdC0+c3RhdHNfZm9y Y2VkX3ByaW1hcnkrKzsKKwkJZWxzZQorCQkJc3QtPnN0YXRzX2FsbG93ZWRfcmVwbGljYSsrOwor CQl0YWJsZV9tYXBfdW5sb2NrKCk7CisJfQorCisJcmV0dXJuIGlzX3N0YWxlOworfQorCisvKgor ICogTWFyayBtdWx0aXBsZSB0YWJsZXMgYXMgcmVjZW50bHkgd3JpdHRlbi4KKyAqIENhbGxlZCBh ZnRlciBETUwgcXVlcmllcyBjb21wbGV0ZSB0byByZWNvcmQKKyAqIHdoaWNoIHRhYmxlcyB3ZXJl IG1vZGlmaWVkLgorICovCit2b2lkCitwb29sX3RyYWNrX3RhYmxlX211dGF0aW9uX21hcmtfdGFi bGVzX3dyaXR0ZW4oCisJCQkJCQkJCQkJCSAgY29uc3QgaW50ICp0YWJsZV9vaWRzLCBpbnQgbnVt X3RhYmxlcywgaW50IGRib2lkKQoreworCVRyYWNrVGFibGVNdXRhdGlvbkhhc2hUYWJsZSAqbWFw OworCVRyYWNrVGFibGVNdXRhdGlvblN0YXRlICpzdDsKKwlzdHJ1Y3QgdGltZXZhbCBub3c7CisJ aW50CQkJaTsKKworCWlmIChUUkFDS19UQUJMRV9NVVRBVElPTl9ESVNBQkxFRCgpKQorCQlyZXR1 cm47CisKKwlpZiAobnVtX3RhYmxlcyA8PSAwIHx8IHRhYmxlX29pZHMgPT0gTlVMTCB8fAorCQlk Ym9pZCA8PSAwKQorCQlyZXR1cm47CisKKwltYXAgPSB0cmFja190YWJsZV9tdXRhdGlvbl9zaG1l bS0+dGFibGVfbWFwOworCXN0ID0gJnRyYWNrX3RhYmxlX211dGF0aW9uX3NobWVtLT5zdGF0ZTsK KwlnZXRfY3VycmVudF90aW1lKCZub3cpOworCisJdGFibGVfbWFwX2xvY2soKTsKKworCS8qIFBl cmlvZGljYWxseSBjbGVhbiB1cCBleHBpcmVkIGVudHJpZXMgKi8KKwlpZiAobWFwLT5udW1fZW50 cmllcyA+IG1hcC0+bWF4X2VudHJpZXMgKiAzIC8gNCkKKwl7CisJCWludDY0CQlzaW5jZV9jbGVh bnVwOworCisJCXNpbmNlX2NsZWFudXAgPSBlbGFwc2VkX3VzKAorCQkJCQkJCQkgICAmc3QtPmxh c3RfY2xlYW51cF90aW1lLCAmbm93KTsKKwkJLyogMTAwbXMgaW50ZXJ2YWwgKi8KKwkJaWYgKHNp bmNlX2NsZWFudXAgPiAxMDAwMDApCisJCXsKKwkJCXRhYmxlX21hcF9jbGVhbnVwX2V4cGlyZWQo CisJCQkJCQkJCQkgIG1hcCwgc3QtPmN1cnJlbnRfdHRsX3VzKTsKKwkJCXN0LT5sYXN0X2NsZWFu dXBfdGltZSA9IG5vdzsKKwkJfQorCX0KKworCWZvciAoaSA9IDA7IGkgPCBudW1fdGFibGVzOyBp KyspCisJeworCQl1aW50MzIJCWhhc2g7CisJCWludAkJCXRhYmxlX29pZCA9IHRhYmxlX29pZHNb aV07CisKKwkJaWYgKHRhYmxlX29pZCA+IDApCisJCXsKKwkJCWhhc2ggPSBmbnYxYV9oYXNoX3Rh YmxlX2tleSgKKwkJCQkJCQkJCQl0YWJsZV9vaWQsIGRib2lkKTsKKwkJCXRhYmxlX21hcF9pbnNl cnQobWFwLCB0YWJsZV9vaWQsCisJCQkJCQkJIGRib2lkLCBoYXNoLCAmbm93KTsKKwkJfQorCX0K KworCXRhYmxlX21hcF91bmxvY2soKTsKK30KKworLyoKKyAqIE1hcmsgYSBzaW5nbGUgdGFibGUg YXMgcmVjZW50bHkgd3JpdHRlbi4KKyAqLwordm9pZAorcG9vbF90cmFja190YWJsZV9tdXRhdGlv bl9tYXJrX3RhYmxlX3dyaXR0ZW4oCisJCQkJCQkJCQkJCSBpbnQgdGFibGVfb2lkLCBpbnQgZGJv aWQpCit7CisJaWYgKHRhYmxlX29pZCA+IDAgJiYgZGJvaWQgPiAwKQorCXsKKwkJY29uc3QgaW50 CXRhYmxlc1sxXSA9IHt0YWJsZV9vaWR9OworCisJCXBvb2xfdHJhY2tfdGFibGVfbXV0YXRpb25f bWFya190YWJsZXNfd3JpdHRlbigKKwkJCQkJCQkJCQkJCQkgIHRhYmxlcywgMSwgZGJvaWQpOwor CX0KK30KKworLyoKKyAqIFVwZGF0ZSB0aGUgc3RhbGVuZXNzIFRUTCBiYXNlZCBvbiBvYnNlcnZl ZAorICogcmVwbGljYXRpb24gZGVsYXkuICBOZXcgVFRMID0gZGVsYXkgKiBmYWN0b3IsCisgKiBj bGFtcGVkIHRvIFtkZWZhdWx0X3R0bCwgMSBob3VyXS4KKyAqLwordm9pZAorcG9vbF90cmFja190 YWJsZV9tdXRhdGlvbl91cGRhdGVfdHRsKHVpbnQ2NCBkZWxheV91cykKK3sKKwl1aW50NjQJCW5l d190dGw7CisJZG91YmxlCQlmYWN0b3I7CisJVHJhY2tUYWJsZU11dGF0aW9uU3RhdGUgKnN0Owor CisJaWYgKFRSQUNLX1RBQkxFX01VVEFUSU9OX0RJU0FCTEVEKCkpCisJCXJldHVybjsKKworCWZh Y3RvciA9IHBvb2xfY29uZmlnLT50cmFja190YWJsZV9tdXRhdGlvbl90dGxfZmFjdG9yOworCW5l d190dGwgPSAodWludDY0KSAoZGVsYXlfdXMgKiBmYWN0b3IpOworCWlmIChuZXdfdHRsIDwgVFJB Q0tfVEFCTEVfTVVUQVRJT05fREVGQVVMVF9UVExfVVMpCisJCW5ld190dGwgPSBUUkFDS19UQUJM RV9NVVRBVElPTl9ERUZBVUxUX1RUTF9VUzsKKworCS8qIE1heGltdW0gVFRMIG9mIDEgaG91ciAq LworCWlmIChuZXdfdHRsID4gMzYwMFVMTCAqIDEwMDAwMDBVTEwpCisJCW5ld190dGwgPSAzNjAw VUxMICogMTAwMDAwMFVMTDsKKworCXN0ID0gJnRyYWNrX3RhYmxlX211dGF0aW9uX3NobWVtLT5z dGF0ZTsKKwlzdC0+Y3VycmVudF90dGxfdXMgPSBuZXdfdHRsOworCWdldF9jdXJyZW50X3RpbWUo JnN0LT50dGxfbGFzdF91cGRhdGVkKTsKKworCWVyZXBvcnQoREVCVUcxLAorCQkJKGVycm1zZygi dHJhY2tfdGFibGVfbXV0YXRpb246ICIKKwkJCQkJIlRUTD0lbHUgdXMgKGRlbGF5PSVsdSBmYWN0 b3I9JS4xZikiLAorCQkJCQkodW5zaWduZWQgbG9uZykgbmV3X3R0bCwKKwkJCQkJKHVuc2lnbmVk IGxvbmcpIGRlbGF5X3VzLAorCQkJCQlmYWN0b3IpKSk7Cit9CisKKy8qCisgKiBMb29rIHVwIGEg Y2FjaGVkIHBhcnNlIHJlc3VsdCBieSBxdWVyeSBoYXNoLgorICogUmV0dXJucyB0cnVlIGFuZCBm aWxscyBvdXRwdXQgcGFyYW1ldGVycyBpZgorICogdGhlIHF1ZXJ5IHdhcyBmb3VuZCBpbiB0aGUg cGFyc2UgY2FjaGUuCisgKi8KK2Jvb2wKK3Bvb2xfdHJhY2tfdGFibGVfbXV0YXRpb25fZ2V0X2Nh Y2hlZF9wYXJzZSgKKwkJCQkJCQkJCQkgICB1aW50NjQgaGFzaCwgYm9vbCAqaXNfd3JpdGUsCisJ CQkJCQkJCQkJICAgY2hhciB0YWJsZV9uYW1lc1tdW1RSQUNLX1RBQkxFX01VVEFUSU9OX1RBQkxF X05BTUVfTEVOXSwKKwkJCQkJCQkJCQkgICBpbnQgKm51bV90YWJsZXMpCit7CisJUXVlcnlQYXJz ZUNhY2hlICpjYWNoZTsKKwlpbnQJCQlpZHg7CisJYm9vbAkJZm91bmQgPSBmYWxzZTsKKwlpbnQJ CQltYXhfdGFibGVzOworCisJaWYgKFRSQUNLX1RBQkxFX01VVEFUSU9OX0RJU0FCTEVEKCkpCisJ CXJldHVybiBmYWxzZTsKKworCW1heF90YWJsZXMgPSBUUkFDS19UQUJMRV9NVVRBVElPTl9NQVhf VEFCTEVTX1BFUl9RVUVSWTsKKwljYWNoZSA9IHRyYWNrX3RhYmxlX211dGF0aW9uX3NobWVtLT5x dWVyeV9jYWNoZTsKKworCXBhcnNlX2NhY2hlX2xvY2soKTsKKworCWlkeCA9IHBhcnNlX2NhY2hl X2xvb2t1cChjYWNoZSwgaGFzaCk7CisJaWYgKGlkeCAhPSBUUkFDS19UQUJMRV9NVVRBVElPTl9J TlZBTElEX0lOREVYKQorCXsKKwkJUXVlcnlQYXJzZUVudHJ5ICplbnRyaWVzOworCQlpbnQJCQlp OworCQlpbnQJCQluYW1lbGVuOworCisJCWVudHJpZXMgPSBQQVJTRV9DQUNIRV9FTlRSSUVTKGNh Y2hlKTsKKwkJbmFtZWxlbiA9IFRSQUNLX1RBQkxFX01VVEFUSU9OX1RBQkxFX05BTUVfTEVOOwor CQkqaXNfd3JpdGUgPSBlbnRyaWVzW2lkeF0uaXNfd3JpdGU7CisJCSpudW1fdGFibGVzID0gZW50 cmllc1tpZHhdLm51bV90YWJsZXM7CisKKwkJZm9yIChpID0gMDsKKwkJCSBpIDwgZW50cmllc1tp ZHhdLm51bV90YWJsZXMgJiYKKwkJCSBpIDwgbWF4X3RhYmxlczsKKwkJCSBpKyspCisJCXsKKwkJ CXN0cmxjcHkodGFibGVfbmFtZXNbaV0sCisJCQkJCWVudHJpZXNbaWR4XS50YWJsZV9uYW1lc1tp XSwKKwkJCQkJbmFtZWxlbik7CisJCX0KKworCQkvKiBNb3ZlIHRvIGZyb250IG9mIExSVSAqLwor CQlwYXJzZV9jYWNoZV9scnVfdG91Y2goY2FjaGUsIGlkeCk7CisJCWZvdW5kID0gdHJ1ZTsKKwl9 CisKKwlwYXJzZV9jYWNoZV91bmxvY2soKTsKKworCXJldHVybiBmb3VuZDsKK30KKworLyoKKyAq IFN0b3JlIGEgcGFyc2UgcmVzdWx0IGluIHRoZSBzaGFyZWQgY2FjaGUuCisgKiBFdmljdHMgdGhl IExSVSBlbnRyeSBpZiB0aGUgY2FjaGUgaXMgZnVsbC4KKyAqLwordm9pZAorcG9vbF90cmFja190 YWJsZV9tdXRhdGlvbl9jYWNoZV9wYXJzZSgKKwkJCQkJCQkJCSAgdWludDY0IGhhc2gsIGJvb2wg aXNfd3JpdGUsCisJCQkJCQkJCQkgIGNvbnN0IGNoYXIgdGFibGVfbmFtZXNbXVtUUkFDS19UQUJM RV9NVVRBVElPTl9UQUJMRV9OQU1FX0xFTl0sCisJCQkJCQkJCQkgIGludCBudW1fdGFibGVzKQor eworCVF1ZXJ5UGFyc2VDYWNoZSAqY2FjaGU7CisJaW50CQkgICAqYnVja2V0czsKKwlRdWVyeVBh cnNlRW50cnkgKmVudHJpZXM7CisJaW50CQkJaWR4OworCWludAkJCWJ1Y2tldDsKKwlpbnQJCQlt YXhfdGFibGVzOworCWludAkJCW5hbWVsZW47CisKKwlpZiAoVFJBQ0tfVEFCTEVfTVVUQVRJT05f RElTQUJMRUQoKSkKKwkJcmV0dXJuOworCisJbWF4X3RhYmxlcyA9IFRSQUNLX1RBQkxFX01VVEFU SU9OX01BWF9UQUJMRVNfUEVSX1FVRVJZOworCW5hbWVsZW4gPSBUUkFDS19UQUJMRV9NVVRBVElP Tl9UQUJMRV9OQU1FX0xFTjsKKwljYWNoZSA9IHRyYWNrX3RhYmxlX211dGF0aW9uX3NobWVtLT5x dWVyeV9jYWNoZTsKKworCXBhcnNlX2NhY2hlX2xvY2soKTsKKworCS8qIENoZWNrIGlmIGFscmVh ZHkgZXhpc3RzICovCisJaWR4ID0gcGFyc2VfY2FjaGVfbG9va3VwKGNhY2hlLCBoYXNoKTsKKwlp ZiAoaWR4ICE9IFRSQUNLX1RBQkxFX01VVEFUSU9OX0lOVkFMSURfSU5ERVgpCisJeworCQlwYXJz ZV9jYWNoZV91bmxvY2soKTsKKwkJcmV0dXJuOworCX0KKworCS8qIEFsbG9jYXRlIG5ldyBlbnRy eSAobWF5IGV2aWN0IExSVSkgKi8KKwlpZHggPSBwYXJzZV9jYWNoZV9hbGxvY19lbnRyeShjYWNo ZSk7CisJaWYgKGlkeCA9PSBUUkFDS19UQUJMRV9NVVRBVElPTl9JTlZBTElEX0lOREVYKQorCXsK KwkJcGFyc2VfY2FjaGVfdW5sb2NrKCk7CisJCWVyZXBvcnQoV0FSTklORywKKwkJCQkoZXJybXNn KCJ0cmFja190YWJsZV9tdXRhdGlvbjogIgorCQkJCQkJInBhcnNlIGNhY2hlIGFsbG9jIGZhaWxl ZCIpKSk7CisJCXJldHVybjsKKwl9CisKKwllbnRyaWVzID0gUEFSU0VfQ0FDSEVfRU5UUklFUyhj YWNoZSk7CisJYnVja2V0cyA9IFBBUlNFX0NBQ0hFX0JVQ0tFVFMoY2FjaGUpOworCisJLyogRmls bCBpbiBlbnRyeSAqLworCWVudHJpZXNbaWR4XS5xdWVyeV9oYXNoID0gaGFzaDsKKwllbnRyaWVz W2lkeF0uaXNfd3JpdGUgPSBpc193cml0ZTsKKwllbnRyaWVzW2lkeF0ubnVtX3RhYmxlcyA9CisJ CShudW1fdGFibGVzID4gbWF4X3RhYmxlcykgPworCQltYXhfdGFibGVzIDogbnVtX3RhYmxlczsK KworCXsKKwkJaW50CQkJaTsKKworCQlmb3IgKGkgPSAwOyBpIDwgZW50cmllc1tpZHhdLm51bV90 YWJsZXM7IGkrKykKKwkJeworCQkJc3RybGNweShlbnRyaWVzW2lkeF0udGFibGVfbmFtZXNbaV0s CisJCQkJCXRhYmxlX25hbWVzW2ldLCBuYW1lbGVuKTsKKwkJfQorCX0KKworCS8qIEluc2VydCBp bnRvIGhhc2ggYnVja2V0ICovCisJYnVja2V0ID0gaGFzaCAlIGNhY2hlLT5udW1fYnVja2V0czsK KwllbnRyaWVzW2lkeF0ubmV4dCA9IGJ1Y2tldHNbYnVja2V0XTsKKwlidWNrZXRzW2J1Y2tldF0g PSBpZHg7CisKKwkvKiBBZGQgdG8gTFJVIGxpc3QgKi8KKwlwYXJzZV9jYWNoZV9scnVfYWRkKGNh Y2hlLCBpZHgpOworCisJcGFyc2VfY2FjaGVfdW5sb2NrKCk7Cit9CisKKy8qCisgKiBOb3JtYWxp emUgYSBTUUwgcXVlcnkgYW5kIGNvbXB1dGUgaXRzIDY0LWJpdCBoYXNoLgorICogU3RyaXBzIGNv bW1lbnRzLCBjb2xsYXBzZXMgd2hpdGVzcGFjZSwgbG93ZXJjYXNlcywKKyAqIGFuZCByZXBsYWNl cyBsaXRlcmFscyB3aXRoIHBsYWNlaG9sZGVycy4KKyAqLwordWludDY0Citwb29sX3RyYWNrX3Rh YmxlX211dGF0aW9uX25vcm1hbGl6ZV9hbmRfaGFzaCgKKwkJCQkJCQkJCQkJIGNvbnN0IGNoYXIg KnF1ZXJ5KQoreworCWNoYXIJCW5vcm1hbGl6ZWRbODE5Ml07CisJc2l6ZV90CQlsZW47CisKKwlp ZiAocXVlcnkgPT0gTlVMTCB8fCBxdWVyeVswXSA9PSAnXDAnKQorCQlyZXR1cm4gMDsKKworCWxl biA9IG5vcm1hbGl6ZV9xdWVyeShxdWVyeSwgbm9ybWFsaXplZCwKKwkJCQkJCSAgc2l6ZW9mKG5v cm1hbGl6ZWQpKTsKKwlpZiAobGVuID09IDApCisJCXJldHVybiAwOworCisJcmV0dXJuIGZudjFh X2hhc2hfNjQobm9ybWFsaXplZCwgbGVuKTsKK30KLS0gCjIuNDMuMAoK ----Next_Part(Tue_Apr__7_18_43_48_2026_405)----