Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1v1Mqs-007m6r-0E for pgsql-hackers@arkaria.postgresql.org; Wed, 24 Sep 2025 10:35:59 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1v1Mqq-00CDla-Ki for pgsql-hackers@arkaria.postgresql.org; Wed, 24 Sep 2025 10:35:56 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1v1Mqp-00CDlS-RB for pgsql-hackers@lists.postgresql.org; Wed, 24 Sep 2025 10:35:56 +0000 Received: from meldrar.postgresql.org ([2a02:c0:301:0:ffff::31]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1v1Mql-002bsw-1M for pgsql-hackers@postgresql.org; Wed, 24 Sep 2025 10:35:55 +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=XttDQqD18R6QmkhwS1Cay9ak25ByAfkSoTKl8Rhi4bI=; b=bq7g+XJ+hTLy8BM4jyPhOoKzgg LtrafDUE+zkIUGH6zWx5hFd5RtfVKmvMGakJWCHWh1d7zsy7p0Z5BFAvNsHALEy4simCKR6EWGIws /UneSSbU3cgIHU/UW16vPPJ3Ey+A987JyxsAtcJ1H7gOcD+E1yESDflDgyiSnHUXoTQ3gF8BY6RdT GppnXEzJ3DoGIXVdaPrJthKO5hQgg+nn9cTIEsgE+jAhk2HuCEJoHe4Ifm+IXmLr6V4zP7PXC+WSO +W98JffW3SsS2c/tikVzoUq3sAhIWqxqdjbRYY5PwMYPLG8UxYNof3m8vaxVFHRp1R8c7HgMnBjEd SAM5G2FA==; Received: from [2409:11:4120:300:8386:3e98:737a:6cd1] (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 1v1MqY-005Svt-0a; Wed, 24 Sep 2025 10:35:45 +0000 Date: Wed, 24 Sep 2025 19:35:23 +0900 (JST) Message-Id: <20250924.193523.694296225366690354.ishii@postgresql.org> To: david.g.johnston@gmail.com, vik@postgresfriends.org, jacob.champion@enterprisedb.com, er@xs4all.nl, peter@eisentraut.org Cc: pgsql-hackers@postgresql.org Subject: Re: Row pattern recognition From: Tatsuo Ishii In-Reply-To: <20250816.174552.1094782787078410357.ishii@postgresql.org> References: <20250423.085533.2100770238433359673.ishii@postgresql.org> <20250506.095351.1825428116352052974.ishii@postgresql.org> <20250816.174552.1094782787078410357.ishii@postgresql.org> X-Mailer: Mew version 6.8 on Emacs 29.3 Mime-Version: 1.0 Content-Type: Multipart/Mixed; boundary="--Next_Part(Wed_Sep_24_19_35_23_2025_264)--" Content-Transfer-Encoding: 7bit X-Host-Lookup-Failed: Reverse DNS lookup failed for 2409:11:4120:300:8386:3e98:737a:6cd1 (failed) List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk ----Next_Part(Wed_Sep_24_19_35_23_2025_264)-- Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit Attached are the v33 patches for Row pattern recognition. The difference from v32 is that the raw parse tree printing patch is not included in v33. This is because now that we have debug_print_raw_parse. Best regards, -- Tatsuo Ishii SRA OSS K.K. English: http://www.sraoss.co.jp/index_en/ Japanese:http://www.sraoss.co.jp ----Next_Part(Wed_Sep_24_19_35_23_2025_264)-- Content-Type: Application/Octet-Stream Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="v33-0001-Row-pattern-recognition-patch-for-raw-parser.patch" RnJvbSBkNGM0ZDZjNzdhNTg5OWRlNDE5NDZkMGNhN2Q0NmRkMDM1Y2YyNmFhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUYXRzdW8gSXNoaWkgPGlzaGlpQHBvc3RncmVzcWwub3JnPgpE YXRlOiBXZWQsIDI0IFNlcCAyMDI1IDE5OjE4OjM3ICswOTAwClN1YmplY3Q6IFtQQVRDSCB2MzMg MS84XSBSb3cgcGF0dGVybiByZWNvZ25pdGlvbiBwYXRjaCBmb3IgcmF3IHBhcnNlci4KCi0tLQog c3JjL2JhY2tlbmQvcGFyc2VyL2dyYW0ueSAgICAgICB8IDEyMiArKysrKysrKysrKysrKysrKysr KysrKysrKystLS0tLQogc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oICB8ICA0NyArKysr KysrKysrKysKIHNyYy9pbmNsdWRlL3BhcnNlci9rd2xpc3QuaCAgICAgfCAgIDUgKysKIHNyYy9p bmNsdWRlL3BhcnNlci9wYXJzZV9ub2RlLmggfCAgIDEgKwogNCBmaWxlcyBjaGFuZ2VkLCAxNTkg aW5zZXJ0aW9ucygrKSwgMTYgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv cGFyc2VyL2dyYW0ueSBiL3NyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkKaW5kZXggOWZkNDhhY2Ix ZjguLmU5YWQ5ODI0ZmU0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55Cisr KyBiL3NyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkKQEAgLTY3MSw2ICs2NzEsMTMgQEAgc3RhdGlj IE5vZGUgKm1ha2VSZWN1cnNpdmVWaWV3U2VsZWN0KGNoYXIgKnJlbG5hbWUsIExpc3QgKmFsaWFz ZXMsIE5vZGUgKnF1ZXJ5KTsKIAkJCQlqc29uX29iamVjdF9jb25zdHJ1Y3Rvcl9udWxsX2NsYXVz ZV9vcHQKIAkJCQlqc29uX2FycmF5X2NvbnN0cnVjdG9yX251bGxfY2xhdXNlX29wdAogCisldHlw ZSA8dGFyZ2V0Pglyb3dfcGF0dGVybl9kZWZpbml0aW9uCisldHlwZSA8bm9kZT4Jb3B0X3Jvd19w YXR0ZXJuX2NvbW1vbl9zeW50YXgKKwkJCQlyb3dfcGF0dGVybl90ZXJtCisldHlwZSA8bGlzdD4J cm93X3BhdHRlcm5fZGVmaW5pdGlvbl9saXN0CisJCQkJcm93X3BhdHRlcm4KKyV0eXBlIDxpdmFs PglvcHRfcm93X3BhdHRlcm5fc2tpcF90bworJXR5cGUgPGJvb2xlYW4+CW9wdF9yb3dfcGF0dGVy bl9pbml0aWFsX29yX3NlZWsKIAogLyoKICAqIE5vbi1rZXl3b3JkIHRva2VuIHR5cGVzLiAgVGhl c2UgYXJlIGhhcmQtd2lyZWQgaW50byB0aGUgImZsZXgiIGxleGVyLgpAQCAtNzE0LDcgKzcyMSw3 IEBAIHN0YXRpYyBOb2RlICptYWtlUmVjdXJzaXZlVmlld1NlbGVjdChjaGFyICpyZWxuYW1lLCBM aXN0ICphbGlhc2VzLCBOb2RlICpxdWVyeSk7CiAJQ1VSUkVOVF9USU1FIENVUlJFTlRfVElNRVNU QU1QIENVUlJFTlRfVVNFUiBDVVJTT1IgQ1lDTEUKIAogCURBVEFfUCBEQVRBQkFTRSBEQVlfUCBE RUFMTE9DQVRFIERFQyBERUNJTUFMX1AgREVDTEFSRSBERUZBVUxUIERFRkFVTFRTCi0JREVGRVJS QUJMRSBERUZFUlJFRCBERUZJTkVSIERFTEVURV9QIERFTElNSVRFUiBERUxJTUlURVJTIERFUEVO RFMgREVQVEggREVTQworCURFRkVSUkFCTEUgREVGRVJSRUQgREVGSU5FIERFRklORVIgREVMRVRF X1AgREVMSU1JVEVSIERFTElNSVRFUlMgREVQRU5EUyBERVBUSCBERVNDCiAJREVUQUNIIERJQ1RJ T05BUlkgRElTQUJMRV9QIERJU0NBUkQgRElTVElOQ1QgRE8gRE9DVU1FTlRfUCBET01BSU5fUAog CURPVUJMRV9QIERST1AKIApAQCAtNzMwLDcgKzczNyw3IEBAIHN0YXRpYyBOb2RlICptYWtlUmVj dXJzaXZlVmlld1NlbGVjdChjaGFyICpyZWxuYW1lLCBMaXN0ICphbGlhc2VzLCBOb2RlICpxdWVy eSk7CiAJSEFORExFUiBIQVZJTkcgSEVBREVSX1AgSE9MRCBIT1VSX1AKIAogCUlERU5USVRZX1Ag SUZfUCBJTElLRSBJTU1FRElBVEUgSU1NVVRBQkxFIElNUExJQ0lUX1AgSU1QT1JUX1AgSU5fUCBJ TkNMVURFCi0JSU5DTFVESU5HIElOQ1JFTUVOVCBJTkRFTlQgSU5ERVggSU5ERVhFUyBJTkhFUklU IElOSEVSSVRTIElOSVRJQUxMWSBJTkxJTkVfUAorCUlOQ0xVRElORyBJTkNSRU1FTlQgSU5ERU5U IElOREVYIElOREVYRVMgSU5IRVJJVCBJTkhFUklUUyBJTklUSUFMIElOSVRJQUxMWSBJTkxJTkVf UAogCUlOTkVSX1AgSU5PVVQgSU5QVVRfUCBJTlNFTlNJVElWRSBJTlNFUlQgSU5TVEVBRCBJTlRf UCBJTlRFR0VSCiAJSU5URVJTRUNUIElOVEVSVkFMIElOVE8gSU5WT0tFUiBJUyBJU05VTEwgSVNP TEFUSU9OCiAKQEAgLTc1NSw4ICs3NjIsOCBAQCBzdGF0aWMgTm9kZSAqbWFrZVJlY3Vyc2l2ZVZp ZXdTZWxlY3QoY2hhciAqcmVsbmFtZSwgTGlzdCAqYWxpYXNlcywgTm9kZSAqcXVlcnkpOwogCU9S REVSIE9SRElOQUxJVFkgT1RIRVJTIE9VVF9QIE9VVEVSX1AKIAlPVkVSIE9WRVJMQVBTIE9WRVJM QVkgT1ZFUlJJRElORyBPV05FRCBPV05FUgogCi0JUEFSQUxMRUwgUEFSQU1FVEVSIFBBUlNFUiBQ QVJUSUFMIFBBUlRJVElPTiBQQVNTSU5HIFBBU1NXT1JEIFBBVEgKLQlQRVJJT0QgUExBQ0lORyBQ TEFOIFBMQU5TIFBPTElDWQorCVBBUkFMTEVMIFBBUkFNRVRFUiBQQVJTRVIgUEFSVElBTCBQQVJU SVRJT04gUEFTU0lORyBQQVNTV09SRCBQQVNUCisJUEFUSCBQQVRURVJOX1AgUEVSSU9EIFBMQUNJ TkcgUExBTiBQTEFOUyBQT0xJQ1kKIAlQT1NJVElPTiBQUkVDRURJTkcgUFJFQ0lTSU9OIFBSRVNF UlZFIFBSRVBBUkUgUFJFUEFSRUQgUFJJTUFSWQogCVBSSU9SIFBSSVZJTEVHRVMgUFJPQ0VEVVJB TCBQUk9DRURVUkUgUFJPQ0VEVVJFUyBQUk9HUkFNIFBVQkxJQ0FUSU9OCiAKQEAgLTc2Nyw3ICs3 NzQsNyBAQCBzdGF0aWMgTm9kZSAqbWFrZVJlY3Vyc2l2ZVZpZXdTZWxlY3QoY2hhciAqcmVsbmFt ZSwgTGlzdCAqYWxpYXNlcywgTm9kZSAqcXVlcnkpOwogCVJFU0VUIFJFU1RBUlQgUkVTVFJJQ1Qg UkVUVVJOIFJFVFVSTklORyBSRVRVUk5TIFJFVk9LRSBSSUdIVCBST0xFIFJPTExCQUNLIFJPTExV UAogCVJPVVRJTkUgUk9VVElORVMgUk9XIFJPV1MgUlVMRQogCi0JU0FWRVBPSU5UIFNDQUxBUiBT Q0hFTUEgU0NIRU1BUyBTQ1JPTEwgU0VBUkNIIFNFQ09ORF9QIFNFQ1VSSVRZIFNFTEVDVAorCVNB VkVQT0lOVCBTQ0FMQVIgU0NIRU1BIFNDSEVNQVMgU0NST0xMIFNFQVJDSCBTRUNPTkRfUCBTRUNV UklUWSBTRUVLIFNFTEVDVAogCVNFUVVFTkNFIFNFUVVFTkNFUwogCVNFUklBTElaQUJMRSBTRVJW RVIgU0VTU0lPTiBTRVNTSU9OX1VTRVIgU0VUIFNFVFMgU0VUT0YgU0hBUkUgU0hPVwogCVNJTUlM QVIgU0lNUExFIFNLSVAgU01BTExJTlQgU05BUFNIT1QgU09NRSBTT1VSQ0UgU1FMX1AgU1RBQkxF IFNUQU5EQUxPTkVfUApAQCAtODUwLDggKzg1Nyw4IEBAIHN0YXRpYyBOb2RlICptYWtlUmVjdXJz aXZlVmlld1NlbGVjdChjaGFyICpyZWxuYW1lLCBMaXN0ICphbGlhc2VzLCBOb2RlICpxdWVyeSk7 CiAgKiByZWZlcmVuY2UgcG9pbnQgZm9yIGEgcHJlY2VkZW5jZSBsZXZlbCB0aGF0IHdlIGNhbiBh c3NpZ24gdG8gb3RoZXIKICAqIGtleXdvcmRzIHRoYXQgbGFjayBhIG5hdHVyYWwgcHJlY2VkZW5j ZSBsZXZlbC4KICAqCi0gKiBXZSBuZWVkIHRvIGRvIHRoaXMgZm9yIFBBUlRJVElPTiwgUkFOR0Us IFJPV1MsIGFuZCBHUk9VUFMgdG8gc3VwcG9ydAotICogb3B0X2V4aXN0aW5nX3dpbmRvd19uYW1l IChzZWUgY29tbWVudCB0aGVyZSkuCisgKiBXZSBuZWVkIHRvIGRvIHRoaXMgZm9yIFBBUlRJVElP TiwgUkFOR0UsIFJPV1MsIEdST1VQUywgQUZURVIsIElOSVRJQUwsCisgKiBTRUVLLCBQQVRURVJO X1AgdG8gc3VwcG9ydCBvcHRfZXhpc3Rpbmdfd2luZG93X25hbWUgKHNlZSBjb21tZW50IHRoZXJl KS4KICAqCiAgKiBUaGUgZnJhbWVfYm91bmQgcHJvZHVjdGlvbnMgVU5CT1VOREVEIFBSRUNFRElO RyBhbmQgVU5CT1VOREVEIEZPTExPV0lORwogICogYXJlIGV2ZW4gbWVzc2llcjogc2luY2UgVU5C T1VOREVEIGlzIGFuIHVucmVzZXJ2ZWQga2V5d29yZCAocGVyIHNwZWMhKSwKQEAgLTg4MSw2ICs4 ODgsNyBAQCBzdGF0aWMgTm9kZSAqbWFrZVJlY3Vyc2l2ZVZpZXdTZWxlY3QoY2hhciAqcmVsbmFt ZSwgTGlzdCAqYWxpYXNlcywgTm9kZSAqcXVlcnkpOwogJW5vbmFzc29jCVVOQk9VTkRFRCBORVNU RUQgLyogaWRlYWxseSB3b3VsZCBoYXZlIHNhbWUgcHJlY2VkZW5jZSBhcyBJREVOVCAqLwogJW5v bmFzc29jCUlERU5UIFBBUlRJVElPTiBSQU5HRSBST1dTIEdST1VQUyBQUkVDRURJTkcgRk9MTE9X SU5HIENVQkUgUk9MTFVQCiAJCQlTRVQgS0VZUyBPQkpFQ1RfUCBTQ0FMQVIgVkFMVUVfUCBXSVRI IFdJVEhPVVQgUEFUSAorCQkJQUZURVIgSU5JVElBTCBTRUVLIFBBVFRFUk5fUAogJWxlZnQJCU9w IE9QRVJBVE9SCQkvKiBtdWx0aS1jaGFyYWN0ZXIgb3BzIGFuZCB1c2VyLWRlZmluZWQgb3BlcmF0 b3JzICovCiAlbGVmdAkJJysnICctJwogJWxlZnQJCScqJyAnLycgJyUnCkBAIC0xNjQ2Myw3ICsx NjQ3MSw4IEBAIG92ZXJfY2xhdXNlOiBPVkVSIHdpbmRvd19zcGVjaWZpY2F0aW9uCiAJCTsKIAog d2luZG93X3NwZWNpZmljYXRpb246ICcoJyBvcHRfZXhpc3Rpbmdfd2luZG93X25hbWUgb3B0X3Bh cnRpdGlvbl9jbGF1c2UKLQkJCQkJCW9wdF9zb3J0X2NsYXVzZSBvcHRfZnJhbWVfY2xhdXNlICcp JworCQkJCQkJb3B0X3NvcnRfY2xhdXNlIG9wdF9mcmFtZV9jbGF1c2UKKwkJCQkJCW9wdF9yb3df cGF0dGVybl9jb21tb25fc3ludGF4ICcpJwogCQkJCXsKIAkJCQkJV2luZG93RGVmICAqbiA9IG1h a2VOb2RlKFdpbmRvd0RlZik7CiAKQEAgLTE2NDc1LDIwICsxNjQ4NCwyMSBAQCB3aW5kb3dfc3Bl Y2lmaWNhdGlvbjogJygnIG9wdF9leGlzdGluZ193aW5kb3dfbmFtZSBvcHRfcGFydGl0aW9uX2Ns YXVzZQogCQkJCQluLT5mcmFtZU9wdGlvbnMgPSAkNS0+ZnJhbWVPcHRpb25zOwogCQkJCQluLT5z dGFydE9mZnNldCA9ICQ1LT5zdGFydE9mZnNldDsKIAkJCQkJbi0+ZW5kT2Zmc2V0ID0gJDUtPmVu ZE9mZnNldDsKKwkJCQkJbi0+cnBDb21tb25TeW50YXggPSAoUlBDb21tb25TeW50YXggKikkNjsK IAkJCQkJbi0+bG9jYXRpb24gPSBAMTsKIAkJCQkJJCQgPSBuOwogCQkJCX0KIAkJOwogCiAvKgot ICogSWYgd2Ugc2VlIFBBUlRJVElPTiwgUkFOR0UsIFJPV1Mgb3IgR1JPVVBTIGFzIHRoZSBmaXJz dCB0b2tlbiBhZnRlciB0aGUgJygnCi0gKiBvZiBhIHdpbmRvd19zcGVjaWZpY2F0aW9uLCB3ZSB3 YW50IHRoZSBhc3N1bXB0aW9uIHRvIGJlIHRoYXQgdGhlcmUgaXMKLSAqIG5vIGV4aXN0aW5nX3dp bmRvd19uYW1lOyBidXQgdGhvc2Uga2V5d29yZHMgYXJlIHVucmVzZXJ2ZWQgYW5kIHNvIGNvdWxk Ci0gKiBiZSBDb2xJZHMuICBXZSBmaXggdGhpcyBieSBtYWtpbmcgdGhlbSBoYXZlIHRoZSBzYW1l IHByZWNlZGVuY2UgYXMgSURFTlQKLSAqIGFuZCBnaXZpbmcgdGhlIGVtcHR5IHByb2R1Y3Rpb24g aGVyZSBhIHNsaWdodGx5IGhpZ2hlciBwcmVjZWRlbmNlLCBzbwotICogdGhhdCB0aGUgc2hpZnQv cmVkdWNlIGNvbmZsaWN0IGlzIHJlc29sdmVkIGluIGZhdm9yIG9mIHJlZHVjaW5nIHRoZSBydWxl LgotICogVGhlc2Uga2V5d29yZHMgYXJlIHRodXMgcHJlY2x1ZGVkIGZyb20gYmVpbmcgYW4gZXhp c3Rpbmdfd2luZG93X25hbWUgYnV0Ci0gKiBhcmUgbm90IHJlc2VydmVkIGZvciBhbnkgb3RoZXIg cHVycG9zZS4KKyAqIElmIHdlIHNlZSBQQVJUSVRJT04sIFJBTkdFLCBST1dTLCBHUk9VUFMsIEFG VEVSLCBJTklUSUFMLCBTRUVLIG9yIFBBVFRFUk5fUAorICogYXMgdGhlIGZpcnN0IHRva2VuIGFm dGVyIHRoZSAnKCcgb2YgYSB3aW5kb3dfc3BlY2lmaWNhdGlvbiwgd2Ugd2FudCB0aGUKKyAqIGFz c3VtcHRpb24gdG8gYmUgdGhhdCB0aGVyZSBpcyBubyBleGlzdGluZ193aW5kb3dfbmFtZTsgYnV0 IHRob3NlIGtleXdvcmRzCisgKiBhcmUgdW5yZXNlcnZlZCBhbmQgc28gY291bGQgYmUgQ29sSWRz LiAgV2UgZml4IHRoaXMgYnkgbWFraW5nIHRoZW0gaGF2ZSB0aGUKKyAqIHNhbWUgcHJlY2VkZW5j ZSBhcyBJREVOVCBhbmQgZ2l2aW5nIHRoZSBlbXB0eSBwcm9kdWN0aW9uIGhlcmUgYSBzbGlnaHRs eQorICogaGlnaGVyIHByZWNlZGVuY2UsIHNvIHRoYXQgdGhlIHNoaWZ0L3JlZHVjZSBjb25mbGlj dCBpcyByZXNvbHZlZCBpbiBmYXZvcgorICogb2YgcmVkdWNpbmcgdGhlIHJ1bGUuICBUaGVzZSBr ZXl3b3JkcyBhcmUgdGh1cyBwcmVjbHVkZWQgZnJvbSBiZWluZyBhbgorICogZXhpc3Rpbmdfd2lu ZG93X25hbWUgYnV0IGFyZSBub3QgcmVzZXJ2ZWQgZm9yIGFueSBvdGhlciBwdXJwb3NlLgogICov CiBvcHRfZXhpc3Rpbmdfd2luZG93X25hbWU6IENvbElkCQkJCQkJeyAkJCA9ICQxOyB9CiAJCQl8 IC8qRU1QVFkqLwkJCQklcHJlYyBPcAkJeyAkJCA9IE5VTEw7IH0KQEAgLTE2NjU3LDYgKzE2NjY3 LDc2IEBAIG9wdF93aW5kb3dfZXhjbHVzaW9uX2NsYXVzZToKIAkJCXwgLypFTVBUWSovCQkJCXsg JCQgPSAwOyB9CiAJCTsKIAorb3B0X3Jvd19wYXR0ZXJuX2NvbW1vbl9zeW50YXg6CitvcHRfcm93 X3BhdHRlcm5fc2tpcF90byBvcHRfcm93X3BhdHRlcm5faW5pdGlhbF9vcl9zZWVrCisJCQkJUEFU VEVSTl9QICcoJyByb3dfcGF0dGVybiAnKScKKwkJCQlERUZJTkUgcm93X3BhdHRlcm5fZGVmaW5p dGlvbl9saXN0CisJCQl7CisJCQkJUlBDb21tb25TeW50YXggKm4gPSBtYWtlTm9kZShSUENvbW1v blN5bnRheCk7CisJCQkJbi0+cnBTa2lwVG8gPSAkMTsKKwkJCQluLT5pbml0aWFsID0gJDI7CisJ CQkJbi0+cnBQYXR0ZXJucyA9ICQ1OworCQkJCW4tPnJwRGVmcyA9ICQ4OworCQkJCSQkID0gKE5v ZGUgKikgbjsKKwkJCX0KKwkJCXwgLypFTVBUWSovCQl7ICQkID0gTlVMTDsgfQorCQk7CisKK29w dF9yb3dfcGF0dGVybl9za2lwX3RvOgorCQkJQUZURVIgTUFUQ0ggU0tJUCBUTyBORVhUIFJPVwor CQkJCXsKKwkJCQkJJCQgPSBTVF9ORVhUX1JPVzsKKwkJCQl9CisJCQl8IEFGVEVSIE1BVENIIFNL SVAgUEFTVCBMQVNUX1AgUk9XCisJCQkJeworCQkJCQkkJCA9IFNUX1BBU1RfTEFTVF9ST1c7CisJ CQkJfQorCQkJfCAvKkVNUFRZKi8KKwkJCQl7CisJCQkJCSQkID0gU1RfUEFTVF9MQVNUX1JPVzsK KwkJCQl9CisJCTsKKworb3B0X3Jvd19wYXR0ZXJuX2luaXRpYWxfb3Jfc2VlazoKKwkJCUlOSVRJ QUwJCXsgJCQgPSB0cnVlOyB9CisJCQl8IFNFRUsKKwkJCQl7CisJCQkJCWVyZXBvcnQoRVJST1Is CisJCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAorCQkJCQkJ CSBlcnJtc2coIlNFRUsgaXMgbm90IHN1cHBvcnRlZCIpLAorCQkJCQkJCSBlcnJoaW50KCJVc2Ug SU5JVElBTCBpbnN0ZWFkLiIpLAorCQkJCQkJCSBwYXJzZXJfZXJycG9zaXRpb24oQDEpKSk7CisJ CQkJfQorCQkJfCAvKkVNUFRZKi8JCXsgJCQgPSB0cnVlOyB9CisJCTsKKworcm93X3BhdHRlcm46 CisJCQlyb3dfcGF0dGVybl90ZXJtCQkJCQl7ICQkID0gbGlzdF9tYWtlMSgkMSk7IH0KKwkJCXwg cm93X3BhdHRlcm4gcm93X3BhdHRlcm5fdGVybQkJeyAkJCA9IGxhcHBlbmQoJDEsICQyKTsgfQor CQk7CisKK3Jvd19wYXR0ZXJuX3Rlcm06CisJCQlDb2xJZAl7ICQkID0gKE5vZGUgKikgbWFrZVNp bXBsZUFfRXhwcihBRVhQUl9PUCwgIiIsIChOb2RlICopbWFrZVN0cmluZygkMSksIE5VTEwsIEAx KTsgfQorCQkJfCBDb2xJZCAnKicJeyAkJCA9IChOb2RlICopIG1ha2VTaW1wbGVBX0V4cHIoQUVY UFJfT1AsICIqIiwgKE5vZGUgKiltYWtlU3RyaW5nKCQxKSwgTlVMTCwgQDEpOyB9CisJCQl8IENv bElkICcrJwl7ICQkID0gKE5vZGUgKikgbWFrZVNpbXBsZUFfRXhwcihBRVhQUl9PUCwgIisiLCAo Tm9kZSAqKW1ha2VTdHJpbmcoJDEpLCBOVUxMLCBAMSk7IH0KKwkJCXwgQ29sSWQgJz8nCXsgJCQg PSAoTm9kZSAqKSBtYWtlU2ltcGxlQV9FeHByKEFFWFBSX09QLCAiPyIsIChOb2RlICopbWFrZVN0 cmluZygkMSksIE5VTEwsIEAxKTsgfQorCQk7CisKK3Jvd19wYXR0ZXJuX2RlZmluaXRpb25fbGlz dDoKKwkJCXJvd19wYXR0ZXJuX2RlZmluaXRpb24JCQkJCQkJCQkJeyAkJCA9IGxpc3RfbWFrZTEo JDEpOyB9CisJCQl8IHJvd19wYXR0ZXJuX2RlZmluaXRpb25fbGlzdCAnLCcgcm93X3BhdHRlcm5f ZGVmaW5pdGlvbgl7ICQkID0gbGFwcGVuZCgkMSwgJDMpOyB9CisJCTsKKworcm93X3BhdHRlcm5f ZGVmaW5pdGlvbjoKKwkJCUNvbElkIEFTIGFfZXhwcgorCQkJCXsKKwkJCQkJJCQgPSBtYWtlTm9k ZShSZXNUYXJnZXQpOworCQkJCQkkJC0+bmFtZSA9ICQxOworCQkJCQkkJC0+aW5kaXJlY3Rpb24g PSBOSUw7CisJCQkJCSQkLT52YWwgPSAoTm9kZSAqKSAkMzsKKwkJCQkJJCQtPmxvY2F0aW9uID0g QDE7CisJCQkJfQorCQk7CiAKIC8qCiAgKiBTdXBwb3J0aW5nIG5vbnRlcm1pbmFscyBmb3IgZXhw cmVzc2lvbnMuCkBAIC0xNzg1OSw2ICsxNzkzOSw3IEBAIHVucmVzZXJ2ZWRfa2V5d29yZDoKIAkJ CXwgSU5ERVhFUwogCQkJfCBJTkhFUklUCiAJCQl8IElOSEVSSVRTCisJCQl8IElOSVRJQUwKIAkJ CXwgSU5MSU5FX1AKIAkJCXwgSU5QVVRfUAogCQkJfCBJTlNFTlNJVElWRQpAQCAtMTc5MzIsNyAr MTgwMTMsOSBAQCB1bnJlc2VydmVkX2tleXdvcmQ6CiAJCQl8IFBBUlRJVElPTgogCQkJfCBQQVNT SU5HCiAJCQl8IFBBU1NXT1JECisJCQl8IFBBU1QKIAkJCXwgUEFUSAorCQkJfCBQQVRURVJOX1AK IAkJCXwgUEVSSU9ECiAJCQl8IFBMQU4KIAkJCXwgUExBTlMKQEAgLTE3OTg1LDYgKzE4MDY4LDcg QEAgdW5yZXNlcnZlZF9rZXl3b3JkOgogCQkJfCBTRUFSQ0gKIAkJCXwgU0VDT05EX1AKIAkJCXwg U0VDVVJJVFkKKwkJCXwgU0VFSwogCQkJfCBTRVFVRU5DRQogCQkJfCBTRVFVRU5DRVMKIAkJCXwg U0VSSUFMSVpBQkxFCkBAIC0xODIwNyw2ICsxODI5MSw3IEBAIHJlc2VydmVkX2tleXdvcmQ6CiAJ CQl8IENVUlJFTlRfVVNFUgogCQkJfCBERUZBVUxUCiAJCQl8IERFRkVSUkFCTEUKKwkJCXwgREVG SU5FCiAJCQl8IERFU0MKIAkJCXwgRElTVElOQ1QKIAkJCXwgRE8KQEAgLTE4MzcwLDYgKzE4NDU1 LDcgQEAgYmFyZV9sYWJlbF9rZXl3b3JkOgogCQkJfCBERUZBVUxUUwogCQkJfCBERUZFUlJBQkxF CiAJCQl8IERFRkVSUkVECisJCQl8IERFRklORQogCQkJfCBERUZJTkVSCiAJCQl8IERFTEVURV9Q CiAJCQl8IERFTElNSVRFUgpAQCAtMTg0NDgsNiArMTg1MzQsNyBAQCBiYXJlX2xhYmVsX2tleXdv cmQ6CiAJCQl8IElOREVYRVMKIAkJCXwgSU5IRVJJVAogCQkJfCBJTkhFUklUUworCQkJfCBJTklU SUFMCiAJCQl8IElOSVRJQUxMWQogCQkJfCBJTkxJTkVfUAogCQkJfCBJTk5FUl9QCkBAIC0xODU1 OSw3ICsxODY0Niw5IEBAIGJhcmVfbGFiZWxfa2V5d29yZDoKIAkJCXwgUEFSVElUSU9OCiAJCQl8 IFBBU1NJTkcKIAkJCXwgUEFTU1dPUkQKKwkJCXwgUEFTVAogCQkJfCBQQVRICisJCQl8IFBBVFRF Uk5fUAogCQkJfCBQRVJJT0QKIAkJCXwgUExBQ0lORwogCQkJfCBQTEFOCkBAIC0xODYxOCw2ICsx ODcwNyw3IEBAIGJhcmVfbGFiZWxfa2V5d29yZDoKIAkJCXwgU0NST0xMCiAJCQl8IFNFQVJDSAog CQkJfCBTRUNVUklUWQorCQkJfCBTRUVLCiAJCQl8IFNFTEVDVAogCQkJfCBTRVFVRU5DRQogCQkJ fCBTRVFVRU5DRVMKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaCBi L3NyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaAppbmRleCA0ZWQxNGZjNWI3OC4uZjA0ODUz NTM0MDUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaAorKysgYi9z cmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmgKQEAgLTU3Niw2ICs1NzYsMzEgQEAgdHlwZWRl ZiBzdHJ1Y3QgU29ydEJ5CiAJUGFyc2VMb2MJbG9jYXRpb247CQkvKiBvcGVyYXRvciBsb2NhdGlv biwgb3IgLTEgaWYgbm9uZS91bmtub3duICovCiB9IFNvcnRCeTsKIAorLyoKKyAqIEFGVEVSIE1B VENIIHJvdyBwYXR0ZXJuIHNraXAgdG8gdHlwZXMgaW4gcm93IHBhdHRlcm4gY29tbW9uIHN5bnRh eAorICovCit0eXBlZGVmIGVudW0gUlBTa2lwVG8KK3sKKwlTVF9OT05FLAkJCQkJLyogQUZURVIg TUFUQ0ggb21pdHRlZCAqLworCVNUX05FWFRfUk9XLAkJCQkvKiBTS0lQIFRPIE5FWFQgUk9XICov CisJU1RfUEFTVF9MQVNUX1JPVywJCQkvKiBTS0lQIFRPIFBBU1QgTEFTVCBST1cgKi8KK30gUlBT a2lwVG87CisKKy8qCisgKiBSb3dQYXR0ZXJuQ29tbW9uU3ludGF4IC0gcmF3IHJlcHJlc2VudGF0 aW9uIG9mIHJvdyBwYXR0ZXJuIGNvbW1vbiBzeW50YXgKKyAqCisgKi8KK3R5cGVkZWYgc3RydWN0 IFJQQ29tbW9uU3ludGF4Cit7CisJTm9kZVRhZwkJdHlwZTsKKwlSUFNraXBUbwlycFNraXBUbzsJ CS8qIFJvdyBQYXR0ZXJuIEFGVEVSIE1BVENIIFNLSVAgdHlwZSAqLworCWJvb2wJCWluaXRpYWw7 CQkvKiB0cnVlIGlmIDxyb3cgcGF0dGVybiBpbml0aWFsIG9yIHNlZWs+IGlzCisJCQkJCQkJCSAq IGluaXRpYWwgKi8KKwlMaXN0CSAgICpycFBhdHRlcm5zOwkJLyogUEFUVEVSTiB2YXJpYWJsZXMg KGxpc3Qgb2YgQV9FeHByKSAqLworCUxpc3QJICAgKnJwRGVmczsJCQkvKiByb3cgcGF0dGVybiBk ZWZpbml0aW9ucyBjbGF1c2UgKGxpc3Qgb2YKKwkJCQkJCQkJICogUmVzVGFyZ2V0KSAqLworfSBS UENvbW1vblN5bnRheDsKKwogLyoKICAqIFdpbmRvd0RlZiAtIHJhdyByZXByZXNlbnRhdGlvbiBv ZiBXSU5ET1cgYW5kIE9WRVIgY2xhdXNlcwogICoKQEAgLTU5MSw2ICs2MTYsNyBAQCB0eXBlZGVm IHN0cnVjdCBXaW5kb3dEZWYKIAljaGFyCSAgICpyZWZuYW1lOwkJLyogcmVmZXJlbmNlZCB3aW5k b3cgbmFtZSwgaWYgYW55ICovCiAJTGlzdAkgICAqcGFydGl0aW9uQ2xhdXNlOwkvKiBQQVJUSVRJ T04gQlkgZXhwcmVzc2lvbiBsaXN0ICovCiAJTGlzdAkgICAqb3JkZXJDbGF1c2U7CS8qIE9SREVS IEJZIChsaXN0IG9mIFNvcnRCeSkgKi8KKwlSUENvbW1vblN5bnRheCAqcnBDb21tb25TeW50YXg7 IC8qIHJvdyBwYXR0ZXJuIGNvbW1vbiBzeW50YXggKi8KIAlpbnQJCQlmcmFtZU9wdGlvbnM7CS8q IGZyYW1lX2NsYXVzZSBvcHRpb25zLCBzZWUgYmVsb3cgKi8KIAlOb2RlCSAgICpzdGFydE9mZnNl dDsJLyogZXhwcmVzc2lvbiBmb3Igc3RhcnRpbmcgYm91bmQsIGlmIGFueSAqLwogCU5vZGUJICAg KmVuZE9mZnNldDsJCS8qIGV4cHJlc3Npb24gZm9yIGVuZGluZyBib3VuZCwgaWYgYW55ICovCkBA IC0xNTU5LDYgKzE1ODUsMTEgQEAgdHlwZWRlZiBzdHJ1Y3QgR3JvdXBpbmdTZXQKICAqIHRoZSBv cmRlckNsYXVzZSBtaWdodCBvciBtaWdodCBub3QgYmUgY29waWVkIChzZWUgY29waWVkT3JkZXIp OyB0aGUgZnJhbWluZwogICogb3B0aW9ucyBhcmUgbmV2ZXIgY29waWVkLCBwZXIgc3BlYy4KICAq CisgKiAiZGVmaW5lQ2xhdXNlIiBpcyBSb3cgUGF0dGVybiBSZWNvZ25pdGlvbiBERUZJTkUgY2xh dXNlIChsaXN0IG9mCisgKiBUYXJnZXRFbnRyeSkuIFRhcmdldEVudHJ5LnJlc25hbWUgcmVwcmVz ZW50cyByb3cgcGF0dGVybiBkZWZpbml0aW9uCisgKiB2YXJpYWJsZSBuYW1lLiAicGF0dGVyblZh cmlhYmxlIiBhbmQgInBhdHRlcm5SZWdleHAiIHJlcHJlc2VudHMgUEFUVEVSTgorICogY2xhdXNl LgorICoKICAqIFRoZSBpbmZvcm1hdGlvbiByZWxldmFudCBmb3IgdGhlIHF1ZXJ5IGp1bWJsaW5n IGlzIHRoZSBwYXJ0aXRpb24gY2xhdXNlCiAgKiB0eXBlIGFuZCBpdHMgYm91bmRzLgogICovCkBA IC0xNTg4LDYgKzE2MTksMjIgQEAgdHlwZWRlZiBzdHJ1Y3QgV2luZG93Q2xhdXNlCiAJSW5kZXgJ CXdpbnJlZjsJCQkvKiBJRCByZWZlcmVuY2VkIGJ5IHdpbmRvdyBmdW5jdGlvbnMgKi8KIAkvKiBk aWQgd2UgY29weSBvcmRlckNsYXVzZSBmcm9tIHJlZm5hbWU/ICovCiAJYm9vbAkJY29waWVkT3Jk ZXIgcGdfbm9kZV9hdHRyKHF1ZXJ5X2p1bWJsZV9pZ25vcmUpOworCS8qIFJvdyBQYXR0ZXJuIEFG VEVSIE1BQ0ggU0tJUCBjbGF1c2UgKi8KKwlSUFNraXBUbwlycFNraXBUbzsJCS8qIFJvdyBQYXR0 ZXJuIFNraXAgVG8gdHlwZSAqLworCWJvb2wJCWluaXRpYWw7CQkvKiB0cnVlIGlmIDxyb3cgcGF0 dGVybiBpbml0aWFsIG9yIHNlZWs+IGlzCisJCQkJCQkJCSAqIGluaXRpYWwgKi8KKwkvKiBSb3cg UGF0dGVybiBERUZJTkUgY2xhdXNlIChsaXN0IG9mIFRhcmdldEVudHJ5KSAqLworCUxpc3QJICAg KmRlZmluZUNsYXVzZTsKKwkvKiBSb3cgUGF0dGVybiBERUZJTkUgdmFyaWFibGUgaW5pdGlhbCBu YW1lcyAobGlzdCBvZiBTdHJpbmcpICovCisJTGlzdAkgICAqZGVmaW5lSW5pdGlhbDsKKwkvKiBS b3cgUGF0dGVybiBQQVRURVJOIHZhcmlhYmxlIG5hbWUgKGxpc3Qgb2YgU3RyaW5nKSAqLworCUxp c3QJICAgKnBhdHRlcm5WYXJpYWJsZTsKKworCS8qCisJICogUm93IFBhdHRlcm4gUEFUVEVSTiBy ZWd1bGFyIGV4cHJlc3Npb24gcXVhbnRpZmllciAoJysnIG9yICcnLiBsaXN0IG9mCisJICogU3Ry aW5nKQorCSAqLworCUxpc3QJICAgKnBhdHRlcm5SZWdleHA7CiB9IFdpbmRvd0NsYXVzZTsKIAog LyoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3BhcnNlci9rd2xpc3QuaCBiL3NyYy9pbmNsdWRl L3BhcnNlci9rd2xpc3QuaAppbmRleCBhNGFmM2Y3MTdhMS4uNjg5MTFkOGU4MzUgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL3BhcnNlci9rd2xpc3QuaAorKysgYi9zcmMvaW5jbHVkZS9wYXJzZXIv a3dsaXN0LmgKQEAgLTEyOSw2ICsxMjksNyBAQCBQR19LRVlXT1JEKCJkZWZhdWx0IiwgREVGQVVM VCwgUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoImRlZmF1bHRzIiwg REVGQVVMVFMsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoImRl ZmVycmFibGUiLCBERUZFUlJBQkxFLCBSRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdf S0VZV09SRCgiZGVmZXJyZWQiLCBERUZFUlJFRCwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xB QkVMKQorUEdfS0VZV09SRCgiZGVmaW5lIiwgREVGSU5FLCBSRVNFUlZFRF9LRVlXT1JELCBCQVJF X0xBQkVMKQogUEdfS0VZV09SRCgiZGVmaW5lciIsIERFRklORVIsIFVOUkVTRVJWRURfS0VZV09S RCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoImRlbGV0ZSIsIERFTEVURV9QLCBVTlJFU0VSVkVE X0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJkZWxpbWl0ZXIiLCBERUxJTUlURVIs IFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKQEAgLTIxNiw2ICsyMTcsNyBAQCBQR19L RVlXT1JEKCJpbmRleCIsIElOREVYLCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQ R19LRVlXT1JEKCJpbmRleGVzIiwgSU5ERVhFUywgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xB QkVMKQogUEdfS0VZV09SRCgiaW5oZXJpdCIsIElOSEVSSVQsIFVOUkVTRVJWRURfS0VZV09SRCwg QkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoImluaGVyaXRzIiwgSU5IRVJJVFMsIFVOUkVTRVJWRURf S0VZV09SRCwgQkFSRV9MQUJFTCkKK1BHX0tFWVdPUkQoImluaXRpYWwiLCBJTklUSUFMLCBVTlJF U0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJpbml0aWFsbHkiLCBJTklU SUFMTFksIFJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJpbmxpbmUi LCBJTkxJTkVfUCwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgi aW5uZXIiLCBJTk5FUl9QLCBUWVBFX0ZVTkNfTkFNRV9LRVlXT1JELCBCQVJFX0xBQkVMKQpAQCAt MzM5LDcgKzM0MSw5IEBAIFBHX0tFWVdPUkQoInBhcnRpYWwiLCBQQVJUSUFMLCBVTlJFU0VSVkVE X0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJwYXJ0aXRpb24iLCBQQVJUSVRJT04s IFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoInBhc3NpbmciLCBQ QVNTSU5HLCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJwYXNz d29yZCIsIFBBU1NXT1JELCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCitQR19LRVlX T1JEKCJwYXN0IiwgUEFTVCwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZ V09SRCgicGF0aCIsIFBBVEgsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKK1BHX0tF WVdPUkQoInBhdHRlcm4iLCBQQVRURVJOX1AsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJF TCkKIFBHX0tFWVdPUkQoInBlcmlvZCIsIFBFUklPRCwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJF X0xBQkVMKQogUEdfS0VZV09SRCgicGxhY2luZyIsIFBMQUNJTkcsIFJFU0VSVkVEX0tFWVdPUkQs IEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJwbGFuIiwgUExBTiwgVU5SRVNFUlZFRF9LRVlXT1JE LCBCQVJFX0xBQkVMKQpAQCAtNDAxLDYgKzQwNSw3IEBAIFBHX0tFWVdPUkQoInNjcm9sbCIsIFND Uk9MTCwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgic2VhcmNo IiwgU0VBUkNILCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJz ZWNvbmQiLCBTRUNPTkRfUCwgVU5SRVNFUlZFRF9LRVlXT1JELCBBU19MQUJFTCkKIFBHX0tFWVdP UkQoInNlY3VyaXR5IiwgU0VDVVJJVFksIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkK K1BHX0tFWVdPUkQoInNlZWsiLCBTRUVLLCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwp CiBQR19LRVlXT1JEKCJzZWxlY3QiLCBTRUxFQ1QsIFJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFC RUwpCiBQR19LRVlXT1JEKCJzZXF1ZW5jZSIsIFNFUVVFTkNFLCBVTlJFU0VSVkVEX0tFWVdPUkQs IEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJzZXF1ZW5jZXMiLCBTRVFVRU5DRVMsIFVOUkVTRVJW RURfS0VZV09SRCwgQkFSRV9MQUJFTCkKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3BhcnNlci9w YXJzZV9ub2RlLmggYi9zcmMvaW5jbHVkZS9wYXJzZXIvcGFyc2Vfbm9kZS5oCmluZGV4IGY3ZDA3 Yzg0NTQyLi5kMjg2YThiNzc4MyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcGFyc2VyL3BhcnNl X25vZGUuaAorKysgYi9zcmMvaW5jbHVkZS9wYXJzZXIvcGFyc2Vfbm9kZS5oCkBAIC01MSw2ICs1 MSw3IEBAIHR5cGVkZWYgZW51bSBQYXJzZUV4cHJLaW5kCiAJRVhQUl9LSU5EX1dJTkRPV19GUkFN RV9SQU5HRSwJLyogd2luZG93IGZyYW1lIGNsYXVzZSB3aXRoIFJBTkdFICovCiAJRVhQUl9LSU5E X1dJTkRPV19GUkFNRV9ST1dTLAkvKiB3aW5kb3cgZnJhbWUgY2xhdXNlIHdpdGggUk9XUyAqLwog CUVYUFJfS0lORF9XSU5ET1dfRlJBTUVfR1JPVVBTLAkvKiB3aW5kb3cgZnJhbWUgY2xhdXNlIHdp dGggR1JPVVBTICovCisJRVhQUl9LSU5EX1JQUl9ERUZJTkUsCQkvKiBERUZJTkUgKi8KIAlFWFBS X0tJTkRfU0VMRUNUX1RBUkdFVCwJLyogU0VMRUNUIHRhcmdldCBsaXN0IGl0ZW0gKi8KIAlFWFBS X0tJTkRfSU5TRVJUX1RBUkdFVCwJLyogSU5TRVJUIHRhcmdldCBsaXN0IGl0ZW0gKi8KIAlFWFBS X0tJTkRfVVBEQVRFX1NPVVJDRSwJLyogVVBEQVRFIGFzc2lnbm1lbnQgc291cmNlIGl0ZW0gKi8K LS0gCjIuNDMuMAoK ----Next_Part(Wed_Sep_24_19_35_23_2025_264)-- Content-Type: Application/Octet-Stream Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="v33-0002-Row-pattern-recognition-patch-parse-analysis.patch" RnJvbSBhZDI3ODAyMGNjNzYxYThhN2IyOTEwZjBjZjUxNDgyMmU2YjczZTcxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUYXRzdW8gSXNoaWkgPGlzaGlpQHBvc3RncmVzcWwub3JnPgpE YXRlOiBXZWQsIDI0IFNlcCAyMDI1IDE5OjE4OjM3ICswOTAwClN1YmplY3Q6IFtQQVRDSCB2MzMg Mi84XSBSb3cgcGF0dGVybiByZWNvZ25pdGlvbiBwYXRjaCAocGFyc2UvYW5hbHlzaXMpLgoKLS0t CiBzcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfYWdnLmMgICAgfCAgIDcgKwogc3JjL2JhY2tlbmQv cGFyc2VyL3BhcnNlX2NsYXVzZS5jIHwgMjcwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysr LQogc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX2V4cHIuYyAgIHwgICA2ICsKIHNyYy9iYWNrZW5k L3BhcnNlci9wYXJzZV9mdW5jLmMgICB8ICAgMyArCiA0IGZpbGVzIGNoYW5nZWQsIDI4NSBpbnNl cnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcGFyc2Vy L3BhcnNlX2FnZy5jIGIvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX2FnZy5jCmluZGV4IDMyNTRj ODNjYzZjLi5lODIwYWRmOTI2NyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNl X2FnZy5jCisrKyBiL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9hZ2cuYwpAQCAtNTgwLDYgKzU4 MCwxMCBAQCBjaGVja19hZ2dsZXZlbHNfYW5kX2NvbnN0cmFpbnRzKFBhcnNlU3RhdGUgKnBzdGF0 ZSwgTm9kZSAqZXhwcikKIAkJCWVycmtpbmQgPSB0cnVlOwogCQkJYnJlYWs7CiAKKwkJY2FzZSBF WFBSX0tJTkRfUlBSX0RFRklORToKKwkJCWVycmtpbmQgPSB0cnVlOworCQkJYnJlYWs7CisKIAkJ CS8qCiAJCQkgKiBUaGVyZSBpcyBpbnRlbnRpb25hbGx5IG5vIGRlZmF1bHQ6IGNhc2UgaGVyZSwg c28gdGhhdCB0aGUKIAkJCSAqIGNvbXBpbGVyIHdpbGwgd2FybiBpZiB3ZSBhZGQgYSBuZXcgUGFy c2VFeHByS2luZCB3aXRob3V0CkBAIC05OTYsNiArMTAwMCw5IEBAIHRyYW5zZm9ybVdpbmRvd0Z1 bmNDYWxsKFBhcnNlU3RhdGUgKnBzdGF0ZSwgV2luZG93RnVuYyAqd2Z1bmMsCiAJCWNhc2UgRVhQ Ul9LSU5EX0NZQ0xFX01BUks6CiAJCQllcnJraW5kID0gdHJ1ZTsKIAkJCWJyZWFrOworCQljYXNl IEVYUFJfS0lORF9SUFJfREVGSU5FOgorCQkJZXJya2luZCA9IHRydWU7CisJCQlicmVhazsKIAog CQkJLyoKIAkJCSAqIFRoZXJlIGlzIGludGVudGlvbmFsbHkgbm8gZGVmYXVsdDogY2FzZSBoZXJl LCBzbyB0aGF0IHRoZQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX2NsYXVz ZS5jIGIvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX2NsYXVzZS5jCmluZGV4IDlmMjBhNzBjZTEz Li5hOTRmZTVmM2Y1NyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX2NsYXVz ZS5jCisrKyBiL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9jbGF1c2UuYwpAQCAtOTYsNyArOTYs MTIgQEAgc3RhdGljIFdpbmRvd0NsYXVzZSAqZmluZFdpbmRvd0NsYXVzZShMaXN0ICp3Y2xpc3Qs IGNvbnN0IGNoYXIgKm5hbWUpOwogc3RhdGljIE5vZGUgKnRyYW5zZm9ybUZyYW1lT2Zmc2V0KFBh cnNlU3RhdGUgKnBzdGF0ZSwgaW50IGZyYW1lT3B0aW9ucywKIAkJCQkJCQkJICBPaWQgcmFuZ2Vv cGZhbWlseSwgT2lkIHJhbmdlb3BjaW50eXBlLCBPaWQgKmluUmFuZ2VGdW5jLAogCQkJCQkJCQkg IE5vZGUgKmNsYXVzZSk7Ci0KK3N0YXRpYyB2b2lkIHRyYW5zZm9ybVJQUihQYXJzZVN0YXRlICpw c3RhdGUsIFdpbmRvd0NsYXVzZSAqd2MsIFdpbmRvd0RlZiAqd2luZGVmLAorCQkJCQkJIExpc3Qg Kip0YXJnZXRsaXN0KTsKK3N0YXRpYyBMaXN0ICp0cmFuc2Zvcm1EZWZpbmVDbGF1c2UoUGFyc2VT dGF0ZSAqcHN0YXRlLCBXaW5kb3dDbGF1c2UgKndjLCBXaW5kb3dEZWYgKndpbmRlZiwKKwkJCQkJ CQkJICAgTGlzdCAqKnRhcmdldGxpc3QpOworc3RhdGljIHZvaWQgdHJhbnNmb3JtUGF0dGVybkNs YXVzZShQYXJzZVN0YXRlICpwc3RhdGUsIFdpbmRvd0NsYXVzZSAqd2MsCisJCQkJCQkJCSAgIFdp bmRvd0RlZiAqd2luZGVmKTsKIAogLyoKICAqIHRyYW5zZm9ybUZyb21DbGF1c2UgLQpAQCAtMjk1 Niw2ICsyOTYxLDEwIEBAIHRyYW5zZm9ybVdpbmRvd0RlZmluaXRpb25zKFBhcnNlU3RhdGUgKnBz dGF0ZSwKIAkJCQkJCQkJCQkJIHJhbmdlb3BmYW1pbHksIHJhbmdlb3BjaW50eXBlLAogCQkJCQkJ CQkJCQkgJndjLT5lbmRJblJhbmdlRnVuYywKIAkJCQkJCQkJCQkJIHdpbmRlZi0+ZW5kT2Zmc2V0 KTsKKworCQkvKiBQcm9jZXNzIFJvdyBQYXR0ZXJuIFJlY29nbml0aW9uIHJlbGF0ZWQgY2xhdXNl cyAqLworCQl0cmFuc2Zvcm1SUFIocHN0YXRlLCB3Yywgd2luZGVmLCB0YXJnZXRsaXN0KTsKKwog CQl3Yy0+d2lucmVmID0gd2lucmVmOwogCiAJCXJlc3VsdCA9IGxhcHBlbmQocmVzdWx0LCB3Yyk7 CkBAIC0zODIzLDMgKzM4MzIsMjYyIEBAIHRyYW5zZm9ybUZyYW1lT2Zmc2V0KFBhcnNlU3RhdGUg KnBzdGF0ZSwgaW50IGZyYW1lT3B0aW9ucywKIAogCXJldHVybiBub2RlOwogfQorCisvKgorICog dHJhbnNmb3JtUlBSCisgKgkJUHJvY2VzcyBSb3cgUGF0dGVybiBSZWNvZ25pdGlvbiByZWxhdGVk IGNsYXVzZXMKKyAqLworc3RhdGljIHZvaWQKK3RyYW5zZm9ybVJQUihQYXJzZVN0YXRlICpwc3Rh dGUsIFdpbmRvd0NsYXVzZSAqd2MsIFdpbmRvd0RlZiAqd2luZGVmLAorCQkJIExpc3QgKip0YXJn ZXRsaXN0KQoreworCS8qCisJICogV2luZG93IGRlZmluaXRpb24gZXhpc3RzPworCSAqLworCWlm ICh3aW5kZWYgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBSb3cgUGF0dGVybiBDb21t b24gU3ludGF4IGNsYXVzZSBleGlzdHM/CisJICovCisJaWYgKHdpbmRlZi0+cnBDb21tb25TeW50 YXggPT0gTlVMTCkKKwkJcmV0dXJuOworCisJLyogQ2hlY2sgRnJhbWUgb3B0aW9uLiBGcmFtZSBt dXN0IHN0YXJ0IGF0IGN1cnJlbnQgcm93ICovCisJaWYgKCh3Yy0+ZnJhbWVPcHRpb25zICYgRlJB TUVPUFRJT05fU1RBUlRfQ1VSUkVOVF9ST1cpID09IDApCisJCWVyZXBvcnQoRVJST1IsCisJCQkJ KGVycmNvZGUoRVJSQ09ERV9TWU5UQVhfRVJST1IpLAorCQkJCSBlcnJtc2coIkZSQU1FIG11c3Qg c3RhcnQgYXQgY3VycmVudCByb3cgd2hlbiByb3cgcGF0dHRlcm4gcmVjb2duaXRpb24gaXMgdXNl ZCIpKSk7CisKKwkvKiBUcmFuc2Zvcm0gQUZURVIgTUFDSCBTS0lQIFRPIGNsYXVzZSAqLworCXdj LT5ycFNraXBUbyA9IHdpbmRlZi0+cnBDb21tb25TeW50YXgtPnJwU2tpcFRvOworCisJLyogVHJh bnNmb3JtIFNFRUsgb3IgSU5JVElBTCBjbGF1c2UgKi8KKwl3Yy0+aW5pdGlhbCA9IHdpbmRlZi0+ cnBDb21tb25TeW50YXgtPmluaXRpYWw7CisKKwkvKiBUcmFuc2Zvcm0gREVGSU5FIGNsYXVzZSBp bnRvIGxpc3Qgb2YgVGFyZ2V0RW50cnkncyAqLworCXdjLT5kZWZpbmVDbGF1c2UgPSB0cmFuc2Zv cm1EZWZpbmVDbGF1c2UocHN0YXRlLCB3Yywgd2luZGVmLCB0YXJnZXRsaXN0KTsKKworCS8qIENo ZWNrIFBBVFRFUk4gY2xhdXNlIGFuZCBjb3B5IHRvIHBhdHRlcm5DbGF1c2UgKi8KKwl0cmFuc2Zv cm1QYXR0ZXJuQ2xhdXNlKHBzdGF0ZSwgd2MsIHdpbmRlZik7Cit9CisKKy8qCisgKiB0cmFuc2Zv cm1EZWZpbmVDbGF1c2UKKyAqCQlQcm9jZXNzIERFRklORSBjbGF1c2UgYW5kIHRyYW5zZm9ybSBS ZXNUYXJnZXQgaW50byBsaXN0IG9mCisgKgkJVGFyZ2V0RW50cnkuCisgKgorICogWFhYIHdlIG9u bHkgc3VwcG9ydCBjb2x1bW4gcmVmZXJlbmNlIGluIHJvdyBwYXR0ZXJuIGRlZmluaXRpb24gc2Vh cmNoCisgKiBjb25kaXRpb24sIGUuZy4gInByaWNlIi4gPHJvdyBwYXR0ZXJuIGRlZmluaXRpb24g dmFyaWFibGUgbmFtZT4uPGNvbHVtbgorICogcmVmZXJlbmNlPiBpcyBub3Qgc3VwcG9ydGVkLCBl LmcuICJBLnByaWNlIi4KKyAqLworc3RhdGljIExpc3QgKgordHJhbnNmb3JtRGVmaW5lQ2xhdXNl KFBhcnNlU3RhdGUgKnBzdGF0ZSwgV2luZG93Q2xhdXNlICp3YywgV2luZG93RGVmICp3aW5kZWYs CisJCQkJCSAgTGlzdCAqKnRhcmdldGxpc3QpCit7CisJLyogREVGSU5FIHZhcmlhYmxlIG5hbWUg aW5pdGlhbHMgKi8KKwlzdGF0aWMgY2hhciAqZGVmaW5lVmFyaWFibGVJbml0aWFscyA9ICJhYmNk ZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiI7CisKKwlMaXN0Q2VsbCAgICpsYywKKwkJCSAgICpsOwor CVJlc1RhcmdldCAgKnJlc3RhcmdldCwKKwkJCSAgICpyOworCUxpc3QJICAgKnJlc3RhcmdldHM7 CisJTGlzdAkgICAqZGVmaW5lQ2xhdXNlOworCWNoYXIJICAgKm5hbWU7CisJaW50CQkJaW5pdGlh bExlbjsKKwlpbnQJCQlpOworCisJLyoKKwkgKiBJZiBSb3cgRGVmaW5pdGlvbiBDb21tb24gU3lu dGF4IGV4aXN0cywgREVGSU5FIGNsYXVzZSBtdXN0IGV4aXN0LiAodGhlCisJICogcmF3IHBhcnNl ciBzaG91bGQgaGF2ZSBhbHJlYWR5IGNoZWNrZWQgaXQuKQorCSAqLworCUFzc2VydCh3aW5kZWYt PnJwQ29tbW9uU3ludGF4LT5ycERlZnMgIT0gTlVMTCk7CisKKwkvKgorCSAqIENoZWNrIGFuZCBh ZGQgIkEgQVMgQSBJUyBUUlVFIiBpZiBwYXR0ZXJuIHZhcmlhYmxlIGlzIG1pc3NpbmcgaW4gREVG SU5FCisJICogcGVyIHRoZSBTUUwgc3RhbmRhcmQuCisJICovCisJcmVzdGFyZ2V0cyA9IE5JTDsK Kwlmb3JlYWNoKGxjLCB3aW5kZWYtPnJwQ29tbW9uU3ludGF4LT5ycFBhdHRlcm5zKQorCXsKKwkJ QV9FeHByCSAgICphOworCQlib29sCQlmb3VuZCA9IGZhbHNlOworCisJCWlmICghSXNBKGxmaXJz dChsYyksIEFfRXhwcikpCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQllcnJtc2coIm5vZGUgdHlw ZSBpcyBub3QgQV9FeHByIikpOworCisJCWEgPSAoQV9FeHByICopIGxmaXJzdChsYyk7CisJCW5h bWUgPSBzdHJWYWwoYS0+bGV4cHIpOworCisJCWZvcmVhY2gobCwgd2luZGVmLT5ycENvbW1vblN5 bnRheC0+cnBEZWZzKQorCQl7CisJCQlyZXN0YXJnZXQgPSAoUmVzVGFyZ2V0ICopIGxmaXJzdChs KTsKKworCQkJaWYgKCFzdHJjbXAocmVzdGFyZ2V0LT5uYW1lLCBuYW1lKSkKKwkJCXsKKwkJCQlm b3VuZCA9IHRydWU7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlpZiAoIWZvdW5kKQorCQl7 CisJCQkvKgorCQkJICogIm5hbWUiIGlzIG1pc3NpbmcuIFNvIGNyZWF0ZSAibmFtZSBBUyBuYW1l IElTIFRSVUUiIFJlc1RhcmdldAorCQkJICogbm9kZSBhbmQgYWRkIGl0IHRvIHRoZSB0ZW1wb3Jh cnkgbGlzdC4KKwkJCSAqLworCQkJQV9Db25zdCAgICAqbjsKKworCQkJcmVzdGFyZ2V0ID0gbWFr ZU5vZGUoUmVzVGFyZ2V0KTsKKwkJCW4gPSBtYWtlTm9kZShBX0NvbnN0KTsKKwkJCW4tPnZhbC5i b29sdmFsLnR5cGUgPSBUX0Jvb2xlYW47CisJCQluLT52YWwuYm9vbHZhbC5ib29sdmFsID0gdHJ1 ZTsKKwkJCW4tPmxvY2F0aW9uID0gLTE7CisJCQlyZXN0YXJnZXQtPm5hbWUgPSBwc3RyZHVwKG5h bWUpOworCQkJcmVzdGFyZ2V0LT5pbmRpcmVjdGlvbiA9IE5JTDsKKwkJCXJlc3RhcmdldC0+dmFs ID0gKE5vZGUgKikgbjsKKwkJCXJlc3RhcmdldC0+bG9jYXRpb24gPSAtMTsKKwkJCXJlc3Rhcmdl dHMgPSBsYXBwZW5kKChMaXN0ICopIHJlc3RhcmdldHMsIHJlc3RhcmdldCk7CisJCX0KKwl9CisK KwlpZiAobGlzdF9sZW5ndGgocmVzdGFyZ2V0cykgPj0gMSkKKwl7CisJCS8qIGFkZCBtaXNzaW5n IERFRklORXMgKi8KKwkJd2luZGVmLT5ycENvbW1vblN5bnRheC0+cnBEZWZzID0KKwkJCWxpc3Rf Y29uY2F0KHdpbmRlZi0+cnBDb21tb25TeW50YXgtPnJwRGVmcywgcmVzdGFyZ2V0cyk7CisJCWxp c3RfZnJlZShyZXN0YXJnZXRzKTsKKwl9CisKKwkvKgorCSAqIENoZWNrIGZvciBkdXBsaWNhdGUg cm93IHBhdHRlcm4gZGVmaW5pdGlvbiB2YXJpYWJsZXMuICBUaGUgc3RhbmRhcmQKKwkgKiByZXF1 aXJlcyB0aGF0IG5vIHR3byByb3cgcGF0dGVybiBkZWZpbml0aW9uIHZhcmlhYmxlIG5hbWVzIHNo YWxsIGJlCisJICogZXF1aXZhbGVudC4KKwkgKi8KKwlyZXN0YXJnZXRzID0gTklMOworCWZvcmVh Y2gobGMsIHdpbmRlZi0+cnBDb21tb25TeW50YXgtPnJwRGVmcykKKwl7CisJCXJlc3RhcmdldCA9 IChSZXNUYXJnZXQgKikgbGZpcnN0KGxjKTsKKwkJbmFtZSA9IHJlc3RhcmdldC0+bmFtZTsKKwor CQkvKgorCQkgKiBBZGQgREVGSU5FIGV4cHJlc3Npb24gKFJlc3RhcmdldC0+dmFsKSB0byB0aGUg dGFyZ2V0bGlzdCBhcyBhCisJCSAqIFRhcmdldEVudHJ5IGlmIGl0IGRvZXMgbm90IGV4aXN0IHll dC4gUGxhbm5lciB3aWxsIGFkZCB0aGUgY29sdW1uCisJCSAqIHJlZiB2YXIgbm9kZSB0byB0aGUg b3V0ZXIgcGxhbidzIHRhcmdldCBsaXN0IGxhdGVyIG9uLiBUaGlzIG1ha2VzCisJCSAqIERFRklO RSBleHByZXNzaW9uIGNvdWxkIGFjY2VzcyB0aGUgb3V0ZXIgdHVwbGUgd2hpbGUgZXZhbHVhdGlu ZworCQkgKiBQQVRURVJOLgorCQkgKgorCQkgKiBYWFg6IGFkZGluZyB3aG9sZSBleHByZXNzaW9u cyBvZiBERUZJTkUgdG8gdGhlIHBsYW4udGFyZ2V0bGlzdCBpcworCQkgKiBub3Qgc28gZ29vZCwg YmVjYXVzZSBpdCdzIG5vdCBuZWNlc3NhcnkgdG8gZXZhbHV0ZSB0aGUgZXhwcmVzc2lvbgorCQkg KiBpbiB0aGUgdGFyZ2V0IGxpc3Qgd2hpbGUgcnVubmluZyB0aGUgcGxhbi4gV2Ugc2hvdWxkIGV4 dHJhY3QgdGhlCisJCSAqIHZhciBub2RlcyBvbmx5IHRoZW4gYWRkIHRoZW0gdG8gdGhlIHBsYW4u dGFyZ2V0bGlzdC4KKwkJICovCisJCWZpbmRUYXJnZXRsaXN0RW50cnlTUUw5OShwc3RhdGUsIChO b2RlICopIHJlc3RhcmdldC0+dmFsLAorCQkJCQkJCQkgdGFyZ2V0bGlzdCwgRVhQUl9LSU5EX1JQ Ul9ERUZJTkUpOworCisJCS8qCisJCSAqIE1ha2Ugc3VyZSB0aGF0IHRoZSByb3cgcGF0dGVybiBk ZWZpbml0aW9uIHNlYXJjaCBjb25kaXRpb24gaXMgYQorCQkgKiBib29sZWFuIGV4cHJlc3Npb24u CisJCSAqLworCQl0cmFuc2Zvcm1XaGVyZUNsYXVzZShwc3RhdGUsIHJlc3RhcmdldC0+dmFsLAor CQkJCQkJCSBFWFBSX0tJTkRfUlBSX0RFRklORSwgIkRFRklORSIpOworCisJCWZvcmVhY2gobCwg cmVzdGFyZ2V0cykKKwkJeworCQkJY2hhcgkgICAqbjsKKworCQkJciA9IChSZXNUYXJnZXQgKikg bGZpcnN0KGwpOworCQkJbiA9IHItPm5hbWU7CisKKwkJCWlmICghc3RyY21wKG4sIG5hbWUpKQor CQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJDT0RFX1NZTlRBWF9FUlJPUiks CisJCQkJCQkgZXJybXNnKCJyb3cgcGF0dGVybiBkZWZpbml0aW9uIHZhcmlhYmxlIG5hbWUgXCIl c1wiIGFwcGVhcnMgbW9yZSB0aGFuIG9uY2UgaW4gREVGSU5FIGNsYXVzZSIsCisJCQkJCQkJCW5h bWUpLAorCQkJCQkJIHBhcnNlcl9lcnJwb3NpdGlvbihwc3RhdGUsIGV4cHJMb2NhdGlvbigoTm9k ZSAqKSByKSkpKTsKKwkJfQorCQlyZXN0YXJnZXRzID0gbGFwcGVuZChyZXN0YXJnZXRzLCByZXN0 YXJnZXQpOworCX0KKwlsaXN0X2ZyZWUocmVzdGFyZ2V0cyk7CisKKwkvKgorCSAqIENyZWF0ZSBs aXN0IG9mIHJvdyBwYXR0ZXJuIERFRklORSB2YXJpYWJsZSBuYW1lJ3MgaW5pdGlhbC4gV2UgYXNz aWduCisJICogW2Etel0gdG8gdGhlbSAodXAgdG8gMjYgdmFyaWFibGUgbmFtZXMgYXJlIGFsbG93 ZWQpLgorCSAqLworCXJlc3RhcmdldHMgPSBOSUw7CisJaSA9IDA7CisJaW5pdGlhbExlbiA9IHN0 cmxlbihkZWZpbmVWYXJpYWJsZUluaXRpYWxzKTsKKworCWZvcmVhY2gobGMsIHdpbmRlZi0+cnBD b21tb25TeW50YXgtPnJwRGVmcykKKwl7CisJCWNoYXIJCWluaXRpYWxbMl07CisKKwkJcmVzdGFy Z2V0ID0gKFJlc1RhcmdldCAqKSBsZmlyc3QobGMpOworCQluYW1lID0gcmVzdGFyZ2V0LT5uYW1l OworCisJCWlmIChpID49IGluaXRpYWxMZW4pCisJCXsKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJ CShlcnJjb2RlKEVSUkNPREVfU1lOVEFYX0VSUk9SKSwKKwkJCQkJIGVycm1zZygibnVtYmVyIG9m IHJvdyBwYXR0ZXJuIGRlZmluaXRpb24gdmFyaWFibGUgbmFtZXMgZXhjZWVkcyAlZCIsCisJCQkJ CQkJaW5pdGlhbExlbiksCisJCQkJCSBwYXJzZXJfZXJycG9zaXRpb24ocHN0YXRlLAorCQkJCQkJ CQkJCWV4cHJMb2NhdGlvbigoTm9kZSAqKSByZXN0YXJnZXQpKSkpOworCQl9CisJCWluaXRpYWxb MF0gPSBkZWZpbmVWYXJpYWJsZUluaXRpYWxzW2krK107CisJCWluaXRpYWxbMV0gPSAnXDAnOwor CQl3Yy0+ZGVmaW5lSW5pdGlhbCA9IGxhcHBlbmQod2MtPmRlZmluZUluaXRpYWwsCisJCQkJCQkJ CQltYWtlU3RyaW5nKHBzdHJkdXAoaW5pdGlhbCkpKTsKKwl9CisKKwlkZWZpbmVDbGF1c2UgPSB0 cmFuc2Zvcm1UYXJnZXRMaXN0KHBzdGF0ZSwgd2luZGVmLT5ycENvbW1vblN5bnRheC0+cnBEZWZz LAorCQkJCQkJCQkJICAgRVhQUl9LSU5EX1JQUl9ERUZJTkUpOworCisJLyogbWFyayBjb2x1bW4g b3JpZ2lucyAqLworCW1hcmtUYXJnZXRMaXN0T3JpZ2lucyhwc3RhdGUsIGRlZmluZUNsYXVzZSk7 CisKKwkvKiBtYXJrIGFsbCBub2RlcyBpbiB0aGUgREVGSU5FIGNsYXVzZSB0cmVlIHdpdGggY29s bGF0aW9uIGluZm9ybWF0aW9uICovCisJYXNzaWduX2V4cHJfY29sbGF0aW9ucyhwc3RhdGUsIChO b2RlICopIGRlZmluZUNsYXVzZSk7CisKKwlyZXR1cm4gZGVmaW5lQ2xhdXNlOworfQorCisvKgor ICogdHJhbnNmb3JtUGF0dGVybkNsYXVzZQorICoJCVByb2Nlc3MgUEFUVEVSTiBjbGF1c2UgYW5k IHJldHVybiBQQVRURVJOIGNsYXVzZSBpbiB0aGUgcmF3IHBhcnNlIHRyZWUKKyAqLworc3RhdGlj IHZvaWQKK3RyYW5zZm9ybVBhdHRlcm5DbGF1c2UoUGFyc2VTdGF0ZSAqcHN0YXRlLCBXaW5kb3dD bGF1c2UgKndjLAorCQkJCQkgICBXaW5kb3dEZWYgKndpbmRlZikKK3sKKwlMaXN0Q2VsbCAgICps YzsKKworCS8qCisJICogUm93IFBhdHRlcm4gQ29tbW9uIFN5bnRheCBjbGF1c2UgZXhpc3RzPwor CSAqLworCWlmICh3aW5kZWYtPnJwQ29tbW9uU3ludGF4ID09IE5VTEwpCisJCXJldHVybjsKKwor CXdjLT5wYXR0ZXJuVmFyaWFibGUgPSBOSUw7CisJd2MtPnBhdHRlcm5SZWdleHAgPSBOSUw7CisJ Zm9yZWFjaChsYywgd2luZGVmLT5ycENvbW1vblN5bnRheC0+cnBQYXR0ZXJucykKKwl7CisJCUFf RXhwcgkgICAqYTsKKwkJY2hhcgkgICAqbmFtZTsKKwkJY2hhcgkgICAqcmVnZXhwOworCisJCWlm ICghSXNBKGxmaXJzdChsYyksIEFfRXhwcikpCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQllcnJt c2coIm5vZGUgdHlwZSBpcyBub3QgQV9FeHByIikpOworCisJCWEgPSAoQV9FeHByICopIGxmaXJz dChsYyk7CisJCW5hbWUgPSBzdHJWYWwoYS0+bGV4cHIpOworCisJCXdjLT5wYXR0ZXJuVmFyaWFi bGUgPSBsYXBwZW5kKHdjLT5wYXR0ZXJuVmFyaWFibGUsIG1ha2VTdHJpbmcocHN0cmR1cChuYW1l KSkpOworCQlyZWdleHAgPSBzdHJWYWwobGZpcnN0KGxpc3RfaGVhZChhLT5uYW1lKSkpOworCisJ CXdjLT5wYXR0ZXJuUmVnZXhwID0gbGFwcGVuZCh3Yy0+cGF0dGVyblJlZ2V4cCwgbWFrZVN0cmlu Zyhwc3RyZHVwKHJlZ2V4cCkpKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wYXJz ZXIvcGFyc2VfZXhwci5jIGIvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX2V4cHIuYwppbmRleCBl MTk3OWE4MGMxOS4uNmM0ZGUyMGYxYzAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3BhcnNlci9w YXJzZV9leHByLmMKKysrIGIvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX2V4cHIuYwpAQCAtNTc0 LDYgKzU3NCw3IEBAIHRyYW5zZm9ybUNvbHVtblJlZihQYXJzZVN0YXRlICpwc3RhdGUsIENvbHVt blJlZiAqY3JlZikKIAkJY2FzZSBFWFBSX0tJTkRfQ09QWV9XSEVSRToKIAkJY2FzZSBFWFBSX0tJ TkRfR0VORVJBVEVEX0NPTFVNTjoKIAkJY2FzZSBFWFBSX0tJTkRfQ1lDTEVfTUFSSzoKKwkJY2Fz ZSBFWFBSX0tJTkRfUlBSX0RFRklORToKIAkJCS8qIG9rYXkgKi8KIAkJCWJyZWFrOwogCkBAIC0x ODU5LDYgKzE4NjAsOSBAQCB0cmFuc2Zvcm1TdWJMaW5rKFBhcnNlU3RhdGUgKnBzdGF0ZSwgU3Vi TGluayAqc3VibGluaykKIAkJY2FzZSBFWFBSX0tJTkRfR0VORVJBVEVEX0NPTFVNTjoKIAkJCWVy ciA9IF8oImNhbm5vdCB1c2Ugc3VicXVlcnkgaW4gY29sdW1uIGdlbmVyYXRpb24gZXhwcmVzc2lv biIpOwogCQkJYnJlYWs7CisJCWNhc2UgRVhQUl9LSU5EX1JQUl9ERUZJTkU6CisJCQllcnIgPSBf KCJjYW5ub3QgdXNlIHN1YnF1ZXJ5IGluIERFRklORSBleHByZXNzaW9uIik7CisJCQlicmVhazsK IAogCQkJLyoKIAkJCSAqIFRoZXJlIGlzIGludGVudGlvbmFsbHkgbm8gZGVmYXVsdDogY2FzZSBo ZXJlLCBzbyB0aGF0IHRoZQpAQCAtMzIxOCw2ICszMjIyLDggQEAgUGFyc2VFeHByS2luZE5hbWUo UGFyc2VFeHByS2luZCBleHByS2luZCkKIAkJCXJldHVybiAiR0VORVJBVEVEIEFTIjsKIAkJY2Fz ZSBFWFBSX0tJTkRfQ1lDTEVfTUFSSzoKIAkJCXJldHVybiAiQ1lDTEUiOworCQljYXNlIEVYUFJf S0lORF9SUFJfREVGSU5FOgorCQkJcmV0dXJuICJERUZJTkUiOwogCiAJCQkvKgogCQkJICogVGhl cmUgaXMgaW50ZW50aW9uYWxseSBubyBkZWZhdWx0OiBjYXNlIGhlcmUsIHNvIHRoYXQgdGhlCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfZnVuYy5jIGIvc3JjL2JhY2tlbmQv cGFyc2VyL3BhcnNlX2Z1bmMuYwppbmRleCBjNDMwMjBhNzY5ZC4uYjZlYmUwZmRmY2UgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9mdW5jLmMKKysrIGIvc3JjL2JhY2tlbmQv cGFyc2VyL3BhcnNlX2Z1bmMuYwpAQCAtMjc3NCw2ICsyNzc0LDkgQEAgY2hlY2tfc3JmX2NhbGxf cGxhY2VtZW50KFBhcnNlU3RhdGUgKnBzdGF0ZSwgTm9kZSAqbGFzdF9zcmYsIGludCBsb2NhdGlv bikKIAkJY2FzZSBFWFBSX0tJTkRfQ1lDTEVfTUFSSzoKIAkJCWVycmtpbmQgPSB0cnVlOwogCQkJ YnJlYWs7CisJCWNhc2UgRVhQUl9LSU5EX1JQUl9ERUZJTkU6CisJCQllcnJraW5kID0gdHJ1ZTsK KwkJCWJyZWFrOwogCiAJCQkvKgogCQkJICogVGhlcmUgaXMgaW50ZW50aW9uYWxseSBubyBkZWZh dWx0OiBjYXNlIGhlcmUsIHNvIHRoYXQgdGhlCi0tIAoyLjQzLjAKCg== ----Next_Part(Wed_Sep_24_19_35_23_2025_264)-- Content-Type: Application/Octet-Stream Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="v33-0003-Row-pattern-recognition-patch-rewriter.patch" RnJvbSAzOWNjZTNjM2IwNzczOTIzNTNkMWJmNTRmOWQ3NWIxZTY2YzRlNTcyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUYXRzdW8gSXNoaWkgPGlzaGlpQHBvc3RncmVzcWwub3JnPgpE YXRlOiBXZWQsIDI0IFNlcCAyMDI1IDE5OjE4OjM3ICswOTAwClN1YmplY3Q6IFtQQVRDSCB2MzMg My84XSBSb3cgcGF0dGVybiByZWNvZ25pdGlvbiBwYXRjaCAocmV3cml0ZXIpLgoKLS0tCiBzcmMv YmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMgfCAxMTIgKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrCiAxIGZpbGUgY2hhbmdlZCwgMTEyIGluc2VydGlvbnMoKykKCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMgYi9zcmMvYmFja2VuZC91dGlscy9h ZHQvcnVsZXV0aWxzLmMKaW5kZXggMDQwOGE5NTk0MWQuLjA1ZmM0OTExNTMxIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRp bHMvYWR0L3J1bGV1dGlscy5jCkBAIC00MzgsNiArNDM4LDEwIEBAIHN0YXRpYyB2b2lkIGdldF9y dWxlX2dyb3VwaW5nc2V0KEdyb3VwaW5nU2V0ICpnc2V0LCBMaXN0ICp0YXJnZXRsaXN0LAogCQkJ CQkJCQkgYm9vbCBvbWl0X3BhcmVucywgZGVwYXJzZV9jb250ZXh0ICpjb250ZXh0KTsKIHN0YXRp YyB2b2lkIGdldF9ydWxlX29yZGVyYnkoTGlzdCAqb3JkZXJMaXN0LCBMaXN0ICp0YXJnZXRMaXN0 LAogCQkJCQkJCSBib29sIGZvcmNlX2NvbG5vLCBkZXBhcnNlX2NvbnRleHQgKmNvbnRleHQpOwor c3RhdGljIHZvaWQgZ2V0X3J1bGVfcGF0dGVybihMaXN0ICpwYXR0ZXJuVmFyaWFibGUsIExpc3Qg KnBhdHRlcm5SZWdleHAsCisJCQkJCQkJIGJvb2wgZm9yY2VfY29sbm8sIGRlcGFyc2VfY29udGV4 dCAqY29udGV4dCk7CitzdGF0aWMgdm9pZCBnZXRfcnVsZV9kZWZpbmUoTGlzdCAqZGVmaW5lQ2xh dXNlLCBMaXN0ICpwYXR0ZXJuVmFyaWFibGVzLAorCQkJCQkJCWJvb2wgZm9yY2VfY29sbm8sIGRl cGFyc2VfY29udGV4dCAqY29udGV4dCk7CiBzdGF0aWMgdm9pZCBnZXRfcnVsZV93aW5kb3djbGF1 c2UoUXVlcnkgKnF1ZXJ5LCBkZXBhcnNlX2NvbnRleHQgKmNvbnRleHQpOwogc3RhdGljIHZvaWQg Z2V0X3J1bGVfd2luZG93c3BlYyhXaW5kb3dDbGF1c2UgKndjLCBMaXN0ICp0YXJnZXRMaXN0LAog CQkJCQkJCQlkZXBhcnNlX2NvbnRleHQgKmNvbnRleHQpOwpAQCAtNjczOSw2ICs2NzQzLDY3IEBA IGdldF9ydWxlX29yZGVyYnkoTGlzdCAqb3JkZXJMaXN0LCBMaXN0ICp0YXJnZXRMaXN0LAogCX0K IH0KIAorLyoKKyAqIERpc3BsYXkgYSBQQVRURVJOIGNsYXVzZS4KKyAqLworc3RhdGljIHZvaWQK K2dldF9ydWxlX3BhdHRlcm4oTGlzdCAqcGF0dGVyblZhcmlhYmxlLCBMaXN0ICpwYXR0ZXJuUmVn ZXhwLAorCQkJCSBib29sIGZvcmNlX2NvbG5vLCBkZXBhcnNlX2NvbnRleHQgKmNvbnRleHQpCit7 CisJU3RyaW5nSW5mbwlidWYgPSBjb250ZXh0LT5idWY7CisJY29uc3QgY2hhciAqc2VwOworCUxp c3RDZWxsICAgKmxjX3ZhciwKKwkJCSAgICpsY19yZWcgPSBsaXN0X2hlYWQocGF0dGVyblJlZ2V4 cCk7CisKKwlzZXAgPSAiIjsKKwlhcHBlbmRTdHJpbmdJbmZvQ2hhcihidWYsICcoJyk7CisJZm9y ZWFjaChsY192YXIsIHBhdHRlcm5WYXJpYWJsZSkKKwl7CisJCWNoYXIJICAgKnZhcmlhYmxlID0g c3RyVmFsKChTdHJpbmcgKikgbGZpcnN0KGxjX3ZhcikpOworCQljaGFyCSAgICpyZWdleHAgPSBO VUxMOworCisJCWlmIChsY19yZWcgIT0gTlVMTCkKKwkJeworCQkJcmVnZXhwID0gc3RyVmFsKChT dHJpbmcgKikgbGZpcnN0KGxjX3JlZykpOworCisJCQlsY19yZWcgPSBsbmV4dChwYXR0ZXJuUmVn ZXhwLCBsY19yZWcpOworCQl9CisKKwkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIlcyVzIiwgc2Vw LCB2YXJpYWJsZSk7CisJCWlmIChyZWdleHAgIT1OVUxMKQorCQkJYXBwZW5kU3RyaW5nSW5mb1N0 cmluZyhidWYsIHJlZ2V4cCk7CisKKwkJc2VwID0gIiAiOworCX0KKwlhcHBlbmRTdHJpbmdJbmZv Q2hhcihidWYsICcpJyk7Cit9CisKKy8qCisgKiBEaXNwbGF5IGEgREVGSU5FIGNsYXVzZS4KKyAq Lworc3RhdGljIHZvaWQKK2dldF9ydWxlX2RlZmluZShMaXN0ICpkZWZpbmVDbGF1c2UsIExpc3Qg KnBhdHRlcm5WYXJpYWJsZXMsCisJCQkJYm9vbCBmb3JjZV9jb2xubywgZGVwYXJzZV9jb250ZXh0 ICpjb250ZXh0KQoreworCVN0cmluZ0luZm8JYnVmID0gY29udGV4dC0+YnVmOworCWNvbnN0IGNo YXIgKnNlcDsKKwlMaXN0Q2VsbCAgICpsY192YXIsCisJCQkgICAqbGNfZGVmOworCisJc2VwID0g IiAgIjsKKwlBc3NlcnQobGlzdF9sZW5ndGgocGF0dGVyblZhcmlhYmxlcykgPT0gbGlzdF9sZW5n dGgoZGVmaW5lQ2xhdXNlKSk7CisKKwlmb3Jib3RoKGxjX3ZhciwgcGF0dGVyblZhcmlhYmxlcywg bGNfZGVmLCBkZWZpbmVDbGF1c2UpCisJeworCQljaGFyCSAgICp2YXJOYW1lID0gc3RyVmFsKGxm aXJzdChsY192YXIpKTsKKwkJVGFyZ2V0RW50cnkgKnRlID0gKFRhcmdldEVudHJ5ICopIGxmaXJz dChsY19kZWYpOworCisJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiJXMlcyBBUyAiLCBzZXAsIHZh ck5hbWUpOworCQlnZXRfcnVsZV9leHByKChOb2RlICopIHRlLT5leHByLCBjb250ZXh0LCBmYWxz ZSk7CisJCXNlcCA9ICIsXG4gICI7CisJfQorfQorCiAvKgogICogRGlzcGxheSBhIFdJTkRPVyBj bGF1c2UuCiAgKgpAQCAtNjgxOSw2ICs2ODg0LDcgQEAgZ2V0X3J1bGVfd2luZG93c3BlYyhXaW5k b3dDbGF1c2UgKndjLCBMaXN0ICp0YXJnZXRMaXN0LAogCQlnZXRfcnVsZV9vcmRlcmJ5KHdjLT5v cmRlckNsYXVzZSwgdGFyZ2V0TGlzdCwgZmFsc2UsIGNvbnRleHQpOwogCQluZWVkc3BhY2UgPSB0 cnVlOwogCX0KKwogCS8qIGZyYW1pbmcgY2xhdXNlIGlzIG5ldmVyIGluaGVyaXRlZCwgc28gcHJp bnQgdW5sZXNzIGl0J3MgZGVmYXVsdCAqLwogCWlmICh3Yy0+ZnJhbWVPcHRpb25zICYgRlJBTUVP UFRJT05fTk9OREVGQVVMVCkKIAl7CkBAIC02ODI3LDcgKzY4OTMsNTMgQEAgZ2V0X3J1bGVfd2lu ZG93c3BlYyhXaW5kb3dDbGF1c2UgKndjLCBMaXN0ICp0YXJnZXRMaXN0LAogCQlnZXRfd2luZG93 X2ZyYW1lX29wdGlvbnMod2MtPmZyYW1lT3B0aW9ucywKIAkJCQkJCQkJIHdjLT5zdGFydE9mZnNl dCwgd2MtPmVuZE9mZnNldCwKIAkJCQkJCQkJIGNvbnRleHQpOworCQluZWVkc3BhY2UgPSB0cnVl OwogCX0KKworCS8qIFJQUiAqLworCWlmICh3Yy0+cnBTa2lwVG8gPT0gU1RfTkVYVF9ST1cpCisJ eworCQlpZiAobmVlZHNwYWNlKQorCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoYnVmLCAnICcpOwor CQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwKKwkJCQkJCQkgICAiXG4gIEFGVEVSIE1BVENI IFNLSVAgVE8gTkVYVCBST1cgIik7CisJCW5lZWRzcGFjZSA9IHRydWU7CisJfQorCWVsc2UgaWYg KHdjLT5ycFNraXBUbyA9PSBTVF9QQVNUX0xBU1RfUk9XKQorCXsKKwkJaWYgKG5lZWRzcGFjZSkK KwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGJ1ZiwgJyAnKTsKKwkJYXBwZW5kU3RyaW5nSW5mb1N0 cmluZyhidWYsCisJCQkJCQkJICAgIlxuICBBRlRFUiBNQVRDSCBTS0lQIFBBU1QgTEFTVCBST1cg Iik7CisJCW5lZWRzcGFjZSA9IHRydWU7CisJfQorCWlmICh3Yy0+aW5pdGlhbCkKKwl7CisJCWlm IChuZWVkc3BhY2UpCisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihidWYsICcgJyk7CisJCWFwcGVu ZFN0cmluZ0luZm9TdHJpbmcoYnVmLCAiXG4gIElOSVRJQUwiKTsKKwkJbmVlZHNwYWNlID0gdHJ1 ZTsKKwl9CisJaWYgKHdjLT5wYXR0ZXJuVmFyaWFibGUpCisJeworCQlpZiAobmVlZHNwYWNlKQor CQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoYnVmLCAnICcpOworCQlhcHBlbmRTdHJpbmdJbmZvU3Ry aW5nKGJ1ZiwgIlxuICBQQVRURVJOICIpOworCQlnZXRfcnVsZV9wYXR0ZXJuKHdjLT5wYXR0ZXJu VmFyaWFibGUsIHdjLT5wYXR0ZXJuUmVnZXhwLAorCQkJCQkJIGZhbHNlLCBjb250ZXh0KTsKKwkJ bmVlZHNwYWNlID0gdHJ1ZTsKKwl9CisKKwlpZiAod2MtPmRlZmluZUNsYXVzZSkKKwl7CisJCWlm IChuZWVkc3BhY2UpCisJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihidWYsICcgJyk7CisJCWFwcGVu ZFN0cmluZ0luZm9TdHJpbmcoYnVmLCAiXG4gIERFRklORVxuIik7CisJCWdldF9ydWxlX2RlZmlu ZSh3Yy0+ZGVmaW5lQ2xhdXNlLCB3Yy0+cGF0dGVyblZhcmlhYmxlLAorCQkJCQkJZmFsc2UsIGNv bnRleHQpOworCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihidWYsICcgJyk7CisJfQorCiAJYXBwZW5k U3RyaW5nSW5mb0NoYXIoYnVmLCAnKScpOwogfQogCi0tIAoyLjQzLjAKCg== ----Next_Part(Wed_Sep_24_19_35_23_2025_264)-- Content-Type: Application/Octet-Stream Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="v33-0004-Row-pattern-recognition-patch-planner.patch" RnJvbSBjZDM4ZWY2YTFjODIyNWQwYmQzNjk0MTdiNzBhNmE3M2FkMWNjYmZjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUYXRzdW8gSXNoaWkgPGlzaGlpQHBvc3RncmVzcWwub3JnPgpE YXRlOiBXZWQsIDI0IFNlcCAyMDI1IDE5OjE4OjM3ICswOTAwClN1YmplY3Q6IFtQQVRDSCB2MzMg NC84XSBSb3cgcGF0dGVybiByZWNvZ25pdGlvbiBwYXRjaCAocGxhbm5lcikuCgotLS0KIHNyYy9i YWNrZW5kL29wdGltaXplci9wbGFuL2NyZWF0ZXBsYW4uYyAgIHwgMTggKysrKysrKysrKysrKy0t CiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMgICAgICB8ICAzICsrKwogc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vc2V0cmVmcy5jICAgICAgfCAyNyArKysrKysrKysrKysr KysrKysrKysrLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3ByZXAvcHJlcGpvaW50cmVlLmMgfCAg OSArKysrKysrKwogc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmggICAgICAgICAgICAgfCAx OSArKysrKysrKysrKysrKysrCiA1IGZpbGVzIGNoYW5nZWQsIDczIGluc2VydGlvbnMoKyksIDMg ZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3Jl YXRlcGxhbi5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jCmluZGV4 IGM5ZGJhN2ZmMzQ2Li41NjE3OGY3NTkyMCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1p emVyL3BsYW4vY3JlYXRlcGxhbi5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2Ny ZWF0ZXBsYW4uYwpAQCAtMjg5LDcgKzI4OSw5IEBAIHN0YXRpYyBNZW1vaXplICptYWtlX21lbW9p emUoUGxhbiAqbGVmdHRyZWUsIE9pZCAqaGFzaG9wZXJhdG9ycywKIHN0YXRpYyBXaW5kb3dBZ2cg Km1ha2Vfd2luZG93YWdnKExpc3QgKnRsaXN0LCBXaW5kb3dDbGF1c2UgKndjLAogCQkJCQkJCQkg aW50IHBhcnROdW1Db2xzLCBBdHRyTnVtYmVyICpwYXJ0Q29sSWR4LCBPaWQgKnBhcnRPcGVyYXRv cnMsIE9pZCAqcGFydENvbGxhdGlvbnMsCiAJCQkJCQkJCSBpbnQgb3JkTnVtQ29scywgQXR0ck51 bWJlciAqb3JkQ29sSWR4LCBPaWQgKm9yZE9wZXJhdG9ycywgT2lkICpvcmRDb2xsYXRpb25zLAot CQkJCQkJCQkgTGlzdCAqcnVuQ29uZGl0aW9uLCBMaXN0ICpxdWFsLCBib29sIHRvcFdpbmRvdywK KwkJCQkJCQkJIExpc3QgKnJ1bkNvbmRpdGlvbiwgUlBTa2lwVG8gcnBTa2lwVG8sIExpc3QgKnBh dHRlcm5WYXJpYWJsZSwKKwkJCQkJCQkJIExpc3QgKnBhdHRlcm5SZWdleHAsIExpc3QgKmRlZmlu ZUNsYXVzZSwgTGlzdCAqZGVmaW5lSW5pdGlhbCwKKwkJCQkJCQkJIExpc3QgKnF1YWwsIGJvb2wg dG9wV2luZG93LAogCQkJCQkJCQkgUGxhbiAqbGVmdHRyZWUpOwogc3RhdGljIEdyb3VwICptYWtl X2dyb3VwKExpc3QgKnRsaXN0LCBMaXN0ICpxdWFsLCBpbnQgbnVtR3JvdXBDb2xzLAogCQkJCQkJ IEF0dHJOdW1iZXIgKmdycENvbElkeCwgT2lkICpncnBPcGVyYXRvcnMsIE9pZCAqZ3JwQ29sbGF0 aW9ucywKQEAgLTI1NDMsNiArMjU0NSwxMSBAQCBjcmVhdGVfd2luZG93YWdnX3BsYW4oUGxhbm5l ckluZm8gKnJvb3QsIFdpbmRvd0FnZ1BhdGggKmJlc3RfcGF0aCkKIAkJCQkJCSAgb3JkT3BlcmF0 b3JzLAogCQkJCQkJICBvcmRDb2xsYXRpb25zLAogCQkJCQkJICBiZXN0X3BhdGgtPnJ1bkNvbmRp dGlvbiwKKwkJCQkJCSAgd2MtPnJwU2tpcFRvLAorCQkJCQkJICB3Yy0+cGF0dGVyblZhcmlhYmxl LAorCQkJCQkJICB3Yy0+cGF0dGVyblJlZ2V4cCwKKwkJCQkJCSAgd2MtPmRlZmluZUNsYXVzZSwK KwkJCQkJCSAgd2MtPmRlZmluZUluaXRpYWwsCiAJCQkJCQkgIGJlc3RfcGF0aC0+cXVhbCwKIAkJ CQkJCSAgYmVzdF9wYXRoLT50b3B3aW5kb3csCiAJCQkJCQkgIHN1YnBsYW4pOwpAQCAtNjYxOCw3 ICs2NjI1LDkgQEAgc3RhdGljIFdpbmRvd0FnZyAqCiBtYWtlX3dpbmRvd2FnZyhMaXN0ICp0bGlz dCwgV2luZG93Q2xhdXNlICp3YywKIAkJCSAgIGludCBwYXJ0TnVtQ29scywgQXR0ck51bWJlciAq cGFydENvbElkeCwgT2lkICpwYXJ0T3BlcmF0b3JzLCBPaWQgKnBhcnRDb2xsYXRpb25zLAogCQkJ ICAgaW50IG9yZE51bUNvbHMsIEF0dHJOdW1iZXIgKm9yZENvbElkeCwgT2lkICpvcmRPcGVyYXRv cnMsIE9pZCAqb3JkQ29sbGF0aW9ucywKLQkJCSAgIExpc3QgKnJ1bkNvbmRpdGlvbiwgTGlzdCAq cXVhbCwgYm9vbCB0b3BXaW5kb3csIFBsYW4gKmxlZnR0cmVlKQorCQkJICAgTGlzdCAqcnVuQ29u ZGl0aW9uLCBSUFNraXBUbyBycFNraXBUbywgTGlzdCAqcGF0dGVyblZhcmlhYmxlLAorCQkJICAg TGlzdCAqcGF0dGVyblJlZ2V4cCwgTGlzdCAqZGVmaW5lQ2xhdXNlLCBMaXN0ICpkZWZpbmVJbml0 aWFsLAorCQkJICAgTGlzdCAqcXVhbCwgYm9vbCB0b3BXaW5kb3csIFBsYW4gKmxlZnR0cmVlKQog ewogCVdpbmRvd0FnZyAgKm5vZGUgPSBtYWtlTm9kZShXaW5kb3dBZ2cpOwogCVBsYW4JICAgKnBs YW4gPSAmbm9kZS0+cGxhbjsKQEAgLTY2NDUsNiArNjY1NCwxMSBAQCBtYWtlX3dpbmRvd2FnZyhM aXN0ICp0bGlzdCwgV2luZG93Q2xhdXNlICp3YywKIAlub2RlLT5pblJhbmdlQXNjID0gd2MtPmlu UmFuZ2VBc2M7CiAJbm9kZS0+aW5SYW5nZU51bGxzRmlyc3QgPSB3Yy0+aW5SYW5nZU51bGxzRmly c3Q7CiAJbm9kZS0+dG9wV2luZG93ID0gdG9wV2luZG93OworCW5vZGUtPnJwU2tpcFRvID0gcnBT a2lwVG87CisJbm9kZS0+cGF0dGVyblZhcmlhYmxlID0gcGF0dGVyblZhcmlhYmxlOworCW5vZGUt PnBhdHRlcm5SZWdleHAgPSBwYXR0ZXJuUmVnZXhwOworCW5vZGUtPmRlZmluZUNsYXVzZSA9IGRl ZmluZUNsYXVzZTsKKwlub2RlLT5kZWZpbmVJbml0aWFsID0gZGVmaW5lSW5pdGlhbDsKIAogCXBs YW4tPnRhcmdldGxpc3QgPSB0bGlzdDsKIAlwbGFuLT5sZWZ0dHJlZSA9IGxlZnR0cmVlOwpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jIGIvc3JjL2JhY2tl bmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jCmluZGV4IDQxYmQ4MzUzNDMwLi4xYjAwOGJhNjQy YyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jCisrKyBi L3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYwpAQCAtOTI5LDYgKzkyOSw5IEBA IHN1YnF1ZXJ5X3BsYW5uZXIoUGxhbm5lckdsb2JhbCAqZ2xvYiwgUXVlcnkgKnBhcnNlLCBQbGFu bmVySW5mbyAqcGFyZW50X3Jvb3QsCiAJCQkJCQkJCQkJCQlFWFBSS0lORF9MSU1JVCk7CiAJCXdj LT5lbmRPZmZzZXQgPSBwcmVwcm9jZXNzX2V4cHJlc3Npb24ocm9vdCwgd2MtPmVuZE9mZnNldCwK IAkJCQkJCQkJCQkJICBFWFBSS0lORF9MSU1JVCk7CisJCXdjLT5kZWZpbmVDbGF1c2UgPSAoTGlz dCAqKSBwcmVwcm9jZXNzX2V4cHJlc3Npb24ocm9vdCwKKwkJCQkJCQkJCQkJCQkJICAoTm9kZSAq KSB3Yy0+ZGVmaW5lQ2xhdXNlLAorCQkJCQkJCQkJCQkJCQkgIEVYUFJLSU5EX1RBUkdFVCk7CiAJ fQogCiAJcGFyc2UtPmxpbWl0T2Zmc2V0ID0gcHJlcHJvY2Vzc19leHByZXNzaW9uKHJvb3QsIHBh cnNlLT5saW1pdE9mZnNldCwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFu L3NldHJlZnMuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3NldHJlZnMuYwppbmRleCA2 OTUwZWZmMmM1Yi4uNWIzNThjMGZhNDEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXpl ci9wbGFuL3NldHJlZnMuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9zZXRyZWZz LmMKQEAgLTIxMSw3ICsyMTEsNiBAQCBzdGF0aWMgTGlzdCAqc2V0X3dpbmRvd2FnZ19ydW5jb25k aXRpb25fcmVmZXJlbmNlcyhQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkJCQkJCQkJCSAgIExpc3Qg KnJ1bmNvbmRpdGlvbiwKIAkJCQkJCQkJCQkJCSAgIFBsYW4gKnBsYW4pOwogCi0KIC8qKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKgogICoKICAqCQlTVUJQTEFOIFJFRkVSRU5DRVMKQEAgLTI1NTcsNiArMjU1 NiwzMiBAQCBzZXRfdXBwZXJfcmVmZXJlbmNlcyhQbGFubmVySW5mbyAqcm9vdCwgUGxhbiAqcGxh biwgaW50IHJ0b2Zmc2V0KQogCQkJCQkgICBOUk1fRVFVQUwsCiAJCQkJCSAgIE5VTV9FWEVDX1FV QUwocGxhbikpOwogCisJLyoKKwkgKiBNb2RpZmllcyBhbiBleHByZXNzaW9uIHRyZWUgaW4gZWFj aCBERUZJTkUgY2xhdXNlIHNvIHRoYXQgYWxsIFZhcgorCSAqIG5vZGVzJ3MgdmFybm8gcmVmZXJz IHRvIE9VVEVSX1ZBUi4KKwkgKi8KKwlpZiAoSXNBKHBsYW4sIFdpbmRvd0FnZykpCisJeworCQlX aW5kb3dBZ2cgICp3cGxhbiA9IChXaW5kb3dBZ2cgKikgcGxhbjsKKworCQlpZiAod3BsYW4tPmRl ZmluZUNsYXVzZSAhPSBOSUwpCisJCXsKKwkJCWZvcmVhY2gobCwgd3BsYW4tPmRlZmluZUNsYXVz ZSkKKwkJCXsKKwkJCQlUYXJnZXRFbnRyeSAqdGxlID0gKFRhcmdldEVudHJ5ICopIGxmaXJzdChs KTsKKworCQkJCXRsZS0+ZXhwciA9IChFeHByICopCisJCQkJCWZpeF91cHBlcl9leHByKHJvb3Qs CisJCQkJCQkJCSAgIChOb2RlICopIHRsZS0+ZXhwciwKKwkJCQkJCQkJICAgc3VicGxhbl9pdGxp c3QsCisJCQkJCQkJCSAgIE9VVEVSX1ZBUiwKKwkJCQkJCQkJICAgcnRvZmZzZXQsCisJCQkJCQkJ CSAgIE5STV9FUVVBTCwKKwkJCQkJCQkJICAgTlVNX0VYRUNfUVVBTChwbGFuKSk7CisJCQl9CisJ CX0KKwl9CisKIAlwZnJlZShzdWJwbGFuX2l0bGlzdCk7CiB9CiAKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL29wdGltaXplci9wcmVwL3ByZXBqb2ludHJlZS5jIGIvc3JjL2JhY2tlbmQvb3B0aW1p emVyL3ByZXAvcHJlcGpvaW50cmVlLmMKaW5kZXggMzVlOGQzYzE4M2IuLjdlZjE0ZDBkNjM5IDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcHJlcC9wcmVwam9pbnRyZWUuYworKysg Yi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcHJlcC9wcmVwam9pbnRyZWUuYwpAQCAtMjUwNiw2ICsy NTA2LDE1IEBAIHBlcmZvcm1fcHVsbHVwX3JlcGxhY2VfdmFycyhQbGFubmVySW5mbyAqcm9vdCwK IAlwYXJzZS0+cmV0dXJuaW5nTGlzdCA9IChMaXN0ICopCiAJCXB1bGx1cF9yZXBsYWNlX3ZhcnMo KE5vZGUgKikgcGFyc2UtPnJldHVybmluZ0xpc3QsIHJ2Y29udGV4dCk7CiAKKwlmb3JlYWNoKGxj LCBwYXJzZS0+d2luZG93Q2xhdXNlKQorCXsKKwkJV2luZG93Q2xhdXNlICp3YyA9IGxmaXJzdF9u b2RlKFdpbmRvd0NsYXVzZSwgbGMpOworCisJCWlmICh3Yy0+ZGVmaW5lQ2xhdXNlICE9IE5JTCkK KwkJCXdjLT5kZWZpbmVDbGF1c2UgPSAoTGlzdCAqKQorCQkJCXB1bGx1cF9yZXBsYWNlX3ZhcnMo KE5vZGUgKikgd2MtPmRlZmluZUNsYXVzZSwgcnZjb250ZXh0KTsKKwl9CisKIAlpZiAocGFyc2Ut Pm9uQ29uZmxpY3QpCiAJewogCQlwYXJzZS0+b25Db25mbGljdC0+b25Db25mbGljdFNldCA9IChM aXN0ICopCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wbGFubm9kZXMuaCBiL3NyYy9p bmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oCmluZGV4IDNkMTk2ZjUwNzhlLi5lYzAzNWQyNDkxNSAx MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmgKKysrIGIvc3JjL2luY2x1 ZGUvbm9kZXMvcGxhbm5vZGVzLmgKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlICJsaWIvc3Ry aW5naW5mby5oIgogI2luY2x1ZGUgIm5vZGVzL2JpdG1hcHNldC5oIgogI2luY2x1ZGUgIm5vZGVz L2xvY2tvcHRpb25zLmgiCisjaW5jbHVkZSAibm9kZXMvcGFyc2Vub2Rlcy5oIgogI2luY2x1ZGUg Im5vZGVzL3ByaW1ub2Rlcy5oIgogCiAKQEAgLTEyODYsNiArMTI4NywyNCBAQCB0eXBlZGVmIHN0 cnVjdCBXaW5kb3dBZ2cKIAkvKiBudWxscyBzb3J0IGZpcnN0IGZvciBpbl9yYW5nZSB0ZXN0cz8g Ki8KIAlib29sCQlpblJhbmdlTnVsbHNGaXJzdDsKIAorCS8qIFJvdyBQYXR0ZXJuIFJlY29nbml0 aW9uIEFGVEVSIE1BQ0ggU0tJUCBjbGF1c2UgKi8KKwlSUFNraXBUbwlycFNraXBUbzsJCS8qIFJv dyBQYXR0ZXJuIFNraXAgVG8gdHlwZSAqLworCisJLyogUm93IFBhdHRlcm4gUEFUVEVSTiB2YXJp YWJsZSBuYW1lIChsaXN0IG9mIFN0cmluZykgKi8KKwlMaXN0CSAgICpwYXR0ZXJuVmFyaWFibGU7 CisKKwkvKgorCSAqIFJvdyBQYXR0ZXJuIFJQQVRURVJOIHJlZ3VsYXIgZXhwcmVzc2lvbiBxdWFu dGlmaWVyICgnKycgb3IgJycuIGxpc3Qgb2YKKwkgKiBTdHJpbmcpCisJICovCisJTGlzdAkgICAq cGF0dGVyblJlZ2V4cDsKKworCS8qIFJvdyBQYXR0ZXJuIERFRklORSBjbGF1c2UgKGxpc3Qgb2Yg VGFyZ2V0RW50cnkpICovCisJTGlzdAkgICAqZGVmaW5lQ2xhdXNlOworCisJLyogUm93IFBhdHRl cm4gREVGSU5FIHZhcmlhYmxlIGluaXRpYWwgbmFtZXMgKGxpc3Qgb2YgU3RyaW5nKSAqLworCUxp c3QJICAgKmRlZmluZUluaXRpYWw7CisKIAkvKgogCSAqIGZhbHNlIGZvciBhbGwgYXBhcnQgZnJv bSB0aGUgV2luZG93QWdnIHRoYXQncyBjbG9zZXN0IHRvIHRoZSByb290IG9mCiAJICogdGhlIHBs YW4KLS0gCjIuNDMuMAoK ----Next_Part(Wed_Sep_24_19_35_23_2025_264)-- Content-Type: Application/Octet-Stream Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="v33-0005-Row-pattern-recognition-patch-executor.patch" RnJvbSBkYjk3ZGI2MWI0ZDhhYTRhY2Y3NjkwNmI0ZjQ2NmVjYWYwOTUyMTdjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUYXRzdW8gSXNoaWkgPGlzaGlpQHBvc3RncmVzcWwub3JnPgpE YXRlOiBXZWQsIDI0IFNlcCAyMDI1IDE5OjE4OjM3ICswOTAwClN1YmplY3Q6IFtQQVRDSCB2MzMg NS84XSBSb3cgcGF0dGVybiByZWNvZ25pdGlvbiBwYXRjaCAoZXhlY3V0b3IpLgoKLS0tCiBzcmMv YmFja2VuZC9leGVjdXRvci9ub2RlV2luZG93QWdnLmMgfCAxODM1ICsrKysrKysrKysrKysrKysr KysrKysrKystCiBzcmMvYmFja2VuZC91dGlscy9hZHQvd2luZG93ZnVuY3MuYyAgfCAgIDM0ICst CiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0ICAgICAgfCAgICA2ICsKIHNyYy9pbmNs dWRlL25vZGVzL2V4ZWNub2Rlcy5oICAgICAgICB8ICAgNTggKwogNCBmaWxlcyBjaGFuZ2VkLCAx OTIyIGluc2VydGlvbnMoKyksIDExIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2V4ZWN1dG9yL25vZGVXaW5kb3dBZ2cuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVX aW5kb3dBZ2cuYwppbmRleCA5YTFhY2NlMmI1ZC4uMDBkNGM1YzM5MTAgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVXaW5kb3dBZ2cuYworKysgYi9zcmMvYmFja2VuZC9leGVj dXRvci9ub2RlV2luZG93QWdnLmMKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJhY2Nlc3Mv aHR1cF9kZXRhaWxzLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9vYmplY3RhY2Nlc3MuaCIKICNpbmNs dWRlICJjYXRhbG9nL3BnX2FnZ3JlZ2F0ZS5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfY29sbGF0 aW9uX2QuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3Byb2MuaCIKICNpbmNsdWRlICJleGVjdXRv ci9leGVjdXRvci5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL25vZGVXaW5kb3dBZ2cuaCIKQEAgLTQ1 LDkgKzQ2LDExIEBACiAjaW5jbHVkZSAib3B0aW1pemVyL29wdGltaXplci5oIgogI2luY2x1ZGUg InBhcnNlci9wYXJzZV9hZ2cuaCIKICNpbmNsdWRlICJwYXJzZXIvcGFyc2VfY29lcmNlLmgiCisj aW5jbHVkZSAicmVnZXgvcmVnZXguaCIKICNpbmNsdWRlICJ1dGlscy9hY2wuaCIKICNpbmNsdWRl ICJ1dGlscy9idWlsdGlucy5oIgogI2luY2x1ZGUgInV0aWxzL2RhdHVtLmgiCisjaW5jbHVkZSAi dXRpbHMvZm1ncm9pZHMuaCIKICNpbmNsdWRlICJ1dGlscy9leHBhbmRlZGRhdHVtLmgiCiAjaW5j bHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCiAjaW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKQEAg LTE1OSw2ICsxNjIsMzMgQEAgdHlwZWRlZiBzdHJ1Y3QgV2luZG93U3RhdGVQZXJBZ2dEYXRhCiAJ Ym9vbAkJcmVzdGFydDsJCS8qIG5lZWQgdG8gcmVzdGFydCB0aGlzIGFnZyBpbiB0aGlzIGN5Y2xl PyAqLwogfSBXaW5kb3dTdGF0ZVBlckFnZ0RhdGE7CiAKKy8qCisgKiBTZXQgb2YgU3RyaW5nSW5m by4gVXNlZCBpbiBSUFIuCisgKi8KKyNkZWZpbmUJU1RSU0VUX0ZST1pFTgkJKDEgPDwgMCkJLyog c3RyaW5nIGlzIGZyb3plbiAqLworI2RlZmluZQlTVFJTRVRfRElTQ0FSREVECSgxIDw8IDEpCS8q IHN0cmluZyBpcyBzY2hlZHVsZWQgdG8gYmUgZGlzY2FyZGVkICovCisjZGVmaW5lCVNUUlNFVF9N QVRDSEVECQkoMSA8PCAyKQkvKiBzdHJpbmcgaXMgY29uZmlybWVkIHRvIGJlIG1hdGNoZWQKKwkJ CQkJCQkJCQkgKiB3aXRoIHBhdHRlcm4gKi8KKwordHlwZWRlZiBzdHJ1Y3QgU3RyaW5nU2V0Cit7 CisJU3RyaW5nSW5mbyAqc3RyX3NldDsKKwlTaXplCQlzZXRfc2l6ZTsJCS8qIGN1cnJlbnQgYXJy YXkgYWxsb2NhdGlvbiBzaXplIGluIG51bWJlciBvZgorCQkJCQkJCQkgKiBpdGVtcyAqLworCWlu dAkJCXNldF9pbmRleDsJCS8qIGN1cnJlbnQgdXNlZCBzaXplICovCisJaW50CQkgICAqaW5mbzsJ CQkvKiBhbiBhcnJheSBvZiBpbmZvcm1hdGlvbiBiaXQgcGVyIFN0cmluZ0luZm8uCisJCQkJCQkJ CSAqIHNlZSBhYm92ZSAqLworfSBTdHJpbmdTZXQ7CisKKy8qCisgKiBTdHJ1Y3R1cmUgdXNlZCBi eSBjaGVja19ycHJfbmF2aWdhdGlvbigpIGFuZCBycHJfbmF2aWdhdGlvbl93YWxrZXIoKS4KKyAq LwordHlwZWRlZiBzdHJ1Y3QgTmF2aWdhdGlvbkluZm8KK3sKKwlib29sCQlpc19wcmV2OwkJLyog dHJ1ZSBpZiBQUkVWICovCisJaW50CQkJbnVtX3ZhcnM7CQkvKiBudW1iZXIgb2YgdmFyIG5vZGVz ICovCit9IE5hdmlnYXRpb25JbmZvOworCiBzdGF0aWMgdm9pZCBpbml0aWFsaXplX3dpbmRvd2Fn Z3JlZ2F0ZShXaW5kb3dBZ2dTdGF0ZSAqd2luc3RhdGUsCiAJCQkJCQkJCQkgICBXaW5kb3dTdGF0 ZVBlckZ1bmMgcGVyZnVuY3N0YXRlLAogCQkJCQkJCQkJICAgV2luZG93U3RhdGVQZXJBZ2cgcGVy YWdnc3RhdGUpOwpAQCAtMTg0LDYgKzIxNCw3IEBAIHN0YXRpYyB2b2lkIHJlbGVhc2VfcGFydGl0 aW9uKFdpbmRvd0FnZ1N0YXRlICp3aW5zdGF0ZSk7CiAKIHN0YXRpYyBpbnQJcm93X2lzX2luX2Zy YW1lKFdpbmRvd0FnZ1N0YXRlICp3aW5zdGF0ZSwgaW50NjQgcG9zLAogCQkJCQkJCVR1cGxlVGFi bGVTbG90ICpzbG90KTsKKwogc3RhdGljIHZvaWQgdXBkYXRlX2ZyYW1laGVhZHBvcyhXaW5kb3dB Z2dTdGF0ZSAqd2luc3RhdGUpOwogc3RhdGljIHZvaWQgdXBkYXRlX2ZyYW1ldGFpbHBvcyhXaW5k b3dBZ2dTdGF0ZSAqd2luc3RhdGUpOwogc3RhdGljIHZvaWQgdXBkYXRlX2dyb3VwdGFpbHBvcyhX aW5kb3dBZ2dTdGF0ZSAqd2luc3RhdGUpOwpAQCAtMTk1LDkgKzIyNiw2MCBAQCBzdGF0aWMgRGF0 dW0gR2V0QWdnSW5pdFZhbChEYXR1bSB0ZXh0SW5pdFZhbCwgT2lkIHRyYW5zdHlwZSk7CiAKIHN0 YXRpYyBib29sIGFyZV9wZWVycyhXaW5kb3dBZ2dTdGF0ZSAqd2luc3RhdGUsIFR1cGxlVGFibGVT bG90ICpzbG90MSwKIAkJCQkJICBUdXBsZVRhYmxlU2xvdCAqc2xvdDIpOworCitzdGF0aWMgaW50 CVdpbkdldFNsb3RJbkZyYW1lKFdpbmRvd09iamVjdCB3aW5vYmosIFR1cGxlVGFibGVTbG90ICpz bG90LAorCQkJCQkJCSAgaW50IHJlbHBvcywgaW50IHNlZWt0eXBlLCBib29sIHNldF9tYXJrLAor CQkJCQkJCSAgYm9vbCAqaXNudWxsLCBib29sICppc291dCk7CiBzdGF0aWMgYm9vbCB3aW5kb3df Z2V0dHVwbGVzbG90KFdpbmRvd09iamVjdCB3aW5vYmosIGludDY0IHBvcywKIAkJCQkJCQkJVHVw bGVUYWJsZVNsb3QgKnNsb3QpOwogCitzdGF0aWMgdm9pZCBhdHRub19tYXAoTm9kZSAqbm9kZSk7 CitzdGF0aWMgYm9vbCBhdHRub19tYXBfd2Fsa2VyKE5vZGUgKm5vZGUsIHZvaWQgKmNvbnRleHQp Oworc3RhdGljIGludAlyb3dfaXNfaW5fcmVkdWNlZF9mcmFtZShXaW5kb3dPYmplY3Qgd2lub2Jq LCBpbnQ2NCBwb3MpOworc3RhdGljIGJvb2wgcnByX2lzX2RlZmluZWQoV2luZG93QWdnU3RhdGUg KndpbnN0YXRlKTsKKworc3RhdGljIHZvaWQgY3JlYXRlX3JlZHVjZWRfZnJhbWVfbWFwKFdpbmRv d0FnZ1N0YXRlICp3aW5zdGF0ZSk7CitzdGF0aWMgaW50CWdldF9yZWR1Y2VkX2ZyYW1lX21hcChX aW5kb3dBZ2dTdGF0ZSAqd2luc3RhdGUsIGludDY0IHBvcyk7CitzdGF0aWMgdm9pZCByZWdpc3Rl cl9yZWR1Y2VkX2ZyYW1lX21hcChXaW5kb3dBZ2dTdGF0ZSAqd2luc3RhdGUsIGludDY0IHBvcywK KwkJCQkJCQkJCSAgIGludCB2YWwpOworc3RhdGljIHZvaWQgY2xlYXJfcmVkdWNlZF9mcmFtZV9t YXAoV2luZG93QWdnU3RhdGUgKndpbnN0YXRlKTsKK3N0YXRpYyB2b2lkIHVwZGF0ZV9yZWR1Y2Vk X2ZyYW1lKFdpbmRvd09iamVjdCB3aW5vYmosIGludDY0IHBvcyk7CisKK3N0YXRpYyBpbnQ2NCBl dmFsdWF0ZV9wYXR0ZXJuKFdpbmRvd09iamVjdCB3aW5vYmosIGludDY0IGN1cnJlbnRfcG9zLAor CQkJCQkJCSAgY2hhciAqdm5hbWUsIFN0cmluZ0luZm8gZW5jb2RlZF9zdHIsIGJvb2wgKnJlc3Vs dCk7CisKK3N0YXRpYyBib29sIGdldF9zbG90cyhXaW5kb3dPYmplY3Qgd2lub2JqLCBpbnQ2NCBj dXJyZW50X3Bvcyk7CisKK3N0YXRpYyBpbnQJc2VhcmNoX3N0cl9zZXQoV2luZG93QWdnU3RhdGUg KndpbnN0YXRlLAorCQkJCQkJICAgU3RyaW5nU2V0ICppbnB1dF9zdHJfc2V0KTsKK3N0YXRpYyBT dHJpbmdTZXQgKmdlbmVyYXRlX3BhdHRlcm5zKFN0cmluZ1NldCAqaW5wdXRfc3RyX3NldCwKKwkJ CQkJCQkJCWNoYXIgKnBhdHRlcm4sIFZhcmlhYmxlUG9zICp2YXJpYWJsZV9wb3MsCisJCQkJCQkJ CQljaGFyIHRhaWxfcGF0dGVybl9pbml0aWFsKTsKK3N0YXRpYyBpbnQJYWRkX3BhdHRlcm4oU3Ry aW5nSW5mbyBvbGQsIGludCBvbGRfaW5mbywgU3RyaW5nU2V0ICpuZXdfc3RyX3NldCwKKwkJCQkJ CWNoYXIgYywgY2hhciAqcGF0dGVybiwgY2hhciB0YWlsX3BhdHRlcm5faW5pdGlhbCwKKwkJCQkJ CWludCByZXN1bHRsZW4pOworc3RhdGljIGludAlmcmVlemVfcGF0dGVybihTdHJpbmdJbmZvIG9s ZCwgaW50IG9sZF9pbmZvLAorCQkJCQkJICAgU3RyaW5nU2V0ICpuZXdfc3RyX3NldCwKKwkJCQkJ CSAgIGNoYXIgKnBhdHRlcm4sIGludCByZXN1bHRsZW4pOworc3RhdGljIGNoYXIgcGF0dGVybl9p bml0aWFsKFdpbmRvd0FnZ1N0YXRlICp3aW5zdGF0ZSwgY2hhciAqdm5hbWUpOworc3RhdGljIGlu dAlkb19wYXR0ZXJuX21hdGNoKGNoYXIgKnBhdHRlcm4sIGNoYXIgKmVuY29kZWRfc3RyLCBpbnQg bGVuKTsKKworc3RhdGljIFN0cmluZ1NldCAqc3RyaW5nX3NldF9pbml0KHZvaWQpOworc3RhdGlj IHZvaWQgc3RyaW5nX3NldF9hZGQoU3RyaW5nU2V0ICpzdHJpbmdfc2V0LCBTdHJpbmdJbmZvIHN0 ciwgaW50IGluZm8pOworc3RhdGljIFN0cmluZ0luZm8gc3RyaW5nX3NldF9nZXQoU3RyaW5nU2V0 ICpzdHJpbmdfc2V0LCBpbnQgaW5kZXgsIGludCAqZmxhZyk7CitzdGF0aWMgaW50CXN0cmluZ19z ZXRfZ2V0X3NpemUoU3RyaW5nU2V0ICpzdHJpbmdfc2V0KTsKK3N0YXRpYyB2b2lkIHN0cmluZ19z ZXRfZGlzY2FyZChTdHJpbmdTZXQgKnN0cmluZ19zZXQpOworc3RhdGljIFZhcmlhYmxlUG9zICp2 YXJpYWJsZV9wb3NfaW5pdCh2b2lkKTsKK3N0YXRpYyB2b2lkIHZhcmlhYmxlX3Bvc19yZWdpc3Rl cihWYXJpYWJsZVBvcyAqdmFyaWFibGVfcG9zLCBjaGFyIGluaXRpYWwsCisJCQkJCQkJCSAgaW50 IHBvcyk7CitzdGF0aWMgYm9vbCB2YXJpYWJsZV9wb3NfY29tcGFyZShWYXJpYWJsZVBvcyAqdmFy aWFibGVfcG9zLAorCQkJCQkJCQkgY2hhciBpbml0aWFsMSwgY2hhciBpbml0aWFsMik7CitzdGF0 aWMgaW50CXZhcmlhYmxlX3Bvc19mZXRjaChWYXJpYWJsZVBvcyAqdmFyaWFibGVfcG9zLCBjaGFy IGluaXRpYWwsCisJCQkJCQkJICAgaW50IGluZGV4KTsKK3N0YXRpYyBWYXJpYWJsZVBvcyAqdmFy aWFibGVfcG9zX2J1aWxkKFdpbmRvd0FnZ1N0YXRlICp3aW5zdGF0ZSk7CisKK3N0YXRpYyB2b2lk IGNoZWNrX3Jwcl9uYXZpZ2F0aW9uKE5vZGUgKm5vZGUsIGJvb2wgaXNfcHJldik7CitzdGF0aWMg Ym9vbCBycHJfbmF2aWdhdGlvbl93YWxrZXIoTm9kZSAqbm9kZSwgdm9pZCAqY29udGV4dCk7CiAK IC8qCiAgKiBpbml0aWFsaXplX3dpbmRvd2FnZ3JlZ2F0ZQpAQCAtNzc0LDEwICs4NTYsMTIgQEAg ZXZhbF93aW5kb3dhZ2dyZWdhdGVzKFdpbmRvd0FnZ1N0YXRlICp3aW5zdGF0ZSkKIAkgKgkgICB0 cmFuc2l0aW9uIGZ1bmN0aW9uLCBvcgogCSAqCSAtIHdlIGhhdmUgYW4gRVhDTFVTSU9OIGNsYXVz ZSwgb3IKIAkgKgkgLSBpZiB0aGUgbmV3IGZyYW1lIGRvZXNuJ3Qgb3ZlcmxhcCB0aGUgb2xkIG9u ZQorCSAqICAgLSBpZiBSUFIgaXMgZW5hYmxlZAogCSAqCiAJICogTm90ZSB0aGF0IHdlIGRvbid0 IHN0cmljdGx5IG5lZWQgdG8gcmVzdGFydCBpbiB0aGUgbGFzdCBjYXNlLCBidXQgaWYKIAkgKiB3 ZSdyZSBnb2luZyB0byByZW1vdmUgYWxsIHJvd3MgZnJvbSB0aGUgYWdncmVnYXRpb24gYW55d2F5 LCBhIHJlc3RhcnQKIAkgKiBzdXJlbHkgaXMgZmFzdGVyLgorCSAqICAgICB3ZSByZXN0YXJ0IGFn Z3JlZ2F0aW9uIHRvby4KIAkgKi0tLS0tLS0tLS0KIAkgKi8KIAludW1hZ2dzX3Jlc3RhcnQgPSAw OwpAQCAtNzg4LDcgKzg3Miw4IEBAIGV2YWxfd2luZG93YWdncmVnYXRlcyhXaW5kb3dBZ2dTdGF0 ZSAqd2luc3RhdGUpCiAJCQkod2luc3RhdGUtPmFnZ3JlZ2F0ZWRiYXNlICE9IHdpbnN0YXRlLT5m cmFtZWhlYWRwb3MgJiYKIAkJCSAhT2lkSXNWYWxpZChwZXJhZ2dzdGF0ZS0+aW52dHJhbnNmbl9v aWQpKSB8fAogCQkJKHdpbnN0YXRlLT5mcmFtZU9wdGlvbnMgJiBGUkFNRU9QVElPTl9FWENMVVNJ T04pIHx8Ci0JCQl3aW5zdGF0ZS0+YWdncmVnYXRlZHVwdG8gPD0gd2luc3RhdGUtPmZyYW1laGVh ZHBvcykKKwkJCXdpbnN0YXRlLT5hZ2dyZWdhdGVkdXB0byA8PSB3aW5zdGF0ZS0+ZnJhbWVoZWFk cG9zIHx8CisJCQlycHJfaXNfZGVmaW5lZCh3aW5zdGF0ZSkpCiAJCXsKIAkJCXBlcmFnZ3N0YXRl LT5yZXN0YXJ0ID0gdHJ1ZTsKIAkJCW51bWFnZ3NfcmVzdGFydCsrOwpAQCAtODYyLDcgKzk0Nywy MiBAQCBldmFsX3dpbmRvd2FnZ3JlZ2F0ZXMoV2luZG93QWdnU3RhdGUgKndpbnN0YXRlKQogCSAq IGhlYWQsIHNvIHRoYXQgdHVwbGVzdG9yZSBjYW4gZGlzY2FyZCB1bm5lY2Vzc2FyeSByb3dzLgog CSAqLwogCWlmIChhZ2dfd2lub2JqLT5tYXJrcHRyID49IDApCi0JCVdpblNldE1hcmtQb3NpdGlv bihhZ2dfd2lub2JqLCB3aW5zdGF0ZS0+ZnJhbWVoZWFkcG9zKTsKKwl7CisJCWludDY0CQltYXJr cG9zID0gd2luc3RhdGUtPmZyYW1laGVhZHBvczsKKworCQlpZiAocnByX2lzX2RlZmluZWQod2lu c3RhdGUpKQorCQl7CisJCQkvKgorCQkJICogSWYgUlBSIGlzIHVzZWQsIGl0IGlzIHBvc3NpYmxl IFBSRVYgd2FudHMgdG8gbG9vayBhdCB0aGUKKwkJCSAqIHByZXZpb3VzIHJvdy4gIFNvIHRoZSBt YXJrIHBvcyBzaG91bGQgYmUgZnJhbWVoZWFkcG9zIC0gMQorCQkJICogdW5sZXNzIGl0IGlzIGJl bG93IDAuCisJCQkgKi8KKwkJCW1hcmtwb3MgLT0gMTsKKwkJCWlmIChtYXJrcG9zIDwgMCkKKwkJ CQltYXJrcG9zID0gMDsKKwkJfQorCQlXaW5TZXRNYXJrUG9zaXRpb24oYWdnX3dpbm9iaiwgbWFy a3Bvcyk7CisJfQogCiAJLyoKIAkgKiBOb3cgcmVzdGFydCB0aGUgYWdncmVnYXRlcyB0aGF0IHJl cXVpcmUgaXQuCkBAIC05MTcsNiArMTAxNywxNCBAQCBldmFsX3dpbmRvd2FnZ3JlZ2F0ZXMoV2lu ZG93QWdnU3RhdGUgKndpbnN0YXRlKQogCXsKIAkJd2luc3RhdGUtPmFnZ3JlZ2F0ZWR1cHRvID0g d2luc3RhdGUtPmZyYW1laGVhZHBvczsKIAkJRXhlY0NsZWFyVHVwbGUoYWdnX3Jvd19zbG90KTsK KworCQkvKgorCQkgKiBJZiBSUFIgaXMgZGVmaW5lZCwgd2UgZG8gbm90IHVzZSBhZ2dyZWdhdGVk dXB0b19ub25yZXN0YXJ0ZWQuICBUbworCQkgKiBhdm9pZCBhc3NlcnRpb24gZmFpbHVyZSBiZWxv dywgd2UgcmVzZXQgYWdncmVnYXRlZHVwdG9fbm9ucmVzdGFydGVkCisJCSAqIHRvIGZyYW1laGVh ZHBvcy4KKwkJICovCisJCWlmIChycHJfaXNfZGVmaW5lZCh3aW5zdGF0ZSkpCisJCQlhZ2dyZWdh dGVkdXB0b19ub25yZXN0YXJ0ZWQgPSB3aW5zdGF0ZS0+ZnJhbWVoZWFkcG9zOwogCX0KIAogCS8q CkBAIC05MzAsNiArMTAzOCwxMiBAQCBldmFsX3dpbmRvd2FnZ3JlZ2F0ZXMoV2luZG93QWdnU3Rh dGUgKndpbnN0YXRlKQogCXsKIAkJaW50CQkJcmV0OwogCisjaWZkZWYgUlBSX0RFQlVHCisJCWVs b2coREVCVUcxLCAiPT09PT0gbG9vcCBpbiBmcmFtZSBzdGFydHM6IGFnZ3JlZ2F0ZWR1cHRvOiAi IElOVDY0X0ZPUk1BVCAiIGFnZ3JlZ2F0ZWRiYXNlOiAiIElOVDY0X0ZPUk1BVCwKKwkJCSB3aW5z dGF0ZS0+YWdncmVnYXRlZHVwdG8sCisJCQkgd2luc3RhdGUtPmFnZ3JlZ2F0ZWRiYXNlKTsKKyNl bmRpZgorCiAJCS8qIEZldGNoIG5leHQgcm93IGlmIHdlIGRpZG4ndCBhbHJlYWR5ICovCiAJCWlm IChUdXBJc051bGwoYWdnX3Jvd19zbG90KSkKIAkJewpAQCAtOTQ1LDkgKzEwNTksNTMgQEAgZXZh bF93aW5kb3dhZ2dyZWdhdGVzKFdpbmRvd0FnZ1N0YXRlICp3aW5zdGF0ZSkKIAkJcmV0ID0gcm93 X2lzX2luX2ZyYW1lKHdpbnN0YXRlLCB3aW5zdGF0ZS0+YWdncmVnYXRlZHVwdG8sIGFnZ19yb3df c2xvdCk7CiAJCWlmIChyZXQgPCAwKQogCQkJYnJlYWs7CisKIAkJaWYgKHJldCA9PSAwKQogCQkJ Z290byBuZXh0X3R1cGxlOwogCisJCWlmIChycHJfaXNfZGVmaW5lZCh3aW5zdGF0ZSkpCisJCXsK KyNpZmRlZiBSUFJfREVCVUcKKwkJCWVsb2coREVCVUcxLCAicmVkdWNlZF9mcmFtZV9tYXA6ICVk IGFnZ3JlZ2F0ZWR1cHRvOiAiIElOVDY0X0ZPUk1BVCAiIGFnZ3JlZ2F0ZWRiYXNlOiAiIElOVDY0 X0ZPUk1BVCwKKwkJCQkgZ2V0X3JlZHVjZWRfZnJhbWVfbWFwKHdpbnN0YXRlLAorCQkJCQkJCQkJ ICAgd2luc3RhdGUtPmFnZ3JlZ2F0ZWR1cHRvKSwKKwkJCQkgd2luc3RhdGUtPmFnZ3JlZ2F0ZWR1 cHRvLAorCQkJCSB3aW5zdGF0ZS0+YWdncmVnYXRlZGJhc2UpOworI2VuZGlmCisKKwkJCS8qCisJ CQkgKiBJZiB0aGUgcm93IHN0YXR1cyBhdCBjdXJyZW50cG9zIGlzIGFscmVhZHkgZGVjaWRlZCBh bmQgY3VycmVudAorCQkJICogcm93IHN0YXR1cyBpcyBub3QgZGVjaWRlZCB5ZXQsIGl0IG1lYW5z IHdlIHBhc3NlZCB0aGUgbGFzdAorCQkJICogcmVkdWNlZCBmcmFtZS4gVGltZSB0byBicmVhayB0 aGUgbG9vcC4KKwkJCSAqLworCQkJaWYgKGdldF9yZWR1Y2VkX2ZyYW1lX21hcCh3aW5zdGF0ZSwg d2luc3RhdGUtPmN1cnJlbnRwb3MpCisJCQkJIT0gUkZfTk9UX0RFVEVSTUlORUQgJiYKKwkJCQln ZXRfcmVkdWNlZF9mcmFtZV9tYXAod2luc3RhdGUsIHdpbnN0YXRlLT5hZ2dyZWdhdGVkdXB0bykK KwkJCQk9PSBSRl9OT1RfREVURVJNSU5FRCkKKwkJCQlicmVhazsKKworCQkJLyoKKwkJCSAqIE90 aGVyd2lzZSB3ZSBuZWVkIHRvIGNhbGN1bGF0ZSB0aGUgcmVkdWNlZCBmcmFtZS4KKwkJCSAqLwor CQkJcmV0ID0gcm93X2lzX2luX3JlZHVjZWRfZnJhbWUod2luc3RhdGUtPmFnZ193aW5vYmosCisJ CQkJCQkJCQkJICB3aW5zdGF0ZS0+YWdncmVnYXRlZHVwdG8pOworCQkJaWYgKHJldCA9PSAtMSkJ CS8qIHVubWF0Y2hlZCByb3cgKi8KKwkJCQlicmVhazsKKworCQkJLyoKKwkJCSAqIENoZWNrIGlm IGN1cnJlbnQgcm93IG5lZWRzIHRvIGJlIHNraXBwZWQgZHVlIHRvIG5vIG1hdGNoLgorCQkJICov CisJCQlpZiAoZ2V0X3JlZHVjZWRfZnJhbWVfbWFwKHdpbnN0YXRlLAorCQkJCQkJCQkJICB3aW5z dGF0ZS0+YWdncmVnYXRlZHVwdG8pID09IFJGX1NLSVBQRUQgJiYKKwkJCQl3aW5zdGF0ZS0+YWdn cmVnYXRlZHVwdG8gPT0gd2luc3RhdGUtPmFnZ3JlZ2F0ZWRiYXNlKQorCQkJeworI2lmZGVmIFJQ Ul9ERUJVRworCQkJCWVsb2coREVCVUcxLCAic2tpcCBjdXJyZW50IHJvdyBmb3IgYWdncmVnYXRp b24iKTsKKyNlbmRpZgorCQkJCWJyZWFrOworCQkJfQorCQl9CisKIAkJLyogU2V0IHR1cGxlIGNv bnRleHQgZm9yIGV2YWx1YXRpb24gb2YgYWdncmVnYXRlIGFyZ3VtZW50cyAqLwogCQl3aW5zdGF0 ZS0+dG1wY29udGV4dC0+ZWN4dF9vdXRlcnR1cGxlID0gYWdnX3Jvd19zbG90OwogCkBAIC05NzYs NiArMTEzNCw3IEBAIG5leHRfdHVwbGU6CiAJCUV4ZWNDbGVhclR1cGxlKGFnZ19yb3dfc2xvdCk7 CiAJfQogCisKIAkvKiBUaGUgZnJhbWUncyBlbmQgaXMgbm90IHN1cHBvc2VkIHRvIG1vdmUgYmFj a3dhcmRzLCBldmVyICovCiAJQXNzZXJ0KGFnZ3JlZ2F0ZWR1cHRvX25vbnJlc3RhcnRlZCA8PSB3 aW5zdGF0ZS0+YWdncmVnYXRlZHVwdG8pOwogCkBAIC0xMTk5LDYgKzEzNTgsNyBAQCBiZWdpbl9w YXJ0aXRpb24oV2luZG93QWdnU3RhdGUgKndpbnN0YXRlKQogCXdpbnN0YXRlLT5mcmFtZWhlYWRf dmFsaWQgPSBmYWxzZTsKIAl3aW5zdGF0ZS0+ZnJhbWV0YWlsX3ZhbGlkID0gZmFsc2U7CiAJd2lu c3RhdGUtPmdyb3VwdGFpbF92YWxpZCA9IGZhbHNlOworCWNyZWF0ZV9yZWR1Y2VkX2ZyYW1lX21h cCh3aW5zdGF0ZSk7CiAJd2luc3RhdGUtPnNwb29sZWRfcm93cyA9IDA7CiAJd2luc3RhdGUtPmN1 cnJlbnRwb3MgPSAwOwogCXdpbnN0YXRlLT5mcmFtZWhlYWRwb3MgPSAwOwpAQCAtMjE3MCw2ICsy MzMwLDExIEBAIEV4ZWNXaW5kb3dBZ2coUGxhblN0YXRlICpwc3RhdGUpCiAKIAlDSEVDS19GT1Jf SU5URVJSVVBUUygpOwogCisjaWZkZWYgUlBSX0RFQlVHCisJZWxvZyhERUJVRzEsICJFeGVjV2lu ZG93QWdnIGNhbGxlZC4gcG9zOiAiIElOVDY0X0ZPUk1BVCwKKwkJIHdpbnN0YXRlLT5jdXJyZW50 cG9zKTsKKyNlbmRpZgorCiAJaWYgKHdpbnN0YXRlLT5zdGF0dXMgPT0gV0lORE9XQUdHX0RPTkUp CiAJCXJldHVybiBOVUxMOwogCkBAIC0yMjc4LDYgKzI0NDMsMTcgQEAgRXhlY1dpbmRvd0FnZyhQ bGFuU3RhdGUgKnBzdGF0ZSkKIAkJLyogZG9uJ3QgZXZhbHVhdGUgdGhlIHdpbmRvdyBmdW5jdGlv bnMgd2hlbiB3ZSdyZSBpbiBwYXNzLXRocm91Z2ggbW9kZSAqLwogCQlpZiAod2luc3RhdGUtPnN0 YXR1cyA9PSBXSU5ET1dBR0dfUlVOKQogCQl7CisJCQkvKgorCQkJICogSWYgUlBSIGlzIGRlZmlu ZWQgYW5kIHNraXAgbW9kZSBpcyBuZXh0IHJvdywgd2UgbmVlZCB0byBjbGVhcgorCQkJICogZXhp c3RpbmcgcmVkdWNlZCBmcmFtZSBpbmZvIHNvIHRoYXQgd2UgbmV3bHkgY2FsY3VsYXRlIHRoZSBp bmZvCisJCQkgKiBzdGFydGluZyBmcm9tIGN1cnJlbnQgcm93LgorCQkJICovCisJCQlpZiAocnBy X2lzX2RlZmluZWQod2luc3RhdGUpKQorCQkJeworCQkJCWlmICh3aW5zdGF0ZS0+cnBTa2lwVG8g PT0gU1RfTkVYVF9ST1cpCisJCQkJCWNsZWFyX3JlZHVjZWRfZnJhbWVfbWFwKHdpbnN0YXRlKTsK KwkJCX0KKwogCQkJLyoKIAkJCSAqIEV2YWx1YXRlIHRydWUgd2luZG93IGZ1bmN0aW9ucwogCQkJ ICovCkBAIC0yNDQ0LDYgKzI2MjAsOSBAQCBFeGVjSW5pdFdpbmRvd0FnZyhXaW5kb3dBZ2cgKm5v ZGUsIEVTdGF0ZSAqZXN0YXRlLCBpbnQgZWZsYWdzKQogCVR1cGxlRGVzYwlzY2FuRGVzYzsKIAlM aXN0Q2VsbCAgICpsOwogCisJVGFyZ2V0RW50cnkgKnRlOworCUV4cHIJICAgKmV4cHI7CisKIAkv KiBjaGVjayBmb3IgdW5zdXBwb3J0ZWQgZmxhZ3MgKi8KIAlBc3NlcnQoIShlZmxhZ3MgJiAoRVhF Q19GTEFHX0JBQ0tXQVJEIHwgRVhFQ19GTEFHX01BUkspKSk7CiAKQEAgLTI1NDIsNiArMjcyMSwx NiBAQCBFeGVjSW5pdFdpbmRvd0FnZyhXaW5kb3dBZ2cgKm5vZGUsIEVTdGF0ZSAqZXN0YXRlLCBp bnQgZWZsYWdzKQogCXdpbnN0YXRlLT50ZW1wX3Nsb3RfMiA9IEV4ZWNJbml0RXh0cmFUdXBsZVNs b3QoZXN0YXRlLCBzY2FuRGVzYywKIAkJCQkJCQkJCQkJCSAgICZUVFNPcHNNaW5pbWFsVHVwbGUp OwogCisJd2luc3RhdGUtPnByZXZfc2xvdCA9IEV4ZWNJbml0RXh0cmFUdXBsZVNsb3QoZXN0YXRl LCBzY2FuRGVzYywKKwkJCQkJCQkJCQkJCSAmVFRTT3BzTWluaW1hbFR1cGxlKTsKKworCXdpbnN0 YXRlLT5uZXh0X3Nsb3QgPSBFeGVjSW5pdEV4dHJhVHVwbGVTbG90KGVzdGF0ZSwgc2NhbkRlc2Ms CisJCQkJCQkJCQkJCQkgJlRUU09wc01pbmltYWxUdXBsZSk7CisKKwl3aW5zdGF0ZS0+bnVsbF9z bG90ID0gRXhlY0luaXRFeHRyYVR1cGxlU2xvdChlc3RhdGUsIHNjYW5EZXNjLAorCQkJCQkJCQkJ CQkJICZUVFNPcHNNaW5pbWFsVHVwbGUpOworCXdpbnN0YXRlLT5udWxsX3Nsb3QgPSBFeGVjU3Rv cmVBbGxOdWxsVHVwbGUod2luc3RhdGUtPm51bGxfc2xvdCk7CisKIAkvKgogCSAqIGNyZWF0ZSBm cmFtZSBoZWFkIGFuZCB0YWlsIHNsb3RzIG9ubHkgaWYgbmVlZGVkIChtdXN0IGNyZWF0ZSBzbG90 cyBpbgogCSAqIGV4YWN0bHkgdGhlIHNhbWUgY2FzZXMgdGhhdCB1cGRhdGVfZnJhbWVoZWFkcG9z IGFuZCB1cGRhdGVfZnJhbWV0YWlscG9zCkBAIC0yNzIzLDYgKzI5MTIsNDkgQEAgRXhlY0luaXRX aW5kb3dBZ2coV2luZG93QWdnICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIAl3 aW5zdGF0ZS0+aW5SYW5nZUFzYyA9IG5vZGUtPmluUmFuZ2VBc2M7CiAJd2luc3RhdGUtPmluUmFu Z2VOdWxsc0ZpcnN0ID0gbm9kZS0+aW5SYW5nZU51bGxzRmlyc3Q7CiAKKwkvKiBTZXQgdXAgU0tJ UCBUTyB0eXBlICovCisJd2luc3RhdGUtPnJwU2tpcFRvID0gbm9kZS0+cnBTa2lwVG87CisJLyog U2V0IHVwIHJvdyBwYXR0ZXJuIHJlY29nbml0aW9uIFBBVFRFUk4gY2xhdXNlICovCisJd2luc3Rh dGUtPnBhdHRlcm5WYXJpYWJsZUxpc3QgPSBub2RlLT5wYXR0ZXJuVmFyaWFibGU7CisJd2luc3Rh dGUtPnBhdHRlcm5SZWdleHBMaXN0ID0gbm9kZS0+cGF0dGVyblJlZ2V4cDsKKworCS8qIFNldCB1 cCByb3cgcGF0dGVybiByZWNvZ25pdGlvbiBERUZJTkUgY2xhdXNlICovCisJd2luc3RhdGUtPmRl ZmluZUluaXRpYWwgPSBub2RlLT5kZWZpbmVJbml0aWFsOworCXdpbnN0YXRlLT5kZWZpbmVWYXJp YWJsZUxpc3QgPSBOSUw7CisJd2luc3RhdGUtPmRlZmluZUNsYXVzZUxpc3QgPSBOSUw7CisJaWYg KG5vZGUtPmRlZmluZUNsYXVzZSAhPSBOSUwpCisJeworCQkvKgorCQkgKiBUd2VhayBhcmcgdmFy IG9mIFBSRVYvTkVYVCBzbyB0aGF0IGl0IHJlZmVycyB0byBzY2FuL2lubmVyIHNsb3QuCisJCSAq LworCQlmb3JlYWNoKGwsIG5vZGUtPmRlZmluZUNsYXVzZSkKKwkJeworCQkJY2hhcgkgICAqbmFt ZTsKKwkJCUV4cHJTdGF0ZSAgKmV4cHM7CisKKwkJCXRlID0gbGZpcnN0KGwpOworCQkJbmFtZSA9 IHRlLT5yZXNuYW1lOworCQkJZXhwciA9IHRlLT5leHByOworCisjaWZkZWYgUlBSX0RFQlVHCisJ CQllbG9nKERFQlVHMSwgImRlZmluZVZhcmlhYmxlIG5hbWU6ICVzIiwgbmFtZSk7CisjZW5kaWYK KwkJCXdpbnN0YXRlLT5kZWZpbmVWYXJpYWJsZUxpc3QgPQorCQkJCWxhcHBlbmQod2luc3RhdGUt PmRlZmluZVZhcmlhYmxlTGlzdCwKKwkJCQkJCW1ha2VTdHJpbmcocHN0cmR1cChuYW1lKSkpOwor CQkJYXR0bm9fbWFwKChOb2RlICopIGV4cHIpOworCQkJZXhwcyA9IEV4ZWNJbml0RXhwcihleHBy LCAoUGxhblN0YXRlICopIHdpbnN0YXRlKTsKKwkJCXdpbnN0YXRlLT5kZWZpbmVDbGF1c2VMaXN0 ID0KKwkJCQlsYXBwZW5kKHdpbnN0YXRlLT5kZWZpbmVDbGF1c2VMaXN0LCBleHBzKTsKKwkJfQor CX0KKworCS8qCisJICogQnVpbGQgdmFyaWFibGVfcG9zCisJICovCisJaWYgKHdpbnN0YXRlLT5k ZWZpbmVJbml0aWFsKQorCQl3aW5zdGF0ZS0+dmFyaWFibGVfcG9zID0gdmFyaWFibGVfcG9zX2J1 aWxkKHdpbnN0YXRlKTsKKwogCXdpbnN0YXRlLT5hbGxfZmlyc3QgPSB0cnVlOwogCXdpbnN0YXRl LT5wYXJ0aXRpb25fc3Bvb2xlZCA9IGZhbHNlOwogCXdpbnN0YXRlLT5tb3JlX3BhcnRpdGlvbnMg PSBmYWxzZTsKQEAgLTI3MzEsNiArMjk2MywxMTEgQEAgRXhlY0luaXRXaW5kb3dBZ2coV2luZG93 QWdnICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIAlyZXR1cm4gd2luc3RhdGU7 CiB9CiAKKy8qCisgKiBSZXdyaXRlIHZhcm5vIG9mIFZhciBub2RlcyB0aGF0IGFyZSB0aGUgYXJn dW1lbnQgb2YgUFJFVi9ORVQgc28gdGhhdCB0aGV5CisgKiBzZWUgc2NhbiB0dXBsZSAoUFJFVikg b3IgaW5uZXIgdHVwbGUgKE5FWFQpLiAgQWxzbyB3ZSBjaGVjayB0aGUgYXJndW1lbnRzCisgKiBv ZiBQUkVWL05FWFQgaW5jbHVkZSBhdCBsZWFzdCAxIGNvbHVtbiByZWZlcmVuY2UuIFRoaXMgaXMg cmVxdWlyZWQgYnkgdGhlCisgKiBTUUwgc3RhbmRhcmQuCisgKi8KK3N0YXRpYyB2b2lkCithdHRu b19tYXAoTm9kZSAqbm9kZSkKK3sKKwkodm9pZCkgZXhwcmVzc2lvbl90cmVlX3dhbGtlcihub2Rl LCBhdHRub19tYXBfd2Fsa2VyLCBOVUxMKTsKK30KKworc3RhdGljIGJvb2wKK2F0dG5vX21hcF93 YWxrZXIoTm9kZSAqbm9kZSwgdm9pZCAqY29udGV4dCkKK3sKKwlGdW5jRXhwciAgICpmdW5jOwor CWludAkJCW5hcmdzOworCWJvb2wJCWlzX3ByZXY7CisKKwlpZiAobm9kZSA9PSBOVUxMKQorCQly ZXR1cm4gZmFsc2U7CisKKwlpZiAoSXNBKG5vZGUsIEZ1bmNFeHByKSkKKwl7CisJCWZ1bmMgPSAo RnVuY0V4cHIgKikgbm9kZTsKKworCQlpZiAoZnVuYy0+ZnVuY2lkID09IEZfUFJFViB8fCBmdW5j LT5mdW5jaWQgPT0gRl9ORVhUKQorCQl7CisJCQkvKgorCQkJICogVGhlIFNRTCBzdGFuZGFyZCBh bGxvd3MgdG8gaGF2ZSB0d28gbW9yZSBhcmd1bWVudHMgZm9ybSBvZgorCQkJICogUFJFVi9ORVhU LiAgQnV0IGN1cnJlbnRseSB3ZSBhbGxvdyBvbmx5IDEgYXJndW1lbnQgZm9ybS4KKwkJCSAqLwor CQkJbmFyZ3MgPSBsaXN0X2xlbmd0aChmdW5jLT5hcmdzKTsKKwkJCWlmIChsaXN0X2xlbmd0aChm dW5jLT5hcmdzKSAhPSAxKQorCQkJCWVsb2coRVJST1IsICJQUkVWL05FWFQgbXVzdCBoYXZlIDEg YXJndW1lbnQgYnV0IGZ1bmN0aW9uICVkIGhhcyAlZCBhcmdzIiwKKwkJCQkJIGZ1bmMtPmZ1bmNp ZCwgbmFyZ3MpOworCisJCQkvKgorCQkJICogQ2hlY2sgZXhwciBvZiBQUkVWL05FWFQgYXJ1Z3Vt ZW50cyBhbmQgcmVwbGFjZSB2YXJuby4KKwkJCSAqLworCQkJaXNfcHJldiA9IChmdW5jLT5mdW5j aWQgPT0gRl9QUkVWKSA/IHRydWUgOiBmYWxzZTsKKwkJCWNoZWNrX3Jwcl9uYXZpZ2F0aW9uKG5v ZGUsIGlzX3ByZXYpOworCQl9CisJfQorCXJldHVybiBleHByZXNzaW9uX3RyZWVfd2Fsa2VyKG5v ZGUsIGF0dG5vX21hcF93YWxrZXIsIE5VTEwpOworfQorCisvKgorICogUmV3cml0ZSB2YXJubyBv ZiBWYXIgb2YgUlBSIG5hdmlnYXRpb24gb3BlcmF0aW9ucyAoUFJFVi9ORVhUKS4KKyAqIElmIGlz X3ByZXYgaXMgdHJ1ZSwgd2UgdGFrZSBjYXJlIFBSRVYsIG90aGVyd2lzZSBORVhULgorICovCitz dGF0aWMgdm9pZAorY2hlY2tfcnByX25hdmlnYXRpb24oTm9kZSAqbm9kZSwgYm9vbCBpc19wcmV2 KQoreworCU5hdmlnYXRpb25JbmZvIGNvbnRleHQ7CisKKwljb250ZXh0LmlzX3ByZXYgPSBpc19w cmV2OworCWNvbnRleHQubnVtX3ZhcnMgPSAwOworCSh2b2lkKSBleHByZXNzaW9uX3RyZWVfd2Fs a2VyKG5vZGUsIHJwcl9uYXZpZ2F0aW9uX3dhbGtlciwgJmNvbnRleHQpOworCWlmIChjb250ZXh0 Lm51bV92YXJzIDwgMSkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQllcnJtc2coInJvdyBwYXR0ZXJu IG5hdmlnYXRpb24gb3BlcmF0aW9uJ3MgYXJndW1lbnQgbXVzdCBpbmNsdWRlIGF0IGxlYXN0IG9u ZSBjb2x1bW4gcmVmZXJlbmNlIikpOworfQorCitzdGF0aWMgYm9vbAorcnByX25hdmlnYXRpb25f d2Fsa2VyKE5vZGUgKm5vZGUsIHZvaWQgKmNvbnRleHQpCit7CisJTmF2aWdhdGlvbkluZm8gKm5h diA9IChOYXZpZ2F0aW9uSW5mbyAqKSBjb250ZXh0OworCisJaWYgKG5vZGUgPT0gTlVMTCkKKwkJ cmV0dXJuIGZhbHNlOworCisJc3dpdGNoIChub2RlVGFnKG5vZGUpKQorCXsKKwkJY2FzZSBUX1Zh cjoKKwkJCXsKKwkJCQlWYXIJCSAgICp2YXIgPSAoVmFyICopIG5vZGU7CisKKwkJCQluYXYtPm51 bV92YXJzKys7CisKKwkJCQlpZiAobmF2LT5pc19wcmV2KQorCQkJCXsKKwkJCQkJLyoKKwkJCQkJ ICogUmV3cml0ZSB2YXJubyBmcm9tIE9VVEVSX1ZBUiB0byByZWd1bGFyIHZhciBubyBzbyB0aGF0 CisJCQkJCSAqIHRoZSB2YXIgcmVmZXJlbmNlcyBzY2FuIHR1cGxlLgorCQkJCQkgKi8KKwkJCQkJ dmFyLT52YXJubyA9IHZhci0+dmFybm9zeW47CisJCQkJfQorCQkJCWVsc2UKKwkJCQkJdmFyLT52 YXJubyA9IElOTkVSX1ZBUjsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFRfQ29uc3Q6CisJCWNh c2UgVF9GdW5jRXhwcjoKKwkJY2FzZSBUX09wRXhwcjoKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6 CisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQllcnJtc2coInJvdyBwYXR0ZXJuIG5hdmlnYXRpb24g b3BlcmF0aW9uJ3MgYXJndW1lbnQgaW5jbHVkZXMgdW5zdXBwb3J0ZWQgZXhwcmVzc2lvbiIpKTsK Kwl9CisJcmV0dXJuIGV4cHJlc3Npb25fdHJlZV93YWxrZXIobm9kZSwgcnByX25hdmlnYXRpb25f d2Fsa2VyLCBjb250ZXh0KTsKK30KKworCiAvKiAtLS0tLS0tLS0tLS0tLS0tLQogICogRXhlY0Vu ZFdpbmRvd0FnZwogICogLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTI3ODgsNiArMzEyNSw4IEBAIEV4 ZWNSZVNjYW5XaW5kb3dBZ2coV2luZG93QWdnU3RhdGUgKm5vZGUpCiAJRXhlY0NsZWFyVHVwbGUo bm9kZS0+YWdnX3Jvd19zbG90KTsKIAlFeGVjQ2xlYXJUdXBsZShub2RlLT50ZW1wX3Nsb3RfMSk7 CiAJRXhlY0NsZWFyVHVwbGUobm9kZS0+dGVtcF9zbG90XzIpOworCUV4ZWNDbGVhclR1cGxlKG5v ZGUtPnByZXZfc2xvdCk7CisJRXhlY0NsZWFyVHVwbGUobm9kZS0+bmV4dF9zbG90KTsKIAlpZiAo bm9kZS0+ZnJhbWVoZWFkX3Nsb3QpCiAJCUV4ZWNDbGVhclR1cGxlKG5vZGUtPmZyYW1laGVhZF9z bG90KTsKIAlpZiAobm9kZS0+ZnJhbWV0YWlsX3Nsb3QpCkBAIC0zMTQ4LDcgKzM0ODcsOCBAQCB3 aW5kb3dfZ2V0dHVwbGVzbG90KFdpbmRvd09iamVjdCB3aW5vYmosIGludDY0IHBvcywgVHVwbGVU YWJsZVNsb3QgKnNsb3QpCiAJCXJldHVybiBmYWxzZTsKIAogCWlmIChwb3MgPCB3aW5vYmotPm1h cmtwb3MpCi0JCWVsb2coRVJST1IsICJjYW5ub3QgZmV0Y2ggcm93IGJlZm9yZSBXaW5kb3dPYmpl Y3QncyBtYXJrIHBvc2l0aW9uIik7CisJCWVsb2coRVJST1IsICJjYW5ub3QgZmV0Y2ggcm93OiAi IElOVDY0X0ZPUk1BVCAiIGJlZm9yZSBXaW5kb3dPYmplY3QncyBtYXJrIHBvc2l0aW9uOiAiIElO VDY0X0ZPUk1BVCwKKwkJCSBwb3MsIHdpbm9iai0+bWFya3Bvcyk7CiAKIAlvbGRjb250ZXh0ID0g TWVtb3J5Q29udGV4dFN3aXRjaFRvKHdpbnN0YXRlLT5zcy5wcy5wc19FeHByQ29udGV4dC0+ZWN4 dF9wZXJfcXVlcnlfbWVtb3J5KTsKIApAQCAtMzQ2OCwxNCArMzgwOCw1NCBAQCBXaW5HZXRGdW5j QXJnSW5GcmFtZShXaW5kb3dPYmplY3Qgd2lub2JqLCBpbnQgYXJnbm8sCiAJV2luZG93QWdnU3Rh dGUgKndpbnN0YXRlOwogCUV4cHJDb250ZXh0ICplY29udGV4dDsKIAlUdXBsZVRhYmxlU2xvdCAq c2xvdDsKLQlpbnQ2NAkJYWJzX3BvczsKLQlpbnQ2NAkJbWFya19wb3M7CiAKIAlBc3NlcnQoV2lu ZG93T2JqZWN0SXNWYWxpZCh3aW5vYmopKTsKIAl3aW5zdGF0ZSA9IHdpbm9iai0+d2luc3RhdGU7 CiAJZWNvbnRleHQgPSB3aW5zdGF0ZS0+c3MucHMucHNfRXhwckNvbnRleHQ7CiAJc2xvdCA9IHdp bnN0YXRlLT50ZW1wX3Nsb3RfMTsKIAorCWlmIChXaW5HZXRTbG90SW5GcmFtZSh3aW5vYmosIHNs b3QsCisJCQkJCQkgIHJlbHBvcywgc2Vla3R5cGUsIHNldF9tYXJrLAorCQkJCQkJICBpc251bGws IGlzb3V0KSA9PSAwKQorCXsKKwkJZWNvbnRleHQtPmVjeHRfb3V0ZXJ0dXBsZSA9IHNsb3Q7CisJ CXJldHVybiBFeGVjRXZhbEV4cHIoKEV4cHJTdGF0ZSAqKSBsaXN0X250aCh3aW5vYmotPmFyZ3N0 YXRlcywgYXJnbm8pLAorCQkJCQkJCWVjb250ZXh0LCBpc251bGwpOworCX0KKworCWlmIChpc291 dCkKKwkJKmlzb3V0ID0gdHJ1ZTsKKwkqaXNudWxsID0gdHJ1ZTsKKwlyZXR1cm4gKERhdHVtKSAw OworfQorCisvKgorICogV2luR2V0U2xvdEluRnJhbWUKKyAqIHNsb3Q6IFR1cGxlVGFibGVTbG90 IHRvIHN0b3JlIHRoZSByZXN1bHQKKyAqIHJlbHBvczogc2lnbmVkIHJvd2NvdW50IG9mZnNldCBm cm9tIHRoZSBzZWVrIHBvc2l0aW9uCisgKiBzZWVrdHlwZTogV0lORE9XX1NFRUtfSEVBRCBvciBX SU5ET1dfU0VFS19UQUlMCisgKiBzZXRfbWFyazogSWYgdGhlIHJvdyBpcyBmb3VuZC9pbiBmcmFt ZSBhbmQgc2V0X21hcmsgaXMgdHJ1ZSwgdGhlIG1hcmsgaXMKKyAqCQltb3ZlZCB0byB0aGUgcm93 IGFzIGEgc2lkZS1lZmZlY3QuCisgKiBpc251bGw6IG91dHB1dCBhcmd1bWVudCwgcmVjZWl2ZXMg aXNudWxsIHN0YXR1cyBvZiByZXN1bHQKKyAqIGlzb3V0OiBvdXRwdXQgYXJndW1lbnQsIHNldCB0 byBpbmRpY2F0ZSB3aGV0aGVyIHRhcmdldCByb3cgcG9zaXRpb24KKyAqCQlpcyBvdXQgb2YgZnJh bWUgKGNhbiBwYXNzIE5VTEwgaWYgY2FsbGVyIGRvZXNuJ3QgY2FyZSBhYm91dCB0aGlzKQorICoK KyAqIFJldHVybnMgMCBpZiB3ZSBzdWNjZXNzZnVsbHQgZ290IHRoZSBzbG90LiBmYWxzZSBpZiBv dXQgb2YgZnJhbWUuCisgKiAoYWxzbyBpc291dCBpcyBzZXQpCisgKi8KK3N0YXRpYyBpbnQKK1dp bkdldFNsb3RJbkZyYW1lKFdpbmRvd09iamVjdCB3aW5vYmosIFR1cGxlVGFibGVTbG90ICpzbG90 LAorCQkJCSAgaW50IHJlbHBvcywgaW50IHNlZWt0eXBlLCBib29sIHNldF9tYXJrLAorCQkJCSAg Ym9vbCAqaXNudWxsLCBib29sICppc291dCkKK3sKKwlXaW5kb3dBZ2dTdGF0ZSAqd2luc3RhdGU7 CisJaW50NjQJCWFic19wb3M7CisJaW50NjQJCW1hcmtfcG9zOworCWludAkJCW51bV9yZWR1Y2Vk X2ZyYW1lOworCisJQXNzZXJ0KFdpbmRvd09iamVjdElzVmFsaWQod2lub2JqKSk7CisJd2luc3Rh dGUgPSB3aW5vYmotPndpbnN0YXRlOworCiAJc3dpdGNoIChzZWVrdHlwZSkKIAl7CiAJCWNhc2Ug V0lORE9XX1NFRUtfQ1VSUkVOVDoKQEAgLTM1NDIsMTEgKzM5MjIsMjUgQEAgV2luR2V0RnVuY0Fy Z0luRnJhbWUoV2luZG93T2JqZWN0IHdpbm9iaiwgaW50IGFyZ25vLAogCQkJCQkJIHdpbnN0YXRl LT5mcmFtZU9wdGlvbnMpOwogCQkJCQlicmVhazsKIAkJCX0KKwkJCW51bV9yZWR1Y2VkX2ZyYW1l ID0gcm93X2lzX2luX3JlZHVjZWRfZnJhbWUod2lub2JqLAorCQkJCQkJCQkJCQkJCQl3aW5zdGF0 ZS0+ZnJhbWVoZWFkcG9zKTsKKwkJCWlmIChudW1fcmVkdWNlZF9mcmFtZSA8IDApCisJCQkJZ290 byBvdXRfb2ZfZnJhbWU7CisJCQllbHNlIGlmIChudW1fcmVkdWNlZF9mcmFtZSA+IDApCisJCQkJ aWYgKHJlbHBvcyA+PSBudW1fcmVkdWNlZF9mcmFtZSkKKwkJCQkJZ290byBvdXRfb2ZfZnJhbWU7 CiAJCQlicmVhazsKIAkJY2FzZSBXSU5ET1dfU0VFS19UQUlMOgogCQkJLyogcmVqZWN0aW5nIHJl bHBvcyA+IDAgaXMgZWFzeSBhbmQgc2ltcGxpZmllcyBjb2RlIGJlbG93ICovCiAJCQlpZiAocmVs cG9zID4gMCkKIAkJCQlnb3RvIG91dF9vZl9mcmFtZTsKKworCQkJLyoKKwkJCSAqIFJQUiBjYXJl cyBhYm91dCBmcmFtZSBoZWFkIHBvcy4gTmVlZCB0byBjYWxsCisJCQkgKiB1cGRhdGVfZnJhbWVo ZWFkcG9zCisJCQkgKi8KKwkJCXVwZGF0ZV9mcmFtZWhlYWRwb3Mod2luc3RhdGUpOworCiAJCQl1 cGRhdGVfZnJhbWV0YWlscG9zKHdpbnN0YXRlKTsKIAkJCWFic19wb3MgPSB3aW5zdGF0ZS0+ZnJh bWV0YWlscG9zIC0gMSArIHJlbHBvczsKIApAQCAtMzYxMyw2ICs0MDA3LDE0IEBAIFdpbkdldEZ1 bmNBcmdJbkZyYW1lKFdpbmRvd09iamVjdCB3aW5vYmosIGludCBhcmdubywKIAkJCQkJbWFya19w b3MgPSAwOwkvKiBrZWVwIGNvbXBpbGVyIHF1aWV0ICovCiAJCQkJCWJyZWFrOwogCQkJfQorCisJ CQludW1fcmVkdWNlZF9mcmFtZSA9IHJvd19pc19pbl9yZWR1Y2VkX2ZyYW1lKHdpbm9iaiwKKwkJ CQkJCQkJCQkJCQkJd2luc3RhdGUtPmZyYW1laGVhZHBvcyArIHJlbHBvcyk7CisJCQlpZiAobnVt X3JlZHVjZWRfZnJhbWUgPCAwKQorCQkJCWdvdG8gb3V0X29mX2ZyYW1lOworCQkJZWxzZSBpZiAo bnVtX3JlZHVjZWRfZnJhbWUgPiAwKQorCQkJCWFic19wb3MgPSB3aW5zdGF0ZS0+ZnJhbWVoZWFk cG9zICsgcmVscG9zICsKKwkJCQkJbnVtX3JlZHVjZWRfZnJhbWUgLSAxOwogCQkJYnJlYWs7CiAJ CWRlZmF1bHQ6CiAJCQllbG9nKEVSUk9SLCAidW5yZWNvZ25pemVkIHdpbmRvdyBzZWVrIHR5cGU6 ICVkIiwgc2Vla3R5cGUpOwpAQCAtMzYzMSwxNSArNDAzMywxMyBAQCBXaW5HZXRGdW5jQXJnSW5G cmFtZShXaW5kb3dPYmplY3Qgd2lub2JqLCBpbnQgYXJnbm8sCiAJCSppc291dCA9IGZhbHNlOwog CWlmIChzZXRfbWFyaykKIAkJV2luU2V0TWFya1Bvc2l0aW9uKHdpbm9iaiwgbWFya19wb3MpOwot CWVjb250ZXh0LT5lY3h0X291dGVydHVwbGUgPSBzbG90OwotCXJldHVybiBFeGVjRXZhbEV4cHIo KEV4cHJTdGF0ZSAqKSBsaXN0X250aCh3aW5vYmotPmFyZ3N0YXRlcywgYXJnbm8pLAotCQkJCQkJ ZWNvbnRleHQsIGlzbnVsbCk7CisJcmV0dXJuIDA7CiAKIG91dF9vZl9mcmFtZToKIAlpZiAoaXNv dXQpCiAJCSppc291dCA9IHRydWU7CiAJKmlzbnVsbCA9IHRydWU7Ci0JcmV0dXJuIChEYXR1bSkg MDsKKwlyZXR1cm4gLTE7CiB9CiAKIC8qCkBAIC0zNjcwLDMgKzQwNzAsMTQyMCBAQCBXaW5HZXRG dW5jQXJnQ3VycmVudChXaW5kb3dPYmplY3Qgd2lub2JqLCBpbnQgYXJnbm8sIGJvb2wgKmlzbnVs bCkKIAlyZXR1cm4gRXhlY0V2YWxFeHByKChFeHByU3RhdGUgKikgbGlzdF9udGgod2lub2JqLT5h cmdzdGF0ZXMsIGFyZ25vKSwKIAkJCQkJCWVjb250ZXh0LCBpc251bGwpOwogfQorCisvKgorICog cnByX2lzX2RlZmluZWQKKyAqIHJldHVybiB0cnVlIGlmIFJvdyBwYXR0ZXJuIHJlY29nbml0aW9u IGlzIGRlZmluZWQuCisgKi8KK3N0YXRpYworYm9vbAorcnByX2lzX2RlZmluZWQoV2luZG93QWdn U3RhdGUgKndpbnN0YXRlKQoreworCXJldHVybiB3aW5zdGF0ZS0+cGF0dGVyblZhcmlhYmxlTGlz dCAhPSBOSUw7Cit9CisKKy8qCisgKiAtLS0tLS0tLS0tLS0tLS0tLQorICogcm93X2lzX2luX3Jl ZHVjZWRfZnJhbWUKKyAqIERldGVybWluZSB3aGV0aGVyIGEgcm93IGlzIGluIHRoZSBjdXJyZW50 IHJvdydzIHJlZHVjZWQgd2luZG93IGZyYW1lCisgKiBhY2NvcmRpbmcgdG8gcm93IHBhdHRlcm4g bWF0Y2hpbmcKKyAqCisgKiBUaGUgcm93IG11c3QgaGFzIGJlZW4gYWxyZWFkeSBkZXRlcm1pbmVk IHRoYXQgaXQgaXMgaW4gYSBmdWxsIHdpbmRvdyBmcmFtZQorICogYW5kIGZldGNoZWQgaXQgaW50 byBzbG90LgorICoKKyAqIFJldHVybnM6CisgKiA9IDAsIFJQUiBpcyBub3QgZGVmaW5lZC4KKyAq ID4wLCBpZiB0aGUgcm93IGlzIHRoZSBmaXJzdCBpbiB0aGUgcmVkdWNlZCBmcmFtZS4gUmV0dXJu IHRoZSBudW1iZXIgb2Ygcm93cworICogaW4gdGhlIHJlZHVjZWQgZnJhbWUuCisgKiAtMSwgaWYg dGhlIHJvdyBpcyB1bm1hdGNoZWQgcm93CisgKiAtMiwgaWYgdGhlIHJvdyBpcyBpbiB0aGUgcmVk dWNlZCBmcmFtZSBidXQgbmVlZGVkIHRvIGJlIHNraXBwZWQgYmVjYXVzZSBvZgorICogQUZURVIg TUFUQ0ggU0tJUCBQQVNUIExBU1QgUk9XCisgKiAtLS0tLS0tLS0tLS0tLS0tLQorICovCitzdGF0 aWMKK2ludAorcm93X2lzX2luX3JlZHVjZWRfZnJhbWUoV2luZG93T2JqZWN0IHdpbm9iaiwgaW50 NjQgcG9zKQoreworCVdpbmRvd0FnZ1N0YXRlICp3aW5zdGF0ZSA9IHdpbm9iai0+d2luc3RhdGU7 CisJaW50CQkJc3RhdGU7CisJaW50CQkJcnRuOworCisJaWYgKCFycHJfaXNfZGVmaW5lZCh3aW5z dGF0ZSkpCisJeworCQkvKgorCQkgKiBSUFIgaXMgbm90IGRlZmluZWQuIEFzc3VtZSB0aGF0IHdl IGFyZSBhbHdheXMgaW4gdGhlIHRoZSByZWR1Y2VkCisJCSAqIHdpbmRvdyBmcmFtZS4KKwkJICov CisJCXJ0biA9IDA7CisjaWZkZWYgUlBSX0RFQlVHCisJCWVsb2coREVCVUcxLCAicm93X2lzX2lu X3JlZHVjZWRfZnJhbWUgcmV0dXJucyAlZDogcG9zOiAiIElOVDY0X0ZPUk1BVCwKKwkJCSBydG4s IHBvcyk7CisjZW5kaWYKKwkJcmV0dXJuIHJ0bjsKKwl9CisKKwlzdGF0ZSA9IGdldF9yZWR1Y2Vk X2ZyYW1lX21hcCh3aW5zdGF0ZSwgcG9zKTsKKworCWlmIChzdGF0ZSA9PSBSRl9OT1RfREVURVJN SU5FRCkKKwl7CisJCXVwZGF0ZV9mcmFtZWhlYWRwb3Mod2luc3RhdGUpOworCQl1cGRhdGVfcmVk dWNlZF9mcmFtZSh3aW5vYmosIHBvcyk7CisJfQorCisJc3RhdGUgPSBnZXRfcmVkdWNlZF9mcmFt ZV9tYXAod2luc3RhdGUsIHBvcyk7CisKKwlzd2l0Y2ggKHN0YXRlKQorCXsKKwkJCWludDY0CQlp OworCQkJaW50CQkJbnVtX3JlZHVjZWRfcm93czsKKworCQljYXNlIFJGX0ZSQU1FX0hFQUQ6CisJ CQludW1fcmVkdWNlZF9yb3dzID0gMTsKKwkJCWZvciAoaSA9IHBvcyArIDE7CisJCQkJIGdldF9y ZWR1Y2VkX2ZyYW1lX21hcCh3aW5zdGF0ZSwgaSkgPT0gUkZfU0tJUFBFRDsgaSsrKQorCQkJCW51 bV9yZWR1Y2VkX3Jvd3MrKzsKKwkJCXJ0biA9IG51bV9yZWR1Y2VkX3Jvd3M7CisJCQlicmVhazsK KworCQljYXNlIFJGX1NLSVBQRUQ6CisJCQlydG4gPSAtMjsKKwkJCWJyZWFrOworCisJCWNhc2Ug UkZfVU5NQVRDSEVEOgorCQkJcnRuID0gLTE7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJ ZWxvZyhFUlJPUiwgIlVucmVjb2duaXplZCBzdGF0ZTogJWQgYXQ6ICIgSU5UNjRfRk9STUFULAor CQkJCSBzdGF0ZSwgcG9zKTsKKwkJCWJyZWFrOworCX0KKworI2lmZGVmIFJQUl9ERUJVRworCWVs b2coREVCVUcxLCAicm93X2lzX2luX3JlZHVjZWRfZnJhbWUgcmV0dXJucyAlZDogcG9zOiAiIElO VDY0X0ZPUk1BVCwKKwkJIHJ0biwgcG9zKTsKKyNlbmRpZgorCXJldHVybiBydG47Cit9CisKKyNk ZWZpbmUgUkVEVUNFRF9GUkFNRV9NQVBfSU5JVF9TSVpFCTEwMjRMCisKKy8qCisgKiBjcmVhdGVf cmVkdWNlZF9mcmFtZV9tYXAKKyAqIENyZWF0ZSByZWR1Y2VkIGZyYW1lIG1hcAorICovCitzdGF0 aWMKK3ZvaWQKK2NyZWF0ZV9yZWR1Y2VkX2ZyYW1lX21hcChXaW5kb3dBZ2dTdGF0ZSAqd2luc3Rh dGUpCit7CisJd2luc3RhdGUtPnJlZHVjZWRfZnJhbWVfbWFwID0KKwkJTWVtb3J5Q29udGV4dEFs bG9jKHdpbnN0YXRlLT5wYXJ0Y29udGV4dCwKKwkJCQkJCSAgIFJFRFVDRURfRlJBTUVfTUFQX0lO SVRfU0laRSk7CisJd2luc3RhdGUtPmFsbG9jX3N6ID0gUkVEVUNFRF9GUkFNRV9NQVBfSU5JVF9T SVpFOworCWNsZWFyX3JlZHVjZWRfZnJhbWVfbWFwKHdpbnN0YXRlKTsKK30KKworLyoKKyAqIGNs ZWFyX3JlZHVjZWRfZnJhbWVfbWFwCisgKiBDbGVhciByZWR1Y2VkIGZyYW1lIG1hcAorICovCitz dGF0aWMKK3ZvaWQKK2NsZWFyX3JlZHVjZWRfZnJhbWVfbWFwKFdpbmRvd0FnZ1N0YXRlICp3aW5z dGF0ZSkKK3sKKwlBc3NlcnQod2luc3RhdGUtPnJlZHVjZWRfZnJhbWVfbWFwICE9IE5VTEwpOwor CU1lbVNldCh3aW5zdGF0ZS0+cmVkdWNlZF9mcmFtZV9tYXAsIFJGX05PVF9ERVRFUk1JTkVELAor CQkgICB3aW5zdGF0ZS0+YWxsb2Nfc3opOworfQorCisvKgorICogZ2V0X3JlZHVjZWRfZnJhbWVf bWFwCisgKiBHZXQgcmVkdWNlZCBmcmFtZSBtYXAgc3BlY2lmaWVkIGJ5IHBvcworICovCitzdGF0 aWMKK2ludAorZ2V0X3JlZHVjZWRfZnJhbWVfbWFwKFdpbmRvd0FnZ1N0YXRlICp3aW5zdGF0ZSwg aW50NjQgcG9zKQoreworCUFzc2VydCh3aW5zdGF0ZS0+cmVkdWNlZF9mcmFtZV9tYXAgIT0gTlVM TCk7CisJQXNzZXJ0KHBvcyA+PSAwKTsKKworCS8qCisJICogSWYgcG9zIGlzIG5vdCBpbiB0aGUg cmVkdWNlZCBmcmFtZSBtYXAsIGl0IG1lYW5zIHRoYXQgYW55IGluZm8KKwkgKiByZWdhcmRpbmcg dGhlIHBvcyBoYXMgbm90IGJlZW4gcmVnaXN0ZXJlZCB5ZXQuIFNvIHdlIHJldHVybgorCSAqIFJG X05PVF9ERVRFUk1JTkVELgorCSAqLworCWlmIChwb3MgPj0gd2luc3RhdGUtPmFsbG9jX3N6KQor CQlyZXR1cm4gUkZfTk9UX0RFVEVSTUlORUQ7CisKKwlyZXR1cm4gd2luc3RhdGUtPnJlZHVjZWRf ZnJhbWVfbWFwW3Bvc107Cit9CisKKy8qCisgKiByZWdpc3Rlcl9yZWR1Y2VkX2ZyYW1lX21hcAor ICogQWRkL3JlcGxhY2UgcmVkdWNlZCBmcmFtZSBtYXAgbWVtYmVyIGF0IHBvcy4KKyAqIElmIHRo ZXJlJ3Mgbm8gZW5vdWdoIHNwYWNlLCBleHBhbmQgdGhlIG1hcC4KKyAqLworc3RhdGljCit2b2lk CityZWdpc3Rlcl9yZWR1Y2VkX2ZyYW1lX21hcChXaW5kb3dBZ2dTdGF0ZSAqd2luc3RhdGUsIGlu dDY0IHBvcywgaW50IHZhbCkKK3sKKwlpbnQ2NAkJcmVhbGxvY19zejsKKworCUFzc2VydCh3aW5z dGF0ZS0+cmVkdWNlZF9mcmFtZV9tYXAgIT0gTlVMTCk7CisKKwlpZiAocG9zIDwgMCkKKwkJZWxv ZyhFUlJPUiwgIndyb25nIHBvczogIiBJTlQ2NF9GT1JNQVQsIHBvcyk7CisKKwlpZiAocG9zID4g d2luc3RhdGUtPmFsbG9jX3N6IC0gMSkKKwl7CisJCXJlYWxsb2Nfc3ogPSB3aW5zdGF0ZS0+YWxs b2Nfc3ogKiAyOworCisJCXdpbnN0YXRlLT5yZWR1Y2VkX2ZyYW1lX21hcCA9CisJCQlyZXBhbGxv Yyh3aW5zdGF0ZS0+cmVkdWNlZF9mcmFtZV9tYXAsIHJlYWxsb2Nfc3opOworCisJCU1lbVNldCh3 aW5zdGF0ZS0+cmVkdWNlZF9mcmFtZV9tYXAgKyB3aW5zdGF0ZS0+YWxsb2Nfc3osCisJCQkgICBS Rl9OT1RfREVURVJNSU5FRCwgcmVhbGxvY19zeiAtIHdpbnN0YXRlLT5hbGxvY19zeik7CisKKwkJ d2luc3RhdGUtPmFsbG9jX3N6ID0gcmVhbGxvY19zejsKKwl9CisKKwl3aW5zdGF0ZS0+cmVkdWNl ZF9mcmFtZV9tYXBbcG9zXSA9IHZhbDsKK30KKworLyoKKyAqIHVwZGF0ZV9yZWR1Y2VkX2ZyYW1l CisgKgkJVXBkYXRlIHJlZHVjZWQgZnJhbWUgaW5mby4KKyAqLworc3RhdGljCit2b2lkCit1cGRh dGVfcmVkdWNlZF9mcmFtZShXaW5kb3dPYmplY3Qgd2lub2JqLCBpbnQ2NCBwb3MpCit7CisJV2lu ZG93QWdnU3RhdGUgKndpbnN0YXRlID0gd2lub2JqLT53aW5zdGF0ZTsKKwlMaXN0Q2VsbCAgICps YzEsCisJCQkgICAqbGMyOworCWJvb2wJCWV4cHJlc3Npb25fcmVzdWx0OworCWludAkJCW51bV9t YXRjaGVkX3Jvd3M7CisJaW50NjQJCW9yaWdpbmFsX3BvczsKKwlib29sCQlhbnltYXRjaDsKKwlT dHJpbmdJbmZvCWVuY29kZWRfc3RyOworCVN0cmluZ1NldCAgKnN0cl9zZXQ7CisJYm9vbAkJZ3Jl ZWR5ID0gZmFsc2U7CisJaW50NjQJCXJlc3VsdF9wb3MsIGk7CisJaW50CQkJaW5pdF9zaXplOwor CisJLyoKKwkgKiBTZXQgb2YgcGF0dGVybiB2YXJpYWJsZXMgZXZhbHVhdGVkIHRvIHRydWUuIEVh Y2ggY2hhcmFjdGVyIGNvcnJlc3BvbmRzCisJICogdG8gcGF0dGVybiB2YXJpYWJsZS4gRXhhbXBs ZTogc3RyX3NldFswXSA9ICJBQiI7IHN0cl9zZXRbMV0gPSAiQUMiOyBJbgorCSAqIHRoaXMgY2Fz ZSBhdCByb3cgMCBBIGFuZCBCIGFyZSB0cnVlLCBhbmQgQSBhbmQgQyBhcmUgdHJ1ZSBpbiByb3cg MS4KKwkgKi8KKworCS8qIGluaXRpYWxpemUgcGF0dGVybiB2YXJpYWJsZXMgc2V0ICovCisJc3Ry X3NldCA9IHN0cmluZ19zZXRfaW5pdCgpOworCisJLyogc2F2ZSBvcmlnaW5hbCBwb3MgKi8KKwlv cmlnaW5hbF9wb3MgPSBwb3M7CisKKwkvKgorCSAqIENhbGN1bGF0ZSBpbml0aWFsIG1lbW9yeSBh bGxvY2F0aW9uIHNpemUgZnJvbSB0aGUgbnVtYmVyIG9mIHBhdHRlcm4KKwkgKiB2YXJpYWJsZXMs CisJICovCisJaW5pdF9zaXplID0gc2l6ZW9mKGNoYXIpICogbGlzdF9sZW5ndGgod2luc3RhdGUt PnBhdHRlcm5WYXJpYWJsZUxpc3QpICsgMTsKKworCS8qCisJICogQ2hlY2sgaWYgdGhlIHBhdHRl cm4gZG9lcyBub3QgaW5jbHVkZSBhbnkgZ3JlZWR5IHF1YW50aWZpZXIuIElmIGl0IGRvZXMKKwkg KiBub3QsIHdlIGNhbiBqdXN0IGFwcGx5IHRoZSBwYXR0ZXJuIHRvIGVhY2ggcm93LiBJZiBpdCBz dWNjZWVkcywgd2UgYXJlCisJICogZG9uZS4KKwkgKi8KKwlmb3JlYWNoKGxjMSwgd2luc3RhdGUt PnBhdHRlcm5SZWdleHBMaXN0KQorCXsKKwkJY2hhcgkgICAqcXVhbnRpZmllciA9IHN0clZhbChs Zmlyc3QobGMxKSk7CisKKwkJaWYgKCpxdWFudGlmaWVyID09ICcrJyB8fCAqcXVhbnRpZmllciA9 PSAnKicpCisJCXsKKwkJCWdyZWVkeSA9IHRydWU7CisJCQlicmVhazsKKwkJfQorCX0KKworCS8q CisJICogTm9uIGdyZWVkeSBjYXNlCisJICovCisJaWYgKCFncmVlZHkpCisJeworCQludW1fbWF0 Y2hlZF9yb3dzID0gMDsKKwkJZW5jb2RlZF9zdHIgPSBtYWtlU3RyaW5nSW5mb0V4dChpbml0X3Np emUpOworCisJCWZvcmVhY2gobGMxLCB3aW5zdGF0ZS0+cGF0dGVyblZhcmlhYmxlTGlzdCkKKwkJ eworCQkJY2hhcgkgICAqdm5hbWUgPSBzdHJWYWwobGZpcnN0KGxjMSkpOworI2lmZGVmIFJQUl9E RUJVRworCQkJZWxvZyhERUJVRzEsICJwb3M6ICIgSU5UNjRfRk9STUFUICIgcGF0dGVybiB2bmFt ZTogJXMiLAorCQkJCSBwb3MsIHZuYW1lKTsKKyNlbmRpZgorCQkJZXhwcmVzc2lvbl9yZXN1bHQg PSBmYWxzZTsKKworCQkJLyogZXZhbHVhdGUgcm93IHBhdHRlcm4gYWdhaW5zdCBjdXJyZW50IHJv dyAqLworCQkJcmVzdWx0X3BvcyA9IGV2YWx1YXRlX3BhdHRlcm4od2lub2JqLCBwb3MsIHZuYW1l LAorCQkJCQkJCQkJCSAgZW5jb2RlZF9zdHIsICZleHByZXNzaW9uX3Jlc3VsdCk7CisJCQlpZiAo IWV4cHJlc3Npb25fcmVzdWx0IHx8IHJlc3VsdF9wb3MgPCAwKQorCQkJeworI2lmZGVmIFJQUl9E RUJVRworCQkJCWVsb2coREVCVUcxLCAiZXhwcmVzc2lvbiByZXN1bHQgaXMgZmFsc2Ugb3Igb3V0 IG9mIGZyYW1lIik7CisjZW5kaWYKKwkJCQlyZWdpc3Rlcl9yZWR1Y2VkX2ZyYW1lX21hcCh3aW5z dGF0ZSwgb3JpZ2luYWxfcG9zLAorCQkJCQkJCQkJCSAgIFJGX1VOTUFUQ0hFRCk7CisJCQkJZGVz dHJveVN0cmluZ0luZm8oZW5jb2RlZF9zdHIpOworCQkJCXJldHVybjsKKwkJCX0KKwkJCS8qIG1v dmUgdG8gbmV4dCByb3cgKi8KKwkJCXBvcysrOworCQkJbnVtX21hdGNoZWRfcm93cysrOworCQl9 CisJCWRlc3Ryb3lTdHJpbmdJbmZvKGVuY29kZWRfc3RyKTsKKyNpZmRlZiBSUFJfREVCVUcKKwkJ ZWxvZyhERUJVRzEsICJwYXR0ZXJuIG1hdGNoZWQiKTsKKyNlbmRpZgorCQlyZWdpc3Rlcl9yZWR1 Y2VkX2ZyYW1lX21hcCh3aW5zdGF0ZSwgb3JpZ2luYWxfcG9zLCBSRl9GUkFNRV9IRUFEKTsKKwor CQlmb3IgKGkgPSBvcmlnaW5hbF9wb3MgKyAxOyBpIDwgb3JpZ2luYWxfcG9zICsgbnVtX21hdGNo ZWRfcm93czsgaSsrKQorCQl7CisJCQlyZWdpc3Rlcl9yZWR1Y2VkX2ZyYW1lX21hcCh3aW5zdGF0 ZSwgaSwgUkZfU0tJUFBFRCk7CisJCX0KKwkJcmV0dXJuOworCX0KKworCS8qCisJICogR3JlZWR5 IHF1YW50aWZpZXJzIGluY2x1ZGVkLiBMb29wIG92ZXIgdW50aWwgbm9uZSBvZiBwYXR0ZXJuIG1h dGNoZXMgb3IKKwkgKiBlbmNvdW50ZXJzIGVuZCBvZiBmcmFtZS4KKwkgKi8KKwlmb3IgKDs7KQor CXsKKwkJcmVzdWx0X3BvcyA9IC0xOworCisJCS8qCisJCSAqIExvb3Agb3ZlciBlYWNoIFBBVFRF Uk4gdmFyaWFibGUuCisJCSAqLworCQlhbnltYXRjaCA9IGZhbHNlOworCisJCWVuY29kZWRfc3Ry ID0gbWFrZVN0cmluZ0luZm9FeHQoaW5pdF9zaXplKTsKKworCQlmb3Jib3RoKGxjMSwgd2luc3Rh dGUtPnBhdHRlcm5WYXJpYWJsZUxpc3QsIGxjMiwKKwkJCQl3aW5zdGF0ZS0+cGF0dGVyblJlZ2V4 cExpc3QpCisJCXsKKwkJCWNoYXIJICAgKnZuYW1lID0gc3RyVmFsKGxmaXJzdChsYzEpKTsKKyNp ZmRlZiBSUFJfREVCVUcKKwkJCWNoYXIJICAgKnF1YW50aWZpZXIgPSBzdHJWYWwobGZpcnN0KGxj MikpOworCisJCQllbG9nKERFQlVHMSwgInBvczogIiBJTlQ2NF9GT1JNQVQgIiBwYXR0ZXJuIHZu YW1lOiAlcyBxdWFudGlmaWVyOiAlcyIsCisJCQkJIHBvcywgdm5hbWUsIHF1YW50aWZpZXIpOwor I2VuZGlmCisJCQlleHByZXNzaW9uX3Jlc3VsdCA9IGZhbHNlOworCisJCQkvKiBldmFsdWF0ZSBy b3cgcGF0dGVybiBhZ2FpbnN0IGN1cnJlbnQgcm93ICovCisJCQlyZXN1bHRfcG9zID0gZXZhbHVh dGVfcGF0dGVybih3aW5vYmosIHBvcywgdm5hbWUsCisJCQkJCQkJCQkJICBlbmNvZGVkX3N0ciwg JmV4cHJlc3Npb25fcmVzdWx0KTsKKwkJCWlmIChleHByZXNzaW9uX3Jlc3VsdCkKKwkJCXsKKyNp ZmRlZiBSUFJfREVCVUcKKwkJCQllbG9nKERFQlVHMSwgImV4cHJlc3Npb24gcmVzdWx0IGlzIHRy dWUiKTsKKyNlbmRpZgorCQkJCWFueW1hdGNoID0gdHJ1ZTsKKwkJCX0KKworCQkJLyoKKwkJCSAq IElmIG91dCBvZiBmcmFtZSwgd2UgYXJlIGRvbmUuCisJCQkgKi8KKwkJCWlmIChyZXN1bHRfcG9z IDwgMCkKKwkJCQlicmVhazsKKwkJfQorCisJCWlmICghYW55bWF0Y2gpCisJCXsKKwkJCS8qIG5v bmUgb2YgcGF0dGVybnMgbWF0Y2hlZC4gKi8KKwkJCWJyZWFrOworCQl9CisKKwkJc3RyaW5nX3Nl dF9hZGQoc3RyX3NldCwgZW5jb2RlZF9zdHIsIDApOworCisjaWZkZWYgUlBSX0RFQlVHCisJCWVs b2coREVCVUcxLCAicG9zOiAiIElOVDY0X0ZPUk1BVCAiIGVuY29kZWRfc3RyOiAlcyIsCisJCQkg ZW5jb2RlZF9zdHItPmRhdGEpOworI2VuZGlmCisKKwkJLyogbW92ZSB0byBuZXh0IHJvdyAqLwor CQlwb3MrKzsKKworCQlpZiAocmVzdWx0X3BvcyA8IDApCisJCXsKKwkJCS8qIG91dCBvZiBmcmFt ZSAqLworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoc3RyaW5nX3NldF9nZXRfc2l6ZShzdHJf c2V0KSA9PSAwKQorCXsKKwkJLyogbm8gbWF0Y2ggZm91bmQgaW4gdGhlIGZpcnN0IHJvdyAqLwor CQlyZWdpc3Rlcl9yZWR1Y2VkX2ZyYW1lX21hcCh3aW5zdGF0ZSwgb3JpZ2luYWxfcG9zLCBSRl9V Tk1BVENIRUQpOworCQlkZXN0cm95U3RyaW5nSW5mbyhlbmNvZGVkX3N0cik7CisJCXJldHVybjsK Kwl9CisKKyNpZmRlZiBSUFJfREVCVUcKKwllbG9nKERFQlVHMiwgInBvczogIiBJTlQ2NF9GT1JN QVQgIiBlbmNvZGVkX3N0cjogJXMiLAorCQkgcG9zLCBlbmNvZGVkX3N0ci0+ZGF0YSk7CisjZW5k aWYKKworCS8qIGxvb2sgZm9yIG1hdGNoaW5nIHBhdHRlcm4gdmFyaWFibGUgc2VxdWVuY2UgKi8K KyNpZmRlZiBSUFJfREVCVUcKKwllbG9nKERFQlVHMSwgInNlYXJjaF9zdHJfc2V0IHN0YXJ0ZWQi KTsKKyNlbmRpZgorCW51bV9tYXRjaGVkX3Jvd3MgPSBzZWFyY2hfc3RyX3NldCh3aW5zdGF0ZSwg c3RyX3NldCk7CisKKyNpZmRlZiBSUFJfREVCVUcKKwllbG9nKERFQlVHMSwgInNlYXJjaF9zdHJf c2V0IHJldHVybnM6ICVkIiwgbnVtX21hdGNoZWRfcm93cyk7CisjZW5kaWYKKwlzdHJpbmdfc2V0 X2Rpc2NhcmQoc3RyX3NldCk7CisKKwkvKgorCSAqIFdlIGFyZSBhdCB0aGUgZmlyc3Qgcm93IGlu IHRoZSByZWR1Y2VkIGZyYW1lLiAgU2F2ZSB0aGUgbnVtYmVyIG9mCisJICogbWF0Y2hlZCByb3dz IGFzIHRoZSBudW1iZXIgb2Ygcm93cyBpbiB0aGUgcmVkdWNlZCBmcmFtZS4KKwkgKi8KKwlpZiAo bnVtX21hdGNoZWRfcm93cyA8PSAwKQorCXsKKwkJLyogbm8gbWF0Y2ggKi8KKwkJcmVnaXN0ZXJf cmVkdWNlZF9mcmFtZV9tYXAod2luc3RhdGUsIG9yaWdpbmFsX3BvcywgUkZfVU5NQVRDSEVEKTsK Kwl9CisJZWxzZQorCXsKKwkJcmVnaXN0ZXJfcmVkdWNlZF9mcmFtZV9tYXAod2luc3RhdGUsIG9y aWdpbmFsX3BvcywgUkZfRlJBTUVfSEVBRCk7CisKKwkJZm9yIChpID0gb3JpZ2luYWxfcG9zICsg MTsgaSA8IG9yaWdpbmFsX3BvcyArIG51bV9tYXRjaGVkX3Jvd3M7IGkrKykKKwkJeworCQkJcmVn aXN0ZXJfcmVkdWNlZF9mcmFtZV9tYXAod2luc3RhdGUsIGksIFJGX1NLSVBQRUQpOworCQl9CisJ fQorCisJcmV0dXJuOworfQorCisvKgorICogc2VhcmNoX3N0cl9zZXQKKyAqCisgKiBQZXJmb3Jt IHBhdHRlcm4gbWF0Y2hpbmcgdXNpbmcgInBhdHRlcm4iIGFnYWluc3QgaW5wdXRfc3RyX3NldC4g cGF0dGVybiBpcworICogYSByZWd1bGFyIGV4cHJlc3Npb24gc3RyaW5nIGRlcml2ZWQgZnJvbSBQ QVRURVJOIGNsYXVzZS4gTm90ZSB0aGF0IHRoZQorICogcmVndWxhciBleHByZXNzaW9uIHN0cmlu ZyBpcyBwcmVmaXhlZCBieSAnXicgYW5kIGZvbGxvd2VkIGJ5IGluaXRpYWxzCisgKiByZXByZXNl bnRlZCBpbiBhIHNhbWUgd2F5IGFzIHN0cl9zZXQuIHN0cl9zZXQgaXMgYSBzZXQgb2YgU3RyaW5n SW5mby4gRWFjaAorICogU3RyaW5nSW5mbyBoYXMgYSBzdHJpbmcgY29tcHJpc2luZyBpbml0aWFs cyBvZiBwYXR0ZXJuIHZhcmlhYmxlIHN0cmluZ3MKKyAqIGJlaW5nIHRydWUgaW4gYSByb3cuIFRo ZSBpbml0aWFscyBhcmUgb25lIG9mIFthLXpdLCBwYXJhbGxlbCB0byB0aGUgb3JkZXIKKyAqIG9m IHZhcmlhYmxlIG5hbWVzIGluIERFRklORSBjbGF1c2UuIFN1cHBvc2UgREVGSU5FIGhhcyB2YXJp YWJsZXMgU1RBUlQsIFVQCisgKiBhbmQgRE9XTi4gSWYgUEFUVEVSTiBoYXMgU1RBUlQsIFVQKyBh bmQgRE9XTiwgdGhlbiB0aGUgaW5pdGlhbHMgaW4gUEFUVEVSTgorICogd2lsbCBiZSAnYScsICdi JyBhbmQgJ2MnLiBUaGUgInBhdHRlcm4iIHdpbGwgYmUgIl5hYitjIi4KKyAqCisgKiB2YXJpYWJs ZV9wb3MgaXMgYW4gYXJyYXkgcmVwcmVzZW50aW5nIHRoZSBvcmRlciBvZiBwYXR0ZXJuIHZhcmlh YmxlIHN0cmluZworICogaW5pdGlhbHMgaW4gUEFUVEVSTiBjbGF1c2UuICBGb3IgZXhhbXBsZSBp bml0aWFsICdhJyBwb3Rpb24gaXMgaW4KKyAqIHZhcmlhYmxlX3Bvc1swXS5wb3NbMF0gPSAwLiBO b3RlIHRoYXQgaWYgdGhlIHBhdHRlcm4gaXMgIlNUQVJUIFVQIERPV04gVVAiCisgKiAoVVAgYXBw ZWFycyB0d2ljZSksIHRoZW4gIlVQIiAoaW5pdGlhbCBpcyAnYicpIGhhcyB0d28gcG9zaXRpb24g MSBhbmQKKyAqIDMuIFRodXMgdmFyaWFibGVfcG9zIGZvciBiIGlzIHZhcmlhYmxlX3Bvc1sxXS5w b3NbMF0gPSAxIGFuZAorICogdmFyaWFibGVfcG9zWzFdLnBvc1sxXSA9IDMuCisgKgorICogUmV0 dXJucyB0aGUgbG9uZ2VzdCBudW1iZXIgb2YgdGhlIG1hdGNoaW5nIHJvd3MgKGdyZWVkeSBtYXRj aGluZykgaWYKKyAqIHF1YXRpZmllciAnKycgb3IgJyonIGlzIGluY2x1ZGVkIGluICJwYXR0ZXJu Ii4KKyAqLworc3RhdGljCitpbnQKK3NlYXJjaF9zdHJfc2V0KFdpbmRvd0FnZ1N0YXRlICp3aW5z dGF0ZSwgU3RyaW5nU2V0ICppbnB1dF9zdHJfc2V0KQoreworCWNoYXIJICAgKnBhdHRlcm47CQkv KiBzZWFyY2ggcmVnZXhwIHBhdHRlcm4gKi8KKwlWYXJpYWJsZVBvcyAqdmFyaWFibGVfcG9zOwor CWludAkJCXNldF9zaXplOwkJLyogbnVtYmVyIG9mIHJvd3MgaW4gdGhlIHNldCAqLworCWludAkJ CXJlc3VsdGxlbjsKKwlpbnQJCQlpbmRleDsKKwlTdHJpbmdTZXQgICpuZXdfc3RyX3NldDsKKwlp bnQJCQluZXdfc3RyX3NpemU7CisJaW50CQkJbGVuOworCWludAkJCWluZm87CisJY2hhcgkJdGFp bF9wYXR0ZXJuX2luaXRpYWw7CisKKwkvKgorCSAqIFNldCBsYXN0IGluaXRpYWwgY2hhciB0byB0 YWlsX3BhdHRlcm5faW5pdGlhbCBpZiB3ZSBjYW4gYXBwbHkgInRhaWwKKwkgKiBwYXR0ZXJuIGlu aXRpYWwgb3B0aW1pemF0aW9uIi4gIElmIHRoZSBsYXN0IHJlZ2V4cCBjb21wb25lbnQgaW4gcGF0 dGVybgorCSAqIGlzIHdpdGggJysnIHF1YXRpZmllciwgc2V0IHRoZSBpbml0aWFsIHRvIHRhaWxf cGF0dGVybl9pbml0aWFsLiAgRm9yCisJICogZXhhbXBsZSBpZiBwYXR0ZXJuID0gImFiKyIsIHRh aWxfcGF0dGVybl9pbml0aWFsIHdpbGwgYmUgJ2InLgorCSAqIE90aGVyd2lzZSwgdGFpbF9wYXR0 ZXJuX2luaXRpYWwgaXMgJ1wwJy4KKwkgKi8KKwlwYXR0ZXJuID0gd2luc3RhdGUtPnBhdHRlcm5f c3RyLT5kYXRhOworCWlmIChwYXR0ZXJuW3N0cmxlbihwYXR0ZXJuKSAtIDFdID09ICcrJykKKwkJ dGFpbF9wYXR0ZXJuX2luaXRpYWwgPSBwYXR0ZXJuW3N0cmxlbihwYXR0ZXJuKSAtIDJdOworCWVs c2UKKwkJdGFpbF9wYXR0ZXJuX2luaXRpYWwgPSAnXDAnOworCisJLyoKKwkgKiBHZW5lcmF0ZSBh bGwgcG9zc2libGUgcGF0dGVybiB2YXJpYWJsZSBuYW1lIGluaXRpYWxzIGFzIGEgc2V0IG9mCisJ ICogU3RyaW5nSW5mbyBuYW1lZCAibmV3X3N0cl9zZXQiLiAgRm9yIGV4YW1wbGUsIGlmIHdlIGhh dmUgdHdvIHJvd3MKKwkgKiBoYXZpbmcgImFiIiAocm93IDApIGFuZCAiYWMiIChyb3cgMSkgaW4g dGhlIGlucHV0IHN0cl9zZXQsIG5ld19zdHJfc2V0CisJICogd2lsbCBoYXZlIHNldCBvZiBTdHJp bmdJbmZvICJhYSIsICJhYyIsICJiYSIgYW5kICJiYyIgaW4gdGhlIGVuZC4KKwkgKi8KKwl2YXJp YWJsZV9wb3MgPSB3aW5zdGF0ZS0+dmFyaWFibGVfcG9zOworCW5ld19zdHJfc2V0ID0gZ2VuZXJh dGVfcGF0dGVybnMoaW5wdXRfc3RyX3NldCwgcGF0dGVybiwgdmFyaWFibGVfcG9zLAorCQkJCQkJ CQkJdGFpbF9wYXR0ZXJuX2luaXRpYWwpOworCisJLyoKKwkgKiBQZXJmb3JtIHBhdHRlcm4gbWF0 Y2hpbmcgdG8gZmluZCBvdXQgdGhlIGxvbmdlc3QgbWF0Y2guCisJICovCisJbmV3X3N0cl9zaXpl ID0gc3RyaW5nX3NldF9nZXRfc2l6ZShuZXdfc3RyX3NldCk7CisJbGVuID0gMDsKKwlyZXN1bHRs ZW4gPSAwOworCXNldF9zaXplID0gc3RyaW5nX3NldF9nZXRfc2l6ZShpbnB1dF9zdHJfc2V0KTsK KworCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IG5ld19zdHJfc2l6ZTsgaW5kZXgrKykKKwl7CisJ CVN0cmluZ0luZm8JczsKKworCQlzID0gc3RyaW5nX3NldF9nZXQobmV3X3N0cl9zZXQsIGluZGV4 LCAmaW5mbyk7CisJCWlmIChzID09IE5VTEwpCisJCQljb250aW51ZTsJCQkvKiBubyBkYXRhICov CisKKwkJLyoKKwkJICogSWYgdGhlIHN0cmluZyBpcyBzY2hlZHVsZWQgdG8gYmUgZGlzY2FyZGVk LCB3ZSBqdXN0IGRpc3JlZ2FyZCBpdC4KKwkJICovCisJCWlmIChpbmZvICYgU1RSU0VUX0RJU0NB UkRFRCkKKwkJCWNvbnRpbnVlOworCisJCWxlbiA9IGRvX3BhdHRlcm5fbWF0Y2gocGF0dGVybiwg cy0+ZGF0YSwgcy0+bGVuKTsKKwkJaWYgKGxlbiA+IHJlc3VsdGxlbikKKwkJeworCQkJLyogcmVt ZW1iZXIgdGhlIGxvbmdlc3QgbWF0Y2ggKi8KKwkJCXJlc3VsdGxlbiA9IGxlbjsKKworCQkJLyoK KwkJCSAqIElmIHRoZSBzaXplIG9mIHJlc3VsdCBzZXQgaXMgZXF1YWwgdG8gdGhlIG51bWJlciBv ZiByb3dzIGluIHRoZQorCQkJICogc2V0LCB3ZSBhcmUgZG9uZSBiZWNhdXNlIGl0J3Mgbm90IHBv c3NpYmxlIHRoYXQgdGhlIG51bWJlciBvZgorCQkJICogbWF0Y2hpbmcgcm93cyBleGNlZWRzIHRo ZSBudW1iZXIgb2Ygcm93cyBpbiB0aGUgc2V0LgorCQkJICovCisJCQlpZiAocmVzdWx0bGVuID49 IHNldF9zaXplKQorCQkJCWJyZWFrOworCQl9CisJfQorCisJLyogd2Ugbm8gbG9uZ2VyIG5lZWQg bmV3IHN0cmluZyBzZXQgKi8KKwlzdHJpbmdfc2V0X2Rpc2NhcmQobmV3X3N0cl9zZXQpOworCisJ cmV0dXJuIHJlc3VsdGxlbjsKK30KKworLyoKKyAqIGdlbmVyYXRlX3BhdHRlcm5zCisgKgorICog R2VuZXJhdGUgYWxsIHBvc3NpYmxlIHBhdHRlcm4gdmFyaWFibGUgbmFtZSBpbml0aWFscyBpbiAn aW5wdXRfc3RyX3NldCcgYXMKKyAqIGEgc2V0IG9mIFN0cmluZ0luZm8gYW5kIHJldHVybiBpdC4g IEZvciBleGFtcGxlLCBpZiB3ZSBoYXZlIHR3byByb3dzIGhhdmluZworICogImFiIiAocm93IDAp IGFuZCAiYWMiIChyb3cgMSkgaW4gJ2lucHV0IHN0cl9zZXQnLCByZXR1cm5lZCBTdHJpbmdTZXQg d2lsbAorICogaGF2ZSBzZXQgb2YgU3RyaW5nSW5mbyAiYWEiLCAiYWMiLCAiYmEiIGFuZCAiYmMi IGluIHRoZSBlbmQuCisgKiAndmFyaWFibGVfcG9zJyBhbmQgJ3RhaWxfcGF0dGVybl9pbml0aWFs JyBhcmUgdXNlZCBmb3IgcHJ1bmluZworICogb3B0aW1pemF0aW9uLgorICovCitzdGF0aWMKK1N0 cmluZ1NldCAqCitnZW5lcmF0ZV9wYXR0ZXJucyhTdHJpbmdTZXQgKmlucHV0X3N0cl9zZXQsIGNo YXIgKnBhdHRlcm4sCisJCQkJICBWYXJpYWJsZVBvcyAqdmFyaWFibGVfcG9zLCBjaGFyIHRhaWxf cGF0dGVybl9pbml0aWFsKQoreworCVN0cmluZ1NldCAgKm9sZF9zdHJfc2V0LAorCQkJICAgKm5l d19zdHJfc2V0OworCWludAkJCWluZGV4OworCWludAkJCXNldF9zaXplOworCWludAkJCW9sZF9z ZXRfc2l6ZTsKKwlpbnQJCQlpbmZvOworCWludAkJCXJlc3VsdGxlbjsKKwlTdHJpbmdJbmZvCXN0 cjsKKwlpbnQJCQlpOworCWNoYXIJICAgKnA7CisKKwluZXdfc3RyX3NldCA9IHN0cmluZ19zZXRf aW5pdCgpOworCXNldF9zaXplID0gc3RyaW5nX3NldF9nZXRfc2l6ZShpbnB1dF9zdHJfc2V0KTsK KwlpZiAoc2V0X3NpemUgPT0gMCkJCQkvKiBpZiB0aGVyZSdzIG5vIHJvdyBpbiBpbnB1dCwgcmV0 dXJuIGVtcHR5CisJCQkJCQkJCSAqIHNldCAqLworCQlyZXR1cm4gbmV3X3N0cl9zZXQ7CisKKwly ZXN1bHRsZW4gPSAwOworCisJLyoKKwkgKiBHZW5lcmF0ZSBpbml0aWFsIG5ld19zdHJpbmdfc2V0 IGZvciBpbnB1dCByb3cgMC4KKwkgKi8KKwlzdHIgPSBzdHJpbmdfc2V0X2dldChpbnB1dF9zdHJf c2V0LCAwLCAmaW5mbyk7CisJcCA9IHN0ci0+ZGF0YTsKKworCS8qCisJICogTG9vcCBvdmVyIGVh Y2ggbmV3IHBhdHRlcm4gdmFyaWFibGUgY2hhci4KKwkgKi8KKwl3aGlsZSAoKnApCisJeworCQlT dHJpbmdJbmZvCW5ldyA9IG1ha2VTdHJpbmdJbmZvKCk7CisKKwkJLyogYWRkIHBhdHRlcm4gdmFy aWFibGUgY2hhciAqLworCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihuZXcsICpwKTsKKwkJLyogYWRk IG5ldyBvbmUgdG8gc3RyaW5nIHNldCAqLworCQlzdHJpbmdfc2V0X2FkZChuZXdfc3RyX3NldCwg bmV3LCAwKTsKKwkJcCsrOwkJCQkJLyogbmV4dCBwYXR0ZXJuIHZhcmlhYmxlICovCisJfQorCisJ LyoKKwkgKiBHZW5lcmF0ZSBuZXdfc3RyaW5nX3NldCBmb3IgZWFjaCBpbnB1dCByb3cuCisJICov CisJZm9yIChpbmRleCA9IDE7IGluZGV4IDwgc2V0X3NpemU7IGluZGV4KyspCisJeworCQkvKiBw cmV2aW91cyBuZXcgc3RyIHNldCBub3cgYmVjb21lcyBvbGQgc3RyIHNldCAqLworCQlvbGRfc3Ry X3NldCA9IG5ld19zdHJfc2V0OworCQluZXdfc3RyX3NldCA9IHN0cmluZ19zZXRfaW5pdCgpOwkv KiBjcmVhdGUgbmV3IHN0cmluZyBzZXQgKi8KKwkJLyogcGljayB1cCBpbnB1dCBzdHJpbmcgKi8K KwkJc3RyID0gc3RyaW5nX3NldF9nZXQoaW5wdXRfc3RyX3NldCwgaW5kZXgsICZpbmZvKTsKKwkJ b2xkX3NldF9zaXplID0gc3RyaW5nX3NldF9nZXRfc2l6ZShvbGRfc3RyX3NldCk7CisKKwkJLyoK KwkJICogTG9vcCBvdmVyIGVhY2ggcm93IGluIHRoZSBwcmV2aW91cyByZXN1bHQgc2V0LgorCQkg Ki8KKwkJZm9yIChpID0gMDsgaSA8IG9sZF9zZXRfc2l6ZTsgaSsrKQorCQl7CisJCQljaGFyCQls YXN0X29sZF9jaGFyOworCQkJaW50CQkJb2xkX3N0cl9sZW47CisJCQlpbnQJCQlvbGRfaW5mbzsK KwkJCVN0cmluZ0luZm8Jb2xkOworCisJCQlvbGQgPSBzdHJpbmdfc2V0X2dldChvbGRfc3RyX3Nl dCwgaSwgJm9sZF9pbmZvKTsKKwkJCXAgPSBvbGQtPmRhdGE7CisJCQlvbGRfc3RyX2xlbiA9IG9s ZC0+bGVuOworCQkJaWYgKG9sZF9zdHJfbGVuID4gMCkKKwkJCQlsYXN0X29sZF9jaGFyID0gcFtv bGRfc3RyX2xlbiAtIDFdOworCQkJZWxzZQorCQkJCWxhc3Rfb2xkX2NoYXIgPSAnXDAnOworCisJ CQkvKiBDYW4gdGhpcyBvbGQgc2V0IGJlIGRpc2NhcmRlZD8gKi8KKwkJCWlmIChvbGRfaW5mbyAm IFNUUlNFVF9ESVNDQVJERUQpCisJCQkJY29udGludWU7CQkvKiBkaXNjYXJkIHRoZSBvbGQgc3Ry aW5nICovCisKKwkJCS8qIElzIHRoaXMgb2xkIHNldCBmcm96ZW4/ICovCisJCQllbHNlIGlmIChv bGRfaW5mbyAmIFNUUlNFVF9GUk9aRU4pCisJCQl7CisJCQkJLyogaWYgc2hvcnRlciBtYXRjaC4g d2UgY2FuIGRpc2NhcmQgaXQgKi8KKwkJCQlpZiAob2xkX3N0cl9sZW4gPCByZXN1bHRsZW4pCisJ CQkJCWNvbnRpbnVlOwkvKiBkaXNjYXJkIHRoZSBzaG9ydGVyIHN0cmluZyAqLworCisJCQkJLyog bW92ZSB0aGUgb2xkIHNldCB0byBuZXdfc3RyX3NldCAqLworCQkJCXN0cmluZ19zZXRfYWRkKG5l d19zdHJfc2V0LCBvbGQsIG9sZF9pbmZvKTsKKwkJCQlvbGRfc3RyX3NldC0+c3RyX3NldFtpXSA9 IE5VTEw7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCS8qCisJCQkgKiBsb29wIG92ZXIgZWFj aCBwYXR0ZXJuIHZhcmlhYmxlIGluaXRpYWwgY2hhciBpbiB0aGUgaW5wdXQgc2V0LgorCQkJICov CisJCQlmb3IgKHAgPSBzdHItPmRhdGE7ICpwOyBwKyspCisJCQl7CisJCQkJLyoKKwkJCQkgKiBP cHRpbWl6YXRpb24uICBDaGVjayBpZiB0aGUgcm93J3MgcGF0dGVybiB2YXJpYWJsZSBpbml0aWFs CisJCQkJICogY2hhcmFjdGVyIHBvc2l0aW9uIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0 aGUgb2xkCisJCQkJICogc2V0J3MgbGFzdCBwYXR0ZXJuIHZhcmlhYmxlIGluaXRpYWwgY2hhcmFj dGVyIHBvc2l0aW9uLiBGb3IKKwkJCQkgKiBleGFtcGxlLCBpZiB0aGUgb2xkIHNldCdzIGxhc3Qg cGF0dGVybiB2YXJpYWJsZSBpbml0aWFscworCQkJCSAqIGFyZSAiYWIiLCB0aGVuIHRoZSBuZXcg cGF0dGVybiB2YXJpYWJsZSBpbml0aWFsIGNhbiBiZSAiYiIKKwkJCQkgKiBvciAiYyIgYnV0IGNh biBub3QgYmUgImEiLCBpZiB0aGUgaW5pdGlhbHMgaW4gUEFUVEVSTiBpcworCQkJCSAqIHNvbWV0 aGluZyBsaWtlICJhIGIgYyIgb3IgImEgYisgYysiIGV0Yy4gIFRoaXMgb3B0aW1pemF0aW9uCisJ CQkJICogaXMgcG9zc2libGUgd2hlbiB3ZSBvbmx5IGFsbG93ICIrIiBxdWFudGlmaWVyLgorCQkJ CSAqLworCQkJCWlmICh2YXJpYWJsZV9wb3NfY29tcGFyZSh2YXJpYWJsZV9wb3MsIGxhc3Rfb2xk X2NoYXIsICpwKSkKKworCQkJCQkvKgorCQkJCQkgKiBTYXRpc2ZpZWQgdGhlIGNvbmRpdGlvbi4g QWRkIG5ldyBwYXR0ZXJuIGNoYXIgdG8KKwkJCQkJICogbmV3X3N0cl9zZXQgaWYgaXQgbG9va3Mg Z29vZC4KKwkJCQkJICovCisJCQkJCXJlc3VsdGxlbiA9IGFkZF9wYXR0ZXJuKG9sZCwgb2xkX2lu Zm8sIG5ld19zdHJfc2V0LCAqcCwKKwkJCQkJCQkJCQkJcGF0dGVybiwgdGFpbF9wYXR0ZXJuX2lu aXRpYWwsIHJlc3VsdGxlbik7CisJCQkJZWxzZQorCisJCQkJCS8qCisJCQkJCSAqIFRoZSBvbGRf c3RyIGRpZCBub3Qgc2F0aXNmeSB0aGUgY29uZGl0aW9uIGFuZCBpdCBjYW5ub3QKKwkJCQkJICog YmUgZXh0ZW5kZWQgZnVydGhlci4gIkZyZWV6ZSIgaXQuCisJCQkJCSAqLworCQkJCQlyZXN1bHRs ZW4gPSBmcmVlemVfcGF0dGVybihvbGQsIG9sZF9pbmZvLAorCQkJCQkJCQkJCQkgICBuZXdfc3Ry X3NldCwgcGF0dGVybiwgcmVzdWx0bGVuKTsKKwkJCX0KKwkJfQorCQkvKiB3ZSBubyBsb25nZXIg bmVlZCBvbGQgc3RyaW5nIHNldCAqLworCQlzdHJpbmdfc2V0X2Rpc2NhcmQob2xkX3N0cl9zZXQp OworCX0KKwlyZXR1cm4gbmV3X3N0cl9zZXQ7Cit9CisKKy8qCisgKiBhZGRfcGF0dGVybgorICoK KyAqIE1ha2UgYSBjb3B5IG9mICdvbGQnIChhbG9uZyB3aXRoICdvbGRfaW5mbycgZmxhZykgYW5k IGFkZCBuZXcgcGF0dGVybiBjaGFyCisgKiAnYycgdG8gaXQuIFRoZW4gYWRkIGl0IHRvICduZXdf c3RyX3NldCcuICdwYXR0ZXJuJyBhbmQKKyAqICd0YWlsX3BhdHRlcm5faW5pdGlhbCcgaXMgY2hl Y2tlZCB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgY29weSBpcyB3b3J0aCB0bworICogYWRkIHRv IG5ld19zdHJfc2V0IG9yIG5vdC4gIFRoZSBtYXRjaCBsZW5ndGggKHBvc3NpYmx5IGxvbmdlciB0 aGFuCisgKiAncmVzdWx0bGVuJykgaXMgcmV0dXJuZWQuCisgKi8KK3N0YXRpYworaW50CithZGRf cGF0dGVybihTdHJpbmdJbmZvIG9sZCwgaW50IG9sZF9pbmZvLCBTdHJpbmdTZXQgKm5ld19zdHJf c2V0LCBjaGFyIGMsCisJCQljaGFyICpwYXR0ZXJuLCBjaGFyIHRhaWxfcGF0dGVybl9pbml0aWFs LCBpbnQgcmVzdWx0bGVuKQoreworCVN0cmluZ0luZm8JbmV3OworCWludAkJCWluZm87CisJaW50 CQkJbGVuOworCisJLyoKKwkgKiBOZXcgY2hhciBpbiB0aGUgaW5wdXQgcm93IHNhdGlzZmllcyB0 aGUgY29uZGl0aW9uIGFib3ZlLgorCSAqLworCW5ldyA9IG1ha2VTdHJpbmdJbmZvRXh0KG9sZC0+ bGVuICsgMSk7CQkvKiBjb3B5IHNvdXJjZSBzdHJpbmcgKi8KKwlhcHBlbmRTdHJpbmdJbmZvU3Ry aW5nKG5ldywgb2xkLT5kYXRhKTsKKworCS8qIGFkZCBwYXR0ZXJuIHZhcmlhYmxlIGNoYXIgKi8K KwlhcHBlbmRTdHJpbmdJbmZvQ2hhcihuZXcsIGMpOworCisJLyoKKwkgKiBBZGhvYyBvcHRpbWl6 YXRpb24uIElmIHRoZSBmaXJzdCBsZXR0ZXIgaW4gdGhlIGlucHV0IHN0cmluZyBpcyBpbiB0aGUK KwkgKiBoZWFkIGFuZCBzZWNvbmQgcG9zaXRpb24gYW5kIHRoZXJlJ3Mgbm8gYXNzb2NpYXRlZCBx dWF0aWZpZXIgJysnLCB0aGVuCisJICogd2UgY2FuIGRpY2FyZCB0aGUgaW5wdXQgYmVjYXVzZSB0 aGVyZSdzIG5vIGNoYW5jZSB0byBleHBhbmQgdGhlIHN0cmluZworCSAqIGZ1cnRoZXIuCisJICoK KwkgKiBGb3IgZXhhbXBsZSwgcGF0dGVybiAiYWJjIiBjYW5ub3QgbWF0Y2ggImFhIi4KKwkgKi8K KwlpZiAocGF0dGVyblsxXSA9PSBuZXctPmRhdGFbMF0gJiYKKwkJcGF0dGVyblsxXSA9PSBuZXct PmRhdGFbMV0gJiYKKwkJcGF0dGVyblsyXSAhPSAnKycgJiYKKwkJcGF0dGVyblsxXSAhPSBwYXR0 ZXJuWzJdKQorCXsKKwkJZGVzdHJveVN0cmluZ0luZm8obmV3KTsKKwkJcmV0dXJuIHJlc3VsdGxl bjsKKwl9CisKKwlpbmZvID0gb2xkX2luZm87CisKKwkvKgorCSAqIENoZWNrIGlmIHdlIGNhbiBh cHBseSAidGFpbCBwYXR0ZXJuIGluaXRpYWwgb3B0aW1pemF0aW9uIi4gIElmIHRoZSBsYXN0CisJ ICogcmVnZXhwIGNvbXBvbmVudCBpbiBwYXR0ZXJuIGhhcyAnKycgcXVhbnRpZmllciwgdGhlIGNv bXBvbmVudCBpcyBzZXQgdG8KKwkgKiB0aGUgbGFzdCBwYXR0ZXJuIGluaXRpYWwuICBGb3IgZXhh bXBsZSBpZiBwYXR0ZXJuIGlzICJhYisiLAorCSAqIHRhaWxfcGF0dGVybl9pbml0aWFsIHdpbGwg YmVjb21lICdiJy4gT3RoZXJ3aXNlLCB0YWlsX3BhdHRlcm5faW5pdGlhbAorCSAqIGlzICdcMCcu IElmIHRoZSB0YWlsIHBhdHRlcm4gaW5pdGlhbCBvcHRpbWl6YXRpb24gaXMgcG9zc2libGUsIHdl IGRvCisJICogbm90IG5lZWQgdG8gYXBwbHkgcmVndWxhciBleHByZXNzaW9uIG1hdGNoIGFnYWlu LiAgU3VwcG9zZSB3ZSBoYXZlIHRoZQorCSAqIHByZXZpb3VzIHN0cmluZyBlbmRlZCB3aXRoICJi IiBhbmQgdGhlIGl0IHdhcyBjb25maXJtZWQgdGhlIHJlZ3VsYXIKKwkgKiBleHByZXNzaW9uIG1h dGNoLCB0aGVuIGNoYXIgJ2InIGNhbiBiZSBhZGRlZCB0byB0aGUgc3RyaW5nIHdpdGhvdXQKKwkg KiBhcHBseWluZyB0aGUgcmVndWxhciBleHByZXNzaW9uIG1hdGNoIGFnYWluLgorCSAqLworCWlm IChjID09IHRhaWxfcGF0dGVybl9pbml0aWFsKQkvKiB0YWlsIHBhdHRlcm4gaW5pdGlhbCBvcHRp bWl6YXRpb24KKwkJCQkJCQkJCSAqIHBvc3NpYmxlPyAqLworCXsKKwkJLyoKKwkJICogSXMgYWxy ZWFkeSBjb25maXJtZWQgdG8gYmUgbWF0Y2hlZCB3aXRoIHBhdHRlcm4/CisJCSAqLworCQlpZiAo KGluZm8gJiBTVFJTRVRfTUFUQ0hFRCkgPT0gMCkKKwkJeworCQkJLyogbm90IGNvbmZpcm1lZCB5 ZXQgKi8KKwkJCWxlbiA9IGRvX3BhdHRlcm5fbWF0Y2gocGF0dGVybiwgbmV3LT5kYXRhLCBuZXct Pmxlbik7CisJCQlpZiAobGVuID4gMCkKKwkJCQlpbmZvID0gU1RSU0VUX01BVENIRUQ7CS8qIHNl dCBhbHJlYWR5IGNvbmZpcm1lZCBmbGFnICovCisJCX0KKwkJZWxzZQorCisJCQkvKgorCQkJICog YWxyZWFkeSBjb25maXJtZWQuIFVzZSB0aGUgc3RyaW5nIGxlbmd0aCBhcyB0aGUgbWF0Y2hpbmcg bGVuZ3RoCisJCQkgKi8KKwkJCWxlbiA9IG5ldy0+bGVuOworCisJCS8qIHVwZGF0ZSB0aGUgbG9u Z2VzdCBtYXRjaCBsZW5ndGggaWYgbmVlZGVkICovCisJCWlmIChsZW4gPiByZXN1bHRsZW4pCisJ CQlyZXN1bHRsZW4gPSBsZW47CisJfQorCisJLyogYWRkIG5ldyBTdHJpbmdJbmZvIHRvIHRoZSBz dHJpbmcgc2V0ICovCisJc3RyaW5nX3NldF9hZGQobmV3X3N0cl9zZXQsIG5ldywgaW5mbyk7CisK KwlyZXR1cm4gcmVzdWx0bGVuOworfQorCisvKgorICogZnJlZXplX3BhdHRlcm4KKyAqCisgKiAi RnJlZXplIiAnb2xkJyAoYWxvbmcgd2l0aCAnb2xkX2luZm8nIGZsYWcpIGFuZCBhZGQgaXQgdG8K KyAqICduZXdfc3RyX3NldCcuIEZyb3plbiBzdHJpbmcgaXMga25vd24gdG8gbm90IGJlIGV4cGFu ZGVkIGZ1cnRoZXIuIFRoZSBmcm96ZW4KKyAqIHN0cmluZyBpcyBjaGVjayBpZiBpdCBzYXRpc2Zp ZXMgJ3BhdHRlcm4nLiAgSWYgaXQgZG9lcyBub3QsICJkaXNjYXJkZWQiCisgKiBtYXJrIGlzIGFk ZGVkLiBUaGUgZGlzY2FyZGVkIG1hcmsgaXMgYWxzbyBhZGRlZCBpZiB0aGUgbWF0Y2ggbGVuZ3Ro IGlzCisgKiBzaG9ydGVyIHRoYW4gdGhlIGN1cnJlbnQgbG9uZ2VzdCBtYXRjaCBsZW5ndGguIFRo ZSBtYXRjaCBsZW5ndGggKHBvc3NpYmx5CisgKiBsb25nZXIgdGhhbiAncmVzdWx0bGVuJykgaXMg cmV0dXJuZWQuCisgKi8KK3N0YXRpYworaW50CitmcmVlemVfcGF0dGVybihTdHJpbmdJbmZvIG9s ZCwgaW50IG9sZF9pbmZvLCBTdHJpbmdTZXQgKm5ld19zdHJfc2V0LAorCQkJICAgY2hhciAqcGF0 dGVybiwgaW50IHJlc3VsdGxlbikKK3sKKwlpbnQJCQlsZW47CisJU3RyaW5nSW5mbwluZXc7CisJ aW50CQkJbmV3X3N0cl9zaXplOworCWludAkJCW5ld19pbmRleDsKKworCS8qCisJICogV2UgYXJl IGZyZWV6aW5nIHRoaXMgcGF0dGVybiBzdHJpbmcuICBJZiB0aGUgcGF0dGVybiBzdHJpbmcgbGVu Z3RoIGlzCisJICogc2hvcnRlciB0aGFuIHRoZSBjdXJyZW50IGxvbmdlc3Qgc3RyaW5nIGxlbmd0 aCwgd2UgZG9uJ3QgbmVlZCB0byBrZWVwCisJICogaXQuCisJICovCisJaWYgKG9sZC0+bGVuIDwg cmVzdWx0bGVuKQorCQlyZXR1cm4gcmVzdWx0bGVuOworCisJaWYgKG9sZF9pbmZvICYgU1RSU0VU X01BVENIRUQpCisJCS8qIHdlIGRvbid0IG5lZWQgdG8gYXBwbHkgcGF0dGVybiBtYXRjaCBhZ2Fp biAqLworCQlsZW4gPSBvbGQtPmxlbjsKKwllbHNlCisJeworCQkvKiBhcHBseSBwYXR0ZXJuIG1h dGNoICovCisJCWxlbiA9IGRvX3BhdHRlcm5fbWF0Y2gocGF0dGVybiwgb2xkLT5kYXRhLCBvbGQt Pmxlbik7CisJCWlmIChsZW4gPD0gMCkKKwkJeworCQkJLyogbm8gbWF0Y2guIHdlIGNhbiBkaXNj YXJkIGl0ICovCisJCQlyZXR1cm4gcmVzdWx0bGVuOworCQl9CisJfQorCWlmIChsZW4gPCByZXN1 bHRsZW4pCisJeworCQkvKiBzaG9ydGVyIG1hdGNoLiB3ZSBjYW4gZGlzY2FyZCBpdCAqLworCQly ZXR1cm4gcmVzdWx0bGVuOworCX0KKworCS8qCisJICogTWF0Y2ggbGVuZ3RoIGlzIHRoZSBsb25n ZXN0IHNvIGZhcgorCSAqLworCXJlc3VsdGxlbiA9IGxlbjsJCQkvKiByZW1lbWJlciB0aGUgbG9u Z2VzdCBtYXRjaCAqLworCisJLyogZnJlZXplIHRoZSBwYXR0ZXJuIHN0cmluZyAqLworCW5ldyA9 IG1ha2VTdHJpbmdJbmZvKCk7CisJZW5sYXJnZVN0cmluZ0luZm8obmV3LCBvbGQtPmxlbiArIDEp OworCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcobmV3LCBvbGQtPmRhdGEpOworCS8qIHNldCBmcm96 ZW4gbWFyayAqLworCXN0cmluZ19zZXRfYWRkKG5ld19zdHJfc2V0LCBuZXcsIFNUUlNFVF9GUk9a RU4pOworCisJLyoKKwkgKiBTZWFyY2ggbmV3X3N0cl9zZXQgdG8gZmluZCBvdXQgZnJvemVuIGVu dHJpZXMgdGhhdCBoYXZlIHNob3J0ZXIgbWF0Y2gKKwkgKiBsZW5ndGguIE1hcmsgdGhlbSBhcyAi ZGlzY2FyZCIgc28gdGhhdCB0aGV5IGFyZSBkaXNjYXJkZWQgaW4gdGhlIG5leHQKKwkgKiByb3Vu ZC4KKwkgKi8KKwluZXdfc3RyX3NpemUgPQorCQlzdHJpbmdfc2V0X2dldF9zaXplKG5ld19zdHJf c2V0KSAtIDE7CisKKwkvKiBsb29wIG92ZXIgbmV3X3N0cl9zZXQgKi8KKwlmb3IgKG5ld19pbmRl eCA9IDA7IG5ld19pbmRleCA8IG5ld19zdHJfc2l6ZTsgbmV3X2luZGV4KyspCisJeworCQlpbnQJ CQlpbmZvOworCisJCW5ldyA9IHN0cmluZ19zZXRfZ2V0KG5ld19zdHJfc2V0LCBuZXdfaW5kZXgs ICZpbmZvKTsKKworCQkvKgorCQkgKiBJZiB0aGlzIGlzIGZyb3plbiBhbmQgaXMgbm90IGxvbmdl ciB0aGFuIHRoZSBjdXJyZW50IGxvbmdlc3QgbWF0Y2gKKwkJICogbGVuZ3RoLCB3ZSBkb24ndCBu ZWVkIHRvIGtlZXAgdGhpcy4KKwkJICovCisJCWlmIChpbmZvICYgU1RSU0VUX0ZST1pFTiAmJiBu ZXctPmxlbiA8IHJlc3VsdGxlbikKKwkJeworCQkJLyoKKwkJCSAqIG1hcmsgdGhpcyBzZXQgdG8g ZGlzY2FyZCBpbiB0aGUgbmV4dCByb3VuZAorCQkJICovCisJCQlpbmZvIHw9IFNUUlNFVF9ESVND QVJERUQ7CisJCQluZXdfc3RyX3NldC0+aW5mb1tuZXdfaW5kZXhdID0gaW5mbzsKKwkJfQorCX0K KwlyZXR1cm4gcmVzdWx0bGVuOworfQorCisvKgorICogZG9fcGF0dGVybl9tYXRjaAorICoKKyAq IFBlcmZvcm0gcGF0dGVybiBtYXRjaCB1c2luZyAncGF0dGVybicgYWdhaW5zdCAnZW5jb2RlZF9z dHInIHdob3NlIGxlbmd0aCBpcworICogJ2xlbicgYnl0ZXMgKHdpdGhvdXQgbnVsbCB0ZXJtaW5h dGUpLiAgUmV0dXJucyBtYXRjaGluZyBudW1iZXIgb2Ygcm93cyBpZgorICogbWF0Y2hpbmcgaXMg c3VjY2VlZGVkLiAgT3RoZXJ3aXNlIHJldHVybnMgMC4KKyAqLworc3RhdGljCitpbnQKK2RvX3Bh dHRlcm5fbWF0Y2goY2hhciAqcGF0dGVybiwgY2hhciAqZW5jb2RlZF9zdHIsIGludCBsZW4pCit7 CisJc3RhdGljIHJlZ2V4X3QgKnJlZ2NhY2hlID0gTlVMTDsKKwlzdGF0aWMgcmVnZXhfdCBwcmVn OworCXN0YXRpYyBjaGFyIHBhdGJ1ZlsxMDI0XTsJLyogbW9zdCByZWNlbnQgJ3BhdHRlcm4nIGlz IGNhY2hlZCBoZXJlICovCisJaW50CQkJcGxlbjsKKwlpbnQJCQljZmxhZ3MgPSBSRUdfRVhURU5E RUQ7CisJc2l6ZV90CQlubWF0Y2ggPSAxOworCWludAkJCWVmbGFncyA9IDA7CisJcmVnbWF0Y2hf dAlwbWF0Y2hbMV07CisJaW50CQkJc3RzOworCXBnX3djaGFyICAgKmRhdGE7CisJaW50CQkJZGF0 YV9sZW47CisKKwkvKgorCSAqIENvbXBpbGUgcmVnZXhwIGlmIGNhY2hlIGRvZXMgbm90IGV4aXN0 IG9yIGV4aXN0aW5nIGNhY2hlIGlzIG5vdCBzYW1lIGFzCisJICogInBhdHRlcm4iLgorCSAqLwor CWlmIChzdHJjbXAocGF0YnVmLCBwYXR0ZXJuKSkKKwl7CisJCS8qCisJCSAqIFRoZSBjb21waWxl ZCByZSBtdXN0IGxpdmUgaW4gdG9wIG1lbW9yeSBjb250ZXh0IGJlY2F1c2UgcGF0YnVmIGlzCisJ CSAqIHN0YXRpYyBkYXRhLgorCQkgKi8KKwkJTWVtb3J5Q29udGV4dCBvbGRDb250ZXh0ID0gTWVt b3J5Q29udGV4dFN3aXRjaFRvKFRvcE1lbW9yeUNvbnRleHQpOworCisJCWlmIChyZWdjYWNoZSAh PSBOVUxMKQorCQkJcGdfcmVnZnJlZShyZWdjYWNoZSk7CS8qIGZyZWUgcHJldmlvdXMgcmUgKi8K KworCQkvKiB3ZSBuZWVkIHRvIGNvbnZlcnQgdG8gY2hhciB0byBwZ193Y2hhciAqLworCQlwbGVu ID0gc3RybGVuKHBhdHRlcm4pOworCQlkYXRhID0gKHBnX3djaGFyICopIHBhbGxvYygocGxlbiAr IDEpICogc2l6ZW9mKHBnX3djaGFyKSk7CisJCWRhdGFfbGVuID0gcGdfbWIyd2NoYXJfd2l0aF9s ZW4ocGF0dGVybiwgZGF0YSwgcGxlbik7CisJCS8qIGNvbXBpbGUgcmUgKi8KKwkJc3RzID0gcGdf cmVnY29tcCgmcHJlZywgLyogY29tcGlsZWQgcmUgKi8KKwkJCQkJCSBkYXRhLAkvKiB0YXJnZXQg cGF0dGVybiAqLworCQkJCQkJIGRhdGFfbGVuLAkvKiBsZW5ndGggb2YgcGF0dGVybiAqLworCQkJ CQkJIGNmbGFncywJLyogY29tcGlsZSBvcHRpb24gKi8KKwkJCQkJCSBDX0NPTExBVElPTl9PSUQJ LyogY29sbGF0aW9uICovCisJCQkpOworCQlwZnJlZShkYXRhKTsKKworCQlNZW1vcnlDb250ZXh0 U3dpdGNoVG8ob2xkQ29udGV4dCk7CisKKwkJaWYgKHN0cyAhPSBSRUdfT0tBWSkKKwkJeworCQkJ LyogcmUgZGlkbid0IGNvbXBpbGUgKG5vIG5lZWQgZm9yIHBnX3JlZ2ZyZWUsIGlmIHNvKSAqLwor CQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1JFR1VMQVJf RVhQUkVTU0lPTiksCisJCQkJCSBlcnJtc2coImludmFsaWQgcmVndWxhciBleHByZXNzaW9uOiAl cyIsIHBhdHRlcm4pKSk7CisJCX0KKworCQkvKiBzYXZlIGNhY2hlICovCisJCXJlZ2NhY2hlID0g JnByZWc7CisJCXN0cm5jcHkocGF0YnVmLCBwYXR0ZXJuLCBzaXplb2YocGF0YnVmKSk7CisJfQor CisJZGF0YSA9IChwZ193Y2hhciAqKSBwYWxsb2MoKGxlbiArIDEpICogc2l6ZW9mKHBnX3djaGFy KSk7CisJZGF0YV9sZW4gPSBwZ19tYjJ3Y2hhcl93aXRoX2xlbihlbmNvZGVkX3N0ciwgZGF0YSwg bGVuKTsKKworCS8qIGV4ZWN1dGUgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBtYXRjaCAqLworCXN0 cyA9IHBnX3JlZ2V4ZWMoCisJCQkJCSAmcHJlZywJCS8qIGNvbXBpbGVkIHJlICovCisJCQkJCSBk YXRhLAkJLyogdGFyZ2V0IHN0cmluZyAqLworCQkJCQkgZGF0YV9sZW4sCS8qIGxlbmd0aCBvZiBl bmNvZGVkX3N0ciAqLworCQkJCQkgMCwJCQkvKiBzZWFyY2ggc3RhcnQgKi8KKwkJCQkJIE5VTEws CQkvKiBybSBkZXRhaWxzICovCisJCQkJCSBubWF0Y2gsCS8qIG51bWJlciBvZiBtYXRjaCBzdWIg cmUgKi8KKwkJCQkJIHBtYXRjaCwJLyogbWF0Y2ggcmVzdWx0IGRldGFpbHMgKi8KKwkJCQkJIGVm bGFncyk7CisKKwlwZnJlZShkYXRhKTsKKworCWlmIChzdHMgIT0gUkVHX09LQVkpCisJeworCQlp ZiAoc3RzICE9IFJFR19OT01BVENIKQorCQl7CisJCQljaGFyCQllcnJNc2dbMTAwXTsKKworCQkJ cGdfcmVnZXJyb3Ioc3RzLCAmcHJlZywgZXJyTXNnLCBzaXplb2YoZXJyTXNnKSk7CisJCQllcmVw b3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUkVHVUxBUl9FWFBSRVNT SU9OKSwKKwkJCQkJIGVycm1zZygicmVndWxhciBleHByZXNzaW9uIGZhaWxlZDogJXMiLCBlcnJN c2cpKSk7CisJCX0KKwkJcmV0dXJuIDA7CQkJCS8qIGRvZXMgbm90IG1hdGNoICovCisJfQorCisJ bGVuID0gcG1hdGNoWzBdLnJtX2VvOwkJLyogcmV0dXJuIG1hdGNoIGxlbmd0aCAqLworCXJldHVy biBsZW47CisKK30KKworLyoKKyAqIGV2YWx1YXRlX3BhdHRlcm4KKyAqCisgKiBFdmFsdWF0ZSBl eHByZXNzaW9uIGFzc29jaWF0ZWQgd2l0aCBQQVRURVJOIHZhcmlhYmxlIHZuYW1lLiAgY3VycmVu dF9wb3MgaXMKKyAqIHJlbGF0aXZlIHJvdyBwb3NpdGlvbiBpbiBhIGZyYW1lIChzdGFydGluZyBm cm9tIDApLiBJZiB2bmFtZSBpcyBldmFsdWF0ZWQKKyAqIHRvIHRydWUsIGluaXRpYWwgbGV0dGVy cyBhc3NvY2lhdGVkIHdpdGggdm5hbWUgaXMgYXBwZW5kZWQgdG8KKyAqIGVuY29kZV9zdHIuIHJl c3VsdCBpcyBvdXQgcGFyYW1hdGVyIHJlcHJlc2VudGluZyB0aGUgZXhwcmVzc2lvbiBldmFsdWF0 aW9uCisgKiByZXN1bHQgaXMgdHJ1ZSBvZiBmYWxzZS4KKyAqLS0tLS0tLS0tCisgKiBSZXR1cm4g dmFsdWVzIGFyZToKKyAqID49MDogdGhlIGxhc3QgbWF0Y2ggYWJzb2x1dGUgcm93IHBvc2l0aW9u CisgKiBvdGhlcndpc2Ugb3V0IG9mIGZyYW1lLgorICotLS0tLS0tLS0KKyAqLworc3RhdGljCitp bnQ2NAorZXZhbHVhdGVfcGF0dGVybihXaW5kb3dPYmplY3Qgd2lub2JqLCBpbnQ2NCBjdXJyZW50 X3BvcywKKwkJCQkgY2hhciAqdm5hbWUsIFN0cmluZ0luZm8gZW5jb2RlZF9zdHIsIGJvb2wgKnJl c3VsdCkKK3sKKwlXaW5kb3dBZ2dTdGF0ZSAqd2luc3RhdGUgPSB3aW5vYmotPndpbnN0YXRlOwor CUV4cHJDb250ZXh0ICplY29udGV4dCA9IHdpbnN0YXRlLT5zcy5wcy5wc19FeHByQ29udGV4dDsK KwlMaXN0Q2VsbCAgICpsYzEsCisJCQkgICAqbGMyLAorCQkJICAgKmxjMzsKKwlFeHByU3RhdGUg ICpwYXQ7CisJRGF0dW0JCWV2YWxfcmVzdWx0OworCWJvb2wJCW91dF9vZl9mcmFtZSA9IGZhbHNl OworCWJvb2wJCWlzbnVsbDsKKwlUdXBsZVRhYmxlU2xvdCAqc2xvdDsKKworCWZvcnRocmVlKGxj MSwgd2luc3RhdGUtPmRlZmluZVZhcmlhYmxlTGlzdCwKKwkJCSBsYzIsIHdpbnN0YXRlLT5kZWZp bmVDbGF1c2VMaXN0LAorCQkJIGxjMywgd2luc3RhdGUtPmRlZmluZUluaXRpYWwpCisJeworCQlj aGFyCQlpbml0aWFsOwkvKiBpbml0aWFsIGxldHRlciBhc3NvY2lhdGVkIHdpdGggdm5hbWUgKi8K KwkJY2hhcgkgICAqbmFtZSA9IHN0clZhbChsZmlyc3QobGMxKSk7CisKKwkJaWYgKHN0cmNtcCh2 bmFtZSwgbmFtZSkpCisJCQljb250aW51ZTsKKworCQlpbml0aWFsID0gKihzdHJWYWwobGZpcnN0 KGxjMykpKTsKKworCQkvKiBzZXQgZXhwcmVzc2lvbiB0byBldmFsdWF0ZSAqLworCQlwYXQgPSBs Zmlyc3QobGMyKTsKKworCQkvKiBnZXQgY3VycmVudCwgcHJldmlvdXMgYW5kIG5leHQgdHVwbGVz ICovCisJCWlmICghZ2V0X3Nsb3RzKHdpbm9iaiwgY3VycmVudF9wb3MpKQorCQl7CisJCQlvdXRf b2ZfZnJhbWUgPSB0cnVlOworCQl9CisJCWVsc2UKKwkJeworCQkJLyogZXZhbHVhdGUgdGhlIGV4 cHJlc3Npb24gKi8KKwkJCWV2YWxfcmVzdWx0ID0gRXhlY0V2YWxFeHByKHBhdCwgZWNvbnRleHQs ICZpc251bGwpOworCQkJaWYgKGlzbnVsbCkKKwkJCXsKKwkJCQkvKiBleHByZXNzaW9uIGlzIE5V TEwgKi8KKyNpZmRlZiBSUFJfREVCVUcKKwkJCQllbG9nKERFQlVHMSwgImV4cHJlc3Npb24gZm9y ICVzIGlzIE5VTEwgYXQgcm93OiAiIElOVDY0X0ZPUk1BVCwKKwkJCQkJIHZuYW1lLCBjdXJyZW50 X3Bvcyk7CisjZW5kaWYKKwkJCQkqcmVzdWx0ID0gZmFsc2U7CisJCQl9CisJCQllbHNlCisJCQl7 CisJCQkJaWYgKCFEYXR1bUdldEJvb2woZXZhbF9yZXN1bHQpKQorCQkJCXsKKwkJCQkJLyogZXhw cmVzc2lvbiBpcyBmYWxzZSAqLworI2lmZGVmIFJQUl9ERUJVRworCQkJCQllbG9nKERFQlVHMSwg ImV4cHJlc3Npb24gZm9yICVzIGlzIGZhbHNlIGF0IHJvdzogIiBJTlQ2NF9GT1JNQVQsCisJCQkJ CQkgdm5hbWUsIGN1cnJlbnRfcG9zKTsKKyNlbmRpZgorCQkJCQkqcmVzdWx0ID0gZmFsc2U7CisJ CQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCS8qIGV4cHJlc3Npb24gaXMgdHJ1ZSAqLworI2lm ZGVmIFJQUl9ERUJVRworCQkJCQllbG9nKERFQlVHMSwgImV4cHJlc3Npb24gZm9yICVzIGlzIHRy dWUgYXQgcm93OiAiIElOVDY0X0ZPUk1BVCwKKwkJCQkJCSB2bmFtZSwgY3VycmVudF9wb3MpOwor I2VuZGlmCisJCQkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGVuY29kZWRfc3RyLCBpbml0aWFsKTsK KwkJCQkJKnJlc3VsdCA9IHRydWU7CisJCQkJfQorCQkJfQorCisJCQlzbG90ID0gd2luc3RhdGUt PnRlbXBfc2xvdF8xOworCQkJaWYgKHNsb3QgIT0gd2luc3RhdGUtPm51bGxfc2xvdCkKKwkJCQlF eGVjQ2xlYXJUdXBsZShzbG90KTsKKwkJCXNsb3QgPSB3aW5zdGF0ZS0+cHJldl9zbG90OworCQkJ aWYgKHNsb3QgIT0gd2luc3RhdGUtPm51bGxfc2xvdCkKKwkJCQlFeGVjQ2xlYXJUdXBsZShzbG90 KTsKKwkJCXNsb3QgPSB3aW5zdGF0ZS0+bmV4dF9zbG90OworCQkJaWYgKHNsb3QgIT0gd2luc3Rh dGUtPm51bGxfc2xvdCkKKwkJCQlFeGVjQ2xlYXJUdXBsZShzbG90KTsKKworCQkJYnJlYWs7CisJ CX0KKworCQlpZiAob3V0X29mX2ZyYW1lKQorCQl7CisJCQkqcmVzdWx0ID0gZmFsc2U7CisJCQly ZXR1cm4gLTE7CisJCX0KKwl9CisJcmV0dXJuIGN1cnJlbnRfcG9zOworfQorCisvKgorICogZ2V0 X3Nsb3RzCisgKgorICogR2V0IGN1cnJlbnQsIHByZXZpb3VzIGFuZCBuZXh0IHR1cGxlcy4KKyAq IFJldHVybnMgZmFsc2UgaWYgY3VycmVudCByb3cgaXMgb3V0IG9mIHBhcnRpdGlvbi9mdWxsIGZy YW1lLgorICovCitzdGF0aWMKK2Jvb2wKK2dldF9zbG90cyhXaW5kb3dPYmplY3Qgd2lub2JqLCBp bnQ2NCBjdXJyZW50X3BvcykKK3sKKwlXaW5kb3dBZ2dTdGF0ZSAqd2luc3RhdGUgPSB3aW5vYmot PndpbnN0YXRlOworCVR1cGxlVGFibGVTbG90ICpzbG90OworCWludAkJCXJldDsKKwlFeHByQ29u dGV4dCAqZWNvbnRleHQ7CisKKwllY29udGV4dCA9IHdpbnN0YXRlLT5zcy5wcy5wc19FeHByQ29u dGV4dDsKKworCS8qIHNldCB1cCBjdXJyZW50IHJvdyB0dXBsZSBzbG90ICovCisJc2xvdCA9IHdp bnN0YXRlLT50ZW1wX3Nsb3RfMTsKKwlpZiAoIXdpbmRvd19nZXR0dXBsZXNsb3Qod2lub2JqLCBj dXJyZW50X3Bvcywgc2xvdCkpCisJeworI2lmZGVmIFJQUl9ERUJVRworCQllbG9nKERFQlVHMSwg ImN1cnJlbnQgcm93IGlzIG91dCBvZiBwYXJ0aXRpb24gYXQ6IiBJTlQ2NF9GT1JNQVQsCisJCQkg Y3VycmVudF9wb3MpOworI2VuZGlmCisJCXJldHVybiBmYWxzZTsKKwl9CisJcmV0ID0gcm93X2lz X2luX2ZyYW1lKHdpbnN0YXRlLCBjdXJyZW50X3Bvcywgc2xvdCk7CisJaWYgKHJldCA8PSAwKQor CXsKKyNpZmRlZiBSUFJfREVCVUcKKwkJZWxvZyhERUJVRzEsICJjdXJyZW50IHJvdyBpcyBvdXQg b2YgZnJhbWUgYXQ6ICIgSU5UNjRfRk9STUFULAorCQkJIGN1cnJlbnRfcG9zKTsKKyNlbmRpZgor CQlFeGVjQ2xlYXJUdXBsZShzbG90KTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKwllY29udGV4dC0+ ZWN4dF9vdXRlcnR1cGxlID0gc2xvdDsKKworCS8qIGZvciBQUkVWICovCisJaWYgKGN1cnJlbnRf cG9zID4gMCkKKwl7CisJCXNsb3QgPSB3aW5zdGF0ZS0+cHJldl9zbG90OworCQlpZiAoIXdpbmRv d19nZXR0dXBsZXNsb3Qod2lub2JqLCBjdXJyZW50X3BvcyAtIDEsIHNsb3QpKQorCQl7CisjaWZk ZWYgUlBSX0RFQlVHCisJCQllbG9nKERFQlVHMSwgInByZXZpb3VzIHJvdyBpcyBvdXQgb2YgcGFy dGl0aW9uIGF0OiAiIElOVDY0X0ZPUk1BVCwKKwkJCQkgY3VycmVudF9wb3MgLSAxKTsKKyNlbmRp ZgorCQkJZWNvbnRleHQtPmVjeHRfc2NhbnR1cGxlID0gd2luc3RhdGUtPm51bGxfc2xvdDsKKwkJ fQorCQllbHNlCisJCXsKKwkJCXJldCA9IHJvd19pc19pbl9mcmFtZSh3aW5zdGF0ZSwgY3VycmVu dF9wb3MgLSAxLCBzbG90KTsKKwkJCWlmIChyZXQgPD0gMCkKKwkJCXsKKyNpZmRlZiBSUFJfREVC VUcKKwkJCQllbG9nKERFQlVHMSwgInByZXZpb3VzIHJvdyBpcyBvdXQgb2YgZnJhbWUgYXQ6ICIg SU5UNjRfRk9STUFULAorCQkJCQkgY3VycmVudF9wb3MgLSAxKTsKKyNlbmRpZgorCQkJCUV4ZWND bGVhclR1cGxlKHNsb3QpOworCQkJCWVjb250ZXh0LT5lY3h0X3NjYW50dXBsZSA9IHdpbnN0YXRl LT5udWxsX3Nsb3Q7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJZWNvbnRleHQtPmVjeHRfc2Nh bnR1cGxlID0gc2xvdDsKKwkJCX0KKwkJfQorCX0KKwllbHNlCisJCWVjb250ZXh0LT5lY3h0X3Nj YW50dXBsZSA9IHdpbnN0YXRlLT5udWxsX3Nsb3Q7CisKKwkvKiBmb3IgTkVYVCAqLworCXNsb3Qg PSB3aW5zdGF0ZS0+bmV4dF9zbG90OworCWlmICghd2luZG93X2dldHR1cGxlc2xvdCh3aW5vYmos IGN1cnJlbnRfcG9zICsgMSwgc2xvdCkpCisJeworI2lmZGVmIFJQUl9ERUJVRworCQllbG9nKERF QlVHMSwgIm5leHQgcm93IGlzIG91dCBvZiBwYXJ0aXRvbiBhdDogIiBJTlQ2NF9GT1JNQVQsCisJ CQkgY3VycmVudF9wb3MgKyAxKTsKKyNlbmRpZgorCQllY29udGV4dC0+ZWN4dF9pbm5lcnR1cGxl ID0gd2luc3RhdGUtPm51bGxfc2xvdDsKKwl9CisJZWxzZQorCXsKKwkJcmV0ID0gcm93X2lzX2lu X2ZyYW1lKHdpbnN0YXRlLCBjdXJyZW50X3BvcyArIDEsIHNsb3QpOworCQlpZiAocmV0IDw9IDAp CisJCXsKKyNpZmRlZiBSUFJfREVCVUcKKwkJCWVsb2coREVCVUcxLCAibmV4dCByb3cgaXMgb3V0 IG9mIGZyYW1lIGF0OiAiIElOVDY0X0ZPUk1BVCwKKwkJCQkgY3VycmVudF9wb3MgKyAxKTsKKyNl bmRpZgorCQkJRXhlY0NsZWFyVHVwbGUoc2xvdCk7CisJCQllY29udGV4dC0+ZWN4dF9pbm5lcnR1 cGxlID0gd2luc3RhdGUtPm51bGxfc2xvdDsKKwkJfQorCQllbHNlCisJCQllY29udGV4dC0+ZWN4 dF9pbm5lcnR1cGxlID0gc2xvdDsKKwl9CisJcmV0dXJuIHRydWU7Cit9CisKKy8qCisgKiBwYXR0 ZXJuX2luaXRpYWwKKyAqCisgKiBSZXR1cm4gcGF0dGVybiB2YXJpYWJsZSBpbml0aWFsIGNoYXJh Y3RlcgorICogbWF0Y2hpbmcgd2l0aCBwYXR0ZXJuIHZhcmlhYmxlIG5hbWUgdm5hbWUuCisgKiBJ ZiBub3QgZm91bmQsIHJldHVybiAwLgorICovCitzdGF0aWMKK2NoYXIKK3BhdHRlcm5faW5pdGlh bChXaW5kb3dBZ2dTdGF0ZSAqd2luc3RhdGUsIGNoYXIgKnZuYW1lKQoreworCWNoYXIJCWluaXRp YWw7CisJY2hhcgkgICAqbmFtZTsKKwlMaXN0Q2VsbCAgICpsYzEsCisJCQkgICAqbGMyOworCisJ Zm9yYm90aChsYzEsIHdpbnN0YXRlLT5kZWZpbmVWYXJpYWJsZUxpc3QsCisJCQlsYzIsIHdpbnN0 YXRlLT5kZWZpbmVJbml0aWFsKQorCXsKKwkJbmFtZSA9IHN0clZhbChsZmlyc3QobGMxKSk7IC8q IERFRklORSB2YXJpYWJsZSBuYW1lICovCisJCWluaXRpYWwgPSAqKHN0clZhbChsZmlyc3QobGMy KSkpOwkvKiBERUZJTkUgdmFyaWFibGUgaW5pdGlhbCAqLworCisKKwkJaWYgKCFzdHJjbXAobmFt ZSwgdm5hbWUpKQorCQkJcmV0dXJuIGluaXRpYWw7CQkvKiBmb3VuZCAqLworCX0KKwlyZXR1cm4g MDsKK30KKworLyoKKyAqIHN0cmluZ19zZXRfaW5pdAorICoKKyAqIENyZWF0ZSBkeW5hbWljIHNl dCBvZiBTdHJpbmdJbmZvLgorICovCitzdGF0aWMKK1N0cmluZ1NldCAqCitzdHJpbmdfc2V0X2lu aXQodm9pZCkKK3sKKy8qIEluaXRpYWwgYWxsb2NhdGlvbiBzaXplIG9mIHN0cl9zZXQgKi8KKyNk ZWZpbmUgU1RSSU5HX1NFVF9BTExPQ19TSVpFCTEwMjQKKworCVN0cmluZ1NldCAgKnN0cmluZ19z ZXQ7CisJU2l6ZQkJc2V0X3NpemU7CisKKwlzdHJpbmdfc2V0ID0gcGFsbG9jMChzaXplb2YoU3Ry aW5nU2V0KSk7CisJc3RyaW5nX3NldC0+c2V0X2luZGV4ID0gMDsKKwlzZXRfc2l6ZSA9IFNUUklO R19TRVRfQUxMT0NfU0laRTsKKwlzdHJpbmdfc2V0LT5zdHJfc2V0ID0gcGFsbG9jKHNldF9zaXpl ICogc2l6ZW9mKFN0cmluZ0luZm8pKTsKKwlzdHJpbmdfc2V0LT5pbmZvID0gcGFsbG9jMChzZXRf c2l6ZSAqIHNpemVvZihpbnQpKTsKKwlzdHJpbmdfc2V0LT5zZXRfc2l6ZSA9IHNldF9zaXplOwor CisJcmV0dXJuIHN0cmluZ19zZXQ7Cit9CisKKy8qCisgKiBzdHJpbmdfc2V0X2FkZAorICoKKyAq IEFkZCBTdHJpbmdJbmZvIHN0ciB0byBTdHJpbmdTZXQgc3RyaW5nX3NldC4KKyAqLworc3RhdGlj Cit2b2lkCitzdHJpbmdfc2V0X2FkZChTdHJpbmdTZXQgKnN0cmluZ19zZXQsIFN0cmluZ0luZm8g c3RyLCBpbnQgaW5mbykKK3sKKwlTaXplCQlzZXRfc2l6ZTsKKwlTaXplCQlvbGRfc2V0X3NpemU7 CisKKwlzZXRfc2l6ZSA9IHN0cmluZ19zZXQtPnNldF9zaXplOworCWlmIChzdHJpbmdfc2V0LT5z ZXRfaW5kZXggPj0gc2V0X3NpemUpCisJeworCQlvbGRfc2V0X3NpemUgPSBzZXRfc2l6ZTsKKwkJ c2V0X3NpemUgKj0gMjsKKwkJc3RyaW5nX3NldC0+c3RyX3NldCA9IHJlcGFsbG9jKHN0cmluZ19z ZXQtPnN0cl9zZXQsCisJCQkJCQkJCQkgICBzZXRfc2l6ZSAqIHNpemVvZihTdHJpbmdJbmZvKSk7 CisJCXN0cmluZ19zZXQtPmluZm8gPSByZXBhbGxvYzAoc3RyaW5nX3NldC0+aW5mbywKKwkJCQkJ CQkJCSBvbGRfc2V0X3NpemUgKiBzaXplb2YoaW50KSwKKwkJCQkJCQkJCSBzZXRfc2l6ZSAqIHNp emVvZihpbnQpKTsKKwkJc3RyaW5nX3NldC0+c2V0X3NpemUgPSBzZXRfc2l6ZTsKKwl9CisKKwlz dHJpbmdfc2V0LT5pbmZvW3N0cmluZ19zZXQtPnNldF9pbmRleF0gPSBpbmZvOworCXN0cmluZ19z ZXQtPnN0cl9zZXRbc3RyaW5nX3NldC0+c2V0X2luZGV4KytdID0gc3RyOworCisJcmV0dXJuOwor fQorCisvKgorICogc3RyaW5nX3NldF9nZXQKKyAqCisgKiBSZXR1cm5zIFN0cmluZ0luZm8gc3Bl Y2lmaWVkIGJ5IGluZGV4LgorICogSWYgdGhlcmUncyBubyBkYXRhIHlldCwgcmV0dXJucyBOVUxM LgorICovCitzdGF0aWMKK1N0cmluZ0luZm8KK3N0cmluZ19zZXRfZ2V0KFN0cmluZ1NldCAqc3Ry aW5nX3NldCwgaW50IGluZGV4LCBpbnQgKmluZm8pCit7CisJKmluZm8gPSAwOworCisJLyogbm8g ZGF0YT8gKi8KKwlpZiAoaW5kZXggPT0gMCAmJiBzdHJpbmdfc2V0LT5zZXRfaW5kZXggPT0gMCkK KwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHN0cmluZ19zZXQt PnNldF9pbmRleCkKKwkJZWxvZyhFUlJPUiwgImludmFsaWQgaW5kZXg6ICVkIiwgaW5kZXgpOwor CisJKmluZm8gPSBzdHJpbmdfc2V0LT5pbmZvW2luZGV4XTsKKworCXJldHVybiBzdHJpbmdfc2V0 LT5zdHJfc2V0W2luZGV4XTsKK30KKworLyoKKyAqIHN0cmluZ19zZXRfZ2V0X3NpemUKKyAqCisg KiBSZXR1cm5zIHRoZSBzaXplIG9mIFN0cmluZ1NldC4KKyAqLworc3RhdGljCitpbnQKK3N0cmlu Z19zZXRfZ2V0X3NpemUoU3RyaW5nU2V0ICpzdHJpbmdfc2V0KQoreworCXJldHVybiBzdHJpbmdf c2V0LT5zZXRfaW5kZXg7Cit9CisKKy8qCisgKiBzdHJpbmdfc2V0X2Rpc2NhcmQKKyAqIERpc2Nh cmQgU3RyaW5nU2V0LgorICogQWxsIG1lbW9yeSBpbmNsdWRpbmcgU3RyaW5nU2V0IGl0c2VsZiBp cyBmcmVlZC4KKyAqLworc3RhdGljCit2b2lkCitzdHJpbmdfc2V0X2Rpc2NhcmQoU3RyaW5nU2V0 ICpzdHJpbmdfc2V0KQoreworCWludAkJCWk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc3RyaW5nX3Nl dC0+c2V0X2luZGV4OyBpKyspCisJeworCQlTdHJpbmdJbmZvCXN0ciA9IHN0cmluZ19zZXQtPnN0 cl9zZXRbaV07CisKKwkJaWYgKHN0cikKKwkJCWRlc3Ryb3lTdHJpbmdJbmZvKHN0cik7CisJfQor CXBmcmVlKHN0cmluZ19zZXQtPmluZm8pOworCXBmcmVlKHN0cmluZ19zZXQtPnN0cl9zZXQpOwor CXBmcmVlKHN0cmluZ19zZXQpOworfQorCisvKgorICogdmFyaWFibGVfcG9zX2luaXQKKyAqCisg KiBDcmVhdGUgYW5kIGluaXRpYWxpemUgdmFyaWFibGUgcG9zdGlvbiBzdHJ1Y3R1cmUKKyAqLwor c3RhdGljCitWYXJpYWJsZVBvcyAqCit2YXJpYWJsZV9wb3NfaW5pdCh2b2lkKQoreworCVZhcmlh YmxlUG9zICp2YXJpYWJsZV9wb3M7CisKKwl2YXJpYWJsZV9wb3MgPSBwYWxsb2Moc2l6ZW9mKFZh cmlhYmxlUG9zKSAqIE5VTV9BTFBIQUJFVFMpOworCU1lbVNldCh2YXJpYWJsZV9wb3MsIC0xLCBz aXplb2YoVmFyaWFibGVQb3MpICogTlVNX0FMUEhBQkVUUyk7CisJcmV0dXJuIHZhcmlhYmxlX3Bv czsKK30KKworLyoKKyAqIHZhcmlhYmxlX3Bvc19yZWdpc3RlcgorICoKKyAqIFJlZ2lzdGVyIHBh dHRlcm4gdmFyaWFibGUgd2hvc2UgaW5pdGlhbCBpcyBpbml0aWFsIGludG8gcG9zdGlvbiBpbmRl eC4KKyAqIHBvcyBpcyBwb3NpdGlvbiBvZiBpbml0aWFsLgorICogSWYgcG9zIGlzIGFscmVhZHkg cmVnaXN0ZXJlZCwgcmVnaXN0ZXIgaXQgYXQgbmV4dCBlbXB0eSBzbG90LgorICovCitzdGF0aWMK K3ZvaWQKK3ZhcmlhYmxlX3Bvc19yZWdpc3RlcihWYXJpYWJsZVBvcyAqdmFyaWFibGVfcG9zLCBj aGFyIGluaXRpYWwsIGludCBwb3MpCit7CisJaW50CQkJaW5kZXggPSBpbml0aWFsIC0gJ2EnOwor CWludAkJCXNsb3Q7CisJaW50CQkJaTsKKworCWlmIChwb3MgPCAwIHx8IHBvcyA+IE5VTV9BTFBI QUJFVFMpCisJCWVsb2coRVJST1IsICJpbml0aWFsIGlzIG5vdCB2YWxpZCBjaGFyOiAlYyIsIGlu aXRpYWwpOworCisJZm9yIChpID0gMDsgaSA8IE5VTV9BTFBIQUJFVFM7IGkrKykKKwl7CisJCXNs b3QgPSB2YXJpYWJsZV9wb3NbaW5kZXhdLnBvc1tpXTsKKwkJaWYgKHNsb3QgPCAwKQorCQl7CisJ CQkvKiBlbXB0eSBzbG90IGZvdW5kICovCisJCQl2YXJpYWJsZV9wb3NbaW5kZXhdLnBvc1tpXSA9 IHBvczsKKwkJCXJldHVybjsKKwkJfQorCX0KKwllbG9nKEVSUk9SLCAibm8gZW1wdHkgc2xvdCBm b3IgaW5pdGlhbDogJWMiLCBpbml0aWFsKTsKK30KKworLyoKKyAqIHZhcmlhYmxlX3Bvc19jb21w YXJlCisgKgorICogUmV0dXJucyB0cnVlIGlmIGluaXRpYWwxIGNhbiBiZSBmb2xsb3dlZCBieSBp bml0aWFsMgorICovCitzdGF0aWMKK2Jvb2wKK3ZhcmlhYmxlX3Bvc19jb21wYXJlKFZhcmlhYmxl UG9zICp2YXJpYWJsZV9wb3MsIGNoYXIgaW5pdGlhbDEsIGNoYXIgaW5pdGlhbDIpCit7CisJaW50 CQkJaW5kZXgxLAorCQkJCWluZGV4MjsKKwlpbnQJCQlwb3MxLAorCQkJCXBvczI7CisKKwlmb3Ig KGluZGV4MSA9IDA7OyBpbmRleDErKykKKwl7CisJCXBvczEgPSB2YXJpYWJsZV9wb3NfZmV0Y2go dmFyaWFibGVfcG9zLCBpbml0aWFsMSwgaW5kZXgxKTsKKwkJaWYgKHBvczEgPCAwKQorCQkJYnJl YWs7CisKKwkJZm9yIChpbmRleDIgPSAwOzsgaW5kZXgyKyspCisJCXsKKwkJCXBvczIgPSB2YXJp YWJsZV9wb3NfZmV0Y2godmFyaWFibGVfcG9zLCBpbml0aWFsMiwgaW5kZXgyKTsKKwkJCWlmIChw b3MyIDwgMCkKKwkJCQlicmVhazsKKwkJCWlmIChwb3MxIDw9IHBvczIpCisJCQkJcmV0dXJuIHRy dWU7CisJCX0KKwl9CisJcmV0dXJuIGZhbHNlOworfQorCisvKgorICogdmFyaWFibGVfcG9zX2Zl dGNoCisgKgorICogRmV0Y2ggcG9zaXRpb24gb2YgcGF0dGVybiB2YXJpYWJsZSB3aG9zZSBpbml0 aWFsIGlzIGluaXRpYWwsIGFuZCB3aG9zZSBpbmRleAorICogaXMgaW5kZXguIElmIG5vIHBvc3Rp b24gd2FzIHJlZ2lzdGVyZWQgYnkgaW5pdGlhbCwgaW5kZXgsIHJldHVybnMgLTEuCisgKi8KK3N0 YXRpYworaW50Cit2YXJpYWJsZV9wb3NfZmV0Y2goVmFyaWFibGVQb3MgKnZhcmlhYmxlX3Bvcywg Y2hhciBpbml0aWFsLCBpbnQgaW5kZXgpCit7CisJaW50CQkJcG9zID0gaW5pdGlhbCAtICdhJzsK KworCWlmIChwb3MgPCAwIHx8IHBvcyA+IE5VTV9BTFBIQUJFVFMpCisJCWVsb2coRVJST1IsICJp bml0aWFsIGlzIG5vdCB2YWxpZCBjaGFyOiAlYyIsIGluaXRpYWwpOworCisJaWYgKGluZGV4IDwg MCB8fCBpbmRleCA+IE5VTV9BTFBIQUJFVFMpCisJCWVsb2coRVJST1IsICJpbmRleCBpcyBub3Qg dmFsaWQ6ICVkIiwgaW5kZXgpOworCisJcmV0dXJuIHZhcmlhYmxlX3Bvc1twb3NdLnBvc1tpbmRl eF07Cit9CisKKy8qCisgKiB2YXJpYWJsZV9wb3NfYnVpbGQKKyAqCisgKiBCdWlsZCBWYXJpYWJs ZVBvcyBzdHJ1Y3R1cmUgYW5kIHJldHVybiBpdC4KKyAqLworc3RhdGljCitWYXJpYWJsZVBvcyAq Cit2YXJpYWJsZV9wb3NfYnVpbGQoV2luZG93QWdnU3RhdGUgKndpbnN0YXRlKQoreworCVZhcmlh YmxlUG9zICp2YXJpYWJsZV9wb3M7CisJU3RyaW5nSW5mbwlwYXR0ZXJuX3N0cjsKKwlpbnQJCQlp bml0aWFsX2luZGV4ID0gMDsKKwlMaXN0Q2VsbCAgICpsYzEsCisJCQkgICAqbGMyOworCisJdmFy aWFibGVfcG9zID0gd2luc3RhdGUtPnZhcmlhYmxlX3BvcyA9IHZhcmlhYmxlX3Bvc19pbml0KCk7 CisJcGF0dGVybl9zdHIgPSB3aW5zdGF0ZS0+cGF0dGVybl9zdHIgPSBtYWtlU3RyaW5nSW5mbygp OworCWFwcGVuZFN0cmluZ0luZm9DaGFyKHBhdHRlcm5fc3RyLCAnXicpOworCisJZm9yYm90aChs YzEsIHdpbnN0YXRlLT5wYXR0ZXJuVmFyaWFibGVMaXN0LAorCQkJbGMyLCB3aW5zdGF0ZS0+cGF0 dGVyblJlZ2V4cExpc3QpCisJeworCQljaGFyCSAgICp2bmFtZSA9IHN0clZhbChsZmlyc3QobGMx KSk7CisJCWNoYXIJICAgKnF1YW50aWZpZXIgPSBzdHJWYWwobGZpcnN0KGxjMikpOworCQljaGFy CQlpbml0aWFsOworCisJCWluaXRpYWwgPSBwYXR0ZXJuX2luaXRpYWwod2luc3RhdGUsIHZuYW1l KTsKKwkJQXNzZXJ0KGluaXRpYWwgIT0gMCk7CisJCWFwcGVuZFN0cmluZ0luZm9DaGFyKHBhdHRl cm5fc3RyLCBpbml0aWFsKTsKKwkJaWYgKHF1YW50aWZpZXJbMF0pCisJCQlhcHBlbmRTdHJpbmdJ bmZvQ2hhcihwYXR0ZXJuX3N0ciwgcXVhbnRpZmllclswXSk7CisKKwkJLyoKKwkJICogUmVnaXN0 ZXIgdGhlIGluaXRpYWwgYXQgaW5pdGlhbF9pbmRleC4gSWYgdGhlIGluaXRpYWwgYXBwZWFycyBt b3JlCisJCSAqIHRoYW4gb25jZSwgYWxsIG9mIGl0J3MgaW5pdGlhbF9pbmRleCB3aWxsIGJlIHJl Y29yZGVkLiBUaGlzIGNvdWxkCisJCSAqIGhhcHBlbiBpZiBhIHBhdHRlcm4gdmFyaWFibGUgYXBw ZWFycyBpbiB0aGUgUEFUVEVSTiBjbGF1c2UgbW9yZQorCQkgKiB0aGFuIG9uY2UgbGlrZSAiVVAg RE9XTiBVUCIgIlVQIFVQIFVQIi4KKwkJICovCisJCXZhcmlhYmxlX3Bvc19yZWdpc3Rlcih2YXJp YWJsZV9wb3MsIGluaXRpYWwsIGluaXRpYWxfaW5kZXgpOworCisJCWluaXRpYWxfaW5kZXgrKzsK Kwl9CisKKwlyZXR1cm4gdmFyaWFibGVfcG9zOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv dXRpbHMvYWR0L3dpbmRvd2Z1bmNzLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvd2luZG93ZnVu Y3MuYwppbmRleCBiYjM1ZjNiYzRhOS4uNDMyZDZjMWIwYTMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL3V0aWxzL2FkdC93aW5kb3dmdW5jcy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC93 aW5kb3dmdW5jcy5jCkBAIC0zNywxMSArMzcsMTkgQEAgdHlwZWRlZiBzdHJ1Y3QKIAlpbnQ2NAkJ cmVtYWluZGVyOwkJLyogKHRvdGFsIHJvd3MpICUgKGJ1Y2tldCBudW0pICovCiB9IG50aWxlX2Nv bnRleHQ7CiAKKy8qCisgKiBycHIgcHJvY2VzcyBpbmZvcm1hdGlvbi4KKyAqIFVzZWQgZm9yIEFG VEVSIE1BVENIIFNLSVAgUEFTVCBMQVNUIFJPVworICovCit0eXBlZGVmIHN0cnVjdCBTa2lwQ29u dGV4dAoreworCWludDY0CQlwb3M7CQkJLyogbGFzdCByb3cgYWJzb2x1dGUgcG9zaXRpb24gKi8K K30gU2tpcENvbnRleHQ7CisKIHN0YXRpYyBib29sIHJhbmtfdXAoV2luZG93T2JqZWN0IHdpbm9i aik7CiBzdGF0aWMgRGF0dW0gbGVhZGxhZ19jb21tb24oRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8s CiAJCQkJCQkJYm9vbCBmb3J3YXJkLCBib29sIHdpdGhvZmZzZXQsIGJvb2wgd2l0aGRlZmF1bHQp OwogCi0KIC8qCiAgKiB1dGlsaXR5IHJvdXRpbmUgZm9yICpfcmFuayBmdW5jdGlvbnMuCiAgKi8K QEAgLTY3NCw3ICs2ODIsNyBAQCB3aW5kb3dfbGFzdF92YWx1ZShQR19GVU5DVElPTl9BUkdTKQog CWJvb2wJCWlzbnVsbDsKIAogCXJlc3VsdCA9IFdpbkdldEZ1bmNBcmdJbkZyYW1lKHdpbm9iaiwg MCwKLQkJCQkJCQkJICAwLCBXSU5ET1dfU0VFS19UQUlMLCB0cnVlLAorCQkJCQkJCQkgIDAsIFdJ TkRPV19TRUVLX1RBSUwsIGZhbHNlLAogCQkJCQkJCQkgICZpc251bGwsIE5VTEwpOwogCWlmIChp c251bGwpCiAJCVBHX1JFVFVSTl9OVUxMKCk7CkBAIC03MTQsMyArNzIyLDI1IEBAIHdpbmRvd19u dGhfdmFsdWUoUEdfRlVOQ1RJT05fQVJHUykKIAogCVBHX1JFVFVSTl9EQVRVTShyZXN1bHQpOwog fQorCisvKgorICogcHJldgorICogRHVtbXkgZnVuY3Rpb24gdG8gaW52b2tlIFJQUidzIG5hdmln YXRpb24gb3BlcmF0b3IgIlBSRVYiLgorICogVGhpcyBpcyAqbm90KiBhIHdpbmRvdyBmdW5jdGlv bi4KKyAqLworRGF0dW0KK3dpbmRvd19wcmV2KFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJUEdfUkVU VVJOX0RBVFVNKFBHX0dFVEFSR19EQVRVTSgwKSk7Cit9CisKKy8qCisgKiBuZXh0CisgKiBEdW1t eSBmdW5jdGlvbiB0byBpbnZva2UgUlBSJ3MgbmF2aWdhdGlvbiBvcGVyYXRpb24gIk5FWFQiLgor ICogVGhpcyBpcyAqbm90KiBhIHdpbmRvdyBmdW5jdGlvbi4KKyAqLworRGF0dW0KK3dpbmRvd19u ZXh0KFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJUEdfUkVUVVJOX0RBVFVNKFBHX0dFVEFSR19EQVRV TSgwKSk7Cit9CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0IGIv c3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAppbmRleCAwMWViYTNiNWExOS4uYTk0Njg2 MmRkN2QgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKKysrIGIv c3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdApAQCAtMTA4MjksNiArMTA4MjksMTIgQEAK IHsgb2lkID0+ICczMTE0JywgZGVzY3IgPT4gJ2ZldGNoIHRoZSBOdGggcm93IHZhbHVlJywKICAg cHJvbmFtZSA9PiAnbnRoX3ZhbHVlJywgcHJva2luZCA9PiAndycsIHByb3JldHR5cGUgPT4gJ2Fu eWVsZW1lbnQnLAogICBwcm9hcmd0eXBlcyA9PiAnYW55ZWxlbWVudCBpbnQ0JywgcHJvc3JjID0+ ICd3aW5kb3dfbnRoX3ZhbHVlJyB9LAoreyBvaWQgPT4gJzgxMjYnLCBkZXNjciA9PiAncHJldmlv dXMgdmFsdWUnLAorICBwcm9uYW1lID0+ICdwcmV2JywgcHJvdm9sYXRpbGUgPT4gJ3MnLCBwcm9y ZXR0eXBlID0+ICdhbnllbGVtZW50JywKKyAgcHJvYXJndHlwZXMgPT4gJ2FueWVsZW1lbnQnLCBw cm9zcmMgPT4gJ3dpbmRvd19wcmV2JyB9LAoreyBvaWQgPT4gJzgxMjcnLCBkZXNjciA9PiAnbmV4 dCB2YWx1ZScsCisgIHByb25hbWUgPT4gJ25leHQnLCBwcm92b2xhdGlsZSA9PiAncycsIHByb3Jl dHR5cGUgPT4gJ2FueWVsZW1lbnQnLAorICBwcm9hcmd0eXBlcyA9PiAnYW55ZWxlbWVudCcsIHBy b3NyYyA9PiAnd2luZG93X25leHQnIH0sCiAKICMgZnVuY3Rpb25zIGZvciByYW5nZSB0eXBlcwog eyBvaWQgPT4gJzM4MzInLCBkZXNjciA9PiAnSS9PJywKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L25vZGVzL2V4ZWNub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKaW5kZXgg M2E5MjBjYzdkMTcuLjY4ZTQwNmE3OWI0IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9l eGVjbm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaApAQCAtMjYxOSw2 ICsyNjE5LDM3IEBAIHR5cGVkZWYgZW51bSBXaW5kb3dBZ2dTdGF0dXMKIAkJCQkJCQkJCSAqIHR1 cGxlcyBkdXJpbmcgc3Bvb2wgKi8KIH0gV2luZG93QWdnU3RhdHVzOwogCisjZGVmaW5lCVJGX05P VF9ERVRFUk1JTkVECTAKKyNkZWZpbmUJUkZfRlJBTUVfSEVBRAkJMQorI2RlZmluZQlSRl9TS0lQ UEVECQkJMgorI2RlZmluZQlSRl9VTk1BVENIRUQJCTMKKworLyoKKyAqIEFsbG93ZWQgUEFUVEVS TiB2YXJpYWJsZXMgcG9zaXRpb25zLgorICogVXNlZCBpbiBSUFIuCisgKgorICogcG9zIHJlcHJl c2VudHMgdGhlIHBhdHRlcm4gdmFyaWFibGUgZGVmaW5lZCBvcmRlciBpbiBERUZJTkUgY2FsdWFz ZS4gIEZvcgorICogZXhhbXBsZS4gIkRFRklORSBTVEFSVC4uLiwgVVAuLi4sIERPV04gLi4uIiBh bmQgIlBBVFRFUk4gU1RBUlQgVVAgRE9XTiBVUCIKKyAqIHdpbGwgY3JlYXRlOgorICogVmFyaWFi bGVQb3NbMF0ucG9zWzBdID0gMDsJCVNUQVJUCisgKiBWYXJpYWJsZVBvc1sxXS5wb3NbMF0gPSAx OwkJVVAKKyAqIFZhcmlhYmxlUG9zWzFdLnBvc1sxXSA9IDM7CQlVUAorICogVmFyaWFibGVQb3Nb Ml0ucG9zWzBdID0gMjsJCURPV04KKyAqCisgKiBOb3RlIHRoYXQgVVAgaGFzIHR3byBwb3MgYmVj YXVzZSBVUCBhcHBlYXJzIGluIFBBVFRFUk4gdHdpY2UuCisgKgorICogQnkgdXNpbmcgdGhpcyBz dHJ1Y3J0dXJlLCB3ZSBjYW4ga25vdyB3aGljaCBwYXR0ZXJuIHZhcmlhYmxlIGNhbiBiZSBmb2xs b3dlZAorICogYnkgd2hpY2ggcGF0dGVybiB2YXJpYWJsZShzKS4gRm9yIGV4YW1wbGUsIFNUQVJU IGNhbiBiZSBmb2xsb3dlZCBieSBVUCBhbmQKKyAqIERPV04gc2luY2UgU1RBUlQncyBwb3MgaXMg MCwgYW5kIFVQJ3MgcG9zIGlzIDEgb3IgMywgRE9XTidzIHBvcyBpcyAyLgorICogRE9XTiBjYW4g YmUgZm9sbG93ZWQgYnkgVVAgc2luY2UgVVAncyBwb3MgaXMgZWl0aGVyIDEgb3IgMy4KKyAqCisg Ki8KKyNkZWZpbmUgTlVNX0FMUEhBQkVUUwkyNgkJLyogd2UgYWxsb3cgW2Etel0gdmFyaWFibGUg aW5pdGlhbHMgKi8KK3R5cGVkZWYgc3RydWN0IFZhcmlhYmxlUG9zCit7CisJaW50CQkJcG9zW05V TV9BTFBIQUJFVFNdOyAvKiBwb3N0aW9ucyBpbiBQQVRURVJOICovCit9IFZhcmlhYmxlUG9zOwor CiB0eXBlZGVmIHN0cnVjdCBXaW5kb3dBZ2dTdGF0ZQogewogCVNjYW5TdGF0ZQlzczsJCQkJLyog aXRzIGZpcnN0IGZpZWxkIGlzIE5vZGVUYWcgKi8KQEAgLTI2NzgsNiArMjcwOSwyMSBAQCB0eXBl ZGVmIHN0cnVjdCBXaW5kb3dBZ2dTdGF0ZQogCWludDY0CQlncm91cGhlYWRwb3M7CS8qIGN1cnJl bnQgcm93J3MgcGVlciBncm91cCBoZWFkIHBvc2l0aW9uICovCiAJaW50NjQJCWdyb3VwdGFpbHBv czsJLyogIiAiICIgIiB0YWlsIHBvc2l0aW9uIChncm91cCBlbmQrMSkgKi8KIAorCS8qIHRoZXNl IGZpZWxkcyBhcmUgdXNlZCBpbiBSb3cgcGF0dGVybiByZWNvZ25pdGlvbjogKi8KKwlSUFNraXBU bwlycFNraXBUbzsJCS8qIFJvdyBQYXR0ZXJuIFNraXAgVG8gdHlwZSAqLworCUxpc3QJICAgKnBh dHRlcm5WYXJpYWJsZUxpc3Q7CS8qIGxpc3Qgb2Ygcm93IHBhdHRlcm4gdmFyaWFibGVzIG5hbWVz CisJCQkJCQkJCQkJICogKGxpc3Qgb2YgU3RyaW5nKSAqLworCUxpc3QJICAgKnBhdHRlcm5SZWdl eHBMaXN0OwkvKiBsaXN0IG9mIHJvdyBwYXR0ZXJuIHJlZ3VsYXIgZXhwcmVzc2lvbnMKKwkJCQkJ CQkJCSAqICgnKycgb3IgJycuIGxpc3Qgb2YgU3RyaW5nKSAqLworCUxpc3QJICAgKmRlZmluZVZh cmlhYmxlTGlzdDsgLyogbGlzdCBvZiByb3cgcGF0dGVybiBkZWZpbml0aW9uCisJCQkJCQkJCQkg KiB2YXJpYWJsZXMgKGxpc3Qgb2YgU3RyaW5nKSAqLworCUxpc3QJICAgKmRlZmluZUNsYXVzZUxp c3Q7CS8qIGV4cHJlc3Npb24gZm9yIHJvdyBwYXR0ZXJuIGRlZmluaXRpb24KKwkJCQkJCQkJCSAq IHNlYXJjaCBjb25kaXRpb25zIEV4cHJTdGF0ZSBsaXN0ICovCisJTGlzdAkgICAqZGVmaW5lSW5p dGlhbDsJLyogbGlzdCBvZiByb3cgcGF0dGVybiBkZWZpbml0aW9uIHZhcmlhYmxlCisJCQkJCQkJ CSAqIGluaXRpYWxzIChsaXN0IG9mIFN0cmluZykgKi8KKwlWYXJpYWJsZVBvcyAqdmFyaWFibGVf cG9zOwkvKiBsaXN0IG9mIHBhdHRlcm4gdmFyaWFibGUgcG9zaXRpb25zICovCisJU3RyaW5nSW5m bwlwYXR0ZXJuX3N0cjsJLyogUEFUVEVSTiBpbml0aWFscyAqLworCiAJTWVtb3J5Q29udGV4dCBw YXJ0Y29udGV4dDsJLyogY29udGV4dCBmb3IgcGFydGl0aW9uLWxpZmVzcGFuIGRhdGEgKi8KIAlN ZW1vcnlDb250ZXh0IGFnZ2NvbnRleHQ7CS8qIHNoYXJlZCBjb250ZXh0IGZvciBhZ2dyZWdhdGUg d29ya2luZyBkYXRhICovCiAJTWVtb3J5Q29udGV4dCBjdXJhZ2djb250ZXh0OwkvKiBjdXJyZW50 IGFnZ3JlZ2F0ZSdzIHdvcmtpbmcgZGF0YSAqLwpAQCAtMjcwNSw2ICsyNzUxLDE4IEBAIHR5cGVk ZWYgc3RydWN0IFdpbmRvd0FnZ1N0YXRlCiAJVHVwbGVUYWJsZVNsb3QgKmFnZ19yb3dfc2xvdDsK IAlUdXBsZVRhYmxlU2xvdCAqdGVtcF9zbG90XzE7CiAJVHVwbGVUYWJsZVNsb3QgKnRlbXBfc2xv dF8yOworCisJLyogdGVtcG9yYXJ5IHNsb3RzIGZvciBSUFIgKi8KKwlUdXBsZVRhYmxlU2xvdCAq cHJldl9zbG90OwkvKiBQUkVWIHJvdyBuYXZpZ2F0aW9uIG9wZXJhdG9yICovCisJVHVwbGVUYWJs ZVNsb3QgKm5leHRfc2xvdDsJLyogTkVYVCByb3cgbmF2aWdhdGlvbiBvcGVyYXRvciAqLworCVR1 cGxlVGFibGVTbG90ICpudWxsX3Nsb3Q7CS8qIGFsbCBOVUxMIHNsb3QgKi8KKworCS8qCisJICog RWFjaCBieXRlIGNvcnJlc3BvbmRzIHRvIGEgcm93IHBvc2l0aW9uZWQgYXQgYWJzb2x1dGUgaXRz IHBvcyBpbgorCSAqIHBhcnRpdGlvbi4gIFNlZSBhYm92ZSBkZWZpbml0aW9uIGZvciBSRl8qCisJ ICovCisJY2hhcgkgICAqcmVkdWNlZF9mcmFtZV9tYXA7CisJaW50NjQJCWFsbG9jX3N6OwkJLyog c2l6ZSBvZiB0aGUgbWFwICovCiB9IFdpbmRvd0FnZ1N0YXRlOwogCiAvKiAtLS0tLS0tLS0tLS0t LS0tCi0tIAoyLjQzLjAKCg== ----Next_Part(Wed_Sep_24_19_35_23_2025_264)-- Content-Type: Application/Octet-Stream Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="v33-0006-Row-pattern-recognition-patch-docs.patch" RnJvbSBkOWMwYzc2M2Y4MzcxMTU5ZGJhZWY1MDI0YjA2YWQ0ZjBmNWVjOTYxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUYXRzdW8gSXNoaWkgPGlzaGlpQHBvc3RncmVzcWwub3JnPgpE YXRlOiBXZWQsIDI0IFNlcCAyMDI1IDE5OjE4OjM3ICswOTAwClN1YmplY3Q6IFtQQVRDSCB2MzMg Ni84XSBSb3cgcGF0dGVybiByZWNvZ25pdGlvbiBwYXRjaCAoZG9jcykuCgotLS0KIGRvYy9zcmMv c2dtbC9hZHZhbmNlZC5zZ21sICAgICAgICAgfCA4MSArKysrKysrKysrKysrKysrKysrKysrKysr KysrKysKIGRvYy9zcmMvc2dtbC9mdW5jL2Z1bmMtd2luZG93LnNnbWwgfCA1MyArKysrKysrKysr KysrKysrKysrCiBkb2Mvc3JjL3NnbWwvcmVmL3NlbGVjdC5zZ21sICAgICAgIHwgNDkgKysrKysr KysrKysrKysrKy0tCiAzIGZpbGVzIGNoYW5nZWQsIDE4MCBpbnNlcnRpb25zKCspLCAzIGRlbGV0 aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9hZHZhbmNlZC5zZ21sIGIvZG9jL3Ny Yy9zZ21sL2FkdmFuY2VkLnNnbWwKaW5kZXggZTE1YTMzMjNkZmIuLjUxNmNlMjg1ODNkIDEwMDY0 NAotLS0gYS9kb2Mvc3JjL3NnbWwvYWR2YW5jZWQuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvYWR2 YW5jZWQuc2dtbApAQCAtNTQwLDYgKzU0MCw4NyBAQCBXSEVSRSBwb3MgJmx0OyAzOwogICAgIHR3 byByb3dzIGZvciBlYWNoIGRlcGFydG1lbnQpLgogICAgPC9wYXJhPgogCisgICA8cGFyYT4KKyAg ICBSb3cgcGF0dGVybiBjb21tb24gc3ludGF4IGNhbiBiZSB1c2VkIHRvIHBlcmZvcm0gcm93IHBh dHRlcm4gcmVjb2duaXRpb24KKyAgICBpbiBhIHF1ZXJ5LiBUaGUgcm93IHBhdHRlcm4gY29tbW9u IHN5bnRheCBpbmNsdWRlcyB0d28gc3ViCisgICAgY2xhdXNlczogPGxpdGVyYWw+REVGSU5FPC9s aXRlcmFsPgorICAgIGFuZCA8bGl0ZXJhbD5QQVRURVJOPC9saXRlcmFsPi4gPGxpdGVyYWw+REVG SU5FPC9saXRlcmFsPiBkZWZpbmVzCisgICAgZGVmaW5pdGlvbiB2YXJpYWJsZXMgYWxvbmcgd2l0 aCBhbiBleHByZXNzaW9uLiBUaGUgZXhwcmVzc2lvbiBtdXN0IGJlIGEKKyAgICBsb2dpY2FsIGV4 cHJlc3Npb24sIHdoaWNoIG1lYW5zIGl0IG11c3QKKyAgICByZXR1cm4gPGxpdGVyYWw+VFJVRTwv bGl0ZXJhbD4sIDxsaXRlcmFsPkZBTFNFPC9saXRlcmFsPgorICAgIG9yIDxsaXRlcmFsPk5VTEw8 L2xpdGVyYWw+LiBUaGUgZXhwcmVzc2lvbiBtYXkgY29tcHJpc2UgY29sdW1uIHJlZmVyZW5jZXMK KyAgICBhbmQgZnVuY3Rpb25zLiBXaW5kb3cgZnVuY3Rpb25zLCBhZ2dyZWdhdGUgZnVuY3Rpb25z IGFuZCBzdWJxdWVyaWVzIGFyZQorICAgIG5vdCBhbGxvd2VkLiBBbiBleGFtcGxlIG9mIDxsaXRl cmFsPkRFRklORTwvbGl0ZXJhbD4gaXMgYXMgZm9sbG93cy4KKworPHByb2dyYW1saXN0aW5nPgor REVGSU5FCisgTE9XUFJJQ0UgQVMgcHJpY2UgJmx0Oz0gMTAwLAorIFVQIEFTIHByaWNlICZndDsg UFJFVihwcmljZSksCisgRE9XTiBBUyBwcmljZSAmbHQ7IFBSRVYocHJpY2UpCis8L3Byb2dyYW1s aXN0aW5nPgorCisgICAgTm90ZSB0aGF0IDxmdW5jdGlvbj5QUkVWPC9mdW5jdGlvbj4gcmV0dXJu cyB0aGUgcHJpY2UgY29sdW1uIGluIHRoZQorICAgIHByZXZpb3VzIHJvdyBpZiBpdCdzIGNhbGxl ZCBpbiBhIGNvbnRleHQgb2Ygcm93IHBhdHRlcm4gcmVjb2duaXRpb24uIFRodXMKKyAgICBpbiB0 aGUgc2Vjb25kIGxpbmUgdGhlIGRlZmluaXRpb24gdmFyaWFibGUgIlVQIiBpcyA8bGl0ZXJhbD5U UlVFPC9saXRlcmFsPgorICAgIHdoZW4gdGhlIHByaWNlIGNvbHVtbiBpbiB0aGUgY3VycmVudCBy b3cgaXMgZ3JlYXRlciB0aGFuIHRoZSBwcmljZSBjb2x1bW4KKyAgICBpbiB0aGUgcHJldmlvdXMg cm93LiBMaWtld2lzZSwgIkRPV04iIGlzIDxsaXRlcmFsPlRSVUU8L2xpdGVyYWw+IHdoZW4gdGhl CisgICAgcHJpY2UgY29sdW1uIGluIHRoZSBjdXJyZW50IHJvdyBpcyBsb3dlciB0aGFuIHRoZSBw cmljZSBjb2x1bW4gaW4gdGhlCisgICAgcHJldmlvdXMgcm93LgorICAgPC9wYXJhPgorICAgPHBh cmE+CisgICAgT25jZSA8bGl0ZXJhbD5ERUZJTkU8L2xpdGVyYWw+IGV4aXN0cywgPGxpdGVyYWw+ UEFUVEVSTjwvbGl0ZXJhbD4gY2FuIGJlCisgICAgdXNlZC4gPGxpdGVyYWw+UEFUVEVSTjwvbGl0 ZXJhbD4gZGVmaW5lcyBhIHNlcXVlbmNlIG9mIHJvd3MgdGhhdCBzYXRpc2ZpZXMKKyAgICBjb25k aXRpb25zIGRlZmluZWQgaW4gdGhlIDxsaXRlcmFsPkRFRklORTwvbGl0ZXJhbD4gY2xhdXNlLiAg Rm9yIGV4YW1wbGUKKyAgICBmb2xsb3dpbmcgPGxpdGVyYWw+UEFUVEVSTjwvbGl0ZXJhbD4gZGVm aW5lcyBhIHNlcXVlbmNlIG9mIHJvd3Mgc3RhcnRpbmcKKyAgICB3aXRoIHRoZSBhIHJvdyBzYXRp c2Z5aW5nICJMT1dQUklDRSIsIHRoZW4gb25lIG9yIG1vcmUgcm93cyBzYXRpc2Z5aW5nCisgICAg IlVQIiBhbmQgZmluYWxseSBvbmUgb3IgbW9yZSByb3dzIHNhdGlzZnlpbmcgIkRPV04iLiBOb3Rl IHRoYXQgIisiIG1lYW5zCisgICAgb25lIG9yIG1vcmUgbWF0Y2hlcy4gQWxzbyB5b3UgY2FuIHVz ZSAiKiIsIHdoaWNoIG1lYW5zIHplcm8gb3IgbW9yZQorICAgIG1hdGNoZXMuIElmIGEgc2VxdWVu Y2Ugb2Ygcm93cyB3aGljaCBzYXRpc2ZpZXMgdGhlIFBBVFRFUk4gaXMgZm91bmQsIGluCisgICAg dGhlIHN0YXJ0aW5nIHJvdyBhbGwgY29sdW1ucyBvciBmdW5jdGlvbnMgYXJlIHNob3duIGluIHRo ZSB0YXJnZXQKKyAgICBsaXN0LiBOb3RlIHRoYXQgYWdncmVnYXRpb25zIG9ubHkgbG9vayBpbnRv IHRoZSBtYXRjaGVkIHJvd3MsIHJhdGhlciB0aGFuCisgICAgdGhlIHdob2xlIGZyYW1lLiBPbiB0 aGUgc2Vjb25kIG9yIHN1YnNlcXVlbnQgcm93cyBhbGwgd2luZG93IGZ1bmN0aW9ucyBhcmUKKyAg ICBzaG93biBhcyBOVUxMLiBBZ2dyZWdhdGVzIGFyZSBOVUxMIG9yIDAgZGVwZW5kaW5nIG9uIGl0 cyBhZ2dyZWdhdGlvbgorICAgIGRlZmluaXRpb24uIEEgY291bnQoKSBhZ2dyZWdhdGUgc2hvd3Mg MC4gRm9yIHJvd3MgdGhhdCBkbyBub3QgbWF0Y2ggb24gdGhlCisgICAgUEFUVEVSTiwgY29sdW1u cyBhcmUgc2hvd24gQVMgTlVMTCB0b28uIEV4YW1wbGUgb2YKKyAgICBhIDxsaXRlcmFsPlNFTEVD VDwvbGl0ZXJhbD4gdXNpbmcgdGhlIDxsaXRlcmFsPkRFRklORTwvbGl0ZXJhbD4KKyAgICBhbmQg PGxpdGVyYWw+UEFUVEVSTjwvbGl0ZXJhbD4gY2xhdXNlIGlzIGFzIGZvbGxvd3MuCisKKzxwcm9n cmFtbGlzdGluZz4KK1NFTEVDVCBjb21wYW55LCB0ZGF0ZSwgcHJpY2UsCisgZmlyc3RfdmFsdWUo cHJpY2UpIE9WRVIgdywKKyBtYXgocHJpY2UpIE9WRVIgdywKKyBjb3VudChwcmljZSkgT1ZFUiB3 CitGUk9NIHN0b2NrCisgV0lORE9XIHcgQVMgKAorIFBBUlRJVElPTiBCWSBjb21wYW55CisgT1JE RVIgQlkgdGRhdGUKKyBST1dTIEJFVFdFRU4gQ1VSUkVOVCBST1cgQU5EIFVOQk9VTkRFRCBGT0xM T1dJTkcKKyBBRlRFUiBNQVRDSCBTS0lQIFBBU1QgTEFTVCBST1cKKyBJTklUSUFMCisgUEFUVEVS TiAoTE9XUFJJQ0UgVVArIERPV04rKQorIERFRklORQorICBMT1dQUklDRSBBUyBwcmljZSAmbHQ7 PSAxMDAsCisgIFVQIEFTIHByaWNlICZndDsgUFJFVihwcmljZSksCisgIERPV04gQVMgcHJpY2Ug Jmx0OyBQUkVWKHByaWNlKQorKTsKKzwvcHJvZ3JhbWxpc3Rpbmc+Cis8c2NyZWVuPgorIGNvbXBh bnkgIHwgICB0ZGF0ZSAgICB8IHByaWNlIHwgZmlyc3RfdmFsdWUgfCBtYXggfCBjb3VudCAKKy0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLSstLS0tLS0t CisgY29tcGFueTEgfCAyMDIzLTA3LTAxIHwgICAxMDAgfCAgICAgICAgIDEwMCB8IDIwMCB8ICAg ICA0CisgY29tcGFueTEgfCAyMDIzLTA3LTAyIHwgICAyMDAgfCAgICAgICAgICAgICB8ICAgICB8 ICAgICAwCisgY29tcGFueTEgfCAyMDIzLTA3LTAzIHwgICAxNTAgfCAgICAgICAgICAgICB8ICAg ICB8ICAgICAwCisgY29tcGFueTEgfCAyMDIzLTA3LTA0IHwgICAxNDAgfCAgICAgICAgICAgICB8 ICAgICB8ICAgICAwCisgY29tcGFueTEgfCAyMDIzLTA3LTA1IHwgICAxNTAgfCAgICAgICAgICAg ICB8ICAgICB8ICAgICAwCisgY29tcGFueTEgfCAyMDIzLTA3LTA2IHwgICAgOTAgfCAgICAgICAg ICA5MCB8IDEzMCB8ICAgICA0CisgY29tcGFueTEgfCAyMDIzLTA3LTA3IHwgICAxMTAgfCAgICAg ICAgICAgICB8ICAgICB8ICAgICAwCisgY29tcGFueTEgfCAyMDIzLTA3LTA4IHwgICAxMzAgfCAg ICAgICAgICAgICB8ICAgICB8ICAgICAwCisgY29tcGFueTEgfCAyMDIzLTA3LTA5IHwgICAxMjAg fCAgICAgICAgICAgICB8ICAgICB8ICAgICAwCisgY29tcGFueTEgfCAyMDIzLTA3LTEwIHwgICAx MzAgfCAgICAgICAgICAgICB8ICAgICB8ICAgICAwCisoMTAgcm93cykKKzwvc2NyZWVuPgorICAg PC9wYXJhPgorCiAgICA8cGFyYT4KICAgICBXaGVuIGEgcXVlcnkgaW52b2x2ZXMgbXVsdGlwbGUg d2luZG93IGZ1bmN0aW9ucywgaXQgaXMgcG9zc2libGUgdG8gd3JpdGUKICAgICBvdXQgZWFjaCBv bmUgd2l0aCBhIHNlcGFyYXRlIDxsaXRlcmFsPk9WRVI8L2xpdGVyYWw+IGNsYXVzZSwgYnV0IHRo aXMgaXMKZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9mdW5jL2Z1bmMtd2luZG93LnNnbWwgYi9k b2Mvc3JjL3NnbWwvZnVuYy9mdW5jLXdpbmRvdy5zZ21sCmluZGV4IGNjZTAxNjViOTUyLi5jOWFm YjRmY2I4OCAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2Z1bmMvZnVuYy13aW5kb3cuc2dtbAor KysgYi9kb2Mvc3JjL3NnbWwvZnVuYy9mdW5jLXdpbmRvdy5zZ21sCkBAIC0yNjUsNiArMjY1LDU5 IEBACiAgICBPdGhlciBmcmFtZSBzcGVjaWZpY2F0aW9ucyBjYW4gYmUgdXNlZCB0byBvYnRhaW4g b3RoZXIgZWZmZWN0cy4KICAgPC9wYXJhPgogCisgIDxwYXJhPgorICAgUm93IHBhdHRlcm4gcmVj b2duaXRpb24gbmF2aWdhdGlvbiBmdW5jdGlvbnMgYXJlIGxpc3RlZCBpbgorICAgPHhyZWYgbGlu a2VuZD0iZnVuY3Rpb25zLXJwci1uYXZpZ2F0aW9uLXRhYmxlIi8+LiAgVGhlc2UgZnVuY3Rpb25z CisgICBjYW4gYmUgdXNlZCB0byBkZXNjcmliZSBERUZJTkUgY2xhdXNlIG9mIFJvdyBwYXR0ZXJu IHJlY29nbml0aW9uLgorICA8L3BhcmE+CisKKyAgIDx0YWJsZSBpZD0iZnVuY3Rpb25zLXJwci1u YXZpZ2F0aW9uLXRhYmxlIj4KKyAgICA8dGl0bGU+Um93IFBhdHRlcm4gTmF2aWdhdGlvbiBGdW5j dGlvbnM8L3RpdGxlPgorICAgIDx0Z3JvdXAgY29scz0iMSI+CisgICAgIDx0aGVhZD4KKyAgICAg IDxyb3c+CisgICAgICAgPGVudHJ5IHJvbGU9ImZ1bmNfdGFibGVfZW50cnkiPjxwYXJhIHJvbGU9 ImZ1bmNfc2lnbmF0dXJlIj4KKyAgICAgICAgRnVuY3Rpb24KKyAgICAgICA8L3BhcmE+CisgICAg ICAgPHBhcmE+CisgICAgICAgIERlc2NyaXB0aW9uCisgICAgICAgPC9wYXJhPjwvZW50cnk+Cisg ICAgICA8L3Jvdz4KKyAgICAgPC90aGVhZD4KKworICAgICA8dGJvZHk+CisgICAgICA8cm93Pgor ICAgICAgIDxlbnRyeSByb2xlPSJmdW5jX3RhYmxlX2VudHJ5Ij48cGFyYSByb2xlPSJmdW5jX3Np Z25hdHVyZSI+CisgICAgICAgIDxpbmRleHRlcm0+CisgICAgICAgICA8cHJpbWFyeT5wcmV2PC9w cmltYXJ5PgorICAgICAgICA8L2luZGV4dGVybT4KKyAgICAgICAgPGZ1bmN0aW9uPnByZXY8L2Z1 bmN0aW9uPiAoIDxwYXJhbWV0ZXI+dmFsdWU8L3BhcmFtZXRlcj4gPHR5cGU+YW55ZWxlbWVudDwv dHlwZT4gKQorICAgICAgICA8cmV0dXJudmFsdWU+YW55ZWxlbWVudDwvcmV0dXJudmFsdWU+Cisg ICAgICAgPC9wYXJhPgorICAgICAgIDxwYXJhPgorICAgICAgICBSZXR1cm5zIHRoZSBjb2x1bW4g dmFsdWUgYXQgdGhlIHByZXZpb3VzIHJvdzsKKyAgICAgICAgcmV0dXJucyBOVUxMIGlmIHRoZXJl IGlzIG5vIHByZXZpb3VzIHJvdyBpbiB0aGUgd2luZG93IGZyYW1lLgorICAgICAgIDwvcGFyYT48 L2VudHJ5PgorICAgICAgPC9yb3c+CisKKyAgICAgIDxyb3c+CisgICAgICAgPGVudHJ5IHJvbGU9 ImZ1bmNfdGFibGVfZW50cnkiPjxwYXJhIHJvbGU9ImZ1bmNfc2lnbmF0dXJlIj4KKyAgICAgICAg PGluZGV4dGVybT4KKyAgICAgICAgIDxwcmltYXJ5Pm5leHQ8L3ByaW1hcnk+CisgICAgICAgIDwv aW5kZXh0ZXJtPgorICAgICAgICA8ZnVuY3Rpb24+bmV4dDwvZnVuY3Rpb24+ICggPHBhcmFtZXRl cj52YWx1ZTwvcGFyYW1ldGVyPiA8dHlwZT5hbnllbGVtZW50PC90eXBlPiApCisgICAgICAgIDxy ZXR1cm52YWx1ZT5hbnllbGVtZW50PC9yZXR1cm52YWx1ZT4KKyAgICAgICA8L3BhcmE+CisgICAg ICAgPHBhcmE+CisgICAgICAgIFJldHVybnMgdGhlIGNvbHVtbiB2YWx1ZSBhdCB0aGUgbmV4dCBy b3c7CisgICAgICAgIHJldHVybnMgTlVMTCBpZiB0aGVyZSBpcyBubyBuZXh0IHJvdyBpbiB0aGUg d2luZG93IGZyYW1lLgorICAgICAgIDwvcGFyYT48L2VudHJ5PgorICAgICAgPC9yb3c+CisKKyAg ICAgPC90Ym9keT4KKyAgICA8L3Rncm91cD4KKyAgIDwvdGFibGU+CisKICAgPG5vdGU+CiAgICA8 cGFyYT4KICAgICBUaGUgU1FMIHN0YW5kYXJkIGRlZmluZXMgYSA8bGl0ZXJhbD5SRVNQRUNUIE5V TExTPC9saXRlcmFsPiBvcgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3JlZi9zZWxlY3Quc2dt bCBiL2RvYy9zcmMvc2dtbC9yZWYvc2VsZWN0LnNnbWwKaW5kZXggZDcwODllYWMwYmUuLjU4MzNk YzcwYjQzIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVmL3NlbGVjdC5zZ21sCisrKyBiL2Rv Yy9zcmMvc2dtbC9yZWYvc2VsZWN0LnNnbWwKQEAgLTkyNyw2ICs5MjcsNyBAQCBXSU5ET1cgPHJl cGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPndpbmRvd19uYW1lPC9yZXBsYWNlYWJsZT4gQVMg KCA8cmVwbGFjZWFibAogWyBQQVJUSVRJT04gQlkgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0 ZXIiPmV4cHJlc3Npb248L3JlcGxhY2VhYmxlPiBbLCAuLi5dIF0KIFsgT1JERVIgQlkgPHJlcGxh Y2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmV4cHJlc3Npb248L3JlcGxhY2VhYmxlPiBbIEFTQyB8 IERFU0MgfCBVU0lORyA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+b3BlcmF0b3I8L3Jl cGxhY2VhYmxlPiBdIFsgTlVMTFMgeyBGSVJTVCB8IExBU1QgfSBdIFssIC4uLl0gXQogWyA8cmVw bGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+ZnJhbWVfY2xhdXNlPC9yZXBsYWNlYWJsZT4gXQor WyA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+cm93X3BhdHRlcm5fY29tbW9uX3N5bnRh eDwvcmVwbGFjZWFibGU+IF0KIDwvc3lub3BzaXM+CiAgICA8L3BhcmE+CiAKQEAgLTk2OSw4ICs5 NzAsOCBAQCBXSU5ET1cgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPndpbmRvd19uYW1l PC9yZXBsYWNlYWJsZT4gQVMgKCA8cmVwbGFjZWFibAogICAgIFRoZSA8cmVwbGFjZWFibGUgY2xh c3M9InBhcmFtZXRlciI+ZnJhbWVfY2xhdXNlPC9yZXBsYWNlYWJsZT4gY2FuIGJlIG9uZSBvZgog CiA8c3lub3BzaXM+Ci17IFJBTkdFIHwgUk9XUyB8IEdST1VQUyB9IDxyZXBsYWNlYWJsZT5mcmFt ZV9zdGFydDwvcmVwbGFjZWFibGU+IFsgPHJlcGxhY2VhYmxlPmZyYW1lX2V4Y2x1c2lvbjwvcmVw bGFjZWFibGU+IF0KLXsgUkFOR0UgfCBST1dTIHwgR1JPVVBTIH0gQkVUV0VFTiA8cmVwbGFjZWFi bGU+ZnJhbWVfc3RhcnQ8L3JlcGxhY2VhYmxlPiBBTkQgPHJlcGxhY2VhYmxlPmZyYW1lX2VuZDwv cmVwbGFjZWFibGU+IFsgPHJlcGxhY2VhYmxlPmZyYW1lX2V4Y2x1c2lvbjwvcmVwbGFjZWFibGU+ IF0KK3sgUkFOR0UgfCBST1dTIHwgR1JPVVBTIH0gPHJlcGxhY2VhYmxlPmZyYW1lX3N0YXJ0PC9y ZXBsYWNlYWJsZT4gWyA8cmVwbGFjZWFibGU+ZnJhbWVfZXhjbHVzaW9uPC9yZXBsYWNlYWJsZT4g XSBbcm93X3BhdHRlcm5fY29tbW9uX3N5bnRheF0KK3sgUkFOR0UgfCBST1dTIHwgR1JPVVBTIH0g QkVUV0VFTiA8cmVwbGFjZWFibGU+ZnJhbWVfc3RhcnQ8L3JlcGxhY2VhYmxlPiBBTkQgPHJlcGxh Y2VhYmxlPmZyYW1lX2VuZDwvcmVwbGFjZWFibGU+IFsgPHJlcGxhY2VhYmxlPmZyYW1lX2V4Y2x1 c2lvbjwvcmVwbGFjZWFibGU+IF0gW3Jvd19wYXR0ZXJuX2NvbW1vbl9zeW50YXhdCiA8L3N5bm9w c2lzPgogCiAgICAgd2hlcmUgPHJlcGxhY2VhYmxlPmZyYW1lX3N0YXJ0PC9yZXBsYWNlYWJsZT4K QEAgLTEwNzcsOSArMTA3OCw1MSBAQCBFWENMVURFIE5PIE9USEVSUwogICAgIGEgZ2l2ZW4gcGVl ciBncm91cCB3aWxsIGJlIGluIHRoZSBmcmFtZSBvciBleGNsdWRlZCBmcm9tIGl0LgogICAgPC9w YXJhPgogCisgICA8cGFyYT4KKyAgICBUaGUKKyAgICBvcHRpb25hbCA8cmVwbGFjZWFibGUgY2xh c3M9InBhcmFtZXRlciI+cm93X3BhdHRlcm5fY29tbW9uX3N5bnRheDwvcmVwbGFjZWFibGU+Cisg ICAgZGVmaW5lcyB0aGUgPGZpcnN0dGVybT5yb3cgcGF0dGVybiByZWNvZ25pdGlvbiBjb25kaXRp b248L2ZpcnN0dGVybT4gZm9yCisgICAgdGhpcworICAgIHdpbmRvdy4gPHJlcGxhY2VhYmxlIGNs YXNzPSJwYXJhbWV0ZXIiPnJvd19wYXR0ZXJuX2NvbW1vbl9zeW50YXg8L3JlcGxhY2VhYmxlPgor ICAgIGluY2x1ZGVzIGZvbGxvd2luZyBzdWJjbGF1c2VzLgorCis8c3lub3BzaXM+CitbIEFGVEVS IE1BVENIIFNLSVAgUEFTVCBMQVNUIFJPVyB8IEFGVEVSIE1BVENIIFNLSVAgVE8gTkVYVCBST1cg XQorUEFUVEVSTiA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+cGF0dGVybl92YXJpYWJs ZV9uYW1lPC9yZXBsYWNlYWJsZT5bK10gWywgLi4uXQorREVGSU5FIDxyZXBsYWNlYWJsZSBjbGFz cz0icGFyYW1ldGVyIj5kZWZpbml0aW9uX3ZhcmlibGVfbmFtZTwvcmVwbGFjZWFibGU+IEFTIDxy ZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5leHByZXNzaW9uPC9yZXBsYWNlYWJsZT4gWywg Li4uXQorPC9zeW5vcHNpcz4KKyAgICA8bGl0ZXJhbD5BRlRFUiBNQVRDSCBTS0lQIFBBU1QgTEFT VCBST1c8L2xpdGVyYWw+IG9yIDxsaXRlcmFsPkFGVEVSIE1BVENICisgICAgU0tJUCBUTyBORVhU IFJPVzwvbGl0ZXJhbD4gY29udHJvbHMgaG93IHRvIHByb2NlZWQgdG8gbmV4dCByb3cgcG9zaXRp b24KKyAgICBhZnRlciBhIG1hdGNoIGZvdW5kLiBXaXRoIDxsaXRlcmFsPkFGVEVSIE1BVENIIFNL SVAgUEFTVCBMQVNUCisgICAgUk9XPC9saXRlcmFsPiAodGhlIGRlZmF1bHQpIG5leHQgcm93IHBv c2l0aW9uIGlzIG5leHQgdG8gdGhlIGxhc3Qgcm93IG9mCisgICAgcHJldmlvdXMgbWF0Y2guIE9u IHRoZSBvdGhlciBoYW5kLCB3aXRoIDxsaXRlcmFsPkFGVEVSIE1BVENIIFNLSVAgVE8gTkVYVAor ICAgIFJPVzwvbGl0ZXJhbD4gbmV4dCByb3cgcG9zaXRpb24gaXMgYWx3YXlzIG5leHQgdG8gdGhl IGxhc3Qgcm93IG9mIHByZXZpb3VzCisgICAgbWF0Y2guIDxsaXRlcmFsPkRFRklORTwvbGl0ZXJh bD4gZGVmaW5lcyBkZWZpbml0aW9uIHZhcmlhYmxlcyBhbG9uZyB3aXRoIGEKKyAgICBib29sZWFu IGV4cHJlc3Npb24uIDxsaXRlcmFsPlBBVFRFUk48L2xpdGVyYWw+IGRlZmluZXMgYSBzZXF1ZW5j ZSBvZiByb3dzCisgICAgdGhhdCBzYXRpc2ZpZXMgY2VydGFpbiBjb25kaXRpb25zIHVzaW5nIHZh cmlhYmxlcyBkZWZpbmVkCisgICAgaW4gPGxpdGVyYWw+REVGSU5FPC9saXRlcmFsPiBjbGF1c2Uu IElmIHRoZSB2YXJpYWJsZSBpcyBub3QgZGVmaW5lZCBpbgorICAgIHRoZSA8bGl0ZXJhbD5ERUZJ TkU8L2xpdGVyYWw+IGNsYXVzZSwgaXQgaXMgaW1wbGljaXRseSBhc3N1bWVkIGZvbGxvd2luZwor ICAgIGlzIGRlZmluZWQgaW4gdGhlIDxsaXRlcmFsPkRFRklORTwvbGl0ZXJhbD4gY2xhdXNlLgor Cis8c3lub3BzaXM+Cis8bGl0ZXJhbD52YXJpYWJsZV9uYW1lPC9saXRlcmFsPiBBUyBUUlVFCis8 L3N5bm9wc2lzPgorCisgICAgTm90ZSB0aGF0IHRoZSBtYXhpbXUgbnVtYmVyIG9mIHZhcmlhYmxl cyBkZWZpbmVkCisgICAgaW4gPGxpdGVyYWw+REVGSU5FPC9saXRlcmFsPiBjbGF1c2UgaXMgMjYu CisgICA8L3BhcmE+CisKKyAgIDxwYXJhPgorICAgIFRoZSBTUUwgc3RhbmRhcmQgZGVmaW5lcyBt b3JlIHN1YmNsYXVzZXM6IDxsaXRlcmFsPk1FQVNVUkVTPC9saXRlcmFsPgorICAgIGFuZCA8bGl0 ZXJhbD5TVUJTRVQ8L2xpdGVyYWw+LiBUaGV5IGFyZSBub3QgY3VycmVudGx5IHN1cHBvcnRlZAor ICAgIGluIDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT4uIEFsc28gaW4gdGhl IHN0YW5kYXJkIHRoZXJlIGFyZQorICAgIG1vcmUgdmFyaWF0aW9ucyBpbiA8bGl0ZXJhbD5BRlRF UiBNQVRDSDwvbGl0ZXJhbD4gY2xhdXNlLgorICAgPC9wYXJhPgorCiAgICA8cGFyYT4KICAgICBU aGUgcHVycG9zZSBvZiBhIDxsaXRlcmFsPldJTkRPVzwvbGl0ZXJhbD4gY2xhdXNlIGlzIHRvIHNw ZWNpZnkgdGhlCi0gICAgYmVoYXZpb3Igb2YgPGZpcnN0dGVybT53aW5kb3cgZnVuY3Rpb25zPC9m aXJzdHRlcm0+IGFwcGVhcmluZyBpbiB0aGUgcXVlcnkncworICAgIGJlaGF2aW9yIG9mIDxmaXJz dHRlcm0+d2luZG93IGZ1bmN0aW9uczwvZmlyc3R0ZXJtPiBhcHBlYXJpbmcgaW4gdGhlCisgICAg cXVlcnkncwogICAgIDxsaW5rIGxpbmtlbmQ9InNxbC1zZWxlY3QtbGlzdCI+PGNvbW1hbmQ+U0VM RUNUPC9jb21tYW5kPiBsaXN0PC9saW5rPiBvcgogICAgIDxsaW5rIGxpbmtlbmQ9InNxbC1vcmRl cmJ5Ij48bGl0ZXJhbD5PUkRFUiBCWTwvbGl0ZXJhbD48L2xpbms+IGNsYXVzZS4KICAgICBUaGVz ZSBmdW5jdGlvbnMKLS0gCjIuNDMuMAoK ----Next_Part(Wed_Sep_24_19_35_23_2025_264)-- Content-Type: Application/Octet-Stream Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="v33-0007-Row-pattern-recognition-patch-tests.patch" RnJvbSBkYjg3YTA5ZDYwNWFhYzc3NDFhMTgxOTFmY2FhYWUzMDAwODNhN2Y2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUYXRzdW8gSXNoaWkgPGlzaGlpQHBvc3RncmVzcWwub3JnPgpE YXRlOiBXZWQsIDI0IFNlcCAyMDI1IDE5OjE4OjM3ICswOTAwClN1YmplY3Q6IFtQQVRDSCB2MzMg Ny84XSBSb3cgcGF0dGVybiByZWNvZ25pdGlvbiBwYXRjaCAodGVzdHMpLgoKLS0tCiBzcmMvdGVz dC9yZWdyZXNzL2V4cGVjdGVkL3Jwci5vdXQgIHwgOTc5ICsrKysrKysrKysrKysrKysrKysrKysr KysrKysrCiBzcmMvdGVzdC9yZWdyZXNzL3BhcmFsbGVsX3NjaGVkdWxlIHwgICAyICstCiBzcmMv dGVzdC9yZWdyZXNzL3NxbC9ycHIuc3FsICAgICAgIHwgNDg2ICsrKysrKysrKysrKysrCiAzIGZp bGVzIGNoYW5nZWQsIDE0NjYgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQogY3JlYXRlIG1v ZGUgMTAwNjQ0IHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcnByLm91dAogY3JlYXRlIG1vZGUg MTAwNjQ0IHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3Jwci5zcWwKCmRpZmYgLS1naXQgYS9zcmMvdGVz dC9yZWdyZXNzL2V4cGVjdGVkL3Jwci5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3Jw ci5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjU5Y2ZlZDE4MGU3 Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9ycHIub3V0CkBA IC0wLDAgKzEsOTc5IEBACistLQorLS0gVGVzdCBmb3Igcm93IHBhdHRlcm4gZGVmaW5pdGlvbiBj bGF1c2UKKy0tCitDUkVBVEUgVEVNUCBUQUJMRSBzdG9jayAoCisgICAgICAgY29tcGFueSBURVhU LAorICAgICAgIHRkYXRlIERBVEUsCisgICAgICAgcHJpY2UgSU5URUdFUgorKTsKK0lOU0VSVCBJ TlRPIHN0b2NrIFZBTFVFUyAoJ2NvbXBhbnkxJywgJzIwMjMtMDctMDEnLCAxMDApOworSU5TRVJU IElOVE8gc3RvY2sgVkFMVUVTICgnY29tcGFueTEnLCAnMjAyMy0wNy0wMicsIDIwMCk7CitJTlNF UlQgSU5UTyBzdG9jayBWQUxVRVMgKCdjb21wYW55MScsICcyMDIzLTA3LTAzJywgMTUwKTsKK0lO U0VSVCBJTlRPIHN0b2NrIFZBTFVFUyAoJ2NvbXBhbnkxJywgJzIwMjMtMDctMDQnLCAxNDApOwor SU5TRVJUIElOVE8gc3RvY2sgVkFMVUVTICgnY29tcGFueTEnLCAnMjAyMy0wNy0wNScsIDE1MCk7 CitJTlNFUlQgSU5UTyBzdG9jayBWQUxVRVMgKCdjb21wYW55MScsICcyMDIzLTA3LTA2JywgOTAp OworSU5TRVJUIElOVE8gc3RvY2sgVkFMVUVTICgnY29tcGFueTEnLCAnMjAyMy0wNy0wNycsIDEx MCk7CitJTlNFUlQgSU5UTyBzdG9jayBWQUxVRVMgKCdjb21wYW55MScsICcyMDIzLTA3LTA4Jywg MTMwKTsKK0lOU0VSVCBJTlRPIHN0b2NrIFZBTFVFUyAoJ2NvbXBhbnkxJywgJzIwMjMtMDctMDkn LCAxMjApOworSU5TRVJUIElOVE8gc3RvY2sgVkFMVUVTICgnY29tcGFueTEnLCAnMjAyMy0wNy0x MCcsIDEzMCk7CitJTlNFUlQgSU5UTyBzdG9jayBWQUxVRVMgKCdjb21wYW55MicsICcyMDIzLTA3 LTAxJywgNTApOworSU5TRVJUIElOVE8gc3RvY2sgVkFMVUVTICgnY29tcGFueTInLCAnMjAyMy0w Ny0wMicsIDIwMDApOworSU5TRVJUIElOVE8gc3RvY2sgVkFMVUVTICgnY29tcGFueTInLCAnMjAy My0wNy0wMycsIDE1MDApOworSU5TRVJUIElOVE8gc3RvY2sgVkFMVUVTICgnY29tcGFueTInLCAn MjAyMy0wNy0wNCcsIDE0MDApOworSU5TRVJUIElOVE8gc3RvY2sgVkFMVUVTICgnY29tcGFueTIn LCAnMjAyMy0wNy0wNScsIDE1MDApOworSU5TRVJUIElOVE8gc3RvY2sgVkFMVUVTICgnY29tcGFu eTInLCAnMjAyMy0wNy0wNicsIDYwKTsKK0lOU0VSVCBJTlRPIHN0b2NrIFZBTFVFUyAoJ2NvbXBh bnkyJywgJzIwMjMtMDctMDcnLCAxMTAwKTsKK0lOU0VSVCBJTlRPIHN0b2NrIFZBTFVFUyAoJ2Nv bXBhbnkyJywgJzIwMjMtMDctMDgnLCAxMzAwKTsKK0lOU0VSVCBJTlRPIHN0b2NrIFZBTFVFUyAo J2NvbXBhbnkyJywgJzIwMjMtMDctMDknLCAxMjAwKTsKK0lOU0VSVCBJTlRPIHN0b2NrIFZBTFVF UyAoJ2NvbXBhbnkyJywgJzIwMjMtMDctMTAnLCAxMzAwKTsKK1NFTEVDVCAqIEZST00gc3RvY2s7 CisgY29tcGFueSAgfCAgIHRkYXRlICAgIHwgcHJpY2UgCistLS0tLS0tLS0tKy0tLS0tLS0tLS0t LSstLS0tLS0tCisgY29tcGFueTEgfCAwNy0wMS0yMDIzIHwgICAxMDAKKyBjb21wYW55MSB8IDA3 LTAyLTIwMjMgfCAgIDIwMAorIGNvbXBhbnkxIHwgMDctMDMtMjAyMyB8ICAgMTUwCisgY29tcGFu eTEgfCAwNy0wNC0yMDIzIHwgICAxNDAKKyBjb21wYW55MSB8IDA3LTA1LTIwMjMgfCAgIDE1MAor IGNvbXBhbnkxIHwgMDctMDYtMjAyMyB8ICAgIDkwCisgY29tcGFueTEgfCAwNy0wNy0yMDIzIHwg ICAxMTAKKyBjb21wYW55MSB8IDA3LTA4LTIwMjMgfCAgIDEzMAorIGNvbXBhbnkxIHwgMDctMDkt MjAyMyB8ICAgMTIwCisgY29tcGFueTEgfCAwNy0xMC0yMDIzIHwgICAxMzAKKyBjb21wYW55MiB8 IDA3LTAxLTIwMjMgfCAgICA1MAorIGNvbXBhbnkyIHwgMDctMDItMjAyMyB8ICAyMDAwCisgY29t cGFueTIgfCAwNy0wMy0yMDIzIHwgIDE1MDAKKyBjb21wYW55MiB8IDA3LTA0LTIwMjMgfCAgMTQw MAorIGNvbXBhbnkyIHwgMDctMDUtMjAyMyB8ICAxNTAwCisgY29tcGFueTIgfCAwNy0wNi0yMDIz IHwgICAgNjAKKyBjb21wYW55MiB8IDA3LTA3LTIwMjMgfCAgMTEwMAorIGNvbXBhbnkyIHwgMDct MDgtMjAyMyB8ICAxMzAwCisgY29tcGFueTIgfCAwNy0wOS0yMDIzIHwgIDEyMDAKKyBjb21wYW55 MiB8IDA3LTEwLTIwMjMgfCAgMTMwMAorKDIwIHJvd3MpCisKKy0tIGJhc2ljIHRlc3QgdXNpbmcg UFJFVgorU0VMRUNUIGNvbXBhbnksIHRkYXRlLCBwcmljZSwgZmlyc3RfdmFsdWUocHJpY2UpIE9W RVIgdywgbGFzdF92YWx1ZShwcmljZSkgT1ZFUiB3LAorIG50aF92YWx1ZSh0ZGF0ZSwgMikgT1ZF UiB3IEFTIG50aF9zZWNvbmQKKyBGUk9NIHN0b2NrCisgV0lORE9XIHcgQVMgKAorIFBBUlRJVElP TiBCWSBjb21wYW55CisgUk9XUyBCRVRXRUVOIENVUlJFTlQgUk9XIEFORCBVTkJPVU5ERUQgRk9M TE9XSU5HCisgSU5JVElBTAorIFBBVFRFUk4gKFNUQVJUIFVQKyBET1dOKykKKyBERUZJTkUKKyAg U1RBUlQgQVMgVFJVRSwKKyAgVVAgQVMgcHJpY2UgPiBQUkVWKHByaWNlKSwKKyAgRE9XTiBBUyBw cmljZSA8IFBSRVYocHJpY2UpCispOworIGNvbXBhbnkgIHwgICB0ZGF0ZSAgICB8IHByaWNlIHwg Zmlyc3RfdmFsdWUgfCBsYXN0X3ZhbHVlIHwgbnRoX3NlY29uZCAKKy0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tCisg Y29tcGFueTEgfCAwNy0wMS0yMDIzIHwgICAxMDAgfCAgICAgICAgIDEwMCB8ICAgICAgICAxNDAg fCAwNy0wMi0yMDIzCisgY29tcGFueTEgfCAwNy0wMi0yMDIzIHwgICAyMDAgfCAgICAgICAgICAg ICB8ICAgICAgICAgICAgfCAKKyBjb21wYW55MSB8IDA3LTAzLTIwMjMgfCAgIDE1MCB8ICAgICAg ICAgICAgIHwgICAgICAgICAgICB8IAorIGNvbXBhbnkxIHwgMDctMDQtMjAyMyB8ICAgMTQwIHwg ICAgICAgICAgICAgfCAgICAgICAgICAgIHwgCisgY29tcGFueTEgfCAwNy0wNS0yMDIzIHwgICAx NTAgfCAgICAgICAgICAgICB8ICAgICAgICAgICAgfCAKKyBjb21wYW55MSB8IDA3LTA2LTIwMjMg fCAgICA5MCB8ICAgICAgICAgIDkwIHwgICAgICAgIDEyMCB8IDA3LTA3LTIwMjMKKyBjb21wYW55 MSB8IDA3LTA3LTIwMjMgfCAgIDExMCB8ICAgICAgICAgICAgIHwgICAgICAgICAgICB8IAorIGNv bXBhbnkxIHwgMDctMDgtMjAyMyB8ICAgMTMwIHwgICAgICAgICAgICAgfCAgICAgICAgICAgIHwg CisgY29tcGFueTEgfCAwNy0wOS0yMDIzIHwgICAxMjAgfCAgICAgICAgICAgICB8ICAgICAgICAg ICAgfCAKKyBjb21wYW55MSB8IDA3LTEwLTIwMjMgfCAgIDEzMCB8ICAgICAgICAgICAgIHwgICAg ICAgICAgICB8IAorIGNvbXBhbnkyIHwgMDctMDEtMjAyMyB8ICAgIDUwIHwgICAgICAgICAgNTAg fCAgICAgICAxNDAwIHwgMDctMDItMjAyMworIGNvbXBhbnkyIHwgMDctMDItMjAyMyB8ICAyMDAw IHwgICAgICAgICAgICAgfCAgICAgICAgICAgIHwgCisgY29tcGFueTIgfCAwNy0wMy0yMDIzIHwg IDE1MDAgfCAgICAgICAgICAgICB8ICAgICAgICAgICAgfCAKKyBjb21wYW55MiB8IDA3LTA0LTIw MjMgfCAgMTQwMCB8ICAgICAgICAgICAgIHwgICAgICAgICAgICB8IAorIGNvbXBhbnkyIHwgMDct MDUtMjAyMyB8ICAxNTAwIHwgICAgICAgICAgICAgfCAgICAgICAgICAgIHwgCisgY29tcGFueTIg fCAwNy0wNi0yMDIzIHwgICAgNjAgfCAgICAgICAgICA2MCB8ICAgICAgIDEyMDAgfCAwNy0wNy0y MDIzCisgY29tcGFueTIgfCAwNy0wNy0yMDIzIHwgIDExMDAgfCAgICAgICAgICAgICB8ICAgICAg ICAgICAgfCAKKyBjb21wYW55MiB8IDA3LTA4LTIwMjMgfCAgMTMwMCB8ICAgICAgICAgICAgIHwg ICAgICAgICAgICB8IAorIGNvbXBhbnkyIHwgMDctMDktMjAyMyB8ICAxMjAwIHwgICAgICAgICAg ICAgfCAgICAgICAgICAgIHwgCisgY29tcGFueTIgfCAwNy0xMC0yMDIzIHwgIDEzMDAgfCAgICAg ICAgICAgICB8ICAgICAgICAgICAgfCAKKygyMCByb3dzKQorCistLSBiYXNpYyB0ZXN0IHVzaW5n IFBSRVYuIFVQIGFwcGVhcnMgdHdpY2UKK1NFTEVDVCBjb21wYW55LCB0ZGF0ZSwgcHJpY2UsIGZp cnN0X3ZhbHVlKHByaWNlKSBPVkVSIHcsIGxhc3RfdmFsdWUocHJpY2UpIE9WRVIgdywKKyBudGhf dmFsdWUodGRhdGUsIDIpIE9WRVIgdyBBUyBudGhfc2Vjb25kCisgRlJPTSBzdG9jaworIFdJTkRP VyB3IEFTICgKKyBQQVJUSVRJT04gQlkgY29tcGFueQorIFJPV1MgQkVUV0VFTiBDVVJSRU5UIFJP VyBBTkQgVU5CT1VOREVEIEZPTExPV0lORworIElOSVRJQUwKKyBQQVRURVJOIChTVEFSVCBVUCsg RE9XTisgVVArKQorIERFRklORQorICBTVEFSVCBBUyBUUlVFLAorICBVUCBBUyBwcmljZSA+IFBS RVYocHJpY2UpLAorICBET1dOIEFTIHByaWNlIDwgUFJFVihwcmljZSkKKyk7CisgY29tcGFueSAg fCAgIHRkYXRlICAgIHwgcHJpY2UgfCBmaXJzdF92YWx1ZSB8IGxhc3RfdmFsdWUgfCBudGhfc2Vj b25kIAorLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0KKyBjb21wYW55MSB8IDA3LTAxLTIwMjMgfCAgIDEwMCB8ICAg ICAgICAgMTAwIHwgICAgICAgIDE1MCB8IDA3LTAyLTIwMjMKKyBjb21wYW55MSB8IDA3LTAyLTIw MjMgfCAgIDIwMCB8ICAgICAgICAgICAgIHwgICAgICAgICAgICB8IAorIGNvbXBhbnkxIHwgMDct MDMtMjAyMyB8ICAgMTUwIHwgICAgICAgICAgICAgfCAgICAgICAgICAgIHwgCisgY29tcGFueTEg fCAwNy0wNC0yMDIzIHwgICAxNDAgfCAgICAgICAgICAgICB8ICAgICAgICAgICAgfCAKKyBjb21w YW55MSB8IDA3LTA1LTIwMjMgfCAgIDE1MCB8ICAgICAgICAgICAgIHwgICAgICAgICAgICB8IAor IGNvbXBhbnkxIHwgMDctMDYtMjAyMyB8ICAgIDkwIHwgICAgICAgICAgOTAgfCAgICAgICAgMTMw IHwgMDctMDctMjAyMworIGNvbXBhbnkxIHwgMDctMDctMjAyMyB8ICAgMTEwIHwgICAgICAgICAg ICAgfCAgICAgICAgICAgIHwgCisgY29tcGFueTEgfCAwNy0wOC0yMDIzIHwgICAxMzAgfCAgICAg ICAgICAgICB8ICAgICAgICAgICAgfCAKKyBjb21wYW55MSB8IDA3LTA5LTIwMjMgfCAgIDEyMCB8 ICAgICAgICAgICAgIHwgICAgICAgICAgICB8IAorIGNvbXBhbnkxIHwgMDctMTAtMjAyMyB8ICAg MTMwIHwgICAgICAgICAgICAgfCAgICAgICAgICAgIHwgCisgY29tcGFueTIgfCAwNy0wMS0yMDIz IHwgICAgNTAgfCAgICAgICAgICA1MCB8ICAgICAgIDE1MDAgfCAwNy0wMi0yMDIzCisgY29tcGFu eTIgfCAwNy0wMi0yMDIzIHwgIDIwMDAgfCAgICAgICAgICAgICB8ICAgICAgICAgICAgfCAKKyBj b21wYW55MiB8IDA3LTAzLTIwMjMgfCAgMTUwMCB8ICAgICAgICAgICAgIHwgICAgICAgICAgICB8 IAorIGNvbXBhbnkyIHwgMDctMDQtMjAyMyB8ICAxNDAwIHwgICAgICAgICAgICAgfCAgICAgICAg ICAgIHwgCisgY29tcGFueTIgfCAwNy0wNS0yMDIzIHwgIDE1MDAgfCAgICAgICAgICAgICB8ICAg ICAgICAgICAgfCAKKyBjb21wYW55MiB8IDA3LTA2LTIwMjMgfCAgICA2MCB8ICAgICAgICAgIDYw IHwgICAgICAgMTMwMCB8IDA3LTA3LTIwMjMKKyBjb21wYW55MiB8IDA3LTA3LTIwMjMgfCAgMTEw MCB8ICAgICAgICAgICAgIHwgICAgICAgICAgICB8IAorIGNvbXBhbnkyIHwgMDctMDgtMjAyMyB8 ICAxMzAwIHwgICAgICAgICAgICAgfCAgICAgICAgICAgIHwgCisgY29tcGFueTIgfCAwNy0wOS0y MDIzIHwgIDEyMDAgfCAgICAgICAgICAgICB8ICAgICAgICAgICAgfCAKKyBjb21wYW55MiB8IDA3 LTEwLTIwMjMgfCAgMTMwMCB8ICAgICAgICAgICAgIHwgICAgICAgICAgICB8IAorKDIwIHJvd3Mp CisKKy0tIGJhc2ljIHRlc3QgdXNpbmcgUFJFVi4gVXNlICcqJworU0VMRUNUIGNvbXBhbnksIHRk YXRlLCBwcmljZSwgZmlyc3RfdmFsdWUocHJpY2UpIE9WRVIgdywgbGFzdF92YWx1ZShwcmljZSkg T1ZFUiB3LAorIG50aF92YWx1ZSh0ZGF0ZSwgMikgT1ZFUiB3IEFTIG50aF9zZWNvbmQKKyBGUk9N IHN0b2NrCisgV0lORE9XIHcgQVMgKAorIFBBUlRJVElPTiBCWSBjb21wYW55CisgUk9XUyBCRVRX RUVOIENVUlJFTlQgUk9XIEFORCBVTkJPVU5ERUQgRk9MTE9XSU5HCisgSU5JVElBTAorIFBBVFRF Uk4gKFNUQVJUIFVQKiBET1dOKykKKyBERUZJTkUKKyAgU1RBUlQgQVMgVFJVRSwKKyAgVVAgQVMg cHJpY2UgPiBQUkVWKHByaWNlKSwKKyAgRE9XTiBBUyBwcmljZSA8IFBSRVYocHJpY2UpCispOwor IGNvbXBhbnkgIHwgICB0ZGF0ZSAgICB8IHByaWNlIHwgZmlyc3RfdmFsdWUgfCBsYXN0X3ZhbHVl IHwgbnRoX3NlY29uZCAKKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tCisgY29tcGFueTEgfCAwNy0wMS0yMDIzIHwg ICAxMDAgfCAgICAgICAgIDEwMCB8ICAgICAgICAxNDAgfCAwNy0wMi0yMDIzCisgY29tcGFueTEg fCAwNy0wMi0yMDIzIHwgICAyMDAgfCAgICAgICAgICAgICB8ICAgICAgICAgICAgfCAKKyBjb21w YW55MSB8IDA3LTAzLTIwMjMgfCAgIDE1MCB8ICAgICAgICAgICAgIHwgICAgICAgICAgICB8IAor IGNvbXBhbnkxIHwgMDctMDQtMjAyMyB8ICAgMTQwIHwgICAgICAgICAgICAgfCAgICAgICAgICAg IHwgCisgY29tcGFueTEgfCAwNy0wNS0yMDIzIHwgICAxNTAgfCAgICAgICAgIDE1MCB8ICAgICAg ICAgOTAgfCAwNy0wNi0yMDIzCisgY29tcGFueTEgfCAwNy0wNi0yMDIzIHwgICAgOTAgfCAgICAg ICAgICAgICB8ICAgICAgICAgICAgfCAKKyBjb21wYW55MSB8IDA3LTA3LTIwMjMgfCAgIDExMCB8 ICAgICAgICAgMTEwIHwgICAgICAgIDEyMCB8IDA3LTA4LTIwMjMKKyBjb21wYW55MSB8IDA3LTA4 LTIwMjMgfCAgIDEzMCB8ICAgICAgICAgICAgIHwgICAgICAgICAgICB8IAorIGNvbXBhbnkxIHwg MDctMDktMjAyMyB8ICAgMTIwIHwgICAgICAgICAgICAgfCAgICAgICAgICAgIHwgCisgY29tcGFu eTEgfCAwNy0xMC0yMDIzIHwgICAxMzAgfCAgICAgICAgICAgICB8ICAgICAgICAgICAgfCAKKyBj b21wYW55MiB8IDA3LTAxLTIwMjMgfCAgICA1MCB8ICAgICAgICAgIDUwIHwgICAgICAgMTQwMCB8 IDA3LTAyLTIwMjMKKyBjb21wYW55MiB8IDA3LTAyLTIwMjMgfCAgMjAwMCB8ICAgICAgICAgICAg IHwgICAgICAgICAgICB8IAorIGNvbXBhbnkyIHwgMDctMDMtMjAyMyB8ICAxNTAwIHwgICAgICAg ICAgICAgfCAgICAgICAgICAgIHwgCisgY29tcGFueTIgfCAwNy0wNC0yMDIzIHwgIDE0MDAgfCAg ICAgICAgICAgICB8ICAgICAgICAgICAgfCAKKyBjb21wYW55MiB8IDA3LTA1LTIwMjMgfCAgMTUw MCB8ICAgICAgICAxNTAwIHwgICAgICAgICA2MCB8IDA3LTA2LTIwMjMKKyBjb21wYW55MiB8IDA3 LTA2LTIwMjMgfCAgICA2MCB8ICAgICAgICAgICAgIHwgICAgICAgICAgICB8IAorIGNvbXBhbnky IHwgMDctMDctMjAyMyB8ICAxMTAwIHwgICAgICAgIDExMDAgfCAgICAgICAxMjAwIHwgMDctMDgt MjAyMworIGNvbXBhbnkyIHwgMDctMDgtMjAyMyB8ICAxMzAwIHwgICAgICAgICAgICAgfCAgICAg ICAgICAgIHwgCisgY29tcGFueTIgfCAwNy0wOS0yMDIzIHwgIDEyMDAgfCAgICAgICAgICAgICB8 ICAgICAgICAgICAgfCAKKyBjb21wYW55MiB8IDA3LTEwLTIwMjMgfCAgMTMwMCB8ICAgICAgICAg ICAgIHwgICAgICAgICAgICB8IAorKDIwIHJvd3MpCisKKy0tIGJhc2ljIHRlc3Qgd2l0aCBub25l IGdyZWVkeSBwYXR0ZXJuCitTRUxFQ1QgY29tcGFueSwgdGRhdGUsIHByaWNlLCBjb3VudCgqKSBP VkVSIHcKKyBGUk9NIHN0b2NrCisgV0lORE9XIHcgQVMgKAorIFBBUlRJVElPTiBCWSBjb21wYW55 CisgUk9XUyBCRVRXRUVOIENVUlJFTlQgUk9XIEFORCBVTkJPVU5ERUQgRk9MTE9XSU5HCisgSU5J VElBTAorIFBBVFRFUk4gKEEgQSBBKQorIERFRklORQorICBBIEFTIHByaWNlID49IDE0MCBBTkQg cHJpY2UgPD0gMTUwCispOworIGNvbXBhbnkgIHwgICB0ZGF0ZSAgICB8IHByaWNlIHwgY291bnQg CistLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0KKyBjb21wYW55MSB8IDA3 LTAxLTIwMjMgfCAgIDEwMCB8ICAgICAwCisgY29tcGFueTEgfCAwNy0wMi0yMDIzIHwgICAyMDAg fCAgICAgMAorIGNvbXBhbnkxIHwgMDctMDMtMjAyMyB8ICAgMTUwIHwgICAgIDMKKyBjb21wYW55 MSB8IDA3LTA0LTIwMjMgfCAgIDE0MCB8ICAgICAwCisgY29tcGFueTEgfCAwNy0wNS0yMDIzIHwg ICAxNTAgfCAgICAgMAorIGNvbXBhbnkxIHwgMDctMDYtMjAyMyB8ICAgIDkwIHwgICAgIDAKKyBj b21wYW55MSB8IDA3LTA3LTIwMjMgfCAgIDExMCB8ICAgICAwCisgY29tcGFueTEgfCAwNy0wOC0y MDIzIHwgICAxMzAgfCAgICAgMAorIGNvbXBhbnkxIHwgMDctMDktMjAyMyB8ICAgMTIwIHwgICAg IDAKKyBjb21wYW55MSB8IDA3LTEwLTIwMjMgfCAgIDEzMCB8ICAgICAwCisgY29tcGFueTIgfCAw Ny0wMS0yMDIzIHwgICAgNTAgfCAgICAgMAorIGNvbXBhbnkyIHwgMDctMDItMjAyMyB8ICAyMDAw IHwgICAgIDAKKyBjb21wYW55MiB8IDA3LTAzLTIwMjMgfCAgMTUwMCB8ICAgICAwCisgY29tcGFu eTIgfCAwNy0wNC0yMDIzIHwgIDE0MDAgfCAgICAgMAorIGNvbXBhbnkyIHwgMDctMDUtMjAyMyB8 ICAxNTAwIHwgICAgIDAKKyBjb21wYW55MiB8IDA3LTA2LTIwMjMgfCAgICA2MCB8ICAgICAwCisg Y29tcGFueTIgfCAwNy0wNy0yMDIzIHwgIDExMDAgfCAgICAgMAorIGNvbXBhbnkyIHwgMDctMDgt MjAyMyB8ICAxMzAwIHwgICAgIDAKKyBjb21wYW55MiB8IDA3LTA5LTIwMjMgfCAgMTIwMCB8ICAg ICAwCisgY29tcGFueTIgfCAwNy0xMC0yMDIzIHwgIDEzMDAgfCAgICAgMAorKDIwIHJvd3MpCisK Ky0tIGxhc3RfdmFsdWUoKSBzaG91bGQgcmVtYWluIGNvbnNpc3RlbnQKK1NFTEVDVCBjb21wYW55 LCB0ZGF0ZSwgcHJpY2UsIGxhc3RfdmFsdWUocHJpY2UpIE9WRVIgdworIEZST00gc3RvY2sKKyBX SU5ET1cgdyBBUyAoCisgUEFSVElUSU9OIEJZIGNvbXBhbnkKKyBPUkRFUiBCWSB0ZGF0ZQorIFJP V1MgQkVUV0VFTiBDVVJSRU5UIFJPVyBBTkQgVU5CT1VOREVEIEZPTExPV0lORworIElOSVRJQUwK KyBQQVRURVJOIChTVEFSVCBVUCsgRE9XTispCisgREVGSU5FCisgIFNUQVJUIEFTIFRSVUUsCisg IFVQIEFTIHByaWNlID4gUFJFVihwcmljZSksCisgIERPV04gQVMgcHJpY2UgPCBQUkVWKHByaWNl KQorKTsKKyBjb21wYW55ICB8ICAgdGRhdGUgICAgfCBwcmljZSB8IGxhc3RfdmFsdWUgCistLS0t LS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0tLS0tLQorIGNvbXBhbnkxIHwgMDct MDEtMjAyMyB8ICAgMTAwIHwgICAgICAgIDE0MAorIGNvbXBhbnkxIHwgMDctMDItMjAyMyB8ICAg MjAwIHwgICAgICAgICAgIAorIGNvbXBhbnkxIHwgMDctMDMtMjAyMyB8ICAgMTUwIHwgICAgICAg ICAgIAorIGNvbXBhbnkxIHwgMDctMDQtMjAyMyB8ICAgMTQwIHwgICAgICAgICAgIAorIGNvbXBh bnkxIHwgMDctMDUtMjAyMyB8ICAgMTUwIHwgICAgICAgICAgIAorIGNvbXBhbnkxIHwgMDctMDYt MjAyMyB8ICAgIDkwIHwgICAgICAgIDEyMAorIGNvbXBhbnkxIHwgMDctMDctMjAyMyB8ICAgMTEw IHwgICAgICAgICAgIAorIGNvbXBhbnkxIHwgMDctMDgtMjAyMyB8ICAgMTMwIHwgICAgICAgICAg IAorIGNvbXBhbnkxIHwgMDctMDktMjAyMyB8ICAgMTIwIHwgICAgICAgICAgIAorIGNvbXBhbnkx IHwgMDctMTAtMjAyMyB8ICAgMTMwIHwgICAgICAgICAgIAorIGNvbXBhbnkyIHwgMDctMDEtMjAy MyB8ICAgIDUwIHwgICAgICAgMTQwMAorIGNvbXBhbnkyIHwgMDctMDItMjAyMyB8ICAyMDAwIHwg ICAgICAgICAgIAorIGNvbXBhbnkyIHwgMDctMDMtMjAyMyB8ICAxNTAwIHwgICAgICAgICAgIAor IGNvbXBhbnkyIHwgMDctMDQtMjAyMyB8ICAxNDAwIHwgICAgICAgICAgIAorIGNvbXBhbnkyIHwg MDctMDUtMjAyMyB8ICAxNTAwIHwgICAgICAgICAgIAorIGNvbXBhbnkyIHwgMDctMDYtMjAyMyB8 ICAgIDYwIHwgICAgICAgMTIwMAorIGNvbXBhbnkyIHwgMDctMDctMjAyMyB8ICAxMTAwIHwgICAg ICAgICAgIAorIGNvbXBhbnkyIHwgMDctMDgtMjAyMyB8ICAxMzAwIHwgICAgICAgICAgIAorIGNv bXBhbnkyIHwgMDctMDktMjAyMyB8ICAxMjAwIHwgICAgICAgICAgIAorIGNvbXBhbnkyIHwgMDct MTAtMjAyMyB8ICAxMzAwIHwgICAgICAgICAgIAorKDIwIHJvd3MpCisKKy0tIG9taXQgIlNUQVJU IiBpbiBERUZJTkUgYnV0IGl0IGlzIG9rIGJlY2F1c2UgIlNUQVJUIEFTIFRSVUUiIGlzCistLSBp bXBsaWNpdGx5IGRlZmluZWQuIHBlciBzcGVjLgorU0VMRUNUIGNvbXBhbnksIHRkYXRlLCBwcmlj ZSwgZmlyc3RfdmFsdWUocHJpY2UpIE9WRVIgdywgbGFzdF92YWx1ZShwcmljZSkgT1ZFUiB3LAor IG50aF92YWx1ZSh0ZGF0ZSwgMikgT1ZFUiB3IEFTIG50aF9zZWNvbmQKKyBGUk9NIHN0b2NrCisg V0lORE9XIHcgQVMgKAorIFBBUlRJVElPTiBCWSBjb21wYW55CisgUk9XUyBCRVRXRUVOIENVUlJF TlQgUk9XIEFORCBVTkJPVU5ERUQgRk9MTE9XSU5HCisgSU5JVElBTAorIFBBVFRFUk4gKFNUQVJU IFVQKyBET1dOKykKKyBERUZJTkUKKyAgVVAgQVMgcHJpY2UgPiBQUkVWKHByaWNlKSwKKyAgRE9X TiBBUyBwcmljZSA8IFBSRVYocHJpY2UpCispOworIGNvbXBhbnkgIHwgICB0ZGF0ZSAgICB8IHBy aWNlIHwgZmlyc3RfdmFsdWUgfCBsYXN0X3ZhbHVlIHwgbnRoX3NlY29uZCAKKy0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tCisgY29tcGFueTEgfCAwNy0wMS0yMDIzIHwgICAxMDAgfCAgICAgICAgIDEwMCB8ICAgICAg ICAxNDAgfCAwNy0wMi0yMDIzCisgY29tcGFueTEgfCAwNy0wMi0yMDIzIHwgICAyMDAgfCAgICAg ICAgICAgICB8ICAgICAgICAgICAgfCAKKyBjb21wYW55MSB8IDA3LTAzLTIwMjMgfCAgIDE1MCB8 ICAgICAgICAgICAgIHwgICAgICAgICAgICB8IAorIGNvbXBhbnkxIHwgMDctMDQtMjAyMyB8ICAg MTQwIHwgICAgICAgICAgICAgfCAgICAgICAgICAgIHwgCisgY29tcGFueTEgfCAwNy0wNS0yMDIz IHwgICAxNTAgfCAgICAgICAgICAgICB8ICAgICAgICAgICAgfCAKKyBjb21wYW55MSB8IDA3LTA2 LTIwMjMgfCAgICA5MCB8ICAgICAgICAgIDkwIHwgICAgICAgIDEyMCB8IDA3LTA3LTIwMjMKKyBj b21wYW55MSB8IDA3LTA3LTIwMjMgfCAgIDExMCB8ICAgICAgICAgICAgIHwgICAgICAgICAgICB8 IAorIGNvbXBhbnkxIHwgMDctMDgtMjAyMyB8ICAgMTMwIHwgICAgICAgICAgICAgfCAgICAgICAg ICAgIHwgCisgY29tcGFueTEgfCAwNy0wOS0yMDIzIHwgICAxMjAgfCAgICAgICAgICAgICB8ICAg ICAgICAgICAgfCAKKyBjb21wYW55MSB8IDA3LTEwLTIwMjMgfCAgIDEzMCB8ICAgICAgICAgICAg IHwgICAgICAgICAgICB8IAorIGNvbXBhbnkyIHwgMDctMDEtMjAyMyB8ICAgIDUwIHwgICAgICAg ICAgNTAgfCAgICAgICAxNDAwIHwgMDctMDItMjAyMworIGNvbXBhbnkyIHwgMDctMDItMjAyMyB8 ICAyMDAwIHwgICAgICAgICAgICAgfCAgICAgICAgICAgIHwgCisgY29tcGFueTIgfCAwNy0wMy0y MDIzIHwgIDE1MDAgfCAgICAgICAgICAgICB8ICAgICAgICAgICAgfCAKKyBjb21wYW55MiB8IDA3 LTA0LTIwMjMgfCAgMTQwMCB8ICAgICAgICAgICAgIHwgICAgICAgICAgICB8IAorIGNvbXBhbnky IHwgMDctMDUtMjAyMyB8ICAxNTAwIHwgICAgICAgICAgICAgfCAgICAgICAgICAgIHwgCisgY29t cGFueTIgfCAwNy0wNi0yMDIzIHwgICAgNjAgfCAgICAgICAgICA2MCB8ICAgICAgIDEyMDAgfCAw Ny0wNy0yMDIzCisgY29tcGFueTIgfCAwNy0wNy0yMDIzIHwgIDExMDAgfCAgICAgICAgICAgICB8 ICAgICAgICAgICAgfCAKKyBjb21wYW55MiB8IDA3LTA4LTIwMjMgfCAgMTMwMCB8ICAgICAgICAg ICAgIHwgICAgICAgICAgICB8IAorIGNvbXBhbnkyIHwgMDctMDktMjAyMyB8ICAxMjAwIHwgICAg ICAgICAgICAgfCAgICAgICAgICAgIHwgCisgY29tcGFueTIgfCAwNy0xMC0yMDIzIHwgIDEzMDAg fCAgICAgICAgICAgICB8ICAgICAgICAgICAgfCAKKygyMCByb3dzKQorCistLSB0aGUgZmlyc3Qg cm93IHN0YXJ0IHdpdGggbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDEwMAorU0VMRUNUIGNvbXBhbnks IHRkYXRlLCBwcmljZSwgZmlyc3RfdmFsdWUocHJpY2UpIE9WRVIgdywgbGFzdF92YWx1ZShwcmlj ZSkgT1ZFUiB3CisgRlJPTSBzdG9jaworIFdJTkRPVyB3IEFTICgKKyBQQVJUSVRJT04gQlkgY29t cGFueQorIFJPV1MgQkVUV0VFTiBDVVJSRU5UIFJPVyBBTkQgVU5CT1VOREVEIEZPTExPV0lORwor IElOSVRJQUwKKyBQQVRURVJOIChMT1dQUklDRSBVUCsgRE9XTispCisgREVGSU5FCisgIExPV1BS SUNFIEFTIHByaWNlIDw9IDEwMCwKKyAgVVAgQVMgcHJpY2UgPiBQUkVWKHByaWNlKSwKKyAgRE9X TiBBUyBwcmljZSA8IFBSRVYocHJpY2UpCispOworIGNvbXBhbnkgIHwgICB0ZGF0ZSAgICB8IHBy aWNlIHwgZmlyc3RfdmFsdWUgfCBsYXN0X3ZhbHVlIAorLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0r LS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLQorIGNvbXBhbnkxIHwgMDctMDEtMjAy MyB8ICAgMTAwIHwgICAgICAgICAxMDAgfCAgICAgICAgMTQwCisgY29tcGFueTEgfCAwNy0wMi0y MDIzIHwgICAyMDAgfCAgICAgICAgICAgICB8ICAgICAgICAgICAKKyBjb21wYW55MSB8IDA3LTAz LTIwMjMgfCAgIDE1MCB8ICAgICAgICAgICAgIHwgICAgICAgICAgIAorIGNvbXBhbnkxIHwgMDct MDQtMjAyMyB8ICAgMTQwIHwgICAgICAgICAgICAgfCAgICAgICAgICAgCisgY29tcGFueTEgfCAw Ny0wNS0yMDIzIHwgICAxNTAgfCAgICAgICAgICAgICB8ICAgICAgICAgICAKKyBjb21wYW55MSB8 IDA3LTA2LTIwMjMgfCAgICA5MCB8ICAgICAgICAgIDkwIHwgICAgICAgIDEyMAorIGNvbXBhbnkx IHwgMDctMDctMjAyMyB8ICAgMTEwIHwgICAgICAgICAgICAgfCAgICAgICAgICAgCisgY29tcGFu eTEgfCAwNy0wOC0yMDIzIHwgICAxMzAgfCAgICAgICAgICAgICB8ICAgICAgICAgICAKKyBjb21w YW55MSB8IDA3LTA5LTIwMjMgfCAgIDEyMCB8ICAgICAgICAgICAgIHwgICAgICAgICAgIAorIGNv bXBhbnkxIHwgMDctMTAtMjAyMyB8ICAgMTMwIHwgICAgICAgICAgICAgfCAgICAgICAgICAgCisg Y29tcGFueTIgfCAwNy0wMS0yMDIzIHwgICAgNTAgfCAgICAgICAgICA1MCB8ICAgICAgIDE0MDAK KyBjb21wYW55MiB8IDA3LTAyLTIwMjMgfCAgMjAwMCB8ICAgICAgICAgICAgIHwgICAgICAgICAg IAorIGNvbXBhbnkyIHwgMDctMDMtMjAyMyB8ICAxNTAwIHwgICAgICAgICAgICAgfCAgICAgICAg ICAgCisgY29tcGFueTIgfCAwNy0wNC0yMDIzIHwgIDE0MDAgfCAgICAgICAgICAgICB8ICAgICAg ICAgICAKKyBjb21wYW55MiB8IDA3LTA1LTIwMjMgfCAgMTUwMCB8ICAgICAgICAgICAgIHwgICAg ICAgICAgIAorIGNvbXBhbnkyIHwgMDctMDYtMjAyMyB8ICAgIDYwIHwgICAgICAgICAgNjAgfCAg ICAgICAxMjAwCisgY29tcGFueTIgfCAwNy0wNy0yMDIzIHwgIDExMDAgfCAgICAgICAgICAgICB8 ICAgICAgICAgICAKKyBjb21wYW55MiB8IDA3LTA4LTIwMjMgfCAgMTMwMCB8ICAgICAgICAgICAg IHwgICAgICAgICAgIAorIGNvbXBhbnkyIHwgMDctMDktMjAyMyB8ICAxMjAwIHwgICAgICAgICAg ICAgfCAgICAgICAgICAgCisgY29tcGFueTIgfCAwNy0xMC0yMDIzIHwgIDEzMDAgfCAgICAgICAg ICAgICB8ICAgICAgICAgICAKKygyMCByb3dzKQorCistLSBzZWNvbmQgcm93IHJhaXNlcyAxMjAl CitTRUxFQ1QgY29tcGFueSwgdGRhdGUsIHByaWNlLCBmaXJzdF92YWx1ZShwcmljZSkgT1ZFUiB3 LCBsYXN0X3ZhbHVlKHByaWNlKSBPVkVSIHcKKyBGUk9NIHN0b2NrCisgV0lORE9XIHcgQVMgKAor IFBBUlRJVElPTiBCWSBjb21wYW55CisgUk9XUyBCRVRXRUVOIENVUlJFTlQgUk9XIEFORCBVTkJP VU5ERUQgRk9MTE9XSU5HCisgSU5JVElBTAorIFBBVFRFUk4gKExPV1BSSUNFIFVQKyBET1dOKykK KyBERUZJTkUKKyAgTE9XUFJJQ0UgQVMgcHJpY2UgPD0gMTAwLAorICBVUCBBUyBwcmljZSA+IFBS RVYocHJpY2UpICogMS4yLAorICBET1dOIEFTIHByaWNlIDwgUFJFVihwcmljZSkKKyk7CisgY29t cGFueSAgfCAgIHRkYXRlICAgIHwgcHJpY2UgfCBmaXJzdF92YWx1ZSB8IGxhc3RfdmFsdWUgCist LS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t CisgY29tcGFueTEgfCAwNy0wMS0yMDIzIHwgICAxMDAgfCAgICAgICAgIDEwMCB8ICAgICAgICAx NDAKKyBjb21wYW55MSB8IDA3LTAyLTIwMjMgfCAgIDIwMCB8ICAgICAgICAgICAgIHwgICAgICAg ICAgIAorIGNvbXBhbnkxIHwgMDctMDMtMjAyMyB8ICAgMTUwIHwgICAgICAgICAgICAgfCAgICAg ICAgICAgCisgY29tcGFueTEgfCAwNy0wNC0yMDIzIHwgICAxNDAgfCAgICAgICAgICAgICB8ICAg ICAgICAgICAKKyBjb21wYW55MSB8IDA3LTA1LTIwMjMgfCAgIDE1MCB8ICAgICAgICAgICAgIHwg ICAgICAgICAgIAorIGNvbXBhbnkxIHwgMDctMDYtMjAyMyB8ICAgIDkwIHwgICAgICAgICAgICAg fCAgICAgICAgICAgCisgY29tcGFueTEgfCAwNy0wNy0yMDIzIHwgICAxMTAgfCAgICAgICAgICAg ICB8ICAgICAgICAgICAKKyBjb21wYW55MSB8IDA3LTA4LTIwMjMgfCAgIDEzMCB8ICAgICAgICAg ICAgIHwgICAgICAgICAgIAorIGNvbXBhbnkxIHwgMDctMDktMjAyMyB8ICAgMTIwIHwgICAgICAg ICAgICAgfCAgICAgICAgICAgCisgY29tcGFueTEgfCAwNy0xMC0yMDIzIHwgICAxMzAgfCAgICAg ICAgICAgICB8ICAgICAgICAgICAKKyBjb21wYW55MiB8IDA3LTAxLTIwMjMgfCAgICA1MCB8ICAg ICAgICAgIDUwIHwgICAgICAgMTQwMAorIGNvbXBhbnkyIHwgMDctMDItMjAyMyB8ICAyMDAwIHwg ICAgICAgICAgICAgfCAgICAgICAgICAgCisgY29tcGFueTIgfCAwNy0wMy0yMDIzIHwgIDE1MDAg fCAgICAgICAgICAgICB8ICAgICAgICAgICAKKyBjb21wYW55MiB8IDA3LTA0LTIwMjMgfCAgMTQw MCB8ICAgICAgICAgICAgIHwgICAgICAgICAgIAorIGNvbXBhbnkyIHwgMDctMDUtMjAyMyB8ICAx NTAwIHwgICAgICAgICAgICAgfCAgICAgICAgICAgCisgY29tcGFueTIgfCAwNy0wNi0yMDIzIHwg ICAgNjAgfCAgICAgICAgICAgICB8ICAgICAgICAgICAKKyBjb21wYW55MiB8IDA3LTA3LTIwMjMg fCAgMTEwMCB8ICAgICAgICAgICAgIHwgICAgICAgICAgIAorIGNvbXBhbnkyIHwgMDctMDgtMjAy MyB8ICAxMzAwIHwgICAgICAgICAgICAgfCAgICAgICAgICAgCisgY29tcGFueTIgfCAwNy0wOS0y MDIzIHwgIDEyMDAgfCAgICAgICAgICAgICB8ICAgICAgICAgICAKKyBjb21wYW55MiB8IDA3LTEw LTIwMjMgfCAgMTMwMCB8ICAgICAgICAgICAgIHwgICAgICAgICAgIAorKDIwIHJvd3MpCisKKy0t IHVzaW5nIE5FWFQKK1NFTEVDVCBjb21wYW55LCB0ZGF0ZSwgcHJpY2UsIGZpcnN0X3ZhbHVlKHBy aWNlKSBPVkVSIHcsIGxhc3RfdmFsdWUocHJpY2UpIE9WRVIgdworIEZST00gc3RvY2sKKyBXSU5E T1cgdyBBUyAoCisgUEFSVElUSU9OIEJZIGNvbXBhbnkKKyBST1dTIEJFVFdFRU4gQ1VSUkVOVCBS T1cgQU5EIFVOQk9VTkRFRCBGT0xMT1dJTkcKKyBJTklUSUFMCisgUEFUVEVSTiAoU1RBUlQgVVBE T1dOKQorIERFRklORQorICBTVEFSVCBBUyBUUlVFLAorICBVUERPV04gQVMgcHJpY2UgPiBQUkVW KHByaWNlKSBBTkQgcHJpY2UgPiBORVhUKHByaWNlKQorKTsKKyBjb21wYW55ICB8ICAgdGRhdGUg ICAgfCBwcmljZSB8IGZpcnN0X3ZhbHVlIHwgbGFzdF92YWx1ZSAKKy0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0KKyBjb21wYW55MSB8IDA3 LTAxLTIwMjMgfCAgIDEwMCB8ICAgICAgICAgMTAwIHwgICAgICAgIDIwMAorIGNvbXBhbnkxIHwg MDctMDItMjAyMyB8ICAgMjAwIHwgICAgICAgICAgICAgfCAgICAgICAgICAgCisgY29tcGFueTEg fCAwNy0wMy0yMDIzIHwgICAxNTAgfCAgICAgICAgICAgICB8ICAgICAgICAgICAKKyBjb21wYW55 MSB8IDA3LTA0LTIwMjMgfCAgIDE0MCB8ICAgICAgICAgMTQwIHwgICAgICAgIDE1MAorIGNvbXBh bnkxIHwgMDctMDUtMjAyMyB8ICAgMTUwIHwgICAgICAgICAgICAgfCAgICAgICAgICAgCisgY29t cGFueTEgfCAwNy0wNi0yMDIzIHwgICAgOTAgfCAgICAgICAgICAgICB8ICAgICAgICAgICAKKyBj b21wYW55MSB8IDA3LTA3LTIwMjMgfCAgIDExMCB8ICAgICAgICAgMTEwIHwgICAgICAgIDEzMAor IGNvbXBhbnkxIHwgMDctMDgtMjAyMyB8ICAgMTMwIHwgICAgICAgICAgICAgfCAgICAgICAgICAg CisgY29tcGFueTEgfCAwNy0wOS0yMDIzIHwgICAxMjAgfCAgICAgICAgICAgICB8ICAgICAgICAg ICAKKyBjb21wYW55MSB8IDA3LTEwLTIwMjMgfCAgIDEzMCB8ICAgICAgICAgICAgIHwgICAgICAg ICAgIAorIGNvbXBhbnkyIHwgMDctMDEtMjAyMyB8ICAgIDUwIHwgICAgICAgICAgNTAgfCAgICAg ICAyMDAwCisgY29tcGFueTIgfCAwNy0wMi0yMDIzIHwgIDIwMDAgfCAgICAgICAgICAgICB8ICAg ICAgICAgICAKKyBjb21wYW55MiB8IDA3LTAzLTIwMjMgfCAgMTUwMCB8ICAgICAgICAgICAgIHwg ICAgICAgICAgIAorIGNvbXBhbnkyIHwgMDctMDQtMjAyMyB8ICAxNDAwIHwgICAgICAgIDE0MDAg fCAgICAgICAxNTAwCisgY29tcGFueTIgfCAwNy0wNS0yMDIzIHwgIDE1MDAgfCAgICAgICAgICAg ICB8ICAgICAgICAgICAKKyBjb21wYW55MiB8IDA3LTA2LTIwMjMgfCAgICA2MCB8ICAgICAgICAg ICAgIHwgICAgICAgICAgIAorIGNvbXBhbnkyIHwgMDctMDctMjAyMyB8ICAxMTAwIHwgICAgICAg IDExMDAgfCAgICAgICAxMzAwCisgY29tcGFueTIgfCAwNy0wOC0yMDIzIHwgIDEzMDAgfCAgICAg ICAgICAgICB8ICAgICAgICAgICAKKyBjb21wYW55MiB8IDA3LTA5LTIwMjMgfCAgMTIwMCB8ICAg ICAgICAgICAgIHwgICAgICAgICAgIAorIGNvbXBhbnkyIHwgMDctMTAtMjAyMyB8ICAxMzAwIHwg ICAgICAgICAgICAgfCAgICAgICAgICAgCisoMjAgcm93cykKKworLS0gdXNpbmcgQUZURVIgTUFU Q0ggU0tJUCBUTyBORVhUIFJPVworU0VMRUNUIGNvbXBhbnksIHRkYXRlLCBwcmljZSwgZmlyc3Rf dmFsdWUocHJpY2UpIE9WRVIgdywgbGFzdF92YWx1ZShwcmljZSkgT1ZFUiB3CisgRlJPTSBzdG9j aworIFdJTkRPVyB3IEFTICgKKyBQQVJUSVRJT04gQlkgY29tcGFueQorIFJPV1MgQkVUV0VFTiBD VVJSRU5UIFJPVyBBTkQgVU5CT1VOREVEIEZPTExPV0lORworIEFGVEVSIE1BVENIIFNLSVAgVE8g TkVYVCBST1cKKyBJTklUSUFMCisgUEFUVEVSTiAoU1RBUlQgVVBET1dOKQorIERFRklORQorICBT VEFSVCBBUyBUUlVFLAorICBVUERPV04gQVMgcHJpY2UgPiBQUkVWKHByaWNlKSBBTkQgcHJpY2Ug PiBORVhUKHByaWNlKQorKTsKKyBjb21wYW55ICB8ICAgdGRhdGUgICAgfCBwcmljZSB8IGZpcnN0 X3ZhbHVlIHwgbGFzdF92YWx1ZSAKKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0rLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0KKyBjb21wYW55MSB8IDA3LTAxLTIwMjMgfCAgIDEwMCB8 ICAgICAgICAgMTAwIHwgICAgICAgIDIwMAorIGNvbXBhbnkxIHwgMDctMDItMjAyMyB8ICAgMjAw IHwgICAgICAgICAgICAgfCAgICAgICAgICAgCisgY29tcGFueTEgfCAwNy0wMy0yMDIzIHwgICAx NTAgfCAgICAgICAgICAgICB8ICAgICAgICAgICAKKyBjb21wYW55MSB8IDA3LTA0LTIwMjMgfCAg IDE0MCB8ICAgICAgICAgMTQwIHwgICAgICAgIDE1MAorIGNvbXBhbnkxIHwgMDctMDUtMjAyMyB8 ICAgMTUwIHwgICAgICAgICAgICAgfCAgICAgICAgICAgCisgY29tcGFueTEgfCAwNy0wNi0yMDIz IHwgICAgOTAgfCAgICAgICAgICAgICB8ICAgICAgICAgICAKKyBjb21wYW55MSB8IDA3LTA3LTIw MjMgfCAgIDExMCB8ICAgICAgICAgMTEwIHwgICAgICAgIDEzMAorIGNvbXBhbnkxIHwgMDctMDgt MjAyMyB8ICAgMTMwIHwgICAgICAgICAgICAgfCAgICAgICAgICAgCisgY29tcGFueTEgfCAwNy0w OS0yMDIzIHwgICAxMjAgfCAgICAgICAgICAgICB8ICAgICAgICAgICAKKyBjb21wYW55MSB8IDA3 LTEwLTIwMjMgfCAgIDEzMCB8ICAgICAgICAgICAgIHwgICAgICAgICAgIAorIGNvbXBhbnkyIHwg MDctMDEtMjAyMyB8ICAgIDUwIHwgICAgICAgICAgNTAgfCAgICAgICAyMDAwCisgY29tcGFueTIg fCAwNy0wMi0yMDIzIHwgIDIwMDAgfCAgICAgICAgICAgICB8ICAgICAgICAgICAKKyBjb21wYW55 MiB8IDA3LTAzLTIwMjMgfCAgMTUwMCB8ICAgICAgICAgICAgIHwgICAgICAgICAgIAorIGNvbXBh bnkyIHwgMDctMDQtMjAyMyB8ICAxNDAwIHwgICAgICAgIDE0MDAgfCAgICAgICAxNTAwCisgY29t cGFueTIgfCAwNy0wNS0yMDIzIHwgIDE1MDAgfCAgICAgICAgICAgICB8ICAgICAgICAgICAKKyBj b21wYW55MiB8IDA3LTA2LTIwMjMgfCAgICA2MCB8ICAgICAgICAgICAgIHwgICAgICAgICAgIAor IGNvbXBhbnkyIHwgMDctMDctMjAyMyB8ICAxMTAwIHwgICAgICAgIDExMDAgfCAgICAgICAxMzAw CisgY29tcGFueTIgfCAwNy0wOC0yMDIzIHwgIDEzMDAgfCAgICAgICAgICAgICB8ICAgICAgICAg ICAKKyBjb21wYW55MiB8IDA3LTA5LTIwMjMgfCAgMTIwMCB8ICAgICAgICAgICAgIHwgICAgICAg ICAgIAorIGNvbXBhbnkyIHwgMDctMTAtMjAyMyB8ICAxMzAwIHwgICAgICAgICAgICAgfCAgICAg ICAgICAgCisoMjAgcm93cykKKworLS0gbWF0Y2ggZXZlcnl0aGluZworU0VMRUNUIGNvbXBhbnks IHRkYXRlLCBwcmljZSwgZmlyc3RfdmFsdWUocHJpY2UpIE9WRVIgdywgbGFzdF92YWx1ZShwcmlj ZSkgT1ZFUiB3CisgRlJPTSBzdG9jaworIFdJTkRPVyB3IEFTICgKKyBQQVJUSVRJT04gQlkgY29t cGFueQorIE9SREVSIEJZIHRkYXRlCisgUk9XUyBCRVRXRUVOIENVUlJFTlQgUk9XIEFORCBVTkJP VU5ERUQgRk9MTE9XSU5HCisgQUZURVIgTUFUQ0ggU0tJUCBQQVNUIExBU1QgUk9XCisgSU5JVElB TAorIFBBVFRFUk4gKEErKQorIERFRklORQorICBBIEFTIFRSVUUKKyk7CisgY29tcGFueSAgfCAg IHRkYXRlICAgIHwgcHJpY2UgfCBmaXJzdF92YWx1ZSB8IGxhc3RfdmFsdWUgCistLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tCisgY29tcGFu eTEgfCAwNy0wMS0yMDIzIHwgICAxMDAgfCAgICAgICAgIDEwMCB8ICAgICAgICAxMzAKKyBjb21w YW55MSB8IDA3LTAyLTIwMjMgfCAgIDIwMCB8ICAgICAgICAgICAgIHwgICAgICAgICAgIAorIGNv bXBhbnkxIHwgMDctMDMtMjAyMyB8ICAgMTUwIHwgICAgICAgICAgICAgfCAgICAgICAgICAgCisg Y29tcGFueTEgfCAwNy0wNC0yMDIzIHwgICAxNDAgfCAgICAgICAgICAgICB8ICAgICAgICAgICAK KyBjb21wYW55MSB8IDA3LTA1LTIwMjMgfCAgIDE1MCB8ICAgICAgICAgICAgIHwgICAgICAgICAg IAorIGNvbXBhbnkxIHwgMDctMDYtMjAyMyB8ICAgIDkwIHwgICAgICAgICAgICAgfCAgICAgICAg ICAgCisgY29tcGFueTEgfCAwNy0wNy0yMDIzIHwgICAxMTAgfCAgICAgICAgICAgICB8ICAgICAg ICAgICAKKyBjb21wYW55MSB8IDA3LTA4LTIwMjMgfCAgIDEzMCB8ICAgICAgICAgICAgIHwgICAg ICAgICAgIAorIGNvbXBhbnkxIHwgMDctMDktMjAyMyB8ICAgMTIwIHwgICAgICAgICAgICAgfCAg ICAgICAgICAgCisgY29tcGFueTEgfCAwNy0xMC0yMDIzIHwgICAxMzAgfCAgICAgICAgICAgICB8 ICAgICAgICAgICAKKyBjb21wYW55MiB8IDA3LTAxLTIwMjMgfCAgICA1MCB8ICAgICAgICAgIDUw IHwgICAgICAgMTMwMAorIGNvbXBhbnkyIHwgMDctMDItMjAyMyB8ICAyMDAwIHwgICAgICAgICAg ICAgfCAgICAgICAgICAgCisgY29tcGFueTIgfCAwNy0wMy0yMDIzIHwgIDE1MDAgfCAgICAgICAg ICAgICB8ICAgICAgICAgICAKKyBjb21wYW55MiB8IDA3LTA0LTIwMjMgfCAgMTQwMCB8ICAgICAg ICAgICAgIHwgICAgICAgICAgIAorIGNvbXBhbnkyIHwgMDctMDUtMjAyMyB8ICAxNTAwIHwgICAg ICAgICAgICAgfCAgICAgICAgICAgCisgY29tcGFueTIgfCAwNy0wNi0yMDIzIHwgICAgNjAgfCAg ICAgICAgICAgICB8ICAgICAgICAgICAKKyBjb21wYW55MiB8IDA3LTA3LTIwMjMgfCAgMTEwMCB8 ICAgICAgICAgICAgIHwgICAgICAgICAgIAorIGNvbXBhbnkyIHwgMDctMDgtMjAyMyB8ICAxMzAw IHwgICAgICAgICAgICAgfCAgICAgICAgICAgCisgY29tcGFueTIgfCAwNy0wOS0yMDIzIHwgIDEy MDAgfCAgICAgICAgICAgICB8ICAgICAgICAgICAKKyBjb21wYW55MiB8IDA3LTEwLTIwMjMgfCAg MTMwMCB8ICAgICAgICAgICAgIHwgICAgICAgICAgIAorKDIwIHJvd3MpCisKKy0tIGJhY2t0cmFj a2luZyB3aXRoIHJlY2xhc3NpZmljYXRpb24gb2Ygcm93cworLS0gdXNpbmcgQUZURVIgTUFUQ0gg U0tJUCBQQVNUIExBU1QgUk9XCitTRUxFQ1QgY29tcGFueSwgdGRhdGUsIHByaWNlLCBmaXJzdF92 YWx1ZSh0ZGF0ZSkgT1ZFUiB3LCBsYXN0X3ZhbHVlKHRkYXRlKSBPVkVSIHcKKyBGUk9NIHN0b2Nr CisgV0lORE9XIHcgQVMgKAorIFBBUlRJVElPTiBCWSBjb21wYW55CisgT1JERVIgQlkgdGRhdGUK KyBST1dTIEJFVFdFRU4gQ1VSUkVOVCBST1cgQU5EIFVOQk9VTkRFRCBGT0xMT1dJTkcKKyBBRlRF UiBNQVRDSCBTS0lQIFBBU1QgTEFTVCBST1cKKyBJTklUSUFMCisgUEFUVEVSTiAoQSsgQispCisg REVGSU5FCisgIEEgQVMgcHJpY2UgPiAxMDAsCisgIEIgQVMgcHJpY2UgPiAxMDAKKyk7CisgY29t cGFueSAgfCAgIHRkYXRlICAgIHwgcHJpY2UgfCBmaXJzdF92YWx1ZSB8IGxhc3RfdmFsdWUgCist LS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t CisgY29tcGFueTEgfCAwNy0wMS0yMDIzIHwgICAxMDAgfCAgICAgICAgICAgICB8IAorIGNvbXBh bnkxIHwgMDctMDItMjAyMyB8ICAgMjAwIHwgMDctMDItMjAyMyAgfCAwNy0wNS0yMDIzCisgY29t cGFueTEgfCAwNy0wMy0yMDIzIHwgICAxNTAgfCAgICAgICAgICAgICB8IAorIGNvbXBhbnkxIHwg MDctMDQtMjAyMyB8ICAgMTQwIHwgICAgICAgICAgICAgfCAKKyBjb21wYW55MSB8IDA3LTA1LTIw MjMgfCAgIDE1MCB8ICAgICAgICAgICAgIHwgCisgY29tcGFueTEgfCAwNy0wNi0yMDIzIHwgICAg OTAgfCAgICAgICAgICAgICB8IAorIGNvbXBhbnkxIHwgMDctMDctMjAyMyB8ICAgMTEwIHwgMDct MDctMjAyMyAgfCAwNy0xMC0yMDIzCisgY29tcGFueTEgfCAwNy0wOC0yMDIzIHwgICAxMzAgfCAg ICAgICAgICAgICB8IAorIGNvbXBhbnkxIHwgMDctMDktMjAyMyB8ICAgMTIwIHwgICAgICAgICAg ICAgfCAKKyBjb21wYW55MSB8IDA3LTEwLTIwMjMgfCAgIDEzMCB8ICAgICAgICAgICAgIHwgCisg Y29tcGFueTIgfCAwNy0wMS0yMDIzIHwgICAgNTAgfCAgICAgICAgICAgICB8IAorIGNvbXBhbnky IHwgMDctMDItMjAyMyB8ICAyMDAwIHwgMDctMDItMjAyMyAgfCAwNy0wNS0yMDIzCisgY29tcGFu eTIgfCAwNy0wMy0yMDIzIHwgIDE1MDAgfCAgICAgICAgICAgICB8IAorIGNvbXBhbnkyIHwgMDct MDQtMjAyMyB8ICAxNDAwIHwgICAgICAgICAgICAgfCAKKyBjb21wYW55MiB8IDA3LTA1LTIwMjMg fCAgMTUwMCB8ICAgICAgICAgICAgIHwgCisgY29tcGFueTIgfCAwNy0wNi0yMDIzIHwgICAgNjAg fCAgICAgICAgICAgICB8IAorIGNvbXBhbnkyIHwgMDctMDctMjAyMyB8ICAxMTAwIHwgMDctMDct MjAyMyAgfCAwNy0xMC0yMDIzCisgY29tcGFueTIgfCAwNy0wOC0yMDIzIHwgIDEzMDAgfCAgICAg ICAgICAgICB8IAorIGNvbXBhbnkyIHwgMDctMDktMjAyMyB8ICAxMjAwIHwgICAgICAgICAgICAg fCAKKyBjb21wYW55MiB8IDA3LTEwLTIwMjMgfCAgMTMwMCB8ICAgICAgICAgICAgIHwgCisoMjAg cm93cykKKworLS0gYmFja3RyYWNraW5nIHdpdGggcmVjbGFzc2lmaWNhdGlvbiBvZiByb3dzCist LSB1c2luZyBBRlRFUiBNQVRDSCBTS0lQIFRPIE5FWFQgUk9XCitTRUxFQ1QgY29tcGFueSwgdGRh dGUsIHByaWNlLCBmaXJzdF92YWx1ZSh0ZGF0ZSkgT1ZFUiB3LCBsYXN0X3ZhbHVlKHRkYXRlKSBP VkVSIHcKKyBGUk9NIHN0b2NrCisgV0lORE9XIHcgQVMgKAorIFBBUlRJVElPTiBCWSBjb21wYW55 CisgT1JERVIgQlkgdGRhdGUKKyBST1dTIEJFVFdFRU4gQ1VSUkVOVCBST1cgQU5EIFVOQk9VTkRF RCBGT0xMT1dJTkcKKyBBRlRFUiBNQVRDSCBTS0lQIFRPIE5FWFQgUk9XCisgSU5JVElBTAorIFBB VFRFUk4gKEErIEIrKQorIERFRklORQorICBBIEFTIHByaWNlID4gMTAwLAorICBCIEFTIHByaWNl ID4gMTAwCispOworIGNvbXBhbnkgIHwgICB0ZGF0ZSAgICB8IHByaWNlIHwgZmlyc3RfdmFsdWUg fCBsYXN0X3ZhbHVlIAorLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLQorIGNvbXBhbnkxIHwgMDctMDEtMjAyMyB8ICAgMTAwIHwgICAgICAg ICAgICAgfCAKKyBjb21wYW55MSB8IDA3LTAyLTIwMjMgfCAgIDIwMCB8IDA3LTAyLTIwMjMgIHwg MDctMDUtMjAyMworIGNvbXBhbnkxIHwgMDctMDMtMjAyMyB8ICAgMTUwIHwgMDctMDMtMjAyMyAg fCAwNy0wNS0yMDIzCisgY29tcGFueTEgfCAwNy0wNC0yMDIzIHwgICAxNDAgfCAwNy0wNC0yMDIz ICB8IDA3LTA1LTIwMjMKKyBjb21wYW55MSB8IDA3LTA1LTIwMjMgfCAgIDE1MCB8ICAgICAgICAg ICAgIHwgCisgY29tcGFueTEgfCAwNy0wNi0yMDIzIHwgICAgOTAgfCAgICAgICAgICAgICB8IAor IGNvbXBhbnkxIHwgMDctMDctMjAyMyB8ICAgMTEwIHwgMDctMDctMjAyMyAgfCAwNy0xMC0yMDIz CisgY29tcGFueTEgfCAwNy0wOC0yMDIzIHwgICAxMzAgfCAwNy0wOC0yMDIzICB8IDA3LTEwLTIw MjMKKyBjb21wYW55MSB8IDA3LTA5LTIwMjMgfCAgIDEyMCB8IDA3LTA5LTIwMjMgIHwgMDctMTAt MjAyMworIGNvbXBhbnkxIHwgMDctMTAtMjAyMyB8ICAgMTMwIHwgICAgICAgICAgICAgfCAKKyBj b21wYW55MiB8IDA3LTAxLTIwMjMgfCAgICA1MCB8ICAgICAgICAgICAgIHwgCisgY29tcGFueTIg fCAwNy0wMi0yMDIzIHwgIDIwMDAgfCAwNy0wMi0yMDIzICB8IDA3LTA1LTIwMjMKKyBjb21wYW55 MiB8IDA3LTAzLTIwMjMgfCAgMTUwMCB8IDA3LTAzLTIwMjMgIHwgMDctMDUtMjAyMworIGNvbXBh bnkyIHwgMDctMDQtMjAyMyB8ICAxNDAwIHwgMDctMDQtMjAyMyAgfCAwNy0wNS0yMDIzCisgY29t cGFueTIgfCAwNy0wNS0yMDIzIHwgIDE1MDAgfCAgICAgICAgICAgICB8IAorIGNvbXBhbnkyIHwg MDctMDYtMjAyMyB8ICAgIDYwIHwgICAgICAgICAgICAgfCAKKyBjb21wYW55MiB8IDA3LTA3LTIw MjMgfCAgMTEwMCB8IDA3LTA3LTIwMjMgIHwgMDctMTAtMjAyMworIGNvbXBhbnkyIHwgMDctMDgt MjAyMyB8ICAxMzAwIHwgMDctMDgtMjAyMyAgfCAwNy0xMC0yMDIzCisgY29tcGFueTIgfCAwNy0w OS0yMDIzIHwgIDEyMDAgfCAwNy0wOS0yMDIzICB8IDA3LTEwLTIwMjMKKyBjb21wYW55MiB8IDA3 LTEwLTIwMjMgfCAgMTMwMCB8ICAgICAgICAgICAgIHwgCisoMjAgcm93cykKKworLS0gUk9XUyBC RVRXRUVOIENVUlJFTlQgUk9XIEFORCBvZmZzZXQgRk9MTE9XSU5HCitTRUxFQ1QgY29tcGFueSwg dGRhdGUsIHByaWNlLCBmaXJzdF92YWx1ZSh0ZGF0ZSkgT1ZFUiB3LCBsYXN0X3ZhbHVlKHRkYXRl KSBPVkVSIHcsCisgY291bnQoKikgT1ZFUiB3CisgRlJPTSBzdG9jaworIFdJTkRPVyB3IEFTICgK KyBQQVJUSVRJT04gQlkgY29tcGFueQorIE9SREVSIEJZIHRkYXRlCisgUk9XUyBCRVRXRUVOIENV UlJFTlQgUk9XIEFORCAyIEZPTExPV0lORworIEFGVEVSIE1BVENIIFNLSVAgUEFTVCBMQVNUIFJP VworIFBBVFRFUk4gKFNUQVJUIFVQKyBET1dOKykKKyBERUZJTkUKKyAgU1RBUlQgQVMgVFJVRSwK KyAgVVAgQVMgcHJpY2UgPiBQUkVWKHByaWNlKSwKKyAgRE9XTiBBUyBwcmljZSA8IFBSRVYocHJp Y2UpCispOworIGNvbXBhbnkgIHwgICB0ZGF0ZSAgICB8IHByaWNlIHwgZmlyc3RfdmFsdWUgfCBs YXN0X3ZhbHVlIHwgY291bnQgCistLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tKy0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0KKyBjb21wYW55MSB8IDA3LTAxLTIwMjMgfCAg IDEwMCB8IDA3LTAxLTIwMjMgIHwgMDctMDMtMjAyMyB8ICAgICAzCisgY29tcGFueTEgfCAwNy0w Mi0yMDIzIHwgICAyMDAgfCAgICAgICAgICAgICB8ICAgICAgICAgICAgfCAgICAgMAorIGNvbXBh bnkxIHwgMDctMDMtMjAyMyB8ICAgMTUwIHwgICAgICAgICAgICAgfCAgICAgICAgICAgIHwgICAg IDAKKyBjb21wYW55MSB8IDA3LTA0LTIwMjMgfCAgIDE0MCB8IDA3LTA0LTIwMjMgIHwgMDctMDYt MjAyMyB8ICAgICAzCisgY29tcGFueTEgfCAwNy0wNS0yMDIzIHwgICAxNTAgfCAgICAgICAgICAg ICB8ICAgICAgICAgICAgfCAgICAgMAorIGNvbXBhbnkxIHwgMDctMDYtMjAyMyB8ICAgIDkwIHwg ICAgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgIDAKKyBjb21wYW55MSB8IDA3LTA3LTIwMjMg fCAgIDExMCB8IDA3LTA3LTIwMjMgIHwgMDctMDktMjAyMyB8ICAgICAzCisgY29tcGFueTEgfCAw Ny0wOC0yMDIzIHwgICAxMzAgfCAgICAgICAgICAgICB8ICAgICAgICAgICAgfCAgICAgMAorIGNv bXBhbnkxIHwgMDctMDktMjAyMyB8ICAgMTIwIHwgICAgICAgICAgICAgfCAgICAgICAgICAgIHwg ICAgIDAKKyBjb21wYW55MSB8IDA3LTEwLTIwMjMgfCAgIDEzMCB8ICAgICAgICAgICAgIHwgICAg ICAgICAgICB8ICAgICAwCisgY29tcGFueTIgfCAwNy0wMS0yMDIzIHwgICAgNTAgfCAwNy0wMS0y MDIzICB8IDA3LTAzLTIwMjMgfCAgICAgMworIGNvbXBhbnkyIHwgMDctMDItMjAyMyB8ICAyMDAw IHwgICAgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgIDAKKyBjb21wYW55MiB8IDA3LTAzLTIw MjMgfCAgMTUwMCB8ICAgICAgICAgICAgIHwgICAgICAgICAgICB8ICAgICAwCisgY29tcGFueTIg fCAwNy0wNC0yMDIzIHwgIDE0MDAgfCAwNy0wNC0yMDIzICB8IDA3LTA2LTIwMjMgfCAgICAgMwor IGNvbXBhbnkyIHwgMDctMDUtMjAyMyB8ICAxNTAwIHwgICAgICAgICAgICAgfCAgICAgICAgICAg IHwgICAgIDAKKyBjb21wYW55MiB8IDA3LTA2LTIwMjMgfCAgICA2MCB8ICAgICAgICAgICAgIHwg ICAgICAgICAgICB8ICAgICAwCisgY29tcGFueTIgfCAwNy0wNy0yMDIzIHwgIDExMDAgfCAwNy0w Ny0yMDIzICB8IDA3LTA5LTIwMjMgfCAgICAgMworIGNvbXBhbnkyIHwgMDctMDgtMjAyMyB8ICAx MzAwIHwgICAgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgIDAKKyBjb21wYW55MiB8IDA3LTA5 LTIwMjMgfCAgMTIwMCB8ICAgICAgICAgICAgIHwgICAgICAgICAgICB8ICAgICAwCisgY29tcGFu eTIgfCAwNy0xMC0yMDIzIHwgIDEzMDAgfCAgICAgICAgICAgICB8ICAgICAgICAgICAgfCAgICAg MAorKDIwIHJvd3MpCisKKy0tCistLSBBZ2dyZWdhdGVzCistLQorLS0gdXNpbmcgQUZURVIgTUFU Q0ggU0tJUCBQQVNUIExBU1QgUk9XCitTRUxFQ1QgY29tcGFueSwgdGRhdGUsIHByaWNlLAorIGZp cnN0X3ZhbHVlKHByaWNlKSBPVkVSIHcsCisgbGFzdF92YWx1ZShwcmljZSkgT1ZFUiB3LAorIG1h eChwcmljZSkgT1ZFUiB3LAorIG1pbihwcmljZSkgT1ZFUiB3LAorIHN1bShwcmljZSkgT1ZFUiB3 LAorIGF2ZyhwcmljZSkgT1ZFUiB3LAorIGNvdW50KHByaWNlKSBPVkVSIHcKK0ZST00gc3RvY2sK K1dJTkRPVyB3IEFTICgKK1BBUlRJVElPTiBCWSBjb21wYW55CitST1dTIEJFVFdFRU4gQ1VSUkVO VCBST1cgQU5EIFVOQk9VTkRFRCBGT0xMT1dJTkcKK0FGVEVSIE1BVENIIFNLSVAgUEFTVCBMQVNU IFJPVworSU5JVElBTAorUEFUVEVSTiAoU1RBUlQgVVArIERPV04rKQorREVGSU5FCitTVEFSVCBB UyBUUlVFLAorVVAgQVMgcHJpY2UgPiBQUkVWKHByaWNlKSwKK0RPV04gQVMgcHJpY2UgPCBQUkVW KHByaWNlKQorKTsKKyBjb21wYW55ICB8ICAgdGRhdGUgICAgfCBwcmljZSB8IGZpcnN0X3ZhbHVl IHwgbGFzdF92YWx1ZSB8IG1heCAgfCBtaW4gfCBzdW0gIHwgICAgICAgICAgYXZnICAgICAgICAg IHwgY291bnQgCistLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tKy0tLS0tLSstLS0tLSstLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLQorIGNvbXBhbnkxIHwgMDctMDEtMjAyMyB8ICAgMTAwIHwgICAgICAgICAxMDAgfCAg ICAgICAgMTQwIHwgIDIwMCB8IDEwMCB8ICA1OTAgfCAgMTQ3LjUwMDAwMDAwMDAwMDAwMDAgfCAg ICAgNAorIGNvbXBhbnkxIHwgMDctMDItMjAyMyB8ICAgMjAwIHwgICAgICAgICAgICAgfCAgICAg ICAgICAgIHwgICAgICB8ICAgICB8ICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfCAgICAg MAorIGNvbXBhbnkxIHwgMDctMDMtMjAyMyB8ICAgMTUwIHwgICAgICAgICAgICAgfCAgICAgICAg ICAgIHwgICAgICB8ICAgICB8ICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgMAor IGNvbXBhbnkxIHwgMDctMDQtMjAyMyB8ICAgMTQwIHwgICAgICAgICAgICAgfCAgICAgICAgICAg IHwgICAgICB8ICAgICB8ICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgMAorIGNv bXBhbnkxIHwgMDctMDUtMjAyMyB8ICAgMTUwIHwgICAgICAgICAgICAgfCAgICAgICAgICAgIHwg ICAgICB8ICAgICB8ICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgMAorIGNvbXBh bnkxIHwgMDctMDYtMjAyMyB8ICAgIDkwIHwgICAgICAgICAgOTAgfCAgICAgICAgMTIwIHwgIDEz MCB8ICA5MCB8ICA0NTAgfCAgMTEyLjUwMDAwMDAwMDAwMDAwMDAgfCAgICAgNAorIGNvbXBhbnkx IHwgMDctMDctMjAyMyB8ICAgMTEwIHwgICAgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgICB8 ICAgICB8ICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgMAorIGNvbXBhbnkxIHwg MDctMDgtMjAyMyB8ICAgMTMwIHwgICAgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgICB8ICAg ICB8ICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgMAorIGNvbXBhbnkxIHwgMDct MDktMjAyMyB8ICAgMTIwIHwgICAgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgICB8ICAgICB8 ICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgMAorIGNvbXBhbnkxIHwgMDctMTAt MjAyMyB8ICAgMTMwIHwgICAgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgICB8ICAgICB8ICAg ICAgfCAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgMAorIGNvbXBhbnkyIHwgMDctMDEtMjAy MyB8ICAgIDUwIHwgICAgICAgICAgNTAgfCAgICAgICAxNDAwIHwgMjAwMCB8ICA1MCB8IDQ5NTAg fCAxMjM3LjUwMDAwMDAwMDAwMDAwMDAgfCAgICAgNAorIGNvbXBhbnkyIHwgMDctMDItMjAyMyB8 ICAyMDAwIHwgICAgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgICB8ICAgICB8ICAgICAgfCAg ICAgICAgICAgICAgICAgICAgICAgfCAgICAgMAorIGNvbXBhbnkyIHwgMDctMDMtMjAyMyB8ICAx NTAwIHwgICAgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgICB8ICAgICB8ICAgICAgfCAgICAg ICAgICAgICAgICAgICAgICAgfCAgICAgMAorIGNvbXBhbnkyIHwgMDctMDQtMjAyMyB8ICAxNDAw IHwgICAgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgICB8ICAgICB8ICAgICAgfCAgICAgICAg ICAgICAgICAgICAgICAgfCAgICAgMAorIGNvbXBhbnkyIHwgMDctMDUtMjAyMyB8ICAxNTAwIHwg ICAgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgICB8ICAgICB8ICAgICAgfCAgICAgICAgICAg ICAgICAgICAgICAgfCAgICAgMAorIGNvbXBhbnkyIHwgMDctMDYtMjAyMyB8ICAgIDYwIHwgICAg ICAgICAgNjAgfCAgICAgICAxMjAwIHwgMTMwMCB8ICA2MCB8IDM2NjAgfCAgOTE1LjAwMDAwMDAw MDAwMDAwMDAgfCAgICAgNAorIGNvbXBhbnkyIHwgMDctMDctMjAyMyB8ICAxMTAwIHwgICAgICAg ICAgICAgfCAgICAgICAgICAgIHwgICAgICB8ICAgICB8ICAgICAgfCAgICAgICAgICAgICAgICAg ICAgICAgfCAgICAgMAorIGNvbXBhbnkyIHwgMDctMDgtMjAyMyB8ICAxMzAwIHwgICAgICAgICAg ICAgfCAgICAgICAgICAgIHwgICAgICB8ICAgICB8ICAgICAgfCAgICAgICAgICAgICAgICAgICAg ICAgfCAgICAgMAorIGNvbXBhbnkyIHwgMDctMDktMjAyMyB8ICAxMjAwIHwgICAgICAgICAgICAg fCAgICAgICAgICAgIHwgICAgICB8ICAgICB8ICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAg fCAgICAgMAorIGNvbXBhbnkyIHwgMDctMTAtMjAyMyB8ICAxMzAwIHwgICAgICAgICAgICAgfCAg ICAgICAgICAgIHwgICAgICB8ICAgICB8ICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfCAg ICAgMAorKDIwIHJvd3MpCisKKy0tIHVzaW5nIEFGVEVSIE1BVENIIFNLSVAgVE8gTkVYVCBST1cK K1NFTEVDVCBjb21wYW55LCB0ZGF0ZSwgcHJpY2UsCisgZmlyc3RfdmFsdWUocHJpY2UpIE9WRVIg dywKKyBsYXN0X3ZhbHVlKHByaWNlKSBPVkVSIHcsCisgbWF4KHByaWNlKSBPVkVSIHcsCisgbWlu KHByaWNlKSBPVkVSIHcsCisgc3VtKHByaWNlKSBPVkVSIHcsCisgYXZnKHByaWNlKSBPVkVSIHcs CisgY291bnQocHJpY2UpIE9WRVIgdworRlJPTSBzdG9jaworV0lORE9XIHcgQVMgKAorUEFSVElU SU9OIEJZIGNvbXBhbnkKK1JPV1MgQkVUV0VFTiBDVVJSRU5UIFJPVyBBTkQgVU5CT1VOREVEIEZP TExPV0lORworQUZURVIgTUFUQ0ggU0tJUCBUTyBORVhUIFJPVworSU5JVElBTAorUEFUVEVSTiAo U1RBUlQgVVArIERPV04rKQorREVGSU5FCitTVEFSVCBBUyBUUlVFLAorVVAgQVMgcHJpY2UgPiBQ UkVWKHByaWNlKSwKK0RPV04gQVMgcHJpY2UgPCBQUkVWKHByaWNlKQorKTsKKyBjb21wYW55ICB8 ICAgdGRhdGUgICAgfCBwcmljZSB8IGZpcnN0X3ZhbHVlIHwgbGFzdF92YWx1ZSB8IG1heCAgfCBt aW4gIHwgc3VtICB8ICAgICAgICAgIGF2ZyAgICAgICAgICB8IGNvdW50IAorLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0rLS0t LS0tKy0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tCisgY29tcGFueTEgfCAw Ny0wMS0yMDIzIHwgICAxMDAgfCAgICAgICAgIDEwMCB8ICAgICAgICAxNDAgfCAgMjAwIHwgIDEw MCB8ICA1OTAgfCAgMTQ3LjUwMDAwMDAwMDAwMDAwMDAgfCAgICAgNAorIGNvbXBhbnkxIHwgMDct MDItMjAyMyB8ICAgMjAwIHwgICAgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgICB8ICAgICAg fCAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIDAKKyBjb21wYW55MSB8IDA3LTAz LTIwMjMgfCAgIDE1MCB8ICAgICAgICAgICAgIHwgICAgICAgICAgICB8ICAgICAgfCAgICAgIHwg ICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAwCisgY29tcGFueTEgfCAwNy0wNC0y MDIzIHwgICAxNDAgfCAgICAgICAgIDE0MCB8ICAgICAgICAgOTAgfCAgMTUwIHwgICA5MCB8ICAz ODAgfCAgMTI2LjY2NjY2NjY2NjY2NjY2NjcgfCAgICAgMworIGNvbXBhbnkxIHwgMDctMDUtMjAy MyB8ICAgMTUwIHwgICAgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgICB8ICAgICAgfCAgICAg IHwgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIDAKKyBjb21wYW55MSB8IDA3LTA2LTIwMjMg fCAgICA5MCB8ICAgICAgICAgIDkwIHwgICAgICAgIDEyMCB8ICAxMzAgfCAgIDkwIHwgIDQ1MCB8 ICAxMTIuNTAwMDAwMDAwMDAwMDAwMCB8ICAgICA0CisgY29tcGFueTEgfCAwNy0wNy0yMDIzIHwg ICAxMTAgfCAgICAgICAgIDExMCB8ICAgICAgICAxMjAgfCAgMTMwIHwgIDExMCB8ICAzNjAgfCAg MTIwLjAwMDAwMDAwMDAwMDAwMDAgfCAgICAgMworIGNvbXBhbnkxIHwgMDctMDgtMjAyMyB8ICAg MTMwIHwgICAgICAgICAgICAgfCAgICAgICAgICAgIHwgICAgICB8ICAgICAgfCAgICAgIHwgICAg ICAgICAgICAgICAgICAgICAgIHwgICAgIDAKKyBjb21wYW55MSB8IDA3LTA5LTIwMjMgfCAgIDEy MCB8ICAgICAgICAgICAgIHwgICAgICAgICAgICB8ICAgICAgfCAgICAgIHwgICAgICB8ICAgICAg ICAgICAgICAgICAgICAgICB8ICAgICAwCisgY29tcGFueTEgfCAwNy0xMC0yMDIzIHwgICAxMzAg fCAgICAgICAgICAgICB8ICAgICAgICAgICAgfCAgICAgIHwgICAgICB8ICAgICAgfCAgICAgICAg ICAgICAgICAgICAgICAgfCAgICAgMAorIGNvbXBhbnkyIHwgMDctMDEtMjAyMyB8ICAgIDUwIHwg ICAgICAgICAgNTAgfCAgICAgICAxNDAwIHwgMjAwMCB8ICAgNTAgfCA0OTUwIHwgMTIzNy41MDAw MDAwMDAwMDAwMDAwIHwgICAgIDQKKyBjb21wYW55MiB8IDA3LTAyLTIwMjMgfCAgMjAwMCB8ICAg ICAgICAgICAgIHwgICAgICAgICAgICB8ICAgICAgfCAgICAgIHwgICAgICB8ICAgICAgICAgICAg ICAgICAgICAgICB8ICAgICAwCisgY29tcGFueTIgfCAwNy0wMy0yMDIzIHwgIDE1MDAgfCAgICAg ICAgICAgICB8ICAgICAgICAgICAgfCAgICAgIHwgICAgICB8ICAgICAgfCAgICAgICAgICAgICAg ICAgICAgICAgfCAgICAgMAorIGNvbXBhbnkyIHwgMDctMDQtMjAyMyB8ICAxNDAwIHwgICAgICAg IDE0MDAgfCAgICAgICAgIDYwIHwgMTUwMCB8ICAgNjAgfCAyOTYwIHwgIDk4Ni42NjY2NjY2NjY2 NjY2NjY3IHwgICAgIDMKKyBjb21wYW55MiB8IDA3LTA1LTIwMjMgfCAgMTUwMCB8ICAgICAgICAg ICAgIHwgICAgICAgICAgICB8ICAgICAgfCAgICAgIHwgICAgICB8ICAgICAgICAgICAgICAgICAg ICAgICB8ICAgICAwCisgY29tcGFueTIgfCAwNy0wNi0yMDIzIHwgICAgNjAgfCAgICAgICAgICA2 MCB8ICAgICAgIDEyMDAgfCAxMzAwIHwgICA2MCB8IDM2NjAgfCAgOTE1LjAwMDAwMDAwMDAwMDAw MDAgfCAgICAgNAorIGNvbXBhbnkyIHwgMDctMDctMjAyMyB8ICAxMTAwIHwgICAgICAgIDExMDAg fCAgICAgICAxMjAwIHwgMTMwMCB8IDExMDAgfCAzNjAwIHwgMTIwMC4wMDAwMDAwMDAwMDAwMDAw IHwgICAgIDMKKyBjb21wYW55MiB8IDA3LTA4LTIwMjMgfCAgMTMwMCB8ICAgICAgICAgICAgIHwg ICAgICAgICAgICB8ICAgICAgfCAgICAgIHwgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8 ICAgICAwCisgY29tcGFueTIgfCAwNy0wOS0yMDIzIHwgIDEyMDAgfCAgICAgICAgICAgICB8ICAg ICAgICAgICAgfCAgICAgIHwgICAgICB8ICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfCAg ICAgMAorIGNvbXBhbnkyIHwgMDctMTAtMjAyMyB8ICAxMzAwIHwgICAgICAgICAgICAgfCAgICAg ICAgICAgIHwgICAgICB8ICAgICAgfCAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHwgICAg IDAKKygyMCByb3dzKQorCistLSBKT0lOIGNhc2UKK0NSRUFURSBURU1QIFRBQkxFIHQxIChpIGlu dCwgdjEgaW50KTsKK0NSRUFURSBURU1QIFRBQkxFIHQyIChqIGludCwgdjIgaW50KTsKK0lOU0VS VCBJTlRPIHQxIFZBTFVFUygxLDEwKTsKK0lOU0VSVCBJTlRPIHQxIFZBTFVFUygxLDExKTsKK0lO U0VSVCBJTlRPIHQxIFZBTFVFUygxLDEyKTsKK0lOU0VSVCBJTlRPIHQyIFZBTFVFUygyLDEwKTsK K0lOU0VSVCBJTlRPIHQyIFZBTFVFUygyLDExKTsKK0lOU0VSVCBJTlRPIHQyIFZBTFVFUygyLDEy KTsKK1NFTEVDVCAqIEZST00gdDEsIHQyIFdIRVJFIHQxLnYxIDw9IDExIEFORCB0Mi52MiA8PSAx MTsKKyBpIHwgdjEgfCBqIHwgdjIgCistLS0rLS0tLSstLS0rLS0tLQorIDEgfCAxMCB8IDIgfCAx MAorIDEgfCAxMCB8IDIgfCAxMQorIDEgfCAxMSB8IDIgfCAxMAorIDEgfCAxMSB8IDIgfCAxMQor KDQgcm93cykKKworU0VMRUNUICosIGNvdW50KCopIE9WRVIgdyBGUk9NIHQxLCB0MgorV0lORE9X IHcgQVMgKAorIFBBUlRJVElPTiBCWSB0MS5pCisgUk9XUyBCRVRXRUVOIENVUlJFTlQgUk9XIEFO RCBVTkJPVU5ERUQgRk9MTE9XSU5HCisgSU5JVElBTAorIFBBVFRFUk4gKEEpCisgREVGSU5FCisg QSBBUyB2MSA8PSAxMSBBTkQgdjIgPD0gMTEKKyk7CisgaSB8IHYxIHwgaiB8IHYyIHwgY291bnQg CistLS0rLS0tLSstLS0rLS0tLSstLS0tLS0tCisgMSB8IDEwIHwgMiB8IDEwIHwgICAgIDEKKyAx IHwgMTAgfCAyIHwgMTEgfCAgICAgMQorIDEgfCAxMCB8IDIgfCAxMiB8ICAgICAwCisgMSB8IDEx IHwgMiB8IDEwIHwgICAgIDEKKyAxIHwgMTEgfCAyIHwgMTEgfCAgICAgMQorIDEgfCAxMSB8IDIg fCAxMiB8ICAgICAwCisgMSB8IDEyIHwgMiB8IDEwIHwgICAgIDAKKyAxIHwgMTIgfCAyIHwgMTEg fCAgICAgMAorIDEgfCAxMiB8IDIgfCAxMiB8ICAgICAwCisoOSByb3dzKQorCistLSBXSVRIIGNh c2UKK1dJVEggd3N0b2NrIEFTICgKKyAgU0VMRUNUICogRlJPTSBzdG9jayBXSEVSRSB0ZGF0ZSA8 ICcyMDIzLTA3LTA4JworKQorU0VMRUNUIHRkYXRlLCBwcmljZSwKK2ZpcnN0X3ZhbHVlKHRkYXRl KSBPVkVSIHcsCitjb3VudCgqKSBPVkVSIHcKKyBGUk9NIHdzdG9jaworIFdJTkRPVyB3IEFTICgK KyBQQVJUSVRJT04gQlkgY29tcGFueQorIE9SREVSIEJZIHRkYXRlCisgUk9XUyBCRVRXRUVOIENV UlJFTlQgUk9XIEFORCBVTkJPVU5ERUQgRk9MTE9XSU5HCisgSU5JVElBTAorIFBBVFRFUk4gKFNU QVJUIFVQKyBET1dOKykKKyBERUZJTkUKKyAgU1RBUlQgQVMgVFJVRSwKKyAgVVAgQVMgcHJpY2Ug PiBQUkVWKHByaWNlKSwKKyAgRE9XTiBBUyBwcmljZSA8IFBSRVYocHJpY2UpCispOworICAgdGRh dGUgICAgfCBwcmljZSB8IGZpcnN0X3ZhbHVlIHwgY291bnQgCistLS0tLS0tLS0tLS0rLS0tLS0t LSstLS0tLS0tLS0tLS0tKy0tLS0tLS0KKyAwNy0wMS0yMDIzIHwgICAxMDAgfCAwNy0wMS0yMDIz ICB8ICAgICA0CisgMDctMDItMjAyMyB8ICAgMjAwIHwgICAgICAgICAgICAgfCAgICAgMAorIDA3 LTAzLTIwMjMgfCAgIDE1MCB8ICAgICAgICAgICAgIHwgICAgIDAKKyAwNy0wNC0yMDIzIHwgICAx NDAgfCAgICAgICAgICAgICB8ICAgICAwCisgMDctMDUtMjAyMyB8ICAgMTUwIHwgICAgICAgICAg ICAgfCAgICAgMAorIDA3LTA2LTIwMjMgfCAgICA5MCB8ICAgICAgICAgICAgIHwgICAgIDAKKyAw Ny0wNy0yMDIzIHwgICAxMTAgfCAgICAgICAgICAgICB8ICAgICAwCisgMDctMDEtMjAyMyB8ICAg IDUwIHwgMDctMDEtMjAyMyAgfCAgICAgNAorIDA3LTAyLTIwMjMgfCAgMjAwMCB8ICAgICAgICAg ICAgIHwgICAgIDAKKyAwNy0wMy0yMDIzIHwgIDE1MDAgfCAgICAgICAgICAgICB8ICAgICAwCisg MDctMDQtMjAyMyB8ICAxNDAwIHwgICAgICAgICAgICAgfCAgICAgMAorIDA3LTA1LTIwMjMgfCAg MTUwMCB8ICAgICAgICAgICAgIHwgICAgIDAKKyAwNy0wNi0yMDIzIHwgICAgNjAgfCAgICAgICAg ICAgICB8ICAgICAwCisgMDctMDctMjAyMyB8ICAxMTAwIHwgICAgICAgICAgICAgfCAgICAgMAor KDE0IHJvd3MpCisKKy0tIFBSRVYgaGFzIG11bHRpcGxlIGNvbHVtbiByZWZlcmVuY2UKK0NSRUFU RSBURU1QIFRBQkxFIHJwcjEgKGlkIElOVEVHRVIsIGkgU0VSSUFMLCBqIElOVEVHRVIpOworSU5T RVJUIElOVE8gcnByMShpZCwgaikgU0VMRUNUIDEsIGcqMiBGUk9NIGdlbmVyYXRlX3Nlcmllcygx LCAxMCkgQVMgZzsKK1NFTEVDVCBpZCwgaSwgaiwgY291bnQoKikgT1ZFUiB3CisgRlJPTSBycHIx CisgV0lORE9XIHcgQVMgKAorIFBBUlRJVElPTiBCWSBpZAorIE9SREVSIEJZIGkKKyBST1dTIEJF VFdFRU4gQ1VSUkVOVCBST1cgQU5EIFVOQk9VTkRFRCBGT0xMT1dJTkcKKyBBRlRFUiBNQVRDSCBT S0lQIFBBU1QgTEFTVCBST1cKKyBJTklUSUFMCisgUEFUVEVSTiAoU1RBUlQgQ09ORCspCisgREVG SU5FCisgIFNUQVJUIEFTIFRSVUUsCisgIENPTkQgQVMgUFJFVihpICsgaiArIDEpIDwgMTAKKyk7 CisgaWQgfCBpICB8IGogIHwgY291bnQgCistLS0tKy0tLS0rLS0tLSstLS0tLS0tCisgIDEgfCAg MSB8ICAyIHwgICAgIDMKKyAgMSB8ICAyIHwgIDQgfCAgICAgMAorICAxIHwgIDMgfCAgNiB8ICAg ICAwCisgIDEgfCAgNCB8ICA4IHwgICAgIDAKKyAgMSB8ICA1IHwgMTAgfCAgICAgMAorICAxIHwg IDYgfCAxMiB8ICAgICAwCisgIDEgfCAgNyB8IDE0IHwgICAgIDAKKyAgMSB8ICA4IHwgMTYgfCAg ICAgMAorICAxIHwgIDkgfCAxOCB8ICAgICAwCisgIDEgfCAxMCB8IDIwIHwgICAgIDAKKygxMCBy b3dzKQorCistLSBTbW9rZSB0ZXN0IGZvciBsYXJnZXIgcGFydGl0aW9ucy4KK1dJVEggcyBBUyAo CisgU0VMRUNUIHYsIGNvdW50KCopIE9WRVIgdyBBUyBjCisgRlJPTSAoU0VMRUNUIGdlbmVyYXRl X3NlcmllcygxLCA1MDAwKSB2KQorIFdJTkRPVyB3IEFTICgKKyAgUk9XUyBCRVRXRUVOIENVUlJF TlQgUk9XIEFORCBVTkJPVU5ERUQgRk9MTE9XSU5HCisgIEFGVEVSIE1BVENIIFNLSVAgUEFTVCBM QVNUIFJPVworICBJTklUSUFMCisgIFBBVFRFUk4gKCByKyApCisgIERFRklORSByIEFTIFRSVUUK KyApCispCistLSBTaG91bGQgYmUgZXhhY3RseSBvbmUgbG9uZyBtYXRjaCBhY3Jvc3MgYWxsIHJv d3MuCitTRUxFQ1QgKiBGUk9NIHMgV0hFUkUgYyA+IDA7CisgdiB8ICBjICAgCistLS0rLS0tLS0t CisgMSB8IDUwMDAKKygxIHJvdykKKworV0lUSCBzIEFTICgKKyBTRUxFQ1QgdiwgY291bnQoKikg T1ZFUiB3IEFTIGMKKyBGUk9NIChTRUxFQ1QgZ2VuZXJhdGVfc2VyaWVzKDEsIDUwMDApIHYpCisg V0lORE9XIHcgQVMgKAorICBST1dTIEJFVFdFRU4gQ1VSUkVOVCBST1cgQU5EIFVOQk9VTkRFRCBG T0xMT1dJTkcKKyAgQUZURVIgTUFUQ0ggU0tJUCBQQVNUIExBU1QgUk9XCisgIElOSVRJQUwKKyAg UEFUVEVSTiAoIHIgKQorICBERUZJTkUgciBBUyBUUlVFCisgKQorKQorLS0gRXZlcnkgcm93IHNo b3VsZCBiZSBpdHMgb3duIG1hdGNoLgorU0VMRUNUIGNvdW50KCopIEZST00gcyBXSEVSRSBjID4g MDsKKyBjb3VudCAKKy0tLS0tLS0KKyAgNTAwMAorKDEgcm93KQorCistLSBWaWV3IGFuZCBwZ19n ZXRfdmlld2RlZiB0ZXN0cy4KK0NSRUFURSBURU1QIFZJRVcgdl93aW5kb3cgQVMKK1NFTEVDVCBj b21wYW55LCB0ZGF0ZSwgcHJpY2UsIGZpcnN0X3ZhbHVlKHByaWNlKSBPVkVSIHcsIGxhc3RfdmFs dWUocHJpY2UpIE9WRVIgdywKKyBudGhfdmFsdWUodGRhdGUsIDIpIE9WRVIgdyBBUyBudGhfc2Vj b25kCisgRlJPTSBzdG9jaworIFdJTkRPVyB3IEFTICgKKyBQQVJUSVRJT04gQlkgY29tcGFueQor IFJPV1MgQkVUV0VFTiBDVVJSRU5UIFJPVyBBTkQgVU5CT1VOREVEIEZPTExPV0lORworIElOSVRJ QUwKKyBQQVRURVJOIChTVEFSVCBVUCsgRE9XTispCisgREVGSU5FCisgIFNUQVJUIEFTIFRSVUUs CisgIFVQIEFTIHByaWNlID4gUFJFVihwcmljZSksCisgIERPV04gQVMgcHJpY2UgPCBQUkVWKHBy aWNlKQorKTsKK1NFTEVDVCAqIEZST00gdl93aW5kb3c7CisgY29tcGFueSAgfCAgIHRkYXRlICAg IHwgcHJpY2UgfCBmaXJzdF92YWx1ZSB8IGxhc3RfdmFsdWUgfCBudGhfc2Vjb25kIAorLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0KKyBjb21wYW55MSB8IDA3LTAxLTIwMjMgfCAgIDEwMCB8ICAgICAgICAgMTAwIHwg ICAgICAgIDE0MCB8IDA3LTAyLTIwMjMKKyBjb21wYW55MSB8IDA3LTAyLTIwMjMgfCAgIDIwMCB8 ICAgICAgICAgICAgIHwgICAgICAgICAgICB8IAorIGNvbXBhbnkxIHwgMDctMDMtMjAyMyB8ICAg MTUwIHwgICAgICAgICAgICAgfCAgICAgICAgICAgIHwgCisgY29tcGFueTEgfCAwNy0wNC0yMDIz IHwgICAxNDAgfCAgICAgICAgICAgICB8ICAgICAgICAgICAgfCAKKyBjb21wYW55MSB8IDA3LTA1 LTIwMjMgfCAgIDE1MCB8ICAgICAgICAgICAgIHwgICAgICAgICAgICB8IAorIGNvbXBhbnkxIHwg MDctMDYtMjAyMyB8ICAgIDkwIHwgICAgICAgICAgOTAgfCAgICAgICAgMTIwIHwgMDctMDctMjAy MworIGNvbXBhbnkxIHwgMDctMDctMjAyMyB8ICAgMTEwIHwgICAgICAgICAgICAgfCAgICAgICAg ICAgIHwgCisgY29tcGFueTEgfCAwNy0wOC0yMDIzIHwgICAxMzAgfCAgICAgICAgICAgICB8ICAg ICAgICAgICAgfCAKKyBjb21wYW55MSB8IDA3LTA5LTIwMjMgfCAgIDEyMCB8ICAgICAgICAgICAg IHwgICAgICAgICAgICB8IAorIGNvbXBhbnkxIHwgMDctMTAtMjAyMyB8ICAgMTMwIHwgICAgICAg ICAgICAgfCAgICAgICAgICAgIHwgCisgY29tcGFueTIgfCAwNy0wMS0yMDIzIHwgICAgNTAgfCAg ICAgICAgICA1MCB8ICAgICAgIDE0MDAgfCAwNy0wMi0yMDIzCisgY29tcGFueTIgfCAwNy0wMi0y MDIzIHwgIDIwMDAgfCAgICAgICAgICAgICB8ICAgICAgICAgICAgfCAKKyBjb21wYW55MiB8IDA3 LTAzLTIwMjMgfCAgMTUwMCB8ICAgICAgICAgICAgIHwgICAgICAgICAgICB8IAorIGNvbXBhbnky IHwgMDctMDQtMjAyMyB8ICAxNDAwIHwgICAgICAgICAgICAgfCAgICAgICAgICAgIHwgCisgY29t cGFueTIgfCAwNy0wNS0yMDIzIHwgIDE1MDAgfCAgICAgICAgICAgICB8ICAgICAgICAgICAgfCAK KyBjb21wYW55MiB8IDA3LTA2LTIwMjMgfCAgICA2MCB8ICAgICAgICAgIDYwIHwgICAgICAgMTIw MCB8IDA3LTA3LTIwMjMKKyBjb21wYW55MiB8IDA3LTA3LTIwMjMgfCAgMTEwMCB8ICAgICAgICAg ICAgIHwgICAgICAgICAgICB8IAorIGNvbXBhbnkyIHwgMDctMDgtMjAyMyB8ICAxMzAwIHwgICAg ICAgICAgICAgfCAgICAgICAgICAgIHwgCisgY29tcGFueTIgfCAwNy0wOS0yMDIzIHwgIDEyMDAg fCAgICAgICAgICAgICB8ICAgICAgICAgICAgfCAKKyBjb21wYW55MiB8IDA3LTEwLTIwMjMgfCAg MTMwMCB8ICAgICAgICAgICAgIHwgICAgICAgICAgICB8IAorKDIwIHJvd3MpCisKK1NFTEVDVCBw Z19nZXRfdmlld2RlZigndl93aW5kb3cnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHBnX2dldF92aWV3ZGVmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIFNFTEVDVCBjb21wYW55LCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICsKKyAgICAgdGRhdGUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKworICAgICBwcmljZSwgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICArCisgICAgIGZpcnN0X3ZhbHVlKHByaWNlKSBPVkVSIHcgQVMgZmlyc3Rf dmFsdWUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKKyAgICAgbGFz dF92YWx1ZShwcmljZSkgT1ZFUiB3IEFTIGxhc3RfdmFsdWUsICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKworICAgICBudGhfdmFsdWUodGRhdGUsIDIpIE9WRVIgdyBB UyBudGhfc2Vjb25kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArCisg ICAgRlJPTSBzdG9jayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKKyAgIFdJTkRPVyB3IEFTIChQQVJUSVRJT04g QlkgY29tcGFueSBST1dTIEJFVFdFRU4gQ1VSUkVOVCBST1cgQU5EIFVOQk9VTkRFRCBGT0xMT1dJ TkcgKworICAgQUZURVIgTUFUQ0ggU0tJUCBQQVNUIExBU1QgUk9XICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArCisgICBJTklUSUFMICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICsKKyAgIFBBVFRFUk4gKHN0YXJ0IHVwKyBkb3duKykgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKworICAgREVGSU5FICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICArCisgICBzdGFydCBBUyB0cnVlLCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKKyAgIHVw IEFTIChwcmljZSA+IHByZXYocHJpY2UpKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKworICAgZG93biBBUyAocHJpY2UgPCBwcmV2KHByaWNl KSkgKTsKKygxIHJvdykKKworLS0KKy0tIEVycm9yIGNhc2VzCistLQorLS0gcm93IHBhdHRlcm4g ZGVmaW5pdGlvbiB2YXJpYWJsZSBuYW1lIG11c3Qgbm90IGFwcGVhciBtb3JlIHRoYW4gb25jZQor U0VMRUNUIGNvbXBhbnksIHRkYXRlLCBwcmljZSwgZmlyc3RfdmFsdWUocHJpY2UpIE9WRVIgdywg bGFzdF92YWx1ZShwcmljZSkgT1ZFUiB3CisgRlJPTSBzdG9jaworIFdJTkRPVyB3IEFTICgKKyBQ QVJUSVRJT04gQlkgY29tcGFueQorIE9SREVSIEJZIHRkYXRlCisgUk9XUyBCRVRXRUVOIENVUlJF TlQgUk9XIEFORCBVTkJPVU5ERUQgRk9MTE9XSU5HCisgSU5JVElBTAorIFBBVFRFUk4gKFNUQVJU IFVQKyBET1dOKykKKyBERUZJTkUKKyAgU1RBUlQgQVMgVFJVRSwKKyAgVVAgQVMgcHJpY2UgPiBQ UkVWKHByaWNlKSwKKyAgRE9XTiBBUyBwcmljZSA8IFBSRVYocHJpY2UpLAorICBVUCBBUyBwcmlj ZSA+IFBSRVYocHJpY2UpCispOworRVJST1I6ICByb3cgcGF0dGVybiBkZWZpbml0aW9uIHZhcmlh YmxlIG5hbWUgInVwIiBhcHBlYXJzIG1vcmUgdGhhbiBvbmNlIGluIERFRklORSBjbGF1c2UKK0xJ TkUgMTE6ICAgVVAgQVMgcHJpY2UgPiBQUkVWKHByaWNlKSwKKyAgICAgICAgICAgXgorLS0gc3Vi cXVlcmllcyBpbiBERUZJTkUgY2xhdXNlIGFyZSBub3Qgc3VwcG9ydGVkCitTRUxFQ1QgY29tcGFu eSwgdGRhdGUsIHByaWNlLCBmaXJzdF92YWx1ZShwcmljZSkgT1ZFUiB3LCBsYXN0X3ZhbHVlKHBy aWNlKSBPVkVSIHcKKyBGUk9NIHN0b2NrCisgV0lORE9XIHcgQVMgKAorIFBBUlRJVElPTiBCWSBj b21wYW55CisgT1JERVIgQlkgdGRhdGUKKyBST1dTIEJFVFdFRU4gQ1VSUkVOVCBST1cgQU5EIFVO Qk9VTkRFRCBGT0xMT1dJTkcKKyBJTklUSUFMCisgUEFUVEVSTiAoU1RBUlQgTE9XUFJJQ0UpCisg REVGSU5FCisgIFNUQVJUIEFTIFRSVUUsCisgIExPV1BSSUNFIEFTIHByaWNlIDwgKFNFTEVDVCAx MDApCispOworRVJST1I6ICBjYW5ub3QgdXNlIHN1YnF1ZXJ5IGluIERFRklORSBleHByZXNzaW9u CitMSU5FIDExOiAgIExPV1BSSUNFIEFTIHByaWNlIDwgKFNFTEVDVCAxMDApCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXgorLS0gYWdncmVnYXRlcyBpbiBERUZJTkUgY2xhdXNlIGFy ZSBub3Qgc3VwcG9ydGVkCitTRUxFQ1QgY29tcGFueSwgdGRhdGUsIHByaWNlLCBmaXJzdF92YWx1 ZShwcmljZSkgT1ZFUiB3LCBsYXN0X3ZhbHVlKHByaWNlKSBPVkVSIHcKKyBGUk9NIHN0b2NrCisg V0lORE9XIHcgQVMgKAorIFBBUlRJVElPTiBCWSBjb21wYW55CisgT1JERVIgQlkgdGRhdGUKKyBS T1dTIEJFVFdFRU4gQ1VSUkVOVCBST1cgQU5EIFVOQk9VTkRFRCBGT0xMT1dJTkcKKyBJTklUSUFM CisgUEFUVEVSTiAoU1RBUlQgTE9XUFJJQ0UpCisgREVGSU5FCisgIFNUQVJUIEFTIFRSVUUsCisg IExPV1BSSUNFIEFTIHByaWNlIDwgY291bnQoKikKKyk7CitFUlJPUjogIGFnZ3JlZ2F0ZSBmdW5j dGlvbnMgYXJlIG5vdCBhbGxvd2VkIGluIERFRklORQorTElORSAxMTogICBMT1dQUklDRSBBUyBw cmljZSA8IGNvdW50KCopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgorLS0gRlJB TUUgbXVzdCBzdGFydCBhdCBjdXJyZW50IHJvdyB3aGVuIHJvdyBwYXR0dGVybiByZWNvZ25pdGlv biBpcyB1c2VkCitTRUxFQ1QgY29tcGFueSwgdGRhdGUsIHByaWNlLCBmaXJzdF92YWx1ZShwcmlj ZSkgT1ZFUiB3LCBsYXN0X3ZhbHVlKHByaWNlKSBPVkVSIHcKKyBGUk9NIHN0b2NrCisgV0lORE9X IHcgQVMgKAorIFBBUlRJVElPTiBCWSBjb21wYW55CisgT1JERVIgQlkgdGRhdGUKKyBST1dTIEJF VFdFRU4gVU5CT1VOREVEIFBSRUNFRElORyBBTkQgVU5CT1VOREVEIEZPTExPV0lORworIElOSVRJ QUwKKyBQQVRURVJOIChTVEFSVCBVUCsgRE9XTispCisgREVGSU5FCisgIFNUQVJUIEFTIFRSVUUs CisgIFVQIEFTIHByaWNlID4gUFJFVihwcmljZSksCisgIERPV04gQVMgcHJpY2UgPCBQUkVWKHBy aWNlKQorKTsKK0VSUk9SOiAgRlJBTUUgbXVzdCBzdGFydCBhdCBjdXJyZW50IHJvdyB3aGVuIHJv dyBwYXR0dGVybiByZWNvZ25pdGlvbiBpcyB1c2VkCistLSBTRUVLIGlzIG5vdCBzdXBwb3J0ZWQK K1NFTEVDVCBjb21wYW55LCB0ZGF0ZSwgcHJpY2UsIGZpcnN0X3ZhbHVlKHByaWNlKSBPVkVSIHcs IGxhc3RfdmFsdWUocHJpY2UpIE9WRVIgdworIEZST00gc3RvY2sKKyBXSU5ET1cgdyBBUyAoCisg UEFSVElUSU9OIEJZIGNvbXBhbnkKKyBPUkRFUiBCWSB0ZGF0ZQorIFJPV1MgQkVUV0VFTiBDVVJS RU5UIFJPVyBBTkQgVU5CT1VOREVEIEZPTExPV0lORworIEFGVEVSIE1BVENIIFNLSVAgVE8gTkVY VCBST1cKKyBTRUVLCisgUEFUVEVSTiAoU1RBUlQgVVArIERPV04rKQorIERFRklORQorICBTVEFS VCBBUyBUUlVFLAorICBVUCBBUyBwcmljZSA+IFBSRVYocHJpY2UpLAorICBET1dOIEFTIHByaWNl IDwgUFJFVihwcmljZSkKKyk7CitFUlJPUjogIFNFRUsgaXMgbm90IHN1cHBvcnRlZAorTElORSA4 OiAgU0VFSworICAgICAgICAgXgorSElOVDogIFVzZSBJTklUSUFMIGluc3RlYWQuCistLSBQUkVW J3MgYXJndW1lbnQgbXVzdCBoYXZlIGF0IGxlYXN0IDEgY29sdW1uIHJlZmVyZW5jZQorU0VMRUNU IGNvbXBhbnksIHRkYXRlLCBwcmljZSwgZmlyc3RfdmFsdWUocHJpY2UpIE9WRVIgdywgbGFzdF92 YWx1ZShwcmljZSkgT1ZFUiB3CisgRlJPTSBzdG9jaworIFdJTkRPVyB3IEFTICgKKyBQQVJUSVRJ T04gQlkgY29tcGFueQorIE9SREVSIEJZIHRkYXRlCisgUk9XUyBCRVRXRUVOIENVUlJFTlQgUk9X IEFORCBVTkJPVU5ERUQgRk9MTE9XSU5HCisgQUZURVIgTUFUQ0ggU0tJUCBUTyBORVhUIFJPVwor IElOSVRJQUwKKyBQQVRURVJOIChTVEFSVCBVUCsgRE9XTispCisgREVGSU5FCisgIFNUQVJUIEFT IFRSVUUsCisgIFVQIEFTIHByaWNlID4gUFJFVigxKSwKKyAgRE9XTiBBUyBwcmljZSA8IFBSRVYo MSkKKyk7CitFUlJPUjogIHJvdyBwYXR0ZXJuIG5hdmlnYXRpb24gb3BlcmF0aW9uJ3MgYXJndW1l bnQgbXVzdCBpbmNsdWRlIGF0IGxlYXN0IG9uZSBjb2x1bW4gcmVmZXJlbmNlCmRpZmYgLS1naXQg YS9zcmMvdGVzdC9yZWdyZXNzL3BhcmFsbGVsX3NjaGVkdWxlIGIvc3JjL3Rlc3QvcmVncmVzcy9w YXJhbGxlbF9zY2hlZHVsZQppbmRleCBmYmZmYzY3YWU2MC4uODA1MTk4MGFiNDMgMTAwNjQ0Ci0t LSBhL3NyYy90ZXN0L3JlZ3Jlc3MvcGFyYWxsZWxfc2NoZWR1bGUKKysrIGIvc3JjL3Rlc3QvcmVn cmVzcy9wYXJhbGxlbF9zY2hlZHVsZQpAQCAtMTAyLDcgKzEwMiw3IEBAIHRlc3Q6IHB1YmxpY2F0 aW9uIHN1YnNjcmlwdGlvbgogIyBBbm90aGVyIGdyb3VwIG9mIHBhcmFsbGVsIHRlc3RzCiAjIHNl bGVjdF92aWV3cyBkZXBlbmRzIG9uIGNyZWF0ZV92aWV3CiAjIC0tLS0tLS0tLS0KLXRlc3Q6IHNl bGVjdF92aWV3cyBwb3J0YWxzX3AyIGZvcmVpZ25fa2V5IGNsdXN0ZXIgZGVwZW5kZW5jeSBndWMg Yml0bWFwb3BzIGNvbWJvY2lkIHRzZWFyY2ggdHNkaWN0cyBmb3JlaWduX2RhdGEgd2luZG93IHht bG1hcCBmdW5jdGlvbmFsX2RlcHMgYWR2aXNvcnlfbG9jayBpbmRpcmVjdF90b2FzdCBlcXVpdmNs YXNzCit0ZXN0OiBzZWxlY3Rfdmlld3MgcG9ydGFsc19wMiBmb3JlaWduX2tleSBjbHVzdGVyIGRl cGVuZGVuY3kgZ3VjIGJpdG1hcG9wcyBjb21ib2NpZCB0c2VhcmNoIHRzZGljdHMgZm9yZWlnbl9k YXRhIHdpbmRvdyB4bWxtYXAgZnVuY3Rpb25hbF9kZXBzIGFkdmlzb3J5X2xvY2sgaW5kaXJlY3Rf dG9hc3QgZXF1aXZjbGFzcyBycHIKIAogIyAtLS0tLS0tLS0tCiAjIEFub3RoZXIgZ3JvdXAgb2Yg cGFyYWxsZWwgdGVzdHMgKEpTT04gcmVsYXRlZCkKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jl c3Mvc3FsL3Jwci5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9ycHIuc3FsCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi40N2U2NzMzNDk5NAotLS0gL2Rldi9udWxsCisr KyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3Jwci5zcWwKQEAgLTAsMCArMSw0ODYgQEAKKy0tCist LSBUZXN0IGZvciByb3cgcGF0dGVybiBkZWZpbml0aW9uIGNsYXVzZQorLS0KKworQ1JFQVRFIFRF TVAgVEFCTEUgc3RvY2sgKAorICAgICAgIGNvbXBhbnkgVEVYVCwKKyAgICAgICB0ZGF0ZSBEQVRF LAorICAgICAgIHByaWNlIElOVEVHRVIKKyk7CitJTlNFUlQgSU5UTyBzdG9jayBWQUxVRVMgKCdj b21wYW55MScsICcyMDIzLTA3LTAxJywgMTAwKTsKK0lOU0VSVCBJTlRPIHN0b2NrIFZBTFVFUyAo J2NvbXBhbnkxJywgJzIwMjMtMDctMDInLCAyMDApOworSU5TRVJUIElOVE8gc3RvY2sgVkFMVUVT ICgnY29tcGFueTEnLCAnMjAyMy0wNy0wMycsIDE1MCk7CitJTlNFUlQgSU5UTyBzdG9jayBWQUxV RVMgKCdjb21wYW55MScsICcyMDIzLTA3LTA0JywgMTQwKTsKK0lOU0VSVCBJTlRPIHN0b2NrIFZB TFVFUyAoJ2NvbXBhbnkxJywgJzIwMjMtMDctMDUnLCAxNTApOworSU5TRVJUIElOVE8gc3RvY2sg VkFMVUVTICgnY29tcGFueTEnLCAnMjAyMy0wNy0wNicsIDkwKTsKK0lOU0VSVCBJTlRPIHN0b2Nr IFZBTFVFUyAoJ2NvbXBhbnkxJywgJzIwMjMtMDctMDcnLCAxMTApOworSU5TRVJUIElOVE8gc3Rv Y2sgVkFMVUVTICgnY29tcGFueTEnLCAnMjAyMy0wNy0wOCcsIDEzMCk7CitJTlNFUlQgSU5UTyBz dG9jayBWQUxVRVMgKCdjb21wYW55MScsICcyMDIzLTA3LTA5JywgMTIwKTsKK0lOU0VSVCBJTlRP IHN0b2NrIFZBTFVFUyAoJ2NvbXBhbnkxJywgJzIwMjMtMDctMTAnLCAxMzApOworSU5TRVJUIElO VE8gc3RvY2sgVkFMVUVTICgnY29tcGFueTInLCAnMjAyMy0wNy0wMScsIDUwKTsKK0lOU0VSVCBJ TlRPIHN0b2NrIFZBTFVFUyAoJ2NvbXBhbnkyJywgJzIwMjMtMDctMDInLCAyMDAwKTsKK0lOU0VS VCBJTlRPIHN0b2NrIFZBTFVFUyAoJ2NvbXBhbnkyJywgJzIwMjMtMDctMDMnLCAxNTAwKTsKK0lO U0VSVCBJTlRPIHN0b2NrIFZBTFVFUyAoJ2NvbXBhbnkyJywgJzIwMjMtMDctMDQnLCAxNDAwKTsK K0lOU0VSVCBJTlRPIHN0b2NrIFZBTFVFUyAoJ2NvbXBhbnkyJywgJzIwMjMtMDctMDUnLCAxNTAw KTsKK0lOU0VSVCBJTlRPIHN0b2NrIFZBTFVFUyAoJ2NvbXBhbnkyJywgJzIwMjMtMDctMDYnLCA2 MCk7CitJTlNFUlQgSU5UTyBzdG9jayBWQUxVRVMgKCdjb21wYW55MicsICcyMDIzLTA3LTA3Jywg MTEwMCk7CitJTlNFUlQgSU5UTyBzdG9jayBWQUxVRVMgKCdjb21wYW55MicsICcyMDIzLTA3LTA4 JywgMTMwMCk7CitJTlNFUlQgSU5UTyBzdG9jayBWQUxVRVMgKCdjb21wYW55MicsICcyMDIzLTA3 LTA5JywgMTIwMCk7CitJTlNFUlQgSU5UTyBzdG9jayBWQUxVRVMgKCdjb21wYW55MicsICcyMDIz LTA3LTEwJywgMTMwMCk7CisKK1NFTEVDVCAqIEZST00gc3RvY2s7CisKKy0tIGJhc2ljIHRlc3Qg dXNpbmcgUFJFVgorU0VMRUNUIGNvbXBhbnksIHRkYXRlLCBwcmljZSwgZmlyc3RfdmFsdWUocHJp Y2UpIE9WRVIgdywgbGFzdF92YWx1ZShwcmljZSkgT1ZFUiB3LAorIG50aF92YWx1ZSh0ZGF0ZSwg MikgT1ZFUiB3IEFTIG50aF9zZWNvbmQKKyBGUk9NIHN0b2NrCisgV0lORE9XIHcgQVMgKAorIFBB UlRJVElPTiBCWSBjb21wYW55CisgUk9XUyBCRVRXRUVOIENVUlJFTlQgUk9XIEFORCBVTkJPVU5E RUQgRk9MTE9XSU5HCisgSU5JVElBTAorIFBBVFRFUk4gKFNUQVJUIFVQKyBET1dOKykKKyBERUZJ TkUKKyAgU1RBUlQgQVMgVFJVRSwKKyAgVVAgQVMgcHJpY2UgPiBQUkVWKHByaWNlKSwKKyAgRE9X TiBBUyBwcmljZSA8IFBSRVYocHJpY2UpCispOworCistLSBiYXNpYyB0ZXN0IHVzaW5nIFBSRVYu IFVQIGFwcGVhcnMgdHdpY2UKK1NFTEVDVCBjb21wYW55LCB0ZGF0ZSwgcHJpY2UsIGZpcnN0X3Zh bHVlKHByaWNlKSBPVkVSIHcsIGxhc3RfdmFsdWUocHJpY2UpIE9WRVIgdywKKyBudGhfdmFsdWUo dGRhdGUsIDIpIE9WRVIgdyBBUyBudGhfc2Vjb25kCisgRlJPTSBzdG9jaworIFdJTkRPVyB3IEFT ICgKKyBQQVJUSVRJT04gQlkgY29tcGFueQorIFJPV1MgQkVUV0VFTiBDVVJSRU5UIFJPVyBBTkQg VU5CT1VOREVEIEZPTExPV0lORworIElOSVRJQUwKKyBQQVRURVJOIChTVEFSVCBVUCsgRE9XTisg VVArKQorIERFRklORQorICBTVEFSVCBBUyBUUlVFLAorICBVUCBBUyBwcmljZSA+IFBSRVYocHJp Y2UpLAorICBET1dOIEFTIHByaWNlIDwgUFJFVihwcmljZSkKKyk7CisKKy0tIGJhc2ljIHRlc3Qg dXNpbmcgUFJFVi4gVXNlICcqJworU0VMRUNUIGNvbXBhbnksIHRkYXRlLCBwcmljZSwgZmlyc3Rf dmFsdWUocHJpY2UpIE9WRVIgdywgbGFzdF92YWx1ZShwcmljZSkgT1ZFUiB3LAorIG50aF92YWx1 ZSh0ZGF0ZSwgMikgT1ZFUiB3IEFTIG50aF9zZWNvbmQKKyBGUk9NIHN0b2NrCisgV0lORE9XIHcg QVMgKAorIFBBUlRJVElPTiBCWSBjb21wYW55CisgUk9XUyBCRVRXRUVOIENVUlJFTlQgUk9XIEFO RCBVTkJPVU5ERUQgRk9MTE9XSU5HCisgSU5JVElBTAorIFBBVFRFUk4gKFNUQVJUIFVQKiBET1dO KykKKyBERUZJTkUKKyAgU1RBUlQgQVMgVFJVRSwKKyAgVVAgQVMgcHJpY2UgPiBQUkVWKHByaWNl KSwKKyAgRE9XTiBBUyBwcmljZSA8IFBSRVYocHJpY2UpCispOworCistLSBiYXNpYyB0ZXN0IHdp dGggbm9uZSBncmVlZHkgcGF0dGVybgorU0VMRUNUIGNvbXBhbnksIHRkYXRlLCBwcmljZSwgY291 bnQoKikgT1ZFUiB3CisgRlJPTSBzdG9jaworIFdJTkRPVyB3IEFTICgKKyBQQVJUSVRJT04gQlkg Y29tcGFueQorIFJPV1MgQkVUV0VFTiBDVVJSRU5UIFJPVyBBTkQgVU5CT1VOREVEIEZPTExPV0lO RworIElOSVRJQUwKKyBQQVRURVJOIChBIEEgQSkKKyBERUZJTkUKKyAgQSBBUyBwcmljZSA+PSAx NDAgQU5EIHByaWNlIDw9IDE1MAorKTsKKworLS0gbGFzdF92YWx1ZSgpIHNob3VsZCByZW1haW4g Y29uc2lzdGVudAorU0VMRUNUIGNvbXBhbnksIHRkYXRlLCBwcmljZSwgbGFzdF92YWx1ZShwcmlj ZSkgT1ZFUiB3CisgRlJPTSBzdG9jaworIFdJTkRPVyB3IEFTICgKKyBQQVJUSVRJT04gQlkgY29t cGFueQorIE9SREVSIEJZIHRkYXRlCisgUk9XUyBCRVRXRUVOIENVUlJFTlQgUk9XIEFORCBVTkJP VU5ERUQgRk9MTE9XSU5HCisgSU5JVElBTAorIFBBVFRFUk4gKFNUQVJUIFVQKyBET1dOKykKKyBE RUZJTkUKKyAgU1RBUlQgQVMgVFJVRSwKKyAgVVAgQVMgcHJpY2UgPiBQUkVWKHByaWNlKSwKKyAg RE9XTiBBUyBwcmljZSA8IFBSRVYocHJpY2UpCispOworCistLSBvbWl0ICJTVEFSVCIgaW4gREVG SU5FIGJ1dCBpdCBpcyBvayBiZWNhdXNlICJTVEFSVCBBUyBUUlVFIiBpcworLS0gaW1wbGljaXRs eSBkZWZpbmVkLiBwZXIgc3BlYy4KK1NFTEVDVCBjb21wYW55LCB0ZGF0ZSwgcHJpY2UsIGZpcnN0 X3ZhbHVlKHByaWNlKSBPVkVSIHcsIGxhc3RfdmFsdWUocHJpY2UpIE9WRVIgdywKKyBudGhfdmFs dWUodGRhdGUsIDIpIE9WRVIgdyBBUyBudGhfc2Vjb25kCisgRlJPTSBzdG9jaworIFdJTkRPVyB3 IEFTICgKKyBQQVJUSVRJT04gQlkgY29tcGFueQorIFJPV1MgQkVUV0VFTiBDVVJSRU5UIFJPVyBB TkQgVU5CT1VOREVEIEZPTExPV0lORworIElOSVRJQUwKKyBQQVRURVJOIChTVEFSVCBVUCsgRE9X TispCisgREVGSU5FCisgIFVQIEFTIHByaWNlID4gUFJFVihwcmljZSksCisgIERPV04gQVMgcHJp Y2UgPCBQUkVWKHByaWNlKQorKTsKKworLS0gdGhlIGZpcnN0IHJvdyBzdGFydCB3aXRoIGxlc3Mg dGhhbiBvciBlcXVhbCB0byAxMDAKK1NFTEVDVCBjb21wYW55LCB0ZGF0ZSwgcHJpY2UsIGZpcnN0 X3ZhbHVlKHByaWNlKSBPVkVSIHcsIGxhc3RfdmFsdWUocHJpY2UpIE9WRVIgdworIEZST00gc3Rv Y2sKKyBXSU5ET1cgdyBBUyAoCisgUEFSVElUSU9OIEJZIGNvbXBhbnkKKyBST1dTIEJFVFdFRU4g Q1VSUkVOVCBST1cgQU5EIFVOQk9VTkRFRCBGT0xMT1dJTkcKKyBJTklUSUFMCisgUEFUVEVSTiAo TE9XUFJJQ0UgVVArIERPV04rKQorIERFRklORQorICBMT1dQUklDRSBBUyBwcmljZSA8PSAxMDAs CisgIFVQIEFTIHByaWNlID4gUFJFVihwcmljZSksCisgIERPV04gQVMgcHJpY2UgPCBQUkVWKHBy aWNlKQorKTsKKworLS0gc2Vjb25kIHJvdyByYWlzZXMgMTIwJQorU0VMRUNUIGNvbXBhbnksIHRk YXRlLCBwcmljZSwgZmlyc3RfdmFsdWUocHJpY2UpIE9WRVIgdywgbGFzdF92YWx1ZShwcmljZSkg T1ZFUiB3CisgRlJPTSBzdG9jaworIFdJTkRPVyB3IEFTICgKKyBQQVJUSVRJT04gQlkgY29tcGFu eQorIFJPV1MgQkVUV0VFTiBDVVJSRU5UIFJPVyBBTkQgVU5CT1VOREVEIEZPTExPV0lORworIElO SVRJQUwKKyBQQVRURVJOIChMT1dQUklDRSBVUCsgRE9XTispCisgREVGSU5FCisgIExPV1BSSUNF IEFTIHByaWNlIDw9IDEwMCwKKyAgVVAgQVMgcHJpY2UgPiBQUkVWKHByaWNlKSAqIDEuMiwKKyAg RE9XTiBBUyBwcmljZSA8IFBSRVYocHJpY2UpCispOworCistLSB1c2luZyBORVhUCitTRUxFQ1Qg Y29tcGFueSwgdGRhdGUsIHByaWNlLCBmaXJzdF92YWx1ZShwcmljZSkgT1ZFUiB3LCBsYXN0X3Zh bHVlKHByaWNlKSBPVkVSIHcKKyBGUk9NIHN0b2NrCisgV0lORE9XIHcgQVMgKAorIFBBUlRJVElP TiBCWSBjb21wYW55CisgUk9XUyBCRVRXRUVOIENVUlJFTlQgUk9XIEFORCBVTkJPVU5ERUQgRk9M TE9XSU5HCisgSU5JVElBTAorIFBBVFRFUk4gKFNUQVJUIFVQRE9XTikKKyBERUZJTkUKKyAgU1RB UlQgQVMgVFJVRSwKKyAgVVBET1dOIEFTIHByaWNlID4gUFJFVihwcmljZSkgQU5EIHByaWNlID4g TkVYVChwcmljZSkKKyk7CisKKy0tIHVzaW5nIEFGVEVSIE1BVENIIFNLSVAgVE8gTkVYVCBST1cK K1NFTEVDVCBjb21wYW55LCB0ZGF0ZSwgcHJpY2UsIGZpcnN0X3ZhbHVlKHByaWNlKSBPVkVSIHcs IGxhc3RfdmFsdWUocHJpY2UpIE9WRVIgdworIEZST00gc3RvY2sKKyBXSU5ET1cgdyBBUyAoCisg UEFSVElUSU9OIEJZIGNvbXBhbnkKKyBST1dTIEJFVFdFRU4gQ1VSUkVOVCBST1cgQU5EIFVOQk9V TkRFRCBGT0xMT1dJTkcKKyBBRlRFUiBNQVRDSCBTS0lQIFRPIE5FWFQgUk9XCisgSU5JVElBTAor IFBBVFRFUk4gKFNUQVJUIFVQRE9XTikKKyBERUZJTkUKKyAgU1RBUlQgQVMgVFJVRSwKKyAgVVBE T1dOIEFTIHByaWNlID4gUFJFVihwcmljZSkgQU5EIHByaWNlID4gTkVYVChwcmljZSkKKyk7CisK Ky0tIG1hdGNoIGV2ZXJ5dGhpbmcKKworU0VMRUNUIGNvbXBhbnksIHRkYXRlLCBwcmljZSwgZmly c3RfdmFsdWUocHJpY2UpIE9WRVIgdywgbGFzdF92YWx1ZShwcmljZSkgT1ZFUiB3CisgRlJPTSBz dG9jaworIFdJTkRPVyB3IEFTICgKKyBQQVJUSVRJT04gQlkgY29tcGFueQorIE9SREVSIEJZIHRk YXRlCisgUk9XUyBCRVRXRUVOIENVUlJFTlQgUk9XIEFORCBVTkJPVU5ERUQgRk9MTE9XSU5HCisg QUZURVIgTUFUQ0ggU0tJUCBQQVNUIExBU1QgUk9XCisgSU5JVElBTAorIFBBVFRFUk4gKEErKQor IERFRklORQorICBBIEFTIFRSVUUKKyk7CisKKy0tIGJhY2t0cmFja2luZyB3aXRoIHJlY2xhc3Np ZmljYXRpb24gb2Ygcm93cworLS0gdXNpbmcgQUZURVIgTUFUQ0ggU0tJUCBQQVNUIExBU1QgUk9X CitTRUxFQ1QgY29tcGFueSwgdGRhdGUsIHByaWNlLCBmaXJzdF92YWx1ZSh0ZGF0ZSkgT1ZFUiB3 LCBsYXN0X3ZhbHVlKHRkYXRlKSBPVkVSIHcKKyBGUk9NIHN0b2NrCisgV0lORE9XIHcgQVMgKAor IFBBUlRJVElPTiBCWSBjb21wYW55CisgT1JERVIgQlkgdGRhdGUKKyBST1dTIEJFVFdFRU4gQ1VS UkVOVCBST1cgQU5EIFVOQk9VTkRFRCBGT0xMT1dJTkcKKyBBRlRFUiBNQVRDSCBTS0lQIFBBU1Qg TEFTVCBST1cKKyBJTklUSUFMCisgUEFUVEVSTiAoQSsgQispCisgREVGSU5FCisgIEEgQVMgcHJp Y2UgPiAxMDAsCisgIEIgQVMgcHJpY2UgPiAxMDAKKyk7CisKKy0tIGJhY2t0cmFja2luZyB3aXRo IHJlY2xhc3NpZmljYXRpb24gb2Ygcm93cworLS0gdXNpbmcgQUZURVIgTUFUQ0ggU0tJUCBUTyBO RVhUIFJPVworU0VMRUNUIGNvbXBhbnksIHRkYXRlLCBwcmljZSwgZmlyc3RfdmFsdWUodGRhdGUp IE9WRVIgdywgbGFzdF92YWx1ZSh0ZGF0ZSkgT1ZFUiB3CisgRlJPTSBzdG9jaworIFdJTkRPVyB3 IEFTICgKKyBQQVJUSVRJT04gQlkgY29tcGFueQorIE9SREVSIEJZIHRkYXRlCisgUk9XUyBCRVRX RUVOIENVUlJFTlQgUk9XIEFORCBVTkJPVU5ERUQgRk9MTE9XSU5HCisgQUZURVIgTUFUQ0ggU0tJ UCBUTyBORVhUIFJPVworIElOSVRJQUwKKyBQQVRURVJOIChBKyBCKykKKyBERUZJTkUKKyAgQSBB UyBwcmljZSA+IDEwMCwKKyAgQiBBUyBwcmljZSA+IDEwMAorKTsKKworLS0gUk9XUyBCRVRXRUVO IENVUlJFTlQgUk9XIEFORCBvZmZzZXQgRk9MTE9XSU5HCitTRUxFQ1QgY29tcGFueSwgdGRhdGUs IHByaWNlLCBmaXJzdF92YWx1ZSh0ZGF0ZSkgT1ZFUiB3LCBsYXN0X3ZhbHVlKHRkYXRlKSBPVkVS IHcsCisgY291bnQoKikgT1ZFUiB3CisgRlJPTSBzdG9jaworIFdJTkRPVyB3IEFTICgKKyBQQVJU SVRJT04gQlkgY29tcGFueQorIE9SREVSIEJZIHRkYXRlCisgUk9XUyBCRVRXRUVOIENVUlJFTlQg Uk9XIEFORCAyIEZPTExPV0lORworIEFGVEVSIE1BVENIIFNLSVAgUEFTVCBMQVNUIFJPVworIFBB VFRFUk4gKFNUQVJUIFVQKyBET1dOKykKKyBERUZJTkUKKyAgU1RBUlQgQVMgVFJVRSwKKyAgVVAg QVMgcHJpY2UgPiBQUkVWKHByaWNlKSwKKyAgRE9XTiBBUyBwcmljZSA8IFBSRVYocHJpY2UpCisp OworCistLQorLS0gQWdncmVnYXRlcworLS0KKworLS0gdXNpbmcgQUZURVIgTUFUQ0ggU0tJUCBQ QVNUIExBU1QgUk9XCitTRUxFQ1QgY29tcGFueSwgdGRhdGUsIHByaWNlLAorIGZpcnN0X3ZhbHVl KHByaWNlKSBPVkVSIHcsCisgbGFzdF92YWx1ZShwcmljZSkgT1ZFUiB3LAorIG1heChwcmljZSkg T1ZFUiB3LAorIG1pbihwcmljZSkgT1ZFUiB3LAorIHN1bShwcmljZSkgT1ZFUiB3LAorIGF2Zyhw cmljZSkgT1ZFUiB3LAorIGNvdW50KHByaWNlKSBPVkVSIHcKK0ZST00gc3RvY2sKK1dJTkRPVyB3 IEFTICgKK1BBUlRJVElPTiBCWSBjb21wYW55CitST1dTIEJFVFdFRU4gQ1VSUkVOVCBST1cgQU5E IFVOQk9VTkRFRCBGT0xMT1dJTkcKK0FGVEVSIE1BVENIIFNLSVAgUEFTVCBMQVNUIFJPVworSU5J VElBTAorUEFUVEVSTiAoU1RBUlQgVVArIERPV04rKQorREVGSU5FCitTVEFSVCBBUyBUUlVFLAor VVAgQVMgcHJpY2UgPiBQUkVWKHByaWNlKSwKK0RPV04gQVMgcHJpY2UgPCBQUkVWKHByaWNlKQor KTsKKworLS0gdXNpbmcgQUZURVIgTUFUQ0ggU0tJUCBUTyBORVhUIFJPVworU0VMRUNUIGNvbXBh bnksIHRkYXRlLCBwcmljZSwKKyBmaXJzdF92YWx1ZShwcmljZSkgT1ZFUiB3LAorIGxhc3RfdmFs dWUocHJpY2UpIE9WRVIgdywKKyBtYXgocHJpY2UpIE9WRVIgdywKKyBtaW4ocHJpY2UpIE9WRVIg dywKKyBzdW0ocHJpY2UpIE9WRVIgdywKKyBhdmcocHJpY2UpIE9WRVIgdywKKyBjb3VudChwcmlj ZSkgT1ZFUiB3CitGUk9NIHN0b2NrCitXSU5ET1cgdyBBUyAoCitQQVJUSVRJT04gQlkgY29tcGFu eQorUk9XUyBCRVRXRUVOIENVUlJFTlQgUk9XIEFORCBVTkJPVU5ERUQgRk9MTE9XSU5HCitBRlRF UiBNQVRDSCBTS0lQIFRPIE5FWFQgUk9XCitJTklUSUFMCitQQVRURVJOIChTVEFSVCBVUCsgRE9X TispCitERUZJTkUKK1NUQVJUIEFTIFRSVUUsCitVUCBBUyBwcmljZSA+IFBSRVYocHJpY2UpLAor RE9XTiBBUyBwcmljZSA8IFBSRVYocHJpY2UpCispOworCistLSBKT0lOIGNhc2UKK0NSRUFURSBU RU1QIFRBQkxFIHQxIChpIGludCwgdjEgaW50KTsKK0NSRUFURSBURU1QIFRBQkxFIHQyIChqIGlu dCwgdjIgaW50KTsKK0lOU0VSVCBJTlRPIHQxIFZBTFVFUygxLDEwKTsKK0lOU0VSVCBJTlRPIHQx IFZBTFVFUygxLDExKTsKK0lOU0VSVCBJTlRPIHQxIFZBTFVFUygxLDEyKTsKK0lOU0VSVCBJTlRP IHQyIFZBTFVFUygyLDEwKTsKK0lOU0VSVCBJTlRPIHQyIFZBTFVFUygyLDExKTsKK0lOU0VSVCBJ TlRPIHQyIFZBTFVFUygyLDEyKTsKKworU0VMRUNUICogRlJPTSB0MSwgdDIgV0hFUkUgdDEudjEg PD0gMTEgQU5EIHQyLnYyIDw9IDExOworCitTRUxFQ1QgKiwgY291bnQoKikgT1ZFUiB3IEZST00g dDEsIHQyCitXSU5ET1cgdyBBUyAoCisgUEFSVElUSU9OIEJZIHQxLmkKKyBST1dTIEJFVFdFRU4g Q1VSUkVOVCBST1cgQU5EIFVOQk9VTkRFRCBGT0xMT1dJTkcKKyBJTklUSUFMCisgUEFUVEVSTiAo QSkKKyBERUZJTkUKKyBBIEFTIHYxIDw9IDExIEFORCB2MiA8PSAxMQorKTsKKworLS0gV0lUSCBj YXNlCitXSVRIIHdzdG9jayBBUyAoCisgIFNFTEVDVCAqIEZST00gc3RvY2sgV0hFUkUgdGRhdGUg PCAnMjAyMy0wNy0wOCcKKykKK1NFTEVDVCB0ZGF0ZSwgcHJpY2UsCitmaXJzdF92YWx1ZSh0ZGF0 ZSkgT1ZFUiB3LAorY291bnQoKikgT1ZFUiB3CisgRlJPTSB3c3RvY2sKKyBXSU5ET1cgdyBBUyAo CisgUEFSVElUSU9OIEJZIGNvbXBhbnkKKyBPUkRFUiBCWSB0ZGF0ZQorIFJPV1MgQkVUV0VFTiBD VVJSRU5UIFJPVyBBTkQgVU5CT1VOREVEIEZPTExPV0lORworIElOSVRJQUwKKyBQQVRURVJOIChT VEFSVCBVUCsgRE9XTispCisgREVGSU5FCisgIFNUQVJUIEFTIFRSVUUsCisgIFVQIEFTIHByaWNl ID4gUFJFVihwcmljZSksCisgIERPV04gQVMgcHJpY2UgPCBQUkVWKHByaWNlKQorKTsKKworLS0g UFJFViBoYXMgbXVsdGlwbGUgY29sdW1uIHJlZmVyZW5jZQorQ1JFQVRFIFRFTVAgVEFCTEUgcnBy MSAoaWQgSU5URUdFUiwgaSBTRVJJQUwsIGogSU5URUdFUik7CitJTlNFUlQgSU5UTyBycHIxKGlk LCBqKSBTRUxFQ1QgMSwgZyoyIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDEwKSBBUyBnOworU0VM RUNUIGlkLCBpLCBqLCBjb3VudCgqKSBPVkVSIHcKKyBGUk9NIHJwcjEKKyBXSU5ET1cgdyBBUyAo CisgUEFSVElUSU9OIEJZIGlkCisgT1JERVIgQlkgaQorIFJPV1MgQkVUV0VFTiBDVVJSRU5UIFJP VyBBTkQgVU5CT1VOREVEIEZPTExPV0lORworIEFGVEVSIE1BVENIIFNLSVAgUEFTVCBMQVNUIFJP VworIElOSVRJQUwKKyBQQVRURVJOIChTVEFSVCBDT05EKykKKyBERUZJTkUKKyAgU1RBUlQgQVMg VFJVRSwKKyAgQ09ORCBBUyBQUkVWKGkgKyBqICsgMSkgPCAxMAorKTsKKworLS0gU21va2UgdGVz dCBmb3IgbGFyZ2VyIHBhcnRpdGlvbnMuCitXSVRIIHMgQVMgKAorIFNFTEVDVCB2LCBjb3VudCgq KSBPVkVSIHcgQVMgYworIEZST00gKFNFTEVDVCBnZW5lcmF0ZV9zZXJpZXMoMSwgNTAwMCkgdikK KyBXSU5ET1cgdyBBUyAoCisgIFJPV1MgQkVUV0VFTiBDVVJSRU5UIFJPVyBBTkQgVU5CT1VOREVE IEZPTExPV0lORworICBBRlRFUiBNQVRDSCBTS0lQIFBBU1QgTEFTVCBST1cKKyAgSU5JVElBTAor ICBQQVRURVJOICggcisgKQorICBERUZJTkUgciBBUyBUUlVFCisgKQorKQorLS0gU2hvdWxkIGJl IGV4YWN0bHkgb25lIGxvbmcgbWF0Y2ggYWNyb3NzIGFsbCByb3dzLgorU0VMRUNUICogRlJPTSBz IFdIRVJFIGMgPiAwOworCitXSVRIIHMgQVMgKAorIFNFTEVDVCB2LCBjb3VudCgqKSBPVkVSIHcg QVMgYworIEZST00gKFNFTEVDVCBnZW5lcmF0ZV9zZXJpZXMoMSwgNTAwMCkgdikKKyBXSU5ET1cg dyBBUyAoCisgIFJPV1MgQkVUV0VFTiBDVVJSRU5UIFJPVyBBTkQgVU5CT1VOREVEIEZPTExPV0lO RworICBBRlRFUiBNQVRDSCBTS0lQIFBBU1QgTEFTVCBST1cKKyAgSU5JVElBTAorICBQQVRURVJO ICggciApCisgIERFRklORSByIEFTIFRSVUUKKyApCispCistLSBFdmVyeSByb3cgc2hvdWxkIGJl IGl0cyBvd24gbWF0Y2guCitTRUxFQ1QgY291bnQoKikgRlJPTSBzIFdIRVJFIGMgPiAwOworCist LSBWaWV3IGFuZCBwZ19nZXRfdmlld2RlZiB0ZXN0cy4KK0NSRUFURSBURU1QIFZJRVcgdl93aW5k b3cgQVMKK1NFTEVDVCBjb21wYW55LCB0ZGF0ZSwgcHJpY2UsIGZpcnN0X3ZhbHVlKHByaWNlKSBP VkVSIHcsIGxhc3RfdmFsdWUocHJpY2UpIE9WRVIgdywKKyBudGhfdmFsdWUodGRhdGUsIDIpIE9W RVIgdyBBUyBudGhfc2Vjb25kCisgRlJPTSBzdG9jaworIFdJTkRPVyB3IEFTICgKKyBQQVJUSVRJ T04gQlkgY29tcGFueQorIFJPV1MgQkVUV0VFTiBDVVJSRU5UIFJPVyBBTkQgVU5CT1VOREVEIEZP TExPV0lORworIElOSVRJQUwKKyBQQVRURVJOIChTVEFSVCBVUCsgRE9XTispCisgREVGSU5FCisg IFNUQVJUIEFTIFRSVUUsCisgIFVQIEFTIHByaWNlID4gUFJFVihwcmljZSksCisgIERPV04gQVMg cHJpY2UgPCBQUkVWKHByaWNlKQorKTsKKworU0VMRUNUICogRlJPTSB2X3dpbmRvdzsKK1NFTEVD VCBwZ19nZXRfdmlld2RlZigndl93aW5kb3cnKTsKKworLS0KKy0tIEVycm9yIGNhc2VzCistLQor CistLSByb3cgcGF0dGVybiBkZWZpbml0aW9uIHZhcmlhYmxlIG5hbWUgbXVzdCBub3QgYXBwZWFy IG1vcmUgdGhhbiBvbmNlCitTRUxFQ1QgY29tcGFueSwgdGRhdGUsIHByaWNlLCBmaXJzdF92YWx1 ZShwcmljZSkgT1ZFUiB3LCBsYXN0X3ZhbHVlKHByaWNlKSBPVkVSIHcKKyBGUk9NIHN0b2NrCisg V0lORE9XIHcgQVMgKAorIFBBUlRJVElPTiBCWSBjb21wYW55CisgT1JERVIgQlkgdGRhdGUKKyBS T1dTIEJFVFdFRU4gQ1VSUkVOVCBST1cgQU5EIFVOQk9VTkRFRCBGT0xMT1dJTkcKKyBJTklUSUFM CisgUEFUVEVSTiAoU1RBUlQgVVArIERPV04rKQorIERFRklORQorICBTVEFSVCBBUyBUUlVFLAor ICBVUCBBUyBwcmljZSA+IFBSRVYocHJpY2UpLAorICBET1dOIEFTIHByaWNlIDwgUFJFVihwcmlj ZSksCisgIFVQIEFTIHByaWNlID4gUFJFVihwcmljZSkKKyk7CisKKy0tIHN1YnF1ZXJpZXMgaW4g REVGSU5FIGNsYXVzZSBhcmUgbm90IHN1cHBvcnRlZAorU0VMRUNUIGNvbXBhbnksIHRkYXRlLCBw cmljZSwgZmlyc3RfdmFsdWUocHJpY2UpIE9WRVIgdywgbGFzdF92YWx1ZShwcmljZSkgT1ZFUiB3 CisgRlJPTSBzdG9jaworIFdJTkRPVyB3IEFTICgKKyBQQVJUSVRJT04gQlkgY29tcGFueQorIE9S REVSIEJZIHRkYXRlCisgUk9XUyBCRVRXRUVOIENVUlJFTlQgUk9XIEFORCBVTkJPVU5ERUQgRk9M TE9XSU5HCisgSU5JVElBTAorIFBBVFRFUk4gKFNUQVJUIExPV1BSSUNFKQorIERFRklORQorICBT VEFSVCBBUyBUUlVFLAorICBMT1dQUklDRSBBUyBwcmljZSA8IChTRUxFQ1QgMTAwKQorKTsKKwor LS0gYWdncmVnYXRlcyBpbiBERUZJTkUgY2xhdXNlIGFyZSBub3Qgc3VwcG9ydGVkCitTRUxFQ1Qg Y29tcGFueSwgdGRhdGUsIHByaWNlLCBmaXJzdF92YWx1ZShwcmljZSkgT1ZFUiB3LCBsYXN0X3Zh bHVlKHByaWNlKSBPVkVSIHcKKyBGUk9NIHN0b2NrCisgV0lORE9XIHcgQVMgKAorIFBBUlRJVElP TiBCWSBjb21wYW55CisgT1JERVIgQlkgdGRhdGUKKyBST1dTIEJFVFdFRU4gQ1VSUkVOVCBST1cg QU5EIFVOQk9VTkRFRCBGT0xMT1dJTkcKKyBJTklUSUFMCisgUEFUVEVSTiAoU1RBUlQgTE9XUFJJ Q0UpCisgREVGSU5FCisgIFNUQVJUIEFTIFRSVUUsCisgIExPV1BSSUNFIEFTIHByaWNlIDwgY291 bnQoKikKKyk7CisKKy0tIEZSQU1FIG11c3Qgc3RhcnQgYXQgY3VycmVudCByb3cgd2hlbiByb3cg cGF0dHRlcm4gcmVjb2duaXRpb24gaXMgdXNlZAorU0VMRUNUIGNvbXBhbnksIHRkYXRlLCBwcmlj ZSwgZmlyc3RfdmFsdWUocHJpY2UpIE9WRVIgdywgbGFzdF92YWx1ZShwcmljZSkgT1ZFUiB3Cisg RlJPTSBzdG9jaworIFdJTkRPVyB3IEFTICgKKyBQQVJUSVRJT04gQlkgY29tcGFueQorIE9SREVS IEJZIHRkYXRlCisgUk9XUyBCRVRXRUVOIFVOQk9VTkRFRCBQUkVDRURJTkcgQU5EIFVOQk9VTkRF RCBGT0xMT1dJTkcKKyBJTklUSUFMCisgUEFUVEVSTiAoU1RBUlQgVVArIERPV04rKQorIERFRklO RQorICBTVEFSVCBBUyBUUlVFLAorICBVUCBBUyBwcmljZSA+IFBSRVYocHJpY2UpLAorICBET1dO IEFTIHByaWNlIDwgUFJFVihwcmljZSkKKyk7CisKKy0tIFNFRUsgaXMgbm90IHN1cHBvcnRlZAor U0VMRUNUIGNvbXBhbnksIHRkYXRlLCBwcmljZSwgZmlyc3RfdmFsdWUocHJpY2UpIE9WRVIgdywg bGFzdF92YWx1ZShwcmljZSkgT1ZFUiB3CisgRlJPTSBzdG9jaworIFdJTkRPVyB3IEFTICgKKyBQ QVJUSVRJT04gQlkgY29tcGFueQorIE9SREVSIEJZIHRkYXRlCisgUk9XUyBCRVRXRUVOIENVUlJF TlQgUk9XIEFORCBVTkJPVU5ERUQgRk9MTE9XSU5HCisgQUZURVIgTUFUQ0ggU0tJUCBUTyBORVhU IFJPVworIFNFRUsKKyBQQVRURVJOIChTVEFSVCBVUCsgRE9XTispCisgREVGSU5FCisgIFNUQVJU IEFTIFRSVUUsCisgIFVQIEFTIHByaWNlID4gUFJFVihwcmljZSksCisgIERPV04gQVMgcHJpY2Ug PCBQUkVWKHByaWNlKQorKTsKKworLS0gUFJFVidzIGFyZ3VtZW50IG11c3QgaGF2ZSBhdCBsZWFz dCAxIGNvbHVtbiByZWZlcmVuY2UKK1NFTEVDVCBjb21wYW55LCB0ZGF0ZSwgcHJpY2UsIGZpcnN0 X3ZhbHVlKHByaWNlKSBPVkVSIHcsIGxhc3RfdmFsdWUocHJpY2UpIE9WRVIgdworIEZST00gc3Rv Y2sKKyBXSU5ET1cgdyBBUyAoCisgUEFSVElUSU9OIEJZIGNvbXBhbnkKKyBPUkRFUiBCWSB0ZGF0 ZQorIFJPV1MgQkVUV0VFTiBDVVJSRU5UIFJPVyBBTkQgVU5CT1VOREVEIEZPTExPV0lORworIEFG VEVSIE1BVENIIFNLSVAgVE8gTkVYVCBST1cKKyBJTklUSUFMCisgUEFUVEVSTiAoU1RBUlQgVVAr IERPV04rKQorIERFRklORQorICBTVEFSVCBBUyBUUlVFLAorICBVUCBBUyBwcmljZSA+IFBSRVYo MSksCisgIERPV04gQVMgcHJpY2UgPCBQUkVWKDEpCispOwotLSAKMi40My4wCgo= ----Next_Part(Wed_Sep_24_19_35_23_2025_264)-- Content-Type: Application/Octet-Stream Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="v33-0008-Row-pattern-recognition-patch-typedefs.list.patch" RnJvbSAwMmI2NTQ1NjYyZTYzNTUwMjM4ZTJhZjJhYTQ0YWY3ZjU1OTM2NjIxIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUYXRzdW8gSXNoaWkgPGlzaGlpQHBvc3RncmVzcWwub3JnPgpE YXRlOiBXZWQsIDI0IFNlcCAyMDI1IDE5OjE4OjM3ICswOTAwClN1YmplY3Q6IFtQQVRDSCB2MzMg OC84XSBSb3cgcGF0dGVybiByZWNvZ25pdGlvbiBwYXRjaCAodHlwZWRlZnMubGlzdCkuCgotLS0K IHNyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IHwgNiArKysrKysKIDEgZmlsZSBjaGFu Z2VkLCA2IGluc2VydGlvbnMoKykKCmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlw ZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4IDNjODBk NDliNjdlLi41MGM5YTFiNTEzZSAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVk ZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTE3NDQs NiArMTc0NCw3IEBAIE5hbWVkTFdMb2NrVHJhbmNoZVJlcXVlc3QKIE5hbWVkVHVwbGVzdG9yZVNj YW4KIE5hbWVkVHVwbGVzdG9yZVNjYW5TdGF0ZQogTmFtZXNwYWNlSW5mbworTmF2aWdhdGlvbklu Zm8KIE5lc3RMb29wCiBOZXN0TG9vcFBhcmFtCiBOZXN0TG9vcFN0YXRlCkBAIC0yNDA3LDYgKzI0 MDgsOCBAQCBSSV9Db21wYXJlS2V5CiBSSV9Db25zdHJhaW50SW5mbwogUklfUXVlcnlIYXNoRW50 cnkKIFJJX1F1ZXJ5S2V5CitSUENvbW1vblN5bnRheAorUlBTa2lwVG8KIFJURUtpbmQKIFJURVBl cm1pc3Npb25JbmZvCiBSV0NvbmZsaWN0CkBAIC0yNzc5LDYgKzI3ODIsNyBAQCBTaW1wbGVTdHJp bmdMaXN0CiBTaW1wbGVTdHJpbmdMaXN0Q2VsbAogU2luZ2xlQm91bmRTb3J0SXRlbQogU2l6ZQor U2tpcENvbnRleHQKIFNraXBQYWdlcwogU2tpcFN1cHBvcnQKIFNraXBTdXBwb3J0SW5jRGVjCkBA IC0yODczLDYgKzI4NzcsNyBAQCBTdHJlYW1TdG9wUmVhc29uCiBTdHJpbmcKIFN0cmluZ0luZm8K IFN0cmluZ0luZm9EYXRhCitTdHJpbmdTZXQKIFN0cmlwbnVsbFN0YXRlCiBTdWJMaW5rCiBTdWJM aW5rVHlwZQpAQCAtMzIwNyw2ICszMjEyLDcgQEAgVmFyU3RyaW5nCiBWYXJTdHJpbmdTb3J0U3Vw cG9ydAogVmFyaWFibGUKIFZhcmlhYmxlQXNzaWduSG9vaworVmFyaWFibGVQb3MKIFZhcmlhYmxl U2V0S2luZAogVmFyaWFibGVTZXRTdG10CiBWYXJpYWJsZVNob3dTdG10Ci0tIAoyLjQzLjAKCg== ----Next_Part(Wed_Sep_24_19_35_23_2025_264)----