From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.ffmpeg.org (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTPS id 508A54C427 for ; Fri, 5 Sep 2025 12:06:12 +0000 (UTC) Authentication-Results: ffbox; dkim=fail (body hash mismatch (got b'LnC6X5eK01puRQxdIKtd6A+b6ksmYTo9Hvl8UBm/D4U=', expected b'hllcpRSWWpLXykOliSmdmnuc6yiM2hP8D3LyUEn279c=')) header.d=ffmpeg.org header.i=@ffmpeg.org header.a=rsa-sha256 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ffmpeg.org; i=@ffmpeg.org; q=dns/txt; s=mail; t=1757073969; h=content-type : mime-version : to : message-id : reply-to : subject : list-id : list-archive : list-archive : list-help : list-owner : list-post : list-subscribe : list-unsubscribe : from : cc : content-transfer-encoding : from; bh=LnC6X5eK01puRQxdIKtd6A+b6ksmYTo9Hvl8UBm/D4U=; b=qt7mEmlG7e6RRPGvAKfc9GKZWhWR+JnhaWMknPQH0aCVIlGYY3I5hdi2BoVcHqNH6nMFY KAnEWN20cC4+ZTGX4lEXDHNloRehoJXPqSDbwnO77WHyZur40LA9N76xs5krWTDqUF78XBL TUd5pwkqp41tUrN2SuVbPMPSMsx1uUfZfXfuMLxwjtaOk9j8a2tnbqDM9l8pvxDEn+7DNjt 9lnG+3qNpJZIosOpBwZkWmAjsAuh3Wsf/YRQ7fQuHHM7//ZVc16aEwUpYR/VF9XXX4vTBTN C60GA4GFd9YNWzLVGpROtN06F5C11GutktJMr4/NYDjM9Pn3jjdbr9aaz1IQ== Received: from [172.19.0.4] (unknown [172.19.0.4]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTP id 0215568E738; Fri, 5 Sep 2025 15:06:09 +0300 (EEST) ARC-Seal: i=1; cv=none; a=rsa-sha256; d=ffmpeg.org; s=arc; t=1757073960; b=lKszBFjJeluuzEoshklXoJtiDf8oM+YHAHso7MHZGoQ47KSFW4+h3MuaCMmky7ofGdDE1 gF7sssb3cFrsis9clIFdFweUkJsToFsNwQ7AMA/AZuCORsLEfXl2+wlEtw+EgLCl4TvaFlG W2jrxElGeRH7QmPEVxmtxwu/tCdm4BUZiNCM6VCGw78IEZliWSttq8R+73q1/TxqIN971vj PB/KqBewlRtXkiIDGEOn/8CKg5RuW92gMFjgRAF2IsiFUlw+4NUTmZOMAGloTDhlEaCDlVc pzWZc3TH3Nb38owIDt05ls02S0++0wEDS6azSYk8jHyNi1gdTw7+N1fFjePQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=ffmpeg.org; s=arc; t=1757073960; h=from : sender : reply-to : subject : date : message-id : to : cc : mime-version : content-type : content-transfer-encoding : content-id : content-description : resent-date : resent-from : resent-sender : resent-to : resent-cc : resent-message-id : in-reply-to : references : list-id : list-help : list-unsubscribe : list-subscribe : list-post : list-owner : list-archive; bh=LnC6X5eK01puRQxdIKtd6A+b6ksmYTo9Hvl8UBm/D4U=; b=qrHE9a2CUVmYcDGZeddh2ZeXX61KtoizwC+dTJeThAUMo6sUhEJ7wXckkLYhtEJQRUVYg lAuXI3NtpCCz+EqT4BgHIYWwyXTxaOQwIuSMwZgYj9imFch5s8Q8wRPlhZVj9ZROHe4tbzh 8yPfXNDdIiBVTUOYjuoG2mWyid5a3H769YmNTyr6+z2pO+96zortdzg9pq63Wnb3rN4rOEA Fj1bq9G+mfE/seMdwRZTka4Rs3dMP7PcZ1rUIIiZb6CCwnl0k1NUS2yCa/zNAoBS8gze8D/ AEtQZbtGg/pjedHyM6h2O0djl8u7jztYfJZZgBYve5gTiUlilBSwWJJwHjmQ== ARC-Authentication-Results: i=1; ffmpeg.org; dkim=pass header.d=ffmpeg.org header.i=@ffmpeg.org; arc=none; dmarc=none Authentication-Results: ffmpeg.org; dkim=pass header.d=ffmpeg.org header.i=@ffmpeg.org; arc=none (Message is not ARC signed); dmarc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ffmpeg.org; i=@ffmpeg.org; q=dns/txt; s=mail; t=1756910588; h=content-type : mime-version : content-transfer-encoding : from : to : reply-to : subject : from; bh=hllcpRSWWpLXykOliSmdmnuc6yiM2hP8D3LyUEn279c=; b=Q29BUe/+rmSaHh0H+dGIdzZ/frh6fDjiYLJcsM02fFksbk0NG+4ubbeMbHI0+Uheuq+bF vWStswo9WKPLX2tjvlYHIobjKBphVqgxkhhnGhzvHKoVH6a+hHm/GVOByT6Z8yy0phZ+nas I24r8qItB/S3adibgbi4YCUXUzqz+dhYiSYR6ksxoxPs9AB8Ta2NTlQgxJPXs6SbwX7tlff W22FHr1MHT+IWG36tHcEdglquh/SJypjhCQ7/9JV2mRU1SCWwMdUHhBYhQgMjG5GrtbYKLG NeZxPFUN9efQJqdkV7CazSZ+weWFPk1BDjH5ms4tR7ovc8DCQSZOVUFTlfBA== Received: from 5d8f51c41678 (code.ffmpeg.org [188.245.149.3]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTPS id AB40D68D7DE for ; Wed, 3 Sep 2025 17:43:07 +0300 (EEST) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 To: ffmpeg-devel@ffmpeg.org Message-ID: <175691058908.25.12192413182319126055@463a07221176> X-MailFrom: code@ffmpeg.org X-Mailman-Rule-Hits: max-size X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; header-match-ffmpeg-devel.ffmpeg.org-0; header-match-ffmpeg-devel.ffmpeg.org-1; header-match-ffmpeg-devel.ffmpeg.org-2; header-match-ffmpeg-devel.ffmpeg.org-3; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; news-moderation; no-subject; digests; suspicious-header Message-ID-Hash: 5N2EO2QVMGCSNVTMKAATIPKZ4ISBYVVX X-Message-ID-Hash: 5N2EO2QVMGCSNVTMKAATIPKZ4ISBYVVX X-Mailman-Approved-At: Fri, 05 Sep 2025 12:05:51 +0000 X-Mailman-Version: 3.3.10 Precedence: list Reply-To: FFmpeg development discussions and patches Subject: [FFmpeg-devel] [PATCH] Changing-vulkan-file-directory (PR #20417) List-Id: FFmpeg development discussions and patches Archived-At: Archived-At: List-Archive: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: From: Jamaika1 via ffmpeg-devel Cc: Jamaika1 Content-Transfer-Encoding: base64 Archived-At: List-Archive: List-Post: UFIgIzIwNDE3IG9wZW5lZCBieSBKYW1haWthMQpVUkw6IGh0dHBzOi8vY29kZS5mZm1wZWcub3Jn L0ZGbXBlZy9GRm1wZWcvcHVsbHMvMjA0MTcKUGF0Y2ggVVJMOiBodHRwczovL2NvZGUuZmZtcGVn Lm9yZy9GRm1wZWcvRkZtcGVnL3B1bGxzLzIwNDE3LnBhdGNoCgpUZXN0aW5nIHZ1bGthbiBpbiBt c3lzMiB1Y3J0IGdjYy9taW5ndy4KCgpGcm9tIDU1MDFjYjQ0MzUxZGRlNTdkOGFkOTQxMmYzMTA2 ZDNkYTNmMWM5NjggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCkZyb206IEphbWFpa2ExIDxsdWth c3pjejE4QHdwLnBsPgpEYXRlOiBXZWQsIDMgU2VwIDIwMjUgMTI6NDE6NTMgKzAwMDAKU3ViamVj dDogW1BBVENIIDAwMS8xMThdIENoYW5naW5nIHZ1bGthbiBmaWxlIGRpcmVjdG9yeQoKU2lnbmVk LW9mZi1ieTogSmFtYWlrYTEgPGx1a2FzemN6MThAd3AucGw+Ci0tLQogbGliYXZmaWx0ZXIvdmZf YXZnYmx1cl92dWxrYW4uYyB8IDI1OSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQog MSBmaWxlIGNoYW5nZWQsIDI1OSBkZWxldGlvbnMoLSkKIGRlbGV0ZSBtb2RlIDEwMDY0NCBsaWJh dmZpbHRlci92Zl9hdmdibHVyX3Z1bGthbi5jCgpkaWZmIC0tZ2l0IGEvbGliYXZmaWx0ZXIvdmZf YXZnYmx1cl92dWxrYW4uYyBiL2xpYmF2ZmlsdGVyL3ZmX2F2Z2JsdXJfdnVsa2FuLmMKZGVsZXRl ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1NjI3OGRkNzguLjAwMDAwMDAwMDAKLS0tIGEvbGli YXZmaWx0ZXIvdmZfYXZnYmx1cl92dWxrYW4uYworKysgL2Rldi9udWxsCkBAIC0xLDI1OSArMCww IEBACi0vKgotICogQ29weXJpZ2h0IChjKSBMeW5uZQotICoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0 IG9mIEZGbXBlZy4KLSAqCi0gKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp c3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMi4xIG9mIHRoZSBM aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIEZG bXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAot ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy cmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm b3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCBG Rm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24s IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAt MTMwMSBVU0EKLSAqLwotCi0jaW5jbHVkZSAibGliYXZ1dGlsL3JhbmRvbV9zZWVkLmgiCi0jaW5j bHVkZSAibGliYXZ1dGlsL3Z1bGthbl9zcGlydi5oIgotI2luY2x1ZGUgImxpYmF2dXRpbC9vcHQu aCIKLSNpbmNsdWRlICJ2dWxrYW5fZmlsdGVyLmgiCi0KLSNpbmNsdWRlICJmaWx0ZXJzLmgiCi0j aW5jbHVkZSAidmlkZW8uaCIKLQotdHlwZWRlZiBzdHJ1Y3QgQXZnQmx1clZ1bGthbkNvbnRleHQg ewotICAgIEZGVnVsa2FuQ29udGV4dCB2a2N0eDsKLQotICAgIGludCBpbml0aWFsaXplZDsKLSAg ICBGRlZrRXhlY1Bvb2wgZTsKLSAgICBBVlZ1bGthbkRldmljZVF1ZXVlRmFtaWx5ICpxZjsKLSAg ICBGRlZ1bGthblNoYWRlciBzaGQ7Ci0KLSAgICAvKiBQdXNoIGNvbnN0YW50cyAvIG9wdGlvbnMg Ki8KLSAgICBzdHJ1Y3QgewotICAgICAgICBmbG9hdCBmaWx0ZXJfbm9ybVs0XTsKLSAgICAgICAg aW50MzJfdCBmaWx0ZXJfbGVuWzJdOwotICAgIH0gb3B0czsKLQotICAgIGludCBzaXplX3g7Ci0g ICAgaW50IHNpemVfeTsKLSAgICBpbnQgcGxhbmVzOwotfSBBdmdCbHVyVnVsa2FuQ29udGV4dDsK LQotc3RhdGljIGNvbnN0IGNoYXIgYmx1cl9rZXJuZWxbXSA9IHsKLSAgICBDKDAsIHZvaWQgZGlz dG9ydChjb25zdCBpdmVjMiBwb3MsIGNvbnN0IGludCBpZHgpICAgICAgICAgICAgICAgICAgICAg ICAgICkKLSAgICBDKDAsIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKLSAgICBDKDEsICAgICB2ZWM0IHN1bSA9IHZl YzQoMCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKLSAg ICBDKDEsICAgICBmb3IgKGludCB5ID0gLWZpbHRlcl9sZW4ueTsgeSA8PSBmaWx0ZXJfbGVuLnk7 IHkrKykgICAgICAgICAgICAgICkKLSAgICBDKDEsICAgICAgICBmb3IgKGludCB4ID0gLWZpbHRl cl9sZW4ueDsgeCA8PSBmaWx0ZXJfbGVuLng7IHgrKykgICAgICAgICAgICkKLSAgICBDKDIsICAg ICAgICAgICAgc3VtICs9IGltYWdlTG9hZChpbnB1dF9pbWdbaWR4XSwgcG9zICsgaXZlYzIoeCwg eSkpOyAgICAgICkKLSAgICBDKDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKLSAgICBDKDEsICAgICBpbWFnZVN0 b3JlKG91dHB1dF9pbWdbaWR4XSwgcG9zLCBzdW0gKiBmaWx0ZXJfbm9ybSk7ICAgICAgICAgICAg ICkKLSAgICBDKDAsIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICkKLX07Ci0KLXN0YXRpYyBhdl9jb2xkIGludCBpbml0 X2ZpbHRlcihBVkZpbHRlckNvbnRleHQgKmN0eCwgQVZGcmFtZSAqaW4pCi17Ci0gICAgaW50IGVy cjsKLSAgICB1aW50OF90ICpzcHZfZGF0YTsKLSAgICBzaXplX3Qgc3B2X2xlbjsKLSAgICB2b2lk ICpzcHZfb3BhcXVlID0gTlVMTDsKLSAgICBBdmdCbHVyVnVsa2FuQ29udGV4dCAqcyA9IGN0eC0+ cHJpdjsKLSAgICBGRlZ1bGthbkNvbnRleHQgKnZrY3R4ID0gJnMtPnZrY3R4OwotICAgIGNvbnN0 IGludCBwbGFuZXMgPSBhdl9waXhfZm10X2NvdW50X3BsYW5lcyhzLT52a2N0eC5vdXRwdXRfZm9y bWF0KTsKLSAgICBGRlZ1bGthblNoYWRlciAqc2hkOwotICAgIEZGVmtTUElSVkNvbXBpbGVyICpz cHY7Ci0gICAgRkZWdWxrYW5EZXNjcmlwdG9yU2V0QmluZGluZyAqZGVzYzsKLQotICAgIHNwdiA9 IGZmX3ZrX3NwaXJ2X2luaXQoKTsKLSAgICBpZiAoIXNwdikgewotICAgICAgICBhdl9sb2coY3R4 LCBBVl9MT0dfRVJST1IsICJVbmFibGUgdG8gaW5pdGlhbGl6ZSBTUElSLVYgY29tcGlsZXIhXG4i KTsKLSAgICAgICAgcmV0dXJuIEFWRVJST1JfRVhURVJOQUw7Ci0gICAgfQotCi0gICAgcy0+cWYg PSBmZl92a19xZl9maW5kKHZrY3R4LCBWS19RVUVVRV9DT01QVVRFX0JJVCwgMCk7Ci0gICAgaWYg KCFzLT5xZikgewotICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJEZXZpY2UgaGFz IG5vIGNvbXB1dGUgcXVldWVzXG4iKTsKLSAgICAgICAgZXJyID0gQVZFUlJPUihFTk9UU1VQKTsK LSAgICAgICAgZ290byBmYWlsOwotICAgIH0KLQotICAgIFJFVChmZl92a19leGVjX3Bvb2xfaW5p dCh2a2N0eCwgcy0+cWYsICZzLT5lLCBzLT5xZi0+bnVtKjQsIDAsIDAsIDAsIE5VTEwpKTsKLSAg ICBSRVQoZmZfdmtfc2hhZGVyX2luaXQodmtjdHgsICZzLT5zaGQsICJhdmdibHVyIiwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgVktfU0hBREVSX1NUQUdFX0NPTVBVVEVfQklULAotICAgICAg ICAgICAgICAgICAgICAgICAgICBOVUxMLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAz MiwgMSwgMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgMCkpOwotICAgIHNoZCA9ICZzLT5z aGQ7Ci0KLSAgICBkZXNjID0gKEZGVnVsa2FuRGVzY3JpcHRvclNldEJpbmRpbmcgW10pIHsKLSAg ICAgICAgewotICAgICAgICAgICAgLm5hbWUgICAgICAgPSAiaW5wdXRfaW1nIiwKLSAgICAgICAg ICAgIC50eXBlICAgICAgID0gVktfREVTQ1JJUFRPUl9UWVBFX1NUT1JBR0VfSU1BR0UsCi0gICAg ICAgICAgICAubWVtX2xheW91dCA9IGZmX3ZrX3NoYWRlcl9yZXBfZm10KHMtPnZrY3R4LmlucHV0 X2Zvcm1hdCwgRkZfVktfUkVQX0ZMT0FUKSwKLSAgICAgICAgICAgIC5tZW1fcXVhbGkgID0gInJl YWRvbmx5IiwKLSAgICAgICAgICAgIC5kaW1lbnNpb25zID0gMiwKLSAgICAgICAgICAgIC5lbGVt cyAgICAgID0gcGxhbmVzLAotICAgICAgICAgICAgLnN0YWdlcyAgICAgPSBWS19TSEFERVJfU1RB R0VfQ09NUFVURV9CSVQsCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgIC5uYW1l ICAgICAgID0gIm91dHB1dF9pbWciLAotICAgICAgICAgICAgLnR5cGUgICAgICAgPSBWS19ERVND UklQVE9SX1RZUEVfU1RPUkFHRV9JTUFHRSwKLSAgICAgICAgICAgIC5tZW1fbGF5b3V0ID0gZmZf dmtfc2hhZGVyX3JlcF9mbXQocy0+dmtjdHgub3V0cHV0X2Zvcm1hdCwgRkZfVktfUkVQX0ZMT0FU KSwKLSAgICAgICAgICAgIC5tZW1fcXVhbGkgID0gIndyaXRlb25seSIsCi0gICAgICAgICAgICAu ZGltZW5zaW9ucyA9IDIsCi0gICAgICAgICAgICAuZWxlbXMgICAgICA9IHBsYW5lcywKLSAgICAg ICAgICAgIC5zdGFnZXMgICAgID0gVktfU0hBREVSX1NUQUdFX0NPTVBVVEVfQklULAotICAgICAg ICB9LAotICAgIH07Ci0KLSAgICBSRVQoZmZfdmtfc2hhZGVyX2FkZF9kZXNjcmlwdG9yX3NldCh2 a2N0eCwgc2hkLCBkZXNjLCAyLCAwLCAwKSk7Ci0KLSAgICBHTFNMQygwLCBsYXlvdXQocHVzaF9j b25zdGFudCwgc3RkNDMwKSB1bmlmb3JtIHB1c2hDb25zdGFudHMgeyAgICAgICAgKTsKLSAgICBH TFNMQygxLCAgICB2ZWM0IGZpbHRlcl9ub3JtOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKTsKLSAgICBHTFNMQygxLCAgICBpdmVjMiBmaWx0ZXJfbGVuOyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBHTFNMQygwLCB9OyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsK LSAgICBHTFNMQygwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKTsKLQotICAgIGZmX3ZrX3NoYWRlcl9hZGRfcHVzaF9jb25zdCgm cy0+c2hkLCAwLCBzaXplb2Yocy0+b3B0cyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFZLX1NIQURFUl9TVEFHRV9DT01QVVRFX0JJVCk7Ci0KLSAgICBHTFNMRCggICBibHVyX2tl cm5lbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsK LSAgICBHTFNMQygwLCB2b2lkIG1haW4oKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKTsKLSAgICBHTFNMQygwLCB7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBHTFNMQygxLCAg ICAgaXZlYzIgc2l6ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKTsKLSAgICBHTFNMQygxLCAgICAgdmVjNCByZXM7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBHTFNMQygxLCAgICAgY29uc3QgaXZlYzIg cG9zID0gaXZlYzIoZ2xfR2xvYmFsSW52b2NhdGlvbklELnh5KTsgICAgICAgKTsKLSAgICBmb3Ig KGludCBpID0gMDsgaSA8IHBsYW5lczsgaSsrKSB7Ci0gICAgICAgIEdMU0xDKDAsICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAg ICAgIEdMU0xGKDEsICBzaXplID0gaW1hZ2VTaXplKG91dHB1dF9pbWdbJWldKTsgICAgICAgICAg ICAgICAgICAgICAsaSk7Ci0gICAgICAgIEdMU0xDKDEsICBpZiAoIUlTX1dJVEhJTihwb3MsIHNp emUpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgIEdMU0xDKDIsICAg ICAgcmV0dXJuOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7 Ci0gICAgICAgIGlmIChzLT5wbGFuZXMgJiAoMSA8PCBpKSkgewotICAgICAgICAgICAgR0xTTEYo MSwgZGlzdG9ydChwb3MsICVpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLGkp OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgR0xTTEYoMSwgcmVzID0gaW1hZ2VMb2Fk KGlucHV0X2ltZ1slaV0sIHBvcyk7ICAgICAgICAgICAgICAgLGkpOwotICAgICAgICAgICAgR0xT TEYoMSwgaW1hZ2VTdG9yZShvdXRwdXRfaW1nWyVpXSwgcG9zLCByZXMpOyAgICAgICAgICAgICAg LGkpOwotICAgICAgICB9Ci0gICAgfQotICAgIEdMU0xDKDAsIH0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotCi0gICAgUkVUKHNw di0+Y29tcGlsZV9zaGFkZXIodmtjdHgsIHNwdiwgJnMtPnNoZCwgJnNwdl9kYXRhLCAmc3B2X2xl biwgIm1haW4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzcHZfb3BhcXVlKSk7Ci0g ICAgUkVUKGZmX3ZrX3NoYWRlcl9saW5rKHZrY3R4LCAmcy0+c2hkLCBzcHZfZGF0YSwgc3B2X2xl biwgIm1haW4iKSk7Ci0KLSAgICBSRVQoZmZfdmtfc2hhZGVyX3JlZ2lzdGVyX2V4ZWModmtjdHgs ICZzLT5lLCAmcy0+c2hkKSk7Ci0KLSAgICBzLT5pbml0aWFsaXplZCA9IDE7Ci0gICAgcy0+b3B0 cy5maWx0ZXJfbGVuWzBdID0gcy0+c2l6ZV94IC0gMTsKLSAgICBzLT5vcHRzLmZpbHRlcl9sZW5b MV0gPSBzLT5zaXplX3kgLSAxOwotCi0gICAgcy0+b3B0cy5maWx0ZXJfbm9ybVswXSA9IHMtPm9w dHMuZmlsdGVyX2xlblswXSoyICsgMTsKLSAgICBzLT5vcHRzLmZpbHRlcl9ub3JtWzBdID0gMS4w LyhzLT5vcHRzLmZpbHRlcl9ub3JtWzBdKnMtPm9wdHMuZmlsdGVyX25vcm1bMF0pOwotICAgIHMt Pm9wdHMuZmlsdGVyX25vcm1bMV0gPSBzLT5vcHRzLmZpbHRlcl9ub3JtWzBdOwotICAgIHMtPm9w dHMuZmlsdGVyX25vcm1bMl0gPSBzLT5vcHRzLmZpbHRlcl9ub3JtWzBdOwotICAgIHMtPm9wdHMu ZmlsdGVyX25vcm1bM10gPSBzLT5vcHRzLmZpbHRlcl9ub3JtWzBdOwotCi1mYWlsOgotICAgIGlm IChzcHZfb3BhcXVlKQotICAgICAgICBzcHYtPmZyZWVfc2hhZGVyKHNwdiwgJnNwdl9vcGFxdWUp OwotICAgIGlmIChzcHYpCi0gICAgICAgIHNwdi0+dW5pbml0KCZzcHYpOwotCi0gICAgcmV0dXJu IGVycjsKLX0KLQotc3RhdGljIGludCBhdmdibHVyX3Z1bGthbl9maWx0ZXJfZnJhbWUoQVZGaWx0 ZXJMaW5rICpsaW5rLCBBVkZyYW1lICppbikKLXsKLSAgICBpbnQgZXJyOwotICAgIEFWRnJhbWUg Km91dCA9IE5VTEw7Ci0gICAgQVZGaWx0ZXJDb250ZXh0ICpjdHggPSBsaW5rLT5kc3Q7Ci0gICAg QXZnQmx1clZ1bGthbkNvbnRleHQgKnMgPSBjdHgtPnByaXY7Ci0gICAgQVZGaWx0ZXJMaW5rICpv dXRsaW5rID0gY3R4LT5vdXRwdXRzWzBdOwotCi0gICAgb3V0ID0gZmZfZ2V0X3ZpZGVvX2J1ZmZl cihvdXRsaW5rLCBvdXRsaW5rLT53LCBvdXRsaW5rLT5oKTsKLSAgICBpZiAoIW91dCkgewotICAg ICAgICBlcnIgPSBBVkVSUk9SKEVOT01FTSk7Ci0gICAgICAgIGdvdG8gZmFpbDsKLSAgICB9Ci0K LSAgICBpZiAoIXMtPmluaXRpYWxpemVkKQotICAgICAgICBSRVQoaW5pdF9maWx0ZXIoY3R4LCBp bikpOwotCi0gICAgUkVUKGZmX3ZrX2ZpbHRlcl9wcm9jZXNzX3NpbXBsZSgmcy0+dmtjdHgsICZz LT5lLCAmcy0+c2hkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0LCBp biwgVktfTlVMTF9IQU5ETEUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm cy0+b3B0cywgc2l6ZW9mKHMtPm9wdHMpKSk7Ci0KLSAgICBlcnIgPSBhdl9mcmFtZV9jb3B5X3By b3BzKG91dCwgaW4pOwotICAgIGlmIChlcnIgPCAwKQotICAgICAgICBnb3RvIGZhaWw7Ci0KLSAg ICBhdl9mcmFtZV9mcmVlKCZpbik7Ci0KLSAgICByZXR1cm4gZmZfZmlsdGVyX2ZyYW1lKG91dGxp bmssIG91dCk7Ci0KLWZhaWw6Ci0gICAgYXZfZnJhbWVfZnJlZSgmaW4pOwotICAgIGF2X2ZyYW1l X2ZyZWUoJm91dCk7Ci0gICAgcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIHZvaWQgYXZnYmx1cl92 dWxrYW5fdW5pbml0KEFWRmlsdGVyQ29udGV4dCAqYXZjdHgpCi17Ci0gICAgQXZnQmx1clZ1bGth bkNvbnRleHQgKnMgPSBhdmN0eC0+cHJpdjsKLSAgICBGRlZ1bGthbkNvbnRleHQgKnZrY3R4ID0g JnMtPnZrY3R4OwotCi0gICAgZmZfdmtfZXhlY19wb29sX2ZyZWUodmtjdHgsICZzLT5lKTsKLSAg ICBmZl92a19zaGFkZXJfZnJlZSh2a2N0eCwgJnMtPnNoZCk7Ci0KLSAgICBmZl92a191bmluaXQo JnMtPnZrY3R4KTsKLQotICAgIHMtPmluaXRpYWxpemVkID0gMDsKLX0KLQotI2RlZmluZSBPRkZT RVQoeCkgb2Zmc2V0b2YoQXZnQmx1clZ1bGthbkNvbnRleHQsIHgpCi0jZGVmaW5lIEZMQUdTIChB Vl9PUFRfRkxBR19GSUxURVJJTkdfUEFSQU0gfCBBVl9PUFRfRkxBR19WSURFT19QQVJBTSkKLXN0 YXRpYyBjb25zdCBBVk9wdGlvbiBhdmdibHVyX3Z1bGthbl9vcHRpb25zW10gPSB7Ci0gICAgeyAi c2l6ZVgiLCAgIlNldCBob3Jpem9udGFsIHJhZGl1cyIsIE9GRlNFVChzaXplX3gpLCBBVl9PUFRf VFlQRV9JTlQsIHsgLmk2NCA9IDMgfSwgMSwgMzIsIC5mbGFncyA9IEZMQUdTIH0sCi0gICAgeyAi c2l6ZVkiLCAgIlNldCB2ZXJ0aWNhbCByYWRpdXMiLCBPRkZTRVQoc2l6ZV95KSwgQVZfT1BUX1RZ UEVfSU5ULCB7IC5pNjQgPSAzIH0sIDEsIDMyLCAuZmxhZ3MgPSBGTEFHUyB9LAotICAgIHsgInBs YW5lcyIsICJTZXQgcGxhbmVzIHRvIGZpbHRlciAoYml0bWFzaykiLCBPRkZTRVQocGxhbmVzKSwg QVZfT1BUX1RZUEVfSU5ULCB7Lmk2NCA9IDB4Rn0sIDAsIDB4RiwgLmZsYWdzID0gRkxBR1MgfSwK LSAgICB7IE5VTEwgfSwKLX07Ci0KLUFWRklMVEVSX0RFRklORV9DTEFTUyhhdmdibHVyX3Z1bGth bik7Ci0KLXN0YXRpYyBjb25zdCBBVkZpbHRlclBhZCBhdmdibHVyX3Z1bGthbl9pbnB1dHNbXSA9 IHsKLSAgICB7Ci0gICAgICAgIC5uYW1lICAgICAgICAgPSAiZGVmYXVsdCIsCi0gICAgICAgIC50 eXBlICAgICAgICAgPSBBVk1FRElBX1RZUEVfVklERU8sCi0gICAgICAgIC5maWx0ZXJfZnJhbWUg PSAmYXZnYmx1cl92dWxrYW5fZmlsdGVyX2ZyYW1lLAotICAgICAgICAuY29uZmlnX3Byb3BzID0g JmZmX3ZrX2ZpbHRlcl9jb25maWdfaW5wdXQsCi0gICAgfSwKLX07Ci0KLXN0YXRpYyBjb25zdCBB VkZpbHRlclBhZCBhdmdibHVyX3Z1bGthbl9vdXRwdXRzW10gPSB7Ci0gICAgewotICAgICAgICAu bmFtZSA9ICJkZWZhdWx0IiwKLSAgICAgICAgLnR5cGUgPSBBVk1FRElBX1RZUEVfVklERU8sCi0g ICAgICAgIC5jb25maWdfcHJvcHMgPSAmZmZfdmtfZmlsdGVyX2NvbmZpZ19vdXRwdXQsCi0gICAg fSwKLX07Ci0KLWNvbnN0IEZGRmlsdGVyIGZmX3ZmX2F2Z2JsdXJfdnVsa2FuID0gewotICAgIC5w Lm5hbWUgICAgICAgICA9ICJhdmdibHVyX3Z1bGthbiIsCi0gICAgLnAuZGVzY3JpcHRpb24gID0g TlVMTF9JRl9DT05GSUdfU01BTEwoIkFwcGx5IGF2Z2JsdXIgbWFzayB0byBpbnB1dCB2aWRlbyIp LAotICAgIC5wLnByaXZfY2xhc3MgICA9ICZhdmdibHVyX3Z1bGthbl9jbGFzcywKLSAgICAucC5m bGFncyAgICAgICAgPSBBVkZJTFRFUl9GTEFHX0hXREVWSUNFLAotICAgIC5wcml2X3NpemUgICAg ICA9IHNpemVvZihBdmdCbHVyVnVsa2FuQ29udGV4dCksCi0gICAgLmluaXQgICAgICAgICAgID0g JmZmX3ZrX2ZpbHRlcl9pbml0LAotICAgIC51bmluaXQgICAgICAgICA9ICZhdmdibHVyX3Z1bGth bl91bmluaXQsCi0gICAgRklMVEVSX0lOUFVUUyhhdmdibHVyX3Z1bGthbl9pbnB1dHMpLAotICAg IEZJTFRFUl9PVVRQVVRTKGF2Z2JsdXJfdnVsa2FuX291dHB1dHMpLAotICAgIEZJTFRFUl9TSU5H TEVfUElYRk1UKEFWX1BJWF9GTVRfVlVMS0FOKSwKLSAgICAuZmxhZ3NfaW50ZXJuYWwgPSBGRl9G SUxURVJfRkxBR19IV0ZSQU1FX0FXQVJFLAotfTsKLS0gCjIuNDkuMQoKCkZyb20gMzlkY2FlOGI5 ZTZmNmRjYjE0OWZhNDU0MTZmMDdlMTBmN2MwYzVlMyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEK RnJvbTogSmFtYWlrYTEgPGx1a2FzemN6MThAd3AucGw+CkRhdGU6IFdlZCwgMyBTZXAgMjAyNSAx Mjo0NTozMCArMDAwMApTdWJqZWN0OiBbUEFUQ0ggMDAyLzExOF0gQ2hhbmdpbmcgdnVsa2FuIGZp bGUgZGlyZWN0b3J5CgotLS0KIGxpYmF2ZmlsdGVyL3Z1bGthbi92Zl9hdmdibHVyX3Z1bGthbi5j IHwgMjU5ICsrKysrKysrKysrKysrKysrKysrKysrKysKIDEgZmlsZSBjaGFuZ2VkLCAyNTkgaW5z ZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2ZmlsdGVyL3Z1bGthbi92Zl9hdmdi bHVyX3Z1bGthbi5jCgpkaWZmIC0tZ2l0IGEvbGliYXZmaWx0ZXIvdnVsa2FuL3ZmX2F2Z2JsdXJf dnVsa2FuLmMgYi9saWJhdmZpbHRlci92dWxrYW4vdmZfYXZnYmx1cl92dWxrYW4uYwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi45ZjMzZWMyOGMxCi0tLSAvZGV2L251bGwK KysrIGIvbGliYXZmaWx0ZXIvdnVsa2FuL3ZmX2F2Z2JsdXJfdnVsa2FuLmMKQEAgLTAsMCArMSwy NTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIEx5bm5lCisgKgorICogVGhpcyBmaWxlIGlzIHBh cnQgb2YgRkZtcGVnLgorICoKKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhl IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog RkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3 YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w eSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRo IEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlv biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjEx MC0xMzAxIFVTQQorICovCisKKyNpbmNsdWRlICJsaWJhdnV0aWwvcmFuZG9tX3NlZWQuaCIKKyNp bmNsdWRlICIuLi8uLi9saWJhdnV0aWwvdnVsa2FuL3Z1bGthbl9zcGlydi5oIgorI2luY2x1ZGUg ImxpYmF2dXRpbC9vcHQuaCIKKyNpbmNsdWRlICJ2dWxrYW5fZmlsdGVyLmgiCisKKyNpbmNsdWRl ICJsaWJhdmZpbHRlci9maWx0ZXJzLmgiCisjaW5jbHVkZSAibGliYXZmaWx0ZXIvdmlkZW8uaCIK KwordHlwZWRlZiBzdHJ1Y3QgQXZnQmx1clZ1bGthbkNvbnRleHQgeworICAgIEZGVnVsa2FuQ29u dGV4dCB2a2N0eDsKKworICAgIGludCBpbml0aWFsaXplZDsKKyAgICBGRlZrRXhlY1Bvb2wgZTsK KyAgICBBVlZ1bGthbkRldmljZVF1ZXVlRmFtaWx5ICpxZjsKKyAgICBGRlZ1bGthblNoYWRlciBz aGQ7CisKKyAgICAvKiBQdXNoIGNvbnN0YW50cyAvIG9wdGlvbnMgKi8KKyAgICBzdHJ1Y3Qgewor ICAgICAgICBmbG9hdCBmaWx0ZXJfbm9ybVs0XTsKKyAgICAgICAgaW50MzJfdCBmaWx0ZXJfbGVu WzJdOworICAgIH0gb3B0czsKKworICAgIGludCBzaXplX3g7CisgICAgaW50IHNpemVfeTsKKyAg ICBpbnQgcGxhbmVzOworfSBBdmdCbHVyVnVsa2FuQ29udGV4dDsKKworc3RhdGljIGNvbnN0IGNo YXIgYmx1cl9rZXJuZWxbXSA9IHsKKyAgICBDKDAsIHZvaWQgZGlzdG9ydChjb25zdCBpdmVjMiBw b3MsIGNvbnN0IGludCBpZHgpICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICBDKDAsIHsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICkKKyAgICBDKDEsICAgICB2ZWM0IHN1bSA9IHZlYzQoMCk7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICBDKDEsICAgICBmb3IgKGlu dCB5ID0gLWZpbHRlcl9sZW4ueTsgeSA8PSBmaWx0ZXJfbGVuLnk7IHkrKykgICAgICAgICAgICAg ICkKKyAgICBDKDEsICAgICAgICBmb3IgKGludCB4ID0gLWZpbHRlcl9sZW4ueDsgeCA8PSBmaWx0 ZXJfbGVuLng7IHgrKykgICAgICAgICAgICkKKyAgICBDKDIsICAgICAgICAgICAgc3VtICs9IGlt YWdlTG9hZChpbnB1dF9pbWdbaWR4XSwgcG9zICsgaXZlYzIoeCwgeSkpOyAgICAgICkKKyAgICBD KDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICkKKyAgICBDKDEsICAgICBpbWFnZVN0b3JlKG91dHB1dF9pbWdbaWR4 XSwgcG9zLCBzdW0gKiBmaWx0ZXJfbm9ybSk7ICAgICAgICAgICAgICkKKyAgICBDKDAsIH0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICkKK307CisKK3N0YXRpYyBhdl9jb2xkIGludCBpbml0X2ZpbHRlcihBVkZpbHRlckNv bnRleHQgKmN0eCwgQVZGcmFtZSAqaW4pCit7CisgICAgaW50IGVycjsKKyAgICB1aW50OF90ICpz cHZfZGF0YTsKKyAgICBzaXplX3Qgc3B2X2xlbjsKKyAgICB2b2lkICpzcHZfb3BhcXVlID0gTlVM TDsKKyAgICBBdmdCbHVyVnVsa2FuQ29udGV4dCAqcyA9IGN0eC0+cHJpdjsKKyAgICBGRlZ1bGth bkNvbnRleHQgKnZrY3R4ID0gJnMtPnZrY3R4OworICAgIGNvbnN0IGludCBwbGFuZXMgPSBhdl9w aXhfZm10X2NvdW50X3BsYW5lcyhzLT52a2N0eC5vdXRwdXRfZm9ybWF0KTsKKyAgICBGRlZ1bGth blNoYWRlciAqc2hkOworICAgIEZGVmtTUElSVkNvbXBpbGVyICpzcHY7CisgICAgRkZWdWxrYW5E ZXNjcmlwdG9yU2V0QmluZGluZyAqZGVzYzsKKworICAgIHNwdiA9IGZmX3ZrX3NwaXJ2X2luaXQo KTsKKyAgICBpZiAoIXNwdikgeworICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJV bmFibGUgdG8gaW5pdGlhbGl6ZSBTUElSLVYgY29tcGlsZXIhXG4iKTsKKyAgICAgICAgcmV0dXJu IEFWRVJST1JfRVhURVJOQUw7CisgICAgfQorCisgICAgcy0+cWYgPSBmZl92a19xZl9maW5kKHZr Y3R4LCBWS19RVUVVRV9DT01QVVRFX0JJVCwgMCk7CisgICAgaWYgKCFzLT5xZikgeworICAgICAg ICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJEZXZpY2UgaGFzIG5vIGNvbXB1dGUgcXVldWVz XG4iKTsKKyAgICAgICAgZXJyID0gQVZFUlJPUihFTk9UU1VQKTsKKyAgICAgICAgZ290byBmYWls OworICAgIH0KKworICAgIFJFVChmZl92a19leGVjX3Bvb2xfaW5pdCh2a2N0eCwgcy0+cWYsICZz LT5lLCBzLT5xZi0+bnVtKjQsIDAsIDAsIDAsIE5VTEwpKTsKKyAgICBSRVQoZmZfdmtfc2hhZGVy X2luaXQodmtjdHgsICZzLT5zaGQsICJhdmdibHVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgVktfU0hBREVSX1NUQUdFX0NPTVBVVEVfQklULAorICAgICAgICAgICAgICAgICAgICAgICAg ICBOVUxMLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAzMiwgMSwgMSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgMCkpOworICAgIHNoZCA9ICZzLT5zaGQ7CisKKyAgICBkZXNjID0g KEZGVnVsa2FuRGVzY3JpcHRvclNldEJpbmRpbmcgW10pIHsKKyAgICAgICAgeworICAgICAgICAg ICAgLm5hbWUgICAgICAgPSAiaW5wdXRfaW1nIiwKKyAgICAgICAgICAgIC50eXBlICAgICAgID0g VktfREVTQ1JJUFRPUl9UWVBFX1NUT1JBR0VfSU1BR0UsCisgICAgICAgICAgICAubWVtX2xheW91 dCA9IGZmX3ZrX3NoYWRlcl9yZXBfZm10KHMtPnZrY3R4LmlucHV0X2Zvcm1hdCwgRkZfVktfUkVQ X0ZMT0FUKSwKKyAgICAgICAgICAgIC5tZW1fcXVhbGkgID0gInJlYWRvbmx5IiwKKyAgICAgICAg ICAgIC5kaW1lbnNpb25zID0gMiwKKyAgICAgICAgICAgIC5lbGVtcyAgICAgID0gcGxhbmVzLAor ICAgICAgICAgICAgLnN0YWdlcyAgICAgPSBWS19TSEFERVJfU1RBR0VfQ09NUFVURV9CSVQsCisg ICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgIC5uYW1lICAgICAgID0gIm91dHB1dF9p bWciLAorICAgICAgICAgICAgLnR5cGUgICAgICAgPSBWS19ERVNDUklQVE9SX1RZUEVfU1RPUkFH RV9JTUFHRSwKKyAgICAgICAgICAgIC5tZW1fbGF5b3V0ID0gZmZfdmtfc2hhZGVyX3JlcF9mbXQo cy0+dmtjdHgub3V0cHV0X2Zvcm1hdCwgRkZfVktfUkVQX0ZMT0FUKSwKKyAgICAgICAgICAgIC5t ZW1fcXVhbGkgID0gIndyaXRlb25seSIsCisgICAgICAgICAgICAuZGltZW5zaW9ucyA9IDIsCisg ICAgICAgICAgICAuZWxlbXMgICAgICA9IHBsYW5lcywKKyAgICAgICAgICAgIC5zdGFnZXMgICAg ID0gVktfU0hBREVSX1NUQUdFX0NPTVBVVEVfQklULAorICAgICAgICB9LAorICAgIH07CisKKyAg ICBSRVQoZmZfdmtfc2hhZGVyX2FkZF9kZXNjcmlwdG9yX3NldCh2a2N0eCwgc2hkLCBkZXNjLCAy LCAwLCAwKSk7CisKKyAgICBHTFNMQygwLCBsYXlvdXQocHVzaF9jb25zdGFudCwgc3RkNDMwKSB1 bmlmb3JtIHB1c2hDb25zdGFudHMgeyAgICAgICAgKTsKKyAgICBHTFNMQygxLCAgICB2ZWM0IGZp bHRlcl9ub3JtOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAg ICBHTFNMQygxLCAgICBpdmVjMiBmaWx0ZXJfbGVuOyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKTsKKyAgICBHTFNMQygwLCB9OyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBHTFNMQygwLCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KTsKKworICAgIGZmX3ZrX3NoYWRlcl9hZGRfcHVzaF9jb25zdCgmcy0+c2hkLCAwLCBzaXplb2Yo cy0+b3B0cyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZLX1NIQURFUl9TVEFH RV9DT01QVVRFX0JJVCk7CisKKyAgICBHTFNMRCggICBibHVyX2tlcm5lbCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBHTFNMQygwLCB2b2lk IG1haW4oKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KTsKKyAgICBHTFNMQygwLCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBHTFNMQygxLCAgICAgaXZlYzIgc2l6ZTsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBHTFNMQygx LCAgICAgdmVjNCByZXM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKTsKKyAgICBHTFNMQygxLCAgICAgY29uc3QgaXZlYzIgcG9zID0gaXZlYzIoZ2xfR2xv YmFsSW52b2NhdGlvbklELnh5KTsgICAgICAgKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHBs YW5lczsgaSsrKSB7CisgICAgICAgIEdMU0xDKDAsICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgIEdMU0xGKDEsICBzaXpl ID0gaW1hZ2VTaXplKG91dHB1dF9pbWdbJWldKTsgICAgICAgICAgICAgICAgICAgICAsaSk7Cisg ICAgICAgIEdMU0xDKDEsICBpZiAoIUlTX1dJVEhJTihwb3MsIHNpemUpKSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICk7CisgICAgICAgIEdMU0xDKDIsICAgICAgcmV0dXJuOyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgIGlmIChzLT5w bGFuZXMgJiAoMSA8PCBpKSkgeworICAgICAgICAgICAgR0xTTEYoMSwgZGlzdG9ydChwb3MsICVp KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLGkpOworICAgICAgICB9IGVsc2Ug eworICAgICAgICAgICAgR0xTTEYoMSwgcmVzID0gaW1hZ2VMb2FkKGlucHV0X2ltZ1slaV0sIHBv cyk7ICAgICAgICAgICAgICAgLGkpOworICAgICAgICAgICAgR0xTTEYoMSwgaW1hZ2VTdG9yZShv dXRwdXRfaW1nWyVpXSwgcG9zLCByZXMpOyAgICAgICAgICAgICAgLGkpOworICAgICAgICB9Cisg ICAgfQorICAgIEdMU0xDKDAsIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICApOworCisgICAgUkVUKHNwdi0+Y29tcGlsZV9zaGFkZXIo dmtjdHgsIHNwdiwgJnMtPnNoZCwgJnNwdl9kYXRhLCAmc3B2X2xlbiwgIm1haW4iLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICZzcHZfb3BhcXVlKSk7CisgICAgUkVUKGZmX3ZrX3NoYWRl cl9saW5rKHZrY3R4LCAmcy0+c2hkLCBzcHZfZGF0YSwgc3B2X2xlbiwgIm1haW4iKSk7CisKKyAg ICBSRVQoZmZfdmtfc2hhZGVyX3JlZ2lzdGVyX2V4ZWModmtjdHgsICZzLT5lLCAmcy0+c2hkKSk7 CisKKyAgICBzLT5pbml0aWFsaXplZCA9IDE7CisgICAgcy0+b3B0cy5maWx0ZXJfbGVuWzBdID0g cy0+c2l6ZV94IC0gMTsKKyAgICBzLT5vcHRzLmZpbHRlcl9sZW5bMV0gPSBzLT5zaXplX3kgLSAx OworCisgICAgcy0+b3B0cy5maWx0ZXJfbm9ybVswXSA9IHMtPm9wdHMuZmlsdGVyX2xlblswXSoy ICsgMTsKKyAgICBzLT5vcHRzLmZpbHRlcl9ub3JtWzBdID0gMS4wLyhzLT5vcHRzLmZpbHRlcl9u b3JtWzBdKnMtPm9wdHMuZmlsdGVyX25vcm1bMF0pOworICAgIHMtPm9wdHMuZmlsdGVyX25vcm1b MV0gPSBzLT5vcHRzLmZpbHRlcl9ub3JtWzBdOworICAgIHMtPm9wdHMuZmlsdGVyX25vcm1bMl0g PSBzLT5vcHRzLmZpbHRlcl9ub3JtWzBdOworICAgIHMtPm9wdHMuZmlsdGVyX25vcm1bM10gPSBz LT5vcHRzLmZpbHRlcl9ub3JtWzBdOworCitmYWlsOgorICAgIGlmIChzcHZfb3BhcXVlKQorICAg ICAgICBzcHYtPmZyZWVfc2hhZGVyKHNwdiwgJnNwdl9vcGFxdWUpOworICAgIGlmIChzcHYpCisg ICAgICAgIHNwdi0+dW5pbml0KCZzcHYpOworCisgICAgcmV0dXJuIGVycjsKK30KKworc3RhdGlj IGludCBhdmdibHVyX3Z1bGthbl9maWx0ZXJfZnJhbWUoQVZGaWx0ZXJMaW5rICpsaW5rLCBBVkZy YW1lICppbikKK3sKKyAgICBpbnQgZXJyOworICAgIEFWRnJhbWUgKm91dCA9IE5VTEw7CisgICAg QVZGaWx0ZXJDb250ZXh0ICpjdHggPSBsaW5rLT5kc3Q7CisgICAgQXZnQmx1clZ1bGthbkNvbnRl eHQgKnMgPSBjdHgtPnByaXY7CisgICAgQVZGaWx0ZXJMaW5rICpvdXRsaW5rID0gY3R4LT5vdXRw dXRzWzBdOworCisgICAgb3V0ID0gZmZfZ2V0X3ZpZGVvX2J1ZmZlcihvdXRsaW5rLCBvdXRsaW5r LT53LCBvdXRsaW5rLT5oKTsKKyAgICBpZiAoIW91dCkgeworICAgICAgICBlcnIgPSBBVkVSUk9S KEVOT01FTSk7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICBpZiAoIXMtPmluaXRp YWxpemVkKQorICAgICAgICBSRVQoaW5pdF9maWx0ZXIoY3R4LCBpbikpOworCisgICAgUkVUKGZm X3ZrX2ZpbHRlcl9wcm9jZXNzX3NpbXBsZSgmcy0+dmtjdHgsICZzLT5lLCAmcy0+c2hkLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0LCBpbiwgVktfTlVMTF9IQU5ETEUs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcy0+b3B0cywgc2l6ZW9mKHMt Pm9wdHMpKSk7CisKKyAgICBlcnIgPSBhdl9mcmFtZV9jb3B5X3Byb3BzKG91dCwgaW4pOworICAg IGlmIChlcnIgPCAwKQorICAgICAgICBnb3RvIGZhaWw7CisKKyAgICBhdl9mcmFtZV9mcmVlKCZp bik7CisKKyAgICByZXR1cm4gZmZfZmlsdGVyX2ZyYW1lKG91dGxpbmssIG91dCk7CisKK2ZhaWw6 CisgICAgYXZfZnJhbWVfZnJlZSgmaW4pOworICAgIGF2X2ZyYW1lX2ZyZWUoJm91dCk7CisgICAg cmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgYXZnYmx1cl92dWxrYW5fdW5pbml0KEFWRmls dGVyQ29udGV4dCAqYXZjdHgpCit7CisgICAgQXZnQmx1clZ1bGthbkNvbnRleHQgKnMgPSBhdmN0 eC0+cHJpdjsKKyAgICBGRlZ1bGthbkNvbnRleHQgKnZrY3R4ID0gJnMtPnZrY3R4OworCisgICAg ZmZfdmtfZXhlY19wb29sX2ZyZWUodmtjdHgsICZzLT5lKTsKKyAgICBmZl92a19zaGFkZXJfZnJl ZSh2a2N0eCwgJnMtPnNoZCk7CisKKyAgICBmZl92a191bmluaXQoJnMtPnZrY3R4KTsKKworICAg IHMtPmluaXRpYWxpemVkID0gMDsKK30KKworI2RlZmluZSBPRkZTRVQoeCkgb2Zmc2V0b2YoQXZn Qmx1clZ1bGthbkNvbnRleHQsIHgpCisjZGVmaW5lIEZMQUdTIChBVl9PUFRfRkxBR19GSUxURVJJ TkdfUEFSQU0gfCBBVl9PUFRfRkxBR19WSURFT19QQVJBTSkKK3N0YXRpYyBjb25zdCBBVk9wdGlv biBhdmdibHVyX3Z1bGthbl9vcHRpb25zW10gPSB7CisgICAgeyAic2l6ZVgiLCAgIlNldCBob3Jp em9udGFsIHJhZGl1cyIsIE9GRlNFVChzaXplX3gpLCBBVl9PUFRfVFlQRV9JTlQsIHsgLmk2NCA9 IDMgfSwgMSwgMzIsIC5mbGFncyA9IEZMQUdTIH0sCisgICAgeyAic2l6ZVkiLCAgIlNldCB2ZXJ0 aWNhbCByYWRpdXMiLCBPRkZTRVQoc2l6ZV95KSwgQVZfT1BUX1RZUEVfSU5ULCB7IC5pNjQgPSAz IH0sIDEsIDMyLCAuZmxhZ3MgPSBGTEFHUyB9LAorICAgIHsgInBsYW5lcyIsICJTZXQgcGxhbmVz IHRvIGZpbHRlciAoYml0bWFzaykiLCBPRkZTRVQocGxhbmVzKSwgQVZfT1BUX1RZUEVfSU5ULCB7 Lmk2NCA9IDB4Rn0sIDAsIDB4RiwgLmZsYWdzID0gRkxBR1MgfSwKKyAgICB7IE5VTEwgfSwKK307 CisKK0FWRklMVEVSX0RFRklORV9DTEFTUyhhdmdibHVyX3Z1bGthbik7CisKK3N0YXRpYyBjb25z dCBBVkZpbHRlclBhZCBhdmdibHVyX3Z1bGthbl9pbnB1dHNbXSA9IHsKKyAgICB7CisgICAgICAg IC5uYW1lICAgICAgICAgPSAiZGVmYXVsdCIsCisgICAgICAgIC50eXBlICAgICAgICAgPSBBVk1F RElBX1RZUEVfVklERU8sCisgICAgICAgIC5maWx0ZXJfZnJhbWUgPSAmYXZnYmx1cl92dWxrYW5f ZmlsdGVyX2ZyYW1lLAorICAgICAgICAuY29uZmlnX3Byb3BzID0gJmZmX3ZrX2ZpbHRlcl9jb25m aWdfaW5wdXQsCisgICAgfSwKK307CisKK3N0YXRpYyBjb25zdCBBVkZpbHRlclBhZCBhdmdibHVy X3Z1bGthbl9vdXRwdXRzW10gPSB7CisgICAgeworICAgICAgICAubmFtZSA9ICJkZWZhdWx0IiwK KyAgICAgICAgLnR5cGUgPSBBVk1FRElBX1RZUEVfVklERU8sCisgICAgICAgIC5jb25maWdfcHJv cHMgPSAmZmZfdmtfZmlsdGVyX2NvbmZpZ19vdXRwdXQsCisgICAgfSwKK307CisKK2NvbnN0IEZG RmlsdGVyIGZmX3ZmX2F2Z2JsdXJfdnVsa2FuID0geworICAgIC5wLm5hbWUgICAgICAgICA9ICJh dmdibHVyX3Z1bGthbiIsCisgICAgLnAuZGVzY3JpcHRpb24gID0gTlVMTF9JRl9DT05GSUdfU01B TEwoIkFwcGx5IGF2Z2JsdXIgbWFzayB0byBpbnB1dCB2aWRlbyIpLAorICAgIC5wLnByaXZfY2xh c3MgICA9ICZhdmdibHVyX3Z1bGthbl9jbGFzcywKKyAgICAucC5mbGFncyAgICAgICAgPSBBVkZJ TFRFUl9GTEFHX0hXREVWSUNFLAorICAgIC5wcml2X3NpemUgICAgICA9IHNpemVvZihBdmdCbHVy VnVsa2FuQ29udGV4dCksCisgICAgLmluaXQgICAgICAgICAgID0gJmZmX3ZrX2ZpbHRlcl9pbml0 LAorICAgIC51bmluaXQgICAgICAgICA9ICZhdmdibHVyX3Z1bGthbl91bmluaXQsCisgICAgRklM VEVSX0lOUFVUUyhhdmdibHVyX3Z1bGthbl9pbnB1dHMpLAorICAgIEZJTFRFUl9PVVRQVVRTKGF2 Z2JsdXJfdnVsa2FuX291dHB1dHMpLAorICAgIEZJTFRFUl9TSU5HTEVfUElYRk1UKEFWX1BJWF9G TVRfVlVMS0FOKSwKKyAgICAuZmxhZ3NfaW50ZXJuYWwgPSBGRl9GSUxURVJfRkxBR19IV0ZSQU1F X0FXQVJFLAorfTsKLS0gCjIuNDkuMQoKCkZyb20gMzljNTk1YmNhZTMyNGQzNWRjZDk3ZGU5ZTg1 YjNiNWY2NTNiY2EyMSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKRnJvbTogSmFtYWlrYTEgPGx1 a2FzemN6MThAd3AucGw+CkRhdGU6IFdlZCwgMyBTZXAgMjAyNSAxMjo0NjoyOCArMDAwMApTdWJq ZWN0OiBbUEFUQ0ggMDAzLzExOF0gQ2hhbmdpbmcgdnVsa2FuIGZpbGUgZGlyZWN0b3J5CgotLS0K IGxpYmF2ZmlsdGVyL3ZmX2JsYWNrZGV0ZWN0X3Z1bGthbi5jIHwgNDQ1IC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCA0NDUgZGVsZXRpb25zKC0pCiBkZWxldGUg bW9kZSAxMDA2NDQgbGliYXZmaWx0ZXIvdmZfYmxhY2tkZXRlY3RfdnVsa2FuLmMKCmRpZmYgLS1n aXQgYS9saWJhdmZpbHRlci92Zl9ibGFja2RldGVjdF92dWxrYW4uYyBiL2xpYmF2ZmlsdGVyL3Zm X2JsYWNrZGV0ZWN0X3Z1bGthbi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNzli MDU3MTQ4Li4wMDAwMDAwMDAwCi0tLSBhL2xpYmF2ZmlsdGVyL3ZmX2JsYWNrZGV0ZWN0X3Z1bGth bi5jCisrKyAvZGV2L251bGwKQEAgLTEsNDQ1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAy NSAoYykgTmlrbGFzIEhhYXMKLSAqCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCi0g KgotICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu ZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l cmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0 IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBGRm1wZWcgaXMgZGlzdHJp YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VU IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBN RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg dGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls cy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVz c2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3Qs IHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCi0gKi8K LQotI2luY2x1ZGUgPGZsb2F0Lmg+Ci0jaW5jbHVkZSAibGliYXZ1dGlsL3Z1bGthbl9zcGlydi5o IgotI2luY2x1ZGUgImxpYmF2dXRpbC9vcHQuaCIKLSNpbmNsdWRlICJsaWJhdnV0aWwvdGltZXN0 YW1wLmgiCi0jaW5jbHVkZSAidnVsa2FuX2ZpbHRlci5oIgotCi0jaW5jbHVkZSAiZmlsdGVycy5o IgotI2luY2x1ZGUgInZpZGVvLmgiCi0KLXR5cGVkZWYgc3RydWN0IEJsYWNrRGV0ZWN0VnVsa2Fu Q29udGV4dCB7Ci0gICAgRkZWdWxrYW5Db250ZXh0IHZrY3R4OwotCi0gICAgaW50IGluaXRpYWxp emVkOwotICAgIEZGVmtFeGVjUG9vbCBlOwotICAgIEFWVnVsa2FuRGV2aWNlUXVldWVGYW1pbHkg KnFmOwotICAgIEZGVnVsa2FuU2hhZGVyIHNoZDsKLSAgICBBVkJ1ZmZlclBvb2wgKnN1bV9idWZf cG9vbDsKLQotICAgIGRvdWJsZSBibGFja19taW5fZHVyYXRpb25fdGltZTsKLSAgICBkb3VibGUg cGljdHVyZV9ibGFja19yYXRpb190aDsKLSAgICBkb3VibGUgcGl4ZWxfYmxhY2tfdGg7Ci0gICAg aW50ICAgIGFscGhhOwotCi0gICAgaW50NjRfdCBibGFja19zdGFydDsKLX0gQmxhY2tEZXRlY3RW dWxrYW5Db250ZXh0OwotCi10eXBlZGVmIHN0cnVjdCBCbGFja0RldGVjdFB1c2hEYXRhIHsKLSAg ICBmbG9hdCB0aHJlc2hvbGQ7Ci19IEJsYWNrRGV0ZWN0UHVzaERhdGE7Ci0KLXR5cGVkZWYgc3Ry dWN0IEJsYWNrRGV0ZWN0QnVmIHsKLSNkZWZpbmUgU0xJQ0VTIDE2Ci0gICAgdWludDMyX3Qgc2xp Y2Vfc3VtW1NMSUNFU107Ci19IEJsYWNrRGV0ZWN0QnVmOwotCi1zdGF0aWMgYXZfY29sZCBpbnQg aW5pdF9maWx0ZXIoQVZGaWx0ZXJDb250ZXh0ICpjdHgpCi17Ci0gICAgaW50IGVycjsKLSAgICB1 aW50OF90ICpzcHZfZGF0YTsKLSAgICBzaXplX3Qgc3B2X2xlbjsKLSAgICB2b2lkICpzcHZfb3Bh cXVlID0gTlVMTDsKLSAgICBCbGFja0RldGVjdFZ1bGthbkNvbnRleHQgKnMgPSBjdHgtPnByaXY7 Ci0gICAgRkZWdWxrYW5Db250ZXh0ICp2a2N0eCA9ICZzLT52a2N0eDsKLSAgICBGRlZ1bGthblNo YWRlciAqc2hkOwotICAgIEZGVmtTUElSVkNvbXBpbGVyICpzcHY7Ci0gICAgRkZWdWxrYW5EZXNj cmlwdG9yU2V0QmluZGluZyAqZGVzYzsKLSAgICBjb25zdCBpbnQgcGxhbmUgPSBzLT5hbHBoYSA/ IDMgOiAwOwotCi0gICAgY29uc3QgQVZQaXhGbXREZXNjcmlwdG9yICpwaXhkZXNjID0gYXZfcGl4 X2ZtdF9kZXNjX2dldChzLT52a2N0eC5pbnB1dF9mb3JtYXQpOwotICAgIGlmIChwaXhkZXNjLT5m bGFncyAmIEFWX1BJWF9GTVRfRkxBR19SR0IpIHsKLSAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9H X0VSUk9SLCAiUkdCIGlucHV0cyBhcmUgbm90IHN1cHBvcnRlZFxuIik7Ci0gICAgICAgIHJldHVy biBBVkVSUk9SKEVOT1RTVVApOwotICAgIH0KLQotICAgIHNwdiA9IGZmX3ZrX3NwaXJ2X2luaXQo KTsKLSAgICBpZiAoIXNwdikgewotICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJV bmFibGUgdG8gaW5pdGlhbGl6ZSBTUElSLVYgY29tcGlsZXIhXG4iKTsKLSAgICAgICAgcmV0dXJu IEFWRVJST1JfRVhURVJOQUw7Ci0gICAgfQotCi0gICAgcy0+cWYgPSBmZl92a19xZl9maW5kKHZr Y3R4LCBWS19RVUVVRV9DT01QVVRFX0JJVCwgMCk7Ci0gICAgaWYgKCFzLT5xZikgewotICAgICAg ICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJEZXZpY2UgaGFzIG5vIGNvbXB1dGUgcXVldWVz XG4iKTsKLSAgICAgICAgZXJyID0gQVZFUlJPUihFTk9UU1VQKTsKLSAgICAgICAgZ290byBmYWls OwotICAgIH0KLQotICAgIFJFVChmZl92a19leGVjX3Bvb2xfaW5pdCh2a2N0eCwgcy0+cWYsICZz LT5lLCBzLT5xZi0+bnVtKjQsIDAsIDAsIDAsIE5VTEwpKTsKLSAgICBSRVQoZmZfdmtfc2hhZGVy X2luaXQodmtjdHgsICZzLT5zaGQsICJibGFja2RldGVjdCIsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgIFZLX1NIQURFUl9TVEFHRV9DT01QVVRFX0JJVCwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgKGNvbnN0IGNoYXIgKltdKSB7ICJHTF9LSFJfc2hhZGVyX3N1Ymdyb3VwX2JhbGxvdCIg fSwgMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgMzIsIDMyLCAxLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAwKSk7Ci0gICAgc2hkID0gJnMtPnNoZDsKLQotICAgIEdMU0xDKDAsIGxh eW91dChwdXNoX2NvbnN0YW50LCBzdGQ0MzApIHVuaWZvcm0gcHVzaENvbnN0YW50cyB7ICAgICAg ICAgICAgKTsKLSAgICBHTFNMQygxLCAgICAgZmxvYXQgdGhyZXNob2xkOyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgR0xTTEMoMCwgfTsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAp OwotCi0gICAgZmZfdmtfc2hhZGVyX2FkZF9wdXNoX2NvbnN0KHNoZCwgMCwgc2l6ZW9mKEJsYWNr RGV0ZWN0UHVzaERhdGEpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19TSEFE RVJfU1RBR0VfQ09NUFVURV9CSVQpOwotCi0gICAgZGVzYyA9IChGRlZ1bGthbkRlc2NyaXB0b3JT ZXRCaW5kaW5nIFtdKSB7Ci0gICAgICAgIHsKLSAgICAgICAgICAgIC5uYW1lICAgICAgID0gImlu cHV0X2ltZyIsCi0gICAgICAgICAgICAudHlwZSAgICAgICA9IFZLX0RFU0NSSVBUT1JfVFlQRV9T VE9SQUdFX0lNQUdFLAotICAgICAgICAgICAgLm1lbV9sYXlvdXQgPSBmZl92a19zaGFkZXJfcmVw X2ZtdChzLT52a2N0eC5pbnB1dF9mb3JtYXQsIEZGX1ZLX1JFUF9GTE9BVCksCi0gICAgICAgICAg ICAubWVtX3F1YWxpICA9ICJyZWFkb25seSIsCi0gICAgICAgICAgICAuZGltZW5zaW9ucyA9IDIs Ci0gICAgICAgICAgICAuZWxlbXMgICAgICA9IGF2X3BpeF9mbXRfY291bnRfcGxhbmVzKHMtPnZr Y3R4LmlucHV0X2Zvcm1hdCksCi0gICAgICAgICAgICAuc3RhZ2VzICAgICA9IFZLX1NIQURFUl9T VEFHRV9DT01QVVRFX0JJVCwKLSAgICAgICAgfSwgewotICAgICAgICAgICAgLm5hbWUgICAgICAg ID0gInN1bV9idWZmZXIiLAotICAgICAgICAgICAgLnR5cGUgICAgICAgID0gVktfREVTQ1JJUFRP Ul9UWVBFX1NUT1JBR0VfQlVGRkVSLAotICAgICAgICAgICAgLnN0YWdlcyAgICAgID0gVktfU0hB REVSX1NUQUdFX0NPTVBVVEVfQklULAotICAgICAgICAgICAgLmJ1Zl9jb250ZW50ID0gInVpbnQg c2xpY2Vfc3VtW107IiwKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICBSRVQoZmZfdmtfc2hhZGVy X2FkZF9kZXNjcmlwdG9yX3NldCh2a2N0eCwgJnMtPnNoZCwgZGVzYywgMiwgMCwgMCkpOwotCi0g ICAgR0xTTEMoMCwgc2hhcmVkIHVpbnQgd2dfc3VtOyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICApOwotICAgIEdMU0xDKDAsICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBHTFNM QygwLCB2b2lkIG1haW4oKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICk7Ci0gICAgR0xTTEMoMCwgeyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIEdMU0xDKDEsICAg ICB3Z19zdW0gPSAwdTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKTsKLSAgICBHTFNMQygxLCAgICAgYmFycmllcigpOyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgR0xTTEMoMCwgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAp OwotICAgIEdMU0xDKDEsICAgICBjb25zdCBpdmVjMiBwb3MgPSBpdmVjMihnbF9HbG9iYWxJbnZv Y2F0aW9uSUQueHkpOyAgICAgICAgICAgKTsKLSAgICBHTFNMRigxLCAgICAgaWYgKCFJU19XSVRI SU4ocG9zLCBpbWFnZVNpemUoaW5wdXRfaW1nWyVkXSkpKSAgICAgICAgICAgICAgICxwbGFuZSk7 Ci0gICAgR0xTTEMoMiwgICAgICAgICByZXR1cm47ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIEdMU0xGKDEsICAgICBmbG9hdCB2YWx1ZSA9 IGltYWdlTG9hZChpbnB1dF9pbWdbJWRdLCBwb3MpLng7ICAgICAgICAgICAgICAgLHBsYW5lKTsK LSAgICBHTFNMQygxLCAgICAgdXZlYzQgaXNibGFjayA9IHN1Ymdyb3VwQmFsbG90KHZhbHVlIDw9 IHRocmVzaG9sZCk7ICAgICAgICAgICk7Ci0gICAgR0xTTEMoMSwgICAgIGlmIChzdWJncm91cEVs ZWN0KCkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIEdM U0xDKDIsICAgICAgICAgYXRvbWljQWRkKHdnX3N1bSwgc3ViZ3JvdXBCYWxsb3RCaXRDb3VudChp c2JsYWNrKSk7ICAgICAgKTsKLSAgICBHTFNMQygxLCAgICAgYmFycmllcigpOyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgR0xTTEMoMSwg ICAgIGlmIChnbF9Mb2NhbEludm9jYXRpb25JbmRleCA9PSAwdSkgICAgICAgICAgICAgICAgICAg ICAgICAgICApOwotICAgIEdMU0xGKDIsICAgICAgICAgYXRvbWljQWRkKHNsaWNlX3N1bVtnbF9X b3JrR3JvdXBJRC54ICUlICVkdV0sIHdnX3N1bSk7ICAgLFNMSUNFUyk7Ci0gICAgR0xTTEMoMCwg fSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICApOwotCi0gICAgUkVUKHNwdi0+Y29tcGlsZV9zaGFkZXIodmtjdHgsIHNwdiwgJnMt PnNoZCwgJnNwdl9kYXRhLCAmc3B2X2xlbiwgIm1haW4iLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICZzcHZfb3BhcXVlKSk7Ci0gICAgUkVUKGZmX3ZrX3NoYWRlcl9saW5rKHZrY3R4LCAm cy0+c2hkLCBzcHZfZGF0YSwgc3B2X2xlbiwgIm1haW4iKSk7Ci0KLSAgICBSRVQoZmZfdmtfc2hh ZGVyX3JlZ2lzdGVyX2V4ZWModmtjdHgsICZzLT5lLCAmcy0+c2hkKSk7Ci0KLSAgICBzLT5ibGFj a19zdGFydCA9IEFWX05PUFRTX1ZBTFVFOwotICAgIHMtPmluaXRpYWxpemVkID0gMTsKLQotZmFp bDoKLSAgICBpZiAoc3B2X29wYXF1ZSkKLSAgICAgICAgc3B2LT5mcmVlX3NoYWRlcihzcHYsICZz cHZfb3BhcXVlKTsKLSAgICBpZiAoc3B2KQotICAgICAgICBzcHYtPnVuaW5pdCgmc3B2KTsKLQot ICAgIHJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyB2b2lkIHJlcG9ydF9ibGFja19yZWdpb24oQVZG aWx0ZXJDb250ZXh0ICpjdHgsIGludDY0X3QgYmxhY2tfZW5kKQotewotICAgIEJsYWNrRGV0ZWN0 VnVsa2FuQ29udGV4dCAqcyA9IGN0eC0+cHJpdjsKLSAgICBjb25zdCBBVkZpbHRlckxpbmsgKmlu bGluayA9IGN0eC0+aW5wdXRzWzBdOwotICAgIGlmIChzLT5ibGFja19zdGFydCA9PSBBVl9OT1BU U19WQUxVRSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKChibGFja19lbmQgLSBzLT5ibGFj a19zdGFydCkgPj0gcy0+YmxhY2tfbWluX2R1cmF0aW9uX3RpbWUgLyBhdl9xMmQoaW5saW5rLT50 aW1lX2Jhc2UpKSB7Ci0gICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19JTkZPLAotICAgICAgICAg ICAgICAgImJsYWNrX3N0YXJ0OiVzIGJsYWNrX2VuZDolcyBibGFja19kdXJhdGlvbjolc1xuIiwK LSAgICAgICAgICAgICAgIGF2X3RzMnRpbWVzdHIocy0+YmxhY2tfc3RhcnQsICZpbmxpbmstPnRp bWVfYmFzZSksCi0gICAgICAgICAgICAgICBhdl90czJ0aW1lc3RyKGJsYWNrX2VuZCwgJmlubGlu ay0+dGltZV9iYXNlKSwKLSAgICAgICAgICAgICAgIGF2X3RzMnRpbWVzdHIoYmxhY2tfZW5kIC0g cy0+YmxhY2tfc3RhcnQsICZpbmxpbmstPnRpbWVfYmFzZSkpOwotICAgIH0KLX0KLQotc3RhdGlj IHZvaWQgZXZhbHVhdGUoQVZGaWx0ZXJMaW5rICpsaW5rLCBBVkZyYW1lICppbiwKLSAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IEJsYWNrRGV0ZWN0QnVmICpzdW0pCi17Ci0gICAgQVZGaWx0ZXJD b250ZXh0ICpjdHggPSBsaW5rLT5kc3Q7Ci0gICAgQmxhY2tEZXRlY3RWdWxrYW5Db250ZXh0ICpz ID0gY3R4LT5wcml2OwotICAgIEZpbHRlckxpbmsgKmlubCA9IGZmX2ZpbHRlcl9saW5rKGxpbmsp OwotICAgIHVpbnQ2NF90IG5iX2JsYWNrX3BpeGVscyA9IDA7Ci0gICAgZG91YmxlIHJhdGlvOwot Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBGRl9BUlJBWV9FTEVNUyhzdW0tPnNsaWNlX3N1bSk7 IGkrKykKLSAgICAgICAgbmJfYmxhY2tfcGl4ZWxzICs9IHN1bS0+c2xpY2Vfc3VtW2ldOwotCi0g ICAgcmF0aW8gPSAoZG91YmxlKSBuYl9ibGFja19waXhlbHMgLyAobGluay0+dyAqIGxpbmstPmgp OwotCi0gICAgYXZfbG9nKGN0eCwgQVZfTE9HX0RFQlVHLAotICAgICAgICAgICAiZnJhbWU6JSJQ UklkNjQiIHBpY3R1cmVfYmxhY2tfcmF0aW86JWYgcHRzOiVzIHQ6JXMgdHlwZTolY1xuIiwKLSAg ICAgICAgICAgaW5sLT5mcmFtZV9jb3VudF9vdXQsIHJhdGlvLAotICAgICAgICAgICBhdl90czJz dHIoaW4tPnB0cyksIGF2X3RzMnRpbWVzdHIoaW4tPnB0cywgJmluLT50aW1lX2Jhc2UpLAotICAg ICAgICAgICBhdl9nZXRfcGljdHVyZV90eXBlX2NoYXIoaW4tPnBpY3RfdHlwZSkpOwotCi0gICAg aWYgKHJhdGlvID49IHMtPnBpY3R1cmVfYmxhY2tfcmF0aW9fdGgpIHsKLSAgICAgICAgaWYgKHMt PmJsYWNrX3N0YXJ0ID09IEFWX05PUFRTX1ZBTFVFKSB7Ci0gICAgICAgICAgICBzLT5ibGFja19z dGFydCA9IGluLT5wdHM7Ci0gICAgICAgICAgICBhdl9kaWN0X3NldCgmaW4tPm1ldGFkYXRhLCAi bGF2ZmkuYmxhY2tfc3RhcnQiLAotICAgICAgICAgICAgICAgIGF2X3RzMnRpbWVzdHIoaW4tPnB0 cywgJmluLT50aW1lX2Jhc2UpLCAwKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAocy0+Ymxh Y2tfc3RhcnQgIT0gQVZfTk9QVFNfVkFMVUUpIHsKLSAgICAgICAgcmVwb3J0X2JsYWNrX3JlZ2lv bihjdHgsIGluLT5wdHMpOwotICAgICAgICBhdl9kaWN0X3NldCgmaW4tPm1ldGFkYXRhLCAibGF2 ZmkuYmxhY2tfZW5kIiwKLSAgICAgICAgICAgIGF2X3RzMnRpbWVzdHIoaW4tPnB0cywgJmluLT50 aW1lX2Jhc2UpLCAwKTsKLSAgICAgICAgcy0+YmxhY2tfc3RhcnQgPSBBVl9OT1BUU19WQUxVRTsK LSAgICB9Ci19Ci0KLXN0YXRpYyBpbnQgYmxhY2tkZXRlY3RfdnVsa2FuX2ZpbHRlcl9mcmFtZShB VkZpbHRlckxpbmsgKmxpbmssIEFWRnJhbWUgKmluKQotewotICAgIGludCBlcnI7Ci0gICAgQVZG aWx0ZXJDb250ZXh0ICpjdHggPSBsaW5rLT5kc3Q7Ci0gICAgQmxhY2tEZXRlY3RWdWxrYW5Db250 ZXh0ICpzID0gY3R4LT5wcml2OwotICAgIEFWRmlsdGVyTGluayAqb3V0bGluayA9IGN0eC0+b3V0 cHV0c1swXTsKLQotICAgIFZrSW1hZ2VWaWV3IGluX3ZpZXdzW0FWX05VTV9EQVRBX1BPSU5URVJT XTsKLSAgICBWa0ltYWdlTWVtb3J5QmFycmllcjIgaW1nX2Jhcls0XTsKLSAgICBpbnQgbmJfaW1n X2JhciA9IDA7Ci0KLSAgICBGRlZ1bGthbkNvbnRleHQgKnZrY3R4ID0gJnMtPnZrY3R4OwotICAg IEZGVnVsa2FuRnVuY3Rpb25zICp2ayA9ICZ2a2N0eC0+dmtmbjsKLSAgICBGRlZrRXhlY0NvbnRl eHQgKmV4ZWMgPSBOVUxMOwotICAgIEFWQnVmZmVyUmVmICpzdW1fYnVmID0gTlVMTDsKLSAgICBG RlZrQnVmZmVyICpzdW1fdms7Ci0KLSAgICBCbGFja0RldGVjdEJ1ZiAqc3VtOwotICAgIEJsYWNr RGV0ZWN0UHVzaERhdGEgcHVzaF9kYXRhOwotCi0gICAgaWYgKGluLT5jb2xvcl9yYW5nZSA9PSBB VkNPTF9SQU5HRV9KUEVHIHx8IHMtPmFscGhhKSB7Ci0gICAgICAgIHB1c2hfZGF0YS50aHJlc2hv bGQgPSBzLT5waXhlbF9ibGFja190aDsKLSAgICB9IGVsc2UgewotICAgICAgICBjb25zdCBBVlBp eEZtdERlc2NyaXB0b3IgKmRlc2MgPSBhdl9waXhfZm10X2Rlc2NfZ2V0KHZrY3R4LT5pbnB1dF9m b3JtYXQpOwotICAgICAgICBjb25zdCBpbnQgZGVwdGggPSBkZXNjLT5jb21wWzBdLmRlcHRoOwot ICAgICAgICBjb25zdCBpbnQgeW1pbiA9IDE2ICA8PCAoZGVwdGggLSA4KTsKLSAgICAgICAgY29u c3QgaW50IHltYXggPSAyMzUgPDwgKGRlcHRoIC0gOCk7Ci0gICAgICAgIGNvbnN0IGludCBpbWF4 ID0gKDEgPDwgZGVwdGgpIC0gMTsKLSAgICAgICAgcHVzaF9kYXRhLnRocmVzaG9sZCA9IChzLT5w aXhlbF9ibGFja190aCAqICh5bWF4IC0geW1pbikgKyB5bWluKSAvIGltYXg7Ci0gICAgfQotCi0g ICAgaWYgKCFzLT5pbml0aWFsaXplZCkKLSAgICAgICAgUkVUKGluaXRfZmlsdGVyKGN0eCkpOwot Ci0gICAgZXJyID0gZmZfdmtfZ2V0X3Bvb2xlZF9idWZmZXIodmtjdHgsICZzLT5zdW1fYnVmX3Bv b2wsICZzdW1fYnVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZLX0JVRkZF Ul9VU0FHRV9UUkFOU0ZFUl9EU1RfQklUIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBWS19CVUZGRVJfVVNBR0VfU1RPUkFHRV9CVUZGRVJfQklULAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc2l6ZW9mKEJsYWNrRGV0ZWN0QnVmKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBWS19NRU1PUllfUFJPUEVSVFlfREVWSUNFX0xPQ0FMX0JJVCB8Ci0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgVktfTUVNT1JZX1BST1BFUlRZX0hPU1RfVklTSUJMRV9CSVQg fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZLX01FTU9SWV9QUk9QRVJUWV9I T1NUX0NPSEVSRU5UX0JJVCk7Ci0gICAgaWYgKGVyciA8IDApCi0gICAgICAgIHJldHVybiBlcnI7 Ci0gICAgc3VtX3ZrID0gKEZGVmtCdWZmZXIgKilzdW1fYnVmLT5kYXRhOwotICAgIHN1bSA9IChC bGFja0RldGVjdEJ1ZiAqKSBzdW1fdmstPm1hcHBlZF9tZW07Ci0KLSAgICBleGVjID0gZmZfdmtf ZXhlY19nZXQodmtjdHgsICZzLT5lKTsKLSAgICBmZl92a19leGVjX3N0YXJ0KHZrY3R4LCBleGVj KTsKLQotICAgIFJFVChmZl92a19leGVjX2FkZF9kZXBfZnJhbWUodmtjdHgsIGV4ZWMsIGluLAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfUElQRUxJTkVfU1RBR0VfMl9BTExf Q09NTUFORFNfQklULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfUElQRUxJ TkVfU1RBR0VfMl9DT01QVVRFX1NIQURFUl9CSVQpKTsKLSAgICBSRVQoZmZfdmtfY3JlYXRlX2lt YWdldmlld3ModmtjdHgsIGV4ZWMsIGluX3ZpZXdzLCBpbiwgRkZfVktfUkVQX0ZMT0FUKSk7Ci0K LSAgICBmZl92a19zaGFkZXJfdXBkYXRlX2ltZ19hcnJheSh2a2N0eCwgZXhlYywgJnMtPnNoZCwg aW4sIGluX3ZpZXdzLCAwLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZL X0lNQUdFX0xBWU9VVF9HRU5FUkFMLCBWS19OVUxMX0hBTkRMRSk7Ci0KLSAgICBmZl92a19mcmFt ZV9iYXJyaWVyKHZrY3R4LCBleGVjLCBpbiwgaW1nX2JhciwgJm5iX2ltZ19iYXIsCi0gICAgICAg ICAgICAgICAgICAgICAgICBWS19QSVBFTElORV9TVEFHRV8yX0FMTF9DT01NQU5EU19CSVQsCi0g ICAgICAgICAgICAgICAgICAgICAgICBWS19QSVBFTElORV9TVEFHRV8yX0NPTVBVVEVfU0hBREVS X0JJVCwKLSAgICAgICAgICAgICAgICAgICAgICAgIFZLX0FDQ0VTU19TSEFERVJfUkVBRF9CSVQs Ci0gICAgICAgICAgICAgICAgICAgICAgICBWS19JTUFHRV9MQVlPVVRfR0VORVJBTCwKLSAgICAg ICAgICAgICAgICAgICAgICAgIFZLX1FVRVVFX0ZBTUlMWV9JR05PUkVEKTsKLQotICAgIC8qIHpl cm8gc3VtIGJ1ZmZlciAqLwotICAgIHZrLT5DbWRQaXBlbGluZUJhcnJpZXIyKGV4ZWMtPmJ1Ziwg JihWa0RlcGVuZGVuY3lJbmZvKSB7Ci0gICAgICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVf VFlQRV9ERVBFTkRFTkNZX0lORk8sCi0gICAgICAgICAgICAucEJ1ZmZlck1lbW9yeUJhcnJpZXJz ID0gJihWa0J1ZmZlck1lbW9yeUJhcnJpZXIyKSB7Ci0gICAgICAgICAgICAgICAgLnNUeXBlID0g VktfU1RSVUNUVVJFX1RZUEVfQlVGRkVSX01FTU9SWV9CQVJSSUVSXzIsCi0gICAgICAgICAgICAg ICAgLnNyY1N0YWdlTWFzayA9IFZLX1BJUEVMSU5FX1NUQUdFXzJfTk9ORSwKLSAgICAgICAgICAg ICAgICAuZHN0U3RhZ2VNYXNrID0gVktfUElQRUxJTkVfU1RBR0VfMl9UUkFOU0ZFUl9CSVQsCi0g ICAgICAgICAgICAgICAgLmRzdEFjY2Vzc01hc2sgPSBWS19BQ0NFU1NfVFJBTlNGRVJfV1JJVEVf QklULAotICAgICAgICAgICAgICAgIC5zcmNRdWV1ZUZhbWlseUluZGV4ID0gVktfUVVFVUVfRkFN SUxZX0lHTk9SRUQsCi0gICAgICAgICAgICAgICAgLmRzdFF1ZXVlRmFtaWx5SW5kZXggPSBWS19R VUVVRV9GQU1JTFlfSUdOT1JFRCwKLSAgICAgICAgICAgICAgICAuYnVmZmVyID0gc3VtX3ZrLT5i dWYsCi0gICAgICAgICAgICAgICAgLnNpemUgPSBzdW1fdmstPnNpemUsCi0gICAgICAgICAgICAg ICAgLm9mZnNldCA9IDAsCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgLmJ1ZmZlck1lbW9y eUJhcnJpZXJDb3VudCA9IDEsCi0gICAgICAgIH0pOwotCi0gICAgdmstPkNtZEZpbGxCdWZmZXIo ZXhlYy0+YnVmLCBzdW1fdmstPmJ1ZiwgMCwgc3VtX3ZrLT5zaXplLCAweDApOwotCi0gICAgdmst PkNtZFBpcGVsaW5lQmFycmllcjIoZXhlYy0+YnVmLCAmKFZrRGVwZW5kZW5jeUluZm8pIHsKLSAg ICAgICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX0RFUEVOREVOQ1lfSU5GTywKLSAg ICAgICAgICAgIC5wSW1hZ2VNZW1vcnlCYXJyaWVycyA9IGltZ19iYXIsCi0gICAgICAgICAgICAu aW1hZ2VNZW1vcnlCYXJyaWVyQ291bnQgPSBuYl9pbWdfYmFyLAotICAgICAgICAgICAgLnBCdWZm ZXJNZW1vcnlCYXJyaWVycyA9ICYoVmtCdWZmZXJNZW1vcnlCYXJyaWVyMikgewotICAgICAgICAg ICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX0JVRkZFUl9NRU1PUllfQkFSUklFUl8y LAotICAgICAgICAgICAgICAgIC5zcmNTdGFnZU1hc2sgPSBWS19QSVBFTElORV9TVEFHRV8yX1RS QU5TRkVSX0JJVCwKLSAgICAgICAgICAgICAgICAuZHN0U3RhZ2VNYXNrID0gVktfUElQRUxJTkVf U1RBR0VfMl9DT01QVVRFX1NIQURFUl9CSVQsCi0gICAgICAgICAgICAgICAgLnNyY0FjY2Vzc01h c2sgPSBWS19BQ0NFU1NfVFJBTlNGRVJfV1JJVEVfQklULAotICAgICAgICAgICAgICAgIC5kc3RB Y2Nlc3NNYXNrID0gVktfQUNDRVNTXzJfU0hBREVSX1NUT1JBR0VfUkVBRF9CSVQgfAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfQUNDRVNTXzJfU0hBREVSX1NUT1JBR0VfV1JJ VEVfQklULAotICAgICAgICAgICAgICAgIC5zcmNRdWV1ZUZhbWlseUluZGV4ID0gVktfUVVFVUVf RkFNSUxZX0lHTk9SRUQsCi0gICAgICAgICAgICAgICAgLmRzdFF1ZXVlRmFtaWx5SW5kZXggPSBW S19RVUVVRV9GQU1JTFlfSUdOT1JFRCwKLSAgICAgICAgICAgICAgICAuYnVmZmVyID0gc3VtX3Zr LT5idWYsCi0gICAgICAgICAgICAgICAgLnNpemUgPSBzdW1fdmstPnNpemUsCi0gICAgICAgICAg ICAgICAgLm9mZnNldCA9IDAsCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgLmJ1ZmZlck1l bW9yeUJhcnJpZXJDb3VudCA9IDEsCi0gICAgICAgIH0pOwotCi0gICAgUkVUKGZmX3ZrX3NoYWRl cl91cGRhdGVfZGVzY19idWZmZXIoJnMtPnZrY3R4LCBleGVjLCAmcy0+c2hkLCAwLCAxLCAwLAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1bV92aywgMCwgc3VtX3Zr LT5zaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZLX0ZPUk1B VF9VTkRFRklORUQpKTsKLQotICAgIGZmX3ZrX2V4ZWNfYmluZF9zaGFkZXIodmtjdHgsIGV4ZWMs ICZzLT5zaGQpOwotICAgIGZmX3ZrX3NoYWRlcl91cGRhdGVfcHVzaF9jb25zdCh2a2N0eCwgZXhl YywgJnMtPnNoZCwgVktfU0hBREVSX1NUQUdFX0NPTVBVVEVfQklULAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAwLCBzaXplb2YocHVzaF9kYXRhKSwgJnB1c2hfZGF0YSk7Ci0K LSAgICB2ay0+Q21kRGlzcGF0Y2goZXhlYy0+YnVmLAotICAgICAgICAgICAgICAgICAgICBGRkFM SUdOKGluLT53aWR0aCwgIHMtPnNoZC5sZ19zaXplWzBdKSAvIHMtPnNoZC5sZ19zaXplWzBdLAot ICAgICAgICAgICAgICAgICAgICBGRkFMSUdOKGluLT5oZWlnaHQsIHMtPnNoZC5sZ19zaXplWzFd KSAvIHMtPnNoZC5sZ19zaXplWzFdLAotICAgICAgICAgICAgICAgICAgICBzLT5zaGQubGdfc2l6 ZVsyXSk7Ci0KLSAgICB2ay0+Q21kUGlwZWxpbmVCYXJyaWVyMihleGVjLT5idWYsICYoVmtEZXBl bmRlbmN5SW5mbykgewotICAgICAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfREVQ RU5ERU5DWV9JTkZPLAotICAgICAgICAgICAgLnBCdWZmZXJNZW1vcnlCYXJyaWVycyA9ICYoVmtC dWZmZXJNZW1vcnlCYXJyaWVyMikgewotICAgICAgICAgICAgICAgIC5zVHlwZSA9IFZLX1NUUlVD VFVSRV9UWVBFX0JVRkZFUl9NRU1PUllfQkFSUklFUl8yLAotICAgICAgICAgICAgICAgIC5zcmNT dGFnZU1hc2sgPSBWS19QSVBFTElORV9TVEFHRV8yX0NPTVBVVEVfU0hBREVSX0JJVCwKLSAgICAg ICAgICAgICAgICAuZHN0U3RhZ2VNYXNrID0gVktfUElQRUxJTkVfU1RBR0VfMl9IT1NUX0JJVCwK LSAgICAgICAgICAgICAgICAuc3JjQWNjZXNzTWFzayA9IFZLX0FDQ0VTU18yX1NIQURFUl9TVE9S QUdFX1JFQURfQklUIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZLX0FDQ0VT U18yX1NIQURFUl9TVE9SQUdFX1dSSVRFX0JJVCwKLSAgICAgICAgICAgICAgICAuZHN0QWNjZXNz TWFzayA9IFZLX0FDQ0VTU19IT1NUX1JFQURfQklULAotICAgICAgICAgICAgICAgIC5zcmNRdWV1 ZUZhbWlseUluZGV4ID0gVktfUVVFVUVfRkFNSUxZX0lHTk9SRUQsCi0gICAgICAgICAgICAgICAg LmRzdFF1ZXVlRmFtaWx5SW5kZXggPSBWS19RVUVVRV9GQU1JTFlfSUdOT1JFRCwKLSAgICAgICAg ICAgICAgICAuYnVmZmVyID0gc3VtX3ZrLT5idWYsCi0gICAgICAgICAgICAgICAgLnNpemUgPSBz dW1fdmstPnNpemUsCi0gICAgICAgICAgICAgICAgLm9mZnNldCA9IDAsCi0gICAgICAgICAgICB9 LAotICAgICAgICAgICAgLmJ1ZmZlck1lbW9yeUJhcnJpZXJDb3VudCA9IDEsCi0gICAgICAgIH0p OwotCi0gICAgUkVUKGZmX3ZrX2V4ZWNfc3VibWl0KHZrY3R4LCBleGVjKSk7Ci0gICAgZmZfdmtf ZXhlY193YWl0KHZrY3R4LCBleGVjKTsKLSAgICBldmFsdWF0ZShsaW5rLCBpbiwgc3VtKTsKLQot ICAgIGF2X2J1ZmZlcl91bnJlZigmc3VtX2J1Zik7Ci0gICAgcmV0dXJuIGZmX2ZpbHRlcl9mcmFt ZShvdXRsaW5rLCBpbik7Ci0KLWZhaWw6Ci0gICAgaWYgKGV4ZWMpCi0gICAgICAgIGZmX3ZrX2V4 ZWNfZGlzY2FyZF9kZXBzKCZzLT52a2N0eCwgZXhlYyk7Ci0gICAgYXZfZnJhbWVfZnJlZSgmaW4p OwotICAgIGF2X2J1ZmZlcl91bnJlZigmc3VtX2J1Zik7Ci0gICAgcmV0dXJuIGVycjsKLX0KLQot c3RhdGljIHZvaWQgYmxhY2tkZXRlY3RfdnVsa2FuX3VuaW5pdChBVkZpbHRlckNvbnRleHQgKmF2 Y3R4KQotewotICAgIEJsYWNrRGV0ZWN0VnVsa2FuQ29udGV4dCAqcyA9IGF2Y3R4LT5wcml2Owot ICAgIEFWRmlsdGVyTGluayAqaW5saW5rID0gYXZjdHgtPmlucHV0c1swXTsKLSAgICBGaWx0ZXJM aW5rICppbmwgPSBmZl9maWx0ZXJfbGluayhpbmxpbmspOwotICAgIEZGVnVsa2FuQ29udGV4dCAq dmtjdHggPSAmcy0+dmtjdHg7Ci0KLSAgICByZXBvcnRfYmxhY2tfcmVnaW9uKGF2Y3R4LCBpbmwt PmN1cnJlbnRfcHRzKTsKLQotICAgIGZmX3ZrX2V4ZWNfcG9vbF9mcmVlKHZrY3R4LCAmcy0+ZSk7 Ci0gICAgZmZfdmtfc2hhZGVyX2ZyZWUodmtjdHgsICZzLT5zaGQpOwotCi0gICAgYXZfYnVmZmVy X3Bvb2xfdW5pbml0KCZzLT5zdW1fYnVmX3Bvb2wpOwotCi0gICAgZmZfdmtfdW5pbml0KCZzLT52 a2N0eCk7Ci0KLSAgICBzLT5pbml0aWFsaXplZCA9IDA7Ci19Ci0KLXN0YXRpYyBpbnQgY29uZmln X291dHB1dChBVkZpbHRlckxpbmsgKm91dGxpbmspCi17Ci0gICAgQVZGaWx0ZXJDb250ZXh0ICpj dHggPSBvdXRsaW5rLT5zcmM7Ci0gICAgQmxhY2tEZXRlY3RWdWxrYW5Db250ZXh0ICpzID0gY3R4 LT5wcml2OwotICAgIEZGVnVsa2FuQ29udGV4dCAqdmtjdHggPSAmcy0+dmtjdHg7Ci0gICAgY29u c3QgQVZQaXhGbXREZXNjcmlwdG9yICpkZXNjID0gYXZfcGl4X2ZtdF9kZXNjX2dldCh2a2N0eC0+ aW5wdXRfZm9ybWF0KTsKLQotICAgIGlmIChzLT5hbHBoYSAmJiAhKGRlc2MtPmZsYWdzICYgQVZf UElYX0ZNVF9GTEFHX0FMUEhBKSkgewotICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1Is ICJJbnB1dCBmb3JtYXQgJXMgZG9lcyBub3QgaGF2ZSBhbiBhbHBoYSBjaGFubmVsXG4iLAotICAg ICAgICAgICAgICAgYXZfZ2V0X3BpeF9mbXRfbmFtZSh2a2N0eC0+aW5wdXRfZm9ybWF0KSk7Ci0g ICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7Ci0gICAgfQotCi0gICAgaWYgKGRlc2MtPmZs YWdzICYgKEFWX1BJWF9GTVRfRkxBR19SR0IgfCBBVl9QSVhfRk1UX0ZMQUdfWFlaKSB8fAotICAg ICAgICAhKGRlc2MtPmZsYWdzICYgQVZfUElYX0ZNVF9GTEFHX1BMQU5BUikpIHsKLSAgICAgICAg YXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiSW5wdXQgZm9ybWF0ICVzIGlzIG5vdCBwbGFuYXIg WVVWXG4iLAotICAgICAgICAgICAgICAgYXZfZ2V0X3BpeF9mbXRfbmFtZSh2a2N0eC0+aW5wdXRf Zm9ybWF0KSk7Ci0gICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7Ci0gICAgfQotCi0gICAg cmV0dXJuIGZmX3ZrX2ZpbHRlcl9jb25maWdfb3V0cHV0KG91dGxpbmspOwotfQotCi0jZGVmaW5l IE9GRlNFVCh4KSBvZmZzZXRvZihCbGFja0RldGVjdFZ1bGthbkNvbnRleHQsIHgpCi0jZGVmaW5l IEZMQUdTIChBVl9PUFRfRkxBR19GSUxURVJJTkdfUEFSQU0gfCBBVl9PUFRfRkxBR19WSURFT19Q QVJBTSkKLXN0YXRpYyBjb25zdCBBVk9wdGlvbiBibGFja2RldGVjdF92dWxrYW5fb3B0aW9uc1td ID0gewotICAgIHsgImQiLCAgICAgICAgICAgICAgICAgICJzZXQgbWluaW11bSBkZXRlY3RlZCBi bGFjayBkdXJhdGlvbiBpbiBzZWNvbmRzIiwgT0ZGU0VUKGJsYWNrX21pbl9kdXJhdGlvbl90aW1l KSwgQVZfT1BUX1RZUEVfRE9VQkxFLCB7LmRibD0yfSwgMCwgREJMX01BWCwgRkxBR1MgfSwKLSAg ICB7ICJibGFja19taW5fZHVyYXRpb24iLCAic2V0IG1pbmltdW0gZGV0ZWN0ZWQgYmxhY2sgZHVy YXRpb24gaW4gc2Vjb25kcyIsIE9GRlNFVChibGFja19taW5fZHVyYXRpb25fdGltZSksIEFWX09Q VF9UWVBFX0RPVUJMRSwgey5kYmw9Mn0sIDAsIERCTF9NQVgsIEZMQUdTIH0sCi0gICAgeyAicGlj dHVyZV9ibGFja19yYXRpb190aCIsICJzZXQgdGhlIHBpY3R1cmUgYmxhY2sgcmF0aW8gdGhyZXNo b2xkIiwgT0ZGU0VUKHBpY3R1cmVfYmxhY2tfcmF0aW9fdGgpLCBBVl9PUFRfVFlQRV9ET1VCTEUs IHsuZGJsPS45OH0sIDAsIDEsIEZMQUdTIH0sCi0gICAgeyAicGljX3RoIiwgICAgICAgICAgICAg ICAgICJzZXQgdGhlIHBpY3R1cmUgYmxhY2sgcmF0aW8gdGhyZXNob2xkIiwgT0ZGU0VUKHBpY3R1 cmVfYmxhY2tfcmF0aW9fdGgpLCBBVl9PUFRfVFlQRV9ET1VCTEUsIHsuZGJsPS45OH0sIDAsIDEs IEZMQUdTIH0sCi0gICAgeyAicGl4ZWxfYmxhY2tfdGgiLCAic2V0IHRoZSBwaXhlbCBibGFjayB0 aHJlc2hvbGQiLCBPRkZTRVQocGl4ZWxfYmxhY2tfdGgpLCBBVl9PUFRfVFlQRV9ET1VCTEUsIHsu ZGJsPS4xMH0sIDAsIDEsIEZMQUdTIH0sCi0gICAgeyAicGl4X3RoIiwgICAgICAgICAic2V0IHRo ZSBwaXhlbCBibGFjayB0aHJlc2hvbGQiLCBPRkZTRVQocGl4ZWxfYmxhY2tfdGgpLCBBVl9PUFRf VFlQRV9ET1VCTEUsIHsuZGJsPS4xMH0sIDAsIDEsIEZMQUdTIH0sCi0gICAgeyAiYWxwaGEiLCAg ICAgICAgICAiY2hlY2sgYWxwaGEgaW5zdGVhZCBvZiBsdW1hIiwgT0ZGU0VUKGFscGhhKSwgQVZf T1BUX1RZUEVfQk9PTCwgey5pNjQ9MH0sIDAsIDEsIEZMQUdTIH0sCi0gICAgeyBOVUxMIH0KLX07 Ci0KLUFWRklMVEVSX0RFRklORV9DTEFTUyhibGFja2RldGVjdF92dWxrYW4pOwotCi1zdGF0aWMg Y29uc3QgQVZGaWx0ZXJQYWQgYmxhY2tkZXRlY3RfdnVsa2FuX2lucHV0c1tdID0gewotICAgIHsK LSAgICAgICAgLm5hbWUgICAgICAgICA9ICJkZWZhdWx0IiwKLSAgICAgICAgLnR5cGUgICAgICAg ICA9IEFWTUVESUFfVFlQRV9WSURFTywKLSAgICAgICAgLmZpbHRlcl9mcmFtZSA9ICZibGFja2Rl dGVjdF92dWxrYW5fZmlsdGVyX2ZyYW1lLAotICAgICAgICAuY29uZmlnX3Byb3BzID0gJmZmX3Zr X2ZpbHRlcl9jb25maWdfaW5wdXQsCi0gICAgfSwKLX07Ci0KLXN0YXRpYyBjb25zdCBBVkZpbHRl clBhZCBibGFja2RldGVjdF92dWxrYW5fb3V0cHV0c1tdID0gewotICAgIHsKLSAgICAgICAgLm5h bWUgPSAiZGVmYXVsdCIsCi0gICAgICAgIC50eXBlID0gQVZNRURJQV9UWVBFX1ZJREVPLAotICAg ICAgICAuY29uZmlnX3Byb3BzID0gJmNvbmZpZ19vdXRwdXQsCi0gICAgfSwKLX07Ci0KLWNvbnN0 IEZGRmlsdGVyIGZmX3ZmX2JsYWNrZGV0ZWN0X3Z1bGthbiA9IHsKLSAgICAucC5uYW1lICAgICAg ICAgPSAiYmxhY2tkZXRlY3RfdnVsa2FuIiwKLSAgICAucC5kZXNjcmlwdGlvbiAgPSBOVUxMX0lG X0NPTkZJR19TTUFMTCgiRGV0ZWN0IHZpZGVvIGludGVydmFscyB0aGF0IGFyZSAoYWxtb3N0KSBi bGFjay4iKSwKLSAgICAucC5wcml2X2NsYXNzICAgPSAmYmxhY2tkZXRlY3RfdnVsa2FuX2NsYXNz LAotICAgIC5wLmZsYWdzICAgICAgICA9IEFWRklMVEVSX0ZMQUdfSFdERVZJQ0UsCi0gICAgLnBy aXZfc2l6ZSAgICAgID0gc2l6ZW9mKEJsYWNrRGV0ZWN0VnVsa2FuQ29udGV4dCksCi0gICAgLmlu aXQgICAgICAgICAgID0gJmZmX3ZrX2ZpbHRlcl9pbml0LAotICAgIC51bmluaXQgICAgICAgICA9 ICZibGFja2RldGVjdF92dWxrYW5fdW5pbml0LAotICAgIEZJTFRFUl9JTlBVVFMoYmxhY2tkZXRl Y3RfdnVsa2FuX2lucHV0cyksCi0gICAgRklMVEVSX09VVFBVVFMoYmxhY2tkZXRlY3RfdnVsa2Fu X291dHB1dHMpLAotICAgIEZJTFRFUl9TSU5HTEVfUElYRk1UKEFWX1BJWF9GTVRfVlVMS0FOKSwK LSAgICAuZmxhZ3NfaW50ZXJuYWwgPSBGRl9GSUxURVJfRkxBR19IV0ZSQU1FX0FXQVJFLAotfTsK LS0gCjIuNDkuMQoKCkZyb20gMzIzODRkZjM4YzkzYmJiN2Y2YWEzMTc0ODJlODAzMjVlYTBhZjY4 YiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKRnJvbTogSmFtYWlrYTEgPGx1a2FzemN6MThAd3Au cGw+CkRhdGU6IFdlZCwgMyBTZXAgMjAyNSAxMjo0ODowNSArMDAwMApTdWJqZWN0OiBbUEFUQ0gg MDA0LzExOF0gQ2hhbmdpbmcgdnVsa2FuIGZpbGUgZGlyZWN0b3J5CgotLS0KIGxpYmF2ZmlsdGVy L3Z1bGthbi92Zl9ibGFja2RldGVjdF92dWxrYW4uYyB8IDQ0NSArKysrKysrKysrKysrKysrKysr KysKIDEgZmlsZSBjaGFuZ2VkLCA0NDUgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0 IGxpYmF2ZmlsdGVyL3Z1bGthbi92Zl9ibGFja2RldGVjdF92dWxrYW4uYwoKZGlmZiAtLWdpdCBh L2xpYmF2ZmlsdGVyL3Z1bGthbi92Zl9ibGFja2RldGVjdF92dWxrYW4uYyBiL2xpYmF2ZmlsdGVy L3Z1bGthbi92Zl9ibGFja2RldGVjdF92dWxrYW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwLi5iNzMzMGMyOTdlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYXZmaWx0ZXIv dnVsa2FuL3ZmX2JsYWNrZGV0ZWN0X3Z1bGthbi5jCkBAIC0wLDAgKzEsNDQ1IEBACisvKgorICog Q29weXJpZ2h0IDIwMjUgKGMpIE5pa2xhcyBIYWFzCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQg b2YgRkZtcGVnLgorICoKKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExp Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogRkZt cGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIEZG bXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwg SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0x MzAxIFVTQQorICovCisKKyNpbmNsdWRlIDxmbG9hdC5oPgorI2luY2x1ZGUgIi4uLy4uL2xpYmF2 dXRpbC92dWxrYW4vdnVsa2FuX3NwaXJ2LmgiCisjaW5jbHVkZSAibGliYXZ1dGlsL29wdC5oIgor I2luY2x1ZGUgImxpYmF2dXRpbC90aW1lc3RhbXAuaCIKKyNpbmNsdWRlICJ2dWxrYW5fZmlsdGVy LmgiCisKKyNpbmNsdWRlICJsaWJhdmZpbHRlci9maWx0ZXJzLmgiCisjaW5jbHVkZSAibGliYXZm aWx0ZXIvdmlkZW8uaCIKKwordHlwZWRlZiBzdHJ1Y3QgQmxhY2tEZXRlY3RWdWxrYW5Db250ZXh0 IHsKKyAgICBGRlZ1bGthbkNvbnRleHQgdmtjdHg7CisKKyAgICBpbnQgaW5pdGlhbGl6ZWQ7Cisg ICAgRkZWa0V4ZWNQb29sIGU7CisgICAgQVZWdWxrYW5EZXZpY2VRdWV1ZUZhbWlseSAqcWY7Cisg ICAgRkZWdWxrYW5TaGFkZXIgc2hkOworICAgIEFWQnVmZmVyUG9vbCAqc3VtX2J1Zl9wb29sOwor CisgICAgZG91YmxlIGJsYWNrX21pbl9kdXJhdGlvbl90aW1lOworICAgIGRvdWJsZSBwaWN0dXJl X2JsYWNrX3JhdGlvX3RoOworICAgIGRvdWJsZSBwaXhlbF9ibGFja190aDsKKyAgICBpbnQgICAg YWxwaGE7CisKKyAgICBpbnQ2NF90IGJsYWNrX3N0YXJ0OworfSBCbGFja0RldGVjdFZ1bGthbkNv bnRleHQ7CisKK3R5cGVkZWYgc3RydWN0IEJsYWNrRGV0ZWN0UHVzaERhdGEgeworICAgIGZsb2F0 IHRocmVzaG9sZDsKK30gQmxhY2tEZXRlY3RQdXNoRGF0YTsKKwordHlwZWRlZiBzdHJ1Y3QgQmxh Y2tEZXRlY3RCdWYgeworI2RlZmluZSBTTElDRVMgMTYKKyAgICB1aW50MzJfdCBzbGljZV9zdW1b U0xJQ0VTXTsKK30gQmxhY2tEZXRlY3RCdWY7CisKK3N0YXRpYyBhdl9jb2xkIGludCBpbml0X2Zp bHRlcihBVkZpbHRlckNvbnRleHQgKmN0eCkKK3sKKyAgICBpbnQgZXJyOworICAgIHVpbnQ4X3Qg KnNwdl9kYXRhOworICAgIHNpemVfdCBzcHZfbGVuOworICAgIHZvaWQgKnNwdl9vcGFxdWUgPSBO VUxMOworICAgIEJsYWNrRGV0ZWN0VnVsa2FuQ29udGV4dCAqcyA9IGN0eC0+cHJpdjsKKyAgICBG RlZ1bGthbkNvbnRleHQgKnZrY3R4ID0gJnMtPnZrY3R4OworICAgIEZGVnVsa2FuU2hhZGVyICpz aGQ7CisgICAgRkZWa1NQSVJWQ29tcGlsZXIgKnNwdjsKKyAgICBGRlZ1bGthbkRlc2NyaXB0b3JT ZXRCaW5kaW5nICpkZXNjOworICAgIGNvbnN0IGludCBwbGFuZSA9IHMtPmFscGhhID8gMyA6IDA7 CisKKyAgICBjb25zdCBBVlBpeEZtdERlc2NyaXB0b3IgKnBpeGRlc2MgPSBhdl9waXhfZm10X2Rl c2NfZ2V0KHMtPnZrY3R4LmlucHV0X2Zvcm1hdCk7CisgICAgaWYgKHBpeGRlc2MtPmZsYWdzICYg QVZfUElYX0ZNVF9GTEFHX1JHQikgeworICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1Is ICJSR0IgaW5wdXRzIGFyZSBub3Qgc3VwcG9ydGVkXG4iKTsKKyAgICAgICAgcmV0dXJuIEFWRVJS T1IoRU5PVFNVUCk7CisgICAgfQorCisgICAgc3B2ID0gZmZfdmtfc3BpcnZfaW5pdCgpOworICAg IGlmICghc3B2KSB7CisgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIlVuYWJsZSB0 byBpbml0aWFsaXplIFNQSVItViBjb21waWxlciFcbiIpOworICAgICAgICByZXR1cm4gQVZFUlJP Ul9FWFRFUk5BTDsKKyAgICB9CisKKyAgICBzLT5xZiA9IGZmX3ZrX3FmX2ZpbmQodmtjdHgsIFZL X1FVRVVFX0NPTVBVVEVfQklULCAwKTsKKyAgICBpZiAoIXMtPnFmKSB7CisgICAgICAgIGF2X2xv ZyhjdHgsIEFWX0xPR19FUlJPUiwgIkRldmljZSBoYXMgbm8gY29tcHV0ZSBxdWV1ZXNcbiIpOwor ICAgICAgICBlcnIgPSBBVkVSUk9SKEVOT1RTVVApOworICAgICAgICBnb3RvIGZhaWw7CisgICAg fQorCisgICAgUkVUKGZmX3ZrX2V4ZWNfcG9vbF9pbml0KHZrY3R4LCBzLT5xZiwgJnMtPmUsIHMt PnFmLT5udW0qNCwgMCwgMCwgMCwgTlVMTCkpOworICAgIFJFVChmZl92a19zaGFkZXJfaW5pdCh2 a2N0eCwgJnMtPnNoZCwgImJsYWNrZGV0ZWN0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg VktfU0hBREVSX1NUQUdFX0NPTVBVVEVfQklULAorICAgICAgICAgICAgICAgICAgICAgICAgICAo Y29uc3QgY2hhciAqW10pIHsgIkdMX0tIUl9zaGFkZXJfc3ViZ3JvdXBfYmFsbG90IiB9LCAxLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAzMiwgMzIsIDEsCisgICAgICAgICAgICAgICAgICAg ICAgICAgIDApKTsKKyAgICBzaGQgPSAmcy0+c2hkOworCisgICAgR0xTTEMoMCwgbGF5b3V0KHB1 c2hfY29uc3RhbnQsIHN0ZDQzMCkgdW5pZm9ybSBwdXNoQ29uc3RhbnRzIHsgICAgICAgICAgICAp OworICAgIEdMU0xDKDEsICAgICBmbG9hdCB0aHJlc2hvbGQ7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBHTFNMQygwLCB9OyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisKKyAg ICBmZl92a19zaGFkZXJfYWRkX3B1c2hfY29uc3Qoc2hkLCAwLCBzaXplb2YoQmxhY2tEZXRlY3RQ dXNoRGF0YSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZLX1NIQURFUl9TVEFH RV9DT01QVVRFX0JJVCk7CisKKyAgICBkZXNjID0gKEZGVnVsa2FuRGVzY3JpcHRvclNldEJpbmRp bmcgW10pIHsKKyAgICAgICAgeworICAgICAgICAgICAgLm5hbWUgICAgICAgPSAiaW5wdXRfaW1n IiwKKyAgICAgICAgICAgIC50eXBlICAgICAgID0gVktfREVTQ1JJUFRPUl9UWVBFX1NUT1JBR0Vf SU1BR0UsCisgICAgICAgICAgICAubWVtX2xheW91dCA9IGZmX3ZrX3NoYWRlcl9yZXBfZm10KHMt PnZrY3R4LmlucHV0X2Zvcm1hdCwgRkZfVktfUkVQX0ZMT0FUKSwKKyAgICAgICAgICAgIC5tZW1f cXVhbGkgID0gInJlYWRvbmx5IiwKKyAgICAgICAgICAgIC5kaW1lbnNpb25zID0gMiwKKyAgICAg ICAgICAgIC5lbGVtcyAgICAgID0gYXZfcGl4X2ZtdF9jb3VudF9wbGFuZXMocy0+dmtjdHguaW5w dXRfZm9ybWF0KSwKKyAgICAgICAgICAgIC5zdGFnZXMgICAgID0gVktfU0hBREVSX1NUQUdFX0NP TVBVVEVfQklULAorICAgICAgICB9LCB7CisgICAgICAgICAgICAubmFtZSAgICAgICAgPSAic3Vt X2J1ZmZlciIsCisgICAgICAgICAgICAudHlwZSAgICAgICAgPSBWS19ERVNDUklQVE9SX1RZUEVf U1RPUkFHRV9CVUZGRVIsCisgICAgICAgICAgICAuc3RhZ2VzICAgICAgPSBWS19TSEFERVJfU1RB R0VfQ09NUFVURV9CSVQsCisgICAgICAgICAgICAuYnVmX2NvbnRlbnQgPSAidWludCBzbGljZV9z dW1bXTsiLAorICAgICAgICB9CisgICAgfTsKKworICAgIFJFVChmZl92a19zaGFkZXJfYWRkX2Rl c2NyaXB0b3Jfc2V0KHZrY3R4LCAmcy0+c2hkLCBkZXNjLCAyLCAwLCAwKSk7CisKKyAgICBHTFNM QygwLCBzaGFyZWQgdWludCB3Z19zdW07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICk7CisgICAgR0xTTEMoMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgIEdMU0xDKDAsIHZv aWQgbWFpbigpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKTsKKyAgICBHTFNMQygwLCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgR0xTTEMoMSwgICAgIHdnX3N1 bSA9IDB1OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAp OworICAgIEdMU0xDKDEsICAgICBiYXJyaWVyKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBHTFNMQygwLCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAg R0xTTEMoMSwgICAgIGNvbnN0IGl2ZWMyIHBvcyA9IGl2ZWMyKGdsX0dsb2JhbEludm9jYXRpb25J RC54eSk7ICAgICAgICAgICApOworICAgIEdMU0xGKDEsICAgICBpZiAoIUlTX1dJVEhJTihwb3Ms IGltYWdlU2l6ZShpbnB1dF9pbWdbJWRdKSkpICAgICAgICAgICAgICAgLHBsYW5lKTsKKyAgICBH TFNMQygyLCAgICAgICAgIHJldHVybjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICk7CisgICAgR0xTTEYoMSwgICAgIGZsb2F0IHZhbHVlID0gaW1hZ2VM b2FkKGlucHV0X2ltZ1slZF0sIHBvcykueDsgICAgICAgICAgICAgICAscGxhbmUpOworICAgIEdM U0xDKDEsICAgICB1dmVjNCBpc2JsYWNrID0gc3ViZ3JvdXBCYWxsb3QodmFsdWUgPD0gdGhyZXNo b2xkKTsgICAgICAgICAgKTsKKyAgICBHTFNMQygxLCAgICAgaWYgKHN1Ymdyb3VwRWxlY3QoKSkg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgR0xTTEMoMiwg ICAgICAgICBhdG9taWNBZGQod2dfc3VtLCBzdWJncm91cEJhbGxvdEJpdENvdW50KGlzYmxhY2sp KTsgICAgICApOworICAgIEdMU0xDKDEsICAgICBiYXJyaWVyKCk7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBHTFNMQygxLCAgICAgaWYg KGdsX0xvY2FsSW52b2NhdGlvbkluZGV4ID09IDB1KSAgICAgICAgICAgICAgICAgICAgICAgICAg ICk7CisgICAgR0xTTEYoMiwgICAgICAgICBhdG9taWNBZGQoc2xpY2Vfc3VtW2dsX1dvcmtHcm91 cElELnggJSUgJWR1XSwgd2dfc3VtKTsgICAsU0xJQ0VTKTsKKyAgICBHTFNMQygwLCB9ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICk7CisKKyAgICBSRVQoc3B2LT5jb21waWxlX3NoYWRlcih2a2N0eCwgc3B2LCAmcy0+c2hkLCAm c3B2X2RhdGEsICZzcHZfbGVuLCAibWFpbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg JnNwdl9vcGFxdWUpKTsKKyAgICBSRVQoZmZfdmtfc2hhZGVyX2xpbmsodmtjdHgsICZzLT5zaGQs IHNwdl9kYXRhLCBzcHZfbGVuLCAibWFpbiIpKTsKKworICAgIFJFVChmZl92a19zaGFkZXJfcmVn aXN0ZXJfZXhlYyh2a2N0eCwgJnMtPmUsICZzLT5zaGQpKTsKKworICAgIHMtPmJsYWNrX3N0YXJ0 ID0gQVZfTk9QVFNfVkFMVUU7CisgICAgcy0+aW5pdGlhbGl6ZWQgPSAxOworCitmYWlsOgorICAg IGlmIChzcHZfb3BhcXVlKQorICAgICAgICBzcHYtPmZyZWVfc2hhZGVyKHNwdiwgJnNwdl9vcGFx dWUpOworICAgIGlmIChzcHYpCisgICAgICAgIHNwdi0+dW5pbml0KCZzcHYpOworCisgICAgcmV0 dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgcmVwb3J0X2JsYWNrX3JlZ2lvbihBVkZpbHRlckNv bnRleHQgKmN0eCwgaW50NjRfdCBibGFja19lbmQpCit7CisgICAgQmxhY2tEZXRlY3RWdWxrYW5D b250ZXh0ICpzID0gY3R4LT5wcml2OworICAgIGNvbnN0IEFWRmlsdGVyTGluayAqaW5saW5rID0g Y3R4LT5pbnB1dHNbMF07CisgICAgaWYgKHMtPmJsYWNrX3N0YXJ0ID09IEFWX05PUFRTX1ZBTFVF KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoKGJsYWNrX2VuZCAtIHMtPmJsYWNrX3N0YXJ0 KSA+PSBzLT5ibGFja19taW5fZHVyYXRpb25fdGltZSAvIGF2X3EyZChpbmxpbmstPnRpbWVfYmFz ZSkpIHsKKyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0lORk8sCisgICAgICAgICAgICAgICAi YmxhY2tfc3RhcnQ6JXMgYmxhY2tfZW5kOiVzIGJsYWNrX2R1cmF0aW9uOiVzXG4iLAorICAgICAg ICAgICAgICAgYXZfdHMydGltZXN0cihzLT5ibGFja19zdGFydCwgJmlubGluay0+dGltZV9iYXNl KSwKKyAgICAgICAgICAgICAgIGF2X3RzMnRpbWVzdHIoYmxhY2tfZW5kLCAmaW5saW5rLT50aW1l X2Jhc2UpLAorICAgICAgICAgICAgICAgYXZfdHMydGltZXN0cihibGFja19lbmQgLSBzLT5ibGFj a19zdGFydCwgJmlubGluay0+dGltZV9iYXNlKSk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBl dmFsdWF0ZShBVkZpbHRlckxpbmsgKmxpbmssIEFWRnJhbWUgKmluLAorICAgICAgICAgICAgICAg ICAgICAgY29uc3QgQmxhY2tEZXRlY3RCdWYgKnN1bSkKK3sKKyAgICBBVkZpbHRlckNvbnRleHQg KmN0eCA9IGxpbmstPmRzdDsKKyAgICBCbGFja0RldGVjdFZ1bGthbkNvbnRleHQgKnMgPSBjdHgt PnByaXY7CisgICAgRmlsdGVyTGluayAqaW5sID0gZmZfZmlsdGVyX2xpbmsobGluayk7CisgICAg dWludDY0X3QgbmJfYmxhY2tfcGl4ZWxzID0gMDsKKyAgICBkb3VibGUgcmF0aW87CisKKyAgICBm b3IgKGludCBpID0gMDsgaSA8IEZGX0FSUkFZX0VMRU1TKHN1bS0+c2xpY2Vfc3VtKTsgaSsrKQor ICAgICAgICBuYl9ibGFja19waXhlbHMgKz0gc3VtLT5zbGljZV9zdW1baV07CisKKyAgICByYXRp byA9IChkb3VibGUpIG5iX2JsYWNrX3BpeGVscyAvIChsaW5rLT53ICogbGluay0+aCk7CisKKyAg ICBhdl9sb2coY3R4LCBBVl9MT0dfREVCVUcsCisgICAgICAgICAgICJmcmFtZTolIlBSSWQ2NCIg cGljdHVyZV9ibGFja19yYXRpbzolZiBwdHM6JXMgdDolcyB0eXBlOiVjXG4iLAorICAgICAgICAg ICBpbmwtPmZyYW1lX2NvdW50X291dCwgcmF0aW8sCisgICAgICAgICAgIGF2X3RzMnN0cihpbi0+ cHRzKSwgYXZfdHMydGltZXN0cihpbi0+cHRzLCAmaW4tPnRpbWVfYmFzZSksCisgICAgICAgICAg IGF2X2dldF9waWN0dXJlX3R5cGVfY2hhcihpbi0+cGljdF90eXBlKSk7CisKKyAgICBpZiAocmF0 aW8gPj0gcy0+cGljdHVyZV9ibGFja19yYXRpb190aCkgeworICAgICAgICBpZiAocy0+YmxhY2tf c3RhcnQgPT0gQVZfTk9QVFNfVkFMVUUpIHsKKyAgICAgICAgICAgIHMtPmJsYWNrX3N0YXJ0ID0g aW4tPnB0czsKKyAgICAgICAgICAgIGF2X2RpY3Rfc2V0KCZpbi0+bWV0YWRhdGEsICJsYXZmaS5i bGFja19zdGFydCIsCisgICAgICAgICAgICAgICAgYXZfdHMydGltZXN0cihpbi0+cHRzLCAmaW4t PnRpbWVfYmFzZSksIDApOworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChzLT5ibGFja19zdGFy dCAhPSBBVl9OT1BUU19WQUxVRSkgeworICAgICAgICByZXBvcnRfYmxhY2tfcmVnaW9uKGN0eCwg aW4tPnB0cyk7CisgICAgICAgIGF2X2RpY3Rfc2V0KCZpbi0+bWV0YWRhdGEsICJsYXZmaS5ibGFj a19lbmQiLAorICAgICAgICAgICAgYXZfdHMydGltZXN0cihpbi0+cHRzLCAmaW4tPnRpbWVfYmFz ZSksIDApOworICAgICAgICBzLT5ibGFja19zdGFydCA9IEFWX05PUFRTX1ZBTFVFOworICAgIH0K K30KKworc3RhdGljIGludCBibGFja2RldGVjdF92dWxrYW5fZmlsdGVyX2ZyYW1lKEFWRmlsdGVy TGluayAqbGluaywgQVZGcmFtZSAqaW4pCit7CisgICAgaW50IGVycjsKKyAgICBBVkZpbHRlckNv bnRleHQgKmN0eCA9IGxpbmstPmRzdDsKKyAgICBCbGFja0RldGVjdFZ1bGthbkNvbnRleHQgKnMg PSBjdHgtPnByaXY7CisgICAgQVZGaWx0ZXJMaW5rICpvdXRsaW5rID0gY3R4LT5vdXRwdXRzWzBd OworCisgICAgVmtJbWFnZVZpZXcgaW5fdmlld3NbQVZfTlVNX0RBVEFfUE9JTlRFUlNdOworICAg IFZrSW1hZ2VNZW1vcnlCYXJyaWVyMiBpbWdfYmFyWzRdOworICAgIGludCBuYl9pbWdfYmFyID0g MDsKKworICAgIEZGVnVsa2FuQ29udGV4dCAqdmtjdHggPSAmcy0+dmtjdHg7CisgICAgRkZWdWxr YW5GdW5jdGlvbnMgKnZrID0gJnZrY3R4LT52a2ZuOworICAgIEZGVmtFeGVjQ29udGV4dCAqZXhl YyA9IE5VTEw7CisgICAgQVZCdWZmZXJSZWYgKnN1bV9idWYgPSBOVUxMOworICAgIEZGVmtCdWZm ZXIgKnN1bV92azsKKworICAgIEJsYWNrRGV0ZWN0QnVmICpzdW07CisgICAgQmxhY2tEZXRlY3RQ dXNoRGF0YSBwdXNoX2RhdGE7CisKKyAgICBpZiAoaW4tPmNvbG9yX3JhbmdlID09IEFWQ09MX1JB TkdFX0pQRUcgfHwgcy0+YWxwaGEpIHsKKyAgICAgICAgcHVzaF9kYXRhLnRocmVzaG9sZCA9IHMt PnBpeGVsX2JsYWNrX3RoOworICAgIH0gZWxzZSB7CisgICAgICAgIGNvbnN0IEFWUGl4Rm10RGVz Y3JpcHRvciAqZGVzYyA9IGF2X3BpeF9mbXRfZGVzY19nZXQodmtjdHgtPmlucHV0X2Zvcm1hdCk7 CisgICAgICAgIGNvbnN0IGludCBkZXB0aCA9IGRlc2MtPmNvbXBbMF0uZGVwdGg7CisgICAgICAg IGNvbnN0IGludCB5bWluID0gMTYgIDw8IChkZXB0aCAtIDgpOworICAgICAgICBjb25zdCBpbnQg eW1heCA9IDIzNSA8PCAoZGVwdGggLSA4KTsKKyAgICAgICAgY29uc3QgaW50IGltYXggPSAoMSA8 PCBkZXB0aCkgLSAxOworICAgICAgICBwdXNoX2RhdGEudGhyZXNob2xkID0gKHMtPnBpeGVsX2Js YWNrX3RoICogKHltYXggLSB5bWluKSArIHltaW4pIC8gaW1heDsKKyAgICB9CisKKyAgICBpZiAo IXMtPmluaXRpYWxpemVkKQorICAgICAgICBSRVQoaW5pdF9maWx0ZXIoY3R4KSk7CisKKyAgICBl cnIgPSBmZl92a19nZXRfcG9vbGVkX2J1ZmZlcih2a2N0eCwgJnMtPnN1bV9idWZfcG9vbCwgJnN1 bV9idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfQlVGRkVSX1VTQUdF X1RSQU5TRkVSX0RTVF9CSVQgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZL X0JVRkZFUl9VU0FHRV9TVE9SQUdFX0JVRkZFUl9CSVQsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl b2YoQmxhY2tEZXRlY3RCdWYpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZL X01FTU9SWV9QUk9QRVJUWV9ERVZJQ0VfTE9DQUxfQklUIHwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBWS19NRU1PUllfUFJPUEVSVFlfSE9TVF9WSVNJQkxFX0JJVCB8CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfTUVNT1JZX1BST1BFUlRZX0hPU1RfQ09I RVJFTlRfQklUKTsKKyAgICBpZiAoZXJyIDwgMCkKKyAgICAgICAgcmV0dXJuIGVycjsKKyAgICBz dW1fdmsgPSAoRkZWa0J1ZmZlciAqKXN1bV9idWYtPmRhdGE7CisgICAgc3VtID0gKEJsYWNrRGV0 ZWN0QnVmICopIHN1bV92ay0+bWFwcGVkX21lbTsKKworICAgIGV4ZWMgPSBmZl92a19leGVjX2dl dCh2a2N0eCwgJnMtPmUpOworICAgIGZmX3ZrX2V4ZWNfc3RhcnQodmtjdHgsIGV4ZWMpOworCisg ICAgUkVUKGZmX3ZrX2V4ZWNfYWRkX2RlcF9mcmFtZSh2a2N0eCwgZXhlYywgaW4sCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBWS19QSVBFTElORV9TVEFHRV8yX0FMTF9DT01NQU5E U19CSVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19QSVBFTElORV9TVEFH RV8yX0NPTVBVVEVfU0hBREVSX0JJVCkpOworICAgIFJFVChmZl92a19jcmVhdGVfaW1hZ2V2aWV3 cyh2a2N0eCwgZXhlYywgaW5fdmlld3MsIGluLCBGRl9WS19SRVBfRkxPQVQpKTsKKworICAgIGZm X3ZrX3NoYWRlcl91cGRhdGVfaW1nX2FycmF5KHZrY3R4LCBleGVjLCAmcy0+c2hkLCBpbiwgaW5f dmlld3MsIDAsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfSU1BR0Vf TEFZT1VUX0dFTkVSQUwsIFZLX05VTExfSEFORExFKTsKKworICAgIGZmX3ZrX2ZyYW1lX2JhcnJp ZXIodmtjdHgsIGV4ZWMsIGluLCBpbWdfYmFyLCAmbmJfaW1nX2JhciwKKyAgICAgICAgICAgICAg ICAgICAgICAgIFZLX1BJUEVMSU5FX1NUQUdFXzJfQUxMX0NPTU1BTkRTX0JJVCwKKyAgICAgICAg ICAgICAgICAgICAgICAgIFZLX1BJUEVMSU5FX1NUQUdFXzJfQ09NUFVURV9TSEFERVJfQklULAor ICAgICAgICAgICAgICAgICAgICAgICAgVktfQUNDRVNTX1NIQURFUl9SRUFEX0JJVCwKKyAgICAg ICAgICAgICAgICAgICAgICAgIFZLX0lNQUdFX0xBWU9VVF9HRU5FUkFMLAorICAgICAgICAgICAg ICAgICAgICAgICAgVktfUVVFVUVfRkFNSUxZX0lHTk9SRUQpOworCisgICAgLyogemVybyBzdW0g YnVmZmVyICovCisgICAgdmstPkNtZFBpcGVsaW5lQmFycmllcjIoZXhlYy0+YnVmLCAmKFZrRGVw ZW5kZW5jeUluZm8pIHsKKyAgICAgICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX0RF UEVOREVOQ1lfSU5GTywKKyAgICAgICAgICAgIC5wQnVmZmVyTWVtb3J5QmFycmllcnMgPSAmKFZr QnVmZmVyTWVtb3J5QmFycmllcjIpIHsKKyAgICAgICAgICAgICAgICAuc1R5cGUgPSBWS19TVFJV Q1RVUkVfVFlQRV9CVUZGRVJfTUVNT1JZX0JBUlJJRVJfMiwKKyAgICAgICAgICAgICAgICAuc3Jj U3RhZ2VNYXNrID0gVktfUElQRUxJTkVfU1RBR0VfMl9OT05FLAorICAgICAgICAgICAgICAgIC5k c3RTdGFnZU1hc2sgPSBWS19QSVBFTElORV9TVEFHRV8yX1RSQU5TRkVSX0JJVCwKKyAgICAgICAg ICAgICAgICAuZHN0QWNjZXNzTWFzayA9IFZLX0FDQ0VTU19UUkFOU0ZFUl9XUklURV9CSVQsCisg ICAgICAgICAgICAgICAgLnNyY1F1ZXVlRmFtaWx5SW5kZXggPSBWS19RVUVVRV9GQU1JTFlfSUdO T1JFRCwKKyAgICAgICAgICAgICAgICAuZHN0UXVldWVGYW1pbHlJbmRleCA9IFZLX1FVRVVFX0ZB TUlMWV9JR05PUkVELAorICAgICAgICAgICAgICAgIC5idWZmZXIgPSBzdW1fdmstPmJ1ZiwKKyAg ICAgICAgICAgICAgICAuc2l6ZSA9IHN1bV92ay0+c2l6ZSwKKyAgICAgICAgICAgICAgICAub2Zm c2V0ID0gMCwKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICAuYnVmZmVyTWVtb3J5QmFycmll ckNvdW50ID0gMSwKKyAgICAgICAgfSk7CisKKyAgICB2ay0+Q21kRmlsbEJ1ZmZlcihleGVjLT5i dWYsIHN1bV92ay0+YnVmLCAwLCBzdW1fdmstPnNpemUsIDB4MCk7CisKKyAgICB2ay0+Q21kUGlw ZWxpbmVCYXJyaWVyMihleGVjLT5idWYsICYoVmtEZXBlbmRlbmN5SW5mbykgeworICAgICAgICAg ICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfREVQRU5ERU5DWV9JTkZPLAorICAgICAgICAg ICAgLnBJbWFnZU1lbW9yeUJhcnJpZXJzID0gaW1nX2JhciwKKyAgICAgICAgICAgIC5pbWFnZU1l bW9yeUJhcnJpZXJDb3VudCA9IG5iX2ltZ19iYXIsCisgICAgICAgICAgICAucEJ1ZmZlck1lbW9y eUJhcnJpZXJzID0gJihWa0J1ZmZlck1lbW9yeUJhcnJpZXIyKSB7CisgICAgICAgICAgICAgICAg LnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfQlVGRkVSX01FTU9SWV9CQVJSSUVSXzIsCisgICAg ICAgICAgICAgICAgLnNyY1N0YWdlTWFzayA9IFZLX1BJUEVMSU5FX1NUQUdFXzJfVFJBTlNGRVJf QklULAorICAgICAgICAgICAgICAgIC5kc3RTdGFnZU1hc2sgPSBWS19QSVBFTElORV9TVEFHRV8y X0NPTVBVVEVfU0hBREVSX0JJVCwKKyAgICAgICAgICAgICAgICAuc3JjQWNjZXNzTWFzayA9IFZL X0FDQ0VTU19UUkFOU0ZFUl9XUklURV9CSVQsCisgICAgICAgICAgICAgICAgLmRzdEFjY2Vzc01h c2sgPSBWS19BQ0NFU1NfMl9TSEFERVJfU1RPUkFHRV9SRUFEX0JJVCB8CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBWS19BQ0NFU1NfMl9TSEFERVJfU1RPUkFHRV9XUklURV9CSVQs CisgICAgICAgICAgICAgICAgLnNyY1F1ZXVlRmFtaWx5SW5kZXggPSBWS19RVUVVRV9GQU1JTFlf SUdOT1JFRCwKKyAgICAgICAgICAgICAgICAuZHN0UXVldWVGYW1pbHlJbmRleCA9IFZLX1FVRVVF X0ZBTUlMWV9JR05PUkVELAorICAgICAgICAgICAgICAgIC5idWZmZXIgPSBzdW1fdmstPmJ1ZiwK KyAgICAgICAgICAgICAgICAuc2l6ZSA9IHN1bV92ay0+c2l6ZSwKKyAgICAgICAgICAgICAgICAu b2Zmc2V0ID0gMCwKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICAuYnVmZmVyTWVtb3J5QmFy cmllckNvdW50ID0gMSwKKyAgICAgICAgfSk7CisKKyAgICBSRVQoZmZfdmtfc2hhZGVyX3VwZGF0 ZV9kZXNjX2J1ZmZlcigmcy0+dmtjdHgsIGV4ZWMsICZzLT5zaGQsIDAsIDEsIDAsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VtX3ZrLCAwLCBzdW1fdmstPnNpemUs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfRk9STUFUX1VOREVG SU5FRCkpOworCisgICAgZmZfdmtfZXhlY19iaW5kX3NoYWRlcih2a2N0eCwgZXhlYywgJnMtPnNo ZCk7CisgICAgZmZfdmtfc2hhZGVyX3VwZGF0ZV9wdXNoX2NvbnN0KHZrY3R4LCBleGVjLCAmcy0+ c2hkLCBWS19TSEFERVJfU1RBR0VfQ09NUFVURV9CSVQsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDAsIHNpemVvZihwdXNoX2RhdGEpLCAmcHVzaF9kYXRhKTsKKworICAgIHZr LT5DbWREaXNwYXRjaChleGVjLT5idWYsCisgICAgICAgICAgICAgICAgICAgIEZGQUxJR04oaW4t PndpZHRoLCAgcy0+c2hkLmxnX3NpemVbMF0pIC8gcy0+c2hkLmxnX3NpemVbMF0sCisgICAgICAg ICAgICAgICAgICAgIEZGQUxJR04oaW4tPmhlaWdodCwgcy0+c2hkLmxnX3NpemVbMV0pIC8gcy0+ c2hkLmxnX3NpemVbMV0sCisgICAgICAgICAgICAgICAgICAgIHMtPnNoZC5sZ19zaXplWzJdKTsK KworICAgIHZrLT5DbWRQaXBlbGluZUJhcnJpZXIyKGV4ZWMtPmJ1ZiwgJihWa0RlcGVuZGVuY3lJ bmZvKSB7CisgICAgICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9ERVBFTkRFTkNZ X0lORk8sCisgICAgICAgICAgICAucEJ1ZmZlck1lbW9yeUJhcnJpZXJzID0gJihWa0J1ZmZlck1l bW9yeUJhcnJpZXIyKSB7CisgICAgICAgICAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZ UEVfQlVGRkVSX01FTU9SWV9CQVJSSUVSXzIsCisgICAgICAgICAgICAgICAgLnNyY1N0YWdlTWFz ayA9IFZLX1BJUEVMSU5FX1NUQUdFXzJfQ09NUFVURV9TSEFERVJfQklULAorICAgICAgICAgICAg ICAgIC5kc3RTdGFnZU1hc2sgPSBWS19QSVBFTElORV9TVEFHRV8yX0hPU1RfQklULAorICAgICAg ICAgICAgICAgIC5zcmNBY2Nlc3NNYXNrID0gVktfQUNDRVNTXzJfU0hBREVSX1NUT1JBR0VfUkVB RF9CSVQgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfQUNDRVNTXzJfU0hB REVSX1NUT1JBR0VfV1JJVEVfQklULAorICAgICAgICAgICAgICAgIC5kc3RBY2Nlc3NNYXNrID0g VktfQUNDRVNTX0hPU1RfUkVBRF9CSVQsCisgICAgICAgICAgICAgICAgLnNyY1F1ZXVlRmFtaWx5 SW5kZXggPSBWS19RVUVVRV9GQU1JTFlfSUdOT1JFRCwKKyAgICAgICAgICAgICAgICAuZHN0UXVl dWVGYW1pbHlJbmRleCA9IFZLX1FVRVVFX0ZBTUlMWV9JR05PUkVELAorICAgICAgICAgICAgICAg IC5idWZmZXIgPSBzdW1fdmstPmJ1ZiwKKyAgICAgICAgICAgICAgICAuc2l6ZSA9IHN1bV92ay0+ c2l6ZSwKKyAgICAgICAgICAgICAgICAub2Zmc2V0ID0gMCwKKyAgICAgICAgICAgIH0sCisgICAg ICAgICAgICAuYnVmZmVyTWVtb3J5QmFycmllckNvdW50ID0gMSwKKyAgICAgICAgfSk7CisKKyAg ICBSRVQoZmZfdmtfZXhlY19zdWJtaXQodmtjdHgsIGV4ZWMpKTsKKyAgICBmZl92a19leGVjX3dh aXQodmtjdHgsIGV4ZWMpOworICAgIGV2YWx1YXRlKGxpbmssIGluLCBzdW0pOworCisgICAgYXZf YnVmZmVyX3VucmVmKCZzdW1fYnVmKTsKKyAgICByZXR1cm4gZmZfZmlsdGVyX2ZyYW1lKG91dGxp bmssIGluKTsKKworZmFpbDoKKyAgICBpZiAoZXhlYykKKyAgICAgICAgZmZfdmtfZXhlY19kaXNj YXJkX2RlcHMoJnMtPnZrY3R4LCBleGVjKTsKKyAgICBhdl9mcmFtZV9mcmVlKCZpbik7CisgICAg YXZfYnVmZmVyX3VucmVmKCZzdW1fYnVmKTsKKyAgICByZXR1cm4gZXJyOworfQorCitzdGF0aWMg dm9pZCBibGFja2RldGVjdF92dWxrYW5fdW5pbml0KEFWRmlsdGVyQ29udGV4dCAqYXZjdHgpCit7 CisgICAgQmxhY2tEZXRlY3RWdWxrYW5Db250ZXh0ICpzID0gYXZjdHgtPnByaXY7CisgICAgQVZG aWx0ZXJMaW5rICppbmxpbmsgPSBhdmN0eC0+aW5wdXRzWzBdOworICAgIEZpbHRlckxpbmsgKmlu bCA9IGZmX2ZpbHRlcl9saW5rKGlubGluayk7CisgICAgRkZWdWxrYW5Db250ZXh0ICp2a2N0eCA9 ICZzLT52a2N0eDsKKworICAgIHJlcG9ydF9ibGFja19yZWdpb24oYXZjdHgsIGlubC0+Y3VycmVu dF9wdHMpOworCisgICAgZmZfdmtfZXhlY19wb29sX2ZyZWUodmtjdHgsICZzLT5lKTsKKyAgICBm Zl92a19zaGFkZXJfZnJlZSh2a2N0eCwgJnMtPnNoZCk7CisKKyAgICBhdl9idWZmZXJfcG9vbF91 bmluaXQoJnMtPnN1bV9idWZfcG9vbCk7CisKKyAgICBmZl92a191bmluaXQoJnMtPnZrY3R4KTsK KworICAgIHMtPmluaXRpYWxpemVkID0gMDsKK30KKworc3RhdGljIGludCBjb25maWdfb3V0cHV0 KEFWRmlsdGVyTGluayAqb3V0bGluaykKK3sKKyAgICBBVkZpbHRlckNvbnRleHQgKmN0eCA9IG91 dGxpbmstPnNyYzsKKyAgICBCbGFja0RldGVjdFZ1bGthbkNvbnRleHQgKnMgPSBjdHgtPnByaXY7 CisgICAgRkZWdWxrYW5Db250ZXh0ICp2a2N0eCA9ICZzLT52a2N0eDsKKyAgICBjb25zdCBBVlBp eEZtdERlc2NyaXB0b3IgKmRlc2MgPSBhdl9waXhfZm10X2Rlc2NfZ2V0KHZrY3R4LT5pbnB1dF9m b3JtYXQpOworCisgICAgaWYgKHMtPmFscGhhICYmICEoZGVzYy0+ZmxhZ3MgJiBBVl9QSVhfRk1U X0ZMQUdfQUxQSEEpKSB7CisgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIklucHV0 IGZvcm1hdCAlcyBkb2VzIG5vdCBoYXZlIGFuIGFscGhhIGNoYW5uZWxcbiIsCisgICAgICAgICAg ICAgICBhdl9nZXRfcGl4X2ZtdF9uYW1lKHZrY3R4LT5pbnB1dF9mb3JtYXQpKTsKKyAgICAgICAg cmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKKyAgICB9CisKKyAgICBpZiAoZGVzYy0+ZmxhZ3MgJiAo QVZfUElYX0ZNVF9GTEFHX1JHQiB8IEFWX1BJWF9GTVRfRkxBR19YWVopIHx8CisgICAgICAgICEo ZGVzYy0+ZmxhZ3MgJiBBVl9QSVhfRk1UX0ZMQUdfUExBTkFSKSkgeworICAgICAgICBhdl9sb2co Y3R4LCBBVl9MT0dfRVJST1IsICJJbnB1dCBmb3JtYXQgJXMgaXMgbm90IHBsYW5hciBZVVZcbiIs CisgICAgICAgICAgICAgICBhdl9nZXRfcGl4X2ZtdF9uYW1lKHZrY3R4LT5pbnB1dF9mb3JtYXQp KTsKKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKKyAgICB9CisKKyAgICByZXR1cm4g ZmZfdmtfZmlsdGVyX2NvbmZpZ19vdXRwdXQob3V0bGluayk7Cit9CisKKyNkZWZpbmUgT0ZGU0VU KHgpIG9mZnNldG9mKEJsYWNrRGV0ZWN0VnVsa2FuQ29udGV4dCwgeCkKKyNkZWZpbmUgRkxBR1Mg KEFWX09QVF9GTEFHX0ZJTFRFUklOR19QQVJBTSB8IEFWX09QVF9GTEFHX1ZJREVPX1BBUkFNKQor c3RhdGljIGNvbnN0IEFWT3B0aW9uIGJsYWNrZGV0ZWN0X3Z1bGthbl9vcHRpb25zW10gPSB7Cisg ICAgeyAiZCIsICAgICAgICAgICAgICAgICAgInNldCBtaW5pbXVtIGRldGVjdGVkIGJsYWNrIGR1 cmF0aW9uIGluIHNlY29uZHMiLCBPRkZTRVQoYmxhY2tfbWluX2R1cmF0aW9uX3RpbWUpLCBBVl9P UFRfVFlQRV9ET1VCTEUsIHsuZGJsPTJ9LCAwLCBEQkxfTUFYLCBGTEFHUyB9LAorICAgIHsgImJs YWNrX21pbl9kdXJhdGlvbiIsICJzZXQgbWluaW11bSBkZXRlY3RlZCBibGFjayBkdXJhdGlvbiBp biBzZWNvbmRzIiwgT0ZGU0VUKGJsYWNrX21pbl9kdXJhdGlvbl90aW1lKSwgQVZfT1BUX1RZUEVf RE9VQkxFLCB7LmRibD0yfSwgMCwgREJMX01BWCwgRkxBR1MgfSwKKyAgICB7ICJwaWN0dXJlX2Js YWNrX3JhdGlvX3RoIiwgInNldCB0aGUgcGljdHVyZSBibGFjayByYXRpbyB0aHJlc2hvbGQiLCBP RkZTRVQocGljdHVyZV9ibGFja19yYXRpb190aCksIEFWX09QVF9UWVBFX0RPVUJMRSwgey5kYmw9 Ljk4fSwgMCwgMSwgRkxBR1MgfSwKKyAgICB7ICJwaWNfdGgiLCAgICAgICAgICAgICAgICAgInNl dCB0aGUgcGljdHVyZSBibGFjayByYXRpbyB0aHJlc2hvbGQiLCBPRkZTRVQocGljdHVyZV9ibGFj a19yYXRpb190aCksIEFWX09QVF9UWVBFX0RPVUJMRSwgey5kYmw9Ljk4fSwgMCwgMSwgRkxBR1Mg fSwKKyAgICB7ICJwaXhlbF9ibGFja190aCIsICJzZXQgdGhlIHBpeGVsIGJsYWNrIHRocmVzaG9s ZCIsIE9GRlNFVChwaXhlbF9ibGFja190aCksIEFWX09QVF9UWVBFX0RPVUJMRSwgey5kYmw9LjEw fSwgMCwgMSwgRkxBR1MgfSwKKyAgICB7ICJwaXhfdGgiLCAgICAgICAgICJzZXQgdGhlIHBpeGVs IGJsYWNrIHRocmVzaG9sZCIsIE9GRlNFVChwaXhlbF9ibGFja190aCksIEFWX09QVF9UWVBFX0RP VUJMRSwgey5kYmw9LjEwfSwgMCwgMSwgRkxBR1MgfSwKKyAgICB7ICJhbHBoYSIsICAgICAgICAg ICJjaGVjayBhbHBoYSBpbnN0ZWFkIG9mIGx1bWEiLCBPRkZTRVQoYWxwaGEpLCBBVl9PUFRfVFlQ RV9CT09MLCB7Lmk2ND0wfSwgMCwgMSwgRkxBR1MgfSwKKyAgICB7IE5VTEwgfQorfTsKKworQVZG SUxURVJfREVGSU5FX0NMQVNTKGJsYWNrZGV0ZWN0X3Z1bGthbik7CisKK3N0YXRpYyBjb25zdCBB VkZpbHRlclBhZCBibGFja2RldGVjdF92dWxrYW5faW5wdXRzW10gPSB7CisgICAgeworICAgICAg ICAubmFtZSAgICAgICAgID0gImRlZmF1bHQiLAorICAgICAgICAudHlwZSAgICAgICAgID0gQVZN RURJQV9UWVBFX1ZJREVPLAorICAgICAgICAuZmlsdGVyX2ZyYW1lID0gJmJsYWNrZGV0ZWN0X3Z1 bGthbl9maWx0ZXJfZnJhbWUsCisgICAgICAgIC5jb25maWdfcHJvcHMgPSAmZmZfdmtfZmlsdGVy X2NvbmZpZ19pbnB1dCwKKyAgICB9LAorfTsKKworc3RhdGljIGNvbnN0IEFWRmlsdGVyUGFkIGJs YWNrZGV0ZWN0X3Z1bGthbl9vdXRwdXRzW10gPSB7CisgICAgeworICAgICAgICAubmFtZSA9ICJk ZWZhdWx0IiwKKyAgICAgICAgLnR5cGUgPSBBVk1FRElBX1RZUEVfVklERU8sCisgICAgICAgIC5j b25maWdfcHJvcHMgPSAmY29uZmlnX291dHB1dCwKKyAgICB9LAorfTsKKworY29uc3QgRkZGaWx0 ZXIgZmZfdmZfYmxhY2tkZXRlY3RfdnVsa2FuID0geworICAgIC5wLm5hbWUgICAgICAgICA9ICJi bGFja2RldGVjdF92dWxrYW4iLAorICAgIC5wLmRlc2NyaXB0aW9uICA9IE5VTExfSUZfQ09ORklH X1NNQUxMKCJEZXRlY3QgdmlkZW8gaW50ZXJ2YWxzIHRoYXQgYXJlIChhbG1vc3QpIGJsYWNrLiIp LAorICAgIC5wLnByaXZfY2xhc3MgICA9ICZibGFja2RldGVjdF92dWxrYW5fY2xhc3MsCisgICAg LnAuZmxhZ3MgICAgICAgID0gQVZGSUxURVJfRkxBR19IV0RFVklDRSwKKyAgICAucHJpdl9zaXpl ICAgICAgPSBzaXplb2YoQmxhY2tEZXRlY3RWdWxrYW5Db250ZXh0KSwKKyAgICAuaW5pdCAgICAg ICAgICAgPSAmZmZfdmtfZmlsdGVyX2luaXQsCisgICAgLnVuaW5pdCAgICAgICAgID0gJmJsYWNr ZGV0ZWN0X3Z1bGthbl91bmluaXQsCisgICAgRklMVEVSX0lOUFVUUyhibGFja2RldGVjdF92dWxr YW5faW5wdXRzKSwKKyAgICBGSUxURVJfT1VUUFVUUyhibGFja2RldGVjdF92dWxrYW5fb3V0cHV0 cyksCisgICAgRklMVEVSX1NJTkdMRV9QSVhGTVQoQVZfUElYX0ZNVF9WVUxLQU4pLAorICAgIC5m bGFnc19pbnRlcm5hbCA9IEZGX0ZJTFRFUl9GTEFHX0hXRlJBTUVfQVdBUkUsCit9OwotLSAKMi40 OS4xCgoKRnJvbSBlYWRmOTU4MDAzYjE3MGI1NDA5YzY1ODBiYTczNjljYjQ4ZGE0ZjJkIE1vbiBT ZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBKYW1haWthMSA8bHVrYXN6Y3oxOEB3cC5wbD4KRGF0 ZTogV2VkLCAzIFNlcCAyMDI1IDEyOjQ4OjQxICswMDAwClN1YmplY3Q6IFtQQVRDSCAwMDUvMTE4 XSBDaGFuZ2luZyB2dWxrYW4gZmlsZSBkaXJlY3RvcnkKCi0tLQogbGliYXZmaWx0ZXIvdmZfYmxl bmRfdnVsa2FuLmMgfCAzOTkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogMSBm aWxlIGNoYW5nZWQsIDM5OSBkZWxldGlvbnMoLSkKIGRlbGV0ZSBtb2RlIDEwMDY0NCBsaWJhdmZp bHRlci92Zl9ibGVuZF92dWxrYW4uYwoKZGlmZiAtLWdpdCBhL2xpYmF2ZmlsdGVyL3ZmX2JsZW5k X3Z1bGthbi5jIGIvbGliYXZmaWx0ZXIvdmZfYmxlbmRfdnVsa2FuLmMKZGVsZXRlZCBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDU3Y2YzYzY5NmIuLjAwMDAwMDAwMDAKLS0tIGEvbGliYXZmaWx0ZXIv dmZfYmxlbmRfdnVsa2FuLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzOTkgKzAsMCBAQAotLyoKLSAq IGNvcHlyaWdodCAoYykgMjAyMS0yMDIyIFd1IEppYW5odWEgPGppYW5odWEud3VAaW50ZWwuY29t PgotICogQ29weXJpZ2h0IChjKSBMeW5uZQotICoKLSAqIFRoZSBibGVuZCBtb2RlcyBhcmUgYmFz ZWQgb24gdGhlIGJsZW5kLmMuCi0gKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgot ICoKLSAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu ZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChh dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogRkZtcGVnIGlzIGRpc3Ry aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9V VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICog TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl IHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp bHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExl c3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90 LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQotICov Ci0KLSNpbmNsdWRlICJsaWJhdnV0aWwvcmFuZG9tX3NlZWQuaCIKLSNpbmNsdWRlICJsaWJhdnV0 aWwvdnVsa2FuX3NwaXJ2LmgiCi0jaW5jbHVkZSAibGliYXZ1dGlsL29wdC5oIgotI2luY2x1ZGUg InZ1bGthbl9maWx0ZXIuaCIKLQotI2luY2x1ZGUgImZpbHRlcnMuaCIKLSNpbmNsdWRlICJmcmFt ZXN5bmMuaCIKLSNpbmNsdWRlICJibGVuZC5oIgotI2luY2x1ZGUgInZpZGVvLmgiCi0KLSNkZWZp bmUgSU5fVE9QICAgIDAKLSNkZWZpbmUgSU5fQk9UVE9NIDEKLQotdHlwZWRlZiBzdHJ1Y3QgRmls dGVyUGFyYW1zVnVsa2FuIHsKLSAgICBjb25zdCBjaGFyICpibGVuZDsKLSAgICBjb25zdCBjaGFy ICpibGVuZF9mdW5jOwotICAgIGRvdWJsZSBvcGFjaXR5OwotICAgIGVudW0gQmxlbmRNb2RlIG1v ZGU7Ci19IEZpbHRlclBhcmFtc1Z1bGthbjsKLQotdHlwZWRlZiBzdHJ1Y3QgQmxlbmRWdWxrYW5D b250ZXh0IHsKLSAgICBGRlZ1bGthbkNvbnRleHQgdmtjdHg7Ci0gICAgRkZGcmFtZVN5bmMgZnM7 Ci0KLSAgICBpbnQgaW5pdGlhbGl6ZWQ7Ci0gICAgRkZWa0V4ZWNQb29sIGU7Ci0gICAgQVZWdWxr YW5EZXZpY2VRdWV1ZUZhbWlseSAqcWY7Ci0gICAgRkZWdWxrYW5TaGFkZXIgc2hkOwotCi0gICAg RmlsdGVyUGFyYW1zVnVsa2FuIHBhcmFtc1s0XTsKLSAgICBkb3VibGUgYWxsX29wYWNpdHk7Ci0g ICAgZW51bSBCbGVuZE1vZGUgYWxsX21vZGU7Ci19IEJsZW5kVnVsa2FuQ29udGV4dDsKLQotI2Rl ZmluZSBERUZJTkVfQkxFTkRfTU9ERShNT0RFLCBFWFBSKSBcCi1zdGF0aWMgY29uc3QgY2hhciBi bGVuZF8jI01PREVbXSA9ICJibGVuZF8iI01PREU7IFwKLXN0YXRpYyBjb25zdCBjaGFyIGJsZW5k XyMjTU9ERSMjX2Z1bmNbXSA9IHsgXAotICAgIEMoMCwgdmVjNCBibGVuZF8jI01PREUodmVjNCB0 b3AsIHZlYzQgYm90dG9tLCBmbG9hdCBvcGFjaXR5KSB7ICAgKSBcCi0gICAgQygxLCAgICAgdmVj NCBkc3QgPSBFWFBSOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIFwK LSAgICBDKDEsICAgICByZXR1cm4gZHN0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICkgXAotICAgIEMoMCwgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSBcCi19OwotCi0jZGVmaW5lIEEgdG9wCi0j ZGVmaW5lIEIgYm90dG9tCi0KLSNkZWZpbmUgRk4oRVhQUikgQSArICgoRVhQUikgLSBBKSAqIG9w YWNpdHkKLQotREVGSU5FX0JMRU5EX01PREUoTk9STUFMLCBBICogb3BhY2l0eSArIEIgKiAoMS4w ZiAtIG9wYWNpdHkpKQotREVGSU5FX0JMRU5EX01PREUoTVVMVElQTFksIEZOKDEuMGYgKiBBICog QiAvIDEuMGYpKQotCi1zdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9ibGVuZF9mdW5jKEZpbHRlclBh cmFtc1Z1bGthbiAqcGFyYW0pCi17Ci0jZGVmaW5lIENBU0UoTU9ERSkgY2FzZSBCTEVORF8jI01P REU6IFwKLSAgICAgICAgICAgIHBhcmFtLT5ibGVuZCA9IGJsZW5kXyMjTU9ERTtcCi0gICAgICAg ICAgICBwYXJhbS0+YmxlbmRfZnVuYyA9ICBibGVuZF8jI01PREUjI19mdW5jOyBcCi0gICAgICAg ICAgICBicmVhazsKLQotICAgIHN3aXRjaCAocGFyYW0tPm1vZGUpIHsKLSAgICBDQVNFKE5PUk1B TCkKLSAgICBDQVNFKE1VTFRJUExZKQotICAgIGRlZmF1bHQ6IHBhcmFtLT5ibGVuZCA9IE5VTEw7 IGJyZWFrOwotICAgIH0KLQotI3VuZGVmIENBU0UKLX0KLQotc3RhdGljIGludCBjb25maWdfcGFy YW1zKEFWRmlsdGVyQ29udGV4dCAqYXZjdHgpCi17Ci0gICAgQmxlbmRWdWxrYW5Db250ZXh0ICpz ID0gYXZjdHgtPnByaXY7Ci0KLSAgICBmb3IgKGludCBwbGFuZSA9IDA7IHBsYW5lIDwgRkZfQVJS QVlfRUxFTVMocy0+cGFyYW1zKTsgcGxhbmUrKykgewotICAgICAgICBGaWx0ZXJQYXJhbXNWdWxr YW4gKnBhcmFtID0gJnMtPnBhcmFtc1twbGFuZV07Ci0KLSAgICAgICAgaWYgKHMtPmFsbF9tb2Rl ID49IDApCi0gICAgICAgICAgICBwYXJhbS0+bW9kZSA9IHMtPmFsbF9tb2RlOwotICAgICAgICBp ZiAocy0+YWxsX29wYWNpdHkgPCAxKQotICAgICAgICAgICAgcGFyYW0tPm9wYWNpdHkgPSBzLT5h bGxfb3BhY2l0eTsKLQotICAgICAgICBpbml0X2JsZW5kX2Z1bmMocGFyYW0pOwotICAgICAgICBp ZiAoIXBhcmFtLT5ibGVuZCkgewotICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJS T1IsCi0gICAgICAgICAgICAgICAgICAgIkN1cnJlbnRseSB0aGUgYmxlbmQgbW9kZSBzcGVjaWZp ZWQgaXMgbm90IHN1cHBvcnRlZCB5ZXQuXG4iKTsKLSAgICAgICAgICAgIHJldHVybiBBVkVSUk9S KEVJTlZBTCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGlj IGludCBwcm9jZXNzX2NvbW1hbmQoQVZGaWx0ZXJDb250ZXh0ICpjdHgsIGNvbnN0IGNoYXIgKmNt ZCwgY29uc3QgY2hhciAqYXJncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnJl cywgaW50IHJlc19sZW4sIGludCBmbGFncykKLXsKLSAgICBpbnQgcmV0ID0gZmZfZmlsdGVyX3By b2Nlc3NfY29tbWFuZChjdHgsIGNtZCwgYXJncywgcmVzLCByZXNfbGVuLCBmbGFncyk7Ci0gICAg aWYgKHJldCA8IDApCi0gICAgICAgIHJldHVybiByZXQ7Ci0KLSAgICByZXR1cm4gY29uZmlnX3Bh cmFtcyhjdHgpOwotfQotCi1zdGF0aWMgYXZfY29sZCBpbnQgaW5pdF9maWx0ZXIoQVZGaWx0ZXJD b250ZXh0ICphdmN0eCkKLXsKLSAgICBpbnQgZXJyID0gMDsKLSAgICB1aW50OF90ICpzcHZfZGF0 YTsKLSAgICBzaXplX3Qgc3B2X2xlbjsKLSAgICB2b2lkICpzcHZfb3BhcXVlID0gTlVMTDsKLSAg ICBCbGVuZFZ1bGthbkNvbnRleHQgKnMgPSBhdmN0eC0+cHJpdjsKLSAgICBGRlZ1bGthbkNvbnRl eHQgKnZrY3R4ID0gJnMtPnZrY3R4OwotICAgIGNvbnN0IGludCBwbGFuZXMgPSBhdl9waXhfZm10 X2NvdW50X3BsYW5lcyhzLT52a2N0eC5vdXRwdXRfZm9ybWF0KTsKLSAgICBGRlZ1bGthblNoYWRl ciAqc2hkID0gJnMtPnNoZDsKLSAgICBGRlZrU1BJUlZDb21waWxlciAqc3B2OwotICAgIEZGVnVs a2FuRGVzY3JpcHRvclNldEJpbmRpbmcgKmRlc2M7Ci0KLSAgICBzcHYgPSBmZl92a19zcGlydl9p bml0KCk7Ci0gICAgaWYgKCFzcHYpIHsKLSAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJS T1IsICJVbmFibGUgdG8gaW5pdGlhbGl6ZSBTUElSLVYgY29tcGlsZXIhXG4iKTsKLSAgICAgICAg cmV0dXJuIEFWRVJST1JfRVhURVJOQUw7Ci0gICAgfQotCi0gICAgcy0+cWYgPSBmZl92a19xZl9m aW5kKHZrY3R4LCBWS19RVUVVRV9DT01QVVRFX0JJVCwgMCk7Ci0gICAgaWYgKCFzLT5xZikgewot ICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkRldmljZSBoYXMgbm8gY29tcHV0 ZSBxdWV1ZXNcbiIpOwotICAgICAgICBlcnIgPSBBVkVSUk9SKEVOT1RTVVApOwotICAgICAgICBn b3RvIGZhaWw7Ci0gICAgfQotCi0gICAgUkVUKGZmX3ZrX2V4ZWNfcG9vbF9pbml0KHZrY3R4LCBz LT5xZiwgJnMtPmUsIHMtPnFmLT5udW0qNCwgMCwgMCwgMCwgTlVMTCkpOwotICAgIFJFVChmZl92 a19zaGFkZXJfaW5pdCh2a2N0eCwgJnMtPnNoZCwgImJsZW5kIiwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgVktfU0hBREVSX1NUQUdFX0NPTVBVVEVfQklULAotICAgICAgICAgICAgICAgICAg ICAgICAgICBOVUxMLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAzMiwgMzIsIDEsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgIDApKTsKLQotICAgIGRlc2MgPSAoRkZWdWxrYW5EZXNj cmlwdG9yU2V0QmluZGluZyBbXSkgewotICAgICAgICB7Ci0gICAgICAgICAgICAubmFtZSAgICAg ICA9ICJ0b3BfaW1hZ2VzIiwKLSAgICAgICAgICAgIC50eXBlICAgICAgID0gVktfREVTQ1JJUFRP Ul9UWVBFX1NUT1JBR0VfSU1BR0UsCi0gICAgICAgICAgICAubWVtX2xheW91dCA9IGZmX3ZrX3No YWRlcl9yZXBfZm10KHMtPnZrY3R4LmlucHV0X2Zvcm1hdCwgRkZfVktfUkVQX0ZMT0FUKSwKLSAg ICAgICAgICAgIC5tZW1fcXVhbGkgID0gInJlYWRvbmx5IiwKLSAgICAgICAgICAgIC5kaW1lbnNp b25zID0gMiwKLSAgICAgICAgICAgIC5lbGVtcyAgICAgID0gcGxhbmVzLAotICAgICAgICAgICAg LnN0YWdlcyAgICAgPSBWS19TSEFERVJfU1RBR0VfQ09NUFVURV9CSVQsCi0gICAgICAgIH0sCi0g ICAgICAgIHsKLSAgICAgICAgICAgIC5uYW1lICAgICAgID0gImJvdHRvbV9pbWFnZXMiLAotICAg ICAgICAgICAgLnR5cGUgICAgICAgPSBWS19ERVNDUklQVE9SX1RZUEVfU1RPUkFHRV9JTUFHRSwK LSAgICAgICAgICAgIC5tZW1fbGF5b3V0ID0gZmZfdmtfc2hhZGVyX3JlcF9mbXQocy0+dmtjdHgu aW5wdXRfZm9ybWF0LCBGRl9WS19SRVBfRkxPQVQpLAotICAgICAgICAgICAgLm1lbV9xdWFsaSAg PSAicmVhZG9ubHkiLAotICAgICAgICAgICAgLmRpbWVuc2lvbnMgPSAyLAotICAgICAgICAgICAg LmVsZW1zICAgICAgPSBwbGFuZXMsCi0gICAgICAgICAgICAuc3RhZ2VzICAgICA9IFZLX1NIQURF Ul9TVEFHRV9DT01QVVRFX0JJVCwKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAg Lm5hbWUgICAgICAgPSAib3V0cHV0X2ltYWdlcyIsCi0gICAgICAgICAgICAudHlwZSAgICAgICA9 IFZLX0RFU0NSSVBUT1JfVFlQRV9TVE9SQUdFX0lNQUdFLAotICAgICAgICAgICAgLm1lbV9sYXlv dXQgPSBmZl92a19zaGFkZXJfcmVwX2ZtdChzLT52a2N0eC5vdXRwdXRfZm9ybWF0LCBGRl9WS19S RVBfRkxPQVQpLAotICAgICAgICAgICAgLm1lbV9xdWFsaSAgPSAid3JpdGVvbmx5IiwKLSAgICAg ICAgICAgIC5kaW1lbnNpb25zID0gMiwKLSAgICAgICAgICAgIC5lbGVtcyAgICAgID0gcGxhbmVz LAotICAgICAgICAgICAgLnN0YWdlcyAgICAgPSBWS19TSEFERVJfU1RBR0VfQ09NUFVURV9CSVQs Ci0gICAgICAgIH0sCi0gICAgfTsKLQotICAgIFJFVChmZl92a19zaGFkZXJfYWRkX2Rlc2NyaXB0 b3Jfc2V0KHZrY3R4LCAmcy0+c2hkLCBkZXNjLCAzLCAwLCAwKSk7Ci0KLSAgICBmb3IgKGludCBp ID0gMCwgaiA9IDA7IGkgPCBwbGFuZXM7IGkrKykgewotICAgICAgICBmb3IgKGogPSAwOyBqIDwg aTsgaisrKQotICAgICAgICAgICAgaWYgKHMtPnBhcmFtc1tpXS5ibGVuZF9mdW5jID09IHMtPnBh cmFtc1tqXS5ibGVuZF9mdW5jKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAvKiBu b3RlOiB0aGUgYnJhY2tldCBpcyBuZWVkZWQsIGZvciBHTFNMRCBpcyBhIG1hY3JvIHdpdGggbXVs dGlwbGUgc3RhdGVtZW50cy4gKi8KLSAgICAgICAgaWYgKGogPT0gaSkgewotICAgICAgICAgICAg R0xTTEQocy0+cGFyYW1zW2ldLmJsZW5kX2Z1bmMpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg R0xTTEMoMCwgdm9pZCBtYWluKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKTsKLSAgICBHTFNMQygwLCB7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIEdMU0xDKDEsICAg ICBpdmVjMiBzaXplOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICk7Ci0gICAgR0xTTEMoMSwgICAgIGNvbnN0IGl2ZWMyIHBvcyA9IGl2ZWMyKGdsX0dsb2Jh bEludm9jYXRpb25JRC54eSk7ICAgICAgICAgKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHBs YW5lczsgaSsrKSB7Ci0gICAgICAgIEdMU0xDKDAsICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgR0xTTEYoMSwgc2l6 ZSA9IGltYWdlU2l6ZShvdXRwdXRfaW1hZ2VzWyVpXSk7ICAgICAgICAgICAgICAgICAgICAgLGkp OwotICAgICAgICBHTFNMQygxLCBpZiAoSVNfV0lUSElOKHBvcywgc2l6ZSkpIHsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgIEdMU0xGKDIsICAgICBjb25zdCB2ZWM0 IHRvcCA9IGltYWdlTG9hZCh0b3BfaW1hZ2VzWyVpXSwgcG9zKTsgICAgICAgLGkpOwotICAgICAg ICBHTFNMRigyLCAgICAgY29uc3QgdmVjNCBib3R0b20gPSBpbWFnZUxvYWQoYm90dG9tX2ltYWdl c1slaV0sIHBvcyk7ICxpKTsKLSAgICAgICAgR0xTTEYoMiwgICAgIGNvbnN0IGZsb2F0IG9wYWNp dHkgPSAlZjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLHMtPnBhcmFtc1tpXS5vcGFjaXR5 KTsKLSAgICAgICAgR0xTTEYoMiwgICAgIHZlYzQgZHN0ID0gJXModG9wLCBib3R0b20sIG9wYWNp dHkpOyAgICAgICAgICAgICAgICAgLHMtPnBhcmFtc1tpXS5ibGVuZCk7Ci0gICAgICAgIEdMU0xD KDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKTsKLSAgICAgICAgR0xTTEYoMiwgICAgIGltYWdlU3RvcmUob3V0cHV0X2ltYWdlc1sl aV0sIHBvcywgZHN0KTsgICAgICAgICAgICAgLGkpOwotICAgICAgICBHTFNMQygxLCB9ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0g ICAgfQotICAgIEdMU0xDKDAsIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0KLSAgICBSRVQoc3B2LT5jb21waWxlX3NoYWRl cih2a2N0eCwgc3B2LCBzaGQsICZzcHZfZGF0YSwgJnNwdl9sZW4sICJtYWluIiwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAmc3B2X29wYXF1ZSkpOwotICAgIFJFVChmZl92a19zaGFkZXJf bGluayh2a2N0eCwgc2hkLCBzcHZfZGF0YSwgc3B2X2xlbiwgIm1haW4iKSk7Ci0KLSAgICBSRVQo ZmZfdmtfc2hhZGVyX3JlZ2lzdGVyX2V4ZWModmtjdHgsICZzLT5lLCAmcy0+c2hkKSk7Ci0KLSAg ICBzLT5pbml0aWFsaXplZCA9IDE7Ci0KLWZhaWw6Ci0gICAgaWYgKHNwdl9vcGFxdWUpCi0gICAg ICAgIHNwdi0+ZnJlZV9zaGFkZXIoc3B2LCAmc3B2X29wYXF1ZSk7Ci0gICAgaWYgKHNwdikKLSAg ICAgICAgc3B2LT51bmluaXQoJnNwdik7Ci0KLSAgICByZXR1cm4gZXJyOwotfQotCi1zdGF0aWMg aW50IGJsZW5kX2ZyYW1lKEZGRnJhbWVTeW5jICpmcykKLXsKLSAgICBpbnQgZXJyOwotICAgIEFW RmlsdGVyQ29udGV4dCAqYXZjdHggPSBmcy0+cGFyZW50OwotICAgIEJsZW5kVnVsa2FuQ29udGV4 dCAqcyA9IGF2Y3R4LT5wcml2OwotICAgIEFWRmlsdGVyTGluayAqb3V0bGluayA9IGF2Y3R4LT5v dXRwdXRzWzBdOwotICAgIEFWRnJhbWUgKnRvcCwgKmJvdHRvbSwgKm91dDsKLQotICAgIG91dCA9 IGZmX2dldF92aWRlb19idWZmZXIob3V0bGluaywgb3V0bGluay0+dywgb3V0bGluay0+aCk7Ci0g ICAgaWYgKCFvdXQpIHsKLSAgICAgICAgZXJyID0gQVZFUlJPUihFTk9NRU0pOwotICAgICAgICBn b3RvIGZhaWw7Ci0gICAgfQotCi0gICAgUkVUKGZmX2ZyYW1lc3luY19nZXRfZnJhbWUoZnMsIElO X1RPUCwgICAgJnRvcCwgICAgMCkpOwotICAgIFJFVChmZl9mcmFtZXN5bmNfZ2V0X2ZyYW1lKGZz LCBJTl9CT1RUT00sICZib3R0b20sIDApKTsKLQotICAgIFJFVChhdl9mcmFtZV9jb3B5X3Byb3Bz KG91dCwgdG9wKSk7Ci0KLSAgICBpZiAoIXMtPmluaXRpYWxpemVkKSB7Ci0gICAgICAgIEFWSFdG cmFtZXNDb250ZXh0ICp0b3BfZmMgPSAoQVZIV0ZyYW1lc0NvbnRleHQqKXRvcC0+aHdfZnJhbWVz X2N0eC0+ZGF0YTsKLSAgICAgICAgQVZIV0ZyYW1lc0NvbnRleHQgKmJvdHRvbV9mYyA9IChBVkhX RnJhbWVzQ29udGV4dCopYm90dG9tLT5od19mcmFtZXNfY3R4LT5kYXRhOwotICAgICAgICBpZiAo dG9wX2ZjLT5zd19mb3JtYXQgIT0gYm90dG9tX2ZjLT5zd19mb3JtYXQpIHsKLSAgICAgICAgICAg IGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLAotICAgICAgICAgICAgICAgICAgICJDdXJyZW50 bHkgdGhlIHN3IGZvcm1hdCBvZiB0aGUgYm90dG9tIHZpZGVvIG5lZWQgdG8gbWF0Y2ggdGhlIHRv cCFcbiIpOwotICAgICAgICAgICAgZXJyID0gQVZFUlJPUihFSU5WQUwpOwotICAgICAgICAgICAg Z290byBmYWlsOwotICAgICAgICB9Ci0gICAgICAgIFJFVChpbml0X2ZpbHRlcihhdmN0eCkpOwot ICAgIH0KLQotICAgIFJFVChmZl92a19maWx0ZXJfcHJvY2Vzc19OaW4oJnMtPnZrY3R4LCAmcy0+ ZSwgJnMtPnNoZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dCwgKEFWRnJh bWUgKltdKXsgdG9wLCBib3R0b20gfSwgMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFZLX05VTExfSEFORExFLCBOVUxMLCAwKSk7Ci0KLSAgICByZXR1cm4gZmZfZmlsdGVyX2Zy YW1lKG91dGxpbmssIG91dCk7Ci0KLWZhaWw6Ci0gICAgYXZfZnJhbWVfZnJlZSgmb3V0KTsKLSAg ICByZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgYXZfY29sZCBpbnQgaW5pdChBVkZpbHRlckNvbnRl eHQgKmF2Y3R4KQotewotICAgIEJsZW5kVnVsa2FuQ29udGV4dCAqcyA9IGF2Y3R4LT5wcml2Owot Ci0gICAgcy0+ZnMub25fZXZlbnQgPSBibGVuZF9mcmFtZTsKLQotICAgIHJldHVybiBmZl92a19m aWx0ZXJfaW5pdChhdmN0eCk7Ci19Ci0KLXN0YXRpYyBhdl9jb2xkIHZvaWQgdW5pbml0KEFWRmls dGVyQ29udGV4dCAqYXZjdHgpCi17Ci0gICAgQmxlbmRWdWxrYW5Db250ZXh0ICpzID0gYXZjdHgt PnByaXY7Ci0gICAgRkZWdWxrYW5Db250ZXh0ICp2a2N0eCA9ICZzLT52a2N0eDsKLQotICAgIGZm X3ZrX2V4ZWNfcG9vbF9mcmVlKHZrY3R4LCAmcy0+ZSk7Ci0gICAgZmZfdmtfc2hhZGVyX2ZyZWUo dmtjdHgsICZzLT5zaGQpOwotCi0gICAgZmZfdmtfdW5pbml0KCZzLT52a2N0eCk7Ci0gICAgZmZf ZnJhbWVzeW5jX3VuaW5pdCgmcy0+ZnMpOwotCi0gICAgcy0+aW5pdGlhbGl6ZWQgPSAwOwotfQot Ci1zdGF0aWMgaW50IGNvbmZpZ19wcm9wc19vdXRwdXQoQVZGaWx0ZXJMaW5rICpvdXRsaW5rKQot ewotICAgIGludCBlcnI7Ci0gICAgRmlsdGVyTGluayAqb3V0bCAgICAgICA9IGZmX2ZpbHRlcl9s aW5rKG91dGxpbmspOwotICAgIEFWRmlsdGVyQ29udGV4dCAqYXZjdHggPSBvdXRsaW5rLT5zcmM7 Ci0gICAgQmxlbmRWdWxrYW5Db250ZXh0ICpzID0gYXZjdHgtPnByaXY7Ci0gICAgQVZGaWx0ZXJM aW5rICp0b3BsaW5rID0gYXZjdHgtPmlucHV0c1tJTl9UT1BdOwotICAgIEZpbHRlckxpbmsgICAq dGwgICAgICA9IGZmX2ZpbHRlcl9saW5rKHRvcGxpbmspOwotICAgIEFWRmlsdGVyTGluayAqYm90 dG9tbGluayA9IGF2Y3R4LT5pbnB1dHNbSU5fQk9UVE9NXTsKLQotICAgIGlmICh0b3BsaW5rLT53 ICE9IGJvdHRvbWxpbmstPncgfHwgdG9wbGluay0+aCAhPSBib3R0b21saW5rLT5oKSB7Ci0gICAg ICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiRmlyc3QgaW5wdXQgbGluayAlcyBwYXJh bWV0ZXJzICIKLSAgICAgICAgICAgICAgICAiKHNpemUgJWR4JWQpIGRvIG5vdCBtYXRjaCB0aGUg Y29ycmVzcG9uZGluZyAiCi0gICAgICAgICAgICAgICAgInNlY29uZCBpbnB1dCBsaW5rICVzIHBh cmFtZXRlcnMgKHNpemUgJWR4JWQpXG4iLAotICAgICAgICAgICAgICAgIGF2Y3R4LT5pbnB1dF9w YWRzW0lOX1RPUF0ubmFtZSwgdG9wbGluay0+dywgdG9wbGluay0+aCwKLSAgICAgICAgICAgICAg ICBhdmN0eC0+aW5wdXRfcGFkc1tJTl9CT1RUT01dLm5hbWUsIGJvdHRvbWxpbmstPncsIGJvdHRv bWxpbmstPmgpOwotICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOwotICAgIH0KLQotICAg IG91dGxpbmstPnNhbXBsZV9hc3BlY3RfcmF0aW8gPSB0b3BsaW5rLT5zYW1wbGVfYXNwZWN0X3Jh dGlvOwotICAgIG91dGwtPmZyYW1lX3JhdGUgPSB0bC0+ZnJhbWVfcmF0ZTsKLQotICAgIFJFVChm Zl92a19maWx0ZXJfY29uZmlnX291dHB1dChvdXRsaW5rKSk7Ci0KLSAgICBSRVQoZmZfZnJhbWVz eW5jX2luaXRfZHVhbGlucHV0KCZzLT5mcywgYXZjdHgpKTsKLQotICAgIFJFVChmZl9mcmFtZXN5 bmNfY29uZmlndXJlKCZzLT5mcykpOwotICAgIG91dGxpbmstPnRpbWVfYmFzZSA9IHMtPmZzLnRp bWVfYmFzZTsKLQotICAgIFJFVChjb25maWdfcGFyYW1zKGF2Y3R4KSk7Ci0KLWZhaWw6Ci0gICAg cmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBhY3RpdmF0ZShBVkZpbHRlckNvbnRleHQgKmF2 Y3R4KQotewotICAgIEJsZW5kVnVsa2FuQ29udGV4dCAqcyA9IGF2Y3R4LT5wcml2OwotICAgIHJl dHVybiBmZl9mcmFtZXN5bmNfYWN0aXZhdGUoJnMtPmZzKTsKLX0KLQotI2RlZmluZSBPRkZTRVQo eCkgb2Zmc2V0b2YoQmxlbmRWdWxrYW5Db250ZXh0LCB4KQotI2RlZmluZSBGTEFHUyAoQVZfT1BU X0ZMQUdfRklMVEVSSU5HX1BBUkFNIHwgQVZfT1BUX0ZMQUdfVklERU9fUEFSQU0pCi0KLXN0YXRp YyBjb25zdCBBVk9wdGlvbiBibGVuZF92dWxrYW5fb3B0aW9uc1tdID0gewotICAgIHsgImMwX21v ZGUiLCAic2V0IGNvbXBvbmVudCAjMCBibGVuZCBtb2RlIiwgT0ZGU0VUKHBhcmFtc1swXS5tb2Rl KSwgQVZfT1BUX1RZUEVfSU5ULCB7IC5pNjQgPSAwIH0sIDAsIEJMRU5EX05CIC0gMSwgRkxBR1Ms IC51bml0ID0gIm1vZGUiIH0sCi0gICAgeyAiYzFfbW9kZSIsICJzZXQgY29tcG9uZW50ICMxIGJs ZW5kIG1vZGUiLCBPRkZTRVQocGFyYW1zWzFdLm1vZGUpLCBBVl9PUFRfVFlQRV9JTlQsIHsgLmk2 NCA9IDAgfSwgMCwgQkxFTkRfTkIgLSAxLCBGTEFHUywgLnVuaXQgPSAibW9kZSIgfSwKLSAgICB7 ICJjMl9tb2RlIiwgInNldCBjb21wb25lbnQgIzIgYmxlbmQgbW9kZSIsIE9GRlNFVChwYXJhbXNb Ml0ubW9kZSksIEFWX09QVF9UWVBFX0lOVCwgeyAuaTY0ID0gMCB9LCAwLCBCTEVORF9OQiAtIDEs IEZMQUdTLCAudW5pdCA9ICJtb2RlIiB9LAotICAgIHsgImMzX21vZGUiLCAic2V0IGNvbXBvbmVu dCAjMyBibGVuZCBtb2RlIiwgT0ZGU0VUKHBhcmFtc1szXS5tb2RlKSwgQVZfT1BUX1RZUEVfSU5U LCB7IC5pNjQgPSAwIH0sIDAsIEJMRU5EX05CIC0gMSwgRkxBR1MsIC51bml0ID0gIm1vZGUiIH0s Ci0gICAgeyAiYWxsX21vZGUiLCAic2V0IGJsZW5kIG1vZGUgZm9yIGFsbCBjb21wb25lbnRzIiwg T0ZGU0VUKGFsbF9tb2RlKSwgQVZfT1BUX1RZUEVfSU5ULCB7IC5pNjQgPSAtMSB9LCAtMSwgQkxF TkRfTkIgLSAxLCBGTEFHUywgLnVuaXQgPSAibW9kZSIgfSwKLSAgICAgICAgeyAibm9ybWFsIiwg ICAiIiwgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsgLmk2NCA9IEJMRU5EX05PUk1BTCAgIH0sIDAs IDAsIEZMQUdTLCAudW5pdCA9ICJtb2RlIiB9LAotICAgICAgICB7ICJtdWx0aXBseSIsICIiLCAw LCBBVl9PUFRfVFlQRV9DT05TVCwgeyAuaTY0ID0gQkxFTkRfTVVMVElQTFkgfSwgMCwgMCwgRkxB R1MsIC51bml0ID0gIm1vZGUiIH0sCi0KLSAgICB7ICJjMF9vcGFjaXR5IiwgICJzZXQgY29sb3Ig Y29tcG9uZW50ICMwIG9wYWNpdHkiLCBPRkZTRVQocGFyYW1zWzBdLm9wYWNpdHkpLCBBVl9PUFRf VFlQRV9ET1VCTEUsIHsgLmRibCA9IDEgfSwgMCwgMSwgRkxBR1MgfSwKLSAgICB7ICJjMV9vcGFj aXR5IiwgICJzZXQgY29sb3IgY29tcG9uZW50ICMxIG9wYWNpdHkiLCBPRkZTRVQocGFyYW1zWzFd Lm9wYWNpdHkpLCBBVl9PUFRfVFlQRV9ET1VCTEUsIHsgLmRibCA9IDEgfSwgMCwgMSwgRkxBR1Mg fSwKLSAgICB7ICJjMl9vcGFjaXR5IiwgICJzZXQgY29sb3IgY29tcG9uZW50ICMyIG9wYWNpdHki LCBPRkZTRVQocGFyYW1zWzJdLm9wYWNpdHkpLCBBVl9PUFRfVFlQRV9ET1VCTEUsIHsgLmRibCA9 IDEgfSwgMCwgMSwgRkxBR1MgfSwKLSAgICB7ICJjM19vcGFjaXR5IiwgICJzZXQgY29sb3IgY29t cG9uZW50ICMzIG9wYWNpdHkiLCBPRkZTRVQocGFyYW1zWzNdLm9wYWNpdHkpLCBBVl9PUFRfVFlQ RV9ET1VCTEUsIHsgLmRibCA9IDEgfSwgMCwgMSwgRkxBR1MgfSwKLSAgICB7ICJhbGxfb3BhY2l0 eSIsICJzZXQgb3BhY2l0eSBmb3IgYWxsIGNvbG9yIGNvbXBvbmVudHMiLCBPRkZTRVQoYWxsX29w YWNpdHkpLCBBVl9PUFRfVFlQRV9ET1VCTEUsIHsgLmRibCA9IDEgfSwgMCwgMSwgRkxBR1MgfSwK LQotICAgIHsgTlVMTCB9Ci19OwotCi1BVkZJTFRFUl9ERUZJTkVfQ0xBU1MoYmxlbmRfdnVsa2Fu KTsKLQotc3RhdGljIGNvbnN0IEFWRmlsdGVyUGFkIGJsZW5kX3Z1bGthbl9pbnB1dHNbXSA9IHsK LSAgICB7Ci0gICAgICAgIC5uYW1lICAgICAgICAgPSAidG9wIiwKLSAgICAgICAgLnR5cGUgICAg ICAgICA9IEFWTUVESUFfVFlQRV9WSURFTywKLSAgICAgICAgLmNvbmZpZ19wcm9wcyA9ICZmZl92 a19maWx0ZXJfY29uZmlnX2lucHV0LAotICAgIH0sCi0gICAgewotICAgICAgICAubmFtZSAgICAg ICAgID0gImJvdHRvbSIsCi0gICAgICAgIC50eXBlICAgICAgICAgPSBBVk1FRElBX1RZUEVfVklE RU8sCi0gICAgICAgIC5jb25maWdfcHJvcHMgPSAmZmZfdmtfZmlsdGVyX2NvbmZpZ19pbnB1dCwK LSAgICB9LAotfTsKLQotCi1zdGF0aWMgY29uc3QgQVZGaWx0ZXJQYWQgYmxlbmRfdnVsa2FuX291 dHB1dHNbXSA9IHsKLSAgICB7Ci0gICAgICAgIC5uYW1lICAgICAgICAgPSAiZGVmYXVsdCIsCi0g ICAgICAgIC50eXBlICAgICAgICAgPSBBVk1FRElBX1RZUEVfVklERU8sCi0gICAgICAgIC5jb25m aWdfcHJvcHMgPSAmY29uZmlnX3Byb3BzX291dHB1dCwKLSAgICB9Ci19OwotCi1jb25zdCBGRkZp bHRlciBmZl92Zl9ibGVuZF92dWxrYW4gPSB7Ci0gICAgLnAubmFtZSAgICAgICAgICA9ICJibGVu ZF92dWxrYW4iLAotICAgIC5wLmRlc2NyaXB0aW9uICAgPSBOVUxMX0lGX0NPTkZJR19TTUFMTCgi QmxlbmQgdHdvIHZpZGVvIGZyYW1lcyBpbiBWdWxrYW4iKSwKLSAgICAucC5wcml2X2NsYXNzICAg ID0gJmJsZW5kX3Z1bGthbl9jbGFzcywKLSAgICAucC5mbGFncyAgICAgICAgID0gQVZGSUxURVJf RkxBR19IV0RFVklDRSwKLSAgICAucHJpdl9zaXplICAgICAgID0gc2l6ZW9mKEJsZW5kVnVsa2Fu Q29udGV4dCksCi0gICAgLmluaXQgICAgICAgICAgICA9ICZpbml0LAotICAgIC51bmluaXQgICAg ICAgICAgPSAmdW5pbml0LAotICAgIC5hY3RpdmF0ZSAgICAgICAgPSAmYWN0aXZhdGUsCi0gICAg RklMVEVSX0lOUFVUUyhibGVuZF92dWxrYW5faW5wdXRzKSwKLSAgICBGSUxURVJfT1VUUFVUUyhi bGVuZF92dWxrYW5fb3V0cHV0cyksCi0gICAgRklMVEVSX1NJTkdMRV9QSVhGTVQoQVZfUElYX0ZN VF9WVUxLQU4pLAotICAgIC5mbGFnc19pbnRlcm5hbCAgPSBGRl9GSUxURVJfRkxBR19IV0ZSQU1F X0FXQVJFLAotICAgIC5wcm9jZXNzX2NvbW1hbmQgPSAmcHJvY2Vzc19jb21tYW5kLAotfTsKLS0g CjIuNDkuMQoKCkZyb20gNThjZWRmZTY3NjQ4OTlkMTkxZTRmM2U0MmY1NTcwMjNiNjNlYjQ3NyBN b24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKRnJvbTogSmFtYWlrYTEgPGx1a2FzemN6MThAd3AucGw+ CkRhdGU6IFdlZCwgMyBTZXAgMjAyNSAxMjo0OToxNCArMDAwMApTdWJqZWN0OiBbUEFUQ0ggMDA2 LzExOF0gQ2hhbmdpbmcgdnVsa2FuIGZpbGUgZGlyZWN0b3J5CgotLS0KIGxpYmF2ZmlsdGVyL3Z1 bGthbi92Zl9ibGVuZF92dWxrYW4uYyB8IDM5OSArKysrKysrKysrKysrKysrKysrKysrKysrKysK IDEgZmlsZSBjaGFuZ2VkLCAzOTkgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGxp YmF2ZmlsdGVyL3Z1bGthbi92Zl9ibGVuZF92dWxrYW4uYwoKZGlmZiAtLWdpdCBhL2xpYmF2Zmls dGVyL3Z1bGthbi92Zl9ibGVuZF92dWxrYW4uYyBiL2xpYmF2ZmlsdGVyL3Z1bGthbi92Zl9ibGVu ZF92dWxrYW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi44M2UyMTdi ZTAyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYXZmaWx0ZXIvdnVsa2FuL3ZmX2JsZW5kX3Z1bGth bi5jCkBAIC0wLDAgKzEsMzk5IEBACisvKgorICogY29weXJpZ2h0IChjKSAyMDIxLTIwMjIgV3Ug Smlhbmh1YSA8amlhbmh1YS53dUBpbnRlbC5jb20+CisgKiBDb3B5cmlnaHQgKGMpIEx5bm5lCisg KgorICogVGhlIGJsZW5kIG1vZGVzIGFyZSBiYXNlZCBvbiB0aGUgYmxlbmQuYy4KKyAqCisgKiBU aGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCisgKgorICogRkZtcGVnIGlzIGZyZWUgc29mdHdh cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz aW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy c2lvbi4KKyAqCisgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3 aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNl bnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJl CisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBC b3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisgKi8KKworI2luY2x1ZGUgImxpYmF2dXRpbC9yYW5k b21fc2VlZC5oIgorI2luY2x1ZGUgIi4uLy4uL2xpYmF2dXRpbC92dWxrYW4vdnVsa2FuX3NwaXJ2 LmgiCisjaW5jbHVkZSAibGliYXZ1dGlsL29wdC5oIgorI2luY2x1ZGUgInZ1bGthbl9maWx0ZXIu aCIKKworI2luY2x1ZGUgImxpYmF2ZmlsdGVyL2ZpbHRlcnMuaCIKKyNpbmNsdWRlICJsaWJhdmZp bHRlci9mcmFtZXN5bmMuaCIKKyNpbmNsdWRlICJsaWJhdmZpbHRlci9ibGVuZC5oIgorI2luY2x1 ZGUgImxpYmF2ZmlsdGVyL3ZpZGVvLmgiCisKKyNkZWZpbmUgSU5fVE9QICAgIDAKKyNkZWZpbmUg SU5fQk9UVE9NIDEKKwordHlwZWRlZiBzdHJ1Y3QgRmlsdGVyUGFyYW1zVnVsa2FuIHsKKyAgICBj b25zdCBjaGFyICpibGVuZDsKKyAgICBjb25zdCBjaGFyICpibGVuZF9mdW5jOworICAgIGRvdWJs ZSBvcGFjaXR5OworICAgIGVudW0gQmxlbmRNb2RlIG1vZGU7Cit9IEZpbHRlclBhcmFtc1Z1bGth bjsKKwordHlwZWRlZiBzdHJ1Y3QgQmxlbmRWdWxrYW5Db250ZXh0IHsKKyAgICBGRlZ1bGthbkNv bnRleHQgdmtjdHg7CisgICAgRkZGcmFtZVN5bmMgZnM7CisKKyAgICBpbnQgaW5pdGlhbGl6ZWQ7 CisgICAgRkZWa0V4ZWNQb29sIGU7CisgICAgQVZWdWxrYW5EZXZpY2VRdWV1ZUZhbWlseSAqcWY7 CisgICAgRkZWdWxrYW5TaGFkZXIgc2hkOworCisgICAgRmlsdGVyUGFyYW1zVnVsa2FuIHBhcmFt c1s0XTsKKyAgICBkb3VibGUgYWxsX29wYWNpdHk7CisgICAgZW51bSBCbGVuZE1vZGUgYWxsX21v ZGU7Cit9IEJsZW5kVnVsa2FuQ29udGV4dDsKKworI2RlZmluZSBERUZJTkVfQkxFTkRfTU9ERShN T0RFLCBFWFBSKSBcCitzdGF0aWMgY29uc3QgY2hhciBibGVuZF8jI01PREVbXSA9ICJibGVuZF8i I01PREU7IFwKK3N0YXRpYyBjb25zdCBjaGFyIGJsZW5kXyMjTU9ERSMjX2Z1bmNbXSA9IHsgXAor ICAgIEMoMCwgdmVjNCBibGVuZF8jI01PREUodmVjNCB0b3AsIHZlYzQgYm90dG9tLCBmbG9hdCBv cGFjaXR5KSB7ICAgKSBcCisgICAgQygxLCAgICAgdmVjNCBkc3QgPSBFWFBSOyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIFwKKyAgICBDKDEsICAgICByZXR1cm4gZHN0 OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgXAorICAgIEMo MCwgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKSBcCit9OworCisjZGVmaW5lIEEgdG9wCisjZGVmaW5lIEIgYm90dG9tCisKKyNkZWZp bmUgRk4oRVhQUikgQSArICgoRVhQUikgLSBBKSAqIG9wYWNpdHkKKworREVGSU5FX0JMRU5EX01P REUoTk9STUFMLCBBICogb3BhY2l0eSArIEIgKiAoMS4wZiAtIG9wYWNpdHkpKQorREVGSU5FX0JM RU5EX01PREUoTVVMVElQTFksIEZOKDEuMGYgKiBBICogQiAvIDEuMGYpKQorCitzdGF0aWMgaW5s aW5lIHZvaWQgaW5pdF9ibGVuZF9mdW5jKEZpbHRlclBhcmFtc1Z1bGthbiAqcGFyYW0pCit7Cisj ZGVmaW5lIENBU0UoTU9ERSkgY2FzZSBCTEVORF8jI01PREU6IFwKKyAgICAgICAgICAgIHBhcmFt LT5ibGVuZCA9IGJsZW5kXyMjTU9ERTtcCisgICAgICAgICAgICBwYXJhbS0+YmxlbmRfZnVuYyA9 ICBibGVuZF8jI01PREUjI19mdW5jOyBcCisgICAgICAgICAgICBicmVhazsKKworICAgIHN3aXRj aCAocGFyYW0tPm1vZGUpIHsKKyAgICBDQVNFKE5PUk1BTCkKKyAgICBDQVNFKE1VTFRJUExZKQor ICAgIGRlZmF1bHQ6IHBhcmFtLT5ibGVuZCA9IE5VTEw7IGJyZWFrOworICAgIH0KKworI3VuZGVm IENBU0UKK30KKworc3RhdGljIGludCBjb25maWdfcGFyYW1zKEFWRmlsdGVyQ29udGV4dCAqYXZj dHgpCit7CisgICAgQmxlbmRWdWxrYW5Db250ZXh0ICpzID0gYXZjdHgtPnByaXY7CisKKyAgICBm b3IgKGludCBwbGFuZSA9IDA7IHBsYW5lIDwgRkZfQVJSQVlfRUxFTVMocy0+cGFyYW1zKTsgcGxh bmUrKykgeworICAgICAgICBGaWx0ZXJQYXJhbXNWdWxrYW4gKnBhcmFtID0gJnMtPnBhcmFtc1tw bGFuZV07CisKKyAgICAgICAgaWYgKHMtPmFsbF9tb2RlID49IDApCisgICAgICAgICAgICBwYXJh bS0+bW9kZSA9IHMtPmFsbF9tb2RlOworICAgICAgICBpZiAocy0+YWxsX29wYWNpdHkgPCAxKQor ICAgICAgICAgICAgcGFyYW0tPm9wYWNpdHkgPSBzLT5hbGxfb3BhY2l0eTsKKworICAgICAgICBp bml0X2JsZW5kX2Z1bmMocGFyYW0pOworICAgICAgICBpZiAoIXBhcmFtLT5ibGVuZCkgeworICAg ICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsCisgICAgICAgICAgICAgICAgICAg IkN1cnJlbnRseSB0aGUgYmxlbmQgbW9kZSBzcGVjaWZpZWQgaXMgbm90IHN1cHBvcnRlZCB5ZXQu XG4iKTsKKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7CisgICAgICAgIH0KKyAg ICB9CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwcm9jZXNzX2NvbW1hbmQoQVZG aWx0ZXJDb250ZXh0ICpjdHgsIGNvbnN0IGNoYXIgKmNtZCwgY29uc3QgY2hhciAqYXJncywKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnJlcywgaW50IHJlc19sZW4sIGludCBmbGFn cykKK3sKKyAgICBpbnQgcmV0ID0gZmZfZmlsdGVyX3Byb2Nlc3NfY29tbWFuZChjdHgsIGNtZCwg YXJncywgcmVzLCByZXNfbGVuLCBmbGFncyk7CisgICAgaWYgKHJldCA8IDApCisgICAgICAgIHJl dHVybiByZXQ7CisKKyAgICByZXR1cm4gY29uZmlnX3BhcmFtcyhjdHgpOworfQorCitzdGF0aWMg YXZfY29sZCBpbnQgaW5pdF9maWx0ZXIoQVZGaWx0ZXJDb250ZXh0ICphdmN0eCkKK3sKKyAgICBp bnQgZXJyID0gMDsKKyAgICB1aW50OF90ICpzcHZfZGF0YTsKKyAgICBzaXplX3Qgc3B2X2xlbjsK KyAgICB2b2lkICpzcHZfb3BhcXVlID0gTlVMTDsKKyAgICBCbGVuZFZ1bGthbkNvbnRleHQgKnMg PSBhdmN0eC0+cHJpdjsKKyAgICBGRlZ1bGthbkNvbnRleHQgKnZrY3R4ID0gJnMtPnZrY3R4Owor ICAgIGNvbnN0IGludCBwbGFuZXMgPSBhdl9waXhfZm10X2NvdW50X3BsYW5lcyhzLT52a2N0eC5v dXRwdXRfZm9ybWF0KTsKKyAgICBGRlZ1bGthblNoYWRlciAqc2hkID0gJnMtPnNoZDsKKyAgICBG RlZrU1BJUlZDb21waWxlciAqc3B2OworICAgIEZGVnVsa2FuRGVzY3JpcHRvclNldEJpbmRpbmcg KmRlc2M7CisKKyAgICBzcHYgPSBmZl92a19zcGlydl9pbml0KCk7CisgICAgaWYgKCFzcHYpIHsK KyAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJVbmFibGUgdG8gaW5pdGlhbGl6 ZSBTUElSLVYgY29tcGlsZXIhXG4iKTsKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfRVhURVJOQUw7 CisgICAgfQorCisgICAgcy0+cWYgPSBmZl92a19xZl9maW5kKHZrY3R4LCBWS19RVUVVRV9DT01Q VVRFX0JJVCwgMCk7CisgICAgaWYgKCFzLT5xZikgeworICAgICAgICBhdl9sb2coYXZjdHgsIEFW X0xPR19FUlJPUiwgIkRldmljZSBoYXMgbm8gY29tcHV0ZSBxdWV1ZXNcbiIpOworICAgICAgICBl cnIgPSBBVkVSUk9SKEVOT1RTVVApOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAg UkVUKGZmX3ZrX2V4ZWNfcG9vbF9pbml0KHZrY3R4LCBzLT5xZiwgJnMtPmUsIHMtPnFmLT5udW0q NCwgMCwgMCwgMCwgTlVMTCkpOworICAgIFJFVChmZl92a19zaGFkZXJfaW5pdCh2a2N0eCwgJnMt PnNoZCwgImJsZW5kIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgVktfU0hBREVSX1NUQUdF X0NPTVBVVEVfQklULAorICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAzMiwgMzIsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAg IDApKTsKKworICAgIGRlc2MgPSAoRkZWdWxrYW5EZXNjcmlwdG9yU2V0QmluZGluZyBbXSkgewor ICAgICAgICB7CisgICAgICAgICAgICAubmFtZSAgICAgICA9ICJ0b3BfaW1hZ2VzIiwKKyAgICAg ICAgICAgIC50eXBlICAgICAgID0gVktfREVTQ1JJUFRPUl9UWVBFX1NUT1JBR0VfSU1BR0UsCisg ICAgICAgICAgICAubWVtX2xheW91dCA9IGZmX3ZrX3NoYWRlcl9yZXBfZm10KHMtPnZrY3R4Lmlu cHV0X2Zvcm1hdCwgRkZfVktfUkVQX0ZMT0FUKSwKKyAgICAgICAgICAgIC5tZW1fcXVhbGkgID0g InJlYWRvbmx5IiwKKyAgICAgICAgICAgIC5kaW1lbnNpb25zID0gMiwKKyAgICAgICAgICAgIC5l bGVtcyAgICAgID0gcGxhbmVzLAorICAgICAgICAgICAgLnN0YWdlcyAgICAgPSBWS19TSEFERVJf U1RBR0VfQ09NUFVURV9CSVQsCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgIC5u YW1lICAgICAgID0gImJvdHRvbV9pbWFnZXMiLAorICAgICAgICAgICAgLnR5cGUgICAgICAgPSBW S19ERVNDUklQVE9SX1RZUEVfU1RPUkFHRV9JTUFHRSwKKyAgICAgICAgICAgIC5tZW1fbGF5b3V0 ID0gZmZfdmtfc2hhZGVyX3JlcF9mbXQocy0+dmtjdHguaW5wdXRfZm9ybWF0LCBGRl9WS19SRVBf RkxPQVQpLAorICAgICAgICAgICAgLm1lbV9xdWFsaSAgPSAicmVhZG9ubHkiLAorICAgICAgICAg ICAgLmRpbWVuc2lvbnMgPSAyLAorICAgICAgICAgICAgLmVsZW1zICAgICAgPSBwbGFuZXMsCisg ICAgICAgICAgICAuc3RhZ2VzICAgICA9IFZLX1NIQURFUl9TVEFHRV9DT01QVVRFX0JJVCwKKyAg ICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgLm5hbWUgICAgICAgPSAib3V0cHV0X2lt YWdlcyIsCisgICAgICAgICAgICAudHlwZSAgICAgICA9IFZLX0RFU0NSSVBUT1JfVFlQRV9TVE9S QUdFX0lNQUdFLAorICAgICAgICAgICAgLm1lbV9sYXlvdXQgPSBmZl92a19zaGFkZXJfcmVwX2Zt dChzLT52a2N0eC5vdXRwdXRfZm9ybWF0LCBGRl9WS19SRVBfRkxPQVQpLAorICAgICAgICAgICAg Lm1lbV9xdWFsaSAgPSAid3JpdGVvbmx5IiwKKyAgICAgICAgICAgIC5kaW1lbnNpb25zID0gMiwK KyAgICAgICAgICAgIC5lbGVtcyAgICAgID0gcGxhbmVzLAorICAgICAgICAgICAgLnN0YWdlcyAg ICAgPSBWS19TSEFERVJfU1RBR0VfQ09NUFVURV9CSVQsCisgICAgICAgIH0sCisgICAgfTsKKwor ICAgIFJFVChmZl92a19zaGFkZXJfYWRkX2Rlc2NyaXB0b3Jfc2V0KHZrY3R4LCAmcy0+c2hkLCBk ZXNjLCAzLCAwLCAwKSk7CisKKyAgICBmb3IgKGludCBpID0gMCwgaiA9IDA7IGkgPCBwbGFuZXM7 IGkrKykgeworICAgICAgICBmb3IgKGogPSAwOyBqIDwgaTsgaisrKQorICAgICAgICAgICAgaWYg KHMtPnBhcmFtc1tpXS5ibGVuZF9mdW5jID09IHMtPnBhcmFtc1tqXS5ibGVuZF9mdW5jKQorICAg ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAvKiBub3RlOiB0aGUgYnJhY2tldCBpcyBuZWVk ZWQsIGZvciBHTFNMRCBpcyBhIG1hY3JvIHdpdGggbXVsdGlwbGUgc3RhdGVtZW50cy4gKi8KKyAg ICAgICAgaWYgKGogPT0gaSkgeworICAgICAgICAgICAgR0xTTEQocy0+cGFyYW1zW2ldLmJsZW5k X2Z1bmMpOworICAgICAgICB9CisgICAgfQorCisgICAgR0xTTEMoMCwgdm9pZCBtYWluKCkgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBH TFNMQygwLCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICApOworICAgIEdMU0xDKDEsICAgICBpdmVjMiBzaXplOyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgR0xTTEMoMSwgICAg IGNvbnN0IGl2ZWMyIHBvcyA9IGl2ZWMyKGdsX0dsb2JhbEludm9jYXRpb25JRC54eSk7ICAgICAg ICAgKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHBsYW5lczsgaSsrKSB7CisgICAgICAgIEdM U0xDKDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKTsKKyAgICAgICAgR0xTTEYoMSwgc2l6ZSA9IGltYWdlU2l6ZShvdXRwdXRfaW1h Z2VzWyVpXSk7ICAgICAgICAgICAgICAgICAgICAgLGkpOworICAgICAgICBHTFNMQygxLCBpZiAo SVNfV0lUSElOKHBvcywgc2l6ZSkpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7 CisgICAgICAgIEdMU0xGKDIsICAgICBjb25zdCB2ZWM0IHRvcCA9IGltYWdlTG9hZCh0b3BfaW1h Z2VzWyVpXSwgcG9zKTsgICAgICAgLGkpOworICAgICAgICBHTFNMRigyLCAgICAgY29uc3QgdmVj NCBib3R0b20gPSBpbWFnZUxvYWQoYm90dG9tX2ltYWdlc1slaV0sIHBvcyk7ICxpKTsKKyAgICAg ICAgR0xTTEYoMiwgICAgIGNvbnN0IGZsb2F0IG9wYWNpdHkgPSAlZjsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLHMtPnBhcmFtc1tpXS5vcGFjaXR5KTsKKyAgICAgICAgR0xTTEYoMiwgICAg IHZlYzQgZHN0ID0gJXModG9wLCBib3R0b20sIG9wYWNpdHkpOyAgICAgICAgICAgICAgICAgLHMt PnBhcmFtc1tpXS5ibGVuZCk7CisgICAgICAgIEdMU0xDKDAsICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgR0xTTEYo MiwgICAgIGltYWdlU3RvcmUob3V0cHV0X2ltYWdlc1slaV0sIHBvcywgZHN0KTsgICAgICAgICAg ICAgLGkpOworICAgICAgICBHTFNMQygxLCB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgfQorICAgIEdMU0xDKDAsIH0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICk7CisKKyAgICBSRVQoc3B2LT5jb21waWxlX3NoYWRlcih2a2N0eCwgc3B2LCBzaGQsICZzcHZf ZGF0YSwgJnNwdl9sZW4sICJtYWluIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3B2 X29wYXF1ZSkpOworICAgIFJFVChmZl92a19zaGFkZXJfbGluayh2a2N0eCwgc2hkLCBzcHZfZGF0 YSwgc3B2X2xlbiwgIm1haW4iKSk7CisKKyAgICBSRVQoZmZfdmtfc2hhZGVyX3JlZ2lzdGVyX2V4 ZWModmtjdHgsICZzLT5lLCAmcy0+c2hkKSk7CisKKyAgICBzLT5pbml0aWFsaXplZCA9IDE7CisK K2ZhaWw6CisgICAgaWYgKHNwdl9vcGFxdWUpCisgICAgICAgIHNwdi0+ZnJlZV9zaGFkZXIoc3B2 LCAmc3B2X29wYXF1ZSk7CisgICAgaWYgKHNwdikKKyAgICAgICAgc3B2LT51bmluaXQoJnNwdik7 CisKKyAgICByZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGJsZW5kX2ZyYW1lKEZGRnJhbWVT eW5jICpmcykKK3sKKyAgICBpbnQgZXJyOworICAgIEFWRmlsdGVyQ29udGV4dCAqYXZjdHggPSBm cy0+cGFyZW50OworICAgIEJsZW5kVnVsa2FuQ29udGV4dCAqcyA9IGF2Y3R4LT5wcml2OworICAg IEFWRmlsdGVyTGluayAqb3V0bGluayA9IGF2Y3R4LT5vdXRwdXRzWzBdOworICAgIEFWRnJhbWUg KnRvcCwgKmJvdHRvbSwgKm91dDsKKworICAgIG91dCA9IGZmX2dldF92aWRlb19idWZmZXIob3V0 bGluaywgb3V0bGluay0+dywgb3V0bGluay0+aCk7CisgICAgaWYgKCFvdXQpIHsKKyAgICAgICAg ZXJyID0gQVZFUlJPUihFTk9NRU0pOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAg UkVUKGZmX2ZyYW1lc3luY19nZXRfZnJhbWUoZnMsIElOX1RPUCwgICAgJnRvcCwgICAgMCkpOwor ICAgIFJFVChmZl9mcmFtZXN5bmNfZ2V0X2ZyYW1lKGZzLCBJTl9CT1RUT00sICZib3R0b20sIDAp KTsKKworICAgIFJFVChhdl9mcmFtZV9jb3B5X3Byb3BzKG91dCwgdG9wKSk7CisKKyAgICBpZiAo IXMtPmluaXRpYWxpemVkKSB7CisgICAgICAgIEFWSFdGcmFtZXNDb250ZXh0ICp0b3BfZmMgPSAo QVZIV0ZyYW1lc0NvbnRleHQqKXRvcC0+aHdfZnJhbWVzX2N0eC0+ZGF0YTsKKyAgICAgICAgQVZI V0ZyYW1lc0NvbnRleHQgKmJvdHRvbV9mYyA9IChBVkhXRnJhbWVzQ29udGV4dCopYm90dG9tLT5o d19mcmFtZXNfY3R4LT5kYXRhOworICAgICAgICBpZiAodG9wX2ZjLT5zd19mb3JtYXQgIT0gYm90 dG9tX2ZjLT5zd19mb3JtYXQpIHsKKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VS Uk9SLAorICAgICAgICAgICAgICAgICAgICJDdXJyZW50bHkgdGhlIHN3IGZvcm1hdCBvZiB0aGUg Ym90dG9tIHZpZGVvIG5lZWQgdG8gbWF0Y2ggdGhlIHRvcCFcbiIpOworICAgICAgICAgICAgZXJy ID0gQVZFUlJPUihFSU5WQUwpOworICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICB9Cisg ICAgICAgIFJFVChpbml0X2ZpbHRlcihhdmN0eCkpOworICAgIH0KKworICAgIFJFVChmZl92a19m aWx0ZXJfcHJvY2Vzc19OaW4oJnMtPnZrY3R4LCAmcy0+ZSwgJnMtPnNoZCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG91dCwgKEFWRnJhbWUgKltdKXsgdG9wLCBib3R0b20gfSwg MiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZLX05VTExfSEFORExFLCBOVUxM LCAwKSk7CisKKyAgICByZXR1cm4gZmZfZmlsdGVyX2ZyYW1lKG91dGxpbmssIG91dCk7CisKK2Zh aWw6CisgICAgYXZfZnJhbWVfZnJlZSgmb3V0KTsKKyAgICByZXR1cm4gZXJyOworfQorCitzdGF0 aWMgYXZfY29sZCBpbnQgaW5pdChBVkZpbHRlckNvbnRleHQgKmF2Y3R4KQoreworICAgIEJsZW5k VnVsa2FuQ29udGV4dCAqcyA9IGF2Y3R4LT5wcml2OworCisgICAgcy0+ZnMub25fZXZlbnQgPSBi bGVuZF9mcmFtZTsKKworICAgIHJldHVybiBmZl92a19maWx0ZXJfaW5pdChhdmN0eCk7Cit9CisK K3N0YXRpYyBhdl9jb2xkIHZvaWQgdW5pbml0KEFWRmlsdGVyQ29udGV4dCAqYXZjdHgpCit7Cisg ICAgQmxlbmRWdWxrYW5Db250ZXh0ICpzID0gYXZjdHgtPnByaXY7CisgICAgRkZWdWxrYW5Db250 ZXh0ICp2a2N0eCA9ICZzLT52a2N0eDsKKworICAgIGZmX3ZrX2V4ZWNfcG9vbF9mcmVlKHZrY3R4 LCAmcy0+ZSk7CisgICAgZmZfdmtfc2hhZGVyX2ZyZWUodmtjdHgsICZzLT5zaGQpOworCisgICAg ZmZfdmtfdW5pbml0KCZzLT52a2N0eCk7CisgICAgZmZfZnJhbWVzeW5jX3VuaW5pdCgmcy0+ZnMp OworCisgICAgcy0+aW5pdGlhbGl6ZWQgPSAwOworfQorCitzdGF0aWMgaW50IGNvbmZpZ19wcm9w c19vdXRwdXQoQVZGaWx0ZXJMaW5rICpvdXRsaW5rKQoreworICAgIGludCBlcnI7CisgICAgRmls dGVyTGluayAqb3V0bCAgICAgICA9IGZmX2ZpbHRlcl9saW5rKG91dGxpbmspOworICAgIEFWRmls dGVyQ29udGV4dCAqYXZjdHggPSBvdXRsaW5rLT5zcmM7CisgICAgQmxlbmRWdWxrYW5Db250ZXh0 ICpzID0gYXZjdHgtPnByaXY7CisgICAgQVZGaWx0ZXJMaW5rICp0b3BsaW5rID0gYXZjdHgtPmlu cHV0c1tJTl9UT1BdOworICAgIEZpbHRlckxpbmsgICAqdGwgICAgICA9IGZmX2ZpbHRlcl9saW5r KHRvcGxpbmspOworICAgIEFWRmlsdGVyTGluayAqYm90dG9tbGluayA9IGF2Y3R4LT5pbnB1dHNb SU5fQk9UVE9NXTsKKworICAgIGlmICh0b3BsaW5rLT53ICE9IGJvdHRvbWxpbmstPncgfHwgdG9w bGluay0+aCAhPSBib3R0b21saW5rLT5oKSB7CisgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9H X0VSUk9SLCAiRmlyc3QgaW5wdXQgbGluayAlcyBwYXJhbWV0ZXJzICIKKyAgICAgICAgICAgICAg ICAiKHNpemUgJWR4JWQpIGRvIG5vdCBtYXRjaCB0aGUgY29ycmVzcG9uZGluZyAiCisgICAgICAg ICAgICAgICAgInNlY29uZCBpbnB1dCBsaW5rICVzIHBhcmFtZXRlcnMgKHNpemUgJWR4JWQpXG4i LAorICAgICAgICAgICAgICAgIGF2Y3R4LT5pbnB1dF9wYWRzW0lOX1RPUF0ubmFtZSwgdG9wbGlu ay0+dywgdG9wbGluay0+aCwKKyAgICAgICAgICAgICAgICBhdmN0eC0+aW5wdXRfcGFkc1tJTl9C T1RUT01dLm5hbWUsIGJvdHRvbWxpbmstPncsIGJvdHRvbWxpbmstPmgpOworICAgICAgICByZXR1 cm4gQVZFUlJPUihFSU5WQUwpOworICAgIH0KKworICAgIG91dGxpbmstPnNhbXBsZV9hc3BlY3Rf cmF0aW8gPSB0b3BsaW5rLT5zYW1wbGVfYXNwZWN0X3JhdGlvOworICAgIG91dGwtPmZyYW1lX3Jh dGUgPSB0bC0+ZnJhbWVfcmF0ZTsKKworICAgIFJFVChmZl92a19maWx0ZXJfY29uZmlnX291dHB1 dChvdXRsaW5rKSk7CisKKyAgICBSRVQoZmZfZnJhbWVzeW5jX2luaXRfZHVhbGlucHV0KCZzLT5m cywgYXZjdHgpKTsKKworICAgIFJFVChmZl9mcmFtZXN5bmNfY29uZmlndXJlKCZzLT5mcykpOwor ICAgIG91dGxpbmstPnRpbWVfYmFzZSA9IHMtPmZzLnRpbWVfYmFzZTsKKworICAgIFJFVChjb25m aWdfcGFyYW1zKGF2Y3R4KSk7CisKK2ZhaWw6CisgICAgcmV0dXJuIGVycjsKK30KKworc3RhdGlj IGludCBhY3RpdmF0ZShBVkZpbHRlckNvbnRleHQgKmF2Y3R4KQoreworICAgIEJsZW5kVnVsa2Fu Q29udGV4dCAqcyA9IGF2Y3R4LT5wcml2OworICAgIHJldHVybiBmZl9mcmFtZXN5bmNfYWN0aXZh dGUoJnMtPmZzKTsKK30KKworI2RlZmluZSBPRkZTRVQoeCkgb2Zmc2V0b2YoQmxlbmRWdWxrYW5D b250ZXh0LCB4KQorI2RlZmluZSBGTEFHUyAoQVZfT1BUX0ZMQUdfRklMVEVSSU5HX1BBUkFNIHwg QVZfT1BUX0ZMQUdfVklERU9fUEFSQU0pCisKK3N0YXRpYyBjb25zdCBBVk9wdGlvbiBibGVuZF92 dWxrYW5fb3B0aW9uc1tdID0geworICAgIHsgImMwX21vZGUiLCAic2V0IGNvbXBvbmVudCAjMCBi bGVuZCBtb2RlIiwgT0ZGU0VUKHBhcmFtc1swXS5tb2RlKSwgQVZfT1BUX1RZUEVfSU5ULCB7IC5p NjQgPSAwIH0sIDAsIEJMRU5EX05CIC0gMSwgRkxBR1MsIC51bml0ID0gIm1vZGUiIH0sCisgICAg eyAiYzFfbW9kZSIsICJzZXQgY29tcG9uZW50ICMxIGJsZW5kIG1vZGUiLCBPRkZTRVQocGFyYW1z WzFdLm1vZGUpLCBBVl9PUFRfVFlQRV9JTlQsIHsgLmk2NCA9IDAgfSwgMCwgQkxFTkRfTkIgLSAx LCBGTEFHUywgLnVuaXQgPSAibW9kZSIgfSwKKyAgICB7ICJjMl9tb2RlIiwgInNldCBjb21wb25l bnQgIzIgYmxlbmQgbW9kZSIsIE9GRlNFVChwYXJhbXNbMl0ubW9kZSksIEFWX09QVF9UWVBFX0lO VCwgeyAuaTY0ID0gMCB9LCAwLCBCTEVORF9OQiAtIDEsIEZMQUdTLCAudW5pdCA9ICJtb2RlIiB9 LAorICAgIHsgImMzX21vZGUiLCAic2V0IGNvbXBvbmVudCAjMyBibGVuZCBtb2RlIiwgT0ZGU0VU KHBhcmFtc1szXS5tb2RlKSwgQVZfT1BUX1RZUEVfSU5ULCB7IC5pNjQgPSAwIH0sIDAsIEJMRU5E X05CIC0gMSwgRkxBR1MsIC51bml0ID0gIm1vZGUiIH0sCisgICAgeyAiYWxsX21vZGUiLCAic2V0 IGJsZW5kIG1vZGUgZm9yIGFsbCBjb21wb25lbnRzIiwgT0ZGU0VUKGFsbF9tb2RlKSwgQVZfT1BU X1RZUEVfSU5ULCB7IC5pNjQgPSAtMSB9LCAtMSwgQkxFTkRfTkIgLSAxLCBGTEFHUywgLnVuaXQg PSAibW9kZSIgfSwKKyAgICAgICAgeyAibm9ybWFsIiwgICAiIiwgMCwgQVZfT1BUX1RZUEVfQ09O U1QsIHsgLmk2NCA9IEJMRU5EX05PUk1BTCAgIH0sIDAsIDAsIEZMQUdTLCAudW5pdCA9ICJtb2Rl IiB9LAorICAgICAgICB7ICJtdWx0aXBseSIsICIiLCAwLCBBVl9PUFRfVFlQRV9DT05TVCwgeyAu aTY0ID0gQkxFTkRfTVVMVElQTFkgfSwgMCwgMCwgRkxBR1MsIC51bml0ID0gIm1vZGUiIH0sCisK KyAgICB7ICJjMF9vcGFjaXR5IiwgICJzZXQgY29sb3IgY29tcG9uZW50ICMwIG9wYWNpdHkiLCBP RkZTRVQocGFyYW1zWzBdLm9wYWNpdHkpLCBBVl9PUFRfVFlQRV9ET1VCTEUsIHsgLmRibCA9IDEg fSwgMCwgMSwgRkxBR1MgfSwKKyAgICB7ICJjMV9vcGFjaXR5IiwgICJzZXQgY29sb3IgY29tcG9u ZW50ICMxIG9wYWNpdHkiLCBPRkZTRVQocGFyYW1zWzFdLm9wYWNpdHkpLCBBVl9PUFRfVFlQRV9E T1VCTEUsIHsgLmRibCA9IDEgfSwgMCwgMSwgRkxBR1MgfSwKKyAgICB7ICJjMl9vcGFjaXR5Iiwg ICJzZXQgY29sb3IgY29tcG9uZW50ICMyIG9wYWNpdHkiLCBPRkZTRVQocGFyYW1zWzJdLm9wYWNp dHkpLCBBVl9PUFRfVFlQRV9ET1VCTEUsIHsgLmRibCA9IDEgfSwgMCwgMSwgRkxBR1MgfSwKKyAg ICB7ICJjM19vcGFjaXR5IiwgICJzZXQgY29sb3IgY29tcG9uZW50ICMzIG9wYWNpdHkiLCBPRkZT RVQocGFyYW1zWzNdLm9wYWNpdHkpLCBBVl9PUFRfVFlQRV9ET1VCTEUsIHsgLmRibCA9IDEgfSwg MCwgMSwgRkxBR1MgfSwKKyAgICB7ICJhbGxfb3BhY2l0eSIsICJzZXQgb3BhY2l0eSBmb3IgYWxs IGNvbG9yIGNvbXBvbmVudHMiLCBPRkZTRVQoYWxsX29wYWNpdHkpLCBBVl9PUFRfVFlQRV9ET1VC TEUsIHsgLmRibCA9IDEgfSwgMCwgMSwgRkxBR1MgfSwKKworICAgIHsgTlVMTCB9Cit9OworCitB VkZJTFRFUl9ERUZJTkVfQ0xBU1MoYmxlbmRfdnVsa2FuKTsKKworc3RhdGljIGNvbnN0IEFWRmls dGVyUGFkIGJsZW5kX3Z1bGthbl9pbnB1dHNbXSA9IHsKKyAgICB7CisgICAgICAgIC5uYW1lICAg ICAgICAgPSAidG9wIiwKKyAgICAgICAgLnR5cGUgICAgICAgICA9IEFWTUVESUFfVFlQRV9WSURF TywKKyAgICAgICAgLmNvbmZpZ19wcm9wcyA9ICZmZl92a19maWx0ZXJfY29uZmlnX2lucHV0LAor ICAgIH0sCisgICAgeworICAgICAgICAubmFtZSAgICAgICAgID0gImJvdHRvbSIsCisgICAgICAg IC50eXBlICAgICAgICAgPSBBVk1FRElBX1RZUEVfVklERU8sCisgICAgICAgIC5jb25maWdfcHJv cHMgPSAmZmZfdmtfZmlsdGVyX2NvbmZpZ19pbnB1dCwKKyAgICB9LAorfTsKKworCitzdGF0aWMg Y29uc3QgQVZGaWx0ZXJQYWQgYmxlbmRfdnVsa2FuX291dHB1dHNbXSA9IHsKKyAgICB7CisgICAg ICAgIC5uYW1lICAgICAgICAgPSAiZGVmYXVsdCIsCisgICAgICAgIC50eXBlICAgICAgICAgPSBB Vk1FRElBX1RZUEVfVklERU8sCisgICAgICAgIC5jb25maWdfcHJvcHMgPSAmY29uZmlnX3Byb3Bz X291dHB1dCwKKyAgICB9Cit9OworCitjb25zdCBGRkZpbHRlciBmZl92Zl9ibGVuZF92dWxrYW4g PSB7CisgICAgLnAubmFtZSAgICAgICAgICA9ICJibGVuZF92dWxrYW4iLAorICAgIC5wLmRlc2Ny aXB0aW9uICAgPSBOVUxMX0lGX0NPTkZJR19TTUFMTCgiQmxlbmQgdHdvIHZpZGVvIGZyYW1lcyBp biBWdWxrYW4iKSwKKyAgICAucC5wcml2X2NsYXNzICAgID0gJmJsZW5kX3Z1bGthbl9jbGFzcywK KyAgICAucC5mbGFncyAgICAgICAgID0gQVZGSUxURVJfRkxBR19IV0RFVklDRSwKKyAgICAucHJp dl9zaXplICAgICAgID0gc2l6ZW9mKEJsZW5kVnVsa2FuQ29udGV4dCksCisgICAgLmluaXQgICAg ICAgICAgICA9ICZpbml0LAorICAgIC51bmluaXQgICAgICAgICAgPSAmdW5pbml0LAorICAgIC5h Y3RpdmF0ZSAgICAgICAgPSAmYWN0aXZhdGUsCisgICAgRklMVEVSX0lOUFVUUyhibGVuZF92dWxr YW5faW5wdXRzKSwKKyAgICBGSUxURVJfT1VUUFVUUyhibGVuZF92dWxrYW5fb3V0cHV0cyksCisg ICAgRklMVEVSX1NJTkdMRV9QSVhGTVQoQVZfUElYX0ZNVF9WVUxLQU4pLAorICAgIC5mbGFnc19p bnRlcm5hbCAgPSBGRl9GSUxURVJfRkxBR19IV0ZSQU1FX0FXQVJFLAorICAgIC5wcm9jZXNzX2Nv bW1hbmQgPSAmcHJvY2Vzc19jb21tYW5kLAorfTsKLS0gCjIuNDkuMQoKCkZyb20gOGRkOTUxMWUw NzVmNDM5MzdmZGNjMzkzMzVhZGI3NjE1MGUzMjQ5NyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEK RnJvbTogSmFtYWlrYTEgPGx1a2FzemN6MThAd3AucGw+CkRhdGU6IFdlZCwgMyBTZXAgMjAyNSAx Mjo0OTo1NyArMDAwMApTdWJqZWN0OiBbUEFUQ0ggMDA3LzExOF0gQ2hhbmdpbmcgdnVsa2FuIGZp bGUgZGlyZWN0b3J5CgotLS0KIGxpYmF2ZmlsdGVyL3ZmX2J3ZGlmX3Z1bGthbi5jIHwgMzM3IC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAzMzcgZGVs ZXRpb25zKC0pCiBkZWxldGUgbW9kZSAxMDA2NDQgbGliYXZmaWx0ZXIvdmZfYndkaWZfdnVsa2Fu LmMKCmRpZmYgLS1naXQgYS9saWJhdmZpbHRlci92Zl9id2RpZl92dWxrYW4uYyBiL2xpYmF2Zmls dGVyL3ZmX2J3ZGlmX3Z1bGthbi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NDll ODE0ODg2Li4wMDAwMDAwMDAwCi0tLSBhL2xpYmF2ZmlsdGVyL3ZmX2J3ZGlmX3Z1bGthbi5jCisr KyAvZGV2L251bGwKQEAgLTEsMzM3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIEx5bm5l Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTggUGhpbGlwIExhbmdkYWxlIDxwaGlsaXBsQG92ZXJ0Lm9y Zz4KLSAqIENvcHlyaWdodCAoQykgMjAxNiBUaG9tYXMgTXVuZHQgPGxvdWRtYXhAeWFob28uZGU+ Ci0gKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgotICoKLSAqIEZGbXBlZyBpcyBm cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBp dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExp Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl cgotICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55 IGxhdGVyIHZlcnNpb24uCi0gKgotICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9y IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3Nl ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNo b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp YwotICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJl ZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0 aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQotICovCi0KLSNpbmNsdWRlICJsaWJh dnV0aWwvcmFuZG9tX3NlZWQuaCIKLSNpbmNsdWRlICJsaWJhdnV0aWwvb3B0LmgiCi0jaW5jbHVk ZSAibGliYXZ1dGlsL3Z1bGthbl9zcGlydi5oIgotI2luY2x1ZGUgInZ1bGthbl9maWx0ZXIuaCIK LSNpbmNsdWRlICJ5YWRpZi5oIgotI2luY2x1ZGUgImZpbHRlcnMuaCIKLQotdHlwZWRlZiBzdHJ1 Y3QgQldESUZWdWxrYW5Db250ZXh0IHsKLSAgICBZQURJRkNvbnRleHQgeWFkaWY7Ci0gICAgRkZW dWxrYW5Db250ZXh0IHZrY3R4OwotCi0gICAgaW50IGluaXRpYWxpemVkOwotICAgIEZGVmtFeGVj UG9vbCBlOwotICAgIEFWVnVsa2FuRGV2aWNlUXVldWVGYW1pbHkgKnFmOwotICAgIEZGVnVsa2Fu U2hhZGVyIHNoZDsKLX0gQldESUZWdWxrYW5Db250ZXh0OwotCi10eXBlZGVmIHN0cnVjdCBCV0RJ RlBhcmFtZXRlcnMgewotICAgIGludCBwYXJpdHk7Ci0gICAgaW50IHRmZjsKLSAgICBpbnQgY3Vy cmVudF9maWVsZDsKLX0gQldESUZQYXJhbWV0ZXJzOwotCi1leHRlcm4gY29uc3QgY2hhciAqZmZf c291cmNlX2J3ZGlmX2NvbXA7Ci0KLXN0YXRpYyBhdl9jb2xkIGludCBpbml0X2ZpbHRlcihBVkZp bHRlckNvbnRleHQgKmN0eCkKLXsKLSAgICBpbnQgZXJyOwotICAgIHVpbnQ4X3QgKnNwdl9kYXRh OwotICAgIHNpemVfdCBzcHZfbGVuOwotICAgIHZvaWQgKnNwdl9vcGFxdWUgPSBOVUxMOwotICAg IEJXRElGVnVsa2FuQ29udGV4dCAqcyA9IGN0eC0+cHJpdjsKLSAgICBGRlZ1bGthbkNvbnRleHQg KnZrY3R4ID0gJnMtPnZrY3R4OwotICAgIGNvbnN0IGludCBwbGFuZXMgPSBhdl9waXhfZm10X2Nv dW50X3BsYW5lcyhzLT52a2N0eC5vdXRwdXRfZm9ybWF0KTsKLSAgICBGRlZ1bGthblNoYWRlciAq c2hkOwotICAgIEZGVmtTUElSVkNvbXBpbGVyICpzcHY7Ci0gICAgRkZWdWxrYW5EZXNjcmlwdG9y U2V0QmluZGluZyAqZGVzYzsKLQotICAgIHNwdiA9IGZmX3ZrX3NwaXJ2X2luaXQoKTsKLSAgICBp ZiAoIXNwdikgewotICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJVbmFibGUgdG8g aW5pdGlhbGl6ZSBTUElSLVYgY29tcGlsZXIhXG4iKTsKLSAgICAgICAgcmV0dXJuIEFWRVJST1Jf RVhURVJOQUw7Ci0gICAgfQotCi0gICAgcy0+cWYgPSBmZl92a19xZl9maW5kKHZrY3R4LCBWS19R VUVVRV9DT01QVVRFX0JJVCwgMCk7Ci0gICAgaWYgKCFzLT5xZikgewotICAgICAgICBhdl9sb2co Y3R4LCBBVl9MT0dfRVJST1IsICJEZXZpY2UgaGFzIG5vIGNvbXB1dGUgcXVldWVzXG4iKTsKLSAg ICAgICAgZXJyID0gQVZFUlJPUihFTk9UU1VQKTsKLSAgICAgICAgZ290byBmYWlsOwotICAgIH0K LQotICAgIFJFVChmZl92a19leGVjX3Bvb2xfaW5pdCh2a2N0eCwgcy0+cWYsICZzLT5lLCBzLT5x Zi0+bnVtKjQsIDAsIDAsIDAsIE5VTEwpKTsKLQotICAgIFJFVChmZl92a19zaGFkZXJfaW5pdCh2 a2N0eCwgJnMtPnNoZCwgImJ3ZGlmIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgVktfU0hB REVSX1NUQUdFX0NPTVBVVEVfQklULAotICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAw LAotICAgICAgICAgICAgICAgICAgICAgICAgICAxLCA2NCwgMSwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgMCkpOwotICAgIHNoZCA9ICZzLT5zaGQ7Ci0KLSAgICBkZXNjID0gKEZGVnVsa2Fu RGVzY3JpcHRvclNldEJpbmRpbmcgW10pIHsKLSAgICAgICAgewotICAgICAgICAgICAgLm5hbWUg ICAgICAgPSAicHJldiIsCi0gICAgICAgICAgICAudHlwZSAgICAgICA9IFZLX0RFU0NSSVBUT1Jf VFlQRV9TVE9SQUdFX0lNQUdFLAotICAgICAgICAgICAgLm1lbV9sYXlvdXQgPSBmZl92a19zaGFk ZXJfcmVwX2ZtdChzLT52a2N0eC5pbnB1dF9mb3JtYXQsIEZGX1ZLX1JFUF9GTE9BVCksCi0gICAg ICAgICAgICAubWVtX3F1YWxpICA9ICJyZWFkb25seSIsCi0gICAgICAgICAgICAuZGltZW5zaW9u cyA9IDIsCi0gICAgICAgICAgICAuZWxlbXMgICAgICA9IHBsYW5lcywKLSAgICAgICAgICAgIC5z dGFnZXMgICAgID0gVktfU0hBREVSX1NUQUdFX0NPTVBVVEVfQklULAotICAgICAgICB9LAotICAg ICAgICB7Ci0gICAgICAgICAgICAubmFtZSAgICAgICA9ICJjdXIiLAotICAgICAgICAgICAgLnR5 cGUgICAgICAgPSBWS19ERVNDUklQVE9SX1RZUEVfU1RPUkFHRV9JTUFHRSwKLSAgICAgICAgICAg IC5tZW1fbGF5b3V0ID0gZmZfdmtfc2hhZGVyX3JlcF9mbXQocy0+dmtjdHguaW5wdXRfZm9ybWF0 LCBGRl9WS19SRVBfRkxPQVQpLAotICAgICAgICAgICAgLm1lbV9xdWFsaSAgPSAicmVhZG9ubHki LAotICAgICAgICAgICAgLmRpbWVuc2lvbnMgPSAyLAotICAgICAgICAgICAgLmVsZW1zICAgICAg PSBwbGFuZXMsCi0gICAgICAgICAgICAuc3RhZ2VzICAgICA9IFZLX1NIQURFUl9TVEFHRV9DT01Q VVRFX0JJVCwKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgLm5hbWUgICAgICAg PSAibmV4dCIsCi0gICAgICAgICAgICAudHlwZSAgICAgICA9IFZLX0RFU0NSSVBUT1JfVFlQRV9T VE9SQUdFX0lNQUdFLAotICAgICAgICAgICAgLm1lbV9sYXlvdXQgPSBmZl92a19zaGFkZXJfcmVw X2ZtdChzLT52a2N0eC5pbnB1dF9mb3JtYXQsIEZGX1ZLX1JFUF9GTE9BVCksCi0gICAgICAgICAg ICAubWVtX3F1YWxpICA9ICJyZWFkb25seSIsCi0gICAgICAgICAgICAuZGltZW5zaW9ucyA9IDIs Ci0gICAgICAgICAgICAuZWxlbXMgICAgICA9IHBsYW5lcywKLSAgICAgICAgICAgIC5zdGFnZXMg ICAgID0gVktfU0hBREVSX1NUQUdFX0NPTVBVVEVfQklULAotICAgICAgICB9LAotICAgICAgICB7 Ci0gICAgICAgICAgICAubmFtZSAgICAgICA9ICJkc3QiLAotICAgICAgICAgICAgLnR5cGUgICAg ICAgPSBWS19ERVNDUklQVE9SX1RZUEVfU1RPUkFHRV9JTUFHRSwKLSAgICAgICAgICAgIC5tZW1f bGF5b3V0ID0gZmZfdmtfc2hhZGVyX3JlcF9mbXQocy0+dmtjdHgub3V0cHV0X2Zvcm1hdCwgRkZf VktfUkVQX0ZMT0FUKSwKLSAgICAgICAgICAgIC5tZW1fcXVhbGkgID0gIndyaXRlb25seSIsCi0g ICAgICAgICAgICAuZGltZW5zaW9ucyA9IDIsCi0gICAgICAgICAgICAuZWxlbXMgICAgICA9IHBs YW5lcywKLSAgICAgICAgICAgIC5zdGFnZXMgICAgID0gVktfU0hBREVSX1NUQUdFX0NPTVBVVEVf QklULAotICAgICAgICB9LAotICAgIH07Ci0KLSAgICBSRVQoZmZfdmtfc2hhZGVyX2FkZF9kZXNj cmlwdG9yX3NldCh2a2N0eCwgJnMtPnNoZCwgZGVzYywgNCwgMCwgMCkpOwotCi0gICAgR0xTTEMo MCwgbGF5b3V0KHB1c2hfY29uc3RhbnQsIHN0ZDQzMCkgdW5pZm9ybSBwdXNoQ29uc3RhbnRzIHsg ICAgICAgICAgICAgICAgICk7Ci0gICAgR0xTTEMoMSwgICAgaW50IHBhcml0eTsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgR0xT TEMoMSwgICAgaW50IHRmZjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICk7Ci0gICAgR0xTTEMoMSwgICAgaW50IGN1cnJlbnRfZmllbGQ7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAg R0xTTEMoMCwgfTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICk7Ci0KLSAgICBmZl92a19zaGFkZXJfYWRkX3B1c2hfY29u c3QoJnMtPnNoZCwgMCwgc2l6ZW9mKEJXRElGUGFyYW1ldGVycyksCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFZLX1NIQURFUl9TVEFHRV9DT01QVVRFX0JJVCk7Ci0KLSAgICBHTFNM RChmZl9zb3VyY2VfYndkaWZfY29tcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKTsKLSAgICBHTFNMQygwLCB2b2lkIG1haW4oKSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBH TFNMQygwLCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBHTFNMQygxLCAgICAgaXZlYzIgc2l6ZTsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAg ICBHTFNMQygxLCAgICAgY29uc3QgaXZlYzIgcG9zID0gaXZlYzIoZ2xfR2xvYmFsSW52b2NhdGlv bklELnh5KTsgICAgICAgICAgICAgICAgKTsKLSAgICBHTFNMQygxLCAgICAgYm9vbCBmaWx0ZXJf ZmllbGQgPSAoKHBvcy55IF4gcGFyaXR5KSAmIDEpID09IDE7ICAgICAgICAgICAgICAgICAgKTsK LSAgICBHTFNMRigxLCAgICAgYm9vbCBpc19pbnRyYSA9IGZpbHRlcl9maWVsZCAmJiAoY3VycmVu dF9maWVsZCA9PSAlaSk7ICAgICAgICAgICAsWUFESUZfRklFTERfRU5EKTsKLSAgICBHTFNMQygx LCAgICAgYm9vbCBmaWVsZF9wYXJpdHkgPSAocGFyaXR5IF4gdGZmKSAhPSAwOyAgICAgICAgICAg ICAgICAgICAgICAgICAgKTsKLSAgICBHTFNMQygwLCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBHTFNM QygxLCAgICAgc2l6ZSA9IGltYWdlU2l6ZShkc3RbMF0pOyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKTsKLSAgICBHTFNMQygxLCAgICAgaWYgKCFJU19XSVRISU4ocG9z LCBzaXplKSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBH TFNMQygyLCAgICAgICAgIHJldHVybjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBHTFNMQygxLCAgICAgfSBlbHNlIGlmIChpc19p bnRyYSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAg ICBmb3IgKGludCBpID0gMDsgaSA8IHBsYW5lczsgaSsrKSB7Ci0gICAgICAgIGlmIChpID09IDEp IHsKLSAgICAgICAgICAgIEdMU0xGKDIsIHNpemUgPSBpbWFnZVNpemUoZHN0WyVpXSk7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLGkpOwotICAgICAgICAgICAgR0xTTEMoMiwg aWYgKCFJU19XSVRISU4ocG9zLCBzaXplKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICApOwotICAgICAgICAgICAgR0xTTEMoMywgICAgIHJldHVybjsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICB9Ci0gICAgICAg IEdMU0xGKDIsICAgICBwcm9jZXNzX3BsYW5lX2ludHJhKCVpLCBwb3MpOyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICxpKTsKLSAgICB9Ci0gICAgR0xTTEMoMSwgICAgIH0gZWxzZSBp ZiAoZmlsdGVyX2ZpZWxkKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwbGFuZXM7IGkrKykgewotICAgICAgICBpZiAo aSA9PSAxKSB7Ci0gICAgICAgICAgICBHTFNMRigyLCBzaXplID0gaW1hZ2VTaXplKGRzdFslaV0p OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICxpKTsKLSAgICAgICAgICAgIEdM U0xDKDIsIGlmICghSVNfV0lUSElOKHBvcywgc2l6ZSkpICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKTsKLSAgICAgICAgICAgIEdMU0xDKDMsICAgICByZXR1cm47ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgfQot ICAgICAgICBHTFNMRigyLCAgICAgcHJvY2Vzc19wbGFuZSglaSwgcG9zLCBmaWx0ZXJfZmllbGQs IGlzX2ludHJhLCBmaWVsZF9wYXJpdHkpOyAsaSk7Ci0gICAgfQotICAgIEdMU0xDKDEsICAgICB9 IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICApOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcGxhbmVzOyBpKyspIHsKLSAgICAg ICAgaWYgKGkgPT0gMSkgewotICAgICAgICAgICAgR0xTTEYoMiwgc2l6ZSA9IGltYWdlU2l6ZShk c3RbJWldKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsaSk7Ci0gICAgICAg ICAgICBHTFNMQygyLCBpZiAoIUlTX1dJVEhJTihwb3MsIHNpemUpKSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICBHTFNMQygzLCAgICAgcmV0dXJuOyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAg ICAgIH0KLSAgICAgICAgR0xTTEYoMiwgICAgIGltYWdlU3RvcmUoZHN0WyVpXSwgcG9zLCBpbWFn ZUxvYWQoY3VyWyVpXSwgcG9zKSk7ICAgICAgICAgICAgLGksIGkpOwotICAgIH0KLSAgICBHTFNM QygxLCAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKTsKLSAgICBHTFNMQygwLCB9ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLQotICAg IFJFVChzcHYtPmNvbXBpbGVfc2hhZGVyKHZrY3R4LCBzcHYsICZzLT5zaGQsICZzcHZfZGF0YSwg JnNwdl9sZW4sICJtYWluIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3B2X29wYXF1 ZSkpOwotICAgIFJFVChmZl92a19zaGFkZXJfbGluayh2a2N0eCwgJnMtPnNoZCwgc3B2X2RhdGEs IHNwdl9sZW4sICJtYWluIikpOwotCi0gICAgUkVUKGZmX3ZrX3NoYWRlcl9yZWdpc3Rlcl9leGVj KHZrY3R4LCAmcy0+ZSwgJnMtPnNoZCkpOwotCi0gICAgcy0+aW5pdGlhbGl6ZWQgPSAxOwotCi1m YWlsOgotICAgIGlmIChzcHZfb3BhcXVlKQotICAgICAgICBzcHYtPmZyZWVfc2hhZGVyKHNwdiwg JnNwdl9vcGFxdWUpOwotICAgIGlmIChzcHYpCi0gICAgICAgIHNwdi0+dW5pbml0KCZzcHYpOwot Ci0gICAgcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIHZvaWQgYndkaWZfdnVsa2FuX2ZpbHRlcl9m cmFtZShBVkZpbHRlckNvbnRleHQgKmN0eCwgQVZGcmFtZSAqZHN0LAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpbnQgcGFyaXR5LCBpbnQgdGZmKQotewotICAgIEJXRElG VnVsa2FuQ29udGV4dCAqcyA9IGN0eC0+cHJpdjsKLSAgICBZQURJRkNvbnRleHQgKnkgPSAmcy0+ eWFkaWY7Ci0gICAgQldESUZQYXJhbWV0ZXJzIHBhcmFtcyA9IHsKLSAgICAgICAgLnBhcml0eSA9 IHBhcml0eSwKLSAgICAgICAgLnRmZiA9IHRmZiwKLSAgICAgICAgLmN1cnJlbnRfZmllbGQgPSB5 LT5jdXJyZW50X2ZpZWxkLAotICAgIH07Ci0KLSAgICBmZl92a19maWx0ZXJfcHJvY2Vzc19OaW4o JnMtPnZrY3R4LCAmcy0+ZSwgJnMtPnNoZCwgZHN0LAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAoQVZGcmFtZSAqW10peyB5LT5wcmV2LCB5LT5jdXIsIHktPm5leHQgfSwgMywKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgVktfTlVMTF9IQU5ETEUsICZwYXJhbXMsIHNpemVvZihw YXJhbXMpKTsKLQotICAgIGlmICh5LT5jdXJyZW50X2ZpZWxkID09IFlBRElGX0ZJRUxEX0VORCkK LSAgICAgICAgeS0+Y3VycmVudF9maWVsZCA9IFlBRElGX0ZJRUxEX05PUk1BTDsKLX0KLQotc3Rh dGljIHZvaWQgYndkaWZfdnVsa2FuX3VuaW5pdChBVkZpbHRlckNvbnRleHQgKmF2Y3R4KQotewot ICAgIEJXRElGVnVsa2FuQ29udGV4dCAqcyA9IGF2Y3R4LT5wcml2OwotICAgIEZGVnVsa2FuQ29u dGV4dCAqdmtjdHggPSAmcy0+dmtjdHg7Ci0KLSAgICBmZl92a19leGVjX3Bvb2xfZnJlZSh2a2N0 eCwgJnMtPmUpOwotICAgIGZmX3ZrX3NoYWRlcl9mcmVlKHZrY3R4LCAmcy0+c2hkKTsKLQotICAg IGZmX3ZrX3VuaW5pdCgmcy0+dmtjdHgpOwotCi0gICAgZmZfeWFkaWZfdW5pbml0KGF2Y3R4KTsK LQotICAgIHMtPmluaXRpYWxpemVkID0gMDsKLX0KLQotc3RhdGljIGludCBid2RpZl92dWxrYW5f Y29uZmlnX2lucHV0KEFWRmlsdGVyTGluayAqaW5saW5rKQotewotICAgIEZpbHRlckxpbmsgKmwg PSBmZl9maWx0ZXJfbGluayhpbmxpbmspOwotICAgIEFWSFdGcmFtZXNDb250ZXh0ICppbnB1dF9m cmFtZXM7Ci0gICAgQVZGaWx0ZXJDb250ZXh0ICphdmN0eCA9IGlubGluay0+ZHN0OwotICAgIEJX RElGVnVsa2FuQ29udGV4dCAqcyA9IGF2Y3R4LT5wcml2OwotICAgIEZGVnVsa2FuQ29udGV4dCAq dmtjdHggPSAmcy0+dmtjdHg7Ci0KLSAgICBpZiAoIWwtPmh3X2ZyYW1lc19jdHgpIHsKLSAgICAg ICAgYXZfbG9nKGlubGluay0+ZHN0LCBBVl9MT0dfRVJST1IsICJWdWxrYW4gZmlsdGVyaW5nIHJl cXVpcmVzIGEgIgotICAgICAgICAgICAgICAgImhhcmR3YXJlIGZyYW1lcyBjb250ZXh0IG9uIHRo ZSBpbnB1dC5cbiIpOwotICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOwotICAgIH0KLQot ICAgIGlucHV0X2ZyYW1lcyA9IChBVkhXRnJhbWVzQ29udGV4dCAqKWwtPmh3X2ZyYW1lc19jdHgt PmRhdGE7Ci0gICAgaWYgKGlucHV0X2ZyYW1lcy0+Zm9ybWF0ICE9IEFWX1BJWF9GTVRfVlVMS0FO KQotICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOwotCi0gICAgLyogRXh0cmFjdCB0aGUg ZGV2aWNlIGFuZCBkZWZhdWx0IG91dHB1dCBmb3JtYXQgZnJvbSB0aGUgZmlyc3QgaW5wdXQuICov Ci0gICAgaWYgKGF2Y3R4LT5pbnB1dHNbMF0gIT0gaW5saW5rKQotICAgICAgICByZXR1cm4gMDsK LQotICAgIC8qIFNhdmUgdGhlIHJlZiwgd2l0aG91dCByZWZmaW5nIGl0ICovCi0gICAgdmtjdHgt PmlucHV0X2ZyYW1lc19yZWYgPSBsLT5od19mcmFtZXNfY3R4OwotCi0gICAgLyogRGVmYXVsdHMg Ki8KLSAgICB2a2N0eC0+b3V0cHV0X2Zvcm1hdCA9IGlucHV0X2ZyYW1lcy0+c3dfZm9ybWF0Owot ICAgIHZrY3R4LT5vdXRwdXRfd2lkdGggID0gaW5saW5rLT53OwotICAgIHZrY3R4LT5vdXRwdXRf aGVpZ2h0ID0gaW5saW5rLT5oOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYndk aWZfdnVsa2FuX2NvbmZpZ19vdXRwdXQoQVZGaWx0ZXJMaW5rICpvdXRsaW5rKQotewotICAgIEZp bHRlckxpbmsgKmwgPSBmZl9maWx0ZXJfbGluayhvdXRsaW5rKTsKLSAgICBpbnQgZXJyOwotICAg IEFWRmlsdGVyQ29udGV4dCAqYXZjdHggPSBvdXRsaW5rLT5zcmM7Ci0gICAgQldESUZWdWxrYW5D b250ZXh0ICpzID0gYXZjdHgtPnByaXY7Ci0gICAgWUFESUZDb250ZXh0ICp5ID0gJnMtPnlhZGlm OwotICAgIEZGVnVsa2FuQ29udGV4dCAqdmtjdHggPSAmcy0+dmtjdHg7Ci0KLSAgICBhdl9idWZm ZXJfdW5yZWYoJmwtPmh3X2ZyYW1lc19jdHgpOwotCi0gICAgZXJyID0gZmZfdmtfZmlsdGVyX2lu aXRfY29udGV4dChhdmN0eCwgdmtjdHgsIHZrY3R4LT5pbnB1dF9mcmFtZXNfcmVmLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmtjdHgtPm91dHB1dF93aWR0aCwgdmtjdHgt Pm91dHB1dF9oZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2a2N0 eC0+b3V0cHV0X2Zvcm1hdCk7Ci0gICAgaWYgKGVyciA8IDApCi0gICAgICAgIHJldHVybiBlcnI7 Ci0KLSAgICAvKiBGb3IgbG9nZ2luZyAqLwotICAgIHZrY3R4LT5jbGFzcyA9IHktPmNsYXNzOwot Ci0gICAgbC0+aHdfZnJhbWVzX2N0eCA9IGF2X2J1ZmZlcl9yZWYodmtjdHgtPmZyYW1lc19yZWYp OwotICAgIGlmICghbC0+aHdfZnJhbWVzX2N0eCkKLSAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5P TUVNKTsKLQotICAgIGVyciA9IGZmX3lhZGlmX2NvbmZpZ19vdXRwdXRfY29tbW9uKG91dGxpbmsp OwotICAgIGlmIChlcnIgPCAwKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgeS0+Y3NwID0g YXZfcGl4X2ZtdF9kZXNjX2dldCh2a2N0eC0+ZnJhbWVzLT5zd19mb3JtYXQpOwotICAgIHktPmZp bHRlciA9IGJ3ZGlmX3Z1bGthbl9maWx0ZXJfZnJhbWU7Ci0KLSAgICBpZiAoQVZfQ0VJTF9SU0hJ RlQob3V0bGluay0+dywgeS0+Y3NwLT5sb2cyX2Nocm9tYV93KSA8IDQgfHwgQVZfQ0VJTF9SU0hJ RlQob3V0bGluay0+aCwgeS0+Y3NwLT5sb2cyX2Nocm9tYV9oKSA8IDQpIHsKLSAgICAgICAgYXZf bG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJWaWRlbyB3aXRoIHBsYW5lcyBsZXNzIHRoYW4gNCBj b2x1bW5zIG9yIGxpbmVzIGlzIG5vdCBzdXBwb3J0ZWRcbiIpOwotICAgICAgICByZXR1cm4gQVZF UlJPUihFSU5WQUwpOwotICAgIH0KLQotICAgIHJldHVybiBpbml0X2ZpbHRlcihhdmN0eCk7Ci19 Ci0KLXN0YXRpYyBjb25zdCBBVkNsYXNzIGJ3ZGlmX3Z1bGthbl9jbGFzcyA9IHsKLSAgICAuY2xh c3NfbmFtZSA9ICJid2RpZl92dWxrYW4iLAotICAgIC5pdGVtX25hbWUgID0gYXZfZGVmYXVsdF9p dGVtX25hbWUsCi0gICAgLm9wdGlvbiAgICAgPSBmZl95YWRpZl9vcHRpb25zLAotICAgIC52ZXJz aW9uICAgID0gTElCQVZVVElMX1ZFUlNJT05fSU5ULAotICAgIC5jYXRlZ29yeSAgID0gQVZfQ0xB U1NfQ0FURUdPUllfRklMVEVSLAotfTsKLQotc3RhdGljIGNvbnN0IEFWRmlsdGVyUGFkIGJ3ZGlm X3Z1bGthbl9pbnB1dHNbXSA9IHsKLSAgICB7Ci0gICAgICAgIC5uYW1lICAgICAgICAgPSAiZGVm YXVsdCIsCi0gICAgICAgIC50eXBlICAgICAgICAgPSBBVk1FRElBX1RZUEVfVklERU8sCi0gICAg ICAgIC5maWx0ZXJfZnJhbWUgID0gZmZfeWFkaWZfZmlsdGVyX2ZyYW1lLAotICAgICAgICAuY29u ZmlnX3Byb3BzID0gJmJ3ZGlmX3Z1bGthbl9jb25maWdfaW5wdXQsCi0gICAgfSwKLX07Ci0KLXN0 YXRpYyBjb25zdCBBVkZpbHRlclBhZCBid2RpZl92dWxrYW5fb3V0cHV0c1tdID0gewotICAgIHsK LSAgICAgICAgLm5hbWUgPSAiZGVmYXVsdCIsCi0gICAgICAgIC50eXBlID0gQVZNRURJQV9UWVBF X1ZJREVPLAotICAgICAgICAucmVxdWVzdF9mcmFtZSA9IGZmX3lhZGlmX3JlcXVlc3RfZnJhbWUs Ci0gICAgICAgIC5jb25maWdfcHJvcHMgPSAmYndkaWZfdnVsa2FuX2NvbmZpZ19vdXRwdXQsCi0g ICAgfSwKLX07Ci0KLWNvbnN0IEZGRmlsdGVyIGZmX3ZmX2J3ZGlmX3Z1bGthbiA9IHsKLSAgICAu cC5uYW1lICAgICAgICAgPSAiYndkaWZfdnVsa2FuIiwKLSAgICAucC5kZXNjcmlwdGlvbiAgPSBO VUxMX0lGX0NPTkZJR19TTUFMTCgiRGVpbnRlcmxhY2UgVnVsa2FuIGZyYW1lcyB2aWEgYndkaWYi KSwKLSAgICAucC5wcml2X2NsYXNzICAgPSAmYndkaWZfdnVsa2FuX2NsYXNzLAotICAgIC5wLmZs YWdzICAgICAgICA9IEFWRklMVEVSX0ZMQUdfSFdERVZJQ0UgfAotICAgICAgICAgICAgICAgICAg ICAgIEFWRklMVEVSX0ZMQUdfU1VQUE9SVF9USU1FTElORV9JTlRFUk5BTCwKLSAgICAucHJpdl9z aXplICAgICAgPSBzaXplb2YoQldESUZWdWxrYW5Db250ZXh0KSwKLSAgICAuaW5pdCAgICAgICAg ICAgPSAmZmZfdmtfZmlsdGVyX2luaXQsCi0gICAgLnVuaW5pdCAgICAgICAgID0gJmJ3ZGlmX3Z1 bGthbl91bmluaXQsCi0gICAgRklMVEVSX0lOUFVUUyhid2RpZl92dWxrYW5faW5wdXRzKSwKLSAg ICBGSUxURVJfT1VUUFVUUyhid2RpZl92dWxrYW5fb3V0cHV0cyksCi0gICAgRklMVEVSX1NJTkdM RV9QSVhGTVQoQVZfUElYX0ZNVF9WVUxLQU4pLAotICAgIC5mbGFnc19pbnRlcm5hbCA9IEZGX0ZJ TFRFUl9GTEFHX0hXRlJBTUVfQVdBUkUsCi19OwotLSAKMi40OS4xCgoKRnJvbSA4Njg1NzkwMDg0 MjNhNzg2MWU2NWY0YmQyYTc4MTI4MzlmNGQxMTU5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpG cm9tOiBKYW1haWthMSA8bHVrYXN6Y3oxOEB3cC5wbD4KRGF0ZTogV2VkLCAzIFNlcCAyMDI1IDEy OjUxOjAyICswMDAwClN1YmplY3Q6IFtQQVRDSCAwMDgvMTE4XSBDaGFuZ2luZyB2dWxrYW4gZmls ZSBkaXJlY3RvcnkKCi0tLQogbGliYXZmaWx0ZXIvdnVsa2FuL3ZmX2J3ZGlmX3Z1bGthbi5jIHwg MzM3ICsrKysrKysrKysrKysrKysrKysrKysrKysrKwogMSBmaWxlIGNoYW5nZWQsIDMzNyBpbnNl cnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliYXZmaWx0ZXIvdnVsa2FuL3ZmX2J3ZGlm X3Z1bGthbi5jCgpkaWZmIC0tZ2l0IGEvbGliYXZmaWx0ZXIvdnVsa2FuL3ZmX2J3ZGlmX3Z1bGth bi5jIGIvbGliYXZmaWx0ZXIvdnVsa2FuL3ZmX2J3ZGlmX3Z1bGthbi5jCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjcxNjRmZTY5YmEKLS0tIC9kZXYvbnVsbAorKysgYi9s aWJhdmZpbHRlci92dWxrYW4vdmZfYndkaWZfdnVsa2FuLmMKQEAgLTAsMCArMSwzMzcgQEAKKy8q CisgKiBDb3B5cmlnaHQgKGMpIEx5bm5lCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggUGhpbGlwIExh bmdkYWxlIDxwaGlsaXBsQG92ZXJ0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxNiBUaG9tYXMg TXVuZHQgPGxvdWRtYXhAeWFob28uZGU+CisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZt cGVnLgorICoKKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNz ZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2Us IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogRkZtcGVnIGlz IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF LiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl IGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsg aWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwg NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVT QQorICovCisKKyNpbmNsdWRlICJsaWJhdnV0aWwvcmFuZG9tX3NlZWQuaCIKKyNpbmNsdWRlICJs aWJhdnV0aWwvb3B0LmgiCisjaW5jbHVkZSAiLi4vLi4vbGliYXZ1dGlsL3Z1bGthbi92dWxrYW5f c3BpcnYuaCIKKyNpbmNsdWRlICJ2dWxrYW5fZmlsdGVyLmgiCisjaW5jbHVkZSAibGliYXZmaWx0 ZXIveWFkaWYuaCIKKyNpbmNsdWRlICJsaWJhdmZpbHRlci9maWx0ZXJzLmgiCisKK3R5cGVkZWYg c3RydWN0IEJXRElGVnVsa2FuQ29udGV4dCB7CisgICAgWUFESUZDb250ZXh0IHlhZGlmOworICAg IEZGVnVsa2FuQ29udGV4dCB2a2N0eDsKKworICAgIGludCBpbml0aWFsaXplZDsKKyAgICBGRlZr RXhlY1Bvb2wgZTsKKyAgICBBVlZ1bGthbkRldmljZVF1ZXVlRmFtaWx5ICpxZjsKKyAgICBGRlZ1 bGthblNoYWRlciBzaGQ7Cit9IEJXRElGVnVsa2FuQ29udGV4dDsKKwordHlwZWRlZiBzdHJ1Y3Qg QldESUZQYXJhbWV0ZXJzIHsKKyAgICBpbnQgcGFyaXR5OworICAgIGludCB0ZmY7CisgICAgaW50 IGN1cnJlbnRfZmllbGQ7Cit9IEJXRElGUGFyYW1ldGVyczsKKworZXh0ZXJuIGNvbnN0IGNoYXIg KmZmX3NvdXJjZV9id2RpZl9jb21wOworCitzdGF0aWMgYXZfY29sZCBpbnQgaW5pdF9maWx0ZXIo QVZGaWx0ZXJDb250ZXh0ICpjdHgpCit7CisgICAgaW50IGVycjsKKyAgICB1aW50OF90ICpzcHZf ZGF0YTsKKyAgICBzaXplX3Qgc3B2X2xlbjsKKyAgICB2b2lkICpzcHZfb3BhcXVlID0gTlVMTDsK KyAgICBCV0RJRlZ1bGthbkNvbnRleHQgKnMgPSBjdHgtPnByaXY7CisgICAgRkZWdWxrYW5Db250 ZXh0ICp2a2N0eCA9ICZzLT52a2N0eDsKKyAgICBjb25zdCBpbnQgcGxhbmVzID0gYXZfcGl4X2Zt dF9jb3VudF9wbGFuZXMocy0+dmtjdHgub3V0cHV0X2Zvcm1hdCk7CisgICAgRkZWdWxrYW5TaGFk ZXIgKnNoZDsKKyAgICBGRlZrU1BJUlZDb21waWxlciAqc3B2OworICAgIEZGVnVsa2FuRGVzY3Jp cHRvclNldEJpbmRpbmcgKmRlc2M7CisKKyAgICBzcHYgPSBmZl92a19zcGlydl9pbml0KCk7Cisg ICAgaWYgKCFzcHYpIHsKKyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiVW5hYmxl IHRvIGluaXRpYWxpemUgU1BJUi1WIGNvbXBpbGVyIVxuIik7CisgICAgICAgIHJldHVybiBBVkVS Uk9SX0VYVEVSTkFMOworICAgIH0KKworICAgIHMtPnFmID0gZmZfdmtfcWZfZmluZCh2a2N0eCwg VktfUVVFVUVfQ09NUFVURV9CSVQsIDApOworICAgIGlmICghcy0+cWYpIHsKKyAgICAgICAgYXZf bG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiRGV2aWNlIGhhcyBubyBjb21wdXRlIHF1ZXVlc1xuIik7 CisgICAgICAgIGVyciA9IEFWRVJST1IoRU5PVFNVUCk7CisgICAgICAgIGdvdG8gZmFpbDsKKyAg ICB9CisKKyAgICBSRVQoZmZfdmtfZXhlY19wb29sX2luaXQodmtjdHgsIHMtPnFmLCAmcy0+ZSwg cy0+cWYtPm51bSo0LCAwLCAwLCAwLCBOVUxMKSk7CisKKyAgICBSRVQoZmZfdmtfc2hhZGVyX2lu aXQodmtjdHgsICZzLT5zaGQsICJid2RpZiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFZL X1NIQURFUl9TVEFHRV9DT01QVVRFX0JJVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTlVM TCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgNjQsIDEsCisgICAgICAgICAgICAg ICAgICAgICAgICAgIDApKTsKKyAgICBzaGQgPSAmcy0+c2hkOworCisgICAgZGVzYyA9IChGRlZ1 bGthbkRlc2NyaXB0b3JTZXRCaW5kaW5nIFtdKSB7CisgICAgICAgIHsKKyAgICAgICAgICAgIC5u YW1lICAgICAgID0gInByZXYiLAorICAgICAgICAgICAgLnR5cGUgICAgICAgPSBWS19ERVNDUklQ VE9SX1RZUEVfU1RPUkFHRV9JTUFHRSwKKyAgICAgICAgICAgIC5tZW1fbGF5b3V0ID0gZmZfdmtf c2hhZGVyX3JlcF9mbXQocy0+dmtjdHguaW5wdXRfZm9ybWF0LCBGRl9WS19SRVBfRkxPQVQpLAor ICAgICAgICAgICAgLm1lbV9xdWFsaSAgPSAicmVhZG9ubHkiLAorICAgICAgICAgICAgLmRpbWVu c2lvbnMgPSAyLAorICAgICAgICAgICAgLmVsZW1zICAgICAgPSBwbGFuZXMsCisgICAgICAgICAg ICAuc3RhZ2VzICAgICA9IFZLX1NIQURFUl9TVEFHRV9DT01QVVRFX0JJVCwKKyAgICAgICAgfSwK KyAgICAgICAgeworICAgICAgICAgICAgLm5hbWUgICAgICAgPSAiY3VyIiwKKyAgICAgICAgICAg IC50eXBlICAgICAgID0gVktfREVTQ1JJUFRPUl9UWVBFX1NUT1JBR0VfSU1BR0UsCisgICAgICAg ICAgICAubWVtX2xheW91dCA9IGZmX3ZrX3NoYWRlcl9yZXBfZm10KHMtPnZrY3R4LmlucHV0X2Zv cm1hdCwgRkZfVktfUkVQX0ZMT0FUKSwKKyAgICAgICAgICAgIC5tZW1fcXVhbGkgID0gInJlYWRv bmx5IiwKKyAgICAgICAgICAgIC5kaW1lbnNpb25zID0gMiwKKyAgICAgICAgICAgIC5lbGVtcyAg ICAgID0gcGxhbmVzLAorICAgICAgICAgICAgLnN0YWdlcyAgICAgPSBWS19TSEFERVJfU1RBR0Vf Q09NUFVURV9CSVQsCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgIC5uYW1lICAg ICAgID0gIm5leHQiLAorICAgICAgICAgICAgLnR5cGUgICAgICAgPSBWS19ERVNDUklQVE9SX1RZ UEVfU1RPUkFHRV9JTUFHRSwKKyAgICAgICAgICAgIC5tZW1fbGF5b3V0ID0gZmZfdmtfc2hhZGVy X3JlcF9mbXQocy0+dmtjdHguaW5wdXRfZm9ybWF0LCBGRl9WS19SRVBfRkxPQVQpLAorICAgICAg ICAgICAgLm1lbV9xdWFsaSAgPSAicmVhZG9ubHkiLAorICAgICAgICAgICAgLmRpbWVuc2lvbnMg PSAyLAorICAgICAgICAgICAgLmVsZW1zICAgICAgPSBwbGFuZXMsCisgICAgICAgICAgICAuc3Rh Z2VzICAgICA9IFZLX1NIQURFUl9TVEFHRV9DT01QVVRFX0JJVCwKKyAgICAgICAgfSwKKyAgICAg ICAgeworICAgICAgICAgICAgLm5hbWUgICAgICAgPSAiZHN0IiwKKyAgICAgICAgICAgIC50eXBl ICAgICAgID0gVktfREVTQ1JJUFRPUl9UWVBFX1NUT1JBR0VfSU1BR0UsCisgICAgICAgICAgICAu bWVtX2xheW91dCA9IGZmX3ZrX3NoYWRlcl9yZXBfZm10KHMtPnZrY3R4Lm91dHB1dF9mb3JtYXQs IEZGX1ZLX1JFUF9GTE9BVCksCisgICAgICAgICAgICAubWVtX3F1YWxpICA9ICJ3cml0ZW9ubHki LAorICAgICAgICAgICAgLmRpbWVuc2lvbnMgPSAyLAorICAgICAgICAgICAgLmVsZW1zICAgICAg PSBwbGFuZXMsCisgICAgICAgICAgICAuc3RhZ2VzICAgICA9IFZLX1NIQURFUl9TVEFHRV9DT01Q VVRFX0JJVCwKKyAgICAgICAgfSwKKyAgICB9OworCisgICAgUkVUKGZmX3ZrX3NoYWRlcl9hZGRf ZGVzY3JpcHRvcl9zZXQodmtjdHgsICZzLT5zaGQsIGRlc2MsIDQsIDAsIDApKTsKKworICAgIEdM U0xDKDAsIGxheW91dChwdXNoX2NvbnN0YW50LCBzdGQ0MzApIHVuaWZvcm0gcHVzaENvbnN0YW50 cyB7ICAgICAgICAgICAgICAgICApOworICAgIEdMU0xDKDEsICAgIGludCBwYXJpdHk7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAg IEdMU0xDKDEsICAgIGludCB0ZmY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICApOworICAgIEdMU0xDKDEsICAgIGludCBjdXJyZW50X2Zp ZWxkOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwor ICAgIEdMU0xDKDAsIH07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICApOworCisgICAgZmZfdmtfc2hhZGVyX2FkZF9wdXNo X2NvbnN0KCZzLT5zaGQsIDAsIHNpemVvZihCV0RJRlBhcmFtZXRlcnMpLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBWS19TSEFERVJfU1RBR0VfQ09NUFVURV9CSVQpOworCisgICAg R0xTTEQoZmZfc291cmNlX2J3ZGlmX2NvbXAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgR0xTTEMoMCwgdm9pZCBtYWluKCkgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Cisg ICAgR0xTTEMoMCwgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgR0xTTEMoMSwgICAgIGl2ZWMyIHNpemU7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7 CisgICAgR0xTTEMoMSwgICAgIGNvbnN0IGl2ZWMyIHBvcyA9IGl2ZWMyKGdsX0dsb2JhbEludm9j YXRpb25JRC54eSk7ICAgICAgICAgICAgICAgICk7CisgICAgR0xTTEMoMSwgICAgIGJvb2wgZmls dGVyX2ZpZWxkID0gKChwb3MueSBeIHBhcml0eSkgJiAxKSA9PSAxOyAgICAgICAgICAgICAgICAg ICk7CisgICAgR0xTTEYoMSwgICAgIGJvb2wgaXNfaW50cmEgPSBmaWx0ZXJfZmllbGQgJiYgKGN1 cnJlbnRfZmllbGQgPT0gJWkpOyAgICAgICAgICAgLFlBRElGX0ZJRUxEX0VORCk7CisgICAgR0xT TEMoMSwgICAgIGJvb2wgZmllbGRfcGFyaXR5ID0gKHBhcml0eSBeIHRmZikgIT0gMDsgICAgICAg ICAgICAgICAgICAgICAgICAgICk7CisgICAgR0xTTEMoMCwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAg R0xTTEMoMSwgICAgIHNpemUgPSBpbWFnZVNpemUoZHN0WzBdKTsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgR0xTTEMoMSwgICAgIGlmICghSVNfV0lUSElO KHBvcywgc2l6ZSkpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Cisg ICAgR0xTTEMoMiwgICAgICAgICByZXR1cm47ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgR0xTTEMoMSwgICAgIH0gZWxzZSBpZiAo aXNfaW50cmEpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7 CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwbGFuZXM7IGkrKykgeworICAgICAgICBpZiAoaSA9 PSAxKSB7CisgICAgICAgICAgICBHTFNMRigyLCBzaXplID0gaW1hZ2VTaXplKGRzdFslaV0pOyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICxpKTsKKyAgICAgICAgICAgIEdMU0xD KDIsIGlmICghSVNfV0lUSElOKHBvcywgc2l6ZSkpICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKTsKKyAgICAgICAgICAgIEdMU0xDKDMsICAgICByZXR1cm47ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgfQorICAg ICAgICBHTFNMRigyLCAgICAgcHJvY2Vzc19wbGFuZV9pbnRyYSglaSwgcG9zKTsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAsaSk7CisgICAgfQorICAgIEdMU0xDKDEsICAgICB9IGVs c2UgaWYgKGZpbHRlcl9maWVsZCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICApOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcGxhbmVzOyBpKyspIHsKKyAgICAgICAg aWYgKGkgPT0gMSkgeworICAgICAgICAgICAgR0xTTEYoMiwgc2l6ZSA9IGltYWdlU2l6ZShkc3Rb JWldKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsaSk7CisgICAgICAgICAg ICBHTFNMQygyLCBpZiAoIUlTX1dJVEhJTihwb3MsIHNpemUpKSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICBHTFNMQygzLCAgICAgcmV0dXJuOyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAg IH0KKyAgICAgICAgR0xTTEYoMiwgICAgIHByb2Nlc3NfcGxhbmUoJWksIHBvcywgZmlsdGVyX2Zp ZWxkLCBpc19pbnRyYSwgZmllbGRfcGFyaXR5KTsgLGkpOworICAgIH0KKyAgICBHTFNMQygxLCAg ICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHBsYW5lczsgaSsrKSB7Cisg ICAgICAgIGlmIChpID09IDEpIHsKKyAgICAgICAgICAgIEdMU0xGKDIsIHNpemUgPSBpbWFnZVNp emUoZHN0WyVpXSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLGkpOworICAg ICAgICAgICAgR0xTTEMoMiwgaWYgKCFJU19XSVRISU4ocG9zLCBzaXplKSkgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgR0xTTEMoMywgICAgIHJldHVy bjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwor ICAgICAgICB9CisgICAgICAgIEdMU0xGKDIsICAgICBpbWFnZVN0b3JlKGRzdFslaV0sIHBvcywg aW1hZ2VMb2FkKGN1clslaV0sIHBvcykpOyAgICAgICAgICAgICxpLCBpKTsKKyAgICB9CisgICAg R0xTTEMoMSwgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgR0xTTEMoMCwgfSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisK KyAgICBSRVQoc3B2LT5jb21waWxlX3NoYWRlcih2a2N0eCwgc3B2LCAmcy0+c2hkLCAmc3B2X2Rh dGEsICZzcHZfbGVuLCAibWFpbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNwdl9v cGFxdWUpKTsKKyAgICBSRVQoZmZfdmtfc2hhZGVyX2xpbmsodmtjdHgsICZzLT5zaGQsIHNwdl9k YXRhLCBzcHZfbGVuLCAibWFpbiIpKTsKKworICAgIFJFVChmZl92a19zaGFkZXJfcmVnaXN0ZXJf ZXhlYyh2a2N0eCwgJnMtPmUsICZzLT5zaGQpKTsKKworICAgIHMtPmluaXRpYWxpemVkID0gMTsK KworZmFpbDoKKyAgICBpZiAoc3B2X29wYXF1ZSkKKyAgICAgICAgc3B2LT5mcmVlX3NoYWRlcihz cHYsICZzcHZfb3BhcXVlKTsKKyAgICBpZiAoc3B2KQorICAgICAgICBzcHYtPnVuaW5pdCgmc3B2 KTsKKworICAgIHJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIGJ3ZGlmX3Z1bGthbl9maWx0 ZXJfZnJhbWUoQVZGaWx0ZXJDb250ZXh0ICpjdHgsIEFWRnJhbWUgKmRzdCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHBhcml0eSwgaW50IHRmZikKK3sKKyAgICBC V0RJRlZ1bGthbkNvbnRleHQgKnMgPSBjdHgtPnByaXY7CisgICAgWUFESUZDb250ZXh0ICp5ID0g JnMtPnlhZGlmOworICAgIEJXRElGUGFyYW1ldGVycyBwYXJhbXMgPSB7CisgICAgICAgIC5wYXJp dHkgPSBwYXJpdHksCisgICAgICAgIC50ZmYgPSB0ZmYsCisgICAgICAgIC5jdXJyZW50X2ZpZWxk ID0geS0+Y3VycmVudF9maWVsZCwKKyAgICB9OworCisgICAgZmZfdmtfZmlsdGVyX3Byb2Nlc3Nf TmluKCZzLT52a2N0eCwgJnMtPmUsICZzLT5zaGQsIGRzdCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKEFWRnJhbWUgKltdKXsgeS0+cHJldiwgeS0+Y3VyLCB5LT5uZXh0IH0sIDMsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZLX05VTExfSEFORExFLCAmcGFyYW1zLCBzaXpl b2YocGFyYW1zKSk7CisKKyAgICBpZiAoeS0+Y3VycmVudF9maWVsZCA9PSBZQURJRl9GSUVMRF9F TkQpCisgICAgICAgIHktPmN1cnJlbnRfZmllbGQgPSBZQURJRl9GSUVMRF9OT1JNQUw7Cit9CisK K3N0YXRpYyB2b2lkIGJ3ZGlmX3Z1bGthbl91bmluaXQoQVZGaWx0ZXJDb250ZXh0ICphdmN0eCkK K3sKKyAgICBCV0RJRlZ1bGthbkNvbnRleHQgKnMgPSBhdmN0eC0+cHJpdjsKKyAgICBGRlZ1bGth bkNvbnRleHQgKnZrY3R4ID0gJnMtPnZrY3R4OworCisgICAgZmZfdmtfZXhlY19wb29sX2ZyZWUo dmtjdHgsICZzLT5lKTsKKyAgICBmZl92a19zaGFkZXJfZnJlZSh2a2N0eCwgJnMtPnNoZCk7CisK KyAgICBmZl92a191bmluaXQoJnMtPnZrY3R4KTsKKworICAgIGZmX3lhZGlmX3VuaW5pdChhdmN0 eCk7CisKKyAgICBzLT5pbml0aWFsaXplZCA9IDA7Cit9CisKK3N0YXRpYyBpbnQgYndkaWZfdnVs a2FuX2NvbmZpZ19pbnB1dChBVkZpbHRlckxpbmsgKmlubGluaykKK3sKKyAgICBGaWx0ZXJMaW5r ICpsID0gZmZfZmlsdGVyX2xpbmsoaW5saW5rKTsKKyAgICBBVkhXRnJhbWVzQ29udGV4dCAqaW5w dXRfZnJhbWVzOworICAgIEFWRmlsdGVyQ29udGV4dCAqYXZjdHggPSBpbmxpbmstPmRzdDsKKyAg ICBCV0RJRlZ1bGthbkNvbnRleHQgKnMgPSBhdmN0eC0+cHJpdjsKKyAgICBGRlZ1bGthbkNvbnRl eHQgKnZrY3R4ID0gJnMtPnZrY3R4OworCisgICAgaWYgKCFsLT5od19mcmFtZXNfY3R4KSB7Cisg ICAgICAgIGF2X2xvZyhpbmxpbmstPmRzdCwgQVZfTE9HX0VSUk9SLCAiVnVsa2FuIGZpbHRlcmlu ZyByZXF1aXJlcyBhICIKKyAgICAgICAgICAgICAgICJoYXJkd2FyZSBmcmFtZXMgY29udGV4dCBv biB0aGUgaW5wdXQuXG4iKTsKKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKKyAgICB9 CisKKyAgICBpbnB1dF9mcmFtZXMgPSAoQVZIV0ZyYW1lc0NvbnRleHQgKilsLT5od19mcmFtZXNf Y3R4LT5kYXRhOworICAgIGlmIChpbnB1dF9mcmFtZXMtPmZvcm1hdCAhPSBBVl9QSVhfRk1UX1ZV TEtBTikKKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKKworICAgIC8qIEV4dHJhY3Qg dGhlIGRldmljZSBhbmQgZGVmYXVsdCBvdXRwdXQgZm9ybWF0IGZyb20gdGhlIGZpcnN0IGlucHV0 LiAqLworICAgIGlmIChhdmN0eC0+aW5wdXRzWzBdICE9IGlubGluaykKKyAgICAgICAgcmV0dXJu IDA7CisKKyAgICAvKiBTYXZlIHRoZSByZWYsIHdpdGhvdXQgcmVmZmluZyBpdCAqLworICAgIHZr Y3R4LT5pbnB1dF9mcmFtZXNfcmVmID0gbC0+aHdfZnJhbWVzX2N0eDsKKworICAgIC8qIERlZmF1 bHRzICovCisgICAgdmtjdHgtPm91dHB1dF9mb3JtYXQgPSBpbnB1dF9mcmFtZXMtPnN3X2Zvcm1h dDsKKyAgICB2a2N0eC0+b3V0cHV0X3dpZHRoICA9IGlubGluay0+dzsKKyAgICB2a2N0eC0+b3V0 cHV0X2hlaWdodCA9IGlubGluay0+aDsKKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50 IGJ3ZGlmX3Z1bGthbl9jb25maWdfb3V0cHV0KEFWRmlsdGVyTGluayAqb3V0bGluaykKK3sKKyAg ICBGaWx0ZXJMaW5rICpsID0gZmZfZmlsdGVyX2xpbmsob3V0bGluayk7CisgICAgaW50IGVycjsK KyAgICBBVkZpbHRlckNvbnRleHQgKmF2Y3R4ID0gb3V0bGluay0+c3JjOworICAgIEJXRElGVnVs a2FuQ29udGV4dCAqcyA9IGF2Y3R4LT5wcml2OworICAgIFlBRElGQ29udGV4dCAqeSA9ICZzLT55 YWRpZjsKKyAgICBGRlZ1bGthbkNvbnRleHQgKnZrY3R4ID0gJnMtPnZrY3R4OworCisgICAgYXZf YnVmZmVyX3VucmVmKCZsLT5od19mcmFtZXNfY3R4KTsKKworICAgIGVyciA9IGZmX3ZrX2ZpbHRl cl9pbml0X2NvbnRleHQoYXZjdHgsIHZrY3R4LCB2a2N0eC0+aW5wdXRfZnJhbWVzX3JlZiwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZrY3R4LT5vdXRwdXRfd2lkdGgsIHZr Y3R4LT5vdXRwdXRfaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dmtjdHgtPm91dHB1dF9mb3JtYXQpOworICAgIGlmIChlcnIgPCAwKQorICAgICAgICByZXR1cm4g ZXJyOworCisgICAgLyogRm9yIGxvZ2dpbmcgKi8KKyAgICB2a2N0eC0+Y2xhc3MgPSB5LT5jbGFz czsKKworICAgIGwtPmh3X2ZyYW1lc19jdHggPSBhdl9idWZmZXJfcmVmKHZrY3R4LT5mcmFtZXNf cmVmKTsKKyAgICBpZiAoIWwtPmh3X2ZyYW1lc19jdHgpCisgICAgICAgIHJldHVybiBBVkVSUk9S KEVOT01FTSk7CisKKyAgICBlcnIgPSBmZl95YWRpZl9jb25maWdfb3V0cHV0X2NvbW1vbihvdXRs aW5rKTsKKyAgICBpZiAoZXJyIDwgMCkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHktPmNz cCA9IGF2X3BpeF9mbXRfZGVzY19nZXQodmtjdHgtPmZyYW1lcy0+c3dfZm9ybWF0KTsKKyAgICB5 LT5maWx0ZXIgPSBid2RpZl92dWxrYW5fZmlsdGVyX2ZyYW1lOworCisgICAgaWYgKEFWX0NFSUxf UlNISUZUKG91dGxpbmstPncsIHktPmNzcC0+bG9nMl9jaHJvbWFfdykgPCA0IHx8IEFWX0NFSUxf UlNISUZUKG91dGxpbmstPmgsIHktPmNzcC0+bG9nMl9jaHJvbWFfaCkgPCA0KSB7CisgICAgICAg IGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiVmlkZW8gd2l0aCBwbGFuZXMgbGVzcyB0aGFu IDQgY29sdW1ucyBvciBsaW5lcyBpcyBub3Qgc3VwcG9ydGVkXG4iKTsKKyAgICAgICAgcmV0dXJu IEFWRVJST1IoRUlOVkFMKTsKKyAgICB9CisKKyAgICByZXR1cm4gaW5pdF9maWx0ZXIoYXZjdHgp OworfQorCitzdGF0aWMgY29uc3QgQVZDbGFzcyBid2RpZl92dWxrYW5fY2xhc3MgPSB7CisgICAg LmNsYXNzX25hbWUgPSAiYndkaWZfdnVsa2FuIiwKKyAgICAuaXRlbV9uYW1lICA9IGF2X2RlZmF1 bHRfaXRlbV9uYW1lLAorICAgIC5vcHRpb24gICAgID0gZmZfeWFkaWZfb3B0aW9ucywKKyAgICAu dmVyc2lvbiAgICA9IExJQkFWVVRJTF9WRVJTSU9OX0lOVCwKKyAgICAuY2F0ZWdvcnkgICA9IEFW X0NMQVNTX0NBVEVHT1JZX0ZJTFRFUiwKK307CisKK3N0YXRpYyBjb25zdCBBVkZpbHRlclBhZCBi d2RpZl92dWxrYW5faW5wdXRzW10gPSB7CisgICAgeworICAgICAgICAubmFtZSAgICAgICAgID0g ImRlZmF1bHQiLAorICAgICAgICAudHlwZSAgICAgICAgID0gQVZNRURJQV9UWVBFX1ZJREVPLAor ICAgICAgICAuZmlsdGVyX2ZyYW1lICA9IGZmX3lhZGlmX2ZpbHRlcl9mcmFtZSwKKyAgICAgICAg LmNvbmZpZ19wcm9wcyA9ICZid2RpZl92dWxrYW5fY29uZmlnX2lucHV0LAorICAgIH0sCit9Owor CitzdGF0aWMgY29uc3QgQVZGaWx0ZXJQYWQgYndkaWZfdnVsa2FuX291dHB1dHNbXSA9IHsKKyAg ICB7CisgICAgICAgIC5uYW1lID0gImRlZmF1bHQiLAorICAgICAgICAudHlwZSA9IEFWTUVESUFf VFlQRV9WSURFTywKKyAgICAgICAgLnJlcXVlc3RfZnJhbWUgPSBmZl95YWRpZl9yZXF1ZXN0X2Zy YW1lLAorICAgICAgICAuY29uZmlnX3Byb3BzID0gJmJ3ZGlmX3Z1bGthbl9jb25maWdfb3V0cHV0 LAorICAgIH0sCit9OworCitjb25zdCBGRkZpbHRlciBmZl92Zl9id2RpZl92dWxrYW4gPSB7Cisg ICAgLnAubmFtZSAgICAgICAgID0gImJ3ZGlmX3Z1bGthbiIsCisgICAgLnAuZGVzY3JpcHRpb24g ID0gTlVMTF9JRl9DT05GSUdfU01BTEwoIkRlaW50ZXJsYWNlIFZ1bGthbiBmcmFtZXMgdmlhIGJ3 ZGlmIiksCisgICAgLnAucHJpdl9jbGFzcyAgID0gJmJ3ZGlmX3Z1bGthbl9jbGFzcywKKyAgICAu cC5mbGFncyAgICAgICAgPSBBVkZJTFRFUl9GTEFHX0hXREVWSUNFIHwKKyAgICAgICAgICAgICAg ICAgICAgICBBVkZJTFRFUl9GTEFHX1NVUFBPUlRfVElNRUxJTkVfSU5URVJOQUwsCisgICAgLnBy aXZfc2l6ZSAgICAgID0gc2l6ZW9mKEJXRElGVnVsa2FuQ29udGV4dCksCisgICAgLmluaXQgICAg ICAgICAgID0gJmZmX3ZrX2ZpbHRlcl9pbml0LAorICAgIC51bmluaXQgICAgICAgICA9ICZid2Rp Zl92dWxrYW5fdW5pbml0LAorICAgIEZJTFRFUl9JTlBVVFMoYndkaWZfdnVsa2FuX2lucHV0cyks CisgICAgRklMVEVSX09VVFBVVFMoYndkaWZfdnVsa2FuX291dHB1dHMpLAorICAgIEZJTFRFUl9T SU5HTEVfUElYRk1UKEFWX1BJWF9GTVRfVlVMS0FOKSwKKyAgICAuZmxhZ3NfaW50ZXJuYWwgPSBG Rl9GSUxURVJfRkxBR19IV0ZSQU1FX0FXQVJFLAorfTsKLS0gCjIuNDkuMQoKCkZyb20gYmI5NTA3 MzdkOGM3MDkwMzEzOGNmODc0Yzg5M2Q3OTNlOGM5MjI1YiBNb24gU2VwIDE3IDAwOjAwOjAwIDIw MDEKRnJvbTogSmFtYWlrYTEgPGx1a2FzemN6MThAd3AucGw+CkRhdGU6IFdlZCwgMyBTZXAgMjAy NSAxMjo1MTo0MCArMDAwMApTdWJqZWN0OiBbUEFUQ0ggMDA5LzExOF0gQ2hhbmdpbmcgdnVsa2Fu IGZpbGUgZGlyZWN0b3J5CgotLS0KIGxpYmF2ZmlsdGVyL3ZmX2Nocm9tYWJlcl92dWxrYW4uYyB8 IDI2NCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAyNjQg ZGVsZXRpb25zKC0pCiBkZWxldGUgbW9kZSAxMDA2NDQgbGliYXZmaWx0ZXIvdmZfY2hyb21hYmVy X3Z1bGthbi5jCgpkaWZmIC0tZ2l0IGEvbGliYXZmaWx0ZXIvdmZfY2hyb21hYmVyX3Z1bGthbi5j IGIvbGliYXZmaWx0ZXIvdmZfY2hyb21hYmVyX3Z1bGthbi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEw MDY0NAppbmRleCA2NWI1M2FmZDY0Li4wMDAwMDAwMDAwCi0tLSBhL2xpYmF2ZmlsdGVyL3ZmX2No cm9tYWJlcl92dWxrYW4uYworKysgL2Rldi9udWxsCkBAIC0xLDI2NCArMCwwIEBACi0vKgotICog Q29weXJpZ2h0IChjKSBMeW5uZQotICoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4K LSAqCi0gKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg YW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdl bmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAo YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIEZGbXBlZyBpcyBkaXN0 cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhP VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAq IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl ZSB0aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh aWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM ZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5v dCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKLSAq LwotCi0jaW5jbHVkZSAibGliYXZ1dGlsL3JhbmRvbV9zZWVkLmgiCi0jaW5jbHVkZSAibGliYXZ1 dGlsL29wdC5oIgotI2luY2x1ZGUgImxpYmF2dXRpbC92dWxrYW5fc3BpcnYuaCIKLSNpbmNsdWRl ICJ2dWxrYW5fZmlsdGVyLmgiCi0KLSNpbmNsdWRlICJmaWx0ZXJzLmgiCi0jaW5jbHVkZSAidmlk ZW8uaCIKLQotdHlwZWRlZiBzdHJ1Y3QgQ2hyb21hdGljQWJlcnJhdGlvblZ1bGthbkNvbnRleHQg ewotICAgIEZGVnVsa2FuQ29udGV4dCB2a2N0eDsKLQotICAgIGludCBpbml0aWFsaXplZDsKLSAg ICBGRlZrRXhlY1Bvb2wgZTsKLSAgICBBVlZ1bGthbkRldmljZVF1ZXVlRmFtaWx5ICpxZjsKLSAg ICBGRlZ1bGthblNoYWRlciBzaGQ7Ci0gICAgVmtTYW1wbGVyIHNhbXBsZXI7Ci0KLSAgICAvKiBQ dXNoIGNvbnN0YW50cyAvIG9wdGlvbnMgKi8KLSAgICBzdHJ1Y3QgewotICAgICAgICBmbG9hdCBk aXN0WzJdOwotICAgIH0gb3B0czsKLX0gQ2hyb21hdGljQWJlcnJhdGlvblZ1bGthbkNvbnRleHQ7 Ci0KLXN0YXRpYyBjb25zdCBjaGFyIGRpc3RvcnRfY2hyb21hX2tlcm5lbFtdID0gewotICAgIEMo MCwgdm9pZCBkaXN0b3J0X3JnYihpdmVjMiBzaXplLCBpdmVjMiBwb3MpICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICkKLSAgICBDKDAsIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCi0gICAgQygxLCAgICAg Y29uc3QgdmVjMiBwID0gKCh2ZWMyKHBvcykvdmVjMihzaXplKSkgLSAwLjVmKSoyLjBmOyAgICAg ICAgICAgICAgKQotICAgIEMoMSwgICAgIGNvbnN0IHZlYzIgbyA9IHAgKiAoZGlzdCAtIDEuMGYp OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKLSAgICBDKDAsICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICApCi0gICAgQygxLCAgICAgdmVjNCByZXM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKQotICAgIEMoMSwgICAgIHJlcy5yID0gdGV4dHVy ZShpbnB1dF9pbWdbMF0sICgocCAtIG8pLzIuMGYpICsgMC41ZikucjsgICAgICAgICAgICkKLSAg ICBDKDEsICAgICByZXMuZyA9IHRleHR1cmUoaW5wdXRfaW1nWzBdLCAoKHAgICAgKS8yLjBmKSAr IDAuNWYpLmc7ICAgICAgICAgICApCi0gICAgQygxLCAgICAgcmVzLmIgPSB0ZXh0dXJlKGlucHV0 X2ltZ1swXSwgKChwICsgbykvMi4wZikgKyAwLjVmKS5iOyAgICAgICAgICAgKQotICAgIEMoMSwg ICAgIHJlcy5hID0gdGV4dHVyZShpbnB1dF9pbWdbMF0sICgocCAgICApLzIuMGYpICsgMC41Ziku YTsgICAgICAgICAgICkKLSAgICBDKDEsICAgICBpbWFnZVN0b3JlKG91dHB1dF9pbWdbMF0sIHBv cywgcmVzKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCi0gICAgQygwLCB9ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKQotICAgIEMoMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKLSAgICBDKDAsIHZvaWQgZGlzdG9ydF9j aHJvbWEoaW50IGlkeCwgaXZlYzIgc2l6ZSwgaXZlYzIgcG9zKSAgICAgICAgICAgICAgICAgICAp Ci0gICAgQygwLCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKQotICAgIEMoMSwgICAgIHZlYzIgcCA9ICgodmVjMihw b3MpL3ZlYzIoc2l6ZSkpIC0gMC41ZikqMi4wZjsgICAgICAgICAgICAgICAgICAgICkKLSAgICBD KDEsICAgICBmbG9hdCBkID0gc3FydChwLngqcC54ICsgcC55KnAueSk7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICApCi0gICAgQygxLCAgICAgcCAqPSBkIC8gKGQqZGlzdCk7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQotICAgIEMoMSwgICAg IHZlYzQgcmVzID0gdGV4dHVyZShpbnB1dF9pbWdbaWR4XSwgKHAvMi4wZikgKyAwLjVmKTsgICAg ICAgICAgICAgICkKLSAgICBDKDEsICAgICBpbWFnZVN0b3JlKG91dHB1dF9pbWdbaWR4XSwgcG9z LCByZXMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICApCi0gICAgQygwLCB9ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKQotfTsKLQotc3RhdGljIGF2X2NvbGQgaW50IGluaXRfZmlsdGVyKEFWRmlsdGVyQ29udGV4 dCAqY3R4LCBBVkZyYW1lICppbikKLXsKLSAgICBpbnQgZXJyOwotICAgIHVpbnQ4X3QgKnNwdl9k YXRhOwotICAgIHNpemVfdCBzcHZfbGVuOwotICAgIHZvaWQgKnNwdl9vcGFxdWUgPSBOVUxMOwot ICAgIENocm9tYXRpY0FiZXJyYXRpb25WdWxrYW5Db250ZXh0ICpzID0gY3R4LT5wcml2OwotICAg IEZGVnVsa2FuQ29udGV4dCAqdmtjdHggPSAmcy0+dmtjdHg7Ci0gICAgY29uc3QgaW50IHBsYW5l cyA9IGF2X3BpeF9mbXRfY291bnRfcGxhbmVzKHMtPnZrY3R4Lm91dHB1dF9mb3JtYXQpOwotICAg IEZGVnVsa2FuU2hhZGVyICpzaGQgPSAmcy0+c2hkOwotICAgIEZGVmtTUElSVkNvbXBpbGVyICpz cHY7Ci0gICAgRkZWdWxrYW5EZXNjcmlwdG9yU2V0QmluZGluZyAqZGVzYzsKLQotICAgIC8qIE5v cm1hbGl6ZSBvcHRpb25zICovCi0gICAgcy0+b3B0cy5kaXN0WzBdID0gKHMtPm9wdHMuZGlzdFsw XSAvIDEwMC4wZikgKyAxLjBmOwotICAgIHMtPm9wdHMuZGlzdFsxXSA9IChzLT5vcHRzLmRpc3Rb MV0gLyAxMDAuMGYpICsgMS4wZjsKLQotICAgIHNwdiA9IGZmX3ZrX3NwaXJ2X2luaXQoKTsKLSAg ICBpZiAoIXNwdikgewotICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJVbmFibGUg dG8gaW5pdGlhbGl6ZSBTUElSLVYgY29tcGlsZXIhXG4iKTsKLSAgICAgICAgcmV0dXJuIEFWRVJS T1JfRVhURVJOQUw7Ci0gICAgfQotCi0gICAgcy0+cWYgPSBmZl92a19xZl9maW5kKHZrY3R4LCBW S19RVUVVRV9DT01QVVRFX0JJVCwgMCk7Ci0gICAgaWYgKCFzLT5xZikgewotICAgICAgICBhdl9s b2coY3R4LCBBVl9MT0dfRVJST1IsICJEZXZpY2UgaGFzIG5vIGNvbXB1dGUgcXVldWVzXG4iKTsK LSAgICAgICAgZXJyID0gQVZFUlJPUihFTk9UU1VQKTsKLSAgICAgICAgZ290byBmYWlsOwotICAg IH0KLQotICAgIFJFVChmZl92a19leGVjX3Bvb2xfaW5pdCh2a2N0eCwgcy0+cWYsICZzLT5lLCBz LT5xZi0+bnVtKjQsIDAsIDAsIDAsIE5VTEwpKTsKLSAgICBSRVQoZmZfdmtfaW5pdF9zYW1wbGVy KHZrY3R4LCAmcy0+c2FtcGxlciwgMCwgVktfRklMVEVSX0xJTkVBUikpOwotICAgIFJFVChmZl92 a19zaGFkZXJfaW5pdCh2a2N0eCwgJnMtPnNoZCwgImNocm9tYXRpY19hYmJlcmF0aW9uIiwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgVktfU0hBREVSX1NUQUdFX0NPTVBVVEVfQklULAotICAg ICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAzMiwgMzIsIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDApKTsKLQotICAgIEdMU0xD KDAsIGxheW91dChwdXNoX2NvbnN0YW50LCBzdGQ0MzApIHVuaWZvcm0gcHVzaENvbnN0YW50cyB7 ICAgICAgICApOwotICAgIEdMU0xDKDEsICAgIHZlYzIgZGlzdDsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIEdMU0xDKDAsIH07ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAg IEdMU0xDKDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICApOwotCi0gICAgZmZfdmtfc2hhZGVyX2FkZF9wdXNoX2NvbnN0KCZzLT5z aGQsIDAsIHNpemVvZihzLT5vcHRzKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg VktfU0hBREVSX1NUQUdFX0NPTVBVVEVfQklUKTsKLQotICAgIGRlc2MgPSAoRkZWdWxrYW5EZXNj cmlwdG9yU2V0QmluZGluZyBbXSkgewotICAgICAgICB7Ci0gICAgICAgICAgICAubmFtZSAgICAg ICA9ICJpbnB1dF9pbWciLAotICAgICAgICAgICAgLnR5cGUgICAgICAgPSBWS19ERVNDUklQVE9S X1RZUEVfQ09NQklORURfSU1BR0VfU0FNUExFUiwKLSAgICAgICAgICAgIC5kaW1lbnNpb25zID0g MiwKLSAgICAgICAgICAgIC5lbGVtcyAgICAgID0gcGxhbmVzLAotICAgICAgICAgICAgLnN0YWdl cyAgICAgPSBWS19TSEFERVJfU1RBR0VfQ09NUFVURV9CSVQsCi0gICAgICAgICAgICAuc2FtcGxl cnMgICA9IERVUF9TQU1QTEVSKHMtPnNhbXBsZXIpLAotICAgICAgICB9LAotICAgICAgICB7Ci0g ICAgICAgICAgICAubmFtZSAgICAgICA9ICJvdXRwdXRfaW1nIiwKLSAgICAgICAgICAgIC50eXBl ICAgICAgID0gVktfREVTQ1JJUFRPUl9UWVBFX1NUT1JBR0VfSU1BR0UsCi0gICAgICAgICAgICAu bWVtX2xheW91dCA9IGZmX3ZrX3NoYWRlcl9yZXBfZm10KHMtPnZrY3R4Lm91dHB1dF9mb3JtYXQs IEZGX1ZLX1JFUF9GTE9BVCksCi0gICAgICAgICAgICAubWVtX3F1YWxpICA9ICJ3cml0ZW9ubHki LAotICAgICAgICAgICAgLmRpbWVuc2lvbnMgPSAyLAotICAgICAgICAgICAgLmVsZW1zICAgICAg PSBwbGFuZXMsCi0gICAgICAgICAgICAuc3RhZ2VzICAgICA9IFZLX1NIQURFUl9TVEFHRV9DT01Q VVRFX0JJVCwKLSAgICAgICAgfSwKLSAgICB9OwotCi0gICAgUkVUKGZmX3ZrX3NoYWRlcl9hZGRf ZGVzY3JpcHRvcl9zZXQodmtjdHgsICZzLT5zaGQsIGRlc2MsIDIsIDAsIDApKTsKLQotICAgIEdM U0xEKCAgIGRpc3RvcnRfY2hyb21hX2tlcm5lbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICApOwotICAgIEdMU0xDKDAsIHZvaWQgbWFpbigpICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIEdMU0xDKDAsIHsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwot ICAgIEdMU0xDKDEsICAgICBpdmVjMiBwb3MgPSBpdmVjMihnbF9HbG9iYWxJbnZvY2F0aW9uSUQu eHkpOyAgICAgICAgICAgICApOwotICAgIGlmIChwbGFuZXMgPT0gMSkgewotICAgICAgICBHTFNM QygxLCBkaXN0b3J0X3JnYihpbWFnZVNpemUob3V0cHV0X2ltZ1swXSksIHBvcyk7ICAgICAgICAg ICAgICApOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIEdMU0xDKDEsIGl2ZWMyIHNpemUgPSBpbWFn ZVNpemUob3V0cHV0X2ltZ1swXSk7ICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgIEdMU0xD KDEsIHZlYzIgbnBvcyA9IHZlYzIocG9zKS92ZWMyKHNpemUpOyAgICAgICAgICAgICAgICAgICAg ICAgICk7Ci0gICAgICAgIEdMU0xDKDEsIHZlYzQgcmVzID0gdGV4dHVyZShpbnB1dF9pbWdbMF0s IG5wb3MpOyAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgIEdMU0xDKDEsIGltYWdlU3RvcmUo b3V0cHV0X2ltZ1swXSwgcG9zLCByZXMpOyAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAg IGZvciAoaW50IGkgPSAxOyBpIDwgcGxhbmVzOyBpKyspIHsKLSAgICAgICAgICAgIEdMU0xDKDAs ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsK LSAgICAgICAgICAgIEdMU0xGKDEsICBzaXplID0gaW1hZ2VTaXplKG91dHB1dF9pbWdbJWldKTsg ICAgICAgICAgICAgICAgICxpKTsKLSAgICAgICAgICAgIEdMU0xDKDEsICBpZiAoIUlTX1dJVEhJ Tihwb3MsIHNpemUpKSAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgIEdM U0xDKDIsICAgICAgcmV0dXJuOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKTsKLSAgICAgICAgICAgIEdMU0xGKDEsICBkaXN0b3J0X2Nocm9tYSglaSwgc2l6ZSwgcG9z KTsgICAgICAgICAgICAgICAgICAgICxpKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBHTFNMQygw LCB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKTsKLQotICAgIFJFVChzcHYtPmNvbXBpbGVfc2hhZGVyKHZrY3R4LCBzcHYsIHNoZCwg JnNwdl9kYXRhLCAmc3B2X2xlbiwgIm1haW4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICZzcHZfb3BhcXVlKSk7Ci0gICAgUkVUKGZmX3ZrX3NoYWRlcl9saW5rKHZrY3R4LCBzaGQsIHNw dl9kYXRhLCBzcHZfbGVuLCAibWFpbiIpKTsKLQotICAgIFJFVChmZl92a19zaGFkZXJfcmVnaXN0 ZXJfZXhlYyh2a2N0eCwgJnMtPmUsICZzLT5zaGQpKTsKLQotICAgIHMtPmluaXRpYWxpemVkID0g MTsKLQotZmFpbDoKLSAgICBpZiAoc3B2X29wYXF1ZSkKLSAgICAgICAgc3B2LT5mcmVlX3NoYWRl cihzcHYsICZzcHZfb3BhcXVlKTsKLSAgICBpZiAoc3B2KQotICAgICAgICBzcHYtPnVuaW5pdCgm c3B2KTsKLQotICAgIHJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgY2hyb21hYmVyX3Z1bGth bl9maWx0ZXJfZnJhbWUoQVZGaWx0ZXJMaW5rICpsaW5rLCBBVkZyYW1lICppbikKLXsKLSAgICBp bnQgZXJyOwotICAgIEFWRmlsdGVyQ29udGV4dCAqY3R4ID0gbGluay0+ZHN0OwotICAgIENocm9t YXRpY0FiZXJyYXRpb25WdWxrYW5Db250ZXh0ICpzID0gY3R4LT5wcml2OwotICAgIEFWRmlsdGVy TGluayAqb3V0bGluayA9IGN0eC0+b3V0cHV0c1swXTsKLQotICAgIEFWRnJhbWUgKm91dCA9IGZm X2dldF92aWRlb19idWZmZXIob3V0bGluaywgb3V0bGluay0+dywgb3V0bGluay0+aCk7Ci0gICAg aWYgKCFvdXQpIHsKLSAgICAgICAgZXJyID0gQVZFUlJPUihFTk9NRU0pOwotICAgICAgICBnb3Rv IGZhaWw7Ci0gICAgfQotCi0gICAgaWYgKCFzLT5pbml0aWFsaXplZCkKLSAgICAgICAgUkVUKGlu aXRfZmlsdGVyKGN0eCwgaW4pKTsKLQotICAgIFJFVChmZl92a19maWx0ZXJfcHJvY2Vzc19zaW1w bGUoJnMtPnZrY3R4LCAmcy0+ZSwgJnMtPnNoZCwgb3V0LCBpbiwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHMtPnNhbXBsZXIsICZzLT5vcHRzLCBzaXplb2Yocy0+b3B0cykp KTsKLQotICAgIGVyciA9IGF2X2ZyYW1lX2NvcHlfcHJvcHMob3V0LCBpbik7Ci0gICAgaWYgKGVy ciA8IDApCi0gICAgICAgIGdvdG8gZmFpbDsKLQotICAgIGF2X2ZyYW1lX2ZyZWUoJmluKTsKLQot ICAgIHJldHVybiBmZl9maWx0ZXJfZnJhbWUob3V0bGluaywgb3V0KTsKLQotZmFpbDoKLSAgICBh dl9mcmFtZV9mcmVlKCZpbik7Ci0gICAgYXZfZnJhbWVfZnJlZSgmb3V0KTsKLSAgICByZXR1cm4g ZXJyOwotfQotCi1zdGF0aWMgdm9pZCBjaHJvbWFiZXJfdnVsa2FuX3VuaW5pdChBVkZpbHRlckNv bnRleHQgKmF2Y3R4KQotewotICAgIENocm9tYXRpY0FiZXJyYXRpb25WdWxrYW5Db250ZXh0ICpz ID0gYXZjdHgtPnByaXY7Ci0gICAgRkZWdWxrYW5Db250ZXh0ICp2a2N0eCA9ICZzLT52a2N0eDsK LSAgICBGRlZ1bGthbkZ1bmN0aW9ucyAqdmsgPSAmdmtjdHgtPnZrZm47Ci0KLSAgICBmZl92a19l eGVjX3Bvb2xfZnJlZSh2a2N0eCwgJnMtPmUpOwotICAgIGZmX3ZrX3NoYWRlcl9mcmVlKHZrY3R4 LCAmcy0+c2hkKTsKLQotICAgIGlmIChzLT5zYW1wbGVyKQotICAgICAgICB2ay0+RGVzdHJveVNh bXBsZXIodmtjdHgtPmh3Y3R4LT5hY3RfZGV2LCBzLT5zYW1wbGVyLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgdmtjdHgtPmh3Y3R4LT5hbGxvYyk7Ci0KLSAgICBmZl92a191bmluaXQoJnMt PnZrY3R4KTsKLQotICAgIHMtPmluaXRpYWxpemVkID0gMDsKLX0KLQotI2RlZmluZSBPRkZTRVQo eCkgb2Zmc2V0b2YoQ2hyb21hdGljQWJlcnJhdGlvblZ1bGthbkNvbnRleHQsIHgpCi0jZGVmaW5l IEZMQUdTIChBVl9PUFRfRkxBR19GSUxURVJJTkdfUEFSQU0gfCBBVl9PUFRfRkxBR19WSURFT19Q QVJBTSkKLXN0YXRpYyBjb25zdCBBVk9wdGlvbiBjaHJvbWFiZXJfdnVsa2FuX29wdGlvbnNbXSA9 IHsKLSAgICB7ICJkaXN0X3giLCAiU2V0IGhvcml6b250YWwgZGlzdG9ydGlvbiBhbW91bnQiLCBP RkZTRVQob3B0cy5kaXN0WzBdKSwgQVZfT1BUX1RZUEVfRkxPQVQsIHsuZGJsID0gMC4wZn0sIC0x MC4wZiwgMTAuMGYsIC5mbGFncyA9IEZMQUdTIH0sCi0gICAgeyAiZGlzdF95IiwgIlNldCB2ZXJ0 aWNhbCBkaXN0b3J0aW9uIGFtb3VudCIsICAgT0ZGU0VUKG9wdHMuZGlzdFsxXSksIEFWX09QVF9U WVBFX0ZMT0FULCB7LmRibCA9IDAuMGZ9LCAtMTAuMGYsIDEwLjBmLCAuZmxhZ3MgPSBGTEFHUyB9 LAotICAgIHsgTlVMTCB9LAotfTsKLQotQVZGSUxURVJfREVGSU5FX0NMQVNTKGNocm9tYWJlcl92 dWxrYW4pOwotCi1zdGF0aWMgY29uc3QgQVZGaWx0ZXJQYWQgY2hyb21hYmVyX3Z1bGthbl9pbnB1 dHNbXSA9IHsKLSAgICB7Ci0gICAgICAgIC5uYW1lICAgICAgICAgPSAiZGVmYXVsdCIsCi0gICAg ICAgIC50eXBlICAgICAgICAgPSBBVk1FRElBX1RZUEVfVklERU8sCi0gICAgICAgIC5maWx0ZXJf ZnJhbWUgPSAmY2hyb21hYmVyX3Z1bGthbl9maWx0ZXJfZnJhbWUsCi0gICAgICAgIC5jb25maWdf cHJvcHMgPSAmZmZfdmtfZmlsdGVyX2NvbmZpZ19pbnB1dCwKLSAgICB9LAotfTsKLQotc3RhdGlj IGNvbnN0IEFWRmlsdGVyUGFkIGNocm9tYWJlcl92dWxrYW5fb3V0cHV0c1tdID0gewotICAgIHsK LSAgICAgICAgLm5hbWUgPSAiZGVmYXVsdCIsCi0gICAgICAgIC50eXBlID0gQVZNRURJQV9UWVBF X1ZJREVPLAotICAgICAgICAuY29uZmlnX3Byb3BzID0gJmZmX3ZrX2ZpbHRlcl9jb25maWdfb3V0 cHV0LAotICAgIH0sCi19OwotCi1jb25zdCBGRkZpbHRlciBmZl92Zl9jaHJvbWFiZXJfdnVsa2Fu ID0gewotICAgIC5wLm5hbWUgICAgICAgICA9ICJjaHJvbWFiZXJfdnVsa2FuIiwKLSAgICAucC5k ZXNjcmlwdGlvbiAgPSBOVUxMX0lGX0NPTkZJR19TTUFMTCgiT2Zmc2V0IGNocm9tYSBvZiBpbnB1 dCB2aWRlbyAoY2hyb21hdGljIGFiZXJyYXRpb24pIiksCi0gICAgLnAucHJpdl9jbGFzcyAgID0g JmNocm9tYWJlcl92dWxrYW5fY2xhc3MsCi0gICAgLnAuZmxhZ3MgICAgICAgID0gQVZGSUxURVJf RkxBR19IV0RFVklDRSwKLSAgICAucHJpdl9zaXplICAgICAgPSBzaXplb2YoQ2hyb21hdGljQWJl cnJhdGlvblZ1bGthbkNvbnRleHQpLAotICAgIC5pbml0ICAgICAgICAgICA9ICZmZl92a19maWx0 ZXJfaW5pdCwKLSAgICAudW5pbml0ICAgICAgICAgPSAmY2hyb21hYmVyX3Z1bGthbl91bmluaXQs Ci0gICAgRklMVEVSX0lOUFVUUyhjaHJvbWFiZXJfdnVsa2FuX2lucHV0cyksCi0gICAgRklMVEVS X09VVFBVVFMoY2hyb21hYmVyX3Z1bGthbl9vdXRwdXRzKSwKLSAgICBGSUxURVJfU0lOR0xFX1BJ WEZNVChBVl9QSVhfRk1UX1ZVTEtBTiksCi0gICAgLmZsYWdzX2ludGVybmFsID0gRkZfRklMVEVS X0ZMQUdfSFdGUkFNRV9BV0FSRSwKLX07Ci0tIAoyLjQ5LjEKCgpGcm9tIDYxY2U0ZGFlMTkzNDVi YmY5YjU0NzkyYWY1MGFiMWNiN2JlYThiMjIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCkZyb206 IEphbWFpa2ExIDxsdWthc3pjejE4QHdwLnBsPgpEYXRlOiBXZWQsIDMgU2VwIDIwMjUgMTI6NTI6 MTYgKzAwMDAKU3ViamVjdDogW1BBVENIIDAxMC8xMThdIENoYW5naW5nIHZ1bGthbiBmaWxlIGRp cmVjdG9yeQoKLS0tCiBsaWJhdmZpbHRlci92dWxrYW4vdmZfY2hyb21hYmVyX3Z1bGthbi5jIHwg MjY0ICsrKysrKysrKysrKysrKysrKysrKysrCiAxIGZpbGUgY2hhbmdlZCwgMjY0IGluc2VydGlv bnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJhdmZpbHRlci92dWxrYW4vdmZfY2hyb21hYmVy X3Z1bGthbi5jCgpkaWZmIC0tZ2l0IGEvbGliYXZmaWx0ZXIvdnVsa2FuL3ZmX2Nocm9tYWJlcl92 dWxrYW4uYyBiL2xpYmF2ZmlsdGVyL3Z1bGthbi92Zl9jaHJvbWFiZXJfdnVsa2FuLmMKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uNjA2NmM5NTgxYwotLS0gL2Rldi9udWxs CisrKyBiL2xpYmF2ZmlsdGVyL3Z1bGthbi92Zl9jaHJvbWFiZXJfdnVsa2FuLmMKQEAgLTAsMCAr MSwyNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIEx5bm5lCisgKgorICogVGhpcyBmaWxlIGlz IHBhcnQgb2YgRkZtcGVnLgorICoKKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5 IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2Yg dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor ICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg Y29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3 aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRh dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAw MjExMC0xMzAxIFVTQQorICovCisKKyNpbmNsdWRlICJsaWJhdnV0aWwvcmFuZG9tX3NlZWQuaCIK KyNpbmNsdWRlICJsaWJhdnV0aWwvb3B0LmgiCisjaW5jbHVkZSAiLi4vLi4vbGliYXZ1dGlsL3Z1 bGthbi92dWxrYW5fc3BpcnYuaCIKKyNpbmNsdWRlICJ2dWxrYW5fZmlsdGVyLmgiCisKKyNpbmNs dWRlICJsaWJhdmZpbHRlci9maWx0ZXJzLmgiCisjaW5jbHVkZSAibGliYXZmaWx0ZXIvdmlkZW8u aCIKKwordHlwZWRlZiBzdHJ1Y3QgQ2hyb21hdGljQWJlcnJhdGlvblZ1bGthbkNvbnRleHQgewor ICAgIEZGVnVsa2FuQ29udGV4dCB2a2N0eDsKKworICAgIGludCBpbml0aWFsaXplZDsKKyAgICBG RlZrRXhlY1Bvb2wgZTsKKyAgICBBVlZ1bGthbkRldmljZVF1ZXVlRmFtaWx5ICpxZjsKKyAgICBG RlZ1bGthblNoYWRlciBzaGQ7CisgICAgVmtTYW1wbGVyIHNhbXBsZXI7CisKKyAgICAvKiBQdXNo IGNvbnN0YW50cyAvIG9wdGlvbnMgKi8KKyAgICBzdHJ1Y3QgeworICAgICAgICBmbG9hdCBkaXN0 WzJdOworICAgIH0gb3B0czsKK30gQ2hyb21hdGljQWJlcnJhdGlvblZ1bGthbkNvbnRleHQ7CisK K3N0YXRpYyBjb25zdCBjaGFyIGRpc3RvcnRfY2hyb21hX2tlcm5lbFtdID0geworICAgIEMoMCwg dm9pZCBkaXN0b3J0X3JnYihpdmVjMiBzaXplLCBpdmVjMiBwb3MpICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICkKKyAgICBDKDAsIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgQygxLCAgICAgY29u c3QgdmVjMiBwID0gKCh2ZWMyKHBvcykvdmVjMihzaXplKSkgLSAwLjVmKSoyLjBmOyAgICAgICAg ICAgICAgKQorICAgIEMoMSwgICAgIGNvbnN0IHZlYzIgbyA9IHAgKiAoZGlzdCAtIDEuMGYpOyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICBDKDAsICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAp CisgICAgQygxLCAgICAgdmVjNCByZXM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgIEMoMSwgICAgIHJlcy5yID0gdGV4dHVyZShp bnB1dF9pbWdbMF0sICgocCAtIG8pLzIuMGYpICsgMC41ZikucjsgICAgICAgICAgICkKKyAgICBD KDEsICAgICByZXMuZyA9IHRleHR1cmUoaW5wdXRfaW1nWzBdLCAoKHAgICAgKS8yLjBmKSArIDAu NWYpLmc7ICAgICAgICAgICApCisgICAgQygxLCAgICAgcmVzLmIgPSB0ZXh0dXJlKGlucHV0X2lt Z1swXSwgKChwICsgbykvMi4wZikgKyAwLjVmKS5iOyAgICAgICAgICAgKQorICAgIEMoMSwgICAg IHJlcy5hID0gdGV4dHVyZShpbnB1dF9pbWdbMF0sICgocCAgICApLzIuMGYpICsgMC41ZikuYTsg ICAgICAgICAgICkKKyAgICBDKDEsICAgICBpbWFnZVN0b3JlKG91dHB1dF9pbWdbMF0sIHBvcywg cmVzKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgQygwLCB9ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKQorICAgIEMoMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICBDKDAsIHZvaWQgZGlzdG9ydF9jaHJv bWEoaW50IGlkeCwgaXZlYzIgc2l6ZSwgaXZlYzIgcG9zKSAgICAgICAgICAgICAgICAgICApCisg ICAgQygwLCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKQorICAgIEMoMSwgICAgIHZlYzIgcCA9ICgodmVjMihwb3Mp L3ZlYzIoc2l6ZSkpIC0gMC41ZikqMi4wZjsgICAgICAgICAgICAgICAgICAgICkKKyAgICBDKDEs ICAgICBmbG9hdCBkID0gc3FydChwLngqcC54ICsgcC55KnAueSk7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICApCisgICAgQygxLCAgICAgcCAqPSBkIC8gKGQqZGlzdCk7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgIEMoMSwgICAgIHZl YzQgcmVzID0gdGV4dHVyZShpbnB1dF9pbWdbaWR4XSwgKHAvMi4wZikgKyAwLjVmKTsgICAgICAg ICAgICAgICkKKyAgICBDKDEsICAgICBpbWFnZVN0b3JlKG91dHB1dF9pbWdbaWR4XSwgcG9zLCBy ZXMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgQygwLCB9ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KQorfTsKKworc3RhdGljIGF2X2NvbGQgaW50IGluaXRfZmlsdGVyKEFWRmlsdGVyQ29udGV4dCAq Y3R4LCBBVkZyYW1lICppbikKK3sKKyAgICBpbnQgZXJyOworICAgIHVpbnQ4X3QgKnNwdl9kYXRh OworICAgIHNpemVfdCBzcHZfbGVuOworICAgIHZvaWQgKnNwdl9vcGFxdWUgPSBOVUxMOworICAg IENocm9tYXRpY0FiZXJyYXRpb25WdWxrYW5Db250ZXh0ICpzID0gY3R4LT5wcml2OworICAgIEZG VnVsa2FuQ29udGV4dCAqdmtjdHggPSAmcy0+dmtjdHg7CisgICAgY29uc3QgaW50IHBsYW5lcyA9 IGF2X3BpeF9mbXRfY291bnRfcGxhbmVzKHMtPnZrY3R4Lm91dHB1dF9mb3JtYXQpOworICAgIEZG VnVsa2FuU2hhZGVyICpzaGQgPSAmcy0+c2hkOworICAgIEZGVmtTUElSVkNvbXBpbGVyICpzcHY7 CisgICAgRkZWdWxrYW5EZXNjcmlwdG9yU2V0QmluZGluZyAqZGVzYzsKKworICAgIC8qIE5vcm1h bGl6ZSBvcHRpb25zICovCisgICAgcy0+b3B0cy5kaXN0WzBdID0gKHMtPm9wdHMuZGlzdFswXSAv IDEwMC4wZikgKyAxLjBmOworICAgIHMtPm9wdHMuZGlzdFsxXSA9IChzLT5vcHRzLmRpc3RbMV0g LyAxMDAuMGYpICsgMS4wZjsKKworICAgIHNwdiA9IGZmX3ZrX3NwaXJ2X2luaXQoKTsKKyAgICBp ZiAoIXNwdikgeworICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJVbmFibGUgdG8g aW5pdGlhbGl6ZSBTUElSLVYgY29tcGlsZXIhXG4iKTsKKyAgICAgICAgcmV0dXJuIEFWRVJST1Jf RVhURVJOQUw7CisgICAgfQorCisgICAgcy0+cWYgPSBmZl92a19xZl9maW5kKHZrY3R4LCBWS19R VUVVRV9DT01QVVRFX0JJVCwgMCk7CisgICAgaWYgKCFzLT5xZikgeworICAgICAgICBhdl9sb2co Y3R4LCBBVl9MT0dfRVJST1IsICJEZXZpY2UgaGFzIG5vIGNvbXB1dGUgcXVldWVzXG4iKTsKKyAg ICAgICAgZXJyID0gQVZFUlJPUihFTk9UU1VQKTsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0K KworICAgIFJFVChmZl92a19leGVjX3Bvb2xfaW5pdCh2a2N0eCwgcy0+cWYsICZzLT5lLCBzLT5x Zi0+bnVtKjQsIDAsIDAsIDAsIE5VTEwpKTsKKyAgICBSRVQoZmZfdmtfaW5pdF9zYW1wbGVyKHZr Y3R4LCAmcy0+c2FtcGxlciwgMCwgVktfRklMVEVSX0xJTkVBUikpOworICAgIFJFVChmZl92a19z aGFkZXJfaW5pdCh2a2N0eCwgJnMtPnNoZCwgImNocm9tYXRpY19hYmJlcmF0aW9uIiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgVktfU0hBREVSX1NUQUdFX0NPTVBVVEVfQklULAorICAgICAg ICAgICAgICAgICAgICAgICAgICBOVUxMLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAz MiwgMzIsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDApKTsKKworICAgIEdMU0xDKDAs IGxheW91dChwdXNoX2NvbnN0YW50LCBzdGQ0MzApIHVuaWZvcm0gcHVzaENvbnN0YW50cyB7ICAg ICAgICApOworICAgIEdMU0xDKDEsICAgIHZlYzIgZGlzdDsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgIEdMU0xDKDAsIH07ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgIEdM U0xDKDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICApOworCisgICAgZmZfdmtfc2hhZGVyX2FkZF9wdXNoX2NvbnN0KCZzLT5zaGQs IDAsIHNpemVvZihzLT5vcHRzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktf U0hBREVSX1NUQUdFX0NPTVBVVEVfQklUKTsKKworICAgIGRlc2MgPSAoRkZWdWxrYW5EZXNjcmlw dG9yU2V0QmluZGluZyBbXSkgeworICAgICAgICB7CisgICAgICAgICAgICAubmFtZSAgICAgICA9 ICJpbnB1dF9pbWciLAorICAgICAgICAgICAgLnR5cGUgICAgICAgPSBWS19ERVNDUklQVE9SX1RZ UEVfQ09NQklORURfSU1BR0VfU0FNUExFUiwKKyAgICAgICAgICAgIC5kaW1lbnNpb25zID0gMiwK KyAgICAgICAgICAgIC5lbGVtcyAgICAgID0gcGxhbmVzLAorICAgICAgICAgICAgLnN0YWdlcyAg ICAgPSBWS19TSEFERVJfU1RBR0VfQ09NUFVURV9CSVQsCisgICAgICAgICAgICAuc2FtcGxlcnMg ICA9IERVUF9TQU1QTEVSKHMtPnNhbXBsZXIpLAorICAgICAgICB9LAorICAgICAgICB7CisgICAg ICAgICAgICAubmFtZSAgICAgICA9ICJvdXRwdXRfaW1nIiwKKyAgICAgICAgICAgIC50eXBlICAg ICAgID0gVktfREVTQ1JJUFRPUl9UWVBFX1NUT1JBR0VfSU1BR0UsCisgICAgICAgICAgICAubWVt X2xheW91dCA9IGZmX3ZrX3NoYWRlcl9yZXBfZm10KHMtPnZrY3R4Lm91dHB1dF9mb3JtYXQsIEZG X1ZLX1JFUF9GTE9BVCksCisgICAgICAgICAgICAubWVtX3F1YWxpICA9ICJ3cml0ZW9ubHkiLAor ICAgICAgICAgICAgLmRpbWVuc2lvbnMgPSAyLAorICAgICAgICAgICAgLmVsZW1zICAgICAgPSBw bGFuZXMsCisgICAgICAgICAgICAuc3RhZ2VzICAgICA9IFZLX1NIQURFUl9TVEFHRV9DT01QVVRF X0JJVCwKKyAgICAgICAgfSwKKyAgICB9OworCisgICAgUkVUKGZmX3ZrX3NoYWRlcl9hZGRfZGVz Y3JpcHRvcl9zZXQodmtjdHgsICZzLT5zaGQsIGRlc2MsIDIsIDAsIDApKTsKKworICAgIEdMU0xE KCAgIGRpc3RvcnRfY2hyb21hX2tlcm5lbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICApOworICAgIEdMU0xDKDAsIHZvaWQgbWFpbigpICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgIEdMU0xDKDAsIHsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAg IEdMU0xDKDEsICAgICBpdmVjMiBwb3MgPSBpdmVjMihnbF9HbG9iYWxJbnZvY2F0aW9uSUQueHkp OyAgICAgICAgICAgICApOworICAgIGlmIChwbGFuZXMgPT0gMSkgeworICAgICAgICBHTFNMQygx LCBkaXN0b3J0X3JnYihpbWFnZVNpemUob3V0cHV0X2ltZ1swXSksIHBvcyk7ICAgICAgICAgICAg ICApOworICAgIH0gZWxzZSB7CisgICAgICAgIEdMU0xDKDEsIGl2ZWMyIHNpemUgPSBpbWFnZVNp emUob3V0cHV0X2ltZ1swXSk7ICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgIEdMU0xDKDEs IHZlYzIgbnBvcyA9IHZlYzIocG9zKS92ZWMyKHNpemUpOyAgICAgICAgICAgICAgICAgICAgICAg ICk7CisgICAgICAgIEdMU0xDKDEsIHZlYzQgcmVzID0gdGV4dHVyZShpbnB1dF9pbWdbMF0sIG5w b3MpOyAgICAgICAgICAgICAgICAgICk7CisgICAgICAgIEdMU0xDKDEsIGltYWdlU3RvcmUob3V0 cHV0X2ltZ1swXSwgcG9zLCByZXMpOyAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgIGZv ciAoaW50IGkgPSAxOyBpIDwgcGxhbmVzOyBpKyspIHsKKyAgICAgICAgICAgIEdMU0xDKDAsICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAg ICAgICAgICAgIEdMU0xGKDEsICBzaXplID0gaW1hZ2VTaXplKG91dHB1dF9pbWdbJWldKTsgICAg ICAgICAgICAgICAgICxpKTsKKyAgICAgICAgICAgIEdMU0xDKDEsICBpZiAoIUlTX1dJVEhJTihw b3MsIHNpemUpKSAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIEdMU0xD KDIsICAgICAgcmV0dXJuOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KTsKKyAgICAgICAgICAgIEdMU0xGKDEsICBkaXN0b3J0X2Nocm9tYSglaSwgc2l6ZSwgcG9zKTsg ICAgICAgICAgICAgICAgICAgICxpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBHTFNMQygwLCB9 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKTsKKworICAgIFJFVChzcHYtPmNvbXBpbGVfc2hhZGVyKHZrY3R4LCBzcHYsIHNoZCwgJnNw dl9kYXRhLCAmc3B2X2xlbiwgIm1haW4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICZz cHZfb3BhcXVlKSk7CisgICAgUkVUKGZmX3ZrX3NoYWRlcl9saW5rKHZrY3R4LCBzaGQsIHNwdl9k YXRhLCBzcHZfbGVuLCAibWFpbiIpKTsKKworICAgIFJFVChmZl92a19zaGFkZXJfcmVnaXN0ZXJf ZXhlYyh2a2N0eCwgJnMtPmUsICZzLT5zaGQpKTsKKworICAgIHMtPmluaXRpYWxpemVkID0gMTsK KworZmFpbDoKKyAgICBpZiAoc3B2X29wYXF1ZSkKKyAgICAgICAgc3B2LT5mcmVlX3NoYWRlcihz cHYsICZzcHZfb3BhcXVlKTsKKyAgICBpZiAoc3B2KQorICAgICAgICBzcHYtPnVuaW5pdCgmc3B2 KTsKKworICAgIHJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgY2hyb21hYmVyX3Z1bGthbl9m aWx0ZXJfZnJhbWUoQVZGaWx0ZXJMaW5rICpsaW5rLCBBVkZyYW1lICppbikKK3sKKyAgICBpbnQg ZXJyOworICAgIEFWRmlsdGVyQ29udGV4dCAqY3R4ID0gbGluay0+ZHN0OworICAgIENocm9tYXRp Y0FiZXJyYXRpb25WdWxrYW5Db250ZXh0ICpzID0gY3R4LT5wcml2OworICAgIEFWRmlsdGVyTGlu ayAqb3V0bGluayA9IGN0eC0+b3V0cHV0c1swXTsKKworICAgIEFWRnJhbWUgKm91dCA9IGZmX2dl dF92aWRlb19idWZmZXIob3V0bGluaywgb3V0bGluay0+dywgb3V0bGluay0+aCk7CisgICAgaWYg KCFvdXQpIHsKKyAgICAgICAgZXJyID0gQVZFUlJPUihFTk9NRU0pOworICAgICAgICBnb3RvIGZh aWw7CisgICAgfQorCisgICAgaWYgKCFzLT5pbml0aWFsaXplZCkKKyAgICAgICAgUkVUKGluaXRf ZmlsdGVyKGN0eCwgaW4pKTsKKworICAgIFJFVChmZl92a19maWx0ZXJfcHJvY2Vzc19zaW1wbGUo JnMtPnZrY3R4LCAmcy0+ZSwgJnMtPnNoZCwgb3V0LCBpbiwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHMtPnNhbXBsZXIsICZzLT5vcHRzLCBzaXplb2Yocy0+b3B0cykpKTsK KworICAgIGVyciA9IGF2X2ZyYW1lX2NvcHlfcHJvcHMob3V0LCBpbik7CisgICAgaWYgKGVyciA8 IDApCisgICAgICAgIGdvdG8gZmFpbDsKKworICAgIGF2X2ZyYW1lX2ZyZWUoJmluKTsKKworICAg IHJldHVybiBmZl9maWx0ZXJfZnJhbWUob3V0bGluaywgb3V0KTsKKworZmFpbDoKKyAgICBhdl9m cmFtZV9mcmVlKCZpbik7CisgICAgYXZfZnJhbWVfZnJlZSgmb3V0KTsKKyAgICByZXR1cm4gZXJy OworfQorCitzdGF0aWMgdm9pZCBjaHJvbWFiZXJfdnVsa2FuX3VuaW5pdChBVkZpbHRlckNvbnRl eHQgKmF2Y3R4KQoreworICAgIENocm9tYXRpY0FiZXJyYXRpb25WdWxrYW5Db250ZXh0ICpzID0g YXZjdHgtPnByaXY7CisgICAgRkZWdWxrYW5Db250ZXh0ICp2a2N0eCA9ICZzLT52a2N0eDsKKyAg ICBGRlZ1bGthbkZ1bmN0aW9ucyAqdmsgPSAmdmtjdHgtPnZrZm47CisKKyAgICBmZl92a19leGVj X3Bvb2xfZnJlZSh2a2N0eCwgJnMtPmUpOworICAgIGZmX3ZrX3NoYWRlcl9mcmVlKHZrY3R4LCAm cy0+c2hkKTsKKworICAgIGlmIChzLT5zYW1wbGVyKQorICAgICAgICB2ay0+RGVzdHJveVNhbXBs ZXIodmtjdHgtPmh3Y3R4LT5hY3RfZGV2LCBzLT5zYW1wbGVyLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgdmtjdHgtPmh3Y3R4LT5hbGxvYyk7CisKKyAgICBmZl92a191bmluaXQoJnMtPnZr Y3R4KTsKKworICAgIHMtPmluaXRpYWxpemVkID0gMDsKK30KKworI2RlZmluZSBPRkZTRVQoeCkg b2Zmc2V0b2YoQ2hyb21hdGljQWJlcnJhdGlvblZ1bGthbkNvbnRleHQsIHgpCisjZGVmaW5lIEZM QUdTIChBVl9PUFRfRkxBR19GSUxURVJJTkdfUEFSQU0gfCBBVl9PUFRfRkxBR19WSURFT19QQVJB TSkKK3N0YXRpYyBjb25zdCBBVk9wdGlvbiBjaHJvbWFiZXJfdnVsa2FuX29wdGlvbnNbXSA9IHsK KyAgICB7ICJkaXN0X3giLCAiU2V0IGhvcml6b250YWwgZGlzdG9ydGlvbiBhbW91bnQiLCBPRkZT RVQob3B0cy5kaXN0WzBdKSwgQVZfT1BUX1RZUEVfRkxPQVQsIHsuZGJsID0gMC4wZn0sIC0xMC4w ZiwgMTAuMGYsIC5mbGFncyA9IEZMQUdTIH0sCisgICAgeyAiZGlzdF95IiwgIlNldCB2ZXJ0aWNh bCBkaXN0b3J0aW9uIGFtb3VudCIsICAgT0ZGU0VUKG9wdHMuZGlzdFsxXSksIEFWX09QVF9UWVBF X0ZMT0FULCB7LmRibCA9IDAuMGZ9LCAtMTAuMGYsIDEwLjBmLCAuZmxhZ3MgPSBGTEFHUyB9LAor ICAgIHsgTlVMTCB9LAorfTsKKworQVZGSUxURVJfREVGSU5FX0NMQVNTKGNocm9tYWJlcl92dWxr YW4pOworCitzdGF0aWMgY29uc3QgQVZGaWx0ZXJQYWQgY2hyb21hYmVyX3Z1bGthbl9pbnB1dHNb XSA9IHsKKyAgICB7CisgICAgICAgIC5uYW1lICAgICAgICAgPSAiZGVmYXVsdCIsCisgICAgICAg IC50eXBlICAgICAgICAgPSBBVk1FRElBX1RZUEVfVklERU8sCisgICAgICAgIC5maWx0ZXJfZnJh bWUgPSAmY2hyb21hYmVyX3Z1bGthbl9maWx0ZXJfZnJhbWUsCisgICAgICAgIC5jb25maWdfcHJv cHMgPSAmZmZfdmtfZmlsdGVyX2NvbmZpZ19pbnB1dCwKKyAgICB9LAorfTsKKworc3RhdGljIGNv bnN0IEFWRmlsdGVyUGFkIGNocm9tYWJlcl92dWxrYW5fb3V0cHV0c1tdID0geworICAgIHsKKyAg ICAgICAgLm5hbWUgPSAiZGVmYXVsdCIsCisgICAgICAgIC50eXBlID0gQVZNRURJQV9UWVBFX1ZJ REVPLAorICAgICAgICAuY29uZmlnX3Byb3BzID0gJmZmX3ZrX2ZpbHRlcl9jb25maWdfb3V0cHV0 LAorICAgIH0sCit9OworCitjb25zdCBGRkZpbHRlciBmZl92Zl9jaHJvbWFiZXJfdnVsa2FuID0g eworICAgIC5wLm5hbWUgICAgICAgICA9ICJjaHJvbWFiZXJfdnVsa2FuIiwKKyAgICAucC5kZXNj cmlwdGlvbiAgPSBOVUxMX0lGX0NPTkZJR19TTUFMTCgiT2Zmc2V0IGNocm9tYSBvZiBpbnB1dCB2 aWRlbyAoY2hyb21hdGljIGFiZXJyYXRpb24pIiksCisgICAgLnAucHJpdl9jbGFzcyAgID0gJmNo cm9tYWJlcl92dWxrYW5fY2xhc3MsCisgICAgLnAuZmxhZ3MgICAgICAgID0gQVZGSUxURVJfRkxB R19IV0RFVklDRSwKKyAgICAucHJpdl9zaXplICAgICAgPSBzaXplb2YoQ2hyb21hdGljQWJlcnJh dGlvblZ1bGthbkNvbnRleHQpLAorICAgIC5pbml0ICAgICAgICAgICA9ICZmZl92a19maWx0ZXJf aW5pdCwKKyAgICAudW5pbml0ICAgICAgICAgPSAmY2hyb21hYmVyX3Z1bGthbl91bmluaXQsCisg ICAgRklMVEVSX0lOUFVUUyhjaHJvbWFiZXJfdnVsa2FuX2lucHV0cyksCisgICAgRklMVEVSX09V VFBVVFMoY2hyb21hYmVyX3Z1bGthbl9vdXRwdXRzKSwKKyAgICBGSUxURVJfU0lOR0xFX1BJWEZN VChBVl9QSVhfRk1UX1ZVTEtBTiksCisgICAgLmZsYWdzX2ludGVybmFsID0gRkZfRklMVEVSX0ZM QUdfSFdGUkFNRV9BV0FSRSwKK307Ci0tIAoyLjQ5LjEKCgpGcm9tIDIwNzdhMTcxZTA5N2MyMzQz ZjM2MDg2Yjk5MzBmMThkOTNkYjVjZTIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCkZyb206IEph bWFpa2ExIDxsdWthc3pjejE4QHdwLnBsPgpEYXRlOiBXZWQsIDMgU2VwIDIwMjUgMTI6NTM6MDIg KzAwMDAKU3ViamVjdDogW1BBVENIIDAxMS8xMThdIENoYW5naW5nIHZ1bGthbiBmaWxlIGRpcmVj dG9yeQoKLS0tCiBsaWJhdmZpbHRlci92Zl9mbGlwX3Z1bGthbi5jIHwgMjk3IC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgMjk3IGRlbGV0aW9ucygt KQogZGVsZXRlIG1vZGUgMTAwNjQ0IGxpYmF2ZmlsdGVyL3ZmX2ZsaXBfdnVsa2FuLmMKCmRpZmYg LS1naXQgYS9saWJhdmZpbHRlci92Zl9mbGlwX3Z1bGthbi5jIGIvbGliYXZmaWx0ZXIvdmZfZmxp cF92dWxrYW4uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2UyYWVkMGZkYS4uMDAw MDAwMDAwMAotLS0gYS9saWJhdmZpbHRlci92Zl9mbGlwX3Z1bGthbi5jCisrKyAvZGV2L251bGwK QEAgLTEsMjk3ICswLDAgQEAKLS8qCi0gKiBjb3B5cmlnaHQgKGMpIDIwMjEgV3UgSmlhbmh1YSA8 amlhbmh1YS53dUBpbnRlbC5jb20+Ci0gKiBDb3B5cmlnaHQgKGMpIEx5bm5lCi0gKgotICogVGhp cyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgotICoKLSAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJl OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVi bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lv biAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp b24uCi0gKgotICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls bCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0 aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJl Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5z ZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQot ICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9z dG9uLCBNQSAwMjExMC0xMzAxIFVTQQotICovCi0KLSNpbmNsdWRlICJsaWJhdnV0aWwvcmFuZG9t X3NlZWQuaCIKLSNpbmNsdWRlICJsaWJhdnV0aWwvb3B0LmgiCi0jaW5jbHVkZSAibGliYXZ1dGls L3Z1bGthbl9zcGlydi5oIgotI2luY2x1ZGUgInZ1bGthbl9maWx0ZXIuaCIKLQotI2luY2x1ZGUg ImZpbHRlcnMuaCIKLSNpbmNsdWRlICJ2aWRlby5oIgotCi1lbnVtIEZsaXBUeXBlIHsKLSAgICBG TElQX1ZFUlRJQ0FMLAotICAgIEZMSVBfSE9SSVpPTlRBTCwKLSAgICBGTElQX0JPVEgKLX07Ci0K LXR5cGVkZWYgc3RydWN0IEZsaXBWdWxrYW5Db250ZXh0IHsKLSAgICBGRlZ1bGthbkNvbnRleHQg dmtjdHg7Ci0KLSAgICBpbnQgaW5pdGlhbGl6ZWQ7Ci0gICAgRkZWa0V4ZWNQb29sIGU7Ci0gICAg QVZWdWxrYW5EZXZpY2VRdWV1ZUZhbWlseSAqcWY7Ci0gICAgRkZWdWxrYW5TaGFkZXIgc2hkOwot fSBGbGlwVnVsa2FuQ29udGV4dDsKLQotc3RhdGljIGF2X2NvbGQgaW50IGluaXRfZmlsdGVyKEFW RmlsdGVyQ29udGV4dCAqY3R4LCBBVkZyYW1lICppbiwgZW51bSBGbGlwVHlwZSB0eXBlKQotewot ICAgIGludCBlcnIgPSAwOwotICAgIHVpbnQ4X3QgKnNwdl9kYXRhOwotICAgIHNpemVfdCBzcHZf bGVuOwotICAgIHZvaWQgKnNwdl9vcGFxdWUgPSBOVUxMOwotICAgIEZsaXBWdWxrYW5Db250ZXh0 ICpzID0gY3R4LT5wcml2OwotICAgIEZGVnVsa2FuQ29udGV4dCAqdmtjdHggPSAmcy0+dmtjdHg7 Ci0gICAgY29uc3QgaW50IHBsYW5lcyA9IGF2X3BpeF9mbXRfY291bnRfcGxhbmVzKHMtPnZrY3R4 Lm91dHB1dF9mb3JtYXQpOwotICAgIEZGVnVsa2FuU2hhZGVyICpzaGQgPSAmcy0+c2hkOwotICAg IEZGVmtTUElSVkNvbXBpbGVyICpzcHY7Ci0gICAgRkZWdWxrYW5EZXNjcmlwdG9yU2V0QmluZGlu ZyAqZGVzYzsKLQotICAgIHNwdiA9IGZmX3ZrX3NwaXJ2X2luaXQoKTsKLSAgICBpZiAoIXNwdikg ewotICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJVbmFibGUgdG8gaW5pdGlhbGl6 ZSBTUElSLVYgY29tcGlsZXIhXG4iKTsKLSAgICAgICAgcmV0dXJuIEFWRVJST1JfRVhURVJOQUw7 Ci0gICAgfQotCi0gICAgcy0+cWYgPSBmZl92a19xZl9maW5kKHZrY3R4LCBWS19RVUVVRV9DT01Q VVRFX0JJVCwgMCk7Ci0gICAgaWYgKCFzLT5xZikgewotICAgICAgICBhdl9sb2coY3R4LCBBVl9M T0dfRVJST1IsICJEZXZpY2UgaGFzIG5vIGNvbXB1dGUgcXVldWVzXG4iKTsKLSAgICAgICAgZXJy ID0gQVZFUlJPUihFTk9UU1VQKTsKLSAgICAgICAgZ290byBmYWlsOwotICAgIH0KLQotICAgIFJF VChmZl92a19leGVjX3Bvb2xfaW5pdCh2a2N0eCwgcy0+cWYsICZzLT5lLCBzLT5xZi0+bnVtKjQs IDAsIDAsIDAsIE5VTEwpKTsKLSAgICBSRVQoZmZfdmtfc2hhZGVyX2luaXQodmtjdHgsICZzLT5z aGQsICJmbGlwIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgVktfU0hBREVSX1NUQUdFX0NP TVBVVEVfQklULAotICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwLAotICAgICAgICAg ICAgICAgICAgICAgICAgICAzMiwgMzIsIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDAp KTsKLQotICAgIGRlc2MgPSAoRkZWdWxrYW5EZXNjcmlwdG9yU2V0QmluZGluZyBbXSkgewotICAg ICAgICB7Ci0gICAgICAgICAgICAubmFtZSAgICAgICA9ICJpbnB1dF9pbWFnZSIsCi0gICAgICAg ICAgICAudHlwZSAgICAgICA9IFZLX0RFU0NSSVBUT1JfVFlQRV9TVE9SQUdFX0lNQUdFLAotICAg ICAgICAgICAgLm1lbV9sYXlvdXQgPSBmZl92a19zaGFkZXJfcmVwX2ZtdChzLT52a2N0eC5pbnB1 dF9mb3JtYXQsIEZGX1ZLX1JFUF9GTE9BVCksCi0gICAgICAgICAgICAubWVtX3F1YWxpICA9ICJy ZWFkb25seSIsCi0gICAgICAgICAgICAuZGltZW5zaW9ucyA9IDIsCi0gICAgICAgICAgICAuZWxl bXMgICAgICA9IHBsYW5lcywKLSAgICAgICAgICAgIC5zdGFnZXMgICAgID0gVktfU0hBREVSX1NU QUdFX0NPTVBVVEVfQklULAotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAubmFt ZSAgICAgICA9ICJvdXRwdXRfaW1hZ2UiLAotICAgICAgICAgICAgLnR5cGUgICAgICAgPSBWS19E RVNDUklQVE9SX1RZUEVfU1RPUkFHRV9JTUFHRSwKLSAgICAgICAgICAgIC5tZW1fbGF5b3V0ID0g ZmZfdmtfc2hhZGVyX3JlcF9mbXQocy0+dmtjdHgub3V0cHV0X2Zvcm1hdCwgRkZfVktfUkVQX0ZM T0FUKSwKLSAgICAgICAgICAgIC5tZW1fcXVhbGkgID0gIndyaXRlb25seSIsCi0gICAgICAgICAg ICAuZGltZW5zaW9ucyA9IDIsCi0gICAgICAgICAgICAuZWxlbXMgICAgICA9IHBsYW5lcywKLSAg ICAgICAgICAgIC5zdGFnZXMgICAgID0gVktfU0hBREVSX1NUQUdFX0NPTVBVVEVfQklULAotICAg ICAgICB9LAotICAgIH07Ci0KLSAgICBSRVQoZmZfdmtfc2hhZGVyX2FkZF9kZXNjcmlwdG9yX3Nl dCh2a2N0eCwgJnMtPnNoZCwgZGVzYywgMiwgMCwgMCkpOwotCi0gICAgR0xTTEMoMCwgdm9pZCBt YWluKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICk7Ci0gICAgR0xTTEMoMCwgeyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7 Ci0gICAgR0xTTEMoMSwgICAgIGl2ZWMyIHNpemU7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgR0xTTEMoMSwgICAg IGNvbnN0IGl2ZWMyIHBvcyA9IGl2ZWMyKGdsX0dsb2JhbEludm9jYXRpb25JRC54eSk7ICAgICAg ICAgICAgICAgICAgICAgICAgICk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwbGFuZXM7IGkr KykgewotICAgICAgICBHTFNMQygwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICBHTFNM RigxLCBzaXplID0gaW1hZ2VTaXplKG91dHB1dF9pbWFnZVslaV0pOyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLGkpOwotICAgICAgICBHTFNMQygxLCBpZiAoSVNfV0lUSElO KHBvcywgc2l6ZSkpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICApOwotICAgICAgICBzd2l0Y2ggKHR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgY2FzZSBG TElQX0hPUklaT05UQUw6Ci0gICAgICAgICAgICBHTFNMRigyLCB2ZWM0IHJlcyA9IGltYWdlTG9h ZChpbnB1dF9pbWFnZVslaV0sIGl2ZWMyKHNpemUueCAtIHBvcy54LCBwb3MueSkpOyAsaSk7Ci0g ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBGTElQX1ZFUlRJQ0FMOgotICAgICAgICAg ICAgR0xTTEYoMiwgdmVjNCByZXMgPSBpbWFnZUxvYWQoaW5wdXRfaW1hZ2VbJWldLCBpdmVjMihw b3MueCwgc2l6ZS55IC0gcG9zLnkpKTsgLGkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg IGNhc2UgRkxJUF9CT1RIOgotICAgICAgICAgICAgR0xTTEYoMiwgdmVjNCByZXMgPSBpbWFnZUxv YWQoaW5wdXRfaW1hZ2VbJWldLCBpdmVjMihzaXplLnh5IC0gcG9zLnh5KSk7LCAgICAgIGkpOwot ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBHTFNMRigy LCB2ZWM0IHJlcyA9IGltYWdlTG9hZChpbnB1dF9pbWFnZVslaV0sIHBvcyk7ICAgICAgICAgICAg ICAgICAgICAgICAgICAsaSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg ICBHTFNMRigyLCAgICAgaW1hZ2VTdG9yZShvdXRwdXRfaW1hZ2VbJWldLCBwb3MsIHJlcyk7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLGkpOwotICAgICAgICBHTFNMQygxLCB9ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICApOwotICAgIH0KLSAgICBHTFNMQygwLCB9ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KTsKLQotICAgIFJFVChzcHYtPmNvbXBpbGVfc2hhZGVyKHZrY3R4LCBzcHYsIHNoZCwgJnNwdl9k YXRhLCAmc3B2X2xlbiwgIm1haW4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzcHZf b3BhcXVlKSk7Ci0gICAgUkVUKGZmX3ZrX3NoYWRlcl9saW5rKHZrY3R4LCBzaGQsIHNwdl9kYXRh LCBzcHZfbGVuLCAibWFpbiIpKTsKLQotICAgIFJFVChmZl92a19zaGFkZXJfcmVnaXN0ZXJfZXhl Yyh2a2N0eCwgJnMtPmUsICZzLT5zaGQpKTsKLQotICAgIHMtPmluaXRpYWxpemVkID0gMTsKLQot ZmFpbDoKLSAgICBpZiAoc3B2X29wYXF1ZSkKLSAgICAgICAgc3B2LT5mcmVlX3NoYWRlcihzcHYs ICZzcHZfb3BhcXVlKTsKLSAgICBpZiAoc3B2KQotICAgICAgICBzcHYtPnVuaW5pdCgmc3B2KTsK LQotICAgIHJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBhdl9jb2xkIHZvaWQgZmxpcF92dWxrYW5f dW5pbml0KEFWRmlsdGVyQ29udGV4dCAqYXZjdHgpCi17Ci0gICAgRmxpcFZ1bGthbkNvbnRleHQg KnMgPSBhdmN0eC0+cHJpdjsKLSAgICBGRlZ1bGthbkNvbnRleHQgKnZrY3R4ID0gJnMtPnZrY3R4 OwotCi0gICAgZmZfdmtfZXhlY19wb29sX2ZyZWUodmtjdHgsICZzLT5lKTsKLSAgICBmZl92a19z aGFkZXJfZnJlZSh2a2N0eCwgJnMtPnNoZCk7Ci0KLSAgICBmZl92a191bmluaXQoJnMtPnZrY3R4 KTsKLQotICAgIHMtPmluaXRpYWxpemVkID0gMDsKLX0KLQotc3RhdGljIGludCBmaWx0ZXJfZnJh bWUoQVZGaWx0ZXJMaW5rICpsaW5rLCBBVkZyYW1lICppbiwgZW51bSBGbGlwVHlwZSB0eXBlKQot ewotICAgIGludCBlcnI7Ci0gICAgQVZGcmFtZSAqb3V0ID0gTlVMTDsKLSAgICBBVkZpbHRlckNv bnRleHQgKmN0eCA9IGxpbmstPmRzdDsKLSAgICBGbGlwVnVsa2FuQ29udGV4dCAqcyA9IGN0eC0+ cHJpdjsKLSAgICBBVkZpbHRlckxpbmsgKm91dGxpbmsgPSBjdHgtPm91dHB1dHNbMF07Ci0KLSAg ICBvdXQgPSBmZl9nZXRfdmlkZW9fYnVmZmVyKG91dGxpbmssIG91dGxpbmstPncsIG91dGxpbmst PmgpOwotICAgIGlmICghb3V0KSB7Ci0gICAgICAgIGVyciA9IEFWRVJST1IoRU5PTUVNKTsKLSAg ICAgICAgZ290byBmYWlsOwotICAgIH0KLQotICAgIGlmICghcy0+aW5pdGlhbGl6ZWQpCi0gICAg ICAgIFJFVChpbml0X2ZpbHRlcihjdHgsIGluLCB0eXBlKSk7Ci0KLSAgICBSRVQoZmZfdmtfZmls dGVyX3Byb2Nlc3Nfc2ltcGxlKCZzLT52a2N0eCwgJnMtPmUsICZzLT5zaGQsIG91dCwgaW4sCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19OVUxMX0hBTkRMRSwgTlVMTCwg MCkpOwotCi0gICAgUkVUKGF2X2ZyYW1lX2NvcHlfcHJvcHMob3V0LCBpbikpOwotCi0gICAgYXZf ZnJhbWVfZnJlZSgmaW4pOwotCi0gICAgcmV0dXJuIGZmX2ZpbHRlcl9mcmFtZShvdXRsaW5rLCBv dXQpOwotCi1mYWlsOgotICAgIGF2X2ZyYW1lX2ZyZWUoJmluKTsKLSAgICBhdl9mcmFtZV9mcmVl KCZvdXQpOwotICAgIHJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgaGZsaXBfdnVsa2FuX2Zp bHRlcl9mcmFtZShBVkZpbHRlckxpbmsgKmxpbmssIEFWRnJhbWUgKmluKQotewotICAgIHJldHVy biBmaWx0ZXJfZnJhbWUobGluaywgaW4sIEZMSVBfSE9SSVpPTlRBTCk7Ci19Ci0KLXN0YXRpYyBp bnQgdmZsaXBfdnVsa2FuX2ZpbHRlcl9mcmFtZShBVkZpbHRlckxpbmsgKmxpbmssIEFWRnJhbWUg KmluKQotewotICAgIHJldHVybiBmaWx0ZXJfZnJhbWUobGluaywgaW4sIEZMSVBfVkVSVElDQUwp OwotfQotCi1zdGF0aWMgaW50IGZsaXBfdnVsa2FuX2ZpbHRlcl9mcmFtZShBVkZpbHRlckxpbmsg KmxpbmssIEFWRnJhbWUgKmluKQotewotICAgIHJldHVybiBmaWx0ZXJfZnJhbWUobGluaywgaW4s IEZMSVBfQk9USCk7Ci19Ci0KLXN0YXRpYyBjb25zdCBBVkZpbHRlclBhZCBmbGlwX3Z1bGthbl9v dXRwdXRzW10gPSB7Ci0gICAgewotICAgICAgICAubmFtZSAgICAgICAgID0gImRlZmF1bHQiLAot ICAgICAgICAudHlwZSAgICAgICAgID0gQVZNRURJQV9UWVBFX1ZJREVPLAotICAgICAgICAuY29u ZmlnX3Byb3BzID0gJmZmX3ZrX2ZpbHRlcl9jb25maWdfb3V0cHV0LAotICAgIH0KLX07Ci0KLXN0 YXRpYyBjb25zdCBBVk9wdGlvbiBoZmxpcF92dWxrYW5fb3B0aW9uc1tdID0gewotICAgIHsgTlVM TCB9LAotfTsKLQotQVZGSUxURVJfREVGSU5FX0NMQVNTKGhmbGlwX3Z1bGthbik7Ci0KLXN0YXRp YyBjb25zdCBBVkZpbHRlclBhZCBoZmxpcF92dWxrYW5faW5wdXRzW10gPSB7Ci0gICAgewotICAg ICAgICAubmFtZSAgICAgICAgID0gImRlZmF1bHQiLAotICAgICAgICAudHlwZSAgICAgICAgID0g QVZNRURJQV9UWVBFX1ZJREVPLAotICAgICAgICAuZmlsdGVyX2ZyYW1lID0gJmhmbGlwX3Z1bGth bl9maWx0ZXJfZnJhbWUsCi0gICAgICAgIC5jb25maWdfcHJvcHMgPSAmZmZfdmtfZmlsdGVyX2Nv bmZpZ19pbnB1dCwKLSAgICB9Ci19OwotCi1jb25zdCBGRkZpbHRlciBmZl92Zl9oZmxpcF92dWxr YW4gPSB7Ci0gICAgLnAubmFtZSAgICAgICAgID0gImhmbGlwX3Z1bGthbiIsCi0gICAgLnAuZGVz Y3JpcHRpb24gID0gTlVMTF9JRl9DT05GSUdfU01BTEwoIkhvcml6b250YWxseSBmbGlwIHRoZSBp bnB1dCB2aWRlbyBpbiBWdWxrYW4iKSwKLSAgICAucC5wcml2X2NsYXNzICAgPSAmaGZsaXBfdnVs a2FuX2NsYXNzLAotICAgIC5wcml2X3NpemUgICAgICA9IHNpemVvZihGbGlwVnVsa2FuQ29udGV4 dCksCi0gICAgLmluaXQgICAgICAgICAgID0gJmZmX3ZrX2ZpbHRlcl9pbml0LAotICAgIC51bmlu aXQgICAgICAgICA9ICZmbGlwX3Z1bGthbl91bmluaXQsCi0gICAgRklMVEVSX0lOUFVUUyhoZmxp cF92dWxrYW5faW5wdXRzKSwKLSAgICBGSUxURVJfT1VUUFVUUyhmbGlwX3Z1bGthbl9vdXRwdXRz KSwKLSAgICBGSUxURVJfU0lOR0xFX1BJWEZNVChBVl9QSVhfRk1UX1ZVTEtBTiksCi0gICAgLmZs YWdzX2ludGVybmFsID0gRkZfRklMVEVSX0ZMQUdfSFdGUkFNRV9BV0FSRSwKLX07Ci0KLXN0YXRp YyBjb25zdCBBVk9wdGlvbiB2ZmxpcF92dWxrYW5fb3B0aW9uc1tdID0gewotICAgIHsgTlVMTCB9 LAotfTsKLQotQVZGSUxURVJfREVGSU5FX0NMQVNTKHZmbGlwX3Z1bGthbik7Ci0KLXN0YXRpYyBj b25zdCBBVkZpbHRlclBhZCB2ZmxpcF92dWxrYW5faW5wdXRzW10gPSB7Ci0gICAgewotICAgICAg ICAubmFtZSAgICAgICAgID0gImRlZmF1bHQiLAotICAgICAgICAudHlwZSAgICAgICAgID0gQVZN RURJQV9UWVBFX1ZJREVPLAotICAgICAgICAuZmlsdGVyX2ZyYW1lID0gJnZmbGlwX3Z1bGthbl9m aWx0ZXJfZnJhbWUsCi0gICAgICAgIC5jb25maWdfcHJvcHMgPSAmZmZfdmtfZmlsdGVyX2NvbmZp Z19pbnB1dCwKLSAgICB9Ci19OwotCi1jb25zdCBGRkZpbHRlciBmZl92Zl92ZmxpcF92dWxrYW4g PSB7Ci0gICAgLnAubmFtZSAgICAgICAgID0gInZmbGlwX3Z1bGthbiIsCi0gICAgLnAuZGVzY3Jp cHRpb24gID0gTlVMTF9JRl9DT05GSUdfU01BTEwoIlZlcnRpY2FsbHkgZmxpcCB0aGUgaW5wdXQg dmlkZW8gaW4gVnVsa2FuIiksCi0gICAgLnAucHJpdl9jbGFzcyAgID0gJnZmbGlwX3Z1bGthbl9j bGFzcywKLSAgICAucHJpdl9zaXplICAgICAgPSBzaXplb2YoRmxpcFZ1bGthbkNvbnRleHQpLAot ICAgIC5pbml0ICAgICAgICAgICA9ICZmZl92a19maWx0ZXJfaW5pdCwKLSAgICAudW5pbml0ICAg ICAgICAgPSAmZmxpcF92dWxrYW5fdW5pbml0LAotICAgIEZJTFRFUl9JTlBVVFModmZsaXBfdnVs a2FuX2lucHV0cyksCi0gICAgRklMVEVSX09VVFBVVFMoZmxpcF92dWxrYW5fb3V0cHV0cyksCi0g ICAgRklMVEVSX1NJTkdMRV9QSVhGTVQoQVZfUElYX0ZNVF9WVUxLQU4pLAotICAgIC5mbGFnc19p bnRlcm5hbCA9IEZGX0ZJTFRFUl9GTEFHX0hXRlJBTUVfQVdBUkUsCi19OwotCi1zdGF0aWMgY29u c3QgQVZPcHRpb24gZmxpcF92dWxrYW5fb3B0aW9uc1tdID0gewotICAgIHsgTlVMTCB9LAotfTsK LQotQVZGSUxURVJfREVGSU5FX0NMQVNTKGZsaXBfdnVsa2FuKTsKLQotc3RhdGljIGNvbnN0IEFW RmlsdGVyUGFkIGZsaXBfdnVsa2FuX2lucHV0c1tdID0gewotICAgIHsKLSAgICAgICAgLm5hbWUg ICAgICAgICA9ICJkZWZhdWx0IiwKLSAgICAgICAgLnR5cGUgICAgICAgICA9IEFWTUVESUFfVFlQ RV9WSURFTywKLSAgICAgICAgLmZpbHRlcl9mcmFtZSA9ICZmbGlwX3Z1bGthbl9maWx0ZXJfZnJh bWUsCi0gICAgICAgIC5jb25maWdfcHJvcHMgPSAmZmZfdmtfZmlsdGVyX2NvbmZpZ19pbnB1dCwK LSAgICB9Ci19OwotCi1jb25zdCBGRkZpbHRlciBmZl92Zl9mbGlwX3Z1bGthbiA9IHsKLSAgICAu cC5uYW1lICAgICAgICAgPSAiZmxpcF92dWxrYW4iLAotICAgIC5wLmRlc2NyaXB0aW9uICA9IE5V TExfSUZfQ09ORklHX1NNQUxMKCJGbGlwIGJvdGggaG9yaXpvbnRhbGx5IGFuZCB2ZXJ0aWNhbGx5 IiksCi0gICAgLnAucHJpdl9jbGFzcyAgID0gJmZsaXBfdnVsa2FuX2NsYXNzLAotICAgIC5wLmZs YWdzICAgICAgICA9IEFWRklMVEVSX0ZMQUdfSFdERVZJQ0UsCi0gICAgLnByaXZfc2l6ZSAgICAg ID0gc2l6ZW9mKEZsaXBWdWxrYW5Db250ZXh0KSwKLSAgICAuaW5pdCAgICAgICAgICAgPSAmZmZf dmtfZmlsdGVyX2luaXQsCi0gICAgLnVuaW5pdCAgICAgICAgID0gJmZsaXBfdnVsa2FuX3VuaW5p dCwKLSAgICBGSUxURVJfSU5QVVRTKGZsaXBfdnVsa2FuX2lucHV0cyksCi0gICAgRklMVEVSX09V VFBVVFMoZmxpcF92dWxrYW5fb3V0cHV0cyksCi0gICAgRklMVEVSX1NJTkdMRV9QSVhGTVQoQVZf UElYX0ZNVF9WVUxLQU4pLAotICAgIC5mbGFnc19pbnRlcm5hbCA9IEZGX0ZJTFRFUl9GTEFHX0hX RlJBTUVfQVdBUkUsCi19OwotLSAKMi40OS4xCgoKRnJvbSAxYzI5YWU2NjAzZjBmZWQxMzBlNWVh NmQxMzE2YmFhZmJlMWRiNzM1IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBKYW1haWth MSA8bHVrYXN6Y3oxOEB3cC5wbD4KRGF0ZTogV2VkLCAzIFNlcCAyMDI1IDEyOjUzOjI2ICswMDAw ClN1YmplY3Q6IFtQQVRDSCAwMTIvMTE4XSBDaGFuZ2luZyB2dWxrYW4gZmlsZSBkaXJlY3RvcnkK Ci0tLQogbGliYXZmaWx0ZXIvdnVsa2FuL3ZmX2ZsaXBfdnVsa2FuLmMgfCAyOTcgKysrKysrKysr KysrKysrKysrKysrKysrKysrKwogMSBmaWxlIGNoYW5nZWQsIDI5NyBpbnNlcnRpb25zKCspCiBj cmVhdGUgbW9kZSAxMDA2NDQgbGliYXZmaWx0ZXIvdnVsa2FuL3ZmX2ZsaXBfdnVsa2FuLmMKCmRp ZmYgLS1naXQgYS9saWJhdmZpbHRlci92dWxrYW4vdmZfZmxpcF92dWxrYW4uYyBiL2xpYmF2Zmls dGVyL3Z1bGthbi92Zl9mbGlwX3Z1bGthbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwMDAuLmIwMGE3ZTU1MTAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJhdmZpbHRlci92dWxr YW4vdmZfZmxpcF92dWxrYW4uYwpAQCAtMCwwICsxLDI5NyBAQAorLyoKKyAqIGNvcHlyaWdodCAo YykgMjAyMSBXdSBKaWFuaHVhIDxqaWFuaHVhLnd1QGludGVsLmNvbT4KKyAqIENvcHlyaWdodCAo YykgTHlubmUKKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCisgKgorICogRkZt cGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0 aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor ICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy YWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRv IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl ZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisgKi8KKworI2luY2x1 ZGUgImxpYmF2dXRpbC9yYW5kb21fc2VlZC5oIgorI2luY2x1ZGUgImxpYmF2dXRpbC9vcHQuaCIK KyNpbmNsdWRlICIuLi8uLi9saWJhdnV0aWwvdnVsa2FuL3Z1bGthbl9zcGlydi5oIgorI2luY2x1 ZGUgInZ1bGthbl9maWx0ZXIuaCIKKworI2luY2x1ZGUgImxpYmF2ZmlsdGVyL2ZpbHRlcnMuaCIK KyNpbmNsdWRlICJsaWJhdmZpbHRlci92aWRlby5oIgorCitlbnVtIEZsaXBUeXBlIHsKKyAgICBG TElQX1ZFUlRJQ0FMLAorICAgIEZMSVBfSE9SSVpPTlRBTCwKKyAgICBGTElQX0JPVEgKK307CisK K3R5cGVkZWYgc3RydWN0IEZsaXBWdWxrYW5Db250ZXh0IHsKKyAgICBGRlZ1bGthbkNvbnRleHQg dmtjdHg7CisKKyAgICBpbnQgaW5pdGlhbGl6ZWQ7CisgICAgRkZWa0V4ZWNQb29sIGU7CisgICAg QVZWdWxrYW5EZXZpY2VRdWV1ZUZhbWlseSAqcWY7CisgICAgRkZWdWxrYW5TaGFkZXIgc2hkOwor fSBGbGlwVnVsa2FuQ29udGV4dDsKKworc3RhdGljIGF2X2NvbGQgaW50IGluaXRfZmlsdGVyKEFW RmlsdGVyQ29udGV4dCAqY3R4LCBBVkZyYW1lICppbiwgZW51bSBGbGlwVHlwZSB0eXBlKQorewor ICAgIGludCBlcnIgPSAwOworICAgIHVpbnQ4X3QgKnNwdl9kYXRhOworICAgIHNpemVfdCBzcHZf bGVuOworICAgIHZvaWQgKnNwdl9vcGFxdWUgPSBOVUxMOworICAgIEZsaXBWdWxrYW5Db250ZXh0 ICpzID0gY3R4LT5wcml2OworICAgIEZGVnVsa2FuQ29udGV4dCAqdmtjdHggPSAmcy0+dmtjdHg7 CisgICAgY29uc3QgaW50IHBsYW5lcyA9IGF2X3BpeF9mbXRfY291bnRfcGxhbmVzKHMtPnZrY3R4 Lm91dHB1dF9mb3JtYXQpOworICAgIEZGVnVsa2FuU2hhZGVyICpzaGQgPSAmcy0+c2hkOworICAg IEZGVmtTUElSVkNvbXBpbGVyICpzcHY7CisgICAgRkZWdWxrYW5EZXNjcmlwdG9yU2V0QmluZGlu ZyAqZGVzYzsKKworICAgIHNwdiA9IGZmX3ZrX3NwaXJ2X2luaXQoKTsKKyAgICBpZiAoIXNwdikg eworICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJVbmFibGUgdG8gaW5pdGlhbGl6 ZSBTUElSLVYgY29tcGlsZXIhXG4iKTsKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfRVhURVJOQUw7 CisgICAgfQorCisgICAgcy0+cWYgPSBmZl92a19xZl9maW5kKHZrY3R4LCBWS19RVUVVRV9DT01Q VVRFX0JJVCwgMCk7CisgICAgaWYgKCFzLT5xZikgeworICAgICAgICBhdl9sb2coY3R4LCBBVl9M T0dfRVJST1IsICJEZXZpY2UgaGFzIG5vIGNvbXB1dGUgcXVldWVzXG4iKTsKKyAgICAgICAgZXJy ID0gQVZFUlJPUihFTk9UU1VQKTsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIFJF VChmZl92a19leGVjX3Bvb2xfaW5pdCh2a2N0eCwgcy0+cWYsICZzLT5lLCBzLT5xZi0+bnVtKjQs IDAsIDAsIDAsIE5VTEwpKTsKKyAgICBSRVQoZmZfdmtfc2hhZGVyX2luaXQodmtjdHgsICZzLT5z aGQsICJmbGlwIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgVktfU0hBREVSX1NUQUdFX0NP TVBVVEVfQklULAorICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAzMiwgMzIsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDAp KTsKKworICAgIGRlc2MgPSAoRkZWdWxrYW5EZXNjcmlwdG9yU2V0QmluZGluZyBbXSkgeworICAg ICAgICB7CisgICAgICAgICAgICAubmFtZSAgICAgICA9ICJpbnB1dF9pbWFnZSIsCisgICAgICAg ICAgICAudHlwZSAgICAgICA9IFZLX0RFU0NSSVBUT1JfVFlQRV9TVE9SQUdFX0lNQUdFLAorICAg ICAgICAgICAgLm1lbV9sYXlvdXQgPSBmZl92a19zaGFkZXJfcmVwX2ZtdChzLT52a2N0eC5pbnB1 dF9mb3JtYXQsIEZGX1ZLX1JFUF9GTE9BVCksCisgICAgICAgICAgICAubWVtX3F1YWxpICA9ICJy ZWFkb25seSIsCisgICAgICAgICAgICAuZGltZW5zaW9ucyA9IDIsCisgICAgICAgICAgICAuZWxl bXMgICAgICA9IHBsYW5lcywKKyAgICAgICAgICAgIC5zdGFnZXMgICAgID0gVktfU0hBREVSX1NU QUdFX0NPTVBVVEVfQklULAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAubmFt ZSAgICAgICA9ICJvdXRwdXRfaW1hZ2UiLAorICAgICAgICAgICAgLnR5cGUgICAgICAgPSBWS19E RVNDUklQVE9SX1RZUEVfU1RPUkFHRV9JTUFHRSwKKyAgICAgICAgICAgIC5tZW1fbGF5b3V0ID0g ZmZfdmtfc2hhZGVyX3JlcF9mbXQocy0+dmtjdHgub3V0cHV0X2Zvcm1hdCwgRkZfVktfUkVQX0ZM T0FUKSwKKyAgICAgICAgICAgIC5tZW1fcXVhbGkgID0gIndyaXRlb25seSIsCisgICAgICAgICAg ICAuZGltZW5zaW9ucyA9IDIsCisgICAgICAgICAgICAuZWxlbXMgICAgICA9IHBsYW5lcywKKyAg ICAgICAgICAgIC5zdGFnZXMgICAgID0gVktfU0hBREVSX1NUQUdFX0NPTVBVVEVfQklULAorICAg ICAgICB9LAorICAgIH07CisKKyAgICBSRVQoZmZfdmtfc2hhZGVyX2FkZF9kZXNjcmlwdG9yX3Nl dCh2a2N0eCwgJnMtPnNoZCwgZGVzYywgMiwgMCwgMCkpOworCisgICAgR0xTTEMoMCwgdm9pZCBt YWluKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICk7CisgICAgR0xTTEMoMCwgeyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7 CisgICAgR0xTTEMoMSwgICAgIGl2ZWMyIHNpemU7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgR0xTTEMoMSwgICAg IGNvbnN0IGl2ZWMyIHBvcyA9IGl2ZWMyKGdsX0dsb2JhbEludm9jYXRpb25JRC54eSk7ICAgICAg ICAgICAgICAgICAgICAgICAgICk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwbGFuZXM7IGkr KykgeworICAgICAgICBHTFNMQygwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICBHTFNM RigxLCBzaXplID0gaW1hZ2VTaXplKG91dHB1dF9pbWFnZVslaV0pOyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLGkpOworICAgICAgICBHTFNMQygxLCBpZiAoSVNfV0lUSElO KHBvcywgc2l6ZSkpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICApOworICAgICAgICBzd2l0Y2ggKHR5cGUpCisgICAgICAgIHsKKyAgICAgICAgY2FzZSBG TElQX0hPUklaT05UQUw6CisgICAgICAgICAgICBHTFNMRigyLCB2ZWM0IHJlcyA9IGltYWdlTG9h ZChpbnB1dF9pbWFnZVslaV0sIGl2ZWMyKHNpemUueCAtIHBvcy54LCBwb3MueSkpOyAsaSk7Cisg ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBGTElQX1ZFUlRJQ0FMOgorICAgICAgICAg ICAgR0xTTEYoMiwgdmVjNCByZXMgPSBpbWFnZUxvYWQoaW5wdXRfaW1hZ2VbJWldLCBpdmVjMihw b3MueCwgc2l6ZS55IC0gcG9zLnkpKTsgLGkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg IGNhc2UgRkxJUF9CT1RIOgorICAgICAgICAgICAgR0xTTEYoMiwgdmVjNCByZXMgPSBpbWFnZUxv YWQoaW5wdXRfaW1hZ2VbJWldLCBpdmVjMihzaXplLnh5IC0gcG9zLnh5KSk7LCAgICAgIGkpOwor ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBHTFNMRigy LCB2ZWM0IHJlcyA9IGltYWdlTG9hZChpbnB1dF9pbWFnZVslaV0sIHBvcyk7ICAgICAgICAgICAg ICAgICAgICAgICAgICAsaSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg ICBHTFNMRigyLCAgICAgaW1hZ2VTdG9yZShvdXRwdXRfaW1hZ2VbJWldLCBwb3MsIHJlcyk7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLGkpOworICAgICAgICBHTFNMQygxLCB9ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICApOworICAgIH0KKyAgICBHTFNMQygwLCB9ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KTsKKworICAgIFJFVChzcHYtPmNvbXBpbGVfc2hhZGVyKHZrY3R4LCBzcHYsIHNoZCwgJnNwdl9k YXRhLCAmc3B2X2xlbiwgIm1haW4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzcHZf b3BhcXVlKSk7CisgICAgUkVUKGZmX3ZrX3NoYWRlcl9saW5rKHZrY3R4LCBzaGQsIHNwdl9kYXRh LCBzcHZfbGVuLCAibWFpbiIpKTsKKworICAgIFJFVChmZl92a19zaGFkZXJfcmVnaXN0ZXJfZXhl Yyh2a2N0eCwgJnMtPmUsICZzLT5zaGQpKTsKKworICAgIHMtPmluaXRpYWxpemVkID0gMTsKKwor ZmFpbDoKKyAgICBpZiAoc3B2X29wYXF1ZSkKKyAgICAgICAgc3B2LT5mcmVlX3NoYWRlcihzcHYs ICZzcHZfb3BhcXVlKTsKKyAgICBpZiAoc3B2KQorICAgICAgICBzcHYtPnVuaW5pdCgmc3B2KTsK KworICAgIHJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBhdl9jb2xkIHZvaWQgZmxpcF92dWxrYW5f dW5pbml0KEFWRmlsdGVyQ29udGV4dCAqYXZjdHgpCit7CisgICAgRmxpcFZ1bGthbkNvbnRleHQg KnMgPSBhdmN0eC0+cHJpdjsKKyAgICBGRlZ1bGthbkNvbnRleHQgKnZrY3R4ID0gJnMtPnZrY3R4 OworCisgICAgZmZfdmtfZXhlY19wb29sX2ZyZWUodmtjdHgsICZzLT5lKTsKKyAgICBmZl92a19z aGFkZXJfZnJlZSh2a2N0eCwgJnMtPnNoZCk7CisKKyAgICBmZl92a191bmluaXQoJnMtPnZrY3R4 KTsKKworICAgIHMtPmluaXRpYWxpemVkID0gMDsKK30KKworc3RhdGljIGludCBmaWx0ZXJfZnJh bWUoQVZGaWx0ZXJMaW5rICpsaW5rLCBBVkZyYW1lICppbiwgZW51bSBGbGlwVHlwZSB0eXBlKQor eworICAgIGludCBlcnI7CisgICAgQVZGcmFtZSAqb3V0ID0gTlVMTDsKKyAgICBBVkZpbHRlckNv bnRleHQgKmN0eCA9IGxpbmstPmRzdDsKKyAgICBGbGlwVnVsa2FuQ29udGV4dCAqcyA9IGN0eC0+ cHJpdjsKKyAgICBBVkZpbHRlckxpbmsgKm91dGxpbmsgPSBjdHgtPm91dHB1dHNbMF07CisKKyAg ICBvdXQgPSBmZl9nZXRfdmlkZW9fYnVmZmVyKG91dGxpbmssIG91dGxpbmstPncsIG91dGxpbmst PmgpOworICAgIGlmICghb3V0KSB7CisgICAgICAgIGVyciA9IEFWRVJST1IoRU5PTUVNKTsKKyAg ICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIGlmICghcy0+aW5pdGlhbGl6ZWQpCisgICAg ICAgIFJFVChpbml0X2ZpbHRlcihjdHgsIGluLCB0eXBlKSk7CisKKyAgICBSRVQoZmZfdmtfZmls dGVyX3Byb2Nlc3Nfc2ltcGxlKCZzLT52a2N0eCwgJnMtPmUsICZzLT5zaGQsIG91dCwgaW4sCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19OVUxMX0hBTkRMRSwgTlVMTCwg MCkpOworCisgICAgUkVUKGF2X2ZyYW1lX2NvcHlfcHJvcHMob3V0LCBpbikpOworCisgICAgYXZf ZnJhbWVfZnJlZSgmaW4pOworCisgICAgcmV0dXJuIGZmX2ZpbHRlcl9mcmFtZShvdXRsaW5rLCBv dXQpOworCitmYWlsOgorICAgIGF2X2ZyYW1lX2ZyZWUoJmluKTsKKyAgICBhdl9mcmFtZV9mcmVl KCZvdXQpOworICAgIHJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgaGZsaXBfdnVsa2FuX2Zp bHRlcl9mcmFtZShBVkZpbHRlckxpbmsgKmxpbmssIEFWRnJhbWUgKmluKQoreworICAgIHJldHVy biBmaWx0ZXJfZnJhbWUobGluaywgaW4sIEZMSVBfSE9SSVpPTlRBTCk7Cit9CisKK3N0YXRpYyBp bnQgdmZsaXBfdnVsa2FuX2ZpbHRlcl9mcmFtZShBVkZpbHRlckxpbmsgKmxpbmssIEFWRnJhbWUg KmluKQoreworICAgIHJldHVybiBmaWx0ZXJfZnJhbWUobGluaywgaW4sIEZMSVBfVkVSVElDQUwp OworfQorCitzdGF0aWMgaW50IGZsaXBfdnVsa2FuX2ZpbHRlcl9mcmFtZShBVkZpbHRlckxpbmsg KmxpbmssIEFWRnJhbWUgKmluKQoreworICAgIHJldHVybiBmaWx0ZXJfZnJhbWUobGluaywgaW4s IEZMSVBfQk9USCk7Cit9CisKK3N0YXRpYyBjb25zdCBBVkZpbHRlclBhZCBmbGlwX3Z1bGthbl9v dXRwdXRzW10gPSB7CisgICAgeworICAgICAgICAubmFtZSAgICAgICAgID0gImRlZmF1bHQiLAor ICAgICAgICAudHlwZSAgICAgICAgID0gQVZNRURJQV9UWVBFX1ZJREVPLAorICAgICAgICAuY29u ZmlnX3Byb3BzID0gJmZmX3ZrX2ZpbHRlcl9jb25maWdfb3V0cHV0LAorICAgIH0KK307CisKK3N0 YXRpYyBjb25zdCBBVk9wdGlvbiBoZmxpcF92dWxrYW5fb3B0aW9uc1tdID0geworICAgIHsgTlVM TCB9LAorfTsKKworQVZGSUxURVJfREVGSU5FX0NMQVNTKGhmbGlwX3Z1bGthbik7CisKK3N0YXRp YyBjb25zdCBBVkZpbHRlclBhZCBoZmxpcF92dWxrYW5faW5wdXRzW10gPSB7CisgICAgeworICAg ICAgICAubmFtZSAgICAgICAgID0gImRlZmF1bHQiLAorICAgICAgICAudHlwZSAgICAgICAgID0g QVZNRURJQV9UWVBFX1ZJREVPLAorICAgICAgICAuZmlsdGVyX2ZyYW1lID0gJmhmbGlwX3Z1bGth bl9maWx0ZXJfZnJhbWUsCisgICAgICAgIC5jb25maWdfcHJvcHMgPSAmZmZfdmtfZmlsdGVyX2Nv bmZpZ19pbnB1dCwKKyAgICB9Cit9OworCitjb25zdCBGRkZpbHRlciBmZl92Zl9oZmxpcF92dWxr YW4gPSB7CisgICAgLnAubmFtZSAgICAgICAgID0gImhmbGlwX3Z1bGthbiIsCisgICAgLnAuZGVz Y3JpcHRpb24gID0gTlVMTF9JRl9DT05GSUdfU01BTEwoIkhvcml6b250YWxseSBmbGlwIHRoZSBp bnB1dCB2aWRlbyBpbiBWdWxrYW4iKSwKKyAgICAucC5wcml2X2NsYXNzICAgPSAmaGZsaXBfdnVs a2FuX2NsYXNzLAorICAgIC5wcml2X3NpemUgICAgICA9IHNpemVvZihGbGlwVnVsa2FuQ29udGV4 dCksCisgICAgLmluaXQgICAgICAgICAgID0gJmZmX3ZrX2ZpbHRlcl9pbml0LAorICAgIC51bmlu aXQgICAgICAgICA9ICZmbGlwX3Z1bGthbl91bmluaXQsCisgICAgRklMVEVSX0lOUFVUUyhoZmxp cF92dWxrYW5faW5wdXRzKSwKKyAgICBGSUxURVJfT1VUUFVUUyhmbGlwX3Z1bGthbl9vdXRwdXRz KSwKKyAgICBGSUxURVJfU0lOR0xFX1BJWEZNVChBVl9QSVhfRk1UX1ZVTEtBTiksCisgICAgLmZs YWdzX2ludGVybmFsID0gRkZfRklMVEVSX0ZMQUdfSFdGUkFNRV9BV0FSRSwKK307CisKK3N0YXRp YyBjb25zdCBBVk9wdGlvbiB2ZmxpcF92dWxrYW5fb3B0aW9uc1tdID0geworICAgIHsgTlVMTCB9 LAorfTsKKworQVZGSUxURVJfREVGSU5FX0NMQVNTKHZmbGlwX3Z1bGthbik7CisKK3N0YXRpYyBj b25zdCBBVkZpbHRlclBhZCB2ZmxpcF92dWxrYW5faW5wdXRzW10gPSB7CisgICAgeworICAgICAg ICAubmFtZSAgICAgICAgID0gImRlZmF1bHQiLAorICAgICAgICAudHlwZSAgICAgICAgID0gQVZN RURJQV9UWVBFX1ZJREVPLAorICAgICAgICAuZmlsdGVyX2ZyYW1lID0gJnZmbGlwX3Z1bGthbl9m aWx0ZXJfZnJhbWUsCisgICAgICAgIC5jb25maWdfcHJvcHMgPSAmZmZfdmtfZmlsdGVyX2NvbmZp Z19pbnB1dCwKKyAgICB9Cit9OworCitjb25zdCBGRkZpbHRlciBmZl92Zl92ZmxpcF92dWxrYW4g PSB7CisgICAgLnAubmFtZSAgICAgICAgID0gInZmbGlwX3Z1bGthbiIsCisgICAgLnAuZGVzY3Jp cHRpb24gID0gTlVMTF9JRl9DT05GSUdfU01BTEwoIlZlcnRpY2FsbHkgZmxpcCB0aGUgaW5wdXQg dmlkZW8gaW4gVnVsa2FuIiksCisgICAgLnAucHJpdl9jbGFzcyAgID0gJnZmbGlwX3Z1bGthbl9j bGFzcywKKyAgICAucHJpdl9zaXplICAgICAgPSBzaXplb2YoRmxpcFZ1bGthbkNvbnRleHQpLAor ICAgIC5pbml0ICAgICAgICAgICA9ICZmZl92a19maWx0ZXJfaW5pdCwKKyAgICAudW5pbml0ICAg ICAgICAgPSAmZmxpcF92dWxrYW5fdW5pbml0LAorICAgIEZJTFRFUl9JTlBVVFModmZsaXBfdnVs a2FuX2lucHV0cyksCisgICAgRklMVEVSX09VVFBVVFMoZmxpcF92dWxrYW5fb3V0cHV0cyksCisg ICAgRklMVEVSX1NJTkdMRV9QSVhGTVQoQVZfUElYX0ZNVF9WVUxLQU4pLAorICAgIC5mbGFnc19p bnRlcm5hbCA9IEZGX0ZJTFRFUl9GTEFHX0hXRlJBTUVfQVdBUkUsCit9OworCitzdGF0aWMgY29u c3QgQVZPcHRpb24gZmxpcF92dWxrYW5fb3B0aW9uc1tdID0geworICAgIHsgTlVMTCB9LAorfTsK KworQVZGSUxURVJfREVGSU5FX0NMQVNTKGZsaXBfdnVsa2FuKTsKKworc3RhdGljIGNvbnN0IEFW RmlsdGVyUGFkIGZsaXBfdnVsa2FuX2lucHV0c1tdID0geworICAgIHsKKyAgICAgICAgLm5hbWUg ICAgICAgICA9ICJkZWZhdWx0IiwKKyAgICAgICAgLnR5cGUgICAgICAgICA9IEFWTUVESUFfVFlQ RV9WSURFTywKKyAgICAgICAgLmZpbHRlcl9mcmFtZSA9ICZmbGlwX3Z1bGthbl9maWx0ZXJfZnJh bWUsCisgICAgICAgIC5jb25maWdfcHJvcHMgPSAmZmZfdmtfZmlsdGVyX2NvbmZpZ19pbnB1dCwK KyAgICB9Cit9OworCitjb25zdCBGRkZpbHRlciBmZl92Zl9mbGlwX3Z1bGthbiA9IHsKKyAgICAu cC5uYW1lICAgICAgICAgPSAiZmxpcF92dWxrYW4iLAorICAgIC5wLmRlc2NyaXB0aW9uICA9IE5V TExfSUZfQ09ORklHX1NNQUxMKCJGbGlwIGJvdGggaG9yaXpvbnRhbGx5IGFuZCB2ZXJ0aWNhbGx5 IiksCisgICAgLnAucHJpdl9jbGFzcyAgID0gJmZsaXBfdnVsa2FuX2NsYXNzLAorICAgIC5wLmZs YWdzICAgICAgICA9IEFWRklMVEVSX0ZMQUdfSFdERVZJQ0UsCisgICAgLnByaXZfc2l6ZSAgICAg ID0gc2l6ZW9mKEZsaXBWdWxrYW5Db250ZXh0KSwKKyAgICAuaW5pdCAgICAgICAgICAgPSAmZmZf dmtfZmlsdGVyX2luaXQsCisgICAgLnVuaW5pdCAgICAgICAgID0gJmZsaXBfdnVsa2FuX3VuaW5p dCwKKyAgICBGSUxURVJfSU5QVVRTKGZsaXBfdnVsa2FuX2lucHV0cyksCisgICAgRklMVEVSX09V VFBVVFMoZmxpcF92dWxrYW5fb3V0cHV0cyksCisgICAgRklMVEVSX1NJTkdMRV9QSVhGTVQoQVZf UElYX0ZNVF9WVUxLQU4pLAorICAgIC5mbGFnc19pbnRlcm5hbCA9IEZGX0ZJTFRFUl9GTEFHX0hX RlJBTUVfQVdBUkUsCit9OwotLSAKMi40OS4xCgoKRnJvbSAwMmNjYWZiYWRhYjgzNjExNTZmNmQw OGJjYTRhYjNhZWNhM2EyYTFlIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBKYW1haWth MSA8bHVrYXN6Y3oxOEB3cC5wbD4KRGF0ZTogV2VkLCAzIFNlcCAyMDI1IDEyOjUzOjU2ICswMDAw ClN1YmplY3Q6IFtQQVRDSCAwMTMvMTE4XSBDaGFuZ2luZyB2dWxrYW4gZmlsZSBkaXJlY3RvcnkK Ci0tLQogbGliYXZmaWx0ZXIvdmZfZ2JsdXJfdnVsa2FuLmMgfCAzNzkgLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDM3OSBkZWxldGlvbnMoLSkKIGRl bGV0ZSBtb2RlIDEwMDY0NCBsaWJhdmZpbHRlci92Zl9nYmx1cl92dWxrYW4uYwoKZGlmZiAtLWdp dCBhL2xpYmF2ZmlsdGVyL3ZmX2dibHVyX3Z1bGthbi5jIGIvbGliYXZmaWx0ZXIvdmZfZ2JsdXJf dnVsa2FuLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFiNDQ3ZTI3NTQuLjAwMDAw MDAwMDAKLS0tIGEvbGliYXZmaWx0ZXIvdmZfZ2JsdXJfdnVsa2FuLmMKKysrIC9kZXYvbnVsbApA QCAtMSwzNzkgKzAsMCBAQAotLyoKLSAqIGNvcHlyaWdodCAoYykgMjAyMS0yMDIyIFd1IEppYW5o dWEgPGppYW5odWEud3VAaW50ZWwuY29tPgotICogQ29weXJpZ2h0IChjKSBMeW5uZQotICoKLSAq IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KLSAqCi0gKiBGRm1wZWcgaXMgZnJlZSBzb2Z0 d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIg dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFz IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZl cnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2 ZXJzaW9uLgotICoKLSAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0 IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2 ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2 ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExp Y2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdh cmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKLSAqLwotCi0jaW5jbHVkZSAibGliYXZ1dGlsL21l bS5oIgotI2luY2x1ZGUgImxpYmF2dXRpbC9yYW5kb21fc2VlZC5oIgotI2luY2x1ZGUgImxpYmF2 dXRpbC9vcHQuaCIKLSNpbmNsdWRlICJsaWJhdnV0aWwvdnVsa2FuX3NwaXJ2LmgiCi0jaW5jbHVk ZSAidnVsa2FuX2ZpbHRlci5oIgotCi0jaW5jbHVkZSAiZmlsdGVycy5oIgotI2luY2x1ZGUgInZp ZGVvLmgiCi0KLSNkZWZpbmUgQ0dTIDMyCi0jZGVmaW5lIEdCTFVSX01BWF9LRVJORUxfU0laRSAx MjcKLQotdHlwZWRlZiBzdHJ1Y3QgR0JsdXJWdWxrYW5Db250ZXh0IHsKLSAgICBGRlZ1bGthbkNv bnRleHQgdmtjdHg7Ci0KLSAgICBpbnQgaW5pdGlhbGl6ZWQ7Ci0gICAgRkZWa0V4ZWNQb29sIGU7 Ci0gICAgQVZWdWxrYW5EZXZpY2VRdWV1ZUZhbWlseSAqcWY7Ci0gICAgVmtTYW1wbGVyIHNhbXBs ZXI7Ci0gICAgRkZWdWxrYW5TaGFkZXIgc2hkX2hvcjsKLSAgICBGRlZrQnVmZmVyIHBhcmFtc19o b3I7Ci0gICAgRkZWdWxrYW5TaGFkZXIgc2hkX3ZlcjsKLSAgICBGRlZrQnVmZmVyIHBhcmFtc192 ZXI7Ci0KLSAgICBpbnQgc2l6ZTsKLSAgICBpbnQgc2l6ZVY7Ci0gICAgaW50IHBsYW5lczsKLSAg ICBmbG9hdCBzaWdtYTsKLSAgICBmbG9hdCBzaWdtYVY7Ci19IEdCbHVyVnVsa2FuQ29udGV4dDsK LQotc3RhdGljIGNvbnN0IGNoYXIgZ2JsdXJfZnVuY1tdID0gewotICAgIEMoMCwgdm9pZCBnYmx1 cihjb25zdCBpdmVjMiBwb3MsIGNvbnN0IGludCBpbmRleCkgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICkKLSAgICBDKDAsIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCi0gICAgQygxLCAgICAgdmVjNCBz dW0gPSBpbWFnZUxvYWQoaW5wdXRfaW1hZ2VzW2luZGV4XSwgcG9zKSAqIGtlcm5lbFswXTsgICAg ICAgICAgKQotICAgIEMoMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKLSAgICBDKDEsICAgICBmb3IoaW50 IGkgPSAxOyBpIDwga2VybmVsLmxlbmd0aCgpOyBpKyspIHsgICAgICAgICAgICAgICAgICAgICAg ICAgICApCi0gICAgQygyLCAgICAgICAgIHN1bSArPSBpbWFnZUxvYWQoaW5wdXRfaW1hZ2VzW2lu ZGV4XSwgcG9zICsgT0ZGU0VUKSAqIGtlcm5lbFtpXTsgKQotICAgIEMoMiwgICAgICAgICBzdW0g Kz0gaW1hZ2VMb2FkKGlucHV0X2ltYWdlc1tpbmRleF0sIHBvcyAtIE9GRlNFVCkgKiBrZXJuZWxb aV07ICkKLSAgICBDKDEsICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCi0gICAgQygwLCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKQotICAgIEMoMSwgICAgIGltYWdlU3RvcmUob3V0cHV0X2ltYWdlc1tpbmRleF0sIHBvcywg c3VtKTsgICAgICAgICAgICAgICAgICAgICAgICAgICkKLSAgICBDKDAsIH0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICApCi19OwotCi1zdGF0aWMgaW5saW5lIGZsb2F0IGdhdXNzaWFuKGZsb2F0IHNpZ21hLCBmbG9h dCB4KQotewotICAgIHJldHVybiAxLjAgLyAoc3FydCgyLjAgKiBNX1BJKSAqIHNpZ21hKSAqCi0g ICAgICAgICAgIGV4cCgtKHggKiB4KSAvICgyLjAgKiBzaWdtYSAqIHNpZ21hKSk7Ci19Ci0KLXN0 YXRpYyBpbmxpbmUgZmxvYXQgZ2F1c3NpYW5fc2ltcHNvbl9pbnRlZ3JhdGlvbihmbG9hdCBzaWdt YSwgZmxvYXQgYSwgZmxvYXQgYikKLXsKLSAgICByZXR1cm4gKGIgLSBhKSAqICgxLjAgLyA2LjAp ICogKChnYXVzc2lhbihzaWdtYSwgYSkgKwotICAgICAgICAgICA0LjAgKiBnYXVzc2lhbihzaWdt YSwgKGEgKyBiKSAqIDAuNSkgKyBnYXVzc2lhbihzaWdtYSwgYikpKTsKLX0KLQotc3RhdGljIHZv aWQgaW5pdF9nYXVzc2lhbl9rZXJuZWwoZmxvYXQgKmtlcm5lbCwgZmxvYXQgc2lnbWEsIGZsb2F0 IGtlcm5lbF9zaXplKQotewotICAgIGludCB4OwotICAgIGZsb2F0IHN1bTsKLQotICAgIHN1bSA9 IDA7Ci0gICAgZm9yICh4ID0gMDsgeCA8IGtlcm5lbF9zaXplOyB4KyspIHsKLSAgICAgICAga2Vy bmVsW3hdID0gZ2F1c3NpYW5fc2ltcHNvbl9pbnRlZ3JhdGlvbihzaWdtYSwgeCAtIDAuNWYsIHgg KyAwLjVmKTsKLSAgICAgICAgaWYgKCF4KQotICAgICAgICAgICAgc3VtICs9IGtlcm5lbFt4XTsK LSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3VtICs9IGtlcm5lbFt4XSAqIDIuMDsKLSAgICB9 Ci0gICAgLyogTm9ybWFsaXplZCAqLwotICAgIHN1bSA9IDEuMCAvIHN1bTsKLSAgICBmb3IgKHgg PSAwOyB4IDwga2VybmVsX3NpemU7IHgrKykgewotICAgICAgICBrZXJuZWxbeF0gKj0gc3VtOwot ICAgIH0KLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGluaXRfa2VybmVsX3NpemUodm9pZCAqbG9n X2N0eCwgaW50ICpvdXRfc2l6ZSkKLXsKLSAgICBpbnQgc2l6ZSA9ICpvdXRfc2l6ZTsKLQotICAg IGlmICghKHNpemUgJiAxKSkgewotICAgICAgICBhdl9sb2cobG9nX2N0eCwgQVZfTE9HX1dBUk5J TkcsICJUaGUga2VybmVsIHNpemUgc2hvdWxkIGJlIG9kZFxuIik7Ci0gICAgICAgIHNpemUrKzsK LSAgICB9Ci0KLSAgICAqb3V0X3NpemUgPSAoc2l6ZSA+PiAxKSArIDE7Ci19Ci0KLXN0YXRpYyBh dl9jb2xkIHZvaWQgaW5pdF9nYXVzc2lhbl9wYXJhbXMoQVZGaWx0ZXJDb250ZXh0ICpjdHgpCi17 Ci0gICAgR0JsdXJWdWxrYW5Db250ZXh0ICpzID0gY3R4LT5wcml2OwotICAgIGlmIChzLT5zaWdt YVYgPD0gMCkKLSAgICAgICAgcy0+c2lnbWFWID0gcy0+c2lnbWE7Ci0KLSAgICBpbml0X2tlcm5l bF9zaXplKGN0eCwgJnMtPnNpemUpOwotCi0gICAgaWYgKHMtPnNpemVWIDw9IDApCi0gICAgICAg IHMtPnNpemVWID0gcy0+c2l6ZTsKLSAgICBlbHNlCi0gICAgICAgIGluaXRfa2VybmVsX3NpemUo Y3R4LCAmcy0+c2l6ZVYpOwotfQotCi1zdGF0aWMgaW50IGluaXRfZ2JsdXJfcGlwZWxpbmUoR0Js dXJWdWxrYW5Db250ZXh0ICpzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZGVnVs a2FuU2hhZGVyICpzaGQsIEZGVmtCdWZmZXIgKnBhcmFtc19idWYsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaW50IGtzaXplLCBmbG9hdCBzaWdtYSwgRkZWa1NQSVJWQ29tcGlsZXIg KnNwdikKLXsKLSAgICBpbnQgZXJyID0gMDsKLSAgICB1aW50OF90ICprZXJuZWxfbWFwcGVkOwot ICAgIHVpbnQ4X3QgKnNwdl9kYXRhOwotICAgIHNpemVfdCBzcHZfbGVuOwotICAgIHZvaWQgKnNw dl9vcGFxdWUgPSBOVUxMOwotCi0gICAgY29uc3QgaW50IHBsYW5lcyA9IGF2X3BpeF9mbXRfY291 bnRfcGxhbmVzKHMtPnZrY3R4Lm91dHB1dF9mb3JtYXQpOwotCi0gICAgRkZWdWxrYW5EZXNjcmlw dG9yU2V0QmluZGluZyBidWZfZGVzYyA9IHsKLSAgICAgICAgLm5hbWUgICAgICAgID0gImRhdGEi LAotICAgICAgICAudHlwZSAgICAgICAgPSBWS19ERVNDUklQVE9SX1RZUEVfU1RPUkFHRV9CVUZG RVIsCi0gICAgICAgIC5tZW1fcXVhbGkgICA9ICJyZWFkb25seSIsCi0gICAgICAgIC5tZW1fbGF5 b3V0ICA9ICJzdGQ0MzAiLAotICAgICAgICAuc3RhZ2VzICAgICAgPSBWS19TSEFERVJfU1RBR0Vf Q09NUFVURV9CSVQsCi0gICAgICAgIC5idWZfY29udGVudCA9ICJmbG9hdCBrZXJuZWwiLAotICAg ICAgICAuYnVmX2VsZW1zICAgPSBrc2l6ZSwKLSAgICB9OwotCi0gICAgUkVUKGZmX3ZrX3NoYWRl cl9hZGRfZGVzY3JpcHRvcl9zZXQoJnMtPnZrY3R4LCBzaGQsICZidWZfZGVzYywgMSwgMSwgMCkp OwotCi0gICAgR0xTTEQoICAgZ2JsdXJfZnVuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKTsKLSAgICBHTFNMQygwLCB2b2lkIG1haW4oKSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIEdMU0xDKDAsIHsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0g ICAgR0xTTEMoMSwgICAgIGl2ZWMyIHNpemU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKTsKLSAgICBHTFNMQygxLCAgICAgY29uc3QgaXZlYzIgcG9zID0gaXZlYzIo Z2xfR2xvYmFsSW52b2NhdGlvbklELnh5KTsgICApOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwg cGxhbmVzOyBpKyspIHsKLSAgICAgICAgR0xTTEMoMCwgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICBHTFNMRigxLCAgc2l6ZSA9 IGltYWdlU2l6ZShvdXRwdXRfaW1hZ2VzWyVpXSk7ICAgICAgICAgICAgICAsaSk7Ci0gICAgICAg IEdMU0xDKDEsICBpZiAoIUlTX1dJVEhJTihwb3MsIHNpemUpKSAgICAgICAgICAgICAgICAgICAg ICAgICAgKTsKLSAgICAgICAgR0xTTEMoMiwgICAgICByZXR1cm47ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICBpZiAocy0+cGxhbmVzICYgKDEgPDwg aSkpIHsKLSAgICAgICAgICAgIEdMU0xGKDEsICAgICAgZ2JsdXIocG9zLCAlaSk7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgLGkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgR0xT TEYoMSwgdmVjNCByZXMgPSBpbWFnZUxvYWQoaW5wdXRfaW1hZ2VzWyVpXSwgcG9zKTsgICAsaSk7 Ci0gICAgICAgICAgICBHTFNMRigxLCBpbWFnZVN0b3JlKG91dHB1dF9pbWFnZXNbJWldLCBwb3Ms IHJlcyk7ICAgICAgICxpKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBHTFNMQygwLCB9ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotCi0g ICAgUkVUKHNwdi0+Y29tcGlsZV9zaGFkZXIoJnMtPnZrY3R4LCBzcHYsIHNoZCwgJnNwdl9kYXRh LCAmc3B2X2xlbiwgIm1haW4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzcHZfb3Bh cXVlKSk7Ci0gICAgUkVUKGZmX3ZrX3NoYWRlcl9saW5rKCZzLT52a2N0eCwgc2hkLCBzcHZfZGF0 YSwgc3B2X2xlbiwgIm1haW4iKSk7Ci0KLSAgICBSRVQoZmZfdmtfc2hhZGVyX3JlZ2lzdGVyX2V4 ZWMoJnMtPnZrY3R4LCAmcy0+ZSwgc2hkKSk7Ci0KLSAgICBSRVQoZmZfdmtfY3JlYXRlX2J1Zigm cy0+dmtjdHgsIHBhcmFtc19idWYsIHNpemVvZihmbG9hdCkgKiBrc2l6ZSwgTlVMTCwgTlVMTCwK LSAgICAgICAgICAgICAgICAgICAgICAgICBWS19CVUZGRVJfVVNBR0VfU1RPUkFHRV9CVUZGRVJf QklULAotICAgICAgICAgICAgICAgICAgICAgICAgIFZLX01FTU9SWV9QUk9QRVJUWV9IT1NUX1ZJ U0lCTEVfQklUKSk7Ci0gICAgUkVUKGZmX3ZrX21hcF9idWZmZXIoJnMtPnZrY3R4LCBwYXJhbXNf YnVmLCAma2VybmVsX21hcHBlZCwgMCkpOwotCi0gICAgaW5pdF9nYXVzc2lhbl9rZXJuZWwoKGZs b2F0ICopa2VybmVsX21hcHBlZCwgc2lnbWEsIGtzaXplKTsKLQotICAgIFJFVChmZl92a191bm1h cF9idWZmZXIoJnMtPnZrY3R4LCBwYXJhbXNfYnVmLCAxKSk7Ci0gICAgUkVUKGZmX3ZrX3NoYWRl cl91cGRhdGVfZGVzY19idWZmZXIoJnMtPnZrY3R4LCAmcy0+ZS5jb250ZXh0c1swXSwgc2hkLCAx LCAwLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc19i dWYsIDAsIHBhcmFtc19idWYtPnNpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgVktfRk9STUFUX1VOREVGSU5FRCkpOwotCi1mYWlsOgotICAgIGlmIChzcHZfb3Bh cXVlKQotICAgICAgICBzcHYtPmZyZWVfc2hhZGVyKHNwdiwgJnNwdl9vcGFxdWUpOwotICAgIHJl dHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBhdl9jb2xkIGludCBpbml0X2ZpbHRlcihBVkZpbHRlckNv bnRleHQgKmN0eCwgQVZGcmFtZSAqaW4pCi17Ci0gICAgaW50IGVyciA9IDA7Ci0gICAgR0JsdXJW dWxrYW5Db250ZXh0ICpzID0gY3R4LT5wcml2OwotICAgIEZGVnVsa2FuQ29udGV4dCAqdmtjdHgg PSAmcy0+dmtjdHg7Ci0gICAgY29uc3QgaW50IHBsYW5lcyA9IGF2X3BpeF9mbXRfY291bnRfcGxh bmVzKHMtPnZrY3R4Lm91dHB1dF9mb3JtYXQpOwotCi0gICAgRkZWdWxrYW5TaGFkZXIgKnNoZDsK LSAgICBGRlZrU1BJUlZDb21waWxlciAqc3B2OwotICAgIEZGVnVsa2FuRGVzY3JpcHRvclNldEJp bmRpbmcgKmRlc2M7Ci0KLSAgICBzcHYgPSBmZl92a19zcGlydl9pbml0KCk7Ci0gICAgaWYgKCFz cHYpIHsKLSAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiVW5hYmxlIHRvIGluaXRp YWxpemUgU1BJUi1WIGNvbXBpbGVyIVxuIik7Ci0gICAgICAgIHJldHVybiBBVkVSUk9SX0VYVEVS TkFMOwotICAgIH0KLQotICAgIHMtPnFmID0gZmZfdmtfcWZfZmluZCh2a2N0eCwgVktfUVVFVUVf Q09NUFVURV9CSVQsIDApOwotICAgIGlmICghcy0+cWYpIHsKLSAgICAgICAgYXZfbG9nKGN0eCwg QVZfTE9HX0VSUk9SLCAiRGV2aWNlIGhhcyBubyBjb21wdXRlIHF1ZXVlc1xuIik7Ci0gICAgICAg IGVyciA9IEFWRVJST1IoRU5PVFNVUCk7Ci0gICAgICAgIGdvdG8gZmFpbDsKLSAgICB9Ci0KLSAg ICBSRVQoZmZfdmtfZXhlY19wb29sX2luaXQodmtjdHgsIHMtPnFmLCAmcy0+ZSwgcy0+cWYtPm51 bSo0LCAwLCAwLCAwLCBOVUxMKSk7Ci0KLSAgICBkZXNjID0gKEZGVnVsa2FuRGVzY3JpcHRvclNl dEJpbmRpbmcgW10pIHsKLSAgICAgICAgewotICAgICAgICAgICAgLm5hbWUgICAgICAgPSAiaW5w dXRfaW1hZ2VzIiwKLSAgICAgICAgICAgIC50eXBlICAgICAgID0gVktfREVTQ1JJUFRPUl9UWVBF X1NUT1JBR0VfSU1BR0UsCi0gICAgICAgICAgICAubWVtX2xheW91dCA9IGZmX3ZrX3NoYWRlcl9y ZXBfZm10KHMtPnZrY3R4LmlucHV0X2Zvcm1hdCwgRkZfVktfUkVQX0ZMT0FUKSwKLSAgICAgICAg ICAgIC5tZW1fcXVhbGkgID0gInJlYWRvbmx5IiwKLSAgICAgICAgICAgIC5kaW1lbnNpb25zID0g MiwKLSAgICAgICAgICAgIC5lbGVtcyAgICAgID0gcGxhbmVzLAotICAgICAgICAgICAgLnN0YWdl cyAgICAgPSBWS19TSEFERVJfU1RBR0VfQ09NUFVURV9CSVQsCi0gICAgICAgIH0sCi0gICAgICAg IHsKLSAgICAgICAgICAgIC5uYW1lICAgICAgID0gIm91dHB1dF9pbWFnZXMiLAotICAgICAgICAg ICAgLnR5cGUgICAgICAgPSBWS19ERVNDUklQVE9SX1RZUEVfU1RPUkFHRV9JTUFHRSwKLSAgICAg ICAgICAgIC5tZW1fbGF5b3V0ID0gZmZfdmtfc2hhZGVyX3JlcF9mbXQocy0+dmtjdHgub3V0cHV0 X2Zvcm1hdCwgRkZfVktfUkVQX0ZMT0FUKSwKLSAgICAgICAgICAgIC5tZW1fcXVhbGkgID0gIndy aXRlb25seSIsCi0gICAgICAgICAgICAuZGltZW5zaW9ucyA9IDIsCi0gICAgICAgICAgICAuZWxl bXMgICAgICA9IHBsYW5lcywKLSAgICAgICAgICAgIC5zdGFnZXMgICAgID0gVktfU0hBREVSX1NU QUdFX0NPTVBVVEVfQklULAotICAgICAgICB9LAotICAgIH07Ci0KLSAgICBpbml0X2dhdXNzaWFu X3BhcmFtcyhjdHgpOwotCi0gICAgewotICAgICAgICBzaGQgPSAmcy0+c2hkX2hvcjsKLSAgICAg ICAgUkVUKGZmX3ZrX3NoYWRlcl9pbml0KHZrY3R4LCBzaGQsICJnYmx1cl9ob3IiLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgVktfU0hBREVSX1NUQUdFX0NPTVBVVEVfQklULAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgMCwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDMyLCAxLCAxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkpOwot Ci0gICAgICAgIFJFVChmZl92a19zaGFkZXJfYWRkX2Rlc2NyaXB0b3Jfc2V0KHZrY3R4LCBzaGQs IGRlc2MsIDIsIDAsIDApKTsKLQotICAgICAgICBHTFNMQygwLCAjZGVmaW5lIE9GRlNFVCAoaXZl YzIoaSwgMC4wKSkpOwotICAgICAgICBSRVQoaW5pdF9nYmx1cl9waXBlbGluZShzLCBzaGQsICZz LT5wYXJhbXNfaG9yLCBzLT5zaXplLCBzLT5zaWdtYSwgc3B2KSk7Ci0gICAgfQotCi0gICAgewot ICAgICAgICBzaGQgPSAmcy0+c2hkX3ZlcjsKLSAgICAgICAgUkVUKGZmX3ZrX3NoYWRlcl9pbml0 KHZrY3R4LCBzaGQsICJnYmx1cl9ob3IiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg VktfU0hBREVSX1NUQUdFX0NPTVBVVEVfQklULAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgTlVMTCwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIDMyLCAxLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkpOwotCi0gICAgICAgIFJFVChmZl92a19zaGFk ZXJfYWRkX2Rlc2NyaXB0b3Jfc2V0KHZrY3R4LCBzaGQsIGRlc2MsIDIsIDAsIDApKTsKLQotICAg ICAgICBHTFNMQygwLCAjZGVmaW5lIE9GRlNFVCAoaXZlYzIoMC4wLCBpKSkpOwotICAgICAgICBS RVQoaW5pdF9nYmx1cl9waXBlbGluZShzLCBzaGQsICZzLT5wYXJhbXNfdmVyLCBzLT5zaXplViwg cy0+c2lnbWFWLCBzcHYpKTsKLSAgICB9Ci0KLSAgICBzLT5pbml0aWFsaXplZCA9IDE7Ci0KLWZh aWw6Ci0gICAgaWYgKHNwdikKLSAgICAgICAgc3B2LT51bmluaXQoJnNwdik7Ci0KLSAgICByZXR1 cm4gZXJyOwotfQotCi1zdGF0aWMgYXZfY29sZCB2b2lkIGdibHVyX3Z1bGthbl91bmluaXQoQVZG aWx0ZXJDb250ZXh0ICphdmN0eCkKLXsKLSAgICBHQmx1clZ1bGthbkNvbnRleHQgKnMgPSBhdmN0 eC0+cHJpdjsKLSAgICBGRlZ1bGthbkNvbnRleHQgKnZrY3R4ID0gJnMtPnZrY3R4OwotCi0gICAg ZmZfdmtfZXhlY19wb29sX2ZyZWUodmtjdHgsICZzLT5lKTsKLSAgICBmZl92a19zaGFkZXJfZnJl ZSh2a2N0eCwgJnMtPnNoZF9ob3IpOwotICAgIGZmX3ZrX3NoYWRlcl9mcmVlKHZrY3R4LCAmcy0+ c2hkX3Zlcik7Ci0gICAgZmZfdmtfZnJlZV9idWYodmtjdHgsICZzLT5wYXJhbXNfaG9yKTsKLSAg ICBmZl92a19mcmVlX2J1Zih2a2N0eCwgJnMtPnBhcmFtc192ZXIpOwotCi0gICAgZmZfdmtfdW5p bml0KCZzLT52a2N0eCk7Ci0KLSAgICBzLT5pbml0aWFsaXplZCA9IDA7Ci19Ci0KLXN0YXRpYyBp bnQgZ2JsdXJfdnVsa2FuX2ZpbHRlcl9mcmFtZShBVkZpbHRlckxpbmsgKmxpbmssIEFWRnJhbWUg KmluKQotewotICAgIGludCBlcnI7Ci0gICAgQVZGcmFtZSAqdG1wID0gTlVMTCwgKm91dCA9IE5V TEw7Ci0gICAgQVZGaWx0ZXJDb250ZXh0ICpjdHggPSBsaW5rLT5kc3Q7Ci0gICAgR0JsdXJWdWxr YW5Db250ZXh0ICpzID0gY3R4LT5wcml2OwotICAgIEFWRmlsdGVyTGluayAqb3V0bGluayA9IGN0 eC0+b3V0cHV0c1swXTsKLQotICAgIG91dCA9IGZmX2dldF92aWRlb19idWZmZXIob3V0bGluaywg b3V0bGluay0+dywgb3V0bGluay0+aCk7Ci0gICAgaWYgKCFvdXQpIHsKLSAgICAgICAgZXJyID0g QVZFUlJPUihFTk9NRU0pOwotICAgICAgICBnb3RvIGZhaWw7Ci0gICAgfQotCi0gICAgdG1wID0g ZmZfZ2V0X3ZpZGVvX2J1ZmZlcihvdXRsaW5rLCBvdXRsaW5rLT53LCBvdXRsaW5rLT5oKTsKLSAg ICBpZiAoIXRtcCkgewotICAgICAgICBlcnIgPSBBVkVSUk9SKEVOT01FTSk7Ci0gICAgICAgIGdv dG8gZmFpbDsKLSAgICB9Ci0KLSAgICBpZiAoIXMtPmluaXRpYWxpemVkKQotICAgICAgICBSRVQo aW5pdF9maWx0ZXIoY3R4LCBpbikpOwotCi0gICAgUkVUKGZmX3ZrX2ZpbHRlcl9wcm9jZXNzXzJw YXNzKCZzLT52a2N0eCwgJnMtPmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IChGRlZ1bGthblNoYWRlciAqWzJdKXsgJnMtPnNoZF9ob3IsICZzLT5zaGRfdmVyIH0sCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dCwgdG1wLCBpbiwgVktfTlVMTF9IQU5E TEUsIE5VTEwsIDApKTsKLQotICAgIGVyciA9IGF2X2ZyYW1lX2NvcHlfcHJvcHMob3V0LCBpbik7 Ci0gICAgaWYgKGVyciA8IDApCi0gICAgICAgIGdvdG8gZmFpbDsKLQotICAgIGF2X2ZyYW1lX2Zy ZWUoJmluKTsKLSAgICBhdl9mcmFtZV9mcmVlKCZ0bXApOwotCi0gICAgcmV0dXJuIGZmX2ZpbHRl cl9mcmFtZShvdXRsaW5rLCBvdXQpOwotCi1mYWlsOgotICAgIGF2X2ZyYW1lX2ZyZWUoJmluKTsK LSAgICBhdl9mcmFtZV9mcmVlKCZ0bXApOwotICAgIGF2X2ZyYW1lX2ZyZWUoJm91dCk7Ci0gICAg cmV0dXJuIGVycjsKLX0KLQotI2RlZmluZSBPRkZTRVQoeCkgb2Zmc2V0b2YoR0JsdXJWdWxrYW5D b250ZXh0LCB4KQotI2RlZmluZSBGTEFHUyAoQVZfT1BUX0ZMQUdfRklMVEVSSU5HX1BBUkFNIHwg QVZfT1BUX0ZMQUdfVklERU9fUEFSQU0pCi1zdGF0aWMgY29uc3QgQVZPcHRpb24gZ2JsdXJfdnVs a2FuX29wdGlvbnNbXSA9IHsKLSAgICB7ICJzaWdtYSIsICAiU2V0IHNpZ21hIiwgICAgICAgICAg ICAgICAgT0ZGU0VUKHNpZ21hKSwgIEFWX09QVF9UWVBFX0ZMT0FULCB7IC5kYmwgPSAwLjUgfSwg MC4wMSwgMTAyNC4wLCAgICAgICAgICAgICAgICBGTEFHUyB9LAotICAgIHsgInNpZ21hViIsICJT ZXQgdmVydGljYWwgc2lnbWEiLCAgICAgICBPRkZTRVQoc2lnbWFWKSwgQVZfT1BUX1RZUEVfRkxP QVQsIHsgLmRibCA9IDAgICB9LCAwLjAsICAxMDI0LjAsICAgICAgICAgICAgICAgIEZMQUdTIH0s Ci0gICAgeyAicGxhbmVzIiwgIlNldCBwbGFuZXMgdG8gZmlsdGVyIiwgICAgIE9GRlNFVChwbGFu ZXMpLCBBVl9PUFRfVFlQRV9JTlQsICAgeyAuaTY0ID0gMHhGIH0sIDAsICAgIDB4RiwgICAgICAg ICAgICAgICAgICAgRkxBR1MgfSwKLSAgICB7ICJzaXplIiwgICAiU2V0IGtlcm5lbCBzaXplIiwg ICAgICAgICAgT0ZGU0VUKHNpemUpLCAgIEFWX09QVF9UWVBFX0lOVCwgICB7IC5pNjQgPSAxOSAg fSwgMSwgICAgR0JMVVJfTUFYX0tFUk5FTF9TSVpFLCBGTEFHUyB9LAotICAgIHsgInNpemVWIiwg ICJTZXQgdmVydGljYWwga2VybmVsIHNpemUiLCBPRkZTRVQoc2l6ZVYpLCAgQVZfT1BUX1RZUEVf SU5ULCAgIHsgLmk2NCA9IDAgICB9LCAwLCAgICBHQkxVUl9NQVhfS0VSTkVMX1NJWkUsIEZMQUdT IH0sCi0gICAgeyBOVUxMIH0sCi19OwotCi1BVkZJTFRFUl9ERUZJTkVfQ0xBU1MoZ2JsdXJfdnVs a2FuKTsKLQotc3RhdGljIGNvbnN0IEFWRmlsdGVyUGFkIGdibHVyX3Z1bGthbl9pbnB1dHNbXSA9 IHsKLSAgICB7Ci0gICAgICAgIC5uYW1lICAgICAgICAgPSAiZGVmYXVsdCIsCi0gICAgICAgIC50 eXBlICAgICAgICAgPSBBVk1FRElBX1RZUEVfVklERU8sCi0gICAgICAgIC5maWx0ZXJfZnJhbWUg PSAmZ2JsdXJfdnVsa2FuX2ZpbHRlcl9mcmFtZSwKLSAgICAgICAgLmNvbmZpZ19wcm9wcyA9ICZm Zl92a19maWx0ZXJfY29uZmlnX2lucHV0LAotICAgIH0KLX07Ci0KLXN0YXRpYyBjb25zdCBBVkZp bHRlclBhZCBnYmx1cl92dWxrYW5fb3V0cHV0c1tdID0gewotICAgIHsKLSAgICAgICAgLm5hbWUg ICAgICAgICA9ICJkZWZhdWx0IiwKLSAgICAgICAgLnR5cGUgICAgICAgICA9IEFWTUVESUFfVFlQ RV9WSURFTywKLSAgICAgICAgLmNvbmZpZ19wcm9wcyA9ICZmZl92a19maWx0ZXJfY29uZmlnX291 dHB1dCwKLSAgICB9Ci19OwotCi1jb25zdCBGRkZpbHRlciBmZl92Zl9nYmx1cl92dWxrYW4gPSB7 Ci0gICAgLnAubmFtZSAgICAgICAgID0gImdibHVyX3Z1bGthbiIsCi0gICAgLnAuZGVzY3JpcHRp b24gID0gTlVMTF9JRl9DT05GSUdfU01BTEwoIkdhdXNzaWFuIEJsdXIgaW4gVnVsa2FuIiksCi0g ICAgLnAucHJpdl9jbGFzcyAgID0gJmdibHVyX3Z1bGthbl9jbGFzcywKLSAgICAucC5mbGFncyAg ICAgICAgPSBBVkZJTFRFUl9GTEFHX0hXREVWSUNFLAotICAgIC5wcml2X3NpemUgICAgICA9IHNp emVvZihHQmx1clZ1bGthbkNvbnRleHQpLAotICAgIC5pbml0ICAgICAgICAgICA9ICZmZl92a19m aWx0ZXJfaW5pdCwKLSAgICAudW5pbml0ICAgICAgICAgPSAmZ2JsdXJfdnVsa2FuX3VuaW5pdCwK LSAgICBGSUxURVJfSU5QVVRTKGdibHVyX3Z1bGthbl9pbnB1dHMpLAotICAgIEZJTFRFUl9PVVRQ VVRTKGdibHVyX3Z1bGthbl9vdXRwdXRzKSwKLSAgICBGSUxURVJfU0lOR0xFX1BJWEZNVChBVl9Q SVhfRk1UX1ZVTEtBTiksCi0gICAgLmZsYWdzX2ludGVybmFsID0gRkZfRklMVEVSX0ZMQUdfSFdG UkFNRV9BV0FSRSwKLX07Ci0tIAoyLjQ5LjEKCgpGcm9tIDlkMGFmODcwNTQxOGVmOGIyY2ZjY2U2 ZjIxMzQzOThkNGIwZDBmMTMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCkZyb206IEphbWFpa2Ex IDxsdWthc3pjejE4QHdwLnBsPgpEYXRlOiBXZWQsIDMgU2VwIDIwMjUgMTI6NTQ6MzUgKzAwMDAK U3ViamVjdDogW1BBVENIIDAxNC8xMThdIENoYW5naW5nIHZ1bGthbiBmaWxlIGRpcmVjdG9yeQoK LS0tCiBsaWJhdmZpbHRlci92dWxrYW4vdmZfZ2JsdXJfdnVsa2FuLmMgfCAzNzkgKysrKysrKysr KysrKysrKysrKysrKysrKysrCiAxIGZpbGUgY2hhbmdlZCwgMzc5IGluc2VydGlvbnMoKykKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBsaWJhdmZpbHRlci92dWxrYW4vdmZfZ2JsdXJfdnVsa2FuLmMKCmRp ZmYgLS1naXQgYS9saWJhdmZpbHRlci92dWxrYW4vdmZfZ2JsdXJfdnVsa2FuLmMgYi9saWJhdmZp bHRlci92dWxrYW4vdmZfZ2JsdXJfdnVsa2FuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMC4uMTY4ZWYwMWQ1NgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmF2ZmlsdGVyL3Z1 bGthbi92Zl9nYmx1cl92dWxrYW4uYwpAQCAtMCwwICsxLDM3OSBAQAorLyoKKyAqIGNvcHlyaWdo dCAoYykgMjAyMS0yMDIyIFd1IEppYW5odWEgPGppYW5odWEud3VAaW50ZWwuY29tPgorICogQ29w eXJpZ2h0IChjKSBMeW5uZQorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KKyAq CisgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIEZGbXBlZyBpcyBkaXN0cmli dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0 aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNz ZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwg d3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r bGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKyAqLwor CisjaW5jbHVkZSAibGliYXZ1dGlsL21lbS5oIgorI2luY2x1ZGUgImxpYmF2dXRpbC9yYW5kb21f c2VlZC5oIgorI2luY2x1ZGUgImxpYmF2dXRpbC9vcHQuaCIKKyNpbmNsdWRlICIuLi8uLi9saWJh dnV0aWwvdnVsa2FuL3Z1bGthbl9zcGlydi5oIgorI2luY2x1ZGUgInZ1bGthbl9maWx0ZXIuaCIK KworI2luY2x1ZGUgImxpYmF2ZmlsdGVyL2ZpbHRlcnMuaCIKKyNpbmNsdWRlICJsaWJhdmZpbHRl ci92aWRlby5oIgorCisjZGVmaW5lIENHUyAzMgorI2RlZmluZSBHQkxVUl9NQVhfS0VSTkVMX1NJ WkUgMTI3CisKK3R5cGVkZWYgc3RydWN0IEdCbHVyVnVsa2FuQ29udGV4dCB7CisgICAgRkZWdWxr YW5Db250ZXh0IHZrY3R4OworCisgICAgaW50IGluaXRpYWxpemVkOworICAgIEZGVmtFeGVjUG9v bCBlOworICAgIEFWVnVsa2FuRGV2aWNlUXVldWVGYW1pbHkgKnFmOworICAgIFZrU2FtcGxlciBz YW1wbGVyOworICAgIEZGVnVsa2FuU2hhZGVyIHNoZF9ob3I7CisgICAgRkZWa0J1ZmZlciBwYXJh bXNfaG9yOworICAgIEZGVnVsa2FuU2hhZGVyIHNoZF92ZXI7CisgICAgRkZWa0J1ZmZlciBwYXJh bXNfdmVyOworCisgICAgaW50IHNpemU7CisgICAgaW50IHNpemVWOworICAgIGludCBwbGFuZXM7 CisgICAgZmxvYXQgc2lnbWE7CisgICAgZmxvYXQgc2lnbWFWOworfSBHQmx1clZ1bGthbkNvbnRl eHQ7CisKK3N0YXRpYyBjb25zdCBjaGFyIGdibHVyX2Z1bmNbXSA9IHsKKyAgICBDKDAsIHZvaWQg Z2JsdXIoY29uc3QgaXZlYzIgcG9zLCBjb25zdCBpbnQgaW5kZXgpICAgICAgICAgICAgICAgICAg ICAgICAgICAgICApCisgICAgQygwLCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgIEMoMSwgICAgIHZl YzQgc3VtID0gaW1hZ2VMb2FkKGlucHV0X2ltYWdlc1tpbmRleF0sIHBvcykgKiBrZXJuZWxbMF07 ICAgICAgICAgICkKKyAgICBDKDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgQygxLCAgICAgZm9y KGludCBpID0gMTsgaSA8IGtlcm5lbC5sZW5ndGgoKTsgaSsrKSB7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgKQorICAgIEMoMiwgICAgICAgICBzdW0gKz0gaW1hZ2VMb2FkKGlucHV0X2ltYWdl c1tpbmRleF0sIHBvcyArIE9GRlNFVCkgKiBrZXJuZWxbaV07ICkKKyAgICBDKDIsICAgICAgICAg c3VtICs9IGltYWdlTG9hZChpbnB1dF9pbWFnZXNbaW5kZXhdLCBwb3MgLSBPRkZTRVQpICoga2Vy bmVsW2ldOyApCisgICAgQygxLCAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgIEMoMCwgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICkKKyAgICBDKDEsICAgICBpbWFnZVN0b3JlKG91dHB1dF9pbWFnZXNbaW5kZXhdLCBw b3MsIHN1bSk7ICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgQygwLCB9ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKQorfTsKKworc3RhdGljIGlubGluZSBmbG9hdCBnYXVzc2lhbihmbG9hdCBzaWdtYSwg ZmxvYXQgeCkKK3sKKyAgICByZXR1cm4gMS4wIC8gKHNxcnQoMi4wICogTV9QSSkgKiBzaWdtYSkg KgorICAgICAgICAgICBleHAoLSh4ICogeCkgLyAoMi4wICogc2lnbWEgKiBzaWdtYSkpOworfQor CitzdGF0aWMgaW5saW5lIGZsb2F0IGdhdXNzaWFuX3NpbXBzb25faW50ZWdyYXRpb24oZmxvYXQg c2lnbWEsIGZsb2F0IGEsIGZsb2F0IGIpCit7CisgICAgcmV0dXJuIChiIC0gYSkgKiAoMS4wIC8g Ni4wKSAqICgoZ2F1c3NpYW4oc2lnbWEsIGEpICsKKyAgICAgICAgICAgNC4wICogZ2F1c3NpYW4o c2lnbWEsIChhICsgYikgKiAwLjUpICsgZ2F1c3NpYW4oc2lnbWEsIGIpKSk7Cit9CisKK3N0YXRp YyB2b2lkIGluaXRfZ2F1c3NpYW5fa2VybmVsKGZsb2F0ICprZXJuZWwsIGZsb2F0IHNpZ21hLCBm bG9hdCBrZXJuZWxfc2l6ZSkKK3sKKyAgICBpbnQgeDsKKyAgICBmbG9hdCBzdW07CisKKyAgICBz dW0gPSAwOworICAgIGZvciAoeCA9IDA7IHggPCBrZXJuZWxfc2l6ZTsgeCsrKSB7CisgICAgICAg IGtlcm5lbFt4XSA9IGdhdXNzaWFuX3NpbXBzb25faW50ZWdyYXRpb24oc2lnbWEsIHggLSAwLjVm LCB4ICsgMC41Zik7CisgICAgICAgIGlmICgheCkKKyAgICAgICAgICAgIHN1bSArPSBrZXJuZWxb eF07CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHN1bSArPSBrZXJuZWxbeF0gKiAyLjA7Cisg ICAgfQorICAgIC8qIE5vcm1hbGl6ZWQgKi8KKyAgICBzdW0gPSAxLjAgLyBzdW07CisgICAgZm9y ICh4ID0gMDsgeCA8IGtlcm5lbF9zaXplOyB4KyspIHsKKyAgICAgICAga2VybmVsW3hdICo9IHN1 bTsKKyAgICB9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbml0X2tlcm5lbF9zaXplKHZvaWQg KmxvZ19jdHgsIGludCAqb3V0X3NpemUpCit7CisgICAgaW50IHNpemUgPSAqb3V0X3NpemU7CisK KyAgICBpZiAoIShzaXplICYgMSkpIHsKKyAgICAgICAgYXZfbG9nKGxvZ19jdHgsIEFWX0xPR19X QVJOSU5HLCAiVGhlIGtlcm5lbCBzaXplIHNob3VsZCBiZSBvZGRcbiIpOworICAgICAgICBzaXpl Kys7CisgICAgfQorCisgICAgKm91dF9zaXplID0gKHNpemUgPj4gMSkgKyAxOworfQorCitzdGF0 aWMgYXZfY29sZCB2b2lkIGluaXRfZ2F1c3NpYW5fcGFyYW1zKEFWRmlsdGVyQ29udGV4dCAqY3R4 KQoreworICAgIEdCbHVyVnVsa2FuQ29udGV4dCAqcyA9IGN0eC0+cHJpdjsKKyAgICBpZiAocy0+ c2lnbWFWIDw9IDApCisgICAgICAgIHMtPnNpZ21hViA9IHMtPnNpZ21hOworCisgICAgaW5pdF9r ZXJuZWxfc2l6ZShjdHgsICZzLT5zaXplKTsKKworICAgIGlmIChzLT5zaXplViA8PSAwKQorICAg ICAgICBzLT5zaXplViA9IHMtPnNpemU7CisgICAgZWxzZQorICAgICAgICBpbml0X2tlcm5lbF9z aXplKGN0eCwgJnMtPnNpemVWKTsKK30KKworc3RhdGljIGludCBpbml0X2dibHVyX3BpcGVsaW5l KEdCbHVyVnVsa2FuQ29udGV4dCAqcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBG RlZ1bGthblNoYWRlciAqc2hkLCBGRlZrQnVmZmVyICpwYXJhbXNfYnVmLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGludCBrc2l6ZSwgZmxvYXQgc2lnbWEsIEZGVmtTUElSVkNvbXBp bGVyICpzcHYpCit7CisgICAgaW50IGVyciA9IDA7CisgICAgdWludDhfdCAqa2VybmVsX21hcHBl ZDsKKyAgICB1aW50OF90ICpzcHZfZGF0YTsKKyAgICBzaXplX3Qgc3B2X2xlbjsKKyAgICB2b2lk ICpzcHZfb3BhcXVlID0gTlVMTDsKKworICAgIGNvbnN0IGludCBwbGFuZXMgPSBhdl9waXhfZm10 X2NvdW50X3BsYW5lcyhzLT52a2N0eC5vdXRwdXRfZm9ybWF0KTsKKworICAgIEZGVnVsa2FuRGVz Y3JpcHRvclNldEJpbmRpbmcgYnVmX2Rlc2MgPSB7CisgICAgICAgIC5uYW1lICAgICAgICA9ICJk YXRhIiwKKyAgICAgICAgLnR5cGUgICAgICAgID0gVktfREVTQ1JJUFRPUl9UWVBFX1NUT1JBR0Vf QlVGRkVSLAorICAgICAgICAubWVtX3F1YWxpICAgPSAicmVhZG9ubHkiLAorICAgICAgICAubWVt X2xheW91dCAgPSAic3RkNDMwIiwKKyAgICAgICAgLnN0YWdlcyAgICAgID0gVktfU0hBREVSX1NU QUdFX0NPTVBVVEVfQklULAorICAgICAgICAuYnVmX2NvbnRlbnQgPSAiZmxvYXQga2VybmVsIiwK KyAgICAgICAgLmJ1Zl9lbGVtcyAgID0ga3NpemUsCisgICAgfTsKKworICAgIFJFVChmZl92a19z aGFkZXJfYWRkX2Rlc2NyaXB0b3Jfc2V0KCZzLT52a2N0eCwgc2hkLCAmYnVmX2Rlc2MsIDEsIDEs IDApKTsKKworICAgIEdMU0xEKCAgIGdibHVyX2Z1bmMgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgR0xTTEMoMCwgdm9pZCBtYWluKCkgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBHTFNMQygwLCB7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAp OworICAgIEdMU0xDKDEsICAgICBpdmVjMiBzaXplOyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICk7CisgICAgR0xTTEMoMSwgICAgIGNvbnN0IGl2ZWMyIHBvcyA9IGl2 ZWMyKGdsX0dsb2JhbEludm9jYXRpb25JRC54eSk7ICAgKTsKKyAgICBmb3IgKGludCBpID0gMDsg aSA8IHBsYW5lczsgaSsrKSB7CisgICAgICAgIEdMU0xDKDAsICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgR0xTTEYoMSwgIHNp emUgPSBpbWFnZVNpemUob3V0cHV0X2ltYWdlc1slaV0pOyAgICAgICAgICAgICAgLGkpOworICAg ICAgICBHTFNMQygxLCAgaWYgKCFJU19XSVRISU4ocG9zLCBzaXplKSkgICAgICAgICAgICAgICAg ICAgICAgICAgICk7CisgICAgICAgIEdMU0xDKDIsICAgICAgcmV0dXJuOyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgaWYgKHMtPnBsYW5lcyAmICgx IDw8IGkpKSB7CisgICAgICAgICAgICBHTFNMRigxLCAgICAgIGdibHVyKHBvcywgJWkpOyAgICAg ICAgICAgICAgICAgICAgICAgICAgICxpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg IEdMU0xGKDEsIHZlYzQgcmVzID0gaW1hZ2VMb2FkKGlucHV0X2ltYWdlc1slaV0sIHBvcyk7ICAg LGkpOworICAgICAgICAgICAgR0xTTEYoMSwgaW1hZ2VTdG9yZShvdXRwdXRfaW1hZ2VzWyVpXSwg cG9zLCByZXMpOyAgICAgICAsaSk7CisgICAgICAgIH0KKyAgICB9CisgICAgR0xTTEMoMCwgfSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsK KworICAgIFJFVChzcHYtPmNvbXBpbGVfc2hhZGVyKCZzLT52a2N0eCwgc3B2LCBzaGQsICZzcHZf ZGF0YSwgJnNwdl9sZW4sICJtYWluIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3B2 X29wYXF1ZSkpOworICAgIFJFVChmZl92a19zaGFkZXJfbGluaygmcy0+dmtjdHgsIHNoZCwgc3B2 X2RhdGEsIHNwdl9sZW4sICJtYWluIikpOworCisgICAgUkVUKGZmX3ZrX3NoYWRlcl9yZWdpc3Rl cl9leGVjKCZzLT52a2N0eCwgJnMtPmUsIHNoZCkpOworCisgICAgUkVUKGZmX3ZrX2NyZWF0ZV9i dWYoJnMtPnZrY3R4LCBwYXJhbXNfYnVmLCBzaXplb2YoZmxvYXQpICoga3NpemUsIE5VTEwsIE5V TEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgVktfQlVGRkVSX1VTQUdFX1NUT1JBR0VfQlVG RkVSX0JJVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBWS19NRU1PUllfUFJPUEVSVFlfSE9T VF9WSVNJQkxFX0JJVCkpOworICAgIFJFVChmZl92a19tYXBfYnVmZmVyKCZzLT52a2N0eCwgcGFy YW1zX2J1ZiwgJmtlcm5lbF9tYXBwZWQsIDApKTsKKworICAgIGluaXRfZ2F1c3NpYW5fa2VybmVs KChmbG9hdCAqKWtlcm5lbF9tYXBwZWQsIHNpZ21hLCBrc2l6ZSk7CisKKyAgICBSRVQoZmZfdmtf dW5tYXBfYnVmZmVyKCZzLT52a2N0eCwgcGFyYW1zX2J1ZiwgMSkpOworICAgIFJFVChmZl92a19z aGFkZXJfdXBkYXRlX2Rlc2NfYnVmZmVyKCZzLT52a2N0eCwgJnMtPmUuY29udGV4dHNbMF0sIHNo ZCwgMSwgMCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJh bXNfYnVmLCAwLCBwYXJhbXNfYnVmLT5zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFZLX0ZPUk1BVF9VTkRFRklORUQpKTsKKworZmFpbDoKKyAgICBpZiAoc3B2 X29wYXF1ZSkKKyAgICAgICAgc3B2LT5mcmVlX3NoYWRlcihzcHYsICZzcHZfb3BhcXVlKTsKKyAg ICByZXR1cm4gZXJyOworfQorCitzdGF0aWMgYXZfY29sZCBpbnQgaW5pdF9maWx0ZXIoQVZGaWx0 ZXJDb250ZXh0ICpjdHgsIEFWRnJhbWUgKmluKQoreworICAgIGludCBlcnIgPSAwOworICAgIEdC bHVyVnVsa2FuQ29udGV4dCAqcyA9IGN0eC0+cHJpdjsKKyAgICBGRlZ1bGthbkNvbnRleHQgKnZr Y3R4ID0gJnMtPnZrY3R4OworICAgIGNvbnN0IGludCBwbGFuZXMgPSBhdl9waXhfZm10X2NvdW50 X3BsYW5lcyhzLT52a2N0eC5vdXRwdXRfZm9ybWF0KTsKKworICAgIEZGVnVsa2FuU2hhZGVyICpz aGQ7CisgICAgRkZWa1NQSVJWQ29tcGlsZXIgKnNwdjsKKyAgICBGRlZ1bGthbkRlc2NyaXB0b3JT ZXRCaW5kaW5nICpkZXNjOworCisgICAgc3B2ID0gZmZfdmtfc3BpcnZfaW5pdCgpOworICAgIGlm ICghc3B2KSB7CisgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIlVuYWJsZSB0byBp bml0aWFsaXplIFNQSVItViBjb21waWxlciFcbiIpOworICAgICAgICByZXR1cm4gQVZFUlJPUl9F WFRFUk5BTDsKKyAgICB9CisKKyAgICBzLT5xZiA9IGZmX3ZrX3FmX2ZpbmQodmtjdHgsIFZLX1FV RVVFX0NPTVBVVEVfQklULCAwKTsKKyAgICBpZiAoIXMtPnFmKSB7CisgICAgICAgIGF2X2xvZyhj dHgsIEFWX0xPR19FUlJPUiwgIkRldmljZSBoYXMgbm8gY29tcHV0ZSBxdWV1ZXNcbiIpOworICAg ICAgICBlcnIgPSBBVkVSUk9SKEVOT1RTVVApOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQor CisgICAgUkVUKGZmX3ZrX2V4ZWNfcG9vbF9pbml0KHZrY3R4LCBzLT5xZiwgJnMtPmUsIHMtPnFm LT5udW0qNCwgMCwgMCwgMCwgTlVMTCkpOworCisgICAgZGVzYyA9IChGRlZ1bGthbkRlc2NyaXB0 b3JTZXRCaW5kaW5nIFtdKSB7CisgICAgICAgIHsKKyAgICAgICAgICAgIC5uYW1lICAgICAgID0g ImlucHV0X2ltYWdlcyIsCisgICAgICAgICAgICAudHlwZSAgICAgICA9IFZLX0RFU0NSSVBUT1Jf VFlQRV9TVE9SQUdFX0lNQUdFLAorICAgICAgICAgICAgLm1lbV9sYXlvdXQgPSBmZl92a19zaGFk ZXJfcmVwX2ZtdChzLT52a2N0eC5pbnB1dF9mb3JtYXQsIEZGX1ZLX1JFUF9GTE9BVCksCisgICAg ICAgICAgICAubWVtX3F1YWxpICA9ICJyZWFkb25seSIsCisgICAgICAgICAgICAuZGltZW5zaW9u cyA9IDIsCisgICAgICAgICAgICAuZWxlbXMgICAgICA9IHBsYW5lcywKKyAgICAgICAgICAgIC5z dGFnZXMgICAgID0gVktfU0hBREVSX1NUQUdFX0NPTVBVVEVfQklULAorICAgICAgICB9LAorICAg ICAgICB7CisgICAgICAgICAgICAubmFtZSAgICAgICA9ICJvdXRwdXRfaW1hZ2VzIiwKKyAgICAg ICAgICAgIC50eXBlICAgICAgID0gVktfREVTQ1JJUFRPUl9UWVBFX1NUT1JBR0VfSU1BR0UsCisg ICAgICAgICAgICAubWVtX2xheW91dCA9IGZmX3ZrX3NoYWRlcl9yZXBfZm10KHMtPnZrY3R4Lm91 dHB1dF9mb3JtYXQsIEZGX1ZLX1JFUF9GTE9BVCksCisgICAgICAgICAgICAubWVtX3F1YWxpICA9 ICJ3cml0ZW9ubHkiLAorICAgICAgICAgICAgLmRpbWVuc2lvbnMgPSAyLAorICAgICAgICAgICAg LmVsZW1zICAgICAgPSBwbGFuZXMsCisgICAgICAgICAgICAuc3RhZ2VzICAgICA9IFZLX1NIQURF Ul9TVEFHRV9DT01QVVRFX0JJVCwKKyAgICAgICAgfSwKKyAgICB9OworCisgICAgaW5pdF9nYXVz c2lhbl9wYXJhbXMoY3R4KTsKKworICAgIHsKKyAgICAgICAgc2hkID0gJnMtPnNoZF9ob3I7Cisg ICAgICAgIFJFVChmZl92a19zaGFkZXJfaW5pdCh2a2N0eCwgc2hkLCAiZ2JsdXJfaG9yIiwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZLX1NIQURFUl9TVEFHRV9DT01QVVRFX0JJVCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDAsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAzMiwgMSwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAp KTsKKworICAgICAgICBSRVQoZmZfdmtfc2hhZGVyX2FkZF9kZXNjcmlwdG9yX3NldCh2a2N0eCwg c2hkLCBkZXNjLCAyLCAwLCAwKSk7CisKKyAgICAgICAgR0xTTEMoMCwgI2RlZmluZSBPRkZTRVQg KGl2ZWMyKGksIDAuMCkpKTsKKyAgICAgICAgUkVUKGluaXRfZ2JsdXJfcGlwZWxpbmUocywgc2hk LCAmcy0+cGFyYW1zX2hvciwgcy0+c2l6ZSwgcy0+c2lnbWEsIHNwdikpOworICAgIH0KKworICAg IHsKKyAgICAgICAgc2hkID0gJnMtPnNoZF92ZXI7CisgICAgICAgIFJFVChmZl92a19zaGFkZXJf aW5pdCh2a2N0eCwgc2hkLCAiZ2JsdXJfaG9yIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFZLX1NIQURFUl9TVEFHRV9DT01QVVRFX0JJVCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIE5VTEwsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCAzMiwgMSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApKTsKKworICAgICAgICBSRVQoZmZfdmtf c2hhZGVyX2FkZF9kZXNjcmlwdG9yX3NldCh2a2N0eCwgc2hkLCBkZXNjLCAyLCAwLCAwKSk7CisK KyAgICAgICAgR0xTTEMoMCwgI2RlZmluZSBPRkZTRVQgKGl2ZWMyKDAuMCwgaSkpKTsKKyAgICAg ICAgUkVUKGluaXRfZ2JsdXJfcGlwZWxpbmUocywgc2hkLCAmcy0+cGFyYW1zX3Zlciwgcy0+c2l6 ZVYsIHMtPnNpZ21hViwgc3B2KSk7CisgICAgfQorCisgICAgcy0+aW5pdGlhbGl6ZWQgPSAxOwor CitmYWlsOgorICAgIGlmIChzcHYpCisgICAgICAgIHNwdi0+dW5pbml0KCZzcHYpOworCisgICAg cmV0dXJuIGVycjsKK30KKworc3RhdGljIGF2X2NvbGQgdm9pZCBnYmx1cl92dWxrYW5fdW5pbml0 KEFWRmlsdGVyQ29udGV4dCAqYXZjdHgpCit7CisgICAgR0JsdXJWdWxrYW5Db250ZXh0ICpzID0g YXZjdHgtPnByaXY7CisgICAgRkZWdWxrYW5Db250ZXh0ICp2a2N0eCA9ICZzLT52a2N0eDsKKwor ICAgIGZmX3ZrX2V4ZWNfcG9vbF9mcmVlKHZrY3R4LCAmcy0+ZSk7CisgICAgZmZfdmtfc2hhZGVy X2ZyZWUodmtjdHgsICZzLT5zaGRfaG9yKTsKKyAgICBmZl92a19zaGFkZXJfZnJlZSh2a2N0eCwg JnMtPnNoZF92ZXIpOworICAgIGZmX3ZrX2ZyZWVfYnVmKHZrY3R4LCAmcy0+cGFyYW1zX2hvcik7 CisgICAgZmZfdmtfZnJlZV9idWYodmtjdHgsICZzLT5wYXJhbXNfdmVyKTsKKworICAgIGZmX3Zr X3VuaW5pdCgmcy0+dmtjdHgpOworCisgICAgcy0+aW5pdGlhbGl6ZWQgPSAwOworfQorCitzdGF0 aWMgaW50IGdibHVyX3Z1bGthbl9maWx0ZXJfZnJhbWUoQVZGaWx0ZXJMaW5rICpsaW5rLCBBVkZy YW1lICppbikKK3sKKyAgICBpbnQgZXJyOworICAgIEFWRnJhbWUgKnRtcCA9IE5VTEwsICpvdXQg PSBOVUxMOworICAgIEFWRmlsdGVyQ29udGV4dCAqY3R4ID0gbGluay0+ZHN0OworICAgIEdCbHVy VnVsa2FuQ29udGV4dCAqcyA9IGN0eC0+cHJpdjsKKyAgICBBVkZpbHRlckxpbmsgKm91dGxpbmsg PSBjdHgtPm91dHB1dHNbMF07CisKKyAgICBvdXQgPSBmZl9nZXRfdmlkZW9fYnVmZmVyKG91dGxp bmssIG91dGxpbmstPncsIG91dGxpbmstPmgpOworICAgIGlmICghb3V0KSB7CisgICAgICAgIGVy ciA9IEFWRVJST1IoRU5PTUVNKTsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIHRt cCA9IGZmX2dldF92aWRlb19idWZmZXIob3V0bGluaywgb3V0bGluay0+dywgb3V0bGluay0+aCk7 CisgICAgaWYgKCF0bXApIHsKKyAgICAgICAgZXJyID0gQVZFUlJPUihFTk9NRU0pOworICAgICAg ICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgaWYgKCFzLT5pbml0aWFsaXplZCkKKyAgICAgICAg UkVUKGluaXRfZmlsdGVyKGN0eCwgaW4pKTsKKworICAgIFJFVChmZl92a19maWx0ZXJfcHJvY2Vz c18ycGFzcygmcy0+dmtjdHgsICZzLT5lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAoRkZWdWxrYW5TaGFkZXIgKlsyXSl7ICZzLT5zaGRfaG9yLCAmcy0+c2hkX3ZlciB9LAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQsIHRtcCwgaW4sIFZLX05VTExf SEFORExFLCBOVUxMLCAwKSk7CisKKyAgICBlcnIgPSBhdl9mcmFtZV9jb3B5X3Byb3BzKG91dCwg aW4pOworICAgIGlmIChlcnIgPCAwKQorICAgICAgICBnb3RvIGZhaWw7CisKKyAgICBhdl9mcmFt ZV9mcmVlKCZpbik7CisgICAgYXZfZnJhbWVfZnJlZSgmdG1wKTsKKworICAgIHJldHVybiBmZl9m aWx0ZXJfZnJhbWUob3V0bGluaywgb3V0KTsKKworZmFpbDoKKyAgICBhdl9mcmFtZV9mcmVlKCZp bik7CisgICAgYXZfZnJhbWVfZnJlZSgmdG1wKTsKKyAgICBhdl9mcmFtZV9mcmVlKCZvdXQpOwor ICAgIHJldHVybiBlcnI7Cit9CisKKyNkZWZpbmUgT0ZGU0VUKHgpIG9mZnNldG9mKEdCbHVyVnVs a2FuQ29udGV4dCwgeCkKKyNkZWZpbmUgRkxBR1MgKEFWX09QVF9GTEFHX0ZJTFRFUklOR19QQVJB TSB8IEFWX09QVF9GTEFHX1ZJREVPX1BBUkFNKQorc3RhdGljIGNvbnN0IEFWT3B0aW9uIGdibHVy X3Z1bGthbl9vcHRpb25zW10gPSB7CisgICAgeyAic2lnbWEiLCAgIlNldCBzaWdtYSIsICAgICAg ICAgICAgICAgIE9GRlNFVChzaWdtYSksICBBVl9PUFRfVFlQRV9GTE9BVCwgeyAuZGJsID0gMC41 IH0sIDAuMDEsIDEwMjQuMCwgICAgICAgICAgICAgICAgRkxBR1MgfSwKKyAgICB7ICJzaWdtYVYi LCAiU2V0IHZlcnRpY2FsIHNpZ21hIiwgICAgICAgT0ZGU0VUKHNpZ21hViksIEFWX09QVF9UWVBF X0ZMT0FULCB7IC5kYmwgPSAwICAgfSwgMC4wLCAgMTAyNC4wLCAgICAgICAgICAgICAgICBGTEFH UyB9LAorICAgIHsgInBsYW5lcyIsICJTZXQgcGxhbmVzIHRvIGZpbHRlciIsICAgICBPRkZTRVQo cGxhbmVzKSwgQVZfT1BUX1RZUEVfSU5ULCAgIHsgLmk2NCA9IDB4RiB9LCAwLCAgICAweEYsICAg ICAgICAgICAgICAgICAgIEZMQUdTIH0sCisgICAgeyAic2l6ZSIsICAgIlNldCBrZXJuZWwgc2l6 ZSIsICAgICAgICAgIE9GRlNFVChzaXplKSwgICBBVl9PUFRfVFlQRV9JTlQsICAgeyAuaTY0ID0g MTkgIH0sIDEsICAgIEdCTFVSX01BWF9LRVJORUxfU0laRSwgRkxBR1MgfSwKKyAgICB7ICJzaXpl ViIsICAiU2V0IHZlcnRpY2FsIGtlcm5lbCBzaXplIiwgT0ZGU0VUKHNpemVWKSwgIEFWX09QVF9U WVBFX0lOVCwgICB7IC5pNjQgPSAwICAgfSwgMCwgICAgR0JMVVJfTUFYX0tFUk5FTF9TSVpFLCBG TEFHUyB9LAorICAgIHsgTlVMTCB9LAorfTsKKworQVZGSUxURVJfREVGSU5FX0NMQVNTKGdibHVy X3Z1bGthbik7CisKK3N0YXRpYyBjb25zdCBBVkZpbHRlclBhZCBnYmx1cl92dWxrYW5faW5wdXRz W10gPSB7CisgICAgeworICAgICAgICAubmFtZSAgICAgICAgID0gImRlZmF1bHQiLAorICAgICAg ICAudHlwZSAgICAgICAgID0gQVZNRURJQV9UWVBFX1ZJREVPLAorICAgICAgICAuZmlsdGVyX2Zy YW1lID0gJmdibHVyX3Z1bGthbl9maWx0ZXJfZnJhbWUsCisgICAgICAgIC5jb25maWdfcHJvcHMg PSAmZmZfdmtfZmlsdGVyX2NvbmZpZ19pbnB1dCwKKyAgICB9Cit9OworCitzdGF0aWMgY29uc3Qg QVZGaWx0ZXJQYWQgZ2JsdXJfdnVsa2FuX291dHB1dHNbXSA9IHsKKyAgICB7CisgICAgICAgIC5u YW1lICAgICAgICAgPSAiZGVmYXVsdCIsCisgICAgICAgIC50eXBlICAgICAgICAgPSBBVk1FRElB X1RZUEVfVklERU8sCisgICAgICAgIC5jb25maWdfcHJvcHMgPSAmZmZfdmtfZmlsdGVyX2NvbmZp Z19vdXRwdXQsCisgICAgfQorfTsKKworY29uc3QgRkZGaWx0ZXIgZmZfdmZfZ2JsdXJfdnVsa2Fu ID0geworICAgIC5wLm5hbWUgICAgICAgICA9ICJnYmx1cl92dWxrYW4iLAorICAgIC5wLmRlc2Ny aXB0aW9uICA9IE5VTExfSUZfQ09ORklHX1NNQUxMKCJHYXVzc2lhbiBCbHVyIGluIFZ1bGthbiIp LAorICAgIC5wLnByaXZfY2xhc3MgICA9ICZnYmx1cl92dWxrYW5fY2xhc3MsCisgICAgLnAuZmxh Z3MgICAgICAgID0gQVZGSUxURVJfRkxBR19IV0RFVklDRSwKKyAgICAucHJpdl9zaXplICAgICAg PSBzaXplb2YoR0JsdXJWdWxrYW5Db250ZXh0KSwKKyAgICAuaW5pdCAgICAgICAgICAgPSAmZmZf dmtfZmlsdGVyX2luaXQsCisgICAgLnVuaW5pdCAgICAgICAgID0gJmdibHVyX3Z1bGthbl91bmlu aXQsCisgICAgRklMVEVSX0lOUFVUUyhnYmx1cl92dWxrYW5faW5wdXRzKSwKKyAgICBGSUxURVJf T1VUUFVUUyhnYmx1cl92dWxrYW5fb3V0cHV0cyksCisgICAgRklMVEVSX1NJTkdMRV9QSVhGTVQo QVZfUElYX0ZNVF9WVUxLQU4pLAorICAgIC5mbGFnc19pbnRlcm5hbCA9IEZGX0ZJTFRFUl9GTEFH X0hXRlJBTUVfQVdBUkUsCit9OwotLSAKMi40OS4xCgoKRnJvbSBlMWU5Y2NlYzQ5MDNhNDg3Mzlj ZTA3NzBmM2ZlNWVkMjcxZWYwMmNkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBKYW1h aWthMSA8bHVrYXN6Y3oxOEB3cC5wbD4KRGF0ZTogV2VkLCAzIFNlcCAyMDI1IDEyOjU0OjU5ICsw MDAwClN1YmplY3Q6IFtQQVRDSCAwMTUvMTE4XSBDaGFuZ2luZyB2dWxrYW4gZmlsZSBkaXJlY3Rv cnkKCi0tLQogbGliYXZmaWx0ZXIvdmZfaW50ZXJsYWNlX3Z1bGthbi5jIHwgMzIxIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDMyMSBkZWxldGlvbnMoLSkK IGRlbGV0ZSBtb2RlIDEwMDY0NCBsaWJhdmZpbHRlci92Zl9pbnRlcmxhY2VfdnVsa2FuLmMKCmRp ZmYgLS1naXQgYS9saWJhdmZpbHRlci92Zl9pbnRlcmxhY2VfdnVsa2FuLmMgYi9saWJhdmZpbHRl ci92Zl9pbnRlcmxhY2VfdnVsa2FuLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdh ZmIzMGMyZDcuLjAwMDAwMDAwMDAKLS0tIGEvbGliYXZmaWx0ZXIvdmZfaW50ZXJsYWNlX3Z1bGth bi5jCisrKyAvZGV2L251bGwKQEAgLTEsMzIxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAy NSAoYykgTmlrbGFzIEhhYXMKLSAqCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCi0g KgotICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu ZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l cmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0 IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBGRm1wZWcgaXMgZGlzdHJp YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VU IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBN RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg dGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls cy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVz c2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3Qs IHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCi0gKi8K LQotI2luY2x1ZGUgImxpYmF2dXRpbC92dWxrYW5fc3BpcnYuaCIKLSNpbmNsdWRlICJsaWJhdnV0 aWwvb3B0LmgiCi0jaW5jbHVkZSAidnVsa2FuX2ZpbHRlci5oIgotCi0jaW5jbHVkZSAidGludGVy bGFjZS5oIgotI2luY2x1ZGUgImZpbHRlcnMuaCIKLSNpbmNsdWRlICJ2aWRlby5oIgotCi10eXBl ZGVmIHN0cnVjdCBJbnRlcmxhY2VWdWxrYW5Db250ZXh0IHsKLSAgICBGRlZ1bGthbkNvbnRleHQg dmtjdHg7Ci0KLSAgICBpbnQgaW5pdGlhbGl6ZWQ7Ci0gICAgRkZWa0V4ZWNQb29sIGU7Ci0gICAg QVZWdWxrYW5EZXZpY2VRdWV1ZUZhbWlseSAqcWY7Ci0gICAgVmtTYW1wbGVyIHNhbXBsZXI7Ci0g ICAgRkZWdWxrYW5TaGFkZXIgc2hkOwotCi0gICAgaW50IG1vZGU7Ci0gICAgaW50IGxvd3Bhc3M7 Ci0KLSAgICBBVkZyYW1lICpjdXI7IC8qIGZpcnN0IGZyYW1lIGluIHBhaXIgKi8KLX0gSW50ZXJs YWNlVnVsa2FuQ29udGV4dDsKLQotc3RhdGljIGNvbnN0IGNoYXIgbG93cGFzc19vZmZbXSA9IHsK LSAgICBDKDAsIHZlYzQgZ2V0X2xpbmUoc2FtcGxlcjJEIHRleCwgY29uc3QgdmVjMiBwb3MpICAg ICAgICAgICAgICAgICAgICAgICAgICkKLSAgICBDKDAsIHsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKLSAgICBDKDEs ICAgICByZXR1cm4gdGV4dHVyZSh0ZXgsIHBvcyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICkKLSAgICBDKDAsIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKLX07Ci0KLXN0YXRpYyBjb25z dCBjaGFyIGxvd3Bhc3NfbGluW10gPSB7Ci0gICAgQygwLCB2ZWM0IGdldF9saW5lKHNhbXBsZXIy RCB0ZXgsIGNvbnN0IHZlYzIgcG9zKSAgICAgICAgICAgICAgICAgICAgICAgICApCi0gICAgQygw LCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICApCi0gICAgQygxLCAgICAgcmV0dXJuIDAuNTAgKiB0ZXh0dXJlKHRleCwg cG9zKSArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCi0gICAgQygxLCAgICAgICAg ICAgIDAuMjUgKiB0ZXh0dXJlKHRleCwgcG9zIC0gaXZlYzIoMCwgMSkpICsgICAgICAgICAgICAg ICAgICApCi0gICAgQygxLCAgICAgICAgICAgIDAuMjUgKiB0ZXh0dXJlKHRleCwgcG9zICsgaXZl YzIoMCwgMSkpOyAgICAgICAgICAgICAgICAgICApCi0gICAgQygwLCB9ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCi19 OwotCi1zdGF0aWMgY29uc3QgY2hhciBsb3dwYXNzX2NvbXBsZXhbXSA9IHsKLSAgICBDKDAsIHZl YzQgZ2V0X2xpbmUoc2FtcGxlcjJEIHRleCwgY29uc3QgdmVjMiBwb3MpICAgICAgICAgICAgICAg ICAgICAgICAgICkKLSAgICBDKDAsIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKLSAgICBDKDEsICAgICByZXR1cm4g IDAuNzUgICogdGV4dHVyZSh0ZXgsIHBvcykgKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICkKLSAgICBDKDEsICAgICAgICAgICAgIDAuMjUgICogdGV4dHVyZSh0ZXgsIHBvcyAtIGl2ZWMy KDAsIDEpKSArICAgICAgICAgICAgICAgICkKLSAgICBDKDEsICAgICAgICAgICAgIDAuMjUgICog dGV4dHVyZSh0ZXgsIHBvcyArIGl2ZWMyKDAsIDEpKSArICAgICAgICAgICAgICAgICkKLSAgICBD KDEsICAgICAgICAgICAgLTAuMTI1ICogdGV4dHVyZSh0ZXgsIHBvcyAtIGl2ZWMyKDAsIDIpKSAr ICAgICAgICAgICAgICAgICkKLSAgICBDKDEsICAgICAgICAgICAgLTAuMTI1ICogdGV4dHVyZSh0 ZXgsIHBvcyArIGl2ZWMyKDAsIDIpKTsgICAgICAgICAgICAgICAgICkKLSAgICBDKDAsIH0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICkKLX07Ci0KLXN0YXRpYyBhdl9jb2xkIGludCBpbml0X2ZpbHRlcihBVkZpbHRlckNv bnRleHQgKmN0eCkKLXsKLSAgICBpbnQgZXJyOwotICAgIHVpbnQ4X3QgKnNwdl9kYXRhOwotICAg IHNpemVfdCBzcHZfbGVuOwotICAgIHZvaWQgKnNwdl9vcGFxdWUgPSBOVUxMOwotICAgIEludGVy bGFjZVZ1bGthbkNvbnRleHQgKnMgPSBjdHgtPnByaXY7Ci0gICAgRkZWdWxrYW5Db250ZXh0ICp2 a2N0eCA9ICZzLT52a2N0eDsKLSAgICBjb25zdCBpbnQgcGxhbmVzID0gYXZfcGl4X2ZtdF9jb3Vu dF9wbGFuZXMocy0+dmtjdHgub3V0cHV0X2Zvcm1hdCk7Ci0gICAgRkZWdWxrYW5TaGFkZXIgKnNo ZDsKLSAgICBGRlZrU1BJUlZDb21waWxlciAqc3B2OwotICAgIEZGVnVsa2FuRGVzY3JpcHRvclNl dEJpbmRpbmcgKmRlc2M7Ci0KLSAgICBzcHYgPSBmZl92a19zcGlydl9pbml0KCk7Ci0gICAgaWYg KCFzcHYpIHsKLSAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiVW5hYmxlIHRvIGlu aXRpYWxpemUgU1BJUi1WIGNvbXBpbGVyIVxuIik7Ci0gICAgICAgIHJldHVybiBBVkVSUk9SX0VY VEVSTkFMOwotICAgIH0KLQotICAgIHMtPnFmID0gZmZfdmtfcWZfZmluZCh2a2N0eCwgVktfUVVF VUVfQ09NUFVURV9CSVQsIDApOwotICAgIGlmICghcy0+cWYpIHsKLSAgICAgICAgYXZfbG9nKGN0 eCwgQVZfTE9HX0VSUk9SLCAiRGV2aWNlIGhhcyBubyBjb21wdXRlIHF1ZXVlc1xuIik7Ci0gICAg ICAgIGVyciA9IEFWRVJST1IoRU5PVFNVUCk7Ci0gICAgICAgIGdvdG8gZmFpbDsKLSAgICB9Ci0K LSAgICBSRVQoZmZfdmtfZXhlY19wb29sX2luaXQodmtjdHgsIHMtPnFmLCAmcy0+ZSwgcy0+cWYt Pm51bSo0LCAwLCAwLCAwLCBOVUxMKSk7Ci0gICAgUkVUKGZmX3ZrX2luaXRfc2FtcGxlcih2a2N0 eCwgJnMtPnNhbXBsZXIsIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBzLT5sb3dwYXNz ID09IFZMUEZfT0ZGID8gVktfRklMVEVSX05FQVJFU1QKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBWS19GSUxURVJfTElORUFSKSk7Ci0gICAgUkVU KGZmX3ZrX3NoYWRlcl9pbml0KHZrY3R4LCAmcy0+c2hkLCAiaW50ZXJsYWNlIiwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgVktfU0hBREVSX1NUQUdFX0NPTVBVVEVfQklULAotICAgICAgICAg ICAgICAgICAgICAgICAgICBOVUxMLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAzMiwg MzIsIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDApKTsKLSAgICBzaGQgPSAmcy0+c2hk OwotCi0gICAgZGVzYyA9IChGRlZ1bGthbkRlc2NyaXB0b3JTZXRCaW5kaW5nIFtdKSB7Ci0gICAg ICAgIHsKLSAgICAgICAgICAgIC5uYW1lICAgICAgID0gInRvcF9maWVsZCIsCi0gICAgICAgICAg ICAudHlwZSAgICAgICA9IFZLX0RFU0NSSVBUT1JfVFlQRV9DT01CSU5FRF9JTUFHRV9TQU1QTEVS LAotICAgICAgICAgICAgLmRpbWVuc2lvbnMgPSAyLAotICAgICAgICAgICAgLmVsZW1zICAgICAg PSBwbGFuZXMsCi0gICAgICAgICAgICAuc3RhZ2VzICAgICA9IFZLX1NIQURFUl9TVEFHRV9DT01Q VVRFX0JJVCwKLSAgICAgICAgICAgIC5zYW1wbGVycyAgID0gRFVQX1NBTVBMRVIocy0+c2FtcGxl ciksCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgIC5uYW1lICAgICAgID0gImJv dF9maWVsZCIsCi0gICAgICAgICAgICAudHlwZSAgICAgICA9IFZLX0RFU0NSSVBUT1JfVFlQRV9D T01CSU5FRF9JTUFHRV9TQU1QTEVSLAotICAgICAgICAgICAgLmRpbWVuc2lvbnMgPSAyLAotICAg ICAgICAgICAgLmVsZW1zICAgICAgPSBwbGFuZXMsCi0gICAgICAgICAgICAuc3RhZ2VzICAgICA9 IFZLX1NIQURFUl9TVEFHRV9DT01QVVRFX0JJVCwKLSAgICAgICAgICAgIC5zYW1wbGVycyAgID0g RFVQX1NBTVBMRVIocy0+c2FtcGxlciksCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAg ICAgIC5uYW1lICAgICAgID0gIm91dHB1dF9pbWciLAotICAgICAgICAgICAgLnR5cGUgICAgICAg PSBWS19ERVNDUklQVE9SX1RZUEVfU1RPUkFHRV9JTUFHRSwKLSAgICAgICAgICAgIC5tZW1fbGF5 b3V0ID0gZmZfdmtfc2hhZGVyX3JlcF9mbXQocy0+dmtjdHgub3V0cHV0X2Zvcm1hdCwgRkZfVktf UkVQX0ZMT0FUKSwKLSAgICAgICAgICAgIC5tZW1fcXVhbGkgID0gIndyaXRlb25seSIsCi0gICAg ICAgICAgICAuZGltZW5zaW9ucyA9IDIsCi0gICAgICAgICAgICAuZWxlbXMgICAgICA9IHBsYW5l cywKLSAgICAgICAgICAgIC5zdGFnZXMgICAgID0gVktfU0hBREVSX1NUQUdFX0NPTVBVVEVfQklU LAotICAgICAgICB9LAotICAgIH07Ci0KLSAgICBSRVQoZmZfdmtfc2hhZGVyX2FkZF9kZXNjcmlw dG9yX3NldCh2a2N0eCwgc2hkLCBkZXNjLCAzLCAwLCAwKSk7Ci0KLSAgICBzd2l0Y2ggKHMtPmxv d3Bhc3MpIHsKLSAgICBjYXNlIFZMUEZfT0ZGOgotICAgICAgICBHTFNMRChsb3dwYXNzX29mZik7 Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgVkxQRl9MSU46Ci0gICAgICAgIEdMU0xEKGxvd3Bh c3NfbGluKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBWTFBGX0NNUDoKLSAgICAgICAgR0xT TEQobG93cGFzc19jb21wbGV4KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgR0xTTEMo MCwgdm9pZCBtYWluKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICk7Ci0gICAgR0xTTEMoMCwgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgR0xTTEMoMSwgICAgIHZlYzQgcmVz OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAg R0xTTEMoMSwgICAgIGl2ZWMyIHNpemU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICk7Ci0gICAgR0xTTEMoMSwgICAgIGNvbnN0IGl2ZWMyIHBvcyA9IGl2ZWMy KGdsX0dsb2JhbEludm9jYXRpb25JRC54eSk7ICAgICAgICk7Ci0gICAgR0xTTEMoMSwgICAgIGNv bnN0IHZlYzIgaXBvcyA9IHBvcyArIHZlYzIoMC41KTsgICAgICAgICAgICAgICAgICAgICAgICk7 Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwbGFuZXM7IGkrKykgewotICAgICAgICBHTFNMQygw LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICApOwotICAgICAgICBHTFNMRigxLCAgc2l6ZSA9IGltYWdlU2l6ZShvdXRwdXRfaW1nWyVpXSk7 ICAgICAgICAgICAgICAgICAgICAgLGkpOwotICAgICAgICBHTFNMQygxLCAgaWYgKCFJU19XSVRI SU4ocG9zLCBzaXplKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICBH TFNMQygyLCAgICAgIHJldHVybjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICApOwotICAgICAgICBHTFNMQygxLCAgaWYgKHBvcy55ICUlIDIgPT0gMCkgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICBHTFNMRigxLCAgICAgIHJl cyA9IGdldF9saW5lKHRvcF9maWVsZFslaV0sIGlwb3MpOyAgICAgICAgICAgICAgLGkpOwotICAg ICAgICBHTFNMQygxLCAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICApOwotICAgICAgICBHTFNMRigxLCAgICAgIHJlcyA9IGdldF9saW5lKGJv dF9maWVsZFslaV0sIGlwb3MpOyAgICAgICAgICAgICAgLGkpOwotICAgICAgICBHTFNMRigxLCAg aW1hZ2VTdG9yZShvdXRwdXRfaW1nWyVpXSwgcG9zLCByZXMpOyAgICAgICAgICAgICAgICAgLGkp OwotICAgIH0KLSAgICBHTFNMQygwLCB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLQotICAgIFJFVChzcHYtPmNvbXBpbGVfc2hh ZGVyKHZrY3R4LCBzcHYsICZzLT5zaGQsICZzcHZfZGF0YSwgJnNwdl9sZW4sICJtYWluIiwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAmc3B2X29wYXF1ZSkpOwotICAgIFJFVChmZl92a19z aGFkZXJfbGluayh2a2N0eCwgJnMtPnNoZCwgc3B2X2RhdGEsIHNwdl9sZW4sICJtYWluIikpOwot Ci0gICAgUkVUKGZmX3ZrX3NoYWRlcl9yZWdpc3Rlcl9leGVjKHZrY3R4LCAmcy0+ZSwgJnMtPnNo ZCkpOwotCi0gICAgcy0+aW5pdGlhbGl6ZWQgPSAxOwotCi1mYWlsOgotICAgIGlmIChzcHZfb3Bh cXVlKQotICAgICAgICBzcHYtPmZyZWVfc2hhZGVyKHNwdiwgJnNwdl9vcGFxdWUpOwotICAgIGlm IChzcHYpCi0gICAgICAgIHNwdi0+dW5pbml0KCZzcHYpOwotCi0gICAgcmV0dXJuIGVycjsKLX0K LQotc3RhdGljIGludCBpbnRlcmxhY2VfdnVsa2FuX2ZpbHRlcl9mcmFtZShBVkZpbHRlckxpbmsg KmxpbmssIEFWRnJhbWUgKmluKQotewotICAgIGludCBlcnI7Ci0gICAgQVZGcmFtZSAqb3V0ID0g TlVMTCwgKmlucHV0X3RvcCwgKmlucHV0X2JvdDsKLSAgICBBVkZpbHRlckNvbnRleHQgKmN0eCA9 IGxpbmstPmRzdDsKLSAgICBJbnRlcmxhY2VWdWxrYW5Db250ZXh0ICpzID0gY3R4LT5wcml2Owot ICAgIGNvbnN0IEFWRmlsdGVyTGluayAqaW5saW5rID0gY3R4LT5pbnB1dHNbMF07Ci0gICAgQVZG aWx0ZXJMaW5rICpvdXRsaW5rID0gY3R4LT5vdXRwdXRzWzBdOwotICAgIEZpbHRlckxpbmsgKmwg PSBmZl9maWx0ZXJfbGluayhvdXRsaW5rKTsKLQotICAgIGlmICghcy0+aW5pdGlhbGl6ZWQpCi0g ICAgICAgIFJFVChpbml0X2ZpbHRlcihjdHgpKTsKLQotICAgIC8qIE5lZWQgYm90aCBmcmFtZXMg dG8gZmlsdGVyICovCi0gICAgaWYgKCFzLT5jdXIpIHsKLSAgICAgICAgcy0+Y3VyID0gaW47Ci0g ICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIG91dCA9IGZmX2dldF92aWRlb19idWZmZXIo b3V0bGluaywgb3V0bGluay0+dywgb3V0bGluay0+aCk7Ci0gICAgaWYgKCFvdXQpIHsKLSAgICAg ICAgZXJyID0gQVZFUlJPUihFTk9NRU0pOwotICAgICAgICBnb3RvIGZhaWw7Ci0gICAgfQotCi0g ICAgaWYgKHMtPm1vZGUgPT0gTU9ERV9URkYpIHsKLSAgICAgICAgaW5wdXRfdG9wID0gcy0+Y3Vy OwotICAgICAgICBpbnB1dF9ib3QgPSBpbjsKLSAgICB9IGVsc2UgewotICAgICAgICBpbnB1dF90 b3AgPSBpbjsKLSAgICAgICAgaW5wdXRfYm90ID0gcy0+Y3VyOwotICAgIH0KLQotICAgIFJFVChm Zl92a19maWx0ZXJfcHJvY2Vzc19OaW4oJnMtPnZrY3R4LCAmcy0+ZSwgJnMtPnNoZCwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dCwgKEFWRnJhbWUgKltdKXsgaW5wdXRfdG9w LCBpbnB1dF9ib3QgfSwgMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMtPnNh bXBsZXIsIE5VTEwsIDApKTsKLQotICAgIGVyciA9IGF2X2ZyYW1lX2NvcHlfcHJvcHMob3V0LCBz LT5jdXIpOwotICAgIGlmIChlcnIgPCAwKQotICAgICAgICBnb3RvIGZhaWw7Ci0KLSAgICBvdXQt PmZsYWdzIHw9IEFWX0ZSQU1FX0ZMQUdfSU5URVJMQUNFRDsKLSAgICBpZiAocy0+bW9kZSA9PSBN T0RFX1RGRikKLSAgICAgICAgb3V0LT5mbGFncyB8PSBBVl9GUkFNRV9GTEFHX1RPUF9GSUVMRF9G SVJTVDsKLQotICAgIG91dC0+cHRzID0gYXZfcmVzY2FsZV9xKG91dC0+cHRzLCBpbmxpbmstPnRp bWVfYmFzZSwgb3V0bGluay0+dGltZV9iYXNlKTsKLSAgICBvdXQtPmR1cmF0aW9uID0gYXZfcmVz Y2FsZV9xKDEsIGF2X2ludl9xKGwtPmZyYW1lX3JhdGUpLCBvdXRsaW5rLT50aW1lX2Jhc2UpOwot Ci0gICAgYXZfZnJhbWVfZnJlZSgmcy0+Y3VyKTsKLSAgICBhdl9mcmFtZV9mcmVlKCZpbik7Ci0K LSAgICByZXR1cm4gZmZfZmlsdGVyX2ZyYW1lKG91dGxpbmssIG91dCk7Ci0KLWZhaWw6Ci0gICAg YXZfZnJhbWVfZnJlZSgmcy0+Y3VyKTsKLSAgICBhdl9mcmFtZV9mcmVlKCZpbik7Ci0gICAgYXZf ZnJhbWVfZnJlZSgmb3V0KTsKLSAgICByZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgdm9pZCBpbnRl cmxhY2VfdnVsa2FuX3VuaW5pdChBVkZpbHRlckNvbnRleHQgKmF2Y3R4KQotewotICAgIEludGVy bGFjZVZ1bGthbkNvbnRleHQgKnMgPSBhdmN0eC0+cHJpdjsKLSAgICBGRlZ1bGthbkNvbnRleHQg KnZrY3R4ID0gJnMtPnZrY3R4OwotICAgIEZGVnVsa2FuRnVuY3Rpb25zICp2ayA9ICZ2a2N0eC0+ dmtmbjsKLQotICAgIGF2X2ZyYW1lX2ZyZWUoJnMtPmN1cik7Ci0KLSAgICBmZl92a19leGVjX3Bv b2xfZnJlZSh2a2N0eCwgJnMtPmUpOwotICAgIGZmX3ZrX3NoYWRlcl9mcmVlKHZrY3R4LCAmcy0+ c2hkKTsKLQotICAgIGlmIChzLT5zYW1wbGVyKQotICAgICAgICB2ay0+RGVzdHJveVNhbXBsZXIo dmtjdHgtPmh3Y3R4LT5hY3RfZGV2LCBzLT5zYW1wbGVyLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgdmtjdHgtPmh3Y3R4LT5hbGxvYyk7Ci0KLSAgICBmZl92a191bmluaXQoJnMtPnZrY3R4 KTsKLQotICAgIHMtPmluaXRpYWxpemVkID0gMDsKLX0KLQotc3RhdGljIGludCBjb25maWdfb3V0 X3Byb3BzKEFWRmlsdGVyTGluayAqb3V0bGluaykKLXsKLSAgICBBVkZpbHRlckxpbmsgKmlubGlu ayA9IG91dGxpbmstPnNyYy0+aW5wdXRzWzBdOwotICAgIGNvbnN0IEZpbHRlckxpbmsgKmlsID0g ZmZfZmlsdGVyX2xpbmsoaW5saW5rKTsKLSAgICBGaWx0ZXJMaW5rICpvbCA9IGZmX2ZpbHRlcl9s aW5rKG91dGxpbmspOwotCi0gICAgb2wtPmZyYW1lX3JhdGUgPSBhdl9tdWxfcShpbC0+ZnJhbWVf cmF0ZSwgYXZfbWFrZV9xKDEsIDIpKTsKLSAgICBvdXRsaW5rLT50aW1lX2Jhc2UgPSBhdl9tdWxf cShpbmxpbmstPnRpbWVfYmFzZSwgYXZfbWFrZV9xKDIsIDEpKTsKLSAgICByZXR1cm4gZmZfdmtf ZmlsdGVyX2NvbmZpZ19vdXRwdXQob3V0bGluayk7Ci19Ci0KLSNkZWZpbmUgT0ZGU0VUKHgpIG9m ZnNldG9mKEludGVybGFjZVZ1bGthbkNvbnRleHQsIHgpCi0jZGVmaW5lIEZMQUdTIChBVl9PUFRf RkxBR19GSUxURVJJTkdfUEFSQU0gfCBBVl9PUFRfRkxBR19WSURFT19QQVJBTSkKLXN0YXRpYyBj b25zdCBBVk9wdGlvbiBpbnRlcmxhY2VfdnVsa2FuX29wdGlvbnNbXSA9IHsKLSAgICB7ICJzY2Fu IiwgICAgICAgICAgICAgICJzY2FubmluZyBtb2RlIiwgT0ZGU0VUKG1vZGUpLCBBVl9PUFRfVFlQ RV9JTlQsIHsuaTY0ID0gTU9ERV9URkZ9LCAwLCAxLCBGTEFHUywgLnVuaXQgPSAibW9kZSJ9LAot ICAgIHsgInRmZiIsICAgICAgICAgICAgICAgInRvcCBmaWVsZCBmaXJzdCIsICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsuaTY0ID0gTU9ERV9URkZ9 LCBJTlRfTUlOLCBJTlRfTUFYLCBGTEFHUywgLnVuaXQgPSAibW9kZSJ9LAotICAgIHsgImJmZiIs ICAgICAgICAgICAgICAgImJvdHRvbSBmaWVsZCBmaXJzdCIsICAgICAgICAgICAgICAgICAgICAg ICAgICAgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsuaTY0ID0gTU9ERV9CRkZ9LCBJTlRfTUlOLCBJ TlRfTUFYLCBGTEFHUywgLnVuaXQgPSAibW9kZSJ9LAotICAgIHsgImxvd3Bhc3MiLCAgICAgICAg ICAgInNldCB2ZXJ0aWNhbCBsb3ctcGFzcyBmaWx0ZXIiLCBPRkZTRVQobG93cGFzcyksIEFWX09Q VF9UWVBFX0lOVCwgICB7Lmk2NCA9IFZMUEZfTElOfSwgMCwgMiwgRkxBR1MsIC51bml0ID0gImxv d3Bhc3MiIH0sCi0gICAgeyAgICAgIm9mZiIsICAgICAgICAgICAiZGlzYWJsZSB2ZXJ0aWNhbCBs b3ctcGFzcyBmaWx0ZXIiLCAgICAgICAgICAgICAwLCBBVl9PUFRfVFlQRV9DT05TVCwgey5pNjQg PSBWTFBGX09GRn0sIElOVF9NSU4sIElOVF9NQVgsIEZMQUdTLCAudW5pdCA9ICJsb3dwYXNzIiB9 LAotICAgIHsgICAgICJsaW5lYXIiLCAgICAgICAgImxpbmVhciB2ZXJ0aWNhbCBsb3ctcGFzcyBm aWx0ZXIiLCAgICAgICAgICAgICAgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsuaTY0ID0gVkxQRl9M SU59LCBJTlRfTUlOLCBJTlRfTUFYLCBGTEFHUywgLnVuaXQgPSAibG93cGFzcyIgfSwKLSAgICB7 ICAgICAiY29tcGxleCIsICAgICAgICJjb21wbGV4IHZlcnRpY2FsIGxvdy1wYXNzIGZpbHRlciIs ICAgICAgICAgICAgIDAsIEFWX09QVF9UWVBFX0NPTlNULCB7Lmk2NCA9IFZMUEZfQ01QfSwgSU5U X01JTiwgSU5UX01BWCwgRkxBR1MsIC51bml0ID0gImxvd3Bhc3MiIH0sCi0gICAgeyBOVUxMIH0s Ci19OwotCi1BVkZJTFRFUl9ERUZJTkVfQ0xBU1MoaW50ZXJsYWNlX3Z1bGthbik7Ci0KLXN0YXRp YyBjb25zdCBBVkZpbHRlclBhZCBpbnRlcmxhY2VfdnVsa2FuX2lucHV0c1tdID0gewotICAgIHsK LSAgICAgICAgLm5hbWUgICAgICAgICA9ICJkZWZhdWx0IiwKLSAgICAgICAgLnR5cGUgICAgICAg ICA9IEFWTUVESUFfVFlQRV9WSURFTywKLSAgICAgICAgLmZpbHRlcl9mcmFtZSA9ICZpbnRlcmxh Y2VfdnVsa2FuX2ZpbHRlcl9mcmFtZSwKLSAgICAgICAgLmNvbmZpZ19wcm9wcyA9ICZmZl92a19m aWx0ZXJfY29uZmlnX2lucHV0LAotICAgIH0sCi19OwotCi1zdGF0aWMgY29uc3QgQVZGaWx0ZXJQ YWQgaW50ZXJsYWNlX3Z1bGthbl9vdXRwdXRzW10gPSB7Ci0gICAgewotICAgICAgICAubmFtZSA9 ICJkZWZhdWx0IiwKLSAgICAgICAgLnR5cGUgPSBBVk1FRElBX1RZUEVfVklERU8sCi0gICAgICAg IC5jb25maWdfcHJvcHMgPSAmY29uZmlnX291dF9wcm9wcywKLSAgICB9LAotfTsKLQotY29uc3Qg RkZGaWx0ZXIgZmZfdmZfaW50ZXJsYWNlX3Z1bGthbiA9IHsKLSAgICAucC5uYW1lICAgICAgICAg PSAiaW50ZXJsYWNlX3Z1bGthbiIsCi0gICAgLnAuZGVzY3JpcHRpb24gID0gTlVMTF9JRl9DT05G SUdfU01BTEwoIkNvbnZlcnQgcHJvZ3Jlc3NpdmUgdmlkZW8gaW50byBpbnRlcmxhY2VkLiIpLAot ICAgIC5wLnByaXZfY2xhc3MgICA9ICZpbnRlcmxhY2VfdnVsa2FuX2NsYXNzLAotICAgIC5wLmZs YWdzICAgICAgICA9IEFWRklMVEVSX0ZMQUdfSFdERVZJQ0UsCi0gICAgLnByaXZfc2l6ZSAgICAg ID0gc2l6ZW9mKEludGVybGFjZVZ1bGthbkNvbnRleHQpLAotICAgIC5pbml0ICAgICAgICAgICA9 ICZmZl92a19maWx0ZXJfaW5pdCwKLSAgICAudW5pbml0ICAgICAgICAgPSAmaW50ZXJsYWNlX3Z1 bGthbl91bmluaXQsCi0gICAgRklMVEVSX0lOUFVUUyhpbnRlcmxhY2VfdnVsa2FuX2lucHV0cyks Ci0gICAgRklMVEVSX09VVFBVVFMoaW50ZXJsYWNlX3Z1bGthbl9vdXRwdXRzKSwKLSAgICBGSUxU RVJfU0lOR0xFX1BJWEZNVChBVl9QSVhfRk1UX1ZVTEtBTiksCi0gICAgLmZsYWdzX2ludGVybmFs ID0gRkZfRklMVEVSX0ZMQUdfSFdGUkFNRV9BV0FSRSwKLX07Ci0tIAoyLjQ5LjEKCgpGcm9tIGI3 ZjM3ZDQxMWNhMmFmYjVhYWNjNTUxNGVjZjIwOGE1NTY3YzljNDMgTW9uIFNlcCAxNyAwMDowMDow MCAyMDAxCkZyb206IEphbWFpa2ExIDxsdWthc3pjejE4QHdwLnBsPgpEYXRlOiBXZWQsIDMgU2Vw IDIwMjUgMTI6NTY6MzkgKzAwMDAKU3ViamVjdDogW1BBVENIIDAxNi8xMThdIENoYW5naW5nIHZ1 bGthbiBmaWxlIGRpcmVjdG9yeQoKLS0tCiBsaWJhdmZpbHRlci92dWxrYW4vdmZfaW50ZXJsYWNl X3Z1bGthbi5jIHwgMzIxICsrKysrKysrKysrKysrKysrKysrKysrCiAxIGZpbGUgY2hhbmdlZCwg MzIxIGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJhdmZpbHRlci92dWxrYW4v dmZfaW50ZXJsYWNlX3Z1bGthbi5jCgpkaWZmIC0tZ2l0IGEvbGliYXZmaWx0ZXIvdnVsa2FuL3Zm X2ludGVybGFjZV92dWxrYW4uYyBiL2xpYmF2ZmlsdGVyL3Z1bGthbi92Zl9pbnRlcmxhY2VfdnVs a2FuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uOTQ4NDk3YTdmMAot LS0gL2Rldi9udWxsCisrKyBiL2xpYmF2ZmlsdGVyL3Z1bGthbi92Zl9pbnRlcmxhY2VfdnVsa2Fu LmMKQEAgLTAsMCArMSwzMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAyNSAoYykgTmlrbGFzIEhh YXMKKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCisgKgorICogRkZtcGVnIGlz IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5 IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICog TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0 aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVz c2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi bGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBG cmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp ZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisgKi8KKworI2luY2x1ZGUgIi4u Ly4uL2xpYmF2dXRpbC92dWxrYW4vdnVsa2FuX3NwaXJ2LmgiCisjaW5jbHVkZSAibGliYXZ1dGls L29wdC5oIgorI2luY2x1ZGUgInZ1bGthbl9maWx0ZXIuaCIKKworI2luY2x1ZGUgImxpYmF2Zmls dGVyL3RpbnRlcmxhY2UuaCIKKyNpbmNsdWRlICJsaWJhdmZpbHRlci9maWx0ZXJzLmgiCisjaW5j bHVkZSAibGliYXZmaWx0ZXIvdmlkZW8uaCIKKwordHlwZWRlZiBzdHJ1Y3QgSW50ZXJsYWNlVnVs a2FuQ29udGV4dCB7CisgICAgRkZWdWxrYW5Db250ZXh0IHZrY3R4OworCisgICAgaW50IGluaXRp YWxpemVkOworICAgIEZGVmtFeGVjUG9vbCBlOworICAgIEFWVnVsa2FuRGV2aWNlUXVldWVGYW1p bHkgKnFmOworICAgIFZrU2FtcGxlciBzYW1wbGVyOworICAgIEZGVnVsa2FuU2hhZGVyIHNoZDsK KworICAgIGludCBtb2RlOworICAgIGludCBsb3dwYXNzOworCisgICAgQVZGcmFtZSAqY3VyOyAv KiBmaXJzdCBmcmFtZSBpbiBwYWlyICovCit9IEludGVybGFjZVZ1bGthbkNvbnRleHQ7CisKK3N0 YXRpYyBjb25zdCBjaGFyIGxvd3Bhc3Nfb2ZmW10gPSB7CisgICAgQygwLCB2ZWM0IGdldF9saW5l KHNhbXBsZXIyRCB0ZXgsIGNvbnN0IHZlYzIgcG9zKSAgICAgICAgICAgICAgICAgICAgICAgICAp CisgICAgQygwLCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICApCisgICAgQygxLCAgICAgcmV0dXJuIHRleHR1cmUodGV4 LCBwb3MpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgQygw LCB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICApCit9OworCitzdGF0aWMgY29uc3QgY2hhciBsb3dwYXNzX2xpbltdID0g eworICAgIEMoMCwgdmVjNCBnZXRfbGluZShzYW1wbGVyMkQgdGV4LCBjb25zdCB2ZWMyIHBvcykg ICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgIEMoMCwgeyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgIEMo MSwgICAgIHJldHVybiAwLjUwICogdGV4dHVyZSh0ZXgsIHBvcykgKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKQorICAgIEMoMSwgICAgICAgICAgICAwLjI1ICogdGV4dHVyZSh0ZXgs IHBvcyAtIGl2ZWMyKDAsIDEpKSArICAgICAgICAgICAgICAgICAgKQorICAgIEMoMSwgICAgICAg ICAgICAwLjI1ICogdGV4dHVyZSh0ZXgsIHBvcyArIGl2ZWMyKDAsIDEpKTsgICAgICAgICAgICAg ICAgICAgKQorICAgIEMoMCwgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorfTsKKworc3RhdGljIGNvbnN0IGNoYXIg bG93cGFzc19jb21wbGV4W10gPSB7CisgICAgQygwLCB2ZWM0IGdldF9saW5lKHNhbXBsZXIyRCB0 ZXgsIGNvbnN0IHZlYzIgcG9zKSAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgQygwLCB7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICApCisgICAgQygxLCAgICAgcmV0dXJuICAwLjc1ICAqIHRleHR1cmUodGV4LCBw b3MpICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgQygxLCAgICAgICAgICAg ICAwLjI1ICAqIHRleHR1cmUodGV4LCBwb3MgLSBpdmVjMigwLCAxKSkgKyAgICAgICAgICAgICAg ICApCisgICAgQygxLCAgICAgICAgICAgICAwLjI1ICAqIHRleHR1cmUodGV4LCBwb3MgKyBpdmVj MigwLCAxKSkgKyAgICAgICAgICAgICAgICApCisgICAgQygxLCAgICAgICAgICAgIC0wLjEyNSAq IHRleHR1cmUodGV4LCBwb3MgLSBpdmVjMigwLCAyKSkgKyAgICAgICAgICAgICAgICApCisgICAg QygxLCAgICAgICAgICAgIC0wLjEyNSAqIHRleHR1cmUodGV4LCBwb3MgKyBpdmVjMigwLCAyKSk7 ICAgICAgICAgICAgICAgICApCisgICAgQygwLCB9ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCit9OworCitzdGF0aWMg YXZfY29sZCBpbnQgaW5pdF9maWx0ZXIoQVZGaWx0ZXJDb250ZXh0ICpjdHgpCit7CisgICAgaW50 IGVycjsKKyAgICB1aW50OF90ICpzcHZfZGF0YTsKKyAgICBzaXplX3Qgc3B2X2xlbjsKKyAgICB2 b2lkICpzcHZfb3BhcXVlID0gTlVMTDsKKyAgICBJbnRlcmxhY2VWdWxrYW5Db250ZXh0ICpzID0g Y3R4LT5wcml2OworICAgIEZGVnVsa2FuQ29udGV4dCAqdmtjdHggPSAmcy0+dmtjdHg7CisgICAg Y29uc3QgaW50IHBsYW5lcyA9IGF2X3BpeF9mbXRfY291bnRfcGxhbmVzKHMtPnZrY3R4Lm91dHB1 dF9mb3JtYXQpOworICAgIEZGVnVsa2FuU2hhZGVyICpzaGQ7CisgICAgRkZWa1NQSVJWQ29tcGls ZXIgKnNwdjsKKyAgICBGRlZ1bGthbkRlc2NyaXB0b3JTZXRCaW5kaW5nICpkZXNjOworCisgICAg c3B2ID0gZmZfdmtfc3BpcnZfaW5pdCgpOworICAgIGlmICghc3B2KSB7CisgICAgICAgIGF2X2xv ZyhjdHgsIEFWX0xPR19FUlJPUiwgIlVuYWJsZSB0byBpbml0aWFsaXplIFNQSVItViBjb21waWxl ciFcbiIpOworICAgICAgICByZXR1cm4gQVZFUlJPUl9FWFRFUk5BTDsKKyAgICB9CisKKyAgICBz LT5xZiA9IGZmX3ZrX3FmX2ZpbmQodmtjdHgsIFZLX1FVRVVFX0NPTVBVVEVfQklULCAwKTsKKyAg ICBpZiAoIXMtPnFmKSB7CisgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIkRldmlj ZSBoYXMgbm8gY29tcHV0ZSBxdWV1ZXNcbiIpOworICAgICAgICBlcnIgPSBBVkVSUk9SKEVOT1RT VVApOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgUkVUKGZmX3ZrX2V4ZWNfcG9v bF9pbml0KHZrY3R4LCBzLT5xZiwgJnMtPmUsIHMtPnFmLT5udW0qNCwgMCwgMCwgMCwgTlVMTCkp OworICAgIFJFVChmZl92a19pbml0X3NhbXBsZXIodmtjdHgsICZzLT5zYW1wbGVyLCAxLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgcy0+bG93cGFzcyA9PSBWTFBGX09GRiA/IFZLX0ZJTFRF Ul9ORUFSRVNUCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDogVktfRklMVEVSX0xJTkVBUikpOworICAgIFJFVChmZl92a19zaGFkZXJfaW5pdCh2a2N0 eCwgJnMtPnNoZCwgImludGVybGFjZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFZLX1NI QURFUl9TVEFHRV9DT01QVVRFX0JJVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwg MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMzIsIDMyLCAxLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAwKSk7CisgICAgc2hkID0gJnMtPnNoZDsKKworICAgIGRlc2MgPSAoRkZWdWxr YW5EZXNjcmlwdG9yU2V0QmluZGluZyBbXSkgeworICAgICAgICB7CisgICAgICAgICAgICAubmFt ZSAgICAgICA9ICJ0b3BfZmllbGQiLAorICAgICAgICAgICAgLnR5cGUgICAgICAgPSBWS19ERVND UklQVE9SX1RZUEVfQ09NQklORURfSU1BR0VfU0FNUExFUiwKKyAgICAgICAgICAgIC5kaW1lbnNp b25zID0gMiwKKyAgICAgICAgICAgIC5lbGVtcyAgICAgID0gcGxhbmVzLAorICAgICAgICAgICAg LnN0YWdlcyAgICAgPSBWS19TSEFERVJfU1RBR0VfQ09NUFVURV9CSVQsCisgICAgICAgICAgICAu c2FtcGxlcnMgICA9IERVUF9TQU1QTEVSKHMtPnNhbXBsZXIpLAorICAgICAgICB9LAorICAgICAg ICB7CisgICAgICAgICAgICAubmFtZSAgICAgICA9ICJib3RfZmllbGQiLAorICAgICAgICAgICAg LnR5cGUgICAgICAgPSBWS19ERVNDUklQVE9SX1RZUEVfQ09NQklORURfSU1BR0VfU0FNUExFUiwK KyAgICAgICAgICAgIC5kaW1lbnNpb25zID0gMiwKKyAgICAgICAgICAgIC5lbGVtcyAgICAgID0g cGxhbmVzLAorICAgICAgICAgICAgLnN0YWdlcyAgICAgPSBWS19TSEFERVJfU1RBR0VfQ09NUFVU RV9CSVQsCisgICAgICAgICAgICAuc2FtcGxlcnMgICA9IERVUF9TQU1QTEVSKHMtPnNhbXBsZXIp LAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAubmFtZSAgICAgICA9ICJvdXRw dXRfaW1nIiwKKyAgICAgICAgICAgIC50eXBlICAgICAgID0gVktfREVTQ1JJUFRPUl9UWVBFX1NU T1JBR0VfSU1BR0UsCisgICAgICAgICAgICAubWVtX2xheW91dCA9IGZmX3ZrX3NoYWRlcl9yZXBf Zm10KHMtPnZrY3R4Lm91dHB1dF9mb3JtYXQsIEZGX1ZLX1JFUF9GTE9BVCksCisgICAgICAgICAg ICAubWVtX3F1YWxpICA9ICJ3cml0ZW9ubHkiLAorICAgICAgICAgICAgLmRpbWVuc2lvbnMgPSAy LAorICAgICAgICAgICAgLmVsZW1zICAgICAgPSBwbGFuZXMsCisgICAgICAgICAgICAuc3RhZ2Vz ICAgICA9IFZLX1NIQURFUl9TVEFHRV9DT01QVVRFX0JJVCwKKyAgICAgICAgfSwKKyAgICB9Owor CisgICAgUkVUKGZmX3ZrX3NoYWRlcl9hZGRfZGVzY3JpcHRvcl9zZXQodmtjdHgsIHNoZCwgZGVz YywgMywgMCwgMCkpOworCisgICAgc3dpdGNoIChzLT5sb3dwYXNzKSB7CisgICAgY2FzZSBWTFBG X09GRjoKKyAgICAgICAgR0xTTEQobG93cGFzc19vZmYpOworICAgICAgICBicmVhazsKKyAgICBj YXNlIFZMUEZfTElOOgorICAgICAgICBHTFNMRChsb3dwYXNzX2xpbik7CisgICAgICAgIGJyZWFr OworICAgIGNhc2UgVkxQRl9DTVA6CisgICAgICAgIEdMU0xEKGxvd3Bhc3NfY29tcGxleCk7Cisg ICAgICAgIGJyZWFrOworICAgIH0KKworICAgIEdMU0xDKDAsIHZvaWQgbWFpbigpICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgIEdMU0xDKDAs IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICApOworICAgIEdMU0xDKDEsICAgICB2ZWM0IHJlczsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgIEdMU0xDKDEsICAgICBpdmVjMiBzaXpl OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgIEdM U0xDKDEsICAgICBjb25zdCBpdmVjMiBwb3MgPSBpdmVjMihnbF9HbG9iYWxJbnZvY2F0aW9uSUQu eHkpOyAgICAgICApOworICAgIEdMU0xDKDEsICAgICBjb25zdCB2ZWMyIGlwb3MgPSBwb3MgKyB2 ZWMyKDAuNSk7ICAgICAgICAgICAgICAgICAgICAgICApOworICAgIGZvciAoaW50IGkgPSAwOyBp IDwgcGxhbmVzOyBpKyspIHsKKyAgICAgICAgR0xTTEMoMCwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgR0xTTEYoMSwg IHNpemUgPSBpbWFnZVNpemUob3V0cHV0X2ltZ1slaV0pOyAgICAgICAgICAgICAgICAgICAgICxp KTsKKyAgICAgICAgR0xTTEMoMSwgIGlmICghSVNfV0lUSElOKHBvcywgc2l6ZSkpICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgR0xTTEMoMiwgICAgICByZXR1cm47ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgR0xT TEMoMSwgIGlmIChwb3MueSAlJSAyID09IDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKTsKKyAgICAgICAgR0xTTEYoMSwgICAgICByZXMgPSBnZXRfbGluZSh0b3BfZmllbGRb JWldLCBpcG9zKTsgICAgICAgICAgICAgICxpKTsKKyAgICAgICAgR0xTTEMoMSwgIGVsc2UgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAg ICAgR0xTTEYoMSwgICAgICByZXMgPSBnZXRfbGluZShib3RfZmllbGRbJWldLCBpcG9zKTsgICAg ICAgICAgICAgICxpKTsKKyAgICAgICAgR0xTTEYoMSwgIGltYWdlU3RvcmUob3V0cHV0X2ltZ1sl aV0sIHBvcywgcmVzKTsgICAgICAgICAgICAgICAgICxpKTsKKyAgICB9CisgICAgR0xTTEMoMCwg fSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICk7CisKKyAgICBSRVQoc3B2LT5jb21waWxlX3NoYWRlcih2a2N0eCwgc3B2LCAmcy0+c2hk LCAmc3B2X2RhdGEsICZzcHZfbGVuLCAibWFpbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJnNwdl9vcGFxdWUpKTsKKyAgICBSRVQoZmZfdmtfc2hhZGVyX2xpbmsodmtjdHgsICZzLT5z aGQsIHNwdl9kYXRhLCBzcHZfbGVuLCAibWFpbiIpKTsKKworICAgIFJFVChmZl92a19zaGFkZXJf cmVnaXN0ZXJfZXhlYyh2a2N0eCwgJnMtPmUsICZzLT5zaGQpKTsKKworICAgIHMtPmluaXRpYWxp emVkID0gMTsKKworZmFpbDoKKyAgICBpZiAoc3B2X29wYXF1ZSkKKyAgICAgICAgc3B2LT5mcmVl X3NoYWRlcihzcHYsICZzcHZfb3BhcXVlKTsKKyAgICBpZiAoc3B2KQorICAgICAgICBzcHYtPnVu aW5pdCgmc3B2KTsKKworICAgIHJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgaW50ZXJsYWNl X3Z1bGthbl9maWx0ZXJfZnJhbWUoQVZGaWx0ZXJMaW5rICpsaW5rLCBBVkZyYW1lICppbikKK3sK KyAgICBpbnQgZXJyOworICAgIEFWRnJhbWUgKm91dCA9IE5VTEwsICppbnB1dF90b3AsICppbnB1 dF9ib3Q7CisgICAgQVZGaWx0ZXJDb250ZXh0ICpjdHggPSBsaW5rLT5kc3Q7CisgICAgSW50ZXJs YWNlVnVsa2FuQ29udGV4dCAqcyA9IGN0eC0+cHJpdjsKKyAgICBjb25zdCBBVkZpbHRlckxpbmsg KmlubGluayA9IGN0eC0+aW5wdXRzWzBdOworICAgIEFWRmlsdGVyTGluayAqb3V0bGluayA9IGN0 eC0+b3V0cHV0c1swXTsKKyAgICBGaWx0ZXJMaW5rICpsID0gZmZfZmlsdGVyX2xpbmsob3V0bGlu ayk7CisKKyAgICBpZiAoIXMtPmluaXRpYWxpemVkKQorICAgICAgICBSRVQoaW5pdF9maWx0ZXIo Y3R4KSk7CisKKyAgICAvKiBOZWVkIGJvdGggZnJhbWVzIHRvIGZpbHRlciAqLworICAgIGlmICgh cy0+Y3VyKSB7CisgICAgICAgIHMtPmN1ciA9IGluOworICAgICAgICByZXR1cm4gMDsKKyAgICB9 CisKKyAgICBvdXQgPSBmZl9nZXRfdmlkZW9fYnVmZmVyKG91dGxpbmssIG91dGxpbmstPncsIG91 dGxpbmstPmgpOworICAgIGlmICghb3V0KSB7CisgICAgICAgIGVyciA9IEFWRVJST1IoRU5PTUVN KTsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIGlmIChzLT5tb2RlID09IE1PREVf VEZGKSB7CisgICAgICAgIGlucHV0X3RvcCA9IHMtPmN1cjsKKyAgICAgICAgaW5wdXRfYm90ID0g aW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgaW5wdXRfdG9wID0gaW47CisgICAgICAgIGlucHV0 X2JvdCA9IHMtPmN1cjsKKyAgICB9CisKKyAgICBSRVQoZmZfdmtfZmlsdGVyX3Byb2Nlc3NfTmlu KCZzLT52a2N0eCwgJnMtPmUsICZzLT5zaGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBvdXQsIChBVkZyYW1lICpbXSl7IGlucHV0X3RvcCwgaW5wdXRfYm90IH0sIDIsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLT5zYW1wbGVyLCBOVUxMLCAwKSk7CisKKyAg ICBlcnIgPSBhdl9mcmFtZV9jb3B5X3Byb3BzKG91dCwgcy0+Y3VyKTsKKyAgICBpZiAoZXJyIDwg MCkKKyAgICAgICAgZ290byBmYWlsOworCisgICAgb3V0LT5mbGFncyB8PSBBVl9GUkFNRV9GTEFH X0lOVEVSTEFDRUQ7CisgICAgaWYgKHMtPm1vZGUgPT0gTU9ERV9URkYpCisgICAgICAgIG91dC0+ ZmxhZ3MgfD0gQVZfRlJBTUVfRkxBR19UT1BfRklFTERfRklSU1Q7CisKKyAgICBvdXQtPnB0cyA9 IGF2X3Jlc2NhbGVfcShvdXQtPnB0cywgaW5saW5rLT50aW1lX2Jhc2UsIG91dGxpbmstPnRpbWVf YmFzZSk7CisgICAgb3V0LT5kdXJhdGlvbiA9IGF2X3Jlc2NhbGVfcSgxLCBhdl9pbnZfcShsLT5m cmFtZV9yYXRlKSwgb3V0bGluay0+dGltZV9iYXNlKTsKKworICAgIGF2X2ZyYW1lX2ZyZWUoJnMt PmN1cik7CisgICAgYXZfZnJhbWVfZnJlZSgmaW4pOworCisgICAgcmV0dXJuIGZmX2ZpbHRlcl9m cmFtZShvdXRsaW5rLCBvdXQpOworCitmYWlsOgorICAgIGF2X2ZyYW1lX2ZyZWUoJnMtPmN1cik7 CisgICAgYXZfZnJhbWVfZnJlZSgmaW4pOworICAgIGF2X2ZyYW1lX2ZyZWUoJm91dCk7CisgICAg cmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgaW50ZXJsYWNlX3Z1bGthbl91bmluaXQoQVZG aWx0ZXJDb250ZXh0ICphdmN0eCkKK3sKKyAgICBJbnRlcmxhY2VWdWxrYW5Db250ZXh0ICpzID0g YXZjdHgtPnByaXY7CisgICAgRkZWdWxrYW5Db250ZXh0ICp2a2N0eCA9ICZzLT52a2N0eDsKKyAg ICBGRlZ1bGthbkZ1bmN0aW9ucyAqdmsgPSAmdmtjdHgtPnZrZm47CisKKyAgICBhdl9mcmFtZV9m cmVlKCZzLT5jdXIpOworCisgICAgZmZfdmtfZXhlY19wb29sX2ZyZWUodmtjdHgsICZzLT5lKTsK KyAgICBmZl92a19zaGFkZXJfZnJlZSh2a2N0eCwgJnMtPnNoZCk7CisKKyAgICBpZiAocy0+c2Ft cGxlcikKKyAgICAgICAgdmstPkRlc3Ryb3lTYW1wbGVyKHZrY3R4LT5od2N0eC0+YWN0X2Rldiwg cy0+c2FtcGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHZrY3R4LT5od2N0eC0+YWxs b2MpOworCisgICAgZmZfdmtfdW5pbml0KCZzLT52a2N0eCk7CisKKyAgICBzLT5pbml0aWFsaXpl ZCA9IDA7Cit9CisKK3N0YXRpYyBpbnQgY29uZmlnX291dF9wcm9wcyhBVkZpbHRlckxpbmsgKm91 dGxpbmspCit7CisgICAgQVZGaWx0ZXJMaW5rICppbmxpbmsgPSBvdXRsaW5rLT5zcmMtPmlucHV0 c1swXTsKKyAgICBjb25zdCBGaWx0ZXJMaW5rICppbCA9IGZmX2ZpbHRlcl9saW5rKGlubGluayk7 CisgICAgRmlsdGVyTGluayAqb2wgPSBmZl9maWx0ZXJfbGluayhvdXRsaW5rKTsKKworICAgIG9s LT5mcmFtZV9yYXRlID0gYXZfbXVsX3EoaWwtPmZyYW1lX3JhdGUsIGF2X21ha2VfcSgxLCAyKSk7 CisgICAgb3V0bGluay0+dGltZV9iYXNlID0gYXZfbXVsX3EoaW5saW5rLT50aW1lX2Jhc2UsIGF2 X21ha2VfcSgyLCAxKSk7CisgICAgcmV0dXJuIGZmX3ZrX2ZpbHRlcl9jb25maWdfb3V0cHV0KG91 dGxpbmspOworfQorCisjZGVmaW5lIE9GRlNFVCh4KSBvZmZzZXRvZihJbnRlcmxhY2VWdWxrYW5D b250ZXh0LCB4KQorI2RlZmluZSBGTEFHUyAoQVZfT1BUX0ZMQUdfRklMVEVSSU5HX1BBUkFNIHwg QVZfT1BUX0ZMQUdfVklERU9fUEFSQU0pCitzdGF0aWMgY29uc3QgQVZPcHRpb24gaW50ZXJsYWNl X3Z1bGthbl9vcHRpb25zW10gPSB7CisgICAgeyAic2NhbiIsICAgICAgICAgICAgICAic2Nhbm5p bmcgbW9kZSIsIE9GRlNFVChtb2RlKSwgQVZfT1BUX1RZUEVfSU5ULCB7Lmk2NCA9IE1PREVfVEZG fSwgMCwgMSwgRkxBR1MsIC51bml0ID0gIm1vZGUifSwKKyAgICB7ICJ0ZmYiLCAgICAgICAgICAg ICAgICJ0b3AgZmllbGQgZmlyc3QiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIEFW X09QVF9UWVBFX0NPTlNULCB7Lmk2NCA9IE1PREVfVEZGfSwgSU5UX01JTiwgSU5UX01BWCwgRkxB R1MsIC51bml0ID0gIm1vZGUifSwKKyAgICB7ICJiZmYiLCAgICAgICAgICAgICAgICJib3R0b20g ZmllbGQgZmlyc3QiLCAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIEFWX09QVF9UWVBFX0NP TlNULCB7Lmk2NCA9IE1PREVfQkZGfSwgSU5UX01JTiwgSU5UX01BWCwgRkxBR1MsIC51bml0ID0g Im1vZGUifSwKKyAgICB7ICJsb3dwYXNzIiwgICAgICAgICAgICJzZXQgdmVydGljYWwgbG93LXBh c3MgZmlsdGVyIiwgT0ZGU0VUKGxvd3Bhc3MpLCBBVl9PUFRfVFlQRV9JTlQsICAgey5pNjQgPSBW TFBGX0xJTn0sIDAsIDIsIEZMQUdTLCAudW5pdCA9ICJsb3dwYXNzIiB9LAorICAgIHsgICAgICJv ZmYiLCAgICAgICAgICAgImRpc2FibGUgdmVydGljYWwgbG93LXBhc3MgZmlsdGVyIiwgICAgICAg ICAgICAgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsuaTY0ID0gVkxQRl9PRkZ9LCBJTlRfTUlOLCBJ TlRfTUFYLCBGTEFHUywgLnVuaXQgPSAibG93cGFzcyIgfSwKKyAgICB7ICAgICAibGluZWFyIiwg ICAgICAgICJsaW5lYXIgdmVydGljYWwgbG93LXBhc3MgZmlsdGVyIiwgICAgICAgICAgICAgIDAs IEFWX09QVF9UWVBFX0NPTlNULCB7Lmk2NCA9IFZMUEZfTElOfSwgSU5UX01JTiwgSU5UX01BWCwg RkxBR1MsIC51bml0ID0gImxvd3Bhc3MiIH0sCisgICAgeyAgICAgImNvbXBsZXgiLCAgICAgICAi Y29tcGxleCB2ZXJ0aWNhbCBsb3ctcGFzcyBmaWx0ZXIiLCAgICAgICAgICAgICAwLCBBVl9PUFRf VFlQRV9DT05TVCwgey5pNjQgPSBWTFBGX0NNUH0sIElOVF9NSU4sIElOVF9NQVgsIEZMQUdTLCAu dW5pdCA9ICJsb3dwYXNzIiB9LAorICAgIHsgTlVMTCB9LAorfTsKKworQVZGSUxURVJfREVGSU5F X0NMQVNTKGludGVybGFjZV92dWxrYW4pOworCitzdGF0aWMgY29uc3QgQVZGaWx0ZXJQYWQgaW50 ZXJsYWNlX3Z1bGthbl9pbnB1dHNbXSA9IHsKKyAgICB7CisgICAgICAgIC5uYW1lICAgICAgICAg PSAiZGVmYXVsdCIsCisgICAgICAgIC50eXBlICAgICAgICAgPSBBVk1FRElBX1RZUEVfVklERU8s CisgICAgICAgIC5maWx0ZXJfZnJhbWUgPSAmaW50ZXJsYWNlX3Z1bGthbl9maWx0ZXJfZnJhbWUs CisgICAgICAgIC5jb25maWdfcHJvcHMgPSAmZmZfdmtfZmlsdGVyX2NvbmZpZ19pbnB1dCwKKyAg ICB9LAorfTsKKworc3RhdGljIGNvbnN0IEFWRmlsdGVyUGFkIGludGVybGFjZV92dWxrYW5fb3V0 cHV0c1tdID0geworICAgIHsKKyAgICAgICAgLm5hbWUgPSAiZGVmYXVsdCIsCisgICAgICAgIC50 eXBlID0gQVZNRURJQV9UWVBFX1ZJREVPLAorICAgICAgICAuY29uZmlnX3Byb3BzID0gJmNvbmZp Z19vdXRfcHJvcHMsCisgICAgfSwKK307CisKK2NvbnN0IEZGRmlsdGVyIGZmX3ZmX2ludGVybGFj ZV92dWxrYW4gPSB7CisgICAgLnAubmFtZSAgICAgICAgID0gImludGVybGFjZV92dWxrYW4iLAor ICAgIC5wLmRlc2NyaXB0aW9uICA9IE5VTExfSUZfQ09ORklHX1NNQUxMKCJDb252ZXJ0IHByb2dy ZXNzaXZlIHZpZGVvIGludG8gaW50ZXJsYWNlZC4iKSwKKyAgICAucC5wcml2X2NsYXNzICAgPSAm aW50ZXJsYWNlX3Z1bGthbl9jbGFzcywKKyAgICAucC5mbGFncyAgICAgICAgPSBBVkZJTFRFUl9G TEFHX0hXREVWSUNFLAorICAgIC5wcml2X3NpemUgICAgICA9IHNpemVvZihJbnRlcmxhY2VWdWxr YW5Db250ZXh0KSwKKyAgICAuaW5pdCAgICAgICAgICAgPSAmZmZfdmtfZmlsdGVyX2luaXQsCisg ICAgLnVuaW5pdCAgICAgICAgID0gJmludGVybGFjZV92dWxrYW5fdW5pbml0LAorICAgIEZJTFRF Ul9JTlBVVFMoaW50ZXJsYWNlX3Z1bGthbl9pbnB1dHMpLAorICAgIEZJTFRFUl9PVVRQVVRTKGlu dGVybGFjZV92dWxrYW5fb3V0cHV0cyksCisgICAgRklMVEVSX1NJTkdMRV9QSVhGTVQoQVZfUElY X0ZNVF9WVUxLQU4pLAorICAgIC5mbGFnc19pbnRlcm5hbCA9IEZGX0ZJTFRFUl9GTEFHX0hXRlJB TUVfQVdBUkUsCit9OwotLSAKMi40OS4xCgoKRnJvbSAzNzQyMGRiYmI5MTAzNTVlMzQyNDg4MmNl MzRjZDQxOTIxM2RiOWMxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBKYW1haWthMSA8 bHVrYXN6Y3oxOEB3cC5wbD4KRGF0ZTogV2VkLCAzIFNlcCAyMDI1IDEyOjU3OjM3ICswMDAwClN1 YmplY3Q6IFtQQVRDSCAwMTcvMTE4XSBDaGFuZ2luZyB2dWxrYW4gZmlsZSBkaXJlY3RvcnkKCi0t LQogbGliYXZmaWx0ZXIvdmZfbmxtZWFuc192dWxrYW4uYyB8IDExMjAgLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDExMjAgZGVsZXRpb25zKC0pCiBkZWxl dGUgbW9kZSAxMDA2NDQgbGliYXZmaWx0ZXIvdmZfbmxtZWFuc192dWxrYW4uYwoKZGlmZiAtLWdp dCBhL2xpYmF2ZmlsdGVyL3ZmX25sbWVhbnNfdnVsa2FuLmMgYi9saWJhdmZpbHRlci92Zl9ubG1l YW5zX3Z1bGthbi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMmEyYTczZWFlLi4w MDAwMDAwMDAwCi0tLSBhL2xpYmF2ZmlsdGVyL3ZmX25sbWVhbnNfdnVsa2FuLmMKKysrIC9kZXYv bnVsbApAQCAtMSwxMTIwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIEx5bm5lCi0gKgot ICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgotICoKLSAqIEZGbXBlZyBpcyBmcmVlIHNv ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRl ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2Ug YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICog dmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy IHZlcnNpb24uCi0gKgotICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg aXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBo YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICog TGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0 d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v ciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQotICovCi0KLSNpbmNsdWRlICJsaWJhdnV0aWwv bWVtLmgiCi0jaW5jbHVkZSAibGliYXZ1dGlsL3JhbmRvbV9zZWVkLmgiCi0jaW5jbHVkZSAibGli YXZ1dGlsL3Z1bGthbl9zcGlydi5oIgotI2luY2x1ZGUgImxpYmF2dXRpbC9vcHQuaCIKLSNpbmNs dWRlICJ2dWxrYW5fZmlsdGVyLmgiCi0KLSNpbmNsdWRlICJmaWx0ZXJzLmgiCi0jaW5jbHVkZSAi dmlkZW8uaCIKLQotI2RlZmluZSBUWVBFX05BTUUgICJ2ZWM0IgotI2RlZmluZSBUWVBFX0VMRU1T IDQKLSNkZWZpbmUgVFlQRV9TSVpFICAoVFlQRV9FTEVNUyo0KQotCi10eXBlZGVmIHN0cnVjdCBO TE1lYW5zVnVsa2FuQ29udGV4dCB7Ci0gICAgRkZWdWxrYW5Db250ZXh0IHZrY3R4OwotCi0gICAg aW50IGluaXRpYWxpemVkOwotICAgIEZGVmtFeGVjUG9vbCBlOwotICAgIEFWVnVsa2FuRGV2aWNl UXVldWVGYW1pbHkgKnFmOwotCi0gICAgQVZCdWZmZXJQb29sICppbnRlZ3JhbF9idWZfcG9vbDsK LSAgICBBVkJ1ZmZlclBvb2wgKndzX2J1Zl9wb29sOwotCi0gICAgRkZWa0J1ZmZlciB4eW9mZnNl dHNfYnVmOwotCi0gICAgaW50IHBsX3dlaWdodHNfcm93czsKLSAgICBGRlZ1bGthblNoYWRlciBz aGRfd2VpZ2h0czsKLSAgICBGRlZ1bGthblNoYWRlciBzaGRfZGVub2lzZTsKLQotICAgIGludCAq eG9mZnNldHM7Ci0gICAgaW50ICp5b2Zmc2V0czsKLSAgICBpbnQgbmJfb2Zmc2V0czsKLSAgICBm bG9hdCBzdHJlbmd0aFs0XTsKLSAgICBpbnQgcGF0Y2hbNF07Ci0KLSAgICBzdHJ1Y3QgbmxtZWFu c19vcHRzIHsKLSAgICAgICAgaW50IHI7Ci0gICAgICAgIGRvdWJsZSBzOwotICAgICAgICBkb3Vi bGUgc2NbNF07Ci0gICAgICAgIGludCBwOwotICAgICAgICBpbnQgcGNbNF07Ci0gICAgICAgIGlu dCB0OwotICAgIH0gb3B0czsKLX0gTkxNZWFuc1Z1bGthbkNvbnRleHQ7Ci0KLXN0YXRpYyB2b2lk IGluc2VydF9maXJzdChGRlZ1bGthblNoYWRlciAqc2hkLCBpbnQgciwgY29uc3QgY2hhciAqb2Zm LCBpbnQgaG9yaXosIGludCBwbGFuZSwgaW50IGNvbXApCi17Ci0gICAgR0xTTEYoNCwgczEgICAg PSBpbWFnZUxvYWQoaW5wdXRfaW1nWyVpXSwgcG9zICsgaXZlYzIoJWkgKyAlcywgJWkgKyAlcykp WyVpXTsKLSAgICAgICAgICAscGxhbmUsIGhvcml6ID8gciA6IDAsIGhvcml6ID8gb2ZmIDogIjAi LCAhaG9yaXogPyByIDogMCwgIWhvcml6ID8gb2ZmIDogIjAiLCBjb21wKTsKLQotICAgIEdMU0xG KDQsIHMyWzBdID0gaW1hZ2VMb2FkKGlucHV0X2ltZ1slaV0sIHBvcyArIG9mZnNbMF0gKyBpdmVj MiglaSArICVzLCAlaSArICVzKSlbJWldOwotICAgICAgICAgICxwbGFuZSwgaG9yaXogPyByIDog MCwgaG9yaXogPyBvZmYgOiAiMCIsICFob3JpeiA/IHIgOiAwLCAhaG9yaXogPyBvZmYgOiAiMCIs IGNvbXApOwotICAgIEdMU0xGKDQsIHMyWzFdID0gaW1hZ2VMb2FkKGlucHV0X2ltZ1slaV0sIHBv cyArIG9mZnNbMV0gKyBpdmVjMiglaSArICVzLCAlaSArICVzKSlbJWldOwotICAgICAgICAgICxw bGFuZSwgaG9yaXogPyByIDogMCwgaG9yaXogPyBvZmYgOiAiMCIsICFob3JpeiA/IHIgOiAwLCAh aG9yaXogPyBvZmYgOiAiMCIsIGNvbXApOwotICAgIEdMU0xGKDQsIHMyWzJdID0gaW1hZ2VMb2Fk KGlucHV0X2ltZ1slaV0sIHBvcyArIG9mZnNbMl0gKyBpdmVjMiglaSArICVzLCAlaSArICVzKSlb JWldOwotICAgICAgICAgICxwbGFuZSwgaG9yaXogPyByIDogMCwgaG9yaXogPyBvZmYgOiAiMCIs ICFob3JpeiA/IHIgOiAwLCAhaG9yaXogPyBvZmYgOiAiMCIsIGNvbXApOwotICAgIEdMU0xGKDQs IHMyWzNdID0gaW1hZ2VMb2FkKGlucHV0X2ltZ1slaV0sIHBvcyArIG9mZnNbM10gKyBpdmVjMigl aSArICVzLCAlaSArICVzKSlbJWldOwotICAgICAgICAgICxwbGFuZSwgaG9yaXogPyByIDogMCwg aG9yaXogPyBvZmYgOiAiMCIsICFob3JpeiA/IHIgOiAwLCAhaG9yaXogPyBvZmYgOiAiMCIsIGNv bXApOwotCi0gICAgR0xTTEMoNCwgczIgPSAoczEgLSBzMikgKiAoczEgLSBzMik7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci19Ci0KLXN0YXRp YyB2b2lkIGluc2VydF9ob3Jpem9udGFsX3Bhc3MoRkZWdWxrYW5TaGFkZXIgKnNoZCwgaW50IG5i X3Jvd3MsIGludCBmaXJzdCwgaW50IHBsYW5lLCBpbnQgY29tcCkKLXsKLSAgICBHTFNMRigxLCBw b3MueSA9IGludChnbF9HbG9iYWxJbnZvY2F0aW9uSUQueCkgKiAlaTsgICAgICAgICAgICAgICAg ICAgICAgICAgICAsbmJfcm93cyk7Ci0gICAgaWYgKCFmaXJzdCkKLSAgICAgICAgR0xTTEMoMSwg YmFycmllcigpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICApOwotICAgIEdMU0xDKDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgR0xTTEYoMSwgaWYg KHBvcy55IDwgaGVpZ2h0WyVpXSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLHBsYW5lKTsKLSAgICBHTFNMQygyLCAgICAgI3ByYWdtYSB1bnJvbGwoMSkgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIEdMU0xG KDIsICAgICBmb3IgKHIgPSAwOyByIDwgJWk7IHIrKykgeyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICxuYl9yb3dzKTsKLSAgICBHTFNMQygzLCAgICAgICAgIHByZWZpeF9z dW0gPSBEVFlQRSgwKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwot ICAgIEdMU0xDKDMsICAgICAgICAgb2Zmc2V0ID0gaW50X3N0cmlkZSAqIHVpbnQ2NF90KHBvcy55 ICsgcik7ICAgICAgICAgICAgICAgICAgICk7Ci0gICAgR0xTTEMoMywgICAgICAgICBkc3QgPSBE YXRhQnVmZmVyKHVpbnQ2NF90KGludGVncmFsX2RhdGEpICsgb2Zmc2V0KTsgICAgICAgICAgKTsK LSAgICBHTFNMQygwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIEdMU0xGKDMsICAgICAgICAgZm9yIChw b3MueCA9IDA7IHBvcy54IDwgd2lkdGhbJWldOyBwb3MueCsrKSB7ICAgICAgICAgICAgICAgICxw bGFuZSk7Ci0gICAgaWYgKGZpcnN0KQotICAgICAgICBpbnNlcnRfZmlyc3Qoc2hkLCAwLCAiciIs IDAsIHBsYW5lLCBjb21wKTsKLSAgICBlbHNlCi0gICAgICAgIEdMU0xDKDQsICAgICAgICAgczIg PSBkc3Qudltwb3MueF07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsK LSAgICBHTFNMQyg0LCAgICAgICAgICAgICBkc3Qudltwb3MueF0gPSBzMiArIHByZWZpeF9zdW07 ICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIEdMU0xDKDQsICAgICAgICAgICAgIHBy ZWZpeF9zdW0gKz0gczI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7 Ci0gICAgR0xTTEMoMywgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBHTFNMQygyLCAgICAgfSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAp OwotICAgIEdMU0xDKDEsIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgR0xTTEMoMCwgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KTsKLX0KLQotc3RhdGljIHZvaWQgaW5zZXJ0X3ZlcnRpY2FsX3Bhc3MoRkZWdWxrYW5TaGFkZXIg KnNoZCwgaW50IG5iX3Jvd3MsIGludCBmaXJzdCwgaW50IHBsYW5lLCBpbnQgY29tcCkKLXsKLSAg ICBHTFNMRigxLCBwb3MueCA9IGludChnbF9HbG9iYWxJbnZvY2F0aW9uSUQueCkgKiAlaTsgICAg ICAgICAgICAgICAgICAgICAgICAgICAsbmJfcm93cyk7Ci0gICAgR0xTTEMoMSwgI3ByYWdtYSB1 bnJvbGwoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKTsKLSAgICBHTFNMRigxLCBmb3IgKHIgPSAwOyByIDwgJWk7IHIrKykgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsbmJfcm93cyk7Ci0gICAgR0xTTEMoMiwg ICAgIHBzdW1bcl0gPSBEVFlQRSgwKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKTsKLSAgICBHTFNMQygwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIGlmICghZmly c3QpCi0gICAgICAgIEdMU0xDKDEsIGJhcnJpZXIoKTsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBHTFNMQygwLCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICApOwotICAgIEdMU0xGKDEsIGlmIChwb3MueCA8IHdpZHRoWyVpXSkgeyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICxwbGFuZSk7Ci0gICAgR0xTTEYoMiwgICAg IGZvciAocG9zLnkgPSAwOyBwb3MueSA8IGhlaWdodFslaV07IHBvcy55KyspIHsgICAgICAgICAg ICAgICAgICAgLHBsYW5lKTsKLSAgICBHTFNMQygzLCAgICAgICAgIG9mZnNldCA9IGludF9zdHJp ZGUgKiB1aW50NjRfdChwb3MueSk7ICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIEdMU0xD KDMsICAgICAgICAgZHN0ID0gRGF0YUJ1ZmZlcih1aW50NjRfdChpbnRlZ3JhbF9kYXRhKSArIG9m ZnNldCk7ICAgICAgICAgICk7Ci0gICAgR0xTTEMoMCwgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBHTFNM QygzLCAgICAgICAgICNwcmFnbWEgdW5yb2xsKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICApOwotICAgIEdMU0xGKDMsICAgICAgICAgZm9yIChyID0gMDsgciA8 ICVpOyByKyspIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICxuYl9yb3dzKTsK LSAgICBpZiAoZmlyc3QpCi0gICAgICAgIGluc2VydF9maXJzdChzaGQsIDAsICJyIiwgMSwgcGxh bmUsIGNvbXApOwotICAgIGVsc2UKLSAgICAgICAgR0xTTEMoNCwgICAgICAgICBzMiA9IGRzdC52 W3Bvcy54ICsgcl07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIEdM U0xDKDQsICAgICAgICAgICAgIGRzdC52W3Bvcy54ICsgcl0gPSBzMiArIHBzdW1bcl07ICAgICAg ICAgICAgICAgICAgICAgICAgICk7Ci0gICAgR0xTTEMoNCwgICAgICAgICAgICAgcHN1bVtyXSAr PSBzMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBH TFNMQygzLCAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICApOwotICAgIEdMU0xDKDIsICAgICB9ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAg R0xTTEMoMSwgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBHTFNMQygwLCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotfQot Ci1zdGF0aWMgdm9pZCBpbnNlcnRfd2VpZ2h0c19wYXNzKEZGVnVsa2FuU2hhZGVyICpzaGQsIGlu dCBuYl9yb3dzLCBpbnQgdmVydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50 IHQsIGludCBkc3RfY29tcCwgaW50IHBsYW5lLCBpbnQgY29tcCkKLXsKLSAgICBHTFNMRigxLCBw ID0gcGF0Y2hfc2l6ZVslaV07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICxkc3RfY29tcCk7Ci0gICAgR0xTTEMoMCwgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIEdMU0xDKDEs IGJhcnJpZXIoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKTsKLSAgICBHTFNMQygwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgaWYgKCF2ZXJ0KSB7Ci0g ICAgICAgIEdMU0xGKDEsIGZvciAocG9zLnkgPSAwOyBwb3MueSA8IGhlaWdodFslaV07IHBvcy55 KyspIHsgICAgICAgICAgICAgICAscGxhbmUpOwotICAgICAgICBHTFNMRigyLCAgICAgaWYgKGds X0dsb2JhbEludm9jYXRpb25JRC54KiVpID49IHdpZHRoWyVpXSkgICAgICAgICAgICAgLG5iX3Jv d3MsIHBsYW5lKTsKLSAgICAgICAgR0xTTEMoMywgICAgICAgICBicmVhazsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgIEdMU0xGKDIsICAg ICBmb3IgKHIgPSAwOyByIDwgJWk7IHIrKykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAsbmJfcm93cyk7Ci0gICAgICAgIEdMU0xGKDMsICAgICAgICAgcG9zLnggPSBpbnQoZ2xfR2xv YmFsSW52b2NhdGlvbklELngpICogJWkgKyByOyAgICAgICAsbmJfcm93cyk7Ci0gICAgfSBlbHNl IHsKLSAgICAgICAgR0xTTEYoMSwgZm9yIChwb3MueCA9IDA7IHBvcy54IDwgd2lkdGhbJWldOyBw b3MueCsrKSB7ICAgICAgICAgICAgICAgICxwbGFuZSk7Ci0gICAgICAgIEdMU0xGKDIsICAgICBp ZiAoZ2xfR2xvYmFsSW52b2NhdGlvbklELngqJWkgPj0gaGVpZ2h0WyVpXSkgICAgICAgICAgICAs bmJfcm93cywgcGxhbmUpOwotICAgICAgICBHTFNMQygzLCAgICAgICAgIGJyZWFrOyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgR0xTTEYo MiwgICAgIGZvciAociA9IDA7IHIgPCAlaTsgcisrKSB7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICxuYl9yb3dzKTsKLSAgICAgICAgR0xTTEYoMywgICAgICAgICBwb3MueSA9IGludChn bF9HbG9iYWxJbnZvY2F0aW9uSUQueCkgKiAlaSArIHI7ICAgICAgICxuYl9yb3dzKTsKLSAgICB9 Ci0gICAgR0xTTEMoMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIEdMU0xDKDMsICAgICAgICAgYSA9IERUWVBF KDApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBH TFNMQygzLCAgICAgICAgIGIgPSBEVFlQRSgwKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICk7Ci0gICAgR0xTTEMoMywgICAgICAgICBjID0gRFRZUEUoMCk7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIEdMU0xDKDMs ICAgICAgICAgZCA9IERUWVBFKDApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKTsKLSAgICBHTFNMQygwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgR0xTTEMoMywgICAgICAg ICBsdCA9ICgocG9zLnggLSBwKSA8IDApIHx8ICgocG9zLnkgLSBwKSA8IDApOyAgICAgICAgICAg ICApOwotICAgIEdMU0xDKDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBHTFNMRigzLCAgICAgICAgIHNyY1sw XSA9IGltYWdlTG9hZChpbnB1dF9pbWdbJWldLCBwb3MgKyBvZmZzWzBdKVslaV07ICAgICxwbGFu ZSwgY29tcCk7Ci0gICAgR0xTTEYoMywgICAgICAgICBzcmNbMV0gPSBpbWFnZUxvYWQoaW5wdXRf aW1nWyVpXSwgcG9zICsgb2Zmc1sxXSlbJWldOyAgICAscGxhbmUsIGNvbXApOwotICAgIEdMU0xG KDMsICAgICAgICAgc3JjWzJdID0gaW1hZ2VMb2FkKGlucHV0X2ltZ1slaV0sIHBvcyArIG9mZnNb Ml0pWyVpXTsgICAgLHBsYW5lLCBjb21wKTsKLSAgICBHTFNMRigzLCAgICAgICAgIHNyY1szXSA9 IGltYWdlTG9hZChpbnB1dF9pbWdbJWldLCBwb3MgKyBvZmZzWzNdKVslaV07ICAgICxwbGFuZSwg Y29tcCk7Ci0gICAgR0xTTEMoMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIEdMU0xDKDMsICAgICAgICAgaWYg KGx0ID09IGZhbHNlKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsK LSAgICBHTFNMQygzLCAgICAgICAgICAgICBvZmZzZXQgPSBpbnRfc3RyaWRlICogdWludDY0X3Qo cG9zLnkgLSBwKTsgICAgICAgICAgICk7Ci0gICAgR0xTTEMoMywgICAgICAgICAgICAgZHN0ID0g RGF0YUJ1ZmZlcih1aW50NjRfdChpbnRlZ3JhbF9kYXRhKSArIG9mZnNldCk7ICApOwotICAgIEdM U0xDKDQsICAgICAgICAgICAgIGEgPSBkc3Qudltwb3MueCAtIHBdOyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKTsKLSAgICBHTFNMQyg0LCAgICAgICAgICAgICBjID0gZHN0LnZbcG9z LnggKyBwXTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgR0xTTEMoMywg ICAgICAgICAgICAgb2Zmc2V0ID0gaW50X3N0cmlkZSAqIHVpbnQ2NF90KHBvcy55ICsgcCk7ICAg ICAgICAgICApOwotICAgIEdMU0xDKDMsICAgICAgICAgICAgIGRzdCA9IERhdGFCdWZmZXIodWlu dDY0X3QoaW50ZWdyYWxfZGF0YSkgKyBvZmZzZXQpOyAgKTsKLSAgICBHTFNMQyg0LCAgICAgICAg ICAgICBiID0gZHN0LnZbcG9zLnggLSBwXTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICk7Ci0gICAgR0xTTEMoNCwgICAgICAgICAgICAgZCA9IGRzdC52W3Bvcy54ICsgcF07ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIEdMU0xDKDMsICAgICAgICAgfSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAg ICBHTFNMQygwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICk7Ci0gICAgR0xTTEMoMywgICAgICAgICBwYXRjaF9kaWZmID0g ZCArIGEgLSBiIC0gYzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIEdMU0xG KDMsICAgICAgICAgdyA9IGV4cChwYXRjaF9kaWZmICogc3RyZW5ndGhbJWldKTsgICAgICAgICAg ICAgICAgICAgICAgLGRzdF9jb21wKTsKLSAgICBHTFNMQygzLCAgICAgICAgIHdfc3VtID0gd1sw XSArIHdbMV0gKyB3WzJdICsgd1szXTsgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgR0xT TEMoMywgICAgICAgICBzdW0gPSBkb3Qodywgc3JjKjI1NSk7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICApOwotICAgIEdMU0xDKDAsICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBpZiAodCA+IDEp IHsKLSAgICAgICAgR0xTTEYoMywgICAgICAgICBhdG9taWNBZGQod2VpZ2h0c18laVtwb3MueSp3 c19zdHJpZGVbJWldICsgcG9zLnhdLCB3X3N1bSk7ICAgLGRzdF9jb21wLCBkc3RfY29tcCk7Ci0g ICAgICAgIEdMU0xGKDMsICAgICAgICAgYXRvbWljQWRkKHN1bXNfJWlbcG9zLnkqd3Nfc3RyaWRl WyVpXSArIHBvcy54XSwgc3VtKTsgICAgICAgICxkc3RfY29tcCwgZHN0X2NvbXApOwotICAgIH0g ZWxzZSB7Ci0gICAgICAgIEdMU0xGKDMsICAgICAgICAgd2VpZ2h0c18laVtwb3MueSp3c19zdHJp ZGVbJWldICsgcG9zLnhdICs9IHdfc3VtOyAgICAgICAgICAgICxkc3RfY29tcCwgZHN0X2NvbXAp OwotICAgICAgICBHTFNMRigzLCAgICAgICAgIHN1bXNfJWlbcG9zLnkqd3Nfc3RyaWRlWyVpXSAr IHBvcy54XSArPSBzdW07ICAgICAgICAgICAgICAgICAsZHN0X2NvbXAsIGRzdF9jb21wKTsKLSAg ICB9Ci0gICAgR0xTTEMoMiwgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIEdMU0xDKDEsIH0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLX0K LQotdHlwZWRlZiBzdHJ1Y3QgSG9yaXpvbnRhbFB1c2hEYXRhIHsKLSAgICB1aW50MzJfdCB3aWR0 aFs0XTsKLSAgICB1aW50MzJfdCBoZWlnaHRbNF07Ci0gICAgdWludDMyX3Qgd3Nfc3RyaWRlWzRd OwotICAgIGludDMyX3QgIHBhdGNoX3NpemVbNF07Ci0gICAgZmxvYXQgICAgc3RyZW5ndGhbNF07 Ci0gICAgVmtEZXZpY2VBZGRyZXNzIGludGVncmFsX2Jhc2U7Ci0gICAgdWludDY0X3QgaW50ZWdy YWxfc2l6ZTsKLSAgICB1aW50NjRfdCBpbnRfc3RyaWRlOwotICAgIHVpbnQzMl90IHh5b2Zmc19z dGFydDsKLX0gSG9yaXpvbnRhbFB1c2hEYXRhOwotCi1zdGF0aWMgYXZfY29sZCBpbnQgaW5pdF93 ZWlnaHRzX3BpcGVsaW5lKEZGVnVsa2FuQ29udGV4dCAqdmtjdHgsIEZGVmtFeGVjUG9vbCAqZXhl YywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkZWdWxrYW5TaGFk ZXIgKnNoZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkZWa1NQ SVJWQ29tcGlsZXIgKnNwdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgdCwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3QgQVZQaXhGbXREZXNjcmlwdG9yICpkZXNjLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcGxhbmVzLCBpbnQgKm5iX3Jv d3MpCi17Ci0gICAgaW50IGVycjsKLSAgICB1aW50OF90ICpzcHZfZGF0YTsKLSAgICBzaXplX3Qg c3B2X2xlbjsKLSAgICB2b2lkICpzcHZfb3BhcXVlID0gTlVMTDsKLSAgICBGRlZ1bGthbkRlc2Ny aXB0b3JTZXRCaW5kaW5nICpkZXNjX3NldDsKLSAgICBpbnQgbWF4X2RpbSA9IEZGTUFYKHdpZHRo LCBoZWlnaHQpOwotICAgIHVpbnQzMl90IG1heF93ZyA9IHZrY3R4LT5wcm9wcy5wcm9wZXJ0aWVz LmxpbWl0cy5tYXhDb21wdXRlV29ya0dyb3VwU2l6ZVswXTsKLSAgICBpbnQgd2dfc2l6ZSwgd2df cm93czsKLQotICAgIC8qIFJvdW5kIHRoZSBtYXggd29ya2dyb3VwIHNpemUgdG8gdGhlIHByZXZp b3VzIHBvd2VyIG9mIHR3byAqLwotICAgIHdnX3NpemUgPSBtYXhfd2c7Ci0gICAgd2dfcm93cyA9 IDE7Ci0KLSAgICBpZiAobWF4X3dnID4gbWF4X2RpbSkgewotICAgICAgICB3Z19zaXplID0gbWF4 X2RpbTsKLSAgICB9IGVsc2UgaWYgKG1heF93ZyA8IG1heF9kaW0pIHsKLSAgICAgICAgLyogTWFr ZSBpdCBmaXQgKi8KLSAgICAgICAgd2hpbGUgKHdnX3NpemUqd2dfcm93cyA8IG1heF9kaW0pCi0g ICAgICAgICAgICB3Z19yb3dzKys7Ci0gICAgfQotCi0gICAgUkVUKGZmX3ZrX3NoYWRlcl9pbml0 KHZrY3R4LCBzaGQsICJubG1lYW5zX3dlaWdodHMiLAotICAgICAgICAgICAgICAgICAgICAgICAg ICBWS19TSEFERVJfU1RBR0VfQ09NUFVURV9CSVQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg IChjb25zdCBjaGFyICpbXSkgeyAiR0xfRVhUX2J1ZmZlcl9yZWZlcmVuY2UiLAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkdMX0VYVF9idWZmZXJfcmVmZXJl bmNlMiIgfSwgMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgd2dfc2l6ZSwgMSwgMSwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgMCkpOwotCi0gICAgKm5iX3Jvd3MgPSB3Z19yb3dzOwot Ci0gICAgaWYgKHQgPiAxKQotICAgICAgICBHTFNMQygwLCAjZXh0ZW5zaW9uIEdMX0VYVF9zaGFk ZXJfYXRvbWljX2Zsb2F0IDogcmVxdWlyZSAgICAgICAgICAgICAgKTsKLSAgICBHTFNMQygwLCAj ZXh0ZW5zaW9uIEdMX0FSQl9ncHVfc2hhZGVyX2ludDY0IDogcmVxdWlyZSAgICAgICAgICAgICAg ICAgICAgICk7Ci0gICAgR0xTTEMoMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIEdMU0xGKDAsICNkZWZpbmUg RFRZUEUgJXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LFRZUEVfTkFNRSk7Ci0gICAgR0xTTEYoMCwgI2RlZmluZSBUX0FMSUdOICVpICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsVFlQRV9TSVpFKTsKLSAgICBHTFNM QygwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICk7Ci0gICAgR0xTTEMoMCwgbGF5b3V0KGJ1ZmZlcl9yZWZlcmVuY2UsIGJ1 ZmZlcl9yZWZlcmVuY2VfYWxpZ24gPSBUX0FMSUdOKSBidWZmZXIgRGF0YUJ1ZmZlciB7ICApOwot ICAgIEdMU0xDKDEsICAgICBEVFlQRSB2W107ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBHTFNMQygwLCB9OyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgR0xT TEMoMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICApOwotICAgIEdMU0xDKDAsIGxheW91dChwdXNoX2NvbnN0YW50LCBzdGQ0 MzApIHVuaWZvcm0gcHVzaENvbnN0YW50cyB7ICAgICAgICAgICAgKTsKLSAgICBHTFNMQygxLCAg ICAgdXZlYzQgd2lkdGg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICk7Ci0gICAgR0xTTEMoMSwgICAgIHV2ZWM0IGhlaWdodDsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIEdMU0xDKDEsICAgICB1dmVj NCB3c19zdHJpZGU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KTsKLSAgICBHTFNMQygxLCAgICAgaXZlYzQgcGF0Y2hfc2l6ZTsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgR0xTTEMoMSwgICAgIHZlYzQgc3RyZW5n dGg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAg IEdMU0xDKDEsICAgICBEYXRhQnVmZmVyIGludGVncmFsX2Jhc2U7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKTsKLSAgICBHTFNMQygxLCAgICAgdWludDY0X3QgaW50ZWdyYWxf c2l6ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgR0xTTEMo MSwgICAgIHVpbnQ2NF90IGludF9zdHJpZGU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICApOwotICAgIEdMU0xDKDEsICAgICB1aW50IHh5b2Zmc19zdGFydDsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBHTFNMQygwLCB9OyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICk7Ci0gICAgR0xTTEMoMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotCi0gICAgZmZfdmtfc2hhZGVyX2FkZF9w dXNoX2NvbnN0KHNoZCwgMCwgc2l6ZW9mKEhvcml6b250YWxQdXNoRGF0YSksCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFZLX1NIQURFUl9TVEFHRV9DT01QVVRFX0JJVCk7Ci0KLSAg ICBkZXNjX3NldCA9IChGRlZ1bGthbkRlc2NyaXB0b3JTZXRCaW5kaW5nIFtdKSB7Ci0gICAgICAg IHsKLSAgICAgICAgICAgIC5uYW1lICAgICAgID0gImlucHV0X2ltZyIsCi0gICAgICAgICAgICAu dHlwZSAgICAgICA9IFZLX0RFU0NSSVBUT1JfVFlQRV9TVE9SQUdFX0lNQUdFLAotICAgICAgICAg ICAgLm1lbV9sYXlvdXQgPSBmZl92a19zaGFkZXJfcmVwX2ZtdCh2a2N0eC0+aW5wdXRfZm9ybWF0 LCBGRl9WS19SRVBfRkxPQVQpLAotICAgICAgICAgICAgLm1lbV9xdWFsaSAgPSAicmVhZG9ubHki LAotICAgICAgICAgICAgLmRpbWVuc2lvbnMgPSAyLAotICAgICAgICAgICAgLmVsZW1zICAgICAg PSBwbGFuZXMsCi0gICAgICAgICAgICAuc3RhZ2VzICAgICA9IFZLX1NIQURFUl9TVEFHRV9DT01Q VVRFX0JJVCwKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgLm5hbWUgICAgICAg ID0gIndlaWdodHNfYnVmZmVyXzAiLAotICAgICAgICAgICAgLnR5cGUgICAgICAgID0gVktfREVT Q1JJUFRPUl9UWVBFX1NUT1JBR0VfQlVGRkVSLAotICAgICAgICAgICAgLnN0YWdlcyAgICAgID0g VktfU0hBREVSX1NUQUdFX0NPTVBVVEVfQklULAotICAgICAgICAgICAgLmJ1Zl9jb250ZW50ID0g ImZsb2F0IHdlaWdodHNfMFtdOyIsCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAg IC5uYW1lICAgICAgICA9ICJzdW1zX2J1ZmZlcl8wIiwKLSAgICAgICAgICAgIC50eXBlICAgICAg ICA9IFZLX0RFU0NSSVBUT1JfVFlQRV9TVE9SQUdFX0JVRkZFUiwKLSAgICAgICAgICAgIC5zdGFn ZXMgICAgICA9IFZLX1NIQURFUl9TVEFHRV9DT01QVVRFX0JJVCwKLSAgICAgICAgICAgIC5idWZf Y29udGVudCA9ICJmbG9hdCBzdW1zXzBbXTsiLAotICAgICAgICB9LAotICAgICAgICB7Ci0gICAg ICAgICAgICAubmFtZSAgICAgICAgPSAid2VpZ2h0c19idWZmZXJfMSIsCi0gICAgICAgICAgICAu dHlwZSAgICAgICAgPSBWS19ERVNDUklQVE9SX1RZUEVfU1RPUkFHRV9CVUZGRVIsCi0gICAgICAg ICAgICAuc3RhZ2VzICAgICAgPSBWS19TSEFERVJfU1RBR0VfQ09NUFVURV9CSVQsCi0gICAgICAg ICAgICAuYnVmX2NvbnRlbnQgPSAiZmxvYXQgd2VpZ2h0c18xW107IiwKLSAgICAgICAgfSwKLSAg ICAgICAgewotICAgICAgICAgICAgLm5hbWUgICAgICAgID0gInN1bXNfYnVmZmVyXzEiLAotICAg ICAgICAgICAgLnR5cGUgICAgICAgID0gVktfREVTQ1JJUFRPUl9UWVBFX1NUT1JBR0VfQlVGRkVS LAotICAgICAgICAgICAgLnN0YWdlcyAgICAgID0gVktfU0hBREVSX1NUQUdFX0NPTVBVVEVfQklU LAotICAgICAgICAgICAgLmJ1Zl9jb250ZW50ID0gImZsb2F0IHN1bXNfMVtdOyIsCi0gICAgICAg IH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgIC5uYW1lICAgICAgICA9ICJ3ZWlnaHRzX2J1ZmZl cl8yIiwKLSAgICAgICAgICAgIC50eXBlICAgICAgICA9IFZLX0RFU0NSSVBUT1JfVFlQRV9TVE9S QUdFX0JVRkZFUiwKLSAgICAgICAgICAgIC5zdGFnZXMgICAgICA9IFZLX1NIQURFUl9TVEFHRV9D T01QVVRFX0JJVCwKLSAgICAgICAgICAgIC5idWZfY29udGVudCA9ICJmbG9hdCB3ZWlnaHRzXzJb XTsiLAotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAubmFtZSAgICAgICAgPSAi c3Vtc19idWZmZXJfMiIsCi0gICAgICAgICAgICAudHlwZSAgICAgICAgPSBWS19ERVNDUklQVE9S X1RZUEVfU1RPUkFHRV9CVUZGRVIsCi0gICAgICAgICAgICAuc3RhZ2VzICAgICAgPSBWS19TSEFE RVJfU1RBR0VfQ09NUFVURV9CSVQsCi0gICAgICAgICAgICAuYnVmX2NvbnRlbnQgPSAiZmxvYXQg c3Vtc18yW107IiwKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgLm5hbWUgICAg ICAgID0gIndlaWdodHNfYnVmZmVyXzMiLAotICAgICAgICAgICAgLnR5cGUgICAgICAgID0gVktf REVTQ1JJUFRPUl9UWVBFX1NUT1JBR0VfQlVGRkVSLAotICAgICAgICAgICAgLnN0YWdlcyAgICAg ID0gVktfU0hBREVSX1NUQUdFX0NPTVBVVEVfQklULAotICAgICAgICAgICAgLmJ1Zl9jb250ZW50 ID0gImZsb2F0IHdlaWdodHNfM1tdOyIsCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAg ICAgIC5uYW1lICAgICAgICA9ICJzdW1zX2J1ZmZlcl8zIiwKLSAgICAgICAgICAgIC50eXBlICAg ICAgICA9IFZLX0RFU0NSSVBUT1JfVFlQRV9TVE9SQUdFX0JVRkZFUiwKLSAgICAgICAgICAgIC5z dGFnZXMgICAgICA9IFZLX1NIQURFUl9TVEFHRV9DT01QVVRFX0JJVCwKLSAgICAgICAgICAgIC5i dWZfY29udGVudCA9ICJmbG9hdCBzdW1zXzNbXTsiLAotICAgICAgICB9LAotICAgIH07Ci0gICAg UkVUKGZmX3ZrX3NoYWRlcl9hZGRfZGVzY3JpcHRvcl9zZXQodmtjdHgsIHNoZCwgZGVzY19zZXQs IDEgKyAyKmRlc2MtPm5iX2NvbXBvbmVudHMsIDAsIDApKTsKLQotICAgIGRlc2Nfc2V0ID0gKEZG VnVsa2FuRGVzY3JpcHRvclNldEJpbmRpbmcgW10pIHsKLSAgICAgICAgewotICAgICAgICAgICAg Lm5hbWUgICAgICAgID0gInh5b2Zmc2V0c19idWZmZXIiLAotICAgICAgICAgICAgLnR5cGUgICAg ICAgID0gVktfREVTQ1JJUFRPUl9UWVBFX1NUT1JBR0VfQlVGRkVSLAotICAgICAgICAgICAgLm1l bV9xdWFsaSAgID0gInJlYWRvbmx5IiwKLSAgICAgICAgICAgIC5zdGFnZXMgICAgICA9IFZLX1NI QURFUl9TVEFHRV9DT01QVVRFX0JJVCwKLSAgICAgICAgICAgIC5idWZfY29udGVudCA9ICJpdmVj MiB4eW9mZnNldHNbXTsiLAotICAgICAgICB9LAotICAgIH07Ci0gICAgUkVUKGZmX3ZrX3NoYWRl cl9hZGRfZGVzY3JpcHRvcl9zZXQodmtjdHgsIHNoZCwgZGVzY19zZXQsIDEsIDEsIDApKTsKLQot ICAgIEdMU0xDKDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBHTFNMQygwLCB2b2lkIG1haW4oKSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0g ICAgR0xTTEMoMCwgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIEdMU0xDKDEsICAgICB1aW50NjRfdCBvZmZz ZXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAg ICBHTFNMQygxLCAgICAgRGF0YUJ1ZmZlciBkc3Q7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgR0xTTEMoMSwgICAgIGZsb2F0IHMxOyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAg IEdMU0xDKDEsICAgICBEVFlQRSBzMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBHTFNMQygxLCAgICAgRFRZUEUgcHJlZml4X3N1 bTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAg R0xTTEYoMSwgICAgIERUWVBFIHBzdW1bJWldOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAsKm5iX3Jvd3MpOwotICAgIEdMU0xDKDEsICAgICBpbnQgcjsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KTsKLSAgICBHTFNMQygxLCAgICAgaXZlYzIgcG9zOyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgR0xTTEMoMSwgICAgIGludCBwOyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAp OwotICAgIEdMU0xDKDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBHTFNMQygxLCAgICAgRGF0YUJ1ZmZl ciBpbnRlZ3JhbF9kYXRhOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7 Ci0gICAgR0xTTEYoMSwgICAgIGl2ZWMyIG9mZnNbJWldOyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAsVFlQRV9FTEVNUyk7Ci0gICAgR0xTTEMoMCwgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICApOwotICAgIEdMU0xDKDEsICAgICBpbnQgaW52b2NfaWR4ID0gaW50KGdsX1dvcmtH cm91cElELnopOyAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBHTFNMQygwLCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICk7Ci0gICAgR0xTTEMoMSwgICAgIG9mZnNldCA9IGludGVncmFsX3NpemUgKiBpbnZv Y19pZHg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIEdMU0xDKDEsICAgICBp bnRlZ3JhbF9kYXRhID0gRGF0YUJ1ZmZlcih1aW50NjRfdChpbnRlZ3JhbF9iYXNlKSArIG9mZnNl dCk7ICAgKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IFRZUEVfRUxFTVM7IGkrKykKLSAgICAg ICAgR0xTTEYoMSwgb2Zmc1slaV0gPSB4eW9mZnNldHNbeHlvZmZzX3N0YXJ0ICsgJWkqaW52b2Nf aWR4ICsgJWldOyAgICAgICAgICxpLFRZUEVfRUxFTVMsaSk7Ci0gICAgR0xTTEMoMCwgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICApOwotICAgIEdMU0xDKDEsICAgICBEVFlQRSBhOyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBHTFNMQygxLCAgICAgRFRZ UEUgYjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICk7Ci0gICAgR0xTTEMoMSwgICAgIERUWVBFIGM7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIEdMU0xDKDEsICAgICBEVFlQ RSBkOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKTsKLSAgICBHTFNMQygwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgR0xTTEMoMSwgICAgIERUWVBF IHBhdGNoX2RpZmY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICApOwotICAgIGlmIChUWVBFX0VMRU1TID09IDQpIHsKLSAgICAgICAgR0xTTEMoMSwgdmVjNCBz cmM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICk7Ci0gICAgICAgIEdMU0xDKDEsIHZlYzQgdzsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIEdM U0xDKDEsIHZlYzQgc3JjWzRdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICApOwotICAgICAgICBHTFNMQygxLCB2ZWM0IHdbNF07ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICB9Ci0gICAg R0xTTEMoMSwgICAgIGZsb2F0IHdfc3VtOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICApOwotICAgIEdMU0xDKDEsICAgICBmbG9hdCBzdW07ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBH TFNMQygwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICk7Ci0gICAgR0xTTEMoMSwgICAgIGJvb2wgbHQ7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIEdM U0xDKDEsICAgICBib29sIGd0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKTsKLSAgICBHTFNMQygwLCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0KLSAgICBm b3IgKGludCBpID0gMDsgaSA8IGRlc2MtPm5iX2NvbXBvbmVudHM7IGkrKykgewotICAgICAgICBp bnQgb2ZmID0gZGVzYy0+Y29tcFtpXS5vZmZzZXQgLyAoRkZBTElHTihkZXNjLT5jb21wW2ldLmRl cHRoLCA4KS84KTsKLSAgICAgICAgaWYgKHdpZHRoID49IGhlaWdodCkgewotICAgICAgICAgICAg aW5zZXJ0X2hvcml6b250YWxfcGFzcyhzaGQsICpuYl9yb3dzLCAxLCBkZXNjLT5jb21wW2ldLnBs YW5lLCBvZmYpOwotICAgICAgICAgICAgaW5zZXJ0X3ZlcnRpY2FsX3Bhc3Moc2hkLCAqbmJfcm93 cywgMCwgZGVzYy0+Y29tcFtpXS5wbGFuZSwgb2ZmKTsKLSAgICAgICAgICAgIGluc2VydF93ZWln aHRzX3Bhc3Moc2hkLCAqbmJfcm93cywgMCwgdCwgaSwgZGVzYy0+Y29tcFtpXS5wbGFuZSwgb2Zm KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGluc2VydF92ZXJ0aWNhbF9wYXNzKHNo ZCwgKm5iX3Jvd3MsIDEsIGRlc2MtPmNvbXBbaV0ucGxhbmUsIG9mZik7Ci0gICAgICAgICAgICBp bnNlcnRfaG9yaXpvbnRhbF9wYXNzKHNoZCwgKm5iX3Jvd3MsIDAsIGRlc2MtPmNvbXBbaV0ucGxh bmUsIG9mZik7Ci0gICAgICAgICAgICBpbnNlcnRfd2VpZ2h0c19wYXNzKHNoZCwgKm5iX3Jvd3Ms IDEsIHQsIGksIGRlc2MtPmNvbXBbaV0ucGxhbmUsIG9mZik7Ci0gICAgICAgIH0KLSAgICB9Ci0K LSAgICBHTFNMQygwLCB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0KLSAgICBSRVQoc3B2LT5jb21waWxlX3NoYWRl cih2a2N0eCwgc3B2LCBzaGQsICZzcHZfZGF0YSwgJnNwdl9sZW4sICJtYWluIiwgJnNwdl9vcGFx dWUpKTsKLSAgICBSRVQoZmZfdmtfc2hhZGVyX2xpbmsodmtjdHgsIHNoZCwgc3B2X2RhdGEsIHNw dl9sZW4sICJtYWluIikpOwotCi0gICAgUkVUKGZmX3ZrX3NoYWRlcl9yZWdpc3Rlcl9leGVjKHZr Y3R4LCBleGVjLCBzaGQpKTsKLQotZmFpbDoKLSAgICBpZiAoc3B2X29wYXF1ZSkKLSAgICAgICAg c3B2LT5mcmVlX3NoYWRlcihzcHYsICZzcHZfb3BhcXVlKTsKLQotICAgIHJldHVybiBlcnI7Ci19 Ci0KLXR5cGVkZWYgc3RydWN0IERlbm9pc2VQdXNoRGF0YSB7Ci0gICAgdWludDMyX3Qgd3Nfc3Ry aWRlWzRdOwotfSBEZW5vaXNlUHVzaERhdGE7Ci0KLXN0YXRpYyBhdl9jb2xkIGludCBpbml0X2Rl bm9pc2VfcGlwZWxpbmUoRkZWdWxrYW5Db250ZXh0ICp2a2N0eCwgRkZWa0V4ZWNQb29sICpleGVj LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGRlZ1bGthblNoYWRl ciAqc2hkLCBGRlZrU1BJUlZDb21waWxlciAqc3B2LAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCBBVlBpeEZtdERlc2NyaXB0b3IgKmRlc2MsIGludCBwbGFu ZXMpCi17Ci0gICAgaW50IGVycjsKLSAgICB1aW50OF90ICpzcHZfZGF0YTsKLSAgICBzaXplX3Qg c3B2X2xlbjsKLSAgICB2b2lkICpzcHZfb3BhcXVlID0gTlVMTDsKLSAgICBGRlZ1bGthbkRlc2Ny aXB0b3JTZXRCaW5kaW5nICpkZXNjX3NldDsKLQotICAgIFJFVChmZl92a19zaGFkZXJfaW5pdCh2 a2N0eCwgc2hkLCAibmxtZWFuc19kZW5vaXNlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg VktfU0hBREVSX1NUQUdFX0NPTVBVVEVfQklULAotICAgICAgICAgICAgICAgICAgICAgICAgICAo Y29uc3QgY2hhciAqW10pIHsgIkdMX0VYVF9idWZmZXJfcmVmZXJlbmNlIiwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJHTF9FWFRfYnVmZmVyX3JlZmVyZW5j ZTIiIH0sIDIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDMyLCAzMiwgMSwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgMCkpOwotCi0gICAgR0xTTEMoMCwgbGF5b3V0KHB1c2hfY29uc3Rh bnQsIHN0ZDQzMCkgdW5pZm9ybSBwdXNoQ29uc3RhbnRzIHsgICAgICAgICk7Ci0gICAgR0xTTEMo MSwgICAgdXZlYzQgd3Nfc3RyaWRlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICk7Ci0gICAgR0xTTEMoMCwgfTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0KLSAgICBmZl92a19zaGFkZXJfYWRkX3B1 c2hfY29uc3Qoc2hkLCAwLCBzaXplb2YoRGVub2lzZVB1c2hEYXRhKSwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgVktfU0hBREVSX1NUQUdFX0NPTVBVVEVfQklUKTsKLQotICAgIGRl c2Nfc2V0ID0gKEZGVnVsa2FuRGVzY3JpcHRvclNldEJpbmRpbmcgW10pIHsKLSAgICAgICAgewot ICAgICAgICAgICAgLm5hbWUgICAgICAgID0gImlucHV0X2ltZyIsCi0gICAgICAgICAgICAudHlw ZSAgICAgICAgPSBWS19ERVNDUklQVE9SX1RZUEVfU1RPUkFHRV9JTUFHRSwKLSAgICAgICAgICAg IC5tZW1fbGF5b3V0ICA9IGZmX3ZrX3NoYWRlcl9yZXBfZm10KHZrY3R4LT5pbnB1dF9mb3JtYXQs IEZGX1ZLX1JFUF9GTE9BVCksCi0gICAgICAgICAgICAubWVtX3F1YWxpICAgPSAicmVhZG9ubHki LAotICAgICAgICAgICAgLmRpbWVuc2lvbnMgID0gMiwKLSAgICAgICAgICAgIC5lbGVtcyAgICAg ICA9IHBsYW5lcywKLSAgICAgICAgICAgIC5zdGFnZXMgICAgICA9IFZLX1NIQURFUl9TVEFHRV9D T01QVVRFX0JJVCwKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgLm5hbWUgICAg ICAgID0gIm91dHB1dF9pbWciLAotICAgICAgICAgICAgLnR5cGUgICAgICAgID0gVktfREVTQ1JJ UFRPUl9UWVBFX1NUT1JBR0VfSU1BR0UsCi0gICAgICAgICAgICAubWVtX2xheW91dCAgPSBmZl92 a19zaGFkZXJfcmVwX2ZtdCh2a2N0eC0+b3V0cHV0X2Zvcm1hdCwgRkZfVktfUkVQX0ZMT0FUKSwK LSAgICAgICAgICAgIC5tZW1fcXVhbGkgICA9ICJ3cml0ZW9ubHkiLAotICAgICAgICAgICAgLmRp bWVuc2lvbnMgID0gMiwKLSAgICAgICAgICAgIC5lbGVtcyAgICAgICA9IHBsYW5lcywKLSAgICAg ICAgICAgIC5zdGFnZXMgICAgICA9IFZLX1NIQURFUl9TVEFHRV9DT01QVVRFX0JJVCwKLSAgICAg ICAgfSwKLSAgICB9OwotICAgIFJFVChmZl92a19zaGFkZXJfYWRkX2Rlc2NyaXB0b3Jfc2V0KHZr Y3R4LCBzaGQsIGRlc2Nfc2V0LCAyLCAwLCAwKSk7Ci0KLSAgICBkZXNjX3NldCA9IChGRlZ1bGth bkRlc2NyaXB0b3JTZXRCaW5kaW5nIFtdKSB7Ci0gICAgICAgIHsKLSAgICAgICAgICAgIC5uYW1l ICAgICAgICA9ICJ3ZWlnaHRzX2J1ZmZlcl8wIiwKLSAgICAgICAgICAgIC50eXBlICAgICAgICA9 IFZLX0RFU0NSSVBUT1JfVFlQRV9TVE9SQUdFX0JVRkZFUiwKLSAgICAgICAgICAgIC5tZW1fcXVh bGkgICA9ICJyZWFkb25seSIsCi0gICAgICAgICAgICAuc3RhZ2VzICAgICAgPSBWS19TSEFERVJf U1RBR0VfQ09NUFVURV9CSVQsCi0gICAgICAgICAgICAuYnVmX2NvbnRlbnQgPSAiZmxvYXQgd2Vp Z2h0c18wW107IiwKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgLm5hbWUgICAg ICAgID0gInN1bXNfYnVmZmVyXzAiLAotICAgICAgICAgICAgLnR5cGUgICAgICAgID0gVktfREVT Q1JJUFRPUl9UWVBFX1NUT1JBR0VfQlVGRkVSLAotICAgICAgICAgICAgLm1lbV9xdWFsaSAgID0g InJlYWRvbmx5IiwKLSAgICAgICAgICAgIC5zdGFnZXMgICAgICA9IFZLX1NIQURFUl9TVEFHRV9D T01QVVRFX0JJVCwKLSAgICAgICAgICAgIC5idWZfY29udGVudCA9ICJmbG9hdCBzdW1zXzBbXTsi LAotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAubmFtZSAgICAgICAgPSAid2Vp Z2h0c19idWZmZXJfMSIsCi0gICAgICAgICAgICAudHlwZSAgICAgICAgPSBWS19ERVNDUklQVE9S X1RZUEVfU1RPUkFHRV9CVUZGRVIsCi0gICAgICAgICAgICAubWVtX3F1YWxpICAgPSAicmVhZG9u bHkiLAotICAgICAgICAgICAgLnN0YWdlcyAgICAgID0gVktfU0hBREVSX1NUQUdFX0NPTVBVVEVf QklULAotICAgICAgICAgICAgLmJ1Zl9jb250ZW50ID0gImZsb2F0IHdlaWdodHNfMVtdOyIsCi0g ICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgIC5uYW1lICAgICAgICA9ICJzdW1zX2J1 ZmZlcl8xIiwKLSAgICAgICAgICAgIC50eXBlICAgICAgICA9IFZLX0RFU0NSSVBUT1JfVFlQRV9T VE9SQUdFX0JVRkZFUiwKLSAgICAgICAgICAgIC5tZW1fcXVhbGkgICA9ICJyZWFkb25seSIsCi0g ICAgICAgICAgICAuc3RhZ2VzICAgICAgPSBWS19TSEFERVJfU1RBR0VfQ09NUFVURV9CSVQsCi0g ICAgICAgICAgICAuYnVmX2NvbnRlbnQgPSAiZmxvYXQgc3Vtc18xW107IiwKLSAgICAgICAgfSwK LSAgICAgICAgewotICAgICAgICAgICAgLm5hbWUgICAgICAgID0gIndlaWdodHNfYnVmZmVyXzIi LAotICAgICAgICAgICAgLnR5cGUgICAgICAgID0gVktfREVTQ1JJUFRPUl9UWVBFX1NUT1JBR0Vf QlVGRkVSLAotICAgICAgICAgICAgLm1lbV9xdWFsaSAgID0gInJlYWRvbmx5IiwKLSAgICAgICAg ICAgIC5zdGFnZXMgICAgICA9IFZLX1NIQURFUl9TVEFHRV9DT01QVVRFX0JJVCwKLSAgICAgICAg ICAgIC5idWZfY29udGVudCA9ICJmbG9hdCB3ZWlnaHRzXzJbXTsiLAotICAgICAgICB9LAotICAg ICAgICB7Ci0gICAgICAgICAgICAubmFtZSAgICAgICAgPSAic3Vtc19idWZmZXJfMiIsCi0gICAg ICAgICAgICAudHlwZSAgICAgICAgPSBWS19ERVNDUklQVE9SX1RZUEVfU1RPUkFHRV9CVUZGRVIs Ci0gICAgICAgICAgICAubWVtX3F1YWxpICAgPSAicmVhZG9ubHkiLAotICAgICAgICAgICAgLnN0 YWdlcyAgICAgID0gVktfU0hBREVSX1NUQUdFX0NPTVBVVEVfQklULAotICAgICAgICAgICAgLmJ1 Zl9jb250ZW50ID0gImZsb2F0IHN1bXNfMltdOyIsCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAg ICAgICAgICAgIC5uYW1lICAgICAgICA9ICJ3ZWlnaHRzX2J1ZmZlcl8zIiwKLSAgICAgICAgICAg IC50eXBlICAgICAgICA9IFZLX0RFU0NSSVBUT1JfVFlQRV9TVE9SQUdFX0JVRkZFUiwKLSAgICAg ICAgICAgIC5tZW1fcXVhbGkgICA9ICJyZWFkb25seSIsCi0gICAgICAgICAgICAuc3RhZ2VzICAg ICAgPSBWS19TSEFERVJfU1RBR0VfQ09NUFVURV9CSVQsCi0gICAgICAgICAgICAuYnVmX2NvbnRl bnQgPSAiZmxvYXQgd2VpZ2h0c18zW107IiwKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAg ICAgICAgLm5hbWUgICAgICAgID0gInN1bXNfYnVmZmVyXzMiLAotICAgICAgICAgICAgLnR5cGUg ICAgICAgID0gVktfREVTQ1JJUFRPUl9UWVBFX1NUT1JBR0VfQlVGRkVSLAotICAgICAgICAgICAg Lm1lbV9xdWFsaSAgID0gInJlYWRvbmx5IiwKLSAgICAgICAgICAgIC5zdGFnZXMgICAgICA9IFZL X1NIQURFUl9TVEFHRV9DT01QVVRFX0JJVCwKLSAgICAgICAgICAgIC5idWZfY29udGVudCA9ICJm bG9hdCBzdW1zXzNbXTsiLAotICAgICAgICB9LAotICAgIH07Ci0KLSAgICBSRVQoZmZfdmtfc2hh ZGVyX2FkZF9kZXNjcmlwdG9yX3NldCh2a2N0eCwgc2hkLCBkZXNjX3NldCwgMipkZXNjLT5uYl9j b21wb25lbnRzLCAwLCAwKSk7Ci0KLSAgICBHTFNMQygwLCB2b2lkIG1haW4oKSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgR0xTTEMo MCwgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICApOwotICAgIEdMU0xDKDEsICAgICBpdmVjMiBzaXplOyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBHTFNMQygxLCAgICAg Y29uc3QgaXZlYzIgcG9zID0gaXZlYzIoZ2xfR2xvYmFsSW52b2NhdGlvbklELnh5KTsgICAgICAg ICAgICk7Ci0gICAgR0xTTEMoMSwgICAgIGNvbnN0IHVpbnQgcGxhbmUgPSB1aW50KGdsX1dvcmtH cm91cElELnopOyAgICAgICAgICAgICAgICAgICApOwotICAgIEdMU0xDKDAsICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsK LSAgICBHTFNMQygxLCAgICAgZmxvYXQgd19zdW07ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgR0xTTEMoMSwgICAgIGZsb2F0IHN1bTsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIEdM U0xDKDEsICAgICB2ZWM0IHNyYzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKTsKLSAgICBHTFNMQygxLCAgICAgdmVjNCByOyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgR0xTTEMoMCwg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICApOwotICAgIEdMU0xDKDEsICAgICBzaXplID0gaW1hZ2VTaXplKG91dHB1dF9pbWdb cGxhbmVdKTsgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBHTFNMQygxLCAgICAgaWYg KCFJU19XSVRISU4ocG9zLCBzaXplKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICk7Ci0gICAgR0xTTEMoMiwgICAgICAgICByZXR1cm47ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIEdMU0xDKDAsICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAg ICBHTFNMQygxLCAgICAgc3JjID0gaW1hZ2VMb2FkKGlucHV0X2ltZ1twbGFuZV0sIHBvcyk7ICAg ICAgICAgICAgICAgICAgICAgICk7Ci0gICAgR0xTTEMoMCwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIGZvciAo aW50IGMgPSAwOyBjIDwgZGVzYy0+bmJfY29tcG9uZW50czsgYysrKSB7Ci0gICAgICAgIGludCBv ZmYgPSBkZXNjLT5jb21wW2NdLm9mZnNldCAvIChGRkFMSUdOKGRlc2MtPmNvbXBbY10uZGVwdGgs IDgpLzgpOwotICAgICAgICBHTFNMRigxLCBpZiAocGxhbmUgPT0gJWkpIHsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLGRlc2MtPmNvbXBbY10ucGxhbmUpOwot ICAgICAgICBHTFNMRigyLCAgICAgd19zdW0gPSB3ZWlnaHRzXyVpW3Bvcy55KndzX3N0cmlkZVsl aV0gKyBwb3MueF07ICAgICAgICAgICAgICAgICAgICAgICAgICAgLGMsIGMpOwotICAgICAgICBH TFNMRigyLCAgICAgc3VtID0gc3Vtc18laVtwb3MueSp3c19zdHJpZGVbJWldICsgcG9zLnhdOyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLGMsIGMpOwotICAgICAgICBHTFNMRigyLCAg ICAgclslaV0gPSAoc3VtICsgc3JjWyVpXSoyNTUpIC8gKDEuMCArIHdfc3VtKSAvIDI1NTsgICAg ICAgICAgICAgICAgICAgICAsb2ZmLCBvZmYpOwotICAgICAgICBHTFNMQygxLCB9ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICApOwotICAgICAgICBHTFNMQygwLCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICApOwotICAgIH0KLSAgICBHTFNMQygxLCBpbWFnZVN0b3JlKG91dHB1dF9pbWdbcGxh bmVdLCBwb3MsIHIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgR0xTTEMoMCwg fSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICApOwotCi0gICAgUkVUKHNwdi0+Y29tcGlsZV9zaGFkZXIodmtjdHgsIHNwdiwgc2hk LCAmc3B2X2RhdGEsICZzcHZfbGVuLCAibWFpbiIsICZzcHZfb3BhcXVlKSk7Ci0gICAgUkVUKGZm X3ZrX3NoYWRlcl9saW5rKHZrY3R4LCBzaGQsIHNwdl9kYXRhLCBzcHZfbGVuLCAibWFpbiIpKTsK LQotICAgIFJFVChmZl92a19zaGFkZXJfcmVnaXN0ZXJfZXhlYyh2a2N0eCwgZXhlYywgc2hkKSk7 Ci0KLWZhaWw6Ci0gICAgaWYgKHNwdl9vcGFxdWUpCi0gICAgICAgIHNwdi0+ZnJlZV9zaGFkZXIo c3B2LCAmc3B2X29wYXF1ZSk7Ci0KLSAgICByZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgYXZfY29s ZCBpbnQgaW5pdF9maWx0ZXIoQVZGaWx0ZXJDb250ZXh0ICpjdHgpCi17Ci0gICAgaW50IHJhZCwg ZXJyOwotICAgIGludCB4Y250ID0gMCwgeWNudCA9IDA7Ci0gICAgTkxNZWFuc1Z1bGthbkNvbnRl eHQgKnMgPSBjdHgtPnByaXY7Ci0gICAgRkZWdWxrYW5Db250ZXh0ICp2a2N0eCA9ICZzLT52a2N0 eDsKLSAgICBjb25zdCBpbnQgcGxhbmVzID0gYXZfcGl4X2ZtdF9jb3VudF9wbGFuZXMocy0+dmtj dHgub3V0cHV0X2Zvcm1hdCk7Ci0gICAgRkZWa1NQSVJWQ29tcGlsZXIgKnNwdiA9IE5VTEw7Ci0g ICAgaW50ICpvZmZzZXRzX2J1ZjsKLSAgICBpbnQgb2Zmc2V0c19kaXNwYXRjaGVkID0gMCwgbmJf ZGlzcGF0Y2hlcyA9IDA7Ci0KLSAgICBjb25zdCBBVlBpeEZtdERlc2NyaXB0b3IgKmRlc2M7Ci0g ICAgZGVzYyA9IGF2X3BpeF9mbXRfZGVzY19nZXQodmtjdHgtPm91dHB1dF9mb3JtYXQpOwotICAg IGlmICghZGVzYykKLSAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKLQotICAgIGlmICgh KHMtPm9wdHMuciAmIDEpKSB7Ci0gICAgICAgIHMtPm9wdHMuciB8PSAxOwotICAgICAgICBhdl9s b2coY3R4LCBBVl9MT0dfV0FSTklORywgIlJlc2VhcmNoIHNpemUgc2hvdWxkIGJlIG9kZCwgc2V0 dGluZyB0byAlaSIsCi0gICAgICAgICAgICAgICBzLT5vcHRzLnIpOwotICAgIH0KLQotICAgIGlm ICghKHMtPm9wdHMucCAmIDEpKSB7Ci0gICAgICAgIHMtPm9wdHMucCB8PSAxOwotICAgICAgICBh dl9sb2coY3R4LCBBVl9MT0dfV0FSTklORywgIlBhdGNoIHNpemUgc2hvdWxkIGJlIG9kZCwgc2V0 dGluZyB0byAlaSIsCi0gICAgICAgICAgICAgICBzLT5vcHRzLnApOwotICAgIH0KLQotICAgIGZv ciAoaW50IGkgPSAwOyBpIDwgNDsgaSsrKSB7Ci0gICAgICAgIGRvdWJsZSBzdHIgPSAocy0+b3B0 cy5zY1tpXSA+IDEuMCkgPyBzLT5vcHRzLnNjW2ldIDogcy0+b3B0cy5zOwotICAgICAgICBpbnQg cHMgPSAocy0+b3B0cy5wY1tpXSA/IHMtPm9wdHMucGNbaV0gOiBzLT5vcHRzLnApOwotICAgICAg ICBzdHIgID0gMTAuMGYqc3RyOwotICAgICAgICBzdHIgKj0gLXN0cjsKLSAgICAgICAgc3RyICA9 IDI1NS4wKjI1NS4wIC8gc3RyOwotICAgICAgICBzLT5zdHJlbmd0aFtpXSA9IHN0cjsKLSAgICAg ICAgaWYgKCEocHMgJiAxKSkgewotICAgICAgICAgICAgcHMgfD0gMTsKLSAgICAgICAgICAgIGF2 X2xvZyhjdHgsIEFWX0xPR19XQVJOSU5HLCAiUGF0Y2ggc2l6ZSBzaG91bGQgYmUgb2RkLCBzZXR0 aW5nIHRvICVpIiwKLSAgICAgICAgICAgICAgICAgICBwcyk7Ci0gICAgICAgIH0KLSAgICAgICAg cy0+cGF0Y2hbaV0gPSBwcyAvIDI7Ci0gICAgfQotCi0gICAgcmFkID0gcy0+b3B0cy5yLzI7Ci0g ICAgcy0+bmJfb2Zmc2V0cyA9ICgyKnJhZCArIDEpKigyKnJhZCArIDEpIC0gMTsKLSAgICBzLT54 b2Zmc2V0cyA9IGF2X21hbGxvYyhzLT5uYl9vZmZzZXRzKnNpemVvZigqcy0+eG9mZnNldHMpKTsK LSAgICBzLT55b2Zmc2V0cyA9IGF2X21hbGxvYyhzLT5uYl9vZmZzZXRzKnNpemVvZigqcy0+eW9m ZnNldHMpKTsKLSAgICBzLT5uYl9vZmZzZXRzID0gMDsKLQotICAgIGZvciAoaW50IHggPSAtcmFk OyB4IDw9IHJhZDsgeCsrKSB7Ci0gICAgICAgIGZvciAoaW50IHkgPSAtcmFkOyB5IDw9IHJhZDsg eSsrKSB7Ci0gICAgICAgICAgICBpZiAoIXggJiYgIXkpCi0gICAgICAgICAgICAgICAgY29udGlu dWU7Ci0KLSAgICAgICAgICAgIHMtPnhvZmZzZXRzW3hjbnQrK10gPSB4OwotICAgICAgICAgICAg cy0+eW9mZnNldHNbeWNudCsrXSA9IHk7Ci0gICAgICAgICAgICBzLT5uYl9vZmZzZXRzKys7Ci0g ICAgICAgIH0KLSAgICB9Ci0KLSAgICBSRVQoZmZfdmtfY3JlYXRlX2J1Zigmcy0+dmtjdHgsICZz LT54eW9mZnNldHNfYnVmLCAyKnMtPm5iX29mZnNldHMqc2l6ZW9mKGludDMyX3QpLCBOVUxMLCBO VUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgIFZLX0JVRkZFUl9VU0FHRV9TSEFERVJfREVW SUNFX0FERFJFU1NfQklUIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICBWS19CVUZGRVJfVVNB R0VfU1RPUkFHRV9CVUZGRVJfQklULAotICAgICAgICAgICAgICAgICAgICAgICAgIFZLX01FTU9S WV9QUk9QRVJUWV9IT1NUX1ZJU0lCTEVfQklUIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICBW S19NRU1PUllfUFJPUEVSVFlfREVWSUNFX0xPQ0FMX0JJVCkpOwotICAgIFJFVChmZl92a19tYXBf YnVmZmVyKCZzLT52a2N0eCwgJnMtPnh5b2Zmc2V0c19idWYsICh1aW50OF90ICoqKSZvZmZzZXRz X2J1ZiwgMCkpOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyKnMtPm5iX29mZnNldHM7IGkg Kz0gMikgewotICAgICAgICBvZmZzZXRzX2J1ZltpICsgMF0gPSBzLT54b2Zmc2V0c1tpID4+IDFd OwotICAgICAgICBvZmZzZXRzX2J1ZltpICsgMV0gPSBzLT55b2Zmc2V0c1tpID4+IDFdOwotICAg IH0KLQotICAgIFJFVChmZl92a191bm1hcF9idWZmZXIoJnMtPnZrY3R4LCAmcy0+eHlvZmZzZXRz X2J1ZiwgMSkpOwotCi0gICAgcy0+b3B0cy50ID0gRkZNSU4ocy0+b3B0cy50LCAoRkZBTElHTihz LT5uYl9vZmZzZXRzLCBUWVBFX0VMRU1TKSAvIFRZUEVfRUxFTVMpKTsKLSAgICBpZiAoIXZrY3R4 LT5hdG9taWNfZmxvYXRfZmVhdHMuc2hhZGVyQnVmZmVyRmxvYXQzMkF0b21pY0FkZCkgewotICAg ICAgICBhdl9sb2coY3R4LCBBVl9MT0dfV0FSTklORywgIkRldmljZSBkb2Vzbid0IHN1cHBvcnQg YXRvbWljIGZsb2F0IGFkZHMsICIKLSAgICAgICAgICAgICAgICJkaXNhYmxpbmcgZGlzcGF0Y2gg cGFyYWxsZWxpc21cbiIpOwotICAgICAgICBzLT5vcHRzLnQgPSAxOwotICAgIH0KLQotICAgIHNw diA9IGZmX3ZrX3NwaXJ2X2luaXQoKTsKLSAgICBpZiAoIXNwdikgewotICAgICAgICBhdl9sb2co Y3R4LCBBVl9MT0dfRVJST1IsICJVbmFibGUgdG8gaW5pdGlhbGl6ZSBTUElSLVYgY29tcGlsZXIh XG4iKTsKLSAgICAgICAgcmV0dXJuIEFWRVJST1JfRVhURVJOQUw7Ci0gICAgfQotCi0gICAgcy0+ cWYgPSBmZl92a19xZl9maW5kKHZrY3R4LCBWS19RVUVVRV9DT01QVVRFX0JJVCwgMCk7Ci0gICAg aWYgKCFzLT5xZikgewotICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJEZXZpY2Ug aGFzIG5vIGNvbXB1dGUgcXVldWVzXG4iKTsKLSAgICAgICAgZXJyID0gQVZFUlJPUihFTk9UU1VQ KTsKLSAgICAgICAgZ290byBmYWlsOwotICAgIH0KLQotICAgIFJFVChmZl92a19leGVjX3Bvb2xf aW5pdCh2a2N0eCwgcy0+cWYsICZzLT5lLCAxLCAwLCAwLCAwLCBOVUxMKSk7Ci0KLSAgICBSRVQo aW5pdF93ZWlnaHRzX3BpcGVsaW5lKHZrY3R4LCAmcy0+ZSwgJnMtPnNoZF93ZWlnaHRzLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3B2LCBzLT52a2N0eC5vdXRwdXRfd2lkdGgsIHMt PnZrY3R4Lm91dHB1dF9oZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLT5v cHRzLnQsIGRlc2MsIHBsYW5lcywgJnMtPnBsX3dlaWdodHNfcm93cykpOwotCi0gICAgUkVUKGlu aXRfZGVub2lzZV9waXBlbGluZSh2a2N0eCwgJnMtPmUsICZzLT5zaGRfZGVub2lzZSwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHNwdiwgZGVzYywgcGxhbmVzKSk7Ci0KLSAgICBSRVQo ZmZfdmtfc2hhZGVyX3VwZGF0ZV9kZXNjX2J1ZmZlcih2a2N0eCwgJnMtPmUuY29udGV4dHNbMF0s ICZzLT5zaGRfd2VpZ2h0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAxLCAwLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnMtPnh5b2Zm c2V0c19idWYsIDAsIHMtPnh5b2Zmc2V0c19idWYuc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFZLX0ZPUk1BVF9VTkRFRklORUQpKTsKLQotICAgIGRvIHsKLSAgICAg ICAgaW50IHdnX2ludm9jID0gRkZNSU4oKHMtPm5iX29mZnNldHMgLSBvZmZzZXRzX2Rpc3BhdGNo ZWQpL1RZUEVfRUxFTVMsIHMtPm9wdHMudCk7Ci0gICAgICAgIHdnX2ludm9jID0gRkZNSU4od2df aW52b2MsIHZrY3R4LT5wcm9wcy5wcm9wZXJ0aWVzLmxpbWl0cy5tYXhDb21wdXRlV29ya0dyb3Vw Q291bnRbMl0pOwotICAgICAgICBvZmZzZXRzX2Rpc3BhdGNoZWQgKz0gd2dfaW52b2MgKiBUWVBF X0VMRU1TOwotICAgICAgICBuYl9kaXNwYXRjaGVzKys7Ci0gICAgfSB3aGlsZSAob2Zmc2V0c19k aXNwYXRjaGVkIDwgcy0+bmJfb2Zmc2V0cyk7Ci0KLSAgICBhdl9sb2coY3R4LCBBVl9MT0dfVkVS Qk9TRSwgIkZpbHRlciBpbml0aWFsaXplZCwgJWkgeC95IG9mZnNldHMsICVpIGRpc3BhdGNoZXNc biIsCi0gICAgICAgICAgIHMtPm5iX29mZnNldHMsIG5iX2Rpc3BhdGNoZXMpOwotCi0gICAgcy0+ aW5pdGlhbGl6ZWQgPSAxOwotCi1mYWlsOgotICAgIGlmIChzcHYpCi0gICAgICAgIHNwdi0+dW5p bml0KCZzcHYpOwotCi0gICAgcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBkZW5vaXNlX3Bh c3MoTkxNZWFuc1Z1bGthbkNvbnRleHQgKnMsIEZGVmtFeGVjQ29udGV4dCAqZXhlYywKLSAgICAg ICAgICAgICAgICAgICAgICAgIEZGVmtCdWZmZXIgKndzX3ZrLCB1aW50MzJfdCB3c19zdHJpZGVb NF0pCi17Ci0gICAgRkZWdWxrYW5Db250ZXh0ICp2a2N0eCA9ICZzLT52a2N0eDsKLSAgICBGRlZ1 bGthbkZ1bmN0aW9ucyAqdmsgPSAmdmtjdHgtPnZrZm47Ci0gICAgVmtCdWZmZXJNZW1vcnlCYXJy aWVyMiBidWZfYmFyWzhdOwotICAgIGludCBuYl9idWZfYmFyID0gMDsKLQotICAgIERlbm9pc2VQ dXNoRGF0YSBwZCA9IHsKLSAgICAgICAgeyB3c19zdHJpZGVbMF0sIHdzX3N0cmlkZVsxXSwgd3Nf c3RyaWRlWzJdLCB3c19zdHJpZGVbM10gfSwKLSAgICB9OwotCi0gICAgLyogRGVub2lzZSBwYXNz IHBpcGVsaW5lICovCi0gICAgZmZfdmtfZXhlY19iaW5kX3NoYWRlcih2a2N0eCwgZXhlYywgJnMt PnNoZF9kZW5vaXNlKTsKLQotICAgIC8qIFB1c2ggZGF0YSAqLwotICAgIGZmX3ZrX3NoYWRlcl91 cGRhdGVfcHVzaF9jb25zdCh2a2N0eCwgZXhlYywgJnMtPnNoZF9kZW5vaXNlLAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBWS19TSEFERVJfU1RBR0VfQ09NUFVURV9CSVQsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIHNpemVvZihwZCksICZwZCk7Ci0K LSAgICBidWZfYmFyW25iX2J1Zl9iYXIrK10gPSAoVmtCdWZmZXJNZW1vcnlCYXJyaWVyMikgewot ICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9CVUZGRVJfTUVNT1JZX0JBUlJJRVJf MiwKLSAgICAgICAgLnNyY1N0YWdlTWFzayA9IHdzX3ZrLT5zdGFnZSwKLSAgICAgICAgLmRzdFN0 YWdlTWFzayA9IFZLX1BJUEVMSU5FX1NUQUdFXzJfQ09NUFVURV9TSEFERVJfQklULAotICAgICAg ICAuc3JjQWNjZXNzTWFzayA9IHdzX3ZrLT5hY2Nlc3MsCi0gICAgICAgIC5kc3RBY2Nlc3NNYXNr ID0gVktfQUNDRVNTXzJfU0hBREVSX1NUT1JBR0VfUkVBRF9CSVQsCi0gICAgICAgIC5zcmNRdWV1 ZUZhbWlseUluZGV4ID0gVktfUVVFVUVfRkFNSUxZX0lHTk9SRUQsCi0gICAgICAgIC5kc3RRdWV1 ZUZhbWlseUluZGV4ID0gVktfUVVFVUVfRkFNSUxZX0lHTk9SRUQsCi0gICAgICAgIC5idWZmZXIg PSB3c192ay0+YnVmLAotICAgICAgICAuc2l6ZSA9IHdzX3ZrLT5zaXplLAotICAgICAgICAub2Zm c2V0ID0gMCwKLSAgICB9OwotCi0gICAgdmstPkNtZFBpcGVsaW5lQmFycmllcjIoZXhlYy0+YnVm LCAmKFZrRGVwZW5kZW5jeUluZm8pIHsKLSAgICAgICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVS RV9UWVBFX0RFUEVOREVOQ1lfSU5GTywKLSAgICAgICAgICAgIC5wQnVmZmVyTWVtb3J5QmFycmll cnMgPSBidWZfYmFyLAotICAgICAgICAgICAgLmJ1ZmZlck1lbW9yeUJhcnJpZXJDb3VudCA9IG5i X2J1Zl9iYXIsCi0gICAgICAgIH0pOwotICAgIHdzX3ZrLT5zdGFnZSA9IGJ1Zl9iYXJbMF0uZHN0 U3RhZ2VNYXNrOwotICAgIHdzX3ZrLT5hY2Nlc3MgPSBidWZfYmFyWzBdLmRzdEFjY2Vzc01hc2s7 Ci0KLSAgICAvKiBFbmQgb2YgZGVub2lzZSBwYXNzICovCi0gICAgdmstPkNtZERpc3BhdGNoKGV4 ZWMtPmJ1ZiwKLSAgICAgICAgICAgICAgICAgICAgRkZBTElHTih2a2N0eC0+b3V0cHV0X3dpZHRo LCAgcy0+c2hkX2Rlbm9pc2UubGdfc2l6ZVswXSkvcy0+c2hkX2Rlbm9pc2UubGdfc2l6ZVswXSwK LSAgICAgICAgICAgICAgICAgICAgRkZBTElHTih2a2N0eC0+b3V0cHV0X2hlaWdodCwgcy0+c2hk X2Rlbm9pc2UubGdfc2l6ZVsxXSkvcy0+c2hkX2Rlbm9pc2UubGdfc2l6ZVsxXSwKLSAgICAgICAg ICAgICAgICAgICAgYXZfcGl4X2ZtdF9jb3VudF9wbGFuZXMocy0+dmtjdHgub3V0cHV0X2Zvcm1h dCkpOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgbmxtZWFuc192dWxrYW5fZmls dGVyX2ZyYW1lKEFWRmlsdGVyTGluayAqbGluaywgQVZGcmFtZSAqaW4pCi17Ci0gICAgaW50IGVy cjsKLSAgICBBVkZyYW1lICpvdXQgPSBOVUxMOwotICAgIEFWRmlsdGVyQ29udGV4dCAqY3R4ID0g bGluay0+ZHN0OwotICAgIE5MTWVhbnNWdWxrYW5Db250ZXh0ICpzID0gY3R4LT5wcml2OwotICAg IEFWRmlsdGVyTGluayAqb3V0bGluayA9IGN0eC0+b3V0cHV0c1swXTsKLSAgICBGRlZ1bGthbkNv bnRleHQgKnZrY3R4ID0gJnMtPnZrY3R4OwotICAgIEZGVnVsa2FuRnVuY3Rpb25zICp2ayA9ICZ2 a2N0eC0+dmtmbjsKLQotICAgIGNvbnN0IEFWUGl4Rm10RGVzY3JpcHRvciAqZGVzYzsKLSAgICBp bnQgcGxhbmVfd2lkdGhzWzRdOwotICAgIGludCBwbGFuZV9oZWlnaHRzWzRdOwotCi0gICAgaW50 IG9mZnNldHNfZGlzcGF0Y2hlZCA9IDA7Ci0KLSAgICAvKiBJbnRlZ3JhbCAqLwotICAgIEFWQnVm ZmVyUmVmICppbnRlZ3JhbF9idWYgPSBOVUxMOwotICAgIEZGVmtCdWZmZXIgKmludGVncmFsX3Zr OwotICAgIHNpemVfdCBpbnRfc3RyaWRlOwotICAgIHNpemVfdCBpbnRfc2l6ZTsKLQotICAgIC8q IFdlaWdodHMvc3VtcyAqLwotICAgIEFWQnVmZmVyUmVmICp3c19idWYgPSBOVUxMOwotICAgIEZG VmtCdWZmZXIgKndzX3ZrOwotICAgIFZrRGV2aWNlU2l6ZSB3ZWlnaHRzX29mZnNbNF07Ci0gICAg VmtEZXZpY2VTaXplIHN1bXNfb2Zmc1s0XTsKLSAgICB1aW50MzJfdCB3c19zdHJpZGVbNF07Ci0g ICAgc2l6ZV90IHdzX3NpemVbNF07Ci0gICAgc2l6ZV90IHdzX3RvdGFsX3NpemUgPSAwOwotCi0g ICAgRkZWa0V4ZWNDb250ZXh0ICpleGVjOwotICAgIFZrSW1hZ2VWaWV3IGluX3ZpZXdzW0FWX05V TV9EQVRBX1BPSU5URVJTXTsKLSAgICBWa0ltYWdlVmlldyBvdXRfdmlld3NbQVZfTlVNX0RBVEFf UE9JTlRFUlNdOwotICAgIFZrSW1hZ2VNZW1vcnlCYXJyaWVyMiBpbWdfYmFyWzhdOwotICAgIGlu dCBuYl9pbWdfYmFyID0gMDsKLSAgICBWa0J1ZmZlck1lbW9yeUJhcnJpZXIyIGJ1Zl9iYXJbOF07 Ci0gICAgaW50IG5iX2J1Zl9iYXIgPSAwOwotCi0gICAgaWYgKCFzLT5pbml0aWFsaXplZCkKLSAg ICAgICAgUkVUKGluaXRfZmlsdGVyKGN0eCkpOwotCi0gICAgZGVzYyA9IGF2X3BpeF9mbXRfZGVz Y19nZXQodmtjdHgtPm91dHB1dF9mb3JtYXQpOwotICAgIGlmICghZGVzYykKLSAgICAgICAgcmV0 dXJuIEFWRVJST1IoRUlOVkFMKTsKLQotICAgIC8qIEludGVncmFsIGltYWdlICovCi0gICAgaW50 X3N0cmlkZSA9IHMtPnNoZF93ZWlnaHRzLmxnX3NpemVbMF0qcy0+cGxfd2VpZ2h0c19yb3dzKlRZ UEVfU0laRTsKLSAgICBpbnRfc2l6ZSA9IHMtPnNoZF93ZWlnaHRzLmxnX3NpemVbMF0qcy0+cGxf d2VpZ2h0c19yb3dzKmludF9zdHJpZGU7Ci0KLSAgICAvKiBQbGFuZSBkaW1lbnNpb25zICovCi0g ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZXNjLT5uYl9jb21wb25lbnRzOyBpKyspIHsKLSAgICAg ICAgcGxhbmVfd2lkdGhzW2ldID0gIWkgfHwgKGkgPT0gMykgPyB2a2N0eC0+b3V0cHV0X3dpZHRo IDogQVZfQ0VJTF9SU0hJRlQodmtjdHgtPm91dHB1dF93aWR0aCwgZGVzYy0+bG9nMl9jaHJvbWFf dyk7Ci0gICAgICAgIHBsYW5lX2hlaWdodHNbaV0gPSAhaSB8fCAoaSA9PSAzKSA/IHZrY3R4LT5v dXRwdXRfaGVpZ2h0IDogQVZfQ0VJTF9SU0hJRlQodmtjdHgtPm91dHB1dF9oZWlnaHQsIGRlc2Mt PmxvZzJfY2hyb21hX3cpOwotICAgICAgICBwbGFuZV93aWR0aHNbaV0gID0gRkZBTElHTihwbGFu ZV93aWR0aHNbaV0sICBzLT5zaGRfZGVub2lzZS5sZ19zaXplWzBdKTsKLSAgICAgICAgcGxhbmVf aGVpZ2h0c1tpXSA9IEZGQUxJR04ocGxhbmVfaGVpZ2h0c1tpXSwgcy0+c2hkX2Rlbm9pc2UubGdf c2l6ZVsxXSk7Ci0KLSAgICAgICAgd3Nfc3RyaWRlW2ldID0gcGxhbmVfd2lkdGhzW2ldOwotICAg ICAgICB3c19zaXplW2ldID0gd3Nfc3RyaWRlW2ldICogcGxhbmVfaGVpZ2h0c1tpXSAqIHNpemVv ZihmbG9hdCk7Ci0gICAgICAgIHdzX3RvdGFsX3NpemUgKz0gd3Nfc2l6ZVtpXTsKLSAgICB9Ci0K LSAgICAvKiBCdWZmZXJzICovCi0gICAgZXJyID0gZmZfdmtfZ2V0X3Bvb2xlZF9idWZmZXIoJnMt PnZrY3R4LCAmcy0+aW50ZWdyYWxfYnVmX3Bvb2wsICZpbnRlZ3JhbF9idWYsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgVktfQlVGRkVSX1VTQUdFX1NUT1JBR0VfQlVGRkVSX0JJ VCB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfQlVGRkVSX1VTQUdFX1NI QURFUl9ERVZJQ0VfQUREUkVTU19CSVQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLT5vcHRzLnQgKiBp bnRfc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19NRU1PUllfUFJP UEVSVFlfREVWSUNFX0xPQ0FMX0JJVCk7Ci0gICAgaWYgKGVyciA8IDApCi0gICAgICAgIHJldHVy biBlcnI7Ci0gICAgaW50ZWdyYWxfdmsgPSAoRkZWa0J1ZmZlciAqKWludGVncmFsX2J1Zi0+ZGF0 YTsKLQotICAgIGVyciA9IGZmX3ZrX2dldF9wb29sZWRfYnVmZmVyKCZzLT52a2N0eCwgJnMtPndz X2J1Zl9wb29sLCAmd3NfYnVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZL X0JVRkZFUl9VU0FHRV9TVE9SQUdFX0JVRkZFUl9CSVQgfAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFZLX0JVRkZFUl9VU0FHRV9UUkFOU0ZFUl9EU1RfQklUIHwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBWS19CVUZGRVJfVVNBR0VfU0hBREVSX0RFVklDRV9B RERSRVNTX0JJVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdzX3RvdGFsX3NpemUgKiAyLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZLX01FTU9SWV9QUk9QRVJUWV9ERVZJQ0VfTE9D QUxfQklUKTsKLSAgICBpZiAoZXJyIDwgMCkKLSAgICAgICAgcmV0dXJuIGVycjsKLSAgICB3c192 ayA9IChGRlZrQnVmZmVyICopd3NfYnVmLT5kYXRhOwotCi0gICAgd2VpZ2h0c19vZmZzWzBdID0g MDsKLSAgICBzdW1zX29mZnNbMF0gPSB3c190b3RhbF9zaXplOwotICAgIGZvciAoaW50IGkgPSAx OyBpIDwgZGVzYy0+bmJfY29tcG9uZW50czsgaSsrKSB7Ci0gICAgICAgIHdlaWdodHNfb2Zmc1tp XSA9IHdlaWdodHNfb2Zmc1tpIC0gMV0gKyB3c19zaXplW2kgLSAxXTsKLSAgICAgICAgc3Vtc19v ZmZzW2ldID0gc3Vtc19vZmZzW2kgLSAxXSArIHdzX3NpemVbaSAtIDFdOwotICAgIH0KLQotICAg IC8qIE91dHB1dCBmcmFtZSAqLwotICAgIG91dCA9IGZmX2dldF92aWRlb19idWZmZXIob3V0bGlu aywgb3V0bGluay0+dywgb3V0bGluay0+aCk7Ci0gICAgaWYgKCFvdXQpIHsKLSAgICAgICAgZXJy ID0gQVZFUlJPUihFTk9NRU0pOwotICAgICAgICBnb3RvIGZhaWw7Ci0gICAgfQotCi0gICAgLyog RXhlY3V0aW9uIGNvbnRleHQgKi8KLSAgICBleGVjID0gZmZfdmtfZXhlY19nZXQoJnMtPnZrY3R4 LCAmcy0+ZSk7Ci0gICAgZmZfdmtfZXhlY19zdGFydCh2a2N0eCwgZXhlYyk7Ci0KLSAgICAvKiBE ZXBlbmRlbmNpZXMgKi8KLSAgICBSRVQoZmZfdmtfZXhlY19hZGRfZGVwX2ZyYW1lKHZrY3R4LCBl eGVjLCBpbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZLX1BJUEVMSU5FX1NU QUdFXzJfQUxMX0NPTU1BTkRTX0JJVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFZLX1BJUEVMSU5FX1NUQUdFXzJfQ09NUFVURV9TSEFERVJfQklUKSk7Ci0gICAgUkVUKGZmX3Zr X2V4ZWNfYWRkX2RlcF9mcmFtZSh2a2N0eCwgZXhlYywgb3V0LAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgVktfUElQRUxJTkVfU1RBR0VfMl9BTExfQ09NTUFORFNfQklULAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfUElQRUxJTkVfU1RBR0VfMl9DT01QVVRF X1NIQURFUl9CSVQpKTsKLQotICAgIFJFVChmZl92a19leGVjX2FkZF9kZXBfYnVmKHZrY3R4LCBl eGVjLCAmaW50ZWdyYWxfYnVmLCAxLCAwKSk7Ci0gICAgaW50ZWdyYWxfYnVmID0gTlVMTDsKLQot ICAgIFJFVChmZl92a19leGVjX2FkZF9kZXBfYnVmKHZrY3R4LCBleGVjLCAmd3NfYnVmLCAgICAg ICAxLCAwKSk7Ci0gICAgd3NfYnVmID0gTlVMTDsKLQotICAgIC8qIElucHV0IGZyYW1lIHByZXAg Ki8KLSAgICBSRVQoZmZfdmtfY3JlYXRlX2ltYWdldmlld3ModmtjdHgsIGV4ZWMsIGluX3ZpZXdz LCBpbiwgRkZfVktfUkVQX0ZMT0FUKSk7Ci0gICAgZmZfdmtfZnJhbWVfYmFycmllcih2a2N0eCwg ZXhlYywgaW4sIGltZ19iYXIsICZuYl9pbWdfYmFyLAotICAgICAgICAgICAgICAgICAgICAgICAg VktfUElQRUxJTkVfU1RBR0VfMl9BTExfQ09NTUFORFNfQklULAotICAgICAgICAgICAgICAgICAg ICAgICAgVktfUElQRUxJTkVfU1RBR0VfMl9DT01QVVRFX1NIQURFUl9CSVQsCi0gICAgICAgICAg ICAgICAgICAgICAgICBWS19BQ0NFU1NfU0hBREVSX1JFQURfQklULAotICAgICAgICAgICAgICAg ICAgICAgICAgVktfSU1BR0VfTEFZT1VUX0dFTkVSQUwsCi0gICAgICAgICAgICAgICAgICAgICAg ICBWS19RVUVVRV9GQU1JTFlfSUdOT1JFRCk7Ci0KLSAgICAvKiBPdXRwdXQgZnJhbWUgcHJlcCAq LwotICAgIFJFVChmZl92a19jcmVhdGVfaW1hZ2V2aWV3cyh2a2N0eCwgZXhlYywgb3V0X3ZpZXdz LCBvdXQsIEZGX1ZLX1JFUF9GTE9BVCkpOwotICAgIGZmX3ZrX2ZyYW1lX2JhcnJpZXIodmtjdHgs IGV4ZWMsIG91dCwgaW1nX2JhciwgJm5iX2ltZ19iYXIsCi0gICAgICAgICAgICAgICAgICAgICAg ICBWS19QSVBFTElORV9TVEFHRV8yX0FMTF9DT01NQU5EU19CSVQsCi0gICAgICAgICAgICAgICAg ICAgICAgICBWS19QSVBFTElORV9TVEFHRV8yX0NPTVBVVEVfU0hBREVSX0JJVCwKLSAgICAgICAg ICAgICAgICAgICAgICAgIFZLX0FDQ0VTU19TSEFERVJfV1JJVEVfQklULAotICAgICAgICAgICAg ICAgICAgICAgICAgVktfSU1BR0VfTEFZT1VUX0dFTkVSQUwsCi0gICAgICAgICAgICAgICAgICAg ICAgICBWS19RVUVVRV9GQU1JTFlfSUdOT1JFRCk7Ci0KLSAgICBuYl9idWZfYmFyID0gMDsKLSAg ICBidWZfYmFyW25iX2J1Zl9iYXIrK10gPSAoVmtCdWZmZXJNZW1vcnlCYXJyaWVyMikgewotICAg ICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9CVUZGRVJfTUVNT1JZX0JBUlJJRVJfMiwK LSAgICAgICAgLnNyY1N0YWdlTWFzayA9IHdzX3ZrLT5zdGFnZSwKLSAgICAgICAgLmRzdFN0YWdl TWFzayA9IFZLX1BJUEVMSU5FX1NUQUdFXzJfVFJBTlNGRVJfQklULAotICAgICAgICAuc3JjQWNj ZXNzTWFzayA9IHdzX3ZrLT5hY2Nlc3MsCi0gICAgICAgIC5kc3RBY2Nlc3NNYXNrID0gVktfQUND RVNTXzJfVFJBTlNGRVJfV1JJVEVfQklULAotICAgICAgICAuc3JjUXVldWVGYW1pbHlJbmRleCA9 IFZLX1FVRVVFX0ZBTUlMWV9JR05PUkVELAotICAgICAgICAuZHN0UXVldWVGYW1pbHlJbmRleCA9 IFZLX1FVRVVFX0ZBTUlMWV9JR05PUkVELAotICAgICAgICAuYnVmZmVyID0gd3NfdmstPmJ1ZiwK LSAgICAgICAgLnNpemUgPSB3c192ay0+c2l6ZSwKLSAgICAgICAgLm9mZnNldCA9IDAsCi0gICAg fTsKLSAgICBidWZfYmFyW25iX2J1Zl9iYXIrK10gPSAoVmtCdWZmZXJNZW1vcnlCYXJyaWVyMikg ewotICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9CVUZGRVJfTUVNT1JZX0JBUlJJ RVJfMiwKLSAgICAgICAgLnNyY1N0YWdlTWFzayA9IGludGVncmFsX3ZrLT5zdGFnZSwKLSAgICAg ICAgLmRzdFN0YWdlTWFzayA9IFZLX1BJUEVMSU5FX1NUQUdFXzJfQ09NUFVURV9TSEFERVJfQklU LAotICAgICAgICAuc3JjQWNjZXNzTWFzayA9IGludGVncmFsX3ZrLT5hY2Nlc3MsCi0gICAgICAg IC5kc3RBY2Nlc3NNYXNrID0gVktfQUNDRVNTXzJfU0hBREVSX1NUT1JBR0VfUkVBRF9CSVQgfAot ICAgICAgICAgICAgICAgICAgICAgICAgIFZLX0FDQ0VTU18yX1NIQURFUl9TVE9SQUdFX1dSSVRF X0JJVCwKLSAgICAgICAgLnNyY1F1ZXVlRmFtaWx5SW5kZXggPSBWS19RVUVVRV9GQU1JTFlfSUdO T1JFRCwKLSAgICAgICAgLmRzdFF1ZXVlRmFtaWx5SW5kZXggPSBWS19RVUVVRV9GQU1JTFlfSUdO T1JFRCwKLSAgICAgICAgLmJ1ZmZlciA9IGludGVncmFsX3ZrLT5idWYsCi0gICAgICAgIC5zaXpl ID0gaW50ZWdyYWxfdmstPnNpemUsCi0gICAgICAgIC5vZmZzZXQgPSAwLAotICAgIH07Ci0KLSAg ICB2ay0+Q21kUGlwZWxpbmVCYXJyaWVyMihleGVjLT5idWYsICYoVmtEZXBlbmRlbmN5SW5mbykg ewotICAgICAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfREVQRU5ERU5DWV9JTkZP LAotICAgICAgICAgICAgLnBJbWFnZU1lbW9yeUJhcnJpZXJzID0gaW1nX2JhciwKLSAgICAgICAg ICAgIC5pbWFnZU1lbW9yeUJhcnJpZXJDb3VudCA9IG5iX2ltZ19iYXIsCi0gICAgICAgICAgICAu cEJ1ZmZlck1lbW9yeUJhcnJpZXJzID0gYnVmX2JhciwKLSAgICAgICAgICAgIC5idWZmZXJNZW1v cnlCYXJyaWVyQ291bnQgPSBuYl9idWZfYmFyLAotICAgICAgICB9KTsKLSAgICB3c192ay0+c3Rh Z2UgPSBidWZfYmFyWzBdLmRzdFN0YWdlTWFzazsKLSAgICB3c192ay0+YWNjZXNzID0gYnVmX2Jh clswXS5kc3RBY2Nlc3NNYXNrOwotICAgIGludGVncmFsX3ZrLT5zdGFnZSA9IGJ1Zl9iYXJbMV0u ZHN0U3RhZ2VNYXNrOwotICAgIGludGVncmFsX3ZrLT5hY2Nlc3MgPSBidWZfYmFyWzFdLmRzdEFj Y2Vzc01hc2s7Ci0KLSAgICAvKiBCdWZmZXIgemVyb2luZyAqLwotICAgIHZrLT5DbWRGaWxsQnVm ZmVyKGV4ZWMtPmJ1Ziwgd3NfdmstPmJ1ZiwgMCwgd3NfdmstPnNpemUsIDB4MCk7Ci0KLSAgICBu Yl9idWZfYmFyID0gMDsKLSAgICBidWZfYmFyW25iX2J1Zl9iYXIrK10gPSAoVmtCdWZmZXJNZW1v cnlCYXJyaWVyMikgewotICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9CVUZGRVJf TUVNT1JZX0JBUlJJRVJfMiwKLSAgICAgICAgLnNyY1N0YWdlTWFzayA9IHdzX3ZrLT5zdGFnZSwK LSAgICAgICAgLmRzdFN0YWdlTWFzayA9IFZLX1BJUEVMSU5FX1NUQUdFXzJfQ09NUFVURV9TSEFE RVJfQklULAotICAgICAgICAuc3JjQWNjZXNzTWFzayA9IHdzX3ZrLT5hY2Nlc3MsCi0gICAgICAg IC5kc3RBY2Nlc3NNYXNrID0gVktfQUNDRVNTXzJfU0hBREVSX1NUT1JBR0VfUkVBRF9CSVQgfAot ICAgICAgICAgICAgICAgICAgICAgICAgIFZLX0FDQ0VTU18yX1NIQURFUl9TVE9SQUdFX1dSSVRF X0JJVCwKLSAgICAgICAgLnNyY1F1ZXVlRmFtaWx5SW5kZXggPSBWS19RVUVVRV9GQU1JTFlfSUdO T1JFRCwKLSAgICAgICAgLmRzdFF1ZXVlRmFtaWx5SW5kZXggPSBWS19RVUVVRV9GQU1JTFlfSUdO T1JFRCwKLSAgICAgICAgLmJ1ZmZlciA9IHdzX3ZrLT5idWYsCi0gICAgICAgIC5zaXplID0gd3Nf dmstPnNpemUsCi0gICAgICAgIC5vZmZzZXQgPSAwLAotICAgIH07Ci0KLSAgICB2ay0+Q21kUGlw ZWxpbmVCYXJyaWVyMihleGVjLT5idWYsICYoVmtEZXBlbmRlbmN5SW5mbykgewotICAgICAgICAg ICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfREVQRU5ERU5DWV9JTkZPLAotICAgICAgICAg ICAgLnBCdWZmZXJNZW1vcnlCYXJyaWVycyA9IGJ1Zl9iYXIsCi0gICAgICAgICAgICAuYnVmZmVy TWVtb3J5QmFycmllckNvdW50ID0gbmJfYnVmX2JhciwKLSAgICAgICAgfSk7Ci0gICAgd3Nfdmst PnN0YWdlID0gYnVmX2JhclswXS5kc3RTdGFnZU1hc2s7Ci0gICAgd3NfdmstPmFjY2VzcyA9IGJ1 Zl9iYXJbMF0uZHN0QWNjZXNzTWFzazsKLQotICAgIC8qIFVwZGF0ZSB3ZWlnaHRzIGRlc2NyaXB0 b3JzICovCi0gICAgZmZfdmtfc2hhZGVyX3VwZGF0ZV9pbWdfYXJyYXkodmtjdHgsIGV4ZWMsICZz LT5zaGRfd2VpZ2h0cywgaW4sIGluX3ZpZXdzLCAwLCAwLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFZLX0lNQUdFX0xBWU9VVF9HRU5FUkFMLCBWS19OVUxMX0hBTkRMRSk7Ci0g ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZXNjLT5uYl9jb21wb25lbnRzOyBpKyspIHsKLSAgICAg ICAgUkVUKGZmX3ZrX3NoYWRlcl91cGRhdGVfZGVzY19idWZmZXIoJnMtPnZrY3R4LCBleGVjLCAm cy0+c2hkX3dlaWdodHMsIDAsIDEgKyBpKjIgKyAwLCAwLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB3c192aywgd2VpZ2h0c19vZmZzW2ldLCB3c19zaXplW2ld LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19GT1JNQVRf VU5ERUZJTkVEKSk7Ci0gICAgICAgIFJFVChmZl92a19zaGFkZXJfdXBkYXRlX2Rlc2NfYnVmZmVy KCZzLT52a2N0eCwgZXhlYywgJnMtPnNoZF93ZWlnaHRzLCAwLCAxICsgaSoyICsgMSwgMCwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3NfdmssIHN1bXNfb2Zm c1tpXSwgd3Nfc2l6ZVtpXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgVktfRk9STUFUX1VOREVGSU5FRCkpOwotICAgIH0KLQotICAgIC8qIFVwZGF0ZSBkZW5v aXNlIGRlc2NyaXB0b3JzICovCi0gICAgZmZfdmtfc2hhZGVyX3VwZGF0ZV9pbWdfYXJyYXkodmtj dHgsIGV4ZWMsICZzLT5zaGRfZGVub2lzZSwgaW4sIGluX3ZpZXdzLCAwLCAwLAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFZLX0lNQUdFX0xBWU9VVF9HRU5FUkFMLCBWS19OVUxM X0hBTkRMRSk7Ci0gICAgZmZfdmtfc2hhZGVyX3VwZGF0ZV9pbWdfYXJyYXkodmtjdHgsIGV4ZWMs ICZzLT5zaGRfZGVub2lzZSwgb3V0LCBvdXRfdmlld3MsIDAsIDEsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgVktfSU1BR0VfTEFZT1VUX0dFTkVSQUwsIFZLX05VTExfSEFORExF KTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGRlc2MtPm5iX2NvbXBvbmVudHM7IGkrKykgewot ICAgICAgICBSRVQoZmZfdmtfc2hhZGVyX3VwZGF0ZV9kZXNjX2J1ZmZlcigmcy0+dmtjdHgsIGV4 ZWMsICZzLT5zaGRfZGVub2lzZSwgMSwgaSoyICsgMCwgMCwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgd3NfdmssIHdlaWdodHNfb2Zmc1tpXSwgd3Nfc2l6ZVtp XSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfRk9STUFU X1VOREVGSU5FRCkpOwotICAgICAgICBSRVQoZmZfdmtfc2hhZGVyX3VwZGF0ZV9kZXNjX2J1ZmZl cigmcy0+dmtjdHgsIGV4ZWMsICZzLT5zaGRfZGVub2lzZSwgMSwgaSoyICsgMSwgMCwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3NfdmssIHN1bXNfb2Zmc1tp XSwgd3Nfc2l6ZVtpXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgVktfRk9STUFUX1VOREVGSU5FRCkpOwotICAgIH0KLQotICAgIC8qIFdlaWdodHMgcGlwZWxp bmUgKi8KLSAgICBmZl92a19leGVjX2JpbmRfc2hhZGVyKHZrY3R4LCBleGVjLCAmcy0+c2hkX3dl aWdodHMpOwotCi0gICAgZG8gewotICAgICAgICBpbnQgd2dfaW52b2M7Ci0gICAgICAgIEhvcml6 b250YWxQdXNoRGF0YSBwZCA9IHsKLSAgICAgICAgICAgIHsgcGxhbmVfd2lkdGhzWzBdLCBwbGFu ZV93aWR0aHNbMV0sIHBsYW5lX3dpZHRoc1syXSwgcGxhbmVfd2lkdGhzWzNdIH0sCi0gICAgICAg ICAgICB7IHBsYW5lX2hlaWdodHNbMF0sIHBsYW5lX2hlaWdodHNbMV0sIHBsYW5lX2hlaWdodHNb Ml0sIHBsYW5lX2hlaWdodHNbM10gfSwKLSAgICAgICAgICAgIHsgd3Nfc3RyaWRlWzBdLCB3c19z dHJpZGVbMV0sIHdzX3N0cmlkZVsyXSwgd3Nfc3RyaWRlWzNdIH0sCi0gICAgICAgICAgICB7IHMt PnBhdGNoWzBdLCBzLT5wYXRjaFsxXSwgcy0+cGF0Y2hbMl0sIHMtPnBhdGNoWzNdIH0sCi0gICAg ICAgICAgICB7IHMtPnN0cmVuZ3RoWzBdLCBzLT5zdHJlbmd0aFsxXSwgcy0+c3RyZW5ndGhbMl0s IHMtPnN0cmVuZ3RoWzJdLCB9LAotICAgICAgICAgICAgaW50ZWdyYWxfdmstPmFkZHJlc3MsCi0g ICAgICAgICAgICAodWludDY0X3QpaW50X3NpemUsCi0gICAgICAgICAgICAodWludDY0X3QpaW50 X3N0cmlkZSwKLSAgICAgICAgICAgIG9mZnNldHNfZGlzcGF0Y2hlZCwKLSAgICAgICAgfTsKLQot ICAgICAgICAvKiBQdXNoIGRhdGEgKi8KLSAgICAgICAgZmZfdmtfc2hhZGVyX3VwZGF0ZV9wdXNo X2NvbnN0KHZrY3R4LCBleGVjLCAmcy0+c2hkX3dlaWdodHMsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBWS19TSEFERVJfU1RBR0VfQ09NUFVURV9CSVQsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBzaXplb2YocGQpLCAmcGQpOwotCi0g ICAgICAgIGlmIChvZmZzZXRzX2Rpc3BhdGNoZWQpIHsKLSAgICAgICAgICAgIG5iX2J1Zl9iYXIg PSAwOwotICAgICAgICAgICAgYnVmX2JhcltuYl9idWZfYmFyKytdID0gKFZrQnVmZmVyTWVtb3J5 QmFycmllcjIpIHsKLSAgICAgICAgICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9C VUZGRVJfTUVNT1JZX0JBUlJJRVJfMiwKLSAgICAgICAgICAgICAgICAuc3JjU3RhZ2VNYXNrID0g aW50ZWdyYWxfdmstPnN0YWdlLAotICAgICAgICAgICAgICAgIC5kc3RTdGFnZU1hc2sgPSBWS19Q SVBFTElORV9TVEFHRV8yX0NPTVBVVEVfU0hBREVSX0JJVCwKLSAgICAgICAgICAgICAgICAuc3Jj QWNjZXNzTWFzayA9IGludGVncmFsX3ZrLT5hY2Nlc3MsCi0gICAgICAgICAgICAgICAgLmRzdEFj Y2Vzc01hc2sgPSBWS19BQ0NFU1NfMl9TSEFERVJfU1RPUkFHRV9SRUFEX0JJVCB8Ci0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBWS19BQ0NFU1NfMl9TSEFERVJfU1RPUkFHRV9XUklU RV9CSVQsCi0gICAgICAgICAgICAgICAgLnNyY1F1ZXVlRmFtaWx5SW5kZXggPSBWS19RVUVVRV9G QU1JTFlfSUdOT1JFRCwKLSAgICAgICAgICAgICAgICAuZHN0UXVldWVGYW1pbHlJbmRleCA9IFZL X1FVRVVFX0ZBTUlMWV9JR05PUkVELAotICAgICAgICAgICAgICAgIC5idWZmZXIgPSBpbnRlZ3Jh bF92ay0+YnVmLAotICAgICAgICAgICAgICAgIC5zaXplID0gaW50ZWdyYWxfdmstPnNpemUsCi0g ICAgICAgICAgICAgICAgLm9mZnNldCA9IDAsCi0gICAgICAgICAgICB9OwotCi0gICAgICAgICAg ICB2ay0+Q21kUGlwZWxpbmVCYXJyaWVyMihleGVjLT5idWYsICYoVmtEZXBlbmRlbmN5SW5mbykg ewotICAgICAgICAgICAgICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9ERVBFTkRF TkNZX0lORk8sCi0gICAgICAgICAgICAgICAgICAgIC5wQnVmZmVyTWVtb3J5QmFycmllcnMgPSBi dWZfYmFyLAotICAgICAgICAgICAgICAgICAgICAuYnVmZmVyTWVtb3J5QmFycmllckNvdW50ID0g bmJfYnVmX2JhciwKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIGludGVncmFsX3Zr LT5zdGFnZSA9IGJ1Zl9iYXJbMV0uZHN0U3RhZ2VNYXNrOwotICAgICAgICAgICAgaW50ZWdyYWxf dmstPmFjY2VzcyA9IGJ1Zl9iYXJbMV0uZHN0QWNjZXNzTWFzazsKLSAgICAgICAgfQotCi0gICAg ICAgIHdnX2ludm9jID0gRkZNSU4oKHMtPm5iX29mZnNldHMgLSBvZmZzZXRzX2Rpc3BhdGNoZWQp L1RZUEVfRUxFTVMsIHMtPm9wdHMudCk7Ci0gICAgICAgIHdnX2ludm9jID0gRkZNSU4od2dfaW52 b2MsIHZrY3R4LT5wcm9wcy5wcm9wZXJ0aWVzLmxpbWl0cy5tYXhDb21wdXRlV29ya0dyb3VwQ291 bnRbMl0pOwotCi0gICAgICAgIC8qIEVuZCBvZiBob3Jpem9udGFsIHBhc3MgKi8KLSAgICAgICAg dmstPkNtZERpc3BhdGNoKGV4ZWMtPmJ1ZiwgMSwgMSwgd2dfaW52b2MpOwotCi0gICAgICAgIG9m ZnNldHNfZGlzcGF0Y2hlZCArPSB3Z19pbnZvYyAqIFRZUEVfRUxFTVM7Ci0gICAgfSB3aGlsZSAo b2Zmc2V0c19kaXNwYXRjaGVkIDwgcy0+bmJfb2Zmc2V0cyk7Ci0KLSAgICBSRVQoZGVub2lzZV9w YXNzKHMsIGV4ZWMsIHdzX3ZrLCB3c19zdHJpZGUpKTsKLQotICAgIGVyciA9IGZmX3ZrX2V4ZWNf c3VibWl0KHZrY3R4LCBleGVjKTsKLSAgICBpZiAoZXJyIDwgMCkKLSAgICAgICAgcmV0dXJuIGVy cjsKLQotICAgIGVyciA9IGF2X2ZyYW1lX2NvcHlfcHJvcHMob3V0LCBpbik7Ci0gICAgaWYgKGVy ciA8IDApCi0gICAgICAgIGdvdG8gZmFpbDsKLQotICAgIGF2X2ZyYW1lX2ZyZWUoJmluKTsKLQot ICAgIHJldHVybiBmZl9maWx0ZXJfZnJhbWUob3V0bGluaywgb3V0KTsKLQotZmFpbDoKLSAgICBh dl9idWZmZXJfdW5yZWYoJmludGVncmFsX2J1Zik7Ci0gICAgYXZfYnVmZmVyX3VucmVmKCZ3c19i dWYpOwotICAgIGF2X2ZyYW1lX2ZyZWUoJmluKTsKLSAgICBhdl9mcmFtZV9mcmVlKCZvdXQpOwot ICAgIHJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyB2b2lkIG5sbWVhbnNfdnVsa2FuX3VuaW5pdChB VkZpbHRlckNvbnRleHQgKmF2Y3R4KQotewotICAgIE5MTWVhbnNWdWxrYW5Db250ZXh0ICpzID0g YXZjdHgtPnByaXY7Ci0gICAgRkZWdWxrYW5Db250ZXh0ICp2a2N0eCA9ICZzLT52a2N0eDsKLQot ICAgIGZmX3ZrX2V4ZWNfcG9vbF9mcmVlKHZrY3R4LCAmcy0+ZSk7Ci0gICAgZmZfdmtfc2hhZGVy X2ZyZWUodmtjdHgsICZzLT5zaGRfd2VpZ2h0cyk7Ci0gICAgZmZfdmtfc2hhZGVyX2ZyZWUodmtj dHgsICZzLT5zaGRfZGVub2lzZSk7Ci0KLSAgICBhdl9idWZmZXJfcG9vbF91bmluaXQoJnMtPmlu dGVncmFsX2J1Zl9wb29sKTsKLSAgICBhdl9idWZmZXJfcG9vbF91bmluaXQoJnMtPndzX2J1Zl9w b29sKTsKLQotICAgIGZmX3ZrX3VuaW5pdCgmcy0+dmtjdHgpOwotCi0gICAgYXZfZnJlZXAoJnMt PnhvZmZzZXRzKTsKLSAgICBhdl9mcmVlcCgmcy0+eW9mZnNldHMpOwotCi0gICAgcy0+aW5pdGlh bGl6ZWQgPSAwOwotfQotCi0jZGVmaW5lIE9GRlNFVCh4KSBvZmZzZXRvZihOTE1lYW5zVnVsa2Fu Q29udGV4dCwgeCkKLSNkZWZpbmUgRkxBR1MgKEFWX09QVF9GTEFHX0ZJTFRFUklOR19QQVJBTSB8 IEFWX09QVF9GTEFHX1ZJREVPX1BBUkFNKQotc3RhdGljIGNvbnN0IEFWT3B0aW9uIG5sbWVhbnNf dnVsa2FuX29wdGlvbnNbXSA9IHsKLSAgICB7ICJzIiwgICJkZW5vaXNpbmcgc3RyZW5ndGggZm9y IGFsbCBjb21wb25lbnRzIiwgT0ZGU0VUKG9wdHMucyksIEFWX09QVF9UWVBFX0RPVUJMRSwgeyAu ZGJsID0gMS4wIH0sIDEuMCwgMTAwLjAsIEZMQUdTIH0sCi0gICAgeyAicCIsICAicGF0Y2ggc2l6 ZSBmb3IgYWxsIGNvbXBvbmVudHMiLCBPRkZTRVQob3B0cy5wKSwgQVZfT1BUX1RZUEVfSU5ULCB7 IC5pNjQgPSAzKjIrMSB9LCAwLCA5OSwgRkxBR1MgfSwKLSAgICB7ICJyIiwgICJyZXNlYXJjaCB3 aW5kb3cgcmFkaXVzIiwgT0ZGU0VUKG9wdHMuciksIEFWX09QVF9UWVBFX0lOVCwgeyAuaTY0ID0g NyoyKzEgfSwgMCwgOTksIEZMQUdTIH0sCi0gICAgeyAidCIsICAicGFyYWxsZWxpc20iLCBPRkZT RVQob3B0cy50KSwgQVZfT1BUX1RZUEVfSU5ULCB7IC5pNjQgPSAzNiB9LCAxLCAxNjgsIEZMQUdT IH0sCi0KLSAgICB7ICJzMSIsICJkZW5vaXNpbmcgc3RyZW5ndGggZm9yIGNvbXBvbmVudCAxIiwg T0ZGU0VUKG9wdHMuc2NbMF0pLCBBVl9PUFRfVFlQRV9ET1VCTEUsIHsgLmRibCA9IDEuMCB9LCAx LjAsIDEwMC4wLCBGTEFHUyB9LAotICAgIHsgInMyIiwgImRlbm9pc2luZyBzdHJlbmd0aCBmb3Ig Y29tcG9uZW50IDIiLCBPRkZTRVQob3B0cy5zY1sxXSksIEFWX09QVF9UWVBFX0RPVUJMRSwgeyAu ZGJsID0gMS4wIH0sIDEuMCwgMTAwLjAsIEZMQUdTIH0sCi0gICAgeyAiczMiLCAiZGVub2lzaW5n IHN0cmVuZ3RoIGZvciBjb21wb25lbnQgMyIsIE9GRlNFVChvcHRzLnNjWzJdKSwgQVZfT1BUX1RZ UEVfRE9VQkxFLCB7IC5kYmwgPSAxLjAgfSwgMS4wLCAxMDAuMCwgRkxBR1MgfSwKLSAgICB7ICJz NCIsICJkZW5vaXNpbmcgc3RyZW5ndGggZm9yIGNvbXBvbmVudCA0IiwgT0ZGU0VUKG9wdHMuc2Nb M10pLCBBVl9PUFRfVFlQRV9ET1VCTEUsIHsgLmRibCA9IDEuMCB9LCAxLjAsIDEwMC4wLCBGTEFH UyB9LAotCi0gICAgeyAicDEiLCAicGF0Y2ggc2l6ZSBmb3IgY29tcG9uZW50IDEiLCBPRkZTRVQo b3B0cy5wY1swXSksIEFWX09QVF9UWVBFX0lOVCwgeyAuaTY0ID0gMCB9LCAwLCA5OSwgRkxBR1Mg fSwKLSAgICB7ICJwMiIsICJwYXRjaCBzaXplIGZvciBjb21wb25lbnQgMiIsIE9GRlNFVChvcHRz LnBjWzFdKSwgQVZfT1BUX1RZUEVfSU5ULCB7IC5pNjQgPSAwIH0sIDAsIDk5LCBGTEFHUyB9LAot ICAgIHsgInAzIiwgInBhdGNoIHNpemUgZm9yIGNvbXBvbmVudCAzIiwgT0ZGU0VUKG9wdHMucGNb Ml0pLCBBVl9PUFRfVFlQRV9JTlQsIHsgLmk2NCA9IDAgfSwgMCwgOTksIEZMQUdTIH0sCi0gICAg eyAicDQiLCAicGF0Y2ggc2l6ZSBmb3IgY29tcG9uZW50IDQiLCBPRkZTRVQob3B0cy5wY1szXSks IEFWX09QVF9UWVBFX0lOVCwgeyAuaTY0ID0gMCB9LCAwLCA5OSwgRkxBR1MgfSwKLQotICAgIHsg TlVMTCB9Ci19OwotCi1BVkZJTFRFUl9ERUZJTkVfQ0xBU1MobmxtZWFuc192dWxrYW4pOwotCi1z dGF0aWMgY29uc3QgQVZGaWx0ZXJQYWQgbmxtZWFuc192dWxrYW5faW5wdXRzW10gPSB7Ci0gICAg ewotICAgICAgICAubmFtZSAgICAgICAgID0gImRlZmF1bHQiLAotICAgICAgICAudHlwZSAgICAg ICAgID0gQVZNRURJQV9UWVBFX1ZJREVPLAotICAgICAgICAuZmlsdGVyX2ZyYW1lID0gJm5sbWVh bnNfdnVsa2FuX2ZpbHRlcl9mcmFtZSwKLSAgICAgICAgLmNvbmZpZ19wcm9wcyA9ICZmZl92a19m aWx0ZXJfY29uZmlnX2lucHV0LAotICAgIH0sCi19OwotCi1zdGF0aWMgY29uc3QgQVZGaWx0ZXJQ YWQgbmxtZWFuc192dWxrYW5fb3V0cHV0c1tdID0gewotICAgIHsKLSAgICAgICAgLm5hbWUgPSAi ZGVmYXVsdCIsCi0gICAgICAgIC50eXBlID0gQVZNRURJQV9UWVBFX1ZJREVPLAotICAgICAgICAu Y29uZmlnX3Byb3BzID0gJmZmX3ZrX2ZpbHRlcl9jb25maWdfb3V0cHV0LAotICAgIH0sCi19Owot Ci1jb25zdCBGRkZpbHRlciBmZl92Zl9ubG1lYW5zX3Z1bGthbiA9IHsKLSAgICAucC5uYW1lICAg ICAgICAgPSAibmxtZWFuc192dWxrYW4iLAotICAgIC5wLmRlc2NyaXB0aW9uICA9IE5VTExfSUZf Q09ORklHX1NNQUxMKCJOb24tbG9jYWwgbWVhbnMgZGVub2lzZXIgKFZ1bGthbikiKSwKLSAgICAu cC5wcml2X2NsYXNzICAgPSAmbmxtZWFuc192dWxrYW5fY2xhc3MsCi0gICAgLnAuZmxhZ3MgICAg ICAgID0gQVZGSUxURVJfRkxBR19IV0RFVklDRSwKLSAgICAucHJpdl9zaXplICAgICAgPSBzaXpl b2YoTkxNZWFuc1Z1bGthbkNvbnRleHQpLAotICAgIC5pbml0ICAgICAgICAgICA9ICZmZl92a19m aWx0ZXJfaW5pdCwKLSAgICAudW5pbml0ICAgICAgICAgPSAmbmxtZWFuc192dWxrYW5fdW5pbml0 LAotICAgIEZJTFRFUl9JTlBVVFMobmxtZWFuc192dWxrYW5faW5wdXRzKSwKLSAgICBGSUxURVJf T1VUUFVUUyhubG1lYW5zX3Z1bGthbl9vdXRwdXRzKSwKLSAgICBGSUxURVJfU0lOR0xFX1BJWEZN VChBVl9QSVhfRk1UX1ZVTEtBTiksCi0gICAgLmZsYWdzX2ludGVybmFsID0gRkZfRklMVEVSX0ZM QUdfSFdGUkFNRV9BV0FSRSwKLX07Ci0tIAoyLjQ5LjEKCgpGcm9tIGNjYWZlYzY1MDVhMjg1M2Zm MjcwNzEzMjg4MDY5MTFmNjUyOTk3MWMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCkZyb206IEph bWFpa2ExIDxsdWthc3pjejE4QHdwLnBsPgpEYXRlOiBXZWQsIDMgU2VwIDIwMjUgMTI6NTg6MTEg KzAwMDAKU3ViamVjdDogW1BBVENIIDAxOC8xMThdIENoYW5naW5nIHZ1bGthbiBmaWxlIGRpcmVj dG9yeQoKLS0tCiBsaWJhdmZpbHRlci92dWxrYW4vdmZfbmxtZWFuc192dWxrYW4uYyB8IDExMjAg KysrKysrKysrKysrKysrKysrKysrKysrCiAxIGZpbGUgY2hhbmdlZCwgMTEyMCBpbnNlcnRpb25z KCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliYXZmaWx0ZXIvdnVsa2FuL3ZmX25sbWVhbnNfdnVs a2FuLmMKCmRpZmYgLS1naXQgYS9saWJhdmZpbHRlci92dWxrYW4vdmZfbmxtZWFuc192dWxrYW4u YyBiL2xpYmF2ZmlsdGVyL3Z1bGthbi92Zl9ubG1lYW5zX3Z1bGthbi5jCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjZjODYyMDY4MjkKLS0tIC9kZXYvbnVsbAorKysgYi9s aWJhdmZpbHRlci92dWxrYW4vdmZfbmxtZWFuc192dWxrYW4uYwpAQCAtMCwwICsxLDExMjAgQEAK Ky8qCisgKiBDb3B5cmlnaHQgKGMpIEx5bm5lCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Yg RkZtcGVnLgorICoKKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM ZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vu c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogRkZtcGVn IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50 eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0 aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBl ZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5j LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAx IFVTQQorICovCisKKyNpbmNsdWRlICJsaWJhdnV0aWwvbWVtLmgiCisjaW5jbHVkZSAibGliYXZ1 dGlsL3JhbmRvbV9zZWVkLmgiCisjaW5jbHVkZSAiLi4vLi4vbGliYXZ1dGlsL3Z1bGthbi92dWxr YW5fc3BpcnYuaCIKKyNpbmNsdWRlICJsaWJhdnV0aWwvb3B0LmgiCisjaW5jbHVkZSAidnVsa2Fu X2ZpbHRlci5oIgorCisjaW5jbHVkZSAibGliYXZmaWx0ZXIvZmlsdGVycy5oIgorI2luY2x1ZGUg ImxpYmF2ZmlsdGVyL3ZpZGVvLmgiCisKKyNkZWZpbmUgVFlQRV9OQU1FICAidmVjNCIKKyNkZWZp bmUgVFlQRV9FTEVNUyA0CisjZGVmaW5lIFRZUEVfU0laRSAgKFRZUEVfRUxFTVMqNCkKKwordHlw ZWRlZiBzdHJ1Y3QgTkxNZWFuc1Z1bGthbkNvbnRleHQgeworICAgIEZGVnVsa2FuQ29udGV4dCB2 a2N0eDsKKworICAgIGludCBpbml0aWFsaXplZDsKKyAgICBGRlZrRXhlY1Bvb2wgZTsKKyAgICBB VlZ1bGthbkRldmljZVF1ZXVlRmFtaWx5ICpxZjsKKworICAgIEFWQnVmZmVyUG9vbCAqaW50ZWdy YWxfYnVmX3Bvb2w7CisgICAgQVZCdWZmZXJQb29sICp3c19idWZfcG9vbDsKKworICAgIEZGVmtC dWZmZXIgeHlvZmZzZXRzX2J1ZjsKKworICAgIGludCBwbF93ZWlnaHRzX3Jvd3M7CisgICAgRkZW dWxrYW5TaGFkZXIgc2hkX3dlaWdodHM7CisgICAgRkZWdWxrYW5TaGFkZXIgc2hkX2Rlbm9pc2U7 CisKKyAgICBpbnQgKnhvZmZzZXRzOworICAgIGludCAqeW9mZnNldHM7CisgICAgaW50IG5iX29m ZnNldHM7CisgICAgZmxvYXQgc3RyZW5ndGhbNF07CisgICAgaW50IHBhdGNoWzRdOworCisgICAg c3RydWN0IG5sbWVhbnNfb3B0cyB7CisgICAgICAgIGludCByOworICAgICAgICBkb3VibGUgczsK KyAgICAgICAgZG91YmxlIHNjWzRdOworICAgICAgICBpbnQgcDsKKyAgICAgICAgaW50IHBjWzRd OworICAgICAgICBpbnQgdDsKKyAgICB9IG9wdHM7Cit9IE5MTWVhbnNWdWxrYW5Db250ZXh0Owor CitzdGF0aWMgdm9pZCBpbnNlcnRfZmlyc3QoRkZWdWxrYW5TaGFkZXIgKnNoZCwgaW50IHIsIGNv bnN0IGNoYXIgKm9mZiwgaW50IGhvcml6LCBpbnQgcGxhbmUsIGludCBjb21wKQoreworICAgIEdM U0xGKDQsIHMxICAgID0gaW1hZ2VMb2FkKGlucHV0X2ltZ1slaV0sIHBvcyArIGl2ZWMyKCVpICsg JXMsICVpICsgJXMpKVslaV07CisgICAgICAgICAgLHBsYW5lLCBob3JpeiA/IHIgOiAwLCBob3Jp eiA/IG9mZiA6ICIwIiwgIWhvcml6ID8gciA6IDAsICFob3JpeiA/IG9mZiA6ICIwIiwgY29tcCk7 CisKKyAgICBHTFNMRig0LCBzMlswXSA9IGltYWdlTG9hZChpbnB1dF9pbWdbJWldLCBwb3MgKyBv ZmZzWzBdICsgaXZlYzIoJWkgKyAlcywgJWkgKyAlcykpWyVpXTsKKyAgICAgICAgICAscGxhbmUs IGhvcml6ID8gciA6IDAsIGhvcml6ID8gb2ZmIDogIjAiLCAhaG9yaXogPyByIDogMCwgIWhvcml6 ID8gb2ZmIDogIjAiLCBjb21wKTsKKyAgICBHTFNMRig0LCBzMlsxXSA9IGltYWdlTG9hZChpbnB1 dF9pbWdbJWldLCBwb3MgKyBvZmZzWzFdICsgaXZlYzIoJWkgKyAlcywgJWkgKyAlcykpWyVpXTsK KyAgICAgICAgICAscGxhbmUsIGhvcml6ID8gciA6IDAsIGhvcml6ID8gb2ZmIDogIjAiLCAhaG9y aXogPyByIDogMCwgIWhvcml6ID8gb2ZmIDogIjAiLCBjb21wKTsKKyAgICBHTFNMRig0LCBzMlsy XSA9IGltYWdlTG9hZChpbnB1dF9pbWdbJWldLCBwb3MgKyBvZmZzWzJdICsgaXZlYzIoJWkgKyAl cywgJWkgKyAlcykpWyVpXTsKKyAgICAgICAgICAscGxhbmUsIGhvcml6ID8gciA6IDAsIGhvcml6 ID8gb2ZmIDogIjAiLCAhaG9yaXogPyByIDogMCwgIWhvcml6ID8gb2ZmIDogIjAiLCBjb21wKTsK KyAgICBHTFNMRig0LCBzMlszXSA9IGltYWdlTG9hZChpbnB1dF9pbWdbJWldLCBwb3MgKyBvZmZz WzNdICsgaXZlYzIoJWkgKyAlcywgJWkgKyAlcykpWyVpXTsKKyAgICAgICAgICAscGxhbmUsIGhv cml6ID8gciA6IDAsIGhvcml6ID8gb2ZmIDogIjAiLCAhaG9yaXogPyByIDogMCwgIWhvcml6ID8g b2ZmIDogIjAiLCBjb21wKTsKKworICAgIEdMU0xDKDQsIHMyID0gKHMxIC0gczIpICogKHMxIC0g czIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAp OworfQorCitzdGF0aWMgdm9pZCBpbnNlcnRfaG9yaXpvbnRhbF9wYXNzKEZGVnVsa2FuU2hhZGVy ICpzaGQsIGludCBuYl9yb3dzLCBpbnQgZmlyc3QsIGludCBwbGFuZSwgaW50IGNvbXApCit7Cisg ICAgR0xTTEYoMSwgcG9zLnkgPSBpbnQoZ2xfR2xvYmFsSW52b2NhdGlvbklELngpICogJWk7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgLG5iX3Jvd3MpOworICAgIGlmICghZmlyc3QpCisgICAg ICAgIEdMU0xDKDEsIGJhcnJpZXIoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBHTFNMQygwLCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAg IEdMU0xGKDEsIGlmIChwb3MueSA8IGhlaWdodFslaV0pIHsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICxwbGFuZSk7CisgICAgR0xTTEMoMiwgICAgICNwcmFnbWEg dW5yb2xsKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KTsKKyAgICBHTFNMRigyLCAgICAgZm9yIChyID0gMDsgciA8ICVpOyByKyspIHsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsbmJfcm93cyk7CisgICAgR0xTTEMoMywgICAg ICAgICBwcmVmaXhfc3VtID0gRFRZUEUoMCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKTsKKyAgICBHTFNMQygzLCAgICAgICAgIG9mZnNldCA9IGludF9zdHJpZGUgKiB1 aW50NjRfdChwb3MueSArIHIpOyAgICAgICAgICAgICAgICAgICApOworICAgIEdMU0xDKDMsICAg ICAgICAgZHN0ID0gRGF0YUJ1ZmZlcih1aW50NjRfdChpbnRlZ3JhbF9kYXRhKSArIG9mZnNldCk7 ICAgICAgICAgICk7CisgICAgR0xTTEMoMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBHTFNMRigzLCAg ICAgICAgIGZvciAocG9zLnggPSAwOyBwb3MueCA8IHdpZHRoWyVpXTsgcG9zLngrKykgeyAgICAg ICAgICAgICAgICAscGxhbmUpOworICAgIGlmIChmaXJzdCkKKyAgICAgICAgaW5zZXJ0X2ZpcnN0 KHNoZCwgMCwgInIiLCAwLCBwbGFuZSwgY29tcCk7CisgICAgZWxzZQorICAgICAgICBHTFNMQyg0 LCAgICAgICAgIHMyID0gZHN0LnZbcG9zLnhdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICk7CisgICAgR0xTTEMoNCwgICAgICAgICAgICAgZHN0LnZbcG9zLnhdID0gczIg KyBwcmVmaXhfc3VtOyAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBHTFNMQyg0LCAg ICAgICAgICAgICBwcmVmaXhfc3VtICs9IHMyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICApOworICAgIEdMU0xDKDMsICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgR0xTTEMoMiwg ICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKTsKKyAgICBHTFNMQygxLCB9ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgIEdMU0xDKDAs ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICk7Cit9CisKK3N0YXRpYyB2b2lkIGluc2VydF92ZXJ0aWNhbF9wYXNzKEZG VnVsa2FuU2hhZGVyICpzaGQsIGludCBuYl9yb3dzLCBpbnQgZmlyc3QsIGludCBwbGFuZSwgaW50 IGNvbXApCit7CisgICAgR0xTTEYoMSwgcG9zLnggPSBpbnQoZ2xfR2xvYmFsSW52b2NhdGlvbklE LngpICogJWk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLG5iX3Jvd3MpOworICAgIEdMU0xD KDEsICNwcmFnbWEgdW5yb2xsKDEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICk7CisgICAgR0xTTEYoMSwgZm9yIChyID0gMDsgciA8ICVpOyByKysp ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLG5iX3Jvd3MpOwor ICAgIEdMU0xDKDIsICAgICBwc3VtW3JdID0gRFRZUEUoMCk7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgR0xTTEMoMCwgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsK KyAgICBpZiAoIWZpcnN0KQorICAgICAgICBHTFNMQygxLCBiYXJyaWVyKCk7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgR0xTTEMo MCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKTsKKyAgICBHTFNMRigxLCBpZiAocG9zLnggPCB3aWR0aFslaV0pIHsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAscGxhbmUpOworICAg IEdMU0xGKDIsICAgICBmb3IgKHBvcy55ID0gMDsgcG9zLnkgPCBoZWlnaHRbJWldOyBwb3MueSsr KSB7ICAgICAgICAgICAgICAgICAgICxwbGFuZSk7CisgICAgR0xTTEMoMywgICAgICAgICBvZmZz ZXQgPSBpbnRfc3RyaWRlICogdWludDY0X3QocG9zLnkpOyAgICAgICAgICAgICAgICAgICAgICAg KTsKKyAgICBHTFNMQygzLCAgICAgICAgIGRzdCA9IERhdGFCdWZmZXIodWludDY0X3QoaW50ZWdy YWxfZGF0YSkgKyBvZmZzZXQpOyAgICAgICAgICApOworICAgIEdMU0xDKDAsICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICk7CisgICAgR0xTTEMoMywgICAgICAgICAjcHJhZ21hIHVucm9sbCgxKSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBHTFNMRigzLCAgICAgICAgIGZv ciAociA9IDA7IHIgPCAlaTsgcisrKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAsbmJfcm93cyk7CisgICAgaWYgKGZpcnN0KQorICAgICAgICBpbnNlcnRfZmlyc3Qoc2hkLCAw LCAiciIsIDEsIHBsYW5lLCBjb21wKTsKKyAgICBlbHNlCisgICAgICAgIEdMU0xDKDQsICAgICAg ICAgczIgPSBkc3Qudltwb3MueCArIHJdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKTsKKyAgICBHTFNMQyg0LCAgICAgICAgICAgICBkc3Qudltwb3MueCArIHJdID0gczIgKyBw c3VtW3JdOyAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgIEdMU0xDKDQsICAgICAgICAg ICAgIHBzdW1bcl0gKz0gczI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICk7CisgICAgR0xTTEMoMywgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBHTFNMQygyLCAgICAgfSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICApOworICAgIEdMU0xDKDEsIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgR0xTTEMoMCwgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKTsKK30KKworc3RhdGljIHZvaWQgaW5zZXJ0X3dlaWdodHNfcGFzcyhGRlZ1bGthblNo YWRlciAqc2hkLCBpbnQgbmJfcm93cywgaW50IHZlcnQsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGludCB0LCBpbnQgZHN0X2NvbXAsIGludCBwbGFuZSwgaW50IGNvbXApCit7Cisg ICAgR0xTTEYoMSwgcCA9IHBhdGNoX3NpemVbJWldOyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAsZHN0X2NvbXApOworICAgIEdMU0xDKDAsICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsK KyAgICBHTFNMQygxLCBiYXJyaWVyKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgR0xTTEMoMCwgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgIGlm ICghdmVydCkgeworICAgICAgICBHTFNMRigxLCBmb3IgKHBvcy55ID0gMDsgcG9zLnkgPCBoZWln aHRbJWldOyBwb3MueSsrKSB7ICAgICAgICAgICAgICAgLHBsYW5lKTsKKyAgICAgICAgR0xTTEYo MiwgICAgIGlmIChnbF9HbG9iYWxJbnZvY2F0aW9uSUQueColaSA+PSB3aWR0aFslaV0pICAgICAg ICAgICAgICxuYl9yb3dzLCBwbGFuZSk7CisgICAgICAgIEdMU0xDKDMsICAgICAgICAgYnJlYWs7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAg ICBHTFNMRigyLCAgICAgZm9yIChyID0gMDsgciA8ICVpOyByKyspIHsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLG5iX3Jvd3MpOworICAgICAgICBHTFNMRigzLCAgICAgICAgIHBvcy54 ID0gaW50KGdsX0dsb2JhbEludm9jYXRpb25JRC54KSAqICVpICsgcjsgICAgICAgLG5iX3Jvd3Mp OworICAgIH0gZWxzZSB7CisgICAgICAgIEdMU0xGKDEsIGZvciAocG9zLnggPSAwOyBwb3MueCA8 IHdpZHRoWyVpXTsgcG9zLngrKykgeyAgICAgICAgICAgICAgICAscGxhbmUpOworICAgICAgICBH TFNMRigyLCAgICAgaWYgKGdsX0dsb2JhbEludm9jYXRpb25JRC54KiVpID49IGhlaWdodFslaV0p ICAgICAgICAgICAgLG5iX3Jvd3MsIHBsYW5lKTsKKyAgICAgICAgR0xTTEMoMywgICAgICAgICBi cmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Cisg ICAgICAgIEdMU0xGKDIsICAgICBmb3IgKHIgPSAwOyByIDwgJWk7IHIrKykgeyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAsbmJfcm93cyk7CisgICAgICAgIEdMU0xGKDMsICAgICAgICAg cG9zLnkgPSBpbnQoZ2xfR2xvYmFsSW52b2NhdGlvbklELngpICogJWkgKyByOyAgICAgICAsbmJf cm93cyk7CisgICAgfQorICAgIEdMU0xDKDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBHTFNMQygzLCAgICAg ICAgIGEgPSBEVFlQRSgwKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICk7CisgICAgR0xTTEMoMywgICAgICAgICBiID0gRFRZUEUoMCk7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgIEdMU0xDKDMsICAgICAgICAgYyA9 IERUWVBFKDApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsK KyAgICBHTFNMQygzLCAgICAgICAgIGQgPSBEVFlQRSgwKTsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgR0xTTEMoMCwgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgIEdM U0xDKDMsICAgICAgICAgbHQgPSAoKHBvcy54IC0gcCkgPCAwKSB8fCAoKHBvcy55IC0gcCkgPCAw KTsgICAgICAgICAgICAgKTsKKyAgICBHTFNMQygwLCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgR0xTTEYoMywg ICAgICAgICBzcmNbMF0gPSBpbWFnZUxvYWQoaW5wdXRfaW1nWyVpXSwgcG9zICsgb2Zmc1swXSlb JWldOyAgICAscGxhbmUsIGNvbXApOworICAgIEdMU0xGKDMsICAgICAgICAgc3JjWzFdID0gaW1h Z2VMb2FkKGlucHV0X2ltZ1slaV0sIHBvcyArIG9mZnNbMV0pWyVpXTsgICAgLHBsYW5lLCBjb21w KTsKKyAgICBHTFNMRigzLCAgICAgICAgIHNyY1syXSA9IGltYWdlTG9hZChpbnB1dF9pbWdbJWld LCBwb3MgKyBvZmZzWzJdKVslaV07ICAgICxwbGFuZSwgY29tcCk7CisgICAgR0xTTEYoMywgICAg ICAgICBzcmNbM10gPSBpbWFnZUxvYWQoaW5wdXRfaW1nWyVpXSwgcG9zICsgb2Zmc1szXSlbJWld OyAgICAscGxhbmUsIGNvbXApOworICAgIEdMU0xDKDAsICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBHTFNMQygz LCAgICAgICAgIGlmIChsdCA9PSBmYWxzZSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICk7CisgICAgR0xTTEMoMywgICAgICAgICAgICAgb2Zmc2V0ID0gaW50X3N0cmlk ZSAqIHVpbnQ2NF90KHBvcy55IC0gcCk7ICAgICAgICAgICApOworICAgIEdMU0xDKDMsICAgICAg ICAgICAgIGRzdCA9IERhdGFCdWZmZXIodWludDY0X3QoaW50ZWdyYWxfZGF0YSkgKyBvZmZzZXQp OyAgKTsKKyAgICBHTFNMQyg0LCAgICAgICAgICAgICBhID0gZHN0LnZbcG9zLnggLSBwXTsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgR0xTTEMoNCwgICAgICAgICAgICAg YyA9IGRzdC52W3Bvcy54ICsgcF07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwor ICAgIEdMU0xDKDMsICAgICAgICAgICAgIG9mZnNldCA9IGludF9zdHJpZGUgKiB1aW50NjRfdChw b3MueSArIHApOyAgICAgICAgICAgKTsKKyAgICBHTFNMQygzLCAgICAgICAgICAgICBkc3QgPSBE YXRhQnVmZmVyKHVpbnQ2NF90KGludGVncmFsX2RhdGEpICsgb2Zmc2V0KTsgICk7CisgICAgR0xT TEMoNCwgICAgICAgICAgICAgYiA9IGRzdC52W3Bvcy54IC0gcF07ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICApOworICAgIEdMU0xDKDQsICAgICAgICAgICAgIGQgPSBkc3Qudltwb3Mu eCArIHBdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBHTFNMQygzLCAg ICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICk7CisgICAgR0xTTEMoMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgIEdMU0xDKDMsICAgICAgICAg cGF0Y2hfZGlmZiA9IGQgKyBhIC0gYiAtIGM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KTsKKyAgICBHTFNMRigzLCAgICAgICAgIHcgPSBleHAocGF0Y2hfZGlmZiAqIHN0cmVuZ3RoWyVp XSk7ICAgICAgICAgICAgICAgICAgICAgICxkc3RfY29tcCk7CisgICAgR0xTTEMoMywgICAgICAg ICB3X3N1bSA9IHdbMF0gKyB3WzFdICsgd1syXSArIHdbM107ICAgICAgICAgICAgICAgICAgICAg ICApOworICAgIEdMU0xDKDMsICAgICAgICAgc3VtID0gZG90KHcsIHNyYyoyNTUpOyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBHTFNMQygwLCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Cisg ICAgaWYgKHQgPiAxKSB7CisgICAgICAgIEdMU0xGKDMsICAgICAgICAgYXRvbWljQWRkKHdlaWdo dHNfJWlbcG9zLnkqd3Nfc3RyaWRlWyVpXSArIHBvcy54XSwgd19zdW0pOyAgICxkc3RfY29tcCwg ZHN0X2NvbXApOworICAgICAgICBHTFNMRigzLCAgICAgICAgIGF0b21pY0FkZChzdW1zXyVpW3Bv cy55KndzX3N0cmlkZVslaV0gKyBwb3MueF0sIHN1bSk7ICAgICAgICAsZHN0X2NvbXAsIGRzdF9j b21wKTsKKyAgICB9IGVsc2UgeworICAgICAgICBHTFNMRigzLCAgICAgICAgIHdlaWdodHNfJWlb cG9zLnkqd3Nfc3RyaWRlWyVpXSArIHBvcy54XSArPSB3X3N1bTsgICAgICAgICAgICAsZHN0X2Nv bXAsIGRzdF9jb21wKTsKKyAgICAgICAgR0xTTEYoMywgICAgICAgICBzdW1zXyVpW3Bvcy55Kndz X3N0cmlkZVslaV0gKyBwb3MueF0gKz0gc3VtOyAgICAgICAgICAgICAgICAgLGRzdF9jb21wLCBk c3RfY29tcCk7CisgICAgfQorICAgIEdMU0xDKDIsICAgICB9ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBHTFNMQygxLCB9 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICk7Cit9CisKK3R5cGVkZWYgc3RydWN0IEhvcml6b250YWxQdXNoRGF0YSB7CisgICAg dWludDMyX3Qgd2lkdGhbNF07CisgICAgdWludDMyX3QgaGVpZ2h0WzRdOworICAgIHVpbnQzMl90 IHdzX3N0cmlkZVs0XTsKKyAgICBpbnQzMl90ICBwYXRjaF9zaXplWzRdOworICAgIGZsb2F0ICAg IHN0cmVuZ3RoWzRdOworICAgIFZrRGV2aWNlQWRkcmVzcyBpbnRlZ3JhbF9iYXNlOworICAgIHVp bnQ2NF90IGludGVncmFsX3NpemU7CisgICAgdWludDY0X3QgaW50X3N0cmlkZTsKKyAgICB1aW50 MzJfdCB4eW9mZnNfc3RhcnQ7Cit9IEhvcml6b250YWxQdXNoRGF0YTsKKworc3RhdGljIGF2X2Nv bGQgaW50IGluaXRfd2VpZ2h0c19waXBlbGluZShGRlZ1bGthbkNvbnRleHQgKnZrY3R4LCBGRlZr RXhlY1Bvb2wgKmV4ZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEZGVnVsa2FuU2hhZGVyICpzaGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEZGVmtTUElSVkNvbXBpbGVyICpzcHYsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IHQsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFWUGl4Rm10RGVzY3JpcHRvciAq ZGVzYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHBsYW5l cywgaW50ICpuYl9yb3dzKQoreworICAgIGludCBlcnI7CisgICAgdWludDhfdCAqc3B2X2RhdGE7 CisgICAgc2l6ZV90IHNwdl9sZW47CisgICAgdm9pZCAqc3B2X29wYXF1ZSA9IE5VTEw7CisgICAg RkZWdWxrYW5EZXNjcmlwdG9yU2V0QmluZGluZyAqZGVzY19zZXQ7CisgICAgaW50IG1heF9kaW0g PSBGRk1BWCh3aWR0aCwgaGVpZ2h0KTsKKyAgICB1aW50MzJfdCBtYXhfd2cgPSB2a2N0eC0+cHJv cHMucHJvcGVydGllcy5saW1pdHMubWF4Q29tcHV0ZVdvcmtHcm91cFNpemVbMF07CisgICAgaW50 IHdnX3NpemUsIHdnX3Jvd3M7CisKKyAgICAvKiBSb3VuZCB0aGUgbWF4IHdvcmtncm91cCBzaXpl IHRvIHRoZSBwcmV2aW91cyBwb3dlciBvZiB0d28gKi8KKyAgICB3Z19zaXplID0gbWF4X3dnOwor ICAgIHdnX3Jvd3MgPSAxOworCisgICAgaWYgKG1heF93ZyA+IG1heF9kaW0pIHsKKyAgICAgICAg d2dfc2l6ZSA9IG1heF9kaW07CisgICAgfSBlbHNlIGlmIChtYXhfd2cgPCBtYXhfZGltKSB7Cisg ICAgICAgIC8qIE1ha2UgaXQgZml0ICovCisgICAgICAgIHdoaWxlICh3Z19zaXplKndnX3Jvd3Mg PCBtYXhfZGltKQorICAgICAgICAgICAgd2dfcm93cysrOworICAgIH0KKworICAgIFJFVChmZl92 a19zaGFkZXJfaW5pdCh2a2N0eCwgc2hkLCAibmxtZWFuc193ZWlnaHRzIiwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgVktfU0hBREVSX1NUQUdFX0NPTVBVVEVfQklULAorICAgICAgICAgICAg ICAgICAgICAgICAgICAoY29uc3QgY2hhciAqW10pIHsgIkdMX0VYVF9idWZmZXJfcmVmZXJlbmNl IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJHTF9FWFRf YnVmZmVyX3JlZmVyZW5jZTIiIH0sIDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHdnX3Np emUsIDEsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDApKTsKKworICAgICpuYl9yb3dz ID0gd2dfcm93czsKKworICAgIGlmICh0ID4gMSkKKyAgICAgICAgR0xTTEMoMCwgI2V4dGVuc2lv biBHTF9FWFRfc2hhZGVyX2F0b21pY19mbG9hdCA6IHJlcXVpcmUgICAgICAgICAgICAgICk7Cisg ICAgR0xTTEMoMCwgI2V4dGVuc2lvbiBHTF9BUkJfZ3B1X3NoYWRlcl9pbnQ2NCA6IHJlcXVpcmUg ICAgICAgICAgICAgICAgICAgICApOworICAgIEdMU0xDKDAsICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBHTFNM RigwLCAjZGVmaW5lIERUWVBFICVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICxUWVBFX05BTUUpOworICAgIEdMU0xGKDAsICNkZWZpbmUgVF9BTElHTiAl aSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLFRZUEVfU0la RSk7CisgICAgR0xTTEMoMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgIEdMU0xDKDAsIGxheW91dChidWZmZXJf cmVmZXJlbmNlLCBidWZmZXJfcmVmZXJlbmNlX2FsaWduID0gVF9BTElHTikgYnVmZmVyIERhdGFC dWZmZXIgeyAgKTsKKyAgICBHTFNMQygxLCAgICAgRFRZUEUgdltdOyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgR0xTTEMoMCwgfTsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICApOworICAgIEdMU0xDKDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBHTFNMQygwLCBsYXlvdXQocHVzaF9j b25zdGFudCwgc3RkNDMwKSB1bmlmb3JtIHB1c2hDb25zdGFudHMgeyAgICAgICAgICAgICk7Cisg ICAgR0xTTEMoMSwgICAgIHV2ZWM0IHdpZHRoOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICApOworICAgIEdMU0xDKDEsICAgICB1dmVjNCBoZWlnaHQ7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBHTFNM QygxLCAgICAgdXZlYzQgd3Nfc3RyaWRlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICk7CisgICAgR0xTTEMoMSwgICAgIGl2ZWM0IHBhdGNoX3NpemU7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgIEdMU0xDKDEsICAg ICB2ZWM0IHN0cmVuZ3RoOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKTsKKyAgICBHTFNMQygxLCAgICAgRGF0YUJ1ZmZlciBpbnRlZ3JhbF9iYXNlOyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgR0xTTEMoMSwgICAgIHVpbnQ2 NF90IGludGVncmFsX3NpemU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAp OworICAgIEdMU0xDKDEsICAgICB1aW50NjRfdCBpbnRfc3RyaWRlOyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBHTFNMQygxLCAgICAgdWludCB4eW9mZnNf c3RhcnQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAg R0xTTEMoMCwgfTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICApOworICAgIEdMU0xDKDAsICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKworICAgIGZmX3Zr X3NoYWRlcl9hZGRfcHVzaF9jb25zdChzaGQsIDAsIHNpemVvZihIb3Jpem9udGFsUHVzaERhdGEp LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19TSEFERVJfU1RBR0VfQ09NUFVU RV9CSVQpOworCisgICAgZGVzY19zZXQgPSAoRkZWdWxrYW5EZXNjcmlwdG9yU2V0QmluZGluZyBb XSkgeworICAgICAgICB7CisgICAgICAgICAgICAubmFtZSAgICAgICA9ICJpbnB1dF9pbWciLAor ICAgICAgICAgICAgLnR5cGUgICAgICAgPSBWS19ERVNDUklQVE9SX1RZUEVfU1RPUkFHRV9JTUFH RSwKKyAgICAgICAgICAgIC5tZW1fbGF5b3V0ID0gZmZfdmtfc2hhZGVyX3JlcF9mbXQodmtjdHgt PmlucHV0X2Zvcm1hdCwgRkZfVktfUkVQX0ZMT0FUKSwKKyAgICAgICAgICAgIC5tZW1fcXVhbGkg ID0gInJlYWRvbmx5IiwKKyAgICAgICAgICAgIC5kaW1lbnNpb25zID0gMiwKKyAgICAgICAgICAg IC5lbGVtcyAgICAgID0gcGxhbmVzLAorICAgICAgICAgICAgLnN0YWdlcyAgICAgPSBWS19TSEFE RVJfU1RBR0VfQ09NUFVURV9CSVQsCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAg IC5uYW1lICAgICAgICA9ICJ3ZWlnaHRzX2J1ZmZlcl8wIiwKKyAgICAgICAgICAgIC50eXBlICAg ICAgICA9IFZLX0RFU0NSSVBUT1JfVFlQRV9TVE9SQUdFX0JVRkZFUiwKKyAgICAgICAgICAgIC5z dGFnZXMgICAgICA9IFZLX1NIQURFUl9TVEFHRV9DT01QVVRFX0JJVCwKKyAgICAgICAgICAgIC5i dWZfY29udGVudCA9ICJmbG9hdCB3ZWlnaHRzXzBbXTsiLAorICAgICAgICB9LAorICAgICAgICB7 CisgICAgICAgICAgICAubmFtZSAgICAgICAgPSAic3Vtc19idWZmZXJfMCIsCisgICAgICAgICAg ICAudHlwZSAgICAgICAgPSBWS19ERVNDUklQVE9SX1RZUEVfU1RPUkFHRV9CVUZGRVIsCisgICAg ICAgICAgICAuc3RhZ2VzICAgICAgPSBWS19TSEFERVJfU1RBR0VfQ09NUFVURV9CSVQsCisgICAg ICAgICAgICAuYnVmX2NvbnRlbnQgPSAiZmxvYXQgc3Vtc18wW107IiwKKyAgICAgICAgfSwKKyAg ICAgICAgeworICAgICAgICAgICAgLm5hbWUgICAgICAgID0gIndlaWdodHNfYnVmZmVyXzEiLAor ICAgICAgICAgICAgLnR5cGUgICAgICAgID0gVktfREVTQ1JJUFRPUl9UWVBFX1NUT1JBR0VfQlVG RkVSLAorICAgICAgICAgICAgLnN0YWdlcyAgICAgID0gVktfU0hBREVSX1NUQUdFX0NPTVBVVEVf QklULAorICAgICAgICAgICAgLmJ1Zl9jb250ZW50ID0gImZsb2F0IHdlaWdodHNfMVtdOyIsCisg ICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgIC5uYW1lICAgICAgICA9ICJzdW1zX2J1 ZmZlcl8xIiwKKyAgICAgICAgICAgIC50eXBlICAgICAgICA9IFZLX0RFU0NSSVBUT1JfVFlQRV9T VE9SQUdFX0JVRkZFUiwKKyAgICAgICAgICAgIC5zdGFnZXMgICAgICA9IFZLX1NIQURFUl9TVEFH RV9DT01QVVRFX0JJVCwKKyAgICAgICAgICAgIC5idWZfY29udGVudCA9ICJmbG9hdCBzdW1zXzFb XTsiLAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAubmFtZSAgICAgICAgPSAi d2VpZ2h0c19idWZmZXJfMiIsCisgICAgICAgICAgICAudHlwZSAgICAgICAgPSBWS19ERVNDUklQ VE9SX1RZUEVfU1RPUkFHRV9CVUZGRVIsCisgICAgICAgICAgICAuc3RhZ2VzICAgICAgPSBWS19T SEFERVJfU1RBR0VfQ09NUFVURV9CSVQsCisgICAgICAgICAgICAuYnVmX2NvbnRlbnQgPSAiZmxv YXQgd2VpZ2h0c18yW107IiwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgLm5h bWUgICAgICAgID0gInN1bXNfYnVmZmVyXzIiLAorICAgICAgICAgICAgLnR5cGUgICAgICAgID0g VktfREVTQ1JJUFRPUl9UWVBFX1NUT1JBR0VfQlVGRkVSLAorICAgICAgICAgICAgLnN0YWdlcyAg ICAgID0gVktfU0hBREVSX1NUQUdFX0NPTVBVVEVfQklULAorICAgICAgICAgICAgLmJ1Zl9jb250 ZW50ID0gImZsb2F0IHN1bXNfMltdOyIsCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAg ICAgIC5uYW1lICAgICAgICA9ICJ3ZWlnaHRzX2J1ZmZlcl8zIiwKKyAgICAgICAgICAgIC50eXBl ICAgICAgICA9IFZLX0RFU0NSSVBUT1JfVFlQRV9TVE9SQUdFX0JVRkZFUiwKKyAgICAgICAgICAg IC5zdGFnZXMgICAgICA9IFZLX1NIQURFUl9TVEFHRV9DT01QVVRFX0JJVCwKKyAgICAgICAgICAg IC5idWZfY29udGVudCA9ICJmbG9hdCB3ZWlnaHRzXzNbXTsiLAorICAgICAgICB9LAorICAgICAg ICB7CisgICAgICAgICAgICAubmFtZSAgICAgICAgPSAic3Vtc19idWZmZXJfMyIsCisgICAgICAg ICAgICAudHlwZSAgICAgICAgPSBWS19ERVNDUklQVE9SX1RZUEVfU1RPUkFHRV9CVUZGRVIsCisg ICAgICAgICAgICAuc3RhZ2VzICAgICAgPSBWS19TSEFERVJfU1RBR0VfQ09NUFVURV9CSVQsCisg ICAgICAgICAgICAuYnVmX2NvbnRlbnQgPSAiZmxvYXQgc3Vtc18zW107IiwKKyAgICAgICAgfSwK KyAgICB9OworICAgIFJFVChmZl92a19zaGFkZXJfYWRkX2Rlc2NyaXB0b3Jfc2V0KHZrY3R4LCBz aGQsIGRlc2Nfc2V0LCAxICsgMipkZXNjLT5uYl9jb21wb25lbnRzLCAwLCAwKSk7CisKKyAgICBk ZXNjX3NldCA9IChGRlZ1bGthbkRlc2NyaXB0b3JTZXRCaW5kaW5nIFtdKSB7CisgICAgICAgIHsK KyAgICAgICAgICAgIC5uYW1lICAgICAgICA9ICJ4eW9mZnNldHNfYnVmZmVyIiwKKyAgICAgICAg ICAgIC50eXBlICAgICAgICA9IFZLX0RFU0NSSVBUT1JfVFlQRV9TVE9SQUdFX0JVRkZFUiwKKyAg ICAgICAgICAgIC5tZW1fcXVhbGkgICA9ICJyZWFkb25seSIsCisgICAgICAgICAgICAuc3RhZ2Vz ICAgICAgPSBWS19TSEFERVJfU1RBR0VfQ09NUFVURV9CSVQsCisgICAgICAgICAgICAuYnVmX2Nv bnRlbnQgPSAiaXZlYzIgeHlvZmZzZXRzW107IiwKKyAgICAgICAgfSwKKyAgICB9OworICAgIFJF VChmZl92a19zaGFkZXJfYWRkX2Rlc2NyaXB0b3Jfc2V0KHZrY3R4LCBzaGQsIGRlc2Nfc2V0LCAx LCAxLCAwKSk7CisKKyAgICBHTFNMQygwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgR0xTTEMoMCwgdm9p ZCBtYWluKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICApOworICAgIEdMU0xDKDAsIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBHTFNMQygxLCAgICAg dWludDY0X3Qgb2Zmc2V0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICk7CisgICAgR0xTTEMoMSwgICAgIERhdGFCdWZmZXIgZHN0OyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgIEdMU0xDKDEsICAgICBm bG9hdCBzMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKTsKKyAgICBHTFNMQygxLCAgICAgRFRZUEUgczI7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgR0xTTEMoMSwgICAgIERU WVBFIHByZWZpeF9zdW07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICApOworICAgIEdMU0xGKDEsICAgICBEVFlQRSBwc3VtWyVpXTsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCpuYl9yb3dzKTsKKyAgICBHTFNMQygx LCAgICAgaW50IHI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICk7CisgICAgR0xTTEMoMSwgICAgIGl2ZWMyIHBvczsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgIEdMU0xDKDEs ICAgICBpbnQgcDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKTsKKyAgICBHTFNMQygwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgR0xTTEMoMSwg ICAgIERhdGFCdWZmZXIgaW50ZWdyYWxfZGF0YTsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICApOworICAgIEdMU0xGKDEsICAgICBpdmVjMiBvZmZzWyVpXTsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLFRZUEVfRUxFTVMpOworICAg IEdMU0xDKDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBHTFNMQygxLCAgICAgaW50IGludm9jX2lkeCA9 IGludChnbF9Xb3JrR3JvdXBJRC56KTsgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAg R0xTTEMoMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICApOworICAgIEdMU0xDKDEsICAgICBvZmZzZXQgPSBpbnRlZ3Jh bF9zaXplICogaW52b2NfaWR4OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBH TFNMQygxLCAgICAgaW50ZWdyYWxfZGF0YSA9IERhdGFCdWZmZXIodWludDY0X3QoaW50ZWdyYWxf YmFzZSkgKyBvZmZzZXQpOyAgICk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBUWVBFX0VMRU1T OyBpKyspCisgICAgICAgIEdMU0xGKDEsIG9mZnNbJWldID0geHlvZmZzZXRzW3h5b2Zmc19zdGFy dCArICVpKmludm9jX2lkeCArICVpXTsgICAgICAgICAsaSxUWVBFX0VMRU1TLGkpOworICAgIEdM U0xDKDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKTsKKyAgICBHTFNMQygxLCAgICAgRFRZUEUgYTsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgR0xT TEMoMSwgICAgIERUWVBFIGI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICApOworICAgIEdMU0xDKDEsICAgICBEVFlQRSBjOyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBHTFNM QygxLCAgICAgRFRZUEUgZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICk7CisgICAgR0xTTEMoMCwgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgIEdMU0xD KDEsICAgICBEVFlQRSBwYXRjaF9kaWZmOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKTsKKyAgICBpZiAoVFlQRV9FTEVNUyA9PSA0KSB7CisgICAgICAgIEdM U0xDKDEsIHZlYzQgc3JjOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICApOworICAgICAgICBHTFNMQygxLCB2ZWM0IHc7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICB9IGVsc2Ug eworICAgICAgICBHTFNMQygxLCB2ZWM0IHNyY1s0XTsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgR0xTTEMoMSwgdmVjNCB3WzRd OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7 CisgICAgfQorICAgIEdMU0xDKDEsICAgICBmbG9hdCB3X3N1bTsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBHTFNMQygxLCAgICAgZmxv YXQgc3VtOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICk7CisgICAgR0xTTEMoMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgIEdMU0xDKDEsICAgICBib29s IGx0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKTsKKyAgICBHTFNMQygxLCAgICAgYm9vbCBndDsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgR0xTTEMoMCwgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICApOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZXNjLT5uYl9jb21wb25lbnRzOyBpKysp IHsKKyAgICAgICAgaW50IG9mZiA9IGRlc2MtPmNvbXBbaV0ub2Zmc2V0IC8gKEZGQUxJR04oZGVz Yy0+Y29tcFtpXS5kZXB0aCwgOCkvOCk7CisgICAgICAgIGlmICh3aWR0aCA+PSBoZWlnaHQpIHsK KyAgICAgICAgICAgIGluc2VydF9ob3Jpem9udGFsX3Bhc3Moc2hkLCAqbmJfcm93cywgMSwgZGVz Yy0+Y29tcFtpXS5wbGFuZSwgb2ZmKTsKKyAgICAgICAgICAgIGluc2VydF92ZXJ0aWNhbF9wYXNz KHNoZCwgKm5iX3Jvd3MsIDAsIGRlc2MtPmNvbXBbaV0ucGxhbmUsIG9mZik7CisgICAgICAgICAg ICBpbnNlcnRfd2VpZ2h0c19wYXNzKHNoZCwgKm5iX3Jvd3MsIDAsIHQsIGksIGRlc2MtPmNvbXBb aV0ucGxhbmUsIG9mZik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpbnNlcnRfdmVy dGljYWxfcGFzcyhzaGQsICpuYl9yb3dzLCAxLCBkZXNjLT5jb21wW2ldLnBsYW5lLCBvZmYpOwor ICAgICAgICAgICAgaW5zZXJ0X2hvcml6b250YWxfcGFzcyhzaGQsICpuYl9yb3dzLCAwLCBkZXNj LT5jb21wW2ldLnBsYW5lLCBvZmYpOworICAgICAgICAgICAgaW5zZXJ0X3dlaWdodHNfcGFzcyhz aGQsICpuYl9yb3dzLCAxLCB0LCBpLCBkZXNjLT5jb21wW2ldLnBsYW5lLCBvZmYpOworICAgICAg ICB9CisgICAgfQorCisgICAgR0xTTEMoMCwgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworCisgICAgUkVUKHNwdi0+ Y29tcGlsZV9zaGFkZXIodmtjdHgsIHNwdiwgc2hkLCAmc3B2X2RhdGEsICZzcHZfbGVuLCAibWFp biIsICZzcHZfb3BhcXVlKSk7CisgICAgUkVUKGZmX3ZrX3NoYWRlcl9saW5rKHZrY3R4LCBzaGQs IHNwdl9kYXRhLCBzcHZfbGVuLCAibWFpbiIpKTsKKworICAgIFJFVChmZl92a19zaGFkZXJfcmVn aXN0ZXJfZXhlYyh2a2N0eCwgZXhlYywgc2hkKSk7CisKK2ZhaWw6CisgICAgaWYgKHNwdl9vcGFx dWUpCisgICAgICAgIHNwdi0+ZnJlZV9zaGFkZXIoc3B2LCAmc3B2X29wYXF1ZSk7CisKKyAgICBy ZXR1cm4gZXJyOworfQorCit0eXBlZGVmIHN0cnVjdCBEZW5vaXNlUHVzaERhdGEgeworICAgIHVp bnQzMl90IHdzX3N0cmlkZVs0XTsKK30gRGVub2lzZVB1c2hEYXRhOworCitzdGF0aWMgYXZfY29s ZCBpbnQgaW5pdF9kZW5vaXNlX3BpcGVsaW5lKEZGVnVsa2FuQ29udGV4dCAqdmtjdHgsIEZGVmtF eGVjUG9vbCAqZXhlYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg RkZWdWxrYW5TaGFkZXIgKnNoZCwgRkZWa1NQSVJWQ29tcGlsZXIgKnNwdiwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQVZQaXhGbXREZXNjcmlwdG9yICpk ZXNjLCBpbnQgcGxhbmVzKQoreworICAgIGludCBlcnI7CisgICAgdWludDhfdCAqc3B2X2RhdGE7 CisgICAgc2l6ZV90IHNwdl9sZW47CisgICAgdm9pZCAqc3B2X29wYXF1ZSA9IE5VTEw7CisgICAg RkZWdWxrYW5EZXNjcmlwdG9yU2V0QmluZGluZyAqZGVzY19zZXQ7CisKKyAgICBSRVQoZmZfdmtf c2hhZGVyX2luaXQodmtjdHgsIHNoZCwgIm5sbWVhbnNfZGVub2lzZSIsCisgICAgICAgICAgICAg ICAgICAgICAgICAgIFZLX1NIQURFUl9TVEFHRV9DT01QVVRFX0JJVCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgKGNvbnN0IGNoYXIgKltdKSB7ICJHTF9FWFRfYnVmZmVyX3JlZmVyZW5jZSIs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiR0xfRVhUX2J1 ZmZlcl9yZWZlcmVuY2UyIiB9LCAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAzMiwgMzIs IDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDApKTsKKworICAgIEdMU0xDKDAsIGxheW91 dChwdXNoX2NvbnN0YW50LCBzdGQ0MzApIHVuaWZvcm0gcHVzaENvbnN0YW50cyB7ICAgICAgICAp OworICAgIEdMU0xDKDEsICAgIHV2ZWM0IHdzX3N0cmlkZTsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICApOworICAgIEdMU0xDKDAsIH07ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworCisgICAgZmZfdmtf c2hhZGVyX2FkZF9wdXNoX2NvbnN0KHNoZCwgMCwgc2l6ZW9mKERlbm9pc2VQdXNoRGF0YSksCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZLX1NIQURFUl9TVEFHRV9DT01QVVRFX0JJ VCk7CisKKyAgICBkZXNjX3NldCA9IChGRlZ1bGthbkRlc2NyaXB0b3JTZXRCaW5kaW5nIFtdKSB7 CisgICAgICAgIHsKKyAgICAgICAgICAgIC5uYW1lICAgICAgICA9ICJpbnB1dF9pbWciLAorICAg ICAgICAgICAgLnR5cGUgICAgICAgID0gVktfREVTQ1JJUFRPUl9UWVBFX1NUT1JBR0VfSU1BR0Us CisgICAgICAgICAgICAubWVtX2xheW91dCAgPSBmZl92a19zaGFkZXJfcmVwX2ZtdCh2a2N0eC0+ aW5wdXRfZm9ybWF0LCBGRl9WS19SRVBfRkxPQVQpLAorICAgICAgICAgICAgLm1lbV9xdWFsaSAg ID0gInJlYWRvbmx5IiwKKyAgICAgICAgICAgIC5kaW1lbnNpb25zICA9IDIsCisgICAgICAgICAg ICAuZWxlbXMgICAgICAgPSBwbGFuZXMsCisgICAgICAgICAgICAuc3RhZ2VzICAgICAgPSBWS19T SEFERVJfU1RBR0VfQ09NUFVURV9CSVQsCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAg ICAgIC5uYW1lICAgICAgICA9ICJvdXRwdXRfaW1nIiwKKyAgICAgICAgICAgIC50eXBlICAgICAg ICA9IFZLX0RFU0NSSVBUT1JfVFlQRV9TVE9SQUdFX0lNQUdFLAorICAgICAgICAgICAgLm1lbV9s YXlvdXQgID0gZmZfdmtfc2hhZGVyX3JlcF9mbXQodmtjdHgtPm91dHB1dF9mb3JtYXQsIEZGX1ZL X1JFUF9GTE9BVCksCisgICAgICAgICAgICAubWVtX3F1YWxpICAgPSAid3JpdGVvbmx5IiwKKyAg ICAgICAgICAgIC5kaW1lbnNpb25zICA9IDIsCisgICAgICAgICAgICAuZWxlbXMgICAgICAgPSBw bGFuZXMsCisgICAgICAgICAgICAuc3RhZ2VzICAgICAgPSBWS19TSEFERVJfU1RBR0VfQ09NUFVU RV9CSVQsCisgICAgICAgIH0sCisgICAgfTsKKyAgICBSRVQoZmZfdmtfc2hhZGVyX2FkZF9kZXNj cmlwdG9yX3NldCh2a2N0eCwgc2hkLCBkZXNjX3NldCwgMiwgMCwgMCkpOworCisgICAgZGVzY19z ZXQgPSAoRkZWdWxrYW5EZXNjcmlwdG9yU2V0QmluZGluZyBbXSkgeworICAgICAgICB7CisgICAg ICAgICAgICAubmFtZSAgICAgICAgPSAid2VpZ2h0c19idWZmZXJfMCIsCisgICAgICAgICAgICAu dHlwZSAgICAgICAgPSBWS19ERVNDUklQVE9SX1RZUEVfU1RPUkFHRV9CVUZGRVIsCisgICAgICAg ICAgICAubWVtX3F1YWxpICAgPSAicmVhZG9ubHkiLAorICAgICAgICAgICAgLnN0YWdlcyAgICAg ID0gVktfU0hBREVSX1NUQUdFX0NPTVBVVEVfQklULAorICAgICAgICAgICAgLmJ1Zl9jb250ZW50 ID0gImZsb2F0IHdlaWdodHNfMFtdOyIsCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAg ICAgIC5uYW1lICAgICAgICA9ICJzdW1zX2J1ZmZlcl8wIiwKKyAgICAgICAgICAgIC50eXBlICAg ICAgICA9IFZLX0RFU0NSSVBUT1JfVFlQRV9TVE9SQUdFX0JVRkZFUiwKKyAgICAgICAgICAgIC5t ZW1fcXVhbGkgICA9ICJyZWFkb25seSIsCisgICAgICAgICAgICAuc3RhZ2VzICAgICAgPSBWS19T SEFERVJfU1RBR0VfQ09NUFVURV9CSVQsCisgICAgICAgICAgICAuYnVmX2NvbnRlbnQgPSAiZmxv YXQgc3Vtc18wW107IiwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgLm5hbWUg ICAgICAgID0gIndlaWdodHNfYnVmZmVyXzEiLAorICAgICAgICAgICAgLnR5cGUgICAgICAgID0g VktfREVTQ1JJUFRPUl9UWVBFX1NUT1JBR0VfQlVGRkVSLAorICAgICAgICAgICAgLm1lbV9xdWFs aSAgID0gInJlYWRvbmx5IiwKKyAgICAgICAgICAgIC5zdGFnZXMgICAgICA9IFZLX1NIQURFUl9T VEFHRV9DT01QVVRFX0JJVCwKKyAgICAgICAgICAgIC5idWZfY29udGVudCA9ICJmbG9hdCB3ZWln aHRzXzFbXTsiLAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAubmFtZSAgICAg ICAgPSAic3Vtc19idWZmZXJfMSIsCisgICAgICAgICAgICAudHlwZSAgICAgICAgPSBWS19ERVND UklQVE9SX1RZUEVfU1RPUkFHRV9CVUZGRVIsCisgICAgICAgICAgICAubWVtX3F1YWxpICAgPSAi cmVhZG9ubHkiLAorICAgICAgICAgICAgLnN0YWdlcyAgICAgID0gVktfU0hBREVSX1NUQUdFX0NP TVBVVEVfQklULAorICAgICAgICAgICAgLmJ1Zl9jb250ZW50ID0gImZsb2F0IHN1bXNfMVtdOyIs CisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgIC5uYW1lICAgICAgICA9ICJ3ZWln aHRzX2J1ZmZlcl8yIiwKKyAgICAgICAgICAgIC50eXBlICAgICAgICA9IFZLX0RFU0NSSVBUT1Jf VFlQRV9TVE9SQUdFX0JVRkZFUiwKKyAgICAgICAgICAgIC5tZW1fcXVhbGkgICA9ICJyZWFkb25s eSIsCisgICAgICAgICAgICAuc3RhZ2VzICAgICAgPSBWS19TSEFERVJfU1RBR0VfQ09NUFVURV9C SVQsCisgICAgICAgICAgICAuYnVmX2NvbnRlbnQgPSAiZmxvYXQgd2VpZ2h0c18yW107IiwKKyAg ICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgLm5hbWUgICAgICAgID0gInN1bXNfYnVm ZmVyXzIiLAorICAgICAgICAgICAgLnR5cGUgICAgICAgID0gVktfREVTQ1JJUFRPUl9UWVBFX1NU T1JBR0VfQlVGRkVSLAorICAgICAgICAgICAgLm1lbV9xdWFsaSAgID0gInJlYWRvbmx5IiwKKyAg ICAgICAgICAgIC5zdGFnZXMgICAgICA9IFZLX1NIQURFUl9TVEFHRV9DT01QVVRFX0JJVCwKKyAg ICAgICAgICAgIC5idWZfY29udGVudCA9ICJmbG9hdCBzdW1zXzJbXTsiLAorICAgICAgICB9LAor ICAgICAgICB7CisgICAgICAgICAgICAubmFtZSAgICAgICAgPSAid2VpZ2h0c19idWZmZXJfMyIs CisgICAgICAgICAgICAudHlwZSAgICAgICAgPSBWS19ERVNDUklQVE9SX1RZUEVfU1RPUkFHRV9C VUZGRVIsCisgICAgICAgICAgICAubWVtX3F1YWxpICAgPSAicmVhZG9ubHkiLAorICAgICAgICAg ICAgLnN0YWdlcyAgICAgID0gVktfU0hBREVSX1NUQUdFX0NPTVBVVEVfQklULAorICAgICAgICAg ICAgLmJ1Zl9jb250ZW50ID0gImZsb2F0IHdlaWdodHNfM1tdOyIsCisgICAgICAgIH0sCisgICAg ICAgIHsKKyAgICAgICAgICAgIC5uYW1lICAgICAgICA9ICJzdW1zX2J1ZmZlcl8zIiwKKyAgICAg ICAgICAgIC50eXBlICAgICAgICA9IFZLX0RFU0NSSVBUT1JfVFlQRV9TVE9SQUdFX0JVRkZFUiwK KyAgICAgICAgICAgIC5tZW1fcXVhbGkgICA9ICJyZWFkb25seSIsCisgICAgICAgICAgICAuc3Rh Z2VzICAgICAgPSBWS19TSEFERVJfU1RBR0VfQ09NUFVURV9CSVQsCisgICAgICAgICAgICAuYnVm X2NvbnRlbnQgPSAiZmxvYXQgc3Vtc18zW107IiwKKyAgICAgICAgfSwKKyAgICB9OworCisgICAg UkVUKGZmX3ZrX3NoYWRlcl9hZGRfZGVzY3JpcHRvcl9zZXQodmtjdHgsIHNoZCwgZGVzY19zZXQs IDIqZGVzYy0+bmJfY29tcG9uZW50cywgMCwgMCkpOworCisgICAgR0xTTEMoMCwgdm9pZCBtYWlu KCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAp OworICAgIEdMU0xDKDAsIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBHTFNMQygxLCAgICAgaXZlYzIgc2l6ZTsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAg R0xTTEMoMSwgICAgIGNvbnN0IGl2ZWMyIHBvcyA9IGl2ZWMyKGdsX0dsb2JhbEludm9jYXRpb25J RC54eSk7ICAgICAgICAgICApOworICAgIEdMU0xDKDEsICAgICBjb25zdCB1aW50IHBsYW5lID0g dWludChnbF9Xb3JrR3JvdXBJRC56KTsgICAgICAgICAgICAgICAgICAgKTsKKyAgICBHTFNMQygw LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICk7CisgICAgR0xTTEMoMSwgICAgIGZsb2F0IHdfc3VtOyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgIEdMU0xDKDEsICAgICBm bG9hdCBzdW07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKTsKKyAgICBHTFNMQygxLCAgICAgdmVjNCBzcmM7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgR0xTTEMoMSwgICAgIHZlYzQgcjsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwor ICAgIEdMU0xDKDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBHTFNMQygxLCAgICAgc2l6ZSA9IGltYWdlU2l6 ZShvdXRwdXRfaW1nW3BsYW5lXSk7ICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgR0xT TEMoMSwgICAgIGlmICghSVNfV0lUSElOKHBvcywgc2l6ZSkpICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICApOworICAgIEdMU0xDKDIsICAgICAgICAgcmV0dXJuOyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBHTFNMQygwLCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICk7CisgICAgR0xTTEMoMSwgICAgIHNyYyA9IGltYWdlTG9hZChpbnB1dF9pbWdbcGxh bmVdLCBwb3MpOyAgICAgICAgICAgICAgICAgICAgICApOworICAgIEdMU0xDKDAsICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KTsKKyAgICBmb3IgKGludCBjID0gMDsgYyA8IGRlc2MtPm5iX2NvbXBvbmVudHM7IGMrKykgewor ICAgICAgICBpbnQgb2ZmID0gZGVzYy0+Y29tcFtjXS5vZmZzZXQgLyAoRkZBTElHTihkZXNjLT5j b21wW2NdLmRlcHRoLCA4KS84KTsKKyAgICAgICAgR0xTTEYoMSwgaWYgKHBsYW5lID09ICVpKSB7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICxkZXNjLT5jb21w W2NdLnBsYW5lKTsKKyAgICAgICAgR0xTTEYoMiwgICAgIHdfc3VtID0gd2VpZ2h0c18laVtwb3Mu eSp3c19zdHJpZGVbJWldICsgcG9zLnhdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICxjLCBj KTsKKyAgICAgICAgR0xTTEYoMiwgICAgIHN1bSA9IHN1bXNfJWlbcG9zLnkqd3Nfc3RyaWRlWyVp XSArIHBvcy54XTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICxjLCBjKTsKKyAgICAg ICAgR0xTTEYoMiwgICAgIHJbJWldID0gKHN1bSArIHNyY1slaV0qMjU1KSAvICgxLjAgKyB3X3N1 bSkgLyAyNTU7ICAgICAgICAgICAgICAgICAgICAgLG9mZiwgb2ZmKTsKKyAgICAgICAgR0xTTEMo MSwgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgR0xTTEMoMCwgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICB9CisgICAgR0xTTEMoMSwgaW1hZ2VTdG9yZShv dXRwdXRfaW1nW3BsYW5lXSwgcG9zLCByKTsgICAgICAgICAgICAgICAgICAgICAgICAgICApOwor ICAgIEdMU0xDKDAsIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKTsKKworICAgIFJFVChzcHYtPmNvbXBpbGVfc2hhZGVyKHZr Y3R4LCBzcHYsIHNoZCwgJnNwdl9kYXRhLCAmc3B2X2xlbiwgIm1haW4iLCAmc3B2X29wYXF1ZSkp OworICAgIFJFVChmZl92a19zaGFkZXJfbGluayh2a2N0eCwgc2hkLCBzcHZfZGF0YSwgc3B2X2xl biwgIm1haW4iKSk7CisKKyAgICBSRVQoZmZfdmtfc2hhZGVyX3JlZ2lzdGVyX2V4ZWModmtjdHgs IGV4ZWMsIHNoZCkpOworCitmYWlsOgorICAgIGlmIChzcHZfb3BhcXVlKQorICAgICAgICBzcHYt PmZyZWVfc2hhZGVyKHNwdiwgJnNwdl9vcGFxdWUpOworCisgICAgcmV0dXJuIGVycjsKK30KKwor c3RhdGljIGF2X2NvbGQgaW50IGluaXRfZmlsdGVyKEFWRmlsdGVyQ29udGV4dCAqY3R4KQorewor ICAgIGludCByYWQsIGVycjsKKyAgICBpbnQgeGNudCA9IDAsIHljbnQgPSAwOworICAgIE5MTWVh bnNWdWxrYW5Db250ZXh0ICpzID0gY3R4LT5wcml2OworICAgIEZGVnVsa2FuQ29udGV4dCAqdmtj dHggPSAmcy0+dmtjdHg7CisgICAgY29uc3QgaW50IHBsYW5lcyA9IGF2X3BpeF9mbXRfY291bnRf cGxhbmVzKHMtPnZrY3R4Lm91dHB1dF9mb3JtYXQpOworICAgIEZGVmtTUElSVkNvbXBpbGVyICpz cHYgPSBOVUxMOworICAgIGludCAqb2Zmc2V0c19idWY7CisgICAgaW50IG9mZnNldHNfZGlzcGF0 Y2hlZCA9IDAsIG5iX2Rpc3BhdGNoZXMgPSAwOworCisgICAgY29uc3QgQVZQaXhGbXREZXNjcmlw dG9yICpkZXNjOworICAgIGRlc2MgPSBhdl9waXhfZm10X2Rlc2NfZ2V0KHZrY3R4LT5vdXRwdXRf Zm9ybWF0KTsKKyAgICBpZiAoIWRlc2MpCisgICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7 CisKKyAgICBpZiAoIShzLT5vcHRzLnIgJiAxKSkgeworICAgICAgICBzLT5vcHRzLnIgfD0gMTsK KyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX1dBUk5JTkcsICJSZXNlYXJjaCBzaXplIHNob3Vs ZCBiZSBvZGQsIHNldHRpbmcgdG8gJWkiLAorICAgICAgICAgICAgICAgcy0+b3B0cy5yKTsKKyAg ICB9CisKKyAgICBpZiAoIShzLT5vcHRzLnAgJiAxKSkgeworICAgICAgICBzLT5vcHRzLnAgfD0g MTsKKyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX1dBUk5JTkcsICJQYXRjaCBzaXplIHNob3Vs ZCBiZSBvZGQsIHNldHRpbmcgdG8gJWkiLAorICAgICAgICAgICAgICAgcy0+b3B0cy5wKTsKKyAg ICB9CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkrKykgeworICAgICAgICBkb3VibGUg c3RyID0gKHMtPm9wdHMuc2NbaV0gPiAxLjApID8gcy0+b3B0cy5zY1tpXSA6IHMtPm9wdHMuczsK KyAgICAgICAgaW50IHBzID0gKHMtPm9wdHMucGNbaV0gPyBzLT5vcHRzLnBjW2ldIDogcy0+b3B0 cy5wKTsKKyAgICAgICAgc3RyICA9IDEwLjBmKnN0cjsKKyAgICAgICAgc3RyICo9IC1zdHI7Cisg ICAgICAgIHN0ciAgPSAyNTUuMCoyNTUuMCAvIHN0cjsKKyAgICAgICAgcy0+c3RyZW5ndGhbaV0g PSBzdHI7CisgICAgICAgIGlmICghKHBzICYgMSkpIHsKKyAgICAgICAgICAgIHBzIHw9IDE7Cisg ICAgICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfV0FSTklORywgIlBhdGNoIHNpemUgc2hvdWxk IGJlIG9kZCwgc2V0dGluZyB0byAlaSIsCisgICAgICAgICAgICAgICAgICAgcHMpOworICAgICAg ICB9CisgICAgICAgIHMtPnBhdGNoW2ldID0gcHMgLyAyOworICAgIH0KKworICAgIHJhZCA9IHMt Pm9wdHMuci8yOworICAgIHMtPm5iX29mZnNldHMgPSAoMipyYWQgKyAxKSooMipyYWQgKyAxKSAt IDE7CisgICAgcy0+eG9mZnNldHMgPSBhdl9tYWxsb2Mocy0+bmJfb2Zmc2V0cypzaXplb2YoKnMt PnhvZmZzZXRzKSk7CisgICAgcy0+eW9mZnNldHMgPSBhdl9tYWxsb2Mocy0+bmJfb2Zmc2V0cypz aXplb2YoKnMtPnlvZmZzZXRzKSk7CisgICAgcy0+bmJfb2Zmc2V0cyA9IDA7CisKKyAgICBmb3Ig KGludCB4ID0gLXJhZDsgeCA8PSByYWQ7IHgrKykgeworICAgICAgICBmb3IgKGludCB5ID0gLXJh ZDsgeSA8PSByYWQ7IHkrKykgeworICAgICAgICAgICAgaWYgKCF4ICYmICF5KQorICAgICAgICAg ICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBzLT54b2Zmc2V0c1t4Y250KytdID0geDsK KyAgICAgICAgICAgIHMtPnlvZmZzZXRzW3ljbnQrK10gPSB5OworICAgICAgICAgICAgcy0+bmJf b2Zmc2V0cysrOworICAgICAgICB9CisgICAgfQorCisgICAgUkVUKGZmX3ZrX2NyZWF0ZV9idWYo JnMtPnZrY3R4LCAmcy0+eHlvZmZzZXRzX2J1ZiwgMipzLT5uYl9vZmZzZXRzKnNpemVvZihpbnQz Ml90KSwgTlVMTCwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBWS19CVUZGRVJfVVNB R0VfU0hBREVSX0RFVklDRV9BRERSRVNTX0JJVCB8CisgICAgICAgICAgICAgICAgICAgICAgICAg VktfQlVGRkVSX1VTQUdFX1NUT1JBR0VfQlVGRkVSX0JJVCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICBWS19NRU1PUllfUFJPUEVSVFlfSE9TVF9WSVNJQkxFX0JJVCB8CisgICAgICAgICAgICAg ICAgICAgICAgICAgVktfTUVNT1JZX1BST1BFUlRZX0RFVklDRV9MT0NBTF9CSVQpKTsKKyAgICBS RVQoZmZfdmtfbWFwX2J1ZmZlcigmcy0+dmtjdHgsICZzLT54eW9mZnNldHNfYnVmLCAodWludDhf dCAqKikmb2Zmc2V0c19idWYsIDApKTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMipzLT5u Yl9vZmZzZXRzOyBpICs9IDIpIHsKKyAgICAgICAgb2Zmc2V0c19idWZbaSArIDBdID0gcy0+eG9m ZnNldHNbaSA+PiAxXTsKKyAgICAgICAgb2Zmc2V0c19idWZbaSArIDFdID0gcy0+eW9mZnNldHNb aSA+PiAxXTsKKyAgICB9CisKKyAgICBSRVQoZmZfdmtfdW5tYXBfYnVmZmVyKCZzLT52a2N0eCwg JnMtPnh5b2Zmc2V0c19idWYsIDEpKTsKKworICAgIHMtPm9wdHMudCA9IEZGTUlOKHMtPm9wdHMu dCwgKEZGQUxJR04ocy0+bmJfb2Zmc2V0cywgVFlQRV9FTEVNUykgLyBUWVBFX0VMRU1TKSk7Cisg ICAgaWYgKCF2a2N0eC0+YXRvbWljX2Zsb2F0X2ZlYXRzLnNoYWRlckJ1ZmZlckZsb2F0MzJBdG9t aWNBZGQpIHsKKyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX1dBUk5JTkcsICJEZXZpY2UgZG9l c24ndCBzdXBwb3J0IGF0b21pYyBmbG9hdCBhZGRzLCAiCisgICAgICAgICAgICAgICAiZGlzYWJs aW5nIGRpc3BhdGNoIHBhcmFsbGVsaXNtXG4iKTsKKyAgICAgICAgcy0+b3B0cy50ID0gMTsKKyAg ICB9CisKKyAgICBzcHYgPSBmZl92a19zcGlydl9pbml0KCk7CisgICAgaWYgKCFzcHYpIHsKKyAg ICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiVW5hYmxlIHRvIGluaXRpYWxpemUgU1BJ Ui1WIGNvbXBpbGVyIVxuIik7CisgICAgICAgIHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOworICAg IH0KKworICAgIHMtPnFmID0gZmZfdmtfcWZfZmluZCh2a2N0eCwgVktfUVVFVUVfQ09NUFVURV9C SVQsIDApOworICAgIGlmICghcy0+cWYpIHsKKyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VS Uk9SLCAiRGV2aWNlIGhhcyBubyBjb21wdXRlIHF1ZXVlc1xuIik7CisgICAgICAgIGVyciA9IEFW RVJST1IoRU5PVFNVUCk7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICBSRVQoZmZf dmtfZXhlY19wb29sX2luaXQodmtjdHgsIHMtPnFmLCAmcy0+ZSwgMSwgMCwgMCwgMCwgTlVMTCkp OworCisgICAgUkVUKGluaXRfd2VpZ2h0c19waXBlbGluZSh2a2N0eCwgJnMtPmUsICZzLT5zaGRf d2VpZ2h0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwdiwgcy0+dmtjdHgub3V0 cHV0X3dpZHRoLCBzLT52a2N0eC5vdXRwdXRfaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcy0+b3B0cy50LCBkZXNjLCBwbGFuZXMsICZzLT5wbF93ZWlnaHRzX3Jvd3MpKTsK KworICAgIFJFVChpbml0X2Rlbm9pc2VfcGlwZWxpbmUodmtjdHgsICZzLT5lLCAmcy0+c2hkX2Rl bm9pc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcHYsIGRlc2MsIHBsYW5lcykp OworCisgICAgUkVUKGZmX3ZrX3NoYWRlcl91cGRhdGVfZGVzY19idWZmZXIodmtjdHgsICZzLT5l LmNvbnRleHRzWzBdLCAmcy0+c2hkX3dlaWdodHMsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgMSwgMCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICZzLT54eW9mZnNldHNfYnVmLCAwLCBzLT54eW9mZnNldHNfYnVmLnNpemUsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19GT1JNQVRfVU5ERUZJTkVEKSk7CisKKyAg ICBkbyB7CisgICAgICAgIGludCB3Z19pbnZvYyA9IEZGTUlOKChzLT5uYl9vZmZzZXRzIC0gb2Zm c2V0c19kaXNwYXRjaGVkKS9UWVBFX0VMRU1TLCBzLT5vcHRzLnQpOworICAgICAgICB3Z19pbnZv YyA9IEZGTUlOKHdnX2ludm9jLCB2a2N0eC0+cHJvcHMucHJvcGVydGllcy5saW1pdHMubWF4Q29t cHV0ZVdvcmtHcm91cENvdW50WzJdKTsKKyAgICAgICAgb2Zmc2V0c19kaXNwYXRjaGVkICs9IHdn X2ludm9jICogVFlQRV9FTEVNUzsKKyAgICAgICAgbmJfZGlzcGF0Y2hlcysrOworICAgIH0gd2hp bGUgKG9mZnNldHNfZGlzcGF0Y2hlZCA8IHMtPm5iX29mZnNldHMpOworCisgICAgYXZfbG9nKGN0 eCwgQVZfTE9HX1ZFUkJPU0UsICJGaWx0ZXIgaW5pdGlhbGl6ZWQsICVpIHgveSBvZmZzZXRzLCAl aSBkaXNwYXRjaGVzXG4iLAorICAgICAgICAgICBzLT5uYl9vZmZzZXRzLCBuYl9kaXNwYXRjaGVz KTsKKworICAgIHMtPmluaXRpYWxpemVkID0gMTsKKworZmFpbDoKKyAgICBpZiAoc3B2KQorICAg ICAgICBzcHYtPnVuaW5pdCgmc3B2KTsKKworICAgIHJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBp bnQgZGVub2lzZV9wYXNzKE5MTWVhbnNWdWxrYW5Db250ZXh0ICpzLCBGRlZrRXhlY0NvbnRleHQg KmV4ZWMsCisgICAgICAgICAgICAgICAgICAgICAgICBGRlZrQnVmZmVyICp3c192aywgdWludDMy X3Qgd3Nfc3RyaWRlWzRdKQoreworICAgIEZGVnVsa2FuQ29udGV4dCAqdmtjdHggPSAmcy0+dmtj dHg7CisgICAgRkZWdWxrYW5GdW5jdGlvbnMgKnZrID0gJnZrY3R4LT52a2ZuOworICAgIFZrQnVm ZmVyTWVtb3J5QmFycmllcjIgYnVmX2Jhcls4XTsKKyAgICBpbnQgbmJfYnVmX2JhciA9IDA7CisK KyAgICBEZW5vaXNlUHVzaERhdGEgcGQgPSB7CisgICAgICAgIHsgd3Nfc3RyaWRlWzBdLCB3c19z dHJpZGVbMV0sIHdzX3N0cmlkZVsyXSwgd3Nfc3RyaWRlWzNdIH0sCisgICAgfTsKKworICAgIC8q IERlbm9pc2UgcGFzcyBwaXBlbGluZSAqLworICAgIGZmX3ZrX2V4ZWNfYmluZF9zaGFkZXIodmtj dHgsIGV4ZWMsICZzLT5zaGRfZGVub2lzZSk7CisKKyAgICAvKiBQdXNoIGRhdGEgKi8KKyAgICBm Zl92a19zaGFkZXJfdXBkYXRlX3B1c2hfY29uc3QodmtjdHgsIGV4ZWMsICZzLT5zaGRfZGVub2lz ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfU0hBREVSX1NUQUdFX0NP TVBVVEVfQklULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBzaXplb2Yo cGQpLCAmcGQpOworCisgICAgYnVmX2JhcltuYl9idWZfYmFyKytdID0gKFZrQnVmZmVyTWVtb3J5 QmFycmllcjIpIHsKKyAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfQlVGRkVSX01F TU9SWV9CQVJSSUVSXzIsCisgICAgICAgIC5zcmNTdGFnZU1hc2sgPSB3c192ay0+c3RhZ2UsCisg ICAgICAgIC5kc3RTdGFnZU1hc2sgPSBWS19QSVBFTElORV9TVEFHRV8yX0NPTVBVVEVfU0hBREVS X0JJVCwKKyAgICAgICAgLnNyY0FjY2Vzc01hc2sgPSB3c192ay0+YWNjZXNzLAorICAgICAgICAu ZHN0QWNjZXNzTWFzayA9IFZLX0FDQ0VTU18yX1NIQURFUl9TVE9SQUdFX1JFQURfQklULAorICAg ICAgICAuc3JjUXVldWVGYW1pbHlJbmRleCA9IFZLX1FVRVVFX0ZBTUlMWV9JR05PUkVELAorICAg ICAgICAuZHN0UXVldWVGYW1pbHlJbmRleCA9IFZLX1FVRVVFX0ZBTUlMWV9JR05PUkVELAorICAg ICAgICAuYnVmZmVyID0gd3NfdmstPmJ1ZiwKKyAgICAgICAgLnNpemUgPSB3c192ay0+c2l6ZSwK KyAgICAgICAgLm9mZnNldCA9IDAsCisgICAgfTsKKworICAgIHZrLT5DbWRQaXBlbGluZUJhcnJp ZXIyKGV4ZWMtPmJ1ZiwgJihWa0RlcGVuZGVuY3lJbmZvKSB7CisgICAgICAgICAgICAuc1R5cGUg PSBWS19TVFJVQ1RVUkVfVFlQRV9ERVBFTkRFTkNZX0lORk8sCisgICAgICAgICAgICAucEJ1ZmZl ck1lbW9yeUJhcnJpZXJzID0gYnVmX2JhciwKKyAgICAgICAgICAgIC5idWZmZXJNZW1vcnlCYXJy aWVyQ291bnQgPSBuYl9idWZfYmFyLAorICAgICAgICB9KTsKKyAgICB3c192ay0+c3RhZ2UgPSBi dWZfYmFyWzBdLmRzdFN0YWdlTWFzazsKKyAgICB3c192ay0+YWNjZXNzID0gYnVmX2JhclswXS5k c3RBY2Nlc3NNYXNrOworCisgICAgLyogRW5kIG9mIGRlbm9pc2UgcGFzcyAqLworICAgIHZrLT5D bWREaXNwYXRjaChleGVjLT5idWYsCisgICAgICAgICAgICAgICAgICAgIEZGQUxJR04odmtjdHgt Pm91dHB1dF93aWR0aCwgIHMtPnNoZF9kZW5vaXNlLmxnX3NpemVbMF0pL3MtPnNoZF9kZW5vaXNl LmxnX3NpemVbMF0sCisgICAgICAgICAgICAgICAgICAgIEZGQUxJR04odmtjdHgtPm91dHB1dF9o ZWlnaHQsIHMtPnNoZF9kZW5vaXNlLmxnX3NpemVbMV0pL3MtPnNoZF9kZW5vaXNlLmxnX3NpemVb MV0sCisgICAgICAgICAgICAgICAgICAgIGF2X3BpeF9mbXRfY291bnRfcGxhbmVzKHMtPnZrY3R4 Lm91dHB1dF9mb3JtYXQpKTsKKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5sbWVh bnNfdnVsa2FuX2ZpbHRlcl9mcmFtZShBVkZpbHRlckxpbmsgKmxpbmssIEFWRnJhbWUgKmluKQor eworICAgIGludCBlcnI7CisgICAgQVZGcmFtZSAqb3V0ID0gTlVMTDsKKyAgICBBVkZpbHRlckNv bnRleHQgKmN0eCA9IGxpbmstPmRzdDsKKyAgICBOTE1lYW5zVnVsa2FuQ29udGV4dCAqcyA9IGN0 eC0+cHJpdjsKKyAgICBBVkZpbHRlckxpbmsgKm91dGxpbmsgPSBjdHgtPm91dHB1dHNbMF07Cisg ICAgRkZWdWxrYW5Db250ZXh0ICp2a2N0eCA9ICZzLT52a2N0eDsKKyAgICBGRlZ1bGthbkZ1bmN0 aW9ucyAqdmsgPSAmdmtjdHgtPnZrZm47CisKKyAgICBjb25zdCBBVlBpeEZtdERlc2NyaXB0b3Ig KmRlc2M7CisgICAgaW50IHBsYW5lX3dpZHRoc1s0XTsKKyAgICBpbnQgcGxhbmVfaGVpZ2h0c1s0 XTsKKworICAgIGludCBvZmZzZXRzX2Rpc3BhdGNoZWQgPSAwOworCisgICAgLyogSW50ZWdyYWwg Ki8KKyAgICBBVkJ1ZmZlclJlZiAqaW50ZWdyYWxfYnVmID0gTlVMTDsKKyAgICBGRlZrQnVmZmVy ICppbnRlZ3JhbF92azsKKyAgICBzaXplX3QgaW50X3N0cmlkZTsKKyAgICBzaXplX3QgaW50X3Np emU7CisKKyAgICAvKiBXZWlnaHRzL3N1bXMgKi8KKyAgICBBVkJ1ZmZlclJlZiAqd3NfYnVmID0g TlVMTDsKKyAgICBGRlZrQnVmZmVyICp3c192azsKKyAgICBWa0RldmljZVNpemUgd2VpZ2h0c19v ZmZzWzRdOworICAgIFZrRGV2aWNlU2l6ZSBzdW1zX29mZnNbNF07CisgICAgdWludDMyX3Qgd3Nf c3RyaWRlWzRdOworICAgIHNpemVfdCB3c19zaXplWzRdOworICAgIHNpemVfdCB3c190b3RhbF9z aXplID0gMDsKKworICAgIEZGVmtFeGVjQ29udGV4dCAqZXhlYzsKKyAgICBWa0ltYWdlVmlldyBp bl92aWV3c1tBVl9OVU1fREFUQV9QT0lOVEVSU107CisgICAgVmtJbWFnZVZpZXcgb3V0X3ZpZXdz W0FWX05VTV9EQVRBX1BPSU5URVJTXTsKKyAgICBWa0ltYWdlTWVtb3J5QmFycmllcjIgaW1nX2Jh cls4XTsKKyAgICBpbnQgbmJfaW1nX2JhciA9IDA7CisgICAgVmtCdWZmZXJNZW1vcnlCYXJyaWVy MiBidWZfYmFyWzhdOworICAgIGludCBuYl9idWZfYmFyID0gMDsKKworICAgIGlmICghcy0+aW5p dGlhbGl6ZWQpCisgICAgICAgIFJFVChpbml0X2ZpbHRlcihjdHgpKTsKKworICAgIGRlc2MgPSBh dl9waXhfZm10X2Rlc2NfZ2V0KHZrY3R4LT5vdXRwdXRfZm9ybWF0KTsKKyAgICBpZiAoIWRlc2Mp CisgICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7CisKKyAgICAvKiBJbnRlZ3JhbCBpbWFn ZSAqLworICAgIGludF9zdHJpZGUgPSBzLT5zaGRfd2VpZ2h0cy5sZ19zaXplWzBdKnMtPnBsX3dl aWdodHNfcm93cypUWVBFX1NJWkU7CisgICAgaW50X3NpemUgPSBzLT5zaGRfd2VpZ2h0cy5sZ19z aXplWzBdKnMtPnBsX3dlaWdodHNfcm93cyppbnRfc3RyaWRlOworCisgICAgLyogUGxhbmUgZGlt ZW5zaW9ucyAqLworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZGVzYy0+bmJfY29tcG9uZW50czsg aSsrKSB7CisgICAgICAgIHBsYW5lX3dpZHRoc1tpXSA9ICFpIHx8IChpID09IDMpID8gdmtjdHgt Pm91dHB1dF93aWR0aCA6IEFWX0NFSUxfUlNISUZUKHZrY3R4LT5vdXRwdXRfd2lkdGgsIGRlc2Mt PmxvZzJfY2hyb21hX3cpOworICAgICAgICBwbGFuZV9oZWlnaHRzW2ldID0gIWkgfHwgKGkgPT0g MykgPyB2a2N0eC0+b3V0cHV0X2hlaWdodCA6IEFWX0NFSUxfUlNISUZUKHZrY3R4LT5vdXRwdXRf aGVpZ2h0LCBkZXNjLT5sb2cyX2Nocm9tYV93KTsKKyAgICAgICAgcGxhbmVfd2lkdGhzW2ldICA9 IEZGQUxJR04ocGxhbmVfd2lkdGhzW2ldLCAgcy0+c2hkX2Rlbm9pc2UubGdfc2l6ZVswXSk7Cisg ICAgICAgIHBsYW5lX2hlaWdodHNbaV0gPSBGRkFMSUdOKHBsYW5lX2hlaWdodHNbaV0sIHMtPnNo ZF9kZW5vaXNlLmxnX3NpemVbMV0pOworCisgICAgICAgIHdzX3N0cmlkZVtpXSA9IHBsYW5lX3dp ZHRoc1tpXTsKKyAgICAgICAgd3Nfc2l6ZVtpXSA9IHdzX3N0cmlkZVtpXSAqIHBsYW5lX2hlaWdo dHNbaV0gKiBzaXplb2YoZmxvYXQpOworICAgICAgICB3c190b3RhbF9zaXplICs9IHdzX3NpemVb aV07CisgICAgfQorCisgICAgLyogQnVmZmVycyAqLworICAgIGVyciA9IGZmX3ZrX2dldF9wb29s ZWRfYnVmZmVyKCZzLT52a2N0eCwgJnMtPmludGVncmFsX2J1Zl9wb29sLCAmaW50ZWdyYWxfYnVm LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZLX0JVRkZFUl9VU0FHRV9TVE9S QUdFX0JVRkZFUl9CSVQgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZLX0JV RkZFUl9VU0FHRV9TSEFERVJfREVWSUNFX0FERFJFU1NfQklULAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cy0+b3B0cy50ICogaW50X3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg VktfTUVNT1JZX1BST1BFUlRZX0RFVklDRV9MT0NBTF9CSVQpOworICAgIGlmIChlcnIgPCAwKQor ICAgICAgICByZXR1cm4gZXJyOworICAgIGludGVncmFsX3ZrID0gKEZGVmtCdWZmZXIgKilpbnRl Z3JhbF9idWYtPmRhdGE7CisKKyAgICBlcnIgPSBmZl92a19nZXRfcG9vbGVkX2J1ZmZlcigmcy0+ dmtjdHgsICZzLT53c19idWZfcG9vbCwgJndzX2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBWS19CVUZGRVJfVVNBR0VfU1RPUkFHRV9CVUZGRVJfQklUIHwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBWS19CVUZGRVJfVVNBR0VfVFJBTlNGRVJfRFNUX0JJ VCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfQlVGRkVSX1VTQUdFX1NI QURFUl9ERVZJQ0VfQUREUkVTU19CSVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3c190b3RhbF9zaXpl ICogMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19NRU1PUllfUFJPUEVS VFlfREVWSUNFX0xPQ0FMX0JJVCk7CisgICAgaWYgKGVyciA8IDApCisgICAgICAgIHJldHVybiBl cnI7CisgICAgd3NfdmsgPSAoRkZWa0J1ZmZlciAqKXdzX2J1Zi0+ZGF0YTsKKworICAgIHdlaWdo dHNfb2Zmc1swXSA9IDA7CisgICAgc3Vtc19vZmZzWzBdID0gd3NfdG90YWxfc2l6ZTsKKyAgICBm b3IgKGludCBpID0gMTsgaSA8IGRlc2MtPm5iX2NvbXBvbmVudHM7IGkrKykgeworICAgICAgICB3 ZWlnaHRzX29mZnNbaV0gPSB3ZWlnaHRzX29mZnNbaSAtIDFdICsgd3Nfc2l6ZVtpIC0gMV07Cisg ICAgICAgIHN1bXNfb2Zmc1tpXSA9IHN1bXNfb2Zmc1tpIC0gMV0gKyB3c19zaXplW2kgLSAxXTsK KyAgICB9CisKKyAgICAvKiBPdXRwdXQgZnJhbWUgKi8KKyAgICBvdXQgPSBmZl9nZXRfdmlkZW9f YnVmZmVyKG91dGxpbmssIG91dGxpbmstPncsIG91dGxpbmstPmgpOworICAgIGlmICghb3V0KSB7 CisgICAgICAgIGVyciA9IEFWRVJST1IoRU5PTUVNKTsKKyAgICAgICAgZ290byBmYWlsOworICAg IH0KKworICAgIC8qIEV4ZWN1dGlvbiBjb250ZXh0ICovCisgICAgZXhlYyA9IGZmX3ZrX2V4ZWNf Z2V0KCZzLT52a2N0eCwgJnMtPmUpOworICAgIGZmX3ZrX2V4ZWNfc3RhcnQodmtjdHgsIGV4ZWMp OworCisgICAgLyogRGVwZW5kZW5jaWVzICovCisgICAgUkVUKGZmX3ZrX2V4ZWNfYWRkX2RlcF9m cmFtZSh2a2N0eCwgZXhlYywgaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBW S19QSVBFTElORV9TVEFHRV8yX0FMTF9DT01NQU5EU19CSVQsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBWS19QSVBFTElORV9TVEFHRV8yX0NPTVBVVEVfU0hBREVSX0JJVCkpOwor ICAgIFJFVChmZl92a19leGVjX2FkZF9kZXBfZnJhbWUodmtjdHgsIGV4ZWMsIG91dCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZLX1BJUEVMSU5FX1NUQUdFXzJfQUxMX0NPTU1B TkRTX0JJVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZLX1BJUEVMSU5FX1NU QUdFXzJfQ09NUFVURV9TSEFERVJfQklUKSk7CisKKyAgICBSRVQoZmZfdmtfZXhlY19hZGRfZGVw X2J1Zih2a2N0eCwgZXhlYywgJmludGVncmFsX2J1ZiwgMSwgMCkpOworICAgIGludGVncmFsX2J1 ZiA9IE5VTEw7CisKKyAgICBSRVQoZmZfdmtfZXhlY19hZGRfZGVwX2J1Zih2a2N0eCwgZXhlYywg JndzX2J1ZiwgICAgICAgMSwgMCkpOworICAgIHdzX2J1ZiA9IE5VTEw7CisKKyAgICAvKiBJbnB1 dCBmcmFtZSBwcmVwICovCisgICAgUkVUKGZmX3ZrX2NyZWF0ZV9pbWFnZXZpZXdzKHZrY3R4LCBl eGVjLCBpbl92aWV3cywgaW4sIEZGX1ZLX1JFUF9GTE9BVCkpOworICAgIGZmX3ZrX2ZyYW1lX2Jh cnJpZXIodmtjdHgsIGV4ZWMsIGluLCBpbWdfYmFyLCAmbmJfaW1nX2JhciwKKyAgICAgICAgICAg ICAgICAgICAgICAgIFZLX1BJUEVMSU5FX1NUQUdFXzJfQUxMX0NPTU1BTkRTX0JJVCwKKyAgICAg ICAgICAgICAgICAgICAgICAgIFZLX1BJUEVMSU5FX1NUQUdFXzJfQ09NUFVURV9TSEFERVJfQklU LAorICAgICAgICAgICAgICAgICAgICAgICAgVktfQUNDRVNTX1NIQURFUl9SRUFEX0JJVCwKKyAg ICAgICAgICAgICAgICAgICAgICAgIFZLX0lNQUdFX0xBWU9VVF9HRU5FUkFMLAorICAgICAgICAg ICAgICAgICAgICAgICAgVktfUVVFVUVfRkFNSUxZX0lHTk9SRUQpOworCisgICAgLyogT3V0cHV0 IGZyYW1lIHByZXAgKi8KKyAgICBSRVQoZmZfdmtfY3JlYXRlX2ltYWdldmlld3ModmtjdHgsIGV4 ZWMsIG91dF92aWV3cywgb3V0LCBGRl9WS19SRVBfRkxPQVQpKTsKKyAgICBmZl92a19mcmFtZV9i YXJyaWVyKHZrY3R4LCBleGVjLCBvdXQsIGltZ19iYXIsICZuYl9pbWdfYmFyLAorICAgICAgICAg ICAgICAgICAgICAgICAgVktfUElQRUxJTkVfU1RBR0VfMl9BTExfQ09NTUFORFNfQklULAorICAg ICAgICAgICAgICAgICAgICAgICAgVktfUElQRUxJTkVfU1RBR0VfMl9DT01QVVRFX1NIQURFUl9C SVQsCisgICAgICAgICAgICAgICAgICAgICAgICBWS19BQ0NFU1NfU0hBREVSX1dSSVRFX0JJVCwK KyAgICAgICAgICAgICAgICAgICAgICAgIFZLX0lNQUdFX0xBWU9VVF9HRU5FUkFMLAorICAgICAg ICAgICAgICAgICAgICAgICAgVktfUVVFVUVfRkFNSUxZX0lHTk9SRUQpOworCisgICAgbmJfYnVm X2JhciA9IDA7CisgICAgYnVmX2JhcltuYl9idWZfYmFyKytdID0gKFZrQnVmZmVyTWVtb3J5QmFy cmllcjIpIHsKKyAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfQlVGRkVSX01FTU9S WV9CQVJSSUVSXzIsCisgICAgICAgIC5zcmNTdGFnZU1hc2sgPSB3c192ay0+c3RhZ2UsCisgICAg ICAgIC5kc3RTdGFnZU1hc2sgPSBWS19QSVBFTElORV9TVEFHRV8yX1RSQU5TRkVSX0JJVCwKKyAg ICAgICAgLnNyY0FjY2Vzc01hc2sgPSB3c192ay0+YWNjZXNzLAorICAgICAgICAuZHN0QWNjZXNz TWFzayA9IFZLX0FDQ0VTU18yX1RSQU5TRkVSX1dSSVRFX0JJVCwKKyAgICAgICAgLnNyY1F1ZXVl RmFtaWx5SW5kZXggPSBWS19RVUVVRV9GQU1JTFlfSUdOT1JFRCwKKyAgICAgICAgLmRzdFF1ZXVl RmFtaWx5SW5kZXggPSBWS19RVUVVRV9GQU1JTFlfSUdOT1JFRCwKKyAgICAgICAgLmJ1ZmZlciA9 IHdzX3ZrLT5idWYsCisgICAgICAgIC5zaXplID0gd3NfdmstPnNpemUsCisgICAgICAgIC5vZmZz ZXQgPSAwLAorICAgIH07CisgICAgYnVmX2JhcltuYl9idWZfYmFyKytdID0gKFZrQnVmZmVyTWVt b3J5QmFycmllcjIpIHsKKyAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfQlVGRkVS X01FTU9SWV9CQVJSSUVSXzIsCisgICAgICAgIC5zcmNTdGFnZU1hc2sgPSBpbnRlZ3JhbF92ay0+ c3RhZ2UsCisgICAgICAgIC5kc3RTdGFnZU1hc2sgPSBWS19QSVBFTElORV9TVEFHRV8yX0NPTVBV VEVfU0hBREVSX0JJVCwKKyAgICAgICAgLnNyY0FjY2Vzc01hc2sgPSBpbnRlZ3JhbF92ay0+YWNj ZXNzLAorICAgICAgICAuZHN0QWNjZXNzTWFzayA9IFZLX0FDQ0VTU18yX1NIQURFUl9TVE9SQUdF X1JFQURfQklUIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICBWS19BQ0NFU1NfMl9TSEFERVJf U1RPUkFHRV9XUklURV9CSVQsCisgICAgICAgIC5zcmNRdWV1ZUZhbWlseUluZGV4ID0gVktfUVVF VUVfRkFNSUxZX0lHTk9SRUQsCisgICAgICAgIC5kc3RRdWV1ZUZhbWlseUluZGV4ID0gVktfUVVF VUVfRkFNSUxZX0lHTk9SRUQsCisgICAgICAgIC5idWZmZXIgPSBpbnRlZ3JhbF92ay0+YnVmLAor ICAgICAgICAuc2l6ZSA9IGludGVncmFsX3ZrLT5zaXplLAorICAgICAgICAub2Zmc2V0ID0gMCwK KyAgICB9OworCisgICAgdmstPkNtZFBpcGVsaW5lQmFycmllcjIoZXhlYy0+YnVmLCAmKFZrRGVw ZW5kZW5jeUluZm8pIHsKKyAgICAgICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX0RF UEVOREVOQ1lfSU5GTywKKyAgICAgICAgICAgIC5wSW1hZ2VNZW1vcnlCYXJyaWVycyA9IGltZ19i YXIsCisgICAgICAgICAgICAuaW1hZ2VNZW1vcnlCYXJyaWVyQ291bnQgPSBuYl9pbWdfYmFyLAor ICAgICAgICAgICAgLnBCdWZmZXJNZW1vcnlCYXJyaWVycyA9IGJ1Zl9iYXIsCisgICAgICAgICAg ICAuYnVmZmVyTWVtb3J5QmFycmllckNvdW50ID0gbmJfYnVmX2JhciwKKyAgICAgICAgfSk7Cisg ICAgd3NfdmstPnN0YWdlID0gYnVmX2JhclswXS5kc3RTdGFnZU1hc2s7CisgICAgd3NfdmstPmFj Y2VzcyA9IGJ1Zl9iYXJbMF0uZHN0QWNjZXNzTWFzazsKKyAgICBpbnRlZ3JhbF92ay0+c3RhZ2Ug PSBidWZfYmFyWzFdLmRzdFN0YWdlTWFzazsKKyAgICBpbnRlZ3JhbF92ay0+YWNjZXNzID0gYnVm X2JhclsxXS5kc3RBY2Nlc3NNYXNrOworCisgICAgLyogQnVmZmVyIHplcm9pbmcgKi8KKyAgICB2 ay0+Q21kRmlsbEJ1ZmZlcihleGVjLT5idWYsIHdzX3ZrLT5idWYsIDAsIHdzX3ZrLT5zaXplLCAw eDApOworCisgICAgbmJfYnVmX2JhciA9IDA7CisgICAgYnVmX2JhcltuYl9idWZfYmFyKytdID0g KFZrQnVmZmVyTWVtb3J5QmFycmllcjIpIHsKKyAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJF X1RZUEVfQlVGRkVSX01FTU9SWV9CQVJSSUVSXzIsCisgICAgICAgIC5zcmNTdGFnZU1hc2sgPSB3 c192ay0+c3RhZ2UsCisgICAgICAgIC5kc3RTdGFnZU1hc2sgPSBWS19QSVBFTElORV9TVEFHRV8y X0NPTVBVVEVfU0hBREVSX0JJVCwKKyAgICAgICAgLnNyY0FjY2Vzc01hc2sgPSB3c192ay0+YWNj ZXNzLAorICAgICAgICAuZHN0QWNjZXNzTWFzayA9IFZLX0FDQ0VTU18yX1NIQURFUl9TVE9SQUdF X1JFQURfQklUIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICBWS19BQ0NFU1NfMl9TSEFERVJf U1RPUkFHRV9XUklURV9CSVQsCisgICAgICAgIC5zcmNRdWV1ZUZhbWlseUluZGV4ID0gVktfUVVF VUVfRkFNSUxZX0lHTk9SRUQsCisgICAgICAgIC5kc3RRdWV1ZUZhbWlseUluZGV4ID0gVktfUVVF VUVfRkFNSUxZX0lHTk9SRUQsCisgICAgICAgIC5idWZmZXIgPSB3c192ay0+YnVmLAorICAgICAg ICAuc2l6ZSA9IHdzX3ZrLT5zaXplLAorICAgICAgICAub2Zmc2V0ID0gMCwKKyAgICB9OworCisg ICAgdmstPkNtZFBpcGVsaW5lQmFycmllcjIoZXhlYy0+YnVmLCAmKFZrRGVwZW5kZW5jeUluZm8p IHsKKyAgICAgICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX0RFUEVOREVOQ1lfSU5G TywKKyAgICAgICAgICAgIC5wQnVmZmVyTWVtb3J5QmFycmllcnMgPSBidWZfYmFyLAorICAgICAg ICAgICAgLmJ1ZmZlck1lbW9yeUJhcnJpZXJDb3VudCA9IG5iX2J1Zl9iYXIsCisgICAgICAgIH0p OworICAgIHdzX3ZrLT5zdGFnZSA9IGJ1Zl9iYXJbMF0uZHN0U3RhZ2VNYXNrOworICAgIHdzX3Zr LT5hY2Nlc3MgPSBidWZfYmFyWzBdLmRzdEFjY2Vzc01hc2s7CisKKyAgICAvKiBVcGRhdGUgd2Vp Z2h0cyBkZXNjcmlwdG9ycyAqLworICAgIGZmX3ZrX3NoYWRlcl91cGRhdGVfaW1nX2FycmF5KHZr Y3R4LCBleGVjLCAmcy0+c2hkX3dlaWdodHMsIGluLCBpbl92aWV3cywgMCwgMCwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBWS19JTUFHRV9MQVlPVVRfR0VORVJBTCwgVktfTlVM TF9IQU5ETEUpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZGVzYy0+bmJfY29tcG9uZW50czsg aSsrKSB7CisgICAgICAgIFJFVChmZl92a19zaGFkZXJfdXBkYXRlX2Rlc2NfYnVmZmVyKCZzLT52 a2N0eCwgZXhlYywgJnMtPnNoZF93ZWlnaHRzLCAwLCAxICsgaSoyICsgMCwgMCwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3NfdmssIHdlaWdodHNfb2Zmc1tp XSwgd3Nfc2l6ZVtpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgVktfRk9STUFUX1VOREVGSU5FRCkpOworICAgICAgICBSRVQoZmZfdmtfc2hhZGVyX3VwZGF0 ZV9kZXNjX2J1ZmZlcigmcy0+dmtjdHgsIGV4ZWMsICZzLT5zaGRfd2VpZ2h0cywgMCwgMSArIGkq MiArIDEsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdz X3ZrLCBzdW1zX29mZnNbaV0sIHdzX3NpemVbaV0sCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFZLX0ZPUk1BVF9VTkRFRklORUQpKTsKKyAgICB9CisKKyAgICAv KiBVcGRhdGUgZGVub2lzZSBkZXNjcmlwdG9ycyAqLworICAgIGZmX3ZrX3NoYWRlcl91cGRhdGVf aW1nX2FycmF5KHZrY3R4LCBleGVjLCAmcy0+c2hkX2Rlbm9pc2UsIGluLCBpbl92aWV3cywgMCwg MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19JTUFHRV9MQVlPVVRfR0VO RVJBTCwgVktfTlVMTF9IQU5ETEUpOworICAgIGZmX3ZrX3NoYWRlcl91cGRhdGVfaW1nX2FycmF5 KHZrY3R4LCBleGVjLCAmcy0+c2hkX2Rlbm9pc2UsIG91dCwgb3V0X3ZpZXdzLCAwLCAxLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZLX0lNQUdFX0xBWU9VVF9HRU5FUkFMLCBW S19OVUxMX0hBTkRMRSk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZXNjLT5uYl9jb21wb25l bnRzOyBpKyspIHsKKyAgICAgICAgUkVUKGZmX3ZrX3NoYWRlcl91cGRhdGVfZGVzY19idWZmZXIo JnMtPnZrY3R4LCBleGVjLCAmcy0+c2hkX2Rlbm9pc2UsIDEsIGkqMiArIDAsIDAsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdzX3ZrLCB3ZWlnaHRzX29mZnNb aV0sIHdzX3NpemVbaV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFZLX0ZPUk1BVF9VTkRFRklORUQpKTsKKyAgICAgICAgUkVUKGZmX3ZrX3NoYWRlcl91cGRh dGVfZGVzY19idWZmZXIoJnMtPnZrY3R4LCBleGVjLCAmcy0+c2hkX2Rlbm9pc2UsIDEsIGkqMiAr IDEsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdzX3Zr LCBzdW1zX29mZnNbaV0sIHdzX3NpemVbaV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFZLX0ZPUk1BVF9VTkRFRklORUQpKTsKKyAgICB9CisKKyAgICAvKiBX ZWlnaHRzIHBpcGVsaW5lICovCisgICAgZmZfdmtfZXhlY19iaW5kX3NoYWRlcih2a2N0eCwgZXhl YywgJnMtPnNoZF93ZWlnaHRzKTsKKworICAgIGRvIHsKKyAgICAgICAgaW50IHdnX2ludm9jOwor ICAgICAgICBIb3Jpem9udGFsUHVzaERhdGEgcGQgPSB7CisgICAgICAgICAgICB7IHBsYW5lX3dp ZHRoc1swXSwgcGxhbmVfd2lkdGhzWzFdLCBwbGFuZV93aWR0aHNbMl0sIHBsYW5lX3dpZHRoc1sz XSB9LAorICAgICAgICAgICAgeyBwbGFuZV9oZWlnaHRzWzBdLCBwbGFuZV9oZWlnaHRzWzFdLCBw bGFuZV9oZWlnaHRzWzJdLCBwbGFuZV9oZWlnaHRzWzNdIH0sCisgICAgICAgICAgICB7IHdzX3N0 cmlkZVswXSwgd3Nfc3RyaWRlWzFdLCB3c19zdHJpZGVbMl0sIHdzX3N0cmlkZVszXSB9LAorICAg ICAgICAgICAgeyBzLT5wYXRjaFswXSwgcy0+cGF0Y2hbMV0sIHMtPnBhdGNoWzJdLCBzLT5wYXRj aFszXSB9LAorICAgICAgICAgICAgeyBzLT5zdHJlbmd0aFswXSwgcy0+c3RyZW5ndGhbMV0sIHMt PnN0cmVuZ3RoWzJdLCBzLT5zdHJlbmd0aFsyXSwgfSwKKyAgICAgICAgICAgIGludGVncmFsX3Zr LT5hZGRyZXNzLAorICAgICAgICAgICAgKHVpbnQ2NF90KWludF9zaXplLAorICAgICAgICAgICAg KHVpbnQ2NF90KWludF9zdHJpZGUsCisgICAgICAgICAgICBvZmZzZXRzX2Rpc3BhdGNoZWQsCisg ICAgICAgIH07CisKKyAgICAgICAgLyogUHVzaCBkYXRhICovCisgICAgICAgIGZmX3ZrX3NoYWRl cl91cGRhdGVfcHVzaF9jb25zdCh2a2N0eCwgZXhlYywgJnMtPnNoZF93ZWlnaHRzLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfU0hBREVSX1NUQUdFX0NPTVBVVEVf QklULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgc2l6ZW9mKHBk KSwgJnBkKTsKKworICAgICAgICBpZiAob2Zmc2V0c19kaXNwYXRjaGVkKSB7CisgICAgICAgICAg ICBuYl9idWZfYmFyID0gMDsKKyAgICAgICAgICAgIGJ1Zl9iYXJbbmJfYnVmX2JhcisrXSA9IChW a0J1ZmZlck1lbW9yeUJhcnJpZXIyKSB7CisgICAgICAgICAgICAgICAgLnNUeXBlID0gVktfU1RS VUNUVVJFX1RZUEVfQlVGRkVSX01FTU9SWV9CQVJSSUVSXzIsCisgICAgICAgICAgICAgICAgLnNy Y1N0YWdlTWFzayA9IGludGVncmFsX3ZrLT5zdGFnZSwKKyAgICAgICAgICAgICAgICAuZHN0U3Rh Z2VNYXNrID0gVktfUElQRUxJTkVfU1RBR0VfMl9DT01QVVRFX1NIQURFUl9CSVQsCisgICAgICAg ICAgICAgICAgLnNyY0FjY2Vzc01hc2sgPSBpbnRlZ3JhbF92ay0+YWNjZXNzLAorICAgICAgICAg ICAgICAgIC5kc3RBY2Nlc3NNYXNrID0gVktfQUNDRVNTXzJfU0hBREVSX1NUT1JBR0VfUkVBRF9C SVQgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfQUNDRVNTXzJfU0hBREVS X1NUT1JBR0VfV1JJVEVfQklULAorICAgICAgICAgICAgICAgIC5zcmNRdWV1ZUZhbWlseUluZGV4 ID0gVktfUVVFVUVfRkFNSUxZX0lHTk9SRUQsCisgICAgICAgICAgICAgICAgLmRzdFF1ZXVlRmFt aWx5SW5kZXggPSBWS19RVUVVRV9GQU1JTFlfSUdOT1JFRCwKKyAgICAgICAgICAgICAgICAuYnVm ZmVyID0gaW50ZWdyYWxfdmstPmJ1ZiwKKyAgICAgICAgICAgICAgICAuc2l6ZSA9IGludGVncmFs X3ZrLT5zaXplLAorICAgICAgICAgICAgICAgIC5vZmZzZXQgPSAwLAorICAgICAgICAgICAgfTsK KworICAgICAgICAgICAgdmstPkNtZFBpcGVsaW5lQmFycmllcjIoZXhlYy0+YnVmLCAmKFZrRGVw ZW5kZW5jeUluZm8pIHsKKyAgICAgICAgICAgICAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJF X1RZUEVfREVQRU5ERU5DWV9JTkZPLAorICAgICAgICAgICAgICAgICAgICAucEJ1ZmZlck1lbW9y eUJhcnJpZXJzID0gYnVmX2JhciwKKyAgICAgICAgICAgICAgICAgICAgLmJ1ZmZlck1lbW9yeUJh cnJpZXJDb3VudCA9IG5iX2J1Zl9iYXIsCisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAg ICBpbnRlZ3JhbF92ay0+c3RhZ2UgPSBidWZfYmFyWzFdLmRzdFN0YWdlTWFzazsKKyAgICAgICAg ICAgIGludGVncmFsX3ZrLT5hY2Nlc3MgPSBidWZfYmFyWzFdLmRzdEFjY2Vzc01hc2s7CisgICAg ICAgIH0KKworICAgICAgICB3Z19pbnZvYyA9IEZGTUlOKChzLT5uYl9vZmZzZXRzIC0gb2Zmc2V0 c19kaXNwYXRjaGVkKS9UWVBFX0VMRU1TLCBzLT5vcHRzLnQpOworICAgICAgICB3Z19pbnZvYyA9 IEZGTUlOKHdnX2ludm9jLCB2a2N0eC0+cHJvcHMucHJvcGVydGllcy5saW1pdHMubWF4Q29tcHV0 ZVdvcmtHcm91cENvdW50WzJdKTsKKworICAgICAgICAvKiBFbmQgb2YgaG9yaXpvbnRhbCBwYXNz ICovCisgICAgICAgIHZrLT5DbWREaXNwYXRjaChleGVjLT5idWYsIDEsIDEsIHdnX2ludm9jKTsK KworICAgICAgICBvZmZzZXRzX2Rpc3BhdGNoZWQgKz0gd2dfaW52b2MgKiBUWVBFX0VMRU1TOwor ICAgIH0gd2hpbGUgKG9mZnNldHNfZGlzcGF0Y2hlZCA8IHMtPm5iX29mZnNldHMpOworCisgICAg UkVUKGRlbm9pc2VfcGFzcyhzLCBleGVjLCB3c192aywgd3Nfc3RyaWRlKSk7CisKKyAgICBlcnIg PSBmZl92a19leGVjX3N1Ym1pdCh2a2N0eCwgZXhlYyk7CisgICAgaWYgKGVyciA8IDApCisgICAg ICAgIHJldHVybiBlcnI7CisKKyAgICBlcnIgPSBhdl9mcmFtZV9jb3B5X3Byb3BzKG91dCwgaW4p OworICAgIGlmIChlcnIgPCAwKQorICAgICAgICBnb3RvIGZhaWw7CisKKyAgICBhdl9mcmFtZV9m cmVlKCZpbik7CisKKyAgICByZXR1cm4gZmZfZmlsdGVyX2ZyYW1lKG91dGxpbmssIG91dCk7CisK K2ZhaWw6CisgICAgYXZfYnVmZmVyX3VucmVmKCZpbnRlZ3JhbF9idWYpOworICAgIGF2X2J1ZmZl cl91bnJlZigmd3NfYnVmKTsKKyAgICBhdl9mcmFtZV9mcmVlKCZpbik7CisgICAgYXZfZnJhbWVf ZnJlZSgmb3V0KTsKKyAgICByZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBubG1lYW5zX3Z1 bGthbl91bmluaXQoQVZGaWx0ZXJDb250ZXh0ICphdmN0eCkKK3sKKyAgICBOTE1lYW5zVnVsa2Fu Q29udGV4dCAqcyA9IGF2Y3R4LT5wcml2OworICAgIEZGVnVsa2FuQ29udGV4dCAqdmtjdHggPSAm cy0+dmtjdHg7CisKKyAgICBmZl92a19leGVjX3Bvb2xfZnJlZSh2a2N0eCwgJnMtPmUpOworICAg IGZmX3ZrX3NoYWRlcl9mcmVlKHZrY3R4LCAmcy0+c2hkX3dlaWdodHMpOworICAgIGZmX3ZrX3No YWRlcl9mcmVlKHZrY3R4LCAmcy0+c2hkX2Rlbm9pc2UpOworCisgICAgYXZfYnVmZmVyX3Bvb2xf dW5pbml0KCZzLT5pbnRlZ3JhbF9idWZfcG9vbCk7CisgICAgYXZfYnVmZmVyX3Bvb2xfdW5pbml0 KCZzLT53c19idWZfcG9vbCk7CisKKyAgICBmZl92a191bmluaXQoJnMtPnZrY3R4KTsKKworICAg IGF2X2ZyZWVwKCZzLT54b2Zmc2V0cyk7CisgICAgYXZfZnJlZXAoJnMtPnlvZmZzZXRzKTsKKwor ICAgIHMtPmluaXRpYWxpemVkID0gMDsKK30KKworI2RlZmluZSBPRkZTRVQoeCkgb2Zmc2V0b2Yo TkxNZWFuc1Z1bGthbkNvbnRleHQsIHgpCisjZGVmaW5lIEZMQUdTIChBVl9PUFRfRkxBR19GSUxU RVJJTkdfUEFSQU0gfCBBVl9PUFRfRkxBR19WSURFT19QQVJBTSkKK3N0YXRpYyBjb25zdCBBVk9w dGlvbiBubG1lYW5zX3Z1bGthbl9vcHRpb25zW10gPSB7CisgICAgeyAicyIsICAiZGVub2lzaW5n IHN0cmVuZ3RoIGZvciBhbGwgY29tcG9uZW50cyIsIE9GRlNFVChvcHRzLnMpLCBBVl9PUFRfVFlQ RV9ET1VCTEUsIHsgLmRibCA9IDEuMCB9LCAxLjAsIDEwMC4wLCBGTEFHUyB9LAorICAgIHsgInAi LCAgInBhdGNoIHNpemUgZm9yIGFsbCBjb21wb25lbnRzIiwgT0ZGU0VUKG9wdHMucCksIEFWX09Q VF9UWVBFX0lOVCwgeyAuaTY0ID0gMyoyKzEgfSwgMCwgOTksIEZMQUdTIH0sCisgICAgeyAiciIs ICAicmVzZWFyY2ggd2luZG93IHJhZGl1cyIsIE9GRlNFVChvcHRzLnIpLCBBVl9PUFRfVFlQRV9J TlQsIHsgLmk2NCA9IDcqMisxIH0sIDAsIDk5LCBGTEFHUyB9LAorICAgIHsgInQiLCAgInBhcmFs bGVsaXNtIiwgT0ZGU0VUKG9wdHMudCksIEFWX09QVF9UWVBFX0lOVCwgeyAuaTY0ID0gMzYgfSwg MSwgMTY4LCBGTEFHUyB9LAorCisgICAgeyAiczEiLCAiZGVub2lzaW5nIHN0cmVuZ3RoIGZvciBj b21wb25lbnQgMSIsIE9GRlNFVChvcHRzLnNjWzBdKSwgQVZfT1BUX1RZUEVfRE9VQkxFLCB7IC5k YmwgPSAxLjAgfSwgMS4wLCAxMDAuMCwgRkxBR1MgfSwKKyAgICB7ICJzMiIsICJkZW5vaXNpbmcg c3RyZW5ndGggZm9yIGNvbXBvbmVudCAyIiwgT0ZGU0VUKG9wdHMuc2NbMV0pLCBBVl9PUFRfVFlQ RV9ET1VCTEUsIHsgLmRibCA9IDEuMCB9LCAxLjAsIDEwMC4wLCBGTEFHUyB9LAorICAgIHsgInMz IiwgImRlbm9pc2luZyBzdHJlbmd0aCBmb3IgY29tcG9uZW50IDMiLCBPRkZTRVQob3B0cy5zY1sy XSksIEFWX09QVF9UWVBFX0RPVUJMRSwgeyAuZGJsID0gMS4wIH0sIDEuMCwgMTAwLjAsIEZMQUdT IH0sCisgICAgeyAiczQiLCAiZGVub2lzaW5nIHN0cmVuZ3RoIGZvciBjb21wb25lbnQgNCIsIE9G RlNFVChvcHRzLnNjWzNdKSwgQVZfT1BUX1RZUEVfRE9VQkxFLCB7IC5kYmwgPSAxLjAgfSwgMS4w LCAxMDAuMCwgRkxBR1MgfSwKKworICAgIHsgInAxIiwgInBhdGNoIHNpemUgZm9yIGNvbXBvbmVu dCAxIiwgT0ZGU0VUKG9wdHMucGNbMF0pLCBBVl9PUFRfVFlQRV9JTlQsIHsgLmk2NCA9IDAgfSwg MCwgOTksIEZMQUdTIH0sCisgICAgeyAicDIiLCAicGF0Y2ggc2l6ZSBmb3IgY29tcG9uZW50IDIi LCBPRkZTRVQob3B0cy5wY1sxXSksIEFWX09QVF9UWVBFX0lOVCwgeyAuaTY0ID0gMCB9LCAwLCA5 OSwgRkxBR1MgfSwKKyAgICB7ICJwMyIsICJwYXRjaCBzaXplIGZvciBjb21wb25lbnQgMyIsIE9G RlNFVChvcHRzLnBjWzJdKSwgQVZfT1BUX1RZUEVfSU5ULCB7IC5pNjQgPSAwIH0sIDAsIDk5LCBG TEFHUyB9LAorICAgIHsgInA0IiwgInBhdGNoIHNpemUgZm9yIGNvbXBvbmVudCA0IiwgT0ZGU0VU KG9wdHMucGNbM10pLCBBVl9PUFRfVFlQRV9JTlQsIHsgLmk2NCA9IDAgfSwgMCwgOTksIEZMQUdT IH0sCisKKyAgICB7IE5VTEwgfQorfTsKKworQVZGSUxURVJfREVGSU5FX0NMQVNTKG5sbWVhbnNf dnVsa2FuKTsKKworc3RhdGljIGNvbnN0IEFWRmlsdGVyUGFkIG5sbWVhbnNfdnVsa2FuX2lucHV0 c1tdID0geworICAgIHsKKyAgICAgICAgLm5hbWUgICAgICAgICA9ICJkZWZhdWx0IiwKKyAgICAg ICAgLnR5cGUgICAgICAgICA9IEFWTUVESUFfVFlQRV9WSURFTywKKyAgICAgICAgLmZpbHRlcl9m cmFtZSA9ICZubG1lYW5zX3Z1bGthbl9maWx0ZXJfZnJhbWUsCisgICAgICAgIC5jb25maWdfcHJv cHMgPSAmZmZfdmtfZmlsdGVyX2NvbmZpZ19pbnB1dCwKKyAgICB9LAorfTsKKworc3RhdGljIGNv bnN0IEFWRmlsdGVyUGFkIG5sbWVhbnNfdnVsa2FuX291dHB1dHNbXSA9IHsKKyAgICB7CisgICAg ICAgIC5uYW1lID0gImRlZmF1bHQiLAorICAgICAgICAudHlwZSA9IEFWTUVESUFfVFlQRV9WSURF TywKKyAgICAgICAgLmNvbmZpZ19wcm9wcyA9ICZmZl92a19maWx0ZXJfY29uZmlnX291dHB1dCwK KyAgICB9LAorfTsKKworY29uc3QgRkZGaWx0ZXIgZmZfdmZfbmxtZWFuc192dWxrYW4gPSB7Cisg ICAgLnAubmFtZSAgICAgICAgID0gIm5sbWVhbnNfdnVsa2FuIiwKKyAgICAucC5kZXNjcmlwdGlv biAgPSBOVUxMX0lGX0NPTkZJR19TTUFMTCgiTm9uLWxvY2FsIG1lYW5zIGRlbm9pc2VyIChWdWxr YW4pIiksCisgICAgLnAucHJpdl9jbGFzcyAgID0gJm5sbWVhbnNfdnVsa2FuX2NsYXNzLAorICAg IC5wLmZsYWdzICAgICAgICA9IEFWRklMVEVSX0ZMQUdfSFdERVZJQ0UsCisgICAgLnByaXZfc2l6 ZSAgICAgID0gc2l6ZW9mKE5MTWVhbnNWdWxrYW5Db250ZXh0KSwKKyAgICAuaW5pdCAgICAgICAg ICAgPSAmZmZfdmtfZmlsdGVyX2luaXQsCisgICAgLnVuaW5pdCAgICAgICAgID0gJm5sbWVhbnNf dnVsa2FuX3VuaW5pdCwKKyAgICBGSUxURVJfSU5QVVRTKG5sbWVhbnNfdnVsa2FuX2lucHV0cyks CisgICAgRklMVEVSX09VVFBVVFMobmxtZWFuc192dWxrYW5fb3V0cHV0cyksCisgICAgRklMVEVS X1NJTkdMRV9QSVhGTVQoQVZfUElYX0ZNVF9WVUxLQU4pLAorICAgIC5mbGFnc19pbnRlcm5hbCA9 IEZGX0ZJTFRFUl9GTEFHX0hXRlJBTUVfQVdBUkUsCit9OwotLSAKMi40OS4xCgoKRnJvbSBkY2U1 YjI1ZjRkYzE4ODc0YTQxZTZhNTY3NzdhZTA5ZDJmNDU5NTUzIE1vbiBTZXAgMTcgMDA6MDA6MDAg MjAwMQpGcm9tOiBKYW1haWthMSA8bHVrYXN6Y3oxOEB3cC5wbD4KRGF0ZTogV2VkLCAzIFNlcCAy MDI1IDEyOjU4OjMxICswMDAwClN1YmplY3Q6IFtQQVRDSCAwMTkvMTE4XSBDaGFuZ2luZyB2dWxr YW4gZmlsZSBkaXJlY3RvcnkKCi0tLQogbGliYXZmaWx0ZXIvdmZfb3ZlcmxheV92dWxrYW4uYyB8 IDM0NyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDM0 NyBkZWxldGlvbnMoLSkKIGRlbGV0ZSBtb2RlIDEwMDY0NCBsaWJhdmZpbHRlci92Zl9vdmVybGF5 X3Z1bGthbi5jCgpkaWZmIC0tZ2l0IGEvbGliYXZmaWx0ZXIvdmZfb3ZlcmxheV92dWxrYW4uYyBi L2xpYmF2ZmlsdGVyL3ZmX292ZXJsYXlfdnVsa2FuLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDFmOWVlZDhlMDguLjAwMDAwMDAwMDAKLS0tIGEvbGliYXZmaWx0ZXIvdmZfb3Zlcmxh eV92dWxrYW4uYworKysgL2Rldi9udWxsCkBAIC0xLDM0NyArMCwwIEBACi0vKgotICogQ29weXJp Z2h0IChjKSBMeW5uZQotICoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KLSAqCi0g KiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y Ci0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg UHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91 ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIEZGbXBlZyBpcyBkaXN0cmlidXRl ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5Z IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNI QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg R05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgot ICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIg R2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3Jp dGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu IFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKLSAqLwotCi0j aW5jbHVkZSAibGliYXZ1dGlsL3JhbmRvbV9zZWVkLmgiCi0jaW5jbHVkZSAibGliYXZ1dGlsL29w dC5oIgotI2luY2x1ZGUgImxpYmF2dXRpbC92dWxrYW5fc3BpcnYuaCIKLSNpbmNsdWRlICJ2dWxr YW5fZmlsdGVyLmgiCi0KLSNpbmNsdWRlICJmaWx0ZXJzLmgiCi0jaW5jbHVkZSAiZnJhbWVzeW5j LmgiCi0jaW5jbHVkZSAidmlkZW8uaCIKLQotdHlwZWRlZiBzdHJ1Y3QgT3ZlcmxheVZ1bGthbkNv bnRleHQgewotICAgIEZGVnVsa2FuQ29udGV4dCB2a2N0eDsKLSAgICBGRkZyYW1lU3luYyBmczsK LQotICAgIGludCBpbml0aWFsaXplZDsKLSAgICBGRlZrRXhlY1Bvb2wgZTsKLSAgICBBVlZ1bGth bkRldmljZVF1ZXVlRmFtaWx5ICpxZjsKLSAgICBGRlZ1bGthblNoYWRlciBzaGQ7Ci0KLSAgICAv KiBQdXNoIGNvbnN0YW50cyAvIG9wdGlvbnMgKi8KLSAgICBzdHJ1Y3QgewotICAgICAgICBpbnQz Ml90IG9fb2Zmc2V0WzIqM107Ci0gICAgICAgIGludDMyX3Qgb19zaXplWzIqM107Ci0gICAgfSBv cHRzOwotCi0gICAgaW50IG92ZXJsYXlfeDsKLSAgICBpbnQgb3ZlcmxheV95OwotICAgIGludCBv dmVybGF5X3c7Ci0gICAgaW50IG92ZXJsYXlfaDsKLX0gT3ZlcmxheVZ1bGthbkNvbnRleHQ7Ci0K LXN0YXRpYyBjb25zdCBjaGFyIG92ZXJsYXlfbm9hbHBoYVtdID0gewotICAgIEMoMCwgdm9pZCBv dmVybGF5X25vYWxwaGEoaW50IGksIGl2ZWMyIHBvcykgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICkKLSAgICBDKDAsIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCi0gICAgQygxLCAgICAgaWYgKChvX29m ZnNldFtpXS54IDw9IHBvcy54KSAmJiAob19vZmZzZXRbaV0ueSA8PSBwb3MueSkgJiYKLSAgICAg ICAgICAgICAgICAgKHBvcy54IDwgKG9fb2Zmc2V0W2ldLnggKyBvX3NpemVbaV0ueCkpICYmCi0g ICAgICAgICAgICAgICAgIChwb3MueSA8IChvX29mZnNldFtpXS55ICsgb19zaXplW2ldLnkpKSkg eyAgICAgICAgICAgICAgICAgICAgKQotICAgIEMoMiwgICAgICAgICB2ZWM0IHJlcyA9IGltYWdl TG9hZChvdmVybGF5X2ltZ1tpXSwgcG9zIC0gb19vZmZzZXRbaV0pOyAgICAgICkKLSAgICBDKDIs ICAgICAgICAgaW1hZ2VTdG9yZShvdXRwdXRfaW1nW2ldLCBwb3MsIHJlcyk7ICAgICAgICAgICAg ICAgICAgICAgICAgICApCi0gICAgQygxLCAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQotICAgIEMoMiwgICAgICAg ICB2ZWM0IHJlcyA9IGltYWdlTG9hZChtYWluX2ltZ1tpXSwgcG9zKTsgICAgICAgICAgICAgICAg ICAgICAgICkKLSAgICBDKDIsICAgICAgICAgaW1hZ2VTdG9yZShvdXRwdXRfaW1nW2ldLCBwb3Ms IHJlcyk7ICAgICAgICAgICAgICAgICAgICAgICAgICApCi0gICAgQygxLCAgICAgfSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KQotICAgIEMoMCwgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICkKLX07Ci0KLXN0YXRpYyBjb25zdCBjaGFyIG92ZXJs YXlfYWxwaGFbXSA9IHsKLSAgICBDKDAsIHZvaWQgb3ZlcmxheV9hbHBoYV9vcGFxdWUoaW50IGks IGl2ZWMyIHBvcykgICAgICAgICAgICAgICAgICAgICAgICAgICApCi0gICAgQygwLCB7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKQotICAgIEMoMSwgICAgIHZlYzQgcmVzID0gaW1hZ2VMb2FkKG1haW5faW1nW2ldLCBw b3MpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICkKLSAgICBDKDEsICAgICBpZiAoKG9fb2Zm c2V0W2ldLnggPD0gcG9zLngpICYmIChvX29mZnNldFtpXS55IDw9IHBvcy55KSAmJgotICAgICAg ICAgICAgICAgICAocG9zLnggPCAob19vZmZzZXRbaV0ueCArIG9fc2l6ZVtpXS54KSkgJiYKLSAg ICAgICAgICAgICAgICAgKHBvcy55IDwgKG9fb2Zmc2V0W2ldLnkgKyBvX3NpemVbaV0ueSkpKSB7 ICAgICAgICAgICAgICAgICAgICApCi0gICAgQygyLCAgICAgICAgIHZlYzQgb3ZyID0gaW1hZ2VM b2FkKG92ZXJsYXlfaW1nW2ldLCBwb3MgLSBvX29mZnNldFtpXSk7ICAgICAgKQotICAgIEMoMiwg ICAgICAgICByZXMgPSBvdnIgKiBvdnIuYSArIHJlcyAqICgxLjBmIC0gb3ZyLmEpOyAgICAgICAg ICAgICAgICAgICAgICkKLSAgICBDKDIsICAgICAgICAgcmVzLmEgPSAxLjBmOyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCi0gICAgQygyLCAgICAgICAg IGltYWdlU3RvcmUob3V0cHV0X2ltZ1tpXSwgcG9zLCByZXMpOyAgICAgICAgICAgICAgICAgICAg ICAgICAgKQotICAgIEMoMSwgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKLSAgICBDKDEsICAgICBpbWFnZVN0b3Jl KG91dHB1dF9pbWdbaV0sIHBvcywgcmVzKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAp Ci0gICAgQygwLCB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKQotfTsKLQotc3RhdGljIGF2X2NvbGQgaW50IGluaXRf ZmlsdGVyKEFWRmlsdGVyQ29udGV4dCAqY3R4KQotewotICAgIGludCBlcnI7Ci0gICAgdWludDhf dCAqc3B2X2RhdGE7Ci0gICAgc2l6ZV90IHNwdl9sZW47Ci0gICAgdm9pZCAqc3B2X29wYXF1ZSA9 IE5VTEw7Ci0gICAgT3ZlcmxheVZ1bGthbkNvbnRleHQgKnMgPSBjdHgtPnByaXY7Ci0gICAgRkZW dWxrYW5Db250ZXh0ICp2a2N0eCA9ICZzLT52a2N0eDsKLSAgICBjb25zdCBpbnQgcGxhbmVzID0g YXZfcGl4X2ZtdF9jb3VudF9wbGFuZXMocy0+dmtjdHgub3V0cHV0X2Zvcm1hdCk7Ci0gICAgY29u c3QgaW50IGlhbHBoYSA9IGF2X3BpeF9mbXRfZGVzY19nZXQocy0+dmtjdHguaW5wdXRfZm9ybWF0 KS0+ZmxhZ3MgJiBBVl9QSVhfRk1UX0ZMQUdfQUxQSEE7Ci0gICAgY29uc3QgQVZQaXhGbXREZXNj cmlwdG9yICpwaXhfZGVzYyA9IGF2X3BpeF9mbXRfZGVzY19nZXQocy0+dmtjdHgub3V0cHV0X2Zv cm1hdCk7Ci0gICAgRkZWdWxrYW5TaGFkZXIgKnNoZCA9ICZzLT5zaGQ7Ci0gICAgRkZWa1NQSVJW Q29tcGlsZXIgKnNwdjsKLSAgICBGRlZ1bGthbkRlc2NyaXB0b3JTZXRCaW5kaW5nICpkZXNjOwot Ci0gICAgc3B2ID0gZmZfdmtfc3BpcnZfaW5pdCgpOwotICAgIGlmICghc3B2KSB7Ci0gICAgICAg IGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIlVuYWJsZSB0byBpbml0aWFsaXplIFNQSVItViBj b21waWxlciFcbiIpOwotICAgICAgICByZXR1cm4gQVZFUlJPUl9FWFRFUk5BTDsKLSAgICB9Ci0K LSAgICBzLT5xZiA9IGZmX3ZrX3FmX2ZpbmQodmtjdHgsIFZLX1FVRVVFX0NPTVBVVEVfQklULCAw KTsKLSAgICBpZiAoIXMtPnFmKSB7Ci0gICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwg IkRldmljZSBoYXMgbm8gY29tcHV0ZSBxdWV1ZXNcbiIpOwotICAgICAgICBlcnIgPSBBVkVSUk9S KEVOT1RTVVApOwotICAgICAgICBnb3RvIGZhaWw7Ci0gICAgfQotCi0gICAgUkVUKGZmX3ZrX2V4 ZWNfcG9vbF9pbml0KHZrY3R4LCBzLT5xZiwgJnMtPmUsIHMtPnFmLT5udW0qNCwgMCwgMCwgMCwg TlVMTCkpOwotICAgIFJFVChmZl92a19zaGFkZXJfaW5pdCh2a2N0eCwgJnMtPnNoZCwgIm92ZXJs YXkiLAotICAgICAgICAgICAgICAgICAgICAgICAgICBWS19TSEFERVJfU1RBR0VfQ09NUFVURV9C SVQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDAsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgIDMyLCAzMiwgMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgMCkpOwotCi0g ICAgR0xTTEMoMCwgbGF5b3V0KHB1c2hfY29uc3RhbnQsIHN0ZDQzMCkgdW5pZm9ybSBwdXNoQ29u c3RhbnRzIHsgICAgICAgICk7Ci0gICAgR0xTTEMoMSwgICAgaXZlYzIgb19vZmZzZXRbM107ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgR0xTTEMoMSwgICAg aXZlYzIgb19zaXplWzNdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICk7Ci0gICAgR0xTTEMoMCwgfTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgR0xTTEMoMCwgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0KLSAgICBmZl92 a19zaGFkZXJfYWRkX3B1c2hfY29uc3QoJnMtPnNoZCwgMCwgc2l6ZW9mKHMtPm9wdHMpLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19TSEFERVJfU1RBR0VfQ09NUFVURV9CSVQp OwotCi0gICAgZGVzYyA9IChGRlZ1bGthbkRlc2NyaXB0b3JTZXRCaW5kaW5nIFtdKSB7Ci0gICAg ICAgIHsKLSAgICAgICAgICAgIC5uYW1lICAgICAgID0gIm1haW5faW1nIiwKLSAgICAgICAgICAg IC50eXBlICAgICAgID0gVktfREVTQ1JJUFRPUl9UWVBFX1NUT1JBR0VfSU1BR0UsCi0gICAgICAg ICAgICAubWVtX2xheW91dCA9IGZmX3ZrX3NoYWRlcl9yZXBfZm10KHMtPnZrY3R4LmlucHV0X2Zv cm1hdCwgRkZfVktfUkVQX0ZMT0FUKSwKLSAgICAgICAgICAgIC5tZW1fcXVhbGkgID0gInJlYWRv bmx5IiwKLSAgICAgICAgICAgIC5kaW1lbnNpb25zID0gMiwKLSAgICAgICAgICAgIC5lbGVtcyAg ICAgID0gcGxhbmVzLAotICAgICAgICAgICAgLnN0YWdlcyAgICAgPSBWS19TSEFERVJfU1RBR0Vf Q09NUFVURV9CSVQsCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgIC5uYW1lICAg ICAgID0gIm92ZXJsYXlfaW1nIiwKLSAgICAgICAgICAgIC50eXBlICAgICAgID0gVktfREVTQ1JJ UFRPUl9UWVBFX1NUT1JBR0VfSU1BR0UsCi0gICAgICAgICAgICAubWVtX2xheW91dCA9IGZmX3Zr X3NoYWRlcl9yZXBfZm10KHMtPnZrY3R4LmlucHV0X2Zvcm1hdCwgRkZfVktfUkVQX0ZMT0FUKSwK LSAgICAgICAgICAgIC5tZW1fcXVhbGkgID0gInJlYWRvbmx5IiwKLSAgICAgICAgICAgIC5kaW1l bnNpb25zID0gMiwKLSAgICAgICAgICAgIC5lbGVtcyAgICAgID0gcGxhbmVzLAotICAgICAgICAg ICAgLnN0YWdlcyAgICAgPSBWS19TSEFERVJfU1RBR0VfQ09NUFVURV9CSVQsCi0gICAgICAgIH0s Ci0gICAgICAgIHsKLSAgICAgICAgICAgIC5uYW1lICAgICAgID0gIm91dHB1dF9pbWciLAotICAg ICAgICAgICAgLnR5cGUgICAgICAgPSBWS19ERVNDUklQVE9SX1RZUEVfU1RPUkFHRV9JTUFHRSwK LSAgICAgICAgICAgIC5tZW1fbGF5b3V0ID0gZmZfdmtfc2hhZGVyX3JlcF9mbXQocy0+dmtjdHgu b3V0cHV0X2Zvcm1hdCwgRkZfVktfUkVQX0ZMT0FUKSwKLSAgICAgICAgICAgIC5tZW1fcXVhbGkg ID0gIndyaXRlb25seSIsCi0gICAgICAgICAgICAuZGltZW5zaW9ucyA9IDIsCi0gICAgICAgICAg ICAuZWxlbXMgICAgICA9IHBsYW5lcywKLSAgICAgICAgICAgIC5zdGFnZXMgICAgID0gVktfU0hB REVSX1NUQUdFX0NPTVBVVEVfQklULAotICAgICAgICB9LAotICAgIH07Ci0KLSAgICBSRVQoZmZf dmtfc2hhZGVyX2FkZF9kZXNjcmlwdG9yX3NldCh2a2N0eCwgJnMtPnNoZCwgZGVzYywgMywgMCwg MCkpOwotCi0gICAgR0xTTEQoICAgb3ZlcmxheV9ub2FscGhhICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgR0xTTEQoICAgb3ZlcmxheV9hbHBoYSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgR0xT TEMoMCwgdm9pZCBtYWluKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICk7Ci0gICAgR0xTTEMoMCwgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgR0xTTEMoMSwgICAgIGl2ZWMy IHBvcyA9IGl2ZWMyKGdsX0dsb2JhbEludm9jYXRpb25JRC54eSk7ICAgICAgICAgICAgICk7Ci0g ICAgR0xTTEYoMSwgICAgIGludCBwbGFuZXMgPSAlaTsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgLHBsYW5lcyk7Ci0gICAgR0xTTEMoMSwgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg cGxhbmVzOyBpKyspIHsgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgaWYgKGlhbHBoYSkK LSAgICAgICAgR0xTTEMoMiwgICAgICAgICBvdmVybGF5X2FscGhhX29wYXF1ZShpLCBwb3MpOyAg ICAgICAgICAgICAgICAgICAgKTsKLSAgICBlbHNlCi0gICAgICAgIEdMU0xDKDIsICAgICAgICAg b3ZlcmxheV9ub2FscGhhKGksIHBvcyk7ICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAg R0xTTEMoMSwgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICk7Ci0gICAgR0xTTEMoMCwgfSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0KLSAgICBSRVQoc3B2LT5jb21w aWxlX3NoYWRlcih2a2N0eCwgc3B2LCBzaGQsICZzcHZfZGF0YSwgJnNwdl9sZW4sICJtYWluIiwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3B2X29wYXF1ZSkpOwotICAgIFJFVChmZl92 a19zaGFkZXJfbGluayh2a2N0eCwgc2hkLCBzcHZfZGF0YSwgc3B2X2xlbiwgIm1haW4iKSk7Ci0K LSAgICBSRVQoZmZfdmtfc2hhZGVyX3JlZ2lzdGVyX2V4ZWModmtjdHgsICZzLT5lLCAmcy0+c2hk KSk7Ci0KLSAgICBzLT5vcHRzLm9fb2Zmc2V0WzBdID0gcy0+b3ZlcmxheV94OwotICAgIHMtPm9w dHMub19vZmZzZXRbMV0gPSBzLT5vdmVybGF5X3k7Ci0gICAgcy0+b3B0cy5vX29mZnNldFsyXSA9 IHMtPm9wdHMub19vZmZzZXRbMF0gPj4gcGl4X2Rlc2MtPmxvZzJfY2hyb21hX3c7Ci0gICAgcy0+ b3B0cy5vX29mZnNldFszXSA9IHMtPm9wdHMub19vZmZzZXRbMV0gPj4gcGl4X2Rlc2MtPmxvZzJf Y2hyb21hX2g7Ci0gICAgcy0+b3B0cy5vX29mZnNldFs0XSA9IHMtPm9wdHMub19vZmZzZXRbMF0g Pj4gcGl4X2Rlc2MtPmxvZzJfY2hyb21hX3c7Ci0gICAgcy0+b3B0cy5vX29mZnNldFs1XSA9IHMt Pm9wdHMub19vZmZzZXRbMV0gPj4gcGl4X2Rlc2MtPmxvZzJfY2hyb21hX2g7Ci0KLSAgICBzLT5v cHRzLm9fc2l6ZVswXSA9IHMtPm92ZXJsYXlfdzsKLSAgICBzLT5vcHRzLm9fc2l6ZVsxXSA9IHMt Pm92ZXJsYXlfaDsKLSAgICBzLT5vcHRzLm9fc2l6ZVsyXSA9IHMtPm9wdHMub19zaXplWzBdID4+ IHBpeF9kZXNjLT5sb2cyX2Nocm9tYV93OwotICAgIHMtPm9wdHMub19zaXplWzNdID0gcy0+b3B0 cy5vX3NpemVbMV0gPj4gcGl4X2Rlc2MtPmxvZzJfY2hyb21hX2g7Ci0gICAgcy0+b3B0cy5vX3Np emVbNF0gPSBzLT5vcHRzLm9fc2l6ZVswXSA+PiBwaXhfZGVzYy0+bG9nMl9jaHJvbWFfdzsKLSAg ICBzLT5vcHRzLm9fc2l6ZVs1XSA9IHMtPm9wdHMub19zaXplWzFdID4+IHBpeF9kZXNjLT5sb2cy X2Nocm9tYV9oOwotCi0gICAgcy0+aW5pdGlhbGl6ZWQgPSAxOwotCi1mYWlsOgotICAgIGlmIChz cHZfb3BhcXVlKQotICAgICAgICBzcHYtPmZyZWVfc2hhZGVyKHNwdiwgJnNwdl9vcGFxdWUpOwot ICAgIGlmIChzcHYpCi0gICAgICAgIHNwdi0+dW5pbml0KCZzcHYpOwotCi0gICAgcmV0dXJuIGVy cjsKLX0KLQotc3RhdGljIGludCBvdmVybGF5X3Z1bGthbl9ibGVuZChGRkZyYW1lU3luYyAqZnMp Ci17Ci0gICAgaW50IGVycjsKLSAgICBBVkZpbHRlckNvbnRleHQgKmN0eCA9IGZzLT5wYXJlbnQ7 Ci0gICAgT3ZlcmxheVZ1bGthbkNvbnRleHQgKnMgPSBjdHgtPnByaXY7Ci0gICAgQVZGaWx0ZXJM aW5rICpvdXRsaW5rID0gY3R4LT5vdXRwdXRzWzBdOwotICAgIEFWRnJhbWUgKmlucHV0X21haW4s ICppbnB1dF9vdmVybGF5LCAqb3V0OwotCi0gICAgZXJyID0gZmZfZnJhbWVzeW5jX2dldF9mcmFt ZShmcywgMCwgJmlucHV0X21haW4sIDApOwotICAgIGlmIChlcnIgPCAwKQotICAgICAgICBnb3Rv IGZhaWw7Ci0gICAgZXJyID0gZmZfZnJhbWVzeW5jX2dldF9mcmFtZShmcywgMSwgJmlucHV0X292 ZXJsYXksIDApOwotICAgIGlmIChlcnIgPCAwKQotICAgICAgICBnb3RvIGZhaWw7Ci0KLSAgICBp ZiAoIWlucHV0X21haW4gfHwgIWlucHV0X292ZXJsYXkpCi0gICAgICAgIHJldHVybiAwOwotCi0g ICAgaWYgKCFzLT5pbml0aWFsaXplZCkgewotICAgICAgICBBVkhXRnJhbWVzQ29udGV4dCAqbWFp bl9mYyA9IChBVkhXRnJhbWVzQ29udGV4dCopaW5wdXRfbWFpbi0+aHdfZnJhbWVzX2N0eC0+ZGF0 YTsKLSAgICAgICAgQVZIV0ZyYW1lc0NvbnRleHQgKm92ZXJsYXlfZmMgPSAoQVZIV0ZyYW1lc0Nv bnRleHQqKWlucHV0X292ZXJsYXktPmh3X2ZyYW1lc19jdHgtPmRhdGE7Ci0gICAgICAgIGlmICht YWluX2ZjLT5zd19mb3JtYXQgIT0gb3ZlcmxheV9mYy0+c3dfZm9ybWF0KSB7Ci0gICAgICAgICAg ICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJNaXNtYXRjaGluZyBzdyBmb3JtYXRzIVxuIik7 Ci0gICAgICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOwotICAgICAgICB9Ci0KLSAgICAg ICAgcy0+b3ZlcmxheV93ID0gaW5wdXRfb3ZlcmxheS0+d2lkdGg7Ci0gICAgICAgIHMtPm92ZXJs YXlfaCA9IGlucHV0X292ZXJsYXktPmhlaWdodDsKLQotICAgICAgICBSRVQoaW5pdF9maWx0ZXIo Y3R4KSk7Ci0gICAgfQotCi0gICAgb3V0ID0gZmZfZ2V0X3ZpZGVvX2J1ZmZlcihvdXRsaW5rLCBv dXRsaW5rLT53LCBvdXRsaW5rLT5oKTsKLSAgICBpZiAoIW91dCkgewotICAgICAgICBlcnIgPSBB VkVSUk9SKEVOT01FTSk7Ci0gICAgICAgIGdvdG8gZmFpbDsKLSAgICB9Ci0KLSAgICBSRVQoZmZf dmtfZmlsdGVyX3Byb2Nlc3NfTmluKCZzLT52a2N0eCwgJnMtPmUsICZzLT5zaGQsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQsIChBVkZyYW1lICpbXSl7IGlucHV0X21haW4s IGlucHV0X292ZXJsYXkgfSwgMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZL X05VTExfSEFORExFLCAmcy0+b3B0cywgc2l6ZW9mKHMtPm9wdHMpKSk7Ci0KLSAgICBlcnIgPSBh dl9mcmFtZV9jb3B5X3Byb3BzKG91dCwgaW5wdXRfbWFpbik7Ci0gICAgaWYgKGVyciA8IDApCi0g ICAgICAgIGdvdG8gZmFpbDsKLQotICAgIHJldHVybiBmZl9maWx0ZXJfZnJhbWUob3V0bGluaywg b3V0KTsKLQotZmFpbDoKLSAgICBhdl9mcmFtZV9mcmVlKCZvdXQpOwotICAgIHJldHVybiBlcnI7 Ci19Ci0KLXN0YXRpYyBpbnQgb3ZlcmxheV92dWxrYW5fY29uZmlnX291dHB1dChBVkZpbHRlckxp bmsgKm91dGxpbmspCi17Ci0gICAgaW50IGVycjsKLSAgICBBVkZpbHRlckNvbnRleHQgKmF2Y3R4 ID0gb3V0bGluay0+c3JjOwotICAgIE92ZXJsYXlWdWxrYW5Db250ZXh0ICpzID0gYXZjdHgtPnBy aXY7Ci0KLSAgICBlcnIgPSBmZl92a19maWx0ZXJfY29uZmlnX291dHB1dChvdXRsaW5rKTsKLSAg ICBpZiAoZXJyIDwgMCkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIGVyciA9IGZmX2ZyYW1l c3luY19pbml0X2R1YWxpbnB1dCgmcy0+ZnMsIGF2Y3R4KTsKLSAgICBpZiAoZXJyIDwgMCkKLSAg ICAgICAgcmV0dXJuIGVycjsKLQotICAgIHJldHVybiBmZl9mcmFtZXN5bmNfY29uZmlndXJlKCZz LT5mcyk7Ci19Ci0KLXN0YXRpYyBpbnQgb3ZlcmxheV92dWxrYW5fYWN0aXZhdGUoQVZGaWx0ZXJD b250ZXh0ICphdmN0eCkKLXsKLSAgICBPdmVybGF5VnVsa2FuQ29udGV4dCAqcyA9IGF2Y3R4LT5w cml2OwotCi0gICAgcmV0dXJuIGZmX2ZyYW1lc3luY19hY3RpdmF0ZSgmcy0+ZnMpOwotfQotCi1z dGF0aWMgYXZfY29sZCBpbnQgb3ZlcmxheV92dWxrYW5faW5pdChBVkZpbHRlckNvbnRleHQgKmF2 Y3R4KQotewotICAgIE92ZXJsYXlWdWxrYW5Db250ZXh0ICpzID0gYXZjdHgtPnByaXY7Ci0KLSAg ICBzLT5mcy5vbl9ldmVudCA9ICZvdmVybGF5X3Z1bGthbl9ibGVuZDsKLQotICAgIHJldHVybiBm Zl92a19maWx0ZXJfaW5pdChhdmN0eCk7Ci19Ci0KLXN0YXRpYyB2b2lkIG92ZXJsYXlfdnVsa2Fu X3VuaW5pdChBVkZpbHRlckNvbnRleHQgKmF2Y3R4KQotewotICAgIE92ZXJsYXlWdWxrYW5Db250 ZXh0ICpzID0gYXZjdHgtPnByaXY7Ci0gICAgRkZWdWxrYW5Db250ZXh0ICp2a2N0eCA9ICZzLT52 a2N0eDsKLQotICAgIGZmX3ZrX2V4ZWNfcG9vbF9mcmVlKHZrY3R4LCAmcy0+ZSk7Ci0gICAgZmZf dmtfc2hhZGVyX2ZyZWUodmtjdHgsICZzLT5zaGQpOwotCi0gICAgZmZfdmtfdW5pbml0KCZzLT52 a2N0eCk7Ci0gICAgZmZfZnJhbWVzeW5jX3VuaW5pdCgmcy0+ZnMpOwotCi0gICAgcy0+aW5pdGlh bGl6ZWQgPSAwOwotfQotCi0jZGVmaW5lIE9GRlNFVCh4KSBvZmZzZXRvZihPdmVybGF5VnVsa2Fu Q29udGV4dCwgeCkKLSNkZWZpbmUgRkxBR1MgKEFWX09QVF9GTEFHX0ZJTFRFUklOR19QQVJBTSB8 IEFWX09QVF9GTEFHX1ZJREVPX1BBUkFNKQotc3RhdGljIGNvbnN0IEFWT3B0aW9uIG92ZXJsYXlf dnVsa2FuX29wdGlvbnNbXSA9IHsKLSAgICB7ICJ4IiwgIlNldCBob3Jpem9udGFsIG9mZnNldCIs IE9GRlNFVChvdmVybGF5X3gpLCBBVl9PUFRfVFlQRV9JTlQsIHsuaTY0ID0gMH0sIDAsIElOVF9N QVgsIC5mbGFncyA9IEZMQUdTIH0sCi0gICAgeyAieSIsICJTZXQgdmVydGljYWwgb2Zmc2V0Iiwg ICBPRkZTRVQob3ZlcmxheV95KSwgQVZfT1BUX1RZUEVfSU5ULCB7Lmk2NCA9IDB9LCAwLCBJTlRf TUFYLCAuZmxhZ3MgPSBGTEFHUyB9LAotICAgIHsgTlVMTCB9LAotfTsKLQotQVZGSUxURVJfREVG SU5FX0NMQVNTKG92ZXJsYXlfdnVsa2FuKTsKLQotc3RhdGljIGNvbnN0IEFWRmlsdGVyUGFkIG92 ZXJsYXlfdnVsa2FuX2lucHV0c1tdID0gewotICAgIHsKLSAgICAgICAgLm5hbWUgICAgICAgICA9 ICJtYWluIiwKLSAgICAgICAgLnR5cGUgICAgICAgICA9IEFWTUVESUFfVFlQRV9WSURFTywKLSAg ICAgICAgLmNvbmZpZ19wcm9wcyA9ICZmZl92a19maWx0ZXJfY29uZmlnX2lucHV0LAotICAgIH0s Ci0gICAgewotICAgICAgICAubmFtZSAgICAgICAgID0gIm92ZXJsYXkiLAotICAgICAgICAudHlw ZSAgICAgICAgID0gQVZNRURJQV9UWVBFX1ZJREVPLAotICAgICAgICAuY29uZmlnX3Byb3BzID0g JmZmX3ZrX2ZpbHRlcl9jb25maWdfaW5wdXQsCi0gICAgfSwKLX07Ci0KLXN0YXRpYyBjb25zdCBB VkZpbHRlclBhZCBvdmVybGF5X3Z1bGthbl9vdXRwdXRzW10gPSB7Ci0gICAgewotICAgICAgICAu bmFtZSA9ICJkZWZhdWx0IiwKLSAgICAgICAgLnR5cGUgPSBBVk1FRElBX1RZUEVfVklERU8sCi0g ICAgICAgIC5jb25maWdfcHJvcHMgPSAmb3ZlcmxheV92dWxrYW5fY29uZmlnX291dHB1dCwKLSAg ICB9LAotfTsKLQotY29uc3QgRkZGaWx0ZXIgZmZfdmZfb3ZlcmxheV92dWxrYW4gPSB7Ci0gICAg LnAubmFtZSAgICAgICAgID0gIm92ZXJsYXlfdnVsa2FuIiwKLSAgICAucC5kZXNjcmlwdGlvbiAg PSBOVUxMX0lGX0NPTkZJR19TTUFMTCgiT3ZlcmxheSBhIHNvdXJjZSBvbiB0b3Agb2YgYW5vdGhl ciIpLAotICAgIC5wLnByaXZfY2xhc3MgICA9ICZvdmVybGF5X3Z1bGthbl9jbGFzcywKLSAgICAu cC5mbGFncyAgICAgICAgPSBBVkZJTFRFUl9GTEFHX0hXREVWSUNFLAotICAgIC5wcml2X3NpemUg ICAgICA9IHNpemVvZihPdmVybGF5VnVsa2FuQ29udGV4dCksCi0gICAgLmluaXQgICAgICAgICAg ID0gJm92ZXJsYXlfdnVsa2FuX2luaXQsCi0gICAgLnVuaW5pdCAgICAgICAgID0gJm92ZXJsYXlf dnVsa2FuX3VuaW5pdCwKLSAgICAuYWN0aXZhdGUgICAgICAgPSAmb3ZlcmxheV92dWxrYW5fYWN0 aXZhdGUsCi0gICAgRklMVEVSX0lOUFVUUyhvdmVybGF5X3Z1bGthbl9pbnB1dHMpLAotICAgIEZJ TFRFUl9PVVRQVVRTKG92ZXJsYXlfdnVsa2FuX291dHB1dHMpLAotICAgIEZJTFRFUl9TSU5HTEVf UElYRk1UKEFWX1BJWF9GTVRfVlVMS0FOKSwKLSAgICAuZmxhZ3NfaW50ZXJuYWwgPSBGRl9GSUxU RVJfRkxBR19IV0ZSQU1FX0FXQVJFLAotfTsKLS0gCjIuNDkuMQoKCkZyb20gNzBiYzk0MTZhNDU5 ODg1YWEzYTZiYzhkNTA3MjEyNmJjMzRkZGIyYSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKRnJv bTogSmFtYWlrYTEgPGx1a2FzemN6MThAd3AucGw+CkRhdGU6IFdlZCwgMyBTZXAgMjAyNSAxMjo1 OTowNCArMDAwMApTdWJqZWN0OiBbUEFUQ0ggMDIwLzExOF0gQ2hhbmdpbmcgdnVsa2FuIGZpbGUg ZGlyZWN0b3J5CgotLS0KIGxpYmF2ZmlsdGVyL3Z1bGthbi92Zl9vdmVybGF5X3Z1bGthbi5jIHwg MzQ3ICsrKysrKysrKysrKysrKysrKysrKysrKysKIDEgZmlsZSBjaGFuZ2VkLCAzNDcgaW5zZXJ0 aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2ZmlsdGVyL3Z1bGthbi92Zl9vdmVybGF5 X3Z1bGthbi5jCgpkaWZmIC0tZ2l0IGEvbGliYXZmaWx0ZXIvdnVsa2FuL3ZmX292ZXJsYXlfdnVs a2FuLmMgYi9saWJhdmZpbHRlci92dWxrYW4vdmZfb3ZlcmxheV92dWxrYW4uYwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi4wNWZjMDZjODRlCi0tLSAvZGV2L251bGwKKysr IGIvbGliYXZmaWx0ZXIvdnVsa2FuL3ZmX292ZXJsYXlfdnVsa2FuLmMKQEAgLTAsMCArMSwzNDcg QEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIEx5bm5lCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQg b2YgRkZtcGVnLgorICoKKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExp Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogRkZt cGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIEZG bXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwg SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0x MzAxIFVTQQorICovCisKKyNpbmNsdWRlICJsaWJhdnV0aWwvcmFuZG9tX3NlZWQuaCIKKyNpbmNs dWRlICJsaWJhdnV0aWwvb3B0LmgiCisjaW5jbHVkZSAiLi4vLi4vbGliYXZ1dGlsL3Z1bGthbi92 dWxrYW5fc3BpcnYuaCIKKyNpbmNsdWRlICJ2dWxrYW5fZmlsdGVyLmgiCisKKyNpbmNsdWRlICJs aWJhdmZpbHRlci9maWx0ZXJzLmgiCisjaW5jbHVkZSAibGliYXZmaWx0ZXIvZnJhbWVzeW5jLmgi CisjaW5jbHVkZSAibGliYXZmaWx0ZXIvdmlkZW8uaCIKKwordHlwZWRlZiBzdHJ1Y3QgT3Zlcmxh eVZ1bGthbkNvbnRleHQgeworICAgIEZGVnVsa2FuQ29udGV4dCB2a2N0eDsKKyAgICBGRkZyYW1l U3luYyBmczsKKworICAgIGludCBpbml0aWFsaXplZDsKKyAgICBGRlZrRXhlY1Bvb2wgZTsKKyAg ICBBVlZ1bGthbkRldmljZVF1ZXVlRmFtaWx5ICpxZjsKKyAgICBGRlZ1bGthblNoYWRlciBzaGQ7 CisKKyAgICAvKiBQdXNoIGNvbnN0YW50cyAvIG9wdGlvbnMgKi8KKyAgICBzdHJ1Y3QgeworICAg ICAgICBpbnQzMl90IG9fb2Zmc2V0WzIqM107CisgICAgICAgIGludDMyX3Qgb19zaXplWzIqM107 CisgICAgfSBvcHRzOworCisgICAgaW50IG92ZXJsYXlfeDsKKyAgICBpbnQgb3ZlcmxheV95Owor ICAgIGludCBvdmVybGF5X3c7CisgICAgaW50IG92ZXJsYXlfaDsKK30gT3ZlcmxheVZ1bGthbkNv bnRleHQ7CisKK3N0YXRpYyBjb25zdCBjaGFyIG92ZXJsYXlfbm9hbHBoYVtdID0geworICAgIEMo MCwgdm9pZCBvdmVybGF5X25vYWxwaGEoaW50IGksIGl2ZWMyIHBvcykgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICkKKyAgICBDKDAsIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgQygxLCAgICAg aWYgKChvX29mZnNldFtpXS54IDw9IHBvcy54KSAmJiAob19vZmZzZXRbaV0ueSA8PSBwb3MueSkg JiYKKyAgICAgICAgICAgICAgICAgKHBvcy54IDwgKG9fb2Zmc2V0W2ldLnggKyBvX3NpemVbaV0u eCkpICYmCisgICAgICAgICAgICAgICAgIChwb3MueSA8IChvX29mZnNldFtpXS55ICsgb19zaXpl W2ldLnkpKSkgeyAgICAgICAgICAgICAgICAgICAgKQorICAgIEMoMiwgICAgICAgICB2ZWM0IHJl cyA9IGltYWdlTG9hZChvdmVybGF5X2ltZ1tpXSwgcG9zIC0gb19vZmZzZXRbaV0pOyAgICAgICkK KyAgICBDKDIsICAgICAgICAgaW1hZ2VTdG9yZShvdXRwdXRfaW1nW2ldLCBwb3MsIHJlcyk7ICAg ICAgICAgICAgICAgICAgICAgICAgICApCisgICAgQygxLCAgICAgfSBlbHNlIHsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgIEMo MiwgICAgICAgICB2ZWM0IHJlcyA9IGltYWdlTG9hZChtYWluX2ltZ1tpXSwgcG9zKTsgICAgICAg ICAgICAgICAgICAgICAgICkKKyAgICBDKDIsICAgICAgICAgaW1hZ2VTdG9yZShvdXRwdXRfaW1n W2ldLCBwb3MsIHJlcyk7ICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgQygxLCAgICAg fSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKQorICAgIEMoMCwgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKK307CisKK3N0YXRpYyBjb25zdCBj aGFyIG92ZXJsYXlfYWxwaGFbXSA9IHsKKyAgICBDKDAsIHZvaWQgb3ZlcmxheV9hbHBoYV9vcGFx dWUoaW50IGksIGl2ZWMyIHBvcykgICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgQygw LCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKQorICAgIEMoMSwgICAgIHZlYzQgcmVzID0gaW1hZ2VMb2FkKG1haW5f aW1nW2ldLCBwb3MpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICBDKDEsICAgICBp ZiAoKG9fb2Zmc2V0W2ldLnggPD0gcG9zLngpICYmIChvX29mZnNldFtpXS55IDw9IHBvcy55KSAm JgorICAgICAgICAgICAgICAgICAocG9zLnggPCAob19vZmZzZXRbaV0ueCArIG9fc2l6ZVtpXS54 KSkgJiYKKyAgICAgICAgICAgICAgICAgKHBvcy55IDwgKG9fb2Zmc2V0W2ldLnkgKyBvX3NpemVb aV0ueSkpKSB7ICAgICAgICAgICAgICAgICAgICApCisgICAgQygyLCAgICAgICAgIHZlYzQgb3Zy ID0gaW1hZ2VMb2FkKG92ZXJsYXlfaW1nW2ldLCBwb3MgLSBvX29mZnNldFtpXSk7ICAgICAgKQor ICAgIEMoMiwgICAgICAgICByZXMgPSBvdnIgKiBvdnIuYSArIHJlcyAqICgxLjBmIC0gb3ZyLmEp OyAgICAgICAgICAgICAgICAgICAgICkKKyAgICBDKDIsICAgICAgICAgcmVzLmEgPSAxLjBmOyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgQygy LCAgICAgICAgIGltYWdlU3RvcmUob3V0cHV0X2ltZ1tpXSwgcG9zLCByZXMpOyAgICAgICAgICAg ICAgICAgICAgICAgICAgKQorICAgIEMoMSwgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICBDKDEsICAgICBp bWFnZVN0b3JlKG91dHB1dF9pbWdbaV0sIHBvcywgcmVzKTsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICApCisgICAgQygwLCB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorfTsKKworc3RhdGljIGF2X2NvbGQg aW50IGluaXRfZmlsdGVyKEFWRmlsdGVyQ29udGV4dCAqY3R4KQoreworICAgIGludCBlcnI7Cisg ICAgdWludDhfdCAqc3B2X2RhdGE7CisgICAgc2l6ZV90IHNwdl9sZW47CisgICAgdm9pZCAqc3B2 X29wYXF1ZSA9IE5VTEw7CisgICAgT3ZlcmxheVZ1bGthbkNvbnRleHQgKnMgPSBjdHgtPnByaXY7 CisgICAgRkZWdWxrYW5Db250ZXh0ICp2a2N0eCA9ICZzLT52a2N0eDsKKyAgICBjb25zdCBpbnQg cGxhbmVzID0gYXZfcGl4X2ZtdF9jb3VudF9wbGFuZXMocy0+dmtjdHgub3V0cHV0X2Zvcm1hdCk7 CisgICAgY29uc3QgaW50IGlhbHBoYSA9IGF2X3BpeF9mbXRfZGVzY19nZXQocy0+dmtjdHguaW5w dXRfZm9ybWF0KS0+ZmxhZ3MgJiBBVl9QSVhfRk1UX0ZMQUdfQUxQSEE7CisgICAgY29uc3QgQVZQ aXhGbXREZXNjcmlwdG9yICpwaXhfZGVzYyA9IGF2X3BpeF9mbXRfZGVzY19nZXQocy0+dmtjdHgu b3V0cHV0X2Zvcm1hdCk7CisgICAgRkZWdWxrYW5TaGFkZXIgKnNoZCA9ICZzLT5zaGQ7CisgICAg RkZWa1NQSVJWQ29tcGlsZXIgKnNwdjsKKyAgICBGRlZ1bGthbkRlc2NyaXB0b3JTZXRCaW5kaW5n ICpkZXNjOworCisgICAgc3B2ID0gZmZfdmtfc3BpcnZfaW5pdCgpOworICAgIGlmICghc3B2KSB7 CisgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIlVuYWJsZSB0byBpbml0aWFsaXpl IFNQSVItViBjb21waWxlciFcbiIpOworICAgICAgICByZXR1cm4gQVZFUlJPUl9FWFRFUk5BTDsK KyAgICB9CisKKyAgICBzLT5xZiA9IGZmX3ZrX3FmX2ZpbmQodmtjdHgsIFZLX1FVRVVFX0NPTVBV VEVfQklULCAwKTsKKyAgICBpZiAoIXMtPnFmKSB7CisgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xP R19FUlJPUiwgIkRldmljZSBoYXMgbm8gY29tcHV0ZSBxdWV1ZXNcbiIpOworICAgICAgICBlcnIg PSBBVkVSUk9SKEVOT1RTVVApOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgUkVU KGZmX3ZrX2V4ZWNfcG9vbF9pbml0KHZrY3R4LCBzLT5xZiwgJnMtPmUsIHMtPnFmLT5udW0qNCwg MCwgMCwgMCwgTlVMTCkpOworICAgIFJFVChmZl92a19zaGFkZXJfaW5pdCh2a2N0eCwgJnMtPnNo ZCwgIm92ZXJsYXkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBWS19TSEFERVJfU1RBR0Vf Q09NUFVURV9CSVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDAsCisgICAgICAg ICAgICAgICAgICAgICAgICAgIDMyLCAzMiwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg MCkpOworCisgICAgR0xTTEMoMCwgbGF5b3V0KHB1c2hfY29uc3RhbnQsIHN0ZDQzMCkgdW5pZm9y bSBwdXNoQ29uc3RhbnRzIHsgICAgICAgICk7CisgICAgR0xTTEMoMSwgICAgaXZlYzIgb19vZmZz ZXRbM107ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgR0xT TEMoMSwgICAgaXZlYzIgb19zaXplWzNdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICk7CisgICAgR0xTTEMoMCwgfTsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgR0xTTEMoMCwgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisK KyAgICBmZl92a19zaGFkZXJfYWRkX3B1c2hfY29uc3QoJnMtPnNoZCwgMCwgc2l6ZW9mKHMtPm9w dHMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19TSEFERVJfU1RBR0VfQ09N UFVURV9CSVQpOworCisgICAgZGVzYyA9IChGRlZ1bGthbkRlc2NyaXB0b3JTZXRCaW5kaW5nIFtd KSB7CisgICAgICAgIHsKKyAgICAgICAgICAgIC5uYW1lICAgICAgID0gIm1haW5faW1nIiwKKyAg ICAgICAgICAgIC50eXBlICAgICAgID0gVktfREVTQ1JJUFRPUl9UWVBFX1NUT1JBR0VfSU1BR0Us CisgICAgICAgICAgICAubWVtX2xheW91dCA9IGZmX3ZrX3NoYWRlcl9yZXBfZm10KHMtPnZrY3R4 LmlucHV0X2Zvcm1hdCwgRkZfVktfUkVQX0ZMT0FUKSwKKyAgICAgICAgICAgIC5tZW1fcXVhbGkg ID0gInJlYWRvbmx5IiwKKyAgICAgICAgICAgIC5kaW1lbnNpb25zID0gMiwKKyAgICAgICAgICAg IC5lbGVtcyAgICAgID0gcGxhbmVzLAorICAgICAgICAgICAgLnN0YWdlcyAgICAgPSBWS19TSEFE RVJfU1RBR0VfQ09NUFVURV9CSVQsCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAg IC5uYW1lICAgICAgID0gIm92ZXJsYXlfaW1nIiwKKyAgICAgICAgICAgIC50eXBlICAgICAgID0g VktfREVTQ1JJUFRPUl9UWVBFX1NUT1JBR0VfSU1BR0UsCisgICAgICAgICAgICAubWVtX2xheW91 dCA9IGZmX3ZrX3NoYWRlcl9yZXBfZm10KHMtPnZrY3R4LmlucHV0X2Zvcm1hdCwgRkZfVktfUkVQ X0ZMT0FUKSwKKyAgICAgICAgICAgIC5tZW1fcXVhbGkgID0gInJlYWRvbmx5IiwKKyAgICAgICAg ICAgIC5kaW1lbnNpb25zID0gMiwKKyAgICAgICAgICAgIC5lbGVtcyAgICAgID0gcGxhbmVzLAor ICAgICAgICAgICAgLnN0YWdlcyAgICAgPSBWS19TSEFERVJfU1RBR0VfQ09NUFVURV9CSVQsCisg ICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgIC5uYW1lICAgICAgID0gIm91dHB1dF9p bWciLAorICAgICAgICAgICAgLnR5cGUgICAgICAgPSBWS19ERVNDUklQVE9SX1RZUEVfU1RPUkFH RV9JTUFHRSwKKyAgICAgICAgICAgIC5tZW1fbGF5b3V0ID0gZmZfdmtfc2hhZGVyX3JlcF9mbXQo cy0+dmtjdHgub3V0cHV0X2Zvcm1hdCwgRkZfVktfUkVQX0ZMT0FUKSwKKyAgICAgICAgICAgIC5t ZW1fcXVhbGkgID0gIndyaXRlb25seSIsCisgICAgICAgICAgICAuZGltZW5zaW9ucyA9IDIsCisg ICAgICAgICAgICAuZWxlbXMgICAgICA9IHBsYW5lcywKKyAgICAgICAgICAgIC5zdGFnZXMgICAg ID0gVktfU0hBREVSX1NUQUdFX0NPTVBVVEVfQklULAorICAgICAgICB9LAorICAgIH07CisKKyAg ICBSRVQoZmZfdmtfc2hhZGVyX2FkZF9kZXNjcmlwdG9yX3NldCh2a2N0eCwgJnMtPnNoZCwgZGVz YywgMywgMCwgMCkpOworCisgICAgR0xTTEQoICAgb3ZlcmxheV9ub2FscGhhICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgR0xTTEQoICAgb3Zlcmxh eV9hbHBoYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7 CisgICAgR0xTTEMoMCwgdm9pZCBtYWluKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICk7CisgICAgR0xTTEMoMCwgeyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgR0xTTEMoMSwg ICAgIGl2ZWMyIHBvcyA9IGl2ZWMyKGdsX0dsb2JhbEludm9jYXRpb25JRC54eSk7ICAgICAgICAg ICAgICk7CisgICAgR0xTTEYoMSwgICAgIGludCBwbGFuZXMgPSAlaTsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLHBsYW5lcyk7CisgICAgR0xTTEMoMSwgICAgIGZvciAoaW50IGkg PSAwOyBpIDwgcGxhbmVzOyBpKyspIHsgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgaWYg KGlhbHBoYSkKKyAgICAgICAgR0xTTEMoMiwgICAgICAgICBvdmVybGF5X2FscGhhX29wYXF1ZShp LCBwb3MpOyAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBlbHNlCisgICAgICAgIEdMU0xDKDIs ICAgICAgICAgb3ZlcmxheV9ub2FscGhhKGksIHBvcyk7ICAgICAgICAgICAgICAgICAgICAgICAg ICk7CisgICAgR0xTTEMoMSwgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgR0xTTEMoMCwgfSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisKKyAgICBSRVQo c3B2LT5jb21waWxlX3NoYWRlcih2a2N0eCwgc3B2LCBzaGQsICZzcHZfZGF0YSwgJnNwdl9sZW4s ICJtYWluIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3B2X29wYXF1ZSkpOworICAg IFJFVChmZl92a19zaGFkZXJfbGluayh2a2N0eCwgc2hkLCBzcHZfZGF0YSwgc3B2X2xlbiwgIm1h aW4iKSk7CisKKyAgICBSRVQoZmZfdmtfc2hhZGVyX3JlZ2lzdGVyX2V4ZWModmtjdHgsICZzLT5l LCAmcy0+c2hkKSk7CisKKyAgICBzLT5vcHRzLm9fb2Zmc2V0WzBdID0gcy0+b3ZlcmxheV94Owor ICAgIHMtPm9wdHMub19vZmZzZXRbMV0gPSBzLT5vdmVybGF5X3k7CisgICAgcy0+b3B0cy5vX29m ZnNldFsyXSA9IHMtPm9wdHMub19vZmZzZXRbMF0gPj4gcGl4X2Rlc2MtPmxvZzJfY2hyb21hX3c7 CisgICAgcy0+b3B0cy5vX29mZnNldFszXSA9IHMtPm9wdHMub19vZmZzZXRbMV0gPj4gcGl4X2Rl c2MtPmxvZzJfY2hyb21hX2g7CisgICAgcy0+b3B0cy5vX29mZnNldFs0XSA9IHMtPm9wdHMub19v ZmZzZXRbMF0gPj4gcGl4X2Rlc2MtPmxvZzJfY2hyb21hX3c7CisgICAgcy0+b3B0cy5vX29mZnNl dFs1XSA9IHMtPm9wdHMub19vZmZzZXRbMV0gPj4gcGl4X2Rlc2MtPmxvZzJfY2hyb21hX2g7CisK KyAgICBzLT5vcHRzLm9fc2l6ZVswXSA9IHMtPm92ZXJsYXlfdzsKKyAgICBzLT5vcHRzLm9fc2l6 ZVsxXSA9IHMtPm92ZXJsYXlfaDsKKyAgICBzLT5vcHRzLm9fc2l6ZVsyXSA9IHMtPm9wdHMub19z aXplWzBdID4+IHBpeF9kZXNjLT5sb2cyX2Nocm9tYV93OworICAgIHMtPm9wdHMub19zaXplWzNd ID0gcy0+b3B0cy5vX3NpemVbMV0gPj4gcGl4X2Rlc2MtPmxvZzJfY2hyb21hX2g7CisgICAgcy0+ b3B0cy5vX3NpemVbNF0gPSBzLT5vcHRzLm9fc2l6ZVswXSA+PiBwaXhfZGVzYy0+bG9nMl9jaHJv bWFfdzsKKyAgICBzLT5vcHRzLm9fc2l6ZVs1XSA9IHMtPm9wdHMub19zaXplWzFdID4+IHBpeF9k ZXNjLT5sb2cyX2Nocm9tYV9oOworCisgICAgcy0+aW5pdGlhbGl6ZWQgPSAxOworCitmYWlsOgor ICAgIGlmIChzcHZfb3BhcXVlKQorICAgICAgICBzcHYtPmZyZWVfc2hhZGVyKHNwdiwgJnNwdl9v cGFxdWUpOworICAgIGlmIChzcHYpCisgICAgICAgIHNwdi0+dW5pbml0KCZzcHYpOworCisgICAg cmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBvdmVybGF5X3Z1bGthbl9ibGVuZChGRkZyYW1l U3luYyAqZnMpCit7CisgICAgaW50IGVycjsKKyAgICBBVkZpbHRlckNvbnRleHQgKmN0eCA9IGZz LT5wYXJlbnQ7CisgICAgT3ZlcmxheVZ1bGthbkNvbnRleHQgKnMgPSBjdHgtPnByaXY7CisgICAg QVZGaWx0ZXJMaW5rICpvdXRsaW5rID0gY3R4LT5vdXRwdXRzWzBdOworICAgIEFWRnJhbWUgKmlu cHV0X21haW4sICppbnB1dF9vdmVybGF5LCAqb3V0OworCisgICAgZXJyID0gZmZfZnJhbWVzeW5j X2dldF9mcmFtZShmcywgMCwgJmlucHV0X21haW4sIDApOworICAgIGlmIChlcnIgPCAwKQorICAg ICAgICBnb3RvIGZhaWw7CisgICAgZXJyID0gZmZfZnJhbWVzeW5jX2dldF9mcmFtZShmcywgMSwg JmlucHV0X292ZXJsYXksIDApOworICAgIGlmIChlcnIgPCAwKQorICAgICAgICBnb3RvIGZhaWw7 CisKKyAgICBpZiAoIWlucHV0X21haW4gfHwgIWlucHV0X292ZXJsYXkpCisgICAgICAgIHJldHVy biAwOworCisgICAgaWYgKCFzLT5pbml0aWFsaXplZCkgeworICAgICAgICBBVkhXRnJhbWVzQ29u dGV4dCAqbWFpbl9mYyA9IChBVkhXRnJhbWVzQ29udGV4dCopaW5wdXRfbWFpbi0+aHdfZnJhbWVz X2N0eC0+ZGF0YTsKKyAgICAgICAgQVZIV0ZyYW1lc0NvbnRleHQgKm92ZXJsYXlfZmMgPSAoQVZI V0ZyYW1lc0NvbnRleHQqKWlucHV0X292ZXJsYXktPmh3X2ZyYW1lc19jdHgtPmRhdGE7CisgICAg ICAgIGlmIChtYWluX2ZjLT5zd19mb3JtYXQgIT0gb3ZlcmxheV9mYy0+c3dfZm9ybWF0KSB7Cisg ICAgICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJNaXNtYXRjaGluZyBzdyBmb3Jt YXRzIVxuIik7CisgICAgICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOworICAgICAgICB9 CisKKyAgICAgICAgcy0+b3ZlcmxheV93ID0gaW5wdXRfb3ZlcmxheS0+d2lkdGg7CisgICAgICAg IHMtPm92ZXJsYXlfaCA9IGlucHV0X292ZXJsYXktPmhlaWdodDsKKworICAgICAgICBSRVQoaW5p dF9maWx0ZXIoY3R4KSk7CisgICAgfQorCisgICAgb3V0ID0gZmZfZ2V0X3ZpZGVvX2J1ZmZlcihv dXRsaW5rLCBvdXRsaW5rLT53LCBvdXRsaW5rLT5oKTsKKyAgICBpZiAoIW91dCkgeworICAgICAg ICBlcnIgPSBBVkVSUk9SKEVOT01FTSk7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAg ICBSRVQoZmZfdmtfZmlsdGVyX3Byb2Nlc3NfTmluKCZzLT52a2N0eCwgJnMtPmUsICZzLT5zaGQs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQsIChBVkZyYW1lICpbXSl7IGlu cHV0X21haW4sIGlucHV0X292ZXJsYXkgfSwgMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFZLX05VTExfSEFORExFLCAmcy0+b3B0cywgc2l6ZW9mKHMtPm9wdHMpKSk7CisKKyAg ICBlcnIgPSBhdl9mcmFtZV9jb3B5X3Byb3BzKG91dCwgaW5wdXRfbWFpbik7CisgICAgaWYgKGVy ciA8IDApCisgICAgICAgIGdvdG8gZmFpbDsKKworICAgIHJldHVybiBmZl9maWx0ZXJfZnJhbWUo b3V0bGluaywgb3V0KTsKKworZmFpbDoKKyAgICBhdl9mcmFtZV9mcmVlKCZvdXQpOworICAgIHJl dHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgb3ZlcmxheV92dWxrYW5fY29uZmlnX291dHB1dChB VkZpbHRlckxpbmsgKm91dGxpbmspCit7CisgICAgaW50IGVycjsKKyAgICBBVkZpbHRlckNvbnRl eHQgKmF2Y3R4ID0gb3V0bGluay0+c3JjOworICAgIE92ZXJsYXlWdWxrYW5Db250ZXh0ICpzID0g YXZjdHgtPnByaXY7CisKKyAgICBlcnIgPSBmZl92a19maWx0ZXJfY29uZmlnX291dHB1dChvdXRs aW5rKTsKKyAgICBpZiAoZXJyIDwgMCkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIGVyciA9 IGZmX2ZyYW1lc3luY19pbml0X2R1YWxpbnB1dCgmcy0+ZnMsIGF2Y3R4KTsKKyAgICBpZiAoZXJy IDwgMCkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHJldHVybiBmZl9mcmFtZXN5bmNfY29u ZmlndXJlKCZzLT5mcyk7Cit9CisKK3N0YXRpYyBpbnQgb3ZlcmxheV92dWxrYW5fYWN0aXZhdGUo QVZGaWx0ZXJDb250ZXh0ICphdmN0eCkKK3sKKyAgICBPdmVybGF5VnVsa2FuQ29udGV4dCAqcyA9 IGF2Y3R4LT5wcml2OworCisgICAgcmV0dXJuIGZmX2ZyYW1lc3luY19hY3RpdmF0ZSgmcy0+ZnMp OworfQorCitzdGF0aWMgYXZfY29sZCBpbnQgb3ZlcmxheV92dWxrYW5faW5pdChBVkZpbHRlckNv bnRleHQgKmF2Y3R4KQoreworICAgIE92ZXJsYXlWdWxrYW5Db250ZXh0ICpzID0gYXZjdHgtPnBy aXY7CisKKyAgICBzLT5mcy5vbl9ldmVudCA9ICZvdmVybGF5X3Z1bGthbl9ibGVuZDsKKworICAg IHJldHVybiBmZl92a19maWx0ZXJfaW5pdChhdmN0eCk7Cit9CisKK3N0YXRpYyB2b2lkIG92ZXJs YXlfdnVsa2FuX3VuaW5pdChBVkZpbHRlckNvbnRleHQgKmF2Y3R4KQoreworICAgIE92ZXJsYXlW dWxrYW5Db250ZXh0ICpzID0gYXZjdHgtPnByaXY7CisgICAgRkZWdWxrYW5Db250ZXh0ICp2a2N0 eCA9ICZzLT52a2N0eDsKKworICAgIGZmX3ZrX2V4ZWNfcG9vbF9mcmVlKHZrY3R4LCAmcy0+ZSk7 CisgICAgZmZfdmtfc2hhZGVyX2ZyZWUodmtjdHgsICZzLT5zaGQpOworCisgICAgZmZfdmtfdW5p bml0KCZzLT52a2N0eCk7CisgICAgZmZfZnJhbWVzeW5jX3VuaW5pdCgmcy0+ZnMpOworCisgICAg cy0+aW5pdGlhbGl6ZWQgPSAwOworfQorCisjZGVmaW5lIE9GRlNFVCh4KSBvZmZzZXRvZihPdmVy bGF5VnVsa2FuQ29udGV4dCwgeCkKKyNkZWZpbmUgRkxBR1MgKEFWX09QVF9GTEFHX0ZJTFRFUklO R19QQVJBTSB8IEFWX09QVF9GTEFHX1ZJREVPX1BBUkFNKQorc3RhdGljIGNvbnN0IEFWT3B0aW9u IG92ZXJsYXlfdnVsa2FuX29wdGlvbnNbXSA9IHsKKyAgICB7ICJ4IiwgIlNldCBob3Jpem9udGFs IG9mZnNldCIsIE9GRlNFVChvdmVybGF5X3gpLCBBVl9PUFRfVFlQRV9JTlQsIHsuaTY0ID0gMH0s IDAsIElOVF9NQVgsIC5mbGFncyA9IEZMQUdTIH0sCisgICAgeyAieSIsICJTZXQgdmVydGljYWwg b2Zmc2V0IiwgICBPRkZTRVQob3ZlcmxheV95KSwgQVZfT1BUX1RZUEVfSU5ULCB7Lmk2NCA9IDB9 LCAwLCBJTlRfTUFYLCAuZmxhZ3MgPSBGTEFHUyB9LAorICAgIHsgTlVMTCB9LAorfTsKKworQVZG SUxURVJfREVGSU5FX0NMQVNTKG92ZXJsYXlfdnVsa2FuKTsKKworc3RhdGljIGNvbnN0IEFWRmls dGVyUGFkIG92ZXJsYXlfdnVsa2FuX2lucHV0c1tdID0geworICAgIHsKKyAgICAgICAgLm5hbWUg ICAgICAgICA9ICJtYWluIiwKKyAgICAgICAgLnR5cGUgICAgICAgICA9IEFWTUVESUFfVFlQRV9W SURFTywKKyAgICAgICAgLmNvbmZpZ19wcm9wcyA9ICZmZl92a19maWx0ZXJfY29uZmlnX2lucHV0 LAorICAgIH0sCisgICAgeworICAgICAgICAubmFtZSAgICAgICAgID0gIm92ZXJsYXkiLAorICAg ICAgICAudHlwZSAgICAgICAgID0gQVZNRURJQV9UWVBFX1ZJREVPLAorICAgICAgICAuY29uZmln X3Byb3BzID0gJmZmX3ZrX2ZpbHRlcl9jb25maWdfaW5wdXQsCisgICAgfSwKK307CisKK3N0YXRp YyBjb25zdCBBVkZpbHRlclBhZCBvdmVybGF5X3Z1bGthbl9vdXRwdXRzW10gPSB7CisgICAgewor ICAgICAgICAubmFtZSA9ICJkZWZhdWx0IiwKKyAgICAgICAgLnR5cGUgPSBBVk1FRElBX1RZUEVf VklERU8sCisgICAgICAgIC5jb25maWdfcHJvcHMgPSAmb3ZlcmxheV92dWxrYW5fY29uZmlnX291 dHB1dCwKKyAgICB9LAorfTsKKworY29uc3QgRkZGaWx0ZXIgZmZfdmZfb3ZlcmxheV92dWxrYW4g PSB7CisgICAgLnAubmFtZSAgICAgICAgID0gIm92ZXJsYXlfdnVsa2FuIiwKKyAgICAucC5kZXNj cmlwdGlvbiAgPSBOVUxMX0lGX0NPTkZJR19TTUFMTCgiT3ZlcmxheSBhIHNvdXJjZSBvbiB0b3Ag b2YgYW5vdGhlciIpLAorICAgIC5wLnByaXZfY2xhc3MgICA9ICZvdmVybGF5X3Z1bGthbl9jbGFz cywKKyAgICAucC5mbGFncyAgICAgICAgPSBBVkZJTFRFUl9GTEFHX0hXREVWSUNFLAorICAgIC5w cml2X3NpemUgICAgICA9IHNpemVvZihPdmVybGF5VnVsa2FuQ29udGV4dCksCisgICAgLmluaXQg ICAgICAgICAgID0gJm92ZXJsYXlfdnVsa2FuX2luaXQsCisgICAgLnVuaW5pdCAgICAgICAgID0g Jm92ZXJsYXlfdnVsa2FuX3VuaW5pdCwKKyAgICAuYWN0aXZhdGUgICAgICAgPSAmb3ZlcmxheV92 dWxrYW5fYWN0aXZhdGUsCisgICAgRklMVEVSX0lOUFVUUyhvdmVybGF5X3Z1bGthbl9pbnB1dHMp LAorICAgIEZJTFRFUl9PVVRQVVRTKG92ZXJsYXlfdnVsa2FuX291dHB1dHMpLAorICAgIEZJTFRF Ul9TSU5HTEVfUElYRk1UKEFWX1BJWF9GTVRfVlVMS0FOKSwKKyAgICAuZmxhZ3NfaW50ZXJuYWwg PSBGRl9GSUxURVJfRkxBR19IV0ZSQU1FX0FXQVJFLAorfTsKLS0gCjIuNDkuMQoKCkZyb20gODQ1 N2IxY2RjNDBlN2ZhMDMyODBkZTg1NmI2YzZlYTUyNjMzMWI3ZSBNb24gU2VwIDE3IDAwOjAwOjAw IDIwMDEKRnJvbTogSmFtYWlrYTEgPGx1a2FzemN6MThAd3AucGw+CkRhdGU6IFdlZCwgMyBTZXAg MjAyNSAxMjo1OTo1MiArMDAwMApTdWJqZWN0OiBbUEFUQ0ggMDIxLzExOF0gQ2hhbmdpbmcgdnVs a2FuIGZpbGUgZGlyZWN0b3J5CgotLS0KIGxpYmF2ZmlsdGVyL3ZmX3NjYWxlX3Z1bGthbi5jIHwg NTA4IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCA1 MDggZGVsZXRpb25zKC0pCiBkZWxldGUgbW9kZSAxMDA2NDQgbGliYXZmaWx0ZXIvdmZfc2NhbGVf dnVsa2FuLmMKCmRpZmYgLS1naXQgYS9saWJhdmZpbHRlci92Zl9zY2FsZV92dWxrYW4uYyBiL2xp YmF2ZmlsdGVyL3ZmX3NjYWxlX3Z1bGthbi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCBjMjNjZmUyNjJmLi4wMDAwMDAwMDAwCi0tLSBhL2xpYmF2ZmlsdGVyL3ZmX3NjYWxlX3Z1bGth bi5jCisrKyAvZGV2L251bGwKQEAgLTEsNTA4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMp IEx5bm5lCi0gKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgotICoKLSAqIEZGbXBl ZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1v ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK LSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247 IGVpdGhlcgotICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv bikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRo ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklM SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAq IExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICog WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs IFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0 aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0 LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQotICovCi0KLSNpbmNsdWRl ICJsaWJhdnV0aWwvcmFuZG9tX3NlZWQuaCIKLSNpbmNsdWRlICJsaWJhdnV0aWwvb3B0LmgiCi0j aW5jbHVkZSAibGliYXZ1dGlsL3Z1bGthbl9zcGlydi5oIgotI2luY2x1ZGUgInZ1bGthbl9maWx0 ZXIuaCIKLSNpbmNsdWRlICJzY2FsZV9ldmFsLmgiCi0jaW5jbHVkZSAiZmlsdGVycy5oIgotI2lu Y2x1ZGUgImNvbG9yc3BhY2UuaCIKLSNpbmNsdWRlICJ2aWRlby5oIgotCi1leHRlcm4gY29uc3Qg Y2hhciAqZmZfc291cmNlX2RlYmF5ZXJfY29tcDsKLQotZW51bSBTY2FsZXJGdW5jIHsKLSAgICBG X0JJTElORUFSID0gMCwKLSAgICBGX05FQVJFU1QsCi0KLSAgICBGX05CLAotfTsKLQotZW51bSBE ZWJheWVyRnVuYyB7Ci0gICAgREJfQklMSU5FQVIgPSAwLAotICAgIERCX0JJTElORUFSX0hRLAot Ci0gICAgREJfTkIsCi19OwotCi10eXBlZGVmIHN0cnVjdCBTY2FsZVZ1bGthbkNvbnRleHQgewot ICAgIEZGVnVsa2FuQ29udGV4dCB2a2N0eDsKLQotICAgIGludCBpbml0aWFsaXplZDsKLSAgICBG RlZrRXhlY1Bvb2wgZTsKLSAgICBBVlZ1bGthbkRldmljZVF1ZXVlRmFtaWx5ICpxZjsKLSAgICBG RlZ1bGthblNoYWRlciBzaGQ7Ci0gICAgVmtTYW1wbGVyIHNhbXBsZXI7Ci0KLSAgICAvKiBQdXNo IGNvbnN0YW50cyAvIG9wdGlvbnMgKi8KLSAgICBzdHJ1Y3QgewotICAgICAgICBmbG9hdCB5dXZf bWF0cml4WzRdWzRdOwotICAgICAgICBpbnQgY3JvcF94OwotICAgICAgICBpbnQgY3JvcF95Owot ICAgICAgICBpbnQgY3JvcF93OwotICAgICAgICBpbnQgY3JvcF9oOwotICAgIH0gb3B0czsKLQot ICAgIGNoYXIgKm91dF9mb3JtYXRfc3RyaW5nOwotICAgIGNoYXIgKndfZXhwcjsKLSAgICBjaGFy ICpoX2V4cHI7Ci0KLSAgICBlbnVtIFNjYWxlckZ1bmMgc2NhbGVyOwotICAgIGVudW0gQVZDb2xv clJhbmdlIG91dF9yYW5nZTsKLSAgICBlbnVtIERlYmF5ZXJGdW5jIGRlYmF5ZXI7Ci19IFNjYWxl VnVsa2FuQ29udGV4dDsKLQotc3RhdGljIGNvbnN0IGNoYXIgc2NhbGVfYmlsaW5lYXJbXSA9IHsK LSAgICBDKDAsIHZlYzQgc2NhbGVfYmlsaW5lYXIoaW50IGlkeCwgaXZlYzIgcG9zLCB2ZWMyIGNy b3BfcmFuZ2UsIHZlYzIgY3JvcF9vZmYpKQotICAgIEMoMCwgeyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCi0gICAg QygxLCAgICAgdmVjMiBucG9zID0gKHZlYzIocG9zKSArIDAuNWYpIC8gaW1hZ2VTaXplKG91dHB1 dF9pbWdbaWR4XSk7ICAgICAgICkKLSAgICBDKDEsICAgICBucG9zICo9IGNyb3BfcmFuZ2U7ICAg IC8qIFJlZHVjZSB0aGUgcmFuZ2UgKi8gICAgICAgICAgICAgICAgICAgICAgKQotICAgIEMoMSwg ICAgIG5wb3MgKz0gY3JvcF9vZmY7ICAgICAgLyogT2Zmc2V0IHRoZSBzdGFydCAqLyAgICAgICAg ICAgICAgICAgICAgICApCi0gICAgQygxLCAgICAgcmV0dXJuIHRleHR1cmUoaW5wdXRfaW1nW2lk eF0sIG5wb3MpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKLSAgICBDKDAsIH0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKQotfTsKLQotc3RhdGljIGNvbnN0IGNoYXIgcmdiMnl1dltdID0gewotICAgIEMo MCwgdmVjNCByZ2IyeXV2KHZlYzQgc3JjLCBpbnQgZnVsbHJhbmdlKSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICApCi0gICAgQygwLCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKLSAgICBDKDEsICAg ICBzcmMgKj0geXV2X21hdHJpeDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKQotICAgIEMoMSwgICAgIGlmIChmdWxscmFuZ2UgPT0gMSkgeyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCi0gICAgQygyLCAgICAgICAg IHNyYyArPSB2ZWM0KDAuMCwgMC41LCAwLjUsIDAuMCk7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICkKLSAgICBDKDEsICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQotICAgIEMoMiwgICAgICAgICBzcmMg Kj0gdmVjNCgyMTkuMCAvIDI1NS4wLCAyMjQuMCAvIDI1NS4wLCAyMjQuMCAvIDI1NS4wLCAxLjAp OyApCi0gICAgQygyLCAgICAgICAgIHNyYyArPSB2ZWM0KDE2LjAgLyAyNTUuMCwgMTI4LjAgLyAy NTUuMCwgMTI4LjAgLyAyNTUuMCwgMC4wKTsgICkKLSAgICBDKDEsICAgICB9ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQot ICAgIEMoMSwgICAgIHJldHVybiBzcmM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICApCi0gICAgQygwLCB9ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKLX07Ci0K LXN0YXRpYyBjb25zdCBjaGFyIHdyaXRlX252MTJbXSA9IHsKLSAgICBDKDAsIHZvaWQgd3JpdGVf bnYxMih2ZWM0IHNyYywgaXZlYzIgcG9zKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKQotICAgIEMoMCwgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCi0gICAgQygxLCAgICAgaW1hZ2VTdG9yZShv dXRwdXRfaW1nWzBdLCBwb3MsIHZlYzQoc3JjLnIsIDAuMCwgMC4wLCAwLjApKTsgICAgICAgICkK LSAgICBDKDEsICAgICBwb3MgLz0gaXZlYzIoMik7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKQotICAgIEMoMSwgICAgIGltYWdlU3RvcmUob3V0cHV0 X2ltZ1sxXSwgcG9zLCB2ZWM0KHNyYy5nLCBzcmMuYiwgMC4wLCAwLjApKTsgICAgICApCi0gICAg QygwLCB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICkKLX07Ci0KLXN0YXRpYyBjb25zdCBjaGFyIHdyaXRlXzQyMFtd ID0gewotICAgIEMoMCwgdm9pZCB3cml0ZV80MjAodmVjNCBzcmMsIGl2ZWMyIHBvcykgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCi0gICAgQygwLCB7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkK LSAgICBDKDEsICAgICBpbWFnZVN0b3JlKG91dHB1dF9pbWdbMF0sIHBvcywgdmVjNChzcmMuciwg MC4wLCAwLjAsIDAuMCkpOyAgICAgICAgKQotICAgIEMoMSwgICAgIHBvcyAvPSBpdmVjMigyKTsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCi0gICAg QygxLCAgICAgaW1hZ2VTdG9yZShvdXRwdXRfaW1nWzFdLCBwb3MsIHZlYzQoc3JjLmcsIDAuMCwg MC4wLCAwLjApKTsgICAgICAgICkKLSAgICBDKDEsICAgICBpbWFnZVN0b3JlKG91dHB1dF9pbWdb Ml0sIHBvcywgdmVjNChzcmMuYiwgMC4wLCAwLjAsIDAuMCkpOyAgICAgICAgKQotICAgIEMoMCwg fSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICApCi19OwotCi1zdGF0aWMgY29uc3QgY2hhciB3cml0ZV80NDRbXSA9IHsK LSAgICBDKDAsIHZvaWQgd3JpdGVfNDQ0KHZlYzQgc3JjLCBpdmVjMiBwb3MpICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKQotICAgIEMoMCwgeyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCi0gICAg QygxLCAgICAgaW1hZ2VTdG9yZShvdXRwdXRfaW1nWzBdLCBwb3MsIHZlYzQoc3JjLnIsIDAuMCwg MC4wLCAwLjApKTsgICAgICAgICkKLSAgICBDKDEsICAgICBpbWFnZVN0b3JlKG91dHB1dF9pbWdb MV0sIHBvcywgdmVjNChzcmMuZywgMC4wLCAwLjAsIDAuMCkpOyAgICAgICAgKQotICAgIEMoMSwg ICAgIGltYWdlU3RvcmUob3V0cHV0X2ltZ1syXSwgcG9zLCB2ZWM0KHNyYy5iLCAwLjAsIDAuMCwg MC4wKSk7ICAgICAgICApCi0gICAgQygwLCB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKLX07Ci0KLXN0YXRpYyBp bnQgaW5pdF9zY2FsZV9zaGFkZXIoQVZGaWx0ZXJDb250ZXh0ICpjdHgsIEZGVnVsa2FuU2hhZGVy ICpzaGQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZGVnVsa2FuRGVzY3JpcHRvclNl dEJpbmRpbmcgKmRlc2MsIEFWRnJhbWUgKmluKQotewotICAgIFNjYWxlVnVsa2FuQ29udGV4dCAq cyA9IGN0eC0+cHJpdjsKLSAgICBHTFNMRCggICBzY2FsZV9iaWxpbmVhciAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLQotICAgIGlmIChzLT52a2N0 eC5vdXRwdXRfZm9ybWF0ICE9IHMtPnZrY3R4LmlucHV0X2Zvcm1hdCkgewotICAgICAgICBHTFNM RCggICByZ2IyeXV2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICApOwotICAgIH0KLQotICAgIHN3aXRjaCAocy0+dmtjdHgub3V0cHV0X2Zvcm1hdCkg ewotICAgIGNhc2UgQVZfUElYX0ZNVF9OVjEyOiAgICBHTFNMRCh3cml0ZV9udjEyKTsgYnJlYWs7 Ci0gICAgY2FzZSBBVl9QSVhfRk1UX1lVVjQyMFA6IEdMU0xEKCB3cml0ZV80MjApOyBicmVhazsK LSAgICBjYXNlIEFWX1BJWF9GTVRfWVVWNDQ0UDogR0xTTEQoIHdyaXRlXzQ0NCk7IGJyZWFrOwot ICAgIGRlZmF1bHQ6IGJyZWFrOwotICAgIH0KLQotICAgIEdMU0xDKDAsIHZvaWQgbWFpbigpICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAg IEdMU0xDKDAsIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICApOwotICAgIEdMU0xDKDEsICAgICBpdmVjMiBzaXplOyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIEdMU0xDKDEs ICAgICBpdmVjMiBwb3MgPSBpdmVjMihnbF9HbG9iYWxJbnZvY2F0aW9uSUQueHkpOyAgICAgICAg ICAgICAgICApOwotICAgIEdMU0xGKDEsICAgICB2ZWMyIGluX2QgPSB2ZWMyKCVpLCAlaSk7ICAg ICAgICAgICAgICxpbi0+d2lkdGgsIGluLT5oZWlnaHQpOwotICAgIEdMU0xDKDEsICAgICB2ZWMy IGNfciA9IHZlYzIoY3JvcF93LCBjcm9wX2gpIC8gaW5fZDsgICAgICAgICAgICAgICAgICAgICAp OwotICAgIEdMU0xDKDEsICAgICB2ZWMyIGNfbyA9IHZlYzIoY3JvcF94LCBjcm9wX3kpIC8gaW5f ZDsgICAgICAgICAgICAgICAgICAgICApOwotICAgIEdMU0xDKDAsICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotCi0gICAg aWYgKHMtPnZrY3R4Lm91dHB1dF9mb3JtYXQgPT0gcy0+dmtjdHguaW5wdXRfZm9ybWF0KSB7Ci0g ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZGVzY1sxXS5lbGVtczsgaSsrKSB7Ci0gICAgICAg ICAgICBHTFNMRigxLCAgc2l6ZSA9IGltYWdlU2l6ZShvdXRwdXRfaW1nWyVpXSk7ICAgICAgICAg ICAgICAgICAgICAsaSk7Ci0gICAgICAgICAgICBHTFNMQygxLCAgaWYgKElTX1dJVEhJTihwb3Ms IHNpemUpKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICBzd2l0 Y2ggKHMtPnNjYWxlcikgewotICAgICAgICAgICAgY2FzZSBGX05FQVJFU1Q6Ci0gICAgICAgICAg ICBjYXNlIEZfQklMSU5FQVI6Ci0gICAgICAgICAgICAgICAgR0xTTEYoMiwgdmVjNCByZXMgPSBz Y2FsZV9iaWxpbmVhciglaSwgcG9zLCBjX3IsIGNfbyk7ICAgICAsaSk7Ci0gICAgICAgICAgICAg ICAgR0xTTEYoMiwgaW1hZ2VTdG9yZShvdXRwdXRfaW1nWyVpXSwgcG9zLCByZXMpOyAgICAgICAg ICAgICAsaSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9OwotICAgICAg ICAgICAgR0xTTEMoMSwgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICApOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgR0xTTEMo MSwgdmVjNCByZXMgPSBzY2FsZV9iaWxpbmVhcigwLCBwb3MsIGNfciwgY19vKTsgICAgICAgICAg ICAgICAgKTsKLSAgICAgICAgR0xTTEYoMSwgcmVzID0gcmdiMnl1dihyZXMsICVpKTsgICAgLHMt Pm91dF9yYW5nZSA9PSBBVkNPTF9SQU5HRV9KUEVHKTsKLSAgICAgICAgc3dpdGNoIChzLT52a2N0 eC5vdXRwdXRfZm9ybWF0KSB7Ci0gICAgICAgIGNhc2UgQVZfUElYX0ZNVF9OVjEyOiAgICBHTFNM QygxLCB3cml0ZV9udjEyKHJlcywgcG9zKTsgKTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgQVZfUElY X0ZNVF9ZVVY0MjBQOiBHTFNMQygxLCAgd3JpdGVfNDIwKHJlcywgcG9zKTsgKTsgYnJlYWs7Ci0g ICAgICAgIGNhc2UgQVZfUElYX0ZNVF9ZVVY0NDRQOiBHTFNMQygxLCAgd3JpdGVfNDQ0KHJlcywg cG9zKTsgKTsgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6IHJldHVybiBBVkVSUk9SKEVJTlZBTCk7 Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBHTFNMQygwLCB9ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLQotICAgIGlmIChz LT52a2N0eC5vdXRwdXRfZm9ybWF0ICE9IHMtPnZrY3R4LmlucHV0X2Zvcm1hdCkgewotICAgICAg ICBjb25zdCBBVkx1bWFDb2VmZmljaWVudHMgKmxjb2VmZnM7Ci0gICAgICAgIGRvdWJsZSB0bXBf bWF0WzNdWzNdOwotCi0gICAgICAgIGxjb2VmZnMgPSBhdl9jc3BfbHVtYV9jb2VmZnNfZnJvbV9h dmNzcChpbi0+Y29sb3JzcGFjZSk7Ci0gICAgICAgIGlmICghbGNvZWZmcykgewotICAgICAgICAg ICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiVW5zdXBwb3J0ZWQgY29sb3JzcGFjZVxuIik7 Ci0gICAgICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOwotICAgICAgICB9Ci0KLSAgICAg ICAgZmZfZmlsbF9yZ2IyeXV2X3RhYmxlKGxjb2VmZnMsIHRtcF9tYXQpOwotCi0gICAgICAgIGZv ciAoaW50IHkgPSAwOyB5IDwgMzsgeSsrKQotICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHgg PCAzOyB4KyspCi0gICAgICAgICAgICAgICAgcy0+b3B0cy55dXZfbWF0cml4W3hdW3ldID0gdG1w X21hdFt4XVt5XTsKLSAgICAgICAgcy0+b3B0cy55dXZfbWF0cml4WzNdWzNdID0gMS4wOwotICAg IH0KLQotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGluaXRfZGViYXllcl9zaGFkZXIo U2NhbGVWdWxrYW5Db250ZXh0ICpzLCBGRlZ1bGthblNoYWRlciAqc2hkLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEZGVnVsa2FuRGVzY3JpcHRvclNldEJpbmRpbmcgKmRlc2MsIEFW RnJhbWUgKmluKQotewotICAgIEdMU0xEKGZmX3NvdXJjZV9kZWJheWVyX2NvbXApOwotCi0gICAg R0xTTEMoMCwgdm9pZCBtYWluKHZvaWQpKTsKLSAgICBHTFNMQygwLCB7ICAgICAgICAgICAgICAp OwotICAgIGlmIChzLT5kZWJheWVyID09IERCX0JJTElORUFSKQotICAgICAgICBHTFNMQygxLCBk ZWJheWVyX2JpbGluZWFyKCk7KTsKLSAgICBlbHNlIGlmIChzLT5kZWJheWVyID09IERCX0JJTElO RUFSX0hRKQotICAgICAgICBHTFNMQygxLCBkZWJheWVyX2JpbGluZWFyX2hxKCk7KTsKLSAgICBH TFNMQygwLCB9ICAgICAgICAgICAgICApOwotCi0gICAgc2hkLT5sZ19zaXplWzBdIDw8PSAxOwot ICAgIHNoZC0+bGdfc2l6ZVsxXSA8PD0gMTsKLQotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMg YXZfY29sZCBpbnQgaW5pdF9maWx0ZXIoQVZGaWx0ZXJDb250ZXh0ICpjdHgsIEFWRnJhbWUgKmlu KQotewotICAgIGludCBlcnI7Ci0gICAgdWludDhfdCAqc3B2X2RhdGE7Ci0gICAgc2l6ZV90IHNw dl9sZW47Ci0gICAgdm9pZCAqc3B2X29wYXF1ZSA9IE5VTEw7Ci0gICAgVmtGaWx0ZXIgc2FtcGxl cl9tb2RlOwotICAgIFNjYWxlVnVsa2FuQ29udGV4dCAqcyA9IGN0eC0+cHJpdjsKLSAgICBGRlZ1 bGthbkNvbnRleHQgKnZrY3R4ID0gJnMtPnZrY3R4OwotICAgIEZGVnVsa2FuU2hhZGVyICpzaGQg PSAmcy0+c2hkOwotICAgIEZGVmtTUElSVkNvbXBpbGVyICpzcHY7Ci0gICAgRkZWdWxrYW5EZXNj cmlwdG9yU2V0QmluZGluZyAqZGVzYzsKLQotICAgIGludCBkZWJheWVyID0gcy0+dmtjdHguaW5w dXRfZm9ybWF0ID09IEFWX1BJWF9GTVRfQkFZRVJfUkdHQjE2OwotICAgIGludCBpbl9wbGFuZXMg PSBhdl9waXhfZm10X2NvdW50X3BsYW5lcyhzLT52a2N0eC5pbnB1dF9mb3JtYXQpOwotCi0gICAg c3dpdGNoIChzLT5zY2FsZXIpIHsKLSAgICBjYXNlIEZfTkVBUkVTVDoKLSAgICAgICAgc2FtcGxl cl9tb2RlID0gVktfRklMVEVSX05FQVJFU1Q7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRl9C SUxJTkVBUjoKLSAgICAgICAgc2FtcGxlcl9tb2RlID0gVktfRklMVEVSX0xJTkVBUjsKLSAgICAg ICAgYnJlYWs7Ci0gICAgfTsKLQotICAgIHNwdiA9IGZmX3ZrX3NwaXJ2X2luaXQoKTsKLSAgICBp ZiAoIXNwdikgewotICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJVbmFibGUgdG8g aW5pdGlhbGl6ZSBTUElSLVYgY29tcGlsZXIhXG4iKTsKLSAgICAgICAgcmV0dXJuIEFWRVJST1Jf RVhURVJOQUw7Ci0gICAgfQotCi0gICAgcy0+cWYgPSBmZl92a19xZl9maW5kKHZrY3R4LCBWS19R VUVVRV9DT01QVVRFX0JJVCwgMCk7Ci0gICAgaWYgKCFzLT5xZikgewotICAgICAgICBhdl9sb2co Y3R4LCBBVl9MT0dfRVJST1IsICJEZXZpY2UgaGFzIG5vIGNvbXB1dGUgcXVldWVzXG4iKTsKLSAg ICAgICAgZXJyID0gQVZFUlJPUihFTk9UU1VQKTsKLSAgICAgICAgZ290byBmYWlsOwotICAgIH0K LQotICAgIFJFVChmZl92a19leGVjX3Bvb2xfaW5pdCh2a2N0eCwgcy0+cWYsICZzLT5lLCBzLT5x Zi0+bnVtKjQsIDAsIDAsIDAsIE5VTEwpKTsKLQotICAgIGlmICghZGViYXllcikKLSAgICAgICAg UkVUKGZmX3ZrX2luaXRfc2FtcGxlcih2a2N0eCwgJnMtPnNhbXBsZXIsIDAsIHNhbXBsZXJfbW9k ZSkpOwotCi0gICAgUkVUKGZmX3ZrX3NoYWRlcl9pbml0KHZrY3R4LCAmcy0+c2hkLCAic2NhbGUi LAotICAgICAgICAgICAgICAgICAgICAgICAgICBWS19TSEFERVJfU1RBR0VfQ09NUFVURV9CSVQs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDAsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgIDMyLCAzMiwgMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgMCkpOwotCi0gICAg ZGVzYyA9IChGRlZ1bGthbkRlc2NyaXB0b3JTZXRCaW5kaW5nIFtdKSB7Ci0gICAgICAgIHsKLSAg ICAgICAgICAgIC5uYW1lICAgICAgID0gImlucHV0X2ltZyIsCi0gICAgICAgICAgICAudHlwZSAg ICAgICA9IGRlYmF5ZXIgPwotICAgICAgICAgICAgICAgICAgICAgICAgICBWS19ERVNDUklQVE9S X1RZUEVfU1RPUkFHRV9JTUFHRSA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIFZLX0RFU0NS SVBUT1JfVFlQRV9DT01CSU5FRF9JTUFHRV9TQU1QTEVSLAotICAgICAgICAgICAgLm1lbV9sYXlv dXQgPSBkZWJheWVyID8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgZmZfdmtfc2hhZGVyX3Jl cF9mbXQocy0+dmtjdHguaW5wdXRfZm9ybWF0LCBGRl9WS19SRVBfRkxPQVQpIDoKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgTlVMTCwKLSAgICAgICAgICAgIC5tZW1fcXVhbGkgID0gInJlYWRv bmx5IiwKLSAgICAgICAgICAgIC5kaW1lbnNpb25zID0gMiwKLSAgICAgICAgICAgIC5lbGVtcyAg ICAgID0gaW5fcGxhbmVzLAotICAgICAgICAgICAgLnN0YWdlcyAgICAgPSBWS19TSEFERVJfU1RB R0VfQ09NUFVURV9CSVQsCi0gICAgICAgICAgICAuc2FtcGxlcnMgICA9IERVUF9TQU1QTEVSKHMt PnNhbXBsZXIpLAotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAubmFtZSAgICAg ICA9ICJvdXRwdXRfaW1nIiwKLSAgICAgICAgICAgIC50eXBlICAgICAgID0gVktfREVTQ1JJUFRP Ul9UWVBFX1NUT1JBR0VfSU1BR0UsCi0gICAgICAgICAgICAubWVtX2xheW91dCA9IGZmX3ZrX3No YWRlcl9yZXBfZm10KHMtPnZrY3R4Lm91dHB1dF9mb3JtYXQsIEZGX1ZLX1JFUF9GTE9BVCksCi0g ICAgICAgICAgICAubWVtX3F1YWxpICA9ICJ3cml0ZW9ubHkiLAotICAgICAgICAgICAgLmRpbWVu c2lvbnMgPSAyLAotICAgICAgICAgICAgLmVsZW1zICAgICAgPSBhdl9waXhfZm10X2NvdW50X3Bs YW5lcyhzLT52a2N0eC5vdXRwdXRfZm9ybWF0KSwKLSAgICAgICAgICAgIC5zdGFnZXMgICAgID0g VktfU0hBREVSX1NUQUdFX0NPTVBVVEVfQklULAotICAgICAgICB9LAotICAgIH07Ci0KLSAgICBS RVQoZmZfdmtfc2hhZGVyX2FkZF9kZXNjcmlwdG9yX3NldCh2a2N0eCwgJnMtPnNoZCwgZGVzYywg MiwgMCwgMCkpOwotCi0gICAgR0xTTEMoMCwgbGF5b3V0KHB1c2hfY29uc3RhbnQsIHN0ZDQzMCkg dW5pZm9ybSBwdXNoQ29uc3RhbnRzIHsgICAgICAgICk7Ci0gICAgR0xTTEMoMSwgICAgbWF0NCB5 dXZfbWF0cml4OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0g ICAgR0xTTEMoMSwgICAgaW50IGNyb3BfeDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICk7Ci0gICAgR0xTTEMoMSwgICAgaW50IGNyb3BfeTsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgR0xTTEMoMSwgICAg aW50IGNyb3BfdzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICk7Ci0gICAgR0xTTEMoMSwgICAgaW50IGNyb3BfaDsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgR0xTTEMoMCwgfTsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgR0xTTEMo MCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICk7Ci0KLSAgICBmZl92a19zaGFkZXJfYWRkX3B1c2hfY29uc3QoJnMtPnNoZCwgMCwg c2l6ZW9mKHMtPm9wdHMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19TSEFE RVJfU1RBR0VfQ09NUFVURV9CSVQpOwotCi0gICAgaWYgKGRlYmF5ZXIpCi0gICAgICAgIGVyciA9 IGluaXRfZGViYXllcl9zaGFkZXIocywgc2hkLCBkZXNjLCBpbik7Ci0gICAgZWxzZQotICAgICAg ICBlcnIgPSBpbml0X3NjYWxlX3NoYWRlcihjdHgsIHNoZCwgZGVzYywgaW4pOwotICAgIGlmIChl cnIgPCAwKQotICAgICAgICBnb3RvIGZhaWw7Ci0KLSAgICBSRVQoc3B2LT5jb21waWxlX3NoYWRl cih2a2N0eCwgc3B2LCBzaGQsICZzcHZfZGF0YSwgJnNwdl9sZW4sICJtYWluIiwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAmc3B2X29wYXF1ZSkpOwotICAgIFJFVChmZl92a19zaGFkZXJf bGluayh2a2N0eCwgc2hkLCBzcHZfZGF0YSwgc3B2X2xlbiwgIm1haW4iKSk7Ci0KLSAgICBSRVQo ZmZfdmtfc2hhZGVyX3JlZ2lzdGVyX2V4ZWModmtjdHgsICZzLT5lLCAmcy0+c2hkKSk7Ci0KLSAg ICBzLT5pbml0aWFsaXplZCA9IDE7Ci0KLWZhaWw6Ci0gICAgaWYgKHNwdl9vcGFxdWUpCi0gICAg ICAgIHNwdi0+ZnJlZV9zaGFkZXIoc3B2LCAmc3B2X29wYXF1ZSk7Ci0gICAgaWYgKHNwdikKLSAg ICAgICAgc3B2LT51bmluaXQoJnNwdik7Ci0KLSAgICByZXR1cm4gZXJyOwotfQotCi1zdGF0aWMg aW50IHNjYWxlX3Z1bGthbl9maWx0ZXJfZnJhbWUoQVZGaWx0ZXJMaW5rICpsaW5rLCBBVkZyYW1l ICppbikKLXsKLSAgICBpbnQgZXJyOwotICAgIEFWRmlsdGVyQ29udGV4dCAqY3R4ID0gbGluay0+ ZHN0OwotICAgIFNjYWxlVnVsa2FuQ29udGV4dCAqcyA9IGN0eC0+cHJpdjsKLSAgICBBVkZpbHRl ckxpbmsgKm91dGxpbmsgPSBjdHgtPm91dHB1dHNbMF07Ci0KLSAgICBBVkZyYW1lICpvdXQgPSBm Zl9nZXRfdmlkZW9fYnVmZmVyKG91dGxpbmssIG91dGxpbmstPncsIG91dGxpbmstPmgpOwotICAg IGlmICghb3V0KSB7Ci0gICAgICAgIGVyciA9IEFWRVJST1IoRU5PTUVNKTsKLSAgICAgICAgZ290 byBmYWlsOwotICAgIH0KLQotICAgIGlmICghcy0+aW5pdGlhbGl6ZWQpCi0gICAgICAgIFJFVChp bml0X2ZpbHRlcihjdHgsIGluKSk7Ci0KLSAgICBzLT5vcHRzLmNyb3BfeCA9IGluLT5jcm9wX2xl ZnQ7Ci0gICAgcy0+b3B0cy5jcm9wX3kgPSBpbi0+Y3JvcF90b3A7Ci0gICAgcy0+b3B0cy5jcm9w X3cgPSBpbi0+d2lkdGggLSAoaW4tPmNyb3BfbGVmdCArIGluLT5jcm9wX3JpZ2h0KTsKLSAgICBz LT5vcHRzLmNyb3BfaCA9IGluLT5oZWlnaHQgLSAoaW4tPmNyb3BfdG9wICsgaW4tPmNyb3BfYm90 dG9tKTsKLQotICAgIFJFVChmZl92a19maWx0ZXJfcHJvY2Vzc19zaW1wbGUoJnMtPnZrY3R4LCAm cy0+ZSwgJnMtPnNoZCwgb3V0LCBpbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHMtPnNhbXBsZXIsICZzLT5vcHRzLCBzaXplb2Yocy0+b3B0cykpKTsKLQotICAgIGVyciA9 IGF2X2ZyYW1lX2NvcHlfcHJvcHMob3V0LCBpbik7Ci0gICAgaWYgKGVyciA8IDApCi0gICAgICAg IGdvdG8gZmFpbDsKLQotICAgIGlmIChvdXQtPndpZHRoICE9IGluLT53aWR0aCB8fCBvdXQtPmhl aWdodCAhPSBpbi0+aGVpZ2h0KSB7Ci0gICAgICAgIGF2X2ZyYW1lX3NpZGVfZGF0YV9yZW1vdmVf YnlfcHJvcHMoJm91dC0+c2lkZV9kYXRhLCAmb3V0LT5uYl9zaWRlX2RhdGEsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVZfU0lERV9EQVRBX1BST1BfU0laRV9E RVBFTkRFTlQpOwotICAgIH0KLQotICAgIGlmIChzLT5vdXRfcmFuZ2UgIT0gQVZDT0xfUkFOR0Vf VU5TUEVDSUZJRUQpCi0gICAgICAgIG91dC0+Y29sb3JfcmFuZ2UgPSBzLT5vdXRfcmFuZ2U7Ci0g ICAgaWYgKHMtPnZrY3R4Lm91dHB1dF9mb3JtYXQgIT0gcy0+dmtjdHguaW5wdXRfZm9ybWF0KQot ICAgICAgICBvdXQtPmNocm9tYV9sb2NhdGlvbiA9IEFWQ0hST01BX0xPQ19UT1BMRUZUOwotCi0g ICAgYXZfZnJhbWVfZnJlZSgmaW4pOwotCi0gICAgcmV0dXJuIGZmX2ZpbHRlcl9mcmFtZShvdXRs aW5rLCBvdXQpOwotCi1mYWlsOgotICAgIGF2X2ZyYW1lX2ZyZWUoJmluKTsKLSAgICBhdl9mcmFt ZV9mcmVlKCZvdXQpOwotICAgIHJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgc2NhbGVfdnVs a2FuX2NvbmZpZ19vdXRwdXQoQVZGaWx0ZXJMaW5rICpvdXRsaW5rKQotewotICAgIGludCBlcnI7 Ci0gICAgQVZGaWx0ZXJDb250ZXh0ICphdmN0eCA9IG91dGxpbmstPnNyYzsKLSAgICBTY2FsZVZ1 bGthbkNvbnRleHQgKnMgID0gYXZjdHgtPnByaXY7Ci0gICAgRkZWdWxrYW5Db250ZXh0ICp2a2N0 eCA9ICZzLT52a2N0eDsKLSAgICBBVkZpbHRlckxpbmsgKmlubGluayAgID0gb3V0bGluay0+c3Jj LT5pbnB1dHNbMF07Ci0KLSAgICBlcnIgPSBmZl9zY2FsZV9ldmFsX2RpbWVuc2lvbnMocywgcy0+ d19leHByLCBzLT5oX2V4cHIsIGlubGluaywgb3V0bGluaywKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJnZrY3R4LT5vdXRwdXRfd2lkdGgsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICZ2a2N0eC0+b3V0cHV0X2hlaWdodCk7Ci0gICAgaWYgKGVyciA8IDAp Ci0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICBmZl9zY2FsZV9hZGp1c3RfZGltZW5zaW9ucyhp bmxpbmssICZ2a2N0eC0+b3V0cHV0X3dpZHRoLCAmdmtjdHgtPm91dHB1dF9oZWlnaHQsIDAsIDEs IDEuZik7Ci0KLSAgICBvdXRsaW5rLT53ID0gdmtjdHgtPm91dHB1dF93aWR0aDsKLSAgICBvdXRs aW5rLT5oID0gdmtjdHgtPm91dHB1dF9oZWlnaHQ7Ci0KLSAgICBpZiAocy0+b3V0X2Zvcm1hdF9z dHJpbmcpIHsKLSAgICAgICAgcy0+dmtjdHgub3V0cHV0X2Zvcm1hdCA9IGF2X2dldF9waXhfZm10 KHMtPm91dF9mb3JtYXRfc3RyaW5nKTsKLSAgICAgICAgaWYgKHMtPnZrY3R4Lm91dHB1dF9mb3Jt YXQgPT0gQVZfUElYX0ZNVF9OT05FKSB7Ci0gICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xP R19FUlJPUiwgIkludmFsaWQgb3V0cHV0IGZvcm1hdC5cbiIpOwotICAgICAgICAgICAgcmV0dXJu IEFWRVJST1IoRUlOVkFMKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIHMtPnZr Y3R4Lm91dHB1dF9mb3JtYXQgPSBzLT52a2N0eC5pbnB1dF9mb3JtYXQ7Ci0gICAgfQotCi0gICAg aWYgKHMtPnZrY3R4LmlucHV0X2Zvcm1hdCA9PSBBVl9QSVhfRk1UX0JBWUVSX1JHR0IxNikgewot ICAgICAgICBpZiAocy0+dmtjdHgub3V0cHV0X2Zvcm1hdCA9PSBzLT52a2N0eC5pbnB1dF9mb3Jt YXQpIHsKLSAgICAgICAgICAgIHMtPnZrY3R4Lm91dHB1dF9mb3JtYXQgPSBBVl9QSVhfRk1UX1JH QkE2NDsKLSAgICAgICAgfSBlbHNlIGlmICghZmZfdmtfbXRfaXNfbnBfcmdiKHMtPnZrY3R4Lm91 dHB1dF9mb3JtYXQpKSB7Ci0gICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwg IlVuc3VwcG9ydGVkIG91dHB1dCBmb3JtYXQgZm9yIGRlYmF5ZXJcbiIpOwotICAgICAgICAgICAg cmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoaW5saW5rLT53 ICE9IG91dGxpbmstPncgfHwgaW5saW5rLT53ICE9IG91dGxpbmstPncpIHsKLSAgICAgICAgICAg IGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiU2NhbGluZyBpcyBub3Qgc3VwcG9ydGVkIHdp dGggZGViYXllcmluZ1xuIik7Ci0gICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9QQVRDSFdFTENP TUU7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKHMtPnZrY3R4Lm91dHB1dF9mb3JtYXQgIT0g cy0+dmtjdHguaW5wdXRfZm9ybWF0KSB7Ci0gICAgICAgIGlmICghZmZfdmtfbXRfaXNfbnBfcmdi KHMtPnZrY3R4LmlucHV0X2Zvcm1hdCkpIHsKLSAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZf TE9HX0VSUk9SLCAiVW5zdXBwb3J0ZWQgaW5wdXQgZm9ybWF0IGZvciBjb252ZXJzaW9uXG4iKTsK LSAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7Ci0gICAgICAgIH0KLSAgICAgICAg aWYgKHMtPnZrY3R4Lm91dHB1dF9mb3JtYXQgIT0gQVZfUElYX0ZNVF9OVjEyICYmCi0gICAgICAg ICAgICBzLT52a2N0eC5vdXRwdXRfZm9ybWF0ICE9IEFWX1BJWF9GTVRfWVVWNDIwUCAmJgotICAg ICAgICAgICAgcy0+dmtjdHgub3V0cHV0X2Zvcm1hdCAhPSBBVl9QSVhfRk1UX1lVVjQ0NFApIHsK LSAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiVW5zdXBwb3J0ZWQgb3V0 cHV0IGZvcm1hdFxuIik7Ci0gICAgICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOwotICAg ICAgICB9Ci0gICAgfSBlbHNlIGlmIChzLT5vdXRfcmFuZ2UgIT0gQVZDT0xfUkFOR0VfVU5TUEVD SUZJRUQpIHsKLSAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJDYW5ub3QgY2hh bmdlIHJhbmdlIHdpdGhvdXQgY29udmVydGluZyBmb3JtYXRcbiIpOwotICAgICAgICByZXR1cm4g QVZFUlJPUihFSU5WQUwpOwotICAgIH0KLQotICAgIHJldHVybiBmZl92a19maWx0ZXJfY29uZmln X291dHB1dChvdXRsaW5rKTsKLX0KLQotc3RhdGljIHZvaWQgc2NhbGVfdnVsa2FuX3VuaW5pdChB VkZpbHRlckNvbnRleHQgKmF2Y3R4KQotewotICAgIFNjYWxlVnVsa2FuQ29udGV4dCAqcyA9IGF2 Y3R4LT5wcml2OwotICAgIEZGVnVsa2FuQ29udGV4dCAqdmtjdHggPSAmcy0+dmtjdHg7Ci0gICAg RkZWdWxrYW5GdW5jdGlvbnMgKnZrID0gJnZrY3R4LT52a2ZuOwotCi0gICAgZmZfdmtfZXhlY19w b29sX2ZyZWUodmtjdHgsICZzLT5lKTsKLSAgICBmZl92a19zaGFkZXJfZnJlZSh2a2N0eCwgJnMt PnNoZCk7Ci0KLSAgICBpZiAocy0+c2FtcGxlcikKLSAgICAgICAgdmstPkRlc3Ryb3lTYW1wbGVy KHZrY3R4LT5od2N0eC0+YWN0X2Rldiwgcy0+c2FtcGxlciwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgIHZrY3R4LT5od2N0eC0+YWxsb2MpOwotCi0gICAgZmZfdmtfdW5pbml0KCZzLT52a2N0 eCk7Ci0KLSAgICBzLT5pbml0aWFsaXplZCA9IDA7Ci19Ci0KLSNkZWZpbmUgT0ZGU0VUKHgpIG9m ZnNldG9mKFNjYWxlVnVsa2FuQ29udGV4dCwgeCkKLSNkZWZpbmUgRkxBR1MgKEFWX09QVF9GTEFH X0ZJTFRFUklOR19QQVJBTSB8IEFWX09QVF9GTEFHX1ZJREVPX1BBUkFNKQotc3RhdGljIGNvbnN0 IEFWT3B0aW9uIHNjYWxlX3Z1bGthbl9vcHRpb25zW10gPSB7Ci0gICAgeyAidyIsICJPdXRwdXQg dmlkZW8gd2lkdGgiLCAgT0ZGU0VUKHdfZXhwciksIEFWX09QVF9UWVBFX1NUUklORywgey5zdHIg PSAiaXcifSwgLmZsYWdzID0gRkxBR1MgfSwKLSAgICB7ICJoIiwgIk91dHB1dCB2aWRlbyBoZWln aHQiLCBPRkZTRVQoaF9leHByKSwgQVZfT1BUX1RZUEVfU1RSSU5HLCB7LnN0ciA9ICJpaCJ9LCAu ZmxhZ3MgPSBGTEFHUyB9LAotICAgIHsgInNjYWxlciIsICJTY2FsZXIgZnVuY3Rpb24iLCBPRkZT RVQoc2NhbGVyKSwgQVZfT1BUX1RZUEVfSU5ULCB7Lmk2NCA9IEZfQklMSU5FQVJ9LCAwLCBGX05C LCAuZmxhZ3MgPSBGTEFHUywgLnVuaXQgPSAic2NhbGVyIiB9LAotICAgICAgICB7ICJiaWxpbmVh ciIsICJCaWxpbmVhciBpbnRlcnBvbGF0aW9uIChmYXN0ZXN0KSIsIDAsIEFWX09QVF9UWVBFX0NP TlNULCB7Lmk2NCA9IEZfQklMSU5FQVJ9LCAwLCAwLCAuZmxhZ3MgPSBGTEFHUywgLnVuaXQgPSAi c2NhbGVyIiB9LAotICAgICAgICB7ICJuZWFyZXN0IiwgIk5lYXJlc3QgKHVzZWZ1bCBmb3IgcGl4 ZWwgYXJ0KSIsIDAsIEFWX09QVF9UWVBFX0NPTlNULCB7Lmk2NCA9IEZfTkVBUkVTVH0sIDAsIDAs IC5mbGFncyA9IEZMQUdTLCAudW5pdCA9ICJzY2FsZXIiIH0sCi0gICAgeyAiZGViYXllciIsICJE ZWJheWVyIGFsZ29yaXRobSB0byB1c2UiLCBPRkZTRVQoZGViYXllciksIEFWX09QVF9UWVBFX0lO VCwgey5pNjQgPSBEQl9CSUxJTkVBUl9IUX0sIDAsIERCX05CLCAuZmxhZ3MgPSBGTEFHUywgLnVu aXQgPSAiZGViYXllciIgfSwKLSAgICAgICAgeyAiYmlsaW5lYXIiLCAiQmlsaW5lYXIgZGViYXll cmluZyAoZmFzdGVzdCkiLCAwLCBBVl9PUFRfVFlQRV9DT05TVCwgey5pNjQgPSBEQl9CSUxJTkVB Un0sIDAsIDAsIC5mbGFncyA9IEZMQUdTLCAudW5pdCA9ICJkZWJheWVyIiB9LAotICAgICAgICB7 ICJiaWxpbmVhcl9ocSIsICJCaWxpbmVhciBkZWJheWVyaW5nIChoaWdoIHF1YWxpdHkpIiwgMCwg QVZfT1BUX1RZUEVfQ09OU1QsIHsuaTY0ID0gREJfQklMSU5FQVJfSFF9LCAwLCAwLCAuZmxhZ3Mg PSBGTEFHUywgLnVuaXQgPSAiZGViYXllciIgfSwKLSAgICB7ICJmb3JtYXQiLCAiT3V0cHV0IHZp ZGVvIGZvcm1hdCAoc29mdHdhcmUgZm9ybWF0IG9mIGhhcmR3YXJlIGZyYW1lcykiLCBPRkZTRVQo b3V0X2Zvcm1hdF9zdHJpbmcpLCBBVl9PUFRfVFlQRV9TVFJJTkcsIC5mbGFncyA9IEZMQUdTIH0s Ci0gICAgeyAib3V0X3JhbmdlIiwgIk91dHB1dCBjb2xvdXIgcmFuZ2UgKGZyb20gMCB0byAyKSAo ZGVmYXVsdCAwKSIsIE9GRlNFVChvdXRfcmFuZ2UpLCBBVl9PUFRfVFlQRV9JTlQsIHsuaTY0ID0g QVZDT0xfUkFOR0VfVU5TUEVDSUZJRUR9LCBBVkNPTF9SQU5HRV9VTlNQRUNJRklFRCwgQVZDT0xf UkFOR0VfSlBFRywgLmZsYWdzID0gRkxBR1MsIC51bml0ID0gInJhbmdlIiB9LAotICAgICAgICB7 ICJmdWxsIiwgIkZ1bGwgcmFuZ2UiLCAwLCBBVl9PUFRfVFlQRV9DT05TVCwgeyAuaTY0ID0gQVZD T0xfUkFOR0VfSlBFRyB9LCAwLCAwLCBGTEFHUywgLnVuaXQgPSAicmFuZ2UiIH0sCi0gICAgICAg IHsgImxpbWl0ZWQiLCAiTGltaXRlZCByYW5nZSIsIDAsIEFWX09QVF9UWVBFX0NPTlNULCB7IC5p NjQgPSBBVkNPTF9SQU5HRV9NUEVHIH0sIDAsIDAsIEZMQUdTLCAudW5pdCA9ICJyYW5nZSIgfSwK LSAgICAgICAgeyAianBlZyIsICJGdWxsIHJhbmdlIiwgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsg Lmk2NCA9IEFWQ09MX1JBTkdFX0pQRUcgfSwgMCwgMCwgRkxBR1MsIC51bml0ID0gInJhbmdlIiB9 LAotICAgICAgICB7ICJtcGVnIiwgIkxpbWl0ZWQgcmFuZ2UiLCAwLCBBVl9PUFRfVFlQRV9DT05T VCwgeyAuaTY0ID0gQVZDT0xfUkFOR0VfTVBFRyB9LCAwLCAwLCBGTEFHUywgLnVuaXQgPSAicmFu Z2UiIH0sCi0gICAgICAgIHsgInR2IiwgIkxpbWl0ZWQgcmFuZ2UiLCAwLCBBVl9PUFRfVFlQRV9D T05TVCwgeyAuaTY0ID0gQVZDT0xfUkFOR0VfTVBFRyB9LCAwLCAwLCBGTEFHUywgLnVuaXQgPSAi cmFuZ2UiIH0sCi0gICAgICAgIHsgInBjIiwgIkZ1bGwgcmFuZ2UiLCAwLCBBVl9PUFRfVFlQRV9D T05TVCwgeyAuaTY0ID0gQVZDT0xfUkFOR0VfSlBFRyB9LCAwLCAwLCBGTEFHUywgLnVuaXQgPSAi cmFuZ2UiIH0sCi0gICAgeyBOVUxMIH0sCi19OwotCi1BVkZJTFRFUl9ERUZJTkVfQ0xBU1Moc2Nh bGVfdnVsa2FuKTsKLQotc3RhdGljIGNvbnN0IEFWRmlsdGVyUGFkIHNjYWxlX3Z1bGthbl9pbnB1 dHNbXSA9IHsKLSAgICB7Ci0gICAgICAgIC5uYW1lICAgICAgICAgPSAiZGVmYXVsdCIsCi0gICAg ICAgIC50eXBlICAgICAgICAgPSBBVk1FRElBX1RZUEVfVklERU8sCi0gICAgICAgIC5maWx0ZXJf ZnJhbWUgPSAmc2NhbGVfdnVsa2FuX2ZpbHRlcl9mcmFtZSwKLSAgICAgICAgLmNvbmZpZ19wcm9w cyA9ICZmZl92a19maWx0ZXJfY29uZmlnX2lucHV0LAotICAgIH0sCi19OwotCi1zdGF0aWMgY29u c3QgQVZGaWx0ZXJQYWQgc2NhbGVfdnVsa2FuX291dHB1dHNbXSA9IHsKLSAgICB7Ci0gICAgICAg IC5uYW1lID0gImRlZmF1bHQiLAotICAgICAgICAudHlwZSA9IEFWTUVESUFfVFlQRV9WSURFTywK LSAgICAgICAgLmNvbmZpZ19wcm9wcyA9ICZzY2FsZV92dWxrYW5fY29uZmlnX291dHB1dCwKLSAg ICB9LAotfTsKLQotY29uc3QgRkZGaWx0ZXIgZmZfdmZfc2NhbGVfdnVsa2FuID0gewotICAgIC5w Lm5hbWUgICAgICAgICA9ICJzY2FsZV92dWxrYW4iLAotICAgIC5wLmRlc2NyaXB0aW9uICA9IE5V TExfSUZfQ09ORklHX1NNQUxMKCJTY2FsZSBWdWxrYW4gZnJhbWVzIiksCi0gICAgLnAucHJpdl9j bGFzcyAgID0gJnNjYWxlX3Z1bGthbl9jbGFzcywKLSAgICAucC5mbGFncyAgICAgICAgPSBBVkZJ TFRFUl9GTEFHX0hXREVWSUNFLAotICAgIC5wcml2X3NpemUgICAgICA9IHNpemVvZihTY2FsZVZ1 bGthbkNvbnRleHQpLAotICAgIC5pbml0ICAgICAgICAgICA9ICZmZl92a19maWx0ZXJfaW5pdCwK LSAgICAudW5pbml0ICAgICAgICAgPSAmc2NhbGVfdnVsa2FuX3VuaW5pdCwKLSAgICBGSUxURVJf SU5QVVRTKHNjYWxlX3Z1bGthbl9pbnB1dHMpLAotICAgIEZJTFRFUl9PVVRQVVRTKHNjYWxlX3Z1 bGthbl9vdXRwdXRzKSwKLSAgICBGSUxURVJfU0lOR0xFX1BJWEZNVChBVl9QSVhfRk1UX1ZVTEtB TiksCi0gICAgLmZsYWdzX2ludGVybmFsID0gRkZfRklMVEVSX0ZMQUdfSFdGUkFNRV9BV0FSRSwK LX07Ci0tIAoyLjQ5LjEKCgpGcm9tIDNkNmJjZjExY2E4ZjI5NjExZWNkMjJmYzE3MDliYzVlZmQy MTFlYjAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCkZyb206IEphbWFpa2ExIDxsdWthc3pjejE4 QHdwLnBsPgpEYXRlOiBXZWQsIDMgU2VwIDIwMjUgMTM6MDA6MjYgKzAwMDAKU3ViamVjdDogW1BB VENIIDAyMi8xMThdIENoYW5naW5nIHZ1bGthbiBmaWxlIGRpcmVjdG9yeQoKLS0tCiBsaWJhdmZp bHRlci92dWxrYW4vdmZfc2NhbGVfdnVsa2FuLmMgfCA1MDggKysrKysrKysrKysrKysrKysrKysr KysrKysrCiAxIGZpbGUgY2hhbmdlZCwgNTA4IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEw MDY0NCBsaWJhdmZpbHRlci92dWxrYW4vdmZfc2NhbGVfdnVsa2FuLmMKCmRpZmYgLS1naXQgYS9s aWJhdmZpbHRlci92dWxrYW4vdmZfc2NhbGVfdnVsa2FuLmMgYi9saWJhdmZpbHRlci92dWxrYW4v dmZfc2NhbGVfdnVsa2FuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4u ZjdlMWVkNzQwOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmF2ZmlsdGVyL3Z1bGthbi92Zl9zY2Fs ZV92dWxrYW4uYwpAQCAtMCwwICsxLDUwOCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgTHlubmUK KyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCisgKgorICogRkZtcGVnIGlzIGZy ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0 IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGlj ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy CisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0 aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2Vy IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj CisgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVl IFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo IEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisgKi8KKworI2luY2x1ZGUgImxpYmF2 dXRpbC9yYW5kb21fc2VlZC5oIgorI2luY2x1ZGUgImxpYmF2dXRpbC9vcHQuaCIKKyNpbmNsdWRl ICIuLi8uLi9saWJhdnV0aWwvdnVsa2FuL3Z1bGthbl9zcGlydi5oIgorI2luY2x1ZGUgInZ1bGth bl9maWx0ZXIuaCIKKyNpbmNsdWRlICJsaWJhdmZpbHRlci9zY2FsZV9ldmFsLmgiCisjaW5jbHVk ZSAibGliYXZmaWx0ZXIvZmlsdGVycy5oIgorI2luY2x1ZGUgImxpYmF2ZmlsdGVyL2NvbG9yc3Bh Y2UuaCIKKyNpbmNsdWRlICJsaWJhdmZpbHRlci92aWRlby5oIgorCitleHRlcm4gY29uc3QgY2hh ciAqZmZfc291cmNlX2RlYmF5ZXJfY29tcDsKKworZW51bSBTY2FsZXJGdW5jIHsKKyAgICBGX0JJ TElORUFSID0gMCwKKyAgICBGX05FQVJFU1QsCisKKyAgICBGX05CLAorfTsKKworZW51bSBEZWJh eWVyRnVuYyB7CisgICAgREJfQklMSU5FQVIgPSAwLAorICAgIERCX0JJTElORUFSX0hRLAorCisg ICAgREJfTkIsCit9OworCit0eXBlZGVmIHN0cnVjdCBTY2FsZVZ1bGthbkNvbnRleHQgeworICAg IEZGVnVsa2FuQ29udGV4dCB2a2N0eDsKKworICAgIGludCBpbml0aWFsaXplZDsKKyAgICBGRlZr RXhlY1Bvb2wgZTsKKyAgICBBVlZ1bGthbkRldmljZVF1ZXVlRmFtaWx5ICpxZjsKKyAgICBGRlZ1 bGthblNoYWRlciBzaGQ7CisgICAgVmtTYW1wbGVyIHNhbXBsZXI7CisKKyAgICAvKiBQdXNoIGNv bnN0YW50cyAvIG9wdGlvbnMgKi8KKyAgICBzdHJ1Y3QgeworICAgICAgICBmbG9hdCB5dXZfbWF0 cml4WzRdWzRdOworICAgICAgICBpbnQgY3JvcF94OworICAgICAgICBpbnQgY3JvcF95OworICAg ICAgICBpbnQgY3JvcF93OworICAgICAgICBpbnQgY3JvcF9oOworICAgIH0gb3B0czsKKworICAg IGNoYXIgKm91dF9mb3JtYXRfc3RyaW5nOworICAgIGNoYXIgKndfZXhwcjsKKyAgICBjaGFyICpo X2V4cHI7CisKKyAgICBlbnVtIFNjYWxlckZ1bmMgc2NhbGVyOworICAgIGVudW0gQVZDb2xvclJh bmdlIG91dF9yYW5nZTsKKyAgICBlbnVtIERlYmF5ZXJGdW5jIGRlYmF5ZXI7Cit9IFNjYWxlVnVs a2FuQ29udGV4dDsKKworc3RhdGljIGNvbnN0IGNoYXIgc2NhbGVfYmlsaW5lYXJbXSA9IHsKKyAg ICBDKDAsIHZlYzQgc2NhbGVfYmlsaW5lYXIoaW50IGlkeCwgaXZlYzIgcG9zLCB2ZWMyIGNyb3Bf cmFuZ2UsIHZlYzIgY3JvcF9vZmYpKQorICAgIEMoMCwgeyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgQygx LCAgICAgdmVjMiBucG9zID0gKHZlYzIocG9zKSArIDAuNWYpIC8gaW1hZ2VTaXplKG91dHB1dF9p bWdbaWR4XSk7ICAgICAgICkKKyAgICBDKDEsICAgICBucG9zICo9IGNyb3BfcmFuZ2U7ICAgIC8q IFJlZHVjZSB0aGUgcmFuZ2UgKi8gICAgICAgICAgICAgICAgICAgICAgKQorICAgIEMoMSwgICAg IG5wb3MgKz0gY3JvcF9vZmY7ICAgICAgLyogT2Zmc2V0IHRoZSBzdGFydCAqLyAgICAgICAgICAg ICAgICAgICAgICApCisgICAgQygxLCAgICAgcmV0dXJuIHRleHR1cmUoaW5wdXRfaW1nW2lkeF0s IG5wb3MpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICBDKDAsIH0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKQorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgcmdiMnl1dltdID0geworICAgIEMoMCwg dmVjNCByZ2IyeXV2KHZlYzQgc3JjLCBpbnQgZnVsbHJhbmdlKSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICApCisgICAgQygwLCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICBDKDEsICAgICBz cmMgKj0geXV2X21hdHJpeDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKQorICAgIEMoMSwgICAgIGlmIChmdWxscmFuZ2UgPT0gMSkgeyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgQygyLCAgICAgICAgIHNy YyArPSB2ZWM0KDAuMCwgMC41LCAwLjUsIDAuMCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICkKKyAgICBDKDEsICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgIEMoMiwgICAgICAgICBzcmMgKj0g dmVjNCgyMTkuMCAvIDI1NS4wLCAyMjQuMCAvIDI1NS4wLCAyMjQuMCAvIDI1NS4wLCAxLjApOyAp CisgICAgQygyLCAgICAgICAgIHNyYyArPSB2ZWM0KDE2LjAgLyAyNTUuMCwgMTI4LjAgLyAyNTUu MCwgMTI4LjAgLyAyNTUuMCwgMC4wKTsgICkKKyAgICBDKDEsICAgICB9ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorICAg IEMoMSwgICAgIHJldHVybiBzcmM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICApCisgICAgQygwLCB9ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKK307CisKK3N0 YXRpYyBjb25zdCBjaGFyIHdyaXRlX252MTJbXSA9IHsKKyAgICBDKDAsIHZvaWQgd3JpdGVfbnYx Mih2ZWM0IHNyYywgaXZlYzIgcG9zKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KQorICAgIEMoMCwgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgQygxLCAgICAgaW1hZ2VTdG9yZShvdXRw dXRfaW1nWzBdLCBwb3MsIHZlYzQoc3JjLnIsIDAuMCwgMC4wLCAwLjApKTsgICAgICAgICkKKyAg ICBDKDEsICAgICBwb3MgLz0gaXZlYzIoMik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKQorICAgIEMoMSwgICAgIGltYWdlU3RvcmUob3V0cHV0X2lt Z1sxXSwgcG9zLCB2ZWM0KHNyYy5nLCBzcmMuYiwgMC4wLCAwLjApKTsgICAgICApCisgICAgQygw LCB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICkKK307CisKK3N0YXRpYyBjb25zdCBjaGFyIHdyaXRlXzQyMFtdID0g eworICAgIEMoMCwgdm9pZCB3cml0ZV80MjAodmVjNCBzcmMsIGl2ZWMyIHBvcykgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgQygwLCB7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAg ICBDKDEsICAgICBpbWFnZVN0b3JlKG91dHB1dF9pbWdbMF0sIHBvcywgdmVjNChzcmMuciwgMC4w LCAwLjAsIDAuMCkpOyAgICAgICAgKQorICAgIEMoMSwgICAgIHBvcyAvPSBpdmVjMigyKTsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgQygx LCAgICAgaW1hZ2VTdG9yZShvdXRwdXRfaW1nWzFdLCBwb3MsIHZlYzQoc3JjLmcsIDAuMCwgMC4w LCAwLjApKTsgICAgICAgICkKKyAgICBDKDEsICAgICBpbWFnZVN0b3JlKG91dHB1dF9pbWdbMl0s IHBvcywgdmVjNChzcmMuYiwgMC4wLCAwLjAsIDAuMCkpOyAgICAgICAgKQorICAgIEMoMCwgfSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICApCit9OworCitzdGF0aWMgY29uc3QgY2hhciB3cml0ZV80NDRbXSA9IHsKKyAg ICBDKDAsIHZvaWQgd3JpdGVfNDQ0KHZlYzQgc3JjLCBpdmVjMiBwb3MpICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKQorICAgIEMoMCwgeyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgQygx LCAgICAgaW1hZ2VTdG9yZShvdXRwdXRfaW1nWzBdLCBwb3MsIHZlYzQoc3JjLnIsIDAuMCwgMC4w LCAwLjApKTsgICAgICAgICkKKyAgICBDKDEsICAgICBpbWFnZVN0b3JlKG91dHB1dF9pbWdbMV0s IHBvcywgdmVjNChzcmMuZywgMC4wLCAwLjAsIDAuMCkpOyAgICAgICAgKQorICAgIEMoMSwgICAg IGltYWdlU3RvcmUob3V0cHV0X2ltZ1syXSwgcG9zLCB2ZWM0KHNyYy5iLCAwLjAsIDAuMCwgMC4w KSk7ICAgICAgICApCisgICAgQygwLCB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKK307CisKK3N0YXRpYyBpbnQg aW5pdF9zY2FsZV9zaGFkZXIoQVZGaWx0ZXJDb250ZXh0ICpjdHgsIEZGVnVsa2FuU2hhZGVyICpz aGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZGVnVsa2FuRGVzY3JpcHRvclNldEJp bmRpbmcgKmRlc2MsIEFWRnJhbWUgKmluKQoreworICAgIFNjYWxlVnVsa2FuQ29udGV4dCAqcyA9 IGN0eC0+cHJpdjsKKyAgICBHTFNMRCggICBzY2FsZV9iaWxpbmVhciAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKworICAgIGlmIChzLT52a2N0eC5v dXRwdXRfZm9ybWF0ICE9IHMtPnZrY3R4LmlucHV0X2Zvcm1hdCkgeworICAgICAgICBHTFNMRCgg ICByZ2IyeXV2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICApOworICAgIH0KKworICAgIHN3aXRjaCAocy0+dmtjdHgub3V0cHV0X2Zvcm1hdCkgewor ICAgIGNhc2UgQVZfUElYX0ZNVF9OVjEyOiAgICBHTFNMRCh3cml0ZV9udjEyKTsgYnJlYWs7Cisg ICAgY2FzZSBBVl9QSVhfRk1UX1lVVjQyMFA6IEdMU0xEKCB3cml0ZV80MjApOyBicmVhazsKKyAg ICBjYXNlIEFWX1BJWF9GTVRfWVVWNDQ0UDogR0xTTEQoIHdyaXRlXzQ0NCk7IGJyZWFrOworICAg IGRlZmF1bHQ6IGJyZWFrOworICAgIH0KKworICAgIEdMU0xDKDAsIHZvaWQgbWFpbigpICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgIEdM U0xDKDAsIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICApOworICAgIEdMU0xDKDEsICAgICBpdmVjMiBzaXplOyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgIEdMU0xDKDEsICAg ICBpdmVjMiBwb3MgPSBpdmVjMihnbF9HbG9iYWxJbnZvY2F0aW9uSUQueHkpOyAgICAgICAgICAg ICAgICApOworICAgIEdMU0xGKDEsICAgICB2ZWMyIGluX2QgPSB2ZWMyKCVpLCAlaSk7ICAgICAg ICAgICAgICxpbi0+d2lkdGgsIGluLT5oZWlnaHQpOworICAgIEdMU0xDKDEsICAgICB2ZWMyIGNf ciA9IHZlYzIoY3JvcF93LCBjcm9wX2gpIC8gaW5fZDsgICAgICAgICAgICAgICAgICAgICApOwor ICAgIEdMU0xDKDEsICAgICB2ZWMyIGNfbyA9IHZlYzIoY3JvcF94LCBjcm9wX3kpIC8gaW5fZDsg ICAgICAgICAgICAgICAgICAgICApOworICAgIEdMU0xDKDAsICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworCisgICAgaWYg KHMtPnZrY3R4Lm91dHB1dF9mb3JtYXQgPT0gcy0+dmtjdHguaW5wdXRfZm9ybWF0KSB7CisgICAg ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZGVzY1sxXS5lbGVtczsgaSsrKSB7CisgICAgICAgICAg ICBHTFNMRigxLCAgc2l6ZSA9IGltYWdlU2l6ZShvdXRwdXRfaW1nWyVpXSk7ICAgICAgICAgICAg ICAgICAgICAsaSk7CisgICAgICAgICAgICBHTFNMQygxLCAgaWYgKElTX1dJVEhJTihwb3MsIHNp emUpKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICBzd2l0Y2gg KHMtPnNjYWxlcikgeworICAgICAgICAgICAgY2FzZSBGX05FQVJFU1Q6CisgICAgICAgICAgICBj YXNlIEZfQklMSU5FQVI6CisgICAgICAgICAgICAgICAgR0xTTEYoMiwgdmVjNCByZXMgPSBzY2Fs ZV9iaWxpbmVhciglaSwgcG9zLCBjX3IsIGNfbyk7ICAgICAsaSk7CisgICAgICAgICAgICAgICAg R0xTTEYoMiwgaW1hZ2VTdG9yZShvdXRwdXRfaW1nWyVpXSwgcG9zLCByZXMpOyAgICAgICAgICAg ICAsaSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9OworICAgICAgICAg ICAgR0xTTEMoMSwgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICApOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgR0xTTEMoMSwg dmVjNCByZXMgPSBzY2FsZV9iaWxpbmVhcigwLCBwb3MsIGNfciwgY19vKTsgICAgICAgICAgICAg ICAgKTsKKyAgICAgICAgR0xTTEYoMSwgcmVzID0gcmdiMnl1dihyZXMsICVpKTsgICAgLHMtPm91 dF9yYW5nZSA9PSBBVkNPTF9SQU5HRV9KUEVHKTsKKyAgICAgICAgc3dpdGNoIChzLT52a2N0eC5v dXRwdXRfZm9ybWF0KSB7CisgICAgICAgIGNhc2UgQVZfUElYX0ZNVF9OVjEyOiAgICBHTFNMQygx LCB3cml0ZV9udjEyKHJlcywgcG9zKTsgKTsgYnJlYWs7CisgICAgICAgIGNhc2UgQVZfUElYX0ZN VF9ZVVY0MjBQOiBHTFNMQygxLCAgd3JpdGVfNDIwKHJlcywgcG9zKTsgKTsgYnJlYWs7CisgICAg ICAgIGNhc2UgQVZfUElYX0ZNVF9ZVVY0NDRQOiBHTFNMQygxLCAgd3JpdGVfNDQ0KHJlcywgcG9z KTsgKTsgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6IHJldHVybiBBVkVSUk9SKEVJTlZBTCk7Cisg ICAgICAgIH0KKyAgICB9CisKKyAgICBHTFNMQygwLCB9ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKworICAgIGlmIChzLT52 a2N0eC5vdXRwdXRfZm9ybWF0ICE9IHMtPnZrY3R4LmlucHV0X2Zvcm1hdCkgeworICAgICAgICBj b25zdCBBVkx1bWFDb2VmZmljaWVudHMgKmxjb2VmZnM7CisgICAgICAgIGRvdWJsZSB0bXBfbWF0 WzNdWzNdOworCisgICAgICAgIGxjb2VmZnMgPSBhdl9jc3BfbHVtYV9jb2VmZnNfZnJvbV9hdmNz cChpbi0+Y29sb3JzcGFjZSk7CisgICAgICAgIGlmICghbGNvZWZmcykgeworICAgICAgICAgICAg YXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiVW5zdXBwb3J0ZWQgY29sb3JzcGFjZVxuIik7Cisg ICAgICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOworICAgICAgICB9CisKKyAgICAgICAg ZmZfZmlsbF9yZ2IyeXV2X3RhYmxlKGxjb2VmZnMsIHRtcF9tYXQpOworCisgICAgICAgIGZvciAo aW50IHkgPSAwOyB5IDwgMzsgeSsrKQorICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCAz OyB4KyspCisgICAgICAgICAgICAgICAgcy0+b3B0cy55dXZfbWF0cml4W3hdW3ldID0gdG1wX21h dFt4XVt5XTsKKyAgICAgICAgcy0+b3B0cy55dXZfbWF0cml4WzNdWzNdID0gMS4wOworICAgIH0K KworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IGluaXRfZGViYXllcl9zaGFkZXIoU2Nh bGVWdWxrYW5Db250ZXh0ICpzLCBGRlZ1bGthblNoYWRlciAqc2hkLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEZGVnVsa2FuRGVzY3JpcHRvclNldEJpbmRpbmcgKmRlc2MsIEFWRnJh bWUgKmluKQoreworICAgIEdMU0xEKGZmX3NvdXJjZV9kZWJheWVyX2NvbXApOworCisgICAgR0xT TEMoMCwgdm9pZCBtYWluKHZvaWQpKTsKKyAgICBHTFNMQygwLCB7ICAgICAgICAgICAgICApOwor ICAgIGlmIChzLT5kZWJheWVyID09IERCX0JJTElORUFSKQorICAgICAgICBHTFNMQygxLCBkZWJh eWVyX2JpbGluZWFyKCk7KTsKKyAgICBlbHNlIGlmIChzLT5kZWJheWVyID09IERCX0JJTElORUFS X0hRKQorICAgICAgICBHTFNMQygxLCBkZWJheWVyX2JpbGluZWFyX2hxKCk7KTsKKyAgICBHTFNM QygwLCB9ICAgICAgICAgICAgICApOworCisgICAgc2hkLT5sZ19zaXplWzBdIDw8PSAxOworICAg IHNoZC0+bGdfc2l6ZVsxXSA8PD0gMTsKKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgYXZf Y29sZCBpbnQgaW5pdF9maWx0ZXIoQVZGaWx0ZXJDb250ZXh0ICpjdHgsIEFWRnJhbWUgKmluKQor eworICAgIGludCBlcnI7CisgICAgdWludDhfdCAqc3B2X2RhdGE7CisgICAgc2l6ZV90IHNwdl9s ZW47CisgICAgdm9pZCAqc3B2X29wYXF1ZSA9IE5VTEw7CisgICAgVmtGaWx0ZXIgc2FtcGxlcl9t b2RlOworICAgIFNjYWxlVnVsa2FuQ29udGV4dCAqcyA9IGN0eC0+cHJpdjsKKyAgICBGRlZ1bGth bkNvbnRleHQgKnZrY3R4ID0gJnMtPnZrY3R4OworICAgIEZGVnVsa2FuU2hhZGVyICpzaGQgPSAm cy0+c2hkOworICAgIEZGVmtTUElSVkNvbXBpbGVyICpzcHY7CisgICAgRkZWdWxrYW5EZXNjcmlw dG9yU2V0QmluZGluZyAqZGVzYzsKKworICAgIGludCBkZWJheWVyID0gcy0+dmtjdHguaW5wdXRf Zm9ybWF0ID09IEFWX1BJWF9GTVRfQkFZRVJfUkdHQjE2OworICAgIGludCBpbl9wbGFuZXMgPSBh dl9waXhfZm10X2NvdW50X3BsYW5lcyhzLT52a2N0eC5pbnB1dF9mb3JtYXQpOworCisgICAgc3dp dGNoIChzLT5zY2FsZXIpIHsKKyAgICBjYXNlIEZfTkVBUkVTVDoKKyAgICAgICAgc2FtcGxlcl9t b2RlID0gVktfRklMVEVSX05FQVJFU1Q7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRl9CSUxJ TkVBUjoKKyAgICAgICAgc2FtcGxlcl9tb2RlID0gVktfRklMVEVSX0xJTkVBUjsKKyAgICAgICAg YnJlYWs7CisgICAgfTsKKworICAgIHNwdiA9IGZmX3ZrX3NwaXJ2X2luaXQoKTsKKyAgICBpZiAo IXNwdikgeworICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJVbmFibGUgdG8gaW5p dGlhbGl6ZSBTUElSLVYgY29tcGlsZXIhXG4iKTsKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfRVhU RVJOQUw7CisgICAgfQorCisgICAgcy0+cWYgPSBmZl92a19xZl9maW5kKHZrY3R4LCBWS19RVUVV RV9DT01QVVRFX0JJVCwgMCk7CisgICAgaWYgKCFzLT5xZikgeworICAgICAgICBhdl9sb2coY3R4 LCBBVl9MT0dfRVJST1IsICJEZXZpY2UgaGFzIG5vIGNvbXB1dGUgcXVldWVzXG4iKTsKKyAgICAg ICAgZXJyID0gQVZFUlJPUihFTk9UU1VQKTsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKwor ICAgIFJFVChmZl92a19leGVjX3Bvb2xfaW5pdCh2a2N0eCwgcy0+cWYsICZzLT5lLCBzLT5xZi0+ bnVtKjQsIDAsIDAsIDAsIE5VTEwpKTsKKworICAgIGlmICghZGViYXllcikKKyAgICAgICAgUkVU KGZmX3ZrX2luaXRfc2FtcGxlcih2a2N0eCwgJnMtPnNhbXBsZXIsIDAsIHNhbXBsZXJfbW9kZSkp OworCisgICAgUkVUKGZmX3ZrX3NoYWRlcl9pbml0KHZrY3R4LCAmcy0+c2hkLCAic2NhbGUiLAor ICAgICAgICAgICAgICAgICAgICAgICAgICBWS19TSEFERVJfU1RBR0VfQ09NUFVURV9CSVQsCisg ICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDAsCisgICAgICAgICAgICAgICAgICAgICAg ICAgIDMyLCAzMiwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMCkpOworCisgICAgZGVz YyA9IChGRlZ1bGthbkRlc2NyaXB0b3JTZXRCaW5kaW5nIFtdKSB7CisgICAgICAgIHsKKyAgICAg ICAgICAgIC5uYW1lICAgICAgID0gImlucHV0X2ltZyIsCisgICAgICAgICAgICAudHlwZSAgICAg ICA9IGRlYmF5ZXIgPworICAgICAgICAgICAgICAgICAgICAgICAgICBWS19ERVNDUklQVE9SX1RZ UEVfU1RPUkFHRV9JTUFHRSA6CisgICAgICAgICAgICAgICAgICAgICAgICAgIFZLX0RFU0NSSVBU T1JfVFlQRV9DT01CSU5FRF9JTUFHRV9TQU1QTEVSLAorICAgICAgICAgICAgLm1lbV9sYXlvdXQg PSBkZWJheWVyID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgZmZfdmtfc2hhZGVyX3JlcF9m bXQocy0+dmtjdHguaW5wdXRfZm9ybWF0LCBGRl9WS19SRVBfRkxPQVQpIDoKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgIC5tZW1fcXVhbGkgID0gInJlYWRvbmx5 IiwKKyAgICAgICAgICAgIC5kaW1lbnNpb25zID0gMiwKKyAgICAgICAgICAgIC5lbGVtcyAgICAg ID0gaW5fcGxhbmVzLAorICAgICAgICAgICAgLnN0YWdlcyAgICAgPSBWS19TSEFERVJfU1RBR0Vf Q09NUFVURV9CSVQsCisgICAgICAgICAgICAuc2FtcGxlcnMgICA9IERVUF9TQU1QTEVSKHMtPnNh bXBsZXIpLAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAubmFtZSAgICAgICA9 ICJvdXRwdXRfaW1nIiwKKyAgICAgICAgICAgIC50eXBlICAgICAgID0gVktfREVTQ1JJUFRPUl9U WVBFX1NUT1JBR0VfSU1BR0UsCisgICAgICAgICAgICAubWVtX2xheW91dCA9IGZmX3ZrX3NoYWRl cl9yZXBfZm10KHMtPnZrY3R4Lm91dHB1dF9mb3JtYXQsIEZGX1ZLX1JFUF9GTE9BVCksCisgICAg ICAgICAgICAubWVtX3F1YWxpICA9ICJ3cml0ZW9ubHkiLAorICAgICAgICAgICAgLmRpbWVuc2lv bnMgPSAyLAorICAgICAgICAgICAgLmVsZW1zICAgICAgPSBhdl9waXhfZm10X2NvdW50X3BsYW5l cyhzLT52a2N0eC5vdXRwdXRfZm9ybWF0KSwKKyAgICAgICAgICAgIC5zdGFnZXMgICAgID0gVktf U0hBREVSX1NUQUdFX0NPTVBVVEVfQklULAorICAgICAgICB9LAorICAgIH07CisKKyAgICBSRVQo ZmZfdmtfc2hhZGVyX2FkZF9kZXNjcmlwdG9yX3NldCh2a2N0eCwgJnMtPnNoZCwgZGVzYywgMiwg MCwgMCkpOworCisgICAgR0xTTEMoMCwgbGF5b3V0KHB1c2hfY29uc3RhbnQsIHN0ZDQzMCkgdW5p Zm9ybSBwdXNoQ29uc3RhbnRzIHsgICAgICAgICk7CisgICAgR0xTTEMoMSwgICAgbWF0NCB5dXZf bWF0cml4OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAg R0xTTEMoMSwgICAgaW50IGNyb3BfeDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICk7CisgICAgR0xTTEMoMSwgICAgaW50IGNyb3BfeTsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgR0xTTEMoMSwgICAgaW50 IGNyb3BfdzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7 CisgICAgR0xTTEMoMSwgICAgaW50IGNyb3BfaDsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICk7CisgICAgR0xTTEMoMCwgfTsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgR0xTTEMoMCwg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICk7CisKKyAgICBmZl92a19zaGFkZXJfYWRkX3B1c2hfY29uc3QoJnMtPnNoZCwgMCwgc2l6 ZW9mKHMtPm9wdHMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19TSEFERVJf U1RBR0VfQ09NUFVURV9CSVQpOworCisgICAgaWYgKGRlYmF5ZXIpCisgICAgICAgIGVyciA9IGlu aXRfZGViYXllcl9zaGFkZXIocywgc2hkLCBkZXNjLCBpbik7CisgICAgZWxzZQorICAgICAgICBl cnIgPSBpbml0X3NjYWxlX3NoYWRlcihjdHgsIHNoZCwgZGVzYywgaW4pOworICAgIGlmIChlcnIg PCAwKQorICAgICAgICBnb3RvIGZhaWw7CisKKyAgICBSRVQoc3B2LT5jb21waWxlX3NoYWRlcih2 a2N0eCwgc3B2LCBzaGQsICZzcHZfZGF0YSwgJnNwdl9sZW4sICJtYWluIiwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAmc3B2X29wYXF1ZSkpOworICAgIFJFVChmZl92a19zaGFkZXJfbGlu ayh2a2N0eCwgc2hkLCBzcHZfZGF0YSwgc3B2X2xlbiwgIm1haW4iKSk7CisKKyAgICBSRVQoZmZf dmtfc2hhZGVyX3JlZ2lzdGVyX2V4ZWModmtjdHgsICZzLT5lLCAmcy0+c2hkKSk7CisKKyAgICBz LT5pbml0aWFsaXplZCA9IDE7CisKK2ZhaWw6CisgICAgaWYgKHNwdl9vcGFxdWUpCisgICAgICAg IHNwdi0+ZnJlZV9zaGFkZXIoc3B2LCAmc3B2X29wYXF1ZSk7CisgICAgaWYgKHNwdikKKyAgICAg ICAgc3B2LT51bmluaXQoJnNwdik7CisKKyAgICByZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50 IHNjYWxlX3Z1bGthbl9maWx0ZXJfZnJhbWUoQVZGaWx0ZXJMaW5rICpsaW5rLCBBVkZyYW1lICpp bikKK3sKKyAgICBpbnQgZXJyOworICAgIEFWRmlsdGVyQ29udGV4dCAqY3R4ID0gbGluay0+ZHN0 OworICAgIFNjYWxlVnVsa2FuQ29udGV4dCAqcyA9IGN0eC0+cHJpdjsKKyAgICBBVkZpbHRlckxp bmsgKm91dGxpbmsgPSBjdHgtPm91dHB1dHNbMF07CisKKyAgICBBVkZyYW1lICpvdXQgPSBmZl9n ZXRfdmlkZW9fYnVmZmVyKG91dGxpbmssIG91dGxpbmstPncsIG91dGxpbmstPmgpOworICAgIGlm ICghb3V0KSB7CisgICAgICAgIGVyciA9IEFWRVJST1IoRU5PTUVNKTsKKyAgICAgICAgZ290byBm YWlsOworICAgIH0KKworICAgIGlmICghcy0+aW5pdGlhbGl6ZWQpCisgICAgICAgIFJFVChpbml0 X2ZpbHRlcihjdHgsIGluKSk7CisKKyAgICBzLT5vcHRzLmNyb3BfeCA9IGluLT5jcm9wX2xlZnQ7 CisgICAgcy0+b3B0cy5jcm9wX3kgPSBpbi0+Y3JvcF90b3A7CisgICAgcy0+b3B0cy5jcm9wX3cg PSBpbi0+d2lkdGggLSAoaW4tPmNyb3BfbGVmdCArIGluLT5jcm9wX3JpZ2h0KTsKKyAgICBzLT5v cHRzLmNyb3BfaCA9IGluLT5oZWlnaHQgLSAoaW4tPmNyb3BfdG9wICsgaW4tPmNyb3BfYm90dG9t KTsKKworICAgIFJFVChmZl92a19maWx0ZXJfcHJvY2Vzc19zaW1wbGUoJnMtPnZrY3R4LCAmcy0+ ZSwgJnMtPnNoZCwgb3V0LCBpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHMtPnNhbXBsZXIsICZzLT5vcHRzLCBzaXplb2Yocy0+b3B0cykpKTsKKworICAgIGVyciA9IGF2 X2ZyYW1lX2NvcHlfcHJvcHMob3V0LCBpbik7CisgICAgaWYgKGVyciA8IDApCisgICAgICAgIGdv dG8gZmFpbDsKKworICAgIGlmIChvdXQtPndpZHRoICE9IGluLT53aWR0aCB8fCBvdXQtPmhlaWdo dCAhPSBpbi0+aGVpZ2h0KSB7CisgICAgICAgIGF2X2ZyYW1lX3NpZGVfZGF0YV9yZW1vdmVfYnlf cHJvcHMoJm91dC0+c2lkZV9kYXRhLCAmb3V0LT5uYl9zaWRlX2RhdGEsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVZfU0lERV9EQVRBX1BST1BfU0laRV9ERVBF TkRFTlQpOworICAgIH0KKworICAgIGlmIChzLT5vdXRfcmFuZ2UgIT0gQVZDT0xfUkFOR0VfVU5T UEVDSUZJRUQpCisgICAgICAgIG91dC0+Y29sb3JfcmFuZ2UgPSBzLT5vdXRfcmFuZ2U7CisgICAg aWYgKHMtPnZrY3R4Lm91dHB1dF9mb3JtYXQgIT0gcy0+dmtjdHguaW5wdXRfZm9ybWF0KQorICAg ICAgICBvdXQtPmNocm9tYV9sb2NhdGlvbiA9IEFWQ0hST01BX0xPQ19UT1BMRUZUOworCisgICAg YXZfZnJhbWVfZnJlZSgmaW4pOworCisgICAgcmV0dXJuIGZmX2ZpbHRlcl9mcmFtZShvdXRsaW5r LCBvdXQpOworCitmYWlsOgorICAgIGF2X2ZyYW1lX2ZyZWUoJmluKTsKKyAgICBhdl9mcmFtZV9m cmVlKCZvdXQpOworICAgIHJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgc2NhbGVfdnVsa2Fu X2NvbmZpZ19vdXRwdXQoQVZGaWx0ZXJMaW5rICpvdXRsaW5rKQoreworICAgIGludCBlcnI7Cisg ICAgQVZGaWx0ZXJDb250ZXh0ICphdmN0eCA9IG91dGxpbmstPnNyYzsKKyAgICBTY2FsZVZ1bGth bkNvbnRleHQgKnMgID0gYXZjdHgtPnByaXY7CisgICAgRkZWdWxrYW5Db250ZXh0ICp2a2N0eCA9 ICZzLT52a2N0eDsKKyAgICBBVkZpbHRlckxpbmsgKmlubGluayAgID0gb3V0bGluay0+c3JjLT5p bnB1dHNbMF07CisKKyAgICBlcnIgPSBmZl9zY2FsZV9ldmFsX2RpbWVuc2lvbnMocywgcy0+d19l eHByLCBzLT5oX2V4cHIsIGlubGluaywgb3V0bGluaywKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJnZrY3R4LT5vdXRwdXRfd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICZ2a2N0eC0+b3V0cHV0X2hlaWdodCk7CisgICAgaWYgKGVyciA8IDApCisg ICAgICAgIHJldHVybiBlcnI7CisKKyAgICBmZl9zY2FsZV9hZGp1c3RfZGltZW5zaW9ucyhpbmxp bmssICZ2a2N0eC0+b3V0cHV0X3dpZHRoLCAmdmtjdHgtPm91dHB1dF9oZWlnaHQsIDAsIDEsIDEu Zik7CisKKyAgICBvdXRsaW5rLT53ID0gdmtjdHgtPm91dHB1dF93aWR0aDsKKyAgICBvdXRsaW5r LT5oID0gdmtjdHgtPm91dHB1dF9oZWlnaHQ7CisKKyAgICBpZiAocy0+b3V0X2Zvcm1hdF9zdHJp bmcpIHsKKyAgICAgICAgcy0+dmtjdHgub3V0cHV0X2Zvcm1hdCA9IGF2X2dldF9waXhfZm10KHMt Pm91dF9mb3JtYXRfc3RyaW5nKTsKKyAgICAgICAgaWYgKHMtPnZrY3R4Lm91dHB1dF9mb3JtYXQg PT0gQVZfUElYX0ZNVF9OT05FKSB7CisgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19F UlJPUiwgIkludmFsaWQgb3V0cHV0IGZvcm1hdC5cbiIpOworICAgICAgICAgICAgcmV0dXJuIEFW RVJST1IoRUlOVkFMKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIHMtPnZrY3R4 Lm91dHB1dF9mb3JtYXQgPSBzLT52a2N0eC5pbnB1dF9mb3JtYXQ7CisgICAgfQorCisgICAgaWYg KHMtPnZrY3R4LmlucHV0X2Zvcm1hdCA9PSBBVl9QSVhfRk1UX0JBWUVSX1JHR0IxNikgeworICAg ICAgICBpZiAocy0+dmtjdHgub3V0cHV0X2Zvcm1hdCA9PSBzLT52a2N0eC5pbnB1dF9mb3JtYXQp IHsKKyAgICAgICAgICAgIHMtPnZrY3R4Lm91dHB1dF9mb3JtYXQgPSBBVl9QSVhfRk1UX1JHQkE2 NDsKKyAgICAgICAgfSBlbHNlIGlmICghZmZfdmtfbXRfaXNfbnBfcmdiKHMtPnZrY3R4Lm91dHB1 dF9mb3JtYXQpKSB7CisgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIlVu c3VwcG9ydGVkIG91dHB1dCBmb3JtYXQgZm9yIGRlYmF5ZXJcbiIpOworICAgICAgICAgICAgcmV0 dXJuIEFWRVJST1IoRUlOVkFMKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaW5saW5rLT53ICE9 IG91dGxpbmstPncgfHwgaW5saW5rLT53ICE9IG91dGxpbmstPncpIHsKKyAgICAgICAgICAgIGF2 X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiU2NhbGluZyBpcyBub3Qgc3VwcG9ydGVkIHdpdGgg ZGViYXllcmluZ1xuIik7CisgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9QQVRDSFdFTENPTUU7 CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKHMtPnZrY3R4Lm91dHB1dF9mb3JtYXQgIT0gcy0+ dmtjdHguaW5wdXRfZm9ybWF0KSB7CisgICAgICAgIGlmICghZmZfdmtfbXRfaXNfbnBfcmdiKHMt PnZrY3R4LmlucHV0X2Zvcm1hdCkpIHsKKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9H X0VSUk9SLCAiVW5zdXBwb3J0ZWQgaW5wdXQgZm9ybWF0IGZvciBjb252ZXJzaW9uXG4iKTsKKyAg ICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7CisgICAgICAgIH0KKyAgICAgICAgaWYg KHMtPnZrY3R4Lm91dHB1dF9mb3JtYXQgIT0gQVZfUElYX0ZNVF9OVjEyICYmCisgICAgICAgICAg ICBzLT52a2N0eC5vdXRwdXRfZm9ybWF0ICE9IEFWX1BJWF9GTVRfWVVWNDIwUCAmJgorICAgICAg ICAgICAgcy0+dmtjdHgub3V0cHV0X2Zvcm1hdCAhPSBBVl9QSVhfRk1UX1lVVjQ0NFApIHsKKyAg ICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiVW5zdXBwb3J0ZWQgb3V0cHV0 IGZvcm1hdFxuIik7CisgICAgICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOworICAgICAg ICB9CisgICAgfSBlbHNlIGlmIChzLT5vdXRfcmFuZ2UgIT0gQVZDT0xfUkFOR0VfVU5TUEVDSUZJ RUQpIHsKKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJDYW5ub3QgY2hhbmdl IHJhbmdlIHdpdGhvdXQgY29udmVydGluZyBmb3JtYXRcbiIpOworICAgICAgICByZXR1cm4gQVZF UlJPUihFSU5WQUwpOworICAgIH0KKworICAgIHJldHVybiBmZl92a19maWx0ZXJfY29uZmlnX291 dHB1dChvdXRsaW5rKTsKK30KKworc3RhdGljIHZvaWQgc2NhbGVfdnVsa2FuX3VuaW5pdChBVkZp bHRlckNvbnRleHQgKmF2Y3R4KQoreworICAgIFNjYWxlVnVsa2FuQ29udGV4dCAqcyA9IGF2Y3R4 LT5wcml2OworICAgIEZGVnVsa2FuQ29udGV4dCAqdmtjdHggPSAmcy0+dmtjdHg7CisgICAgRkZW dWxrYW5GdW5jdGlvbnMgKnZrID0gJnZrY3R4LT52a2ZuOworCisgICAgZmZfdmtfZXhlY19wb29s X2ZyZWUodmtjdHgsICZzLT5lKTsKKyAgICBmZl92a19zaGFkZXJfZnJlZSh2a2N0eCwgJnMtPnNo ZCk7CisKKyAgICBpZiAocy0+c2FtcGxlcikKKyAgICAgICAgdmstPkRlc3Ryb3lTYW1wbGVyKHZr Y3R4LT5od2N0eC0+YWN0X2Rldiwgcy0+c2FtcGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgIHZrY3R4LT5od2N0eC0+YWxsb2MpOworCisgICAgZmZfdmtfdW5pbml0KCZzLT52a2N0eCk7 CisKKyAgICBzLT5pbml0aWFsaXplZCA9IDA7Cit9CisKKyNkZWZpbmUgT0ZGU0VUKHgpIG9mZnNl dG9mKFNjYWxlVnVsa2FuQ29udGV4dCwgeCkKKyNkZWZpbmUgRkxBR1MgKEFWX09QVF9GTEFHX0ZJ TFRFUklOR19QQVJBTSB8IEFWX09QVF9GTEFHX1ZJREVPX1BBUkFNKQorc3RhdGljIGNvbnN0IEFW T3B0aW9uIHNjYWxlX3Z1bGthbl9vcHRpb25zW10gPSB7CisgICAgeyAidyIsICJPdXRwdXQgdmlk ZW8gd2lkdGgiLCAgT0ZGU0VUKHdfZXhwciksIEFWX09QVF9UWVBFX1NUUklORywgey5zdHIgPSAi aXcifSwgLmZsYWdzID0gRkxBR1MgfSwKKyAgICB7ICJoIiwgIk91dHB1dCB2aWRlbyBoZWlnaHQi LCBPRkZTRVQoaF9leHByKSwgQVZfT1BUX1RZUEVfU1RSSU5HLCB7LnN0ciA9ICJpaCJ9LCAuZmxh Z3MgPSBGTEFHUyB9LAorICAgIHsgInNjYWxlciIsICJTY2FsZXIgZnVuY3Rpb24iLCBPRkZTRVQo c2NhbGVyKSwgQVZfT1BUX1RZUEVfSU5ULCB7Lmk2NCA9IEZfQklMSU5FQVJ9LCAwLCBGX05CLCAu ZmxhZ3MgPSBGTEFHUywgLnVuaXQgPSAic2NhbGVyIiB9LAorICAgICAgICB7ICJiaWxpbmVhciIs ICJCaWxpbmVhciBpbnRlcnBvbGF0aW9uIChmYXN0ZXN0KSIsIDAsIEFWX09QVF9UWVBFX0NPTlNU LCB7Lmk2NCA9IEZfQklMSU5FQVJ9LCAwLCAwLCAuZmxhZ3MgPSBGTEFHUywgLnVuaXQgPSAic2Nh bGVyIiB9LAorICAgICAgICB7ICJuZWFyZXN0IiwgIk5lYXJlc3QgKHVzZWZ1bCBmb3IgcGl4ZWwg YXJ0KSIsIDAsIEFWX09QVF9UWVBFX0NPTlNULCB7Lmk2NCA9IEZfTkVBUkVTVH0sIDAsIDAsIC5m bGFncyA9IEZMQUdTLCAudW5pdCA9ICJzY2FsZXIiIH0sCisgICAgeyAiZGViYXllciIsICJEZWJh eWVyIGFsZ29yaXRobSB0byB1c2UiLCBPRkZTRVQoZGViYXllciksIEFWX09QVF9UWVBFX0lOVCwg ey5pNjQgPSBEQl9CSUxJTkVBUl9IUX0sIDAsIERCX05CLCAuZmxhZ3MgPSBGTEFHUywgLnVuaXQg PSAiZGViYXllciIgfSwKKyAgICAgICAgeyAiYmlsaW5lYXIiLCAiQmlsaW5lYXIgZGViYXllcmlu ZyAoZmFzdGVzdCkiLCAwLCBBVl9PUFRfVFlQRV9DT05TVCwgey5pNjQgPSBEQl9CSUxJTkVBUn0s IDAsIDAsIC5mbGFncyA9IEZMQUdTLCAudW5pdCA9ICJkZWJheWVyIiB9LAorICAgICAgICB7ICJi aWxpbmVhcl9ocSIsICJCaWxpbmVhciBkZWJheWVyaW5nIChoaWdoIHF1YWxpdHkpIiwgMCwgQVZf T1BUX1RZUEVfQ09OU1QsIHsuaTY0ID0gREJfQklMSU5FQVJfSFF9LCAwLCAwLCAuZmxhZ3MgPSBG TEFHUywgLnVuaXQgPSAiZGViYXllciIgfSwKKyAgICB7ICJmb3JtYXQiLCAiT3V0cHV0IHZpZGVv IGZvcm1hdCAoc29mdHdhcmUgZm9ybWF0IG9mIGhhcmR3YXJlIGZyYW1lcykiLCBPRkZTRVQob3V0 X2Zvcm1hdF9zdHJpbmcpLCBBVl9PUFRfVFlQRV9TVFJJTkcsIC5mbGFncyA9IEZMQUdTIH0sCisg ICAgeyAib3V0X3JhbmdlIiwgIk91dHB1dCBjb2xvdXIgcmFuZ2UgKGZyb20gMCB0byAyKSAoZGVm YXVsdCAwKSIsIE9GRlNFVChvdXRfcmFuZ2UpLCBBVl9PUFRfVFlQRV9JTlQsIHsuaTY0ID0gQVZD T0xfUkFOR0VfVU5TUEVDSUZJRUR9LCBBVkNPTF9SQU5HRV9VTlNQRUNJRklFRCwgQVZDT0xfUkFO R0VfSlBFRywgLmZsYWdzID0gRkxBR1MsIC51bml0ID0gInJhbmdlIiB9LAorICAgICAgICB7ICJm dWxsIiwgIkZ1bGwgcmFuZ2UiLCAwLCBBVl9PUFRfVFlQRV9DT05TVCwgeyAuaTY0ID0gQVZDT0xf UkFOR0VfSlBFRyB9LCAwLCAwLCBGTEFHUywgLnVuaXQgPSAicmFuZ2UiIH0sCisgICAgICAgIHsg ImxpbWl0ZWQiLCAiTGltaXRlZCByYW5nZSIsIDAsIEFWX09QVF9UWVBFX0NPTlNULCB7IC5pNjQg PSBBVkNPTF9SQU5HRV9NUEVHIH0sIDAsIDAsIEZMQUdTLCAudW5pdCA9ICJyYW5nZSIgfSwKKyAg ICAgICAgeyAianBlZyIsICJGdWxsIHJhbmdlIiwgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsgLmk2 NCA9IEFWQ09MX1JBTkdFX0pQRUcgfSwgMCwgMCwgRkxBR1MsIC51bml0ID0gInJhbmdlIiB9LAor ICAgICAgICB7ICJtcGVnIiwgIkxpbWl0ZWQgcmFuZ2UiLCAwLCBBVl9PUFRfVFlQRV9DT05TVCwg eyAuaTY0ID0gQVZDT0xfUkFOR0VfTVBFRyB9LCAwLCAwLCBGTEFHUywgLnVuaXQgPSAicmFuZ2Ui IH0sCisgICAgICAgIHsgInR2IiwgIkxpbWl0ZWQgcmFuZ2UiLCAwLCBBVl9PUFRfVFlQRV9DT05T VCwgeyAuaTY0ID0gQVZDT0xfUkFOR0VfTVBFRyB9LCAwLCAwLCBGTEFHUywgLnVuaXQgPSAicmFu Z2UiIH0sCisgICAgICAgIHsgInBjIiwgIkZ1bGwgcmFuZ2UiLCAwLCBBVl9PUFRfVFlQRV9DT05T VCwgeyAuaTY0ID0gQVZDT0xfUkFOR0VfSlBFRyB9LCAwLCAwLCBGTEFHUywgLnVuaXQgPSAicmFu Z2UiIH0sCisgICAgeyBOVUxMIH0sCit9OworCitBVkZJTFRFUl9ERUZJTkVfQ0xBU1Moc2NhbGVf dnVsa2FuKTsKKworc3RhdGljIGNvbnN0IEFWRmlsdGVyUGFkIHNjYWxlX3Z1bGthbl9pbnB1dHNb XSA9IHsKKyAgICB7CisgICAgICAgIC5uYW1lICAgICAgICAgPSAiZGVmYXVsdCIsCisgICAgICAg IC50eXBlICAgICAgICAgPSBBVk1FRElBX1RZUEVfVklERU8sCisgICAgICAgIC5maWx0ZXJfZnJh bWUgPSAmc2NhbGVfdnVsa2FuX2ZpbHRlcl9mcmFtZSwKKyAgICAgICAgLmNvbmZpZ19wcm9wcyA9 ICZmZl92a19maWx0ZXJfY29uZmlnX2lucHV0LAorICAgIH0sCit9OworCitzdGF0aWMgY29uc3Qg QVZGaWx0ZXJQYWQgc2NhbGVfdnVsa2FuX291dHB1dHNbXSA9IHsKKyAgICB7CisgICAgICAgIC5u YW1lID0gImRlZmF1bHQiLAorICAgICAgICAudHlwZSA9IEFWTUVESUFfVFlQRV9WSURFTywKKyAg ICAgICAgLmNvbmZpZ19wcm9wcyA9ICZzY2FsZV92dWxrYW5fY29uZmlnX291dHB1dCwKKyAgICB9 LAorfTsKKworY29uc3QgRkZGaWx0ZXIgZmZfdmZfc2NhbGVfdnVsa2FuID0geworICAgIC5wLm5h bWUgICAgICAgICA9ICJzY2FsZV92dWxrYW4iLAorICAgIC5wLmRlc2NyaXB0aW9uICA9IE5VTExf SUZfQ09ORklHX1NNQUxMKCJTY2FsZSBWdWxrYW4gZnJhbWVzIiksCisgICAgLnAucHJpdl9jbGFz cyAgID0gJnNjYWxlX3Z1bGthbl9jbGFzcywKKyAgICAucC5mbGFncyAgICAgICAgPSBBVkZJTFRF Ul9GTEFHX0hXREVWSUNFLAorICAgIC5wcml2X3NpemUgICAgICA9IHNpemVvZihTY2FsZVZ1bGth bkNvbnRleHQpLAorICAgIC5pbml0ICAgICAgICAgICA9ICZmZl92a19maWx0ZXJfaW5pdCwKKyAg ICAudW5pbml0ICAgICAgICAgPSAmc2NhbGVfdnVsa2FuX3VuaW5pdCwKKyAgICBGSUxURVJfSU5Q VVRTKHNjYWxlX3Z1bGthbl9pbnB1dHMpLAorICAgIEZJTFRFUl9PVVRQVVRTKHNjYWxlX3Z1bGth bl9vdXRwdXRzKSwKKyAgICBGSUxURVJfU0lOR0xFX1BJWEZNVChBVl9QSVhfRk1UX1ZVTEtBTiks CisgICAgLmZsYWdzX2ludGVybmFsID0gRkZfRklMVEVSX0ZMQUdfSFdGUkFNRV9BV0FSRSwKK307 Ci0tIAoyLjQ5LjEKCgpGcm9tIDIwOTVjOWFiZGU0YmRlZDQyMzA2YjljYjgzMTVhM2I4NzU0NDhk MDggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCkZyb206IEphbWFpa2ExIDxsdWthc3pjejE4QHdw LnBsPgpEYXRlOiBXZWQsIDMgU2VwIDIwMjUgMTM6MDE6MTEgKzAwMDAKU3ViamVjdDogW1BBVENI IDAyMy8xMThdIENoYW5naW5nIHZ1bGthbiBmaWxlIGRpcmVjdG9yeQoKLS0tCiBsaWJhdmZpbHRl ci92Zl9zY2RldF92dWxrYW4uYyB8IDQxMiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCiAxIGZpbGUgY2hhbmdlZCwgNDEyIGRlbGV0aW9ucygtKQogZGVsZXRlIG1vZGUgMTAwNjQ0 IGxpYmF2ZmlsdGVyL3ZmX3NjZGV0X3Z1bGthbi5jCgpkaWZmIC0tZ2l0IGEvbGliYXZmaWx0ZXIv dmZfc2NkZXRfdnVsa2FuLmMgYi9saWJhdmZpbHRlci92Zl9zY2RldF92dWxrYW4uYwpkZWxldGVk IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWUyYmYyNDhhMi4uMDAwMDAwMDAwMAotLS0gYS9saWJh dmZpbHRlci92Zl9zY2RldF92dWxrYW4uYworKysgL2Rldi9udWxsCkBAIC0xLDQxMiArMCwwIEBA Ci0vKgotICogQ29weXJpZ2h0IDIwMjUgKGMpIE5pa2xhcyBIYWFzCi0gKgotICogVGhpcyBmaWxl IGlzIHBhcnQgb2YgRkZtcGVnLgotICoKLSAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVk IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyLjEg b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0g KgotICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1 c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w bGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk IGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9u ZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91 bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBN QSAwMjExMC0xMzAxIFVTQQotICovCi0KLSNpbmNsdWRlICJsaWJhdnV0aWwvYXZhc3NlcnQuaCIK LSNpbmNsdWRlICJsaWJhdnV0aWwvdnVsa2FuX3NwaXJ2LmgiCi0jaW5jbHVkZSAibGliYXZ1dGls L29wdC5oIgotI2luY2x1ZGUgImxpYmF2dXRpbC90aW1lc3RhbXAuaCIKLSNpbmNsdWRlICJ2dWxr YW5fZmlsdGVyLmgiCi0KLSNpbmNsdWRlICJmaWx0ZXJzLmgiCi0KLXR5cGVkZWYgc3RydWN0IFNj ZW5lRGV0ZWN0VnVsa2FuQ29udGV4dCB7Ci0gICAgRkZWdWxrYW5Db250ZXh0IHZrY3R4OwotCi0g ICAgaW50IGluaXRpYWxpemVkOwotICAgIEZGVmtFeGVjUG9vbCBlOwotICAgIEFWVnVsa2FuRGV2 aWNlUXVldWVGYW1pbHkgKnFmOwotICAgIEZGVnVsa2FuU2hhZGVyIHNoZDsKLSAgICBBVkJ1ZmZl clBvb2wgKmRldF9idWZfcG9vbDsKLQotICAgIGRvdWJsZSB0aHJlc2hvbGQ7Ci0gICAgaW50IHNj X3Bhc3M7Ci0KLSAgICBpbnQgbmJfcGxhbmVzOwotICAgIGRvdWJsZSBwcmV2X21hZmQ7Ci0gICAg QVZGcmFtZSAqcHJldjsKLSAgICBBVkZyYW1lICpjdXI7Ci19IFNjZW5lRGV0ZWN0VnVsa2FuQ29u dGV4dDsKLQotdHlwZWRlZiBzdHJ1Y3QgU2NlbmVEZXRlY3RCdWYgewotI2RlZmluZSBTTElDRVMg MTYKLSAgICB1aW50MzJfdCBmcmFtZV9zYWRbU0xJQ0VTXTsKLX0gU2NlbmVEZXRlY3RCdWY7Ci0K LXN0YXRpYyBhdl9jb2xkIGludCBpbml0X2ZpbHRlcihBVkZpbHRlckNvbnRleHQgKmN0eCkKLXsK LSAgICBpbnQgZXJyOwotICAgIHVpbnQ4X3QgKnNwdl9kYXRhOwotICAgIHNpemVfdCBzcHZfbGVu OwotICAgIHZvaWQgKnNwdl9vcGFxdWUgPSBOVUxMOwotICAgIFNjZW5lRGV0ZWN0VnVsa2FuQ29u dGV4dCAqcyA9IGN0eC0+cHJpdjsKLSAgICBGRlZ1bGthbkNvbnRleHQgKnZrY3R4ID0gJnMtPnZr Y3R4OwotICAgIEZGVnVsa2FuU2hhZGVyICpzaGQ7Ci0gICAgRkZWa1NQSVJWQ29tcGlsZXIgKnNw djsKLSAgICBGRlZ1bGthbkRlc2NyaXB0b3JTZXRCaW5kaW5nICpkZXNjOwotCi0gICAgY29uc3Qg QVZQaXhGbXREZXNjcmlwdG9yICpwaXhkZXNjID0gYXZfcGl4X2ZtdF9kZXNjX2dldChzLT52a2N0 eC5pbnB1dF9mb3JtYXQpOwotICAgIGNvbnN0IGludCBsdW1hb25seSA9ICEocGl4ZGVzYy0+Zmxh Z3MgJiBBVl9QSVhfRk1UX0ZMQUdfUkdCKSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgIChw aXhkZXNjLT5mbGFncyAmIEFWX1BJWF9GTVRfRkxBR19QTEFOQVIpOwotICAgIHMtPm5iX3BsYW5l cyA9IGx1bWFvbmx5ID8gMSA6IGF2X3BpeF9mbXRfY291bnRfcGxhbmVzKHMtPnZrY3R4LmlucHV0 X2Zvcm1hdCk7Ci0KLSAgICBzcHYgPSBmZl92a19zcGlydl9pbml0KCk7Ci0gICAgaWYgKCFzcHYp IHsKLSAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiVW5hYmxlIHRvIGluaXRpYWxp emUgU1BJUi1WIGNvbXBpbGVyIVxuIik7Ci0gICAgICAgIHJldHVybiBBVkVSUk9SX0VYVEVSTkFM OwotICAgIH0KLQotICAgIHMtPnFmID0gZmZfdmtfcWZfZmluZCh2a2N0eCwgVktfUVVFVUVfQ09N UFVURV9CSVQsIDApOwotICAgIGlmICghcy0+cWYpIHsKLSAgICAgICAgYXZfbG9nKGN0eCwgQVZf TE9HX0VSUk9SLCAiRGV2aWNlIGhhcyBubyBjb21wdXRlIHF1ZXVlc1xuIik7Ci0gICAgICAgIGVy ciA9IEFWRVJST1IoRU5PVFNVUCk7Ci0gICAgICAgIGdvdG8gZmFpbDsKLSAgICB9Ci0KLSAgICBS RVQoZmZfdmtfZXhlY19wb29sX2luaXQodmtjdHgsIHMtPnFmLCAmcy0+ZSwgcy0+cWYtPm51bSo0 LCAwLCAwLCAwLCBOVUxMKSk7Ci0gICAgUkVUKGZmX3ZrX3NoYWRlcl9pbml0KHZrY3R4LCAmcy0+ c2hkLCAic2NkZXQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICBWS19TSEFERVJfU1RBR0Vf Q09NUFVURV9CSVQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBjaGFyICpbXSkg eyAiR0xfS0hSX3NoYWRlcl9zdWJncm91cF9hcml0aG1ldGljIiB9LCAxLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAzMiwgMzIsIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDApKTsK LSAgICBzaGQgPSAmcy0+c2hkOwotCi0gICAgZGVzYyA9IChGRlZ1bGthbkRlc2NyaXB0b3JTZXRC aW5kaW5nIFtdKSB7Ci0gICAgICAgIHsKLSAgICAgICAgICAgIC5uYW1lICAgICAgID0gInByZXZf aW1nIiwKLSAgICAgICAgICAgIC50eXBlICAgICAgID0gVktfREVTQ1JJUFRPUl9UWVBFX1NUT1JB R0VfSU1BR0UsCi0gICAgICAgICAgICAubWVtX2xheW91dCA9IGZmX3ZrX3NoYWRlcl9yZXBfZm10 KHMtPnZrY3R4LmlucHV0X2Zvcm1hdCwgRkZfVktfUkVQX1VJTlQpLAotICAgICAgICAgICAgLm1l bV9xdWFsaSAgPSAicmVhZG9ubHkiLAotICAgICAgICAgICAgLmRpbWVuc2lvbnMgPSAyLAotICAg ICAgICAgICAgLmVsZW1zICAgICAgPSBhdl9waXhfZm10X2NvdW50X3BsYW5lcyhzLT52a2N0eC5p bnB1dF9mb3JtYXQpLAotICAgICAgICAgICAgLnN0YWdlcyAgICAgPSBWS19TSEFERVJfU1RBR0Vf Q09NUFVURV9CSVQsCi0gICAgICAgIH0sIHsKLSAgICAgICAgICAgIC5uYW1lICAgICAgID0gImN1 cl9pbWciLAotICAgICAgICAgICAgLnR5cGUgICAgICAgPSBWS19ERVNDUklQVE9SX1RZUEVfU1RP UkFHRV9JTUFHRSwKLSAgICAgICAgICAgIC5tZW1fbGF5b3V0ID0gZmZfdmtfc2hhZGVyX3JlcF9m bXQocy0+dmtjdHguaW5wdXRfZm9ybWF0LCBGRl9WS19SRVBfVUlOVCksCi0gICAgICAgICAgICAu bWVtX3F1YWxpICA9ICJyZWFkb25seSIsCi0gICAgICAgICAgICAuZGltZW5zaW9ucyA9IDIsCi0g ICAgICAgICAgICAuZWxlbXMgICAgICA9IGF2X3BpeF9mbXRfY291bnRfcGxhbmVzKHMtPnZrY3R4 LmlucHV0X2Zvcm1hdCksCi0gICAgICAgICAgICAuc3RhZ2VzICAgICA9IFZLX1NIQURFUl9TVEFH RV9DT01QVVRFX0JJVCwKLSAgICAgICAgfSwgewotICAgICAgICAgICAgLm5hbWUgICAgICAgID0g InNhZF9idWZmZXIiLAotICAgICAgICAgICAgLnR5cGUgICAgICAgID0gVktfREVTQ1JJUFRPUl9U WVBFX1NUT1JBR0VfQlVGRkVSLAotICAgICAgICAgICAgLnN0YWdlcyAgICAgID0gVktfU0hBREVS X1NUQUdFX0NPTVBVVEVfQklULAotICAgICAgICAgICAgLmJ1Zl9jb250ZW50ID0gInVpbnQgZnJh bWVfc2FkW107IiwKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICBSRVQoZmZfdmtfc2hhZGVyX2Fk ZF9kZXNjcmlwdG9yX3NldCh2a2N0eCwgJnMtPnNoZCwgZGVzYywgMywgMCwgMCkpOwotCi0gICAg R0xTTEMoMCwgc2hhcmVkIHVpbnQgd2dfc3VtOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICApOwotICAgIEdMU0xDKDAsIHZvaWQgbWFpbigpICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBHTFNMQygw LCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICk7Ci0gICAgR0xTTEYoMSwgICAgIGNvbnN0IHVpbnQgc2xpY2UgPSBnbF9Xb3Jr R3JvdXBJRC54ICUlICV1OyAgICAgICAgICAgICxTTElDRVMpOwotICAgIEdMU0xDKDEsICAgICBj b25zdCBpdmVjMiBwb3MgPSBpdmVjMihnbF9HbG9iYWxJbnZvY2F0aW9uSUQueHkpOyAgICAgICAg ICAgKTsKLSAgICBHTFNMQygxLCAgICAgd2dfc3VtID0gMDsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgR0xTTEMoMSwgICAgIGJhcnJpZXIo KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwot ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcy0+bmJfcGxhbmVzOyBpKyspIHsKLSAgICAgICAgR0xT TEYoMSwgaWYgKElTX1dJVEhJTihwb3MsIGltYWdlU2l6ZShjdXJfaW1nWyVkXSkpKSB7ICAgICAg ICAgICAgICAsaSk7Ci0gICAgICAgIEdMU0xGKDIsICAgICB1dmVjNCBwcmV2ID0gaW1hZ2VMb2Fk KHByZXZfaW1nWyVkXSwgcG9zKTsgICAgICAgICAgICAgLGkpOwotICAgICAgICBHTFNMRigyLCAg ICAgdXZlYzQgY3VyICA9IGltYWdlTG9hZChjdXJfaW1nWyVkXSwgIHBvcyk7ICAgICAgICAgICAg ICxpKTsKLSAgICAgICAgR0xTTEMoMiwgICAgIHV2ZWM0IHNhZCA9IGFicyhpdmVjNChjdXIpIC0g aXZlYzQocHJldikpOyAgICAgICAgICAgICAgICk7Ci0gICAgICAgIEdMU0xDKDIsICAgICB1aW50 IHN1bSA9IHN1Ymdyb3VwQWRkKHNhZC54ICsgc2FkLnkgKyBzYWQueik7ICAgICAgICAgICApOwot ICAgICAgICBHTFNMQygyLCAgICAgaWYgKHN1Ymdyb3VwRWxlY3QoKSkgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgR0xTTEMoMywgICAgICAgICBhdG9taWNB ZGQod2dfc3VtLCBzdW0pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAg IEdMU0xDKDEsIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICApOwotICAgIH0KLSAgICBHTFNMQygxLCAgICAgYmFycmllcigpOyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgR0xT TEMoMSwgICAgIGlmIChnbF9Mb2NhbEludm9jYXRpb25JbmRleCA9PSAwKSAgICAgICAgICAgICAg ICAgICAgICAgICAgICApOwotICAgIEdMU0xDKDIsICAgICAgICAgYXRvbWljQWRkKGZyYW1lX3Nh ZFtzbGljZV0sIHdnX3N1bSk7ICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBHTFNMQygwLCB9 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICk7Ci0KLSAgICBSRVQoc3B2LT5jb21waWxlX3NoYWRlcih2a2N0eCwgc3B2LCAmcy0+ c2hkLCAmc3B2X2RhdGEsICZzcHZfbGVuLCAibWFpbiIsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgJnNwdl9vcGFxdWUpKTsKLSAgICBSRVQoZmZfdmtfc2hhZGVyX2xpbmsodmtjdHgsICZz LT5zaGQsIHNwdl9kYXRhLCBzcHZfbGVuLCAibWFpbiIpKTsKLQotICAgIFJFVChmZl92a19zaGFk ZXJfcmVnaXN0ZXJfZXhlYyh2a2N0eCwgJnMtPmUsICZzLT5zaGQpKTsKLQotICAgIHMtPmluaXRp YWxpemVkID0gMTsKLQotZmFpbDoKLSAgICBpZiAoc3B2X29wYXF1ZSkKLSAgICAgICAgc3B2LT5m cmVlX3NoYWRlcihzcHYsICZzcHZfb3BhcXVlKTsKLSAgICBpZiAoc3B2KQotICAgICAgICBzcHYt PnVuaW5pdCgmc3B2KTsKLQotICAgIHJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBkb3VibGUgZXZh bHVhdGUoQVZGaWx0ZXJDb250ZXh0ICpjdHgsIGNvbnN0IFNjZW5lRGV0ZWN0QnVmICpidWYpCi17 Ci0gICAgU2NlbmVEZXRlY3RWdWxrYW5Db250ZXh0ICpzID0gY3R4LT5wcml2OwotICAgIGNvbnN0 IEFWUGl4Rm10RGVzY3JpcHRvciAqZGVzYyA9IGF2X3BpeF9mbXRfZGVzY19nZXQocy0+dmtjdHgu aW5wdXRfZm9ybWF0KTsKLSAgICBjb25zdCBBVkZpbHRlckxpbmsgKmlubGluayA9IGN0eC0+aW5w dXRzWzBdOwotICAgIHVpbnQ2NF90IGNvdW50OwotICAgIGRvdWJsZSBtYWZkLCBkaWZmOwotCi0g ICAgdWludDY0X3Qgc2FkID0gMDsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IFNMSUNFUzsgaSsr KQotICAgICAgICBzYWQgKz0gYnVmLT5mcmFtZV9zYWRbaV07Ci0KLSAgICBhdl9hc3NlcnQyKHMt Pm5iX3BsYW5lcyA9PSAxIHx8ICEoZGVzYy0+bG9nMl9jaHJvbWFfdyB8fCBkZXNjLT5sb2cyX2No cm9tYV9oKSk7Ci0gICAgY291bnQgPSBzLT5uYl9wbGFuZXMgKiBpbmxpbmstPncgKiBpbmxpbmst Pmg7Ci0gICAgbWFmZCA9IChkb3VibGUpIHNhZCAqIDEwMC4wIC8gY291bnQgLyAoMVVMTCA8PCBk ZXNjLT5jb21wWzBdLmRlcHRoKTsKLSAgICBkaWZmID0gZmFicyhtYWZkIC0gcy0+cHJldl9tYWZk KTsKLSAgICBzLT5wcmV2X21hZmQgPSBtYWZkOwotCi0gICAgcmV0dXJuIGF2X2NsaXBmKEZGTUlO KG1hZmQsIGRpZmYpLCAwLjAsIDEwMC4wKTsKLX0KLQotc3RhdGljIGludCBzY2RldF92dWxrYW5f ZmlsdGVyX2ZyYW1lKEFWRmlsdGVyTGluayAqbGluaywgQVZGcmFtZSAqaW4pCi17Ci0gICAgaW50 IGVycjsKLSAgICBBVkZpbHRlckNvbnRleHQgKmN0eCA9IGxpbmstPmRzdDsKLSAgICBTY2VuZURl dGVjdFZ1bGthbkNvbnRleHQgKnMgPSBjdHgtPnByaXY7Ci0gICAgQVZGaWx0ZXJMaW5rICpvdXRs aW5rID0gY3R4LT5vdXRwdXRzWzBdOwotCi0gICAgVmtJbWFnZVZpZXcgcHJldl92aWV3c1tBVl9O VU1fREFUQV9QT0lOVEVSU107Ci0gICAgVmtJbWFnZVZpZXcgY3VyX3ZpZXdzW0FWX05VTV9EQVRB X1BPSU5URVJTXTsKLSAgICBWa0ltYWdlTWVtb3J5QmFycmllcjIgaW1nX2Jhcls4XTsKLSAgICBp bnQgbmJfaW1nX2JhciA9IDA7Ci0KLSAgICBGRlZ1bGthbkNvbnRleHQgKnZrY3R4ID0gJnMtPnZr Y3R4OwotICAgIEZGVnVsa2FuRnVuY3Rpb25zICp2ayA9ICZ2a2N0eC0+dmtmbjsKLSAgICBGRlZr RXhlY0NvbnRleHQgKmV4ZWMgPSBOVUxMOwotICAgIEFWQnVmZmVyUmVmICpidWYgPSBOVUxMOwot ICAgIEZGVmtCdWZmZXIgKmJ1Zl92azsKLQotICAgIFNjZW5lRGV0ZWN0QnVmICpzYWQ7Ci0gICAg ZG91YmxlIHNjb3JlID0gMC4wOwotICAgIGNoYXIgc3RyWzY0XTsKLQotICAgIGlmICghcy0+aW5p dGlhbGl6ZWQpCi0gICAgICAgIFJFVChpbml0X2ZpbHRlcihjdHgpKTsKLQotICAgIGF2X2ZyYW1l X2ZyZWUoJnMtPnByZXYpOwotICAgIHMtPnByZXYgPSBzLT5jdXI7Ci0gICAgcy0+Y3VyID0gYXZf ZnJhbWVfY2xvbmUoaW4pOwotICAgIGlmICghcy0+cHJldikKLSAgICAgICAgZ290byBkb25lOwot Ci0gICAgUkVUKGZmX3ZrX2dldF9wb29sZWRfYnVmZmVyKHZrY3R4LCAmcy0+ZGV0X2J1Zl9wb29s LCAmYnVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19CVUZGRVJfVVNBR0Vf VFJBTlNGRVJfRFNUX0JJVCB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZLX0JV RkZFUl9VU0FHRV9TVE9SQUdFX0JVRkZFUl9CSVQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihTY2Vu ZURldGVjdEJ1ZiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZLX01FTU9SWV9Q Uk9QRVJUWV9ERVZJQ0VfTE9DQUxfQklUIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgVktfTUVNT1JZX1BST1BFUlRZX0hPU1RfVklTSUJMRV9CSVQgfAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBWS19NRU1PUllfUFJPUEVSVFlfSE9TVF9DT0hFUkVOVF9CSVQpKTsK LSAgICBidWZfdmsgPSAoRkZWa0J1ZmZlciAqKWJ1Zi0+ZGF0YTsKLSAgICBzYWQgPSAoU2NlbmVE ZXRlY3RCdWYgKikgYnVmX3ZrLT5tYXBwZWRfbWVtOwotCi0gICAgZXhlYyA9IGZmX3ZrX2V4ZWNf Z2V0KHZrY3R4LCAmcy0+ZSk7Ci0gICAgZmZfdmtfZXhlY19zdGFydCh2a2N0eCwgZXhlYyk7Ci0K LSAgICBSRVQoZmZfdmtfZXhlY19hZGRfZGVwX2ZyYW1lKHZrY3R4LCBleGVjLCBzLT5wcmV2LAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfUElQRUxJTkVfU1RBR0VfMl9OT05F LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfUElQRUxJTkVfU1RBR0VfMl9D T01QVVRFX1NIQURFUl9CSVQpKTsKLSAgICBSRVQoZmZfdmtfY3JlYXRlX2ltYWdldmlld3Modmtj dHgsIGV4ZWMsIHByZXZfdmlld3MsIHMtPnByZXYsIEZGX1ZLX1JFUF9VSU5UKSk7Ci0KLSAgICBm Zl92a19zaGFkZXJfdXBkYXRlX2ltZ19hcnJheSh2a2N0eCwgZXhlYywgJnMtPnNoZCwgcy0+cHJl diwgcHJldl92aWV3cywgMCwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBW S19JTUFHRV9MQVlPVVRfR0VORVJBTCwgVktfTlVMTF9IQU5ETEUpOwotCi0gICAgZmZfdmtfZnJh bWVfYmFycmllcih2a2N0eCwgZXhlYywgcy0+cHJldiwgaW1nX2JhciwgJm5iX2ltZ19iYXIsCi0g ICAgICAgICAgICAgICAgICAgICAgICBWS19QSVBFTElORV9TVEFHRV8yX0FMTF9DT01NQU5EU19C SVQsCi0gICAgICAgICAgICAgICAgICAgICAgICBWS19QSVBFTElORV9TVEFHRV8yX0NPTVBVVEVf U0hBREVSX0JJVCwKLSAgICAgICAgICAgICAgICAgICAgICAgIFZLX0FDQ0VTU19TSEFERVJfUkVB RF9CSVQsCi0gICAgICAgICAgICAgICAgICAgICAgICBWS19JTUFHRV9MQVlPVVRfR0VORVJBTCwK LSAgICAgICAgICAgICAgICAgICAgICAgIFZLX1FVRVVFX0ZBTUlMWV9JR05PUkVEKTsKLQotICAg IFJFVChmZl92a19leGVjX2FkZF9kZXBfZnJhbWUodmtjdHgsIGV4ZWMsIHMtPmN1ciwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZLX1BJUEVMSU5FX1NUQUdFXzJfTk9ORSwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZLX1BJUEVMSU5FX1NUQUdFXzJfQ09NUFVU RV9TSEFERVJfQklUKSk7Ci0gICAgUkVUKGZmX3ZrX2NyZWF0ZV9pbWFnZXZpZXdzKHZrY3R4LCBl eGVjLCBjdXJfdmlld3MsIHMtPmN1ciwgRkZfVktfUkVQX1VJTlQpKTsKLQotICAgIGZmX3ZrX3No YWRlcl91cGRhdGVfaW1nX2FycmF5KHZrY3R4LCBleGVjLCAmcy0+c2hkLCBzLT5jdXIsIGN1cl92 aWV3cywgMCwgMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19JTUFHRV9M QVlPVVRfR0VORVJBTCwgVktfTlVMTF9IQU5ETEUpOwotCi0gICAgZmZfdmtfZnJhbWVfYmFycmll cih2a2N0eCwgZXhlYywgcy0+Y3VyLCBpbWdfYmFyLCAmbmJfaW1nX2JhciwKLSAgICAgICAgICAg ICAgICAgICAgICAgIFZLX1BJUEVMSU5FX1NUQUdFXzJfQUxMX0NPTU1BTkRTX0JJVCwKLSAgICAg ICAgICAgICAgICAgICAgICAgIFZLX1BJUEVMSU5FX1NUQUdFXzJfQ09NUFVURV9TSEFERVJfQklU LAotICAgICAgICAgICAgICAgICAgICAgICAgVktfQUNDRVNTX1NIQURFUl9SRUFEX0JJVCwKLSAg ICAgICAgICAgICAgICAgICAgICAgIFZLX0lNQUdFX0xBWU9VVF9HRU5FUkFMLAotICAgICAgICAg ICAgICAgICAgICAgICAgVktfUVVFVUVfRkFNSUxZX0lHTk9SRUQpOwotCi0gICAgLyogemVybyBi dWZmZXIgKi8KLSAgICB2ay0+Q21kUGlwZWxpbmVCYXJyaWVyMihleGVjLT5idWYsICYoVmtEZXBl bmRlbmN5SW5mbykgewotICAgICAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfREVQ RU5ERU5DWV9JTkZPLAotICAgICAgICAgICAgLnBCdWZmZXJNZW1vcnlCYXJyaWVycyA9ICYoVmtC dWZmZXJNZW1vcnlCYXJyaWVyMikgewotICAgICAgICAgICAgICAgIC5zVHlwZSA9IFZLX1NUUlVD VFVSRV9UWVBFX0JVRkZFUl9NRU1PUllfQkFSUklFUl8yLAotICAgICAgICAgICAgICAgIC5zcmNT dGFnZU1hc2sgPSBWS19QSVBFTElORV9TVEFHRV8yX05PTkUsCi0gICAgICAgICAgICAgICAgLmRz dFN0YWdlTWFzayA9IFZLX1BJUEVMSU5FX1NUQUdFXzJfVFJBTlNGRVJfQklULAotICAgICAgICAg ICAgICAgIC5kc3RBY2Nlc3NNYXNrID0gVktfQUNDRVNTX1RSQU5TRkVSX1dSSVRFX0JJVCwKLSAg ICAgICAgICAgICAgICAuc3JjUXVldWVGYW1pbHlJbmRleCA9IFZLX1FVRVVFX0ZBTUlMWV9JR05P UkVELAotICAgICAgICAgICAgICAgIC5kc3RRdWV1ZUZhbWlseUluZGV4ID0gVktfUVVFVUVfRkFN SUxZX0lHTk9SRUQsCi0gICAgICAgICAgICAgICAgLmJ1ZmZlciA9IGJ1Zl92ay0+YnVmLAotICAg ICAgICAgICAgICAgIC5zaXplID0gYnVmX3ZrLT5zaXplLAotICAgICAgICAgICAgICAgIC5vZmZz ZXQgPSAwLAotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIC5idWZmZXJNZW1vcnlCYXJyaWVy Q291bnQgPSAxLAotICAgICAgICB9KTsKLQotICAgIHZrLT5DbWRGaWxsQnVmZmVyKGV4ZWMtPmJ1 ZiwgYnVmX3ZrLT5idWYsIDAsIGJ1Zl92ay0+c2l6ZSwgMHgwKTsKLQotICAgIHZrLT5DbWRQaXBl bGluZUJhcnJpZXIyKGV4ZWMtPmJ1ZiwgJihWa0RlcGVuZGVuY3lJbmZvKSB7Ci0gICAgICAgICAg ICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9ERVBFTkRFTkNZX0lORk8sCi0gICAgICAgICAg ICAucEltYWdlTWVtb3J5QmFycmllcnMgPSBpbWdfYmFyLAotICAgICAgICAgICAgLmltYWdlTWVt b3J5QmFycmllckNvdW50ID0gbmJfaW1nX2JhciwKLSAgICAgICAgICAgIC5wQnVmZmVyTWVtb3J5 QmFycmllcnMgPSAmKFZrQnVmZmVyTWVtb3J5QmFycmllcjIpIHsKLSAgICAgICAgICAgICAgICAu c1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9CVUZGRVJfTUVNT1JZX0JBUlJJRVJfMiwKLSAgICAg ICAgICAgICAgICAuc3JjU3RhZ2VNYXNrID0gVktfUElQRUxJTkVfU1RBR0VfMl9UUkFOU0ZFUl9C SVQsCi0gICAgICAgICAgICAgICAgLmRzdFN0YWdlTWFzayA9IFZLX1BJUEVMSU5FX1NUQUdFXzJf Q09NUFVURV9TSEFERVJfQklULAotICAgICAgICAgICAgICAgIC5zcmNBY2Nlc3NNYXNrID0gVktf QUNDRVNTX1RSQU5TRkVSX1dSSVRFX0JJVCwKLSAgICAgICAgICAgICAgICAuZHN0QWNjZXNzTWFz ayA9IFZLX0FDQ0VTU18yX1NIQURFUl9TVE9SQUdFX1JFQURfQklUIHwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFZLX0FDQ0VTU18yX1NIQURFUl9TVE9SQUdFX1dSSVRFX0JJVCwK LSAgICAgICAgICAgICAgICAuc3JjUXVldWVGYW1pbHlJbmRleCA9IFZLX1FVRVVFX0ZBTUlMWV9J R05PUkVELAotICAgICAgICAgICAgICAgIC5kc3RRdWV1ZUZhbWlseUluZGV4ID0gVktfUVVFVUVf RkFNSUxZX0lHTk9SRUQsCi0gICAgICAgICAgICAgICAgLmJ1ZmZlciA9IGJ1Zl92ay0+YnVmLAot ICAgICAgICAgICAgICAgIC5zaXplID0gYnVmX3ZrLT5zaXplLAotICAgICAgICAgICAgICAgIC5v ZmZzZXQgPSAwLAotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIC5idWZmZXJNZW1vcnlCYXJy aWVyQ291bnQgPSAxLAotICAgICAgICB9KTsKLQotICAgIFJFVChmZl92a19zaGFkZXJfdXBkYXRl X2Rlc2NfYnVmZmVyKCZzLT52a2N0eCwgZXhlYywgJnMtPnNoZCwgMCwgMiwgMCwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZfdmssIDAsIGJ1Zl92ay0+c2l6ZSwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19GT1JNQVRfVU5ERUZJ TkVEKSk7Ci0KLSAgICBmZl92a19leGVjX2JpbmRfc2hhZGVyKHZrY3R4LCBleGVjLCAmcy0+c2hk KTsKLQotICAgIHZrLT5DbWREaXNwYXRjaChleGVjLT5idWYsCi0gICAgICAgICAgICAgICAgICAg IEZGQUxJR04oaW4tPndpZHRoLCAgcy0+c2hkLmxnX3NpemVbMF0pIC8gcy0+c2hkLmxnX3NpemVb MF0sCi0gICAgICAgICAgICAgICAgICAgIEZGQUxJR04oaW4tPmhlaWdodCwgcy0+c2hkLmxnX3Np emVbMV0pIC8gcy0+c2hkLmxnX3NpemVbMV0sCi0gICAgICAgICAgICAgICAgICAgIHMtPnNoZC5s Z19zaXplWzJdKTsKLQotICAgIHZrLT5DbWRQaXBlbGluZUJhcnJpZXIyKGV4ZWMtPmJ1ZiwgJihW a0RlcGVuZGVuY3lJbmZvKSB7Ci0gICAgICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQ RV9ERVBFTkRFTkNZX0lORk8sCi0gICAgICAgICAgICAucEJ1ZmZlck1lbW9yeUJhcnJpZXJzID0g JihWa0J1ZmZlck1lbW9yeUJhcnJpZXIyKSB7Ci0gICAgICAgICAgICAgICAgLnNUeXBlID0gVktf U1RSVUNUVVJFX1RZUEVfQlVGRkVSX01FTU9SWV9CQVJSSUVSXzIsCi0gICAgICAgICAgICAgICAg LnNyY1N0YWdlTWFzayA9IFZLX1BJUEVMSU5FX1NUQUdFXzJfQ09NUFVURV9TSEFERVJfQklULAot ICAgICAgICAgICAgICAgIC5kc3RTdGFnZU1hc2sgPSBWS19QSVBFTElORV9TVEFHRV8yX0hPU1Rf QklULAotICAgICAgICAgICAgICAgIC5zcmNBY2Nlc3NNYXNrID0gVktfQUNDRVNTXzJfU0hBREVS X1NUT1JBR0VfUkVBRF9CSVQgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktf QUNDRVNTXzJfU0hBREVSX1NUT1JBR0VfV1JJVEVfQklULAotICAgICAgICAgICAgICAgIC5kc3RB Y2Nlc3NNYXNrID0gVktfQUNDRVNTX0hPU1RfUkVBRF9CSVQsCi0gICAgICAgICAgICAgICAgLnNy Y1F1ZXVlRmFtaWx5SW5kZXggPSBWS19RVUVVRV9GQU1JTFlfSUdOT1JFRCwKLSAgICAgICAgICAg ICAgICAuZHN0UXVldWVGYW1pbHlJbmRleCA9IFZLX1FVRVVFX0ZBTUlMWV9JR05PUkVELAotICAg ICAgICAgICAgICAgIC5idWZmZXIgPSBidWZfdmstPmJ1ZiwKLSAgICAgICAgICAgICAgICAuc2l6 ZSA9IGJ1Zl92ay0+c2l6ZSwKLSAgICAgICAgICAgICAgICAub2Zmc2V0ID0gMCwKLSAgICAgICAg ICAgIH0sCi0gICAgICAgICAgICAuYnVmZmVyTWVtb3J5QmFycmllckNvdW50ID0gMSwKLSAgICAg ICAgfSk7Ci0KLSAgICBSRVQoZmZfdmtfZXhlY19zdWJtaXQodmtjdHgsIGV4ZWMpKTsKLSAgICBm Zl92a19leGVjX3dhaXQodmtjdHgsIGV4ZWMpOwotICAgIHNjb3JlID0gZXZhbHVhdGUoY3R4LCBz YWQpOwotCi1kb25lOgotICAgIHNucHJpbnRmKHN0ciwgc2l6ZW9mKHN0ciksICIlMC4zZiIsIHMt PnByZXZfbWFmZCk7Ci0gICAgYXZfZGljdF9zZXQoJmluLT5tZXRhZGF0YSwgImxhdmZpLnNjZC5t YWZkIiwgc3RyLCAwKTsKLSAgICBzbnByaW50ZihzdHIsIHNpemVvZihzdHIpLCAiJTAuM2YiLCBz Y29yZSk7Ci0gICAgYXZfZGljdF9zZXQoJmluLT5tZXRhZGF0YSwgImxhdmZpLnNjZC5zY29yZSIs IHN0ciwgMCk7Ci0KLSAgICBpZiAoc2NvcmUgPj0gcy0+dGhyZXNob2xkKSB7Ci0gICAgICAgIGNv bnN0IGNoYXIgKnB0cyA9IGF2X3RzMnRpbWVzdHIoaW4tPnB0cywgJmxpbmstPnRpbWVfYmFzZSk7 Ci0gICAgICAgIGF2X2RpY3Rfc2V0KCZpbi0+bWV0YWRhdGEsICJsYXZmaS5zY2QudGltZSIsIHB0 cywgMCk7Ci0gICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19JTkZPLCAibGF2Zmkuc2NkLnNjb3Jl OiAlLjNmLCBsYXZmaS5zY2QudGltZTogJXNcbiIsCi0gICAgICAgICAgICAgICBzY29yZSwgcHRz KTsKLSAgICB9Ci0KLSAgICBhdl9idWZmZXJfdW5yZWYoJmJ1Zik7Ci0gICAgaWYgKCFzLT5zY19w YXNzIHx8IHNjb3JlID49IHMtPnRocmVzaG9sZCkKLSAgICAgICAgcmV0dXJuIGZmX2ZpbHRlcl9m cmFtZShvdXRsaW5rLCBpbik7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGF2X2ZyYW1lX2ZyZWUoJmlu KTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi1mYWlsOgotICAgIGlmIChleGVjKQotICAg ICAgICBmZl92a19leGVjX2Rpc2NhcmRfZGVwcygmcy0+dmtjdHgsIGV4ZWMpOwotICAgIGF2X2Zy YW1lX2ZyZWUoJmluKTsKLSAgICBhdl9idWZmZXJfdW5yZWYoJmJ1Zik7Ci0gICAgcmV0dXJuIGVy cjsKLX0KLQotc3RhdGljIHZvaWQgc2NkZXRfdnVsa2FuX3VuaW5pdChBVkZpbHRlckNvbnRleHQg KmF2Y3R4KQotewotICAgIFNjZW5lRGV0ZWN0VnVsa2FuQ29udGV4dCAqcyA9IGF2Y3R4LT5wcml2 OwotICAgIEZGVnVsa2FuQ29udGV4dCAqdmtjdHggPSAmcy0+dmtjdHg7Ci0KLSAgICBhdl9mcmFt ZV9mcmVlKCZzLT5wcmV2KTsKLSAgICBhdl9mcmFtZV9mcmVlKCZzLT5jdXIpOwotCi0gICAgZmZf dmtfZXhlY19wb29sX2ZyZWUodmtjdHgsICZzLT5lKTsKLSAgICBmZl92a19zaGFkZXJfZnJlZSh2 a2N0eCwgJnMtPnNoZCk7Ci0KLSAgICBhdl9idWZmZXJfcG9vbF91bmluaXQoJnMtPmRldF9idWZf cG9vbCk7Ci0KLSAgICBmZl92a191bmluaXQoJnMtPnZrY3R4KTsKLQotICAgIHMtPmluaXRpYWxp emVkID0gMDsKLX0KLQotI2RlZmluZSBPRkZTRVQoeCkgb2Zmc2V0b2YoU2NlbmVEZXRlY3RWdWxr YW5Db250ZXh0LCB4KQotI2RlZmluZSBGTEFHUyAoQVZfT1BUX0ZMQUdfRklMVEVSSU5HX1BBUkFN IHwgQVZfT1BUX0ZMQUdfVklERU9fUEFSQU0pCi1zdGF0aWMgY29uc3QgQVZPcHRpb24gc2NkZXRf dnVsa2FuX29wdGlvbnNbXSA9IHsKLSAgICB7ICJ0aHJlc2hvbGQiLCAgICJzZXQgc2NlbmUgY2hh bmdlIGRldGVjdCB0aHJlc2hvbGQiLCAgICAgICAgT0ZGU0VUKHRocmVzaG9sZCksICBBVl9PUFRf VFlQRV9ET1VCTEUsICAgey5kYmwgPSAxMC59LCAgICAgMCwgIDEwMC4sIEZMQUdTIH0sCi0gICAg eyAidCIsICAgICAgICAgICAic2V0IHNjZW5lIGNoYW5nZSBkZXRlY3QgdGhyZXNob2xkIiwgICAg ICAgIE9GRlNFVCh0aHJlc2hvbGQpLCAgQVZfT1BUX1RZUEVfRE9VQkxFLCAgIHsuZGJsID0gMTAu fSwgICAgIDAsICAxMDAuLCBGTEFHUyB9LAotICAgIHsgInNjX3Bhc3MiLCAgICAgIlNldCB0aGUg ZmxhZyB0byBwYXNzIHNjZW5lIGNoYW5nZSBmcmFtZXMiLCBPRkZTRVQoc2NfcGFzcyksICAgIEFW X09QVF9UWVBFX0JPT0wsICAgICB7Lmk2NCA9IDAgIH0sICAgICAwLCAgICAxLCAgRkxBR1MgfSwK LSAgICB7ICJzIiwgICAgICAgICAgICJTZXQgdGhlIGZsYWcgdG8gcGFzcyBzY2VuZSBjaGFuZ2Ug ZnJhbWVzIiwgT0ZGU0VUKHNjX3Bhc3MpLCAgICBBVl9PUFRfVFlQRV9CT09MLCAgICAgey5pNjQg PSAwICB9LCAgICAgMCwgICAgMSwgIEZMQUdTIH0sCi0gICAgeyBOVUxMIH0KLX07Ci0KLUFWRklM VEVSX0RFRklORV9DTEFTUyhzY2RldF92dWxrYW4pOwotCi1zdGF0aWMgY29uc3QgQVZGaWx0ZXJQ YWQgc2NkZXRfdnVsa2FuX2lucHV0c1tdID0gewotICAgIHsKLSAgICAgICAgLm5hbWUgICAgICAg ICA9ICJkZWZhdWx0IiwKLSAgICAgICAgLnR5cGUgICAgICAgICA9IEFWTUVESUFfVFlQRV9WSURF TywKLSAgICAgICAgLmZpbHRlcl9mcmFtZSA9ICZzY2RldF92dWxrYW5fZmlsdGVyX2ZyYW1lLAot ICAgICAgICAuY29uZmlnX3Byb3BzID0gJmZmX3ZrX2ZpbHRlcl9jb25maWdfaW5wdXQsCi0gICAg fSwKLX07Ci0KLXN0YXRpYyBjb25zdCBBVkZpbHRlclBhZCBzY2RldF92dWxrYW5fb3V0cHV0c1td ID0gewotICAgIHsKLSAgICAgICAgLm5hbWUgPSAiZGVmYXVsdCIsCi0gICAgICAgIC50eXBlID0g QVZNRURJQV9UWVBFX1ZJREVPLAotICAgICAgICAuY29uZmlnX3Byb3BzID0gJmZmX3ZrX2ZpbHRl cl9jb25maWdfb3V0cHV0LAotICAgIH0sCi19OwotCi1jb25zdCBGRkZpbHRlciBmZl92Zl9zY2Rl dF92dWxrYW4gPSB7Ci0gICAgLnAubmFtZSAgICAgICAgID0gInNjZGV0X3Z1bGthbiIsCi0gICAg LnAuZGVzY3JpcHRpb24gID0gTlVMTF9JRl9DT05GSUdfU01BTEwoIkRldGVjdCB2aWRlbyBzY2Vu ZSBjaGFuZ2UiKSwKLSAgICAucC5wcml2X2NsYXNzICAgPSAmc2NkZXRfdnVsa2FuX2NsYXNzLAot ICAgIC5wLmZsYWdzICAgICAgICA9IEFWRklMVEVSX0ZMQUdfSFdERVZJQ0UsCi0gICAgLnByaXZf c2l6ZSAgICAgID0gc2l6ZW9mKFNjZW5lRGV0ZWN0VnVsa2FuQ29udGV4dCksCi0gICAgLmluaXQg ICAgICAgICAgID0gJmZmX3ZrX2ZpbHRlcl9pbml0LAotICAgIC51bmluaXQgICAgICAgICA9ICZz Y2RldF92dWxrYW5fdW5pbml0LAotICAgIEZJTFRFUl9JTlBVVFMoc2NkZXRfdnVsa2FuX2lucHV0 cyksCi0gICAgRklMVEVSX09VVFBVVFMoc2NkZXRfdnVsa2FuX291dHB1dHMpLAotICAgIEZJTFRF Ul9TSU5HTEVfUElYRk1UKEFWX1BJWF9GTVRfVlVMS0FOKSwKLSAgICAuZmxhZ3NfaW50ZXJuYWwg PSBGRl9GSUxURVJfRkxBR19IV0ZSQU1FX0FXQVJFLAotfTsKLS0gCjIuNDkuMQoKCkZyb20gOTU5 OWIxMGExMjQyYjA2ZTY2YTBiMGM1OTVmNjlkYjRlZTQ0ZmI3OCBNb24gU2VwIDE3IDAwOjAwOjAw IDIwMDEKRnJvbTogSmFtYWlrYTEgPGx1a2FzemN6MThAd3AucGw+CkRhdGU6IFdlZCwgMyBTZXAg MjAyNSAxMzowMjowNSArMDAwMApTdWJqZWN0OiBbUEFUQ0ggMDI0LzExOF0gQ2hhbmdpbmcgdnVs a2FuIGZpbGUgZGlyZWN0b3J5CgotLS0KIGxpYmF2ZmlsdGVyL3Z1bGthbi92Zl9zY2RldF92dWxr YW4uYyB8IDQxMiArKysrKysrKysrKysrKysrKysrKysrKysrKysKIDEgZmlsZSBjaGFuZ2VkLCA0 MTIgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2ZmlsdGVyL3Z1bGthbi92 Zl9zY2RldF92dWxrYW4uYwoKZGlmZiAtLWdpdCBhL2xpYmF2ZmlsdGVyL3Z1bGthbi92Zl9zY2Rl dF92dWxrYW4uYyBiL2xpYmF2ZmlsdGVyL3Z1bGthbi92Zl9zY2RldF92dWxrYW4uYwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi43YjEzYTI5MzZiCi0tLSAvZGV2L251bGwK KysrIGIvbGliYXZmaWx0ZXIvdnVsa2FuL3ZmX3NjZGV0X3Z1bGthbi5jCkBAIC0wLDAgKzEsNDEy IEBACisvKgorICogQ29weXJpZ2h0IDIwMjUgKGMpIE5pa2xhcyBIYWFzCisgKgorICogVGhpcyBm aWxlIGlzIHBhcnQgb2YgRkZtcGVnLgorICoKKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy LjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u CisgKgorICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp dmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh bG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICog Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9u LCBNQSAwMjExMC0xMzAxIFVTQQorICovCisKKyNpbmNsdWRlICJsaWJhdnV0aWwvYXZhc3NlcnQu aCIKKyNpbmNsdWRlICIuLi8uLi9saWJhdnV0aWwvdnVsa2FuL3Z1bGthbl9zcGlydi5oIgorI2lu Y2x1ZGUgImxpYmF2dXRpbC9vcHQuaCIKKyNpbmNsdWRlICJsaWJhdnV0aWwvdGltZXN0YW1wLmgi CisjaW5jbHVkZSAidnVsa2FuX2ZpbHRlci5oIgorCisjaW5jbHVkZSAibGliYXZmaWx0ZXIvZmls dGVycy5oIgorCit0eXBlZGVmIHN0cnVjdCBTY2VuZURldGVjdFZ1bGthbkNvbnRleHQgeworICAg IEZGVnVsa2FuQ29udGV4dCB2a2N0eDsKKworICAgIGludCBpbml0aWFsaXplZDsKKyAgICBGRlZr RXhlY1Bvb2wgZTsKKyAgICBBVlZ1bGthbkRldmljZVF1ZXVlRmFtaWx5ICpxZjsKKyAgICBGRlZ1 bGthblNoYWRlciBzaGQ7CisgICAgQVZCdWZmZXJQb29sICpkZXRfYnVmX3Bvb2w7CisKKyAgICBk b3VibGUgdGhyZXNob2xkOworICAgIGludCBzY19wYXNzOworCisgICAgaW50IG5iX3BsYW5lczsK KyAgICBkb3VibGUgcHJldl9tYWZkOworICAgIEFWRnJhbWUgKnByZXY7CisgICAgQVZGcmFtZSAq Y3VyOworfSBTY2VuZURldGVjdFZ1bGthbkNvbnRleHQ7CisKK3R5cGVkZWYgc3RydWN0IFNjZW5l RGV0ZWN0QnVmIHsKKyNkZWZpbmUgU0xJQ0VTIDE2CisgICAgdWludDMyX3QgZnJhbWVfc2FkW1NM SUNFU107Cit9IFNjZW5lRGV0ZWN0QnVmOworCitzdGF0aWMgYXZfY29sZCBpbnQgaW5pdF9maWx0 ZXIoQVZGaWx0ZXJDb250ZXh0ICpjdHgpCit7CisgICAgaW50IGVycjsKKyAgICB1aW50OF90ICpz cHZfZGF0YTsKKyAgICBzaXplX3Qgc3B2X2xlbjsKKyAgICB2b2lkICpzcHZfb3BhcXVlID0gTlVM TDsKKyAgICBTY2VuZURldGVjdFZ1bGthbkNvbnRleHQgKnMgPSBjdHgtPnByaXY7CisgICAgRkZW dWxrYW5Db250ZXh0ICp2a2N0eCA9ICZzLT52a2N0eDsKKyAgICBGRlZ1bGthblNoYWRlciAqc2hk OworICAgIEZGVmtTUElSVkNvbXBpbGVyICpzcHY7CisgICAgRkZWdWxrYW5EZXNjcmlwdG9yU2V0 QmluZGluZyAqZGVzYzsKKworICAgIGNvbnN0IEFWUGl4Rm10RGVzY3JpcHRvciAqcGl4ZGVzYyA9 IGF2X3BpeF9mbXRfZGVzY19nZXQocy0+dmtjdHguaW5wdXRfZm9ybWF0KTsKKyAgICBjb25zdCBp bnQgbHVtYW9ubHkgPSAhKHBpeGRlc2MtPmZsYWdzICYgQVZfUElYX0ZNVF9GTEFHX1JHQikgJiYK KyAgICAgICAgICAgICAgICAgICAgICAgICAocGl4ZGVzYy0+ZmxhZ3MgJiBBVl9QSVhfRk1UX0ZM QUdfUExBTkFSKTsKKyAgICBzLT5uYl9wbGFuZXMgPSBsdW1hb25seSA/IDEgOiBhdl9waXhfZm10 X2NvdW50X3BsYW5lcyhzLT52a2N0eC5pbnB1dF9mb3JtYXQpOworCisgICAgc3B2ID0gZmZfdmtf c3BpcnZfaW5pdCgpOworICAgIGlmICghc3B2KSB7CisgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xP R19FUlJPUiwgIlVuYWJsZSB0byBpbml0aWFsaXplIFNQSVItViBjb21waWxlciFcbiIpOworICAg ICAgICByZXR1cm4gQVZFUlJPUl9FWFRFUk5BTDsKKyAgICB9CisKKyAgICBzLT5xZiA9IGZmX3Zr X3FmX2ZpbmQodmtjdHgsIFZLX1FVRVVFX0NPTVBVVEVfQklULCAwKTsKKyAgICBpZiAoIXMtPnFm KSB7CisgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIkRldmljZSBoYXMgbm8gY29t cHV0ZSBxdWV1ZXNcbiIpOworICAgICAgICBlcnIgPSBBVkVSUk9SKEVOT1RTVVApOworICAgICAg ICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgUkVUKGZmX3ZrX2V4ZWNfcG9vbF9pbml0KHZrY3R4 LCBzLT5xZiwgJnMtPmUsIHMtPnFmLT5udW0qNCwgMCwgMCwgMCwgTlVMTCkpOworICAgIFJFVChm Zl92a19zaGFkZXJfaW5pdCh2a2N0eCwgJnMtPnNoZCwgInNjZGV0IiwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgVktfU0hBREVSX1NUQUdFX0NPTVBVVEVfQklULAorICAgICAgICAgICAgICAg ICAgICAgICAgICAoY29uc3QgY2hhciAqW10pIHsgIkdMX0tIUl9zaGFkZXJfc3ViZ3JvdXBfYXJp dGhtZXRpYyIgfSwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMzIsIDMyLCAxLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAwKSk7CisgICAgc2hkID0gJnMtPnNoZDsKKworICAgIGRl c2MgPSAoRkZWdWxrYW5EZXNjcmlwdG9yU2V0QmluZGluZyBbXSkgeworICAgICAgICB7CisgICAg ICAgICAgICAubmFtZSAgICAgICA9ICJwcmV2X2ltZyIsCisgICAgICAgICAgICAudHlwZSAgICAg ICA9IFZLX0RFU0NSSVBUT1JfVFlQRV9TVE9SQUdFX0lNQUdFLAorICAgICAgICAgICAgLm1lbV9s YXlvdXQgPSBmZl92a19zaGFkZXJfcmVwX2ZtdChzLT52a2N0eC5pbnB1dF9mb3JtYXQsIEZGX1ZL X1JFUF9VSU5UKSwKKyAgICAgICAgICAgIC5tZW1fcXVhbGkgID0gInJlYWRvbmx5IiwKKyAgICAg ICAgICAgIC5kaW1lbnNpb25zID0gMiwKKyAgICAgICAgICAgIC5lbGVtcyAgICAgID0gYXZfcGl4 X2ZtdF9jb3VudF9wbGFuZXMocy0+dmtjdHguaW5wdXRfZm9ybWF0KSwKKyAgICAgICAgICAgIC5z dGFnZXMgICAgID0gVktfU0hBREVSX1NUQUdFX0NPTVBVVEVfQklULAorICAgICAgICB9LCB7Cisg ICAgICAgICAgICAubmFtZSAgICAgICA9ICJjdXJfaW1nIiwKKyAgICAgICAgICAgIC50eXBlICAg ICAgID0gVktfREVTQ1JJUFRPUl9UWVBFX1NUT1JBR0VfSU1BR0UsCisgICAgICAgICAgICAubWVt X2xheW91dCA9IGZmX3ZrX3NoYWRlcl9yZXBfZm10KHMtPnZrY3R4LmlucHV0X2Zvcm1hdCwgRkZf VktfUkVQX1VJTlQpLAorICAgICAgICAgICAgLm1lbV9xdWFsaSAgPSAicmVhZG9ubHkiLAorICAg ICAgICAgICAgLmRpbWVuc2lvbnMgPSAyLAorICAgICAgICAgICAgLmVsZW1zICAgICAgPSBhdl9w aXhfZm10X2NvdW50X3BsYW5lcyhzLT52a2N0eC5pbnB1dF9mb3JtYXQpLAorICAgICAgICAgICAg LnN0YWdlcyAgICAgPSBWS19TSEFERVJfU1RBR0VfQ09NUFVURV9CSVQsCisgICAgICAgIH0sIHsK KyAgICAgICAgICAgIC5uYW1lICAgICAgICA9ICJzYWRfYnVmZmVyIiwKKyAgICAgICAgICAgIC50 eXBlICAgICAgICA9IFZLX0RFU0NSSVBUT1JfVFlQRV9TVE9SQUdFX0JVRkZFUiwKKyAgICAgICAg ICAgIC5zdGFnZXMgICAgICA9IFZLX1NIQURFUl9TVEFHRV9DT01QVVRFX0JJVCwKKyAgICAgICAg ICAgIC5idWZfY29udGVudCA9ICJ1aW50IGZyYW1lX3NhZFtdOyIsCisgICAgICAgIH0KKyAgICB9 OworCisgICAgUkVUKGZmX3ZrX3NoYWRlcl9hZGRfZGVzY3JpcHRvcl9zZXQodmtjdHgsICZzLT5z aGQsIGRlc2MsIDMsIDAsIDApKTsKKworICAgIEdMU0xDKDAsIHNoYXJlZCB1aW50IHdnX3N1bTsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBHTFNM QygwLCB2b2lkIG1haW4oKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICk7CisgICAgR0xTTEMoMCwgeyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgIEdMU0xGKDEsICAg ICBjb25zdCB1aW50IHNsaWNlID0gZ2xfV29ya0dyb3VwSUQueCAlJSAldTsgICAgICAgICAgICAs U0xJQ0VTKTsKKyAgICBHTFNMQygxLCAgICAgY29uc3QgaXZlYzIgcG9zID0gaXZlYzIoZ2xfR2xv YmFsSW52b2NhdGlvbklELnh5KTsgICAgICAgICAgICk7CisgICAgR0xTTEMoMSwgICAgIHdnX3N1 bSA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAp OworICAgIEdMU0xDKDEsICAgICBiYXJyaWVyKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHMtPm5i X3BsYW5lczsgaSsrKSB7CisgICAgICAgIEdMU0xGKDEsIGlmIChJU19XSVRISU4ocG9zLCBpbWFn ZVNpemUoY3VyX2ltZ1slZF0pKSkgeyAgICAgICAgICAgICAgLGkpOworICAgICAgICBHTFNMRigy LCAgICAgdXZlYzQgcHJldiA9IGltYWdlTG9hZChwcmV2X2ltZ1slZF0sIHBvcyk7ICAgICAgICAg ICAgICxpKTsKKyAgICAgICAgR0xTTEYoMiwgICAgIHV2ZWM0IGN1ciAgPSBpbWFnZUxvYWQoY3Vy X2ltZ1slZF0sICBwb3MpOyAgICAgICAgICAgICAsaSk7CisgICAgICAgIEdMU0xDKDIsICAgICB1 dmVjNCBzYWQgPSBhYnMoaXZlYzQoY3VyKSAtIGl2ZWM0KHByZXYpKTsgICAgICAgICAgICAgICAp OworICAgICAgICBHTFNMQygyLCAgICAgdWludCBzdW0gPSBzdWJncm91cEFkZChzYWQueCArIHNh ZC55ICsgc2FkLnopOyAgICAgICAgICAgKTsKKyAgICAgICAgR0xTTEMoMiwgICAgIGlmIChzdWJn cm91cEVsZWN0KCkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAg ICAgIEdMU0xDKDMsICAgICAgICAgYXRvbWljQWRkKHdnX3N1bSwgc3VtKTsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICApOworICAgICAgICBHTFNMQygxLCB9ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICB9CisgICAg R0xTTEMoMSwgICAgIGJhcnJpZXIoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICApOworICAgIEdMU0xDKDEsICAgICBpZiAoZ2xfTG9jYWxJbnZvY2F0 aW9uSW5kZXggPT0gMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBHTFNMQygy LCAgICAgICAgIGF0b21pY0FkZChmcmFtZV9zYWRbc2xpY2VdLCB3Z19zdW0pOyAgICAgICAgICAg ICAgICAgICAgICk7CisgICAgR0xTTEMoMCwgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworCisgICAgUkVUKHNwdi0+Y29t cGlsZV9zaGFkZXIodmtjdHgsIHNwdiwgJnMtPnNoZCwgJnNwdl9kYXRhLCAmc3B2X2xlbiwgIm1h aW4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzcHZfb3BhcXVlKSk7CisgICAgUkVU KGZmX3ZrX3NoYWRlcl9saW5rKHZrY3R4LCAmcy0+c2hkLCBzcHZfZGF0YSwgc3B2X2xlbiwgIm1h aW4iKSk7CisKKyAgICBSRVQoZmZfdmtfc2hhZGVyX3JlZ2lzdGVyX2V4ZWModmtjdHgsICZzLT5l LCAmcy0+c2hkKSk7CisKKyAgICBzLT5pbml0aWFsaXplZCA9IDE7CisKK2ZhaWw6CisgICAgaWYg KHNwdl9vcGFxdWUpCisgICAgICAgIHNwdi0+ZnJlZV9zaGFkZXIoc3B2LCAmc3B2X29wYXF1ZSk7 CisgICAgaWYgKHNwdikKKyAgICAgICAgc3B2LT51bmluaXQoJnNwdik7CisKKyAgICByZXR1cm4g ZXJyOworfQorCitzdGF0aWMgZG91YmxlIGV2YWx1YXRlKEFWRmlsdGVyQ29udGV4dCAqY3R4LCBj b25zdCBTY2VuZURldGVjdEJ1ZiAqYnVmKQoreworICAgIFNjZW5lRGV0ZWN0VnVsa2FuQ29udGV4 dCAqcyA9IGN0eC0+cHJpdjsKKyAgICBjb25zdCBBVlBpeEZtdERlc2NyaXB0b3IgKmRlc2MgPSBh dl9waXhfZm10X2Rlc2NfZ2V0KHMtPnZrY3R4LmlucHV0X2Zvcm1hdCk7CisgICAgY29uc3QgQVZG aWx0ZXJMaW5rICppbmxpbmsgPSBjdHgtPmlucHV0c1swXTsKKyAgICB1aW50NjRfdCBjb3VudDsK KyAgICBkb3VibGUgbWFmZCwgZGlmZjsKKworICAgIHVpbnQ2NF90IHNhZCA9IDA7CisgICAgZm9y IChpbnQgaSA9IDA7IGkgPCBTTElDRVM7IGkrKykKKyAgICAgICAgc2FkICs9IGJ1Zi0+ZnJhbWVf c2FkW2ldOworCisgICAgYXZfYXNzZXJ0MihzLT5uYl9wbGFuZXMgPT0gMSB8fCAhKGRlc2MtPmxv ZzJfY2hyb21hX3cgfHwgZGVzYy0+bG9nMl9jaHJvbWFfaCkpOworICAgIGNvdW50ID0gcy0+bmJf cGxhbmVzICogaW5saW5rLT53ICogaW5saW5rLT5oOworICAgIG1hZmQgPSAoZG91YmxlKSBzYWQg KiAxMDAuMCAvIGNvdW50IC8gKDFVTEwgPDwgZGVzYy0+Y29tcFswXS5kZXB0aCk7CisgICAgZGlm ZiA9IGZhYnMobWFmZCAtIHMtPnByZXZfbWFmZCk7CisgICAgcy0+cHJldl9tYWZkID0gbWFmZDsK KworICAgIHJldHVybiBhdl9jbGlwZihGRk1JTihtYWZkLCBkaWZmKSwgMC4wLCAxMDAuMCk7Cit9 CisKK3N0YXRpYyBpbnQgc2NkZXRfdnVsa2FuX2ZpbHRlcl9mcmFtZShBVkZpbHRlckxpbmsgKmxp bmssIEFWRnJhbWUgKmluKQoreworICAgIGludCBlcnI7CisgICAgQVZGaWx0ZXJDb250ZXh0ICpj dHggPSBsaW5rLT5kc3Q7CisgICAgU2NlbmVEZXRlY3RWdWxrYW5Db250ZXh0ICpzID0gY3R4LT5w cml2OworICAgIEFWRmlsdGVyTGluayAqb3V0bGluayA9IGN0eC0+b3V0cHV0c1swXTsKKworICAg IFZrSW1hZ2VWaWV3IHByZXZfdmlld3NbQVZfTlVNX0RBVEFfUE9JTlRFUlNdOworICAgIFZrSW1h Z2VWaWV3IGN1cl92aWV3c1tBVl9OVU1fREFUQV9QT0lOVEVSU107CisgICAgVmtJbWFnZU1lbW9y eUJhcnJpZXIyIGltZ19iYXJbOF07CisgICAgaW50IG5iX2ltZ19iYXIgPSAwOworCisgICAgRkZW dWxrYW5Db250ZXh0ICp2a2N0eCA9ICZzLT52a2N0eDsKKyAgICBGRlZ1bGthbkZ1bmN0aW9ucyAq dmsgPSAmdmtjdHgtPnZrZm47CisgICAgRkZWa0V4ZWNDb250ZXh0ICpleGVjID0gTlVMTDsKKyAg ICBBVkJ1ZmZlclJlZiAqYnVmID0gTlVMTDsKKyAgICBGRlZrQnVmZmVyICpidWZfdms7CisKKyAg ICBTY2VuZURldGVjdEJ1ZiAqc2FkOworICAgIGRvdWJsZSBzY29yZSA9IDAuMDsKKyAgICBjaGFy IHN0cls2NF07CisKKyAgICBpZiAoIXMtPmluaXRpYWxpemVkKQorICAgICAgICBSRVQoaW5pdF9m aWx0ZXIoY3R4KSk7CisKKyAgICBhdl9mcmFtZV9mcmVlKCZzLT5wcmV2KTsKKyAgICBzLT5wcmV2 ID0gcy0+Y3VyOworICAgIHMtPmN1ciA9IGF2X2ZyYW1lX2Nsb25lKGluKTsKKyAgICBpZiAoIXMt PnByZXYpCisgICAgICAgIGdvdG8gZG9uZTsKKworICAgIFJFVChmZl92a19nZXRfcG9vbGVkX2J1 ZmZlcih2a2N0eCwgJnMtPmRldF9idWZfcG9vbCwgJmJ1ZiwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgVktfQlVGRkVSX1VTQUdFX1RSQU5TRkVSX0RTVF9CSVQgfAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBWS19CVUZGRVJfVVNBR0VfU1RPUkFHRV9CVUZGRVJfQklU LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzaXplb2YoU2NlbmVEZXRlY3RCdWYpLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBWS19NRU1PUllfUFJPUEVSVFlfREVWSUNFX0xPQ0FMX0JJVCB8Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZLX01FTU9SWV9QUk9QRVJUWV9IT1NUX1ZJ U0lCTEVfQklUIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfTUVNT1JZX1BS T1BFUlRZX0hPU1RfQ09IRVJFTlRfQklUKSk7CisgICAgYnVmX3ZrID0gKEZGVmtCdWZmZXIgKili dWYtPmRhdGE7CisgICAgc2FkID0gKFNjZW5lRGV0ZWN0QnVmICopIGJ1Zl92ay0+bWFwcGVkX21l bTsKKworICAgIGV4ZWMgPSBmZl92a19leGVjX2dldCh2a2N0eCwgJnMtPmUpOworICAgIGZmX3Zr X2V4ZWNfc3RhcnQodmtjdHgsIGV4ZWMpOworCisgICAgUkVUKGZmX3ZrX2V4ZWNfYWRkX2RlcF9m cmFtZSh2a2N0eCwgZXhlYywgcy0+cHJldiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFZLX1BJUEVMSU5FX1NUQUdFXzJfTk9ORSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFZLX1BJUEVMSU5FX1NUQUdFXzJfQ09NUFVURV9TSEFERVJfQklUKSk7CisgICAgUkVU KGZmX3ZrX2NyZWF0ZV9pbWFnZXZpZXdzKHZrY3R4LCBleGVjLCBwcmV2X3ZpZXdzLCBzLT5wcmV2 LCBGRl9WS19SRVBfVUlOVCkpOworCisgICAgZmZfdmtfc2hhZGVyX3VwZGF0ZV9pbWdfYXJyYXko dmtjdHgsIGV4ZWMsICZzLT5zaGQsIHMtPnByZXYsIHByZXZfdmlld3MsIDAsIDAsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfSU1BR0VfTEFZT1VUX0dFTkVSQUwsIFZLX05V TExfSEFORExFKTsKKworICAgIGZmX3ZrX2ZyYW1lX2JhcnJpZXIodmtjdHgsIGV4ZWMsIHMtPnBy ZXYsIGltZ19iYXIsICZuYl9pbWdfYmFyLAorICAgICAgICAgICAgICAgICAgICAgICAgVktfUElQ RUxJTkVfU1RBR0VfMl9BTExfQ09NTUFORFNfQklULAorICAgICAgICAgICAgICAgICAgICAgICAg VktfUElQRUxJTkVfU1RBR0VfMl9DT01QVVRFX1NIQURFUl9CSVQsCisgICAgICAgICAgICAgICAg ICAgICAgICBWS19BQ0NFU1NfU0hBREVSX1JFQURfQklULAorICAgICAgICAgICAgICAgICAgICAg ICAgVktfSU1BR0VfTEFZT1VUX0dFTkVSQUwsCisgICAgICAgICAgICAgICAgICAgICAgICBWS19R VUVVRV9GQU1JTFlfSUdOT1JFRCk7CisKKyAgICBSRVQoZmZfdmtfZXhlY19hZGRfZGVwX2ZyYW1l KHZrY3R4LCBleGVjLCBzLT5jdXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBW S19QSVBFTElORV9TVEFHRV8yX05PTkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBWS19QSVBFTElORV9TVEFHRV8yX0NPTVBVVEVfU0hBREVSX0JJVCkpOworICAgIFJFVChmZl92 a19jcmVhdGVfaW1hZ2V2aWV3cyh2a2N0eCwgZXhlYywgY3VyX3ZpZXdzLCBzLT5jdXIsIEZGX1ZL X1JFUF9VSU5UKSk7CisKKyAgICBmZl92a19zaGFkZXJfdXBkYXRlX2ltZ19hcnJheSh2a2N0eCwg ZXhlYywgJnMtPnNoZCwgcy0+Y3VyLCBjdXJfdmlld3MsIDAsIDEsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgVktfSU1BR0VfTEFZT1VUX0dFTkVSQUwsIFZLX05VTExfSEFORExF KTsKKworICAgIGZmX3ZrX2ZyYW1lX2JhcnJpZXIodmtjdHgsIGV4ZWMsIHMtPmN1ciwgaW1nX2Jh ciwgJm5iX2ltZ19iYXIsCisgICAgICAgICAgICAgICAgICAgICAgICBWS19QSVBFTElORV9TVEFH RV8yX0FMTF9DT01NQU5EU19CSVQsCisgICAgICAgICAgICAgICAgICAgICAgICBWS19QSVBFTElO RV9TVEFHRV8yX0NPTVBVVEVfU0hBREVSX0JJVCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFZL X0FDQ0VTU19TSEFERVJfUkVBRF9CSVQsCisgICAgICAgICAgICAgICAgICAgICAgICBWS19JTUFH RV9MQVlPVVRfR0VORVJBTCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFZLX1FVRVVFX0ZBTUlM WV9JR05PUkVEKTsKKworICAgIC8qIHplcm8gYnVmZmVyICovCisgICAgdmstPkNtZFBpcGVsaW5l QmFycmllcjIoZXhlYy0+YnVmLCAmKFZrRGVwZW5kZW5jeUluZm8pIHsKKyAgICAgICAgICAgIC5z VHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX0RFUEVOREVOQ1lfSU5GTywKKyAgICAgICAgICAgIC5w QnVmZmVyTWVtb3J5QmFycmllcnMgPSAmKFZrQnVmZmVyTWVtb3J5QmFycmllcjIpIHsKKyAgICAg ICAgICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9CVUZGRVJfTUVNT1JZX0JBUlJJ RVJfMiwKKyAgICAgICAgICAgICAgICAuc3JjU3RhZ2VNYXNrID0gVktfUElQRUxJTkVfU1RBR0Vf Ml9OT05FLAorICAgICAgICAgICAgICAgIC5kc3RTdGFnZU1hc2sgPSBWS19QSVBFTElORV9TVEFH RV8yX1RSQU5TRkVSX0JJVCwKKyAgICAgICAgICAgICAgICAuZHN0QWNjZXNzTWFzayA9IFZLX0FD Q0VTU19UUkFOU0ZFUl9XUklURV9CSVQsCisgICAgICAgICAgICAgICAgLnNyY1F1ZXVlRmFtaWx5 SW5kZXggPSBWS19RVUVVRV9GQU1JTFlfSUdOT1JFRCwKKyAgICAgICAgICAgICAgICAuZHN0UXVl dWVGYW1pbHlJbmRleCA9IFZLX1FVRVVFX0ZBTUlMWV9JR05PUkVELAorICAgICAgICAgICAgICAg IC5idWZmZXIgPSBidWZfdmstPmJ1ZiwKKyAgICAgICAgICAgICAgICAuc2l6ZSA9IGJ1Zl92ay0+ c2l6ZSwKKyAgICAgICAgICAgICAgICAub2Zmc2V0ID0gMCwKKyAgICAgICAgICAgIH0sCisgICAg ICAgICAgICAuYnVmZmVyTWVtb3J5QmFycmllckNvdW50ID0gMSwKKyAgICAgICAgfSk7CisKKyAg ICB2ay0+Q21kRmlsbEJ1ZmZlcihleGVjLT5idWYsIGJ1Zl92ay0+YnVmLCAwLCBidWZfdmstPnNp emUsIDB4MCk7CisKKyAgICB2ay0+Q21kUGlwZWxpbmVCYXJyaWVyMihleGVjLT5idWYsICYoVmtE ZXBlbmRlbmN5SW5mbykgeworICAgICAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVf REVQRU5ERU5DWV9JTkZPLAorICAgICAgICAgICAgLnBJbWFnZU1lbW9yeUJhcnJpZXJzID0gaW1n X2JhciwKKyAgICAgICAgICAgIC5pbWFnZU1lbW9yeUJhcnJpZXJDb3VudCA9IG5iX2ltZ19iYXIs CisgICAgICAgICAgICAucEJ1ZmZlck1lbW9yeUJhcnJpZXJzID0gJihWa0J1ZmZlck1lbW9yeUJh cnJpZXIyKSB7CisgICAgICAgICAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfQlVG RkVSX01FTU9SWV9CQVJSSUVSXzIsCisgICAgICAgICAgICAgICAgLnNyY1N0YWdlTWFzayA9IFZL X1BJUEVMSU5FX1NUQUdFXzJfVFJBTlNGRVJfQklULAorICAgICAgICAgICAgICAgIC5kc3RTdGFn ZU1hc2sgPSBWS19QSVBFTElORV9TVEFHRV8yX0NPTVBVVEVfU0hBREVSX0JJVCwKKyAgICAgICAg ICAgICAgICAuc3JjQWNjZXNzTWFzayA9IFZLX0FDQ0VTU19UUkFOU0ZFUl9XUklURV9CSVQsCisg ICAgICAgICAgICAgICAgLmRzdEFjY2Vzc01hc2sgPSBWS19BQ0NFU1NfMl9TSEFERVJfU1RPUkFH RV9SRUFEX0JJVCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19BQ0NFU1Nf Ml9TSEFERVJfU1RPUkFHRV9XUklURV9CSVQsCisgICAgICAgICAgICAgICAgLnNyY1F1ZXVlRmFt aWx5SW5kZXggPSBWS19RVUVVRV9GQU1JTFlfSUdOT1JFRCwKKyAgICAgICAgICAgICAgICAuZHN0 UXVldWVGYW1pbHlJbmRleCA9IFZLX1FVRVVFX0ZBTUlMWV9JR05PUkVELAorICAgICAgICAgICAg ICAgIC5idWZmZXIgPSBidWZfdmstPmJ1ZiwKKyAgICAgICAgICAgICAgICAuc2l6ZSA9IGJ1Zl92 ay0+c2l6ZSwKKyAgICAgICAgICAgICAgICAub2Zmc2V0ID0gMCwKKyAgICAgICAgICAgIH0sCisg ICAgICAgICAgICAuYnVmZmVyTWVtb3J5QmFycmllckNvdW50ID0gMSwKKyAgICAgICAgfSk7CisK KyAgICBSRVQoZmZfdmtfc2hhZGVyX3VwZGF0ZV9kZXNjX2J1ZmZlcigmcy0+dmtjdHgsIGV4ZWMs ICZzLT5zaGQsIDAsIDIsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgYnVmX3ZrLCAwLCBidWZfdmstPnNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgVktfRk9STUFUX1VOREVGSU5FRCkpOworCisgICAgZmZfdmtfZXhlY19iaW5k X3NoYWRlcih2a2N0eCwgZXhlYywgJnMtPnNoZCk7CisKKyAgICB2ay0+Q21kRGlzcGF0Y2goZXhl Yy0+YnVmLAorICAgICAgICAgICAgICAgICAgICBGRkFMSUdOKGluLT53aWR0aCwgIHMtPnNoZC5s Z19zaXplWzBdKSAvIHMtPnNoZC5sZ19zaXplWzBdLAorICAgICAgICAgICAgICAgICAgICBGRkFM SUdOKGluLT5oZWlnaHQsIHMtPnNoZC5sZ19zaXplWzFdKSAvIHMtPnNoZC5sZ19zaXplWzFdLAor ICAgICAgICAgICAgICAgICAgICBzLT5zaGQubGdfc2l6ZVsyXSk7CisKKyAgICB2ay0+Q21kUGlw ZWxpbmVCYXJyaWVyMihleGVjLT5idWYsICYoVmtEZXBlbmRlbmN5SW5mbykgeworICAgICAgICAg ICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfREVQRU5ERU5DWV9JTkZPLAorICAgICAgICAg ICAgLnBCdWZmZXJNZW1vcnlCYXJyaWVycyA9ICYoVmtCdWZmZXJNZW1vcnlCYXJyaWVyMikgewor ICAgICAgICAgICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX0JVRkZFUl9NRU1PUllf QkFSUklFUl8yLAorICAgICAgICAgICAgICAgIC5zcmNTdGFnZU1hc2sgPSBWS19QSVBFTElORV9T VEFHRV8yX0NPTVBVVEVfU0hBREVSX0JJVCwKKyAgICAgICAgICAgICAgICAuZHN0U3RhZ2VNYXNr ID0gVktfUElQRUxJTkVfU1RBR0VfMl9IT1NUX0JJVCwKKyAgICAgICAgICAgICAgICAuc3JjQWNj ZXNzTWFzayA9IFZLX0FDQ0VTU18yX1NIQURFUl9TVE9SQUdFX1JFQURfQklUIHwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFZLX0FDQ0VTU18yX1NIQURFUl9TVE9SQUdFX1dSSVRF X0JJVCwKKyAgICAgICAgICAgICAgICAuZHN0QWNjZXNzTWFzayA9IFZLX0FDQ0VTU19IT1NUX1JF QURfQklULAorICAgICAgICAgICAgICAgIC5zcmNRdWV1ZUZhbWlseUluZGV4ID0gVktfUVVFVUVf RkFNSUxZX0lHTk9SRUQsCisgICAgICAgICAgICAgICAgLmRzdFF1ZXVlRmFtaWx5SW5kZXggPSBW S19RVUVVRV9GQU1JTFlfSUdOT1JFRCwKKyAgICAgICAgICAgICAgICAuYnVmZmVyID0gYnVmX3Zr LT5idWYsCisgICAgICAgICAgICAgICAgLnNpemUgPSBidWZfdmstPnNpemUsCisgICAgICAgICAg ICAgICAgLm9mZnNldCA9IDAsCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgLmJ1ZmZlck1l bW9yeUJhcnJpZXJDb3VudCA9IDEsCisgICAgICAgIH0pOworCisgICAgUkVUKGZmX3ZrX2V4ZWNf c3VibWl0KHZrY3R4LCBleGVjKSk7CisgICAgZmZfdmtfZXhlY193YWl0KHZrY3R4LCBleGVjKTsK KyAgICBzY29yZSA9IGV2YWx1YXRlKGN0eCwgc2FkKTsKKworZG9uZToKKyAgICBzbnByaW50Zihz dHIsIHNpemVvZihzdHIpLCAiJTAuM2YiLCBzLT5wcmV2X21hZmQpOworICAgIGF2X2RpY3Rfc2V0 KCZpbi0+bWV0YWRhdGEsICJsYXZmaS5zY2QubWFmZCIsIHN0ciwgMCk7CisgICAgc25wcmludGYo c3RyLCBzaXplb2Yoc3RyKSwgIiUwLjNmIiwgc2NvcmUpOworICAgIGF2X2RpY3Rfc2V0KCZpbi0+ bWV0YWRhdGEsICJsYXZmaS5zY2Quc2NvcmUiLCBzdHIsIDApOworCisgICAgaWYgKHNjb3JlID49 IHMtPnRocmVzaG9sZCkgeworICAgICAgICBjb25zdCBjaGFyICpwdHMgPSBhdl90czJ0aW1lc3Ry KGluLT5wdHMsICZsaW5rLT50aW1lX2Jhc2UpOworICAgICAgICBhdl9kaWN0X3NldCgmaW4tPm1l dGFkYXRhLCAibGF2Zmkuc2NkLnRpbWUiLCBwdHMsIDApOworICAgICAgICBhdl9sb2coY3R4LCBB Vl9MT0dfSU5GTywgImxhdmZpLnNjZC5zY29yZTogJS4zZiwgbGF2Zmkuc2NkLnRpbWU6ICVzXG4i LAorICAgICAgICAgICAgICAgc2NvcmUsIHB0cyk7CisgICAgfQorCisgICAgYXZfYnVmZmVyX3Vu cmVmKCZidWYpOworICAgIGlmICghcy0+c2NfcGFzcyB8fCBzY29yZSA+PSBzLT50aHJlc2hvbGQp CisgICAgICAgIHJldHVybiBmZl9maWx0ZXJfZnJhbWUob3V0bGluaywgaW4pOworICAgIGVsc2Ug eworICAgICAgICBhdl9mcmFtZV9mcmVlKCZpbik7CisgICAgICAgIHJldHVybiAwOworICAgIH0K KworZmFpbDoKKyAgICBpZiAoZXhlYykKKyAgICAgICAgZmZfdmtfZXhlY19kaXNjYXJkX2RlcHMo JnMtPnZrY3R4LCBleGVjKTsKKyAgICBhdl9mcmFtZV9mcmVlKCZpbik7CisgICAgYXZfYnVmZmVy X3VucmVmKCZidWYpOworICAgIHJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIHNjZGV0X3Z1 bGthbl91bmluaXQoQVZGaWx0ZXJDb250ZXh0ICphdmN0eCkKK3sKKyAgICBTY2VuZURldGVjdFZ1 bGthbkNvbnRleHQgKnMgPSBhdmN0eC0+cHJpdjsKKyAgICBGRlZ1bGthbkNvbnRleHQgKnZrY3R4 ID0gJnMtPnZrY3R4OworCisgICAgYXZfZnJhbWVfZnJlZSgmcy0+cHJldik7CisgICAgYXZfZnJh bWVfZnJlZSgmcy0+Y3VyKTsKKworICAgIGZmX3ZrX2V4ZWNfcG9vbF9mcmVlKHZrY3R4LCAmcy0+ ZSk7CisgICAgZmZfdmtfc2hhZGVyX2ZyZWUodmtjdHgsICZzLT5zaGQpOworCisgICAgYXZfYnVm ZmVyX3Bvb2xfdW5pbml0KCZzLT5kZXRfYnVmX3Bvb2wpOworCisgICAgZmZfdmtfdW5pbml0KCZz LT52a2N0eCk7CisKKyAgICBzLT5pbml0aWFsaXplZCA9IDA7Cit9CisKKyNkZWZpbmUgT0ZGU0VU KHgpIG9mZnNldG9mKFNjZW5lRGV0ZWN0VnVsa2FuQ29udGV4dCwgeCkKKyNkZWZpbmUgRkxBR1Mg KEFWX09QVF9GTEFHX0ZJTFRFUklOR19QQVJBTSB8IEFWX09QVF9GTEFHX1ZJREVPX1BBUkFNKQor c3RhdGljIGNvbnN0IEFWT3B0aW9uIHNjZGV0X3Z1bGthbl9vcHRpb25zW10gPSB7CisgICAgeyAi dGhyZXNob2xkIiwgICAic2V0IHNjZW5lIGNoYW5nZSBkZXRlY3QgdGhyZXNob2xkIiwgICAgICAg IE9GRlNFVCh0aHJlc2hvbGQpLCAgQVZfT1BUX1RZUEVfRE9VQkxFLCAgIHsuZGJsID0gMTAufSwg ICAgIDAsICAxMDAuLCBGTEFHUyB9LAorICAgIHsgInQiLCAgICAgICAgICAgInNldCBzY2VuZSBj aGFuZ2UgZGV0ZWN0IHRocmVzaG9sZCIsICAgICAgICBPRkZTRVQodGhyZXNob2xkKSwgIEFWX09Q VF9UWVBFX0RPVUJMRSwgICB7LmRibCA9IDEwLn0sICAgICAwLCAgMTAwLiwgRkxBR1MgfSwKKyAg ICB7ICJzY19wYXNzIiwgICAgICJTZXQgdGhlIGZsYWcgdG8gcGFzcyBzY2VuZSBjaGFuZ2UgZnJh bWVzIiwgT0ZGU0VUKHNjX3Bhc3MpLCAgICBBVl9PUFRfVFlQRV9CT09MLCAgICAgey5pNjQgPSAw ICB9LCAgICAgMCwgICAgMSwgIEZMQUdTIH0sCisgICAgeyAicyIsICAgICAgICAgICAiU2V0IHRo ZSBmbGFnIHRvIHBhc3Mgc2NlbmUgY2hhbmdlIGZyYW1lcyIsIE9GRlNFVChzY19wYXNzKSwgICAg QVZfT1BUX1RZUEVfQk9PTCwgICAgIHsuaTY0ID0gMCAgfSwgICAgIDAsICAgIDEsICBGTEFHUyB9 LAorICAgIHsgTlVMTCB9Cit9OworCitBVkZJTFRFUl9ERUZJTkVfQ0xBU1Moc2NkZXRfdnVsa2Fu KTsKKworc3RhdGljIGNvbnN0IEFWRmlsdGVyUGFkIHNjZGV0X3Z1bGthbl9pbnB1dHNbXSA9IHsK KyAgICB7CisgICAgICAgIC5uYW1lICAgICAgICAgPSAiZGVmYXVsdCIsCisgICAgICAgIC50eXBl ICAgICAgICAgPSBBVk1FRElBX1RZUEVfVklERU8sCisgICAgICAgIC5maWx0ZXJfZnJhbWUgPSAm c2NkZXRfdnVsa2FuX2ZpbHRlcl9mcmFtZSwKKyAgICAgICAgLmNvbmZpZ19wcm9wcyA9ICZmZl92 a19maWx0ZXJfY29uZmlnX2lucHV0LAorICAgIH0sCit9OworCitzdGF0aWMgY29uc3QgQVZGaWx0 ZXJQYWQgc2NkZXRfdnVsa2FuX291dHB1dHNbXSA9IHsKKyAgICB7CisgICAgICAgIC5uYW1lID0g ImRlZmF1bHQiLAorICAgICAgICAudHlwZSA9IEFWTUVESUFfVFlQRV9WSURFTywKKyAgICAgICAg LmNvbmZpZ19wcm9wcyA9ICZmZl92a19maWx0ZXJfY29uZmlnX291dHB1dCwKKyAgICB9LAorfTsK KworY29uc3QgRkZGaWx0ZXIgZmZfdmZfc2NkZXRfdnVsa2FuID0geworICAgIC5wLm5hbWUgICAg ICAgICA9ICJzY2RldF92dWxrYW4iLAorICAgIC5wLmRlc2NyaXB0aW9uICA9IE5VTExfSUZfQ09O RklHX1NNQUxMKCJEZXRlY3QgdmlkZW8gc2NlbmUgY2hhbmdlIiksCisgICAgLnAucHJpdl9jbGFz cyAgID0gJnNjZGV0X3Z1bGthbl9jbGFzcywKKyAgICAucC5mbGFncyAgICAgICAgPSBBVkZJTFRF Ul9GTEFHX0hXREVWSUNFLAorICAgIC5wcml2X3NpemUgICAgICA9IHNpemVvZihTY2VuZURldGVj dFZ1bGthbkNvbnRleHQpLAorICAgIC5pbml0ICAgICAgICAgICA9ICZmZl92a19maWx0ZXJfaW5p dCwKKyAgICAudW5pbml0ICAgICAgICAgPSAmc2NkZXRfdnVsa2FuX3VuaW5pdCwKKyAgICBGSUxU RVJfSU5QVVRTKHNjZGV0X3Z1bGthbl9pbnB1dHMpLAorICAgIEZJTFRFUl9PVVRQVVRTKHNjZGV0 X3Z1bGthbl9vdXRwdXRzKSwKKyAgICBGSUxURVJfU0lOR0xFX1BJWEZNVChBVl9QSVhfRk1UX1ZV TEtBTiksCisgICAgLmZsYWdzX2ludGVybmFsID0gRkZfRklMVEVSX0ZMQUdfSFdGUkFNRV9BV0FS RSwKK307Ci0tIAoyLjQ5LjEKCgpGcm9tIGRlODAyNmI4ODAzNWU1ZGM5MjdlMWEzYzQ4YjE3ZWQw MzE4OGU5MTQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCkZyb206IEphbWFpa2ExIDxsdWthc3pj ejE4QHdwLnBsPgpEYXRlOiBXZWQsIDMgU2VwIDIwMjUgMTM6MDI6NDQgKzAwMDAKU3ViamVjdDog W1BBVENIIDAyNS8xMThdIENoYW5naW5nIHZ1bGthbiBmaWxlIGRpcmVjdG9yeQoKLS0tCiBsaWJh dmZpbHRlci92Zl90cmFuc3Bvc2VfdnVsa2FuLmMgfCAyNzUgLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgMjc1IGRlbGV0aW9ucygtKQogZGVsZXRlIG1vZGUg MTAwNjQ0IGxpYmF2ZmlsdGVyL3ZmX3RyYW5zcG9zZV92dWxrYW4uYwoKZGlmZiAtLWdpdCBhL2xp YmF2ZmlsdGVyL3ZmX3RyYW5zcG9zZV92dWxrYW4uYyBiL2xpYmF2ZmlsdGVyL3ZmX3RyYW5zcG9z ZV92dWxrYW4uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2ZlMmQxMWNiMi4uMDAw MDAwMDAwMAotLS0gYS9saWJhdmZpbHRlci92Zl90cmFuc3Bvc2VfdnVsa2FuLmMKKysrIC9kZXYv bnVsbApAQCAtMSwyNzUgKzAsMCBAQAotLyoKLSAqIGNvcHlyaWdodCAoYykgMjAyMSBXdSBKaWFu aHVhIDxqaWFuaHVhLnd1QGludGVsLmNvbT4KLSAqIENvcHlyaWdodCAoYykgTHlubmUKLSAqCi0g KiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCi0gKgotICogRkZtcGVnIGlzIGZyZWUgc29m dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVy IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBh cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2 ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg dmVyc2lvbi4KLSAqCi0gKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp dCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhh dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBM aWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3 YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y LCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCi0gKi8KLQotI2luY2x1ZGUgImxpYmF2dXRpbC9y YW5kb21fc2VlZC5oIgotI2luY2x1ZGUgImxpYmF2dXRpbC9vcHQuaCIKLSNpbmNsdWRlICJsaWJh dnV0aWwvdnVsa2FuX3NwaXJ2LmgiCi0jaW5jbHVkZSAidnVsa2FuX2ZpbHRlci5oIgotCi0jaW5j bHVkZSAiZmlsdGVycy5oIgotI2luY2x1ZGUgInRyYW5zcG9zZS5oIgotI2luY2x1ZGUgInZpZGVv LmgiCi0KLXR5cGVkZWYgc3RydWN0IFRyYW5zcG9zZVZ1bGthbkNvbnRleHQgewotICAgIEZGVnVs a2FuQ29udGV4dCB2a2N0eDsKLQotICAgIGludCBpbml0aWFsaXplZDsKLSAgICBGRlZrRXhlY1Bv b2wgZTsKLSAgICBBVlZ1bGthbkRldmljZVF1ZXVlRmFtaWx5ICpxZjsKLSAgICBGRlZ1bGthblNo YWRlciBzaGQ7Ci0KLSAgICBpbnQgZGlyOwotICAgIGludCBwYXNzdGhyb3VnaDsKLX0gVHJhbnNw b3NlVnVsa2FuQ29udGV4dDsKLQotc3RhdGljIGF2X2NvbGQgaW50IGluaXRfZmlsdGVyKEFWRmls dGVyQ29udGV4dCAqY3R4LCBBVkZyYW1lICppbikKLXsKLSAgICBpbnQgZXJyOwotICAgIHVpbnQ4 X3QgKnNwdl9kYXRhOwotICAgIHNpemVfdCBzcHZfbGVuOwotICAgIHZvaWQgKnNwdl9vcGFxdWUg PSBOVUxMOwotICAgIFRyYW5zcG9zZVZ1bGthbkNvbnRleHQgKnMgPSBjdHgtPnByaXY7Ci0gICAg RkZWdWxrYW5Db250ZXh0ICp2a2N0eCA9ICZzLT52a2N0eDsKLQotICAgIGNvbnN0IGludCBwbGFu ZXMgPSBhdl9waXhfZm10X2NvdW50X3BsYW5lcyhzLT52a2N0eC5vdXRwdXRfZm9ybWF0KTsKLSAg ICBGRlZ1bGthblNoYWRlciAqc2hkID0gJnMtPnNoZDsKLSAgICBGRlZrU1BJUlZDb21waWxlciAq c3B2OwotICAgIEZGVnVsa2FuRGVzY3JpcHRvclNldEJpbmRpbmcgKmRlc2M7Ci0KLSAgICBzcHYg PSBmZl92a19zcGlydl9pbml0KCk7Ci0gICAgaWYgKCFzcHYpIHsKLSAgICAgICAgYXZfbG9nKGN0 eCwgQVZfTE9HX0VSUk9SLCAiVW5hYmxlIHRvIGluaXRpYWxpemUgU1BJUi1WIGNvbXBpbGVyIVxu Iik7Ci0gICAgICAgIHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOwotICAgIH0KLQotICAgIHMtPnFm ID0gZmZfdmtfcWZfZmluZCh2a2N0eCwgVktfUVVFVUVfQ09NUFVURV9CSVQsIDApOwotICAgIGlm ICghcy0+cWYpIHsKLSAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiRGV2aWNlIGhh cyBubyBjb21wdXRlIHF1ZXVlc1xuIik7Ci0gICAgICAgIGVyciA9IEFWRVJST1IoRU5PVFNVUCk7 Ci0gICAgICAgIGdvdG8gZmFpbDsKLSAgICB9Ci0KLSAgICBSRVQoZmZfdmtfZXhlY19wb29sX2lu aXQodmtjdHgsIHMtPnFmLCAmcy0+ZSwgcy0+cWYtPm51bSo0LCAwLCAwLCAwLCBOVUxMKSk7Ci0g ICAgUkVUKGZmX3ZrX3NoYWRlcl9pbml0KHZrY3R4LCAmcy0+c2hkLCAidHJhbnNwb3NlIiwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgVktfU0hBREVSX1NUQUdFX0NPTVBVVEVfQklULAotICAg ICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAzMiwgMSwgMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgMCkpOwotCi0gICAgZGVzYyA9 IChGRlZ1bGthbkRlc2NyaXB0b3JTZXRCaW5kaW5nIFtdKSB7Ci0gICAgICAgIHsKLSAgICAgICAg ICAgIC5uYW1lICAgICAgID0gImlucHV0X2ltYWdlcyIsCi0gICAgICAgICAgICAudHlwZSAgICAg ICA9IFZLX0RFU0NSSVBUT1JfVFlQRV9TVE9SQUdFX0lNQUdFLAotICAgICAgICAgICAgLm1lbV9s YXlvdXQgPSBmZl92a19zaGFkZXJfcmVwX2ZtdChzLT52a2N0eC5pbnB1dF9mb3JtYXQsIEZGX1ZL X1JFUF9GTE9BVCksCi0gICAgICAgICAgICAubWVtX3F1YWxpICA9ICJyZWFkb25seSIsCi0gICAg ICAgICAgICAuZGltZW5zaW9ucyA9IDIsCi0gICAgICAgICAgICAuZWxlbXMgICAgICA9IHBsYW5l cywKLSAgICAgICAgICAgIC5zdGFnZXMgICAgID0gVktfU0hBREVSX1NUQUdFX0NPTVBVVEVfQklU LAotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAubmFtZSAgICAgICA9ICJvdXRw dXRfaW1hZ2VzIiwKLSAgICAgICAgICAgIC50eXBlICAgICAgID0gVktfREVTQ1JJUFRPUl9UWVBF X1NUT1JBR0VfSU1BR0UsCi0gICAgICAgICAgICAubWVtX2xheW91dCA9IGZmX3ZrX3NoYWRlcl9y ZXBfZm10KHMtPnZrY3R4Lm91dHB1dF9mb3JtYXQsIEZGX1ZLX1JFUF9GTE9BVCksCi0gICAgICAg ICAgICAubWVtX3F1YWxpICA9ICJ3cml0ZW9ubHkiLAotICAgICAgICAgICAgLmRpbWVuc2lvbnMg PSAyLAotICAgICAgICAgICAgLmVsZW1zICAgICAgPSBwbGFuZXMsCi0gICAgICAgICAgICAuc3Rh Z2VzICAgICA9IFZLX1NIQURFUl9TVEFHRV9DT01QVVRFX0JJVCwKLSAgICAgICAgfSwKLSAgICB9 OwotCi0gICAgUkVUKGZmX3ZrX3NoYWRlcl9hZGRfZGVzY3JpcHRvcl9zZXQodmtjdHgsICZzLT5z aGQsIGRlc2MsIDIsIDAsIDApKTsKLQotICAgIEdMU0xDKDAsIHZvaWQgbWFpbigpICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIEdMU0xDKDAsIHsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAp OwotICAgIEdMU0xDKDEsICAgICBpdmVjMiBzaXplOyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICApOwotICAgIEdMU0xDKDEsICAgICBpdmVjMiBwb3MgPSBpdmVjMihn bF9HbG9iYWxJbnZvY2F0aW9uSUQueHkpOyAgICAgICAgICApOwotICAgIGZvciAoaW50IGkgPSAw OyBpIDwgcGxhbmVzOyBpKyspIHsKLSAgICAgICAgR0xTTEMoMCwgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgR0xTTEYoMSwg c2l6ZSA9IGltYWdlU2l6ZShvdXRwdXRfaW1hZ2VzWyVpXSk7ICAgICAgICAgICAgICAgICxpKTsK LSAgICAgICAgR0xTTEMoMSwgaWYgKElTX1dJVEhJTihwb3MsIHNpemUpKSB7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgKTsKLSAgICAgICAgaWYgKHMtPmRpciA9PSBUUkFOU1BPU0VfQ0NMT0NL KQotICAgICAgICAgICAgR0xTTEYoMiwgdmVjNCByZXMgPSBpbWFnZUxvYWQoaW5wdXRfaW1hZ2Vz WyVpXSwgaXZlYzIoc2l6ZS55IC0gcG9zLnksIHBvcy54KSk7ICxpKTsKLSAgICAgICAgZWxzZSBp ZiAocy0+ZGlyID09IFRSQU5TUE9TRV9DTE9DS19GTElQIHx8IHMtPmRpciA9PSBUUkFOU1BPU0Vf Q0xPQ0spIHsKLSAgICAgICAgICAgIEdMU0xGKDIsIHZlYzQgcmVzID0gaW1hZ2VMb2FkKGlucHV0 X2ltYWdlc1slaV0sIGl2ZWMyKHNpemUueXggLSBwb3MueXgpKTsgICAgICAsaSk7Ci0gICAgICAg ICAgICBpZiAocy0+ZGlyID09IFRSQU5TUE9TRV9DTE9DSykKLSAgICAgICAgICAgICAgICBHTFNM QygyLCBwb3MgPSBpdmVjMihwb3MueCwgc2l6ZS55IC0gcG9zLnkpOyAgICAgICAgICAgKTsKLSAg ICAgICAgfSBlbHNlCi0gICAgICAgICAgICBHTFNMRigyLCB2ZWM0IHJlcyA9IGltYWdlTG9hZChp bnB1dF9pbWFnZXNbJWldLCBwb3MueXgpOyAgLGkpOwotICAgICAgICBHTFNMRigyLCAgICAgaW1h Z2VTdG9yZShvdXRwdXRfaW1hZ2VzWyVpXSwgcG9zLCByZXMpOyAgICAgICAgLGkpOwotICAgICAg ICBHTFNMQygxLCB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICApOwotICAgIH0KLSAgICBHTFNMQygwLCB9ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLQotICAgIFJFVChzcHYtPmNvbXBp bGVfc2hhZGVyKHZrY3R4LCBzcHYsIHNoZCwgJnNwdl9kYXRhLCAmc3B2X2xlbiwgIm1haW4iLAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzcHZfb3BhcXVlKSk7Ci0gICAgUkVUKGZmX3Zr X3NoYWRlcl9saW5rKHZrY3R4LCBzaGQsIHNwdl9kYXRhLCBzcHZfbGVuLCAibWFpbiIpKTsKLQot ICAgIFJFVChmZl92a19zaGFkZXJfcmVnaXN0ZXJfZXhlYyh2a2N0eCwgJnMtPmUsICZzLT5zaGQp KTsKLQotICAgIHMtPmluaXRpYWxpemVkID0gMTsKLQotZmFpbDoKLSAgICBpZiAoc3B2X29wYXF1 ZSkKLSAgICAgICAgc3B2LT5mcmVlX3NoYWRlcihzcHYsICZzcHZfb3BhcXVlKTsKLSAgICBpZiAo c3B2KQotICAgICAgICBzcHYtPnVuaW5pdCgmc3B2KTsKLQotICAgIHJldHVybiBlcnI7Ci19Ci0K LXN0YXRpYyBpbnQgZmlsdGVyX2ZyYW1lKEFWRmlsdGVyTGluayAqaW5saW5rLCBBVkZyYW1lICpp bikKLXsKLSAgICBpbnQgZXJyOwotICAgIEFWRnJhbWUgKm91dCA9IE5VTEw7Ci0gICAgQVZGaWx0 ZXJDb250ZXh0ICpjdHggPSBpbmxpbmstPmRzdDsKLSAgICBUcmFuc3Bvc2VWdWxrYW5Db250ZXh0 ICpzID0gY3R4LT5wcml2OwotICAgIEFWRmlsdGVyTGluayAqb3V0bGluayA9IGN0eC0+b3V0cHV0 c1swXTsKLQotICAgIGlmIChzLT5wYXNzdGhyb3VnaCkKLSAgICAgICAgcmV0dXJuIGZmX2ZpbHRl cl9mcmFtZShvdXRsaW5rLCBpbik7Ci0KLSAgICBvdXQgPSBmZl9nZXRfdmlkZW9fYnVmZmVyKG91 dGxpbmssIG91dGxpbmstPncsIG91dGxpbmstPmgpOwotICAgIGlmICghb3V0KSB7Ci0gICAgICAg IGVyciA9IEFWRVJST1IoRU5PTUVNKTsKLSAgICAgICAgZ290byBmYWlsOwotICAgIH0KLQotICAg IGlmICghcy0+aW5pdGlhbGl6ZWQpCi0gICAgICAgIFJFVChpbml0X2ZpbHRlcihjdHgsIGluKSk7 Ci0KLSAgICBSRVQoZmZfdmtfZmlsdGVyX3Byb2Nlc3Nfc2ltcGxlKCZzLT52a2N0eCwgJnMtPmUs ICZzLT5zaGQsIG91dCwgaW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBW S19OVUxMX0hBTkRMRSwgTlVMTCwgMCkpOwotCi0gICAgUkVUKGF2X2ZyYW1lX2NvcHlfcHJvcHMo b3V0LCBpbikpOwotCi0gICAgaWYgKGluLT5zYW1wbGVfYXNwZWN0X3JhdGlvLm51bSkKLSAgICAg ICAgb3V0LT5zYW1wbGVfYXNwZWN0X3JhdGlvID0gaW4tPnNhbXBsZV9hc3BlY3RfcmF0aW87Ci0g ICAgZWxzZSB7Ci0gICAgICAgIG91dC0+c2FtcGxlX2FzcGVjdF9yYXRpby5udW0gPSBpbi0+c2Ft cGxlX2FzcGVjdF9yYXRpby5kZW47Ci0gICAgICAgIG91dC0+c2FtcGxlX2FzcGVjdF9yYXRpby5k ZW4gPSBpbi0+c2FtcGxlX2FzcGVjdF9yYXRpby5udW07Ci0gICAgfQotCi0gICAgYXZfZnJhbWVf ZnJlZSgmaW4pOwotCi0gICAgcmV0dXJuIGZmX2ZpbHRlcl9mcmFtZShvdXRsaW5rLCBvdXQpOwot Ci1mYWlsOgotICAgIGF2X2ZyYW1lX2ZyZWUoJmluKTsKLSAgICBhdl9mcmFtZV9mcmVlKCZvdXQp OwotICAgIHJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBhdl9jb2xkIHZvaWQgdHJhbnNwb3NlX3Z1 bGthbl91bmluaXQoQVZGaWx0ZXJDb250ZXh0ICphdmN0eCkKLXsKLSAgICBUcmFuc3Bvc2VWdWxr YW5Db250ZXh0ICpzID0gYXZjdHgtPnByaXY7Ci0gICAgRkZWdWxrYW5Db250ZXh0ICp2a2N0eCA9 ICZzLT52a2N0eDsKLQotICAgIGZmX3ZrX2V4ZWNfcG9vbF9mcmVlKHZrY3R4LCAmcy0+ZSk7Ci0g ICAgZmZfdmtfc2hhZGVyX2ZyZWUodmtjdHgsICZzLT5zaGQpOwotCi0gICAgZmZfdmtfdW5pbml0 KCZzLT52a2N0eCk7Ci0KLSAgICBzLT5pbml0aWFsaXplZCA9IDA7Ci19Ci0KLXN0YXRpYyBpbnQg Y29uZmlnX3Byb3BzX291dHB1dChBVkZpbHRlckxpbmsgKm91dGxpbmspCi17Ci0gICAgRmlsdGVy TGluayAqb3V0bCA9IGZmX2ZpbHRlcl9saW5rKG91dGxpbmspOwotICAgIEFWRmlsdGVyQ29udGV4 dCAqYXZjdHggPSBvdXRsaW5rLT5zcmM7Ci0gICAgVHJhbnNwb3NlVnVsa2FuQ29udGV4dCAqcyA9 IGF2Y3R4LT5wcml2OwotICAgIEZGVnVsa2FuQ29udGV4dCAqdmtjdHggPSAmcy0+dmtjdHg7Ci0g ICAgQVZGaWx0ZXJMaW5rICppbmxpbmsgPSBhdmN0eC0+aW5wdXRzWzBdOwotICAgIEZpbHRlckxp bmsgKmlubCA9IGZmX2ZpbHRlcl9saW5rKGlubGluayk7Ci0KLSAgICBpZiAoKGlubGluay0+dyA+ PSBpbmxpbmstPmggJiYgcy0+cGFzc3Rocm91Z2ggPT0gVFJBTlNQT1NFX1BUX1RZUEVfTEFORFND QVBFKSB8fAotICAgICAgICAoaW5saW5rLT53IDw9IGlubGluay0+aCAmJiBzLT5wYXNzdGhyb3Vn aCA9PSBUUkFOU1BPU0VfUFRfVFlQRV9QT1JUUkFJVCkpIHsKLSAgICAgICAgYXZfbG9nKGF2Y3R4 LCBBVl9MT0dfVkVSQk9TRSwKLSAgICAgICAgICAgICAgICJ3OiVkIGg6JWQgLT4gdzolZCBoOiVk IChwYXNzdGhyb3VnaCBtb2RlKVxuIiwKLSAgICAgICAgICAgICAgIGlubGluay0+dywgaW5saW5r LT5oLCBpbmxpbmstPncsIGlubGluay0+aCk7Ci0gICAgICAgIG91dGwtPmh3X2ZyYW1lc19jdHgg PSBhdl9idWZmZXJfcmVmKGlubC0+aHdfZnJhbWVzX2N0eCk7Ci0gICAgICAgIHJldHVybiBvdXRs LT5od19mcmFtZXNfY3R4ID8gMCA6IEFWRVJST1IoRU5PTUVNKTsKLSAgICB9IGVsc2UgewotICAg ICAgICBzLT5wYXNzdGhyb3VnaCA9IFRSQU5TUE9TRV9QVF9UWVBFX05PTkU7Ci0gICAgfQotCi0g ICAgdmtjdHgtPm91dHB1dF93aWR0aCAgPSBpbmxpbmstPmg7Ci0gICAgdmtjdHgtPm91dHB1dF9o ZWlnaHQgPSBpbmxpbmstPnc7Ci0KLSAgICBpZiAoaW5saW5rLT5zYW1wbGVfYXNwZWN0X3JhdGlv Lm51bSkKLSAgICAgICAgb3V0bGluay0+c2FtcGxlX2FzcGVjdF9yYXRpbyA9IGF2X2Rpdl9xKChB VlJhdGlvbmFsKSB7IDEsIDEgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGlubGluay0+c2FtcGxlX2FzcGVjdF9yYXRpbyk7Ci0gICAgZWxzZQotICAg ICAgICBvdXRsaW5rLT5zYW1wbGVfYXNwZWN0X3JhdGlvID0gaW5saW5rLT5zYW1wbGVfYXNwZWN0 X3JhdGlvOwotCi0gICAgcmV0dXJuIGZmX3ZrX2ZpbHRlcl9jb25maWdfb3V0cHV0KG91dGxpbmsp OwotfQotCi0jZGVmaW5lIE9GRlNFVCh4KSBvZmZzZXRvZihUcmFuc3Bvc2VWdWxrYW5Db250ZXh0 LCB4KQotI2RlZmluZSBGTEFHUyAoQVZfT1BUX0ZMQUdfRklMVEVSSU5HX1BBUkFNIHwgQVZfT1BU X0ZMQUdfVklERU9fUEFSQU0pCi0KLXN0YXRpYyBjb25zdCBBVk9wdGlvbiB0cmFuc3Bvc2VfdnVs a2FuX29wdGlvbnNbXSA9IHsKLSAgICB7ICJkaXIiLCAic2V0IHRyYW5zcG9zZSBkaXJlY3Rpb24i LCBPRkZTRVQoZGlyKSwgQVZfT1BUX1RZUEVfSU5ULCB7IC5pNjQgPSBUUkFOU1BPU0VfQ0NMT0NL X0ZMSVAgfSwgMCwgNywgRkxBR1MsIC51bml0ID0gImRpciIgfSwKLSAgICAgICAgeyAiY2Nsb2Nr X2ZsaXAiLCAicm90YXRlIGNvdW50ZXItY2xvY2t3aXNlIHdpdGggdmVydGljYWwgZmxpcCIsIDAs IEFWX09QVF9UWVBFX0NPTlNULCB7IC5pNjQgPSBUUkFOU1BPU0VfQ0NMT0NLX0ZMSVAgfSwgLmZs YWdzPUZMQUdTLCAudW5pdCA9ICJkaXIiIH0sCi0gICAgICAgIHsgImNsb2NrIiwgICAgICAgInJv dGF0ZSBjbG9ja3dpc2UiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBBVl9PUFRfVFlQ RV9DT05TVCwgeyAuaTY0ID0gVFJBTlNQT1NFX0NMT0NLICAgICAgIH0sIC5mbGFncz1GTEFHUywg LnVuaXQgPSAiZGlyIiB9LAotICAgICAgICB7ICJjY2xvY2siLCAgICAgICJyb3RhdGUgY291bnRl ci1jbG9ja3dpc2UiLCAgICAgICAgICAgICAgICAgICAgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsg Lmk2NCA9IFRSQU5TUE9TRV9DQ0xPQ0sgICAgICB9LCAuZmxhZ3M9RkxBR1MsIC51bml0ID0gImRp ciIgfSwKLSAgICAgICAgeyAiY2xvY2tfZmxpcCIsICAicm90YXRlIGNsb2Nrd2lzZSB3aXRoIHZl cnRpY2FsIGZsaXAiLCAgICAgICAgIDAsIEFWX09QVF9UWVBFX0NPTlNULCB7IC5pNjQgPSBUUkFO U1BPU0VfQ0xPQ0tfRkxJUCAgfSwgLmZsYWdzPUZMQUdTLCAudW5pdCA9ICJkaXIiIH0sCi0KLSAg ICB7ICJwYXNzdGhyb3VnaCIsICJkbyBub3QgYXBwbHkgdHJhbnNwb3NpdGlvbiBpZiB0aGUgaW5w dXQgbWF0Y2hlcyB0aGUgc3BlY2lmaWVkIGdlb21ldHJ5IiwKLSAgICAgIE9GRlNFVChwYXNzdGhy b3VnaCksIEFWX09QVF9UWVBFX0lOVCwgey5pNjQ9VFJBTlNQT1NFX1BUX1RZUEVfTk9ORX0sICAw LCBJTlRfTUFYLCBGTEFHUywgLnVuaXQgPSAicGFzc3Rocm91Z2giIH0sCi0gICAgICAgIHsgIm5v bmUiLCAgICAgICJhbHdheXMgYXBwbHkgdHJhbnNwb3NpdGlvbiIsICAgMCwgQVZfT1BUX1RZUEVf Q09OU1QsIHsuaTY0PVRSQU5TUE9TRV9QVF9UWVBFX05PTkV9LCAgICAgIElOVF9NSU4sIElOVF9N QVgsIEZMQUdTLCAudW5pdCA9ICJwYXNzdGhyb3VnaCIgfSwKLSAgICAgICAgeyAicG9ydHJhaXQi LCAgInByZXNlcnZlIHBvcnRyYWl0IGdlb21ldHJ5IiwgICAwLCBBVl9PUFRfVFlQRV9DT05TVCwg ey5pNjQ9VFJBTlNQT1NFX1BUX1RZUEVfUE9SVFJBSVR9LCAgSU5UX01JTiwgSU5UX01BWCwgRkxB R1MsIC51bml0ID0gInBhc3N0aHJvdWdoIiB9LAotICAgICAgICB7ICJsYW5kc2NhcGUiLCAicHJl c2VydmUgbGFuZHNjYXBlIGdlb21ldHJ5IiwgIDAsIEFWX09QVF9UWVBFX0NPTlNULCB7Lmk2ND1U UkFOU1BPU0VfUFRfVFlQRV9MQU5EU0NBUEV9LCBJTlRfTUlOLCBJTlRfTUFYLCBGTEFHUywgLnVu aXQgPSAicGFzc3Rocm91Z2giIH0sCi0KLSAgICB7IE5VTEwgfQotfTsKLQotQVZGSUxURVJfREVG SU5FX0NMQVNTKHRyYW5zcG9zZV92dWxrYW4pOwotCi1zdGF0aWMgY29uc3QgQVZGaWx0ZXJQYWQg dHJhbnNwb3NlX3Z1bGthbl9pbnB1dHNbXSA9IHsKLSAgICB7Ci0gICAgICAgIC5uYW1lICAgICAg ICAgPSAiZGVmYXVsdCIsCi0gICAgICAgIC50eXBlICAgICAgICAgPSBBVk1FRElBX1RZUEVfVklE RU8sCi0gICAgICAgIC5maWx0ZXJfZnJhbWUgPSAmZmlsdGVyX2ZyYW1lLAotICAgICAgICAuY29u ZmlnX3Byb3BzID0gJmZmX3ZrX2ZpbHRlcl9jb25maWdfaW5wdXQsCi0gICAgfQotfTsKLQotc3Rh dGljIGNvbnN0IEFWRmlsdGVyUGFkIHRyYW5zcG9zZV92dWxrYW5fb3V0cHV0c1tdID0gewotICAg IHsKLSAgICAgICAgLm5hbWUgICAgICAgICA9ICJkZWZhdWx0IiwKLSAgICAgICAgLnR5cGUgICAg ICAgICA9IEFWTUVESUFfVFlQRV9WSURFTywKLSAgICAgICAgLmNvbmZpZ19wcm9wcyA9ICZjb25m aWdfcHJvcHNfb3V0cHV0LAotICAgIH0KLX07Ci0KLWNvbnN0IEZGRmlsdGVyIGZmX3ZmX3RyYW5z cG9zZV92dWxrYW4gPSB7Ci0gICAgLnAubmFtZSAgICAgICAgID0gInRyYW5zcG9zZV92dWxrYW4i LAotICAgIC5wLmRlc2NyaXB0aW9uICA9IE5VTExfSUZfQ09ORklHX1NNQUxMKCJUcmFuc3Bvc2Ug VnVsa2FuIEZpbHRlciIpLAotICAgIC5wLnByaXZfY2xhc3MgICA9ICZ0cmFuc3Bvc2VfdnVsa2Fu X2NsYXNzLAotICAgIC5wLmZsYWdzICAgICAgICA9IEFWRklMVEVSX0ZMQUdfSFdERVZJQ0UsCi0g ICAgLnByaXZfc2l6ZSAgICAgID0gc2l6ZW9mKFRyYW5zcG9zZVZ1bGthbkNvbnRleHQpLAotICAg IC5pbml0ICAgICAgICAgICA9ICZmZl92a19maWx0ZXJfaW5pdCwKLSAgICAudW5pbml0ICAgICAg ICAgPSAmdHJhbnNwb3NlX3Z1bGthbl91bmluaXQsCi0gICAgRklMVEVSX0lOUFVUUyh0cmFuc3Bv c2VfdnVsa2FuX2lucHV0cyksCi0gICAgRklMVEVSX09VVFBVVFModHJhbnNwb3NlX3Z1bGthbl9v dXRwdXRzKSwKLSAgICBGSUxURVJfU0lOR0xFX1BJWEZNVChBVl9QSVhfRk1UX1ZVTEtBTiksCi0g ICAgLmZsYWdzX2ludGVybmFsID0gRkZfRklMVEVSX0ZMQUdfSFdGUkFNRV9BV0FSRSwKLX07Ci0t IAoyLjQ5LjEKCgpGcm9tIDQyZjI5NTFlMzNlZDEwYTQ4YWI1ODUyOWZjYjY5NzEwNjkzNzYxZjYg TW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCkZyb206IEphbWFpa2ExIDxsdWthc3pjejE4QHdwLnBs PgpEYXRlOiBXZWQsIDMgU2VwIDIwMjUgMTM6MDM6MjIgKzAwMDAKU3ViamVjdDogW1BBVENIIDAy Ni8xMThdIENoYW5naW5nIHZ1bGthbiBmaWxlIGRpcmVjdG9yeQoKLS0tCiBsaWJhdmZpbHRlci92 dWxrYW4vdmZfdHJhbnNwb3NlX3Z1bGthbi5jIHwgMjc1ICsrKysrKysrKysrKysrKysrKysrKysr CiAxIGZpbGUgY2hhbmdlZCwgMjc1IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBs aWJhdmZpbHRlci92dWxrYW4vdmZfdHJhbnNwb3NlX3Z1bGthbi5jCgpkaWZmIC0tZ2l0IGEvbGli YXZmaWx0ZXIvdnVsa2FuL3ZmX3RyYW5zcG9zZV92dWxrYW4uYyBiL2xpYmF2ZmlsdGVyL3Z1bGth bi92Zl90cmFuc3Bvc2VfdnVsa2FuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMC4uMTE2MmM3ODU4OAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmF2ZmlsdGVyL3Z1bGthbi92 Zl90cmFuc3Bvc2VfdnVsa2FuLmMKQEAgLTAsMCArMSwyNzUgQEAKKy8qCisgKiBjb3B5cmlnaHQg KGMpIDIwMjEgV3UgSmlhbmh1YSA8amlhbmh1YS53dUBpbnRlbC5jb20+CisgKiBDb3B5cmlnaHQg KGMpIEx5bm5lCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgorICoKKyAqIEZG bXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b247IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGlu IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK KyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5l cmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0 byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry ZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorICovCisKKyNpbmNs dWRlICJsaWJhdnV0aWwvcmFuZG9tX3NlZWQuaCIKKyNpbmNsdWRlICJsaWJhdnV0aWwvb3B0Lmgi CisjaW5jbHVkZSAiLi4vLi4vbGliYXZ1dGlsL3Z1bGthbi92dWxrYW5fc3BpcnYuaCIKKyNpbmNs dWRlICJ2dWxrYW5fZmlsdGVyLmgiCisKKyNpbmNsdWRlICJsaWJhdmZpbHRlci9maWx0ZXJzLmgi CisjaW5jbHVkZSAibGliYXZmaWx0ZXIvdHJhbnNwb3NlLmgiCisjaW5jbHVkZSAibGliYXZmaWx0 ZXIvdmlkZW8uaCIKKwordHlwZWRlZiBzdHJ1Y3QgVHJhbnNwb3NlVnVsa2FuQ29udGV4dCB7Cisg ICAgRkZWdWxrYW5Db250ZXh0IHZrY3R4OworCisgICAgaW50IGluaXRpYWxpemVkOworICAgIEZG VmtFeGVjUG9vbCBlOworICAgIEFWVnVsa2FuRGV2aWNlUXVldWVGYW1pbHkgKnFmOworICAgIEZG VnVsa2FuU2hhZGVyIHNoZDsKKworICAgIGludCBkaXI7CisgICAgaW50IHBhc3N0aHJvdWdoOwor fSBUcmFuc3Bvc2VWdWxrYW5Db250ZXh0OworCitzdGF0aWMgYXZfY29sZCBpbnQgaW5pdF9maWx0 ZXIoQVZGaWx0ZXJDb250ZXh0ICpjdHgsIEFWRnJhbWUgKmluKQoreworICAgIGludCBlcnI7Cisg ICAgdWludDhfdCAqc3B2X2RhdGE7CisgICAgc2l6ZV90IHNwdl9sZW47CisgICAgdm9pZCAqc3B2 X29wYXF1ZSA9IE5VTEw7CisgICAgVHJhbnNwb3NlVnVsa2FuQ29udGV4dCAqcyA9IGN0eC0+cHJp djsKKyAgICBGRlZ1bGthbkNvbnRleHQgKnZrY3R4ID0gJnMtPnZrY3R4OworCisgICAgY29uc3Qg aW50IHBsYW5lcyA9IGF2X3BpeF9mbXRfY291bnRfcGxhbmVzKHMtPnZrY3R4Lm91dHB1dF9mb3Jt YXQpOworICAgIEZGVnVsa2FuU2hhZGVyICpzaGQgPSAmcy0+c2hkOworICAgIEZGVmtTUElSVkNv bXBpbGVyICpzcHY7CisgICAgRkZWdWxrYW5EZXNjcmlwdG9yU2V0QmluZGluZyAqZGVzYzsKKwor ICAgIHNwdiA9IGZmX3ZrX3NwaXJ2X2luaXQoKTsKKyAgICBpZiAoIXNwdikgeworICAgICAgICBh dl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJVbmFibGUgdG8gaW5pdGlhbGl6ZSBTUElSLVYgY29t cGlsZXIhXG4iKTsKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfRVhURVJOQUw7CisgICAgfQorCisg ICAgcy0+cWYgPSBmZl92a19xZl9maW5kKHZrY3R4LCBWS19RVUVVRV9DT01QVVRFX0JJVCwgMCk7 CisgICAgaWYgKCFzLT5xZikgeworICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJE ZXZpY2UgaGFzIG5vIGNvbXB1dGUgcXVldWVzXG4iKTsKKyAgICAgICAgZXJyID0gQVZFUlJPUihF Tk9UU1VQKTsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIFJFVChmZl92a19leGVj X3Bvb2xfaW5pdCh2a2N0eCwgcy0+cWYsICZzLT5lLCBzLT5xZi0+bnVtKjQsIDAsIDAsIDAsIE5V TEwpKTsKKyAgICBSRVQoZmZfdmtfc2hhZGVyX2luaXQodmtjdHgsICZzLT5zaGQsICJ0cmFuc3Bv c2UiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBWS19TSEFERVJfU1RBR0VfQ09NUFVURV9C SVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDAsCisgICAgICAgICAgICAgICAg ICAgICAgICAgIDMyLCAxLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAwKSk7CisKKyAg ICBkZXNjID0gKEZGVnVsa2FuRGVzY3JpcHRvclNldEJpbmRpbmcgW10pIHsKKyAgICAgICAgewor ICAgICAgICAgICAgLm5hbWUgICAgICAgPSAiaW5wdXRfaW1hZ2VzIiwKKyAgICAgICAgICAgIC50 eXBlICAgICAgID0gVktfREVTQ1JJUFRPUl9UWVBFX1NUT1JBR0VfSU1BR0UsCisgICAgICAgICAg ICAubWVtX2xheW91dCA9IGZmX3ZrX3NoYWRlcl9yZXBfZm10KHMtPnZrY3R4LmlucHV0X2Zvcm1h dCwgRkZfVktfUkVQX0ZMT0FUKSwKKyAgICAgICAgICAgIC5tZW1fcXVhbGkgID0gInJlYWRvbmx5 IiwKKyAgICAgICAgICAgIC5kaW1lbnNpb25zID0gMiwKKyAgICAgICAgICAgIC5lbGVtcyAgICAg ID0gcGxhbmVzLAorICAgICAgICAgICAgLnN0YWdlcyAgICAgPSBWS19TSEFERVJfU1RBR0VfQ09N UFVURV9CSVQsCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgIC5uYW1lICAgICAg ID0gIm91dHB1dF9pbWFnZXMiLAorICAgICAgICAgICAgLnR5cGUgICAgICAgPSBWS19ERVNDUklQ VE9SX1RZUEVfU1RPUkFHRV9JTUFHRSwKKyAgICAgICAgICAgIC5tZW1fbGF5b3V0ID0gZmZfdmtf c2hhZGVyX3JlcF9mbXQocy0+dmtjdHgub3V0cHV0X2Zvcm1hdCwgRkZfVktfUkVQX0ZMT0FUKSwK KyAgICAgICAgICAgIC5tZW1fcXVhbGkgID0gIndyaXRlb25seSIsCisgICAgICAgICAgICAuZGlt ZW5zaW9ucyA9IDIsCisgICAgICAgICAgICAuZWxlbXMgICAgICA9IHBsYW5lcywKKyAgICAgICAg ICAgIC5zdGFnZXMgICAgID0gVktfU0hBREVSX1NUQUdFX0NPTVBVVEVfQklULAorICAgICAgICB9 LAorICAgIH07CisKKyAgICBSRVQoZmZfdmtfc2hhZGVyX2FkZF9kZXNjcmlwdG9yX3NldCh2a2N0 eCwgJnMtPnNoZCwgZGVzYywgMiwgMCwgMCkpOworCisgICAgR0xTTEMoMCwgdm9pZCBtYWluKCkg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgR0xT TEMoMCwgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICk7CisgICAgR0xTTEMoMSwgICAgIGl2ZWMyIHNpemU7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgR0xTTEMoMSwgICAgIGl2ZWMyIHBvcyA9 IGl2ZWMyKGdsX0dsb2JhbEludm9jYXRpb25JRC54eSk7ICAgICAgICAgICk7CisgICAgZm9yIChp bnQgaSA9IDA7IGkgPCBwbGFuZXM7IGkrKykgeworICAgICAgICBHTFNMQygwLCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICBH TFNMRigxLCBzaXplID0gaW1hZ2VTaXplKG91dHB1dF9pbWFnZXNbJWldKTsgICAgICAgICAgICAg ICAgLGkpOworICAgICAgICBHTFNMQygxLCBpZiAoSVNfV0lUSElOKHBvcywgc2l6ZSkpIHsgICAg ICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICBpZiAocy0+ZGlyID09IFRSQU5TUE9T RV9DQ0xPQ0spCisgICAgICAgICAgICBHTFNMRigyLCB2ZWM0IHJlcyA9IGltYWdlTG9hZChpbnB1 dF9pbWFnZXNbJWldLCBpdmVjMihzaXplLnkgLSBwb3MueSwgcG9zLngpKTsgLGkpOworICAgICAg ICBlbHNlIGlmIChzLT5kaXIgPT0gVFJBTlNQT1NFX0NMT0NLX0ZMSVAgfHwgcy0+ZGlyID09IFRS QU5TUE9TRV9DTE9DSykgeworICAgICAgICAgICAgR0xTTEYoMiwgdmVjNCByZXMgPSBpbWFnZUxv YWQoaW5wdXRfaW1hZ2VzWyVpXSwgaXZlYzIoc2l6ZS55eCAtIHBvcy55eCkpOyAgICAgICxpKTsK KyAgICAgICAgICAgIGlmIChzLT5kaXIgPT0gVFJBTlNQT1NFX0NMT0NLKQorICAgICAgICAgICAg ICAgIEdMU0xDKDIsIHBvcyA9IGl2ZWMyKHBvcy54LCBzaXplLnkgLSBwb3MueSk7ICAgICAgICAg ICApOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIEdMU0xGKDIsIHZlYzQgcmVzID0gaW1h Z2VMb2FkKGlucHV0X2ltYWdlc1slaV0sIHBvcy55eCk7ICAsaSk7CisgICAgICAgIEdMU0xGKDIs ICAgICBpbWFnZVN0b3JlKG91dHB1dF9pbWFnZXNbJWldLCBwb3MsIHJlcyk7ICAgICAgICAsaSk7 CisgICAgICAgIEdMU0xDKDEsIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICk7CisgICAgfQorICAgIEdMU0xDKDAsIH0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworCisgICAgUkVUKHNw di0+Y29tcGlsZV9zaGFkZXIodmtjdHgsIHNwdiwgc2hkLCAmc3B2X2RhdGEsICZzcHZfbGVuLCAi bWFpbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNwdl9vcGFxdWUpKTsKKyAgICBS RVQoZmZfdmtfc2hhZGVyX2xpbmsodmtjdHgsIHNoZCwgc3B2X2RhdGEsIHNwdl9sZW4sICJtYWlu IikpOworCisgICAgUkVUKGZmX3ZrX3NoYWRlcl9yZWdpc3Rlcl9leGVjKHZrY3R4LCAmcy0+ZSwg JnMtPnNoZCkpOworCisgICAgcy0+aW5pdGlhbGl6ZWQgPSAxOworCitmYWlsOgorICAgIGlmIChz cHZfb3BhcXVlKQorICAgICAgICBzcHYtPmZyZWVfc2hhZGVyKHNwdiwgJnNwdl9vcGFxdWUpOwor ICAgIGlmIChzcHYpCisgICAgICAgIHNwdi0+dW5pbml0KCZzcHYpOworCisgICAgcmV0dXJuIGVy cjsKK30KKworc3RhdGljIGludCBmaWx0ZXJfZnJhbWUoQVZGaWx0ZXJMaW5rICppbmxpbmssIEFW RnJhbWUgKmluKQoreworICAgIGludCBlcnI7CisgICAgQVZGcmFtZSAqb3V0ID0gTlVMTDsKKyAg ICBBVkZpbHRlckNvbnRleHQgKmN0eCA9IGlubGluay0+ZHN0OworICAgIFRyYW5zcG9zZVZ1bGth bkNvbnRleHQgKnMgPSBjdHgtPnByaXY7CisgICAgQVZGaWx0ZXJMaW5rICpvdXRsaW5rID0gY3R4 LT5vdXRwdXRzWzBdOworCisgICAgaWYgKHMtPnBhc3N0aHJvdWdoKQorICAgICAgICByZXR1cm4g ZmZfZmlsdGVyX2ZyYW1lKG91dGxpbmssIGluKTsKKworICAgIG91dCA9IGZmX2dldF92aWRlb19i dWZmZXIob3V0bGluaywgb3V0bGluay0+dywgb3V0bGluay0+aCk7CisgICAgaWYgKCFvdXQpIHsK KyAgICAgICAgZXJyID0gQVZFUlJPUihFTk9NRU0pOworICAgICAgICBnb3RvIGZhaWw7CisgICAg fQorCisgICAgaWYgKCFzLT5pbml0aWFsaXplZCkKKyAgICAgICAgUkVUKGluaXRfZmlsdGVyKGN0 eCwgaW4pKTsKKworICAgIFJFVChmZl92a19maWx0ZXJfcHJvY2Vzc19zaW1wbGUoJnMtPnZrY3R4 LCAmcy0+ZSwgJnMtPnNoZCwgb3V0LCBpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFZLX05VTExfSEFORExFLCBOVUxMLCAwKSk7CisKKyAgICBSRVQoYXZfZnJhbWVfY29w eV9wcm9wcyhvdXQsIGluKSk7CisKKyAgICBpZiAoaW4tPnNhbXBsZV9hc3BlY3RfcmF0aW8ubnVt KQorICAgICAgICBvdXQtPnNhbXBsZV9hc3BlY3RfcmF0aW8gPSBpbi0+c2FtcGxlX2FzcGVjdF9y YXRpbzsKKyAgICBlbHNlIHsKKyAgICAgICAgb3V0LT5zYW1wbGVfYXNwZWN0X3JhdGlvLm51bSA9 IGluLT5zYW1wbGVfYXNwZWN0X3JhdGlvLmRlbjsKKyAgICAgICAgb3V0LT5zYW1wbGVfYXNwZWN0 X3JhdGlvLmRlbiA9IGluLT5zYW1wbGVfYXNwZWN0X3JhdGlvLm51bTsKKyAgICB9CisKKyAgICBh dl9mcmFtZV9mcmVlKCZpbik7CisKKyAgICByZXR1cm4gZmZfZmlsdGVyX2ZyYW1lKG91dGxpbmss IG91dCk7CisKK2ZhaWw6CisgICAgYXZfZnJhbWVfZnJlZSgmaW4pOworICAgIGF2X2ZyYW1lX2Zy ZWUoJm91dCk7CisgICAgcmV0dXJuIGVycjsKK30KKworc3RhdGljIGF2X2NvbGQgdm9pZCB0cmFu c3Bvc2VfdnVsa2FuX3VuaW5pdChBVkZpbHRlckNvbnRleHQgKmF2Y3R4KQoreworICAgIFRyYW5z cG9zZVZ1bGthbkNvbnRleHQgKnMgPSBhdmN0eC0+cHJpdjsKKyAgICBGRlZ1bGthbkNvbnRleHQg KnZrY3R4ID0gJnMtPnZrY3R4OworCisgICAgZmZfdmtfZXhlY19wb29sX2ZyZWUodmtjdHgsICZz LT5lKTsKKyAgICBmZl92a19zaGFkZXJfZnJlZSh2a2N0eCwgJnMtPnNoZCk7CisKKyAgICBmZl92 a191bmluaXQoJnMtPnZrY3R4KTsKKworICAgIHMtPmluaXRpYWxpemVkID0gMDsKK30KKworc3Rh dGljIGludCBjb25maWdfcHJvcHNfb3V0cHV0KEFWRmlsdGVyTGluayAqb3V0bGluaykKK3sKKyAg ICBGaWx0ZXJMaW5rICpvdXRsID0gZmZfZmlsdGVyX2xpbmsob3V0bGluayk7CisgICAgQVZGaWx0 ZXJDb250ZXh0ICphdmN0eCA9IG91dGxpbmstPnNyYzsKKyAgICBUcmFuc3Bvc2VWdWxrYW5Db250 ZXh0ICpzID0gYXZjdHgtPnByaXY7CisgICAgRkZWdWxrYW5Db250ZXh0ICp2a2N0eCA9ICZzLT52 a2N0eDsKKyAgICBBVkZpbHRlckxpbmsgKmlubGluayA9IGF2Y3R4LT5pbnB1dHNbMF07CisgICAg RmlsdGVyTGluayAqaW5sID0gZmZfZmlsdGVyX2xpbmsoaW5saW5rKTsKKworICAgIGlmICgoaW5s aW5rLT53ID49IGlubGluay0+aCAmJiBzLT5wYXNzdGhyb3VnaCA9PSBUUkFOU1BPU0VfUFRfVFlQ RV9MQU5EU0NBUEUpIHx8CisgICAgICAgIChpbmxpbmstPncgPD0gaW5saW5rLT5oICYmIHMtPnBh c3N0aHJvdWdoID09IFRSQU5TUE9TRV9QVF9UWVBFX1BPUlRSQUlUKSkgeworICAgICAgICBhdl9s b2coYXZjdHgsIEFWX0xPR19WRVJCT1NFLAorICAgICAgICAgICAgICAgInc6JWQgaDolZCAtPiB3 OiVkIGg6JWQgKHBhc3N0aHJvdWdoIG1vZGUpXG4iLAorICAgICAgICAgICAgICAgaW5saW5rLT53 LCBpbmxpbmstPmgsIGlubGluay0+dywgaW5saW5rLT5oKTsKKyAgICAgICAgb3V0bC0+aHdfZnJh bWVzX2N0eCA9IGF2X2J1ZmZlcl9yZWYoaW5sLT5od19mcmFtZXNfY3R4KTsKKyAgICAgICAgcmV0 dXJuIG91dGwtPmh3X2ZyYW1lc19jdHggPyAwIDogQVZFUlJPUihFTk9NRU0pOworICAgIH0gZWxz ZSB7CisgICAgICAgIHMtPnBhc3N0aHJvdWdoID0gVFJBTlNQT1NFX1BUX1RZUEVfTk9ORTsKKyAg ICB9CisKKyAgICB2a2N0eC0+b3V0cHV0X3dpZHRoICA9IGlubGluay0+aDsKKyAgICB2a2N0eC0+ b3V0cHV0X2hlaWdodCA9IGlubGluay0+dzsKKworICAgIGlmIChpbmxpbmstPnNhbXBsZV9hc3Bl Y3RfcmF0aW8ubnVtKQorICAgICAgICBvdXRsaW5rLT5zYW1wbGVfYXNwZWN0X3JhdGlvID0gYXZf ZGl2X3EoKEFWUmF0aW9uYWwpIHsgMSwgMSB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaW5saW5rLT5zYW1wbGVfYXNwZWN0X3JhdGlvKTsKKyAgICBl bHNlCisgICAgICAgIG91dGxpbmstPnNhbXBsZV9hc3BlY3RfcmF0aW8gPSBpbmxpbmstPnNhbXBs ZV9hc3BlY3RfcmF0aW87CisKKyAgICByZXR1cm4gZmZfdmtfZmlsdGVyX2NvbmZpZ19vdXRwdXQo b3V0bGluayk7Cit9CisKKyNkZWZpbmUgT0ZGU0VUKHgpIG9mZnNldG9mKFRyYW5zcG9zZVZ1bGth bkNvbnRleHQsIHgpCisjZGVmaW5lIEZMQUdTIChBVl9PUFRfRkxBR19GSUxURVJJTkdfUEFSQU0g fCBBVl9PUFRfRkxBR19WSURFT19QQVJBTSkKKworc3RhdGljIGNvbnN0IEFWT3B0aW9uIHRyYW5z cG9zZV92dWxrYW5fb3B0aW9uc1tdID0geworICAgIHsgImRpciIsICJzZXQgdHJhbnNwb3NlIGRp cmVjdGlvbiIsIE9GRlNFVChkaXIpLCBBVl9PUFRfVFlQRV9JTlQsIHsgLmk2NCA9IFRSQU5TUE9T RV9DQ0xPQ0tfRkxJUCB9LCAwLCA3LCBGTEFHUywgLnVuaXQgPSAiZGlyIiB9LAorICAgICAgICB7 ICJjY2xvY2tfZmxpcCIsICJyb3RhdGUgY291bnRlci1jbG9ja3dpc2Ugd2l0aCB2ZXJ0aWNhbCBm bGlwIiwgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsgLmk2NCA9IFRSQU5TUE9TRV9DQ0xPQ0tfRkxJ UCB9LCAuZmxhZ3M9RkxBR1MsIC51bml0ID0gImRpciIgfSwKKyAgICAgICAgeyAiY2xvY2siLCAg ICAgICAicm90YXRlIGNsb2Nrd2lzZSIsICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIEFW X09QVF9UWVBFX0NPTlNULCB7IC5pNjQgPSBUUkFOU1BPU0VfQ0xPQ0sgICAgICAgfSwgLmZsYWdz PUZMQUdTLCAudW5pdCA9ICJkaXIiIH0sCisgICAgICAgIHsgImNjbG9jayIsICAgICAgInJvdGF0 ZSBjb3VudGVyLWNsb2Nrd2lzZSIsICAgICAgICAgICAgICAgICAgICAwLCBBVl9PUFRfVFlQRV9D T05TVCwgeyAuaTY0ID0gVFJBTlNQT1NFX0NDTE9DSyAgICAgIH0sIC5mbGFncz1GTEFHUywgLnVu aXQgPSAiZGlyIiB9LAorICAgICAgICB7ICJjbG9ja19mbGlwIiwgICJyb3RhdGUgY2xvY2t3aXNl IHdpdGggdmVydGljYWwgZmxpcCIsICAgICAgICAgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsgLmk2 NCA9IFRSQU5TUE9TRV9DTE9DS19GTElQICB9LCAuZmxhZ3M9RkxBR1MsIC51bml0ID0gImRpciIg fSwKKworICAgIHsgInBhc3N0aHJvdWdoIiwgImRvIG5vdCBhcHBseSB0cmFuc3Bvc2l0aW9uIGlm IHRoZSBpbnB1dCBtYXRjaGVzIHRoZSBzcGVjaWZpZWQgZ2VvbWV0cnkiLAorICAgICAgT0ZGU0VU KHBhc3N0aHJvdWdoKSwgQVZfT1BUX1RZUEVfSU5ULCB7Lmk2ND1UUkFOU1BPU0VfUFRfVFlQRV9O T05FfSwgIDAsIElOVF9NQVgsIEZMQUdTLCAudW5pdCA9ICJwYXNzdGhyb3VnaCIgfSwKKyAgICAg ICAgeyAibm9uZSIsICAgICAgImFsd2F5cyBhcHBseSB0cmFuc3Bvc2l0aW9uIiwgICAwLCBBVl9P UFRfVFlQRV9DT05TVCwgey5pNjQ9VFJBTlNQT1NFX1BUX1RZUEVfTk9ORX0sICAgICAgSU5UX01J TiwgSU5UX01BWCwgRkxBR1MsIC51bml0ID0gInBhc3N0aHJvdWdoIiB9LAorICAgICAgICB7ICJw b3J0cmFpdCIsICAicHJlc2VydmUgcG9ydHJhaXQgZ2VvbWV0cnkiLCAgIDAsIEFWX09QVF9UWVBF X0NPTlNULCB7Lmk2ND1UUkFOU1BPU0VfUFRfVFlQRV9QT1JUUkFJVH0sICBJTlRfTUlOLCBJTlRf TUFYLCBGTEFHUywgLnVuaXQgPSAicGFzc3Rocm91Z2giIH0sCisgICAgICAgIHsgImxhbmRzY2Fw ZSIsICJwcmVzZXJ2ZSBsYW5kc2NhcGUgZ2VvbWV0cnkiLCAgMCwgQVZfT1BUX1RZUEVfQ09OU1Qs IHsuaTY0PVRSQU5TUE9TRV9QVF9UWVBFX0xBTkRTQ0FQRX0sIElOVF9NSU4sIElOVF9NQVgsIEZM QUdTLCAudW5pdCA9ICJwYXNzdGhyb3VnaCIgfSwKKworICAgIHsgTlVMTCB9Cit9OworCitBVkZJ TFRFUl9ERUZJTkVfQ0xBU1ModHJhbnNwb3NlX3Z1bGthbik7CisKK3N0YXRpYyBjb25zdCBBVkZp bHRlclBhZCB0cmFuc3Bvc2VfdnVsa2FuX2lucHV0c1tdID0geworICAgIHsKKyAgICAgICAgLm5h bWUgICAgICAgICA9ICJkZWZhdWx0IiwKKyAgICAgICAgLnR5cGUgICAgICAgICA9IEFWTUVESUFf VFlQRV9WSURFTywKKyAgICAgICAgLmZpbHRlcl9mcmFtZSA9ICZmaWx0ZXJfZnJhbWUsCisgICAg ICAgIC5jb25maWdfcHJvcHMgPSAmZmZfdmtfZmlsdGVyX2NvbmZpZ19pbnB1dCwKKyAgICB9Cit9 OworCitzdGF0aWMgY29uc3QgQVZGaWx0ZXJQYWQgdHJhbnNwb3NlX3Z1bGthbl9vdXRwdXRzW10g PSB7CisgICAgeworICAgICAgICAubmFtZSAgICAgICAgID0gImRlZmF1bHQiLAorICAgICAgICAu dHlwZSAgICAgICAgID0gQVZNRURJQV9UWVBFX1ZJREVPLAorICAgICAgICAuY29uZmlnX3Byb3Bz ID0gJmNvbmZpZ19wcm9wc19vdXRwdXQsCisgICAgfQorfTsKKworY29uc3QgRkZGaWx0ZXIgZmZf dmZfdHJhbnNwb3NlX3Z1bGthbiA9IHsKKyAgICAucC5uYW1lICAgICAgICAgPSAidHJhbnNwb3Nl X3Z1bGthbiIsCisgICAgLnAuZGVzY3JpcHRpb24gID0gTlVMTF9JRl9DT05GSUdfU01BTEwoIlRy YW5zcG9zZSBWdWxrYW4gRmlsdGVyIiksCisgICAgLnAucHJpdl9jbGFzcyAgID0gJnRyYW5zcG9z ZV92dWxrYW5fY2xhc3MsCisgICAgLnAuZmxhZ3MgICAgICAgID0gQVZGSUxURVJfRkxBR19IV0RF VklDRSwKKyAgICAucHJpdl9zaXplICAgICAgPSBzaXplb2YoVHJhbnNwb3NlVnVsa2FuQ29udGV4 dCksCisgICAgLmluaXQgICAgICAgICAgID0gJmZmX3ZrX2ZpbHRlcl9pbml0LAorICAgIC51bmlu aXQgICAgICAgICA9ICZ0cmFuc3Bvc2VfdnVsa2FuX3VuaW5pdCwKKyAgICBGSUxURVJfSU5QVVRT KHRyYW5zcG9zZV92dWxrYW5faW5wdXRzKSwKKyAgICBGSUxURVJfT1VUUFVUUyh0cmFuc3Bvc2Vf dnVsa2FuX291dHB1dHMpLAorICAgIEZJTFRFUl9TSU5HTEVfUElYRk1UKEFWX1BJWF9GTVRfVlVM S0FOKSwKKyAgICAuZmxhZ3NfaW50ZXJuYWwgPSBGRl9GSUxURVJfRkxBR19IV0ZSQU1FX0FXQVJF LAorfTsKLS0gCjIuNDkuMQoKCkZyb20gZDQxMDM2ZmQwY2EyMzAzNThjZjI2ODc1ZGY1N2U3MTZm MzMwNjE5NyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKRnJvbTogSmFtYWlrYTEgPGx1a2FzemN6 MThAd3AucGw+CkRhdGU6IFdlZCwgMyBTZXAgMjAyNSAxMzowNDowMCArMDAwMApTdWJqZWN0OiBb UEFUQ0ggMDI3LzExOF0gQ2hhbmdpbmcgdnVsa2FuIGZpbGUgZGlyZWN0b3J5CgotLS0KIGxpYmF2 ZmlsdGVyL3ZmX3hmYWRlX3Z1bGthbi5jIHwgNzI1IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCA3MjUgZGVsZXRpb25zKC0pCiBkZWxldGUgbW9kZSAx MDA2NDQgbGliYXZmaWx0ZXIvdmZfeGZhZGVfdnVsa2FuLmMKCmRpZmYgLS1naXQgYS9saWJhdmZp bHRlci92Zl94ZmFkZV92dWxrYW4uYyBiL2xpYmF2ZmlsdGVyL3ZmX3hmYWRlX3Z1bGthbi5jCmRl bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OGU4Nzk3NzMzLi4wMDAwMDAwMDAwCi0tLSBh L2xpYmF2ZmlsdGVyL3ZmX3hmYWRlX3Z1bGthbi5jCisrKyAvZGV2L251bGwKQEAgLTEsNzI1ICsw LDAgQEAKLS8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCi0gKgotICogRkZtcGVn IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9k aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwot ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg ZWl0aGVyCi0gKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u KSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJ VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICog TGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZ b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg UHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRo ZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs IEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCi0gKi8KLQotI2luY2x1ZGUg ImxpYmF2dXRpbC9hdmFzc2VydC5oIgotI2luY2x1ZGUgImxpYmF2dXRpbC9yYW5kb21fc2VlZC5o IgotI2luY2x1ZGUgImxpYmF2dXRpbC9vcHQuaCIKLSNpbmNsdWRlICJsaWJhdnV0aWwvdnVsa2Fu X3NwaXJ2LmgiCi0jaW5jbHVkZSAidnVsa2FuX2ZpbHRlci5oIgotI2luY2x1ZGUgImZpbHRlcnMu aCIKLSNpbmNsdWRlICJ2aWRlby5oIgotCi0jZGVmaW5lIElOX0EgIDAKLSNkZWZpbmUgSU5fQiAg MQotI2RlZmluZSBJTl9OQiAyCi0KLXR5cGVkZWYgc3RydWN0IFhGYWRlUGFyYW1ldGVycyB7Ci0g ICAgZmxvYXQgcHJvZ3Jlc3M7Ci19IFhGYWRlUGFyYW1ldGVyczsKLQotdHlwZWRlZiBzdHJ1Y3Qg WEZhZGVWdWxrYW5Db250ZXh0IHsKLSAgICBGRlZ1bGthbkNvbnRleHQgICAgIHZrY3R4OwotCi0g ICAgaW50ICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uOwotICAgIGludDY0X3QgICAgICAgICAg ICAgZHVyYXRpb247Ci0gICAgaW50NjRfdCAgICAgICAgICAgICBvZmZzZXQ7Ci0KLSAgICBpbnQg ICAgICAgICAgICAgICAgIGluaXRpYWxpemVkOwotICAgIEZGVmtFeGVjUG9vbCAgICAgICAgZTsK LSAgICBBVlZ1bGthbkRldmljZVF1ZXVlRmFtaWx5ICpxZjsKLSAgICBGRlZ1bGthblNoYWRlciAg ICAgIHNoZDsKLSAgICBWa1NhbXBsZXIgICAgICAgICAgIHNhbXBsZXI7Ci0KLSAgICAvLyBQVFMg d2hlbiB0aGUgZmFkZSBzaG91bGQgc3RhcnQgKGluIElOX0EgdGltZWJhc2UpCi0gICAgaW50NjRf dCAgICAgICAgICAgICBzdGFydF9wdHM7Ci0KLSAgICAvLyBQVFMgb2Zmc2V0IGJldHdlZW4gSU5f QSBhbmQgSU5fQgotICAgIGludDY0X3QgICAgICAgICAgICAgaW5wdXRzX29mZnNldF9wdHM7Ci0K LSAgICAvLyBEdXJhdGlvbiBvZiB0aGUgdHJhbnNpdGlvbgotICAgIGludDY0X3QgICAgICAgICAg ICAgZHVyYXRpb25fcHRzOwotCi0gICAgLy8gQ3VycmVudCBQVFMgb2YgdGhlIGZpcnN0IGlucHV0 IChJTl9BKQotICAgIGludDY0X3QgICAgICAgICAgICAgcHRzOwotCi0gICAgLy8gSWYgZnJhbWVz IGFyZSBjdXJyZW50bHkganVzdCBwYXNzZWQgdGhyb3VnaAotICAgIC8vIHVubW9kaWZpZWQsIGxp a2UgYmVmb3JlIGFuZCBhZnRlciB0aGUgYWN0dWFsCi0gICAgLy8gdHJhbnNpdGlvbi4KLSAgICBp bnQgICAgICAgICAgICAgICAgIHBhc3N0aHJvdWdoOwotCi0gICAgaW50ICAgICAgICAgICAgICAg ICBzdGF0dXNbSU5fTkJdOwotfSBYRmFkZVZ1bGthbkNvbnRleHQ7Ci0KLWVudW0gWEZhZGVUcmFu c2l0aW9ucyB7Ci0gICAgRkFERSwKLSAgICBXSVBFTEVGVCwKLSAgICBXSVBFUklHSFQsCi0gICAg V0lQRVVQLAotICAgIFdJUEVET1dOLAotICAgIFNMSURFRE9XTiwKLSAgICBTTElERVVQLAotICAg IFNMSURFTEVGVCwKLSAgICBTTElERVJJR0hULAotICAgIENJUkNMRU9QRU4sCi0gICAgQ0lSQ0xF Q0xPU0UsCi0gICAgRElTU09MVkUsCi0gICAgUElYRUxJWkUsCi0gICAgV0lQRVRMLAotICAgIFdJ UEVUUiwKLSAgICBXSVBFQkwsCi0gICAgV0lQRUJSLAotICAgIE5CX1RSQU5TSVRJT05TLAotfTsK LQotc3RhdGljIGNvbnN0IGNoYXIgdHJhbnNpdGlvbl9mYWRlW10gPSB7Ci0gICAgQygwLCB2b2lk IHRyYW5zaXRpb24oaW50IGlkeCwgaXZlYzIgcG9zLCBmbG9hdCBwcm9ncmVzcykgICAgICAgICAg ICAgICAgICAgKQotICAgIEMoMCwgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKLSAgICBDKDEsICAgICB2ZWM0IGEg PSB0ZXh0dXJlKGFfaW1hZ2VzW2lkeF0sIHBvcyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICApCi0gICAgQygxLCAgICAgdmVjNCBiID0gdGV4dHVyZShiX2ltYWdlc1tpZHhdLCBwb3MpOyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKQotICAgIEMoMSwgICAgIGltYWdlU3RvcmUob3V0 cHV0X2ltYWdlc1tpZHhdLCBwb3MsIG1peChhLCBiLCBwcm9ncmVzcykpOyAgICAgICAgICkKLSAg ICBDKDAsIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICApCi19OwotCi1zdGF0aWMgY29uc3QgY2hhciB0cmFuc2l0aW9u X3dpcGVsZWZ0W10gPSB7Ci0gICAgQygwLCB2b2lkIHRyYW5zaXRpb24oaW50IGlkeCwgaXZlYzIg cG9zLCBmbG9hdCBwcm9ncmVzcykgICAgICAgICAgICAgICAgICAgKQotICAgIEMoMCwgeyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICkKLSAgICBDKDEsICAgICBpdmVjMiBzaXplID0gaW1hZ2VTaXplKG91dHB1dF9pbWFn ZXNbaWR4XSk7ICAgICAgICAgICAgICAgICAgICAgICApCi0gICAgQygxLCAgICAgaW50ICBzID0g aW50KHNpemUueCAqICgxLjAgLSBwcm9ncmVzcykpOyAgICAgICAgICAgICAgICAgICAgICAgICAg KQotICAgIEMoMSwgICAgIHZlYzQgYSA9IHRleHR1cmUoYV9pbWFnZXNbaWR4XSwgcG9zKTsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICkKLSAgICBDKDEsICAgICB2ZWM0IGIgPSB0ZXh0dXJl KGJfaW1hZ2VzW2lkeF0sIHBvcyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCi0gICAg QygxLCAgICAgaW1hZ2VTdG9yZShvdXRwdXRfaW1hZ2VzW2lkeF0sIHBvcywgcG9zLnggPiBzID8g YiA6IGEpOyAgICAgICAgICAgKQotICAgIEMoMCwgfSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKLX07Ci0KLXN0YXRp YyBjb25zdCBjaGFyIHRyYW5zaXRpb25fd2lwZXJpZ2h0W10gPSB7Ci0gICAgQygwLCB2b2lkIHRy YW5zaXRpb24oaW50IGlkeCwgaXZlYzIgcG9zLCBmbG9hdCBwcm9ncmVzcykgICAgICAgICAgICAg ICAgICAgKQotICAgIEMoMCwgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKLSAgICBDKDEsICAgICBpdmVjMiBzaXpl ID0gaW1hZ2VTaXplKG91dHB1dF9pbWFnZXNbaWR4XSk7ICAgICAgICAgICAgICAgICAgICAgICAp Ci0gICAgQygxLCAgICAgaW50ICBzID0gaW50KHNpemUueCAqIHByb2dyZXNzKTsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKQotICAgIEMoMSwgICAgIHZlYzQgYSA9IHRleHR1cmUo YV9pbWFnZXNbaWR4XSwgcG9zKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKLSAgICBD KDEsICAgICB2ZWM0IGIgPSB0ZXh0dXJlKGJfaW1hZ2VzW2lkeF0sIHBvcyk7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICApCi0gICAgQygxLCAgICAgaW1hZ2VTdG9yZShvdXRwdXRfaW1hZ2Vz W2lkeF0sIHBvcywgcG9zLnggPiBzID8gYSA6IGIpOyAgICAgICAgICAgKQotICAgIEMoMCwgfSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICkKLX07Ci0KLXN0YXRpYyBjb25zdCBjaGFyIHRyYW5zaXRpb25fd2lwZXVwW10g PSB7Ci0gICAgQygwLCB2b2lkIHRyYW5zaXRpb24oaW50IGlkeCwgaXZlYzIgcG9zLCBmbG9hdCBw cm9ncmVzcykgICAgICAgICAgICAgICAgICAgKQotICAgIEMoMCwgeyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKLSAg ICBDKDEsICAgICBpdmVjMiBzaXplID0gaW1hZ2VTaXplKG91dHB1dF9pbWFnZXNbaWR4XSk7ICAg ICAgICAgICAgICAgICAgICAgICApCi0gICAgQygxLCAgICAgaW50ICBzID0gaW50KHNpemUueSAq ICgxLjAgLSBwcm9ncmVzcykpOyAgICAgICAgICAgICAgICAgICAgICAgICAgKQotICAgIEMoMSwg ICAgIHZlYzQgYSA9IHRleHR1cmUoYV9pbWFnZXNbaWR4XSwgcG9zKTsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICkKLSAgICBDKDEsICAgICB2ZWM0IGIgPSB0ZXh0dXJlKGJfaW1hZ2VzW2lk eF0sIHBvcyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCi0gICAgQygxLCAgICAgaW1h Z2VTdG9yZShvdXRwdXRfaW1hZ2VzW2lkeF0sIHBvcywgcG9zLnkgPiBzID8gYiA6IGEpOyAgICAg ICAgICAgKQotICAgIEMoMCwgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKLX07Ci0KLXN0YXRpYyBjb25zdCBjaGFy IHRyYW5zaXRpb25fd2lwZWRvd25bXSA9IHsKLSAgICBDKDAsIHZvaWQgdHJhbnNpdGlvbihpbnQg aWR4LCBpdmVjMiBwb3MsIGZsb2F0IHByb2dyZXNzKSAgICAgICAgICAgICAgICAgICApCi0gICAg QygwLCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKQotICAgIEMoMSwgICAgIGl2ZWMyIHNpemUgPSBpbWFnZVNpemUo b3V0cHV0X2ltYWdlc1tpZHhdKTsgICAgICAgICAgICAgICAgICAgICAgICkKLSAgICBDKDEsICAg ICBpbnQgIHMgPSBpbnQoc2l6ZS55ICogcHJvZ3Jlc3MpOyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICApCi0gICAgQygxLCAgICAgdmVjNCBhID0gdGV4dHVyZShhX2ltYWdlc1tpZHhd LCBwb3MpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQotICAgIEMoMSwgICAgIHZlYzQg YiA9IHRleHR1cmUoYl9pbWFnZXNbaWR4XSwgcG9zKTsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICkKLSAgICBDKDEsICAgICBpbWFnZVN0b3JlKG91dHB1dF9pbWFnZXNbaWR4XSwgcG9zLCBw b3MueSA+IHMgPyBhIDogYik7ICAgICAgICAgICApCi0gICAgQygwLCB9ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQot fTsKLQotI2RlZmluZSBTSEFERVJfU0xJREVfQ09NTU9OICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgQygwLCB2b2lkIHNs aWRlKGludCBpZHgsIGl2ZWMyIHBvcywgZmxvYXQgcHJvZ3Jlc3MsIGl2ZWMyIGRpcmVjdGlvbikg ICAgICAgICAgICAgICApIFwKLSAgICBDKDAsIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgXAotICAg IEMoMSwgICAgIGl2ZWMyIHNpemUgPSBpbWFnZVNpemUob3V0cHV0X2ltYWdlc1tpZHhdKTsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKSBcCi0gICAgQygxLCAgICAgaXZlYzIgcGkgPSBp dmVjMihwcm9ncmVzcyAqIHNpemUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICApIFwKLSAgICBDKDEsICAgICBpdmVjMiBwID0gcG9zICsgcGkgKiBkaXJlY3Rpb247ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgXAotICAgIEMoMSwgICAg IGl2ZWMyIGYgPSBwICUgc2l6ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKSBcCi0gICAgQygxLCAgICAgZiA9IGYgKyBzaXplICogaXZlYzIo Zi54IDwgMCwgZi55IDwgMCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIFwK LSAgICBDKDEsICAgICB2ZWM0IGEgPSB0ZXh0dXJlKGFfaW1hZ2VzW2lkeF0sIGYpOyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgXAotICAgIEMoMSwgICAgIHZlYzQgYiA9 IHRleHR1cmUoYl9pbWFnZXNbaWR4XSwgZik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKSBcCi0gICAgQygxLCAgICAgdmVjNCByID0gKHAueSA+PSAwICYmIHAueCA+PSAw ICYmIHNpemUueSA+IHAueSAmJiAgc2l6ZS54ID4gcC54KSA/IGEgOiBiOyApIFwKLSAgICBDKDEs ICAgICBpbWFnZVN0b3JlKG91dHB1dF9pbWFnZXNbaWR4XSwgcG9zLCByKTsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICkgXAotICAgIEMoMCwgfSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KQotCi1zdGF0aWMgY29uc3QgY2hhciB0cmFuc2l0aW9uX3NsaWRlZG93bltdID0gewotICAgIFNI QURFUl9TTElERV9DT01NT04KLSAgICBDKDAsIHZvaWQgdHJhbnNpdGlvbihpbnQgaWR4LCBpdmVj MiBwb3MsIGZsb2F0IHByb2dyZXNzKSAgICAgICAgICAgICAgICAgICApCi0gICAgQygwLCB7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKQotICAgIEMoMSwgICAgIHNsaWRlKGlkeCwgcG9zLCBwcm9ncmVzcywgaXZlYzIo MCwgLTEpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICkKLSAgICBDKDAsIH0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICApCi19OwotCi1zdGF0aWMgY29uc3QgY2hhciB0cmFuc2l0aW9uX3NsaWRldXBbXSA9IHsKLSAg ICBTSEFERVJfU0xJREVfQ09NTU9OCi0gICAgQygwLCB2b2lkIHRyYW5zaXRpb24oaW50IGlkeCwg aXZlYzIgcG9zLCBmbG9hdCBwcm9ncmVzcykgICAgICAgICAgICAgICAgICAgKQotICAgIEMoMCwg eyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICkKLSAgICBDKDEsICAgICBzbGlkZShpZHgsIHBvcywgcHJvZ3Jlc3MsIGl2 ZWMyKDAsICsxKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICApCi0gICAgQygwLCB9ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKQotfTsKLQotc3RhdGljIGNvbnN0IGNoYXIgdHJhbnNpdGlvbl9zbGlkZWxlZnRbXSA9 IHsKLSAgICBTSEFERVJfU0xJREVfQ09NTU9OCi0gICAgQygwLCB2b2lkIHRyYW5zaXRpb24oaW50 IGlkeCwgaXZlYzIgcG9zLCBmbG9hdCBwcm9ncmVzcykgICAgICAgICAgICAgICAgICAgKQotICAg IEMoMCwgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICkKLSAgICBDKDEsICAgICBzbGlkZShpZHgsIHBvcywgcHJvZ3Jl c3MsIGl2ZWMyKCsxLCAwKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICApCi0gICAgQygwLCB9 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKQotfTsKLQotc3RhdGljIGNvbnN0IGNoYXIgdHJhbnNpdGlvbl9zbGlkZXJp Z2h0W10gPSB7Ci0gICAgU0hBREVSX1NMSURFX0NPTU1PTgotICAgIEMoMCwgdm9pZCB0cmFuc2l0 aW9uKGludCBpZHgsIGl2ZWMyIHBvcywgZmxvYXQgcHJvZ3Jlc3MpICAgICAgICAgICAgICAgICAg ICkKLSAgICBDKDAsIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICApCi0gICAgQygxLCAgICAgc2xpZGUoaWR4LCBwb3Ms IHByb2dyZXNzLCBpdmVjMigtMSwgMCkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgKQotICAg IEMoMCwgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICkKLX07Ci0KLSNkZWZpbmUgU0hBREVSX0NJUkNMRV9DT01NT04g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg ICBDKDAsIHZvaWQgY2lyY2xlKGludCBpZHgsIGl2ZWMyIHBvcywgZmxvYXQgcHJvZ3Jlc3MsIGJv b2wgb3BlbikgICAgICAgICAgICApIFwKLSAgICBDKDAsIHsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIFwKLSAgICBD KDEsICAgICBjb25zdCBpdmVjMiBoYWxmX3NpemUgPSBpbWFnZVNpemUob3V0cHV0X2ltYWdlc1tp ZHhdKSAvIDI7ICAgICAgICApIFwKLSAgICBDKDEsICAgICBjb25zdCBmbG9hdCB6ID0gZG90KGhh bGZfc2l6ZSwgaGFsZl9zaXplKTsgICAgICAgICAgICAgICAgICAgICAgICApIFwKLSAgICBDKDEs ICAgICBmbG9hdCBwID0gKChvcGVuID8gKDEuMCAtIHByb2dyZXNzKSA6IHByb2dyZXNzKSAtIDAu NSkgKiAzLjA7ICAgICApIFwKLSAgICBDKDEsICAgICBpdmVjMiBkc2l6ZSA9IHBvcyAtIGhhbGZf c2l6ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIFwKLSAgICBDKDEsICAg ICBmbG9hdCBzbSA9IGRvdChkc2l6ZSwgZHNpemUpIC8geiArIHA7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICApIFwKLSAgICBDKDEsICAgICB2ZWM0IGEgPSB0ZXh0dXJlKGFfaW1hZ2VzW2lk eF0sIHBvcyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIFwKLSAgICBDKDEsICAgICB2 ZWM0IGIgPSB0ZXh0dXJlKGJfaW1hZ2VzW2lkeF0sIHBvcyk7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICApIFwKLSAgICBDKDEsICAgICBpbWFnZVN0b3JlKG91dHB1dF9pbWFnZXNbaWR4XSwg cG9zLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICBtaXgob3BlbiA/IGIgOiBhLCBvcGVuID8g YSA6IGIsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbW9vdGhzdGVwKDAuZiwgMS5m LCBzbSkpKTsgICAgICAgICAgICAgICAgICAgICAgICApIFwKLSAgICBDKDAsIH0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICApCi0KLXN0YXRpYyBjb25zdCBjaGFyIHRyYW5zaXRpb25fY2lyY2xlb3BlbltdID0gewotICAg IFNIQURFUl9DSVJDTEVfQ09NTU9OCi0gICAgQygwLCB2b2lkIHRyYW5zaXRpb24oaW50IGlkeCwg aXZlYzIgcG9zLCBmbG9hdCBwcm9ncmVzcykgICAgICAgICAgICAgICAgICAgKQotICAgIEMoMCwg eyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICkKLSAgICBDKDEsICAgICBjaXJjbGUoaWR4LCBwb3MsIHByb2dyZXNzLCB0 cnVlKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCi0gICAgQygwLCB9ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKQotfTsKLQotc3RhdGljIGNvbnN0IGNoYXIgdHJhbnNpdGlvbl9jaXJjbGVjbG9zZVtd ID0gewotICAgIFNIQURFUl9DSVJDTEVfQ09NTU9OCi0gICAgQygwLCB2b2lkIHRyYW5zaXRpb24o aW50IGlkeCwgaXZlYzIgcG9zLCBmbG9hdCBwcm9ncmVzcykgICAgICAgICAgICAgICAgICAgKQot ICAgIEMoMCwgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICkKLSAgICBDKDEsICAgICBjaXJjbGUoaWR4LCBwb3MsIHBy b2dyZXNzLCBmYWxzZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCi0gICAgQygw LCB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKQotfTsKLQotI2RlZmluZSBTSEFERVJfRlJBTkRfRlVOQyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIEMo MCwgZmxvYXQgZnJhbmQodmVjMiB2KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICkgXAotICAgIEMoMCwgeyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgXAotICAgIEMoMSwg ICAgIHJldHVybiBmcmFjdChzaW4oZG90KHYsIHZlYzIoMTIuOTg5OCwgNzguMjMzKSkpICogNDM3 NTguNTQ1KTsgICAgICkgXAotICAgIEMoMCwgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKLQotc3RhdGljIGNvbnN0 IGNoYXIgdHJhbnNpdGlvbl9kaXNzb2x2ZVtdID0gewotICAgIFNIQURFUl9GUkFORF9GVU5DCi0g ICAgQygwLCB2b2lkIHRyYW5zaXRpb24oaW50IGlkeCwgaXZlYzIgcG9zLCBmbG9hdCBwcm9ncmVz cykgICAgICAgICAgICAgICAgICAgKQotICAgIEMoMCwgeyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKLSAgICBDKDEs ICAgICBmbG9hdCBzbSA9IGZyYW5kKHBvcykgKiAyLjAgKyAoMS4wIC0gcHJvZ3Jlc3MpICogMi4w IC0gMS41OyAgICAgICApCi0gICAgQygxLCAgICAgdmVjNCBhID0gdGV4dHVyZShhX2ltYWdlc1tp ZHhdLCBwb3MpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQotICAgIEMoMSwgICAgIHZl YzQgYiA9IHRleHR1cmUoYl9pbWFnZXNbaWR4XSwgcG9zKTsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICkKLSAgICBDKDEsICAgICBpbWFnZVN0b3JlKG91dHB1dF9pbWFnZXNbaWR4XSwgcG9z LCBzbSA+PSAwLjUgPyBhIDogYik7ICAgICAgICAgICApCi0gICAgQygwLCB9ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KQotfTsKLQotc3RhdGljIGNvbnN0IGNoYXIgdHJhbnNpdGlvbl9waXhlbGl6ZVtdID0gewotICAg IEMoMCwgdm9pZCB0cmFuc2l0aW9uKGludCBpZHgsIGl2ZWMyIHBvcywgZmxvYXQgcHJvZ3Jlc3Mp ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKLSAgICBDKDAsIHsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICApCi0gICAgQygxLCAgICAgaXZlYzIgc2l6ZSA9IGltYWdlU2l6ZShv dXRwdXRfaW1hZ2VzW2lkeF0pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KQotICAgIEMoMSwgICAgIGZsb2F0IGQgPSBtaW4ocHJvZ3Jlc3MsIDEuMCAtIHByb2dyZXNzKTsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKLSAgICBDKDEsICAgICBm bG9hdCBkaXN0ID0gY2VpbChkICogNTAuMCkgLyA1MC4wOyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICApCi0gICAgQygxLCAgICAgZmxvYXQgc3EgPSAyLjAgKiBk aXN0ICogbWluKHNpemUueCwgc2l6ZS55KSAvIDIwLjA7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKQotICAgIEMoMSwgICAgIGZsb2F0IHN4ID0gZGlzdCA+IDAuMCA/IG1pbigoZmxvb3Io cG9zLnggLyBzcSkgKyAwLjUpICogc3EsIHNpemUueCAtIDEpIDogcG9zLng7ICkKLSAgICBDKDEs ICAgICBmbG9hdCBzeSA9IGRpc3QgPiAwLjAgPyBtaW4oKGZsb29yKHBvcy55IC8gc3EpICsgMC41 KSAqIHNxLCBzaXplLnkgLSAxKSA6IHBvcy55OyApCi0gICAgQygxLCAgICAgdmVjNCBhID0gdGV4 dHVyZShhX2ltYWdlc1tpZHhdLCB2ZWMyKHN4LCBzeSkpOyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKQotICAgIEMoMSwgICAgIHZlYzQgYiA9IHRleHR1cmUoYl9pbWFnZXNbaWR4 XSwgdmVjMihzeCwgc3kpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKLSAg ICBDKDEsICAgICBpbWFnZVN0b3JlKG91dHB1dF9pbWFnZXNbaWR4XSwgcG9zLCBtaXgoYSwgYiwg cHJvZ3Jlc3MpKTsgICAgICAgICAgICAgICAgICAgICAgICApCi0gICAgQygwLCB9ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKQotfTsKLQotc3RhdGljIGNvbnN0IGNoYXIgdHJhbnNpdGlvbl93 aXBldGxbXSA9IHsKLSAgICBDKDAsIHZvaWQgdHJhbnNpdGlvbihpbnQgaWR4LCBpdmVjMiBwb3Ms IGZsb2F0IHByb2dyZXNzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCi0gICAg QygwLCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQotICAgIEMoMSwgICAgIGl2ZWMyIHNp emUgPSBpbWFnZVNpemUob3V0cHV0X2ltYWdlc1tpZHhdKTsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICkKLSAgICBDKDEsICAgICBmbG9hdCB6dyA9IHNpemUueCAqICgxLjAg LSBwcm9ncmVzcyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAp Ci0gICAgQygxLCAgICAgZmxvYXQgemggPSBzaXplLnkgKiAoMS4wIC0gcHJvZ3Jlc3MpOyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQotICAgIEMoMSwgICAgIHZl YzQgYSA9IHRleHR1cmUoYV9pbWFnZXNbaWR4XSwgcG9zKTsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICkKLSAgICBDKDEsICAgICB2ZWM0IGIgPSB0ZXh0dXJlKGJf aW1hZ2VzW2lkeF0sIHBvcyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICApCi0gICAgQygxLCAgICAgaW1hZ2VTdG9yZShvdXRwdXRfaW1hZ2VzW2lkeF0sIHBvcywg KHBvcy55IDw9IHpoICYmIHBvcy54IDw9IHp3KSA/IGEgOiBiKTsgICAgICAgKQotICAgIEMoMCwg fSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKLX07Ci0KLXN0YXRpYyBjb25zdCBjaGFyIHRy YW5zaXRpb25fd2lwZXRyW10gPSB7Ci0gICAgQygwLCB2b2lkIHRyYW5zaXRpb24oaW50IGlkeCwg aXZlYzIgcG9zLCBmbG9hdCBwcm9ncmVzcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKQotICAgIEMoMCwgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKLSAgICBDKDEsICAg ICBpdmVjMiBzaXplID0gaW1hZ2VTaXplKG91dHB1dF9pbWFnZXNbaWR4XSk7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICApCi0gICAgQygxLCAgICAgZmxvYXQgencgPSBzaXpl LnggKiAocHJvZ3Jlc3MpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKQotICAgIEMoMSwgICAgIGZsb2F0IHpoID0gc2l6ZS55ICogKDEuMCAtIHByb2dy ZXNzKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKLSAgICBD KDEsICAgICB2ZWM0IGEgPSB0ZXh0dXJlKGFfaW1hZ2VzW2lkeF0sIHBvcyk7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCi0gICAgQygxLCAgICAgdmVjNCBiID0g dGV4dHVyZShiX2ltYWdlc1tpZHhdLCBwb3MpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKQotICAgIEMoMSwgICAgIGltYWdlU3RvcmUob3V0cHV0X2ltYWdlc1tp ZHhdLCBwb3MsIChwb3MueSA8PSB6aCAmJiBwb3MueCA+IHp3KSA/IGEgOiBiKTsgICAgICAgICkK LSAgICBDKDAsIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCi19OwotCi1zdGF0aWMgY29u c3QgY2hhciB0cmFuc2l0aW9uX3dpcGVibFtdID0gewotICAgIEMoMCwgdm9pZCB0cmFuc2l0aW9u KGludCBpZHgsIGl2ZWMyIHBvcywgZmxvYXQgcHJvZ3Jlc3MpICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICkKLSAgICBDKDAsIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCi0g ICAgQygxLCAgICAgaXZlYzIgc2l6ZSA9IGltYWdlU2l6ZShvdXRwdXRfaW1hZ2VzW2lkeF0pOyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQotICAgIEMoMSwgICAgIGZsb2F0 IHp3ID0gc2l6ZS54ICogKDEuMCAtIHByb2dyZXNzKTsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICkKLSAgICBDKDEsICAgICBmbG9hdCB6aCA9IHNpemUueSAqIChw cm9ncmVzcyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICApCi0gICAgQygxLCAgICAgdmVjNCBhID0gdGV4dHVyZShhX2ltYWdlc1tpZHhdLCBwb3MpOyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQotICAgIEMoMSwgICAg IHZlYzQgYiA9IHRleHR1cmUoYl9pbWFnZXNbaWR4XSwgcG9zKTsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICkKLSAgICBDKDEsICAgICBpbWFnZVN0b3JlKG91dHB1 dF9pbWFnZXNbaWR4XSwgcG9zLCAocG9zLnkgPiB6aCAmJiBwb3MueCA8PSB6dykgPyBhIDogYik7 ICAgICAgICApCi0gICAgQygwLCB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQotfTsKLQot c3RhdGljIGNvbnN0IGNoYXIgdHJhbnNpdGlvbl93aXBlYnJbXSA9IHsKLSAgICBDKDAsIHZvaWQg dHJhbnNpdGlvbihpbnQgaWR4LCBpdmVjMiBwb3MsIGZsb2F0IHByb2dyZXNzKSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICApCi0gICAgQygwLCB7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKQotICAgIEMoMSwgICAgIGl2ZWMyIHNpemUgPSBpbWFnZVNpemUob3V0cHV0X2ltYWdl c1tpZHhdKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKLSAgICBDKDEs ICAgICBmbG9hdCB6dyA9IHNpemUueCAqIChwcm9ncmVzcyk7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCi0gICAgQygxLCAgICAgZmxvYXQgemggPSBz aXplLnkgKiAocHJvZ3Jlc3MpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKQotICAgIEMoMSwgICAgIHZlYzQgYSA9IHRleHR1cmUoYV9pbWFnZXNbaWR4 XSwgcG9zKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKLSAg ICBDKDEsICAgICB2ZWM0IGIgPSB0ZXh0dXJlKGJfaW1hZ2VzW2lkeF0sIHBvcyk7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCi0gICAgQygxLCAgICAgaW1hZ2VT dG9yZShvdXRwdXRfaW1hZ2VzW2lkeF0sIHBvcywgKHBvcy55ID4gemggJiYgcG9zLnggPiB6dykg PyBhIDogYik7ICAgICAgICAgKQotICAgIEMoMCwgfSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICkKLX07Ci0KLXN0YXRpYyBjb25zdCBjaGFyKiB0cmFuc2l0aW9uc19tYXBbTkJfVFJBTlNJVElP TlNdID0gewotICAgIFtGQURFXSAgICAgICAgICA9IHRyYW5zaXRpb25fZmFkZSwKLSAgICBbV0lQ RUxFRlRdICAgICAgPSB0cmFuc2l0aW9uX3dpcGVsZWZ0LAotICAgIFtXSVBFUklHSFRdICAgICA9 IHRyYW5zaXRpb25fd2lwZXJpZ2h0LAotICAgIFtXSVBFVVBdICAgICAgICA9IHRyYW5zaXRpb25f d2lwZXVwLAotICAgIFtXSVBFRE9XTl0gICAgICA9IHRyYW5zaXRpb25fd2lwZWRvd24sCi0gICAg W1NMSURFRE9XTl0gICAgID0gdHJhbnNpdGlvbl9zbGlkZWRvd24sCi0gICAgW1NMSURFVVBdICAg ICAgID0gdHJhbnNpdGlvbl9zbGlkZXVwLAotICAgIFtTTElERUxFRlRdICAgICA9IHRyYW5zaXRp b25fc2xpZGVsZWZ0LAotICAgIFtTTElERVJJR0hUXSAgICA9IHRyYW5zaXRpb25fc2xpZGVyaWdo dCwKLSAgICBbQ0lSQ0xFT1BFTl0gICAgPSB0cmFuc2l0aW9uX2NpcmNsZW9wZW4sCi0gICAgW0NJ UkNMRUNMT1NFXSAgID0gdHJhbnNpdGlvbl9jaXJjbGVjbG9zZSwKLSAgICBbRElTU09MVkVdICAg ICAgPSB0cmFuc2l0aW9uX2Rpc3NvbHZlLAotICAgIFtQSVhFTElaRV0gICAgICA9IHRyYW5zaXRp b25fcGl4ZWxpemUsCi0gICAgW1dJUEVUTF0gICAgICAgID0gdHJhbnNpdGlvbl93aXBldGwsCi0g ICAgW1dJUEVUUl0gICAgICAgID0gdHJhbnNpdGlvbl93aXBldHIsCi0gICAgW1dJUEVCTF0gICAg ICAgID0gdHJhbnNpdGlvbl93aXBlYmwsCi0gICAgW1dJUEVCUl0gICAgICAgID0gdHJhbnNpdGlv bl93aXBlYnIsCi19OwotCi1zdGF0aWMgYXZfY29sZCBpbnQgaW5pdF92dWxrYW4oQVZGaWx0ZXJD b250ZXh0ICphdmN0eCkKLXsKLSAgICBpbnQgZXJyID0gMDsKLSAgICB1aW50OF90ICpzcHZfZGF0 YTsKLSAgICBzaXplX3Qgc3B2X2xlbjsKLSAgICB2b2lkICpzcHZfb3BhcXVlID0gTlVMTDsKLSAg ICBYRmFkZVZ1bGthbkNvbnRleHQgKnMgPSBhdmN0eC0+cHJpdjsKLSAgICBGRlZ1bGthbkNvbnRl eHQgKnZrY3R4ID0gJnMtPnZrY3R4OwotICAgIGNvbnN0IGludCBwbGFuZXMgPSBhdl9waXhfZm10 X2NvdW50X3BsYW5lcyhzLT52a2N0eC5vdXRwdXRfZm9ybWF0KTsKLSAgICBGRlZ1bGthblNoYWRl ciAqc2hkID0gJnMtPnNoZDsKLSAgICBGRlZrU1BJUlZDb21waWxlciAqc3B2OwotICAgIEZGVnVs a2FuRGVzY3JpcHRvclNldEJpbmRpbmcgKmRlc2M7Ci0KLSAgICBzcHYgPSBmZl92a19zcGlydl9p bml0KCk7Ci0gICAgaWYgKCFzcHYpIHsKLSAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJS T1IsICJVbmFibGUgdG8gaW5pdGlhbGl6ZSBTUElSLVYgY29tcGlsZXIhXG4iKTsKLSAgICAgICAg cmV0dXJuIEFWRVJST1JfRVhURVJOQUw7Ci0gICAgfQotCi0gICAgcy0+cWYgPSBmZl92a19xZl9m aW5kKHZrY3R4LCBWS19RVUVVRV9DT01QVVRFX0JJVCwgMCk7Ci0gICAgaWYgKCFzLT5xZikgewot ICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkRldmljZSBoYXMgbm8gY29tcHV0 ZSBxdWV1ZXNcbiIpOwotICAgICAgICBlcnIgPSBBVkVSUk9SKEVOT1RTVVApOwotICAgICAgICBn b3RvIGZhaWw7Ci0gICAgfQotCi0gICAgUkVUKGZmX3ZrX2V4ZWNfcG9vbF9pbml0KHZrY3R4LCBz LT5xZiwgJnMtPmUsIHMtPnFmLT5udW0qNCwgMCwgMCwgMCwgTlVMTCkpOwotICAgIFJFVChmZl92 a19pbml0X3NhbXBsZXIodmtjdHgsICZzLT5zYW1wbGVyLCAxLCBWS19GSUxURVJfTkVBUkVTVCkp OwotICAgIFJFVChmZl92a19zaGFkZXJfaW5pdCh2a2N0eCwgJnMtPnNoZCwgInhmYWRlIiwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgVktfU0hBREVSX1NUQUdFX0NPTVBVVEVfQklULAotICAg ICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAzMiwgMzIsIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDApKTsKLQotICAgIGRlc2Mg PSAoRkZWdWxrYW5EZXNjcmlwdG9yU2V0QmluZGluZyBbXSkgewotICAgICAgICB7Ci0gICAgICAg ICAgICAubmFtZSAgICAgICA9ICJhX2ltYWdlcyIsCi0gICAgICAgICAgICAudHlwZSAgICAgICA9 IFZLX0RFU0NSSVBUT1JfVFlQRV9DT01CSU5FRF9JTUFHRV9TQU1QTEVSLAotICAgICAgICAgICAg LmRpbWVuc2lvbnMgPSAyLAotICAgICAgICAgICAgLmVsZW1zICAgICAgPSBwbGFuZXMsCi0gICAg ICAgICAgICAuc3RhZ2VzICAgICA9IFZLX1NIQURFUl9TVEFHRV9DT01QVVRFX0JJVCwKLSAgICAg ICAgICAgIC5zYW1wbGVycyAgID0gRFVQX1NBTVBMRVIocy0+c2FtcGxlciksCi0gICAgICAgIH0s Ci0gICAgICAgIHsKLSAgICAgICAgICAgIC5uYW1lICAgICAgID0gImJfaW1hZ2VzIiwKLSAgICAg ICAgICAgIC50eXBlICAgICAgID0gVktfREVTQ1JJUFRPUl9UWVBFX0NPTUJJTkVEX0lNQUdFX1NB TVBMRVIsCi0gICAgICAgICAgICAuZGltZW5zaW9ucyA9IDIsCi0gICAgICAgICAgICAuZWxlbXMg ICAgICA9IHBsYW5lcywKLSAgICAgICAgICAgIC5zdGFnZXMgICAgID0gVktfU0hBREVSX1NUQUdF X0NPTVBVVEVfQklULAotICAgICAgICAgICAgLnNhbXBsZXJzICAgPSBEVVBfU0FNUExFUihzLT5z YW1wbGVyKSwKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgLm5hbWUgICAgICAg PSAib3V0cHV0X2ltYWdlcyIsCi0gICAgICAgICAgICAudHlwZSAgICAgICA9IFZLX0RFU0NSSVBU T1JfVFlQRV9TVE9SQUdFX0lNQUdFLAotICAgICAgICAgICAgLm1lbV9sYXlvdXQgPSBmZl92a19z aGFkZXJfcmVwX2ZtdChzLT52a2N0eC5vdXRwdXRfZm9ybWF0LCBGRl9WS19SRVBfRkxPQVQpLAot ICAgICAgICAgICAgLm1lbV9xdWFsaSAgPSAid3JpdGVvbmx5IiwKLSAgICAgICAgICAgIC5kaW1l bnNpb25zID0gMiwKLSAgICAgICAgICAgIC5lbGVtcyAgICAgID0gcGxhbmVzLAotICAgICAgICAg ICAgLnN0YWdlcyAgICAgPSBWS19TSEFERVJfU1RBR0VfQ09NUFVURV9CSVQsCi0gICAgICAgIH0s Ci0gICAgfTsKLQotICAgIFJFVChmZl92a19zaGFkZXJfYWRkX2Rlc2NyaXB0b3Jfc2V0KHZrY3R4 LCAmcy0+c2hkLCBkZXNjLCAzLCAwLCAwKSk7Ci0KLSAgICBHTFNMQygwLCBsYXlvdXQocHVzaF9j b25zdGFudCwgc3RkNDMwKSB1bmlmb3JtIHB1c2hDb25zdGFudHMgeyAgICAgICAgICAgICAgICAg KTsKLSAgICBHTFNMQygxLCAgICBmbG9hdCBwcm9ncmVzczsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBHTFNMQygwLCB9OyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKTsKLQotICAgIGZmX3ZrX3NoYWRlcl9hZGRfcHVzaF9jb25zdCgmcy0+c2hkLCAwLCBzaXpl b2YoWEZhZGVQYXJhbWV0ZXJzKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktf U0hBREVSX1NUQUdFX0NPTVBVVEVfQklUKTsKLQotICAgIC8vIEFkZCB0aGUgcmlnaHQgdHJhbnNp dGlvbiB0eXBlIGZ1bmN0aW9uIHRvIHRoZSBzaGFkZXIKLSAgICBHTFNMRCh0cmFuc2l0aW9uc19t YXBbcy0+dHJhbnNpdGlvbl0pOwotCi0gICAgR0xTTEMoMCwgdm9pZCBtYWluKCkgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgR0xTTEMoMCwg eyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICk7Ci0gICAgR0xTTEMoMSwgICAgIGl2ZWMyIHBvcyA9IGl2ZWMyKGdsX0dsb2JhbEludm9j YXRpb25JRC54eSk7ICAgICAgICAgICAgICk7Ci0gICAgR0xTTEYoMSwgICAgIGludCBwbGFuZXMg PSAlaTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLHBsYW5lcyk7Ci0gICAgR0xT TEMoMSwgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcGxhbmVzOyBpKyspIHsgICAgICAgICAgICAg ICAgICAgICAgICk7Ci0gICAgR0xTTEMoMiwgICAgICAgIHRyYW5zaXRpb24oaSwgcG9zLCBwcm9n cmVzcyk7ICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgR0xTTEMoMSwgICAgIH0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0g ICAgR0xTTEMoMCwgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICk7Ci0KLSAgICBSRVQoc3B2LT5jb21waWxlX3NoYWRlcih2a2N0eCwg c3B2LCBzaGQsICZzcHZfZGF0YSwgJnNwdl9sZW4sICJtYWluIiwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAmc3B2X29wYXF1ZSkpOwotICAgIFJFVChmZl92a19zaGFkZXJfbGluayh2a2N0 eCwgc2hkLCBzcHZfZGF0YSwgc3B2X2xlbiwgIm1haW4iKSk7Ci0KLSAgICBSRVQoZmZfdmtfc2hh ZGVyX3JlZ2lzdGVyX2V4ZWModmtjdHgsICZzLT5lLCAmcy0+c2hkKSk7Ci0KLSAgICBzLT5pbml0 aWFsaXplZCA9IDE7Ci0KLWZhaWw6Ci0gICAgaWYgKHNwdl9vcGFxdWUpCi0gICAgICAgIHNwdi0+ ZnJlZV9zaGFkZXIoc3B2LCAmc3B2X29wYXF1ZSk7Ci0gICAgaWYgKHNwdikKLSAgICAgICAgc3B2 LT51bmluaXQoJnNwdik7Ci0KLSAgICByZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IHhmYWRl X2ZyYW1lKEFWRmlsdGVyQ29udGV4dCAqYXZjdHgsIEFWRnJhbWUgKmZyYW1lX2EsIEFWRnJhbWUg KmZyYW1lX2IpCi17Ci0gICAgaW50IGVycjsKLSAgICBBVkZpbHRlckxpbmsgKm91dGxpbmsgPSBh dmN0eC0+b3V0cHV0c1swXTsKLSAgICBYRmFkZVZ1bGthbkNvbnRleHQgKnMgPSBhdmN0eC0+cHJp djsKLSAgICBmbG9hdCBwcm9ncmVzczsKLQotICAgIEFWRnJhbWUgKm91dHB1dCA9IGZmX2dldF92 aWRlb19idWZmZXIob3V0bGluaywgb3V0bGluay0+dywgb3V0bGluay0+aCk7Ci0gICAgaWYgKCFv dXRwdXQpIHsKLSAgICAgICAgZXJyID0gQVZFUlJPUihFTk9NRU0pOwotICAgICAgICBnb3RvIGZh aWw7Ci0gICAgfQotCi0gICAgaWYgKCFzLT5pbml0aWFsaXplZCkgewotICAgICAgICBBVkhXRnJh bWVzQ29udGV4dCAqYV9mYyA9IChBVkhXRnJhbWVzQ29udGV4dCopZnJhbWVfYS0+aHdfZnJhbWVz X2N0eC0+ZGF0YTsKLSAgICAgICAgQVZIV0ZyYW1lc0NvbnRleHQgKmJfZmMgPSAoQVZIV0ZyYW1l c0NvbnRleHQqKWZyYW1lX2ItPmh3X2ZyYW1lc19jdHgtPmRhdGE7Ci0gICAgICAgIGlmIChhX2Zj LT5zd19mb3JtYXQgIT0gYl9mYy0+c3dfZm9ybWF0KSB7Ci0gICAgICAgICAgICBhdl9sb2coYXZj dHgsIEFWX0xPR19FUlJPUiwKLSAgICAgICAgICAgICAgICAgICAiQ3VycmVudGx5IHRoZSBzdyBm b3JtYXQgb2YgdGhlIGZpcnN0IGlucHV0IG5lZWRzIHRvIG1hdGNoIHRoZSBzZWNvbmQhXG4iKTsK LSAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7Ci0gICAgICAgIH0KLSAgICAgICAg UkVUKGluaXRfdnVsa2FuKGF2Y3R4KSk7Ci0gICAgfQotCi0gICAgUkVUKGF2X2ZyYW1lX2NvcHlf cHJvcHMob3V0cHV0LCBmcmFtZV9hKSk7Ci0gICAgb3V0cHV0LT5wdHMgPSBzLT5wdHM7Ci0KLSAg ICBwcm9ncmVzcyA9IGF2X2NsaXBmKChmbG9hdCkocy0+cHRzIC0gcy0+c3RhcnRfcHRzKSAvIHMt PmR1cmF0aW9uX3B0cywKLSAgICAgICAgICAgICAgICAgICAgICAgIDAuZiwgMS5mKTsKLQotICAg IFJFVChmZl92a19maWx0ZXJfcHJvY2Vzc19OaW4oJnMtPnZrY3R4LCAmcy0+ZSwgJnMtPnNoZCwg b3V0cHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEFWRnJhbWUgKltdKXsg ZnJhbWVfYSwgZnJhbWVfYiB9LCAyLCBzLT5zYW1wbGVyLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJihYRmFkZVBhcmFtZXRlcnMpeyBwcm9ncmVzcyB9LCBzaXplb2YoWEZhZGVQ YXJhbWV0ZXJzKSkpOwotCi0gICAgcmV0dXJuIGZmX2ZpbHRlcl9mcmFtZShvdXRsaW5rLCBvdXRw dXQpOwotCi1mYWlsOgotICAgIGF2X2ZyYW1lX2ZyZWUoJm91dHB1dCk7Ci0gICAgcmV0dXJuIGVy cjsKLX0KLQotc3RhdGljIGludCBjb25maWdfcHJvcHNfb3V0cHV0KEFWRmlsdGVyTGluayAqb3V0 bGluaykKLXsKLSAgICBpbnQgZXJyOwotICAgIEFWRmlsdGVyQ29udGV4dCAqYXZjdHggPSBvdXRs aW5rLT5zcmM7Ci0gICAgWEZhZGVWdWxrYW5Db250ZXh0ICpzID0gYXZjdHgtPnByaXY7Ci0gICAg QVZGaWx0ZXJMaW5rICppbmxpbmtfYSA9IGF2Y3R4LT5pbnB1dHNbSU5fQV07Ci0gICAgQVZGaWx0 ZXJMaW5rICppbmxpbmtfYiA9IGF2Y3R4LT5pbnB1dHNbSU5fQl07Ci0gICAgRmlsdGVyTGluayAq aWwgPSBmZl9maWx0ZXJfbGluayhpbmxpbmtfYSk7Ci0gICAgRmlsdGVyTGluayAqb2wgPSBmZl9m aWx0ZXJfbGluayhvdXRsaW5rKTsKLQotICAgIGlmIChpbmxpbmtfYS0+dyAhPSBpbmxpbmtfYi0+ dyB8fCBpbmxpbmtfYS0+aCAhPSBpbmxpbmtfYi0+aCkgewotICAgICAgICBhdl9sb2coYXZjdHgs IEFWX0xPR19FUlJPUiwgIkZpcnN0IGlucHV0IGxpbmsgJXMgcGFyYW1ldGVycyAiCi0gICAgICAg ICAgICAgICAiKHNpemUgJWR4JWQpIGRvIG5vdCBtYXRjaCB0aGUgY29ycmVzcG9uZGluZyAiCi0g ICAgICAgICAgICAgICAic2Vjb25kIGlucHV0IGxpbmsgJXMgcGFyYW1ldGVycyAoc2l6ZSAlZHgl ZClcbiIsCi0gICAgICAgICAgICAgICBhdmN0eC0+aW5wdXRfcGFkc1tJTl9BXS5uYW1lLCBpbmxp bmtfYS0+dywgaW5saW5rX2EtPmgsCi0gICAgICAgICAgICAgICBhdmN0eC0+aW5wdXRfcGFkc1tJ Tl9CXS5uYW1lLCBpbmxpbmtfYi0+dywgaW5saW5rX2ItPmgpOwotICAgICAgICByZXR1cm4gQVZF UlJPUihFSU5WQUwpOwotICAgIH0KLQotICAgIGlmIChpbmxpbmtfYS0+dGltZV9iYXNlLm51bSAh PSBpbmxpbmtfYi0+dGltZV9iYXNlLm51bSB8fAotICAgICAgICBpbmxpbmtfYS0+dGltZV9iYXNl LmRlbiAhPSBpbmxpbmtfYi0+dGltZV9iYXNlLmRlbikgewotICAgICAgICBhdl9sb2coYXZjdHgs IEFWX0xPR19FUlJPUiwgIkZpcnN0IGlucHV0IGxpbmsgJXMgdGltZWJhc2UgIgotICAgICAgICAg ICAgICAgIiglZC8lZCkgZG9lcyBub3QgbWF0Y2ggdGhlIGNvcnJlc3BvbmRpbmcgIgotICAgICAg ICAgICAgICAgInNlY29uZCBpbnB1dCBsaW5rICVzIHRpbWViYXNlICglZC8lZClcbiIsCi0gICAg ICAgICAgICAgICBhdmN0eC0+aW5wdXRfcGFkc1tJTl9BXS5uYW1lLCBpbmxpbmtfYS0+dGltZV9i YXNlLm51bSwgaW5saW5rX2EtPnRpbWVfYmFzZS5kZW4sCi0gICAgICAgICAgICAgICBhdmN0eC0+ aW5wdXRfcGFkc1tJTl9CXS5uYW1lLCBpbmxpbmtfYi0+dGltZV9iYXNlLm51bSwgaW5saW5rX2It PnRpbWVfYmFzZS5kZW4pOwotICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOwotICAgIH0K LQotICAgIHMtPnN0YXJ0X3B0cyA9IHMtPmlucHV0c19vZmZzZXRfcHRzID0gQVZfTk9QVFNfVkFM VUU7Ci0KLSAgICBvdXRsaW5rLT50aW1lX2Jhc2UgPSBpbmxpbmtfYS0+dGltZV9iYXNlOwotICAg IG9sLT5mcmFtZV9yYXRlID0gaWwtPmZyYW1lX3JhdGU7Ci0gICAgb3V0bGluay0+c2FtcGxlX2Fz cGVjdF9yYXRpbyA9IGlubGlua19hLT5zYW1wbGVfYXNwZWN0X3JhdGlvOwotCi0gICAgaWYgKHMt PmR1cmF0aW9uKQotICAgICAgICBzLT5kdXJhdGlvbl9wdHMgPSBhdl9yZXNjYWxlX3Eocy0+ZHVy YXRpb24sIEFWX1RJTUVfQkFTRV9RLCBpbmxpbmtfYS0+dGltZV9iYXNlKTsKLSAgICBSRVQoZmZf dmtfZmlsdGVyX2NvbmZpZ19vdXRwdXQob3V0bGluaykpOwotCi1mYWlsOgotICAgIHJldHVybiBl cnI7Ci19Ci0KLXN0YXRpYyBpbnQgZm9yd2FyZF9mcmFtZShYRmFkZVZ1bGthbkNvbnRleHQgKnMs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgQVZGaWx0ZXJMaW5rICppbmxpbmssIEFWRmlsdGVy TGluayAqb3V0bGluaykKLXsKLSAgICBpbnQ2NF90IHN0YXR1c19wdHM7Ci0gICAgaW50IHJldCA9 IDAsIHN0YXR1czsKLSAgICBBVkZyYW1lICpmcmFtZSA9IE5VTEw7Ci0KLSAgICByZXQgPSBmZl9p bmxpbmtfY29uc3VtZV9mcmFtZShpbmxpbmssICZmcmFtZSk7Ci0gICAgaWYgKHJldCA8IDApCi0g ICAgICAgIHJldHVybiByZXQ7Ci0KLSAgICBpZiAocmV0ID4gMCkgewotICAgICAgICAvLyBJZiB3 ZSBkbyBub3QgaGF2ZSBhbiBvZmZzZXQgeWV0LCBpdCdzIGJlY2F1c2Ugd2UKLSAgICAgICAgLy8g bmV2ZXIgZ290IGEgZmlyc3QgaW5wdXQuIEp1c3Qgb2Zmc2V0IHRvIDAKLSAgICAgICAgaWYgKHMt PmlucHV0c19vZmZzZXRfcHRzID09IEFWX05PUFRTX1ZBTFVFKQotICAgICAgICAgICAgcy0+aW5w dXRzX29mZnNldF9wdHMgPSAtZnJhbWUtPnB0czsKLQotICAgICAgICAvLyBXZSBnb3QgYSBmcmFt ZSwgbm90aGluZyB0byBkbyBvdGhlciB0aGFuIGFkanVzdGluZyB0aGUgdGltZXN0YW1wCi0gICAg ICAgIGZyYW1lLT5wdHMgKz0gcy0+aW5wdXRzX29mZnNldF9wdHM7Ci0gICAgICAgIHJldHVybiBm Zl9maWx0ZXJfZnJhbWUob3V0bGluaywgZnJhbWUpOwotICAgIH0KLQotICAgIC8vIEZvcndhcmQg c3RhdHVzIHdpdGggb3VyIHRpbWVzdGFtcAotICAgIGlmIChmZl9pbmxpbmtfYWNrbm93bGVkZ2Vf c3RhdHVzKGlubGluaywgJnN0YXR1cywgJnN0YXR1c19wdHMpKSB7Ci0gICAgICAgIGlmIChzLT5p bnB1dHNfb2Zmc2V0X3B0cyA9PSBBVl9OT1BUU19WQUxVRSkKLSAgICAgICAgICAgIHMtPmlucHV0 c19vZmZzZXRfcHRzID0gLXN0YXR1c19wdHM7Ci0KLSAgICAgICAgZmZfb3V0bGlua19zZXRfc3Rh dHVzKG91dGxpbmssIHN0YXR1cywgc3RhdHVzX3B0cyArIHMtPmlucHV0c19vZmZzZXRfcHRzKTsK LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgLy8gTm8gZnJhbWUgYXZhaWxhYmxlLCBy ZXF1ZXN0IG9uZSBpZiBuZWVkZWQKLSAgICBpZiAoZmZfb3V0bGlua19mcmFtZV93YW50ZWQob3V0 bGluaykpCi0gICAgICAgIGZmX2lubGlua19yZXF1ZXN0X2ZyYW1lKGlubGluayk7Ci0KLSAgICBy ZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBhY3RpdmF0ZShBVkZpbHRlckNvbnRleHQgKmF2Y3R4 KQotewotICAgIFhGYWRlVnVsa2FuQ29udGV4dCAqcyA9IGF2Y3R4LT5wcml2OwotICAgIEFWRmls dGVyTGluayAqaW5fYSA9IGF2Y3R4LT5pbnB1dHNbSU5fQV07Ci0gICAgQVZGaWx0ZXJMaW5rICpp bl9iID0gYXZjdHgtPmlucHV0c1tJTl9CXTsKLSAgICBBVkZpbHRlckxpbmsgKm91dGxpbmsgPSBh dmN0eC0+b3V0cHV0c1swXTsKLSAgICBpbnQ2NF90IHN0YXR1c19wdHM7Ci0KLSAgICBGRl9GSUxU RVJfRk9SV0FSRF9TVEFUVVNfQkFDS19BTEwob3V0bGluaywgYXZjdHgpOwotCi0gICAgLy8gQ2hl Y2sgaWYgd2UgYWxyZWFkeSB0cmFuc2l0aW9uZWQgb3IgSU5fQSBlbmRlZCBwcmVtYXR1cmVseSwK LSAgICAvLyBpbiB3aGljaCBjYXNlIGp1c3QgZm9yd2FyZCB0aGUgZnJhbWVzIGZyb20gSU5fQiB3 aXRoIGFkanVzdGVkCi0gICAgLy8gdGltZXN0YW1wcyB1bnRpbCBFT0YuCi0gICAgaWYgKHMtPnN0 YXR1c1tJTl9BXSAmJiAhcy0+c3RhdHVzW0lOX0JdKQotICAgICAgICByZXR1cm4gZm9yd2FyZF9m cmFtZShzLCBpbl9iLCBvdXRsaW5rKTsKLQotICAgIC8vIFdlIGRpZCBub3QgZmluaXNoIHRyYW5z aXRpb25pbmcgeWV0IGFuZCB0aGUgZmlyc3Qgc3RyZWFtCi0gICAgLy8gZGlkIG5vdCBlbmQgZWl0 aGVyLCBzbyBjaGVjayBpZiB0aGVyZSBhcmUgbW9yZSBmcmFtZXMgdG8gY29uc3VtZS4KLSAgICBp ZiAoZmZfaW5saW5rX2NoZWNrX2F2YWlsYWJsZV9mcmFtZShpbl9hKSkgewotICAgICAgICBBVkZy YW1lICpwZWVrZWRfZnJhbWUgPSBmZl9pbmxpbmtfcGVla19mcmFtZShpbl9hLCAwKTsKLSAgICAg ICAgcy0+cHRzID0gcGVla2VkX2ZyYW1lLT5wdHM7Ci0KLSAgICAgICAgaWYgKHMtPnN0YXJ0X3B0 cyA9PSBBVl9OT1BUU19WQUxVRSkKLSAgICAgICAgICAgIHMtPnN0YXJ0X3B0cyA9Ci0gICAgICAg ICAgICAgICAgcy0+cHRzICsgYXZfcmVzY2FsZV9xKHMtPm9mZnNldCwgQVZfVElNRV9CQVNFX1Es IGluX2EtPnRpbWVfYmFzZSk7Ci0KLSAgICAgICAgLy8gQ2hlY2sgaWYgd2UgYXJlIG5vdCB5ZXQg dHJhbnNpdGlvbmluZywgaW4gd2hpY2ggY2FzZQotICAgICAgICAvLyBqdXN0IHJlcXVlc3QgYW5k IGZvcndhcmQgdGhlIGlucHV0IGZyYW1lLgotICAgICAgICBpZiAocy0+c3RhcnRfcHRzID4gcy0+ cHRzKSB7Ci0gICAgICAgICAgICBBVkZyYW1lICpmcmFtZV9hID0gTlVMTDsKLSAgICAgICAgICAg IHMtPnBhc3N0aHJvdWdoID0gMTsKLSAgICAgICAgICAgIGZmX2lubGlua19jb25zdW1lX2ZyYW1l KGluX2EsICZmcmFtZV9hKTsKLSAgICAgICAgICAgIHJldHVybiBmZl9maWx0ZXJfZnJhbWUob3V0 bGluaywgZnJhbWVfYSk7Ci0gICAgICAgIH0KLSAgICAgICAgcy0+cGFzc3Rocm91Z2ggPSAwOwot Ci0gICAgICAgIC8vIFdlIGFyZSB0cmFuc2l0aW9uaW5nLCBzbyB3ZSBuZWVkIGEgZnJhbWUgZnJv bSBJTl9CCi0gICAgICAgIGlmIChmZl9pbmxpbmtfY2hlY2tfYXZhaWxhYmxlX2ZyYW1lKGluX2Ip KSB7Ci0gICAgICAgICAgICBpbnQgcmV0OwotICAgICAgICAgICAgQVZGcmFtZSAqZnJhbWVfYSA9 IE5VTEwsICpmcmFtZV9iID0gTlVMTDsKLSAgICAgICAgICAgIGZmX2lubGlua19jb25zdW1lX2Zy YW1lKGF2Y3R4LT5pbnB1dHNbSU5fQV0sICZmcmFtZV9hKTsKLSAgICAgICAgICAgIGZmX2lubGlu a19jb25zdW1lX2ZyYW1lKGF2Y3R4LT5pbnB1dHNbSU5fQl0sICZmcmFtZV9iKTsKLQotICAgICAg ICAgICAgLy8gQ2FsY3VsYXRlIFBUUyBvZmZzZXQgdG8gZmlyc3QgaW5wdXQKLSAgICAgICAgICAg IGlmIChzLT5pbnB1dHNfb2Zmc2V0X3B0cyA9PSBBVl9OT1BUU19WQUxVRSkKLSAgICAgICAgICAg ICAgICBzLT5pbnB1dHNfb2Zmc2V0X3B0cyA9IHMtPnB0cyAtIGZyYW1lX2ItPnB0czsKLQotICAg ICAgICAgICAgLy8gQ2hlY2sgaWYgd2UgZmluaXNoZWQgdHJhbnNpdGlvbmluZywgaW4gd2hpY2gg Y2FzZSB3ZQotICAgICAgICAgICAgLy8gcmVwb3J0IGJhY2sgRU9GIHRvIElOX0EgYXMgaXQgaXMg bm8gbG9uZ2VyIG5lZWRlZC4KLSAgICAgICAgICAgIGlmIChzLT5wdHMgLSBzLT5zdGFydF9wdHMg PiBzLT5kdXJhdGlvbl9wdHMpIHsKLSAgICAgICAgICAgICAgICBzLT5zdGF0dXNbSU5fQV0gPSBB VkVSUk9SX0VPRjsKLSAgICAgICAgICAgICAgICBmZl9pbmxpbmtfc2V0X3N0YXR1cyhpbl9hLCBB VkVSUk9SX0VPRik7Ci0gICAgICAgICAgICAgICAgcy0+cGFzc3Rocm91Z2ggPSAxOwotICAgICAg ICAgICAgfQotICAgICAgICAgICAgcmV0ID0geGZhZGVfZnJhbWUoYXZjdHgsIGZyYW1lX2EsIGZy YW1lX2IpOwotICAgICAgICAgICAgYXZfZnJhbWVfZnJlZSgmZnJhbWVfYSk7Ci0gICAgICAgICAg ICBhdl9mcmFtZV9mcmVlKCZmcmFtZV9iKTsKLSAgICAgICAgICAgIHJldHVybiByZXQ7Ci0gICAg ICAgIH0KLQotICAgICAgICAvLyBXZSBkaWQgbm90IGdldCBhIGZyYW1lIGZyb20gSU5fQiwgY2hl Y2sgaXRzIHN0YXR1cy4KLSAgICAgICAgaWYgKGZmX2lubGlua19hY2tub3dsZWRnZV9zdGF0dXMo aW5fYiwgJnMtPnN0YXR1c1tJTl9CXSwgJnN0YXR1c19wdHMpKSB7Ci0gICAgICAgICAgICAvLyBX ZSBzaG91bGQgdHJhbnNpdGlvbiwgYnV0IElOX0IgaXMgRU9GIHNvIGp1c3QgcmVwb3J0IEVPRiBv dXRwdXQgbm93LgotICAgICAgICAgICAgZmZfb3V0bGlua19zZXRfc3RhdHVzKG91dGxpbmssIHMt PnN0YXR1c1tJTl9CXSwgcy0+cHRzKTsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9 Ci0KLSAgICAgICAgLy8gV2UgZGlkIG5vdCBnZXQgYSBmcmFtZSBmb3IgSU5fQiBidXQgbm8gRU9G IGVpdGhlciwgc28ganVzdCByZXF1ZXN0IG1vcmUuCi0gICAgICAgIGlmIChmZl9vdXRsaW5rX2Zy YW1lX3dhbnRlZChvdXRsaW5rKSkgewotICAgICAgICAgICAgZmZfaW5saW5rX3JlcXVlc3RfZnJh bWUoaW5fYik7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotICAgIH0KLQotICAg IC8vIFdlIGRpZCBub3QgZ2V0IGEgZnJhbWUgZnJvbSBJTl9BLCBjaGVjayBpdHMgc3RhdHVzLgot ICAgIGlmIChmZl9pbmxpbmtfYWNrbm93bGVkZ2Vfc3RhdHVzKGluX2EsICZzLT5zdGF0dXNbSU5f QV0sICZzdGF0dXNfcHRzKSkgewotICAgICAgICAvLyBObyBtb3JlIGZyYW1lcyBmcm9tIElOX0Es IGRvIG5vdCByZXBvcnQgRU9GIHRob3VnaCwgd2Ugd2lsbCBqdXN0Ci0gICAgICAgIC8vIGZvcndh cmQgdGhlIElOX0IgZnJhbWVzIGluIHRoZSBuZXh0IGFjdGl2YXRlIGNhbGxzLgotICAgICAgICBz LT5wYXNzdGhyb3VnaCA9IDE7Ci0gICAgICAgIGZmX2ZpbHRlcl9zZXRfcmVhZHkoYXZjdHgsIDEw MCk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIC8vIFdlIGhhdmUgbm8gZnJhbWVz IHlldCBmcm9tIElOX0EgYW5kIG5vIEVPRiwgc28gcmVxdWVzdCBzb21lLgotICAgIGlmIChmZl9v dXRsaW5rX2ZyYW1lX3dhbnRlZChvdXRsaW5rKSkgewotICAgICAgICBmZl9pbmxpbmtfcmVxdWVz dF9mcmFtZShpbl9hKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgcmV0dXJuIEZG RVJST1JfTk9UX1JFQURZOwotfQotCi1zdGF0aWMgYXZfY29sZCB2b2lkIHVuaW5pdChBVkZpbHRl ckNvbnRleHQgKmF2Y3R4KQotewotICAgIFhGYWRlVnVsa2FuQ29udGV4dCAqcyA9IGF2Y3R4LT5w cml2OwotICAgIEZGVnVsa2FuQ29udGV4dCAqdmtjdHggPSAmcy0+dmtjdHg7Ci0gICAgRkZWdWxr YW5GdW5jdGlvbnMgKnZrID0gJnZrY3R4LT52a2ZuOwotCi0gICAgZmZfdmtfZXhlY19wb29sX2Zy ZWUodmtjdHgsICZzLT5lKTsKLSAgICBmZl92a19zaGFkZXJfZnJlZSh2a2N0eCwgJnMtPnNoZCk7 Ci0KLSAgICBpZiAocy0+c2FtcGxlcikKLSAgICAgICAgdmstPkRlc3Ryb3lTYW1wbGVyKHZrY3R4 LT5od2N0eC0+YWN0X2Rldiwgcy0+c2FtcGxlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg IHZrY3R4LT5od2N0eC0+YWxsb2MpOwotCi0gICAgZmZfdmtfdW5pbml0KCZzLT52a2N0eCk7Ci0K LSAgICBzLT5pbml0aWFsaXplZCA9IDA7Ci19Ci0KLXN0YXRpYyBBVkZyYW1lICpnZXRfdmlkZW9f YnVmZmVyKEFWRmlsdGVyTGluayAqaW5saW5rLCBpbnQgdywgaW50IGgpCi17Ci0gICAgWEZhZGVW dWxrYW5Db250ZXh0ICpzID0gaW5saW5rLT5kc3QtPnByaXY7Ci0KLSAgICByZXR1cm4gcy0+cGFz c3Rocm91Z2ggPwotICAgICAgICBmZl9udWxsX2dldF92aWRlb19idWZmZXIgICAoaW5saW5rLCB3 LCBoKSA6Ci0gICAgICAgIGZmX2RlZmF1bHRfZ2V0X3ZpZGVvX2J1ZmZlcihpbmxpbmssIHcsIGgp OwotfQotCi0jZGVmaW5lIE9GRlNFVCh4KSBvZmZzZXRvZihYRmFkZVZ1bGthbkNvbnRleHQsIHgp Ci0jZGVmaW5lIEZMQUdTIChBVl9PUFRfRkxBR19GSUxURVJJTkdfUEFSQU0gfCBBVl9PUFRfRkxB R19WSURFT19QQVJBTSkKLQotc3RhdGljIGNvbnN0IEFWT3B0aW9uIHhmYWRlX3Z1bGthbl9vcHRp b25zW10gPSB7Ci0gICAgeyAidHJhbnNpdGlvbiIsICJzZXQgY3Jvc3MgZmFkZSB0cmFuc2l0aW9u IiwgT0ZGU0VUKHRyYW5zaXRpb24pLCBBVl9PUFRfVFlQRV9JTlQsIHsuaTY0PUZBREV9LCAwLCBO Ql9UUkFOU0lUSU9OUy0xLCBGTEFHUywgLnVuaXQgPSAidHJhbnNpdGlvbiIgfSwKLSAgICAgICAg eyAiZmFkZSIsICJmYWRlIHRyYW5zaXRpb24iLCAwLCBBVl9PUFRfVFlQRV9DT05TVCwgey5pNjQ9 RkFERX0sIDAsIDAsIEZMQUdTLCAudW5pdCA9ICJ0cmFuc2l0aW9uIiB9LAotICAgICAgICB7ICJ3 aXBlbGVmdCIsICJ3aXBlIGxlZnQgdHJhbnNpdGlvbiIsIDAsIEFWX09QVF9UWVBFX0NPTlNULCB7 Lmk2ND1XSVBFTEVGVH0sIDAsIDAsIEZMQUdTLCAudW5pdCA9ICJ0cmFuc2l0aW9uIiB9LAotICAg ICAgICB7ICJ3aXBlcmlnaHQiLCAid2lwZSByaWdodCB0cmFuc2l0aW9uIiwgMCwgQVZfT1BUX1RZ UEVfQ09OU1QsIHsuaTY0PVdJUEVSSUdIVH0sIDAsIDAsIEZMQUdTLCAudW5pdCA9ICJ0cmFuc2l0 aW9uIiB9LAotICAgICAgICB7ICJ3aXBldXAiLCAid2lwZSB1cCB0cmFuc2l0aW9uIiwgMCwgQVZf T1BUX1RZUEVfQ09OU1QsIHsuaTY0PVdJUEVVUH0sIDAsIDAsIEZMQUdTLCAudW5pdCA9ICJ0cmFu c2l0aW9uIiB9LAotICAgICAgICB7ICJ3aXBlZG93biIsICJ3aXBlIGRvd24gdHJhbnNpdGlvbiIs IDAsIEFWX09QVF9UWVBFX0NPTlNULCB7Lmk2ND1XSVBFRE9XTn0sIDAsIDAsIEZMQUdTLCAudW5p dCA9ICJ0cmFuc2l0aW9uIiB9LAotICAgICAgICB7ICJzbGlkZWRvd24iLCAic2xpZGUgZG93biB0 cmFuc2l0aW9uIiwgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsuaTY0PVNMSURFRE9XTn0sIDAsIDAs IEZMQUdTLCAudW5pdCA9ICJ0cmFuc2l0aW9uIiB9LAotICAgICAgICB7ICJzbGlkZXVwIiwgInNs aWRlIHVwIHRyYW5zaXRpb24iLCAwLCBBVl9PUFRfVFlQRV9DT05TVCwgey5pNjQ9U0xJREVVUH0s IDAsIDAsIEZMQUdTLCAudW5pdCA9ICJ0cmFuc2l0aW9uIiB9LAotICAgICAgICB7ICJzbGlkZWxl ZnQiLCAic2xpZGUgbGVmdCB0cmFuc2l0aW9uIiwgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsuaTY0 PVNMSURFTEVGVH0sIDAsIDAsIEZMQUdTLCAudW5pdCA9ICJ0cmFuc2l0aW9uIiB9LAotICAgICAg ICB7ICJzbGlkZXJpZ2h0IiwgInNsaWRlIHJpZ2h0IHRyYW5zaXRpb24iLCAwLCBBVl9PUFRfVFlQ RV9DT05TVCwgey5pNjQ9U0xJREVSSUdIVH0sIDAsIDAsIEZMQUdTLCAudW5pdCA9ICJ0cmFuc2l0 aW9uIiB9LAotICAgICAgICB7ICJjaXJjbGVvcGVuIiwgImNpcmNsZW9wZW4gdHJhbnNpdGlvbiIs IDAsIEFWX09QVF9UWVBFX0NPTlNULCB7Lmk2ND1DSVJDTEVPUEVOfSwgMCwgMCwgRkxBR1MsIC51 bml0ID0gInRyYW5zaXRpb24iIH0sCi0gICAgICAgIHsgImNpcmNsZWNsb3NlIiwgImNpcmNsZWNs b3NlIHRyYW5zaXRpb24iLCAwLCBBVl9PUFRfVFlQRV9DT05TVCwgey5pNjQ9Q0lSQ0xFQ0xPU0V9 LCAwLCAwLCBGTEFHUywgLnVuaXQgPSAidHJhbnNpdGlvbiIgfSwKLSAgICAgICAgeyAiZGlzc29s dmUiLCAiZGlzc29sdmUgdHJhbnNpdGlvbiIsIDAsIEFWX09QVF9UWVBFX0NPTlNULCB7Lmk2ND1E SVNTT0xWRX0sIDAsIDAsIEZMQUdTLCAudW5pdCA9ICJ0cmFuc2l0aW9uIiB9LAotICAgICAgICB7 ICJwaXhlbGl6ZSIsICJwaXhlbGl6ZSB0cmFuc2l0aW9uIiwgMCwgQVZfT1BUX1RZUEVfQ09OU1Qs IHsuaTY0PVBJWEVMSVpFfSwgMCwgMCwgRkxBR1MsIC51bml0ID0gInRyYW5zaXRpb24iIH0sCi0g ICAgICAgIHsgIndpcGV0bCIsICJ3aXBlIHRvcCBsZWZ0IHRyYW5zaXRpb24iLCAwLCBBVl9PUFRf VFlQRV9DT05TVCwgey5pNjQ9V0lQRVRMfSwgMCwgMCwgRkxBR1MsIC51bml0ID0gInRyYW5zaXRp b24iIH0sCi0gICAgICAgIHsgIndpcGV0ciIsICJ3aXBlIHRvcCByaWdodCB0cmFuc2l0aW9uIiwg MCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsuaTY0PVdJUEVUUn0sIDAsIDAsIEZMQUdTLCAudW5pdCA9 ICJ0cmFuc2l0aW9uIiB9LAotICAgICAgICB7ICJ3aXBlYmwiLCAid2lwZSBib3R0b20gbGVmdCB0 cmFuc2l0aW9uIiwgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsuaTY0PVdJUEVCTH0sIDAsIDAsIEZM QUdTLCAudW5pdCA9ICJ0cmFuc2l0aW9uIiB9LAotICAgICAgICB7ICJ3aXBlYnIiLCAid2lwZSBi b3R0b20gcmlnaHQgdHJhbnNpdGlvbiIsIDAsIEFWX09QVF9UWVBFX0NPTlNULCB7Lmk2ND1XSVBF QlJ9LCAwLCAwLCBGTEFHUywgLnVuaXQgPSAidHJhbnNpdGlvbiIgfSwKLSAgICB7ICJkdXJhdGlv biIsICJzZXQgY3Jvc3MgZmFkZSBkdXJhdGlvbiIsIE9GRlNFVChkdXJhdGlvbiksIEFWX09QVF9U WVBFX0RVUkFUSU9OLCB7Lmk2ND0xMDAwMDAwfSwgMCwgNjAwMDAwMDAsIEZMQUdTIH0sCi0gICAg eyAib2Zmc2V0IiwgICAic2V0IGNyb3NzIGZhZGUgc3RhcnQgcmVsYXRpdmUgdG8gZmlyc3QgaW5w dXQgc3RyZWFtIiwgT0ZGU0VUKG9mZnNldCksIEFWX09QVF9UWVBFX0RVUkFUSU9OLCB7Lmk2ND0w fSwgSU5UNjRfTUlOLCBJTlQ2NF9NQVgsIEZMQUdTIH0sCi0gICAgeyBOVUxMIH0KLX07Ci0KLUFW RklMVEVSX0RFRklORV9DTEFTUyh4ZmFkZV92dWxrYW4pOwotCi1zdGF0aWMgY29uc3QgQVZGaWx0 ZXJQYWQgeGZhZGVfdnVsa2FuX2lucHV0c1tdID0gewotICAgIHsKLSAgICAgICAgLm5hbWUgICAg ICAgICAgICAgPSAibWFpbiIsCi0gICAgICAgIC50eXBlICAgICAgICAgICAgID0gQVZNRURJQV9U WVBFX1ZJREVPLAotICAgICAgICAuZ2V0X2J1ZmZlci52aWRlbyA9ICZnZXRfdmlkZW9fYnVmZmVy LAotICAgICAgICAuY29uZmlnX3Byb3BzICAgICA9ICZmZl92a19maWx0ZXJfY29uZmlnX2lucHV0 LAotICAgIH0sCi0gICAgewotICAgICAgICAubmFtZSAgICAgICAgICAgICA9ICJ4ZmFkZSIsCi0g ICAgICAgIC50eXBlICAgICAgICAgICAgID0gQVZNRURJQV9UWVBFX1ZJREVPLAotICAgICAgICAu Z2V0X2J1ZmZlci52aWRlbyA9ICZnZXRfdmlkZW9fYnVmZmVyLAotICAgICAgICAuY29uZmlnX3By b3BzICAgICA9ICZmZl92a19maWx0ZXJfY29uZmlnX2lucHV0LAotICAgIH0sCi19OwotCi1zdGF0 aWMgY29uc3QgQVZGaWx0ZXJQYWQgeGZhZGVfdnVsa2FuX291dHB1dHNbXSA9IHsKLSAgICB7Ci0g ICAgICAgIC5uYW1lICAgICAgICAgID0gImRlZmF1bHQiLAotICAgICAgICAudHlwZSAgICAgICAg ICA9IEFWTUVESUFfVFlQRV9WSURFTywKLSAgICAgICAgLmNvbmZpZ19wcm9wcyAgPSAmY29uZmln X3Byb3BzX291dHB1dCwKLSAgICB9LAotfTsKLQotY29uc3QgRkZGaWx0ZXIgZmZfdmZfeGZhZGVf dnVsa2FuID0gewotICAgIC5wLm5hbWUgICAgICAgICAgPSAieGZhZGVfdnVsa2FuIiwKLSAgICAu cC5kZXNjcmlwdGlvbiAgID0gTlVMTF9JRl9DT05GSUdfU01BTEwoIkNyb3NzIGZhZGUgb25lIHZp ZGVvIHdpdGggYW5vdGhlciB2aWRlby4iKSwKLSAgICAucC5wcml2X2NsYXNzICAgID0gJnhmYWRl X3Z1bGthbl9jbGFzcywKLSAgICAucC5mbGFncyAgICAgICAgID0gQVZGSUxURVJfRkxBR19IV0RF VklDRSwKLSAgICAucHJpdl9zaXplICAgICAgID0gc2l6ZW9mKFhGYWRlVnVsa2FuQ29udGV4dCks Ci0gICAgLmluaXQgICAgICAgICAgICA9ICZmZl92a19maWx0ZXJfaW5pdCwKLSAgICAudW5pbml0 ICAgICAgICAgID0gJnVuaW5pdCwKLSAgICAuYWN0aXZhdGUgICAgICAgID0gJmFjdGl2YXRlLAot ICAgIEZJTFRFUl9JTlBVVFMoeGZhZGVfdnVsa2FuX2lucHV0cyksCi0gICAgRklMVEVSX09VVFBV VFMoeGZhZGVfdnVsa2FuX291dHB1dHMpLAotICAgIEZJTFRFUl9TSU5HTEVfUElYRk1UKEFWX1BJ WF9GTVRfVlVMS0FOKSwKLSAgICAuZmxhZ3NfaW50ZXJuYWwgID0gRkZfRklMVEVSX0ZMQUdfSFdG UkFNRV9BV0FSRSwKLX07Ci0tIAoyLjQ5LjEKCgpGcm9tIDhkZTU5MTI2OTdiZWMwNzYwMjU2MjQ5 NWZhYzY1ZWQ2M2IyYjllN2MgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCkZyb206IEphbWFpa2Ex IDxsdWthc3pjejE4QHdwLnBsPgpEYXRlOiBXZWQsIDMgU2VwIDIwMjUgMTM6MDQ6NDEgKzAwMDAK U3ViamVjdDogW1BBVENIIDAyOC8xMThdIENoYW5naW5nIHZ1bGthbiBmaWxlIGRpcmVjdG9yeQoK LS0tCiBsaWJhdmZpbHRlci92dWxrYW4vdmZfeGZhZGVfdnVsa2FuLmMgfCA3MjUgKysrKysrKysr KysrKysrKysrKysrKysrKysrCiAxIGZpbGUgY2hhbmdlZCwgNzI1IGluc2VydGlvbnMoKykKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBsaWJhdmZpbHRlci92dWxrYW4vdmZfeGZhZGVfdnVsa2FuLmMKCmRp ZmYgLS1naXQgYS9saWJhdmZpbHRlci92dWxrYW4vdmZfeGZhZGVfdnVsa2FuLmMgYi9saWJhdmZp bHRlci92dWxrYW4vdmZfeGZhZGVfdnVsa2FuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMC4uYjEyNWFlNGQxMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmF2ZmlsdGVyL3Z1 bGthbi92Zl94ZmFkZV92dWxrYW4uYwpAQCAtMCwwICsxLDcyNSBAQAorLyoKKyAqIFRoaXMgZmls ZSBpcyBwYXJ0IG9mIEZGbXBlZy4KKyAqCisgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91 IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMi4x IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor ICoKKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl ZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxv bmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZv dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rvbiwg TUEgMDIxMTAtMTMwMSBVU0EKKyAqLworCisjaW5jbHVkZSAibGliYXZ1dGlsL2F2YXNzZXJ0Lmgi CisjaW5jbHVkZSAibGliYXZ1dGlsL3JhbmRvbV9zZWVkLmgiCisjaW5jbHVkZSAibGliYXZ1dGls L29wdC5oIgorI2luY2x1ZGUgIi4uLy4uL2xpYmF2dXRpbC92dWxrYW4vdnVsa2FuX3NwaXJ2Lmgi CisjaW5jbHVkZSAidnVsa2FuX2ZpbHRlci5oIgorI2luY2x1ZGUgImxpYmF2ZmlsdGVyL2ZpbHRl cnMuaCIKKyNpbmNsdWRlICJsaWJhdmZpbHRlci92aWRlby5oIgorCisjZGVmaW5lIElOX0EgIDAK KyNkZWZpbmUgSU5fQiAgMQorI2RlZmluZSBJTl9OQiAyCisKK3R5cGVkZWYgc3RydWN0IFhGYWRl UGFyYW1ldGVycyB7CisgICAgZmxvYXQgcHJvZ3Jlc3M7Cit9IFhGYWRlUGFyYW1ldGVyczsKKwor dHlwZWRlZiBzdHJ1Y3QgWEZhZGVWdWxrYW5Db250ZXh0IHsKKyAgICBGRlZ1bGthbkNvbnRleHQg ICAgIHZrY3R4OworCisgICAgaW50ICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uOworICAgIGlu dDY0X3QgICAgICAgICAgICAgZHVyYXRpb247CisgICAgaW50NjRfdCAgICAgICAgICAgICBvZmZz ZXQ7CisKKyAgICBpbnQgICAgICAgICAgICAgICAgIGluaXRpYWxpemVkOworICAgIEZGVmtFeGVj UG9vbCAgICAgICAgZTsKKyAgICBBVlZ1bGthbkRldmljZVF1ZXVlRmFtaWx5ICpxZjsKKyAgICBG RlZ1bGthblNoYWRlciAgICAgIHNoZDsKKyAgICBWa1NhbXBsZXIgICAgICAgICAgIHNhbXBsZXI7 CisKKyAgICAvLyBQVFMgd2hlbiB0aGUgZmFkZSBzaG91bGQgc3RhcnQgKGluIElOX0EgdGltZWJh c2UpCisgICAgaW50NjRfdCAgICAgICAgICAgICBzdGFydF9wdHM7CisKKyAgICAvLyBQVFMgb2Zm c2V0IGJldHdlZW4gSU5fQSBhbmQgSU5fQgorICAgIGludDY0X3QgICAgICAgICAgICAgaW5wdXRz X29mZnNldF9wdHM7CisKKyAgICAvLyBEdXJhdGlvbiBvZiB0aGUgdHJhbnNpdGlvbgorICAgIGlu dDY0X3QgICAgICAgICAgICAgZHVyYXRpb25fcHRzOworCisgICAgLy8gQ3VycmVudCBQVFMgb2Yg dGhlIGZpcnN0IGlucHV0IChJTl9BKQorICAgIGludDY0X3QgICAgICAgICAgICAgcHRzOworCisg ICAgLy8gSWYgZnJhbWVzIGFyZSBjdXJyZW50bHkganVzdCBwYXNzZWQgdGhyb3VnaAorICAgIC8v IHVubW9kaWZpZWQsIGxpa2UgYmVmb3JlIGFuZCBhZnRlciB0aGUgYWN0dWFsCisgICAgLy8gdHJh bnNpdGlvbi4KKyAgICBpbnQgICAgICAgICAgICAgICAgIHBhc3N0aHJvdWdoOworCisgICAgaW50 ICAgICAgICAgICAgICAgICBzdGF0dXNbSU5fTkJdOworfSBYRmFkZVZ1bGthbkNvbnRleHQ7CisK K2VudW0gWEZhZGVUcmFuc2l0aW9ucyB7CisgICAgRkFERSwKKyAgICBXSVBFTEVGVCwKKyAgICBX SVBFUklHSFQsCisgICAgV0lQRVVQLAorICAgIFdJUEVET1dOLAorICAgIFNMSURFRE9XTiwKKyAg ICBTTElERVVQLAorICAgIFNMSURFTEVGVCwKKyAgICBTTElERVJJR0hULAorICAgIENJUkNMRU9Q RU4sCisgICAgQ0lSQ0xFQ0xPU0UsCisgICAgRElTU09MVkUsCisgICAgUElYRUxJWkUsCisgICAg V0lQRVRMLAorICAgIFdJUEVUUiwKKyAgICBXSVBFQkwsCisgICAgV0lQRUJSLAorICAgIE5CX1RS QU5TSVRJT05TLAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgdHJhbnNpdGlvbl9mYWRlW10gPSB7 CisgICAgQygwLCB2b2lkIHRyYW5zaXRpb24oaW50IGlkeCwgaXZlYzIgcG9zLCBmbG9hdCBwcm9n cmVzcykgICAgICAgICAgICAgICAgICAgKQorICAgIEMoMCwgeyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICBD KDEsICAgICB2ZWM0IGEgPSB0ZXh0dXJlKGFfaW1hZ2VzW2lkeF0sIHBvcyk7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICApCisgICAgQygxLCAgICAgdmVjNCBiID0gdGV4dHVyZShiX2ltYWdl c1tpZHhdLCBwb3MpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgIEMoMSwgICAg IGltYWdlU3RvcmUob3V0cHV0X2ltYWdlc1tpZHhdLCBwb3MsIG1peChhLCBiLCBwcm9ncmVzcykp OyAgICAgICAgICkKKyAgICBDKDAsIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCit9OworCitzdGF0aWMgY29uc3Qg Y2hhciB0cmFuc2l0aW9uX3dpcGVsZWZ0W10gPSB7CisgICAgQygwLCB2b2lkIHRyYW5zaXRpb24o aW50IGlkeCwgaXZlYzIgcG9zLCBmbG9hdCBwcm9ncmVzcykgICAgICAgICAgICAgICAgICAgKQor ICAgIEMoMCwgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICkKKyAgICBDKDEsICAgICBpdmVjMiBzaXplID0gaW1hZ2VT aXplKG91dHB1dF9pbWFnZXNbaWR4XSk7ICAgICAgICAgICAgICAgICAgICAgICApCisgICAgQygx LCAgICAgaW50ICBzID0gaW50KHNpemUueCAqICgxLjAgLSBwcm9ncmVzcykpOyAgICAgICAgICAg ICAgICAgICAgICAgICAgKQorICAgIEMoMSwgICAgIHZlYzQgYSA9IHRleHR1cmUoYV9pbWFnZXNb aWR4XSwgcG9zKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICBDKDEsICAgICB2 ZWM0IGIgPSB0ZXh0dXJlKGJfaW1hZ2VzW2lkeF0sIHBvcyk7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICApCisgICAgQygxLCAgICAgaW1hZ2VTdG9yZShvdXRwdXRfaW1hZ2VzW2lkeF0sIHBv cywgcG9zLnggPiBzID8gYiA6IGEpOyAgICAgICAgICAgKQorICAgIEMoMCwgfSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICkKK307CisKK3N0YXRpYyBjb25zdCBjaGFyIHRyYW5zaXRpb25fd2lwZXJpZ2h0W10gPSB7Cisg ICAgQygwLCB2b2lkIHRyYW5zaXRpb24oaW50IGlkeCwgaXZlYzIgcG9zLCBmbG9hdCBwcm9ncmVz cykgICAgICAgICAgICAgICAgICAgKQorICAgIEMoMCwgeyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICBDKDEs ICAgICBpdmVjMiBzaXplID0gaW1hZ2VTaXplKG91dHB1dF9pbWFnZXNbaWR4XSk7ICAgICAgICAg ICAgICAgICAgICAgICApCisgICAgQygxLCAgICAgaW50ICBzID0gaW50KHNpemUueCAqIHByb2dy ZXNzKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgIEMoMSwgICAgIHZl YzQgYSA9IHRleHR1cmUoYV9pbWFnZXNbaWR4XSwgcG9zKTsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICkKKyAgICBDKDEsICAgICB2ZWM0IGIgPSB0ZXh0dXJlKGJfaW1hZ2VzW2lkeF0sIHBv cyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgQygxLCAgICAgaW1hZ2VTdG9y ZShvdXRwdXRfaW1hZ2VzW2lkeF0sIHBvcywgcG9zLnggPiBzID8gYSA6IGIpOyAgICAgICAgICAg KQorICAgIEMoMCwgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICkKK307CisKK3N0YXRpYyBjb25zdCBjaGFyIHRyYW5z aXRpb25fd2lwZXVwW10gPSB7CisgICAgQygwLCB2b2lkIHRyYW5zaXRpb24oaW50IGlkeCwgaXZl YzIgcG9zLCBmbG9hdCBwcm9ncmVzcykgICAgICAgICAgICAgICAgICAgKQorICAgIEMoMCwgeyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICkKKyAgICBDKDEsICAgICBpdmVjMiBzaXplID0gaW1hZ2VTaXplKG91dHB1dF9p bWFnZXNbaWR4XSk7ICAgICAgICAgICAgICAgICAgICAgICApCisgICAgQygxLCAgICAgaW50ICBz ID0gaW50KHNpemUueSAqICgxLjAgLSBwcm9ncmVzcykpOyAgICAgICAgICAgICAgICAgICAgICAg ICAgKQorICAgIEMoMSwgICAgIHZlYzQgYSA9IHRleHR1cmUoYV9pbWFnZXNbaWR4XSwgcG9zKTsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICBDKDEsICAgICB2ZWM0IGIgPSB0ZXh0 dXJlKGJfaW1hZ2VzW2lkeF0sIHBvcyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisg ICAgQygxLCAgICAgaW1hZ2VTdG9yZShvdXRwdXRfaW1hZ2VzW2lkeF0sIHBvcywgcG9zLnkgPiBz ID8gYiA6IGEpOyAgICAgICAgICAgKQorICAgIEMoMCwgfSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKK307CisKK3N0 YXRpYyBjb25zdCBjaGFyIHRyYW5zaXRpb25fd2lwZWRvd25bXSA9IHsKKyAgICBDKDAsIHZvaWQg dHJhbnNpdGlvbihpbnQgaWR4LCBpdmVjMiBwb3MsIGZsb2F0IHByb2dyZXNzKSAgICAgICAgICAg ICAgICAgICApCisgICAgQygwLCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgIEMoMSwgICAgIGl2ZWMyIHNp emUgPSBpbWFnZVNpemUob3V0cHV0X2ltYWdlc1tpZHhdKTsgICAgICAgICAgICAgICAgICAgICAg ICkKKyAgICBDKDEsICAgICBpbnQgIHMgPSBpbnQoc2l6ZS55ICogcHJvZ3Jlc3MpOyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgQygxLCAgICAgdmVjNCBhID0gdGV4dHVy ZShhX2ltYWdlc1tpZHhdLCBwb3MpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorICAg IEMoMSwgICAgIHZlYzQgYiA9IHRleHR1cmUoYl9pbWFnZXNbaWR4XSwgcG9zKTsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICkKKyAgICBDKDEsICAgICBpbWFnZVN0b3JlKG91dHB1dF9pbWFn ZXNbaWR4XSwgcG9zLCBwb3MueSA+IHMgPyBhIDogYik7ICAgICAgICAgICApCisgICAgQygwLCB9 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKQorfTsKKworI2RlZmluZSBTSEFERVJfU0xJREVfQ09NTU9OICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg ICAgQygwLCB2b2lkIHNsaWRlKGludCBpZHgsIGl2ZWMyIHBvcywgZmxvYXQgcHJvZ3Jlc3MsIGl2 ZWMyIGRpcmVjdGlvbikgICAgICAgICAgICAgICApIFwKKyAgICBDKDAsIHsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICkgXAorICAgIEMoMSwgICAgIGl2ZWMyIHNpemUgPSBpbWFnZVNpemUob3V0cHV0X2lt YWdlc1tpZHhdKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSBcCisgICAgQygxLCAg ICAgaXZlYzIgcGkgPSBpdmVjMihwcm9ncmVzcyAqIHNpemUpOyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICApIFwKKyAgICBDKDEsICAgICBpdmVjMiBwID0gcG9zICsgcGkg KiBkaXJlY3Rpb247ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkg XAorICAgIEMoMSwgICAgIGl2ZWMyIGYgPSBwICUgc2l6ZTsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSBcCisgICAgQygxLCAgICAgZiA9IGYg KyBzaXplICogaXZlYzIoZi54IDwgMCwgZi55IDwgMCk7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICApIFwKKyAgICBDKDEsICAgICB2ZWM0IGEgPSB0ZXh0dXJlKGFfaW1hZ2VzW2lk eF0sIGYpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgXAorICAgIEMo MSwgICAgIHZlYzQgYiA9IHRleHR1cmUoYl9pbWFnZXNbaWR4XSwgZik7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKSBcCisgICAgQygxLCAgICAgdmVjNCByID0gKHAueSA+ PSAwICYmIHAueCA+PSAwICYmIHNpemUueSA+IHAueSAmJiAgc2l6ZS54ID4gcC54KSA/IGEgOiBi OyApIFwKKyAgICBDKDEsICAgICBpbWFnZVN0b3JlKG91dHB1dF9pbWFnZXNbaWR4XSwgcG9zLCBy KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgXAorICAgIEMoMCwgfSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKQorCitzdGF0aWMgY29uc3QgY2hhciB0cmFuc2l0aW9uX3NsaWRlZG93 bltdID0geworICAgIFNIQURFUl9TTElERV9DT01NT04KKyAgICBDKDAsIHZvaWQgdHJhbnNpdGlv bihpbnQgaWR4LCBpdmVjMiBwb3MsIGZsb2F0IHByb2dyZXNzKSAgICAgICAgICAgICAgICAgICAp CisgICAgQygwLCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgIEMoMSwgICAgIHNsaWRlKGlkeCwgcG9zLCBw cm9ncmVzcywgaXZlYzIoMCwgLTEpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICBD KDAsIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICApCit9OworCitzdGF0aWMgY29uc3QgY2hhciB0cmFuc2l0aW9uX3Ns aWRldXBbXSA9IHsKKyAgICBTSEFERVJfU0xJREVfQ09NTU9OCisgICAgQygwLCB2b2lkIHRyYW5z aXRpb24oaW50IGlkeCwgaXZlYzIgcG9zLCBmbG9hdCBwcm9ncmVzcykgICAgICAgICAgICAgICAg ICAgKQorICAgIEMoMCwgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICBDKDEsICAgICBzbGlkZShpZHgsIHBv cywgcHJvZ3Jlc3MsIGl2ZWMyKDAsICsxKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICApCisg ICAgQygwLCB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKQorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgdHJhbnNpdGlv bl9zbGlkZWxlZnRbXSA9IHsKKyAgICBTSEFERVJfU0xJREVfQ09NTU9OCisgICAgQygwLCB2b2lk IHRyYW5zaXRpb24oaW50IGlkeCwgaXZlYzIgcG9zLCBmbG9hdCBwcm9ncmVzcykgICAgICAgICAg ICAgICAgICAgKQorICAgIEMoMCwgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICBDKDEsICAgICBzbGlkZShp ZHgsIHBvcywgcHJvZ3Jlc3MsIGl2ZWMyKCsxLCAwKSk7ICAgICAgICAgICAgICAgICAgICAgICAg ICApCisgICAgQygwLCB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgdHJh bnNpdGlvbl9zbGlkZXJpZ2h0W10gPSB7CisgICAgU0hBREVSX1NMSURFX0NPTU1PTgorICAgIEMo MCwgdm9pZCB0cmFuc2l0aW9uKGludCBpZHgsIGl2ZWMyIHBvcywgZmxvYXQgcHJvZ3Jlc3MpICAg ICAgICAgICAgICAgICAgICkKKyAgICBDKDAsIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgQygxLCAgICAg c2xpZGUoaWR4LCBwb3MsIHByb2dyZXNzLCBpdmVjMigtMSwgMCkpOyAgICAgICAgICAgICAgICAg ICAgICAgICAgKQorICAgIEMoMCwgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKK307CisKKyNkZWZpbmUgU0hBREVS X0NJUkNMRV9DT01NT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKKyAgICBDKDAsIHZvaWQgY2lyY2xlKGludCBpZHgsIGl2ZWMyIHBvcywgZmxv YXQgcHJvZ3Jlc3MsIGJvb2wgb3BlbikgICAgICAgICAgICApIFwKKyAgICBDKDAsIHsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICApIFwKKyAgICBDKDEsICAgICBjb25zdCBpdmVjMiBoYWxmX3NpemUgPSBpbWFnZVNpemUo b3V0cHV0X2ltYWdlc1tpZHhdKSAvIDI7ICAgICAgICApIFwKKyAgICBDKDEsICAgICBjb25zdCBm bG9hdCB6ID0gZG90KGhhbGZfc2l6ZSwgaGFsZl9zaXplKTsgICAgICAgICAgICAgICAgICAgICAg ICApIFwKKyAgICBDKDEsICAgICBmbG9hdCBwID0gKChvcGVuID8gKDEuMCAtIHByb2dyZXNzKSA6 IHByb2dyZXNzKSAtIDAuNSkgKiAzLjA7ICAgICApIFwKKyAgICBDKDEsICAgICBpdmVjMiBkc2l6 ZSA9IHBvcyAtIGhhbGZfc2l6ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAp IFwKKyAgICBDKDEsICAgICBmbG9hdCBzbSA9IGRvdChkc2l6ZSwgZHNpemUpIC8geiArIHA7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICApIFwKKyAgICBDKDEsICAgICB2ZWM0IGEgPSB0ZXh0 dXJlKGFfaW1hZ2VzW2lkeF0sIHBvcyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIFwK KyAgICBDKDEsICAgICB2ZWM0IGIgPSB0ZXh0dXJlKGJfaW1hZ2VzW2lkeF0sIHBvcyk7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICApIFwKKyAgICBDKDEsICAgICBpbWFnZVN0b3JlKG91dHB1 dF9pbWFnZXNbaWR4XSwgcG9zLCBcCisgICAgICAgICAgICAgICAgICAgICAgICBtaXgob3BlbiA/ IGIgOiBhLCBvcGVuID8gYSA6IGIsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbW9v dGhzdGVwKDAuZiwgMS5mLCBzbSkpKTsgICAgICAgICAgICAgICAgICAgICAgICApIFwKKyAgICBD KDAsIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICApCisKK3N0YXRpYyBjb25zdCBjaGFyIHRyYW5zaXRpb25fY2lyY2xl b3BlbltdID0geworICAgIFNIQURFUl9DSVJDTEVfQ09NTU9OCisgICAgQygwLCB2b2lkIHRyYW5z aXRpb24oaW50IGlkeCwgaXZlYzIgcG9zLCBmbG9hdCBwcm9ncmVzcykgICAgICAgICAgICAgICAg ICAgKQorICAgIEMoMCwgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICBDKDEsICAgICBjaXJjbGUoaWR4LCBw b3MsIHByb2dyZXNzLCB0cnVlKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisg ICAgQygwLCB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKQorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgdHJhbnNpdGlv bl9jaXJjbGVjbG9zZVtdID0geworICAgIFNIQURFUl9DSVJDTEVfQ09NTU9OCisgICAgQygwLCB2 b2lkIHRyYW5zaXRpb24oaW50IGlkeCwgaXZlYzIgcG9zLCBmbG9hdCBwcm9ncmVzcykgICAgICAg ICAgICAgICAgICAgKQorICAgIEMoMCwgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICBDKDEsICAgICBjaXJj bGUoaWR4LCBwb3MsIHByb2dyZXNzLCBmYWxzZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICApCisgICAgQygwLCB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorfTsKKworI2RlZmluZSBTSEFERVJfRlJB TkRfRlVOQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAorICAgIEMoMCwgZmxvYXQgZnJhbmQodmVjMiB2KSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgXAorICAgIEMoMCwgeyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICkgXAorICAgIEMoMSwgICAgIHJldHVybiBmcmFjdChzaW4oZG90KHYsIHZlYzIoMTIuOTg5OCwg NzguMjMzKSkpICogNDM3NTguNTQ1KTsgICAgICkgXAorICAgIEMoMCwgfSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkK Kworc3RhdGljIGNvbnN0IGNoYXIgdHJhbnNpdGlvbl9kaXNzb2x2ZVtdID0geworICAgIFNIQURF Ul9GUkFORF9GVU5DCisgICAgQygwLCB2b2lkIHRyYW5zaXRpb24oaW50IGlkeCwgaXZlYzIgcG9z LCBmbG9hdCBwcm9ncmVzcykgICAgICAgICAgICAgICAgICAgKQorICAgIEMoMCwgeyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICkKKyAgICBDKDEsICAgICBmbG9hdCBzbSA9IGZyYW5kKHBvcykgKiAyLjAgKyAoMS4wIC0g cHJvZ3Jlc3MpICogMi4wIC0gMS41OyAgICAgICApCisgICAgQygxLCAgICAgdmVjNCBhID0gdGV4 dHVyZShhX2ltYWdlc1tpZHhdLCBwb3MpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQor ICAgIEMoMSwgICAgIHZlYzQgYiA9IHRleHR1cmUoYl9pbWFnZXNbaWR4XSwgcG9zKTsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICkKKyAgICBDKDEsICAgICBpbWFnZVN0b3JlKG91dHB1dF9p bWFnZXNbaWR4XSwgcG9zLCBzbSA+PSAwLjUgPyBhIDogYik7ICAgICAgICAgICApCisgICAgQygw LCB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKQorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgdHJhbnNpdGlvbl9waXhl bGl6ZVtdID0geworICAgIEMoMCwgdm9pZCB0cmFuc2l0aW9uKGludCBpZHgsIGl2ZWMyIHBvcywg ZmxvYXQgcHJvZ3Jlc3MpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICBD KDAsIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgQygxLCAgICAgaXZlYzIgc2l6 ZSA9IGltYWdlU2l6ZShvdXRwdXRfaW1hZ2VzW2lkeF0pOyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKQorICAgIEMoMSwgICAgIGZsb2F0IGQgPSBtaW4ocHJvZ3Jlc3MsIDEu MCAtIHByb2dyZXNzKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkK KyAgICBDKDEsICAgICBmbG9hdCBkaXN0ID0gY2VpbChkICogNTAuMCkgLyA1MC4wOyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgQygxLCAgICAgZmxv YXQgc3EgPSAyLjAgKiBkaXN0ICogbWluKHNpemUueCwgc2l6ZS55KSAvIDIwLjA7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKQorICAgIEMoMSwgICAgIGZsb2F0IHN4ID0gZGlzdCA+IDAu MCA/IG1pbigoZmxvb3IocG9zLnggLyBzcSkgKyAwLjUpICogc3EsIHNpemUueCAtIDEpIDogcG9z Lng7ICkKKyAgICBDKDEsICAgICBmbG9hdCBzeSA9IGRpc3QgPiAwLjAgPyBtaW4oKGZsb29yKHBv cy55IC8gc3EpICsgMC41KSAqIHNxLCBzaXplLnkgLSAxKSA6IHBvcy55OyApCisgICAgQygxLCAg ICAgdmVjNCBhID0gdGV4dHVyZShhX2ltYWdlc1tpZHhdLCB2ZWMyKHN4LCBzeSkpOyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgIEMoMSwgICAgIHZlYzQgYiA9IHRleHR1 cmUoYl9pbWFnZXNbaWR4XSwgdmVjMihzeCwgc3kpKTsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICkKKyAgICBDKDEsICAgICBpbWFnZVN0b3JlKG91dHB1dF9pbWFnZXNbaWR4XSwg cG9zLCBtaXgoYSwgYiwgcHJvZ3Jlc3MpKTsgICAgICAgICAgICAgICAgICAgICAgICApCisgICAg QygwLCB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorfTsKKworc3RhdGljIGNvbnN0IGNo YXIgdHJhbnNpdGlvbl93aXBldGxbXSA9IHsKKyAgICBDKDAsIHZvaWQgdHJhbnNpdGlvbihpbnQg aWR4LCBpdmVjMiBwb3MsIGZsb2F0IHByb2dyZXNzKSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICApCisgICAgQygwLCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgIEMo MSwgICAgIGl2ZWMyIHNpemUgPSBpbWFnZVNpemUob3V0cHV0X2ltYWdlc1tpZHhdKTsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICBDKDEsICAgICBmbG9hdCB6dyA9 IHNpemUueCAqICgxLjAgLSBwcm9ncmVzcyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICApCisgICAgQygxLCAgICAgZmxvYXQgemggPSBzaXplLnkgKiAoMS4wIC0g cHJvZ3Jlc3MpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQor ICAgIEMoMSwgICAgIHZlYzQgYSA9IHRleHR1cmUoYV9pbWFnZXNbaWR4XSwgcG9zKTsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICBDKDEsICAgICB2ZWM0 IGIgPSB0ZXh0dXJlKGJfaW1hZ2VzW2lkeF0sIHBvcyk7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICApCisgICAgQygxLCAgICAgaW1hZ2VTdG9yZShvdXRwdXRfaW1h Z2VzW2lkeF0sIHBvcywgKHBvcy55IDw9IHpoICYmIHBvcy54IDw9IHp3KSA/IGEgOiBiKTsgICAg ICAgKQorICAgIEMoMCwgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKK307CisKK3N0YXRp YyBjb25zdCBjaGFyIHRyYW5zaXRpb25fd2lwZXRyW10gPSB7CisgICAgQygwLCB2b2lkIHRyYW5z aXRpb24oaW50IGlkeCwgaXZlYzIgcG9zLCBmbG9hdCBwcm9ncmVzcykgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKQorICAgIEMoMCwgeyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICkKKyAgICBDKDEsICAgICBpdmVjMiBzaXplID0gaW1hZ2VTaXplKG91dHB1dF9pbWFnZXNbaWR4 XSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgQygxLCAgICAg ZmxvYXQgencgPSBzaXplLnggKiAocHJvZ3Jlc3MpOyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgIEMoMSwgICAgIGZsb2F0IHpoID0gc2l6ZS55 ICogKDEuMCAtIHByb2dyZXNzKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICkKKyAgICBDKDEsICAgICB2ZWM0IGEgPSB0ZXh0dXJlKGFfaW1hZ2VzW2lkeF0sIHBv cyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgQygx LCAgICAgdmVjNCBiID0gdGV4dHVyZShiX2ltYWdlc1tpZHhdLCBwb3MpOyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgIEMoMSwgICAgIGltYWdlU3RvcmUo b3V0cHV0X2ltYWdlc1tpZHhdLCBwb3MsIChwb3MueSA8PSB6aCAmJiBwb3MueCA+IHp3KSA/IGEg OiBiKTsgICAgICAgICkKKyAgICBDKDAsIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCit9 OworCitzdGF0aWMgY29uc3QgY2hhciB0cmFuc2l0aW9uX3dpcGVibFtdID0geworICAgIEMoMCwg dm9pZCB0cmFuc2l0aW9uKGludCBpZHgsIGl2ZWMyIHBvcywgZmxvYXQgcHJvZ3Jlc3MpICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICBDKDAsIHsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICApCisgICAgQygxLCAgICAgaXZlYzIgc2l6ZSA9IGltYWdlU2l6ZShvdXRwdXRf aW1hZ2VzW2lkeF0pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorICAg IEMoMSwgICAgIGZsb2F0IHp3ID0gc2l6ZS54ICogKDEuMCAtIHByb2dyZXNzKTsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICBDKDEsICAgICBmbG9hdCB6 aCA9IHNpemUueSAqIChwcm9ncmVzcyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICApCisgICAgQygxLCAgICAgdmVjNCBhID0gdGV4dHVyZShhX2ltYWdl c1tpZHhdLCBwb3MpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KQorICAgIEMoMSwgICAgIHZlYzQgYiA9IHRleHR1cmUoYl9pbWFnZXNbaWR4XSwgcG9zKTsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICBDKDEsICAgICBp bWFnZVN0b3JlKG91dHB1dF9pbWFnZXNbaWR4XSwgcG9zLCAocG9zLnkgPiB6aCAmJiBwb3MueCA8 PSB6dykgPyBhIDogYik7ICAgICAgICApCisgICAgQygwLCB9ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKQorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgdHJhbnNpdGlvbl93aXBlYnJbXSA9IHsK KyAgICBDKDAsIHZvaWQgdHJhbnNpdGlvbihpbnQgaWR4LCBpdmVjMiBwb3MsIGZsb2F0IHByb2dy ZXNzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgQygwLCB7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKQorICAgIEMoMSwgICAgIGl2ZWMyIHNpemUgPSBpbWFnZVNp emUob3V0cHV0X2ltYWdlc1tpZHhdKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICkKKyAgICBDKDEsICAgICBmbG9hdCB6dyA9IHNpemUueCAqIChwcm9ncmVzcyk7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgQygxLCAg ICAgZmxvYXQgemggPSBzaXplLnkgKiAocHJvZ3Jlc3MpOyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgIEMoMSwgICAgIHZlYzQgYSA9IHRleHR1 cmUoYV9pbWFnZXNbaWR4XSwgcG9zKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICkKKyAgICBDKDEsICAgICB2ZWM0IGIgPSB0ZXh0dXJlKGJfaW1hZ2VzW2lkeF0s IHBvcyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAg QygxLCAgICAgaW1hZ2VTdG9yZShvdXRwdXRfaW1hZ2VzW2lkeF0sIHBvcywgKHBvcy55ID4gemgg JiYgcG9zLnggPiB6dykgPyBhIDogYik7ICAgICAgICAgKQorICAgIEMoMCwgfSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICkKK307CisKK3N0YXRpYyBjb25zdCBjaGFyKiB0cmFuc2l0aW9uc19t YXBbTkJfVFJBTlNJVElPTlNdID0geworICAgIFtGQURFXSAgICAgICAgICA9IHRyYW5zaXRpb25f ZmFkZSwKKyAgICBbV0lQRUxFRlRdICAgICAgPSB0cmFuc2l0aW9uX3dpcGVsZWZ0LAorICAgIFtX SVBFUklHSFRdICAgICA9IHRyYW5zaXRpb25fd2lwZXJpZ2h0LAorICAgIFtXSVBFVVBdICAgICAg ICA9IHRyYW5zaXRpb25fd2lwZXVwLAorICAgIFtXSVBFRE9XTl0gICAgICA9IHRyYW5zaXRpb25f d2lwZWRvd24sCisgICAgW1NMSURFRE9XTl0gICAgID0gdHJhbnNpdGlvbl9zbGlkZWRvd24sCisg ICAgW1NMSURFVVBdICAgICAgID0gdHJhbnNpdGlvbl9zbGlkZXVwLAorICAgIFtTTElERUxFRlRd ICAgICA9IHRyYW5zaXRpb25fc2xpZGVsZWZ0LAorICAgIFtTTElERVJJR0hUXSAgICA9IHRyYW5z aXRpb25fc2xpZGVyaWdodCwKKyAgICBbQ0lSQ0xFT1BFTl0gICAgPSB0cmFuc2l0aW9uX2NpcmNs ZW9wZW4sCisgICAgW0NJUkNMRUNMT1NFXSAgID0gdHJhbnNpdGlvbl9jaXJjbGVjbG9zZSwKKyAg ICBbRElTU09MVkVdICAgICAgPSB0cmFuc2l0aW9uX2Rpc3NvbHZlLAorICAgIFtQSVhFTElaRV0g ICAgICA9IHRyYW5zaXRpb25fcGl4ZWxpemUsCisgICAgW1dJUEVUTF0gICAgICAgID0gdHJhbnNp dGlvbl93aXBldGwsCisgICAgW1dJUEVUUl0gICAgICAgID0gdHJhbnNpdGlvbl93aXBldHIsCisg ICAgW1dJUEVCTF0gICAgICAgID0gdHJhbnNpdGlvbl93aXBlYmwsCisgICAgW1dJUEVCUl0gICAg ICAgID0gdHJhbnNpdGlvbl93aXBlYnIsCit9OworCitzdGF0aWMgYXZfY29sZCBpbnQgaW5pdF92 dWxrYW4oQVZGaWx0ZXJDb250ZXh0ICphdmN0eCkKK3sKKyAgICBpbnQgZXJyID0gMDsKKyAgICB1 aW50OF90ICpzcHZfZGF0YTsKKyAgICBzaXplX3Qgc3B2X2xlbjsKKyAgICB2b2lkICpzcHZfb3Bh cXVlID0gTlVMTDsKKyAgICBYRmFkZVZ1bGthbkNvbnRleHQgKnMgPSBhdmN0eC0+cHJpdjsKKyAg ICBGRlZ1bGthbkNvbnRleHQgKnZrY3R4ID0gJnMtPnZrY3R4OworICAgIGNvbnN0IGludCBwbGFu ZXMgPSBhdl9waXhfZm10X2NvdW50X3BsYW5lcyhzLT52a2N0eC5vdXRwdXRfZm9ybWF0KTsKKyAg ICBGRlZ1bGthblNoYWRlciAqc2hkID0gJnMtPnNoZDsKKyAgICBGRlZrU1BJUlZDb21waWxlciAq c3B2OworICAgIEZGVnVsa2FuRGVzY3JpcHRvclNldEJpbmRpbmcgKmRlc2M7CisKKyAgICBzcHYg PSBmZl92a19zcGlydl9pbml0KCk7CisgICAgaWYgKCFzcHYpIHsKKyAgICAgICAgYXZfbG9nKGF2 Y3R4LCBBVl9MT0dfRVJST1IsICJVbmFibGUgdG8gaW5pdGlhbGl6ZSBTUElSLVYgY29tcGlsZXIh XG4iKTsKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfRVhURVJOQUw7CisgICAgfQorCisgICAgcy0+ cWYgPSBmZl92a19xZl9maW5kKHZrY3R4LCBWS19RVUVVRV9DT01QVVRFX0JJVCwgMCk7CisgICAg aWYgKCFzLT5xZikgeworICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkRldmlj ZSBoYXMgbm8gY29tcHV0ZSBxdWV1ZXNcbiIpOworICAgICAgICBlcnIgPSBBVkVSUk9SKEVOT1RT VVApOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgUkVUKGZmX3ZrX2V4ZWNfcG9v bF9pbml0KHZrY3R4LCBzLT5xZiwgJnMtPmUsIHMtPnFmLT5udW0qNCwgMCwgMCwgMCwgTlVMTCkp OworICAgIFJFVChmZl92a19pbml0X3NhbXBsZXIodmtjdHgsICZzLT5zYW1wbGVyLCAxLCBWS19G SUxURVJfTkVBUkVTVCkpOworICAgIFJFVChmZl92a19zaGFkZXJfaW5pdCh2a2N0eCwgJnMtPnNo ZCwgInhmYWRlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgVktfU0hBREVSX1NUQUdFX0NP TVBVVEVfQklULAorICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAzMiwgMzIsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDAp KTsKKworICAgIGRlc2MgPSAoRkZWdWxrYW5EZXNjcmlwdG9yU2V0QmluZGluZyBbXSkgeworICAg ICAgICB7CisgICAgICAgICAgICAubmFtZSAgICAgICA9ICJhX2ltYWdlcyIsCisgICAgICAgICAg ICAudHlwZSAgICAgICA9IFZLX0RFU0NSSVBUT1JfVFlQRV9DT01CSU5FRF9JTUFHRV9TQU1QTEVS LAorICAgICAgICAgICAgLmRpbWVuc2lvbnMgPSAyLAorICAgICAgICAgICAgLmVsZW1zICAgICAg PSBwbGFuZXMsCisgICAgICAgICAgICAuc3RhZ2VzICAgICA9IFZLX1NIQURFUl9TVEFHRV9DT01Q VVRFX0JJVCwKKyAgICAgICAgICAgIC5zYW1wbGVycyAgID0gRFVQX1NBTVBMRVIocy0+c2FtcGxl ciksCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgIC5uYW1lICAgICAgID0gImJf aW1hZ2VzIiwKKyAgICAgICAgICAgIC50eXBlICAgICAgID0gVktfREVTQ1JJUFRPUl9UWVBFX0NP TUJJTkVEX0lNQUdFX1NBTVBMRVIsCisgICAgICAgICAgICAuZGltZW5zaW9ucyA9IDIsCisgICAg ICAgICAgICAuZWxlbXMgICAgICA9IHBsYW5lcywKKyAgICAgICAgICAgIC5zdGFnZXMgICAgID0g VktfU0hBREVSX1NUQUdFX0NPTVBVVEVfQklULAorICAgICAgICAgICAgLnNhbXBsZXJzICAgPSBE VVBfU0FNUExFUihzLT5zYW1wbGVyKSwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAg ICAgLm5hbWUgICAgICAgPSAib3V0cHV0X2ltYWdlcyIsCisgICAgICAgICAgICAudHlwZSAgICAg ICA9IFZLX0RFU0NSSVBUT1JfVFlQRV9TVE9SQUdFX0lNQUdFLAorICAgICAgICAgICAgLm1lbV9s YXlvdXQgPSBmZl92a19zaGFkZXJfcmVwX2ZtdChzLT52a2N0eC5vdXRwdXRfZm9ybWF0LCBGRl9W S19SRVBfRkxPQVQpLAorICAgICAgICAgICAgLm1lbV9xdWFsaSAgPSAid3JpdGVvbmx5IiwKKyAg ICAgICAgICAgIC5kaW1lbnNpb25zID0gMiwKKyAgICAgICAgICAgIC5lbGVtcyAgICAgID0gcGxh bmVzLAorICAgICAgICAgICAgLnN0YWdlcyAgICAgPSBWS19TSEFERVJfU1RBR0VfQ09NUFVURV9C SVQsCisgICAgICAgIH0sCisgICAgfTsKKworICAgIFJFVChmZl92a19zaGFkZXJfYWRkX2Rlc2Ny aXB0b3Jfc2V0KHZrY3R4LCAmcy0+c2hkLCBkZXNjLCAzLCAwLCAwKSk7CisKKyAgICBHTFNMQygw LCBsYXlvdXQocHVzaF9jb25zdGFudCwgc3RkNDMwKSB1bmlmb3JtIHB1c2hDb25zdGFudHMgeyAg ICAgICAgICAgICAgICAgKTsKKyAgICBHTFNMQygxLCAgICBmbG9hdCBwcm9ncmVzczsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBHTFNM QygwLCB9OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKTsKKworICAgIGZmX3ZrX3NoYWRlcl9hZGRfcHVzaF9jb25zdCgm cy0+c2hkLCAwLCBzaXplb2YoWEZhZGVQYXJhbWV0ZXJzKSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgVktfU0hBREVSX1NUQUdFX0NPTVBVVEVfQklUKTsKKworICAgIC8vIEFkZCB0 aGUgcmlnaHQgdHJhbnNpdGlvbiB0eXBlIGZ1bmN0aW9uIHRvIHRoZSBzaGFkZXIKKyAgICBHTFNM RCh0cmFuc2l0aW9uc19tYXBbcy0+dHJhbnNpdGlvbl0pOworCisgICAgR0xTTEMoMCwgdm9pZCBt YWluKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7 CisgICAgR0xTTEMoMCwgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICk7CisgICAgR0xTTEMoMSwgICAgIGl2ZWMyIHBvcyA9IGl2ZWMy KGdsX0dsb2JhbEludm9jYXRpb25JRC54eSk7ICAgICAgICAgICAgICk7CisgICAgR0xTTEYoMSwg ICAgIGludCBwbGFuZXMgPSAlaTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLHBs YW5lcyk7CisgICAgR0xTTEMoMSwgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcGxhbmVzOyBpKysp IHsgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgR0xTTEMoMiwgICAgICAgIHRyYW5zaXRp b24oaSwgcG9zLCBwcm9ncmVzcyk7ICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgR0xT TEMoMSwgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICk7CisgICAgR0xTTEMoMCwgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisKKyAgICBSRVQoc3B2LT5jb21waWxl X3NoYWRlcih2a2N0eCwgc3B2LCBzaGQsICZzcHZfZGF0YSwgJnNwdl9sZW4sICJtYWluIiwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAmc3B2X29wYXF1ZSkpOworICAgIFJFVChmZl92a19z aGFkZXJfbGluayh2a2N0eCwgc2hkLCBzcHZfZGF0YSwgc3B2X2xlbiwgIm1haW4iKSk7CisKKyAg ICBSRVQoZmZfdmtfc2hhZGVyX3JlZ2lzdGVyX2V4ZWModmtjdHgsICZzLT5lLCAmcy0+c2hkKSk7 CisKKyAgICBzLT5pbml0aWFsaXplZCA9IDE7CisKK2ZhaWw6CisgICAgaWYgKHNwdl9vcGFxdWUp CisgICAgICAgIHNwdi0+ZnJlZV9zaGFkZXIoc3B2LCAmc3B2X29wYXF1ZSk7CisgICAgaWYgKHNw dikKKyAgICAgICAgc3B2LT51bmluaXQoJnNwdik7CisKKyAgICByZXR1cm4gZXJyOworfQorCitz dGF0aWMgaW50IHhmYWRlX2ZyYW1lKEFWRmlsdGVyQ29udGV4dCAqYXZjdHgsIEFWRnJhbWUgKmZy YW1lX2EsIEFWRnJhbWUgKmZyYW1lX2IpCit7CisgICAgaW50IGVycjsKKyAgICBBVkZpbHRlckxp bmsgKm91dGxpbmsgPSBhdmN0eC0+b3V0cHV0c1swXTsKKyAgICBYRmFkZVZ1bGthbkNvbnRleHQg KnMgPSBhdmN0eC0+cHJpdjsKKyAgICBmbG9hdCBwcm9ncmVzczsKKworICAgIEFWRnJhbWUgKm91 dHB1dCA9IGZmX2dldF92aWRlb19idWZmZXIob3V0bGluaywgb3V0bGluay0+dywgb3V0bGluay0+ aCk7CisgICAgaWYgKCFvdXRwdXQpIHsKKyAgICAgICAgZXJyID0gQVZFUlJPUihFTk9NRU0pOwor ICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgaWYgKCFzLT5pbml0aWFsaXplZCkgewor ICAgICAgICBBVkhXRnJhbWVzQ29udGV4dCAqYV9mYyA9IChBVkhXRnJhbWVzQ29udGV4dCopZnJh bWVfYS0+aHdfZnJhbWVzX2N0eC0+ZGF0YTsKKyAgICAgICAgQVZIV0ZyYW1lc0NvbnRleHQgKmJf ZmMgPSAoQVZIV0ZyYW1lc0NvbnRleHQqKWZyYW1lX2ItPmh3X2ZyYW1lc19jdHgtPmRhdGE7Cisg ICAgICAgIGlmIChhX2ZjLT5zd19mb3JtYXQgIT0gYl9mYy0+c3dfZm9ybWF0KSB7CisgICAgICAg ICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwKKyAgICAgICAgICAgICAgICAgICAiQ3Vy cmVudGx5IHRoZSBzdyBmb3JtYXQgb2YgdGhlIGZpcnN0IGlucHV0IG5lZWRzIHRvIG1hdGNoIHRo ZSBzZWNvbmQhXG4iKTsKKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7CisgICAg ICAgIH0KKyAgICAgICAgUkVUKGluaXRfdnVsa2FuKGF2Y3R4KSk7CisgICAgfQorCisgICAgUkVU KGF2X2ZyYW1lX2NvcHlfcHJvcHMob3V0cHV0LCBmcmFtZV9hKSk7CisgICAgb3V0cHV0LT5wdHMg PSBzLT5wdHM7CisKKyAgICBwcm9ncmVzcyA9IGF2X2NsaXBmKChmbG9hdCkocy0+cHRzIC0gcy0+ c3RhcnRfcHRzKSAvIHMtPmR1cmF0aW9uX3B0cywKKyAgICAgICAgICAgICAgICAgICAgICAgIDAu ZiwgMS5mKTsKKworICAgIFJFVChmZl92a19maWx0ZXJfcHJvY2Vzc19OaW4oJnMtPnZrY3R4LCAm cy0+ZSwgJnMtPnNoZCwgb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KEFWRnJhbWUgKltdKXsgZnJhbWVfYSwgZnJhbWVfYiB9LCAyLCBzLT5zYW1wbGVyLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJihYRmFkZVBhcmFtZXRlcnMpeyBwcm9ncmVzcyB9 LCBzaXplb2YoWEZhZGVQYXJhbWV0ZXJzKSkpOworCisgICAgcmV0dXJuIGZmX2ZpbHRlcl9mcmFt ZShvdXRsaW5rLCBvdXRwdXQpOworCitmYWlsOgorICAgIGF2X2ZyYW1lX2ZyZWUoJm91dHB1dCk7 CisgICAgcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBjb25maWdfcHJvcHNfb3V0cHV0KEFW RmlsdGVyTGluayAqb3V0bGluaykKK3sKKyAgICBpbnQgZXJyOworICAgIEFWRmlsdGVyQ29udGV4 dCAqYXZjdHggPSBvdXRsaW5rLT5zcmM7CisgICAgWEZhZGVWdWxrYW5Db250ZXh0ICpzID0gYXZj dHgtPnByaXY7CisgICAgQVZGaWx0ZXJMaW5rICppbmxpbmtfYSA9IGF2Y3R4LT5pbnB1dHNbSU5f QV07CisgICAgQVZGaWx0ZXJMaW5rICppbmxpbmtfYiA9IGF2Y3R4LT5pbnB1dHNbSU5fQl07Cisg ICAgRmlsdGVyTGluayAqaWwgPSBmZl9maWx0ZXJfbGluayhpbmxpbmtfYSk7CisgICAgRmlsdGVy TGluayAqb2wgPSBmZl9maWx0ZXJfbGluayhvdXRsaW5rKTsKKworICAgIGlmIChpbmxpbmtfYS0+ dyAhPSBpbmxpbmtfYi0+dyB8fCBpbmxpbmtfYS0+aCAhPSBpbmxpbmtfYi0+aCkgeworICAgICAg ICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkZpcnN0IGlucHV0IGxpbmsgJXMgcGFyYW1l dGVycyAiCisgICAgICAgICAgICAgICAiKHNpemUgJWR4JWQpIGRvIG5vdCBtYXRjaCB0aGUgY29y cmVzcG9uZGluZyAiCisgICAgICAgICAgICAgICAic2Vjb25kIGlucHV0IGxpbmsgJXMgcGFyYW1l dGVycyAoc2l6ZSAlZHglZClcbiIsCisgICAgICAgICAgICAgICBhdmN0eC0+aW5wdXRfcGFkc1tJ Tl9BXS5uYW1lLCBpbmxpbmtfYS0+dywgaW5saW5rX2EtPmgsCisgICAgICAgICAgICAgICBhdmN0 eC0+aW5wdXRfcGFkc1tJTl9CXS5uYW1lLCBpbmxpbmtfYi0+dywgaW5saW5rX2ItPmgpOworICAg ICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOworICAgIH0KKworICAgIGlmIChpbmxpbmtfYS0+ dGltZV9iYXNlLm51bSAhPSBpbmxpbmtfYi0+dGltZV9iYXNlLm51bSB8fAorICAgICAgICBpbmxp bmtfYS0+dGltZV9iYXNlLmRlbiAhPSBpbmxpbmtfYi0+dGltZV9iYXNlLmRlbikgeworICAgICAg ICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkZpcnN0IGlucHV0IGxpbmsgJXMgdGltZWJh c2UgIgorICAgICAgICAgICAgICAgIiglZC8lZCkgZG9lcyBub3QgbWF0Y2ggdGhlIGNvcnJlc3Bv bmRpbmcgIgorICAgICAgICAgICAgICAgInNlY29uZCBpbnB1dCBsaW5rICVzIHRpbWViYXNlICgl ZC8lZClcbiIsCisgICAgICAgICAgICAgICBhdmN0eC0+aW5wdXRfcGFkc1tJTl9BXS5uYW1lLCBp bmxpbmtfYS0+dGltZV9iYXNlLm51bSwgaW5saW5rX2EtPnRpbWVfYmFzZS5kZW4sCisgICAgICAg ICAgICAgICBhdmN0eC0+aW5wdXRfcGFkc1tJTl9CXS5uYW1lLCBpbmxpbmtfYi0+dGltZV9iYXNl Lm51bSwgaW5saW5rX2ItPnRpbWVfYmFzZS5kZW4pOworICAgICAgICByZXR1cm4gQVZFUlJPUihF SU5WQUwpOworICAgIH0KKworICAgIHMtPnN0YXJ0X3B0cyA9IHMtPmlucHV0c19vZmZzZXRfcHRz ID0gQVZfTk9QVFNfVkFMVUU7CisKKyAgICBvdXRsaW5rLT50aW1lX2Jhc2UgPSBpbmxpbmtfYS0+ dGltZV9iYXNlOworICAgIG9sLT5mcmFtZV9yYXRlID0gaWwtPmZyYW1lX3JhdGU7CisgICAgb3V0 bGluay0+c2FtcGxlX2FzcGVjdF9yYXRpbyA9IGlubGlua19hLT5zYW1wbGVfYXNwZWN0X3JhdGlv OworCisgICAgaWYgKHMtPmR1cmF0aW9uKQorICAgICAgICBzLT5kdXJhdGlvbl9wdHMgPSBhdl9y ZXNjYWxlX3Eocy0+ZHVyYXRpb24sIEFWX1RJTUVfQkFTRV9RLCBpbmxpbmtfYS0+dGltZV9iYXNl KTsKKyAgICBSRVQoZmZfdmtfZmlsdGVyX2NvbmZpZ19vdXRwdXQob3V0bGluaykpOworCitmYWls OgorICAgIHJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgZm9yd2FyZF9mcmFtZShYRmFkZVZ1 bGthbkNvbnRleHQgKnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgQVZGaWx0ZXJMaW5rICpp bmxpbmssIEFWRmlsdGVyTGluayAqb3V0bGluaykKK3sKKyAgICBpbnQ2NF90IHN0YXR1c19wdHM7 CisgICAgaW50IHJldCA9IDAsIHN0YXR1czsKKyAgICBBVkZyYW1lICpmcmFtZSA9IE5VTEw7CisK KyAgICByZXQgPSBmZl9pbmxpbmtfY29uc3VtZV9mcmFtZShpbmxpbmssICZmcmFtZSk7CisgICAg aWYgKHJldCA8IDApCisgICAgICAgIHJldHVybiByZXQ7CisKKyAgICBpZiAocmV0ID4gMCkgewor ICAgICAgICAvLyBJZiB3ZSBkbyBub3QgaGF2ZSBhbiBvZmZzZXQgeWV0LCBpdCdzIGJlY2F1c2Ug d2UKKyAgICAgICAgLy8gbmV2ZXIgZ290IGEgZmlyc3QgaW5wdXQuIEp1c3Qgb2Zmc2V0IHRvIDAK KyAgICAgICAgaWYgKHMtPmlucHV0c19vZmZzZXRfcHRzID09IEFWX05PUFRTX1ZBTFVFKQorICAg ICAgICAgICAgcy0+aW5wdXRzX29mZnNldF9wdHMgPSAtZnJhbWUtPnB0czsKKworICAgICAgICAv LyBXZSBnb3QgYSBmcmFtZSwgbm90aGluZyB0byBkbyBvdGhlciB0aGFuIGFkanVzdGluZyB0aGUg dGltZXN0YW1wCisgICAgICAgIGZyYW1lLT5wdHMgKz0gcy0+aW5wdXRzX29mZnNldF9wdHM7Cisg ICAgICAgIHJldHVybiBmZl9maWx0ZXJfZnJhbWUob3V0bGluaywgZnJhbWUpOworICAgIH0KKwor ICAgIC8vIEZvcndhcmQgc3RhdHVzIHdpdGggb3VyIHRpbWVzdGFtcAorICAgIGlmIChmZl9pbmxp bmtfYWNrbm93bGVkZ2Vfc3RhdHVzKGlubGluaywgJnN0YXR1cywgJnN0YXR1c19wdHMpKSB7Cisg ICAgICAgIGlmIChzLT5pbnB1dHNfb2Zmc2V0X3B0cyA9PSBBVl9OT1BUU19WQUxVRSkKKyAgICAg ICAgICAgIHMtPmlucHV0c19vZmZzZXRfcHRzID0gLXN0YXR1c19wdHM7CisKKyAgICAgICAgZmZf b3V0bGlua19zZXRfc3RhdHVzKG91dGxpbmssIHN0YXR1cywgc3RhdHVzX3B0cyArIHMtPmlucHV0 c19vZmZzZXRfcHRzKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgLy8gTm8gZnJh bWUgYXZhaWxhYmxlLCByZXF1ZXN0IG9uZSBpZiBuZWVkZWQKKyAgICBpZiAoZmZfb3V0bGlua19m cmFtZV93YW50ZWQob3V0bGluaykpCisgICAgICAgIGZmX2lubGlua19yZXF1ZXN0X2ZyYW1lKGlu bGluayk7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhY3RpdmF0ZShBVkZpbHRl ckNvbnRleHQgKmF2Y3R4KQoreworICAgIFhGYWRlVnVsa2FuQ29udGV4dCAqcyA9IGF2Y3R4LT5w cml2OworICAgIEFWRmlsdGVyTGluayAqaW5fYSA9IGF2Y3R4LT5pbnB1dHNbSU5fQV07CisgICAg QVZGaWx0ZXJMaW5rICppbl9iID0gYXZjdHgtPmlucHV0c1tJTl9CXTsKKyAgICBBVkZpbHRlckxp bmsgKm91dGxpbmsgPSBhdmN0eC0+b3V0cHV0c1swXTsKKyAgICBpbnQ2NF90IHN0YXR1c19wdHM7 CisKKyAgICBGRl9GSUxURVJfRk9SV0FSRF9TVEFUVVNfQkFDS19BTEwob3V0bGluaywgYXZjdHgp OworCisgICAgLy8gQ2hlY2sgaWYgd2UgYWxyZWFkeSB0cmFuc2l0aW9uZWQgb3IgSU5fQSBlbmRl ZCBwcmVtYXR1cmVseSwKKyAgICAvLyBpbiB3aGljaCBjYXNlIGp1c3QgZm9yd2FyZCB0aGUgZnJh bWVzIGZyb20gSU5fQiB3aXRoIGFkanVzdGVkCisgICAgLy8gdGltZXN0YW1wcyB1bnRpbCBFT0Yu CisgICAgaWYgKHMtPnN0YXR1c1tJTl9BXSAmJiAhcy0+c3RhdHVzW0lOX0JdKQorICAgICAgICBy ZXR1cm4gZm9yd2FyZF9mcmFtZShzLCBpbl9iLCBvdXRsaW5rKTsKKworICAgIC8vIFdlIGRpZCBu b3QgZmluaXNoIHRyYW5zaXRpb25pbmcgeWV0IGFuZCB0aGUgZmlyc3Qgc3RyZWFtCisgICAgLy8g ZGlkIG5vdCBlbmQgZWl0aGVyLCBzbyBjaGVjayBpZiB0aGVyZSBhcmUgbW9yZSBmcmFtZXMgdG8g Y29uc3VtZS4KKyAgICBpZiAoZmZfaW5saW5rX2NoZWNrX2F2YWlsYWJsZV9mcmFtZShpbl9hKSkg eworICAgICAgICBBVkZyYW1lICpwZWVrZWRfZnJhbWUgPSBmZl9pbmxpbmtfcGVla19mcmFtZShp bl9hLCAwKTsKKyAgICAgICAgcy0+cHRzID0gcGVla2VkX2ZyYW1lLT5wdHM7CisKKyAgICAgICAg aWYgKHMtPnN0YXJ0X3B0cyA9PSBBVl9OT1BUU19WQUxVRSkKKyAgICAgICAgICAgIHMtPnN0YXJ0 X3B0cyA9CisgICAgICAgICAgICAgICAgcy0+cHRzICsgYXZfcmVzY2FsZV9xKHMtPm9mZnNldCwg QVZfVElNRV9CQVNFX1EsIGluX2EtPnRpbWVfYmFzZSk7CisKKyAgICAgICAgLy8gQ2hlY2sgaWYg d2UgYXJlIG5vdCB5ZXQgdHJhbnNpdGlvbmluZywgaW4gd2hpY2ggY2FzZQorICAgICAgICAvLyBq dXN0IHJlcXVlc3QgYW5kIGZvcndhcmQgdGhlIGlucHV0IGZyYW1lLgorICAgICAgICBpZiAocy0+ c3RhcnRfcHRzID4gcy0+cHRzKSB7CisgICAgICAgICAgICBBVkZyYW1lICpmcmFtZV9hID0gTlVM TDsKKyAgICAgICAgICAgIHMtPnBhc3N0aHJvdWdoID0gMTsKKyAgICAgICAgICAgIGZmX2lubGlu a19jb25zdW1lX2ZyYW1lKGluX2EsICZmcmFtZV9hKTsKKyAgICAgICAgICAgIHJldHVybiBmZl9m aWx0ZXJfZnJhbWUob3V0bGluaywgZnJhbWVfYSk7CisgICAgICAgIH0KKyAgICAgICAgcy0+cGFz c3Rocm91Z2ggPSAwOworCisgICAgICAgIC8vIFdlIGFyZSB0cmFuc2l0aW9uaW5nLCBzbyB3ZSBu ZWVkIGEgZnJhbWUgZnJvbSBJTl9CCisgICAgICAgIGlmIChmZl9pbmxpbmtfY2hlY2tfYXZhaWxh YmxlX2ZyYW1lKGluX2IpKSB7CisgICAgICAgICAgICBpbnQgcmV0OworICAgICAgICAgICAgQVZG cmFtZSAqZnJhbWVfYSA9IE5VTEwsICpmcmFtZV9iID0gTlVMTDsKKyAgICAgICAgICAgIGZmX2lu bGlua19jb25zdW1lX2ZyYW1lKGF2Y3R4LT5pbnB1dHNbSU5fQV0sICZmcmFtZV9hKTsKKyAgICAg ICAgICAgIGZmX2lubGlua19jb25zdW1lX2ZyYW1lKGF2Y3R4LT5pbnB1dHNbSU5fQl0sICZmcmFt ZV9iKTsKKworICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIFBUUyBvZmZzZXQgdG8gZmlyc3QgaW5w dXQKKyAgICAgICAgICAgIGlmIChzLT5pbnB1dHNfb2Zmc2V0X3B0cyA9PSBBVl9OT1BUU19WQUxV RSkKKyAgICAgICAgICAgICAgICBzLT5pbnB1dHNfb2Zmc2V0X3B0cyA9IHMtPnB0cyAtIGZyYW1l X2ItPnB0czsKKworICAgICAgICAgICAgLy8gQ2hlY2sgaWYgd2UgZmluaXNoZWQgdHJhbnNpdGlv bmluZywgaW4gd2hpY2ggY2FzZSB3ZQorICAgICAgICAgICAgLy8gcmVwb3J0IGJhY2sgRU9GIHRv IElOX0EgYXMgaXQgaXMgbm8gbG9uZ2VyIG5lZWRlZC4KKyAgICAgICAgICAgIGlmIChzLT5wdHMg LSBzLT5zdGFydF9wdHMgPiBzLT5kdXJhdGlvbl9wdHMpIHsKKyAgICAgICAgICAgICAgICBzLT5z dGF0dXNbSU5fQV0gPSBBVkVSUk9SX0VPRjsKKyAgICAgICAgICAgICAgICBmZl9pbmxpbmtfc2V0 X3N0YXR1cyhpbl9hLCBBVkVSUk9SX0VPRik7CisgICAgICAgICAgICAgICAgcy0+cGFzc3Rocm91 Z2ggPSAxOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0ID0geGZhZGVfZnJhbWUoYXZj dHgsIGZyYW1lX2EsIGZyYW1lX2IpOworICAgICAgICAgICAgYXZfZnJhbWVfZnJlZSgmZnJhbWVf YSk7CisgICAgICAgICAgICBhdl9mcmFtZV9mcmVlKCZmcmFtZV9iKTsKKyAgICAgICAgICAgIHJl dHVybiByZXQ7CisgICAgICAgIH0KKworICAgICAgICAvLyBXZSBkaWQgbm90IGdldCBhIGZyYW1l IGZyb20gSU5fQiwgY2hlY2sgaXRzIHN0YXR1cy4KKyAgICAgICAgaWYgKGZmX2lubGlua19hY2tu b3dsZWRnZV9zdGF0dXMoaW5fYiwgJnMtPnN0YXR1c1tJTl9CXSwgJnN0YXR1c19wdHMpKSB7Cisg ICAgICAgICAgICAvLyBXZSBzaG91bGQgdHJhbnNpdGlvbiwgYnV0IElOX0IgaXMgRU9GIHNvIGp1 c3QgcmVwb3J0IEVPRiBvdXRwdXQgbm93LgorICAgICAgICAgICAgZmZfb3V0bGlua19zZXRfc3Rh dHVzKG91dGxpbmssIHMtPnN0YXR1c1tJTl9CXSwgcy0+cHRzKTsKKyAgICAgICAgICAgIHJldHVy biAwOworICAgICAgICB9CisKKyAgICAgICAgLy8gV2UgZGlkIG5vdCBnZXQgYSBmcmFtZSBmb3Ig SU5fQiBidXQgbm8gRU9GIGVpdGhlciwgc28ganVzdCByZXF1ZXN0IG1vcmUuCisgICAgICAgIGlm IChmZl9vdXRsaW5rX2ZyYW1lX3dhbnRlZChvdXRsaW5rKSkgeworICAgICAgICAgICAgZmZfaW5s aW5rX3JlcXVlc3RfZnJhbWUoaW5fYik7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAg fQorICAgIH0KKworICAgIC8vIFdlIGRpZCBub3QgZ2V0IGEgZnJhbWUgZnJvbSBJTl9BLCBjaGVj ayBpdHMgc3RhdHVzLgorICAgIGlmIChmZl9pbmxpbmtfYWNrbm93bGVkZ2Vfc3RhdHVzKGluX2Es ICZzLT5zdGF0dXNbSU5fQV0sICZzdGF0dXNfcHRzKSkgeworICAgICAgICAvLyBObyBtb3JlIGZy YW1lcyBmcm9tIElOX0EsIGRvIG5vdCByZXBvcnQgRU9GIHRob3VnaCwgd2Ugd2lsbCBqdXN0Cisg ICAgICAgIC8vIGZvcndhcmQgdGhlIElOX0IgZnJhbWVzIGluIHRoZSBuZXh0IGFjdGl2YXRlIGNh bGxzLgorICAgICAgICBzLT5wYXNzdGhyb3VnaCA9IDE7CisgICAgICAgIGZmX2ZpbHRlcl9zZXRf cmVhZHkoYXZjdHgsIDEwMCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIC8vIFdl IGhhdmUgbm8gZnJhbWVzIHlldCBmcm9tIElOX0EgYW5kIG5vIEVPRiwgc28gcmVxdWVzdCBzb21l LgorICAgIGlmIChmZl9vdXRsaW5rX2ZyYW1lX3dhbnRlZChvdXRsaW5rKSkgeworICAgICAgICBm Zl9pbmxpbmtfcmVxdWVzdF9mcmFtZShpbl9hKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQor CisgICAgcmV0dXJuIEZGRVJST1JfTk9UX1JFQURZOworfQorCitzdGF0aWMgYXZfY29sZCB2b2lk IHVuaW5pdChBVkZpbHRlckNvbnRleHQgKmF2Y3R4KQoreworICAgIFhGYWRlVnVsa2FuQ29udGV4 dCAqcyA9IGF2Y3R4LT5wcml2OworICAgIEZGVnVsa2FuQ29udGV4dCAqdmtjdHggPSAmcy0+dmtj dHg7CisgICAgRkZWdWxrYW5GdW5jdGlvbnMgKnZrID0gJnZrY3R4LT52a2ZuOworCisgICAgZmZf dmtfZXhlY19wb29sX2ZyZWUodmtjdHgsICZzLT5lKTsKKyAgICBmZl92a19zaGFkZXJfZnJlZSh2 a2N0eCwgJnMtPnNoZCk7CisKKyAgICBpZiAocy0+c2FtcGxlcikKKyAgICAgICAgdmstPkRlc3Ry b3lTYW1wbGVyKHZrY3R4LT5od2N0eC0+YWN0X2Rldiwgcy0+c2FtcGxlciwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgIHZrY3R4LT5od2N0eC0+YWxsb2MpOworCisgICAgZmZfdmtfdW5pbml0 KCZzLT52a2N0eCk7CisKKyAgICBzLT5pbml0aWFsaXplZCA9IDA7Cit9CisKK3N0YXRpYyBBVkZy YW1lICpnZXRfdmlkZW9fYnVmZmVyKEFWRmlsdGVyTGluayAqaW5saW5rLCBpbnQgdywgaW50IGgp Cit7CisgICAgWEZhZGVWdWxrYW5Db250ZXh0ICpzID0gaW5saW5rLT5kc3QtPnByaXY7CisKKyAg ICByZXR1cm4gcy0+cGFzc3Rocm91Z2ggPworICAgICAgICBmZl9udWxsX2dldF92aWRlb19idWZm ZXIgICAoaW5saW5rLCB3LCBoKSA6CisgICAgICAgIGZmX2RlZmF1bHRfZ2V0X3ZpZGVvX2J1ZmZl cihpbmxpbmssIHcsIGgpOworfQorCisjZGVmaW5lIE9GRlNFVCh4KSBvZmZzZXRvZihYRmFkZVZ1 bGthbkNvbnRleHQsIHgpCisjZGVmaW5lIEZMQUdTIChBVl9PUFRfRkxBR19GSUxURVJJTkdfUEFS QU0gfCBBVl9PUFRfRkxBR19WSURFT19QQVJBTSkKKworc3RhdGljIGNvbnN0IEFWT3B0aW9uIHhm YWRlX3Z1bGthbl9vcHRpb25zW10gPSB7CisgICAgeyAidHJhbnNpdGlvbiIsICJzZXQgY3Jvc3Mg ZmFkZSB0cmFuc2l0aW9uIiwgT0ZGU0VUKHRyYW5zaXRpb24pLCBBVl9PUFRfVFlQRV9JTlQsIHsu aTY0PUZBREV9LCAwLCBOQl9UUkFOU0lUSU9OUy0xLCBGTEFHUywgLnVuaXQgPSAidHJhbnNpdGlv biIgfSwKKyAgICAgICAgeyAiZmFkZSIsICJmYWRlIHRyYW5zaXRpb24iLCAwLCBBVl9PUFRfVFlQ RV9DT05TVCwgey5pNjQ9RkFERX0sIDAsIDAsIEZMQUdTLCAudW5pdCA9ICJ0cmFuc2l0aW9uIiB9 LAorICAgICAgICB7ICJ3aXBlbGVmdCIsICJ3aXBlIGxlZnQgdHJhbnNpdGlvbiIsIDAsIEFWX09Q VF9UWVBFX0NPTlNULCB7Lmk2ND1XSVBFTEVGVH0sIDAsIDAsIEZMQUdTLCAudW5pdCA9ICJ0cmFu c2l0aW9uIiB9LAorICAgICAgICB7ICJ3aXBlcmlnaHQiLCAid2lwZSByaWdodCB0cmFuc2l0aW9u IiwgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsuaTY0PVdJUEVSSUdIVH0sIDAsIDAsIEZMQUdTLCAu dW5pdCA9ICJ0cmFuc2l0aW9uIiB9LAorICAgICAgICB7ICJ3aXBldXAiLCAid2lwZSB1cCB0cmFu c2l0aW9uIiwgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsuaTY0PVdJUEVVUH0sIDAsIDAsIEZMQUdT LCAudW5pdCA9ICJ0cmFuc2l0aW9uIiB9LAorICAgICAgICB7ICJ3aXBlZG93biIsICJ3aXBlIGRv d24gdHJhbnNpdGlvbiIsIDAsIEFWX09QVF9UWVBFX0NPTlNULCB7Lmk2ND1XSVBFRE9XTn0sIDAs IDAsIEZMQUdTLCAudW5pdCA9ICJ0cmFuc2l0aW9uIiB9LAorICAgICAgICB7ICJzbGlkZWRvd24i LCAic2xpZGUgZG93biB0cmFuc2l0aW9uIiwgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsuaTY0PVNM SURFRE9XTn0sIDAsIDAsIEZMQUdTLCAudW5pdCA9ICJ0cmFuc2l0aW9uIiB9LAorICAgICAgICB7 ICJzbGlkZXVwIiwgInNsaWRlIHVwIHRyYW5zaXRpb24iLCAwLCBBVl9PUFRfVFlQRV9DT05TVCwg ey5pNjQ9U0xJREVVUH0sIDAsIDAsIEZMQUdTLCAudW5pdCA9ICJ0cmFuc2l0aW9uIiB9LAorICAg ICAgICB7ICJzbGlkZWxlZnQiLCAic2xpZGUgbGVmdCB0cmFuc2l0aW9uIiwgMCwgQVZfT1BUX1RZ UEVfQ09OU1QsIHsuaTY0PVNMSURFTEVGVH0sIDAsIDAsIEZMQUdTLCAudW5pdCA9ICJ0cmFuc2l0 aW9uIiB9LAorICAgICAgICB7ICJzbGlkZXJpZ2h0IiwgInNsaWRlIHJpZ2h0IHRyYW5zaXRpb24i LCAwLCBBVl9PUFRfVFlQRV9DT05TVCwgey5pNjQ9U0xJREVSSUdIVH0sIDAsIDAsIEZMQUdTLCAu dW5pdCA9ICJ0cmFuc2l0aW9uIiB9LAorICAgICAgICB7ICJjaXJjbGVvcGVuIiwgImNpcmNsZW9w ZW4gdHJhbnNpdGlvbiIsIDAsIEFWX09QVF9UWVBFX0NPTlNULCB7Lmk2ND1DSVJDTEVPUEVOfSwg MCwgMCwgRkxBR1MsIC51bml0ID0gInRyYW5zaXRpb24iIH0sCisgICAgICAgIHsgImNpcmNsZWNs b3NlIiwgImNpcmNsZWNsb3NlIHRyYW5zaXRpb24iLCAwLCBBVl9PUFRfVFlQRV9DT05TVCwgey5p NjQ9Q0lSQ0xFQ0xPU0V9LCAwLCAwLCBGTEFHUywgLnVuaXQgPSAidHJhbnNpdGlvbiIgfSwKKyAg ICAgICAgeyAiZGlzc29sdmUiLCAiZGlzc29sdmUgdHJhbnNpdGlvbiIsIDAsIEFWX09QVF9UWVBF X0NPTlNULCB7Lmk2ND1ESVNTT0xWRX0sIDAsIDAsIEZMQUdTLCAudW5pdCA9ICJ0cmFuc2l0aW9u IiB9LAorICAgICAgICB7ICJwaXhlbGl6ZSIsICJwaXhlbGl6ZSB0cmFuc2l0aW9uIiwgMCwgQVZf T1BUX1RZUEVfQ09OU1QsIHsuaTY0PVBJWEVMSVpFfSwgMCwgMCwgRkxBR1MsIC51bml0ID0gInRy YW5zaXRpb24iIH0sCisgICAgICAgIHsgIndpcGV0bCIsICJ3aXBlIHRvcCBsZWZ0IHRyYW5zaXRp b24iLCAwLCBBVl9PUFRfVFlQRV9DT05TVCwgey5pNjQ9V0lQRVRMfSwgMCwgMCwgRkxBR1MsIC51 bml0ID0gInRyYW5zaXRpb24iIH0sCisgICAgICAgIHsgIndpcGV0ciIsICJ3aXBlIHRvcCByaWdo dCB0cmFuc2l0aW9uIiwgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsuaTY0PVdJUEVUUn0sIDAsIDAs IEZMQUdTLCAudW5pdCA9ICJ0cmFuc2l0aW9uIiB9LAorICAgICAgICB7ICJ3aXBlYmwiLCAid2lw ZSBib3R0b20gbGVmdCB0cmFuc2l0aW9uIiwgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsuaTY0PVdJ UEVCTH0sIDAsIDAsIEZMQUdTLCAudW5pdCA9ICJ0cmFuc2l0aW9uIiB9LAorICAgICAgICB7ICJ3 aXBlYnIiLCAid2lwZSBib3R0b20gcmlnaHQgdHJhbnNpdGlvbiIsIDAsIEFWX09QVF9UWVBFX0NP TlNULCB7Lmk2ND1XSVBFQlJ9LCAwLCAwLCBGTEFHUywgLnVuaXQgPSAidHJhbnNpdGlvbiIgfSwK KyAgICB7ICJkdXJhdGlvbiIsICJzZXQgY3Jvc3MgZmFkZSBkdXJhdGlvbiIsIE9GRlNFVChkdXJh dGlvbiksIEFWX09QVF9UWVBFX0RVUkFUSU9OLCB7Lmk2ND0xMDAwMDAwfSwgMCwgNjAwMDAwMDAs IEZMQUdTIH0sCisgICAgeyAib2Zmc2V0IiwgICAic2V0IGNyb3NzIGZhZGUgc3RhcnQgcmVsYXRp dmUgdG8gZmlyc3QgaW5wdXQgc3RyZWFtIiwgT0ZGU0VUKG9mZnNldCksIEFWX09QVF9UWVBFX0RV UkFUSU9OLCB7Lmk2ND0wfSwgSU5UNjRfTUlOLCBJTlQ2NF9NQVgsIEZMQUdTIH0sCisgICAgeyBO VUxMIH0KK307CisKK0FWRklMVEVSX0RFRklORV9DTEFTUyh4ZmFkZV92dWxrYW4pOworCitzdGF0 aWMgY29uc3QgQVZGaWx0ZXJQYWQgeGZhZGVfdnVsa2FuX2lucHV0c1tdID0geworICAgIHsKKyAg ICAgICAgLm5hbWUgICAgICAgICAgICAgPSAibWFpbiIsCisgICAgICAgIC50eXBlICAgICAgICAg ICAgID0gQVZNRURJQV9UWVBFX1ZJREVPLAorICAgICAgICAuZ2V0X2J1ZmZlci52aWRlbyA9ICZn ZXRfdmlkZW9fYnVmZmVyLAorICAgICAgICAuY29uZmlnX3Byb3BzICAgICA9ICZmZl92a19maWx0 ZXJfY29uZmlnX2lucHV0LAorICAgIH0sCisgICAgeworICAgICAgICAubmFtZSAgICAgICAgICAg ICA9ICJ4ZmFkZSIsCisgICAgICAgIC50eXBlICAgICAgICAgICAgID0gQVZNRURJQV9UWVBFX1ZJ REVPLAorICAgICAgICAuZ2V0X2J1ZmZlci52aWRlbyA9ICZnZXRfdmlkZW9fYnVmZmVyLAorICAg ICAgICAuY29uZmlnX3Byb3BzICAgICA9ICZmZl92a19maWx0ZXJfY29uZmlnX2lucHV0LAorICAg IH0sCit9OworCitzdGF0aWMgY29uc3QgQVZGaWx0ZXJQYWQgeGZhZGVfdnVsa2FuX291dHB1dHNb XSA9IHsKKyAgICB7CisgICAgICAgIC5uYW1lICAgICAgICAgID0gImRlZmF1bHQiLAorICAgICAg ICAudHlwZSAgICAgICAgICA9IEFWTUVESUFfVFlQRV9WSURFTywKKyAgICAgICAgLmNvbmZpZ19w cm9wcyAgPSAmY29uZmlnX3Byb3BzX291dHB1dCwKKyAgICB9LAorfTsKKworY29uc3QgRkZGaWx0 ZXIgZmZfdmZfeGZhZGVfdnVsa2FuID0geworICAgIC5wLm5hbWUgICAgICAgICAgPSAieGZhZGVf dnVsa2FuIiwKKyAgICAucC5kZXNjcmlwdGlvbiAgID0gTlVMTF9JRl9DT05GSUdfU01BTEwoIkNy b3NzIGZhZGUgb25lIHZpZGVvIHdpdGggYW5vdGhlciB2aWRlby4iKSwKKyAgICAucC5wcml2X2Ns YXNzICAgID0gJnhmYWRlX3Z1bGthbl9jbGFzcywKKyAgICAucC5mbGFncyAgICAgICAgID0gQVZG SUxURVJfRkxBR19IV0RFVklDRSwKKyAgICAucHJpdl9zaXplICAgICAgID0gc2l6ZW9mKFhGYWRl VnVsa2FuQ29udGV4dCksCisgICAgLmluaXQgICAgICAgICAgICA9ICZmZl92a19maWx0ZXJfaW5p dCwKKyAgICAudW5pbml0ICAgICAgICAgID0gJnVuaW5pdCwKKyAgICAuYWN0aXZhdGUgICAgICAg ID0gJmFjdGl2YXRlLAorICAgIEZJTFRFUl9JTlBVVFMoeGZhZGVfdnVsa2FuX2lucHV0cyksCisg ICAgRklMVEVSX09VVFBVVFMoeGZhZGVfdnVsa2FuX291dHB1dHMpLAorICAgIEZJTFRFUl9TSU5H TEVfUElYRk1UKEFWX1BJWF9GTVRfVlVMS0FOKSwKKyAgICAuZmxhZ3NfaW50ZXJuYWwgID0gRkZf RklMVEVSX0ZMQUdfSFdGUkFNRV9BV0FSRSwKK307Ci0tIAoyLjQ5LjEKCgpGcm9tIDNkYTY4NjA4 NDM1ZGIzODY5MGYzNzUwMmE2NjExMjE5NTBkMGFiZTMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAx CkZyb206IEphbWFpa2ExIDxsdWthc3pjejE4QHdwLnBsPgpEYXRlOiBXZWQsIDMgU2VwIDIwMjUg MTM6MDU6MDQgKzAwMDAKU3ViamVjdDogW1BBVENIIDAyOS8xMThdIENoYW5naW5nIHZ1bGthbiBm aWxlIGRpcmVjdG9yeQoKLS0tCiBsaWJhdmZpbHRlci92c3JjX3Rlc3RzcmNfdnVsa2FuLmMgfCAz ODAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgMzgwIGRl bGV0aW9ucygtKQogZGVsZXRlIG1vZGUgMTAwNjQ0IGxpYmF2ZmlsdGVyL3ZzcmNfdGVzdHNyY192 dWxrYW4uYwoKZGlmZiAtLWdpdCBhL2xpYmF2ZmlsdGVyL3ZzcmNfdGVzdHNyY192dWxrYW4uYyBi L2xpYmF2ZmlsdGVyL3ZzcmNfdGVzdHNyY192dWxrYW4uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggY2IzYzc4NzIxMy4uMDAwMDAwMDAwMAotLS0gYS9saWJhdmZpbHRlci92c3JjX3Rl c3RzcmNfdnVsa2FuLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzODAgKzAsMCBAQAotLyoKLSAqIENv cHlyaWdodCAoYykgTHlubmUKLSAqCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCi0g KgotICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu ZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l cmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0 IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBGRm1wZWcgaXMgZGlzdHJp YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VU IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBN RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg dGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls cy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVz c2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3Qs IHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCi0gKi8K LQotI2luY2x1ZGUgImxpYmF2dXRpbC9yYW5kb21fc2VlZC5oIgotI2luY2x1ZGUgImxpYmF2dXRp bC9jc3AuaCIKLSNpbmNsdWRlICJsaWJhdnV0aWwvb3B0LmgiCi0jaW5jbHVkZSAibGliYXZ1dGls L3Z1bGthbl9zcGlydi5oIgotI2luY2x1ZGUgInZ1bGthbl9maWx0ZXIuaCIKLSNpbmNsdWRlICJm aWx0ZXJzLmgiCi0jaW5jbHVkZSAiY29sb3JzcGFjZS5oIgotI2luY2x1ZGUgInZpZGVvLmgiCi0K LWVudW0gVGVzdFNyY1Z1bGthbk1vZGUgewotICAgIFRFU1RTUkNfQ09MT1IsCi19OwotCi10eXBl ZGVmIHN0cnVjdCBUZXN0U3JjVnVsa2FuUHVzaERhdGEgewotICAgIGZsb2F0IGNvbG9yX2NvbXBb NF07Ci19IFRlc3RTcmNWdWxrYW5QdXNoRGF0YTsKLQotdHlwZWRlZiBzdHJ1Y3QgVGVzdFNyY1Z1 bGthbkNvbnRleHQgewotICAgIEZGVnVsa2FuQ29udGV4dCB2a2N0eDsKLQotICAgIGludCBpbml0 aWFsaXplZDsKLSAgICBGRlZrRXhlY1Bvb2wgZTsKLSAgICBBVlZ1bGthbkRldmljZVF1ZXVlRmFt aWx5ICpxZjsKLSAgICBGRlZ1bGthblNoYWRlciBzaGQ7Ci0KLSAgICAvKiBPbmx5IHVzZWQgYnkg Y29sb3JfdnVsa2FuICovCi0gICAgdWludDhfdCBjb2xvcl9yZ2JhWzRdOwotCi0gICAgVGVzdFNy Y1Z1bGthblB1c2hEYXRhIG9wdHM7Ci0KLSAgICBpbnQgdywgaDsKLSAgICBpbnQgcHcsIHBoOwot ICAgIGNoYXIgKm91dF9mb3JtYXRfc3RyaW5nOwotICAgIGVudW0gQVZDb2xvclJhbmdlIG91dF9y YW5nZTsKLSAgICB1bnNpZ25lZCBpbnQgbmJfZnJhbWU7Ci0gICAgQVZSYXRpb25hbCB0aW1lX2Jh c2UsIGZyYW1lX3JhdGU7Ci0gICAgaW50NjRfdCBwdHM7Ci0gICAgaW50NjRfdCBkdXJhdGlvbjsg ICAgICAgICAgIC8vLzwgZHVyYXRpb24gZXhwcmVzc2VkIGluIG1pY3Jvc2Vjb25kcwotICAgIEFW UmF0aW9uYWwgc2FyOyAgICAgICAgICAgICAvLy88IHNhbXBsZSBhc3BlY3QgcmF0aW8KLSAgICBp bnQgZHJhd19vbmNlOyAgICAgICAgICAgICAgLy8vPCBkcmF3IG9ubHkgdGhlIGZpcnN0IGZyYW1l LCBhbHdheXMgcHV0IG91dCB0aGUgc2FtZSBwaWN0dXJlCi0gICAgaW50IGRyYXdfb25jZV9yZXNl dDsgICAgICAgIC8vLzwgZHJhdyBvbmx5IHRoZSBmaXJzdCBmcmFtZSBvciBpbiBjYXNlIG9mIHJl c2V0Ci0gICAgQVZGcmFtZSAqcGljcmVmOyAgICAgICAgICAgIC8vLzwgY2FjaGVkIHJlZmVyZW5j ZSBjb250YWluaW5nIHRoZSBwYWludGVkIHBpY3R1cmUKLX0gVGVzdFNyY1Z1bGthbkNvbnRleHQ7 Ci0KLXN0YXRpYyBhdl9jb2xkIGludCBpbml0X2ZpbHRlcihBVkZpbHRlckNvbnRleHQgKmN0eCwg ZW51bSBUZXN0U3JjVnVsa2FuTW9kZSBtb2RlKQotewotICAgIGludCBlcnI7Ci0gICAgdWludDhf dCAqc3B2X2RhdGE7Ci0gICAgc2l6ZV90IHNwdl9sZW47Ci0gICAgdm9pZCAqc3B2X29wYXF1ZSA9 IE5VTEw7Ci0gICAgVGVzdFNyY1Z1bGthbkNvbnRleHQgKnMgPSBjdHgtPnByaXY7Ci0gICAgRkZW dWxrYW5Db250ZXh0ICp2a2N0eCA9ICZzLT52a2N0eDsKLSAgICBjb25zdCBpbnQgcGxhbmVzID0g YXZfcGl4X2ZtdF9jb3VudF9wbGFuZXMocy0+dmtjdHgub3V0cHV0X2Zvcm1hdCk7Ci0gICAgRkZW dWxrYW5TaGFkZXIgKnNoZCA9ICZzLT5zaGQ7Ci0gICAgRkZWa1NQSVJWQ29tcGlsZXIgKnNwdjsK LSAgICBGRlZ1bGthbkRlc2NyaXB0b3JTZXRCaW5kaW5nICpkZXNjX3NldDsKLSAgICBjb25zdCBB VlBpeEZtdERlc2NyaXB0b3IgKmRlc2MgPSBhdl9waXhfZm10X2Rlc2NfZ2V0KHMtPnZrY3R4Lm91 dHB1dF9mb3JtYXQpOwotCi0gICAgc3B2ID0gZmZfdmtfc3BpcnZfaW5pdCgpOwotICAgIGlmICgh c3B2KSB7Ci0gICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIlVuYWJsZSB0byBpbml0 aWFsaXplIFNQSVItViBjb21waWxlciFcbiIpOwotICAgICAgICByZXR1cm4gQVZFUlJPUl9FWFRF Uk5BTDsKLSAgICB9Ci0KLSAgICBzLT5xZiA9IGZmX3ZrX3FmX2ZpbmQodmtjdHgsIFZLX1FVRVVF X0NPTVBVVEVfQklULCAwKTsKLSAgICBpZiAoIXMtPnFmKSB7Ci0gICAgICAgIGF2X2xvZyhjdHgs IEFWX0xPR19FUlJPUiwgIkRldmljZSBoYXMgbm8gY29tcHV0ZSBxdWV1ZXNcbiIpOwotICAgICAg ICBlcnIgPSBBVkVSUk9SKEVOT1RTVVApOwotICAgICAgICBnb3RvIGZhaWw7Ci0gICAgfQotCi0g ICAgUkVUKGZmX3ZrX2V4ZWNfcG9vbF9pbml0KHZrY3R4LCBzLT5xZiwgJnMtPmUsIHMtPnFmLT5u dW0qNCwgMCwgMCwgMCwgTlVMTCkpOwotICAgIFJFVChmZl92a19zaGFkZXJfaW5pdCh2a2N0eCwg JnMtPnNoZCwgInNjYWxlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgVktfU0hBREVSX1NU QUdFX0NPTVBVVEVfQklULAotICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAzMiwgMzIsIDEsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgIDApKTsKLQotICAgIEdMU0xDKDAsIGxheW91dChwdXNoX2NvbnN0YW50LCBzdGQ0MzApIHVu aWZvcm0gcHVzaENvbnN0YW50cyB7ICAgICAgICApOwotICAgIEdMU0xDKDEsICAgIHZlYzQgY29s b3JfY29tcDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAg IEdMU0xDKDAsIH07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICApOwotICAgIEdMU0xDKDAsICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotCi0gICAgZmZfdmtfc2hhZGVy X2FkZF9wdXNoX2NvbnN0KCZzLT5zaGQsIDAsIHNpemVvZihzLT5vcHRzKSwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgVktfU0hBREVSX1NUQUdFX0NPTVBVVEVfQklUKTsKLQotICAg IGRlc2Nfc2V0ID0gKEZGVnVsa2FuRGVzY3JpcHRvclNldEJpbmRpbmcgW10pIHsKLSAgICAgICAg ewotICAgICAgICAgICAgLm5hbWUgICAgICAgPSAib3V0cHV0X2ltZyIsCi0gICAgICAgICAgICAu dHlwZSAgICAgICA9IFZLX0RFU0NSSVBUT1JfVFlQRV9TVE9SQUdFX0lNQUdFLAotICAgICAgICAg ICAgLm1lbV9sYXlvdXQgPSBmZl92a19zaGFkZXJfcmVwX2ZtdChzLT52a2N0eC5vdXRwdXRfZm9y bWF0LCBGRl9WS19SRVBfRkxPQVQpLAotICAgICAgICAgICAgLm1lbV9xdWFsaSAgPSAid3JpdGVv bmx5IiwKLSAgICAgICAgICAgIC5kaW1lbnNpb25zID0gMiwKLSAgICAgICAgICAgIC5lbGVtcyAg ICAgID0gcGxhbmVzLAotICAgICAgICAgICAgLnN0YWdlcyAgICAgPSBWS19TSEFERVJfU1RBR0Vf Q09NUFVURV9CSVQsCi0gICAgICAgIH0sCi0gICAgfTsKLQotICAgIFJFVChmZl92a19zaGFkZXJf YWRkX2Rlc2NyaXB0b3Jfc2V0KHZrY3R4LCAmcy0+c2hkLCBkZXNjX3NldCwgMSwgMCwgMCkpOwot Ci0gICAgR0xTTEMoMCwgdm9pZCBtYWluKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICk7Ci0gICAgR0xTTEMoMCwgeyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgR0xTTEMoMSwg ICAgIGl2ZWMyIHBvcyA9IGl2ZWMyKGdsX0dsb2JhbEludm9jYXRpb25JRC54eSk7ICAgICAgICAg ICAgICk7Ci0gICAgaWYgKG1vZGUgPT0gVEVTVFNSQ19DT0xPUikgewotICAgICAgICBkb3VibGUg cmdiMnl1dlszXVszXTsKLSAgICAgICAgZG91YmxlIHJnYmFkWzRdOwotICAgICAgICBkb3VibGUg eXV2YWRbNF07Ci0KLSAgICAgICAgZW51bSBBVkNvbG9yU3BhY2UgY3NwOwotICAgICAgICBjb25z dCBBVkx1bWFDb2VmZmljaWVudHMgKmx1bWEgPSBOVUxMOwotCi0gICAgICAgIHMtPmRyYXdfb25j ZSA9IDE7Ci0KLSAgICAgICAgaWYgKGRlc2MtPmZsYWdzICYgQVZfUElYX0ZNVF9GTEFHX1JHQikK LSAgICAgICAgICAgIGNzcCA9IEFWQ09MX1NQQ19SR0I7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg ICAgIGNzcCA9IEFWQ09MX1NQQ19TTVBURTE3ME07Ci0KLSAgICAgICAgaWYgKCEoZGVzYy0+Zmxh Z3MgJiBBVl9QSVhfRk1UX0ZMQUdfUkdCKSAmJiAhKGx1bWEgPSBhdl9jc3BfbHVtYV9jb2VmZnNf ZnJvbV9hdmNzcChjc3ApKSkKLSAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7Ci0g ICAgICAgIGVsc2UgaWYgKCEoZGVzYy0+ZmxhZ3MgJiBBVl9QSVhfRk1UX0ZMQUdfUkdCKSkKLSAg ICAgICAgICAgIGZmX2ZpbGxfcmdiMnl1dl90YWJsZShsdW1hLCByZ2IyeXV2KTsKLQotICAgICAg ICBmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkrKykKLSAgICAgICAgICAgIHJnYmFkW2ldID0gcy0+ Y29sb3JfcmdiYVtpXSAvIDI1NS4wOwotCi0gICAgICAgIGlmICghKGRlc2MtPmZsYWdzICYgQVZf UElYX0ZNVF9GTEFHX1JHQikpCi0gICAgICAgICAgICBmZl9tYXRyaXhfbXVsXzN4M192ZWMoeXV2 YWQsIHJnYmFkLCByZ2IyeXV2KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbWVtY3B5KHl1 dmFkLCByZ2JhZCwgc2l6ZW9mKHJnYmFkKSk7Ci0KLSAgICAgICAgeXV2YWRbM10gPSByZ2JhZFsz XTsKLQotICAgICAgICBpZiAoIShkZXNjLT5mbGFncyAmIEFWX1BJWF9GTVRfRkxBR19SR0IpKSB7 Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDM7IGkrKykgewotICAgICAgICAgICAg ICAgIGludCBjaHJvbWEgPSAoIShkZXNjLT5mbGFncyAmIEFWX1BJWF9GTVRfRkxBR19SR0IpICYm IGkgPiAwKTsKLSAgICAgICAgICAgICAgICBpZiAocy0+b3V0X3JhbmdlID09IEFWQ09MX1JBTkdF X01QRUcpIHsKLSAgICAgICAgICAgICAgICAgICAgeXV2YWRbaV0gKj0gKGNocm9tYSA/IDIyNC4w IDogMjE5LjApIC8gMjU1LjA7Ci0gICAgICAgICAgICAgICAgICAgIHl1dmFkW2ldICs9IChjaHJv bWEgPyAxMjguMCA6ICAxNi4wKSAvIDI1NS4wOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAo Y2hyb21hKSB7Ci0gICAgICAgICAgICAgICAgICAgIHl1dmFkW2ldICs9IDAuNTsKLSAgICAgICAg ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvKiBFbnN1cmUg d2UgcGxhY2UgdGhlIGFscGhhIGFwcHJvcHJpYXRlbHkgZm9yIGdyYXkgZm9ybWF0cyAqLwotICAg ICAgICBpZiAoZGVzYy0+bmJfY29tcG9uZW50cyA8PSAyKQotICAgICAgICAgICAgeXV2YWRbMV0g PSB5dXZhZFszXTsKLQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkrKykKLSAgICAg ICAgICAgIHMtPm9wdHMuY29sb3JfY29tcFtpXSA9IHl1dmFkW2ldOwotCi0gICAgICAgIEdMU0xD KDEsICAgICB2ZWM0IHI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICApOwotICAgICAgICBHTFNMQygwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgZm9yIChpbnQgaSA9 IDAsIGNfb2ZmID0gMDsgaSA8IHBsYW5lczsgaSsrKSB7Ci0gICAgICAgICAgICBmb3IgKGludCBj ID0gMDsgYyA8IGRlc2MtPm5iX2NvbXBvbmVudHM7IGMrKykgewotICAgICAgICAgICAgICAgIGlm IChkZXNjLT5jb21wW2NdLnBsYW5lID09IGkpIHsKLSAgICAgICAgICAgICAgICAgICAgaW50IG9m ZiA9IGRlc2MtPmNvbXBbY10ub2Zmc2V0IC8gKEZGQUxJR04oZGVzYy0+Y29tcFtjXS5kZXB0aCwg OCkvOCk7Ci0gICAgICAgICAgICAgICAgICAgIEdMU0xGKDEsIHJbJWldID0gY29sb3JfY29tcFsl aV07ICAgICAgICAgICAgICxvZmYsIGNfb2ZmKyspOwotICAgICAgICAgICAgICAgIH0KLSAgICAg ICAgICAgIH0KLSAgICAgICAgICAgIEdMU0xGKDEsIGltYWdlU3RvcmUob3V0cHV0X2ltZ1slaV0s IHBvcywgcik7ICAgICAgICAgICAgICAgICAgICAsaSk7Ci0gICAgICAgICAgICBHTFNMQygwLCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAp OwotICAgICAgICB9Ci0gICAgfQotICAgIEdMU0xDKDAsIH0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotCi0gICAgUkVUKHNwdi0+ Y29tcGlsZV9zaGFkZXIodmtjdHgsIHNwdiwgc2hkLCAmc3B2X2RhdGEsICZzcHZfbGVuLCAibWFp biIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNwdl9vcGFxdWUpKTsKLSAgICBSRVQo ZmZfdmtfc2hhZGVyX2xpbmsodmtjdHgsIHNoZCwgc3B2X2RhdGEsIHNwdl9sZW4sICJtYWluIikp OwotCi0gICAgUkVUKGZmX3ZrX3NoYWRlcl9yZWdpc3Rlcl9leGVjKHZrY3R4LCAmcy0+ZSwgJnMt PnNoZCkpOwotCi0gICAgcy0+aW5pdGlhbGl6ZWQgPSAxOwotCi1mYWlsOgotICAgIGlmIChzcHZf b3BhcXVlKQotICAgICAgICBzcHYtPmZyZWVfc2hhZGVyKHNwdiwgJnNwdl9vcGFxdWUpOwotICAg IGlmIChzcHYpCi0gICAgICAgIHNwdi0+dW5pbml0KCZzcHYpOwotCi0gICAgcmV0dXJuIGVycjsK LX0KLQotc3RhdGljIGludCB0ZXN0c3JjX3Z1bGthbl9hY3RpdmF0ZShBVkZpbHRlckNvbnRleHQg KmN0eCkKLXsKLSAgICBpbnQgZXJyOwotICAgIEFWRmlsdGVyTGluayAqb3V0bGluayA9IGN0eC0+ b3V0cHV0c1swXTsKLSAgICBUZXN0U3JjVnVsa2FuQ29udGV4dCAqcyA9IGN0eC0+cHJpdjsKLSAg ICBBVkZyYW1lICpmcmFtZTsKLQotICAgIGlmICghcy0+aW5pdGlhbGl6ZWQpIHsKLSAgICAgICAg ZW51bSBUZXN0U3JjVnVsa2FuTW9kZSBtb2RlID0gVEVTVFNSQ19DT0xPUjsKLSAgICAgICAgZXJy ID0gaW5pdF9maWx0ZXIoY3R4LCBtb2RlKTsKLSAgICAgICAgaWYgKGVyciA8IDApCi0gICAgICAg ICAgICByZXR1cm4gZXJyOwotICAgIH0KLQotICAgIGlmICghZmZfb3V0bGlua19mcmFtZV93YW50 ZWQob3V0bGluaykpCi0gICAgICAgIHJldHVybiBGRkVSUk9SX05PVF9SRUFEWTsKLSAgICBpZiAo cy0+ZHVyYXRpb24gPj0gMCAmJgotICAgICAgICBhdl9yZXNjYWxlX3Eocy0+cHRzLCBzLT50aW1l X2Jhc2UsIEFWX1RJTUVfQkFTRV9RKSA+PSBzLT5kdXJhdGlvbikgewotICAgICAgICBmZl9vdXRs aW5rX3NldF9zdGF0dXMob3V0bGluaywgQVZFUlJPUl9FT0YsIHMtPnB0cyk7Ci0gICAgICAgIHJl dHVybiAwOwotICAgIH0KLQotICAgIGlmIChzLT5kcmF3X29uY2UpIHsKLSAgICAgICAgaWYgKHMt PmRyYXdfb25jZV9yZXNldCkgewotICAgICAgICAgICAgYXZfZnJhbWVfZnJlZSgmcy0+cGljcmVm KTsKLSAgICAgICAgICAgIHMtPmRyYXdfb25jZV9yZXNldCA9IDA7Ci0gICAgICAgIH0KLSAgICAg ICAgaWYgKCFzLT5waWNyZWYpIHsKLSAgICAgICAgICAgIHMtPnBpY3JlZiA9IGZmX2dldF92aWRl b19idWZmZXIob3V0bGluaywgcy0+dywgcy0+aCk7Ci0gICAgICAgICAgICBpZiAoIXMtPnBpY3Jl ZikKLSAgICAgICAgICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOwotCi0gICAgICAgICAg ICBlcnIgPSBmZl92a19maWx0ZXJfcHJvY2Vzc19zaW1wbGUoJnMtPnZrY3R4LCAmcy0+ZSwgJnMt PnNoZCwgcy0+cGljcmVmLCBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFZLX05VTExfSEFORExFLCAmcy0+b3B0cywgc2l6ZW9mKHMtPm9wdHMpKTsK LSAgICAgICAgICAgIGlmIChlcnIgPCAwKQotICAgICAgICAgICAgICAgIHJldHVybiBlcnI7Ci0g ICAgICAgIH0KLSAgICAgICAgZnJhbWUgPSBhdl9mcmFtZV9jbG9uZShzLT5waWNyZWYpOwotICAg IH0gZWxzZSB7Ci0gICAgICAgIGZyYW1lID0gZmZfZ2V0X3ZpZGVvX2J1ZmZlcihvdXRsaW5rLCBz LT53LCBzLT5oKTsKLSAgICB9Ci0KLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm4gQVZF UlJPUihFTk9NRU0pOwotCi0gICAgZnJhbWUtPnB0cyAgICAgICAgICAgICAgICAgPSBzLT5wdHM7 Ci0gICAgZnJhbWUtPmR1cmF0aW9uICAgICAgICAgICAgPSAxOwotICAgIGZyYW1lLT5mbGFncyAg ICAgICAgICAgICAgID0gQVZfRlJBTUVfRkxBR19LRVk7Ci0gICAgZnJhbWUtPnBpY3RfdHlwZSAg ICAgICAgICAgPSBBVl9QSUNUVVJFX1RZUEVfSTsKLSAgICBmcmFtZS0+c2FtcGxlX2FzcGVjdF9y YXRpbyA9IHMtPnNhcjsKLSAgICBpZiAoIXMtPmRyYXdfb25jZSkgewotICAgICAgICBlcnIgPSBm Zl92a19maWx0ZXJfcHJvY2Vzc19zaW1wbGUoJnMtPnZrY3R4LCAmcy0+ZSwgJnMtPnNoZCwgZnJh bWUsIE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19O VUxMX0hBTkRMRSwgJnMtPm9wdHMsIHNpemVvZihzLT5vcHRzKSk7Ci0gICAgICAgIGlmIChlcnIg PCAwKSB7Ci0gICAgICAgICAgICBhdl9mcmFtZV9mcmVlKCZmcmFtZSk7Ci0gICAgICAgICAgICBy ZXR1cm4gZXJyOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcy0+cHRzKys7Ci0gICAgcy0+bmJf ZnJhbWUrKzsKLQotICAgIHJldHVybiBmZl9maWx0ZXJfZnJhbWUob3V0bGluaywgZnJhbWUpOwot fQotCi1zdGF0aWMgaW50IHRlc3RzcmNfdnVsa2FuX2NvbmZpZ19wcm9wcyhBVkZpbHRlckxpbmsg Km91dGxpbmspCi17Ci0gICAgaW50IGVycjsKLSAgICBGaWx0ZXJMaW5rICpsID0gZmZfZmlsdGVy X2xpbmsob3V0bGluayk7Ci0gICAgVGVzdFNyY1Z1bGthbkNvbnRleHQgKnMgPSBvdXRsaW5rLT5z cmMtPnByaXY7Ci0gICAgRkZWdWxrYW5Db250ZXh0ICp2a2N0eCA9ICZzLT52a2N0eDsKLQotICAg IGlmICghcy0+b3V0X2Zvcm1hdF9zdHJpbmcpIHsKLSAgICAgICAgdmtjdHgtPm91dHB1dF9mb3Jt YXQgPSBBVl9QSVhfRk1UX1lVVjQ0NFA7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgdmtjdHgtPm91 dHB1dF9mb3JtYXQgPSBhdl9nZXRfcGl4X2ZtdChzLT5vdXRfZm9ybWF0X3N0cmluZyk7Ci0gICAg ICAgIGlmICh2a2N0eC0+b3V0cHV0X2Zvcm1hdCA9PSBBVl9QSVhfRk1UX05PTkUpIHsKLSAgICAg ICAgICAgIGF2X2xvZyh2a2N0eCwgQVZfTE9HX0VSUk9SLCAiSW52YWxpZCBvdXRwdXQgZm9ybWF0 LlxuIik7Ci0gICAgICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOwotICAgICAgICB9Ci0g ICAgfQotCi0gICAgZXJyID0gZmZfdmtfZmlsdGVyX2luaXRfY29udGV4dChvdXRsaW5rLT5zcmMs IHZrY3R4LCBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy0+dywg cy0+aCwgdmtjdHgtPm91dHB1dF9mb3JtYXQpOwotICAgIGlmIChlcnIgPCAwKQotICAgICAgICBy ZXR1cm4gZXJyOwotCi0gICAgbC0+aHdfZnJhbWVzX2N0eCA9IGF2X2J1ZmZlcl9yZWYodmtjdHgt PmZyYW1lc19yZWYpOwotICAgIGlmICghbC0+aHdfZnJhbWVzX2N0eCkKLSAgICAgICAgcmV0dXJu IEFWRVJST1IoRU5PTUVNKTsKLQotICAgIHMtPnRpbWVfYmFzZSA9IGF2X2ludl9xKHMtPmZyYW1l X3JhdGUpOwotICAgIHMtPm5iX2ZyYW1lID0gMDsKLSAgICBzLT5wdHMgPSAwOwotCi0gICAgcy0+ dmtjdHgub3V0cHV0X3dpZHRoID0gcy0+dzsKLSAgICBzLT52a2N0eC5vdXRwdXRfaGVpZ2h0ID0g cy0+aDsKLSAgICBvdXRsaW5rLT53ID0gcy0+dzsKLSAgICBvdXRsaW5rLT5oID0gcy0+aDsKLSAg ICBvdXRsaW5rLT5zYW1wbGVfYXNwZWN0X3JhdGlvID0gcy0+c2FyOwotICAgIGwtPmZyYW1lX3Jh dGUgPSBzLT5mcmFtZV9yYXRlOwotICAgIG91dGxpbmstPnRpbWVfYmFzZSAgPSBzLT50aW1lX2Jh c2U7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgdGVzdHNyY192dWxrYW5fdW5p bml0KEFWRmlsdGVyQ29udGV4dCAqYXZjdHgpCi17Ci0gICAgVGVzdFNyY1Z1bGthbkNvbnRleHQg KnMgPSBhdmN0eC0+cHJpdjsKLSAgICBGRlZ1bGthbkNvbnRleHQgKnZrY3R4ID0gJnMtPnZrY3R4 OwotCi0gICAgYXZfZnJhbWVfZnJlZSgmcy0+cGljcmVmKTsKLQotICAgIGZmX3ZrX2V4ZWNfcG9v bF9mcmVlKHZrY3R4LCAmcy0+ZSk7Ci0gICAgZmZfdmtfc2hhZGVyX2ZyZWUodmtjdHgsICZzLT5z aGQpOwotCi0gICAgZmZfdmtfdW5pbml0KCZzLT52a2N0eCk7Ci0KLSAgICBzLT5pbml0aWFsaXpl ZCA9IDA7Ci19Ci0KLSNkZWZpbmUgT0ZGU0VUKHgpIG9mZnNldG9mKFRlc3RTcmNWdWxrYW5Db250 ZXh0LCB4KQotI2RlZmluZSBGTEFHUyAoQVZfT1BUX0ZMQUdfRklMVEVSSU5HX1BBUkFNIHwgQVZf T1BUX0ZMQUdfVklERU9fUEFSQU0pCi0KLSNkZWZpbmUgQ09NTU9OX09QVFMgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g ICAgeyAic2l6ZSIsICJzZXQgdmlkZW8gc2l6ZSIsIE9GRlNFVCh3KSwgQVZfT1BUX1RZUEVfSU1B R0VfU0laRSwgeyAuc3RyID0gIjE5MjB4MTA4MCIgfSwgMCwgMCwgRkxBR1MgfSwgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHsgInMiLCAgICAic2V0IHZpZGVvIHNp emUiLCBPRkZTRVQodyksIEFWX09QVF9UWVBFX0lNQUdFX1NJWkUsIHsgLnN0ciA9ICIxOTIweDEw ODAiIH0sIDAsIDAsIEZMQUdTIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgeyAicmF0ZSIsICJzZXQgdmlk ZW8gcmF0ZSIsIE9GRlNFVChmcmFtZV9yYXRlKSwgQVZfT1BUX1RZUEVfVklERU9fUkFURSwgeyAu c3RyID0gIjYwIiB9LCAwLCBJTlRfTUFYLCBGTEFHUyB9LCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAotICAgIHsgInIiLCAgICAic2V0IHZpZGVvIHJhdGUiLCBPRkZTRVQoZnJhbWVfcmF0 ZSksIEFWX09QVF9UWVBFX1ZJREVPX1JBVEUsIHsgLnN0ciA9ICI2MCIgfSwgMCwgSU5UX01BWCwg RkxBR1MgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCi0gICAgeyAiZHVyYXRpb24iLCAic2V0IHZpZGVvIGR1cmF0aW9uIiwgT0ZG U0VUKGR1cmF0aW9uKSwgQVZfT1BUX1RZUEVfRFVSQVRJT04sIHsgLmk2NCA9IC0xIH0sIC0xLCBJ TlQ2NF9NQVgsIEZMQUdTIH0sICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHsgImQiLCAg ICAgICAgInNldCB2aWRlbyBkdXJhdGlvbiIsIE9GRlNFVChkdXJhdGlvbiksIEFWX09QVF9UWVBF X0RVUkFUSU9OLCB7IC5pNjQgPSAtMSB9LCAtMSwgSU5UNjRfTUFYLCBGTEFHUyB9LCAgICAgICAg ICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgeyAi c2FyIiwgInNldCB2aWRlbyBzYW1wbGUgYXNwZWN0IHJhdGlvIiwgT0ZGU0VUKHNhciksIEFWX09Q VF9UWVBFX1JBVElPTkFMLCB7IC5kYmwgPSAxIH0sICAwLCBJTlRfTUFYLCBGTEFHUyB9LCAgICAg ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg ICB7ICJmb3JtYXQiLCAiT3V0cHV0IHZpZGVvIGZvcm1hdCAoc29mdHdhcmUgZm9ybWF0IG9mIGhh cmR3YXJlIGZyYW1lcykiLCBPRkZTRVQob3V0X2Zvcm1hdF9zdHJpbmcpLCBBVl9PUFRfVFlQRV9T VFJJTkcsIC5mbGFncyA9IEZMQUdTIH0sCi0KLXN0YXRpYyBjb25zdCBBVk9wdGlvbiBjb2xvcl92 dWxrYW5fb3B0aW9uc1tdID0gewotICAgIHsgImNvbG9yIiwgInNldCBjb2xvciIsIE9GRlNFVChj b2xvcl9yZ2JhKSwgQVZfT1BUX1RZUEVfQ09MT1IsIHsuc3RyID0gImJsYWNrIn0sIDAsIDAsIEZM QUdTIH0sCi0gICAgeyAiYyIsICAgICAic2V0IGNvbG9yIiwgT0ZGU0VUKGNvbG9yX3JnYmEpLCBB Vl9PUFRfVFlQRV9DT0xPUiwgey5zdHIgPSAiYmxhY2sifSwgMCwgMCwgRkxBR1MgfSwKLSAgICBD T01NT05fT1BUUwotICAgIHsgIm91dF9yYW5nZSIsICJPdXRwdXQgY29sb3VyIHJhbmdlIChmcm9t IDAgdG8gMikgKGRlZmF1bHQgMCkiLCBPRkZTRVQob3V0X3JhbmdlKSwgQVZfT1BUX1RZUEVfSU5U LCB7Lmk2NCA9IEFWQ09MX1JBTkdFX1VOU1BFQ0lGSUVEfSwgQVZDT0xfUkFOR0VfVU5TUEVDSUZJ RUQsIEFWQ09MX1JBTkdFX0pQRUcsIC5mbGFncyA9IEZMQUdTLCAudW5pdCA9ICJyYW5nZSIgfSwK LSAgICAgICAgeyAiZnVsbCIsICJGdWxsIHJhbmdlIiwgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsg Lmk2NCA9IEFWQ09MX1JBTkdFX0pQRUcgfSwgMCwgMCwgRkxBR1MsIC51bml0ID0gInJhbmdlIiB9 LAotICAgICAgICB7ICJsaW1pdGVkIiwgIkxpbWl0ZWQgcmFuZ2UiLCAwLCBBVl9PUFRfVFlQRV9D T05TVCwgeyAuaTY0ID0gQVZDT0xfUkFOR0VfTVBFRyB9LCAwLCAwLCBGTEFHUywgLnVuaXQgPSAi cmFuZ2UiIH0sCi0gICAgICAgIHsgImpwZWciLCAiRnVsbCByYW5nZSIsIDAsIEFWX09QVF9UWVBF X0NPTlNULCB7IC5pNjQgPSBBVkNPTF9SQU5HRV9KUEVHIH0sIDAsIDAsIEZMQUdTLCAudW5pdCA9 ICJyYW5nZSIgfSwKLSAgICAgICAgeyAibXBlZyIsICJMaW1pdGVkIHJhbmdlIiwgMCwgQVZfT1BU X1RZUEVfQ09OU1QsIHsgLmk2NCA9IEFWQ09MX1JBTkdFX01QRUcgfSwgMCwgMCwgRkxBR1MsIC51 bml0ID0gInJhbmdlIiB9LAotICAgICAgICB7ICJ0diIsICJMaW1pdGVkIHJhbmdlIiwgMCwgQVZf T1BUX1RZUEVfQ09OU1QsIHsgLmk2NCA9IEFWQ09MX1JBTkdFX01QRUcgfSwgMCwgMCwgRkxBR1Ms IC51bml0ID0gInJhbmdlIiB9LAotICAgICAgICB7ICJwYyIsICJGdWxsIHJhbmdlIiwgMCwgQVZf T1BUX1RZUEVfQ09OU1QsIHsgLmk2NCA9IEFWQ09MX1JBTkdFX0pQRUcgfSwgMCwgMCwgRkxBR1Ms IC51bml0ID0gInJhbmdlIiB9LAotICAgIHsgTlVMTCB9LAotfTsKLQotQVZGSUxURVJfREVGSU5F X0NMQVNTKGNvbG9yX3Z1bGthbik7Ci0KLXN0YXRpYyBjb25zdCBBVkZpbHRlclBhZCB0ZXN0c3Jj X3Z1bGthbl9vdXRwdXRzW10gPSB7Ci0gICAgewotICAgICAgICAubmFtZSA9ICJkZWZhdWx0IiwK LSAgICAgICAgLnR5cGUgPSBBVk1FRElBX1RZUEVfVklERU8sCi0gICAgICAgIC5jb25maWdfcHJv cHMgPSB0ZXN0c3JjX3Z1bGthbl9jb25maWdfcHJvcHMsCi0gICAgfSwKLX07Ci0KLWNvbnN0IEZG RmlsdGVyIGZmX3ZzcmNfY29sb3JfdnVsa2FuID0gewotICAgIC5wLm5hbWUgICAgICAgICA9ICJj b2xvcl92dWxrYW4iLAotICAgIC5wLmRlc2NyaXB0aW9uICA9IE5VTExfSUZfQ09ORklHX1NNQUxM KCJHZW5lcmF0ZSBhIGNvbnN0YW50IGNvbG9yIChWdWxrYW4pIiksCi0gICAgLnAuaW5wdXRzICAg ICAgID0gTlVMTCwKLSAgICAucC5mbGFncyAgICAgICAgPSBBVkZJTFRFUl9GTEFHX0hXREVWSUNF LAotICAgIC5wLnByaXZfY2xhc3MgICA9ICZjb2xvcl92dWxrYW5fY2xhc3MsCi0gICAgLnByaXZf c2l6ZSAgICAgID0gc2l6ZW9mKFRlc3RTcmNWdWxrYW5Db250ZXh0KSwKLSAgICAuaW5pdCAgICAg ICAgICAgPSAmZmZfdmtfZmlsdGVyX2luaXQsCi0gICAgLnVuaW5pdCAgICAgICAgID0gJnRlc3Rz cmNfdnVsa2FuX3VuaW5pdCwKLSAgICAuYWN0aXZhdGUgICAgICAgPSB0ZXN0c3JjX3Z1bGthbl9h Y3RpdmF0ZSwKLSAgICBGSUxURVJfT1VUUFVUUyh0ZXN0c3JjX3Z1bGthbl9vdXRwdXRzKSwKLSAg ICBGSUxURVJfU0lOR0xFX1BJWEZNVChBVl9QSVhfRk1UX1ZVTEtBTiksCi0gICAgLmZsYWdzX2lu dGVybmFsID0gRkZfRklMVEVSX0ZMQUdfSFdGUkFNRV9BV0FSRSwKLX07Ci0tIAoyLjQ5LjEKCgpG cm9tIDY1OTVmOGVmNDRkYjY4NWQxMGYzODc2ODg4MmYyYzg4NzBiNGJiNzQgTW9uIFNlcCAxNyAw MDowMDowMCAyMDAxCkZyb206IEphbWFpa2ExIDxsdWthc3pjejE4QHdwLnBsPgpEYXRlOiBXZWQs IDMgU2VwIDIwMjUgMTM6MDU6MzcgKzAwMDAKU3ViamVjdDogW1BBVENIIDAzMC8xMThdIENoYW5n aW5nIHZ1bGthbiBmaWxlIGRpcmVjdG9yeQoKLS0tCiBsaWJhdmZpbHRlci92dWxrYW4vdnNyY190 ZXN0c3JjX3Z1bGthbi5jIHwgMzgwICsrKysrKysrKysrKysrKysrKysrKysrCiAxIGZpbGUgY2hh bmdlZCwgMzgwIGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJhdmZpbHRlci92 dWxrYW4vdnNyY190ZXN0c3JjX3Z1bGthbi5jCgpkaWZmIC0tZ2l0IGEvbGliYXZmaWx0ZXIvdnVs a2FuL3ZzcmNfdGVzdHNyY192dWxrYW4uYyBiL2xpYmF2ZmlsdGVyL3Z1bGthbi92c3JjX3Rlc3Rz cmNfdnVsa2FuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uNTZiNTdh MWU5ZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmF2ZmlsdGVyL3Z1bGthbi92c3JjX3Rlc3RzcmNf dnVsa2FuLmMKQEAgLTAsMCArMSwzODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIEx5bm5lCisg KgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgorICoKKyAqIEZGbXBlZyBpcyBmcmVl IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1 bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor ICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh dGVyIHZlcnNpb24uCisgKgorICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwor ICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBT b2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG bG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorICovCisKKyNpbmNsdWRlICJsaWJhdnV0 aWwvcmFuZG9tX3NlZWQuaCIKKyNpbmNsdWRlICJsaWJhdnV0aWwvY3NwLmgiCisjaW5jbHVkZSAi bGliYXZ1dGlsL29wdC5oIgorI2luY2x1ZGUgIi4uLy4uL2xpYmF2dXRpbC92dWxrYW4vdnVsa2Fu X3NwaXJ2LmgiCisjaW5jbHVkZSAidnVsa2FuX2ZpbHRlci5oIgorI2luY2x1ZGUgImxpYmF2Zmls dGVyL2ZpbHRlcnMuaCIKKyNpbmNsdWRlICJsaWJhdmZpbHRlci9jb2xvcnNwYWNlLmgiCisjaW5j bHVkZSAibGliYXZmaWx0ZXIvdmlkZW8uaCIKKworZW51bSBUZXN0U3JjVnVsa2FuTW9kZSB7Cisg ICAgVEVTVFNSQ19DT0xPUiwKK307CisKK3R5cGVkZWYgc3RydWN0IFRlc3RTcmNWdWxrYW5QdXNo RGF0YSB7CisgICAgZmxvYXQgY29sb3JfY29tcFs0XTsKK30gVGVzdFNyY1Z1bGthblB1c2hEYXRh OworCit0eXBlZGVmIHN0cnVjdCBUZXN0U3JjVnVsa2FuQ29udGV4dCB7CisgICAgRkZWdWxrYW5D b250ZXh0IHZrY3R4OworCisgICAgaW50IGluaXRpYWxpemVkOworICAgIEZGVmtFeGVjUG9vbCBl OworICAgIEFWVnVsa2FuRGV2aWNlUXVldWVGYW1pbHkgKnFmOworICAgIEZGVnVsa2FuU2hhZGVy IHNoZDsKKworICAgIC8qIE9ubHkgdXNlZCBieSBjb2xvcl92dWxrYW4gKi8KKyAgICB1aW50OF90 IGNvbG9yX3JnYmFbNF07CisKKyAgICBUZXN0U3JjVnVsa2FuUHVzaERhdGEgb3B0czsKKworICAg IGludCB3LCBoOworICAgIGludCBwdywgcGg7CisgICAgY2hhciAqb3V0X2Zvcm1hdF9zdHJpbmc7 CisgICAgZW51bSBBVkNvbG9yUmFuZ2Ugb3V0X3JhbmdlOworICAgIHVuc2lnbmVkIGludCBuYl9m cmFtZTsKKyAgICBBVlJhdGlvbmFsIHRpbWVfYmFzZSwgZnJhbWVfcmF0ZTsKKyAgICBpbnQ2NF90 IHB0czsKKyAgICBpbnQ2NF90IGR1cmF0aW9uOyAgICAgICAgICAgLy8vPCBkdXJhdGlvbiBleHBy ZXNzZWQgaW4gbWljcm9zZWNvbmRzCisgICAgQVZSYXRpb25hbCBzYXI7ICAgICAgICAgICAgIC8v Lzwgc2FtcGxlIGFzcGVjdCByYXRpbworICAgIGludCBkcmF3X29uY2U7ICAgICAgICAgICAgICAv Ly88IGRyYXcgb25seSB0aGUgZmlyc3QgZnJhbWUsIGFsd2F5cyBwdXQgb3V0IHRoZSBzYW1lIHBp Y3R1cmUKKyAgICBpbnQgZHJhd19vbmNlX3Jlc2V0OyAgICAgICAgLy8vPCBkcmF3IG9ubHkgdGhl IGZpcnN0IGZyYW1lIG9yIGluIGNhc2Ugb2YgcmVzZXQKKyAgICBBVkZyYW1lICpwaWNyZWY7ICAg ICAgICAgICAgLy8vPCBjYWNoZWQgcmVmZXJlbmNlIGNvbnRhaW5pbmcgdGhlIHBhaW50ZWQgcGlj dHVyZQorfSBUZXN0U3JjVnVsa2FuQ29udGV4dDsKKworc3RhdGljIGF2X2NvbGQgaW50IGluaXRf ZmlsdGVyKEFWRmlsdGVyQ29udGV4dCAqY3R4LCBlbnVtIFRlc3RTcmNWdWxrYW5Nb2RlIG1vZGUp Cit7CisgICAgaW50IGVycjsKKyAgICB1aW50OF90ICpzcHZfZGF0YTsKKyAgICBzaXplX3Qgc3B2 X2xlbjsKKyAgICB2b2lkICpzcHZfb3BhcXVlID0gTlVMTDsKKyAgICBUZXN0U3JjVnVsa2FuQ29u dGV4dCAqcyA9IGN0eC0+cHJpdjsKKyAgICBGRlZ1bGthbkNvbnRleHQgKnZrY3R4ID0gJnMtPnZr Y3R4OworICAgIGNvbnN0IGludCBwbGFuZXMgPSBhdl9waXhfZm10X2NvdW50X3BsYW5lcyhzLT52 a2N0eC5vdXRwdXRfZm9ybWF0KTsKKyAgICBGRlZ1bGthblNoYWRlciAqc2hkID0gJnMtPnNoZDsK KyAgICBGRlZrU1BJUlZDb21waWxlciAqc3B2OworICAgIEZGVnVsa2FuRGVzY3JpcHRvclNldEJp bmRpbmcgKmRlc2Nfc2V0OworICAgIGNvbnN0IEFWUGl4Rm10RGVzY3JpcHRvciAqZGVzYyA9IGF2 X3BpeF9mbXRfZGVzY19nZXQocy0+dmtjdHgub3V0cHV0X2Zvcm1hdCk7CisKKyAgICBzcHYgPSBm Zl92a19zcGlydl9pbml0KCk7CisgICAgaWYgKCFzcHYpIHsKKyAgICAgICAgYXZfbG9nKGN0eCwg QVZfTE9HX0VSUk9SLCAiVW5hYmxlIHRvIGluaXRpYWxpemUgU1BJUi1WIGNvbXBpbGVyIVxuIik7 CisgICAgICAgIHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOworICAgIH0KKworICAgIHMtPnFmID0g ZmZfdmtfcWZfZmluZCh2a2N0eCwgVktfUVVFVUVfQ09NUFVURV9CSVQsIDApOworICAgIGlmICgh cy0+cWYpIHsKKyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiRGV2aWNlIGhhcyBu byBjb21wdXRlIHF1ZXVlc1xuIik7CisgICAgICAgIGVyciA9IEFWRVJST1IoRU5PVFNVUCk7Cisg ICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICBSRVQoZmZfdmtfZXhlY19wb29sX2luaXQo dmtjdHgsIHMtPnFmLCAmcy0+ZSwgcy0+cWYtPm51bSo0LCAwLCAwLCAwLCBOVUxMKSk7CisgICAg UkVUKGZmX3ZrX3NoYWRlcl9pbml0KHZrY3R4LCAmcy0+c2hkLCAic2NhbGUiLAorICAgICAgICAg ICAgICAgICAgICAgICAgICBWS19TSEFERVJfU1RBR0VfQ09NUFVURV9CSVQsCisgICAgICAgICAg ICAgICAgICAgICAgICAgIE5VTEwsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDMyLCAz MiwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMCkpOworCisgICAgR0xTTEMoMCwgbGF5 b3V0KHB1c2hfY29uc3RhbnQsIHN0ZDQzMCkgdW5pZm9ybSBwdXNoQ29uc3RhbnRzIHsgICAgICAg ICk7CisgICAgR0xTTEMoMSwgICAgdmVjNCBjb2xvcl9jb21wOyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgR0xTTEMoMCwgfTsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgR0xTTEMo MCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICk7CisKKyAgICBmZl92a19zaGFkZXJfYWRkX3B1c2hfY29uc3QoJnMtPnNoZCwgMCwg c2l6ZW9mKHMtPm9wdHMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19TSEFE RVJfU1RBR0VfQ09NUFVURV9CSVQpOworCisgICAgZGVzY19zZXQgPSAoRkZWdWxrYW5EZXNjcmlw dG9yU2V0QmluZGluZyBbXSkgeworICAgICAgICB7CisgICAgICAgICAgICAubmFtZSAgICAgICA9 ICJvdXRwdXRfaW1nIiwKKyAgICAgICAgICAgIC50eXBlICAgICAgID0gVktfREVTQ1JJUFRPUl9U WVBFX1NUT1JBR0VfSU1BR0UsCisgICAgICAgICAgICAubWVtX2xheW91dCA9IGZmX3ZrX3NoYWRl cl9yZXBfZm10KHMtPnZrY3R4Lm91dHB1dF9mb3JtYXQsIEZGX1ZLX1JFUF9GTE9BVCksCisgICAg ICAgICAgICAubWVtX3F1YWxpICA9ICJ3cml0ZW9ubHkiLAorICAgICAgICAgICAgLmRpbWVuc2lv bnMgPSAyLAorICAgICAgICAgICAgLmVsZW1zICAgICAgPSBwbGFuZXMsCisgICAgICAgICAgICAu c3RhZ2VzICAgICA9IFZLX1NIQURFUl9TVEFHRV9DT01QVVRFX0JJVCwKKyAgICAgICAgfSwKKyAg ICB9OworCisgICAgUkVUKGZmX3ZrX3NoYWRlcl9hZGRfZGVzY3JpcHRvcl9zZXQodmtjdHgsICZz LT5zaGQsIGRlc2Nfc2V0LCAxLCAwLCAwKSk7CisKKyAgICBHTFNMQygwLCB2b2lkIG1haW4oKSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBH TFNMQygwLCB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKTsKKyAgICBHTFNMQygxLCAgICAgaXZlYzIgcG9zID0gaXZlYzIoZ2xfR2xv YmFsSW52b2NhdGlvbklELnh5KTsgICAgICAgICAgICAgKTsKKyAgICBpZiAobW9kZSA9PSBURVNU U1JDX0NPTE9SKSB7CisgICAgICAgIGRvdWJsZSByZ2IyeXV2WzNdWzNdOworICAgICAgICBkb3Vi bGUgcmdiYWRbNF07CisgICAgICAgIGRvdWJsZSB5dXZhZFs0XTsKKworICAgICAgICBlbnVtIEFW Q29sb3JTcGFjZSBjc3A7CisgICAgICAgIGNvbnN0IEFWTHVtYUNvZWZmaWNpZW50cyAqbHVtYSA9 IE5VTEw7CisKKyAgICAgICAgcy0+ZHJhd19vbmNlID0gMTsKKworICAgICAgICBpZiAoZGVzYy0+ ZmxhZ3MgJiBBVl9QSVhfRk1UX0ZMQUdfUkdCKQorICAgICAgICAgICAgY3NwID0gQVZDT0xfU1BD X1JHQjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY3NwID0gQVZDT0xfU1BDX1NNUFRFMTcw TTsKKworICAgICAgICBpZiAoIShkZXNjLT5mbGFncyAmIEFWX1BJWF9GTVRfRkxBR19SR0IpICYm ICEobHVtYSA9IGF2X2NzcF9sdW1hX2NvZWZmc19mcm9tX2F2Y3NwKGNzcCkpKQorICAgICAgICAg ICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKKyAgICAgICAgZWxzZSBpZiAoIShkZXNjLT5mbGFn cyAmIEFWX1BJWF9GTVRfRkxBR19SR0IpKQorICAgICAgICAgICAgZmZfZmlsbF9yZ2IyeXV2X3Rh YmxlKGx1bWEsIHJnYjJ5dXYpOworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSsr KQorICAgICAgICAgICAgcmdiYWRbaV0gPSBzLT5jb2xvcl9yZ2JhW2ldIC8gMjU1LjA7CisKKyAg ICAgICAgaWYgKCEoZGVzYy0+ZmxhZ3MgJiBBVl9QSVhfRk1UX0ZMQUdfUkdCKSkKKyAgICAgICAg ICAgIGZmX21hdHJpeF9tdWxfM3gzX3ZlYyh5dXZhZCwgcmdiYWQsIHJnYjJ5dXYpOworICAgICAg ICBlbHNlCisgICAgICAgICAgICBtZW1jcHkoeXV2YWQsIHJnYmFkLCBzaXplb2YocmdiYWQpKTsK KworICAgICAgICB5dXZhZFszXSA9IHJnYmFkWzNdOworCisgICAgICAgIGlmICghKGRlc2MtPmZs YWdzICYgQVZfUElYX0ZNVF9GTEFHX1JHQikpIHsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAw OyBpIDwgMzsgaSsrKSB7CisgICAgICAgICAgICAgICAgaW50IGNocm9tYSA9ICghKGRlc2MtPmZs YWdzICYgQVZfUElYX0ZNVF9GTEFHX1JHQikgJiYgaSA+IDApOworICAgICAgICAgICAgICAgIGlm IChzLT5vdXRfcmFuZ2UgPT0gQVZDT0xfUkFOR0VfTVBFRykgeworICAgICAgICAgICAgICAgICAg ICB5dXZhZFtpXSAqPSAoY2hyb21hID8gMjI0LjAgOiAyMTkuMCkgLyAyNTUuMDsKKyAgICAgICAg ICAgICAgICAgICAgeXV2YWRbaV0gKz0gKGNocm9tYSA/IDEyOC4wIDogIDE2LjApIC8gMjU1LjA7 CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaHJvbWEpIHsKKyAgICAgICAgICAgICAgICAg ICAgeXV2YWRbaV0gKz0gMC41OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg ICAgICAgfQorCisgICAgICAgIC8qIEVuc3VyZSB3ZSBwbGFjZSB0aGUgYWxwaGEgYXBwcm9wcmlh dGVseSBmb3IgZ3JheSBmb3JtYXRzICovCisgICAgICAgIGlmIChkZXNjLT5uYl9jb21wb25lbnRz IDw9IDIpCisgICAgICAgICAgICB5dXZhZFsxXSA9IHl1dmFkWzNdOworCisgICAgICAgIGZvciAo aW50IGkgPSAwOyBpIDwgNDsgaSsrKQorICAgICAgICAgICAgcy0+b3B0cy5jb2xvcl9jb21wW2ld ID0geXV2YWRbaV07CisKKyAgICAgICAgR0xTTEMoMSwgICAgIHZlYzQgcjsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgIEdMU0xDKDAs ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICApOworICAgICAgICBmb3IgKGludCBpID0gMCwgY19vZmYgPSAwOyBpIDwgcGxhbmVzOyBp KyspIHsKKyAgICAgICAgICAgIGZvciAoaW50IGMgPSAwOyBjIDwgZGVzYy0+bmJfY29tcG9uZW50 czsgYysrKSB7CisgICAgICAgICAgICAgICAgaWYgKGRlc2MtPmNvbXBbY10ucGxhbmUgPT0gaSkg eworICAgICAgICAgICAgICAgICAgICBpbnQgb2ZmID0gZGVzYy0+Y29tcFtjXS5vZmZzZXQgLyAo RkZBTElHTihkZXNjLT5jb21wW2NdLmRlcHRoLCA4KS84KTsKKyAgICAgICAgICAgICAgICAgICAg R0xTTEYoMSwgclslaV0gPSBjb2xvcl9jb21wWyVpXTsgICAgICAgICAgICAgLG9mZiwgY19vZmYr Kyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgR0xTTEYo MSwgaW1hZ2VTdG9yZShvdXRwdXRfaW1nWyVpXSwgcG9zLCByKTsgICAgICAgICAgICAgICAgICAg ICxpKTsKKyAgICAgICAgICAgIEdMU0xDKDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgIH0KKyAgICB9CisgICAgR0xT TEMoMCwgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICk7CisKKyAgICBSRVQoc3B2LT5jb21waWxlX3NoYWRlcih2a2N0eCwgc3B2LCBz aGQsICZzcHZfZGF0YSwgJnNwdl9sZW4sICJtYWluIiwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAmc3B2X29wYXF1ZSkpOworICAgIFJFVChmZl92a19zaGFkZXJfbGluayh2a2N0eCwgc2hk LCBzcHZfZGF0YSwgc3B2X2xlbiwgIm1haW4iKSk7CisKKyAgICBSRVQoZmZfdmtfc2hhZGVyX3Jl Z2lzdGVyX2V4ZWModmtjdHgsICZzLT5lLCAmcy0+c2hkKSk7CisKKyAgICBzLT5pbml0aWFsaXpl ZCA9IDE7CisKK2ZhaWw6CisgICAgaWYgKHNwdl9vcGFxdWUpCisgICAgICAgIHNwdi0+ZnJlZV9z aGFkZXIoc3B2LCAmc3B2X29wYXF1ZSk7CisgICAgaWYgKHNwdikKKyAgICAgICAgc3B2LT51bmlu aXQoJnNwdik7CisKKyAgICByZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHRlc3RzcmNfdnVs a2FuX2FjdGl2YXRlKEFWRmlsdGVyQ29udGV4dCAqY3R4KQoreworICAgIGludCBlcnI7CisgICAg QVZGaWx0ZXJMaW5rICpvdXRsaW5rID0gY3R4LT5vdXRwdXRzWzBdOworICAgIFRlc3RTcmNWdWxr YW5Db250ZXh0ICpzID0gY3R4LT5wcml2OworICAgIEFWRnJhbWUgKmZyYW1lOworCisgICAgaWYg KCFzLT5pbml0aWFsaXplZCkgeworICAgICAgICBlbnVtIFRlc3RTcmNWdWxrYW5Nb2RlIG1vZGUg PSBURVNUU1JDX0NPTE9SOworICAgICAgICBlcnIgPSBpbml0X2ZpbHRlcihjdHgsIG1vZGUpOwor ICAgICAgICBpZiAoZXJyIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgfQorCisg ICAgaWYgKCFmZl9vdXRsaW5rX2ZyYW1lX3dhbnRlZChvdXRsaW5rKSkKKyAgICAgICAgcmV0dXJu IEZGRVJST1JfTk9UX1JFQURZOworICAgIGlmIChzLT5kdXJhdGlvbiA+PSAwICYmCisgICAgICAg IGF2X3Jlc2NhbGVfcShzLT5wdHMsIHMtPnRpbWVfYmFzZSwgQVZfVElNRV9CQVNFX1EpID49IHMt PmR1cmF0aW9uKSB7CisgICAgICAgIGZmX291dGxpbmtfc2V0X3N0YXR1cyhvdXRsaW5rLCBBVkVS Uk9SX0VPRiwgcy0+cHRzKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgaWYgKHMt PmRyYXdfb25jZSkgeworICAgICAgICBpZiAocy0+ZHJhd19vbmNlX3Jlc2V0KSB7CisgICAgICAg ICAgICBhdl9mcmFtZV9mcmVlKCZzLT5waWNyZWYpOworICAgICAgICAgICAgcy0+ZHJhd19vbmNl X3Jlc2V0ID0gMDsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXMtPnBpY3JlZikgeworICAgICAg ICAgICAgcy0+cGljcmVmID0gZmZfZ2V0X3ZpZGVvX2J1ZmZlcihvdXRsaW5rLCBzLT53LCBzLT5o KTsKKyAgICAgICAgICAgIGlmICghcy0+cGljcmVmKQorICAgICAgICAgICAgICAgIHJldHVybiBB VkVSUk9SKEVOT01FTSk7CisKKyAgICAgICAgICAgIGVyciA9IGZmX3ZrX2ZpbHRlcl9wcm9jZXNz X3NpbXBsZSgmcy0+dmtjdHgsICZzLT5lLCAmcy0+c2hkLCBzLT5waWNyZWYsIE5VTEwsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfTlVMTF9IQU5ETEUs ICZzLT5vcHRzLCBzaXplb2Yocy0+b3B0cykpOworICAgICAgICAgICAgaWYgKGVyciA8IDApCisg ICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgICAgfQorICAgICAgICBmcmFtZSA9IGF2 X2ZyYW1lX2Nsb25lKHMtPnBpY3JlZik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZnJhbWUgPSBm Zl9nZXRfdmlkZW9fYnVmZmVyKG91dGxpbmssIHMtPncsIHMtPmgpOworICAgIH0KKworICAgIGlm ICghZnJhbWUpCisgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7CisKKyAgICBmcmFtZS0+ cHRzICAgICAgICAgICAgICAgICA9IHMtPnB0czsKKyAgICBmcmFtZS0+ZHVyYXRpb24gICAgICAg ICAgICA9IDE7CisgICAgZnJhbWUtPmZsYWdzICAgICAgICAgICAgICAgPSBBVl9GUkFNRV9GTEFH X0tFWTsKKyAgICBmcmFtZS0+cGljdF90eXBlICAgICAgICAgICA9IEFWX1BJQ1RVUkVfVFlQRV9J OworICAgIGZyYW1lLT5zYW1wbGVfYXNwZWN0X3JhdGlvID0gcy0+c2FyOworICAgIGlmICghcy0+ ZHJhd19vbmNlKSB7CisgICAgICAgIGVyciA9IGZmX3ZrX2ZpbHRlcl9wcm9jZXNzX3NpbXBsZSgm cy0+dmtjdHgsICZzLT5lLCAmcy0+c2hkLCBmcmFtZSwgTlVMTCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFZLX05VTExfSEFORExFLCAmcy0+b3B0cywgc2l6ZW9m KHMtPm9wdHMpKTsKKyAgICAgICAgaWYgKGVyciA8IDApIHsKKyAgICAgICAgICAgIGF2X2ZyYW1l X2ZyZWUoJmZyYW1lKTsKKyAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAgIH0KKyAgICB9 CisKKyAgICBzLT5wdHMrKzsKKyAgICBzLT5uYl9mcmFtZSsrOworCisgICAgcmV0dXJuIGZmX2Zp bHRlcl9mcmFtZShvdXRsaW5rLCBmcmFtZSk7Cit9CisKK3N0YXRpYyBpbnQgdGVzdHNyY192dWxr YW5fY29uZmlnX3Byb3BzKEFWRmlsdGVyTGluayAqb3V0bGluaykKK3sKKyAgICBpbnQgZXJyOwor ICAgIEZpbHRlckxpbmsgKmwgPSBmZl9maWx0ZXJfbGluayhvdXRsaW5rKTsKKyAgICBUZXN0U3Jj VnVsa2FuQ29udGV4dCAqcyA9IG91dGxpbmstPnNyYy0+cHJpdjsKKyAgICBGRlZ1bGthbkNvbnRl eHQgKnZrY3R4ID0gJnMtPnZrY3R4OworCisgICAgaWYgKCFzLT5vdXRfZm9ybWF0X3N0cmluZykg eworICAgICAgICB2a2N0eC0+b3V0cHV0X2Zvcm1hdCA9IEFWX1BJWF9GTVRfWVVWNDQ0UDsKKyAg ICB9IGVsc2UgeworICAgICAgICB2a2N0eC0+b3V0cHV0X2Zvcm1hdCA9IGF2X2dldF9waXhfZm10 KHMtPm91dF9mb3JtYXRfc3RyaW5nKTsKKyAgICAgICAgaWYgKHZrY3R4LT5vdXRwdXRfZm9ybWF0 ID09IEFWX1BJWF9GTVRfTk9ORSkgeworICAgICAgICAgICAgYXZfbG9nKHZrY3R4LCBBVl9MT0df RVJST1IsICJJbnZhbGlkIG91dHB1dCBmb3JtYXQuXG4iKTsKKyAgICAgICAgICAgIHJldHVybiBB VkVSUk9SKEVJTlZBTCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBlcnIgPSBmZl92a19maWx0 ZXJfaW5pdF9jb250ZXh0KG91dGxpbmstPnNyYywgdmtjdHgsIE5VTEwsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzLT53LCBzLT5oLCB2a2N0eC0+b3V0cHV0X2Zvcm1hdCk7 CisgICAgaWYgKGVyciA8IDApCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICBsLT5od19mcmFt ZXNfY3R4ID0gYXZfYnVmZmVyX3JlZih2a2N0eC0+ZnJhbWVzX3JlZik7CisgICAgaWYgKCFsLT5o d19mcmFtZXNfY3R4KQorICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOworCisgICAgcy0+ dGltZV9iYXNlID0gYXZfaW52X3Eocy0+ZnJhbWVfcmF0ZSk7CisgICAgcy0+bmJfZnJhbWUgPSAw OworICAgIHMtPnB0cyA9IDA7CisKKyAgICBzLT52a2N0eC5vdXRwdXRfd2lkdGggPSBzLT53Owor ICAgIHMtPnZrY3R4Lm91dHB1dF9oZWlnaHQgPSBzLT5oOworICAgIG91dGxpbmstPncgPSBzLT53 OworICAgIG91dGxpbmstPmggPSBzLT5oOworICAgIG91dGxpbmstPnNhbXBsZV9hc3BlY3RfcmF0 aW8gPSBzLT5zYXI7CisgICAgbC0+ZnJhbWVfcmF0ZSA9IHMtPmZyYW1lX3JhdGU7CisgICAgb3V0 bGluay0+dGltZV9iYXNlICA9IHMtPnRpbWVfYmFzZTsKKworICAgIHJldHVybiAwOworfQorCitz dGF0aWMgdm9pZCB0ZXN0c3JjX3Z1bGthbl91bmluaXQoQVZGaWx0ZXJDb250ZXh0ICphdmN0eCkK K3sKKyAgICBUZXN0U3JjVnVsa2FuQ29udGV4dCAqcyA9IGF2Y3R4LT5wcml2OworICAgIEZGVnVs a2FuQ29udGV4dCAqdmtjdHggPSAmcy0+dmtjdHg7CisKKyAgICBhdl9mcmFtZV9mcmVlKCZzLT5w aWNyZWYpOworCisgICAgZmZfdmtfZXhlY19wb29sX2ZyZWUodmtjdHgsICZzLT5lKTsKKyAgICBm Zl92a19zaGFkZXJfZnJlZSh2a2N0eCwgJnMtPnNoZCk7CisKKyAgICBmZl92a191bmluaXQoJnMt PnZrY3R4KTsKKworICAgIHMtPmluaXRpYWxpemVkID0gMDsKK30KKworI2RlZmluZSBPRkZTRVQo eCkgb2Zmc2V0b2YoVGVzdFNyY1Z1bGthbkNvbnRleHQsIHgpCisjZGVmaW5lIEZMQUdTIChBVl9P UFRfRkxBR19GSUxURVJJTkdfUEFSQU0gfCBBVl9PUFRfRkxBR19WSURFT19QQVJBTSkKKworI2Rl ZmluZSBDT01NT05fT1BUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICJzaXplIiwgInNldCB2aWRlbyBzaXpl IiwgT0ZGU0VUKHcpLCBBVl9PUFRfVFlQRV9JTUFHRV9TSVpFLCB7IC5zdHIgPSAiMTkyMHgxMDgw IiB9LCAwLCAwLCBGTEFHUyB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc CisgICAgeyAicyIsICAgICJzZXQgdmlkZW8gc2l6ZSIsIE9GRlNFVCh3KSwgQVZfT1BUX1RZUEVf SU1BR0VfU0laRSwgeyAuc3RyID0gIjE5MjB4MTA4MCIgfSwgMCwgMCwgRkxBR1MgfSwgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKKyAgICB7ICJyYXRlIiwgInNldCB2aWRlbyByYXRlIiwgT0ZGU0VUKGZyYW1lX3JhdGUp LCBBVl9PUFRfVFlQRV9WSURFT19SQVRFLCB7IC5zdHIgPSAiNjAiIH0sIDAsIElOVF9NQVgsIEZM QUdTIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAiciIsICAgICJzZXQg dmlkZW8gcmF0ZSIsIE9GRlNFVChmcmFtZV9yYXRlKSwgQVZfT1BUX1RZUEVfVklERU9fUkFURSwg eyAuc3RyID0gIjYwIiB9LCAwLCBJTlRfTUFYLCBGTEFHUyB9LCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICJkdXJhdGlv biIsICJzZXQgdmlkZW8gZHVyYXRpb24iLCBPRkZTRVQoZHVyYXRpb24pLCBBVl9PUFRfVFlQRV9E VVJBVElPTiwgeyAuaTY0ID0gLTEgfSwgLTEsIElOVDY0X01BWCwgRkxBR1MgfSwgICAgICAgICAg ICAgICAgICAgICAgICBcCisgICAgeyAiZCIsICAgICAgICAic2V0IHZpZGVvIGR1cmF0aW9uIiwg T0ZGU0VUKGR1cmF0aW9uKSwgQVZfT1BUX1RZUEVfRFVSQVRJT04sIHsgLmk2NCA9IC0xIH0sIC0x LCBJTlQ2NF9NQVgsIEZMQUdTIH0sICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICJzYXIiLCAic2V0IHZpZGVvIHNhbXBsZSBhc3Bl Y3QgcmF0aW8iLCBPRkZTRVQoc2FyKSwgQVZfT1BUX1RZUEVfUkFUSU9OQUwsIHsgLmRibCA9IDEg fSwgIDAsIElOVF9NQVgsIEZMQUdTIH0sICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgImZvcm1hdCIsICJPdXRwdXQgdmlkZW8g Zm9ybWF0IChzb2Z0d2FyZSBmb3JtYXQgb2YgaGFyZHdhcmUgZnJhbWVzKSIsIE9GRlNFVChvdXRf Zm9ybWF0X3N0cmluZyksIEFWX09QVF9UWVBFX1NUUklORywgLmZsYWdzID0gRkxBR1MgfSwKKwor c3RhdGljIGNvbnN0IEFWT3B0aW9uIGNvbG9yX3Z1bGthbl9vcHRpb25zW10gPSB7CisgICAgeyAi Y29sb3IiLCAic2V0IGNvbG9yIiwgT0ZGU0VUKGNvbG9yX3JnYmEpLCBBVl9PUFRfVFlQRV9DT0xP Uiwgey5zdHIgPSAiYmxhY2sifSwgMCwgMCwgRkxBR1MgfSwKKyAgICB7ICJjIiwgICAgICJzZXQg Y29sb3IiLCBPRkZTRVQoY29sb3JfcmdiYSksIEFWX09QVF9UWVBFX0NPTE9SLCB7LnN0ciA9ICJi bGFjayJ9LCAwLCAwLCBGTEFHUyB9LAorICAgIENPTU1PTl9PUFRTCisgICAgeyAib3V0X3Jhbmdl IiwgIk91dHB1dCBjb2xvdXIgcmFuZ2UgKGZyb20gMCB0byAyKSAoZGVmYXVsdCAwKSIsIE9GRlNF VChvdXRfcmFuZ2UpLCBBVl9PUFRfVFlQRV9JTlQsIHsuaTY0ID0gQVZDT0xfUkFOR0VfVU5TUEVD SUZJRUR9LCBBVkNPTF9SQU5HRV9VTlNQRUNJRklFRCwgQVZDT0xfUkFOR0VfSlBFRywgLmZsYWdz ID0gRkxBR1MsIC51bml0ID0gInJhbmdlIiB9LAorICAgICAgICB7ICJmdWxsIiwgIkZ1bGwgcmFu Z2UiLCAwLCBBVl9PUFRfVFlQRV9DT05TVCwgeyAuaTY0ID0gQVZDT0xfUkFOR0VfSlBFRyB9LCAw LCAwLCBGTEFHUywgLnVuaXQgPSAicmFuZ2UiIH0sCisgICAgICAgIHsgImxpbWl0ZWQiLCAiTGlt aXRlZCByYW5nZSIsIDAsIEFWX09QVF9UWVBFX0NPTlNULCB7IC5pNjQgPSBBVkNPTF9SQU5HRV9N UEVHIH0sIDAsIDAsIEZMQUdTLCAudW5pdCA9ICJyYW5nZSIgfSwKKyAgICAgICAgeyAianBlZyIs ICJGdWxsIHJhbmdlIiwgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsgLmk2NCA9IEFWQ09MX1JBTkdF X0pQRUcgfSwgMCwgMCwgRkxBR1MsIC51bml0ID0gInJhbmdlIiB9LAorICAgICAgICB7ICJtcGVn IiwgIkxpbWl0ZWQgcmFuZ2UiLCAwLCBBVl9PUFRfVFlQRV9DT05TVCwgeyAuaTY0ID0gQVZDT0xf UkFOR0VfTVBFRyB9LCAwLCAwLCBGTEFHUywgLnVuaXQgPSAicmFuZ2UiIH0sCisgICAgICAgIHsg InR2IiwgIkxpbWl0ZWQgcmFuZ2UiLCAwLCBBVl9PUFRfVFlQRV9DT05TVCwgeyAuaTY0ID0gQVZD T0xfUkFOR0VfTVBFRyB9LCAwLCAwLCBGTEFHUywgLnVuaXQgPSAicmFuZ2UiIH0sCisgICAgICAg IHsgInBjIiwgIkZ1bGwgcmFuZ2UiLCAwLCBBVl9PUFRfVFlQRV9DT05TVCwgeyAuaTY0ID0gQVZD T0xfUkFOR0VfSlBFRyB9LCAwLCAwLCBGTEFHUywgLnVuaXQgPSAicmFuZ2UiIH0sCisgICAgeyBO VUxMIH0sCit9OworCitBVkZJTFRFUl9ERUZJTkVfQ0xBU1MoY29sb3JfdnVsa2FuKTsKKworc3Rh dGljIGNvbnN0IEFWRmlsdGVyUGFkIHRlc3RzcmNfdnVsa2FuX291dHB1dHNbXSA9IHsKKyAgICB7 CisgICAgICAgIC5uYW1lID0gImRlZmF1bHQiLAorICAgICAgICAudHlwZSA9IEFWTUVESUFfVFlQ RV9WSURFTywKKyAgICAgICAgLmNvbmZpZ19wcm9wcyA9IHRlc3RzcmNfdnVsa2FuX2NvbmZpZ19w cm9wcywKKyAgICB9LAorfTsKKworY29uc3QgRkZGaWx0ZXIgZmZfdnNyY19jb2xvcl92dWxrYW4g PSB7CisgICAgLnAubmFtZSAgICAgICAgID0gImNvbG9yX3Z1bGthbiIsCisgICAgLnAuZGVzY3Jp cHRpb24gID0gTlVMTF9JRl9DT05GSUdfU01BTEwoIkdlbmVyYXRlIGEgY29uc3RhbnQgY29sb3Ig KFZ1bGthbikiKSwKKyAgICAucC5pbnB1dHMgICAgICAgPSBOVUxMLAorICAgIC5wLmZsYWdzICAg ICAgICA9IEFWRklMVEVSX0ZMQUdfSFdERVZJQ0UsCisgICAgLnAucHJpdl9jbGFzcyAgID0gJmNv bG9yX3Z1bGthbl9jbGFzcywKKyAgICAucHJpdl9zaXplICAgICAgPSBzaXplb2YoVGVzdFNyY1Z1 bGthbkNvbnRleHQpLAorICAgIC5pbml0ICAgICAgICAgICA9ICZmZl92a19maWx0ZXJfaW5pdCwK KyAgICAudW5pbml0ICAgICAgICAgPSAmdGVzdHNyY192dWxrYW5fdW5pbml0LAorICAgIC5hY3Rp dmF0ZSAgICAgICA9IHRlc3RzcmNfdnVsa2FuX2FjdGl2YXRlLAorICAgIEZJTFRFUl9PVVRQVVRT KHRlc3RzcmNfdnVsa2FuX291dHB1dHMpLAorICAgIEZJTFRFUl9TSU5HTEVfUElYRk1UKEFWX1BJ WF9GTVRfVlVMS0FOKSwKKyAgICAuZmxhZ3NfaW50ZXJuYWwgPSBGRl9GSUxURVJfRkxBR19IV0ZS QU1FX0FXQVJFLAorfTsKLS0gCjIuNDkuMQoKCkZyb20gOWRlYTA0YzY2YTNiODA0N2FmMDU3M2Uz Y2U4ZDcxZDcyODU1MzUzYiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKRnJvbTogSmFtYWlrYTEg PGx1a2FzemN6MThAd3AucGw+CkRhdGU6IFdlZCwgMyBTZXAgMjAyNSAxMzowNzoxMiArMDAwMApT dWJqZWN0OiBbUEFUQ0ggMDMxLzExOF0gQ2hhbmdpbmcgdnVsa2FuIGZpbGUgZGlyZWN0b3J5Cgot LS0KIGxpYmF2ZmlsdGVyL3Z1bGthbl9maWx0ZXIuYyB8IDQ4MyAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCA0ODMgZGVsZXRpb25zKC0pCiBkZWxl dGUgbW9kZSAxMDA2NDQgbGliYXZmaWx0ZXIvdnVsa2FuX2ZpbHRlci5jCgpkaWZmIC0tZ2l0IGEv bGliYXZmaWx0ZXIvdnVsa2FuX2ZpbHRlci5jIGIvbGliYXZmaWx0ZXIvdnVsa2FuX2ZpbHRlci5j CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOWY0Nzc0MWVkLi4wMDAwMDAwMDAwCi0t LSBhL2xpYmF2ZmlsdGVyL3Z1bGthbl9maWx0ZXIuYworKysgL2Rldi9udWxsCkBAIC0xLDQ4MyAr MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSBMeW5uZQotICoKLSAqIFRoaXMgZmlsZSBpcyBw YXJ0IG9mIEZGbXBlZy4KLSAqCi0gKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0 aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMi4xIG9mIHRo ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAq IEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs LAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg d2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv cHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0 aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRp b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIx MTAtMTMwMSBVU0EKLSAqLwotCi0jaW5jbHVkZSAiZmlsdGVycy5oIgotI2luY2x1ZGUgInZ1bGth bl9maWx0ZXIuaCIKLSNpbmNsdWRlICJsaWJhdnV0aWwvdnVsa2FuX2xvYWRlci5oIgotCi1pbnQg ZmZfdmtfZmlsdGVyX2luaXRfY29udGV4dChBVkZpbHRlckNvbnRleHQgKmF2Y3R4LCBGRlZ1bGth bkNvbnRleHQgKnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVkJ1ZmZlclJlZiAq ZnJhbWVzX3JlZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3aWR0aCwgaW50 IGhlaWdodCwgZW51bSBBVlBpeGVsRm9ybWF0IHN3X2Zvcm1hdCkKLXsKLSAgICBpbnQgZXJyOwot ICAgIEFWSFdGcmFtZXNDb250ZXh0ICpmcmFtZXNfY3R4OwotICAgIEFWSFdEZXZpY2VDb250ZXh0 ICpkZXZpY2VfY3R4OwotICAgIEFWVnVsa2FuRnJhbWVzQ29udGV4dCAqdmtfZnJhbWVzOwotICAg IEFWVnVsa2FuRGV2aWNlQ29udGV4dCAqdmtfZGV2OwotICAgIEFWQnVmZmVyUmVmICpkZXZpY2Vf cmVmID0gYXZjdHgtPmh3X2RldmljZV9jdHg7Ci0KLSAgICAvKiBDaGVjayBpZiBjb250ZXh0IGlz IHJldXNhYmxlIGFzLWlzICovCi0gICAgaWYgKGZyYW1lc19yZWYpIHsKLSAgICAgICAgaW50IG5v X3N0b3JhZ2UgPSAwOwotICAgICAgICBGRlZ1bGthbkZ1bmN0aW9ucyAqdms7Ci0gICAgICAgIFZr SW1hZ2VVc2FnZUZsYWdCaXRzIHVzYWdlX3JlcTsKLSAgICAgICAgY29uc3QgVmtGb3JtYXQgKnN1 YiA9IGF2X3ZrZm10X2Zyb21fcGl4Zm10KHN3X2Zvcm1hdCk7Ci0KLSAgICAgICAgZnJhbWVzX2N0 eCA9IChBVkhXRnJhbWVzQ29udGV4dCAqKWZyYW1lc19yZWYtPmRhdGE7Ci0gICAgICAgIGRldmlj ZV9jdHggPSAoQVZIV0RldmljZUNvbnRleHQgKilmcmFtZXNfY3R4LT5kZXZpY2VfcmVmLT5kYXRh OwotICAgICAgICB2a19mcmFtZXMgPSBmcmFtZXNfY3R4LT5od2N0eDsKLSAgICAgICAgdmtfZGV2 ID0gZGV2aWNlX2N0eC0+aHdjdHg7Ci0KLSAgICAgICAgLyogV2lkdGggYW5kIGhlaWdodCBtaXNt YXRjaCAqLwotICAgICAgICBpZiAod2lkdGggIT0gZnJhbWVzX2N0eC0+d2lkdGggfHwKLSAgICAg ICAgICAgIGhlaWdodCAhPSBmcmFtZXNfY3R4LT5oZWlnaHQpCi0gICAgICAgICAgICBnb3RvIHNr aXA7Ci0KLSAgICAgICAgLyogRm9ybWF0IG1pc21hdGNoICovCi0gICAgICAgIGlmIChzd19mb3Jt YXQgIT0gZnJhbWVzX2N0eC0+c3dfZm9ybWF0KQotICAgICAgICAgICAgZ290byBza2lwOwotCi0g ICAgICAgIC8qIERvbid0IGxldCBsaW5lYXIgdGhyb3VnaC4gKi8KLSAgICAgICAgaWYgKHZrX2Zy YW1lcy0+dGlsaW5nID09IFZLX0lNQUdFX1RJTElOR19MSU5FQVIpCi0gICAgICAgICAgICBnb3Rv IHNraXA7Ci0KLSAgICAgICAgcy0+ZXh0ZW5zaW9ucyA9IGZmX3ZrX2V4dGVuc2lvbnNfdG9fbWFz ayh2a19kZXYtPmVuYWJsZWRfZGV2X2V4dGVuc2lvbnMsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdmtfZGV2LT5uYl9lbmFibGVkX2Rldl9leHRlbnNp b25zKTsKLQotICAgICAgICAvKiBNb3JlIGFkdmFuY2VkIGZvcm1hdCBjaGVja3MgKi8KLSAgICAg ICAgZXJyID0gZmZfdmtfbG9hZF9mdW5jdGlvbnMoZGV2aWNlX2N0eCwgJnMtPnZrZm4sIHMtPmV4 dGVuc2lvbnMsIDEsIDEpOwotICAgICAgICBpZiAoZXJyIDwgMCkKLSAgICAgICAgICAgIHJldHVy biBlcnI7Ci0gICAgICAgIHZrID0gJnMtPnZrZm47Ci0KLSAgICAgICAgLyogVXNhZ2UgbWlzbWF0 Y2ggKi8KLSAgICAgICAgdXNhZ2VfcmVxID0gVktfSU1BR0VfVVNBR0VfU0FNUExFRF9CSVQgfAot ICAgICAgICAgICAgICAgICAgICBWS19JTUFHRV9VU0FHRV9TVE9SQUdFX0JJVDsKLQotICAgICAg ICAvKiBJZiBmb3JtYXQgc3VwcG9ydHMgaGFyZHdhcmUgZW5jb2RpbmcsIG1ha2Ugc3VyZQotICAg ICAgICAgKiB0aGUgY29udGV4dCBpbmNsdWRlcyBpdC4gKi8KLSAgICAgICAgaWYgKHZrX2ZyYW1l cy0+Zm9ybWF0WzFdID09IFZLX0ZPUk1BVF9VTkRFRklORUQgJiYKLSAgICAgICAgICAgIChzLT5l eHRlbnNpb25zICYgKEZGX1ZLX0VYVF9WSURFT19FTkNPREVfUVVFVUUgfAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgRkZfVktfRVhUX1ZJREVPX01BSU5URU5BTkNFXzEpKSkgewotICAg ICAgICAgICAgVmtGb3JtYXRQcm9wZXJ0aWVzMyBmcHJvcHMgPSB7Ci0gICAgICAgICAgICAgICAg LnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfRk9STUFUX1BST1BFUlRJRVNfMywKLSAgICAgICAg ICAgIH07Ci0gICAgICAgICAgICBWa0Zvcm1hdFByb3BlcnRpZXMyIHByb3AgPSB7Ci0gICAgICAg ICAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfRk9STUFUX1BST1BFUlRJRVNfMiwK LSAgICAgICAgICAgICAgICAucE5leHQgPSAmZnByb3BzLAotICAgICAgICAgICAgfTsKLSAgICAg ICAgICAgIHZrLT5HZXRQaHlzaWNhbERldmljZUZvcm1hdFByb3BlcnRpZXMyKHZrX2Rldi0+cGh5 c19kZXYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB2a19mcmFtZXMtPmZvcm1hdFswXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICZwcm9wKTsKLSAgICAgICAgICAgIGlmIChmcHJvcHMub3B0aW1h bFRpbGluZ0ZlYXR1cmVzICYgVktfRk9STUFUX0ZFQVRVUkVfMl9WSURFT19FTkNPREVfSU5QVVRf QklUX0tIUikKLSAgICAgICAgICAgICAgICB1c2FnZV9yZXEgfD0gVktfSU1BR0VfVVNBR0VfVklE RU9fRU5DT0RFX1NSQ19CSVRfS0hSOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCh2a19mcmFt ZXMtPnVzYWdlICYgdXNhZ2VfcmVxKSAhPSB1c2FnZV9yZXEpCi0gICAgICAgICAgICBnb3RvIHNr aXA7Ci0KLSAgICAgICAgLyogQ2hlY2sgaWYgdGhlIHN1YmZvcm1hdHMgY2FuIGRvIHN0b3JhZ2Ug Ki8KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IHN1YltpXSAhPSBWS19GT1JNQVRfVU5ERUZJTkVE OyBpKyspIHsKLSAgICAgICAgICAgIFZrRm9ybWF0UHJvcGVydGllczIgcHJvcCA9IHsKLSAgICAg ICAgICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9GT1JNQVRfUFJPUEVSVElFU18y LAotICAgICAgICAgICAgfTsKLSAgICAgICAgICAgIHZrLT5HZXRQaHlzaWNhbERldmljZUZvcm1h dFByb3BlcnRpZXMyKHZrX2Rldi0+cGh5c19kZXYsIHN1YltpXSwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwcm9wKTsKLSAgICAgICAgICAgIG5v X3N0b3JhZ2UgfD0gIShwcm9wLmZvcm1hdFByb3BlcnRpZXMub3B0aW1hbFRpbGluZ0ZlYXR1cmVz ICYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19GT1JNQVRfRkVBVFVSRV8yX1NUT1JB R0VfSU1BR0VfQklUKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIENoZWNrIGlmIGl0J3MgdXNh YmxlICovCi0gICAgICAgIGlmIChub19zdG9yYWdlKSB7Ci1za2lwOgotICAgICAgICAgICAgYXZf bG9nKGF2Y3R4LCBBVl9MT0dfVkVSQk9TRSwgIkNhbm5vdCByZXVzZSBjb250ZXh0LCBjcmVhdGlu ZyBhIG5ldyBvbmVcbiIpOwotICAgICAgICAgICAgZGV2aWNlX3JlZiA9IGZyYW1lc19jdHgtPmRl dmljZV9yZWY7Ci0gICAgICAgICAgICBmcmFtZXNfcmVmID0gTlVMTDsKLSAgICAgICAgfSBlbHNl IHsKLSAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX1ZFUkJPU0UsICJSZXVzaW5nIGV4 aXN0aW5nIGZyYW1lcyBjb250ZXh0XG4iKTsKLSAgICAgICAgICAgIGZyYW1lc19yZWYgPSBhdl9i dWZmZXJfcmVmKGZyYW1lc19yZWYpOwotICAgICAgICAgICAgaWYgKCFmcmFtZXNfcmVmKQotICAg ICAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7Ci0gICAgICAgIH0KLSAgICB9Ci0K LSAgICBpZiAoIWZyYW1lc19yZWYpIHsKLSAgICAgICAgaWYgKCFkZXZpY2VfcmVmKSB7Ci0gICAg ICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwKLSAgICAgICAgICAgICAgICAgICAi VnVsa2FuIGZpbHRlcmluZyByZXF1aXJlcyBhIGRldmljZSBjb250ZXh0IVxuIik7Ci0gICAgICAg ICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOwotICAgICAgICB9Ci0KLSAgICAgICAgZnJhbWVz X3JlZiA9IGF2X2h3ZnJhbWVfY3R4X2FsbG9jKGRldmljZV9yZWYpOwotCi0gICAgICAgIGZyYW1l c19jdHggPSAoQVZIV0ZyYW1lc0NvbnRleHQgKilmcmFtZXNfcmVmLT5kYXRhOwotICAgICAgICBm cmFtZXNfY3R4LT5mb3JtYXQgICAgPSBBVl9QSVhfRk1UX1ZVTEtBTjsKLSAgICAgICAgZnJhbWVz X2N0eC0+c3dfZm9ybWF0ID0gc3dfZm9ybWF0OwotICAgICAgICBmcmFtZXNfY3R4LT53aWR0aCAg ICAgPSB3aWR0aDsKLSAgICAgICAgZnJhbWVzX2N0eC0+aGVpZ2h0ICAgID0gaGVpZ2h0OwotCi0g ICAgICAgIHZrX2ZyYW1lcyA9IGZyYW1lc19jdHgtPmh3Y3R4OwotICAgICAgICB2a19mcmFtZXMt PnRpbGluZyA9IFZLX0lNQUdFX1RJTElOR19PUFRJTUFMOwotICAgICAgICB2a19mcmFtZXMtPnVz YWdlICA9IFZLX0lNQUdFX1VTQUdFX1NBTVBMRURfQklUIHwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICBWS19JTUFHRV9VU0FHRV9TVE9SQUdFX0JJVCB8Ci0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgVktfSU1BR0VfVVNBR0VfVFJBTlNGRVJfU1JDX0JJVDsKLQotICAgICAgICBlcnIg PSBhdl9od2ZyYW1lX2N0eF9pbml0KGZyYW1lc19yZWYpOwotICAgICAgICBpZiAoZXJyIDwgMCkg ewotICAgICAgICAgICAgYXZfYnVmZmVyX3VucmVmKCZmcmFtZXNfcmVmKTsKLSAgICAgICAgICAg IHJldHVybiBlcnI7Ci0gICAgICAgIH0KLQotICAgICAgICBkZXZpY2VfY3R4ID0gKEFWSFdEZXZp Y2VDb250ZXh0ICopZnJhbWVzX2N0eC0+ZGV2aWNlX3JlZi0+ZGF0YTsKLSAgICAgICAgdmtfZGV2 ID0gZGV2aWNlX2N0eC0+aHdjdHg7Ci0gICAgfQotCi0gICAgcy0+ZXh0ZW5zaW9ucyA9IGZmX3Zr X2V4dGVuc2lvbnNfdG9fbWFzayh2a19kZXYtPmVuYWJsZWRfZGV2X2V4dGVuc2lvbnMsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2a19kZXYtPm5iX2VuYWJs ZWRfZGV2X2V4dGVuc2lvbnMpOwotICAgIHMtPmV4dGVuc2lvbnMgfD0gZmZfdmtfZXh0ZW5zaW9u c190b19tYXNrKHZrX2Rldi0+ZW5hYmxlZF9pbnN0X2V4dGVuc2lvbnMsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmtfZGV2LT5uYl9lbmFibGVkX2luc3Rf ZXh0ZW5zaW9ucyk7Ci0KLSAgICBlcnIgPSBmZl92a19sb2FkX2Z1bmN0aW9ucyhkZXZpY2VfY3R4 LCAmcy0+dmtmbiwgcy0+ZXh0ZW5zaW9ucywgMSwgMSk7Ci0gICAgaWYgKGVyciA8IDApIHsKLSAg ICAgICAgYXZfYnVmZmVyX3VucmVmKCZmcmFtZXNfcmVmKTsKLSAgICAgICAgcmV0dXJuIGVycjsK LSAgICB9Ci0KLSAgICBzLT5mcmFtZXNfcmVmID0gZnJhbWVzX3JlZjsKLSAgICBzLT5mcmFtZXMg PSBmcmFtZXNfY3R4OwotICAgIHMtPmh3ZmMgPSB2a19mcmFtZXM7Ci0gICAgcy0+ZGV2aWNlID0g ZGV2aWNlX2N0eDsKLSAgICBzLT5od2N0eCA9IGRldmljZV9jdHgtPmh3Y3R4OwotCi0gICAgZXJy ID0gZmZfdmtfbG9hZF9wcm9wcyhzKTsKLSAgICBpZiAoZXJyIDwgMCkKLSAgICAgICAgYXZfYnVm ZmVyX3VucmVmKCZzLT5mcmFtZXNfcmVmKTsKLQotICAgIHJldHVybiBlcnI7Ci19Ci0KLWludCBm Zl92a19maWx0ZXJfY29uZmlnX2lucHV0KEFWRmlsdGVyTGluayAqaW5saW5rKQotewotICAgIEZp bHRlckxpbmsgKmwgPSBmZl9maWx0ZXJfbGluayhpbmxpbmspOwotICAgIEFWSFdGcmFtZXNDb250 ZXh0ICppbnB1dF9mcmFtZXM7Ci0gICAgQVZGaWx0ZXJDb250ZXh0ICphdmN0eCA9IGlubGluay0+ ZHN0OwotICAgIEZGVnVsa2FuQ29udGV4dCAqcyA9IGlubGluay0+ZHN0LT5wcml2OwotCi0gICAg aWYgKCFsLT5od19mcmFtZXNfY3R4KSB7Ci0gICAgICAgIGF2X2xvZyhpbmxpbmstPmRzdCwgQVZf TE9HX0VSUk9SLCAiVnVsa2FuIGZpbHRlcmluZyByZXF1aXJlcyBhICIKLSAgICAgICAgICAgICAg ICJoYXJkd2FyZSBmcmFtZXMgY29udGV4dCBvbiB0aGUgaW5wdXQuXG4iKTsKLSAgICAgICAgcmV0 dXJuIEFWRVJST1IoRUlOVkFMKTsKLSAgICB9Ci0KLSAgICBpbnB1dF9mcmFtZXMgPSAoQVZIV0Zy YW1lc0NvbnRleHQgKilsLT5od19mcmFtZXNfY3R4LT5kYXRhOwotICAgIGlmIChpbnB1dF9mcmFt ZXMtPmZvcm1hdCAhPSBBVl9QSVhfRk1UX1ZVTEtBTikKLSAgICAgICAgcmV0dXJuIEFWRVJST1Io RUlOVkFMKTsKLQotICAgIC8qIEV4dHJhY3QgdGhlIGRldmljZSBhbmQgZGVmYXVsdCBvdXRwdXQg Zm9ybWF0IGZyb20gdGhlIGZpcnN0IGlucHV0LiAqLwotICAgIGlmIChhdmN0eC0+aW5wdXRzWzBd ICE9IGlubGluaykKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAvKiBTYXZlIHRoZSByZWYsIHdp dGhvdXQgcmVmZmluZyBpdCAqLwotICAgIHMtPmlucHV0X2ZyYW1lc19yZWYgPSBsLT5od19mcmFt ZXNfY3R4OwotCi0gICAgLyogRGVmYXVsdHMgKi8KLSAgICBzLT5pbnB1dF9mb3JtYXQgPSBpbnB1 dF9mcmFtZXMtPnN3X2Zvcm1hdDsKLSAgICBzLT5vdXRwdXRfZm9ybWF0ID0gaW5wdXRfZnJhbWVz LT5zd19mb3JtYXQ7Ci0gICAgcy0+b3V0cHV0X3dpZHRoID0gaW5saW5rLT53OwotICAgIHMtPm91 dHB1dF9oZWlnaHQgPSBpbmxpbmstPmg7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotaW50IGZmX3Zr X2ZpbHRlcl9jb25maWdfb3V0cHV0KEFWRmlsdGVyTGluayAqb3V0bGluaykKLXsKLSAgICBpbnQg ZXJyOwotICAgIEZpbHRlckxpbmsgKmwgPSBmZl9maWx0ZXJfbGluayhvdXRsaW5rKTsKLSAgICBG RlZ1bGthbkNvbnRleHQgKnMgPSBvdXRsaW5rLT5zcmMtPnByaXY7Ci0KLSAgICBhdl9idWZmZXJf dW5yZWYoJmwtPmh3X2ZyYW1lc19jdHgpOwotCi0gICAgZXJyID0gZmZfdmtfZmlsdGVyX2luaXRf Y29udGV4dChvdXRsaW5rLT5zcmMsIHMsIHMtPmlucHV0X2ZyYW1lc19yZWYsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzLT5vdXRwdXRfd2lkdGgsIHMtPm91dHB1dF9oZWln aHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLT5vdXRwdXRfZm9ybWF0 KTsKLSAgICBpZiAoZXJyIDwgMCkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIGwtPmh3X2Zy YW1lc19jdHggPSBhdl9idWZmZXJfcmVmKHMtPmZyYW1lc19yZWYpOwotICAgIGlmICghbC0+aHdf ZnJhbWVzX2N0eCkKLSAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKLQotICAgIG91dGxp bmstPncgPSBzLT5vdXRwdXRfd2lkdGg7Ci0gICAgb3V0bGluay0+aCA9IHMtPm91dHB1dF9oZWln aHQ7Ci0KLSAgICByZXR1cm4gZXJyOwotfQotCi1pbnQgZmZfdmtfZmlsdGVyX2luaXQoQVZGaWx0 ZXJDb250ZXh0ICphdmN0eCkKLXsKLSAgICBGRlZ1bGthbkNvbnRleHQgKnMgPSBhdmN0eC0+cHJp djsKLQotICAgIHMtPm91dHB1dF9mb3JtYXQgPSBBVl9QSVhfRk1UX05PTkU7Ci0KLSAgICByZXR1 cm4gMDsKLX0KLQotaW50IGZmX3ZrX2ZpbHRlcl9wcm9jZXNzX3NpbXBsZShGRlZ1bGthbkNvbnRl eHQgKnZrY3R4LCBGRlZrRXhlY1Bvb2wgKmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEZGVnVsa2FuU2hhZGVyICpzaGQsIEFWRnJhbWUgKm91dF9mLCBBVkZyYW1lICppbl9mLAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWa1NhbXBsZXIgc2FtcGxlciwgdm9pZCAq cHVzaF9zcmMsIHNpemVfdCBwdXNoX3NpemUpCi17Ci0gICAgaW50IGVyciA9IDA7Ci0gICAgRkZW dWxrYW5GdW5jdGlvbnMgKnZrID0gJnZrY3R4LT52a2ZuOwotICAgIFZrSW1hZ2VWaWV3IGluX3Zp ZXdzW0FWX05VTV9EQVRBX1BPSU5URVJTXTsKLSAgICBWa0ltYWdlVmlldyBvdXRfdmlld3NbQVZf TlVNX0RBVEFfUE9JTlRFUlNdOwotICAgIFZrSW1hZ2VNZW1vcnlCYXJyaWVyMiBpbWdfYmFyWzM3 XTsKLSAgICBpbnQgbmJfaW1nX2JhciA9IDA7Ci0gICAgVmtJbWFnZUxheW91dCBpbl9sYXlvdXQg PSBzYW1wbGVyICE9IFZLX05VTExfSEFORExFID8KLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFZLX0lNQUdFX0xBWU9VVF9TSEFERVJfUkVBRF9PTkxZX09QVElNQUwgOgotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgVktfSU1BR0VfTEFZT1VUX0dFTkVSQUw7Ci0KLSAgICAvKiBV cGRhdGUgZGVzY3JpcHRvcnMgYW5kIGluaXQgdGhlIGV4ZWMgY29udGV4dCAqLwotICAgIEZGVmtF eGVjQ29udGV4dCAqZXhlYyA9IGZmX3ZrX2V4ZWNfZ2V0KHZrY3R4LCBlKTsKLSAgICBmZl92a19l eGVjX3N0YXJ0KHZrY3R4LCBleGVjKTsKLQotICAgIFJFVChmZl92a19leGVjX2FkZF9kZXBfZnJh bWUodmtjdHgsIGV4ZWMsIG91dF9mLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg VktfUElQRUxJTkVfU1RBR0VfMl9BTExfQ09NTUFORFNfQklULAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgVktfUElQRUxJTkVfU1RBR0VfMl9DT01QVVRFX1NIQURFUl9CSVQpKTsK LSAgICBSRVQoZmZfdmtfY3JlYXRlX2ltYWdldmlld3ModmtjdHgsIGV4ZWMsIG91dF92aWV3cywg b3V0X2YsIEZGX1ZLX1JFUF9GTE9BVCkpOwotICAgIGZmX3ZrX3NoYWRlcl91cGRhdGVfaW1nX2Fy cmF5KHZrY3R4LCBleGVjLCBzaGQsIG91dF9mLCBvdXRfdmlld3MsIDAsICEhaW5fZiwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19JTUFHRV9MQVlPVVRfR0VORVJBTCwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19OVUxMX0hBTkRMRSk7Ci0gICAgaWYg KGluX2YpIHsKLSAgICAgICAgUkVUKGZmX3ZrX2V4ZWNfYWRkX2RlcF9mcmFtZSh2a2N0eCwgZXhl YywgaW5fZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19QSVBFTElO RV9TVEFHRV8yX0FMTF9DT01NQU5EU19CSVQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgVktfUElQRUxJTkVfU1RBR0VfMl9DT01QVVRFX1NIQURFUl9CSVQpKTsKLSAgICAg ICAgUkVUKGZmX3ZrX2NyZWF0ZV9pbWFnZXZpZXdzKHZrY3R4LCBleGVjLCBpbl92aWV3cywgIGlu X2YsIEZGX1ZLX1JFUF9GTE9BVCkpOwotICAgICAgICBmZl92a19zaGFkZXJfdXBkYXRlX2ltZ19h cnJheSh2a2N0eCwgZXhlYywgc2hkLCAgaW5fZiwgIGluX3ZpZXdzLCAwLCAwLAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbl9sYXlvdXQsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXIpOwotICAgIH0KLQotICAgIC8qIEJpbmQgcGlw ZWxpbmUsIHVwZGF0ZSBwdXNoIGRhdGEgKi8KLSAgICBmZl92a19leGVjX2JpbmRfc2hhZGVyKHZr Y3R4LCBleGVjLCBzaGQpOwotICAgIGlmIChwdXNoX3NyYykKLSAgICAgICAgZmZfdmtfc2hhZGVy X3VwZGF0ZV9wdXNoX2NvbnN0KHZrY3R4LCBleGVjLCBzaGQsIFZLX1NIQURFUl9TVEFHRV9DT01Q VVRFX0JJVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIHB1c2hf c2l6ZSwgcHVzaF9zcmMpOwotCi0gICAgLyogQWRkIGRhdGEgc3luYyBiYXJyaWVycyAqLwotICAg IGZmX3ZrX2ZyYW1lX2JhcnJpZXIodmtjdHgsIGV4ZWMsIG91dF9mLCBpbWdfYmFyLCAmbmJfaW1n X2JhciwKLSAgICAgICAgICAgICAgICAgICAgICAgIFZLX1BJUEVMSU5FX1NUQUdFXzJfQUxMX0NP TU1BTkRTX0JJVCwKLSAgICAgICAgICAgICAgICAgICAgICAgIFZLX1BJUEVMSU5FX1NUQUdFXzJf Q09NUFVURV9TSEFERVJfQklULAotICAgICAgICAgICAgICAgICAgICAgICAgVktfQUNDRVNTX1NI QURFUl9XUklURV9CSVQsCi0gICAgICAgICAgICAgICAgICAgICAgICBWS19JTUFHRV9MQVlPVVRf R0VORVJBTCwKLSAgICAgICAgICAgICAgICAgICAgICAgIFZLX1FVRVVFX0ZBTUlMWV9JR05PUkVE KTsKLSAgICBpZiAoaW5fZikKLSAgICAgICAgZmZfdmtfZnJhbWVfYmFycmllcih2a2N0eCwgZXhl YywgaW5fZiwgaW1nX2JhciwgJm5iX2ltZ19iYXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgVktfUElQRUxJTkVfU1RBR0VfMl9BTExfQ09NTUFORFNfQklULAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFZLX1BJUEVMSU5FX1NUQUdFXzJfQ09NUFVURV9TSEFERVJfQklULAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFZLX0FDQ0VTU19TSEFERVJfUkVBRF9CSVQsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgaW5fbGF5b3V0LAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFZLX1FVRVVFX0ZBTUlMWV9JR05PUkVEKTsKLQotICAgIHZrLT5DbWRQaXBlbGluZUJh cnJpZXIyKGV4ZWMtPmJ1ZiwgJihWa0RlcGVuZGVuY3lJbmZvKSB7Ci0gICAgICAgICAgICAuc1R5 cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9ERVBFTkRFTkNZX0lORk8sCi0gICAgICAgICAgICAucElt YWdlTWVtb3J5QmFycmllcnMgPSBpbWdfYmFyLAotICAgICAgICAgICAgLmltYWdlTWVtb3J5QmFy cmllckNvdW50ID0gbmJfaW1nX2JhciwKLSAgICAgICAgfSk7Ci0KLSAgICB2ay0+Q21kRGlzcGF0 Y2goZXhlYy0+YnVmLAotICAgICAgICAgICAgICAgICAgICBGRkFMSUdOKHZrY3R4LT5vdXRwdXRf d2lkdGgsICBzaGQtPmxnX3NpemVbMF0pL3NoZC0+bGdfc2l6ZVswXSwKLSAgICAgICAgICAgICAg ICAgICAgRkZBTElHTih2a2N0eC0+b3V0cHV0X2hlaWdodCwgc2hkLT5sZ19zaXplWzFdKS9zaGQt PmxnX3NpemVbMV0sCi0gICAgICAgICAgICAgICAgICAgIHNoZC0+bGdfc2l6ZVsyXSk7Ci0KLSAg ICByZXR1cm4gZmZfdmtfZXhlY19zdWJtaXQodmtjdHgsIGV4ZWMpOwotZmFpbDoKLSAgICBmZl92 a19leGVjX2Rpc2NhcmRfZGVwcyh2a2N0eCwgZXhlYyk7Ci0gICAgcmV0dXJuIGVycjsKLX0KLQot aW50IGZmX3ZrX2ZpbHRlcl9wcm9jZXNzXzJwYXNzKEZGVnVsa2FuQ29udGV4dCAqdmtjdHgsIEZG VmtFeGVjUG9vbCAqZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGRlZ1bGthblNo YWRlciAqc2hkX2xpc3RbMl0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVZGcmFt ZSAqb3V0LCBBVkZyYW1lICp0bXAsIEFWRnJhbWUgKmluLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFZrU2FtcGxlciBzYW1wbGVyLCB2b2lkICpwdXNoX3NyYywgc2l6ZV90IHB1c2hf c2l6ZSkKLXsKLSAgICBpbnQgZXJyID0gMDsKLSAgICBGRlZ1bGthbkZ1bmN0aW9ucyAqdmsgPSAm dmtjdHgtPnZrZm47Ci0gICAgVmtJbWFnZVZpZXcgaW5fdmlld3NbQVZfTlVNX0RBVEFfUE9JTlRF UlNdOwotICAgIFZrSW1hZ2VWaWV3IHRtcF92aWV3c1tBVl9OVU1fREFUQV9QT0lOVEVSU107Ci0g ICAgVmtJbWFnZVZpZXcgb3V0X3ZpZXdzW0FWX05VTV9EQVRBX1BPSU5URVJTXTsKLSAgICBWa0lt YWdlTWVtb3J5QmFycmllcjIgaW1nX2JhclszN107Ci0gICAgaW50IG5iX2ltZ19iYXIgPSAwOwot ICAgIFZrSW1hZ2VMYXlvdXQgaW5fbGF5b3V0ID0gc2FtcGxlciAhPSBWS19OVUxMX0hBTkRMRSA/ Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19JTUFHRV9MQVlPVVRfU0hBREVSX1JF QURfT05MWV9PUFRJTUFMIDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZLX0lNQUdF X0xBWU9VVF9HRU5FUkFMOwotCi0gICAgLyogVXBkYXRlIGRlc2NyaXB0b3JzIGFuZCBpbml0IHRo ZSBleGVjIGNvbnRleHQgKi8KLSAgICBGRlZrRXhlY0NvbnRleHQgKmV4ZWMgPSBmZl92a19leGVj X2dldCh2a2N0eCwgZSk7Ci0gICAgZmZfdmtfZXhlY19zdGFydCh2a2N0eCwgZXhlYyk7Ci0KLSAg ICBSRVQoZmZfdmtfZXhlY19hZGRfZGVwX2ZyYW1lKHZrY3R4LCBleGVjLCBpbiwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFZLX1BJUEVMSU5FX1NUQUdFXzJfQUxMX0NPTU1BTkRT X0JJVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZLX1BJUEVMSU5FX1NUQUdF XzJfQ09NUFVURV9TSEFERVJfQklUKSk7Ci0gICAgUkVUKGZmX3ZrX2V4ZWNfYWRkX2RlcF9mcmFt ZSh2a2N0eCwgZXhlYywgdG1wLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktf UElQRUxJTkVfU1RBR0VfMl9BTExfQ09NTUFORFNfQklULAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgVktfUElQRUxJTkVfU1RBR0VfMl9DT01QVVRFX1NIQURFUl9CSVQpKTsKLSAg ICBSRVQoZmZfdmtfZXhlY19hZGRfZGVwX2ZyYW1lKHZrY3R4LCBleGVjLCBvdXQsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBWS19QSVBFTElORV9TVEFHRV8yX0FMTF9DT01NQU5E U19CSVQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19QSVBFTElORV9TVEFH RV8yX0NPTVBVVEVfU0hBREVSX0JJVCkpOwotCi0gICAgUkVUKGZmX3ZrX2NyZWF0ZV9pbWFnZXZp ZXdzKHZrY3R4LCBleGVjLCBpbl92aWV3cywgIGluLCBGRl9WS19SRVBfRkxPQVQpKTsKLSAgICBS RVQoZmZfdmtfY3JlYXRlX2ltYWdldmlld3ModmtjdHgsIGV4ZWMsIHRtcF92aWV3cywgdG1wLCBG Rl9WS19SRVBfRkxPQVQpKTsKLSAgICBSRVQoZmZfdmtfY3JlYXRlX2ltYWdldmlld3ModmtjdHgs IGV4ZWMsIG91dF92aWV3cywgb3V0LCBGRl9WS19SRVBfRkxPQVQpKTsKLQotICAgIGZmX3ZrX2Zy YW1lX2JhcnJpZXIodmtjdHgsIGV4ZWMsIGluLCBpbWdfYmFyLCAmbmJfaW1nX2JhciwKLSAgICAg ICAgICAgICAgICAgICAgICAgIFZLX1BJUEVMSU5FX1NUQUdFXzJfQUxMX0NPTU1BTkRTX0JJVCwK LSAgICAgICAgICAgICAgICAgICAgICAgIFZLX1BJUEVMSU5FX1NUQUdFXzJfQ09NUFVURV9TSEFE RVJfQklULAotICAgICAgICAgICAgICAgICAgICAgICAgVktfQUNDRVNTX1NIQURFUl9SRUFEX0JJ VCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGluX2xheW91dCwKLSAgICAgICAgICAgICAgICAg ICAgICAgIFZLX1FVRVVFX0ZBTUlMWV9JR05PUkVEKTsKLSAgICBmZl92a19mcmFtZV9iYXJyaWVy KHZrY3R4LCBleGVjLCB0bXAsIGltZ19iYXIsICZuYl9pbWdfYmFyLAotICAgICAgICAgICAgICAg ICAgICAgICAgVktfUElQRUxJTkVfU1RBR0VfMl9BTExfQ09NTUFORFNfQklULAotICAgICAgICAg ICAgICAgICAgICAgICAgVktfUElQRUxJTkVfU1RBR0VfMl9DT01QVVRFX1NIQURFUl9CSVQsCi0g ICAgICAgICAgICAgICAgICAgICAgICBWS19BQ0NFU1NfU0hBREVSX1JFQURfQklUIHwgVktfQUND RVNTX1NIQURFUl9XUklURV9CSVQsCi0gICAgICAgICAgICAgICAgICAgICAgICBWS19JTUFHRV9M QVlPVVRfR0VORVJBTCwKLSAgICAgICAgICAgICAgICAgICAgICAgIFZLX1FVRVVFX0ZBTUlMWV9J R05PUkVEKTsKLSAgICBmZl92a19mcmFtZV9iYXJyaWVyKHZrY3R4LCBleGVjLCBvdXQsIGltZ19i YXIsICZuYl9pbWdfYmFyLAotICAgICAgICAgICAgICAgICAgICAgICAgVktfUElQRUxJTkVfU1RB R0VfMl9BTExfQ09NTUFORFNfQklULAotICAgICAgICAgICAgICAgICAgICAgICAgVktfUElQRUxJ TkVfU1RBR0VfMl9DT01QVVRFX1NIQURFUl9CSVQsCi0gICAgICAgICAgICAgICAgICAgICAgICBW S19BQ0NFU1NfU0hBREVSX1dSSVRFX0JJVCwKLSAgICAgICAgICAgICAgICAgICAgICAgIFZLX0lN QUdFX0xBWU9VVF9HRU5FUkFMLAotICAgICAgICAgICAgICAgICAgICAgICAgVktfUVVFVUVfRkFN SUxZX0lHTk9SRUQpOwotCi0gICAgdmstPkNtZFBpcGVsaW5lQmFycmllcjIoZXhlYy0+YnVmLCAm KFZrRGVwZW5kZW5jeUluZm8pIHsKLSAgICAgICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9U WVBFX0RFUEVOREVOQ1lfSU5GTywKLSAgICAgICAgICAgIC5wSW1hZ2VNZW1vcnlCYXJyaWVycyA9 IGltZ19iYXIsCi0gICAgICAgICAgICAuaW1hZ2VNZW1vcnlCYXJyaWVyQ291bnQgPSBuYl9pbWdf YmFyLAotICAgICAgICB9KTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjsgaSsrKSB7Ci0g ICAgICAgIEZGVnVsa2FuU2hhZGVyICpzaGQgPSBzaGRfbGlzdFtpXTsKLSAgICAgICAgQVZGcmFt ZSAqc3JjX2YgPSAhaSA/IGluIDogdG1wOwotICAgICAgICBBVkZyYW1lICpkc3RfZiA9ICFpID8g dG1wIDogb3V0OwotICAgICAgICBWa0ltYWdlVmlldyAqc3JjX3ZpZXdzID0gIWkgPyBpbl92aWV3 cyA6IHRtcF92aWV3czsKLSAgICAgICAgVmtJbWFnZVZpZXcgKmRzdF92aWV3cyA9ICFpID8gdG1w X3ZpZXdzIDogb3V0X3ZpZXdzOwotCi0gICAgICAgIGZmX3ZrX3NoYWRlcl91cGRhdGVfaW1nX2Fy cmF5KHZrY3R4LCBleGVjLCBzaGQsIHNyY19mLCBzcmNfdmlld3MsIDAsIDAsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICFpID8gaW5fbGF5b3V0IDoKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19JTUFHRV9MQVlPVVRfR0VORVJBTCwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlcik7Ci0gICAgICAg IGZmX3ZrX3NoYWRlcl91cGRhdGVfaW1nX2FycmF5KHZrY3R4LCBleGVjLCBzaGQsIGRzdF9mLCBk c3Rfdmlld3MsIDAsIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZL X0lNQUdFX0xBWU9VVF9HRU5FUkFMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBWS19OVUxMX0hBTkRMRSk7Ci0KLSAgICAgICAgLyogQmluZCBwaXBlbGluZSwgdXBkYXRl IHB1c2ggZGF0YSAqLwotICAgICAgICBmZl92a19leGVjX2JpbmRfc2hhZGVyKHZrY3R4LCBleGVj LCBzaGQpOwotICAgICAgICBpZiAocHVzaF9zcmMpCi0gICAgICAgICAgICBmZl92a19zaGFkZXJf dXBkYXRlX3B1c2hfY29uc3QodmtjdHgsIGV4ZWMsIHNoZCwgVktfU0hBREVSX1NUQUdFX0NPTVBV VEVfQklULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIHB1 c2hfc2l6ZSwgcHVzaF9zcmMpOwotCi0gICAgICAgIHZrLT5DbWREaXNwYXRjaChleGVjLT5idWYs Ci0gICAgICAgICAgICAgICAgICAgICAgICBGRkFMSUdOKHZrY3R4LT5vdXRwdXRfd2lkdGgsICBz aGQtPmxnX3NpemVbMF0pL3NoZC0+bGdfc2l6ZVswXSwKLSAgICAgICAgICAgICAgICAgICAgICAg IEZGQUxJR04odmtjdHgtPm91dHB1dF9oZWlnaHQsIHNoZC0+bGdfc2l6ZVsxXSkvc2hkLT5sZ19z aXplWzFdLAotICAgICAgICAgICAgICAgICAgICAgICAgc2hkLT5sZ19zaXplWzJdKTsKLSAgICB9 Ci0KLSAgICByZXR1cm4gZmZfdmtfZXhlY19zdWJtaXQodmtjdHgsIGV4ZWMpOwotZmFpbDoKLSAg ICBmZl92a19leGVjX2Rpc2NhcmRfZGVwcyh2a2N0eCwgZXhlYyk7Ci0gICAgcmV0dXJuIGVycjsK LX0KLQotaW50IGZmX3ZrX2ZpbHRlcl9wcm9jZXNzX05pbihGRlZ1bGthbkNvbnRleHQgKnZrY3R4 LCBGRlZrRXhlY1Bvb2wgKmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZGVnVsa2Fu U2hhZGVyICpzaGQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFWRnJhbWUgKm91dCwg QVZGcmFtZSAqaW5bXSwgaW50IG5iX2luLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBW a1NhbXBsZXIgc2FtcGxlciwgdm9pZCAqcHVzaF9zcmMsIHNpemVfdCBwdXNoX3NpemUpCi17Ci0g ICAgaW50IGVyciA9IDA7Ci0gICAgRkZWdWxrYW5GdW5jdGlvbnMgKnZrID0gJnZrY3R4LT52a2Zu OwotICAgIFZrSW1hZ2VWaWV3IGluX3ZpZXdzWzE2XVtBVl9OVU1fREFUQV9QT0lOVEVSU107Ci0g ICAgVmtJbWFnZVZpZXcgb3V0X3ZpZXdzW0FWX05VTV9EQVRBX1BPSU5URVJTXTsKLSAgICBWa0lt YWdlTWVtb3J5QmFycmllcjIgaW1nX2JhclsxMjhdOwotICAgIGludCBuYl9pbWdfYmFyID0gMDsK LSAgICBWa0ltYWdlTGF5b3V0IGluX2xheW91dCA9IHNhbXBsZXIgIT0gVktfTlVMTF9IQU5ETEUg PwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfSU1BR0VfTEFZT1VUX1NIQURFUl9S RUFEX09OTFlfT1BUSU1BTCA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19JTUFH RV9MQVlPVVRfR0VORVJBTDsKLQotICAgIC8qIFVwZGF0ZSBkZXNjcmlwdG9ycyBhbmQgaW5pdCB0 aGUgZXhlYyBjb250ZXh0ICovCi0gICAgRkZWa0V4ZWNDb250ZXh0ICpleGVjID0gZmZfdmtfZXhl Y19nZXQodmtjdHgsIGUpOwotICAgIGZmX3ZrX2V4ZWNfc3RhcnQodmtjdHgsIGV4ZWMpOwotCi0g ICAgLyogQWRkIGRlcHMgYW5kIGNyZWF0ZSB0ZW1wb3JhcnkgaW1hZ2V2aWV3cyAqLwotICAgIFJF VChmZl92a19leGVjX2FkZF9kZXBfZnJhbWUodmtjdHgsIGV4ZWMsIG91dCwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFZLX1BJUEVMSU5FX1NUQUdFXzJfQUxMX0NPTU1BTkRTX0JJ VCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZLX1BJUEVMSU5FX1NUQUdFXzJf Q09NUFVURV9TSEFERVJfQklUKSk7Ci0gICAgUkVUKGZmX3ZrX2NyZWF0ZV9pbWFnZXZpZXdzKHZr Y3R4LCBleGVjLCBvdXRfdmlld3MsIG91dCwgRkZfVktfUkVQX0ZMT0FUKSk7Ci0gICAgZm9yIChp bnQgaSA9IDA7IGkgPCBuYl9pbjsgaSsrKSB7Ci0gICAgICAgIFJFVChmZl92a19leGVjX2FkZF9k ZXBfZnJhbWUodmtjdHgsIGV4ZWMsIGluW2ldLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFZLX1BJUEVMSU5FX1NUQUdFXzJfQUxMX0NPTU1BTkRTX0JJVCwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19QSVBFTElORV9TVEFHRV8yX0NPTVBVVEVf U0hBREVSX0JJVCkpOwotICAgICAgICBSRVQoZmZfdmtfY3JlYXRlX2ltYWdldmlld3ModmtjdHgs IGV4ZWMsIGluX3ZpZXdzW2ldLCBpbltpXSwgRkZfVktfUkVQX0ZMT0FUKSk7Ci0gICAgfQotCi0g ICAgLyogVXBkYXRlIGRlc2NyaXB0b3Igc2V0cyAqLwotICAgIGZmX3ZrX3NoYWRlcl91cGRhdGVf aW1nX2FycmF5KHZrY3R4LCBleGVjLCBzaGQsIG91dCwgb3V0X3ZpZXdzLCAwLCBuYl9pbiwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19JTUFHRV9MQVlPVVRfR0VORVJBTCwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19OVUxMX0hBTkRMRSk7Ci0gICAg Zm9yIChpbnQgaSA9IDA7IGkgPCBuYl9pbjsgaSsrKQotICAgICAgICBmZl92a19zaGFkZXJfdXBk YXRlX2ltZ19hcnJheSh2a2N0eCwgZXhlYywgc2hkLCBpbltpXSwgaW5fdmlld3NbaV0sIDAsIGks Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluX2xheW91dCwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlcik7Ci0KLSAgICAvKiBCaW5k IHBpcGVsaW5lLCB1cGRhdGUgcHVzaCBkYXRhICovCi0gICAgZmZfdmtfZXhlY19iaW5kX3NoYWRl cih2a2N0eCwgZXhlYywgc2hkKTsKLSAgICBpZiAocHVzaF9zcmMpCi0gICAgICAgIGZmX3ZrX3No YWRlcl91cGRhdGVfcHVzaF9jb25zdCh2a2N0eCwgZXhlYywgc2hkLCBWS19TSEFERVJfU1RBR0Vf Q09NUFVURV9CSVQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBw dXNoX3NpemUsIHB1c2hfc3JjKTsKLQotICAgIC8qIEFkZCBkYXRhIHN5bmMgYmFycmllcnMgKi8K LSAgICBmZl92a19mcmFtZV9iYXJyaWVyKHZrY3R4LCBleGVjLCBvdXQsIGltZ19iYXIsICZuYl9p bWdfYmFyLAotICAgICAgICAgICAgICAgICAgICAgICAgVktfUElQRUxJTkVfU1RBR0VfMl9BTExf Q09NTUFORFNfQklULAotICAgICAgICAgICAgICAgICAgICAgICAgVktfUElQRUxJTkVfU1RBR0Vf Ml9DT01QVVRFX1NIQURFUl9CSVQsCi0gICAgICAgICAgICAgICAgICAgICAgICBWS19BQ0NFU1Nf U0hBREVSX1dSSVRFX0JJVCwKLSAgICAgICAgICAgICAgICAgICAgICAgIFZLX0lNQUdFX0xBWU9V VF9HRU5FUkFMLAotICAgICAgICAgICAgICAgICAgICAgICAgVktfUVVFVUVfRkFNSUxZX0lHTk9S RUQpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmJfaW47IGkrKykKLSAgICAgICAgZmZfdmtf ZnJhbWVfYmFycmllcih2a2N0eCwgZXhlYywgaW5baV0sIGltZ19iYXIsICZuYl9pbWdfYmFyLAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZLX1BJUEVMSU5FX1NUQUdFXzJfQUxMX0NPTU1B TkRTX0JJVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19QSVBFTElORV9TVEFHRV8y X0NPTVBVVEVfU0hBREVSX0JJVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19BQ0NF U1NfU0hBREVSX1JFQURfQklULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluX2xheW91 dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19RVUVVRV9GQU1JTFlfSUdOT1JFRCk7 Ci0KLSAgICB2ay0+Q21kUGlwZWxpbmVCYXJyaWVyMihleGVjLT5idWYsICYoVmtEZXBlbmRlbmN5 SW5mbykgewotICAgICAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfREVQRU5ERU5D WV9JTkZPLAotICAgICAgICAgICAgLnBJbWFnZU1lbW9yeUJhcnJpZXJzID0gaW1nX2JhciwKLSAg ICAgICAgICAgIC5pbWFnZU1lbW9yeUJhcnJpZXJDb3VudCA9IG5iX2ltZ19iYXIsCi0gICAgICAg IH0pOwotCi0gICAgdmstPkNtZERpc3BhdGNoKGV4ZWMtPmJ1ZiwKLSAgICAgICAgICAgICAgICAg ICAgRkZBTElHTih2a2N0eC0+b3V0cHV0X3dpZHRoLCAgc2hkLT5sZ19zaXplWzBdKS9zaGQtPmxn X3NpemVbMF0sCi0gICAgICAgICAgICAgICAgICAgIEZGQUxJR04odmtjdHgtPm91dHB1dF9oZWln aHQsIHNoZC0+bGdfc2l6ZVsxXSkvc2hkLT5sZ19zaXplWzFdLAotICAgICAgICAgICAgICAgICAg ICBzaGQtPmxnX3NpemVbMl0pOwotCi0gICAgcmV0dXJuIGZmX3ZrX2V4ZWNfc3VibWl0KHZrY3R4 LCBleGVjKTsKLWZhaWw6Ci0gICAgZmZfdmtfZXhlY19kaXNjYXJkX2RlcHModmtjdHgsIGV4ZWMp OwotICAgIHJldHVybiBlcnI7Ci19Ci0tIAoyLjQ5LjEKCgpGcm9tIGI0MzZkYzcyYTk4ODkyYTM3 ODgwMjA4ZGRhYTIxM2Q0ZjNmNmVhY2MgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCkZyb206IEph bWFpa2ExIDxsdWthc3pjejE4QHdwLnBsPgpEYXRlOiBXZWQsIDMgU2VwIDIwMjUgMTM6MDc6Mzcg KzAwMDAKU3ViamVjdDogW1BBVENIIDAzMi8xMThdIENoYW5naW5nIHZ1bGthbiBmaWxlIGRpcmVj dG9yeQoKLS0tCiBsaWJhdmZpbHRlci92dWxrYW4vdnVsa2FuX2ZpbHRlci5jIHwgNDgzICsrKysr KysrKysrKysrKysrKysrKysrKysrKysrCiAxIGZpbGUgY2hhbmdlZCwgNDgzIGluc2VydGlvbnMo KykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJhdmZpbHRlci92dWxrYW4vdnVsa2FuX2ZpbHRlci5j CgpkaWZmIC0tZ2l0IGEvbGliYXZmaWx0ZXIvdnVsa2FuL3Z1bGthbl9maWx0ZXIuYyBiL2xpYmF2 ZmlsdGVyL3Z1bGthbi92dWxrYW5fZmlsdGVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMC4uMmZjMzdjYzRjMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmF2ZmlsdGVyL3Z1 bGthbi92dWxrYW5fZmlsdGVyLmMKQEAgLTAsMCArMSw0ODMgQEAKKy8qCisgKiBDb3B5cmlnaHQg KGMpIEx5bm5lCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgorICoKKyAqIEZG bXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b247IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGlu IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK KyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5l cmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0 byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry ZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorICovCisKKyNpbmNs dWRlICJsaWJhdmZpbHRlci9maWx0ZXJzLmgiCisjaW5jbHVkZSAidnVsa2FuX2ZpbHRlci5oIgor I2luY2x1ZGUgIi4uLy4uL2xpYmF2dXRpbC92dWxrYW4vdnVsa2FuX2xvYWRlci5oIgorCitpbnQg ZmZfdmtfZmlsdGVyX2luaXRfY29udGV4dChBVkZpbHRlckNvbnRleHQgKmF2Y3R4LCBGRlZ1bGth bkNvbnRleHQgKnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVkJ1ZmZlclJlZiAq ZnJhbWVzX3JlZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3aWR0aCwgaW50 IGhlaWdodCwgZW51bSBBVlBpeGVsRm9ybWF0IHN3X2Zvcm1hdCkKK3sKKyAgICBpbnQgZXJyOwor ICAgIEFWSFdGcmFtZXNDb250ZXh0ICpmcmFtZXNfY3R4OworICAgIEFWSFdEZXZpY2VDb250ZXh0 ICpkZXZpY2VfY3R4OworICAgIEFWVnVsa2FuRnJhbWVzQ29udGV4dCAqdmtfZnJhbWVzOworICAg IEFWVnVsa2FuRGV2aWNlQ29udGV4dCAqdmtfZGV2OworICAgIEFWQnVmZmVyUmVmICpkZXZpY2Vf cmVmID0gYXZjdHgtPmh3X2RldmljZV9jdHg7CisKKyAgICAvKiBDaGVjayBpZiBjb250ZXh0IGlz IHJldXNhYmxlIGFzLWlzICovCisgICAgaWYgKGZyYW1lc19yZWYpIHsKKyAgICAgICAgaW50IG5v X3N0b3JhZ2UgPSAwOworICAgICAgICBGRlZ1bGthbkZ1bmN0aW9ucyAqdms7CisgICAgICAgIFZr SW1hZ2VVc2FnZUZsYWdCaXRzIHVzYWdlX3JlcTsKKyAgICAgICAgY29uc3QgVmtGb3JtYXQgKnN1 YiA9IGF2X3ZrZm10X2Zyb21fcGl4Zm10KHN3X2Zvcm1hdCk7CisKKyAgICAgICAgZnJhbWVzX2N0 eCA9IChBVkhXRnJhbWVzQ29udGV4dCAqKWZyYW1lc19yZWYtPmRhdGE7CisgICAgICAgIGRldmlj ZV9jdHggPSAoQVZIV0RldmljZUNvbnRleHQgKilmcmFtZXNfY3R4LT5kZXZpY2VfcmVmLT5kYXRh OworICAgICAgICB2a19mcmFtZXMgPSBmcmFtZXNfY3R4LT5od2N0eDsKKyAgICAgICAgdmtfZGV2 ID0gZGV2aWNlX2N0eC0+aHdjdHg7CisKKyAgICAgICAgLyogV2lkdGggYW5kIGhlaWdodCBtaXNt YXRjaCAqLworICAgICAgICBpZiAod2lkdGggIT0gZnJhbWVzX2N0eC0+d2lkdGggfHwKKyAgICAg ICAgICAgIGhlaWdodCAhPSBmcmFtZXNfY3R4LT5oZWlnaHQpCisgICAgICAgICAgICBnb3RvIHNr aXA7CisKKyAgICAgICAgLyogRm9ybWF0IG1pc21hdGNoICovCisgICAgICAgIGlmIChzd19mb3Jt YXQgIT0gZnJhbWVzX2N0eC0+c3dfZm9ybWF0KQorICAgICAgICAgICAgZ290byBza2lwOworCisg ICAgICAgIC8qIERvbid0IGxldCBsaW5lYXIgdGhyb3VnaC4gKi8KKyAgICAgICAgaWYgKHZrX2Zy YW1lcy0+dGlsaW5nID09IFZLX0lNQUdFX1RJTElOR19MSU5FQVIpCisgICAgICAgICAgICBnb3Rv IHNraXA7CisKKyAgICAgICAgcy0+ZXh0ZW5zaW9ucyA9IGZmX3ZrX2V4dGVuc2lvbnNfdG9fbWFz ayh2a19kZXYtPmVuYWJsZWRfZGV2X2V4dGVuc2lvbnMsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdmtfZGV2LT5uYl9lbmFibGVkX2Rldl9leHRlbnNp b25zKTsKKworICAgICAgICAvKiBNb3JlIGFkdmFuY2VkIGZvcm1hdCBjaGVja3MgKi8KKyAgICAg ICAgZXJyID0gZmZfdmtfbG9hZF9mdW5jdGlvbnMoZGV2aWNlX2N0eCwgJnMtPnZrZm4sIHMtPmV4 dGVuc2lvbnMsIDEsIDEpOworICAgICAgICBpZiAoZXJyIDwgMCkKKyAgICAgICAgICAgIHJldHVy biBlcnI7CisgICAgICAgIHZrID0gJnMtPnZrZm47CisKKyAgICAgICAgLyogVXNhZ2UgbWlzbWF0 Y2ggKi8KKyAgICAgICAgdXNhZ2VfcmVxID0gVktfSU1BR0VfVVNBR0VfU0FNUExFRF9CSVQgfAor ICAgICAgICAgICAgICAgICAgICBWS19JTUFHRV9VU0FHRV9TVE9SQUdFX0JJVDsKKworICAgICAg ICAvKiBJZiBmb3JtYXQgc3VwcG9ydHMgaGFyZHdhcmUgZW5jb2RpbmcsIG1ha2Ugc3VyZQorICAg ICAgICAgKiB0aGUgY29udGV4dCBpbmNsdWRlcyBpdC4gKi8KKyAgICAgICAgaWYgKHZrX2ZyYW1l cy0+Zm9ybWF0WzFdID09IFZLX0ZPUk1BVF9VTkRFRklORUQgJiYKKyAgICAgICAgICAgIChzLT5l eHRlbnNpb25zICYgKEZGX1ZLX0VYVF9WSURFT19FTkNPREVfUVVFVUUgfAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgRkZfVktfRVhUX1ZJREVPX01BSU5URU5BTkNFXzEpKSkgeworICAg ICAgICAgICAgVmtGb3JtYXRQcm9wZXJ0aWVzMyBmcHJvcHMgPSB7CisgICAgICAgICAgICAgICAg LnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfRk9STUFUX1BST1BFUlRJRVNfMywKKyAgICAgICAg ICAgIH07CisgICAgICAgICAgICBWa0Zvcm1hdFByb3BlcnRpZXMyIHByb3AgPSB7CisgICAgICAg ICAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfRk9STUFUX1BST1BFUlRJRVNfMiwK KyAgICAgICAgICAgICAgICAucE5leHQgPSAmZnByb3BzLAorICAgICAgICAgICAgfTsKKyAgICAg ICAgICAgIHZrLT5HZXRQaHlzaWNhbERldmljZUZvcm1hdFByb3BlcnRpZXMyKHZrX2Rldi0+cGh5 c19kZXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB2a19mcmFtZXMtPmZvcm1hdFswXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICZwcm9wKTsKKyAgICAgICAgICAgIGlmIChmcHJvcHMub3B0aW1h bFRpbGluZ0ZlYXR1cmVzICYgVktfRk9STUFUX0ZFQVRVUkVfMl9WSURFT19FTkNPREVfSU5QVVRf QklUX0tIUikKKyAgICAgICAgICAgICAgICB1c2FnZV9yZXEgfD0gVktfSU1BR0VfVVNBR0VfVklE RU9fRU5DT0RFX1NSQ19CSVRfS0hSOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCh2a19mcmFt ZXMtPnVzYWdlICYgdXNhZ2VfcmVxKSAhPSB1c2FnZV9yZXEpCisgICAgICAgICAgICBnb3RvIHNr aXA7CisKKyAgICAgICAgLyogQ2hlY2sgaWYgdGhlIHN1YmZvcm1hdHMgY2FuIGRvIHN0b3JhZ2Ug Ki8KKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IHN1YltpXSAhPSBWS19GT1JNQVRfVU5ERUZJTkVE OyBpKyspIHsKKyAgICAgICAgICAgIFZrRm9ybWF0UHJvcGVydGllczIgcHJvcCA9IHsKKyAgICAg ICAgICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9GT1JNQVRfUFJPUEVSVElFU18y LAorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIHZrLT5HZXRQaHlzaWNhbERldmljZUZvcm1h dFByb3BlcnRpZXMyKHZrX2Rldi0+cGh5c19kZXYsIHN1YltpXSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwcm9wKTsKKyAgICAgICAgICAgIG5v X3N0b3JhZ2UgfD0gIShwcm9wLmZvcm1hdFByb3BlcnRpZXMub3B0aW1hbFRpbGluZ0ZlYXR1cmVz ICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19GT1JNQVRfRkVBVFVSRV8yX1NUT1JB R0VfSU1BR0VfQklUKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIENoZWNrIGlmIGl0J3MgdXNh YmxlICovCisgICAgICAgIGlmIChub19zdG9yYWdlKSB7Citza2lwOgorICAgICAgICAgICAgYXZf bG9nKGF2Y3R4LCBBVl9MT0dfVkVSQk9TRSwgIkNhbm5vdCByZXVzZSBjb250ZXh0LCBjcmVhdGlu ZyBhIG5ldyBvbmVcbiIpOworICAgICAgICAgICAgZGV2aWNlX3JlZiA9IGZyYW1lc19jdHgtPmRl dmljZV9yZWY7CisgICAgICAgICAgICBmcmFtZXNfcmVmID0gTlVMTDsKKyAgICAgICAgfSBlbHNl IHsKKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX1ZFUkJPU0UsICJSZXVzaW5nIGV4 aXN0aW5nIGZyYW1lcyBjb250ZXh0XG4iKTsKKyAgICAgICAgICAgIGZyYW1lc19yZWYgPSBhdl9i dWZmZXJfcmVmKGZyYW1lc19yZWYpOworICAgICAgICAgICAgaWYgKCFmcmFtZXNfcmVmKQorICAg ICAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7CisgICAgICAgIH0KKyAgICB9CisK KyAgICBpZiAoIWZyYW1lc19yZWYpIHsKKyAgICAgICAgaWYgKCFkZXZpY2VfcmVmKSB7CisgICAg ICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwKKyAgICAgICAgICAgICAgICAgICAi VnVsa2FuIGZpbHRlcmluZyByZXF1aXJlcyBhIGRldmljZSBjb250ZXh0IVxuIik7CisgICAgICAg ICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOworICAgICAgICB9CisKKyAgICAgICAgZnJhbWVz X3JlZiA9IGF2X2h3ZnJhbWVfY3R4X2FsbG9jKGRldmljZV9yZWYpOworCisgICAgICAgIGZyYW1l c19jdHggPSAoQVZIV0ZyYW1lc0NvbnRleHQgKilmcmFtZXNfcmVmLT5kYXRhOworICAgICAgICBm cmFtZXNfY3R4LT5mb3JtYXQgICAgPSBBVl9QSVhfRk1UX1ZVTEtBTjsKKyAgICAgICAgZnJhbWVz X2N0eC0+c3dfZm9ybWF0ID0gc3dfZm9ybWF0OworICAgICAgICBmcmFtZXNfY3R4LT53aWR0aCAg ICAgPSB3aWR0aDsKKyAgICAgICAgZnJhbWVzX2N0eC0+aGVpZ2h0ICAgID0gaGVpZ2h0OworCisg ICAgICAgIHZrX2ZyYW1lcyA9IGZyYW1lc19jdHgtPmh3Y3R4OworICAgICAgICB2a19mcmFtZXMt PnRpbGluZyA9IFZLX0lNQUdFX1RJTElOR19PUFRJTUFMOworICAgICAgICB2a19mcmFtZXMtPnVz YWdlICA9IFZLX0lNQUdFX1VTQUdFX1NBTVBMRURfQklUIHwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICBWS19JTUFHRV9VU0FHRV9TVE9SQUdFX0JJVCB8CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgVktfSU1BR0VfVVNBR0VfVFJBTlNGRVJfU1JDX0JJVDsKKworICAgICAgICBlcnIg PSBhdl9od2ZyYW1lX2N0eF9pbml0KGZyYW1lc19yZWYpOworICAgICAgICBpZiAoZXJyIDwgMCkg eworICAgICAgICAgICAgYXZfYnVmZmVyX3VucmVmKCZmcmFtZXNfcmVmKTsKKyAgICAgICAgICAg IHJldHVybiBlcnI7CisgICAgICAgIH0KKworICAgICAgICBkZXZpY2VfY3R4ID0gKEFWSFdEZXZp Y2VDb250ZXh0ICopZnJhbWVzX2N0eC0+ZGV2aWNlX3JlZi0+ZGF0YTsKKyAgICAgICAgdmtfZGV2 ID0gZGV2aWNlX2N0eC0+aHdjdHg7CisgICAgfQorCisgICAgcy0+ZXh0ZW5zaW9ucyA9IGZmX3Zr X2V4dGVuc2lvbnNfdG9fbWFzayh2a19kZXYtPmVuYWJsZWRfZGV2X2V4dGVuc2lvbnMsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2a19kZXYtPm5iX2VuYWJs ZWRfZGV2X2V4dGVuc2lvbnMpOworICAgIHMtPmV4dGVuc2lvbnMgfD0gZmZfdmtfZXh0ZW5zaW9u c190b19tYXNrKHZrX2Rldi0+ZW5hYmxlZF9pbnN0X2V4dGVuc2lvbnMsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmtfZGV2LT5uYl9lbmFibGVkX2luc3Rf ZXh0ZW5zaW9ucyk7CisKKyAgICBlcnIgPSBmZl92a19sb2FkX2Z1bmN0aW9ucyhkZXZpY2VfY3R4 LCAmcy0+dmtmbiwgcy0+ZXh0ZW5zaW9ucywgMSwgMSk7CisgICAgaWYgKGVyciA8IDApIHsKKyAg ICAgICAgYXZfYnVmZmVyX3VucmVmKCZmcmFtZXNfcmVmKTsKKyAgICAgICAgcmV0dXJuIGVycjsK KyAgICB9CisKKyAgICBzLT5mcmFtZXNfcmVmID0gZnJhbWVzX3JlZjsKKyAgICBzLT5mcmFtZXMg PSBmcmFtZXNfY3R4OworICAgIHMtPmh3ZmMgPSB2a19mcmFtZXM7CisgICAgcy0+ZGV2aWNlID0g ZGV2aWNlX2N0eDsKKyAgICBzLT5od2N0eCA9IGRldmljZV9jdHgtPmh3Y3R4OworCisgICAgZXJy ID0gZmZfdmtfbG9hZF9wcm9wcyhzKTsKKyAgICBpZiAoZXJyIDwgMCkKKyAgICAgICAgYXZfYnVm ZmVyX3VucmVmKCZzLT5mcmFtZXNfcmVmKTsKKworICAgIHJldHVybiBlcnI7Cit9CisKK2ludCBm Zl92a19maWx0ZXJfY29uZmlnX2lucHV0KEFWRmlsdGVyTGluayAqaW5saW5rKQoreworICAgIEZp bHRlckxpbmsgKmwgPSBmZl9maWx0ZXJfbGluayhpbmxpbmspOworICAgIEFWSFdGcmFtZXNDb250 ZXh0ICppbnB1dF9mcmFtZXM7CisgICAgQVZGaWx0ZXJDb250ZXh0ICphdmN0eCA9IGlubGluay0+ ZHN0OworICAgIEZGVnVsa2FuQ29udGV4dCAqcyA9IGlubGluay0+ZHN0LT5wcml2OworCisgICAg aWYgKCFsLT5od19mcmFtZXNfY3R4KSB7CisgICAgICAgIGF2X2xvZyhpbmxpbmstPmRzdCwgQVZf TE9HX0VSUk9SLCAiVnVsa2FuIGZpbHRlcmluZyByZXF1aXJlcyBhICIKKyAgICAgICAgICAgICAg ICJoYXJkd2FyZSBmcmFtZXMgY29udGV4dCBvbiB0aGUgaW5wdXQuXG4iKTsKKyAgICAgICAgcmV0 dXJuIEFWRVJST1IoRUlOVkFMKTsKKyAgICB9CisKKyAgICBpbnB1dF9mcmFtZXMgPSAoQVZIV0Zy YW1lc0NvbnRleHQgKilsLT5od19mcmFtZXNfY3R4LT5kYXRhOworICAgIGlmIChpbnB1dF9mcmFt ZXMtPmZvcm1hdCAhPSBBVl9QSVhfRk1UX1ZVTEtBTikKKyAgICAgICAgcmV0dXJuIEFWRVJST1Io RUlOVkFMKTsKKworICAgIC8qIEV4dHJhY3QgdGhlIGRldmljZSBhbmQgZGVmYXVsdCBvdXRwdXQg Zm9ybWF0IGZyb20gdGhlIGZpcnN0IGlucHV0LiAqLworICAgIGlmIChhdmN0eC0+aW5wdXRzWzBd ICE9IGlubGluaykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvKiBTYXZlIHRoZSByZWYsIHdp dGhvdXQgcmVmZmluZyBpdCAqLworICAgIHMtPmlucHV0X2ZyYW1lc19yZWYgPSBsLT5od19mcmFt ZXNfY3R4OworCisgICAgLyogRGVmYXVsdHMgKi8KKyAgICBzLT5pbnB1dF9mb3JtYXQgPSBpbnB1 dF9mcmFtZXMtPnN3X2Zvcm1hdDsKKyAgICBzLT5vdXRwdXRfZm9ybWF0ID0gaW5wdXRfZnJhbWVz LT5zd19mb3JtYXQ7CisgICAgcy0+b3V0cHV0X3dpZHRoID0gaW5saW5rLT53OworICAgIHMtPm91 dHB1dF9oZWlnaHQgPSBpbmxpbmstPmg7CisKKyAgICByZXR1cm4gMDsKK30KKworaW50IGZmX3Zr X2ZpbHRlcl9jb25maWdfb3V0cHV0KEFWRmlsdGVyTGluayAqb3V0bGluaykKK3sKKyAgICBpbnQg ZXJyOworICAgIEZpbHRlckxpbmsgKmwgPSBmZl9maWx0ZXJfbGluayhvdXRsaW5rKTsKKyAgICBG RlZ1bGthbkNvbnRleHQgKnMgPSBvdXRsaW5rLT5zcmMtPnByaXY7CisKKyAgICBhdl9idWZmZXJf dW5yZWYoJmwtPmh3X2ZyYW1lc19jdHgpOworCisgICAgZXJyID0gZmZfdmtfZmlsdGVyX2luaXRf Y29udGV4dChvdXRsaW5rLT5zcmMsIHMsIHMtPmlucHV0X2ZyYW1lc19yZWYsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzLT5vdXRwdXRfd2lkdGgsIHMtPm91dHB1dF9oZWln aHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLT5vdXRwdXRfZm9ybWF0 KTsKKyAgICBpZiAoZXJyIDwgMCkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIGwtPmh3X2Zy YW1lc19jdHggPSBhdl9idWZmZXJfcmVmKHMtPmZyYW1lc19yZWYpOworICAgIGlmICghbC0+aHdf ZnJhbWVzX2N0eCkKKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKKworICAgIG91dGxp bmstPncgPSBzLT5vdXRwdXRfd2lkdGg7CisgICAgb3V0bGluay0+aCA9IHMtPm91dHB1dF9oZWln aHQ7CisKKyAgICByZXR1cm4gZXJyOworfQorCitpbnQgZmZfdmtfZmlsdGVyX2luaXQoQVZGaWx0 ZXJDb250ZXh0ICphdmN0eCkKK3sKKyAgICBGRlZ1bGthbkNvbnRleHQgKnMgPSBhdmN0eC0+cHJp djsKKworICAgIHMtPm91dHB1dF9mb3JtYXQgPSBBVl9QSVhfRk1UX05PTkU7CisKKyAgICByZXR1 cm4gMDsKK30KKworaW50IGZmX3ZrX2ZpbHRlcl9wcm9jZXNzX3NpbXBsZShGRlZ1bGthbkNvbnRl eHQgKnZrY3R4LCBGRlZrRXhlY1Bvb2wgKmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEZGVnVsa2FuU2hhZGVyICpzaGQsIEFWRnJhbWUgKm91dF9mLCBBVkZyYW1lICppbl9mLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWa1NhbXBsZXIgc2FtcGxlciwgdm9pZCAq cHVzaF9zcmMsIHNpemVfdCBwdXNoX3NpemUpCit7CisgICAgaW50IGVyciA9IDA7CisgICAgRkZW dWxrYW5GdW5jdGlvbnMgKnZrID0gJnZrY3R4LT52a2ZuOworICAgIFZrSW1hZ2VWaWV3IGluX3Zp ZXdzW0FWX05VTV9EQVRBX1BPSU5URVJTXTsKKyAgICBWa0ltYWdlVmlldyBvdXRfdmlld3NbQVZf TlVNX0RBVEFfUE9JTlRFUlNdOworICAgIFZrSW1hZ2VNZW1vcnlCYXJyaWVyMiBpbWdfYmFyWzM3 XTsKKyAgICBpbnQgbmJfaW1nX2JhciA9IDA7CisgICAgVmtJbWFnZUxheW91dCBpbl9sYXlvdXQg PSBzYW1wbGVyICE9IFZLX05VTExfSEFORExFID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFZLX0lNQUdFX0xBWU9VVF9TSEFERVJfUkVBRF9PTkxZX09QVElNQUwgOgorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgVktfSU1BR0VfTEFZT1VUX0dFTkVSQUw7CisKKyAgICAvKiBV cGRhdGUgZGVzY3JpcHRvcnMgYW5kIGluaXQgdGhlIGV4ZWMgY29udGV4dCAqLworICAgIEZGVmtF eGVjQ29udGV4dCAqZXhlYyA9IGZmX3ZrX2V4ZWNfZ2V0KHZrY3R4LCBlKTsKKyAgICBmZl92a19l eGVjX3N0YXJ0KHZrY3R4LCBleGVjKTsKKworICAgIFJFVChmZl92a19leGVjX2FkZF9kZXBfZnJh bWUodmtjdHgsIGV4ZWMsIG91dF9mLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg VktfUElQRUxJTkVfU1RBR0VfMl9BTExfQ09NTUFORFNfQklULAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgVktfUElQRUxJTkVfU1RBR0VfMl9DT01QVVRFX1NIQURFUl9CSVQpKTsK KyAgICBSRVQoZmZfdmtfY3JlYXRlX2ltYWdldmlld3ModmtjdHgsIGV4ZWMsIG91dF92aWV3cywg b3V0X2YsIEZGX1ZLX1JFUF9GTE9BVCkpOworICAgIGZmX3ZrX3NoYWRlcl91cGRhdGVfaW1nX2Fy cmF5KHZrY3R4LCBleGVjLCBzaGQsIG91dF9mLCBvdXRfdmlld3MsIDAsICEhaW5fZiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19JTUFHRV9MQVlPVVRfR0VORVJBTCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19OVUxMX0hBTkRMRSk7CisgICAgaWYg KGluX2YpIHsKKyAgICAgICAgUkVUKGZmX3ZrX2V4ZWNfYWRkX2RlcF9mcmFtZSh2a2N0eCwgZXhl YywgaW5fZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19QSVBFTElO RV9TVEFHRV8yX0FMTF9DT01NQU5EU19CSVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgVktfUElQRUxJTkVfU1RBR0VfMl9DT01QVVRFX1NIQURFUl9CSVQpKTsKKyAgICAg ICAgUkVUKGZmX3ZrX2NyZWF0ZV9pbWFnZXZpZXdzKHZrY3R4LCBleGVjLCBpbl92aWV3cywgIGlu X2YsIEZGX1ZLX1JFUF9GTE9BVCkpOworICAgICAgICBmZl92a19zaGFkZXJfdXBkYXRlX2ltZ19h cnJheSh2a2N0eCwgZXhlYywgc2hkLCAgaW5fZiwgIGluX3ZpZXdzLCAwLCAwLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbl9sYXlvdXQsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXIpOworICAgIH0KKworICAgIC8qIEJpbmQgcGlw ZWxpbmUsIHVwZGF0ZSBwdXNoIGRhdGEgKi8KKyAgICBmZl92a19leGVjX2JpbmRfc2hhZGVyKHZr Y3R4LCBleGVjLCBzaGQpOworICAgIGlmIChwdXNoX3NyYykKKyAgICAgICAgZmZfdmtfc2hhZGVy X3VwZGF0ZV9wdXNoX2NvbnN0KHZrY3R4LCBleGVjLCBzaGQsIFZLX1NIQURFUl9TVEFHRV9DT01Q VVRFX0JJVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIHB1c2hf c2l6ZSwgcHVzaF9zcmMpOworCisgICAgLyogQWRkIGRhdGEgc3luYyBiYXJyaWVycyAqLworICAg IGZmX3ZrX2ZyYW1lX2JhcnJpZXIodmtjdHgsIGV4ZWMsIG91dF9mLCBpbWdfYmFyLCAmbmJfaW1n X2JhciwKKyAgICAgICAgICAgICAgICAgICAgICAgIFZLX1BJUEVMSU5FX1NUQUdFXzJfQUxMX0NP TU1BTkRTX0JJVCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFZLX1BJUEVMSU5FX1NUQUdFXzJf Q09NUFVURV9TSEFERVJfQklULAorICAgICAgICAgICAgICAgICAgICAgICAgVktfQUNDRVNTX1NI QURFUl9XUklURV9CSVQsCisgICAgICAgICAgICAgICAgICAgICAgICBWS19JTUFHRV9MQVlPVVRf R0VORVJBTCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFZLX1FVRVVFX0ZBTUlMWV9JR05PUkVE KTsKKyAgICBpZiAoaW5fZikKKyAgICAgICAgZmZfdmtfZnJhbWVfYmFycmllcih2a2N0eCwgZXhl YywgaW5fZiwgaW1nX2JhciwgJm5iX2ltZ19iYXIsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgVktfUElQRUxJTkVfU1RBR0VfMl9BTExfQ09NTUFORFNfQklULAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFZLX1BJUEVMSU5FX1NUQUdFXzJfQ09NUFVURV9TSEFERVJfQklULAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFZLX0FDQ0VTU19TSEFERVJfUkVBRF9CSVQsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaW5fbGF5b3V0LAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFZLX1FVRVVFX0ZBTUlMWV9JR05PUkVEKTsKKworICAgIHZrLT5DbWRQaXBlbGluZUJh cnJpZXIyKGV4ZWMtPmJ1ZiwgJihWa0RlcGVuZGVuY3lJbmZvKSB7CisgICAgICAgICAgICAuc1R5 cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9ERVBFTkRFTkNZX0lORk8sCisgICAgICAgICAgICAucElt YWdlTWVtb3J5QmFycmllcnMgPSBpbWdfYmFyLAorICAgICAgICAgICAgLmltYWdlTWVtb3J5QmFy cmllckNvdW50ID0gbmJfaW1nX2JhciwKKyAgICAgICAgfSk7CisKKyAgICB2ay0+Q21kRGlzcGF0 Y2goZXhlYy0+YnVmLAorICAgICAgICAgICAgICAgICAgICBGRkFMSUdOKHZrY3R4LT5vdXRwdXRf d2lkdGgsICBzaGQtPmxnX3NpemVbMF0pL3NoZC0+bGdfc2l6ZVswXSwKKyAgICAgICAgICAgICAg ICAgICAgRkZBTElHTih2a2N0eC0+b3V0cHV0X2hlaWdodCwgc2hkLT5sZ19zaXplWzFdKS9zaGQt PmxnX3NpemVbMV0sCisgICAgICAgICAgICAgICAgICAgIHNoZC0+bGdfc2l6ZVsyXSk7CisKKyAg ICByZXR1cm4gZmZfdmtfZXhlY19zdWJtaXQodmtjdHgsIGV4ZWMpOworZmFpbDoKKyAgICBmZl92 a19leGVjX2Rpc2NhcmRfZGVwcyh2a2N0eCwgZXhlYyk7CisgICAgcmV0dXJuIGVycjsKK30KKwor aW50IGZmX3ZrX2ZpbHRlcl9wcm9jZXNzXzJwYXNzKEZGVnVsa2FuQ29udGV4dCAqdmtjdHgsIEZG VmtFeGVjUG9vbCAqZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGRlZ1bGthblNo YWRlciAqc2hkX2xpc3RbMl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVZGcmFt ZSAqb3V0LCBBVkZyYW1lICp0bXAsIEFWRnJhbWUgKmluLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFZrU2FtcGxlciBzYW1wbGVyLCB2b2lkICpwdXNoX3NyYywgc2l6ZV90IHB1c2hf c2l6ZSkKK3sKKyAgICBpbnQgZXJyID0gMDsKKyAgICBGRlZ1bGthbkZ1bmN0aW9ucyAqdmsgPSAm dmtjdHgtPnZrZm47CisgICAgVmtJbWFnZVZpZXcgaW5fdmlld3NbQVZfTlVNX0RBVEFfUE9JTlRF UlNdOworICAgIFZrSW1hZ2VWaWV3IHRtcF92aWV3c1tBVl9OVU1fREFUQV9QT0lOVEVSU107Cisg ICAgVmtJbWFnZVZpZXcgb3V0X3ZpZXdzW0FWX05VTV9EQVRBX1BPSU5URVJTXTsKKyAgICBWa0lt YWdlTWVtb3J5QmFycmllcjIgaW1nX2JhclszN107CisgICAgaW50IG5iX2ltZ19iYXIgPSAwOwor ICAgIFZrSW1hZ2VMYXlvdXQgaW5fbGF5b3V0ID0gc2FtcGxlciAhPSBWS19OVUxMX0hBTkRMRSA/ CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19JTUFHRV9MQVlPVVRfU0hBREVSX1JF QURfT05MWV9PUFRJTUFMIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZLX0lNQUdF X0xBWU9VVF9HRU5FUkFMOworCisgICAgLyogVXBkYXRlIGRlc2NyaXB0b3JzIGFuZCBpbml0IHRo ZSBleGVjIGNvbnRleHQgKi8KKyAgICBGRlZrRXhlY0NvbnRleHQgKmV4ZWMgPSBmZl92a19leGVj X2dldCh2a2N0eCwgZSk7CisgICAgZmZfdmtfZXhlY19zdGFydCh2a2N0eCwgZXhlYyk7CisKKyAg ICBSRVQoZmZfdmtfZXhlY19hZGRfZGVwX2ZyYW1lKHZrY3R4LCBleGVjLCBpbiwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFZLX1BJUEVMSU5FX1NUQUdFXzJfQUxMX0NPTU1BTkRT X0JJVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZLX1BJUEVMSU5FX1NUQUdF XzJfQ09NUFVURV9TSEFERVJfQklUKSk7CisgICAgUkVUKGZmX3ZrX2V4ZWNfYWRkX2RlcF9mcmFt ZSh2a2N0eCwgZXhlYywgdG1wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktf UElQRUxJTkVfU1RBR0VfMl9BTExfQ09NTUFORFNfQklULAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgVktfUElQRUxJTkVfU1RBR0VfMl9DT01QVVRFX1NIQURFUl9CSVQpKTsKKyAg ICBSRVQoZmZfdmtfZXhlY19hZGRfZGVwX2ZyYW1lKHZrY3R4LCBleGVjLCBvdXQsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBWS19QSVBFTElORV9TVEFHRV8yX0FMTF9DT01NQU5E U19CSVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19QSVBFTElORV9TVEFH RV8yX0NPTVBVVEVfU0hBREVSX0JJVCkpOworCisgICAgUkVUKGZmX3ZrX2NyZWF0ZV9pbWFnZXZp ZXdzKHZrY3R4LCBleGVjLCBpbl92aWV3cywgIGluLCBGRl9WS19SRVBfRkxPQVQpKTsKKyAgICBS RVQoZmZfdmtfY3JlYXRlX2ltYWdldmlld3ModmtjdHgsIGV4ZWMsIHRtcF92aWV3cywgdG1wLCBG Rl9WS19SRVBfRkxPQVQpKTsKKyAgICBSRVQoZmZfdmtfY3JlYXRlX2ltYWdldmlld3ModmtjdHgs IGV4ZWMsIG91dF92aWV3cywgb3V0LCBGRl9WS19SRVBfRkxPQVQpKTsKKworICAgIGZmX3ZrX2Zy YW1lX2JhcnJpZXIodmtjdHgsIGV4ZWMsIGluLCBpbWdfYmFyLCAmbmJfaW1nX2JhciwKKyAgICAg ICAgICAgICAgICAgICAgICAgIFZLX1BJUEVMSU5FX1NUQUdFXzJfQUxMX0NPTU1BTkRTX0JJVCwK KyAgICAgICAgICAgICAgICAgICAgICAgIFZLX1BJUEVMSU5FX1NUQUdFXzJfQ09NUFVURV9TSEFE RVJfQklULAorICAgICAgICAgICAgICAgICAgICAgICAgVktfQUNDRVNTX1NIQURFUl9SRUFEX0JJ VCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGluX2xheW91dCwKKyAgICAgICAgICAgICAgICAg ICAgICAgIFZLX1FVRVVFX0ZBTUlMWV9JR05PUkVEKTsKKyAgICBmZl92a19mcmFtZV9iYXJyaWVy KHZrY3R4LCBleGVjLCB0bXAsIGltZ19iYXIsICZuYl9pbWdfYmFyLAorICAgICAgICAgICAgICAg ICAgICAgICAgVktfUElQRUxJTkVfU1RBR0VfMl9BTExfQ09NTUFORFNfQklULAorICAgICAgICAg ICAgICAgICAgICAgICAgVktfUElQRUxJTkVfU1RBR0VfMl9DT01QVVRFX1NIQURFUl9CSVQsCisg ICAgICAgICAgICAgICAgICAgICAgICBWS19BQ0NFU1NfU0hBREVSX1JFQURfQklUIHwgVktfQUND RVNTX1NIQURFUl9XUklURV9CSVQsCisgICAgICAgICAgICAgICAgICAgICAgICBWS19JTUFHRV9M QVlPVVRfR0VORVJBTCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFZLX1FVRVVFX0ZBTUlMWV9J R05PUkVEKTsKKyAgICBmZl92a19mcmFtZV9iYXJyaWVyKHZrY3R4LCBleGVjLCBvdXQsIGltZ19i YXIsICZuYl9pbWdfYmFyLAorICAgICAgICAgICAgICAgICAgICAgICAgVktfUElQRUxJTkVfU1RB R0VfMl9BTExfQ09NTUFORFNfQklULAorICAgICAgICAgICAgICAgICAgICAgICAgVktfUElQRUxJ TkVfU1RBR0VfMl9DT01QVVRFX1NIQURFUl9CSVQsCisgICAgICAgICAgICAgICAgICAgICAgICBW S19BQ0NFU1NfU0hBREVSX1dSSVRFX0JJVCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFZLX0lN QUdFX0xBWU9VVF9HRU5FUkFMLAorICAgICAgICAgICAgICAgICAgICAgICAgVktfUVVFVUVfRkFN SUxZX0lHTk9SRUQpOworCisgICAgdmstPkNtZFBpcGVsaW5lQmFycmllcjIoZXhlYy0+YnVmLCAm KFZrRGVwZW5kZW5jeUluZm8pIHsKKyAgICAgICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9U WVBFX0RFUEVOREVOQ1lfSU5GTywKKyAgICAgICAgICAgIC5wSW1hZ2VNZW1vcnlCYXJyaWVycyA9 IGltZ19iYXIsCisgICAgICAgICAgICAuaW1hZ2VNZW1vcnlCYXJyaWVyQ291bnQgPSBuYl9pbWdf YmFyLAorICAgICAgICB9KTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjsgaSsrKSB7Cisg ICAgICAgIEZGVnVsa2FuU2hhZGVyICpzaGQgPSBzaGRfbGlzdFtpXTsKKyAgICAgICAgQVZGcmFt ZSAqc3JjX2YgPSAhaSA/IGluIDogdG1wOworICAgICAgICBBVkZyYW1lICpkc3RfZiA9ICFpID8g dG1wIDogb3V0OworICAgICAgICBWa0ltYWdlVmlldyAqc3JjX3ZpZXdzID0gIWkgPyBpbl92aWV3 cyA6IHRtcF92aWV3czsKKyAgICAgICAgVmtJbWFnZVZpZXcgKmRzdF92aWV3cyA9ICFpID8gdG1w X3ZpZXdzIDogb3V0X3ZpZXdzOworCisgICAgICAgIGZmX3ZrX3NoYWRlcl91cGRhdGVfaW1nX2Fy cmF5KHZrY3R4LCBleGVjLCBzaGQsIHNyY19mLCBzcmNfdmlld3MsIDAsIDAsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICFpID8gaW5fbGF5b3V0IDoKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19JTUFHRV9MQVlPVVRfR0VORVJBTCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlcik7CisgICAgICAg IGZmX3ZrX3NoYWRlcl91cGRhdGVfaW1nX2FycmF5KHZrY3R4LCBleGVjLCBzaGQsIGRzdF9mLCBk c3Rfdmlld3MsIDAsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZL X0lNQUdFX0xBWU9VVF9HRU5FUkFMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBWS19OVUxMX0hBTkRMRSk7CisKKyAgICAgICAgLyogQmluZCBwaXBlbGluZSwgdXBkYXRl IHB1c2ggZGF0YSAqLworICAgICAgICBmZl92a19leGVjX2JpbmRfc2hhZGVyKHZrY3R4LCBleGVj LCBzaGQpOworICAgICAgICBpZiAocHVzaF9zcmMpCisgICAgICAgICAgICBmZl92a19zaGFkZXJf dXBkYXRlX3B1c2hfY29uc3QodmtjdHgsIGV4ZWMsIHNoZCwgVktfU0hBREVSX1NUQUdFX0NPTVBV VEVfQklULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIHB1 c2hfc2l6ZSwgcHVzaF9zcmMpOworCisgICAgICAgIHZrLT5DbWREaXNwYXRjaChleGVjLT5idWYs CisgICAgICAgICAgICAgICAgICAgICAgICBGRkFMSUdOKHZrY3R4LT5vdXRwdXRfd2lkdGgsICBz aGQtPmxnX3NpemVbMF0pL3NoZC0+bGdfc2l6ZVswXSwKKyAgICAgICAgICAgICAgICAgICAgICAg IEZGQUxJR04odmtjdHgtPm91dHB1dF9oZWlnaHQsIHNoZC0+bGdfc2l6ZVsxXSkvc2hkLT5sZ19z aXplWzFdLAorICAgICAgICAgICAgICAgICAgICAgICAgc2hkLT5sZ19zaXplWzJdKTsKKyAgICB9 CisKKyAgICByZXR1cm4gZmZfdmtfZXhlY19zdWJtaXQodmtjdHgsIGV4ZWMpOworZmFpbDoKKyAg ICBmZl92a19leGVjX2Rpc2NhcmRfZGVwcyh2a2N0eCwgZXhlYyk7CisgICAgcmV0dXJuIGVycjsK K30KKworaW50IGZmX3ZrX2ZpbHRlcl9wcm9jZXNzX05pbihGRlZ1bGthbkNvbnRleHQgKnZrY3R4 LCBGRlZrRXhlY1Bvb2wgKmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZGVnVsa2Fu U2hhZGVyICpzaGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFWRnJhbWUgKm91dCwg QVZGcmFtZSAqaW5bXSwgaW50IG5iX2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBW a1NhbXBsZXIgc2FtcGxlciwgdm9pZCAqcHVzaF9zcmMsIHNpemVfdCBwdXNoX3NpemUpCit7Cisg ICAgaW50IGVyciA9IDA7CisgICAgRkZWdWxrYW5GdW5jdGlvbnMgKnZrID0gJnZrY3R4LT52a2Zu OworICAgIFZrSW1hZ2VWaWV3IGluX3ZpZXdzWzE2XVtBVl9OVU1fREFUQV9QT0lOVEVSU107Cisg ICAgVmtJbWFnZVZpZXcgb3V0X3ZpZXdzW0FWX05VTV9EQVRBX1BPSU5URVJTXTsKKyAgICBWa0lt YWdlTWVtb3J5QmFycmllcjIgaW1nX2JhclsxMjhdOworICAgIGludCBuYl9pbWdfYmFyID0gMDsK KyAgICBWa0ltYWdlTGF5b3V0IGluX2xheW91dCA9IHNhbXBsZXIgIT0gVktfTlVMTF9IQU5ETEUg PworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfSU1BR0VfTEFZT1VUX1NIQURFUl9S RUFEX09OTFlfT1BUSU1BTCA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19JTUFH RV9MQVlPVVRfR0VORVJBTDsKKworICAgIC8qIFVwZGF0ZSBkZXNjcmlwdG9ycyBhbmQgaW5pdCB0 aGUgZXhlYyBjb250ZXh0ICovCisgICAgRkZWa0V4ZWNDb250ZXh0ICpleGVjID0gZmZfdmtfZXhl Y19nZXQodmtjdHgsIGUpOworICAgIGZmX3ZrX2V4ZWNfc3RhcnQodmtjdHgsIGV4ZWMpOworCisg ICAgLyogQWRkIGRlcHMgYW5kIGNyZWF0ZSB0ZW1wb3JhcnkgaW1hZ2V2aWV3cyAqLworICAgIFJF VChmZl92a19leGVjX2FkZF9kZXBfZnJhbWUodmtjdHgsIGV4ZWMsIG91dCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFZLX1BJUEVMSU5FX1NUQUdFXzJfQUxMX0NPTU1BTkRTX0JJ VCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZLX1BJUEVMSU5FX1NUQUdFXzJf Q09NUFVURV9TSEFERVJfQklUKSk7CisgICAgUkVUKGZmX3ZrX2NyZWF0ZV9pbWFnZXZpZXdzKHZr Y3R4LCBleGVjLCBvdXRfdmlld3MsIG91dCwgRkZfVktfUkVQX0ZMT0FUKSk7CisgICAgZm9yIChp bnQgaSA9IDA7IGkgPCBuYl9pbjsgaSsrKSB7CisgICAgICAgIFJFVChmZl92a19leGVjX2FkZF9k ZXBfZnJhbWUodmtjdHgsIGV4ZWMsIGluW2ldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFZLX1BJUEVMSU5FX1NUQUdFXzJfQUxMX0NPTU1BTkRTX0JJVCwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19QSVBFTElORV9TVEFHRV8yX0NPTVBVVEVf U0hBREVSX0JJVCkpOworICAgICAgICBSRVQoZmZfdmtfY3JlYXRlX2ltYWdldmlld3ModmtjdHgs IGV4ZWMsIGluX3ZpZXdzW2ldLCBpbltpXSwgRkZfVktfUkVQX0ZMT0FUKSk7CisgICAgfQorCisg ICAgLyogVXBkYXRlIGRlc2NyaXB0b3Igc2V0cyAqLworICAgIGZmX3ZrX3NoYWRlcl91cGRhdGVf aW1nX2FycmF5KHZrY3R4LCBleGVjLCBzaGQsIG91dCwgb3V0X3ZpZXdzLCAwLCBuYl9pbiwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19JTUFHRV9MQVlPVVRfR0VORVJBTCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19OVUxMX0hBTkRMRSk7CisgICAg Zm9yIChpbnQgaSA9IDA7IGkgPCBuYl9pbjsgaSsrKQorICAgICAgICBmZl92a19zaGFkZXJfdXBk YXRlX2ltZ19hcnJheSh2a2N0eCwgZXhlYywgc2hkLCBpbltpXSwgaW5fdmlld3NbaV0sIDAsIGks CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluX2xheW91dCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlcik7CisKKyAgICAvKiBCaW5k IHBpcGVsaW5lLCB1cGRhdGUgcHVzaCBkYXRhICovCisgICAgZmZfdmtfZXhlY19iaW5kX3NoYWRl cih2a2N0eCwgZXhlYywgc2hkKTsKKyAgICBpZiAocHVzaF9zcmMpCisgICAgICAgIGZmX3ZrX3No YWRlcl91cGRhdGVfcHVzaF9jb25zdCh2a2N0eCwgZXhlYywgc2hkLCBWS19TSEFERVJfU1RBR0Vf Q09NUFVURV9CSVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBw dXNoX3NpemUsIHB1c2hfc3JjKTsKKworICAgIC8qIEFkZCBkYXRhIHN5bmMgYmFycmllcnMgKi8K KyAgICBmZl92a19mcmFtZV9iYXJyaWVyKHZrY3R4LCBleGVjLCBvdXQsIGltZ19iYXIsICZuYl9p bWdfYmFyLAorICAgICAgICAgICAgICAgICAgICAgICAgVktfUElQRUxJTkVfU1RBR0VfMl9BTExf Q09NTUFORFNfQklULAorICAgICAgICAgICAgICAgICAgICAgICAgVktfUElQRUxJTkVfU1RBR0Vf Ml9DT01QVVRFX1NIQURFUl9CSVQsCisgICAgICAgICAgICAgICAgICAgICAgICBWS19BQ0NFU1Nf U0hBREVSX1dSSVRFX0JJVCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFZLX0lNQUdFX0xBWU9V VF9HRU5FUkFMLAorICAgICAgICAgICAgICAgICAgICAgICAgVktfUVVFVUVfRkFNSUxZX0lHTk9S RUQpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmJfaW47IGkrKykKKyAgICAgICAgZmZfdmtf ZnJhbWVfYmFycmllcih2a2N0eCwgZXhlYywgaW5baV0sIGltZ19iYXIsICZuYl9pbWdfYmFyLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZLX1BJUEVMSU5FX1NUQUdFXzJfQUxMX0NPTU1B TkRTX0JJVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19QSVBFTElORV9TVEFHRV8y X0NPTVBVVEVfU0hBREVSX0JJVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19BQ0NF U1NfU0hBREVSX1JFQURfQklULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluX2xheW91 dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19RVUVVRV9GQU1JTFlfSUdOT1JFRCk7 CisKKyAgICB2ay0+Q21kUGlwZWxpbmVCYXJyaWVyMihleGVjLT5idWYsICYoVmtEZXBlbmRlbmN5 SW5mbykgeworICAgICAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfREVQRU5ERU5D WV9JTkZPLAorICAgICAgICAgICAgLnBJbWFnZU1lbW9yeUJhcnJpZXJzID0gaW1nX2JhciwKKyAg ICAgICAgICAgIC5pbWFnZU1lbW9yeUJhcnJpZXJDb3VudCA9IG5iX2ltZ19iYXIsCisgICAgICAg IH0pOworCisgICAgdmstPkNtZERpc3BhdGNoKGV4ZWMtPmJ1ZiwKKyAgICAgICAgICAgICAgICAg ICAgRkZBTElHTih2a2N0eC0+b3V0cHV0X3dpZHRoLCAgc2hkLT5sZ19zaXplWzBdKS9zaGQtPmxn X3NpemVbMF0sCisgICAgICAgICAgICAgICAgICAgIEZGQUxJR04odmtjdHgtPm91dHB1dF9oZWln aHQsIHNoZC0+bGdfc2l6ZVsxXSkvc2hkLT5sZ19zaXplWzFdLAorICAgICAgICAgICAgICAgICAg ICBzaGQtPmxnX3NpemVbMl0pOworCisgICAgcmV0dXJuIGZmX3ZrX2V4ZWNfc3VibWl0KHZrY3R4 LCBleGVjKTsKK2ZhaWw6CisgICAgZmZfdmtfZXhlY19kaXNjYXJkX2RlcHModmtjdHgsIGV4ZWMp OworICAgIHJldHVybiBlcnI7Cit9Ci0tIAoyLjQ5LjEKCgpGcm9tIGQyMjU5NzVhZTNiOTAwMjEz Zjg5MTE3M2QxZDVhZTgyYjgxYWUzYzIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCkZyb206IEph bWFpa2ExIDxsdWthc3pjejE4QHdwLnBsPgpEYXRlOiBXZWQsIDMgU2VwIDIwMjUgMTM6MDg6MTYg KzAwMDAKU3ViamVjdDogW1BBVENIIDAzMy8xMThdIENoYW5naW5nIHZ1bGthbiBmaWxlIGRpcmVj dG9yeQoKLS0tCiBsaWJhdmZpbHRlci92dWxrYW5fZmlsdGVyLmggfCA2NSAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgNjUgZGVsZXRpb25zKC0p CiBkZWxldGUgbW9kZSAxMDA2NDQgbGliYXZmaWx0ZXIvdnVsa2FuX2ZpbHRlci5oCgpkaWZmIC0t Z2l0IGEvbGliYXZmaWx0ZXIvdnVsa2FuX2ZpbHRlci5oIGIvbGliYXZmaWx0ZXIvdnVsa2FuX2Zp bHRlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZWQ5YzRkZTM5Li4wMDAwMDAw MDAwCi0tLSBhL2xpYmF2ZmlsdGVyL3Z1bGthbl9maWx0ZXIuaAorKysgL2Rldi9udWxsCkBAIC0x LDY1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIEx5bm5lCi0gKgotICogVGhpcyBmaWxl IGlzIHBhcnQgb2YgRkZtcGVnLgotICoKLSAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVk IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyLjEg b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0g KgotICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1 c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w bGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk IGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9u ZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91 bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBN QSAwMjExMC0xMzAxIFVTQQotICovCi0KLSNpZm5kZWYgQVZGSUxURVJfVlVMS0FOX0ZJTFRFUl9I Ci0jZGVmaW5lIEFWRklMVEVSX1ZVTEtBTl9GSUxURVJfSAotCi0jaW5jbHVkZSAiYXZmaWx0ZXIu aCIKLQotI2luY2x1ZGUgImxpYmF2dXRpbC92dWxrYW4uaCIKLQotLyoqCi0gKiBHZW5lcmFsIGxh dmZpIElPIGZ1bmN0aW9ucwotICovCi1pbnQgZmZfdmtfZmlsdGVyX2luaXQgICAgICAgICAoQVZG aWx0ZXJDb250ZXh0ICphdmN0eCk7Ci1pbnQgZmZfdmtfZmlsdGVyX2NvbmZpZ19pbnB1dCAoQVZG aWx0ZXJMaW5rICAgKmlubGluayk7Ci1pbnQgZmZfdmtfZmlsdGVyX2NvbmZpZ19vdXRwdXQoQVZG aWx0ZXJMaW5rICAqb3V0bGluayk7Ci0KLS8qKgotICogQ2FuIGJlIGNhbGxlZCBtYW51YWxseSwg aWYgbm90IHVzaW5nIGZmX3ZrX2ZpbHRlcl9jb25maWdfb3V0cHV0LgotICovCi1pbnQgZmZfdmtf ZmlsdGVyX2luaXRfY29udGV4dChBVkZpbHRlckNvbnRleHQgKmF2Y3R4LCBGRlZ1bGthbkNvbnRl eHQgKnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVkJ1ZmZlclJlZiAqZnJhbWVz X3JlZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3aWR0aCwgaW50IGhlaWdo dCwgZW51bSBBVlBpeGVsRm9ybWF0IHN3X2Zvcm1hdCk7Ci0KLS8qKgotICogU3VibWl0IGEgY29t cHV0ZSBzaGFkZXIgd2l0aCBhIHplcm8vb25lIGlucHV0IGFuZCBzaW5nbGUgb3V0IGZvciBleGVj dXRpb24uCi0gKi8KLWludCBmZl92a19maWx0ZXJfcHJvY2Vzc19zaW1wbGUoRkZWdWxrYW5Db250 ZXh0ICp2a2N0eCwgRkZWa0V4ZWNQb29sICplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBGRlZ1bGthblNoYWRlciAqc2hkLCBBVkZyYW1lICpvdXRfZiwgQVZGcmFtZSAqaW5fZiwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmtTYW1wbGVyIHNhbXBsZXIsIHZvaWQg KnB1c2hfc3JjLCBzaXplX3QgcHVzaF9zaXplKTsKLQotLyoqCi0gKiBTdWJtaXQgYSBjb21wdXRl IHNoYWRlciB3aXRoIGEgc2luZ2xlIGluIGFuZCBzaW5nbGUgb3V0IHdpdGggMiBzdGFnZXMuCi0g Ki8KLWludCBmZl92a19maWx0ZXJfcHJvY2Vzc18ycGFzcyhGRlZ1bGthbkNvbnRleHQgKnZrY3R4 LCBGRlZrRXhlY1Bvb2wgKmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkZWdWxr YW5TaGFkZXIgKnNoZF9saXN0WzJdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFW RnJhbWUgKm91dCwgQVZGcmFtZSAqdG1wLCBBVkZyYW1lICppbiwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBWa1NhbXBsZXIgc2FtcGxlciwgdm9pZCAqcHVzaF9zcmMsIHNpemVfdCBw dXNoX3NpemUpOwotCi0vKioKLSAqIFVwIHRvIDE2IGlucHV0cywgb25lIG91dHB1dAotICovCi1p bnQgZmZfdmtfZmlsdGVyX3Byb2Nlc3NfTmluKEZGVnVsa2FuQ29udGV4dCAqdmtjdHgsIEZGVmtF eGVjUG9vbCAqZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkZWdWxrYW5TaGFkZXIg KnNoZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVZGcmFtZSAqb3V0LCBBVkZyYW1l ICppbltdLCBpbnQgbmJfaW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZrU2FtcGxl ciBzYW1wbGVyLCB2b2lkICpwdXNoX3NyYywgc2l6ZV90IHB1c2hfc2l6ZSk7Ci0KLSNlbmRpZiAv KiBBVkZJTFRFUl9WVUxLQU5fRklMVEVSX0ggKi8KLS0gCjIuNDkuMQoKCkZyb20gMTMwNmI4M2Rm NDdiYWNkMTc0NGNiNjk4Y2JjODZmMzkwYjk1MWJkMyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEK RnJvbTogSmFtYWlrYTEgPGx1a2FzemN6MThAd3AucGw+CkRhdGU6IFdlZCwgMyBTZXAgMjAyNSAx MzowOTowMyArMDAwMApTdWJqZWN0OiBbUEFUQ0ggMDM0LzExOF0gQ2hhbmdpbmcgdnVsa2FuIGZp bGUgZGlyZWN0b3J5CgotLS0KIGxpYmF2ZmlsdGVyL3Z1bGthbi92dWxrYW5fZmlsdGVyLmggfCA2 NSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDEgZmlsZSBjaGFuZ2VkLCA2NSBpbnNl cnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliYXZmaWx0ZXIvdnVsa2FuL3Z1bGthbl9m aWx0ZXIuaAoKZGlmZiAtLWdpdCBhL2xpYmF2ZmlsdGVyL3Z1bGthbi92dWxrYW5fZmlsdGVyLmgg Yi9saWJhdmZpbHRlci92dWxrYW4vdnVsa2FuX2ZpbHRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAuLjA0NWYwZTZkNzMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJhdmZp bHRlci92dWxrYW4vdnVsa2FuX2ZpbHRlci5oCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5 cmlnaHQgKGMpIEx5bm5lCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgorICoK KyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5 b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogRkZtcGVnIGlzIGRpc3RyaWJ1 dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo ZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3Nl ciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3 cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorICovCisK KyNpZm5kZWYgQVZGSUxURVJfVlVMS0FOX0ZJTFRFUl9ICisjZGVmaW5lIEFWRklMVEVSX1ZVTEtB Tl9GSUxURVJfSAorCisjaW5jbHVkZSAibGliYXZmaWx0ZXIvYXZmaWx0ZXIuaCIKKworI2luY2x1 ZGUgIi4uLy4uL2xpYmF2dXRpbC92dWxrYW4vdnVsa2FuLmgiCisKKy8qKgorICogR2VuZXJhbCBs YXZmaSBJTyBmdW5jdGlvbnMKKyAqLworaW50IGZmX3ZrX2ZpbHRlcl9pbml0ICAgICAgICAgKEFW RmlsdGVyQ29udGV4dCAqYXZjdHgpOworaW50IGZmX3ZrX2ZpbHRlcl9jb25maWdfaW5wdXQgKEFW RmlsdGVyTGluayAgICppbmxpbmspOworaW50IGZmX3ZrX2ZpbHRlcl9jb25maWdfb3V0cHV0KEFW RmlsdGVyTGluayAgKm91dGxpbmspOworCisvKioKKyAqIENhbiBiZSBjYWxsZWQgbWFudWFsbHks IGlmIG5vdCB1c2luZyBmZl92a19maWx0ZXJfY29uZmlnX291dHB1dC4KKyAqLworaW50IGZmX3Zr X2ZpbHRlcl9pbml0X2NvbnRleHQoQVZGaWx0ZXJDb250ZXh0ICphdmN0eCwgRkZWdWxrYW5Db250 ZXh0ICpzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVZCdWZmZXJSZWYgKmZyYW1l c19yZWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgd2lkdGgsIGludCBoZWln aHQsIGVudW0gQVZQaXhlbEZvcm1hdCBzd19mb3JtYXQpOworCisvKioKKyAqIFN1Ym1pdCBhIGNv bXB1dGUgc2hhZGVyIHdpdGggYSB6ZXJvL29uZSBpbnB1dCBhbmQgc2luZ2xlIG91dCBmb3IgZXhl Y3V0aW9uLgorICovCitpbnQgZmZfdmtfZmlsdGVyX3Byb2Nlc3Nfc2ltcGxlKEZGVnVsa2FuQ29u dGV4dCAqdmtjdHgsIEZGVmtFeGVjUG9vbCAqZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgRkZWdWxrYW5TaGFkZXIgKnNoZCwgQVZGcmFtZSAqb3V0X2YsIEFWRnJhbWUgKmluX2Ys CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZrU2FtcGxlciBzYW1wbGVyLCB2b2lk ICpwdXNoX3NyYywgc2l6ZV90IHB1c2hfc2l6ZSk7CisKKy8qKgorICogU3VibWl0IGEgY29tcHV0 ZSBzaGFkZXIgd2l0aCBhIHNpbmdsZSBpbiBhbmQgc2luZ2xlIG91dCB3aXRoIDIgc3RhZ2VzLgor ICovCitpbnQgZmZfdmtfZmlsdGVyX3Byb2Nlc3NfMnBhc3MoRkZWdWxrYW5Db250ZXh0ICp2a2N0 eCwgRkZWa0V4ZWNQb29sICplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZGVnVs a2FuU2hhZGVyICpzaGRfbGlzdFsyXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBB VkZyYW1lICpvdXQsIEFWRnJhbWUgKnRtcCwgQVZGcmFtZSAqaW4sCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgVmtTYW1wbGVyIHNhbXBsZXIsIHZvaWQgKnB1c2hfc3JjLCBzaXplX3Qg cHVzaF9zaXplKTsKKworLyoqCisgKiBVcCB0byAxNiBpbnB1dHMsIG9uZSBvdXRwdXQKKyAqLwor aW50IGZmX3ZrX2ZpbHRlcl9wcm9jZXNzX05pbihGRlZ1bGthbkNvbnRleHQgKnZrY3R4LCBGRlZr RXhlY1Bvb2wgKmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZGVnVsa2FuU2hhZGVy ICpzaGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFWRnJhbWUgKm91dCwgQVZGcmFt ZSAqaW5bXSwgaW50IG5iX2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWa1NhbXBs ZXIgc2FtcGxlciwgdm9pZCAqcHVzaF9zcmMsIHNpemVfdCBwdXNoX3NpemUpOworCisjZW5kaWYg LyogQVZGSUxURVJfVlVMS0FOX0ZJTFRFUl9IICovCi0tIAoyLjQ5LjEKCgpGcm9tIDE5ODY2N2Ji NzlmOWUzZWEzNmU5ZDcyNjIwZmE1YTJjNGM0MmIwOTkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAx CkZyb206IEphbWFpa2ExIDxsdWthc3pjejE4QHdwLnBsPgpEYXRlOiBXZWQsIDMgU2VwIDIwMjUg MTM6MDk6MzkgKzAwMDAKU3ViamVjdDogW1BBVENIIDAzNS8xMThdIENoYW5naW5nIHZ1bGthbiBm aWxlIGRpcmVjdG9yeQoKLS0tCiBsaWJhdmZpbHRlci92dWxrYW4vdnVsa2FuX3NvdXJjZS5jIHwg MTg4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiAxIGZpbGUgY2hhbmdlZCwgMTg4IGlu c2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJhdmZpbHRlci92dWxrYW4vdnVsa2Fu X3NvdXJjZS5jCgpkaWZmIC0tZ2l0IGEvbGliYXZmaWx0ZXIvdnVsa2FuL3Z1bGthbl9zb3VyY2Uu YyBiL2xpYmF2ZmlsdGVyL3Z1bGthbi92dWxrYW5fc291cmNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMC4uMTZlNzA5OTgwYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmF2 ZmlsdGVyL3Z1bGthbi92dWxrYW5fc291cmNlLmMKQEAgLTAsMCArMSwxODggQEAKKyNpbmNsdWRl IDxzdGRkZWYuaD4KKyNpbmNsdWRlICJ2dWxrYW5fc291cmNlLmgiCisKK2NvbnN0IGNoYXIgKmZm X3NvdXJjZV9id2RpZl9jb21wID0gIlwKK2NvbnN0IHZlYzQgY29lZl9sZlsyXSA9IHsgdmVjNCg0 MzA5KSwgdmVjNCgyMTMpLCB9O1xuXAorY29uc3QgdmVjNCBjb2VmX2hmWzNdID0geyB2ZWM0KDU1 NzApLCB2ZWM0KDM4MDEpLCB2ZWM0KDEwMTYpIH07XG5cCitjb25zdCB2ZWM0IGNvZWZfc3BbMl0g PSB7IHZlYzQoNTA3NyksIHZlYzQoOTgxKSwgfTtcblwKK1xuXAordmVjNCBwcm9jZXNzX2ludHJh KHZlYzQgY3VyWzRdKVxuXAore1xuXAorICAgcmV0dXJuIChjb2VmX3NwWzBdKihjdXJbMV0gKyBj dXJbMl0pIC0gY29lZl9zcFsxXSooY3VyWzBdICsgY3VyWzNdKSkgLyAoMSA8PCAxMyk7XG5cCit9 XG5cCitcblwKK3ZvaWQgcHJvY2Vzc19wbGFuZV9pbnRyYShpbnQgaWR4LCBpdmVjMiBwb3MpXG5c Cit7XG5cCisgICAgdmVjNCBkY3VyWzRdO1xuXAorICAgIGRjdXJbMF0gPSBpbWFnZUxvYWQoY3Vy W2lkeF0sIHBvcyAtIGl2ZWMyKDAsIDMpKTtcblwKKyAgICBkY3VyWzFdID0gaW1hZ2VMb2FkKGN1 cltpZHhdLCBwb3MgLSBpdmVjMigwLCAxKSk7XG5cCisgICAgZGN1clsyXSA9IGltYWdlTG9hZChj dXJbaWR4XSwgcG9zICsgaXZlYzIoMCwgMSkpO1xuXAorICAgIGRjdXJbM10gPSBpbWFnZUxvYWQo Y3VyW2lkeF0sIHBvcyArIGl2ZWMyKDAsIDMpKTtcblwKKyAgICBpbWFnZVN0b3JlKGRzdFtpZHhd LCBwb3MsIHByb2Nlc3NfaW50cmEoZGN1cikpO1xuXAorfVxuXAorXG5cCit2ZWM0IHByb2Nlc3Nf bGluZSh2ZWM0IHByZXYyWzVdLCB2ZWM0IHByZXYxWzJdLCB2ZWM0IGN1cls0XSwgdmVjNCBuZXh0 MVsyXSwgdmVjNCBuZXh0Mls1XSlcblwKK3tcblwKKyAgIHZlYzQgZmMgPSBjdXJbMV07XG5cCisg ICB2ZWM0IGZlID0gY3VyWzJdO1xuXAorICAgdmVjNCBmcyA9IHByZXYyWzJdICsgbmV4dDJbMl07 XG5cCisgICB2ZWM0IGZkID0gZnMgLyAyO1xuXAorXG5cCisgICB2ZWM0IHRlbXBfZGlmZlszXTtc blwKKyAgIHRlbXBfZGlmZlswXSA9IGFicyhwcmV2MlsyXSAtIG5leHQyWzJdKTtcblwKKyAgIHRl bXBfZGlmZlsxXSA9IChhYnMocHJldjFbMF0gLSBmYykgKyBhYnMocHJldjFbMV0gLSBmZSkpIC8g MjtcblwKKyAgIHRlbXBfZGlmZlsyXSA9IChhYnMobmV4dDFbMF0gLSBmYykgKyBhYnMobmV4dDFb MV0gLSBmZSkpIC8gMjtcblwKKyAgIHZlYzQgZGlmZiA9IG1heCh0ZW1wX2RpZmZbMF0gLyAyLCBt YXgodGVtcF9kaWZmWzFdLCB0ZW1wX2RpZmZbMl0pKTtcblwKKyAgIGJ2ZWM0IGRpZmZfbWFzayA9 IGVxdWFsKGRpZmYsIHZlYzQoMCkpO1xuXAorXG5cCisgICB2ZWM0IGZicyA9IHByZXYyWzFdICsg bmV4dDJbMV07XG5cCisgICB2ZWM0IGZmcyA9IHByZXYyWzNdICsgbmV4dDJbM107XG5cCisgICB2 ZWM0IGZiID0gKGZicyAvIDIpIC0gZmM7XG5cCisgICB2ZWM0IGZmID0gKGZmcyAvIDIpIC0gZmU7 XG5cCisgICB2ZWM0IGRjID0gZmQgLSBmYztcblwKKyAgIHZlYzQgZGUgPSBmZCAtIGZlO1xuXAor ICAgdmVjNCBtbWF4ID0gbWF4KGRlLCBtYXgoZGMsIG1pbihmYiwgZmYpKSk7XG5cCisgICB2ZWM0 IG1taW4gPSBtaW4oZGUsIG1pbihkYywgbWF4KGZiLCBmZikpKTtcblwKKyAgIGRpZmYgPSBtYXgo ZGlmZiwgbWF4KG1taW4sIC1tbWF4KSk7XG5cCitcblwKKyAgIHZlYzQgaW50ZXJwb2xhdGVfYWxs ID0gKCgoY29lZl9oZlswXSooZnMpIC0gY29lZl9oZlsxXSooZmJzICsgZmZzKSArXG5cCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvZWZfaGZbMl0qKHByZXYyWzBdICsgbmV4dDJbMF0g KyBwcmV2Mls0XSArIG5leHQyWzRdKSkgLyA0KSArXG5cCisgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb2VmX2xmWzBdKihmYyArIGZlKSAtIGNvZWZfbGZbMV0qKGN1clswXSArIGN1clszXSkp IC8gKDEgPDwgMTMpO1xuXAorICAgdmVjNCBpbnRlcnBvbGF0ZV9jdXIgPSAoY29lZl9zcFswXSoo ZmMgKyBmZSkgLSBjb2VmX3NwWzFdKihjdXJbMF0gKyBjdXJbM10pKSAvICgxIDw8IDEzKTtcblwK K1xuXAorICAgYnZlYzQgaW50ZXJwb2xhdGVfY25kMSA9IGdyZWF0ZXJUaGFuKGFicyhmYyAtIGZl KSwgdGVtcF9kaWZmWzBdKTtcblwKKyAgIHZlYzQgaW50ZXJwb2wgPSBtaXgoaW50ZXJwb2xhdGVf Y3VyLCBpbnRlcnBvbGF0ZV9hbGwsIGludGVycG9sYXRlX2NuZDEpO1xuXAorICAgaW50ZXJwb2wg PSBjbGFtcChpbnRlcnBvbCwgZmQgLSBkaWZmLCBmZCArIGRpZmYpO1xuXAorICAgcmV0dXJuIG1p eChpbnRlcnBvbCwgZmQsIGRpZmZfbWFzayk7XG5cCit9XG5cCitcblwKK3ZvaWQgcHJvY2Vzc19w bGFuZShpbnQgaWR4LCBjb25zdCBpdmVjMiBwb3MsIGJvb2wgZmlsdGVyX2ZpZWxkLFxuXAorICAg ICAgICAgICAgICAgICAgIGJvb2wgaXNfaW50cmEsIGJvb2wgZmllbGRfcGFyaXR5KVxuXAore1xu XAorICAgIHZlYzQgZGN1cls0XTtcblwKKyAgICB2ZWM0IHByZXYxWzJdO1xuXAorICAgIHZlYzQg bmV4dDFbMl07XG5cCisgICAgdmVjNCBwcmV2Mls1XTtcblwKKyAgICB2ZWM0IG5leHQyWzVdO1xu XAorXG5cCisgICAgZGN1clswXSA9IGltYWdlTG9hZChjdXJbaWR4XSwgcG9zIC0gaXZlYzIoMCwg MykpO1xuXAorICAgIGRjdXJbMV0gPSBpbWFnZUxvYWQoY3VyW2lkeF0sIHBvcyAtIGl2ZWMyKDAs IDEpKTtcblwKKyAgICBkY3VyWzJdID0gaW1hZ2VMb2FkKGN1cltpZHhdLCBwb3MgKyBpdmVjMigw LCAxKSk7XG5cCisgICAgZGN1clszXSA9IGltYWdlTG9hZChjdXJbaWR4XSwgcG9zICsgaXZlYzIo MCwgMykpO1xuXAorXG5cCisgICAgcHJldjFbMF0gPSBpbWFnZUxvYWQocHJldltpZHhdLCBwb3Mg LSBpdmVjMigwLCAxKSk7XG5cCisgICAgcHJldjFbMV0gPSBpbWFnZUxvYWQocHJldltpZHhdLCBw b3MgKyBpdmVjMigwLCAxKSk7XG5cCitcblwKKyAgICBuZXh0MVswXSA9IGltYWdlTG9hZChuZXh0 W2lkeF0sIHBvcyAtIGl2ZWMyKDAsIDEpKTtcblwKKyAgICBuZXh0MVsxXSA9IGltYWdlTG9hZChu ZXh0W2lkeF0sIHBvcyArIGl2ZWMyKDAsIDEpKTtcblwKK1xuXAorICAgIGlmIChmaWVsZF9wYXJp dHkpIHtcblwKKyAgICAgICAgcHJldjJbMF0gPSBpbWFnZUxvYWQocHJldltpZHhdLCBwb3MgLSBp dmVjMigwLCA0KSk7XG5cCisgICAgICAgIHByZXYyWzFdID0gaW1hZ2VMb2FkKHByZXZbaWR4XSwg cG9zIC0gaXZlYzIoMCwgMikpO1xuXAorICAgICAgICBwcmV2MlsyXSA9IGltYWdlTG9hZChwcmV2 W2lkeF0sIHBvcyk7XG5cCisgICAgICAgIHByZXYyWzNdID0gaW1hZ2VMb2FkKHByZXZbaWR4XSwg cG9zICsgaXZlYzIoMCwgMikpO1xuXAorICAgICAgICBwcmV2Mls0XSA9IGltYWdlTG9hZChwcmV2 W2lkeF0sIHBvcyArIGl2ZWMyKDAsIDQpKTtcblwKK1xuXAorICAgICAgICBuZXh0MlswXSA9IGlt YWdlTG9hZChjdXJbaWR4XSwgcG9zIC0gaXZlYzIoMCwgNCkpO1xuXAorICAgICAgICBuZXh0Mlsx XSA9IGltYWdlTG9hZChjdXJbaWR4XSwgcG9zIC0gaXZlYzIoMCwgMikpO1xuXAorICAgICAgICBu ZXh0MlsyXSA9IGltYWdlTG9hZChjdXJbaWR4XSwgcG9zKTtcblwKKyAgICAgICAgbmV4dDJbM10g PSBpbWFnZUxvYWQoY3VyW2lkeF0sIHBvcyArIGl2ZWMyKDAsIDIpKTtcblwKKyAgICAgICAgbmV4 dDJbNF0gPSBpbWFnZUxvYWQoY3VyW2lkeF0sIHBvcyArIGl2ZWMyKDAsIDQpKTtcblwKKyAgICB9 IGVsc2Uge1xuXAorICAgICAgICBwcmV2MlswXSA9IGltYWdlTG9hZChjdXJbaWR4XSwgcG9zIC0g aXZlYzIoMCwgNCkpO1xuXAorICAgICAgICBwcmV2MlsxXSA9IGltYWdlTG9hZChjdXJbaWR4XSwg cG9zIC0gaXZlYzIoMCwgMikpO1xuXAorICAgICAgICBwcmV2MlsyXSA9IGltYWdlTG9hZChjdXJb aWR4XSwgcG9zKTtcblwKKyAgICAgICAgcHJldjJbM10gPSBpbWFnZUxvYWQoY3VyW2lkeF0sIHBv cyArIGl2ZWMyKDAsIDIpKTtcblwKKyAgICAgICAgcHJldjJbNF0gPSBpbWFnZUxvYWQoY3VyW2lk eF0sIHBvcyArIGl2ZWMyKDAsIDQpKTtcblwKK1xuXAorICAgICAgICBuZXh0MlswXSA9IGltYWdl TG9hZChuZXh0W2lkeF0sIHBvcyAtIGl2ZWMyKDAsIDQpKTtcblwKKyAgICAgICAgbmV4dDJbMV0g PSBpbWFnZUxvYWQobmV4dFtpZHhdLCBwb3MgLSBpdmVjMigwLCAyKSk7XG5cCisgICAgICAgIG5l eHQyWzJdID0gaW1hZ2VMb2FkKG5leHRbaWR4XSwgcG9zKTtcblwKKyAgICAgICAgbmV4dDJbM10g PSBpbWFnZUxvYWQobmV4dFtpZHhdLCBwb3MgKyBpdmVjMigwLCAyKSk7XG5cCisgICAgICAgIG5l eHQyWzRdID0gaW1hZ2VMb2FkKG5leHRbaWR4XSwgcG9zICsgaXZlYzIoMCwgNCkpO1xuXAorICAg IH1cblwKK1xuXAorICAgIGltYWdlU3RvcmUoZHN0W2lkeF0sIHBvcywgcHJvY2Vzc19saW5lKHBy ZXYyLCBwcmV2MSwgZGN1ciwgbmV4dDEsIG5leHQyKSk7XG5cCit9IjsKKworY29uc3QgY2hhciAq ZmZfc291cmNlX2RlYmF5ZXJfY29tcCA9ICJcCisjZGVmaW5lIExEKHhvLCB5bykgXFxcblwKKyAg ICAoaW1hZ2VMb2FkKGlucHV0X2ltZ1swXSwgcG9zICsgaXZlYzIoKHhvKSwgKHlvKSkpLnIpXG5c CitcblwKK3ZvaWQgZGViYXllcl9iaWxpbmVhcih2b2lkKVxuXAore1xuXAorICAgIGl2ZWMyIHBv cyA9IGl2ZWMyKGdsX0dsb2JhbEludm9jYXRpb25JRC54eSkgPDwgMTtcblwKK1xuXAorICAgIC8q IFIgYmFzaXMgKi9cblwKKyAgICB2ZWM0IHRsID0gdmVjNChMRCgwLCAwKSxcblwKKyAgICAgICAg ICAgICAgICAgICAoTEQoMSwgMCkgKyBMRCgtMSwgMCkgKyBMRCgwLCAxKSArIExEKDAsIC0xKSkg LyA0LjBmLFxuXAorICAgICAgICAgICAgICAgICAgIChMRCgtMSwgLTEpICsgTEQoMSwgMSkgKyBM RCgtMSwgMSkgKyBMRCgxLCAtMSkpIC8gNC4wZixcblwKKyAgICAgICAgICAgICAgICAgICAxLjBm KTtcblwKKyAgICBpbWFnZVN0b3JlKG91dHB1dF9pbWdbMF0sIHBvcywgdGwpO1xuXAorXG5cCisg ICAgLyogRzEgYmFzaXMgKi9cblwKKyAgICB2ZWM0IHRyID0gdmVjNCgoTEQoMiwgMCkgKyBMRCgw LCAwKSkgLyAyLjBmLFxuXAorICAgICAgICAgICAgICAgICAgIExEKDEsIDApLFxuXAorICAgICAg ICAgICAgICAgICAgIChMRCgxLCAxKSArIExEKDEsIC0xKSkgLyAyLjBmLFxuXAorICAgICAgICAg ICAgICAgICAgIDEuMGYpO1xuXAorICAgIGltYWdlU3RvcmUob3V0cHV0X2ltZ1swXSwgcG9zICsg aXZlYzIoMSwgMCksIHRyKTtcblwKK1xuXAorICAgIC8qIEcyIGJhc2lzICovXG5cCisgICAgdmVj NCBibCA9IHZlYzQoKExEKDAsIDIpICsgTEQoMCwgMCkpIC8gMi4wZixcblwKKyAgICAgICAgICAg ICAgICAgICBMRCgwLCAxKSxcblwKKyAgICAgICAgICAgICAgICAgICAoTEQoMSwgMSkgKyBMRCgt MSwgMSkpIC8gMi4wZixcblwKKyAgICAgICAgICAgICAgICAgICAxLjBmKTtcblwKKyAgICBpbWFn ZVN0b3JlKG91dHB1dF9pbWdbMF0sIHBvcyArIGl2ZWMyKDAsIDEpLCBibCk7XG5cCitcblwKKyAg ICAvKiBCIGJhc2lzICovXG5cCisgICAgdmVjNCBiciA9IHZlYzQoKExEKDAsIDApICsgTEQoMiwg MikgKyBMRCgwLCAyKSArIExEKDIsIDApKSAvIDQuMGYsXG5cCisgICAgICAgICAgICAgICAgICAg KExEKDIsIDEpICsgTEQoMCwgMSkgKyBMRCgxLCAyKSArIExEKDEsIDApKSAvIDQuMGYsXG5cCisg ICAgICAgICAgICAgICAgICAgTEQoMSwgMSksXG5cCisgICAgICAgICAgICAgICAgICAgMS4wZik7 XG5cCisgICAgaW1hZ2VTdG9yZShvdXRwdXRfaW1nWzBdLCBwb3MgKyBpdmVjMigxLCAxKSwgYnIp O1xuXAorfVxuXAorXG5cCit2b2lkIGRlYmF5ZXJfYmlsaW5lYXJfaHEodm9pZClcblwKK3tcblwK KyAgICBpdmVjMiBwb3MgPSBpdmVjMihnbF9HbG9iYWxJbnZvY2F0aW9uSUQueHkpIDw8IDE7XG5c CitcblwKKyAgICAvKiBSIGJhc2lzICovXG5cCisgICAgdmVjNCB0bCA9IHZlYzQoTEQoMCwgMCks XG5cCisgICAgICAgICAgICAgICAgICAgKDQuMGYqTEQoMCwgMCkgKyAyLjBmKihMRCgwLCAtMSkg KyBMRCgwLCAxKSArIExEKC0xLCAwKSArIExEKDEsIDApKSAtXG5cCisgICAgICAgICAgICAgICAg ICAgIChMRCgwLCAtMikgKyBMRCgwLCAyKSArIExEKC0yLCAwKSArIExEKDIsIDApKSkgLyA4LjBm LFxuXAorICAgICAgICAgICAgICAgICAgICgxMi4wZipMRCgwLCAwKSArIDQuMGYqKExEKC0xLCAt MSkgKyBMRCgtMSwgMSkgKyBMRCgxLCAtMSkgKyBMRCgxLCAxKSkgLVxuXAorICAgICAgICAgICAg ICAgICAgICAzLjBmKihMRCgwLCAtMikgKyBMRCgwLCAyKSArIExEKC0yLCAwKSArIExEKDIsIDAp KSkgLyAxNi4wZixcblwKKyAgICAgICAgICAgICAgICAgICAxLjBmKTtcblwKKyAgICBpbWFnZVN0 b3JlKG91dHB1dF9pbWdbMF0sIHBvcywgdGwpO1xuXAorXG5cCisgICAgLyogRzEgYmFzaXMgKi9c blwKKyAgICB2ZWM0IHRyID0gdmVjNCgoMTAuMGYqTEQoMSwgMCkgKyA4LjBmKihMRCgwLCAwKSAr IExEKDIsIDApKSAtXG5cCisgICAgICAgICAgICAgICAgICAgIDIuMGYqKExEKDAsIC0xKSArIExE KDIsIDEpICsgTEQoMCwgMSkgKyBMRCgyLCAtMSkgKyBMRCgtMSwgMCkgKyBMRCgzLCAwKSkgK1xu XAorICAgICAgICAgICAgICAgICAgICBMRCgxLCAtMikgKyBMRCgxLCAyKSkgLyAxNi4wZixcblwK KyAgICAgICAgICAgICAgICAgICBMRCgxLCAwKSxcblwKKyAgICAgICAgICAgICAgICAgICAoMTAu MGYqTEQoMSwgMCkgKyA4LjBmKihMRCgxLCAtMSkgKyBMRCgxLCAxKSkgLVxuXAorICAgICAgICAg ICAgICAgICAgICAyLjBmKihMRCgwLCAtMSkgKyBMRCgwLCAxKSArIExEKDIsIC0xKSArIExEKDIs IDEpICsgTEQoMSwgLTIpICsgTEQoMSwgMikpICtcblwKKyAgICAgICAgICAgICAgICAgICAgTEQo LTEsIDApICsgTEQoMywgMCkpIC8gMTYuMGYsXG5cCisgICAgICAgICAgICAgICAgICAgMS4wZik7 XG5cCisgICAgaW1hZ2VTdG9yZShvdXRwdXRfaW1nWzBdLCBwb3MgKyBpdmVjMigxLCAwKSwgdHIp O1xuXAorXG5cCisgICAgLyogRzIgYmFzaXMgKi9cblwKKyAgICB2ZWM0IGJsID0gdmVjNCgoMTAu MGYqTEQoMCwgMSkgKyA4LjBmKihMRCgwLCAwKSArIExEKDAsIDIpKSAtXG5cCisgICAgICAgICAg ICAgICAgICAgMi4wZiooTEQoLTEsIDApICsgTEQoLTEsIDIpICsgTEQoMSwgMCkgKyBMRCgxLCAy KSArIExEKDAsIC0xKSArIExEKDAsIDMpKSArXG5cCisgICAgICAgICAgICAgICAgICAgTEQoLTIs IDEpICsgTEQoMiwgMSkpIC8gMTYuMGYsXG5cCisgICAgICAgICAgICAgICAgICAgTEQoMCwgMSks XG5cCisgICAgICAgICAgICAgICAgICAgKDEwLjBmKkxEKDAsIDEpICsgOC4wZiooTEQoLTEsIDEp ICsgTEQoMSwgMSkpIC1cblwKKyAgICAgICAgICAgICAgICAgICAyLjBmKihMRCgtMSwgMCkgKyBM RCgxLCAyKSArIExEKC0xLCAyKSArIExEKDEsIDApICsgTEQoLTIsIDEpICsgTEQoMiwgMSkpICtc blwKKyAgICAgICAgICAgICAgICAgICAgTEQoMCwgLTEpICsgTEQoMCwgMykpIC8gMTYuMGYsXG5c CisgICAgICAgICAgICAgICAgICAgMS4wZik7XG5cCisgICAgaW1hZ2VTdG9yZShvdXRwdXRfaW1n WzBdLCBwb3MgKyBpdmVjMigwLCAxKSwgYmwpO1xuXAorXG5cCisgICAgLyogQiBiYXNpcyAqL1xu XAorICAgIHZlYzQgYnIgPSB2ZWM0KCgxMi4wZipMRCgxLCAxKSArIDQuMGYqKExEKDAsIDApICsg TEQoMCwgMikgKyBMRCgyLCAwKSArIExEKDIsIDIpKSAtXG5cCisgICAgICAgICAgICAgICAgICAg IDMuMGYqKExEKDEsIC0xKSArIExEKDEsIDMpICsgTEQoLTEsIDEpICsgTEQoMywgMSkpKSAvIDE2 LjBmLFxuXAorICAgICAgICAgICAgICAgICAgICg0LjBmKkxEKDEsIDEpICsgMi4wZiooTEQoMSwg MCkgKyBMRCgxLCAyKSArIExEKDAsIDEpICsgTEQoMiwgMSkpIC1cblwKKyAgICAgICAgICAgICAg ICAgICAgKExEKDEsIC0xKSArIExEKDEsIDMpICsgTEQoLTEsIDEpICsgTEQoMywgMSkpKSAvIDgu MGYsXG5cCisgICAgICAgICAgICAgICAgICAgTEQoMSwgMSksXG5cCisgICAgICAgICAgICAgICAg ICAgMS4wZik7XG5cCisgICAgaW1hZ2VTdG9yZShvdXRwdXRfaW1nWzBdLCBwb3MgKyBpdmVjMigx LCAxKSwgYnIpO1xuXAorfSI7Ci0tIAoyLjQ5LjEKCgpGcm9tIDlkY2MwMzMyYjdlNmYyODkyMGJm M2U1ZDI2ZDFiOTZiNWM5MzA5OTkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCkZyb206IEphbWFp a2ExIDxsdWthc3pjejE4QHdwLnBsPgpEYXRlOiBXZWQsIDMgU2VwIDIwMjUgMTM6MTA6MTggKzAw MDAKU3ViamVjdDogW1BBVENIIDAzNi8xMThdIENoYW5naW5nIHZ1bGthbiBmaWxlIGRpcmVjdG9y eQoKLS0tCiBsaWJhdmZpbHRlci92dWxrYW4vdnVsa2FuX3NvdXJjZS5oIHwgMjUgKysrKysrKysr KysrKysrKysrKysrKysrKwogMSBmaWxlIGNoYW5nZWQsIDI1IGluc2VydGlvbnMoKykKIGNyZWF0 ZSBtb2RlIDEwMDY0NCBsaWJhdmZpbHRlci92dWxrYW4vdnVsa2FuX3NvdXJjZS5oCgpkaWZmIC0t Z2l0IGEvbGliYXZmaWx0ZXIvdnVsa2FuL3Z1bGthbl9zb3VyY2UuaCBiL2xpYmF2ZmlsdGVyL3Z1 bGthbi92dWxrYW5fc291cmNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MC4uYjc1NjY1NDg1MgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmF2ZmlsdGVyL3Z1bGthbi92dWxr YW5fc291cmNlLmgKQEAgLTAsMCArMSwyNSBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9m IEZGbXBlZy4KKyAqCisgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg TGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNl bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIEZGbXBl ZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1w ZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIElu Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMw MSBVU0EKKyAqLworCisjaWZuZGVmIEFWRklMVEVSX1ZVTEtBTl9TT1VSQ0VfSAorI2RlZmluZSBB VkZJTFRFUl9WVUxLQU5fU09VUkNFX0gKKworZXh0ZXJuIGNvbnN0IGNoYXIgKmZmX3NvdXJjZV9i d2RpZl9jb21wOworZXh0ZXJuIGNvbnN0IGNoYXIgKmZmX3NvdXJjZV9kZWJheWVyX2NvbXA7CisK KyNlbmRpZiAvKiBBVkZJTFRFUl9WVUxLQU5fU09VUkNFX0ggKi8KLS0gCjIuNDkuMQoKCkZyb20g MTBjYjYyMjcxOTJhNzhlMWZlYTY0NjFmZTdjZDA2YmE5NmM0MjRlYiBNb24gU2VwIDE3IDAwOjAw OjAwIDIwMDEKRnJvbTogSmFtYWlrYTEgPGx1a2FzemN6MThAd3AucGw+CkRhdGU6IFdlZCwgMyBT ZXAgMjAyNSAxMzoxMDo0NyArMDAwMApTdWJqZWN0OiBbUEFUQ0ggMDM3LzExOF0gQ2hhbmdpbmcg dnVsa2FuIGZpbGUgZGlyZWN0b3J5CgotLS0KIGxpYmF2ZmlsdGVyL3Z1bGthbi9id2RpZi5jb21w IHwgMTIyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2Vk LCAxMjIgZGVsZXRpb25zKC0pCiBkZWxldGUgbW9kZSAxMDA2NDQgbGliYXZmaWx0ZXIvdnVsa2Fu L2J3ZGlmLmNvbXAKCmRpZmYgLS1naXQgYS9saWJhdmZpbHRlci92dWxrYW4vYndkaWYuY29tcCBi L2xpYmF2ZmlsdGVyL3Z1bGthbi9id2RpZi5jb21wCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp bmRleCA1MTUyNDY0ODIzLi4wMDAwMDAwMDAwCi0tLSBhL2xpYmF2ZmlsdGVyL3Z1bGthbi9id2Rp Zi5jb21wCisrKyAvZGV2L251bGwKQEAgLTEsMTIyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg KGMpIEx5bm5lCi0gKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgotICoKLSAqIEZG bXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAq IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs aWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b247IGVpdGhlcgotICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGlu IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FS UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRB QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK LSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgot ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5l cmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0 byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry ZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQotICovCi0KLWNvbnN0 IHZlYzQgY29lZl9sZlsyXSA9IHsgdmVjNCg0MzA5KSwgdmVjNCgyMTMpLCB9OwotY29uc3QgdmVj NCBjb2VmX2hmWzNdID0geyB2ZWM0KDU1NzApLCB2ZWM0KDM4MDEpLCB2ZWM0KDEwMTYpIH07Ci1j b25zdCB2ZWM0IGNvZWZfc3BbMl0gPSB7IHZlYzQoNTA3NyksIHZlYzQoOTgxKSwgfTsKLQotdmVj NCBwcm9jZXNzX2ludHJhKHZlYzQgY3VyWzRdKQotewotICAgcmV0dXJuIChjb2VmX3NwWzBdKihj dXJbMV0gKyBjdXJbMl0pIC0gY29lZl9zcFsxXSooY3VyWzBdICsgY3VyWzNdKSkgLyAoMSA8PCAx Myk7Ci19Ci0KLXZvaWQgcHJvY2Vzc19wbGFuZV9pbnRyYShpbnQgaWR4LCBpdmVjMiBwb3MpCi17 Ci0gICAgdmVjNCBkY3VyWzRdOwotICAgIGRjdXJbMF0gPSBpbWFnZUxvYWQoY3VyW2lkeF0sIHBv cyAtIGl2ZWMyKDAsIDMpKTsKLSAgICBkY3VyWzFdID0gaW1hZ2VMb2FkKGN1cltpZHhdLCBwb3Mg LSBpdmVjMigwLCAxKSk7Ci0gICAgZGN1clsyXSA9IGltYWdlTG9hZChjdXJbaWR4XSwgcG9zICsg aXZlYzIoMCwgMSkpOwotICAgIGRjdXJbM10gPSBpbWFnZUxvYWQoY3VyW2lkeF0sIHBvcyArIGl2 ZWMyKDAsIDMpKTsKLSAgICBpbWFnZVN0b3JlKGRzdFtpZHhdLCBwb3MsIHByb2Nlc3NfaW50cmEo ZGN1cikpOwotfQotCi12ZWM0IHByb2Nlc3NfbGluZSh2ZWM0IHByZXYyWzVdLCB2ZWM0IHByZXYx WzJdLCB2ZWM0IGN1cls0XSwgdmVjNCBuZXh0MVsyXSwgdmVjNCBuZXh0Mls1XSkKLXsKLSAgIHZl YzQgZmMgPSBjdXJbMV07Ci0gICB2ZWM0IGZlID0gY3VyWzJdOwotICAgdmVjNCBmcyA9IHByZXYy WzJdICsgbmV4dDJbMl07Ci0gICB2ZWM0IGZkID0gZnMgLyAyOwotCi0gICB2ZWM0IHRlbXBfZGlm ZlszXTsKLSAgIHRlbXBfZGlmZlswXSA9IGFicyhwcmV2MlsyXSAtIG5leHQyWzJdKTsKLSAgIHRl bXBfZGlmZlsxXSA9IChhYnMocHJldjFbMF0gLSBmYykgKyBhYnMocHJldjFbMV0gLSBmZSkpIC8g MjsKLSAgIHRlbXBfZGlmZlsyXSA9IChhYnMobmV4dDFbMF0gLSBmYykgKyBhYnMobmV4dDFbMV0g LSBmZSkpIC8gMjsKLSAgIHZlYzQgZGlmZiA9IG1heCh0ZW1wX2RpZmZbMF0gLyAyLCBtYXgodGVt cF9kaWZmWzFdLCB0ZW1wX2RpZmZbMl0pKTsKLSAgIGJ2ZWM0IGRpZmZfbWFzayA9IGVxdWFsKGRp ZmYsIHZlYzQoMCkpOwotCi0gICB2ZWM0IGZicyA9IHByZXYyWzFdICsgbmV4dDJbMV07Ci0gICB2 ZWM0IGZmcyA9IHByZXYyWzNdICsgbmV4dDJbM107Ci0gICB2ZWM0IGZiID0gKGZicyAvIDIpIC0g ZmM7Ci0gICB2ZWM0IGZmID0gKGZmcyAvIDIpIC0gZmU7Ci0gICB2ZWM0IGRjID0gZmQgLSBmYzsK LSAgIHZlYzQgZGUgPSBmZCAtIGZlOwotICAgdmVjNCBtbWF4ID0gbWF4KGRlLCBtYXgoZGMsIG1p bihmYiwgZmYpKSk7Ci0gICB2ZWM0IG1taW4gPSBtaW4oZGUsIG1pbihkYywgbWF4KGZiLCBmZikp KTsKLSAgIGRpZmYgPSBtYXgoZGlmZiwgbWF4KG1taW4sIC1tbWF4KSk7Ci0KLSAgIHZlYzQgaW50 ZXJwb2xhdGVfYWxsID0gKCgoY29lZl9oZlswXSooZnMpIC0gY29lZl9oZlsxXSooZmJzICsgZmZz KSArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZWZfaGZbMl0qKHByZXYyWzBdICsg bmV4dDJbMF0gKyBwcmV2Mls0XSArIG5leHQyWzRdKSkgLyA0KSArCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICBjb2VmX2xmWzBdKihmYyArIGZlKSAtIGNvZWZfbGZbMV0qKGN1clswXSArIGN1 clszXSkpIC8gKDEgPDwgMTMpOwotICAgdmVjNCBpbnRlcnBvbGF0ZV9jdXIgPSAoY29lZl9zcFsw XSooZmMgKyBmZSkgLSBjb2VmX3NwWzFdKihjdXJbMF0gKyBjdXJbM10pKSAvICgxIDw8IDEzKTsK LQotICAgYnZlYzQgaW50ZXJwb2xhdGVfY25kMSA9IGdyZWF0ZXJUaGFuKGFicyhmYyAtIGZlKSwg dGVtcF9kaWZmWzBdKTsKLSAgIHZlYzQgaW50ZXJwb2wgPSBtaXgoaW50ZXJwb2xhdGVfY3VyLCBp bnRlcnBvbGF0ZV9hbGwsIGludGVycG9sYXRlX2NuZDEpOwotICAgaW50ZXJwb2wgPSBjbGFtcChp bnRlcnBvbCwgZmQgLSBkaWZmLCBmZCArIGRpZmYpOwotICAgcmV0dXJuIG1peChpbnRlcnBvbCwg ZmQsIGRpZmZfbWFzayk7Ci19Ci0KLXZvaWQgcHJvY2Vzc19wbGFuZShpbnQgaWR4LCBjb25zdCBp dmVjMiBwb3MsIGJvb2wgZmlsdGVyX2ZpZWxkLAotICAgICAgICAgICAgICAgICAgIGJvb2wgaXNf aW50cmEsIGJvb2wgZmllbGRfcGFyaXR5KQotewotICAgIHZlYzQgZGN1cls0XTsKLSAgICB2ZWM0 IHByZXYxWzJdOwotICAgIHZlYzQgbmV4dDFbMl07Ci0gICAgdmVjNCBwcmV2Mls1XTsKLSAgICB2 ZWM0IG5leHQyWzVdOwotCi0gICAgZGN1clswXSA9IGltYWdlTG9hZChjdXJbaWR4XSwgcG9zIC0g aXZlYzIoMCwgMykpOwotICAgIGRjdXJbMV0gPSBpbWFnZUxvYWQoY3VyW2lkeF0sIHBvcyAtIGl2 ZWMyKDAsIDEpKTsKLSAgICBkY3VyWzJdID0gaW1hZ2VMb2FkKGN1cltpZHhdLCBwb3MgKyBpdmVj MigwLCAxKSk7Ci0gICAgZGN1clszXSA9IGltYWdlTG9hZChjdXJbaWR4XSwgcG9zICsgaXZlYzIo MCwgMykpOwotCi0gICAgcHJldjFbMF0gPSBpbWFnZUxvYWQocHJldltpZHhdLCBwb3MgLSBpdmVj MigwLCAxKSk7Ci0gICAgcHJldjFbMV0gPSBpbWFnZUxvYWQocHJldltpZHhdLCBwb3MgKyBpdmVj MigwLCAxKSk7Ci0KLSAgICBuZXh0MVswXSA9IGltYWdlTG9hZChuZXh0W2lkeF0sIHBvcyAtIGl2 ZWMyKDAsIDEpKTsKLSAgICBuZXh0MVsxXSA9IGltYWdlTG9hZChuZXh0W2lkeF0sIHBvcyArIGl2 ZWMyKDAsIDEpKTsKLQotICAgIGlmIChmaWVsZF9wYXJpdHkpIHsKLSAgICAgICAgcHJldjJbMF0g PSBpbWFnZUxvYWQocHJldltpZHhdLCBwb3MgLSBpdmVjMigwLCA0KSk7Ci0gICAgICAgIHByZXYy WzFdID0gaW1hZ2VMb2FkKHByZXZbaWR4XSwgcG9zIC0gaXZlYzIoMCwgMikpOwotICAgICAgICBw cmV2MlsyXSA9IGltYWdlTG9hZChwcmV2W2lkeF0sIHBvcyk7Ci0gICAgICAgIHByZXYyWzNdID0g aW1hZ2VMb2FkKHByZXZbaWR4XSwgcG9zICsgaXZlYzIoMCwgMikpOwotICAgICAgICBwcmV2Mls0 XSA9IGltYWdlTG9hZChwcmV2W2lkeF0sIHBvcyArIGl2ZWMyKDAsIDQpKTsKLQotICAgICAgICBu ZXh0MlswXSA9IGltYWdlTG9hZChjdXJbaWR4XSwgcG9zIC0gaXZlYzIoMCwgNCkpOwotICAgICAg ICBuZXh0MlsxXSA9IGltYWdlTG9hZChjdXJbaWR4XSwgcG9zIC0gaXZlYzIoMCwgMikpOwotICAg ICAgICBuZXh0MlsyXSA9IGltYWdlTG9hZChjdXJbaWR4XSwgcG9zKTsKLSAgICAgICAgbmV4dDJb M10gPSBpbWFnZUxvYWQoY3VyW2lkeF0sIHBvcyArIGl2ZWMyKDAsIDIpKTsKLSAgICAgICAgbmV4 dDJbNF0gPSBpbWFnZUxvYWQoY3VyW2lkeF0sIHBvcyArIGl2ZWMyKDAsIDQpKTsKLSAgICB9IGVs c2UgewotICAgICAgICBwcmV2MlswXSA9IGltYWdlTG9hZChjdXJbaWR4XSwgcG9zIC0gaXZlYzIo MCwgNCkpOwotICAgICAgICBwcmV2MlsxXSA9IGltYWdlTG9hZChjdXJbaWR4XSwgcG9zIC0gaXZl YzIoMCwgMikpOwotICAgICAgICBwcmV2MlsyXSA9IGltYWdlTG9hZChjdXJbaWR4XSwgcG9zKTsK LSAgICAgICAgcHJldjJbM10gPSBpbWFnZUxvYWQoY3VyW2lkeF0sIHBvcyArIGl2ZWMyKDAsIDIp KTsKLSAgICAgICAgcHJldjJbNF0gPSBpbWFnZUxvYWQoY3VyW2lkeF0sIHBvcyArIGl2ZWMyKDAs IDQpKTsKLQotICAgICAgICBuZXh0MlswXSA9IGltYWdlTG9hZChuZXh0W2lkeF0sIHBvcyAtIGl2 ZWMyKDAsIDQpKTsKLSAgICAgICAgbmV4dDJbMV0gPSBpbWFnZUxvYWQobmV4dFtpZHhdLCBwb3Mg LSBpdmVjMigwLCAyKSk7Ci0gICAgICAgIG5leHQyWzJdID0gaW1hZ2VMb2FkKG5leHRbaWR4XSwg cG9zKTsKLSAgICAgICAgbmV4dDJbM10gPSBpbWFnZUxvYWQobmV4dFtpZHhdLCBwb3MgKyBpdmVj MigwLCAyKSk7Ci0gICAgICAgIG5leHQyWzRdID0gaW1hZ2VMb2FkKG5leHRbaWR4XSwgcG9zICsg aXZlYzIoMCwgNCkpOwotICAgIH0KLQotICAgIGltYWdlU3RvcmUoZHN0W2lkeF0sIHBvcywgcHJv Y2Vzc19saW5lKHByZXYyLCBwcmV2MSwgZGN1ciwgbmV4dDEsIG5leHQyKSk7Ci19Ci0tIAoyLjQ5 LjEKCgpGcm9tIGMzOGIwY2JjZTU2MTQwODhjMGY1OTlkYTk2ZWQ3OThiMmU2N2I5ZTMgTW9uIFNl cCAxNyAwMDowMDowMCAyMDAxCkZyb206IEphbWFpa2ExIDxsdWthc3pjejE4QHdwLnBsPgpEYXRl OiBXZWQsIDMgU2VwIDIwMjUgMTM6MTA6NTggKzAwMDAKU3ViamVjdDogW1BBVENIIDAzOC8xMThd IENoYW5naW5nIHZ1bGthbiBmaWxlIGRpcmVjdG9yeQoKLS0tCiBsaWJhdmZpbHRlci92dWxrYW4v ZGViYXllci5jb21wIHwgMTAyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAxIGZp bGUgY2hhbmdlZCwgMTAyIGRlbGV0aW9ucygtKQogZGVsZXRlIG1vZGUgMTAwNjQ0IGxpYmF2Zmls dGVyL3Z1bGthbi9kZWJheWVyLmNvbXAKCmRpZmYgLS1naXQgYS9saWJhdmZpbHRlci92dWxrYW4v ZGViYXllci5jb21wIGIvbGliYXZmaWx0ZXIvdnVsa2FuL2RlYmF5ZXIuY29tcApkZWxldGVkIGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggYzg2YzJmNWVlYy4uMDAwMDAwMDAwMAotLS0gYS9saWJhdmZp bHRlci92dWxrYW4vZGViYXllci5jb21wCisrKyAvZGV2L251bGwKQEAgLTEsMTAyICswLDAgQEAK LS8qCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDI1IEx5bm5lIDxkZXZAbHlubmUuZWU+Ci0gKgot ICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgotICoKLSAqIEZGbXBlZyBpcyBmcmVlIHNv ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRl ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2Ug YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICog dmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy IHZlcnNpb24uCi0gKgotICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg aXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBo YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICog TGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0 d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v ciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQotICovCi0KLSNkZWZpbmUgTEQoeG8sIHlvKSBc Ci0gICAgKGltYWdlTG9hZChpbnB1dF9pbWdbMF0sIHBvcyArIGl2ZWMyKCh4byksICh5bykpKS5y KQotCi12b2lkIGRlYmF5ZXJfYmlsaW5lYXIodm9pZCkKLXsKLSAgICBpdmVjMiBwb3MgPSBpdmVj MihnbF9HbG9iYWxJbnZvY2F0aW9uSUQueHkpIDw8IDE7Ci0KLSAgICAvKiBSIGJhc2lzICovCi0g ICAgdmVjNCB0bCA9IHZlYzQoTEQoMCwgMCksCi0gICAgICAgICAgICAgICAgICAgKExEKDEsIDAp ICsgTEQoLTEsIDApICsgTEQoMCwgMSkgKyBMRCgwLCAtMSkpIC8gNC4wZiwKLSAgICAgICAgICAg ICAgICAgICAoTEQoLTEsIC0xKSArIExEKDEsIDEpICsgTEQoLTEsIDEpICsgTEQoMSwgLTEpKSAv IDQuMGYsCi0gICAgICAgICAgICAgICAgICAgMS4wZik7Ci0gICAgaW1hZ2VTdG9yZShvdXRwdXRf aW1nWzBdLCBwb3MsIHRsKTsKLQotICAgIC8qIEcxIGJhc2lzICovCi0gICAgdmVjNCB0ciA9IHZl YzQoKExEKDIsIDApICsgTEQoMCwgMCkpIC8gMi4wZiwKLSAgICAgICAgICAgICAgICAgICBMRCgx LCAwKSwKLSAgICAgICAgICAgICAgICAgICAoTEQoMSwgMSkgKyBMRCgxLCAtMSkpIC8gMi4wZiwK LSAgICAgICAgICAgICAgICAgICAxLjBmKTsKLSAgICBpbWFnZVN0b3JlKG91dHB1dF9pbWdbMF0s IHBvcyArIGl2ZWMyKDEsIDApLCB0cik7Ci0KLSAgICAvKiBHMiBiYXNpcyAqLwotICAgIHZlYzQg YmwgPSB2ZWM0KChMRCgwLCAyKSArIExEKDAsIDApKSAvIDIuMGYsCi0gICAgICAgICAgICAgICAg ICAgTEQoMCwgMSksCi0gICAgICAgICAgICAgICAgICAgKExEKDEsIDEpICsgTEQoLTEsIDEpKSAv IDIuMGYsCi0gICAgICAgICAgICAgICAgICAgMS4wZik7Ci0gICAgaW1hZ2VTdG9yZShvdXRwdXRf aW1nWzBdLCBwb3MgKyBpdmVjMigwLCAxKSwgYmwpOwotCi0gICAgLyogQiBiYXNpcyAqLwotICAg IHZlYzQgYnIgPSB2ZWM0KChMRCgwLCAwKSArIExEKDIsIDIpICsgTEQoMCwgMikgKyBMRCgyLCAw KSkgLyA0LjBmLAotICAgICAgICAgICAgICAgICAgIChMRCgyLCAxKSArIExEKDAsIDEpICsgTEQo MSwgMikgKyBMRCgxLCAwKSkgLyA0LjBmLAotICAgICAgICAgICAgICAgICAgIExEKDEsIDEpLAot ICAgICAgICAgICAgICAgICAgIDEuMGYpOwotICAgIGltYWdlU3RvcmUob3V0cHV0X2ltZ1swXSwg cG9zICsgaXZlYzIoMSwgMSksIGJyKTsKLX0KLQotdm9pZCBkZWJheWVyX2JpbGluZWFyX2hxKHZv aWQpCi17Ci0gICAgaXZlYzIgcG9zID0gaXZlYzIoZ2xfR2xvYmFsSW52b2NhdGlvbklELnh5KSA8 PCAxOwotCi0gICAgLyogUiBiYXNpcyAqLwotICAgIHZlYzQgdGwgPSB2ZWM0KExEKDAsIDApLAot ICAgICAgICAgICAgICAgICAgICg0LjBmKkxEKDAsIDApICsgMi4wZiooTEQoMCwgLTEpICsgTEQo MCwgMSkgKyBMRCgtMSwgMCkgKyBMRCgxLCAwKSkgLQotICAgICAgICAgICAgICAgICAgICAoTEQo MCwgLTIpICsgTEQoMCwgMikgKyBMRCgtMiwgMCkgKyBMRCgyLCAwKSkpIC8gOC4wZiwKLSAgICAg ICAgICAgICAgICAgICAoMTIuMGYqTEQoMCwgMCkgKyA0LjBmKihMRCgtMSwgLTEpICsgTEQoLTEs IDEpICsgTEQoMSwgLTEpICsgTEQoMSwgMSkpIC0KLSAgICAgICAgICAgICAgICAgICAgMy4wZioo TEQoMCwgLTIpICsgTEQoMCwgMikgKyBMRCgtMiwgMCkgKyBMRCgyLCAwKSkpIC8gMTYuMGYsCi0g ICAgICAgICAgICAgICAgICAgMS4wZik7Ci0gICAgaW1hZ2VTdG9yZShvdXRwdXRfaW1nWzBdLCBw b3MsIHRsKTsKLQotICAgIC8qIEcxIGJhc2lzICovCi0gICAgdmVjNCB0ciA9IHZlYzQoKDEwLjBm KkxEKDEsIDApICsgOC4wZiooTEQoMCwgMCkgKyBMRCgyLCAwKSkgLQotICAgICAgICAgICAgICAg ICAgICAyLjBmKihMRCgwLCAtMSkgKyBMRCgyLCAxKSArIExEKDAsIDEpICsgTEQoMiwgLTEpICsg TEQoLTEsIDApICsgTEQoMywgMCkpICsKLSAgICAgICAgICAgICAgICAgICAgTEQoMSwgLTIpICsg TEQoMSwgMikpIC8gMTYuMGYsCi0gICAgICAgICAgICAgICAgICAgTEQoMSwgMCksCi0gICAgICAg ICAgICAgICAgICAgKDEwLjBmKkxEKDEsIDApICsgOC4wZiooTEQoMSwgLTEpICsgTEQoMSwgMSkp IC0KLSAgICAgICAgICAgICAgICAgICAgMi4wZiooTEQoMCwgLTEpICsgTEQoMCwgMSkgKyBMRCgy LCAtMSkgKyBMRCgyLCAxKSArIExEKDEsIC0yKSArIExEKDEsIDIpKSArCi0gICAgICAgICAgICAg ICAgICAgIExEKC0xLCAwKSArIExEKDMsIDApKSAvIDE2LjBmLAotICAgICAgICAgICAgICAgICAg IDEuMGYpOwotICAgIGltYWdlU3RvcmUob3V0cHV0X2ltZ1swXSwgcG9zICsgaXZlYzIoMSwgMCks IHRyKTsKLQotCi0gICAgLyogRzIgYmFzaXMgKi8KLSAgICB2ZWM0IGJsID0gdmVjNCgoMTAuMGYq TEQoMCwgMSkgKyA4LjBmKihMRCgwLCAwKSArIExEKDAsIDIpKSAtCi0gICAgICAgICAgICAgICAg ICAgMi4wZiooTEQoLTEsIDApICsgTEQoLTEsIDIpICsgTEQoMSwgMCkgKyBMRCgxLCAyKSArIExE KDAsIC0xKSArIExEKDAsIDMpKSArCi0gICAgICAgICAgICAgICAgICAgTEQoLTIsIDEpICsgTEQo MiwgMSkpIC8gMTYuMGYsCi0gICAgICAgICAgICAgICAgICAgTEQoMCwgMSksCi0gICAgICAgICAg ICAgICAgICAgKDEwLjBmKkxEKDAsIDEpICsgOC4wZiooTEQoLTEsIDEpICsgTEQoMSwgMSkpIC0K LSAgICAgICAgICAgICAgICAgICAyLjBmKihMRCgtMSwgMCkgKyBMRCgxLCAyKSArIExEKC0xLCAy KSArIExEKDEsIDApICsgTEQoLTIsIDEpICsgTEQoMiwgMSkpICsKLSAgICAgICAgICAgICAgICAg ICAgTEQoMCwgLTEpICsgTEQoMCwgMykpIC8gMTYuMGYsCi0gICAgICAgICAgICAgICAgICAgMS4w Zik7Ci0gICAgaW1hZ2VTdG9yZShvdXRwdXRfaW1nWzBdLCBwb3MgKyBpdmVjMigwLCAxKSwgYmwp OwotCi0gICAgLyogQiBiYXNpcyAqLwotICAgIHZlYzQgYnIgPSB2ZWM0KCgxMi4wZipMRCgxLCAx KSArIDQuMGYqKExEKDAsIDApICsgTEQoMCwgMikgKyBMRCgyLCAwKSArIExEKDIsIDIpKSAtCi0g ICAgICAgICAgICAgICAgICAgIDMuMGYqKExEKDEsIC0xKSArIExEKDEsIDMpICsgTEQoLTEsIDEp ICsgTEQoMywgMSkpKSAvIDE2LjBmLAotICAgICAgICAgICAgICAgICAgICg0LjBmKkxEKDEsIDEp ICsgMi4wZiooTEQoMSwgMCkgKyBMRCgxLCAyKSArIExEKDAsIDEpICsgTEQoMiwgMSkpIC0KLSAg ICAgICAgICAgICAgICAgICAgKExEKDEsIC0xKSArIExEKDEsIDMpICsgTEQoLTEsIDEpICsgTEQo MywgMSkpKSAvIDguMGYsCi0gICAgICAgICAgICAgICAgICAgTEQoMSwgMSksCi0gICAgICAgICAg ICAgICAgICAgMS4wZik7Ci0gICAgaW1hZ2VTdG9yZShvdXRwdXRfaW1nWzBdLCBwb3MgKyBpdmVj MigxLCAxKSwgYnIpOwotfQotLSAKMi40OS4xCgoKRnJvbSAyMDVhYzFjNjE4Mzk3M2UxMWY4MmZl ZWVmOTc0Mzc3N2RjNWM5Yjk0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBKYW1haWth MSA8bHVrYXN6Y3oxOEB3cC5wbD4KRGF0ZTogV2VkLCAzIFNlcCAyMDI1IDEzOjE0OjA3ICswMDAw ClN1YmplY3Q6IFtQQVRDSCAwMzkvMTE4XSBDaGFuZ2luZyB2dWxrYW4gZmlsZSBkaXJlY3RvcnkK Ci0tLQogbGliYXZ1dGlsL2h3Y29udGV4dF92dWxrYW4uYyB8IDQ3OTAgLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDQ3OTAgZGVsZXRpb25zKC0pCiBk ZWxldGUgbW9kZSAxMDA2NDQgbGliYXZ1dGlsL2h3Y29udGV4dF92dWxrYW4uYwoKZGlmZiAtLWdp dCBhL2xpYmF2dXRpbC9od2NvbnRleHRfdnVsa2FuLmMgYi9saWJhdnV0aWwvaHdjb250ZXh0X3Z1 bGthbi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0N2Y4OTRmNzVmLi4wMDAwMDAw MDAwCi0tLSBhL2xpYmF2dXRpbC9od2NvbnRleHRfdnVsa2FuLmMKKysrIC9kZXYvbnVsbApAQCAt MSw0NzkwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIEx5bm5lCi0gKgotICogVGhpcyBm aWxlIGlzIHBhcnQgb2YgRkZtcGVnLgotICoKLSAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlz aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAy LjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u Ci0gKgotICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi ZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg aW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2Vp dmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBh bG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICog Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9u LCBNQSAwMjExMC0xMzAxIFVTQQotICovCi0KLSNkZWZpbmUgVktfTk9fUFJPVE9UWVBFUwotI2Rl ZmluZSBWS19FTkFCTEVfQkVUQV9FWFRFTlNJT05TCi0KLSNpZmRlZiBfV0lOMzIKLSNpbmNsdWRl IDx3aW5kb3dzLmg+IC8qIEluY2x1ZGVkIHRvIHByZXZlbnQgY29uZmxpY3RzIHdpdGggQ3JlYXRl U2VtYXBob3JlICovCi0jaW5jbHVkZSA8dmVyc2lvbmhlbHBlcnMuaD4KLSNpbmNsdWRlICJjb21w YXQvdzMyZGxmY24uaCIKLSNlbHNlCi0jaW5jbHVkZSA8ZGxmY24uaD4KLSNpbmNsdWRlIDx1bmlz dGQuaD4KLSNlbmRpZgotCi0jaW5jbHVkZSAidGhyZWFkLmgiCi0KLSNpbmNsdWRlICJjb25maWcu aCIKLSNpbmNsdWRlICJwaXhkZXNjLmgiCi0jaW5jbHVkZSAiYXZzdHJpbmcuaCIKLSNpbmNsdWRl ICJpbWd1dGlscy5oIgotI2luY2x1ZGUgImh3Y29udGV4dC5oIgotI2luY2x1ZGUgImh3Y29udGV4 dF9pbnRlcm5hbC5oIgotI2luY2x1ZGUgImh3Y29udGV4dF92dWxrYW4uaCIKLSNpbmNsdWRlICJt ZW0uaCIKLQotI2luY2x1ZGUgInZ1bGthbi5oIgotI2luY2x1ZGUgInZ1bGthbl9sb2FkZXIuaCIK LQotI2lmIENPTkZJR19WQUFQSQotI2luY2x1ZGUgImh3Y29udGV4dF92YWFwaS5oIgotI2VuZGlm Ci0KLSNpZiBDT05GSUdfTElCRFJNCi0jaWYgQ09ORklHX1ZBQVBJCi0jaW5jbHVkZSA8dmEvdmFf ZHJtY29tbW9uLmg+Ci0jZW5kaWYKLSNpZmRlZiBfX2xpbnV4X18KLSNpbmNsdWRlIDxzeXMvc3lz bWFjcm9zLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxzeXMvc3RhdC5oPgotI2luY2x1ZGUgPHhmODZk cm0uaD4KLSNpbmNsdWRlIDxkcm1fZm91cmNjLmg+Ci0jaW5jbHVkZSAiaHdjb250ZXh0X2RybS5o IgotI2VuZGlmCi0KLSNpZiBIQVZFX0xJTlVYX0RNQV9CVUZfSAotI2luY2x1ZGUgPHN5cy9pb2N0 bC5oPgotI2luY2x1ZGUgPGxpbnV4L2RtYS1idWYuaD4KLSNlbmRpZgotCi0jaWYgQ09ORklHX0NV REEKLSNpbmNsdWRlICJod2NvbnRleHRfY3VkYV9pbnRlcm5hbC5oIgotI2luY2x1ZGUgImN1ZGFf Y2hlY2suaCIKLSNkZWZpbmUgQ0hFQ0tfQ1UoeCkgRkZfQ1VEQV9DSEVDS19ETChjdWRhX2N1LCBj dSwgeCkKLSNlbmRpZgotCi10eXBlZGVmIHN0cnVjdCBWdWxrYW5EZXZpY2VGZWF0dXJlcyB7Ci0g ICAgVmtQaHlzaWNhbERldmljZUZlYXR1cmVzMiBkZXZpY2U7Ci0KLSAgICBWa1BoeXNpY2FsRGV2 aWNlVnVsa2FuMTFGZWF0dXJlcyB2dWxrYW5fMV8xOwotICAgIFZrUGh5c2ljYWxEZXZpY2VWdWxr YW4xMkZlYXR1cmVzIHZ1bGthbl8xXzI7Ci0gICAgVmtQaHlzaWNhbERldmljZVZ1bGthbjEzRmVh dHVyZXMgdnVsa2FuXzFfMzsKLSAgICBWa1BoeXNpY2FsRGV2aWNlVGltZWxpbmVTZW1hcGhvcmVG ZWF0dXJlcyB0aW1lbGluZV9zZW1hcGhvcmU7Ci0gICAgVmtQaHlzaWNhbERldmljZVNoYWRlclN1 Ymdyb3VwUm90YXRlRmVhdHVyZXNLSFIgc3ViZ3JvdXBfcm90YXRlOwotICAgIFZrUGh5c2ljYWxE ZXZpY2VIb3N0SW1hZ2VDb3B5RmVhdHVyZXNFWFQgaG9zdF9pbWFnZV9jb3B5OwotCi0jaWZkZWYg VktfS0hSX3NoYWRlcl9leHBlY3RfYXNzdW1lCi0gICAgVmtQaHlzaWNhbERldmljZVNoYWRlckV4 cGVjdEFzc3VtZUZlYXR1cmVzS0hSIGV4cGVjdF9hc3N1bWU7Ci0jZW5kaWYKLQotICAgIFZrUGh5 c2ljYWxEZXZpY2VWaWRlb01haW50ZW5hbmNlMUZlYXR1cmVzS0hSIHZpZGVvX21haW50ZW5hbmNl XzE7Ci0jaWZkZWYgVktfS0hSX3ZpZGVvX21haW50ZW5hbmNlMgotICAgIFZrUGh5c2ljYWxEZXZp Y2VWaWRlb01haW50ZW5hbmNlMkZlYXR1cmVzS0hSIHZpZGVvX21haW50ZW5hbmNlXzI7Ci0jZW5k aWYKLSNpZmRlZiBWS19LSFJfdmlkZW9fZGVjb2RlX3ZwOQotICAgIFZrUGh5c2ljYWxEZXZpY2VW aWRlb0RlY29kZVZQOUZlYXR1cmVzS0hSIHZwOV9kZWNvZGU7Ci0jZW5kaWYKLSNpZmRlZiBWS19L SFJfdmlkZW9fZW5jb2RlX2F2MQotICAgIFZrUGh5c2ljYWxEZXZpY2VWaWRlb0VuY29kZUFWMUZl YXR1cmVzS0hSIGF2MV9lbmNvZGU7Ci0jZW5kaWYKLQotICAgIFZrUGh5c2ljYWxEZXZpY2VTaGFk ZXJPYmplY3RGZWF0dXJlc0VYVCBzaGFkZXJfb2JqZWN0OwotICAgIFZrUGh5c2ljYWxEZXZpY2VD b29wZXJhdGl2ZU1hdHJpeEZlYXR1cmVzS0hSIGNvb3BlcmF0aXZlX21hdHJpeDsKLSAgICBWa1Bo eXNpY2FsRGV2aWNlRGVzY3JpcHRvckJ1ZmZlckZlYXR1cmVzRVhUIGRlc2NyaXB0b3JfYnVmZmVy OwotICAgIFZrUGh5c2ljYWxEZXZpY2VTaGFkZXJBdG9taWNGbG9hdEZlYXR1cmVzRVhUIGF0b21p Y19mbG9hdDsKLQotI2lmZGVmIFZLX0tIUl9zaGFkZXJfcmVsYXhlZF9leHRlbmRlZF9pbnN0cnVj dGlvbgotICAgIFZrUGh5c2ljYWxEZXZpY2VTaGFkZXJSZWxheGVkRXh0ZW5kZWRJbnN0cnVjdGlv bkZlYXR1cmVzS0hSIHJlbGF4ZWRfZXh0ZW5kZWRfaW5zdHJ1Y3Rpb247Ci0jZW5kaWYKLX0gVnVs a2FuRGV2aWNlRmVhdHVyZXM7Ci0KLXR5cGVkZWYgc3RydWN0IFZ1bGthbkRldmljZVByaXYgewot ICAgIC8qKgotICAgICAqIFRoZSBwdWJsaWMgQVZWdWxrYW5EZXZpY2VDb250ZXh0LiBTZWUgaHdj b250ZXh0X3Z1bGthbi5oIGZvciBpdC4KLSAgICAgKi8KLSAgICBBVlZ1bGthbkRldmljZUNvbnRl eHQgcDsKLQotICAgIC8qIFZ1bGthbiBsaWJyYXJ5IGFuZCBsb2FkZXIgZnVuY3Rpb25zICovCi0g ICAgdm9pZCAqbGlidnVsa2FuOwotCi0gICAgRkZWdWxrYW5Db250ZXh0ICAgIHZrY3R4OwotICAg IEFWVnVsa2FuRGV2aWNlUXVldWVGYW1pbHkgKmNvbXB1dGVfcWY7Ci0gICAgQVZWdWxrYW5EZXZp Y2VRdWV1ZUZhbWlseSAqdHJhbnNmZXJfcWY7Ci0KLSAgICAvKiBQcm9wZXJ0aWVzICovCi0gICAg VmtQaHlzaWNhbERldmljZVByb3BlcnRpZXMyIHByb3BzOwotICAgIFZrUGh5c2ljYWxEZXZpY2VN ZW1vcnlQcm9wZXJ0aWVzIG1wcm9wczsKLSAgICBWa1BoeXNpY2FsRGV2aWNlRXh0ZXJuYWxNZW1v cnlIb3N0UHJvcGVydGllc0VYVCBocHJvcHM7Ci0gICAgVmtQaHlzaWNhbERldmljZURyaXZlclBy b3BlcnRpZXMgZHByb3BzOwotCi0gICAgLyogT3BhcXVlIEZEIGV4dGVybmFsIHNlbWFwaG9yZSBw cm9wZXJ0aWVzICovCi0gICAgVmtFeHRlcm5hbFNlbWFwaG9yZVByb3BlcnRpZXMgZXh0X3NlbV9w cm9wc19vcGFxdWU7Ci0KLSAgICAvKiBFbmFibGVkIGZlYXR1cmVzICovCi0gICAgVnVsa2FuRGV2 aWNlRmVhdHVyZXMgZmVhdHM7Ci0KLSAgICAvKiBRdWV1ZXMgKi8KLSAgICBwdGhyZWFkX211dGV4 X3QgKipxZl9tdXRleDsKLSAgICB1aW50MzJfdCBuYl90b3RfcWZzOwotICAgIHVpbnQzMl90IGlt Z19xZnNbNjRdOwotICAgIHVpbnQzMl90IG5iX2ltZ19xZnM7Ci0KLSAgICAvKiBEZWJ1ZyBjYWxs YmFjayAqLwotICAgIFZrRGVidWdVdGlsc01lc3NlbmdlckVYVCBkZWJ1Z19jdHg7Ci0KLSAgICAv KiBTZXR0aW5ncyAqLwotICAgIGludCB1c2VfbGluZWFyX2ltYWdlczsKLQotICAgIC8qIE9wdGlv biB0byBhbGxvY2F0ZSBhbGwgaW1hZ2UgcGxhbmVzIGluIGEgc2luZ2xlIGFsbG9jYXRpb24gKi8K LSAgICBpbnQgY29udGlndW91c19wbGFuZXM7Ci0KLSAgICAvKiBEaXNhYmxlIG11bHRpcGxhbmUg aW1hZ2VzICovCi0gICAgaW50IGRpc2FibGVfbXVsdGlwbGFuZTsKLQotICAgIC8qIERpc2FibGUg aG9zdCBpbWFnZSB0cmFuc2ZlciAqLwotICAgIGludCBkaXNhYmxlX2hvc3RfdHJhbnNmZXI7Ci0K LSAgICAvKiBQcmVmZXIgbWVtY3B5IG92ZXIgZHluYW1pYyBob3N0IHBvaW50ZXIgaW1wb3J0cyAq LwotICAgIGludCBhdm9pZF9ob3N0X2ltcG9ydDsKLQotICAgIC8qIE1heGltdW0gcXVldWVzICov Ci0gICAgaW50IGxpbWl0X3F1ZXVlczsKLX0gVnVsa2FuRGV2aWNlUHJpdjsKLQotdHlwZWRlZiBz dHJ1Y3QgVnVsa2FuRnJhbWVzUHJpdiB7Ci0gICAgLyoqCi0gICAgICogVGhlIHB1YmxpYyBBVlZ1 bGthbkZyYW1lc0NvbnRleHQuIFNlZSBod2NvbnRleHRfdnVsa2FuLmggZm9yIGl0LgotICAgICAq LwotICAgIEFWVnVsa2FuRnJhbWVzQ29udGV4dCBwOwotCi0gICAgLyogSW1hZ2UgY29udmVyc2lv bnMgKi8KLSAgICBGRlZrRXhlY1Bvb2wgY29tcHV0ZV9leGVjOwotCi0gICAgLyogSW1hZ2UgdHJh bnNmZXJzICovCi0gICAgRkZWa0V4ZWNQb29sIHVwbG9hZF9leGVjOwotICAgIEZGVmtFeGVjUG9v bCBkb3dubG9hZF9leGVjOwotCi0gICAgLyogVGVtcG9yYXJ5IGJ1ZmZlciBwb29scyAqLwotICAg IEFWQnVmZmVyUG9vbCAqdG1wOwotCi0gICAgLyogTW9kaWZpZXIgaW5mbyBsaXN0IHRvIGZyZWUg YXQgdW5pbml0ICovCi0gICAgVmtJbWFnZURybUZvcm1hdE1vZGlmaWVyTGlzdENyZWF0ZUluZm9F WFQgKm1vZGlmaWVyX2luZm87Ci0KLSAgICAvKiBQcm9wZXJ0aWVzIGZvciBEUk0gbW9kaWZpZXIg Zm9yIGVhY2ggcGxhbmUgaW4gdGhlIGltYWdlICovCi0gICAgVmtEcm1Gb3JtYXRNb2RpZmllclBy b3BlcnRpZXNFWFQgZHJtX2Zvcm1hdF9tb2RpZmllcl9wcm9wZXJ0aWVzWzVdOwotfSBWdWxrYW5G cmFtZXNQcml2OwotCi10eXBlZGVmIHN0cnVjdCBBVlZrRnJhbWVJbnRlcm5hbCB7Ci0gICAgcHRo cmVhZF9tdXRleF90IHVwZGF0ZV9tdXRleDsKLQotI2lmIENPTkZJR19DVURBCi0gICAgLyogSW1w b3J0aW5nIGV4dGVybmFsIG1lbW9yeSBpbnRvIGN1ZGEgaXMgcmVhbGx5IGV4cGVuc2l2ZSBzbyB3 ZSBrZWVwIHRoZQotICAgICAqIG1lbW9yeSBpbXBvcnRlZCBhbGwgdGhlIHRpbWUgKi8KLSAgICBB VkJ1ZmZlclJlZiAqY3VkYV9mY19yZWY7IC8qIE5lZWQgdG8ga2VlcCBpdCBhcm91bmQgZm9yIHVu aW5pdCAqLwotICAgIENVZXh0ZXJuYWxNZW1vcnkgZXh0X21lbVtBVl9OVU1fREFUQV9QT0lOVEVS U107Ci0gICAgQ1VtaXBtYXBwZWRBcnJheSBjdV9tbWFbQVZfTlVNX0RBVEFfUE9JTlRFUlNdOwot ICAgIENVYXJyYXkgY3VfYXJyYXlbQVZfTlVNX0RBVEFfUE9JTlRFUlNdOwotICAgIENVZXh0ZXJu YWxTZW1hcGhvcmUgY3Vfc2VtW0FWX05VTV9EQVRBX1BPSU5URVJTXTsKLSNpZmRlZiBfV0lOMzIK LSAgICBIQU5ETEUgZXh0X21lbV9oYW5kbGVbQVZfTlVNX0RBVEFfUE9JTlRFUlNdOwotICAgIEhB TkRMRSBleHRfc2VtX2hhbmRsZVtBVl9OVU1fREFUQV9QT0lOVEVSU107Ci0jZW5kaWYKLSNlbmRp ZgotfSBBVlZrRnJhbWVJbnRlcm5hbDsKLQotLyogSW5pdGlhbGl6ZSBhbGwgc3RydWN0cyBpbiBW dWxrYW5EZXZpY2VGZWF0dXJlcyAqLwotc3RhdGljIHZvaWQgZGV2aWNlX2ZlYXR1cmVzX2luaXQo QVZIV0RldmljZUNvbnRleHQgKmN0eCwgVnVsa2FuRGV2aWNlRmVhdHVyZXMgKmZlYXRzKQotewot ICAgIFZ1bGthbkRldmljZVByaXYgKnAgPSBjdHgtPmh3Y3R4OwotICAgIEZGVnVsa2FuQ29udGV4 dCAqcyA9ICZwLT52a2N0eDsKLQotICAgIGZlYXRzLT5kZXZpY2UgPSAoVmtQaHlzaWNhbERldmlj ZUZlYXR1cmVzMikgewotICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9QSFlTSUNB TF9ERVZJQ0VfRkVBVFVSRVNfMiwKLSAgICB9OwotCi0gICAgRkZfVktfU1RSVUNUX0VYVChzLCAm ZmVhdHMtPmRldmljZSwgJmZlYXRzLT52dWxrYW5fMV8xLCBGRl9WS19FWFRfTk9fRkxBRywKLSAg ICAgICAgICAgICAgICAgICAgIFZLX1NUUlVDVFVSRV9UWVBFX1BIWVNJQ0FMX0RFVklDRV9WVUxL QU5fMV8xX0ZFQVRVUkVTKTsKLSAgICBGRl9WS19TVFJVQ1RfRVhUKHMsICZmZWF0cy0+ZGV2aWNl LCAmZmVhdHMtPnZ1bGthbl8xXzIsIEZGX1ZLX0VYVF9OT19GTEFHLAotICAgICAgICAgICAgICAg ICAgICAgVktfU1RSVUNUVVJFX1RZUEVfUEhZU0lDQUxfREVWSUNFX1ZVTEtBTl8xXzJfRkVBVFVS RVMpOwotICAgIEZGX1ZLX1NUUlVDVF9FWFQocywgJmZlYXRzLT5kZXZpY2UsICZmZWF0cy0+dnVs a2FuXzFfMywgRkZfVktfRVhUX05PX0ZMQUcsCi0gICAgICAgICAgICAgICAgICAgICBWS19TVFJV Q1RVUkVfVFlQRV9QSFlTSUNBTF9ERVZJQ0VfVlVMS0FOXzFfM19GRUFUVVJFUyk7Ci0KLSAgICBG Rl9WS19TVFJVQ1RfRVhUKHMsICZmZWF0cy0+ZGV2aWNlLCAmZmVhdHMtPnRpbWVsaW5lX3NlbWFw aG9yZSwgRkZfVktfRVhUX1BPUlRBQklMSVRZX1NVQlNFVCwKLSAgICAgICAgICAgICAgICAgICAg IFZLX1NUUlVDVFVSRV9UWVBFX1BIWVNJQ0FMX0RFVklDRV9USU1FTElORV9TRU1BUEhPUkVfRkVB VFVSRVMpOwotICAgIEZGX1ZLX1NUUlVDVF9FWFQocywgJmZlYXRzLT5kZXZpY2UsICZmZWF0cy0+ c3ViZ3JvdXBfcm90YXRlLCBGRl9WS19FWFRfU1VCR1JPVVBfUk9UQVRFLAotICAgICAgICAgICAg ICAgICAgICAgVktfU1RSVUNUVVJFX1RZUEVfUEhZU0lDQUxfREVWSUNFX1NIQURFUl9TVUJHUk9V UF9ST1RBVEVfRkVBVFVSRVNfS0hSKTsKLSAgICBGRl9WS19TVFJVQ1RfRVhUKHMsICZmZWF0cy0+ ZGV2aWNlLCAmZmVhdHMtPmhvc3RfaW1hZ2VfY29weSwgRkZfVktfRVhUX0hPU1RfSU1BR0VfQ09Q WSwKLSAgICAgICAgICAgICAgICAgICAgIFZLX1NUUlVDVFVSRV9UWVBFX1BIWVNJQ0FMX0RFVklD RV9IT1NUX0lNQUdFX0NPUFlfRkVBVFVSRVNfRVhUKTsKLQotI2lmZGVmIFZLX0tIUl9zaGFkZXJf ZXhwZWN0X2Fzc3VtZQotICAgIEZGX1ZLX1NUUlVDVF9FWFQocywgJmZlYXRzLT5kZXZpY2UsICZm ZWF0cy0+ZXhwZWN0X2Fzc3VtZSwgRkZfVktfRVhUX0VYUEVDVF9BU1NVTUUsCi0gICAgICAgICAg ICAgICAgICAgICBWS19TVFJVQ1RVUkVfVFlQRV9QSFlTSUNBTF9ERVZJQ0VfU0hBREVSX0VYUEVD VF9BU1NVTUVfRkVBVFVSRVNfS0hSKTsKLSNlbmRpZgotCi0gICAgRkZfVktfU1RSVUNUX0VYVChz LCAmZmVhdHMtPmRldmljZSwgJmZlYXRzLT52aWRlb19tYWludGVuYW5jZV8xLCBGRl9WS19FWFRf VklERU9fTUFJTlRFTkFOQ0VfMSwKLSAgICAgICAgICAgICAgICAgICAgIFZLX1NUUlVDVFVSRV9U WVBFX1BIWVNJQ0FMX0RFVklDRV9WSURFT19NQUlOVEVOQU5DRV8xX0ZFQVRVUkVTX0tIUik7Ci0j aWZkZWYgVktfS0hSX3ZpZGVvX21haW50ZW5hbmNlMgotICAgIEZGX1ZLX1NUUlVDVF9FWFQocywg JmZlYXRzLT5kZXZpY2UsICZmZWF0cy0+dmlkZW9fbWFpbnRlbmFuY2VfMiwgRkZfVktfRVhUX1ZJ REVPX01BSU5URU5BTkNFXzIsCi0gICAgICAgICAgICAgICAgICAgICBWS19TVFJVQ1RVUkVfVFlQ RV9QSFlTSUNBTF9ERVZJQ0VfVklERU9fTUFJTlRFTkFOQ0VfMl9GRUFUVVJFU19LSFIpOwotI2Vu ZGlmCi0jaWZkZWYgVktfS0hSX3ZpZGVvX2RlY29kZV92cDkKLSAgICBGRl9WS19TVFJVQ1RfRVhU KHMsICZmZWF0cy0+ZGV2aWNlLCAmZmVhdHMtPnZwOV9kZWNvZGUsIEZGX1ZLX0VYVF9WSURFT19E RUNPREVfVlA5LAotICAgICAgICAgICAgICAgICAgICAgVktfU1RSVUNUVVJFX1RZUEVfUEhZU0lD QUxfREVWSUNFX1ZJREVPX0RFQ09ERV9WUDlfRkVBVFVSRVNfS0hSKTsKLSNlbmRpZgotI2lmZGVm IFZLX0tIUl92aWRlb19lbmNvZGVfYXYxCi0gICAgRkZfVktfU1RSVUNUX0VYVChzLCAmZmVhdHMt PmRldmljZSwgJmZlYXRzLT5hdjFfZW5jb2RlLCBGRl9WS19FWFRfVklERU9fRU5DT0RFX0FWMSwK LSAgICAgICAgICAgICAgICAgICAgIFZLX1NUUlVDVFVSRV9UWVBFX1BIWVNJQ0FMX0RFVklDRV9W SURFT19FTkNPREVfQVYxX0ZFQVRVUkVTX0tIUik7Ci0jZW5kaWYKLQotICAgIEZGX1ZLX1NUUlVD VF9FWFQocywgJmZlYXRzLT5kZXZpY2UsICZmZWF0cy0+c2hhZGVyX29iamVjdCwgRkZfVktfRVhU X1NIQURFUl9PQkpFQ1QsCi0gICAgICAgICAgICAgICAgICAgICBWS19TVFJVQ1RVUkVfVFlQRV9Q SFlTSUNBTF9ERVZJQ0VfU0hBREVSX09CSkVDVF9GRUFUVVJFU19FWFQpOwotICAgIEZGX1ZLX1NU UlVDVF9FWFQocywgJmZlYXRzLT5kZXZpY2UsICZmZWF0cy0+Y29vcGVyYXRpdmVfbWF0cml4LCBG Rl9WS19FWFRfQ09PUF9NQVRSSVgsCi0gICAgICAgICAgICAgICAgICAgICBWS19TVFJVQ1RVUkVf VFlQRV9QSFlTSUNBTF9ERVZJQ0VfQ09PUEVSQVRJVkVfTUFUUklYX0ZFQVRVUkVTX0tIUik7Ci0g ICAgRkZfVktfU1RSVUNUX0VYVChzLCAmZmVhdHMtPmRldmljZSwgJmZlYXRzLT5kZXNjcmlwdG9y X2J1ZmZlciwgRkZfVktfRVhUX0RFU0NSSVBUT1JfQlVGRkVSLAotICAgICAgICAgICAgICAgICAg ICAgVktfU1RSVUNUVVJFX1RZUEVfUEhZU0lDQUxfREVWSUNFX0RFU0NSSVBUT1JfQlVGRkVSX0ZF QVRVUkVTX0VYVCk7Ci0gICAgRkZfVktfU1RSVUNUX0VYVChzLCAmZmVhdHMtPmRldmljZSwgJmZl YXRzLT5hdG9taWNfZmxvYXQsIEZGX1ZLX0VYVF9BVE9NSUNfRkxPQVQsCi0gICAgICAgICAgICAg ICAgICAgICBWS19TVFJVQ1RVUkVfVFlQRV9QSFlTSUNBTF9ERVZJQ0VfU0hBREVSX0FUT01JQ19G TE9BVF9GRUFUVVJFU19FWFQpOwotCi0jaWZkZWYgVktfS0hSX3NoYWRlcl9yZWxheGVkX2V4dGVu ZGVkX2luc3RydWN0aW9uCi0gICAgRkZfVktfU1RSVUNUX0VYVChzLCAmZmVhdHMtPmRldmljZSwg JmZlYXRzLT5yZWxheGVkX2V4dGVuZGVkX2luc3RydWN0aW9uLCBGRl9WS19FWFRfUkVMQVhFRF9F WFRFTkRFRF9JTlNUUiwKLSAgICAgICAgICAgICAgICAgICAgIFZLX1NUUlVDVFVSRV9UWVBFX1BI WVNJQ0FMX0RFVklDRV9TSEFERVJfUkVMQVhFRF9FWFRFTkRFRF9JTlNUUlVDVElPTl9GRUFUVVJF U19LSFIpOwotI2VuZGlmCi19Ci0KLS8qIENvcHkgYWxsIG5lZWRlZCBkZXZpY2UgZmVhdHVyZXMg Ki8KLXN0YXRpYyB2b2lkIGRldmljZV9mZWF0dXJlc19jb3B5X25lZWRlZChWdWxrYW5EZXZpY2VG ZWF0dXJlcyAqZHN0LCBWdWxrYW5EZXZpY2VGZWF0dXJlcyAqc3JjKQotewotI2RlZmluZSBDT1BZ X1ZBTChWQUwpICAgICAgICBcCi0gICAgZG8geyAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAg ICAgZHN0LT5WQUwgPSBzcmMtPlZBTDsgXAotICAgIH0gd2hpbGUgKDApICAgICAgICAgICAgICBc Ci0KLSAgICBDT1BZX1ZBTChkZXZpY2UuZmVhdHVyZXMuc2hhZGVySW1hZ2VHYXRoZXJFeHRlbmRl ZCk7Ci0gICAgQ09QWV9WQUwoZGV2aWNlLmZlYXR1cmVzLnNoYWRlclN0b3JhZ2VJbWFnZVJlYWRX aXRob3V0Rm9ybWF0KTsKLSAgICBDT1BZX1ZBTChkZXZpY2UuZmVhdHVyZXMuc2hhZGVyU3RvcmFn ZUltYWdlV3JpdGVXaXRob3V0Rm9ybWF0KTsKLSAgICBDT1BZX1ZBTChkZXZpY2UuZmVhdHVyZXMu ZnJhZ21lbnRTdG9yZXNBbmRBdG9taWNzKTsKLSAgICBDT1BZX1ZBTChkZXZpY2UuZmVhdHVyZXMu dmVydGV4UGlwZWxpbmVTdG9yZXNBbmRBdG9taWNzKTsKLSAgICBDT1BZX1ZBTChkZXZpY2UuZmVh dHVyZXMuc2hhZGVySW50NjQpOwotICAgIENPUFlfVkFMKGRldmljZS5mZWF0dXJlcy5zaGFkZXJJ bnQxNik7Ci0gICAgQ09QWV9WQUwoZGV2aWNlLmZlYXR1cmVzLnNoYWRlckZsb2F0NjQpOwotICAg IENPUFlfVkFMKGRldmljZS5mZWF0dXJlcy5zaGFkZXJTdG9yYWdlSW1hZ2VSZWFkV2l0aG91dEZv cm1hdCk7Ci0gICAgQ09QWV9WQUwoZGV2aWNlLmZlYXR1cmVzLnNoYWRlclN0b3JhZ2VJbWFnZVdy aXRlV2l0aG91dEZvcm1hdCk7Ci0KLSAgICBDT1BZX1ZBTCh2dWxrYW5fMV8xLnNhbXBsZXJZY2Jj ckNvbnZlcnNpb24pOwotICAgIENPUFlfVkFMKHZ1bGthbl8xXzEuc3RvcmFnZVB1c2hDb25zdGFu dDE2KTsKLSAgICBDT1BZX1ZBTCh2dWxrYW5fMV8xLnN0b3JhZ2VCdWZmZXIxNkJpdEFjY2Vzcyk7 Ci0gICAgQ09QWV9WQUwodnVsa2FuXzFfMS51bmlmb3JtQW5kU3RvcmFnZUJ1ZmZlcjE2Qml0QWNj ZXNzKTsKLQotICAgIENPUFlfVkFMKHZ1bGthbl8xXzIudGltZWxpbmVTZW1hcGhvcmUpOwotICAg IENPUFlfVkFMKHZ1bGthbl8xXzIuc2NhbGFyQmxvY2tMYXlvdXQpOwotICAgIENPUFlfVkFMKHZ1 bGthbl8xXzIuYnVmZmVyRGV2aWNlQWRkcmVzcyk7Ci0gICAgQ09QWV9WQUwodnVsa2FuXzFfMi5o b3N0UXVlcnlSZXNldCk7Ci0gICAgQ09QWV9WQUwodnVsa2FuXzFfMi5zdG9yYWdlUHVzaENvbnN0 YW50OCk7Ci0gICAgQ09QWV9WQUwodnVsa2FuXzFfMi5zaGFkZXJJbnQ4KTsKLSAgICBDT1BZX1ZB TCh2dWxrYW5fMV8yLnN0b3JhZ2VCdWZmZXI4Qml0QWNjZXNzKTsKLSAgICBDT1BZX1ZBTCh2dWxr YW5fMV8yLnVuaWZvcm1BbmRTdG9yYWdlQnVmZmVyOEJpdEFjY2Vzcyk7Ci0gICAgQ09QWV9WQUwo dnVsa2FuXzFfMi5zaGFkZXJGbG9hdDE2KTsKLSAgICBDT1BZX1ZBTCh2dWxrYW5fMV8yLnNoYWRl ckJ1ZmZlckludDY0QXRvbWljcyk7Ci0gICAgQ09QWV9WQUwodnVsa2FuXzFfMi5zaGFkZXJTaGFy ZWRJbnQ2NEF0b21pY3MpOwotICAgIENPUFlfVkFMKHZ1bGthbl8xXzIudnVsa2FuTWVtb3J5TW9k ZWwpOwotICAgIENPUFlfVkFMKHZ1bGthbl8xXzIudnVsa2FuTWVtb3J5TW9kZWxEZXZpY2VTY29w ZSk7Ci0gICAgQ09QWV9WQUwodnVsa2FuXzFfMi51bmlmb3JtQnVmZmVyU3RhbmRhcmRMYXlvdXQp OwotCi0gICAgQ09QWV9WQUwodnVsa2FuXzFfMy5keW5hbWljUmVuZGVyaW5nKTsKLSAgICBDT1BZ X1ZBTCh2dWxrYW5fMV8zLm1haW50ZW5hbmNlNCk7Ci0gICAgQ09QWV9WQUwodnVsa2FuXzFfMy5z eW5jaHJvbml6YXRpb24yKTsKLSAgICBDT1BZX1ZBTCh2dWxrYW5fMV8zLmNvbXB1dGVGdWxsU3Vi Z3JvdXBzKTsKLSAgICBDT1BZX1ZBTCh2dWxrYW5fMV8zLnN1Ymdyb3VwU2l6ZUNvbnRyb2wpOwot ICAgIENPUFlfVkFMKHZ1bGthbl8xXzMuc2hhZGVyWmVyb0luaXRpYWxpemVXb3JrZ3JvdXBNZW1v cnkpOwotICAgIENPUFlfVkFMKHZ1bGthbl8xXzMuZHluYW1pY1JlbmRlcmluZyk7Ci0KLSAgICBD T1BZX1ZBTCh0aW1lbGluZV9zZW1hcGhvcmUudGltZWxpbmVTZW1hcGhvcmUpOwotICAgIENPUFlf VkFMKHN1Ymdyb3VwX3JvdGF0ZS5zaGFkZXJTdWJncm91cFJvdGF0ZSk7Ci0gICAgQ09QWV9WQUwo aG9zdF9pbWFnZV9jb3B5Lmhvc3RJbWFnZUNvcHkpOwotCi0gICAgQ09QWV9WQUwodmlkZW9fbWFp bnRlbmFuY2VfMS52aWRlb01haW50ZW5hbmNlMSk7Ci0jaWZkZWYgVktfS0hSX3ZpZGVvX21haW50 ZW5hbmNlMgotICAgIENPUFlfVkFMKHZpZGVvX21haW50ZW5hbmNlXzIudmlkZW9NYWludGVuYW5j ZTIpOwotI2VuZGlmCi0KLSNpZmRlZiBWS19LSFJfdmlkZW9fZGVjb2RlX3ZwOQotICAgIENPUFlf VkFMKHZwOV9kZWNvZGUudmlkZW9EZWNvZGVWUDkpOwotI2VuZGlmCi0KLSNpZmRlZiBWS19LSFJf dmlkZW9fZW5jb2RlX2F2MQotICAgIENPUFlfVkFMKGF2MV9lbmNvZGUudmlkZW9FbmNvZGVBVjEp OwotI2VuZGlmCi0KLSAgICBDT1BZX1ZBTChzaGFkZXJfb2JqZWN0LnNoYWRlck9iamVjdCk7Ci0K LSAgICBDT1BZX1ZBTChjb29wZXJhdGl2ZV9tYXRyaXguY29vcGVyYXRpdmVNYXRyaXgpOwotCi0g ICAgQ09QWV9WQUwoZGVzY3JpcHRvcl9idWZmZXIuZGVzY3JpcHRvckJ1ZmZlcik7Ci0gICAgQ09Q WV9WQUwoZGVzY3JpcHRvcl9idWZmZXIuZGVzY3JpcHRvckJ1ZmZlclB1c2hEZXNjcmlwdG9ycyk7 Ci0KLSAgICBDT1BZX1ZBTChhdG9taWNfZmxvYXQuc2hhZGVyQnVmZmVyRmxvYXQzMkF0b21pY3Mp OwotICAgIENPUFlfVkFMKGF0b21pY19mbG9hdC5zaGFkZXJCdWZmZXJGbG9hdDMyQXRvbWljQWRk KTsKLQotI2lmZGVmIFZLX0tIUl9zaGFkZXJfcmVsYXhlZF9leHRlbmRlZF9pbnN0cnVjdGlvbgot ICAgIENPUFlfVkFMKHJlbGF4ZWRfZXh0ZW5kZWRfaW5zdHJ1Y3Rpb24uc2hhZGVyUmVsYXhlZEV4 dGVuZGVkSW5zdHJ1Y3Rpb24pOwotI2VuZGlmCi0KLSNpZmRlZiBWS19LSFJfc2hhZGVyX2V4cGVj dF9hc3N1bWUKLSAgICBDT1BZX1ZBTChleHBlY3RfYXNzdW1lLnNoYWRlckV4cGVjdEFzc3VtZSk7 Ci0jZW5kaWYKLQotI3VuZGVmIENPUFlfVkFMCi19Ci0KLSNkZWZpbmUgQVNQRUNUXzJQTEFORSAo VktfSU1BR0VfQVNQRUNUX1BMQU5FXzBfQklUIHwgVktfSU1BR0VfQVNQRUNUX1BMQU5FXzFfQklU KQotI2RlZmluZSBBU1BFQ1RfM1BMQU5FIChWS19JTUFHRV9BU1BFQ1RfUExBTkVfMF9CSVQgfCBW S19JTUFHRV9BU1BFQ1RfUExBTkVfMV9CSVQgfCBWS19JTUFHRV9BU1BFQ1RfUExBTkVfMl9CSVQp Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgRkZWa0Zvcm1hdEVudHJ5IHsKLSAgICBWa0Zvcm1hdCB2 a2Y7Ci0gICAgZW51bSBBVlBpeGVsRm9ybWF0IHBpeGZtdDsKLSAgICBWa0ltYWdlQXNwZWN0Rmxh Z3MgYXNwZWN0OwotICAgIGludCB2a19wbGFuZXM7Ci0gICAgaW50IG5iX2ltYWdlczsKLSAgICBp bnQgbmJfaW1hZ2VzX2ZhbGxiYWNrOwotICAgIGNvbnN0IFZrRm9ybWF0IGZhbGxiYWNrWzVdOwot fSB2a19mb3JtYXRzX2xpc3RbXSA9IHsKLSAgICAvKiBHcmF5IGZvcm1hdHMgKi8KLSAgICB7IFZL X0ZPUk1BVF9SOF9VTk9STSwgICBBVl9QSVhfRk1UX0dSQVk4LCAgIFZLX0lNQUdFX0FTUEVDVF9D T0xPUl9CSVQsIDEsIDEsIDEsIHsgVktfRk9STUFUX1I4X1VOT1JNICAgfSB9LAotICAgIHsgVktf Rk9STUFUX1IxNl9VTk9STSwgIEFWX1BJWF9GTVRfR1JBWTEwLCAgVktfSU1BR0VfQVNQRUNUX0NP TE9SX0JJVCwgMSwgMSwgMSwgeyBWS19GT1JNQVRfUjE2X1VOT1JNICB9IH0sCi0gICAgeyBWS19G T1JNQVRfUjE2X1VOT1JNLCAgQVZfUElYX0ZNVF9HUkFZMTIsICBWS19JTUFHRV9BU1BFQ1RfQ09M T1JfQklULCAxLCAxLCAxLCB7IFZLX0ZPUk1BVF9SMTZfVU5PUk0gIH0gfSwKLSAgICB7IFZLX0ZP Uk1BVF9SMTZfVU5PUk0sICBBVl9QSVhfRk1UX0dSQVkxNCwgIFZLX0lNQUdFX0FTUEVDVF9DT0xP Ul9CSVQsIDEsIDEsIDEsIHsgVktfRk9STUFUX1IxNl9VTk9STSAgfSB9LAotICAgIHsgVktfRk9S TUFUX1IxNl9VTk9STSwgIEFWX1BJWF9GTVRfR1JBWTE2LCAgVktfSU1BR0VfQVNQRUNUX0NPTE9S X0JJVCwgMSwgMSwgMSwgeyBWS19GT1JNQVRfUjE2X1VOT1JNICB9IH0sCi0gICAgeyBWS19GT1JN QVRfUjMyX1VJTlQsICAgQVZfUElYX0ZNVF9HUkFZMzIsICBWS19JTUFHRV9BU1BFQ1RfQ09MT1Jf QklULCAxLCAxLCAxLCB7IFZLX0ZPUk1BVF9SMzJfVUlOVCAgIH0gfSwKLSAgICB7IFZLX0ZPUk1B VF9SMzJfU0ZMT0FULCBBVl9QSVhfRk1UX0dSQVlGMzIsIFZLX0lNQUdFX0FTUEVDVF9DT0xPUl9C SVQsIDEsIDEsIDEsIHsgVktfRk9STUFUX1IzMl9TRkxPQVQgfSB9LAotCi0gICAgLyogUkdCIGZv cm1hdHMgKi8KLSAgICB7IFZLX0ZPUk1BVF9COEc4UjhBOF9VTk9STSwgICAgICAgICAgIEFWX1BJ WF9GTVRfQkdSQSwgICAgVktfSU1BR0VfQVNQRUNUX0NPTE9SX0JJVCwgMSwgMSwgMSwgeyBWS19G T1JNQVRfQjhHOFI4QThfVU5PUk0gICAgICAgICAgIH0gfSwKLSAgICB7IFZLX0ZPUk1BVF9SOEc4 QjhBOF9VTk9STSwgICAgICAgICAgIEFWX1BJWF9GTVRfUkdCQSwgICAgVktfSU1BR0VfQVNQRUNU X0NPTE9SX0JJVCwgMSwgMSwgMSwgeyBWS19GT1JNQVRfUjhHOEI4QThfVU5PUk0gICAgICAgICAg IH0gfSwKLSAgICB7IFZLX0ZPUk1BVF9SOEc4QjhfVU5PUk0sICAgICAgICAgICAgIEFWX1BJWF9G TVRfUkdCMjQsICAgVktfSU1BR0VfQVNQRUNUX0NPTE9SX0JJVCwgMSwgMSwgMSwgeyBWS19GT1JN QVRfUjhHOEI4X1VOT1JNICAgICAgICAgICAgIH0gfSwKLSAgICB7IFZLX0ZPUk1BVF9COEc4Ujhf VU5PUk0sICAgICAgICAgICAgIEFWX1BJWF9GTVRfQkdSMjQsICAgVktfSU1BR0VfQVNQRUNUX0NP TE9SX0JJVCwgMSwgMSwgMSwgeyBWS19GT1JNQVRfQjhHOFI4X1VOT1JNICAgICAgICAgICAgIH0g fSwKLSAgICB7IFZLX0ZPUk1BVF9SMTZHMTZCMTZfVU5PUk0sICAgICAgICAgIEFWX1BJWF9GTVRf UkdCNDgsICAgVktfSU1BR0VfQVNQRUNUX0NPTE9SX0JJVCwgMSwgMSwgMSwgeyBWS19GT1JNQVRf UjE2RzE2QjE2X1VOT1JNICAgICAgICAgIH0gfSwKLSAgICB7IFZLX0ZPUk1BVF9SMTZHMTZCMTZB MTZfVU5PUk0sICAgICAgIEFWX1BJWF9GTVRfUkdCQTY0LCAgVktfSU1BR0VfQVNQRUNUX0NPTE9S X0JJVCwgMSwgMSwgMSwgeyBWS19GT1JNQVRfUjE2RzE2QjE2QTE2X1VOT1JNICAgICAgIH0gfSwK LSAgICB7IFZLX0ZPUk1BVF9SNUc2QjVfVU5PUk1fUEFDSzE2LCAgICAgIEFWX1BJWF9GTVRfUkdC NTY1LCAgVktfSU1BR0VfQVNQRUNUX0NPTE9SX0JJVCwgMSwgMSwgMSwgeyBWS19GT1JNQVRfUjVH NkI1X1VOT1JNX1BBQ0sxNiAgICAgIH0gfSwKLSAgICB7IFZLX0ZPUk1BVF9CNUc2UjVfVU5PUk1f UEFDSzE2LCAgICAgIEFWX1BJWF9GTVRfQkdSNTY1LCAgVktfSU1BR0VfQVNQRUNUX0NPTE9SX0JJ VCwgMSwgMSwgMSwgeyBWS19GT1JNQVRfQjVHNlI1X1VOT1JNX1BBQ0sxNiAgICAgIH0gfSwKLSAg ICB7IFZLX0ZPUk1BVF9COEc4UjhBOF9VTk9STSwgICAgICAgICAgIEFWX1BJWF9GTVRfQkdSMCwg ICAgVktfSU1BR0VfQVNQRUNUX0NPTE9SX0JJVCwgMSwgMSwgMSwgeyBWS19GT1JNQVRfQjhHOFI4 QThfVU5PUk0gICAgICAgICAgIH0gfSwKLSAgICB7IFZLX0ZPUk1BVF9SOEc4QjhBOF9VTk9STSwg ICAgICAgICAgIEFWX1BJWF9GTVRfUkdCMCwgICAgVktfSU1BR0VfQVNQRUNUX0NPTE9SX0JJVCwg MSwgMSwgMSwgeyBWS19GT1JNQVRfUjhHOEI4QThfVU5PUk0gICAgICAgICAgIH0gfSwKLSAgICB7 IFZLX0ZPUk1BVF9BMlIxMEcxMEIxMF9VTk9STV9QQUNLMzIsIEFWX1BJWF9GTVRfWDJSR0IxMCwg VktfSU1BR0VfQVNQRUNUX0NPTE9SX0JJVCwgMSwgMSwgMSwgeyBWS19GT1JNQVRfQTJSMTBHMTBC MTBfVU5PUk1fUEFDSzMyIH0gfSwKLSAgICB7IFZLX0ZPUk1BVF9BMkIxMEcxMFIxMF9VTk9STV9Q QUNLMzIsIEFWX1BJWF9GTVRfWDJCR1IxMCwgVktfSU1BR0VfQVNQRUNUX0NPTE9SX0JJVCwgMSwg MSwgMSwgeyBWS19GT1JNQVRfQTJCMTBHMTBSMTBfVU5PUk1fUEFDSzMyIH0gfSwKLSAgICB7IFZL X0ZPUk1BVF9SMzJHMzJCMzJfU0ZMT0FULCAgICAgICAgIEFWX1BJWF9GTVRfUkdCRjMyLCAgVktf SU1BR0VfQVNQRUNUX0NPTE9SX0JJVCwgMSwgMSwgMSwgeyBWS19GT1JNQVRfUjMyRzMyQjMyX1NG TE9BVCAgICAgICAgIH0gfSwKLSAgICB7IFZLX0ZPUk1BVF9SMzJHMzJCMzJBMzJfU0ZMT0FULCAg ICAgIEFWX1BJWF9GTVRfUkdCQUYzMiwgVktfSU1BR0VfQVNQRUNUX0NPTE9SX0JJVCwgMSwgMSwg MSwgeyBWS19GT1JNQVRfUjMyRzMyQjMyQTMyX1NGTE9BVCAgICAgIH0gfSwKLSAgICB7IFZLX0ZP Uk1BVF9SMzJHMzJCMzJfVUlOVCwgICAgICAgICAgIEFWX1BJWF9GTVRfUkdCOTYsICAgVktfSU1B R0VfQVNQRUNUX0NPTE9SX0JJVCwgMSwgMSwgMSwgeyBWS19GT1JNQVRfUjMyRzMyQjMyX1VJTlQg ICAgICAgICAgIH0gfSwKLSAgICB7IFZLX0ZPUk1BVF9SMzJHMzJCMzJBMzJfVUlOVCwgICAgICAg IEFWX1BJWF9GTVRfUkdCQTEyOCwgVktfSU1BR0VfQVNQRUNUX0NPTE9SX0JJVCwgMSwgMSwgMSwg eyBWS19GT1JNQVRfUjMyRzMyQjMyQTMyX1VJTlQgICAgICAgIH0gfSwKLQotICAgIC8qIFBsYW5h ciBSR0IgKi8KLSAgICB7IFZLX0ZPUk1BVF9SOF9VTk9STSwgICBBVl9QSVhfRk1UX0dCUlAsICAg ICBWS19JTUFHRV9BU1BFQ1RfQ09MT1JfQklULCAzLCAzLCAzLCB7IFZLX0ZPUk1BVF9SOF9VTk9S TSwgICBWS19GT1JNQVRfUjhfVU5PUk0sICAgVktfRk9STUFUX1I4X1VOT1JNICAgfSB9LAotICAg IHsgVktfRk9STUFUX1IxNl9VTk9STSwgIEFWX1BJWF9GTVRfR0JSUDEwLCAgIFZLX0lNQUdFX0FT UEVDVF9DT0xPUl9CSVQsIDMsIDMsIDMsIHsgVktfRk9STUFUX1IxNl9VTk9STSwgIFZLX0ZPUk1B VF9SMTZfVU5PUk0sICBWS19GT1JNQVRfUjE2X1VOT1JNICB9IH0sCi0gICAgeyBWS19GT1JNQVRf UjE2X1VOT1JNLCAgQVZfUElYX0ZNVF9HQlJQMTIsICAgVktfSU1BR0VfQVNQRUNUX0NPTE9SX0JJ VCwgMywgMywgMywgeyBWS19GT1JNQVRfUjE2X1VOT1JNLCAgVktfRk9STUFUX1IxNl9VTk9STSwg IFZLX0ZPUk1BVF9SMTZfVU5PUk0gIH0gfSwKLSAgICB7IFZLX0ZPUk1BVF9SMTZfVU5PUk0sICBB Vl9QSVhfRk1UX0dCUlAxNCwgICBWS19JTUFHRV9BU1BFQ1RfQ09MT1JfQklULCAzLCAzLCAzLCB7 IFZLX0ZPUk1BVF9SMTZfVU5PUk0sICBWS19GT1JNQVRfUjE2X1VOT1JNLCAgVktfRk9STUFUX1Ix Nl9VTk9STSAgfSB9LAotICAgIHsgVktfRk9STUFUX1IxNl9VTk9STSwgIEFWX1BJWF9GTVRfR0JS UDE2LCAgIFZLX0lNQUdFX0FTUEVDVF9DT0xPUl9CSVQsIDMsIDMsIDMsIHsgVktfRk9STUFUX1Ix Nl9VTk9STSwgIFZLX0ZPUk1BVF9SMTZfVU5PUk0sICBWS19GT1JNQVRfUjE2X1VOT1JNICB9IH0s Ci0gICAgeyBWS19GT1JNQVRfUjMyX1NGTE9BVCwgQVZfUElYX0ZNVF9HQlJQRjMyLCAgVktfSU1B R0VfQVNQRUNUX0NPTE9SX0JJVCwgMywgMywgMywgeyBWS19GT1JNQVRfUjMyX1NGTE9BVCwgVktf Rk9STUFUX1IzMl9TRkxPQVQsIFZLX0ZPUk1BVF9SMzJfU0ZMT0FUIH0gfSwKLQotICAgIC8qIFBs YW5hciBSR0IgKyBBbHBoYSAqLwotICAgIHsgVktfRk9STUFUX1I4X1VOT1JNLCAgIEFWX1BJWF9G TVRfR0JSQVAsICAgIFZLX0lNQUdFX0FTUEVDVF9DT0xPUl9CSVQsIDQsIDQsIDQsIHsgVktfRk9S TUFUX1I4X1VOT1JNLCAgIFZLX0ZPUk1BVF9SOF9VTk9STSwgICBWS19GT1JNQVRfUjhfVU5PUk0s ICAgVktfRk9STUFUX1I4X1VOT1JNICAgfSB9LAotICAgIHsgVktfRk9STUFUX1IxNl9VTk9STSwg IEFWX1BJWF9GTVRfR0JSQVAxMCwgIFZLX0lNQUdFX0FTUEVDVF9DT0xPUl9CSVQsIDQsIDQsIDQs IHsgVktfRk9STUFUX1IxNl9VTk9STSwgIFZLX0ZPUk1BVF9SMTZfVU5PUk0sICBWS19GT1JNQVRf UjE2X1VOT1JNLCAgVktfRk9STUFUX1IxNl9VTk9STSAgfSB9LAotICAgIHsgVktfRk9STUFUX1Ix Nl9VTk9STSwgIEFWX1BJWF9GTVRfR0JSQVAxMiwgIFZLX0lNQUdFX0FTUEVDVF9DT0xPUl9CSVQs IDQsIDQsIDQsIHsgVktfRk9STUFUX1IxNl9VTk9STSwgIFZLX0ZPUk1BVF9SMTZfVU5PUk0sICBW S19GT1JNQVRfUjE2X1VOT1JNLCAgVktfRk9STUFUX1IxNl9VTk9STSAgfSB9LAotICAgIHsgVktf Rk9STUFUX1IxNl9VTk9STSwgIEFWX1BJWF9GTVRfR0JSQVAxNCwgIFZLX0lNQUdFX0FTUEVDVF9D T0xPUl9CSVQsIDQsIDQsIDQsIHsgVktfRk9STUFUX1IxNl9VTk9STSwgIFZLX0ZPUk1BVF9SMTZf VU5PUk0sICBWS19GT1JNQVRfUjE2X1VOT1JNLCAgVktfRk9STUFUX1IxNl9VTk9STSAgfSB9LAot ICAgIHsgVktfRk9STUFUX1IxNl9VTk9STSwgIEFWX1BJWF9GTVRfR0JSQVAxNiwgIFZLX0lNQUdF X0FTUEVDVF9DT0xPUl9CSVQsIDQsIDQsIDQsIHsgVktfRk9STUFUX1IxNl9VTk9STSwgIFZLX0ZP Uk1BVF9SMTZfVU5PUk0sICBWS19GT1JNQVRfUjE2X1VOT1JNLCAgVktfRk9STUFUX1IxNl9VTk9S TSAgfSB9LAotICAgIHsgVktfRk9STUFUX1IzMl9VSU5ULCAgIEFWX1BJWF9GTVRfR0JSQVAzMiwg IFZLX0lNQUdFX0FTUEVDVF9DT0xPUl9CSVQsIDQsIDQsIDQsIHsgVktfRk9STUFUX1IzMl9VSU5U LCAgIFZLX0ZPUk1BVF9SMzJfVUlOVCwgICBWS19GT1JNQVRfUjMyX1VJTlQsICAgVktfRk9STUFU X1IzMl9VSU5UICAgfSB9LAotICAgIHsgVktfRk9STUFUX1IzMl9TRkxPQVQsIEFWX1BJWF9GTVRf R0JSQVBGMzIsIFZLX0lNQUdFX0FTUEVDVF9DT0xPUl9CSVQsIDQsIDQsIDQsIHsgVktfRk9STUFU X1IzMl9TRkxPQVQsIFZLX0ZPUk1BVF9SMzJfU0ZMT0FULCBWS19GT1JNQVRfUjMyX1NGTE9BVCwg VktfRk9STUFUX1IzMl9TRkxPQVQgfSB9LAotCi0gICAgLyogQmF5ZXIgKi8KLSAgICB7IFZLX0ZP Uk1BVF9SMTZfVU5PUk0sIEFWX1BJWF9GTVRfQkFZRVJfUkdHQjE2LCBWS19JTUFHRV9BU1BFQ1Rf Q09MT1JfQklULCAxLCAxLCAxLCB7IFZLX0ZPUk1BVF9SMTZfVU5PUk0gfSB9LAotCi0gICAgLyog VHdvLXBsYW5lIDQyMCBZVVYgYXQgOCwgMTAsIDEyIGFuZCAxNiBiaXRzICovCi0gICAgeyBWS19G T1JNQVRfRzhfQjhSOF8yUExBTkVfNDIwX1VOT1JNLCAgICAgICAgICAgICAgICAgIEFWX1BJWF9G TVRfTlYxMiwgQVNQRUNUXzJQTEFORSwgMiwgMSwgMiwgeyBWS19GT1JNQVRfUjhfVU5PUk0sICBW S19GT1JNQVRfUjhHOF9VTk9STSAgIH0gfSwKLSAgICB7IFZLX0ZPUk1BVF9HMTBYNl9CMTBYNlIx MFg2XzJQTEFORV80MjBfVU5PUk1fM1BBQ0sxNiwgQVZfUElYX0ZNVF9QMDEwLCBBU1BFQ1RfMlBM QU5FLCAyLCAxLCAyLCB7IFZLX0ZPUk1BVF9SMTZfVU5PUk0sIFZLX0ZPUk1BVF9SMTZHMTZfVU5P Uk0gfSB9LAotICAgIHsgVktfRk9STUFUX0cxMlg0X0IxMlg0UjEyWDRfMlBMQU5FXzQyMF9VTk9S TV8zUEFDSzE2LCBBVl9QSVhfRk1UX1AwMTIsIEFTUEVDVF8yUExBTkUsIDIsIDEsIDIsIHsgVktf Rk9STUFUX1IxNl9VTk9STSwgVktfRk9STUFUX1IxNkcxNl9VTk9STSB9IH0sCi0gICAgeyBWS19G T1JNQVRfRzE2X0IxNlIxNl8yUExBTkVfNDIwX1VOT1JNLCAgICAgICAgICAgICAgIEFWX1BJWF9G TVRfUDAxNiwgQVNQRUNUXzJQTEFORSwgMiwgMSwgMiwgeyBWS19GT1JNQVRfUjE2X1VOT1JNLCBW S19GT1JNQVRfUjE2RzE2X1VOT1JNIH0gfSwKLQotICAgIC8qIFR3by1wbGFuZSA0MjIgWVVWIGF0 IDgsIDEwIGFuZCAxNiBiaXRzICovCi0gICAgeyBWS19GT1JNQVRfRzhfQjhSOF8yUExBTkVfNDIy X1VOT1JNLCAgICAgICAgICAgICAgICAgIEFWX1BJWF9GTVRfTlYxNiwgQVNQRUNUXzJQTEFORSwg MiwgMSwgMiwgeyBWS19GT1JNQVRfUjhfVU5PUk0sICBWS19GT1JNQVRfUjhHOF9VTk9STSAgIH0g fSwKLSAgICB7IFZLX0ZPUk1BVF9HMTBYNl9CMTBYNlIxMFg2XzJQTEFORV80MjJfVU5PUk1fM1BB Q0sxNiwgQVZfUElYX0ZNVF9QMjEwLCBBU1BFQ1RfMlBMQU5FLCAyLCAxLCAyLCB7IFZLX0ZPUk1B VF9SMTZfVU5PUk0sIFZLX0ZPUk1BVF9SMTZHMTZfVU5PUk0gfSB9LAotICAgIHsgVktfRk9STUFU X0cxMlg0X0IxMlg0UjEyWDRfMlBMQU5FXzQyMl9VTk9STV8zUEFDSzE2LCBBVl9QSVhfRk1UX1Ay MTIsIEFTUEVDVF8yUExBTkUsIDIsIDEsIDIsIHsgVktfRk9STUFUX1IxNl9VTk9STSwgVktfRk9S TUFUX1IxNkcxNl9VTk9STSB9IH0sCi0gICAgeyBWS19GT1JNQVRfRzE2X0IxNlIxNl8yUExBTkVf NDIyX1VOT1JNLCAgICAgICAgICAgICAgIEFWX1BJWF9GTVRfUDIxNiwgQVNQRUNUXzJQTEFORSwg MiwgMSwgMiwgeyBWS19GT1JNQVRfUjE2X1VOT1JNLCBWS19GT1JNQVRfUjE2RzE2X1VOT1JNIH0g fSwKLQotICAgIC8qIFR3by1wbGFuZSA0NDQgWVVWIGF0IDgsIDEwIGFuZCAxNiBiaXRzICovCi0g ICAgeyBWS19GT1JNQVRfRzhfQjhSOF8yUExBTkVfNDQ0X1VOT1JNLCAgICAgICAgICAgICAgICAg IEFWX1BJWF9GTVRfTlYyNCwgQVNQRUNUXzJQTEFORSwgMiwgMSwgMiwgeyBWS19GT1JNQVRfUjhf VU5PUk0sICBWS19GT1JNQVRfUjhHOF9VTk9STSAgIH0gfSwKLSAgICB7IFZLX0ZPUk1BVF9HMTBY Nl9CMTBYNlIxMFg2XzJQTEFORV80NDRfVU5PUk1fM1BBQ0sxNiwgQVZfUElYX0ZNVF9QNDEwLCBB U1BFQ1RfMlBMQU5FLCAyLCAxLCAyLCB7IFZLX0ZPUk1BVF9SMTZfVU5PUk0sIFZLX0ZPUk1BVF9S MTZHMTZfVU5PUk0gfSB9LAotICAgIHsgVktfRk9STUFUX0cxMlg0X0IxMlg0UjEyWDRfMlBMQU5F XzQ0NF9VTk9STV8zUEFDSzE2LCBBVl9QSVhfRk1UX1A0MTIsIEFTUEVDVF8yUExBTkUsIDIsIDEs IDIsIHsgVktfRk9STUFUX1IxNl9VTk9STSwgVktfRk9STUFUX1IxNkcxNl9VTk9STSB9IH0sCi0g ICAgeyBWS19GT1JNQVRfRzE2X0IxNlIxNl8yUExBTkVfNDQ0X1VOT1JNLCAgICAgICAgICAgICAg IEFWX1BJWF9GTVRfUDQxNiwgQVNQRUNUXzJQTEFORSwgMiwgMSwgMiwgeyBWS19GT1JNQVRfUjE2 X1VOT1JNLCBWS19GT1JNQVRfUjE2RzE2X1VOT1JNIH0gfSwKLQotICAgIC8qIFRocmVlLXBsYW5l IDQyMCwgNDIyLCA0NDQgYXQgOCwgMTAsIDEyIGFuZCAxNiBiaXRzICovCi0gICAgeyBWS19GT1JN QVRfRzhfQjhfUjhfM1BMQU5FXzQyMF9VTk9STSwgICAgQVZfUElYX0ZNVF9ZVVY0MjBQLCAgIEFT UEVDVF8zUExBTkUsIDMsIDEsIDMsIHsgVktfRk9STUFUX1I4X1VOT1JNLCAgVktfRk9STUFUX1I4 X1VOT1JNLCAgVktfRk9STUFUX1I4X1VOT1JNICB9IH0sCi0gICAgeyBWS19GT1JNQVRfRzE2X0Ix Nl9SMTZfM1BMQU5FXzQyMF9VTk9STSwgQVZfUElYX0ZNVF9ZVVY0MjBQMTAsIEFTUEVDVF8zUExB TkUsIDMsIDEsIDMsIHsgVktfRk9STUFUX1IxNl9VTk9STSwgVktfRk9STUFUX1IxNl9VTk9STSwg VktfRk9STUFUX1IxNl9VTk9STSB9IH0sCi0gICAgeyBWS19GT1JNQVRfRzE2X0IxNl9SMTZfM1BM QU5FXzQyMF9VTk9STSwgQVZfUElYX0ZNVF9ZVVY0MjBQMTIsIEFTUEVDVF8zUExBTkUsIDMsIDEs IDMsIHsgVktfRk9STUFUX1IxNl9VTk9STSwgVktfRk9STUFUX1IxNl9VTk9STSwgVktfRk9STUFU X1IxNl9VTk9STSB9IH0sCi0gICAgeyBWS19GT1JNQVRfRzE2X0IxNl9SMTZfM1BMQU5FXzQyMF9V Tk9STSwgQVZfUElYX0ZNVF9ZVVY0MjBQMTYsIEFTUEVDVF8zUExBTkUsIDMsIDEsIDMsIHsgVktf Rk9STUFUX1IxNl9VTk9STSwgVktfRk9STUFUX1IxNl9VTk9STSwgVktfRk9STUFUX1IxNl9VTk9S TSB9IH0sCi0gICAgeyBWS19GT1JNQVRfRzhfQjhfUjhfM1BMQU5FXzQyMl9VTk9STSwgICAgQVZf UElYX0ZNVF9ZVVY0MjJQLCAgIEFTUEVDVF8zUExBTkUsIDMsIDEsIDMsIHsgVktfRk9STUFUX1I4 X1VOT1JNLCAgVktfRk9STUFUX1I4X1VOT1JNLCAgVktfRk9STUFUX1I4X1VOT1JNICB9IH0sCi0g ICAgeyBWS19GT1JNQVRfRzE2X0IxNl9SMTZfM1BMQU5FXzQyMl9VTk9STSwgQVZfUElYX0ZNVF9Z VVY0MjJQMTAsIEFTUEVDVF8zUExBTkUsIDMsIDEsIDMsIHsgVktfRk9STUFUX1IxNl9VTk9STSwg VktfRk9STUFUX1IxNl9VTk9STSwgVktfRk9STUFUX1IxNl9VTk9STSB9IH0sCi0gICAgeyBWS19G T1JNQVRfRzE2X0IxNl9SMTZfM1BMQU5FXzQyMl9VTk9STSwgQVZfUElYX0ZNVF9ZVVY0MjJQMTIs IEFTUEVDVF8zUExBTkUsIDMsIDEsIDMsIHsgVktfRk9STUFUX1IxNl9VTk9STSwgVktfRk9STUFU X1IxNl9VTk9STSwgVktfRk9STUFUX1IxNl9VTk9STSB9IH0sCi0gICAgeyBWS19GT1JNQVRfRzE2 X0IxNl9SMTZfM1BMQU5FXzQyMl9VTk9STSwgQVZfUElYX0ZNVF9ZVVY0MjJQMTYsIEFTUEVDVF8z UExBTkUsIDMsIDEsIDMsIHsgVktfRk9STUFUX1IxNl9VTk9STSwgVktfRk9STUFUX1IxNl9VTk9S TSwgVktfRk9STUFUX1IxNl9VTk9STSB9IH0sCi0gICAgeyBWS19GT1JNQVRfRzhfQjhfUjhfM1BM QU5FXzQ0NF9VTk9STSwgICAgQVZfUElYX0ZNVF9ZVVY0NDRQLCAgIEFTUEVDVF8zUExBTkUsIDMs IDEsIDMsIHsgVktfRk9STUFUX1I4X1VOT1JNLCAgVktfRk9STUFUX1I4X1VOT1JNLCAgVktfRk9S TUFUX1I4X1VOT1JNICB9IH0sCi0gICAgeyBWS19GT1JNQVRfRzE2X0IxNl9SMTZfM1BMQU5FXzQ0 NF9VTk9STSwgQVZfUElYX0ZNVF9ZVVY0NDRQMTAsIEFTUEVDVF8zUExBTkUsIDMsIDEsIDMsIHsg VktfRk9STUFUX1IxNl9VTk9STSwgVktfRk9STUFUX1IxNl9VTk9STSwgVktfRk9STUFUX1IxNl9V Tk9STSB9IH0sCi0gICAgeyBWS19GT1JNQVRfRzE2X0IxNl9SMTZfM1BMQU5FXzQ0NF9VTk9STSwg QVZfUElYX0ZNVF9ZVVY0NDRQMTIsIEFTUEVDVF8zUExBTkUsIDMsIDEsIDMsIHsgVktfRk9STUFU X1IxNl9VTk9STSwgVktfRk9STUFUX1IxNl9VTk9STSwgVktfRk9STUFUX1IxNl9VTk9STSB9IH0s Ci0gICAgeyBWS19GT1JNQVRfRzE2X0IxNl9SMTZfM1BMQU5FXzQ0NF9VTk9STSwgQVZfUElYX0ZN VF9ZVVY0NDRQMTYsIEFTUEVDVF8zUExBTkUsIDMsIDEsIDMsIHsgVktfRk9STUFUX1IxNl9VTk9S TSwgVktfRk9STUFUX1IxNl9VTk9STSwgVktfRk9STUFUX1IxNl9VTk9STSB9IH0sCi0KLSAgICAv KiBTaW5nbGUgcGxhbmUgNDIyIGF0IDgsIDEwLCAxMiBhbmQgMTYgYml0cyAqLwotICAgIHsgVktf Rk9STUFUX0c4QjhHOFI4XzQyMl9VTk9STSwgICAgICAgICAgICAgICAgICAgICBBVl9QSVhfRk1U X1lVWVY0MjIsIFZLX0lNQUdFX0FTUEVDVF9DT0xPUl9CSVQsIDEsIDEsIDEsIHsgVktfRk9STUFU X1I4RzhCOEE4X1VOT1JNICAgICB9IH0sCi0gICAgeyBWS19GT1JNQVRfQjhHOFI4RzhfNDIyX1VO T1JNLCAgICAgICAgICAgICAgICAgICAgIEFWX1BJWF9GTVRfVVlWWTQyMiwgVktfSU1BR0VfQVNQ RUNUX0NPTE9SX0JJVCwgMSwgMSwgMSwgeyBWS19GT1JNQVRfUjhHOEI4QThfVU5PUk0gICAgIH0g fSwKLSAgICB7IFZLX0ZPUk1BVF9HMTBYNkIxMFg2RzEwWDZSMTBYNl80MjJfVU5PUk1fNFBBQ0sx NiwgQVZfUElYX0ZNVF9ZMjEwLCAgICBWS19JTUFHRV9BU1BFQ1RfQ09MT1JfQklULCAxLCAxLCAx LCB7IFZLX0ZPUk1BVF9SMTZHMTZCMTZBMTZfVU5PUk0gfSB9LAotICAgIHsgVktfRk9STUFUX0cx Mlg0QjEyWDRHMTJYNFIxMlg0XzQyMl9VTk9STV80UEFDSzE2LCBBVl9QSVhfRk1UX1kyMTIsICAg IFZLX0lNQUdFX0FTUEVDVF9DT0xPUl9CSVQsIDEsIDEsIDEsIHsgVktfRk9STUFUX1IxNkcxNkIx NkExNl9VTk9STSB9IH0sCi0gICAgeyBWS19GT1JNQVRfRzE2QjE2RzE2UjE2XzQyMl9VTk9STSwg ICAgICAgICAgICAgICAgIEFWX1BJWF9GTVRfWTIxNiwgICAgVktfSU1BR0VfQVNQRUNUX0NPTE9S X0JJVCwgMSwgMSwgMSwgeyBWS19GT1JNQVRfUjE2RzE2QjE2QTE2X1VOT1JNIH0gfSwKLQotICAg IC8qIFBsYW5hciBZVVZBIDQyMCBhdCA4LCAxMCBhbmQgMTYgYml0cyAqLwotICAgIHsgVktfRk9S TUFUX1I4X1VOT1JNLCAgIEFWX1BJWF9GTVRfWVVWQTQyMFAsICAgIFZLX0lNQUdFX0FTUEVDVF9D T0xPUl9CSVQsIDQsIDQsIDQsIHsgVktfRk9STUFUX1I4X1VOT1JNLCAgIFZLX0ZPUk1BVF9SOF9V Tk9STSwgICBWS19GT1JNQVRfUjhfVU5PUk0sICAgVktfRk9STUFUX1I4X1VOT1JNICAgfSB9LAot ICAgIHsgVktfRk9STUFUX1IxNl9VTk9STSwgIEFWX1BJWF9GTVRfWVVWQTQyMFAxMCwgIFZLX0lN QUdFX0FTUEVDVF9DT0xPUl9CSVQsIDQsIDQsIDQsIHsgVktfRk9STUFUX1IxNl9VTk9STSwgIFZL X0ZPUk1BVF9SMTZfVU5PUk0sICBWS19GT1JNQVRfUjE2X1VOT1JNLCAgVktfRk9STUFUX1IxNl9V Tk9STSAgfSB9LAotICAgIHsgVktfRk9STUFUX1IxNl9VTk9STSwgIEFWX1BJWF9GTVRfWVVWQTQy MFAxNiwgIFZLX0lNQUdFX0FTUEVDVF9DT0xPUl9CSVQsIDQsIDQsIDQsIHsgVktfRk9STUFUX1Ix Nl9VTk9STSwgIFZLX0ZPUk1BVF9SMTZfVU5PUk0sICBWS19GT1JNQVRfUjE2X1VOT1JNLCAgVktf Rk9STUFUX1IxNl9VTk9STSAgfSB9LAotCi0gICAgLyogUGxhbmFyIFlVVkEgNDIyIGF0IDgsIDEw LCAxMiBhbmQgMTYgYml0cyAqLwotICAgIHsgVktfRk9STUFUX1I4X1VOT1JNLCAgIEFWX1BJWF9G TVRfWVVWQTQyMlAsICAgIFZLX0lNQUdFX0FTUEVDVF9DT0xPUl9CSVQsIDQsIDQsIDQsIHsgVktf Rk9STUFUX1I4X1VOT1JNLCAgIFZLX0ZPUk1BVF9SOF9VTk9STSwgICBWS19GT1JNQVRfUjhfVU5P Uk0sICAgVktfRk9STUFUX1I4X1VOT1JNICAgfSB9LAotICAgIHsgVktfRk9STUFUX1IxNl9VTk9S TSwgIEFWX1BJWF9GTVRfWVVWQTQyMlAxMCwgIFZLX0lNQUdFX0FTUEVDVF9DT0xPUl9CSVQsIDQs IDQsIDQsIHsgVktfRk9STUFUX1IxNl9VTk9STSwgIFZLX0ZPUk1BVF9SMTZfVU5PUk0sICBWS19G T1JNQVRfUjE2X1VOT1JNLCAgVktfRk9STUFUX1IxNl9VTk9STSAgfSB9LAotICAgIHsgVktfRk9S TUFUX1IxNl9VTk9STSwgIEFWX1BJWF9GTVRfWVVWQTQyMlAxMiwgIFZLX0lNQUdFX0FTUEVDVF9D T0xPUl9CSVQsIDQsIDQsIDQsIHsgVktfRk9STUFUX1IxNl9VTk9STSwgIFZLX0ZPUk1BVF9SMTZf VU5PUk0sICBWS19GT1JNQVRfUjE2X1VOT1JNLCAgVktfRk9STUFUX1IxNl9VTk9STSAgfSB9LAot ICAgIHsgVktfRk9STUFUX1IxNl9VTk9STSwgIEFWX1BJWF9GTVRfWVVWQTQyMlAxNiwgIFZLX0lN QUdFX0FTUEVDVF9DT0xPUl9CSVQsIDQsIDQsIDQsIHsgVktfRk9STUFUX1IxNl9VTk9STSwgIFZL X0ZPUk1BVF9SMTZfVU5PUk0sICBWS19GT1JNQVRfUjE2X1VOT1JNLCAgVktfRk9STUFUX1IxNl9V Tk9STSAgfSB9LAotCi0gICAgLyogUGxhbmFyIFlVVkEgNDQ0IGF0IDgsIDEwLCAxMiBhbmQgMTYg Yml0cyAqLwotICAgIHsgVktfRk9STUFUX1I4X1VOT1JNLCAgIEFWX1BJWF9GTVRfWVVWQTQ0NFAs ICAgIFZLX0lNQUdFX0FTUEVDVF9DT0xPUl9CSVQsIDQsIDQsIDQsIHsgVktfRk9STUFUX1I4X1VO T1JNLCAgIFZLX0ZPUk1BVF9SOF9VTk9STSwgICBWS19GT1JNQVRfUjhfVU5PUk0sICAgVktfRk9S TUFUX1I4X1VOT1JNICAgfSB9LAotICAgIHsgVktfRk9STUFUX1IxNl9VTk9STSwgIEFWX1BJWF9G TVRfWVVWQTQ0NFAxMCwgIFZLX0lNQUdFX0FTUEVDVF9DT0xPUl9CSVQsIDQsIDQsIDQsIHsgVktf Rk9STUFUX1IxNl9VTk9STSwgIFZLX0ZPUk1BVF9SMTZfVU5PUk0sICBWS19GT1JNQVRfUjE2X1VO T1JNLCAgVktfRk9STUFUX1IxNl9VTk9STSAgfSB9LAotICAgIHsgVktfRk9STUFUX1IxNl9VTk9S TSwgIEFWX1BJWF9GTVRfWVVWQTQ0NFAxMiwgIFZLX0lNQUdFX0FTUEVDVF9DT0xPUl9CSVQsIDQs IDQsIDQsIHsgVktfRk9STUFUX1IxNl9VTk9STSwgIFZLX0ZPUk1BVF9SMTZfVU5PUk0sICBWS19G T1JNQVRfUjE2X1VOT1JNLCAgVktfRk9STUFUX1IxNl9VTk9STSAgfSB9LAotICAgIHsgVktfRk9S TUFUX1IxNl9VTk9STSwgIEFWX1BJWF9GTVRfWVVWQTQ0NFAxNiwgIFZLX0lNQUdFX0FTUEVDVF9D T0xPUl9CSVQsIDQsIDQsIDQsIHsgVktfRk9STUFUX1IxNl9VTk9STSwgIFZLX0ZPUk1BVF9SMTZf VU5PUk0sICBWS19GT1JNQVRfUjE2X1VOT1JNLCAgVktfRk9STUFUX1IxNl9VTk9STSAgfSB9LAot Ci0gICAgLyogU2luZ2xlIHBsYW5lIDQ0NCBhdCA4LCAxMCwgMTIgYW5kIDE2IGJpdHMgKi8KLSAg ICB7IFZLX0ZPUk1BVF9COEc4UjhBOF9VTk9STSwgICAgICAgICAgICAgICAgICAgICAgICAgQVZf UElYX0ZNVF9VWVZBLCAgICBWS19JTUFHRV9BU1BFQ1RfQ09MT1JfQklULCAxLCAxLCAxLCB7IFZL X0ZPUk1BVF9COEc4UjhBOF9VTk9STSAgICAgfSB9LAotICAgIHsgVktfRk9STUFUX0EyUjEwRzEw QjEwX1VOT1JNX1BBQ0szMiwgICAgICAgICAgICAgICBBVl9QSVhfRk1UX1hWMzAsICAgIFZLX0lN QUdFX0FTUEVDVF9DT0xPUl9CSVQsIDEsIDEsIDEsIHsgVktfRk9STUFUX1IxNkcxNkIxNkExNl9V Tk9STSB9IH0sCi0gICAgeyBWS19GT1JNQVRfUjEyWDRHMTJYNEIxMlg0QTEyWDRfVU5PUk1fNFBB Q0sxNiwgICAgIEFWX1BJWF9GTVRfWFYzNiwgICAgVktfSU1BR0VfQVNQRUNUX0NPTE9SX0JJVCwg MSwgMSwgMSwgeyBWS19GT1JNQVRfUjE2RzE2QjE2QTE2X1VOT1JNIH0gfSwKLSAgICB7IFZLX0ZP Uk1BVF9SMTZHMTZCMTZBMTZfVU5PUk0sICAgICAgICAgICAgICAgICAgICAgQVZfUElYX0ZNVF9Y VjQ4LCAgICBWS19JTUFHRV9BU1BFQ1RfQ09MT1JfQklULCAxLCAxLCAxLCB7IFZLX0ZPUk1BVF9S MTZHMTZCMTZBMTZfVU5PUk0gfSB9LAotfTsKLXN0YXRpYyBjb25zdCBpbnQgbmJfdmtfZm9ybWF0 c19saXN0ID0gRkZfQVJSQVlfRUxFTVModmtfZm9ybWF0c19saXN0KTsKLQotY29uc3QgVmtGb3Jt YXQgKmF2X3ZrZm10X2Zyb21fcGl4Zm10KGVudW0gQVZQaXhlbEZvcm1hdCBwKQotewotICAgIGZv ciAoaW50IGkgPSAwOyBpIDwgbmJfdmtfZm9ybWF0c19saXN0OyBpKyspCi0gICAgICAgIGlmICh2 a19mb3JtYXRzX2xpc3RbaV0ucGl4Zm10ID09IHApCi0gICAgICAgICAgICByZXR1cm4gdmtfZm9y bWF0c19saXN0W2ldLmZhbGxiYWNrOwotICAgIHJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgY29u c3Qgc3RydWN0IEZGVmtGb3JtYXRFbnRyeSAqdmtfZmluZF9mb3JtYXRfZW50cnkoZW51bSBBVlBp eGVsRm9ybWF0IHApCi17Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuYl92a19mb3JtYXRzX2xp c3Q7IGkrKykKLSAgICAgICAgaWYgKHZrX2Zvcm1hdHNfbGlzdFtpXS5waXhmbXQgPT0gcCkKLSAg ICAgICAgICAgIHJldHVybiAmdmtfZm9ybWF0c19saXN0W2ldOwotICAgIHJldHVybiBOVUxMOwot fQotCi1zdGF0aWMgaW50IHZrZm10X2Zyb21fcGl4Zm10MihBVkhXRGV2aWNlQ29udGV4dCAqZGV2 X2N0eCwgZW51bSBBVlBpeGVsRm9ybWF0IHAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBWa0ltYWdlVGlsaW5nIHRpbGluZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZr Rm9ybWF0IGZtdHNbQVZfTlVNX0RBVEFfUE9JTlRFUlNdLCAvKiBPdXRwdXQgZm9ybWF0IGxpc3Qg Ki8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqbmJfaW1hZ2VzLCAgICAgICAg ICAgICAgICAgICAgICAvKiBPdXRwdXQgbnVtYmVyIG9mIGltYWdlcyAqLwotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgVmtJbWFnZUFzcGVjdEZsYWdzICphc3BlY3QsICAgICAgICAgIC8q IE91dHB1dCBhc3BlY3QgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZrSW1hZ2VV c2FnZUZsYWdzICpzdXBwb3J0ZWRfdXNhZ2UsICAvKiBPdXRwdXQgc3VwcG9ydGVkIHVzYWdlICov Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGlzYWJsZV9tdWx0aXBsYW5lLCBp bnQgbmVlZF9zdG9yYWdlKQotewotICAgIFZ1bGthbkRldmljZVByaXYgKnByaXYgPSBkZXZfY3R4 LT5od2N0eDsKLSAgICBBVlZ1bGthbkRldmljZUNvbnRleHQgKmh3Y3R4ID0gJnByaXYtPnA7Ci0g ICAgRkZWdWxrYW5GdW5jdGlvbnMgKnZrID0gJnByaXYtPnZrY3R4LnZrZm47Ci0KLSAgICBjb25z dCBWa0Zvcm1hdEZlYXR1cmVGbGFnQml0czIgYmFzaWNfZmxhZ3MgPSBWS19GT1JNQVRfRkVBVFVS RV8yX1NBTVBMRURfSU1BR0VfQklUIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBWS19GT1JNQVRfRkVBVFVSRV8yX1RSQU5TRkVSX1NSQ19CSVQgIHwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19GT1JN QVRfRkVBVFVSRV8yX1RSQU5TRkVSX0RTVF9CSVQ7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8 IG5iX3ZrX2Zvcm1hdHNfbGlzdDsgaSsrKSB7Ci0gICAgICAgIGlmICh2a19mb3JtYXRzX2xpc3Rb aV0ucGl4Zm10ID09IHApIHsKLSAgICAgICAgICAgIFZrRm9ybWF0UHJvcGVydGllczMgZnByb3Bz ID0gewotICAgICAgICAgICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX0ZPUk1BVF9Q Uk9QRVJUSUVTXzMsCi0gICAgICAgICAgICB9OwotICAgICAgICAgICAgVmtGb3JtYXRQcm9wZXJ0 aWVzMiBwcm9wID0gewotICAgICAgICAgICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBF X0ZPUk1BVF9QUk9QRVJUSUVTXzIsCi0gICAgICAgICAgICAgICAgLnBOZXh0ID0gJmZwcm9wcywK LSAgICAgICAgICAgIH07Ci0gICAgICAgICAgICBWa0Zvcm1hdEZlYXR1cmVGbGFnQml0czIgZmVh dHNfcHJpbWFyeSwgZmVhdHNfc2Vjb25kYXJ5OwotICAgICAgICAgICAgaW50IGJhc2ljc19wcmlt YXJ5ID0gMCwgYmFzaWNzX3NlY29uZGFyeSA9IDA7Ci0gICAgICAgICAgICBpbnQgc3RvcmFnZV9w cmltYXJ5ID0gMCwgc3RvcmFnZV9zZWNvbmRhcnkgPSAwOwotCi0gICAgICAgICAgICB2ay0+R2V0 UGh5c2ljYWxEZXZpY2VGb3JtYXRQcm9wZXJ0aWVzMihod2N0eC0+cGh5c19kZXYsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2a19mb3JtYXRzX2xp c3RbaV0udmtmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJnByb3ApOwotCi0gICAgICAgICAgICBmZWF0c19wcmltYXJ5ID0gdGlsaW5nID09IFZL X0lNQUdFX1RJTElOR19MSU5FQVIgPwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcHJv cHMubGluZWFyVGlsaW5nRmVhdHVyZXMgOiBmcHJvcHMub3B0aW1hbFRpbGluZ0ZlYXR1cmVzOwot ICAgICAgICAgICAgYmFzaWNzX3ByaW1hcnkgPSAoZmVhdHNfcHJpbWFyeSAmIGJhc2ljX2ZsYWdz KSA9PSBiYXNpY19mbGFnczsKLSAgICAgICAgICAgIHN0b3JhZ2VfcHJpbWFyeSA9ICEhKGZlYXRz X3ByaW1hcnkgJiBWS19GT1JNQVRfRkVBVFVSRV8yX1NUT1JBR0VfSU1BR0VfQklUKTsKLQotICAg ICAgICAgICAgaWYgKHZrX2Zvcm1hdHNfbGlzdFtpXS52a2YgIT0gdmtfZm9ybWF0c19saXN0W2ld LmZhbGxiYWNrWzBdKSB7Ci0gICAgICAgICAgICAgICAgdmstPkdldFBoeXNpY2FsRGV2aWNlRm9y bWF0UHJvcGVydGllczIoaHdjdHgtPnBoeXNfZGV2LAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZrX2Zvcm1hdHNfbGlzdFtpXS5mYWxsYmFj a1swXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAmcHJvcCk7Ci0gICAgICAgICAgICAgICAgZmVhdHNfc2Vjb25kYXJ5ID0gdGlsaW5nID09 IFZLX0lNQUdFX1RJTElOR19MSU5FQVIgPwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGZwcm9wcy5saW5lYXJUaWxpbmdGZWF0dXJlcyA6IGZwcm9wcy5vcHRpbWFsVGlsaW5nRmVh dHVyZXM7Ci0gICAgICAgICAgICAgICAgYmFzaWNzX3NlY29uZGFyeSA9IChmZWF0c19zZWNvbmRh cnkgJiBiYXNpY19mbGFncykgPT0gYmFzaWNfZmxhZ3M7Ci0gICAgICAgICAgICAgICAgc3RvcmFn ZV9zZWNvbmRhcnkgPSAhIShmZWF0c19zZWNvbmRhcnkgJiBWS19GT1JNQVRfRkVBVFVSRV8yX1NU T1JBR0VfSU1BR0VfQklUKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg YmFzaWNzX3NlY29uZGFyeSA9IGJhc2ljc19wcmltYXJ5OwotICAgICAgICAgICAgICAgIHN0b3Jh Z2Vfc2Vjb25kYXJ5ID0gc3RvcmFnZV9wcmltYXJ5OwotICAgICAgICAgICAgfQotCi0gICAgICAg ICAgICBpZiAoYmFzaWNzX3ByaW1hcnkgJiYKLSAgICAgICAgICAgICAgICAhKGRpc2FibGVfbXVs dGlwbGFuZSAmJiB2a19mb3JtYXRzX2xpc3RbaV0udmtfcGxhbmVzID4gMSkgJiYKLSAgICAgICAg ICAgICAgICAoIW5lZWRfc3RvcmFnZSB8fCAobmVlZF9zdG9yYWdlICYmIChzdG9yYWdlX3ByaW1h cnkgfCBzdG9yYWdlX3NlY29uZGFyeSkpKSkgewotICAgICAgICAgICAgICAgIGlmIChmbXRzKSB7 Ci0gICAgICAgICAgICAgICAgICAgIGlmICh2a19mb3JtYXRzX2xpc3RbaV0ubmJfaW1hZ2VzID4g MSkgewotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCB2a19mb3Jt YXRzX2xpc3RbaV0ubmJfaW1hZ2VzX2ZhbGxiYWNrOyBqKyspCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgZm10c1tqXSA9IHZrX2Zvcm1hdHNfbGlzdFtpXS5mYWxsYmFja1tqXTsKLSAgICAg ICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZtdHNbMF0g PSB2a19mb3JtYXRzX2xpc3RbaV0udmtmOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChuYl9pbWFnZXMpCi0gICAgICAgICAgICAg ICAgICAgICpuYl9pbWFnZXMgPSAxOwotICAgICAgICAgICAgICAgIGlmIChhc3BlY3QpCi0gICAg ICAgICAgICAgICAgICAgICphc3BlY3QgPSB2a19mb3JtYXRzX2xpc3RbaV0uYXNwZWN0OwotICAg ICAgICAgICAgICAgIGlmIChzdXBwb3J0ZWRfdXNhZ2UpCi0gICAgICAgICAgICAgICAgICAgICpz dXBwb3J0ZWRfdXNhZ2UgPSBmZl92a19tYXBfZmVhdHNfdG9fdXNhZ2UoZmVhdHNfcHJpbWFyeSkg fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChuZWVkX3N0b3JhZ2Ug JiYgKHN0b3JhZ2VfcHJpbWFyeSB8IHN0b3JhZ2Vfc2Vjb25kYXJ5KSkgPwotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZLX0lNQUdFX1VTQUdFX1NUT1JBR0VfQklUIDog MCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGJh c2ljc19zZWNvbmRhcnkgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgKCFuZWVkX3N0b3JhZ2Ug fHwgKG5lZWRfc3RvcmFnZSAmJiBzdG9yYWdlX3NlY29uZGFyeSkpKSB7Ci0gICAgICAgICAgICAg ICAgaWYgKGZtdHMpIHsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCB2 a19mb3JtYXRzX2xpc3RbaV0ubmJfaW1hZ2VzX2ZhbGxiYWNrOyBqKyspCi0gICAgICAgICAgICAg ICAgICAgICAgICBmbXRzW2pdID0gdmtfZm9ybWF0c19saXN0W2ldLmZhbGxiYWNrW2pdOwotICAg ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAobmJfaW1hZ2VzKQotICAgICAgICAg ICAgICAgICAgICAqbmJfaW1hZ2VzID0gdmtfZm9ybWF0c19saXN0W2ldLm5iX2ltYWdlc19mYWxs YmFjazsKLSAgICAgICAgICAgICAgICBpZiAoYXNwZWN0KQotICAgICAgICAgICAgICAgICAgICAq YXNwZWN0ID0gdmtfZm9ybWF0c19saXN0W2ldLmFzcGVjdDsKLSAgICAgICAgICAgICAgICBpZiAo c3VwcG9ydGVkX3VzYWdlKQotICAgICAgICAgICAgICAgICAgICAqc3VwcG9ydGVkX3VzYWdlID0g ZmZfdmtfbWFwX2ZlYXRzX3RvX3VzYWdlKGZlYXRzX3NlY29uZGFyeSk7Ci0gICAgICAgICAgICAg ICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHJldHVy biBBVkVSUk9SKEVOT1RTVVApOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0g ICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKLX0KLQotI2lmIENPTkZJR19WVUxLQU5fU1RBVElD Ci1WS0FQSV9BVFRSIFBGTl92a1ZvaWRGdW5jdGlvbiBWS0FQSV9DQUxMIHZrR2V0SW5zdGFuY2VQ cm9jQWRkcihWa0luc3RhbmNlIGluc3RhbmNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcE5hbWUpOwot I2VuZGlmCi0KLXN0YXRpYyBpbnQgbG9hZF9saWJ2dWxrYW4oQVZIV0RldmljZUNvbnRleHQgKmN0 eCkKLXsKLSAgICBWdWxrYW5EZXZpY2VQcml2ICpwID0gY3R4LT5od2N0eDsKLSAgICBBVlZ1bGth bkRldmljZUNvbnRleHQgKmh3Y3R4ID0gJnAtPnA7Ci0KLSNpZiBDT05GSUdfVlVMS0FOX1NUQVRJ QwotICAgIGh3Y3R4LT5nZXRfcHJvY19hZGRyID0gdmtHZXRJbnN0YW5jZVByb2NBZGRyOwotI2Vs c2UKLSAgICBzdGF0aWMgY29uc3QgY2hhciAqbGliX25hbWVzW10gPSB7Ci0jaWYgZGVmaW5lZChf V0lOMzIpCi0gICAgICAgICJ2dWxrYW4tMS5kbGwiLAotI2VsaWYgZGVmaW5lZChfX0FQUExFX18p Ci0gICAgICAgICJsaWJ2dWxrYW4uZHlsaWIiLAotICAgICAgICAibGlidnVsa2FuLjEuZHlsaWIi LAotICAgICAgICAibGliTW9sdGVuVksuZHlsaWIiLAotI2Vsc2UKLSAgICAgICAgImxpYnZ1bGth bi5zby4xIiwKLSAgICAgICAgImxpYnZ1bGthbi5zbyIsCi0jZW5kaWYKLSAgICB9OwotCi0gICAg Zm9yIChpbnQgaSA9IDA7IGkgPCBGRl9BUlJBWV9FTEVNUyhsaWJfbmFtZXMpOyBpKyspIHsKLSAg ICAgICAgcC0+bGlidnVsa2FuID0gZGxvcGVuKGxpYl9uYW1lc1tpXSwgUlRMRF9OT1cgfCBSVExE X0xPQ0FMKTsKLSAgICAgICAgaWYgKHAtPmxpYnZ1bGthbikKLSAgICAgICAgICAgIGJyZWFrOwot ICAgIH0KLQotICAgIGlmICghcC0+bGlidnVsa2FuKSB7Ci0gICAgICAgIGF2X2xvZyhjdHgsIEFW X0xPR19FUlJPUiwgIlVuYWJsZSB0byBvcGVuIHRoZSBsaWJ2dWxrYW4gbGlicmFyeSFcbiIpOwot ICAgICAgICByZXR1cm4gQVZFUlJPUl9VTktOT1dOOwotICAgIH0KLQotICAgIGh3Y3R4LT5nZXRf cHJvY19hZGRyID0gKFBGTl92a0dldEluc3RhbmNlUHJvY0FkZHIpZGxzeW0ocC0+bGlidnVsa2Fu LCAidmtHZXRJbnN0YW5jZVByb2NBZGRyIik7Ci0jZW5kaWYgLyogQ09ORklHX1ZVTEtBTl9TVEFU SUMgKi8KLQotICAgIHJldHVybiAwOwotfQotCi10eXBlZGVmIHN0cnVjdCBWdWxrYW5PcHRFeHRl bnNpb24gewotICAgIGNvbnN0IGNoYXIgKm5hbWU7Ci0gICAgRkZWdWxrYW5FeHRlbnNpb25zIGZs YWc7Ci19IFZ1bGthbk9wdEV4dGVuc2lvbjsKLQotc3RhdGljIGNvbnN0IFZ1bGthbk9wdEV4dGVu c2lvbiBvcHRpb25hbF9pbnN0YW5jZV9leHRzW10gPSB7Ci0gICAgeyBWS19FWFRfTEFZRVJfU0VU VElOR1NfRVhURU5TSU9OX05BTUUsICAgICAgICAgICAgICAgICAgIEZGX1ZLX0VYVF9OT19GTEFH ICAgICAgICAgICAgICAgIH0sCi0jaWZkZWYgX19BUFBMRV9fCi0gICAgeyBWS19LSFJfUE9SVEFC SUxJVFlfRU5VTUVSQVRJT05fRVhURU5TSU9OX05BTUUsICAgICAgICAgIEZGX1ZLX0VYVF9OT19G TEFHICAgICAgICAgICAgICAgIH0sCi0jZW5kaWYKLX07Ci0KLXN0YXRpYyBjb25zdCBWdWxrYW5P cHRFeHRlbnNpb24gb3B0aW9uYWxfZGV2aWNlX2V4dHNbXSA9IHsKLSAgICAvKiBNaXNjIG9yIHJl cXVpcmVkIGJ5IG90aGVyIGV4dGVuc2lvbnMgKi8KLSAgICB7IFZLX0tIUl9QT1JUQUJJTElUWV9T VUJTRVRfRVhURU5TSU9OX05BTUUsICAgICAgICAgICAgICAgRkZfVktfRVhUX1BPUlRBQklMSVRZ X1NVQlNFVCAgICAgfSwKLSAgICB7IFZLX0tIUl9QVVNIX0RFU0NSSVBUT1JfRVhURU5TSU9OX05B TUUsICAgICAgICAgICAgICAgICAgRkZfVktfRVhUX1BVU0hfREVTQ1JJUFRPUiAgICAgICAgfSwK LSAgICB7IFZLX0VYVF9ERVNDUklQVE9SX0JVRkZFUl9FWFRFTlNJT05fTkFNRSwgICAgICAgICAg ICAgICAgRkZfVktfRVhUX0RFU0NSSVBUT1JfQlVGRkVSICAgICAgfSwKLSAgICB7IFZLX0VYVF9Q SFlTSUNBTF9ERVZJQ0VfRFJNX0VYVEVOU0lPTl9OQU1FLCAgICAgICAgICAgICAgRkZfVktfRVhU X0RFVklDRV9EUk0gICAgICAgICAgICAgfSwKLSAgICB7IFZLX0VYVF9TSEFERVJfQVRPTUlDX0ZM T0FUX0VYVEVOU0lPTl9OQU1FLCAgICAgICAgICAgICAgRkZfVktfRVhUX0FUT01JQ19GTE9BVCAg ICAgICAgICAgfSwKLSAgICB7IFZLX0tIUl9DT09QRVJBVElWRV9NQVRSSVhfRVhURU5TSU9OX05B TUUsICAgICAgICAgICAgICAgRkZfVktfRVhUX0NPT1BfTUFUUklYICAgICAgICAgICAgfSwKLSAg ICB7IFZLX0VYVF9TSEFERVJfT0JKRUNUX0VYVEVOU0lPTl9OQU1FLCAgICAgICAgICAgICAgICAg ICAgRkZfVktfRVhUX1NIQURFUl9PQkpFQ1QgICAgICAgICAgfSwKLSAgICB7IFZLX0tIUl9TSEFE RVJfU1VCR1JPVVBfUk9UQVRFX0VYVEVOU0lPTl9OQU1FLCAgICAgICAgICAgRkZfVktfRVhUX1NV QkdST1VQX1JPVEFURSAgICAgICAgfSwKLSNpZmRlZiBWS19LSFJfc2hhZGVyX2V4cGVjdF9hc3N1 bWUKLSAgICB7IFZLX0tIUl9TSEFERVJfRVhQRUNUX0FTU1VNRV9FWFRFTlNJT05fTkFNRSwgICAg ICAgICAgICAgRkZfVktfRVhUX0VYUEVDVF9BU1NVTUUgICAgICAgICAgfSwKLSNlbmRpZgotICAg IHsgVktfS0hSX1ZJREVPX01BSU5URU5BTkNFXzFfRVhURU5TSU9OX05BTUUsICAgICAgICAgICAg ICBGRl9WS19FWFRfVklERU9fTUFJTlRFTkFOQ0VfMSAgICB9LAotI2lmZGVmIFZLX0tIUl92aWRl b19tYWludGVuYW5jZTIKLSAgICB7IFZLX0tIUl9WSURFT19NQUlOVEVOQU5DRV8yX0VYVEVOU0lP Tl9OQU1FLCAgICAgICAgICAgICAgRkZfVktfRVhUX1ZJREVPX01BSU5URU5BTkNFXzIgICAgfSwK LSNlbmRpZgotCi0gICAgLyogSW1wb3J0cy9leHBvcnRzICovCi0gICAgeyBWS19LSFJfRVhURVJO QUxfTUVNT1JZX0ZEX0VYVEVOU0lPTl9OQU1FLCAgICAgICAgICAgICAgIEZGX1ZLX0VYVF9FWFRF Uk5BTF9GRF9NRU1PUlkgICAgIH0sCi0gICAgeyBWS19FWFRfRVhURVJOQUxfTUVNT1JZX0RNQV9C VUZfRVhURU5TSU9OX05BTUUsICAgICAgICAgIEZGX1ZLX0VYVF9FWFRFUk5BTF9ETUFCVUZfTUVN T1JZIH0sCi0gICAgeyBWS19FWFRfSU1BR0VfRFJNX0ZPUk1BVF9NT0RJRklFUl9FWFRFTlNJT05f TkFNRSwgICAgICAgIEZGX1ZLX0VYVF9EUk1fTU9ESUZJRVJfRkxBR1MgICAgIH0sCi0gICAgeyBW S19LSFJfRVhURVJOQUxfU0VNQVBIT1JFX0ZEX0VYVEVOU0lPTl9OQU1FLCAgICAgICAgICAgIEZG X1ZLX0VYVF9FWFRFUk5BTF9GRF9TRU0gICAgICAgIH0sCi0gICAgeyBWS19FWFRfRVhURVJOQUxf TUVNT1JZX0hPU1RfRVhURU5TSU9OX05BTUUsICAgICAgICAgICAgIEZGX1ZLX0VYVF9FWFRFUk5B TF9IT1NUX01FTU9SWSAgIH0sCi0jaWZkZWYgX1dJTjMyCi0gICAgeyBWS19LSFJfRVhURVJOQUxf TUVNT1JZX1dJTjMyX0VYVEVOU0lPTl9OQU1FLCAgICAgICAgICAgIEZGX1ZLX0VYVF9FWFRFUk5B TF9XSU4zMl9NRU1PUlkgIH0sCi0gICAgeyBWS19LSFJfRVhURVJOQUxfU0VNQVBIT1JFX1dJTjMy X0VYVEVOU0lPTl9OQU1FLCAgICAgICAgIEZGX1ZLX0VYVF9FWFRFUk5BTF9XSU4zMl9TRU0gICAg IH0sCi0jZW5kaWYKLQotICAgIC8qIFZpZGVvIGVuY29kaW5nL2RlY29kaW5nICovCi0gICAgeyBW S19LSFJfVklERU9fUVVFVUVfRVhURU5TSU9OX05BTUUsICAgICAgICAgICAgICAgICAgICAgIEZG X1ZLX0VYVF9WSURFT19RVUVVRSAgICAgICAgICAgIH0sCi0gICAgeyBWS19LSFJfVklERU9fRU5D T0RFX1FVRVVFX0VYVEVOU0lPTl9OQU1FLCAgICAgICAgICAgICAgIEZGX1ZLX0VYVF9WSURFT19F TkNPREVfUVVFVUUgICAgIH0sCi0gICAgeyBWS19LSFJfVklERU9fREVDT0RFX1FVRVVFX0VYVEVO U0lPTl9OQU1FLCAgICAgICAgICAgICAgIEZGX1ZLX0VYVF9WSURFT19ERUNPREVfUVVFVUUgICAg IH0sCi0gICAgeyBWS19LSFJfVklERU9fRU5DT0RFX0gyNjRfRVhURU5TSU9OX05BTUUsICAgICAg ICAgICAgICAgIEZGX1ZLX0VYVF9WSURFT19FTkNPREVfSDI2NCAgICAgIH0sCi0gICAgeyBWS19L SFJfVklERU9fREVDT0RFX0gyNjRfRVhURU5TSU9OX05BTUUsICAgICAgICAgICAgICAgIEZGX1ZL X0VYVF9WSURFT19ERUNPREVfSDI2NCAgICAgIH0sCi0gICAgeyBWS19LSFJfVklERU9fRU5DT0RF X0gyNjVfRVhURU5TSU9OX05BTUUsICAgICAgICAgICAgICAgIEZGX1ZLX0VYVF9WSURFT19FTkNP REVfSDI2NSAgICAgIH0sCi0gICAgeyBWS19LSFJfVklERU9fREVDT0RFX0gyNjVfRVhURU5TSU9O X05BTUUsICAgICAgICAgICAgICAgIEZGX1ZLX0VYVF9WSURFT19ERUNPREVfSDI2NSAgICAgIH0s Ci0jaWZkZWYgVktfS0hSX3ZpZGVvX2RlY29kZV92cDkKLSAgICB7IFZLX0tIUl9WSURFT19ERUNP REVfVlA5X0VYVEVOU0lPTl9OQU1FLCAgICAgICAgICAgICAgICAgRkZfVktfRVhUX1ZJREVPX0RF Q09ERV9WUDkgICAgICAgfSwKLSNlbmRpZgotI2lmZGVmIFZLX0tIUl92aWRlb19lbmNvZGVfYXYx Ci0gICAgeyBWS19LSFJfVklERU9fRU5DT0RFX0FWMV9FWFRFTlNJT05fTkFNRSwgICAgICAgICAg ICAgICAgIEZGX1ZLX0VYVF9WSURFT19FTkNPREVfQVYxICAgICAgIH0sCi0jZW5kaWYKLSAgICB7 IFZLX0tIUl9WSURFT19ERUNPREVfQVYxX0VYVEVOU0lPTl9OQU1FLCAgICAgICAgICAgICAgICAg RkZfVktfRVhUX1ZJREVPX0RFQ09ERV9BVjEgICAgICAgfSwKLX07Ci0KLXN0YXRpYyBWa0Jvb2wz MiBWS0FQSV9DQUxMIHZrX2RiZ19jYWxsYmFjayhWa0RlYnVnVXRpbHNNZXNzYWdlU2V2ZXJpdHlG bGFnQml0c0VYVCBzZXZlcml0eSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBWa0RlYnVnVXRpbHNNZXNzYWdlVHlwZUZsYWdzRVhUIG1lc3NhZ2VUeXBlLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFZrRGVidWdVdGls c01lc3NlbmdlckNhbGxiYWNrRGF0YUVYVCAqZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB2b2lkICpwcml2KQotewotICAgIGludCBsOwotICAgIEFWSFdE ZXZpY2VDb250ZXh0ICpjdHggPSBwcml2OwotCi0gICAgLyogSWdub3JlIGZhbHNlIHBvc2l0aXZl cyAqLwotICAgIHN3aXRjaCAoZGF0YS0+bWVzc2FnZUlkTnVtYmVyKSB7Ci0gICAgY2FzZSAweDA4 Njk3NGMxOiAvKiBCZXN0UHJhY3RpY2VzLXZrQ3JlYXRlQ29tbWFuZFBvb2wtY29tbWFuZC1idWZm ZXItcmVzZXQgKi8KLSAgICBjYXNlIDB4ZmQ5MjQ3N2E6IC8qIEJlc3RQcmFjdGljZXMtdmtBbGxv Y2F0ZU1lbW9yeS1zbWFsbC1hbGxvY2F0aW9uICovCi0gICAgY2FzZSAweDYxOGFiMWU3OiAvKiBW VUlELVZrSW1hZ2VWaWV3Q3JlYXRlSW5mby11c2FnZS0wMjI3NSAqLwotICAgIGNhc2UgMHgzMGY0 YWM3MDogLyogVlVJRC1Wa0ltYWdlQ3JlYXRlSW5mby1wTmV4dC0wNjgxMSAqLwotICAgICAgICBy ZXR1cm4gVktfRkFMU0U7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0g ICAgc3dpdGNoIChzZXZlcml0eSkgewotICAgIGNhc2UgVktfREVCVUdfVVRJTFNfTUVTU0FHRV9T RVZFUklUWV9WRVJCT1NFX0JJVF9FWFQ6IGwgPSBBVl9MT0dfVkVSQk9TRTsgYnJlYWs7Ci0gICAg Y2FzZSBWS19ERUJVR19VVElMU19NRVNTQUdFX1NFVkVSSVRZX0lORk9fQklUX0VYVDogICAgbCA9 IEFWX0xPR19JTkZPOyAgICBicmVhazsKLSAgICBjYXNlIFZLX0RFQlVHX1VUSUxTX01FU1NBR0Vf U0VWRVJJVFlfV0FSTklOR19CSVRfRVhUOiBsID0gQVZfTE9HX1dBUk5JTkc7IGJyZWFrOwotICAg IGNhc2UgVktfREVCVUdfVVRJTFNfTUVTU0FHRV9TRVZFUklUWV9FUlJPUl9CSVRfRVhUOiAgIGwg PSBBVl9MT0dfRVJST1I7ICAgYnJlYWs7Ci0gICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbCA9IEFWX0xPR19ERUJVRzsgICBicmVhazsKLSAg ICB9Ci0KLSAgICBhdl9sb2coY3R4LCBsLCAiJXNcbiIsIGRhdGEtPnBNZXNzYWdlKTsKLSAgICBm b3IgKGludCBpID0gMDsgaSA8IGRhdGEtPmNtZEJ1ZkxhYmVsQ291bnQ7IGkrKykKLSAgICAgICAg YXZfbG9nKGN0eCwgbCwgIlx0JWk6ICVzXG4iLCBpLCBkYXRhLT5wQ21kQnVmTGFiZWxzW2ldLnBM YWJlbE5hbWUpOwotCi0gICAgcmV0dXJuIFZLX0ZBTFNFOwotfQotCi0jZGVmaW5lIEFERF9WQUxf VE9fTElTVChsaXN0LCBjb3VudCwgdmFsKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAotICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgbGlzdCA9IGF2X3JlYWxs b2NfYXJyYXkobGlzdCwgc2l6ZW9mKCpsaXN0KSwgKytjb3VudCk7ICAgICAgICAgICAgICAgICBc Ci0gICAgICAgIGlmICghbGlzdCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgZXJyID0gQVZFUlJPUihFTk9N RU0pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAg ICAgICAgIGdvdG8gZmFpbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCi0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBsaXN0 W2NvdW50IC0gMV0gPSBhdl9zdHJkdXAodmFsKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKLSAgICAgICAgaWYgKCFsaXN0W2NvdW50IC0gMV0pIHsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBlcnIgPSBB VkVSUk9SKEVOT01FTSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAotICAgICAgICAgICAgZ290byBmYWlsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgfSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g ICAgfSB3aGlsZSgwKQotCi0jZGVmaW5lIFJFTEVBU0VfUFJPUFMocHJvcHMsIGNvdW50KSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmIChwcm9wcykg eyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBhdl9mcmVlKCh2 b2lkICopKChwcm9wcylbaV0pKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAotICAgICAgICBhdl9mcmVlKCh2b2lkICopcHJvcHMpOyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9Ci0KLWVudW0gRkZWdWxrYW5EZWJ1Z01v ZGUgewotICAgIEZGX1ZVTEtBTl9ERUJVR19OT05FID0gMCwKLSAgICAvKiBTdGFuZGFyZCBHUFUt YXNzaXN0ZWQgdmFsaWRhdGlvbiAqLwotICAgIEZGX1ZVTEtBTl9ERUJVR19WQUxJREFURSA9IDEs Ci0gICAgLyogUGFzc2VzIHByaW50ZnMgaW4gc2hhZGVycyB0byB0aGUgZGVidWcgY2FsbGJhY2sg Ki8KLSAgICBGRl9WVUxLQU5fREVCVUdfUFJJTlRGID0gMiwKLSAgICAvKiBFbmFibGVzIGV4dHJh IHByaW50b3V0cyAqLwotICAgIEZGX1ZVTEtBTl9ERUJVR19QUkFDVElDRVMgPSAzLAotICAgIC8q IERpc2FibGVzIHZhbGlkYXRpb24gYnV0IGtlZXBzIHNoYWRlciBkZWJ1ZyBpbmZvIGFuZCBvcHRp bWl6YXRpb25zICovCi0gICAgRkZfVlVMS0FOX0RFQlVHX1BST0ZJTEUgPSA0LAotCi0gICAgRkZf VlVMS0FOX0RFQlVHX05CLAotfTsKLQotc3RhdGljIGludCBjaGVja19leHRlbnNpb25zKEFWSFdE ZXZpY2VDb250ZXh0ICpjdHgsIGludCBkZXYsIEFWRGljdGlvbmFyeSAqb3B0cywKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICogY29uc3QgKipkc3QsIHVpbnQzMl90ICpu dW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBGRlZ1bGthbkRlYnVnTW9kZSBk ZWJ1Z19tb2RlKQotewotICAgIGNvbnN0IGNoYXIgKnRzdHI7Ci0gICAgY29uc3QgY2hhciAqKmV4 dGVuc2lvbl9uYW1lcyA9IE5VTEw7Ci0gICAgVnVsa2FuRGV2aWNlUHJpdiAqcCA9IGN0eC0+aHdj dHg7Ci0gICAgQVZWdWxrYW5EZXZpY2VDb250ZXh0ICpod2N0eCA9ICZwLT5wOwotICAgIEZGVnVs a2FuRnVuY3Rpb25zICp2ayA9ICZwLT52a2N0eC52a2ZuOwotICAgIGludCBlcnIgPSAwLCBmb3Vu ZCwgZXh0ZW5zaW9uc19mb3VuZCA9IDA7Ci0KLSAgICBjb25zdCBjaGFyICptb2Q7Ci0gICAgaW50 IG9wdGlvbmFsX2V4dHNfbnVtOwotICAgIHVpbnQzMl90IHN1cF9leHRfY291bnQ7Ci0gICAgY2hh ciAqdXNlcl9leHRzX3N0ciA9IE5VTEw7Ci0gICAgQVZEaWN0aW9uYXJ5RW50cnkgKnVzZXJfZXh0 czsKLSAgICBWa0V4dGVuc2lvblByb3BlcnRpZXMgKnN1cF9leHQ7Ci0gICAgY29uc3QgVnVsa2Fu T3B0RXh0ZW5zaW9uICpvcHRpb25hbF9leHRzOwotCi0gICAgaWYgKCFkZXYpIHsKLSAgICAgICAg bW9kID0gImluc3RhbmNlIjsKLSAgICAgICAgb3B0aW9uYWxfZXh0cyA9IG9wdGlvbmFsX2luc3Rh bmNlX2V4dHM7Ci0gICAgICAgIG9wdGlvbmFsX2V4dHNfbnVtID0gRkZfQVJSQVlfRUxFTVMob3B0 aW9uYWxfaW5zdGFuY2VfZXh0cyk7Ci0gICAgICAgIHVzZXJfZXh0cyA9IGF2X2RpY3RfZ2V0KG9w dHMsICJpbnN0YW5jZV9leHRlbnNpb25zIiwgTlVMTCwgMCk7Ci0gICAgICAgIGlmICh1c2VyX2V4 dHMpIHsKLSAgICAgICAgICAgIHVzZXJfZXh0c19zdHIgPSBhdl9zdHJkdXAodXNlcl9leHRzLT52 YWx1ZSk7Ci0gICAgICAgICAgICBpZiAoIXVzZXJfZXh0c19zdHIpIHsKLSAgICAgICAgICAgICAg ICBlcnIgPSBBVkVSUk9SKEVOT01FTSk7Ci0gICAgICAgICAgICAgICAgZ290byBmYWlsOwotICAg ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHZrLT5FbnVtZXJhdGVJbnN0YW5jZUV4dGVu c2lvblByb3BlcnRpZXMoTlVMTCwgJnN1cF9leHRfY291bnQsIE5VTEwpOwotICAgICAgICBzdXBf ZXh0ID0gYXZfbWFsbG9jX2FycmF5KHN1cF9leHRfY291bnQsIHNpemVvZihWa0V4dGVuc2lvblBy b3BlcnRpZXMpKTsKLSAgICAgICAgaWYgKCFzdXBfZXh0KQotICAgICAgICAgICAgcmV0dXJuIEFW RVJST1IoRU5PTUVNKTsKLSAgICAgICAgdmstPkVudW1lcmF0ZUluc3RhbmNlRXh0ZW5zaW9uUHJv cGVydGllcyhOVUxMLCAmc3VwX2V4dF9jb3VudCwgc3VwX2V4dCk7Ci0gICAgfSBlbHNlIHsKLSAg ICAgICAgbW9kID0gImRldmljZSI7Ci0gICAgICAgIG9wdGlvbmFsX2V4dHMgPSBvcHRpb25hbF9k ZXZpY2VfZXh0czsKLSAgICAgICAgb3B0aW9uYWxfZXh0c19udW0gPSBGRl9BUlJBWV9FTEVNUyhv cHRpb25hbF9kZXZpY2VfZXh0cyk7Ci0gICAgICAgIHVzZXJfZXh0cyA9IGF2X2RpY3RfZ2V0KG9w dHMsICJkZXZpY2VfZXh0ZW5zaW9ucyIsIE5VTEwsIDApOwotICAgICAgICBpZiAodXNlcl9leHRz KSB7Ci0gICAgICAgICAgICB1c2VyX2V4dHNfc3RyID0gYXZfc3RyZHVwKHVzZXJfZXh0cy0+dmFs dWUpOwotICAgICAgICAgICAgaWYgKCF1c2VyX2V4dHNfc3RyKSB7Ci0gICAgICAgICAgICAgICAg ZXJyID0gQVZFUlJPUihFTk9NRU0pOwotICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKLSAgICAg ICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICB2ay0+RW51bWVyYXRlRGV2aWNlRXh0ZW5zaW9u UHJvcGVydGllcyhod2N0eC0+cGh5c19kZXYsIE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICZzdXBfZXh0X2NvdW50LCBOVUxMKTsKLSAgICAgICAg c3VwX2V4dCA9IGF2X21hbGxvY19hcnJheShzdXBfZXh0X2NvdW50LCBzaXplb2YoVmtFeHRlbnNp b25Qcm9wZXJ0aWVzKSk7Ci0gICAgICAgIGlmICghc3VwX2V4dCkKLSAgICAgICAgICAgIHJldHVy biBBVkVSUk9SKEVOT01FTSk7Ci0gICAgICAgIHZrLT5FbnVtZXJhdGVEZXZpY2VFeHRlbnNpb25Q cm9wZXJ0aWVzKGh3Y3R4LT5waHlzX2RldiwgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJnN1cF9leHRfY291bnQsIHN1cF9leHQpOwotICAgIH0K LQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgb3B0aW9uYWxfZXh0c19udW07IGkrKykgewotICAg ICAgICB0c3RyID0gb3B0aW9uYWxfZXh0c1tpXS5uYW1lOwotICAgICAgICBmb3VuZCA9IDA7Ci0K LSAgICAgICAgLyogSW50ZWwgaGFzIGhhZCBhIGJhZCBkZXNjcmlwdG9yIGJ1ZmZlciBpbXBsZW1l bnRhdGlvbiBmb3IgYSB3aGlsZSAqLwotICAgICAgICBpZiAocC0+ZHByb3BzLmRyaXZlcklEID09 IFZLX0RSSVZFUl9JRF9JTlRFTF9PUEVOX1NPVVJDRV9NRVNBICYmCi0gICAgICAgICAgICAhc3Ry Y21wKHRzdHIsIFZLX0VYVF9ERVNDUklQVE9SX0JVRkZFUl9FWFRFTlNJT05fTkFNRSkpCi0gICAg ICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBpZiAoZGV2ICYmCi0gICAgICAgICAgICAoKGRl YnVnX21vZGUgPT0gRkZfVlVMS0FOX0RFQlVHX1ZBTElEQVRFKSB8fAotICAgICAgICAgICAgIChk ZWJ1Z19tb2RlID09IEZGX1ZVTEtBTl9ERUJVR19QUklOVEYpIHx8Ci0gICAgICAgICAgICAgKGRl YnVnX21vZGUgPT0gRkZfVlVMS0FOX0RFQlVHX1BSQUNUSUNFUykpICYmCi0gICAgICAgICAgICAh c3RyY21wKHRzdHIsIFZLX0VYVF9ERVNDUklQVE9SX0JVRkZFUl9FWFRFTlNJT05fTkFNRSkpIHsK LSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgZm9yIChpbnQgaiA9 IDA7IGogPCBzdXBfZXh0X2NvdW50OyBqKyspIHsKLSAgICAgICAgICAgIGlmICghc3RyY21wKHRz dHIsIHN1cF9leHRbal0uZXh0ZW5zaW9uTmFtZSkpIHsKLSAgICAgICAgICAgICAgICBmb3VuZCA9 IDE7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg ICAgICAgaWYgKCFmb3VuZCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGF2X2xv ZyhjdHgsIEFWX0xPR19WRVJCT1NFLCAiVXNpbmcgJXMgZXh0ZW5zaW9uICVzXG4iLCBtb2QsIHRz dHIpOwotICAgICAgICBwLT52a2N0eC5leHRlbnNpb25zIHw9IG9wdGlvbmFsX2V4dHNbaV0uZmxh ZzsKLSAgICAgICAgQUREX1ZBTF9UT19MSVNUKGV4dGVuc2lvbl9uYW1lcywgZXh0ZW5zaW9uc19m b3VuZCwgdHN0cik7Ci0gICAgfQotCi0gICAgaWYgKCFkZXYgJiYKLSAgICAgICAgKChkZWJ1Z19t b2RlID09IEZGX1ZVTEtBTl9ERUJVR19WQUxJREFURSkgfHwKLSAgICAgICAgIChkZWJ1Z19tb2Rl ID09IEZGX1ZVTEtBTl9ERUJVR19QUklOVEYpIHx8Ci0gICAgICAgICAoZGVidWdfbW9kZSA9PSBG Rl9WVUxLQU5fREVCVUdfUFJBQ1RJQ0VTKSkpIHsKLSAgICAgICAgdHN0ciA9IFZLX0VYVF9ERUJV R19VVElMU19FWFRFTlNJT05fTkFNRTsKLSAgICAgICAgZm91bmQgPSAwOwotICAgICAgICBmb3Ig KGludCBqID0gMDsgaiA8IHN1cF9leHRfY291bnQ7IGorKykgewotICAgICAgICAgICAgaWYgKCFz dHJjbXAodHN0ciwgc3VwX2V4dFtqXS5leHRlbnNpb25OYW1lKSkgewotICAgICAgICAgICAgICAg IGZvdW5kID0gMTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAg ICAgfQotICAgICAgICBpZiAoZm91bmQpIHsKLSAgICAgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xP R19WRVJCT1NFLCAiVXNpbmcgJXMgZXh0ZW5zaW9uICVzXG4iLCBtb2QsIHRzdHIpOwotICAgICAg ICAgICAgQUREX1ZBTF9UT19MSVNUKGV4dGVuc2lvbl9uYW1lcywgZXh0ZW5zaW9uc19mb3VuZCwg dHN0cik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0df RVJST1IsICJEZWJ1ZyBleHRlbnNpb24gXCIlc1wiIG5vdCBmb3VuZCFcbiIsCi0gICAgICAgICAg ICAgICAgICAgdHN0cik7Ci0gICAgICAgICAgICBlcnIgPSBBVkVSUk9SKEVJTlZBTCk7Ci0gICAg ICAgICAgICBnb3RvIGZhaWw7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSNpZmRlZiBWS19LSFJfc2hh ZGVyX3JlbGF4ZWRfZXh0ZW5kZWRfaW5zdHJ1Y3Rpb24KLSAgICBpZiAoKChkZWJ1Z19tb2RlID09 IEZGX1ZVTEtBTl9ERUJVR19QUklOVEYpIHx8Ci0gICAgICAgICAoZGVidWdfbW9kZSA9PSBGRl9W VUxLQU5fREVCVUdfUFJPRklMRSkpICYmIGRldikgewotICAgICAgICB0c3RyID0gVktfS0hSX1NI QURFUl9SRUxBWEVEX0VYVEVOREVEX0lOU1RSVUNUSU9OX0VYVEVOU0lPTl9OQU1FOwotICAgICAg ICBmb3VuZCA9IDA7Ci0gICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgc3VwX2V4dF9jb3VudDsg aisrKSB7Ci0gICAgICAgICAgICBpZiAoIXN0cmNtcCh0c3RyLCBzdXBfZXh0W2pdLmV4dGVuc2lv bk5hbWUpKSB7Ci0gICAgICAgICAgICAgICAgZm91bmQgPSAxOwotICAgICAgICAgICAgICAgIGJy ZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChmb3VuZCkgewotICAg ICAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX1ZFUkJPU0UsICJVc2luZyAlcyBleHRlbnNpb24g JXNcbiIsIG1vZCwgdHN0cik7Ci0gICAgICAgICAgICBBRERfVkFMX1RPX0xJU1QoZXh0ZW5zaW9u X25hbWVzLCBleHRlbnNpb25zX2ZvdW5kLCB0c3RyKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAg ICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIkRlYnVnX3ByaW50Zi9wcm9maWxlIGVu YWJsZWQsIGJ1dCBleHRlbnNpb24gXCIlc1wiIG5vdCBmb3VuZCFcbiIsCi0gICAgICAgICAgICAg ICAgICAgdHN0cik7Ci0gICAgICAgICAgICBlcnIgPSBBVkVSUk9SKEVJTlZBTCk7Ci0gICAgICAg ICAgICBnb3RvIGZhaWw7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYKLQotICAgIGlmICh1c2Vy X2V4dHNfc3RyKSB7Ci0gICAgICAgIGNoYXIgKnNhdmUsICp0b2tlbiA9IGF2X3N0cnRvayh1c2Vy X2V4dHNfc3RyLCAiKyIsICZzYXZlKTsKLSAgICAgICAgd2hpbGUgKHRva2VuKSB7Ci0gICAgICAg ICAgICBmb3VuZCA9IDA7Ci0gICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHN1cF9leHRf Y291bnQ7IGorKykgewotICAgICAgICAgICAgICAgIGlmICghc3RyY21wKHRva2VuLCBzdXBfZXh0 W2pdLmV4dGVuc2lvbk5hbWUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZvdW5kID0gMTsKLSAg ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg fQotICAgICAgICAgICAgaWYgKGZvdW5kKSB7Ci0gICAgICAgICAgICAgICAgYXZfbG9nKGN0eCwg QVZfTE9HX1ZFUkJPU0UsICJVc2luZyAlcyBleHRlbnNpb24gXCIlc1wiXG4iLCBtb2QsIHRva2Vu KTsKLSAgICAgICAgICAgICAgICBBRERfVkFMX1RPX0xJU1QoZXh0ZW5zaW9uX25hbWVzLCBleHRl bnNpb25zX2ZvdW5kLCB0b2tlbik7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg ICAgIGF2X2xvZyhjdHgsIEFWX0xPR19XQVJOSU5HLCAiJXMgZXh0ZW5zaW9uIFwiJXNcIiBub3Qg Zm91bmQsIGV4Y2x1ZGluZy5cbiIsCi0gICAgICAgICAgICAgICAgICAgICAgIG1vZCwgdG9rZW4p OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdG9rZW4gPSBhdl9zdHJ0b2soTlVMTCwgIisi LCAmc2F2ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAqZHN0ID0gZXh0ZW5zaW9uX25hbWVz OwotICAgICpudW0gPSBleHRlbnNpb25zX2ZvdW5kOwotCi0gICAgYXZfZnJlZSh1c2VyX2V4dHNf c3RyKTsKLSAgICBhdl9mcmVlKHN1cF9leHQpOwotICAgIHJldHVybiAwOwotCi1mYWlsOgotICAg IFJFTEVBU0VfUFJPUFMoZXh0ZW5zaW9uX25hbWVzLCBleHRlbnNpb25zX2ZvdW5kKTsKLSAgICBh dl9mcmVlKHVzZXJfZXh0c19zdHIpOwotICAgIGF2X2ZyZWUoc3VwX2V4dCk7Ci0gICAgcmV0dXJu IGVycjsKLX0KLQotc3RhdGljIGludCBjaGVja19sYXllcnMoQVZIV0RldmljZUNvbnRleHQgKmN0 eCwgQVZEaWN0aW9uYXJ5ICpvcHRzLAotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hh ciAqIGNvbnN0ICoqZHN0LCB1aW50MzJfdCAqbnVtLAotICAgICAgICAgICAgICAgICAgICAgICAg ZW51bSBGRlZ1bGthbkRlYnVnTW9kZSAqZGVidWdfbW9kZSkKLXsKLSAgICBpbnQgZXJyID0gMDsK LSAgICBWdWxrYW5EZXZpY2VQcml2ICpwcml2ID0gY3R4LT5od2N0eDsKLSAgICBGRlZ1bGthbkZ1 bmN0aW9ucyAqdmsgPSAmcHJpdi0+dmtjdHgudmtmbjsKLQotICAgIHN0YXRpYyBjb25zdCBjaGFy IGxheWVyX3N0YW5kYXJkX3ZhbGlkYXRpb25bXSA9IHsgIlZLX0xBWUVSX0tIUk9OT1NfdmFsaWRh dGlvbiIgfTsKLSAgICBpbnQgbGF5ZXJfc3RhbmRhcmRfdmFsaWRhdGlvbl9mb3VuZCA9IDA7Ci0K LSAgICB1aW50MzJfdCBzdXBfbGF5ZXJfY291bnQ7Ci0gICAgVmtMYXllclByb3BlcnRpZXMgKnN1 cF9sYXllcnM7Ci0KLSAgICBBVkRpY3Rpb25hcnlFbnRyeSAqdXNlcl9sYXllcnMgPSBhdl9kaWN0 X2dldChvcHRzLCAibGF5ZXJzIiwgTlVMTCwgMCk7Ci0gICAgY2hhciAqdXNlcl9sYXllcnNfc3Ry ID0gTlVMTDsKLSAgICBjaGFyICpzYXZlLCAqdG9rZW47Ci0KLSAgICBjb25zdCBjaGFyICoqZW5h YmxlZF9sYXllcnMgPSBOVUxMOwotICAgIHVpbnQzMl90IGVuYWJsZWRfbGF5ZXJzX2NvdW50ID0g MDsKLQotICAgIEFWRGljdGlvbmFyeUVudHJ5ICpkZWJ1Z19vcHQgPSBhdl9kaWN0X2dldChvcHRz LCAiZGVidWciLCBOVUxMLCAwKTsKLSAgICBlbnVtIEZGVnVsa2FuRGVidWdNb2RlIG1vZGU7Ci0K LSAgICAqZGVidWdfbW9kZSA9IG1vZGUgPSBGRl9WVUxLQU5fREVCVUdfTk9ORTsKLQotICAgIC8q IEdldCBhIGxpc3Qgb2YgYWxsIGxheWVycyAqLwotICAgIHZrLT5FbnVtZXJhdGVJbnN0YW5jZUxh eWVyUHJvcGVydGllcygmc3VwX2xheWVyX2NvdW50LCBOVUxMKTsKLSAgICBzdXBfbGF5ZXJzID0g YXZfbWFsbG9jX2FycmF5KHN1cF9sYXllcl9jb3VudCwgc2l6ZW9mKFZrTGF5ZXJQcm9wZXJ0aWVz KSk7Ci0gICAgaWYgKCFzdXBfbGF5ZXJzKQotICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0p OwotICAgIHZrLT5FbnVtZXJhdGVJbnN0YW5jZUxheWVyUHJvcGVydGllcygmc3VwX2xheWVyX2Nv dW50LCBzdXBfbGF5ZXJzKTsKLQotICAgIGF2X2xvZyhjdHgsIEFWX0xPR19WRVJCT1NFLCAiU3Vw cG9ydGVkIGxheWVyczpcbiIpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3VwX2xheWVyX2Nv dW50OyBpKyspCi0gICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19WRVJCT1NFLCAiXHQlc1xuIiwg c3VwX2xheWVyc1tpXS5sYXllck5hbWUpOwotCi0gICAgLyogSWYgbm8gdXNlciBsYXllcnMgb3Ig ZGVidWcgbGF5ZXJzIGFyZSBnaXZlbiwgcmV0dXJuICovCi0gICAgaWYgKCFkZWJ1Z19vcHQgJiYg IXVzZXJfbGF5ZXJzKQotICAgICAgICBnb3RvIGVuZDsKLQotICAgIC8qIENoZWNrIGZvciBhbnkg cHJvcGVybHkgc3VwcG9ydGVkIHZhbGlkYXRpb24gbGF5ZXIgKi8KLSAgICBpZiAoZGVidWdfb3B0 KSB7Ci0gICAgICAgIGlmICghc3RyY21wKGRlYnVnX29wdC0+dmFsdWUsICJwcm9maWxlIikpIHsK LSAgICAgICAgICAgIG1vZGUgPSBGRl9WVUxLQU5fREVCVUdfUFJPRklMRTsKLSAgICAgICAgfSBl bHNlIGlmICghc3RyY21wKGRlYnVnX29wdC0+dmFsdWUsICJwcmludGYiKSkgewotICAgICAgICAg ICAgbW9kZSA9IEZGX1ZVTEtBTl9ERUJVR19QUklOVEY7Ci0gICAgICAgIH0gZWxzZSBpZiAoIXN0 cmNtcChkZWJ1Z19vcHQtPnZhbHVlLCAidmFsaWRhdGUiKSkgewotICAgICAgICAgICAgbW9kZSA9 IEZGX1ZVTEtBTl9ERUJVR19WQUxJREFURTsKLSAgICAgICAgfSBlbHNlIGlmICghc3RyY21wKGRl YnVnX29wdC0+dmFsdWUsICJwcmFjdGljZXMiKSkgewotICAgICAgICAgICAgbW9kZSA9IEZGX1ZV TEtBTl9ERUJVR19QUkFDVElDRVM7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBjaGFy ICplbmRfcHRyID0gTlVMTDsKLSAgICAgICAgICAgIGludCBpZHggPSBzdHJ0b2woZGVidWdfb3B0 LT52YWx1ZSwgJmVuZF9wdHIsIDEwKTsKLSAgICAgICAgICAgIGlmIChlbmRfcHRyID09IGRlYnVn X29wdC0+dmFsdWUgfHwgZW5kX3B0clswXSAhPSAnXDAnIHx8Ci0gICAgICAgICAgICAgICAgaWR4 IDwgMCB8fCBpZHggPj0gRkZfVlVMS0FOX0RFQlVHX05CKSB7Ci0gICAgICAgICAgICAgICAgYXZf bG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiSW52YWxpZCBkZWJ1Z2dpbmcgbW9kZSBcIiVzXCJcbiIs Ci0gICAgICAgICAgICAgICAgICAgICAgIGRlYnVnX29wdC0+dmFsdWUpOwotICAgICAgICAgICAg ICAgIGVyciA9IEFWRVJST1IoRUlOVkFMKTsKLSAgICAgICAgICAgICAgICBnb3RvIGVuZDsKLSAg ICAgICAgICAgIH0KLSAgICAgICAgICAgIG1vZGUgPSBpZHg7Ci0gICAgICAgIH0KLSAgICB9Ci0K LSAgICAvKiBJZiBtb2RlIGlzIFZBTElEQVRFIG9yIFBSSU5URiwgdHJ5IHRvIGZpbmQgdGhlIHN0 YW5kYXJkIHZhbGlkYXRpb24gbGF5ZXIgZXh0ZW5zaW9uICovCi0gICAgaWYgKChtb2RlID09IEZG X1ZVTEtBTl9ERUJVR19WQUxJREFURSkgfHwKLSAgICAgICAgKG1vZGUgPT0gRkZfVlVMS0FOX0RF QlVHX1BSSU5URikgfHwKLSAgICAgICAgKG1vZGUgPT0gRkZfVlVMS0FOX0RFQlVHX1BSQUNUSUNF UykpIHsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzdXBfbGF5ZXJfY291bnQ7IGkrKykg ewotICAgICAgICAgICAgaWYgKCFzdHJjbXAobGF5ZXJfc3RhbmRhcmRfdmFsaWRhdGlvbiwgc3Vw X2xheWVyc1tpXS5sYXllck5hbWUpKSB7Ci0gICAgICAgICAgICAgICAgYXZfbG9nKGN0eCwgQVZf TE9HX1ZFUkJPU0UsICJTdGFuZGFyZCB2YWxpZGF0aW9uIGxheWVyICVzIGlzIGVuYWJsZWRcbiIs Ci0gICAgICAgICAgICAgICAgICAgICAgIGxheWVyX3N0YW5kYXJkX3ZhbGlkYXRpb24pOwotICAg ICAgICAgICAgICAgIEFERF9WQUxfVE9fTElTVChlbmFibGVkX2xheWVycywgZW5hYmxlZF9sYXll cnNfY291bnQsIGxheWVyX3N0YW5kYXJkX3ZhbGlkYXRpb24pOwotICAgICAgICAgICAgICAgICpk ZWJ1Z19tb2RlID0gbW9kZTsKLSAgICAgICAgICAgICAgICBsYXllcl9zdGFuZGFyZF92YWxpZGF0 aW9uX2ZvdW5kID0gMTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAg ICAgICAgfQotICAgICAgICBpZiAoIWxheWVyX3N0YW5kYXJkX3ZhbGlkYXRpb25fZm91bmQpIHsK LSAgICAgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwKLSAgICAgICAgICAgICAgICAg ICAiVmFsaWRhdGlvbiBMYXllciBcIiVzXCIgbm90IHN1cHBvcnRlZFxuIiwgbGF5ZXJfc3RhbmRh cmRfdmFsaWRhdGlvbik7Ci0gICAgICAgICAgICBlcnIgPSBBVkVSUk9SKEVOT1RTVVApOwotICAg ICAgICAgICAgZ290byBlbmQ7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKG1vZGUgPT0gRkZf VlVMS0FOX0RFQlVHX1BST0ZJTEUpIHsKLSAgICAgICAgKmRlYnVnX21vZGUgPSBtb2RlOwotICAg IH0KLQotICAgIC8qIFByb2Nlc3MgYW55IGN1c3RvbSBsYXllcnMgZW5hYmxlZCAqLwotICAgIGlm ICh1c2VyX2xheWVycykgewotICAgICAgICBpbnQgZm91bmQ7Ci0KLSAgICAgICAgdXNlcl9sYXll cnNfc3RyID0gYXZfc3RyZHVwKHVzZXJfbGF5ZXJzLT52YWx1ZSk7Ci0gICAgICAgIGlmICghdXNl cl9sYXllcnNfc3RyKSB7Ci0gICAgICAgICAgICBlcnIgPSBBVkVSUk9SKEVOT01FTSk7Ci0gICAg ICAgICAgICBnb3RvIGZhaWw7Ci0gICAgICAgIH0KLQotICAgICAgICB0b2tlbiA9IGF2X3N0cnRv ayh1c2VyX2xheWVyc19zdHIsICIrIiwgJnNhdmUpOwotICAgICAgICB3aGlsZSAodG9rZW4pIHsK LSAgICAgICAgICAgIGZvdW5kID0gMDsKLQotICAgICAgICAgICAgLyogSWYgZGVidWc9MS8yIHdh cyBzcGVjaWZpZWQgYXMgYW4gb3B0aW9uLCBza2lwIHRoaXMgbGF5ZXIgKi8KLSAgICAgICAgICAg IGlmICghc3RyY21wKGxheWVyX3N0YW5kYXJkX3ZhbGlkYXRpb24sIHRva2VuKSAmJiBsYXllcl9z dGFuZGFyZF92YWxpZGF0aW9uX2ZvdW5kKSB7Ci0gICAgICAgICAgICAgICAgdG9rZW4gPSBhdl9z dHJ0b2soTlVMTCwgIisiLCAmc2F2ZSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg ICAgICB9Ci0KLSAgICAgICAgICAgIC8qIFRyeSB0byBmaW5kIHRoZSBsYXllciBpbiB0aGUgbGlz dCBvZiBzdXBwb3J0ZWQgbGF5ZXJzICovCi0gICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8 IHN1cF9sYXllcl9jb3VudDsgaisrKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFzdHJjbXAodG9r ZW4sIHN1cF9sYXllcnNbal0ubGF5ZXJOYW1lKSkgewotICAgICAgICAgICAgICAgICAgICBmb3Vu ZCA9IDE7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAg ICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGZvdW5kKSB7Ci0gICAgICAgICAgICAgICAg YXZfbG9nKGN0eCwgQVZfTE9HX1ZFUkJPU0UsICJVc2luZyBsYXllcjogJXNcbiIsIHRva2VuKTsK LSAgICAgICAgICAgICAgICBBRERfVkFMX1RPX0xJU1QoZW5hYmxlZF9sYXllcnMsIGVuYWJsZWRf bGF5ZXJzX2NvdW50LCB0b2tlbik7Ci0KLSAgICAgICAgICAgICAgICAvKiBJZiBkZWJ1ZyB3YXMg bm90IHNldCBhcyBhbiBvcHRpb24sIGZvcmNlIGl0ICovCi0gICAgICAgICAgICAgICAgaWYgKCFz dHJjbXAobGF5ZXJfc3RhbmRhcmRfdmFsaWRhdGlvbiwgdG9rZW4pKQotICAgICAgICAgICAgICAg ICAgICAqZGVidWdfbW9kZSA9IEZGX1ZVTEtBTl9ERUJVR19WQUxJREFURTsKLSAgICAgICAgICAg IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLAotICAg ICAgICAgICAgICAgICAgICAgICAiTGF5ZXIgXCIlc1wiIG5vdCBzdXBwb3J0ZWRcbiIsIHRva2Vu KTsKLSAgICAgICAgICAgICAgICBlcnIgPSBBVkVSUk9SKEVJTlZBTCk7Ci0gICAgICAgICAgICAg ICAgZ290byBlbmQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHRva2VuID0gYXZfc3Ry dG9rKE5VTEwsICIrIiwgJnNhdmUpOwotICAgICAgICB9Ci0gICAgfQotCi1mYWlsOgotZW5kOgot ICAgIGF2X2ZyZWUoc3VwX2xheWVycyk7Ci0gICAgYXZfZnJlZSh1c2VyX2xheWVyc19zdHIpOwot Ci0gICAgaWYgKGVyciA8IDApIHsKLSAgICAgICAgUkVMRUFTRV9QUk9QUyhlbmFibGVkX2xheWVy cywgZW5hYmxlZF9sYXllcnNfY291bnQpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgICpkc3QgPSBl bmFibGVkX2xheWVyczsKLSAgICAgICAgKm51bSA9IGVuYWJsZWRfbGF5ZXJzX2NvdW50OwotICAg IH0KLQotICAgIHJldHVybiBlcnI7Ci19Ci0KLS8qIENyZWF0ZXMgYSBWa0luc3RhbmNlICovCi1z dGF0aWMgaW50IGNyZWF0ZV9pbnN0YW5jZShBVkhXRGV2aWNlQ29udGV4dCAqY3R4LCBBVkRpY3Rp b25hcnkgKm9wdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIEZGVnVsa2FuRGVi dWdNb2RlICpkZWJ1Z19tb2RlKQotewotICAgIGludCBlcnIgPSAwOwotICAgIFZrUmVzdWx0IHJl dDsKLSAgICBWdWxrYW5EZXZpY2VQcml2ICpwID0gY3R4LT5od2N0eDsKLSAgICBBVlZ1bGthbkRl dmljZUNvbnRleHQgKmh3Y3R4ID0gJnAtPnA7Ci0gICAgRkZWdWxrYW5GdW5jdGlvbnMgKnZrID0g JnAtPnZrY3R4LnZrZm47Ci0gICAgVmtBcHBsaWNhdGlvbkluZm8gYXBwbGljYXRpb25faW5mbyA9 IHsKLSAgICAgICAgLnNUeXBlICAgICAgICAgICAgICA9IFZLX1NUUlVDVFVSRV9UWVBFX0FQUExJ Q0FUSU9OX0lORk8sCi0gICAgICAgIC5wQXBwbGljYXRpb25OYW1lICAgPSAiZmZtcGVnIiwKLSAg ICAgICAgLmFwcGxpY2F0aW9uVmVyc2lvbiA9IFZLX01BS0VfVkVSU0lPTihMSUJBVlVUSUxfVkVS U0lPTl9NQUpPUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBMSUJBVlVUSUxfVkVSU0lPTl9NSU5PUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBMSUJBVlVUSUxfVkVSU0lPTl9NSUNSTyksCi0gICAgICAgIC5wRW5n aW5lTmFtZSAgICAgICAgPSAibGliYXZ1dGlsIiwKLSAgICAgICAgLmFwaVZlcnNpb24gICAgICAg ICA9IFZLX0FQSV9WRVJTSU9OXzFfMywKLSAgICAgICAgLmVuZ2luZVZlcnNpb24gICAgICA9IFZL X01BS0VfVkVSU0lPTihMSUJBVlVUSUxfVkVSU0lPTl9NQUpPUiwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJBVlVUSUxfVkVSU0lPTl9NSU5PUiwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJBVlVUSUxfVkVS U0lPTl9NSUNSTyksCi0gICAgfTsKLSAgICBWa1ZhbGlkYXRpb25GZWF0dXJlc0VYVCB2YWxpZGF0 aW9uX2ZlYXR1cmVzID0gewotICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9WQUxJ REFUSU9OX0ZFQVRVUkVTX0VYVCwKLSAgICB9OwotICAgIFZrSW5zdGFuY2VDcmVhdGVJbmZvIGlu c3RfcHJvcHMgPSB7Ci0gICAgICAgIC5zVHlwZSAgICAgICAgICAgID0gVktfU1RSVUNUVVJFX1RZ UEVfSU5TVEFOQ0VfQ1JFQVRFX0lORk8sCi0gICAgICAgIC5wQXBwbGljYXRpb25JbmZvID0gJmFw cGxpY2F0aW9uX2luZm8sCi0gICAgfTsKLQotICAgIGlmICghaHdjdHgtPmdldF9wcm9jX2FkZHIp IHsKLSAgICAgICAgZXJyID0gbG9hZF9saWJ2dWxrYW4oY3R4KTsKLSAgICAgICAgaWYgKGVyciA8 IDApCi0gICAgICAgICAgICByZXR1cm4gZXJyOwotICAgIH0KLQotICAgIGVyciA9IGZmX3ZrX2xv YWRfZnVuY3Rpb25zKGN0eCwgdmssIHAtPnZrY3R4LmV4dGVuc2lvbnMsIDAsIDApOwotICAgIGlm IChlcnIgPCAwKSB7Ci0gICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIlVuYWJsZSB0 byBsb2FkIGluc3RhbmNlIGVudW1lcmF0aW9uIGZ1bmN0aW9ucyFcbiIpOwotICAgICAgICByZXR1 cm4gZXJyOwotICAgIH0KLQotICAgIGVyciA9IGNoZWNrX2xheWVycyhjdHgsIG9wdHMsICZpbnN0 X3Byb3BzLnBwRW5hYmxlZExheWVyTmFtZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICZpbnN0 X3Byb3BzLmVuYWJsZWRMYXllckNvdW50LCBkZWJ1Z19tb2RlKTsKLSAgICBpZiAoZXJyKQotICAg ICAgICBnb3RvIGZhaWw7Ci0KLSAgICAvKiBDaGVjayBmb3IgcHJlc2VudC9taXNzaW5nIGV4dGVu c2lvbnMgKi8KLSAgICBlcnIgPSBjaGVja19leHRlbnNpb25zKGN0eCwgMCwgb3B0cywgJmluc3Rf cHJvcHMucHBFbmFibGVkRXh0ZW5zaW9uTmFtZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAmaW5zdF9wcm9wcy5lbmFibGVkRXh0ZW5zaW9uQ291bnQsICpkZWJ1Z19tb2RlKTsKLSAgICBo d2N0eC0+ZW5hYmxlZF9pbnN0X2V4dGVuc2lvbnMgPSBpbnN0X3Byb3BzLnBwRW5hYmxlZEV4dGVu c2lvbk5hbWVzOwotICAgIGh3Y3R4LT5uYl9lbmFibGVkX2luc3RfZXh0ZW5zaW9ucyA9IGluc3Rf cHJvcHMuZW5hYmxlZEV4dGVuc2lvbkNvdW50OwotICAgIGlmIChlcnIgPCAwKQotICAgICAgICBn b3RvIGZhaWw7Ci0KLSAgICAvKiBFbmFibGUgZGVidWcgZmVhdHVyZXMgaWYgbmVlZGVkICovCi0g ICAgaWYgKCpkZWJ1Z19tb2RlID09IEZGX1ZVTEtBTl9ERUJVR19WQUxJREFURSkgewotICAgICAg ICBzdGF0aWMgY29uc3QgVmtWYWxpZGF0aW9uRmVhdHVyZUVuYWJsZUVYVCBmZWF0X2xpc3RfdmFs aWRhdGVbXSA9IHsKLSAgICAgICAgICAgIFZLX1ZBTElEQVRJT05fRkVBVFVSRV9FTkFCTEVfU1lO Q0hST05JWkFUSU9OX1ZBTElEQVRJT05fRVhULAotICAgICAgICAgICAgVktfVkFMSURBVElPTl9G RUFUVVJFX0VOQUJMRV9HUFVfQVNTSVNURURfUkVTRVJWRV9CSU5ESU5HX1NMT1RfRVhULAotICAg ICAgICAgICAgVktfVkFMSURBVElPTl9GRUFUVVJFX0VOQUJMRV9HUFVfQVNTSVNURURfRVhULAot ICAgICAgICB9OwotICAgICAgICB2YWxpZGF0aW9uX2ZlYXR1cmVzLnBFbmFibGVkVmFsaWRhdGlv bkZlYXR1cmVzID0gZmVhdF9saXN0X3ZhbGlkYXRlOwotICAgICAgICB2YWxpZGF0aW9uX2ZlYXR1 cmVzLmVuYWJsZWRWYWxpZGF0aW9uRmVhdHVyZUNvdW50ID0gRkZfQVJSQVlfRUxFTVMoZmVhdF9s aXN0X3ZhbGlkYXRlKTsKLSAgICAgICAgaW5zdF9wcm9wcy5wTmV4dCA9ICZ2YWxpZGF0aW9uX2Zl YXR1cmVzOwotICAgIH0gZWxzZSBpZiAoKmRlYnVnX21vZGUgPT0gRkZfVlVMS0FOX0RFQlVHX1BS SU5URikgewotICAgICAgICBzdGF0aWMgY29uc3QgVmtWYWxpZGF0aW9uRmVhdHVyZUVuYWJsZUVY VCBmZWF0X2xpc3RfZGVidWdbXSA9IHsKLSAgICAgICAgICAgIFZLX1ZBTElEQVRJT05fRkVBVFVS RV9FTkFCTEVfU1lOQ0hST05JWkFUSU9OX1ZBTElEQVRJT05fRVhULAotICAgICAgICAgICAgVktf VkFMSURBVElPTl9GRUFUVVJFX0VOQUJMRV9HUFVfQVNTSVNURURfUkVTRVJWRV9CSU5ESU5HX1NM T1RfRVhULAotICAgICAgICAgICAgVktfVkFMSURBVElPTl9GRUFUVVJFX0VOQUJMRV9ERUJVR19Q UklOVEZfRVhULAotICAgICAgICB9OwotICAgICAgICB2YWxpZGF0aW9uX2ZlYXR1cmVzLnBFbmFi bGVkVmFsaWRhdGlvbkZlYXR1cmVzID0gZmVhdF9saXN0X2RlYnVnOwotICAgICAgICB2YWxpZGF0 aW9uX2ZlYXR1cmVzLmVuYWJsZWRWYWxpZGF0aW9uRmVhdHVyZUNvdW50ID0gRkZfQVJSQVlfRUxF TVMoZmVhdF9saXN0X2RlYnVnKTsKLSAgICAgICAgaW5zdF9wcm9wcy5wTmV4dCA9ICZ2YWxpZGF0 aW9uX2ZlYXR1cmVzOwotICAgIH0gZWxzZSBpZiAoKmRlYnVnX21vZGUgPT0gRkZfVlVMS0FOX0RF QlVHX1BSQUNUSUNFUykgewotICAgICAgICBzdGF0aWMgY29uc3QgVmtWYWxpZGF0aW9uRmVhdHVy ZUVuYWJsZUVYVCBmZWF0X2xpc3RfcHJhY3RpY2VzW10gPSB7Ci0gICAgICAgICAgICBWS19WQUxJ REFUSU9OX0ZFQVRVUkVfRU5BQkxFX1NZTkNIUk9OSVpBVElPTl9WQUxJREFUSU9OX0VYVCwKLSAg ICAgICAgICAgIFZLX1ZBTElEQVRJT05fRkVBVFVSRV9FTkFCTEVfQkVTVF9QUkFDVElDRVNfRVhU LAotICAgICAgICB9OwotICAgICAgICB2YWxpZGF0aW9uX2ZlYXR1cmVzLnBFbmFibGVkVmFsaWRh dGlvbkZlYXR1cmVzID0gZmVhdF9saXN0X3ByYWN0aWNlczsKLSAgICAgICAgdmFsaWRhdGlvbl9m ZWF0dXJlcy5lbmFibGVkVmFsaWRhdGlvbkZlYXR1cmVDb3VudCA9IEZGX0FSUkFZX0VMRU1TKGZl YXRfbGlzdF9wcmFjdGljZXMpOwotICAgICAgICBpbnN0X3Byb3BzLnBOZXh0ID0gJnZhbGlkYXRp b25fZmVhdHVyZXM7Ci0gICAgfQotCi0jaWZkZWYgX19BUFBMRV9fCi0gICAgZm9yIChpbnQgaSA9 IDA7IGkgPCBpbnN0X3Byb3BzLmVuYWJsZWRFeHRlbnNpb25Db3VudDsgaSsrKSB7Ci0gICAgICAg IGlmICghc3RyY21wKFZLX0tIUl9QT1JUQUJJTElUWV9FTlVNRVJBVElPTl9FWFRFTlNJT05fTkFN RSwKLSAgICAgICAgICAgICAgICAgICAgaW5zdF9wcm9wcy5wcEVuYWJsZWRFeHRlbnNpb25OYW1l c1tpXSkpIHsKLSAgICAgICAgICAgIGluc3RfcHJvcHMuZmxhZ3MgfD0gVktfSU5TVEFOQ0VfQ1JF QVRFX0VOVU1FUkFURV9QT1JUQUJJTElUWV9CSVRfS0hSOwotICAgICAgICAgICAgYnJlYWs7Ci0g ICAgICAgIH0KLSAgICB9Ci0jZW5kaWYKLQotICAgIC8qIFRyeSB0byBjcmVhdGUgdGhlIGluc3Rh bmNlICovCi0gICAgcmV0ID0gdmstPkNyZWF0ZUluc3RhbmNlKCZpbnN0X3Byb3BzLCBod2N0eC0+ YWxsb2MsICZod2N0eC0+aW5zdCk7Ci0KLSAgICAvKiBDaGVjayBmb3IgZXJyb3JzICovCi0gICAg aWYgKHJldCAhPSBWS19TVUNDRVNTKSB7Ci0gICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJP UiwgIkluc3RhbmNlIGNyZWF0aW9uIGZhaWx1cmU6ICVzXG4iLAotICAgICAgICAgICAgICAgZmZf dmtfcmV0MnN0cihyZXQpKTsKLSAgICAgICAgZXJyID0gQVZFUlJPUl9FWFRFUk5BTDsKLSAgICAg ICAgZ290byBmYWlsOwotICAgIH0KLQotICAgIGVyciA9IGZmX3ZrX2xvYWRfZnVuY3Rpb25zKGN0 eCwgdmssIHAtPnZrY3R4LmV4dGVuc2lvbnMsIDEsIDApOwotICAgIGlmIChlcnIgPCAwKSB7Ci0g ICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIlVuYWJsZSB0byBsb2FkIGluc3RhbmNl IGZ1bmN0aW9ucyFcbiIpOwotICAgICAgICBnb3RvIGZhaWw7Ci0gICAgfQotCi0gICAgLyogU2V0 dXAgZGVidWdnaW5nIGNhbGxiYWNrIGlmIG5lZWRlZCAqLwotICAgIGlmICgoKmRlYnVnX21vZGUg PT0gRkZfVlVMS0FOX0RFQlVHX1ZBTElEQVRFKSB8fAotICAgICAgICAoKmRlYnVnX21vZGUgPT0g RkZfVlVMS0FOX0RFQlVHX1BSSU5URikgfHwKLSAgICAgICAgKCpkZWJ1Z19tb2RlID09IEZGX1ZV TEtBTl9ERUJVR19QUkFDVElDRVMpKSB7Ci0gICAgICAgIFZrRGVidWdVdGlsc01lc3NlbmdlckNy ZWF0ZUluZm9FWFQgZGJnID0gewotICAgICAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZ UEVfREVCVUdfVVRJTFNfTUVTU0VOR0VSX0NSRUFURV9JTkZPX0VYVCwKLSAgICAgICAgICAgIC5t ZXNzYWdlU2V2ZXJpdHkgPSBWS19ERUJVR19VVElMU19NRVNTQUdFX1NFVkVSSVRZX1ZFUkJPU0Vf QklUX0VYVCB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfREVCVUdfVVRJTFNf TUVTU0FHRV9TRVZFUklUWV9JTkZPX0JJVF9FWFQgICAgfAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFZLX0RFQlVHX1VUSUxTX01FU1NBR0VfU0VWRVJJVFlfV0FSTklOR19CSVRfRVhU IHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19ERUJVR19VVElMU19NRVNTQUdF X1NFVkVSSVRZX0VSUk9SX0JJVF9FWFQsCi0gICAgICAgICAgICAubWVzc2FnZVR5cGUgPSBWS19E RUJVR19VVElMU19NRVNTQUdFX1RZUEVfR0VORVJBTF9CSVRfRVhUICAgIHwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgIFZLX0RFQlVHX1VUSUxTX01FU1NBR0VfVFlQRV9WQUxJREFUSU9OX0JJ VF9FWFQgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfREVCVUdfVVRJTFNfTUVTU0FH RV9UWVBFX1BFUkZPUk1BTkNFX0JJVF9FWFQsCi0gICAgICAgICAgICAucGZuVXNlckNhbGxiYWNr ID0gdmtfZGJnX2NhbGxiYWNrLAotICAgICAgICAgICAgLnBVc2VyRGF0YSA9IGN0eCwKLSAgICAg ICAgfTsKLQotICAgICAgICB2ay0+Q3JlYXRlRGVidWdVdGlsc01lc3NlbmdlckVYVChod2N0eC0+ aW5zdCwgJmRiZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHdj dHgtPmFsbG9jLCAmcC0+ZGVidWdfY3R4KTsKLSAgICB9Ci0KLSAgICBlcnIgPSAwOwotCi1mYWls OgotICAgIFJFTEVBU0VfUFJPUFMoaW5zdF9wcm9wcy5wcEVuYWJsZWRMYXllck5hbWVzLCBpbnN0 X3Byb3BzLmVuYWJsZWRMYXllckNvdW50KTsKLSAgICByZXR1cm4gZXJyOwotfQotCi10eXBlZGVm IHN0cnVjdCBWdWxrYW5EZXZpY2VTZWxlY3Rpb24gewotICAgIHVpbnQ4X3QgdXVpZFtWS19VVUlE X1NJWkVdOyAvKiBXaWxsIHVzZSB0aGlzIGZpcnN0IHVubGVzcyAhaGFzX3V1aWQgKi8KLSAgICBp bnQgaGFzX3V1aWQ7Ci0gICAgdWludDMyX3QgZHJtX21ham9yOyAvKiBXaWxsIHVzZSB0aGlzIHNl Y29uZCB1bmxlc3MgIWhhc19kcm0gKi8KLSAgICB1aW50MzJfdCBkcm1fbWlub3I7IC8qIFdpbGwg dXNlIHRoaXMgc2Vjb25kIHVubGVzcyAhaGFzX2RybSAqLwotICAgIHVpbnQzMl90IGhhc19kcm07 IC8qIGhhcyBkcm0gbm9kZSBpbmZvICovCi0gICAgY29uc3QgY2hhciAqbmFtZTsgLyogV2lsbCB1 c2UgdGhpcyB0aGlyZCB1bmxlc3MgTlVMTCAqLwotICAgIHVpbnQzMl90IHBjaV9kZXZpY2U7IC8q IFdpbGwgdXNlIHRoaXMgZm91cnRoIHVubGVzcyAweDAgKi8KLSAgICB1aW50MzJfdCB2ZW5kb3Jf aWQ7IC8qIExhc3QgcmVzb3J0IHRvIGZpbmQgc29tZXRoaW5nIGRldGVybWluaXN0aWMgKi8KLSAg ICBpbnQgaW5kZXg7IC8qIEZpbmFsbHkgZmFsbCBiYWNrIHRvIGluZGV4ICovCi19IFZ1bGthbkRl dmljZVNlbGVjdGlvbjsKLQotc3RhdGljIGNvbnN0IGNoYXIgKnZrX2Rldl90eXBlKGVudW0gVmtQ aHlzaWNhbERldmljZVR5cGUgdHlwZSkKLXsKLSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNl IFZLX1BIWVNJQ0FMX0RFVklDRV9UWVBFX0lOVEVHUkFURURfR1BVOiByZXR1cm4gImludGVncmF0 ZWQiOwotICAgIGNhc2UgVktfUEhZU0lDQUxfREVWSUNFX1RZUEVfRElTQ1JFVEVfR1BVOiAgIHJl dHVybiAiZGlzY3JldGUiOwotICAgIGNhc2UgVktfUEhZU0lDQUxfREVWSUNFX1RZUEVfVklSVFVB TF9HUFU6ICAgIHJldHVybiAidmlydHVhbCI7Ci0gICAgY2FzZSBWS19QSFlTSUNBTF9ERVZJQ0Vf VFlQRV9DUFU6ICAgICAgICAgICAgcmV0dXJuICJzb2Z0d2FyZSI7Ci0gICAgZGVmYXVsdDogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJ1bmtub3duIjsKLSAgICB9 Ci19Ci0KLS8qIEZpbmRzIGEgZGV2aWNlICovCi1zdGF0aWMgaW50IGZpbmRfZGV2aWNlKEFWSFdE ZXZpY2VDb250ZXh0ICpjdHgsIFZ1bGthbkRldmljZVNlbGVjdGlvbiAqc2VsZWN0KQotewotICAg IGludCBlcnIgPSAwLCBjaG9pY2UgPSAtMTsKLSAgICB1aW50MzJfdCBudW07Ci0gICAgVmtSZXN1 bHQgcmV0OwotICAgIFZ1bGthbkRldmljZVByaXYgKnAgPSBjdHgtPmh3Y3R4OwotICAgIEFWVnVs a2FuRGV2aWNlQ29udGV4dCAqaHdjdHggPSAmcC0+cDsKLSAgICBGRlZ1bGthbkZ1bmN0aW9ucyAq dmsgPSAmcC0+dmtjdHgudmtmbjsKLSAgICBWa1BoeXNpY2FsRGV2aWNlICpkZXZpY2VzID0gTlVM TDsKLSAgICBWa1BoeXNpY2FsRGV2aWNlSURQcm9wZXJ0aWVzICppZHAgPSBOVUxMOwotICAgIFZr UGh5c2ljYWxEZXZpY2VQcm9wZXJ0aWVzMiAqcHJvcCA9IE5VTEw7Ci0gICAgVmtQaHlzaWNhbERl dmljZURyaXZlclByb3BlcnRpZXMgKmRyaXZlcl9wcm9wID0gTlVMTDsKLSAgICBWa1BoeXNpY2Fs RGV2aWNlRHJtUHJvcGVydGllc0VYVCAqZHJtX3Byb3AgPSBOVUxMOwotCi0gICAgcmV0ID0gdmst PkVudW1lcmF0ZVBoeXNpY2FsRGV2aWNlcyhod2N0eC0+aW5zdCwgJm51bSwgTlVMTCk7Ci0gICAg aWYgKHJldCAhPSBWS19TVUNDRVNTIHx8ICFudW0pIHsKLSAgICAgICAgYXZfbG9nKGN0eCwgQVZf TE9HX0VSUk9SLCAiTm8gZGV2aWNlcyBmb3VuZDogJXMhXG4iLCBmZl92a19yZXQyc3RyKHJldCkp OwotICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9ERVYpOwotICAgIH0KLQotICAgIGRldmljZXMg PSBhdl9tYWxsb2NfYXJyYXkobnVtLCBzaXplb2YoVmtQaHlzaWNhbERldmljZSkpOwotICAgIGlm ICghZGV2aWNlcykKLSAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKLQotICAgIHJldCA9 IHZrLT5FbnVtZXJhdGVQaHlzaWNhbERldmljZXMoaHdjdHgtPmluc3QsICZudW0sIGRldmljZXMp OwotICAgIGlmIChyZXQgIT0gVktfU1VDQ0VTUykgewotICAgICAgICBhdl9sb2coY3R4LCBBVl9M T0dfRVJST1IsICJGYWlsZWQgZW51bWVyYXRpbmcgZGV2aWNlczogJXNcbiIsCi0gICAgICAgICAg ICAgICBmZl92a19yZXQyc3RyKHJldCkpOwotICAgICAgICBlcnIgPSBBVkVSUk9SKEVOT0RFVik7 Ci0gICAgICAgIGdvdG8gZW5kOwotICAgIH0KLQotICAgIHByb3AgPSBhdl9jYWxsb2MobnVtLCBz aXplb2YoKnByb3ApKTsKLSAgICBpZiAoIXByb3ApIHsKLSAgICAgICAgZXJyID0gQVZFUlJPUihF Tk9NRU0pOwotICAgICAgICBnb3RvIGVuZDsKLSAgICB9Ci0KLSAgICBpZHAgPSBhdl9jYWxsb2Mo bnVtLCBzaXplb2YoKmlkcCkpOwotICAgIGlmICghaWRwKSB7Ci0gICAgICAgIGVyciA9IEFWRVJS T1IoRU5PTUVNKTsKLSAgICAgICAgZ290byBlbmQ7Ci0gICAgfQotCi0gICAgZHJpdmVyX3Byb3Ag PSBhdl9jYWxsb2MobnVtLCBzaXplb2YoKmRyaXZlcl9wcm9wKSk7Ci0gICAgaWYgKCFkcml2ZXJf cHJvcCkgewotICAgICAgICBlcnIgPSBBVkVSUk9SKEVOT01FTSk7Ci0gICAgICAgIGdvdG8gZW5k OwotICAgIH0KLQotICAgIGlmIChwLT52a2N0eC5leHRlbnNpb25zICYgRkZfVktfRVhUX0RFVklD RV9EUk0pIHsKLSAgICAgICAgZHJtX3Byb3AgPSBhdl9jYWxsb2MobnVtLCBzaXplb2YoKmRybV9w cm9wKSk7Ci0gICAgICAgIGlmICghZHJtX3Byb3ApIHsKLSAgICAgICAgICAgIGVyciA9IEFWRVJS T1IoRU5PTUVNKTsKLSAgICAgICAgICAgIGdvdG8gZW5kOwotICAgICAgICB9Ci0gICAgfQotCi0g ICAgYXZfbG9nKGN0eCwgQVZfTE9HX1ZFUkJPU0UsICJHUFUgbGlzdGluZzpcbiIpOwotICAgIGZv ciAoaW50IGkgPSAwOyBpIDwgbnVtOyBpKyspIHsKLSAgICAgICAgaWYgKHAtPnZrY3R4LmV4dGVu c2lvbnMgJiBGRl9WS19FWFRfREVWSUNFX0RSTSkgewotICAgICAgICAgICAgZHJtX3Byb3BbaV0u c1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9QSFlTSUNBTF9ERVZJQ0VfRFJNX1BST1BFUlRJRVNf RVhUOwotICAgICAgICAgICAgZHJpdmVyX3Byb3BbaV0ucE5leHQgPSAmZHJtX3Byb3BbaV07Ci0g ICAgICAgIH0KLSAgICAgICAgZHJpdmVyX3Byb3BbaV0uc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQ RV9QSFlTSUNBTF9ERVZJQ0VfRFJJVkVSX1BST1BFUlRJRVM7Ci0gICAgICAgIGlkcFtpXS5wTmV4 dCA9ICZkcml2ZXJfcHJvcFtpXTsKLSAgICAgICAgaWRwW2ldLnNUeXBlID0gVktfU1RSVUNUVVJF X1RZUEVfUEhZU0lDQUxfREVWSUNFX0lEX1BST1BFUlRJRVM7Ci0gICAgICAgIHByb3BbaV0uc1R5 cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9QSFlTSUNBTF9ERVZJQ0VfUFJPUEVSVElFU18yOwotICAg ICAgICBwcm9wW2ldLnBOZXh0ID0gJmlkcFtpXTsKLQotICAgICAgICB2ay0+R2V0UGh5c2ljYWxE ZXZpY2VQcm9wZXJ0aWVzMihkZXZpY2VzW2ldLCAmcHJvcFtpXSk7Ci0gICAgICAgIGF2X2xvZyhj dHgsIEFWX0xPR19WRVJCT1NFLCAiICAgICVkOiAlcyAoJXMpICgweCV4KVxuIiwgaSwKLSAgICAg ICAgICAgICAgIHByb3BbaV0ucHJvcGVydGllcy5kZXZpY2VOYW1lLAotICAgICAgICAgICAgICAg dmtfZGV2X3R5cGUocHJvcFtpXS5wcm9wZXJ0aWVzLmRldmljZVR5cGUpLAotICAgICAgICAgICAg ICAgcHJvcFtpXS5wcm9wZXJ0aWVzLmRldmljZUlEKTsKLSAgICB9Ci0KLSAgICBpZiAoc2VsZWN0 LT5oYXNfdXVpZCkgewotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bTsgaSsrKSB7Ci0g ICAgICAgICAgICBpZiAoIXN0cm5jbXAoaWRwW2ldLmRldmljZVVVSUQsIHNlbGVjdC0+dXVpZCwg VktfVVVJRF9TSVpFKSkgewotICAgICAgICAgICAgICAgIGNob2ljZSA9IGk7Ci0gICAgICAgICAg ICAgICAgZ290byBlbmQ7Ci0gICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGF2X2xv ZyhjdHgsIEFWX0xPR19FUlJPUiwgIlVuYWJsZSB0byBmaW5kIGRldmljZSBieSBnaXZlbiBVVUlE IVxuIik7Ci0gICAgICAgIGVyciA9IEFWRVJST1IoRU5PREVWKTsKLSAgICAgICAgZ290byBlbmQ7 Ci0gICAgfSBlbHNlIGlmICgocC0+dmtjdHguZXh0ZW5zaW9ucyAmIEZGX1ZLX0VYVF9ERVZJQ0Vf RFJNKSAmJiBzZWxlY3QtPmhhc19kcm0pIHsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBu dW07IGkrKykgewotICAgICAgICAgICAgaWYgKChzZWxlY3QtPmRybV9tYWpvciA9PSBkcm1fcHJv cFtpXS5wcmltYXJ5TWFqb3IgJiYKLSAgICAgICAgICAgICAgICAgc2VsZWN0LT5kcm1fbWlub3Ig PT0gZHJtX3Byb3BbaV0ucHJpbWFyeU1pbm9yKSB8fAotICAgICAgICAgICAgICAgIChzZWxlY3Qt PmRybV9tYWpvciA9PSBkcm1fcHJvcFtpXS5yZW5kZXJNYWpvciAmJgotICAgICAgICAgICAgICAg ICBzZWxlY3QtPmRybV9taW5vciA9PSBkcm1fcHJvcFtpXS5yZW5kZXJNaW5vcikpIHsKLSAgICAg ICAgICAgICAgICBjaG9pY2UgPSBpOwotICAgICAgICAgICAgICAgIGdvdG8gZW5kOwotICAgICAg ICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJV bmFibGUgdG8gZmluZCBkZXZpY2UgYnkgZ2l2ZW4gRFJNIG5vZGUgbnVtYmVycyAlaTolaSFcbiIs Ci0gICAgICAgICAgICAgICBzZWxlY3QtPmRybV9tYWpvciwgc2VsZWN0LT5kcm1fbWlub3IpOwot ICAgICAgICBlcnIgPSBBVkVSUk9SKEVOT0RFVik7Ci0gICAgICAgIGdvdG8gZW5kOwotICAgIH0g ZWxzZSBpZiAoc2VsZWN0LT5uYW1lKSB7Ci0gICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19WRVJC T1NFLCAiUmVxdWVzdGVkIGRldmljZTogJXNcbiIsIHNlbGVjdC0+bmFtZSk7Ci0gICAgICAgIGZv ciAoaW50IGkgPSAwOyBpIDwgbnVtOyBpKyspIHsKLSAgICAgICAgICAgIGlmIChzdHJzdHIocHJv cFtpXS5wcm9wZXJ0aWVzLmRldmljZU5hbWUsIHNlbGVjdC0+bmFtZSkpIHsKLSAgICAgICAgICAg ICAgICBjaG9pY2UgPSBpOwotICAgICAgICAgICAgICAgIGdvdG8gZW5kOwotICAgICAgICAgICAg IH0KLSAgICAgICAgfQotICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJVbmFibGUg dG8gZmluZCBkZXZpY2UgXCIlc1wiIVxuIiwKLSAgICAgICAgICAgICAgIHNlbGVjdC0+bmFtZSk7 Ci0gICAgICAgIGVyciA9IEFWRVJST1IoRU5PREVWKTsKLSAgICAgICAgZ290byBlbmQ7Ci0gICAg fSBlbHNlIGlmIChzZWxlY3QtPnBjaV9kZXZpY2UpIHsKLSAgICAgICAgYXZfbG9nKGN0eCwgQVZf TE9HX1ZFUkJPU0UsICJSZXF1ZXN0ZWQgZGV2aWNlOiAweCV4XG4iLCBzZWxlY3QtPnBjaV9kZXZp Y2UpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bTsgaSsrKSB7Ci0gICAgICAgICAg ICBpZiAoc2VsZWN0LT5wY2lfZGV2aWNlID09IHByb3BbaV0ucHJvcGVydGllcy5kZXZpY2VJRCkg ewotICAgICAgICAgICAgICAgIGNob2ljZSA9IGk7Ci0gICAgICAgICAgICAgICAgZ290byBlbmQ7 Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VS Uk9SLCAiVW5hYmxlIHRvIGZpbmQgZGV2aWNlIHdpdGggUENJIElEIDB4JXghXG4iLAotICAgICAg ICAgICAgICAgc2VsZWN0LT5wY2lfZGV2aWNlKTsKLSAgICAgICAgZXJyID0gQVZFUlJPUihFSU5W QUwpOwotICAgICAgICBnb3RvIGVuZDsKLSAgICB9IGVsc2UgaWYgKHNlbGVjdC0+dmVuZG9yX2lk KSB7Ci0gICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19WRVJCT1NFLCAiUmVxdWVzdGVkIHZlbmRv cjogMHgleFxuIiwgc2VsZWN0LT52ZW5kb3JfaWQpOwotICAgICAgICBmb3IgKGludCBpID0gMDsg aSA8IG51bTsgaSsrKSB7Ci0gICAgICAgICAgICBpZiAoc2VsZWN0LT52ZW5kb3JfaWQgPT0gcHJv cFtpXS5wcm9wZXJ0aWVzLnZlbmRvcklEKSB7Ci0gICAgICAgICAgICAgICAgY2hvaWNlID0gaTsK LSAgICAgICAgICAgICAgICBnb3RvIGVuZDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg ICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJVbmFibGUgdG8gZmluZCBkZXZpY2Ugd2l0 aCBWZW5kb3IgSUQgMHgleCFcbiIsCi0gICAgICAgICAgICAgICBzZWxlY3QtPnZlbmRvcl9pZCk7 Ci0gICAgICAgIGVyciA9IEFWRVJST1IoRU5PREVWKTsKLSAgICAgICAgZ290byBlbmQ7Ci0gICAg fSBlbHNlIHsKLSAgICAgICAgaWYgKHNlbGVjdC0+aW5kZXggPCBudW0pIHsKLSAgICAgICAgICAg IGNob2ljZSA9IHNlbGVjdC0+aW5kZXg7Ci0gICAgICAgICAgICBnb3RvIGVuZDsKLSAgICAgICAg fQotICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJVbmFibGUgdG8gZmluZCBkZXZp Y2Ugd2l0aCBpbmRleCAlaSFcbiIsCi0gICAgICAgICAgICAgICBzZWxlY3QtPmluZGV4KTsKLSAg ICAgICAgZXJyID0gQVZFUlJPUihFTk9ERVYpOwotICAgICAgICBnb3RvIGVuZDsKLSAgICB9Ci0K LWVuZDoKLSAgICBpZiAoY2hvaWNlID4gLTEpIHsKLSAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9H X1ZFUkJPU0UsICJEZXZpY2UgJWQgc2VsZWN0ZWQ6ICVzICglcykgKDB4JXgpXG4iLAotICAgICAg ICAgICAgICAgY2hvaWNlLCBwcm9wW2Nob2ljZV0ucHJvcGVydGllcy5kZXZpY2VOYW1lLAotICAg ICAgICAgICAgICAgdmtfZGV2X3R5cGUocHJvcFtjaG9pY2VdLnByb3BlcnRpZXMuZGV2aWNlVHlw ZSksCi0gICAgICAgICAgICAgICBwcm9wW2Nob2ljZV0ucHJvcGVydGllcy5kZXZpY2VJRCk7Ci0g ICAgICAgIGh3Y3R4LT5waHlzX2RldiA9IGRldmljZXNbY2hvaWNlXTsKLSAgICAgICAgcC0+cHJv cHMgPSBwcm9wW2Nob2ljZV07Ci0gICAgICAgIHAtPnByb3BzLnBOZXh0ID0gTlVMTDsKLSAgICAg ICAgcC0+ZHByb3BzID0gZHJpdmVyX3Byb3BbY2hvaWNlXTsKLSAgICAgICAgcC0+ZHByb3BzLnBO ZXh0ID0gTlVMTDsKLSAgICB9Ci0KLSAgICBhdl9mcmVlKGRldmljZXMpOwotICAgIGF2X2ZyZWUo cHJvcCk7Ci0gICAgYXZfZnJlZShpZHApOwotICAgIGF2X2ZyZWUoZHJtX3Byb3ApOwotICAgIGF2 X2ZyZWUoZHJpdmVyX3Byb3ApOwotCi0gICAgcmV0dXJuIGVycjsKLX0KLQotLyogUGlja3MgdGhl IGxlYXN0IHVzZWQgcWYgd2l0aCB0aGUgZmV3ZXN0IHVubmVlZGVkIGZsYWdzLCBvciAtMSBpZiBu b25lIGZvdW5kICovCi1zdGF0aWMgaW5saW5lIGludCBwaWNrX3F1ZXVlX2ZhbWlseShWa1F1ZXVl RmFtaWx5UHJvcGVydGllczIgKnFmLCB1aW50MzJfdCBudW1fcWYsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBWa1F1ZXVlRmxhZ0JpdHMgZmxhZ3MpCi17Ci0gICAgaW50IGlu ZGV4ID0gLTE7Ci0gICAgdWludDMyX3QgbWluX3Njb3JlID0gVUlOVDMyX01BWDsKLQotICAgIGZv ciAoaW50IGkgPSAwOyBpIDwgbnVtX3FmOyBpKyspIHsKLSAgICAgICAgVmtRdWV1ZUZsYWdCaXRz IHFmbGFncyA9IHFmW2ldLnF1ZXVlRmFtaWx5UHJvcGVydGllcy5xdWV1ZUZsYWdzOwotCi0gICAg ICAgIC8qIFBlciB0aGUgc3BlYywgcmVwb3J0aW5nIHRyYW5zZmVyIGNhcHMgaXMgb3B0aW9uYWwg Zm9yIHRoZXNlIDIgdHlwZXMgKi8KLSAgICAgICAgaWYgKChmbGFncyAmIFZLX1FVRVVFX1RSQU5T RkVSX0JJVCkgJiYKLSAgICAgICAgICAgIChxZmxhZ3MgJiAoVktfUVVFVUVfR1JBUEhJQ1NfQklU IHwgVktfUVVFVUVfQ09NUFVURV9CSVQpKSkKLSAgICAgICAgICAgIHFmbGFncyB8PSBWS19RVUVV RV9UUkFOU0ZFUl9CSVQ7Ci0KLSAgICAgICAgaWYgKHFmbGFncyAmIGZsYWdzKSB7Ci0gICAgICAg ICAgICB1aW50MzJfdCBzY29yZSA9IGF2X3BvcGNvdW50KHFmbGFncykgKyBxZltpXS5xdWV1ZUZh bWlseVByb3BlcnRpZXMudGltZXN0YW1wVmFsaWRCaXRzOwotICAgICAgICAgICAgaWYgKHNjb3Jl IDwgbWluX3Njb3JlKSB7Ci0gICAgICAgICAgICAgICAgaW5kZXggPSBpOwotICAgICAgICAgICAg ICAgIG1pbl9zY29yZSA9IHNjb3JlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQot Ci0gICAgaWYgKGluZGV4ID4gLTEpCi0gICAgICAgIHFmW2luZGV4XS5xdWV1ZUZhbWlseVByb3Bl cnRpZXMudGltZXN0YW1wVmFsaWRCaXRzKys7Ci0KLSAgICByZXR1cm4gaW5kZXg7Ci19Ci0KLXN0 YXRpYyBpbmxpbmUgaW50IHBpY2tfdmlkZW9fcXVldWVfZmFtaWx5KFZrUXVldWVGYW1pbHlQcm9w ZXJ0aWVzMiAqcWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBW a1F1ZXVlRmFtaWx5VmlkZW9Qcm9wZXJ0aWVzS0hSICpxZl92aWQsIHVpbnQzMl90IG51bV9xZiwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZrVmlkZW9Db2RlY09w ZXJhdGlvbkZsYWdCaXRzS0hSIGZsYWdzKQotewotICAgIGludCBpbmRleCA9IC0xOwotICAgIHVp bnQzMl90IG1pbl9zY29yZSA9IFVJTlQzMl9NQVg7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8 IG51bV9xZjsgaSsrKSB7Ci0gICAgICAgIGNvbnN0IFZrUXVldWVGbGFnQml0cyBxZmxhZ3MgPSBx ZltpXS5xdWV1ZUZhbWlseVByb3BlcnRpZXMucXVldWVGbGFnczsKLSAgICAgICAgY29uc3QgVmtR dWV1ZUZsYWdCaXRzIHZmbGFncyA9IHFmX3ZpZFtpXS52aWRlb0NvZGVjT3BlcmF0aW9uczsKLQot ICAgICAgICBpZiAoIShxZmxhZ3MgJiAoVktfUVVFVUVfVklERU9fRU5DT0RFX0JJVF9LSFIgfCBW S19RVUVVRV9WSURFT19ERUNPREVfQklUX0tIUikpKQotICAgICAgICAgICAgY29udGludWU7Ci0K LSAgICAgICAgaWYgKHZmbGFncyAmIGZsYWdzKSB7Ci0gICAgICAgICAgICB1aW50MzJfdCBzY29y ZSA9IGF2X3BvcGNvdW50KHZmbGFncykgKyBxZltpXS5xdWV1ZUZhbWlseVByb3BlcnRpZXMudGlt ZXN0YW1wVmFsaWRCaXRzOwotICAgICAgICAgICAgaWYgKHNjb3JlIDwgbWluX3Njb3JlKSB7Ci0g ICAgICAgICAgICAgICAgaW5kZXggPSBpOwotICAgICAgICAgICAgICAgIG1pbl9zY29yZSA9IHNj b3JlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGluZGV4ID4g LTEpCi0gICAgICAgIHFmW2luZGV4XS5xdWV1ZUZhbWlseVByb3BlcnRpZXMudGltZXN0YW1wVmFs aWRCaXRzKys7Ci0KLSAgICByZXR1cm4gaW5kZXg7Ci19Ci0KLXN0YXRpYyBpbnQgc2V0dXBfcXVl dWVfZmFtaWxpZXMoQVZIV0RldmljZUNvbnRleHQgKmN0eCwgVmtEZXZpY2VDcmVhdGVJbmZvICpj ZCkKLXsKLSAgICB1aW50MzJfdCBudW07Ci0gICAgVnVsa2FuRGV2aWNlUHJpdiAqcCA9IGN0eC0+ aHdjdHg7Ci0gICAgQVZWdWxrYW5EZXZpY2VDb250ZXh0ICpod2N0eCA9ICZwLT5wOwotICAgIEZG VnVsa2FuRnVuY3Rpb25zICp2ayA9ICZwLT52a2N0eC52a2ZuOwotCi0gICAgVmtRdWV1ZUZhbWls eVByb3BlcnRpZXMyICpxZiA9IE5VTEw7Ci0gICAgVmtRdWV1ZUZhbWlseVZpZGVvUHJvcGVydGll c0tIUiAqcWZfdmlkID0gTlVMTDsKLQotICAgIC8qIEZpcnN0IGdldCB0aGUgbnVtYmVyIG9mIHF1 ZXVlIGZhbWlsaWVzICovCi0gICAgdmstPkdldFBoeXNpY2FsRGV2aWNlUXVldWVGYW1pbHlQcm9w ZXJ0aWVzKGh3Y3R4LT5waHlzX2RldiwgJm51bSwgTlVMTCk7Ci0gICAgaWYgKCFudW0pIHsKLSAg ICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiRmFpbGVkIHRvIGdldCBxdWV1ZXMhXG4i KTsKLSAgICAgICAgcmV0dXJuIEFWRVJST1JfRVhURVJOQUw7Ci0gICAgfQotCi0gICAgLyogVGhl biBhbGxvY2F0ZSBtZW1vcnkgKi8KLSAgICBxZiA9IGF2X21hbGxvY19hcnJheShudW0sIHNpemVv ZihWa1F1ZXVlRmFtaWx5UHJvcGVydGllczIpKTsKLSAgICBpZiAoIXFmKQotICAgICAgICByZXR1 cm4gQVZFUlJPUihFTk9NRU0pOwotCi0gICAgcWZfdmlkID0gYXZfbWFsbG9jX2FycmF5KG51bSwg c2l6ZW9mKFZrUXVldWVGYW1pbHlWaWRlb1Byb3BlcnRpZXNLSFIpKTsKLSAgICBpZiAoIXFmX3Zp ZCkKLSAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKLQotICAgIGZvciAodWludDMyX3Qg aSA9IDA7IGkgPCBudW07IGkrKykgewotICAgICAgICBxZl92aWRbaV0gPSAoVmtRdWV1ZUZhbWls eVZpZGVvUHJvcGVydGllc0tIUikgewotICAgICAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJF X1RZUEVfUVVFVUVfRkFNSUxZX1ZJREVPX1BST1BFUlRJRVNfS0hSLAotICAgICAgICB9OwotICAg ICAgICBxZltpXSA9IChWa1F1ZXVlRmFtaWx5UHJvcGVydGllczIpIHsKLSAgICAgICAgICAgIC5z VHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX1FVRVVFX0ZBTUlMWV9QUk9QRVJUSUVTXzIsCi0gICAg ICAgICAgICAucE5leHQgPSBwLT52a2N0eC5leHRlbnNpb25zICYgRkZfVktfRVhUX1ZJREVPX1FV RVVFID8gJnFmX3ZpZFtpXSA6IE5VTEwsCi0gICAgICAgIH07Ci0gICAgfQotCi0gICAgLyogRmlu YWxseSByZXRyaWV2ZSB0aGUgcXVldWUgZmFtaWxpZXMgKi8KLSAgICB2ay0+R2V0UGh5c2ljYWxE ZXZpY2VRdWV1ZUZhbWlseVByb3BlcnRpZXMyKGh3Y3R4LT5waHlzX2RldiwgJm51bSwgcWYpOwot Ci0gICAgYXZfbG9nKGN0eCwgQVZfTE9HX1ZFUkJPU0UsICJRdWV1ZSBmYW1pbGllczpcbiIpOwot ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtOyBpKyspIHsKLSAgICAgICAgYXZfbG9nKGN0eCwg QVZfTE9HX1ZFUkJPU0UsICIgICAgJWk6JXMlcyVzJXMlcyVzJXMlcyAocXVldWVzOiAlaSlcbiIs IGksCi0gICAgICAgICAgICAgICAoKHFmW2ldLnF1ZXVlRmFtaWx5UHJvcGVydGllcy5xdWV1ZUZs YWdzKSAmIFZLX1FVRVVFX0dSQVBISUNTX0JJVCkgPyAiIGdyYXBoaWNzIiA6ICIiLAotICAgICAg ICAgICAgICAgKChxZltpXS5xdWV1ZUZhbWlseVByb3BlcnRpZXMucXVldWVGbGFncykgJiBWS19R VUVVRV9DT01QVVRFX0JJVCkgPyAiIGNvbXB1dGUiIDogIiIsCi0gICAgICAgICAgICAgICAoKHFm W2ldLnF1ZXVlRmFtaWx5UHJvcGVydGllcy5xdWV1ZUZsYWdzKSAmIFZLX1FVRVVFX1RSQU5TRkVS X0JJVCkgPyAiIHRyYW5zZmVyIiA6ICIiLAotICAgICAgICAgICAgICAgKChxZltpXS5xdWV1ZUZh bWlseVByb3BlcnRpZXMucXVldWVGbGFncykgJiBWS19RVUVVRV9WSURFT19FTkNPREVfQklUX0tI UikgPyAiIGVuY29kZSIgOiAiIiwKLSAgICAgICAgICAgICAgICgocWZbaV0ucXVldWVGYW1pbHlQ cm9wZXJ0aWVzLnF1ZXVlRmxhZ3MpICYgVktfUVVFVUVfVklERU9fREVDT0RFX0JJVF9LSFIpID8g IiBkZWNvZGUiIDogIiIsCi0gICAgICAgICAgICAgICAoKHFmW2ldLnF1ZXVlRmFtaWx5UHJvcGVy dGllcy5xdWV1ZUZsYWdzKSAmIFZLX1FVRVVFX1NQQVJTRV9CSU5ESU5HX0JJVCkgPyAiIHNwYXJz ZSIgOiAiIiwKLSAgICAgICAgICAgICAgICgocWZbaV0ucXVldWVGYW1pbHlQcm9wZXJ0aWVzLnF1 ZXVlRmxhZ3MpICYgVktfUVVFVUVfT1BUSUNBTF9GTE9XX0JJVF9OVikgPyAiIG9wdGljYWxfZmxv dyIgOiAiIiwKLSAgICAgICAgICAgICAgICgocWZbaV0ucXVldWVGYW1pbHlQcm9wZXJ0aWVzLnF1 ZXVlRmxhZ3MpICYgVktfUVVFVUVfUFJPVEVDVEVEX0JJVCkgPyAiIHByb3RlY3RlZCIgOiAiIiwK LSAgICAgICAgICAgICAgIHFmW2ldLnF1ZXVlRmFtaWx5UHJvcGVydGllcy5xdWV1ZUNvdW50KTsK LQotICAgICAgICAvKiBXZSB1c2UgdGhpcyBmaWVsZCB0byBrZWVwIGEgc2NvcmUgb2YgaG93IG1h bnkgdGltZXMgd2UndmUgdXNlZCB0aGF0Ci0gICAgICAgICAqIHF1ZXVlIGZhbWlseSBpbiBvcmRl ciB0byBtYWtlIGJldHRlciBjaG9pY2VzLiAqLwotICAgICAgICBxZltpXS5xdWV1ZUZhbWlseVBy b3BlcnRpZXMudGltZXN0YW1wVmFsaWRCaXRzID0gMDsKLSAgICB9Ci0KLSAgICBod2N0eC0+bmJf cWYgPSAwOwotCi0gICAgLyogUGljayBlYWNoIHF1ZXVlIGZhbWlseSB0byB1c2UuICovCi0jZGVm aW5lIFBJQ0tfUUYodHlwZSwgdmlkX29wKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAotICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgdWludDMyX3QgaTsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg ICAgIHVpbnQzMl90IGlkeDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgaWYgKHZpZF9vcCkgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg ICAgICAgICBpZHggPSBwaWNrX3ZpZGVvX3F1ZXVlX2ZhbWlseShxZiwgcWZfdmlkLCBudW0sIHZp ZF9vcCk7ICAgICAgXAotICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIGlkeCA9IHBpY2tf cXVldWVfZmFtaWx5KHFmLCBudW0sIHR5cGUpOyAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAotICAgICAgICBpZiAoaWR4ID09IC0xKSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIGNvbnRpbnVlOyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaHdjdHgtPm5iX3FmOyBpKysp IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIGlmIChod2N0eC0+ cWZbaV0uaWR4ID09IGlkeCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg ICAgICAgICAgICAgaHdjdHgtPnFmW2ldLmZsYWdzIHw9IHR5cGU7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIGh3Y3R4LT5xZltpXS52aWRlb19jYXBzIHw9 IHZpZF9vcDsgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICBicmVhazsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg ICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAotICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgaWYgKGkgPT0gaHdjdHgt Pm5iX3FmKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg ICAgICAgICBod2N0eC0+cWZbaV0uaWR4ID0gaWR4OyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAotICAgICAgICAgICAgaHdjdHgtPnFmW2ldLm51bSA9IHFmW2lkeF0ucXVl dWVGYW1pbHlQcm9wZXJ0aWVzLnF1ZXVlQ291bnQ7IFwKLSAgICAgICAgICAgIGlmIChwLT5saW1p dF9xdWV1ZXMgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg ICAgICAgICAgICAgcC0+ZHByb3BzLmRyaXZlcklEID09IFZLX0RSSVZFUl9JRF9OVklESUFfUFJP UFJJRVRBUlkpIHsgXAotICAgICAgICAgICAgICAgIGludCBtYXggPSBwLT5saW1pdF9xdWV1ZXM7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICBpZiAodHlw ZSA9PSBWS19RVUVVRV9HUkFQSElDU19CSVQpICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg ICAgICAgICAgICAgICAgIGh3Y3R4LT5xZltpXS5udW0gPSBGRk1JTihod2N0eC0+cWZbaV0ubnVt LCAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbWF4ID8gbWF4IDogMSk7ICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICBlbHNlIGlm IChtYXgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg ICAgICAgICAgICAgICAgIGh3Y3R4LT5xZltpXS5udW0gPSBGRk1JTihod2N0eC0+cWZbaV0ubnVt LCBtYXgpOyAgICAgXAotICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIGh3Y3R4LT5xZltp XS5mbGFncyA9IHR5cGU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg ICAgICAgICBod2N0eC0+cWZbaV0udmlkZW9fY2FwcyA9IHZpZF9vcDsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAotICAgICAgICAgICAgaHdjdHgtPm5iX3FmKys7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgfSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg fSB3aGlsZSAoMCkKLQotICAgIFBJQ0tfUUYoVktfUVVFVUVfR1JBUEhJQ1NfQklULCBWS19WSURF T19DT0RFQ19PUEVSQVRJT05fTk9ORV9LSFIpOwotICAgIFBJQ0tfUUYoVktfUVVFVUVfQ09NUFVU RV9CSVQsIFZLX1ZJREVPX0NPREVDX09QRVJBVElPTl9OT05FX0tIUik7Ci0gICAgUElDS19RRihW S19RVUVVRV9UUkFOU0ZFUl9CSVQsIFZLX1ZJREVPX0NPREVDX09QRVJBVElPTl9OT05FX0tIUik7 Ci0KLSAgICBQSUNLX1FGKFZLX1FVRVVFX1ZJREVPX0VOQ09ERV9CSVRfS0hSLCBWS19WSURFT19D T0RFQ19PUEVSQVRJT05fRU5DT0RFX0gyNjRfQklUX0tIUik7Ci0gICAgUElDS19RRihWS19RVUVV RV9WSURFT19ERUNPREVfQklUX0tIUiwgVktfVklERU9fQ09ERUNfT1BFUkFUSU9OX0RFQ09ERV9I MjY0X0JJVF9LSFIpOwotCi0gICAgUElDS19RRihWS19RVUVVRV9WSURFT19FTkNPREVfQklUX0tI UiwgVktfVklERU9fQ09ERUNfT1BFUkFUSU9OX0VOQ09ERV9IMjY1X0JJVF9LSFIpOwotICAgIFBJ Q0tfUUYoVktfUVVFVUVfVklERU9fREVDT0RFX0JJVF9LSFIsIFZLX1ZJREVPX0NPREVDX09QRVJB VElPTl9ERUNPREVfSDI2NV9CSVRfS0hSKTsKLQotI2lmZGVmIFZLX0tIUl92aWRlb19kZWNvZGVf dnA5Ci0gICAgUElDS19RRihWS19RVUVVRV9WSURFT19ERUNPREVfQklUX0tIUiwgVktfVklERU9f Q09ERUNfT1BFUkFUSU9OX0RFQ09ERV9WUDlfQklUX0tIUik7Ci0jZW5kaWYKLQotI2lmZGVmIFZL X0tIUl92aWRlb19lbmNvZGVfYXYxCi0gICAgUElDS19RRihWS19RVUVVRV9WSURFT19FTkNPREVf QklUX0tIUiwgVktfVklERU9fQ09ERUNfT1BFUkFUSU9OX0VOQ09ERV9BVjFfQklUX0tIUik7Ci0j ZW5kaWYKLSAgICBQSUNLX1FGKFZLX1FVRVVFX1ZJREVPX0RFQ09ERV9CSVRfS0hSLCBWS19WSURF T19DT0RFQ19PUEVSQVRJT05fREVDT0RFX0FWMV9CSVRfS0hSKTsKLQotICAgIGF2X2ZyZWUocWYp OwotICAgIGF2X2ZyZWUocWZfdmlkKTsKLQotI3VuZGVmIFBJQ0tfUUYKLQotICAgIGNkLT5wUXVl dWVDcmVhdGVJbmZvcyA9IGF2X21hbGxvY19hcnJheShod2N0eC0+bmJfcWYsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihWa0RldmljZVF1ZXVlQ3Jl YXRlSW5mbykpOwotICAgIGlmICghY2QtPnBRdWV1ZUNyZWF0ZUluZm9zKQotICAgICAgICByZXR1 cm4gQVZFUlJPUihFTk9NRU0pOwotCi0gICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGh3Y3R4 LT5uYl9xZjsgaSsrKSB7Ci0gICAgICAgIGludCBkdXAgPSAwOwotICAgICAgICBmbG9hdCAqd2Vp Z2h0cyA9IE5VTEw7Ci0gICAgICAgIFZrRGV2aWNlUXVldWVDcmVhdGVJbmZvICpwYzsKLSAgICAg ICAgZm9yICh1aW50MzJfdCBqID0gMDsgaiA8IGNkLT5xdWV1ZUNyZWF0ZUluZm9Db3VudDsgaisr KSB7Ci0gICAgICAgICAgICBpZiAoaHdjdHgtPnFmW2ldLmlkeCA9PSBjZC0+cFF1ZXVlQ3JlYXRl SW5mb3Nbal0ucXVldWVGYW1pbHlJbmRleCkgewotICAgICAgICAgICAgICAgIGR1cCA9IDE7Ci0g ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAg aWYgKGR1cCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIHdlaWdodHMgPSBhdl9t YWxsb2NfYXJyYXkoaHdjdHgtPnFmW2ldLm51bSwgc2l6ZW9mKGZsb2F0KSk7Ci0gICAgICAgIGlm ICghd2VpZ2h0cykgewotICAgICAgICAgICAgZm9yICh1aW50MzJfdCBqID0gMDsgaiA8IGNkLT5x dWV1ZUNyZWF0ZUluZm9Db3VudDsgaisrKQotICAgICAgICAgICAgICAgIGF2X2ZyZWUoKHZvaWQg KiljZC0+cFF1ZXVlQ3JlYXRlSW5mb3NbaV0ucFF1ZXVlUHJpb3JpdGllcyk7Ci0gICAgICAgICAg ICBhdl9mcmVlKCh2b2lkICopY2QtPnBRdWV1ZUNyZWF0ZUluZm9zKTsKLSAgICAgICAgICAgIHJl dHVybiBBVkVSUk9SKEVOT01FTSk7Ci0gICAgICAgIH0KLQotICAgICAgICBmb3IgKHVpbnQzMl90 IGogPSAwOyBqIDwgaHdjdHgtPnFmW2ldLm51bTsgaisrKQotICAgICAgICAgICAgd2VpZ2h0c1tq XSA9IDEuMDsKLQotICAgICAgICBwYyA9IChWa0RldmljZVF1ZXVlQ3JlYXRlSW5mbyAqKWNkLT5w UXVldWVDcmVhdGVJbmZvczsKLSAgICAgICAgcGNbY2QtPnF1ZXVlQ3JlYXRlSW5mb0NvdW50Kytd ID0gKFZrRGV2aWNlUXVldWVDcmVhdGVJbmZvKSB7Ci0gICAgICAgICAgICAuc1R5cGUgPSBWS19T VFJVQ1RVUkVfVFlQRV9ERVZJQ0VfUVVFVUVfQ1JFQVRFX0lORk8sCi0gICAgICAgICAgICAucXVl dWVGYW1pbHlJbmRleCA9IGh3Y3R4LT5xZltpXS5pZHgsCi0gICAgICAgICAgICAucXVldWVDb3Vu dCA9IGh3Y3R4LT5xZltpXS5udW0sCi0gICAgICAgICAgICAucFF1ZXVlUHJpb3JpdGllcyA9IHdl aWdodHMsCi0gICAgICAgIH07Ci0gICAgfQotCi0jaWYgRkZfQVBJX1ZVTEtBTl9GSVhFRF9RVUVV RVMKLUZGX0RJU0FCTEVfREVQUkVDQVRJT05fV0FSTklOR1MKLSAgICAvKiBTZXR1cCBkZXByZWNh dGVkIGZpZWxkcyAqLwotICAgIGh3Y3R4LT5xdWV1ZV9mYW1pbHlfaW5kZXggICAgICAgID0gLTE7 Ci0gICAgaHdjdHgtPnF1ZXVlX2ZhbWlseV9jb21wX2luZGV4ICAgPSAtMTsKLSAgICBod2N0eC0+ cXVldWVfZmFtaWx5X3R4X2luZGV4ICAgICA9IC0xOwotICAgIGh3Y3R4LT5xdWV1ZV9mYW1pbHlf ZW5jb2RlX2luZGV4ID0gLTE7Ci0gICAgaHdjdHgtPnF1ZXVlX2ZhbWlseV9kZWNvZGVfaW5kZXgg PSAtMTsKLQotI2RlZmluZSBTRVRfT0xEX1FGKGZpZWxkLCBuYl9maWVsZCwgdHlwZSkgICAgICAg ICAgICAgXAotICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAotICAgICAgICBpZiAoZmllbGQgPCAwICYmIGh3Y3R4LT5xZltpXS5mbGFncyAmIHR5 cGUpIHsgXAotICAgICAgICAgICAgZmllbGQgPSBod2N0eC0+cWZbaV0uaWR4OyAgICAgICAgICAg ICAgICAgXAotICAgICAgICAgICAgbmJfZmllbGQgPSBod2N0eC0+cWZbaV0ubnVtOyAgICAgICAg ICAgICAgXAotICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAotICAgIH0gd2hpbGUgKDApCi0KLSAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwg aHdjdHgtPm5iX3FmOyBpKyspIHsKLSAgICAgICAgU0VUX09MRF9RRihod2N0eC0+cXVldWVfZmFt aWx5X2luZGV4LCBod2N0eC0+bmJfZ3JhcGhpY3NfcXVldWVzLCBWS19RVUVVRV9HUkFQSElDU19C SVQpOwotICAgICAgICBTRVRfT0xEX1FGKGh3Y3R4LT5xdWV1ZV9mYW1pbHlfY29tcF9pbmRleCwg aHdjdHgtPm5iX2NvbXBfcXVldWVzLCBWS19RVUVVRV9DT01QVVRFX0JJVCk7Ci0gICAgICAgIFNF VF9PTERfUUYoaHdjdHgtPnF1ZXVlX2ZhbWlseV90eF9pbmRleCwgaHdjdHgtPm5iX3R4X3F1ZXVl cywgVktfUVVFVUVfVFJBTlNGRVJfQklUKTsKLSAgICAgICAgU0VUX09MRF9RRihod2N0eC0+cXVl dWVfZmFtaWx5X2VuY29kZV9pbmRleCwgaHdjdHgtPm5iX2VuY29kZV9xdWV1ZXMsIFZLX1FVRVVF X1ZJREVPX0VOQ09ERV9CSVRfS0hSKTsKLSAgICAgICAgU0VUX09MRF9RRihod2N0eC0+cXVldWVf ZmFtaWx5X2RlY29kZV9pbmRleCwgaHdjdHgtPm5iX2RlY29kZV9xdWV1ZXMsIFZLX1FVRVVFX1ZJ REVPX0RFQ09ERV9CSVRfS0hSKTsKLSAgICB9Ci0KLSN1bmRlZiBTRVRfT0xEX1FGCi1GRl9FTkFC TEVfREVQUkVDQVRJT05fV0FSTklOR1MKLSNlbmRpZgotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLS8q IE9ubHkgcmVzb3VyY2VzIGNyZWF0ZWQgYnkgdnVsa2FuX2RldmljZV9jcmVhdGUgc2hvdWxkIGJl IHJlbGVhc2VkIGhlcmUsCi0gKiByZXNvdXJjZXMgY3JlYXRlZCBieSB2dWxrYW5fZGV2aWNlX2lu aXQgc2hvdWxkIGJlIHJlbGVhc2VkIGJ5Ci0gKiB2dWxrYW5fZGV2aWNlX3VuaW5pdCwgdG8gbWFr ZSBzdXJlIHdlIGRvbid0IGZyZWUgdXNlciBwcm92aWRlZCByZXNvdXJjZXMsCi0gKiBhbmQgdGhl cmUgaXMgbm8gbGVhay4KLSAqLwotc3RhdGljIHZvaWQgdnVsa2FuX2RldmljZV9mcmVlKEFWSFdE ZXZpY2VDb250ZXh0ICpjdHgpCi17Ci0gICAgVnVsa2FuRGV2aWNlUHJpdiAqcCA9IGN0eC0+aHdj dHg7Ci0gICAgQVZWdWxrYW5EZXZpY2VDb250ZXh0ICpod2N0eCA9ICZwLT5wOwotICAgIEZGVnVs a2FuRnVuY3Rpb25zICp2ayA9ICZwLT52a2N0eC52a2ZuOwotCi0gICAgaWYgKGh3Y3R4LT5hY3Rf ZGV2KQotICAgICAgICB2ay0+RGVzdHJveURldmljZShod2N0eC0+YWN0X2RldiwgaHdjdHgtPmFs bG9jKTsKLQotICAgIGlmIChwLT5kZWJ1Z19jdHgpCi0gICAgICAgIHZrLT5EZXN0cm95RGVidWdV dGlsc01lc3NlbmdlckVYVChod2N0eC0+aW5zdCwgcC0+ZGVidWdfY3R4LAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHdjdHgtPmFsbG9jKTsKLQotICAgIGlmICho d2N0eC0+aW5zdCkKLSAgICAgICAgdmstPkRlc3Ryb3lJbnN0YW5jZShod2N0eC0+aW5zdCwgaHdj dHgtPmFsbG9jKTsKLQotICAgIGlmIChwLT5saWJ2dWxrYW4pCi0gICAgICAgIGRsY2xvc2UocC0+ bGlidnVsa2FuKTsKLQotICAgIFJFTEVBU0VfUFJPUFMoaHdjdHgtPmVuYWJsZWRfaW5zdF9leHRl bnNpb25zLCBod2N0eC0+bmJfZW5hYmxlZF9pbnN0X2V4dGVuc2lvbnMpOwotICAgIFJFTEVBU0Vf UFJPUFMoaHdjdHgtPmVuYWJsZWRfZGV2X2V4dGVuc2lvbnMsIGh3Y3R4LT5uYl9lbmFibGVkX2Rl dl9leHRlbnNpb25zKTsKLX0KLQotc3RhdGljIHZvaWQgdnVsa2FuX2RldmljZV91bmluaXQoQVZI V0RldmljZUNvbnRleHQgKmN0eCkKLXsKLSAgICBWdWxrYW5EZXZpY2VQcml2ICpwID0gY3R4LT5o d2N0eDsKLQotICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBwLT5uYl90b3RfcWZzOyBpKysp IHsKLSAgICAgICAgcHRocmVhZF9tdXRleF9kZXN0cm95KHAtPnFmX211dGV4W2ldKTsKLSAgICAg ICAgYXZfZnJlZXAoJnAtPnFmX211dGV4W2ldKTsKLSAgICB9Ci0gICAgYXZfZnJlZXAoJnAtPnFm X211dGV4KTsKLQotICAgIGZmX3ZrX3VuaW5pdCgmcC0+dmtjdHgpOwotfQotCi1zdGF0aWMgaW50 IHZ1bGthbl9kZXZpY2VfaGFzX3JlYmFyKEFWSFdEZXZpY2VDb250ZXh0ICpjdHgpCi17Ci0gICAg VnVsa2FuRGV2aWNlUHJpdiAqcCA9IGN0eC0+aHdjdHg7Ci0gICAgVmtEZXZpY2VTaXplIG1heF92 cmFtID0gMCwgbWF4X3Zpc2libGVfdnJhbSA9IDA7Ci0KLSAgICAvKiBHZXQgZGV2aWNlIG1lbW9y eSBwcm9wZXJ0aWVzICovCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwLT5tcHJvcHMubWVtb3J5 VHlwZUNvdW50OyBpKyspIHsKLSAgICAgICAgY29uc3QgVmtNZW1vcnlUeXBlIHR5cGUgPSBwLT5t cHJvcHMubWVtb3J5VHlwZXNbaV07Ci0gICAgICAgIGNvbnN0IFZrTWVtb3J5SGVhcCBoZWFwID0g cC0+bXByb3BzLm1lbW9yeUhlYXBzW3R5cGUuaGVhcEluZGV4XTsKLSAgICAgICAgaWYgKCEodHlw ZS5wcm9wZXJ0eUZsYWdzICYgVktfTUVNT1JZX1BST1BFUlRZX0RFVklDRV9MT0NBTF9CSVQpKQot ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIG1heF92cmFtID0gRkZNQVgobWF4X3ZyYW0s IGhlYXAuc2l6ZSk7Ci0gICAgICAgIGlmICh0eXBlLnByb3BlcnR5RmxhZ3MgJiBWS19NRU1PUllf UFJPUEVSVFlfSE9TVF9WSVNJQkxFX0JJVCkKLSAgICAgICAgICAgIG1heF92aXNpYmxlX3ZyYW0g PSBGRk1BWChtYXhfdmlzaWJsZV92cmFtLCBoZWFwLnNpemUpOwotICAgIH0KLQotICAgIHJldHVy biBtYXhfdnJhbSAtIG1heF92aXNpYmxlX3ZyYW0gPCAxMDI0OyAvKiAxIGtCIHRvbGVyYW5jZSAq LwotfQotCi1zdGF0aWMgaW50IHZ1bGthbl9kZXZpY2VfY3JlYXRlX2ludGVybmFsKEFWSFdEZXZp Y2VDb250ZXh0ICpjdHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFZ1bGthbkRldmljZVNlbGVjdGlvbiAqZGV2X3NlbGVjdCwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaW50IGRpc2FibGVfbXVsdGlwbGFuZSwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVZEaWN0aW9uYXJ5ICpvcHRzLCBpbnQgZmxh Z3MpCi17Ci0gICAgaW50IGVyciA9IDA7Ci0gICAgVmtSZXN1bHQgcmV0OwotICAgIEFWRGljdGlv bmFyeUVudHJ5ICpvcHRfZDsKLSAgICBWdWxrYW5EZXZpY2VQcml2ICpwID0gY3R4LT5od2N0eDsK LSAgICBBVlZ1bGthbkRldmljZUNvbnRleHQgKmh3Y3R4ID0gJnAtPnA7Ci0gICAgRkZWdWxrYW5G dW5jdGlvbnMgKnZrID0gJnAtPnZrY3R4LnZrZm47Ci0gICAgZW51bSBGRlZ1bGthbkRlYnVnTW9k ZSBkZWJ1Z19tb2RlID0gRkZfVlVMS0FOX0RFQlVHX05PTkU7Ci0gICAgVnVsa2FuRGV2aWNlRmVh dHVyZXMgc3VwcG9ydGVkX2ZlYXRzID0geyAwIH07Ci0gICAgVmtEZXZpY2VDcmVhdGVJbmZvIGRl dl9pbmZvID0gewotICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9ERVZJQ0VfQ1JF QVRFX0lORk8sCi0gICAgfTsKLQotICAgIC8qIENyZWF0ZSBhbiBpbnN0YW5jZSBpZiBub3QgZ2l2 ZW4gb25lICovCi0gICAgaWYgKChlcnIgPSBjcmVhdGVfaW5zdGFuY2UoY3R4LCBvcHRzLCAmZGVi dWdfbW9kZSkpKQotICAgICAgICBnb3RvIGVuZDsKLQotICAgIC8qIEZpbmQgYSBwaHlzaWNhbCBk ZXZpY2UgKGlmIG5vdCBnaXZlbiBvbmUpICovCi0gICAgaWYgKChlcnIgPSBmaW5kX2RldmljZShj dHgsIGRldl9zZWxlY3QpKSkKLSAgICAgICAgZ290byBlbmQ7Ci0KLSAgICAvKiBGaW5kIGFuZCBl bmFibGUgZXh0ZW5zaW9ucyBmb3IgdGhlIHBoeXNpY2FsIGRldmljZSAqLwotICAgIGlmICgoZXJy ID0gY2hlY2tfZXh0ZW5zaW9ucyhjdHgsIDEsIG9wdHMsICZkZXZfaW5mby5wcEVuYWJsZWRFeHRl bnNpb25OYW1lcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRldl9pbmZvLmVu YWJsZWRFeHRlbnNpb25Db3VudCwgZGVidWdfbW9kZSkpKSB7Ci0gICAgICAgIGZvciAoaW50IGkg PSAwOyBpIDwgZGV2X2luZm8ucXVldWVDcmVhdGVJbmZvQ291bnQ7IGkrKykKLSAgICAgICAgICAg IGF2X2ZyZWUoKHZvaWQgKilkZXZfaW5mby5wUXVldWVDcmVhdGVJbmZvc1tpXS5wUXVldWVQcmlv cml0aWVzKTsKLSAgICAgICAgYXZfZnJlZSgodm9pZCAqKWRldl9pbmZvLnBRdWV1ZUNyZWF0ZUlu Zm9zKTsKLSAgICAgICAgZ290byBlbmQ7Ci0gICAgfQotCi0gICAgLyogR2V0IHN1cHBvcnRlZCBt ZW1vcnkgdHlwZXMgKi8KLSAgICB2ay0+R2V0UGh5c2ljYWxEZXZpY2VNZW1vcnlQcm9wZXJ0aWVz KGh3Y3R4LT5waHlzX2RldiwgJnAtPm1wcm9wcyk7Ci0KLSAgICAvKiBHZXQgYWxsIHN1cHBvcnRl ZCBmZWF0dXJlcyBmb3IgdGhlIHBoeXNpY2FsIGRldmljZSAqLwotICAgIGRldmljZV9mZWF0dXJl c19pbml0KGN0eCwgJnN1cHBvcnRlZF9mZWF0cyk7Ci0gICAgdmstPkdldFBoeXNpY2FsRGV2aWNl RmVhdHVyZXMyKGh3Y3R4LT5waHlzX2RldiwgJnN1cHBvcnRlZF9mZWF0cy5kZXZpY2UpOwotCi0g ICAgLyogQ29weSBhbGwgbmVlZGVkIGZlYXR1cmVzIGZyb20gdGhvc2Ugc3VwcG9ydGVkIGFuZCBh Y3RpdmF0ZSB0aGVtICovCi0gICAgZGV2aWNlX2ZlYXR1cmVzX2luaXQoY3R4LCAmcC0+ZmVhdHMp OwotICAgIGRldmljZV9mZWF0dXJlc19jb3B5X25lZWRlZCgmcC0+ZmVhdHMsICZzdXBwb3J0ZWRf ZmVhdHMpOwotICAgIGRldl9pbmZvLnBOZXh0ID0gcC0+ZmVhdHMuZGV2aWNlLnBOZXh0OwotICAg IGRldl9pbmZvLnBFbmFibGVkRmVhdHVyZXMgPSAmcC0+ZmVhdHMuZGV2aWNlLmZlYXR1cmVzOwot Ci0gICAgLyogU2V0dXAgZW5hYmxlZCBxdWV1ZSBmYW1pbGllcyAqLwotICAgIGlmICgoZXJyID0g c2V0dXBfcXVldWVfZmFtaWxpZXMoY3R4LCAmZGV2X2luZm8pKSkKLSAgICAgICAgZ290byBlbmQ7 Ci0KLSAgICAvKiBGaW5hbGx5IGNyZWF0ZSB0aGUgZGV2aWNlICovCi0gICAgcmV0ID0gdmstPkNy ZWF0ZURldmljZShod2N0eC0+cGh5c19kZXYsICZkZXZfaW5mbywgaHdjdHgtPmFsbG9jLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgJmh3Y3R4LT5hY3RfZGV2KTsKLQotICAgIGZvciAoaW50 IGkgPSAwOyBpIDwgZGV2X2luZm8ucXVldWVDcmVhdGVJbmZvQ291bnQ7IGkrKykKLSAgICAgICAg YXZfZnJlZSgodm9pZCAqKWRldl9pbmZvLnBRdWV1ZUNyZWF0ZUluZm9zW2ldLnBRdWV1ZVByaW9y aXRpZXMpOwotICAgIGF2X2ZyZWUoKHZvaWQgKilkZXZfaW5mby5wUXVldWVDcmVhdGVJbmZvcyk7 Ci0KLSAgICBpZiAocmV0ICE9IFZLX1NVQ0NFU1MpIHsKLSAgICAgICAgYXZfbG9nKGN0eCwgQVZf TE9HX0VSUk9SLCAiRGV2aWNlIGNyZWF0aW9uIGZhaWx1cmU6ICVzXG4iLAotICAgICAgICAgICAg ICAgZmZfdmtfcmV0MnN0cihyZXQpKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZXZf aW5mby5lbmFibGVkRXh0ZW5zaW9uQ291bnQ7IGkrKykKLSAgICAgICAgICAgIGF2X2ZyZWUoKHZv aWQgKilkZXZfaW5mby5wcEVuYWJsZWRFeHRlbnNpb25OYW1lc1tpXSk7Ci0gICAgICAgIGF2X2Zy ZWUoKHZvaWQgKilkZXZfaW5mby5wcEVuYWJsZWRFeHRlbnNpb25OYW1lcyk7Ci0gICAgICAgIGVy ciA9IEFWRVJST1JfRVhURVJOQUw7Ci0gICAgICAgIGdvdG8gZW5kOwotICAgIH0KLQotICAgIC8q IFRpbGVkIGltYWdlcyBzZXR0aW5nLCB1c2UgdGhlbSBieSBkZWZhdWx0ICovCi0gICAgb3B0X2Qg PSBhdl9kaWN0X2dldChvcHRzLCAibGluZWFyX2ltYWdlcyIsIE5VTEwsIDApOwotICAgIGlmIChv cHRfZCkKLSAgICAgICAgcC0+dXNlX2xpbmVhcl9pbWFnZXMgPSBzdHJ0b2wob3B0X2QtPnZhbHVl LCBOVUxMLCAxMCk7Ci0KLSAgICAvKiBMaW1pdCBxdWV1ZXMgdG8gYSBnaXZlbiBudW1iZXIgaWYg bmVlZGVkICovCi0gICAgb3B0X2QgPSBhdl9kaWN0X2dldChvcHRzLCAibGltaXRfcXVldWVzIiwg TlVMTCwgMCk7Ci0gICAgaWYgKG9wdF9kKQotICAgICAgICBwLT5saW1pdF9xdWV1ZXMgPSBzdHJ0 b2wob3B0X2QtPnZhbHVlLCBOVUxMLCAxMCk7Ci0KLSAgICAvKiBUaGUgZGlzYWJsZV9tdWx0aXBs YW5lIGFyZ3VtZW50IHRha2VzIHByZWNlZGVudCBvdmVyIHRoZSBvcHRpb24gKi8KLSAgICBwLT5k aXNhYmxlX211bHRpcGxhbmUgPSBkaXNhYmxlX211bHRpcGxhbmU7Ci0gICAgaWYgKCFwLT5kaXNh YmxlX211bHRpcGxhbmUpIHsKLSAgICAgICAgb3B0X2QgPSBhdl9kaWN0X2dldChvcHRzLCAiZGlz YWJsZV9tdWx0aXBsYW5lIiwgTlVMTCwgMCk7Ci0gICAgICAgIGlmIChvcHRfZCkKLSAgICAgICAg ICAgIHAtPmRpc2FibGVfbXVsdGlwbGFuZSA9IHN0cnRvbChvcHRfZC0+dmFsdWUsIE5VTEwsIDEw KTsKLSAgICB9Ci0KLSAgICAvKiBEaXNhYmxlIGhvc3QgcG9pbnRlciBpbXBvcnRzIChieSBkZWZh dWx0IG9uIG52aWRpYSkgKi8KLSAgICBwLT5hdm9pZF9ob3N0X2ltcG9ydCA9IHAtPmRwcm9wcy5k cml2ZXJJRCA9PSBWS19EUklWRVJfSURfTlZJRElBX1BST1BSSUVUQVJZOwotICAgIG9wdF9kID0g YXZfZGljdF9nZXQob3B0cywgImF2b2lkX2hvc3RfaW1wb3J0IiwgTlVMTCwgMCk7Ci0gICAgaWYg KG9wdF9kKQotICAgICAgICBwLT5hdm9pZF9ob3N0X2ltcG9ydCA9IHN0cnRvbChvcHRfZC0+dmFs dWUsIE5VTEwsIDEwKTsKLQotICAgIC8qIFNldCB0aGUgcHVibGljIGRldmljZSBmZWF0dXJlIHN0 cnVjdCBhbmQgaXRzIHBOZXh0IGNoYWluICovCi0gICAgaHdjdHgtPmRldmljZV9mZWF0dXJlcyA9 IHAtPmZlYXRzLmRldmljZTsKLQotICAgIC8qIFNldCB0aGUgbGlzdCBvZiBhbGwgYWN0aXZlIGV4 dGVuc2lvbnMgKi8KLSAgICBod2N0eC0+ZW5hYmxlZF9kZXZfZXh0ZW5zaW9ucyA9IGRldl9pbmZv LnBwRW5hYmxlZEV4dGVuc2lvbk5hbWVzOwotICAgIGh3Y3R4LT5uYl9lbmFibGVkX2Rldl9leHRl bnNpb25zID0gZGV2X2luZm8uZW5hYmxlZEV4dGVuc2lvbkNvdW50OwotCi0gICAgLyogVGhlIGV4 dGVuc2lvbiBsaXN0cyBuZWVkIHRvIGJlIGZyZWVkICovCi0gICAgY3R4LT5mcmVlID0gdnVsa2Fu X2RldmljZV9mcmVlOwotCi1lbmQ6Ci0gICAgcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIHZvaWQg bG9ja19xdWV1ZShBVkhXRGV2aWNlQ29udGV4dCAqY3R4LCB1aW50MzJfdCBxdWV1ZV9mYW1pbHks IHVpbnQzMl90IGluZGV4KQotewotICAgIFZ1bGthbkRldmljZVByaXYgKnAgPSBjdHgtPmh3Y3R4 OwotICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmcC0+cWZfbXV0ZXhbcXVldWVfZmFtaWx5XVtpbmRl eF0pOwotfQotCi1zdGF0aWMgdm9pZCB1bmxvY2tfcXVldWUoQVZIV0RldmljZUNvbnRleHQgKmN0 eCwgdWludDMyX3QgcXVldWVfZmFtaWx5LCB1aW50MzJfdCBpbmRleCkKLXsKLSAgICBWdWxrYW5E ZXZpY2VQcml2ICpwID0gY3R4LT5od2N0eDsKLSAgICBwdGhyZWFkX211dGV4X3VubG9jaygmcC0+ cWZfbXV0ZXhbcXVldWVfZmFtaWx5XVtpbmRleF0pOwotfQotCi1zdGF0aWMgaW50IHZ1bGthbl9k ZXZpY2VfaW5pdChBVkhXRGV2aWNlQ29udGV4dCAqY3R4KQotewotICAgIGludCBlcnIgPSAwOwot ICAgIHVpbnQzMl90IHFmX251bTsKLSAgICBWdWxrYW5EZXZpY2VQcml2ICpwID0gY3R4LT5od2N0 eDsKLSAgICBBVlZ1bGthbkRldmljZUNvbnRleHQgKmh3Y3R4ID0gJnAtPnA7Ci0gICAgRkZWdWxr YW5GdW5jdGlvbnMgKnZrID0gJnAtPnZrY3R4LnZrZm47Ci0gICAgVmtRdWV1ZUZhbWlseVByb3Bl cnRpZXMyICpxZjsKLSAgICBWa1F1ZXVlRmFtaWx5VmlkZW9Qcm9wZXJ0aWVzS0hSICpxZl92aWQ7 Ci0gICAgVmtQaHlzaWNhbERldmljZUV4dGVybmFsU2VtYXBob3JlSW5mbyBleHRfc2VtX3Byb3Bz X2luZm87Ci0gICAgaW50IGdyYXBoX2luZGV4LCBjb21wX2luZGV4LCB0eF9pbmRleCwgZW5jX2lu ZGV4LCBkZWNfaW5kZXg7Ci0KLSAgICAvKiBTZXQgZGV2aWNlIGV4dGVuc2lvbiBmbGFncyAqLwot ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaHdjdHgtPm5iX2VuYWJsZWRfZGV2X2V4dGVuc2lvbnM7 IGkrKykgewotICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IEZGX0FSUkFZX0VMRU1TKG9wdGlv bmFsX2RldmljZV9leHRzKTsgaisrKSB7Ci0gICAgICAgICAgICBpZiAoIXN0cmNtcChod2N0eC0+ ZW5hYmxlZF9kZXZfZXh0ZW5zaW9uc1tpXSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlv bmFsX2RldmljZV9leHRzW2pdLm5hbWUpKSB7Ci0gICAgICAgICAgICAgICAgcC0+dmtjdHguZXh0 ZW5zaW9ucyB8PSBvcHRpb25hbF9kZXZpY2VfZXh0c1tqXS5mbGFnOwotICAgICAgICAgICAgICAg IGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgZXJyID0gZmZf dmtfbG9hZF9mdW5jdGlvbnMoY3R4LCB2aywgcC0+dmtjdHguZXh0ZW5zaW9ucywgMSwgMSk7Ci0g ICAgaWYgKGVyciA8IDApIHsKLSAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiVW5h YmxlIHRvIGxvYWQgZnVuY3Rpb25zIVxuIik7Ci0gICAgICAgIHJldHVybiBlcnI7Ci0gICAgfQot Ci0gICAgcC0+cHJvcHMuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9QSFlTSUNBTF9ERVZJQ0Vf UFJPUEVSVElFU18yOwotICAgIHAtPnByb3BzLnBOZXh0ID0gJnAtPmhwcm9wczsKLSAgICBwLT5o cHJvcHMuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9QSFlTSUNBTF9ERVZJQ0VfRVhURVJOQUxf TUVNT1JZX0hPU1RfUFJPUEVSVElFU19FWFQ7Ci0gICAgcC0+aHByb3BzLnBOZXh0ID0gJnAtPmRw cm9wczsKLSAgICBwLT5kcHJvcHMuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9QSFlTSUNBTF9E RVZJQ0VfRFJJVkVSX1BST1BFUlRJRVM7Ci0KLSAgICB2ay0+R2V0UGh5c2ljYWxEZXZpY2VQcm9w ZXJ0aWVzMihod2N0eC0+cGh5c19kZXYsICZwLT5wcm9wcyk7Ci0gICAgYXZfbG9nKGN0eCwgQVZf TE9HX1ZFUkJPU0UsICJVc2luZyBkZXZpY2U6ICVzXG4iLAotICAgICAgICAgICBwLT5wcm9wcy5w cm9wZXJ0aWVzLmRldmljZU5hbWUpOwotICAgIGF2X2xvZyhjdHgsIEFWX0xPR19WRVJCT1NFLCAi QWxpZ25tZW50czpcbiIpOwotICAgIGF2X2xvZyhjdHgsIEFWX0xPR19WRVJCT1NFLCAiICAgIG9w dGltYWxCdWZmZXJDb3B5Um93UGl0Y2hBbGlnbm1lbnQ6ICUiUFJJdTY0IlxuIiwKLSAgICAgICAg ICAgcC0+cHJvcHMucHJvcGVydGllcy5saW1pdHMub3B0aW1hbEJ1ZmZlckNvcHlSb3dQaXRjaEFs aWdubWVudCk7Ci0gICAgYXZfbG9nKGN0eCwgQVZfTE9HX1ZFUkJPU0UsICIgICAgbWluTWVtb3J5 TWFwQWxpZ25tZW50OiAgICAgICAgICAgICAgJSJTSVpFX1NQRUNJRklFUiJcbiIsCi0gICAgICAg ICAgIHAtPnByb3BzLnByb3BlcnRpZXMubGltaXRzLm1pbk1lbW9yeU1hcEFsaWdubWVudCk7Ci0g ICAgYXZfbG9nKGN0eCwgQVZfTE9HX1ZFUkJPU0UsICIgICAgbm9uQ29oZXJlbnRBdG9tU2l6ZTog ICAgICAgICAgICAgICAgJSJQUkl1NjQiXG4iLAotICAgICAgICAgICBwLT5wcm9wcy5wcm9wZXJ0 aWVzLmxpbWl0cy5ub25Db2hlcmVudEF0b21TaXplKTsKLSAgICBpZiAocC0+dmtjdHguZXh0ZW5z aW9ucyAmIEZGX1ZLX0VYVF9FWFRFUk5BTF9IT1NUX01FTU9SWSkKLSAgICAgICAgYXZfbG9nKGN0 eCwgQVZfTE9HX1ZFUkJPU0UsICIgICAgbWluSW1wb3J0ZWRIb3N0UG9pbnRlckFsaWdubWVudDog ICAgJSJQUkl1NjQiXG4iLAotICAgICAgICAgICAgICAgcC0+aHByb3BzLm1pbkltcG9ydGVkSG9z dFBvaW50ZXJBbGlnbm1lbnQpOwotCi0gICAgdmstPkdldFBoeXNpY2FsRGV2aWNlUXVldWVGYW1p bHlQcm9wZXJ0aWVzKGh3Y3R4LT5waHlzX2RldiwgJnFmX251bSwgTlVMTCk7Ci0gICAgaWYgKCFx Zl9udW0pIHsKLSAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiRmFpbGVkIHRvIGdl dCBxdWV1ZXMhXG4iKTsKLSAgICAgICAgcmV0dXJuIEFWRVJST1JfRVhURVJOQUw7Ci0gICAgfQot Ci0gICAgZXh0X3NlbV9wcm9wc19pbmZvID0gKFZrUGh5c2ljYWxEZXZpY2VFeHRlcm5hbFNlbWFw aG9yZUluZm8pIHsKLSAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfUEhZU0lDQUxf REVWSUNFX0VYVEVSTkFMX1NFTUFQSE9SRV9JTkZPLAotICAgIH07Ci0KLSAgICAvKiBPcGFxdWUg RkQgc2VtYXBob3JlIHByb3BlcnRpZXMgKi8KLSAgICBleHRfc2VtX3Byb3BzX2luZm8uaGFuZGxl VHlwZSA9Ci0jaWZkZWYgX1dJTjMyCi0gICAgICAgIElzV2luZG93czhPckdyZWF0ZXIoKQotICAg ICAgICAgICAgPyBWS19FWFRFUk5BTF9TRU1BUEhPUkVfSEFORExFX1RZUEVfT1BBUVVFX1dJTjMy X0JJVAotICAgICAgICAgICAgOiBWS19FWFRFUk5BTF9TRU1BUEhPUkVfSEFORExFX1RZUEVfT1BB UVVFX1dJTjMyX0tNVF9CSVQ7Ci0jZWxzZQotICAgICAgICBWS19FWFRFUk5BTF9TRU1BUEhPUkVf SEFORExFX1RZUEVfT1BBUVVFX0ZEX0JJVDsKLSNlbmRpZgotICAgIHAtPmV4dF9zZW1fcHJvcHNf b3BhcXVlLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfRVhURVJOQUxfU0VNQVBIT1JFX1BST1BF UlRJRVM7Ci0gICAgdmstPkdldFBoeXNpY2FsRGV2aWNlRXh0ZXJuYWxTZW1hcGhvcmVQcm9wZXJ0 aWVzKGh3Y3R4LT5waHlzX2RldiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJmV4dF9zZW1fcHJvcHNfaW5mbywKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnAtPmV4dF9zZW1fcHJvcHNfb3Bh cXVlKTsKLQotICAgIHFmID0gYXZfbWFsbG9jX2FycmF5KHFmX251bSwgc2l6ZW9mKFZrUXVldWVG YW1pbHlQcm9wZXJ0aWVzMikpOwotICAgIGlmICghcWYpCi0gICAgICAgIHJldHVybiBBVkVSUk9S KEVOT01FTSk7Ci0KLSAgICBxZl92aWQgPSBhdl9tYWxsb2NfYXJyYXkocWZfbnVtLCBzaXplb2Yo VmtRdWV1ZUZhbWlseVZpZGVvUHJvcGVydGllc0tIUikpOwotICAgIGlmICghcWZfdmlkKSB7Ci0g ICAgICAgIGF2X2ZyZWUocWYpOwotICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOwotICAg IH0KLQotICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBxZl9udW07IGkrKykgewotICAgICAg ICBxZl92aWRbaV0gPSAoVmtRdWV1ZUZhbWlseVZpZGVvUHJvcGVydGllc0tIUikgewotICAgICAg ICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfUVVFVUVfRkFNSUxZX1ZJREVPX1BST1BF UlRJRVNfS0hSLAotICAgICAgICB9OwotICAgICAgICBxZltpXSA9IChWa1F1ZXVlRmFtaWx5UHJv cGVydGllczIpIHsKLSAgICAgICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX1FVRVVF X0ZBTUlMWV9QUk9QRVJUSUVTXzIsCi0gICAgICAgICAgICAucE5leHQgPSBwLT52a2N0eC5leHRl bnNpb25zICYgRkZfVktfRVhUX1ZJREVPX1FVRVVFID8gJnFmX3ZpZFtpXSA6IE5VTEwsCi0gICAg ICAgIH07Ci0gICAgfQotCi0gICAgdmstPkdldFBoeXNpY2FsRGV2aWNlUXVldWVGYW1pbHlQcm9w ZXJ0aWVzMihod2N0eC0+cGh5c19kZXYsICZxZl9udW0sIHFmKTsKLQotICAgIHAtPnFmX211dGV4 ID0gYXZfY2FsbG9jKHFmX251bSwgc2l6ZW9mKCpwLT5xZl9tdXRleCkpOwotICAgIGlmICghcC0+ cWZfbXV0ZXgpIHsKLSAgICAgICAgZXJyID0gQVZFUlJPUihFTk9NRU0pOwotICAgICAgICBnb3Rv IGVuZDsKLSAgICB9Ci0gICAgcC0+bmJfdG90X3FmcyA9IHFmX251bTsKLQotICAgIGZvciAodWlu dDMyX3QgaSA9IDA7IGkgPCBxZl9udW07IGkrKykgewotICAgICAgICBwLT5xZl9tdXRleFtpXSA9 IGF2X2NhbGxvYyhxZltpXS5xdWV1ZUZhbWlseVByb3BlcnRpZXMucXVldWVDb3VudCwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKCoqcC0+cWZfbXV0ZXgpKTsKLSAg ICAgICAgaWYgKCFwLT5xZl9tdXRleFtpXSkgewotICAgICAgICAgICAgZXJyID0gQVZFUlJPUihF Tk9NRU0pOwotICAgICAgICAgICAgZ290byBlbmQ7Ci0gICAgICAgIH0KLSAgICAgICAgZm9yICh1 aW50MzJfdCBqID0gMDsgaiA8IHFmW2ldLnF1ZXVlRmFtaWx5UHJvcGVydGllcy5xdWV1ZUNvdW50 OyBqKyspIHsKLSAgICAgICAgICAgIGVyciA9IHB0aHJlYWRfbXV0ZXhfaW5pdCgmcC0+cWZfbXV0 ZXhbaV1bal0sIE5VTEwpOwotICAgICAgICAgICAgaWYgKGVyciAhPSAwKSB7Ci0gICAgICAgICAg ICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAicHRocmVhZF9tdXRleF9pbml0IGZhaWxl ZCA6ICVzXG4iLAotICAgICAgICAgICAgICAgICAgICAgICBhdl9lcnIyc3RyKGVycikpOwotICAg ICAgICAgICAgICAgIGVyciA9IEFWRVJST1IoZXJyKTsKLSAgICAgICAgICAgICAgICBnb3RvIGVu ZDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotI2lmIEZGX0FQSV9WVUxLQU5f RklYRURfUVVFVUVTCi1GRl9ESVNBQkxFX0RFUFJFQ0FUSU9OX1dBUk5JTkdTCi0gICAgZ3JhcGhf aW5kZXggPSBod2N0eC0+bmJfZ3JhcGhpY3NfcXVldWVzID8gaHdjdHgtPnF1ZXVlX2ZhbWlseV9p bmRleCA6IC0xOwotICAgIGNvbXBfaW5kZXggID0gaHdjdHgtPm5iX2NvbXBfcXVldWVzID8gaHdj dHgtPnF1ZXVlX2ZhbWlseV9jb21wX2luZGV4IDogLTE7Ci0gICAgdHhfaW5kZXggICAgPSBod2N0 eC0+bmJfdHhfcXVldWVzID8gaHdjdHgtPnF1ZXVlX2ZhbWlseV90eF9pbmRleCA6IC0xOwotICAg IGRlY19pbmRleCAgID0gaHdjdHgtPm5iX2RlY29kZV9xdWV1ZXMgPyBod2N0eC0+cXVldWVfZmFt aWx5X2RlY29kZV9pbmRleCA6IC0xOwotICAgIGVuY19pbmRleCAgID0gaHdjdHgtPm5iX2VuY29k ZV9xdWV1ZXMgPyBod2N0eC0+cXVldWVfZmFtaWx5X2VuY29kZV9pbmRleCA6IC0xOwotCi0jZGVm aW5lIENIRUNLX1FVRVVFKHR5cGUsIHJlcXVpcmVkLCBmaWR4LCBjdHhfcWYsIHFjKSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgZG8geyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGlmIChjdHhfcWYgPCAwICYmIHJlcXVpcmVk KSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCi0gICAgICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICIlcyBxdWV1ZSBm YW1pbHkgaXMgcmVxdWlyZWQsIGJ1dCBtYXJrZWQgYXMgbWlzc2luZyIgICAgICBcCi0gICAgICAg ICAgICAgICAgICAgIiBpbiB0aGUgY29udGV4dCFcbiIsIHR5cGUpOyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBlcnIgPSBBVkVS Uk9SKEVJTlZBTCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBnb3RvIGVuZDsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCi0gICAgICAgIH0gZWxzZSBpZiAoZmlkeCA8IDAgfHwgY3R4X3FmIDwgMCkgeyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAg ICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIH0gZWxzZSBpZiAoY3R4X3Fm ID49IHFmX251bSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJJ bnZhbGlkICVzIGZhbWlseSBpbmRleCAlaSAoZGV2aWNlIGhhcyAlaSBmYW1pbGllcykhXG4iLCBc Ci0gICAgICAgICAgICAgICAgICAgdHlwZSwgY3R4X3FmLCBxZl9udW0pOyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBl cnIgPSBBVkVSUk9SKEVJTlZBTCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBnb3RvIGVuZDsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCi0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGF2X2xvZyhj dHgsIEFWX0xPR19WRVJCT1NFLCAiVXNpbmcgcXVldWUgZmFtaWx5ICVpIChxdWV1ZXM6ICVpKSIg ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAiIGZvciVzJXMlcyVzJXNc biIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCi0gICAgICAgICAgICAgICBjdHhfcWYsIHFjLCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg ICAgICAgICAgICBjdHhfcWYgPT0gZ3JhcGhfaW5kZXggPyAiIGdyYXBoaWNzIiA6ICIiLCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICBjdHhf cWYgPT0gY29tcF9pbmRleCAgPyAiIGNvbXB1dGUiIDogIiIsICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICBjdHhfcWYgPT0gdHhfaW5kZXgg ICAgPyAiIHRyYW5zZmVycyIgOiAiIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCi0gICAgICAgICAgICAgICBjdHhfcWYgPT0gZW5jX2luZGV4ICAgPyAiIGVuY29kZSIg OiAiIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAg ICAgICAgICBjdHhfcWYgPT0gZGVjX2luZGV4ICAgPyAiIGRlY29kZSIgOiAiIik7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGdyYXBoX2luZGV4ID0g KGN0eF9xZiA9PSBncmFwaF9pbmRleCkgPyAtMSA6IGdyYXBoX2luZGV4OyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGNvbXBfaW5kZXggID0gKGN0eF9xZiA9PSBjb21w X2luZGV4KSAgPyAtMSA6IGNvbXBfaW5kZXg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCi0gICAgICAgIHR4X2luZGV4ICAgID0gKGN0eF9xZiA9PSB0eF9pbmRleCkgICAgPyAtMSA6 IHR4X2luZGV4OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGVu Y19pbmRleCAgID0gKGN0eF9xZiA9PSBlbmNfaW5kZXgpICAgPyAtMSA6IGVuY19pbmRleDsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGRlY19pbmRleCAgID0gKGN0 eF9xZiA9PSBkZWNfaW5kZXgpICAgPyAtMSA6IGRlY19pbmRleDsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCi0gICAgfSB3aGlsZSAoMCkKLQotICAgIENIRUNLX1FVRVVFKCJncmFw aGljcyIsIDAsIGdyYXBoX2luZGV4LCBod2N0eC0+cXVldWVfZmFtaWx5X2luZGV4LCAgICAgICAg aHdjdHgtPm5iX2dyYXBoaWNzX3F1ZXVlcyk7Ci0gICAgQ0hFQ0tfUVVFVUUoImNvbXB1dGUiLCAg MSwgY29tcF9pbmRleCwgIGh3Y3R4LT5xdWV1ZV9mYW1pbHlfY29tcF9pbmRleCwgICBod2N0eC0+ bmJfY29tcF9xdWV1ZXMpOwotICAgIENIRUNLX1FVRVVFKCJ1cGxvYWQiLCAgIDEsIHR4X2luZGV4 LCAgICBod2N0eC0+cXVldWVfZmFtaWx5X3R4X2luZGV4LCAgICAgaHdjdHgtPm5iX3R4X3F1ZXVl cyk7Ci0gICAgQ0hFQ0tfUVVFVUUoImRlY29kZSIsICAgMCwgZGVjX2luZGV4LCAgIGh3Y3R4LT5x dWV1ZV9mYW1pbHlfZGVjb2RlX2luZGV4LCBod2N0eC0+bmJfZGVjb2RlX3F1ZXVlcyk7Ci0gICAg Q0hFQ0tfUVVFVUUoImVuY29kZSIsICAgMCwgZW5jX2luZGV4LCAgIGh3Y3R4LT5xdWV1ZV9mYW1p bHlfZW5jb2RlX2luZGV4LCBod2N0eC0+bmJfZW5jb2RlX3F1ZXVlcyk7Ci0KLSN1bmRlZiBDSEVD S19RVUVVRQotCi0gICAgLyogVXBkYXRlIHRoZSBuZXcgcXVldWUgZmFtaWx5IGZpZWxkcy4gSWYg bm9uLXplcm8gYWxyZWFkeSwKLSAgICAgKiBpdCBtZWFucyBBUEkgdXNlcnMgaGF2ZSBzZXQgaXQu ICovCi0gICAgaWYgKCFod2N0eC0+bmJfcWYpIHsKLSNkZWZpbmUgQUREX1FVRVVFKGN0eF9xZiwg cWMsIGZsYWcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGRvIHsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCi0gICAgICAgIGlmIChjdHhfcWYgIT0gLTEpIHsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIGh3Y3R4LT5xZltod2N0eC0+bmJf cWYrK10gPSAoQVZWdWxrYW5EZXZpY2VRdWV1ZUZhbWlseSkgeyAgXAotICAgICAgICAgICAgICAg IC5pZHggPSBjdHhfcWYsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc Ci0gICAgICAgICAgICAgICAgLm51bSA9IHFjLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAuZmxhZ3MgPSBmbGFnLCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgfTsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg ICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKLSAgICB9IHdoaWxlICgwKQotCi0gICAgICAgIEFERF9RVUVVRShod2N0eC0+ cXVldWVfZmFtaWx5X2luZGV4LCBod2N0eC0+bmJfZ3JhcGhpY3NfcXVldWVzLCBWS19RVUVVRV9H UkFQSElDU19CSVQpOwotICAgICAgICBBRERfUVVFVUUoaHdjdHgtPnF1ZXVlX2ZhbWlseV9jb21w X2luZGV4LCBod2N0eC0+bmJfY29tcF9xdWV1ZXMsIFZLX1FVRVVFX0NPTVBVVEVfQklUKTsKLSAg ICAgICAgQUREX1FVRVVFKGh3Y3R4LT5xdWV1ZV9mYW1pbHlfdHhfaW5kZXgsIGh3Y3R4LT5uYl90 eF9xdWV1ZXMsIFZLX1FVRVVFX1RSQU5TRkVSX0JJVCk7Ci0gICAgICAgIEFERF9RVUVVRShod2N0 eC0+cXVldWVfZmFtaWx5X2RlY29kZV9pbmRleCwgaHdjdHgtPm5iX2RlY29kZV9xdWV1ZXMsIFZL X1FVRVVFX1ZJREVPX0RFQ09ERV9CSVRfS0hSKTsKLSAgICAgICAgQUREX1FVRVVFKGh3Y3R4LT5x dWV1ZV9mYW1pbHlfZW5jb2RlX2luZGV4LCBod2N0eC0+bmJfZW5jb2RlX3F1ZXVlcywgVktfUVVF VUVfVklERU9fRU5DT0RFX0JJVF9LSFIpOwotI3VuZGVmIEFERF9RVUVVRQotICAgIH0KLUZGX0VO QUJMRV9ERVBSRUNBVElPTl9XQVJOSU5HUwotI2VuZGlmCi0KLSAgICBmb3IgKGludCBpID0gMDsg aSA8IGh3Y3R4LT5uYl9xZjsgaSsrKSB7Ci0gICAgICAgIGlmICghaHdjdHgtPnFmW2ldLnZpZGVv X2NhcHMgJiYKLSAgICAgICAgICAgIGh3Y3R4LT5xZltpXS5mbGFncyAmIChWS19RVUVVRV9WSURF T19ERUNPREVfQklUX0tIUiB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktf UVVFVUVfVklERU9fRU5DT0RFX0JJVF9LSFIpKSB7Ci0gICAgICAgICAgICBod2N0eC0+cWZbaV0u dmlkZW9fY2FwcyA9IHFmX3ZpZFtod2N0eC0+cWZbaV0uaWR4XS52aWRlb0NvZGVjT3BlcmF0aW9u czsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qIFNldHVwIGFycmF5IGZvciBwUXVldWVGYW1p bHlJbmRpY2VzIHdpdGggdXNlZCBxdWV1ZSBmYW1pbGllcyAqLwotICAgIHAtPm5iX2ltZ19xZnMg PSAwOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaHdjdHgtPm5iX3FmOyBpKyspIHsKLSAgICAg ICAgaW50IHNlZW4gPSAwOwotICAgICAgICAvKiBNYWtlIHN1cmUgZWFjaCBlbnRyeSBpcyB1bmlx dWUKLSAgICAgICAgICogKFZVSUQtVmtCdWZmZXJDcmVhdGVJbmZvLXNoYXJpbmdNb2RlLTAxNDE5 KSAqLwotICAgICAgICBmb3IgKGludCBqID0gKGkgLSAxKTsgaiA+PSAwOyBqLS0pIHsKLSAgICAg ICAgICAgIGlmIChod2N0eC0+cWZbaV0uaWR4ID09IGh3Y3R4LT5xZltqXS5pZHgpIHsKLSAgICAg ICAgICAgICAgICBzZWVuID0gMTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg IH0KLSAgICAgICAgfQotICAgICAgICBpZiAoIXNlZW4pCi0gICAgICAgICAgICBwLT5pbWdfcWZz W3AtPm5iX2ltZ19xZnMrK10gPSBod2N0eC0+cWZbaV0uaWR4OwotICAgIH0KLQotICAgIGlmICgh aHdjdHgtPmxvY2tfcXVldWUpCi0gICAgICAgIGh3Y3R4LT5sb2NrX3F1ZXVlID0gbG9ja19xdWV1 ZTsKLSAgICBpZiAoIWh3Y3R4LT51bmxvY2tfcXVldWUpCi0gICAgICAgIGh3Y3R4LT51bmxvY2tf cXVldWUgPSB1bmxvY2tfcXVldWU7Ci0KLSAgICAvKiBSZS1xdWVyeSBkZXZpY2UgY2FwYWJpbGl0 aWVzLCBpbiBjYXNlIHRoZSBkZXZpY2Ugd2FzIGNyZWF0ZWQgZXh0ZXJuYWxseSAqLwotICAgIHZr LT5HZXRQaHlzaWNhbERldmljZU1lbW9yeVByb3BlcnRpZXMoaHdjdHgtPnBoeXNfZGV2LCAmcC0+ bXByb3BzKTsKLQotICAgIHAtPnZrY3R4LmRldmljZSA9IGN0eDsKLSAgICBwLT52a2N0eC5od2N0 eCA9IGh3Y3R4OwotCi0gICAgZmZfdmtfbG9hZF9wcm9wcygmcC0+dmtjdHgpOwotICAgIHAtPmNv bXB1dGVfcWYgPSBmZl92a19xZl9maW5kKCZwLT52a2N0eCwgVktfUVVFVUVfQ09NUFVURV9CSVQs IDApOwotICAgIHAtPnRyYW5zZmVyX3FmID0gZmZfdmtfcWZfZmluZCgmcC0+dmtjdHgsIFZLX1FV RVVFX1RSQU5TRkVSX0JJVCwgMCk7Ci0KLSAgICAvKiBSZS1xdWVyeSBkZXZpY2UgY2FwYWJpbGl0 aWVzLCBpbiBjYXNlIHRoZSBkZXZpY2Ugd2FzIGNyZWF0ZWQgZXh0ZXJuYWxseSAqLwotICAgIHZr LT5HZXRQaHlzaWNhbERldmljZU1lbW9yeVByb3BlcnRpZXMoaHdjdHgtPnBoeXNfZGV2LCAmcC0+ bXByb3BzKTsKLQotICAgIC8qIE9ubHkgdXNlIGhvc3QgaW1hZ2UgdHJhbnNmZXJzIGlmIFJlQkFS IGlzIGVuYWJsZWQgKi8KLSAgICBwLT5kaXNhYmxlX2hvc3RfdHJhbnNmZXIgPSAhdnVsa2FuX2Rl dmljZV9oYXNfcmViYXIoY3R4KTsKLQotZW5kOgotICAgIGF2X2ZyZWUocWZfdmlkKTsKLSAgICBh dl9mcmVlKHFmKTsKLSAgICByZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IHZ1bGthbl9kZXZp Y2VfY3JlYXRlKEFWSFdEZXZpY2VDb250ZXh0ICpjdHgsIGNvbnN0IGNoYXIgKmRldmljZSwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVZEaWN0aW9uYXJ5ICpvcHRzLCBpbnQgZmxh Z3MpCi17Ci0gICAgVnVsa2FuRGV2aWNlU2VsZWN0aW9uIGRldl9zZWxlY3QgPSB7IDAgfTsKLSAg ICBpZiAoZGV2aWNlICYmIGRldmljZVswXSkgewotICAgICAgICBjaGFyICplbmQgPSBOVUxMOwot ICAgICAgICBkZXZfc2VsZWN0LmluZGV4ID0gc3RydG9sKGRldmljZSwgJmVuZCwgMTApOwotICAg ICAgICBpZiAoZW5kID09IGRldmljZSkgewotICAgICAgICAgICAgZGV2X3NlbGVjdC5pbmRleCA9 IDA7Ci0gICAgICAgICAgICBkZXZfc2VsZWN0Lm5hbWUgID0gZGV2aWNlOwotICAgICAgICB9Ci0g ICAgfQotCi0gICAgcmV0dXJuIHZ1bGthbl9kZXZpY2VfY3JlYXRlX2ludGVybmFsKGN0eCwgJmRl dl9zZWxlY3QsIDAsIG9wdHMsIGZsYWdzKTsKLX0KLQotc3RhdGljIGludCB2dWxrYW5fZGV2aWNl X2Rlcml2ZShBVkhXRGV2aWNlQ29udGV4dCAqY3R4LAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBBVkhXRGV2aWNlQ29udGV4dCAqc3JjX2N0eCwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgQVZEaWN0aW9uYXJ5ICpvcHRzLCBpbnQgZmxhZ3MpCi17Ci0gICAgYXZfdW51 c2VkIFZ1bGthbkRldmljZVNlbGVjdGlvbiBkZXZfc2VsZWN0ID0geyAwIH07Ci0KLSAgICAvKiBJ ZiB0aGVyZSdzIG9ubHkgb25lIGRldmljZSBvbiB0aGUgc3lzdGVtLCB0aGVuIGV2ZW4gaWYgaXRz IG5vdCBjb3ZlcmVkCi0gICAgICogYnkgdGhlIGZvbGxvd2luZyBjaGVja3MgKGUuZy4gbm9uLVBD SWUgQVJNIEdQVSksIGhhdmluZyBhbiBlbXB0eQotICAgICAqIGRldl9zZWxlY3Qgd2lsbCBtZWFu IGl0J2xsIGdldCBwaWNrZWQuICovCi0gICAgc3dpdGNoKHNyY19jdHgtPnR5cGUpIHsKLSNpZiBD T05GSUdfVkFBUEkKLSAgICBjYXNlIEFWX0hXREVWSUNFX1RZUEVfVkFBUEk6IHsKLSAgICAgICAg QVZWQUFQSURldmljZUNvbnRleHQgKnNyY19od2N0eCA9IHNyY19jdHgtPmh3Y3R4OwotICAgICAg ICBWQURpc3BsYXkgZHB5ID0gc3JjX2h3Y3R4LT5kaXNwbGF5OwotI2lmIFZBX0NIRUNLX1ZFUlNJ T04oMSwgMTUsIDApCi0gICAgICAgIFZBU3RhdHVzIHZhczsKLSAgICAgICAgVkFEaXNwbGF5QXR0 cmlidXRlIGF0dHIgPSB7Ci0gICAgICAgICAgICAudHlwZSA9IFZBRGlzcGxheVBDSUlELAotICAg ICAgICB9OwotI2VuZGlmCi0gICAgICAgIGNvbnN0IGNoYXIgKnZlbmRvcjsKLQotI2lmIFZBX0NI RUNLX1ZFUlNJT04oMSwgMTUsIDApCi0gICAgICAgIHZhcyA9IHZhR2V0RGlzcGxheUF0dHJpYnV0 ZXMoZHB5LCAmYXR0ciwgMSk7Ci0gICAgICAgIGlmICh2YXMgPT0gVkFfU1RBVFVTX1NVQ0NFU1Mg JiYgYXR0ci5mbGFncyAhPSBWQV9ESVNQTEFZX0FUVFJJQl9OT1RfU1VQUE9SVEVEKQotICAgICAg ICAgICAgZGV2X3NlbGVjdC5wY2lfZGV2aWNlID0gKGF0dHIudmFsdWUgJiAweEZGRkYpOwotI2Vu ZGlmCi0KLSAgICAgICAgaWYgKCFkZXZfc2VsZWN0LnBjaV9kZXZpY2UpIHsKLSAgICAgICAgICAg IHZlbmRvciA9IHZhUXVlcnlWZW5kb3JTdHJpbmcoZHB5KTsKLSAgICAgICAgICAgIGlmICghdmVu ZG9yKSB7Ci0gICAgICAgICAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiVW5hYmxl IHRvIGdldCBkZXZpY2UgaW5mbyBmcm9tIFZBQVBJIVxuIik7Ci0gICAgICAgICAgICAgICAgcmV0 dXJuIEFWRVJST1JfRVhURVJOQUw7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChz dHJzdHIodmVuZG9yLCAiQU1EIikpCi0gICAgICAgICAgICAgICAgZGV2X3NlbGVjdC52ZW5kb3Jf aWQgPSAweDEwMDI7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gdnVsa2FuX2RldmljZV9j cmVhdGVfaW50ZXJuYWwoY3R4LCAmZGV2X3NlbGVjdCwgMCwgb3B0cywgZmxhZ3MpOwotICAgIH0K LSNlbmRpZgotI2lmIENPTkZJR19MSUJEUk0KLSAgICBjYXNlIEFWX0hXREVWSUNFX1RZUEVfRFJN OiB7Ci0gICAgICAgIGludCBlcnI7Ci0gICAgICAgIHN0cnVjdCBzdGF0IGRybV9ub2RlX2luZm87 Ci0gICAgICAgIGRybURldmljZSAqZHJtX2Rldl9pbmZvOwotICAgICAgICBBVkRSTURldmljZUNv bnRleHQgKnNyY19od2N0eCA9IHNyY19jdHgtPmh3Y3R4OwotCi0gICAgICAgIGVyciA9IGZzdGF0 KHNyY19od2N0eC0+ZmQsICZkcm1fbm9kZV9pbmZvKTsKLSAgICAgICAgaWYgKGVycikgewotICAg ICAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiVW5hYmxlIHRvIGdldCBub2RlIGlu Zm8gZnJvbSBEUk0gZmQ6ICVzIVxuIiwKLSAgICAgICAgICAgICAgICAgICBhdl9lcnIyc3RyKEFW RVJST1IoZXJybm8pKSk7Ci0gICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9FWFRFUk5BTDsKLSAg ICAgICAgfQotCi0gICAgICAgIGRldl9zZWxlY3QuZHJtX21ham9yID0gbWFqb3IoZHJtX25vZGVf aW5mby5zdF9kZXYpOwotICAgICAgICBkZXZfc2VsZWN0LmRybV9taW5vciA9IG1pbm9yKGRybV9u b2RlX2luZm8uc3RfZGV2KTsKLSAgICAgICAgZGV2X3NlbGVjdC5oYXNfZHJtICAgPSAxOwotCi0g ICAgICAgIGVyciA9IGRybUdldERldmljZShzcmNfaHdjdHgtPmZkLCAmZHJtX2Rldl9pbmZvKTsK LSAgICAgICAgaWYgKGVycikgewotICAgICAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9S LCAiVW5hYmxlIHRvIGdldCBkZXZpY2UgaW5mbyBmcm9tIERSTSBmZDogJXMhXG4iLAotICAgICAg ICAgICAgICAgICAgIGF2X2VycjJzdHIoQVZFUlJPUihlcnJubykpKTsKLSAgICAgICAgICAgIHJl dHVybiBBVkVSUk9SX0VYVEVSTkFMOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGRybV9kZXZf aW5mby0+YnVzdHlwZSA9PSBEUk1fQlVTX1BDSSkKLSAgICAgICAgICAgIGRldl9zZWxlY3QucGNp X2RldmljZSA9IGRybV9kZXZfaW5mby0+ZGV2aWNlaW5mby5wY2ktPmRldmljZV9pZDsKLQotICAg ICAgICBkcm1GcmVlRGV2aWNlKCZkcm1fZGV2X2luZm8pOwotCi0gICAgICAgIHJldHVybiB2dWxr YW5fZGV2aWNlX2NyZWF0ZV9pbnRlcm5hbChjdHgsICZkZXZfc2VsZWN0LCAwLCBvcHRzLCBmbGFn cyk7Ci0gICAgfQotI2VuZGlmCi0jaWYgQ09ORklHX0NVREEKLSAgICBjYXNlIEFWX0hXREVWSUNF X1RZUEVfQ1VEQTogewotICAgICAgICBBVkhXRGV2aWNlQ29udGV4dCAqY3VkYV9jdSA9IHNyY19j dHg7Ci0gICAgICAgIEFWQ1VEQURldmljZUNvbnRleHQgKnNyY19od2N0eCA9IHNyY19jdHgtPmh3 Y3R4OwotICAgICAgICBBVkNVREFEZXZpY2VDb250ZXh0SW50ZXJuYWwgKmN1X2ludGVybmFsID0g c3JjX2h3Y3R4LT5pbnRlcm5hbDsKLSAgICAgICAgQ3VkYUZ1bmN0aW9ucyAqY3UgPSBjdV9pbnRl cm5hbC0+Y3VkYV9kbDsKLQotICAgICAgICBpbnQgcmV0ID0gQ0hFQ0tfQ1UoY3UtPmN1RGV2aWNl R2V0VXVpZCgoQ1V1dWlkICopJmRldl9zZWxlY3QudXVpZCwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VfaW50ZXJuYWwtPmN1ZGFfZGV2aWNlKSk7Ci0g ICAgICAgIGlmIChyZXQgPCAwKSB7Ci0gICAgICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJS T1IsICJVbmFibGUgdG8gZ2V0IFVVSUQgZnJvbSBDVURBIVxuIik7Ci0gICAgICAgICAgICByZXR1 cm4gQVZFUlJPUl9FWFRFUk5BTDsKLSAgICAgICAgfQotCi0gICAgICAgIGRldl9zZWxlY3QuaGFz X3V1aWQgPSAxOwotCi0gICAgICAgIC8qCi0gICAgICAgICAqIENVREEgaXMgbm90IGFibGUgdG8g aW1wb3J0IG11bHRpcGxhbmUgaW1hZ2VzLCBzbyBhbHdheXMgZGVyaXZlIGEKLSAgICAgICAgICog VnVsa2FuIGRldmljZSB3aXRoIG11bHRpcGxhbmUgZGlzYWJsZWQuCi0gICAgICAgICAqLwotICAg ICAgICByZXR1cm4gdnVsa2FuX2RldmljZV9jcmVhdGVfaW50ZXJuYWwoY3R4LCAmZGV2X3NlbGVj dCwgMSwgb3B0cywgZmxhZ3MpOwotICAgIH0KLSNlbmRpZgotICAgIGRlZmF1bHQ6Ci0gICAgICAg IHJldHVybiBBVkVSUk9SKEVOT1NZUyk7Ci0gICAgfQotfQotCi1zdGF0aWMgaW50IHZ1bGthbl9m cmFtZXNfZ2V0X2NvbnN0cmFpbnRzKEFWSFdEZXZpY2VDb250ZXh0ICpjdHgsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmh3Y29uZmlnLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVkhXRnJhbWVzQ29uc3RyYWlu dHMgKmNvbnN0cmFpbnRzKQotewotICAgIGludCBjb3VudCA9IDA7Ci0gICAgVnVsa2FuRGV2aWNl UHJpdiAqcCA9IGN0eC0+aHdjdHg7Ci0KLSAgICBmb3IgKGVudW0gQVZQaXhlbEZvcm1hdCBpID0g MDsgaSA8IG5iX3ZrX2Zvcm1hdHNfbGlzdDsgaSsrKSB7Ci0gICAgICAgIGNvdW50ICs9IHZrZm10 X2Zyb21fcGl4Zm10MihjdHgsIHZrX2Zvcm1hdHNfbGlzdFtpXS5waXhmbXQsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBwLT51c2VfbGluZWFyX2ltYWdlcyA/IFZLX0lNQUdF X1RJTElOR19MSU5FQVIgOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBWS19JTUFHRV9USUxJTkdfT1BUSU1BTCwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIHAtPmRpc2Fi bGVfbXVsdGlwbGFuZSwgMSkgPj0gMDsKLSAgICB9Ci0KLSAgICBjb25zdHJhaW50cy0+dmFsaWRf c3dfZm9ybWF0cyA9IGF2X21hbGxvY19hcnJheShjb3VudCArIDEsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGVudW0gQVZQaXhlbEZv cm1hdCkpOwotICAgIGlmICghY29uc3RyYWludHMtPnZhbGlkX3N3X2Zvcm1hdHMpCi0gICAgICAg IHJldHVybiBBVkVSUk9SKEVOT01FTSk7Ci0KLSAgICBjb3VudCA9IDA7Ci0gICAgZm9yIChlbnVt IEFWUGl4ZWxGb3JtYXQgaSA9IDA7IGkgPCBuYl92a19mb3JtYXRzX2xpc3Q7IGkrKykgewotICAg ICAgICBpZiAodmtmbXRfZnJvbV9waXhmbXQyKGN0eCwgdmtfZm9ybWF0c19saXN0W2ldLnBpeGZt dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLT51c2VfbGluZWFyX2ltYWdlcyA/ IFZLX0lNQUdFX1RJTElOR19MSU5FQVIgOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgVktfSU1BR0VfVElMSU5HX09QVElNQUwsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgcC0+ZGlzYWJs ZV9tdWx0aXBsYW5lLCAxKSA+PSAwKSB7Ci0gICAgICAgICAgICBjb25zdHJhaW50cy0+dmFsaWRf c3dfZm9ybWF0c1tjb3VudCsrXSA9IHZrX2Zvcm1hdHNfbGlzdFtpXS5waXhmbXQ7Ci0gICAgICAg IH0KLSAgICB9Ci0KLSAgICBjb25zdHJhaW50cy0+dmFsaWRfc3dfZm9ybWF0c1tjb3VudCsrXSA9 IEFWX1BJWF9GTVRfTk9ORTsKLQotICAgIGNvbnN0cmFpbnRzLT5taW5fd2lkdGggID0gMTsKLSAg ICBjb25zdHJhaW50cy0+bWluX2hlaWdodCA9IDE7Ci0gICAgY29uc3RyYWludHMtPm1heF93aWR0 aCAgPSBwLT5wcm9wcy5wcm9wZXJ0aWVzLmxpbWl0cy5tYXhJbWFnZURpbWVuc2lvbjJEOwotICAg IGNvbnN0cmFpbnRzLT5tYXhfaGVpZ2h0ID0gcC0+cHJvcHMucHJvcGVydGllcy5saW1pdHMubWF4 SW1hZ2VEaW1lbnNpb24yRDsKLQotICAgIGNvbnN0cmFpbnRzLT52YWxpZF9od19mb3JtYXRzID0g YXZfbWFsbG9jX2FycmF5KDIsIHNpemVvZihlbnVtIEFWUGl4ZWxGb3JtYXQpKTsKLSAgICBpZiAo IWNvbnN0cmFpbnRzLT52YWxpZF9od19mb3JtYXRzKQotICAgICAgICByZXR1cm4gQVZFUlJPUihF Tk9NRU0pOwotCi0gICAgY29uc3RyYWludHMtPnZhbGlkX2h3X2Zvcm1hdHNbMF0gPSBBVl9QSVhf Rk1UX1ZVTEtBTjsKLSAgICBjb25zdHJhaW50cy0+dmFsaWRfaHdfZm9ybWF0c1sxXSA9IEFWX1BJ WF9GTVRfTk9ORTsKLQotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGFsbG9jX21lbShB VkhXRGV2aWNlQ29udGV4dCAqY3R4LCBWa01lbW9yeVJlcXVpcmVtZW50cyAqcmVxLAotICAgICAg ICAgICAgICAgICAgICAgVmtNZW1vcnlQcm9wZXJ0eUZsYWdCaXRzIHJlcV9mbGFncywgY29uc3Qg dm9pZCAqYWxsb2NfZXh0ZW5zaW9uLAotICAgICAgICAgICAgICAgICAgICAgVmtNZW1vcnlQcm9w ZXJ0eUZsYWdCaXRzICptZW1fZmxhZ3MsIFZrRGV2aWNlTWVtb3J5ICptZW0pCi17Ci0gICAgVmtS ZXN1bHQgcmV0OwotICAgIGludCBpbmRleCA9IC0xOwotICAgIFZ1bGthbkRldmljZVByaXYgKnAg PSBjdHgtPmh3Y3R4OwotICAgIEZGVnVsa2FuRnVuY3Rpb25zICp2ayA9ICZwLT52a2N0eC52a2Zu OwotICAgIEFWVnVsa2FuRGV2aWNlQ29udGV4dCAqZGV2X2h3Y3R4ID0gJnAtPnA7Ci0gICAgVmtN ZW1vcnlBbGxvY2F0ZUluZm8gYWxsb2NfaW5mbyA9IHsKLSAgICAgICAgLnNUeXBlICAgICAgICAg ID0gVktfU1RSVUNUVVJFX1RZUEVfTUVNT1JZX0FMTE9DQVRFX0lORk8sCi0gICAgICAgIC5wTmV4 dCAgICAgICAgICA9IGFsbG9jX2V4dGVuc2lvbiwKLSAgICAgICAgLmFsbG9jYXRpb25TaXplID0g cmVxLT5zaXplLAotICAgIH07Ci0KLSAgICAvKiBUaGUgdnVsa2FuIHNwZWMgcmVxdWlyZXMgbWVt b3J5IHR5cGVzIHRvIGJlIHNvcnRlZCBpbiB0aGUgIm9wdGltYWwiCi0gICAgICogb3JkZXIsIHNv IHRoZSBmaXJzdCBtYXRjaGluZyB0eXBlIHdlIGZpbmQgd2lsbCBiZSB0aGUgYmVzdC9mYXN0ZXN0 IG9uZSAqLwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcC0+bXByb3BzLm1lbW9yeVR5cGVDb3Vu dDsgaSsrKSB7Ci0gICAgICAgIGNvbnN0IFZrTWVtb3J5VHlwZSAqdHlwZSA9ICZwLT5tcHJvcHMu bWVtb3J5VHlwZXNbaV07Ci0KLSAgICAgICAgLyogVGhlIG1lbW9yeSB0eXBlIG11c3QgYmUgc3Vw cG9ydGVkIGJ5IHRoZSByZXF1aXJlbWVudHMgKGJpdGZpZWxkKSAqLwotICAgICAgICBpZiAoIShy ZXEtPm1lbW9yeVR5cGVCaXRzICYgKDEgPDwgaSkpKQotICAgICAgICAgICAgY29udGludWU7Ci0K LSAgICAgICAgLyogVGhlIG1lbW9yeSB0eXBlIGZsYWdzIG11c3QgaW5jbHVkZSBvdXIgcHJvcGVy dGllcyAqLwotICAgICAgICBpZiAoKHR5cGUtPnByb3BlcnR5RmxhZ3MgJiByZXFfZmxhZ3MpICE9 IHJlcV9mbGFncykKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIC8qIFRoZSBtZW1v cnkgdHlwZSBtdXN0IGJlIGxhcmdlIGVub3VnaCAqLwotICAgICAgICBpZiAocmVxLT5zaXplID4g cC0+bXByb3BzLm1lbW9yeUhlYXBzW3R5cGUtPmhlYXBJbmRleF0uc2l6ZSkKLSAgICAgICAgICAg IGNvbnRpbnVlOwotCi0gICAgICAgIC8qIEZvdW5kIGEgc3VpdGFibGUgbWVtb3J5IHR5cGUgKi8K LSAgICAgICAgaW5kZXggPSBpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBpZiAoaW5k ZXggPCAwKSB7Ci0gICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIk5vIG1lbW9yeSB0 eXBlIGZvdW5kIGZvciBmbGFncyAweCV4XG4iLAotICAgICAgICAgICAgICAgcmVxX2ZsYWdzKTsK LSAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKLSAgICB9Ci0KLSAgICBhbGxvY19pbmZv Lm1lbW9yeVR5cGVJbmRleCA9IGluZGV4OwotCi0gICAgcmV0ID0gdmstPkFsbG9jYXRlTWVtb3J5 KGRldl9od2N0eC0+YWN0X2RldiwgJmFsbG9jX2luZm8sCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGRldl9od2N0eC0+YWxsb2MsIG1lbSk7Ci0gICAgaWYgKHJldCAhPSBWS19TVUNDRVNT KSB7Ci0gICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIkZhaWxlZCB0byBhbGxvY2F0 ZSBtZW1vcnk6ICVzXG4iLAotICAgICAgICAgICAgICAgZmZfdmtfcmV0MnN0cihyZXQpKTsKLSAg ICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKLSAgICB9Ci0KLSAgICAqbWVtX2ZsYWdzIHw9 IHAtPm1wcm9wcy5tZW1vcnlUeXBlc1tpbmRleF0ucHJvcGVydHlGbGFnczsKLQotICAgIHJldHVy biAwOwotfQotCi1zdGF0aWMgdm9pZCB2dWxrYW5fZnJlZV9pbnRlcm5hbChBVlZrRnJhbWUgKmYp Ci17Ci0gICAgYXZfdW51c2VkIEFWVmtGcmFtZUludGVybmFsICppbnRlcm5hbCA9IGYtPmludGVy bmFsOwotCi0jaWYgQ09ORklHX0NVREEKLSAgICBpZiAoaW50ZXJuYWwtPmN1ZGFfZmNfcmVmKSB7 Ci0gICAgICAgIEFWSFdGcmFtZXNDb250ZXh0ICpjdWRhX2ZjID0gKEFWSFdGcmFtZXNDb250ZXh0 ICopaW50ZXJuYWwtPmN1ZGFfZmNfcmVmLT5kYXRhOwotICAgICAgICBpbnQgcGxhbmVzID0gYXZf cGl4X2ZtdF9jb3VudF9wbGFuZXMoY3VkYV9mYy0+c3dfZm9ybWF0KTsKLSAgICAgICAgQVZIV0Rl dmljZUNvbnRleHQgKmN1ZGFfY3UgPSBjdWRhX2ZjLT5kZXZpY2VfY3R4OwotICAgICAgICBBVkNV REFEZXZpY2VDb250ZXh0ICpjdWRhX2RldiA9IGN1ZGFfY3UtPmh3Y3R4OwotICAgICAgICBBVkNV REFEZXZpY2VDb250ZXh0SW50ZXJuYWwgKmN1X2ludGVybmFsID0gY3VkYV9kZXYtPmludGVybmFs OwotICAgICAgICBDdWRhRnVuY3Rpb25zICpjdSA9IGN1X2ludGVybmFsLT5jdWRhX2RsOwotCi0g ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcGxhbmVzOyBpKyspIHsKLSAgICAgICAgICAgIGlm IChpbnRlcm5hbC0+Y3Vfc2VtW2ldKQotICAgICAgICAgICAgICAgIENIRUNLX0NVKGN1LT5jdURl c3Ryb3lFeHRlcm5hbFNlbWFwaG9yZShpbnRlcm5hbC0+Y3Vfc2VtW2ldKSk7Ci0gICAgICAgICAg ICBpZiAoaW50ZXJuYWwtPmN1X21tYVtpXSkKLSAgICAgICAgICAgICAgICBDSEVDS19DVShjdS0+ Y3VNaXBtYXBwZWRBcnJheURlc3Ryb3koaW50ZXJuYWwtPmN1X21tYVtpXSkpOwotICAgICAgICAg ICAgaWYgKGludGVybmFsLT5leHRfbWVtW2ldKQotICAgICAgICAgICAgICAgIENIRUNLX0NVKGN1 LT5jdURlc3Ryb3lFeHRlcm5hbE1lbW9yeShpbnRlcm5hbC0+ZXh0X21lbVtpXSkpOwotI2lmZGVm IF9XSU4zMgotICAgICAgICAgICAgaWYgKGludGVybmFsLT5leHRfc2VtX2hhbmRsZVtpXSkKLSAg ICAgICAgICAgICAgICBDbG9zZUhhbmRsZShpbnRlcm5hbC0+ZXh0X3NlbV9oYW5kbGVbaV0pOwot ICAgICAgICAgICAgaWYgKGludGVybmFsLT5leHRfbWVtX2hhbmRsZVtpXSkKLSAgICAgICAgICAg ICAgICBDbG9zZUhhbmRsZShpbnRlcm5hbC0+ZXh0X21lbV9oYW5kbGVbaV0pOwotI2VuZGlmCi0g ICAgICAgIH0KLQotICAgICAgICBhdl9idWZmZXJfdW5yZWYoJmludGVybmFsLT5jdWRhX2ZjX3Jl Zik7Ci0gICAgfQotI2VuZGlmCi0KLSAgICBwdGhyZWFkX211dGV4X2Rlc3Ryb3koJmludGVybmFs LT51cGRhdGVfbXV0ZXgpOwotICAgIGF2X2ZyZWVwKCZmLT5pbnRlcm5hbCk7Ci19Ci0KLXN0YXRp YyB2b2lkIHZ1bGthbl9mcmFtZV9mcmVlKEFWSFdGcmFtZXNDb250ZXh0ICpod2ZjLCBBVlZrRnJh bWUgKmYpCi17Ci0gICAgVnVsa2FuRGV2aWNlUHJpdiAqcCA9IGh3ZmMtPmRldmljZV9jdHgtPmh3 Y3R4OwotICAgIEFWVnVsa2FuRGV2aWNlQ29udGV4dCAqaHdjdHggPSAmcC0+cDsKLSAgICBGRlZ1 bGthbkZ1bmN0aW9ucyAqdmsgPSAmcC0+dmtjdHgudmtmbjsKLSAgICBpbnQgbmJfaW1hZ2VzID0g ZmZfdmtfY291bnRfaW1hZ2VzKGYpOwotICAgIGludCBuYl9zZW1zID0gMDsKLQotICAgIHdoaWxl IChuYl9zZW1zIDwgRkZfQVJSQVlfRUxFTVMoZi0+c2VtKSAmJiBmLT5zZW1bbmJfc2Vtc10pCi0g ICAgICAgIG5iX3NlbXMrKzsKLQotICAgIGlmIChuYl9zZW1zKSB7Ci0gICAgICAgIFZrU2VtYXBo b3JlV2FpdEluZm8gc2VtX3dhaXQgPSB7Ci0gICAgICAgICAgICAuc1R5cGUgICAgICAgICAgPSBW S19TVFJVQ1RVUkVfVFlQRV9TRU1BUEhPUkVfV0FJVF9JTkZPLAotICAgICAgICAgICAgLmZsYWdz ICAgICAgICAgID0gMHgwLAotICAgICAgICAgICAgLnBTZW1hcGhvcmVzICAgID0gZi0+c2VtLAot ICAgICAgICAgICAgLnBWYWx1ZXMgICAgICAgID0gZi0+c2VtX3ZhbHVlLAotICAgICAgICAgICAg LnNlbWFwaG9yZUNvdW50ID0gbmJfc2VtcywKLSAgICAgICAgfTsKLQotICAgICAgICB2ay0+V2Fp dFNlbWFwaG9yZXMoaHdjdHgtPmFjdF9kZXYsICZzZW1fd2FpdCwgVUlOVDY0X01BWCk7Ci0gICAg fQotCi0gICAgdnVsa2FuX2ZyZWVfaW50ZXJuYWwoZik7Ci0KLSAgICBmb3IgKGludCBpID0gMDsg aSA8IG5iX2ltYWdlczsgaSsrKSB7Ci0gICAgICAgIHZrLT5EZXN0cm95SW1hZ2UoaHdjdHgtPmFj dF9kZXYsICAgICBmLT5pbWdbaV0sIGh3Y3R4LT5hbGxvYyk7Ci0gICAgICAgIHZrLT5GcmVlTWVt b3J5KGh3Y3R4LT5hY3RfZGV2LCAgICAgICBmLT5tZW1baV0sIGh3Y3R4LT5hbGxvYyk7Ci0gICAg ICAgIHZrLT5EZXN0cm95U2VtYXBob3JlKGh3Y3R4LT5hY3RfZGV2LCBmLT5zZW1baV0sIGh3Y3R4 LT5hbGxvYyk7Ci0gICAgfQotCi0gICAgYXZfZnJlZShmKTsKLX0KLQotc3RhdGljIHZvaWQgdnVs a2FuX2ZyYW1lX2ZyZWVfY2Iodm9pZCAqb3BhcXVlLCB1aW50OF90ICpkYXRhKQotewotICAgIHZ1 bGthbl9mcmFtZV9mcmVlKG9wYXF1ZSwgKEFWVmtGcmFtZSopZGF0YSk7Ci19Ci0KLXN0YXRpYyBp bnQgYWxsb2NfYmluZF9tZW0oQVZIV0ZyYW1lc0NvbnRleHQgKmh3ZmMsIEFWVmtGcmFtZSAqZiwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYWxsb2NfcG5leHQsIHNpemVfdCBhbGxv Y19wbmV4dF9zdHJpZGUpCi17Ci0gICAgaW50IGltZ19jbnQgPSAwLCBlcnI7Ci0gICAgVmtSZXN1 bHQgcmV0OwotICAgIEFWSFdEZXZpY2VDb250ZXh0ICpjdHggPSBod2ZjLT5kZXZpY2VfY3R4Owot ICAgIFZ1bGthbkRldmljZVByaXYgKnAgPSBjdHgtPmh3Y3R4OwotICAgIEFWVnVsa2FuRGV2aWNl Q29udGV4dCAqaHdjdHggPSAmcC0+cDsKLSAgICBGRlZ1bGthbkZ1bmN0aW9ucyAqdmsgPSAmcC0+ dmtjdHgudmtmbjsKLSAgICBWa0JpbmRJbWFnZU1lbW9yeUluZm8gYmluZF9pbmZvW0FWX05VTV9E QVRBX1BPSU5URVJTXSA9IHsgeyAwIH0gfTsKLQotICAgIHdoaWxlIChmLT5pbWdbaW1nX2NudF0p IHsKLSAgICAgICAgaW50IHVzZV9kZWRfbWVtOwotICAgICAgICBWa0ltYWdlTWVtb3J5UmVxdWly ZW1lbnRzSW5mbzIgcmVxX2Rlc2MgPSB7Ci0gICAgICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RV UkVfVFlQRV9JTUFHRV9NRU1PUllfUkVRVUlSRU1FTlRTX0lORk9fMiwKLSAgICAgICAgICAgIC5p bWFnZSA9IGYtPmltZ1tpbWdfY250XSwKLSAgICAgICAgfTsKLSAgICAgICAgVmtNZW1vcnlEZWRp Y2F0ZWRBbGxvY2F0ZUluZm8gZGVkX2FsbG9jID0gewotICAgICAgICAgICAgLnNUeXBlID0gVktf U1RSVUNUVVJFX1RZUEVfTUVNT1JZX0RFRElDQVRFRF9BTExPQ0FURV9JTkZPLAotICAgICAgICAg ICAgLnBOZXh0ID0gKHZvaWQgKikoKCh1aW50OF90ICopYWxsb2NfcG5leHQpICsgaW1nX2NudCph bGxvY19wbmV4dF9zdHJpZGUpLAotICAgICAgICB9OwotICAgICAgICBWa01lbW9yeURlZGljYXRl ZFJlcXVpcmVtZW50cyBkZWRfcmVxID0gewotICAgICAgICAgICAgLnNUeXBlID0gVktfU1RSVUNU VVJFX1RZUEVfTUVNT1JZX0RFRElDQVRFRF9SRVFVSVJFTUVOVFMsCi0gICAgICAgIH07Ci0gICAg ICAgIFZrTWVtb3J5UmVxdWlyZW1lbnRzMiByZXEgPSB7Ci0gICAgICAgICAgICAuc1R5cGUgPSBW S19TVFJVQ1RVUkVfVFlQRV9NRU1PUllfUkVRVUlSRU1FTlRTXzIsCi0gICAgICAgICAgICAucE5l eHQgPSAmZGVkX3JlcSwKLSAgICAgICAgfTsKLQotICAgICAgICB2ay0+R2V0SW1hZ2VNZW1vcnlS ZXF1aXJlbWVudHMyKGh3Y3R4LT5hY3RfZGV2LCAmcmVxX2Rlc2MsICZyZXEpOwotCi0gICAgICAg IGlmIChmLT50aWxpbmcgPT0gVktfSU1BR0VfVElMSU5HX0xJTkVBUikKLSAgICAgICAgICAgIHJl cS5tZW1vcnlSZXF1aXJlbWVudHMuc2l6ZSA9IEZGQUxJR04ocmVxLm1lbW9yeVJlcXVpcmVtZW50 cy5zaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBwLT5wcm9wcy5wcm9wZXJ0aWVzLmxpbWl0cy5taW5NZW1vcnlNYXBBbGlnbm1lbnQpOwotCi0g ICAgICAgIC8qIEluIGNhc2UgdGhlIGltcGxlbWVudGF0aW9uIHByZWZlcnMvcmVxdWlyZXMgZGVk aWNhdGVkIGFsbG9jYXRpb24gKi8KLSAgICAgICAgdXNlX2RlZF9tZW0gPSBkZWRfcmVxLnByZWZl cnNEZWRpY2F0ZWRBbGxvY2F0aW9uIHwKLSAgICAgICAgICAgICAgICAgICAgICBkZWRfcmVxLnJl cXVpcmVzRGVkaWNhdGVkQWxsb2NhdGlvbjsKLSAgICAgICAgaWYgKHVzZV9kZWRfbWVtKQotICAg ICAgICAgICAgZGVkX2FsbG9jLmltYWdlID0gZi0+aW1nW2ltZ19jbnRdOwotCi0gICAgICAgIC8q IEFsbG9jYXRlIG1lbW9yeSAqLwotICAgICAgICBpZiAoKGVyciA9IGFsbG9jX21lbShjdHgsICZy ZXEubWVtb3J5UmVxdWlyZW1lbnRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmLT50 aWxpbmcgPT0gVktfSU1BR0VfVElMSU5HX0xJTkVBUiA/Ci0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFZLX01FTU9SWV9QUk9QRVJUWV9IT1NUX1ZJU0lCTEVfQklUIDoKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgVktfTUVNT1JZX1BST1BFUlRZX0RFVklDRV9MT0NBTF9CSVQsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZV9kZWRfbWVtID8gJmRlZF9hbGxvYyA6ICh2 b2lkICopZGVkX2FsbG9jLnBOZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZi0+ ZmxhZ3MsICZmLT5tZW1baW1nX2NudF0pKSkKLSAgICAgICAgICAgIHJldHVybiBlcnI7Ci0KLSAg ICAgICAgZi0+c2l6ZVtpbWdfY250XSA9IHJlcS5tZW1vcnlSZXF1aXJlbWVudHMuc2l6ZTsKLSAg ICAgICAgYmluZF9pbmZvW2ltZ19jbnRdLnNUeXBlICA9IFZLX1NUUlVDVFVSRV9UWVBFX0JJTkRf SU1BR0VfTUVNT1JZX0lORk87Ci0gICAgICAgIGJpbmRfaW5mb1tpbWdfY250XS5pbWFnZSAgPSBm LT5pbWdbaW1nX2NudF07Ci0gICAgICAgIGJpbmRfaW5mb1tpbWdfY250XS5tZW1vcnkgPSBmLT5t ZW1baW1nX2NudF07Ci0KLSAgICAgICAgaW1nX2NudCsrOwotICAgIH0KLQotICAgIC8qIEJpbmQg dGhlIGFsbG9jYXRlZCBtZW1vcnkgdG8gdGhlIGltYWdlcyAqLwotICAgIHJldCA9IHZrLT5CaW5k SW1hZ2VNZW1vcnkyKGh3Y3R4LT5hY3RfZGV2LCBpbWdfY250LCBiaW5kX2luZm8pOwotICAgIGlm IChyZXQgIT0gVktfU1VDQ0VTUykgewotICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1Is ICJGYWlsZWQgdG8gYmluZCBtZW1vcnk6ICVzXG4iLAotICAgICAgICAgICAgICAgZmZfdmtfcmV0 MnN0cihyZXQpKTsKLSAgICAgICAgcmV0dXJuIEFWRVJST1JfRVhURVJOQUw7Ci0gICAgfQotCi0g ICAgcmV0dXJuIDA7Ci19Ci0KLWVudW0gUHJlcE1vZGUgewotICAgIFBSRVBfTU9ERV9HRU5FUkFM LAotICAgIFBSRVBfTU9ERV9XUklURSwKLSAgICBQUkVQX01PREVfRVhURVJOQUxfRVhQT1JULAot ICAgIFBSRVBfTU9ERV9FWFRFUk5BTF9JTVBPUlQsCi0gICAgUFJFUF9NT0RFX0RFQ09ESU5HX0RT VCwKLSAgICBQUkVQX01PREVfREVDT0RJTkdfRFBCLAotICAgIFBSRVBfTU9ERV9FTkNPRElOR19E UEIsCi19OwotCi1zdGF0aWMgaW50IHByZXBhcmVfZnJhbWUoQVZIV0ZyYW1lc0NvbnRleHQgKmh3 ZmMsIEZGVmtFeGVjUG9vbCAqZWN0eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBBVlZrRnJh bWUgKmZyYW1lLCBlbnVtIFByZXBNb2RlIHBtb2RlKQotewotICAgIGludCBlcnI7Ci0gICAgVnVs a2FuRGV2aWNlUHJpdiAqcCA9IGh3ZmMtPmRldmljZV9jdHgtPmh3Y3R4OwotICAgIEZGVnVsa2Fu RnVuY3Rpb25zICp2ayA9ICZwLT52a2N0eC52a2ZuOwotICAgIFZrSW1hZ2VNZW1vcnlCYXJyaWVy MiBpbWdfYmFyW0FWX05VTV9EQVRBX1BPSU5URVJTXTsKLSAgICBpbnQgbmJfaW1nX2JhciA9IDA7 Ci0KLSAgICB1aW50MzJfdCBkc3RfcWYgPSBwLT5uYl9pbWdfcWZzID4gMSA/IFZLX1FVRVVFX0ZB TUlMWV9JR05PUkVEIDogcC0+aW1nX3Fmc1swXTsKLSAgICBWa0ltYWdlTGF5b3V0IG5ld19sYXlv dXQ7Ci0gICAgVmtBY2Nlc3NGbGFnczIgbmV3X2FjY2VzczsKLSAgICBWa1BpcGVsaW5lU3RhZ2VG bGFnQml0czIgc3JjX3N0YWdlID0gVktfUElQRUxJTkVfU1RBR0VfMl9OT05FOwotCi0gICAgLyog VGhpcyBpcyBkaXJ0eSAtIGJ1dCBpdCB3b3Jrcy4gVGhlIHZ1bGthbi5jIGRlcGVuZGVuY3kgc3lz dGVtIGRvZXNuJ3QKLSAgICAgKiBmcmVlIG5vbi1yZWZjb3VudGVkIGZyYW1lcywgYW5kIG5vbi1y ZWZjb3VudGVkIGhhcmR3YXJlIGZyYW1lcyBjYW5ub3QKLSAgICAgKiBoYXBwZW4gYW55d2hlcmUg b3V0c2lkZSBvZiBoZXJlLiAqLwotICAgIEFWQnVmZmVyUmVmIHRtcF9yZWYgPSB7Ci0gICAgICAg IC5kYXRhID0gKHVpbnQ4X3QgKilod2ZjLAotICAgIH07Ci0gICAgQVZGcmFtZSB0bXBfZnJhbWUg PSB7Ci0gICAgICAgIC5kYXRhWzBdID0gKHVpbnQ4X3QgKilmcmFtZSwKLSAgICAgICAgLmh3X2Zy YW1lc19jdHggPSAmdG1wX3JlZiwKLSAgICB9OwotCi0gICAgVmtDb21tYW5kQnVmZmVyIGNtZF9i dWY7Ci0gICAgRkZWa0V4ZWNDb250ZXh0ICpleGVjID0gZmZfdmtfZXhlY19nZXQoJnAtPnZrY3R4 LCBlY3R4KTsKLSAgICBjbWRfYnVmID0gZXhlYy0+YnVmOwotICAgIGZmX3ZrX2V4ZWNfc3RhcnQo JnAtPnZrY3R4LCBleGVjKTsKLQotICAgIGVyciA9IGZmX3ZrX2V4ZWNfYWRkX2RlcF9mcmFtZSgm cC0+dmtjdHgsIGV4ZWMsICZ0bXBfZnJhbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFZLX1BJUEVMSU5FX1NUQUdFXzJfTk9ORSwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgVktfUElQRUxJTkVfU1RBR0VfMl9BTExfQ09NTUFORFNfQklUKTsKLSAgICBp ZiAoZXJyIDwgMCkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHN3aXRjaCAocG1vZGUpIHsK LSAgICBjYXNlIFBSRVBfTU9ERV9HRU5FUkFMOgotICAgICAgICBuZXdfbGF5b3V0ID0gVktfSU1B R0VfTEFZT1VUX0dFTkVSQUw7Ci0gICAgICAgIG5ld19hY2Nlc3MgPSBWS19BQ0NFU1NfVFJBTlNG RVJfV1JJVEVfQklUOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBSRVBfTU9ERV9XUklURToK LSAgICAgICAgbmV3X2xheW91dCA9IFZLX0lNQUdFX0xBWU9VVF9UUkFOU0ZFUl9EU1RfT1BUSU1B TDsKLSAgICAgICAgbmV3X2FjY2VzcyA9IFZLX0FDQ0VTU19UUkFOU0ZFUl9XUklURV9CSVQ7Ci0g ICAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJFUF9NT0RFX0VYVEVSTkFMX0lNUE9SVDoKLSAgICAg ICAgbmV3X2xheW91dCA9IFZLX0lNQUdFX0xBWU9VVF9HRU5FUkFMOwotICAgICAgICBuZXdfYWNj ZXNzID0gVktfQUNDRVNTX01FTU9SWV9SRUFEX0JJVCB8IFZLX0FDQ0VTU19NRU1PUllfV1JJVEVf QklUOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBSRVBfTU9ERV9FWFRFUk5BTF9FWFBPUlQ6 Ci0gICAgICAgIG5ld19sYXlvdXQgPSBWS19JTUFHRV9MQVlPVVRfR0VORVJBTDsKLSAgICAgICAg bmV3X2FjY2VzcyA9IFZLX0FDQ0VTU19NRU1PUllfUkVBRF9CSVQgfCBWS19BQ0NFU1NfTUVNT1JZ X1dSSVRFX0JJVDsKLSAgICAgICAgZHN0X3FmICAgICA9IFZLX1FVRVVFX0ZBTUlMWV9FWFRFUk5B TF9LSFI7Ci0gICAgICAgIHNyY19zdGFnZSAgPSBWS19QSVBFTElORV9TVEFHRV8yX0FMTF9DT01N QU5EU19CSVQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJFUF9NT0RFX0RFQ09ESU5HX0RT VDoKLSAgICAgICAgbmV3X2xheW91dCA9IFZLX0lNQUdFX0xBWU9VVF9WSURFT19ERUNPREVfRFNU X0tIUjsKLSAgICAgICAgbmV3X2FjY2VzcyA9IFZLX0FDQ0VTU19UUkFOU0ZFUl9XUklURV9CSVQ7 Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJFUF9NT0RFX0RFQ09ESU5HX0RQQjoKLSAgICAg ICAgbmV3X2xheW91dCA9IFZLX0lNQUdFX0xBWU9VVF9WSURFT19ERUNPREVfRFBCX0tIUjsKLSAg ICAgICAgbmV3X2FjY2VzcyA9IFZLX0FDQ0VTU19UUkFOU0ZFUl9SRUFEX0JJVCB8IFZLX0FDQ0VT U19UUkFOU0ZFUl9XUklURV9CSVQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUFJFUF9NT0RF X0VOQ09ESU5HX0RQQjoKLSAgICAgICAgbmV3X2xheW91dCA9IFZLX0lNQUdFX0xBWU9VVF9WSURF T19FTkNPREVfRFBCX0tIUjsKLSAgICAgICAgbmV3X2FjY2VzcyA9IFZLX0FDQ0VTU19UUkFOU0ZF Ul9SRUFEX0JJVCB8IFZLX0FDQ0VTU19UUkFOU0ZFUl9XUklURV9CSVQ7Ci0gICAgICAgIGJyZWFr OwotICAgIH0KLQotICAgIGZmX3ZrX2ZyYW1lX2JhcnJpZXIoJnAtPnZrY3R4LCBleGVjLCAmdG1w X2ZyYW1lLCBpbWdfYmFyLCAmbmJfaW1nX2JhciwKLSAgICAgICAgICAgICAgICAgICAgICAgIHNy Y19zdGFnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIFZLX1BJUEVMSU5FX1NUQUdFXzJfQUxM X0NPTU1BTkRTX0JJVCwKLSAgICAgICAgICAgICAgICAgICAgICAgIG5ld19hY2Nlc3MsIG5ld19s YXlvdXQsIGRzdF9xZik7Ci0KLSAgICB2ay0+Q21kUGlwZWxpbmVCYXJyaWVyMihjbWRfYnVmLCAm KFZrRGVwZW5kZW5jeUluZm8pIHsKLSAgICAgICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9U WVBFX0RFUEVOREVOQ1lfSU5GTywKLSAgICAgICAgICAgIC5wSW1hZ2VNZW1vcnlCYXJyaWVycyA9 IGltZ19iYXIsCi0gICAgICAgICAgICAuaW1hZ2VNZW1vcnlCYXJyaWVyQ291bnQgPSBuYl9pbWdf YmFyLAotICAgICAgICB9KTsKLQotICAgIGVyciA9IGZmX3ZrX2V4ZWNfc3VibWl0KCZwLT52a2N0 eCwgZXhlYyk7Ci0gICAgaWYgKGVyciA8IDApCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICAv KiBXZSBjYW4gZG8gdGhpcyBiZWNhdXNlIHRoZXJlIGFyZSBubyByZWFsIGRlcGVuZGVuY2llcyAq LwotICAgIGZmX3ZrX2V4ZWNfZGlzY2FyZF9kZXBzKCZwLT52a2N0eCwgZXhlYyk7Ci0KLSAgICBy ZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGdldF9wbGFuZV93aCh1aW50MzJfdCAq dywgdWludDMyX3QgKmgsIGVudW0gQVZQaXhlbEZvcm1hdCBmb3JtYXQsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGludCBmcmFtZV93LCBpbnQgZnJhbWVfaCwgaW50IHBsYW5lKQot ewotICAgIGNvbnN0IEFWUGl4Rm10RGVzY3JpcHRvciAqZGVzYyA9IGF2X3BpeF9mbXRfZGVzY19n ZXQoZm9ybWF0KTsKLQotICAgIC8qIEN1cnJlbnRseSBhbHdheXMgdHJ1ZSB1bmxlc3MgZ3JheSAr IGFscGhhIHN1cHBvcnQgaXMgYWRkZWQgKi8KLSAgICBpZiAoIXBsYW5lIHx8IChwbGFuZSA9PSAz KSB8fCBkZXNjLT5mbGFncyAmIEFWX1BJWF9GTVRfRkxBR19SR0IgfHwKLSAgICAgICAgIShkZXNj LT5mbGFncyAmIEFWX1BJWF9GTVRfRkxBR19QTEFOQVIpKSB7Ci0gICAgICAgICp3ID0gZnJhbWVf dzsKLSAgICAgICAgKmggPSBmcmFtZV9oOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg KncgPSBBVl9DRUlMX1JTSElGVChmcmFtZV93LCBkZXNjLT5sb2cyX2Nocm9tYV93KTsKLSAgICAq aCA9IEFWX0NFSUxfUlNISUZUKGZyYW1lX2gsIGRlc2MtPmxvZzJfY2hyb21hX2gpOwotfQotCi1z dGF0aWMgaW50IGNyZWF0ZV9mcmFtZShBVkhXRnJhbWVzQ29udGV4dCAqaHdmYywgQVZWa0ZyYW1l ICoqZnJhbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICBWa0ltYWdlVGlsaW5nIHRpbGluZywg VmtJbWFnZVVzYWdlRmxhZ0JpdHMgdXNhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICBWa0lt YWdlQ3JlYXRlRmxhZ3MgZmxhZ3MsIGludCBuYl9sYXllcnMsCi0gICAgICAgICAgICAgICAgICAg ICAgICB2b2lkICpjcmVhdGVfcG5leHQpCi17Ci0gICAgaW50IGVycjsKLSAgICBWa1Jlc3VsdCBy ZXQ7Ci0gICAgQVZWdWxrYW5GcmFtZXNDb250ZXh0ICpod2ZjX3ZrID0gaHdmYy0+aHdjdHg7Ci0g ICAgQVZIV0RldmljZUNvbnRleHQgKmN0eCA9IGh3ZmMtPmRldmljZV9jdHg7Ci0gICAgVnVsa2Fu RGV2aWNlUHJpdiAqcCA9IGN0eC0+aHdjdHg7Ci0gICAgQVZWdWxrYW5EZXZpY2VDb250ZXh0ICpo d2N0eCA9ICZwLT5wOwotICAgIEZGVnVsa2FuRnVuY3Rpb25zICp2ayA9ICZwLT52a2N0eC52a2Zu OwotICAgIEFWVmtGcmFtZSAqZjsKLQotICAgIFZrU2VtYXBob3JlVHlwZUNyZWF0ZUluZm8gc2Vt X3R5cGVfaW5mbyA9IHsKLSAgICAgICAgLnNUeXBlICAgICAgICAgPSBWS19TVFJVQ1RVUkVfVFlQ RV9TRU1BUEhPUkVfVFlQRV9DUkVBVEVfSU5GTywKLSAgICAgICAgLnNlbWFwaG9yZVR5cGUgPSBW S19TRU1BUEhPUkVfVFlQRV9USU1FTElORSwKLSAgICAgICAgLmluaXRpYWxWYWx1ZSAgPSAwLAot ICAgIH07Ci0gICAgVmtTZW1hcGhvcmVDcmVhdGVJbmZvIHNlbV9zcGF3biA9IHsKLSAgICAgICAg LnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfU0VNQVBIT1JFX0NSRUFURV9JTkZPLAotICAgICAg ICAucE5leHQgPSAmc2VtX3R5cGVfaW5mbywKLSAgICB9OwotCi0gICAgVmtFeHBvcnRTZW1hcGhv cmVDcmVhdGVJbmZvIGV4dF9zZW1faW5mb19vcGFxdWUgPSB7Ci0gICAgICAgIC5zVHlwZSA9IFZL X1NUUlVDVFVSRV9UWVBFX0VYUE9SVF9TRU1BUEhPUkVfQ1JFQVRFX0lORk8sCi0jaWZkZWYgX1dJ TjMyCi0gICAgICAgIC5oYW5kbGVUeXBlcyA9IElzV2luZG93czhPckdyZWF0ZXIoKQotICAgICAg ICAgICAgPyBWS19FWFRFUk5BTF9TRU1BUEhPUkVfSEFORExFX1RZUEVfT1BBUVVFX1dJTjMyX0JJ VAotICAgICAgICAgICAgOiBWS19FWFRFUk5BTF9TRU1BUEhPUkVfSEFORExFX1RZUEVfT1BBUVVF X1dJTjMyX0tNVF9CSVQsCi0jZWxzZQotICAgICAgICAuaGFuZGxlVHlwZXMgPSBWS19FWFRFUk5B TF9TRU1BUEhPUkVfSEFORExFX1RZUEVfT1BBUVVFX0ZEX0JJVCwKLSNlbmRpZgotICAgIH07Ci0K LSAgICAvKiBDaGVjayBpZiBleHBvcnRpbmcgaXMgc3VwcG9ydGVkIGJlZm9yZSBjaGFpbmluZyBh bnkgc3RydWN0cyAqLwotICAgIGlmIChwLT5leHRfc2VtX3Byb3BzX29wYXF1ZS5leHRlcm5hbFNl bWFwaG9yZUZlYXR1cmVzICYgVktfRVhURVJOQUxfU0VNQVBIT1JFX0ZFQVRVUkVfRVhQT1JUQUJM RV9CSVQpIHsKLSAgICAgICAgaWYgKHAtPnZrY3R4LmV4dGVuc2lvbnMgJiAoRkZfVktfRVhUX0VY VEVSTkFMX1dJTjMyX1NFTSB8IEZGX1ZLX0VYVF9FWFRFUk5BTF9GRF9TRU0pKQotICAgICAgICAg ICAgZmZfdmtfbGlua19zdHJ1Y3QoJnNlbV90eXBlX2luZm8sICZleHRfc2VtX2luZm9fb3BhcXVl KTsKLSAgICB9Ci0KLSAgICBmID0gYXZfdmtfZnJhbWVfYWxsb2MoKTsKLSAgICBpZiAoIWYpIHsK LSAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiVW5hYmxlIHRvIGFsbG9jYXRlIG1l bW9yeSBmb3IgQVZWa0ZyYW1lIVxuIik7Ci0gICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7 Ci0gICAgfQotCi0gICAgLy8gVE9ETzogY2hlY2sgd2lkdGggYW5kIGhlaWdodCBmb3IgYWxpZ25t ZW50IGluIGNhc2Ugb2YgbXVsdGlwbGFuYXIgKG11c3QgYmUgbW9kLTIgaWYgc3Vic2FtcGxlZCkK LQotICAgIC8qIENyZWF0ZSB0aGUgaW1hZ2VzICovCi0gICAgZm9yIChpbnQgaSA9IDA7IChod2Zj X3ZrLT5mb3JtYXRbaV0gIT0gVktfRk9STUFUX1VOREVGSU5FRCk7IGkrKykgewotICAgICAgICBW a0ltYWdlQ3JlYXRlSW5mbyBjcmVhdGVfaW5mbyA9IHsKLSAgICAgICAgICAgIC5zVHlwZSAgICAg ICAgICAgICAgICAgPSBWS19TVFJVQ1RVUkVfVFlQRV9JTUFHRV9DUkVBVEVfSU5GTywKLSAgICAg ICAgICAgIC5wTmV4dCAgICAgICAgICAgICAgICAgPSBjcmVhdGVfcG5leHQsCi0gICAgICAgICAg ICAuaW1hZ2VUeXBlICAgICAgICAgICAgID0gVktfSU1BR0VfVFlQRV8yRCwKLSAgICAgICAgICAg IC5mb3JtYXQgICAgICAgICAgICAgICAgPSBod2ZjX3ZrLT5mb3JtYXRbaV0sCi0gICAgICAgICAg ICAuZXh0ZW50LmRlcHRoICAgICAgICAgID0gMSwKLSAgICAgICAgICAgIC5taXBMZXZlbHMgICAg ICAgICAgICAgPSAxLAotICAgICAgICAgICAgLmFycmF5TGF5ZXJzICAgICAgICAgICA9IG5iX2xh eWVycywKLSAgICAgICAgICAgIC5mbGFncyAgICAgICAgICAgICAgICAgPSBmbGFncywKLSAgICAg ICAgICAgIC50aWxpbmcgICAgICAgICAgICAgICAgPSB0aWxpbmcsCi0gICAgICAgICAgICAuaW5p dGlhbExheW91dCAgICAgICAgID0gVktfSU1BR0VfTEFZT1VUX1VOREVGSU5FRCwKLSAgICAgICAg ICAgIC51c2FnZSAgICAgICAgICAgICAgICAgPSB1c2FnZSwKLSAgICAgICAgICAgIC5zYW1wbGVz ICAgICAgICAgICAgICAgPSBWS19TQU1QTEVfQ09VTlRfMV9CSVQsCi0gICAgICAgICAgICAucFF1 ZXVlRmFtaWx5SW5kaWNlcyAgID0gcC0+aW1nX3FmcywKLSAgICAgICAgICAgIC5xdWV1ZUZhbWls eUluZGV4Q291bnQgPSBwLT5uYl9pbWdfcWZzLAotICAgICAgICAgICAgLnNoYXJpbmdNb2RlICAg ICAgICAgICA9IHAtPm5iX2ltZ19xZnMgPiAxID8gVktfU0hBUklOR19NT0RFX0NPTkNVUlJFTlQg OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgVktfU0hBUklOR19NT0RFX0VYQ0xVU0lWRSwKLSAgICAgICAgfTsKLQotICAgICAgICBnZXRf cGxhbmVfd2goJmNyZWF0ZV9pbmZvLmV4dGVudC53aWR0aCwgJmNyZWF0ZV9pbmZvLmV4dGVudC5o ZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICBod2ZjLT5zd19mb3JtYXQsIGh3ZmMtPndpZHRo LCBod2ZjLT5oZWlnaHQsIGkpOwotCi0gICAgICAgIHJldCA9IHZrLT5DcmVhdGVJbWFnZShod2N0 eC0+YWN0X2RldiwgJmNyZWF0ZV9pbmZvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aHdjdHgtPmFsbG9jLCAmZi0+aW1nW2ldKTsKLSAgICAgICAgaWYgKHJldCAhPSBWS19TVUNDRVNT KSB7Ci0gICAgICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJJbWFnZSBjcmVhdGlv biBmYWlsdXJlOiAlc1xuIiwKLSAgICAgICAgICAgICAgICAgICBmZl92a19yZXQyc3RyKHJldCkp OwotICAgICAgICAgICAgZXJyID0gQVZFUlJPUihFSU5WQUwpOwotICAgICAgICAgICAgZ290byBm YWlsOwotICAgICAgICB9Ci0KLSAgICAgICAgLyogQ3JlYXRlIHNlbWFwaG9yZSAqLwotICAgICAg ICByZXQgPSB2ay0+Q3JlYXRlU2VtYXBob3JlKGh3Y3R4LT5hY3RfZGV2LCAmc2VtX3NwYXduLAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh3Y3R4LT5hbGxvYywgJmYtPnNlbVtp XSk7Ci0gICAgICAgIGlmIChyZXQgIT0gVktfU1VDQ0VTUykgewotICAgICAgICAgICAgYXZfbG9n KGh3Y3R4LCBBVl9MT0dfRVJST1IsICJGYWlsZWQgdG8gY3JlYXRlIHNlbWFwaG9yZTogJXNcbiIs Ci0gICAgICAgICAgICAgICAgICAgZmZfdmtfcmV0MnN0cihyZXQpKTsKLSAgICAgICAgICAgIGVy ciA9IEFWRVJST1JfRVhURVJOQUw7Ci0gICAgICAgICAgICBnb3RvIGZhaWw7Ci0gICAgICAgIH0K LQotICAgICAgICBmLT5xdWV1ZV9mYW1pbHlbaV0gPSBwLT5uYl9pbWdfcWZzID4gMSA/IFZLX1FV RVVFX0ZBTUlMWV9JR05PUkVEIDogcC0+aW1nX3Fmc1swXTsKLSAgICAgICAgZi0+bGF5b3V0W2ld ID0gY3JlYXRlX2luZm8uaW5pdGlhbExheW91dDsKLSAgICAgICAgZi0+YWNjZXNzW2ldID0gMHgw OwotICAgICAgICBmLT5zZW1fdmFsdWVbaV0gPSAwOwotICAgIH0KLQotICAgIGYtPmZsYWdzICAg ICA9IDB4MDsKLSAgICBmLT50aWxpbmcgICAgPSB0aWxpbmc7Ci0KLSAgICAqZnJhbWUgPSBmOwot ICAgIHJldHVybiAwOwotCi1mYWlsOgotICAgIHZ1bGthbl9mcmFtZV9mcmVlKGh3ZmMsIGYpOwot ICAgIHJldHVybiBlcnI7Ci19Ci0KLS8qIENoZWNrcyBpZiBhbiBleHBvcnQgZmxhZyBpcyBlbmFi bGVkLCBhbmQgaWYgaXQgaXMgT1JzIGl0IHdpdGggKmlleHAgKi8KLXN0YXRpYyB2b2lkIHRyeV9l eHBvcnRfZmxhZ3MoQVZIV0ZyYW1lc0NvbnRleHQgKmh3ZmMsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFZrRXh0ZXJuYWxNZW1vcnlIYW5kbGVUeXBlRmxhZ3MgKmNvbXBfaGFuZGxlX3R5 cGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWa0V4dGVybmFsTWVtb3J5SGFuZGxl VHlwZUZsYWdCaXRzICppZXhwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWa0V4dGVy bmFsTWVtb3J5SGFuZGxlVHlwZUZsYWdCaXRzIGV4cCkKLXsKLSAgICBWa1Jlc3VsdCByZXQ7Ci0g ICAgQVZWdWxrYW5GcmFtZXNDb250ZXh0ICpod2N0eCA9IGh3ZmMtPmh3Y3R4OwotICAgIFZ1bGth bkRldmljZVByaXYgKnAgPSBod2ZjLT5kZXZpY2VfY3R4LT5od2N0eDsKLSAgICBBVlZ1bGthbkRl dmljZUNvbnRleHQgKmRldl9od2N0eCA9ICZwLT5wOwotICAgIEZGVnVsa2FuRnVuY3Rpb25zICp2 ayA9ICZwLT52a2N0eC52a2ZuOwotCi0gICAgY29uc3QgVmtJbWFnZURybUZvcm1hdE1vZGlmaWVy TGlzdENyZWF0ZUluZm9FWFQgKmRybV9tb2RfaW5mbyA9Ci0gICAgICAgIGZmX3ZrX2ZpbmRfc3Ry dWN0KGh3Y3R4LT5jcmVhdGVfcG5leHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFZLX1NU UlVDVFVSRV9UWVBFX0lNQUdFX0RSTV9GT1JNQVRfTU9ESUZJRVJfTElTVF9DUkVBVEVfSU5GT19F WFQpOwotICAgIGludCBoYXNfbW9kcyA9IGh3Y3R4LT50aWxpbmcgPT0gVktfSU1BR0VfVElMSU5H X0RSTV9GT1JNQVRfTU9ESUZJRVJfRVhUICYmIGRybV9tb2RfaW5mbzsKLSAgICBpbnQgbmJfbW9k czsKLQotICAgIFZrRXh0ZXJuYWxJbWFnZUZvcm1hdFByb3BlcnRpZXMgZXByb3BzID0gewotICAg ICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9FWFRFUk5BTF9JTUFHRV9GT1JNQVRfUFJP UEVSVElFU19LSFIsCi0gICAgfTsKLSAgICBWa0ltYWdlRm9ybWF0UHJvcGVydGllczIgcHJvcHMg PSB7Ci0gICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX0lNQUdFX0ZPUk1BVF9QUk9Q RVJUSUVTXzIsCi0gICAgICAgIC5wTmV4dCA9ICZlcHJvcHMsCi0gICAgfTsKLSAgICBWa1BoeXNp Y2FsRGV2aWNlSW1hZ2VEcm1Gb3JtYXRNb2RpZmllckluZm9FWFQgcGh5X2Rldl9tb2RfaW5mbyA9 IHsKLSAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfUEhZU0lDQUxfREVWSUNFX0lN QUdFX0RSTV9GT1JNQVRfTU9ESUZJRVJfSU5GT19FWFQsCi0gICAgICAgIC5wTmV4dCA9IE5VTEws Ci0gICAgICAgIC5wUXVldWVGYW1pbHlJbmRpY2VzICAgPSBwLT5pbWdfcWZzLAotICAgICAgICAu cXVldWVGYW1pbHlJbmRleENvdW50ID0gcC0+bmJfaW1nX3FmcywKLSAgICAgICAgLnNoYXJpbmdN b2RlICAgICAgICAgICA9IHAtPm5iX2ltZ19xZnMgPiAxID8gVktfU0hBUklOR19NT0RFX0NPTkNV UlJFTlQgOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBWS19TSEFSSU5HX01PREVfRVhDTFVTSVZFLAotICAgIH07Ci0gICAgVmtQaHlzaWNhbERl dmljZUV4dGVybmFsSW1hZ2VGb3JtYXRJbmZvIGVuZXh0ID0gewotICAgICAgICAuc1R5cGUgPSBW S19TVFJVQ1RVUkVfVFlQRV9QSFlTSUNBTF9ERVZJQ0VfRVhURVJOQUxfSU1BR0VfRk9STUFUX0lO Rk8sCi0gICAgICAgIC5oYW5kbGVUeXBlID0gZXhwLAotICAgICAgICAucE5leHQgPSBoYXNfbW9k cyA/ICZwaHlfZGV2X21vZF9pbmZvIDogTlVMTCwKLSAgICB9OwotICAgIFZrUGh5c2ljYWxEZXZp Y2VJbWFnZUZvcm1hdEluZm8yIHBpbmZvID0gewotICAgICAgICAuc1R5cGUgID0gVktfU1RSVUNU VVJFX1RZUEVfUEhZU0lDQUxfREVWSUNFX0lNQUdFX0ZPUk1BVF9JTkZPXzIsCi0gICAgICAgIC5w TmV4dCAgPSAhZXhwID8gTlVMTCA6ICZlbmV4dCwKLSAgICAgICAgLmZvcm1hdCA9IHZrX2ZpbmRf Zm9ybWF0X2VudHJ5KGh3ZmMtPnN3X2Zvcm1hdCktPnZrZiwKLSAgICAgICAgLnR5cGUgICA9IFZL X0lNQUdFX1RZUEVfMkQsCi0gICAgICAgIC50aWxpbmcgPSBod2N0eC0+dGlsaW5nLAotICAgICAg ICAudXNhZ2UgID0gaHdjdHgtPnVzYWdlLAotICAgICAgICAuZmxhZ3MgID0gVktfSU1BR0VfQ1JF QVRFX0FMSUFTX0JJVCwKLSAgICB9OwotCi0gICAgbmJfbW9kcyA9IGhhc19tb2RzID8gZHJtX21v ZF9pbmZvLT5kcm1Gb3JtYXRNb2RpZmllckNvdW50IDogMTsKLSAgICBmb3IgKGludCBpID0gMDsg aSA8IG5iX21vZHM7IGkrKykgewotICAgICAgICBpZiAoaGFzX21vZHMpCi0gICAgICAgICAgICBw aHlfZGV2X21vZF9pbmZvLmRybUZvcm1hdE1vZGlmaWVyID0gZHJtX21vZF9pbmZvLT5wRHJtRm9y bWF0TW9kaWZpZXJzW2ldOwotCi0gICAgICAgIHJldCA9IHZrLT5HZXRQaHlzaWNhbERldmljZUlt YWdlRm9ybWF0UHJvcGVydGllczIoZGV2X2h3Y3R4LT5waHlzX2RldiwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBpbmZvLCAmcHJvcHMp OwotCi0gICAgICAgIGlmIChyZXQgPT0gVktfU1VDQ0VTUykgewotICAgICAgICAgICAgKmlleHAg fD0gZXhwOwotICAgICAgICAgICAgKmNvbXBfaGFuZGxlX3R5cGVzIHw9IGVwcm9wcy5leHRlcm5h bE1lbW9yeVByb3BlcnRpZXMuY29tcGF0aWJsZUhhbmRsZVR5cGVzOwotICAgICAgICB9Ci0gICAg fQotfQotCi1zdGF0aWMgQVZCdWZmZXJSZWYgKnZ1bGthbl9wb29sX2FsbG9jKHZvaWQgKm9wYXF1 ZSwgc2l6ZV90IHNpemUpCi17Ci0gICAgaW50IGVycjsKLSAgICBBVlZrRnJhbWUgKmY7Ci0gICAg QVZCdWZmZXJSZWYgKmF2YnVmID0gTlVMTDsKLSAgICBBVkhXRnJhbWVzQ29udGV4dCAqaHdmYyA9 IG9wYXF1ZTsKLSAgICBWdWxrYW5EZXZpY2VQcml2ICpwID0gaHdmYy0+ZGV2aWNlX2N0eC0+aHdj dHg7Ci0gICAgVnVsa2FuRnJhbWVzUHJpdiAqZnAgPSBod2ZjLT5od2N0eDsKLSAgICBBVlZ1bGth bkZyYW1lc0NvbnRleHQgKmh3Y3R4ID0gJmZwLT5wOwotICAgIFZrRXh0ZXJuYWxNZW1vcnlIYW5k bGVUeXBlRmxhZ3MgZSA9IDB4MDsKLSAgICBWa0V4cG9ydE1lbW9yeUFsbG9jYXRlSW5mbyBlbWlu Zm9bQVZfTlVNX0RBVEFfUE9JTlRFUlNdOwotCi0gICAgVmtFeHRlcm5hbE1lbW9yeUltYWdlQ3Jl YXRlSW5mbyBlaWluZm8gPSB7Ci0gICAgICAgIC5zVHlwZSAgICAgICA9IFZLX1NUUlVDVFVSRV9U WVBFX0VYVEVSTkFMX01FTU9SWV9JTUFHRV9DUkVBVEVfSU5GTywKLSAgICAgICAgLnBOZXh0ICAg ICAgID0gaHdjdHgtPmNyZWF0ZV9wbmV4dCwKLSAgICB9OwotCi0jaWZkZWYgX1dJTjMyCi0gICAg aWYgKHAtPnZrY3R4LmV4dGVuc2lvbnMgJiBGRl9WS19FWFRfRVhURVJOQUxfV0lOMzJfTUVNT1JZ KQotICAgICAgICB0cnlfZXhwb3J0X2ZsYWdzKGh3ZmMsICZlaWluZm8uaGFuZGxlVHlwZXMsICZl LCBJc1dpbmRvd3M4T3JHcmVhdGVyKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBW S19FWFRFUk5BTF9NRU1PUllfSEFORExFX1RZUEVfT1BBUVVFX1dJTjMyX0JJVAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA6IFZLX0VYVEVSTkFMX01FTU9SWV9IQU5ETEVfVFlQRV9PUEFR VUVfV0lOMzJfS01UX0JJVCk7Ci0jZWxzZQotICAgIGlmIChwLT52a2N0eC5leHRlbnNpb25zICYg RkZfVktfRVhUX0VYVEVSTkFMX0ZEX01FTU9SWSkKLSAgICAgICAgdHJ5X2V4cG9ydF9mbGFncyho d2ZjLCAmZWlpbmZvLmhhbmRsZVR5cGVzLCAmZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBW S19FWFRFUk5BTF9NRU1PUllfSEFORExFX1RZUEVfT1BBUVVFX0ZEX0JJVCk7Ci0KLSAgICBpZiAo cC0+dmtjdHguZXh0ZW5zaW9ucyAmIEZGX1ZLX0VYVF9FWFRFUk5BTF9ETUFCVUZfTUVNT1JZICYm Ci0gICAgICAgIGh3Y3R4LT50aWxpbmcgPT0gVktfSU1BR0VfVElMSU5HX0RSTV9GT1JNQVRfTU9E SUZJRVJfRVhUKQotICAgICAgICB0cnlfZXhwb3J0X2ZsYWdzKGh3ZmMsICZlaWluZm8uaGFuZGxl VHlwZXMsICZlLAotICAgICAgICAgICAgICAgICAgICAgICAgIFZLX0VYVEVSTkFMX01FTU9SWV9I QU5ETEVfVFlQRV9ETUFfQlVGX0JJVF9FWFQpOwotI2VuZGlmCi0KLSAgICBmb3IgKGludCBpID0g MDsgaSA8IGF2X3BpeF9mbXRfY291bnRfcGxhbmVzKGh3ZmMtPnN3X2Zvcm1hdCk7IGkrKykgewot ICAgICAgICBlbWluZm9baV0uc1R5cGUgICAgICAgPSBWS19TVFJVQ1RVUkVfVFlQRV9FWFBPUlRf TUVNT1JZX0FMTE9DQVRFX0lORk87Ci0gICAgICAgIGVtaW5mb1tpXS5wTmV4dCAgICAgICA9IGh3 Y3R4LT5hbGxvY19wbmV4dFtpXTsKLSAgICAgICAgZW1pbmZvW2ldLmhhbmRsZVR5cGVzID0gZTsK LSAgICB9Ci0KLSAgICBlcnIgPSBjcmVhdGVfZnJhbWUoaHdmYywgJmYsIGh3Y3R4LT50aWxpbmcs IGh3Y3R4LT51c2FnZSwgaHdjdHgtPmltZ19mbGFncywKLSAgICAgICAgICAgICAgICAgICAgICAg aHdjdHgtPm5iX2xheWVycywKLSAgICAgICAgICAgICAgICAgICAgICAgZWlpbmZvLmhhbmRsZVR5 cGVzID8gJmVpaW5mbyA6IGh3Y3R4LT5jcmVhdGVfcG5leHQpOwotICAgIGlmIChlcnIpCi0gICAg ICAgIHJldHVybiBOVUxMOwotCi0gICAgZXJyID0gYWxsb2NfYmluZF9tZW0oaHdmYywgZiwgZW1p bmZvLCBzaXplb2YoKmVtaW5mbykpOwotICAgIGlmIChlcnIpCi0gICAgICAgIGdvdG8gZmFpbDsK LQotICAgIGlmICggKGh3Y3R4LT51c2FnZSAmIFZLX0lNQUdFX1VTQUdFX1ZJREVPX0RFQ09ERV9E UEJfQklUX0tIUikgJiYKLSAgICAgICAgIShod2N0eC0+dXNhZ2UgJiBWS19JTUFHRV9VU0FHRV9W SURFT19ERUNPREVfRFNUX0JJVF9LSFIpKQotICAgICAgICBlcnIgPSBwcmVwYXJlX2ZyYW1lKGh3 ZmMsICZmcC0+Y29tcHV0ZV9leGVjLCBmLCBQUkVQX01PREVfREVDT0RJTkdfRFBCKTsKLSAgICBl bHNlIGlmIChod2N0eC0+dXNhZ2UgJiBWS19JTUFHRV9VU0FHRV9WSURFT19ERUNPREVfRFNUX0JJ VF9LSFIpCi0gICAgICAgIGVyciA9IHByZXBhcmVfZnJhbWUoaHdmYywgJmZwLT5jb21wdXRlX2V4 ZWMsIGYsIFBSRVBfTU9ERV9ERUNPRElOR19EU1QpOwotICAgIGVsc2UgaWYgKGh3Y3R4LT51c2Fn ZSAmIFZLX0lNQUdFX1VTQUdFX1ZJREVPX0VOQ09ERV9EUEJfQklUX0tIUikKLSAgICAgICAgZXJy ID0gcHJlcGFyZV9mcmFtZShod2ZjLCAmZnAtPmNvbXB1dGVfZXhlYywgZiwgUFJFUF9NT0RFX0VO Q09ESU5HX0RQQik7Ci0gICAgZWxzZSBpZiAoaHdjdHgtPnVzYWdlICYgVktfSU1BR0VfVVNBR0Vf VFJBTlNGRVJfRFNUX0JJVCkKLSAgICAgICAgZXJyID0gcHJlcGFyZV9mcmFtZShod2ZjLCAmZnAt PmNvbXB1dGVfZXhlYywgZiwgUFJFUF9NT0RFX1dSSVRFKTsKLSAgICBlbHNlCi0gICAgICAgIGVy ciA9IHByZXBhcmVfZnJhbWUoaHdmYywgJmZwLT5jb21wdXRlX2V4ZWMsIGYsIFBSRVBfTU9ERV9H RU5FUkFMKTsKLSAgICBpZiAoZXJyKQotICAgICAgICBnb3RvIGZhaWw7Ci0KLSAgICBhdmJ1ZiA9 IGF2X2J1ZmZlcl9jcmVhdGUoKHVpbnQ4X3QgKilmLCBzaXplb2YoQVZWa0ZyYW1lKSwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdnVsa2FuX2ZyYW1lX2ZyZWVfY2IsIGh3ZmMsIDApOwot ICAgIGlmICghYXZidWYpCi0gICAgICAgIGdvdG8gZmFpbDsKLQotICAgIHJldHVybiBhdmJ1ZjsK LQotZmFpbDoKLSAgICB2dWxrYW5fZnJhbWVfZnJlZShod2ZjLCBmKTsKLSAgICByZXR1cm4gTlVM TDsKLX0KLQotc3RhdGljIHZvaWQgbG9ja19mcmFtZShBVkhXRnJhbWVzQ29udGV4dCAqZmMsIEFW VmtGcmFtZSAqdmtmKQotewotICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmdmtmLT5pbnRlcm5hbC0+ dXBkYXRlX211dGV4KTsKLX0KLQotc3RhdGljIHZvaWQgdW5sb2NrX2ZyYW1lKEFWSFdGcmFtZXND b250ZXh0ICpmYywgQVZWa0ZyYW1lICp2a2YpCi17Ci0gICAgcHRocmVhZF9tdXRleF91bmxvY2so JnZrZi0+aW50ZXJuYWwtPnVwZGF0ZV9tdXRleCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHZ1bGthbl9m cmFtZXNfdW5pbml0KEFWSFdGcmFtZXNDb250ZXh0ICpod2ZjKQotewotICAgIFZ1bGthbkRldmlj ZVByaXYgKnAgPSBod2ZjLT5kZXZpY2VfY3R4LT5od2N0eDsKLSAgICBWdWxrYW5GcmFtZXNQcml2 ICpmcCA9IGh3ZmMtPmh3Y3R4OwotCi0gICAgaWYgKGZwLT5tb2RpZmllcl9pbmZvKSB7Ci0gICAg ICAgIGlmIChmcC0+bW9kaWZpZXJfaW5mby0+cERybUZvcm1hdE1vZGlmaWVycykKLSAgICAgICAg ICAgIGF2X2ZyZWVwKCZmcC0+bW9kaWZpZXJfaW5mby0+cERybUZvcm1hdE1vZGlmaWVycyk7Ci0g ICAgICAgIGF2X2ZyZWVwKCZmcC0+bW9kaWZpZXJfaW5mbyk7Ci0gICAgfQotCi0gICAgZmZfdmtf ZXhlY19wb29sX2ZyZWUoJnAtPnZrY3R4LCAmZnAtPmNvbXB1dGVfZXhlYyk7Ci0gICAgZmZfdmtf ZXhlY19wb29sX2ZyZWUoJnAtPnZrY3R4LCAmZnAtPnVwbG9hZF9leGVjKTsKLSAgICBmZl92a19l eGVjX3Bvb2xfZnJlZSgmcC0+dmtjdHgsICZmcC0+ZG93bmxvYWRfZXhlYyk7Ci0KLSAgICBhdl9i dWZmZXJfcG9vbF91bmluaXQoJmZwLT50bXApOwotfQotCi1zdGF0aWMgaW50IHZ1bGthbl9mcmFt ZXNfaW5pdChBVkhXRnJhbWVzQ29udGV4dCAqaHdmYykKLXsKLSAgICBpbnQgZXJyOwotICAgIEFW VmtGcmFtZSAqZjsKLSAgICBWdWxrYW5GcmFtZXNQcml2ICpmcCA9IGh3ZmMtPmh3Y3R4OwotICAg IEFWVnVsa2FuRnJhbWVzQ29udGV4dCAqaHdjdHggPSAmZnAtPnA7Ci0gICAgVnVsa2FuRGV2aWNl UHJpdiAqcCA9IGh3ZmMtPmRldmljZV9jdHgtPmh3Y3R4OwotICAgIEFWVnVsa2FuRGV2aWNlQ29u dGV4dCAqZGV2X2h3Y3R4ID0gJnAtPnA7Ci0gICAgVmtJbWFnZVVzYWdlRmxhZ0JpdHMgc3VwcG9y dGVkX3VzYWdlOwotICAgIEZGVnVsa2FuRnVuY3Rpb25zICp2ayA9ICZwLT52a2N0eC52a2ZuOwot ICAgIGNvbnN0IHN0cnVjdCBGRlZrRm9ybWF0RW50cnkgKmZtdDsKLSAgICBpbnQgZGlzYWJsZV9t dWx0aXBsYW5lID0gcC0+ZGlzYWJsZV9tdWx0aXBsYW5lIHx8Ci0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChod2N0eC0+ZmxhZ3MgJiBBVl9WS19GUkFNRV9GTEFHX0RJU0FCTEVfTVVMVElQ TEFORSk7Ci0KLSAgICAvKiBEZWZhdWx0cyAqLwotICAgIGlmICghaHdjdHgtPm5iX2xheWVycykK LSAgICAgICAgaHdjdHgtPm5iX2xheWVycyA9IDE7Ci0KLSAgICAvKiBWS19JTUFHRV9USUxJTkdf T1BUSU1BTCA9PSAwLCBjYW4ndCBjaGVjayBmb3IgaXQgcmVhbGx5ICovCi0gICAgaWYgKHAtPnVz ZV9saW5lYXJfaW1hZ2VzICYmCi0gICAgICAgIChod2N0eC0+dGlsaW5nICE9IFZLX0lNQUdFX1RJ TElOR19EUk1fRk9STUFUX01PRElGSUVSX0VYVCkpCi0gICAgICAgIGh3Y3R4LT50aWxpbmcgPSBW S19JTUFHRV9USUxJTkdfTElORUFSOwotCi0KLSAgICBmbXQgPSB2a19maW5kX2Zvcm1hdF9lbnRy eShod2ZjLT5zd19mb3JtYXQpOwotICAgIGlmICghZm10KSB7Ci0gICAgICAgIGF2X2xvZyhod2Zj LCBBVl9MT0dfRVJST1IsICJVbnN1cHBvcnRlZCBwaXhlbCBmb3JtYXQ6ICVzIVxuIiwKLSAgICAg ICAgICAgICAgIGF2X2dldF9waXhfZm10X25hbWUoaHdmYy0+c3dfZm9ybWF0KSk7Ci0gICAgICAg IHJldHVybiBBVkVSUk9SKEVJTlZBTCk7Ci0gICAgfQotCi0gICAgaWYgKGh3Y3R4LT5mb3JtYXRb MF0gIT0gVktfRk9STUFUX1VOREVGSU5FRCkgewotICAgICAgICBpZiAoaHdjdHgtPmZvcm1hdFsw XSAhPSBmbXQtPnZrZikgewotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmbXQtPm5i X2ltYWdlc19mYWxsYmFjazsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGh3Y3R4LT5mb3Jt YXRbaV0gIT0gZm10LT5mYWxsYmFja1tpXSkgewotICAgICAgICAgICAgICAgICAgICBhdl9sb2co aHdmYywgQVZfTE9HX0VSUk9SLCAiSW5jb21wYXRpYmxlIFZ1bGthbiBmb3JtYXQgZ2l2ZW4gIgot ICAgICAgICAgICAgICAgICAgICAgICAgICAgImZvciB0aGUgY3VycmVudCBzd19mb3JtYXQgJXMh XG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZfZ2V0X3BpeF9mbXRfbmFtZShod2Zj LT5zd19mb3JtYXQpKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFM KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAg ICAvKiBDaGVjayBpZiB0aGUgc3dfZm9ybWF0IGl0c2VsZiBpcyBzdXBwb3J0ZWQgKi8KLSAgICAg ICAgZXJyID0gdmtmbXRfZnJvbV9waXhmbXQyKGh3ZmMtPmRldmljZV9jdHgsIGh3ZmMtPnN3X2Zv cm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh3Y3R4LT50aWxpbmcsIE5V TEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMLCAmc3VwcG9y dGVkX3VzYWdlLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIWh3Y3R4LT51 c2FnZSB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGh3Y3R4LT51c2FnZSAm IFZLX0lNQUdFX1VTQUdFX1NUT1JBR0VfQklUKSk7Ci0gICAgICAgIGlmIChlcnIgPCAwKSB7Ci0g ICAgICAgICAgICBhdl9sb2coaHdmYywgQVZfTE9HX0VSUk9SLCAiVW5zdXBwb3J0ZWQgc3cgZm9y bWF0OiAlcyFcbiIsCi0gICAgICAgICAgICAgICAgICAgYXZfZ2V0X3BpeF9mbXRfbmFtZShod2Zj LT5zd19mb3JtYXQpKTsKLSAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7Ci0gICAg ICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBlcnIgPSB2a2ZtdF9mcm9tX3BpeGZtdDIoaHdm Yy0+ZGV2aWNlX2N0eCwgaHdmYy0+c3dfZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaHdjdHgtPnRpbGluZywgaHdjdHgtPmZvcm1hdCwgTlVMTCwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIE5VTEwsICZzdXBwb3J0ZWRfdXNhZ2UsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlX211bHRpcGxhbmUsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAhaHdjdHgtPnVzYWdlIHx8Ci0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoaHdjdHgtPnVzYWdlICYgVktfSU1BR0VfVVNBR0VfU1RPUkFHRV9CSVQp KTsKLSAgICAgICAgaWYgKGVyciA8IDApCi0gICAgICAgICAgICByZXR1cm4gZXJyOwotICAgIH0K LQotICAgIC8qIE52aWRpYSBpcyB2aW9sYXRpbmcgdGhlIHNwZWMgYmVjYXVzZSB0aGV5IHRob3Vn aHQgbm8gb25lIHdvdWxkIHVzZSB0aGlzLiAqLwotICAgIGlmIChwLT5kcHJvcHMuZHJpdmVySUQg PT0gVktfRFJJVkVSX0lEX05WSURJQV9QUk9QUklFVEFSWSAmJgotICAgICAgICAoKChmbXQtPm5i X2ltYWdlcyA9PSAxKSAmJiAoZm10LT52a19wbGFuZXMgPiAxKSkgfHwKLSAgICAgICAgIChhdl9w aXhfZm10X2Rlc2NfZ2V0KGh3ZmMtPnN3X2Zvcm1hdCktPm5iX2NvbXBvbmVudHMgPT0gMSkpKQot ICAgICAgICBzdXBwb3J0ZWRfdXNhZ2UgJj0gflZLX0lNQUdFX1VTQUdFX0hPU1RfVFJBTlNGRVJf QklUX0VYVDsKLQotICAgIC8qIEltYWdlIHVzYWdlIGZsYWdzICovCi0gICAgaWYgKCFod2N0eC0+ dXNhZ2UpIHsKLSAgICAgICAgaHdjdHgtPnVzYWdlID0gc3VwcG9ydGVkX3VzYWdlICYgKFZLX0lN QUdFX1VTQUdFX1RSQU5TRkVSX0RTVF9CSVQgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgVktfSU1BR0VfVVNBR0VfVFJBTlNGRVJfU1JDX0JJVCB8Ci0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19JTUFHRV9VU0FHRV9TVE9SQUdF X0JJVCAgICAgIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZL X0lNQUdFX1VTQUdFX1NBTVBMRURfQklUKTsKLQotICAgICAgICBpZiAoKHAtPnZrY3R4LmV4dGVu c2lvbnMgJiBGRl9WS19FWFRfSE9TVF9JTUFHRV9DT1BZKSAmJiAhcC0+ZGlzYWJsZV9ob3N0X3Ry YW5zZmVyKQotICAgICAgICAgICAgaHdjdHgtPnVzYWdlIHw9IHN1cHBvcnRlZF91c2FnZSAmIFZL X0lNQUdFX1VTQUdFX0hPU1RfVFJBTlNGRVJfQklUX0VYVDsKLQotICAgICAgICAvKiBFbmFibGVz IGVuY29kaW5nIG9mIGltYWdlcywgaWYgc3VwcG9ydGVkIGJ5IGZvcm1hdCBhbmQgZXh0ZW5zaW9u cyAqLwotICAgICAgICBpZiAoKHN1cHBvcnRlZF91c2FnZSAmIFZLX0lNQUdFX1VTQUdFX1ZJREVP X0VOQ09ERV9TUkNfQklUX0tIUikgJiYKLSAgICAgICAgICAgIChwLT52a2N0eC5leHRlbnNpb25z ICYgKEZGX1ZLX0VYVF9WSURFT19FTkNPREVfUVVFVUUgfAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBGRl9WS19FWFRfVklERU9fTUFJTlRFTkFOQ0VfMSkpKQotICAgICAgICAg ICAgaHdjdHgtPnVzYWdlIHw9IFZLX0lNQUdFX1VTQUdFX1ZJREVPX0VOQ09ERV9TUkNfQklUX0tI UjsKLSAgICB9Ci0KLSAgICAvKiBJbWFnZSBjcmVhdGlvbiBmbGFncy4KLSAgICAgKiBPbmx5IGZp bGwgdGhlbSBpbiBhdXRvbWF0aWNhbGx5IGlmIHRoZSBpbWFnZSBpcyBub3QgZ29pbmcgdG8gYmUg dXNlZCBhcwotICAgICAqIGEgRFBCLW9ubHkgaW1hZ2UsIGFuZCB3ZSBoYXZlIFNBTVBMRUQvU1RP UkFHRSBiaXRzIHNldC4gKi8KLSAgICBpZiAoIWh3Y3R4LT5pbWdfZmxhZ3MpIHsKLSAgICAgICAg aW50IGlzX2xvbmVfZHBiID0gKChod2N0eC0+dXNhZ2UgJiBWS19JTUFHRV9VU0FHRV9WSURFT19F TkNPREVfRFBCX0JJVF9LSFIpIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAoKGh3Y3R4 LT51c2FnZSAmIFZLX0lNQUdFX1VTQUdFX1ZJREVPX0RFQ09ERV9EUEJfQklUX0tIUikgJiYKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAhKGh3Y3R4LT51c2FnZSAmIFZLX0lNQUdFX1VTQUdF X1ZJREVPX0RFQ09ERV9EU1RfQklUX0tIUikpKTsKLSAgICAgICAgaW50IHNhbXBsZWFibGUgPSBo d2N0eC0+dXNhZ2UgJiAoVktfSU1BR0VfVVNBR0VfU0FNUExFRF9CSVQgfAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19JTUFHRV9VU0FHRV9TVE9SQUdFX0JJVCk7 Ci0gICAgICAgIGh3Y3R4LT5pbWdfZmxhZ3MgPSBWS19JTUFHRV9DUkVBVEVfTVVUQUJMRV9GT1JN QVRfQklUOwotICAgICAgICBpZiAoc2FtcGxlYWJsZSAmJiAhaXNfbG9uZV9kcGIpIHsKLSAgICAg ICAgICAgIGh3Y3R4LT5pbWdfZmxhZ3MgfD0gVktfSU1BR0VfQ1JFQVRFX0FMSUFTX0JJVDsKLSAg ICAgICAgICAgIGlmICgoZm10LT52a19wbGFuZXMgPiAxKSAmJiAoaHdjdHgtPmZvcm1hdFswXSA9 PSBmbXQtPnZrZikpCi0gICAgICAgICAgICAgICAgaHdjdHgtPmltZ19mbGFncyB8PSBWS19JTUFH RV9DUkVBVEVfRVhURU5ERURfVVNBR0VfQklUOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyog SWYgdGhlIGltYWdlIGhhcyBhbiBFTkNPREVfU1JDIHVzYWdlLCBhbmQgdGhlIG1haW50ZW5hbmNl MQotICAgICAqIGV4dGVuc2lvbiBpcyBzdXBwb3J0ZWQsIGNoZWNrIGlmIGl0IGhhcyBhIHByb2Zp bGUgbGlzdC4KLSAgICAgKiBJZiB0aGVyZSdzIG5vIHByb2ZpbGUgbGlzdCwgb3IgaXQgaGFzIG5v IGVuY29kZSBvcGVyYXRpb25zLAotICAgICAqIHRoZW4gYWxsb3cgY3JlYXRpbmcgdGhlIGltYWdl IHdpdGggbm8gc3BlY2lmaWMgcHJvZmlsZS4gKi8KLSAgICBpZiAoKGh3Y3R4LT51c2FnZSAmIFZL X0lNQUdFX1VTQUdFX1ZJREVPX0VOQ09ERV9TUkNfQklUX0tIUikgJiYKLSAgICAgICAgKHAtPnZr Y3R4LmV4dGVuc2lvbnMgJiAoRkZfVktfRVhUX1ZJREVPX0VOQ09ERV9RVUVVRSB8Ci0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEZGX1ZLX0VYVF9WSURFT19NQUlOVEVOQU5DRV8xKSkp IHsKLSAgICAgICAgY29uc3QgVmtWaWRlb1Byb2ZpbGVMaXN0SW5mb0tIUiAqcGw7Ci0gICAgICAg IHBsID0gZmZfdmtfZmluZF9zdHJ1Y3QoaHdjdHgtPmNyZWF0ZV9wbmV4dCwgVktfU1RSVUNUVVJF X1RZUEVfVklERU9fUFJPRklMRV9MSVNUX0lORk9fS0hSKTsKLSAgICAgICAgaWYgKCFwbCkgewot ICAgICAgICAgICAgaHdjdHgtPmltZ19mbGFncyB8PSBWS19JTUFHRV9DUkVBVEVfVklERU9fUFJP RklMRV9JTkRFUEVOREVOVF9CSVRfS0hSOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg dWludDMyX3QgaTsKLSAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBwbC0+cHJvZmlsZUNvdW50 OyBpKyspIHsKLSAgICAgICAgICAgICAgICAvKiBWaWRlbyBvcHMgc3RhcnQgYXQgZXhhY3RseSAw eDAwMDEwMDAwICovCi0gICAgICAgICAgICAgICAgaWYgKHBsLT5wUHJvZmlsZXNbaV0udmlkZW9D b2RlY09wZXJhdGlvbiAmIDB4RkZGRjAwMDApCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwot ICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGkgPT0gcGwtPnByb2ZpbGVDb3VudCkKLSAg ICAgICAgICAgICAgICBod2N0eC0+aW1nX2ZsYWdzIHw9IFZLX0lNQUdFX0NSRUFURV9WSURFT19Q Uk9GSUxFX0lOREVQRU5ERU5UX0JJVF9LSFI7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAo IWh3Y3R4LT5sb2NrX2ZyYW1lKQotICAgICAgICBod2N0eC0+bG9ja19mcmFtZSA9IGxvY2tfZnJh bWU7Ci0KLSAgICBpZiAoIWh3Y3R4LT51bmxvY2tfZnJhbWUpCi0gICAgICAgIGh3Y3R4LT51bmxv Y2tfZnJhbWUgPSB1bmxvY2tfZnJhbWU7Ci0KLSAgICBlcnIgPSBmZl92a19leGVjX3Bvb2xfaW5p dCgmcC0+dmtjdHgsIHAtPmNvbXB1dGVfcWYsICZmcC0+Y29tcHV0ZV9leGVjLAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHAtPmNvbXB1dGVfcWYtPm51bSwgMCwgMCwgMCwgTlVMTCk7 Ci0gICAgaWYgKGVycikKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIGVyciA9IGZmX3ZrX2V4 ZWNfcG9vbF9pbml0KCZwLT52a2N0eCwgcC0+dHJhbnNmZXJfcWYsICZmcC0+dXBsb2FkX2V4ZWMs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcC0+dHJhbnNmZXJfcWYtPm51bSoyLCAw LCAwLCAwLCBOVUxMKTsKLSAgICBpZiAoZXJyKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAg ZXJyID0gZmZfdmtfZXhlY19wb29sX2luaXQoJnAtPnZrY3R4LCBwLT50cmFuc2Zlcl9xZiwgJmZw LT5kb3dubG9hZF9leGVjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAtPnRyYW5z ZmVyX3FmLT5udW0sIDAsIDAsIDAsIE5VTEwpOwotICAgIGlmIChlcnIpCi0gICAgICAgIHJldHVy biBlcnI7Ci0KLSAgICAvKiBUZXN0IHRvIHNlZSBpZiBhbGxvY2F0aW9uIHdpbGwgZmFpbCAqLwot ICAgIGVyciA9IGNyZWF0ZV9mcmFtZShod2ZjLCAmZiwgaHdjdHgtPnRpbGluZywgaHdjdHgtPnVz YWdlLCBod2N0eC0+aW1nX2ZsYWdzLAotICAgICAgICAgICAgICAgICAgICAgICBod2N0eC0+bmJf bGF5ZXJzLCBod2N0eC0+Y3JlYXRlX3BuZXh0KTsKLSAgICBpZiAoZXJyKQotICAgICAgICByZXR1 cm4gZXJyOwotCi0gICAgLyogQ29sbGVjdCBgVmtEcm1Gb3JtYXRNb2RpZmllclByb3BlcnRpZXNF WFRgIGZvciBlYWNoIHBsYW5lLiBSZXF1aXJlZCBmb3IgRFJNIGV4cG9ydC4gKi8KLSAgICBpZiAo cC0+dmtjdHguZXh0ZW5zaW9ucyAmIEZGX1ZLX0VYVF9EUk1fTU9ESUZJRVJfRkxBR1MgJiYgaHdj dHgtPnRpbGluZyA9PSBWS19JTUFHRV9USUxJTkdfRFJNX0ZPUk1BVF9NT0RJRklFUl9FWFQpIHsK LSAgICAgICAgVmtJbWFnZURybUZvcm1hdE1vZGlmaWVyUHJvcGVydGllc0VYVCBkcm1fbW9kID0g ewotICAgICAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfSU1BR0VfRFJNX0ZPUk1B VF9NT0RJRklFUl9QUk9QRVJUSUVTX0VYVCwKLSAgICAgICAgfTsKLSAgICAgICAgZXJyID0gdmst PkdldEltYWdlRHJtRm9ybWF0TW9kaWZpZXJQcm9wZXJ0aWVzRVhUKGRldl9od2N0eC0+YWN0X2Rl diwgZi0+aW1nWzBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAmZHJtX21vZCk7Ci0gICAgICAgIGlmIChlcnIgIT0gVktfU1VDQ0VTUykg ewotICAgICAgICAgICAgYXZfbG9nKGh3ZmMsIEFWX0xPR19FUlJPUiwgIkZhaWxlZCB0byBnZXQg aW1hZ2UgRFJNIGZvcm1hdCBtb2RpZmllciBwcm9wZXJ0aWVzIik7Ci0gICAgICAgICAgICB2dWxr YW5fZnJhbWVfZnJlZShod2ZjLCBmKTsKLSAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0VYVEVS TkFMOwotICAgICAgICB9Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZm10LT52a19wbGFu ZXM7ICsraSkgewotICAgICAgICAgICAgVmtEcm1Gb3JtYXRNb2RpZmllclByb3BlcnRpZXNMaXN0 RVhUIG1vZHA7Ci0gICAgICAgICAgICBWa0Zvcm1hdFByb3BlcnRpZXMyIGZtdHA7Ci0gICAgICAg ICAgICBWa0RybUZvcm1hdE1vZGlmaWVyUHJvcGVydGllc0VYVCAqbW9kX3Byb3BzID0gTlVMTDsK LQotICAgICAgICAgICAgbW9kcCA9IChWa0RybUZvcm1hdE1vZGlmaWVyUHJvcGVydGllc0xpc3RF WFQpIHsKLSAgICAgICAgICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9EUk1fRk9S TUFUX01PRElGSUVSX1BST1BFUlRJRVNfTElTVF9FWFQsCi0gICAgICAgICAgICB9OwotICAgICAg ICAgICAgZm10cCA9IChWa0Zvcm1hdFByb3BlcnRpZXMyKSB7Ci0gICAgICAgICAgICAgICAgLnNU eXBlID0gVktfU1RSVUNUVVJFX1RZUEVfRk9STUFUX1BST1BFUlRJRVNfMiwKLSAgICAgICAgICAg ICAgICAucE5leHQgPSAmbW9kcCwKLSAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgIC8qIHF1 ZXJ5IGRybUZvcm1hdE1vZGlmaWVyQ291bnQgYnkga2VlcGluZyBwRHJtRm9ybWF0TW9kaWZpZXJQ cm9wZXJ0aWVzIE5VTEwgKi8KLSAgICAgICAgICAgIHZrLT5HZXRQaHlzaWNhbERldmljZUZvcm1h dFByb3BlcnRpZXMyKGRldl9od2N0eC0+cGh5c19kZXYsIGZtdC0+ZmFsbGJhY2tbaV0sICZmbXRw KTsKLQotICAgICAgICAgICAgbW9kcC5wRHJtRm9ybWF0TW9kaWZpZXJQcm9wZXJ0aWVzID0KLSAg ICAgICAgICAgICAgICBhdl9jYWxsb2MobW9kcC5kcm1Gb3JtYXRNb2RpZmllckNvdW50LCBzaXpl b2YoKm1vZHAucERybUZvcm1hdE1vZGlmaWVyUHJvcGVydGllcykpOwotICAgICAgICAgICAgaWYg KCFtb2RwLnBEcm1Gb3JtYXRNb2RpZmllclByb3BlcnRpZXMpIHsKLSAgICAgICAgICAgICAgICB2 dWxrYW5fZnJhbWVfZnJlZShod2ZjLCBmKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gQVZFUlJP UihFTk9NRU0pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdmstPkdldFBoeXNpY2FsRGV2 aWNlRm9ybWF0UHJvcGVydGllczIoZGV2X2h3Y3R4LT5waHlzX2RldiwgZm10LT5mYWxsYmFja1tp XSwgJmZtdHApOwotCi0gICAgICAgICAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbW9kcC5k cm1Gb3JtYXRNb2RpZmllckNvdW50OyArK2kpIHsKLSAgICAgICAgICAgICAgICBWa0RybUZvcm1h dE1vZGlmaWVyUHJvcGVydGllc0VYVCAqbSA9ICZtb2RwLnBEcm1Gb3JtYXRNb2RpZmllclByb3Bl cnRpZXNbaV07Ci0gICAgICAgICAgICAgICAgaWYgKG0tPmRybUZvcm1hdE1vZGlmaWVyID09IGRy bV9tb2QuZHJtRm9ybWF0TW9kaWZpZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgbW9kX3Byb3Bz ID0gbTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAg ICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAobW9kX3Byb3BzID09IE5VTEwpIHsKLSAgICAg ICAgICAgICAgICBhdl9sb2coaHdmYywgQVZfTE9HX0VSUk9SLCAiTm8gRFJNIGZvcm1hdCBtb2Rp ZmllciBwcm9wZXJ0aWVzIGZvdW5kIGZvciBtb2RpZmllciAweCUwMTYiUFJJeDY0IlxuIiwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgZHJtX21vZC5kcm1Gb3JtYXRNb2RpZmllcik7Ci0gICAg ICAgICAgICAgICAgYXZfZnJlZShtb2RwLnBEcm1Gb3JtYXRNb2RpZmllclByb3BlcnRpZXMpOwot ICAgICAgICAgICAgICAgIHZ1bGthbl9mcmFtZV9mcmVlKGh3ZmMsIGYpOwotICAgICAgICAgICAg ICAgIHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg ICBmcC0+ZHJtX2Zvcm1hdF9tb2RpZmllcl9wcm9wZXJ0aWVzW2ldID0gKm1vZF9wcm9wczsKLSAg ICAgICAgICAgIGF2X2ZyZWUobW9kcC5wRHJtRm9ybWF0TW9kaWZpZXJQcm9wZXJ0aWVzKTsKLSAg ICAgICAgfQotICAgIH0KLQotICAgIHZ1bGthbl9mcmFtZV9mcmVlKGh3ZmMsIGYpOwotCi0gICAg LyogSWYgdXNlciBkaWQgbm90IHNwZWNpZnkgYSBwb29sLCBod2ZjLT5wb29sIHdpbGwgYmUgc2V0 IHRvIHRoZSBpbnRlcm5hbCBvbmUKLSAgICAgKiBpbiBod2NvbnRleHQuYyBqdXN0IGFmdGVyIHRo aXMgZ2V0cyBjYWxsZWQgKi8KLSAgICBpZiAoIWh3ZmMtPnBvb2wpIHsKLSAgICAgICAgZmZod2Zy YW1lc2N0eChod2ZjKS0+cG9vbF9pbnRlcm5hbCA9IGF2X2J1ZmZlcl9wb29sX2luaXQyKHNpemVv ZihBVlZrRnJhbWUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaHdmYywgdnVsa2FuX3Bvb2xfYWxsb2MsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBOVUxMKTsKLSAgICAgICAgaWYgKCFmZmh3ZnJhbWVzY3R4KGh3ZmMpLT5wb29sX2ludGVybmFs KQotICAgICAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKLSAgICB9Ci0KLSAgICByZXR1 cm4gMDsKLX0KLQotc3RhdGljIGludCB2dWxrYW5fZ2V0X2J1ZmZlcihBVkhXRnJhbWVzQ29udGV4 dCAqaHdmYywgQVZGcmFtZSAqZnJhbWUpCi17Ci0gICAgZnJhbWUtPmJ1ZlswXSA9IGF2X2J1ZmZl cl9wb29sX2dldChod2ZjLT5wb29sKTsKLSAgICBpZiAoIWZyYW1lLT5idWZbMF0pCi0gICAgICAg IHJldHVybiBBVkVSUk9SKEVOT01FTSk7Ci0KLSAgICBmcmFtZS0+ZGF0YVswXSA9IGZyYW1lLT5i dWZbMF0tPmRhdGE7Ci0gICAgZnJhbWUtPmZvcm1hdCAgPSBBVl9QSVhfRk1UX1ZVTEtBTjsKLSAg ICBmcmFtZS0+d2lkdGggICA9IGh3ZmMtPndpZHRoOwotICAgIGZyYW1lLT5oZWlnaHQgID0gaHdm Yy0+aGVpZ2h0OwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgdnVsa2FuX3RyYW5z ZmVyX2dldF9mb3JtYXRzKEFWSFdGcmFtZXNDb250ZXh0ICpod2ZjLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBBVkhXRnJhbWVUcmFuc2ZlckRpcmVjdGlvbiBk aXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIEFWUGl4ZWxG b3JtYXQgKipmb3JtYXRzKQotewotICAgIGVudW0gQVZQaXhlbEZvcm1hdCAqZm10czsKLSAgICBp bnQgbiA9IDI7Ci0KLSNpZiBDT05GSUdfQ1VEQQotICAgIG4rKzsKLSNlbmRpZgotICAgIGZtdHMg PSBhdl9tYWxsb2NfYXJyYXkobiwgc2l6ZW9mKCpmbXRzKSk7Ci0gICAgaWYgKCFmbXRzKQotICAg ICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOwotCi0gICAgbiA9IDA7Ci0gICAgZm10c1tuKytd ID0gaHdmYy0+c3dfZm9ybWF0OwotI2lmIENPTkZJR19DVURBCi0gICAgZm10c1tuKytdID0gQVZf UElYX0ZNVF9DVURBOwotI2VuZGlmCi0gICAgZm10c1tuKytdID0gQVZfUElYX0ZNVF9OT05FOwot Ci0gICAgKmZvcm1hdHMgPSBmbXRzOwotICAgIHJldHVybiAwOwotfQotCi0jaWYgQ09ORklHX0xJ QkRSTQotc3RhdGljIHZvaWQgdnVsa2FuX3VubWFwX2Zyb21fZHJtKEFWSFdGcmFtZXNDb250ZXh0 ICpod2ZjLCBIV01hcERlc2NyaXB0b3IgKmh3bWFwKQotewotICAgIHZ1bGthbl9mcmFtZV9mcmVl KGh3ZmMsIGh3bWFwLT5wcml2KTsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCB7Ci0gICAgdWlu dDMyX3QgZHJtX2ZvdXJjYzsKLSAgICBWa0Zvcm1hdCB2a19mb3JtYXQ7Ci19IHZ1bGthbl9kcm1f Zm9ybWF0X21hcFtdID0gewotICAgIHsgRFJNX0ZPUk1BVF9SOCwgICAgICAgVktfRk9STUFUX1I4 X1VOT1JNICAgICAgIH0sCi0gICAgeyBEUk1fRk9STUFUX1IxNiwgICAgICBWS19GT1JNQVRfUjE2 X1VOT1JNICAgICAgfSwKLSAgICB7IERSTV9GT1JNQVRfR1I4OCwgICAgIFZLX0ZPUk1BVF9SOEc4 X1VOT1JNICAgICB9LAotICAgIHsgRFJNX0ZPUk1BVF9SRzg4LCAgICAgVktfRk9STUFUX1I4Rzhf VU5PUk0gICAgIH0sCi0gICAgeyBEUk1fRk9STUFUX0dSMTYxNiwgICBWS19GT1JNQVRfUjE2RzE2 X1VOT1JNICAgfSwKLSAgICB7IERSTV9GT1JNQVRfUkcxNjE2LCAgIFZLX0ZPUk1BVF9SMTZHMTZf VU5PUk0gICB9LAotICAgIHsgRFJNX0ZPUk1BVF9BUkdCODg4OCwgVktfRk9STUFUX0I4RzhSOEE4 X1VOT1JNIH0sCi0gICAgeyBEUk1fRk9STUFUX1hSR0I4ODg4LCBWS19GT1JNQVRfQjhHOFI4QThf VU5PUk0gfSwKLSAgICB7IERSTV9GT1JNQVRfQUJHUjg4ODgsIFZLX0ZPUk1BVF9SOEc4QjhBOF9V Tk9STSB9LAotICAgIHsgRFJNX0ZPUk1BVF9YQkdSODg4OCwgVktfRk9STUFUX1I4RzhCOEE4X1VO T1JNIH0sCi0gICAgeyBEUk1fRk9STUFUX0FSR0IyMTAxMDEwLCBWS19GT1JNQVRfQTJCMTBHMTBS MTBfVU5PUk1fUEFDSzMyIH0sCi0gICAgeyBEUk1fRk9STUFUX0FCR1IyMTAxMDEwLCBWS19GT1JN QVRfQTJSMTBHMTBCMTBfVU5PUk1fUEFDSzMyIH0sCi0gICAgeyBEUk1fRk9STUFUX1hSR0IyMTAx MDEwLCBWS19GT1JNQVRfQTJCMTBHMTBSMTBfVU5PUk1fUEFDSzMyIH0sCi0gICAgeyBEUk1fRk9S TUFUX1hCR1IyMTAxMDEwLCBWS19GT1JNQVRfQTJSMTBHMTBCMTBfVU5PUk1fUEFDSzMyIH0sCi0K LSAgICAvLyBBbGwgdGhlc2UgRFJNX0ZPUk1BVHMgd2VyZSBhZGRlZCBpbiB0aGUgc2FtZSBsaWJk cm0gY29tbWl0LgotI2lmZGVmIERSTV9GT1JNQVRfWFlVVjg4ODgKLSAgICB7IERSTV9GT1JNQVRf WFlVVjg4ODgsIFZLX0ZPUk1BVF9SOEc4QjhBOF9VTk9STSAgICAgfSwKLSAgICB7IERSTV9GT1JN QVRfWFZZVTIxMDEwMTAsIFZLX0ZPUk1BVF9BMlIxMEcxMEIxMF9VTk9STV9QQUNLMzIgfSAsCi0g ICAgeyBEUk1fRk9STUFUX1hWWVUxMl8xNjE2MTYxNiwgVktfRk9STUFUX1IxMlg0RzEyWDRCMTJY NEExMlg0X1VOT1JNXzRQQUNLMTYgfSAsCi0gICAgeyBEUk1fRk9STUFUX1hWWVUxNjE2MTYxNiwg VktfRk9STUFUX1IxNkcxNkIxNkExNl9VTk9STSB9ICwKLSNlbmRpZgotfTsKLQotc3RhdGljIGlu bGluZSBWa0Zvcm1hdCBkcm1fdG9fdnVsa2FuX2ZtdCh1aW50MzJfdCBkcm1fZm91cmNjKQotewot ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgRkZfQVJSQVlfRUxFTVModnVsa2FuX2RybV9mb3JtYXRf bWFwKTsgaSsrKQotICAgICAgICBpZiAodnVsa2FuX2RybV9mb3JtYXRfbWFwW2ldLmRybV9mb3Vy Y2MgPT0gZHJtX2ZvdXJjYykKLSAgICAgICAgICAgIHJldHVybiB2dWxrYW5fZHJtX2Zvcm1hdF9t YXBbaV0udmtfZm9ybWF0OwotICAgIHJldHVybiBWS19GT1JNQVRfVU5ERUZJTkVEOwotfQotCi1z dGF0aWMgaW50IHZ1bGthbl9tYXBfZnJvbV9kcm1fZnJhbWVfZGVzYyhBVkhXRnJhbWVzQ29udGV4 dCAqaHdmYywgQVZWa0ZyYW1lICoqZnJhbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCBBVkZyYW1lICpzcmMsIGludCBmbGFncykKLXsKLSAgICBpbnQg ZXJyID0gMDsKLSAgICBWa1Jlc3VsdCByZXQ7Ci0gICAgQVZWa0ZyYW1lICpmOwotICAgIGludCBi aW5kX2NvdW50cyA9IDA7Ci0gICAgQVZIV0RldmljZUNvbnRleHQgKmN0eCA9IGh3ZmMtPmRldmlj ZV9jdHg7Ci0gICAgVnVsa2FuRGV2aWNlUHJpdiAqcCA9IGN0eC0+aHdjdHg7Ci0gICAgQVZWdWxr YW5EZXZpY2VDb250ZXh0ICpod2N0eCA9ICZwLT5wOwotICAgIEZGVnVsa2FuRnVuY3Rpb25zICp2 ayA9ICZwLT52a2N0eC52a2ZuOwotICAgIGNvbnN0IEFWRFJNRnJhbWVEZXNjcmlwdG9yICpkZXNj ID0gKEFWRFJNRnJhbWVEZXNjcmlwdG9yICopc3JjLT5kYXRhWzBdOwotICAgIFZrQmluZEltYWdl TWVtb3J5SW5mbyBiaW5kX2luZm9bQVZfRFJNX01BWF9QTEFORVNdOwotICAgIFZrQmluZEltYWdl UGxhbmVNZW1vcnlJbmZvIHBsYW5lX2luZm9bQVZfRFJNX01BWF9QTEFORVNdOwotCi0gICAgZm9y IChpbnQgaSA9IDA7IGkgPCBkZXNjLT5uYl9sYXllcnM7IGkrKykgewotICAgICAgICBpZiAoZHJt X3RvX3Z1bGthbl9mbXQoZGVzYy0+bGF5ZXJzW2ldLmZvcm1hdCkgPT0gVktfRk9STUFUX1VOREVG SU5FRCkgewotICAgICAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiVW5zdXBwb3J0 ZWQgRE1BQlVGIGxheWVyIGZvcm1hdCAlIzA4eCFcbiIsCi0gICAgICAgICAgICAgICAgICAgZGVz Yy0+bGF5ZXJzW2ldLmZvcm1hdCk7Ci0gICAgICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwp OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKCEoZiA9IGF2X3ZrX2ZyYW1lX2FsbG9jKCkp KSB7Ci0gICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIlVuYWJsZSB0byBhbGxvY2F0 ZSBtZW1vcnkgZm9yIEFWVmtGcmFtZSFcbiIpOwotICAgICAgICBlcnIgPSBBVkVSUk9SKEVOT01F TSk7Ci0gICAgICAgIGdvdG8gZmFpbDsKLSAgICB9Ci0KLSAgICBmLT50aWxpbmcgPSBWS19JTUFH RV9USUxJTkdfRFJNX0ZPUk1BVF9NT0RJRklFUl9FWFQ7Ci0KLSAgICBmb3IgKGludCBpID0gMDsg aSA8IGRlc2MtPm5iX2xheWVyczsgaSsrKSB7Ci0gICAgICAgIGNvbnN0IGludCBwbGFuZXMgPSBk ZXNjLT5sYXllcnNbaV0ubmJfcGxhbmVzOwotCi0gICAgICAgIC8qIFNlbWFwaG9yZSAqLwotICAg ICAgICBWa1NlbWFwaG9yZVR5cGVDcmVhdGVJbmZvIHNlbV90eXBlX2luZm8gPSB7Ci0gICAgICAg ICAgICAuc1R5cGUgICAgICAgICA9IFZLX1NUUlVDVFVSRV9UWVBFX1NFTUFQSE9SRV9UWVBFX0NS RUFURV9JTkZPLAotICAgICAgICAgICAgLnNlbWFwaG9yZVR5cGUgPSBWS19TRU1BUEhPUkVfVFlQ RV9USU1FTElORSwKLSAgICAgICAgICAgIC5pbml0aWFsVmFsdWUgID0gMCwKLSAgICAgICAgfTsK LSAgICAgICAgVmtTZW1hcGhvcmVDcmVhdGVJbmZvIHNlbV9zcGF3biA9IHsKLSAgICAgICAgICAg IC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX1NFTUFQSE9SRV9DUkVBVEVfSU5GTywKLSAgICAg ICAgICAgIC5wTmV4dCA9ICZzZW1fdHlwZV9pbmZvLAotICAgICAgICB9OwotCi0gICAgICAgIC8q IEltYWdlIGNyZWF0aW9uICovCi0gICAgICAgIFZrU3VicmVzb3VyY2VMYXlvdXQgZXh0X2ltZ19s YXlvdXRzW0FWX0RSTV9NQVhfUExBTkVTXTsKLSAgICAgICAgVmtJbWFnZURybUZvcm1hdE1vZGlm aWVyRXhwbGljaXRDcmVhdGVJbmZvRVhUIGV4dF9pbWdfbW9kX3NwZWMgPSB7Ci0gICAgICAgICAg ICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9JTUFHRV9EUk1fRk9STUFUX01PRElGSUVSX0VY UExJQ0lUX0NSRUFURV9JTkZPX0VYVCwKLSAgICAgICAgICAgIC5kcm1Gb3JtYXRNb2RpZmllciA9 IGRlc2MtPm9iamVjdHNbMF0uZm9ybWF0X21vZGlmaWVyLAotICAgICAgICAgICAgLmRybUZvcm1h dE1vZGlmaWVyUGxhbmVDb3VudCA9IHBsYW5lcywKLSAgICAgICAgICAgIC5wUGxhbmVMYXlvdXRz ID0gKGNvbnN0IFZrU3VicmVzb3VyY2VMYXlvdXQgKikmZXh0X2ltZ19sYXlvdXRzLAotICAgICAg ICB9OwotICAgICAgICBWa0V4dGVybmFsTWVtb3J5SW1hZ2VDcmVhdGVJbmZvIGV4dF9pbWdfc3Bl YyA9IHsKLSAgICAgICAgICAgIC5zVHlwZSAgICAgICA9IFZLX1NUUlVDVFVSRV9UWVBFX0VYVEVS TkFMX01FTU9SWV9JTUFHRV9DUkVBVEVfSU5GTywKLSAgICAgICAgICAgIC5wTmV4dCAgICAgICA9 ICZleHRfaW1nX21vZF9zcGVjLAotICAgICAgICAgICAgLmhhbmRsZVR5cGVzID0gVktfRVhURVJO QUxfTUVNT1JZX0hBTkRMRV9UWVBFX0RNQV9CVUZfQklUX0VYVCwKLSAgICAgICAgfTsKLSAgICAg ICAgVmtJbWFnZUNyZWF0ZUluZm8gY3JlYXRlX2luZm8gPSB7Ci0gICAgICAgICAgICAuc1R5cGUg ICAgICAgICAgICAgICAgID0gVktfU1RSVUNUVVJFX1RZUEVfSU1BR0VfQ1JFQVRFX0lORk8sCi0g ICAgICAgICAgICAucE5leHQgICAgICAgICAgICAgICAgID0gJmV4dF9pbWdfc3BlYywKLSAgICAg ICAgICAgIC5pbWFnZVR5cGUgICAgICAgICAgICAgPSBWS19JTUFHRV9UWVBFXzJELAotICAgICAg ICAgICAgLmZvcm1hdCAgICAgICAgICAgICAgICA9IGRybV90b192dWxrYW5fZm10KGRlc2MtPmxh eWVyc1tpXS5mb3JtYXQpLAotICAgICAgICAgICAgLmV4dGVudC5kZXB0aCAgICAgICAgICA9IDEs Ci0gICAgICAgICAgICAubWlwTGV2ZWxzICAgICAgICAgICAgID0gMSwKLSAgICAgICAgICAgIC5h cnJheUxheWVycyAgICAgICAgICAgPSAxLAotICAgICAgICAgICAgLmZsYWdzICAgICAgICAgICAg ICAgICA9IDB4MCwKLSAgICAgICAgICAgIC50aWxpbmcgICAgICAgICAgICAgICAgPSBWS19JTUFH RV9USUxJTkdfRFJNX0ZPUk1BVF9NT0RJRklFUl9FWFQsCi0gICAgICAgICAgICAuaW5pdGlhbExh eW91dCAgICAgICAgID0gVktfSU1BR0VfTEFZT1VUX1VOREVGSU5FRCwgLyogc3BlY3Mgc2F5IHNv ICovCi0gICAgICAgICAgICAudXNhZ2UgICAgICAgICAgICAgICAgID0gMHgwLCAvKiBmaWxsZWQg aW4gYmVsb3cgKi8KLSAgICAgICAgICAgIC5zYW1wbGVzICAgICAgICAgICAgICAgPSBWS19TQU1Q TEVfQ09VTlRfMV9CSVQsCi0gICAgICAgICAgICAucFF1ZXVlRmFtaWx5SW5kaWNlcyAgID0gcC0+ aW1nX3FmcywKLSAgICAgICAgICAgIC5xdWV1ZUZhbWlseUluZGV4Q291bnQgPSBwLT5uYl9pbWdf cWZzLAotICAgICAgICAgICAgLnNoYXJpbmdNb2RlICAgICAgICAgICA9IHAtPm5iX2ltZ19xZnMg PiAxID8gVktfU0hBUklOR19NT0RFX0NPTkNVUlJFTlQgOgotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfU0hBUklOR19NT0RFX0VYQ0xV U0lWRSwKLSAgICAgICAgfTsKLQotICAgICAgICAvKiBJbWFnZSBmb3JtYXQgdmVyaWZpY2F0aW9u ICovCi0gICAgICAgIFZrRXh0ZXJuYWxJbWFnZUZvcm1hdFByb3BlcnRpZXMgZXh0X3Byb3BzID0g ewotICAgICAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfRVhURVJOQUxfSU1BR0Vf Rk9STUFUX1BST1BFUlRJRVNfS0hSLAotICAgICAgICB9OwotICAgICAgICBWa0ltYWdlRm9ybWF0 UHJvcGVydGllczIgcHJvcHNfcmV0ID0gewotICAgICAgICAgICAgLnNUeXBlID0gVktfU1RSVUNU VVJFX1RZUEVfSU1BR0VfRk9STUFUX1BST1BFUlRJRVNfMiwKLSAgICAgICAgICAgIC5wTmV4dCA9 ICZleHRfcHJvcHMsCi0gICAgICAgIH07Ci0gICAgICAgIFZrUGh5c2ljYWxEZXZpY2VJbWFnZURy bUZvcm1hdE1vZGlmaWVySW5mb0VYVCBwcm9wc19kcm1fbW9kID0gewotICAgICAgICAgICAgLnNU eXBlID0gVktfU1RSVUNUVVJFX1RZUEVfUEhZU0lDQUxfREVWSUNFX0lNQUdFX0RSTV9GT1JNQVRf TU9ESUZJRVJfSU5GT19FWFQsCi0gICAgICAgICAgICAuZHJtRm9ybWF0TW9kaWZpZXIgPSBleHRf aW1nX21vZF9zcGVjLmRybUZvcm1hdE1vZGlmaWVyLAotICAgICAgICAgICAgLnBRdWV1ZUZhbWls eUluZGljZXMgPSBjcmVhdGVfaW5mby5wUXVldWVGYW1pbHlJbmRpY2VzLAotICAgICAgICAgICAg LnF1ZXVlRmFtaWx5SW5kZXhDb3VudCA9IGNyZWF0ZV9pbmZvLnF1ZXVlRmFtaWx5SW5kZXhDb3Vu dCwKLSAgICAgICAgICAgIC5zaGFyaW5nTW9kZSA9IGNyZWF0ZV9pbmZvLnNoYXJpbmdNb2RlLAot ICAgICAgICB9OwotICAgICAgICBWa1BoeXNpY2FsRGV2aWNlRXh0ZXJuYWxJbWFnZUZvcm1hdElu Zm8gcHJvcHNfZXh0ID0gewotICAgICAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVf UEhZU0lDQUxfREVWSUNFX0VYVEVSTkFMX0lNQUdFX0ZPUk1BVF9JTkZPLAotICAgICAgICAgICAg LnBOZXh0ID0gJnByb3BzX2RybV9tb2QsCi0gICAgICAgICAgICAuaGFuZGxlVHlwZSA9IGV4dF9p bWdfc3BlYy5oYW5kbGVUeXBlcywKLSAgICAgICAgfTsKLSAgICAgICAgVmtQaHlzaWNhbERldmlj ZUltYWdlRm9ybWF0SW5mbzIgZm10X3Byb3BzOwotCi0gICAgICAgIGlmIChmbGFncyAmIEFWX0hX RlJBTUVfTUFQX1JFQUQpCi0gICAgICAgICAgICBjcmVhdGVfaW5mby51c2FnZSB8PSBWS19JTUFH RV9VU0FHRV9TQU1QTEVEX0JJVCB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBW S19JTUFHRV9VU0FHRV9UUkFOU0ZFUl9TUkNfQklUOwotICAgICAgICBpZiAoZmxhZ3MgJiBBVl9I V0ZSQU1FX01BUF9XUklURSkKLSAgICAgICAgICAgIGNyZWF0ZV9pbmZvLnVzYWdlIHw9IFZLX0lN QUdFX1VTQUdFX1NUT1JBR0VfQklUIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFZLX0lNQUdFX1VTQUdFX1RSQU5TRkVSX0RTVF9CSVQ7Ci0KLSAgICAgICAgZm10X3Byb3BzID0g KFZrUGh5c2ljYWxEZXZpY2VJbWFnZUZvcm1hdEluZm8yKSB7Ci0gICAgICAgICAgICAuc1R5cGUg ID0gVktfU1RSVUNUVVJFX1RZUEVfUEhZU0lDQUxfREVWSUNFX0lNQUdFX0ZPUk1BVF9JTkZPXzIs Ci0gICAgICAgICAgICAucE5leHQgID0gJnByb3BzX2V4dCwKLSAgICAgICAgICAgIC5mb3JtYXQg PSBjcmVhdGVfaW5mby5mb3JtYXQsCi0gICAgICAgICAgICAudHlwZSAgID0gY3JlYXRlX2luZm8u aW1hZ2VUeXBlLAotICAgICAgICAgICAgLnRpbGluZyA9IGNyZWF0ZV9pbmZvLnRpbGluZywKLSAg ICAgICAgICAgIC51c2FnZSAgPSBjcmVhdGVfaW5mby51c2FnZSwKLSAgICAgICAgICAgIC5mbGFn cyAgPSBjcmVhdGVfaW5mby5mbGFncywKLSAgICAgICAgfTsKLQotICAgICAgICAvKiBDaGVjayBp ZiBpbXBvcnRpbmcgaXMgcG9zc2libGUgZm9yIHRoaXMgY29tYmluYXRpb24gb2YgcGFyYW1ldGVy cyAqLwotICAgICAgICByZXQgPSB2ay0+R2V0UGh5c2ljYWxEZXZpY2VJbWFnZUZvcm1hdFByb3Bl cnRpZXMyKGh3Y3R4LT5waHlzX2RldiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAmZm10X3Byb3BzLCAmcHJvcHNfcmV0KTsKLSAgICAg ICAgaWYgKHJldCAhPSBWS19TVUNDRVNTKSB7Ci0gICAgICAgICAgICBhdl9sb2coY3R4LCBBVl9M T0dfRVJST1IsICJDYW5ub3QgbWFwIERSTSBmcmFtZSB0byBWdWxrYW46ICVzXG4iLAotICAgICAg ICAgICAgICAgICAgIGZmX3ZrX3JldDJzdHIocmV0KSk7Ci0gICAgICAgICAgICBlcnIgPSBBVkVS Uk9SX0VYVEVSTkFMOwotICAgICAgICAgICAgZ290byBmYWlsOwotICAgICAgICB9Ci0KLSAgICAg ICAgLyogU2V0IHRoZSBpbWFnZSB3aWR0aC9oZWlnaHQgKi8KLSAgICAgICAgZ2V0X3BsYW5lX3do KCZjcmVhdGVfaW5mby5leHRlbnQud2lkdGgsICZjcmVhdGVfaW5mby5leHRlbnQuaGVpZ2h0LAot ICAgICAgICAgICAgICAgICAgICAgaHdmYy0+c3dfZm9ybWF0LCBzcmMtPndpZHRoLCBzcmMtPmhl aWdodCwgaSk7Ci0KLSAgICAgICAgLyogU2V0IHRoZSBzdWJyZXNvdXJjZSBsYXlvdXQgYmFzZWQg b24gdGhlIGxheWVyIHByb3BlcnRpZXMgKi8KLSAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBw bGFuZXM7IGorKykgewotICAgICAgICAgICAgZXh0X2ltZ19sYXlvdXRzW2pdLm9mZnNldCAgICAg PSBkZXNjLT5sYXllcnNbaV0ucGxhbmVzW2pdLm9mZnNldDsKLSAgICAgICAgICAgIGV4dF9pbWdf bGF5b3V0c1tqXS5yb3dQaXRjaCAgID0gZGVzYy0+bGF5ZXJzW2ldLnBsYW5lc1tqXS5waXRjaDsK LSAgICAgICAgICAgIGV4dF9pbWdfbGF5b3V0c1tqXS5zaXplICAgICAgID0gMDsgLyogVGhlIHNw ZWNzIHNheSBzbyBmb3IgYWxsIDMgKi8KLSAgICAgICAgICAgIGV4dF9pbWdfbGF5b3V0c1tqXS5h cnJheVBpdGNoID0gMDsKLSAgICAgICAgICAgIGV4dF9pbWdfbGF5b3V0c1tqXS5kZXB0aFBpdGNo ID0gMDsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIENyZWF0ZSBpbWFnZSAqLwotICAgICAgICBy ZXQgPSB2ay0+Q3JlYXRlSW1hZ2UoaHdjdHgtPmFjdF9kZXYsICZjcmVhdGVfaW5mbywKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGh3Y3R4LT5hbGxvYywgJmYtPmltZ1tpXSk7Ci0gICAg ICAgIGlmIChyZXQgIT0gVktfU1VDQ0VTUykgewotICAgICAgICAgICAgYXZfbG9nKGN0eCwgQVZf TE9HX0VSUk9SLCAiSW1hZ2UgY3JlYXRpb24gZmFpbHVyZTogJXNcbiIsCi0gICAgICAgICAgICAg ICAgICAgZmZfdmtfcmV0MnN0cihyZXQpKTsKLSAgICAgICAgICAgIGVyciA9IEFWRVJST1IoRUlO VkFMKTsKLSAgICAgICAgICAgIGdvdG8gZmFpbDsKLSAgICAgICAgfQotCi0gICAgICAgIHJldCA9 IHZrLT5DcmVhdGVTZW1hcGhvcmUoaHdjdHgtPmFjdF9kZXYsICZzZW1fc3Bhd24sCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaHdjdHgtPmFsbG9jLCAmZi0+c2VtW2ldKTsKLSAg ICAgICAgaWYgKHJldCAhPSBWS19TVUNDRVNTKSB7Ci0gICAgICAgICAgICBhdl9sb2coaHdjdHgs IEFWX0xPR19FUlJPUiwgIkZhaWxlZCB0byBjcmVhdGUgc2VtYXBob3JlOiAlc1xuIiwKLSAgICAg ICAgICAgICAgICAgICBmZl92a19yZXQyc3RyKHJldCkpOwotICAgICAgICAgICAgZXJyID0gQVZF UlJPUl9FWFRFUk5BTDsKLSAgICAgICAgICAgIGdvdG8gZmFpbDsKLSAgICAgICAgfQotCi0gICAg ICAgIGYtPnF1ZXVlX2ZhbWlseVtpXSA9IFZLX1FVRVVFX0ZBTUlMWV9FWFRFUk5BTDsKLSAgICAg ICAgZi0+bGF5b3V0W2ldID0gY3JlYXRlX2luZm8uaW5pdGlhbExheW91dDsKLSAgICAgICAgZi0+ YWNjZXNzW2ldID0gMHgwOwotICAgICAgICBmLT5zZW1fdmFsdWVbaV0gPSAwOwotICAgIH0KLQot ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZGVzYy0+bmJfbGF5ZXJzOyBpKyspIHsKLSAgICAgICAg LyogTWVtb3J5IHJlcXVpcmVtZW50cyAqLwotICAgICAgICBWa0ltYWdlTWVtb3J5UmVxdWlyZW1l bnRzSW5mbzIgcmVxX2Rlc2MgPSB7Ci0gICAgICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVf VFlQRV9JTUFHRV9NRU1PUllfUkVRVUlSRU1FTlRTX0lORk9fMiwKLSAgICAgICAgICAgIC5pbWFn ZSA9IGYtPmltZ1tpXSwKLSAgICAgICAgfTsKLSAgICAgICAgVmtNZW1vcnlEZWRpY2F0ZWRSZXF1 aXJlbWVudHMgZGVkX3JlcSA9IHsKLSAgICAgICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9U WVBFX01FTU9SWV9ERURJQ0FURURfUkVRVUlSRU1FTlRTLAotICAgICAgICB9OwotICAgICAgICBW a01lbW9yeVJlcXVpcmVtZW50czIgcmVxMiA9IHsKLSAgICAgICAgICAgIC5zVHlwZSA9IFZLX1NU UlVDVFVSRV9UWVBFX01FTU9SWV9SRVFVSVJFTUVOVFNfMiwKLSAgICAgICAgICAgIC5wTmV4dCA9 ICZkZWRfcmVxLAotICAgICAgICB9OwotCi0gICAgICAgIC8qIEFsbG9jYXRpb24vaW1wb3J0aW5n ICovCi0gICAgICAgIFZrTWVtb3J5RmRQcm9wZXJ0aWVzS0hSIGZkbXAgPSB7Ci0gICAgICAgICAg ICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9NRU1PUllfRkRfUFJPUEVSVElFU19LSFIsCi0g ICAgICAgIH07Ci0gICAgICAgIC8qIFRoaXMgYXNzdW1lcyB0aGF0IGEgbGF5ZXIgd2lsbCBuZXZl ciBiZSBjb25zdHJ1Y3RlZCBmcm9tIG11bHRpcGxlCi0gICAgICAgICAqIG9iamVjdHMuIElmIHRo YXQgd2FzIHRvIGhhcHBlbiBpbiB0aGUgcmVhbCB3b3JsZCwgdGhpcyBjb2RlIHdvdWxkCi0gICAg ICAgICAqIG5lZWQgdG8gaW1wb3J0IGVhY2ggcGxhbmUgc2VwYXJhdGVseS4KLSAgICAgICAgICov Ci0gICAgICAgIFZrSW1wb3J0TWVtb3J5RmRJbmZvS0hSIGlkZXNjID0gewotICAgICAgICAgICAg LnNUeXBlICAgICAgPSBWS19TVFJVQ1RVUkVfVFlQRV9JTVBPUlRfTUVNT1JZX0ZEX0lORk9fS0hS LAotICAgICAgICAgICAgLmZkICAgICAgICAgPSBkdXAoZGVzYy0+b2JqZWN0c1tkZXNjLT5sYXll cnNbaV0ucGxhbmVzWzBdLm9iamVjdF9pbmRleF0uZmQpLAotICAgICAgICAgICAgLmhhbmRsZVR5 cGUgPSBWS19FWFRFUk5BTF9NRU1PUllfSEFORExFX1RZUEVfRE1BX0JVRl9CSVRfRVhULAotICAg ICAgICB9OwotICAgICAgICBWa01lbW9yeURlZGljYXRlZEFsbG9jYXRlSW5mbyBkZWRfYWxsb2Mg PSB7Ci0gICAgICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9NRU1PUllfREVESUNB VEVEX0FMTE9DQVRFX0lORk8sCi0gICAgICAgICAgICAucE5leHQgPSAmaWRlc2MsCi0gICAgICAg ICAgICAuaW1hZ2UgPSByZXFfZGVzYy5pbWFnZSwKLSAgICAgICAgfTsKLQotICAgICAgICAvKiBH ZXQgb2JqZWN0IHByb3BlcnRpZXMgKi8KLSAgICAgICAgcmV0ID0gdmstPkdldE1lbW9yeUZkUHJv cGVydGllc0tIUihod2N0eC0+YWN0X2RldiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBWS19FWFRFUk5BTF9NRU1PUllfSEFORExFX1RZUEVfRE1BX0JVRl9CSVRf RVhULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkZXNjLmZk LCAmZmRtcCk7Ci0gICAgICAgIGlmIChyZXQgIT0gVktfU1VDQ0VTUykgewotICAgICAgICAgICAg YXZfbG9nKGh3ZmMsIEFWX0xPR19FUlJPUiwgIkZhaWxlZCB0byBnZXQgRkQgcHJvcGVydGllczog JXNcbiIsCi0gICAgICAgICAgICAgICAgICAgZmZfdmtfcmV0MnN0cihyZXQpKTsKLSAgICAgICAg ICAgIGVyciA9IEFWRVJST1JfRVhURVJOQUw7Ci0gICAgICAgICAgICBjbG9zZShpZGVzYy5mZCk7 Ci0gICAgICAgICAgICBnb3RvIGZhaWw7Ci0gICAgICAgIH0KLQotICAgICAgICB2ay0+R2V0SW1h Z2VNZW1vcnlSZXF1aXJlbWVudHMyKGh3Y3R4LT5hY3RfZGV2LCAmcmVxX2Rlc2MsICZyZXEyKTsK LQotICAgICAgICAvKiBPbmx5IGEgc2luZ2xlIGJpdCBtdXN0IGJlIHNldCwgbm90IGEgcmFuZ2Us IGFuZCBpdCBtdXN0IG1hdGNoICovCi0gICAgICAgIHJlcTIubWVtb3J5UmVxdWlyZW1lbnRzLm1l bW9yeVR5cGVCaXRzID0gZmRtcC5tZW1vcnlUeXBlQml0czsKLQotICAgICAgICBlcnIgPSBhbGxv Y19tZW0oY3R4LCAmcmVxMi5tZW1vcnlSZXF1aXJlbWVudHMsCi0gICAgICAgICAgICAgICAgICAg ICAgICBWS19NRU1PUllfUFJPUEVSVFlfREVWSUNFX0xPQ0FMX0JJVCwKLSAgICAgICAgICAgICAg ICAgICAgICAgIChkZWRfcmVxLnByZWZlcnNEZWRpY2F0ZWRBbGxvY2F0aW9uIHx8Ci0gICAgICAg ICAgICAgICAgICAgICAgICAgZGVkX3JlcS5yZXF1aXJlc0RlZGljYXRlZEFsbG9jYXRpb24pID8K LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZGVkX2FsbG9jIDogZGVkX2FsbG9jLnBOZXh0 LAotICAgICAgICAgICAgICAgICAgICAgICAgJmYtPmZsYWdzLCAmZi0+bWVtW2ldKTsKLSAgICAg ICAgaWYgKGVycikgewotICAgICAgICAgICAgY2xvc2UoaWRlc2MuZmQpOwotICAgICAgICAgICAg cmV0dXJuIGVycjsKLSAgICAgICAgfQotCi0gICAgICAgIGYtPnNpemVbaV0gPSByZXEyLm1lbW9y eVJlcXVpcmVtZW50cy5zaXplOwotICAgIH0KLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZGVz Yy0+bmJfbGF5ZXJzOyBpKyspIHsKLSAgICAgICAgY29uc3QgaW50IHBsYW5lcyA9IGRlc2MtPmxh eWVyc1tpXS5uYl9wbGFuZXM7Ci0gICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgcGxhbmVzOyBq KyspIHsKLSAgICAgICAgICAgIFZrSW1hZ2VBc3BlY3RGbGFnQml0cyBhc3BlY3QgPSBqID09IDAg PyBWS19JTUFHRV9BU1BFQ1RfTUVNT1JZX1BMQU5FXzBfQklUX0VYVCA6Ci0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaiA9PSAxID8gVktfSU1BR0VfQVNQRUNUX01F TU9SWV9QTEFORV8xX0JJVF9FWFQgOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFZLX0lNQUdFX0FTUEVDVF9NRU1PUllfUExBTkVfMl9CSVRfRVhU OwotCi0gICAgICAgICAgICBwbGFuZV9pbmZvW2JpbmRfY291bnRzXS5zVHlwZSA9IFZLX1NUUlVD VFVSRV9UWVBFX0JJTkRfSU1BR0VfUExBTkVfTUVNT1JZX0lORk87Ci0gICAgICAgICAgICBwbGFu ZV9pbmZvW2JpbmRfY291bnRzXS5wTmV4dCA9IE5VTEw7Ci0gICAgICAgICAgICBwbGFuZV9pbmZv W2JpbmRfY291bnRzXS5wbGFuZUFzcGVjdCA9IGFzcGVjdDsKLQotICAgICAgICAgICAgYmluZF9p bmZvW2JpbmRfY291bnRzXS5zVHlwZSAgPSBWS19TVFJVQ1RVUkVfVFlQRV9CSU5EX0lNQUdFX01F TU9SWV9JTkZPOwotICAgICAgICAgICAgYmluZF9pbmZvW2JpbmRfY291bnRzXS5wTmV4dCAgPSBw bGFuZXMgPiAxID8gJnBsYW5lX2luZm9bYmluZF9jb3VudHNdIDogTlVMTDsKLSAgICAgICAgICAg IGJpbmRfaW5mb1tiaW5kX2NvdW50c10uaW1hZ2UgID0gZi0+aW1nW2ldOwotICAgICAgICAgICAg YmluZF9pbmZvW2JpbmRfY291bnRzXS5tZW1vcnkgPSBmLT5tZW1baV07Ci0KLSAgICAgICAgICAg IC8qIE9mZnNldCBpcyBhbHJlYWR5IHNpZ25hbGxlZCB2aWEgcFBsYW5lTGF5b3V0cyBhYm92ZSAq LwotICAgICAgICAgICAgYmluZF9pbmZvW2JpbmRfY291bnRzXS5tZW1vcnlPZmZzZXQgPSAwOwot Ci0gICAgICAgICAgICBiaW5kX2NvdW50cysrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyog QmluZCB0aGUgYWxsb2NhdGVkIG1lbW9yeSB0byB0aGUgaW1hZ2VzICovCi0gICAgcmV0ID0gdmst PkJpbmRJbWFnZU1lbW9yeTIoaHdjdHgtPmFjdF9kZXYsIGJpbmRfY291bnRzLCBiaW5kX2luZm8p OwotICAgIGlmIChyZXQgIT0gVktfU1VDQ0VTUykgewotICAgICAgICBhdl9sb2coY3R4LCBBVl9M T0dfRVJST1IsICJGYWlsZWQgdG8gYmluZCBtZW1vcnk6ICVzXG4iLAotICAgICAgICAgICAgICAg ZmZfdmtfcmV0MnN0cihyZXQpKTsKLSAgICAgICAgZXJyID0gQVZFUlJPUl9FWFRFUk5BTDsKLSAg ICAgICAgZ290byBmYWlsOwotICAgIH0KLQotICAgICpmcmFtZSA9IGY7Ci0KLSAgICByZXR1cm4g MDsKLQotZmFpbDoKLSAgICB2dWxrYW5fZnJhbWVfZnJlZShod2ZjLCBmKTsKLQotICAgIHJldHVy biBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgdnVsa2FuX21hcF9mcm9tX2RybV9mcmFtZV9zeW5jKEFW SFdGcmFtZXNDb250ZXh0ICpod2ZjLCBBVkZyYW1lICpkc3QsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBVkZyYW1lICpzcmMsIGludCBmbGFncykKLXsK LSAgICBpbnQgZXJyOwotICAgIFZrUmVzdWx0IHJldDsKLSAgICBBVkhXRGV2aWNlQ29udGV4dCAq Y3R4ID0gaHdmYy0+ZGV2aWNlX2N0eDsKLSAgICBWdWxrYW5EZXZpY2VQcml2ICpwID0gY3R4LT5o d2N0eDsKLSAgICBWdWxrYW5GcmFtZXNQcml2ICpmcCA9IGh3ZmMtPmh3Y3R4OwotICAgIEFWVnVs a2FuRGV2aWNlQ29udGV4dCAqaHdjdHggPSAmcC0+cDsKLSAgICBGRlZ1bGthbkZ1bmN0aW9ucyAq dmsgPSAmcC0+dmtjdHgudmtmbjsKLQotICAgIGNvbnN0IEFWRFJNRnJhbWVEZXNjcmlwdG9yICpk ZXNjID0gKEFWRFJNRnJhbWVEZXNjcmlwdG9yICopc3JjLT5kYXRhWzBdOwotCi0jaWZkZWYgRE1B X0JVRl9JT0NUTF9FWFBPUlRfU1lOQ19GSUxFCi0gICAgaWYgKHAtPnZrY3R4LmV4dGVuc2lvbnMg JiBGRl9WS19FWFRfRVhURVJOQUxfRkRfU0VNKSB7Ci0gICAgICAgIFZrQ29tbWFuZEJ1ZmZlciBj bWRfYnVmOwotICAgICAgICBGRlZrRXhlY0NvbnRleHQgKmV4ZWM7Ci0gICAgICAgIFZrSW1hZ2VN ZW1vcnlCYXJyaWVyMiBpbWdfYmFyW0FWX05VTV9EQVRBX1BPSU5URVJTXTsKLSAgICAgICAgVmtT ZW1hcGhvcmUgZHJtX3N5bmNfc2VtW0FWX0RSTV9NQVhfUExBTkVTXSA9IHsgMCB9OwotICAgICAg ICBpbnQgbmJfaW1nX2JhciA9IDA7Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZXNj LT5uYl9vYmplY3RzOyBpKyspIHsKLSAgICAgICAgICAgIFZrU2VtYXBob3JlVHlwZUNyZWF0ZUlu Zm8gc2VtX3R5cGVfaW5mbyA9IHsKLSAgICAgICAgICAgICAgICAuc1R5cGUgICAgICAgICA9IFZL X1NUUlVDVFVSRV9UWVBFX1NFTUFQSE9SRV9UWVBFX0NSRUFURV9JTkZPLAotICAgICAgICAgICAg ICAgIC5zZW1hcGhvcmVUeXBlID0gVktfU0VNQVBIT1JFX1RZUEVfQklOQVJZLAotICAgICAgICAg ICAgfTsKLSAgICAgICAgICAgIFZrU2VtYXBob3JlQ3JlYXRlSW5mbyBzZW1fc3Bhd24gPSB7Ci0g ICAgICAgICAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfU0VNQVBIT1JFX0NSRUFU RV9JTkZPLAotICAgICAgICAgICAgICAgIC5wTmV4dCA9ICZzZW1fdHlwZV9pbmZvLAotICAgICAg ICAgICAgfTsKLSAgICAgICAgICAgIFZrSW1wb3J0U2VtYXBob3JlRmRJbmZvS0hSIGltcG9ydF9p bmZvOwotICAgICAgICAgICAgc3RydWN0IGRtYV9idWZfZXhwb3J0X3N5bmNfZmlsZSBpbXBsaWNp dF9mZF9pbmZvID0gewotICAgICAgICAgICAgICAgIC5mbGFncyA9IERNQV9CVUZfU1lOQ19SRUFE LAotICAgICAgICAgICAgICAgIC5mZCA9IC0xLAotICAgICAgICAgICAgfTsKLQotICAgICAgICAg ICAgaWYgKGlvY3RsKGRlc2MtPm9iamVjdHNbaV0uZmQsIERNQV9CVUZfSU9DVExfRVhQT1JUX1NZ TkNfRklMRSwKLSAgICAgICAgICAgICAgICAgICAgICAmaW1wbGljaXRfZmRfaW5mbykpIHsKLSAg ICAgICAgICAgICAgICBlcnIgPSBBVkVSUk9SKGVycm5vKTsKLSAgICAgICAgICAgICAgICBhdl9s b2coaHdjdHgsIEFWX0xPR19FUlJPUiwgIkZhaWxlZCB0byByZXRyaWV2ZSBpbXBsaWNpdCBEUk0g c3luYyBmaWxlOiAlc1xuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgYXZfZXJyMnN0cihlcnIp KTsKLSAgICAgICAgICAgICAgICBmb3IgKDsgaSA+PSAwOyBpLS0pCi0gICAgICAgICAgICAgICAg ICAgIHZrLT5EZXN0cm95U2VtYXBob3JlKGh3Y3R4LT5hY3RfZGV2LCBkcm1fc3luY19zZW1baV0s IGh3Y3R4LT5hbGxvYyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKLSAgICAgICAgICAg IH0KLQotICAgICAgICAgICAgcmV0ID0gdmstPkNyZWF0ZVNlbWFwaG9yZShod2N0eC0+YWN0X2Rl diwgJnNlbV9zcGF3biwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHdj dHgtPmFsbG9jLCAmZHJtX3N5bmNfc2VtW2ldKTsKLSAgICAgICAgICAgIGlmIChyZXQgIT0gVktf U1VDQ0VTUykgewotICAgICAgICAgICAgICAgIGF2X2xvZyhod2N0eCwgQVZfTE9HX0VSUk9SLCAi RmFpbGVkIHRvIGNyZWF0ZSBzZW1hcGhvcmU6ICVzXG4iLAotICAgICAgICAgICAgICAgICAgICAg ICBmZl92a19yZXQyc3RyKHJldCkpOwotICAgICAgICAgICAgICAgIGVyciA9IEFWRVJST1JfRVhU RVJOQUw7Ci0gICAgICAgICAgICAgICAgZm9yICg7IGkgPj0gMDsgaS0tKQotICAgICAgICAgICAg ICAgICAgICB2ay0+RGVzdHJveVNlbWFwaG9yZShod2N0eC0+YWN0X2RldiwgZHJtX3N5bmNfc2Vt W2ldLCBod2N0eC0+YWxsb2MpOwotICAgICAgICAgICAgICAgIHJldHVybiBlcnI7Ci0gICAgICAg ICAgICB9Ci0KLSAgICAgICAgICAgIGltcG9ydF9pbmZvID0gKFZrSW1wb3J0U2VtYXBob3JlRmRJ bmZvS0hSKSB7Ci0gICAgICAgICAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfSU1Q T1JUX1NFTUFQSE9SRV9GRF9JTkZPX0tIUiwKLSAgICAgICAgICAgICAgICAuaGFuZGxlVHlwZSA9 IFZLX0VYVEVSTkFMX1NFTUFQSE9SRV9IQU5ETEVfVFlQRV9TWU5DX0ZEX0JJVCwKLSAgICAgICAg ICAgICAgICAuZmxhZ3MgPSBWS19TRU1BUEhPUkVfSU1QT1JUX1RFTVBPUkFSWV9CSVQsCi0gICAg ICAgICAgICAgICAgLnNlbWFwaG9yZSA9IGRybV9zeW5jX3NlbVtpXSwKLSAgICAgICAgICAgICAg ICAuZmQgPSBpbXBsaWNpdF9mZF9pbmZvLmZkLAotICAgICAgICAgICAgfTsKLQotICAgICAgICAg ICAgcmV0ID0gdmstPkltcG9ydFNlbWFwaG9yZUZkS0hSKGh3Y3R4LT5hY3RfZGV2LCAmaW1wb3J0 X2luZm8pOwotICAgICAgICAgICAgaWYgKHJldCAhPSBWS19TVUNDRVNTKSB7Ci0gICAgICAgICAg ICAgICAgYXZfbG9nKGh3Y3R4LCBBVl9MT0dfRVJST1IsICJGYWlsZWQgdG8gaW1wb3J0IHNlbWFw aG9yZTogJXNcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgIGZmX3ZrX3JldDJzdHIocmV0KSk7 Ci0gICAgICAgICAgICAgICAgZXJyID0gQVZFUlJPUl9FWFRFUk5BTDsKLSAgICAgICAgICAgICAg ICBmb3IgKDsgaSA+PSAwOyBpLS0pCi0gICAgICAgICAgICAgICAgICAgIHZrLT5EZXN0cm95U2Vt YXBob3JlKGh3Y3R4LT5hY3RfZGV2LCBkcm1fc3luY19zZW1baV0sIGh3Y3R4LT5hbGxvYyk7Ci0g ICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0g ICAgICAgIGV4ZWMgPSBmZl92a19leGVjX2dldCgmcC0+dmtjdHgsICZmcC0+Y29tcHV0ZV9leGVj KTsKLSAgICAgICAgY21kX2J1ZiA9IGV4ZWMtPmJ1ZjsKLQotICAgICAgICBmZl92a19leGVjX3N0 YXJ0KCZwLT52a2N0eCwgZXhlYyk7Ci0KLSAgICAgICAgLyogT3duZXJzaGlwIG9mIHNlbWFwaG9y ZXMgaXMgcGFzc2VkICovCi0gICAgICAgIGVyciA9IGZmX3ZrX2V4ZWNfYWRkX2RlcF9ib29sX3Nl bSgmcC0+dmtjdHgsIGV4ZWMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBkcm1fc3luY19zZW0sIGRlc2MtPm5iX29iamVjdHMsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBWS19QSVBFTElORV9TVEFHRV8yX0FMTF9DT01NQU5EU19C SVQsIDEpOwotICAgICAgICBpZiAoZXJyIDwgMCkKLSAgICAgICAgICAgIHJldHVybiBlcnI7Ci0K LSAgICAgICAgZXJyID0gZmZfdmtfZXhlY19hZGRfZGVwX2ZyYW1lKCZwLT52a2N0eCwgZXhlYywg ZHN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfUElQRUxJTkVf U1RBR0VfMl9OT05FLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktf UElQRUxJTkVfU1RBR0VfMl9BTExfQ09NTUFORFNfQklUKTsKLSAgICAgICAgaWYgKGVyciA8IDAp Ci0gICAgICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgICAgIGZmX3ZrX2ZyYW1lX2JhcnJpZXIo JnAtPnZrY3R4LCBleGVjLCBkc3QsIGltZ19iYXIsICZuYl9pbWdfYmFyLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFZLX1BJUEVMSU5FX1NUQUdFXzJfTk9ORSwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICBWS19QSVBFTElORV9TVEFHRV8yX0FMTF9DT01NQU5EU19CSVQsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgKChmbGFncyAmIEFWX0hXRlJBTUVfTUFQX1JFQUQpID8K LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfQUNDRVNTXzJfU0hBREVSX1NBTVBMRURf UkVBRF9CSVQgOiAweDApIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGZsYWdzICYg QVZfSFdGUkFNRV9NQVBfV1JJVEUpID8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktf QUNDRVNTXzJfU0hBREVSX1NUT1JBR0VfV1JJVEVfQklUIDogMHgwKSwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICBWS19JTUFHRV9MQVlPVVRfR0VORVJBTCwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICBwLT5uYl9pbWdfcWZzID4gMSA/IFZLX1FVRVVFX0ZBTUlMWV9JR05PUkVEIDog cC0+aW1nX3Fmc1swXSk7Ci0KLSAgICAgICAgdmstPkNtZFBpcGVsaW5lQmFycmllcjIoY21kX2J1 ZiwgJihWa0RlcGVuZGVuY3lJbmZvKSB7Ci0gICAgICAgICAgICAgICAgLnNUeXBlID0gVktfU1RS VUNUVVJFX1RZUEVfREVQRU5ERU5DWV9JTkZPLAotICAgICAgICAgICAgICAgIC5wSW1hZ2VNZW1v cnlCYXJyaWVycyA9IGltZ19iYXIsCi0gICAgICAgICAgICAgICAgLmltYWdlTWVtb3J5QmFycmll ckNvdW50ID0gbmJfaW1nX2JhciwKLSAgICAgICAgICAgIH0pOwotCi0gICAgICAgIGVyciA9IGZm X3ZrX2V4ZWNfc3VibWl0KCZwLT52a2N0eCwgZXhlYyk7Ci0gICAgICAgIGlmIChlcnIgPCAwKQot ICAgICAgICAgICAgcmV0dXJuIGVycjsKLSAgICB9IGVsc2UKLSNlbmRpZgotICAgIHsKLSAgICAg ICAgQVZWa0ZyYW1lICpmID0gKEFWVmtGcmFtZSAqKWRzdC0+ZGF0YVswXTsKLSAgICAgICAgYXZf bG9nKGh3Y3R4LCBBVl9MT0dfV0FSTklORywgIk5vIHN1cHBvcnQgZm9yIHN5bmNocm9uaXphdGlv biB3aGVuIGltcG9ydGluZyBETUEtQlVGcywgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAiaW1hZ2UgbWF5IGJlIGNvcnJ1cHRlZC5cbiIpOwotICAgICAgICBlcnIgPSBw cmVwYXJlX2ZyYW1lKGh3ZmMsICZmcC0+Y29tcHV0ZV9leGVjLCBmLCBQUkVQX01PREVfRVhURVJO QUxfSU1QT1JUKTsKLSAgICAgICAgaWYgKGVycikKLSAgICAgICAgICAgIHJldHVybiBlcnI7Ci0g ICAgfQotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgdnVsa2FuX21hcF9mcm9tX2Ry bShBVkhXRnJhbWVzQ29udGV4dCAqaHdmYywgQVZGcmFtZSAqZHN0LAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IEFWRnJhbWUgKnNyYywgaW50IGZsYWdzKQotewotICAgIGlu dCBlcnIgPSAwOwotICAgIEFWVmtGcmFtZSAqZjsKLQotICAgIGlmICgoZXJyID0gdnVsa2FuX21h cF9mcm9tX2RybV9mcmFtZV9kZXNjKGh3ZmMsICZmLCBzcmMsIGZsYWdzKSkpCi0gICAgICAgIHJl dHVybiBlcnI7Ci0KLSAgICAvKiBUaGUgdW5tYXBwaW5nIGZ1bmN0aW9uIHdpbGwgZnJlZSB0aGlz ICovCi0gICAgZHN0LT5kYXRhWzBdID0gKHVpbnQ4X3QgKilmOwotICAgIGRzdC0+d2lkdGggICA9 IHNyYy0+d2lkdGg7Ci0gICAgZHN0LT5oZWlnaHQgID0gc3JjLT5oZWlnaHQ7Ci0KLSAgICBlcnIg PSBmZl9od2ZyYW1lX21hcF9jcmVhdGUoZHN0LT5od19mcmFtZXNfY3R4LCBkc3QsIHNyYywKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnZ1bGthbl91bm1hcF9mcm9tX2RybSwgZik7 Ci0gICAgaWYgKGVyciA8IDApCi0gICAgICAgIGdvdG8gZmFpbDsKLQotICAgIGVyciA9IHZ1bGth bl9tYXBfZnJvbV9kcm1fZnJhbWVfc3luYyhod2ZjLCBkc3QsIHNyYywgZmxhZ3MpOwotICAgIGlm IChlcnIgPCAwKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgYXZfbG9nKGh3ZmMsIEFWX0xP R19ERUJVRywgIk1hcHBlZCBEUk0gb2JqZWN0IHRvIFZ1bGthbiFcbiIpOwotCi0gICAgcmV0dXJu IDA7Ci0KLWZhaWw6Ci0gICAgdnVsa2FuX2ZyYW1lX2ZyZWUoaHdmYy0+ZGV2aWNlX2N0eC0+aHdj dHgsIGYpOwotICAgIGRzdC0+ZGF0YVswXSA9IE5VTEw7Ci0gICAgcmV0dXJuIGVycjsKLX0KLQot I2lmIENPTkZJR19WQUFQSQotc3RhdGljIGludCB2dWxrYW5fbWFwX2Zyb21fdmFhcGkoQVZIV0Zy YW1lc0NvbnRleHQgKmRzdF9mYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFW RnJhbWUgKmRzdCwgY29uc3QgQVZGcmFtZSAqc3JjLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaW50IGZsYWdzKQotewotICAgIGludCBlcnI7Ci0gICAgQVZGcmFtZSAqdG1wID0g YXZfZnJhbWVfYWxsb2MoKTsKLSAgICBBVkhXRnJhbWVzQ29udGV4dCAqdmFhcGlfZmMgPSAoQVZI V0ZyYW1lc0NvbnRleHQqKXNyYy0+aHdfZnJhbWVzX2N0eC0+ZGF0YTsKLSAgICBBVlZBQVBJRGV2 aWNlQ29udGV4dCAqdmFhcGlfY3R4ID0gdmFhcGlfZmMtPmRldmljZV9jdHgtPmh3Y3R4OwotICAg IFZBU3VyZmFjZUlEIHN1cmZhY2VfaWQgPSAoVkFTdXJmYWNlSUQpKHVpbnRwdHJfdClzcmMtPmRh dGFbM107Ci0KLSAgICBpZiAoIXRtcCkKLSAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsK LQotICAgIC8qIFdlIGhhdmUgdG8gc3luYyBzaW5jZSBsaWtlIHRoZSBwcmV2aW91cyBjb21tZW50 IHNhaWQsIG5vIHNlbWFwaG9yZXMgKi8KLSAgICB2YVN5bmNTdXJmYWNlKHZhYXBpX2N0eC0+ZGlz cGxheSwgc3VyZmFjZV9pZCk7Ci0KLSAgICB0bXAtPmZvcm1hdCA9IEFWX1BJWF9GTVRfRFJNX1BS SU1FOwotCi0gICAgZXJyID0gYXZfaHdmcmFtZV9tYXAodG1wLCBzcmMsIGZsYWdzKTsKLSAgICBp ZiAoZXJyIDwgMCkKLSAgICAgICAgZ290byBmYWlsOwotCi0gICAgZXJyID0gdnVsa2FuX21hcF9m cm9tX2RybShkc3RfZmMsIGRzdCwgdG1wLCBmbGFncyk7Ci0gICAgaWYgKGVyciA8IDApCi0gICAg ICAgIGdvdG8gZmFpbDsKLQotICAgIGVyciA9IGZmX2h3ZnJhbWVfbWFwX3JlcGxhY2UoZHN0LCBz cmMpOwotCi1mYWlsOgotICAgIGF2X2ZyYW1lX2ZyZWUoJnRtcCk7Ci0gICAgcmV0dXJuIGVycjsK LX0KLSNlbmRpZgotI2VuZGlmCi0KLSNpZiBDT05GSUdfQ1VEQQotc3RhdGljIGludCBleHBvcnRf bWVtX3RvX2N1ZGEoQVZIV0RldmljZUNvbnRleHQgKmN0eCwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEFWSFdEZXZpY2VDb250ZXh0ICpjdWRhX2N1LCBDdWRhRnVuY3Rpb25zICpjdSwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFWVmtGcmFtZUludGVybmFsICpkc3RfaW50 LCBpbnQgaWR4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmtEZXZpY2VNZW1vcnkg bWVtLCBzaXplX3Qgc2l6ZSkKLXsKLSAgICBWa1Jlc3VsdCByZXQ7Ci0gICAgVnVsa2FuRGV2aWNl UHJpdiAqcCA9IGN0eC0+aHdjdHg7Ci0gICAgQVZWdWxrYW5EZXZpY2VDb250ZXh0ICpod2N0eCA9 ICZwLT5wOwotICAgIEZGVnVsa2FuRnVuY3Rpb25zICp2ayA9ICZwLT52a2N0eC52a2ZuOwotCi0j aWZkZWYgX1dJTjMyCi0gICAgQ1VEQV9FWFRFUk5BTF9NRU1PUllfSEFORExFX0RFU0MgZXh0X2Rl c2MgPSB7Ci0gICAgICAgIC50eXBlID0gSXNXaW5kb3dzOE9yR3JlYXRlcigpCi0gICAgICAgICAg ICAgICAgPyBDVV9FWFRFUk5BTF9NRU1PUllfSEFORExFX1RZUEVfT1BBUVVFX1dJTjMyCi0gICAg ICAgICAgICAgICAgOiBDVV9FWFRFUk5BTF9NRU1PUllfSEFORExFX1RZUEVfT1BBUVVFX1dJTjMy X0tNVCwKLSAgICAgICAgICAgIC5zaXplID0gc2l6ZSwKLSAgICB9OwotICAgIFZrTWVtb3J5R2V0 V2luMzJIYW5kbGVJbmZvS0hSIGV4cG9ydF9pbmZvID0gewotICAgICAgICAuc1R5cGUgICAgICA9 IFZLX1NUUlVDVFVSRV9UWVBFX01FTU9SWV9HRVRfV0lOMzJfSEFORExFX0lORk9fS0hSLAotICAg ICAgICAubWVtb3J5ICAgICA9IG1lbSwKLSAgICAgICAgLmhhbmRsZVR5cGUgPSBJc1dpbmRvd3M4 T3JHcmVhdGVyKCkKLSAgICAgICAgICAgID8gVktfRVhURVJOQUxfTUVNT1JZX0hBTkRMRV9UWVBF X09QQVFVRV9XSU4zMl9CSVQKLSAgICAgICAgICAgIDogVktfRVhURVJOQUxfTUVNT1JZX0hBTkRM RV9UWVBFX09QQVFVRV9XSU4zMl9LTVRfQklULAotICAgIH07Ci0KLSAgICByZXQgPSB2ay0+R2V0 TWVtb3J5V2luMzJIYW5kbGVLSFIoaHdjdHgtPmFjdF9kZXYsICZleHBvcnRfaW5mbywKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmV4dF9kZXNjLmhhbmRsZS53aW4zMi5o YW5kbGUpOwotICAgIGlmIChyZXQgIT0gVktfU1VDQ0VTUykgewotICAgICAgICBhdl9sb2coY3R4 LCBBVl9MT0dfRVJST1IsICJVbmFibGUgdG8gZXhwb3J0IHRoZSBpbWFnZSBhcyBhIFdpbjMyIEhh bmRsZTogJXMhXG4iLAotICAgICAgICAgICAgICAgZmZfdmtfcmV0MnN0cihyZXQpKTsKLSAgICAg ICAgcmV0dXJuIEFWRVJST1JfRVhURVJOQUw7Ci0gICAgfQotICAgIGRzdF9pbnQtPmV4dF9tZW1f aGFuZGxlW2lkeF0gPSBleHRfZGVzYy5oYW5kbGUud2luMzIuaGFuZGxlOwotI2Vsc2UKLSAgICBD VURBX0VYVEVSTkFMX01FTU9SWV9IQU5ETEVfREVTQyBleHRfZGVzYyA9IHsKLSAgICAgICAgLnR5 cGUgPSBDVV9FWFRFUk5BTF9NRU1PUllfSEFORExFX1RZUEVfT1BBUVVFX0ZELAotICAgICAgICAu c2l6ZSA9IHNpemUsCi0gICAgfTsKLSAgICBWa01lbW9yeUdldEZkSW5mb0tIUiBleHBvcnRfaW5m byA9IHsKLSAgICAgICAgLnNUeXBlICAgICAgPSBWS19TVFJVQ1RVUkVfVFlQRV9NRU1PUllfR0VU X0ZEX0lORk9fS0hSLAotICAgICAgICAubWVtb3J5ICAgICA9IG1lbSwKLSAgICAgICAgLmhhbmRs ZVR5cGUgPSBWS19FWFRFUk5BTF9NRU1PUllfSEFORExFX1RZUEVfT1BBUVVFX0ZEX0JJVF9LSFIs Ci0gICAgfTsKLQotICAgIHJldCA9IHZrLT5HZXRNZW1vcnlGZEtIUihod2N0eC0+YWN0X2Rldiwg JmV4cG9ydF9pbmZvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZXh0X2Rlc2MuaGFu ZGxlLmZkKTsKLSAgICBpZiAocmV0ICE9IFZLX1NVQ0NFU1MpIHsKLSAgICAgICAgYXZfbG9nKGN0 eCwgQVZfTE9HX0VSUk9SLCAiVW5hYmxlIHRvIGV4cG9ydCB0aGUgaW1hZ2UgYXMgYSBGRDogJXMh XG4iLAotICAgICAgICAgICAgICAgZmZfdmtfcmV0MnN0cihyZXQpKTsKLSAgICAgICAgcmV0dXJu IEFWRVJST1JfRVhURVJOQUw7Ci0gICAgfQotI2VuZGlmCi0KLSAgICByZXQgPSBDSEVDS19DVShj dS0+Y3VJbXBvcnRFeHRlcm5hbE1lbW9yeSgmZHN0X2ludC0+ZXh0X21lbVtpZHhdLCAmZXh0X2Rl c2MpKTsKLSAgICBpZiAocmV0IDwgMCkgewotI2lmbmRlZiBfV0lOMzIKLSAgICAgICAgY2xvc2Uo ZXh0X2Rlc2MuaGFuZGxlLmZkKTsKLSNlbmRpZgotICAgICAgICByZXR1cm4gQVZFUlJPUl9FWFRF Uk5BTDsKLSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBleHBvcnRfc2Vt X3RvX2N1ZGEoQVZIV0RldmljZUNvbnRleHQgKmN0eCwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEFWSFdEZXZpY2VDb250ZXh0ICpjdWRhX2N1LCBDdWRhRnVuY3Rpb25zICpjdSwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFWVmtGcmFtZUludGVybmFsICpkc3RfaW50LCBp bnQgaWR4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmtTZW1hcGhvcmUgc2VtKQot ewotICAgIFZrUmVzdWx0IHJldDsKLSAgICBWdWxrYW5EZXZpY2VQcml2ICpwID0gY3R4LT5od2N0 eDsKLSAgICBBVlZ1bGthbkRldmljZUNvbnRleHQgKmh3Y3R4ID0gJnAtPnA7Ci0gICAgRkZWdWxr YW5GdW5jdGlvbnMgKnZrID0gJnAtPnZrY3R4LnZrZm47Ci0KLSNpZmRlZiBfV0lOMzIKLSAgICBW a1NlbWFwaG9yZUdldFdpbjMySGFuZGxlSW5mb0tIUiBzZW1fZXhwb3J0ID0gewotICAgICAgICAu c1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9TRU1BUEhPUkVfR0VUX1dJTjMyX0hBTkRMRV9JTkZP X0tIUiwKLSAgICAgICAgLnNlbWFwaG9yZSA9IHNlbSwKLSAgICAgICAgLmhhbmRsZVR5cGUgPSBJ c1dpbmRvd3M4T3JHcmVhdGVyKCkKLSAgICAgICAgICAgICAgICAgICAgICA/IFZLX0VYVEVSTkFM X1NFTUFQSE9SRV9IQU5ETEVfVFlQRV9PUEFRVUVfV0lOMzJfQklUCi0gICAgICAgICAgICAgICAg ICAgICAgOiBWS19FWFRFUk5BTF9TRU1BUEhPUkVfSEFORExFX1RZUEVfT1BBUVVFX1dJTjMyX0tN VF9CSVQsCi0gICAgfTsKLSAgICBDVURBX0VYVEVSTkFMX1NFTUFQSE9SRV9IQU5ETEVfREVTQyBl eHRfc2VtX2Rlc2MgPSB7Ci0gICAgICAgIC50eXBlID0gMTAgLyogVE9ETzogQ1VfRVhURVJOQUxf U0VNQVBIT1JFX0hBTkRMRV9UWVBFX1RJTUVMSU5FX1NFTUFQSE9SRV9XSU4zMiAqLywKLSAgICB9 OwotI2Vsc2UKLSAgICBWa1NlbWFwaG9yZUdldEZkSW5mb0tIUiBzZW1fZXhwb3J0ID0gewotICAg ICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9TRU1BUEhPUkVfR0VUX0ZEX0lORk9fS0hS LAotICAgICAgICAuc2VtYXBob3JlID0gc2VtLAotICAgICAgICAuaGFuZGxlVHlwZSA9IFZLX0VY VEVSTkFMX1NFTUFQSE9SRV9IQU5ETEVfVFlQRV9PUEFRVUVfRkRfQklULAotICAgIH07Ci0gICAg Q1VEQV9FWFRFUk5BTF9TRU1BUEhPUkVfSEFORExFX0RFU0MgZXh0X3NlbV9kZXNjID0gewotICAg ICAgICAudHlwZSA9IDkgLyogVE9ETzogQ1VfRVhURVJOQUxfU0VNQVBIT1JFX0hBTkRMRV9UWVBF X1RJTUVMSU5FX1NFTUFQSE9SRV9GRCAqLywKLSAgICB9OwotI2VuZGlmCi0KLSNpZmRlZiBfV0lO MzIKLSAgICByZXQgPSB2ay0+R2V0U2VtYXBob3JlV2luMzJIYW5kbGVLSFIoaHdjdHgtPmFjdF9k ZXYsICZzZW1fZXhwb3J0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAmZXh0X3NlbV9kZXNjLmhhbmRsZS53aW4zMi5oYW5kbGUpOwotI2Vsc2UKLSAgICByZXQgPSB2 ay0+R2V0U2VtYXBob3JlRmRLSFIoaHdjdHgtPmFjdF9kZXYsICZzZW1fZXhwb3J0LAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAmZXh0X3NlbV9kZXNjLmhhbmRsZS5mZCk7Ci0jZW5k aWYKLSAgICBpZiAocmV0ICE9IFZLX1NVQ0NFU1MpIHsKLSAgICAgICAgYXZfbG9nKGN0eCwgQVZf TE9HX0VSUk9SLCAiRmFpbGVkIHRvIGV4cG9ydCBzZW1hcGhvcmU6ICVzXG4iLAotICAgICAgICAg ICAgICAgZmZfdmtfcmV0MnN0cihyZXQpKTsKLSAgICAgICAgcmV0dXJuIEFWRVJST1JfRVhURVJO QUw7Ci0gICAgfQotI2lmZGVmIF9XSU4zMgotICAgIGRzdF9pbnQtPmV4dF9zZW1faGFuZGxlW2lk eF0gPSBleHRfc2VtX2Rlc2MuaGFuZGxlLndpbjMyLmhhbmRsZTsKLSNlbmRpZgotCi0gICAgcmV0 ID0gQ0hFQ0tfQ1UoY3UtPmN1SW1wb3J0RXh0ZXJuYWxTZW1hcGhvcmUoJmRzdF9pbnQtPmN1X3Nl bVtpZHhdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICZleHRfc2VtX2Rlc2MpKTsKLSAgICBpZiAocmV0IDwgMCkgewotI2lmbmRlZiBfV0lOMzIKLSAg ICAgICAgY2xvc2UoZXh0X3NlbV9kZXNjLmhhbmRsZS5mZCk7Ci0jZW5kaWYKLSAgICAgICAgcmV0 dXJuIEFWRVJST1JfRVhURVJOQUw7Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRp YyBpbnQgdnVsa2FuX2V4cG9ydF90b19jdWRhKEFWSFdGcmFtZXNDb250ZXh0ICpod2ZjLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVZCdWZmZXJSZWYgKmN1ZGFfaHdmYywKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFWRnJhbWUgKmZyYW1lKQotewot ICAgIGludCBlcnI7Ci0gICAgVmtSZXN1bHQgcmV0OwotICAgIEFWVmtGcmFtZSAqZHN0X2Y7Ci0g ICAgQVZWa0ZyYW1lSW50ZXJuYWwgKmRzdF9pbnQ7Ci0gICAgQVZIV0RldmljZUNvbnRleHQgKmN0 eCA9IGh3ZmMtPmRldmljZV9jdHg7Ci0gICAgY29uc3QgaW50IHBsYW5lcyA9IGF2X3BpeF9mbXRf Y291bnRfcGxhbmVzKGh3ZmMtPnN3X2Zvcm1hdCk7Ci0gICAgY29uc3QgQVZQaXhGbXREZXNjcmlw dG9yICpkZXNjID0gYXZfcGl4X2ZtdF9kZXNjX2dldChod2ZjLT5zd19mb3JtYXQpOwotICAgIFZ1 bGthbkRldmljZVByaXYgKnAgPSBjdHgtPmh3Y3R4OwotICAgIEFWVnVsa2FuRGV2aWNlQ29udGV4 dCAqaHdjdHggPSAmcC0+cDsKLSAgICBGRlZ1bGthbkZ1bmN0aW9ucyAqdmsgPSAmcC0+dmtjdHgu dmtmbjsKLSAgICBpbnQgbmJfaW1hZ2VzOwotCi0gICAgQVZIV0ZyYW1lc0NvbnRleHQgKmN1ZGFf ZmMgPSAoQVZIV0ZyYW1lc0NvbnRleHQqKWN1ZGFfaHdmYy0+ZGF0YTsKLSAgICBBVkhXRGV2aWNl Q29udGV4dCAqY3VkYV9jdSA9IGN1ZGFfZmMtPmRldmljZV9jdHg7Ci0gICAgQVZDVURBRGV2aWNl Q29udGV4dCAqY3VkYV9kZXYgPSBjdWRhX2N1LT5od2N0eDsKLSAgICBBVkNVREFEZXZpY2VDb250 ZXh0SW50ZXJuYWwgKmN1X2ludGVybmFsID0gY3VkYV9kZXYtPmludGVybmFsOwotICAgIEN1ZGFG dW5jdGlvbnMgKmN1ID0gY3VfaW50ZXJuYWwtPmN1ZGFfZGw7Ci0gICAgQ1VhcnJheV9mb3JtYXQg Y3VmbXQgPSBkZXNjLT5jb21wWzBdLmRlcHRoID4gOCA/IENVX0FEX0ZPUk1BVF9VTlNJR05FRF9J TlQxNiA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIENVX0FEX0ZPUk1BVF9VTlNJR05FRF9JTlQ4OwotCi0gICAgZHN0X2YgPSAoQVZWa0ZyYW1l ICopZnJhbWUtPmRhdGFbMF07Ci0gICAgZHN0X2ludCA9IGRzdF9mLT5pbnRlcm5hbDsKLQotICAg IGlmICghZHN0X2ludC0+Y3VkYV9mY19yZWYpIHsKLSAgICAgICAgc2l6ZV90IG9mZnNldHNbM10g PSB7IDAgfTsKLQotICAgICAgICBkc3RfaW50LT5jdWRhX2ZjX3JlZiA9IGF2X2J1ZmZlcl9yZWYo Y3VkYV9od2ZjKTsKLSAgICAgICAgaWYgKCFkc3RfaW50LT5jdWRhX2ZjX3JlZikKLSAgICAgICAg ICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7Ci0KLSAgICAgICAgbmJfaW1hZ2VzID0gZmZfdmtf Y291bnRfaW1hZ2VzKGRzdF9mKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuYl9pbWFn ZXM7IGkrKykgewotICAgICAgICAgICAgZXJyID0gZXhwb3J0X21lbV90b19jdWRhKGN0eCwgY3Vk YV9jdSwgY3UsIGRzdF9pbnQsIGksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZHN0X2YtPm1lbVtpXSwgZHN0X2YtPnNpemVbaV0pOwotICAgICAgICAgICAgaWYgKGVyciA8 IDApCi0gICAgICAgICAgICAgICAgZ290byBmYWlsOwotCi0gICAgICAgICAgICBlcnIgPSBleHBv cnRfc2VtX3RvX2N1ZGEoY3R4LCBjdWRhX2N1LCBjdSwgZHN0X2ludCwgaSwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBkc3RfZi0+c2VtW2ldKTsKLSAgICAgICAgICAgIGlm IChlcnIgPCAwKQotICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKLSAgICAgICAgfQotCi0gICAg ICAgIGlmIChuYl9pbWFnZXMgIT0gcGxhbmVzKSB7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0g MDsgaSA8IHBsYW5lczsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgVmtJbWFnZVN1YnJlc291cmNl IHN1YnJlcyA9IHsKLSAgICAgICAgICAgICAgICAgICAgLmFzcGVjdE1hc2sgPSBpID09IDIgPyBW S19JTUFHRV9BU1BFQ1RfTUVNT1JZX1BMQU5FXzJfQklUX0VYVCA6Ci0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaSA9PSAxID8gVktfSU1BR0VfQVNQRUNUX01FTU9SWV9QTEFORV8x X0JJVF9FWFQgOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZL X0lNQUdFX0FTUEVDVF9NRU1PUllfUExBTkVfMF9CSVRfRVhUCi0gICAgICAgICAgICAgICAgfTsK LSAgICAgICAgICAgICAgICBWa1N1YnJlc291cmNlTGF5b3V0IGxheW91dCA9IHsgMCB9OwotICAg ICAgICAgICAgICAgIHZrLT5HZXRJbWFnZVN1YnJlc291cmNlTGF5b3V0KGh3Y3R4LT5hY3RfZGV2 LCBkc3RfZi0+aW1nW0ZGTUlOKGksIG5iX2ltYWdlcyAtIDEpXSwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3VicmVzLCAmbGF5b3V0KTsKLSAgICAgICAg ICAgICAgICBvZmZzZXRzW2ldID0gbGF5b3V0Lm9mZnNldDsKLSAgICAgICAgICAgIH0KLSAgICAg ICAgfQotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcGxhbmVzOyBpKyspIHsKLSAgICAg ICAgICAgIENVREFfRVhURVJOQUxfTUVNT1JZX01JUE1BUFBFRF9BUlJBWV9ERVNDIHRleF9kZXNj ID0gewotICAgICAgICAgICAgICAgIC5vZmZzZXQgPSBvZmZzZXRzW2ldLAotICAgICAgICAgICAg ICAgIC5hcnJheURlc2MgPSB7Ci0gICAgICAgICAgICAgICAgICAgIC5EZXB0aCA9IDAsCi0gICAg ICAgICAgICAgICAgICAgIC5Gb3JtYXQgPSBjdWZtdCwKLSAgICAgICAgICAgICAgICAgICAgLk51 bUNoYW5uZWxzID0gMSArICgocGxhbmVzID09IDIpICYmIGkpLAotICAgICAgICAgICAgICAgICAg ICAuRmxhZ3MgPSAwLAotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgLm51bUxl dmVscyA9IDEsCi0gICAgICAgICAgICB9OwotICAgICAgICAgICAgaW50IHBfdywgcF9oOwotCi0g ICAgICAgICAgICBnZXRfcGxhbmVfd2goJnBfdywgJnBfaCwgaHdmYy0+c3dfZm9ybWF0LCBod2Zj LT53aWR0aCwgaHdmYy0+aGVpZ2h0LCBpKTsKLSAgICAgICAgICAgIHRleF9kZXNjLmFycmF5RGVz Yy5XaWR0aCA9IHBfdzsKLSAgICAgICAgICAgIHRleF9kZXNjLmFycmF5RGVzYy5IZWlnaHQgPSBw X2g7Ci0KLSAgICAgICAgICAgIHJldCA9IENIRUNLX0NVKGN1LT5jdUV4dGVybmFsTWVtb3J5R2V0 TWFwcGVkTWlwbWFwcGVkQXJyYXkoJmRzdF9pbnQtPmN1X21tYVtpXSwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ZHN0X2ludC0+ZXh0X21lbVtGRk1JTihpLCBuYl9pbWFnZXMgLSAxKV0sCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICZ0ZXhfZGVzYykpOwotICAgICAgICAgICAgaWYgKHJldCA8IDApIHsKLSAgICAgICAgICAgICAg ICBlcnIgPSBBVkVSUk9SX0VYVEVSTkFMOwotICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKLSAg ICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0ID0gQ0hFQ0tfQ1UoY3UtPmN1TWlwbWFwcGVk QXJyYXlHZXRMZXZlbCgmZHN0X2ludC0+Y3VfYXJyYXlbaV0sCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzdF9pbnQtPmN1X21tYVtpXSwg MCkpOwotICAgICAgICAgICAgaWYgKHJldCA8IDApIHsKLSAgICAgICAgICAgICAgICBlcnIgPSBB VkVSUk9SX0VYVEVSTkFMOwotICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKLSAgICAgICAgICAg IH0KLQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7Ci0KLWZhaWw6Ci0gICAgdnVs a2FuX2ZyZWVfaW50ZXJuYWwoZHN0X2YpOwotICAgIHJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBp bnQgdnVsa2FuX3RyYW5zZmVyX2RhdGFfZnJvbV9jdWRhKEFWSFdGcmFtZXNDb250ZXh0ICpod2Zj LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVZGcmFtZSAqZHN0 LCBjb25zdCBBVkZyYW1lICpzcmMpCi17Ci0gICAgaW50IGVycjsKLSAgICBDVWNvbnRleHQgZHVt bXk7Ci0gICAgQVZWa0ZyYW1lICpkc3RfZjsKLSAgICBBVlZrRnJhbWVJbnRlcm5hbCAqZHN0X2lu dDsKLSAgICBWdWxrYW5GcmFtZXNQcml2ICpmcCA9IGh3ZmMtPmh3Y3R4OwotICAgIGNvbnN0IGlu dCBwbGFuZXMgPSBhdl9waXhfZm10X2NvdW50X3BsYW5lcyhod2ZjLT5zd19mb3JtYXQpOwotICAg IGNvbnN0IEFWUGl4Rm10RGVzY3JpcHRvciAqZGVzYyA9IGF2X3BpeF9mbXRfZGVzY19nZXQoaHdm Yy0+c3dfZm9ybWF0KTsKLQotICAgIEFWSFdGcmFtZXNDb250ZXh0ICpjdWRhX2ZjID0gKEFWSFdG cmFtZXNDb250ZXh0KilzcmMtPmh3X2ZyYW1lc19jdHgtPmRhdGE7Ci0gICAgQVZIV0RldmljZUNv bnRleHQgKmN1ZGFfY3UgPSBjdWRhX2ZjLT5kZXZpY2VfY3R4OwotICAgIEFWQ1VEQURldmljZUNv bnRleHQgKmN1ZGFfZGV2ID0gY3VkYV9jdS0+aHdjdHg7Ci0gICAgQVZDVURBRGV2aWNlQ29udGV4 dEludGVybmFsICpjdV9pbnRlcm5hbCA9IGN1ZGFfZGV2LT5pbnRlcm5hbDsKLSAgICBDdWRhRnVu Y3Rpb25zICpjdSA9IGN1X2ludGVybmFsLT5jdWRhX2RsOwotICAgIENVREFfRVhURVJOQUxfU0VN QVBIT1JFX1dBSVRfUEFSQU1TIHNfd19wYXJbQVZfTlVNX0RBVEFfUE9JTlRFUlNdID0geyAwIH07 Ci0gICAgQ1VEQV9FWFRFUk5BTF9TRU1BUEhPUkVfU0lHTkFMX1BBUkFNUyBzX3NfcGFyW0FWX05V TV9EQVRBX1BPSU5URVJTXSA9IHsgMCB9OwotCi0gICAgZHN0X2YgPSAoQVZWa0ZyYW1lICopZHN0 LT5kYXRhWzBdOwotCi0gICAgZXJyID0gcHJlcGFyZV9mcmFtZShod2ZjLCAmZnAtPnVwbG9hZF9l eGVjLCBkc3RfZiwgUFJFUF9NT0RFX0VYVEVSTkFMX0VYUE9SVCk7Ci0gICAgaWYgKGVyciA8IDAp Ci0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICBlcnIgPSBDSEVDS19DVShjdS0+Y3VDdHhQdXNo Q3VycmVudChjdWRhX2Rldi0+Y3VkYV9jdHgpKTsKLSAgICBpZiAoZXJyIDwgMCkKLSAgICAgICAg cmV0dXJuIGVycjsKLQotICAgIGVyciA9IHZ1bGthbl9leHBvcnRfdG9fY3VkYShod2ZjLCBzcmMt Pmh3X2ZyYW1lc19jdHgsIGRzdCk7Ci0gICAgaWYgKGVyciA8IDApIHsKLSAgICAgICAgQ0hFQ0tf Q1UoY3UtPmN1Q3R4UG9wQ3VycmVudCgmZHVtbXkpKTsKLSAgICAgICAgcmV0dXJuIGVycjsKLSAg ICB9Ci0KLSAgICBkc3RfaW50ID0gZHN0X2YtPmludGVybmFsOwotCi0gICAgZm9yIChpbnQgaSA9 IDA7IGkgPCBwbGFuZXM7IGkrKykgewotICAgICAgICBzX3dfcGFyW2ldLnBhcmFtcy5mZW5jZS52 YWx1ZSA9IGRzdF9mLT5zZW1fdmFsdWVbaV0gKyAwOwotICAgICAgICBzX3NfcGFyW2ldLnBhcmFt cy5mZW5jZS52YWx1ZSA9IGRzdF9mLT5zZW1fdmFsdWVbaV0gKyAxOwotICAgIH0KLQotICAgIGVy ciA9IENIRUNLX0NVKGN1LT5jdVdhaXRFeHRlcm5hbFNlbWFwaG9yZXNBc3luYyhkc3RfaW50LT5j dV9zZW0sIHNfd19wYXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHBsYW5lcywgY3VkYV9kZXYtPnN0cmVhbSkpOwotICAgIGlmIChlcnIgPCAw KQotICAgICAgICBnb3RvIGZhaWw7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHBsYW5lczsg aSsrKSB7Ci0gICAgICAgIENVREFfTUVNQ1BZMkQgY3B5ID0gewotICAgICAgICAgICAgLnNyY01l bW9yeVR5cGUgPSBDVV9NRU1PUllUWVBFX0RFVklDRSwKLSAgICAgICAgICAgIC5zcmNEZXZpY2Ug ICAgID0gKENVZGV2aWNlcHRyKXNyYy0+ZGF0YVtpXSwKLSAgICAgICAgICAgIC5zcmNQaXRjaCAg ICAgID0gc3JjLT5saW5lc2l6ZVtpXSwKLSAgICAgICAgICAgIC5zcmNZICAgICAgICAgID0gMCwK LQotICAgICAgICAgICAgLmRzdE1lbW9yeVR5cGUgPSBDVV9NRU1PUllUWVBFX0FSUkFZLAotICAg ICAgICAgICAgLmRzdEFycmF5ICAgICAgPSBkc3RfaW50LT5jdV9hcnJheVtpXSwKLSAgICAgICAg fTsKLQotICAgICAgICBpbnQgcF93LCBwX2g7Ci0gICAgICAgIGdldF9wbGFuZV93aCgmcF93LCAm cF9oLCBod2ZjLT5zd19mb3JtYXQsIGh3ZmMtPndpZHRoLCBod2ZjLT5oZWlnaHQsIGkpOwotCi0g ICAgICAgIGNweS5XaWR0aEluQnl0ZXMgPSBwX3cgKiBkZXNjLT5jb21wW2ldLnN0ZXA7Ci0gICAg ICAgIGNweS5IZWlnaHQgPSBwX2g7Ci0KLSAgICAgICAgZXJyID0gQ0hFQ0tfQ1UoY3UtPmN1TWVt Y3B5MkRBc3luYygmY3B5LCBjdWRhX2Rldi0+c3RyZWFtKSk7Ci0gICAgICAgIGlmIChlcnIgPCAw KQotICAgICAgICAgICAgZ290byBmYWlsOwotICAgIH0KLQotICAgIGVyciA9IENIRUNLX0NVKGN1 LT5jdVNpZ25hbEV4dGVybmFsU2VtYXBob3Jlc0FzeW5jKGRzdF9pbnQtPmN1X3NlbSwgc19zX3Bh ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBwbGFuZXMsIGN1ZGFfZGV2LT5zdHJlYW0pKTsKLSAgICBpZiAoZXJyIDwgMCkKLSAgICAgICAg Z290byBmYWlsOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwbGFuZXM7IGkrKykKLSAgICAg ICAgZHN0X2YtPnNlbV92YWx1ZVtpXSsrOwotCi0gICAgQ0hFQ0tfQ1UoY3UtPmN1Q3R4UG9wQ3Vy cmVudCgmZHVtbXkpKTsKLQotICAgIGF2X2xvZyhod2ZjLCBBVl9MT0dfVkVSQk9TRSwgIlRyYW5z ZmVycmVkIENVREEgaW1hZ2UgdG8gVnVsa2FuIVxuIik7Ci0KLSAgICByZXR1cm4gZXJyID0gcHJl cGFyZV9mcmFtZShod2ZjLCAmZnAtPnVwbG9hZF9leGVjLCBkc3RfZiwgUFJFUF9NT0RFX0VYVEVS TkFMX0lNUE9SVCk7Ci0KLWZhaWw6Ci0gICAgQ0hFQ0tfQ1UoY3UtPmN1Q3R4UG9wQ3VycmVudCgm ZHVtbXkpKTsKLSAgICB2dWxrYW5fZnJlZV9pbnRlcm5hbChkc3RfZik7Ci0gICAgYXZfYnVmZmVy X3VucmVmKCZkc3QtPmJ1ZlswXSk7Ci0gICAgcmV0dXJuIGVycjsKLX0KLSNlbmRpZgotCi1zdGF0 aWMgaW50IHZ1bGthbl9tYXBfdG8oQVZIV0ZyYW1lc0NvbnRleHQgKmh3ZmMsIEFWRnJhbWUgKmRz dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBVkZyYW1lICpzcmMsIGludCBmbGFn cykKLXsKLSAgICBhdl91bnVzZWQgVnVsa2FuRGV2aWNlUHJpdiAqcCA9IGh3ZmMtPmRldmljZV9j dHgtPmh3Y3R4OwotCi0gICAgc3dpdGNoIChzcmMtPmZvcm1hdCkgewotI2lmIENPTkZJR19MSUJE Uk0KLSNpZiBDT05GSUdfVkFBUEkKLSAgICBjYXNlIEFWX1BJWF9GTVRfVkFBUEk6Ci0gICAgICAg IGlmIChwLT52a2N0eC5leHRlbnNpb25zICYgRkZfVktfRVhUX0RSTV9NT0RJRklFUl9GTEFHUykK LSAgICAgICAgICAgIHJldHVybiB2dWxrYW5fbWFwX2Zyb21fdmFhcGkoaHdmYywgZHN0LCBzcmMs IGZsYWdzKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PU1lT KTsKLSNlbmRpZgotICAgIGNhc2UgQVZfUElYX0ZNVF9EUk1fUFJJTUU6Ci0gICAgICAgIGlmIChw LT52a2N0eC5leHRlbnNpb25zICYgRkZfVktfRVhUX0RSTV9NT0RJRklFUl9GTEFHUykKLSAgICAg ICAgICAgIHJldHVybiB2dWxrYW5fbWFwX2Zyb21fZHJtKGh3ZmMsIGRzdCwgc3JjLCBmbGFncyk7 Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT1NZUyk7Ci0jZW5k aWYKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9TWVMpOwotICAgIH0K LX0KLQotI2lmIENPTkZJR19MSUJEUk0KLXR5cGVkZWYgc3RydWN0IFZ1bGthbkRSTU1hcHBpbmcg ewotICAgIEFWRFJNRnJhbWVEZXNjcmlwdG9yIGRybV9kZXNjOwotICAgIEFWVmtGcmFtZSAqc291 cmNlOwotfSBWdWxrYW5EUk1NYXBwaW5nOwotCi1zdGF0aWMgdm9pZCB2dWxrYW5fdW5tYXBfdG9f ZHJtKEFWSFdGcmFtZXNDb250ZXh0ICpod2ZjLCBIV01hcERlc2NyaXB0b3IgKmh3bWFwKQotewot ICAgIEFWRFJNRnJhbWVEZXNjcmlwdG9yICpkcm1fZGVzYyA9IGh3bWFwLT5wcml2OwotCi0gICAg Zm9yIChpbnQgaSA9IDA7IGkgPCBkcm1fZGVzYy0+bmJfb2JqZWN0czsgaSsrKQotICAgICAgICBj bG9zZShkcm1fZGVzYy0+b2JqZWN0c1tpXS5mZCk7Ci0KLSAgICBhdl9mcmVlKGRybV9kZXNjKTsK LX0KLQotc3RhdGljIGlubGluZSB1aW50MzJfdCB2dWxrYW5fZm10X3RvX2RybShWa0Zvcm1hdCB2 a2ZtdCkKLXsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IEZGX0FSUkFZX0VMRU1TKHZ1bGthbl9k cm1fZm9ybWF0X21hcCk7IGkrKykKLSAgICAgICAgaWYgKHZ1bGthbl9kcm1fZm9ybWF0X21hcFtp XS52a19mb3JtYXQgPT0gdmtmbXQpCi0gICAgICAgICAgICByZXR1cm4gdnVsa2FuX2RybV9mb3Jt YXRfbWFwW2ldLmRybV9mb3VyY2M7Ci0gICAgcmV0dXJuIERSTV9GT1JNQVRfSU5WQUxJRDsKLX0K LQotI2RlZmluZSBNQVhfTUVNT1JZX1BMQU5FUyA0Ci1zdGF0aWMgVmtJbWFnZUFzcGVjdEZsYWdz IHBsYW5lX2luZGV4X3RvX2FzcGVjdChpbnQgcGxhbmUpIHsKLSAgICBpZiAocGxhbmUgPT0gMCkg cmV0dXJuIFZLX0lNQUdFX0FTUEVDVF9NRU1PUllfUExBTkVfMF9CSVRfRVhUOwotICAgIGlmIChw bGFuZSA9PSAxKSByZXR1cm4gVktfSU1BR0VfQVNQRUNUX01FTU9SWV9QTEFORV8xX0JJVF9FWFQ7 Ci0gICAgaWYgKHBsYW5lID09IDIpIHJldHVybiBWS19JTUFHRV9BU1BFQ1RfTUVNT1JZX1BMQU5F XzJfQklUX0VYVDsKLSAgICBpZiAocGxhbmUgPT0gMykgcmV0dXJuIFZLX0lNQUdFX0FTUEVDVF9N RU1PUllfUExBTkVfM19CSVRfRVhUOwotCi0gICAgYXZfYXNzZXJ0MiAoMCAmJiAiSW52YWxpZCBw bGFuZSBpbmRleCIpOwotICAgIHJldHVybiBWS19JTUFHRV9BU1BFQ1RfTUVNT1JZX1BMQU5FXzBf QklUX0VYVDsKLX0KLQotc3RhdGljIGludCB2dWxrYW5fbWFwX3RvX2RybShBVkhXRnJhbWVzQ29u dGV4dCAqaHdmYywgQVZGcmFtZSAqZHN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj b25zdCBBVkZyYW1lICpzcmMsIGludCBmbGFncykKLXsKLSAgICBpbnQgZXJyID0gMDsKLSAgICBW a1Jlc3VsdCByZXQ7Ci0gICAgQVZWa0ZyYW1lICpmID0gKEFWVmtGcmFtZSAqKXNyYy0+ZGF0YVsw XTsKLSAgICBWdWxrYW5EZXZpY2VQcml2ICpwID0gaHdmYy0+ZGV2aWNlX2N0eC0+aHdjdHg7Ci0g ICAgQVZWdWxrYW5EZXZpY2VDb250ZXh0ICpod2N0eCA9ICZwLT5wOwotICAgIEZGVnVsa2FuRnVu Y3Rpb25zICp2ayA9ICZwLT52a2N0eC52a2ZuOwotICAgIFZ1bGthbkZyYW1lc1ByaXYgKmZwID0g aHdmYy0+aHdjdHg7Ci0gICAgY29uc3QgaW50IHBsYW5lcyA9IGF2X3BpeF9mbXRfY291bnRfcGxh bmVzKGh3ZmMtPnN3X2Zvcm1hdCk7Ci0gICAgVmtJbWFnZURybUZvcm1hdE1vZGlmaWVyUHJvcGVy dGllc0VYVCBkcm1fbW9kID0gewotICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9J TUFHRV9EUk1fRk9STUFUX01PRElGSUVSX1BST1BFUlRJRVNfRVhULAotICAgIH07Ci0gICAgVmtT ZW1hcGhvcmVXYWl0SW5mbyB3YWl0X2luZm8gPSB7Ci0gICAgICAgIC5zVHlwZSAgICAgICAgICA9 IFZLX1NUUlVDVFVSRV9UWVBFX1NFTUFQSE9SRV9XQUlUX0lORk8sCi0gICAgICAgIC5mbGFncyAg ICAgICAgICA9IDB4MCwKLSAgICAgICAgLnNlbWFwaG9yZUNvdW50ID0gcGxhbmVzLAotICAgIH07 Ci0KLSAgICBBVkRSTUZyYW1lRGVzY3JpcHRvciAqZHJtX2Rlc2MgPSBhdl9tYWxsb2N6KHNpemVv ZigqZHJtX2Rlc2MpKTsKLSAgICBpZiAoIWRybV9kZXNjKQotICAgICAgICByZXR1cm4gQVZFUlJP UihFTk9NRU0pOwotCi0gICAgZXJyID0gcHJlcGFyZV9mcmFtZShod2ZjLCAmZnAtPmNvbXB1dGVf ZXhlYywgZiwgUFJFUF9NT0RFX0VYVEVSTkFMX0VYUE9SVCk7Ci0gICAgaWYgKGVyciA8IDApCi0g ICAgICAgIGdvdG8gZW5kOwotCi0gICAgLyogV2FpdCBmb3IgdGhlIG9wZXJhdGlvbiB0byBmaW5p c2ggc28gd2UgY2FuIGNsZWFubHkgZXhwb3J0IGl0LiAqLwotICAgIHdhaXRfaW5mby5wU2VtYXBo b3JlcyA9IGYtPnNlbTsKLSAgICB3YWl0X2luZm8ucFZhbHVlcyAgICAgPSBmLT5zZW1fdmFsdWU7 Ci0KLSAgICB2ay0+V2FpdFNlbWFwaG9yZXMoaHdjdHgtPmFjdF9kZXYsICZ3YWl0X2luZm8sIFVJ TlQ2NF9NQVgpOwotCi0gICAgZXJyID0gZmZfaHdmcmFtZV9tYXBfY3JlYXRlKHNyYy0+aHdfZnJh bWVzX2N0eCwgZHN0LCBzcmMsICZ2dWxrYW5fdW5tYXBfdG9fZHJtLCBkcm1fZGVzYyk7Ci0gICAg aWYgKGVyciA8IDApCi0gICAgICAgIGdvdG8gZW5kOwotCi0gICAgcmV0ID0gdmstPkdldEltYWdl RHJtRm9ybWF0TW9kaWZpZXJQcm9wZXJ0aWVzRVhUKGh3Y3R4LT5hY3RfZGV2LCBmLT5pbWdbMF0s Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZk cm1fbW9kKTsKLSAgICBpZiAocmV0ICE9IFZLX1NVQ0NFU1MpIHsKLSAgICAgICAgYXZfbG9nKGh3 ZmMsIEFWX0xPR19FUlJPUiwgIkZhaWxlZCB0byByZXRyaWV2ZSBEUk0gZm9ybWF0IG1vZGlmaWVy IVxuIik7Ci0gICAgICAgIGVyciA9IEFWRVJST1JfRVhURVJOQUw7Ci0gICAgICAgIGdvdG8gZW5k OwotICAgIH0KLQotICAgIGZvciAoaW50IGkgPSAwOyAoaSA8IHBsYW5lcykgJiYgKGYtPm1lbVtp XSk7IGkrKykgewotICAgICAgICBWa01lbW9yeUdldEZkSW5mb0tIUiBleHBvcnRfaW5mbyA9IHsK LSAgICAgICAgICAgIC5zVHlwZSAgICAgID0gVktfU1RSVUNUVVJFX1RZUEVfTUVNT1JZX0dFVF9G RF9JTkZPX0tIUiwKLSAgICAgICAgICAgIC5tZW1vcnkgICAgID0gZi0+bWVtW2ldLAotICAgICAg ICAgICAgLmhhbmRsZVR5cGUgPSBWS19FWFRFUk5BTF9NRU1PUllfSEFORExFX1RZUEVfRE1BX0JV Rl9CSVRfRVhULAotICAgICAgICB9OwotCi0gICAgICAgIHJldCA9IHZrLT5HZXRNZW1vcnlGZEtI Uihod2N0eC0+YWN0X2RldiwgJmV4cG9ydF9pbmZvLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJmRybV9kZXNjLT5vYmplY3RzW2ldLmZkKTsKLSAgICAgICAgaWYgKHJldCAhPSBW S19TVUNDRVNTKSB7Ci0gICAgICAgICAgICBhdl9sb2coaHdmYywgQVZfTE9HX0VSUk9SLCAiVW5h YmxlIHRvIGV4cG9ydCB0aGUgaW1hZ2UgYXMgYSBGRCFcbiIpOwotICAgICAgICAgICAgZXJyID0g QVZFUlJPUl9FWFRFUk5BTDsKLSAgICAgICAgICAgIGdvdG8gZW5kOwotICAgICAgICB9Ci0KLSAg ICAgICAgZHJtX2Rlc2MtPm5iX29iamVjdHMrKzsKLSAgICAgICAgZHJtX2Rlc2MtPm9iamVjdHNb aV0uc2l6ZSA9IGYtPnNpemVbaV07Ci0gICAgICAgIGRybV9kZXNjLT5vYmplY3RzW2ldLmZvcm1h dF9tb2RpZmllciA9IGRybV9tb2QuZHJtRm9ybWF0TW9kaWZpZXI7Ci0gICAgfQotCi0gICAgZHJt X2Rlc2MtPm5iX2xheWVycyA9IHBsYW5lczsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGRybV9k ZXNjLT5uYl9sYXllcnM7IGkrKykgewotICAgICAgICBWa0Zvcm1hdCBwbGFuZV92a2ZtdCA9IGF2 X3ZrZm10X2Zyb21fcGl4Zm10KGh3ZmMtPnN3X2Zvcm1hdClbaV07Ci0KLSAgICAgICAgZHJtX2Rl c2MtPmxheWVyc1tpXS5mb3JtYXQgPSB2dWxrYW5fZm10X3RvX2RybShwbGFuZV92a2ZtdCk7Ci0g ICAgICAgIGRybV9kZXNjLT5sYXllcnNbaV0ubmJfcGxhbmVzID0gZnAtPmRybV9mb3JtYXRfbW9k aWZpZXJfcHJvcGVydGllc1tpXS5kcm1Gb3JtYXRNb2RpZmllclBsYW5lQ291bnQ7Ci0KLSAgICAg ICAgaWYgKGRybV9kZXNjLT5sYXllcnNbaV0ubmJfcGxhbmVzID4gTUFYX01FTU9SWV9QTEFORVMp IHsKLSAgICAgICAgICAgIGF2X2xvZyhod2ZjLCBBVl9MT0dfRVJST1IsICJUb28gbWFueSBtZW1v cnkgcGxhbmVzIGZvciBEUk0gZm9ybWF0IVxuIik7Ci0gICAgICAgICAgICBlcnIgPSBBVkVSUk9S X0VYVEVSTkFMOwotICAgICAgICAgICAgZ290byBlbmQ7Ci0gICAgICAgIH0KLQotICAgICAgICBm b3IgKGludCBqID0gMDsgaiA8IGRybV9kZXNjLT5sYXllcnNbaV0ubmJfcGxhbmVzOyBqKyspIHsK LSAgICAgICAgICAgIFZrU3VicmVzb3VyY2VMYXlvdXQgbGF5b3V0OwotICAgICAgICAgICAgVmtJ bWFnZVN1YnJlc291cmNlIHN1YiA9IHsKLSAgICAgICAgICAgICAgICAuYXNwZWN0TWFzayA9IHBs YW5lX2luZGV4X3RvX2FzcGVjdChqKSwKLSAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgIGRy bV9kZXNjLT5sYXllcnNbaV0ucGxhbmVzW2pdLm9iamVjdF9pbmRleCA9IEZGTUlOKGksIGRybV9k ZXNjLT5uYl9vYmplY3RzIC0gMSk7Ci0KLSAgICAgICAgICAgIHZrLT5HZXRJbWFnZVN1YnJlc291 cmNlTGF5b3V0KGh3Y3R4LT5hY3RfZGV2LCBmLT5pbWdbaV0sICZzdWIsICZsYXlvdXQpOwotICAg ICAgICAgICAgZHJtX2Rlc2MtPmxheWVyc1tpXS5wbGFuZXNbal0ub2Zmc2V0ID0gbGF5b3V0Lm9m ZnNldDsKLSAgICAgICAgICAgIGRybV9kZXNjLT5sYXllcnNbaV0ucGxhbmVzW2pdLnBpdGNoICA9 IGxheW91dC5yb3dQaXRjaDsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChkcm1fZGVzYy0+bGF5 ZXJzW2ldLmZvcm1hdCA9PSBEUk1fRk9STUFUX0lOVkFMSUQpIHsKLSAgICAgICAgICAgIGF2X2xv Zyhod2ZjLCBBVl9MT0dfRVJST1IsICJDYW5ub3QgbWFwIHRvIERSTSBsYXllciwgdW5zdXBwb3J0 ZWQhXG4iKTsKLSAgICAgICAgICAgIGVyciA9IEFWRVJST1JfUEFUQ0hXRUxDT01FOwotICAgICAg ICAgICAgZ290byBlbmQ7Ci0gICAgICAgIH0KLQotCi0gICAgICAgIGlmIChmLT50aWxpbmcgPT0g VktfSU1BR0VfVElMSU5HX09QVElNQUwpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgIH0K LQotICAgIGRzdC0+d2lkdGggICA9IHNyYy0+d2lkdGg7Ci0gICAgZHN0LT5oZWlnaHQgID0gc3Jj LT5oZWlnaHQ7Ci0gICAgZHN0LT5kYXRhWzBdID0gKHVpbnQ4X3QgKilkcm1fZGVzYzsKLQotICAg IGF2X2xvZyhod2ZjLCBBVl9MT0dfVkVSQk9TRSwgIk1hcHBlZCBBVlZrRnJhbWUgdG8gYSBEUk0g b2JqZWN0IVxuIik7Ci0KLSAgICByZXR1cm4gMDsKLQotZW5kOgotICAgIGF2X2ZyZWUoZHJtX2Rl c2MpOwotICAgIHJldHVybiBlcnI7Ci19Ci0KLSNpZiBDT05GSUdfVkFBUEkKLXN0YXRpYyBpbnQg dnVsa2FuX21hcF90b192YWFwaShBVkhXRnJhbWVzQ29udGV4dCAqaHdmYywgQVZGcmFtZSAqZHN0 LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFWRnJhbWUgKnNyYywgaW50 IGZsYWdzKQotewotICAgIGludCBlcnI7Ci0gICAgQVZGcmFtZSAqdG1wID0gYXZfZnJhbWVfYWxs b2MoKTsKLSAgICBpZiAoIXRtcCkKLSAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKLQot ICAgIHRtcC0+Zm9ybWF0ID0gQVZfUElYX0ZNVF9EUk1fUFJJTUU7Ci0KLSAgICBlcnIgPSB2dWxr YW5fbWFwX3RvX2RybShod2ZjLCB0bXAsIHNyYywgZmxhZ3MpOwotICAgIGlmIChlcnIgPCAwKQot ICAgICAgICBnb3RvIGZhaWw7Ci0KLSAgICBlcnIgPSBhdl9od2ZyYW1lX21hcChkc3QsIHRtcCwg ZmxhZ3MpOwotICAgIGlmIChlcnIgPCAwKQotICAgICAgICBnb3RvIGZhaWw7Ci0KLSAgICBlcnIg PSBmZl9od2ZyYW1lX21hcF9yZXBsYWNlKGRzdCwgc3JjKTsKLQotZmFpbDoKLSAgICBhdl9mcmFt ZV9mcmVlKCZ0bXApOwotICAgIHJldHVybiBlcnI7Ci19Ci0jZW5kaWYKLSNlbmRpZgotCi1zdGF0 aWMgaW50IHZ1bGthbl9tYXBfZnJvbShBVkhXRnJhbWVzQ29udGV4dCAqaHdmYywgQVZGcmFtZSAq ZHN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQVZGcmFtZSAqc3JjLCBpbnQg ZmxhZ3MpCi17Ci0gICAgYXZfdW51c2VkIFZ1bGthbkRldmljZVByaXYgKnAgPSBod2ZjLT5kZXZp Y2VfY3R4LT5od2N0eDsKLQotICAgIHN3aXRjaCAoZHN0LT5mb3JtYXQpIHsKLSNpZiBDT05GSUdf TElCRFJNCi0gICAgY2FzZSBBVl9QSVhfRk1UX0RSTV9QUklNRToKLSAgICAgICAgaWYgKHAtPnZr Y3R4LmV4dGVuc2lvbnMgJiBGRl9WS19FWFRfRFJNX01PRElGSUVSX0ZMQUdTKQotICAgICAgICAg ICAgcmV0dXJuIHZ1bGthbl9tYXBfdG9fZHJtKGh3ZmMsIGRzdCwgc3JjLCBmbGFncyk7Ci0gICAg ICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT1NZUyk7Ci0jaWYgQ09ORklH X1ZBQVBJCi0gICAgY2FzZSBBVl9QSVhfRk1UX1ZBQVBJOgotICAgICAgICBpZiAocC0+dmtjdHgu ZXh0ZW5zaW9ucyAmIEZGX1ZLX0VYVF9EUk1fTU9ESUZJRVJfRkxBR1MpCi0gICAgICAgICAgICBy ZXR1cm4gdnVsa2FuX21hcF90b192YWFwaShod2ZjLCBkc3QsIHNyYywgZmxhZ3MpOwotICAgICAg ICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9TWVMpOwotI2VuZGlmCi0jZW5k aWYKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgcmV0dXJuIEFWRVJS T1IoRU5PU1lTKTsKLX0KLQotc3RhdGljIGludCBjb3B5X2J1ZmZlcl9kYXRhKEFWSFdGcmFtZXND b250ZXh0ICpod2ZjLCBBVkJ1ZmZlclJlZiAqYnVmLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEFWRnJhbWUgKnN3ZiwgVmtCdWZmZXJJbWFnZUNvcHkgKnJlZ2lvbiwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpbnQgcGxhbmVzLCBpbnQgdXBsb2FkKQotewotICAgIFZrUmVzdWx0 IHJldDsKLSAgICBWdWxrYW5EZXZpY2VQcml2ICpwID0gaHdmYy0+ZGV2aWNlX2N0eC0+aHdjdHg7 Ci0gICAgRkZWdWxrYW5GdW5jdGlvbnMgKnZrID0gJnAtPnZrY3R4LnZrZm47Ci0gICAgQVZWdWxr YW5EZXZpY2VDb250ZXh0ICpod2N0eCA9ICZwLT5wOwotCi0gICAgRkZWa0J1ZmZlciAqdmtidWYg PSAoRkZWa0J1ZmZlciAqKWJ1Zi0+ZGF0YTsKLQotICAgIGNvbnN0IFZrTWFwcGVkTWVtb3J5UmFu Z2UgZmx1c2hfaW5mbyA9IHsKLSAgICAgICAgLnNUeXBlICA9IFZLX1NUUlVDVFVSRV9UWVBFX01B UFBFRF9NRU1PUllfUkFOR0UsCi0gICAgICAgIC5tZW1vcnkgPSB2a2J1Zi0+bWVtLAotICAgICAg ICAuc2l6ZSAgID0gVktfV0hPTEVfU0laRSwKLSAgICB9OwotCi0gICAgaWYgKCF1cGxvYWQgJiYg ISh2a2J1Zi0+ZmxhZ3MgJiBWS19NRU1PUllfUFJPUEVSVFlfSE9TVF9DT0hFUkVOVF9CSVQpKSB7 Ci0gICAgICAgIHJldCA9IHZrLT5JbnZhbGlkYXRlTWFwcGVkTWVtb3J5UmFuZ2VzKGh3Y3R4LT5h Y3RfZGV2LCAxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAmZmx1c2hfaW5mbyk7Ci0gICAgICAgIGlmIChyZXQgIT0gVktfU1VDQ0VTUykgewotICAgICAg ICAgICAgYXZfbG9nKGh3ZmMsIEFWX0xPR19FUlJPUiwgIkZhaWxlZCB0byBpbnZhbGlkYXRlIGJ1 ZmZlciBkYXRhOiAlc1xuIiwKLSAgICAgICAgICAgICAgICAgICBmZl92a19yZXQyc3RyKHJldCkp OwotICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfRVhURVJOQUw7Ci0gICAgICAgIH0KLSAgICB9 Ci0KLSAgICBpZiAodXBsb2FkKSB7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcGxhbmVz OyBpKyspCi0gICAgICAgICAgICBhdl9pbWFnZV9jb3B5X3BsYW5lKHZrYnVmLT5tYXBwZWRfbWVt ICsgcmVnaW9uW2ldLmJ1ZmZlck9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcmVnaW9uW2ldLmJ1ZmZlclJvd0xlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc3dmLT5kYXRhW2ldLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2Yt PmxpbmVzaXplW2ldLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2YtPmxpbmVz aXplW2ldLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpb25baV0uaW1hZ2VF eHRlbnQuaGVpZ2h0KTsKLSAgICB9IGVsc2UgewotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8 IHBsYW5lczsgaSsrKQotICAgICAgICAgICAgYXZfaW1hZ2VfY29weV9wbGFuZShzd2YtPmRhdGFb aV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3Zi0+bGluZXNpemVbaV0sCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZrYnVmLT5tYXBwZWRfbWVtICsgcmVnaW9u W2ldLmJ1ZmZlck9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaW9u W2ldLmJ1ZmZlclJvd0xlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dm LT5saW5lc2l6ZVtpXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaW9uW2ld LmltYWdlRXh0ZW50LmhlaWdodCk7Ci0gICAgfQotCi0gICAgaWYgKHVwbG9hZCAmJiAhKHZrYnVm LT5mbGFncyAmIFZLX01FTU9SWV9QUk9QRVJUWV9IT1NUX0NPSEVSRU5UX0JJVCkpIHsKLSAgICAg ICAgcmV0ID0gdmstPkZsdXNoTWFwcGVkTWVtb3J5UmFuZ2VzKGh3Y3R4LT5hY3RfZGV2LCAxLAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZsdXNoX2luZm8pOwot ICAgICAgICBpZiAocmV0ICE9IFZLX1NVQ0NFU1MpIHsKLSAgICAgICAgICAgIGF2X2xvZyhod2Zj LCBBVl9MT0dfRVJST1IsICJGYWlsZWQgdG8gZmx1c2ggYnVmZmVyIGRhdGE6ICVzXG4iLAotICAg ICAgICAgICAgICAgICAgIGZmX3ZrX3JldDJzdHIocmV0KSk7Ci0gICAgICAgICAgICByZXR1cm4g QVZFUlJPUl9FWFRFUk5BTDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiAwOwotfQot Ci1zdGF0aWMgaW50IGdldF9wbGFuZV9idWYoQVZIV0ZyYW1lc0NvbnRleHQgKmh3ZmMsIEFWQnVm ZmVyUmVmICoqZHN0LAotICAgICAgICAgICAgICAgICAgICAgICAgIEFWRnJhbWUgKnN3ZiwgVmtC dWZmZXJJbWFnZUNvcHkgKnJlZ2lvbiwgaW50IHVwbG9hZCkKLXsKLSAgICBpbnQgZXJyOwotICAg IHVpbnQzMl90IHBfdywgcF9oOwotICAgIFZ1bGthbkZyYW1lc1ByaXYgKmZwID0gaHdmYy0+aHdj dHg7Ci0gICAgVnVsa2FuRGV2aWNlUHJpdiAqcCA9IGh3ZmMtPmRldmljZV9jdHgtPmh3Y3R4Owot ICAgIGNvbnN0IGludCBwbGFuZXMgPSBhdl9waXhfZm10X2NvdW50X3BsYW5lcyhzd2YtPmZvcm1h dCk7Ci0gICAgVmtCdWZmZXJVc2FnZUZsYWdzIGJ1Zl91c2FnZSA9IHVwbG9hZCA/IFZLX0JVRkZF Ul9VU0FHRV9UUkFOU0ZFUl9TUkNfQklUIDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgVktfQlVGRkVSX1VTQUdFX1RSQU5TRkVSX0RTVF9CSVQ7Ci0KLSAgICBz aXplX3QgYnVmX29mZnNldCA9IDA7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwbGFuZXM7IGkr KykgewotICAgICAgICBnZXRfcGxhbmVfd2goJnBfdywgJnBfaCwgc3dmLT5mb3JtYXQsIHN3Zi0+ d2lkdGgsIHN3Zi0+aGVpZ2h0LCBpKTsKLQotICAgICAgICByZWdpb25baV0gPSAoVmtCdWZmZXJJ bWFnZUNvcHkpIHsKLSAgICAgICAgICAgIC5idWZmZXJPZmZzZXQgPSBidWZfb2Zmc2V0LAotICAg ICAgICAgICAgLmJ1ZmZlclJvd0xlbmd0aCA9IEZGQUxJR04oc3dmLT5saW5lc2l6ZVtpXSwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAtPnByb3BzLnByb3BlcnRpZXMu bGltaXRzLm9wdGltYWxCdWZmZXJDb3B5Um93UGl0Y2hBbGlnbm1lbnQpLAotICAgICAgICAgICAg LmJ1ZmZlckltYWdlSGVpZ2h0ID0gcF9oLAotICAgICAgICAgICAgLmltYWdlU3VicmVzb3VyY2Uu bGF5ZXJDb3VudCA9IDEsCi0gICAgICAgICAgICAuaW1hZ2VFeHRlbnQgPSAoVmtFeHRlbnQzRCl7 IHBfdywgcF9oLCAxIH0sCi0gICAgICAgICAgICAvKiBSZXN0IG9mIHRoZSBmaWVsZHMgYWRqdXN0 ZWQvZmlsbGVkIGluIGxhdGVyICovCi0gICAgICAgIH07Ci0KLSAgICAgICAgYnVmX29mZnNldCAr PSBGRkFMSUdOKHBfaCpyZWdpb25baV0uYnVmZmVyUm93TGVuZ3RoLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgcC0+cHJvcHMucHJvcGVydGllcy5saW1pdHMub3B0aW1hbEJ1ZmZlckNv cHlPZmZzZXRBbGlnbm1lbnQpOwotICAgIH0KLQotICAgIGVyciA9IGZmX3ZrX2dldF9wb29sZWRf YnVmZmVyKCZwLT52a2N0eCwgJmZwLT50bXAsIGRzdCwgYnVmX3VzYWdlLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIGJ1Zl9vZmZzZXQsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgVktfTUVNT1JZX1BST1BFUlRZX0hPU1RfVklTSUJMRV9CSVQgfAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZLX01FTU9SWV9QUk9QRVJUWV9IT1NU X0NBQ0hFRF9CSVQpOwotICAgIGlmIChlcnIgPCAwKQotICAgICAgICByZXR1cm4gZXJyOwotCi0g ICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgaG9zdF9tYXBfZnJhbWUoQVZIV0ZyYW1lc0Nv bnRleHQgKmh3ZmMsIEFWQnVmZmVyUmVmICoqZHN0LCBpbnQgKm5iX2J1ZnMsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgIEFWRnJhbWUgKnN3ZiwgVmtCdWZmZXJJbWFnZUNvcHkgKnJlZ2lvbiwg aW50IHVwbG9hZCkKLXsKLSAgICBpbnQgZXJyOwotICAgIFZ1bGthbkRldmljZVByaXYgKnAgPSBo d2ZjLT5kZXZpY2VfY3R4LT5od2N0eDsKLQotICAgIGludCBuYl9zcmNfYnVmczsKLSAgICBjb25z dCBpbnQgcGxhbmVzID0gYXZfcGl4X2ZtdF9jb3VudF9wbGFuZXMoc3dmLT5mb3JtYXQpOwotICAg IFZrQnVmZmVyVXNhZ2VGbGFncyBidWZfdXNhZ2UgPSB1cGxvYWQgPyBWS19CVUZGRVJfVVNBR0Vf VFJBTlNGRVJfU1JDX0JJVCA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFZLX0JVRkZFUl9VU0FHRV9UUkFOU0ZFUl9EU1RfQklUOwotCi0gICAgLyogV2UgY2Fu J3QgaG9zdCBtYXAgaW1hZ2VzIHdpdGggbmVnYXRpdmUgc3RyaWRlcyAqLwotICAgIGZvciAoaW50 IGkgPSAwOyBpIDwgcGxhbmVzOyBpKyspCi0gICAgICAgIGlmIChzd2YtPmxpbmVzaXplW2ldIDwg MCkKLSAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7Ci0KLSAgICAvKiBDb3VudCB0 aGUgbnVtYmVyIG9mIGJ1ZmZlcnMgaW4gdGhlIHNvZnR3YXJlIGZyYW1lICovCi0gICAgbmJfc3Jj X2J1ZnMgPSAwOwotICAgIHdoaWxlIChzd2YtPmJ1ZltuYl9zcmNfYnVmc10pCi0gICAgICAgIG5i X3NyY19idWZzKys7Ci0KLSAgICAvKiBTaW5nbGUgYnVmZmVyIGNvbnRhaW5zIGFsbCBwbGFuZXMg Ki8KLSAgICBpZiAobmJfc3JjX2J1ZnMgPT0gMSkgewotICAgICAgICBlcnIgPSBmZl92a19ob3N0 X21hcF9idWZmZXIoJnAtPnZrY3R4LCAmZHN0WzBdLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc3dmLT5kYXRhWzBdLCBzd2YtPmJ1ZlswXSwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGJ1Zl91c2FnZSk7Ci0gICAgICAgIGlmIChlcnIgPCAwKQotICAg ICAgICAgICAgcmV0dXJuIGVycjsKLSAgICAgICAgKCpuYl9idWZzKSsrOwotCi0gICAgICAgIGZv ciAoaW50IGkgPSAwOyBpIDwgcGxhbmVzOyBpKyspCi0gICAgICAgICAgICByZWdpb25baV0uYnVm ZmVyT2Zmc2V0ID0gKChGRlZrQnVmZmVyICopZHN0WzBdLT5kYXRhKS0+dmlydHVhbF9vZmZzZXQg KwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3Zi0+ZGF0YVtpXSAtIHN3 Zi0+ZGF0YVswXTsKLSAgICB9IGVsc2UgaWYgKG5iX3NyY19idWZzID09IHBsYW5lcykgeyAvKiBP bmUgYnVmZmVyIHBlciBwbGFuZSAqLwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHBsYW5l czsgaSsrKSB7Ci0gICAgICAgICAgICBlcnIgPSBmZl92a19ob3N0X21hcF9idWZmZXIoJnAtPnZr Y3R4LCAmZHN0W2ldLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3 Zi0+ZGF0YVtpXSwgc3dmLT5idWZbaV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgYnVmX3VzYWdlKTsKLSAgICAgICAgICAgIGlmIChlcnIgPCAwKQotICAgICAgICAg ICAgICAgIGdvdG8gZmFpbDsKLSAgICAgICAgICAgICgqbmJfYnVmcykrKzsKLQotICAgICAgICAg ICAgcmVnaW9uW2ldLmJ1ZmZlck9mZnNldCA9ICgoRkZWa0J1ZmZlciAqKWRzdFtpXS0+ZGF0YSkt PnZpcnR1YWxfb2Zmc2V0OwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLyogV2Vp cmQgbGF5b3V0ICgzIHBsYW5lcywgMiBidWZmZXJzKSwgcGF0Y2ggd2VsY29tZSwgZmFsbGJhY2sg dG8gY29weSAqLwotICAgICAgICByZXR1cm4gQVZFUlJPUl9QQVRDSFdFTENPTUU7Ci0gICAgfQot Ci0gICAgcmV0dXJuIDA7Ci0KLWZhaWw6Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCAoKm5iX2J1 ZnMpOyBpKyspCi0gICAgICAgIGF2X2J1ZmZlcl91bnJlZigmZHN0W2ldKTsKLSAgICByZXR1cm4g ZXJyOwotfQotCi1zdGF0aWMgaW50IHZ1bGthbl90cmFuc2Zlcl9ob3N0KEFWSFdGcmFtZXNDb250 ZXh0ICpod2ZjLCBBVkZyYW1lICpod2YsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEFWRnJhbWUgKnN3ZiwgaW50IHVwbG9hZCkKLXsKLSAgICBWdWxrYW5GcmFtZXNQcml2ICpmcCA9 IGh3ZmMtPmh3Y3R4OwotICAgIEFWVnVsa2FuRnJhbWVzQ29udGV4dCAqaHdmY192ayA9ICZmcC0+ cDsKLSAgICBWdWxrYW5EZXZpY2VQcml2ICpwID0gaHdmYy0+ZGV2aWNlX2N0eC0+aHdjdHg7Ci0g ICAgQVZWdWxrYW5EZXZpY2VDb250ZXh0ICpod2N0eCA9ICZwLT5wOwotICAgIEZGVnVsa2FuRnVu Y3Rpb25zICp2ayA9ICZwLT52a2N0eC52a2ZuOwotCi0gICAgQVZWa0ZyYW1lICpod2ZfdmsgPSAo QVZWa0ZyYW1lICopaHdmLT5kYXRhWzBdOwotICAgIGNvbnN0IGludCBwbGFuZXMgPSBhdl9waXhf Zm10X2NvdW50X3BsYW5lcyhzd2YtPmZvcm1hdCk7Ci0gICAgY29uc3QgaW50IG5iX2ltYWdlcyA9 IGZmX3ZrX2NvdW50X2ltYWdlcyhod2ZfdmspOwotCi0gICAgVmtTZW1hcGhvcmVXYWl0SW5mbyBz ZW1fd2FpdDsKLSAgICBWa0hvc3RJbWFnZUxheW91dFRyYW5zaXRpb25JbmZvRVhUIGxheW91dF9j aF9pbmZvW0FWX05VTV9EQVRBX1BPSU5URVJTXTsKLSAgICBpbnQgbmJfbGF5b3V0X2NoID0gMDsK LQotICAgIGh3ZmNfdmstPmxvY2tfZnJhbWUoaHdmYywgaHdmX3ZrKTsKLQotICAgIGZvciAoaW50 IGkgPSAwOyBpIDwgbmJfaW1hZ2VzOyBpKyspIHsKLSAgICAgICAgaW50IGNvbXBhdCA9IDA7Ci0g ICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgcC0+dmtjdHguaG9zdF9pbWFnZV9wcm9wcy5jb3B5 U3JjTGF5b3V0Q291bnQ7IGorKykgewotICAgICAgICAgICAgaWYgKGh3Zl92ay0+bGF5b3V0W2ld ID09IHAtPnZrY3R4Lmhvc3RfaW1hZ2VfcHJvcHMucENvcHlTcmNMYXlvdXRzW2pdKSB7Ci0gICAg ICAgICAgICAgICAgY29tcGF0ID0gMTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg ICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAoY29tcGF0KQotICAgICAgICAgICAgY29udGlu dWU7Ci0KLSAgICAgICAgbGF5b3V0X2NoX2luZm9bbmJfbGF5b3V0X2NoXSA9IChWa0hvc3RJbWFn ZUxheW91dFRyYW5zaXRpb25JbmZvRVhUKSB7Ci0gICAgICAgICAgICAuc1R5cGUgPSBWS19TVFJV Q1RVUkVfVFlQRV9IT1NUX0lNQUdFX0xBWU9VVF9UUkFOU0lUSU9OX0lORk9fRVhULAotICAgICAg ICAgICAgLmltYWdlID0gaHdmX3ZrLT5pbWdbaV0sCi0gICAgICAgICAgICAub2xkTGF5b3V0ID0g aHdmX3ZrLT5sYXlvdXRbaV0sCi0gICAgICAgICAgICAubmV3TGF5b3V0ID0gVktfSU1BR0VfTEFZ T1VUX0dFTkVSQUwsCi0gICAgICAgICAgICAuc3VicmVzb3VyY2VSYW5nZSA9IHsKLSAgICAgICAg ICAgICAgICAuYXNwZWN0TWFzayA9IFZLX0lNQUdFX0FTUEVDVF9DT0xPUl9CSVQsCi0gICAgICAg ICAgICAgICAgLmxldmVsQ291bnQgPSAxLAotICAgICAgICAgICAgICAgIC5sYXllckNvdW50ID0g MSwKLSAgICAgICAgICAgIH0sCi0gICAgICAgIH07Ci0KLSAgICAgICAgaHdmX3ZrLT5sYXlvdXRb aV0gPSBsYXlvdXRfY2hfaW5mb1tuYl9sYXlvdXRfY2hdLm5ld0xheW91dDsKLSAgICAgICAgbmJf bGF5b3V0X2NoKys7Ci0gICAgfQotCi0gICAgc2VtX3dhaXQgPSAoVmtTZW1hcGhvcmVXYWl0SW5m bykgewotICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9TRU1BUEhPUkVfV0FJVF9J TkZPLAotICAgICAgICAucFNlbWFwaG9yZXMgPSBod2ZfdmstPnNlbSwKLSAgICAgICAgLnBWYWx1 ZXMgPSBod2ZfdmstPnNlbV92YWx1ZSwKLSAgICAgICAgLnNlbWFwaG9yZUNvdW50ID0gbmJfaW1h Z2VzLAotICAgIH07Ci0KLSAgICB2ay0+V2FpdFNlbWFwaG9yZXMoaHdjdHgtPmFjdF9kZXYsICZz ZW1fd2FpdCwgVUlOVDY0X01BWCk7Ci0KLSAgICBpZiAobmJfbGF5b3V0X2NoKQotICAgICAgICB2 ay0+VHJhbnNpdGlvbkltYWdlTGF5b3V0RVhUKGh3Y3R4LT5hY3RfZGV2LAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIG5iX2xheW91dF9jaCwgbGF5b3V0X2NoX2luZm8pOwot Ci0gICAgaWYgKHVwbG9hZCkgewotICAgICAgICBWa01lbW9yeVRvSW1hZ2VDb3B5RVhUIHJlZ2lv bl9pbmZvID0gewotICAgICAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfTUVNT1JZ X1RPX0lNQUdFX0NPUFlfRVhULAotICAgICAgICAgICAgLmltYWdlU3VicmVzb3VyY2UgPSB7Ci0g ICAgICAgICAgICAgICAgLmxheWVyQ291bnQgPSAxLAotICAgICAgICAgICAgfSwKLSAgICAgICAg fTsKLSAgICAgICAgVmtDb3B5TWVtb3J5VG9JbWFnZUluZm9FWFQgY29weV9pbmZvID0gewotICAg ICAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfQ09QWV9NRU1PUllfVE9fSU1BR0Vf SU5GT19FWFQsCi0gICAgICAgICAgICAuZmxhZ3MgPSBWS19IT1NUX0lNQUdFX0NPUFlfTUVNQ1BZ X0VYVCwKLSAgICAgICAgICAgIC5yZWdpb25Db3VudCA9IDEsCi0gICAgICAgICAgICAucFJlZ2lv bnMgPSAmcmVnaW9uX2luZm8sCi0gICAgICAgIH07Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBp IDwgcGxhbmVzOyBpKyspIHsKLSAgICAgICAgICAgIGludCBpbWdfaWR4ID0gRkZNSU4oaSwgKG5i X2ltYWdlcyAtIDEpKTsKLSAgICAgICAgICAgIHVpbnQzMl90IHBfdywgcF9oOwotICAgICAgICAg ICAgZ2V0X3BsYW5lX3doKCZwX3csICZwX2gsIHN3Zi0+Zm9ybWF0LCBzd2YtPndpZHRoLCBzd2Yt PmhlaWdodCwgaSk7Ci0KLSAgICAgICAgICAgIHJlZ2lvbl9pbmZvLnBIb3N0UG9pbnRlciA9IHN3 Zi0+ZGF0YVtpXTsKLSAgICAgICAgICAgIHJlZ2lvbl9pbmZvLmltYWdlU3VicmVzb3VyY2UuYXNw ZWN0TWFzayA9IGZmX3ZrX2FzcGVjdF9mbGFnKGh3ZiwgaSk7Ci0gICAgICAgICAgICByZWdpb25f aW5mby5pbWFnZUV4dGVudCA9IChWa0V4dGVudDNEKXsgcF93LCBwX2gsIDEgfTsKLSAgICAgICAg ICAgIGNvcHlfaW5mby5kc3RJbWFnZSA9IGh3Zl92ay0+aW1nW2ltZ19pZHhdOwotICAgICAgICAg ICAgY29weV9pbmZvLmRzdEltYWdlTGF5b3V0ID0gaHdmX3ZrLT5sYXlvdXRbaW1nX2lkeF07Ci0K LSAgICAgICAgICAgIHZrLT5Db3B5TWVtb3J5VG9JbWFnZUVYVChod2N0eC0+YWN0X2RldiwgJmNv cHlfaW5mbyk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBWa0ltYWdlVG9NZW1v cnlDb3B5RVhUIHJlZ2lvbl9pbmZvID0gewotICAgICAgICAgICAgLnNUeXBlID0gVktfU1RSVUNU VVJFX1RZUEVfTUVNT1JZX1RPX0lNQUdFX0NPUFlfRVhULAotICAgICAgICAgICAgLmltYWdlU3Vi cmVzb3VyY2UgPSB7Ci0gICAgICAgICAgICAgICAgLmxheWVyQ291bnQgPSAxLAotICAgICAgICAg ICAgfSwKLSAgICAgICAgfTsKLSAgICAgICAgVmtDb3B5SW1hZ2VUb01lbW9yeUluZm9FWFQgY29w eV9pbmZvID0gewotICAgICAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfQ09QWV9J TUFHRV9UT19NRU1PUllfSU5GT19FWFQsCi0gICAgICAgICAgICAuZmxhZ3MgPSBWS19IT1NUX0lN QUdFX0NPUFlfTUVNQ1BZX0VYVCwKLSAgICAgICAgICAgIC5yZWdpb25Db3VudCA9IDEsCi0gICAg ICAgICAgICAucFJlZ2lvbnMgPSAmcmVnaW9uX2luZm8sCi0gICAgICAgIH07Ci0gICAgICAgIGZv ciAoaW50IGkgPSAwOyBpIDwgcGxhbmVzOyBpKyspIHsKLSAgICAgICAgICAgIGludCBpbWdfaWR4 ID0gRkZNSU4oaSwgKG5iX2ltYWdlcyAtIDEpKTsKLSAgICAgICAgICAgIHVpbnQzMl90IHBfdywg cF9oOwotICAgICAgICAgICAgZ2V0X3BsYW5lX3doKCZwX3csICZwX2gsIHN3Zi0+Zm9ybWF0LCBz d2YtPndpZHRoLCBzd2YtPmhlaWdodCwgaSk7Ci0KLSAgICAgICAgICAgIHJlZ2lvbl9pbmZvLnBI b3N0UG9pbnRlciA9IHN3Zi0+ZGF0YVtpXTsKLSAgICAgICAgICAgIHJlZ2lvbl9pbmZvLmltYWdl U3VicmVzb3VyY2UuYXNwZWN0TWFzayA9IGZmX3ZrX2FzcGVjdF9mbGFnKGh3ZiwgaSk7Ci0gICAg ICAgICAgICByZWdpb25faW5mby5pbWFnZUV4dGVudCA9IChWa0V4dGVudDNEKXsgcF93LCBwX2gs IDEgfTsKLSAgICAgICAgICAgIGNvcHlfaW5mby5zcmNJbWFnZSA9IGh3Zl92ay0+aW1nW2ltZ19p ZHhdOwotICAgICAgICAgICAgY29weV9pbmZvLnNyY0ltYWdlTGF5b3V0ID0gaHdmX3ZrLT5sYXlv dXRbaW1nX2lkeF07Ci0KLSAgICAgICAgICAgIHZrLT5Db3B5SW1hZ2VUb01lbW9yeUVYVChod2N0 eC0+YWN0X2RldiwgJmNvcHlfaW5mbyk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBod2ZjX3Zr LT51bmxvY2tfZnJhbWUoaHdmYywgaHdmX3ZrKTsKLQotICAgIHJldHVybiAwOwotfQotCi1zdGF0 aWMgaW50IHZ1bGthbl90cmFuc2Zlcl9mcmFtZShBVkhXRnJhbWVzQ29udGV4dCAqaHdmYywKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFWRnJhbWUgKnN3ZiwgQVZGcmFtZSAqaHdm LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHVwbG9hZCkKLXsKLSAgICBp bnQgZXJyOwotICAgIFZ1bGthbkZyYW1lc1ByaXYgKmZwID0gaHdmYy0+aHdjdHg7Ci0gICAgQVZW dWxrYW5GcmFtZXNDb250ZXh0ICpod2N0eCA9ICZmcC0+cDsKLSAgICBWdWxrYW5EZXZpY2VQcml2 ICpwID0gaHdmYy0+ZGV2aWNlX2N0eC0+aHdjdHg7Ci0gICAgRkZWdWxrYW5GdW5jdGlvbnMgKnZr ID0gJnAtPnZrY3R4LnZrZm47Ci0KLSAgICBpbnQgaG9zdF9tYXBwZWQgPSAwOwotCi0gICAgQVZW a0ZyYW1lICpod2ZfdmsgPSAoQVZWa0ZyYW1lICopaHdmLT5kYXRhWzBdOwotICAgIFZrQnVmZmVy SW1hZ2VDb3B5IHJlZ2lvbltBVl9OVU1fREFUQV9QT0lOVEVSU107IC8vIGFsd2F5cyBvbmUgcGVy IHBsYW5lCi0KLSAgICBjb25zdCBpbnQgcGxhbmVzID0gYXZfcGl4X2ZtdF9jb3VudF9wbGFuZXMo c3dmLT5mb3JtYXQpOwotICAgIGNvbnN0IEFWUGl4Rm10RGVzY3JpcHRvciAqZGVzYyA9IGF2X3Bp eF9mbXRfZGVzY19nZXQoc3dmLT5mb3JtYXQpOwotICAgIGNvbnN0IGludCBuYl9pbWFnZXMgPSBm Zl92a19jb3VudF9pbWFnZXMoaHdmX3ZrKTsKLQotICAgIFZrSW1hZ2VNZW1vcnlCYXJyaWVyMiBp bWdfYmFyW0FWX05VTV9EQVRBX1BPSU5URVJTXTsKLSAgICBpbnQgbmJfaW1nX2JhciA9IDA7Ci0K LSAgICBBVkJ1ZmZlclJlZiAqYnVmc1tBVl9OVU1fREFUQV9QT0lOVEVSU107Ci0gICAgaW50IG5i X2J1ZnMgPSAwOwotCi0gICAgVmtDb21tYW5kQnVmZmVyIGNtZF9idWY7Ci0gICAgRkZWa0V4ZWND b250ZXh0ICpleGVjOwotCi0gICAgLyogU2FuaXR5IGNoZWNraW5nICovCi0gICAgaWYgKChzd2Yt PmZvcm1hdCAhPSBBVl9QSVhfRk1UX05PTkUgJiYgIWF2X3ZrZm10X2Zyb21fcGl4Zm10KHN3Zi0+ Zm9ybWF0KSkpIHsKLSAgICAgICAgYXZfbG9nKGh3ZmMsIEFWX0xPR19FUlJPUiwgIlVuc3VwcG9y dGVkIHNvZnR3YXJlIGZyYW1lIHBpeGVsIGZvcm1hdCFcbiIpOwotICAgICAgICByZXR1cm4gQVZF UlJPUihFSU5WQUwpOwotICAgIH0KLQotICAgIGlmIChzd2YtPndpZHRoID4gaHdmYy0+d2lkdGgg fHwgc3dmLT5oZWlnaHQgPiBod2ZjLT5oZWlnaHQpCi0gICAgICAgIHJldHVybiBBVkVSUk9SKEVJ TlZBTCk7Ci0KLSAgICBpZiAoaHdjdHgtPnVzYWdlICYgVktfSU1BR0VfVVNBR0VfSE9TVF9UUkFO U0ZFUl9CSVRfRVhUKQotICAgICAgICByZXR1cm4gdnVsa2FuX3RyYW5zZmVyX2hvc3QoaHdmYywg aHdmLCBzd2YsIHVwbG9hZCk7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGF2X3BpeF9mbXRf Y291bnRfcGxhbmVzKHN3Zi0+Zm9ybWF0KTsgaSsrKSB7Ci0gICAgICAgIHVpbnQzMl90IHBfdywg cF9oOwotICAgICAgICBnZXRfcGxhbmVfd2goJnBfdywgJnBfaCwgc3dmLT5mb3JtYXQsIHN3Zi0+ d2lkdGgsIHN3Zi0+aGVpZ2h0LCBpKTsKLQotICAgICAgICAvKiBCdWZmZXIgcmVnaW9uIGZvciB0 aGlzIHBsYW5lICovCi0gICAgICAgIHJlZ2lvbltpXSA9IChWa0J1ZmZlckltYWdlQ29weSkgewot ICAgICAgICAgICAgLmJ1ZmZlck9mZnNldCA9IDAsCi0gICAgICAgICAgICAuYnVmZmVyUm93TGVu Z3RoID0gc3dmLT5saW5lc2l6ZVtpXSwKLSAgICAgICAgICAgIC5idWZmZXJJbWFnZUhlaWdodCA9 IHBfaCwKLSAgICAgICAgICAgIC5pbWFnZVN1YnJlc291cmNlLmxheWVyQ291bnQgPSAxLAotICAg ICAgICAgICAgLmltYWdlRXh0ZW50ID0gKFZrRXh0ZW50M0QpeyBwX3csIHBfaCwgMSB9LAotICAg ICAgICAgICAgLyogUmVzdCBvZiB0aGUgZmllbGRzIGFkanVzdGVkL2ZpbGxlZCBpbiBsYXRlciAq LwotICAgICAgICB9OwotICAgIH0KLQotICAgIC8qIFNldHVwIGJ1ZmZlcnMgZmlyc3QgKi8KLSAg ICBpZiAocC0+dmtjdHguZXh0ZW5zaW9ucyAmIEZGX1ZLX0VYVF9FWFRFUk5BTF9IT1NUX01FTU9S WSAmJiAhcC0+YXZvaWRfaG9zdF9pbXBvcnQpIHsKLSAgICAgICAgZXJyID0gaG9zdF9tYXBfZnJh bWUoaHdmYywgYnVmcywgJm5iX2J1ZnMsIHN3ZiwgcmVnaW9uLCB1cGxvYWQpOwotICAgICAgICBp ZiAoZXJyID49IDApCi0gICAgICAgICAgICBob3N0X21hcHBlZCA9IDE7Ci0gICAgfQotCi0gICAg aWYgKCFob3N0X21hcHBlZCkgewotICAgICAgICBlcnIgPSBnZXRfcGxhbmVfYnVmKGh3ZmMsICZi dWZzWzBdLCBzd2YsIHJlZ2lvbiwgdXBsb2FkKTsKLSAgICAgICAgaWYgKGVyciA8IDApCi0gICAg ICAgICAgICBnb3RvIGVuZDsKLSAgICAgICAgbmJfYnVmcyA9IDE7Ci0KLSAgICAgICAgaWYgKHVw bG9hZCkgewotICAgICAgICAgICAgZXJyID0gY29weV9idWZmZXJfZGF0YShod2ZjLCBidWZzWzBd LCBzd2YsIHJlZ2lvbiwgcGxhbmVzLCAxKTsKLSAgICAgICAgICAgIGlmIChlcnIgPCAwKQotICAg ICAgICAgICAgICAgIGdvdG8gZW5kOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZXhlYyA9IGZm X3ZrX2V4ZWNfZ2V0KCZwLT52a2N0eCwgJmZwLT51cGxvYWRfZXhlYyk7Ci0gICAgY21kX2J1ZiA9 IGV4ZWMtPmJ1ZjsKLQotICAgIGZmX3ZrX2V4ZWNfc3RhcnQoJnAtPnZrY3R4LCBleGVjKTsKLQot ICAgIC8qIFByZXAgZGVzdGluYXRpb24gVnVsa2FuIGZyYW1lICovCi0gICAgZXJyID0gZmZfdmtf ZXhlY19hZGRfZGVwX2ZyYW1lKCZwLT52a2N0eCwgZXhlYywgaHdmLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBWS19QSVBFTElORV9TVEFHRV8yX0FMTF9DT01NQU5EU19CSVQs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZLX1BJUEVMSU5FX1NUQUdFXzJf VFJBTlNGRVJfQklUKTsKLSAgICBpZiAoZXJyIDwgMCkKLSAgICAgICAgZ290byBlbmQ7Ci0KLSAg ICAvKiBObyBuZWVkIHRvIGRlY2xhcmUgYnVmIGRlcHMgZm9yIHN5bmNocm9ub3VzIHRyYW5zZmVy cyAoZG93bmxvYWRzKSAqLwotICAgIGlmICh1cGxvYWQpIHsKLSAgICAgICAgLyogQWRkIHRoZSBz b2Z0d2FyZSBmcmFtZSBiYWNraW5nIHRoZSBidWZmZXJzIGlmIHdlJ3JlIGhvc3QgbWFwcGluZyAq LwotICAgICAgICBpZiAoaG9zdF9tYXBwZWQpIHsKLSAgICAgICAgICAgIGVyciA9IGZmX3ZrX2V4 ZWNfYWRkX2RlcF9zd19mcmFtZSgmcC0+dmtjdHgsIGV4ZWMsIHN3Zik7Ci0gICAgICAgICAgICBp ZiAoZXJyIDwgMCkgewotICAgICAgICAgICAgICAgIGZmX3ZrX2V4ZWNfZGlzY2FyZF9kZXBzKCZw LT52a2N0eCwgZXhlYyk7Ci0gICAgICAgICAgICAgICAgZ290byBlbmQ7Ci0gICAgICAgICAgICB9 Ci0gICAgICAgIH0KLQotICAgICAgICAvKiBBZGQgdGhlIGJ1ZmZlcnMgYXMgYSBkZXBlbmRlbmN5 ICovCi0gICAgICAgIGVyciA9IGZmX3ZrX2V4ZWNfYWRkX2RlcF9idWYoJnAtPnZrY3R4LCBleGVj LCBidWZzLCBuYl9idWZzLCAxKTsKLSAgICAgICAgaWYgKGVyciA8IDApIHsKLSAgICAgICAgICAg IGZmX3ZrX2V4ZWNfZGlzY2FyZF9kZXBzKCZwLT52a2N0eCwgZXhlYyk7Ci0gICAgICAgICAgICBn b3RvIGVuZDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGZmX3ZrX2ZyYW1lX2JhcnJpZXIoJnAt PnZrY3R4LCBleGVjLCBod2YsIGltZ19iYXIsICZuYl9pbWdfYmFyLAotICAgICAgICAgICAgICAg ICAgICAgICAgVktfUElQRUxJTkVfU1RBR0VfMl9BTExfQ09NTUFORFNfQklULAotICAgICAgICAg ICAgICAgICAgICAgICAgVktfUElQRUxJTkVfU1RBR0VfMl9UUkFOU0ZFUl9CSVRfS0hSLAotICAg ICAgICAgICAgICAgICAgICAgICAgdXBsb2FkID8gVktfQUNDRVNTX1RSQU5TRkVSX1dSSVRFX0JJ VCA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19BQ0NFU1NfVFJBTlNGRVJf UkVBRF9CSVQsCi0gICAgICAgICAgICAgICAgICAgICAgICB1cGxvYWQgPyBWS19JTUFHRV9MQVlP VVRfVFJBTlNGRVJfRFNUX09QVElNQUwgOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgVktfSU1BR0VfTEFZT1VUX1RSQU5TRkVSX1NSQ19PUFRJTUFMLAotICAgICAgICAgICAgICAg ICAgICAgICAgcC0+bmJfaW1nX3FmcyA+IDEgPyBWS19RVUVVRV9GQU1JTFlfSUdOT1JFRCA6IHAt PmltZ19xZnNbMF0pOwotCi0gICAgdmstPkNtZFBpcGVsaW5lQmFycmllcjIoY21kX2J1ZiwgJihW a0RlcGVuZGVuY3lJbmZvKSB7Ci0gICAgICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQ RV9ERVBFTkRFTkNZX0lORk8sCi0gICAgICAgICAgICAucEltYWdlTWVtb3J5QmFycmllcnMgPSBp bWdfYmFyLAotICAgICAgICAgICAgLmltYWdlTWVtb3J5QmFycmllckNvdW50ID0gbmJfaW1nX2Jh ciwKLSAgICB9KTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcGxhbmVzOyBpKyspIHsKLSAg ICAgICAgaW50IGJ1Zl9pZHggPSBGRk1JTihpLCAobmJfYnVmcyAtIDEpKTsKLSAgICAgICAgaW50 IGltZ19pZHggPSBGRk1JTihpLCAobmJfaW1hZ2VzIC0gMSkpOwotICAgICAgICBGRlZrQnVmZmVy ICp2a2J1ZiA9IChGRlZrQnVmZmVyICopYnVmc1tidWZfaWR4XS0+ZGF0YTsKLQotICAgICAgICB1 aW50MzJfdCBvcmlnX3N0cmlkZSA9IHJlZ2lvbltpXS5idWZmZXJSb3dMZW5ndGg7Ci0gICAgICAg IHJlZ2lvbltpXS5idWZmZXJSb3dMZW5ndGggLz0gZGVzYy0+Y29tcFtpXS5zdGVwOwotICAgICAg ICByZWdpb25baV0uaW1hZ2VTdWJyZXNvdXJjZS5hc3BlY3RNYXNrID0gZmZfdmtfYXNwZWN0X2Zs YWcoaHdmLCBpKTsKLQotICAgICAgICBpZiAodXBsb2FkKQotICAgICAgICAgICAgdmstPkNtZENv cHlCdWZmZXJUb0ltYWdlKGNtZF9idWYsIHZrYnVmLT5idWYsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaHdmX3ZrLT5pbWdbaW1nX2lkeF0sCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaW1nX2JhcltpbWdfaWR4XS5uZXdMYXlvdXQsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgJnJlZ2lvbltpXSk7Ci0gICAgICAgIGVs c2UKLSAgICAgICAgICAgIHZrLT5DbWRDb3B5SW1hZ2VUb0J1ZmZlcihjbWRfYnVmLCBod2Zfdmst PmltZ1tpbWdfaWR4XSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWdf YmFyW2ltZ19pZHhdLm5ld0xheW91dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB2a2J1Zi0+YnVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEs ICZyZWdpb25baV0pOwotCi0gICAgICAgIHJlZ2lvbltpXS5idWZmZXJSb3dMZW5ndGggPSBvcmln X3N0cmlkZTsKLSAgICB9Ci0KLSAgICBlcnIgPSBmZl92a19leGVjX3N1Ym1pdCgmcC0+dmtjdHgs IGV4ZWMpOwotICAgIGlmIChlcnIgPCAwKSB7Ci0gICAgICAgIGZmX3ZrX2V4ZWNfZGlzY2FyZF9k ZXBzKCZwLT52a2N0eCwgZXhlYyk7Ci0gICAgfSBlbHNlIGlmICghdXBsb2FkKSB7Ci0gICAgICAg IGZmX3ZrX2V4ZWNfd2FpdCgmcC0+dmtjdHgsIGV4ZWMpOwotICAgICAgICBpZiAoIWhvc3RfbWFw cGVkKQotICAgICAgICAgICAgZXJyID0gY29weV9idWZmZXJfZGF0YShod2ZjLCBidWZzWzBdLCBz d2YsIHJlZ2lvbiwgcGxhbmVzLCAwKTsKLSAgICB9Ci0KLWVuZDoKLSAgICBmb3IgKGludCBpID0g MDsgaSA8IG5iX2J1ZnM7IGkrKykKLSAgICAgICAgYXZfYnVmZmVyX3VucmVmKCZidWZzW2ldKTsK LQotICAgIHJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgdnVsa2FuX3RyYW5zZmVyX2RhdGFf dG8oQVZIV0ZyYW1lc0NvbnRleHQgKmh3ZmMsIEFWRnJhbWUgKmRzdCwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgQVZGcmFtZSAqc3JjKQotewotICAgIGF2X3VudXNl ZCBWdWxrYW5EZXZpY2VQcml2ICpwID0gaHdmYy0+ZGV2aWNlX2N0eC0+aHdjdHg7Ci0KLSAgICBz d2l0Y2ggKHNyYy0+Zm9ybWF0KSB7Ci0jaWYgQ09ORklHX0NVREEKLSAgICBjYXNlIEFWX1BJWF9G TVRfQ1VEQToKLSNpZmRlZiBfV0lOMzIKLSAgICAgICAgaWYgKChwLT52a2N0eC5leHRlbnNpb25z ICYgRkZfVktfRVhUX0VYVEVSTkFMX1dJTjMyX01FTU9SWSkgJiYKLSAgICAgICAgICAgIChwLT52 a2N0eC5leHRlbnNpb25zICYgRkZfVktfRVhUX0VYVEVSTkFMX1dJTjMyX1NFTSkpCi0jZWxzZQot ICAgICAgICBpZiAoKHAtPnZrY3R4LmV4dGVuc2lvbnMgJiBGRl9WS19FWFRfRVhURVJOQUxfRkRf TUVNT1JZKSAmJgotICAgICAgICAgICAgKHAtPnZrY3R4LmV4dGVuc2lvbnMgJiBGRl9WS19FWFRf RVhURVJOQUxfRkRfU0VNKSkKLSNlbmRpZgotICAgICAgICAgICAgcmV0dXJuIHZ1bGthbl90cmFu c2Zlcl9kYXRhX2Zyb21fY3VkYShod2ZjLCBkc3QsIHNyYyk7Ci0jZW5kaWYKLSAgICBkZWZhdWx0 OgotICAgICAgICBpZiAoc3JjLT5od19mcmFtZXNfY3R4KQotICAgICAgICAgICAgcmV0dXJuIEFW RVJST1IoRU5PU1lTKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIHZ1bGthbl90 cmFuc2Zlcl9mcmFtZShod2ZjLCAoQVZGcmFtZSAqKXNyYywgZHN0LCAxKTsKLSAgICB9Ci19Ci0K LSNpZiBDT05GSUdfQ1VEQQotc3RhdGljIGludCB2dWxrYW5fdHJhbnNmZXJfZGF0YV90b19jdWRh KEFWSFdGcmFtZXNDb250ZXh0ICpod2ZjLCBBVkZyYW1lICpkc3QsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQVZGcmFtZSAqc3JjKQotewotICAgIGludCBl cnI7Ci0gICAgQ1Vjb250ZXh0IGR1bW15OwotICAgIEFWVmtGcmFtZSAqZHN0X2Y7Ci0gICAgQVZW a0ZyYW1lSW50ZXJuYWwgKmRzdF9pbnQ7Ci0gICAgVnVsa2FuRnJhbWVzUHJpdiAqZnAgPSBod2Zj LT5od2N0eDsKLSAgICBjb25zdCBpbnQgcGxhbmVzID0gYXZfcGl4X2ZtdF9jb3VudF9wbGFuZXMo aHdmYy0+c3dfZm9ybWF0KTsKLSAgICBjb25zdCBBVlBpeEZtdERlc2NyaXB0b3IgKmRlc2MgPSBh dl9waXhfZm10X2Rlc2NfZ2V0KGh3ZmMtPnN3X2Zvcm1hdCk7Ci0gICAgaW50IG5iX2ltYWdlczsK LQotICAgIEFWSFdGcmFtZXNDb250ZXh0ICpjdWRhX2ZjID0gKEFWSFdGcmFtZXNDb250ZXh0Kilk c3QtPmh3X2ZyYW1lc19jdHgtPmRhdGE7Ci0gICAgQVZIV0RldmljZUNvbnRleHQgKmN1ZGFfY3Ug PSBjdWRhX2ZjLT5kZXZpY2VfY3R4OwotICAgIEFWQ1VEQURldmljZUNvbnRleHQgKmN1ZGFfZGV2 ID0gY3VkYV9jdS0+aHdjdHg7Ci0gICAgQVZDVURBRGV2aWNlQ29udGV4dEludGVybmFsICpjdV9p bnRlcm5hbCA9IGN1ZGFfZGV2LT5pbnRlcm5hbDsKLSAgICBDdWRhRnVuY3Rpb25zICpjdSA9IGN1 X2ludGVybmFsLT5jdWRhX2RsOwotICAgIENVREFfRVhURVJOQUxfU0VNQVBIT1JFX1dBSVRfUEFS QU1TIHNfd19wYXJbQVZfTlVNX0RBVEFfUE9JTlRFUlNdID0geyAwIH07Ci0gICAgQ1VEQV9FWFRF Uk5BTF9TRU1BUEhPUkVfU0lHTkFMX1BBUkFNUyBzX3NfcGFyW0FWX05VTV9EQVRBX1BPSU5URVJT XSA9IHsgMCB9OwotCi0gICAgZHN0X2YgPSAoQVZWa0ZyYW1lICopc3JjLT5kYXRhWzBdOwotICAg IG5iX2ltYWdlcyA9IGZmX3ZrX2NvdW50X2ltYWdlcyhkc3RfZik7Ci0KLSAgICBlcnIgPSBwcmVw YXJlX2ZyYW1lKGh3ZmMsICZmcC0+dXBsb2FkX2V4ZWMsIGRzdF9mLCBQUkVQX01PREVfRVhURVJO QUxfRVhQT1JUKTsKLSAgICBpZiAoZXJyIDwgMCkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAg IGVyciA9IENIRUNLX0NVKGN1LT5jdUN0eFB1c2hDdXJyZW50KGN1ZGFfZGV2LT5jdWRhX2N0eCkp OwotICAgIGlmIChlcnIgPCAwKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgZXJyID0gdnVs a2FuX2V4cG9ydF90b19jdWRhKGh3ZmMsIGRzdC0+aHdfZnJhbWVzX2N0eCwgc3JjKTsKLSAgICBp ZiAoZXJyIDwgMCkgewotICAgICAgICBDSEVDS19DVShjdS0+Y3VDdHhQb3BDdXJyZW50KCZkdW1t eSkpOwotICAgICAgICByZXR1cm4gZXJyOwotICAgIH0KLQotICAgIGRzdF9pbnQgPSBkc3RfZi0+ aW50ZXJuYWw7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHBsYW5lczsgaSsrKSB7Ci0gICAg ICAgIHNfd19wYXJbaV0ucGFyYW1zLmZlbmNlLnZhbHVlID0gZHN0X2YtPnNlbV92YWx1ZVtpXSAr IDA7Ci0gICAgICAgIHNfc19wYXJbaV0ucGFyYW1zLmZlbmNlLnZhbHVlID0gZHN0X2YtPnNlbV92 YWx1ZVtpXSArIDE7Ci0gICAgfQotCi0gICAgZXJyID0gQ0hFQ0tfQ1UoY3UtPmN1V2FpdEV4dGVy bmFsU2VtYXBob3Jlc0FzeW5jKGRzdF9pbnQtPmN1X3NlbSwgc193X3BhciwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmJfaW1hZ2VzLCBjdWRh X2Rldi0+c3RyZWFtKSk7Ci0gICAgaWYgKGVyciA8IDApCi0gICAgICAgIGdvdG8gZmFpbDsKLQot ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcGxhbmVzOyBpKyspIHsKLSAgICAgICAgQ1VEQV9NRU1D UFkyRCBjcHkgPSB7Ci0gICAgICAgICAgICAuZHN0TWVtb3J5VHlwZSA9IENVX01FTU9SWVRZUEVf REVWSUNFLAotICAgICAgICAgICAgLmRzdERldmljZSAgICAgPSAoQ1VkZXZpY2VwdHIpZHN0LT5k YXRhW2ldLAotICAgICAgICAgICAgLmRzdFBpdGNoICAgICAgPSBkc3QtPmxpbmVzaXplW2ldLAot ICAgICAgICAgICAgLmRzdFkgICAgICAgICAgPSAwLAotCi0gICAgICAgICAgICAuc3JjTWVtb3J5 VHlwZSA9IENVX01FTU9SWVRZUEVfQVJSQVksCi0gICAgICAgICAgICAuc3JjQXJyYXkgICAgICA9 IGRzdF9pbnQtPmN1X2FycmF5W2ldLAotICAgICAgICB9OwotCi0gICAgICAgIGludCB3LCBoOwot ICAgICAgICBnZXRfcGxhbmVfd2goJncsICZoLCBod2ZjLT5zd19mb3JtYXQsIGh3ZmMtPndpZHRo LCBod2ZjLT5oZWlnaHQsIGkpOwotCi0gICAgICAgIGNweS5XaWR0aEluQnl0ZXMgPSB3ICogZGVz Yy0+Y29tcFtpXS5zdGVwOwotICAgICAgICBjcHkuSGVpZ2h0ID0gaDsKLQotICAgICAgICBlcnIg PSBDSEVDS19DVShjdS0+Y3VNZW1jcHkyREFzeW5jKCZjcHksIGN1ZGFfZGV2LT5zdHJlYW0pKTsK LSAgICAgICAgaWYgKGVyciA8IDApCi0gICAgICAgICAgICBnb3RvIGZhaWw7Ci0gICAgfQotCi0g ICAgZXJyID0gQ0hFQ0tfQ1UoY3UtPmN1U2lnbmFsRXh0ZXJuYWxTZW1hcGhvcmVzQXN5bmMoZHN0 X2ludC0+Y3Vfc2VtLCBzX3NfcGFyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG5iX2ltYWdlcywgY3VkYV9kZXYtPnN0cmVhbSkpOwotICAg IGlmIChlcnIgPCAwKQotICAgICAgICBnb3RvIGZhaWw7Ci0KLSAgICBmb3IgKGludCBpID0gMDsg aSA8IHBsYW5lczsgaSsrKQotICAgICAgICBkc3RfZi0+c2VtX3ZhbHVlW2ldKys7Ci0KLSAgICBD SEVDS19DVShjdS0+Y3VDdHhQb3BDdXJyZW50KCZkdW1teSkpOwotCi0gICAgYXZfbG9nKGh3ZmMs IEFWX0xPR19WRVJCT1NFLCAiVHJhbnNmZXJyZWQgVnVsa2FuIGltYWdlIHRvIENVREEhXG4iKTsK LQotICAgIHJldHVybiBwcmVwYXJlX2ZyYW1lKGh3ZmMsICZmcC0+dXBsb2FkX2V4ZWMsIGRzdF9m LCBQUkVQX01PREVfRVhURVJOQUxfSU1QT1JUKTsKLQotZmFpbDoKLSAgICBDSEVDS19DVShjdS0+ Y3VDdHhQb3BDdXJyZW50KCZkdW1teSkpOwotICAgIHZ1bGthbl9mcmVlX2ludGVybmFsKGRzdF9m KTsKLSAgICBhdl9idWZmZXJfdW5yZWYoJmRzdC0+YnVmWzBdKTsKLSAgICByZXR1cm4gZXJyOwot fQotI2VuZGlmCi0KLXN0YXRpYyBpbnQgdnVsa2FuX3RyYW5zZmVyX2RhdGFfZnJvbShBVkhXRnJh bWVzQ29udGV4dCAqaHdmYywgQVZGcmFtZSAqZHN0LAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IEFWRnJhbWUgKnNyYykKLXsKLSAgICBhdl91bnVzZWQgVnVsa2Fu RGV2aWNlUHJpdiAqcCA9IGh3ZmMtPmRldmljZV9jdHgtPmh3Y3R4OwotCi0gICAgc3dpdGNoIChk c3QtPmZvcm1hdCkgewotI2lmIENPTkZJR19DVURBCi0gICAgY2FzZSBBVl9QSVhfRk1UX0NVREE6 Ci0jaWZkZWYgX1dJTjMyCi0gICAgICAgIGlmICgocC0+dmtjdHguZXh0ZW5zaW9ucyAmIEZGX1ZL X0VYVF9FWFRFUk5BTF9XSU4zMl9NRU1PUlkpICYmCi0gICAgICAgICAgICAocC0+dmtjdHguZXh0 ZW5zaW9ucyAmIEZGX1ZLX0VYVF9FWFRFUk5BTF9XSU4zMl9TRU0pKQotI2Vsc2UKLSAgICAgICAg aWYgKChwLT52a2N0eC5leHRlbnNpb25zICYgRkZfVktfRVhUX0VYVEVSTkFMX0ZEX01FTU9SWSkg JiYKLSAgICAgICAgICAgIChwLT52a2N0eC5leHRlbnNpb25zICYgRkZfVktfRVhUX0VYVEVSTkFM X0ZEX1NFTSkpCi0jZW5kaWYKLSAgICAgICAgICAgIHJldHVybiB2dWxrYW5fdHJhbnNmZXJfZGF0 YV90b19jdWRhKGh3ZmMsIGRzdCwgc3JjKTsKLSNlbmRpZgotICAgIGRlZmF1bHQ6Ci0gICAgICAg IGlmIChkc3QtPmh3X2ZyYW1lc19jdHgpCi0gICAgICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9T WVMpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gdnVsa2FuX3RyYW5zZmVyX2Zy YW1lKGh3ZmMsIGRzdCwgKEFWRnJhbWUgKilzcmMsIDApOwotICAgIH0KLX0KLQotc3RhdGljIGlu dCB2dWxrYW5fZnJhbWVzX2Rlcml2ZV90byhBVkhXRnJhbWVzQ29udGV4dCAqZHN0X2ZjLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVkhXRnJhbWVzQ29udGV4dCAqc3JjX2Zj LCBpbnQgZmxhZ3MpCi17Ci0gICAgcmV0dXJuIHZ1bGthbl9mcmFtZXNfaW5pdChkc3RfZmMpOwot fQotCi1BVlZrRnJhbWUgKmF2X3ZrX2ZyYW1lX2FsbG9jKHZvaWQpCi17Ci0gICAgaW50IGVycjsK LSAgICBBVlZrRnJhbWUgKmYgPSBhdl9tYWxsb2N6KHNpemVvZihBVlZrRnJhbWUpKTsKLSAgICBp ZiAoIWYpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgZi0+aW50ZXJuYWwgPSBhdl9tYWxs b2N6KHNpemVvZigqZi0+aW50ZXJuYWwpKTsKLSAgICBpZiAoIWYtPmludGVybmFsKSB7Ci0gICAg ICAgIGF2X2ZyZWUoZik7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIGVyciA9 IHB0aHJlYWRfbXV0ZXhfaW5pdCgmZi0+aW50ZXJuYWwtPnVwZGF0ZV9tdXRleCwgTlVMTCk7Ci0g ICAgaWYgKGVyciAhPSAwKSB7Ci0gICAgICAgIGF2X2ZyZWUoZi0+aW50ZXJuYWwpOwotICAgICAg ICBhdl9mcmVlKGYpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICByZXR1cm4g ZjsKLX0KLQotY29uc3QgSFdDb250ZXh0VHlwZSBmZl9od2NvbnRleHRfdHlwZV92dWxrYW4gPSB7 Ci0gICAgLnR5cGUgICAgICAgICAgICAgICAgICAgPSBBVl9IV0RFVklDRV9UWVBFX1ZVTEtBTiwK LSAgICAubmFtZSAgICAgICAgICAgICAgICAgICA9ICJWdWxrYW4iLAotCi0gICAgLmRldmljZV9o d2N0eF9zaXplICAgICAgPSBzaXplb2YoVnVsa2FuRGV2aWNlUHJpdiksCi0gICAgLmZyYW1lc19o d2N0eF9zaXplICAgICAgPSBzaXplb2YoVnVsa2FuRnJhbWVzUHJpdiksCi0KLSAgICAuZGV2aWNl X2luaXQgICAgICAgICAgICA9ICZ2dWxrYW5fZGV2aWNlX2luaXQsCi0gICAgLmRldmljZV91bmlu aXQgICAgICAgICAgPSAmdnVsa2FuX2RldmljZV91bmluaXQsCi0gICAgLmRldmljZV9jcmVhdGUg ICAgICAgICAgPSAmdnVsa2FuX2RldmljZV9jcmVhdGUsCi0gICAgLmRldmljZV9kZXJpdmUgICAg ICAgICAgPSAmdnVsa2FuX2RldmljZV9kZXJpdmUsCi0KLSAgICAuZnJhbWVzX2dldF9jb25zdHJh aW50cyA9ICZ2dWxrYW5fZnJhbWVzX2dldF9jb25zdHJhaW50cywKLSAgICAuZnJhbWVzX2luaXQg ICAgICAgICAgICA9IHZ1bGthbl9mcmFtZXNfaW5pdCwKLSAgICAuZnJhbWVzX2dldF9idWZmZXIg ICAgICA9IHZ1bGthbl9nZXRfYnVmZmVyLAotICAgIC5mcmFtZXNfdW5pbml0ICAgICAgICAgID0g dnVsa2FuX2ZyYW1lc191bmluaXQsCi0KLSAgICAudHJhbnNmZXJfZ2V0X2Zvcm1hdHMgICA9IHZ1 bGthbl90cmFuc2Zlcl9nZXRfZm9ybWF0cywKLSAgICAudHJhbnNmZXJfZGF0YV90byAgICAgICA9 IHZ1bGthbl90cmFuc2Zlcl9kYXRhX3RvLAotICAgIC50cmFuc2Zlcl9kYXRhX2Zyb20gICAgID0g dnVsa2FuX3RyYW5zZmVyX2RhdGFfZnJvbSwKLQotICAgIC5tYXBfdG8gICAgICAgICAgICAgICAg ID0gdnVsa2FuX21hcF90bywKLSAgICAubWFwX2Zyb20gICAgICAgICAgICAgICA9IHZ1bGthbl9t YXBfZnJvbSwKLSAgICAuZnJhbWVzX2Rlcml2ZV90byAgICAgICA9ICZ2dWxrYW5fZnJhbWVzX2Rl cml2ZV90bywKLQotICAgIC5waXhfZm10cyA9IChjb25zdCBlbnVtIEFWUGl4ZWxGb3JtYXQgW10p IHsKLSAgICAgICAgQVZfUElYX0ZNVF9WVUxLQU4sCi0gICAgICAgIEFWX1BJWF9GTVRfTk9ORQot ICAgIH0sCi19OwotLSAKMi40OS4xCgoKRnJvbSA5M2VlMTUzOThiZmNhNGI1ZTg4NDE0NWQyYTE2 NzNhNjMyMTk2YWQzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBKYW1haWthMSA8bHVr YXN6Y3oxOEB3cC5wbD4KRGF0ZTogV2VkLCAzIFNlcCAyMDI1IDEzOjE1OjI2ICswMDAwClN1Ympl Y3Q6IFtQQVRDSCAwNDAvMTE4XSBDaGFuZ2luZyB2dWxrYW4gZmlsZSBkaXJlY3RvcnkKCi0tLQog bGliYXZ1dGlsL3Z1bGthbi9od2NvbnRleHRfdnVsa2FuLmMgfCA0NzkwICsrKysrKysrKysrKysr KysrKysrKysrKysrKwogMSBmaWxlIGNoYW5nZWQsIDQ3OTAgaW5zZXJ0aW9ucygrKQogY3JlYXRl IG1vZGUgMTAwNjQ0IGxpYmF2dXRpbC92dWxrYW4vaHdjb250ZXh0X3Z1bGthbi5jCgpkaWZmIC0t Z2l0IGEvbGliYXZ1dGlsL3Z1bGthbi9od2NvbnRleHRfdnVsa2FuLmMgYi9saWJhdnV0aWwvdnVs a2FuL2h3Y29udGV4dF92dWxrYW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwLi44NThiYmFiYTEyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYXZ1dGlsL3Z1bGthbi9od2Nv bnRleHRfdnVsa2FuLmMKQEAgLTAsMCArMSw0NzkwIEBACisvKgorICogQ29weXJpZ2h0IChjKSBM eW5uZQorICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KKyAqCisgKiBGRm1wZWcg aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisg KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl aXRoZXIKKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUg aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM ZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ dWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhl IEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg RmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKyAqLworCisjZGVmaW5lIFZL X05PX1BST1RPVFlQRVMKKyNkZWZpbmUgVktfRU5BQkxFX0JFVEFfRVhURU5TSU9OUworCisjaWZk ZWYgX1dJTjMyCisjaW5jbHVkZSA8d2luZG93cy5oPiAvKiBJbmNsdWRlZCB0byBwcmV2ZW50IGNv bmZsaWN0cyB3aXRoIENyZWF0ZVNlbWFwaG9yZSAqLworI2luY2x1ZGUgPHZlcnNpb25oZWxwZXJz Lmg+CisjaW5jbHVkZSAiY29tcGF0L3czMmRsZmNuLmgiCisjZWxzZQorI2luY2x1ZGUgPGRsZmNu Lmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKworI2luY2x1ZGUgImxpYmF2dXRpbC90 aHJlYWQuaCIKKworI2luY2x1ZGUgImxpYmF2dXRpbC9jb25maWcuaCIKKyNpbmNsdWRlICJsaWJh dnV0aWwvcGl4ZGVzYy5oIgorI2luY2x1ZGUgImxpYmF2dXRpbC9hdnN0cmluZy5oIgorI2luY2x1 ZGUgImxpYmF2dXRpbC9pbWd1dGlscy5oIgorI2luY2x1ZGUgImxpYmF2dXRpbC9od2NvbnRleHQu aCIKKyNpbmNsdWRlICJsaWJhdnV0aWwvaHdjb250ZXh0X2ludGVybmFsLmgiCisjaW5jbHVkZSAi aHdjb250ZXh0X3Z1bGthbi5oIgorI2luY2x1ZGUgImxpYmF2dXRpbC9tZW0uaCIKKworI2luY2x1 ZGUgInZ1bGthbi5oIgorI2luY2x1ZGUgInZ1bGthbl9sb2FkZXIuaCIKKworI2lmIENPTkZJR19W QUFQSQorI2luY2x1ZGUgImh3Y29udGV4dF92YWFwaS5oIgorI2VuZGlmCisKKyNpZiBDT05GSUdf TElCRFJNCisjaWYgQ09ORklHX1ZBQVBJCisjaW5jbHVkZSA8dmEvdmFfZHJtY29tbW9uLmg+Cisj ZW5kaWYKKyNpZmRlZiBfX2xpbnV4X18KKyNpbmNsdWRlIDxzeXMvc3lzbWFjcm9zLmg+CisjZW5k aWYKKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHhmODZkcm0uaD4KKyNpbmNsdWRl IDxkcm1fZm91cmNjLmg+CisjaW5jbHVkZSAiaHdjb250ZXh0X2RybS5oIgorI2VuZGlmCisKKyNp ZiBIQVZFX0xJTlVYX0RNQV9CVUZfSAorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2luY2x1ZGUg PGxpbnV4L2RtYS1idWYuaD4KKyNlbmRpZgorCisjaWYgQ09ORklHX0NVREEKKyNpbmNsdWRlICJo d2NvbnRleHRfY3VkYV9pbnRlcm5hbC5oIgorI2luY2x1ZGUgImN1ZGFfY2hlY2suaCIKKyNkZWZp bmUgQ0hFQ0tfQ1UoeCkgRkZfQ1VEQV9DSEVDS19ETChjdWRhX2N1LCBjdSwgeCkKKyNlbmRpZgor Cit0eXBlZGVmIHN0cnVjdCBWdWxrYW5EZXZpY2VGZWF0dXJlcyB7CisgICAgVmtQaHlzaWNhbERl dmljZUZlYXR1cmVzMiBkZXZpY2U7CisKKyAgICBWa1BoeXNpY2FsRGV2aWNlVnVsa2FuMTFGZWF0 dXJlcyB2dWxrYW5fMV8xOworICAgIFZrUGh5c2ljYWxEZXZpY2VWdWxrYW4xMkZlYXR1cmVzIHZ1 bGthbl8xXzI7CisgICAgVmtQaHlzaWNhbERldmljZVZ1bGthbjEzRmVhdHVyZXMgdnVsa2FuXzFf MzsKKyAgICBWa1BoeXNpY2FsRGV2aWNlVGltZWxpbmVTZW1hcGhvcmVGZWF0dXJlcyB0aW1lbGlu ZV9zZW1hcGhvcmU7CisgICAgVmtQaHlzaWNhbERldmljZVNoYWRlclN1Ymdyb3VwUm90YXRlRmVh dHVyZXNLSFIgc3ViZ3JvdXBfcm90YXRlOworICAgIFZrUGh5c2ljYWxEZXZpY2VIb3N0SW1hZ2VD b3B5RmVhdHVyZXNFWFQgaG9zdF9pbWFnZV9jb3B5OworCisjaWZkZWYgVktfS0hSX3NoYWRlcl9l eHBlY3RfYXNzdW1lCisgICAgVmtQaHlzaWNhbERldmljZVNoYWRlckV4cGVjdEFzc3VtZUZlYXR1 cmVzS0hSIGV4cGVjdF9hc3N1bWU7CisjZW5kaWYKKworICAgIFZrUGh5c2ljYWxEZXZpY2VWaWRl b01haW50ZW5hbmNlMUZlYXR1cmVzS0hSIHZpZGVvX21haW50ZW5hbmNlXzE7CisjaWZkZWYgVktf S0hSX3ZpZGVvX21haW50ZW5hbmNlMgorICAgIFZrUGh5c2ljYWxEZXZpY2VWaWRlb01haW50ZW5h bmNlMkZlYXR1cmVzS0hSIHZpZGVvX21haW50ZW5hbmNlXzI7CisjZW5kaWYKKyNpZmRlZiBWS19L SFJfdmlkZW9fZGVjb2RlX3ZwOQorICAgIFZrUGh5c2ljYWxEZXZpY2VWaWRlb0RlY29kZVZQOUZl YXR1cmVzS0hSIHZwOV9kZWNvZGU7CisjZW5kaWYKKyNpZmRlZiBWS19LSFJfdmlkZW9fZW5jb2Rl X2F2MQorICAgIFZrUGh5c2ljYWxEZXZpY2VWaWRlb0VuY29kZUFWMUZlYXR1cmVzS0hSIGF2MV9l bmNvZGU7CisjZW5kaWYKKworICAgIFZrUGh5c2ljYWxEZXZpY2VTaGFkZXJPYmplY3RGZWF0dXJl c0VYVCBzaGFkZXJfb2JqZWN0OworICAgIFZrUGh5c2ljYWxEZXZpY2VDb29wZXJhdGl2ZU1hdHJp eEZlYXR1cmVzS0hSIGNvb3BlcmF0aXZlX21hdHJpeDsKKyAgICBWa1BoeXNpY2FsRGV2aWNlRGVz Y3JpcHRvckJ1ZmZlckZlYXR1cmVzRVhUIGRlc2NyaXB0b3JfYnVmZmVyOworICAgIFZrUGh5c2lj YWxEZXZpY2VTaGFkZXJBdG9taWNGbG9hdEZlYXR1cmVzRVhUIGF0b21pY19mbG9hdDsKKworI2lm ZGVmIFZLX0tIUl9zaGFkZXJfcmVsYXhlZF9leHRlbmRlZF9pbnN0cnVjdGlvbgorICAgIFZrUGh5 c2ljYWxEZXZpY2VTaGFkZXJSZWxheGVkRXh0ZW5kZWRJbnN0cnVjdGlvbkZlYXR1cmVzS0hSIHJl bGF4ZWRfZXh0ZW5kZWRfaW5zdHJ1Y3Rpb247CisjZW5kaWYKK30gVnVsa2FuRGV2aWNlRmVhdHVy ZXM7CisKK3R5cGVkZWYgc3RydWN0IFZ1bGthbkRldmljZVByaXYgeworICAgIC8qKgorICAgICAq IFRoZSBwdWJsaWMgQVZWdWxrYW5EZXZpY2VDb250ZXh0LiBTZWUgaHdjb250ZXh0X3Z1bGthbi5o IGZvciBpdC4KKyAgICAgKi8KKyAgICBBVlZ1bGthbkRldmljZUNvbnRleHQgcDsKKworICAgIC8q IFZ1bGthbiBsaWJyYXJ5IGFuZCBsb2FkZXIgZnVuY3Rpb25zICovCisgICAgdm9pZCAqbGlidnVs a2FuOworCisgICAgRkZWdWxrYW5Db250ZXh0ICAgIHZrY3R4OworICAgIEFWVnVsa2FuRGV2aWNl UXVldWVGYW1pbHkgKmNvbXB1dGVfcWY7CisgICAgQVZWdWxrYW5EZXZpY2VRdWV1ZUZhbWlseSAq dHJhbnNmZXJfcWY7CisKKyAgICAvKiBQcm9wZXJ0aWVzICovCisgICAgVmtQaHlzaWNhbERldmlj ZVByb3BlcnRpZXMyIHByb3BzOworICAgIFZrUGh5c2ljYWxEZXZpY2VNZW1vcnlQcm9wZXJ0aWVz IG1wcm9wczsKKyAgICBWa1BoeXNpY2FsRGV2aWNlRXh0ZXJuYWxNZW1vcnlIb3N0UHJvcGVydGll c0VYVCBocHJvcHM7CisgICAgVmtQaHlzaWNhbERldmljZURyaXZlclByb3BlcnRpZXMgZHByb3Bz OworCisgICAgLyogT3BhcXVlIEZEIGV4dGVybmFsIHNlbWFwaG9yZSBwcm9wZXJ0aWVzICovCisg ICAgVmtFeHRlcm5hbFNlbWFwaG9yZVByb3BlcnRpZXMgZXh0X3NlbV9wcm9wc19vcGFxdWU7CisK KyAgICAvKiBFbmFibGVkIGZlYXR1cmVzICovCisgICAgVnVsa2FuRGV2aWNlRmVhdHVyZXMgZmVh dHM7CisKKyAgICAvKiBRdWV1ZXMgKi8KKyAgICBwdGhyZWFkX211dGV4X3QgKipxZl9tdXRleDsK KyAgICB1aW50MzJfdCBuYl90b3RfcWZzOworICAgIHVpbnQzMl90IGltZ19xZnNbNjRdOworICAg IHVpbnQzMl90IG5iX2ltZ19xZnM7CisKKyAgICAvKiBEZWJ1ZyBjYWxsYmFjayAqLworICAgIFZr RGVidWdVdGlsc01lc3NlbmdlckVYVCBkZWJ1Z19jdHg7CisKKyAgICAvKiBTZXR0aW5ncyAqLwor ICAgIGludCB1c2VfbGluZWFyX2ltYWdlczsKKworICAgIC8qIE9wdGlvbiB0byBhbGxvY2F0ZSBh bGwgaW1hZ2UgcGxhbmVzIGluIGEgc2luZ2xlIGFsbG9jYXRpb24gKi8KKyAgICBpbnQgY29udGln dW91c19wbGFuZXM7CisKKyAgICAvKiBEaXNhYmxlIG11bHRpcGxhbmUgaW1hZ2VzICovCisgICAg aW50IGRpc2FibGVfbXVsdGlwbGFuZTsKKworICAgIC8qIERpc2FibGUgaG9zdCBpbWFnZSB0cmFu c2ZlciAqLworICAgIGludCBkaXNhYmxlX2hvc3RfdHJhbnNmZXI7CisKKyAgICAvKiBQcmVmZXIg bWVtY3B5IG92ZXIgZHluYW1pYyBob3N0IHBvaW50ZXIgaW1wb3J0cyAqLworICAgIGludCBhdm9p ZF9ob3N0X2ltcG9ydDsKKworICAgIC8qIE1heGltdW0gcXVldWVzICovCisgICAgaW50IGxpbWl0 X3F1ZXVlczsKK30gVnVsa2FuRGV2aWNlUHJpdjsKKwordHlwZWRlZiBzdHJ1Y3QgVnVsa2FuRnJh bWVzUHJpdiB7CisgICAgLyoqCisgICAgICogVGhlIHB1YmxpYyBBVlZ1bGthbkZyYW1lc0NvbnRl eHQuIFNlZSBod2NvbnRleHRfdnVsa2FuLmggZm9yIGl0LgorICAgICAqLworICAgIEFWVnVsa2Fu RnJhbWVzQ29udGV4dCBwOworCisgICAgLyogSW1hZ2UgY29udmVyc2lvbnMgKi8KKyAgICBGRlZr RXhlY1Bvb2wgY29tcHV0ZV9leGVjOworCisgICAgLyogSW1hZ2UgdHJhbnNmZXJzICovCisgICAg RkZWa0V4ZWNQb29sIHVwbG9hZF9leGVjOworICAgIEZGVmtFeGVjUG9vbCBkb3dubG9hZF9leGVj OworCisgICAgLyogVGVtcG9yYXJ5IGJ1ZmZlciBwb29scyAqLworICAgIEFWQnVmZmVyUG9vbCAq dG1wOworCisgICAgLyogTW9kaWZpZXIgaW5mbyBsaXN0IHRvIGZyZWUgYXQgdW5pbml0ICovCisg ICAgVmtJbWFnZURybUZvcm1hdE1vZGlmaWVyTGlzdENyZWF0ZUluZm9FWFQgKm1vZGlmaWVyX2lu Zm87CisKKyAgICAvKiBQcm9wZXJ0aWVzIGZvciBEUk0gbW9kaWZpZXIgZm9yIGVhY2ggcGxhbmUg aW4gdGhlIGltYWdlICovCisgICAgVmtEcm1Gb3JtYXRNb2RpZmllclByb3BlcnRpZXNFWFQgZHJt X2Zvcm1hdF9tb2RpZmllcl9wcm9wZXJ0aWVzWzVdOworfSBWdWxrYW5GcmFtZXNQcml2OworCit0 eXBlZGVmIHN0cnVjdCBBVlZrRnJhbWVJbnRlcm5hbCB7CisgICAgcHRocmVhZF9tdXRleF90IHVw ZGF0ZV9tdXRleDsKKworI2lmIENPTkZJR19DVURBCisgICAgLyogSW1wb3J0aW5nIGV4dGVybmFs IG1lbW9yeSBpbnRvIGN1ZGEgaXMgcmVhbGx5IGV4cGVuc2l2ZSBzbyB3ZSBrZWVwIHRoZQorICAg ICAqIG1lbW9yeSBpbXBvcnRlZCBhbGwgdGhlIHRpbWUgKi8KKyAgICBBVkJ1ZmZlclJlZiAqY3Vk YV9mY19yZWY7IC8qIE5lZWQgdG8ga2VlcCBpdCBhcm91bmQgZm9yIHVuaW5pdCAqLworICAgIENV ZXh0ZXJuYWxNZW1vcnkgZXh0X21lbVtBVl9OVU1fREFUQV9QT0lOVEVSU107CisgICAgQ1VtaXBt YXBwZWRBcnJheSBjdV9tbWFbQVZfTlVNX0RBVEFfUE9JTlRFUlNdOworICAgIENVYXJyYXkgY3Vf YXJyYXlbQVZfTlVNX0RBVEFfUE9JTlRFUlNdOworICAgIENVZXh0ZXJuYWxTZW1hcGhvcmUgY3Vf c2VtW0FWX05VTV9EQVRBX1BPSU5URVJTXTsKKyNpZmRlZiBfV0lOMzIKKyAgICBIQU5ETEUgZXh0 X21lbV9oYW5kbGVbQVZfTlVNX0RBVEFfUE9JTlRFUlNdOworICAgIEhBTkRMRSBleHRfc2VtX2hh bmRsZVtBVl9OVU1fREFUQV9QT0lOVEVSU107CisjZW5kaWYKKyNlbmRpZgorfSBBVlZrRnJhbWVJ bnRlcm5hbDsKKworLyogSW5pdGlhbGl6ZSBhbGwgc3RydWN0cyBpbiBWdWxrYW5EZXZpY2VGZWF0 dXJlcyAqLworc3RhdGljIHZvaWQgZGV2aWNlX2ZlYXR1cmVzX2luaXQoQVZIV0RldmljZUNvbnRl eHQgKmN0eCwgVnVsa2FuRGV2aWNlRmVhdHVyZXMgKmZlYXRzKQoreworICAgIFZ1bGthbkRldmlj ZVByaXYgKnAgPSBjdHgtPmh3Y3R4OworICAgIEZGVnVsa2FuQ29udGV4dCAqcyA9ICZwLT52a2N0 eDsKKworICAgIGZlYXRzLT5kZXZpY2UgPSAoVmtQaHlzaWNhbERldmljZUZlYXR1cmVzMikgewor ICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9QSFlTSUNBTF9ERVZJQ0VfRkVBVFVS RVNfMiwKKyAgICB9OworCisgICAgRkZfVktfU1RSVUNUX0VYVChzLCAmZmVhdHMtPmRldmljZSwg JmZlYXRzLT52dWxrYW5fMV8xLCBGRl9WS19FWFRfTk9fRkxBRywKKyAgICAgICAgICAgICAgICAg ICAgIFZLX1NUUlVDVFVSRV9UWVBFX1BIWVNJQ0FMX0RFVklDRV9WVUxLQU5fMV8xX0ZFQVRVUkVT KTsKKyAgICBGRl9WS19TVFJVQ1RfRVhUKHMsICZmZWF0cy0+ZGV2aWNlLCAmZmVhdHMtPnZ1bGth bl8xXzIsIEZGX1ZLX0VYVF9OT19GTEFHLAorICAgICAgICAgICAgICAgICAgICAgVktfU1RSVUNU VVJFX1RZUEVfUEhZU0lDQUxfREVWSUNFX1ZVTEtBTl8xXzJfRkVBVFVSRVMpOworICAgIEZGX1ZL X1NUUlVDVF9FWFQocywgJmZlYXRzLT5kZXZpY2UsICZmZWF0cy0+dnVsa2FuXzFfMywgRkZfVktf RVhUX05PX0ZMQUcsCisgICAgICAgICAgICAgICAgICAgICBWS19TVFJVQ1RVUkVfVFlQRV9QSFlT SUNBTF9ERVZJQ0VfVlVMS0FOXzFfM19GRUFUVVJFUyk7CisKKyAgICBGRl9WS19TVFJVQ1RfRVhU KHMsICZmZWF0cy0+ZGV2aWNlLCAmZmVhdHMtPnRpbWVsaW5lX3NlbWFwaG9yZSwgRkZfVktfRVhU X1BPUlRBQklMSVRZX1NVQlNFVCwKKyAgICAgICAgICAgICAgICAgICAgIFZLX1NUUlVDVFVSRV9U WVBFX1BIWVNJQ0FMX0RFVklDRV9USU1FTElORV9TRU1BUEhPUkVfRkVBVFVSRVMpOworICAgIEZG X1ZLX1NUUlVDVF9FWFQocywgJmZlYXRzLT5kZXZpY2UsICZmZWF0cy0+c3ViZ3JvdXBfcm90YXRl LCBGRl9WS19FWFRfU1VCR1JPVVBfUk9UQVRFLAorICAgICAgICAgICAgICAgICAgICAgVktfU1RS VUNUVVJFX1RZUEVfUEhZU0lDQUxfREVWSUNFX1NIQURFUl9TVUJHUk9VUF9ST1RBVEVfRkVBVFVS RVNfS0hSKTsKKyAgICBGRl9WS19TVFJVQ1RfRVhUKHMsICZmZWF0cy0+ZGV2aWNlLCAmZmVhdHMt Pmhvc3RfaW1hZ2VfY29weSwgRkZfVktfRVhUX0hPU1RfSU1BR0VfQ09QWSwKKyAgICAgICAgICAg ICAgICAgICAgIFZLX1NUUlVDVFVSRV9UWVBFX1BIWVNJQ0FMX0RFVklDRV9IT1NUX0lNQUdFX0NP UFlfRkVBVFVSRVNfRVhUKTsKKworI2lmZGVmIFZLX0tIUl9zaGFkZXJfZXhwZWN0X2Fzc3VtZQor ICAgIEZGX1ZLX1NUUlVDVF9FWFQocywgJmZlYXRzLT5kZXZpY2UsICZmZWF0cy0+ZXhwZWN0X2Fz c3VtZSwgRkZfVktfRVhUX0VYUEVDVF9BU1NVTUUsCisgICAgICAgICAgICAgICAgICAgICBWS19T VFJVQ1RVUkVfVFlQRV9QSFlTSUNBTF9ERVZJQ0VfU0hBREVSX0VYUEVDVF9BU1NVTUVfRkVBVFVS RVNfS0hSKTsKKyNlbmRpZgorCisgICAgRkZfVktfU1RSVUNUX0VYVChzLCAmZmVhdHMtPmRldmlj ZSwgJmZlYXRzLT52aWRlb19tYWludGVuYW5jZV8xLCBGRl9WS19FWFRfVklERU9fTUFJTlRFTkFO Q0VfMSwKKyAgICAgICAgICAgICAgICAgICAgIFZLX1NUUlVDVFVSRV9UWVBFX1BIWVNJQ0FMX0RF VklDRV9WSURFT19NQUlOVEVOQU5DRV8xX0ZFQVRVUkVTX0tIUik7CisjaWZkZWYgVktfS0hSX3Zp ZGVvX21haW50ZW5hbmNlMgorICAgIEZGX1ZLX1NUUlVDVF9FWFQocywgJmZlYXRzLT5kZXZpY2Us ICZmZWF0cy0+dmlkZW9fbWFpbnRlbmFuY2VfMiwgRkZfVktfRVhUX1ZJREVPX01BSU5URU5BTkNF XzIsCisgICAgICAgICAgICAgICAgICAgICBWS19TVFJVQ1RVUkVfVFlQRV9QSFlTSUNBTF9ERVZJ Q0VfVklERU9fTUFJTlRFTkFOQ0VfMl9GRUFUVVJFU19LSFIpOworI2VuZGlmCisjaWZkZWYgVktf S0hSX3ZpZGVvX2RlY29kZV92cDkKKyAgICBGRl9WS19TVFJVQ1RfRVhUKHMsICZmZWF0cy0+ZGV2 aWNlLCAmZmVhdHMtPnZwOV9kZWNvZGUsIEZGX1ZLX0VYVF9WSURFT19ERUNPREVfVlA5LAorICAg ICAgICAgICAgICAgICAgICAgVktfU1RSVUNUVVJFX1RZUEVfUEhZU0lDQUxfREVWSUNFX1ZJREVP X0RFQ09ERV9WUDlfRkVBVFVSRVNfS0hSKTsKKyNlbmRpZgorI2lmZGVmIFZLX0tIUl92aWRlb19l bmNvZGVfYXYxCisgICAgRkZfVktfU1RSVUNUX0VYVChzLCAmZmVhdHMtPmRldmljZSwgJmZlYXRz LT5hdjFfZW5jb2RlLCBGRl9WS19FWFRfVklERU9fRU5DT0RFX0FWMSwKKyAgICAgICAgICAgICAg ICAgICAgIFZLX1NUUlVDVFVSRV9UWVBFX1BIWVNJQ0FMX0RFVklDRV9WSURFT19FTkNPREVfQVYx X0ZFQVRVUkVTX0tIUik7CisjZW5kaWYKKworICAgIEZGX1ZLX1NUUlVDVF9FWFQocywgJmZlYXRz LT5kZXZpY2UsICZmZWF0cy0+c2hhZGVyX29iamVjdCwgRkZfVktfRVhUX1NIQURFUl9PQkpFQ1Qs CisgICAgICAgICAgICAgICAgICAgICBWS19TVFJVQ1RVUkVfVFlQRV9QSFlTSUNBTF9ERVZJQ0Vf U0hBREVSX09CSkVDVF9GRUFUVVJFU19FWFQpOworICAgIEZGX1ZLX1NUUlVDVF9FWFQocywgJmZl YXRzLT5kZXZpY2UsICZmZWF0cy0+Y29vcGVyYXRpdmVfbWF0cml4LCBGRl9WS19FWFRfQ09PUF9N QVRSSVgsCisgICAgICAgICAgICAgICAgICAgICBWS19TVFJVQ1RVUkVfVFlQRV9QSFlTSUNBTF9E RVZJQ0VfQ09PUEVSQVRJVkVfTUFUUklYX0ZFQVRVUkVTX0tIUik7CisgICAgRkZfVktfU1RSVUNU X0VYVChzLCAmZmVhdHMtPmRldmljZSwgJmZlYXRzLT5kZXNjcmlwdG9yX2J1ZmZlciwgRkZfVktf RVhUX0RFU0NSSVBUT1JfQlVGRkVSLAorICAgICAgICAgICAgICAgICAgICAgVktfU1RSVUNUVVJF X1RZUEVfUEhZU0lDQUxfREVWSUNFX0RFU0NSSVBUT1JfQlVGRkVSX0ZFQVRVUkVTX0VYVCk7Cisg ICAgRkZfVktfU1RSVUNUX0VYVChzLCAmZmVhdHMtPmRldmljZSwgJmZlYXRzLT5hdG9taWNfZmxv YXQsIEZGX1ZLX0VYVF9BVE9NSUNfRkxPQVQsCisgICAgICAgICAgICAgICAgICAgICBWS19TVFJV Q1RVUkVfVFlQRV9QSFlTSUNBTF9ERVZJQ0VfU0hBREVSX0FUT01JQ19GTE9BVF9GRUFUVVJFU19F WFQpOworCisjaWZkZWYgVktfS0hSX3NoYWRlcl9yZWxheGVkX2V4dGVuZGVkX2luc3RydWN0aW9u CisgICAgRkZfVktfU1RSVUNUX0VYVChzLCAmZmVhdHMtPmRldmljZSwgJmZlYXRzLT5yZWxheGVk X2V4dGVuZGVkX2luc3RydWN0aW9uLCBGRl9WS19FWFRfUkVMQVhFRF9FWFRFTkRFRF9JTlNUUiwK KyAgICAgICAgICAgICAgICAgICAgIFZLX1NUUlVDVFVSRV9UWVBFX1BIWVNJQ0FMX0RFVklDRV9T SEFERVJfUkVMQVhFRF9FWFRFTkRFRF9JTlNUUlVDVElPTl9GRUFUVVJFU19LSFIpOworI2VuZGlm Cit9CisKKy8qIENvcHkgYWxsIG5lZWRlZCBkZXZpY2UgZmVhdHVyZXMgKi8KK3N0YXRpYyB2b2lk IGRldmljZV9mZWF0dXJlc19jb3B5X25lZWRlZChWdWxrYW5EZXZpY2VGZWF0dXJlcyAqZHN0LCBW dWxrYW5EZXZpY2VGZWF0dXJlcyAqc3JjKQoreworI2RlZmluZSBDT1BZX1ZBTChWQUwpICAgICAg ICBcCisgICAgZG8geyAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZHN0LT5WQUwgPSBz cmMtPlZBTDsgXAorICAgIH0gd2hpbGUgKDApICAgICAgICAgICAgICBcCisKKyAgICBDT1BZX1ZB TChkZXZpY2UuZmVhdHVyZXMuc2hhZGVySW1hZ2VHYXRoZXJFeHRlbmRlZCk7CisgICAgQ09QWV9W QUwoZGV2aWNlLmZlYXR1cmVzLnNoYWRlclN0b3JhZ2VJbWFnZVJlYWRXaXRob3V0Rm9ybWF0KTsK KyAgICBDT1BZX1ZBTChkZXZpY2UuZmVhdHVyZXMuc2hhZGVyU3RvcmFnZUltYWdlV3JpdGVXaXRo b3V0Rm9ybWF0KTsKKyAgICBDT1BZX1ZBTChkZXZpY2UuZmVhdHVyZXMuZnJhZ21lbnRTdG9yZXNB bmRBdG9taWNzKTsKKyAgICBDT1BZX1ZBTChkZXZpY2UuZmVhdHVyZXMudmVydGV4UGlwZWxpbmVT dG9yZXNBbmRBdG9taWNzKTsKKyAgICBDT1BZX1ZBTChkZXZpY2UuZmVhdHVyZXMuc2hhZGVySW50 NjQpOworICAgIENPUFlfVkFMKGRldmljZS5mZWF0dXJlcy5zaGFkZXJJbnQxNik7CisgICAgQ09Q WV9WQUwoZGV2aWNlLmZlYXR1cmVzLnNoYWRlckZsb2F0NjQpOworICAgIENPUFlfVkFMKGRldmlj ZS5mZWF0dXJlcy5zaGFkZXJTdG9yYWdlSW1hZ2VSZWFkV2l0aG91dEZvcm1hdCk7CisgICAgQ09Q WV9WQUwoZGV2aWNlLmZlYXR1cmVzLnNoYWRlclN0b3JhZ2VJbWFnZVdyaXRlV2l0aG91dEZvcm1h dCk7CisKKyAgICBDT1BZX1ZBTCh2dWxrYW5fMV8xLnNhbXBsZXJZY2JjckNvbnZlcnNpb24pOwor ICAgIENPUFlfVkFMKHZ1bGthbl8xXzEuc3RvcmFnZVB1c2hDb25zdGFudDE2KTsKKyAgICBDT1BZ X1ZBTCh2dWxrYW5fMV8xLnN0b3JhZ2VCdWZmZXIxNkJpdEFjY2Vzcyk7CisgICAgQ09QWV9WQUwo dnVsa2FuXzFfMS51bmlmb3JtQW5kU3RvcmFnZUJ1ZmZlcjE2Qml0QWNjZXNzKTsKKworICAgIENP UFlfVkFMKHZ1bGthbl8xXzIudGltZWxpbmVTZW1hcGhvcmUpOworICAgIENPUFlfVkFMKHZ1bGth bl8xXzIuc2NhbGFyQmxvY2tMYXlvdXQpOworICAgIENPUFlfVkFMKHZ1bGthbl8xXzIuYnVmZmVy RGV2aWNlQWRkcmVzcyk7CisgICAgQ09QWV9WQUwodnVsa2FuXzFfMi5ob3N0UXVlcnlSZXNldCk7 CisgICAgQ09QWV9WQUwodnVsa2FuXzFfMi5zdG9yYWdlUHVzaENvbnN0YW50OCk7CisgICAgQ09Q WV9WQUwodnVsa2FuXzFfMi5zaGFkZXJJbnQ4KTsKKyAgICBDT1BZX1ZBTCh2dWxrYW5fMV8yLnN0 b3JhZ2VCdWZmZXI4Qml0QWNjZXNzKTsKKyAgICBDT1BZX1ZBTCh2dWxrYW5fMV8yLnVuaWZvcm1B bmRTdG9yYWdlQnVmZmVyOEJpdEFjY2Vzcyk7CisgICAgQ09QWV9WQUwodnVsa2FuXzFfMi5zaGFk ZXJGbG9hdDE2KTsKKyAgICBDT1BZX1ZBTCh2dWxrYW5fMV8yLnNoYWRlckJ1ZmZlckludDY0QXRv bWljcyk7CisgICAgQ09QWV9WQUwodnVsa2FuXzFfMi5zaGFkZXJTaGFyZWRJbnQ2NEF0b21pY3Mp OworICAgIENPUFlfVkFMKHZ1bGthbl8xXzIudnVsa2FuTWVtb3J5TW9kZWwpOworICAgIENPUFlf VkFMKHZ1bGthbl8xXzIudnVsa2FuTWVtb3J5TW9kZWxEZXZpY2VTY29wZSk7CisgICAgQ09QWV9W QUwodnVsa2FuXzFfMi51bmlmb3JtQnVmZmVyU3RhbmRhcmRMYXlvdXQpOworCisgICAgQ09QWV9W QUwodnVsa2FuXzFfMy5keW5hbWljUmVuZGVyaW5nKTsKKyAgICBDT1BZX1ZBTCh2dWxrYW5fMV8z Lm1haW50ZW5hbmNlNCk7CisgICAgQ09QWV9WQUwodnVsa2FuXzFfMy5zeW5jaHJvbml6YXRpb24y KTsKKyAgICBDT1BZX1ZBTCh2dWxrYW5fMV8zLmNvbXB1dGVGdWxsU3ViZ3JvdXBzKTsKKyAgICBD T1BZX1ZBTCh2dWxrYW5fMV8zLnN1Ymdyb3VwU2l6ZUNvbnRyb2wpOworICAgIENPUFlfVkFMKHZ1 bGthbl8xXzMuc2hhZGVyWmVyb0luaXRpYWxpemVXb3JrZ3JvdXBNZW1vcnkpOworICAgIENPUFlf VkFMKHZ1bGthbl8xXzMuZHluYW1pY1JlbmRlcmluZyk7CisKKyAgICBDT1BZX1ZBTCh0aW1lbGlu ZV9zZW1hcGhvcmUudGltZWxpbmVTZW1hcGhvcmUpOworICAgIENPUFlfVkFMKHN1Ymdyb3VwX3Jv dGF0ZS5zaGFkZXJTdWJncm91cFJvdGF0ZSk7CisgICAgQ09QWV9WQUwoaG9zdF9pbWFnZV9jb3B5 Lmhvc3RJbWFnZUNvcHkpOworCisgICAgQ09QWV9WQUwodmlkZW9fbWFpbnRlbmFuY2VfMS52aWRl b01haW50ZW5hbmNlMSk7CisjaWZkZWYgVktfS0hSX3ZpZGVvX21haW50ZW5hbmNlMgorICAgIENP UFlfVkFMKHZpZGVvX21haW50ZW5hbmNlXzIudmlkZW9NYWludGVuYW5jZTIpOworI2VuZGlmCisK KyNpZmRlZiBWS19LSFJfdmlkZW9fZGVjb2RlX3ZwOQorICAgIENPUFlfVkFMKHZwOV9kZWNvZGUu dmlkZW9EZWNvZGVWUDkpOworI2VuZGlmCisKKyNpZmRlZiBWS19LSFJfdmlkZW9fZW5jb2RlX2F2 MQorICAgIENPUFlfVkFMKGF2MV9lbmNvZGUudmlkZW9FbmNvZGVBVjEpOworI2VuZGlmCisKKyAg ICBDT1BZX1ZBTChzaGFkZXJfb2JqZWN0LnNoYWRlck9iamVjdCk7CisKKyAgICBDT1BZX1ZBTChj b29wZXJhdGl2ZV9tYXRyaXguY29vcGVyYXRpdmVNYXRyaXgpOworCisgICAgQ09QWV9WQUwoZGVz Y3JpcHRvcl9idWZmZXIuZGVzY3JpcHRvckJ1ZmZlcik7CisgICAgQ09QWV9WQUwoZGVzY3JpcHRv cl9idWZmZXIuZGVzY3JpcHRvckJ1ZmZlclB1c2hEZXNjcmlwdG9ycyk7CisKKyAgICBDT1BZX1ZB TChhdG9taWNfZmxvYXQuc2hhZGVyQnVmZmVyRmxvYXQzMkF0b21pY3MpOworICAgIENPUFlfVkFM KGF0b21pY19mbG9hdC5zaGFkZXJCdWZmZXJGbG9hdDMyQXRvbWljQWRkKTsKKworI2lmZGVmIFZL X0tIUl9zaGFkZXJfcmVsYXhlZF9leHRlbmRlZF9pbnN0cnVjdGlvbgorICAgIENPUFlfVkFMKHJl bGF4ZWRfZXh0ZW5kZWRfaW5zdHJ1Y3Rpb24uc2hhZGVyUmVsYXhlZEV4dGVuZGVkSW5zdHJ1Y3Rp b24pOworI2VuZGlmCisKKyNpZmRlZiBWS19LSFJfc2hhZGVyX2V4cGVjdF9hc3N1bWUKKyAgICBD T1BZX1ZBTChleHBlY3RfYXNzdW1lLnNoYWRlckV4cGVjdEFzc3VtZSk7CisjZW5kaWYKKworI3Vu ZGVmIENPUFlfVkFMCit9CisKKyNkZWZpbmUgQVNQRUNUXzJQTEFORSAoVktfSU1BR0VfQVNQRUNU X1BMQU5FXzBfQklUIHwgVktfSU1BR0VfQVNQRUNUX1BMQU5FXzFfQklUKQorI2RlZmluZSBBU1BF Q1RfM1BMQU5FIChWS19JTUFHRV9BU1BFQ1RfUExBTkVfMF9CSVQgfCBWS19JTUFHRV9BU1BFQ1Rf UExBTkVfMV9CSVQgfCBWS19JTUFHRV9BU1BFQ1RfUExBTkVfMl9CSVQpCisKK3N0YXRpYyBjb25z dCBzdHJ1Y3QgRkZWa0Zvcm1hdEVudHJ5IHsKKyAgICBWa0Zvcm1hdCB2a2Y7CisgICAgZW51bSBB VlBpeGVsRm9ybWF0IHBpeGZtdDsKKyAgICBWa0ltYWdlQXNwZWN0RmxhZ3MgYXNwZWN0OworICAg IGludCB2a19wbGFuZXM7CisgICAgaW50IG5iX2ltYWdlczsKKyAgICBpbnQgbmJfaW1hZ2VzX2Zh bGxiYWNrOworICAgIGNvbnN0IFZrRm9ybWF0IGZhbGxiYWNrWzVdOworfSB2a19mb3JtYXRzX2xp c3RbXSA9IHsKKyAgICAvKiBHcmF5IGZvcm1hdHMgKi8KKyAgICB7IFZLX0ZPUk1BVF9SOF9VTk9S TSwgICBBVl9QSVhfRk1UX0dSQVk4LCAgIFZLX0lNQUdFX0FTUEVDVF9DT0xPUl9CSVQsIDEsIDEs IDEsIHsgVktfRk9STUFUX1I4X1VOT1JNICAgfSB9LAorICAgIHsgVktfRk9STUFUX1IxNl9VTk9S TSwgIEFWX1BJWF9GTVRfR1JBWTEwLCAgVktfSU1BR0VfQVNQRUNUX0NPTE9SX0JJVCwgMSwgMSwg MSwgeyBWS19GT1JNQVRfUjE2X1VOT1JNICB9IH0sCisgICAgeyBWS19GT1JNQVRfUjE2X1VOT1JN LCAgQVZfUElYX0ZNVF9HUkFZMTIsICBWS19JTUFHRV9BU1BFQ1RfQ09MT1JfQklULCAxLCAxLCAx LCB7IFZLX0ZPUk1BVF9SMTZfVU5PUk0gIH0gfSwKKyAgICB7IFZLX0ZPUk1BVF9SMTZfVU5PUk0s ICBBVl9QSVhfRk1UX0dSQVkxNCwgIFZLX0lNQUdFX0FTUEVDVF9DT0xPUl9CSVQsIDEsIDEsIDEs IHsgVktfRk9STUFUX1IxNl9VTk9STSAgfSB9LAorICAgIHsgVktfRk9STUFUX1IxNl9VTk9STSwg IEFWX1BJWF9GTVRfR1JBWTE2LCAgVktfSU1BR0VfQVNQRUNUX0NPTE9SX0JJVCwgMSwgMSwgMSwg eyBWS19GT1JNQVRfUjE2X1VOT1JNICB9IH0sCisgICAgeyBWS19GT1JNQVRfUjMyX1VJTlQsICAg QVZfUElYX0ZNVF9HUkFZMzIsICBWS19JTUFHRV9BU1BFQ1RfQ09MT1JfQklULCAxLCAxLCAxLCB7 IFZLX0ZPUk1BVF9SMzJfVUlOVCAgIH0gfSwKKyAgICB7IFZLX0ZPUk1BVF9SMzJfU0ZMT0FULCBB Vl9QSVhfRk1UX0dSQVlGMzIsIFZLX0lNQUdFX0FTUEVDVF9DT0xPUl9CSVQsIDEsIDEsIDEsIHsg VktfRk9STUFUX1IzMl9TRkxPQVQgfSB9LAorCisgICAgLyogUkdCIGZvcm1hdHMgKi8KKyAgICB7 IFZLX0ZPUk1BVF9COEc4UjhBOF9VTk9STSwgICAgICAgICAgIEFWX1BJWF9GTVRfQkdSQSwgICAg VktfSU1BR0VfQVNQRUNUX0NPTE9SX0JJVCwgMSwgMSwgMSwgeyBWS19GT1JNQVRfQjhHOFI4QThf VU5PUk0gICAgICAgICAgIH0gfSwKKyAgICB7IFZLX0ZPUk1BVF9SOEc4QjhBOF9VTk9STSwgICAg ICAgICAgIEFWX1BJWF9GTVRfUkdCQSwgICAgVktfSU1BR0VfQVNQRUNUX0NPTE9SX0JJVCwgMSwg MSwgMSwgeyBWS19GT1JNQVRfUjhHOEI4QThfVU5PUk0gICAgICAgICAgIH0gfSwKKyAgICB7IFZL X0ZPUk1BVF9SOEc4QjhfVU5PUk0sICAgICAgICAgICAgIEFWX1BJWF9GTVRfUkdCMjQsICAgVktf SU1BR0VfQVNQRUNUX0NPTE9SX0JJVCwgMSwgMSwgMSwgeyBWS19GT1JNQVRfUjhHOEI4X1VOT1JN ICAgICAgICAgICAgIH0gfSwKKyAgICB7IFZLX0ZPUk1BVF9COEc4UjhfVU5PUk0sICAgICAgICAg ICAgIEFWX1BJWF9GTVRfQkdSMjQsICAgVktfSU1BR0VfQVNQRUNUX0NPTE9SX0JJVCwgMSwgMSwg MSwgeyBWS19GT1JNQVRfQjhHOFI4X1VOT1JNICAgICAgICAgICAgIH0gfSwKKyAgICB7IFZLX0ZP Uk1BVF9SMTZHMTZCMTZfVU5PUk0sICAgICAgICAgIEFWX1BJWF9GTVRfUkdCNDgsICAgVktfSU1B R0VfQVNQRUNUX0NPTE9SX0JJVCwgMSwgMSwgMSwgeyBWS19GT1JNQVRfUjE2RzE2QjE2X1VOT1JN ICAgICAgICAgIH0gfSwKKyAgICB7IFZLX0ZPUk1BVF9SMTZHMTZCMTZBMTZfVU5PUk0sICAgICAg IEFWX1BJWF9GTVRfUkdCQTY0LCAgVktfSU1BR0VfQVNQRUNUX0NPTE9SX0JJVCwgMSwgMSwgMSwg eyBWS19GT1JNQVRfUjE2RzE2QjE2QTE2X1VOT1JNICAgICAgIH0gfSwKKyAgICB7IFZLX0ZPUk1B VF9SNUc2QjVfVU5PUk1fUEFDSzE2LCAgICAgIEFWX1BJWF9GTVRfUkdCNTY1LCAgVktfSU1BR0Vf QVNQRUNUX0NPTE9SX0JJVCwgMSwgMSwgMSwgeyBWS19GT1JNQVRfUjVHNkI1X1VOT1JNX1BBQ0sx NiAgICAgIH0gfSwKKyAgICB7IFZLX0ZPUk1BVF9CNUc2UjVfVU5PUk1fUEFDSzE2LCAgICAgIEFW X1BJWF9GTVRfQkdSNTY1LCAgVktfSU1BR0VfQVNQRUNUX0NPTE9SX0JJVCwgMSwgMSwgMSwgeyBW S19GT1JNQVRfQjVHNlI1X1VOT1JNX1BBQ0sxNiAgICAgIH0gfSwKKyAgICB7IFZLX0ZPUk1BVF9C OEc4UjhBOF9VTk9STSwgICAgICAgICAgIEFWX1BJWF9GTVRfQkdSMCwgICAgVktfSU1BR0VfQVNQ RUNUX0NPTE9SX0JJVCwgMSwgMSwgMSwgeyBWS19GT1JNQVRfQjhHOFI4QThfVU5PUk0gICAgICAg ICAgIH0gfSwKKyAgICB7IFZLX0ZPUk1BVF9SOEc4QjhBOF9VTk9STSwgICAgICAgICAgIEFWX1BJ WF9GTVRfUkdCMCwgICAgVktfSU1BR0VfQVNQRUNUX0NPTE9SX0JJVCwgMSwgMSwgMSwgeyBWS19G T1JNQVRfUjhHOEI4QThfVU5PUk0gICAgICAgICAgIH0gfSwKKyAgICB7IFZLX0ZPUk1BVF9BMlIx MEcxMEIxMF9VTk9STV9QQUNLMzIsIEFWX1BJWF9GTVRfWDJSR0IxMCwgVktfSU1BR0VfQVNQRUNU X0NPTE9SX0JJVCwgMSwgMSwgMSwgeyBWS19GT1JNQVRfQTJSMTBHMTBCMTBfVU5PUk1fUEFDSzMy IH0gfSwKKyAgICB7IFZLX0ZPUk1BVF9BMkIxMEcxMFIxMF9VTk9STV9QQUNLMzIsIEFWX1BJWF9G TVRfWDJCR1IxMCwgVktfSU1BR0VfQVNQRUNUX0NPTE9SX0JJVCwgMSwgMSwgMSwgeyBWS19GT1JN QVRfQTJCMTBHMTBSMTBfVU5PUk1fUEFDSzMyIH0gfSwKKyAgICB7IFZLX0ZPUk1BVF9SMzJHMzJC MzJfU0ZMT0FULCAgICAgICAgIEFWX1BJWF9GTVRfUkdCRjMyLCAgVktfSU1BR0VfQVNQRUNUX0NP TE9SX0JJVCwgMSwgMSwgMSwgeyBWS19GT1JNQVRfUjMyRzMyQjMyX1NGTE9BVCAgICAgICAgIH0g fSwKKyAgICB7IFZLX0ZPUk1BVF9SMzJHMzJCMzJBMzJfU0ZMT0FULCAgICAgIEFWX1BJWF9GTVRf UkdCQUYzMiwgVktfSU1BR0VfQVNQRUNUX0NPTE9SX0JJVCwgMSwgMSwgMSwgeyBWS19GT1JNQVRf UjMyRzMyQjMyQTMyX1NGTE9BVCAgICAgIH0gfSwKKyAgICB7IFZLX0ZPUk1BVF9SMzJHMzJCMzJf VUlOVCwgICAgICAgICAgIEFWX1BJWF9GTVRfUkdCOTYsICAgVktfSU1BR0VfQVNQRUNUX0NPTE9S X0JJVCwgMSwgMSwgMSwgeyBWS19GT1JNQVRfUjMyRzMyQjMyX1VJTlQgICAgICAgICAgIH0gfSwK KyAgICB7IFZLX0ZPUk1BVF9SMzJHMzJCMzJBMzJfVUlOVCwgICAgICAgIEFWX1BJWF9GTVRfUkdC QTEyOCwgVktfSU1BR0VfQVNQRUNUX0NPTE9SX0JJVCwgMSwgMSwgMSwgeyBWS19GT1JNQVRfUjMy RzMyQjMyQTMyX1VJTlQgICAgICAgIH0gfSwKKworICAgIC8qIFBsYW5hciBSR0IgKi8KKyAgICB7 IFZLX0ZPUk1BVF9SOF9VTk9STSwgICBBVl9QSVhfRk1UX0dCUlAsICAgICBWS19JTUFHRV9BU1BF Q1RfQ09MT1JfQklULCAzLCAzLCAzLCB7IFZLX0ZPUk1BVF9SOF9VTk9STSwgICBWS19GT1JNQVRf UjhfVU5PUk0sICAgVktfRk9STUFUX1I4X1VOT1JNICAgfSB9LAorICAgIHsgVktfRk9STUFUX1Ix Nl9VTk9STSwgIEFWX1BJWF9GTVRfR0JSUDEwLCAgIFZLX0lNQUdFX0FTUEVDVF9DT0xPUl9CSVQs IDMsIDMsIDMsIHsgVktfRk9STUFUX1IxNl9VTk9STSwgIFZLX0ZPUk1BVF9SMTZfVU5PUk0sICBW S19GT1JNQVRfUjE2X1VOT1JNICB9IH0sCisgICAgeyBWS19GT1JNQVRfUjE2X1VOT1JNLCAgQVZf UElYX0ZNVF9HQlJQMTIsICAgVktfSU1BR0VfQVNQRUNUX0NPTE9SX0JJVCwgMywgMywgMywgeyBW S19GT1JNQVRfUjE2X1VOT1JNLCAgVktfRk9STUFUX1IxNl9VTk9STSwgIFZLX0ZPUk1BVF9SMTZf VU5PUk0gIH0gfSwKKyAgICB7IFZLX0ZPUk1BVF9SMTZfVU5PUk0sICBBVl9QSVhfRk1UX0dCUlAx NCwgICBWS19JTUFHRV9BU1BFQ1RfQ09MT1JfQklULCAzLCAzLCAzLCB7IFZLX0ZPUk1BVF9SMTZf VU5PUk0sICBWS19GT1JNQVRfUjE2X1VOT1JNLCAgVktfRk9STUFUX1IxNl9VTk9STSAgfSB9LAor ICAgIHsgVktfRk9STUFUX1IxNl9VTk9STSwgIEFWX1BJWF9GTVRfR0JSUDE2LCAgIFZLX0lNQUdF X0FTUEVDVF9DT0xPUl9CSVQsIDMsIDMsIDMsIHsgVktfRk9STUFUX1IxNl9VTk9STSwgIFZLX0ZP Uk1BVF9SMTZfVU5PUk0sICBWS19GT1JNQVRfUjE2X1VOT1JNICB9IH0sCisgICAgeyBWS19GT1JN QVRfUjMyX1NGTE9BVCwgQVZfUElYX0ZNVF9HQlJQRjMyLCAgVktfSU1BR0VfQVNQRUNUX0NPTE9S X0JJVCwgMywgMywgMywgeyBWS19GT1JNQVRfUjMyX1NGTE9BVCwgVktfRk9STUFUX1IzMl9TRkxP QVQsIFZLX0ZPUk1BVF9SMzJfU0ZMT0FUIH0gfSwKKworICAgIC8qIFBsYW5hciBSR0IgKyBBbHBo YSAqLworICAgIHsgVktfRk9STUFUX1I4X1VOT1JNLCAgIEFWX1BJWF9GTVRfR0JSQVAsICAgIFZL X0lNQUdFX0FTUEVDVF9DT0xPUl9CSVQsIDQsIDQsIDQsIHsgVktfRk9STUFUX1I4X1VOT1JNLCAg IFZLX0ZPUk1BVF9SOF9VTk9STSwgICBWS19GT1JNQVRfUjhfVU5PUk0sICAgVktfRk9STUFUX1I4 X1VOT1JNICAgfSB9LAorICAgIHsgVktfRk9STUFUX1IxNl9VTk9STSwgIEFWX1BJWF9GTVRfR0JS QVAxMCwgIFZLX0lNQUdFX0FTUEVDVF9DT0xPUl9CSVQsIDQsIDQsIDQsIHsgVktfRk9STUFUX1Ix Nl9VTk9STSwgIFZLX0ZPUk1BVF9SMTZfVU5PUk0sICBWS19GT1JNQVRfUjE2X1VOT1JNLCAgVktf Rk9STUFUX1IxNl9VTk9STSAgfSB9LAorICAgIHsgVktfRk9STUFUX1IxNl9VTk9STSwgIEFWX1BJ WF9GTVRfR0JSQVAxMiwgIFZLX0lNQUdFX0FTUEVDVF9DT0xPUl9CSVQsIDQsIDQsIDQsIHsgVktf Rk9STUFUX1IxNl9VTk9STSwgIFZLX0ZPUk1BVF9SMTZfVU5PUk0sICBWS19GT1JNQVRfUjE2X1VO T1JNLCAgVktfRk9STUFUX1IxNl9VTk9STSAgfSB9LAorICAgIHsgVktfRk9STUFUX1IxNl9VTk9S TSwgIEFWX1BJWF9GTVRfR0JSQVAxNCwgIFZLX0lNQUdFX0FTUEVDVF9DT0xPUl9CSVQsIDQsIDQs IDQsIHsgVktfRk9STUFUX1IxNl9VTk9STSwgIFZLX0ZPUk1BVF9SMTZfVU5PUk0sICBWS19GT1JN QVRfUjE2X1VOT1JNLCAgVktfRk9STUFUX1IxNl9VTk9STSAgfSB9LAorICAgIHsgVktfRk9STUFU X1IxNl9VTk9STSwgIEFWX1BJWF9GTVRfR0JSQVAxNiwgIFZLX0lNQUdFX0FTUEVDVF9DT0xPUl9C SVQsIDQsIDQsIDQsIHsgVktfRk9STUFUX1IxNl9VTk9STSwgIFZLX0ZPUk1BVF9SMTZfVU5PUk0s ICBWS19GT1JNQVRfUjE2X1VOT1JNLCAgVktfRk9STUFUX1IxNl9VTk9STSAgfSB9LAorICAgIHsg VktfRk9STUFUX1IzMl9VSU5ULCAgIEFWX1BJWF9GTVRfR0JSQVAzMiwgIFZLX0lNQUdFX0FTUEVD VF9DT0xPUl9CSVQsIDQsIDQsIDQsIHsgVktfRk9STUFUX1IzMl9VSU5ULCAgIFZLX0ZPUk1BVF9S MzJfVUlOVCwgICBWS19GT1JNQVRfUjMyX1VJTlQsICAgVktfRk9STUFUX1IzMl9VSU5UICAgfSB9 LAorICAgIHsgVktfRk9STUFUX1IzMl9TRkxPQVQsIEFWX1BJWF9GTVRfR0JSQVBGMzIsIFZLX0lN QUdFX0FTUEVDVF9DT0xPUl9CSVQsIDQsIDQsIDQsIHsgVktfRk9STUFUX1IzMl9TRkxPQVQsIFZL X0ZPUk1BVF9SMzJfU0ZMT0FULCBWS19GT1JNQVRfUjMyX1NGTE9BVCwgVktfRk9STUFUX1IzMl9T RkxPQVQgfSB9LAorCisgICAgLyogQmF5ZXIgKi8KKyAgICB7IFZLX0ZPUk1BVF9SMTZfVU5PUk0s IEFWX1BJWF9GTVRfQkFZRVJfUkdHQjE2LCBWS19JTUFHRV9BU1BFQ1RfQ09MT1JfQklULCAxLCAx LCAxLCB7IFZLX0ZPUk1BVF9SMTZfVU5PUk0gfSB9LAorCisgICAgLyogVHdvLXBsYW5lIDQyMCBZ VVYgYXQgOCwgMTAsIDEyIGFuZCAxNiBiaXRzICovCisgICAgeyBWS19GT1JNQVRfRzhfQjhSOF8y UExBTkVfNDIwX1VOT1JNLCAgICAgICAgICAgICAgICAgIEFWX1BJWF9GTVRfTlYxMiwgQVNQRUNU XzJQTEFORSwgMiwgMSwgMiwgeyBWS19GT1JNQVRfUjhfVU5PUk0sICBWS19GT1JNQVRfUjhHOF9V Tk9STSAgIH0gfSwKKyAgICB7IFZLX0ZPUk1BVF9HMTBYNl9CMTBYNlIxMFg2XzJQTEFORV80MjBf VU5PUk1fM1BBQ0sxNiwgQVZfUElYX0ZNVF9QMDEwLCBBU1BFQ1RfMlBMQU5FLCAyLCAxLCAyLCB7 IFZLX0ZPUk1BVF9SMTZfVU5PUk0sIFZLX0ZPUk1BVF9SMTZHMTZfVU5PUk0gfSB9LAorICAgIHsg VktfRk9STUFUX0cxMlg0X0IxMlg0UjEyWDRfMlBMQU5FXzQyMF9VTk9STV8zUEFDSzE2LCBBVl9Q SVhfRk1UX1AwMTIsIEFTUEVDVF8yUExBTkUsIDIsIDEsIDIsIHsgVktfRk9STUFUX1IxNl9VTk9S TSwgVktfRk9STUFUX1IxNkcxNl9VTk9STSB9IH0sCisgICAgeyBWS19GT1JNQVRfRzE2X0IxNlIx Nl8yUExBTkVfNDIwX1VOT1JNLCAgICAgICAgICAgICAgIEFWX1BJWF9GTVRfUDAxNiwgQVNQRUNU XzJQTEFORSwgMiwgMSwgMiwgeyBWS19GT1JNQVRfUjE2X1VOT1JNLCBWS19GT1JNQVRfUjE2RzE2 X1VOT1JNIH0gfSwKKworICAgIC8qIFR3by1wbGFuZSA0MjIgWVVWIGF0IDgsIDEwIGFuZCAxNiBi aXRzICovCisgICAgeyBWS19GT1JNQVRfRzhfQjhSOF8yUExBTkVfNDIyX1VOT1JNLCAgICAgICAg ICAgICAgICAgIEFWX1BJWF9GTVRfTlYxNiwgQVNQRUNUXzJQTEFORSwgMiwgMSwgMiwgeyBWS19G T1JNQVRfUjhfVU5PUk0sICBWS19GT1JNQVRfUjhHOF9VTk9STSAgIH0gfSwKKyAgICB7IFZLX0ZP Uk1BVF9HMTBYNl9CMTBYNlIxMFg2XzJQTEFORV80MjJfVU5PUk1fM1BBQ0sxNiwgQVZfUElYX0ZN VF9QMjEwLCBBU1BFQ1RfMlBMQU5FLCAyLCAxLCAyLCB7IFZLX0ZPUk1BVF9SMTZfVU5PUk0sIFZL X0ZPUk1BVF9SMTZHMTZfVU5PUk0gfSB9LAorICAgIHsgVktfRk9STUFUX0cxMlg0X0IxMlg0UjEy WDRfMlBMQU5FXzQyMl9VTk9STV8zUEFDSzE2LCBBVl9QSVhfRk1UX1AyMTIsIEFTUEVDVF8yUExB TkUsIDIsIDEsIDIsIHsgVktfRk9STUFUX1IxNl9VTk9STSwgVktfRk9STUFUX1IxNkcxNl9VTk9S TSB9IH0sCisgICAgeyBWS19GT1JNQVRfRzE2X0IxNlIxNl8yUExBTkVfNDIyX1VOT1JNLCAgICAg ICAgICAgICAgIEFWX1BJWF9GTVRfUDIxNiwgQVNQRUNUXzJQTEFORSwgMiwgMSwgMiwgeyBWS19G T1JNQVRfUjE2X1VOT1JNLCBWS19GT1JNQVRfUjE2RzE2X1VOT1JNIH0gfSwKKworICAgIC8qIFR3 by1wbGFuZSA0NDQgWVVWIGF0IDgsIDEwIGFuZCAxNiBiaXRzICovCisgICAgeyBWS19GT1JNQVRf RzhfQjhSOF8yUExBTkVfNDQ0X1VOT1JNLCAgICAgICAgICAgICAgICAgIEFWX1BJWF9GTVRfTlYy NCwgQVNQRUNUXzJQTEFORSwgMiwgMSwgMiwgeyBWS19GT1JNQVRfUjhfVU5PUk0sICBWS19GT1JN QVRfUjhHOF9VTk9STSAgIH0gfSwKKyAgICB7IFZLX0ZPUk1BVF9HMTBYNl9CMTBYNlIxMFg2XzJQ TEFORV80NDRfVU5PUk1fM1BBQ0sxNiwgQVZfUElYX0ZNVF9QNDEwLCBBU1BFQ1RfMlBMQU5FLCAy LCAxLCAyLCB7IFZLX0ZPUk1BVF9SMTZfVU5PUk0sIFZLX0ZPUk1BVF9SMTZHMTZfVU5PUk0gfSB9 LAorICAgIHsgVktfRk9STUFUX0cxMlg0X0IxMlg0UjEyWDRfMlBMQU5FXzQ0NF9VTk9STV8zUEFD SzE2LCBBVl9QSVhfRk1UX1A0MTIsIEFTUEVDVF8yUExBTkUsIDIsIDEsIDIsIHsgVktfRk9STUFU X1IxNl9VTk9STSwgVktfRk9STUFUX1IxNkcxNl9VTk9STSB9IH0sCisgICAgeyBWS19GT1JNQVRf RzE2X0IxNlIxNl8yUExBTkVfNDQ0X1VOT1JNLCAgICAgICAgICAgICAgIEFWX1BJWF9GTVRfUDQx NiwgQVNQRUNUXzJQTEFORSwgMiwgMSwgMiwgeyBWS19GT1JNQVRfUjE2X1VOT1JNLCBWS19GT1JN QVRfUjE2RzE2X1VOT1JNIH0gfSwKKworICAgIC8qIFRocmVlLXBsYW5lIDQyMCwgNDIyLCA0NDQg YXQgOCwgMTAsIDEyIGFuZCAxNiBiaXRzICovCisgICAgeyBWS19GT1JNQVRfRzhfQjhfUjhfM1BM QU5FXzQyMF9VTk9STSwgICAgQVZfUElYX0ZNVF9ZVVY0MjBQLCAgIEFTUEVDVF8zUExBTkUsIDMs IDEsIDMsIHsgVktfRk9STUFUX1I4X1VOT1JNLCAgVktfRk9STUFUX1I4X1VOT1JNLCAgVktfRk9S TUFUX1I4X1VOT1JNICB9IH0sCisgICAgeyBWS19GT1JNQVRfRzE2X0IxNl9SMTZfM1BMQU5FXzQy MF9VTk9STSwgQVZfUElYX0ZNVF9ZVVY0MjBQMTAsIEFTUEVDVF8zUExBTkUsIDMsIDEsIDMsIHsg VktfRk9STUFUX1IxNl9VTk9STSwgVktfRk9STUFUX1IxNl9VTk9STSwgVktfRk9STUFUX1IxNl9V Tk9STSB9IH0sCisgICAgeyBWS19GT1JNQVRfRzE2X0IxNl9SMTZfM1BMQU5FXzQyMF9VTk9STSwg QVZfUElYX0ZNVF9ZVVY0MjBQMTIsIEFTUEVDVF8zUExBTkUsIDMsIDEsIDMsIHsgVktfRk9STUFU X1IxNl9VTk9STSwgVktfRk9STUFUX1IxNl9VTk9STSwgVktfRk9STUFUX1IxNl9VTk9STSB9IH0s CisgICAgeyBWS19GT1JNQVRfRzE2X0IxNl9SMTZfM1BMQU5FXzQyMF9VTk9STSwgQVZfUElYX0ZN VF9ZVVY0MjBQMTYsIEFTUEVDVF8zUExBTkUsIDMsIDEsIDMsIHsgVktfRk9STUFUX1IxNl9VTk9S TSwgVktfRk9STUFUX1IxNl9VTk9STSwgVktfRk9STUFUX1IxNl9VTk9STSB9IH0sCisgICAgeyBW S19GT1JNQVRfRzhfQjhfUjhfM1BMQU5FXzQyMl9VTk9STSwgICAgQVZfUElYX0ZNVF9ZVVY0MjJQ LCAgIEFTUEVDVF8zUExBTkUsIDMsIDEsIDMsIHsgVktfRk9STUFUX1I4X1VOT1JNLCAgVktfRk9S TUFUX1I4X1VOT1JNLCAgVktfRk9STUFUX1I4X1VOT1JNICB9IH0sCisgICAgeyBWS19GT1JNQVRf RzE2X0IxNl9SMTZfM1BMQU5FXzQyMl9VTk9STSwgQVZfUElYX0ZNVF9ZVVY0MjJQMTAsIEFTUEVD VF8zUExBTkUsIDMsIDEsIDMsIHsgVktfRk9STUFUX1IxNl9VTk9STSwgVktfRk9STUFUX1IxNl9V Tk9STSwgVktfRk9STUFUX1IxNl9VTk9STSB9IH0sCisgICAgeyBWS19GT1JNQVRfRzE2X0IxNl9S MTZfM1BMQU5FXzQyMl9VTk9STSwgQVZfUElYX0ZNVF9ZVVY0MjJQMTIsIEFTUEVDVF8zUExBTkUs IDMsIDEsIDMsIHsgVktfRk9STUFUX1IxNl9VTk9STSwgVktfRk9STUFUX1IxNl9VTk9STSwgVktf Rk9STUFUX1IxNl9VTk9STSB9IH0sCisgICAgeyBWS19GT1JNQVRfRzE2X0IxNl9SMTZfM1BMQU5F XzQyMl9VTk9STSwgQVZfUElYX0ZNVF9ZVVY0MjJQMTYsIEFTUEVDVF8zUExBTkUsIDMsIDEsIDMs IHsgVktfRk9STUFUX1IxNl9VTk9STSwgVktfRk9STUFUX1IxNl9VTk9STSwgVktfRk9STUFUX1Ix Nl9VTk9STSB9IH0sCisgICAgeyBWS19GT1JNQVRfRzhfQjhfUjhfM1BMQU5FXzQ0NF9VTk9STSwg ICAgQVZfUElYX0ZNVF9ZVVY0NDRQLCAgIEFTUEVDVF8zUExBTkUsIDMsIDEsIDMsIHsgVktfRk9S TUFUX1I4X1VOT1JNLCAgVktfRk9STUFUX1I4X1VOT1JNLCAgVktfRk9STUFUX1I4X1VOT1JNICB9 IH0sCisgICAgeyBWS19GT1JNQVRfRzE2X0IxNl9SMTZfM1BMQU5FXzQ0NF9VTk9STSwgQVZfUElY X0ZNVF9ZVVY0NDRQMTAsIEFTUEVDVF8zUExBTkUsIDMsIDEsIDMsIHsgVktfRk9STUFUX1IxNl9V Tk9STSwgVktfRk9STUFUX1IxNl9VTk9STSwgVktfRk9STUFUX1IxNl9VTk9STSB9IH0sCisgICAg eyBWS19GT1JNQVRfRzE2X0IxNl9SMTZfM1BMQU5FXzQ0NF9VTk9STSwgQVZfUElYX0ZNVF9ZVVY0 NDRQMTIsIEFTUEVDVF8zUExBTkUsIDMsIDEsIDMsIHsgVktfRk9STUFUX1IxNl9VTk9STSwgVktf Rk9STUFUX1IxNl9VTk9STSwgVktfRk9STUFUX1IxNl9VTk9STSB9IH0sCisgICAgeyBWS19GT1JN QVRfRzE2X0IxNl9SMTZfM1BMQU5FXzQ0NF9VTk9STSwgQVZfUElYX0ZNVF9ZVVY0NDRQMTYsIEFT UEVDVF8zUExBTkUsIDMsIDEsIDMsIHsgVktfRk9STUFUX1IxNl9VTk9STSwgVktfRk9STUFUX1Ix Nl9VTk9STSwgVktfRk9STUFUX1IxNl9VTk9STSB9IH0sCisKKyAgICAvKiBTaW5nbGUgcGxhbmUg NDIyIGF0IDgsIDEwLCAxMiBhbmQgMTYgYml0cyAqLworICAgIHsgVktfRk9STUFUX0c4QjhHOFI4 XzQyMl9VTk9STSwgICAgICAgICAgICAgICAgICAgICBBVl9QSVhfRk1UX1lVWVY0MjIsIFZLX0lN QUdFX0FTUEVDVF9DT0xPUl9CSVQsIDEsIDEsIDEsIHsgVktfRk9STUFUX1I4RzhCOEE4X1VOT1JN ICAgICB9IH0sCisgICAgeyBWS19GT1JNQVRfQjhHOFI4RzhfNDIyX1VOT1JNLCAgICAgICAgICAg ICAgICAgICAgIEFWX1BJWF9GTVRfVVlWWTQyMiwgVktfSU1BR0VfQVNQRUNUX0NPTE9SX0JJVCwg MSwgMSwgMSwgeyBWS19GT1JNQVRfUjhHOEI4QThfVU5PUk0gICAgIH0gfSwKKyAgICB7IFZLX0ZP Uk1BVF9HMTBYNkIxMFg2RzEwWDZSMTBYNl80MjJfVU5PUk1fNFBBQ0sxNiwgQVZfUElYX0ZNVF9Z MjEwLCAgICBWS19JTUFHRV9BU1BFQ1RfQ09MT1JfQklULCAxLCAxLCAxLCB7IFZLX0ZPUk1BVF9S MTZHMTZCMTZBMTZfVU5PUk0gfSB9LAorICAgIHsgVktfRk9STUFUX0cxMlg0QjEyWDRHMTJYNFIx Mlg0XzQyMl9VTk9STV80UEFDSzE2LCBBVl9QSVhfRk1UX1kyMTIsICAgIFZLX0lNQUdFX0FTUEVD VF9DT0xPUl9CSVQsIDEsIDEsIDEsIHsgVktfRk9STUFUX1IxNkcxNkIxNkExNl9VTk9STSB9IH0s CisgICAgeyBWS19GT1JNQVRfRzE2QjE2RzE2UjE2XzQyMl9VTk9STSwgICAgICAgICAgICAgICAg IEFWX1BJWF9GTVRfWTIxNiwgICAgVktfSU1BR0VfQVNQRUNUX0NPTE9SX0JJVCwgMSwgMSwgMSwg eyBWS19GT1JNQVRfUjE2RzE2QjE2QTE2X1VOT1JNIH0gfSwKKworICAgIC8qIFBsYW5hciBZVVZB IDQyMCBhdCA4LCAxMCBhbmQgMTYgYml0cyAqLworICAgIHsgVktfRk9STUFUX1I4X1VOT1JNLCAg IEFWX1BJWF9GTVRfWVVWQTQyMFAsICAgIFZLX0lNQUdFX0FTUEVDVF9DT0xPUl9CSVQsIDQsIDQs IDQsIHsgVktfRk9STUFUX1I4X1VOT1JNLCAgIFZLX0ZPUk1BVF9SOF9VTk9STSwgICBWS19GT1JN QVRfUjhfVU5PUk0sICAgVktfRk9STUFUX1I4X1VOT1JNICAgfSB9LAorICAgIHsgVktfRk9STUFU X1IxNl9VTk9STSwgIEFWX1BJWF9GTVRfWVVWQTQyMFAxMCwgIFZLX0lNQUdFX0FTUEVDVF9DT0xP Ul9CSVQsIDQsIDQsIDQsIHsgVktfRk9STUFUX1IxNl9VTk9STSwgIFZLX0ZPUk1BVF9SMTZfVU5P Uk0sICBWS19GT1JNQVRfUjE2X1VOT1JNLCAgVktfRk9STUFUX1IxNl9VTk9STSAgfSB9LAorICAg IHsgVktfRk9STUFUX1IxNl9VTk9STSwgIEFWX1BJWF9GTVRfWVVWQTQyMFAxNiwgIFZLX0lNQUdF X0FTUEVDVF9DT0xPUl9CSVQsIDQsIDQsIDQsIHsgVktfRk9STUFUX1IxNl9VTk9STSwgIFZLX0ZP Uk1BVF9SMTZfVU5PUk0sICBWS19GT1JNQVRfUjE2X1VOT1JNLCAgVktfRk9STUFUX1IxNl9VTk9S TSAgfSB9LAorCisgICAgLyogUGxhbmFyIFlVVkEgNDIyIGF0IDgsIDEwLCAxMiBhbmQgMTYgYml0 cyAqLworICAgIHsgVktfRk9STUFUX1I4X1VOT1JNLCAgIEFWX1BJWF9GTVRfWVVWQTQyMlAsICAg IFZLX0lNQUdFX0FTUEVDVF9DT0xPUl9CSVQsIDQsIDQsIDQsIHsgVktfRk9STUFUX1I4X1VOT1JN LCAgIFZLX0ZPUk1BVF9SOF9VTk9STSwgICBWS19GT1JNQVRfUjhfVU5PUk0sICAgVktfRk9STUFU X1I4X1VOT1JNICAgfSB9LAorICAgIHsgVktfRk9STUFUX1IxNl9VTk9STSwgIEFWX1BJWF9GTVRf WVVWQTQyMlAxMCwgIFZLX0lNQUdFX0FTUEVDVF9DT0xPUl9CSVQsIDQsIDQsIDQsIHsgVktfRk9S TUFUX1IxNl9VTk9STSwgIFZLX0ZPUk1BVF9SMTZfVU5PUk0sICBWS19GT1JNQVRfUjE2X1VOT1JN LCAgVktfRk9STUFUX1IxNl9VTk9STSAgfSB9LAorICAgIHsgVktfRk9STUFUX1IxNl9VTk9STSwg IEFWX1BJWF9GTVRfWVVWQTQyMlAxMiwgIFZLX0lNQUdFX0FTUEVDVF9DT0xPUl9CSVQsIDQsIDQs IDQsIHsgVktfRk9STUFUX1IxNl9VTk9STSwgIFZLX0ZPUk1BVF9SMTZfVU5PUk0sICBWS19GT1JN QVRfUjE2X1VOT1JNLCAgVktfRk9STUFUX1IxNl9VTk9STSAgfSB9LAorICAgIHsgVktfRk9STUFU X1IxNl9VTk9STSwgIEFWX1BJWF9GTVRfWVVWQTQyMlAxNiwgIFZLX0lNQUdFX0FTUEVDVF9DT0xP Ul9CSVQsIDQsIDQsIDQsIHsgVktfRk9STUFUX1IxNl9VTk9STSwgIFZLX0ZPUk1BVF9SMTZfVU5P Uk0sICBWS19GT1JNQVRfUjE2X1VOT1JNLCAgVktfRk9STUFUX1IxNl9VTk9STSAgfSB9LAorCisg ICAgLyogUGxhbmFyIFlVVkEgNDQ0IGF0IDgsIDEwLCAxMiBhbmQgMTYgYml0cyAqLworICAgIHsg VktfRk9STUFUX1I4X1VOT1JNLCAgIEFWX1BJWF9GTVRfWVVWQTQ0NFAsICAgIFZLX0lNQUdFX0FT UEVDVF9DT0xPUl9CSVQsIDQsIDQsIDQsIHsgVktfRk9STUFUX1I4X1VOT1JNLCAgIFZLX0ZPUk1B VF9SOF9VTk9STSwgICBWS19GT1JNQVRfUjhfVU5PUk0sICAgVktfRk9STUFUX1I4X1VOT1JNICAg fSB9LAorICAgIHsgVktfRk9STUFUX1IxNl9VTk9STSwgIEFWX1BJWF9GTVRfWVVWQTQ0NFAxMCwg IFZLX0lNQUdFX0FTUEVDVF9DT0xPUl9CSVQsIDQsIDQsIDQsIHsgVktfRk9STUFUX1IxNl9VTk9S TSwgIFZLX0ZPUk1BVF9SMTZfVU5PUk0sICBWS19GT1JNQVRfUjE2X1VOT1JNLCAgVktfRk9STUFU X1IxNl9VTk9STSAgfSB9LAorICAgIHsgVktfRk9STUFUX1IxNl9VTk9STSwgIEFWX1BJWF9GTVRf WVVWQTQ0NFAxMiwgIFZLX0lNQUdFX0FTUEVDVF9DT0xPUl9CSVQsIDQsIDQsIDQsIHsgVktfRk9S TUFUX1IxNl9VTk9STSwgIFZLX0ZPUk1BVF9SMTZfVU5PUk0sICBWS19GT1JNQVRfUjE2X1VOT1JN LCAgVktfRk9STUFUX1IxNl9VTk9STSAgfSB9LAorICAgIHsgVktfRk9STUFUX1IxNl9VTk9STSwg IEFWX1BJWF9GTVRfWVVWQTQ0NFAxNiwgIFZLX0lNQUdFX0FTUEVDVF9DT0xPUl9CSVQsIDQsIDQs IDQsIHsgVktfRk9STUFUX1IxNl9VTk9STSwgIFZLX0ZPUk1BVF9SMTZfVU5PUk0sICBWS19GT1JN QVRfUjE2X1VOT1JNLCAgVktfRk9STUFUX1IxNl9VTk9STSAgfSB9LAorCisgICAgLyogU2luZ2xl IHBsYW5lIDQ0NCBhdCA4LCAxMCwgMTIgYW5kIDE2IGJpdHMgKi8KKyAgICB7IFZLX0ZPUk1BVF9C OEc4UjhBOF9VTk9STSwgICAgICAgICAgICAgICAgICAgICAgICAgQVZfUElYX0ZNVF9VWVZBLCAg ICBWS19JTUFHRV9BU1BFQ1RfQ09MT1JfQklULCAxLCAxLCAxLCB7IFZLX0ZPUk1BVF9COEc4UjhB OF9VTk9STSAgICAgfSB9LAorICAgIHsgVktfRk9STUFUX0EyUjEwRzEwQjEwX1VOT1JNX1BBQ0sz MiwgICAgICAgICAgICAgICBBVl9QSVhfRk1UX1hWMzAsICAgIFZLX0lNQUdFX0FTUEVDVF9DT0xP Ul9CSVQsIDEsIDEsIDEsIHsgVktfRk9STUFUX1IxNkcxNkIxNkExNl9VTk9STSB9IH0sCisgICAg eyBWS19GT1JNQVRfUjEyWDRHMTJYNEIxMlg0QTEyWDRfVU5PUk1fNFBBQ0sxNiwgICAgIEFWX1BJ WF9GTVRfWFYzNiwgICAgVktfSU1BR0VfQVNQRUNUX0NPTE9SX0JJVCwgMSwgMSwgMSwgeyBWS19G T1JNQVRfUjE2RzE2QjE2QTE2X1VOT1JNIH0gfSwKKyAgICB7IFZLX0ZPUk1BVF9SMTZHMTZCMTZB MTZfVU5PUk0sICAgICAgICAgICAgICAgICAgICAgQVZfUElYX0ZNVF9YVjQ4LCAgICBWS19JTUFH RV9BU1BFQ1RfQ09MT1JfQklULCAxLCAxLCAxLCB7IFZLX0ZPUk1BVF9SMTZHMTZCMTZBMTZfVU5P Uk0gfSB9LAorfTsKK3N0YXRpYyBjb25zdCBpbnQgbmJfdmtfZm9ybWF0c19saXN0ID0gRkZfQVJS QVlfRUxFTVModmtfZm9ybWF0c19saXN0KTsKKworY29uc3QgVmtGb3JtYXQgKmF2X3ZrZm10X2Zy b21fcGl4Zm10KGVudW0gQVZQaXhlbEZvcm1hdCBwKQoreworICAgIGZvciAoaW50IGkgPSAwOyBp IDwgbmJfdmtfZm9ybWF0c19saXN0OyBpKyspCisgICAgICAgIGlmICh2a19mb3JtYXRzX2xpc3Rb aV0ucGl4Zm10ID09IHApCisgICAgICAgICAgICByZXR1cm4gdmtfZm9ybWF0c19saXN0W2ldLmZh bGxiYWNrOworICAgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IEZGVmtG b3JtYXRFbnRyeSAqdmtfZmluZF9mb3JtYXRfZW50cnkoZW51bSBBVlBpeGVsRm9ybWF0IHApCit7 CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuYl92a19mb3JtYXRzX2xpc3Q7IGkrKykKKyAgICAg ICAgaWYgKHZrX2Zvcm1hdHNfbGlzdFtpXS5waXhmbXQgPT0gcCkKKyAgICAgICAgICAgIHJldHVy biAmdmtfZm9ybWF0c19saXN0W2ldOworICAgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50 IHZrZm10X2Zyb21fcGl4Zm10MihBVkhXRGV2aWNlQ29udGV4dCAqZGV2X2N0eCwgZW51bSBBVlBp eGVsRm9ybWF0IHAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWa0ltYWdlVGlsaW5n IHRpbGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZrRm9ybWF0IGZtdHNbQVZf TlVNX0RBVEFfUE9JTlRFUlNdLCAvKiBPdXRwdXQgZm9ybWF0IGxpc3QgKi8KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGludCAqbmJfaW1hZ2VzLCAgICAgICAgICAgICAgICAgICAgICAv KiBPdXRwdXQgbnVtYmVyIG9mIGltYWdlcyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgVmtJbWFnZUFzcGVjdEZsYWdzICphc3BlY3QsICAgICAgICAgIC8qIE91dHB1dCBhc3BlY3Qg Ki8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZrSW1hZ2VVc2FnZUZsYWdzICpzdXBw b3J0ZWRfdXNhZ2UsICAvKiBPdXRwdXQgc3VwcG9ydGVkIHVzYWdlICovCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpbnQgZGlzYWJsZV9tdWx0aXBsYW5lLCBpbnQgbmVlZF9zdG9yYWdl KQoreworICAgIFZ1bGthbkRldmljZVByaXYgKnByaXYgPSBkZXZfY3R4LT5od2N0eDsKKyAgICBB VlZ1bGthbkRldmljZUNvbnRleHQgKmh3Y3R4ID0gJnByaXYtPnA7CisgICAgRkZWdWxrYW5GdW5j dGlvbnMgKnZrID0gJnByaXYtPnZrY3R4LnZrZm47CisKKyAgICBjb25zdCBWa0Zvcm1hdEZlYXR1 cmVGbGFnQml0czIgYmFzaWNfZmxhZ3MgPSBWS19GT1JNQVRfRkVBVFVSRV8yX1NBTVBMRURfSU1B R0VfQklUIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBWS19GT1JNQVRfRkVBVFVSRV8yX1RSQU5TRkVSX1NSQ19CSVQgIHwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19GT1JNQVRfRkVBVFVSRV8yX1RS QU5TRkVSX0RTVF9CSVQ7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG5iX3ZrX2Zvcm1hdHNf bGlzdDsgaSsrKSB7CisgICAgICAgIGlmICh2a19mb3JtYXRzX2xpc3RbaV0ucGl4Zm10ID09IHAp IHsKKyAgICAgICAgICAgIFZrRm9ybWF0UHJvcGVydGllczMgZnByb3BzID0geworICAgICAgICAg ICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX0ZPUk1BVF9QUk9QRVJUSUVTXzMsCisg ICAgICAgICAgICB9OworICAgICAgICAgICAgVmtGb3JtYXRQcm9wZXJ0aWVzMiBwcm9wID0gewor ICAgICAgICAgICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX0ZPUk1BVF9QUk9QRVJU SUVTXzIsCisgICAgICAgICAgICAgICAgLnBOZXh0ID0gJmZwcm9wcywKKyAgICAgICAgICAgIH07 CisgICAgICAgICAgICBWa0Zvcm1hdEZlYXR1cmVGbGFnQml0czIgZmVhdHNfcHJpbWFyeSwgZmVh dHNfc2Vjb25kYXJ5OworICAgICAgICAgICAgaW50IGJhc2ljc19wcmltYXJ5ID0gMCwgYmFzaWNz X3NlY29uZGFyeSA9IDA7CisgICAgICAgICAgICBpbnQgc3RvcmFnZV9wcmltYXJ5ID0gMCwgc3Rv cmFnZV9zZWNvbmRhcnkgPSAwOworCisgICAgICAgICAgICB2ay0+R2V0UGh5c2ljYWxEZXZpY2VG b3JtYXRQcm9wZXJ0aWVzMihod2N0eC0+cGh5c19kZXYsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2a19mb3JtYXRzX2xpc3RbaV0udmtmLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByb3ApOwor CisgICAgICAgICAgICBmZWF0c19wcmltYXJ5ID0gdGlsaW5nID09IFZLX0lNQUdFX1RJTElOR19M SU5FQVIgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcHJvcHMubGluZWFyVGlsaW5n RmVhdHVyZXMgOiBmcHJvcHMub3B0aW1hbFRpbGluZ0ZlYXR1cmVzOworICAgICAgICAgICAgYmFz aWNzX3ByaW1hcnkgPSAoZmVhdHNfcHJpbWFyeSAmIGJhc2ljX2ZsYWdzKSA9PSBiYXNpY19mbGFn czsKKyAgICAgICAgICAgIHN0b3JhZ2VfcHJpbWFyeSA9ICEhKGZlYXRzX3ByaW1hcnkgJiBWS19G T1JNQVRfRkVBVFVSRV8yX1NUT1JBR0VfSU1BR0VfQklUKTsKKworICAgICAgICAgICAgaWYgKHZr X2Zvcm1hdHNfbGlzdFtpXS52a2YgIT0gdmtfZm9ybWF0c19saXN0W2ldLmZhbGxiYWNrWzBdKSB7 CisgICAgICAgICAgICAgICAgdmstPkdldFBoeXNpY2FsRGV2aWNlRm9ybWF0UHJvcGVydGllczIo aHdjdHgtPnBoeXNfZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHZrX2Zvcm1hdHNfbGlzdFtpXS5mYWxsYmFja1swXSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJvcCk7Cisg ICAgICAgICAgICAgICAgZmVhdHNfc2Vjb25kYXJ5ID0gdGlsaW5nID09IFZLX0lNQUdFX1RJTElO R19MSU5FQVIgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZwcm9wcy5saW5l YXJUaWxpbmdGZWF0dXJlcyA6IGZwcm9wcy5vcHRpbWFsVGlsaW5nRmVhdHVyZXM7CisgICAgICAg ICAgICAgICAgYmFzaWNzX3NlY29uZGFyeSA9IChmZWF0c19zZWNvbmRhcnkgJiBiYXNpY19mbGFn cykgPT0gYmFzaWNfZmxhZ3M7CisgICAgICAgICAgICAgICAgc3RvcmFnZV9zZWNvbmRhcnkgPSAh IShmZWF0c19zZWNvbmRhcnkgJiBWS19GT1JNQVRfRkVBVFVSRV8yX1NUT1JBR0VfSU1BR0VfQklU KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYmFzaWNzX3NlY29uZGFy eSA9IGJhc2ljc19wcmltYXJ5OworICAgICAgICAgICAgICAgIHN0b3JhZ2Vfc2Vjb25kYXJ5ID0g c3RvcmFnZV9wcmltYXJ5OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoYmFzaWNz X3ByaW1hcnkgJiYKKyAgICAgICAgICAgICAgICAhKGRpc2FibGVfbXVsdGlwbGFuZSAmJiB2a19m b3JtYXRzX2xpc3RbaV0udmtfcGxhbmVzID4gMSkgJiYKKyAgICAgICAgICAgICAgICAoIW5lZWRf c3RvcmFnZSB8fCAobmVlZF9zdG9yYWdlICYmIChzdG9yYWdlX3ByaW1hcnkgfCBzdG9yYWdlX3Nl Y29uZGFyeSkpKSkgeworICAgICAgICAgICAgICAgIGlmIChmbXRzKSB7CisgICAgICAgICAgICAg ICAgICAgIGlmICh2a19mb3JtYXRzX2xpc3RbaV0ubmJfaW1hZ2VzID4gMSkgeworICAgICAgICAg ICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCB2a19mb3JtYXRzX2xpc3RbaV0ubmJf aW1hZ2VzX2ZhbGxiYWNrOyBqKyspCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm10c1tq XSA9IHZrX2Zvcm1hdHNfbGlzdFtpXS5mYWxsYmFja1tqXTsKKyAgICAgICAgICAgICAgICAgICAg fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZtdHNbMF0gPSB2a19mb3JtYXRzX2xp c3RbaV0udmtmOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgICAgIGlmIChuYl9pbWFnZXMpCisgICAgICAgICAgICAgICAgICAgICpuYl9pbWFn ZXMgPSAxOworICAgICAgICAgICAgICAgIGlmIChhc3BlY3QpCisgICAgICAgICAgICAgICAgICAg ICphc3BlY3QgPSB2a19mb3JtYXRzX2xpc3RbaV0uYXNwZWN0OworICAgICAgICAgICAgICAgIGlm IChzdXBwb3J0ZWRfdXNhZ2UpCisgICAgICAgICAgICAgICAgICAgICpzdXBwb3J0ZWRfdXNhZ2Ug PSBmZl92a19tYXBfZmVhdHNfdG9fdXNhZ2UoZmVhdHNfcHJpbWFyeSkgfAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKChuZWVkX3N0b3JhZ2UgJiYgKHN0b3JhZ2VfcHJp bWFyeSB8IHN0b3JhZ2Vfc2Vjb25kYXJ5KSkgPworICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFZLX0lNQUdFX1VTQUdFX1NUT1JBR0VfQklUIDogMCk7CisgICAgICAgICAg ICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGJhc2ljc19zZWNvbmRhcnkg JiYKKyAgICAgICAgICAgICAgICAgICAgICAgKCFuZWVkX3N0b3JhZ2UgfHwgKG5lZWRfc3RvcmFn ZSAmJiBzdG9yYWdlX3NlY29uZGFyeSkpKSB7CisgICAgICAgICAgICAgICAgaWYgKGZtdHMpIHsK KyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCB2a19mb3JtYXRzX2xpc3Rb aV0ubmJfaW1hZ2VzX2ZhbGxiYWNrOyBqKyspCisgICAgICAgICAgICAgICAgICAgICAgICBmbXRz W2pdID0gdmtfZm9ybWF0c19saXN0W2ldLmZhbGxiYWNrW2pdOworICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgICAgICBpZiAobmJfaW1hZ2VzKQorICAgICAgICAgICAgICAgICAgICAqbmJf aW1hZ2VzID0gdmtfZm9ybWF0c19saXN0W2ldLm5iX2ltYWdlc19mYWxsYmFjazsKKyAgICAgICAg ICAgICAgICBpZiAoYXNwZWN0KQorICAgICAgICAgICAgICAgICAgICAqYXNwZWN0ID0gdmtfZm9y bWF0c19saXN0W2ldLmFzcGVjdDsKKyAgICAgICAgICAgICAgICBpZiAoc3VwcG9ydGVkX3VzYWdl KQorICAgICAgICAgICAgICAgICAgICAqc3VwcG9ydGVkX3VzYWdlID0gZmZfdmtfbWFwX2ZlYXRz X3RvX3VzYWdlKGZlYXRzX3NlY29uZGFyeSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7Cisg ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT1RT VVApOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIEFWRVJS T1IoRUlOVkFMKTsKK30KKworI2lmIENPTkZJR19WVUxLQU5fU1RBVElDCitWS0FQSV9BVFRSIFBG Tl92a1ZvaWRGdW5jdGlvbiBWS0FQSV9DQUxMIHZrR2V0SW5zdGFuY2VQcm9jQWRkcihWa0luc3Rh bmNlIGluc3RhbmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcE5hbWUpOworI2VuZGlmCisKK3N0YXRp YyBpbnQgbG9hZF9saWJ2dWxrYW4oQVZIV0RldmljZUNvbnRleHQgKmN0eCkKK3sKKyAgICBWdWxr YW5EZXZpY2VQcml2ICpwID0gY3R4LT5od2N0eDsKKyAgICBBVlZ1bGthbkRldmljZUNvbnRleHQg Kmh3Y3R4ID0gJnAtPnA7CisKKyNpZiBDT05GSUdfVlVMS0FOX1NUQVRJQworICAgIGh3Y3R4LT5n ZXRfcHJvY19hZGRyID0gdmtHZXRJbnN0YW5jZVByb2NBZGRyOworI2Vsc2UKKyAgICBzdGF0aWMg Y29uc3QgY2hhciAqbGliX25hbWVzW10gPSB7CisjaWYgZGVmaW5lZChfV0lOMzIpCisgICAgICAg ICJ2dWxrYW4tMS5kbGwiLAorI2VsaWYgZGVmaW5lZChfX0FQUExFX18pCisgICAgICAgICJsaWJ2 dWxrYW4uZHlsaWIiLAorICAgICAgICAibGlidnVsa2FuLjEuZHlsaWIiLAorICAgICAgICAibGli TW9sdGVuVksuZHlsaWIiLAorI2Vsc2UKKyAgICAgICAgImxpYnZ1bGthbi5zby4xIiwKKyAgICAg ICAgImxpYnZ1bGthbi5zbyIsCisjZW5kaWYKKyAgICB9OworCisgICAgZm9yIChpbnQgaSA9IDA7 IGkgPCBGRl9BUlJBWV9FTEVNUyhsaWJfbmFtZXMpOyBpKyspIHsKKyAgICAgICAgcC0+bGlidnVs a2FuID0gZGxvcGVuKGxpYl9uYW1lc1tpXSwgUlRMRF9OT1cgfCBSVExEX0xPQ0FMKTsKKyAgICAg ICAgaWYgKHAtPmxpYnZ1bGthbikKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlm ICghcC0+bGlidnVsa2FuKSB7CisgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIlVu YWJsZSB0byBvcGVuIHRoZSBsaWJ2dWxrYW4gbGlicmFyeSFcbiIpOworICAgICAgICByZXR1cm4g QVZFUlJPUl9VTktOT1dOOworICAgIH0KKworICAgIGh3Y3R4LT5nZXRfcHJvY19hZGRyID0gKFBG Tl92a0dldEluc3RhbmNlUHJvY0FkZHIpZGxzeW0ocC0+bGlidnVsa2FuLCAidmtHZXRJbnN0YW5j ZVByb2NBZGRyIik7CisjZW5kaWYgLyogQ09ORklHX1ZVTEtBTl9TVEFUSUMgKi8KKworICAgIHJl dHVybiAwOworfQorCit0eXBlZGVmIHN0cnVjdCBWdWxrYW5PcHRFeHRlbnNpb24geworICAgIGNv bnN0IGNoYXIgKm5hbWU7CisgICAgRkZWdWxrYW5FeHRlbnNpb25zIGZsYWc7Cit9IFZ1bGthbk9w dEV4dGVuc2lvbjsKKworc3RhdGljIGNvbnN0IFZ1bGthbk9wdEV4dGVuc2lvbiBvcHRpb25hbF9p bnN0YW5jZV9leHRzW10gPSB7CisgICAgeyBWS19FWFRfTEFZRVJfU0VUVElOR1NfRVhURU5TSU9O X05BTUUsICAgICAgICAgICAgICAgICAgIEZGX1ZLX0VYVF9OT19GTEFHICAgICAgICAgICAgICAg IH0sCisjaWZkZWYgX19BUFBMRV9fCisgICAgeyBWS19LSFJfUE9SVEFCSUxJVFlfRU5VTUVSQVRJ T05fRVhURU5TSU9OX05BTUUsICAgICAgICAgIEZGX1ZLX0VYVF9OT19GTEFHICAgICAgICAgICAg ICAgIH0sCisjZW5kaWYKK307CisKK3N0YXRpYyBjb25zdCBWdWxrYW5PcHRFeHRlbnNpb24gb3B0 aW9uYWxfZGV2aWNlX2V4dHNbXSA9IHsKKyAgICAvKiBNaXNjIG9yIHJlcXVpcmVkIGJ5IG90aGVy IGV4dGVuc2lvbnMgKi8KKyAgICB7IFZLX0tIUl9QT1JUQUJJTElUWV9TVUJTRVRfRVhURU5TSU9O X05BTUUsICAgICAgICAgICAgICAgRkZfVktfRVhUX1BPUlRBQklMSVRZX1NVQlNFVCAgICAgfSwK KyAgICB7IFZLX0tIUl9QVVNIX0RFU0NSSVBUT1JfRVhURU5TSU9OX05BTUUsICAgICAgICAgICAg ICAgICAgRkZfVktfRVhUX1BVU0hfREVTQ1JJUFRPUiAgICAgICAgfSwKKyAgICB7IFZLX0VYVF9E RVNDUklQVE9SX0JVRkZFUl9FWFRFTlNJT05fTkFNRSwgICAgICAgICAgICAgICAgRkZfVktfRVhU X0RFU0NSSVBUT1JfQlVGRkVSICAgICAgfSwKKyAgICB7IFZLX0VYVF9QSFlTSUNBTF9ERVZJQ0Vf RFJNX0VYVEVOU0lPTl9OQU1FLCAgICAgICAgICAgICAgRkZfVktfRVhUX0RFVklDRV9EUk0gICAg ICAgICAgICAgfSwKKyAgICB7IFZLX0VYVF9TSEFERVJfQVRPTUlDX0ZMT0FUX0VYVEVOU0lPTl9O QU1FLCAgICAgICAgICAgICAgRkZfVktfRVhUX0FUT01JQ19GTE9BVCAgICAgICAgICAgfSwKKyAg ICB7IFZLX0tIUl9DT09QRVJBVElWRV9NQVRSSVhfRVhURU5TSU9OX05BTUUsICAgICAgICAgICAg ICAgRkZfVktfRVhUX0NPT1BfTUFUUklYICAgICAgICAgICAgfSwKKyAgICB7IFZLX0VYVF9TSEFE RVJfT0JKRUNUX0VYVEVOU0lPTl9OQU1FLCAgICAgICAgICAgICAgICAgICAgRkZfVktfRVhUX1NI QURFUl9PQkpFQ1QgICAgICAgICAgfSwKKyAgICB7IFZLX0tIUl9TSEFERVJfU1VCR1JPVVBfUk9U QVRFX0VYVEVOU0lPTl9OQU1FLCAgICAgICAgICAgRkZfVktfRVhUX1NVQkdST1VQX1JPVEFURSAg ICAgICAgfSwKKyNpZmRlZiBWS19LSFJfc2hhZGVyX2V4cGVjdF9hc3N1bWUKKyAgICB7IFZLX0tI Ul9TSEFERVJfRVhQRUNUX0FTU1VNRV9FWFRFTlNJT05fTkFNRSwgICAgICAgICAgICAgRkZfVktf RVhUX0VYUEVDVF9BU1NVTUUgICAgICAgICAgfSwKKyNlbmRpZgorICAgIHsgVktfS0hSX1ZJREVP X01BSU5URU5BTkNFXzFfRVhURU5TSU9OX05BTUUsICAgICAgICAgICAgICBGRl9WS19FWFRfVklE RU9fTUFJTlRFTkFOQ0VfMSAgICB9LAorI2lmZGVmIFZLX0tIUl92aWRlb19tYWludGVuYW5jZTIK KyAgICB7IFZLX0tIUl9WSURFT19NQUlOVEVOQU5DRV8yX0VYVEVOU0lPTl9OQU1FLCAgICAgICAg ICAgICAgRkZfVktfRVhUX1ZJREVPX01BSU5URU5BTkNFXzIgICAgfSwKKyNlbmRpZgorCisgICAg LyogSW1wb3J0cy9leHBvcnRzICovCisgICAgeyBWS19LSFJfRVhURVJOQUxfTUVNT1JZX0ZEX0VY VEVOU0lPTl9OQU1FLCAgICAgICAgICAgICAgIEZGX1ZLX0VYVF9FWFRFUk5BTF9GRF9NRU1PUlkg ICAgIH0sCisgICAgeyBWS19FWFRfRVhURVJOQUxfTUVNT1JZX0RNQV9CVUZfRVhURU5TSU9OX05B TUUsICAgICAgICAgIEZGX1ZLX0VYVF9FWFRFUk5BTF9ETUFCVUZfTUVNT1JZIH0sCisgICAgeyBW S19FWFRfSU1BR0VfRFJNX0ZPUk1BVF9NT0RJRklFUl9FWFRFTlNJT05fTkFNRSwgICAgICAgIEZG X1ZLX0VYVF9EUk1fTU9ESUZJRVJfRkxBR1MgICAgIH0sCisgICAgeyBWS19LSFJfRVhURVJOQUxf U0VNQVBIT1JFX0ZEX0VYVEVOU0lPTl9OQU1FLCAgICAgICAgICAgIEZGX1ZLX0VYVF9FWFRFUk5B TF9GRF9TRU0gICAgICAgIH0sCisgICAgeyBWS19FWFRfRVhURVJOQUxfTUVNT1JZX0hPU1RfRVhU RU5TSU9OX05BTUUsICAgICAgICAgICAgIEZGX1ZLX0VYVF9FWFRFUk5BTF9IT1NUX01FTU9SWSAg IH0sCisjaWZkZWYgX1dJTjMyCisgICAgeyBWS19LSFJfRVhURVJOQUxfTUVNT1JZX1dJTjMyX0VY VEVOU0lPTl9OQU1FLCAgICAgICAgICAgIEZGX1ZLX0VYVF9FWFRFUk5BTF9XSU4zMl9NRU1PUlkg IH0sCisgICAgeyBWS19LSFJfRVhURVJOQUxfU0VNQVBIT1JFX1dJTjMyX0VYVEVOU0lPTl9OQU1F LCAgICAgICAgIEZGX1ZLX0VYVF9FWFRFUk5BTF9XSU4zMl9TRU0gICAgIH0sCisjZW5kaWYKKwor ICAgIC8qIFZpZGVvIGVuY29kaW5nL2RlY29kaW5nICovCisgICAgeyBWS19LSFJfVklERU9fUVVF VUVfRVhURU5TSU9OX05BTUUsICAgICAgICAgICAgICAgICAgICAgIEZGX1ZLX0VYVF9WSURFT19R VUVVRSAgICAgICAgICAgIH0sCisgICAgeyBWS19LSFJfVklERU9fRU5DT0RFX1FVRVVFX0VYVEVO U0lPTl9OQU1FLCAgICAgICAgICAgICAgIEZGX1ZLX0VYVF9WSURFT19FTkNPREVfUVVFVUUgICAg IH0sCisgICAgeyBWS19LSFJfVklERU9fREVDT0RFX1FVRVVFX0VYVEVOU0lPTl9OQU1FLCAgICAg ICAgICAgICAgIEZGX1ZLX0VYVF9WSURFT19ERUNPREVfUVVFVUUgICAgIH0sCisgICAgeyBWS19L SFJfVklERU9fRU5DT0RFX0gyNjRfRVhURU5TSU9OX05BTUUsICAgICAgICAgICAgICAgIEZGX1ZL X0VYVF9WSURFT19FTkNPREVfSDI2NCAgICAgIH0sCisgICAgeyBWS19LSFJfVklERU9fREVDT0RF X0gyNjRfRVhURU5TSU9OX05BTUUsICAgICAgICAgICAgICAgIEZGX1ZLX0VYVF9WSURFT19ERUNP REVfSDI2NCAgICAgIH0sCisgICAgeyBWS19LSFJfVklERU9fRU5DT0RFX0gyNjVfRVhURU5TSU9O X05BTUUsICAgICAgICAgICAgICAgIEZGX1ZLX0VYVF9WSURFT19FTkNPREVfSDI2NSAgICAgIH0s CisgICAgeyBWS19LSFJfVklERU9fREVDT0RFX0gyNjVfRVhURU5TSU9OX05BTUUsICAgICAgICAg ICAgICAgIEZGX1ZLX0VYVF9WSURFT19ERUNPREVfSDI2NSAgICAgIH0sCisjaWZkZWYgVktfS0hS X3ZpZGVvX2RlY29kZV92cDkKKyAgICB7IFZLX0tIUl9WSURFT19ERUNPREVfVlA5X0VYVEVOU0lP Tl9OQU1FLCAgICAgICAgICAgICAgICAgRkZfVktfRVhUX1ZJREVPX0RFQ09ERV9WUDkgICAgICAg fSwKKyNlbmRpZgorI2lmZGVmIFZLX0tIUl92aWRlb19lbmNvZGVfYXYxCisgICAgeyBWS19LSFJf VklERU9fRU5DT0RFX0FWMV9FWFRFTlNJT05fTkFNRSwgICAgICAgICAgICAgICAgIEZGX1ZLX0VY VF9WSURFT19FTkNPREVfQVYxICAgICAgIH0sCisjZW5kaWYKKyAgICB7IFZLX0tIUl9WSURFT19E RUNPREVfQVYxX0VYVEVOU0lPTl9OQU1FLCAgICAgICAgICAgICAgICAgRkZfVktfRVhUX1ZJREVP X0RFQ09ERV9BVjEgICAgICAgfSwKK307CisKK3N0YXRpYyBWa0Jvb2wzMiBWS0FQSV9DQUxMIHZr X2RiZ19jYWxsYmFjayhWa0RlYnVnVXRpbHNNZXNzYWdlU2V2ZXJpdHlGbGFnQml0c0VYVCBzZXZl cml0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWa0RlYnVn VXRpbHNNZXNzYWdlVHlwZUZsYWdzRVhUIG1lc3NhZ2VUeXBlLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFZrRGVidWdVdGlsc01lc3NlbmdlckNhbGxi YWNrRGF0YUVYVCAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB2b2lkICpwcml2KQoreworICAgIGludCBsOworICAgIEFWSFdEZXZpY2VDb250ZXh0ICpj dHggPSBwcml2OworCisgICAgLyogSWdub3JlIGZhbHNlIHBvc2l0aXZlcyAqLworICAgIHN3aXRj aCAoZGF0YS0+bWVzc2FnZUlkTnVtYmVyKSB7CisgICAgY2FzZSAweDA4Njk3NGMxOiAvKiBCZXN0 UHJhY3RpY2VzLXZrQ3JlYXRlQ29tbWFuZFBvb2wtY29tbWFuZC1idWZmZXItcmVzZXQgKi8KKyAg ICBjYXNlIDB4ZmQ5MjQ3N2E6IC8qIEJlc3RQcmFjdGljZXMtdmtBbGxvY2F0ZU1lbW9yeS1zbWFs bC1hbGxvY2F0aW9uICovCisgICAgY2FzZSAweDYxOGFiMWU3OiAvKiBWVUlELVZrSW1hZ2VWaWV3 Q3JlYXRlSW5mby11c2FnZS0wMjI3NSAqLworICAgIGNhc2UgMHgzMGY0YWM3MDogLyogVlVJRC1W a0ltYWdlQ3JlYXRlSW5mby1wTmV4dC0wNjgxMSAqLworICAgICAgICByZXR1cm4gVktfRkFMU0U7 CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgc3dpdGNoIChzZXZl cml0eSkgeworICAgIGNhc2UgVktfREVCVUdfVVRJTFNfTUVTU0FHRV9TRVZFUklUWV9WRVJCT1NF X0JJVF9FWFQ6IGwgPSBBVl9MT0dfVkVSQk9TRTsgYnJlYWs7CisgICAgY2FzZSBWS19ERUJVR19V VElMU19NRVNTQUdFX1NFVkVSSVRZX0lORk9fQklUX0VYVDogICAgbCA9IEFWX0xPR19JTkZPOyAg ICBicmVhazsKKyAgICBjYXNlIFZLX0RFQlVHX1VUSUxTX01FU1NBR0VfU0VWRVJJVFlfV0FSTklO R19CSVRfRVhUOiBsID0gQVZfTE9HX1dBUk5JTkc7IGJyZWFrOworICAgIGNhc2UgVktfREVCVUdf VVRJTFNfTUVTU0FHRV9TRVZFUklUWV9FUlJPUl9CSVRfRVhUOiAgIGwgPSBBVl9MT0dfRVJST1I7 ICAgYnJlYWs7CisgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbCA9IEFWX0xPR19ERUJVRzsgICBicmVhazsKKyAgICB9CisKKyAgICBhdl9s b2coY3R4LCBsLCAiJXNcbiIsIGRhdGEtPnBNZXNzYWdlKTsKKyAgICBmb3IgKGludCBpID0gMDsg aSA8IGRhdGEtPmNtZEJ1ZkxhYmVsQ291bnQ7IGkrKykKKyAgICAgICAgYXZfbG9nKGN0eCwgbCwg Ilx0JWk6ICVzXG4iLCBpLCBkYXRhLT5wQ21kQnVmTGFiZWxzW2ldLnBMYWJlbE5hbWUpOworCisg ICAgcmV0dXJuIFZLX0ZBTFNFOworfQorCisjZGVmaW5lIEFERF9WQUxfVE9fTElTVChsaXN0LCBj b3VudCwgdmFsKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRv IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgbGlzdCA9IGF2X3JlYWxsb2NfYXJyYXkobGlzdCwg c2l6ZW9mKCpsaXN0KSwgKytjb3VudCk7ICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmICgh bGlzdCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAorICAgICAgICAgICAgZXJyID0gQVZFUlJPUihFTk9NRU0pOyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGdvdG8gZmFp bDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBsaXN0W2NvdW50IC0gMV0gPSBh dl9zdHJkdXAodmFsKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg ICAgICAgaWYgKCFsaXN0W2NvdW50IC0gMV0pIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBlcnIgPSBBVkVSUk9SKEVOT01FTSk7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAg ICAgZ290byBmYWlsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSgwKQor CisjZGVmaW5lIFJFTEVBU0VfUFJPUFMocHJvcHMsIGNvdW50KSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmIChwcm9wcykgeyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAg ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBhdl9mcmVlKCh2b2lkICopKChwcm9wcylb aV0pKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBhdl9m cmVlKCh2b2lkICopcHJvcHMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKKyAgICB9CisKK2VudW0gRkZWdWxrYW5EZWJ1Z01vZGUgeworICAgIEZGX1ZV TEtBTl9ERUJVR19OT05FID0gMCwKKyAgICAvKiBTdGFuZGFyZCBHUFUtYXNzaXN0ZWQgdmFsaWRh dGlvbiAqLworICAgIEZGX1ZVTEtBTl9ERUJVR19WQUxJREFURSA9IDEsCisgICAgLyogUGFzc2Vz IHByaW50ZnMgaW4gc2hhZGVycyB0byB0aGUgZGVidWcgY2FsbGJhY2sgKi8KKyAgICBGRl9WVUxL QU5fREVCVUdfUFJJTlRGID0gMiwKKyAgICAvKiBFbmFibGVzIGV4dHJhIHByaW50b3V0cyAqLwor ICAgIEZGX1ZVTEtBTl9ERUJVR19QUkFDVElDRVMgPSAzLAorICAgIC8qIERpc2FibGVzIHZhbGlk YXRpb24gYnV0IGtlZXBzIHNoYWRlciBkZWJ1ZyBpbmZvIGFuZCBvcHRpbWl6YXRpb25zICovCisg ICAgRkZfVlVMS0FOX0RFQlVHX1BST0ZJTEUgPSA0LAorCisgICAgRkZfVlVMS0FOX0RFQlVHX05C LAorfTsKKworc3RhdGljIGludCBjaGVja19leHRlbnNpb25zKEFWSFdEZXZpY2VDb250ZXh0ICpj dHgsIGludCBkZXYsIEFWRGljdGlvbmFyeSAqb3B0cywKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBjaGFyICogY29uc3QgKipkc3QsIHVpbnQzMl90ICpudW0sCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZW51bSBGRlZ1bGthbkRlYnVnTW9kZSBkZWJ1Z19tb2RlKQorewor ICAgIGNvbnN0IGNoYXIgKnRzdHI7CisgICAgY29uc3QgY2hhciAqKmV4dGVuc2lvbl9uYW1lcyA9 IE5VTEw7CisgICAgVnVsa2FuRGV2aWNlUHJpdiAqcCA9IGN0eC0+aHdjdHg7CisgICAgQVZWdWxr YW5EZXZpY2VDb250ZXh0ICpod2N0eCA9ICZwLT5wOworICAgIEZGVnVsa2FuRnVuY3Rpb25zICp2 ayA9ICZwLT52a2N0eC52a2ZuOworICAgIGludCBlcnIgPSAwLCBmb3VuZCwgZXh0ZW5zaW9uc19m b3VuZCA9IDA7CisKKyAgICBjb25zdCBjaGFyICptb2Q7CisgICAgaW50IG9wdGlvbmFsX2V4dHNf bnVtOworICAgIHVpbnQzMl90IHN1cF9leHRfY291bnQ7CisgICAgY2hhciAqdXNlcl9leHRzX3N0 ciA9IE5VTEw7CisgICAgQVZEaWN0aW9uYXJ5RW50cnkgKnVzZXJfZXh0czsKKyAgICBWa0V4dGVu c2lvblByb3BlcnRpZXMgKnN1cF9leHQ7CisgICAgY29uc3QgVnVsa2FuT3B0RXh0ZW5zaW9uICpv cHRpb25hbF9leHRzOworCisgICAgaWYgKCFkZXYpIHsKKyAgICAgICAgbW9kID0gImluc3RhbmNl IjsKKyAgICAgICAgb3B0aW9uYWxfZXh0cyA9IG9wdGlvbmFsX2luc3RhbmNlX2V4dHM7CisgICAg ICAgIG9wdGlvbmFsX2V4dHNfbnVtID0gRkZfQVJSQVlfRUxFTVMob3B0aW9uYWxfaW5zdGFuY2Vf ZXh0cyk7CisgICAgICAgIHVzZXJfZXh0cyA9IGF2X2RpY3RfZ2V0KG9wdHMsICJpbnN0YW5jZV9l eHRlbnNpb25zIiwgTlVMTCwgMCk7CisgICAgICAgIGlmICh1c2VyX2V4dHMpIHsKKyAgICAgICAg ICAgIHVzZXJfZXh0c19zdHIgPSBhdl9zdHJkdXAodXNlcl9leHRzLT52YWx1ZSk7CisgICAgICAg ICAgICBpZiAoIXVzZXJfZXh0c19zdHIpIHsKKyAgICAgICAgICAgICAgICBlcnIgPSBBVkVSUk9S KEVOT01FTSk7CisgICAgICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICAgICAgfQorICAg ICAgICB9CisgICAgICAgIHZrLT5FbnVtZXJhdGVJbnN0YW5jZUV4dGVuc2lvblByb3BlcnRpZXMo TlVMTCwgJnN1cF9leHRfY291bnQsIE5VTEwpOworICAgICAgICBzdXBfZXh0ID0gYXZfbWFsbG9j X2FycmF5KHN1cF9leHRfY291bnQsIHNpemVvZihWa0V4dGVuc2lvblByb3BlcnRpZXMpKTsKKyAg ICAgICAgaWYgKCFzdXBfZXh0KQorICAgICAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsK KyAgICAgICAgdmstPkVudW1lcmF0ZUluc3RhbmNlRXh0ZW5zaW9uUHJvcGVydGllcyhOVUxMLCAm c3VwX2V4dF9jb3VudCwgc3VwX2V4dCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbW9kID0gImRl dmljZSI7CisgICAgICAgIG9wdGlvbmFsX2V4dHMgPSBvcHRpb25hbF9kZXZpY2VfZXh0czsKKyAg ICAgICAgb3B0aW9uYWxfZXh0c19udW0gPSBGRl9BUlJBWV9FTEVNUyhvcHRpb25hbF9kZXZpY2Vf ZXh0cyk7CisgICAgICAgIHVzZXJfZXh0cyA9IGF2X2RpY3RfZ2V0KG9wdHMsICJkZXZpY2VfZXh0 ZW5zaW9ucyIsIE5VTEwsIDApOworICAgICAgICBpZiAodXNlcl9leHRzKSB7CisgICAgICAgICAg ICB1c2VyX2V4dHNfc3RyID0gYXZfc3RyZHVwKHVzZXJfZXh0cy0+dmFsdWUpOworICAgICAgICAg ICAgaWYgKCF1c2VyX2V4dHNfc3RyKSB7CisgICAgICAgICAgICAgICAgZXJyID0gQVZFUlJPUihF Tk9NRU0pOworICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgICAgIH0KKyAgICAg ICAgfQorICAgICAgICB2ay0+RW51bWVyYXRlRGV2aWNlRXh0ZW5zaW9uUHJvcGVydGllcyhod2N0 eC0+cGh5c19kZXYsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICZzdXBfZXh0X2NvdW50LCBOVUxMKTsKKyAgICAgICAgc3VwX2V4dCA9IGF2X21h bGxvY19hcnJheShzdXBfZXh0X2NvdW50LCBzaXplb2YoVmtFeHRlbnNpb25Qcm9wZXJ0aWVzKSk7 CisgICAgICAgIGlmICghc3VwX2V4dCkKKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01F TSk7CisgICAgICAgIHZrLT5FbnVtZXJhdGVEZXZpY2VFeHRlbnNpb25Qcm9wZXJ0aWVzKGh3Y3R4 LT5waHlzX2RldiwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJnN1cF9leHRfY291bnQsIHN1cF9leHQpOworICAgIH0KKworICAgIGZvciAoaW50 IGkgPSAwOyBpIDwgb3B0aW9uYWxfZXh0c19udW07IGkrKykgeworICAgICAgICB0c3RyID0gb3B0 aW9uYWxfZXh0c1tpXS5uYW1lOworICAgICAgICBmb3VuZCA9IDA7CisKKyAgICAgICAgLyogSW50 ZWwgaGFzIGhhZCBhIGJhZCBkZXNjcmlwdG9yIGJ1ZmZlciBpbXBsZW1lbnRhdGlvbiBmb3IgYSB3 aGlsZSAqLworICAgICAgICBpZiAocC0+ZHByb3BzLmRyaXZlcklEID09IFZLX0RSSVZFUl9JRF9J TlRFTF9PUEVOX1NPVVJDRV9NRVNBICYmCisgICAgICAgICAgICAhc3RyY21wKHRzdHIsIFZLX0VY VF9ERVNDUklQVE9SX0JVRkZFUl9FWFRFTlNJT05fTkFNRSkpCisgICAgICAgICAgICBjb250aW51 ZTsKKworICAgICAgICBpZiAoZGV2ICYmCisgICAgICAgICAgICAoKGRlYnVnX21vZGUgPT0gRkZf VlVMS0FOX0RFQlVHX1ZBTElEQVRFKSB8fAorICAgICAgICAgICAgIChkZWJ1Z19tb2RlID09IEZG X1ZVTEtBTl9ERUJVR19QUklOVEYpIHx8CisgICAgICAgICAgICAgKGRlYnVnX21vZGUgPT0gRkZf VlVMS0FOX0RFQlVHX1BSQUNUSUNFUykpICYmCisgICAgICAgICAgICAhc3RyY21wKHRzdHIsIFZL X0VYVF9ERVNDUklQVE9SX0JVRkZFUl9FWFRFTlNJT05fTkFNRSkpIHsKKyAgICAgICAgICAgIGNv bnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBzdXBfZXh0 X2NvdW50OyBqKyspIHsKKyAgICAgICAgICAgIGlmICghc3RyY21wKHRzdHIsIHN1cF9leHRbal0u ZXh0ZW5zaW9uTmFtZSkpIHsKKyAgICAgICAgICAgICAgICBmb3VuZCA9IDE7CisgICAgICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFmb3Vu ZCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19W RVJCT1NFLCAiVXNpbmcgJXMgZXh0ZW5zaW9uICVzXG4iLCBtb2QsIHRzdHIpOworICAgICAgICBw LT52a2N0eC5leHRlbnNpb25zIHw9IG9wdGlvbmFsX2V4dHNbaV0uZmxhZzsKKyAgICAgICAgQURE X1ZBTF9UT19MSVNUKGV4dGVuc2lvbl9uYW1lcywgZXh0ZW5zaW9uc19mb3VuZCwgdHN0cik7Cisg ICAgfQorCisgICAgaWYgKCFkZXYgJiYKKyAgICAgICAgKChkZWJ1Z19tb2RlID09IEZGX1ZVTEtB Tl9ERUJVR19WQUxJREFURSkgfHwKKyAgICAgICAgIChkZWJ1Z19tb2RlID09IEZGX1ZVTEtBTl9E RUJVR19QUklOVEYpIHx8CisgICAgICAgICAoZGVidWdfbW9kZSA9PSBGRl9WVUxLQU5fREVCVUdf UFJBQ1RJQ0VTKSkpIHsKKyAgICAgICAgdHN0ciA9IFZLX0VYVF9ERUJVR19VVElMU19FWFRFTlNJ T05fTkFNRTsKKyAgICAgICAgZm91bmQgPSAwOworICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8 IHN1cF9leHRfY291bnQ7IGorKykgeworICAgICAgICAgICAgaWYgKCFzdHJjbXAodHN0ciwgc3Vw X2V4dFtqXS5leHRlbnNpb25OYW1lKSkgeworICAgICAgICAgICAgICAgIGZvdW5kID0gMTsKKyAg ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBp ZiAoZm91bmQpIHsKKyAgICAgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19WRVJCT1NFLCAiVXNp bmcgJXMgZXh0ZW5zaW9uICVzXG4iLCBtb2QsIHRzdHIpOworICAgICAgICAgICAgQUREX1ZBTF9U T19MSVNUKGV4dGVuc2lvbl9uYW1lcywgZXh0ZW5zaW9uc19mb3VuZCwgdHN0cik7CisgICAgICAg IH0gZWxzZSB7CisgICAgICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJEZWJ1ZyBl eHRlbnNpb24gXCIlc1wiIG5vdCBmb3VuZCFcbiIsCisgICAgICAgICAgICAgICAgICAgdHN0cik7 CisgICAgICAgICAgICBlcnIgPSBBVkVSUk9SKEVJTlZBTCk7CisgICAgICAgICAgICBnb3RvIGZh aWw7CisgICAgICAgIH0KKyAgICB9CisKKyNpZmRlZiBWS19LSFJfc2hhZGVyX3JlbGF4ZWRfZXh0 ZW5kZWRfaW5zdHJ1Y3Rpb24KKyAgICBpZiAoKChkZWJ1Z19tb2RlID09IEZGX1ZVTEtBTl9ERUJV R19QUklOVEYpIHx8CisgICAgICAgICAoZGVidWdfbW9kZSA9PSBGRl9WVUxLQU5fREVCVUdfUFJP RklMRSkpICYmIGRldikgeworICAgICAgICB0c3RyID0gVktfS0hSX1NIQURFUl9SRUxBWEVEX0VY VEVOREVEX0lOU1RSVUNUSU9OX0VYVEVOU0lPTl9OQU1FOworICAgICAgICBmb3VuZCA9IDA7Cisg ICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgc3VwX2V4dF9jb3VudDsgaisrKSB7CisgICAgICAg ICAgICBpZiAoIXN0cmNtcCh0c3RyLCBzdXBfZXh0W2pdLmV4dGVuc2lvbk5hbWUpKSB7CisgICAg ICAgICAgICAgICAgZm91bmQgPSAxOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg ICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChmb3VuZCkgeworICAgICAgICAgICAgYXZfbG9n KGN0eCwgQVZfTE9HX1ZFUkJPU0UsICJVc2luZyAlcyBleHRlbnNpb24gJXNcbiIsIG1vZCwgdHN0 cik7CisgICAgICAgICAgICBBRERfVkFMX1RPX0xJU1QoZXh0ZW5zaW9uX25hbWVzLCBleHRlbnNp b25zX2ZvdW5kLCB0c3RyKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGF2X2xvZyhj dHgsIEFWX0xPR19FUlJPUiwgIkRlYnVnX3ByaW50Zi9wcm9maWxlIGVuYWJsZWQsIGJ1dCBleHRl bnNpb24gXCIlc1wiIG5vdCBmb3VuZCFcbiIsCisgICAgICAgICAgICAgICAgICAgdHN0cik7Cisg ICAgICAgICAgICBlcnIgPSBBVkVSUk9SKEVJTlZBTCk7CisgICAgICAgICAgICBnb3RvIGZhaWw7 CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKworICAgIGlmICh1c2VyX2V4dHNfc3RyKSB7Cisg ICAgICAgIGNoYXIgKnNhdmUsICp0b2tlbiA9IGF2X3N0cnRvayh1c2VyX2V4dHNfc3RyLCAiKyIs ICZzYXZlKTsKKyAgICAgICAgd2hpbGUgKHRva2VuKSB7CisgICAgICAgICAgICBmb3VuZCA9IDA7 CisgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHN1cF9leHRfY291bnQ7IGorKykgewor ICAgICAgICAgICAgICAgIGlmICghc3RyY21wKHRva2VuLCBzdXBfZXh0W2pdLmV4dGVuc2lvbk5h bWUpKSB7CisgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gMTsKKyAgICAgICAgICAgICAgICAg ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAg aWYgKGZvdW5kKSB7CisgICAgICAgICAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX1ZFUkJPU0Us ICJVc2luZyAlcyBleHRlbnNpb24gXCIlc1wiXG4iLCBtb2QsIHRva2VuKTsKKyAgICAgICAgICAg ICAgICBBRERfVkFMX1RPX0xJU1QoZXh0ZW5zaW9uX25hbWVzLCBleHRlbnNpb25zX2ZvdW5kLCB0 b2tlbik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGF2X2xvZyhjdHgs IEFWX0xPR19XQVJOSU5HLCAiJXMgZXh0ZW5zaW9uIFwiJXNcIiBub3QgZm91bmQsIGV4Y2x1ZGlu Zy5cbiIsCisgICAgICAgICAgICAgICAgICAgICAgIG1vZCwgdG9rZW4pOworICAgICAgICAgICAg fQorICAgICAgICAgICAgdG9rZW4gPSBhdl9zdHJ0b2soTlVMTCwgIisiLCAmc2F2ZSk7CisgICAg ICAgIH0KKyAgICB9CisKKyAgICAqZHN0ID0gZXh0ZW5zaW9uX25hbWVzOworICAgICpudW0gPSBl eHRlbnNpb25zX2ZvdW5kOworCisgICAgYXZfZnJlZSh1c2VyX2V4dHNfc3RyKTsKKyAgICBhdl9m cmVlKHN1cF9leHQpOworICAgIHJldHVybiAwOworCitmYWlsOgorICAgIFJFTEVBU0VfUFJPUFMo ZXh0ZW5zaW9uX25hbWVzLCBleHRlbnNpb25zX2ZvdW5kKTsKKyAgICBhdl9mcmVlKHVzZXJfZXh0 c19zdHIpOworICAgIGF2X2ZyZWUoc3VwX2V4dCk7CisgICAgcmV0dXJuIGVycjsKK30KKworc3Rh dGljIGludCBjaGVja19sYXllcnMoQVZIV0RldmljZUNvbnRleHQgKmN0eCwgQVZEaWN0aW9uYXJ5 ICpvcHRzLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqIGNvbnN0ICoqZHN0 LCB1aW50MzJfdCAqbnVtLAorICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBGRlZ1bGthbkRl YnVnTW9kZSAqZGVidWdfbW9kZSkKK3sKKyAgICBpbnQgZXJyID0gMDsKKyAgICBWdWxrYW5EZXZp Y2VQcml2ICpwcml2ID0gY3R4LT5od2N0eDsKKyAgICBGRlZ1bGthbkZ1bmN0aW9ucyAqdmsgPSAm cHJpdi0+dmtjdHgudmtmbjsKKworICAgIHN0YXRpYyBjb25zdCBjaGFyIGxheWVyX3N0YW5kYXJk X3ZhbGlkYXRpb25bXSA9IHsgIlZLX0xBWUVSX0tIUk9OT1NfdmFsaWRhdGlvbiIgfTsKKyAgICBp bnQgbGF5ZXJfc3RhbmRhcmRfdmFsaWRhdGlvbl9mb3VuZCA9IDA7CisKKyAgICB1aW50MzJfdCBz dXBfbGF5ZXJfY291bnQ7CisgICAgVmtMYXllclByb3BlcnRpZXMgKnN1cF9sYXllcnM7CisKKyAg ICBBVkRpY3Rpb25hcnlFbnRyeSAqdXNlcl9sYXllcnMgPSBhdl9kaWN0X2dldChvcHRzLCAibGF5 ZXJzIiwgTlVMTCwgMCk7CisgICAgY2hhciAqdXNlcl9sYXllcnNfc3RyID0gTlVMTDsKKyAgICBj aGFyICpzYXZlLCAqdG9rZW47CisKKyAgICBjb25zdCBjaGFyICoqZW5hYmxlZF9sYXllcnMgPSBO VUxMOworICAgIHVpbnQzMl90IGVuYWJsZWRfbGF5ZXJzX2NvdW50ID0gMDsKKworICAgIEFWRGlj dGlvbmFyeUVudHJ5ICpkZWJ1Z19vcHQgPSBhdl9kaWN0X2dldChvcHRzLCAiZGVidWciLCBOVUxM LCAwKTsKKyAgICBlbnVtIEZGVnVsa2FuRGVidWdNb2RlIG1vZGU7CisKKyAgICAqZGVidWdfbW9k ZSA9IG1vZGUgPSBGRl9WVUxLQU5fREVCVUdfTk9ORTsKKworICAgIC8qIEdldCBhIGxpc3Qgb2Yg YWxsIGxheWVycyAqLworICAgIHZrLT5FbnVtZXJhdGVJbnN0YW5jZUxheWVyUHJvcGVydGllcygm c3VwX2xheWVyX2NvdW50LCBOVUxMKTsKKyAgICBzdXBfbGF5ZXJzID0gYXZfbWFsbG9jX2FycmF5 KHN1cF9sYXllcl9jb3VudCwgc2l6ZW9mKFZrTGF5ZXJQcm9wZXJ0aWVzKSk7CisgICAgaWYgKCFz dXBfbGF5ZXJzKQorICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOworICAgIHZrLT5FbnVt ZXJhdGVJbnN0YW5jZUxheWVyUHJvcGVydGllcygmc3VwX2xheWVyX2NvdW50LCBzdXBfbGF5ZXJz KTsKKworICAgIGF2X2xvZyhjdHgsIEFWX0xPR19WRVJCT1NFLCAiU3VwcG9ydGVkIGxheWVyczpc biIpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3VwX2xheWVyX2NvdW50OyBpKyspCisgICAg ICAgIGF2X2xvZyhjdHgsIEFWX0xPR19WRVJCT1NFLCAiXHQlc1xuIiwgc3VwX2xheWVyc1tpXS5s YXllck5hbWUpOworCisgICAgLyogSWYgbm8gdXNlciBsYXllcnMgb3IgZGVidWcgbGF5ZXJzIGFy ZSBnaXZlbiwgcmV0dXJuICovCisgICAgaWYgKCFkZWJ1Z19vcHQgJiYgIXVzZXJfbGF5ZXJzKQor ICAgICAgICBnb3RvIGVuZDsKKworICAgIC8qIENoZWNrIGZvciBhbnkgcHJvcGVybHkgc3VwcG9y dGVkIHZhbGlkYXRpb24gbGF5ZXIgKi8KKyAgICBpZiAoZGVidWdfb3B0KSB7CisgICAgICAgIGlm ICghc3RyY21wKGRlYnVnX29wdC0+dmFsdWUsICJwcm9maWxlIikpIHsKKyAgICAgICAgICAgIG1v ZGUgPSBGRl9WVUxLQU5fREVCVUdfUFJPRklMRTsKKyAgICAgICAgfSBlbHNlIGlmICghc3RyY21w KGRlYnVnX29wdC0+dmFsdWUsICJwcmludGYiKSkgeworICAgICAgICAgICAgbW9kZSA9IEZGX1ZV TEtBTl9ERUJVR19QUklOVEY7CisgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcChkZWJ1Z19vcHQt PnZhbHVlLCAidmFsaWRhdGUiKSkgeworICAgICAgICAgICAgbW9kZSA9IEZGX1ZVTEtBTl9ERUJV R19WQUxJREFURTsKKyAgICAgICAgfSBlbHNlIGlmICghc3RyY21wKGRlYnVnX29wdC0+dmFsdWUs ICJwcmFjdGljZXMiKSkgeworICAgICAgICAgICAgbW9kZSA9IEZGX1ZVTEtBTl9ERUJVR19QUkFD VElDRVM7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBjaGFyICplbmRfcHRyID0gTlVM TDsKKyAgICAgICAgICAgIGludCBpZHggPSBzdHJ0b2woZGVidWdfb3B0LT52YWx1ZSwgJmVuZF9w dHIsIDEwKTsKKyAgICAgICAgICAgIGlmIChlbmRfcHRyID09IGRlYnVnX29wdC0+dmFsdWUgfHwg ZW5kX3B0clswXSAhPSAnXDAnIHx8CisgICAgICAgICAgICAgICAgaWR4IDwgMCB8fCBpZHggPj0g RkZfVlVMS0FOX0RFQlVHX05CKSB7CisgICAgICAgICAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9H X0VSUk9SLCAiSW52YWxpZCBkZWJ1Z2dpbmcgbW9kZSBcIiVzXCJcbiIsCisgICAgICAgICAgICAg ICAgICAgICAgIGRlYnVnX29wdC0+dmFsdWUpOworICAgICAgICAgICAgICAgIGVyciA9IEFWRVJS T1IoRUlOVkFMKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVuZDsKKyAgICAgICAgICAgIH0KKyAg ICAgICAgICAgIG1vZGUgPSBpZHg7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBJZiBtb2Rl IGlzIFZBTElEQVRFIG9yIFBSSU5URiwgdHJ5IHRvIGZpbmQgdGhlIHN0YW5kYXJkIHZhbGlkYXRp b24gbGF5ZXIgZXh0ZW5zaW9uICovCisgICAgaWYgKChtb2RlID09IEZGX1ZVTEtBTl9ERUJVR19W QUxJREFURSkgfHwKKyAgICAgICAgKG1vZGUgPT0gRkZfVlVMS0FOX0RFQlVHX1BSSU5URikgfHwK KyAgICAgICAgKG1vZGUgPT0gRkZfVlVMS0FOX0RFQlVHX1BSQUNUSUNFUykpIHsKKyAgICAgICAg Zm9yIChpbnQgaSA9IDA7IGkgPCBzdXBfbGF5ZXJfY291bnQ7IGkrKykgeworICAgICAgICAgICAg aWYgKCFzdHJjbXAobGF5ZXJfc3RhbmRhcmRfdmFsaWRhdGlvbiwgc3VwX2xheWVyc1tpXS5sYXll ck5hbWUpKSB7CisgICAgICAgICAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX1ZFUkJPU0UsICJT dGFuZGFyZCB2YWxpZGF0aW9uIGxheWVyICVzIGlzIGVuYWJsZWRcbiIsCisgICAgICAgICAgICAg ICAgICAgICAgIGxheWVyX3N0YW5kYXJkX3ZhbGlkYXRpb24pOworICAgICAgICAgICAgICAgIEFE RF9WQUxfVE9fTElTVChlbmFibGVkX2xheWVycywgZW5hYmxlZF9sYXllcnNfY291bnQsIGxheWVy X3N0YW5kYXJkX3ZhbGlkYXRpb24pOworICAgICAgICAgICAgICAgICpkZWJ1Z19tb2RlID0gbW9k ZTsKKyAgICAgICAgICAgICAgICBsYXllcl9zdGFuZGFyZF92YWxpZGF0aW9uX2ZvdW5kID0gMTsK KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg ICBpZiAoIWxheWVyX3N0YW5kYXJkX3ZhbGlkYXRpb25fZm91bmQpIHsKKyAgICAgICAgICAgIGF2 X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwKKyAgICAgICAgICAgICAgICAgICAiVmFsaWRhdGlvbiBM YXllciBcIiVzXCIgbm90IHN1cHBvcnRlZFxuIiwgbGF5ZXJfc3RhbmRhcmRfdmFsaWRhdGlvbik7 CisgICAgICAgICAgICBlcnIgPSBBVkVSUk9SKEVOT1RTVVApOworICAgICAgICAgICAgZ290byBl bmQ7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKG1vZGUgPT0gRkZfVlVMS0FOX0RFQlVHX1BS T0ZJTEUpIHsKKyAgICAgICAgKmRlYnVnX21vZGUgPSBtb2RlOworICAgIH0KKworICAgIC8qIFBy b2Nlc3MgYW55IGN1c3RvbSBsYXllcnMgZW5hYmxlZCAqLworICAgIGlmICh1c2VyX2xheWVycykg eworICAgICAgICBpbnQgZm91bmQ7CisKKyAgICAgICAgdXNlcl9sYXllcnNfc3RyID0gYXZfc3Ry ZHVwKHVzZXJfbGF5ZXJzLT52YWx1ZSk7CisgICAgICAgIGlmICghdXNlcl9sYXllcnNfc3RyKSB7 CisgICAgICAgICAgICBlcnIgPSBBVkVSUk9SKEVOT01FTSk7CisgICAgICAgICAgICBnb3RvIGZh aWw7CisgICAgICAgIH0KKworICAgICAgICB0b2tlbiA9IGF2X3N0cnRvayh1c2VyX2xheWVyc19z dHIsICIrIiwgJnNhdmUpOworICAgICAgICB3aGlsZSAodG9rZW4pIHsKKyAgICAgICAgICAgIGZv dW5kID0gMDsKKworICAgICAgICAgICAgLyogSWYgZGVidWc9MS8yIHdhcyBzcGVjaWZpZWQgYXMg YW4gb3B0aW9uLCBza2lwIHRoaXMgbGF5ZXIgKi8KKyAgICAgICAgICAgIGlmICghc3RyY21wKGxh eWVyX3N0YW5kYXJkX3ZhbGlkYXRpb24sIHRva2VuKSAmJiBsYXllcl9zdGFuZGFyZF92YWxpZGF0 aW9uX2ZvdW5kKSB7CisgICAgICAgICAgICAgICAgdG9rZW4gPSBhdl9zdHJ0b2soTlVMTCwgIisi LCAmc2F2ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAg ICAgICAgIC8qIFRyeSB0byBmaW5kIHRoZSBsYXllciBpbiB0aGUgbGlzdCBvZiBzdXBwb3J0ZWQg bGF5ZXJzICovCisgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHN1cF9sYXllcl9jb3Vu dDsgaisrKSB7CisgICAgICAgICAgICAgICAgaWYgKCFzdHJjbXAodG9rZW4sIHN1cF9sYXllcnNb al0ubGF5ZXJOYW1lKSkgeworICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IDE7CisgICAgICAg ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKwor ICAgICAgICAgICAgaWYgKGZvdW5kKSB7CisgICAgICAgICAgICAgICAgYXZfbG9nKGN0eCwgQVZf TE9HX1ZFUkJPU0UsICJVc2luZyBsYXllcjogJXNcbiIsIHRva2VuKTsKKyAgICAgICAgICAgICAg ICBBRERfVkFMX1RPX0xJU1QoZW5hYmxlZF9sYXllcnMsIGVuYWJsZWRfbGF5ZXJzX2NvdW50LCB0 b2tlbik7CisKKyAgICAgICAgICAgICAgICAvKiBJZiBkZWJ1ZyB3YXMgbm90IHNldCBhcyBhbiBv cHRpb24sIGZvcmNlIGl0ICovCisgICAgICAgICAgICAgICAgaWYgKCFzdHJjbXAobGF5ZXJfc3Rh bmRhcmRfdmFsaWRhdGlvbiwgdG9rZW4pKQorICAgICAgICAgICAgICAgICAgICAqZGVidWdfbW9k ZSA9IEZGX1ZVTEtBTl9ERUJVR19WQUxJREFURTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg ICAgICAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLAorICAgICAgICAgICAgICAgICAg ICAgICAiTGF5ZXIgXCIlc1wiIG5vdCBzdXBwb3J0ZWRcbiIsIHRva2VuKTsKKyAgICAgICAgICAg ICAgICBlcnIgPSBBVkVSUk9SKEVJTlZBTCk7CisgICAgICAgICAgICAgICAgZ290byBlbmQ7Cisg ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHRva2VuID0gYXZfc3RydG9rKE5VTEwsICIrIiwg JnNhdmUpOworICAgICAgICB9CisgICAgfQorCitmYWlsOgorZW5kOgorICAgIGF2X2ZyZWUoc3Vw X2xheWVycyk7CisgICAgYXZfZnJlZSh1c2VyX2xheWVyc19zdHIpOworCisgICAgaWYgKGVyciA8 IDApIHsKKyAgICAgICAgUkVMRUFTRV9QUk9QUyhlbmFibGVkX2xheWVycywgZW5hYmxlZF9sYXll cnNfY291bnQpOworICAgIH0gZWxzZSB7CisgICAgICAgICpkc3QgPSBlbmFibGVkX2xheWVyczsK KyAgICAgICAgKm51bSA9IGVuYWJsZWRfbGF5ZXJzX2NvdW50OworICAgIH0KKworICAgIHJldHVy biBlcnI7Cit9CisKKy8qIENyZWF0ZXMgYSBWa0luc3RhbmNlICovCitzdGF0aWMgaW50IGNyZWF0 ZV9pbnN0YW5jZShBVkhXRGV2aWNlQ29udGV4dCAqY3R4LCBBVkRpY3Rpb25hcnkgKm9wdHMsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIEZGVnVsa2FuRGVidWdNb2RlICpkZWJ1Z19t b2RlKQoreworICAgIGludCBlcnIgPSAwOworICAgIFZrUmVzdWx0IHJldDsKKyAgICBWdWxrYW5E ZXZpY2VQcml2ICpwID0gY3R4LT5od2N0eDsKKyAgICBBVlZ1bGthbkRldmljZUNvbnRleHQgKmh3 Y3R4ID0gJnAtPnA7CisgICAgRkZWdWxrYW5GdW5jdGlvbnMgKnZrID0gJnAtPnZrY3R4LnZrZm47 CisgICAgVmtBcHBsaWNhdGlvbkluZm8gYXBwbGljYXRpb25faW5mbyA9IHsKKyAgICAgICAgLnNU eXBlICAgICAgICAgICAgICA9IFZLX1NUUlVDVFVSRV9UWVBFX0FQUExJQ0FUSU9OX0lORk8sCisg ICAgICAgIC5wQXBwbGljYXRpb25OYW1lICAgPSAiZmZtcGVnIiwKKyAgICAgICAgLmFwcGxpY2F0 aW9uVmVyc2lvbiA9IFZLX01BS0VfVkVSU0lPTihMSUJBVlVUSUxfVkVSU0lPTl9NQUpPUiwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJBVlVUSUxfVkVS U0lPTl9NSU5PUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBMSUJBVlVUSUxfVkVSU0lPTl9NSUNSTyksCisgICAgICAgIC5wRW5naW5lTmFtZSAgICAgICAg PSAibGliYXZ1dGlsIiwKKyAgICAgICAgLmFwaVZlcnNpb24gICAgICAgICA9IFZLX0FQSV9WRVJT SU9OXzFfMywKKyAgICAgICAgLmVuZ2luZVZlcnNpb24gICAgICA9IFZLX01BS0VfVkVSU0lPTihM SUJBVlVUSUxfVkVSU0lPTl9NQUpPUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBMSUJBVlVUSUxfVkVSU0lPTl9NSU5PUiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJBVlVUSUxfVkVSU0lPTl9NSUNSTyksCisg ICAgfTsKKyAgICBWa1ZhbGlkYXRpb25GZWF0dXJlc0VYVCB2YWxpZGF0aW9uX2ZlYXR1cmVzID0g eworICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9WQUxJREFUSU9OX0ZFQVRVUkVT X0VYVCwKKyAgICB9OworICAgIFZrSW5zdGFuY2VDcmVhdGVJbmZvIGluc3RfcHJvcHMgPSB7Cisg ICAgICAgIC5zVHlwZSAgICAgICAgICAgID0gVktfU1RSVUNUVVJFX1RZUEVfSU5TVEFOQ0VfQ1JF QVRFX0lORk8sCisgICAgICAgIC5wQXBwbGljYXRpb25JbmZvID0gJmFwcGxpY2F0aW9uX2luZm8s CisgICAgfTsKKworICAgIGlmICghaHdjdHgtPmdldF9wcm9jX2FkZHIpIHsKKyAgICAgICAgZXJy ID0gbG9hZF9saWJ2dWxrYW4oY3R4KTsKKyAgICAgICAgaWYgKGVyciA8IDApCisgICAgICAgICAg ICByZXR1cm4gZXJyOworICAgIH0KKworICAgIGVyciA9IGZmX3ZrX2xvYWRfZnVuY3Rpb25zKGN0 eCwgdmssIHAtPnZrY3R4LmV4dGVuc2lvbnMsIDAsIDApOworICAgIGlmIChlcnIgPCAwKSB7Cisg ICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIlVuYWJsZSB0byBsb2FkIGluc3RhbmNl IGVudW1lcmF0aW9uIGZ1bmN0aW9ucyFcbiIpOworICAgICAgICByZXR1cm4gZXJyOworICAgIH0K KworICAgIGVyciA9IGNoZWNrX2xheWVycyhjdHgsIG9wdHMsICZpbnN0X3Byb3BzLnBwRW5hYmxl ZExheWVyTmFtZXMsCisgICAgICAgICAgICAgICAgICAgICAgICZpbnN0X3Byb3BzLmVuYWJsZWRM YXllckNvdW50LCBkZWJ1Z19tb2RlKTsKKyAgICBpZiAoZXJyKQorICAgICAgICBnb3RvIGZhaWw7 CisKKyAgICAvKiBDaGVjayBmb3IgcHJlc2VudC9taXNzaW5nIGV4dGVuc2lvbnMgKi8KKyAgICBl cnIgPSBjaGVja19leHRlbnNpb25zKGN0eCwgMCwgb3B0cywgJmluc3RfcHJvcHMucHBFbmFibGVk RXh0ZW5zaW9uTmFtZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAmaW5zdF9wcm9wcy5l bmFibGVkRXh0ZW5zaW9uQ291bnQsICpkZWJ1Z19tb2RlKTsKKyAgICBod2N0eC0+ZW5hYmxlZF9p bnN0X2V4dGVuc2lvbnMgPSBpbnN0X3Byb3BzLnBwRW5hYmxlZEV4dGVuc2lvbk5hbWVzOworICAg IGh3Y3R4LT5uYl9lbmFibGVkX2luc3RfZXh0ZW5zaW9ucyA9IGluc3RfcHJvcHMuZW5hYmxlZEV4 dGVuc2lvbkNvdW50OworICAgIGlmIChlcnIgPCAwKQorICAgICAgICBnb3RvIGZhaWw7CisKKyAg ICAvKiBFbmFibGUgZGVidWcgZmVhdHVyZXMgaWYgbmVlZGVkICovCisgICAgaWYgKCpkZWJ1Z19t b2RlID09IEZGX1ZVTEtBTl9ERUJVR19WQUxJREFURSkgeworICAgICAgICBzdGF0aWMgY29uc3Qg VmtWYWxpZGF0aW9uRmVhdHVyZUVuYWJsZUVYVCBmZWF0X2xpc3RfdmFsaWRhdGVbXSA9IHsKKyAg ICAgICAgICAgIFZLX1ZBTElEQVRJT05fRkVBVFVSRV9FTkFCTEVfU1lOQ0hST05JWkFUSU9OX1ZB TElEQVRJT05fRVhULAorICAgICAgICAgICAgVktfVkFMSURBVElPTl9GRUFUVVJFX0VOQUJMRV9H UFVfQVNTSVNURURfUkVTRVJWRV9CSU5ESU5HX1NMT1RfRVhULAorICAgICAgICAgICAgVktfVkFM SURBVElPTl9GRUFUVVJFX0VOQUJMRV9HUFVfQVNTSVNURURfRVhULAorICAgICAgICB9OworICAg ICAgICB2YWxpZGF0aW9uX2ZlYXR1cmVzLnBFbmFibGVkVmFsaWRhdGlvbkZlYXR1cmVzID0gZmVh dF9saXN0X3ZhbGlkYXRlOworICAgICAgICB2YWxpZGF0aW9uX2ZlYXR1cmVzLmVuYWJsZWRWYWxp ZGF0aW9uRmVhdHVyZUNvdW50ID0gRkZfQVJSQVlfRUxFTVMoZmVhdF9saXN0X3ZhbGlkYXRlKTsK KyAgICAgICAgaW5zdF9wcm9wcy5wTmV4dCA9ICZ2YWxpZGF0aW9uX2ZlYXR1cmVzOworICAgIH0g ZWxzZSBpZiAoKmRlYnVnX21vZGUgPT0gRkZfVlVMS0FOX0RFQlVHX1BSSU5URikgeworICAgICAg ICBzdGF0aWMgY29uc3QgVmtWYWxpZGF0aW9uRmVhdHVyZUVuYWJsZUVYVCBmZWF0X2xpc3RfZGVi dWdbXSA9IHsKKyAgICAgICAgICAgIFZLX1ZBTElEQVRJT05fRkVBVFVSRV9FTkFCTEVfU1lOQ0hS T05JWkFUSU9OX1ZBTElEQVRJT05fRVhULAorICAgICAgICAgICAgVktfVkFMSURBVElPTl9GRUFU VVJFX0VOQUJMRV9HUFVfQVNTSVNURURfUkVTRVJWRV9CSU5ESU5HX1NMT1RfRVhULAorICAgICAg ICAgICAgVktfVkFMSURBVElPTl9GRUFUVVJFX0VOQUJMRV9ERUJVR19QUklOVEZfRVhULAorICAg ICAgICB9OworICAgICAgICB2YWxpZGF0aW9uX2ZlYXR1cmVzLnBFbmFibGVkVmFsaWRhdGlvbkZl YXR1cmVzID0gZmVhdF9saXN0X2RlYnVnOworICAgICAgICB2YWxpZGF0aW9uX2ZlYXR1cmVzLmVu YWJsZWRWYWxpZGF0aW9uRmVhdHVyZUNvdW50ID0gRkZfQVJSQVlfRUxFTVMoZmVhdF9saXN0X2Rl YnVnKTsKKyAgICAgICAgaW5zdF9wcm9wcy5wTmV4dCA9ICZ2YWxpZGF0aW9uX2ZlYXR1cmVzOwor ICAgIH0gZWxzZSBpZiAoKmRlYnVnX21vZGUgPT0gRkZfVlVMS0FOX0RFQlVHX1BSQUNUSUNFUykg eworICAgICAgICBzdGF0aWMgY29uc3QgVmtWYWxpZGF0aW9uRmVhdHVyZUVuYWJsZUVYVCBmZWF0 X2xpc3RfcHJhY3RpY2VzW10gPSB7CisgICAgICAgICAgICBWS19WQUxJREFUSU9OX0ZFQVRVUkVf RU5BQkxFX1NZTkNIUk9OSVpBVElPTl9WQUxJREFUSU9OX0VYVCwKKyAgICAgICAgICAgIFZLX1ZB TElEQVRJT05fRkVBVFVSRV9FTkFCTEVfQkVTVF9QUkFDVElDRVNfRVhULAorICAgICAgICB9Owor ICAgICAgICB2YWxpZGF0aW9uX2ZlYXR1cmVzLnBFbmFibGVkVmFsaWRhdGlvbkZlYXR1cmVzID0g ZmVhdF9saXN0X3ByYWN0aWNlczsKKyAgICAgICAgdmFsaWRhdGlvbl9mZWF0dXJlcy5lbmFibGVk VmFsaWRhdGlvbkZlYXR1cmVDb3VudCA9IEZGX0FSUkFZX0VMRU1TKGZlYXRfbGlzdF9wcmFjdGlj ZXMpOworICAgICAgICBpbnN0X3Byb3BzLnBOZXh0ID0gJnZhbGlkYXRpb25fZmVhdHVyZXM7Cisg ICAgfQorCisjaWZkZWYgX19BUFBMRV9fCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnN0X3By b3BzLmVuYWJsZWRFeHRlbnNpb25Db3VudDsgaSsrKSB7CisgICAgICAgIGlmICghc3RyY21wKFZL X0tIUl9QT1JUQUJJTElUWV9FTlVNRVJBVElPTl9FWFRFTlNJT05fTkFNRSwKKyAgICAgICAgICAg ICAgICAgICAgaW5zdF9wcm9wcy5wcEVuYWJsZWRFeHRlbnNpb25OYW1lc1tpXSkpIHsKKyAgICAg ICAgICAgIGluc3RfcHJvcHMuZmxhZ3MgfD0gVktfSU5TVEFOQ0VfQ1JFQVRFX0VOVU1FUkFURV9Q T1JUQUJJTElUWV9CSVRfS0hSOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9 CisjZW5kaWYKKworICAgIC8qIFRyeSB0byBjcmVhdGUgdGhlIGluc3RhbmNlICovCisgICAgcmV0 ID0gdmstPkNyZWF0ZUluc3RhbmNlKCZpbnN0X3Byb3BzLCBod2N0eC0+YWxsb2MsICZod2N0eC0+ aW5zdCk7CisKKyAgICAvKiBDaGVjayBmb3IgZXJyb3JzICovCisgICAgaWYgKHJldCAhPSBWS19T VUNDRVNTKSB7CisgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIkluc3RhbmNlIGNy ZWF0aW9uIGZhaWx1cmU6ICVzXG4iLAorICAgICAgICAgICAgICAgZmZfdmtfcmV0MnN0cihyZXQp KTsKKyAgICAgICAgZXJyID0gQVZFUlJPUl9FWFRFUk5BTDsKKyAgICAgICAgZ290byBmYWlsOwor ICAgIH0KKworICAgIGVyciA9IGZmX3ZrX2xvYWRfZnVuY3Rpb25zKGN0eCwgdmssIHAtPnZrY3R4 LmV4dGVuc2lvbnMsIDEsIDApOworICAgIGlmIChlcnIgPCAwKSB7CisgICAgICAgIGF2X2xvZyhj dHgsIEFWX0xPR19FUlJPUiwgIlVuYWJsZSB0byBsb2FkIGluc3RhbmNlIGZ1bmN0aW9ucyFcbiIp OworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgLyogU2V0dXAgZGVidWdnaW5nIGNh bGxiYWNrIGlmIG5lZWRlZCAqLworICAgIGlmICgoKmRlYnVnX21vZGUgPT0gRkZfVlVMS0FOX0RF QlVHX1ZBTElEQVRFKSB8fAorICAgICAgICAoKmRlYnVnX21vZGUgPT0gRkZfVlVMS0FOX0RFQlVH X1BSSU5URikgfHwKKyAgICAgICAgKCpkZWJ1Z19tb2RlID09IEZGX1ZVTEtBTl9ERUJVR19QUkFD VElDRVMpKSB7CisgICAgICAgIFZrRGVidWdVdGlsc01lc3NlbmdlckNyZWF0ZUluZm9FWFQgZGJn ID0geworICAgICAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfREVCVUdfVVRJTFNf TUVTU0VOR0VSX0NSRUFURV9JTkZPX0VYVCwKKyAgICAgICAgICAgIC5tZXNzYWdlU2V2ZXJpdHkg PSBWS19ERUJVR19VVElMU19NRVNTQUdFX1NFVkVSSVRZX1ZFUkJPU0VfQklUX0VYVCB8CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfREVCVUdfVVRJTFNfTUVTU0FHRV9TRVZFUklU WV9JTkZPX0JJVF9FWFQgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZLX0RF QlVHX1VUSUxTX01FU1NBR0VfU0VWRVJJVFlfV0FSTklOR19CSVRfRVhUIHwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBWS19ERUJVR19VVElMU19NRVNTQUdFX1NFVkVSSVRZX0VSUk9S X0JJVF9FWFQsCisgICAgICAgICAgICAubWVzc2FnZVR5cGUgPSBWS19ERUJVR19VVElMU19NRVNT QUdFX1RZUEVfR0VORVJBTF9CSVRfRVhUICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg IFZLX0RFQlVHX1VUSUxTX01FU1NBR0VfVFlQRV9WQUxJREFUSU9OX0JJVF9FWFQgfAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgVktfREVCVUdfVVRJTFNfTUVTU0FHRV9UWVBFX1BFUkZPUk1B TkNFX0JJVF9FWFQsCisgICAgICAgICAgICAucGZuVXNlckNhbGxiYWNrID0gdmtfZGJnX2NhbGxi YWNrLAorICAgICAgICAgICAgLnBVc2VyRGF0YSA9IGN0eCwKKyAgICAgICAgfTsKKworICAgICAg ICB2ay0+Q3JlYXRlRGVidWdVdGlsc01lc3NlbmdlckVYVChod2N0eC0+aW5zdCwgJmRiZywKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHdjdHgtPmFsbG9jLCAmcC0+ ZGVidWdfY3R4KTsKKyAgICB9CisKKyAgICBlcnIgPSAwOworCitmYWlsOgorICAgIFJFTEVBU0Vf UFJPUFMoaW5zdF9wcm9wcy5wcEVuYWJsZWRMYXllck5hbWVzLCBpbnN0X3Byb3BzLmVuYWJsZWRM YXllckNvdW50KTsKKyAgICByZXR1cm4gZXJyOworfQorCit0eXBlZGVmIHN0cnVjdCBWdWxrYW5E ZXZpY2VTZWxlY3Rpb24geworICAgIHVpbnQ4X3QgdXVpZFtWS19VVUlEX1NJWkVdOyAvKiBXaWxs IHVzZSB0aGlzIGZpcnN0IHVubGVzcyAhaGFzX3V1aWQgKi8KKyAgICBpbnQgaGFzX3V1aWQ7Cisg ICAgdWludDMyX3QgZHJtX21ham9yOyAvKiBXaWxsIHVzZSB0aGlzIHNlY29uZCB1bmxlc3MgIWhh c19kcm0gKi8KKyAgICB1aW50MzJfdCBkcm1fbWlub3I7IC8qIFdpbGwgdXNlIHRoaXMgc2Vjb25k IHVubGVzcyAhaGFzX2RybSAqLworICAgIHVpbnQzMl90IGhhc19kcm07IC8qIGhhcyBkcm0gbm9k ZSBpbmZvICovCisgICAgY29uc3QgY2hhciAqbmFtZTsgLyogV2lsbCB1c2UgdGhpcyB0aGlyZCB1 bmxlc3MgTlVMTCAqLworICAgIHVpbnQzMl90IHBjaV9kZXZpY2U7IC8qIFdpbGwgdXNlIHRoaXMg Zm91cnRoIHVubGVzcyAweDAgKi8KKyAgICB1aW50MzJfdCB2ZW5kb3JfaWQ7IC8qIExhc3QgcmVz b3J0IHRvIGZpbmQgc29tZXRoaW5nIGRldGVybWluaXN0aWMgKi8KKyAgICBpbnQgaW5kZXg7IC8q IEZpbmFsbHkgZmFsbCBiYWNrIHRvIGluZGV4ICovCit9IFZ1bGthbkRldmljZVNlbGVjdGlvbjsK Kworc3RhdGljIGNvbnN0IGNoYXIgKnZrX2Rldl90eXBlKGVudW0gVmtQaHlzaWNhbERldmljZVR5 cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIFZLX1BIWVNJQ0FMX0RF VklDRV9UWVBFX0lOVEVHUkFURURfR1BVOiByZXR1cm4gImludGVncmF0ZWQiOworICAgIGNhc2Ug VktfUEhZU0lDQUxfREVWSUNFX1RZUEVfRElTQ1JFVEVfR1BVOiAgIHJldHVybiAiZGlzY3JldGUi OworICAgIGNhc2UgVktfUEhZU0lDQUxfREVWSUNFX1RZUEVfVklSVFVBTF9HUFU6ICAgIHJldHVy biAidmlydHVhbCI7CisgICAgY2FzZSBWS19QSFlTSUNBTF9ERVZJQ0VfVFlQRV9DUFU6ICAgICAg ICAgICAgcmV0dXJuICJzb2Z0d2FyZSI7CisgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcmV0dXJuICJ1bmtub3duIjsKKyAgICB9Cit9CisKKy8qIEZpbmRz IGEgZGV2aWNlICovCitzdGF0aWMgaW50IGZpbmRfZGV2aWNlKEFWSFdEZXZpY2VDb250ZXh0ICpj dHgsIFZ1bGthbkRldmljZVNlbGVjdGlvbiAqc2VsZWN0KQoreworICAgIGludCBlcnIgPSAwLCBj aG9pY2UgPSAtMTsKKyAgICB1aW50MzJfdCBudW07CisgICAgVmtSZXN1bHQgcmV0OworICAgIFZ1 bGthbkRldmljZVByaXYgKnAgPSBjdHgtPmh3Y3R4OworICAgIEFWVnVsa2FuRGV2aWNlQ29udGV4 dCAqaHdjdHggPSAmcC0+cDsKKyAgICBGRlZ1bGthbkZ1bmN0aW9ucyAqdmsgPSAmcC0+dmtjdHgu dmtmbjsKKyAgICBWa1BoeXNpY2FsRGV2aWNlICpkZXZpY2VzID0gTlVMTDsKKyAgICBWa1BoeXNp Y2FsRGV2aWNlSURQcm9wZXJ0aWVzICppZHAgPSBOVUxMOworICAgIFZrUGh5c2ljYWxEZXZpY2VQ cm9wZXJ0aWVzMiAqcHJvcCA9IE5VTEw7CisgICAgVmtQaHlzaWNhbERldmljZURyaXZlclByb3Bl cnRpZXMgKmRyaXZlcl9wcm9wID0gTlVMTDsKKyAgICBWa1BoeXNpY2FsRGV2aWNlRHJtUHJvcGVy dGllc0VYVCAqZHJtX3Byb3AgPSBOVUxMOworCisgICAgcmV0ID0gdmstPkVudW1lcmF0ZVBoeXNp Y2FsRGV2aWNlcyhod2N0eC0+aW5zdCwgJm51bSwgTlVMTCk7CisgICAgaWYgKHJldCAhPSBWS19T VUNDRVNTIHx8ICFudW0pIHsKKyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiTm8g ZGV2aWNlcyBmb3VuZDogJXMhXG4iLCBmZl92a19yZXQyc3RyKHJldCkpOworICAgICAgICByZXR1 cm4gQVZFUlJPUihFTk9ERVYpOworICAgIH0KKworICAgIGRldmljZXMgPSBhdl9tYWxsb2NfYXJy YXkobnVtLCBzaXplb2YoVmtQaHlzaWNhbERldmljZSkpOworICAgIGlmICghZGV2aWNlcykKKyAg ICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKKworICAgIHJldCA9IHZrLT5FbnVtZXJhdGVQ aHlzaWNhbERldmljZXMoaHdjdHgtPmluc3QsICZudW0sIGRldmljZXMpOworICAgIGlmIChyZXQg IT0gVktfU1VDQ0VTUykgeworICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJGYWls ZWQgZW51bWVyYXRpbmcgZGV2aWNlczogJXNcbiIsCisgICAgICAgICAgICAgICBmZl92a19yZXQy c3RyKHJldCkpOworICAgICAgICBlcnIgPSBBVkVSUk9SKEVOT0RFVik7CisgICAgICAgIGdvdG8g ZW5kOworICAgIH0KKworICAgIHByb3AgPSBhdl9jYWxsb2MobnVtLCBzaXplb2YoKnByb3ApKTsK KyAgICBpZiAoIXByb3ApIHsKKyAgICAgICAgZXJyID0gQVZFUlJPUihFTk9NRU0pOworICAgICAg ICBnb3RvIGVuZDsKKyAgICB9CisKKyAgICBpZHAgPSBhdl9jYWxsb2MobnVtLCBzaXplb2YoKmlk cCkpOworICAgIGlmICghaWRwKSB7CisgICAgICAgIGVyciA9IEFWRVJST1IoRU5PTUVNKTsKKyAg ICAgICAgZ290byBlbmQ7CisgICAgfQorCisgICAgZHJpdmVyX3Byb3AgPSBhdl9jYWxsb2MobnVt LCBzaXplb2YoKmRyaXZlcl9wcm9wKSk7CisgICAgaWYgKCFkcml2ZXJfcHJvcCkgeworICAgICAg ICBlcnIgPSBBVkVSUk9SKEVOT01FTSk7CisgICAgICAgIGdvdG8gZW5kOworICAgIH0KKworICAg IGlmIChwLT52a2N0eC5leHRlbnNpb25zICYgRkZfVktfRVhUX0RFVklDRV9EUk0pIHsKKyAgICAg ICAgZHJtX3Byb3AgPSBhdl9jYWxsb2MobnVtLCBzaXplb2YoKmRybV9wcm9wKSk7CisgICAgICAg IGlmICghZHJtX3Byb3ApIHsKKyAgICAgICAgICAgIGVyciA9IEFWRVJST1IoRU5PTUVNKTsKKyAg ICAgICAgICAgIGdvdG8gZW5kOworICAgICAgICB9CisgICAgfQorCisgICAgYXZfbG9nKGN0eCwg QVZfTE9HX1ZFUkJPU0UsICJHUFUgbGlzdGluZzpcbiIpOworICAgIGZvciAoaW50IGkgPSAwOyBp IDwgbnVtOyBpKyspIHsKKyAgICAgICAgaWYgKHAtPnZrY3R4LmV4dGVuc2lvbnMgJiBGRl9WS19F WFRfREVWSUNFX0RSTSkgeworICAgICAgICAgICAgZHJtX3Byb3BbaV0uc1R5cGUgPSBWS19TVFJV Q1RVUkVfVFlQRV9QSFlTSUNBTF9ERVZJQ0VfRFJNX1BST1BFUlRJRVNfRVhUOworICAgICAgICAg ICAgZHJpdmVyX3Byb3BbaV0ucE5leHQgPSAmZHJtX3Byb3BbaV07CisgICAgICAgIH0KKyAgICAg ICAgZHJpdmVyX3Byb3BbaV0uc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9QSFlTSUNBTF9ERVZJ Q0VfRFJJVkVSX1BST1BFUlRJRVM7CisgICAgICAgIGlkcFtpXS5wTmV4dCA9ICZkcml2ZXJfcHJv cFtpXTsKKyAgICAgICAgaWRwW2ldLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfUEhZU0lDQUxf REVWSUNFX0lEX1BST1BFUlRJRVM7CisgICAgICAgIHByb3BbaV0uc1R5cGUgPSBWS19TVFJVQ1RV UkVfVFlQRV9QSFlTSUNBTF9ERVZJQ0VfUFJPUEVSVElFU18yOworICAgICAgICBwcm9wW2ldLnBO ZXh0ID0gJmlkcFtpXTsKKworICAgICAgICB2ay0+R2V0UGh5c2ljYWxEZXZpY2VQcm9wZXJ0aWVz MihkZXZpY2VzW2ldLCAmcHJvcFtpXSk7CisgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19WRVJC T1NFLCAiICAgICVkOiAlcyAoJXMpICgweCV4KVxuIiwgaSwKKyAgICAgICAgICAgICAgIHByb3Bb aV0ucHJvcGVydGllcy5kZXZpY2VOYW1lLAorICAgICAgICAgICAgICAgdmtfZGV2X3R5cGUocHJv cFtpXS5wcm9wZXJ0aWVzLmRldmljZVR5cGUpLAorICAgICAgICAgICAgICAgcHJvcFtpXS5wcm9w ZXJ0aWVzLmRldmljZUlEKTsKKyAgICB9CisKKyAgICBpZiAoc2VsZWN0LT5oYXNfdXVpZCkgewor ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bTsgaSsrKSB7CisgICAgICAgICAgICBpZiAo IXN0cm5jbXAoaWRwW2ldLmRldmljZVVVSUQsIHNlbGVjdC0+dXVpZCwgVktfVVVJRF9TSVpFKSkg eworICAgICAgICAgICAgICAgIGNob2ljZSA9IGk7CisgICAgICAgICAgICAgICAgZ290byBlbmQ7 CisgICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19F UlJPUiwgIlVuYWJsZSB0byBmaW5kIGRldmljZSBieSBnaXZlbiBVVUlEIVxuIik7CisgICAgICAg IGVyciA9IEFWRVJST1IoRU5PREVWKTsKKyAgICAgICAgZ290byBlbmQ7CisgICAgfSBlbHNlIGlm ICgocC0+dmtjdHguZXh0ZW5zaW9ucyAmIEZGX1ZLX0VYVF9ERVZJQ0VfRFJNKSAmJiBzZWxlY3Qt Pmhhc19kcm0pIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW07IGkrKykgeworICAg ICAgICAgICAgaWYgKChzZWxlY3QtPmRybV9tYWpvciA9PSBkcm1fcHJvcFtpXS5wcmltYXJ5TWFq b3IgJiYKKyAgICAgICAgICAgICAgICAgc2VsZWN0LT5kcm1fbWlub3IgPT0gZHJtX3Byb3BbaV0u cHJpbWFyeU1pbm9yKSB8fAorICAgICAgICAgICAgICAgIChzZWxlY3QtPmRybV9tYWpvciA9PSBk cm1fcHJvcFtpXS5yZW5kZXJNYWpvciAmJgorICAgICAgICAgICAgICAgICBzZWxlY3QtPmRybV9t aW5vciA9PSBkcm1fcHJvcFtpXS5yZW5kZXJNaW5vcikpIHsKKyAgICAgICAgICAgICAgICBjaG9p Y2UgPSBpOworICAgICAgICAgICAgICAgIGdvdG8gZW5kOworICAgICAgICAgICAgIH0KKyAgICAg ICAgfQorICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJVbmFibGUgdG8gZmluZCBk ZXZpY2UgYnkgZ2l2ZW4gRFJNIG5vZGUgbnVtYmVycyAlaTolaSFcbiIsCisgICAgICAgICAgICAg ICBzZWxlY3QtPmRybV9tYWpvciwgc2VsZWN0LT5kcm1fbWlub3IpOworICAgICAgICBlcnIgPSBB VkVSUk9SKEVOT0RFVik7CisgICAgICAgIGdvdG8gZW5kOworICAgIH0gZWxzZSBpZiAoc2VsZWN0 LT5uYW1lKSB7CisgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19WRVJCT1NFLCAiUmVxdWVzdGVk IGRldmljZTogJXNcbiIsIHNlbGVjdC0+bmFtZSk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBp IDwgbnVtOyBpKyspIHsKKyAgICAgICAgICAgIGlmIChzdHJzdHIocHJvcFtpXS5wcm9wZXJ0aWVz LmRldmljZU5hbWUsIHNlbGVjdC0+bmFtZSkpIHsKKyAgICAgICAgICAgICAgICBjaG9pY2UgPSBp OworICAgICAgICAgICAgICAgIGdvdG8gZW5kOworICAgICAgICAgICAgIH0KKyAgICAgICAgfQor ICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJVbmFibGUgdG8gZmluZCBkZXZpY2Ug XCIlc1wiIVxuIiwKKyAgICAgICAgICAgICAgIHNlbGVjdC0+bmFtZSk7CisgICAgICAgIGVyciA9 IEFWRVJST1IoRU5PREVWKTsKKyAgICAgICAgZ290byBlbmQ7CisgICAgfSBlbHNlIGlmIChzZWxl Y3QtPnBjaV9kZXZpY2UpIHsKKyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX1ZFUkJPU0UsICJS ZXF1ZXN0ZWQgZGV2aWNlOiAweCV4XG4iLCBzZWxlY3QtPnBjaV9kZXZpY2UpOworICAgICAgICBm b3IgKGludCBpID0gMDsgaSA8IG51bTsgaSsrKSB7CisgICAgICAgICAgICBpZiAoc2VsZWN0LT5w Y2lfZGV2aWNlID09IHByb3BbaV0ucHJvcGVydGllcy5kZXZpY2VJRCkgeworICAgICAgICAgICAg ICAgIGNob2ljZSA9IGk7CisgICAgICAgICAgICAgICAgZ290byBlbmQ7CisgICAgICAgICAgICB9 CisgICAgICAgIH0KKyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiVW5hYmxlIHRv IGZpbmQgZGV2aWNlIHdpdGggUENJIElEIDB4JXghXG4iLAorICAgICAgICAgICAgICAgc2VsZWN0 LT5wY2lfZGV2aWNlKTsKKyAgICAgICAgZXJyID0gQVZFUlJPUihFSU5WQUwpOworICAgICAgICBn b3RvIGVuZDsKKyAgICB9IGVsc2UgaWYgKHNlbGVjdC0+dmVuZG9yX2lkKSB7CisgICAgICAgIGF2 X2xvZyhjdHgsIEFWX0xPR19WRVJCT1NFLCAiUmVxdWVzdGVkIHZlbmRvcjogMHgleFxuIiwgc2Vs ZWN0LT52ZW5kb3JfaWQpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bTsgaSsrKSB7 CisgICAgICAgICAgICBpZiAoc2VsZWN0LT52ZW5kb3JfaWQgPT0gcHJvcFtpXS5wcm9wZXJ0aWVz LnZlbmRvcklEKSB7CisgICAgICAgICAgICAgICAgY2hvaWNlID0gaTsKKyAgICAgICAgICAgICAg ICBnb3RvIGVuZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBhdl9sb2coY3R4 LCBBVl9MT0dfRVJST1IsICJVbmFibGUgdG8gZmluZCBkZXZpY2Ugd2l0aCBWZW5kb3IgSUQgMHgl eCFcbiIsCisgICAgICAgICAgICAgICBzZWxlY3QtPnZlbmRvcl9pZCk7CisgICAgICAgIGVyciA9 IEFWRVJST1IoRU5PREVWKTsKKyAgICAgICAgZ290byBlbmQ7CisgICAgfSBlbHNlIHsKKyAgICAg ICAgaWYgKHNlbGVjdC0+aW5kZXggPCBudW0pIHsKKyAgICAgICAgICAgIGNob2ljZSA9IHNlbGVj dC0+aW5kZXg7CisgICAgICAgICAgICBnb3RvIGVuZDsKKyAgICAgICAgfQorICAgICAgICBhdl9s b2coY3R4LCBBVl9MT0dfRVJST1IsICJVbmFibGUgdG8gZmluZCBkZXZpY2Ugd2l0aCBpbmRleCAl aSFcbiIsCisgICAgICAgICAgICAgICBzZWxlY3QtPmluZGV4KTsKKyAgICAgICAgZXJyID0gQVZF UlJPUihFTk9ERVYpOworICAgICAgICBnb3RvIGVuZDsKKyAgICB9CisKK2VuZDoKKyAgICBpZiAo Y2hvaWNlID4gLTEpIHsKKyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX1ZFUkJPU0UsICJEZXZp Y2UgJWQgc2VsZWN0ZWQ6ICVzICglcykgKDB4JXgpXG4iLAorICAgICAgICAgICAgICAgY2hvaWNl LCBwcm9wW2Nob2ljZV0ucHJvcGVydGllcy5kZXZpY2VOYW1lLAorICAgICAgICAgICAgICAgdmtf ZGV2X3R5cGUocHJvcFtjaG9pY2VdLnByb3BlcnRpZXMuZGV2aWNlVHlwZSksCisgICAgICAgICAg ICAgICBwcm9wW2Nob2ljZV0ucHJvcGVydGllcy5kZXZpY2VJRCk7CisgICAgICAgIGh3Y3R4LT5w aHlzX2RldiA9IGRldmljZXNbY2hvaWNlXTsKKyAgICAgICAgcC0+cHJvcHMgPSBwcm9wW2Nob2lj ZV07CisgICAgICAgIHAtPnByb3BzLnBOZXh0ID0gTlVMTDsKKyAgICAgICAgcC0+ZHByb3BzID0g ZHJpdmVyX3Byb3BbY2hvaWNlXTsKKyAgICAgICAgcC0+ZHByb3BzLnBOZXh0ID0gTlVMTDsKKyAg ICB9CisKKyAgICBhdl9mcmVlKGRldmljZXMpOworICAgIGF2X2ZyZWUocHJvcCk7CisgICAgYXZf ZnJlZShpZHApOworICAgIGF2X2ZyZWUoZHJtX3Byb3ApOworICAgIGF2X2ZyZWUoZHJpdmVyX3By b3ApOworCisgICAgcmV0dXJuIGVycjsKK30KKworLyogUGlja3MgdGhlIGxlYXN0IHVzZWQgcWYg d2l0aCB0aGUgZmV3ZXN0IHVubmVlZGVkIGZsYWdzLCBvciAtMSBpZiBub25lIGZvdW5kICovCitz dGF0aWMgaW5saW5lIGludCBwaWNrX3F1ZXVlX2ZhbWlseShWa1F1ZXVlRmFtaWx5UHJvcGVydGll czIgKnFmLCB1aW50MzJfdCBudW1fcWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBWa1F1ZXVlRmxhZ0JpdHMgZmxhZ3MpCit7CisgICAgaW50IGluZGV4ID0gLTE7CisgICAg dWludDMyX3QgbWluX3Njb3JlID0gVUlOVDMyX01BWDsKKworICAgIGZvciAoaW50IGkgPSAwOyBp IDwgbnVtX3FmOyBpKyspIHsKKyAgICAgICAgVmtRdWV1ZUZsYWdCaXRzIHFmbGFncyA9IHFmW2ld LnF1ZXVlRmFtaWx5UHJvcGVydGllcy5xdWV1ZUZsYWdzOworCisgICAgICAgIC8qIFBlciB0aGUg c3BlYywgcmVwb3J0aW5nIHRyYW5zZmVyIGNhcHMgaXMgb3B0aW9uYWwgZm9yIHRoZXNlIDIgdHlw ZXMgKi8KKyAgICAgICAgaWYgKChmbGFncyAmIFZLX1FVRVVFX1RSQU5TRkVSX0JJVCkgJiYKKyAg ICAgICAgICAgIChxZmxhZ3MgJiAoVktfUVVFVUVfR1JBUEhJQ1NfQklUIHwgVktfUVVFVUVfQ09N UFVURV9CSVQpKSkKKyAgICAgICAgICAgIHFmbGFncyB8PSBWS19RVUVVRV9UUkFOU0ZFUl9CSVQ7 CisKKyAgICAgICAgaWYgKHFmbGFncyAmIGZsYWdzKSB7CisgICAgICAgICAgICB1aW50MzJfdCBz Y29yZSA9IGF2X3BvcGNvdW50KHFmbGFncykgKyBxZltpXS5xdWV1ZUZhbWlseVByb3BlcnRpZXMu dGltZXN0YW1wVmFsaWRCaXRzOworICAgICAgICAgICAgaWYgKHNjb3JlIDwgbWluX3Njb3JlKSB7 CisgICAgICAgICAgICAgICAgaW5kZXggPSBpOworICAgICAgICAgICAgICAgIG1pbl9zY29yZSA9 IHNjb3JlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGluZGV4 ID4gLTEpCisgICAgICAgIHFmW2luZGV4XS5xdWV1ZUZhbWlseVByb3BlcnRpZXMudGltZXN0YW1w VmFsaWRCaXRzKys7CisKKyAgICByZXR1cm4gaW5kZXg7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50 IHBpY2tfdmlkZW9fcXVldWVfZmFtaWx5KFZrUXVldWVGYW1pbHlQcm9wZXJ0aWVzMiAqcWYsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWa1F1ZXVlRmFtaWx5Vmlk ZW9Qcm9wZXJ0aWVzS0hSICpxZl92aWQsIHVpbnQzMl90IG51bV9xZiwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZrVmlkZW9Db2RlY09wZXJhdGlvbkZsYWdCaXRz S0hSIGZsYWdzKQoreworICAgIGludCBpbmRleCA9IC0xOworICAgIHVpbnQzMl90IG1pbl9zY29y ZSA9IFVJTlQzMl9NQVg7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bV9xZjsgaSsrKSB7 CisgICAgICAgIGNvbnN0IFZrUXVldWVGbGFnQml0cyBxZmxhZ3MgPSBxZltpXS5xdWV1ZUZhbWls eVByb3BlcnRpZXMucXVldWVGbGFnczsKKyAgICAgICAgY29uc3QgVmtRdWV1ZUZsYWdCaXRzIHZm bGFncyA9IHFmX3ZpZFtpXS52aWRlb0NvZGVjT3BlcmF0aW9uczsKKworICAgICAgICBpZiAoIShx ZmxhZ3MgJiAoVktfUVVFVUVfVklERU9fRU5DT0RFX0JJVF9LSFIgfCBWS19RVUVVRV9WSURFT19E RUNPREVfQklUX0tIUikpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKHZm bGFncyAmIGZsYWdzKSB7CisgICAgICAgICAgICB1aW50MzJfdCBzY29yZSA9IGF2X3BvcGNvdW50 KHZmbGFncykgKyBxZltpXS5xdWV1ZUZhbWlseVByb3BlcnRpZXMudGltZXN0YW1wVmFsaWRCaXRz OworICAgICAgICAgICAgaWYgKHNjb3JlIDwgbWluX3Njb3JlKSB7CisgICAgICAgICAgICAgICAg aW5kZXggPSBpOworICAgICAgICAgICAgICAgIG1pbl9zY29yZSA9IHNjb3JlOworICAgICAgICAg ICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGluZGV4ID4gLTEpCisgICAgICAgIHFm W2luZGV4XS5xdWV1ZUZhbWlseVByb3BlcnRpZXMudGltZXN0YW1wVmFsaWRCaXRzKys7CisKKyAg ICByZXR1cm4gaW5kZXg7Cit9CisKK3N0YXRpYyBpbnQgc2V0dXBfcXVldWVfZmFtaWxpZXMoQVZI V0RldmljZUNvbnRleHQgKmN0eCwgVmtEZXZpY2VDcmVhdGVJbmZvICpjZCkKK3sKKyAgICB1aW50 MzJfdCBudW07CisgICAgVnVsa2FuRGV2aWNlUHJpdiAqcCA9IGN0eC0+aHdjdHg7CisgICAgQVZW dWxrYW5EZXZpY2VDb250ZXh0ICpod2N0eCA9ICZwLT5wOworICAgIEZGVnVsa2FuRnVuY3Rpb25z ICp2ayA9ICZwLT52a2N0eC52a2ZuOworCisgICAgVmtRdWV1ZUZhbWlseVByb3BlcnRpZXMyICpx ZiA9IE5VTEw7CisgICAgVmtRdWV1ZUZhbWlseVZpZGVvUHJvcGVydGllc0tIUiAqcWZfdmlkID0g TlVMTDsKKworICAgIC8qIEZpcnN0IGdldCB0aGUgbnVtYmVyIG9mIHF1ZXVlIGZhbWlsaWVzICov CisgICAgdmstPkdldFBoeXNpY2FsRGV2aWNlUXVldWVGYW1pbHlQcm9wZXJ0aWVzKGh3Y3R4LT5w aHlzX2RldiwgJm51bSwgTlVMTCk7CisgICAgaWYgKCFudW0pIHsKKyAgICAgICAgYXZfbG9nKGN0 eCwgQVZfTE9HX0VSUk9SLCAiRmFpbGVkIHRvIGdldCBxdWV1ZXMhXG4iKTsKKyAgICAgICAgcmV0 dXJuIEFWRVJST1JfRVhURVJOQUw7CisgICAgfQorCisgICAgLyogVGhlbiBhbGxvY2F0ZSBtZW1v cnkgKi8KKyAgICBxZiA9IGF2X21hbGxvY19hcnJheShudW0sIHNpemVvZihWa1F1ZXVlRmFtaWx5 UHJvcGVydGllczIpKTsKKyAgICBpZiAoIXFmKQorICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9N RU0pOworCisgICAgcWZfdmlkID0gYXZfbWFsbG9jX2FycmF5KG51bSwgc2l6ZW9mKFZrUXVldWVG YW1pbHlWaWRlb1Byb3BlcnRpZXNLSFIpKTsKKyAgICBpZiAoIXFmX3ZpZCkKKyAgICAgICAgcmV0 dXJuIEFWRVJST1IoRU5PTUVNKTsKKworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBudW07 IGkrKykgeworICAgICAgICBxZl92aWRbaV0gPSAoVmtRdWV1ZUZhbWlseVZpZGVvUHJvcGVydGll c0tIUikgeworICAgICAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfUVVFVUVfRkFN SUxZX1ZJREVPX1BST1BFUlRJRVNfS0hSLAorICAgICAgICB9OworICAgICAgICBxZltpXSA9IChW a1F1ZXVlRmFtaWx5UHJvcGVydGllczIpIHsKKyAgICAgICAgICAgIC5zVHlwZSA9IFZLX1NUUlVD VFVSRV9UWVBFX1FVRVVFX0ZBTUlMWV9QUk9QRVJUSUVTXzIsCisgICAgICAgICAgICAucE5leHQg PSBwLT52a2N0eC5leHRlbnNpb25zICYgRkZfVktfRVhUX1ZJREVPX1FVRVVFID8gJnFmX3ZpZFtp XSA6IE5VTEwsCisgICAgICAgIH07CisgICAgfQorCisgICAgLyogRmluYWxseSByZXRyaWV2ZSB0 aGUgcXVldWUgZmFtaWxpZXMgKi8KKyAgICB2ay0+R2V0UGh5c2ljYWxEZXZpY2VRdWV1ZUZhbWls eVByb3BlcnRpZXMyKGh3Y3R4LT5waHlzX2RldiwgJm51bSwgcWYpOworCisgICAgYXZfbG9nKGN0 eCwgQVZfTE9HX1ZFUkJPU0UsICJRdWV1ZSBmYW1pbGllczpcbiIpOworICAgIGZvciAoaW50IGkg PSAwOyBpIDwgbnVtOyBpKyspIHsKKyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX1ZFUkJPU0Us ICIgICAgJWk6JXMlcyVzJXMlcyVzJXMlcyAocXVldWVzOiAlaSlcbiIsIGksCisgICAgICAgICAg ICAgICAoKHFmW2ldLnF1ZXVlRmFtaWx5UHJvcGVydGllcy5xdWV1ZUZsYWdzKSAmIFZLX1FVRVVF X0dSQVBISUNTX0JJVCkgPyAiIGdyYXBoaWNzIiA6ICIiLAorICAgICAgICAgICAgICAgKChxZltp XS5xdWV1ZUZhbWlseVByb3BlcnRpZXMucXVldWVGbGFncykgJiBWS19RVUVVRV9DT01QVVRFX0JJ VCkgPyAiIGNvbXB1dGUiIDogIiIsCisgICAgICAgICAgICAgICAoKHFmW2ldLnF1ZXVlRmFtaWx5 UHJvcGVydGllcy5xdWV1ZUZsYWdzKSAmIFZLX1FVRVVFX1RSQU5TRkVSX0JJVCkgPyAiIHRyYW5z ZmVyIiA6ICIiLAorICAgICAgICAgICAgICAgKChxZltpXS5xdWV1ZUZhbWlseVByb3BlcnRpZXMu cXVldWVGbGFncykgJiBWS19RVUVVRV9WSURFT19FTkNPREVfQklUX0tIUikgPyAiIGVuY29kZSIg OiAiIiwKKyAgICAgICAgICAgICAgICgocWZbaV0ucXVldWVGYW1pbHlQcm9wZXJ0aWVzLnF1ZXVl RmxhZ3MpICYgVktfUVVFVUVfVklERU9fREVDT0RFX0JJVF9LSFIpID8gIiBkZWNvZGUiIDogIiIs CisgICAgICAgICAgICAgICAoKHFmW2ldLnF1ZXVlRmFtaWx5UHJvcGVydGllcy5xdWV1ZUZsYWdz KSAmIFZLX1FVRVVFX1NQQVJTRV9CSU5ESU5HX0JJVCkgPyAiIHNwYXJzZSIgOiAiIiwKKyAgICAg ICAgICAgICAgICgocWZbaV0ucXVldWVGYW1pbHlQcm9wZXJ0aWVzLnF1ZXVlRmxhZ3MpICYgVktf UVVFVUVfT1BUSUNBTF9GTE9XX0JJVF9OVikgPyAiIG9wdGljYWxfZmxvdyIgOiAiIiwKKyAgICAg ICAgICAgICAgICgocWZbaV0ucXVldWVGYW1pbHlQcm9wZXJ0aWVzLnF1ZXVlRmxhZ3MpICYgVktf UVVFVUVfUFJPVEVDVEVEX0JJVCkgPyAiIHByb3RlY3RlZCIgOiAiIiwKKyAgICAgICAgICAgICAg IHFmW2ldLnF1ZXVlRmFtaWx5UHJvcGVydGllcy5xdWV1ZUNvdW50KTsKKworICAgICAgICAvKiBX ZSB1c2UgdGhpcyBmaWVsZCB0byBrZWVwIGEgc2NvcmUgb2YgaG93IG1hbnkgdGltZXMgd2UndmUg dXNlZCB0aGF0CisgICAgICAgICAqIHF1ZXVlIGZhbWlseSBpbiBvcmRlciB0byBtYWtlIGJldHRl ciBjaG9pY2VzLiAqLworICAgICAgICBxZltpXS5xdWV1ZUZhbWlseVByb3BlcnRpZXMudGltZXN0 YW1wVmFsaWRCaXRzID0gMDsKKyAgICB9CisKKyAgICBod2N0eC0+bmJfcWYgPSAwOworCisgICAg LyogUGljayBlYWNoIHF1ZXVlIGZhbWlseSB0byB1c2UuICovCisjZGVmaW5lIFBJQ0tfUUYodHlw ZSwgdmlkX29wKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor ICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgdWludDMyX3QgaTsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHVpbnQzMl90IGlk eDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKHZpZF9vcCkgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBpZHggPSBw aWNrX3ZpZGVvX3F1ZXVlX2ZhbWlseShxZiwgcWZfdmlkLCBudW0sIHZpZF9vcCk7ICAgICAgXAor ICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGlkeCA9IHBpY2tfcXVldWVfZmFtaWx5KHFm LCBudW0sIHR5cGUpOyAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor ICAgICAgICBpZiAoaWR4ID09IC0xKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGNvbnRpbnVlOyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor ICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaHdjdHgtPm5iX3FmOyBpKyspIHsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGlmIChod2N0eC0+cWZbaV0uaWR4ID09IGlk eCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgaHdj dHgtPnFmW2ldLmZsYWdzIHw9IHR5cGU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor ICAgICAgICAgICAgICAgIGh3Y3R4LT5xZltpXS52aWRlb19jYXBzIHw9IHZpZF9vcDsgICAgICAg ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICB9ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor ICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKGkgPT0gaHdjdHgtPm5iX3FmKSB7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBod2N0eC0+ cWZbaV0uaWR4ID0gaWR4OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor ICAgICAgICAgICAgaHdjdHgtPnFmW2ldLm51bSA9IHFmW2lkeF0ucXVldWVGYW1pbHlQcm9wZXJ0 aWVzLnF1ZXVlQ291bnQ7IFwKKyAgICAgICAgICAgIGlmIChwLT5saW1pdF9xdWV1ZXMgfHwgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgcC0+ ZHByb3BzLmRyaXZlcklEID09IFZLX0RSSVZFUl9JRF9OVklESUFfUFJPUFJJRVRBUlkpIHsgXAor ICAgICAgICAgICAgICAgIGludCBtYXggPSBwLT5saW1pdF9xdWV1ZXM7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBpZiAodHlwZSA9PSBWS19RVUVVRV9H UkFQSElDU19CSVQpICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAg IGh3Y3R4LT5xZltpXS5udW0gPSBGRk1JTihod2N0eC0+cWZbaV0ubnVtLCAgICAgICAgICAgXAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4ID8gbWF4IDog MSk7ICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChtYXgpICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAg IGh3Y3R4LT5xZltpXS5udW0gPSBGRk1JTihod2N0eC0+cWZbaV0ubnVtLCBtYXgpOyAgICAgXAor ICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGh3Y3R4LT5xZltpXS5mbGFncyA9IHR5cGU7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBod2N0eC0+ cWZbaV0udmlkZW9fY2FwcyA9IHZpZF9vcDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor ICAgICAgICAgICAgaHdjdHgtPm5iX3FmKys7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAoMCkKKwor ICAgIFBJQ0tfUUYoVktfUVVFVUVfR1JBUEhJQ1NfQklULCBWS19WSURFT19DT0RFQ19PUEVSQVRJ T05fTk9ORV9LSFIpOworICAgIFBJQ0tfUUYoVktfUVVFVUVfQ09NUFVURV9CSVQsIFZLX1ZJREVP X0NPREVDX09QRVJBVElPTl9OT05FX0tIUik7CisgICAgUElDS19RRihWS19RVUVVRV9UUkFOU0ZF Ul9CSVQsIFZLX1ZJREVPX0NPREVDX09QRVJBVElPTl9OT05FX0tIUik7CisKKyAgICBQSUNLX1FG KFZLX1FVRVVFX1ZJREVPX0VOQ09ERV9CSVRfS0hSLCBWS19WSURFT19DT0RFQ19PUEVSQVRJT05f RU5DT0RFX0gyNjRfQklUX0tIUik7CisgICAgUElDS19RRihWS19RVUVVRV9WSURFT19ERUNPREVf QklUX0tIUiwgVktfVklERU9fQ09ERUNfT1BFUkFUSU9OX0RFQ09ERV9IMjY0X0JJVF9LSFIpOwor CisgICAgUElDS19RRihWS19RVUVVRV9WSURFT19FTkNPREVfQklUX0tIUiwgVktfVklERU9fQ09E RUNfT1BFUkFUSU9OX0VOQ09ERV9IMjY1X0JJVF9LSFIpOworICAgIFBJQ0tfUUYoVktfUVVFVUVf VklERU9fREVDT0RFX0JJVF9LSFIsIFZLX1ZJREVPX0NPREVDX09QRVJBVElPTl9ERUNPREVfSDI2 NV9CSVRfS0hSKTsKKworI2lmZGVmIFZLX0tIUl92aWRlb19kZWNvZGVfdnA5CisgICAgUElDS19R RihWS19RVUVVRV9WSURFT19ERUNPREVfQklUX0tIUiwgVktfVklERU9fQ09ERUNfT1BFUkFUSU9O X0RFQ09ERV9WUDlfQklUX0tIUik7CisjZW5kaWYKKworI2lmZGVmIFZLX0tIUl92aWRlb19lbmNv ZGVfYXYxCisgICAgUElDS19RRihWS19RVUVVRV9WSURFT19FTkNPREVfQklUX0tIUiwgVktfVklE RU9fQ09ERUNfT1BFUkFUSU9OX0VOQ09ERV9BVjFfQklUX0tIUik7CisjZW5kaWYKKyAgICBQSUNL X1FGKFZLX1FVRVVFX1ZJREVPX0RFQ09ERV9CSVRfS0hSLCBWS19WSURFT19DT0RFQ19PUEVSQVRJ T05fREVDT0RFX0FWMV9CSVRfS0hSKTsKKworICAgIGF2X2ZyZWUocWYpOworICAgIGF2X2ZyZWUo cWZfdmlkKTsKKworI3VuZGVmIFBJQ0tfUUYKKworICAgIGNkLT5wUXVldWVDcmVhdGVJbmZvcyA9 IGF2X21hbGxvY19hcnJheShod2N0eC0+bmJfcWYsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHNpemVvZihWa0RldmljZVF1ZXVlQ3JlYXRlSW5mbykpOworICAg IGlmICghY2QtPnBRdWV1ZUNyZWF0ZUluZm9zKQorICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9N RU0pOworCisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGh3Y3R4LT5uYl9xZjsgaSsrKSB7 CisgICAgICAgIGludCBkdXAgPSAwOworICAgICAgICBmbG9hdCAqd2VpZ2h0cyA9IE5VTEw7Cisg ICAgICAgIFZrRGV2aWNlUXVldWVDcmVhdGVJbmZvICpwYzsKKyAgICAgICAgZm9yICh1aW50MzJf dCBqID0gMDsgaiA8IGNkLT5xdWV1ZUNyZWF0ZUluZm9Db3VudDsgaisrKSB7CisgICAgICAgICAg ICBpZiAoaHdjdHgtPnFmW2ldLmlkeCA9PSBjZC0+cFF1ZXVlQ3JlYXRlSW5mb3Nbal0ucXVldWVG YW1pbHlJbmRleCkgeworICAgICAgICAgICAgICAgIGR1cCA9IDE7CisgICAgICAgICAgICAgICAg YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGR1cCkKKyAgICAg ICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIHdlaWdodHMgPSBhdl9tYWxsb2NfYXJyYXkoaHdj dHgtPnFmW2ldLm51bSwgc2l6ZW9mKGZsb2F0KSk7CisgICAgICAgIGlmICghd2VpZ2h0cykgewor ICAgICAgICAgICAgZm9yICh1aW50MzJfdCBqID0gMDsgaiA8IGNkLT5xdWV1ZUNyZWF0ZUluZm9D b3VudDsgaisrKQorICAgICAgICAgICAgICAgIGF2X2ZyZWUoKHZvaWQgKiljZC0+cFF1ZXVlQ3Jl YXRlSW5mb3NbaV0ucFF1ZXVlUHJpb3JpdGllcyk7CisgICAgICAgICAgICBhdl9mcmVlKCh2b2lk ICopY2QtPnBRdWV1ZUNyZWF0ZUluZm9zKTsKKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVO T01FTSk7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKHVpbnQzMl90IGogPSAwOyBqIDwgaHdj dHgtPnFmW2ldLm51bTsgaisrKQorICAgICAgICAgICAgd2VpZ2h0c1tqXSA9IDEuMDsKKworICAg ICAgICBwYyA9IChWa0RldmljZVF1ZXVlQ3JlYXRlSW5mbyAqKWNkLT5wUXVldWVDcmVhdGVJbmZv czsKKyAgICAgICAgcGNbY2QtPnF1ZXVlQ3JlYXRlSW5mb0NvdW50KytdID0gKFZrRGV2aWNlUXVl dWVDcmVhdGVJbmZvKSB7CisgICAgICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9E RVZJQ0VfUVVFVUVfQ1JFQVRFX0lORk8sCisgICAgICAgICAgICAucXVldWVGYW1pbHlJbmRleCA9 IGh3Y3R4LT5xZltpXS5pZHgsCisgICAgICAgICAgICAucXVldWVDb3VudCA9IGh3Y3R4LT5xZltp XS5udW0sCisgICAgICAgICAgICAucFF1ZXVlUHJpb3JpdGllcyA9IHdlaWdodHMsCisgICAgICAg IH07CisgICAgfQorCisjaWYgRkZfQVBJX1ZVTEtBTl9GSVhFRF9RVUVVRVMKK0ZGX0RJU0FCTEVf REVQUkVDQVRJT05fV0FSTklOR1MKKyAgICAvKiBTZXR1cCBkZXByZWNhdGVkIGZpZWxkcyAqLwor ICAgIGh3Y3R4LT5xdWV1ZV9mYW1pbHlfaW5kZXggICAgICAgID0gLTE7CisgICAgaHdjdHgtPnF1 ZXVlX2ZhbWlseV9jb21wX2luZGV4ICAgPSAtMTsKKyAgICBod2N0eC0+cXVldWVfZmFtaWx5X3R4 X2luZGV4ICAgICA9IC0xOworICAgIGh3Y3R4LT5xdWV1ZV9mYW1pbHlfZW5jb2RlX2luZGV4ID0g LTE7CisgICAgaHdjdHgtPnF1ZXVlX2ZhbWlseV9kZWNvZGVfaW5kZXggPSAtMTsKKworI2RlZmlu ZSBTRVRfT0xEX1FGKGZpZWxkLCBuYl9maWVsZCwgdHlwZSkgICAgICAgICAgICAgXAorICAgIGRv IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAg ICBpZiAoZmllbGQgPCAwICYmIGh3Y3R4LT5xZltpXS5mbGFncyAmIHR5cGUpIHsgXAorICAgICAg ICAgICAgZmllbGQgPSBod2N0eC0+cWZbaV0uaWR4OyAgICAgICAgICAgICAgICAgXAorICAgICAg ICAgICAgbmJfZmllbGQgPSBod2N0eC0+cWZbaV0ubnVtOyAgICAgICAgICAgICAgXAorICAgICAg ICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0g d2hpbGUgKDApCisKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgaHdjdHgtPm5iX3FmOyBp KyspIHsKKyAgICAgICAgU0VUX09MRF9RRihod2N0eC0+cXVldWVfZmFtaWx5X2luZGV4LCBod2N0 eC0+bmJfZ3JhcGhpY3NfcXVldWVzLCBWS19RVUVVRV9HUkFQSElDU19CSVQpOworICAgICAgICBT RVRfT0xEX1FGKGh3Y3R4LT5xdWV1ZV9mYW1pbHlfY29tcF9pbmRleCwgaHdjdHgtPm5iX2NvbXBf cXVldWVzLCBWS19RVUVVRV9DT01QVVRFX0JJVCk7CisgICAgICAgIFNFVF9PTERfUUYoaHdjdHgt PnF1ZXVlX2ZhbWlseV90eF9pbmRleCwgaHdjdHgtPm5iX3R4X3F1ZXVlcywgVktfUVVFVUVfVFJB TlNGRVJfQklUKTsKKyAgICAgICAgU0VUX09MRF9RRihod2N0eC0+cXVldWVfZmFtaWx5X2VuY29k ZV9pbmRleCwgaHdjdHgtPm5iX2VuY29kZV9xdWV1ZXMsIFZLX1FVRVVFX1ZJREVPX0VOQ09ERV9C SVRfS0hSKTsKKyAgICAgICAgU0VUX09MRF9RRihod2N0eC0+cXVldWVfZmFtaWx5X2RlY29kZV9p bmRleCwgaHdjdHgtPm5iX2RlY29kZV9xdWV1ZXMsIFZLX1FVRVVFX1ZJREVPX0RFQ09ERV9CSVRf S0hSKTsKKyAgICB9CisKKyN1bmRlZiBTRVRfT0xEX1FGCitGRl9FTkFCTEVfREVQUkVDQVRJT05f V0FSTklOR1MKKyNlbmRpZgorCisgICAgcmV0dXJuIDA7Cit9CisKKy8qIE9ubHkgcmVzb3VyY2Vz IGNyZWF0ZWQgYnkgdnVsa2FuX2RldmljZV9jcmVhdGUgc2hvdWxkIGJlIHJlbGVhc2VkIGhlcmUs CisgKiByZXNvdXJjZXMgY3JlYXRlZCBieSB2dWxrYW5fZGV2aWNlX2luaXQgc2hvdWxkIGJlIHJl bGVhc2VkIGJ5CisgKiB2dWxrYW5fZGV2aWNlX3VuaW5pdCwgdG8gbWFrZSBzdXJlIHdlIGRvbid0 IGZyZWUgdXNlciBwcm92aWRlZCByZXNvdXJjZXMsCisgKiBhbmQgdGhlcmUgaXMgbm8gbGVhay4K KyAqLworc3RhdGljIHZvaWQgdnVsa2FuX2RldmljZV9mcmVlKEFWSFdEZXZpY2VDb250ZXh0ICpj dHgpCit7CisgICAgVnVsa2FuRGV2aWNlUHJpdiAqcCA9IGN0eC0+aHdjdHg7CisgICAgQVZWdWxr YW5EZXZpY2VDb250ZXh0ICpod2N0eCA9ICZwLT5wOworICAgIEZGVnVsa2FuRnVuY3Rpb25zICp2 ayA9ICZwLT52a2N0eC52a2ZuOworCisgICAgaWYgKGh3Y3R4LT5hY3RfZGV2KQorICAgICAgICB2 ay0+RGVzdHJveURldmljZShod2N0eC0+YWN0X2RldiwgaHdjdHgtPmFsbG9jKTsKKworICAgIGlm IChwLT5kZWJ1Z19jdHgpCisgICAgICAgIHZrLT5EZXN0cm95RGVidWdVdGlsc01lc3NlbmdlckVY VChod2N0eC0+aW5zdCwgcC0+ZGVidWdfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaHdjdHgtPmFsbG9jKTsKKworICAgIGlmIChod2N0eC0+aW5zdCkKKyAg ICAgICAgdmstPkRlc3Ryb3lJbnN0YW5jZShod2N0eC0+aW5zdCwgaHdjdHgtPmFsbG9jKTsKKwor ICAgIGlmIChwLT5saWJ2dWxrYW4pCisgICAgICAgIGRsY2xvc2UocC0+bGlidnVsa2FuKTsKKwor ICAgIFJFTEVBU0VfUFJPUFMoaHdjdHgtPmVuYWJsZWRfaW5zdF9leHRlbnNpb25zLCBod2N0eC0+ bmJfZW5hYmxlZF9pbnN0X2V4dGVuc2lvbnMpOworICAgIFJFTEVBU0VfUFJPUFMoaHdjdHgtPmVu YWJsZWRfZGV2X2V4dGVuc2lvbnMsIGh3Y3R4LT5uYl9lbmFibGVkX2Rldl9leHRlbnNpb25zKTsK K30KKworc3RhdGljIHZvaWQgdnVsa2FuX2RldmljZV91bmluaXQoQVZIV0RldmljZUNvbnRleHQg KmN0eCkKK3sKKyAgICBWdWxrYW5EZXZpY2VQcml2ICpwID0gY3R4LT5od2N0eDsKKworICAgIGZv ciAodWludDMyX3QgaSA9IDA7IGkgPCBwLT5uYl90b3RfcWZzOyBpKyspIHsKKyAgICAgICAgcHRo cmVhZF9tdXRleF9kZXN0cm95KHAtPnFmX211dGV4W2ldKTsKKyAgICAgICAgYXZfZnJlZXAoJnAt PnFmX211dGV4W2ldKTsKKyAgICB9CisgICAgYXZfZnJlZXAoJnAtPnFmX211dGV4KTsKKworICAg IGZmX3ZrX3VuaW5pdCgmcC0+dmtjdHgpOworfQorCitzdGF0aWMgaW50IHZ1bGthbl9kZXZpY2Vf aGFzX3JlYmFyKEFWSFdEZXZpY2VDb250ZXh0ICpjdHgpCit7CisgICAgVnVsa2FuRGV2aWNlUHJp diAqcCA9IGN0eC0+aHdjdHg7CisgICAgVmtEZXZpY2VTaXplIG1heF92cmFtID0gMCwgbWF4X3Zp c2libGVfdnJhbSA9IDA7CisKKyAgICAvKiBHZXQgZGV2aWNlIG1lbW9yeSBwcm9wZXJ0aWVzICov CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwLT5tcHJvcHMubWVtb3J5VHlwZUNvdW50OyBpKysp IHsKKyAgICAgICAgY29uc3QgVmtNZW1vcnlUeXBlIHR5cGUgPSBwLT5tcHJvcHMubWVtb3J5VHlw ZXNbaV07CisgICAgICAgIGNvbnN0IFZrTWVtb3J5SGVhcCBoZWFwID0gcC0+bXByb3BzLm1lbW9y eUhlYXBzW3R5cGUuaGVhcEluZGV4XTsKKyAgICAgICAgaWYgKCEodHlwZS5wcm9wZXJ0eUZsYWdz ICYgVktfTUVNT1JZX1BST1BFUlRZX0RFVklDRV9MT0NBTF9CSVQpKQorICAgICAgICAgICAgY29u dGludWU7CisgICAgICAgIG1heF92cmFtID0gRkZNQVgobWF4X3ZyYW0sIGhlYXAuc2l6ZSk7Cisg ICAgICAgIGlmICh0eXBlLnByb3BlcnR5RmxhZ3MgJiBWS19NRU1PUllfUFJPUEVSVFlfSE9TVF9W SVNJQkxFX0JJVCkKKyAgICAgICAgICAgIG1heF92aXNpYmxlX3ZyYW0gPSBGRk1BWChtYXhfdmlz aWJsZV92cmFtLCBoZWFwLnNpemUpOworICAgIH0KKworICAgIHJldHVybiBtYXhfdnJhbSAtIG1h eF92aXNpYmxlX3ZyYW0gPCAxMDI0OyAvKiAxIGtCIHRvbGVyYW5jZSAqLworfQorCitzdGF0aWMg aW50IHZ1bGthbl9kZXZpY2VfY3JlYXRlX2ludGVybmFsKEFWSFdEZXZpY2VDb250ZXh0ICpjdHgs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZ1bGthbkRldmljZVNl bGVjdGlvbiAqZGV2X3NlbGVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaW50IGRpc2FibGVfbXVsdGlwbGFuZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgQVZEaWN0aW9uYXJ5ICpvcHRzLCBpbnQgZmxhZ3MpCit7CisgICAgaW50 IGVyciA9IDA7CisgICAgVmtSZXN1bHQgcmV0OworICAgIEFWRGljdGlvbmFyeUVudHJ5ICpvcHRf ZDsKKyAgICBWdWxrYW5EZXZpY2VQcml2ICpwID0gY3R4LT5od2N0eDsKKyAgICBBVlZ1bGthbkRl dmljZUNvbnRleHQgKmh3Y3R4ID0gJnAtPnA7CisgICAgRkZWdWxrYW5GdW5jdGlvbnMgKnZrID0g JnAtPnZrY3R4LnZrZm47CisgICAgZW51bSBGRlZ1bGthbkRlYnVnTW9kZSBkZWJ1Z19tb2RlID0g RkZfVlVMS0FOX0RFQlVHX05PTkU7CisgICAgVnVsa2FuRGV2aWNlRmVhdHVyZXMgc3VwcG9ydGVk X2ZlYXRzID0geyAwIH07CisgICAgVmtEZXZpY2VDcmVhdGVJbmZvIGRldl9pbmZvID0geworICAg ICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9ERVZJQ0VfQ1JFQVRFX0lORk8sCisgICAg fTsKKworICAgIC8qIENyZWF0ZSBhbiBpbnN0YW5jZSBpZiBub3QgZ2l2ZW4gb25lICovCisgICAg aWYgKChlcnIgPSBjcmVhdGVfaW5zdGFuY2UoY3R4LCBvcHRzLCAmZGVidWdfbW9kZSkpKQorICAg ICAgICBnb3RvIGVuZDsKKworICAgIC8qIEZpbmQgYSBwaHlzaWNhbCBkZXZpY2UgKGlmIG5vdCBn aXZlbiBvbmUpICovCisgICAgaWYgKChlcnIgPSBmaW5kX2RldmljZShjdHgsIGRldl9zZWxlY3Qp KSkKKyAgICAgICAgZ290byBlbmQ7CisKKyAgICAvKiBGaW5kIGFuZCBlbmFibGUgZXh0ZW5zaW9u cyBmb3IgdGhlIHBoeXNpY2FsIGRldmljZSAqLworICAgIGlmICgoZXJyID0gY2hlY2tfZXh0ZW5z aW9ucyhjdHgsIDEsIG9wdHMsICZkZXZfaW5mby5wcEVuYWJsZWRFeHRlbnNpb25OYW1lcywKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRldl9pbmZvLmVuYWJsZWRFeHRlbnNpb25D b3VudCwgZGVidWdfbW9kZSkpKSB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZGV2X2lu Zm8ucXVldWVDcmVhdGVJbmZvQ291bnQ7IGkrKykKKyAgICAgICAgICAgIGF2X2ZyZWUoKHZvaWQg KilkZXZfaW5mby5wUXVldWVDcmVhdGVJbmZvc1tpXS5wUXVldWVQcmlvcml0aWVzKTsKKyAgICAg ICAgYXZfZnJlZSgodm9pZCAqKWRldl9pbmZvLnBRdWV1ZUNyZWF0ZUluZm9zKTsKKyAgICAgICAg Z290byBlbmQ7CisgICAgfQorCisgICAgLyogR2V0IHN1cHBvcnRlZCBtZW1vcnkgdHlwZXMgKi8K KyAgICB2ay0+R2V0UGh5c2ljYWxEZXZpY2VNZW1vcnlQcm9wZXJ0aWVzKGh3Y3R4LT5waHlzX2Rl diwgJnAtPm1wcm9wcyk7CisKKyAgICAvKiBHZXQgYWxsIHN1cHBvcnRlZCBmZWF0dXJlcyBmb3Ig dGhlIHBoeXNpY2FsIGRldmljZSAqLworICAgIGRldmljZV9mZWF0dXJlc19pbml0KGN0eCwgJnN1 cHBvcnRlZF9mZWF0cyk7CisgICAgdmstPkdldFBoeXNpY2FsRGV2aWNlRmVhdHVyZXMyKGh3Y3R4 LT5waHlzX2RldiwgJnN1cHBvcnRlZF9mZWF0cy5kZXZpY2UpOworCisgICAgLyogQ29weSBhbGwg bmVlZGVkIGZlYXR1cmVzIGZyb20gdGhvc2Ugc3VwcG9ydGVkIGFuZCBhY3RpdmF0ZSB0aGVtICov CisgICAgZGV2aWNlX2ZlYXR1cmVzX2luaXQoY3R4LCAmcC0+ZmVhdHMpOworICAgIGRldmljZV9m ZWF0dXJlc19jb3B5X25lZWRlZCgmcC0+ZmVhdHMsICZzdXBwb3J0ZWRfZmVhdHMpOworICAgIGRl dl9pbmZvLnBOZXh0ID0gcC0+ZmVhdHMuZGV2aWNlLnBOZXh0OworICAgIGRldl9pbmZvLnBFbmFi bGVkRmVhdHVyZXMgPSAmcC0+ZmVhdHMuZGV2aWNlLmZlYXR1cmVzOworCisgICAgLyogU2V0dXAg ZW5hYmxlZCBxdWV1ZSBmYW1pbGllcyAqLworICAgIGlmICgoZXJyID0gc2V0dXBfcXVldWVfZmFt aWxpZXMoY3R4LCAmZGV2X2luZm8pKSkKKyAgICAgICAgZ290byBlbmQ7CisKKyAgICAvKiBGaW5h bGx5IGNyZWF0ZSB0aGUgZGV2aWNlICovCisgICAgcmV0ID0gdmstPkNyZWF0ZURldmljZShod2N0 eC0+cGh5c19kZXYsICZkZXZfaW5mbywgaHdjdHgtPmFsbG9jLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgJmh3Y3R4LT5hY3RfZGV2KTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZGV2 X2luZm8ucXVldWVDcmVhdGVJbmZvQ291bnQ7IGkrKykKKyAgICAgICAgYXZfZnJlZSgodm9pZCAq KWRldl9pbmZvLnBRdWV1ZUNyZWF0ZUluZm9zW2ldLnBRdWV1ZVByaW9yaXRpZXMpOworICAgIGF2 X2ZyZWUoKHZvaWQgKilkZXZfaW5mby5wUXVldWVDcmVhdGVJbmZvcyk7CisKKyAgICBpZiAocmV0 ICE9IFZLX1NVQ0NFU1MpIHsKKyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiRGV2 aWNlIGNyZWF0aW9uIGZhaWx1cmU6ICVzXG4iLAorICAgICAgICAgICAgICAgZmZfdmtfcmV0MnN0 cihyZXQpKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZXZfaW5mby5lbmFibGVkRXh0 ZW5zaW9uQ291bnQ7IGkrKykKKyAgICAgICAgICAgIGF2X2ZyZWUoKHZvaWQgKilkZXZfaW5mby5w cEVuYWJsZWRFeHRlbnNpb25OYW1lc1tpXSk7CisgICAgICAgIGF2X2ZyZWUoKHZvaWQgKilkZXZf aW5mby5wcEVuYWJsZWRFeHRlbnNpb25OYW1lcyk7CisgICAgICAgIGVyciA9IEFWRVJST1JfRVhU RVJOQUw7CisgICAgICAgIGdvdG8gZW5kOworICAgIH0KKworICAgIC8qIFRpbGVkIGltYWdlcyBz ZXR0aW5nLCB1c2UgdGhlbSBieSBkZWZhdWx0ICovCisgICAgb3B0X2QgPSBhdl9kaWN0X2dldChv cHRzLCAibGluZWFyX2ltYWdlcyIsIE5VTEwsIDApOworICAgIGlmIChvcHRfZCkKKyAgICAgICAg cC0+dXNlX2xpbmVhcl9pbWFnZXMgPSBzdHJ0b2wob3B0X2QtPnZhbHVlLCBOVUxMLCAxMCk7CisK KyAgICAvKiBMaW1pdCBxdWV1ZXMgdG8gYSBnaXZlbiBudW1iZXIgaWYgbmVlZGVkICovCisgICAg b3B0X2QgPSBhdl9kaWN0X2dldChvcHRzLCAibGltaXRfcXVldWVzIiwgTlVMTCwgMCk7CisgICAg aWYgKG9wdF9kKQorICAgICAgICBwLT5saW1pdF9xdWV1ZXMgPSBzdHJ0b2wob3B0X2QtPnZhbHVl LCBOVUxMLCAxMCk7CisKKyAgICAvKiBUaGUgZGlzYWJsZV9tdWx0aXBsYW5lIGFyZ3VtZW50IHRh a2VzIHByZWNlZGVudCBvdmVyIHRoZSBvcHRpb24gKi8KKyAgICBwLT5kaXNhYmxlX211bHRpcGxh bmUgPSBkaXNhYmxlX211bHRpcGxhbmU7CisgICAgaWYgKCFwLT5kaXNhYmxlX211bHRpcGxhbmUp IHsKKyAgICAgICAgb3B0X2QgPSBhdl9kaWN0X2dldChvcHRzLCAiZGlzYWJsZV9tdWx0aXBsYW5l IiwgTlVMTCwgMCk7CisgICAgICAgIGlmIChvcHRfZCkKKyAgICAgICAgICAgIHAtPmRpc2FibGVf bXVsdGlwbGFuZSA9IHN0cnRvbChvcHRfZC0+dmFsdWUsIE5VTEwsIDEwKTsKKyAgICB9CisKKyAg ICAvKiBEaXNhYmxlIGhvc3QgcG9pbnRlciBpbXBvcnRzIChieSBkZWZhdWx0IG9uIG52aWRpYSkg Ki8KKyAgICBwLT5hdm9pZF9ob3N0X2ltcG9ydCA9IHAtPmRwcm9wcy5kcml2ZXJJRCA9PSBWS19E UklWRVJfSURfTlZJRElBX1BST1BSSUVUQVJZOworICAgIG9wdF9kID0gYXZfZGljdF9nZXQob3B0 cywgImF2b2lkX2hvc3RfaW1wb3J0IiwgTlVMTCwgMCk7CisgICAgaWYgKG9wdF9kKQorICAgICAg ICBwLT5hdm9pZF9ob3N0X2ltcG9ydCA9IHN0cnRvbChvcHRfZC0+dmFsdWUsIE5VTEwsIDEwKTsK KworICAgIC8qIFNldCB0aGUgcHVibGljIGRldmljZSBmZWF0dXJlIHN0cnVjdCBhbmQgaXRzIHBO ZXh0IGNoYWluICovCisgICAgaHdjdHgtPmRldmljZV9mZWF0dXJlcyA9IHAtPmZlYXRzLmRldmlj ZTsKKworICAgIC8qIFNldCB0aGUgbGlzdCBvZiBhbGwgYWN0aXZlIGV4dGVuc2lvbnMgKi8KKyAg ICBod2N0eC0+ZW5hYmxlZF9kZXZfZXh0ZW5zaW9ucyA9IGRldl9pbmZvLnBwRW5hYmxlZEV4dGVu c2lvbk5hbWVzOworICAgIGh3Y3R4LT5uYl9lbmFibGVkX2Rldl9leHRlbnNpb25zID0gZGV2X2lu Zm8uZW5hYmxlZEV4dGVuc2lvbkNvdW50OworCisgICAgLyogVGhlIGV4dGVuc2lvbiBsaXN0cyBu ZWVkIHRvIGJlIGZyZWVkICovCisgICAgY3R4LT5mcmVlID0gdnVsa2FuX2RldmljZV9mcmVlOwor CitlbmQ6CisgICAgcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgbG9ja19xdWV1ZShBVkhX RGV2aWNlQ29udGV4dCAqY3R4LCB1aW50MzJfdCBxdWV1ZV9mYW1pbHksIHVpbnQzMl90IGluZGV4 KQoreworICAgIFZ1bGthbkRldmljZVByaXYgKnAgPSBjdHgtPmh3Y3R4OworICAgIHB0aHJlYWRf bXV0ZXhfbG9jaygmcC0+cWZfbXV0ZXhbcXVldWVfZmFtaWx5XVtpbmRleF0pOworfQorCitzdGF0 aWMgdm9pZCB1bmxvY2tfcXVldWUoQVZIV0RldmljZUNvbnRleHQgKmN0eCwgdWludDMyX3QgcXVl dWVfZmFtaWx5LCB1aW50MzJfdCBpbmRleCkKK3sKKyAgICBWdWxrYW5EZXZpY2VQcml2ICpwID0g Y3R4LT5od2N0eDsKKyAgICBwdGhyZWFkX211dGV4X3VubG9jaygmcC0+cWZfbXV0ZXhbcXVldWVf ZmFtaWx5XVtpbmRleF0pOworfQorCitzdGF0aWMgaW50IHZ1bGthbl9kZXZpY2VfaW5pdChBVkhX RGV2aWNlQ29udGV4dCAqY3R4KQoreworICAgIGludCBlcnIgPSAwOworICAgIHVpbnQzMl90IHFm X251bTsKKyAgICBWdWxrYW5EZXZpY2VQcml2ICpwID0gY3R4LT5od2N0eDsKKyAgICBBVlZ1bGth bkRldmljZUNvbnRleHQgKmh3Y3R4ID0gJnAtPnA7CisgICAgRkZWdWxrYW5GdW5jdGlvbnMgKnZr ID0gJnAtPnZrY3R4LnZrZm47CisgICAgVmtRdWV1ZUZhbWlseVByb3BlcnRpZXMyICpxZjsKKyAg ICBWa1F1ZXVlRmFtaWx5VmlkZW9Qcm9wZXJ0aWVzS0hSICpxZl92aWQ7CisgICAgVmtQaHlzaWNh bERldmljZUV4dGVybmFsU2VtYXBob3JlSW5mbyBleHRfc2VtX3Byb3BzX2luZm87CisgICAgaW50 IGdyYXBoX2luZGV4LCBjb21wX2luZGV4LCB0eF9pbmRleCwgZW5jX2luZGV4LCBkZWNfaW5kZXg7 CisKKyAgICAvKiBTZXQgZGV2aWNlIGV4dGVuc2lvbiBmbGFncyAqLworICAgIGZvciAoaW50IGkg PSAwOyBpIDwgaHdjdHgtPm5iX2VuYWJsZWRfZGV2X2V4dGVuc2lvbnM7IGkrKykgeworICAgICAg ICBmb3IgKGludCBqID0gMDsgaiA8IEZGX0FSUkFZX0VMRU1TKG9wdGlvbmFsX2RldmljZV9leHRz KTsgaisrKSB7CisgICAgICAgICAgICBpZiAoIXN0cmNtcChod2N0eC0+ZW5hYmxlZF9kZXZfZXh0 ZW5zaW9uc1tpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmFsX2RldmljZV9leHRz W2pdLm5hbWUpKSB7CisgICAgICAgICAgICAgICAgcC0+dmtjdHguZXh0ZW5zaW9ucyB8PSBvcHRp b25hbF9kZXZpY2VfZXh0c1tqXS5mbGFnOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg ICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgZXJyID0gZmZfdmtfbG9hZF9mdW5jdGlv bnMoY3R4LCB2aywgcC0+dmtjdHguZXh0ZW5zaW9ucywgMSwgMSk7CisgICAgaWYgKGVyciA8IDAp IHsKKyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiVW5hYmxlIHRvIGxvYWQgZnVu Y3Rpb25zIVxuIik7CisgICAgICAgIHJldHVybiBlcnI7CisgICAgfQorCisgICAgcC0+cHJvcHMu c1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9QSFlTSUNBTF9ERVZJQ0VfUFJPUEVSVElFU18yOwor ICAgIHAtPnByb3BzLnBOZXh0ID0gJnAtPmhwcm9wczsKKyAgICBwLT5ocHJvcHMuc1R5cGUgPSBW S19TVFJVQ1RVUkVfVFlQRV9QSFlTSUNBTF9ERVZJQ0VfRVhURVJOQUxfTUVNT1JZX0hPU1RfUFJP UEVSVElFU19FWFQ7CisgICAgcC0+aHByb3BzLnBOZXh0ID0gJnAtPmRwcm9wczsKKyAgICBwLT5k cHJvcHMuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9QSFlTSUNBTF9ERVZJQ0VfRFJJVkVSX1BS T1BFUlRJRVM7CisKKyAgICB2ay0+R2V0UGh5c2ljYWxEZXZpY2VQcm9wZXJ0aWVzMihod2N0eC0+ cGh5c19kZXYsICZwLT5wcm9wcyk7CisgICAgYXZfbG9nKGN0eCwgQVZfTE9HX1ZFUkJPU0UsICJV c2luZyBkZXZpY2U6ICVzXG4iLAorICAgICAgICAgICBwLT5wcm9wcy5wcm9wZXJ0aWVzLmRldmlj ZU5hbWUpOworICAgIGF2X2xvZyhjdHgsIEFWX0xPR19WRVJCT1NFLCAiQWxpZ25tZW50czpcbiIp OworICAgIGF2X2xvZyhjdHgsIEFWX0xPR19WRVJCT1NFLCAiICAgIG9wdGltYWxCdWZmZXJDb3B5 Um93UGl0Y2hBbGlnbm1lbnQ6ICUiUFJJdTY0IlxuIiwKKyAgICAgICAgICAgcC0+cHJvcHMucHJv cGVydGllcy5saW1pdHMub3B0aW1hbEJ1ZmZlckNvcHlSb3dQaXRjaEFsaWdubWVudCk7CisgICAg YXZfbG9nKGN0eCwgQVZfTE9HX1ZFUkJPU0UsICIgICAgbWluTWVtb3J5TWFwQWxpZ25tZW50OiAg ICAgICAgICAgICAgJSJTSVpFX1NQRUNJRklFUiJcbiIsCisgICAgICAgICAgIHAtPnByb3BzLnBy b3BlcnRpZXMubGltaXRzLm1pbk1lbW9yeU1hcEFsaWdubWVudCk7CisgICAgYXZfbG9nKGN0eCwg QVZfTE9HX1ZFUkJPU0UsICIgICAgbm9uQ29oZXJlbnRBdG9tU2l6ZTogICAgICAgICAgICAgICAg JSJQUkl1NjQiXG4iLAorICAgICAgICAgICBwLT5wcm9wcy5wcm9wZXJ0aWVzLmxpbWl0cy5ub25D b2hlcmVudEF0b21TaXplKTsKKyAgICBpZiAocC0+dmtjdHguZXh0ZW5zaW9ucyAmIEZGX1ZLX0VY VF9FWFRFUk5BTF9IT1NUX01FTU9SWSkKKyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX1ZFUkJP U0UsICIgICAgbWluSW1wb3J0ZWRIb3N0UG9pbnRlckFsaWdubWVudDogICAgJSJQUkl1NjQiXG4i LAorICAgICAgICAgICAgICAgcC0+aHByb3BzLm1pbkltcG9ydGVkSG9zdFBvaW50ZXJBbGlnbm1l bnQpOworCisgICAgdmstPkdldFBoeXNpY2FsRGV2aWNlUXVldWVGYW1pbHlQcm9wZXJ0aWVzKGh3 Y3R4LT5waHlzX2RldiwgJnFmX251bSwgTlVMTCk7CisgICAgaWYgKCFxZl9udW0pIHsKKyAgICAg ICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiRmFpbGVkIHRvIGdldCBxdWV1ZXMhXG4iKTsK KyAgICAgICAgcmV0dXJuIEFWRVJST1JfRVhURVJOQUw7CisgICAgfQorCisgICAgZXh0X3NlbV9w cm9wc19pbmZvID0gKFZrUGh5c2ljYWxEZXZpY2VFeHRlcm5hbFNlbWFwaG9yZUluZm8pIHsKKyAg ICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfUEhZU0lDQUxfREVWSUNFX0VYVEVSTkFM X1NFTUFQSE9SRV9JTkZPLAorICAgIH07CisKKyAgICAvKiBPcGFxdWUgRkQgc2VtYXBob3JlIHBy b3BlcnRpZXMgKi8KKyAgICBleHRfc2VtX3Byb3BzX2luZm8uaGFuZGxlVHlwZSA9CisjaWZkZWYg X1dJTjMyCisgICAgICAgIElzV2luZG93czhPckdyZWF0ZXIoKQorICAgICAgICAgICAgPyBWS19F WFRFUk5BTF9TRU1BUEhPUkVfSEFORExFX1RZUEVfT1BBUVVFX1dJTjMyX0JJVAorICAgICAgICAg ICAgOiBWS19FWFRFUk5BTF9TRU1BUEhPUkVfSEFORExFX1RZUEVfT1BBUVVFX1dJTjMyX0tNVF9C SVQ7CisjZWxzZQorICAgICAgICBWS19FWFRFUk5BTF9TRU1BUEhPUkVfSEFORExFX1RZUEVfT1BB UVVFX0ZEX0JJVDsKKyNlbmRpZgorICAgIHAtPmV4dF9zZW1fcHJvcHNfb3BhcXVlLnNUeXBlID0g VktfU1RSVUNUVVJFX1RZUEVfRVhURVJOQUxfU0VNQVBIT1JFX1BST1BFUlRJRVM7CisgICAgdmst PkdldFBoeXNpY2FsRGV2aWNlRXh0ZXJuYWxTZW1hcGhvcmVQcm9wZXJ0aWVzKGh3Y3R4LT5waHlz X2RldiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJmV4dF9zZW1fcHJvcHNfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJnAtPmV4dF9zZW1fcHJvcHNfb3BhcXVlKTsKKworICAgIHFm ID0gYXZfbWFsbG9jX2FycmF5KHFmX251bSwgc2l6ZW9mKFZrUXVldWVGYW1pbHlQcm9wZXJ0aWVz MikpOworICAgIGlmICghcWYpCisgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7CisKKyAg ICBxZl92aWQgPSBhdl9tYWxsb2NfYXJyYXkocWZfbnVtLCBzaXplb2YoVmtRdWV1ZUZhbWlseVZp ZGVvUHJvcGVydGllc0tIUikpOworICAgIGlmICghcWZfdmlkKSB7CisgICAgICAgIGF2X2ZyZWUo cWYpOworICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOworICAgIH0KKworICAgIGZvciAo dWludDMyX3QgaSA9IDA7IGkgPCBxZl9udW07IGkrKykgeworICAgICAgICBxZl92aWRbaV0gPSAo VmtRdWV1ZUZhbWlseVZpZGVvUHJvcGVydGllc0tIUikgeworICAgICAgICAgICAgLnNUeXBlID0g VktfU1RSVUNUVVJFX1RZUEVfUVVFVUVfRkFNSUxZX1ZJREVPX1BST1BFUlRJRVNfS0hSLAorICAg ICAgICB9OworICAgICAgICBxZltpXSA9IChWa1F1ZXVlRmFtaWx5UHJvcGVydGllczIpIHsKKyAg ICAgICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX1FVRVVFX0ZBTUlMWV9QUk9QRVJU SUVTXzIsCisgICAgICAgICAgICAucE5leHQgPSBwLT52a2N0eC5leHRlbnNpb25zICYgRkZfVktf RVhUX1ZJREVPX1FVRVVFID8gJnFmX3ZpZFtpXSA6IE5VTEwsCisgICAgICAgIH07CisgICAgfQor CisgICAgdmstPkdldFBoeXNpY2FsRGV2aWNlUXVldWVGYW1pbHlQcm9wZXJ0aWVzMihod2N0eC0+ cGh5c19kZXYsICZxZl9udW0sIHFmKTsKKworICAgIHAtPnFmX211dGV4ID0gYXZfY2FsbG9jKHFm X251bSwgc2l6ZW9mKCpwLT5xZl9tdXRleCkpOworICAgIGlmICghcC0+cWZfbXV0ZXgpIHsKKyAg ICAgICAgZXJyID0gQVZFUlJPUihFTk9NRU0pOworICAgICAgICBnb3RvIGVuZDsKKyAgICB9Cisg ICAgcC0+bmJfdG90X3FmcyA9IHFmX251bTsKKworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkg PCBxZl9udW07IGkrKykgeworICAgICAgICBwLT5xZl9tdXRleFtpXSA9IGF2X2NhbGxvYyhxZltp XS5xdWV1ZUZhbWlseVByb3BlcnRpZXMucXVldWVDb3VudCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc2l6ZW9mKCoqcC0+cWZfbXV0ZXgpKTsKKyAgICAgICAgaWYgKCFwLT5x Zl9tdXRleFtpXSkgeworICAgICAgICAgICAgZXJyID0gQVZFUlJPUihFTk9NRU0pOworICAgICAg ICAgICAgZ290byBlbmQ7CisgICAgICAgIH0KKyAgICAgICAgZm9yICh1aW50MzJfdCBqID0gMDsg aiA8IHFmW2ldLnF1ZXVlRmFtaWx5UHJvcGVydGllcy5xdWV1ZUNvdW50OyBqKyspIHsKKyAgICAg ICAgICAgIGVyciA9IHB0aHJlYWRfbXV0ZXhfaW5pdCgmcC0+cWZfbXV0ZXhbaV1bal0sIE5VTEwp OworICAgICAgICAgICAgaWYgKGVyciAhPSAwKSB7CisgICAgICAgICAgICAgICAgYXZfbG9nKGN0 eCwgQVZfTE9HX0VSUk9SLCAicHRocmVhZF9tdXRleF9pbml0IGZhaWxlZCA6ICVzXG4iLAorICAg ICAgICAgICAgICAgICAgICAgICBhdl9lcnIyc3RyKGVycikpOworICAgICAgICAgICAgICAgIGVy ciA9IEFWRVJST1IoZXJyKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVuZDsKKyAgICAgICAgICAg IH0KKyAgICAgICAgfQorICAgIH0KKworI2lmIEZGX0FQSV9WVUxLQU5fRklYRURfUVVFVUVTCitG Rl9ESVNBQkxFX0RFUFJFQ0FUSU9OX1dBUk5JTkdTCisgICAgZ3JhcGhfaW5kZXggPSBod2N0eC0+ bmJfZ3JhcGhpY3NfcXVldWVzID8gaHdjdHgtPnF1ZXVlX2ZhbWlseV9pbmRleCA6IC0xOworICAg IGNvbXBfaW5kZXggID0gaHdjdHgtPm5iX2NvbXBfcXVldWVzID8gaHdjdHgtPnF1ZXVlX2ZhbWls eV9jb21wX2luZGV4IDogLTE7CisgICAgdHhfaW5kZXggICAgPSBod2N0eC0+bmJfdHhfcXVldWVz ID8gaHdjdHgtPnF1ZXVlX2ZhbWlseV90eF9pbmRleCA6IC0xOworICAgIGRlY19pbmRleCAgID0g aHdjdHgtPm5iX2RlY29kZV9xdWV1ZXMgPyBod2N0eC0+cXVldWVfZmFtaWx5X2RlY29kZV9pbmRl eCA6IC0xOworICAgIGVuY19pbmRleCAgID0gaHdjdHgtPm5iX2VuY29kZV9xdWV1ZXMgPyBod2N0 eC0+cXVldWVfZmFtaWx5X2VuY29kZV9pbmRleCA6IC0xOworCisjZGVmaW5lIENIRUNLX1FVRVVF KHR5cGUsIHJlcXVpcmVkLCBmaWR4LCBjdHhfcWYsIHFjKSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCisgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCisgICAgICAgIGlmIChjdHhfcWYgPCAwICYmIHJlcXVpcmVkKSB7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAg ICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICIlcyBxdWV1ZSBmYW1pbHkgaXMgcmVxdWly ZWQsIGJ1dCBtYXJrZWQgYXMgbWlzc2luZyIgICAgICBcCisgICAgICAgICAgICAgICAgICAgIiBp biB0aGUgY29udGV4dCFcbiIsIHR5cGUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBlcnIgPSBBVkVSUk9SKEVJTlZBTCk7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCisgICAgICAgICAgICBnb3RvIGVuZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0g ZWxzZSBpZiAoZmlkeCA8IDAgfHwgY3R4X3FmIDwgMCkgeyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBicmVhazsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCisgICAgICAgIH0gZWxzZSBpZiAoY3R4X3FmID49IHFmX251bSkgeyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc CisgICAgICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJJbnZhbGlkICVzIGZhbWls eSBpbmRleCAlaSAoZGV2aWNlIGhhcyAlaSBmYW1pbGllcykhXG4iLCBcCisgICAgICAgICAgICAg ICAgICAgdHlwZSwgY3R4X3FmLCBxZl9udW0pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBlcnIgPSBBVkVSUk9SKEVJ TlZBTCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCisgICAgICAgICAgICBnb3RvIGVuZDsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg ICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19WRVJC T1NFLCAiVXNpbmcgcXVldWUgZmFtaWx5ICVpIChxdWV1ZXM6ICVpKSIgICAgICAgICAgICAgICAg ICAgICAgICBcCisgICAgICAgICAgICAgICAiIGZvciVzJXMlcyVzJXNcbiIsICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg ICAgICAgICAgICBjdHhfcWYsIHFjLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICBjdHhf cWYgPT0gZ3JhcGhfaW5kZXggPyAiIGdyYXBoaWNzIiA6ICIiLCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICBjdHhfcWYgPT0gY29tcF9pbmRl eCAgPyAiIGNvbXB1dGUiIDogIiIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCisgICAgICAgICAgICAgICBjdHhfcWYgPT0gdHhfaW5kZXggICAgPyAiIHRyYW5zZmVy cyIgOiAiIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAg ICAgICAgICBjdHhfcWYgPT0gZW5jX2luZGV4ICAgPyAiIGVuY29kZSIgOiAiIiwgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICBjdHhfcWYg PT0gZGVjX2luZGV4ICAgPyAiIGRlY29kZSIgOiAiIik7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCisgICAgICAgIGdyYXBoX2luZGV4ID0gKGN0eF9xZiA9PSBncmFw aF9pbmRleCkgPyAtMSA6IGdyYXBoX2luZGV4OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCisgICAgICAgIGNvbXBfaW5kZXggID0gKGN0eF9xZiA9PSBjb21wX2luZGV4KSAgPyAtMSA6 IGNvbXBfaW5kZXg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHR4 X2luZGV4ICAgID0gKGN0eF9xZiA9PSB0eF9pbmRleCkgICAgPyAtMSA6IHR4X2luZGV4OyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGVuY19pbmRleCAgID0gKGN0 eF9xZiA9PSBlbmNfaW5kZXgpICAgPyAtMSA6IGVuY19pbmRleDsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCisgICAgICAgIGRlY19pbmRleCAgID0gKGN0eF9xZiA9PSBkZWNfaW5k ZXgpICAgPyAtMSA6IGRlY19pbmRleDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc CisgICAgfSB3aGlsZSAoMCkKKworICAgIENIRUNLX1FVRVVFKCJncmFwaGljcyIsIDAsIGdyYXBo X2luZGV4LCBod2N0eC0+cXVldWVfZmFtaWx5X2luZGV4LCAgICAgICAgaHdjdHgtPm5iX2dyYXBo aWNzX3F1ZXVlcyk7CisgICAgQ0hFQ0tfUVVFVUUoImNvbXB1dGUiLCAgMSwgY29tcF9pbmRleCwg IGh3Y3R4LT5xdWV1ZV9mYW1pbHlfY29tcF9pbmRleCwgICBod2N0eC0+bmJfY29tcF9xdWV1ZXMp OworICAgIENIRUNLX1FVRVVFKCJ1cGxvYWQiLCAgIDEsIHR4X2luZGV4LCAgICBod2N0eC0+cXVl dWVfZmFtaWx5X3R4X2luZGV4LCAgICAgaHdjdHgtPm5iX3R4X3F1ZXVlcyk7CisgICAgQ0hFQ0tf UVVFVUUoImRlY29kZSIsICAgMCwgZGVjX2luZGV4LCAgIGh3Y3R4LT5xdWV1ZV9mYW1pbHlfZGVj b2RlX2luZGV4LCBod2N0eC0+bmJfZGVjb2RlX3F1ZXVlcyk7CisgICAgQ0hFQ0tfUVVFVUUoImVu Y29kZSIsICAgMCwgZW5jX2luZGV4LCAgIGh3Y3R4LT5xdWV1ZV9mYW1pbHlfZW5jb2RlX2luZGV4 LCBod2N0eC0+bmJfZW5jb2RlX3F1ZXVlcyk7CisKKyN1bmRlZiBDSEVDS19RVUVVRQorCisgICAg LyogVXBkYXRlIHRoZSBuZXcgcXVldWUgZmFtaWx5IGZpZWxkcy4gSWYgbm9uLXplcm8gYWxyZWFk eSwKKyAgICAgKiBpdCBtZWFucyBBUEkgdXNlcnMgaGF2ZSBzZXQgaXQuICovCisgICAgaWYgKCFo d2N0eC0+bmJfcWYpIHsKKyNkZWZpbmUgQUREX1FVRVVFKGN0eF9xZiwgcWMsIGZsYWcpICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRvIHsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAg IGlmIChjdHhfcWYgIT0gLTEpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKKyAgICAgICAgICAgIGh3Y3R4LT5xZltod2N0eC0+bmJfcWYrK10gPSAoQVZWdWxr YW5EZXZpY2VRdWV1ZUZhbWlseSkgeyAgXAorICAgICAgICAgICAgICAgIC5pZHggPSBjdHhfcWYs ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAg ICAgLm51bSA9IHFjLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKKyAgICAgICAgICAgICAgICAuZmxhZ3MgPSBmbGFnLCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgfTsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg ICB9IHdoaWxlICgwKQorCisgICAgICAgIEFERF9RVUVVRShod2N0eC0+cXVldWVfZmFtaWx5X2lu ZGV4LCBod2N0eC0+bmJfZ3JhcGhpY3NfcXVldWVzLCBWS19RVUVVRV9HUkFQSElDU19CSVQpOwor ICAgICAgICBBRERfUVVFVUUoaHdjdHgtPnF1ZXVlX2ZhbWlseV9jb21wX2luZGV4LCBod2N0eC0+ bmJfY29tcF9xdWV1ZXMsIFZLX1FVRVVFX0NPTVBVVEVfQklUKTsKKyAgICAgICAgQUREX1FVRVVF KGh3Y3R4LT5xdWV1ZV9mYW1pbHlfdHhfaW5kZXgsIGh3Y3R4LT5uYl90eF9xdWV1ZXMsIFZLX1FV RVVFX1RSQU5TRkVSX0JJVCk7CisgICAgICAgIEFERF9RVUVVRShod2N0eC0+cXVldWVfZmFtaWx5 X2RlY29kZV9pbmRleCwgaHdjdHgtPm5iX2RlY29kZV9xdWV1ZXMsIFZLX1FVRVVFX1ZJREVPX0RF Q09ERV9CSVRfS0hSKTsKKyAgICAgICAgQUREX1FVRVVFKGh3Y3R4LT5xdWV1ZV9mYW1pbHlfZW5j b2RlX2luZGV4LCBod2N0eC0+bmJfZW5jb2RlX3F1ZXVlcywgVktfUVVFVUVfVklERU9fRU5DT0RF X0JJVF9LSFIpOworI3VuZGVmIEFERF9RVUVVRQorICAgIH0KK0ZGX0VOQUJMRV9ERVBSRUNBVElP Tl9XQVJOSU5HUworI2VuZGlmCisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGh3Y3R4LT5uYl9x ZjsgaSsrKSB7CisgICAgICAgIGlmICghaHdjdHgtPnFmW2ldLnZpZGVvX2NhcHMgJiYKKyAgICAg ICAgICAgIGh3Y3R4LT5xZltpXS5mbGFncyAmIChWS19RVUVVRV9WSURFT19ERUNPREVfQklUX0tI UiB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfUVVFVUVfVklERU9fRU5D T0RFX0JJVF9LSFIpKSB7CisgICAgICAgICAgICBod2N0eC0+cWZbaV0udmlkZW9fY2FwcyA9IHFm X3ZpZFtod2N0eC0+cWZbaV0uaWR4XS52aWRlb0NvZGVjT3BlcmF0aW9uczsKKyAgICAgICAgfQor ICAgIH0KKworICAgIC8qIFNldHVwIGFycmF5IGZvciBwUXVldWVGYW1pbHlJbmRpY2VzIHdpdGgg dXNlZCBxdWV1ZSBmYW1pbGllcyAqLworICAgIHAtPm5iX2ltZ19xZnMgPSAwOworICAgIGZvciAo aW50IGkgPSAwOyBpIDwgaHdjdHgtPm5iX3FmOyBpKyspIHsKKyAgICAgICAgaW50IHNlZW4gPSAw OworICAgICAgICAvKiBNYWtlIHN1cmUgZWFjaCBlbnRyeSBpcyB1bmlxdWUKKyAgICAgICAgICog KFZVSUQtVmtCdWZmZXJDcmVhdGVJbmZvLXNoYXJpbmdNb2RlLTAxNDE5KSAqLworICAgICAgICBm b3IgKGludCBqID0gKGkgLSAxKTsgaiA+PSAwOyBqLS0pIHsKKyAgICAgICAgICAgIGlmIChod2N0 eC0+cWZbaV0uaWR4ID09IGh3Y3R4LT5xZltqXS5pZHgpIHsKKyAgICAgICAgICAgICAgICBzZWVu ID0gMTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor ICAgICAgICBpZiAoIXNlZW4pCisgICAgICAgICAgICBwLT5pbWdfcWZzW3AtPm5iX2ltZ19xZnMr K10gPSBod2N0eC0+cWZbaV0uaWR4OworICAgIH0KKworICAgIGlmICghaHdjdHgtPmxvY2tfcXVl dWUpCisgICAgICAgIGh3Y3R4LT5sb2NrX3F1ZXVlID0gbG9ja19xdWV1ZTsKKyAgICBpZiAoIWh3 Y3R4LT51bmxvY2tfcXVldWUpCisgICAgICAgIGh3Y3R4LT51bmxvY2tfcXVldWUgPSB1bmxvY2tf cXVldWU7CisKKyAgICAvKiBSZS1xdWVyeSBkZXZpY2UgY2FwYWJpbGl0aWVzLCBpbiBjYXNlIHRo ZSBkZXZpY2Ugd2FzIGNyZWF0ZWQgZXh0ZXJuYWxseSAqLworICAgIHZrLT5HZXRQaHlzaWNhbERl dmljZU1lbW9yeVByb3BlcnRpZXMoaHdjdHgtPnBoeXNfZGV2LCAmcC0+bXByb3BzKTsKKworICAg IHAtPnZrY3R4LmRldmljZSA9IGN0eDsKKyAgICBwLT52a2N0eC5od2N0eCA9IGh3Y3R4OworCisg ICAgZmZfdmtfbG9hZF9wcm9wcygmcC0+dmtjdHgpOworICAgIHAtPmNvbXB1dGVfcWYgPSBmZl92 a19xZl9maW5kKCZwLT52a2N0eCwgVktfUVVFVUVfQ09NUFVURV9CSVQsIDApOworICAgIHAtPnRy YW5zZmVyX3FmID0gZmZfdmtfcWZfZmluZCgmcC0+dmtjdHgsIFZLX1FVRVVFX1RSQU5TRkVSX0JJ VCwgMCk7CisKKyAgICAvKiBSZS1xdWVyeSBkZXZpY2UgY2FwYWJpbGl0aWVzLCBpbiBjYXNlIHRo ZSBkZXZpY2Ugd2FzIGNyZWF0ZWQgZXh0ZXJuYWxseSAqLworICAgIHZrLT5HZXRQaHlzaWNhbERl dmljZU1lbW9yeVByb3BlcnRpZXMoaHdjdHgtPnBoeXNfZGV2LCAmcC0+bXByb3BzKTsKKworICAg IC8qIE9ubHkgdXNlIGhvc3QgaW1hZ2UgdHJhbnNmZXJzIGlmIFJlQkFSIGlzIGVuYWJsZWQgKi8K KyAgICBwLT5kaXNhYmxlX2hvc3RfdHJhbnNmZXIgPSAhdnVsa2FuX2RldmljZV9oYXNfcmViYXIo Y3R4KTsKKworZW5kOgorICAgIGF2X2ZyZWUocWZfdmlkKTsKKyAgICBhdl9mcmVlKHFmKTsKKyAg ICByZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHZ1bGthbl9kZXZpY2VfY3JlYXRlKEFWSFdE ZXZpY2VDb250ZXh0ICpjdHgsIGNvbnN0IGNoYXIgKmRldmljZSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgQVZEaWN0aW9uYXJ5ICpvcHRzLCBpbnQgZmxhZ3MpCit7CisgICAgVnVs a2FuRGV2aWNlU2VsZWN0aW9uIGRldl9zZWxlY3QgPSB7IDAgfTsKKyAgICBpZiAoZGV2aWNlICYm IGRldmljZVswXSkgeworICAgICAgICBjaGFyICplbmQgPSBOVUxMOworICAgICAgICBkZXZfc2Vs ZWN0LmluZGV4ID0gc3RydG9sKGRldmljZSwgJmVuZCwgMTApOworICAgICAgICBpZiAoZW5kID09 IGRldmljZSkgeworICAgICAgICAgICAgZGV2X3NlbGVjdC5pbmRleCA9IDA7CisgICAgICAgICAg ICBkZXZfc2VsZWN0Lm5hbWUgID0gZGV2aWNlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0 dXJuIHZ1bGthbl9kZXZpY2VfY3JlYXRlX2ludGVybmFsKGN0eCwgJmRldl9zZWxlY3QsIDAsIG9w dHMsIGZsYWdzKTsKK30KKworc3RhdGljIGludCB2dWxrYW5fZGV2aWNlX2Rlcml2ZShBVkhXRGV2 aWNlQ29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVkhXRGV2 aWNlQ29udGV4dCAqc3JjX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVZE aWN0aW9uYXJ5ICpvcHRzLCBpbnQgZmxhZ3MpCit7CisgICAgYXZfdW51c2VkIFZ1bGthbkRldmlj ZVNlbGVjdGlvbiBkZXZfc2VsZWN0ID0geyAwIH07CisKKyAgICAvKiBJZiB0aGVyZSdzIG9ubHkg b25lIGRldmljZSBvbiB0aGUgc3lzdGVtLCB0aGVuIGV2ZW4gaWYgaXRzIG5vdCBjb3ZlcmVkCisg ICAgICogYnkgdGhlIGZvbGxvd2luZyBjaGVja3MgKGUuZy4gbm9uLVBDSWUgQVJNIEdQVSksIGhh dmluZyBhbiBlbXB0eQorICAgICAqIGRldl9zZWxlY3Qgd2lsbCBtZWFuIGl0J2xsIGdldCBwaWNr ZWQuICovCisgICAgc3dpdGNoKHNyY19jdHgtPnR5cGUpIHsKKyNpZiBDT05GSUdfVkFBUEkKKyAg ICBjYXNlIEFWX0hXREVWSUNFX1RZUEVfVkFBUEk6IHsKKyAgICAgICAgQVZWQUFQSURldmljZUNv bnRleHQgKnNyY19od2N0eCA9IHNyY19jdHgtPmh3Y3R4OworICAgICAgICBWQURpc3BsYXkgZHB5 ID0gc3JjX2h3Y3R4LT5kaXNwbGF5OworI2lmIFZBX0NIRUNLX1ZFUlNJT04oMSwgMTUsIDApCisg ICAgICAgIFZBU3RhdHVzIHZhczsKKyAgICAgICAgVkFEaXNwbGF5QXR0cmlidXRlIGF0dHIgPSB7 CisgICAgICAgICAgICAudHlwZSA9IFZBRGlzcGxheVBDSUlELAorICAgICAgICB9OworI2VuZGlm CisgICAgICAgIGNvbnN0IGNoYXIgKnZlbmRvcjsKKworI2lmIFZBX0NIRUNLX1ZFUlNJT04oMSwg MTUsIDApCisgICAgICAgIHZhcyA9IHZhR2V0RGlzcGxheUF0dHJpYnV0ZXMoZHB5LCAmYXR0ciwg MSk7CisgICAgICAgIGlmICh2YXMgPT0gVkFfU1RBVFVTX1NVQ0NFU1MgJiYgYXR0ci5mbGFncyAh PSBWQV9ESVNQTEFZX0FUVFJJQl9OT1RfU1VQUE9SVEVEKQorICAgICAgICAgICAgZGV2X3NlbGVj dC5wY2lfZGV2aWNlID0gKGF0dHIudmFsdWUgJiAweEZGRkYpOworI2VuZGlmCisKKyAgICAgICAg aWYgKCFkZXZfc2VsZWN0LnBjaV9kZXZpY2UpIHsKKyAgICAgICAgICAgIHZlbmRvciA9IHZhUXVl cnlWZW5kb3JTdHJpbmcoZHB5KTsKKyAgICAgICAgICAgIGlmICghdmVuZG9yKSB7CisgICAgICAg ICAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiVW5hYmxlIHRvIGdldCBkZXZpY2Ug aW5mbyBmcm9tIFZBQVBJIVxuIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfRVhU RVJOQUw7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChzdHJzdHIodmVuZG9yLCAi QU1EIikpCisgICAgICAgICAgICAgICAgZGV2X3NlbGVjdC52ZW5kb3JfaWQgPSAweDEwMDI7Cisg ICAgICAgIH0KKworICAgICAgICByZXR1cm4gdnVsa2FuX2RldmljZV9jcmVhdGVfaW50ZXJuYWwo Y3R4LCAmZGV2X3NlbGVjdCwgMCwgb3B0cywgZmxhZ3MpOworICAgIH0KKyNlbmRpZgorI2lmIENP TkZJR19MSUJEUk0KKyAgICBjYXNlIEFWX0hXREVWSUNFX1RZUEVfRFJNOiB7CisgICAgICAgIGlu dCBlcnI7CisgICAgICAgIHN0cnVjdCBzdGF0IGRybV9ub2RlX2luZm87CisgICAgICAgIGRybURl dmljZSAqZHJtX2Rldl9pbmZvOworICAgICAgICBBVkRSTURldmljZUNvbnRleHQgKnNyY19od2N0 eCA9IHNyY19jdHgtPmh3Y3R4OworCisgICAgICAgIGVyciA9IGZzdGF0KHNyY19od2N0eC0+ZmQs ICZkcm1fbm9kZV9pbmZvKTsKKyAgICAgICAgaWYgKGVycikgeworICAgICAgICAgICAgYXZfbG9n KGN0eCwgQVZfTE9HX0VSUk9SLCAiVW5hYmxlIHRvIGdldCBub2RlIGluZm8gZnJvbSBEUk0gZmQ6 ICVzIVxuIiwKKyAgICAgICAgICAgICAgICAgICBhdl9lcnIyc3RyKEFWRVJST1IoZXJybm8pKSk7 CisgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9FWFRFUk5BTDsKKyAgICAgICAgfQorCisgICAg ICAgIGRldl9zZWxlY3QuZHJtX21ham9yID0gbWFqb3IoZHJtX25vZGVfaW5mby5zdF9kZXYpOwor ICAgICAgICBkZXZfc2VsZWN0LmRybV9taW5vciA9IG1pbm9yKGRybV9ub2RlX2luZm8uc3RfZGV2 KTsKKyAgICAgICAgZGV2X3NlbGVjdC5oYXNfZHJtICAgPSAxOworCisgICAgICAgIGVyciA9IGRy bUdldERldmljZShzcmNfaHdjdHgtPmZkLCAmZHJtX2Rldl9pbmZvKTsKKyAgICAgICAgaWYgKGVy cikgeworICAgICAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiVW5hYmxlIHRvIGdl dCBkZXZpY2UgaW5mbyBmcm9tIERSTSBmZDogJXMhXG4iLAorICAgICAgICAgICAgICAgICAgIGF2 X2VycjJzdHIoQVZFUlJPUihlcnJubykpKTsKKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0VY VEVSTkFMOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGRybV9kZXZfaW5mby0+YnVzdHlwZSA9 PSBEUk1fQlVTX1BDSSkKKyAgICAgICAgICAgIGRldl9zZWxlY3QucGNpX2RldmljZSA9IGRybV9k ZXZfaW5mby0+ZGV2aWNlaW5mby5wY2ktPmRldmljZV9pZDsKKworICAgICAgICBkcm1GcmVlRGV2 aWNlKCZkcm1fZGV2X2luZm8pOworCisgICAgICAgIHJldHVybiB2dWxrYW5fZGV2aWNlX2NyZWF0 ZV9pbnRlcm5hbChjdHgsICZkZXZfc2VsZWN0LCAwLCBvcHRzLCBmbGFncyk7CisgICAgfQorI2Vu ZGlmCisjaWYgQ09ORklHX0NVREEKKyAgICBjYXNlIEFWX0hXREVWSUNFX1RZUEVfQ1VEQTogewor ICAgICAgICBBVkhXRGV2aWNlQ29udGV4dCAqY3VkYV9jdSA9IHNyY19jdHg7CisgICAgICAgIEFW Q1VEQURldmljZUNvbnRleHQgKnNyY19od2N0eCA9IHNyY19jdHgtPmh3Y3R4OworICAgICAgICBB VkNVREFEZXZpY2VDb250ZXh0SW50ZXJuYWwgKmN1X2ludGVybmFsID0gc3JjX2h3Y3R4LT5pbnRl cm5hbDsKKyAgICAgICAgQ3VkYUZ1bmN0aW9ucyAqY3UgPSBjdV9pbnRlcm5hbC0+Y3VkYV9kbDsK KworICAgICAgICBpbnQgcmV0ID0gQ0hFQ0tfQ1UoY3UtPmN1RGV2aWNlR2V0VXVpZCgoQ1V1dWlk ICopJmRldl9zZWxlY3QudXVpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY3VfaW50ZXJuYWwtPmN1ZGFfZGV2aWNlKSk7CisgICAgICAgIGlmIChyZXQg PCAwKSB7CisgICAgICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJVbmFibGUgdG8g Z2V0IFVVSUQgZnJvbSBDVURBIVxuIik7CisgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9FWFRF Uk5BTDsKKyAgICAgICAgfQorCisgICAgICAgIGRldl9zZWxlY3QuaGFzX3V1aWQgPSAxOworCisg ICAgICAgIC8qCisgICAgICAgICAqIENVREEgaXMgbm90IGFibGUgdG8gaW1wb3J0IG11bHRpcGxh bmUgaW1hZ2VzLCBzbyBhbHdheXMgZGVyaXZlIGEKKyAgICAgICAgICogVnVsa2FuIGRldmljZSB3 aXRoIG11bHRpcGxhbmUgZGlzYWJsZWQuCisgICAgICAgICAqLworICAgICAgICByZXR1cm4gdnVs a2FuX2RldmljZV9jcmVhdGVfaW50ZXJuYWwoY3R4LCAmZGV2X3NlbGVjdCwgMSwgb3B0cywgZmxh Z3MpOworICAgIH0KKyNlbmRpZgorICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBBVkVSUk9S KEVOT1NZUyk7CisgICAgfQorfQorCitzdGF0aWMgaW50IHZ1bGthbl9mcmFtZXNfZ2V0X2NvbnN0 cmFpbnRzKEFWSFdEZXZpY2VDb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmh3Y29uZmlnLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBBVkhXRnJhbWVzQ29uc3RyYWludHMgKmNvbnN0cmFpbnRz KQoreworICAgIGludCBjb3VudCA9IDA7CisgICAgVnVsa2FuRGV2aWNlUHJpdiAqcCA9IGN0eC0+ aHdjdHg7CisKKyAgICBmb3IgKGVudW0gQVZQaXhlbEZvcm1hdCBpID0gMDsgaSA8IG5iX3ZrX2Zv cm1hdHNfbGlzdDsgaSsrKSB7CisgICAgICAgIGNvdW50ICs9IHZrZm10X2Zyb21fcGl4Zm10Mihj dHgsIHZrX2Zvcm1hdHNfbGlzdFtpXS5waXhmbXQsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBwLT51c2VfbGluZWFyX2ltYWdlcyA/IFZLX0lNQUdFX1RJTElOR19MSU5FQVIg OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBWS19JTUFHRV9USUxJTkdfT1BUSU1BTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIHAtPmRpc2FibGVfbXVsdGlwbGFuZSwg MSkgPj0gMDsKKyAgICB9CisKKyAgICBjb25zdHJhaW50cy0+dmFsaWRfc3dfZm9ybWF0cyA9IGF2 X21hbGxvY19hcnJheShjb3VudCArIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGVudW0gQVZQaXhlbEZvcm1hdCkpOworICAgIGlm ICghY29uc3RyYWludHMtPnZhbGlkX3N3X2Zvcm1hdHMpCisgICAgICAgIHJldHVybiBBVkVSUk9S KEVOT01FTSk7CisKKyAgICBjb3VudCA9IDA7CisgICAgZm9yIChlbnVtIEFWUGl4ZWxGb3JtYXQg aSA9IDA7IGkgPCBuYl92a19mb3JtYXRzX2xpc3Q7IGkrKykgeworICAgICAgICBpZiAodmtmbXRf ZnJvbV9waXhmbXQyKGN0eCwgdmtfZm9ybWF0c19saXN0W2ldLnBpeGZtdCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBwLT51c2VfbGluZWFyX2ltYWdlcyA/IFZLX0lNQUdFX1RJTElO R19MSU5FQVIgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgVktfSU1BR0VfVElMSU5HX09QVElNQUwsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgcC0+ZGlzYWJsZV9tdWx0aXBsYW5lLCAx KSA+PSAwKSB7CisgICAgICAgICAgICBjb25zdHJhaW50cy0+dmFsaWRfc3dfZm9ybWF0c1tjb3Vu dCsrXSA9IHZrX2Zvcm1hdHNfbGlzdFtpXS5waXhmbXQ7CisgICAgICAgIH0KKyAgICB9CisKKyAg ICBjb25zdHJhaW50cy0+dmFsaWRfc3dfZm9ybWF0c1tjb3VudCsrXSA9IEFWX1BJWF9GTVRfTk9O RTsKKworICAgIGNvbnN0cmFpbnRzLT5taW5fd2lkdGggID0gMTsKKyAgICBjb25zdHJhaW50cy0+ bWluX2hlaWdodCA9IDE7CisgICAgY29uc3RyYWludHMtPm1heF93aWR0aCAgPSBwLT5wcm9wcy5w cm9wZXJ0aWVzLmxpbWl0cy5tYXhJbWFnZURpbWVuc2lvbjJEOworICAgIGNvbnN0cmFpbnRzLT5t YXhfaGVpZ2h0ID0gcC0+cHJvcHMucHJvcGVydGllcy5saW1pdHMubWF4SW1hZ2VEaW1lbnNpb24y RDsKKworICAgIGNvbnN0cmFpbnRzLT52YWxpZF9od19mb3JtYXRzID0gYXZfbWFsbG9jX2FycmF5 KDIsIHNpemVvZihlbnVtIEFWUGl4ZWxGb3JtYXQpKTsKKyAgICBpZiAoIWNvbnN0cmFpbnRzLT52 YWxpZF9od19mb3JtYXRzKQorICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOworCisgICAg Y29uc3RyYWludHMtPnZhbGlkX2h3X2Zvcm1hdHNbMF0gPSBBVl9QSVhfRk1UX1ZVTEtBTjsKKyAg ICBjb25zdHJhaW50cy0+dmFsaWRfaHdfZm9ybWF0c1sxXSA9IEFWX1BJWF9GTVRfTk9ORTsKKwor ICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFsbG9jX21lbShBVkhXRGV2aWNlQ29udGV4 dCAqY3R4LCBWa01lbW9yeVJlcXVpcmVtZW50cyAqcmVxLAorICAgICAgICAgICAgICAgICAgICAg VmtNZW1vcnlQcm9wZXJ0eUZsYWdCaXRzIHJlcV9mbGFncywgY29uc3Qgdm9pZCAqYWxsb2NfZXh0 ZW5zaW9uLAorICAgICAgICAgICAgICAgICAgICAgVmtNZW1vcnlQcm9wZXJ0eUZsYWdCaXRzICpt ZW1fZmxhZ3MsIFZrRGV2aWNlTWVtb3J5ICptZW0pCit7CisgICAgVmtSZXN1bHQgcmV0OworICAg IGludCBpbmRleCA9IC0xOworICAgIFZ1bGthbkRldmljZVByaXYgKnAgPSBjdHgtPmh3Y3R4Owor ICAgIEZGVnVsa2FuRnVuY3Rpb25zICp2ayA9ICZwLT52a2N0eC52a2ZuOworICAgIEFWVnVsa2Fu RGV2aWNlQ29udGV4dCAqZGV2X2h3Y3R4ID0gJnAtPnA7CisgICAgVmtNZW1vcnlBbGxvY2F0ZUlu Zm8gYWxsb2NfaW5mbyA9IHsKKyAgICAgICAgLnNUeXBlICAgICAgICAgID0gVktfU1RSVUNUVVJF X1RZUEVfTUVNT1JZX0FMTE9DQVRFX0lORk8sCisgICAgICAgIC5wTmV4dCAgICAgICAgICA9IGFs bG9jX2V4dGVuc2lvbiwKKyAgICAgICAgLmFsbG9jYXRpb25TaXplID0gcmVxLT5zaXplLAorICAg IH07CisKKyAgICAvKiBUaGUgdnVsa2FuIHNwZWMgcmVxdWlyZXMgbWVtb3J5IHR5cGVzIHRvIGJl IHNvcnRlZCBpbiB0aGUgIm9wdGltYWwiCisgICAgICogb3JkZXIsIHNvIHRoZSBmaXJzdCBtYXRj aGluZyB0eXBlIHdlIGZpbmQgd2lsbCBiZSB0aGUgYmVzdC9mYXN0ZXN0IG9uZSAqLworICAgIGZv ciAoaW50IGkgPSAwOyBpIDwgcC0+bXByb3BzLm1lbW9yeVR5cGVDb3VudDsgaSsrKSB7CisgICAg ICAgIGNvbnN0IFZrTWVtb3J5VHlwZSAqdHlwZSA9ICZwLT5tcHJvcHMubWVtb3J5VHlwZXNbaV07 CisKKyAgICAgICAgLyogVGhlIG1lbW9yeSB0eXBlIG11c3QgYmUgc3VwcG9ydGVkIGJ5IHRoZSBy ZXF1aXJlbWVudHMgKGJpdGZpZWxkKSAqLworICAgICAgICBpZiAoIShyZXEtPm1lbW9yeVR5cGVC aXRzICYgKDEgPDwgaSkpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgLyogVGhl IG1lbW9yeSB0eXBlIGZsYWdzIG11c3QgaW5jbHVkZSBvdXIgcHJvcGVydGllcyAqLworICAgICAg ICBpZiAoKHR5cGUtPnByb3BlcnR5RmxhZ3MgJiByZXFfZmxhZ3MpICE9IHJlcV9mbGFncykKKyAg ICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIC8qIFRoZSBtZW1vcnkgdHlwZSBtdXN0IGJl IGxhcmdlIGVub3VnaCAqLworICAgICAgICBpZiAocmVxLT5zaXplID4gcC0+bXByb3BzLm1lbW9y eUhlYXBzW3R5cGUtPmhlYXBJbmRleF0uc2l6ZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisg ICAgICAgIC8qIEZvdW5kIGEgc3VpdGFibGUgbWVtb3J5IHR5cGUgKi8KKyAgICAgICAgaW5kZXgg PSBpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAoaW5kZXggPCAwKSB7CisgICAg ICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIk5vIG1lbW9yeSB0eXBlIGZvdW5kIGZvciBm bGFncyAweCV4XG4iLAorICAgICAgICAgICAgICAgcmVxX2ZsYWdzKTsKKyAgICAgICAgcmV0dXJu IEFWRVJST1IoRUlOVkFMKTsKKyAgICB9CisKKyAgICBhbGxvY19pbmZvLm1lbW9yeVR5cGVJbmRl eCA9IGluZGV4OworCisgICAgcmV0ID0gdmstPkFsbG9jYXRlTWVtb3J5KGRldl9od2N0eC0+YWN0 X2RldiwgJmFsbG9jX2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldl9od2N0 eC0+YWxsb2MsIG1lbSk7CisgICAgaWYgKHJldCAhPSBWS19TVUNDRVNTKSB7CisgICAgICAgIGF2 X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnk6ICVzXG4i LAorICAgICAgICAgICAgICAgZmZfdmtfcmV0MnN0cihyZXQpKTsKKyAgICAgICAgcmV0dXJuIEFW RVJST1IoRU5PTUVNKTsKKyAgICB9CisKKyAgICAqbWVtX2ZsYWdzIHw9IHAtPm1wcm9wcy5tZW1v cnlUeXBlc1tpbmRleF0ucHJvcGVydHlGbGFnczsKKworICAgIHJldHVybiAwOworfQorCitzdGF0 aWMgdm9pZCB2dWxrYW5fZnJlZV9pbnRlcm5hbChBVlZrRnJhbWUgKmYpCit7CisgICAgYXZfdW51 c2VkIEFWVmtGcmFtZUludGVybmFsICppbnRlcm5hbCA9IGYtPmludGVybmFsOworCisjaWYgQ09O RklHX0NVREEKKyAgICBpZiAoaW50ZXJuYWwtPmN1ZGFfZmNfcmVmKSB7CisgICAgICAgIEFWSFdG cmFtZXNDb250ZXh0ICpjdWRhX2ZjID0gKEFWSFdGcmFtZXNDb250ZXh0ICopaW50ZXJuYWwtPmN1 ZGFfZmNfcmVmLT5kYXRhOworICAgICAgICBpbnQgcGxhbmVzID0gYXZfcGl4X2ZtdF9jb3VudF9w bGFuZXMoY3VkYV9mYy0+c3dfZm9ybWF0KTsKKyAgICAgICAgQVZIV0RldmljZUNvbnRleHQgKmN1 ZGFfY3UgPSBjdWRhX2ZjLT5kZXZpY2VfY3R4OworICAgICAgICBBVkNVREFEZXZpY2VDb250ZXh0 ICpjdWRhX2RldiA9IGN1ZGFfY3UtPmh3Y3R4OworICAgICAgICBBVkNVREFEZXZpY2VDb250ZXh0 SW50ZXJuYWwgKmN1X2ludGVybmFsID0gY3VkYV9kZXYtPmludGVybmFsOworICAgICAgICBDdWRh RnVuY3Rpb25zICpjdSA9IGN1X2ludGVybmFsLT5jdWRhX2RsOworCisgICAgICAgIGZvciAoaW50 IGkgPSAwOyBpIDwgcGxhbmVzOyBpKyspIHsKKyAgICAgICAgICAgIGlmIChpbnRlcm5hbC0+Y3Vf c2VtW2ldKQorICAgICAgICAgICAgICAgIENIRUNLX0NVKGN1LT5jdURlc3Ryb3lFeHRlcm5hbFNl bWFwaG9yZShpbnRlcm5hbC0+Y3Vfc2VtW2ldKSk7CisgICAgICAgICAgICBpZiAoaW50ZXJuYWwt PmN1X21tYVtpXSkKKyAgICAgICAgICAgICAgICBDSEVDS19DVShjdS0+Y3VNaXBtYXBwZWRBcnJh eURlc3Ryb3koaW50ZXJuYWwtPmN1X21tYVtpXSkpOworICAgICAgICAgICAgaWYgKGludGVybmFs LT5leHRfbWVtW2ldKQorICAgICAgICAgICAgICAgIENIRUNLX0NVKGN1LT5jdURlc3Ryb3lFeHRl cm5hbE1lbW9yeShpbnRlcm5hbC0+ZXh0X21lbVtpXSkpOworI2lmZGVmIF9XSU4zMgorICAgICAg ICAgICAgaWYgKGludGVybmFsLT5leHRfc2VtX2hhbmRsZVtpXSkKKyAgICAgICAgICAgICAgICBD bG9zZUhhbmRsZShpbnRlcm5hbC0+ZXh0X3NlbV9oYW5kbGVbaV0pOworICAgICAgICAgICAgaWYg KGludGVybmFsLT5leHRfbWVtX2hhbmRsZVtpXSkKKyAgICAgICAgICAgICAgICBDbG9zZUhhbmRs ZShpbnRlcm5hbC0+ZXh0X21lbV9oYW5kbGVbaV0pOworI2VuZGlmCisgICAgICAgIH0KKworICAg ICAgICBhdl9idWZmZXJfdW5yZWYoJmludGVybmFsLT5jdWRhX2ZjX3JlZik7CisgICAgfQorI2Vu ZGlmCisKKyAgICBwdGhyZWFkX211dGV4X2Rlc3Ryb3koJmludGVybmFsLT51cGRhdGVfbXV0ZXgp OworICAgIGF2X2ZyZWVwKCZmLT5pbnRlcm5hbCk7Cit9CisKK3N0YXRpYyB2b2lkIHZ1bGthbl9m cmFtZV9mcmVlKEFWSFdGcmFtZXNDb250ZXh0ICpod2ZjLCBBVlZrRnJhbWUgKmYpCit7CisgICAg VnVsa2FuRGV2aWNlUHJpdiAqcCA9IGh3ZmMtPmRldmljZV9jdHgtPmh3Y3R4OworICAgIEFWVnVs a2FuRGV2aWNlQ29udGV4dCAqaHdjdHggPSAmcC0+cDsKKyAgICBGRlZ1bGthbkZ1bmN0aW9ucyAq dmsgPSAmcC0+dmtjdHgudmtmbjsKKyAgICBpbnQgbmJfaW1hZ2VzID0gZmZfdmtfY291bnRfaW1h Z2VzKGYpOworICAgIGludCBuYl9zZW1zID0gMDsKKworICAgIHdoaWxlIChuYl9zZW1zIDwgRkZf QVJSQVlfRUxFTVMoZi0+c2VtKSAmJiBmLT5zZW1bbmJfc2Vtc10pCisgICAgICAgIG5iX3NlbXMr KzsKKworICAgIGlmIChuYl9zZW1zKSB7CisgICAgICAgIFZrU2VtYXBob3JlV2FpdEluZm8gc2Vt X3dhaXQgPSB7CisgICAgICAgICAgICAuc1R5cGUgICAgICAgICAgPSBWS19TVFJVQ1RVUkVfVFlQ RV9TRU1BUEhPUkVfV0FJVF9JTkZPLAorICAgICAgICAgICAgLmZsYWdzICAgICAgICAgID0gMHgw LAorICAgICAgICAgICAgLnBTZW1hcGhvcmVzICAgID0gZi0+c2VtLAorICAgICAgICAgICAgLnBW YWx1ZXMgICAgICAgID0gZi0+c2VtX3ZhbHVlLAorICAgICAgICAgICAgLnNlbWFwaG9yZUNvdW50 ID0gbmJfc2VtcywKKyAgICAgICAgfTsKKworICAgICAgICB2ay0+V2FpdFNlbWFwaG9yZXMoaHdj dHgtPmFjdF9kZXYsICZzZW1fd2FpdCwgVUlOVDY0X01BWCk7CisgICAgfQorCisgICAgdnVsa2Fu X2ZyZWVfaW50ZXJuYWwoZik7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG5iX2ltYWdlczsg aSsrKSB7CisgICAgICAgIHZrLT5EZXN0cm95SW1hZ2UoaHdjdHgtPmFjdF9kZXYsICAgICBmLT5p bWdbaV0sIGh3Y3R4LT5hbGxvYyk7CisgICAgICAgIHZrLT5GcmVlTWVtb3J5KGh3Y3R4LT5hY3Rf ZGV2LCAgICAgICBmLT5tZW1baV0sIGh3Y3R4LT5hbGxvYyk7CisgICAgICAgIHZrLT5EZXN0cm95 U2VtYXBob3JlKGh3Y3R4LT5hY3RfZGV2LCBmLT5zZW1baV0sIGh3Y3R4LT5hbGxvYyk7CisgICAg fQorCisgICAgYXZfZnJlZShmKTsKK30KKworc3RhdGljIHZvaWQgdnVsa2FuX2ZyYW1lX2ZyZWVf Y2Iodm9pZCAqb3BhcXVlLCB1aW50OF90ICpkYXRhKQoreworICAgIHZ1bGthbl9mcmFtZV9mcmVl KG9wYXF1ZSwgKEFWVmtGcmFtZSopZGF0YSk7Cit9CisKK3N0YXRpYyBpbnQgYWxsb2NfYmluZF9t ZW0oQVZIV0ZyYW1lc0NvbnRleHQgKmh3ZmMsIEFWVmtGcmFtZSAqZiwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgdm9pZCAqYWxsb2NfcG5leHQsIHNpemVfdCBhbGxvY19wbmV4dF9zdHJpZGUp Cit7CisgICAgaW50IGltZ19jbnQgPSAwLCBlcnI7CisgICAgVmtSZXN1bHQgcmV0OworICAgIEFW SFdEZXZpY2VDb250ZXh0ICpjdHggPSBod2ZjLT5kZXZpY2VfY3R4OworICAgIFZ1bGthbkRldmlj ZVByaXYgKnAgPSBjdHgtPmh3Y3R4OworICAgIEFWVnVsa2FuRGV2aWNlQ29udGV4dCAqaHdjdHgg PSAmcC0+cDsKKyAgICBGRlZ1bGthbkZ1bmN0aW9ucyAqdmsgPSAmcC0+dmtjdHgudmtmbjsKKyAg ICBWa0JpbmRJbWFnZU1lbW9yeUluZm8gYmluZF9pbmZvW0FWX05VTV9EQVRBX1BPSU5URVJTXSA9 IHsgeyAwIH0gfTsKKworICAgIHdoaWxlIChmLT5pbWdbaW1nX2NudF0pIHsKKyAgICAgICAgaW50 IHVzZV9kZWRfbWVtOworICAgICAgICBWa0ltYWdlTWVtb3J5UmVxdWlyZW1lbnRzSW5mbzIgcmVx X2Rlc2MgPSB7CisgICAgICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9JTUFHRV9N RU1PUllfUkVRVUlSRU1FTlRTX0lORk9fMiwKKyAgICAgICAgICAgIC5pbWFnZSA9IGYtPmltZ1tp bWdfY250XSwKKyAgICAgICAgfTsKKyAgICAgICAgVmtNZW1vcnlEZWRpY2F0ZWRBbGxvY2F0ZUlu Zm8gZGVkX2FsbG9jID0geworICAgICAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVf TUVNT1JZX0RFRElDQVRFRF9BTExPQ0FURV9JTkZPLAorICAgICAgICAgICAgLnBOZXh0ID0gKHZv aWQgKikoKCh1aW50OF90ICopYWxsb2NfcG5leHQpICsgaW1nX2NudCphbGxvY19wbmV4dF9zdHJp ZGUpLAorICAgICAgICB9OworICAgICAgICBWa01lbW9yeURlZGljYXRlZFJlcXVpcmVtZW50cyBk ZWRfcmVxID0geworICAgICAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfTUVNT1JZ X0RFRElDQVRFRF9SRVFVSVJFTUVOVFMsCisgICAgICAgIH07CisgICAgICAgIFZrTWVtb3J5UmVx dWlyZW1lbnRzMiByZXEgPSB7CisgICAgICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQ RV9NRU1PUllfUkVRVUlSRU1FTlRTXzIsCisgICAgICAgICAgICAucE5leHQgPSAmZGVkX3JlcSwK KyAgICAgICAgfTsKKworICAgICAgICB2ay0+R2V0SW1hZ2VNZW1vcnlSZXF1aXJlbWVudHMyKGh3 Y3R4LT5hY3RfZGV2LCAmcmVxX2Rlc2MsICZyZXEpOworCisgICAgICAgIGlmIChmLT50aWxpbmcg PT0gVktfSU1BR0VfVElMSU5HX0xJTkVBUikKKyAgICAgICAgICAgIHJlcS5tZW1vcnlSZXF1aXJl bWVudHMuc2l6ZSA9IEZGQUxJR04ocmVxLm1lbW9yeVJlcXVpcmVtZW50cy5zaXplLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLT5wcm9wcy5wcm9w ZXJ0aWVzLmxpbWl0cy5taW5NZW1vcnlNYXBBbGlnbm1lbnQpOworCisgICAgICAgIC8qIEluIGNh c2UgdGhlIGltcGxlbWVudGF0aW9uIHByZWZlcnMvcmVxdWlyZXMgZGVkaWNhdGVkIGFsbG9jYXRp b24gKi8KKyAgICAgICAgdXNlX2RlZF9tZW0gPSBkZWRfcmVxLnByZWZlcnNEZWRpY2F0ZWRBbGxv Y2F0aW9uIHwKKyAgICAgICAgICAgICAgICAgICAgICBkZWRfcmVxLnJlcXVpcmVzRGVkaWNhdGVk QWxsb2NhdGlvbjsKKyAgICAgICAgaWYgKHVzZV9kZWRfbWVtKQorICAgICAgICAgICAgZGVkX2Fs bG9jLmltYWdlID0gZi0+aW1nW2ltZ19jbnRdOworCisgICAgICAgIC8qIEFsbG9jYXRlIG1lbW9y eSAqLworICAgICAgICBpZiAoKGVyciA9IGFsbG9jX21lbShjdHgsICZyZXEubWVtb3J5UmVxdWly ZW1lbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmLT50aWxpbmcgPT0gVktfSU1B R0VfVElMSU5HX0xJTkVBUiA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZLX01FTU9S WV9QUk9QRVJUWV9IT1NUX1ZJU0lCTEVfQklUIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgVktfTUVNT1JZX1BST1BFUlRZX0RFVklDRV9MT0NBTF9CSVQsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHVzZV9kZWRfbWVtID8gJmRlZF9hbGxvYyA6ICh2b2lkICopZGVkX2FsbG9j LnBOZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZi0+ZmxhZ3MsICZmLT5tZW1b aW1nX2NudF0pKSkKKyAgICAgICAgICAgIHJldHVybiBlcnI7CisKKyAgICAgICAgZi0+c2l6ZVtp bWdfY250XSA9IHJlcS5tZW1vcnlSZXF1aXJlbWVudHMuc2l6ZTsKKyAgICAgICAgYmluZF9pbmZv W2ltZ19jbnRdLnNUeXBlICA9IFZLX1NUUlVDVFVSRV9UWVBFX0JJTkRfSU1BR0VfTUVNT1JZX0lO Rk87CisgICAgICAgIGJpbmRfaW5mb1tpbWdfY250XS5pbWFnZSAgPSBmLT5pbWdbaW1nX2NudF07 CisgICAgICAgIGJpbmRfaW5mb1tpbWdfY250XS5tZW1vcnkgPSBmLT5tZW1baW1nX2NudF07CisK KyAgICAgICAgaW1nX2NudCsrOworICAgIH0KKworICAgIC8qIEJpbmQgdGhlIGFsbG9jYXRlZCBt ZW1vcnkgdG8gdGhlIGltYWdlcyAqLworICAgIHJldCA9IHZrLT5CaW5kSW1hZ2VNZW1vcnkyKGh3 Y3R4LT5hY3RfZGV2LCBpbWdfY250LCBiaW5kX2luZm8pOworICAgIGlmIChyZXQgIT0gVktfU1VD Q0VTUykgeworICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJGYWlsZWQgdG8gYmlu ZCBtZW1vcnk6ICVzXG4iLAorICAgICAgICAgICAgICAgZmZfdmtfcmV0MnN0cihyZXQpKTsKKyAg ICAgICAgcmV0dXJuIEFWRVJST1JfRVhURVJOQUw7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9 CisKK2VudW0gUHJlcE1vZGUgeworICAgIFBSRVBfTU9ERV9HRU5FUkFMLAorICAgIFBSRVBfTU9E RV9XUklURSwKKyAgICBQUkVQX01PREVfRVhURVJOQUxfRVhQT1JULAorICAgIFBSRVBfTU9ERV9F WFRFUk5BTF9JTVBPUlQsCisgICAgUFJFUF9NT0RFX0RFQ09ESU5HX0RTVCwKKyAgICBQUkVQX01P REVfREVDT0RJTkdfRFBCLAorICAgIFBSRVBfTU9ERV9FTkNPRElOR19EUEIsCit9OworCitzdGF0 aWMgaW50IHByZXBhcmVfZnJhbWUoQVZIV0ZyYW1lc0NvbnRleHQgKmh3ZmMsIEZGVmtFeGVjUG9v bCAqZWN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBBVlZrRnJhbWUgKmZyYW1lLCBlbnVt IFByZXBNb2RlIHBtb2RlKQoreworICAgIGludCBlcnI7CisgICAgVnVsa2FuRGV2aWNlUHJpdiAq cCA9IGh3ZmMtPmRldmljZV9jdHgtPmh3Y3R4OworICAgIEZGVnVsa2FuRnVuY3Rpb25zICp2ayA9 ICZwLT52a2N0eC52a2ZuOworICAgIFZrSW1hZ2VNZW1vcnlCYXJyaWVyMiBpbWdfYmFyW0FWX05V TV9EQVRBX1BPSU5URVJTXTsKKyAgICBpbnQgbmJfaW1nX2JhciA9IDA7CisKKyAgICB1aW50MzJf dCBkc3RfcWYgPSBwLT5uYl9pbWdfcWZzID4gMSA/IFZLX1FVRVVFX0ZBTUlMWV9JR05PUkVEIDog cC0+aW1nX3Fmc1swXTsKKyAgICBWa0ltYWdlTGF5b3V0IG5ld19sYXlvdXQ7CisgICAgVmtBY2Nl c3NGbGFnczIgbmV3X2FjY2VzczsKKyAgICBWa1BpcGVsaW5lU3RhZ2VGbGFnQml0czIgc3JjX3N0 YWdlID0gVktfUElQRUxJTkVfU1RBR0VfMl9OT05FOworCisgICAgLyogVGhpcyBpcyBkaXJ0eSAt IGJ1dCBpdCB3b3Jrcy4gVGhlIHZ1bGthbi5jIGRlcGVuZGVuY3kgc3lzdGVtIGRvZXNuJ3QKKyAg ICAgKiBmcmVlIG5vbi1yZWZjb3VudGVkIGZyYW1lcywgYW5kIG5vbi1yZWZjb3VudGVkIGhhcmR3 YXJlIGZyYW1lcyBjYW5ub3QKKyAgICAgKiBoYXBwZW4gYW55d2hlcmUgb3V0c2lkZSBvZiBoZXJl LiAqLworICAgIEFWQnVmZmVyUmVmIHRtcF9yZWYgPSB7CisgICAgICAgIC5kYXRhID0gKHVpbnQ4 X3QgKilod2ZjLAorICAgIH07CisgICAgQVZGcmFtZSB0bXBfZnJhbWUgPSB7CisgICAgICAgIC5k YXRhWzBdID0gKHVpbnQ4X3QgKilmcmFtZSwKKyAgICAgICAgLmh3X2ZyYW1lc19jdHggPSAmdG1w X3JlZiwKKyAgICB9OworCisgICAgVmtDb21tYW5kQnVmZmVyIGNtZF9idWY7CisgICAgRkZWa0V4 ZWNDb250ZXh0ICpleGVjID0gZmZfdmtfZXhlY19nZXQoJnAtPnZrY3R4LCBlY3R4KTsKKyAgICBj bWRfYnVmID0gZXhlYy0+YnVmOworICAgIGZmX3ZrX2V4ZWNfc3RhcnQoJnAtPnZrY3R4LCBleGVj KTsKKworICAgIGVyciA9IGZmX3ZrX2V4ZWNfYWRkX2RlcF9mcmFtZSgmcC0+dmtjdHgsIGV4ZWMs ICZ0bXBfZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZLX1BJUEVM SU5FX1NUQUdFXzJfTk9ORSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktf UElQRUxJTkVfU1RBR0VfMl9BTExfQ09NTUFORFNfQklUKTsKKyAgICBpZiAoZXJyIDwgMCkKKyAg ICAgICAgcmV0dXJuIGVycjsKKworICAgIHN3aXRjaCAocG1vZGUpIHsKKyAgICBjYXNlIFBSRVBf TU9ERV9HRU5FUkFMOgorICAgICAgICBuZXdfbGF5b3V0ID0gVktfSU1BR0VfTEFZT1VUX0dFTkVS QUw7CisgICAgICAgIG5ld19hY2Nlc3MgPSBWS19BQ0NFU1NfVFJBTlNGRVJfV1JJVEVfQklUOwor ICAgICAgICBicmVhazsKKyAgICBjYXNlIFBSRVBfTU9ERV9XUklURToKKyAgICAgICAgbmV3X2xh eW91dCA9IFZLX0lNQUdFX0xBWU9VVF9UUkFOU0ZFUl9EU1RfT1BUSU1BTDsKKyAgICAgICAgbmV3 X2FjY2VzcyA9IFZLX0FDQ0VTU19UUkFOU0ZFUl9XUklURV9CSVQ7CisgICAgICAgIGJyZWFrOwor ICAgIGNhc2UgUFJFUF9NT0RFX0VYVEVSTkFMX0lNUE9SVDoKKyAgICAgICAgbmV3X2xheW91dCA9 IFZLX0lNQUdFX0xBWU9VVF9HRU5FUkFMOworICAgICAgICBuZXdfYWNjZXNzID0gVktfQUNDRVNT X01FTU9SWV9SRUFEX0JJVCB8IFZLX0FDQ0VTU19NRU1PUllfV1JJVEVfQklUOworICAgICAgICBi cmVhazsKKyAgICBjYXNlIFBSRVBfTU9ERV9FWFRFUk5BTF9FWFBPUlQ6CisgICAgICAgIG5ld19s YXlvdXQgPSBWS19JTUFHRV9MQVlPVVRfR0VORVJBTDsKKyAgICAgICAgbmV3X2FjY2VzcyA9IFZL X0FDQ0VTU19NRU1PUllfUkVBRF9CSVQgfCBWS19BQ0NFU1NfTUVNT1JZX1dSSVRFX0JJVDsKKyAg ICAgICAgZHN0X3FmICAgICA9IFZLX1FVRVVFX0ZBTUlMWV9FWFRFUk5BTF9LSFI7CisgICAgICAg IHNyY19zdGFnZSAgPSBWS19QSVBFTElORV9TVEFHRV8yX0FMTF9DT01NQU5EU19CSVQ7CisgICAg ICAgIGJyZWFrOworICAgIGNhc2UgUFJFUF9NT0RFX0RFQ09ESU5HX0RTVDoKKyAgICAgICAgbmV3 X2xheW91dCA9IFZLX0lNQUdFX0xBWU9VVF9WSURFT19ERUNPREVfRFNUX0tIUjsKKyAgICAgICAg bmV3X2FjY2VzcyA9IFZLX0FDQ0VTU19UUkFOU0ZFUl9XUklURV9CSVQ7CisgICAgICAgIGJyZWFr OworICAgIGNhc2UgUFJFUF9NT0RFX0RFQ09ESU5HX0RQQjoKKyAgICAgICAgbmV3X2xheW91dCA9 IFZLX0lNQUdFX0xBWU9VVF9WSURFT19ERUNPREVfRFBCX0tIUjsKKyAgICAgICAgbmV3X2FjY2Vz cyA9IFZLX0FDQ0VTU19UUkFOU0ZFUl9SRUFEX0JJVCB8IFZLX0FDQ0VTU19UUkFOU0ZFUl9XUklU RV9CSVQ7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJFUF9NT0RFX0VOQ09ESU5HX0RQQjoK KyAgICAgICAgbmV3X2xheW91dCA9IFZLX0lNQUdFX0xBWU9VVF9WSURFT19FTkNPREVfRFBCX0tI UjsKKyAgICAgICAgbmV3X2FjY2VzcyA9IFZLX0FDQ0VTU19UUkFOU0ZFUl9SRUFEX0JJVCB8IFZL X0FDQ0VTU19UUkFOU0ZFUl9XUklURV9CSVQ7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAg IGZmX3ZrX2ZyYW1lX2JhcnJpZXIoJnAtPnZrY3R4LCBleGVjLCAmdG1wX2ZyYW1lLCBpbWdfYmFy LCAmbmJfaW1nX2JhciwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNyY19zdGFnZSwKKyAgICAg ICAgICAgICAgICAgICAgICAgIFZLX1BJUEVMSU5FX1NUQUdFXzJfQUxMX0NPTU1BTkRTX0JJVCwK KyAgICAgICAgICAgICAgICAgICAgICAgIG5ld19hY2Nlc3MsIG5ld19sYXlvdXQsIGRzdF9xZik7 CisKKyAgICB2ay0+Q21kUGlwZWxpbmVCYXJyaWVyMihjbWRfYnVmLCAmKFZrRGVwZW5kZW5jeUlu Zm8pIHsKKyAgICAgICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX0RFUEVOREVOQ1lf SU5GTywKKyAgICAgICAgICAgIC5wSW1hZ2VNZW1vcnlCYXJyaWVycyA9IGltZ19iYXIsCisgICAg ICAgICAgICAuaW1hZ2VNZW1vcnlCYXJyaWVyQ291bnQgPSBuYl9pbWdfYmFyLAorICAgICAgICB9 KTsKKworICAgIGVyciA9IGZmX3ZrX2V4ZWNfc3VibWl0KCZwLT52a2N0eCwgZXhlYyk7CisgICAg aWYgKGVyciA8IDApCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICAvKiBXZSBjYW4gZG8gdGhp cyBiZWNhdXNlIHRoZXJlIGFyZSBubyByZWFsIGRlcGVuZGVuY2llcyAqLworICAgIGZmX3ZrX2V4 ZWNfZGlzY2FyZF9kZXBzKCZwLT52a2N0eCwgZXhlYyk7CisKKyAgICByZXR1cm4gMDsKK30KKwor c3RhdGljIGlubGluZSB2b2lkIGdldF9wbGFuZV93aCh1aW50MzJfdCAqdywgdWludDMyX3QgKmgs IGVudW0gQVZQaXhlbEZvcm1hdCBmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGludCBmcmFtZV93LCBpbnQgZnJhbWVfaCwgaW50IHBsYW5lKQoreworICAgIGNvbnN0IEFW UGl4Rm10RGVzY3JpcHRvciAqZGVzYyA9IGF2X3BpeF9mbXRfZGVzY19nZXQoZm9ybWF0KTsKKwor ICAgIC8qIEN1cnJlbnRseSBhbHdheXMgdHJ1ZSB1bmxlc3MgZ3JheSArIGFscGhhIHN1cHBvcnQg aXMgYWRkZWQgKi8KKyAgICBpZiAoIXBsYW5lIHx8IChwbGFuZSA9PSAzKSB8fCBkZXNjLT5mbGFn cyAmIEFWX1BJWF9GTVRfRkxBR19SR0IgfHwKKyAgICAgICAgIShkZXNjLT5mbGFncyAmIEFWX1BJ WF9GTVRfRkxBR19QTEFOQVIpKSB7CisgICAgICAgICp3ID0gZnJhbWVfdzsKKyAgICAgICAgKmgg PSBmcmFtZV9oOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgKncgPSBBVl9DRUlMX1JT SElGVChmcmFtZV93LCBkZXNjLT5sb2cyX2Nocm9tYV93KTsKKyAgICAqaCA9IEFWX0NFSUxfUlNI SUZUKGZyYW1lX2gsIGRlc2MtPmxvZzJfY2hyb21hX2gpOworfQorCitzdGF0aWMgaW50IGNyZWF0 ZV9mcmFtZShBVkhXRnJhbWVzQ29udGV4dCAqaHdmYywgQVZWa0ZyYW1lICoqZnJhbWUsCisgICAg ICAgICAgICAgICAgICAgICAgICBWa0ltYWdlVGlsaW5nIHRpbGluZywgVmtJbWFnZVVzYWdlRmxh Z0JpdHMgdXNhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICBWa0ltYWdlQ3JlYXRlRmxhZ3Mg ZmxhZ3MsIGludCBuYl9sYXllcnMsCisgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpjcmVh dGVfcG5leHQpCit7CisgICAgaW50IGVycjsKKyAgICBWa1Jlc3VsdCByZXQ7CisgICAgQVZWdWxr YW5GcmFtZXNDb250ZXh0ICpod2ZjX3ZrID0gaHdmYy0+aHdjdHg7CisgICAgQVZIV0RldmljZUNv bnRleHQgKmN0eCA9IGh3ZmMtPmRldmljZV9jdHg7CisgICAgVnVsa2FuRGV2aWNlUHJpdiAqcCA9 IGN0eC0+aHdjdHg7CisgICAgQVZWdWxrYW5EZXZpY2VDb250ZXh0ICpod2N0eCA9ICZwLT5wOwor ICAgIEZGVnVsa2FuRnVuY3Rpb25zICp2ayA9ICZwLT52a2N0eC52a2ZuOworICAgIEFWVmtGcmFt ZSAqZjsKKworICAgIFZrU2VtYXBob3JlVHlwZUNyZWF0ZUluZm8gc2VtX3R5cGVfaW5mbyA9IHsK KyAgICAgICAgLnNUeXBlICAgICAgICAgPSBWS19TVFJVQ1RVUkVfVFlQRV9TRU1BUEhPUkVfVFlQ RV9DUkVBVEVfSU5GTywKKyAgICAgICAgLnNlbWFwaG9yZVR5cGUgPSBWS19TRU1BUEhPUkVfVFlQ RV9USU1FTElORSwKKyAgICAgICAgLmluaXRpYWxWYWx1ZSAgPSAwLAorICAgIH07CisgICAgVmtT ZW1hcGhvcmVDcmVhdGVJbmZvIHNlbV9zcGF3biA9IHsKKyAgICAgICAgLnNUeXBlID0gVktfU1RS VUNUVVJFX1RZUEVfU0VNQVBIT1JFX0NSRUFURV9JTkZPLAorICAgICAgICAucE5leHQgPSAmc2Vt X3R5cGVfaW5mbywKKyAgICB9OworCisgICAgVmtFeHBvcnRTZW1hcGhvcmVDcmVhdGVJbmZvIGV4 dF9zZW1faW5mb19vcGFxdWUgPSB7CisgICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBF X0VYUE9SVF9TRU1BUEhPUkVfQ1JFQVRFX0lORk8sCisjaWZkZWYgX1dJTjMyCisgICAgICAgIC5o YW5kbGVUeXBlcyA9IElzV2luZG93czhPckdyZWF0ZXIoKQorICAgICAgICAgICAgPyBWS19FWFRF Uk5BTF9TRU1BUEhPUkVfSEFORExFX1RZUEVfT1BBUVVFX1dJTjMyX0JJVAorICAgICAgICAgICAg OiBWS19FWFRFUk5BTF9TRU1BUEhPUkVfSEFORExFX1RZUEVfT1BBUVVFX1dJTjMyX0tNVF9CSVQs CisjZWxzZQorICAgICAgICAuaGFuZGxlVHlwZXMgPSBWS19FWFRFUk5BTF9TRU1BUEhPUkVfSEFO RExFX1RZUEVfT1BBUVVFX0ZEX0JJVCwKKyNlbmRpZgorICAgIH07CisKKyAgICAvKiBDaGVjayBp ZiBleHBvcnRpbmcgaXMgc3VwcG9ydGVkIGJlZm9yZSBjaGFpbmluZyBhbnkgc3RydWN0cyAqLwor ICAgIGlmIChwLT5leHRfc2VtX3Byb3BzX29wYXF1ZS5leHRlcm5hbFNlbWFwaG9yZUZlYXR1cmVz ICYgVktfRVhURVJOQUxfU0VNQVBIT1JFX0ZFQVRVUkVfRVhQT1JUQUJMRV9CSVQpIHsKKyAgICAg ICAgaWYgKHAtPnZrY3R4LmV4dGVuc2lvbnMgJiAoRkZfVktfRVhUX0VYVEVSTkFMX1dJTjMyX1NF TSB8IEZGX1ZLX0VYVF9FWFRFUk5BTF9GRF9TRU0pKQorICAgICAgICAgICAgZmZfdmtfbGlua19z dHJ1Y3QoJnNlbV90eXBlX2luZm8sICZleHRfc2VtX2luZm9fb3BhcXVlKTsKKyAgICB9CisKKyAg ICBmID0gYXZfdmtfZnJhbWVfYWxsb2MoKTsKKyAgICBpZiAoIWYpIHsKKyAgICAgICAgYXZfbG9n KGN0eCwgQVZfTE9HX0VSUk9SLCAiVW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgQVZWa0Zy YW1lIVxuIik7CisgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7CisgICAgfQorCisgICAg Ly8gVE9ETzogY2hlY2sgd2lkdGggYW5kIGhlaWdodCBmb3IgYWxpZ25tZW50IGluIGNhc2Ugb2Yg bXVsdGlwbGFuYXIgKG11c3QgYmUgbW9kLTIgaWYgc3Vic2FtcGxlZCkKKworICAgIC8qIENyZWF0 ZSB0aGUgaW1hZ2VzICovCisgICAgZm9yIChpbnQgaSA9IDA7IChod2ZjX3ZrLT5mb3JtYXRbaV0g IT0gVktfRk9STUFUX1VOREVGSU5FRCk7IGkrKykgeworICAgICAgICBWa0ltYWdlQ3JlYXRlSW5m byBjcmVhdGVfaW5mbyA9IHsKKyAgICAgICAgICAgIC5zVHlwZSAgICAgICAgICAgICAgICAgPSBW S19TVFJVQ1RVUkVfVFlQRV9JTUFHRV9DUkVBVEVfSU5GTywKKyAgICAgICAgICAgIC5wTmV4dCAg ICAgICAgICAgICAgICAgPSBjcmVhdGVfcG5leHQsCisgICAgICAgICAgICAuaW1hZ2VUeXBlICAg ICAgICAgICAgID0gVktfSU1BR0VfVFlQRV8yRCwKKyAgICAgICAgICAgIC5mb3JtYXQgICAgICAg ICAgICAgICAgPSBod2ZjX3ZrLT5mb3JtYXRbaV0sCisgICAgICAgICAgICAuZXh0ZW50LmRlcHRo ICAgICAgICAgID0gMSwKKyAgICAgICAgICAgIC5taXBMZXZlbHMgICAgICAgICAgICAgPSAxLAor ICAgICAgICAgICAgLmFycmF5TGF5ZXJzICAgICAgICAgICA9IG5iX2xheWVycywKKyAgICAgICAg ICAgIC5mbGFncyAgICAgICAgICAgICAgICAgPSBmbGFncywKKyAgICAgICAgICAgIC50aWxpbmcg ICAgICAgICAgICAgICAgPSB0aWxpbmcsCisgICAgICAgICAgICAuaW5pdGlhbExheW91dCAgICAg ICAgID0gVktfSU1BR0VfTEFZT1VUX1VOREVGSU5FRCwKKyAgICAgICAgICAgIC51c2FnZSAgICAg ICAgICAgICAgICAgPSB1c2FnZSwKKyAgICAgICAgICAgIC5zYW1wbGVzICAgICAgICAgICAgICAg PSBWS19TQU1QTEVfQ09VTlRfMV9CSVQsCisgICAgICAgICAgICAucFF1ZXVlRmFtaWx5SW5kaWNl cyAgID0gcC0+aW1nX3FmcywKKyAgICAgICAgICAgIC5xdWV1ZUZhbWlseUluZGV4Q291bnQgPSBw LT5uYl9pbWdfcWZzLAorICAgICAgICAgICAgLnNoYXJpbmdNb2RlICAgICAgICAgICA9IHAtPm5i X2ltZ19xZnMgPiAxID8gVktfU0hBUklOR19NT0RFX0NPTkNVUlJFTlQgOgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfU0hBUklOR19N T0RFX0VYQ0xVU0lWRSwKKyAgICAgICAgfTsKKworICAgICAgICBnZXRfcGxhbmVfd2goJmNyZWF0 ZV9pbmZvLmV4dGVudC53aWR0aCwgJmNyZWF0ZV9pbmZvLmV4dGVudC5oZWlnaHQsCisgICAgICAg ICAgICAgICAgICAgICBod2ZjLT5zd19mb3JtYXQsIGh3ZmMtPndpZHRoLCBod2ZjLT5oZWlnaHQs IGkpOworCisgICAgICAgIHJldCA9IHZrLT5DcmVhdGVJbWFnZShod2N0eC0+YWN0X2RldiwgJmNy ZWF0ZV9pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHdjdHgtPmFsbG9jLCAm Zi0+aW1nW2ldKTsKKyAgICAgICAgaWYgKHJldCAhPSBWS19TVUNDRVNTKSB7CisgICAgICAgICAg ICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJJbWFnZSBjcmVhdGlvbiBmYWlsdXJlOiAlc1xu IiwKKyAgICAgICAgICAgICAgICAgICBmZl92a19yZXQyc3RyKHJldCkpOworICAgICAgICAgICAg ZXJyID0gQVZFUlJPUihFSU5WQUwpOworICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICB9 CisKKyAgICAgICAgLyogQ3JlYXRlIHNlbWFwaG9yZSAqLworICAgICAgICByZXQgPSB2ay0+Q3Jl YXRlU2VtYXBob3JlKGh3Y3R4LT5hY3RfZGV2LCAmc2VtX3NwYXduLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGh3Y3R4LT5hbGxvYywgJmYtPnNlbVtpXSk7CisgICAgICAgIGlm IChyZXQgIT0gVktfU1VDQ0VTUykgeworICAgICAgICAgICAgYXZfbG9nKGh3Y3R4LCBBVl9MT0df RVJST1IsICJGYWlsZWQgdG8gY3JlYXRlIHNlbWFwaG9yZTogJXNcbiIsCisgICAgICAgICAgICAg ICAgICAgZmZfdmtfcmV0MnN0cihyZXQpKTsKKyAgICAgICAgICAgIGVyciA9IEFWRVJST1JfRVhU RVJOQUw7CisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgIH0KKworICAgICAgICBmLT5x dWV1ZV9mYW1pbHlbaV0gPSBwLT5uYl9pbWdfcWZzID4gMSA/IFZLX1FVRVVFX0ZBTUlMWV9JR05P UkVEIDogcC0+aW1nX3Fmc1swXTsKKyAgICAgICAgZi0+bGF5b3V0W2ldID0gY3JlYXRlX2luZm8u aW5pdGlhbExheW91dDsKKyAgICAgICAgZi0+YWNjZXNzW2ldID0gMHgwOworICAgICAgICBmLT5z ZW1fdmFsdWVbaV0gPSAwOworICAgIH0KKworICAgIGYtPmZsYWdzICAgICA9IDB4MDsKKyAgICBm LT50aWxpbmcgICAgPSB0aWxpbmc7CisKKyAgICAqZnJhbWUgPSBmOworICAgIHJldHVybiAwOwor CitmYWlsOgorICAgIHZ1bGthbl9mcmFtZV9mcmVlKGh3ZmMsIGYpOworICAgIHJldHVybiBlcnI7 Cit9CisKKy8qIENoZWNrcyBpZiBhbiBleHBvcnQgZmxhZyBpcyBlbmFibGVkLCBhbmQgaWYgaXQg aXMgT1JzIGl0IHdpdGggKmlleHAgKi8KK3N0YXRpYyB2b2lkIHRyeV9leHBvcnRfZmxhZ3MoQVZI V0ZyYW1lc0NvbnRleHQgKmh3ZmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZrRXh0 ZXJuYWxNZW1vcnlIYW5kbGVUeXBlRmxhZ3MgKmNvbXBfaGFuZGxlX3R5cGVzLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBWa0V4dGVybmFsTWVtb3J5SGFuZGxlVHlwZUZsYWdCaXRzICpp ZXhwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWa0V4dGVybmFsTWVtb3J5SGFuZGxl VHlwZUZsYWdCaXRzIGV4cCkKK3sKKyAgICBWa1Jlc3VsdCByZXQ7CisgICAgQVZWdWxrYW5GcmFt ZXNDb250ZXh0ICpod2N0eCA9IGh3ZmMtPmh3Y3R4OworICAgIFZ1bGthbkRldmljZVByaXYgKnAg PSBod2ZjLT5kZXZpY2VfY3R4LT5od2N0eDsKKyAgICBBVlZ1bGthbkRldmljZUNvbnRleHQgKmRl dl9od2N0eCA9ICZwLT5wOworICAgIEZGVnVsa2FuRnVuY3Rpb25zICp2ayA9ICZwLT52a2N0eC52 a2ZuOworCisgICAgY29uc3QgVmtJbWFnZURybUZvcm1hdE1vZGlmaWVyTGlzdENyZWF0ZUluZm9F WFQgKmRybV9tb2RfaW5mbyA9CisgICAgICAgIGZmX3ZrX2ZpbmRfc3RydWN0KGh3Y3R4LT5jcmVh dGVfcG5leHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFZLX1NUUlVDVFVSRV9UWVBFX0lN QUdFX0RSTV9GT1JNQVRfTU9ESUZJRVJfTElTVF9DUkVBVEVfSU5GT19FWFQpOworICAgIGludCBo YXNfbW9kcyA9IGh3Y3R4LT50aWxpbmcgPT0gVktfSU1BR0VfVElMSU5HX0RSTV9GT1JNQVRfTU9E SUZJRVJfRVhUICYmIGRybV9tb2RfaW5mbzsKKyAgICBpbnQgbmJfbW9kczsKKworICAgIFZrRXh0 ZXJuYWxJbWFnZUZvcm1hdFByb3BlcnRpZXMgZXByb3BzID0geworICAgICAgICAuc1R5cGUgPSBW S19TVFJVQ1RVUkVfVFlQRV9FWFRFUk5BTF9JTUFHRV9GT1JNQVRfUFJPUEVSVElFU19LSFIsCisg ICAgfTsKKyAgICBWa0ltYWdlRm9ybWF0UHJvcGVydGllczIgcHJvcHMgPSB7CisgICAgICAgIC5z VHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX0lNQUdFX0ZPUk1BVF9QUk9QRVJUSUVTXzIsCisgICAg ICAgIC5wTmV4dCA9ICZlcHJvcHMsCisgICAgfTsKKyAgICBWa1BoeXNpY2FsRGV2aWNlSW1hZ2VE cm1Gb3JtYXRNb2RpZmllckluZm9FWFQgcGh5X2Rldl9tb2RfaW5mbyA9IHsKKyAgICAgICAgLnNU eXBlID0gVktfU1RSVUNUVVJFX1RZUEVfUEhZU0lDQUxfREVWSUNFX0lNQUdFX0RSTV9GT1JNQVRf TU9ESUZJRVJfSU5GT19FWFQsCisgICAgICAgIC5wTmV4dCA9IE5VTEwsCisgICAgICAgIC5wUXVl dWVGYW1pbHlJbmRpY2VzICAgPSBwLT5pbWdfcWZzLAorICAgICAgICAucXVldWVGYW1pbHlJbmRl eENvdW50ID0gcC0+bmJfaW1nX3FmcywKKyAgICAgICAgLnNoYXJpbmdNb2RlICAgICAgICAgICA9 IHAtPm5iX2ltZ19xZnMgPiAxID8gVktfU0hBUklOR19NT0RFX0NPTkNVUlJFTlQgOgorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19TSEFSSU5H X01PREVfRVhDTFVTSVZFLAorICAgIH07CisgICAgVmtQaHlzaWNhbERldmljZUV4dGVybmFsSW1h Z2VGb3JtYXRJbmZvIGVuZXh0ID0geworICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQ RV9QSFlTSUNBTF9ERVZJQ0VfRVhURVJOQUxfSU1BR0VfRk9STUFUX0lORk8sCisgICAgICAgIC5o YW5kbGVUeXBlID0gZXhwLAorICAgICAgICAucE5leHQgPSBoYXNfbW9kcyA/ICZwaHlfZGV2X21v ZF9pbmZvIDogTlVMTCwKKyAgICB9OworICAgIFZrUGh5c2ljYWxEZXZpY2VJbWFnZUZvcm1hdElu Zm8yIHBpbmZvID0geworICAgICAgICAuc1R5cGUgID0gVktfU1RSVUNUVVJFX1RZUEVfUEhZU0lD QUxfREVWSUNFX0lNQUdFX0ZPUk1BVF9JTkZPXzIsCisgICAgICAgIC5wTmV4dCAgPSAhZXhwID8g TlVMTCA6ICZlbmV4dCwKKyAgICAgICAgLmZvcm1hdCA9IHZrX2ZpbmRfZm9ybWF0X2VudHJ5KGh3 ZmMtPnN3X2Zvcm1hdCktPnZrZiwKKyAgICAgICAgLnR5cGUgICA9IFZLX0lNQUdFX1RZUEVfMkQs CisgICAgICAgIC50aWxpbmcgPSBod2N0eC0+dGlsaW5nLAorICAgICAgICAudXNhZ2UgID0gaHdj dHgtPnVzYWdlLAorICAgICAgICAuZmxhZ3MgID0gVktfSU1BR0VfQ1JFQVRFX0FMSUFTX0JJVCwK KyAgICB9OworCisgICAgbmJfbW9kcyA9IGhhc19tb2RzID8gZHJtX21vZF9pbmZvLT5kcm1Gb3Jt YXRNb2RpZmllckNvdW50IDogMTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG5iX21vZHM7IGkr KykgeworICAgICAgICBpZiAoaGFzX21vZHMpCisgICAgICAgICAgICBwaHlfZGV2X21vZF9pbmZv LmRybUZvcm1hdE1vZGlmaWVyID0gZHJtX21vZF9pbmZvLT5wRHJtRm9ybWF0TW9kaWZpZXJzW2ld OworCisgICAgICAgIHJldCA9IHZrLT5HZXRQaHlzaWNhbERldmljZUltYWdlRm9ybWF0UHJvcGVy dGllczIoZGV2X2h3Y3R4LT5waHlzX2RldiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBpbmZvLCAmcHJvcHMpOworCisgICAgICAgIGlm IChyZXQgPT0gVktfU1VDQ0VTUykgeworICAgICAgICAgICAgKmlleHAgfD0gZXhwOworICAgICAg ICAgICAgKmNvbXBfaGFuZGxlX3R5cGVzIHw9IGVwcm9wcy5leHRlcm5hbE1lbW9yeVByb3BlcnRp ZXMuY29tcGF0aWJsZUhhbmRsZVR5cGVzOworICAgICAgICB9CisgICAgfQorfQorCitzdGF0aWMg QVZCdWZmZXJSZWYgKnZ1bGthbl9wb29sX2FsbG9jKHZvaWQgKm9wYXF1ZSwgc2l6ZV90IHNpemUp Cit7CisgICAgaW50IGVycjsKKyAgICBBVlZrRnJhbWUgKmY7CisgICAgQVZCdWZmZXJSZWYgKmF2 YnVmID0gTlVMTDsKKyAgICBBVkhXRnJhbWVzQ29udGV4dCAqaHdmYyA9IG9wYXF1ZTsKKyAgICBW dWxrYW5EZXZpY2VQcml2ICpwID0gaHdmYy0+ZGV2aWNlX2N0eC0+aHdjdHg7CisgICAgVnVsa2Fu RnJhbWVzUHJpdiAqZnAgPSBod2ZjLT5od2N0eDsKKyAgICBBVlZ1bGthbkZyYW1lc0NvbnRleHQg Kmh3Y3R4ID0gJmZwLT5wOworICAgIFZrRXh0ZXJuYWxNZW1vcnlIYW5kbGVUeXBlRmxhZ3MgZSA9 IDB4MDsKKyAgICBWa0V4cG9ydE1lbW9yeUFsbG9jYXRlSW5mbyBlbWluZm9bQVZfTlVNX0RBVEFf UE9JTlRFUlNdOworCisgICAgVmtFeHRlcm5hbE1lbW9yeUltYWdlQ3JlYXRlSW5mbyBlaWluZm8g PSB7CisgICAgICAgIC5zVHlwZSAgICAgICA9IFZLX1NUUlVDVFVSRV9UWVBFX0VYVEVSTkFMX01F TU9SWV9JTUFHRV9DUkVBVEVfSU5GTywKKyAgICAgICAgLnBOZXh0ICAgICAgID0gaHdjdHgtPmNy ZWF0ZV9wbmV4dCwKKyAgICB9OworCisjaWZkZWYgX1dJTjMyCisgICAgaWYgKHAtPnZrY3R4LmV4 dGVuc2lvbnMgJiBGRl9WS19FWFRfRVhURVJOQUxfV0lOMzJfTUVNT1JZKQorICAgICAgICB0cnlf ZXhwb3J0X2ZsYWdzKGh3ZmMsICZlaWluZm8uaGFuZGxlVHlwZXMsICZlLCBJc1dpbmRvd3M4T3JH cmVhdGVyKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBWS19FWFRFUk5BTF9NRU1P UllfSEFORExFX1RZUEVfT1BBUVVFX1dJTjMyX0JJVAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA6IFZLX0VYVEVSTkFMX01FTU9SWV9IQU5ETEVfVFlQRV9PUEFRVUVfV0lOMzJfS01UX0JJ VCk7CisjZWxzZQorICAgIGlmIChwLT52a2N0eC5leHRlbnNpb25zICYgRkZfVktfRVhUX0VYVEVS TkFMX0ZEX01FTU9SWSkKKyAgICAgICAgdHJ5X2V4cG9ydF9mbGFncyhod2ZjLCAmZWlpbmZvLmhh bmRsZVR5cGVzLCAmZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBWS19FWFRFUk5BTF9NRU1P UllfSEFORExFX1RZUEVfT1BBUVVFX0ZEX0JJVCk7CisKKyAgICBpZiAocC0+dmtjdHguZXh0ZW5z aW9ucyAmIEZGX1ZLX0VYVF9FWFRFUk5BTF9ETUFCVUZfTUVNT1JZICYmCisgICAgICAgIGh3Y3R4 LT50aWxpbmcgPT0gVktfSU1BR0VfVElMSU5HX0RSTV9GT1JNQVRfTU9ESUZJRVJfRVhUKQorICAg ICAgICB0cnlfZXhwb3J0X2ZsYWdzKGh3ZmMsICZlaWluZm8uaGFuZGxlVHlwZXMsICZlLAorICAg ICAgICAgICAgICAgICAgICAgICAgIFZLX0VYVEVSTkFMX01FTU9SWV9IQU5ETEVfVFlQRV9ETUFf QlVGX0JJVF9FWFQpOworI2VuZGlmCisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGF2X3BpeF9m bXRfY291bnRfcGxhbmVzKGh3ZmMtPnN3X2Zvcm1hdCk7IGkrKykgeworICAgICAgICBlbWluZm9b aV0uc1R5cGUgICAgICAgPSBWS19TVFJVQ1RVUkVfVFlQRV9FWFBPUlRfTUVNT1JZX0FMTE9DQVRF X0lORk87CisgICAgICAgIGVtaW5mb1tpXS5wTmV4dCAgICAgICA9IGh3Y3R4LT5hbGxvY19wbmV4 dFtpXTsKKyAgICAgICAgZW1pbmZvW2ldLmhhbmRsZVR5cGVzID0gZTsKKyAgICB9CisKKyAgICBl cnIgPSBjcmVhdGVfZnJhbWUoaHdmYywgJmYsIGh3Y3R4LT50aWxpbmcsIGh3Y3R4LT51c2FnZSwg aHdjdHgtPmltZ19mbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgaHdjdHgtPm5iX2xheWVy cywKKyAgICAgICAgICAgICAgICAgICAgICAgZWlpbmZvLmhhbmRsZVR5cGVzID8gJmVpaW5mbyA6 IGh3Y3R4LT5jcmVhdGVfcG5leHQpOworICAgIGlmIChlcnIpCisgICAgICAgIHJldHVybiBOVUxM OworCisgICAgZXJyID0gYWxsb2NfYmluZF9tZW0oaHdmYywgZiwgZW1pbmZvLCBzaXplb2YoKmVt aW5mbykpOworICAgIGlmIChlcnIpCisgICAgICAgIGdvdG8gZmFpbDsKKworICAgIGlmICggKGh3 Y3R4LT51c2FnZSAmIFZLX0lNQUdFX1VTQUdFX1ZJREVPX0RFQ09ERV9EUEJfQklUX0tIUikgJiYK KyAgICAgICAgIShod2N0eC0+dXNhZ2UgJiBWS19JTUFHRV9VU0FHRV9WSURFT19ERUNPREVfRFNU X0JJVF9LSFIpKQorICAgICAgICBlcnIgPSBwcmVwYXJlX2ZyYW1lKGh3ZmMsICZmcC0+Y29tcHV0 ZV9leGVjLCBmLCBQUkVQX01PREVfREVDT0RJTkdfRFBCKTsKKyAgICBlbHNlIGlmIChod2N0eC0+ dXNhZ2UgJiBWS19JTUFHRV9VU0FHRV9WSURFT19ERUNPREVfRFNUX0JJVF9LSFIpCisgICAgICAg IGVyciA9IHByZXBhcmVfZnJhbWUoaHdmYywgJmZwLT5jb21wdXRlX2V4ZWMsIGYsIFBSRVBfTU9E RV9ERUNPRElOR19EU1QpOworICAgIGVsc2UgaWYgKGh3Y3R4LT51c2FnZSAmIFZLX0lNQUdFX1VT QUdFX1ZJREVPX0VOQ09ERV9EUEJfQklUX0tIUikKKyAgICAgICAgZXJyID0gcHJlcGFyZV9mcmFt ZShod2ZjLCAmZnAtPmNvbXB1dGVfZXhlYywgZiwgUFJFUF9NT0RFX0VOQ09ESU5HX0RQQik7Cisg ICAgZWxzZSBpZiAoaHdjdHgtPnVzYWdlICYgVktfSU1BR0VfVVNBR0VfVFJBTlNGRVJfRFNUX0JJ VCkKKyAgICAgICAgZXJyID0gcHJlcGFyZV9mcmFtZShod2ZjLCAmZnAtPmNvbXB1dGVfZXhlYywg ZiwgUFJFUF9NT0RFX1dSSVRFKTsKKyAgICBlbHNlCisgICAgICAgIGVyciA9IHByZXBhcmVfZnJh bWUoaHdmYywgJmZwLT5jb21wdXRlX2V4ZWMsIGYsIFBSRVBfTU9ERV9HRU5FUkFMKTsKKyAgICBp ZiAoZXJyKQorICAgICAgICBnb3RvIGZhaWw7CisKKyAgICBhdmJ1ZiA9IGF2X2J1ZmZlcl9jcmVh dGUoKHVpbnQ4X3QgKilmLCBzaXplb2YoQVZWa0ZyYW1lKSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdnVsa2FuX2ZyYW1lX2ZyZWVfY2IsIGh3ZmMsIDApOworICAgIGlmICghYXZidWYp CisgICAgICAgIGdvdG8gZmFpbDsKKworICAgIHJldHVybiBhdmJ1ZjsKKworZmFpbDoKKyAgICB2 dWxrYW5fZnJhbWVfZnJlZShod2ZjLCBmKTsKKyAgICByZXR1cm4gTlVMTDsKK30KKworc3RhdGlj IHZvaWQgbG9ja19mcmFtZShBVkhXRnJhbWVzQ29udGV4dCAqZmMsIEFWVmtGcmFtZSAqdmtmKQor eworICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmdmtmLT5pbnRlcm5hbC0+dXBkYXRlX211dGV4KTsK K30KKworc3RhdGljIHZvaWQgdW5sb2NrX2ZyYW1lKEFWSFdGcmFtZXNDb250ZXh0ICpmYywgQVZW a0ZyYW1lICp2a2YpCit7CisgICAgcHRocmVhZF9tdXRleF91bmxvY2soJnZrZi0+aW50ZXJuYWwt PnVwZGF0ZV9tdXRleCk7Cit9CisKK3N0YXRpYyB2b2lkIHZ1bGthbl9mcmFtZXNfdW5pbml0KEFW SFdGcmFtZXNDb250ZXh0ICpod2ZjKQoreworICAgIFZ1bGthbkRldmljZVByaXYgKnAgPSBod2Zj LT5kZXZpY2VfY3R4LT5od2N0eDsKKyAgICBWdWxrYW5GcmFtZXNQcml2ICpmcCA9IGh3ZmMtPmh3 Y3R4OworCisgICAgaWYgKGZwLT5tb2RpZmllcl9pbmZvKSB7CisgICAgICAgIGlmIChmcC0+bW9k aWZpZXJfaW5mby0+cERybUZvcm1hdE1vZGlmaWVycykKKyAgICAgICAgICAgIGF2X2ZyZWVwKCZm cC0+bW9kaWZpZXJfaW5mby0+cERybUZvcm1hdE1vZGlmaWVycyk7CisgICAgICAgIGF2X2ZyZWVw KCZmcC0+bW9kaWZpZXJfaW5mbyk7CisgICAgfQorCisgICAgZmZfdmtfZXhlY19wb29sX2ZyZWUo JnAtPnZrY3R4LCAmZnAtPmNvbXB1dGVfZXhlYyk7CisgICAgZmZfdmtfZXhlY19wb29sX2ZyZWUo JnAtPnZrY3R4LCAmZnAtPnVwbG9hZF9leGVjKTsKKyAgICBmZl92a19leGVjX3Bvb2xfZnJlZSgm cC0+dmtjdHgsICZmcC0+ZG93bmxvYWRfZXhlYyk7CisKKyAgICBhdl9idWZmZXJfcG9vbF91bmlu aXQoJmZwLT50bXApOworfQorCitzdGF0aWMgaW50IHZ1bGthbl9mcmFtZXNfaW5pdChBVkhXRnJh bWVzQ29udGV4dCAqaHdmYykKK3sKKyAgICBpbnQgZXJyOworICAgIEFWVmtGcmFtZSAqZjsKKyAg ICBWdWxrYW5GcmFtZXNQcml2ICpmcCA9IGh3ZmMtPmh3Y3R4OworICAgIEFWVnVsa2FuRnJhbWVz Q29udGV4dCAqaHdjdHggPSAmZnAtPnA7CisgICAgVnVsa2FuRGV2aWNlUHJpdiAqcCA9IGh3ZmMt PmRldmljZV9jdHgtPmh3Y3R4OworICAgIEFWVnVsa2FuRGV2aWNlQ29udGV4dCAqZGV2X2h3Y3R4 ID0gJnAtPnA7CisgICAgVmtJbWFnZVVzYWdlRmxhZ0JpdHMgc3VwcG9ydGVkX3VzYWdlOworICAg IEZGVnVsa2FuRnVuY3Rpb25zICp2ayA9ICZwLT52a2N0eC52a2ZuOworICAgIGNvbnN0IHN0cnVj dCBGRlZrRm9ybWF0RW50cnkgKmZtdDsKKyAgICBpbnQgZGlzYWJsZV9tdWx0aXBsYW5lID0gcC0+ ZGlzYWJsZV9tdWx0aXBsYW5lIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChod2N0 eC0+ZmxhZ3MgJiBBVl9WS19GUkFNRV9GTEFHX0RJU0FCTEVfTVVMVElQTEFORSk7CisKKyAgICAv KiBEZWZhdWx0cyAqLworICAgIGlmICghaHdjdHgtPm5iX2xheWVycykKKyAgICAgICAgaHdjdHgt Pm5iX2xheWVycyA9IDE7CisKKyAgICAvKiBWS19JTUFHRV9USUxJTkdfT1BUSU1BTCA9PSAwLCBj YW4ndCBjaGVjayBmb3IgaXQgcmVhbGx5ICovCisgICAgaWYgKHAtPnVzZV9saW5lYXJfaW1hZ2Vz ICYmCisgICAgICAgIChod2N0eC0+dGlsaW5nICE9IFZLX0lNQUdFX1RJTElOR19EUk1fRk9STUFU X01PRElGSUVSX0VYVCkpCisgICAgICAgIGh3Y3R4LT50aWxpbmcgPSBWS19JTUFHRV9USUxJTkdf TElORUFSOworCisKKyAgICBmbXQgPSB2a19maW5kX2Zvcm1hdF9lbnRyeShod2ZjLT5zd19mb3Jt YXQpOworICAgIGlmICghZm10KSB7CisgICAgICAgIGF2X2xvZyhod2ZjLCBBVl9MT0dfRVJST1Is ICJVbnN1cHBvcnRlZCBwaXhlbCBmb3JtYXQ6ICVzIVxuIiwKKyAgICAgICAgICAgICAgIGF2X2dl dF9waXhfZm10X25hbWUoaHdmYy0+c3dfZm9ybWF0KSk7CisgICAgICAgIHJldHVybiBBVkVSUk9S KEVJTlZBTCk7CisgICAgfQorCisgICAgaWYgKGh3Y3R4LT5mb3JtYXRbMF0gIT0gVktfRk9STUFU X1VOREVGSU5FRCkgeworICAgICAgICBpZiAoaHdjdHgtPmZvcm1hdFswXSAhPSBmbXQtPnZrZikg eworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmbXQtPm5iX2ltYWdlc19mYWxsYmFj azsgaSsrKSB7CisgICAgICAgICAgICAgICAgaWYgKGh3Y3R4LT5mb3JtYXRbaV0gIT0gZm10LT5m YWxsYmFja1tpXSkgeworICAgICAgICAgICAgICAgICAgICBhdl9sb2coaHdmYywgQVZfTE9HX0VS Uk9SLCAiSW5jb21wYXRpYmxlIFZ1bGthbiBmb3JtYXQgZ2l2ZW4gIgorICAgICAgICAgICAgICAg ICAgICAgICAgICAgImZvciB0aGUgY3VycmVudCBzd19mb3JtYXQgJXMhXG4iLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgYXZfZ2V0X3BpeF9mbXRfbmFtZShod2ZjLT5zd19mb3JtYXQpKTsK KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKKyAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvKiBDaGVjayBpZiB0 aGUgc3dfZm9ybWF0IGl0c2VsZiBpcyBzdXBwb3J0ZWQgKi8KKyAgICAgICAgZXJyID0gdmtmbXRf ZnJvbV9waXhmbXQyKGh3ZmMtPmRldmljZV9jdHgsIGh3ZmMtPnN3X2Zvcm1hdCwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGh3Y3R4LT50aWxpbmcsIE5VTEwsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMLCAmc3VwcG9ydGVkX3VzYWdlLCAwLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIWh3Y3R4LT51c2FnZSB8fAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKGh3Y3R4LT51c2FnZSAmIFZLX0lNQUdFX1VTQUdF X1NUT1JBR0VfQklUKSk7CisgICAgICAgIGlmIChlcnIgPCAwKSB7CisgICAgICAgICAgICBhdl9s b2coaHdmYywgQVZfTE9HX0VSUk9SLCAiVW5zdXBwb3J0ZWQgc3cgZm9ybWF0OiAlcyFcbiIsCisg ICAgICAgICAgICAgICAgICAgYXZfZ2V0X3BpeF9mbXRfbmFtZShod2ZjLT5zd19mb3JtYXQpKTsK KyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7CisgICAgICAgIH0KKyAgICB9IGVs c2UgeworICAgICAgICBlcnIgPSB2a2ZtdF9mcm9tX3BpeGZtdDIoaHdmYy0+ZGV2aWNlX2N0eCwg aHdmYy0+c3dfZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHdjdHgt PnRpbGluZywgaHdjdHgtPmZvcm1hdCwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIE5VTEwsICZzdXBwb3J0ZWRfdXNhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBkaXNhYmxlX211bHRpcGxhbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAhaHdjdHgtPnVzYWdlIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo aHdjdHgtPnVzYWdlICYgVktfSU1BR0VfVVNBR0VfU1RPUkFHRV9CSVQpKTsKKyAgICAgICAgaWYg KGVyciA8IDApCisgICAgICAgICAgICByZXR1cm4gZXJyOworICAgIH0KKworICAgIC8qIE52aWRp YSBpcyB2aW9sYXRpbmcgdGhlIHNwZWMgYmVjYXVzZSB0aGV5IHRob3VnaHQgbm8gb25lIHdvdWxk IHVzZSB0aGlzLiAqLworICAgIGlmIChwLT5kcHJvcHMuZHJpdmVySUQgPT0gVktfRFJJVkVSX0lE X05WSURJQV9QUk9QUklFVEFSWSAmJgorICAgICAgICAoKChmbXQtPm5iX2ltYWdlcyA9PSAxKSAm JiAoZm10LT52a19wbGFuZXMgPiAxKSkgfHwKKyAgICAgICAgIChhdl9waXhfZm10X2Rlc2NfZ2V0 KGh3ZmMtPnN3X2Zvcm1hdCktPm5iX2NvbXBvbmVudHMgPT0gMSkpKQorICAgICAgICBzdXBwb3J0 ZWRfdXNhZ2UgJj0gflZLX0lNQUdFX1VTQUdFX0hPU1RfVFJBTlNGRVJfQklUX0VYVDsKKworICAg IC8qIEltYWdlIHVzYWdlIGZsYWdzICovCisgICAgaWYgKCFod2N0eC0+dXNhZ2UpIHsKKyAgICAg ICAgaHdjdHgtPnVzYWdlID0gc3VwcG9ydGVkX3VzYWdlICYgKFZLX0lNQUdFX1VTQUdFX1RSQU5T RkVSX0RTVF9CSVQgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg VktfSU1BR0VfVVNBR0VfVFJBTlNGRVJfU1JDX0JJVCB8CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBWS19JTUFHRV9VU0FHRV9TVE9SQUdFX0JJVCAgICAgIHwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZLX0lNQUdFX1VTQUdFX1NB TVBMRURfQklUKTsKKworICAgICAgICBpZiAoKHAtPnZrY3R4LmV4dGVuc2lvbnMgJiBGRl9WS19F WFRfSE9TVF9JTUFHRV9DT1BZKSAmJiAhcC0+ZGlzYWJsZV9ob3N0X3RyYW5zZmVyKQorICAgICAg ICAgICAgaHdjdHgtPnVzYWdlIHw9IHN1cHBvcnRlZF91c2FnZSAmIFZLX0lNQUdFX1VTQUdFX0hP U1RfVFJBTlNGRVJfQklUX0VYVDsKKworICAgICAgICAvKiBFbmFibGVzIGVuY29kaW5nIG9mIGlt YWdlcywgaWYgc3VwcG9ydGVkIGJ5IGZvcm1hdCBhbmQgZXh0ZW5zaW9ucyAqLworICAgICAgICBp ZiAoKHN1cHBvcnRlZF91c2FnZSAmIFZLX0lNQUdFX1VTQUdFX1ZJREVPX0VOQ09ERV9TUkNfQklU X0tIUikgJiYKKyAgICAgICAgICAgIChwLT52a2N0eC5leHRlbnNpb25zICYgKEZGX1ZLX0VYVF9W SURFT19FTkNPREVfUVVFVUUgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBG Rl9WS19FWFRfVklERU9fTUFJTlRFTkFOQ0VfMSkpKQorICAgICAgICAgICAgaHdjdHgtPnVzYWdl IHw9IFZLX0lNQUdFX1VTQUdFX1ZJREVPX0VOQ09ERV9TUkNfQklUX0tIUjsKKyAgICB9CisKKyAg ICAvKiBJbWFnZSBjcmVhdGlvbiBmbGFncy4KKyAgICAgKiBPbmx5IGZpbGwgdGhlbSBpbiBhdXRv bWF0aWNhbGx5IGlmIHRoZSBpbWFnZSBpcyBub3QgZ29pbmcgdG8gYmUgdXNlZCBhcworICAgICAq IGEgRFBCLW9ubHkgaW1hZ2UsIGFuZCB3ZSBoYXZlIFNBTVBMRUQvU1RPUkFHRSBiaXRzIHNldC4g Ki8KKyAgICBpZiAoIWh3Y3R4LT5pbWdfZmxhZ3MpIHsKKyAgICAgICAgaW50IGlzX2xvbmVfZHBi ID0gKChod2N0eC0+dXNhZ2UgJiBWS19JTUFHRV9VU0FHRV9WSURFT19FTkNPREVfRFBCX0JJVF9L SFIpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGh3Y3R4LT51c2FnZSAmIFZLX0lN QUdFX1VTQUdFX1ZJREVPX0RFQ09ERV9EUEJfQklUX0tIUikgJiYKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAhKGh3Y3R4LT51c2FnZSAmIFZLX0lNQUdFX1VTQUdFX1ZJREVPX0RFQ09ERV9E U1RfQklUX0tIUikpKTsKKyAgICAgICAgaW50IHNhbXBsZWFibGUgPSBod2N0eC0+dXNhZ2UgJiAo VktfSU1BR0VfVVNBR0VfU0FNUExFRF9CSVQgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBWS19JTUFHRV9VU0FHRV9TVE9SQUdFX0JJVCk7CisgICAgICAgIGh3Y3R4 LT5pbWdfZmxhZ3MgPSBWS19JTUFHRV9DUkVBVEVfTVVUQUJMRV9GT1JNQVRfQklUOworICAgICAg ICBpZiAoc2FtcGxlYWJsZSAmJiAhaXNfbG9uZV9kcGIpIHsKKyAgICAgICAgICAgIGh3Y3R4LT5p bWdfZmxhZ3MgfD0gVktfSU1BR0VfQ1JFQVRFX0FMSUFTX0JJVDsKKyAgICAgICAgICAgIGlmICgo Zm10LT52a19wbGFuZXMgPiAxKSAmJiAoaHdjdHgtPmZvcm1hdFswXSA9PSBmbXQtPnZrZikpCisg ICAgICAgICAgICAgICAgaHdjdHgtPmltZ19mbGFncyB8PSBWS19JTUFHRV9DUkVBVEVfRVhURU5E RURfVVNBR0VfQklUOworICAgICAgICB9CisgICAgfQorCisgICAgLyogSWYgdGhlIGltYWdlIGhh cyBhbiBFTkNPREVfU1JDIHVzYWdlLCBhbmQgdGhlIG1haW50ZW5hbmNlMQorICAgICAqIGV4dGVu c2lvbiBpcyBzdXBwb3J0ZWQsIGNoZWNrIGlmIGl0IGhhcyBhIHByb2ZpbGUgbGlzdC4KKyAgICAg KiBJZiB0aGVyZSdzIG5vIHByb2ZpbGUgbGlzdCwgb3IgaXQgaGFzIG5vIGVuY29kZSBvcGVyYXRp b25zLAorICAgICAqIHRoZW4gYWxsb3cgY3JlYXRpbmcgdGhlIGltYWdlIHdpdGggbm8gc3BlY2lm aWMgcHJvZmlsZS4gKi8KKyAgICBpZiAoKGh3Y3R4LT51c2FnZSAmIFZLX0lNQUdFX1VTQUdFX1ZJ REVPX0VOQ09ERV9TUkNfQklUX0tIUikgJiYKKyAgICAgICAgKHAtPnZrY3R4LmV4dGVuc2lvbnMg JiAoRkZfVktfRVhUX1ZJREVPX0VOQ09ERV9RVUVVRSB8CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEZGX1ZLX0VYVF9WSURFT19NQUlOVEVOQU5DRV8xKSkpIHsKKyAgICAgICAgY29u c3QgVmtWaWRlb1Byb2ZpbGVMaXN0SW5mb0tIUiAqcGw7CisgICAgICAgIHBsID0gZmZfdmtfZmlu ZF9zdHJ1Y3QoaHdjdHgtPmNyZWF0ZV9wbmV4dCwgVktfU1RSVUNUVVJFX1RZUEVfVklERU9fUFJP RklMRV9MSVNUX0lORk9fS0hSKTsKKyAgICAgICAgaWYgKCFwbCkgeworICAgICAgICAgICAgaHdj dHgtPmltZ19mbGFncyB8PSBWS19JTUFHRV9DUkVBVEVfVklERU9fUFJPRklMRV9JTkRFUEVOREVO VF9CSVRfS0hSOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdWludDMyX3QgaTsKKyAg ICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBwbC0+cHJvZmlsZUNvdW50OyBpKyspIHsKKyAgICAg ICAgICAgICAgICAvKiBWaWRlbyBvcHMgc3RhcnQgYXQgZXhhY3RseSAweDAwMDEwMDAwICovCisg ICAgICAgICAgICAgICAgaWYgKHBsLT5wUHJvZmlsZXNbaV0udmlkZW9Db2RlY09wZXJhdGlvbiAm IDB4RkZGRjAwMDApCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor ICAgICAgICAgICAgaWYgKGkgPT0gcGwtPnByb2ZpbGVDb3VudCkKKyAgICAgICAgICAgICAgICBo d2N0eC0+aW1nX2ZsYWdzIHw9IFZLX0lNQUdFX0NSRUFURV9WSURFT19QUk9GSUxFX0lOREVQRU5E RU5UX0JJVF9LSFI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIWh3Y3R4LT5sb2NrX2Zy YW1lKQorICAgICAgICBod2N0eC0+bG9ja19mcmFtZSA9IGxvY2tfZnJhbWU7CisKKyAgICBpZiAo IWh3Y3R4LT51bmxvY2tfZnJhbWUpCisgICAgICAgIGh3Y3R4LT51bmxvY2tfZnJhbWUgPSB1bmxv Y2tfZnJhbWU7CisKKyAgICBlcnIgPSBmZl92a19leGVjX3Bvb2xfaW5pdCgmcC0+dmtjdHgsIHAt PmNvbXB1dGVfcWYsICZmcC0+Y29tcHV0ZV9leGVjLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHAtPmNvbXB1dGVfcWYtPm51bSwgMCwgMCwgMCwgTlVMTCk7CisgICAgaWYgKGVycikK KyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIGVyciA9IGZmX3ZrX2V4ZWNfcG9vbF9pbml0KCZw LT52a2N0eCwgcC0+dHJhbnNmZXJfcWYsICZmcC0+dXBsb2FkX2V4ZWMsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcC0+dHJhbnNmZXJfcWYtPm51bSoyLCAwLCAwLCAwLCBOVUxMKTsK KyAgICBpZiAoZXJyKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgZXJyID0gZmZfdmtfZXhl Y19wb29sX2luaXQoJnAtPnZrY3R4LCBwLT50cmFuc2Zlcl9xZiwgJmZwLT5kb3dubG9hZF9leGVj LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAtPnRyYW5zZmVyX3FmLT5udW0sIDAs IDAsIDAsIE5VTEwpOworICAgIGlmIChlcnIpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICAv KiBUZXN0IHRvIHNlZSBpZiBhbGxvY2F0aW9uIHdpbGwgZmFpbCAqLworICAgIGVyciA9IGNyZWF0 ZV9mcmFtZShod2ZjLCAmZiwgaHdjdHgtPnRpbGluZywgaHdjdHgtPnVzYWdlLCBod2N0eC0+aW1n X2ZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICBod2N0eC0+bmJfbGF5ZXJzLCBod2N0eC0+ Y3JlYXRlX3BuZXh0KTsKKyAgICBpZiAoZXJyKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAg LyogQ29sbGVjdCBgVmtEcm1Gb3JtYXRNb2RpZmllclByb3BlcnRpZXNFWFRgIGZvciBlYWNoIHBs YW5lLiBSZXF1aXJlZCBmb3IgRFJNIGV4cG9ydC4gKi8KKyAgICBpZiAocC0+dmtjdHguZXh0ZW5z aW9ucyAmIEZGX1ZLX0VYVF9EUk1fTU9ESUZJRVJfRkxBR1MgJiYgaHdjdHgtPnRpbGluZyA9PSBW S19JTUFHRV9USUxJTkdfRFJNX0ZPUk1BVF9NT0RJRklFUl9FWFQpIHsKKyAgICAgICAgVmtJbWFn ZURybUZvcm1hdE1vZGlmaWVyUHJvcGVydGllc0VYVCBkcm1fbW9kID0geworICAgICAgICAgICAg LnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfSU1BR0VfRFJNX0ZPUk1BVF9NT0RJRklFUl9QUk9Q RVJUSUVTX0VYVCwKKyAgICAgICAgfTsKKyAgICAgICAgZXJyID0gdmstPkdldEltYWdlRHJtRm9y bWF0TW9kaWZpZXJQcm9wZXJ0aWVzRVhUKGRldl9od2N0eC0+YWN0X2RldiwgZi0+aW1nWzBdLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm ZHJtX21vZCk7CisgICAgICAgIGlmIChlcnIgIT0gVktfU1VDQ0VTUykgeworICAgICAgICAgICAg YXZfbG9nKGh3ZmMsIEFWX0xPR19FUlJPUiwgIkZhaWxlZCB0byBnZXQgaW1hZ2UgRFJNIGZvcm1h dCBtb2RpZmllciBwcm9wZXJ0aWVzIik7CisgICAgICAgICAgICB2dWxrYW5fZnJhbWVfZnJlZSho d2ZjLCBmKTsKKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOworICAgICAgICB9 CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZm10LT52a19wbGFuZXM7ICsraSkgeworICAg ICAgICAgICAgVmtEcm1Gb3JtYXRNb2RpZmllclByb3BlcnRpZXNMaXN0RVhUIG1vZHA7CisgICAg ICAgICAgICBWa0Zvcm1hdFByb3BlcnRpZXMyIGZtdHA7CisgICAgICAgICAgICBWa0RybUZvcm1h dE1vZGlmaWVyUHJvcGVydGllc0VYVCAqbW9kX3Byb3BzID0gTlVMTDsKKworICAgICAgICAgICAg bW9kcCA9IChWa0RybUZvcm1hdE1vZGlmaWVyUHJvcGVydGllc0xpc3RFWFQpIHsKKyAgICAgICAg ICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9EUk1fRk9STUFUX01PRElGSUVSX1BS T1BFUlRJRVNfTElTVF9FWFQsCisgICAgICAgICAgICB9OworICAgICAgICAgICAgZm10cCA9IChW a0Zvcm1hdFByb3BlcnRpZXMyKSB7CisgICAgICAgICAgICAgICAgLnNUeXBlID0gVktfU1RSVUNU VVJFX1RZUEVfRk9STUFUX1BST1BFUlRJRVNfMiwKKyAgICAgICAgICAgICAgICAucE5leHQgPSAm bW9kcCwKKyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgIC8qIHF1ZXJ5IGRybUZvcm1hdE1v ZGlmaWVyQ291bnQgYnkga2VlcGluZyBwRHJtRm9ybWF0TW9kaWZpZXJQcm9wZXJ0aWVzIE5VTEwg Ki8KKyAgICAgICAgICAgIHZrLT5HZXRQaHlzaWNhbERldmljZUZvcm1hdFByb3BlcnRpZXMyKGRl dl9od2N0eC0+cGh5c19kZXYsIGZtdC0+ZmFsbGJhY2tbaV0sICZmbXRwKTsKKworICAgICAgICAg ICAgbW9kcC5wRHJtRm9ybWF0TW9kaWZpZXJQcm9wZXJ0aWVzID0KKyAgICAgICAgICAgICAgICBh dl9jYWxsb2MobW9kcC5kcm1Gb3JtYXRNb2RpZmllckNvdW50LCBzaXplb2YoKm1vZHAucERybUZv cm1hdE1vZGlmaWVyUHJvcGVydGllcykpOworICAgICAgICAgICAgaWYgKCFtb2RwLnBEcm1Gb3Jt YXRNb2RpZmllclByb3BlcnRpZXMpIHsKKyAgICAgICAgICAgICAgICB2dWxrYW5fZnJhbWVfZnJl ZShod2ZjLCBmKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOworICAg ICAgICAgICAgfQorICAgICAgICAgICAgdmstPkdldFBoeXNpY2FsRGV2aWNlRm9ybWF0UHJvcGVy dGllczIoZGV2X2h3Y3R4LT5waHlzX2RldiwgZm10LT5mYWxsYmFja1tpXSwgJmZtdHApOworCisg ICAgICAgICAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbW9kcC5kcm1Gb3JtYXRNb2RpZmll ckNvdW50OyArK2kpIHsKKyAgICAgICAgICAgICAgICBWa0RybUZvcm1hdE1vZGlmaWVyUHJvcGVy dGllc0VYVCAqbSA9ICZtb2RwLnBEcm1Gb3JtYXRNb2RpZmllclByb3BlcnRpZXNbaV07CisgICAg ICAgICAgICAgICAgaWYgKG0tPmRybUZvcm1hdE1vZGlmaWVyID09IGRybV9tb2QuZHJtRm9ybWF0 TW9kaWZpZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgbW9kX3Byb3BzID0gbTsKKyAgICAgICAg ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisg ICAgICAgICAgICBpZiAobW9kX3Byb3BzID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBhdl9s b2coaHdmYywgQVZfTE9HX0VSUk9SLCAiTm8gRFJNIGZvcm1hdCBtb2RpZmllciBwcm9wZXJ0aWVz IGZvdW5kIGZvciBtb2RpZmllciAweCUwMTYiUFJJeDY0IlxuIiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgZHJtX21vZC5kcm1Gb3JtYXRNb2RpZmllcik7CisgICAgICAgICAgICAgICAgYXZf ZnJlZShtb2RwLnBEcm1Gb3JtYXRNb2RpZmllclByb3BlcnRpZXMpOworICAgICAgICAgICAgICAg IHZ1bGthbl9mcmFtZV9mcmVlKGh3ZmMsIGYpOworICAgICAgICAgICAgICAgIHJldHVybiBBVkVS Uk9SX0VYVEVSTkFMOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmcC0+ZHJtX2Zvcm1h dF9tb2RpZmllcl9wcm9wZXJ0aWVzW2ldID0gKm1vZF9wcm9wczsKKyAgICAgICAgICAgIGF2X2Zy ZWUobW9kcC5wRHJtRm9ybWF0TW9kaWZpZXJQcm9wZXJ0aWVzKTsKKyAgICAgICAgfQorICAgIH0K KworICAgIHZ1bGthbl9mcmFtZV9mcmVlKGh3ZmMsIGYpOworCisgICAgLyogSWYgdXNlciBkaWQg bm90IHNwZWNpZnkgYSBwb29sLCBod2ZjLT5wb29sIHdpbGwgYmUgc2V0IHRvIHRoZSBpbnRlcm5h bCBvbmUKKyAgICAgKiBpbiBod2NvbnRleHQuYyBqdXN0IGFmdGVyIHRoaXMgZ2V0cyBjYWxsZWQg Ki8KKyAgICBpZiAoIWh3ZmMtPnBvb2wpIHsKKyAgICAgICAgZmZod2ZyYW1lc2N0eChod2ZjKS0+ cG9vbF9pbnRlcm5hbCA9IGF2X2J1ZmZlcl9wb29sX2luaXQyKHNpemVvZihBVlZrRnJhbWUpLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaHdmYywgdnVsa2FuX3Bvb2xfYWxsb2MsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKyAgICAg ICAgaWYgKCFmZmh3ZnJhbWVzY3R4KGh3ZmMpLT5wb29sX2ludGVybmFsKQorICAgICAgICAgICAg cmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworc3Rh dGljIGludCB2dWxrYW5fZ2V0X2J1ZmZlcihBVkhXRnJhbWVzQ29udGV4dCAqaHdmYywgQVZGcmFt ZSAqZnJhbWUpCit7CisgICAgZnJhbWUtPmJ1ZlswXSA9IGF2X2J1ZmZlcl9wb29sX2dldChod2Zj LT5wb29sKTsKKyAgICBpZiAoIWZyYW1lLT5idWZbMF0pCisgICAgICAgIHJldHVybiBBVkVSUk9S KEVOT01FTSk7CisKKyAgICBmcmFtZS0+ZGF0YVswXSA9IGZyYW1lLT5idWZbMF0tPmRhdGE7Cisg ICAgZnJhbWUtPmZvcm1hdCAgPSBBVl9QSVhfRk1UX1ZVTEtBTjsKKyAgICBmcmFtZS0+d2lkdGgg ICA9IGh3ZmMtPndpZHRoOworICAgIGZyYW1lLT5oZWlnaHQgID0gaHdmYy0+aGVpZ2h0OworCisg ICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdnVsa2FuX3RyYW5zZmVyX2dldF9mb3JtYXRz KEFWSFdGcmFtZXNDb250ZXh0ICpod2ZjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZW51bSBBVkhXRnJhbWVUcmFuc2ZlckRpcmVjdGlvbiBkaXIsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIEFWUGl4ZWxGb3JtYXQgKipmb3JtYXRz KQoreworICAgIGVudW0gQVZQaXhlbEZvcm1hdCAqZm10czsKKyAgICBpbnQgbiA9IDI7CisKKyNp ZiBDT05GSUdfQ1VEQQorICAgIG4rKzsKKyNlbmRpZgorICAgIGZtdHMgPSBhdl9tYWxsb2NfYXJy YXkobiwgc2l6ZW9mKCpmbXRzKSk7CisgICAgaWYgKCFmbXRzKQorICAgICAgICByZXR1cm4gQVZF UlJPUihFTk9NRU0pOworCisgICAgbiA9IDA7CisgICAgZm10c1tuKytdID0gaHdmYy0+c3dfZm9y bWF0OworI2lmIENPTkZJR19DVURBCisgICAgZm10c1tuKytdID0gQVZfUElYX0ZNVF9DVURBOwor I2VuZGlmCisgICAgZm10c1tuKytdID0gQVZfUElYX0ZNVF9OT05FOworCisgICAgKmZvcm1hdHMg PSBmbXRzOworICAgIHJldHVybiAwOworfQorCisjaWYgQ09ORklHX0xJQkRSTQorc3RhdGljIHZv aWQgdnVsa2FuX3VubWFwX2Zyb21fZHJtKEFWSFdGcmFtZXNDb250ZXh0ICpod2ZjLCBIV01hcERl c2NyaXB0b3IgKmh3bWFwKQoreworICAgIHZ1bGthbl9mcmFtZV9mcmVlKGh3ZmMsIGh3bWFwLT5w cml2KTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCB7CisgICAgdWludDMyX3QgZHJtX2ZvdXJj YzsKKyAgICBWa0Zvcm1hdCB2a19mb3JtYXQ7Cit9IHZ1bGthbl9kcm1fZm9ybWF0X21hcFtdID0g eworICAgIHsgRFJNX0ZPUk1BVF9SOCwgICAgICAgVktfRk9STUFUX1I4X1VOT1JNICAgICAgIH0s CisgICAgeyBEUk1fRk9STUFUX1IxNiwgICAgICBWS19GT1JNQVRfUjE2X1VOT1JNICAgICAgfSwK KyAgICB7IERSTV9GT1JNQVRfR1I4OCwgICAgIFZLX0ZPUk1BVF9SOEc4X1VOT1JNICAgICB9LAor ICAgIHsgRFJNX0ZPUk1BVF9SRzg4LCAgICAgVktfRk9STUFUX1I4RzhfVU5PUk0gICAgIH0sCisg ICAgeyBEUk1fRk9STUFUX0dSMTYxNiwgICBWS19GT1JNQVRfUjE2RzE2X1VOT1JNICAgfSwKKyAg ICB7IERSTV9GT1JNQVRfUkcxNjE2LCAgIFZLX0ZPUk1BVF9SMTZHMTZfVU5PUk0gICB9LAorICAg IHsgRFJNX0ZPUk1BVF9BUkdCODg4OCwgVktfRk9STUFUX0I4RzhSOEE4X1VOT1JNIH0sCisgICAg eyBEUk1fRk9STUFUX1hSR0I4ODg4LCBWS19GT1JNQVRfQjhHOFI4QThfVU5PUk0gfSwKKyAgICB7 IERSTV9GT1JNQVRfQUJHUjg4ODgsIFZLX0ZPUk1BVF9SOEc4QjhBOF9VTk9STSB9LAorICAgIHsg RFJNX0ZPUk1BVF9YQkdSODg4OCwgVktfRk9STUFUX1I4RzhCOEE4X1VOT1JNIH0sCisgICAgeyBE Uk1fRk9STUFUX0FSR0IyMTAxMDEwLCBWS19GT1JNQVRfQTJCMTBHMTBSMTBfVU5PUk1fUEFDSzMy IH0sCisgICAgeyBEUk1fRk9STUFUX0FCR1IyMTAxMDEwLCBWS19GT1JNQVRfQTJSMTBHMTBCMTBf VU5PUk1fUEFDSzMyIH0sCisgICAgeyBEUk1fRk9STUFUX1hSR0IyMTAxMDEwLCBWS19GT1JNQVRf QTJCMTBHMTBSMTBfVU5PUk1fUEFDSzMyIH0sCisgICAgeyBEUk1fRk9STUFUX1hCR1IyMTAxMDEw LCBWS19GT1JNQVRfQTJSMTBHMTBCMTBfVU5PUk1fUEFDSzMyIH0sCisKKyAgICAvLyBBbGwgdGhl c2UgRFJNX0ZPUk1BVHMgd2VyZSBhZGRlZCBpbiB0aGUgc2FtZSBsaWJkcm0gY29tbWl0LgorI2lm ZGVmIERSTV9GT1JNQVRfWFlVVjg4ODgKKyAgICB7IERSTV9GT1JNQVRfWFlVVjg4ODgsIFZLX0ZP Uk1BVF9SOEc4QjhBOF9VTk9STSAgICAgfSwKKyAgICB7IERSTV9GT1JNQVRfWFZZVTIxMDEwMTAs IFZLX0ZPUk1BVF9BMlIxMEcxMEIxMF9VTk9STV9QQUNLMzIgfSAsCisgICAgeyBEUk1fRk9STUFU X1hWWVUxMl8xNjE2MTYxNiwgVktfRk9STUFUX1IxMlg0RzEyWDRCMTJYNEExMlg0X1VOT1JNXzRQ QUNLMTYgfSAsCisgICAgeyBEUk1fRk9STUFUX1hWWVUxNjE2MTYxNiwgVktfRk9STUFUX1IxNkcx NkIxNkExNl9VTk9STSB9ICwKKyNlbmRpZgorfTsKKworc3RhdGljIGlubGluZSBWa0Zvcm1hdCBk cm1fdG9fdnVsa2FuX2ZtdCh1aW50MzJfdCBkcm1fZm91cmNjKQoreworICAgIGZvciAoaW50IGkg PSAwOyBpIDwgRkZfQVJSQVlfRUxFTVModnVsa2FuX2RybV9mb3JtYXRfbWFwKTsgaSsrKQorICAg ICAgICBpZiAodnVsa2FuX2RybV9mb3JtYXRfbWFwW2ldLmRybV9mb3VyY2MgPT0gZHJtX2ZvdXJj YykKKyAgICAgICAgICAgIHJldHVybiB2dWxrYW5fZHJtX2Zvcm1hdF9tYXBbaV0udmtfZm9ybWF0 OworICAgIHJldHVybiBWS19GT1JNQVRfVU5ERUZJTkVEOworfQorCitzdGF0aWMgaW50IHZ1bGth bl9tYXBfZnJvbV9kcm1fZnJhbWVfZGVzYyhBVkhXRnJhbWVzQ29udGV4dCAqaHdmYywgQVZWa0Zy YW1lICoqZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj b25zdCBBVkZyYW1lICpzcmMsIGludCBmbGFncykKK3sKKyAgICBpbnQgZXJyID0gMDsKKyAgICBW a1Jlc3VsdCByZXQ7CisgICAgQVZWa0ZyYW1lICpmOworICAgIGludCBiaW5kX2NvdW50cyA9IDA7 CisgICAgQVZIV0RldmljZUNvbnRleHQgKmN0eCA9IGh3ZmMtPmRldmljZV9jdHg7CisgICAgVnVs a2FuRGV2aWNlUHJpdiAqcCA9IGN0eC0+aHdjdHg7CisgICAgQVZWdWxrYW5EZXZpY2VDb250ZXh0 ICpod2N0eCA9ICZwLT5wOworICAgIEZGVnVsa2FuRnVuY3Rpb25zICp2ayA9ICZwLT52a2N0eC52 a2ZuOworICAgIGNvbnN0IEFWRFJNRnJhbWVEZXNjcmlwdG9yICpkZXNjID0gKEFWRFJNRnJhbWVE ZXNjcmlwdG9yICopc3JjLT5kYXRhWzBdOworICAgIFZrQmluZEltYWdlTWVtb3J5SW5mbyBiaW5k X2luZm9bQVZfRFJNX01BWF9QTEFORVNdOworICAgIFZrQmluZEltYWdlUGxhbmVNZW1vcnlJbmZv IHBsYW5lX2luZm9bQVZfRFJNX01BWF9QTEFORVNdOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkg PCBkZXNjLT5uYl9sYXllcnM7IGkrKykgeworICAgICAgICBpZiAoZHJtX3RvX3Z1bGthbl9mbXQo ZGVzYy0+bGF5ZXJzW2ldLmZvcm1hdCkgPT0gVktfRk9STUFUX1VOREVGSU5FRCkgeworICAgICAg ICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiVW5zdXBwb3J0ZWQgRE1BQlVGIGxheWVy IGZvcm1hdCAlIzA4eCFcbiIsCisgICAgICAgICAgICAgICAgICAgZGVzYy0+bGF5ZXJzW2ldLmZv cm1hdCk7CisgICAgICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOworICAgICAgICB9Cisg ICAgfQorCisgICAgaWYgKCEoZiA9IGF2X3ZrX2ZyYW1lX2FsbG9jKCkpKSB7CisgICAgICAgIGF2 X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIlVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIEFW VmtGcmFtZSFcbiIpOworICAgICAgICBlcnIgPSBBVkVSUk9SKEVOT01FTSk7CisgICAgICAgIGdv dG8gZmFpbDsKKyAgICB9CisKKyAgICBmLT50aWxpbmcgPSBWS19JTUFHRV9USUxJTkdfRFJNX0ZP Uk1BVF9NT0RJRklFUl9FWFQ7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGRlc2MtPm5iX2xh eWVyczsgaSsrKSB7CisgICAgICAgIGNvbnN0IGludCBwbGFuZXMgPSBkZXNjLT5sYXllcnNbaV0u bmJfcGxhbmVzOworCisgICAgICAgIC8qIFNlbWFwaG9yZSAqLworICAgICAgICBWa1NlbWFwaG9y ZVR5cGVDcmVhdGVJbmZvIHNlbV90eXBlX2luZm8gPSB7CisgICAgICAgICAgICAuc1R5cGUgICAg ICAgICA9IFZLX1NUUlVDVFVSRV9UWVBFX1NFTUFQSE9SRV9UWVBFX0NSRUFURV9JTkZPLAorICAg ICAgICAgICAgLnNlbWFwaG9yZVR5cGUgPSBWS19TRU1BUEhPUkVfVFlQRV9USU1FTElORSwKKyAg ICAgICAgICAgIC5pbml0aWFsVmFsdWUgID0gMCwKKyAgICAgICAgfTsKKyAgICAgICAgVmtTZW1h cGhvcmVDcmVhdGVJbmZvIHNlbV9zcGF3biA9IHsKKyAgICAgICAgICAgIC5zVHlwZSA9IFZLX1NU UlVDVFVSRV9UWVBFX1NFTUFQSE9SRV9DUkVBVEVfSU5GTywKKyAgICAgICAgICAgIC5wTmV4dCA9 ICZzZW1fdHlwZV9pbmZvLAorICAgICAgICB9OworCisgICAgICAgIC8qIEltYWdlIGNyZWF0aW9u ICovCisgICAgICAgIFZrU3VicmVzb3VyY2VMYXlvdXQgZXh0X2ltZ19sYXlvdXRzW0FWX0RSTV9N QVhfUExBTkVTXTsKKyAgICAgICAgVmtJbWFnZURybUZvcm1hdE1vZGlmaWVyRXhwbGljaXRDcmVh dGVJbmZvRVhUIGV4dF9pbWdfbW9kX3NwZWMgPSB7CisgICAgICAgICAgICAuc1R5cGUgPSBWS19T VFJVQ1RVUkVfVFlQRV9JTUFHRV9EUk1fRk9STUFUX01PRElGSUVSX0VYUExJQ0lUX0NSRUFURV9J TkZPX0VYVCwKKyAgICAgICAgICAgIC5kcm1Gb3JtYXRNb2RpZmllciA9IGRlc2MtPm9iamVjdHNb MF0uZm9ybWF0X21vZGlmaWVyLAorICAgICAgICAgICAgLmRybUZvcm1hdE1vZGlmaWVyUGxhbmVD b3VudCA9IHBsYW5lcywKKyAgICAgICAgICAgIC5wUGxhbmVMYXlvdXRzID0gKGNvbnN0IFZrU3Vi cmVzb3VyY2VMYXlvdXQgKikmZXh0X2ltZ19sYXlvdXRzLAorICAgICAgICB9OworICAgICAgICBW a0V4dGVybmFsTWVtb3J5SW1hZ2VDcmVhdGVJbmZvIGV4dF9pbWdfc3BlYyA9IHsKKyAgICAgICAg ICAgIC5zVHlwZSAgICAgICA9IFZLX1NUUlVDVFVSRV9UWVBFX0VYVEVSTkFMX01FTU9SWV9JTUFH RV9DUkVBVEVfSU5GTywKKyAgICAgICAgICAgIC5wTmV4dCAgICAgICA9ICZleHRfaW1nX21vZF9z cGVjLAorICAgICAgICAgICAgLmhhbmRsZVR5cGVzID0gVktfRVhURVJOQUxfTUVNT1JZX0hBTkRM RV9UWVBFX0RNQV9CVUZfQklUX0VYVCwKKyAgICAgICAgfTsKKyAgICAgICAgVmtJbWFnZUNyZWF0 ZUluZm8gY3JlYXRlX2luZm8gPSB7CisgICAgICAgICAgICAuc1R5cGUgICAgICAgICAgICAgICAg ID0gVktfU1RSVUNUVVJFX1RZUEVfSU1BR0VfQ1JFQVRFX0lORk8sCisgICAgICAgICAgICAucE5l eHQgICAgICAgICAgICAgICAgID0gJmV4dF9pbWdfc3BlYywKKyAgICAgICAgICAgIC5pbWFnZVR5 cGUgICAgICAgICAgICAgPSBWS19JTUFHRV9UWVBFXzJELAorICAgICAgICAgICAgLmZvcm1hdCAg ICAgICAgICAgICAgICA9IGRybV90b192dWxrYW5fZm10KGRlc2MtPmxheWVyc1tpXS5mb3JtYXQp LAorICAgICAgICAgICAgLmV4dGVudC5kZXB0aCAgICAgICAgICA9IDEsCisgICAgICAgICAgICAu bWlwTGV2ZWxzICAgICAgICAgICAgID0gMSwKKyAgICAgICAgICAgIC5hcnJheUxheWVycyAgICAg ICAgICAgPSAxLAorICAgICAgICAgICAgLmZsYWdzICAgICAgICAgICAgICAgICA9IDB4MCwKKyAg ICAgICAgICAgIC50aWxpbmcgICAgICAgICAgICAgICAgPSBWS19JTUFHRV9USUxJTkdfRFJNX0ZP Uk1BVF9NT0RJRklFUl9FWFQsCisgICAgICAgICAgICAuaW5pdGlhbExheW91dCAgICAgICAgID0g VktfSU1BR0VfTEFZT1VUX1VOREVGSU5FRCwgLyogc3BlY3Mgc2F5IHNvICovCisgICAgICAgICAg ICAudXNhZ2UgICAgICAgICAgICAgICAgID0gMHgwLCAvKiBmaWxsZWQgaW4gYmVsb3cgKi8KKyAg ICAgICAgICAgIC5zYW1wbGVzICAgICAgICAgICAgICAgPSBWS19TQU1QTEVfQ09VTlRfMV9CSVQs CisgICAgICAgICAgICAucFF1ZXVlRmFtaWx5SW5kaWNlcyAgID0gcC0+aW1nX3FmcywKKyAgICAg ICAgICAgIC5xdWV1ZUZhbWlseUluZGV4Q291bnQgPSBwLT5uYl9pbWdfcWZzLAorICAgICAgICAg ICAgLnNoYXJpbmdNb2RlICAgICAgICAgICA9IHAtPm5iX2ltZ19xZnMgPiAxID8gVktfU0hBUklO R19NT0RFX0NPTkNVUlJFTlQgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgVktfU0hBUklOR19NT0RFX0VYQ0xVU0lWRSwKKyAgICAgICAg fTsKKworICAgICAgICAvKiBJbWFnZSBmb3JtYXQgdmVyaWZpY2F0aW9uICovCisgICAgICAgIFZr RXh0ZXJuYWxJbWFnZUZvcm1hdFByb3BlcnRpZXMgZXh0X3Byb3BzID0geworICAgICAgICAgICAg LnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfRVhURVJOQUxfSU1BR0VfRk9STUFUX1BST1BFUlRJ RVNfS0hSLAorICAgICAgICB9OworICAgICAgICBWa0ltYWdlRm9ybWF0UHJvcGVydGllczIgcHJv cHNfcmV0ID0geworICAgICAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfSU1BR0Vf Rk9STUFUX1BST1BFUlRJRVNfMiwKKyAgICAgICAgICAgIC5wTmV4dCA9ICZleHRfcHJvcHMsCisg ICAgICAgIH07CisgICAgICAgIFZrUGh5c2ljYWxEZXZpY2VJbWFnZURybUZvcm1hdE1vZGlmaWVy SW5mb0VYVCBwcm9wc19kcm1fbW9kID0geworICAgICAgICAgICAgLnNUeXBlID0gVktfU1RSVUNU VVJFX1RZUEVfUEhZU0lDQUxfREVWSUNFX0lNQUdFX0RSTV9GT1JNQVRfTU9ESUZJRVJfSU5GT19F WFQsCisgICAgICAgICAgICAuZHJtRm9ybWF0TW9kaWZpZXIgPSBleHRfaW1nX21vZF9zcGVjLmRy bUZvcm1hdE1vZGlmaWVyLAorICAgICAgICAgICAgLnBRdWV1ZUZhbWlseUluZGljZXMgPSBjcmVh dGVfaW5mby5wUXVldWVGYW1pbHlJbmRpY2VzLAorICAgICAgICAgICAgLnF1ZXVlRmFtaWx5SW5k ZXhDb3VudCA9IGNyZWF0ZV9pbmZvLnF1ZXVlRmFtaWx5SW5kZXhDb3VudCwKKyAgICAgICAgICAg IC5zaGFyaW5nTW9kZSA9IGNyZWF0ZV9pbmZvLnNoYXJpbmdNb2RlLAorICAgICAgICB9OworICAg ICAgICBWa1BoeXNpY2FsRGV2aWNlRXh0ZXJuYWxJbWFnZUZvcm1hdEluZm8gcHJvcHNfZXh0ID0g eworICAgICAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfUEhZU0lDQUxfREVWSUNF X0VYVEVSTkFMX0lNQUdFX0ZPUk1BVF9JTkZPLAorICAgICAgICAgICAgLnBOZXh0ID0gJnByb3Bz X2RybV9tb2QsCisgICAgICAgICAgICAuaGFuZGxlVHlwZSA9IGV4dF9pbWdfc3BlYy5oYW5kbGVU eXBlcywKKyAgICAgICAgfTsKKyAgICAgICAgVmtQaHlzaWNhbERldmljZUltYWdlRm9ybWF0SW5m bzIgZm10X3Byb3BzOworCisgICAgICAgIGlmIChmbGFncyAmIEFWX0hXRlJBTUVfTUFQX1JFQUQp CisgICAgICAgICAgICBjcmVhdGVfaW5mby51c2FnZSB8PSBWS19JTUFHRV9VU0FHRV9TQU1QTEVE X0JJVCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19JTUFHRV9VU0FHRV9U UkFOU0ZFUl9TUkNfQklUOworICAgICAgICBpZiAoZmxhZ3MgJiBBVl9IV0ZSQU1FX01BUF9XUklU RSkKKyAgICAgICAgICAgIGNyZWF0ZV9pbmZvLnVzYWdlIHw9IFZLX0lNQUdFX1VTQUdFX1NUT1JB R0VfQklUIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZLX0lNQUdFX1VTQUdF X1RSQU5TRkVSX0RTVF9CSVQ7CisKKyAgICAgICAgZm10X3Byb3BzID0gKFZrUGh5c2ljYWxEZXZp Y2VJbWFnZUZvcm1hdEluZm8yKSB7CisgICAgICAgICAgICAuc1R5cGUgID0gVktfU1RSVUNUVVJF X1RZUEVfUEhZU0lDQUxfREVWSUNFX0lNQUdFX0ZPUk1BVF9JTkZPXzIsCisgICAgICAgICAgICAu cE5leHQgID0gJnByb3BzX2V4dCwKKyAgICAgICAgICAgIC5mb3JtYXQgPSBjcmVhdGVfaW5mby5m b3JtYXQsCisgICAgICAgICAgICAudHlwZSAgID0gY3JlYXRlX2luZm8uaW1hZ2VUeXBlLAorICAg ICAgICAgICAgLnRpbGluZyA9IGNyZWF0ZV9pbmZvLnRpbGluZywKKyAgICAgICAgICAgIC51c2Fn ZSAgPSBjcmVhdGVfaW5mby51c2FnZSwKKyAgICAgICAgICAgIC5mbGFncyAgPSBjcmVhdGVfaW5m by5mbGFncywKKyAgICAgICAgfTsKKworICAgICAgICAvKiBDaGVjayBpZiBpbXBvcnRpbmcgaXMg cG9zc2libGUgZm9yIHRoaXMgY29tYmluYXRpb24gb2YgcGFyYW1ldGVycyAqLworICAgICAgICBy ZXQgPSB2ay0+R2V0UGh5c2ljYWxEZXZpY2VJbWFnZUZvcm1hdFByb3BlcnRpZXMyKGh3Y3R4LT5w aHlzX2RldiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAmZm10X3Byb3BzLCAmcHJvcHNfcmV0KTsKKyAgICAgICAgaWYgKHJldCAhPSBW S19TVUNDRVNTKSB7CisgICAgICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJDYW5u b3QgbWFwIERSTSBmcmFtZSB0byBWdWxrYW46ICVzXG4iLAorICAgICAgICAgICAgICAgICAgIGZm X3ZrX3JldDJzdHIocmV0KSk7CisgICAgICAgICAgICBlcnIgPSBBVkVSUk9SX0VYVEVSTkFMOwor ICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICB9CisKKyAgICAgICAgLyogU2V0IHRoZSBp bWFnZSB3aWR0aC9oZWlnaHQgKi8KKyAgICAgICAgZ2V0X3BsYW5lX3doKCZjcmVhdGVfaW5mby5l eHRlbnQud2lkdGgsICZjcmVhdGVfaW5mby5leHRlbnQuaGVpZ2h0LAorICAgICAgICAgICAgICAg ICAgICAgaHdmYy0+c3dfZm9ybWF0LCBzcmMtPndpZHRoLCBzcmMtPmhlaWdodCwgaSk7CisKKyAg ICAgICAgLyogU2V0IHRoZSBzdWJyZXNvdXJjZSBsYXlvdXQgYmFzZWQgb24gdGhlIGxheWVyIHBy b3BlcnRpZXMgKi8KKyAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBwbGFuZXM7IGorKykgewor ICAgICAgICAgICAgZXh0X2ltZ19sYXlvdXRzW2pdLm9mZnNldCAgICAgPSBkZXNjLT5sYXllcnNb aV0ucGxhbmVzW2pdLm9mZnNldDsKKyAgICAgICAgICAgIGV4dF9pbWdfbGF5b3V0c1tqXS5yb3dQ aXRjaCAgID0gZGVzYy0+bGF5ZXJzW2ldLnBsYW5lc1tqXS5waXRjaDsKKyAgICAgICAgICAgIGV4 dF9pbWdfbGF5b3V0c1tqXS5zaXplICAgICAgID0gMDsgLyogVGhlIHNwZWNzIHNheSBzbyBmb3Ig YWxsIDMgKi8KKyAgICAgICAgICAgIGV4dF9pbWdfbGF5b3V0c1tqXS5hcnJheVBpdGNoID0gMDsK KyAgICAgICAgICAgIGV4dF9pbWdfbGF5b3V0c1tqXS5kZXB0aFBpdGNoID0gMDsKKyAgICAgICAg fQorCisgICAgICAgIC8qIENyZWF0ZSBpbWFnZSAqLworICAgICAgICByZXQgPSB2ay0+Q3JlYXRl SW1hZ2UoaHdjdHgtPmFjdF9kZXYsICZjcmVhdGVfaW5mbywKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGh3Y3R4LT5hbGxvYywgJmYtPmltZ1tpXSk7CisgICAgICAgIGlmIChyZXQgIT0g VktfU1VDQ0VTUykgeworICAgICAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiSW1h Z2UgY3JlYXRpb24gZmFpbHVyZTogJXNcbiIsCisgICAgICAgICAgICAgICAgICAgZmZfdmtfcmV0 MnN0cihyZXQpKTsKKyAgICAgICAgICAgIGVyciA9IEFWRVJST1IoRUlOVkFMKTsKKyAgICAgICAg ICAgIGdvdG8gZmFpbDsKKyAgICAgICAgfQorCisgICAgICAgIHJldCA9IHZrLT5DcmVhdGVTZW1h cGhvcmUoaHdjdHgtPmFjdF9kZXYsICZzZW1fc3Bhd24sCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaHdjdHgtPmFsbG9jLCAmZi0+c2VtW2ldKTsKKyAgICAgICAgaWYgKHJldCAh PSBWS19TVUNDRVNTKSB7CisgICAgICAgICAgICBhdl9sb2coaHdjdHgsIEFWX0xPR19FUlJPUiwg IkZhaWxlZCB0byBjcmVhdGUgc2VtYXBob3JlOiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICBm Zl92a19yZXQyc3RyKHJldCkpOworICAgICAgICAgICAgZXJyID0gQVZFUlJPUl9FWFRFUk5BTDsK KyAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgfQorCisgICAgICAgIGYtPnF1ZXVlX2Zh bWlseVtpXSA9IFZLX1FVRVVFX0ZBTUlMWV9FWFRFUk5BTDsKKyAgICAgICAgZi0+bGF5b3V0W2ld ID0gY3JlYXRlX2luZm8uaW5pdGlhbExheW91dDsKKyAgICAgICAgZi0+YWNjZXNzW2ldID0gMHgw OworICAgICAgICBmLT5zZW1fdmFsdWVbaV0gPSAwOworICAgIH0KKworICAgIGZvciAoaW50IGkg PSAwOyBpIDwgZGVzYy0+bmJfbGF5ZXJzOyBpKyspIHsKKyAgICAgICAgLyogTWVtb3J5IHJlcXVp cmVtZW50cyAqLworICAgICAgICBWa0ltYWdlTWVtb3J5UmVxdWlyZW1lbnRzSW5mbzIgcmVxX2Rl c2MgPSB7CisgICAgICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9JTUFHRV9NRU1P UllfUkVRVUlSRU1FTlRTX0lORk9fMiwKKyAgICAgICAgICAgIC5pbWFnZSA9IGYtPmltZ1tpXSwK KyAgICAgICAgfTsKKyAgICAgICAgVmtNZW1vcnlEZWRpY2F0ZWRSZXF1aXJlbWVudHMgZGVkX3Jl cSA9IHsKKyAgICAgICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX01FTU9SWV9ERURJ Q0FURURfUkVRVUlSRU1FTlRTLAorICAgICAgICB9OworICAgICAgICBWa01lbW9yeVJlcXVpcmVt ZW50czIgcmVxMiA9IHsKKyAgICAgICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX01F TU9SWV9SRVFVSVJFTUVOVFNfMiwKKyAgICAgICAgICAgIC5wTmV4dCA9ICZkZWRfcmVxLAorICAg ICAgICB9OworCisgICAgICAgIC8qIEFsbG9jYXRpb24vaW1wb3J0aW5nICovCisgICAgICAgIFZr TWVtb3J5RmRQcm9wZXJ0aWVzS0hSIGZkbXAgPSB7CisgICAgICAgICAgICAuc1R5cGUgPSBWS19T VFJVQ1RVUkVfVFlQRV9NRU1PUllfRkRfUFJPUEVSVElFU19LSFIsCisgICAgICAgIH07CisgICAg ICAgIC8qIFRoaXMgYXNzdW1lcyB0aGF0IGEgbGF5ZXIgd2lsbCBuZXZlciBiZSBjb25zdHJ1Y3Rl ZCBmcm9tIG11bHRpcGxlCisgICAgICAgICAqIG9iamVjdHMuIElmIHRoYXQgd2FzIHRvIGhhcHBl biBpbiB0aGUgcmVhbCB3b3JsZCwgdGhpcyBjb2RlIHdvdWxkCisgICAgICAgICAqIG5lZWQgdG8g aW1wb3J0IGVhY2ggcGxhbmUgc2VwYXJhdGVseS4KKyAgICAgICAgICovCisgICAgICAgIFZrSW1w b3J0TWVtb3J5RmRJbmZvS0hSIGlkZXNjID0geworICAgICAgICAgICAgLnNUeXBlICAgICAgPSBW S19TVFJVQ1RVUkVfVFlQRV9JTVBPUlRfTUVNT1JZX0ZEX0lORk9fS0hSLAorICAgICAgICAgICAg LmZkICAgICAgICAgPSBkdXAoZGVzYy0+b2JqZWN0c1tkZXNjLT5sYXllcnNbaV0ucGxhbmVzWzBd Lm9iamVjdF9pbmRleF0uZmQpLAorICAgICAgICAgICAgLmhhbmRsZVR5cGUgPSBWS19FWFRFUk5B TF9NRU1PUllfSEFORExFX1RZUEVfRE1BX0JVRl9CSVRfRVhULAorICAgICAgICB9OworICAgICAg ICBWa01lbW9yeURlZGljYXRlZEFsbG9jYXRlSW5mbyBkZWRfYWxsb2MgPSB7CisgICAgICAgICAg ICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9NRU1PUllfREVESUNBVEVEX0FMTE9DQVRFX0lO Rk8sCisgICAgICAgICAgICAucE5leHQgPSAmaWRlc2MsCisgICAgICAgICAgICAuaW1hZ2UgPSBy ZXFfZGVzYy5pbWFnZSwKKyAgICAgICAgfTsKKworICAgICAgICAvKiBHZXQgb2JqZWN0IHByb3Bl cnRpZXMgKi8KKyAgICAgICAgcmV0ID0gdmstPkdldE1lbW9yeUZkUHJvcGVydGllc0tIUihod2N0 eC0+YWN0X2RldiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBW S19FWFRFUk5BTF9NRU1PUllfSEFORExFX1RZUEVfRE1BX0JVRl9CSVRfRVhULAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkZXNjLmZkLCAmZmRtcCk7CisgICAg ICAgIGlmIChyZXQgIT0gVktfU1VDQ0VTUykgeworICAgICAgICAgICAgYXZfbG9nKGh3ZmMsIEFW X0xPR19FUlJPUiwgIkZhaWxlZCB0byBnZXQgRkQgcHJvcGVydGllczogJXNcbiIsCisgICAgICAg ICAgICAgICAgICAgZmZfdmtfcmV0MnN0cihyZXQpKTsKKyAgICAgICAgICAgIGVyciA9IEFWRVJS T1JfRVhURVJOQUw7CisgICAgICAgICAgICBjbG9zZShpZGVzYy5mZCk7CisgICAgICAgICAgICBn b3RvIGZhaWw7CisgICAgICAgIH0KKworICAgICAgICB2ay0+R2V0SW1hZ2VNZW1vcnlSZXF1aXJl bWVudHMyKGh3Y3R4LT5hY3RfZGV2LCAmcmVxX2Rlc2MsICZyZXEyKTsKKworICAgICAgICAvKiBP bmx5IGEgc2luZ2xlIGJpdCBtdXN0IGJlIHNldCwgbm90IGEgcmFuZ2UsIGFuZCBpdCBtdXN0IG1h dGNoICovCisgICAgICAgIHJlcTIubWVtb3J5UmVxdWlyZW1lbnRzLm1lbW9yeVR5cGVCaXRzID0g ZmRtcC5tZW1vcnlUeXBlQml0czsKKworICAgICAgICBlcnIgPSBhbGxvY19tZW0oY3R4LCAmcmVx Mi5tZW1vcnlSZXF1aXJlbWVudHMsCisgICAgICAgICAgICAgICAgICAgICAgICBWS19NRU1PUllf UFJPUEVSVFlfREVWSUNFX0xPQ0FMX0JJVCwKKyAgICAgICAgICAgICAgICAgICAgICAgIChkZWRf cmVxLnByZWZlcnNEZWRpY2F0ZWRBbGxvY2F0aW9uIHx8CisgICAgICAgICAgICAgICAgICAgICAg ICAgZGVkX3JlcS5yZXF1aXJlc0RlZGljYXRlZEFsbG9jYXRpb24pID8KKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAmZGVkX2FsbG9jIDogZGVkX2FsbG9jLnBOZXh0LAorICAgICAgICAgICAg ICAgICAgICAgICAgJmYtPmZsYWdzLCAmZi0+bWVtW2ldKTsKKyAgICAgICAgaWYgKGVycikgewor ICAgICAgICAgICAgY2xvc2UoaWRlc2MuZmQpOworICAgICAgICAgICAgcmV0dXJuIGVycjsKKyAg ICAgICAgfQorCisgICAgICAgIGYtPnNpemVbaV0gPSByZXEyLm1lbW9yeVJlcXVpcmVtZW50cy5z aXplOworICAgIH0KKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZGVzYy0+bmJfbGF5ZXJzOyBp KyspIHsKKyAgICAgICAgY29uc3QgaW50IHBsYW5lcyA9IGRlc2MtPmxheWVyc1tpXS5uYl9wbGFu ZXM7CisgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgcGxhbmVzOyBqKyspIHsKKyAgICAgICAg ICAgIFZrSW1hZ2VBc3BlY3RGbGFnQml0cyBhc3BlY3QgPSBqID09IDAgPyBWS19JTUFHRV9BU1BF Q1RfTUVNT1JZX1BMQU5FXzBfQklUX0VYVCA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaiA9PSAxID8gVktfSU1BR0VfQVNQRUNUX01FTU9SWV9QTEFORV8xX0JJ VF9FWFQgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFZLX0lNQUdFX0FTUEVDVF9NRU1PUllfUExBTkVfMl9CSVRfRVhUOworCisgICAgICAgICAg ICBwbGFuZV9pbmZvW2JpbmRfY291bnRzXS5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX0JJTkRf SU1BR0VfUExBTkVfTUVNT1JZX0lORk87CisgICAgICAgICAgICBwbGFuZV9pbmZvW2JpbmRfY291 bnRzXS5wTmV4dCA9IE5VTEw7CisgICAgICAgICAgICBwbGFuZV9pbmZvW2JpbmRfY291bnRzXS5w bGFuZUFzcGVjdCA9IGFzcGVjdDsKKworICAgICAgICAgICAgYmluZF9pbmZvW2JpbmRfY291bnRz XS5zVHlwZSAgPSBWS19TVFJVQ1RVUkVfVFlQRV9CSU5EX0lNQUdFX01FTU9SWV9JTkZPOworICAg ICAgICAgICAgYmluZF9pbmZvW2JpbmRfY291bnRzXS5wTmV4dCAgPSBwbGFuZXMgPiAxID8gJnBs YW5lX2luZm9bYmluZF9jb3VudHNdIDogTlVMTDsKKyAgICAgICAgICAgIGJpbmRfaW5mb1tiaW5k X2NvdW50c10uaW1hZ2UgID0gZi0+aW1nW2ldOworICAgICAgICAgICAgYmluZF9pbmZvW2JpbmRf Y291bnRzXS5tZW1vcnkgPSBmLT5tZW1baV07CisKKyAgICAgICAgICAgIC8qIE9mZnNldCBpcyBh bHJlYWR5IHNpZ25hbGxlZCB2aWEgcFBsYW5lTGF5b3V0cyBhYm92ZSAqLworICAgICAgICAgICAg YmluZF9pbmZvW2JpbmRfY291bnRzXS5tZW1vcnlPZmZzZXQgPSAwOworCisgICAgICAgICAgICBi aW5kX2NvdW50cysrOworICAgICAgICB9CisgICAgfQorCisgICAgLyogQmluZCB0aGUgYWxsb2Nh dGVkIG1lbW9yeSB0byB0aGUgaW1hZ2VzICovCisgICAgcmV0ID0gdmstPkJpbmRJbWFnZU1lbW9y eTIoaHdjdHgtPmFjdF9kZXYsIGJpbmRfY291bnRzLCBiaW5kX2luZm8pOworICAgIGlmIChyZXQg IT0gVktfU1VDQ0VTUykgeworICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1IsICJGYWls ZWQgdG8gYmluZCBtZW1vcnk6ICVzXG4iLAorICAgICAgICAgICAgICAgZmZfdmtfcmV0MnN0cihy ZXQpKTsKKyAgICAgICAgZXJyID0gQVZFUlJPUl9FWFRFUk5BTDsKKyAgICAgICAgZ290byBmYWls OworICAgIH0KKworICAgICpmcmFtZSA9IGY7CisKKyAgICByZXR1cm4gMDsKKworZmFpbDoKKyAg ICB2dWxrYW5fZnJhbWVfZnJlZShod2ZjLCBmKTsKKworICAgIHJldHVybiBlcnI7Cit9CisKK3N0 YXRpYyBpbnQgdnVsa2FuX21hcF9mcm9tX2RybV9mcmFtZV9zeW5jKEFWSFdGcmFtZXNDb250ZXh0 ICpod2ZjLCBBVkZyYW1lICpkc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBBVkZyYW1lICpzcmMsIGludCBmbGFncykKK3sKKyAgICBpbnQgZXJyOwor ICAgIFZrUmVzdWx0IHJldDsKKyAgICBBVkhXRGV2aWNlQ29udGV4dCAqY3R4ID0gaHdmYy0+ZGV2 aWNlX2N0eDsKKyAgICBWdWxrYW5EZXZpY2VQcml2ICpwID0gY3R4LT5od2N0eDsKKyAgICBWdWxr YW5GcmFtZXNQcml2ICpmcCA9IGh3ZmMtPmh3Y3R4OworICAgIEFWVnVsa2FuRGV2aWNlQ29udGV4 dCAqaHdjdHggPSAmcC0+cDsKKyAgICBGRlZ1bGthbkZ1bmN0aW9ucyAqdmsgPSAmcC0+dmtjdHgu dmtmbjsKKworICAgIGNvbnN0IEFWRFJNRnJhbWVEZXNjcmlwdG9yICpkZXNjID0gKEFWRFJNRnJh bWVEZXNjcmlwdG9yICopc3JjLT5kYXRhWzBdOworCisjaWZkZWYgRE1BX0JVRl9JT0NUTF9FWFBP UlRfU1lOQ19GSUxFCisgICAgaWYgKHAtPnZrY3R4LmV4dGVuc2lvbnMgJiBGRl9WS19FWFRfRVhU RVJOQUxfRkRfU0VNKSB7CisgICAgICAgIFZrQ29tbWFuZEJ1ZmZlciBjbWRfYnVmOworICAgICAg ICBGRlZrRXhlY0NvbnRleHQgKmV4ZWM7CisgICAgICAgIFZrSW1hZ2VNZW1vcnlCYXJyaWVyMiBp bWdfYmFyW0FWX05VTV9EQVRBX1BPSU5URVJTXTsKKyAgICAgICAgVmtTZW1hcGhvcmUgZHJtX3N5 bmNfc2VtW0FWX0RSTV9NQVhfUExBTkVTXSA9IHsgMCB9OworICAgICAgICBpbnQgbmJfaW1nX2Jh ciA9IDA7CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZXNjLT5uYl9vYmplY3RzOyBp KyspIHsKKyAgICAgICAgICAgIFZrU2VtYXBob3JlVHlwZUNyZWF0ZUluZm8gc2VtX3R5cGVfaW5m byA9IHsKKyAgICAgICAgICAgICAgICAuc1R5cGUgICAgICAgICA9IFZLX1NUUlVDVFVSRV9UWVBF X1NFTUFQSE9SRV9UWVBFX0NSRUFURV9JTkZPLAorICAgICAgICAgICAgICAgIC5zZW1hcGhvcmVU eXBlID0gVktfU0VNQVBIT1JFX1RZUEVfQklOQVJZLAorICAgICAgICAgICAgfTsKKyAgICAgICAg ICAgIFZrU2VtYXBob3JlQ3JlYXRlSW5mbyBzZW1fc3Bhd24gPSB7CisgICAgICAgICAgICAgICAg LnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfU0VNQVBIT1JFX0NSRUFURV9JTkZPLAorICAgICAg ICAgICAgICAgIC5wTmV4dCA9ICZzZW1fdHlwZV9pbmZvLAorICAgICAgICAgICAgfTsKKyAgICAg ICAgICAgIFZrSW1wb3J0U2VtYXBob3JlRmRJbmZvS0hSIGltcG9ydF9pbmZvOworICAgICAgICAg ICAgc3RydWN0IGRtYV9idWZfZXhwb3J0X3N5bmNfZmlsZSBpbXBsaWNpdF9mZF9pbmZvID0gewor ICAgICAgICAgICAgICAgIC5mbGFncyA9IERNQV9CVUZfU1lOQ19SRUFELAorICAgICAgICAgICAg ICAgIC5mZCA9IC0xLAorICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgaWYgKGlvY3RsKGRl c2MtPm9iamVjdHNbaV0uZmQsIERNQV9CVUZfSU9DVExfRVhQT1JUX1NZTkNfRklMRSwKKyAgICAg ICAgICAgICAgICAgICAgICAmaW1wbGljaXRfZmRfaW5mbykpIHsKKyAgICAgICAgICAgICAgICBl cnIgPSBBVkVSUk9SKGVycm5vKTsKKyAgICAgICAgICAgICAgICBhdl9sb2coaHdjdHgsIEFWX0xP R19FUlJPUiwgIkZhaWxlZCB0byByZXRyaWV2ZSBpbXBsaWNpdCBEUk0gc3luYyBmaWxlOiAlc1xu IiwKKyAgICAgICAgICAgICAgICAgICAgICAgYXZfZXJyMnN0cihlcnIpKTsKKyAgICAgICAgICAg ICAgICBmb3IgKDsgaSA+PSAwOyBpLS0pCisgICAgICAgICAgICAgICAgICAgIHZrLT5EZXN0cm95 U2VtYXBob3JlKGh3Y3R4LT5hY3RfZGV2LCBkcm1fc3luY19zZW1baV0sIGh3Y3R4LT5hbGxvYyk7 CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg ICAgcmV0ID0gdmstPkNyZWF0ZVNlbWFwaG9yZShod2N0eC0+YWN0X2RldiwgJnNlbV9zcGF3biwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHdjdHgtPmFsbG9jLCAmZHJt X3N5bmNfc2VtW2ldKTsKKyAgICAgICAgICAgIGlmIChyZXQgIT0gVktfU1VDQ0VTUykgeworICAg ICAgICAgICAgICAgIGF2X2xvZyhod2N0eCwgQVZfTE9HX0VSUk9SLCAiRmFpbGVkIHRvIGNyZWF0 ZSBzZW1hcGhvcmU6ICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICBmZl92a19yZXQyc3Ry KHJldCkpOworICAgICAgICAgICAgICAgIGVyciA9IEFWRVJST1JfRVhURVJOQUw7CisgICAgICAg ICAgICAgICAgZm9yICg7IGkgPj0gMDsgaS0tKQorICAgICAgICAgICAgICAgICAgICB2ay0+RGVz dHJveVNlbWFwaG9yZShod2N0eC0+YWN0X2RldiwgZHJtX3N5bmNfc2VtW2ldLCBod2N0eC0+YWxs b2MpOworICAgICAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAgICAgICB9CisKKyAgICAg ICAgICAgIGltcG9ydF9pbmZvID0gKFZrSW1wb3J0U2VtYXBob3JlRmRJbmZvS0hSKSB7CisgICAg ICAgICAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfSU1QT1JUX1NFTUFQSE9SRV9G RF9JTkZPX0tIUiwKKyAgICAgICAgICAgICAgICAuaGFuZGxlVHlwZSA9IFZLX0VYVEVSTkFMX1NF TUFQSE9SRV9IQU5ETEVfVFlQRV9TWU5DX0ZEX0JJVCwKKyAgICAgICAgICAgICAgICAuZmxhZ3Mg PSBWS19TRU1BUEhPUkVfSU1QT1JUX1RFTVBPUkFSWV9CSVQsCisgICAgICAgICAgICAgICAgLnNl bWFwaG9yZSA9IGRybV9zeW5jX3NlbVtpXSwKKyAgICAgICAgICAgICAgICAuZmQgPSBpbXBsaWNp dF9mZF9pbmZvLmZkLAorICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgcmV0ID0gdmstPklt cG9ydFNlbWFwaG9yZUZkS0hSKGh3Y3R4LT5hY3RfZGV2LCAmaW1wb3J0X2luZm8pOworICAgICAg ICAgICAgaWYgKHJldCAhPSBWS19TVUNDRVNTKSB7CisgICAgICAgICAgICAgICAgYXZfbG9nKGh3 Y3R4LCBBVl9MT0dfRVJST1IsICJGYWlsZWQgdG8gaW1wb3J0IHNlbWFwaG9yZTogJXNcbiIsCisg ICAgICAgICAgICAgICAgICAgICAgIGZmX3ZrX3JldDJzdHIocmV0KSk7CisgICAgICAgICAgICAg ICAgZXJyID0gQVZFUlJPUl9FWFRFUk5BTDsKKyAgICAgICAgICAgICAgICBmb3IgKDsgaSA+PSAw OyBpLS0pCisgICAgICAgICAgICAgICAgICAgIHZrLT5EZXN0cm95U2VtYXBob3JlKGh3Y3R4LT5h Y3RfZGV2LCBkcm1fc3luY19zZW1baV0sIGh3Y3R4LT5hbGxvYyk7CisgICAgICAgICAgICAgICAg cmV0dXJuIGVycjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGV4ZWMgPSBm Zl92a19leGVjX2dldCgmcC0+dmtjdHgsICZmcC0+Y29tcHV0ZV9leGVjKTsKKyAgICAgICAgY21k X2J1ZiA9IGV4ZWMtPmJ1ZjsKKworICAgICAgICBmZl92a19leGVjX3N0YXJ0KCZwLT52a2N0eCwg ZXhlYyk7CisKKyAgICAgICAgLyogT3duZXJzaGlwIG9mIHNlbWFwaG9yZXMgaXMgcGFzc2VkICov CisgICAgICAgIGVyciA9IGZmX3ZrX2V4ZWNfYWRkX2RlcF9ib29sX3NlbSgmcC0+dmtjdHgsIGV4 ZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcm1fc3luY19z ZW0sIGRlc2MtPm5iX29iamVjdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBWS19QSVBFTElORV9TVEFHRV8yX0FMTF9DT01NQU5EU19CSVQsIDEpOworICAgICAg ICBpZiAoZXJyIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBlcnI7CisKKyAgICAgICAgZXJyID0g ZmZfdmtfZXhlY19hZGRfZGVwX2ZyYW1lKCZwLT52a2N0eCwgZXhlYywgZHN0LAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfUElQRUxJTkVfU1RBR0VfMl9OT05FLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfUElQRUxJTkVfU1RBR0Vf Ml9BTExfQ09NTUFORFNfQklUKTsKKyAgICAgICAgaWYgKGVyciA8IDApCisgICAgICAgICAgICBy ZXR1cm4gZXJyOworCisgICAgICAgIGZmX3ZrX2ZyYW1lX2JhcnJpZXIoJnAtPnZrY3R4LCBleGVj LCBkc3QsIGltZ19iYXIsICZuYl9pbWdfYmFyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg IFZLX1BJUEVMSU5FX1NUQUdFXzJfTk9ORSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBW S19QSVBFTElORV9TVEFHRV8yX0FMTF9DT01NQU5EU19CSVQsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKChmbGFncyAmIEFWX0hXRlJBTUVfTUFQX1JFQUQpID8KKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgVktfQUNDRVNTXzJfU0hBREVSX1NBTVBMRURfUkVBRF9CSVQgOiAweDAp IHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGZsYWdzICYgQVZfSFdGUkFNRV9NQVBf V1JJVEUpID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfQUNDRVNTXzJfU0hBREVS X1NUT1JBR0VfV1JJVEVfQklUIDogMHgwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBW S19JTUFHRV9MQVlPVVRfR0VORVJBTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLT5u Yl9pbWdfcWZzID4gMSA/IFZLX1FVRVVFX0ZBTUlMWV9JR05PUkVEIDogcC0+aW1nX3Fmc1swXSk7 CisKKyAgICAgICAgdmstPkNtZFBpcGVsaW5lQmFycmllcjIoY21kX2J1ZiwgJihWa0RlcGVuZGVu Y3lJbmZvKSB7CisgICAgICAgICAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfREVQ RU5ERU5DWV9JTkZPLAorICAgICAgICAgICAgICAgIC5wSW1hZ2VNZW1vcnlCYXJyaWVycyA9IGlt Z19iYXIsCisgICAgICAgICAgICAgICAgLmltYWdlTWVtb3J5QmFycmllckNvdW50ID0gbmJfaW1n X2JhciwKKyAgICAgICAgICAgIH0pOworCisgICAgICAgIGVyciA9IGZmX3ZrX2V4ZWNfc3VibWl0 KCZwLT52a2N0eCwgZXhlYyk7CisgICAgICAgIGlmIChlcnIgPCAwKQorICAgICAgICAgICAgcmV0 dXJuIGVycjsKKyAgICB9IGVsc2UKKyNlbmRpZgorICAgIHsKKyAgICAgICAgQVZWa0ZyYW1lICpm ID0gKEFWVmtGcmFtZSAqKWRzdC0+ZGF0YVswXTsKKyAgICAgICAgYXZfbG9nKGh3Y3R4LCBBVl9M T0dfV0FSTklORywgIk5vIHN1cHBvcnQgZm9yIHN5bmNocm9uaXphdGlvbiB3aGVuIGltcG9ydGlu ZyBETUEtQlVGcywgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1h Z2UgbWF5IGJlIGNvcnJ1cHRlZC5cbiIpOworICAgICAgICBlcnIgPSBwcmVwYXJlX2ZyYW1lKGh3 ZmMsICZmcC0+Y29tcHV0ZV9leGVjLCBmLCBQUkVQX01PREVfRVhURVJOQUxfSU1QT1JUKTsKKyAg ICAgICAgaWYgKGVycikKKyAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgfQorCisgICAgcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdnVsa2FuX21hcF9mcm9tX2RybShBVkhXRnJhbWVzQ29u dGV4dCAqaHdmYywgQVZGcmFtZSAqZHN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IEFWRnJhbWUgKnNyYywgaW50IGZsYWdzKQoreworICAgIGludCBlcnIgPSAwOworICAg IEFWVmtGcmFtZSAqZjsKKworICAgIGlmICgoZXJyID0gdnVsa2FuX21hcF9mcm9tX2RybV9mcmFt ZV9kZXNjKGh3ZmMsICZmLCBzcmMsIGZsYWdzKSkpCisgICAgICAgIHJldHVybiBlcnI7CisKKyAg ICAvKiBUaGUgdW5tYXBwaW5nIGZ1bmN0aW9uIHdpbGwgZnJlZSB0aGlzICovCisgICAgZHN0LT5k YXRhWzBdID0gKHVpbnQ4X3QgKilmOworICAgIGRzdC0+d2lkdGggICA9IHNyYy0+d2lkdGg7Cisg ICAgZHN0LT5oZWlnaHQgID0gc3JjLT5oZWlnaHQ7CisKKyAgICBlcnIgPSBmZl9od2ZyYW1lX21h cF9jcmVhdGUoZHN0LT5od19mcmFtZXNfY3R4LCBkc3QsIHNyYywKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJnZ1bGthbl91bm1hcF9mcm9tX2RybSwgZik7CisgICAgaWYgKGVyciA8 IDApCisgICAgICAgIGdvdG8gZmFpbDsKKworICAgIGVyciA9IHZ1bGthbl9tYXBfZnJvbV9kcm1f ZnJhbWVfc3luYyhod2ZjLCBkc3QsIHNyYywgZmxhZ3MpOworICAgIGlmIChlcnIgPCAwKQorICAg ICAgICByZXR1cm4gZXJyOworCisgICAgYXZfbG9nKGh3ZmMsIEFWX0xPR19ERUJVRywgIk1hcHBl ZCBEUk0gb2JqZWN0IHRvIFZ1bGthbiFcbiIpOworCisgICAgcmV0dXJuIDA7CisKK2ZhaWw6Cisg ICAgdnVsa2FuX2ZyYW1lX2ZyZWUoaHdmYy0+ZGV2aWNlX2N0eC0+aHdjdHgsIGYpOworICAgIGRz dC0+ZGF0YVswXSA9IE5VTEw7CisgICAgcmV0dXJuIGVycjsKK30KKworI2lmIENPTkZJR19WQUFQ SQorc3RhdGljIGludCB2dWxrYW5fbWFwX2Zyb21fdmFhcGkoQVZIV0ZyYW1lc0NvbnRleHQgKmRz dF9mYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFWRnJhbWUgKmRzdCwgY29u c3QgQVZGcmFtZSAqc3JjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZs YWdzKQoreworICAgIGludCBlcnI7CisgICAgQVZGcmFtZSAqdG1wID0gYXZfZnJhbWVfYWxsb2Mo KTsKKyAgICBBVkhXRnJhbWVzQ29udGV4dCAqdmFhcGlfZmMgPSAoQVZIV0ZyYW1lc0NvbnRleHQq KXNyYy0+aHdfZnJhbWVzX2N0eC0+ZGF0YTsKKyAgICBBVlZBQVBJRGV2aWNlQ29udGV4dCAqdmFh cGlfY3R4ID0gdmFhcGlfZmMtPmRldmljZV9jdHgtPmh3Y3R4OworICAgIFZBU3VyZmFjZUlEIHN1 cmZhY2VfaWQgPSAoVkFTdXJmYWNlSUQpKHVpbnRwdHJfdClzcmMtPmRhdGFbM107CisKKyAgICBp ZiAoIXRtcCkKKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKKworICAgIC8qIFdlIGhh dmUgdG8gc3luYyBzaW5jZSBsaWtlIHRoZSBwcmV2aW91cyBjb21tZW50IHNhaWQsIG5vIHNlbWFw aG9yZXMgKi8KKyAgICB2YVN5bmNTdXJmYWNlKHZhYXBpX2N0eC0+ZGlzcGxheSwgc3VyZmFjZV9p ZCk7CisKKyAgICB0bXAtPmZvcm1hdCA9IEFWX1BJWF9GTVRfRFJNX1BSSU1FOworCisgICAgZXJy ID0gYXZfaHdmcmFtZV9tYXAodG1wLCBzcmMsIGZsYWdzKTsKKyAgICBpZiAoZXJyIDwgMCkKKyAg ICAgICAgZ290byBmYWlsOworCisgICAgZXJyID0gdnVsa2FuX21hcF9mcm9tX2RybShkc3RfZmMs IGRzdCwgdG1wLCBmbGFncyk7CisgICAgaWYgKGVyciA8IDApCisgICAgICAgIGdvdG8gZmFpbDsK KworICAgIGVyciA9IGZmX2h3ZnJhbWVfbWFwX3JlcGxhY2UoZHN0LCBzcmMpOworCitmYWlsOgor ICAgIGF2X2ZyYW1lX2ZyZWUoJnRtcCk7CisgICAgcmV0dXJuIGVycjsKK30KKyNlbmRpZgorI2Vu ZGlmCisKKyNpZiBDT05GSUdfQ1VEQQorc3RhdGljIGludCBleHBvcnRfbWVtX3RvX2N1ZGEoQVZI V0RldmljZUNvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFWSFdE ZXZpY2VDb250ZXh0ICpjdWRhX2N1LCBDdWRhRnVuY3Rpb25zICpjdSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEFWVmtGcmFtZUludGVybmFsICpkc3RfaW50LCBpbnQgaWR4LAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgVmtEZXZpY2VNZW1vcnkgbWVtLCBzaXplX3Qgc2l6 ZSkKK3sKKyAgICBWa1Jlc3VsdCByZXQ7CisgICAgVnVsa2FuRGV2aWNlUHJpdiAqcCA9IGN0eC0+ aHdjdHg7CisgICAgQVZWdWxrYW5EZXZpY2VDb250ZXh0ICpod2N0eCA9ICZwLT5wOworICAgIEZG VnVsa2FuRnVuY3Rpb25zICp2ayA9ICZwLT52a2N0eC52a2ZuOworCisjaWZkZWYgX1dJTjMyCisg ICAgQ1VEQV9FWFRFUk5BTF9NRU1PUllfSEFORExFX0RFU0MgZXh0X2Rlc2MgPSB7CisgICAgICAg IC50eXBlID0gSXNXaW5kb3dzOE9yR3JlYXRlcigpCisgICAgICAgICAgICAgICAgPyBDVV9FWFRF Uk5BTF9NRU1PUllfSEFORExFX1RZUEVfT1BBUVVFX1dJTjMyCisgICAgICAgICAgICAgICAgOiBD VV9FWFRFUk5BTF9NRU1PUllfSEFORExFX1RZUEVfT1BBUVVFX1dJTjMyX0tNVCwKKyAgICAgICAg ICAgIC5zaXplID0gc2l6ZSwKKyAgICB9OworICAgIFZrTWVtb3J5R2V0V2luMzJIYW5kbGVJbmZv S0hSIGV4cG9ydF9pbmZvID0geworICAgICAgICAuc1R5cGUgICAgICA9IFZLX1NUUlVDVFVSRV9U WVBFX01FTU9SWV9HRVRfV0lOMzJfSEFORExFX0lORk9fS0hSLAorICAgICAgICAubWVtb3J5ICAg ICA9IG1lbSwKKyAgICAgICAgLmhhbmRsZVR5cGUgPSBJc1dpbmRvd3M4T3JHcmVhdGVyKCkKKyAg ICAgICAgICAgID8gVktfRVhURVJOQUxfTUVNT1JZX0hBTkRMRV9UWVBFX09QQVFVRV9XSU4zMl9C SVQKKyAgICAgICAgICAgIDogVktfRVhURVJOQUxfTUVNT1JZX0hBTkRMRV9UWVBFX09QQVFVRV9X SU4zMl9LTVRfQklULAorICAgIH07CisKKyAgICByZXQgPSB2ay0+R2V0TWVtb3J5V2luMzJIYW5k bGVLSFIoaHdjdHgtPmFjdF9kZXYsICZleHBvcnRfaW5mbywKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJmV4dF9kZXNjLmhhbmRsZS53aW4zMi5oYW5kbGUpOworICAgIGlm IChyZXQgIT0gVktfU1VDQ0VTUykgeworICAgICAgICBhdl9sb2coY3R4LCBBVl9MT0dfRVJST1Is ICJVbmFibGUgdG8gZXhwb3J0IHRoZSBpbWFnZSBhcyBhIFdpbjMyIEhhbmRsZTogJXMhXG4iLAor ICAgICAgICAgICAgICAgZmZfdmtfcmV0MnN0cihyZXQpKTsKKyAgICAgICAgcmV0dXJuIEFWRVJS T1JfRVhURVJOQUw7CisgICAgfQorICAgIGRzdF9pbnQtPmV4dF9tZW1faGFuZGxlW2lkeF0gPSBl eHRfZGVzYy5oYW5kbGUud2luMzIuaGFuZGxlOworI2Vsc2UKKyAgICBDVURBX0VYVEVSTkFMX01F TU9SWV9IQU5ETEVfREVTQyBleHRfZGVzYyA9IHsKKyAgICAgICAgLnR5cGUgPSBDVV9FWFRFUk5B TF9NRU1PUllfSEFORExFX1RZUEVfT1BBUVVFX0ZELAorICAgICAgICAuc2l6ZSA9IHNpemUsCisg ICAgfTsKKyAgICBWa01lbW9yeUdldEZkSW5mb0tIUiBleHBvcnRfaW5mbyA9IHsKKyAgICAgICAg LnNUeXBlICAgICAgPSBWS19TVFJVQ1RVUkVfVFlQRV9NRU1PUllfR0VUX0ZEX0lORk9fS0hSLAor ICAgICAgICAubWVtb3J5ICAgICA9IG1lbSwKKyAgICAgICAgLmhhbmRsZVR5cGUgPSBWS19FWFRF Uk5BTF9NRU1PUllfSEFORExFX1RZUEVfT1BBUVVFX0ZEX0JJVF9LSFIsCisgICAgfTsKKworICAg IHJldCA9IHZrLT5HZXRNZW1vcnlGZEtIUihod2N0eC0+YWN0X2RldiwgJmV4cG9ydF9pbmZvLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZXh0X2Rlc2MuaGFuZGxlLmZkKTsKKyAgICBp ZiAocmV0ICE9IFZLX1NVQ0NFU1MpIHsKKyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9S LCAiVW5hYmxlIHRvIGV4cG9ydCB0aGUgaW1hZ2UgYXMgYSBGRDogJXMhXG4iLAorICAgICAgICAg ICAgICAgZmZfdmtfcmV0MnN0cihyZXQpKTsKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfRVhURVJO QUw7CisgICAgfQorI2VuZGlmCisKKyAgICByZXQgPSBDSEVDS19DVShjdS0+Y3VJbXBvcnRFeHRl cm5hbE1lbW9yeSgmZHN0X2ludC0+ZXh0X21lbVtpZHhdLCAmZXh0X2Rlc2MpKTsKKyAgICBpZiAo cmV0IDwgMCkgeworI2lmbmRlZiBfV0lOMzIKKyAgICAgICAgY2xvc2UoZXh0X2Rlc2MuaGFuZGxl LmZkKTsKKyNlbmRpZgorICAgICAgICByZXR1cm4gQVZFUlJPUl9FWFRFUk5BTDsKKyAgICB9CisK KyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBleHBvcnRfc2VtX3RvX2N1ZGEoQVZIV0Rl dmljZUNvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFWSFdEZXZp Y2VDb250ZXh0ICpjdWRhX2N1LCBDdWRhRnVuY3Rpb25zICpjdSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEFWVmtGcmFtZUludGVybmFsICpkc3RfaW50LCBpbnQgaWR4LAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgVmtTZW1hcGhvcmUgc2VtKQoreworICAgIFZrUmVzdWx0 IHJldDsKKyAgICBWdWxrYW5EZXZpY2VQcml2ICpwID0gY3R4LT5od2N0eDsKKyAgICBBVlZ1bGth bkRldmljZUNvbnRleHQgKmh3Y3R4ID0gJnAtPnA7CisgICAgRkZWdWxrYW5GdW5jdGlvbnMgKnZr ID0gJnAtPnZrY3R4LnZrZm47CisKKyNpZmRlZiBfV0lOMzIKKyAgICBWa1NlbWFwaG9yZUdldFdp bjMySGFuZGxlSW5mb0tIUiBzZW1fZXhwb3J0ID0geworICAgICAgICAuc1R5cGUgPSBWS19TVFJV Q1RVUkVfVFlQRV9TRU1BUEhPUkVfR0VUX1dJTjMyX0hBTkRMRV9JTkZPX0tIUiwKKyAgICAgICAg LnNlbWFwaG9yZSA9IHNlbSwKKyAgICAgICAgLmhhbmRsZVR5cGUgPSBJc1dpbmRvd3M4T3JHcmVh dGVyKCkKKyAgICAgICAgICAgICAgICAgICAgICA/IFZLX0VYVEVSTkFMX1NFTUFQSE9SRV9IQU5E TEVfVFlQRV9PUEFRVUVfV0lOMzJfQklUCisgICAgICAgICAgICAgICAgICAgICAgOiBWS19FWFRF Uk5BTF9TRU1BUEhPUkVfSEFORExFX1RZUEVfT1BBUVVFX1dJTjMyX0tNVF9CSVQsCisgICAgfTsK KyAgICBDVURBX0VYVEVSTkFMX1NFTUFQSE9SRV9IQU5ETEVfREVTQyBleHRfc2VtX2Rlc2MgPSB7 CisgICAgICAgIC50eXBlID0gMTAgLyogVE9ETzogQ1VfRVhURVJOQUxfU0VNQVBIT1JFX0hBTkRM RV9UWVBFX1RJTUVMSU5FX1NFTUFQSE9SRV9XSU4zMiAqLywKKyAgICB9OworI2Vsc2UKKyAgICBW a1NlbWFwaG9yZUdldEZkSW5mb0tIUiBzZW1fZXhwb3J0ID0geworICAgICAgICAuc1R5cGUgPSBW S19TVFJVQ1RVUkVfVFlQRV9TRU1BUEhPUkVfR0VUX0ZEX0lORk9fS0hSLAorICAgICAgICAuc2Vt YXBob3JlID0gc2VtLAorICAgICAgICAuaGFuZGxlVHlwZSA9IFZLX0VYVEVSTkFMX1NFTUFQSE9S RV9IQU5ETEVfVFlQRV9PUEFRVUVfRkRfQklULAorICAgIH07CisgICAgQ1VEQV9FWFRFUk5BTF9T RU1BUEhPUkVfSEFORExFX0RFU0MgZXh0X3NlbV9kZXNjID0geworICAgICAgICAudHlwZSA9IDkg LyogVE9ETzogQ1VfRVhURVJOQUxfU0VNQVBIT1JFX0hBTkRMRV9UWVBFX1RJTUVMSU5FX1NFTUFQ SE9SRV9GRCAqLywKKyAgICB9OworI2VuZGlmCisKKyNpZmRlZiBfV0lOMzIKKyAgICByZXQgPSB2 ay0+R2V0U2VtYXBob3JlV2luMzJIYW5kbGVLSFIoaHdjdHgtPmFjdF9kZXYsICZzZW1fZXhwb3J0 LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZXh0X3NlbV9kZXNj LmhhbmRsZS53aW4zMi5oYW5kbGUpOworI2Vsc2UKKyAgICByZXQgPSB2ay0+R2V0U2VtYXBob3Jl RmRLSFIoaHdjdHgtPmFjdF9kZXYsICZzZW1fZXhwb3J0LAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAmZXh0X3NlbV9kZXNjLmhhbmRsZS5mZCk7CisjZW5kaWYKKyAgICBpZiAocmV0 ICE9IFZLX1NVQ0NFU1MpIHsKKyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLCAiRmFp bGVkIHRvIGV4cG9ydCBzZW1hcGhvcmU6ICVzXG4iLAorICAgICAgICAgICAgICAgZmZfdmtfcmV0 MnN0cihyZXQpKTsKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfRVhURVJOQUw7CisgICAgfQorI2lm ZGVmIF9XSU4zMgorICAgIGRzdF9pbnQtPmV4dF9zZW1faGFuZGxlW2lkeF0gPSBleHRfc2VtX2Rl c2MuaGFuZGxlLndpbjMyLmhhbmRsZTsKKyNlbmRpZgorCisgICAgcmV0ID0gQ0hFQ0tfQ1UoY3Ut PmN1SW1wb3J0RXh0ZXJuYWxTZW1hcGhvcmUoJmRzdF9pbnQtPmN1X3NlbVtpZHhdLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZleHRfc2VtX2Rlc2Mp KTsKKyAgICBpZiAocmV0IDwgMCkgeworI2lmbmRlZiBfV0lOMzIKKyAgICAgICAgY2xvc2UoZXh0 X3NlbV9kZXNjLmhhbmRsZS5mZCk7CisjZW5kaWYKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfRVhU RVJOQUw7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdnVsa2FuX2V4 cG9ydF90b19jdWRhKEFWSFdGcmFtZXNDb250ZXh0ICpod2ZjLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgQVZCdWZmZXJSZWYgKmN1ZGFfaHdmYywKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IEFWRnJhbWUgKmZyYW1lKQoreworICAgIGludCBlcnI7Cisg ICAgVmtSZXN1bHQgcmV0OworICAgIEFWVmtGcmFtZSAqZHN0X2Y7CisgICAgQVZWa0ZyYW1lSW50 ZXJuYWwgKmRzdF9pbnQ7CisgICAgQVZIV0RldmljZUNvbnRleHQgKmN0eCA9IGh3ZmMtPmRldmlj ZV9jdHg7CisgICAgY29uc3QgaW50IHBsYW5lcyA9IGF2X3BpeF9mbXRfY291bnRfcGxhbmVzKGh3 ZmMtPnN3X2Zvcm1hdCk7CisgICAgY29uc3QgQVZQaXhGbXREZXNjcmlwdG9yICpkZXNjID0gYXZf cGl4X2ZtdF9kZXNjX2dldChod2ZjLT5zd19mb3JtYXQpOworICAgIFZ1bGthbkRldmljZVByaXYg KnAgPSBjdHgtPmh3Y3R4OworICAgIEFWVnVsa2FuRGV2aWNlQ29udGV4dCAqaHdjdHggPSAmcC0+ cDsKKyAgICBGRlZ1bGthbkZ1bmN0aW9ucyAqdmsgPSAmcC0+dmtjdHgudmtmbjsKKyAgICBpbnQg bmJfaW1hZ2VzOworCisgICAgQVZIV0ZyYW1lc0NvbnRleHQgKmN1ZGFfZmMgPSAoQVZIV0ZyYW1l c0NvbnRleHQqKWN1ZGFfaHdmYy0+ZGF0YTsKKyAgICBBVkhXRGV2aWNlQ29udGV4dCAqY3VkYV9j dSA9IGN1ZGFfZmMtPmRldmljZV9jdHg7CisgICAgQVZDVURBRGV2aWNlQ29udGV4dCAqY3VkYV9k ZXYgPSBjdWRhX2N1LT5od2N0eDsKKyAgICBBVkNVREFEZXZpY2VDb250ZXh0SW50ZXJuYWwgKmN1 X2ludGVybmFsID0gY3VkYV9kZXYtPmludGVybmFsOworICAgIEN1ZGFGdW5jdGlvbnMgKmN1ID0g Y3VfaW50ZXJuYWwtPmN1ZGFfZGw7CisgICAgQ1VhcnJheV9mb3JtYXQgY3VmbXQgPSBkZXNjLT5j b21wWzBdLmRlcHRoID4gOCA/IENVX0FEX0ZPUk1BVF9VTlNJR05FRF9JTlQxNiA6CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENVX0FEX0ZPUk1B VF9VTlNJR05FRF9JTlQ4OworCisgICAgZHN0X2YgPSAoQVZWa0ZyYW1lICopZnJhbWUtPmRhdGFb MF07CisgICAgZHN0X2ludCA9IGRzdF9mLT5pbnRlcm5hbDsKKworICAgIGlmICghZHN0X2ludC0+ Y3VkYV9mY19yZWYpIHsKKyAgICAgICAgc2l6ZV90IG9mZnNldHNbM10gPSB7IDAgfTsKKworICAg ICAgICBkc3RfaW50LT5jdWRhX2ZjX3JlZiA9IGF2X2J1ZmZlcl9yZWYoY3VkYV9od2ZjKTsKKyAg ICAgICAgaWYgKCFkc3RfaW50LT5jdWRhX2ZjX3JlZikKKyAgICAgICAgICAgIHJldHVybiBBVkVS Uk9SKEVOT01FTSk7CisKKyAgICAgICAgbmJfaW1hZ2VzID0gZmZfdmtfY291bnRfaW1hZ2VzKGRz dF9mKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuYl9pbWFnZXM7IGkrKykgeworICAg ICAgICAgICAgZXJyID0gZXhwb3J0X21lbV90b19jdWRhKGN0eCwgY3VkYV9jdSwgY3UsIGRzdF9p bnQsIGksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHN0X2YtPm1lbVtp XSwgZHN0X2YtPnNpemVbaV0pOworICAgICAgICAgICAgaWYgKGVyciA8IDApCisgICAgICAgICAg ICAgICAgZ290byBmYWlsOworCisgICAgICAgICAgICBlcnIgPSBleHBvcnRfc2VtX3RvX2N1ZGEo Y3R4LCBjdWRhX2N1LCBjdSwgZHN0X2ludCwgaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBkc3RfZi0+c2VtW2ldKTsKKyAgICAgICAgICAgIGlmIChlcnIgPCAwKQorICAg ICAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChuYl9pbWFn ZXMgIT0gcGxhbmVzKSB7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHBsYW5lczsg aSsrKSB7CisgICAgICAgICAgICAgICAgVmtJbWFnZVN1YnJlc291cmNlIHN1YnJlcyA9IHsKKyAg ICAgICAgICAgICAgICAgICAgLmFzcGVjdE1hc2sgPSBpID09IDIgPyBWS19JTUFHRV9BU1BFQ1Rf TUVNT1JZX1BMQU5FXzJfQklUX0VYVCA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaSA9PSAxID8gVktfSU1BR0VfQVNQRUNUX01FTU9SWV9QTEFORV8xX0JJVF9FWFQgOgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZLX0lNQUdFX0FTUEVDVF9N RU1PUllfUExBTkVfMF9CSVRfRVhUCisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAg ICBWa1N1YnJlc291cmNlTGF5b3V0IGxheW91dCA9IHsgMCB9OworICAgICAgICAgICAgICAgIHZr LT5HZXRJbWFnZVN1YnJlc291cmNlTGF5b3V0KGh3Y3R4LT5hY3RfZGV2LCBkc3RfZi0+aW1nW0ZG TUlOKGksIG5iX2ltYWdlcyAtIDEpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAmc3VicmVzLCAmbGF5b3V0KTsKKyAgICAgICAgICAgICAgICBvZmZzZXRz W2ldID0gbGF5b3V0Lm9mZnNldDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAg IGZvciAoaW50IGkgPSAwOyBpIDwgcGxhbmVzOyBpKyspIHsKKyAgICAgICAgICAgIENVREFfRVhU RVJOQUxfTUVNT1JZX01JUE1BUFBFRF9BUlJBWV9ERVNDIHRleF9kZXNjID0geworICAgICAgICAg ICAgICAgIC5vZmZzZXQgPSBvZmZzZXRzW2ldLAorICAgICAgICAgICAgICAgIC5hcnJheURlc2Mg PSB7CisgICAgICAgICAgICAgICAgICAgIC5EZXB0aCA9IDAsCisgICAgICAgICAgICAgICAgICAg IC5Gb3JtYXQgPSBjdWZtdCwKKyAgICAgICAgICAgICAgICAgICAgLk51bUNoYW5uZWxzID0gMSAr ICgocGxhbmVzID09IDIpICYmIGkpLAorICAgICAgICAgICAgICAgICAgICAuRmxhZ3MgPSAwLAor ICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgLm51bUxldmVscyA9IDEsCisgICAg ICAgICAgICB9OworICAgICAgICAgICAgaW50IHBfdywgcF9oOworCisgICAgICAgICAgICBnZXRf cGxhbmVfd2goJnBfdywgJnBfaCwgaHdmYy0+c3dfZm9ybWF0LCBod2ZjLT53aWR0aCwgaHdmYy0+ aGVpZ2h0LCBpKTsKKyAgICAgICAgICAgIHRleF9kZXNjLmFycmF5RGVzYy5XaWR0aCA9IHBfdzsK KyAgICAgICAgICAgIHRleF9kZXNjLmFycmF5RGVzYy5IZWlnaHQgPSBwX2g7CisKKyAgICAgICAg ICAgIHJldCA9IENIRUNLX0NVKGN1LT5jdUV4dGVybmFsTWVtb3J5R2V0TWFwcGVkTWlwbWFwcGVk QXJyYXkoJmRzdF9pbnQtPmN1X21tYVtpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHN0X2ludC0+ZXh0X21l bVtGRk1JTihpLCBuYl9pbWFnZXMgLSAxKV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0ZXhfZGVzYykpOwor ICAgICAgICAgICAgaWYgKHJldCA8IDApIHsKKyAgICAgICAgICAgICAgICBlcnIgPSBBVkVSUk9S X0VYVEVSTkFMOworICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgICAgIH0KKwor ICAgICAgICAgICAgcmV0ID0gQ0hFQ0tfQ1UoY3UtPmN1TWlwbWFwcGVkQXJyYXlHZXRMZXZlbCgm ZHN0X2ludC0+Y3VfYXJyYXlbaV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGRzdF9pbnQtPmN1X21tYVtpXSwgMCkpOworICAgICAgICAg ICAgaWYgKHJldCA8IDApIHsKKyAgICAgICAgICAgICAgICBlcnIgPSBBVkVSUk9SX0VYVEVSTkFM OworICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgICAgIH0KKworICAgICAgICB9 CisgICAgfQorCisgICAgcmV0dXJuIDA7CisKK2ZhaWw6CisgICAgdnVsa2FuX2ZyZWVfaW50ZXJu YWwoZHN0X2YpOworICAgIHJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgdnVsa2FuX3RyYW5z ZmVyX2RhdGFfZnJvbV9jdWRhKEFWSFdGcmFtZXNDb250ZXh0ICpod2ZjLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVZGcmFtZSAqZHN0LCBjb25zdCBBVkZyYW1l ICpzcmMpCit7CisgICAgaW50IGVycjsKKyAgICBDVWNvbnRleHQgZHVtbXk7CisgICAgQVZWa0Zy YW1lICpkc3RfZjsKKyAgICBBVlZrRnJhbWVJbnRlcm5hbCAqZHN0X2ludDsKKyAgICBWdWxrYW5G cmFtZXNQcml2ICpmcCA9IGh3ZmMtPmh3Y3R4OworICAgIGNvbnN0IGludCBwbGFuZXMgPSBhdl9w aXhfZm10X2NvdW50X3BsYW5lcyhod2ZjLT5zd19mb3JtYXQpOworICAgIGNvbnN0IEFWUGl4Rm10 RGVzY3JpcHRvciAqZGVzYyA9IGF2X3BpeF9mbXRfZGVzY19nZXQoaHdmYy0+c3dfZm9ybWF0KTsK KworICAgIEFWSFdGcmFtZXNDb250ZXh0ICpjdWRhX2ZjID0gKEFWSFdGcmFtZXNDb250ZXh0Kilz cmMtPmh3X2ZyYW1lc19jdHgtPmRhdGE7CisgICAgQVZIV0RldmljZUNvbnRleHQgKmN1ZGFfY3Ug PSBjdWRhX2ZjLT5kZXZpY2VfY3R4OworICAgIEFWQ1VEQURldmljZUNvbnRleHQgKmN1ZGFfZGV2 ID0gY3VkYV9jdS0+aHdjdHg7CisgICAgQVZDVURBRGV2aWNlQ29udGV4dEludGVybmFsICpjdV9p bnRlcm5hbCA9IGN1ZGFfZGV2LT5pbnRlcm5hbDsKKyAgICBDdWRhRnVuY3Rpb25zICpjdSA9IGN1 X2ludGVybmFsLT5jdWRhX2RsOworICAgIENVREFfRVhURVJOQUxfU0VNQVBIT1JFX1dBSVRfUEFS QU1TIHNfd19wYXJbQVZfTlVNX0RBVEFfUE9JTlRFUlNdID0geyAwIH07CisgICAgQ1VEQV9FWFRF Uk5BTF9TRU1BUEhPUkVfU0lHTkFMX1BBUkFNUyBzX3NfcGFyW0FWX05VTV9EQVRBX1BPSU5URVJT XSA9IHsgMCB9OworCisgICAgZHN0X2YgPSAoQVZWa0ZyYW1lICopZHN0LT5kYXRhWzBdOworCisg ICAgZXJyID0gcHJlcGFyZV9mcmFtZShod2ZjLCAmZnAtPnVwbG9hZF9leGVjLCBkc3RfZiwgUFJF UF9NT0RFX0VYVEVSTkFMX0VYUE9SVCk7CisgICAgaWYgKGVyciA8IDApCisgICAgICAgIHJldHVy biBlcnI7CisKKyAgICBlcnIgPSBDSEVDS19DVShjdS0+Y3VDdHhQdXNoQ3VycmVudChjdWRhX2Rl di0+Y3VkYV9jdHgpKTsKKyAgICBpZiAoZXJyIDwgMCkKKyAgICAgICAgcmV0dXJuIGVycjsKKwor ICAgIGVyciA9IHZ1bGthbl9leHBvcnRfdG9fY3VkYShod2ZjLCBzcmMtPmh3X2ZyYW1lc19jdHgs IGRzdCk7CisgICAgaWYgKGVyciA8IDApIHsKKyAgICAgICAgQ0hFQ0tfQ1UoY3UtPmN1Q3R4UG9w Q3VycmVudCgmZHVtbXkpKTsKKyAgICAgICAgcmV0dXJuIGVycjsKKyAgICB9CisKKyAgICBkc3Rf aW50ID0gZHN0X2YtPmludGVybmFsOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwbGFuZXM7 IGkrKykgeworICAgICAgICBzX3dfcGFyW2ldLnBhcmFtcy5mZW5jZS52YWx1ZSA9IGRzdF9mLT5z ZW1fdmFsdWVbaV0gKyAwOworICAgICAgICBzX3NfcGFyW2ldLnBhcmFtcy5mZW5jZS52YWx1ZSA9 IGRzdF9mLT5zZW1fdmFsdWVbaV0gKyAxOworICAgIH0KKworICAgIGVyciA9IENIRUNLX0NVKGN1 LT5jdVdhaXRFeHRlcm5hbFNlbWFwaG9yZXNBc3luYyhkc3RfaW50LT5jdV9zZW0sIHNfd19wYXIs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBs YW5lcywgY3VkYV9kZXYtPnN0cmVhbSkpOworICAgIGlmIChlcnIgPCAwKQorICAgICAgICBnb3Rv IGZhaWw7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHBsYW5lczsgaSsrKSB7CisgICAgICAg IENVREFfTUVNQ1BZMkQgY3B5ID0geworICAgICAgICAgICAgLnNyY01lbW9yeVR5cGUgPSBDVV9N RU1PUllUWVBFX0RFVklDRSwKKyAgICAgICAgICAgIC5zcmNEZXZpY2UgICAgID0gKENVZGV2aWNl cHRyKXNyYy0+ZGF0YVtpXSwKKyAgICAgICAgICAgIC5zcmNQaXRjaCAgICAgID0gc3JjLT5saW5l c2l6ZVtpXSwKKyAgICAgICAgICAgIC5zcmNZICAgICAgICAgID0gMCwKKworICAgICAgICAgICAg LmRzdE1lbW9yeVR5cGUgPSBDVV9NRU1PUllUWVBFX0FSUkFZLAorICAgICAgICAgICAgLmRzdEFy cmF5ICAgICAgPSBkc3RfaW50LT5jdV9hcnJheVtpXSwKKyAgICAgICAgfTsKKworICAgICAgICBp bnQgcF93LCBwX2g7CisgICAgICAgIGdldF9wbGFuZV93aCgmcF93LCAmcF9oLCBod2ZjLT5zd19m b3JtYXQsIGh3ZmMtPndpZHRoLCBod2ZjLT5oZWlnaHQsIGkpOworCisgICAgICAgIGNweS5XaWR0 aEluQnl0ZXMgPSBwX3cgKiBkZXNjLT5jb21wW2ldLnN0ZXA7CisgICAgICAgIGNweS5IZWlnaHQg PSBwX2g7CisKKyAgICAgICAgZXJyID0gQ0hFQ0tfQ1UoY3UtPmN1TWVtY3B5MkRBc3luYygmY3B5 LCBjdWRhX2Rldi0+c3RyZWFtKSk7CisgICAgICAgIGlmIChlcnIgPCAwKQorICAgICAgICAgICAg Z290byBmYWlsOworICAgIH0KKworICAgIGVyciA9IENIRUNLX0NVKGN1LT5jdVNpZ25hbEV4dGVy bmFsU2VtYXBob3Jlc0FzeW5jKGRzdF9pbnQtPmN1X3NlbSwgc19zX3BhciwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFuZXMsIGN1ZGFf ZGV2LT5zdHJlYW0pKTsKKyAgICBpZiAoZXJyIDwgMCkKKyAgICAgICAgZ290byBmYWlsOworCisg ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwbGFuZXM7IGkrKykKKyAgICAgICAgZHN0X2YtPnNlbV92 YWx1ZVtpXSsrOworCisgICAgQ0hFQ0tfQ1UoY3UtPmN1Q3R4UG9wQ3VycmVudCgmZHVtbXkpKTsK KworICAgIGF2X2xvZyhod2ZjLCBBVl9MT0dfVkVSQk9TRSwgIlRyYW5zZmVycmVkIENVREEgaW1h Z2UgdG8gVnVsa2FuIVxuIik7CisKKyAgICByZXR1cm4gZXJyID0gcHJlcGFyZV9mcmFtZShod2Zj LCAmZnAtPnVwbG9hZF9leGVjLCBkc3RfZiwgUFJFUF9NT0RFX0VYVEVSTkFMX0lNUE9SVCk7CisK K2ZhaWw6CisgICAgQ0hFQ0tfQ1UoY3UtPmN1Q3R4UG9wQ3VycmVudCgmZHVtbXkpKTsKKyAgICB2 dWxrYW5fZnJlZV9pbnRlcm5hbChkc3RfZik7CisgICAgYXZfYnVmZmVyX3VucmVmKCZkc3QtPmJ1 ZlswXSk7CisgICAgcmV0dXJuIGVycjsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50IHZ1bGthbl9t YXBfdG8oQVZIV0ZyYW1lc0NvbnRleHQgKmh3ZmMsIEFWRnJhbWUgKmRzdCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCBBVkZyYW1lICpzcmMsIGludCBmbGFncykKK3sKKyAgICBhdl91 bnVzZWQgVnVsa2FuRGV2aWNlUHJpdiAqcCA9IGh3ZmMtPmRldmljZV9jdHgtPmh3Y3R4OworCisg ICAgc3dpdGNoIChzcmMtPmZvcm1hdCkgeworI2lmIENPTkZJR19MSUJEUk0KKyNpZiBDT05GSUdf VkFBUEkKKyAgICBjYXNlIEFWX1BJWF9GTVRfVkFBUEk6CisgICAgICAgIGlmIChwLT52a2N0eC5l eHRlbnNpb25zICYgRkZfVktfRVhUX0RSTV9NT0RJRklFUl9GTEFHUykKKyAgICAgICAgICAgIHJl dHVybiB2dWxrYW5fbWFwX2Zyb21fdmFhcGkoaHdmYywgZHN0LCBzcmMsIGZsYWdzKTsKKyAgICAg ICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PU1lTKTsKKyNlbmRpZgorICAg IGNhc2UgQVZfUElYX0ZNVF9EUk1fUFJJTUU6CisgICAgICAgIGlmIChwLT52a2N0eC5leHRlbnNp b25zICYgRkZfVktfRVhUX0RSTV9NT0RJRklFUl9GTEFHUykKKyAgICAgICAgICAgIHJldHVybiB2 dWxrYW5fbWFwX2Zyb21fZHJtKGh3ZmMsIGRzdCwgc3JjLCBmbGFncyk7CisgICAgICAgIGVsc2UK KyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT1NZUyk7CisjZW5kaWYKKyAgICBkZWZhdWx0 OgorICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9TWVMpOworICAgIH0KK30KKworI2lmIENPTkZJ R19MSUJEUk0KK3R5cGVkZWYgc3RydWN0IFZ1bGthbkRSTU1hcHBpbmcgeworICAgIEFWRFJNRnJh bWVEZXNjcmlwdG9yIGRybV9kZXNjOworICAgIEFWVmtGcmFtZSAqc291cmNlOworfSBWdWxrYW5E Uk1NYXBwaW5nOworCitzdGF0aWMgdm9pZCB2dWxrYW5fdW5tYXBfdG9fZHJtKEFWSFdGcmFtZXND b250ZXh0ICpod2ZjLCBIV01hcERlc2NyaXB0b3IgKmh3bWFwKQoreworICAgIEFWRFJNRnJhbWVE ZXNjcmlwdG9yICpkcm1fZGVzYyA9IGh3bWFwLT5wcml2OworCisgICAgZm9yIChpbnQgaSA9IDA7 IGkgPCBkcm1fZGVzYy0+bmJfb2JqZWN0czsgaSsrKQorICAgICAgICBjbG9zZShkcm1fZGVzYy0+ b2JqZWN0c1tpXS5mZCk7CisKKyAgICBhdl9mcmVlKGRybV9kZXNjKTsKK30KKworc3RhdGljIGlu bGluZSB1aW50MzJfdCB2dWxrYW5fZm10X3RvX2RybShWa0Zvcm1hdCB2a2ZtdCkKK3sKKyAgICBm b3IgKGludCBpID0gMDsgaSA8IEZGX0FSUkFZX0VMRU1TKHZ1bGthbl9kcm1fZm9ybWF0X21hcCk7 IGkrKykKKyAgICAgICAgaWYgKHZ1bGthbl9kcm1fZm9ybWF0X21hcFtpXS52a19mb3JtYXQgPT0g dmtmbXQpCisgICAgICAgICAgICByZXR1cm4gdnVsa2FuX2RybV9mb3JtYXRfbWFwW2ldLmRybV9m b3VyY2M7CisgICAgcmV0dXJuIERSTV9GT1JNQVRfSU5WQUxJRDsKK30KKworI2RlZmluZSBNQVhf TUVNT1JZX1BMQU5FUyA0CitzdGF0aWMgVmtJbWFnZUFzcGVjdEZsYWdzIHBsYW5lX2luZGV4X3Rv X2FzcGVjdChpbnQgcGxhbmUpIHsKKyAgICBpZiAocGxhbmUgPT0gMCkgcmV0dXJuIFZLX0lNQUdF X0FTUEVDVF9NRU1PUllfUExBTkVfMF9CSVRfRVhUOworICAgIGlmIChwbGFuZSA9PSAxKSByZXR1 cm4gVktfSU1BR0VfQVNQRUNUX01FTU9SWV9QTEFORV8xX0JJVF9FWFQ7CisgICAgaWYgKHBsYW5l ID09IDIpIHJldHVybiBWS19JTUFHRV9BU1BFQ1RfTUVNT1JZX1BMQU5FXzJfQklUX0VYVDsKKyAg ICBpZiAocGxhbmUgPT0gMykgcmV0dXJuIFZLX0lNQUdFX0FTUEVDVF9NRU1PUllfUExBTkVfM19C SVRfRVhUOworCisgICAgYXZfYXNzZXJ0MiAoMCAmJiAiSW52YWxpZCBwbGFuZSBpbmRleCIpOwor ICAgIHJldHVybiBWS19JTUFHRV9BU1BFQ1RfTUVNT1JZX1BMQU5FXzBfQklUX0VYVDsKK30KKwor c3RhdGljIGludCB2dWxrYW5fbWFwX3RvX2RybShBVkhXRnJhbWVzQ29udGV4dCAqaHdmYywgQVZG cmFtZSAqZHN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBVkZyYW1lICpz cmMsIGludCBmbGFncykKK3sKKyAgICBpbnQgZXJyID0gMDsKKyAgICBWa1Jlc3VsdCByZXQ7Cisg ICAgQVZWa0ZyYW1lICpmID0gKEFWVmtGcmFtZSAqKXNyYy0+ZGF0YVswXTsKKyAgICBWdWxrYW5E ZXZpY2VQcml2ICpwID0gaHdmYy0+ZGV2aWNlX2N0eC0+aHdjdHg7CisgICAgQVZWdWxrYW5EZXZp Y2VDb250ZXh0ICpod2N0eCA9ICZwLT5wOworICAgIEZGVnVsa2FuRnVuY3Rpb25zICp2ayA9ICZw LT52a2N0eC52a2ZuOworICAgIFZ1bGthbkZyYW1lc1ByaXYgKmZwID0gaHdmYy0+aHdjdHg7Cisg ICAgY29uc3QgaW50IHBsYW5lcyA9IGF2X3BpeF9mbXRfY291bnRfcGxhbmVzKGh3ZmMtPnN3X2Zv cm1hdCk7CisgICAgVmtJbWFnZURybUZvcm1hdE1vZGlmaWVyUHJvcGVydGllc0VYVCBkcm1fbW9k ID0geworICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9JTUFHRV9EUk1fRk9STUFU X01PRElGSUVSX1BST1BFUlRJRVNfRVhULAorICAgIH07CisgICAgVmtTZW1hcGhvcmVXYWl0SW5m byB3YWl0X2luZm8gPSB7CisgICAgICAgIC5zVHlwZSAgICAgICAgICA9IFZLX1NUUlVDVFVSRV9U WVBFX1NFTUFQSE9SRV9XQUlUX0lORk8sCisgICAgICAgIC5mbGFncyAgICAgICAgICA9IDB4MCwK KyAgICAgICAgLnNlbWFwaG9yZUNvdW50ID0gcGxhbmVzLAorICAgIH07CisKKyAgICBBVkRSTUZy YW1lRGVzY3JpcHRvciAqZHJtX2Rlc2MgPSBhdl9tYWxsb2N6KHNpemVvZigqZHJtX2Rlc2MpKTsK KyAgICBpZiAoIWRybV9kZXNjKQorICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOworCisg ICAgZXJyID0gcHJlcGFyZV9mcmFtZShod2ZjLCAmZnAtPmNvbXB1dGVfZXhlYywgZiwgUFJFUF9N T0RFX0VYVEVSTkFMX0VYUE9SVCk7CisgICAgaWYgKGVyciA8IDApCisgICAgICAgIGdvdG8gZW5k OworCisgICAgLyogV2FpdCBmb3IgdGhlIG9wZXJhdGlvbiB0byBmaW5pc2ggc28gd2UgY2FuIGNs ZWFubHkgZXhwb3J0IGl0LiAqLworICAgIHdhaXRfaW5mby5wU2VtYXBob3JlcyA9IGYtPnNlbTsK KyAgICB3YWl0X2luZm8ucFZhbHVlcyAgICAgPSBmLT5zZW1fdmFsdWU7CisKKyAgICB2ay0+V2Fp dFNlbWFwaG9yZXMoaHdjdHgtPmFjdF9kZXYsICZ3YWl0X2luZm8sIFVJTlQ2NF9NQVgpOworCisg ICAgZXJyID0gZmZfaHdmcmFtZV9tYXBfY3JlYXRlKHNyYy0+aHdfZnJhbWVzX2N0eCwgZHN0LCBz cmMsICZ2dWxrYW5fdW5tYXBfdG9fZHJtLCBkcm1fZGVzYyk7CisgICAgaWYgKGVyciA8IDApCisg ICAgICAgIGdvdG8gZW5kOworCisgICAgcmV0ID0gdmstPkdldEltYWdlRHJtRm9ybWF0TW9kaWZp ZXJQcm9wZXJ0aWVzRVhUKGh3Y3R4LT5hY3RfZGV2LCBmLT5pbWdbMF0sCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkcm1fbW9kKTsKKyAgICBp ZiAocmV0ICE9IFZLX1NVQ0NFU1MpIHsKKyAgICAgICAgYXZfbG9nKGh3ZmMsIEFWX0xPR19FUlJP UiwgIkZhaWxlZCB0byByZXRyaWV2ZSBEUk0gZm9ybWF0IG1vZGlmaWVyIVxuIik7CisgICAgICAg IGVyciA9IEFWRVJST1JfRVhURVJOQUw7CisgICAgICAgIGdvdG8gZW5kOworICAgIH0KKworICAg IGZvciAoaW50IGkgPSAwOyAoaSA8IHBsYW5lcykgJiYgKGYtPm1lbVtpXSk7IGkrKykgeworICAg ICAgICBWa01lbW9yeUdldEZkSW5mb0tIUiBleHBvcnRfaW5mbyA9IHsKKyAgICAgICAgICAgIC5z VHlwZSAgICAgID0gVktfU1RSVUNUVVJFX1RZUEVfTUVNT1JZX0dFVF9GRF9JTkZPX0tIUiwKKyAg ICAgICAgICAgIC5tZW1vcnkgICAgID0gZi0+bWVtW2ldLAorICAgICAgICAgICAgLmhhbmRsZVR5 cGUgPSBWS19FWFRFUk5BTF9NRU1PUllfSEFORExFX1RZUEVfRE1BX0JVRl9CSVRfRVhULAorICAg ICAgICB9OworCisgICAgICAgIHJldCA9IHZrLT5HZXRNZW1vcnlGZEtIUihod2N0eC0+YWN0X2Rl diwgJmV4cG9ydF9pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRybV9k ZXNjLT5vYmplY3RzW2ldLmZkKTsKKyAgICAgICAgaWYgKHJldCAhPSBWS19TVUNDRVNTKSB7Cisg ICAgICAgICAgICBhdl9sb2coaHdmYywgQVZfTE9HX0VSUk9SLCAiVW5hYmxlIHRvIGV4cG9ydCB0 aGUgaW1hZ2UgYXMgYSBGRCFcbiIpOworICAgICAgICAgICAgZXJyID0gQVZFUlJPUl9FWFRFUk5B TDsKKyAgICAgICAgICAgIGdvdG8gZW5kOworICAgICAgICB9CisKKyAgICAgICAgZHJtX2Rlc2Mt Pm5iX29iamVjdHMrKzsKKyAgICAgICAgZHJtX2Rlc2MtPm9iamVjdHNbaV0uc2l6ZSA9IGYtPnNp emVbaV07CisgICAgICAgIGRybV9kZXNjLT5vYmplY3RzW2ldLmZvcm1hdF9tb2RpZmllciA9IGRy bV9tb2QuZHJtRm9ybWF0TW9kaWZpZXI7CisgICAgfQorCisgICAgZHJtX2Rlc2MtPm5iX2xheWVy cyA9IHBsYW5lczsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGRybV9kZXNjLT5uYl9sYXllcnM7 IGkrKykgeworICAgICAgICBWa0Zvcm1hdCBwbGFuZV92a2ZtdCA9IGF2X3ZrZm10X2Zyb21fcGl4 Zm10KGh3ZmMtPnN3X2Zvcm1hdClbaV07CisKKyAgICAgICAgZHJtX2Rlc2MtPmxheWVyc1tpXS5m b3JtYXQgPSB2dWxrYW5fZm10X3RvX2RybShwbGFuZV92a2ZtdCk7CisgICAgICAgIGRybV9kZXNj LT5sYXllcnNbaV0ubmJfcGxhbmVzID0gZnAtPmRybV9mb3JtYXRfbW9kaWZpZXJfcHJvcGVydGll c1tpXS5kcm1Gb3JtYXRNb2RpZmllclBsYW5lQ291bnQ7CisKKyAgICAgICAgaWYgKGRybV9kZXNj LT5sYXllcnNbaV0ubmJfcGxhbmVzID4gTUFYX01FTU9SWV9QTEFORVMpIHsKKyAgICAgICAgICAg IGF2X2xvZyhod2ZjLCBBVl9MT0dfRVJST1IsICJUb28gbWFueSBtZW1vcnkgcGxhbmVzIGZvciBE Uk0gZm9ybWF0IVxuIik7CisgICAgICAgICAgICBlcnIgPSBBVkVSUk9SX0VYVEVSTkFMOworICAg ICAgICAgICAgZ290byBlbmQ7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKGludCBqID0gMDsg aiA8IGRybV9kZXNjLT5sYXllcnNbaV0ubmJfcGxhbmVzOyBqKyspIHsKKyAgICAgICAgICAgIFZr U3VicmVzb3VyY2VMYXlvdXQgbGF5b3V0OworICAgICAgICAgICAgVmtJbWFnZVN1YnJlc291cmNl IHN1YiA9IHsKKyAgICAgICAgICAgICAgICAuYXNwZWN0TWFzayA9IHBsYW5lX2luZGV4X3RvX2Fz cGVjdChqKSwKKyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgIGRybV9kZXNjLT5sYXllcnNb aV0ucGxhbmVzW2pdLm9iamVjdF9pbmRleCA9IEZGTUlOKGksIGRybV9kZXNjLT5uYl9vYmplY3Rz IC0gMSk7CisKKyAgICAgICAgICAgIHZrLT5HZXRJbWFnZVN1YnJlc291cmNlTGF5b3V0KGh3Y3R4 LT5hY3RfZGV2LCBmLT5pbWdbaV0sICZzdWIsICZsYXlvdXQpOworICAgICAgICAgICAgZHJtX2Rl c2MtPmxheWVyc1tpXS5wbGFuZXNbal0ub2Zmc2V0ID0gbGF5b3V0Lm9mZnNldDsKKyAgICAgICAg ICAgIGRybV9kZXNjLT5sYXllcnNbaV0ucGxhbmVzW2pdLnBpdGNoICA9IGxheW91dC5yb3dQaXRj aDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChkcm1fZGVzYy0+bGF5ZXJzW2ldLmZvcm1hdCA9 PSBEUk1fRk9STUFUX0lOVkFMSUQpIHsKKyAgICAgICAgICAgIGF2X2xvZyhod2ZjLCBBVl9MT0df RVJST1IsICJDYW5ub3QgbWFwIHRvIERSTSBsYXllciwgdW5zdXBwb3J0ZWQhXG4iKTsKKyAgICAg ICAgICAgIGVyciA9IEFWRVJST1JfUEFUQ0hXRUxDT01FOworICAgICAgICAgICAgZ290byBlbmQ7 CisgICAgICAgIH0KKworCisgICAgICAgIGlmIChmLT50aWxpbmcgPT0gVktfSU1BR0VfVElMSU5H X09QVElNQUwpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgIH0KKworICAgIGRzdC0+d2lk dGggICA9IHNyYy0+d2lkdGg7CisgICAgZHN0LT5oZWlnaHQgID0gc3JjLT5oZWlnaHQ7CisgICAg ZHN0LT5kYXRhWzBdID0gKHVpbnQ4X3QgKilkcm1fZGVzYzsKKworICAgIGF2X2xvZyhod2ZjLCBB Vl9MT0dfVkVSQk9TRSwgIk1hcHBlZCBBVlZrRnJhbWUgdG8gYSBEUk0gb2JqZWN0IVxuIik7CisK KyAgICByZXR1cm4gMDsKKworZW5kOgorICAgIGF2X2ZyZWUoZHJtX2Rlc2MpOworICAgIHJldHVy biBlcnI7Cit9CisKKyNpZiBDT05GSUdfVkFBUEkKK3N0YXRpYyBpbnQgdnVsa2FuX21hcF90b192 YWFwaShBVkhXRnJhbWVzQ29udGV4dCAqaHdmYywgQVZGcmFtZSAqZHN0LAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IEFWRnJhbWUgKnNyYywgaW50IGZsYWdzKQoreworICAg IGludCBlcnI7CisgICAgQVZGcmFtZSAqdG1wID0gYXZfZnJhbWVfYWxsb2MoKTsKKyAgICBpZiAo IXRtcCkKKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKKworICAgIHRtcC0+Zm9ybWF0 ID0gQVZfUElYX0ZNVF9EUk1fUFJJTUU7CisKKyAgICBlcnIgPSB2dWxrYW5fbWFwX3RvX2RybSho d2ZjLCB0bXAsIHNyYywgZmxhZ3MpOworICAgIGlmIChlcnIgPCAwKQorICAgICAgICBnb3RvIGZh aWw7CisKKyAgICBlcnIgPSBhdl9od2ZyYW1lX21hcChkc3QsIHRtcCwgZmxhZ3MpOworICAgIGlm IChlcnIgPCAwKQorICAgICAgICBnb3RvIGZhaWw7CisKKyAgICBlcnIgPSBmZl9od2ZyYW1lX21h cF9yZXBsYWNlKGRzdCwgc3JjKTsKKworZmFpbDoKKyAgICBhdl9mcmFtZV9mcmVlKCZ0bXApOwor ICAgIHJldHVybiBlcnI7Cit9CisjZW5kaWYKKyNlbmRpZgorCitzdGF0aWMgaW50IHZ1bGthbl9t YXBfZnJvbShBVkhXRnJhbWVzQ29udGV4dCAqaHdmYywgQVZGcmFtZSAqZHN0LAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3QgQVZGcmFtZSAqc3JjLCBpbnQgZmxhZ3MpCit7CisgICAg YXZfdW51c2VkIFZ1bGthbkRldmljZVByaXYgKnAgPSBod2ZjLT5kZXZpY2VfY3R4LT5od2N0eDsK KworICAgIHN3aXRjaCAoZHN0LT5mb3JtYXQpIHsKKyNpZiBDT05GSUdfTElCRFJNCisgICAgY2Fz ZSBBVl9QSVhfRk1UX0RSTV9QUklNRToKKyAgICAgICAgaWYgKHAtPnZrY3R4LmV4dGVuc2lvbnMg JiBGRl9WS19FWFRfRFJNX01PRElGSUVSX0ZMQUdTKQorICAgICAgICAgICAgcmV0dXJuIHZ1bGth bl9tYXBfdG9fZHJtKGh3ZmMsIGRzdCwgc3JjLCBmbGFncyk7CisgICAgICAgIGVsc2UKKyAgICAg ICAgICAgIHJldHVybiBBVkVSUk9SKEVOT1NZUyk7CisjaWYgQ09ORklHX1ZBQVBJCisgICAgY2Fz ZSBBVl9QSVhfRk1UX1ZBQVBJOgorICAgICAgICBpZiAocC0+dmtjdHguZXh0ZW5zaW9ucyAmIEZG X1ZLX0VYVF9EUk1fTU9ESUZJRVJfRkxBR1MpCisgICAgICAgICAgICByZXR1cm4gdnVsa2FuX21h cF90b192YWFwaShod2ZjLCBkc3QsIHNyYywgZmxhZ3MpOworICAgICAgICBlbHNlCisgICAgICAg ICAgICByZXR1cm4gQVZFUlJPUihFTk9TWVMpOworI2VuZGlmCisjZW5kaWYKKyAgICBkZWZhdWx0 OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIEFWRVJST1IoRU5PU1lTKTsKK30K Kworc3RhdGljIGludCBjb3B5X2J1ZmZlcl9kYXRhKEFWSFdGcmFtZXNDb250ZXh0ICpod2ZjLCBB VkJ1ZmZlclJlZiAqYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFWRnJhbWUgKnN3 ZiwgVmtCdWZmZXJJbWFnZUNvcHkgKnJlZ2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpbnQgcGxhbmVzLCBpbnQgdXBsb2FkKQoreworICAgIFZrUmVzdWx0IHJldDsKKyAgICBWdWxr YW5EZXZpY2VQcml2ICpwID0gaHdmYy0+ZGV2aWNlX2N0eC0+aHdjdHg7CisgICAgRkZWdWxrYW5G dW5jdGlvbnMgKnZrID0gJnAtPnZrY3R4LnZrZm47CisgICAgQVZWdWxrYW5EZXZpY2VDb250ZXh0 ICpod2N0eCA9ICZwLT5wOworCisgICAgRkZWa0J1ZmZlciAqdmtidWYgPSAoRkZWa0J1ZmZlciAq KWJ1Zi0+ZGF0YTsKKworICAgIGNvbnN0IFZrTWFwcGVkTWVtb3J5UmFuZ2UgZmx1c2hfaW5mbyA9 IHsKKyAgICAgICAgLnNUeXBlICA9IFZLX1NUUlVDVFVSRV9UWVBFX01BUFBFRF9NRU1PUllfUkFO R0UsCisgICAgICAgIC5tZW1vcnkgPSB2a2J1Zi0+bWVtLAorICAgICAgICAuc2l6ZSAgID0gVktf V0hPTEVfU0laRSwKKyAgICB9OworCisgICAgaWYgKCF1cGxvYWQgJiYgISh2a2J1Zi0+ZmxhZ3Mg JiBWS19NRU1PUllfUFJPUEVSVFlfSE9TVF9DT0hFUkVOVF9CSVQpKSB7CisgICAgICAgIHJldCA9 IHZrLT5JbnZhbGlkYXRlTWFwcGVkTWVtb3J5UmFuZ2VzKGh3Y3R4LT5hY3RfZGV2LCAxLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZmx1c2hfaW5mbyk7 CisgICAgICAgIGlmIChyZXQgIT0gVktfU1VDQ0VTUykgeworICAgICAgICAgICAgYXZfbG9nKGh3 ZmMsIEFWX0xPR19FUlJPUiwgIkZhaWxlZCB0byBpbnZhbGlkYXRlIGJ1ZmZlciBkYXRhOiAlc1xu IiwKKyAgICAgICAgICAgICAgICAgICBmZl92a19yZXQyc3RyKHJldCkpOworICAgICAgICAgICAg cmV0dXJuIEFWRVJST1JfRVhURVJOQUw7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAodXBs b2FkKSB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcGxhbmVzOyBpKyspCisgICAgICAg ICAgICBhdl9pbWFnZV9jb3B5X3BsYW5lKHZrYnVmLT5tYXBwZWRfbWVtICsgcmVnaW9uW2ldLmJ1 ZmZlck9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaW9uW2ldLmJ1 ZmZlclJvd0xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dmLT5kYXRh W2ldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2YtPmxpbmVzaXplW2ldLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2YtPmxpbmVzaXplW2ldLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpb25baV0uaW1hZ2VFeHRlbnQuaGVpZ2h0KTsK KyAgICB9IGVsc2UgeworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHBsYW5lczsgaSsrKQor ICAgICAgICAgICAgYXZfaW1hZ2VfY29weV9wbGFuZShzd2YtPmRhdGFbaV0sCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHN3Zi0+bGluZXNpemVbaV0sCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHZrYnVmLT5tYXBwZWRfbWVtICsgcmVnaW9uW2ldLmJ1ZmZlck9mZnNl dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaW9uW2ldLmJ1ZmZlclJvd0xl bmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dmLT5saW5lc2l6ZVtpXSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaW9uW2ldLmltYWdlRXh0ZW50Lmhl aWdodCk7CisgICAgfQorCisgICAgaWYgKHVwbG9hZCAmJiAhKHZrYnVmLT5mbGFncyAmIFZLX01F TU9SWV9QUk9QRVJUWV9IT1NUX0NPSEVSRU5UX0JJVCkpIHsKKyAgICAgICAgcmV0ID0gdmstPkZs dXNoTWFwcGVkTWVtb3J5UmFuZ2VzKGh3Y3R4LT5hY3RfZGV2LCAxLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZsdXNoX2luZm8pOworICAgICAgICBpZiAocmV0 ICE9IFZLX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgIGF2X2xvZyhod2ZjLCBBVl9MT0dfRVJST1Is ICJGYWlsZWQgdG8gZmx1c2ggYnVmZmVyIGRhdGE6ICVzXG4iLAorICAgICAgICAgICAgICAgICAg IGZmX3ZrX3JldDJzdHIocmV0KSk7CisgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9FWFRFUk5B TDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdl dF9wbGFuZV9idWYoQVZIV0ZyYW1lc0NvbnRleHQgKmh3ZmMsIEFWQnVmZmVyUmVmICoqZHN0LAor ICAgICAgICAgICAgICAgICAgICAgICAgIEFWRnJhbWUgKnN3ZiwgVmtCdWZmZXJJbWFnZUNvcHkg KnJlZ2lvbiwgaW50IHVwbG9hZCkKK3sKKyAgICBpbnQgZXJyOworICAgIHVpbnQzMl90IHBfdywg cF9oOworICAgIFZ1bGthbkZyYW1lc1ByaXYgKmZwID0gaHdmYy0+aHdjdHg7CisgICAgVnVsa2Fu RGV2aWNlUHJpdiAqcCA9IGh3ZmMtPmRldmljZV9jdHgtPmh3Y3R4OworICAgIGNvbnN0IGludCBw bGFuZXMgPSBhdl9waXhfZm10X2NvdW50X3BsYW5lcyhzd2YtPmZvcm1hdCk7CisgICAgVmtCdWZm ZXJVc2FnZUZsYWdzIGJ1Zl91c2FnZSA9IHVwbG9hZCA/IFZLX0JVRkZFUl9VU0FHRV9UUkFOU0ZF Ul9TUkNfQklUIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg VktfQlVGRkVSX1VTQUdFX1RSQU5TRkVSX0RTVF9CSVQ7CisKKyAgICBzaXplX3QgYnVmX29mZnNl dCA9IDA7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwbGFuZXM7IGkrKykgeworICAgICAgICBn ZXRfcGxhbmVfd2goJnBfdywgJnBfaCwgc3dmLT5mb3JtYXQsIHN3Zi0+d2lkdGgsIHN3Zi0+aGVp Z2h0LCBpKTsKKworICAgICAgICByZWdpb25baV0gPSAoVmtCdWZmZXJJbWFnZUNvcHkpIHsKKyAg ICAgICAgICAgIC5idWZmZXJPZmZzZXQgPSBidWZfb2Zmc2V0LAorICAgICAgICAgICAgLmJ1ZmZl clJvd0xlbmd0aCA9IEZGQUxJR04oc3dmLT5saW5lc2l6ZVtpXSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHAtPnByb3BzLnByb3BlcnRpZXMubGltaXRzLm9wdGltYWxC dWZmZXJDb3B5Um93UGl0Y2hBbGlnbm1lbnQpLAorICAgICAgICAgICAgLmJ1ZmZlckltYWdlSGVp Z2h0ID0gcF9oLAorICAgICAgICAgICAgLmltYWdlU3VicmVzb3VyY2UubGF5ZXJDb3VudCA9IDEs CisgICAgICAgICAgICAuaW1hZ2VFeHRlbnQgPSAoVmtFeHRlbnQzRCl7IHBfdywgcF9oLCAxIH0s CisgICAgICAgICAgICAvKiBSZXN0IG9mIHRoZSBmaWVsZHMgYWRqdXN0ZWQvZmlsbGVkIGluIGxh dGVyICovCisgICAgICAgIH07CisKKyAgICAgICAgYnVmX29mZnNldCArPSBGRkFMSUdOKHBfaCpy ZWdpb25baV0uYnVmZmVyUm93TGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cC0+cHJvcHMucHJvcGVydGllcy5saW1pdHMub3B0aW1hbEJ1ZmZlckNvcHlPZmZzZXRBbGlnbm1l bnQpOworICAgIH0KKworICAgIGVyciA9IGZmX3ZrX2dldF9wb29sZWRfYnVmZmVyKCZwLT52a2N0 eCwgJmZwLT50bXAsIGRzdCwgYnVmX3VzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIE5VTEwsIGJ1Zl9vZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgVktfTUVNT1JZX1BST1BFUlRZX0hPU1RfVklTSUJMRV9CSVQgfAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFZLX01FTU9SWV9QUk9QRVJUWV9IT1NUX0NBQ0hFRF9CSVQpOwor ICAgIGlmIChlcnIgPCAwKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgcmV0dXJuIDA7Cit9 CisKK3N0YXRpYyBpbnQgaG9zdF9tYXBfZnJhbWUoQVZIV0ZyYW1lc0NvbnRleHQgKmh3ZmMsIEFW QnVmZmVyUmVmICoqZHN0LCBpbnQgKm5iX2J1ZnMsCisgICAgICAgICAgICAgICAgICAgICAgICAg IEFWRnJhbWUgKnN3ZiwgVmtCdWZmZXJJbWFnZUNvcHkgKnJlZ2lvbiwgaW50IHVwbG9hZCkKK3sK KyAgICBpbnQgZXJyOworICAgIFZ1bGthbkRldmljZVByaXYgKnAgPSBod2ZjLT5kZXZpY2VfY3R4 LT5od2N0eDsKKworICAgIGludCBuYl9zcmNfYnVmczsKKyAgICBjb25zdCBpbnQgcGxhbmVzID0g YXZfcGl4X2ZtdF9jb3VudF9wbGFuZXMoc3dmLT5mb3JtYXQpOworICAgIFZrQnVmZmVyVXNhZ2VG bGFncyBidWZfdXNhZ2UgPSB1cGxvYWQgPyBWS19CVUZGRVJfVVNBR0VfVFJBTlNGRVJfU1JDX0JJ VCA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZLX0JVRkZF Ul9VU0FHRV9UUkFOU0ZFUl9EU1RfQklUOworCisgICAgLyogV2UgY2FuJ3QgaG9zdCBtYXAgaW1h Z2VzIHdpdGggbmVnYXRpdmUgc3RyaWRlcyAqLworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcGxh bmVzOyBpKyspCisgICAgICAgIGlmIChzd2YtPmxpbmVzaXplW2ldIDwgMCkKKyAgICAgICAgICAg IHJldHVybiBBVkVSUk9SKEVJTlZBTCk7CisKKyAgICAvKiBDb3VudCB0aGUgbnVtYmVyIG9mIGJ1 ZmZlcnMgaW4gdGhlIHNvZnR3YXJlIGZyYW1lICovCisgICAgbmJfc3JjX2J1ZnMgPSAwOworICAg IHdoaWxlIChzd2YtPmJ1ZltuYl9zcmNfYnVmc10pCisgICAgICAgIG5iX3NyY19idWZzKys7CisK KyAgICAvKiBTaW5nbGUgYnVmZmVyIGNvbnRhaW5zIGFsbCBwbGFuZXMgKi8KKyAgICBpZiAobmJf c3JjX2J1ZnMgPT0gMSkgeworICAgICAgICBlcnIgPSBmZl92a19ob3N0X21hcF9idWZmZXIoJnAt PnZrY3R4LCAmZHN0WzBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dm LT5kYXRhWzBdLCBzd2YtPmJ1ZlswXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGJ1Zl91c2FnZSk7CisgICAgICAgIGlmIChlcnIgPCAwKQorICAgICAgICAgICAgcmV0dXJu IGVycjsKKyAgICAgICAgKCpuYl9idWZzKSsrOworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBp IDwgcGxhbmVzOyBpKyspCisgICAgICAgICAgICByZWdpb25baV0uYnVmZmVyT2Zmc2V0ID0gKChG RlZrQnVmZmVyICopZHN0WzBdLT5kYXRhKS0+dmlydHVhbF9vZmZzZXQgKworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHN3Zi0+ZGF0YVtpXSAtIHN3Zi0+ZGF0YVswXTsKKyAg ICB9IGVsc2UgaWYgKG5iX3NyY19idWZzID09IHBsYW5lcykgeyAvKiBPbmUgYnVmZmVyIHBlciBw bGFuZSAqLworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHBsYW5lczsgaSsrKSB7CisgICAg ICAgICAgICBlcnIgPSBmZl92a19ob3N0X21hcF9idWZmZXIoJnAtPnZrY3R4LCAmZHN0W2ldLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3Zi0+ZGF0YVtpXSwgc3dm LT5idWZbaV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmX3Vz YWdlKTsKKyAgICAgICAgICAgIGlmIChlcnIgPCAwKQorICAgICAgICAgICAgICAgIGdvdG8gZmFp bDsKKyAgICAgICAgICAgICgqbmJfYnVmcykrKzsKKworICAgICAgICAgICAgcmVnaW9uW2ldLmJ1 ZmZlck9mZnNldCA9ICgoRkZWa0J1ZmZlciAqKWRzdFtpXS0+ZGF0YSktPnZpcnR1YWxfb2Zmc2V0 OworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgLyogV2VpcmQgbGF5b3V0ICgzIHBs YW5lcywgMiBidWZmZXJzKSwgcGF0Y2ggd2VsY29tZSwgZmFsbGJhY2sgdG8gY29weSAqLworICAg ICAgICByZXR1cm4gQVZFUlJPUl9QQVRDSFdFTENPTUU7CisgICAgfQorCisgICAgcmV0dXJuIDA7 CisKK2ZhaWw6CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAoKm5iX2J1ZnMpOyBpKyspCisgICAg ICAgIGF2X2J1ZmZlcl91bnJlZigmZHN0W2ldKTsKKyAgICByZXR1cm4gZXJyOworfQorCitzdGF0 aWMgaW50IHZ1bGthbl90cmFuc2Zlcl9ob3N0KEFWSFdGcmFtZXNDb250ZXh0ICpod2ZjLCBBVkZy YW1lICpod2YsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFWRnJhbWUgKnN3Ziwg aW50IHVwbG9hZCkKK3sKKyAgICBWdWxrYW5GcmFtZXNQcml2ICpmcCA9IGh3ZmMtPmh3Y3R4Owor ICAgIEFWVnVsa2FuRnJhbWVzQ29udGV4dCAqaHdmY192ayA9ICZmcC0+cDsKKyAgICBWdWxrYW5E ZXZpY2VQcml2ICpwID0gaHdmYy0+ZGV2aWNlX2N0eC0+aHdjdHg7CisgICAgQVZWdWxrYW5EZXZp Y2VDb250ZXh0ICpod2N0eCA9ICZwLT5wOworICAgIEZGVnVsa2FuRnVuY3Rpb25zICp2ayA9ICZw LT52a2N0eC52a2ZuOworCisgICAgQVZWa0ZyYW1lICpod2ZfdmsgPSAoQVZWa0ZyYW1lICopaHdm LT5kYXRhWzBdOworICAgIGNvbnN0IGludCBwbGFuZXMgPSBhdl9waXhfZm10X2NvdW50X3BsYW5l cyhzd2YtPmZvcm1hdCk7CisgICAgY29uc3QgaW50IG5iX2ltYWdlcyA9IGZmX3ZrX2NvdW50X2lt YWdlcyhod2ZfdmspOworCisgICAgVmtTZW1hcGhvcmVXYWl0SW5mbyBzZW1fd2FpdDsKKyAgICBW a0hvc3RJbWFnZUxheW91dFRyYW5zaXRpb25JbmZvRVhUIGxheW91dF9jaF9pbmZvW0FWX05VTV9E QVRBX1BPSU5URVJTXTsKKyAgICBpbnQgbmJfbGF5b3V0X2NoID0gMDsKKworICAgIGh3ZmNfdmst PmxvY2tfZnJhbWUoaHdmYywgaHdmX3ZrKTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmJf aW1hZ2VzOyBpKyspIHsKKyAgICAgICAgaW50IGNvbXBhdCA9IDA7CisgICAgICAgIGZvciAoaW50 IGogPSAwOyBqIDwgcC0+dmtjdHguaG9zdF9pbWFnZV9wcm9wcy5jb3B5U3JjTGF5b3V0Q291bnQ7 IGorKykgeworICAgICAgICAgICAgaWYgKGh3Zl92ay0+bGF5b3V0W2ldID09IHAtPnZrY3R4Lmhv c3RfaW1hZ2VfcHJvcHMucENvcHlTcmNMYXlvdXRzW2pdKSB7CisgICAgICAgICAgICAgICAgY29t cGF0ID0gMTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg fQorICAgICAgICBpZiAoY29tcGF0KQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAg bGF5b3V0X2NoX2luZm9bbmJfbGF5b3V0X2NoXSA9IChWa0hvc3RJbWFnZUxheW91dFRyYW5zaXRp b25JbmZvRVhUKSB7CisgICAgICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9IT1NU X0lNQUdFX0xBWU9VVF9UUkFOU0lUSU9OX0lORk9fRVhULAorICAgICAgICAgICAgLmltYWdlID0g aHdmX3ZrLT5pbWdbaV0sCisgICAgICAgICAgICAub2xkTGF5b3V0ID0gaHdmX3ZrLT5sYXlvdXRb aV0sCisgICAgICAgICAgICAubmV3TGF5b3V0ID0gVktfSU1BR0VfTEFZT1VUX0dFTkVSQUwsCisg ICAgICAgICAgICAuc3VicmVzb3VyY2VSYW5nZSA9IHsKKyAgICAgICAgICAgICAgICAuYXNwZWN0 TWFzayA9IFZLX0lNQUdFX0FTUEVDVF9DT0xPUl9CSVQsCisgICAgICAgICAgICAgICAgLmxldmVs Q291bnQgPSAxLAorICAgICAgICAgICAgICAgIC5sYXllckNvdW50ID0gMSwKKyAgICAgICAgICAg IH0sCisgICAgICAgIH07CisKKyAgICAgICAgaHdmX3ZrLT5sYXlvdXRbaV0gPSBsYXlvdXRfY2hf aW5mb1tuYl9sYXlvdXRfY2hdLm5ld0xheW91dDsKKyAgICAgICAgbmJfbGF5b3V0X2NoKys7Cisg ICAgfQorCisgICAgc2VtX3dhaXQgPSAoVmtTZW1hcGhvcmVXYWl0SW5mbykgeworICAgICAgICAu c1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9TRU1BUEhPUkVfV0FJVF9JTkZPLAorICAgICAgICAu cFNlbWFwaG9yZXMgPSBod2ZfdmstPnNlbSwKKyAgICAgICAgLnBWYWx1ZXMgPSBod2ZfdmstPnNl bV92YWx1ZSwKKyAgICAgICAgLnNlbWFwaG9yZUNvdW50ID0gbmJfaW1hZ2VzLAorICAgIH07CisK KyAgICB2ay0+V2FpdFNlbWFwaG9yZXMoaHdjdHgtPmFjdF9kZXYsICZzZW1fd2FpdCwgVUlOVDY0 X01BWCk7CisKKyAgICBpZiAobmJfbGF5b3V0X2NoKQorICAgICAgICB2ay0+VHJhbnNpdGlvbklt YWdlTGF5b3V0RVhUKGh3Y3R4LT5hY3RfZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIG5iX2xheW91dF9jaCwgbGF5b3V0X2NoX2luZm8pOworCisgICAgaWYgKHVwbG9h ZCkgeworICAgICAgICBWa01lbW9yeVRvSW1hZ2VDb3B5RVhUIHJlZ2lvbl9pbmZvID0geworICAg ICAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfTUVNT1JZX1RPX0lNQUdFX0NPUFlf RVhULAorICAgICAgICAgICAgLmltYWdlU3VicmVzb3VyY2UgPSB7CisgICAgICAgICAgICAgICAg LmxheWVyQ291bnQgPSAxLAorICAgICAgICAgICAgfSwKKyAgICAgICAgfTsKKyAgICAgICAgVmtD b3B5TWVtb3J5VG9JbWFnZUluZm9FWFQgY29weV9pbmZvID0geworICAgICAgICAgICAgLnNUeXBl ID0gVktfU1RSVUNUVVJFX1RZUEVfQ09QWV9NRU1PUllfVE9fSU1BR0VfSU5GT19FWFQsCisgICAg ICAgICAgICAuZmxhZ3MgPSBWS19IT1NUX0lNQUdFX0NPUFlfTUVNQ1BZX0VYVCwKKyAgICAgICAg ICAgIC5yZWdpb25Db3VudCA9IDEsCisgICAgICAgICAgICAucFJlZ2lvbnMgPSAmcmVnaW9uX2lu Zm8sCisgICAgICAgIH07CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcGxhbmVzOyBpKysp IHsKKyAgICAgICAgICAgIGludCBpbWdfaWR4ID0gRkZNSU4oaSwgKG5iX2ltYWdlcyAtIDEpKTsK KyAgICAgICAgICAgIHVpbnQzMl90IHBfdywgcF9oOworICAgICAgICAgICAgZ2V0X3BsYW5lX3do KCZwX3csICZwX2gsIHN3Zi0+Zm9ybWF0LCBzd2YtPndpZHRoLCBzd2YtPmhlaWdodCwgaSk7CisK KyAgICAgICAgICAgIHJlZ2lvbl9pbmZvLnBIb3N0UG9pbnRlciA9IHN3Zi0+ZGF0YVtpXTsKKyAg ICAgICAgICAgIHJlZ2lvbl9pbmZvLmltYWdlU3VicmVzb3VyY2UuYXNwZWN0TWFzayA9IGZmX3Zr X2FzcGVjdF9mbGFnKGh3ZiwgaSk7CisgICAgICAgICAgICByZWdpb25faW5mby5pbWFnZUV4dGVu dCA9IChWa0V4dGVudDNEKXsgcF93LCBwX2gsIDEgfTsKKyAgICAgICAgICAgIGNvcHlfaW5mby5k c3RJbWFnZSA9IGh3Zl92ay0+aW1nW2ltZ19pZHhdOworICAgICAgICAgICAgY29weV9pbmZvLmRz dEltYWdlTGF5b3V0ID0gaHdmX3ZrLT5sYXlvdXRbaW1nX2lkeF07CisKKyAgICAgICAgICAgIHZr LT5Db3B5TWVtb3J5VG9JbWFnZUVYVChod2N0eC0+YWN0X2RldiwgJmNvcHlfaW5mbyk7CisgICAg ICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBWa0ltYWdlVG9NZW1vcnlDb3B5RVhUIHJlZ2lv bl9pbmZvID0geworICAgICAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfTUVNT1JZ X1RPX0lNQUdFX0NPUFlfRVhULAorICAgICAgICAgICAgLmltYWdlU3VicmVzb3VyY2UgPSB7Cisg ICAgICAgICAgICAgICAgLmxheWVyQ291bnQgPSAxLAorICAgICAgICAgICAgfSwKKyAgICAgICAg fTsKKyAgICAgICAgVmtDb3B5SW1hZ2VUb01lbW9yeUluZm9FWFQgY29weV9pbmZvID0geworICAg ICAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfQ09QWV9JTUFHRV9UT19NRU1PUllf SU5GT19FWFQsCisgICAgICAgICAgICAuZmxhZ3MgPSBWS19IT1NUX0lNQUdFX0NPUFlfTUVNQ1BZ X0VYVCwKKyAgICAgICAgICAgIC5yZWdpb25Db3VudCA9IDEsCisgICAgICAgICAgICAucFJlZ2lv bnMgPSAmcmVnaW9uX2luZm8sCisgICAgICAgIH07CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBp IDwgcGxhbmVzOyBpKyspIHsKKyAgICAgICAgICAgIGludCBpbWdfaWR4ID0gRkZNSU4oaSwgKG5i X2ltYWdlcyAtIDEpKTsKKyAgICAgICAgICAgIHVpbnQzMl90IHBfdywgcF9oOworICAgICAgICAg ICAgZ2V0X3BsYW5lX3doKCZwX3csICZwX2gsIHN3Zi0+Zm9ybWF0LCBzd2YtPndpZHRoLCBzd2Yt PmhlaWdodCwgaSk7CisKKyAgICAgICAgICAgIHJlZ2lvbl9pbmZvLnBIb3N0UG9pbnRlciA9IHN3 Zi0+ZGF0YVtpXTsKKyAgICAgICAgICAgIHJlZ2lvbl9pbmZvLmltYWdlU3VicmVzb3VyY2UuYXNw ZWN0TWFzayA9IGZmX3ZrX2FzcGVjdF9mbGFnKGh3ZiwgaSk7CisgICAgICAgICAgICByZWdpb25f aW5mby5pbWFnZUV4dGVudCA9IChWa0V4dGVudDNEKXsgcF93LCBwX2gsIDEgfTsKKyAgICAgICAg ICAgIGNvcHlfaW5mby5zcmNJbWFnZSA9IGh3Zl92ay0+aW1nW2ltZ19pZHhdOworICAgICAgICAg ICAgY29weV9pbmZvLnNyY0ltYWdlTGF5b3V0ID0gaHdmX3ZrLT5sYXlvdXRbaW1nX2lkeF07CisK KyAgICAgICAgICAgIHZrLT5Db3B5SW1hZ2VUb01lbW9yeUVYVChod2N0eC0+YWN0X2RldiwgJmNv cHlfaW5mbyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBod2ZjX3ZrLT51bmxvY2tfZnJhbWUo aHdmYywgaHdmX3ZrKTsKKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZ1bGthbl90 cmFuc2Zlcl9mcmFtZShBVkhXRnJhbWVzQ29udGV4dCAqaHdmYywKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEFWRnJhbWUgKnN3ZiwgQVZGcmFtZSAqaHdmLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaW50IHVwbG9hZCkKK3sKKyAgICBpbnQgZXJyOworICAgIFZ1 bGthbkZyYW1lc1ByaXYgKmZwID0gaHdmYy0+aHdjdHg7CisgICAgQVZWdWxrYW5GcmFtZXNDb250 ZXh0ICpod2N0eCA9ICZmcC0+cDsKKyAgICBWdWxrYW5EZXZpY2VQcml2ICpwID0gaHdmYy0+ZGV2 aWNlX2N0eC0+aHdjdHg7CisgICAgRkZWdWxrYW5GdW5jdGlvbnMgKnZrID0gJnAtPnZrY3R4LnZr Zm47CisKKyAgICBpbnQgaG9zdF9tYXBwZWQgPSAwOworCisgICAgQVZWa0ZyYW1lICpod2Zfdmsg PSAoQVZWa0ZyYW1lICopaHdmLT5kYXRhWzBdOworICAgIFZrQnVmZmVySW1hZ2VDb3B5IHJlZ2lv bltBVl9OVU1fREFUQV9QT0lOVEVSU107IC8vIGFsd2F5cyBvbmUgcGVyIHBsYW5lCisKKyAgICBj b25zdCBpbnQgcGxhbmVzID0gYXZfcGl4X2ZtdF9jb3VudF9wbGFuZXMoc3dmLT5mb3JtYXQpOwor ICAgIGNvbnN0IEFWUGl4Rm10RGVzY3JpcHRvciAqZGVzYyA9IGF2X3BpeF9mbXRfZGVzY19nZXQo c3dmLT5mb3JtYXQpOworICAgIGNvbnN0IGludCBuYl9pbWFnZXMgPSBmZl92a19jb3VudF9pbWFn ZXMoaHdmX3ZrKTsKKworICAgIFZrSW1hZ2VNZW1vcnlCYXJyaWVyMiBpbWdfYmFyW0FWX05VTV9E QVRBX1BPSU5URVJTXTsKKyAgICBpbnQgbmJfaW1nX2JhciA9IDA7CisKKyAgICBBVkJ1ZmZlclJl ZiAqYnVmc1tBVl9OVU1fREFUQV9QT0lOVEVSU107CisgICAgaW50IG5iX2J1ZnMgPSAwOworCisg ICAgVmtDb21tYW5kQnVmZmVyIGNtZF9idWY7CisgICAgRkZWa0V4ZWNDb250ZXh0ICpleGVjOwor CisgICAgLyogU2FuaXR5IGNoZWNraW5nICovCisgICAgaWYgKChzd2YtPmZvcm1hdCAhPSBBVl9Q SVhfRk1UX05PTkUgJiYgIWF2X3ZrZm10X2Zyb21fcGl4Zm10KHN3Zi0+Zm9ybWF0KSkpIHsKKyAg ICAgICAgYXZfbG9nKGh3ZmMsIEFWX0xPR19FUlJPUiwgIlVuc3VwcG9ydGVkIHNvZnR3YXJlIGZy YW1lIHBpeGVsIGZvcm1hdCFcbiIpOworICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOwor ICAgIH0KKworICAgIGlmIChzd2YtPndpZHRoID4gaHdmYy0+d2lkdGggfHwgc3dmLT5oZWlnaHQg PiBod2ZjLT5oZWlnaHQpCisgICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7CisKKyAgICBp ZiAoaHdjdHgtPnVzYWdlICYgVktfSU1BR0VfVVNBR0VfSE9TVF9UUkFOU0ZFUl9CSVRfRVhUKQor ICAgICAgICByZXR1cm4gdnVsa2FuX3RyYW5zZmVyX2hvc3QoaHdmYywgaHdmLCBzd2YsIHVwbG9h ZCk7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGF2X3BpeF9mbXRfY291bnRfcGxhbmVzKHN3 Zi0+Zm9ybWF0KTsgaSsrKSB7CisgICAgICAgIHVpbnQzMl90IHBfdywgcF9oOworICAgICAgICBn ZXRfcGxhbmVfd2goJnBfdywgJnBfaCwgc3dmLT5mb3JtYXQsIHN3Zi0+d2lkdGgsIHN3Zi0+aGVp Z2h0LCBpKTsKKworICAgICAgICAvKiBCdWZmZXIgcmVnaW9uIGZvciB0aGlzIHBsYW5lICovCisg ICAgICAgIHJlZ2lvbltpXSA9IChWa0J1ZmZlckltYWdlQ29weSkgeworICAgICAgICAgICAgLmJ1 ZmZlck9mZnNldCA9IDAsCisgICAgICAgICAgICAuYnVmZmVyUm93TGVuZ3RoID0gc3dmLT5saW5l c2l6ZVtpXSwKKyAgICAgICAgICAgIC5idWZmZXJJbWFnZUhlaWdodCA9IHBfaCwKKyAgICAgICAg ICAgIC5pbWFnZVN1YnJlc291cmNlLmxheWVyQ291bnQgPSAxLAorICAgICAgICAgICAgLmltYWdl RXh0ZW50ID0gKFZrRXh0ZW50M0QpeyBwX3csIHBfaCwgMSB9LAorICAgICAgICAgICAgLyogUmVz dCBvZiB0aGUgZmllbGRzIGFkanVzdGVkL2ZpbGxlZCBpbiBsYXRlciAqLworICAgICAgICB9Owor ICAgIH0KKworICAgIC8qIFNldHVwIGJ1ZmZlcnMgZmlyc3QgKi8KKyAgICBpZiAocC0+dmtjdHgu ZXh0ZW5zaW9ucyAmIEZGX1ZLX0VYVF9FWFRFUk5BTF9IT1NUX01FTU9SWSAmJiAhcC0+YXZvaWRf aG9zdF9pbXBvcnQpIHsKKyAgICAgICAgZXJyID0gaG9zdF9tYXBfZnJhbWUoaHdmYywgYnVmcywg Jm5iX2J1ZnMsIHN3ZiwgcmVnaW9uLCB1cGxvYWQpOworICAgICAgICBpZiAoZXJyID49IDApCisg ICAgICAgICAgICBob3N0X21hcHBlZCA9IDE7CisgICAgfQorCisgICAgaWYgKCFob3N0X21hcHBl ZCkgeworICAgICAgICBlcnIgPSBnZXRfcGxhbmVfYnVmKGh3ZmMsICZidWZzWzBdLCBzd2YsIHJl Z2lvbiwgdXBsb2FkKTsKKyAgICAgICAgaWYgKGVyciA8IDApCisgICAgICAgICAgICBnb3RvIGVu ZDsKKyAgICAgICAgbmJfYnVmcyA9IDE7CisKKyAgICAgICAgaWYgKHVwbG9hZCkgeworICAgICAg ICAgICAgZXJyID0gY29weV9idWZmZXJfZGF0YShod2ZjLCBidWZzWzBdLCBzd2YsIHJlZ2lvbiwg cGxhbmVzLCAxKTsKKyAgICAgICAgICAgIGlmIChlcnIgPCAwKQorICAgICAgICAgICAgICAgIGdv dG8gZW5kOworICAgICAgICB9CisgICAgfQorCisgICAgZXhlYyA9IGZmX3ZrX2V4ZWNfZ2V0KCZw LT52a2N0eCwgJmZwLT51cGxvYWRfZXhlYyk7CisgICAgY21kX2J1ZiA9IGV4ZWMtPmJ1ZjsKKwor ICAgIGZmX3ZrX2V4ZWNfc3RhcnQoJnAtPnZrY3R4LCBleGVjKTsKKworICAgIC8qIFByZXAgZGVz dGluYXRpb24gVnVsa2FuIGZyYW1lICovCisgICAgZXJyID0gZmZfdmtfZXhlY19hZGRfZGVwX2Zy YW1lKCZwLT52a2N0eCwgZXhlYywgaHdmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBWS19QSVBFTElORV9TVEFHRV8yX0FMTF9DT01NQU5EU19CSVQsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFZLX1BJUEVMSU5FX1NUQUdFXzJfVFJBTlNGRVJfQklUKTsK KyAgICBpZiAoZXJyIDwgMCkKKyAgICAgICAgZ290byBlbmQ7CisKKyAgICAvKiBObyBuZWVkIHRv IGRlY2xhcmUgYnVmIGRlcHMgZm9yIHN5bmNocm9ub3VzIHRyYW5zZmVycyAoZG93bmxvYWRzKSAq LworICAgIGlmICh1cGxvYWQpIHsKKyAgICAgICAgLyogQWRkIHRoZSBzb2Z0d2FyZSBmcmFtZSBi YWNraW5nIHRoZSBidWZmZXJzIGlmIHdlJ3JlIGhvc3QgbWFwcGluZyAqLworICAgICAgICBpZiAo aG9zdF9tYXBwZWQpIHsKKyAgICAgICAgICAgIGVyciA9IGZmX3ZrX2V4ZWNfYWRkX2RlcF9zd19m cmFtZSgmcC0+dmtjdHgsIGV4ZWMsIHN3Zik7CisgICAgICAgICAgICBpZiAoZXJyIDwgMCkgewor ICAgICAgICAgICAgICAgIGZmX3ZrX2V4ZWNfZGlzY2FyZF9kZXBzKCZwLT52a2N0eCwgZXhlYyk7 CisgICAgICAgICAgICAgICAgZ290byBlbmQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwor ICAgICAgICAvKiBBZGQgdGhlIGJ1ZmZlcnMgYXMgYSBkZXBlbmRlbmN5ICovCisgICAgICAgIGVy ciA9IGZmX3ZrX2V4ZWNfYWRkX2RlcF9idWYoJnAtPnZrY3R4LCBleGVjLCBidWZzLCBuYl9idWZz LCAxKTsKKyAgICAgICAgaWYgKGVyciA8IDApIHsKKyAgICAgICAgICAgIGZmX3ZrX2V4ZWNfZGlz Y2FyZF9kZXBzKCZwLT52a2N0eCwgZXhlYyk7CisgICAgICAgICAgICBnb3RvIGVuZDsKKyAgICAg ICAgfQorICAgIH0KKworICAgIGZmX3ZrX2ZyYW1lX2JhcnJpZXIoJnAtPnZrY3R4LCBleGVjLCBo d2YsIGltZ19iYXIsICZuYl9pbWdfYmFyLAorICAgICAgICAgICAgICAgICAgICAgICAgVktfUElQ RUxJTkVfU1RBR0VfMl9BTExfQ09NTUFORFNfQklULAorICAgICAgICAgICAgICAgICAgICAgICAg VktfUElQRUxJTkVfU1RBR0VfMl9UUkFOU0ZFUl9CSVRfS0hSLAorICAgICAgICAgICAgICAgICAg ICAgICAgdXBsb2FkID8gVktfQUNDRVNTX1RSQU5TRkVSX1dSSVRFX0JJVCA6CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBWS19BQ0NFU1NfVFJBTlNGRVJfUkVBRF9CSVQsCisgICAg ICAgICAgICAgICAgICAgICAgICB1cGxvYWQgPyBWS19JTUFHRV9MQVlPVVRfVFJBTlNGRVJfRFNU X09QVElNQUwgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfSU1BR0VfTEFZ T1VUX1RSQU5TRkVSX1NSQ19PUFRJTUFMLAorICAgICAgICAgICAgICAgICAgICAgICAgcC0+bmJf aW1nX3FmcyA+IDEgPyBWS19RVUVVRV9GQU1JTFlfSUdOT1JFRCA6IHAtPmltZ19xZnNbMF0pOwor CisgICAgdmstPkNtZFBpcGVsaW5lQmFycmllcjIoY21kX2J1ZiwgJihWa0RlcGVuZGVuY3lJbmZv KSB7CisgICAgICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9ERVBFTkRFTkNZX0lO Rk8sCisgICAgICAgICAgICAucEltYWdlTWVtb3J5QmFycmllcnMgPSBpbWdfYmFyLAorICAgICAg ICAgICAgLmltYWdlTWVtb3J5QmFycmllckNvdW50ID0gbmJfaW1nX2JhciwKKyAgICB9KTsKKwor ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcGxhbmVzOyBpKyspIHsKKyAgICAgICAgaW50IGJ1Zl9p ZHggPSBGRk1JTihpLCAobmJfYnVmcyAtIDEpKTsKKyAgICAgICAgaW50IGltZ19pZHggPSBGRk1J TihpLCAobmJfaW1hZ2VzIC0gMSkpOworICAgICAgICBGRlZrQnVmZmVyICp2a2J1ZiA9IChGRlZr QnVmZmVyICopYnVmc1tidWZfaWR4XS0+ZGF0YTsKKworICAgICAgICB1aW50MzJfdCBvcmlnX3N0 cmlkZSA9IHJlZ2lvbltpXS5idWZmZXJSb3dMZW5ndGg7CisgICAgICAgIHJlZ2lvbltpXS5idWZm ZXJSb3dMZW5ndGggLz0gZGVzYy0+Y29tcFtpXS5zdGVwOworICAgICAgICByZWdpb25baV0uaW1h Z2VTdWJyZXNvdXJjZS5hc3BlY3RNYXNrID0gZmZfdmtfYXNwZWN0X2ZsYWcoaHdmLCBpKTsKKwor ICAgICAgICBpZiAodXBsb2FkKQorICAgICAgICAgICAgdmstPkNtZENvcHlCdWZmZXJUb0ltYWdl KGNtZF9idWYsIHZrYnVmLT5idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaHdmX3ZrLT5pbWdbaW1nX2lkeF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaW1nX2JhcltpbWdfaWR4XS5uZXdMYXlvdXQsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgMSwgJnJlZ2lvbltpXSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg IHZrLT5DbWRDb3B5SW1hZ2VUb0J1ZmZlcihjbWRfYnVmLCBod2ZfdmstPmltZ1tpbWdfaWR4XSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWdfYmFyW2ltZ19pZHhdLm5l d0xheW91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2a2J1Zi0+YnVm LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsICZyZWdpb25baV0pOwor CisgICAgICAgIHJlZ2lvbltpXS5idWZmZXJSb3dMZW5ndGggPSBvcmlnX3N0cmlkZTsKKyAgICB9 CisKKyAgICBlcnIgPSBmZl92a19leGVjX3N1Ym1pdCgmcC0+dmtjdHgsIGV4ZWMpOworICAgIGlm IChlcnIgPCAwKSB7CisgICAgICAgIGZmX3ZrX2V4ZWNfZGlzY2FyZF9kZXBzKCZwLT52a2N0eCwg ZXhlYyk7CisgICAgfSBlbHNlIGlmICghdXBsb2FkKSB7CisgICAgICAgIGZmX3ZrX2V4ZWNfd2Fp dCgmcC0+dmtjdHgsIGV4ZWMpOworICAgICAgICBpZiAoIWhvc3RfbWFwcGVkKQorICAgICAgICAg ICAgZXJyID0gY29weV9idWZmZXJfZGF0YShod2ZjLCBidWZzWzBdLCBzd2YsIHJlZ2lvbiwgcGxh bmVzLCAwKTsKKyAgICB9CisKK2VuZDoKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG5iX2J1ZnM7 IGkrKykKKyAgICAgICAgYXZfYnVmZmVyX3VucmVmKCZidWZzW2ldKTsKKworICAgIHJldHVybiBl cnI7Cit9CisKK3N0YXRpYyBpbnQgdnVsa2FuX3RyYW5zZmVyX2RhdGFfdG8oQVZIV0ZyYW1lc0Nv bnRleHQgKmh3ZmMsIEFWRnJhbWUgKmRzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgQVZGcmFtZSAqc3JjKQoreworICAgIGF2X3VudXNlZCBWdWxrYW5EZXZpY2VQ cml2ICpwID0gaHdmYy0+ZGV2aWNlX2N0eC0+aHdjdHg7CisKKyAgICBzd2l0Y2ggKHNyYy0+Zm9y bWF0KSB7CisjaWYgQ09ORklHX0NVREEKKyAgICBjYXNlIEFWX1BJWF9GTVRfQ1VEQToKKyNpZmRl ZiBfV0lOMzIKKyAgICAgICAgaWYgKChwLT52a2N0eC5leHRlbnNpb25zICYgRkZfVktfRVhUX0VY VEVSTkFMX1dJTjMyX01FTU9SWSkgJiYKKyAgICAgICAgICAgIChwLT52a2N0eC5leHRlbnNpb25z ICYgRkZfVktfRVhUX0VYVEVSTkFMX1dJTjMyX1NFTSkpCisjZWxzZQorICAgICAgICBpZiAoKHAt PnZrY3R4LmV4dGVuc2lvbnMgJiBGRl9WS19FWFRfRVhURVJOQUxfRkRfTUVNT1JZKSAmJgorICAg ICAgICAgICAgKHAtPnZrY3R4LmV4dGVuc2lvbnMgJiBGRl9WS19FWFRfRVhURVJOQUxfRkRfU0VN KSkKKyNlbmRpZgorICAgICAgICAgICAgcmV0dXJuIHZ1bGthbl90cmFuc2Zlcl9kYXRhX2Zyb21f Y3VkYShod2ZjLCBkc3QsIHNyYyk7CisjZW5kaWYKKyAgICBkZWZhdWx0OgorICAgICAgICBpZiAo c3JjLT5od19mcmFtZXNfY3R4KQorICAgICAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PU1lTKTsK KyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIHZ1bGthbl90cmFuc2Zlcl9mcmFtZSho d2ZjLCAoQVZGcmFtZSAqKXNyYywgZHN0LCAxKTsKKyAgICB9Cit9CisKKyNpZiBDT05GSUdfQ1VE QQorc3RhdGljIGludCB2dWxrYW5fdHJhbnNmZXJfZGF0YV90b19jdWRhKEFWSFdGcmFtZXNDb250 ZXh0ICpod2ZjLCBBVkZyYW1lICpkc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgQVZGcmFtZSAqc3JjKQoreworICAgIGludCBlcnI7CisgICAgQ1Vjb250 ZXh0IGR1bW15OworICAgIEFWVmtGcmFtZSAqZHN0X2Y7CisgICAgQVZWa0ZyYW1lSW50ZXJuYWwg KmRzdF9pbnQ7CisgICAgVnVsa2FuRnJhbWVzUHJpdiAqZnAgPSBod2ZjLT5od2N0eDsKKyAgICBj b25zdCBpbnQgcGxhbmVzID0gYXZfcGl4X2ZtdF9jb3VudF9wbGFuZXMoaHdmYy0+c3dfZm9ybWF0 KTsKKyAgICBjb25zdCBBVlBpeEZtdERlc2NyaXB0b3IgKmRlc2MgPSBhdl9waXhfZm10X2Rlc2Nf Z2V0KGh3ZmMtPnN3X2Zvcm1hdCk7CisgICAgaW50IG5iX2ltYWdlczsKKworICAgIEFWSFdGcmFt ZXNDb250ZXh0ICpjdWRhX2ZjID0gKEFWSFdGcmFtZXNDb250ZXh0Kilkc3QtPmh3X2ZyYW1lc19j dHgtPmRhdGE7CisgICAgQVZIV0RldmljZUNvbnRleHQgKmN1ZGFfY3UgPSBjdWRhX2ZjLT5kZXZp Y2VfY3R4OworICAgIEFWQ1VEQURldmljZUNvbnRleHQgKmN1ZGFfZGV2ID0gY3VkYV9jdS0+aHdj dHg7CisgICAgQVZDVURBRGV2aWNlQ29udGV4dEludGVybmFsICpjdV9pbnRlcm5hbCA9IGN1ZGFf ZGV2LT5pbnRlcm5hbDsKKyAgICBDdWRhRnVuY3Rpb25zICpjdSA9IGN1X2ludGVybmFsLT5jdWRh X2RsOworICAgIENVREFfRVhURVJOQUxfU0VNQVBIT1JFX1dBSVRfUEFSQU1TIHNfd19wYXJbQVZf TlVNX0RBVEFfUE9JTlRFUlNdID0geyAwIH07CisgICAgQ1VEQV9FWFRFUk5BTF9TRU1BUEhPUkVf U0lHTkFMX1BBUkFNUyBzX3NfcGFyW0FWX05VTV9EQVRBX1BPSU5URVJTXSA9IHsgMCB9OworCisg ICAgZHN0X2YgPSAoQVZWa0ZyYW1lICopc3JjLT5kYXRhWzBdOworICAgIG5iX2ltYWdlcyA9IGZm X3ZrX2NvdW50X2ltYWdlcyhkc3RfZik7CisKKyAgICBlcnIgPSBwcmVwYXJlX2ZyYW1lKGh3ZmMs ICZmcC0+dXBsb2FkX2V4ZWMsIGRzdF9mLCBQUkVQX01PREVfRVhURVJOQUxfRVhQT1JUKTsKKyAg ICBpZiAoZXJyIDwgMCkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIGVyciA9IENIRUNLX0NV KGN1LT5jdUN0eFB1c2hDdXJyZW50KGN1ZGFfZGV2LT5jdWRhX2N0eCkpOworICAgIGlmIChlcnIg PCAwKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgZXJyID0gdnVsa2FuX2V4cG9ydF90b19j dWRhKGh3ZmMsIGRzdC0+aHdfZnJhbWVzX2N0eCwgc3JjKTsKKyAgICBpZiAoZXJyIDwgMCkgewor ICAgICAgICBDSEVDS19DVShjdS0+Y3VDdHhQb3BDdXJyZW50KCZkdW1teSkpOworICAgICAgICBy ZXR1cm4gZXJyOworICAgIH0KKworICAgIGRzdF9pbnQgPSBkc3RfZi0+aW50ZXJuYWw7CisKKyAg ICBmb3IgKGludCBpID0gMDsgaSA8IHBsYW5lczsgaSsrKSB7CisgICAgICAgIHNfd19wYXJbaV0u cGFyYW1zLmZlbmNlLnZhbHVlID0gZHN0X2YtPnNlbV92YWx1ZVtpXSArIDA7CisgICAgICAgIHNf c19wYXJbaV0ucGFyYW1zLmZlbmNlLnZhbHVlID0gZHN0X2YtPnNlbV92YWx1ZVtpXSArIDE7Cisg ICAgfQorCisgICAgZXJyID0gQ0hFQ0tfQ1UoY3UtPmN1V2FpdEV4dGVybmFsU2VtYXBob3Jlc0Fz eW5jKGRzdF9pbnQtPmN1X3NlbSwgc193X3BhciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbmJfaW1hZ2VzLCBjdWRhX2Rldi0+c3RyZWFtKSk7 CisgICAgaWYgKGVyciA8IDApCisgICAgICAgIGdvdG8gZmFpbDsKKworICAgIGZvciAoaW50IGkg PSAwOyBpIDwgcGxhbmVzOyBpKyspIHsKKyAgICAgICAgQ1VEQV9NRU1DUFkyRCBjcHkgPSB7Cisg ICAgICAgICAgICAuZHN0TWVtb3J5VHlwZSA9IENVX01FTU9SWVRZUEVfREVWSUNFLAorICAgICAg ICAgICAgLmRzdERldmljZSAgICAgPSAoQ1VkZXZpY2VwdHIpZHN0LT5kYXRhW2ldLAorICAgICAg ICAgICAgLmRzdFBpdGNoICAgICAgPSBkc3QtPmxpbmVzaXplW2ldLAorICAgICAgICAgICAgLmRz dFkgICAgICAgICAgPSAwLAorCisgICAgICAgICAgICAuc3JjTWVtb3J5VHlwZSA9IENVX01FTU9S WVRZUEVfQVJSQVksCisgICAgICAgICAgICAuc3JjQXJyYXkgICAgICA9IGRzdF9pbnQtPmN1X2Fy cmF5W2ldLAorICAgICAgICB9OworCisgICAgICAgIGludCB3LCBoOworICAgICAgICBnZXRfcGxh bmVfd2goJncsICZoLCBod2ZjLT5zd19mb3JtYXQsIGh3ZmMtPndpZHRoLCBod2ZjLT5oZWlnaHQs IGkpOworCisgICAgICAgIGNweS5XaWR0aEluQnl0ZXMgPSB3ICogZGVzYy0+Y29tcFtpXS5zdGVw OworICAgICAgICBjcHkuSGVpZ2h0ID0gaDsKKworICAgICAgICBlcnIgPSBDSEVDS19DVShjdS0+ Y3VNZW1jcHkyREFzeW5jKCZjcHksIGN1ZGFfZGV2LT5zdHJlYW0pKTsKKyAgICAgICAgaWYgKGVy ciA8IDApCisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgZXJyID0gQ0hFQ0tf Q1UoY3UtPmN1U2lnbmFsRXh0ZXJuYWxTZW1hcGhvcmVzQXN5bmMoZHN0X2ludC0+Y3Vfc2VtLCBz X3NfcGFyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIG5iX2ltYWdlcywgY3VkYV9kZXYtPnN0cmVhbSkpOworICAgIGlmIChlcnIgPCAwKQor ICAgICAgICBnb3RvIGZhaWw7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHBsYW5lczsgaSsr KQorICAgICAgICBkc3RfZi0+c2VtX3ZhbHVlW2ldKys7CisKKyAgICBDSEVDS19DVShjdS0+Y3VD dHhQb3BDdXJyZW50KCZkdW1teSkpOworCisgICAgYXZfbG9nKGh3ZmMsIEFWX0xPR19WRVJCT1NF LCAiVHJhbnNmZXJyZWQgVnVsa2FuIGltYWdlIHRvIENVREEhXG4iKTsKKworICAgIHJldHVybiBw cmVwYXJlX2ZyYW1lKGh3ZmMsICZmcC0+dXBsb2FkX2V4ZWMsIGRzdF9mLCBQUkVQX01PREVfRVhU RVJOQUxfSU1QT1JUKTsKKworZmFpbDoKKyAgICBDSEVDS19DVShjdS0+Y3VDdHhQb3BDdXJyZW50 KCZkdW1teSkpOworICAgIHZ1bGthbl9mcmVlX2ludGVybmFsKGRzdF9mKTsKKyAgICBhdl9idWZm ZXJfdW5yZWYoJmRzdC0+YnVmWzBdKTsKKyAgICByZXR1cm4gZXJyOworfQorI2VuZGlmCisKK3N0 YXRpYyBpbnQgdnVsa2FuX3RyYW5zZmVyX2RhdGFfZnJvbShBVkhXRnJhbWVzQ29udGV4dCAqaHdm YywgQVZGcmFtZSAqZHN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IEFWRnJhbWUgKnNyYykKK3sKKyAgICBhdl91bnVzZWQgVnVsa2FuRGV2aWNlUHJpdiAqcCA9 IGh3ZmMtPmRldmljZV9jdHgtPmh3Y3R4OworCisgICAgc3dpdGNoIChkc3QtPmZvcm1hdCkgewor I2lmIENPTkZJR19DVURBCisgICAgY2FzZSBBVl9QSVhfRk1UX0NVREE6CisjaWZkZWYgX1dJTjMy CisgICAgICAgIGlmICgocC0+dmtjdHguZXh0ZW5zaW9ucyAmIEZGX1ZLX0VYVF9FWFRFUk5BTF9X SU4zMl9NRU1PUlkpICYmCisgICAgICAgICAgICAocC0+dmtjdHguZXh0ZW5zaW9ucyAmIEZGX1ZL X0VYVF9FWFRFUk5BTF9XSU4zMl9TRU0pKQorI2Vsc2UKKyAgICAgICAgaWYgKChwLT52a2N0eC5l eHRlbnNpb25zICYgRkZfVktfRVhUX0VYVEVSTkFMX0ZEX01FTU9SWSkgJiYKKyAgICAgICAgICAg IChwLT52a2N0eC5leHRlbnNpb25zICYgRkZfVktfRVhUX0VYVEVSTkFMX0ZEX1NFTSkpCisjZW5k aWYKKyAgICAgICAgICAgIHJldHVybiB2dWxrYW5fdHJhbnNmZXJfZGF0YV90b19jdWRhKGh3ZmMs IGRzdCwgc3JjKTsKKyNlbmRpZgorICAgIGRlZmF1bHQ6CisgICAgICAgIGlmIChkc3QtPmh3X2Zy YW1lc19jdHgpCisgICAgICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9TWVMpOworICAgICAgICBl bHNlCisgICAgICAgICAgICByZXR1cm4gdnVsa2FuX3RyYW5zZmVyX2ZyYW1lKGh3ZmMsIGRzdCwg KEFWRnJhbWUgKilzcmMsIDApOworICAgIH0KK30KKworc3RhdGljIGludCB2dWxrYW5fZnJhbWVz X2Rlcml2ZV90byhBVkhXRnJhbWVzQ29udGV4dCAqZHN0X2ZjLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBBVkhXRnJhbWVzQ29udGV4dCAqc3JjX2ZjLCBpbnQgZmxhZ3MpCit7 CisgICAgcmV0dXJuIHZ1bGthbl9mcmFtZXNfaW5pdChkc3RfZmMpOworfQorCitBVlZrRnJhbWUg KmF2X3ZrX2ZyYW1lX2FsbG9jKHZvaWQpCit7CisgICAgaW50IGVycjsKKyAgICBBVlZrRnJhbWUg KmYgPSBhdl9tYWxsb2N6KHNpemVvZihBVlZrRnJhbWUpKTsKKyAgICBpZiAoIWYpCisgICAgICAg IHJldHVybiBOVUxMOworCisgICAgZi0+aW50ZXJuYWwgPSBhdl9tYWxsb2N6KHNpemVvZigqZi0+ aW50ZXJuYWwpKTsKKyAgICBpZiAoIWYtPmludGVybmFsKSB7CisgICAgICAgIGF2X2ZyZWUoZik7 CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGVyciA9IHB0aHJlYWRfbXV0ZXhf aW5pdCgmZi0+aW50ZXJuYWwtPnVwZGF0ZV9tdXRleCwgTlVMTCk7CisgICAgaWYgKGVyciAhPSAw KSB7CisgICAgICAgIGF2X2ZyZWUoZi0+aW50ZXJuYWwpOworICAgICAgICBhdl9mcmVlKGYpOwor ICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICByZXR1cm4gZjsKK30KKworY29uc3Qg SFdDb250ZXh0VHlwZSBmZl9od2NvbnRleHRfdHlwZV92dWxrYW4gPSB7CisgICAgLnR5cGUgICAg ICAgICAgICAgICAgICAgPSBBVl9IV0RFVklDRV9UWVBFX1ZVTEtBTiwKKyAgICAubmFtZSAgICAg ICAgICAgICAgICAgICA9ICJWdWxrYW4iLAorCisgICAgLmRldmljZV9od2N0eF9zaXplICAgICAg PSBzaXplb2YoVnVsa2FuRGV2aWNlUHJpdiksCisgICAgLmZyYW1lc19od2N0eF9zaXplICAgICAg PSBzaXplb2YoVnVsa2FuRnJhbWVzUHJpdiksCisKKyAgICAuZGV2aWNlX2luaXQgICAgICAgICAg ICA9ICZ2dWxrYW5fZGV2aWNlX2luaXQsCisgICAgLmRldmljZV91bmluaXQgICAgICAgICAgPSAm dnVsa2FuX2RldmljZV91bmluaXQsCisgICAgLmRldmljZV9jcmVhdGUgICAgICAgICAgPSAmdnVs a2FuX2RldmljZV9jcmVhdGUsCisgICAgLmRldmljZV9kZXJpdmUgICAgICAgICAgPSAmdnVsa2Fu X2RldmljZV9kZXJpdmUsCisKKyAgICAuZnJhbWVzX2dldF9jb25zdHJhaW50cyA9ICZ2dWxrYW5f ZnJhbWVzX2dldF9jb25zdHJhaW50cywKKyAgICAuZnJhbWVzX2luaXQgICAgICAgICAgICA9IHZ1 bGthbl9mcmFtZXNfaW5pdCwKKyAgICAuZnJhbWVzX2dldF9idWZmZXIgICAgICA9IHZ1bGthbl9n ZXRfYnVmZmVyLAorICAgIC5mcmFtZXNfdW5pbml0ICAgICAgICAgID0gdnVsa2FuX2ZyYW1lc191 bmluaXQsCisKKyAgICAudHJhbnNmZXJfZ2V0X2Zvcm1hdHMgICA9IHZ1bGthbl90cmFuc2Zlcl9n ZXRfZm9ybWF0cywKKyAgICAudHJhbnNmZXJfZGF0YV90byAgICAgICA9IHZ1bGthbl90cmFuc2Zl cl9kYXRhX3RvLAorICAgIC50cmFuc2Zlcl9kYXRhX2Zyb20gICAgID0gdnVsa2FuX3RyYW5zZmVy X2RhdGFfZnJvbSwKKworICAgIC5tYXBfdG8gICAgICAgICAgICAgICAgID0gdnVsa2FuX21hcF90 bywKKyAgICAubWFwX2Zyb20gICAgICAgICAgICAgICA9IHZ1bGthbl9tYXBfZnJvbSwKKyAgICAu ZnJhbWVzX2Rlcml2ZV90byAgICAgICA9ICZ2dWxrYW5fZnJhbWVzX2Rlcml2ZV90bywKKworICAg IC5waXhfZm10cyA9IChjb25zdCBlbnVtIEFWUGl4ZWxGb3JtYXQgW10pIHsKKyAgICAgICAgQVZf UElYX0ZNVF9WVUxLQU4sCisgICAgICAgIEFWX1BJWF9GTVRfTk9ORQorICAgIH0sCit9OwotLSAK Mi40OS4xCgoKRnJvbSBhYzFjOTg4MzcxZTU5YTY1NTUxYzUwNjgyOWJjYjgxMDdkZDBlZjhhIE1v biBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBKYW1haWthMSA8bHVrYXN6Y3oxOEB3cC5wbD4K RGF0ZTogV2VkLCAzIFNlcCAyMDI1IDEzOjE1OjU0ICswMDAwClN1YmplY3Q6IFtQQVRDSCAwNDEv MTE4XSBDaGFuZ2luZyB2dWxrYW4gZmlsZSBkaXJlY3RvcnkKCi0tLQogbGliYXZ1dGlsL2h3Y29u dGV4dF92dWxrYW4uaCB8IDM3NyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQog MSBmaWxlIGNoYW5nZWQsIDM3NyBkZWxldGlvbnMoLSkKIGRlbGV0ZSBtb2RlIDEwMDY0NCBsaWJh dnV0aWwvaHdjb250ZXh0X3Z1bGthbi5oCgpkaWZmIC0tZ2l0IGEvbGliYXZ1dGlsL2h3Y29udGV4 dF92dWxrYW4uaCBiL2xpYmF2dXRpbC9od2NvbnRleHRfdnVsa2FuLmgKZGVsZXRlZCBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDE1Y2Y1MTU2NjguLjAwMDAwMDAwMDAKLS0tIGEvbGliYXZ1dGlsL2h3 Y29udGV4dF92dWxrYW4uaAorKysgL2Rldi9udWxsCkBAIC0xLDM3NyArMCwwIEBACi0vKgotICog VGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgotICoKLSAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3 YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0 aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMg cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVy c2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl cnNpb24uCi0gKgotICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg d2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZl IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGlj ZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2Fy ZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwg Qm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQotICovCi0KLSNpZm5kZWYgQVZVVElMX0hXQ09OVEVY VF9WVUxLQU5fSAotI2RlZmluZSBBVlVUSUxfSFdDT05URVhUX1ZVTEtBTl9ICi0KLSNpZiBkZWZp bmVkKF9XSU4zMikgJiYgIWRlZmluZWQoVktfVVNFX1BMQVRGT1JNX1dJTjMyX0tIUikKLSNkZWZp bmUgVktfVVNFX1BMQVRGT1JNX1dJTjMyX0tIUgotI2VuZGlmCi0jaW5jbHVkZSA8dnVsa2FuL3Z1 bGthbi5oPgotCi0jaW5jbHVkZSAicGl4Zm10LmgiCi0jaW5jbHVkZSAiZnJhbWUuaCIKLSNpbmNs dWRlICJod2NvbnRleHQuaCIKLQotdHlwZWRlZiBzdHJ1Y3QgQVZWa0ZyYW1lIEFWVmtGcmFtZTsK LQotdHlwZWRlZiBzdHJ1Y3QgQVZWdWxrYW5EZXZpY2VRdWV1ZUZhbWlseSB7Ci0gICAgLyogUXVl dWUgZmFtaWx5IGluZGV4ICovCi0gICAgaW50IGlkeDsKLSAgICAvKiBOdW1iZXIgb2YgcXVldWVz IGluIHRoZSBxdWV1ZSBmYW1pbHkgaW4gdXNlICovCi0gICAgaW50IG51bTsKLSAgICAvKiBRdWV1 ZSBmYW1pbHkgY2FwYWJpbGl0aWVzLiBNdXN0IGJlIG5vbi16ZXJvLgotICAgICAqIEZsYWdzIG1h eSBiZSByZW1vdmVkIHRvIGluZGljYXRlIHRoZSBxdWV1ZSBmYW1pbHkgbWF5IG5vdCBiZSB1c2Vk Ci0gICAgICogZm9yIGEgZ2l2ZW4gcHVycG9zZS4gKi8KLSAgICBWa1F1ZXVlRmxhZ0JpdHMgZmxh Z3M7Ci0gICAgLyogVnVsa2FuIGltcGxlbWVudGF0aW9ucyBhcmUgYWxsb3dlZCB0byBsaXN0IG11 bHRpcGxlIHZpZGVvIHF1ZXVlcwotICAgICAqIHdoaWNoIGRpZmZlciBpbiB3aGF0IHRoZXkgY2Fu IGVuY29kZSBvciBkZWNvZGUuICovCi0gICAgVmtWaWRlb0NvZGVjT3BlcmF0aW9uRmxhZ0JpdHNL SFIgdmlkZW9fY2FwczsKLX0gQVZWdWxrYW5EZXZpY2VRdWV1ZUZhbWlseTsKLQotLyoqCi0gKiBA ZmlsZQotICogQVBJLXNwZWNpZmljIGhlYWRlciBmb3IgQVZfSFdERVZJQ0VfVFlQRV9WVUxLQU4u Ci0gKgotICogRm9yIHVzZXItYWxsb2NhdGVkIHBvb2xzLCBBVkhXRnJhbWVzQ29udGV4dC5wb29s IG11c3QgcmV0dXJuIEFWQnVmZmVyUmVmcwotICogd2l0aCB0aGUgZGF0YSBwb2ludGVyIHNldCB0 byBhbiBBVlZrRnJhbWUuCi0gKi8KLQotLyoqCi0gKiBNYWluIFZ1bGthbiBjb250ZXh0LCBhbGxv Y2F0ZWQgYXMgQVZIV0RldmljZUNvbnRleHQuaHdjdHguCi0gKiBBbGwgb2YgdGhlc2UgY2FuIGJl IHNldCBiZWZvcmUgaW5pdCB0byBjaGFuZ2Ugd2hhdCB0aGUgY29udGV4dCB1c2VzCi0gKi8KLXR5 cGVkZWYgc3RydWN0IEFWVnVsa2FuRGV2aWNlQ29udGV4dCB7Ci0gICAgLyoqCi0gICAgICogQ3Vz dG9tIG1lbW9yeSBhbGxvY2F0b3IsIGVsc2UgTlVMTAotICAgICAqLwotICAgIGNvbnN0IFZrQWxs b2NhdGlvbkNhbGxiYWNrcyAqYWxsb2M7Ci0KLSAgICAvKioKLSAgICAgKiBQb2ludGVyIHRvIGEg dmtHZXRJbnN0YW5jZVByb2NBZGRyIGxvYWRpbmcgZnVuY3Rpb24uCi0gICAgICogSWYgdW5zZXQs IHdpbGwgZHluYW1pY2FsbHkgbG9hZCBhbmQgdXNlIGxpYnZ1bGthbi4KLSAgICAgKi8KLSAgICBQ Rk5fdmtHZXRJbnN0YW5jZVByb2NBZGRyIGdldF9wcm9jX2FkZHI7Ci0KLSAgICAvKioKLSAgICAg KiBWdWxrYW4gaW5zdGFuY2UuIE11c3QgYmUgYXQgbGVhc3QgdmVyc2lvbiAxLjMuCi0gICAgICov Ci0gICAgVmtJbnN0YW5jZSBpbnN0OwotCi0gICAgLyoqCi0gICAgICogUGh5c2ljYWwgZGV2aWNl Ci0gICAgICovCi0gICAgVmtQaHlzaWNhbERldmljZSBwaHlzX2RldjsKLQotICAgIC8qKgotICAg ICAqIEFjdGl2ZSBkZXZpY2UKLSAgICAgKi8KLSAgICBWa0RldmljZSBhY3RfZGV2OwotCi0gICAg LyoqCi0gICAgICogVGhpcyBzdHJ1Y3R1cmUgc2hvdWxkIGJlIHNldCB0byB0aGUgc2V0IG9mIGZl YXR1cmVzIHRoYXQgcHJlc2VudCBhbmQgZW5hYmxlZAotICAgICAqIGR1cmluZyBkZXZpY2UgY3Jl YXRpb24uIFdoZW4gYSBkZXZpY2UgaXMgY3JlYXRlZCBieSBGRm1wZWcsIGl0IHdpbGwgZGVmYXVs dCB0bwotICAgICAqIGVuYWJsaW5nIGFsbCB0aGF0IGFyZSBwcmVzZW50IG9mIHRoZSBzaGFkZXJJ bWFnZUdhdGhlckV4dGVuZGVkLAotICAgICAqIGZyYWdtZW50U3RvcmVzQW5kQXRvbWljcywgc2hh ZGVySW50NjQgYW5kIHZlcnRleFBpcGVsaW5lU3RvcmVzQW5kQXRvbWljcyBmZWF0dXJlcy4KLSAg ICAgKi8KLSAgICBWa1BoeXNpY2FsRGV2aWNlRmVhdHVyZXMyIGRldmljZV9mZWF0dXJlczsKLQot ICAgIC8qKgotICAgICAqIEVuYWJsZWQgaW5zdGFuY2UgZXh0ZW5zaW9ucy4KLSAgICAgKiBJZiBz dXBwbHlpbmcgeW91ciBvd24gZGV2aWNlIGNvbnRleHQsIHNldCB0aGlzIHRvIGFuIGFycmF5IG9m IHN0cmluZ3MsIHdpdGgKLSAgICAgKiBlYWNoIGVudHJ5IGNvbnRhaW5pbmcgdGhlIHNwZWNpZmll ZCBWdWxrYW4gZXh0ZW5zaW9uIHN0cmluZyB0byBlbmFibGUuCi0gICAgICogRHVwbGljYXRlcyBh cmUgcG9zc2libGUgYW5kIGFjY2VwdGVkLgotICAgICAqIElmIG5vIGV4dGVuc2lvbnMgYXJlIGVu YWJsZWQsIHNldCB0aGVzZSBmaWVsZHMgdG8gTlVMTCwgYW5kIDAgcmVzcGVjdGl2ZWx5LgotICAg ICAqLwotICAgIGNvbnN0IGNoYXIgKiBjb25zdCAqZW5hYmxlZF9pbnN0X2V4dGVuc2lvbnM7Ci0g ICAgaW50IG5iX2VuYWJsZWRfaW5zdF9leHRlbnNpb25zOwotCi0gICAgLyoqCi0gICAgICogRW5h YmxlZCBkZXZpY2UgZXh0ZW5zaW9ucy4gQnkgZGVmYXVsdCwgVktfS0hSX2V4dGVybmFsX21lbW9y eV9mZCwKLSAgICAgKiBWS19FWFRfZXh0ZXJuYWxfbWVtb3J5X2RtYV9idWYsIFZLX0VYVF9pbWFn ZV9kcm1fZm9ybWF0X21vZGlmaWVyLAotICAgICAqIFZLX0tIUl9leHRlcm5hbF9zZW1hcGhvcmVf ZmQgYW5kIFZLX0VYVF9leHRlcm5hbF9tZW1vcnlfaG9zdCBhcmUgZW5hYmxlZCBpZiBmb3VuZC4K LSAgICAgKiBJZiBzdXBwbHlpbmcgeW91ciBvd24gZGV2aWNlIGNvbnRleHQsIHRoZXNlIGZpZWxk cyB0YWtlcyB0aGUgc2FtZSBmb3JtYXQgYXMKLSAgICAgKiB0aGUgYWJvdmUgZmllbGRzLCB3aXRo IHRoZSBzYW1lIGNvbmRpdGlvbnMgdGhhdCBkdXBsaWNhdGVzIGFyZSBwb3NzaWJsZQotICAgICAq IGFuZCBhY2NlcHRlZCwgYW5kIHRoYXQgTlVMTCBhbmQgMCByZXNwZWN0aXZlbHkgbWVhbnMgbm8g ZXh0ZW5zaW9ucyBhcmUgZW5hYmxlZC4KLSAgICAgKi8KLSAgICBjb25zdCBjaGFyICogY29uc3Qg KmVuYWJsZWRfZGV2X2V4dGVuc2lvbnM7Ci0gICAgaW50IG5iX2VuYWJsZWRfZGV2X2V4dGVuc2lv bnM7Ci0KLSNpZiBGRl9BUElfVlVMS0FOX0ZJWEVEX1FVRVVFUwotICAgIC8qKgotICAgICAqIFF1 ZXVlIGZhbWlseSBpbmRleCBmb3IgZ3JhcGhpY3Mgb3BlcmF0aW9ucywgYW5kIHRoZSBudW1iZXIg b2YgcXVldWVzCi0gICAgICogZW5hYmxlZCBmb3IgaXQuIElmIHVuYXZhaWxhYmxlLCB3aWxsIGJl IHNldCB0byAtMS4gTm90IHJlcXVpcmVkLgotICAgICAqIGF2X2h3ZGV2aWNlX2NyZWF0ZSgpIHdp bGwgYXR0ZW1wdCB0byBmaW5kIGEgZGVkaWNhdGVkIHF1ZXVlIGZvciBlYWNoCi0gICAgICogcXVl dWUgZmFtaWx5LCBvciBwaWNrIHRoZSBvbmUgd2l0aCB0aGUgbGVhc3QgdW5yZWxhdGVkIGZsYWdz IHNldC4KLSAgICAgKiBRdWV1ZSBpbmRpY2VzIGhlcmUgbWF5IG92ZXJsYXAgaWYgYSBxdWV1ZSBo YXMgdG8gc2hhcmUgY2FwYWJpbGl0aWVzLgotICAgICAqLwotICAgIGF0dHJpYnV0ZV9kZXByZWNh dGVkCi0gICAgaW50IHF1ZXVlX2ZhbWlseV9pbmRleDsKLSAgICBhdHRyaWJ1dGVfZGVwcmVjYXRl ZAotICAgIGludCBuYl9ncmFwaGljc19xdWV1ZXM7Ci0KLSAgICAvKioKLSAgICAgKiBRdWV1ZSBm YW1pbHkgaW5kZXggZm9yIHRyYW5zZmVyIG9wZXJhdGlvbnMgYW5kIHRoZSBudW1iZXIgb2YgcXVl dWVzCi0gICAgICogZW5hYmxlZC4gUmVxdWlyZWQuCi0gICAgICovCi0gICAgYXR0cmlidXRlX2Rl cHJlY2F0ZWQKLSAgICBpbnQgcXVldWVfZmFtaWx5X3R4X2luZGV4OwotICAgIGF0dHJpYnV0ZV9k ZXByZWNhdGVkCi0gICAgaW50IG5iX3R4X3F1ZXVlczsKLQotICAgIC8qKgotICAgICAqIFF1ZXVl IGZhbWlseSBpbmRleCBmb3IgY29tcHV0ZSBvcGVyYXRpb25zIGFuZCB0aGUgbnVtYmVyIG9mIHF1 ZXVlcwotICAgICAqIGVuYWJsZWQuIFJlcXVpcmVkLgotICAgICAqLwotICAgIGF0dHJpYnV0ZV9k ZXByZWNhdGVkCi0gICAgaW50IHF1ZXVlX2ZhbWlseV9jb21wX2luZGV4OwotICAgIGF0dHJpYnV0 ZV9kZXByZWNhdGVkCi0gICAgaW50IG5iX2NvbXBfcXVldWVzOwotCi0gICAgLyoqCi0gICAgICog UXVldWUgZmFtaWx5IGluZGV4IGZvciB2aWRlbyBlbmNvZGUgb3BzLCBhbmQgdGhlIGFtb3VudCBv ZiBxdWV1ZXMgZW5hYmxlZC4KLSAgICAgKiBJZiB0aGUgZGV2aWNlIGRvZXNuJ3Qgc3VwcG9ydCBz dWNoLCBxdWV1ZV9mYW1pbHlfZW5jb2RlX2luZGV4IHdpbGwgYmUgLTEuCi0gICAgICogTm90IHJl cXVpcmVkLgotICAgICAqLwotICAgIGF0dHJpYnV0ZV9kZXByZWNhdGVkCi0gICAgaW50IHF1ZXVl X2ZhbWlseV9lbmNvZGVfaW5kZXg7Ci0gICAgYXR0cmlidXRlX2RlcHJlY2F0ZWQKLSAgICBpbnQg bmJfZW5jb2RlX3F1ZXVlczsKLQotICAgIC8qKgotICAgICAqIFF1ZXVlIGZhbWlseSBpbmRleCBm b3IgdmlkZW8gZGVjb2RlIG9wcywgYW5kIHRoZSBhbW91bnQgb2YgcXVldWVzIGVuYWJsZWQuCi0g ICAgICogSWYgdGhlIGRldmljZSBkb2Vzbid0IHN1cHBvcnQgc3VjaCwgcXVldWVfZmFtaWx5X2Rl Y29kZV9pbmRleCB3aWxsIGJlIC0xLgotICAgICAqIE5vdCByZXF1aXJlZC4KLSAgICAgKi8KLSAg ICBhdHRyaWJ1dGVfZGVwcmVjYXRlZAotICAgIGludCBxdWV1ZV9mYW1pbHlfZGVjb2RlX2luZGV4 OwotICAgIGF0dHJpYnV0ZV9kZXByZWNhdGVkCi0gICAgaW50IG5iX2RlY29kZV9xdWV1ZXM7Ci0j ZW5kaWYKLQotICAgIC8qKgotICAgICAqIExvY2tzIGEgcXVldWUsIHByZXZlbnRpbmcgb3RoZXIg dGhyZWFkcyBmcm9tIHN1Ym1pdHRpbmcgYW55IGNvbW1hbmQKLSAgICAgKiBidWZmZXJzIHRvIHRo aXMgcXVldWUuCi0gICAgICogSWYgc2V0IHRvIE5VTEwsIHdpbGwgYmUgc2V0IHRvIGxhdnUtaW50 ZXJuYWwgZnVuY3Rpb25zIHRoYXQgdXRpbGl6ZSBhCi0gICAgICogbXV0ZXguCi0gICAgICovCi0g ICAgdm9pZCAoKmxvY2tfcXVldWUpKHN0cnVjdCBBVkhXRGV2aWNlQ29udGV4dCAqY3R4LCB1aW50 MzJfdCBxdWV1ZV9mYW1pbHksIHVpbnQzMl90IGluZGV4KTsKLQotICAgIC8qKgotICAgICAqIFNp bWlsYXIgdG8gbG9ja19xdWV1ZSgpLCB1bmxvY2tzIGEgcXVldWUuIE11c3Qgb25seSBiZSBjYWxs ZWQgYWZ0ZXIgbG9ja2luZy4KLSAgICAgKi8KLSAgICB2b2lkICgqdW5sb2NrX3F1ZXVlKShzdHJ1 Y3QgQVZIV0RldmljZUNvbnRleHQgKmN0eCwgdWludDMyX3QgcXVldWVfZmFtaWx5LCB1aW50MzJf dCBpbmRleCk7Ci0KLSAgICAvKioKLSAgICAgKiBRdWV1ZSBmYW1pbGllcyB1c2VkLiBNdXN0IGJl IHByZWZlcmVudGlhbGx5IG9yZGVyZWQuIExpc3QgbWF5IGNvbnRhaW4KLSAgICAgKiBkdXBsaWNh dGVzLgotICAgICAqCi0gICAgICogRm9yIGNvbXBhdGliaWxpdHkgcmVhc29ucywgYWxsIHRoZSBl bmFibGVkIHF1ZXVlIGZhbWlsaWVzIGxpc3RlZCBhYm92ZQotICAgICAqIChxdWV1ZV9mYW1pbHlf KHR4L2NvbXAvZW5jb2RlL2RlY29kZSlfaW5kZXgpIG11c3QgYWxzbyBiZSBpbmNsdWRlZCBpbgot ICAgICAqIHRoaXMgbGlzdCB1bnRpbCB0aGV5J3JlIHJlbW92ZWQgYWZ0ZXIgZGVwcmVjYXRpb24u Ci0gICAgICovCi0gICAgQVZWdWxrYW5EZXZpY2VRdWV1ZUZhbWlseSBxZls2NF07Ci0gICAgaW50 IG5iX3FmOwotfSBBVlZ1bGthbkRldmljZUNvbnRleHQ7Ci0KLS8qKgotICogRGVmaW5lcyB0aGUg YmVoYXZpb3VyIG9mIGZyYW1lIGFsbG9jYXRpb24uCi0gKi8KLXR5cGVkZWYgZW51bSBBVlZrRnJh bWVGbGFncyB7Ci0gICAgLyogVW5sZXNzIHRoaXMgZmxhZyBpcyBzZXQsIGF1dG9kZXRlY3RlZCBm bGFncyB3aWxsIGJlIE9SJ2QgYmFzZWQgb24gdGhlCi0gICAgICogZGV2aWNlIGFuZCB0aWxpbmcg ZHVyaW5nIGF2X2h3ZnJhbWVfY3R4X2luaXQoKS4gKi8KLSAgICBBVl9WS19GUkFNRV9GTEFHX05P TkUgICAgICAgICAgICAgID0gKDFVTEwgPDwgMCksCi0KLSAgICAvKiBEaXNhYmxlcyBtdWx0aXBs YW5lIGltYWdlcy4KLSAgICAgKiBUaGlzIGlzIHJlcXVpcmVkIHRvIGV4cG9ydC9pbXBvcnQgaW1h Z2VzIGZyb20gQ1VEQS4gKi8KLSAgICBBVl9WS19GUkFNRV9GTEFHX0RJU0FCTEVfTVVMVElQTEFO RSA9ICgxVUxMIDw8IDIpLAotfSBBVlZrRnJhbWVGbGFnczsKLQotLyoqCi0gKiBBbGxvY2F0ZWQg YXMgQVZIV0ZyYW1lc0NvbnRleHQuaHdjdHgsIHVzZWQgdG8gc2V0IHBvb2wtc3BlY2lmaWMgb3B0 aW9ucwotICovCi10eXBlZGVmIHN0cnVjdCBBVlZ1bGthbkZyYW1lc0NvbnRleHQgewotICAgIC8q KgotICAgICAqIENvbnRyb2xzIHRoZSB0aWxpbmcgb2YgYWxsb2NhdGVkIGZyYW1lcy4KLSAgICAg KiBJZiBsZWZ0IGFzIFZLX0lNQUdFX1RJTElOR19PUFRJTUFMICgwKSwgd2lsbCB1c2Ugb3B0aW1h bCB0aWxpbmcuCi0gICAgICogQ2FuIGJlIHNldCB0byBWS19JTUFHRV9USUxJTkdfTElORUFSIHRv IGZvcmNlIGxpbmVhciBpbWFnZXMsCi0gICAgICogb3IgVktfSU1BR0VfVElMSU5HX0RSTV9GT1JN QVRfTU9ESUZJRVJfRVhUIHRvIGZvcmNlIERNQUJVRi1iYWNrZWQKLSAgICAgKiBpbWFnZXMuCi0g ICAgICogQG5vdGUgSW1wb3J0ZWQgZnJhbWVzIGZyb20gb3RoZXIgQVBJcyBpZ25vcmUgdGhpcy4K LSAgICAgKi8KLSAgICBWa0ltYWdlVGlsaW5nIHRpbGluZzsKLQotICAgIC8qKgotICAgICAqIERl ZmluZXMgZXh0cmEgdXNhZ2Ugb2Ygb3V0cHV0IGZyYW1lcy4gSWYgbm9uLXplcm8sIGFsbCBmbGFn cyBNVVNUIGJlCi0gICAgICogc3VwcG9ydGVkIGJ5IHRoZSBWa0Zvcm1hdC4gT3RoZXJ3aXNlLCB3 aWxsIHVzZSBzdXBwb3J0ZWQgZmxhZ3MgYW1vbmdzdDoKLSAgICAgKiAtIFZLX0lNQUdFX1VTQUdF X1NBTVBMRURfQklUCi0gICAgICogLSBWS19JTUFHRV9VU0FHRV9TVE9SQUdFX0JJVAotICAgICAq IC0gVktfSU1BR0VfVVNBR0VfVFJBTlNGRVJfU1JDX0JJVAotICAgICAqIC0gVktfSU1BR0VfVVNB R0VfVFJBTlNGRVJfRFNUX0JJVAotICAgICAqLwotICAgIFZrSW1hZ2VVc2FnZUZsYWdCaXRzIHVz YWdlOwotCi0gICAgLyoqCi0gICAgICogRXh0ZW5zaW9uIGRhdGEgZm9yIGltYWdlIGNyZWF0aW9u LgotICAgICAqIElmIERSTSB0aWxpbmcgaXMgdXNlZCwgYSBWa0ltYWdlRHJtRm9ybWF0TW9kaWZp ZXJMaXN0Q3JlYXRlSW5mb0VYVCBzdHJ1Y3R1cmUKLSAgICAgKiBjYW4gYmUgYWRkZWQgdG8gc3Bl Y2lmeSB0aGUgZXhhY3QgbW9kaWZpZXIgdG8gdXNlLgotICAgICAqCi0gICAgICogQWRkaXRpb25h bCBzdHJ1Y3R1cmVzIG1heSBiZSBhZGRlZCBhdCBhdl9od2ZyYW1lX2N0eF9pbml0KCkgdGltZSwK LSAgICAgKiB3aGljaCB3aWxsIGJlIGZyZWVkIGF1dG9tYXRpY2FsbHkgb24gdW5pbml0KCksIHNv IHVzZXJzIG11c3Qgb25seSBmcmVlCi0gICAgICogYW55IHN0cnVjdHVyZXMgdGhleSd2ZSBhbGxv Y2F0ZWQgdGhlbXNlbHZlcy4KLSAgICAgKi8KLSAgICB2b2lkICpjcmVhdGVfcG5leHQ7Ci0KLSAg ICAvKioKLSAgICAgKiBFeHRlbnNpb24gZGF0YSBmb3IgbWVtb3J5IGFsbG9jYXRpb24uIE11c3Qg aGF2ZSBhcyBtYW55IGVudHJpZXMgYXMKLSAgICAgKiB0aGUgbnVtYmVyIG9mIHBsYW5lcyBvZiB0 aGUgc3dfZm9ybWF0LgotICAgICAqIFRoaXMgd2lsbCBiZSBjaGFpbmVkIHRvIFZrRXhwb3J0TWVt b3J5QWxsb2NhdGVJbmZvLCB3aGljaCBpcyB1c2VkCi0gICAgICogdG8gbWFrZSBhbGwgcG9vbCBp bWFnZXMgZXhwb3J0YWJsZSB0byBvdGhlciBBUElzIGlmIHRoZSBuZWNlc3NhcnkKLSAgICAgKiBl eHRlbnNpb25zIGFyZSBwcmVzZW50IGluIGVuYWJsZWRfZGV2X2V4dGVuc2lvbnMuCi0gICAgICov Ci0gICAgdm9pZCAqYWxsb2NfcG5leHRbQVZfTlVNX0RBVEFfUE9JTlRFUlNdOwotCi0gICAgLyoq Ci0gICAgICogQSBjb21iaW5hdGlvbiBvZiBBVlZrRnJhbWVGbGFncy4gVW5sZXNzIEFWX1ZLX0ZS QU1FX0ZMQUdfTk9ORSBpcyBzZXQsCi0gICAgICogYXV0b2RldGVjdGVkIGZsYWdzIHdpbGwgYmUg T1InZCBiYXNlZCBvbiB0aGUgZGV2aWNlIGFuZCB0aWxpbmcgZHVyaW5nCi0gICAgICogYXZfaHdm cmFtZV9jdHhfaW5pdCgpLgotICAgICAqLwotICAgIEFWVmtGcmFtZUZsYWdzIGZsYWdzOwotCi0g ICAgLyoqCi0gICAgICogRmxhZ3MgdG8gc2V0IGR1cmluZyBpbWFnZSBjcmVhdGlvbi4gSWYgdW5z ZXQsIGRlZmF1bHRzIHRvCi0gICAgICogVktfSU1BR0VfQ1JFQVRFX0FMSUFTX0JJVC4KLSAgICAg Ki8KLSAgICBWa0ltYWdlQ3JlYXRlRmxhZ3MgaW1nX2ZsYWdzOwotCi0gICAgLyoqCi0gICAgICog VnVsa2FuIGZvcm1hdCBmb3IgZWFjaCBpbWFnZS4gTVVTVCBiZSBjb21wYXRpYmxlIHdpdGggdGhl IHBpeGVsIGZvcm1hdC4KLSAgICAgKiBJZiB1bnNldCwgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHNl dC4KLSAgICAgKiBUaGVyZSBhcmUgYXQgbW9zdCB0d28gY29tcGF0aWJsZSBmb3JtYXRzIGZvciBh IGZyYW1lIC0gYSBtdWx0aXBsYW5lCi0gICAgICogZm9ybWF0LCBhbmQgYSBzaW5nbGUtcGxhbmUg bXVsdGktaW1hZ2UgZm9ybWF0LgotICAgICAqLwotICAgIFZrRm9ybWF0IGZvcm1hdFtBVl9OVU1f REFUQV9QT0lOVEVSU107Ci0KLSAgICAvKioKLSAgICAgKiBOdW1iZXIgb2YgbGF5ZXJzIGVhY2gg aW1hZ2Ugd2lsbCBoYXZlLgotICAgICAqLwotICAgIGludCBuYl9sYXllcnM7Ci0KLSAgICAvKioK LSAgICAgKiBMb2NrcyBhIGZyYW1lLCBwcmV2ZW50aW5nIG90aGVyIHRocmVhZHMgZnJvbSBjaGFu Z2luZyBmcmFtZSBwcm9wZXJ0aWVzLgotICAgICAqIFVzZXJzIFNIT1VMRCBvbmx5IGV2ZXIgbG9j ayBqdXN0IGJlZm9yZSBjb21tYW5kIHN1Ym1pc3Npb24gaW4gb3JkZXIKLSAgICAgKiB0byBnZXQg YWNjdXJhdGUgZnJhbWUgcHJvcGVydGllcywgYW5kIHVubG9jayBpbW1lZGlhdGVseSBhZnRlciBj b21tYW5kCi0gICAgICogc3VibWlzc2lvbiB3aXRob3V0IHdhaXRpbmcgZm9yIGl0IHRvIGZpbmlz aC4KLSAgICAgKgotICAgICAqIElmIHVuc2V0LCB3aWxsIGJlIHNldCB0byBsYXZ1LWludGVybmFs IGZ1bmN0aW9ucyB0aGF0IHV0aWxpemUgYSBtdXRleC4KLSAgICAgKi8KLSAgICB2b2lkICgqbG9j a19mcmFtZSkoc3RydWN0IEFWSFdGcmFtZXNDb250ZXh0ICpmYywgQVZWa0ZyYW1lICp2a2YpOwot Ci0gICAgLyoqCi0gICAgICogU2ltaWxhciB0byBsb2NrX2ZyYW1lKCksIHVubG9ja3MgYSBmcmFt ZS4gTXVzdCBvbmx5IGJlIGNhbGxlZCBhZnRlciBsb2NraW5nLgotICAgICAqLwotICAgIHZvaWQg KCp1bmxvY2tfZnJhbWUpKHN0cnVjdCBBVkhXRnJhbWVzQ29udGV4dCAqZmMsIEFWVmtGcmFtZSAq dmtmKTsKLX0gQVZWdWxrYW5GcmFtZXNDb250ZXh0OwotCi0vKgotICogRnJhbWUgc3RydWN0dXJl LgotICoKLSAqIEBub3RlIHRoZSBzaXplIG9mIHRoaXMgc3RydWN0dXJlIGlzIG5vdCBwYXJ0IG9m IHRoZSBBQkksIHRvIGFsbG9jYXRlCi0gKiB5b3UgbXVzdCB1c2UgQGF2X3ZrX2ZyYW1lX2FsbG9j KCkuCi0gKi8KLXN0cnVjdCBBVlZrRnJhbWUgewotICAgIC8qKgotICAgICAqIFZ1bGthbiBpbWFn ZXMgdG8gd2hpY2ggdGhlIG1lbW9yeSBpcyBib3VuZCB0by4KLSAgICAgKiBNYXkgYmUgb25lIGZv ciBtdWx0aXBsYW5lIGZvcm1hdHMsIG9yIG11bHRpcGxlLgotICAgICAqLwotICAgIFZrSW1hZ2Ug aW1nW0FWX05VTV9EQVRBX1BPSU5URVJTXTsKLQotICAgIC8qKgotICAgICAqIFRpbGluZyBmb3Ig dGhlIGZyYW1lLgotICAgICAqLwotICAgIFZrSW1hZ2VUaWxpbmcgdGlsaW5nOwotCi0gICAgLyoq Ci0gICAgICogTWVtb3J5IGJhY2tpbmcgdGhlIGltYWdlcy4gRWl0aGVyIG9uZSwgb3IgYXMgbWFu eSBhcyB0aGVyZSBhcmUgcGxhbmVzCi0gICAgICogaW4gdGhlIHN3X2Zvcm1hdC4KLSAgICAgKiBJ biBjYXNlIG9mIGhhdmluZyBtdWx0aXBsZSBWa0ltYWdlcywgYnV0IG9uZSBtZW1vcnksIHRoZSBv ZmZzZXQgZmllbGQKLSAgICAgKiB3aWxsIGluZGljYXRlIHRoZSBib3VuZCBvZmZzZXQgZm9yIGVh Y2ggaW1hZ2UuCi0gICAgICovCi0gICAgVmtEZXZpY2VNZW1vcnkgbWVtW0FWX05VTV9EQVRBX1BP SU5URVJTXTsKLSAgICBzaXplX3Qgc2l6ZVtBVl9OVU1fREFUQV9QT0lOVEVSU107Ci0KLSAgICAv KioKLSAgICAgKiBPUidkIGZsYWdzIGZvciBhbGwgbWVtb3J5IGFsbG9jYXRlZAotICAgICAqLwot ICAgIFZrTWVtb3J5UHJvcGVydHlGbGFnQml0cyBmbGFnczsKLQotICAgIC8qKgotICAgICAqIFVw ZGF0ZWQgYWZ0ZXIgZXZlcnkgYmFycmllci4gT25lIHBlciBWa0ltYWdlLgotICAgICAqLwotICAg IFZrQWNjZXNzRmxhZ0JpdHMgYWNjZXNzW0FWX05VTV9EQVRBX1BPSU5URVJTXTsKLSAgICBWa0lt YWdlTGF5b3V0IGxheW91dFtBVl9OVU1fREFUQV9QT0lOVEVSU107Ci0KLSAgICAvKioKLSAgICAg KiBTeW5jaHJvbml6YXRpb24gdGltZWxpbmUgc2VtYXBob3Jlcywgb25lIGZvciBlYWNoIFZrSW1h Z2UuCi0gICAgICogTXVzdCBub3QgYmUgZnJlZWQgbWFudWFsbHkuIE11c3QgYmUgd2FpdGVkIG9u IGF0IGV2ZXJ5IHN1Ym1pc3Npb24gdXNpbmcKLSAgICAgKiB0aGUgdmFsdWUgaW4gc2VtX3ZhbHVl LCBhbmQgbXVzdCBiZSBzaWduYWxsZWQgYXQgZXZlcnkgc3VibWlzc2lvbiwKLSAgICAgKiB1c2lu ZyBhbiBpbmNyZW1lbnRlZCB2YWx1ZS4KLSAgICAgKi8KLSAgICBWa1NlbWFwaG9yZSBzZW1bQVZf TlVNX0RBVEFfUE9JTlRFUlNdOwotCi0gICAgLyoqCi0gICAgICogVXAgdG8gZGF0ZSBzZW1hcGhv cmUgdmFsdWUgYXQgd2hpY2ggZWFjaCBpbWFnZSBiZWNvbWVzIGFjY2Vzc2libGUuCi0gICAgICog T25lIHBlciBWa0ltYWdlLgotICAgICAqIENsaWVudHMgbXVzdCB3YWl0IG9uIHRoaXMgdmFsdWUg d2hlbiBzdWJtaXR0aW5nIGEgY29tbWFuZCBxdWV1ZSwKLSAgICAgKiBhbmQgaW5jcmVtZW50IGl0 IHdoZW4gc2lnbmFsbGluZy4KLSAgICAgKi8KLSAgICB1aW50NjRfdCBzZW1fdmFsdWVbQVZfTlVN X0RBVEFfUE9JTlRFUlNdOwotCi0gICAgLyoqCi0gICAgICogSW50ZXJuYWwgZGF0YS4KLSAgICAg Ki8KLSAgICBzdHJ1Y3QgQVZWa0ZyYW1lSW50ZXJuYWwgKmludGVybmFsOwotCi0gICAgLyoqCi0g ICAgICogRGVzY3JpYmVzIHRoZSBiaW5kaW5nIG9mZnNldCBvZiBlYWNoIGltYWdlIHRvIHRoZSBW a0RldmljZU1lbW9yeS4KLSAgICAgKiBPbmUgcGVyIFZrSW1hZ2UuCi0gICAgICovCi0gICAgcHRy ZGlmZl90IG9mZnNldFtBVl9OVU1fREFUQV9QT0lOVEVSU107Ci0KLSAgICAvKioKLSAgICAgKiBR dWV1ZSBmYW1pbHkgb2YgdGhlIGltYWdlcy4gTXVzdCBiZSBWS19RVUVVRV9GQU1JTFlfSUdOT1JF RCBpZgotICAgICAqIHRoZSBpbWFnZSB3YXMgYWxsb2NhdGVkIHdpdGggdGhlIENPTkNVUlJFTlQg Y29uY3VycmVuY3kgb3B0aW9uLgotICAgICAqIE9uZSBwZXIgVmtJbWFnZS4KLSAgICAgKi8KLSAg ICB1aW50MzJfdCBxdWV1ZV9mYW1pbHlbQVZfTlVNX0RBVEFfUE9JTlRFUlNdOwotfTsKLQotLyoq Ci0gKiBBbGxvY2F0ZXMgYSBzaW5nbGUgQVZWa0ZyYW1lIGFuZCBpbml0aWFsaXplcyBldmVyeXRo aW5nIGFzIDAuCi0gKiBAbm90ZSBNdXN0IGJlIGZyZWVkIHZpYSBhdl9mcmVlKCkKLSAqLwotQVZW a0ZyYW1lICphdl92a19mcmFtZV9hbGxvYyh2b2lkKTsKLQotLyoqCi0gKiBSZXR1cm5zIHRoZSBv cHRpbWFsIHBlci1wbGFuZSBWdWxrYW4gZm9ybWF0IGZvciBhIGdpdmVuIHN3X2Zvcm1hdCwKLSAq IG9uZSBmb3IgZWFjaCBwbGFuZS4KLSAqIFJldHVybnMgTlVMTCBvbiB1bnN1cHBvcnRlZCBmb3Jt YXRzLgotICovCi1jb25zdCBWa0Zvcm1hdCAqYXZfdmtmbXRfZnJvbV9waXhmbXQoZW51bSBBVlBp eGVsRm9ybWF0IHApOwotCi0jZW5kaWYgLyogQVZVVElMX0hXQ09OVEVYVF9WVUxLQU5fSCAqLwot LSAKMi40OS4xCgoKRnJvbSAxMjBlYmRjZjZhNjQzZDRkYmMzZmE1OTdjN2M0OGU1MmFhNmYxMTk0 IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBKYW1haWthMSA8bHVrYXN6Y3oxOEB3cC5w bD4KRGF0ZTogV2VkLCAzIFNlcCAyMDI1IDEzOjE2OjIzICswMDAwClN1YmplY3Q6IFtQQVRDSCAw NDIvMTE4XSBDaGFuZ2luZyB2dWxrYW4gZmlsZSBkaXJlY3RvcnkKCi0tLQogbGliYXZ1dGlsL3Z1 bGthbi9od2NvbnRleHRfdnVsa2FuLmggfCAzNzcgKysrKysrKysrKysrKysrKysrKysrKysrKysr KwogMSBmaWxlIGNoYW5nZWQsIDM3NyBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQg bGliYXZ1dGlsL3Z1bGthbi9od2NvbnRleHRfdnVsa2FuLmgKCmRpZmYgLS1naXQgYS9saWJhdnV0 aWwvdnVsa2FuL2h3Y29udGV4dF92dWxrYW4uaCBiL2xpYmF2dXRpbC92dWxrYW4vaHdjb250ZXh0 X3Z1bGthbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjExYTAxYjk1 NjUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJhdnV0aWwvdnVsa2FuL2h3Y29udGV4dF92dWxrYW4u aApAQCAtMCwwICsxLDM3NyBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4K KyAqCisgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg YW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdl bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAo YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIEZGbXBlZyBpcyBkaXN0 cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl ZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM ZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5v dCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKyAq LworCisjaWZuZGVmIEFWVVRJTF9IV0NPTlRFWFRfVlVMS0FOX0gKKyNkZWZpbmUgQVZVVElMX0hX Q09OVEVYVF9WVUxLQU5fSAorCisjaWYgZGVmaW5lZChfV0lOMzIpICYmICFkZWZpbmVkKFZLX1VT RV9QTEFURk9STV9XSU4zMl9LSFIpCisjZGVmaW5lIFZLX1VTRV9QTEFURk9STV9XSU4zMl9LSFIK KyNlbmRpZgorI2luY2x1ZGUgPHZ1bGthbi92dWxrYW4uaD4KKworI2luY2x1ZGUgImxpYmF2dXRp bC9waXhmbXQuaCIKKyNpbmNsdWRlICJsaWJhdnV0aWwvZnJhbWUuaCIKKyNpbmNsdWRlICJsaWJh dnV0aWwvaHdjb250ZXh0LmgiCisKK3R5cGVkZWYgc3RydWN0IEFWVmtGcmFtZSBBVlZrRnJhbWU7 CisKK3R5cGVkZWYgc3RydWN0IEFWVnVsa2FuRGV2aWNlUXVldWVGYW1pbHkgeworICAgIC8qIFF1 ZXVlIGZhbWlseSBpbmRleCAqLworICAgIGludCBpZHg7CisgICAgLyogTnVtYmVyIG9mIHF1ZXVl cyBpbiB0aGUgcXVldWUgZmFtaWx5IGluIHVzZSAqLworICAgIGludCBudW07CisgICAgLyogUXVl dWUgZmFtaWx5IGNhcGFiaWxpdGllcy4gTXVzdCBiZSBub24temVyby4KKyAgICAgKiBGbGFncyBt YXkgYmUgcmVtb3ZlZCB0byBpbmRpY2F0ZSB0aGUgcXVldWUgZmFtaWx5IG1heSBub3QgYmUgdXNl ZAorICAgICAqIGZvciBhIGdpdmVuIHB1cnBvc2UuICovCisgICAgVmtRdWV1ZUZsYWdCaXRzIGZs YWdzOworICAgIC8qIFZ1bGthbiBpbXBsZW1lbnRhdGlvbnMgYXJlIGFsbG93ZWQgdG8gbGlzdCBt dWx0aXBsZSB2aWRlbyBxdWV1ZXMKKyAgICAgKiB3aGljaCBkaWZmZXIgaW4gd2hhdCB0aGV5IGNh biBlbmNvZGUgb3IgZGVjb2RlLiAqLworICAgIFZrVmlkZW9Db2RlY09wZXJhdGlvbkZsYWdCaXRz S0hSIHZpZGVvX2NhcHM7Cit9IEFWVnVsa2FuRGV2aWNlUXVldWVGYW1pbHk7CisKKy8qKgorICog QGZpbGUKKyAqIEFQSS1zcGVjaWZpYyBoZWFkZXIgZm9yIEFWX0hXREVWSUNFX1RZUEVfVlVMS0FO LgorICoKKyAqIEZvciB1c2VyLWFsbG9jYXRlZCBwb29scywgQVZIV0ZyYW1lc0NvbnRleHQucG9v bCBtdXN0IHJldHVybiBBVkJ1ZmZlclJlZnMKKyAqIHdpdGggdGhlIGRhdGEgcG9pbnRlciBzZXQg dG8gYW4gQVZWa0ZyYW1lLgorICovCisKKy8qKgorICogTWFpbiBWdWxrYW4gY29udGV4dCwgYWxs b2NhdGVkIGFzIEFWSFdEZXZpY2VDb250ZXh0Lmh3Y3R4LgorICogQWxsIG9mIHRoZXNlIGNhbiBi ZSBzZXQgYmVmb3JlIGluaXQgdG8gY2hhbmdlIHdoYXQgdGhlIGNvbnRleHQgdXNlcworICovCit0 eXBlZGVmIHN0cnVjdCBBVlZ1bGthbkRldmljZUNvbnRleHQgeworICAgIC8qKgorICAgICAqIEN1 c3RvbSBtZW1vcnkgYWxsb2NhdG9yLCBlbHNlIE5VTEwKKyAgICAgKi8KKyAgICBjb25zdCBWa0Fs bG9jYXRpb25DYWxsYmFja3MgKmFsbG9jOworCisgICAgLyoqCisgICAgICogUG9pbnRlciB0byBh IHZrR2V0SW5zdGFuY2VQcm9jQWRkciBsb2FkaW5nIGZ1bmN0aW9uLgorICAgICAqIElmIHVuc2V0 LCB3aWxsIGR5bmFtaWNhbGx5IGxvYWQgYW5kIHVzZSBsaWJ2dWxrYW4uCisgICAgICovCisgICAg UEZOX3ZrR2V0SW5zdGFuY2VQcm9jQWRkciBnZXRfcHJvY19hZGRyOworCisgICAgLyoqCisgICAg ICogVnVsa2FuIGluc3RhbmNlLiBNdXN0IGJlIGF0IGxlYXN0IHZlcnNpb24gMS4zLgorICAgICAq LworICAgIFZrSW5zdGFuY2UgaW5zdDsKKworICAgIC8qKgorICAgICAqIFBoeXNpY2FsIGRldmlj ZQorICAgICAqLworICAgIFZrUGh5c2ljYWxEZXZpY2UgcGh5c19kZXY7CisKKyAgICAvKioKKyAg ICAgKiBBY3RpdmUgZGV2aWNlCisgICAgICovCisgICAgVmtEZXZpY2UgYWN0X2RldjsKKworICAg IC8qKgorICAgICAqIFRoaXMgc3RydWN0dXJlIHNob3VsZCBiZSBzZXQgdG8gdGhlIHNldCBvZiBm ZWF0dXJlcyB0aGF0IHByZXNlbnQgYW5kIGVuYWJsZWQKKyAgICAgKiBkdXJpbmcgZGV2aWNlIGNy ZWF0aW9uLiBXaGVuIGEgZGV2aWNlIGlzIGNyZWF0ZWQgYnkgRkZtcGVnLCBpdCB3aWxsIGRlZmF1 bHQgdG8KKyAgICAgKiBlbmFibGluZyBhbGwgdGhhdCBhcmUgcHJlc2VudCBvZiB0aGUgc2hhZGVy SW1hZ2VHYXRoZXJFeHRlbmRlZCwKKyAgICAgKiBmcmFnbWVudFN0b3Jlc0FuZEF0b21pY3MsIHNo YWRlckludDY0IGFuZCB2ZXJ0ZXhQaXBlbGluZVN0b3Jlc0FuZEF0b21pY3MgZmVhdHVyZXMuCisg ICAgICovCisgICAgVmtQaHlzaWNhbERldmljZUZlYXR1cmVzMiBkZXZpY2VfZmVhdHVyZXM7CisK KyAgICAvKioKKyAgICAgKiBFbmFibGVkIGluc3RhbmNlIGV4dGVuc2lvbnMuCisgICAgICogSWYg c3VwcGx5aW5nIHlvdXIgb3duIGRldmljZSBjb250ZXh0LCBzZXQgdGhpcyB0byBhbiBhcnJheSBv ZiBzdHJpbmdzLCB3aXRoCisgICAgICogZWFjaCBlbnRyeSBjb250YWluaW5nIHRoZSBzcGVjaWZp ZWQgVnVsa2FuIGV4dGVuc2lvbiBzdHJpbmcgdG8gZW5hYmxlLgorICAgICAqIER1cGxpY2F0ZXMg YXJlIHBvc3NpYmxlIGFuZCBhY2NlcHRlZC4KKyAgICAgKiBJZiBubyBleHRlbnNpb25zIGFyZSBl bmFibGVkLCBzZXQgdGhlc2UgZmllbGRzIHRvIE5VTEwsIGFuZCAwIHJlc3BlY3RpdmVseS4KKyAg ICAgKi8KKyAgICBjb25zdCBjaGFyICogY29uc3QgKmVuYWJsZWRfaW5zdF9leHRlbnNpb25zOwor ICAgIGludCBuYl9lbmFibGVkX2luc3RfZXh0ZW5zaW9uczsKKworICAgIC8qKgorICAgICAqIEVu YWJsZWQgZGV2aWNlIGV4dGVuc2lvbnMuIEJ5IGRlZmF1bHQsIFZLX0tIUl9leHRlcm5hbF9tZW1v cnlfZmQsCisgICAgICogVktfRVhUX2V4dGVybmFsX21lbW9yeV9kbWFfYnVmLCBWS19FWFRfaW1h Z2VfZHJtX2Zvcm1hdF9tb2RpZmllciwKKyAgICAgKiBWS19LSFJfZXh0ZXJuYWxfc2VtYXBob3Jl X2ZkIGFuZCBWS19FWFRfZXh0ZXJuYWxfbWVtb3J5X2hvc3QgYXJlIGVuYWJsZWQgaWYgZm91bmQu CisgICAgICogSWYgc3VwcGx5aW5nIHlvdXIgb3duIGRldmljZSBjb250ZXh0LCB0aGVzZSBmaWVs ZHMgdGFrZXMgdGhlIHNhbWUgZm9ybWF0IGFzCisgICAgICogdGhlIGFib3ZlIGZpZWxkcywgd2l0 aCB0aGUgc2FtZSBjb25kaXRpb25zIHRoYXQgZHVwbGljYXRlcyBhcmUgcG9zc2libGUKKyAgICAg KiBhbmQgYWNjZXB0ZWQsIGFuZCB0aGF0IE5VTEwgYW5kIDAgcmVzcGVjdGl2ZWx5IG1lYW5zIG5v IGV4dGVuc2lvbnMgYXJlIGVuYWJsZWQuCisgICAgICovCisgICAgY29uc3QgY2hhciAqIGNvbnN0 ICplbmFibGVkX2Rldl9leHRlbnNpb25zOworICAgIGludCBuYl9lbmFibGVkX2Rldl9leHRlbnNp b25zOworCisjaWYgRkZfQVBJX1ZVTEtBTl9GSVhFRF9RVUVVRVMKKyAgICAvKioKKyAgICAgKiBR dWV1ZSBmYW1pbHkgaW5kZXggZm9yIGdyYXBoaWNzIG9wZXJhdGlvbnMsIGFuZCB0aGUgbnVtYmVy IG9mIHF1ZXVlcworICAgICAqIGVuYWJsZWQgZm9yIGl0LiBJZiB1bmF2YWlhYmxlLCB3aWxsIGJl IHNldCB0byAtMS4gTm90IHJlcXVpcmVkLgorICAgICAqIGF2X2h3ZGV2aWNlX2NyZWF0ZSgpIHdp bGwgYXR0ZW1wdCB0byBmaW5kIGEgZGVkaWNhdGVkIHF1ZXVlIGZvciBlYWNoCisgICAgICogcXVl dWUgZmFtaWx5LCBvciBwaWNrIHRoZSBvbmUgd2l0aCB0aGUgbGVhc3QgdW5yZWxhdGVkIGZsYWdz IHNldC4KKyAgICAgKiBRdWV1ZSBpbmRpY2VzIGhlcmUgbWF5IG92ZXJsYXAgaWYgYSBxdWV1ZSBo YXMgdG8gc2hhcmUgY2FwYWJpbGl0aWVzLgorICAgICAqLworICAgIGF0dHJpYnV0ZV9kZXByZWNh dGVkCisgICAgaW50IHF1ZXVlX2ZhbWlseV9pbmRleDsKKyAgICBhdHRyaWJ1dGVfZGVwcmVjYXRl ZAorICAgIGludCBuYl9ncmFwaGljc19xdWV1ZXM7CisKKyAgICAvKioKKyAgICAgKiBRdWV1ZSBm YW1pbHkgaW5kZXggZm9yIHRyYW5zZmVyIG9wZXJhdGlvbnMgYW5kIHRoZSBudW1iZXIgb2YgcXVl dWVzCisgICAgICogZW5hYmxlZC4gUmVxdWlyZWQuCisgICAgICovCisgICAgYXR0cmlidXRlX2Rl cHJlY2F0ZWQKKyAgICBpbnQgcXVldWVfZmFtaWx5X3R4X2luZGV4OworICAgIGF0dHJpYnV0ZV9k ZXByZWNhdGVkCisgICAgaW50IG5iX3R4X3F1ZXVlczsKKworICAgIC8qKgorICAgICAqIFF1ZXVl IGZhbWlseSBpbmRleCBmb3IgY29tcHV0ZSBvcGVyYXRpb25zIGFuZCB0aGUgbnVtYmVyIG9mIHF1 ZXVlcworICAgICAqIGVuYWJsZWQuIFJlcXVpcmVkLgorICAgICAqLworICAgIGF0dHJpYnV0ZV9k ZXByZWNhdGVkCisgICAgaW50IHF1ZXVlX2ZhbWlseV9jb21wX2luZGV4OworICAgIGF0dHJpYnV0 ZV9kZXByZWNhdGVkCisgICAgaW50IG5iX2NvbXBfcXVldWVzOworCisgICAgLyoqCisgICAgICog UXVldWUgZmFtaWx5IGluZGV4IGZvciB2aWRlbyBlbmNvZGUgb3BzLCBhbmQgdGhlIGFtb3VudCBv ZiBxdWV1ZXMgZW5hYmxlZC4KKyAgICAgKiBJZiB0aGUgZGV2aWNlIGRvZXNuJ3Qgc3VwcG9ydCBz dWNoLCBxdWV1ZV9mYW1pbHlfZW5jb2RlX2luZGV4IHdpbGwgYmUgLTEuCisgICAgICogTm90IHJl cXVpcmVkLgorICAgICAqLworICAgIGF0dHJpYnV0ZV9kZXByZWNhdGVkCisgICAgaW50IHF1ZXVl X2ZhbWlseV9lbmNvZGVfaW5kZXg7CisgICAgYXR0cmlidXRlX2RlcHJlY2F0ZWQKKyAgICBpbnQg bmJfZW5jb2RlX3F1ZXVlczsKKworICAgIC8qKgorICAgICAqIFF1ZXVlIGZhbWlseSBpbmRleCBm b3IgdmlkZW8gZGVjb2RlIG9wcywgYW5kIHRoZSBhbW91bnQgb2YgcXVldWVzIGVuYWJsZWQuCisg ICAgICogSWYgdGhlIGRldmljZSBkb2Vzbid0IHN1cHBvcnQgc3VjaCwgcXVldWVfZmFtaWx5X2Rl Y29kZV9pbmRleCB3aWxsIGJlIC0xLgorICAgICAqIE5vdCByZXF1aXJlZC4KKyAgICAgKi8KKyAg ICBhdHRyaWJ1dGVfZGVwcmVjYXRlZAorICAgIGludCBxdWV1ZV9mYW1pbHlfZGVjb2RlX2luZGV4 OworICAgIGF0dHJpYnV0ZV9kZXByZWNhdGVkCisgICAgaW50IG5iX2RlY29kZV9xdWV1ZXM7Cisj ZW5kaWYKKworICAgIC8qKgorICAgICAqIExvY2tzIGEgcXVldWUsIHByZXZlbnRpbmcgb3RoZXIg dGhyZWFkcyBmcm9tIHN1Ym1pdHRpbmcgYW55IGNvbW1hbmQKKyAgICAgKiBidWZmZXJzIHRvIHRo aXMgcXVldWUuCisgICAgICogSWYgc2V0IHRvIE5VTEwsIHdpbGwgYmUgc2V0IHRvIGxhdnUtaW50 ZXJuYWwgZnVuY3Rpb25zIHRoYXQgdXRpbGl6ZSBhCisgICAgICogbXV0ZXguCisgICAgICovCisg ICAgdm9pZCAoKmxvY2tfcXVldWUpKHN0cnVjdCBBVkhXRGV2aWNlQ29udGV4dCAqY3R4LCB1aW50 MzJfdCBxdWV1ZV9mYW1pbHksIHVpbnQzMl90IGluZGV4KTsKKworICAgIC8qKgorICAgICAqIFNp bWlsYXIgdG8gbG9ja19xdWV1ZSgpLCB1bmxvY2tzIGEgcXVldWUuIE11c3Qgb25seSBiZSBjYWxs ZWQgYWZ0ZXIgbG9ja2luZy4KKyAgICAgKi8KKyAgICB2b2lkICgqdW5sb2NrX3F1ZXVlKShzdHJ1 Y3QgQVZIV0RldmljZUNvbnRleHQgKmN0eCwgdWludDMyX3QgcXVldWVfZmFtaWx5LCB1aW50MzJf dCBpbmRleCk7CisKKyAgICAvKioKKyAgICAgKiBRdWV1ZSBmYW1pbGllcyB1c2VkLiBNdXN0IGJl IHByZWZlcmVudGlhbGx5IG9yZGVyZWQuIExpc3QgbWF5IGNvbnRhaW4KKyAgICAgKiBkdXBsaWNh dGVzLgorICAgICAqCisgICAgICogRm9yIGNvbXBhdGliaWxpdHkgcmVhc29ucywgYWxsIHRoZSBl bmFibGVkIHF1ZXVlIGZhbWlsaWVzIGxpc3RlZCBhYm92ZQorICAgICAqIChxdWV1ZV9mYW1pbHlf KHR4L2NvbXAvZW5jb2RlL2RlY29kZSlfaW5kZXgpIG11c3QgYWxzbyBiZSBpbmNsdWRlZCBpbgor ICAgICAqIHRoaXMgbGlzdCB1bnRpbCB0aGV5J3JlIHJlbW92ZWQgYWZ0ZXIgZGVwcmVjYXRpb24u CisgICAgICovCisgICAgQVZWdWxrYW5EZXZpY2VRdWV1ZUZhbWlseSBxZls2NF07CisgICAgaW50 IG5iX3FmOworfSBBVlZ1bGthbkRldmljZUNvbnRleHQ7CisKKy8qKgorICogRGVmaW5lcyB0aGUg YmVoYXZpb3VyIG9mIGZyYW1lIGFsbG9jYXRpb24uCisgKi8KK3R5cGVkZWYgZW51bSBBVlZrRnJh bWVGbGFncyB7CisgICAgLyogVW5sZXNzIHRoaXMgZmxhZyBpcyBzZXQsIGF1dG9kZXRlY3RlZCBm bGFncyB3aWxsIGJlIE9SJ2QgYmFzZWQgb24gdGhlCisgICAgICogZGV2aWNlIGFuZCB0aWxpbmcg ZHVyaW5nIGF2X2h3ZnJhbWVfY3R4X2luaXQoKS4gKi8KKyAgICBBVl9WS19GUkFNRV9GTEFHX05P TkUgICAgICAgICAgICAgID0gKDFVTEwgPDwgMCksCisKKyAgICAvKiBEaXNhYmxlcyBtdWx0aXBs YW5lIGltYWdlcy4KKyAgICAgKiBUaGlzIGlzIHJlcXVpcmVkIHRvIGV4cG9ydC9pbXBvcnQgaW1h Z2VzIGZyb20gQ1VEQS4gKi8KKyAgICBBVl9WS19GUkFNRV9GTEFHX0RJU0FCTEVfTVVMVElQTEFO RSA9ICgxVUxMIDw8IDIpLAorfSBBVlZrRnJhbWVGbGFnczsKKworLyoqCisgKiBBbGxvY2F0ZWQg YXMgQVZIV0ZyYW1lc0NvbnRleHQuaHdjdHgsIHVzZWQgdG8gc2V0IHBvb2wtc3BlY2lmaWMgb3B0 aW9ucworICovCit0eXBlZGVmIHN0cnVjdCBBVlZ1bGthbkZyYW1lc0NvbnRleHQgeworICAgIC8q KgorICAgICAqIENvbnRyb2xzIHRoZSB0aWxpbmcgb2YgYWxsb2NhdGVkIGZyYW1lcy4KKyAgICAg KiBJZiBsZWZ0IGFzIFZLX0lNQUdFX1RJTElOR19PUFRJTUFMICgwKSwgd2lsbCB1c2Ugb3B0aW1h bCB0aWxpbmcuCisgICAgICogQ2FuIGJlIHNldCB0byBWS19JTUFHRV9USUxJTkdfTElORUFSIHRv IGZvcmNlIGxpbmVhciBpbWFnZXMsCisgICAgICogb3IgVktfSU1BR0VfVElMSU5HX0RSTV9GT1JN QVRfTU9ESUZJRVJfRVhUIHRvIGZvcmNlIERNQUJVRi1iYWNrZWQKKyAgICAgKiBpbWFnZXMuCisg ICAgICogQG5vdGUgSW1wb3J0ZWQgZnJhbWVzIGZyb20gb3RoZXIgQVBJcyBpZ25vcmUgdGhpcy4K KyAgICAgKi8KKyAgICBWa0ltYWdlVGlsaW5nIHRpbGluZzsKKworICAgIC8qKgorICAgICAqIERl ZmluZXMgZXh0cmEgdXNhZ2Ugb2Ygb3V0cHV0IGZyYW1lcy4gSWYgbm9uLXplcm8sIGFsbCBmbGFn cyBNVVNUIGJlCisgICAgICogc3VwcG9ydGVkIGJ5IHRoZSBWa0Zvcm1hdC4gT3RoZXJ3aXNlLCB3 aWxsIHVzZSBzdXBwb3J0ZWQgZmxhZ3MgYW1vbmdzdDoKKyAgICAgKiAtIFZLX0lNQUdFX1VTQUdF X1NBTVBMRURfQklUCisgICAgICogLSBWS19JTUFHRV9VU0FHRV9TVE9SQUdFX0JJVAorICAgICAq IC0gVktfSU1BR0VfVVNBR0VfVFJBTlNGRVJfU1JDX0JJVAorICAgICAqIC0gVktfSU1BR0VfVVNB R0VfVFJBTlNGRVJfRFNUX0JJVAorICAgICAqLworICAgIFZrSW1hZ2VVc2FnZUZsYWdCaXRzIHVz YWdlOworCisgICAgLyoqCisgICAgICogRXh0ZW5zaW9uIGRhdGEgZm9yIGltYWdlIGNyZWF0aW9u LgorICAgICAqIElmIERSTSB0aWxpbmcgaXMgdXNlZCwgYSBWa0ltYWdlRHJtRm9ybWF0TW9kaWZp ZXJMaXN0Q3JlYXRlSW5mb0VYVCBzdHJ1Y3R1cmUKKyAgICAgKiBjYW4gYmUgYWRkZWQgdG8gc3Bl Y2lmeSB0aGUgZXhhY3QgbW9kaWZpZXIgdG8gdXNlLgorICAgICAqCisgICAgICogQWRkaXRpb25h bCBzdHJ1Y3R1cmVzIG1heSBiZSBhZGRlZCBhdCBhdl9od2ZyYW1lX2N0eF9pbml0KCkgdGltZSwK KyAgICAgKiB3aGljaCB3aWxsIGJlIGZyZWVkIGF1dG9tYXRpY2FsbHkgb24gdW5pbml0KCksIHNv IHVzZXJzIG11c3Qgb25seSBmcmVlCisgICAgICogYW55IHN0cnVjdHVyZXMgdGhleSd2ZSBhbGxv Y2F0ZWQgdGhlbXNlbHZlcy4KKyAgICAgKi8KKyAgICB2b2lkICpjcmVhdGVfcG5leHQ7CisKKyAg ICAvKioKKyAgICAgKiBFeHRlbnNpb24gZGF0YSBmb3IgbWVtb3J5IGFsbG9jYXRpb24uIE11c3Qg aGF2ZSBhcyBtYW55IGVudHJpZXMgYXMKKyAgICAgKiB0aGUgbnVtYmVyIG9mIHBsYW5lcyBvZiB0 aGUgc3dfZm9ybWF0LgorICAgICAqIFRoaXMgd2lsbCBiZSBjaGFpbmVkIHRvIFZrRXhwb3J0TWVt b3J5QWxsb2NhdGVJbmZvLCB3aGljaCBpcyB1c2VkCisgICAgICogdG8gbWFrZSBhbGwgcG9vbCBp bWFnZXMgZXhwb3J0YWJsZSB0byBvdGhlciBBUElzIGlmIHRoZSBuZWNlc3NhcnkKKyAgICAgKiBl eHRlbnNpb25zIGFyZSBwcmVzZW50IGluIGVuYWJsZWRfZGV2X2V4dGVuc2lvbnMuCisgICAgICov CisgICAgdm9pZCAqYWxsb2NfcG5leHRbQVZfTlVNX0RBVEFfUE9JTlRFUlNdOworCisgICAgLyoq CisgICAgICogQSBjb21iaW5hdGlvbiBvZiBBVlZrRnJhbWVGbGFncy4gVW5sZXNzIEFWX1ZLX0ZS QU1FX0ZMQUdfTk9ORSBpcyBzZXQsCisgICAgICogYXV0b2RldGVjdGVkIGZsYWdzIHdpbGwgYmUg T1InZCBiYXNlZCBvbiB0aGUgZGV2aWNlIGFuZCB0aWxpbmcgZHVyaW5nCisgICAgICogYXZfaHdm cmFtZV9jdHhfaW5pdCgpLgorICAgICAqLworICAgIEFWVmtGcmFtZUZsYWdzIGZsYWdzOworCisg ICAgLyoqCisgICAgICogRmxhZ3MgdG8gc2V0IGR1cmluZyBpbWFnZSBjcmVhdGlvbi4gSWYgdW5z ZXQsIGRlZmF1bHRzIHRvCisgICAgICogVktfSU1BR0VfQ1JFQVRFX0FMSUFTX0JJVC4KKyAgICAg Ki8KKyAgICBWa0ltYWdlQ3JlYXRlRmxhZ3MgaW1nX2ZsYWdzOworCisgICAgLyoqCisgICAgICog VnVsa2FuIGZvcm1hdCBmb3IgZWFjaCBpbWFnZS4gTVVTVCBiZSBjb21wYXRpYmxlIHdpdGggdGhl IHBpeGVsIGZvcm1hdC4KKyAgICAgKiBJZiB1bnNldCwgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHNl dC4KKyAgICAgKiBUaGVyZSBhcmUgYXQgbW9zdCB0d28gY29tcGF0aWJsZSBmb3JtYXRzIGZvciBh IGZyYW1lIC0gYSBtdWx0aXBsYW5lCisgICAgICogZm9ybWF0LCBhbmQgYSBzaW5nbGUtcGxhbmUg bXVsdGktaW1hZ2UgZm9ybWF0LgorICAgICAqLworICAgIFZrRm9ybWF0IGZvcm1hdFtBVl9OVU1f REFUQV9QT0lOVEVSU107CisKKyAgICAvKioKKyAgICAgKiBOdW1iZXIgb2YgbGF5ZXJzIGVhY2gg aW1hZ2Ugd2lsbCBoYXZlLgorICAgICAqLworICAgIGludCBuYl9sYXllcnM7CisKKyAgICAvKioK KyAgICAgKiBMb2NrcyBhIGZyYW1lLCBwcmV2ZW50aW5nIG90aGVyIHRocmVhZHMgZnJvbSBjaGFu Z2luZyBmcmFtZSBwcm9wZXJ0aWVzLgorICAgICAqIFVzZXJzIFNIT1VMRCBvbmx5IGV2ZXIgbG9j ayBqdXN0IGJlZm9yZSBjb21tYW5kIHN1Ym1pc3Npb24gaW4gb3JkZXIKKyAgICAgKiB0byBnZXQg YWNjdXJhdGUgZnJhbWUgcHJvcGVydGllcywgYW5kIHVubG9jayBpbW1lZGlhdGVseSBhZnRlciBj b21tYW5kCisgICAgICogc3VibWlzc2lvbiB3aXRob3V0IHdhaXRpbmcgZm9yIGl0IHRvIGZpbmlz aC4KKyAgICAgKgorICAgICAqIElmIHVuc2V0LCB3aWxsIGJlIHNldCB0byBsYXZ1LWludGVybmFs IGZ1bmN0aW9ucyB0aGF0IHV0aWxpemUgYSBtdXRleC4KKyAgICAgKi8KKyAgICB2b2lkICgqbG9j a19mcmFtZSkoc3RydWN0IEFWSFdGcmFtZXNDb250ZXh0ICpmYywgQVZWa0ZyYW1lICp2a2YpOwor CisgICAgLyoqCisgICAgICogU2ltaWxhciB0byBsb2NrX2ZyYW1lKCksIHVubG9ja3MgYSBmcmFt ZS4gTXVzdCBvbmx5IGJlIGNhbGxlZCBhZnRlciBsb2NraW5nLgorICAgICAqLworICAgIHZvaWQg KCp1bmxvY2tfZnJhbWUpKHN0cnVjdCBBVkhXRnJhbWVzQ29udGV4dCAqZmMsIEFWVmtGcmFtZSAq dmtmKTsKK30gQVZWdWxrYW5GcmFtZXNDb250ZXh0OworCisvKgorICogRnJhbWUgc3RydWN0dXJl LgorICoKKyAqIEBub3RlIHRoZSBzaXplIG9mIHRoaXMgc3RydWN0dXJlIGlzIG5vdCBwYXJ0IG9m IHRoZSBBQkksIHRvIGFsbG9jYXRlCisgKiB5b3UgbXVzdCB1c2UgQGF2X3ZrX2ZyYW1lX2FsbG9j KCkuCisgKi8KK3N0cnVjdCBBVlZrRnJhbWUgeworICAgIC8qKgorICAgICAqIFZ1bGthbiBpbWFn ZXMgdG8gd2hpY2ggdGhlIG1lbW9yeSBpcyBib3VuZCB0by4KKyAgICAgKiBNYXkgYmUgb25lIGZv ciBtdWx0aXBsYW5lIGZvcm1hdHMsIG9yIG11bHRpcGxlLgorICAgICAqLworICAgIFZrSW1hZ2Ug aW1nW0FWX05VTV9EQVRBX1BPSU5URVJTXTsKKworICAgIC8qKgorICAgICAqIFRpbGluZyBmb3Ig dGhlIGZyYW1lLgorICAgICAqLworICAgIFZrSW1hZ2VUaWxpbmcgdGlsaW5nOworCisgICAgLyoq CisgICAgICogTWVtb3J5IGJhY2tpbmcgdGhlIGltYWdlcy4gRWl0aGVyIG9uZSwgb3IgYXMgbWFu eSBhcyB0aGVyZSBhcmUgcGxhbmVzCisgICAgICogaW4gdGhlIHN3X2Zvcm1hdC4KKyAgICAgKiBJ biBjYXNlIG9mIGhhdmluZyBtdWx0aXBsZSBWa0ltYWdlcywgYnV0IG9uZSBtZW1vcnksIHRoZSBv ZmZzZXQgZmllbGQKKyAgICAgKiB3aWxsIGluZGljYXRlIHRoZSBib3VuZCBvZmZzZXQgZm9yIGVh Y2ggaW1hZ2UuCisgICAgICovCisgICAgVmtEZXZpY2VNZW1vcnkgbWVtW0FWX05VTV9EQVRBX1BP SU5URVJTXTsKKyAgICBzaXplX3Qgc2l6ZVtBVl9OVU1fREFUQV9QT0lOVEVSU107CisKKyAgICAv KioKKyAgICAgKiBPUidkIGZsYWdzIGZvciBhbGwgbWVtb3J5IGFsbG9jYXRlZAorICAgICAqLwor ICAgIFZrTWVtb3J5UHJvcGVydHlGbGFnQml0cyBmbGFnczsKKworICAgIC8qKgorICAgICAqIFVw ZGF0ZWQgYWZ0ZXIgZXZlcnkgYmFycmllci4gT25lIHBlciBWa0ltYWdlLgorICAgICAqLworICAg IFZrQWNjZXNzRmxhZ0JpdHMgYWNjZXNzW0FWX05VTV9EQVRBX1BPSU5URVJTXTsKKyAgICBWa0lt YWdlTGF5b3V0IGxheW91dFtBVl9OVU1fREFUQV9QT0lOVEVSU107CisKKyAgICAvKioKKyAgICAg KiBTeW5jaHJvbml6YXRpb24gdGltZWxpbmUgc2VtYXBob3Jlcywgb25lIGZvciBlYWNoIFZrSW1h Z2UuCisgICAgICogTXVzdCBub3QgYmUgZnJlZWQgbWFudWFsbHkuIE11c3QgYmUgd2FpdGVkIG9u IGF0IGV2ZXJ5IHN1Ym1pc3Npb24gdXNpbmcKKyAgICAgKiB0aGUgdmFsdWUgaW4gc2VtX3ZhbHVl LCBhbmQgbXVzdCBiZSBzaWduYWxsZWQgYXQgZXZlcnkgc3VibWlzc2lvbiwKKyAgICAgKiB1c2lu ZyBhbiBpbmNyZW1lbnRlZCB2YWx1ZS4KKyAgICAgKi8KKyAgICBWa1NlbWFwaG9yZSBzZW1bQVZf TlVNX0RBVEFfUE9JTlRFUlNdOworCisgICAgLyoqCisgICAgICogVXAgdG8gZGF0ZSBzZW1hcGhv cmUgdmFsdWUgYXQgd2hpY2ggZWFjaCBpbWFnZSBiZWNvbWVzIGFjY2Vzc2libGUuCisgICAgICog T25lIHBlciBWa0ltYWdlLgorICAgICAqIENsaWVudHMgbXVzdCB3YWl0IG9uIHRoaXMgdmFsdWUg d2hlbiBzdWJtaXR0aW5nIGEgY29tbWFuZCBxdWV1ZSwKKyAgICAgKiBhbmQgaW5jcmVtZW50IGl0 IHdoZW4gc2lnbmFsbGluZy4KKyAgICAgKi8KKyAgICB1aW50NjRfdCBzZW1fdmFsdWVbQVZfTlVN X0RBVEFfUE9JTlRFUlNdOworCisgICAgLyoqCisgICAgICogSW50ZXJuYWwgZGF0YS4KKyAgICAg Ki8KKyAgICBzdHJ1Y3QgQVZWa0ZyYW1lSW50ZXJuYWwgKmludGVybmFsOworCisgICAgLyoqCisg ICAgICogRGVzY3JpYmVzIHRoZSBiaW5kaW5nIG9mZnNldCBvZiBlYWNoIGltYWdlIHRvIHRoZSBW a0RldmljZU1lbW9yeS4KKyAgICAgKiBPbmUgcGVyIFZrSW1hZ2UuCisgICAgICovCisgICAgcHRy ZGlmZl90IG9mZnNldFtBVl9OVU1fREFUQV9QT0lOVEVSU107CisKKyAgICAvKioKKyAgICAgKiBR dWV1ZSBmYW1pbHkgb2YgdGhlIGltYWdlcy4gTXVzdCBiZSBWS19RVUVVRV9GQU1JTFlfSUdOT1JF RCBpZgorICAgICAqIHRoZSBpbWFnZSB3YXMgYWxsb2NhdGVkIHdpdGggdGhlIENPTkNVUlJFTlQg Y29uY3VycmVuY3kgb3B0aW9uLgorICAgICAqIE9uZSBwZXIgVmtJbWFnZS4KKyAgICAgKi8KKyAg ICB1aW50MzJfdCBxdWV1ZV9mYW1pbHlbQVZfTlVNX0RBVEFfUE9JTlRFUlNdOworfTsKKworLyoq CisgKiBBbGxvY2F0ZXMgYSBzaW5nbGUgQVZWa0ZyYW1lIGFuZCBpbml0aWFsaXplcyBldmVyeXRo aW5nIGFzIDAuCisgKiBAbm90ZSBNdXN0IGJlIGZyZWVkIHZpYSBhdl9mcmVlKCkKKyAqLworQVZW a0ZyYW1lICphdl92a19mcmFtZV9hbGxvYyh2b2lkKTsKKworLyoqCisgKiBSZXR1cm5zIHRoZSBv cHRpbWFsIHBlci1wbGFuZSBWdWxrYW4gZm9ybWF0IGZvciBhIGdpdmVuIHN3X2Zvcm1hdCwKKyAq IG9uZSBmb3IgZWFjaCBwbGFuZS4KKyAqIFJldHVybnMgTlVMTCBvbiB1bnN1cHBvcnRlZCBmb3Jt YXRzLgorICovCitjb25zdCBWa0Zvcm1hdCAqYXZfdmtmbXRfZnJvbV9waXhmbXQoZW51bSBBVlBp eGVsRm9ybWF0IHApOworCisjZW5kaWYgLyogQVZVVElMX0hXQ09OVEVYVF9WVUxLQU5fSCAqLwot LSAKMi40OS4xCgoKRnJvbSBjNTZkODlmNWRhZTI0N2Q4MzIzMjdjNjhjZjMwMTI1MWMwZjJkYmVm IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBKYW1haWthMSA8bHVrYXN6Y3oxOEB3cC5w bD4KRGF0ZTogV2VkLCAzIFNlcCAyMDI1IDEzOjE2OjUyICswMDAwClN1YmplY3Q6IFtQQVRDSCAw NDMvMTE4XSBDaGFuZ2luZyB2dWxrYW4gZmlsZSBkaXJlY3RvcnkKCi0tLQogbGliYXZ1dGlsL3Z1 bGthbi5jIHwgMzAyOSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQogMSBmaWxlIGNoYW5nZWQsIDMwMjkgZGVsZXRpb25zKC0pCiBkZWxldGUgbW9kZSAxMDA2NDQg bGliYXZ1dGlsL3Z1bGthbi5jCgpkaWZmIC0tZ2l0IGEvbGliYXZ1dGlsL3Z1bGthbi5jIGIvbGli YXZ1dGlsL3Z1bGthbi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZjc1NWFkNmY3 Li4wMDAwMDAwMDAwCi0tLSBhL2xpYmF2dXRpbC92dWxrYW4uYworKysgL2Rldi9udWxsCkBAIC0x LDMwMjkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgTHlubmUKLSAqCi0gKiBUaGlzIGZp bGUgaXMgcGFydCBvZiBGRm1wZWcuCi0gKgotICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlv dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt cyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNo ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIu MSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K LSAqCi0gKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl IHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp bXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2 ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFs b25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBG b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24s IE1BIDAyMTEwLTEzMDEgVVNBCi0gKi8KLQotI2luY2x1ZGUgImF2YXNzZXJ0LmgiCi0jaW5jbHVk ZSAibWVtLmgiCi0KLSNpbmNsdWRlICJ2dWxrYW4uaCIKLSNpbmNsdWRlICJsaWJhdnV0aWwvdnVs a2FuX2xvYWRlci5oIgotCi1jb25zdCBWa0NvbXBvbmVudE1hcHBpbmcgZmZfY29tcF9pZGVudGl0 eV9tYXAgPSB7Ci0gICAgLnIgPSBWS19DT01QT05FTlRfU1dJWlpMRV9JREVOVElUWSwKLSAgICAu ZyA9IFZLX0NPTVBPTkVOVF9TV0laWkxFX0lERU5USVRZLAotICAgIC5iID0gVktfQ09NUE9ORU5U X1NXSVpaTEVfSURFTlRJVFksCi0gICAgLmEgPSBWS19DT01QT05FTlRfU1dJWlpMRV9JREVOVElU WSwKLX07Ci0KLS8qIENvbnZlcnRzIHJldHVybiB2YWx1ZXMgdG8gc3RyaW5ncyAqLwotY29uc3Qg Y2hhciAqZmZfdmtfcmV0MnN0cihWa1Jlc3VsdCByZXMpCi17Ci0jZGVmaW5lIENBU0UoVkFMKSBj YXNlIFZBTDogcmV0dXJuICNWQUwKLSAgICBzd2l0Y2ggKHJlcykgewotICAgIENBU0UoVktfU1VD Q0VTUyk7Ci0gICAgQ0FTRShWS19OT1RfUkVBRFkpOwotICAgIENBU0UoVktfVElNRU9VVCk7Ci0g ICAgQ0FTRShWS19FVkVOVF9TRVQpOwotICAgIENBU0UoVktfRVZFTlRfUkVTRVQpOwotICAgIENB U0UoVktfSU5DT01QTEVURSk7Ci0gICAgQ0FTRShWS19FUlJPUl9PVVRfT0ZfSE9TVF9NRU1PUlkp OwotICAgIENBU0UoVktfRVJST1JfT1VUX09GX0RFVklDRV9NRU1PUlkpOwotICAgIENBU0UoVktf RVJST1JfSU5JVElBTElaQVRJT05fRkFJTEVEKTsKLSAgICBDQVNFKFZLX0VSUk9SX0RFVklDRV9M T1NUKTsKLSAgICBDQVNFKFZLX0VSUk9SX01FTU9SWV9NQVBfRkFJTEVEKTsKLSAgICBDQVNFKFZL X0VSUk9SX0xBWUVSX05PVF9QUkVTRU5UKTsKLSAgICBDQVNFKFZLX0VSUk9SX0VYVEVOU0lPTl9O T1RfUFJFU0VOVCk7Ci0gICAgQ0FTRShWS19FUlJPUl9GRUFUVVJFX05PVF9QUkVTRU5UKTsKLSAg ICBDQVNFKFZLX0VSUk9SX0lOQ09NUEFUSUJMRV9EUklWRVIpOwotICAgIENBU0UoVktfRVJST1Jf VE9PX01BTllfT0JKRUNUUyk7Ci0gICAgQ0FTRShWS19FUlJPUl9GT1JNQVRfTk9UX1NVUFBPUlRF RCk7Ci0gICAgQ0FTRShWS19FUlJPUl9GUkFHTUVOVEVEX1BPT0wpOwotICAgIENBU0UoVktfRVJS T1JfVU5LTk9XTik7Ci0gICAgQ0FTRShWS19FUlJPUl9PVVRfT0ZfUE9PTF9NRU1PUlkpOwotICAg IENBU0UoVktfRVJST1JfSU5WQUxJRF9FWFRFUk5BTF9IQU5ETEUpOwotICAgIENBU0UoVktfRVJS T1JfRlJBR01FTlRBVElPTik7Ci0gICAgQ0FTRShWS19FUlJPUl9JTlZBTElEX09QQVFVRV9DQVBU VVJFX0FERFJFU1MpOwotICAgIENBU0UoVktfUElQRUxJTkVfQ09NUElMRV9SRVFVSVJFRCk7Ci0g ICAgQ0FTRShWS19FUlJPUl9TVVJGQUNFX0xPU1RfS0hSKTsKLSAgICBDQVNFKFZLX0VSUk9SX05B VElWRV9XSU5ET1dfSU5fVVNFX0tIUik7Ci0gICAgQ0FTRShWS19TVUJPUFRJTUFMX0tIUik7Ci0g ICAgQ0FTRShWS19FUlJPUl9PVVRfT0ZfREFURV9LSFIpOwotICAgIENBU0UoVktfRVJST1JfSU5D T01QQVRJQkxFX0RJU1BMQVlfS0hSKTsKLSAgICBDQVNFKFZLX0VSUk9SX1ZBTElEQVRJT05fRkFJ TEVEX0VYVCk7Ci0gICAgQ0FTRShWS19FUlJPUl9JTlZBTElEX1NIQURFUl9OVik7Ci0gICAgQ0FT RShWS19FUlJPUl9WSURFT19QSUNUVVJFX0xBWU9VVF9OT1RfU1VQUE9SVEVEX0tIUik7Ci0gICAg Q0FTRShWS19FUlJPUl9WSURFT19QUk9GSUxFX09QRVJBVElPTl9OT1RfU1VQUE9SVEVEX0tIUik7 Ci0gICAgQ0FTRShWS19FUlJPUl9WSURFT19QUk9GSUxFX0ZPUk1BVF9OT1RfU1VQUE9SVEVEX0tI Uik7Ci0gICAgQ0FTRShWS19FUlJPUl9WSURFT19QUk9GSUxFX0NPREVDX05PVF9TVVBQT1JURURf S0hSKTsKLSAgICBDQVNFKFZLX0VSUk9SX1ZJREVPX1NURF9WRVJTSU9OX05PVF9TVVBQT1JURURf S0hSKTsKLSAgICBDQVNFKFZLX0VSUk9SX0lOVkFMSURfRFJNX0ZPUk1BVF9NT0RJRklFUl9QTEFO RV9MQVlPVVRfRVhUKTsKLSAgICBDQVNFKFZLX0VSUk9SX05PVF9QRVJNSVRURURfS0hSKTsKLSAg ICBDQVNFKFZLX0VSUk9SX0ZVTExfU0NSRUVOX0VYQ0xVU0lWRV9NT0RFX0xPU1RfRVhUKTsKLSAg ICBDQVNFKFZLX1RIUkVBRF9JRExFX0tIUik7Ci0gICAgQ0FTRShWS19USFJFQURfRE9ORV9LSFIp OwotICAgIENBU0UoVktfT1BFUkFUSU9OX0RFRkVSUkVEX0tIUik7Ci0gICAgQ0FTRShWS19PUEVS QVRJT05fTk9UX0RFRkVSUkVEX0tIUik7Ci0gICAgZGVmYXVsdDogcmV0dXJuICJVbmtub3duIGVy cm9yIjsKLSAgICB9Ci0jdW5kZWYgQ0FTRQotfQotCi0vKiBNYWxpdGlhIHB1cmEsIEtocm9ub3Mg Ki8KLSNkZWZpbmUgRk5fTUFQX1RPKGRzdF90LCBkc3RfbmFtZSwgc3JjX3QsIHNyY19uYW1lKSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBkc3RfdCBmZl92a19tYXBfICMj c3JjX25hbWUjIyBfdG9fICMjZHN0X25hbWUoc3JjX3Qgc3JjKSBcCi0gICAgeyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc Ci0gICAgICAgIGRzdF90IGRzdCA9IDB4MDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCi0gICAgICAgIE1BUF9UTyhWS19GT1JNQVRfRkVBVFVSRV8yX1NB TVBMRURfSU1BR0VfQklULCAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICBWS19J TUFHRV9VU0FHRV9TQU1QTEVEX0JJVCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g ICAgICAgIE1BUF9UTyhWS19GT1JNQVRfRkVBVFVSRV8yX1RSQU5TRkVSX1NSQ19CSVQsICAgICAg ICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICBWS19JTUFHRV9VU0FHRV9UUkFOU0ZFUl9T UkNfQklUKTsgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIE1BUF9UTyhWS19GT1JN QVRfRkVBVFVSRV8yX1RSQU5TRkVSX0RTVF9CSVQsICAgICAgICAgICAgICAgICAgICBcCi0gICAg ICAgICAgICAgICBWS19JTUFHRV9VU0FHRV9UUkFOU0ZFUl9EU1RfQklUKTsgICAgICAgICAgICAg ICAgICAgICAgICBcCi0gICAgICAgIE1BUF9UTyhWS19GT1JNQVRfRkVBVFVSRV8yX1NUT1JBR0Vf SU1BR0VfQklULCAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICBWS19JTUFHRV9V U0FHRV9TVE9SQUdFX0JJVCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAg IE1BUF9UTyhWS19GT1JNQVRfRkVBVFVSRV8yX0NPTE9SX0FUVEFDSE1FTlRfQklULCAgICAgICAg ICAgICAgICBcCi0gICAgICAgICAgICAgICBWS19JTUFHRV9VU0FHRV9DT0xPUl9BVFRBQ0hNRU5U X0JJVCk7ICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIE1BUF9UTyhWS19GT1JNQVRfRkVB VFVSRV8yX1ZJREVPX0RFQ09ERV9PVVRQVVRfQklUX0tIUiwgICAgICAgICBcCi0gICAgICAgICAg ICAgICBWS19JTUFHRV9VU0FHRV9WSURFT19ERUNPREVfRFNUX0JJVF9LSFIpOyAgICAgICAgICAg ICAgICBcCi0gICAgICAgIE1BUF9UTyhWS19GT1JNQVRfRkVBVFVSRV8yX1ZJREVPX0RFQ09ERV9E UEJfQklUX0tIUiwgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICBWS19JTUFHRV9VU0FHRV9W SURFT19ERUNPREVfRFBCX0JJVF9LSFIpOyAgICAgICAgICAgICAgICBcCi0gICAgICAgIE1BUF9U TyhWS19GT1JNQVRfRkVBVFVSRV8yX1ZJREVPX0VOQ09ERV9EUEJfQklUX0tIUiwgICAgICAgICAg ICBcCi0gICAgICAgICAgICAgICBWS19JTUFHRV9VU0FHRV9WSURFT19FTkNPREVfRFBCX0JJVF9L SFIpOyAgICAgICAgICAgICAgICBcCi0gICAgICAgIE1BUF9UTyhWS19GT1JNQVRfRkVBVFVSRV8y X1ZJREVPX0VOQ09ERV9JTlBVVF9CSVRfS0hSLCAgICAgICAgICBcCi0gICAgICAgICAgICAgICBW S19JTUFHRV9VU0FHRV9WSURFT19FTkNPREVfU1JDX0JJVF9LSFIpOyAgICAgICAgICAgICAgICBc Ci0gICAgICAgIE1BUF9UTyhWS19GT1JNQVRfRkVBVFVSRV8yX0hPU1RfSU1BR0VfVFJBTlNGRVJf QklUX0VYVCwgICAgICAgICBcCi0gICAgICAgICAgICAgICBWS19JTUFHRV9VU0FHRV9IT1NUX1RS QU5TRkVSX0JJVF9FWFQpOyAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHJldHVybiBkc3Q7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g ICAgfQotCi0jZGVmaW5lIE1BUF9UTyhmbGFnMSwgZmxhZzIpIGlmIChzcmMgJiBmbGFnMikgZHN0 IHw9IGZsYWcxOwotRk5fTUFQX1RPKFZrRm9ybWF0RmVhdHVyZUZsYWdCaXRzMiwgZmVhdHMsIFZr SW1hZ2VVc2FnZUZsYWdzLCB1c2FnZSkKLSN1bmRlZiBNQVBfVE8KLSNkZWZpbmUgTUFQX1RPKGZs YWcxLCBmbGFnMikgaWYgKHNyYyAmIGZsYWcxKSBkc3QgfD0gZmxhZzI7Ci1GTl9NQVBfVE8oVmtJ bWFnZVVzYWdlRmxhZ3MsIHVzYWdlLCBWa0Zvcm1hdEZlYXR1cmVGbGFnQml0czIsIGZlYXRzKQot I3VuZGVmIE1BUF9UTwotI3VuZGVmIEZOX01BUF9UTwotCi1zdGF0aWMgdm9pZCBsb2FkX2VuYWJs ZWRfcWZzKEZGVnVsa2FuQ29udGV4dCAqcykKLXsKLSAgICBzLT5uYl9xZnMgPSAwOwotICAgIGZv ciAoaW50IGkgPSAwOyBpIDwgcy0+aHdjdHgtPm5iX3FmOyBpKyspIHsKLSAgICAgICAgLyogU2tp cCBkdXBsaWNhdGVzICovCi0gICAgICAgIGludCBza2lwID0gMDsKLSAgICAgICAgZm9yIChpbnQg aiA9IDA7IGogPCBzLT5uYl9xZnM7IGorKykgewotICAgICAgICAgICAgaWYgKHMtPnFmc1tqXSA9 PSBzLT5od2N0eC0+cWZbaV0uaWR4KSB7Ci0gICAgICAgICAgICAgICAgc2tpcCA9IDE7Ci0gICAg ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYg KHNraXApCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBzLT5xZnNbcy0+bmJfcWZz KytdID0gcy0+aHdjdHgtPnFmW2ldLmlkeDsKLSAgICB9Ci19Ci0KLWludCBmZl92a19sb2FkX3By b3BzKEZGVnVsa2FuQ29udGV4dCAqcykKLXsKLSAgICBGRlZ1bGthbkZ1bmN0aW9ucyAqdmsgPSAm cy0+dmtmbjsKLQotICAgIHMtPnByb3BzID0gKFZrUGh5c2ljYWxEZXZpY2VQcm9wZXJ0aWVzMikg ewotICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9QSFlTSUNBTF9ERVZJQ0VfUFJP UEVSVElFU18yLAotICAgIH07Ci0KLSAgICBGRl9WS19TVFJVQ1RfRVhUKHMsICZzLT5wcm9wcywg JnMtPnByb3BzXzExLCBGRl9WS19FWFRfTk9fRkxBRywKLSAgICAgICAgICAgICAgICAgICAgIFZL X1NUUlVDVFVSRV9UWVBFX1BIWVNJQ0FMX0RFVklDRV9WVUxLQU5fMV8xX1BST1BFUlRJRVMpOwot ICAgIEZGX1ZLX1NUUlVDVF9FWFQocywgJnMtPnByb3BzLCAmcy0+ZHJpdmVyX3Byb3BzLCBGRl9W S19FWFRfTk9fRkxBRywKLSAgICAgICAgICAgICAgICAgICAgIFZLX1NUUlVDVFVSRV9UWVBFX1BI WVNJQ0FMX0RFVklDRV9EUklWRVJfUFJPUEVSVElFUyk7Ci0gICAgRkZfVktfU1RSVUNUX0VYVChz LCAmcy0+cHJvcHMsICZzLT5zdWJncm91cF9wcm9wcywgRkZfVktfRVhUX05PX0ZMQUcsCi0gICAg ICAgICAgICAgICAgICAgICBWS19TVFJVQ1RVUkVfVFlQRV9QSFlTSUNBTF9ERVZJQ0VfU1VCR1JP VVBfU0laRV9DT05UUk9MX1BST1BFUlRJRVMpOwotCi0gICAgRkZfVktfU1RSVUNUX0VYVChzLCAm cy0+cHJvcHMsICZzLT5wdXNoX2Rlc2NfcHJvcHMsIEZGX1ZLX0VYVF9QVVNIX0RFU0NSSVBUT1Is Ci0gICAgICAgICAgICAgICAgICAgICBWS19TVFJVQ1RVUkVfVFlQRV9QSFlTSUNBTF9ERVZJQ0Vf UFVTSF9ERVNDUklQVE9SX1BST1BFUlRJRVNfS0hSKTsKLSAgICBGRl9WS19TVFJVQ1RfRVhUKHMs ICZzLT5wcm9wcywgJnMtPmhwcm9wcywgRkZfVktfRVhUX0VYVEVSTkFMX0hPU1RfTUVNT1JZLAot ICAgICAgICAgICAgICAgICAgICAgVktfU1RSVUNUVVJFX1RZUEVfUEhZU0lDQUxfREVWSUNFX0VY VEVSTkFMX01FTU9SWV9IT1NUX1BST1BFUlRJRVNfRVhUKTsKLSAgICBGRl9WS19TVFJVQ1RfRVhU KHMsICZzLT5wcm9wcywgJnMtPmNvb3BfbWF0cml4X3Byb3BzLCBGRl9WS19FWFRfQ09PUF9NQVRS SVgsCi0gICAgICAgICAgICAgICAgICAgICBWS19TVFJVQ1RVUkVfVFlQRV9QSFlTSUNBTF9ERVZJ Q0VfQ09PUEVSQVRJVkVfTUFUUklYX1BST1BFUlRJRVNfS0hSKTsKLSAgICBGRl9WS19TVFJVQ1Rf RVhUKHMsICZzLT5wcm9wcywgJnMtPmRlc2NfYnVmX3Byb3BzLCBGRl9WS19FWFRfREVTQ1JJUFRP Ul9CVUZGRVIsCi0gICAgICAgICAgICAgICAgICAgICBWS19TVFJVQ1RVUkVfVFlQRV9QSFlTSUNB TF9ERVZJQ0VfREVTQ1JJUFRPUl9CVUZGRVJfUFJPUEVSVElFU19FWFQpOwotICAgIEZGX1ZLX1NU UlVDVF9FWFQocywgJnMtPnByb3BzLCAmcy0+b3B0aWNhbF9mbG93X3Byb3BzLCBGRl9WS19FWFRf T1BUSUNBTF9GTE9XLAotICAgICAgICAgICAgICAgICAgICAgVktfU1RSVUNUVVJFX1RZUEVfUEhZ U0lDQUxfREVWSUNFX09QVElDQUxfRkxPV19QUk9QRVJUSUVTX05WKTsKLSAgICBGRl9WS19TVFJV Q1RfRVhUKHMsICZzLT5wcm9wcywgJnMtPmhvc3RfaW1hZ2VfcHJvcHMsIEZGX1ZLX0VYVF9IT1NU X0lNQUdFX0NPUFksCi0gICAgICAgICAgICAgICAgICAgICBWS19TVFJVQ1RVUkVfVFlQRV9QSFlT SUNBTF9ERVZJQ0VfSE9TVF9JTUFHRV9DT1BZX1BST1BFUlRJRVNfRVhUKTsKLQotICAgIHMtPmZl YXRzID0gKFZrUGh5c2ljYWxEZXZpY2VGZWF0dXJlczIpIHsKLSAgICAgICAgLnNUeXBlID0gVktf U1RSVUNUVVJFX1RZUEVfUEhZU0lDQUxfREVWSUNFX0ZFQVRVUkVTXzIsCi0gICAgfTsKLQotICAg IEZGX1ZLX1NUUlVDVF9FWFQocywgJnMtPmZlYXRzLCAmcy0+ZmVhdHNfMTIsIEZGX1ZLX0VYVF9O T19GTEFHLAotICAgICAgICAgICAgICAgICAgICAgVktfU1RSVUNUVVJFX1RZUEVfUEhZU0lDQUxf REVWSUNFX1ZVTEtBTl8xXzJfRkVBVFVSRVMpOwotICAgIEZGX1ZLX1NUUlVDVF9FWFQocywgJnMt PmZlYXRzLCAmcy0+YXRvbWljX2Zsb2F0X2ZlYXRzLCBGRl9WS19FWFRfQVRPTUlDX0ZMT0FULAot ICAgICAgICAgICAgICAgICAgICAgVktfU1RSVUNUVVJFX1RZUEVfUEhZU0lDQUxfREVWSUNFX1NI QURFUl9BVE9NSUNfRkxPQVRfRkVBVFVSRVNfRVhUKTsKLQotICAgIC8qIFRyeSBhbGxvY2F0aW5n IDEwMjQgbGF5b3V0cyAqLwotICAgIHMtPmhvc3RfaW1hZ2VfY29weV9sYXlvdXRzID0gYXZfbWFs bG9jKHNpemVvZigqcy0+aG9zdF9pbWFnZV9jb3B5X2xheW91dHMpKjEwMjQpOwotICAgIHMtPmhv c3RfaW1hZ2VfcHJvcHMucENvcHlTcmNMYXlvdXRzID0gcy0+aG9zdF9pbWFnZV9jb3B5X2xheW91 dHM7Ci0gICAgcy0+aG9zdF9pbWFnZV9wcm9wcy5jb3B5U3JjTGF5b3V0Q291bnQgPSA1MTI7Ci0g ICAgcy0+aG9zdF9pbWFnZV9wcm9wcy5wQ29weURzdExheW91dHMgPSBzLT5ob3N0X2ltYWdlX2Nv cHlfbGF5b3V0cyArIDUxMjsKLSAgICBzLT5ob3N0X2ltYWdlX3Byb3BzLmNvcHlEc3RMYXlvdXRD b3VudCA9IDUxMjsKLQotICAgIHZrLT5HZXRQaHlzaWNhbERldmljZVByb3BlcnRpZXMyKHMtPmh3 Y3R4LT5waHlzX2RldiwgJnMtPnByb3BzKTsKLQotICAgIC8qIENoZWNrIGlmIHdlIGhhZCBlbm91 Z2ggbWVtb3J5IGZvciBhbGwgbGF5b3V0cyAqLwotICAgIGlmIChzLT5ob3N0X2ltYWdlX3Byb3Bz LmNvcHlTcmNMYXlvdXRDb3VudCA9PSA1MTIgfHwKLSAgICAgICAgcy0+aG9zdF9pbWFnZV9wcm9w cy5jb3B5RHN0TGF5b3V0Q291bnQgPT0gNTEyKSB7Ci0gICAgICAgIFZrSW1hZ2VMYXlvdXQgKm5l d19hcnJheTsKLSAgICAgICAgc2l6ZV90IG5ld19zaXplOwotICAgICAgICBzLT5ob3N0X2ltYWdl X3Byb3BzLnBDb3B5U3JjTGF5b3V0cyA9Ci0gICAgICAgIHMtPmhvc3RfaW1hZ2VfcHJvcHMucENv cHlEc3RMYXlvdXRzID0gTlVMTDsKLSAgICAgICAgcy0+aG9zdF9pbWFnZV9wcm9wcy5jb3B5U3Jj TGF5b3V0Q291bnQgPQotICAgICAgICBzLT5ob3N0X2ltYWdlX3Byb3BzLmNvcHlEc3RMYXlvdXRD b3VudCA9IDA7Ci0gICAgICAgIHZrLT5HZXRQaHlzaWNhbERldmljZVByb3BlcnRpZXMyKHMtPmh3 Y3R4LT5waHlzX2RldiwgJnMtPnByb3BzKTsKLQotICAgICAgICBuZXdfc2l6ZSA9IHMtPmhvc3Rf aW1hZ2VfcHJvcHMuY29weVNyY0xheW91dENvdW50ICsKLSAgICAgICAgICAgICAgICAgICBzLT5o b3N0X2ltYWdlX3Byb3BzLmNvcHlEc3RMYXlvdXRDb3VudDsKLSAgICAgICAgbmV3X3NpemUgKj0g c2l6ZW9mKCpzLT5ob3N0X2ltYWdlX2NvcHlfbGF5b3V0cyk7Ci0gICAgICAgIG5ld19hcnJheSA9 IGF2X3JlYWxsb2Mocy0+aG9zdF9pbWFnZV9jb3B5X2xheW91dHMsIG5ld19zaXplKTsKLSAgICAg ICAgaWYgKCFuZXdfYXJyYXkpCi0gICAgICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOwot Ci0gICAgICAgIHMtPmhvc3RfaW1hZ2VfY29weV9sYXlvdXRzID0gbmV3X2FycmF5OwotICAgICAg ICBzLT5ob3N0X2ltYWdlX3Byb3BzLnBDb3B5U3JjTGF5b3V0cyA9IG5ld19hcnJheTsKLSAgICAg ICAgcy0+aG9zdF9pbWFnZV9wcm9wcy5wQ29weURzdExheW91dHMgPSBuZXdfYXJyYXkgKyBzLT5o b3N0X2ltYWdlX3Byb3BzLmNvcHlTcmNMYXlvdXRDb3VudDsKLSAgICAgICAgdmstPkdldFBoeXNp Y2FsRGV2aWNlUHJvcGVydGllczIocy0+aHdjdHgtPnBoeXNfZGV2LCAmcy0+cHJvcHMpOwotICAg IH0KLQotICAgIHZrLT5HZXRQaHlzaWNhbERldmljZU1lbW9yeVByb3BlcnRpZXMocy0+aHdjdHgt PnBoeXNfZGV2LCAmcy0+bXByb3BzKTsKLSAgICB2ay0+R2V0UGh5c2ljYWxEZXZpY2VGZWF0dXJl czIocy0+aHdjdHgtPnBoeXNfZGV2LCAmcy0+ZmVhdHMpOwotCi0gICAgbG9hZF9lbmFibGVkX3Fm cyhzKTsKLQotICAgIGlmIChzLT5xZl9wcm9wcykKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICB2 ay0+R2V0UGh5c2ljYWxEZXZpY2VRdWV1ZUZhbWlseVByb3BlcnRpZXMyKHMtPmh3Y3R4LT5waHlz X2RldiwgJnMtPnRvdF9uYl9xZnMsIE5VTEwpOwotCi0gICAgcy0+cWZfcHJvcHMgPSBhdl9jYWxs b2Mocy0+dG90X25iX3Fmcywgc2l6ZW9mKCpzLT5xZl9wcm9wcykpOwotICAgIGlmICghcy0+cWZf cHJvcHMpCi0gICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7Ci0KLSAgICBzLT5xdWVyeV9w cm9wcyA9IGF2X2NhbGxvYyhzLT50b3RfbmJfcWZzLCBzaXplb2YoKnMtPnF1ZXJ5X3Byb3BzKSk7 Ci0gICAgaWYgKCFzLT5xZl9wcm9wcykgewotICAgICAgICBhdl9mcmVlcCgmcy0+cWZfcHJvcHMp OwotICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOwotICAgIH0KLQotICAgIHMtPnZpZGVv X3Byb3BzID0gYXZfY2FsbG9jKHMtPnRvdF9uYl9xZnMsIHNpemVvZigqcy0+dmlkZW9fcHJvcHMp KTsKLSAgICBpZiAoIXMtPnZpZGVvX3Byb3BzKSB7Ci0gICAgICAgIGF2X2ZyZWVwKCZzLT5xZl9w cm9wcyk7Ci0gICAgICAgIGF2X2ZyZWVwKCZzLT5xdWVyeV9wcm9wcyk7Ci0gICAgICAgIHJldHVy biBBVkVSUk9SKEVOT01FTSk7Ci0gICAgfQotCi0gICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8 IHMtPnRvdF9uYl9xZnM7IGkrKykgewotICAgICAgICBzLT5xZl9wcm9wc1tpXSA9IChWa1F1ZXVl RmFtaWx5UHJvcGVydGllczIpIHsKLSAgICAgICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9U WVBFX1FVRVVFX0ZBTUlMWV9QUk9QRVJUSUVTXzIsCi0gICAgICAgIH07Ci0KLSAgICAgICAgRkZf VktfU1RSVUNUX0VYVChzLCAmcy0+cWZfcHJvcHNbaV0sICZzLT5xdWVyeV9wcm9wc1tpXSwgRkZf VktfRVhUX05PX0ZMQUcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgVktfU1RSVUNUVVJFX1RZ UEVfUVVFVUVfRkFNSUxZX1FVRVJZX1JFU1VMVF9TVEFUVVNfUFJPUEVSVElFU19LSFIpOwotICAg ICAgICBGRl9WS19TVFJVQ1RfRVhUKHMsICZzLT5xZl9wcm9wc1tpXSwgJnMtPnZpZGVvX3Byb3Bz W2ldLCBGRl9WS19FWFRfVklERU9fUVVFVUUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgVktf U1RSVUNUVVJFX1RZUEVfUVVFVUVfRkFNSUxZX1ZJREVPX1BST1BFUlRJRVNfS0hSKTsKLSAgICB9 Ci0KLSAgICB2ay0+R2V0UGh5c2ljYWxEZXZpY2VRdWV1ZUZhbWlseVByb3BlcnRpZXMyKHMtPmh3 Y3R4LT5waHlzX2RldiwgJnMtPnRvdF9uYl9xZnMsIHMtPnFmX3Byb3BzKTsKLQotICAgIGlmIChz LT5leHRlbnNpb25zICYgRkZfVktfRVhUX0NPT1BfTUFUUklYKSB7Ci0gICAgICAgIHZrLT5HZXRQ aHlzaWNhbERldmljZUNvb3BlcmF0aXZlTWF0cml4UHJvcGVydGllc0tIUihzLT5od2N0eC0+cGh5 c19kZXYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAmcy0+Y29vcF9tYXRfcHJvcHNfbmIsIE5VTEwpOwotCi0gICAgICAgIGlmIChz LT5jb29wX21hdF9wcm9wc19uYikgewotICAgICAgICAgICAgcy0+Y29vcF9tYXRfcHJvcHMgPSBh dl9tYWxsb2NfYXJyYXkocy0+Y29vcF9tYXRfcHJvcHNfbmIsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoVmtDb29wZXJhdGl2ZU1hdHJpeFBy b3BlcnRpZXNLSFIpKTsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcy0+Y29vcF9t YXRfcHJvcHNfbmI7IGkrKykgewotICAgICAgICAgICAgICAgIHMtPmNvb3BfbWF0X3Byb3BzW2ld ID0gKFZrQ29vcGVyYXRpdmVNYXRyaXhQcm9wZXJ0aWVzS0hSKSB7Ci0gICAgICAgICAgICAgICAg ICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX0NPT1BFUkFUSVZFX01BVFJJWF9QUk9QRVJU SUVTX0tIUiwKLSAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg ICB2ay0+R2V0UGh5c2ljYWxEZXZpY2VDb29wZXJhdGl2ZU1hdHJpeFByb3BlcnRpZXNLSFIocy0+ aHdjdHgtPnBoeXNfZGV2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICZzLT5jb29wX21hdF9wcm9wc19uYiwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz LT5jb29wX21hdF9wcm9wcyk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0K LQotQVZWdWxrYW5EZXZpY2VRdWV1ZUZhbWlseSAqZmZfdmtfcWZfZmluZChGRlZ1bGthbkNvbnRl eHQgKnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZrUXVldWVG bGFnQml0cyBkZXZfZmFtaWx5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBWa1ZpZGVvQ29kZWNPcGVyYXRpb25GbGFnQml0c0tIUiB2aWRfb3BzKQotewotICAgIGZv ciAoaW50IGkgPSAwOyBpIDwgcy0+aHdjdHgtPm5iX3FmOyBpKyspIHsKLSAgICAgICAgaWYgKChz LT5od2N0eC0+cWZbaV0uZmxhZ3MgJiBkZXZfZmFtaWx5KSAmJgotICAgICAgICAgICAgKHMtPmh3 Y3R4LT5xZltpXS52aWRlb19jYXBzICYgdmlkX29wcykgPT0gdmlkX29wcykgewotICAgICAgICAg ICAgcmV0dXJuICZzLT5od2N0eC0+cWZbaV07Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJu IE5VTEw7Ci19Ci0KLXZvaWQgZmZfdmtfZXhlY19wb29sX2ZyZWUoRkZWdWxrYW5Db250ZXh0ICpz LCBGRlZrRXhlY1Bvb2wgKnBvb2wpCi17Ci0gICAgRkZWdWxrYW5GdW5jdGlvbnMgKnZrID0gJnMt PnZrZm47Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHBvb2wtPnBvb2xfc2l6ZTsgaSsrKSB7 Ci0gICAgICAgIEZGVmtFeGVjQ29udGV4dCAqZSA9ICZwb29sLT5jb250ZXh0c1tpXTsKLQotICAg ICAgICBpZiAoZS0+ZmVuY2UpIHsKLSAgICAgICAgICAgIGlmIChlLT5oYWRfc3VibWlzc2lvbikK LSAgICAgICAgICAgICAgICB2ay0+V2FpdEZvckZlbmNlcyhzLT5od2N0eC0+YWN0X2RldiwgMSwg JmUtPmZlbmNlLCBWS19UUlVFLCBVSU5UNjRfTUFYKTsKLSAgICAgICAgICAgIHZrLT5EZXN0cm95 RmVuY2Uocy0+aHdjdHgtPmFjdF9kZXYsIGUtPmZlbmNlLCBzLT5od2N0eC0+YWxsb2MpOwotICAg ICAgICB9Ci0KLSAgICAgICAgZmZfdmtfZXhlY19kaXNjYXJkX2RlcHMocywgZSk7Ci0KLSAgICAg ICAgYXZfZnJlZShlLT5mcmFtZV9kZXBzKTsKLSAgICAgICAgYXZfZnJlZShlLT5zd19mcmFtZV9k ZXBzKTsKLSAgICAgICAgYXZfZnJlZShlLT5idWZfZGVwcyk7Ci0gICAgICAgIGF2X2ZyZWUoZS0+ cXVldWVfZmFtaWx5X2RzdCk7Ci0gICAgICAgIGF2X2ZyZWUoZS0+bGF5b3V0X2RzdCk7Ci0gICAg ICAgIGF2X2ZyZWUoZS0+YWNjZXNzX2RzdCk7Ci0gICAgICAgIGF2X2ZyZWUoZS0+ZnJhbWVfdXBk YXRlKTsKLSAgICAgICAgYXZfZnJlZShlLT5mcmFtZV9sb2NrZWQpOwotICAgICAgICBhdl9mcmVl KGUtPnNlbV9zaWcpOwotICAgICAgICBhdl9mcmVlKGUtPnNlbV9zaWdfdmFsX2RzdCk7Ci0gICAg ICAgIGF2X2ZyZWUoZS0+c2VtX3dhaXQpOwotICAgIH0KLQotICAgIC8qIEZyZWUgc2hhZGVyLXNw ZWNpZmljIGRhdGEgKi8KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHBvb2wtPm5iX3JlZ19zaGQ7 IGkrKykgewotICAgICAgICBGRlZ1bGthblNoYWRlckRhdGEgKnNkID0gJnBvb2wtPnJlZ19zaGRb aV07Ci0KLSAgICAgICAgaWYgKHMtPmV4dGVuc2lvbnMgJiBGRl9WS19FWFRfREVTQ1JJUFRPUl9C VUZGRVIpIHsKLSAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgc2QtPm5iX2Rlc2NyaXB0 b3Jfc2V0czsgaisrKSB7Ci0gICAgICAgICAgICAgICAgRkZWdWxrYW5EZXNjcmlwdG9yU2V0RGF0 YSAqc2V0X2RhdGEgPSAmc2QtPmRlc2Nfc2V0X2J1ZltqXTsKLSAgICAgICAgICAgICAgICBpZiAo c2V0X2RhdGEtPmJ1Zi5tZW0pCi0gICAgICAgICAgICAgICAgICAgIGZmX3ZrX3VubWFwX2J1ZmZl cihzLCAmc2V0X2RhdGEtPmJ1ZiwgMCk7Ci0gICAgICAgICAgICAgICAgZmZfdmtfZnJlZV9idWYo cywgJnNldF9kYXRhLT5idWYpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAg aWYgKHNkLT5kZXNjX3Bvb2wpCi0gICAgICAgICAgICB2ay0+RGVzdHJveURlc2NyaXB0b3JQb29s KHMtPmh3Y3R4LT5hY3RfZGV2LCBzZC0+ZGVzY19wb29sLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzLT5od2N0eC0+YWxsb2MpOwotCi0gICAgICAgIGF2X2ZyZWVwKCZz ZC0+ZGVzY19zZXRfYnVmKTsKLSAgICAgICAgYXZfZnJlZXAoJnNkLT5kZXNjX2JpbmQpOwotICAg ICAgICBhdl9mcmVlcCgmc2QtPmRlc2Nfc2V0cyk7Ci0gICAgfQotCi0gICAgYXZfZnJlZXAoJnBv b2wtPnJlZ19zaGQpOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwb29sLT5wb29sX3NpemU7 IGkrKykgewotICAgICAgICBpZiAocG9vbC0+Y21kX2J1Zl9wb29sc1tpXSkKLSAgICAgICAgICAg IHZrLT5GcmVlQ29tbWFuZEJ1ZmZlcnMocy0+aHdjdHgtPmFjdF9kZXYsIHBvb2wtPmNtZF9idWZf cG9vbHNbaV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsICZwb29sLT5j bWRfYnVmc1tpXSk7Ci0KLSAgICAgICAgaWYgKHBvb2wtPmNtZF9idWZfcG9vbHNbaV0pCi0gICAg ICAgICAgICB2ay0+RGVzdHJveUNvbW1hbmRQb29sKHMtPmh3Y3R4LT5hY3RfZGV2LCBwb29sLT5j bWRfYnVmX3Bvb2xzW2ldLCBzLT5od2N0eC0+YWxsb2MpOwotICAgIH0KLSAgICBpZiAocG9vbC0+ cXVlcnlfcG9vbCkKLSAgICAgICAgdmstPkRlc3Ryb3lRdWVyeVBvb2wocy0+aHdjdHgtPmFjdF9k ZXYsIHBvb2wtPnF1ZXJ5X3Bvb2wsIHMtPmh3Y3R4LT5hbGxvYyk7Ci0KLSAgICBhdl9mcmVlKHBv b2wtPnF1ZXJ5X2RhdGEpOwotICAgIGF2X2ZyZWUocG9vbC0+Y21kX2J1Zl9wb29scyk7Ci0gICAg YXZfZnJlZShwb29sLT5jbWRfYnVmcyk7Ci0gICAgYXZfZnJlZShwb29sLT5jb250ZXh0cyk7Ci19 Ci0KLWludCBmZl92a19leGVjX3Bvb2xfaW5pdChGRlZ1bGthbkNvbnRleHQgKnMsIEFWVnVsa2Fu RGV2aWNlUXVldWVGYW1pbHkgKnFmLAotICAgICAgICAgICAgICAgICAgICAgICAgIEZGVmtFeGVj UG9vbCAqcG9vbCwgaW50IG5iX2NvbnRleHRzLAotICAgICAgICAgICAgICAgICAgICAgICAgIGlu dCBuYl9xdWVyaWVzLCBWa1F1ZXJ5VHlwZSBxdWVyeV90eXBlLCBpbnQgcXVlcnlfNjRiaXQsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqcXVlcnlfY3JlYXRlX3BuZXh0KQot ewotICAgIGludCBlcnI7Ci0gICAgVmtSZXN1bHQgcmV0OwotICAgIEZGVnVsa2FuRnVuY3Rpb25z ICp2ayA9ICZzLT52a2ZuOwotCi0gICAgVmtDb21tYW5kUG9vbENyZWF0ZUluZm8gY3F1ZXVlX2Ny ZWF0ZTsKLSAgICBWa0NvbW1hbmRCdWZmZXJBbGxvY2F0ZUluZm8gY2J1Zl9jcmVhdGU7Ci0KLSAg ICBjb25zdCBWa1F1ZXJ5UG9vbFZpZGVvRW5jb2RlRmVlZGJhY2tDcmVhdGVJbmZvS0hSICplZiA9 IE5VTEw7Ci0KLSAgICBhdG9taWNfaW5pdCgmcG9vbC0+aWR4LCAwKTsKLQotICAgIGlmIChxdWVy eV90eXBlID09IFZLX1FVRVJZX1RZUEVfVklERU9fRU5DT0RFX0ZFRURCQUNLX0tIUikgewotICAg ICAgICBlZiA9IGZmX3ZrX2ZpbmRfc3RydWN0KHF1ZXJ5X2NyZWF0ZV9wbmV4dCwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBWS19TVFJVQ1RVUkVfVFlQRV9RVUVSWV9QT09MX1ZJREVP X0VOQ09ERV9GRUVEQkFDS19DUkVBVEVfSU5GT19LSFIpOwotICAgICAgICBpZiAoIWVmKQotICAg ICAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKLSAgICB9Ci0KLSAgICAvKiBBbGxvY2F0 ZSBzcGFjZSBmb3IgY29tbWFuZCBidWZmZXIgcG9vbHMgKi8KLSAgICBwb29sLT5jbWRfYnVmX3Bv b2xzID0gYXZfbWFsbG9jKG5iX2NvbnRleHRzKnNpemVvZigqcG9vbC0+Y21kX2J1Zl9wb29scykp OwotICAgIGlmICghcG9vbC0+Y21kX2J1Zl9wb29scykgewotICAgICAgICBlcnIgPSBBVkVSUk9S KEVOT01FTSk7Ci0gICAgICAgIGdvdG8gZmFpbDsKLSAgICB9Ci0KLSAgICAvKiBBbGxvY2F0ZSBz cGFjZSBmb3IgY29tbWFuZCBidWZmZXJzICovCi0gICAgcG9vbC0+Y21kX2J1ZnMgPSBhdl9tYWxs b2MobmJfY29udGV4dHMqc2l6ZW9mKCpwb29sLT5jbWRfYnVmcykpOwotICAgIGlmICghcG9vbC0+ Y21kX2J1ZnMpIHsKLSAgICAgICAgZXJyID0gQVZFUlJPUihFTk9NRU0pOwotICAgICAgICBnb3Rv IGZhaWw7Ci0gICAgfQotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuYl9jb250ZXh0czsgaSsr KSB7Ci0gICAgICAgIC8qIENyZWF0ZSBjb21tYW5kIHBvb2wgKi8KLSAgICAgICAgY3F1ZXVlX2Ny ZWF0ZSA9IChWa0NvbW1hbmRQb29sQ3JlYXRlSW5mbykgewotICAgICAgICAgICAgLnNUeXBlICAg ICAgICAgICAgICA9IFZLX1NUUlVDVFVSRV9UWVBFX0NPTU1BTkRfUE9PTF9DUkVBVEVfSU5GTywK LSAgICAgICAgICAgIC5mbGFncyAgICAgICAgICAgICAgPSBWS19DT01NQU5EX1BPT0xfQ1JFQVRF X1RSQU5TSUVOVF9CSVQgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZLX0NP TU1BTkRfUE9PTF9DUkVBVEVfUkVTRVRfQ09NTUFORF9CVUZGRVJfQklULAotICAgICAgICAgICAg LnF1ZXVlRmFtaWx5SW5kZXggICA9IHFmLT5pZHgsCi0gICAgICAgIH07Ci0KLSAgICAgICAgcmV0 ID0gdmstPkNyZWF0ZUNvbW1hbmRQb29sKHMtPmh3Y3R4LT5hY3RfZGV2LCAmY3F1ZXVlX2NyZWF0 ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMtPmh3Y3R4LT5hbGxvYywg JnBvb2wtPmNtZF9idWZfcG9vbHNbaV0pOwotICAgICAgICBpZiAocmV0ICE9IFZLX1NVQ0NFU1Mp IHsKLSAgICAgICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJST1IsICJDb21tYW5kIHBvb2wgY3Jl YXRpb24gZmFpbHVyZTogJXNcbiIsCi0gICAgICAgICAgICAgICAgICAgZmZfdmtfcmV0MnN0cihy ZXQpKTsKLSAgICAgICAgICAgIGVyciA9IEFWRVJST1JfRVhURVJOQUw7Ci0gICAgICAgICAgICBn b3RvIGZhaWw7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiBBbGxvY2F0ZSBjb21tYW5kIGJ1ZmZl ciAqLwotICAgICAgICBjYnVmX2NyZWF0ZSA9IChWa0NvbW1hbmRCdWZmZXJBbGxvY2F0ZUluZm8p IHsKLSAgICAgICAgICAgIC5zVHlwZSAgICAgICAgICAgICAgPSBWS19TVFJVQ1RVUkVfVFlQRV9D T01NQU5EX0JVRkZFUl9BTExPQ0FURV9JTkZPLAotICAgICAgICAgICAgLmxldmVsICAgICAgICAg ICAgICA9IFZLX0NPTU1BTkRfQlVGRkVSX0xFVkVMX1BSSU1BUlksCi0gICAgICAgICAgICAuY29t bWFuZFBvb2wgICAgICAgID0gcG9vbC0+Y21kX2J1Zl9wb29sc1tpXSwKLSAgICAgICAgICAgIC5j b21tYW5kQnVmZmVyQ291bnQgPSAxLAotICAgICAgICB9OwotICAgICAgICByZXQgPSB2ay0+QWxs b2NhdGVDb21tYW5kQnVmZmVycyhzLT5od2N0eC0+YWN0X2RldiwgJmNidWZfY3JlYXRlLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcG9vbC0+Y21kX2J1ZnNbaV0p OwotICAgICAgICBpZiAocmV0ICE9IFZLX1NVQ0NFU1MpIHsKLSAgICAgICAgICAgIGF2X2xvZyhz LCBBVl9MT0dfRVJST1IsICJDb21tYW5kIGJ1ZmZlciBhbGxvYyBmYWlsdXJlOiAlc1xuIiwKLSAg ICAgICAgICAgICAgICAgICBmZl92a19yZXQyc3RyKHJldCkpOwotICAgICAgICAgICAgZXJyID0g QVZFUlJPUl9FWFRFUk5BTDsKLSAgICAgICAgICAgIGdvdG8gZmFpbDsKLSAgICAgICAgfQotICAg IH0KLQotICAgIC8qIFF1ZXJ5IHBvb2wgKi8KLSAgICBpZiAobmJfcXVlcmllcykgewotICAgICAg ICBWa1F1ZXJ5UG9vbENyZWF0ZUluZm8gcXVlcnlfcG9vbF9pbmZvID0gewotICAgICAgICAgICAg LnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfUVVFUllfUE9PTF9DUkVBVEVfSU5GTywKLSAgICAg ICAgICAgIC5wTmV4dCA9IHF1ZXJ5X2NyZWF0ZV9wbmV4dCwKLSAgICAgICAgICAgIC5xdWVyeVR5 cGUgPSBxdWVyeV90eXBlLAotICAgICAgICAgICAgLnF1ZXJ5Q291bnQgPSBuYl9xdWVyaWVzKm5i X2NvbnRleHRzLAotICAgICAgICB9OwotICAgICAgICByZXQgPSB2ay0+Q3JlYXRlUXVlcnlQb29s KHMtPmh3Y3R4LT5hY3RfZGV2LCAmcXVlcnlfcG9vbF9pbmZvLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHMtPmh3Y3R4LT5hbGxvYywgJnBvb2wtPnF1ZXJ5X3Bvb2wpOwotICAg ICAgICBpZiAocmV0ICE9IFZLX1NVQ0NFU1MpIHsKLSAgICAgICAgICAgIGF2X2xvZyhzLCBBVl9M T0dfRVJST1IsICJRdWVyeSBwb29sIGFsbG9jIGZhaWx1cmU6ICVzXG4iLAotICAgICAgICAgICAg ICAgICAgIGZmX3ZrX3JldDJzdHIocmV0KSk7Ci0gICAgICAgICAgICBlcnIgPSBBVkVSUk9SX0VY VEVSTkFMOwotICAgICAgICAgICAgZ290byBmYWlsOwotICAgICAgICB9Ci0KLSAgICAgICAgcG9v bC0+bmJfcXVlcmllcyA9IG5iX3F1ZXJpZXM7Ci0gICAgICAgIHBvb2wtPnF1ZXJ5X3N0YXR1c19z dHJpZGUgPSAxICsgMTsgLyogT25lIHJlc3VsdCwgb25lIHN0YXR1cyBieSBkZWZhdWx0ICovCi0g ICAgICAgIHBvb2wtPnF1ZXJ5X3Jlc3VsdHMgPSBuYl9xdWVyaWVzOwotICAgICAgICBwb29sLT5x dWVyeV9zdGF0dXNlcyA9IG5iX3F1ZXJpZXM7Ci0KLSAgICAgICAgLyogVmlkZW8gZW5jb2RlIHF1 ZXJpZXMgcHJvZHVjZSB0d28gcmVzdWx0cyBwZXIgcXVlcnkgKi8KLSAgICAgICAgaWYgKHF1ZXJ5 X3R5cGUgPT0gVktfUVVFUllfVFlQRV9WSURFT19FTkNPREVfRkVFREJBQ0tfS0hSKSB7Ci0gICAg ICAgICAgICBpbnQgbmJfcmVzdWx0cyA9IGF2X3BvcGNvdW50KGVmLT5lbmNvZGVGZWVkYmFja0Zs YWdzKTsKLSAgICAgICAgICAgIHBvb2wtPnF1ZXJ5X3N0YXR1c19zdHJpZGUgPSBuYl9yZXN1bHRz ICsgMTsKLSAgICAgICAgICAgIHBvb2wtPnF1ZXJ5X3Jlc3VsdHMgKj0gbmJfcmVzdWx0czsKLSAg ICAgICAgfSBlbHNlIGlmIChxdWVyeV90eXBlID09IFZLX1FVRVJZX1RZUEVfUkVTVUxUX1NUQVRV U19PTkxZX0tIUikgewotICAgICAgICAgICAgcG9vbC0+cXVlcnlfc3RhdHVzX3N0cmlkZSA9IDE7 Ci0gICAgICAgICAgICBwb29sLT5xdWVyeV9yZXN1bHRzID0gMDsKLSAgICAgICAgfQotCi0gICAg ICAgIHBvb2wtPnFkX3NpemUgPSAocG9vbC0+cXVlcnlfcmVzdWx0cyArIHBvb2wtPnF1ZXJ5X3N0 YXR1c2VzKSoocXVlcnlfNjRiaXQgPyA4IDogNCk7Ci0KLSAgICAgICAgLyogQWxsb2NhdGUgc3Bh Y2UgZm9yIHRoZSBxdWVyeSBkYXRhICovCi0gICAgICAgIHBvb2wtPnF1ZXJ5X2RhdGEgPSBhdl9j YWxsb2MobmJfY29udGV4dHMsIHBvb2wtPnFkX3NpemUpOwotICAgICAgICBpZiAoIXBvb2wtPnF1 ZXJ5X2RhdGEpIHsKLSAgICAgICAgICAgIGVyciA9IEFWRVJST1IoRU5PTUVNKTsKLSAgICAgICAg ICAgIGdvdG8gZmFpbDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qIEFsbG9jYXRlIHNwYWNl IGZvciB0aGUgY29udGV4dHMgKi8KLSAgICBwb29sLT5jb250ZXh0cyA9IGF2X2NhbGxvYyhuYl9j b250ZXh0cywgc2l6ZW9mKCpwb29sLT5jb250ZXh0cykpOwotICAgIGlmICghcG9vbC0+Y29udGV4 dHMpIHsKLSAgICAgICAgZXJyID0gQVZFUlJPUihFTk9NRU0pOwotICAgICAgICBnb3RvIGZhaWw7 Ci0gICAgfQotCi0gICAgcG9vbC0+cG9vbF9zaXplID0gbmJfY29udGV4dHM7Ci0KLSAgICAvKiBJ bml0IGNvbnRleHRzICovCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwb29sLT5wb29sX3NpemU7 IGkrKykgewotICAgICAgICBGRlZrRXhlY0NvbnRleHQgKmUgPSAmcG9vbC0+Y29udGV4dHNbaV07 Ci0gICAgICAgIFZrRmVuY2VDcmVhdGVJbmZvIGZlbmNlX2NyZWF0ZSA9IHsKLSAgICAgICAgICAg IC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX0ZFTkNFX0NSRUFURV9JTkZPLAotICAgICAgICAg ICAgLmZsYWdzID0gVktfRkVOQ0VfQ1JFQVRFX1NJR05BTEVEX0JJVCwKLSAgICAgICAgfTsKLQot ICAgICAgICAvKiBGZW5jZSAqLwotICAgICAgICByZXQgPSB2ay0+Q3JlYXRlRmVuY2Uocy0+aHdj dHgtPmFjdF9kZXYsICZmZW5jZV9jcmVhdGUsIHMtPmh3Y3R4LT5hbGxvYywKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICZlLT5mZW5jZSk7Ci0gICAgICAgIGlmIChyZXQgIT0gVktfU1VD Q0VTUykgewotICAgICAgICAgICAgYXZfbG9nKHMsIEFWX0xPR19FUlJPUiwgIkZhaWxlZCB0byBj cmVhdGUgc3VibWlzc2lvbiBmZW5jZTogJXNcbiIsCi0gICAgICAgICAgICAgICAgICAgZmZfdmtf cmV0MnN0cihyZXQpKTsKLSAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOwotICAg ICAgICB9Ci0KLSAgICAgICAgZS0+aWR4ID0gaTsKLSAgICAgICAgZS0+cGFyZW50ID0gcG9vbDsK LQotICAgICAgICAvKiBRdWVyeSBkYXRhICovCi0gICAgICAgIGUtPnF1ZXJ5X2RhdGEgPSAoKHVp bnQ4X3QgKilwb29sLT5xdWVyeV9kYXRhKSArIHBvb2wtPnFkX3NpemUqaTsKLSAgICAgICAgZS0+ cXVlcnlfaWR4ID0gbmJfcXVlcmllcyppOwotCi0gICAgICAgIC8qIENvbW1hbmQgYnVmZmVyICov Ci0gICAgICAgIGUtPmJ1ZiA9IHBvb2wtPmNtZF9idWZzW2ldOwotCi0gICAgICAgIC8qIFF1ZXVl IGluZGV4IGRpc3RyaWJ1dGlvbiAqLwotICAgICAgICBlLT5xaSA9IGkgJSBxZi0+bnVtOwotICAg ICAgICBlLT5xZiA9IHFmLT5pZHg7Ci0gICAgICAgIHZrLT5HZXREZXZpY2VRdWV1ZShzLT5od2N0 eC0+YWN0X2RldiwgcWYtPmlkeCwgZS0+cWksICZlLT5xdWV1ZSk7Ci0gICAgfQotCi0gICAgcmV0 dXJuIDA7Ci0KLWZhaWw6Ci0gICAgZmZfdmtfZXhlY19wb29sX2ZyZWUocywgcG9vbCk7Ci0gICAg cmV0dXJuIGVycjsKLX0KLQotVmtSZXN1bHQgZmZfdmtfZXhlY19nZXRfcXVlcnkoRkZWdWxrYW5D b250ZXh0ICpzLCBGRlZrRXhlY0NvbnRleHQgKmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB2b2lkICoqZGF0YSwgVmtRdWVyeVJlc3VsdEZsYWdCaXRzIGZsYWdzKQotewotICAgIEZG VnVsa2FuRnVuY3Rpb25zICp2ayA9ICZzLT52a2ZuOwotICAgIGNvbnN0IEZGVmtFeGVjUG9vbCAq cG9vbCA9IGUtPnBhcmVudDsKLSAgICBWa1F1ZXJ5UmVzdWx0RmxhZ3MgcWYgPSBmbGFncyAmIH4o VktfUVVFUllfUkVTVUxUXzY0X0JJVCB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFZLX1FVRVJZX1JFU1VMVF9XSVRIX1NUQVRVU19CSVRfS0hSKTsKLQotICAgIGlmICgh ZS0+cXVlcnlfZGF0YSkgewotICAgICAgICBhdl9sb2cocywgQVZfTE9HX0VSUk9SLCAiUmVxdWVz dGVkIGEgcXVlcnkgd2l0aCBhIE5VTEwgcXVlcnlfZGF0YSBwb2ludGVyIVxuIik7Ci0gICAgICAg IHJldHVybiBWS19JTkNPTVBMRVRFOwotICAgIH0KLQotICAgIHFmIHw9IHBvb2wtPnF1ZXJ5XzY0 Yml0ID8KLSAgICAgICAgICBWS19RVUVSWV9SRVNVTFRfNjRfQklUIDogMHgwOwotICAgIHFmIHw9 IHBvb2wtPnF1ZXJ5X3N0YXR1c2VzID8KLSAgICAgICAgICBWS19RVUVSWV9SRVNVTFRfV0lUSF9T VEFUVVNfQklUX0tIUiA6IDB4MDsKLQotICAgIGlmIChkYXRhKQotICAgICAgICAqZGF0YSA9IGUt PnF1ZXJ5X2RhdGE7Ci0KLSAgICByZXR1cm4gdmstPkdldFF1ZXJ5UG9vbFJlc3VsdHMocy0+aHdj dHgtPmFjdF9kZXYsIHBvb2wtPnF1ZXJ5X3Bvb2wsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGUtPnF1ZXJ5X2lkeCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcG9vbC0+bmJfcXVlcmllcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cG9vbC0+cWRfc2l6ZSwgZS0+cXVlcnlfZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcG9vbC0+cWRfc2l6ZSwgcWYpOwotfQotCi1GRlZrRXhlY0NvbnRleHQgKmZmX3Zr X2V4ZWNfZ2V0KEZGVnVsa2FuQ29udGV4dCAqcywgRkZWa0V4ZWNQb29sICpwb29sKQotewotICAg IHJldHVybiAmcG9vbC0+Y29udGV4dHNbYXRvbWljX2ZldGNoX2FkZCgmcG9vbC0+aWR4LCAxKSAl IHBvb2wtPnBvb2xfc2l6ZV07Ci19Ci0KLXZvaWQgZmZfdmtfZXhlY193YWl0KEZGVnVsa2FuQ29u dGV4dCAqcywgRkZWa0V4ZWNDb250ZXh0ICplKQotewotICAgIEZGVnVsa2FuRnVuY3Rpb25zICp2 ayA9ICZzLT52a2ZuOwotICAgIHZrLT5XYWl0Rm9yRmVuY2VzKHMtPmh3Y3R4LT5hY3RfZGV2LCAx LCAmZS0+ZmVuY2UsIFZLX1RSVUUsIFVJTlQ2NF9NQVgpOwotICAgIGZmX3ZrX2V4ZWNfZGlzY2Fy ZF9kZXBzKHMsIGUpOwotfQotCi1pbnQgZmZfdmtfZXhlY19zdGFydChGRlZ1bGthbkNvbnRleHQg KnMsIEZGVmtFeGVjQ29udGV4dCAqZSkKLXsKLSAgICBWa1Jlc3VsdCByZXQ7Ci0gICAgRkZWdWxr YW5GdW5jdGlvbnMgKnZrID0gJnMtPnZrZm47Ci0gICAgY29uc3QgRkZWa0V4ZWNQb29sICpwb29s ID0gZS0+cGFyZW50OwotCi0gICAgVmtDb21tYW5kQnVmZmVyQmVnaW5JbmZvIGNtZF9zdGFydCA9 IHsKLSAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfQ09NTUFORF9CVUZGRVJfQkVH SU5fSU5GTywKLSAgICAgICAgLmZsYWdzID0gVktfQ09NTUFORF9CVUZGRVJfVVNBR0VfT05FX1RJ TUVfU1VCTUlUX0JJVCwKLSAgICB9OwotCi0gICAgLyogV2FpdCBmb3IgdGhlIGZlbmNlIHRvIGJl IHNpZ25hbGxlZCAqLwotICAgIHZrLT5XYWl0Rm9yRmVuY2VzKHMtPmh3Y3R4LT5hY3RfZGV2LCAx LCAmZS0+ZmVuY2UsIFZLX1RSVUUsIFVJTlQ2NF9NQVgpOwotICAgIHZrLT5SZXNldEZlbmNlcyhz LT5od2N0eC0+YWN0X2RldiwgMSwgJmUtPmZlbmNlKTsKLQotICAgIC8qIERpc2NhcmQgcXVldWUg ZGVwZW5kZW5jaWVzICovCi0gICAgZmZfdmtfZXhlY19kaXNjYXJkX2RlcHMocywgZSk7Ci0KLSAg ICByZXQgPSB2ay0+QmVnaW5Db21tYW5kQnVmZmVyKGUtPmJ1ZiwgJmNtZF9zdGFydCk7Ci0gICAg aWYgKHJldCAhPSBWS19TVUNDRVNTKSB7Ci0gICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJST1Is ICJGYWlsZWQgdG8gc3RhcnQgY29tbWFuZCByZWNvZGluZzogJXNcbiIsCi0gICAgICAgICAgICAg ICBmZl92a19yZXQyc3RyKHJldCkpOwotICAgICAgICByZXR1cm4gQVZFUlJPUl9FWFRFUk5BTDsK LSAgICB9Ci0KLSAgICBpZiAocG9vbC0+bmJfcXVlcmllcykKLSAgICAgICAgdmstPkNtZFJlc2V0 UXVlcnlQb29sKGUtPmJ1ZiwgcG9vbC0+cXVlcnlfcG9vbCwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGUtPnF1ZXJ5X2lkeCwgcG9vbC0+bmJfcXVlcmllcyk7Ci0KLSAgICByZXR1cm4g MDsKLX0KLQotdm9pZCBmZl92a19leGVjX2Rpc2NhcmRfZGVwcyhGRlZ1bGthbkNvbnRleHQgKnMs IEZGVmtFeGVjQ29udGV4dCAqZSkKLXsKLSAgICBmb3IgKGludCBqID0gMDsgaiA8IGUtPm5iX2J1 Zl9kZXBzOyBqKyspCi0gICAgICAgIGF2X2J1ZmZlcl91bnJlZigmZS0+YnVmX2RlcHNbal0pOwot ICAgIGUtPm5iX2J1Zl9kZXBzID0gMDsKLQotICAgIGZvciAoaW50IGogPSAwOyBqIDwgZS0+bmJf c3dfZnJhbWVfZGVwczsgaisrKQotICAgICAgICBhdl9mcmFtZV9mcmVlKCZlLT5zd19mcmFtZV9k ZXBzW2pdKTsKLSAgICBlLT5uYl9zd19mcmFtZV9kZXBzID0gMDsKLQotICAgIGZvciAoaW50IGog PSAwOyBqIDwgZS0+bmJfZnJhbWVfZGVwczsgaisrKSB7Ci0gICAgICAgIEFWRnJhbWUgKmYgPSBl LT5mcmFtZV9kZXBzW2pdOwotICAgICAgICBpZiAoZS0+ZnJhbWVfbG9ja2VkW2pdKSB7Ci0gICAg ICAgICAgICBBVkhXRnJhbWVzQ29udGV4dCAqaHdmYyA9IChBVkhXRnJhbWVzQ29udGV4dCAqKWYt Pmh3X2ZyYW1lc19jdHgtPmRhdGE7Ci0gICAgICAgICAgICBBVlZ1bGthbkZyYW1lc0NvbnRleHQg KnZrZmMgPSBod2ZjLT5od2N0eDsKLSAgICAgICAgICAgIEFWVmtGcmFtZSAqdmtmID0gKEFWVmtG cmFtZSAqKWYtPmRhdGFbMF07Ci0gICAgICAgICAgICB2a2ZjLT51bmxvY2tfZnJhbWUoaHdmYywg dmtmKTsKLSAgICAgICAgICAgIGUtPmZyYW1lX2xvY2tlZFtqXSA9IDA7Ci0gICAgICAgIH0KLSAg ICAgICAgZS0+ZnJhbWVfdXBkYXRlW2pdID0gMDsKLSAgICB9Ci0gICAgZS0+bmJfZnJhbWVfZGVw cyA9IDA7Ci0KLSAgICBlLT5zZW1fd2FpdF9jbnQgPSAwOwotICAgIGUtPnNlbV9zaWdfY250ID0g MDsKLSAgICBlLT5zZW1fc2lnX3ZhbF9kc3RfY250ID0gMDsKLX0KLQotaW50IGZmX3ZrX2V4ZWNf YWRkX2RlcF9idWYoRkZWdWxrYW5Db250ZXh0ICpzLCBGRlZrRXhlY0NvbnRleHQgKmUsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICBBVkJ1ZmZlclJlZiAqKmRlcHMsIGludCBuYl9kZXBzLCBp bnQgcmVmKQotewotICAgIEFWQnVmZmVyUmVmICoqZHN0ID0gYXZfZmFzdF9yZWFsbG9jKGUtPmJ1 Zl9kZXBzLCAmZS0+YnVmX2RlcHNfYWxsb2Nfc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoZS0+bmJfYnVmX2RlcHMgKyBuYl9kZXBzKSAqIHNpemVvZigqZHN0 KSk7Ci0gICAgaWYgKCFkc3QpIHsKLSAgICAgICAgZmZfdmtfZXhlY19kaXNjYXJkX2RlcHMocywg ZSk7Ci0gICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7Ci0gICAgfQotCi0gICAgZS0+YnVm X2RlcHMgPSBkc3Q7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG5iX2RlcHM7IGkrKykgewot ICAgICAgICBpZiAoIWRlcHNbaV0pCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBl LT5idWZfZGVwc1tlLT5uYl9idWZfZGVwc10gPSByZWYgPyBhdl9idWZmZXJfcmVmKGRlcHNbaV0p IDogZGVwc1tpXTsKLSAgICAgICAgaWYgKCFlLT5idWZfZGVwc1tlLT5uYl9idWZfZGVwc10pIHsK LSAgICAgICAgICAgIGZmX3ZrX2V4ZWNfZGlzY2FyZF9kZXBzKHMsIGUpOwotICAgICAgICAgICAg cmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKLSAgICAgICAgfQotICAgICAgICBlLT5uYl9idWZfZGVw cysrOwotICAgIH0KLQotICAgIHJldHVybiAwOwotfQotCi1pbnQgZmZfdmtfZXhlY19hZGRfZGVw X3N3X2ZyYW1lKEZGVnVsa2FuQ29udGV4dCAqcywgRkZWa0V4ZWNDb250ZXh0ICplLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBBVkZyYW1lICpmKQotewotICAgIEFWRnJhbWUgKipk c3QgPSBhdl9mYXN0X3JlYWxsb2MoZS0+c3dfZnJhbWVfZGVwcywgJmUtPnN3X2ZyYW1lX2RlcHNf YWxsb2Nfc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlLT5uYl9z d19mcmFtZV9kZXBzICsgMSkgKiBzaXplb2YoKmRzdCkpOwotICAgIGlmICghZHN0KSB7Ci0gICAg ICAgIGZmX3ZrX2V4ZWNfZGlzY2FyZF9kZXBzKHMsIGUpOwotICAgICAgICByZXR1cm4gQVZFUlJP UihFTk9NRU0pOwotICAgIH0KLQotICAgIGUtPnN3X2ZyYW1lX2RlcHMgPSBkc3Q7Ci0KLSAgICBl LT5zd19mcmFtZV9kZXBzW2UtPm5iX3N3X2ZyYW1lX2RlcHNdID0gYXZfZnJhbWVfY2xvbmUoZik7 Ci0gICAgaWYgKCFlLT5zd19mcmFtZV9kZXBzW2UtPm5iX3N3X2ZyYW1lX2RlcHNdKSB7Ci0gICAg ICAgIGZmX3ZrX2V4ZWNfZGlzY2FyZF9kZXBzKHMsIGUpOwotICAgICAgICByZXR1cm4gQVZFUlJP UihFTk9NRU0pOwotICAgIH0KLQotICAgIGUtPm5iX3N3X2ZyYW1lX2RlcHMrKzsKLQotICAgIHJl dHVybiAwOwotfQotCi0jZGVmaW5lIEFSUl9SRUFMTE9DKHN0ciwgYXJyLCBhbGxvY19zLCBjbnQp ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBkbyB7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg ICAgICBhcnIgPSBhdl9mYXN0X3JlYWxsb2Moc3RyLT5hcnIsIGFsbG9jX3MsIChjbnQgKyAxKSpz aXplb2YoKmFycikpOyBcCi0gICAgICAgIGlmICghYXJyKSB7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIGZmX3ZrX2V4 ZWNfZGlzY2FyZF9kZXBzKHMsIGUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot ICAgICAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCi0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgc3RyLT5hcnIg PSBhcnI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAotICAgIH0gd2hpbGUgKDApCi0KLXR5cGVkZWYgc3RydWN0IFRlbXBTeW5jQ3R4IHsKLSAgICBp bnQgbmJfc2VtOwotICAgIFZrU2VtYXBob3JlIHNlbVtdOwotfSBUZW1wU3luY0N0eDsKLQotc3Rh dGljIHZvaWQgZGVzdHJveV90bXBfc2VtYXBob3Jlcyh2b2lkICpvcGFxdWUsIHVpbnQ4X3QgKmRh dGEpCi17Ci0gICAgRkZWdWxrYW5Db250ZXh0ICpzID0gb3BhcXVlOwotICAgIEZGVnVsa2FuRnVu Y3Rpb25zICp2ayA9ICZzLT52a2ZuOwotICAgIFRlbXBTeW5jQ3R4ICp0cyA9IChUZW1wU3luY0N0 eCAqKWRhdGE7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHRzLT5uYl9zZW07IGkrKykKLSAg ICAgICAgdmstPkRlc3Ryb3lTZW1hcGhvcmUocy0+aHdjdHgtPmFjdF9kZXYsIHRzLT5zZW1baV0s IHMtPmh3Y3R4LT5hbGxvYyk7Ci0KLSAgICBhdl9mcmVlKHRzKTsKLX0KLQotaW50IGZmX3ZrX2V4 ZWNfYWRkX2RlcF93YWl0X3NlbShGRlZ1bGthbkNvbnRleHQgKnMsIEZGVmtFeGVjQ29udGV4dCAq ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmtTZW1hcGhvcmUgc2VtLCB1aW50 NjRfdCB2YWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZrUGlwZWxpbmVTdGFn ZUZsYWdCaXRzMiBzdGFnZSkKLXsKLSAgICBWa1NlbWFwaG9yZVN1Ym1pdEluZm8gKnNlbV93YWl0 OwotICAgIEFSUl9SRUFMTE9DKGUsIHNlbV93YWl0LCAmZS0+c2VtX3dhaXRfYWxsb2MsIGUtPnNl bV93YWl0X2NudCk7Ci0KLSAgICBlLT5zZW1fd2FpdFtlLT5zZW1fd2FpdF9jbnQrK10gPSAoVmtT ZW1hcGhvcmVTdWJtaXRJbmZvKSB7Ci0gICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBF X1NFTUFQSE9SRV9TVUJNSVRfSU5GTywKLSAgICAgICAgLnNlbWFwaG9yZSA9IHNlbSwKLSAgICAg ICAgLnZhbHVlID0gdmFsLAotICAgICAgICAuc3RhZ2VNYXNrID0gc3RhZ2UsCi0gICAgfTsKLQot ICAgIHJldHVybiAwOwotfQotCi1pbnQgZmZfdmtfZXhlY19hZGRfZGVwX2Jvb2xfc2VtKEZGVnVs a2FuQ29udGV4dCAqcywgRkZWa0V4ZWNDb250ZXh0ICplLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBWa1NlbWFwaG9yZSAqc2VtLCBpbnQgbmIsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFZrUGlwZWxpbmVTdGFnZUZsYWdCaXRzMiBzdGFnZSwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaW50IHdhaXQpCi17Ci0gICAgaW50IGVycjsKLSAgICBzaXpl X3QgYnVmX3NpemU7Ci0gICAgQVZCdWZmZXJSZWYgKmJ1ZjsKLSAgICBUZW1wU3luY0N0eCAqdHM7 Ci0gICAgRkZWdWxrYW5GdW5jdGlvbnMgKnZrID0gJnMtPnZrZm47Ci0KLSAgICAvKiBEbyBub3Qg dHJhbnNmZXIgb3duZXJzaGlwIGlmIHdlJ3JlIHNpZ25hbGxpbmcgYSBiaW5hcnkgc2VtYXBob3Jl LAotICAgICAqIHNpbmNlIHdlJ3JlIHByb2JhYmx5IGV4cG9ydGluZyBpdC4gKi8KLSAgICBpZiAo IXdhaXQpIHsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuYjsgaSsrKSB7Ci0gICAgICAg ICAgICBWa1NlbWFwaG9yZVN1Ym1pdEluZm8gKnNlbV9zaWc7Ci0gICAgICAgICAgICBBUlJfUkVB TExPQyhlLCBzZW1fc2lnLCAmZS0+c2VtX3NpZ19hbGxvYywgZS0+c2VtX3NpZ19jbnQpOwotCi0g ICAgICAgICAgICBlLT5zZW1fc2lnW2UtPnNlbV9zaWdfY250KytdID0gKFZrU2VtYXBob3JlU3Vi bWl0SW5mbykgewotICAgICAgICAgICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX1NF TUFQSE9SRV9TVUJNSVRfSU5GTywKLSAgICAgICAgICAgICAgICAuc2VtYXBob3JlID0gc2VtW2ld LAotICAgICAgICAgICAgICAgIC5zdGFnZU1hc2sgPSBzdGFnZSwKLSAgICAgICAgICAgIH07Ci0g ICAgICAgIH0KLQotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBidWZfc2l6ZSA9IHNp emVvZigqdHMpICsgc2l6ZW9mKFZrU2VtYXBob3JlKSpuYjsKLSAgICB0cyA9IGF2X21hbGxvY3oo YnVmX3NpemUpOwotICAgIGlmICghdHMpIHsKLSAgICAgICAgZXJyID0gQVZFUlJPUihFTk9NRU0p OwotICAgICAgICBnb3RvIGZhaWw7Ci0gICAgfQotCi0gICAgbWVtY3B5KHRzLT5zZW0sIHNlbSwg bmIqc2l6ZW9mKCpzZW0pKTsKLSAgICB0cy0+bmJfc2VtID0gbmI7Ci0KLSAgICBidWYgPSBhdl9i dWZmZXJfY3JlYXRlKCh1aW50OF90ICopdHMsIGJ1Zl9zaXplLCBkZXN0cm95X3RtcF9zZW1hcGhv cmVzLCBzLCAwKTsKLSAgICBpZiAoIWJ1ZikgewotICAgICAgICBhdl9mcmVlKHRzKTsKLSAgICAg ICAgZXJyID0gQVZFUlJPUihFTk9NRU0pOwotICAgICAgICBnb3RvIGZhaWw7Ci0gICAgfQotCi0g ICAgZXJyID0gZmZfdmtfZXhlY19hZGRfZGVwX2J1ZihzLCBlLCAmYnVmLCAxLCAwKTsKLSAgICBp ZiAoZXJyIDwgMCkgewotICAgICAgICBhdl9idWZmZXJfdW5yZWYoJmJ1Zik7Ci0gICAgICAgIHJl dHVybiBlcnI7Ci0gICAgfQotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuYjsgaSsrKSB7Ci0g ICAgICAgIGVyciA9IGZmX3ZrX2V4ZWNfYWRkX2RlcF93YWl0X3NlbShzLCBlLCBzZW1baV0sIDAs IHN0YWdlKTsKLSAgICAgICAgaWYgKGVyciA8IDApCi0gICAgICAgICAgICByZXR1cm4gZXJyOwot ICAgIH0KLQotICAgIHJldHVybiAwOwotCi1mYWlsOgotICAgIGZvciAoaW50IGkgPSAwOyBpIDwg bmI7IGkrKykKLSAgICAgICAgdmstPkRlc3Ryb3lTZW1hcGhvcmUocy0+aHdjdHgtPmFjdF9kZXYs IHNlbVtpXSwgcy0+aHdjdHgtPmFsbG9jKTsKLQotICAgIHJldHVybiBlcnI7Ci19Ci0KLWludCBm Zl92a19leGVjX2FkZF9kZXBfZnJhbWUoRkZWdWxrYW5Db250ZXh0ICpzLCBGRlZrRXhlY0NvbnRl eHQgKmUsIEFWRnJhbWUgKmYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZrUGlwZWxp bmVTdGFnZUZsYWdCaXRzMiB3YWl0X3N0YWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBWa1BpcGVsaW5lU3RhZ2VGbGFnQml0czIgc2lnbmFsX3N0YWdlKQotewotICAgIHVpbnQ4X3Qg KmZyYW1lX2xvY2tlZDsKLSAgICB1aW50OF90ICpmcmFtZV91cGRhdGU7Ci0gICAgQVZGcmFtZSAq KmZyYW1lX2RlcHM7Ci0gICAgQVZCdWZmZXJSZWYgKipidWZfZGVwczsKLSAgICBWa0ltYWdlTGF5 b3V0ICpsYXlvdXRfZHN0OwotICAgIHVpbnQzMl90ICpxdWV1ZV9mYW1pbHlfZHN0OwotICAgIFZr QWNjZXNzRmxhZ0JpdHMgKmFjY2Vzc19kc3Q7Ci0KLSAgICBBVkhXRnJhbWVzQ29udGV4dCAqaHdm YyA9IChBVkhXRnJhbWVzQ29udGV4dCAqKWYtPmh3X2ZyYW1lc19jdHgtPmRhdGE7Ci0gICAgQVZW dWxrYW5GcmFtZXNDb250ZXh0ICp2a2ZjID0gaHdmYy0+aHdjdHg7Ci0gICAgQVZWa0ZyYW1lICp2 a2YgPSAoQVZWa0ZyYW1lICopZi0+ZGF0YVswXTsKLSAgICBpbnQgbmJfaW1hZ2VzID0gZmZfdmtf Y291bnRfaW1hZ2VzKHZrZik7Ci0KLSAgICAvKiBEb24ndCBhZGQgZHVwbGljYXRlcyAqLwotICAg IGZvciAoaW50IGkgPSAwOyBpIDwgZS0+bmJfZnJhbWVfZGVwczsgaSsrKQotICAgICAgICBpZiAo ZS0+ZnJhbWVfZGVwc1tpXS0+ZGF0YVswXSA9PSBmLT5kYXRhWzBdKQotICAgICAgICAgICAgcmV0 dXJuIDE7Ci0KLSAgICBBUlJfUkVBTExPQyhlLCBsYXlvdXRfZHN0LCAgICAgICAmZS0+bGF5b3V0 X2RzdF9hbGxvYywgICAgICAgZS0+bmJfZnJhbWVfZGVwcyk7Ci0gICAgQVJSX1JFQUxMT0MoZSwg cXVldWVfZmFtaWx5X2RzdCwgJmUtPnF1ZXVlX2ZhbWlseV9kc3RfYWxsb2MsIGUtPm5iX2ZyYW1l X2RlcHMpOwotICAgIEFSUl9SRUFMTE9DKGUsIGFjY2Vzc19kc3QsICAgICAgICZlLT5hY2Nlc3Nf ZHN0X2FsbG9jLCAgICAgICBlLT5uYl9mcmFtZV9kZXBzKTsKLQotICAgIEFSUl9SRUFMTE9DKGUs IGZyYW1lX2xvY2tlZCwgJmUtPmZyYW1lX2xvY2tlZF9hbGxvY19zaXplLCBlLT5uYl9mcmFtZV9k ZXBzKTsKLSAgICBBUlJfUkVBTExPQyhlLCBmcmFtZV91cGRhdGUsICZlLT5mcmFtZV91cGRhdGVf YWxsb2Nfc2l6ZSwgZS0+bmJfZnJhbWVfZGVwcyk7Ci0gICAgQVJSX1JFQUxMT0MoZSwgZnJhbWVf ZGVwcywgICAmZS0+ZnJhbWVfZGVwc19hbGxvY19zaXplLCAgIGUtPm5iX2ZyYW1lX2RlcHMpOwot Ci0gICAgLyogcHJlcGFyZV9mcmFtZSBpbiBod2NvbnRleHRfdnVsa2FuLmMgdXNlcyB0aGUgcmVn dWxhciBmcmFtZSBtYW5hZ2VtZW50Ci0gICAgICogY29kZSBidXQgaGFzIG5vIGZyYW1lIHlldCwg YW5kIGl0IGRvZXNuJ3QgbmVlZCB0byBhY3R1YWxseSBzdG9yZSBhIHJlZgotICAgICAqIHRvIHRo ZSBmcmFtZS4gKi8KLSAgICBpZiAoZi0+YnVmWzBdKSB7Ci0gICAgICAgIEFSUl9SRUFMTE9DKGUs IGJ1Zl9kZXBzLCAmZS0+YnVmX2RlcHNfYWxsb2Nfc2l6ZSwgZS0+bmJfYnVmX2RlcHMpOwotICAg ICAgICBlLT5idWZfZGVwc1tlLT5uYl9idWZfZGVwc10gPSBhdl9idWZmZXJfcmVmKGYtPmJ1Zlsw XSk7Ci0gICAgICAgIGlmICghZS0+YnVmX2RlcHNbZS0+bmJfYnVmX2RlcHNdKSB7Ci0gICAgICAg ICAgICBmZl92a19leGVjX2Rpc2NhcmRfZGVwcyhzLCBlKTsKLSAgICAgICAgICAgIHJldHVybiBB VkVSUk9SKEVOT01FTSk7Ci0gICAgICAgIH0KLSAgICAgICAgZS0+bmJfYnVmX2RlcHMrKzsKLSAg ICB9Ci0KLSAgICBlLT5mcmFtZV9kZXBzW2UtPm5iX2ZyYW1lX2RlcHNdID0gZjsKLQotICAgIHZr ZmMtPmxvY2tfZnJhbWUoaHdmYywgdmtmKTsKLSAgICBlLT5mcmFtZV9sb2NrZWRbZS0+bmJfZnJh bWVfZGVwc10gPSAxOwotICAgIGUtPmZyYW1lX3VwZGF0ZVtlLT5uYl9mcmFtZV9kZXBzXSA9IDA7 Ci0gICAgZS0+bmJfZnJhbWVfZGVwcysrOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuYl9p bWFnZXM7IGkrKykgewotICAgICAgICBWa1NlbWFwaG9yZVN1Ym1pdEluZm8gKnNlbV93YWl0Owot ICAgICAgICBWa1NlbWFwaG9yZVN1Ym1pdEluZm8gKnNlbV9zaWc7Ci0gICAgICAgIHVpbnQ2NF90 ICoqc2VtX3NpZ192YWxfZHN0OwotCi0gICAgICAgIEFSUl9SRUFMTE9DKGUsIHNlbV93YWl0LCAm ZS0+c2VtX3dhaXRfYWxsb2MsIGUtPnNlbV93YWl0X2NudCk7Ci0gICAgICAgIEFSUl9SRUFMTE9D KGUsIHNlbV9zaWcsICZlLT5zZW1fc2lnX2FsbG9jLCBlLT5zZW1fc2lnX2NudCk7Ci0gICAgICAg IEFSUl9SRUFMTE9DKGUsIHNlbV9zaWdfdmFsX2RzdCwgJmUtPnNlbV9zaWdfdmFsX2RzdF9hbGxv YywgZS0+c2VtX3NpZ192YWxfZHN0X2NudCk7Ci0KLSAgICAgICAgZS0+c2VtX3dhaXRbZS0+c2Vt X3dhaXRfY250KytdID0gKFZrU2VtYXBob3JlU3VibWl0SW5mbykgewotICAgICAgICAgICAgLnNU eXBlID0gVktfU1RSVUNUVVJFX1RZUEVfU0VNQVBIT1JFX1NVQk1JVF9JTkZPLAotICAgICAgICAg ICAgLnNlbWFwaG9yZSA9IHZrZi0+c2VtW2ldLAotICAgICAgICAgICAgLnZhbHVlID0gdmtmLT5z ZW1fdmFsdWVbaV0sCi0gICAgICAgICAgICAuc3RhZ2VNYXNrID0gd2FpdF9zdGFnZSwKLSAgICAg ICAgfTsKLQotICAgICAgICBlLT5zZW1fc2lnW2UtPnNlbV9zaWdfY250KytdID0gKFZrU2VtYXBo b3JlU3VibWl0SW5mbykgewotICAgICAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVf U0VNQVBIT1JFX1NVQk1JVF9JTkZPLAotICAgICAgICAgICAgLnNlbWFwaG9yZSA9IHZrZi0+c2Vt W2ldLAotICAgICAgICAgICAgLnZhbHVlID0gdmtmLT5zZW1fdmFsdWVbaV0gKyAxLAotICAgICAg ICAgICAgLnN0YWdlTWFzayA9IHNpZ25hbF9zdGFnZSwKLSAgICAgICAgfTsKLQotICAgICAgICBl LT5zZW1fc2lnX3ZhbF9kc3RbZS0+c2VtX3NpZ192YWxfZHN0X2NudF0gPSAmdmtmLT5zZW1fdmFs dWVbaV07Ci0gICAgICAgIGUtPnNlbV9zaWdfdmFsX2RzdF9jbnQrKzsKLSAgICB9Ci0KLSAgICBy ZXR1cm4gMDsKLX0KLQotdm9pZCBmZl92a19leGVjX3VwZGF0ZV9mcmFtZShGRlZ1bGthbkNvbnRl eHQgKnMsIEZGVmtFeGVjQ29udGV4dCAqZSwgQVZGcmFtZSAqZiwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgVmtJbWFnZU1lbW9yeUJhcnJpZXIyICpiYXIsIHVpbnQzMl90ICpuYl9pbWdf YmFyKQotewotICAgIGludCBpOwotICAgIGZvciAoaSA9IDA7IGkgPCBlLT5uYl9mcmFtZV9kZXBz OyBpKyspCi0gICAgICAgIGlmIChlLT5mcmFtZV9kZXBzW2ldLT5kYXRhWzBdID09IGYtPmRhdGFb MF0pCi0gICAgICAgICAgICBicmVhazsKLSAgICBhdl9hc3NlcnQwKGkgPCBlLT5uYl9mcmFtZV9k ZXBzKTsKLQotICAgIC8qIERvbid0IHVwZGF0ZSBkdXBsaWNhdGVzICovCi0gICAgaWYgKG5iX2lt Z19iYXIgJiYgIWUtPmZyYW1lX3VwZGF0ZVtpXSkKLSAgICAgICAgKCpuYl9pbWdfYmFyKSsrOwot Ci0gICAgZS0+cXVldWVfZmFtaWx5X2RzdFtpXSA9IGJhci0+ZHN0UXVldWVGYW1pbHlJbmRleDsK LSAgICBlLT5hY2Nlc3NfZHN0W2ldID0gYmFyLT5kc3RBY2Nlc3NNYXNrOwotICAgIGUtPmxheW91 dF9kc3RbaV0gPSBiYXItPm5ld0xheW91dDsKLSAgICBlLT5mcmFtZV91cGRhdGVbaV0gPSAxOwot fQotCi1pbnQgZmZfdmtfZXhlY19taXJyb3Jfc2VtX3ZhbHVlKEZGVnVsa2FuQ29udGV4dCAqcywg RkZWa0V4ZWNDb250ZXh0ICplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWa1Nl bWFwaG9yZSAqZHN0LCB1aW50NjRfdCAqZHN0X3ZhbCwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgQVZGcmFtZSAqZikKLXsKLSAgICB1aW50NjRfdCAqKnNlbV9zaWdfdmFsX2RzdDsK LSAgICBBVlZrRnJhbWUgKnZrZiA9IChBVlZrRnJhbWUgKilmLT5kYXRhWzBdOwotCi0gICAgLyog UmVqZWN0IHVua25vd24gZnJhbWVzICovCi0gICAgaW50IGk7Ci0gICAgZm9yIChpID0gMDsgaSA8 IGUtPm5iX2ZyYW1lX2RlcHM7IGkrKykKLSAgICAgICAgaWYgKGUtPmZyYW1lX2RlcHNbaV0tPmRh dGFbMF0gPT0gZi0+ZGF0YVswXSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgIGlmIChpID09IGUt Pm5iX2ZyYW1lX2RlcHMpCi0gICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7Ci0KLSAgICBB UlJfUkVBTExPQyhlLCBzZW1fc2lnX3ZhbF9kc3QsICZlLT5zZW1fc2lnX3ZhbF9kc3RfYWxsb2Ms IGUtPnNlbV9zaWdfdmFsX2RzdF9jbnQpOwotCi0gICAgKmRzdCAgICAgPSB2a2YtPnNlbVswXTsK LSAgICAqZHN0X3ZhbCA9IHZrZi0+c2VtX3ZhbHVlWzBdOwotCi0gICAgZS0+c2VtX3NpZ192YWxf ZHN0W2UtPnNlbV9zaWdfdmFsX2RzdF9jbnRdID0gZHN0X3ZhbDsKLSAgICBlLT5zZW1fc2lnX3Zh bF9kc3RfY250Kys7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotaW50IGZmX3ZrX2V4ZWNfc3VibWl0 KEZGVnVsa2FuQ29udGV4dCAqcywgRkZWa0V4ZWNDb250ZXh0ICplKQotewotICAgIFZrUmVzdWx0 IHJldDsKLSAgICBGRlZ1bGthbkZ1bmN0aW9ucyAqdmsgPSAmcy0+dmtmbjsKLSAgICBWa0NvbW1h bmRCdWZmZXJTdWJtaXRJbmZvIGNtZF9idWZfaW5mbyA9IChWa0NvbW1hbmRCdWZmZXJTdWJtaXRJ bmZvKSB7Ci0gICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX0NPTU1BTkRfQlVGRkVS X1NVQk1JVF9JTkZPLAotICAgICAgICAuY29tbWFuZEJ1ZmZlciA9IGUtPmJ1ZiwKLSAgICB9Owot ICAgIFZrU3VibWl0SW5mbzIgc3VibWl0X2luZm8gPSAoVmtTdWJtaXRJbmZvMikgewotICAgICAg ICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9TVUJNSVRfSU5GT18yLAotICAgICAgICAucENv bW1hbmRCdWZmZXJJbmZvcyA9ICZjbWRfYnVmX2luZm8sCi0gICAgICAgIC5jb21tYW5kQnVmZmVy SW5mb0NvdW50ID0gMSwKLSAgICAgICAgLnBXYWl0U2VtYXBob3JlSW5mb3MgPSBlLT5zZW1fd2Fp dCwKLSAgICAgICAgLndhaXRTZW1hcGhvcmVJbmZvQ291bnQgPSBlLT5zZW1fd2FpdF9jbnQsCi0g ICAgICAgIC5wU2lnbmFsU2VtYXBob3JlSW5mb3MgPSBlLT5zZW1fc2lnLAotICAgICAgICAuc2ln bmFsU2VtYXBob3JlSW5mb0NvdW50ID0gZS0+c2VtX3NpZ19jbnQsCi0gICAgfTsKLQotICAgIHJl dCA9IHZrLT5FbmRDb21tYW5kQnVmZmVyKGUtPmJ1Zik7Ci0gICAgaWYgKHJldCAhPSBWS19TVUND RVNTKSB7Ci0gICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJST1IsICJVbmFibGUgdG8gZmluaXNo IGNvbW1hbmQgYnVmZmVyOiAlc1xuIiwKLSAgICAgICAgICAgICAgIGZmX3ZrX3JldDJzdHIocmV0 KSk7Ci0gICAgICAgIGZmX3ZrX2V4ZWNfZGlzY2FyZF9kZXBzKHMsIGUpOwotICAgICAgICByZXR1 cm4gQVZFUlJPUl9FWFRFUk5BTDsKLSAgICB9Ci0KLSAgICBzLT5od2N0eC0+bG9ja19xdWV1ZShz LT5kZXZpY2UsIGUtPnFmLCBlLT5xaSk7Ci0gICAgcmV0ID0gdmstPlF1ZXVlU3VibWl0MihlLT5x dWV1ZSwgMSwgJnN1Ym1pdF9pbmZvLCBlLT5mZW5jZSk7Ci0gICAgcy0+aHdjdHgtPnVubG9ja19x dWV1ZShzLT5kZXZpY2UsIGUtPnFmLCBlLT5xaSk7Ci0KLSAgICBpZiAocmV0ICE9IFZLX1NVQ0NF U1MpIHsKLSAgICAgICAgYXZfbG9nKHMsIEFWX0xPR19FUlJPUiwgIlVuYWJsZSB0byBzdWJtaXQg Y29tbWFuZCBidWZmZXI6ICVzXG4iLAotICAgICAgICAgICAgICAgZmZfdmtfcmV0MnN0cihyZXQp KTsKLSAgICAgICAgZmZfdmtfZXhlY19kaXNjYXJkX2RlcHMocywgZSk7Ci0gICAgICAgIHJldHVy biBBVkVSUk9SX0VYVEVSTkFMOwotICAgIH0KLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZS0+ c2VtX3NpZ192YWxfZHN0X2NudDsgaSsrKQotICAgICAgICAqZS0+c2VtX3NpZ192YWxfZHN0W2ld ICs9IDE7Ci0KLSAgICAvKiBVbmxvY2sgYWxsIGZyYW1lcyAqLwotICAgIGZvciAoaW50IGogPSAw OyBqIDwgZS0+bmJfZnJhbWVfZGVwczsgaisrKSB7Ci0gICAgICAgIGlmIChlLT5mcmFtZV9sb2Nr ZWRbal0pIHsKLSAgICAgICAgICAgIEFWRnJhbWUgKmYgPSBlLT5mcmFtZV9kZXBzW2pdOwotICAg ICAgICAgICAgQVZIV0ZyYW1lc0NvbnRleHQgKmh3ZmMgPSAoQVZIV0ZyYW1lc0NvbnRleHQgKilm LT5od19mcmFtZXNfY3R4LT5kYXRhOwotICAgICAgICAgICAgQVZWdWxrYW5GcmFtZXNDb250ZXh0 ICp2a2ZjID0gaHdmYy0+aHdjdHg7Ci0gICAgICAgICAgICBBVlZrRnJhbWUgKnZrZiA9IChBVlZr RnJhbWUgKilmLT5kYXRhWzBdOwotCi0gICAgICAgICAgICBpZiAoZS0+ZnJhbWVfdXBkYXRlW2pd KSB7Ci0gICAgICAgICAgICAgICAgaW50IG5iX2ltYWdlcyA9IGZmX3ZrX2NvdW50X2ltYWdlcyh2 a2YpOwotICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmJfaW1hZ2VzOyBpKysp IHsKLSAgICAgICAgICAgICAgICAgICAgdmtmLT5sYXlvdXRbaV0gPSBlLT5sYXlvdXRfZHN0W2pd OwotICAgICAgICAgICAgICAgICAgICB2a2YtPmFjY2Vzc1tpXSA9IGUtPmFjY2Vzc19kc3Rbal07 Ci0gICAgICAgICAgICAgICAgICAgIHZrZi0+cXVldWVfZmFtaWx5W2ldID0gZS0+cXVldWVfZmFt aWx5X2RzdFtqXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg ICB2a2ZjLT51bmxvY2tfZnJhbWUoaHdmYywgdmtmKTsKLSAgICAgICAgICAgIGUtPmZyYW1lX2xv Y2tlZFtqXSA9IDA7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBlLT5oYWRfc3VibWlzc2lvbiA9 IDE7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotaW50IGZmX3ZrX2FsbG9jX21lbShGRlZ1bGthbkNv bnRleHQgKnMsIFZrTWVtb3J5UmVxdWlyZW1lbnRzICpyZXEsCi0gICAgICAgICAgICAgICAgICAg IFZrTWVtb3J5UHJvcGVydHlGbGFnQml0cyByZXFfZmxhZ3MsIHZvaWQgKmFsbG9jX2V4dGVuc2lv biwKLSAgICAgICAgICAgICAgICAgICAgVmtNZW1vcnlQcm9wZXJ0eUZsYWdCaXRzICptZW1fZmxh Z3MsIFZrRGV2aWNlTWVtb3J5ICptZW0pCi17Ci0gICAgVmtSZXN1bHQgcmV0OwotICAgIGludCBp bmRleCA9IC0xOwotICAgIEZGVnVsa2FuRnVuY3Rpb25zICp2ayA9ICZzLT52a2ZuOwotCi0gICAg VmtNZW1vcnlBbGxvY2F0ZUluZm8gYWxsb2NfaW5mbyA9IHsKLSAgICAgICAgLnNUeXBlICAgICAg ICAgICA9IFZLX1NUUlVDVFVSRV9UWVBFX01FTU9SWV9BTExPQ0FURV9JTkZPLAotICAgICAgICAu cE5leHQgICAgICAgICAgID0gYWxsb2NfZXh0ZW5zaW9uLAotICAgIH07Ci0KLSAgICBhbGxvY19p bmZvLmFsbG9jYXRpb25TaXplID0gcmVxLT5zaXplOwotCi0gICAgLyogVGhlIHZ1bGthbiBzcGVj IHJlcXVpcmVzIG1lbW9yeSB0eXBlcyB0byBiZSBzb3J0ZWQgaW4gdGhlICJvcHRpbWFsIgotICAg ICAqIG9yZGVyLCBzbyB0aGUgZmlyc3QgbWF0Y2hpbmcgdHlwZSB3ZSBmaW5kIHdpbGwgYmUgdGhl IGJlc3QvZmFzdGVzdCBvbmUgKi8KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHMtPm1wcm9wcy5t ZW1vcnlUeXBlQ291bnQ7IGkrKykgewotICAgICAgICAvKiBUaGUgbWVtb3J5IHR5cGUgbXVzdCBi ZSBzdXBwb3J0ZWQgYnkgdGhlIHJlcXVpcmVtZW50cyAoYml0ZmllbGQpICovCi0gICAgICAgIGlm ICghKHJlcS0+bWVtb3J5VHlwZUJpdHMgJiAoMSA8PCBpKSkpCi0gICAgICAgICAgICBjb250aW51 ZTsKLQotICAgICAgICAvKiBUaGUgbWVtb3J5IHR5cGUgZmxhZ3MgbXVzdCBpbmNsdWRlIG91ciBw cm9wZXJ0aWVzICovCi0gICAgICAgIGlmICgocmVxX2ZsYWdzICE9IFVJTlQzMl9NQVgpICYmCi0g ICAgICAgICAgICAoKHMtPm1wcm9wcy5tZW1vcnlUeXBlc1tpXS5wcm9wZXJ0eUZsYWdzICYgcmVx X2ZsYWdzKSAhPSByZXFfZmxhZ3MpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAg LyogRm91bmQgYSBzdWl0YWJsZSBtZW1vcnkgdHlwZSAqLwotICAgICAgICBpbmRleCA9IGk7Ci0g ICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGlmIChpbmRleCA8IDApIHsKLSAgICAgICAgYXZf bG9nKHMsIEFWX0xPR19FUlJPUiwgIk5vIG1lbW9yeSB0eXBlIGZvdW5kIGZvciBmbGFncyAweCV4 XG4iLAotICAgICAgICAgICAgICAgcmVxX2ZsYWdzKTsKLSAgICAgICAgcmV0dXJuIEFWRVJST1Io RUlOVkFMKTsKLSAgICB9Ci0KLSAgICBhbGxvY19pbmZvLm1lbW9yeVR5cGVJbmRleCA9IGluZGV4 OwotCi0gICAgcmV0ID0gdmstPkFsbG9jYXRlTWVtb3J5KHMtPmh3Y3R4LT5hY3RfZGV2LCAmYWxs b2NfaW5mbywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy0+aHdjdHgtPmFsbG9jLCBt ZW0pOwotICAgIGlmIChyZXQgIT0gVktfU1VDQ0VTUykKLSAgICAgICAgcmV0dXJuIEFWRVJST1Io RU5PTUVNKTsKLQotICAgIGlmIChtZW1fZmxhZ3MpCi0gICAgICAgICptZW1fZmxhZ3MgfD0gcy0+ bXByb3BzLm1lbW9yeVR5cGVzW2luZGV4XS5wcm9wZXJ0eUZsYWdzOwotCi0gICAgcmV0dXJuIDA7 Ci19Ci0KLWludCBmZl92a19jcmVhdGVfYnVmKEZGVnVsa2FuQ29udGV4dCAqcywgRkZWa0J1ZmZl ciAqYnVmLCBzaXplX3Qgc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnBOZXh0LCB2 b2lkICphbGxvY19wTmV4dCwKLSAgICAgICAgICAgICAgICAgICAgIFZrQnVmZmVyVXNhZ2VGbGFn cyB1c2FnZSwgVmtNZW1vcnlQcm9wZXJ0eUZsYWdCaXRzIGZsYWdzKQotewotICAgIGludCBlcnI7 Ci0gICAgVmtSZXN1bHQgcmV0OwotICAgIGludCB1c2VfZGVkX21lbTsKLSAgICBGRlZ1bGthbkZ1 bmN0aW9ucyAqdmsgPSAmcy0+dmtmbjsKLQotICAgIC8qIEJ1ZmZlciB1c2FnZSBmbGFncyBjb3Jy ZXNwb25kaW5nIHRvIGJ1ZmZlciBkZXNjcmlwdG9yIHR5cGVzICovCi0gICAgY29uc3QgVmtCdWZm ZXJVc2FnZUZsYWdzIGRlc2NfdXNhZ2UgPQotICAgICAgICBWS19CVUZGRVJfVVNBR0VfVU5JRk9S TV9CVUZGRVJfQklUIHwKLSAgICAgICAgVktfQlVGRkVSX1VTQUdFX1NUT1JBR0VfQlVGRkVSX0JJ VCB8Ci0gICAgICAgIFZLX0JVRkZFUl9VU0FHRV9VTklGT1JNX1RFWEVMX0JVRkZFUl9CSVQgfAot ICAgICAgICBWS19CVUZGRVJfVVNBR0VfU1RPUkFHRV9URVhFTF9CVUZGRVJfQklUOwotCi0gICAg aWYgKChzLT5leHRlbnNpb25zICYgRkZfVktfRVhUX0RFU0NSSVBUT1JfQlVGRkVSKSAmJiAodXNh Z2UgJiBkZXNjX3VzYWdlKSkKLSAgICAgICAgdXNhZ2UgfD0gVktfQlVGRkVSX1VTQUdFX1NIQURF Ul9ERVZJQ0VfQUREUkVTU19CSVQ7Ci0KLSAgICBWa0J1ZmZlckNyZWF0ZUluZm8gYnVmX3NwYXdu ID0gewotICAgICAgICAuc1R5cGUgICAgICAgPSBWS19TVFJVQ1RVUkVfVFlQRV9CVUZGRVJfQ1JF QVRFX0lORk8sCi0gICAgICAgIC5wTmV4dCAgICAgICA9IHBOZXh0LAotICAgICAgICAudXNhZ2Ug ICAgICAgPSB1c2FnZSwKLSAgICAgICAgLnNoYXJpbmdNb2RlID0gVktfU0hBUklOR19NT0RFX0VY Q0xVU0lWRSwKLSAgICAgICAgLnNpemUgICAgICAgID0gZmxhZ3MgJiBWS19NRU1PUllfUFJPUEVS VFlfSE9TVF9WSVNJQkxFX0JJVCA/Ci0gICAgICAgICAgICAgICAgICAgICAgIEZGQUxJR04oc2l6 ZSwgcy0+cHJvcHMucHJvcGVydGllcy5saW1pdHMubWluTWVtb3J5TWFwQWxpZ25tZW50KSA6Ci0g ICAgICAgICAgICAgICAgICAgICAgIHNpemUsCi0gICAgfTsKLQotICAgIFZrTWVtb3J5QWxsb2Nh dGVGbGFnc0luZm8gYWxsb2NfZmxhZ3MgPSB7Ci0gICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVS RV9UWVBFX01FTU9SWV9BTExPQ0FURV9GTEFHU19JTkZPLAotICAgICAgICAuZmxhZ3MgPSBWS19N RU1PUllfQUxMT0NBVEVfREVWSUNFX0FERFJFU1NfQklULAotICAgIH07Ci0gICAgVmtCdWZmZXJN ZW1vcnlSZXF1aXJlbWVudHNJbmZvMiByZXFfZGVzYyA9IHsKLSAgICAgICAgLnNUeXBlID0gVktf U1RSVUNUVVJFX1RZUEVfQlVGRkVSX01FTU9SWV9SRVFVSVJFTUVOVFNfSU5GT18yLAotICAgIH07 Ci0gICAgVmtNZW1vcnlEZWRpY2F0ZWRBbGxvY2F0ZUluZm8gZGVkX2FsbG9jID0gewotICAgICAg ICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9NRU1PUllfREVESUNBVEVEX0FMTE9DQVRFX0lO Rk8sCi0gICAgICAgIC5wTmV4dCA9IGFsbG9jX3BOZXh0LAotICAgIH07Ci0gICAgVmtNZW1vcnlE ZWRpY2F0ZWRSZXF1aXJlbWVudHMgZGVkX3JlcSA9IHsKLSAgICAgICAgLnNUeXBlID0gVktfU1RS VUNUVVJFX1RZUEVfTUVNT1JZX0RFRElDQVRFRF9SRVFVSVJFTUVOVFMsCi0gICAgfTsKLSAgICBW a01lbW9yeVJlcXVpcmVtZW50czIgcmVxID0gewotICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RV UkVfVFlQRV9NRU1PUllfUkVRVUlSRU1FTlRTXzIsCi0gICAgICAgIC5wTmV4dCA9ICZkZWRfcmVx LAotICAgIH07Ci0KLSAgICBhdl9sb2cocywgQVZfTE9HX0RFQlVHLCAiQ3JlYXRpbmcgYSBidWZm ZXIgb2YgJSJTSVpFX1NQRUNJRklFUiIgYnl0ZXMsICIKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAidXNhZ2U6IDB4JXgsIGZsYWdzOiAweCV4XG4iLAotICAgICAgICAgICBzaXplLCB1c2Fn ZSwgZmxhZ3MpOwotCi0gICAgcmV0ID0gdmstPkNyZWF0ZUJ1ZmZlcihzLT5od2N0eC0+YWN0X2Rl diwgJmJ1Zl9zcGF3biwgcy0+aHdjdHgtPmFsbG9jLCAmYnVmLT5idWYpOwotICAgIGlmIChyZXQg IT0gVktfU1VDQ0VTUykgewotICAgICAgICBhdl9sb2cocywgQVZfTE9HX0VSUk9SLCAiRmFpbGVk IHRvIGNyZWF0ZSBidWZmZXI6ICVzXG4iLAotICAgICAgICAgICAgICAgZmZfdmtfcmV0MnN0cihy ZXQpKTsKLSAgICAgICAgcmV0dXJuIEFWRVJST1JfRVhURVJOQUw7Ci0gICAgfQotCi0gICAgcmVx X2Rlc2MuYnVmZmVyID0gYnVmLT5idWY7Ci0KLSAgICB2ay0+R2V0QnVmZmVyTWVtb3J5UmVxdWly ZW1lbnRzMihzLT5od2N0eC0+YWN0X2RldiwgJnJlcV9kZXNjLCAmcmVxKTsKLQotICAgIC8qIElu IGNhc2UgdGhlIGltcGxlbWVudGF0aW9uIHByZWZlcnMvcmVxdWlyZXMgZGVkaWNhdGVkIGFsbG9j YXRpb24gKi8KLSAgICB1c2VfZGVkX21lbSA9IGRlZF9yZXEucHJlZmVyc0RlZGljYXRlZEFsbG9j YXRpb24gfAotICAgICAgICAgICAgICAgICAgZGVkX3JlcS5yZXF1aXJlc0RlZGljYXRlZEFsbG9j YXRpb247Ci0gICAgaWYgKHVzZV9kZWRfbWVtKSB7Ci0gICAgICAgIGRlZF9hbGxvYy5idWZmZXIg PSBidWYtPmJ1ZjsKLSAgICAgICAgZGVkX2FsbG9jLnBOZXh0ID0gYWxsb2NfcE5leHQ7Ci0gICAg ICAgIGFsbG9jX3BOZXh0ID0gJmRlZF9hbGxvYzsKLSAgICB9Ci0KLSAgICBpZiAodXNhZ2UgJiBW S19CVUZGRVJfVVNBR0VfU0hBREVSX0RFVklDRV9BRERSRVNTX0JJVCkgewotICAgICAgICBhbGxv Y19mbGFncy5wTmV4dCA9IGFsbG9jX3BOZXh0OwotICAgICAgICBhbGxvY19wTmV4dCA9ICZhbGxv Y19mbGFnczsKLSAgICB9Ci0KLSAgICBlcnIgPSBmZl92a19hbGxvY19tZW0ocywgJnJlcS5tZW1v cnlSZXF1aXJlbWVudHMsIGZsYWdzLCBhbGxvY19wTmV4dCwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgJmJ1Zi0+ZmxhZ3MsICZidWYtPm1lbSk7Ci0gICAgaWYgKGVycikKLSAgICAgICAgcmV0 dXJuIGVycjsKLQotICAgIHJldCA9IHZrLT5CaW5kQnVmZmVyTWVtb3J5KHMtPmh3Y3R4LT5hY3Rf ZGV2LCBidWYtPmJ1ZiwgYnVmLT5tZW0sIDApOwotICAgIGlmIChyZXQgIT0gVktfU1VDQ0VTUykg ewotICAgICAgICBhdl9sb2cocywgQVZfTE9HX0VSUk9SLCAiRmFpbGVkIHRvIGJpbmQgbWVtb3J5 IHRvIGJ1ZmZlcjogJXNcbiIsCi0gICAgICAgICAgICAgICBmZl92a19yZXQyc3RyKHJldCkpOwot ICAgICAgICByZXR1cm4gQVZFUlJPUl9FWFRFUk5BTDsKLSAgICB9Ci0KLSAgICBpZiAodXNhZ2Ug JiBWS19CVUZGRVJfVVNBR0VfU0hBREVSX0RFVklDRV9BRERSRVNTX0JJVCkgewotICAgICAgICBW a0J1ZmZlckRldmljZUFkZHJlc3NJbmZvIGFkZHJlc3NfaW5mbyA9IHsKLSAgICAgICAgICAgIC5z VHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX0JVRkZFUl9ERVZJQ0VfQUREUkVTU19JTkZPLAotICAg ICAgICAgICAgLmJ1ZmZlciA9IGJ1Zi0+YnVmLAotICAgICAgICB9OwotICAgICAgICBidWYtPmFk ZHJlc3MgPSB2ay0+R2V0QnVmZmVyRGV2aWNlQWRkcmVzcyhzLT5od2N0eC0+YWN0X2RldiwgJmFk ZHJlc3NfaW5mbyk7Ci0gICAgfQotCi0gICAgYnVmLT5zaXplID0gc2l6ZTsKLQotICAgIHJldHVy biAwOwotfQotCi1pbnQgZmZfdmtfbWFwX2J1ZmZlcnMoRkZWdWxrYW5Db250ZXh0ICpzLCBGRlZr QnVmZmVyICoqYnVmLCB1aW50OF90ICptZW1bXSwKLSAgICAgICAgICAgICAgICAgICAgICBpbnQg bmJfYnVmZmVycywgaW50IGludmFsaWRhdGUpCi17Ci0gICAgVmtSZXN1bHQgcmV0OwotICAgIEZG VnVsa2FuRnVuY3Rpb25zICp2ayA9ICZzLT52a2ZuOwotICAgIFZrTWFwcGVkTWVtb3J5UmFuZ2Ug aW52YWxfbGlzdFs2NF07Ci0gICAgaW50IGludmFsX2NvdW50ID0gMDsKLQotICAgIGZvciAoaW50 IGkgPSAwOyBpIDwgbmJfYnVmZmVyczsgaSsrKSB7Ci0gICAgICAgIHZvaWQgKmRzdDsKLSAgICAg ICAgcmV0ID0gdmstPk1hcE1lbW9yeShzLT5od2N0eC0+YWN0X2RldiwgYnVmW2ldLT5tZW0sIDAs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfV0hPTEVfU0laRSwgMCwgJmRzdCk7Ci0g ICAgICAgIGlmIChyZXQgIT0gVktfU1VDQ0VTUykgewotICAgICAgICAgICAgYXZfbG9nKHMsIEFW X0xPR19FUlJPUiwgIkZhaWxlZCB0byBtYXAgYnVmZmVyIG1lbW9yeTogJXNcbiIsCi0gICAgICAg ICAgICAgICAgICAgZmZfdmtfcmV0MnN0cihyZXQpKTsKLSAgICAgICAgICAgIHJldHVybiBBVkVS Uk9SX0VYVEVSTkFMOwotICAgICAgICB9Ci0gICAgICAgIG1lbVtpXSA9IGJ1ZltpXS0+bWFwcGVk X21lbSA9IGRzdDsKLSAgICB9Ci0KLSAgICBpZiAoIWludmFsaWRhdGUpCi0gICAgICAgIHJldHVy biAwOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuYl9idWZmZXJzOyBpKyspIHsKLSAgICAg ICAgY29uc3QgVmtNYXBwZWRNZW1vcnlSYW5nZSBpdmFsX2J1ZiA9IHsKLSAgICAgICAgICAgIC5z VHlwZSAgPSBWS19TVFJVQ1RVUkVfVFlQRV9NQVBQRURfTUVNT1JZX1JBTkdFLAotICAgICAgICAg ICAgLm1lbW9yeSA9IGJ1ZltpXS0+bWVtLAotICAgICAgICAgICAgLnNpemUgICA9IFZLX1dIT0xF X1NJWkUsCi0gICAgICAgIH07Ci0gICAgICAgIGlmIChidWZbaV0tPmZsYWdzICYgVktfTUVNT1JZ X1BST1BFUlRZX0hPU1RfQ09IRVJFTlRfQklUKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAg ICAgIGludmFsX2xpc3RbaW52YWxfY291bnQrK10gPSBpdmFsX2J1ZjsKLSAgICB9Ci0KLSAgICBp ZiAoaW52YWxfY291bnQpIHsKLSAgICAgICAgcmV0ID0gdmstPkludmFsaWRhdGVNYXBwZWRNZW1v cnlSYW5nZXMocy0+aHdjdHgtPmFjdF9kZXYsIGludmFsX2NvdW50LAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnZhbF9saXN0KTsKLSAgICAgICAgaWYg KHJldCAhPSBWS19TVUNDRVNTKSB7Ci0gICAgICAgICAgICBhdl9sb2cocywgQVZfTE9HX0VSUk9S LCAiRmFpbGVkIHRvIGludmFsaWRhdGUgbWVtb3J5OiAlc1xuIiwKLSAgICAgICAgICAgICAgICAg ICBmZl92a19yZXQyc3RyKHJldCkpOwotICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfRVhURVJO QUw7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotaW50IGZmX3ZrX3Vu bWFwX2J1ZmZlcnMoRkZWdWxrYW5Db250ZXh0ICpzLCBGRlZrQnVmZmVyICoqYnVmLCBpbnQgbmJf YnVmZmVycywKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBmbHVzaCkKLXsKLSAgICBpbnQg ZXJyID0gMDsKLSAgICBWa1Jlc3VsdCByZXQ7Ci0gICAgRkZWdWxrYW5GdW5jdGlvbnMgKnZrID0g JnMtPnZrZm47Ci0gICAgVmtNYXBwZWRNZW1vcnlSYW5nZSBmbHVzaF9saXN0WzY0XTsKLSAgICBp bnQgZmx1c2hfY291bnQgPSAwOwotCi0gICAgaWYgKGZsdXNoKSB7Ci0gICAgICAgIGZvciAoaW50 IGkgPSAwOyBpIDwgbmJfYnVmZmVyczsgaSsrKSB7Ci0gICAgICAgICAgICBjb25zdCBWa01hcHBl ZE1lbW9yeVJhbmdlIGZsdXNoX2J1ZiA9IHsKLSAgICAgICAgICAgICAgICAuc1R5cGUgID0gVktf U1RSVUNUVVJFX1RZUEVfTUFQUEVEX01FTU9SWV9SQU5HRSwKLSAgICAgICAgICAgICAgICAubWVt b3J5ID0gYnVmW2ldLT5tZW0sCi0gICAgICAgICAgICAgICAgLnNpemUgICA9IFZLX1dIT0xFX1NJ WkUsCi0gICAgICAgICAgICB9OwotCi0gICAgICAgICAgICBhdl9hc3NlcnQwKCFidWZbaV0tPmhv c3RfcmVmKTsKLSAgICAgICAgICAgIGlmIChidWZbaV0tPmZsYWdzICYgVktfTUVNT1JZX1BST1BF UlRZX0hPU1RfQ09IRVJFTlRfQklUKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg ICAgICAgZmx1c2hfbGlzdFtmbHVzaF9jb3VudCsrXSA9IGZsdXNoX2J1ZjsKLSAgICAgICAgfQot ICAgIH0KLQotICAgIGlmIChmbHVzaF9jb3VudCkgewotICAgICAgICByZXQgPSB2ay0+Rmx1c2hN YXBwZWRNZW1vcnlSYW5nZXMocy0+aHdjdHgtPmFjdF9kZXYsIGZsdXNoX2NvdW50LAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmx1c2hfbGlzdCk7Ci0gICAgICAg IGlmIChyZXQgIT0gVktfU1VDQ0VTUykgewotICAgICAgICAgICAgYXZfbG9nKHMsIEFWX0xPR19F UlJPUiwgIkZhaWxlZCB0byBmbHVzaCBtZW1vcnk6ICVzXG4iLAotICAgICAgICAgICAgICAgICAg IGZmX3ZrX3JldDJzdHIocmV0KSk7Ci0gICAgICAgICAgICBlcnIgPSBBVkVSUk9SX0VYVEVSTkFM OyAvKiBXZSBzdGlsbCB3YW50IHRvIHRyeSB0byB1bm1hcCB0aGVtICovCi0gICAgICAgIH0KLSAg ICB9Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG5iX2J1ZmZlcnM7IGkrKykgewotICAgICAg ICB2ay0+VW5tYXBNZW1vcnkocy0+aHdjdHgtPmFjdF9kZXYsIGJ1ZltpXS0+bWVtKTsKLSAgICAg ICAgYnVmW2ldLT5tYXBwZWRfbWVtID0gTlVMTDsKLSAgICB9Ci0KLSAgICByZXR1cm4gZXJyOwot fQotCi12b2lkIGZmX3ZrX2ZyZWVfYnVmKEZGVnVsa2FuQ29udGV4dCAqcywgRkZWa0J1ZmZlciAq YnVmKQotewotICAgIEZGVnVsa2FuRnVuY3Rpb25zICp2ayA9ICZzLT52a2ZuOwotCi0gICAgaWYg KCFidWYgfHwgIXMtPmh3Y3R4KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoYnVmLT5tYXBw ZWRfbWVtICYmICFidWYtPmhvc3RfcmVmKQotICAgICAgICBmZl92a191bm1hcF9idWZmZXIocywg YnVmLCAwKTsKLSAgICBpZiAoYnVmLT5idWYgIT0gVktfTlVMTF9IQU5ETEUpCi0gICAgICAgIHZr LT5EZXN0cm95QnVmZmVyKHMtPmh3Y3R4LT5hY3RfZGV2LCBidWYtPmJ1Ziwgcy0+aHdjdHgtPmFs bG9jKTsKLSAgICBpZiAoYnVmLT5tZW0gIT0gVktfTlVMTF9IQU5ETEUpCi0gICAgICAgIHZrLT5G cmVlTWVtb3J5KHMtPmh3Y3R4LT5hY3RfZGV2LCBidWYtPm1lbSwgcy0+aHdjdHgtPmFsbG9jKTsK LSAgICBpZiAoYnVmLT5ob3N0X3JlZikKLSAgICAgICAgYXZfYnVmZmVyX3VucmVmKCZidWYtPmhv c3RfcmVmKTsKLQotICAgIGJ1Zi0+YnVmID0gVktfTlVMTF9IQU5ETEU7Ci0gICAgYnVmLT5tZW0g PSBWS19OVUxMX0hBTkRMRTsKLSAgICBidWYtPm1hcHBlZF9tZW0gPSBOVUxMOwotfQotCi1zdGF0 aWMgdm9pZCBmcmVlX2RhdGFfYnVmKHZvaWQgKm9wYXF1ZSwgdWludDhfdCAqZGF0YSkKLXsKLSAg ICBGRlZ1bGthbkNvbnRleHQgKmN0eCA9IG9wYXF1ZTsKLSAgICBGRlZrQnVmZmVyICpidWYgPSAo RkZWa0J1ZmZlciAqKWRhdGE7Ci0gICAgZmZfdmtfZnJlZV9idWYoY3R4LCBidWYpOwotICAgIGF2 X2ZyZWUoZGF0YSk7Ci19Ci0KLXN0YXRpYyBBVkJ1ZmZlclJlZiAqYWxsb2NfZGF0YV9idWYodm9p ZCAqb3BhcXVlLCBzaXplX3Qgc2l6ZSkKLXsKLSAgICBBVkJ1ZmZlclJlZiAqcmVmOwotICAgIHVp bnQ4X3QgKmJ1ZiA9IGF2X21hbGxvY3ooc2l6ZSk7Ci0gICAgaWYgKCFidWYpCi0gICAgICAgIHJl dHVybiBOVUxMOwotCi0gICAgcmVmID0gYXZfYnVmZmVyX2NyZWF0ZShidWYsIHNpemUsIGZyZWVf ZGF0YV9idWYsIG9wYXF1ZSwgMCk7Ci0gICAgaWYgKCFyZWYpCi0gICAgICAgIGF2X2ZyZWUoYnVm KTsKLSAgICByZXR1cm4gcmVmOwotfQotCi1pbnQgZmZfdmtfZ2V0X3Bvb2xlZF9idWZmZXIoRkZW dWxrYW5Db250ZXh0ICpjdHgsIEFWQnVmZmVyUG9vbCAqKmJ1Zl9wb29sLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEFWQnVmZmVyUmVmICoqYnVmLCBWa0J1ZmZlclVzYWdlRmxhZ3MgdXNh Z2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqY3JlYXRlX3BOZXh0LCBzaXpl X3Qgc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBWa01lbW9yeVByb3BlcnR5Rmxh Z0JpdHMgbWVtX3Byb3BzKQotewotICAgIGludCBlcnI7Ci0gICAgQVZCdWZmZXJSZWYgKnJlZjsK LSAgICBGRlZrQnVmZmVyICpkYXRhOwotCi0gICAgKmJ1ZiA9IE5VTEw7Ci0KLSAgICBpZiAoISgq YnVmX3Bvb2wpKSB7Ci0gICAgICAgICpidWZfcG9vbCA9IGF2X2J1ZmZlcl9wb29sX2luaXQyKHNp emVvZihGRlZrQnVmZmVyKSwgY3R4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBhbGxvY19kYXRhX2J1ZiwgTlVMTCk7Ci0gICAgICAgIGlmICghKCpidWZfcG9vbCkp Ci0gICAgICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOwotICAgIH0KLQotICAgICpidWYg PSByZWYgPSBhdl9idWZmZXJfcG9vbF9nZXQoKmJ1Zl9wb29sKTsKLSAgICBpZiAoIXJlZikKLSAg ICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKLQotICAgIGRhdGEgPSAoRkZWa0J1ZmZlciAq KXJlZi0+ZGF0YTsKLSAgICBkYXRhLT5zdGFnZSA9IFZLX1BJUEVMSU5FX1NUQUdFXzJfQUxMX0NP TU1BTkRTX0JJVDsKLSAgICBkYXRhLT5hY2Nlc3MgPSBWS19BQ0NFU1NfMl9OT05FOwotCi0gICAg aWYgKGRhdGEtPnNpemUgPj0gc2l6ZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBmZl92a19m cmVlX2J1ZihjdHgsIGRhdGEpOwotICAgIG1lbXNldChkYXRhLCAwLCBzaXplb2YoKmRhdGEpKTsK LQotICAgIGVyciA9IGZmX3ZrX2NyZWF0ZV9idWYoY3R4LCBkYXRhLCBzaXplLAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgY3JlYXRlX3BOZXh0LCBOVUxMLCB1c2FnZSwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgIG1lbV9wcm9wcyk7Ci0gICAgaWYgKGVyciA8IDApIHsKLSAgICAgICAg YXZfYnVmZmVyX3VucmVmKCZyZWYpOwotICAgICAgICAqYnVmID0gTlVMTDsKLSAgICAgICAgcmV0 dXJuIGVycjsKLSAgICB9Ci0KLSAgICBpZiAobWVtX3Byb3BzICYgVktfTUVNT1JZX1BST1BFUlRZ X0hPU1RfVklTSUJMRV9CSVQpIHsKLSAgICAgICAgZXJyID0gZmZfdmtfbWFwX2J1ZmZlcihjdHgs IGRhdGEsICZkYXRhLT5tYXBwZWRfbWVtLCAwKTsKLSAgICAgICAgaWYgKGVyciA8IDApIHsKLSAg ICAgICAgICAgIGF2X2J1ZmZlcl91bnJlZigmcmVmKTsKLSAgICAgICAgICAgICpidWYgPSBOVUxM OwotICAgICAgICAgICAgcmV0dXJuIGVycjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVy biAwOwotfQotCi1zdGF0aWMgaW50IGNyZWF0ZV9tYXBwZWRfYnVmZmVyKEZGVnVsa2FuQ29udGV4 dCAqcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkZWa0J1ZmZlciAqdmtiLCBW a0J1ZmZlclVzYWdlRmxhZ3MgdXNhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHNpemVfdCBzaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWa0V4dGVybmFs TWVtb3J5QnVmZmVyQ3JlYXRlSW5mbyAqY3JlYXRlX2Rlc2MsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFZrSW1wb3J0TWVtb3J5SG9zdFBvaW50ZXJJbmZvRVhUICppbXBvcnRfZGVz YywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmtNZW1vcnlIb3N0UG9pbnRlclBy b3BlcnRpZXNFWFQgcHJvcHMpCi17Ci0gICAgaW50IGVycjsKLSAgICBWa1Jlc3VsdCByZXQ7Ci0g ICAgRkZWdWxrYW5GdW5jdGlvbnMgKnZrID0gJnMtPnZrZm47Ci0KLSAgICBWa0J1ZmZlckNyZWF0 ZUluZm8gYnVmX3NwYXduID0gewotICAgICAgICAuc1R5cGUgICAgICAgPSBWS19TVFJVQ1RVUkVf VFlQRV9CVUZGRVJfQ1JFQVRFX0lORk8sCi0gICAgICAgIC5wTmV4dCAgICAgICA9IGNyZWF0ZV9k ZXNjLAotICAgICAgICAudXNhZ2UgICAgICAgPSB1c2FnZSwKLSAgICAgICAgLnNoYXJpbmdNb2Rl ID0gVktfU0hBUklOR19NT0RFX0VYQ0xVU0lWRSwKLSAgICAgICAgLnNpemUgICAgICAgID0gc2l6 ZSwKLSAgICB9OwotICAgIFZrTWVtb3J5UmVxdWlyZW1lbnRzIHJlcSA9IHsKLSAgICAgICAgLnNp emUgICAgICAgICAgID0gc2l6ZSwKLSAgICAgICAgLmFsaWdubWVudCAgICAgID0gcy0+aHByb3Bz Lm1pbkltcG9ydGVkSG9zdFBvaW50ZXJBbGlnbm1lbnQsCi0gICAgICAgIC5tZW1vcnlUeXBlQml0 cyA9IHByb3BzLm1lbW9yeVR5cGVCaXRzLAotICAgIH07Ci0KLSAgICBlcnIgPSBmZl92a19hbGxv Y19tZW0ocywgJnJlcSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgVktfTUVNT1JZX1BST1BF UlRZX0hPU1RfVklTSUJMRV9CSVQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGltcG9ydF9k ZXNjLCAmdmtiLT5mbGFncywgJnZrYi0+bWVtKTsKLSAgICBpZiAoZXJyIDwgMCkKLSAgICAgICAg cmV0dXJuIGVycjsKLQotICAgIHJldCA9IHZrLT5DcmVhdGVCdWZmZXIocy0+aHdjdHgtPmFjdF9k ZXYsICZidWZfc3Bhd24sIHMtPmh3Y3R4LT5hbGxvYywgJnZrYi0+YnVmKTsKLSAgICBpZiAocmV0 ICE9IFZLX1NVQ0NFU1MpIHsKLSAgICAgICAgdmstPkZyZWVNZW1vcnkocy0+aHdjdHgtPmFjdF9k ZXYsIHZrYi0+bWVtLCBzLT5od2N0eC0+YWxsb2MpOwotICAgICAgICByZXR1cm4gQVZFUlJPUl9F WFRFUk5BTDsKLSAgICB9Ci0KLSAgICByZXQgPSB2ay0+QmluZEJ1ZmZlck1lbW9yeShzLT5od2N0 eC0+YWN0X2RldiwgdmtiLT5idWYsIHZrYi0+bWVtLCAwKTsKLSAgICBpZiAocmV0ICE9IFZLX1NV Q0NFU1MpIHsKLSAgICAgICAgdmstPkZyZWVNZW1vcnkocy0+aHdjdHgtPmFjdF9kZXYsIHZrYi0+ bWVtLCBzLT5od2N0eC0+YWxsb2MpOwotICAgICAgICB2ay0+RGVzdHJveUJ1ZmZlcihzLT5od2N0 eC0+YWN0X2RldiwgdmtiLT5idWYsIHMtPmh3Y3R4LT5hbGxvYyk7Ci0gICAgICAgIHJldHVybiBB VkVSUk9SX0VYVEVSTkFMOwotICAgIH0KLQotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgdm9p ZCBkZXN0cm95X2F2dmtidWYodm9pZCAqb3BhcXVlLCB1aW50OF90ICpkYXRhKQotewotICAgIEZG VnVsa2FuQ29udGV4dCAqcyA9IG9wYXF1ZTsKLSAgICBGRlZrQnVmZmVyICpidWYgPSAoRkZWa0J1 ZmZlciAqKWRhdGE7Ci0gICAgZmZfdmtfZnJlZV9idWYocywgYnVmKTsKLSAgICBhdl9mcmVlKGJ1 Zik7Ci19Ci0KLWludCBmZl92a19ob3N0X21hcF9idWZmZXIoRkZWdWxrYW5Db250ZXh0ICpzLCBB VkJ1ZmZlclJlZiAqKmRzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqc3Jj X2RhdGEsIGNvbnN0IEFWQnVmZmVyUmVmICpzcmNfYnVmLAotICAgICAgICAgICAgICAgICAgICAg ICAgICBWa0J1ZmZlclVzYWdlRmxhZ3MgdXNhZ2UpCi17Ci0gICAgaW50IGVycjsKLSAgICBWa1Jl c3VsdCByZXQ7Ci0gICAgRkZWdWxrYW5GdW5jdGlvbnMgKnZrID0gJnMtPnZrZm47Ci0KLSAgICBW a0V4dGVybmFsTWVtb3J5QnVmZmVyQ3JlYXRlSW5mbyBjcmVhdGVfZGVzYyA9IHsKLSAgICAgICAg LnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfRVhURVJOQUxfTUVNT1JZX0JVRkZFUl9DUkVBVEVf SU5GTywKLSAgICAgICAgLmhhbmRsZVR5cGVzID0gVktfRVhURVJOQUxfTUVNT1JZX0hBTkRMRV9U WVBFX0hPU1RfQUxMT0NBVElPTl9CSVRfRVhULAotICAgIH07Ci0gICAgVmtNZW1vcnlBbGxvY2F0 ZUZsYWdzSW5mbyBhbGxvY19mbGFncyA9IHsKLSAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJF X1RZUEVfTUVNT1JZX0FMTE9DQVRFX0ZMQUdTX0lORk8sCi0gICAgICAgIC5mbGFncyA9IFZLX01F TU9SWV9BTExPQ0FURV9ERVZJQ0VfQUREUkVTU19CSVQsCi0gICAgfTsKLSAgICBWa0ltcG9ydE1l bW9yeUhvc3RQb2ludGVySW5mb0VYVCBpbXBvcnRfZGVzYyA9IHsKLSAgICAgICAgLnNUeXBlID0g VktfU1RSVUNUVVJFX1RZUEVfSU1QT1JUX01FTU9SWV9IT1NUX1BPSU5URVJfSU5GT19FWFQsCi0g ICAgICAgIC5oYW5kbGVUeXBlID0gVktfRVhURVJOQUxfTUVNT1JZX0hBTkRMRV9UWVBFX0hPU1Rf QUxMT0NBVElPTl9CSVRfRVhULAotICAgICAgICAucE5leHQgPSB1c2FnZSAmIFZLX0JVRkZFUl9V U0FHRV9TSEFERVJfREVWSUNFX0FERFJFU1NfQklUID8gJmFsbG9jX2ZsYWdzIDogTlVMTCwKLSAg ICB9OwotICAgIFZrTWVtb3J5SG9zdFBvaW50ZXJQcm9wZXJ0aWVzRVhUIHByb3BzOwotCi0gICAg QVZCdWZmZXJSZWYgKnJlZjsKLSAgICBGRlZrQnVmZmVyICp2a2I7Ci0gICAgc2l6ZV90IG9mZnM7 Ci0gICAgc2l6ZV90IGJ1ZmZlcl9zaXplOwotCi0gICAgKmRzdCA9IE5VTEw7Ci0KLSAgICAvKiBH ZXQgdGhlIHByZXZpb3VzIHBvaW50IGF0IHdoaWNoIG1hcHBpbmcgd2FzIHBvc3NpYmxlIGFuZCB1 c2UgaXQgKi8KLSAgICBvZmZzID0gKHVpbnRwdHJfdClzcmNfZGF0YSAlIHMtPmhwcm9wcy5taW5J bXBvcnRlZEhvc3RQb2ludGVyQWxpZ25tZW50OwotICAgIGltcG9ydF9kZXNjLnBIb3N0UG9pbnRl ciA9IHNyY19kYXRhIC0gb2ZmczsKLQotICAgIHByb3BzID0gKFZrTWVtb3J5SG9zdFBvaW50ZXJQ cm9wZXJ0aWVzRVhUKSB7Ci0gICAgICAgIFZLX1NUUlVDVFVSRV9UWVBFX01FTU9SWV9IT1NUX1BP SU5URVJfUFJPUEVSVElFU19FWFQsCi0gICAgfTsKLSAgICByZXQgPSB2ay0+R2V0TWVtb3J5SG9z dFBvaW50ZXJQcm9wZXJ0aWVzRVhUKHMtPmh3Y3R4LT5hY3RfZGV2LAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1wb3J0X2Rlc2MuaGFuZGxlVHlwZSwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltcG9ydF9k ZXNjLnBIb3N0UG9pbnRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICZwcm9wcyk7Ci0gICAgaWYgKCEocmV0ID09IFZLX1NVQ0NFU1MgJiYgcHJvcHMu bWVtb3J5VHlwZUJpdHMpKQotICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOwotCi0gICAg LyogUmVmIHRoZSBzb3VyY2UgYnVmZmVyICovCi0gICAgcmVmID0gYXZfYnVmZmVyX3JlZihzcmNf YnVmKTsKLSAgICBpZiAoIXJlZikKLSAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKLQot ICAgIC8qIEFkZCB0aGUgb2Zmc2V0IGF0IHRoZSBzdGFydCwgd2hpY2ggZ2V0cyBpZ25vcmVkICov Ci0gICAgY29uc3QgcHRyZGlmZl90IHNyY19vZmZzZXQgPSBzcmNfZGF0YSAtIHNyY19idWYtPmRh dGE7Ci0gICAgYnVmZmVyX3NpemUgPSBvZmZzICsgKHNyY19idWYtPnNpemUgLSBzcmNfb2Zmc2V0 KTsKLSAgICBidWZmZXJfc2l6ZSA9IEZGQUxJR04oYnVmZmVyX3NpemUsIHMtPnByb3BzLnByb3Bl cnRpZXMubGltaXRzLm1pbk1lbW9yeU1hcEFsaWdubWVudCk7Ci0gICAgYnVmZmVyX3NpemUgPSBG RkFMSUdOKGJ1ZmZlcl9zaXplLCBzLT5ocHJvcHMubWluSW1wb3J0ZWRIb3N0UG9pbnRlckFsaWdu bWVudCk7Ci0KLSAgICAvKiBDcmVhdGUgYSBidWZmZXIgc3RydWN0ICovCi0gICAgdmtiID0gYXZf bWFsbG9jeihzaXplb2YoKnZrYikpOwotICAgIGlmICghdmtiKSB7Ci0gICAgICAgIGF2X2J1ZmZl cl91bnJlZigmcmVmKTsKLSAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKLSAgICB9Ci0K LSAgICBlcnIgPSBjcmVhdGVfbWFwcGVkX2J1ZmZlcihzLCB2a2IsIHVzYWdlLAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcl9zaXplLCAmY3JlYXRlX2Rlc2MsICZpbXBvcnRf ZGVzYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wcyk7Ci0gICAgaWYgKGVy ciA8IDApIHsKLSAgICAgICAgYXZfYnVmZmVyX3VucmVmKCZyZWYpOwotICAgICAgICBhdl9mcmVl KHZrYik7Ci0gICAgICAgIHJldHVybiBlcnI7Ci0gICAgfQotCi0gICAgaWYgKHVzYWdlICYgVktf QlVGRkVSX1VTQUdFX1NIQURFUl9ERVZJQ0VfQUREUkVTU19CSVQpIHsKLSAgICAgICAgVmtCdWZm ZXJEZXZpY2VBZGRyZXNzSW5mbyBhZGRyZXNzX2luZm8gPSB7Ci0gICAgICAgICAgICAuc1R5cGUg PSBWS19TVFJVQ1RVUkVfVFlQRV9CVUZGRVJfREVWSUNFX0FERFJFU1NfSU5GTywKLSAgICAgICAg ICAgIC5idWZmZXIgPSB2a2ItPmJ1ZiwKLSAgICAgICAgfTsKLSAgICAgICAgdmtiLT5hZGRyZXNz ID0gdmstPkdldEJ1ZmZlckRldmljZUFkZHJlc3Mocy0+aHdjdHgtPmFjdF9kZXYsICZhZGRyZXNz X2luZm8pOwotICAgIH0KLQotICAgIHZrYi0+aG9zdF9yZWYgICAgICAgPSByZWY7Ci0gICAgdmti LT52aXJ0dWFsX29mZnNldCA9IG9mZnM7Ci0gICAgdmtiLT5hZGRyZXNzICAgICAgICs9IG9mZnM7 Ci0gICAgdmtiLT5tYXBwZWRfbWVtICAgICA9IHNyY19kYXRhOwotICAgIHZrYi0+c2l6ZSAgICAg ICAgICAgPSBidWZmZXJfc2l6ZSAtIG9mZnM7Ci0gICAgdmtiLT5mbGFncyAgICAgICAgIHw9IFZL X01FTU9SWV9QUk9QRVJUWV9IT1NUX0NPSEVSRU5UX0JJVDsKLQotICAgIC8qIENyZWF0ZSBhIHJl ZiAqLwotICAgICpkc3QgPSBhdl9idWZmZXJfY3JlYXRlKCh1aW50OF90ICopdmtiLCBzaXplb2Yo KnZrYiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdHJveV9hdnZrYnVmLCBzLCAw KTsKLSAgICBpZiAoISgqZHN0KSkgewotICAgICAgICBkZXN0cm95X2F2dmtidWYocywgKHVpbnQ4 X3QgKil2a2IpOwotICAgICAgICAqZHN0ID0gTlVMTDsKLSAgICAgICAgcmV0dXJuIEFWRVJST1Io RU5PTUVNKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotaW50IGZmX3ZrX3NoYWRlcl9h ZGRfcHVzaF9jb25zdChGRlZ1bGthblNoYWRlciAqc2hkLCBpbnQgb2Zmc2V0LCBpbnQgc2l6ZSwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmtTaGFkZXJTdGFnZUZsYWdCaXRzIHN0 YWdlKQotewotICAgIFZrUHVzaENvbnN0YW50UmFuZ2UgKnBjOwotCi0gICAgc2hkLT5wdXNoX2Nv bnN0cyA9IGF2X3JlYWxsb2NfYXJyYXkoc2hkLT5wdXNoX2NvbnN0cywKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoKnNoZC0+cHVzaF9jb25zdHMpLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoZC0+cHVzaF9jb25zdHNfbnVt ICsgMSk7Ci0gICAgaWYgKCFzaGQtPnB1c2hfY29uc3RzKQotICAgICAgICByZXR1cm4gQVZFUlJP UihFTk9NRU0pOwotCi0gICAgcGMgPSAmc2hkLT5wdXNoX2NvbnN0c1tzaGQtPnB1c2hfY29uc3Rz X251bSsrXTsKLSAgICBtZW1zZXQocGMsIDAsIHNpemVvZigqcGMpKTsKLQotICAgIHBjLT5zdGFn ZUZsYWdzID0gc3RhZ2U7Ci0gICAgcGMtPm9mZnNldCA9IG9mZnNldDsKLSAgICBwYy0+c2l6ZSA9 IHNpemU7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotaW50IGZmX3ZrX2luaXRfc2FtcGxlcihGRlZ1 bGthbkNvbnRleHQgKnMsIFZrU2FtcGxlciAqc2FtcGxlciwKLSAgICAgICAgICAgICAgICAgICAg ICAgaW50IHVubm9ybV9jb29yZHMsIFZrRmlsdGVyIGZpbHQpCi17Ci0gICAgVmtSZXN1bHQgcmV0 OwotICAgIEZGVnVsa2FuRnVuY3Rpb25zICp2ayA9ICZzLT52a2ZuOwotCi0gICAgVmtTYW1wbGVy Q3JlYXRlSW5mbyBzYW1wbGVyX2luZm8gPSB7Ci0gICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVS RV9UWVBFX1NBTVBMRVJfQ1JFQVRFX0lORk8sCi0gICAgICAgIC5tYWdGaWx0ZXIgPSBmaWx0LAot ICAgICAgICAubWluRmlsdGVyID0gc2FtcGxlcl9pbmZvLm1hZ0ZpbHRlciwKLSAgICAgICAgLm1p cG1hcE1vZGUgPSB1bm5vcm1fY29vcmRzID8gVktfU0FNUExFUl9NSVBNQVBfTU9ERV9ORUFSRVNU IDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfU0FNUExFUl9NSVBN QVBfTU9ERV9MSU5FQVIsCi0gICAgICAgIC5hZGRyZXNzTW9kZVUgPSBWS19TQU1QTEVSX0FERFJF U1NfTU9ERV9DTEFNUF9UT19FREdFLAotICAgICAgICAuYWRkcmVzc01vZGVWID0gc2FtcGxlcl9p bmZvLmFkZHJlc3NNb2RlVSwKLSAgICAgICAgLmFkZHJlc3NNb2RlVyA9IHNhbXBsZXJfaW5mby5h ZGRyZXNzTW9kZVUsCi0gICAgICAgIC5hbmlzb3Ryb3B5RW5hYmxlID0gVktfRkFMU0UsCi0gICAg ICAgIC5jb21wYXJlT3AgPSBWS19DT01QQVJFX09QX05FVkVSLAotICAgICAgICAuYm9yZGVyQ29s b3IgPSBWS19CT1JERVJfQ09MT1JfRkxPQVRfVFJBTlNQQVJFTlRfQkxBQ0ssCi0gICAgICAgIC51 bm5vcm1hbGl6ZWRDb29yZGluYXRlcyA9IHVubm9ybV9jb29yZHMsCi0gICAgfTsKLQotICAgIHJl dCA9IHZrLT5DcmVhdGVTYW1wbGVyKHMtPmh3Y3R4LT5hY3RfZGV2LCAmc2FtcGxlcl9pbmZvLAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMtPmh3Y3R4LT5hbGxvYywgc2FtcGxlcik7Ci0g ICAgaWYgKHJldCAhPSBWS19TVUNDRVNTKSB7Ci0gICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJS T1IsICJVbmFibGUgdG8gaW5pdCBzYW1wbGVyOiAlc1xuIiwKLSAgICAgICAgICAgICAgIGZmX3Zr X3JldDJzdHIocmV0KSk7Ci0gICAgICAgIHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOwotICAgIH0K LQotICAgIHJldHVybiAwOwotfQotCi1Wa0ltYWdlQXNwZWN0RmxhZ3MgZmZfdmtfYXNwZWN0X2Zs YWcoQVZGcmFtZSAqZiwgaW50IHApCi17Ci0gICAgQVZWa0ZyYW1lICp2a2YgPSAoQVZWa0ZyYW1l ICopZi0+ZGF0YVswXTsKLSAgICBBVkhXRnJhbWVzQ29udGV4dCAqaHdmYyA9IChBVkhXRnJhbWVz Q29udGV4dCAqKWYtPmh3X2ZyYW1lc19jdHgtPmRhdGE7Ci0gICAgaW50IG5iX2ltYWdlcyA9IGZm X3ZrX2NvdW50X2ltYWdlcyh2a2YpOwotICAgIGludCBuYl9wbGFuZXMgPSBhdl9waXhfZm10X2Nv dW50X3BsYW5lcyhod2ZjLT5zd19mb3JtYXQpOwotCi0gICAgc3RhdGljIGNvbnN0IFZrSW1hZ2VB c3BlY3RGbGFncyBwbGFuZV9hc3BlY3RbXSA9IHsgVktfSU1BR0VfQVNQRUNUX1BMQU5FXzBfQklU LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFZLX0lNQUdFX0FTUEVDVF9QTEFORV8xX0JJVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19JTUFHRV9BU1BFQ1RfUExBTkVfMl9CSVQs IH07Ci0KLSAgICBpZiAoZmZfdmtfbXRfaXNfbnBfcmdiKGh3ZmMtPnN3X2Zvcm1hdCkgfHwgKG5i X3BsYW5lcyA9PSBuYl9pbWFnZXMpKQotICAgICAgICByZXR1cm4gVktfSU1BR0VfQVNQRUNUX0NP TE9SX0JJVDsKLQotICAgIHJldHVybiBwbGFuZV9hc3BlY3RbcF07Ci19Ci0KLWludCBmZl92a19t dF9pc19ucF9yZ2IoZW51bSBBVlBpeGVsRm9ybWF0IHBpeF9mbXQpCi17Ci0gICAgaWYgKHBpeF9m bXQgPT0gQVZfUElYX0ZNVF9BQkdSICAgfHwgcGl4X2ZtdCA9PSBBVl9QSVhfRk1UX0JHUkEgICB8 fAotICAgICAgICBwaXhfZm10ID09IEFWX1BJWF9GTVRfUkdCQSAgIHx8IHBpeF9mbXQgPT0gQVZf UElYX0ZNVF9SR0IyNCAgfHwKLSAgICAgICAgcGl4X2ZtdCA9PSBBVl9QSVhfRk1UX0JHUjI0ICB8 fCBwaXhfZm10ID09IEFWX1BJWF9GTVRfUkdCNDggIHx8Ci0gICAgICAgIHBpeF9mbXQgPT0gQVZf UElYX0ZNVF9SR0JBNjQgfHwgcGl4X2ZtdCA9PSBBVl9QSVhfRk1UX1JHQjU2NSB8fAotICAgICAg ICBwaXhfZm10ID09IEFWX1BJWF9GTVRfQkdSNTY1IHx8IHBpeF9mbXQgPT0gQVZfUElYX0ZNVF9C R1IwICAgfHwKLSAgICAgICAgcGl4X2ZtdCA9PSBBVl9QSVhfRk1UXzBCR1IgICB8fCBwaXhfZm10 ID09IEFWX1BJWF9GTVRfUkdCMCAgIHx8Ci0gICAgICAgIHBpeF9mbXQgPT0gQVZfUElYX0ZNVF9H QlJQMTAgIHx8IHBpeF9mbXQgPT0gQVZfUElYX0ZNVF9HQlJQMTIgfHwKLSAgICAgICAgcGl4X2Zt dCA9PSBBVl9QSVhfRk1UX0dCUlAxNCAgfHwgcGl4X2ZtdCA9PSBBVl9QSVhfRk1UX0dCUlAxNiB8 fAotICAgICAgICBwaXhfZm10ID09IEFWX1BJWF9GTVRfR0JSQVAgICB8fCBwaXhfZm10ID09IEFW X1BJWF9GTVRfR0JSQVAxMCB8fAotICAgICAgICBwaXhfZm10ID09IEFWX1BJWF9GTVRfR0JSQVAx MiB8fCBwaXhfZm10ID09IEFWX1BJWF9GTVRfR0JSQVAxNCB8fAotICAgICAgICBwaXhfZm10ID09 IEFWX1BJWF9GTVRfR0JSQVAxNiB8fCBwaXhfZm10ID09IEFWX1BJWF9GTVRfR0JSQVAzMiB8fAot ICAgICAgICBwaXhfZm10ID09IEFWX1BJWF9GTVRfR0JSUEYzMiB8fCBwaXhfZm10ID09IEFWX1BJ WF9GTVRfR0JSQVBGMzIgfHwKLSAgICAgICAgcGl4X2ZtdCA9PSBBVl9QSVhfRk1UX1gyUkdCMTAg fHwgcGl4X2ZtdCA9PSBBVl9QSVhfRk1UX1gyQkdSMTAgfHwKLSAgICAgICAgcGl4X2ZtdCA9PSBB Vl9QSVhfRk1UX1JHQkFGMzIgfHwgcGl4X2ZtdCA9PSBBVl9QSVhfRk1UX1JHQkYzMiB8fAotICAg ICAgICBwaXhfZm10ID09IEFWX1BJWF9GTVRfUkdCQTEyOCB8fCBwaXhfZm10ID09IEFWX1BJWF9G TVRfUkdCOTYgfHwKLSAgICAgICAgcGl4X2ZtdCA9PSBBVl9QSVhfRk1UX0dCUlAgfHwgcGl4X2Zt dCA9PSBBVl9QSVhfRk1UX0JBWUVSX1JHR0IxNikKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgcmV0 dXJuIDA7Ci19Ci0KLXZvaWQgZmZfdmtfc2V0X3Blcm0oZW51bSBBVlBpeGVsRm9ybWF0IHBpeF9m bXQsIGludCBsdXRbNF0sIGludCBpbnYpCi17Ci0gICAgc3dpdGNoIChwaXhfZm10KSB7Ci0gICAg Y2FzZSBBVl9QSVhfRk1UX0dCUlA6Ci0gICAgY2FzZSBBVl9QSVhfRk1UX0dCUkFQOgotICAgIGNh c2UgQVZfUElYX0ZNVF9HQlJBUDEwOgotICAgIGNhc2UgQVZfUElYX0ZNVF9HQlJBUDEyOgotICAg IGNhc2UgQVZfUElYX0ZNVF9HQlJBUDE0OgotICAgIGNhc2UgQVZfUElYX0ZNVF9HQlJBUDE2Ogot ICAgIGNhc2UgQVZfUElYX0ZNVF9HQlJQMTA6Ci0gICAgY2FzZSBBVl9QSVhfRk1UX0dCUlAxMjoK LSAgICBjYXNlIEFWX1BJWF9GTVRfR0JSUDE0OgotICAgIGNhc2UgQVZfUElYX0ZNVF9HQlJQMTY6 Ci0gICAgY2FzZSBBVl9QSVhfRk1UX0dCUlBGMzI6Ci0gICAgY2FzZSBBVl9QSVhfRk1UX0dCUkFQ MzI6Ci0gICAgY2FzZSBBVl9QSVhfRk1UX0dCUkFQRjMyOgotICAgICAgICBsdXRbMF0gPSAxOwot ICAgICAgICBsdXRbMV0gPSAyOwotICAgICAgICBsdXRbMl0gPSAwOwotICAgICAgICBsdXRbM10g PSAzOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBsdXRbMF0gPSAwOwot ICAgICAgICBsdXRbMV0gPSAxOwotICAgICAgICBsdXRbMl0gPSAyOwotICAgICAgICBsdXRbM10g PSAzOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBpZiAoaW52KSB7Ci0gICAgICAgIGlu dCBsdXRfdG1wWzRdID0geyBsdXRbMF0sIGx1dFsxXSwgbHV0WzJdLCBsdXRbM10gfTsKLSAgICAg ICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyBpKyspCi0gICAgICAgICAgICBsdXRbbHV0X3RtcFtp XV0gPSBpOwotICAgIH0KLQotICAgIHJldHVybjsKLX0KLQotY29uc3QgY2hhciAqZmZfdmtfc2hh ZGVyX3JlcF9mbXQoZW51bSBBVlBpeGVsRm9ybWF0IHBpeF9mbXQsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBlbnVtIEZGVmtTaGFkZXJSZXBGb3JtYXQgcmVwX2ZtdCkKLXsKLSAg ICBzd2l0Y2ggKHBpeF9mbXQpIHsKLSAgICBjYXNlIEFWX1BJWF9GTVRfUkdCQToKLSAgICBjYXNl IEFWX1BJWF9GTVRfQkdSQToKLSAgICBjYXNlIEFWX1BJWF9GTVRfUkdCMjQ6Ci0gICAgY2FzZSBB Vl9QSVhfRk1UX0JHUjI0OgotICAgIGNhc2UgQVZfUElYX0ZNVF9CR1IwOgotICAgIGNhc2UgQVZf UElYX0ZNVF9SR0IwOgotICAgIGNhc2UgQVZfUElYX0ZNVF9SR0I1NjU6Ci0gICAgY2FzZSBBVl9Q SVhfRk1UX0JHUjU2NToKLSAgICBjYXNlIEFWX1BJWF9GTVRfVVlWQToKLSAgICBjYXNlIEFWX1BJ WF9GTVRfWVVZVjQyMjoKLSAgICBjYXNlIEFWX1BJWF9GTVRfVVlWWTQyMjogewotICAgICAgICBj b25zdCBjaGFyICpyZXBfdGFiW10gPSB7Ci0gICAgICAgICAgICBbRkZfVktfUkVQX05BVElWRV0g PSAicmdiYTh1aSIsCi0gICAgICAgICAgICBbRkZfVktfUkVQX0ZMT0FUXSA9ICJyZ2JhOCIsCi0g ICAgICAgICAgICBbRkZfVktfUkVQX0lOVF0gPSAicmdiYThpIiwKLSAgICAgICAgICAgIFtGRl9W S19SRVBfVUlOVF0gPSAicmdiYTh1aSIsCi0gICAgICAgIH07Ci0gICAgICAgIHJldHVybiByZXBf dGFiW3JlcF9mbXRdOwotICAgIH0KLSAgICBjYXNlIEFWX1BJWF9GTVRfWDJSR0IxMDoKLSAgICBj YXNlIEFWX1BJWF9GTVRfWDJCR1IxMDoKLSAgICBjYXNlIEFWX1BJWF9GTVRfWTIxMDoKLSAgICBj YXNlIEFWX1BJWF9GTVRfWFYzMDogewotICAgICAgICBjb25zdCBjaGFyICpyZXBfdGFiW10gPSB7 Ci0gICAgICAgICAgICBbRkZfVktfUkVQX05BVElWRV0gPSAicmdiMTBfYTJ1aSIsCi0gICAgICAg ICAgICBbRkZfVktfUkVQX0ZMT0FUXSA9ICJyZ2IxMF9hMiIsCi0gICAgICAgICAgICBbRkZfVktf UkVQX0lOVF0gPSBOVUxMLAotICAgICAgICAgICAgW0ZGX1ZLX1JFUF9VSU5UXSA9ICJyZ2IxMF9h MnVpIiwKLSAgICAgICAgfTsKLSAgICAgICAgcmV0dXJuIHJlcF90YWJbcmVwX2ZtdF07Ci0gICAg fQotICAgIGNhc2UgQVZfUElYX0ZNVF9SR0I0ODoKLSAgICBjYXNlIEFWX1BJWF9GTVRfUkdCQTY0 OgotICAgIGNhc2UgQVZfUElYX0ZNVF9ZMjEyOgotICAgIGNhc2UgQVZfUElYX0ZNVF9ZMjE2Ogot ICAgIGNhc2UgQVZfUElYX0ZNVF9YVjM2OgotICAgIGNhc2UgQVZfUElYX0ZNVF9YVjQ4OiB7Ci0g ICAgICAgIGNvbnN0IGNoYXIgKnJlcF90YWJbXSA9IHsKLSAgICAgICAgICAgIFtGRl9WS19SRVBf TkFUSVZFXSA9ICJyZ2JhMTZ1aSIsCi0gICAgICAgICAgICBbRkZfVktfUkVQX0ZMT0FUXSA9ICJy Z2JhMTYiLAotICAgICAgICAgICAgW0ZGX1ZLX1JFUF9JTlRdID0gInJnYmExNmkiLAotICAgICAg ICAgICAgW0ZGX1ZLX1JFUF9VSU5UXSA9ICJyZ2JhMTZ1aSIsCi0gICAgICAgIH07Ci0gICAgICAg IHJldHVybiByZXBfdGFiW3JlcF9mbXRdOwotICAgIH0KLSAgICBjYXNlIEFWX1BJWF9GTVRfUkdC RjMyOgotICAgIGNhc2UgQVZfUElYX0ZNVF9SR0JBRjMyOiB7Ci0gICAgICAgIGNvbnN0IGNoYXIg KnJlcF90YWJbXSA9IHsKLSAgICAgICAgICAgIFtGRl9WS19SRVBfTkFUSVZFXSA9ICJyZ2JhMzJm IiwKLSAgICAgICAgICAgIFtGRl9WS19SRVBfRkxPQVRdID0gInJnYmEzMmYiLAotICAgICAgICAg ICAgW0ZGX1ZLX1JFUF9JTlRdID0gInJnYmEzMmkiLAotICAgICAgICAgICAgW0ZGX1ZLX1JFUF9V SU5UXSA9ICJyZ2JhMzJ1aSIsCi0gICAgICAgIH07Ci0gICAgICAgIHJldHVybiByZXBfdGFiW3Jl cF9mbXRdOwotICAgIH0KLSAgICBjYXNlIEFWX1BJWF9GTVRfUkdCOTY6Ci0gICAgY2FzZSBBVl9Q SVhfRk1UX1JHQkExMjg6IHsKLSAgICAgICAgY29uc3QgY2hhciAqcmVwX3RhYltdID0gewotICAg ICAgICAgICAgW0ZGX1ZLX1JFUF9OQVRJVkVdID0gInJnYmEzMnVpIiwKLSAgICAgICAgICAgIFtG Rl9WS19SRVBfRkxPQVRdID0gTlVMTCwKLSAgICAgICAgICAgIFtGRl9WS19SRVBfSU5UXSA9ICJy Z2JhMzJpIiwKLSAgICAgICAgICAgIFtGRl9WS19SRVBfVUlOVF0gPSAicmdiYTMydWkiLAotICAg ICAgICB9OwotICAgICAgICByZXR1cm4gcmVwX3RhYltyZXBfZm10XTsKLSAgICB9Ci0gICAgY2Fz ZSBBVl9QSVhfRk1UX0dCUlA6Ci0gICAgY2FzZSBBVl9QSVhfRk1UX0dSQVk4OgotICAgIGNhc2Ug QVZfUElYX0ZNVF9HQlJBUDoKLSAgICBjYXNlIEFWX1BJWF9GTVRfWVVWNDIwUDoKLSAgICBjYXNl IEFWX1BJWF9GTVRfWVVWNDIyUDoKLSAgICBjYXNlIEFWX1BJWF9GTVRfWVVWNDQ0UDoKLSAgICBj YXNlIEFWX1BJWF9GTVRfWVVWQTQyMFA6Ci0gICAgY2FzZSBBVl9QSVhfRk1UX1lVVkE0MjJQOgot ICAgIGNhc2UgQVZfUElYX0ZNVF9ZVVZBNDQ0UDogewotICAgICAgICBjb25zdCBjaGFyICpyZXBf dGFiW10gPSB7Ci0gICAgICAgICAgICBbRkZfVktfUkVQX05BVElWRV0gPSAicjh1aSIsCi0gICAg ICAgICAgICBbRkZfVktfUkVQX0ZMT0FUXSA9ICJyOCIsCi0gICAgICAgICAgICBbRkZfVktfUkVQ X0lOVF0gPSAicjhpIiwKLSAgICAgICAgICAgIFtGRl9WS19SRVBfVUlOVF0gPSAicjh1aSIsCi0g ICAgICAgIH07Ci0gICAgICAgIHJldHVybiByZXBfdGFiW3JlcF9mbXRdOwotICAgIH07Ci0gICAg Y2FzZSBBVl9QSVhfRk1UX0dSQVkxMDoKLSAgICBjYXNlIEFWX1BJWF9GTVRfR1JBWTEyOgotICAg IGNhc2UgQVZfUElYX0ZNVF9HUkFZMTQ6Ci0gICAgY2FzZSBBVl9QSVhfRk1UX0dSQVkxNjoKLSAg ICBjYXNlIEFWX1BJWF9GTVRfR0JSQVAxMDoKLSAgICBjYXNlIEFWX1BJWF9GTVRfR0JSQVAxMjoK LSAgICBjYXNlIEFWX1BJWF9GTVRfR0JSQVAxNDoKLSAgICBjYXNlIEFWX1BJWF9GTVRfR0JSQVAx NjoKLSAgICBjYXNlIEFWX1BJWF9GTVRfR0JSUDEwOgotICAgIGNhc2UgQVZfUElYX0ZNVF9HQlJQ MTI6Ci0gICAgY2FzZSBBVl9QSVhfRk1UX0dCUlAxNDoKLSAgICBjYXNlIEFWX1BJWF9GTVRfR0JS UDE2OgotICAgIGNhc2UgQVZfUElYX0ZNVF9ZVVY0MjBQMTA6Ci0gICAgY2FzZSBBVl9QSVhfRk1U X1lVVjQyMFAxMjoKLSAgICBjYXNlIEFWX1BJWF9GTVRfWVVWNDIwUDE2OgotICAgIGNhc2UgQVZf UElYX0ZNVF9ZVVY0MjJQMTA6Ci0gICAgY2FzZSBBVl9QSVhfRk1UX1lVVjQyMlAxMjoKLSAgICBj YXNlIEFWX1BJWF9GTVRfWVVWNDIyUDE2OgotICAgIGNhc2UgQVZfUElYX0ZNVF9ZVVY0NDRQMTA6 Ci0gICAgY2FzZSBBVl9QSVhfRk1UX1lVVjQ0NFAxMjoKLSAgICBjYXNlIEFWX1BJWF9GTVRfWVVW NDQ0UDE2OgotICAgIGNhc2UgQVZfUElYX0ZNVF9ZVVZBNDIwUDEwOgotICAgIGNhc2UgQVZfUElY X0ZNVF9ZVVZBNDIwUDE2OgotICAgIGNhc2UgQVZfUElYX0ZNVF9ZVVZBNDIyUDEwOgotICAgIGNh c2UgQVZfUElYX0ZNVF9ZVVZBNDIyUDEyOgotICAgIGNhc2UgQVZfUElYX0ZNVF9ZVVZBNDIyUDE2 OgotICAgIGNhc2UgQVZfUElYX0ZNVF9ZVVZBNDQ0UDEwOgotICAgIGNhc2UgQVZfUElYX0ZNVF9Z VVZBNDQ0UDEyOgotICAgIGNhc2UgQVZfUElYX0ZNVF9ZVVZBNDQ0UDE2OgotICAgIGNhc2UgQVZf UElYX0ZNVF9CQVlFUl9SR0dCMTY6IHsKLSAgICAgICAgY29uc3QgY2hhciAqcmVwX3RhYltdID0g ewotICAgICAgICAgICAgW0ZGX1ZLX1JFUF9OQVRJVkVdID0gInIxNnVpIiwKLSAgICAgICAgICAg IFtGRl9WS19SRVBfRkxPQVRdID0gInIxNmYiLAotICAgICAgICAgICAgW0ZGX1ZLX1JFUF9JTlRd ID0gInIxNmkiLAotICAgICAgICAgICAgW0ZGX1ZLX1JFUF9VSU5UXSA9ICJyMTZ1aSIsCi0gICAg ICAgIH07Ci0gICAgICAgIHJldHVybiByZXBfdGFiW3JlcF9mbXRdOwotICAgIH07Ci0gICAgY2Fz ZSBBVl9QSVhfRk1UX0dSQVkzMjoKLSAgICBjYXNlIEFWX1BJWF9GTVRfR1JBWUYzMjoKLSAgICBj YXNlIEFWX1BJWF9GTVRfR0JSUEYzMjoKLSAgICBjYXNlIEFWX1BJWF9GTVRfR0JSQVBGMzI6IHsK LSAgICAgICAgY29uc3QgY2hhciAqcmVwX3RhYltdID0gewotICAgICAgICAgICAgW0ZGX1ZLX1JF UF9OQVRJVkVdID0gInIzMmYiLAotICAgICAgICAgICAgW0ZGX1ZLX1JFUF9GTE9BVF0gPSAicjMy ZiIsCi0gICAgICAgICAgICBbRkZfVktfUkVQX0lOVF0gPSAicjMyaSIsCi0gICAgICAgICAgICBb RkZfVktfUkVQX1VJTlRdID0gInIzMnVpIiwKLSAgICAgICAgfTsKLSAgICAgICAgcmV0dXJuIHJl cF90YWJbcmVwX2ZtdF07Ci0gICAgfTsKLSAgICBjYXNlIEFWX1BJWF9GTVRfR0JSQVAzMjogewot ICAgICAgICBjb25zdCBjaGFyICpyZXBfdGFiW10gPSB7Ci0gICAgICAgICAgICBbRkZfVktfUkVQ X05BVElWRV0gPSAicjMydWkiLAotICAgICAgICAgICAgW0ZGX1ZLX1JFUF9GTE9BVF0gPSBOVUxM LAotICAgICAgICAgICAgW0ZGX1ZLX1JFUF9JTlRdID0gInIzMmkiLAotICAgICAgICAgICAgW0ZG X1ZLX1JFUF9VSU5UXSA9ICJyMzJ1aSIsCi0gICAgICAgIH07Ci0gICAgICAgIHJldHVybiByZXBf dGFiW3JlcF9mbXRdOwotICAgIH07Ci0gICAgY2FzZSBBVl9QSVhfRk1UX05WMTI6Ci0gICAgY2Fz ZSBBVl9QSVhfRk1UX05WMTY6Ci0gICAgY2FzZSBBVl9QSVhfRk1UX05WMjQ6IHsKLSAgICAgICAg Y29uc3QgY2hhciAqcmVwX3RhYltdID0gewotICAgICAgICAgICAgW0ZGX1ZLX1JFUF9OQVRJVkVd ID0gInJnOHVpIiwKLSAgICAgICAgICAgIFtGRl9WS19SRVBfRkxPQVRdID0gInJnOCIsCi0gICAg ICAgICAgICBbRkZfVktfUkVQX0lOVF0gPSAicmc4aSIsCi0gICAgICAgICAgICBbRkZfVktfUkVQ X1VJTlRdID0gInJnOHVpIiwKLSAgICAgICAgfTsKLSAgICAgICAgcmV0dXJuIHJlcF90YWJbcmVw X2ZtdF07Ci0gICAgfTsKLSAgICBjYXNlIEFWX1BJWF9GTVRfUDAxMDoKLSAgICBjYXNlIEFWX1BJ WF9GTVRfUDIxMDoKLSAgICBjYXNlIEFWX1BJWF9GTVRfUDQxMDogewotICAgICAgICBjb25zdCBj aGFyICpyZXBfdGFiW10gPSB7Ci0gICAgICAgICAgICBbRkZfVktfUkVQX05BVElWRV0gPSAicmdi MTBfYTJ1aSIsCi0gICAgICAgICAgICBbRkZfVktfUkVQX0ZMT0FUXSA9ICJyZ2IxMF9hMiIsCi0g ICAgICAgICAgICBbRkZfVktfUkVQX0lOVF0gPSBOVUxMLAotICAgICAgICAgICAgW0ZGX1ZLX1JF UF9VSU5UXSA9ICJyZ2IxMF9hMnVpIiwKLSAgICAgICAgfTsKLSAgICAgICAgcmV0dXJuIHJlcF90 YWJbcmVwX2ZtdF07Ci0gICAgfTsKLSAgICBjYXNlIEFWX1BJWF9GTVRfUDAxMjoKLSAgICBjYXNl IEFWX1BJWF9GTVRfUDAxNjoKLSAgICBjYXNlIEFWX1BJWF9GTVRfUDIxMjoKLSAgICBjYXNlIEFW X1BJWF9GTVRfUDIxNjoKLSAgICBjYXNlIEFWX1BJWF9GTVRfUDQxMjoKLSAgICBjYXNlIEFWX1BJ WF9GTVRfUDQxNjogewotICAgICAgICBjb25zdCBjaGFyICpyZXBfdGFiW10gPSB7Ci0gICAgICAg ICAgICBbRkZfVktfUkVQX05BVElWRV0gPSAicmcxNnVpIiwKLSAgICAgICAgICAgIFtGRl9WS19S RVBfRkxPQVRdID0gInJnMTYiLAotICAgICAgICAgICAgW0ZGX1ZLX1JFUF9JTlRdID0gInJnMTZp IiwKLSAgICAgICAgICAgIFtGRl9WS19SRVBfVUlOVF0gPSAicmcxNnVpIiwKLSAgICAgICAgfTsK LSAgICAgICAgcmV0dXJuIHJlcF90YWJbcmVwX2ZtdF07Ci0gICAgfTsKLSAgICBkZWZhdWx0Ogot ICAgICAgICByZXR1cm4gInJnYmEzMmYiOwotICAgIH0KLX0KLQotdHlwZWRlZiBzdHJ1Y3QgSW1h Z2VWaWV3Q3R4IHsKLSAgICBpbnQgbmJfdmlld3M7Ci0gICAgVmtJbWFnZVZpZXcgdmlld3NbXTsK LX0gSW1hZ2VWaWV3Q3R4OwotCi1zdGF0aWMgdm9pZCBkZXN0cm95X2ltYWdldmlld3Modm9pZCAq b3BhcXVlLCB1aW50OF90ICpkYXRhKQotewotICAgIEZGVnVsa2FuQ29udGV4dCAqcyA9IG9wYXF1 ZTsKLSAgICBGRlZ1bGthbkZ1bmN0aW9ucyAqdmsgPSAmcy0+dmtmbjsKLSAgICBJbWFnZVZpZXdD dHggKml2ID0gKEltYWdlVmlld0N0eCAqKWRhdGE7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8 IGl2LT5uYl92aWV3czsgaSsrKQotICAgICAgICB2ay0+RGVzdHJveUltYWdlVmlldyhzLT5od2N0 eC0+YWN0X2RldiwgaXYtPnZpZXdzW2ldLCBzLT5od2N0eC0+YWxsb2MpOwotCi0gICAgYXZfZnJl ZShpdik7Ci19Ci0KLXN0YXRpYyBWa0Zvcm1hdCBtYXBfZm10X3RvX3JlcChWa0Zvcm1hdCBmbXQs IGVudW0gRkZWa1NoYWRlclJlcEZvcm1hdCByZXBfZm10KQotewotI2RlZmluZSBSRVBTX0ZNVChm bXQpIFwKLSAgICBbRkZfVktfUkVQX05BVElWRV0gPSBmbXQgIyMgX1VJTlQsIFwKLSAgICBbRkZf VktfUkVQX0ZMT0FUXSAgPSBmbXQgIyMgX1VOT1JNLCBcCi0gICAgW0ZGX1ZLX1JFUF9JTlRdICAg ID0gZm10ICMjIF9TSU5ULCBcCi0gICAgW0ZGX1ZLX1JFUF9VSU5UXSAgID0gZm10ICMjIF9VSU5U LAotCi0jZGVmaW5lIFJFUFNfRk1UX1BBQ0soZm10LCBudW0pIFwKLSAgICBbRkZfVktfUkVQX05B VElWRV0gPSBmbXQgIyMgX1VJTlRfUEFDSyAjIyBudW0sIFwKLSAgICBbRkZfVktfUkVQX0ZMT0FU XSAgPSBmbXQgIyMgX1VOT1JNX1BBQ0sgIyMgbnVtLCBcCi0gICAgW0ZGX1ZLX1JFUF9JTlRdICAg ID0gZm10ICMjIF9TSU5UX1BBQ0sgIyMgbnVtLCBcCi0gICAgW0ZGX1ZLX1JFUF9VSU5UXSAgID0g Zm10ICMjIF9VSU5UX1BBQ0sgIyMgbnVtLAotCi0gICAgY29uc3QgVmtGb3JtYXQgZm10c19tYXBb XVs0XSA9IHsKLSAgICAgICAgeyBSRVBTX0ZNVF9QQUNLKFZLX0ZPUk1BVF9BMkIxMEcxMFIxMCwg MzIpIH0sCi0gICAgICAgIHsgUkVQU19GTVRfUEFDSyhWS19GT1JNQVRfQTJSMTBHMTBCMTAsIDMy KSB9LAotICAgICAgICB7Ci0gICAgICAgICAgICBWS19GT1JNQVRfQjVHNlI1X1VOT1JNX1BBQ0sx NiwKLSAgICAgICAgICAgIFZLX0ZPUk1BVF9CNUc2UjVfVU5PUk1fUEFDSzE2LAotICAgICAgICAg ICAgVktfRk9STUFUX1VOREVGSU5FRCwKLSAgICAgICAgICAgIFZLX0ZPUk1BVF9VTkRFRklORUQs Ci0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgIFZLX0ZPUk1BVF9SNUc2QjVfVU5P Uk1fUEFDSzE2LAotICAgICAgICAgICAgVktfRk9STUFUX1I1RzZCNV9VTk9STV9QQUNLMTYsCi0g ICAgICAgICAgICBWS19GT1JNQVRfVU5ERUZJTkVELAotICAgICAgICAgICAgVktfRk9STUFUX1VO REVGSU5FRCwKLSAgICAgICAgfSwKLSAgICAgICAgeyBSRVBTX0ZNVChWS19GT1JNQVRfQjhHOFI4 KSB9LAotICAgICAgICB7IFJFUFNfRk1UKFZLX0ZPUk1BVF9COEc4UjhBOCkgfSwKLSAgICAgICAg eyBSRVBTX0ZNVChWS19GT1JNQVRfUjgpIH0sCi0gICAgICAgIHsgUkVQU19GTVQoVktfRk9STUFU X1I4RzgpIH0sCi0gICAgICAgIHsgUkVQU19GTVQoVktfRk9STUFUX1I4RzhCOCkgfSwKLSAgICAg ICAgeyBSRVBTX0ZNVChWS19GT1JNQVRfUjhHOEI4QTgpIH0sCi0gICAgICAgIHsgUkVQU19GTVQo VktfRk9STUFUX1IxNikgfSwKLSAgICAgICAgeyBSRVBTX0ZNVChWS19GT1JNQVRfUjE2RzE2KSB9 LAotICAgICAgICB7IFJFUFNfRk1UKFZLX0ZPUk1BVF9SMTZHMTZCMTYpIH0sCi0gICAgICAgIHsg UkVQU19GTVQoVktfRk9STUFUX1IxNkcxNkIxNkExNikgfSwKLSAgICAgICAgewotICAgICAgICAg ICAgVktfRk9STUFUX1IzMl9VSU5ULAotICAgICAgICAgICAgVktfRk9STUFUX1IzMl9TRkxPQVQs Ci0gICAgICAgICAgICBWS19GT1JNQVRfUjMyX1NJTlQsCi0gICAgICAgICAgICBWS19GT1JNQVRf UjMyX1VJTlQsCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgIFZLX0ZPUk1BVF9S MzJHMzJCMzJfU0ZMT0FULAotICAgICAgICAgICAgVktfRk9STUFUX1IzMkczMkIzMl9TRkxPQVQs Ci0gICAgICAgICAgICBWS19GT1JNQVRfVU5ERUZJTkVELAotICAgICAgICAgICAgVktfRk9STUFU X1VOREVGSU5FRCwKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgVktfRk9STUFU X1IzMkczMkIzMkEzMl9TRkxPQVQsCi0gICAgICAgICAgICBWS19GT1JNQVRfUjMyRzMyQjMyQTMy X1NGTE9BVCwKLSAgICAgICAgICAgIFZLX0ZPUk1BVF9VTkRFRklORUQsCi0gICAgICAgICAgICBW S19GT1JNQVRfVU5ERUZJTkVELAotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICBW S19GT1JNQVRfUjMyRzMyQjMyX1VJTlQsCi0gICAgICAgICAgICBWS19GT1JNQVRfVU5ERUZJTkVE LAotICAgICAgICAgICAgVktfRk9STUFUX1IzMkczMkIzMl9TSU5ULAotICAgICAgICAgICAgVktf Rk9STUFUX1IzMkczMkIzMl9VSU5ULAotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAg ICBWS19GT1JNQVRfUjMyRzMyQjMyQTMyX1VJTlQsCi0gICAgICAgICAgICBWS19GT1JNQVRfVU5E RUZJTkVELAotICAgICAgICAgICAgVktfRk9STUFUX1IzMkczMkIzMkEzMl9TSU5ULAotICAgICAg ICAgICAgVktfRk9STUFUX1IzMkczMkIzMkEzMl9VSU5ULAotICAgICAgICB9LAotICAgIH07Ci0j dW5kZWYgUkVQU19GTVRfUEFDSwotI3VuZGVmIFJFUFNfRk1UCi0KLSAgICBpZiAoZm10ID09IFZL X0ZPUk1BVF9VTkRFRklORUQpCi0gICAgICAgIHJldHVybiBWS19GT1JNQVRfVU5ERUZJTkVEOwot Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBGRl9BUlJBWV9FTEVNUyhmbXRzX21hcCk7IGkrKykg ewotICAgICAgICBpZiAoZm10c19tYXBbaV1bRkZfVktfUkVQX05BVElWRV0gPT0gZm10IHx8Ci0g ICAgICAgICAgICBmbXRzX21hcFtpXVtGRl9WS19SRVBfRkxPQVRdID09IGZtdCB8fAotICAgICAg ICAgICAgZm10c19tYXBbaV1bRkZfVktfUkVQX0lOVF0gPT0gZm10IHx8Ci0gICAgICAgICAgICBm bXRzX21hcFtpXVtGRl9WS19SRVBfVUlOVF0gPT0gZm10KQotICAgICAgICAgICAgcmV0dXJuIGZt dHNfbWFwW2ldW3JlcF9mbXRdOwotICAgIH0KLQotICAgIHJldHVybiBWS19GT1JNQVRfVU5ERUZJ TkVEOwotfQotCi1pbnQgZmZfdmtfY3JlYXRlX2ltYWdldmlldyhGRlZ1bGthbkNvbnRleHQgKnMs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBWa0ltYWdlVmlldyAqaW1nX3ZpZXcsIFZrSW1h Z2VBc3BlY3RGbGFncyAqYXNwZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgQVZGcmFt ZSAqZiwgaW50IHBsYW5lLCBlbnVtIEZGVmtTaGFkZXJSZXBGb3JtYXQgcmVwX2ZtdCkKLXsKLSAg ICBWa1Jlc3VsdCByZXQ7Ci0gICAgRkZWdWxrYW5GdW5jdGlvbnMgKnZrID0gJnMtPnZrZm47Ci0g ICAgQVZIV0ZyYW1lc0NvbnRleHQgKmh3ZmMgPSAoQVZIV0ZyYW1lc0NvbnRleHQgKilmLT5od19m cmFtZXNfY3R4LT5kYXRhOwotICAgIEFWVnVsa2FuRnJhbWVzQ29udGV4dCAqdmtmYyA9IGh3ZmMt Pmh3Y3R4OwotICAgIGNvbnN0IFZrRm9ybWF0ICpyZXBfZm10cyA9IGF2X3ZrZm10X2Zyb21fcGl4 Zm10KGh3ZmMtPnN3X2Zvcm1hdCk7Ci0gICAgQVZWa0ZyYW1lICp2a2YgPSAoQVZWa0ZyYW1lICop Zi0+ZGF0YVswXTsKLSAgICBjb25zdCBpbnQgbmJfaW1hZ2VzID0gZmZfdmtfY291bnRfaW1hZ2Vz KHZrZik7Ci0KLSAgICBWa0ltYWdlVmlld1VzYWdlQ3JlYXRlSW5mbyB2aWV3X3VzYWdlX2luZm8g PSB7Ci0gICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX0lNQUdFX1ZJRVdfVVNBR0Vf Q1JFQVRFX0lORk8sCi0gICAgICAgIC51c2FnZSA9IHZrZmMtPnVzYWdlICYKLSAgICAgICAgICAg ICAgICAgKH4oVktfSU1BR0VfVVNBR0VfVklERU9fRU5DT0RFX1NSQ19CSVRfS0hSIHwKLSAgICAg ICAgICAgICAgICAgICAgVktfSU1BR0VfVVNBR0VfVklERU9fREVDT0RFX0RTVF9CSVRfS0hSKSks Ci0gICAgfTsKLSAgICBWa0ltYWdlVmlld0NyZWF0ZUluZm8gdmlld19jcmVhdGVfaW5mbyA9IHsK LSAgICAgICAgLnNUeXBlICAgICAgPSBWS19TVFJVQ1RVUkVfVFlQRV9JTUFHRV9WSUVXX0NSRUFU RV9JTkZPLAotICAgICAgICAucE5leHQgICAgICA9ICZ2aWV3X3VzYWdlX2luZm8sCi0gICAgICAg IC5pbWFnZSAgICAgID0gdmtmLT5pbWdbRkZNSU4ocGxhbmUsIG5iX2ltYWdlcyAtIDEpXSwKLSAg ICAgICAgLnZpZXdUeXBlICAgPSBWS19JTUFHRV9WSUVXX1RZUEVfMkQsCi0gICAgICAgIC5mb3Jt YXQgICAgID0gbWFwX2ZtdF90b19yZXAocmVwX2ZtdHNbcGxhbmVdLCByZXBfZm10KSwKLSAgICAg ICAgLmNvbXBvbmVudHMgPSBmZl9jb21wX2lkZW50aXR5X21hcCwKLSAgICAgICAgLnN1YnJlc291 cmNlUmFuZ2UgPSB7Ci0gICAgICAgICAgICAuYXNwZWN0TWFzayA9IGZmX3ZrX2FzcGVjdF9mbGFn KGYsIHBsYW5lKSwKLSAgICAgICAgICAgIC5sZXZlbENvdW50ID0gMSwKLSAgICAgICAgICAgIC5s YXllckNvdW50ID0gMSwKLSAgICAgICAgfSwKLSAgICB9OwotICAgIGlmICh2aWV3X2NyZWF0ZV9p bmZvLmZvcm1hdCA9PSBWS19GT1JNQVRfVU5ERUZJTkVEKSB7Ci0gICAgICAgIGF2X2xvZyhzLCBB Vl9MT0dfRVJST1IsICJVbmFibGUgdG8gZmluZCBhIGNvbXBhdGlibGUgcmVwcmVzZW50YXRpb24g IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib2YgZm9ybWF0ICVpIGFuZCBtb2Rl ICVpXG4iLAotICAgICAgICAgICAgICAgcmVwX2ZtdHNbcGxhbmVdLCByZXBfZm10KTsKLSAgICAg ICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKLSAgICB9Ci0KLSAgICByZXQgPSB2ay0+Q3JlYXRl SW1hZ2VWaWV3KHMtPmh3Y3R4LT5hY3RfZGV2LCAmdmlld19jcmVhdGVfaW5mbywKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHMtPmh3Y3R4LT5hbGxvYywgaW1nX3ZpZXcpOwotICAgIGlm IChyZXQgIT0gVktfU1VDQ0VTUykgewotICAgICAgICBhdl9sb2cocywgQVZfTE9HX0VSUk9SLCAi RmFpbGVkIHRvIGNyZWF0ZSBpbWFnZXZpZXc6ICVzXG4iLAotICAgICAgICAgICAgICAgZmZfdmtf cmV0MnN0cihyZXQpKTsKLSAgICAgICAgcmV0dXJuIEFWRVJST1JfRVhURVJOQUw7Ci0gICAgfQot Ci0gICAgKmFzcGVjdCA9IHZpZXdfY3JlYXRlX2luZm8uc3VicmVzb3VyY2VSYW5nZS5hc3BlY3RN YXNrOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLWludCBmZl92a19jcmVhdGVfaW1hZ2V2aWV3cyhG RlZ1bGthbkNvbnRleHQgKnMsIEZGVmtFeGVjQ29udGV4dCAqZSwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICBWa0ltYWdlVmlldyB2aWV3c1tBVl9OVU1fREFUQV9QT0lOVEVSU10sCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgQVZGcmFtZSAqZiwgZW51bSBGRlZrU2hhZGVyUmVwRm9y bWF0IHJlcF9mbXQpCi17Ci0gICAgaW50IGVycjsKLSAgICBWa1Jlc3VsdCByZXQ7Ci0gICAgQVZC dWZmZXJSZWYgKmJ1ZjsKLSAgICBGRlZ1bGthbkZ1bmN0aW9ucyAqdmsgPSAmcy0+dmtmbjsKLSAg ICBBVkhXRnJhbWVzQ29udGV4dCAqaHdmYyA9IChBVkhXRnJhbWVzQ29udGV4dCAqKWYtPmh3X2Zy YW1lc19jdHgtPmRhdGE7Ci0gICAgQVZWdWxrYW5GcmFtZXNDb250ZXh0ICp2a2ZjID0gaHdmYy0+ aHdjdHg7Ci0gICAgY29uc3QgVmtGb3JtYXQgKnJlcF9mbXRzID0gYXZfdmtmbXRfZnJvbV9waXhm bXQoaHdmYy0+c3dfZm9ybWF0KTsKLSAgICBBVlZrRnJhbWUgKnZrZiA9IChBVlZrRnJhbWUgKilm LT5kYXRhWzBdOwotICAgIGNvbnN0IGludCBuYl9pbWFnZXMgPSBmZl92a19jb3VudF9pbWFnZXMo dmtmKTsKLSAgICBjb25zdCBpbnQgbmJfcGxhbmVzID0gYXZfcGl4X2ZtdF9jb3VudF9wbGFuZXMo aHdmYy0+c3dfZm9ybWF0KTsKLQotICAgIEltYWdlVmlld0N0eCAqaXY7Ci0gICAgY29uc3Qgc2l6 ZV90IGJ1Zl9zaXplID0gc2l6ZW9mKCppdikgKyBuYl9wbGFuZXMqc2l6ZW9mKFZrSW1hZ2VWaWV3 KTsKLSAgICBpdiA9IGF2X21hbGxvY3ooYnVmX3NpemUpOwotICAgIGlmICghaXYpCi0gICAgICAg IHJldHVybiBBVkVSUk9SKEVOT01FTSk7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG5iX3Bs YW5lczsgaSsrKSB7Ci0gICAgICAgIFZrSW1hZ2VWaWV3VXNhZ2VDcmVhdGVJbmZvIHZpZXdfdXNh Z2VfaW5mbyA9IHsKLSAgICAgICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX0lNQUdF X1ZJRVdfVVNBR0VfQ1JFQVRFX0lORk8sCi0gICAgICAgICAgICAudXNhZ2UgPSB2a2ZjLT51c2Fn ZSAmCi0gICAgICAgICAgICAgICAgICAgICAofihWS19JTUFHRV9VU0FHRV9WSURFT19FTkNPREVf U1JDX0JJVF9LSFIgfAotICAgICAgICAgICAgICAgICAgICAgICAgVktfSU1BR0VfVVNBR0VfVklE RU9fREVDT0RFX0RTVF9CSVRfS0hSKSksCi0gICAgICAgIH07Ci0gICAgICAgIFZrSW1hZ2VWaWV3 Q3JlYXRlSW5mbyB2aWV3X2NyZWF0ZV9pbmZvID0gewotICAgICAgICAgICAgLnNUeXBlICAgICAg PSBWS19TVFJVQ1RVUkVfVFlQRV9JTUFHRV9WSUVXX0NSRUFURV9JTkZPLAotICAgICAgICAgICAg LnBOZXh0ICAgICAgPSAmdmlld191c2FnZV9pbmZvLAotICAgICAgICAgICAgLmltYWdlICAgICAg PSB2a2YtPmltZ1tGRk1JTihpLCBuYl9pbWFnZXMgLSAxKV0sCi0gICAgICAgICAgICAudmlld1R5 cGUgICA9IFZLX0lNQUdFX1ZJRVdfVFlQRV8yRCwKLSAgICAgICAgICAgIC5mb3JtYXQgICAgID0g bWFwX2ZtdF90b19yZXAocmVwX2ZtdHNbaV0sIHJlcF9mbXQpLAotICAgICAgICAgICAgLmNvbXBv bmVudHMgPSBmZl9jb21wX2lkZW50aXR5X21hcCwKLSAgICAgICAgICAgIC5zdWJyZXNvdXJjZVJh bmdlID0gewotICAgICAgICAgICAgICAgIC5hc3BlY3RNYXNrID0gZmZfdmtfYXNwZWN0X2ZsYWco ZiwgaSksCi0gICAgICAgICAgICAgICAgLmxldmVsQ291bnQgPSAxLAotICAgICAgICAgICAgICAg IC5sYXllckNvdW50ID0gMSwKLSAgICAgICAgICAgIH0sCi0gICAgICAgIH07Ci0gICAgICAgIGlm ICh2aWV3X2NyZWF0ZV9pbmZvLmZvcm1hdCA9PSBWS19GT1JNQVRfVU5ERUZJTkVEKSB7Ci0gICAg ICAgICAgICBhdl9sb2cocywgQVZfTE9HX0VSUk9SLCAiVW5hYmxlIHRvIGZpbmQgYSBjb21wYXRp YmxlIHJlcHJlc2VudGF0aW9uICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICJvZiBmb3JtYXQgJWkgYW5kIG1vZGUgJWlcbiIsCi0gICAgICAgICAgICAgICAgICAgcmVwX2Zt dHNbaV0sIHJlcF9mbXQpOwotICAgICAgICAgICAgZXJyID0gQVZFUlJPUihFSU5WQUwpOwotICAg ICAgICAgICAgZ290byBmYWlsOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0ID0gdmstPkNyZWF0 ZUltYWdlVmlldyhzLT5od2N0eC0+YWN0X2RldiwgJnZpZXdfY3JlYXRlX2luZm8sCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgcy0+aHdjdHgtPmFsbG9jLCAmaXYtPnZpZXdzW2ld KTsKLSAgICAgICAgaWYgKHJldCAhPSBWS19TVUNDRVNTKSB7Ci0gICAgICAgICAgICBhdl9sb2co cywgQVZfTE9HX0VSUk9SLCAiRmFpbGVkIHRvIGNyZWF0ZSBpbWFnZXZpZXc6ICVzXG4iLAotICAg ICAgICAgICAgICAgICAgIGZmX3ZrX3JldDJzdHIocmV0KSk7Ci0gICAgICAgICAgICBlcnIgPSBB VkVSUk9SX0VYVEVSTkFMOwotICAgICAgICAgICAgZ290byBmYWlsOwotICAgICAgICB9Ci0KLSAg ICAgICAgaXYtPm5iX3ZpZXdzKys7Ci0gICAgfQotCi0gICAgYnVmID0gYXZfYnVmZmVyX2NyZWF0 ZSgodWludDhfdCAqKWl2LCBidWZfc2l6ZSwgZGVzdHJveV9pbWFnZXZpZXdzLCBzLCAwKTsKLSAg ICBpZiAoIWJ1ZikgewotICAgICAgICBlcnIgPSBBVkVSUk9SKEVOT01FTSk7Ci0gICAgICAgIGdv dG8gZmFpbDsKLSAgICB9Ci0KLSAgICAvKiBBZGQgdG8gcXVldWUgZGVwZW5kZW5jaWVzICovCi0g ICAgZXJyID0gZmZfdmtfZXhlY19hZGRfZGVwX2J1ZihzLCBlLCAmYnVmLCAxLCAwKTsKLSAgICBp ZiAoZXJyIDwgMCkKLSAgICAgICAgYXZfYnVmZmVyX3VucmVmKCZidWYpOwotCi0gICAgbWVtY3B5 KHZpZXdzLCBpdi0+dmlld3MsIG5iX3BsYW5lcypzaXplb2YoKnZpZXdzKSk7Ci0KLSAgICByZXR1 cm4gZXJyOwotCi1mYWlsOgotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaXYtPm5iX3ZpZXdzOyBp KyspCi0gICAgICAgIHZrLT5EZXN0cm95SW1hZ2VWaWV3KHMtPmh3Y3R4LT5hY3RfZGV2LCBpdi0+ dmlld3NbaV0sIHMtPmh3Y3R4LT5hbGxvYyk7Ci0gICAgYXZfZnJlZShpdik7Ci0gICAgcmV0dXJu IGVycjsKLX0KLQotdm9pZCBmZl92a19mcmFtZV9iYXJyaWVyKEZGVnVsa2FuQ29udGV4dCAqcywg RkZWa0V4ZWNDb250ZXh0ICplLAotICAgICAgICAgICAgICAgICAgICAgICAgIEFWRnJhbWUgKnBp YywgVmtJbWFnZU1lbW9yeUJhcnJpZXIyICpiYXIsIGludCAqbmJfYmFyLAotICAgICAgICAgICAg ICAgICAgICAgICAgIFZrUGlwZWxpbmVTdGFnZUZsYWdzIHNyY19zdGFnZSwKLSAgICAgICAgICAg ICAgICAgICAgICAgICBWa1BpcGVsaW5lU3RhZ2VGbGFncyBkc3Rfc3RhZ2UsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgVmtBY2Nlc3NGbGFnQml0cyAgICAgbmV3X2FjY2VzcywKLSAgICAgICAg ICAgICAgICAgICAgICAgICBWa0ltYWdlTGF5b3V0ICAgICAgICBuZXdfbGF5b3V0LAotICAgICAg ICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICAgICAgICAgICAgIG5ld19xZikKLXsKLSAgICBp bnQgZm91bmQgPSAtMTsKLSAgICBBVlZrRnJhbWUgKnZrZiA9IChBVlZrRnJhbWUgKilwaWMtPmRh dGFbMF07Ci0gICAgY29uc3QgaW50IG5iX2ltYWdlcyA9IGZmX3ZrX2NvdW50X2ltYWdlcyh2a2Yp OwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZS0+bmJfZnJhbWVfZGVwczsgaSsrKQotICAgICAg ICBpZiAoZS0+ZnJhbWVfZGVwc1tpXS0+ZGF0YVswXSA9PSBwaWMtPmRhdGFbMF0pIHsKLSAgICAg ICAgICAgIGlmIChlLT5mcmFtZV91cGRhdGVbaV0pCi0gICAgICAgICAgICAgICAgZm91bmQgPSBp OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgIGZvciAoaW50IGkgPSAwOyBp IDwgbmJfaW1hZ2VzOyBpKyspIHsKLSAgICAgICAgYmFyWypuYl9iYXJdID0gKFZrSW1hZ2VNZW1v cnlCYXJyaWVyMikgewotICAgICAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfSU1B R0VfTUVNT1JZX0JBUlJJRVJfMiwKLSAgICAgICAgICAgIC5wTmV4dCA9IE5VTEwsCi0gICAgICAg ICAgICAuc3JjU3RhZ2VNYXNrID0gc3JjX3N0YWdlLAotICAgICAgICAgICAgLmRzdFN0YWdlTWFz ayA9IGRzdF9zdGFnZSwKLSAgICAgICAgICAgIC5zcmNBY2Nlc3NNYXNrID0gZm91bmQgPj0gMCA/ IGUtPmFjY2Vzc19kc3RbZm91bmRdIDogdmtmLT5hY2Nlc3NbaV0sCi0gICAgICAgICAgICAuZHN0 QWNjZXNzTWFzayA9IG5ld19hY2Nlc3MsCi0gICAgICAgICAgICAub2xkTGF5b3V0ID0gZm91bmQg Pj0gMCA/IGUtPmxheW91dF9kc3RbZm91bmRdIDogdmtmLT5sYXlvdXRbMF0sCi0gICAgICAgICAg ICAubmV3TGF5b3V0ID0gbmV3X2xheW91dCwKLSAgICAgICAgICAgIC5zcmNRdWV1ZUZhbWlseUlu ZGV4ID0gZm91bmQgPj0gMCA/IGUtPnF1ZXVlX2ZhbWlseV9kc3RbZm91bmRdIDogdmtmLT5xdWV1 ZV9mYW1pbHlbMF0sCi0gICAgICAgICAgICAuZHN0UXVldWVGYW1pbHlJbmRleCA9IG5ld19xZiwK LSAgICAgICAgICAgIC5pbWFnZSA9IHZrZi0+aW1nW2ldLAotICAgICAgICAgICAgLnN1YnJlc291 cmNlUmFuZ2UgPSAoVmtJbWFnZVN1YnJlc291cmNlUmFuZ2UpIHsKLSAgICAgICAgICAgICAgICAu YXNwZWN0TWFzayA9IFZLX0lNQUdFX0FTUEVDVF9DT0xPUl9CSVQsCi0gICAgICAgICAgICAgICAg LmxheWVyQ291bnQgPSAxLAotICAgICAgICAgICAgICAgIC5sZXZlbENvdW50ID0gMSwKLSAgICAg ICAgICAgIH0sCi0gICAgICAgIH07Ci0gICAgICAgICpuYl9iYXIgKz0gMTsKLSAgICB9Ci0KLSAg ICBmZl92a19leGVjX3VwZGF0ZV9mcmFtZShzLCBlLCBwaWMsICZiYXJbKm5iX2JhciAtIG5iX2lt YWdlc10sIE5VTEwpOwotfQotCi1pbnQgZmZfdmtfc2hhZGVyX2luaXQoRkZWdWxrYW5Db250ZXh0 ICpzLCBGRlZ1bGthblNoYWRlciAqc2hkLCBjb25zdCBjaGFyICpuYW1lLAotICAgICAgICAgICAg ICAgICAgICAgIFZrUGlwZWxpbmVTdGFnZUZsYWdzIHN0YWdlLAotICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IGNoYXIgKmV4dGVuc2lvbnNbXSwgaW50IG5iX2V4dGVuc2lvbnMsCi0gICAgICAg ICAgICAgICAgICAgICAgaW50IGxnX3gsIGludCBsZ195LCBpbnQgbGdfeiwKLSAgICAgICAgICAg ICAgICAgICAgICB1aW50MzJfdCByZXF1aXJlZF9zdWJncm91cF9zaXplKQotewotICAgIGF2X2Jw cmludF9pbml0KCZzaGQtPnNyYywgMCwgQVZfQlBSSU5UX1NJWkVfVU5MSU1JVEVEKTsKLQotICAg IHNoZC0+bmFtZSA9IG5hbWU7Ci0gICAgc2hkLT5zdGFnZSA9IHN0YWdlOwotICAgIHNoZC0+bGdf c2l6ZVswXSA9IGxnX3g7Ci0gICAgc2hkLT5sZ19zaXplWzFdID0gbGdfeTsKLSAgICBzaGQtPmxn X3NpemVbMl0gPSBsZ196OwotCi0gICAgc3dpdGNoIChzaGQtPnN0YWdlKSB7Ci0gICAgY2FzZSBW S19TSEFERVJfU1RBR0VfQU5ZX0hJVF9CSVRfS0hSOgotICAgIGNhc2UgVktfU0hBREVSX1NUQUdF X0NBTExBQkxFX0JJVF9LSFI6Ci0gICAgY2FzZSBWS19TSEFERVJfU1RBR0VfQ0xPU0VTVF9ISVRf QklUX0tIUjoKLSAgICBjYXNlIFZLX1NIQURFUl9TVEFHRV9JTlRFUlNFQ1RJT05fQklUX0tIUjoK LSAgICBjYXNlIFZLX1NIQURFUl9TVEFHRV9NSVNTX0JJVF9LSFI6Ci0gICAgY2FzZSBWS19TSEFE RVJfU1RBR0VfUkFZR0VOX0JJVF9LSFI6Ci0gICAgICAgIHNoZC0+YmluZF9wb2ludCA9IFZLX1BJ UEVMSU5FX0JJTkRfUE9JTlRfUkFZX1RSQUNJTkdfS0hSOwotICAgICAgICBicmVhazsKLSAgICBj YXNlIFZLX1NIQURFUl9TVEFHRV9DT01QVVRFX0JJVDoKLSAgICAgICAgc2hkLT5iaW5kX3BvaW50 ID0gVktfUElQRUxJTkVfQklORF9QT0lOVF9DT01QVVRFOwotICAgICAgICBicmVhazsKLSAgICBk ZWZhdWx0OgotICAgICAgICBzaGQtPmJpbmRfcG9pbnQgPSBWS19QSVBFTElORV9CSU5EX1BPSU5U X0dSQVBISUNTOwotICAgICAgICBicmVhazsKLSAgICB9OwotCi0gICAgaWYgKHJlcXVpcmVkX3N1 Ymdyb3VwX3NpemUpIHsKLSAgICAgICAgc2hkLT5zdWJncm91cF9pbmZvLnNUeXBlID0gVktfU1RS VUNUVVJFX1RZUEVfUElQRUxJTkVfU0hBREVSX1NUQUdFX1JFUVVJUkVEX1NVQkdST1VQX1NJWkVf Q1JFQVRFX0lORk87Ci0gICAgICAgIHNoZC0+c3ViZ3JvdXBfaW5mby5yZXF1aXJlZFN1Ymdyb3Vw U2l6ZSA9IHJlcXVpcmVkX3N1Ymdyb3VwX3NpemU7Ci0gICAgfQotCi0gICAgYXZfYnByaW50Zigm c2hkLT5zcmMsICIvKiAlcyBzaGFkZXI6ICVzICovXG4iLAotICAgICAgICAgICAgICAgKHN0YWdl ID09IFZLX1NIQURFUl9TVEFHRV9UQVNLX0JJVF9FWFQgfHwKLSAgICAgICAgICAgICAgICBzdGFn ZSA9PSBWS19TSEFERVJfU1RBR0VfTUVTSF9CSVRfRVhUKSA/Ci0gICAgICAgICAgICAgICAiTWVz aCIgOgotICAgICAgICAgICAgICAgKHNoZC0+YmluZF9wb2ludCA9PSBWS19QSVBFTElORV9CSU5E X1BPSU5UX1JBWV9UUkFDSU5HX0tIUikgPwotICAgICAgICAgICAgICAgIlJheXRyYWNlIiA6Ci0g ICAgICAgICAgICAgICAoc2hkLT5iaW5kX3BvaW50ID09IFZLX1BJUEVMSU5FX0JJTkRfUE9JTlRf Q09NUFVURSkgPwotICAgICAgICAgICAgICAgIkNvbXB1dGUiIDogIkdyYXBoaWNzIiwKLSAgICAg ICAgICAgICAgIG5hbWUpOwotICAgIEdMU0xGKDAsICN2ZXJzaW9uICVpICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsNDYwKTsKLSAgICBHTFNMQygwLCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICk7Ci0KLSAgICAvKiBDb21tb24gdXRpbGl0aWVzICovCi0gICAgR0xTTEMoMCwgI2Rl ZmluZSBJU19XSVRISU4odjEsIHYyKSAoKHYxLnggPCB2Mi54KSAmJiAodjEueSA8IHYyLnkpKSAg ICAgICApOwotICAgIEdMU0xDKDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBHTFNMQygwLCAjZXh0ZW5zaW9u IEdMX0VYVF9zY2FsYXJfYmxvY2tfbGF5b3V0IDogcmVxdWlyZSAgICAgICAgICAgICAgICAgICk7 Ci0gICAgR0xTTEMoMCwgI2V4dGVuc2lvbiBHTF9FWFRfc2hhZGVyX2V4cGxpY2l0X2FyaXRobWV0 aWNfdHlwZXMgOiByZXF1aXJlICAgICApOwotICAgIEdMU0xDKDAsICNleHRlbnNpb24gR0xfRVhU X2NvbnRyb2xfZmxvd19hdHRyaWJ1dGVzIDogcmVxdWlyZSAgICAgICAgICAgICAgKTsKLSAgICBH TFNMQygwLCAjZXh0ZW5zaW9uIEdMX0VYVF9zaGFkZXJfaW1hZ2VfbG9hZF9mb3JtYXR0ZWQgOiBy ZXF1aXJlICAgICAgICAgICk7Ci0gICAgaWYgKHMtPmV4dGVuc2lvbnMgJiBGRl9WS19FWFRfRVhQ RUNUX0FTU1VNRSkgewotICAgICAgICBHTFNMQygwLCAjZXh0ZW5zaW9uIEdMX0VYVF9leHBlY3Rf YXNzdW1lIDogcmVxdWlyZSAgICAgICAgICAgICAgICAgICAgKTsKLSAgICB9IGVsc2UgewotICAg ICAgICBHTFNMQygwLCAjZGVmaW5lIGFzc3VtZUVYVCh4KSAoeCkgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgR0xTTEMoMCwgI2RlZmluZSBleHBlY3RFWFQo eCwgYykgKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgfQotICAg IGlmICgocy0+ZXh0ZW5zaW9ucyAmIEZGX1ZLX0VYVF9ERUJVR19VVElMUykgJiYKLSAgICAgICAg KHMtPmV4dGVuc2lvbnMgJiBGRl9WS19FWFRfUkVMQVhFRF9FWFRFTkRFRF9JTlNUUikpIHsKLSAg ICAgICAgR0xTTEMoMCwgI2V4dGVuc2lvbiBHTF9FWFRfZGVidWdfcHJpbnRmIDogcmVxdWlyZSAg ICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgIEdMU0xDKDAsICNkZWZpbmUgREVCVUcgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIH0KLQot ICAgIGlmIChzdGFnZSA9PSBWS19TSEFERVJfU1RBR0VfVEFTS19CSVRfRVhUIHx8Ci0gICAgICAg IHN0YWdlID09IFZLX1NIQURFUl9TVEFHRV9NRVNIX0JJVF9FWFQpCi0gICAgICAgIEdMU0xDKDAs ICNleHRlbnNpb24gR0xfRVhUX21lc2hfc2hhZGVyIDogcmVxdWlyZSAgICAgICAgICAgICAgICAg ICAgICApOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuYl9leHRlbnNpb25zOyBpKyspCi0g ICAgICAgIEdMU0xGKDAsICNleHRlbnNpb24gJXMgOiAlcyAgICAgICAgICAgICAgICAgICxleHRl bnNpb25zW2ldLCAicmVxdWlyZSIpOwotICAgIEdMU0xDKDAsICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLQotICAgIEdM U0xGKDAsIGxheW91dCAobG9jYWxfc2l6ZV94ID0gJWksIGxvY2FsX3NpemVfeSA9ICVpLCBsb2Nh bF9zaXplX3ogPSAlaSkgaW47Ci0gICAgICAgICAgLCBzaGQtPmxnX3NpemVbMF0sIHNoZC0+bGdf c2l6ZVsxXSwgc2hkLT5sZ19zaXplWzJdKTsKLSAgICBHTFNMQygwLCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0KLSAg ICByZXR1cm4gMDsKLX0KLQotdm9pZCBmZl92a19zaGFkZXJfcHJpbnQodm9pZCAqY3R4LCBGRlZ1 bGthblNoYWRlciAqc2hkLCBpbnQgcHJpbykKLXsKLSAgICBpbnQgbGluZSA9IDA7Ci0gICAgY29u c3QgY2hhciAqcCA9IHNoZC0+c3JjLnN0cjsKLSAgICBjb25zdCBjaGFyICpzdGFydCA9IHA7Ci0g ICAgY29uc3Qgc2l6ZV90IGxlbiA9IHN0cmxlbihwKTsKLQotICAgIEFWQlByaW50IGJ1ZjsKLSAg ICBhdl9icHJpbnRfaW5pdCgmYnVmLCAwLCBBVl9CUFJJTlRfU0laRV9VTkxJTUlURUQpOwotCi0g ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47IGkrKykgewotICAgICAgICBpZiAocFtpXSA9PSAn XG4nKSB7Ci0gICAgICAgICAgICBhdl9icHJpbnRmKCZidWYsICIlaVx0IiwgKytsaW5lKTsKLSAg ICAgICAgICAgIGF2X2JwcmludF9hcHBlbmRfZGF0YSgmYnVmLCBzdGFydCwgJnBbaV0gLSBzdGFy dCArIDEpOwotICAgICAgICAgICAgc3RhcnQgPSAmcFtpICsgMV07Ci0gICAgICAgIH0KLSAgICB9 Ci0KLSAgICBhdl9sb2coY3R4LCBwcmlvLCAiU2hhZGVyICVzOiBcbiVzIiwgc2hkLT5uYW1lLCBi dWYuc3RyKTsKLSAgICBhdl9icHJpbnRfZmluYWxpemUoJmJ1ZiwgTlVMTCk7Ci19Ci0KLXN0YXRp YyBpbnQgaW5pdF9waXBlbGluZV9sYXlvdXQoRkZWdWxrYW5Db250ZXh0ICpzLCBGRlZ1bGthblNo YWRlciAqc2hkKQotewotICAgIFZrUmVzdWx0IHJldDsKLSAgICBGRlZ1bGthbkZ1bmN0aW9ucyAq dmsgPSAmcy0+dmtmbjsKLSAgICBWa1BpcGVsaW5lTGF5b3V0Q3JlYXRlSW5mbyBwaXBlbGluZV9s YXlvdXRfaW5mbzsKLQotICAgIC8qIEZpbmFsbHkgY3JlYXRlIHRoZSBwaXBlbGluZSBsYXlvdXQg Ki8KLSAgICBwaXBlbGluZV9sYXlvdXRfaW5mbyA9IChWa1BpcGVsaW5lTGF5b3V0Q3JlYXRlSW5m bykgewotICAgICAgICAuc1R5cGUgICAgICAgICAgICAgICAgICA9IFZLX1NUUlVDVFVSRV9UWVBF X1BJUEVMSU5FX0xBWU9VVF9DUkVBVEVfSU5GTywKLSAgICAgICAgLnBTZXRMYXlvdXRzICAgICAg ICAgICAgPSBzaGQtPmRlc2NfbGF5b3V0LAotICAgICAgICAuc2V0TGF5b3V0Q291bnQgICAgICAg ICA9IHNoZC0+bmJfZGVzY3JpcHRvcl9zZXRzLAotICAgICAgICAucHVzaENvbnN0YW50UmFuZ2VD b3VudCA9IHNoZC0+cHVzaF9jb25zdHNfbnVtLAotICAgICAgICAucFB1c2hDb25zdGFudFJhbmdl cyAgICA9IHNoZC0+cHVzaF9jb25zdHMsCi0gICAgfTsKLQotICAgIHJldCA9IHZrLT5DcmVhdGVQ aXBlbGluZUxheW91dChzLT5od2N0eC0+YWN0X2RldiwgJnBpcGVsaW5lX2xheW91dF9pbmZvLAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLT5od2N0eC0+YWxsb2MsICZzaGQt PnBpcGVsaW5lX2xheW91dCk7Ci0gICAgaWYgKHJldCAhPSBWS19TVUNDRVNTKSB7Ci0gICAgICAg IGF2X2xvZyhzLCBBVl9MT0dfRVJST1IsICJVbmFibGUgdG8gaW5pdCBwaXBlbGluZSBsYXlvdXQ6 ICVzXG4iLAotICAgICAgICAgICAgICAgZmZfdmtfcmV0MnN0cihyZXQpKTsKLSAgICAgICAgcmV0 dXJuIEFWRVJST1JfRVhURVJOQUw7Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRp YyBpbnQgY3JlYXRlX3NoYWRlcl9tb2R1bGUoRkZWdWxrYW5Db250ZXh0ICpzLCBGRlZ1bGthblNo YWRlciAqc2hkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWa1NoYWRlck1vZHVs ZSAqbW9kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpzcGlydiwg c2l6ZV90IHNwaXJ2X2xlbikKLXsKLSAgICBWa1Jlc3VsdCByZXQ7Ci0gICAgRkZWdWxrYW5GdW5j dGlvbnMgKnZrID0gJnMtPnZrZm47Ci0KLSAgICBWa1NoYWRlck1vZHVsZUNyZWF0ZUluZm8gc2hh ZGVyX21vZHVsZV9pbmZvID0gewotICAgICAgICAuc1R5cGUgICAgPSBWS19TVFJVQ1RVUkVfVFlQ RV9TSEFERVJfTU9EVUxFX0NSRUFURV9JTkZPLAotICAgICAgICAucE5leHQgICAgPSBOVUxMLAot ICAgICAgICAuZmxhZ3MgICAgPSAweDAsCi0gICAgICAgIC5wQ29kZSAgICA9ICh2b2lkICopc3Bp cnYsCi0gICAgICAgIC5jb2RlU2l6ZSA9IHNwaXJ2X2xlbiwKLSAgICB9OwotCi0gICAgcmV0ID0g dmstPkNyZWF0ZVNoYWRlck1vZHVsZShzLT5od2N0eC0+YWN0X2RldiwgJnNoYWRlcl9tb2R1bGVf aW5mbywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMtPmh3Y3R4LT5hbGxvYywg bW9kKTsKLSAgICBpZiAocmV0ICE9IFZLX1NVQ0NFU1MpIHsKLSAgICAgICAgYXZfbG9nKHMsIEFW X0xPR19FUlJPUiwgIkVycm9yIGNyZWF0aW5nIHNoYWRlciBtb2R1bGU6ICVzXG4iLAotICAgICAg ICAgICAgICAgZmZfdmtfcmV0MnN0cihyZXQpKTsKLSAgICAgICAgcmV0dXJuIEFWRVJST1JfRVhU RVJOQUw7Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgaW5pdF9jb21w dXRlX3BpcGVsaW5lKEZGVnVsa2FuQ29udGV4dCAqcywgRkZWdWxrYW5TaGFkZXIgKnNoZCwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZrU2hhZGVyTW9kdWxlIG1vZCwgY29uc3Qg Y2hhciAqZW50cnlwb2ludCkKLXsKLSAgICBWa1Jlc3VsdCByZXQ7Ci0gICAgRkZWdWxrYW5GdW5j dGlvbnMgKnZrID0gJnMtPnZrZm47Ci0KLSAgICBWa0NvbXB1dGVQaXBlbGluZUNyZWF0ZUluZm8g cGlwZWxpbmVfY3JlYXRlX2luZm8gPSB7Ci0gICAgICAgIC5zVHlwZSAgPSBWS19TVFJVQ1RVUkVf VFlQRV9DT01QVVRFX1BJUEVMSU5FX0NSRUFURV9JTkZPLAotICAgICAgICAuZmxhZ3MgPSAocy0+ ZXh0ZW5zaW9ucyAmIEZGX1ZLX0VYVF9ERVNDUklQVE9SX0JVRkZFUikgPwotICAgICAgICAgICAg ICAgICBWS19QSVBFTElORV9DUkVBVEVfREVTQ1JJUFRPUl9CVUZGRVJfQklUX0VYVCA6IDB4MCwK LSAgICAgICAgLmxheW91dCA9IHNoZC0+cGlwZWxpbmVfbGF5b3V0LAotICAgICAgICAuc3RhZ2Ug PSAoVmtQaXBlbGluZVNoYWRlclN0YWdlQ3JlYXRlSW5mbykgewotICAgICAgICAgICAgLnNUeXBl ID0gVktfU1RSVUNUVVJFX1RZUEVfUElQRUxJTkVfU0hBREVSX1NUQUdFX0NSRUFURV9JTkZPLAot ICAgICAgICAgICAgLnBOZXh0ID0gc2hkLT5zdWJncm91cF9pbmZvLnJlcXVpcmVkU3ViZ3JvdXBT aXplID8KLSAgICAgICAgICAgICAgICAgICAgICZzaGQtPnN1Ymdyb3VwX2luZm8gOiBOVUxMLAot ICAgICAgICAgICAgLnBOYW1lID0gZW50cnlwb2ludCwKLSAgICAgICAgICAgIC5mbGFncyA9IHNo ZC0+c3ViZ3JvdXBfaW5mby5yZXF1aXJlZFN1Ymdyb3VwU2l6ZSA/Ci0gICAgICAgICAgICAgICAg ICAgICBWS19QSVBFTElORV9TSEFERVJfU1RBR0VfQ1JFQVRFX1JFUVVJUkVfRlVMTF9TVUJHUk9V UFNfQklUIDogMHgwLAotICAgICAgICAgICAgLnN0YWdlID0gc2hkLT5zdGFnZSwKLSAgICAgICAg ICAgIC5tb2R1bGUgPSBtb2QsCi0gICAgICAgIH0sCi0gICAgfTsKLQotICAgIHJldCA9IHZrLT5D cmVhdGVDb21wdXRlUGlwZWxpbmVzKHMtPmh3Y3R4LT5hY3RfZGV2LCBWS19OVUxMX0hBTkRMRSwg MSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcGlwZWxpbmVfY3JlYXRl X2luZm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy0+aHdjdHgtPmFs bG9jLCAmc2hkLT5waXBlbGluZSk7Ci0gICAgaWYgKHJldCAhPSBWS19TVUNDRVNTKSB7Ci0gICAg ICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJST1IsICJVbmFibGUgdG8gaW5pdCBjb21wdXRlIHBpcGVs aW5lOiAlc1xuIiwKLSAgICAgICAgICAgICAgIGZmX3ZrX3JldDJzdHIocmV0KSk7Ci0gICAgICAg IHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOwotICAgIH0KLQotICAgIHJldHVybiAwOwotfQotCi1z dGF0aWMgaW50IGNyZWF0ZV9zaGFkZXJfb2JqZWN0KEZGVnVsa2FuQ29udGV4dCAqcywgRkZWdWxr YW5TaGFkZXIgKnNoZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAq c3BpcnYsIHNpemVfdCBzcGlydl9sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IGNoYXIgKmVudHJ5cG9pbnQpCi17Ci0gICAgVmtSZXN1bHQgcmV0OwotICAgIEZGVnVs a2FuRnVuY3Rpb25zICp2ayA9ICZzLT52a2ZuOwotICAgIHNpemVfdCBzaGFkZXJfc2l6ZSA9IDA7 Ci0KLSAgICBWa1NoYWRlckNyZWF0ZUluZm9FWFQgc2hhZGVyX29ial9jcmVhdGUgPSB7Ci0gICAg ICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX1NIQURFUl9DUkVBVEVfSU5GT19FWFQsCi0g ICAgICAgIC5mbGFncyA9IHNoZC0+c3ViZ3JvdXBfaW5mby5yZXF1aXJlZFN1Ymdyb3VwU2l6ZSA/ Ci0gICAgICAgICAgICAgICAgIFZLX1NIQURFUl9DUkVBVEVfUkVRVUlSRV9GVUxMX1NVQkdST1VQ U19CSVRfRVhUIDogMHgwLAotICAgICAgICAuc3RhZ2UgPSBzaGQtPnN0YWdlLAotICAgICAgICAu bmV4dFN0YWdlID0gMCwKLSAgICAgICAgLmNvZGVUeXBlID0gVktfU0hBREVSX0NPREVfVFlQRV9T UElSVl9FWFQsCi0gICAgICAgIC5wQ29kZSA9IHNwaXJ2LAotICAgICAgICAuY29kZVNpemUgPSBz cGlydl9sZW4sCi0gICAgICAgIC5wTmFtZSA9IGVudHJ5cG9pbnQsCi0gICAgICAgIC5wU2V0TGF5 b3V0cyA9IHNoZC0+ZGVzY19sYXlvdXQsCi0gICAgICAgIC5zZXRMYXlvdXRDb3VudCA9IHNoZC0+ bmJfZGVzY3JpcHRvcl9zZXRzLAotICAgICAgICAucHVzaENvbnN0YW50UmFuZ2VDb3VudCA9IHNo ZC0+cHVzaF9jb25zdHNfbnVtLAotICAgICAgICAucFB1c2hDb25zdGFudFJhbmdlcyA9IHNoZC0+ cHVzaF9jb25zdHMsCi0gICAgICAgIC5wU3BlY2lhbGl6YXRpb25JbmZvID0gTlVMTCwKLSAgICB9 OwotCi0gICAgcmV0ID0gdmstPkNyZWF0ZVNoYWRlcnNFWFQocy0+aHdjdHgtPmFjdF9kZXYsIDEs ICZzaGFkZXJfb2JqX2NyZWF0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLT5o d2N0eC0+YWxsb2MsICZzaGQtPm9iamVjdCk7Ci0gICAgaWYgKHJldCAhPSBWS19TVUNDRVNTKSB7 Ci0gICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJST1IsICJVbmFibGUgdG8gY3JlYXRlIHNoYWRl ciBvYmplY3Q6ICVzXG4iLAotICAgICAgICAgICAgICAgZmZfdmtfcmV0MnN0cihyZXQpKTsKLSAg ICAgICAgcmV0dXJuIEFWRVJST1JfRVhURVJOQUw7Ci0gICAgfQotCi0gICAgaWYgKHZrLT5HZXRT aGFkZXJCaW5hcnlEYXRhRVhUKHMtPmh3Y3R4LT5hY3RfZGV2LCBzaGQtPm9iamVjdCwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNoYWRlcl9zaXplLCBOVUxMKSA9PSBWS19T VUNDRVNTKQotICAgICAgICBhdl9sb2cocywgQVZfTE9HX1ZFUkJPU0UsICJTaGFkZXIgJXMgc2l6 ZTogJXp1IGJpbmFyeSAoJXp1IFNQSVItVilcbiIsCi0gICAgICAgICAgICAgICBzaGQtPm5hbWUs IHNoYWRlcl9zaXplLCBzcGlydl9sZW4pOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBp bnQgaW5pdF9kZXNjcmlwdG9ycyhGRlZ1bGthbkNvbnRleHQgKnMsIEZGVnVsa2FuU2hhZGVyICpz aGQpCi17Ci0gICAgVmtSZXN1bHQgcmV0OwotICAgIEZGVnVsa2FuRnVuY3Rpb25zICp2ayA9ICZz LT52a2ZuOwotCi0gICAgc2hkLT5kZXNjX2xheW91dCA9IGF2X21hbGxvY19hcnJheShzaGQtPm5i X2Rlc2NyaXB0b3Jfc2V0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHNpemVvZigqc2hkLT5kZXNjX2xheW91dCkpOwotICAgIGlmICghc2hkLT5kZXNjX2xheW91dCkK LSAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKLQotICAgIGlmICghKHMtPmV4dGVuc2lv bnMgJiBGRl9WS19FWFRfREVTQ1JJUFRPUl9CVUZGRVIpKSB7Ci0gICAgICAgIGludCBoYXNfc2lu Z3VsYXIgPSAwOwotICAgICAgICBpbnQgbWF4X2Rlc2NyaXB0b3JzID0gMDsKLSAgICAgICAgZm9y IChpbnQgaSA9IDA7IGkgPCBzaGQtPm5iX2Rlc2NyaXB0b3Jfc2V0czsgaSsrKSB7Ci0gICAgICAg ICAgICBtYXhfZGVzY3JpcHRvcnMgPSBGRk1BWChtYXhfZGVzY3JpcHRvcnMsIHNoZC0+ZGVzY19z ZXRbaV0ubmJfYmluZGluZ3MpOwotICAgICAgICAgICAgaWYgKHNoZC0+ZGVzY19zZXRbaV0uc2lu Z3VsYXIpCi0gICAgICAgICAgICAgICAgaGFzX3Npbmd1bGFyID0gMTsKLSAgICAgICAgfQotICAg ICAgICBzaGQtPnVzZV9wdXNoID0gKHMtPmV4dGVuc2lvbnMgJiBGRl9WS19FWFRfUFVTSF9ERVND UklQVE9SKSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgKG1heF9kZXNjcmlwdG9ycyA8PSBz LT5wdXNoX2Rlc2NfcHJvcHMubWF4UHVzaERlc2NyaXB0b3JzKSAmJgotICAgICAgICAgICAgICAg ICAgICAgICAgKHNoZC0+bmJfZGVzY3JpcHRvcl9zZXRzID09IDEpICYmCi0gICAgICAgICAgICAg ICAgICAgICAgICAoaGFzX3Npbmd1bGFyID09IDApOwotICAgIH0KLQotICAgIGZvciAoaW50IGkg PSAwOyBpIDwgc2hkLT5uYl9kZXNjcmlwdG9yX3NldHM7IGkrKykgewotICAgICAgICBGRlZ1bGth bkRlc2NyaXB0b3JTZXQgKnNldCA9ICZzaGQtPmRlc2Nfc2V0W2ldOwotICAgICAgICBWa0Rlc2Ny aXB0b3JTZXRMYXlvdXRDcmVhdGVJbmZvIGRlc2NfbGF5b3V0X2NyZWF0ZSA9IHsKLSAgICAgICAg ICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX0RFU0NSSVBUT1JfU0VUX0xBWU9VVF9DUkVB VEVfSU5GTywKLSAgICAgICAgICAgIC5iaW5kaW5nQ291bnQgPSBzZXQtPm5iX2JpbmRpbmdzLAot ICAgICAgICAgICAgLnBCaW5kaW5ncyA9IHNldC0+YmluZGluZywKLSAgICAgICAgICAgIC5mbGFn cyA9IChzLT5leHRlbnNpb25zICYgRkZfVktfRVhUX0RFU0NSSVBUT1JfQlVGRkVSKSA/Ci0gICAg ICAgICAgICAgICAgICAgICBWS19ERVNDUklQVE9SX1NFVF9MQVlPVVRfQ1JFQVRFX0RFU0NSSVBU T1JfQlVGRkVSX0JJVF9FWFQgOgotICAgICAgICAgICAgICAgICAgICAgKHNoZC0+dXNlX3B1c2gp ID8KLSAgICAgICAgICAgICAgICAgICAgIFZLX0RFU0NSSVBUT1JfU0VUX0xBWU9VVF9DUkVBVEVf UFVTSF9ERVNDUklQVE9SX0JJVF9LSFIgOgotICAgICAgICAgICAgICAgICAgICAgMHgwLAotICAg ICAgICB9OwotCi0gICAgICAgIHJldCA9IHZrLT5DcmVhdGVEZXNjcmlwdG9yU2V0TGF5b3V0KHMt Pmh3Y3R4LT5hY3RfZGV2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAmZGVzY19sYXlvdXRfY3JlYXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzLT5od2N0eC0+YWxsb2MsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICZzaGQtPmRlc2NfbGF5b3V0W2ldKTsKLSAgICAgICAgaWYgKHJl dCAhPSBWS19TVUNDRVNTKSB7Ci0gICAgICAgICAgICBhdl9sb2cocywgQVZfTE9HX0VSUk9SLCAi VW5hYmxlIHRvIGNyZWF0ZSBkZXNjcmlwdG9yIHNldCBsYXlvdXQ6ICVzIiwKLSAgICAgICAgICAg ICAgICAgICBmZl92a19yZXQyc3RyKHJldCkpOwotICAgICAgICAgICAgcmV0dXJuIEFWRVJST1Jf RVhURVJOQUw7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAocy0+ZXh0ZW5zaW9ucyAmIEZGX1ZL X0VYVF9ERVNDUklQVE9SX0JVRkZFUikgewotICAgICAgICAgICAgdmstPkdldERlc2NyaXB0b3JT ZXRMYXlvdXRTaXplRVhUKHMtPmh3Y3R4LT5hY3RfZGV2LCBzaGQtPmRlc2NfbGF5b3V0W2ldLAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzZXQtPmxheW91 dF9zaXplKTsKLQotICAgICAgICAgICAgc2V0LT5hbGlnbmVkX3NpemUgPSBGRkFMSUdOKHNldC0+ bGF5b3V0X3NpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy0+ ZGVzY19idWZfcHJvcHMuZGVzY3JpcHRvckJ1ZmZlck9mZnNldEFsaWdubWVudCk7Ci0KLSAgICAg ICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgc2V0LT5uYl9iaW5kaW5nczsgaisrKQotICAgICAg ICAgICAgICAgIHZrLT5HZXREZXNjcmlwdG9yU2V0TGF5b3V0QmluZGluZ09mZnNldEVYVChzLT5o d2N0eC0+YWN0X2RldiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc2hkLT5kZXNjX2xheW91dFtpXSwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaiwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNldC0+Ymlu ZGluZ19vZmZzZXRbal0pOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7Ci19Ci0K LWludCBmZl92a19zaGFkZXJfbGluayhGRlZ1bGthbkNvbnRleHQgKnMsIEZGVnVsa2FuU2hhZGVy ICpzaGQsCi0gICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqc3BpcnYsIHNpemVfdCBzcGly dl9sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZW50cnlwb2ludCkKLXsK LSAgICBpbnQgZXJyOwotICAgIEZGVnVsa2FuRnVuY3Rpb25zICp2ayA9ICZzLT52a2ZuOwotCi0g ICAgZXJyID0gaW5pdF9kZXNjcmlwdG9ycyhzLCBzaGQpOwotICAgIGlmIChlcnIgPCAwKQotICAg ICAgICByZXR1cm4gZXJyOwotCi0gICAgZXJyID0gaW5pdF9waXBlbGluZV9sYXlvdXQocywgc2hk KTsKLSAgICBpZiAoZXJyIDwgMCkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIGlmIChzLT5l eHRlbnNpb25zICYgRkZfVktfRVhUX0RFU0NSSVBUT1JfQlVGRkVSKSB7Ci0gICAgICAgIHNoZC0+ Ym91bmRfYnVmZmVyX2luZGljZXMgPSBhdl9jYWxsb2Moc2hkLT5uYl9kZXNjcmlwdG9yX3NldHMs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKCpz aGQtPmJvdW5kX2J1ZmZlcl9pbmRpY2VzKSk7Ci0gICAgICAgIGlmICghc2hkLT5ib3VuZF9idWZm ZXJfaW5kaWNlcykKLSAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7Ci0KLSAgICAg ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaGQtPm5iX2Rlc2NyaXB0b3Jfc2V0czsgaSsrKQotICAg ICAgICAgICAgc2hkLT5ib3VuZF9idWZmZXJfaW5kaWNlc1tpXSA9IGk7Ci0gICAgfQotCi0gICAg aWYgKHMtPmV4dGVuc2lvbnMgJiBGRl9WS19FWFRfU0hBREVSX09CSkVDVCkgewotICAgICAgICBl cnIgPSBjcmVhdGVfc2hhZGVyX29iamVjdChzLCBzaGQsIHNwaXJ2LCBzcGlydl9sZW4sIGVudHJ5 cG9pbnQpOwotICAgICAgICBpZiAoZXJyIDwgMCkKLSAgICAgICAgICAgIHJldHVybiBlcnI7Ci0g ICAgfSBlbHNlIHsKLSAgICAgICAgVmtTaGFkZXJNb2R1bGUgbW9kOwotICAgICAgICBlcnIgPSBj cmVhdGVfc2hhZGVyX21vZHVsZShzLCBzaGQsICZtb2QsIHNwaXJ2LCBzcGlydl9sZW4pOwotICAg ICAgICBpZiAoZXJyIDwgMCkKLSAgICAgICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICAgICAgc3dp dGNoIChzaGQtPmJpbmRfcG9pbnQpIHsKLSAgICAgICAgY2FzZSBWS19QSVBFTElORV9CSU5EX1BP SU5UX0NPTVBVVEU6Ci0gICAgICAgICAgICBlcnIgPSBpbml0X2NvbXB1dGVfcGlwZWxpbmUocywg c2hkLCBtb2QsIGVudHJ5cG9pbnQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1 bHQ6Ci0gICAgICAgICAgICBhdl9sb2cocywgQVZfTE9HX0VSUk9SLCAiVW5zdXBwb3J0ZWQgc2hh ZGVyIHR5cGU6ICVpXG4iLAotICAgICAgICAgICAgICAgICAgIHNoZC0+YmluZF9wb2ludCk7Ci0g ICAgICAgICAgICBlcnIgPSBBVkVSUk9SKEVJTlZBTCk7Ci0gICAgICAgICAgICBicmVhazsKLSAg ICAgICAgfTsKLQotICAgICAgICB2ay0+RGVzdHJveVNoYWRlck1vZHVsZShzLT5od2N0eC0+YWN0 X2RldiwgbW9kLCBzLT5od2N0eC0+YWxsb2MpOwotICAgICAgICBpZiAoZXJyIDwgMCkKLSAgICAg ICAgICAgIHJldHVybiBlcnI7Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBj b25zdCBzdHJ1Y3QgZGVzY3JpcHRvcl9wcm9wcyB7Ci0gICAgc2l6ZV90IHN0cnVjdF9zaXplOyAv KiBTaXplIG9mIHRoZSBvcGFxdWUgd2hpY2ggdXBkYXRlcyB0aGUgZGVzY3JpcHRvciAqLwotICAg IGNvbnN0IGNoYXIgKnR5cGU7Ci0gICAgaW50IGlzX3VuaWZvcm07Ci0gICAgaW50IG1lbV9xdWFs aTsgICAgICAvKiBDYW4gdXNlIGEgbWVtb3J5IHF1YWxpZmllciAqLwotICAgIGludCBkaW1fbmVl ZGVkOyAgICAgLyogTXVzdCBpbmRpY2F0ZSBkaW1lbnNpb24gKi8KLSAgICBpbnQgYnVmX2NvbnRl bnQ7ICAgIC8qIE11c3QgaW5kaWNhdGUgYnVmZmVyIGNvbnRlbnRzICovCi19IGRlc2NyaXB0b3Jf cHJvcHNbXSA9IHsKLSAgICBbVktfREVTQ1JJUFRPUl9UWVBFX1NBTVBMRVJdICAgICAgICAgICAg ICAgID0geyBzaXplb2YoVmtEZXNjcmlwdG9ySW1hZ2VJbmZvKSwgICJzYW1wbGVyIiwgICAgICAg MSwgMCwgMCwgMCwgfSwKLSAgICBbVktfREVTQ1JJUFRPUl9UWVBFX1NBTVBMRURfSU1BR0VdICAg ICAgICAgID0geyBzaXplb2YoVmtEZXNjcmlwdG9ySW1hZ2VJbmZvKSwgICJ0ZXh0dXJlIiwgICAg ICAgMSwgMCwgMSwgMCwgfSwKLSAgICBbVktfREVTQ1JJUFRPUl9UWVBFX1NUT1JBR0VfSU1BR0Vd ICAgICAgICAgID0geyBzaXplb2YoVmtEZXNjcmlwdG9ySW1hZ2VJbmZvKSwgICJpbWFnZSIsICAg ICAgICAgMSwgMSwgMSwgMCwgfSwKLSAgICBbVktfREVTQ1JJUFRPUl9UWVBFX0lOUFVUX0FUVEFD SE1FTlRdICAgICAgID0geyBzaXplb2YoVmtEZXNjcmlwdG9ySW1hZ2VJbmZvKSwgICJzdWJwYXNz SW5wdXQiLCAgMSwgMCwgMCwgMCwgfSwKLSAgICBbVktfREVTQ1JJUFRPUl9UWVBFX0NPTUJJTkVE X0lNQUdFX1NBTVBMRVJdID0geyBzaXplb2YoVmtEZXNjcmlwdG9ySW1hZ2VJbmZvKSwgICJzYW1w bGVyIiwgICAgICAgMSwgMCwgMSwgMCwgfSwKLSAgICBbVktfREVTQ1JJUFRPUl9UWVBFX1VOSUZP Uk1fQlVGRkVSXSAgICAgICAgID0geyBzaXplb2YoVmtEZXNjcmlwdG9yQnVmZmVySW5mbyksICBO VUxMLCAgICAgICAgICAgMSwgMCwgMCwgMSwgfSwKLSAgICBbVktfREVTQ1JJUFRPUl9UWVBFX1NU T1JBR0VfQlVGRkVSXSAgICAgICAgID0geyBzaXplb2YoVmtEZXNjcmlwdG9yQnVmZmVySW5mbyks ICJidWZmZXIiLCAgICAgICAgMCwgMSwgMCwgMSwgfSwKLSAgICBbVktfREVTQ1JJUFRPUl9UWVBF X1VOSUZPUk1fQlVGRkVSX0RZTkFNSUNdID0geyBzaXplb2YoVmtEZXNjcmlwdG9yQnVmZmVySW5m byksICBOVUxMLCAgICAgICAgICAgMSwgMCwgMCwgMSwgfSwKLSAgICBbVktfREVTQ1JJUFRPUl9U WVBFX1NUT1JBR0VfQlVGRkVSX0RZTkFNSUNdID0geyBzaXplb2YoVmtEZXNjcmlwdG9yQnVmZmVy SW5mbyksICJidWZmZXIiLCAgICAgICAgMCwgMSwgMCwgMSwgfSwKLSAgICBbVktfREVTQ1JJUFRP Ul9UWVBFX1VOSUZPUk1fVEVYRUxfQlVGRkVSXSAgID0geyBzaXplb2YoVmtCdWZmZXJWaWV3KSwg ICAgICAgICAgICJzYW1wbGVyQnVmZmVyIiwgMSwgMCwgMCwgMCwgfSwKLSAgICBbVktfREVTQ1JJ UFRPUl9UWVBFX1NUT1JBR0VfVEVYRUxfQlVGRkVSXSAgID0geyBzaXplb2YoVmtCdWZmZXJWaWV3 KSwgICAgICAgICAgICJpbWFnZUJ1ZmZlciIsICAgMSwgMCwgMCwgMCwgfSwKLX07Ci0KLWludCBm Zl92a19zaGFkZXJfYWRkX2Rlc2NyaXB0b3Jfc2V0KEZGVnVsa2FuQ29udGV4dCAqcywgRkZWdWxr YW5TaGFkZXIgKnNoZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZGVnVs a2FuRGVzY3JpcHRvclNldEJpbmRpbmcgKmRlc2MsIGludCBuYiwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGludCBzaW5ndWxhciwgaW50IHByaW50X3RvX3NoYWRlcl9vbmx5 KQotewotICAgIGludCBoYXNfc2FtcGxlciA9IDA7Ci0gICAgRkZWdWxrYW5EZXNjcmlwdG9yU2V0 ICpzZXQ7Ci0KLSAgICBpZiAocHJpbnRfdG9fc2hhZGVyX29ubHkpCi0gICAgICAgIGdvdG8gcHJp bnQ7Ci0KLSAgICAvKiBBY3R1YWwgbGF5b3V0IGFsbG9jYXRlZCBmb3IgdGhlIHBpcGVsaW5lICov Ci0gICAgc2V0ID0gYXZfcmVhbGxvY19hcnJheShzaGQtPmRlc2Nfc2V0LAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgc2l6ZW9mKCpzaGQtPmRlc2Nfc2V0KSwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgIHNoZC0+bmJfZGVzY3JpcHRvcl9zZXRzICsgMSk7Ci0gICAgaWYgKCFzZXQpCi0g ICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7Ci0gICAgc2hkLT5kZXNjX3NldCA9IHNldDsK LQotICAgIHNldCA9ICZzZXRbc2hkLT5uYl9kZXNjcmlwdG9yX3NldHNdOwotICAgIG1lbXNldChz ZXQsIDAsIHNpemVvZigqc2V0KSk7Ci0KLSAgICBzZXQtPmJpbmRpbmcgPSBhdl9jYWxsb2MobmIs IHNpemVvZigqc2V0LT5iaW5kaW5nKSk7Ci0gICAgaWYgKCFzZXQtPmJpbmRpbmcpCi0gICAgICAg IHJldHVybiBBVkVSUk9SKEVOT01FTSk7Ci0KLSAgICBzZXQtPmJpbmRpbmdfb2Zmc2V0ID0gYXZf Y2FsbG9jKG5iLCBzaXplb2YoKnNldC0+YmluZGluZ19vZmZzZXQpKTsKLSAgICBpZiAoIXNldC0+ YmluZGluZ19vZmZzZXQpIHsKLSAgICAgICAgYXZfZnJlZXAoJnNldC0+YmluZGluZyk7Ci0gICAg ICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7Ci0gICAgfQotCi0gICAgZm9yIChpbnQgaSA9IDA7 IGkgPCBuYjsgaSsrKSB7Ci0gICAgICAgIHNldC0+YmluZGluZ1tpXS5iaW5kaW5nICAgICAgICAg ICAgPSBpOwotICAgICAgICBzZXQtPmJpbmRpbmdbaV0uZGVzY3JpcHRvclR5cGUgICAgID0gZGVz Y1tpXS50eXBlOwotICAgICAgICBzZXQtPmJpbmRpbmdbaV0uZGVzY3JpcHRvckNvdW50ICAgID0g RkZNQVgoZGVzY1tpXS5lbGVtcywgMSk7Ci0gICAgICAgIHNldC0+YmluZGluZ1tpXS5zdGFnZUZs YWdzICAgICAgICAgPSBkZXNjW2ldLnN0YWdlczsKLSAgICAgICAgc2V0LT5iaW5kaW5nW2ldLnBJ bW11dGFibGVTYW1wbGVycyA9IGRlc2NbaV0uc2FtcGxlcnM7Ci0KLSAgICAgICAgaWYgKGRlc2Nb aV0udHlwZSA9PSBWS19ERVNDUklQVE9SX1RZUEVfU0FNUExFUiB8fAotICAgICAgICAgICAgZGVz Y1tpXS50eXBlID09IFZLX0RFU0NSSVBUT1JfVFlQRV9DT01CSU5FRF9JTUFHRV9TQU1QTEVSKQot ICAgICAgICAgICAgaGFzX3NhbXBsZXIgfD0gMTsKLSAgICB9Ci0KLSAgICBzZXQtPnVzYWdlID0g VktfQlVGRkVSX1VTQUdFX1JFU09VUkNFX0RFU0NSSVBUT1JfQlVGRkVSX0JJVF9FWFQgfAotICAg ICAgICAgICAgICAgICBWS19CVUZGRVJfVVNBR0VfU0hBREVSX0RFVklDRV9BRERSRVNTX0JJVDsK LSAgICBpZiAoaGFzX3NhbXBsZXIpCi0gICAgICAgIHNldC0+dXNhZ2UgfD0gVktfQlVGRkVSX1VT QUdFX1NBTVBMRVJfREVTQ1JJUFRPUl9CVUZGRVJfQklUX0VYVDsKLQotICAgIGlmICghKHMtPmV4 dGVuc2lvbnMgJiBGRl9WS19FWFRfREVTQ1JJUFRPUl9CVUZGRVIpKSB7Ci0gICAgICAgIGZvciAo aW50IGkgPSAwOyBpIDwgbmI7IGkrKykgewotICAgICAgICAgICAgaW50IGo7Ci0gICAgICAgICAg ICBWa0Rlc2NyaXB0b3JQb29sU2l6ZSAqZGVzY19wb29sX3NpemU7Ci0gICAgICAgICAgICBmb3Ig KGogPSAwOyBqIDwgc2hkLT5uYl9kZXNjX3Bvb2xfc2l6ZTsgaisrKQotICAgICAgICAgICAgICAg IGlmIChzaGQtPmRlc2NfcG9vbF9zaXplW2pdLnR5cGUgPT0gZGVzY1tpXS50eXBlKQotICAgICAg ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGlmIChqID49IHNoZC0+bmJfZGVzY19w b29sX3NpemUpIHsKLSAgICAgICAgICAgICAgICBkZXNjX3Bvb2xfc2l6ZSA9IGF2X3JlYWxsb2Nf YXJyYXkoc2hkLT5kZXNjX3Bvb2xfc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKCpkZXNjX3Bvb2xfc2l6ZSksCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoZC0+bmJfZGVzY19wb29s X3NpemUgKyAxKTsKLSAgICAgICAgICAgICAgICBpZiAoIWRlc2NfcG9vbF9zaXplKQotICAgICAg ICAgICAgICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOwotCi0gICAgICAgICAgICAgICAg c2hkLT5kZXNjX3Bvb2xfc2l6ZSA9IGRlc2NfcG9vbF9zaXplOwotICAgICAgICAgICAgICAgIHNo ZC0+bmJfZGVzY19wb29sX3NpemUrKzsKLSAgICAgICAgICAgICAgICBtZW1zZXQoJmRlc2NfcG9v bF9zaXplW2pdLCAwLCBzaXplb2YoVmtEZXNjcmlwdG9yUG9vbFNpemUpKTsKLSAgICAgICAgICAg IH0KLSAgICAgICAgICAgIHNoZC0+ZGVzY19wb29sX3NpemVbal0udHlwZSAgICAgICAgICAgICA9 IGRlc2NbaV0udHlwZTsKLSAgICAgICAgICAgIHNoZC0+ZGVzY19wb29sX3NpemVbal0uZGVzY3Jp cHRvckNvdW50ICs9IEZGTUFYKGRlc2NbaV0uZWxlbXMsIDEpOwotICAgICAgICB9Ci0gICAgfQot Ci0gICAgc2V0LT5zaW5ndWxhciA9IHNpbmd1bGFyOwotICAgIHNldC0+bmJfYmluZGluZ3MgPSBu YjsKLSAgICBzaGQtPm5iX2Rlc2NyaXB0b3Jfc2V0cysrOwotCi1wcmludDoKLSAgICAvKiBXcml0 ZSBzaGFkZXIgaW5mbyAqLwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmI7IGkrKykgewotICAg ICAgICBjb25zdCBzdHJ1Y3QgZGVzY3JpcHRvcl9wcm9wcyAqcHJvcCA9ICZkZXNjcmlwdG9yX3By b3BzW2Rlc2NbaV0udHlwZV07Ci0gICAgICAgIEdMU0xBKCJsYXlvdXQgKHNldCA9ICVpLCBiaW5k aW5nID0gJWkiLCBGRk1BWChzaGQtPm5iX2Rlc2NyaXB0b3Jfc2V0cyAtIDEsIDApLCBpKTsKLQot ICAgICAgICBpZiAoZGVzY1tpXS5tZW1fbGF5b3V0ICYmCi0gICAgICAgICAgICAoZGVzY1tpXS50 eXBlICE9IFZLX0RFU0NSSVBUT1JfVFlQRV9TVE9SQUdFX0lNQUdFKSkKLSAgICAgICAgICAgIEdM U0xBKCIsICVzIiwgZGVzY1tpXS5tZW1fbGF5b3V0KTsKLQotICAgICAgICBHTFNMQSgiKSIpOwot Ci0gICAgICAgIGlmIChwcm9wLT5pc191bmlmb3JtKQotICAgICAgICAgICAgR0xTTEEoIiB1bmlm b3JtIik7Ci0KLSAgICAgICAgaWYgKHByb3AtPm1lbV9xdWFsaSAmJiBkZXNjW2ldLm1lbV9xdWFs aSkKLSAgICAgICAgICAgIEdMU0xBKCIgJXMiLCBkZXNjW2ldLm1lbV9xdWFsaSk7Ci0KLSAgICAg ICAgaWYgKHByb3AtPnR5cGUpIHsKLSAgICAgICAgICAgIEdMU0xBKCIgIik7Ci0gICAgICAgICAg ICBpZiAoZGVzY1tpXS50eXBlID09IFZLX0RFU0NSSVBUT1JfVFlQRV9TVE9SQUdFX0lNQUdFKSB7 Ci0gICAgICAgICAgICAgICAgaWYgKGRlc2NbaV0ubWVtX2xheW91dCkgewotICAgICAgICAgICAg ICAgICAgICBpbnQgbGVuID0gc3RybGVuKGRlc2NbaV0ubWVtX2xheW91dCk7Ci0gICAgICAgICAg ICAgICAgICAgIGlmIChkZXNjW2ldLm1lbV9sYXlvdXRbbGVuIC0gMV0gPT0gJ2knICYmCi0gICAg ICAgICAgICAgICAgICAgICAgICBkZXNjW2ldLm1lbV9sYXlvdXRbbGVuIC0gMl0gPT0gJ3UnKSB7 Ci0gICAgICAgICAgICAgICAgICAgICAgICBHTFNMQSgidSIpOwotICAgICAgICAgICAgICAgICAg ICB9IGVsc2UgaWYgKGRlc2NbaV0ubWVtX2xheW91dFtsZW4gLSAxXSA9PSAnaScpIHsKLSAgICAg ICAgICAgICAgICAgICAgICAgIEdMU0xBKCJpIik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBHTFNMQSgiJXMiLCBw cm9wLT50eXBlKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChwcm9wLT5kaW1fbmVlZGVkKQot ICAgICAgICAgICAgR0xTTEEoIiVpRCIsIGRlc2NbaV0uZGltZW5zaW9ucyk7Ci0KLSAgICAgICAg R0xTTEEoIiAlcyIsIGRlc2NbaV0ubmFtZSk7Ci0KLSAgICAgICAgaWYgKHByb3AtPmJ1Zl9jb250 ZW50KSB7Ci0gICAgICAgICAgICBHTFNMQSgiIHtcbiAgICAiKTsKLSAgICAgICAgICAgIGlmIChk ZXNjW2ldLmJ1Zl9lbGVtcykgewotICAgICAgICAgICAgICAgIEdMU0xBKCIlcyIsIGRlc2NbaV0u YnVmX2NvbnRlbnQpOwotICAgICAgICAgICAgICAgIEdMU0xBKCJbJWldOyIsIGRlc2NbaV0uYnVm X2VsZW1zKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgR0xTTEEoIiVz IiwgZGVzY1tpXS5idWZfY29udGVudCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBHTFNM QSgiXG59Iik7Ci0gICAgICAgIH0gZWxzZSBpZiAoZGVzY1tpXS5lbGVtcyA+IDApIHsKLSAgICAg ICAgICAgIEdMU0xBKCJbJWldIiwgZGVzY1tpXS5lbGVtcyk7Ci0gICAgICAgIH0KLQotICAgICAg ICBHTFNMQSgiOyIpOwotICAgICAgICBHTFNMQSgiXG4iKTsKLSAgICB9Ci0gICAgR0xTTEEoIlxu Iik7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotaW50IGZmX3ZrX3NoYWRlcl9yZWdpc3Rlcl9leGVj KEZGVnVsa2FuQ29udGV4dCAqcywgRkZWa0V4ZWNQb29sICpwb29sLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEZGVnVsa2FuU2hhZGVyICpzaGQpCi17Ci0gICAgaW50IGVycjsKLSAg ICBGRlZ1bGthblNoYWRlckRhdGEgKnNkOwotCi0gICAgaWYgKCFzaGQtPm5iX2Rlc2NyaXB0b3Jf c2V0cykKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBzZCA9IGF2X3JlYWxsb2NfYXJyYXkocG9v bC0+cmVnX3NoZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKCpwb29sLT5yZWdf c2hkKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcG9vbC0+bmJfcmVnX3NoZCArIDEpOwot ICAgIGlmICghc2QpCi0gICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7Ci0KLSAgICBwb29s LT5yZWdfc2hkID0gc2Q7Ci0gICAgc2QgPSAmc2RbcG9vbC0+bmJfcmVnX3NoZCsrXTsKLSAgICBt ZW1zZXQoc2QsIDAsIHNpemVvZigqc2QpKTsKLQotICAgIHNkLT5zaGQgPSBzaGQ7Ci0gICAgc2Qt Pm5iX2Rlc2NyaXB0b3Jfc2V0cyA9IHNoZC0+bmJfZGVzY3JpcHRvcl9zZXRzOwotCi0gICAgaWYg KHMtPmV4dGVuc2lvbnMgJiBGRl9WS19FWFRfREVTQ1JJUFRPUl9CVUZGRVIpIHsKLSAgICAgICAg c2QtPmRlc2NfYmluZCA9IGF2X21hbGxvY19hcnJheShzZC0+bmJfZGVzY3JpcHRvcl9zZXRzLCBz aXplb2YoKnNkLT5kZXNjX2JpbmQpKTsKLSAgICAgICAgaWYgKCFzZC0+ZGVzY19iaW5kKQotICAg ICAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKLQotICAgICAgICBzZC0+ZGVzY19zZXRf YnVmID0gYXZfY2FsbG9jKHNkLT5uYl9kZXNjcmlwdG9yX3NldHMsIHNpemVvZigqc2QtPmRlc2Nf c2V0X2J1ZikpOwotICAgICAgICBpZiAoIXNkLT5kZXNjX3NldF9idWYpCi0gICAgICAgICAgICBy ZXR1cm4gQVZFUlJPUihFTk9NRU0pOwotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2Qt Pm5iX2Rlc2NyaXB0b3Jfc2V0czsgaSsrKSB7Ci0gICAgICAgICAgICBGRlZ1bGthbkRlc2NyaXB0 b3JTZXQgKnNldCA9ICZzaGQtPmRlc2Nfc2V0W2ldOwotICAgICAgICAgICAgRkZWdWxrYW5EZXNj cmlwdG9yU2V0RGF0YSAqc2RiID0gJnNkLT5kZXNjX3NldF9idWZbaV07Ci0gICAgICAgICAgICBp bnQgbmIgPSBzZXQtPnNpbmd1bGFyID8gMSA6IHBvb2wtPnBvb2xfc2l6ZTsKLQotICAgICAgICAg ICAgZXJyID0gZmZfdmtfY3JlYXRlX2J1ZihzLCAmc2RiLT5idWYsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHNldC0+YWxpZ25lZF9zaXplKm5iLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMLCBzZXQtPnVzYWdlLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBWS19NRU1PUllfUFJPUEVSVFlfREVWSUNFX0xPQ0FMX0JJ VCB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZLX01FTU9SWV9QUk9QRVJU WV9IT1NUX1ZJU0lCTEVfQklUIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg VktfTUVNT1JZX1BST1BFUlRZX0hPU1RfQ09IRVJFTlRfQklUKTsKLSAgICAgICAgICAgIGlmIChl cnIgPCAwKQotICAgICAgICAgICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICAgICAgICAgIGVyciA9 IGZmX3ZrX21hcF9idWZmZXIocywgJnNkYi0+YnVmLCAmc2RiLT5kZXNjX21lbSwgMCk7Ci0gICAg ICAgICAgICBpZiAoZXJyIDwgMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyOwotCi0gICAg ICAgICAgICBzZC0+ZGVzY19iaW5kW2ldID0gKFZrRGVzY3JpcHRvckJ1ZmZlckJpbmRpbmdJbmZv RVhUKSB7Ci0gICAgICAgICAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfREVTQ1JJ UFRPUl9CVUZGRVJfQklORElOR19JTkZPX0VYVCwKLSAgICAgICAgICAgICAgICAudXNhZ2UgPSBz ZXQtPnVzYWdlLAotICAgICAgICAgICAgICAgIC5hZGRyZXNzID0gc2RiLT5idWYuYWRkcmVzcywK LSAgICAgICAgICAgIH07Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKCFzaGQtPnVzZV9wdXNo KSB7Ci0gICAgICAgIFZrUmVzdWx0IHJldDsKLSAgICAgICAgRkZWdWxrYW5GdW5jdGlvbnMgKnZr ID0gJnMtPnZrZm47Ci0gICAgICAgIFZrRGVzY3JpcHRvclNldExheW91dCAqdG1wX2xheW91dHM7 Ci0gICAgICAgIFZrRGVzY3JpcHRvclNldEFsbG9jYXRlSW5mbyBzZXRfYWxsb2NfaW5mbzsKLSAg ICAgICAgVmtEZXNjcmlwdG9yUG9vbENyZWF0ZUluZm8gcG9vbF9jcmVhdGVfaW5mbzsKLQotICAg ICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNoZC0+bmJfZGVzY19wb29sX3NpemU7IGkrKykKLSAg ICAgICAgICAgIHNoZC0+ZGVzY19wb29sX3NpemVbaV0uZGVzY3JpcHRvckNvdW50ICo9IHBvb2wt PnBvb2xfc2l6ZTsKLQotICAgICAgICBwb29sX2NyZWF0ZV9pbmZvID0gKFZrRGVzY3JpcHRvclBv b2xDcmVhdGVJbmZvKSB7Ci0gICAgICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9E RVNDUklQVE9SX1BPT0xfQ1JFQVRFX0lORk8sCi0gICAgICAgICAgICAuZmxhZ3MgPSAwLAotICAg ICAgICAgICAgLnBQb29sU2l6ZXMgPSBzaGQtPmRlc2NfcG9vbF9zaXplLAotICAgICAgICAgICAg LnBvb2xTaXplQ291bnQgPSBzaGQtPm5iX2Rlc2NfcG9vbF9zaXplLAotICAgICAgICAgICAgLm1h eFNldHMgPSBzZC0+bmJfZGVzY3JpcHRvcl9zZXRzKnBvb2wtPnBvb2xfc2l6ZSwKLSAgICAgICAg fTsKLQotICAgICAgICByZXQgPSB2ay0+Q3JlYXRlRGVzY3JpcHRvclBvb2wocy0+aHdjdHgtPmFj dF9kZXYsICZwb29sX2NyZWF0ZV9pbmZvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcy0+aHdjdHgtPmFsbG9jLCAmc2QtPmRlc2NfcG9vbCk7Ci0gICAgICAgIGlmIChy ZXQgIT0gVktfU1VDQ0VTUykgewotICAgICAgICAgICAgYXZfbG9nKHMsIEFWX0xPR19FUlJPUiwg IlVuYWJsZSB0byBjcmVhdGUgZGVzY3JpcHRvciBwb29sOiAlc1xuIiwKLSAgICAgICAgICAgICAg ICAgICBmZl92a19yZXQyc3RyKHJldCkpOwotICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfRVhU RVJOQUw7Ci0gICAgICAgIH0KLQotICAgICAgICB0bXBfbGF5b3V0cyA9IGF2X21hbGxvY19hcnJh eShwb29sX2NyZWF0ZV9pbmZvLm1heFNldHMsIHNpemVvZigqdG1wX2xheW91dHMpKTsKLSAgICAg ICAgaWYgKCF0bXBfbGF5b3V0cykKLSAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7 Ci0KLSAgICAgICAgLyogQ29sYXRlIGVhY2ggZXhlY3V0aW9uIGNvbnRleHQncyBkZXNjcmlwdG9y IHNldCBsYXlvdXRzICovCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcG9vbC0+cG9vbF9z aXplOyBpKyspCi0gICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHNkLT5uYl9kZXNjcmlw dG9yX3NldHM7IGorKykKLSAgICAgICAgICAgICAgICB0bXBfbGF5b3V0c1tpKnNkLT5uYl9kZXNj cmlwdG9yX3NldHMgKyBqXSA9IHNoZC0+ZGVzY19sYXlvdXRbal07Ci0KLSAgICAgICAgc2V0X2Fs bG9jX2luZm8gPSAoVmtEZXNjcmlwdG9yU2V0QWxsb2NhdGVJbmZvKSB7Ci0gICAgICAgICAgICAu c1R5cGUgICAgICAgICAgICAgID0gVktfU1RSVUNUVVJFX1RZUEVfREVTQ1JJUFRPUl9TRVRfQUxM T0NBVEVfSU5GTywKLSAgICAgICAgICAgIC5kZXNjcmlwdG9yUG9vbCAgICAgPSBzZC0+ZGVzY19w b29sLAotICAgICAgICAgICAgLnBTZXRMYXlvdXRzICAgICAgICA9IHRtcF9sYXlvdXRzLAotICAg ICAgICAgICAgLmRlc2NyaXB0b3JTZXRDb3VudCA9IHBvb2xfY3JlYXRlX2luZm8ubWF4U2V0cywK LSAgICAgICAgfTsKLQotICAgICAgICBzZC0+ZGVzY19zZXRzID0gYXZfbWFsbG9jX2FycmF5KHBv b2xfY3JlYXRlX2luZm8ubWF4U2V0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzaXplb2YoKnRtcF9sYXlvdXRzKSk7Ci0gICAgICAgIGlmICghc2QtPmRlc2Nfc2V0 cykgewotICAgICAgICAgICAgYXZfZnJlZSh0bXBfbGF5b3V0cyk7Ci0gICAgICAgICAgICByZXR1 cm4gQVZFUlJPUihFTk9NRU0pOwotICAgICAgICB9Ci0gICAgICAgIHJldCA9IHZrLT5BbGxvY2F0 ZURlc2NyaXB0b3JTZXRzKHMtPmh3Y3R4LT5hY3RfZGV2LCAmc2V0X2FsbG9jX2luZm8sCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNkLT5kZXNjX3NldHMpOwotICAg ICAgICBhdl9mcmVlKHRtcF9sYXlvdXRzKTsKLSAgICAgICAgaWYgKHJldCAhPSBWS19TVUNDRVNT KSB7Ci0gICAgICAgICAgICBhdl9sb2cocywgQVZfTE9HX0VSUk9SLCAiVW5hYmxlIHRvIGFsbG9j YXRlIGRlc2NyaXB0b3Igc2V0OiAlc1xuIiwKLSAgICAgICAgICAgICAgICAgICBmZl92a19yZXQy c3RyKHJldCkpOwotICAgICAgICAgICAgYXZfZnJlZXAoJnNkLT5kZXNjX3NldHMpOwotICAgICAg ICAgICAgcmV0dXJuIEFWRVJST1JfRVhURVJOQUw7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBy ZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGluZSBGRlZ1bGthblNoYWRlckRhdGEgKmdldF9zaGRf ZGF0YShGRlZrRXhlY0NvbnRleHQgKmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEZGVnVsa2FuU2hhZGVyICpzaGQpCi17Ci0gICAgZm9yIChpbnQgaSA9 IDA7IGkgPCBlLT5wYXJlbnQtPm5iX3JlZ19zaGQ7IGkrKykKLSAgICAgICAgaWYgKGUtPnBhcmVu dC0+cmVnX3NoZFtpXS5zaGQgPT0gc2hkKQotICAgICAgICAgICAgcmV0dXJuICZlLT5wYXJlbnQt PnJlZ19zaGRbaV07Ci0gICAgcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB1 cGRhdGVfc2V0X2Rlc2NyaXB0b3IoRkZWdWxrYW5Db250ZXh0ICpzLCBGRlZrRXhlY0NvbnRleHQg KmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZGVnVsa2FuU2hh ZGVyICpzaGQsIGludCBzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGludCBiaW5kX2lkeCwgaW50IGFycmF5X2lkeCwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgVmtEZXNjcmlwdG9yR2V0SW5mb0VYVCAqZGVzY19nZXRfaW5mbywK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGRlc2Nfc2l6 ZSkKLXsKLSAgICBGRlZ1bGthbkZ1bmN0aW9ucyAqdmsgPSAmcy0+dmtmbjsKLSAgICBGRlZ1bGth bkRlc2NyaXB0b3JTZXQgKmRlc2Nfc2V0ID0gJnNoZC0+ZGVzY19zZXRbc2V0XTsKLSAgICBGRlZ1 bGthblNoYWRlckRhdGEgKnNkID0gZ2V0X3NoZF9kYXRhKGUsIHNoZCk7Ci0gICAgY29uc3Qgc2l6 ZV90IGV4ZWNfb2Zmc2V0ID0gZGVzY19zZXQtPnNpbmd1bGFyID8gMCA6IGRlc2Nfc2V0LT5hbGln bmVkX3NpemUqZS0+aWR4OwotCi0gICAgdm9pZCAqZGVzYyA9IHNkLT5kZXNjX3NldF9idWZbc2V0 XS5kZXNjX21lbSArICAgICAvKiBCYXNlICovCi0gICAgICAgICAgICAgICAgIGV4ZWNfb2Zmc2V0 ICsgICAgICAgICAgICAgICAgICAgICAgICAvKiBFeGVjdXRpb24gY29udGV4dCAqLwotICAgICAg ICAgICAgICAgICBkZXNjX3NldC0+YmluZGluZ19vZmZzZXRbYmluZF9pZHhdICsgLyogRGVzY3Jp cHRvciBiaW5kaW5nICovCi0gICAgICAgICAgICAgICAgIGFycmF5X2lkeCpkZXNjX3NpemU7ICAg ICAgICAgICAgICAgICAvKiBBcnJheSBwb3NpdGlvbiAqLwotCi0gICAgdmstPkdldERlc2NyaXB0 b3JFWFQocy0+aHdjdHgtPmFjdF9kZXYsIGRlc2NfZ2V0X2luZm8sIGRlc2Nfc2l6ZSwgZGVzYyk7 Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfc2V0X3Bvb2xfd3JpdGUoRkZWdWxrYW5D b250ZXh0ICpzLCBGRlZrRXhlY0NvbnRleHQgKmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEZGVnVsa2FuU2hhZGVyICpzaGQsIGludCBzZXQsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZrV3JpdGVEZXNjcmlwdG9yU2V0ICp3cml0 ZV9pbmZvKQotewotICAgIEZGVnVsa2FuRnVuY3Rpb25zICp2ayA9ICZzLT52a2ZuOwotICAgIEZG VnVsa2FuRGVzY3JpcHRvclNldCAqZGVzY19zZXQgPSAmc2hkLT5kZXNjX3NldFtzZXRdOwotICAg IEZGVnVsa2FuU2hhZGVyRGF0YSAqc2QgPSBnZXRfc2hkX2RhdGEoZSwgc2hkKTsKLQotICAgIGlm IChkZXNjX3NldC0+c2luZ3VsYXIpIHsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBlLT5w YXJlbnQtPnBvb2xfc2l6ZTsgaSsrKSB7Ci0gICAgICAgICAgICB3cml0ZV9pbmZvLT5kc3RTZXQg PSBzZC0+ZGVzY19zZXRzW2kqc2QtPm5iX2Rlc2NyaXB0b3Jfc2V0cyArIHNldF07Ci0gICAgICAg ICAgICB2ay0+VXBkYXRlRGVzY3JpcHRvclNldHMocy0+aHdjdHgtPmFjdF9kZXYsIDEsIHdyaXRl X2luZm8sIDAsIE5VTEwpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKHNo ZC0+dXNlX3B1c2gpIHsKLSAgICAgICAgICAgIHZrLT5DbWRQdXNoRGVzY3JpcHRvclNldEtIUihl LT5idWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hkLT5iaW5k X3BvaW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoZC0+cGlw ZWxpbmVfbGF5b3V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNl dCwgMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZV9pbmZv KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHdyaXRlX2luZm8tPmRzdFNldCA9IHNk LT5kZXNjX3NldHNbZS0+aWR4KnNkLT5uYl9kZXNjcmlwdG9yX3NldHMgKyBzZXRdOwotICAgICAg ICAgICAgdmstPlVwZGF0ZURlc2NyaXB0b3JTZXRzKHMtPmh3Y3R4LT5hY3RfZGV2LCAxLCB3cml0 ZV9pbmZvLCAwLCBOVUxMKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotaW50IGZmX3ZrX3NoYWRl cl91cGRhdGVfaW1nKEZGVnVsa2FuQ29udGV4dCAqcywgRkZWa0V4ZWNDb250ZXh0ICplLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEZGVnVsa2FuU2hhZGVyICpzaGQsIGludCBzZXQsIGlu dCBiaW5kLCBpbnQgb2ZmcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBWa0ltYWdlVmll dyB2aWV3LCBWa0ltYWdlTGF5b3V0IGxheW91dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICBWa1NhbXBsZXIgc2FtcGxlcikKLXsKLSAgICBGRlZ1bGthbkRlc2NyaXB0b3JTZXQgKmRlc2Nf c2V0ID0gJnNoZC0+ZGVzY19zZXRbc2V0XTsKLQotICAgIGlmIChzLT5leHRlbnNpb25zICYgRkZf VktfRVhUX0RFU0NSSVBUT1JfQlVGRkVSKSB7Ci0gICAgICAgIFZrRGVzY3JpcHRvckdldEluZm9F WFQgZGVzY19nZXRfaW5mbyA9IHsKLSAgICAgICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9U WVBFX0RFU0NSSVBUT1JfR0VUX0lORk9fRVhULAotICAgICAgICAgICAgLnR5cGUgPSBkZXNjX3Nl dC0+YmluZGluZ1tiaW5kXS5kZXNjcmlwdG9yVHlwZSwKLSAgICAgICAgfTsKLSAgICAgICAgVmtE ZXNjcmlwdG9ySW1hZ2VJbmZvIGRlc2NfaW1nX2luZm8gPSB7Ci0gICAgICAgICAgICAuaW1hZ2VW aWV3ID0gdmlldywKLSAgICAgICAgICAgIC5zYW1wbGVyID0gc2FtcGxlciwKLSAgICAgICAgICAg IC5pbWFnZUxheW91dCA9IGxheW91dCwKLSAgICAgICAgfTsKLSAgICAgICAgc2l6ZV90IGRlc2Nf c2l6ZTsKLQotICAgICAgICBzd2l0Y2ggKGRlc2NfZ2V0X2luZm8udHlwZSkgewotICAgICAgICBj YXNlIFZLX0RFU0NSSVBUT1JfVFlQRV9TQU1QTEVEX0lNQUdFOgotICAgICAgICAgICAgZGVzY19n ZXRfaW5mby5kYXRhLnBTYW1wbGVkSW1hZ2UgPSAmZGVzY19pbWdfaW5mbzsKLSAgICAgICAgICAg IGRlc2Nfc2l6ZSA9IHMtPmRlc2NfYnVmX3Byb3BzLnNhbXBsZWRJbWFnZURlc2NyaXB0b3JTaXpl OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVktfREVTQ1JJUFRPUl9UWVBFX1NU T1JBR0VfSU1BR0U6Ci0gICAgICAgICAgICBkZXNjX2dldF9pbmZvLmRhdGEucFN0b3JhZ2VJbWFn ZSA9ICZkZXNjX2ltZ19pbmZvOwotICAgICAgICAgICAgZGVzY19zaXplID0gcy0+ZGVzY19idWZf cHJvcHMuc3RvcmFnZUltYWdlRGVzY3JpcHRvclNpemU7Ci0gICAgICAgICAgICBicmVhazsKLSAg ICAgICAgY2FzZSBWS19ERVNDUklQVE9SX1RZUEVfSU5QVVRfQVRUQUNITUVOVDoKLSAgICAgICAg ICAgIGRlc2NfZ2V0X2luZm8uZGF0YS5wSW5wdXRBdHRhY2htZW50SW1hZ2UgPSAmZGVzY19pbWdf aW5mbzsKLSAgICAgICAgICAgIGRlc2Nfc2l6ZSA9IHMtPmRlc2NfYnVmX3Byb3BzLmlucHV0QXR0 YWNobWVudERlc2NyaXB0b3JTaXplOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug VktfREVTQ1JJUFRPUl9UWVBFX0NPTUJJTkVEX0lNQUdFX1NBTVBMRVI6Ci0gICAgICAgICAgICBk ZXNjX2dldF9pbmZvLmRhdGEucENvbWJpbmVkSW1hZ2VTYW1wbGVyID0gJmRlc2NfaW1nX2luZm87 Ci0gICAgICAgICAgICBkZXNjX3NpemUgPSBzLT5kZXNjX2J1Zl9wcm9wcy5jb21iaW5lZEltYWdl U2FtcGxlckRlc2NyaXB0b3JTaXplOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1 bHQ6Ci0gICAgICAgICAgICBhdl9sb2cocywgQVZfTE9HX0VSUk9SLCAiSW52YWxpZCBkZXNjcmlw dG9yIHR5cGUgYXQgc2V0ICVpIGJpbmRpbmcgJWk6ICVpIVxuIiwKLSAgICAgICAgICAgICAgICAg ICBzZXQsIGJpbmQsIGRlc2NfZ2V0X2luZm8udHlwZSk7Ci0gICAgICAgICAgICByZXR1cm4gQVZF UlJPUihFSU5WQUwpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH07Ci0KLSAgICAgICAg dXBkYXRlX3NldF9kZXNjcmlwdG9yKHMsIGUsIHNoZCwgc2V0LCBiaW5kLCBvZmZzLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJmRlc2NfZ2V0X2luZm8sIGRlc2Nfc2l6ZSk7Ci0gICAg fSBlbHNlIHsKLSAgICAgICAgVmtEZXNjcmlwdG9ySW1hZ2VJbmZvIGRlc2NfcG9vbF93cml0ZV9p bmZvX2ltZyA9IHsKLSAgICAgICAgICAgIC5zYW1wbGVyID0gc2FtcGxlciwKLSAgICAgICAgICAg IC5pbWFnZVZpZXcgPSB2aWV3LAotICAgICAgICAgICAgLmltYWdlTGF5b3V0ID0gbGF5b3V0LAot ICAgICAgICB9OwotICAgICAgICBWa1dyaXRlRGVzY3JpcHRvclNldCBkZXNjX3Bvb2xfd3JpdGVf aW5mbyA9IHsKLSAgICAgICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX1dSSVRFX0RF U0NSSVBUT1JfU0VULAotICAgICAgICAgICAgLmRzdEJpbmRpbmcgPSBiaW5kLAotICAgICAgICAg ICAgLmRlc2NyaXB0b3JDb3VudCA9IDEsCi0gICAgICAgICAgICAuZHN0QXJyYXlFbGVtZW50ID0g b2ZmcywKLSAgICAgICAgICAgIC5kZXNjcmlwdG9yVHlwZSA9IGRlc2Nfc2V0LT5iaW5kaW5nW2Jp bmRdLmRlc2NyaXB0b3JUeXBlLAotICAgICAgICAgICAgLnBJbWFnZUluZm8gPSAmZGVzY19wb29s X3dyaXRlX2luZm9faW1nLAotICAgICAgICB9OwotICAgICAgICB1cGRhdGVfc2V0X3Bvb2xfd3Jp dGUocywgZSwgc2hkLCBzZXQsICZkZXNjX3Bvb2xfd3JpdGVfaW5mbyk7Ci0gICAgfQotCi0gICAg cmV0dXJuIDA7Ci19Ci0KLXZvaWQgZmZfdmtfc2hhZGVyX3VwZGF0ZV9pbWdfYXJyYXkoRkZWdWxr YW5Db250ZXh0ICpzLCBGRlZrRXhlY0NvbnRleHQgKmUsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEZGVnVsa2FuU2hhZGVyICpzaGQsIEFWRnJhbWUgKmYsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFZrSW1hZ2VWaWV3ICp2aWV3cywgaW50IHNldCwgaW50 IGJpbmRpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZrSW1hZ2VMYXlv dXQgbGF5b3V0LCBWa1NhbXBsZXIgc2FtcGxlcikKLXsKLSAgICBBVkhXRnJhbWVzQ29udGV4dCAq aHdmYyA9IChBVkhXRnJhbWVzQ29udGV4dCAqKWYtPmh3X2ZyYW1lc19jdHgtPmRhdGE7Ci0gICAg Y29uc3QgaW50IG5iX3BsYW5lcyA9IGF2X3BpeF9mbXRfY291bnRfcGxhbmVzKGh3ZmMtPnN3X2Zv cm1hdCk7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG5iX3BsYW5lczsgaSsrKQotICAgICAg ICBmZl92a19zaGFkZXJfdXBkYXRlX2ltZyhzLCBlLCBzaGQsIHNldCwgYmluZGluZywgaSwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld3NbaV0sIGxheW91dCwgc2FtcGxlcik7 Ci19Ci0KLWludCBmZl92a19zaGFkZXJfdXBkYXRlX2Rlc2NfYnVmZmVyKEZGVnVsa2FuQ29udGV4 dCAqcywgRkZWa0V4ZWNDb250ZXh0ICplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgRkZWdWxrYW5TaGFkZXIgKnNoZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGludCBzZXQsIGludCBiaW5kLCBpbnQgZWxlbSwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEZGVmtCdWZmZXIgKmJ1ZiwgVmtEZXZpY2VTaXplIG9mZnNldCwgVmtE ZXZpY2VTaXplIGxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZrRm9y bWF0IGZtdCkKLXsKLSAgICBGRlZ1bGthbkRlc2NyaXB0b3JTZXQgKmRlc2Nfc2V0ID0gJnNoZC0+ ZGVzY19zZXRbc2V0XTsKLQotICAgIGlmIChzLT5leHRlbnNpb25zICYgRkZfVktfRVhUX0RFU0NS SVBUT1JfQlVGRkVSKSB7Ci0gICAgICAgIFZrRGVzY3JpcHRvckdldEluZm9FWFQgZGVzY19nZXRf aW5mbyA9IHsKLSAgICAgICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX0RFU0NSSVBU T1JfR0VUX0lORk9fRVhULAotICAgICAgICAgICAgLnR5cGUgPSBkZXNjX3NldC0+YmluZGluZ1ti aW5kXS5kZXNjcmlwdG9yVHlwZSwKLSAgICAgICAgfTsKLSAgICAgICAgVmtEZXNjcmlwdG9yQWRk cmVzc0luZm9FWFQgZGVzY19idWZfaW5mbyA9IHsKLSAgICAgICAgICAgIC5zVHlwZSA9IFZLX1NU UlVDVFVSRV9UWVBFX0RFU0NSSVBUT1JfQUREUkVTU19JTkZPX0VYVCwKLSAgICAgICAgICAgIC5h ZGRyZXNzID0gYnVmLT5hZGRyZXNzICsgb2Zmc2V0LAotICAgICAgICAgICAgLnJhbmdlID0gbGVu LAotICAgICAgICAgICAgLmZvcm1hdCA9IGZtdCwKLSAgICAgICAgfTsKLSAgICAgICAgc2l6ZV90 IGRlc2Nfc2l6ZTsKLQotICAgICAgICBzd2l0Y2ggKGRlc2NfZ2V0X2luZm8udHlwZSkgewotICAg ICAgICBjYXNlIFZLX0RFU0NSSVBUT1JfVFlQRV9VTklGT1JNX0JVRkZFUjoKLSAgICAgICAgICAg IGRlc2NfZ2V0X2luZm8uZGF0YS5wVW5pZm9ybUJ1ZmZlciA9ICZkZXNjX2J1Zl9pbmZvOwotICAg ICAgICAgICAgZGVzY19zaXplID0gcy0+ZGVzY19idWZfcHJvcHMudW5pZm9ybUJ1ZmZlckRlc2Ny aXB0b3JTaXplOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVktfREVTQ1JJUFRP Ul9UWVBFX1NUT1JBR0VfQlVGRkVSOgotICAgICAgICAgICAgZGVzY19nZXRfaW5mby5kYXRhLnBT dG9yYWdlQnVmZmVyID0gJmRlc2NfYnVmX2luZm87Ci0gICAgICAgICAgICBkZXNjX3NpemUgPSBz LT5kZXNjX2J1Zl9wcm9wcy5zdG9yYWdlQnVmZmVyRGVzY3JpcHRvclNpemU7Ci0gICAgICAgICAg ICBicmVhazsKLSAgICAgICAgY2FzZSBWS19ERVNDUklQVE9SX1RZUEVfVU5JRk9STV9URVhFTF9C VUZGRVI6Ci0gICAgICAgICAgICBkZXNjX2dldF9pbmZvLmRhdGEucFVuaWZvcm1UZXhlbEJ1ZmZl ciA9ICZkZXNjX2J1Zl9pbmZvOwotICAgICAgICAgICAgZGVzY19zaXplID0gcy0+ZGVzY19idWZf cHJvcHMudW5pZm9ybVRleGVsQnVmZmVyRGVzY3JpcHRvclNpemU7Ci0gICAgICAgICAgICBicmVh azsKLSAgICAgICAgY2FzZSBWS19ERVNDUklQVE9SX1RZUEVfU1RPUkFHRV9URVhFTF9CVUZGRVI6 Ci0gICAgICAgICAgICBkZXNjX2dldF9pbmZvLmRhdGEucFN0b3JhZ2VUZXhlbEJ1ZmZlciA9ICZk ZXNjX2J1Zl9pbmZvOwotICAgICAgICAgICAgZGVzY19zaXplID0gcy0+ZGVzY19idWZfcHJvcHMu c3RvcmFnZVRleGVsQnVmZmVyRGVzY3JpcHRvclNpemU7Ci0gICAgICAgICAgICBicmVhazsKLSAg ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJST1IsICJJbnZh bGlkIGRlc2NyaXB0b3IgdHlwZSBhdCBzZXQgJWkgYmluZGluZyAlaTogJWkhXG4iLAotICAgICAg ICAgICAgICAgICAgIHNldCwgYmluZCwgZGVzY19nZXRfaW5mby50eXBlKTsKLSAgICAgICAgICAg IHJldHVybiBBVkVSUk9SKEVJTlZBTCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfTsK LQotICAgICAgICB1cGRhdGVfc2V0X2Rlc2NyaXB0b3IocywgZSwgc2hkLCBzZXQsIGJpbmQsIGVs ZW0sICZkZXNjX2dldF9pbmZvLCBkZXNjX3NpemUpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIFZr RGVzY3JpcHRvckJ1ZmZlckluZm8gZGVzY19wb29sX3dyaXRlX2luZm9fYnVmID0gewotICAgICAg ICAgICAgLmJ1ZmZlciA9IGJ1Zi0+YnVmLAotICAgICAgICAgICAgLm9mZnNldCA9IGJ1Zi0+dmly dHVhbF9vZmZzZXQgKyBvZmZzZXQsCi0gICAgICAgICAgICAucmFuZ2UgPSBsZW4sCi0gICAgICAg IH07Ci0gICAgICAgIFZrV3JpdGVEZXNjcmlwdG9yU2V0IGRlc2NfcG9vbF93cml0ZV9pbmZvID0g ewotICAgICAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfV1JJVEVfREVTQ1JJUFRP Ul9TRVQsCi0gICAgICAgICAgICAuZHN0QmluZGluZyA9IGJpbmQsCi0gICAgICAgICAgICAuZGVz Y3JpcHRvckNvdW50ID0gMSwKLSAgICAgICAgICAgIC5kc3RBcnJheUVsZW1lbnQgPSBlbGVtLAot ICAgICAgICAgICAgLmRlc2NyaXB0b3JUeXBlID0gZGVzY19zZXQtPmJpbmRpbmdbYmluZF0uZGVz Y3JpcHRvclR5cGUsCi0gICAgICAgICAgICAucEJ1ZmZlckluZm8gPSAmZGVzY19wb29sX3dyaXRl X2luZm9fYnVmLAotICAgICAgICB9OwotICAgICAgICB1cGRhdGVfc2V0X3Bvb2xfd3JpdGUocywg ZSwgc2hkLCBzZXQsICZkZXNjX3Bvb2xfd3JpdGVfaW5mbyk7Ci0gICAgfQotCi0gICAgcmV0dXJu IDA7Ci19Ci0KLXZvaWQgZmZfdmtfc2hhZGVyX3VwZGF0ZV9wdXNoX2NvbnN0KEZGVnVsa2FuQ29u dGV4dCAqcywgRkZWa0V4ZWNDb250ZXh0ICplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgRkZWdWxrYW5TaGFkZXIgKnNoZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFZrU2hhZGVyU3RhZ2VGbGFnQml0cyBzdGFnZSwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGludCBvZmZzZXQsIHNpemVfdCBzaXplLCB2b2lkICpzcmMpCi17 Ci0gICAgRkZWdWxrYW5GdW5jdGlvbnMgKnZrID0gJnMtPnZrZm47Ci0gICAgdmstPkNtZFB1c2hD b25zdGFudHMoZS0+YnVmLCBzaGQtPnBpcGVsaW5lX2xheW91dCwKLSAgICAgICAgICAgICAgICAg ICAgICAgICBzdGFnZSwgb2Zmc2V0LCBzaXplLCBzcmMpOwotfQotCi12b2lkIGZmX3ZrX2V4ZWNf YmluZF9zaGFkZXIoRkZWdWxrYW5Db250ZXh0ICpzLCBGRlZrRXhlY0NvbnRleHQgKmUsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgRkZWdWxrYW5TaGFkZXIgKnNoZCkKLXsKLSAgICBGRlZ1 bGthbkZ1bmN0aW9ucyAqdmsgPSAmcy0+dmtmbjsKLSAgICBWa0RldmljZVNpemUgb2Zmc2V0c1sx MDI0XTsKLSAgICBGRlZ1bGthblNoYWRlckRhdGEgKnNkID0gZ2V0X3NoZF9kYXRhKGUsIHNoZCk7 Ci0KLSAgICBpZiAocy0+ZXh0ZW5zaW9ucyAmIEZGX1ZLX0VYVF9TSEFERVJfT0JKRUNUKSB7Ci0g ICAgICAgIFZrU2hhZGVyU3RhZ2VGbGFnQml0cyBzdGFnZXMgPSBzaGQtPnN0YWdlOwotICAgICAg ICB2ay0+Q21kQmluZFNoYWRlcnNFWFQoZS0+YnVmLCAxLCAmc3RhZ2VzLCAmc2hkLT5vYmplY3Qp OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHZrLT5DbWRCaW5kUGlwZWxpbmUoZS0+YnVmLCBzaGQt PmJpbmRfcG9pbnQsIHNoZC0+cGlwZWxpbmUpOwotICAgIH0KLQotICAgIGlmIChzZCAmJiBzZC0+ bmJfZGVzY3JpcHRvcl9zZXRzKSB7Ci0gICAgICAgIGlmIChzLT5leHRlbnNpb25zICYgRkZfVktf RVhUX0RFU0NSSVBUT1JfQlVGRkVSKSB7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8 IHNkLT5uYl9kZXNjcmlwdG9yX3NldHM7IGkrKykKLSAgICAgICAgICAgICAgICBvZmZzZXRzW2ld ID0gc2hkLT5kZXNjX3NldFtpXS5zaW5ndWxhciA/IDAgOiBzaGQtPmRlc2Nfc2V0W2ldLmFsaWdu ZWRfc2l6ZSplLT5pZHg7Ci0KLSAgICAgICAgICAgIC8qIEJpbmQgZGVzY3JpcHRvciBidWZmZXJz ICovCi0gICAgICAgICAgICB2ay0+Q21kQmluZERlc2NyaXB0b3JCdWZmZXJzRVhUKGUtPmJ1Ziwg c2QtPm5iX2Rlc2NyaXB0b3Jfc2V0cywgc2QtPmRlc2NfYmluZCk7Ci0gICAgICAgICAgICAvKiBC aW5kaW5nIG9mZnNldHMgKi8KLSAgICAgICAgICAgIHZrLT5DbWRTZXREZXNjcmlwdG9yQnVmZmVy T2Zmc2V0c0VYVChlLT5idWYsIHNoZC0+YmluZF9wb2ludCwgc2hkLT5waXBlbGluZV9sYXlvdXQs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgc2Qt Pm5iX2Rlc2NyaXB0b3Jfc2V0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzaGQtPmJvdW5kX2J1ZmZlcl9pbmRpY2VzLCBvZmZzZXRzKTsKLSAgICAg ICAgfSBlbHNlIGlmICghc2hkLT51c2VfcHVzaCkgewotICAgICAgICAgICAgdmstPkNtZEJpbmRE ZXNjcmlwdG9yU2V0cyhlLT5idWYsIHNoZC0+YmluZF9wb2ludCwgc2hkLT5waXBlbGluZV9sYXlv dXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIHNkLT5uYl9kZXNj cmlwdG9yX3NldHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzZC0+ ZGVzY19zZXRzW2UtPmlkeCpzZC0+bmJfZGVzY3JpcHRvcl9zZXRzXSwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgMCwgTlVMTCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0K LXZvaWQgZmZfdmtfc2hhZGVyX2ZyZWUoRkZWdWxrYW5Db250ZXh0ICpzLCBGRlZ1bGthblNoYWRl ciAqc2hkKQotewotICAgIEZGVnVsa2FuRnVuY3Rpb25zICp2ayA9ICZzLT52a2ZuOwotCi0gICAg YXZfYnByaW50X2ZpbmFsaXplKCZzaGQtPnNyYywgTlVMTCk7Ci0KLSNpZiAwCi0gICAgaWYgKHNo ZC0+c2hhZGVyLm1vZHVsZSkKLSAgICAgICAgdmstPkRlc3Ryb3lTaGFkZXJNb2R1bGUocy0+aHdj dHgtPmFjdF9kZXYsIHNoZC0+c2hhZGVyLm1vZHVsZSwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcy0+aHdjdHgtPmFsbG9jKTsKLSNlbmRpZgotCi0gICAgaWYgKHNoZC0+b2JqZWN0 KQotICAgICAgICB2ay0+RGVzdHJveVNoYWRlckVYVChzLT5od2N0eC0+YWN0X2Rldiwgc2hkLT5v YmplY3QsIHMtPmh3Y3R4LT5hbGxvYyk7Ci0gICAgaWYgKHNoZC0+cGlwZWxpbmUpCi0gICAgICAg IHZrLT5EZXN0cm95UGlwZWxpbmUocy0+aHdjdHgtPmFjdF9kZXYsIHNoZC0+cGlwZWxpbmUsIHMt Pmh3Y3R4LT5hbGxvYyk7Ci0gICAgaWYgKHNoZC0+cGlwZWxpbmVfbGF5b3V0KQotICAgICAgICB2 ay0+RGVzdHJveVBpcGVsaW5lTGF5b3V0KHMtPmh3Y3R4LT5hY3RfZGV2LCBzaGQtPnBpcGVsaW5l X2xheW91dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLT5od2N0eC0+YWxs b2MpOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaGQtPm5iX2Rlc2NyaXB0b3Jfc2V0czsg aSsrKSB7Ci0gICAgICAgIEZGVnVsa2FuRGVzY3JpcHRvclNldCAqc2V0ID0gJnNoZC0+ZGVzY19z ZXRbaV07Ci0gICAgICAgIGF2X2ZyZWUoc2V0LT5iaW5kaW5nKTsKLSAgICAgICAgYXZfZnJlZShz ZXQtPmJpbmRpbmdfb2Zmc2V0KTsKLSAgICB9Ci0KLSAgICBpZiAoc2hkLT5kZXNjX2xheW91dCkg ewotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNoZC0+bmJfZGVzY3JpcHRvcl9zZXRzOyBp KyspCi0gICAgICAgICAgICBpZiAoc2hkLT5kZXNjX2xheW91dFtpXSkKLSAgICAgICAgICAgICAg ICB2ay0+RGVzdHJveURlc2NyaXB0b3JTZXRMYXlvdXQocy0+aHdjdHgtPmFjdF9kZXYsIHNoZC0+ ZGVzY19sYXlvdXRbaV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHMtPmh3Y3R4LT5hbGxvYyk7Ci0gICAgfQotCi0gICAgYXZfZnJlZXAoJnNoZC0+ZGVz Y19wb29sX3NpemUpOwotICAgIGF2X2ZyZWVwKCZzaGQtPmRlc2NfbGF5b3V0KTsKLSAgICBhdl9m cmVlcCgmc2hkLT5kZXNjX3NldCk7Ci0gICAgYXZfZnJlZXAoJnNoZC0+Ym91bmRfYnVmZmVyX2lu ZGljZXMpOwotICAgIGF2X2ZyZWVwKCZzaGQtPnB1c2hfY29uc3RzKTsKLSAgICBzaGQtPnB1c2hf Y29uc3RzX251bSA9IDA7Ci19Ci0KLXZvaWQgZmZfdmtfdW5pbml0KEZGVnVsa2FuQ29udGV4dCAq cykKLXsKLSAgICBhdl9mcmVlcCgmcy0+cXVlcnlfcHJvcHMpOwotICAgIGF2X2ZyZWVwKCZzLT5x Zl9wcm9wcyk7Ci0gICAgYXZfZnJlZXAoJnMtPnZpZGVvX3Byb3BzKTsKLSAgICBhdl9mcmVlcCgm cy0+Y29vcF9tYXRfcHJvcHMpOwotICAgIGF2X2ZyZWVwKCZzLT5ob3N0X2ltYWdlX2NvcHlfbGF5 b3V0cyk7Ci0KLSAgICBhdl9idWZmZXJfdW5yZWYoJnMtPmRldmljZV9yZWYpOwotICAgIGF2X2J1 ZmZlcl91bnJlZigmcy0+ZnJhbWVzX3JlZik7Ci19Ci0KLWludCBmZl92a19pbml0KEZGVnVsa2Fu Q29udGV4dCAqcywgdm9pZCAqbG9nX3BhcmVudCwKLSAgICAgICAgICAgICAgIEFWQnVmZmVyUmVm ICpkZXZpY2VfcmVmLCBBVkJ1ZmZlclJlZiAqZnJhbWVzX3JlZikKLXsKLSAgICBpbnQgZXJyOwot Ci0gICAgc3RhdGljIGNvbnN0IEFWQ2xhc3MgdnVsa2FuX2NvbnRleHRfY2xhc3MgPSB7Ci0gICAg ICAgIC5jbGFzc19uYW1lICAgICAgID0gInZrIiwKLSAgICAgICAgLnZlcnNpb24gICAgICAgICAg PSBMSUJBVlVUSUxfVkVSU0lPTl9JTlQsCi0gICAgICAgIC5wYXJlbnRfbG9nX2NvbnRleHRfb2Zm c2V0ID0gb2Zmc2V0b2YoRkZWdWxrYW5Db250ZXh0LCBsb2dfcGFyZW50KSwKLSAgICB9OwotCi0g ICAgbWVtc2V0KHMsIDAsIHNpemVvZigqcykpOwotICAgIHMtPmxvZ19wYXJlbnQgPSBsb2dfcGFy ZW50OwotICAgIHMtPmNsYXNzICAgICAgPSAmdnVsa2FuX2NvbnRleHRfY2xhc3M7Ci0KLSAgICBp ZiAoZnJhbWVzX3JlZikgewotICAgICAgICBzLT5mcmFtZXNfcmVmID0gYXZfYnVmZmVyX3JlZihm cmFtZXNfcmVmKTsKLSAgICAgICAgaWYgKCFzLT5mcmFtZXNfcmVmKQotICAgICAgICAgICAgcmV0 dXJuIEFWRVJST1IoRU5PTUVNKTsKLQotICAgICAgICBzLT5mcmFtZXMgPSAoQVZIV0ZyYW1lc0Nv bnRleHQgKilzLT5mcmFtZXNfcmVmLT5kYXRhOwotICAgICAgICBzLT5od2ZjID0gcy0+ZnJhbWVz LT5od2N0eDsKLQotICAgICAgICBkZXZpY2VfcmVmID0gcy0+ZnJhbWVzLT5kZXZpY2VfcmVmOwot ICAgIH0KLQotICAgIHMtPmRldmljZV9yZWYgPSBhdl9idWZmZXJfcmVmKGRldmljZV9yZWYpOwot ICAgIGlmICghcy0+ZGV2aWNlX3JlZikgewotICAgICAgICBmZl92a191bmluaXQocyk7Ci0gICAg ICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7Ci0gICAgfQotCi0gICAgcy0+ZGV2aWNlID0gKEFW SFdEZXZpY2VDb250ZXh0ICopcy0+ZGV2aWNlX3JlZi0+ZGF0YTsKLSAgICBzLT5od2N0eCA9IHMt PmRldmljZS0+aHdjdHg7Ci0KLSAgICBzLT5leHRlbnNpb25zID0gZmZfdmtfZXh0ZW5zaW9uc190 b19tYXNrKHMtPmh3Y3R4LT5lbmFibGVkX2Rldl9leHRlbnNpb25zLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy0+aHdjdHgtPm5iX2VuYWJsZWRfZGV2X2V4 dGVuc2lvbnMpOwotICAgIHMtPmV4dGVuc2lvbnMgfD0gZmZfdmtfZXh0ZW5zaW9uc190b19tYXNr KHMtPmh3Y3R4LT5lbmFibGVkX2luc3RfZXh0ZW5zaW9ucywKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzLT5od2N0eC0+bmJfZW5hYmxlZF9pbnN0X2V4dGVu c2lvbnMpOwotCi0gICAgZXJyID0gZmZfdmtfbG9hZF9mdW5jdGlvbnMocy0+ZGV2aWNlLCAmcy0+ dmtmbiwgcy0+ZXh0ZW5zaW9ucywgMSwgMSk7Ci0gICAgaWYgKGVyciA8IDApIHsKLSAgICAgICAg ZmZfdmtfdW5pbml0KHMpOwotICAgICAgICByZXR1cm4gZXJyOwotICAgIH0KLQotICAgIGVyciA9 IGZmX3ZrX2xvYWRfcHJvcHMocyk7Ci0gICAgaWYgKGVyciA8IDApIHsKLSAgICAgICAgZmZfdmtf dW5pbml0KHMpOwotICAgICAgICByZXR1cm4gZXJyOwotICAgIH0KLQotICAgIHJldHVybiAwOwot fQotLSAKMi40OS4xCgoKRnJvbSA3NDhkM2NkMjg4MThiN2Q4YWY3ZmMyNTViMWIyMmRkOWNmNTBi NWE2IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBKYW1haWthMSA8bHVrYXN6Y3oxOEB3 cC5wbD4KRGF0ZTogV2VkLCAzIFNlcCAyMDI1IDEzOjE3OjM0ICswMDAwClN1YmplY3Q6IFtQQVRD SCAwNDQvMTE4XSBDaGFuZ2luZyB2dWxrYW4gZmlsZSBkaXJlY3RvcnkKCi0tLQogbGliYXZ1dGls L3Z1bGthbi92dWxrYW4uYyB8IDMwMjkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKwogMSBmaWxlIGNoYW5nZWQsIDMwMjkgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAw NjQ0IGxpYmF2dXRpbC92dWxrYW4vdnVsa2FuLmMKCmRpZmYgLS1naXQgYS9saWJhdnV0aWwvdnVs a2FuL3Z1bGthbi5jIGIvbGliYXZ1dGlsL3Z1bGthbi92dWxrYW4uYwpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAwLi44ZjcxNmM4YjQ1Ci0tLSAvZGV2L251bGwKKysrIGIvbGli YXZ1dGlsL3Z1bGthbi92dWxrYW4uYwpAQCAtMCwwICsxLDMwMjkgQEAKKy8qCisgKiBDb3B5cmln aHQgKGMpIEx5bm5lCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgorICoKKyAq IEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVk IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH TlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBH ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0 ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g U3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorICovCisKKyNp bmNsdWRlICJsaWJhdnV0aWwvYXZhc3NlcnQuaCIKKyNpbmNsdWRlICJsaWJhdnV0aWwvbWVtLmgi CisKKyNpbmNsdWRlICJ2dWxrYW4uaCIKKyNpbmNsdWRlICJsaWJhdnV0aWwvdnVsa2FuX2xvYWRl ci5oIgorCitjb25zdCBWa0NvbXBvbmVudE1hcHBpbmcgZmZfY29tcF9pZGVudGl0eV9tYXAgPSB7 CisgICAgLnIgPSBWS19DT01QT05FTlRfU1dJWlpMRV9JREVOVElUWSwKKyAgICAuZyA9IFZLX0NP TVBPTkVOVF9TV0laWkxFX0lERU5USVRZLAorICAgIC5iID0gVktfQ09NUE9ORU5UX1NXSVpaTEVf SURFTlRJVFksCisgICAgLmEgPSBWS19DT01QT05FTlRfU1dJWlpMRV9JREVOVElUWSwKK307CisK Ky8qIENvbnZlcnRzIHJldHVybiB2YWx1ZXMgdG8gc3RyaW5ncyAqLworY29uc3QgY2hhciAqZmZf dmtfcmV0MnN0cihWa1Jlc3VsdCByZXMpCit7CisjZGVmaW5lIENBU0UoVkFMKSBjYXNlIFZBTDog cmV0dXJuICNWQUwKKyAgICBzd2l0Y2ggKHJlcykgeworICAgIENBU0UoVktfU1VDQ0VTUyk7Cisg ICAgQ0FTRShWS19OT1RfUkVBRFkpOworICAgIENBU0UoVktfVElNRU9VVCk7CisgICAgQ0FTRShW S19FVkVOVF9TRVQpOworICAgIENBU0UoVktfRVZFTlRfUkVTRVQpOworICAgIENBU0UoVktfSU5D T01QTEVURSk7CisgICAgQ0FTRShWS19FUlJPUl9PVVRfT0ZfSE9TVF9NRU1PUlkpOworICAgIENB U0UoVktfRVJST1JfT1VUX09GX0RFVklDRV9NRU1PUlkpOworICAgIENBU0UoVktfRVJST1JfSU5J VElBTElaQVRJT05fRkFJTEVEKTsKKyAgICBDQVNFKFZLX0VSUk9SX0RFVklDRV9MT1NUKTsKKyAg ICBDQVNFKFZLX0VSUk9SX01FTU9SWV9NQVBfRkFJTEVEKTsKKyAgICBDQVNFKFZLX0VSUk9SX0xB WUVSX05PVF9QUkVTRU5UKTsKKyAgICBDQVNFKFZLX0VSUk9SX0VYVEVOU0lPTl9OT1RfUFJFU0VO VCk7CisgICAgQ0FTRShWS19FUlJPUl9GRUFUVVJFX05PVF9QUkVTRU5UKTsKKyAgICBDQVNFKFZL X0VSUk9SX0lOQ09NUEFUSUJMRV9EUklWRVIpOworICAgIENBU0UoVktfRVJST1JfVE9PX01BTllf T0JKRUNUUyk7CisgICAgQ0FTRShWS19FUlJPUl9GT1JNQVRfTk9UX1NVUFBPUlRFRCk7CisgICAg Q0FTRShWS19FUlJPUl9GUkFHTUVOVEVEX1BPT0wpOworICAgIENBU0UoVktfRVJST1JfVU5LTk9X Tik7CisgICAgQ0FTRShWS19FUlJPUl9PVVRfT0ZfUE9PTF9NRU1PUlkpOworICAgIENBU0UoVktf RVJST1JfSU5WQUxJRF9FWFRFUk5BTF9IQU5ETEUpOworICAgIENBU0UoVktfRVJST1JfRlJBR01F TlRBVElPTik7CisgICAgQ0FTRShWS19FUlJPUl9JTlZBTElEX09QQVFVRV9DQVBUVVJFX0FERFJF U1MpOworICAgIENBU0UoVktfUElQRUxJTkVfQ09NUElMRV9SRVFVSVJFRCk7CisgICAgQ0FTRShW S19FUlJPUl9TVVJGQUNFX0xPU1RfS0hSKTsKKyAgICBDQVNFKFZLX0VSUk9SX05BVElWRV9XSU5E T1dfSU5fVVNFX0tIUik7CisgICAgQ0FTRShWS19TVUJPUFRJTUFMX0tIUik7CisgICAgQ0FTRShW S19FUlJPUl9PVVRfT0ZfREFURV9LSFIpOworICAgIENBU0UoVktfRVJST1JfSU5DT01QQVRJQkxF X0RJU1BMQVlfS0hSKTsKKyAgICBDQVNFKFZLX0VSUk9SX1ZBTElEQVRJT05fRkFJTEVEX0VYVCk7 CisgICAgQ0FTRShWS19FUlJPUl9JTlZBTElEX1NIQURFUl9OVik7CisgICAgQ0FTRShWS19FUlJP Ul9WSURFT19QSUNUVVJFX0xBWU9VVF9OT1RfU1VQUE9SVEVEX0tIUik7CisgICAgQ0FTRShWS19F UlJPUl9WSURFT19QUk9GSUxFX09QRVJBVElPTl9OT1RfU1VQUE9SVEVEX0tIUik7CisgICAgQ0FT RShWS19FUlJPUl9WSURFT19QUk9GSUxFX0ZPUk1BVF9OT1RfU1VQUE9SVEVEX0tIUik7CisgICAg Q0FTRShWS19FUlJPUl9WSURFT19QUk9GSUxFX0NPREVDX05PVF9TVVBQT1JURURfS0hSKTsKKyAg ICBDQVNFKFZLX0VSUk9SX1ZJREVPX1NURF9WRVJTSU9OX05PVF9TVVBQT1JURURfS0hSKTsKKyAg ICBDQVNFKFZLX0VSUk9SX0lOVkFMSURfRFJNX0ZPUk1BVF9NT0RJRklFUl9QTEFORV9MQVlPVVRf RVhUKTsKKyAgICBDQVNFKFZLX0VSUk9SX05PVF9QRVJNSVRURURfS0hSKTsKKyAgICBDQVNFKFZL X0VSUk9SX0ZVTExfU0NSRUVOX0VYQ0xVU0lWRV9NT0RFX0xPU1RfRVhUKTsKKyAgICBDQVNFKFZL X1RIUkVBRF9JRExFX0tIUik7CisgICAgQ0FTRShWS19USFJFQURfRE9ORV9LSFIpOworICAgIENB U0UoVktfT1BFUkFUSU9OX0RFRkVSUkVEX0tIUik7CisgICAgQ0FTRShWS19PUEVSQVRJT05fTk9U X0RFRkVSUkVEX0tIUik7CisgICAgZGVmYXVsdDogcmV0dXJuICJVbmtub3duIGVycm9yIjsKKyAg ICB9CisjdW5kZWYgQ0FTRQorfQorCisvKiBNYWxpdGlhIHB1cmEsIEtocm9ub3MgKi8KKyNkZWZp bmUgRk5fTUFQX1RPKGRzdF90LCBkc3RfbmFtZSwgc3JjX3QsIHNyY19uYW1lKSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBkc3RfdCBmZl92a19tYXBfICMjc3JjX25hbWUj IyBfdG9fICMjZHN0X25hbWUoc3JjX3Qgc3JjKSBcCisgICAgeyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAg IGRzdF90IGRzdCA9IDB4MDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCisgICAgICAgIE1BUF9UTyhWS19GT1JNQVRfRkVBVFVSRV8yX1NBTVBMRURfSU1B R0VfQklULCAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICBWS19JTUFHRV9VU0FH RV9TQU1QTEVEX0JJVCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIE1B UF9UTyhWS19GT1JNQVRfRkVBVFVSRV8yX1RSQU5TRkVSX1NSQ19CSVQsICAgICAgICAgICAgICAg ICAgICBcCisgICAgICAgICAgICAgICBWS19JTUFHRV9VU0FHRV9UUkFOU0ZFUl9TUkNfQklUKTsg ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIE1BUF9UTyhWS19GT1JNQVRfRkVBVFVS RV8yX1RSQU5TRkVSX0RTVF9CSVQsICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAg ICBWS19JTUFHRV9VU0FHRV9UUkFOU0ZFUl9EU1RfQklUKTsgICAgICAgICAgICAgICAgICAgICAg ICBcCisgICAgICAgIE1BUF9UTyhWS19GT1JNQVRfRkVBVFVSRV8yX1NUT1JBR0VfSU1BR0VfQklU LCAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICBWS19JTUFHRV9VU0FHRV9TVE9S QUdFX0JJVCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIE1BUF9UTyhW S19GT1JNQVRfRkVBVFVSRV8yX0NPTE9SX0FUVEFDSE1FTlRfQklULCAgICAgICAgICAgICAgICBc CisgICAgICAgICAgICAgICBWS19JTUFHRV9VU0FHRV9DT0xPUl9BVFRBQ0hNRU5UX0JJVCk7ICAg ICAgICAgICAgICAgICAgICBcCisgICAgICAgIE1BUF9UTyhWS19GT1JNQVRfRkVBVFVSRV8yX1ZJ REVPX0RFQ09ERV9PVVRQVVRfQklUX0tIUiwgICAgICAgICBcCisgICAgICAgICAgICAgICBWS19J TUFHRV9VU0FHRV9WSURFT19ERUNPREVfRFNUX0JJVF9LSFIpOyAgICAgICAgICAgICAgICBcCisg ICAgICAgIE1BUF9UTyhWS19GT1JNQVRfRkVBVFVSRV8yX1ZJREVPX0RFQ09ERV9EUEJfQklUX0tI UiwgICAgICAgICAgICBcCisgICAgICAgICAgICAgICBWS19JTUFHRV9VU0FHRV9WSURFT19ERUNP REVfRFBCX0JJVF9LSFIpOyAgICAgICAgICAgICAgICBcCisgICAgICAgIE1BUF9UTyhWS19GT1JN QVRfRkVBVFVSRV8yX1ZJREVPX0VOQ09ERV9EUEJfQklUX0tIUiwgICAgICAgICAgICBcCisgICAg ICAgICAgICAgICBWS19JTUFHRV9VU0FHRV9WSURFT19FTkNPREVfRFBCX0JJVF9LSFIpOyAgICAg ICAgICAgICAgICBcCisgICAgICAgIE1BUF9UTyhWS19GT1JNQVRfRkVBVFVSRV8yX1ZJREVPX0VO Q09ERV9JTlBVVF9CSVRfS0hSLCAgICAgICAgICBcCisgICAgICAgICAgICAgICBWS19JTUFHRV9V U0FHRV9WSURFT19FTkNPREVfU1JDX0JJVF9LSFIpOyAgICAgICAgICAgICAgICBcCisgICAgICAg IE1BUF9UTyhWS19GT1JNQVRfRkVBVFVSRV8yX0hPU1RfSU1BR0VfVFJBTlNGRVJfQklUX0VYVCwg ICAgICAgICBcCisgICAgICAgICAgICAgICBWS19JTUFHRV9VU0FHRV9IT1NUX1RSQU5TRkVSX0JJ VF9FWFQpOyAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHJldHVybiBkc3Q7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfQorCisj ZGVmaW5lIE1BUF9UTyhmbGFnMSwgZmxhZzIpIGlmIChzcmMgJiBmbGFnMikgZHN0IHw9IGZsYWcx OworRk5fTUFQX1RPKFZrRm9ybWF0RmVhdHVyZUZsYWdCaXRzMiwgZmVhdHMsIFZrSW1hZ2VVc2Fn ZUZsYWdzLCB1c2FnZSkKKyN1bmRlZiBNQVBfVE8KKyNkZWZpbmUgTUFQX1RPKGZsYWcxLCBmbGFn MikgaWYgKHNyYyAmIGZsYWcxKSBkc3QgfD0gZmxhZzI7CitGTl9NQVBfVE8oVmtJbWFnZVVzYWdl RmxhZ3MsIHVzYWdlLCBWa0Zvcm1hdEZlYXR1cmVGbGFnQml0czIsIGZlYXRzKQorI3VuZGVmIE1B UF9UTworI3VuZGVmIEZOX01BUF9UTworCitzdGF0aWMgdm9pZCBsb2FkX2VuYWJsZWRfcWZzKEZG VnVsa2FuQ29udGV4dCAqcykKK3sKKyAgICBzLT5uYl9xZnMgPSAwOworICAgIGZvciAoaW50IGkg PSAwOyBpIDwgcy0+aHdjdHgtPm5iX3FmOyBpKyspIHsKKyAgICAgICAgLyogU2tpcCBkdXBsaWNh dGVzICovCisgICAgICAgIGludCBza2lwID0gMDsKKyAgICAgICAgZm9yIChpbnQgaiA9IDA7IGog PCBzLT5uYl9xZnM7IGorKykgeworICAgICAgICAgICAgaWYgKHMtPnFmc1tqXSA9PSBzLT5od2N0 eC0+cWZbaV0uaWR4KSB7CisgICAgICAgICAgICAgICAgc2tpcCA9IDE7CisgICAgICAgICAgICAg ICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHNraXApCisg ICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBzLT5xZnNbcy0+bmJfcWZzKytdID0gcy0+ aHdjdHgtPnFmW2ldLmlkeDsKKyAgICB9Cit9CisKK2ludCBmZl92a19sb2FkX3Byb3BzKEZGVnVs a2FuQ29udGV4dCAqcykKK3sKKyAgICBGRlZ1bGthbkZ1bmN0aW9ucyAqdmsgPSAmcy0+dmtmbjsK KworICAgIHMtPnByb3BzID0gKFZrUGh5c2ljYWxEZXZpY2VQcm9wZXJ0aWVzMikgeworICAgICAg ICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9QSFlTSUNBTF9ERVZJQ0VfUFJPUEVSVElFU18y LAorICAgIH07CisKKyAgICBGRl9WS19TVFJVQ1RfRVhUKHMsICZzLT5wcm9wcywgJnMtPnByb3Bz XzExLCBGRl9WS19FWFRfTk9fRkxBRywKKyAgICAgICAgICAgICAgICAgICAgIFZLX1NUUlVDVFVS RV9UWVBFX1BIWVNJQ0FMX0RFVklDRV9WVUxLQU5fMV8xX1BST1BFUlRJRVMpOworICAgIEZGX1ZL X1NUUlVDVF9FWFQocywgJnMtPnByb3BzLCAmcy0+ZHJpdmVyX3Byb3BzLCBGRl9WS19FWFRfTk9f RkxBRywKKyAgICAgICAgICAgICAgICAgICAgIFZLX1NUUlVDVFVSRV9UWVBFX1BIWVNJQ0FMX0RF VklDRV9EUklWRVJfUFJPUEVSVElFUyk7CisgICAgRkZfVktfU1RSVUNUX0VYVChzLCAmcy0+cHJv cHMsICZzLT5zdWJncm91cF9wcm9wcywgRkZfVktfRVhUX05PX0ZMQUcsCisgICAgICAgICAgICAg ICAgICAgICBWS19TVFJVQ1RVUkVfVFlQRV9QSFlTSUNBTF9ERVZJQ0VfU1VCR1JPVVBfU0laRV9D T05UUk9MX1BST1BFUlRJRVMpOworCisgICAgRkZfVktfU1RSVUNUX0VYVChzLCAmcy0+cHJvcHMs ICZzLT5wdXNoX2Rlc2NfcHJvcHMsIEZGX1ZLX0VYVF9QVVNIX0RFU0NSSVBUT1IsCisgICAgICAg ICAgICAgICAgICAgICBWS19TVFJVQ1RVUkVfVFlQRV9QSFlTSUNBTF9ERVZJQ0VfUFVTSF9ERVND UklQVE9SX1BST1BFUlRJRVNfS0hSKTsKKyAgICBGRl9WS19TVFJVQ1RfRVhUKHMsICZzLT5wcm9w cywgJnMtPmhwcm9wcywgRkZfVktfRVhUX0VYVEVSTkFMX0hPU1RfTUVNT1JZLAorICAgICAgICAg ICAgICAgICAgICAgVktfU1RSVUNUVVJFX1RZUEVfUEhZU0lDQUxfREVWSUNFX0VYVEVSTkFMX01F TU9SWV9IT1NUX1BST1BFUlRJRVNfRVhUKTsKKyAgICBGRl9WS19TVFJVQ1RfRVhUKHMsICZzLT5w cm9wcywgJnMtPmNvb3BfbWF0cml4X3Byb3BzLCBGRl9WS19FWFRfQ09PUF9NQVRSSVgsCisgICAg ICAgICAgICAgICAgICAgICBWS19TVFJVQ1RVUkVfVFlQRV9QSFlTSUNBTF9ERVZJQ0VfQ09PUEVS QVRJVkVfTUFUUklYX1BST1BFUlRJRVNfS0hSKTsKKyAgICBGRl9WS19TVFJVQ1RfRVhUKHMsICZz LT5wcm9wcywgJnMtPmRlc2NfYnVmX3Byb3BzLCBGRl9WS19FWFRfREVTQ1JJUFRPUl9CVUZGRVIs CisgICAgICAgICAgICAgICAgICAgICBWS19TVFJVQ1RVUkVfVFlQRV9QSFlTSUNBTF9ERVZJQ0Vf REVTQ1JJUFRPUl9CVUZGRVJfUFJPUEVSVElFU19FWFQpOworICAgIEZGX1ZLX1NUUlVDVF9FWFQo cywgJnMtPnByb3BzLCAmcy0+b3B0aWNhbF9mbG93X3Byb3BzLCBGRl9WS19FWFRfT1BUSUNBTF9G TE9XLAorICAgICAgICAgICAgICAgICAgICAgVktfU1RSVUNUVVJFX1RZUEVfUEhZU0lDQUxfREVW SUNFX09QVElDQUxfRkxPV19QUk9QRVJUSUVTX05WKTsKKyAgICBGRl9WS19TVFJVQ1RfRVhUKHMs ICZzLT5wcm9wcywgJnMtPmhvc3RfaW1hZ2VfcHJvcHMsIEZGX1ZLX0VYVF9IT1NUX0lNQUdFX0NP UFksCisgICAgICAgICAgICAgICAgICAgICBWS19TVFJVQ1RVUkVfVFlQRV9QSFlTSUNBTF9ERVZJ Q0VfSE9TVF9JTUFHRV9DT1BZX1BST1BFUlRJRVNfRVhUKTsKKworICAgIHMtPmZlYXRzID0gKFZr UGh5c2ljYWxEZXZpY2VGZWF0dXJlczIpIHsKKyAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJF X1RZUEVfUEhZU0lDQUxfREVWSUNFX0ZFQVRVUkVTXzIsCisgICAgfTsKKworICAgIEZGX1ZLX1NU UlVDVF9FWFQocywgJnMtPmZlYXRzLCAmcy0+ZmVhdHNfMTIsIEZGX1ZLX0VYVF9OT19GTEFHLAor ICAgICAgICAgICAgICAgICAgICAgVktfU1RSVUNUVVJFX1RZUEVfUEhZU0lDQUxfREVWSUNFX1ZV TEtBTl8xXzJfRkVBVFVSRVMpOworICAgIEZGX1ZLX1NUUlVDVF9FWFQocywgJnMtPmZlYXRzLCAm cy0+YXRvbWljX2Zsb2F0X2ZlYXRzLCBGRl9WS19FWFRfQVRPTUlDX0ZMT0FULAorICAgICAgICAg ICAgICAgICAgICAgVktfU1RSVUNUVVJFX1RZUEVfUEhZU0lDQUxfREVWSUNFX1NIQURFUl9BVE9N SUNfRkxPQVRfRkVBVFVSRVNfRVhUKTsKKworICAgIC8qIFRyeSBhbGxvY2F0aW5nIDEwMjQgbGF5 b3V0cyAqLworICAgIHMtPmhvc3RfaW1hZ2VfY29weV9sYXlvdXRzID0gYXZfbWFsbG9jKHNpemVv Zigqcy0+aG9zdF9pbWFnZV9jb3B5X2xheW91dHMpKjEwMjQpOworICAgIHMtPmhvc3RfaW1hZ2Vf cHJvcHMucENvcHlTcmNMYXlvdXRzID0gcy0+aG9zdF9pbWFnZV9jb3B5X2xheW91dHM7CisgICAg cy0+aG9zdF9pbWFnZV9wcm9wcy5jb3B5U3JjTGF5b3V0Q291bnQgPSA1MTI7CisgICAgcy0+aG9z dF9pbWFnZV9wcm9wcy5wQ29weURzdExheW91dHMgPSBzLT5ob3N0X2ltYWdlX2NvcHlfbGF5b3V0 cyArIDUxMjsKKyAgICBzLT5ob3N0X2ltYWdlX3Byb3BzLmNvcHlEc3RMYXlvdXRDb3VudCA9IDUx MjsKKworICAgIHZrLT5HZXRQaHlzaWNhbERldmljZVByb3BlcnRpZXMyKHMtPmh3Y3R4LT5waHlz X2RldiwgJnMtPnByb3BzKTsKKworICAgIC8qIENoZWNrIGlmIHdlIGhhZCBlbm91Z2ggbWVtb3J5 IGZvciBhbGwgbGF5b3V0cyAqLworICAgIGlmIChzLT5ob3N0X2ltYWdlX3Byb3BzLmNvcHlTcmNM YXlvdXRDb3VudCA9PSA1MTIgfHwKKyAgICAgICAgcy0+aG9zdF9pbWFnZV9wcm9wcy5jb3B5RHN0 TGF5b3V0Q291bnQgPT0gNTEyKSB7CisgICAgICAgIFZrSW1hZ2VMYXlvdXQgKm5ld19hcnJheTsK KyAgICAgICAgc2l6ZV90IG5ld19zaXplOworICAgICAgICBzLT5ob3N0X2ltYWdlX3Byb3BzLnBD b3B5U3JjTGF5b3V0cyA9CisgICAgICAgIHMtPmhvc3RfaW1hZ2VfcHJvcHMucENvcHlEc3RMYXlv dXRzID0gTlVMTDsKKyAgICAgICAgcy0+aG9zdF9pbWFnZV9wcm9wcy5jb3B5U3JjTGF5b3V0Q291 bnQgPQorICAgICAgICBzLT5ob3N0X2ltYWdlX3Byb3BzLmNvcHlEc3RMYXlvdXRDb3VudCA9IDA7 CisgICAgICAgIHZrLT5HZXRQaHlzaWNhbERldmljZVByb3BlcnRpZXMyKHMtPmh3Y3R4LT5waHlz X2RldiwgJnMtPnByb3BzKTsKKworICAgICAgICBuZXdfc2l6ZSA9IHMtPmhvc3RfaW1hZ2VfcHJv cHMuY29weVNyY0xheW91dENvdW50ICsKKyAgICAgICAgICAgICAgICAgICBzLT5ob3N0X2ltYWdl X3Byb3BzLmNvcHlEc3RMYXlvdXRDb3VudDsKKyAgICAgICAgbmV3X3NpemUgKj0gc2l6ZW9mKCpz LT5ob3N0X2ltYWdlX2NvcHlfbGF5b3V0cyk7CisgICAgICAgIG5ld19hcnJheSA9IGF2X3JlYWxs b2Mocy0+aG9zdF9pbWFnZV9jb3B5X2xheW91dHMsIG5ld19zaXplKTsKKyAgICAgICAgaWYgKCFu ZXdfYXJyYXkpCisgICAgICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOworCisgICAgICAg IHMtPmhvc3RfaW1hZ2VfY29weV9sYXlvdXRzID0gbmV3X2FycmF5OworICAgICAgICBzLT5ob3N0 X2ltYWdlX3Byb3BzLnBDb3B5U3JjTGF5b3V0cyA9IG5ld19hcnJheTsKKyAgICAgICAgcy0+aG9z dF9pbWFnZV9wcm9wcy5wQ29weURzdExheW91dHMgPSBuZXdfYXJyYXkgKyBzLT5ob3N0X2ltYWdl X3Byb3BzLmNvcHlTcmNMYXlvdXRDb3VudDsKKyAgICAgICAgdmstPkdldFBoeXNpY2FsRGV2aWNl UHJvcGVydGllczIocy0+aHdjdHgtPnBoeXNfZGV2LCAmcy0+cHJvcHMpOworICAgIH0KKworICAg IHZrLT5HZXRQaHlzaWNhbERldmljZU1lbW9yeVByb3BlcnRpZXMocy0+aHdjdHgtPnBoeXNfZGV2 LCAmcy0+bXByb3BzKTsKKyAgICB2ay0+R2V0UGh5c2ljYWxEZXZpY2VGZWF0dXJlczIocy0+aHdj dHgtPnBoeXNfZGV2LCAmcy0+ZmVhdHMpOworCisgICAgbG9hZF9lbmFibGVkX3FmcyhzKTsKKwor ICAgIGlmIChzLT5xZl9wcm9wcykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICB2ay0+R2V0UGh5 c2ljYWxEZXZpY2VRdWV1ZUZhbWlseVByb3BlcnRpZXMyKHMtPmh3Y3R4LT5waHlzX2RldiwgJnMt PnRvdF9uYl9xZnMsIE5VTEwpOworCisgICAgcy0+cWZfcHJvcHMgPSBhdl9jYWxsb2Mocy0+dG90 X25iX3Fmcywgc2l6ZW9mKCpzLT5xZl9wcm9wcykpOworICAgIGlmICghcy0+cWZfcHJvcHMpCisg ICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7CisKKyAgICBzLT5xdWVyeV9wcm9wcyA9IGF2 X2NhbGxvYyhzLT50b3RfbmJfcWZzLCBzaXplb2YoKnMtPnF1ZXJ5X3Byb3BzKSk7CisgICAgaWYg KCFzLT5xZl9wcm9wcykgeworICAgICAgICBhdl9mcmVlcCgmcy0+cWZfcHJvcHMpOworICAgICAg ICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOworICAgIH0KKworICAgIHMtPnZpZGVvX3Byb3BzID0g YXZfY2FsbG9jKHMtPnRvdF9uYl9xZnMsIHNpemVvZigqcy0+dmlkZW9fcHJvcHMpKTsKKyAgICBp ZiAoIXMtPnZpZGVvX3Byb3BzKSB7CisgICAgICAgIGF2X2ZyZWVwKCZzLT5xZl9wcm9wcyk7Cisg ICAgICAgIGF2X2ZyZWVwKCZzLT5xdWVyeV9wcm9wcyk7CisgICAgICAgIHJldHVybiBBVkVSUk9S KEVOT01FTSk7CisgICAgfQorCisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IHMtPnRvdF9u Yl9xZnM7IGkrKykgeworICAgICAgICBzLT5xZl9wcm9wc1tpXSA9IChWa1F1ZXVlRmFtaWx5UHJv cGVydGllczIpIHsKKyAgICAgICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX1FVRVVF X0ZBTUlMWV9QUk9QRVJUSUVTXzIsCisgICAgICAgIH07CisKKyAgICAgICAgRkZfVktfU1RSVUNU X0VYVChzLCAmcy0+cWZfcHJvcHNbaV0sICZzLT5xdWVyeV9wcm9wc1tpXSwgRkZfVktfRVhUX05P X0ZMQUcsCisgICAgICAgICAgICAgICAgICAgICAgICAgVktfU1RSVUNUVVJFX1RZUEVfUVVFVUVf RkFNSUxZX1FVRVJZX1JFU1VMVF9TVEFUVVNfUFJPUEVSVElFU19LSFIpOworICAgICAgICBGRl9W S19TVFJVQ1RfRVhUKHMsICZzLT5xZl9wcm9wc1tpXSwgJnMtPnZpZGVvX3Byb3BzW2ldLCBGRl9W S19FWFRfVklERU9fUVVFVUUsCisgICAgICAgICAgICAgICAgICAgICAgICAgVktfU1RSVUNUVVJF X1RZUEVfUVVFVUVfRkFNSUxZX1ZJREVPX1BST1BFUlRJRVNfS0hSKTsKKyAgICB9CisKKyAgICB2 ay0+R2V0UGh5c2ljYWxEZXZpY2VRdWV1ZUZhbWlseVByb3BlcnRpZXMyKHMtPmh3Y3R4LT5waHlz X2RldiwgJnMtPnRvdF9uYl9xZnMsIHMtPnFmX3Byb3BzKTsKKworICAgIGlmIChzLT5leHRlbnNp b25zICYgRkZfVktfRVhUX0NPT1BfTUFUUklYKSB7CisgICAgICAgIHZrLT5HZXRQaHlzaWNhbERl dmljZUNvb3BlcmF0aXZlTWF0cml4UHJvcGVydGllc0tIUihzLT5od2N0eC0+cGh5c19kZXYsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAmcy0+Y29vcF9tYXRfcHJvcHNfbmIsIE5VTEwpOworCisgICAgICAgIGlmIChzLT5jb29wX21h dF9wcm9wc19uYikgeworICAgICAgICAgICAgcy0+Y29vcF9tYXRfcHJvcHMgPSBhdl9tYWxsb2Nf YXJyYXkocy0+Y29vcF9tYXRfcHJvcHNfbmIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzaXplb2YoVmtDb29wZXJhdGl2ZU1hdHJpeFByb3BlcnRpZXNL SFIpKTsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcy0+Y29vcF9tYXRfcHJvcHNf bmI7IGkrKykgeworICAgICAgICAgICAgICAgIHMtPmNvb3BfbWF0X3Byb3BzW2ldID0gKFZrQ29v cGVyYXRpdmVNYXRyaXhQcm9wZXJ0aWVzS0hSKSB7CisgICAgICAgICAgICAgICAgICAgIC5zVHlw ZSA9IFZLX1NUUlVDVFVSRV9UWVBFX0NPT1BFUkFUSVZFX01BVFJJWF9QUk9QRVJUSUVTX0tIUiwK KyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2ay0+R2V0 UGh5c2ljYWxEZXZpY2VDb29wZXJhdGl2ZU1hdHJpeFByb3BlcnRpZXNLSFIocy0+aHdjdHgtPnBo eXNfZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICZzLT5jb29wX21hdF9wcm9wc19uYiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLT5jb29wX21h dF9wcm9wcyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworQVZWdWxr YW5EZXZpY2VRdWV1ZUZhbWlseSAqZmZfdmtfcWZfZmluZChGRlZ1bGthbkNvbnRleHQgKnMsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZrUXVldWVGbGFnQml0cyBk ZXZfZmFtaWx5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWa1Zp ZGVvQ29kZWNPcGVyYXRpb25GbGFnQml0c0tIUiB2aWRfb3BzKQoreworICAgIGZvciAoaW50IGkg PSAwOyBpIDwgcy0+aHdjdHgtPm5iX3FmOyBpKyspIHsKKyAgICAgICAgaWYgKChzLT5od2N0eC0+ cWZbaV0uZmxhZ3MgJiBkZXZfZmFtaWx5KSAmJgorICAgICAgICAgICAgKHMtPmh3Y3R4LT5xZltp XS52aWRlb19jYXBzICYgdmlkX29wcykgPT0gdmlkX29wcykgeworICAgICAgICAgICAgcmV0dXJu ICZzLT5od2N0eC0+cWZbaV07CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIE5VTEw7Cit9 CisKK3ZvaWQgZmZfdmtfZXhlY19wb29sX2ZyZWUoRkZWdWxrYW5Db250ZXh0ICpzLCBGRlZrRXhl Y1Bvb2wgKnBvb2wpCit7CisgICAgRkZWdWxrYW5GdW5jdGlvbnMgKnZrID0gJnMtPnZrZm47CisK KyAgICBmb3IgKGludCBpID0gMDsgaSA8IHBvb2wtPnBvb2xfc2l6ZTsgaSsrKSB7CisgICAgICAg IEZGVmtFeGVjQ29udGV4dCAqZSA9ICZwb29sLT5jb250ZXh0c1tpXTsKKworICAgICAgICBpZiAo ZS0+ZmVuY2UpIHsKKyAgICAgICAgICAgIGlmIChlLT5oYWRfc3VibWlzc2lvbikKKyAgICAgICAg ICAgICAgICB2ay0+V2FpdEZvckZlbmNlcyhzLT5od2N0eC0+YWN0X2RldiwgMSwgJmUtPmZlbmNl LCBWS19UUlVFLCBVSU5UNjRfTUFYKTsKKyAgICAgICAgICAgIHZrLT5EZXN0cm95RmVuY2Uocy0+ aHdjdHgtPmFjdF9kZXYsIGUtPmZlbmNlLCBzLT5od2N0eC0+YWxsb2MpOworICAgICAgICB9CisK KyAgICAgICAgZmZfdmtfZXhlY19kaXNjYXJkX2RlcHMocywgZSk7CisKKyAgICAgICAgYXZfZnJl ZShlLT5mcmFtZV9kZXBzKTsKKyAgICAgICAgYXZfZnJlZShlLT5zd19mcmFtZV9kZXBzKTsKKyAg ICAgICAgYXZfZnJlZShlLT5idWZfZGVwcyk7CisgICAgICAgIGF2X2ZyZWUoZS0+cXVldWVfZmFt aWx5X2RzdCk7CisgICAgICAgIGF2X2ZyZWUoZS0+bGF5b3V0X2RzdCk7CisgICAgICAgIGF2X2Zy ZWUoZS0+YWNjZXNzX2RzdCk7CisgICAgICAgIGF2X2ZyZWUoZS0+ZnJhbWVfdXBkYXRlKTsKKyAg ICAgICAgYXZfZnJlZShlLT5mcmFtZV9sb2NrZWQpOworICAgICAgICBhdl9mcmVlKGUtPnNlbV9z aWcpOworICAgICAgICBhdl9mcmVlKGUtPnNlbV9zaWdfdmFsX2RzdCk7CisgICAgICAgIGF2X2Zy ZWUoZS0+c2VtX3dhaXQpOworICAgIH0KKworICAgIC8qIEZyZWUgc2hhZGVyLXNwZWNpZmljIGRh dGEgKi8KKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHBvb2wtPm5iX3JlZ19zaGQ7IGkrKykgewor ICAgICAgICBGRlZ1bGthblNoYWRlckRhdGEgKnNkID0gJnBvb2wtPnJlZ19zaGRbaV07CisKKyAg ICAgICAgaWYgKHMtPmV4dGVuc2lvbnMgJiBGRl9WS19FWFRfREVTQ1JJUFRPUl9CVUZGRVIpIHsK KyAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgc2QtPm5iX2Rlc2NyaXB0b3Jfc2V0czsg aisrKSB7CisgICAgICAgICAgICAgICAgRkZWdWxrYW5EZXNjcmlwdG9yU2V0RGF0YSAqc2V0X2Rh dGEgPSAmc2QtPmRlc2Nfc2V0X2J1ZltqXTsKKyAgICAgICAgICAgICAgICBpZiAoc2V0X2RhdGEt PmJ1Zi5tZW0pCisgICAgICAgICAgICAgICAgICAgIGZmX3ZrX3VubWFwX2J1ZmZlcihzLCAmc2V0 X2RhdGEtPmJ1ZiwgMCk7CisgICAgICAgICAgICAgICAgZmZfdmtfZnJlZV9idWYocywgJnNldF9k YXRhLT5idWYpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKHNkLT5k ZXNjX3Bvb2wpCisgICAgICAgICAgICB2ay0+RGVzdHJveURlc2NyaXB0b3JQb29sKHMtPmh3Y3R4 LT5hY3RfZGV2LCBzZC0+ZGVzY19wb29sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzLT5od2N0eC0+YWxsb2MpOworCisgICAgICAgIGF2X2ZyZWVwKCZzZC0+ZGVzY19z ZXRfYnVmKTsKKyAgICAgICAgYXZfZnJlZXAoJnNkLT5kZXNjX2JpbmQpOworICAgICAgICBhdl9m cmVlcCgmc2QtPmRlc2Nfc2V0cyk7CisgICAgfQorCisgICAgYXZfZnJlZXAoJnBvb2wtPnJlZ19z aGQpOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwb29sLT5wb29sX3NpemU7IGkrKykgewor ICAgICAgICBpZiAocG9vbC0+Y21kX2J1Zl9wb29sc1tpXSkKKyAgICAgICAgICAgIHZrLT5GcmVl Q29tbWFuZEJ1ZmZlcnMocy0+aHdjdHgtPmFjdF9kZXYsIHBvb2wtPmNtZF9idWZfcG9vbHNbaV0s CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsICZwb29sLT5jbWRfYnVmc1tp XSk7CisKKyAgICAgICAgaWYgKHBvb2wtPmNtZF9idWZfcG9vbHNbaV0pCisgICAgICAgICAgICB2 ay0+RGVzdHJveUNvbW1hbmRQb29sKHMtPmh3Y3R4LT5hY3RfZGV2LCBwb29sLT5jbWRfYnVmX3Bv b2xzW2ldLCBzLT5od2N0eC0+YWxsb2MpOworICAgIH0KKyAgICBpZiAocG9vbC0+cXVlcnlfcG9v bCkKKyAgICAgICAgdmstPkRlc3Ryb3lRdWVyeVBvb2wocy0+aHdjdHgtPmFjdF9kZXYsIHBvb2wt PnF1ZXJ5X3Bvb2wsIHMtPmh3Y3R4LT5hbGxvYyk7CisKKyAgICBhdl9mcmVlKHBvb2wtPnF1ZXJ5 X2RhdGEpOworICAgIGF2X2ZyZWUocG9vbC0+Y21kX2J1Zl9wb29scyk7CisgICAgYXZfZnJlZShw b29sLT5jbWRfYnVmcyk7CisgICAgYXZfZnJlZShwb29sLT5jb250ZXh0cyk7Cit9CisKK2ludCBm Zl92a19leGVjX3Bvb2xfaW5pdChGRlZ1bGthbkNvbnRleHQgKnMsIEFWVnVsa2FuRGV2aWNlUXVl dWVGYW1pbHkgKnFmLAorICAgICAgICAgICAgICAgICAgICAgICAgIEZGVmtFeGVjUG9vbCAqcG9v bCwgaW50IG5iX2NvbnRleHRzLAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCBuYl9xdWVy aWVzLCBWa1F1ZXJ5VHlwZSBxdWVyeV90eXBlLCBpbnQgcXVlcnlfNjRiaXQsCisgICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqcXVlcnlfY3JlYXRlX3BuZXh0KQoreworICAgIGlu dCBlcnI7CisgICAgVmtSZXN1bHQgcmV0OworICAgIEZGVnVsa2FuRnVuY3Rpb25zICp2ayA9ICZz LT52a2ZuOworCisgICAgVmtDb21tYW5kUG9vbENyZWF0ZUluZm8gY3F1ZXVlX2NyZWF0ZTsKKyAg ICBWa0NvbW1hbmRCdWZmZXJBbGxvY2F0ZUluZm8gY2J1Zl9jcmVhdGU7CisKKyAgICBjb25zdCBW a1F1ZXJ5UG9vbFZpZGVvRW5jb2RlRmVlZGJhY2tDcmVhdGVJbmZvS0hSICplZiA9IE5VTEw7CisK KyAgICBhdG9taWNfaW5pdCgmcG9vbC0+aWR4LCAwKTsKKworICAgIGlmIChxdWVyeV90eXBlID09 IFZLX1FVRVJZX1RZUEVfVklERU9fRU5DT0RFX0ZFRURCQUNLX0tIUikgeworICAgICAgICBlZiA9 IGZmX3ZrX2ZpbmRfc3RydWN0KHF1ZXJ5X2NyZWF0ZV9wbmV4dCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBWS19TVFJVQ1RVUkVfVFlQRV9RVUVSWV9QT09MX1ZJREVPX0VOQ09ERV9G RUVEQkFDS19DUkVBVEVfSU5GT19LSFIpOworICAgICAgICBpZiAoIWVmKQorICAgICAgICAgICAg cmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKKyAgICB9CisKKyAgICAvKiBBbGxvY2F0ZSBzcGFjZSBm b3IgY29tbWFuZCBidWZmZXIgcG9vbHMgKi8KKyAgICBwb29sLT5jbWRfYnVmX3Bvb2xzID0gYXZf bWFsbG9jKG5iX2NvbnRleHRzKnNpemVvZigqcG9vbC0+Y21kX2J1Zl9wb29scykpOworICAgIGlm ICghcG9vbC0+Y21kX2J1Zl9wb29scykgeworICAgICAgICBlcnIgPSBBVkVSUk9SKEVOT01FTSk7 CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICAvKiBBbGxvY2F0ZSBzcGFjZSBmb3Ig Y29tbWFuZCBidWZmZXJzICovCisgICAgcG9vbC0+Y21kX2J1ZnMgPSBhdl9tYWxsb2MobmJfY29u dGV4dHMqc2l6ZW9mKCpwb29sLT5jbWRfYnVmcykpOworICAgIGlmICghcG9vbC0+Y21kX2J1ZnMp IHsKKyAgICAgICAgZXJyID0gQVZFUlJPUihFTk9NRU0pOworICAgICAgICBnb3RvIGZhaWw7Cisg ICAgfQorCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuYl9jb250ZXh0czsgaSsrKSB7CisgICAg ICAgIC8qIENyZWF0ZSBjb21tYW5kIHBvb2wgKi8KKyAgICAgICAgY3F1ZXVlX2NyZWF0ZSA9IChW a0NvbW1hbmRQb29sQ3JlYXRlSW5mbykgeworICAgICAgICAgICAgLnNUeXBlICAgICAgICAgICAg ICA9IFZLX1NUUlVDVFVSRV9UWVBFX0NPTU1BTkRfUE9PTF9DUkVBVEVfSU5GTywKKyAgICAgICAg ICAgIC5mbGFncyAgICAgICAgICAgICAgPSBWS19DT01NQU5EX1BPT0xfQ1JFQVRFX1RSQU5TSUVO VF9CSVQgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZLX0NPTU1BTkRfUE9P TF9DUkVBVEVfUkVTRVRfQ09NTUFORF9CVUZGRVJfQklULAorICAgICAgICAgICAgLnF1ZXVlRmFt aWx5SW5kZXggICA9IHFmLT5pZHgsCisgICAgICAgIH07CisKKyAgICAgICAgcmV0ID0gdmstPkNy ZWF0ZUNvbW1hbmRQb29sKHMtPmh3Y3R4LT5hY3RfZGV2LCAmY3F1ZXVlX2NyZWF0ZSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMtPmh3Y3R4LT5hbGxvYywgJnBvb2wtPmNt ZF9idWZfcG9vbHNbaV0pOworICAgICAgICBpZiAocmV0ICE9IFZLX1NVQ0NFU1MpIHsKKyAgICAg ICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJST1IsICJDb21tYW5kIHBvb2wgY3JlYXRpb24gZmFp bHVyZTogJXNcbiIsCisgICAgICAgICAgICAgICAgICAgZmZfdmtfcmV0MnN0cihyZXQpKTsKKyAg ICAgICAgICAgIGVyciA9IEFWRVJST1JfRVhURVJOQUw7CisgICAgICAgICAgICBnb3RvIGZhaWw7 CisgICAgICAgIH0KKworICAgICAgICAvKiBBbGxvY2F0ZSBjb21tYW5kIGJ1ZmZlciAqLworICAg ICAgICBjYnVmX2NyZWF0ZSA9IChWa0NvbW1hbmRCdWZmZXJBbGxvY2F0ZUluZm8pIHsKKyAgICAg ICAgICAgIC5zVHlwZSAgICAgICAgICAgICAgPSBWS19TVFJVQ1RVUkVfVFlQRV9DT01NQU5EX0JV RkZFUl9BTExPQ0FURV9JTkZPLAorICAgICAgICAgICAgLmxldmVsICAgICAgICAgICAgICA9IFZL X0NPTU1BTkRfQlVGRkVSX0xFVkVMX1BSSU1BUlksCisgICAgICAgICAgICAuY29tbWFuZFBvb2wg ICAgICAgID0gcG9vbC0+Y21kX2J1Zl9wb29sc1tpXSwKKyAgICAgICAgICAgIC5jb21tYW5kQnVm ZmVyQ291bnQgPSAxLAorICAgICAgICB9OworICAgICAgICByZXQgPSB2ay0+QWxsb2NhdGVDb21t YW5kQnVmZmVycyhzLT5od2N0eC0+YWN0X2RldiwgJmNidWZfY3JlYXRlLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcG9vbC0+Y21kX2J1ZnNbaV0pOworICAgICAg ICBpZiAocmV0ICE9IFZLX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgIGF2X2xvZyhzLCBBVl9MT0df RVJST1IsICJDb21tYW5kIGJ1ZmZlciBhbGxvYyBmYWlsdXJlOiAlc1xuIiwKKyAgICAgICAgICAg ICAgICAgICBmZl92a19yZXQyc3RyKHJldCkpOworICAgICAgICAgICAgZXJyID0gQVZFUlJPUl9F WFRFUk5BTDsKKyAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgfQorICAgIH0KKworICAg IC8qIFF1ZXJ5IHBvb2wgKi8KKyAgICBpZiAobmJfcXVlcmllcykgeworICAgICAgICBWa1F1ZXJ5 UG9vbENyZWF0ZUluZm8gcXVlcnlfcG9vbF9pbmZvID0geworICAgICAgICAgICAgLnNUeXBlID0g VktfU1RSVUNUVVJFX1RZUEVfUVVFUllfUE9PTF9DUkVBVEVfSU5GTywKKyAgICAgICAgICAgIC5w TmV4dCA9IHF1ZXJ5X2NyZWF0ZV9wbmV4dCwKKyAgICAgICAgICAgIC5xdWVyeVR5cGUgPSBxdWVy eV90eXBlLAorICAgICAgICAgICAgLnF1ZXJ5Q291bnQgPSBuYl9xdWVyaWVzKm5iX2NvbnRleHRz LAorICAgICAgICB9OworICAgICAgICByZXQgPSB2ay0+Q3JlYXRlUXVlcnlQb29sKHMtPmh3Y3R4 LT5hY3RfZGV2LCAmcXVlcnlfcG9vbF9pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHMtPmh3Y3R4LT5hbGxvYywgJnBvb2wtPnF1ZXJ5X3Bvb2wpOworICAgICAgICBpZiAo cmV0ICE9IFZLX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJST1Is ICJRdWVyeSBwb29sIGFsbG9jIGZhaWx1cmU6ICVzXG4iLAorICAgICAgICAgICAgICAgICAgIGZm X3ZrX3JldDJzdHIocmV0KSk7CisgICAgICAgICAgICBlcnIgPSBBVkVSUk9SX0VYVEVSTkFMOwor ICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICB9CisKKyAgICAgICAgcG9vbC0+bmJfcXVl cmllcyA9IG5iX3F1ZXJpZXM7CisgICAgICAgIHBvb2wtPnF1ZXJ5X3N0YXR1c19zdHJpZGUgPSAx ICsgMTsgLyogT25lIHJlc3VsdCwgb25lIHN0YXR1cyBieSBkZWZhdWx0ICovCisgICAgICAgIHBv b2wtPnF1ZXJ5X3Jlc3VsdHMgPSBuYl9xdWVyaWVzOworICAgICAgICBwb29sLT5xdWVyeV9zdGF0 dXNlcyA9IG5iX3F1ZXJpZXM7CisKKyAgICAgICAgLyogVmlkZW8gZW5jb2RlIHF1ZXJpZXMgcHJv ZHVjZSB0d28gcmVzdWx0cyBwZXIgcXVlcnkgKi8KKyAgICAgICAgaWYgKHF1ZXJ5X3R5cGUgPT0g VktfUVVFUllfVFlQRV9WSURFT19FTkNPREVfRkVFREJBQ0tfS0hSKSB7CisgICAgICAgICAgICBp bnQgbmJfcmVzdWx0cyA9IGF2X3BvcGNvdW50KGVmLT5lbmNvZGVGZWVkYmFja0ZsYWdzKTsKKyAg ICAgICAgICAgIHBvb2wtPnF1ZXJ5X3N0YXR1c19zdHJpZGUgPSBuYl9yZXN1bHRzICsgMTsKKyAg ICAgICAgICAgIHBvb2wtPnF1ZXJ5X3Jlc3VsdHMgKj0gbmJfcmVzdWx0czsKKyAgICAgICAgfSBl bHNlIGlmIChxdWVyeV90eXBlID09IFZLX1FVRVJZX1RZUEVfUkVTVUxUX1NUQVRVU19PTkxZX0tI UikgeworICAgICAgICAgICAgcG9vbC0+cXVlcnlfc3RhdHVzX3N0cmlkZSA9IDE7CisgICAgICAg ICAgICBwb29sLT5xdWVyeV9yZXN1bHRzID0gMDsKKyAgICAgICAgfQorCisgICAgICAgIHBvb2wt PnFkX3NpemUgPSAocG9vbC0+cXVlcnlfcmVzdWx0cyArIHBvb2wtPnF1ZXJ5X3N0YXR1c2VzKSoo cXVlcnlfNjRiaXQgPyA4IDogNCk7CisKKyAgICAgICAgLyogQWxsb2NhdGUgc3BhY2UgZm9yIHRo ZSBxdWVyeSBkYXRhICovCisgICAgICAgIHBvb2wtPnF1ZXJ5X2RhdGEgPSBhdl9jYWxsb2MobmJf Y29udGV4dHMsIHBvb2wtPnFkX3NpemUpOworICAgICAgICBpZiAoIXBvb2wtPnF1ZXJ5X2RhdGEp IHsKKyAgICAgICAgICAgIGVyciA9IEFWRVJST1IoRU5PTUVNKTsKKyAgICAgICAgICAgIGdvdG8g ZmFpbDsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIEFsbG9jYXRlIHNwYWNlIGZvciB0aGUg Y29udGV4dHMgKi8KKyAgICBwb29sLT5jb250ZXh0cyA9IGF2X2NhbGxvYyhuYl9jb250ZXh0cywg c2l6ZW9mKCpwb29sLT5jb250ZXh0cykpOworICAgIGlmICghcG9vbC0+Y29udGV4dHMpIHsKKyAg ICAgICAgZXJyID0gQVZFUlJPUihFTk9NRU0pOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQor CisgICAgcG9vbC0+cG9vbF9zaXplID0gbmJfY29udGV4dHM7CisKKyAgICAvKiBJbml0IGNvbnRl eHRzICovCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwb29sLT5wb29sX3NpemU7IGkrKykgewor ICAgICAgICBGRlZrRXhlY0NvbnRleHQgKmUgPSAmcG9vbC0+Y29udGV4dHNbaV07CisgICAgICAg IFZrRmVuY2VDcmVhdGVJbmZvIGZlbmNlX2NyZWF0ZSA9IHsKKyAgICAgICAgICAgIC5zVHlwZSA9 IFZLX1NUUlVDVFVSRV9UWVBFX0ZFTkNFX0NSRUFURV9JTkZPLAorICAgICAgICAgICAgLmZsYWdz ID0gVktfRkVOQ0VfQ1JFQVRFX1NJR05BTEVEX0JJVCwKKyAgICAgICAgfTsKKworICAgICAgICAv KiBGZW5jZSAqLworICAgICAgICByZXQgPSB2ay0+Q3JlYXRlRmVuY2Uocy0+aHdjdHgtPmFjdF9k ZXYsICZmZW5jZV9jcmVhdGUsIHMtPmh3Y3R4LT5hbGxvYywKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICZlLT5mZW5jZSk7CisgICAgICAgIGlmIChyZXQgIT0gVktfU1VDQ0VTUykgewor ICAgICAgICAgICAgYXZfbG9nKHMsIEFWX0xPR19FUlJPUiwgIkZhaWxlZCB0byBjcmVhdGUgc3Vi bWlzc2lvbiBmZW5jZTogJXNcbiIsCisgICAgICAgICAgICAgICAgICAgZmZfdmtfcmV0MnN0cihy ZXQpKTsKKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOworICAgICAgICB9CisK KyAgICAgICAgZS0+aWR4ID0gaTsKKyAgICAgICAgZS0+cGFyZW50ID0gcG9vbDsKKworICAgICAg ICAvKiBRdWVyeSBkYXRhICovCisgICAgICAgIGUtPnF1ZXJ5X2RhdGEgPSAoKHVpbnQ4X3QgKilw b29sLT5xdWVyeV9kYXRhKSArIHBvb2wtPnFkX3NpemUqaTsKKyAgICAgICAgZS0+cXVlcnlfaWR4 ID0gbmJfcXVlcmllcyppOworCisgICAgICAgIC8qIENvbW1hbmQgYnVmZmVyICovCisgICAgICAg IGUtPmJ1ZiA9IHBvb2wtPmNtZF9idWZzW2ldOworCisgICAgICAgIC8qIFF1ZXVlIGluZGV4IGRp c3RyaWJ1dGlvbiAqLworICAgICAgICBlLT5xaSA9IGkgJSBxZi0+bnVtOworICAgICAgICBlLT5x ZiA9IHFmLT5pZHg7CisgICAgICAgIHZrLT5HZXREZXZpY2VRdWV1ZShzLT5od2N0eC0+YWN0X2Rl diwgcWYtPmlkeCwgZS0+cWksICZlLT5xdWV1ZSk7CisgICAgfQorCisgICAgcmV0dXJuIDA7CisK K2ZhaWw6CisgICAgZmZfdmtfZXhlY19wb29sX2ZyZWUocywgcG9vbCk7CisgICAgcmV0dXJuIGVy cjsKK30KKworVmtSZXN1bHQgZmZfdmtfZXhlY19nZXRfcXVlcnkoRkZWdWxrYW5Db250ZXh0ICpz LCBGRlZrRXhlY0NvbnRleHQgKmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lk ICoqZGF0YSwgVmtRdWVyeVJlc3VsdEZsYWdCaXRzIGZsYWdzKQoreworICAgIEZGVnVsa2FuRnVu Y3Rpb25zICp2ayA9ICZzLT52a2ZuOworICAgIGNvbnN0IEZGVmtFeGVjUG9vbCAqcG9vbCA9IGUt PnBhcmVudDsKKyAgICBWa1F1ZXJ5UmVzdWx0RmxhZ3MgcWYgPSBmbGFncyAmIH4oVktfUVVFUllf UkVTVUxUXzY0X0JJVCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZL X1FVRVJZX1JFU1VMVF9XSVRIX1NUQVRVU19CSVRfS0hSKTsKKworICAgIGlmICghZS0+cXVlcnlf ZGF0YSkgeworICAgICAgICBhdl9sb2cocywgQVZfTE9HX0VSUk9SLCAiUmVxdWVzdGVkIGEgcXVl cnkgd2l0aCBhIE5VTEwgcXVlcnlfZGF0YSBwb2ludGVyIVxuIik7CisgICAgICAgIHJldHVybiBW S19JTkNPTVBMRVRFOworICAgIH0KKworICAgIHFmIHw9IHBvb2wtPnF1ZXJ5XzY0Yml0ID8KKyAg ICAgICAgICBWS19RVUVSWV9SRVNVTFRfNjRfQklUIDogMHgwOworICAgIHFmIHw9IHBvb2wtPnF1 ZXJ5X3N0YXR1c2VzID8KKyAgICAgICAgICBWS19RVUVSWV9SRVNVTFRfV0lUSF9TVEFUVVNfQklU X0tIUiA6IDB4MDsKKworICAgIGlmIChkYXRhKQorICAgICAgICAqZGF0YSA9IGUtPnF1ZXJ5X2Rh dGE7CisKKyAgICByZXR1cm4gdmstPkdldFF1ZXJ5UG9vbFJlc3VsdHMocy0+aHdjdHgtPmFjdF9k ZXYsIHBvb2wtPnF1ZXJ5X3Bvb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGUtPnF1ZXJ5X2lkeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9vbC0+ bmJfcXVlcmllcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9vbC0+cWRf c2l6ZSwgZS0+cXVlcnlfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cG9vbC0+cWRfc2l6ZSwgcWYpOworfQorCitGRlZrRXhlY0NvbnRleHQgKmZmX3ZrX2V4ZWNfZ2V0 KEZGVnVsa2FuQ29udGV4dCAqcywgRkZWa0V4ZWNQb29sICpwb29sKQoreworICAgIHJldHVybiAm cG9vbC0+Y29udGV4dHNbYXRvbWljX2ZldGNoX2FkZCgmcG9vbC0+aWR4LCAxKSAlIHBvb2wtPnBv b2xfc2l6ZV07Cit9CisKK3ZvaWQgZmZfdmtfZXhlY193YWl0KEZGVnVsa2FuQ29udGV4dCAqcywg RkZWa0V4ZWNDb250ZXh0ICplKQoreworICAgIEZGVnVsa2FuRnVuY3Rpb25zICp2ayA9ICZzLT52 a2ZuOworICAgIHZrLT5XYWl0Rm9yRmVuY2VzKHMtPmh3Y3R4LT5hY3RfZGV2LCAxLCAmZS0+ZmVu Y2UsIFZLX1RSVUUsIFVJTlQ2NF9NQVgpOworICAgIGZmX3ZrX2V4ZWNfZGlzY2FyZF9kZXBzKHMs IGUpOworfQorCitpbnQgZmZfdmtfZXhlY19zdGFydChGRlZ1bGthbkNvbnRleHQgKnMsIEZGVmtF eGVjQ29udGV4dCAqZSkKK3sKKyAgICBWa1Jlc3VsdCByZXQ7CisgICAgRkZWdWxrYW5GdW5jdGlv bnMgKnZrID0gJnMtPnZrZm47CisgICAgY29uc3QgRkZWa0V4ZWNQb29sICpwb29sID0gZS0+cGFy ZW50OworCisgICAgVmtDb21tYW5kQnVmZmVyQmVnaW5JbmZvIGNtZF9zdGFydCA9IHsKKyAgICAg ICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfQ09NTUFORF9CVUZGRVJfQkVHSU5fSU5GTywK KyAgICAgICAgLmZsYWdzID0gVktfQ09NTUFORF9CVUZGRVJfVVNBR0VfT05FX1RJTUVfU1VCTUlU X0JJVCwKKyAgICB9OworCisgICAgLyogV2FpdCBmb3IgdGhlIGZlbmNlIHRvIGJlIHNpZ25hbGxl ZCAqLworICAgIHZrLT5XYWl0Rm9yRmVuY2VzKHMtPmh3Y3R4LT5hY3RfZGV2LCAxLCAmZS0+ZmVu Y2UsIFZLX1RSVUUsIFVJTlQ2NF9NQVgpOworICAgIHZrLT5SZXNldEZlbmNlcyhzLT5od2N0eC0+ YWN0X2RldiwgMSwgJmUtPmZlbmNlKTsKKworICAgIC8qIERpc2NhcmQgcXVldWUgZGVwZW5kZW5j aWVzICovCisgICAgZmZfdmtfZXhlY19kaXNjYXJkX2RlcHMocywgZSk7CisKKyAgICByZXQgPSB2 ay0+QmVnaW5Db21tYW5kQnVmZmVyKGUtPmJ1ZiwgJmNtZF9zdGFydCk7CisgICAgaWYgKHJldCAh PSBWS19TVUNDRVNTKSB7CisgICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJST1IsICJGYWlsZWQg dG8gc3RhcnQgY29tbWFuZCByZWNvZGluZzogJXNcbiIsCisgICAgICAgICAgICAgICBmZl92a19y ZXQyc3RyKHJldCkpOworICAgICAgICByZXR1cm4gQVZFUlJPUl9FWFRFUk5BTDsKKyAgICB9CisK KyAgICBpZiAocG9vbC0+bmJfcXVlcmllcykKKyAgICAgICAgdmstPkNtZFJlc2V0UXVlcnlQb29s KGUtPmJ1ZiwgcG9vbC0+cXVlcnlfcG9vbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGUtPnF1ZXJ5X2lkeCwgcG9vbC0+bmJfcXVlcmllcyk7CisKKyAgICByZXR1cm4gMDsKK30KKwor dm9pZCBmZl92a19leGVjX2Rpc2NhcmRfZGVwcyhGRlZ1bGthbkNvbnRleHQgKnMsIEZGVmtFeGVj Q29udGV4dCAqZSkKK3sKKyAgICBmb3IgKGludCBqID0gMDsgaiA8IGUtPm5iX2J1Zl9kZXBzOyBq KyspCisgICAgICAgIGF2X2J1ZmZlcl91bnJlZigmZS0+YnVmX2RlcHNbal0pOworICAgIGUtPm5i X2J1Zl9kZXBzID0gMDsKKworICAgIGZvciAoaW50IGogPSAwOyBqIDwgZS0+bmJfc3dfZnJhbWVf ZGVwczsgaisrKQorICAgICAgICBhdl9mcmFtZV9mcmVlKCZlLT5zd19mcmFtZV9kZXBzW2pdKTsK KyAgICBlLT5uYl9zd19mcmFtZV9kZXBzID0gMDsKKworICAgIGZvciAoaW50IGogPSAwOyBqIDwg ZS0+bmJfZnJhbWVfZGVwczsgaisrKSB7CisgICAgICAgIEFWRnJhbWUgKmYgPSBlLT5mcmFtZV9k ZXBzW2pdOworICAgICAgICBpZiAoZS0+ZnJhbWVfbG9ja2VkW2pdKSB7CisgICAgICAgICAgICBB VkhXRnJhbWVzQ29udGV4dCAqaHdmYyA9IChBVkhXRnJhbWVzQ29udGV4dCAqKWYtPmh3X2ZyYW1l c19jdHgtPmRhdGE7CisgICAgICAgICAgICBBVlZ1bGthbkZyYW1lc0NvbnRleHQgKnZrZmMgPSBo d2ZjLT5od2N0eDsKKyAgICAgICAgICAgIEFWVmtGcmFtZSAqdmtmID0gKEFWVmtGcmFtZSAqKWYt PmRhdGFbMF07CisgICAgICAgICAgICB2a2ZjLT51bmxvY2tfZnJhbWUoaHdmYywgdmtmKTsKKyAg ICAgICAgICAgIGUtPmZyYW1lX2xvY2tlZFtqXSA9IDA7CisgICAgICAgIH0KKyAgICAgICAgZS0+ ZnJhbWVfdXBkYXRlW2pdID0gMDsKKyAgICB9CisgICAgZS0+bmJfZnJhbWVfZGVwcyA9IDA7CisK KyAgICBlLT5zZW1fd2FpdF9jbnQgPSAwOworICAgIGUtPnNlbV9zaWdfY250ID0gMDsKKyAgICBl LT5zZW1fc2lnX3ZhbF9kc3RfY250ID0gMDsKK30KKworaW50IGZmX3ZrX2V4ZWNfYWRkX2RlcF9i dWYoRkZWdWxrYW5Db250ZXh0ICpzLCBGRlZrRXhlY0NvbnRleHQgKmUsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICBBVkJ1ZmZlclJlZiAqKmRlcHMsIGludCBuYl9kZXBzLCBpbnQgcmVmKQor eworICAgIEFWQnVmZmVyUmVmICoqZHN0ID0gYXZfZmFzdF9yZWFsbG9jKGUtPmJ1Zl9kZXBzLCAm ZS0+YnVmX2RlcHNfYWxsb2Nfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAoZS0+bmJfYnVmX2RlcHMgKyBuYl9kZXBzKSAqIHNpemVvZigqZHN0KSk7CisgICAg aWYgKCFkc3QpIHsKKyAgICAgICAgZmZfdmtfZXhlY19kaXNjYXJkX2RlcHMocywgZSk7CisgICAg ICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7CisgICAgfQorCisgICAgZS0+YnVmX2RlcHMgPSBk c3Q7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG5iX2RlcHM7IGkrKykgeworICAgICAgICBp ZiAoIWRlcHNbaV0pCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBlLT5idWZfZGVw c1tlLT5uYl9idWZfZGVwc10gPSByZWYgPyBhdl9idWZmZXJfcmVmKGRlcHNbaV0pIDogZGVwc1tp XTsKKyAgICAgICAgaWYgKCFlLT5idWZfZGVwc1tlLT5uYl9idWZfZGVwc10pIHsKKyAgICAgICAg ICAgIGZmX3ZrX2V4ZWNfZGlzY2FyZF9kZXBzKHMsIGUpOworICAgICAgICAgICAgcmV0dXJuIEFW RVJST1IoRU5PTUVNKTsKKyAgICAgICAgfQorICAgICAgICBlLT5uYl9idWZfZGVwcysrOworICAg IH0KKworICAgIHJldHVybiAwOworfQorCitpbnQgZmZfdmtfZXhlY19hZGRfZGVwX3N3X2ZyYW1l KEZGVnVsa2FuQ29udGV4dCAqcywgRkZWa0V4ZWNDb250ZXh0ICplLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBBVkZyYW1lICpmKQoreworICAgIEFWRnJhbWUgKipkc3QgPSBhdl9m YXN0X3JlYWxsb2MoZS0+c3dfZnJhbWVfZGVwcywgJmUtPnN3X2ZyYW1lX2RlcHNfYWxsb2Nfc2l6 ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlLT5uYl9zd19mcmFtZV9k ZXBzICsgMSkgKiBzaXplb2YoKmRzdCkpOworICAgIGlmICghZHN0KSB7CisgICAgICAgIGZmX3Zr X2V4ZWNfZGlzY2FyZF9kZXBzKHMsIGUpOworICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0p OworICAgIH0KKworICAgIGUtPnN3X2ZyYW1lX2RlcHMgPSBkc3Q7CisKKyAgICBlLT5zd19mcmFt ZV9kZXBzW2UtPm5iX3N3X2ZyYW1lX2RlcHNdID0gYXZfZnJhbWVfY2xvbmUoZik7CisgICAgaWYg KCFlLT5zd19mcmFtZV9kZXBzW2UtPm5iX3N3X2ZyYW1lX2RlcHNdKSB7CisgICAgICAgIGZmX3Zr X2V4ZWNfZGlzY2FyZF9kZXBzKHMsIGUpOworICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0p OworICAgIH0KKworICAgIGUtPm5iX3N3X2ZyYW1lX2RlcHMrKzsKKworICAgIHJldHVybiAwOwor fQorCisjZGVmaW5lIEFSUl9SRUFMTE9DKHN0ciwgYXJyLCBhbGxvY19zLCBjbnQpICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBhcnIg PSBhdl9mYXN0X3JlYWxsb2Moc3RyLT5hcnIsIGFsbG9jX3MsIChjbnQgKyAxKSpzaXplb2YoKmFy cikpOyBcCisgICAgICAgIGlmICghYXJyKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGZmX3ZrX2V4ZWNfZGlzY2Fy ZF9kZXBzKHMsIGUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAg ICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgc3RyLT5hcnIgPSBhcnI7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0g d2hpbGUgKDApCisKK3R5cGVkZWYgc3RydWN0IFRlbXBTeW5jQ3R4IHsKKyAgICBpbnQgbmJfc2Vt OworICAgIFZrU2VtYXBob3JlIHNlbVtdOworfSBUZW1wU3luY0N0eDsKKworc3RhdGljIHZvaWQg ZGVzdHJveV90bXBfc2VtYXBob3Jlcyh2b2lkICpvcGFxdWUsIHVpbnQ4X3QgKmRhdGEpCit7Cisg ICAgRkZWdWxrYW5Db250ZXh0ICpzID0gb3BhcXVlOworICAgIEZGVnVsa2FuRnVuY3Rpb25zICp2 ayA9ICZzLT52a2ZuOworICAgIFRlbXBTeW5jQ3R4ICp0cyA9IChUZW1wU3luY0N0eCAqKWRhdGE7 CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHRzLT5uYl9zZW07IGkrKykKKyAgICAgICAgdmst PkRlc3Ryb3lTZW1hcGhvcmUocy0+aHdjdHgtPmFjdF9kZXYsIHRzLT5zZW1baV0sIHMtPmh3Y3R4 LT5hbGxvYyk7CisKKyAgICBhdl9mcmVlKHRzKTsKK30KKworaW50IGZmX3ZrX2V4ZWNfYWRkX2Rl cF93YWl0X3NlbShGRlZ1bGthbkNvbnRleHQgKnMsIEZGVmtFeGVjQ29udGV4dCAqZSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgVmtTZW1hcGhvcmUgc2VtLCB1aW50NjRfdCB2YWws CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZrUGlwZWxpbmVTdGFnZUZsYWdCaXRz MiBzdGFnZSkKK3sKKyAgICBWa1NlbWFwaG9yZVN1Ym1pdEluZm8gKnNlbV93YWl0OworICAgIEFS Ul9SRUFMTE9DKGUsIHNlbV93YWl0LCAmZS0+c2VtX3dhaXRfYWxsb2MsIGUtPnNlbV93YWl0X2Nu dCk7CisKKyAgICBlLT5zZW1fd2FpdFtlLT5zZW1fd2FpdF9jbnQrK10gPSAoVmtTZW1hcGhvcmVT dWJtaXRJbmZvKSB7CisgICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX1NFTUFQSE9S RV9TVUJNSVRfSU5GTywKKyAgICAgICAgLnNlbWFwaG9yZSA9IHNlbSwKKyAgICAgICAgLnZhbHVl ID0gdmFsLAorICAgICAgICAuc3RhZ2VNYXNrID0gc3RhZ2UsCisgICAgfTsKKworICAgIHJldHVy biAwOworfQorCitpbnQgZmZfdmtfZXhlY19hZGRfZGVwX2Jvb2xfc2VtKEZGVnVsa2FuQ29udGV4 dCAqcywgRkZWa0V4ZWNDb250ZXh0ICplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBWa1NlbWFwaG9yZSAqc2VtLCBpbnQgbmIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFZrUGlwZWxpbmVTdGFnZUZsYWdCaXRzMiBzdGFnZSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaW50IHdhaXQpCit7CisgICAgaW50IGVycjsKKyAgICBzaXplX3QgYnVmX3Np emU7CisgICAgQVZCdWZmZXJSZWYgKmJ1ZjsKKyAgICBUZW1wU3luY0N0eCAqdHM7CisgICAgRkZW dWxrYW5GdW5jdGlvbnMgKnZrID0gJnMtPnZrZm47CisKKyAgICAvKiBEbyBub3QgdHJhbnNmZXIg b3duZXJzaGlwIGlmIHdlJ3JlIHNpZ25hbGxpbmcgYSBiaW5hcnkgc2VtYXBob3JlLAorICAgICAq IHNpbmNlIHdlJ3JlIHByb2JhYmx5IGV4cG9ydGluZyBpdC4gKi8KKyAgICBpZiAoIXdhaXQpIHsK KyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuYjsgaSsrKSB7CisgICAgICAgICAgICBWa1Nl bWFwaG9yZVN1Ym1pdEluZm8gKnNlbV9zaWc7CisgICAgICAgICAgICBBUlJfUkVBTExPQyhlLCBz ZW1fc2lnLCAmZS0+c2VtX3NpZ19hbGxvYywgZS0+c2VtX3NpZ19jbnQpOworCisgICAgICAgICAg ICBlLT5zZW1fc2lnW2UtPnNlbV9zaWdfY250KytdID0gKFZrU2VtYXBob3JlU3VibWl0SW5mbykg eworICAgICAgICAgICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX1NFTUFQSE9SRV9T VUJNSVRfSU5GTywKKyAgICAgICAgICAgICAgICAuc2VtYXBob3JlID0gc2VtW2ldLAorICAgICAg ICAgICAgICAgIC5zdGFnZU1hc2sgPSBzdGFnZSwKKyAgICAgICAgICAgIH07CisgICAgICAgIH0K KworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBidWZfc2l6ZSA9IHNpemVvZigqdHMp ICsgc2l6ZW9mKFZrU2VtYXBob3JlKSpuYjsKKyAgICB0cyA9IGF2X21hbGxvY3ooYnVmX3NpemUp OworICAgIGlmICghdHMpIHsKKyAgICAgICAgZXJyID0gQVZFUlJPUihFTk9NRU0pOworICAgICAg ICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgbWVtY3B5KHRzLT5zZW0sIHNlbSwgbmIqc2l6ZW9m KCpzZW0pKTsKKyAgICB0cy0+bmJfc2VtID0gbmI7CisKKyAgICBidWYgPSBhdl9idWZmZXJfY3Jl YXRlKCh1aW50OF90ICopdHMsIGJ1Zl9zaXplLCBkZXN0cm95X3RtcF9zZW1hcGhvcmVzLCBzLCAw KTsKKyAgICBpZiAoIWJ1ZikgeworICAgICAgICBhdl9mcmVlKHRzKTsKKyAgICAgICAgZXJyID0g QVZFUlJPUihFTk9NRU0pOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgZXJyID0g ZmZfdmtfZXhlY19hZGRfZGVwX2J1ZihzLCBlLCAmYnVmLCAxLCAwKTsKKyAgICBpZiAoZXJyIDwg MCkgeworICAgICAgICBhdl9idWZmZXJfdW5yZWYoJmJ1Zik7CisgICAgICAgIHJldHVybiBlcnI7 CisgICAgfQorCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuYjsgaSsrKSB7CisgICAgICAgIGVy ciA9IGZmX3ZrX2V4ZWNfYWRkX2RlcF93YWl0X3NlbShzLCBlLCBzZW1baV0sIDAsIHN0YWdlKTsK KyAgICAgICAgaWYgKGVyciA8IDApCisgICAgICAgICAgICByZXR1cm4gZXJyOworICAgIH0KKwor ICAgIHJldHVybiAwOworCitmYWlsOgorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmI7IGkrKykK KyAgICAgICAgdmstPkRlc3Ryb3lTZW1hcGhvcmUocy0+aHdjdHgtPmFjdF9kZXYsIHNlbVtpXSwg cy0+aHdjdHgtPmFsbG9jKTsKKworICAgIHJldHVybiBlcnI7Cit9CisKK2ludCBmZl92a19leGVj X2FkZF9kZXBfZnJhbWUoRkZWdWxrYW5Db250ZXh0ICpzLCBGRlZrRXhlY0NvbnRleHQgKmUsIEFW RnJhbWUgKmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZrUGlwZWxpbmVTdGFnZUZs YWdCaXRzMiB3YWl0X3N0YWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWa1BpcGVs aW5lU3RhZ2VGbGFnQml0czIgc2lnbmFsX3N0YWdlKQoreworICAgIHVpbnQ4X3QgKmZyYW1lX2xv Y2tlZDsKKyAgICB1aW50OF90ICpmcmFtZV91cGRhdGU7CisgICAgQVZGcmFtZSAqKmZyYW1lX2Rl cHM7CisgICAgQVZCdWZmZXJSZWYgKipidWZfZGVwczsKKyAgICBWa0ltYWdlTGF5b3V0ICpsYXlv dXRfZHN0OworICAgIHVpbnQzMl90ICpxdWV1ZV9mYW1pbHlfZHN0OworICAgIFZrQWNjZXNzRmxh Z0JpdHMgKmFjY2Vzc19kc3Q7CisKKyAgICBBVkhXRnJhbWVzQ29udGV4dCAqaHdmYyA9IChBVkhX RnJhbWVzQ29udGV4dCAqKWYtPmh3X2ZyYW1lc19jdHgtPmRhdGE7CisgICAgQVZWdWxrYW5GcmFt ZXNDb250ZXh0ICp2a2ZjID0gaHdmYy0+aHdjdHg7CisgICAgQVZWa0ZyYW1lICp2a2YgPSAoQVZW a0ZyYW1lICopZi0+ZGF0YVswXTsKKyAgICBpbnQgbmJfaW1hZ2VzID0gZmZfdmtfY291bnRfaW1h Z2VzKHZrZik7CisKKyAgICAvKiBEb24ndCBhZGQgZHVwbGljYXRlcyAqLworICAgIGZvciAoaW50 IGkgPSAwOyBpIDwgZS0+bmJfZnJhbWVfZGVwczsgaSsrKQorICAgICAgICBpZiAoZS0+ZnJhbWVf ZGVwc1tpXS0+ZGF0YVswXSA9PSBmLT5kYXRhWzBdKQorICAgICAgICAgICAgcmV0dXJuIDE7CisK KyAgICBBUlJfUkVBTExPQyhlLCBsYXlvdXRfZHN0LCAgICAgICAmZS0+bGF5b3V0X2RzdF9hbGxv YywgICAgICAgZS0+bmJfZnJhbWVfZGVwcyk7CisgICAgQVJSX1JFQUxMT0MoZSwgcXVldWVfZmFt aWx5X2RzdCwgJmUtPnF1ZXVlX2ZhbWlseV9kc3RfYWxsb2MsIGUtPm5iX2ZyYW1lX2RlcHMpOwor ICAgIEFSUl9SRUFMTE9DKGUsIGFjY2Vzc19kc3QsICAgICAgICZlLT5hY2Nlc3NfZHN0X2FsbG9j LCAgICAgICBlLT5uYl9mcmFtZV9kZXBzKTsKKworICAgIEFSUl9SRUFMTE9DKGUsIGZyYW1lX2xv Y2tlZCwgJmUtPmZyYW1lX2xvY2tlZF9hbGxvY19zaXplLCBlLT5uYl9mcmFtZV9kZXBzKTsKKyAg ICBBUlJfUkVBTExPQyhlLCBmcmFtZV91cGRhdGUsICZlLT5mcmFtZV91cGRhdGVfYWxsb2Nfc2l6 ZSwgZS0+bmJfZnJhbWVfZGVwcyk7CisgICAgQVJSX1JFQUxMT0MoZSwgZnJhbWVfZGVwcywgICAm ZS0+ZnJhbWVfZGVwc19hbGxvY19zaXplLCAgIGUtPm5iX2ZyYW1lX2RlcHMpOworCisgICAgLyog cHJlcGFyZV9mcmFtZSBpbiBod2NvbnRleHRfdnVsa2FuLmMgdXNlcyB0aGUgcmVndWxhciBmcmFt ZSBtYW5hZ2VtZW50CisgICAgICogY29kZSBidXQgaGFzIG5vIGZyYW1lIHlldCwgYW5kIGl0IGRv ZXNuJ3QgbmVlZCB0byBhY3R1YWxseSBzdG9yZSBhIHJlZgorICAgICAqIHRvIHRoZSBmcmFtZS4g Ki8KKyAgICBpZiAoZi0+YnVmWzBdKSB7CisgICAgICAgIEFSUl9SRUFMTE9DKGUsIGJ1Zl9kZXBz LCAmZS0+YnVmX2RlcHNfYWxsb2Nfc2l6ZSwgZS0+bmJfYnVmX2RlcHMpOworICAgICAgICBlLT5i dWZfZGVwc1tlLT5uYl9idWZfZGVwc10gPSBhdl9idWZmZXJfcmVmKGYtPmJ1ZlswXSk7CisgICAg ICAgIGlmICghZS0+YnVmX2RlcHNbZS0+bmJfYnVmX2RlcHNdKSB7CisgICAgICAgICAgICBmZl92 a19leGVjX2Rpc2NhcmRfZGVwcyhzLCBlKTsKKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVO T01FTSk7CisgICAgICAgIH0KKyAgICAgICAgZS0+bmJfYnVmX2RlcHMrKzsKKyAgICB9CisKKyAg ICBlLT5mcmFtZV9kZXBzW2UtPm5iX2ZyYW1lX2RlcHNdID0gZjsKKworICAgIHZrZmMtPmxvY2tf ZnJhbWUoaHdmYywgdmtmKTsKKyAgICBlLT5mcmFtZV9sb2NrZWRbZS0+bmJfZnJhbWVfZGVwc10g PSAxOworICAgIGUtPmZyYW1lX3VwZGF0ZVtlLT5uYl9mcmFtZV9kZXBzXSA9IDA7CisgICAgZS0+ bmJfZnJhbWVfZGVwcysrOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuYl9pbWFnZXM7IGkr KykgeworICAgICAgICBWa1NlbWFwaG9yZVN1Ym1pdEluZm8gKnNlbV93YWl0OworICAgICAgICBW a1NlbWFwaG9yZVN1Ym1pdEluZm8gKnNlbV9zaWc7CisgICAgICAgIHVpbnQ2NF90ICoqc2VtX3Np Z192YWxfZHN0OworCisgICAgICAgIEFSUl9SRUFMTE9DKGUsIHNlbV93YWl0LCAmZS0+c2VtX3dh aXRfYWxsb2MsIGUtPnNlbV93YWl0X2NudCk7CisgICAgICAgIEFSUl9SRUFMTE9DKGUsIHNlbV9z aWcsICZlLT5zZW1fc2lnX2FsbG9jLCBlLT5zZW1fc2lnX2NudCk7CisgICAgICAgIEFSUl9SRUFM TE9DKGUsIHNlbV9zaWdfdmFsX2RzdCwgJmUtPnNlbV9zaWdfdmFsX2RzdF9hbGxvYywgZS0+c2Vt X3NpZ192YWxfZHN0X2NudCk7CisKKyAgICAgICAgZS0+c2VtX3dhaXRbZS0+c2VtX3dhaXRfY250 KytdID0gKFZrU2VtYXBob3JlU3VibWl0SW5mbykgeworICAgICAgICAgICAgLnNUeXBlID0gVktf U1RSVUNUVVJFX1RZUEVfU0VNQVBIT1JFX1NVQk1JVF9JTkZPLAorICAgICAgICAgICAgLnNlbWFw aG9yZSA9IHZrZi0+c2VtW2ldLAorICAgICAgICAgICAgLnZhbHVlID0gdmtmLT5zZW1fdmFsdWVb aV0sCisgICAgICAgICAgICAuc3RhZ2VNYXNrID0gd2FpdF9zdGFnZSwKKyAgICAgICAgfTsKKwor ICAgICAgICBlLT5zZW1fc2lnW2UtPnNlbV9zaWdfY250KytdID0gKFZrU2VtYXBob3JlU3VibWl0 SW5mbykgeworICAgICAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfU0VNQVBIT1JF X1NVQk1JVF9JTkZPLAorICAgICAgICAgICAgLnNlbWFwaG9yZSA9IHZrZi0+c2VtW2ldLAorICAg ICAgICAgICAgLnZhbHVlID0gdmtmLT5zZW1fdmFsdWVbaV0gKyAxLAorICAgICAgICAgICAgLnN0 YWdlTWFzayA9IHNpZ25hbF9zdGFnZSwKKyAgICAgICAgfTsKKworICAgICAgICBlLT5zZW1fc2ln X3ZhbF9kc3RbZS0+c2VtX3NpZ192YWxfZHN0X2NudF0gPSAmdmtmLT5zZW1fdmFsdWVbaV07Cisg ICAgICAgIGUtPnNlbV9zaWdfdmFsX2RzdF9jbnQrKzsKKyAgICB9CisKKyAgICByZXR1cm4gMDsK K30KKwordm9pZCBmZl92a19leGVjX3VwZGF0ZV9mcmFtZShGRlZ1bGthbkNvbnRleHQgKnMsIEZG VmtFeGVjQ29udGV4dCAqZSwgQVZGcmFtZSAqZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgVmtJbWFnZU1lbW9yeUJhcnJpZXIyICpiYXIsIHVpbnQzMl90ICpuYl9pbWdfYmFyKQorewor ICAgIGludCBpOworICAgIGZvciAoaSA9IDA7IGkgPCBlLT5uYl9mcmFtZV9kZXBzOyBpKyspCisg ICAgICAgIGlmIChlLT5mcmFtZV9kZXBzW2ldLT5kYXRhWzBdID09IGYtPmRhdGFbMF0pCisgICAg ICAgICAgICBicmVhazsKKyAgICBhdl9hc3NlcnQwKGkgPCBlLT5uYl9mcmFtZV9kZXBzKTsKKwor ICAgIC8qIERvbid0IHVwZGF0ZSBkdXBsaWNhdGVzICovCisgICAgaWYgKG5iX2ltZ19iYXIgJiYg IWUtPmZyYW1lX3VwZGF0ZVtpXSkKKyAgICAgICAgKCpuYl9pbWdfYmFyKSsrOworCisgICAgZS0+ cXVldWVfZmFtaWx5X2RzdFtpXSA9IGJhci0+ZHN0UXVldWVGYW1pbHlJbmRleDsKKyAgICBlLT5h Y2Nlc3NfZHN0W2ldID0gYmFyLT5kc3RBY2Nlc3NNYXNrOworICAgIGUtPmxheW91dF9kc3RbaV0g PSBiYXItPm5ld0xheW91dDsKKyAgICBlLT5mcmFtZV91cGRhdGVbaV0gPSAxOworfQorCitpbnQg ZmZfdmtfZXhlY19taXJyb3Jfc2VtX3ZhbHVlKEZGVnVsa2FuQ29udGV4dCAqcywgRkZWa0V4ZWND b250ZXh0ICplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWa1NlbWFwaG9yZSAq ZHN0LCB1aW50NjRfdCAqZHN0X3ZhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg QVZGcmFtZSAqZikKK3sKKyAgICB1aW50NjRfdCAqKnNlbV9zaWdfdmFsX2RzdDsKKyAgICBBVlZr RnJhbWUgKnZrZiA9IChBVlZrRnJhbWUgKilmLT5kYXRhWzBdOworCisgICAgLyogUmVqZWN0IHVu a25vd24gZnJhbWVzICovCisgICAgaW50IGk7CisgICAgZm9yIChpID0gMDsgaSA8IGUtPm5iX2Zy YW1lX2RlcHM7IGkrKykKKyAgICAgICAgaWYgKGUtPmZyYW1lX2RlcHNbaV0tPmRhdGFbMF0gPT0g Zi0+ZGF0YVswXSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIGlmIChpID09IGUtPm5iX2ZyYW1l X2RlcHMpCisgICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7CisKKyAgICBBUlJfUkVBTExP QyhlLCBzZW1fc2lnX3ZhbF9kc3QsICZlLT5zZW1fc2lnX3ZhbF9kc3RfYWxsb2MsIGUtPnNlbV9z aWdfdmFsX2RzdF9jbnQpOworCisgICAgKmRzdCAgICAgPSB2a2YtPnNlbVswXTsKKyAgICAqZHN0 X3ZhbCA9IHZrZi0+c2VtX3ZhbHVlWzBdOworCisgICAgZS0+c2VtX3NpZ192YWxfZHN0W2UtPnNl bV9zaWdfdmFsX2RzdF9jbnRdID0gZHN0X3ZhbDsKKyAgICBlLT5zZW1fc2lnX3ZhbF9kc3RfY250 Kys7CisKKyAgICByZXR1cm4gMDsKK30KKworaW50IGZmX3ZrX2V4ZWNfc3VibWl0KEZGVnVsa2Fu Q29udGV4dCAqcywgRkZWa0V4ZWNDb250ZXh0ICplKQoreworICAgIFZrUmVzdWx0IHJldDsKKyAg ICBGRlZ1bGthbkZ1bmN0aW9ucyAqdmsgPSAmcy0+dmtmbjsKKyAgICBWa0NvbW1hbmRCdWZmZXJT dWJtaXRJbmZvIGNtZF9idWZfaW5mbyA9IChWa0NvbW1hbmRCdWZmZXJTdWJtaXRJbmZvKSB7Cisg ICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX0NPTU1BTkRfQlVGRkVSX1NVQk1JVF9J TkZPLAorICAgICAgICAuY29tbWFuZEJ1ZmZlciA9IGUtPmJ1ZiwKKyAgICB9OworICAgIFZrU3Vi bWl0SW5mbzIgc3VibWl0X2luZm8gPSAoVmtTdWJtaXRJbmZvMikgeworICAgICAgICAuc1R5cGUg PSBWS19TVFJVQ1RVUkVfVFlQRV9TVUJNSVRfSU5GT18yLAorICAgICAgICAucENvbW1hbmRCdWZm ZXJJbmZvcyA9ICZjbWRfYnVmX2luZm8sCisgICAgICAgIC5jb21tYW5kQnVmZmVySW5mb0NvdW50 ID0gMSwKKyAgICAgICAgLnBXYWl0U2VtYXBob3JlSW5mb3MgPSBlLT5zZW1fd2FpdCwKKyAgICAg ICAgLndhaXRTZW1hcGhvcmVJbmZvQ291bnQgPSBlLT5zZW1fd2FpdF9jbnQsCisgICAgICAgIC5w U2lnbmFsU2VtYXBob3JlSW5mb3MgPSBlLT5zZW1fc2lnLAorICAgICAgICAuc2lnbmFsU2VtYXBo b3JlSW5mb0NvdW50ID0gZS0+c2VtX3NpZ19jbnQsCisgICAgfTsKKworICAgIHJldCA9IHZrLT5F bmRDb21tYW5kQnVmZmVyKGUtPmJ1Zik7CisgICAgaWYgKHJldCAhPSBWS19TVUNDRVNTKSB7Cisg ICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJST1IsICJVbmFibGUgdG8gZmluaXNoIGNvbW1hbmQg YnVmZmVyOiAlc1xuIiwKKyAgICAgICAgICAgICAgIGZmX3ZrX3JldDJzdHIocmV0KSk7CisgICAg ICAgIGZmX3ZrX2V4ZWNfZGlzY2FyZF9kZXBzKHMsIGUpOworICAgICAgICByZXR1cm4gQVZFUlJP Ul9FWFRFUk5BTDsKKyAgICB9CisKKyAgICBzLT5od2N0eC0+bG9ja19xdWV1ZShzLT5kZXZpY2Us IGUtPnFmLCBlLT5xaSk7CisgICAgcmV0ID0gdmstPlF1ZXVlU3VibWl0MihlLT5xdWV1ZSwgMSwg JnN1Ym1pdF9pbmZvLCBlLT5mZW5jZSk7CisgICAgcy0+aHdjdHgtPnVubG9ja19xdWV1ZShzLT5k ZXZpY2UsIGUtPnFmLCBlLT5xaSk7CisKKyAgICBpZiAocmV0ICE9IFZLX1NVQ0NFU1MpIHsKKyAg ICAgICAgYXZfbG9nKHMsIEFWX0xPR19FUlJPUiwgIlVuYWJsZSB0byBzdWJtaXQgY29tbWFuZCBi dWZmZXI6ICVzXG4iLAorICAgICAgICAgICAgICAgZmZfdmtfcmV0MnN0cihyZXQpKTsKKyAgICAg ICAgZmZfdmtfZXhlY19kaXNjYXJkX2RlcHMocywgZSk7CisgICAgICAgIHJldHVybiBBVkVSUk9S X0VYVEVSTkFMOworICAgIH0KKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZS0+c2VtX3NpZ192 YWxfZHN0X2NudDsgaSsrKQorICAgICAgICAqZS0+c2VtX3NpZ192YWxfZHN0W2ldICs9IDE7CisK KyAgICAvKiBVbmxvY2sgYWxsIGZyYW1lcyAqLworICAgIGZvciAoaW50IGogPSAwOyBqIDwgZS0+ bmJfZnJhbWVfZGVwczsgaisrKSB7CisgICAgICAgIGlmIChlLT5mcmFtZV9sb2NrZWRbal0pIHsK KyAgICAgICAgICAgIEFWRnJhbWUgKmYgPSBlLT5mcmFtZV9kZXBzW2pdOworICAgICAgICAgICAg QVZIV0ZyYW1lc0NvbnRleHQgKmh3ZmMgPSAoQVZIV0ZyYW1lc0NvbnRleHQgKilmLT5od19mcmFt ZXNfY3R4LT5kYXRhOworICAgICAgICAgICAgQVZWdWxrYW5GcmFtZXNDb250ZXh0ICp2a2ZjID0g aHdmYy0+aHdjdHg7CisgICAgICAgICAgICBBVlZrRnJhbWUgKnZrZiA9IChBVlZrRnJhbWUgKilm LT5kYXRhWzBdOworCisgICAgICAgICAgICBpZiAoZS0+ZnJhbWVfdXBkYXRlW2pdKSB7CisgICAg ICAgICAgICAgICAgaW50IG5iX2ltYWdlcyA9IGZmX3ZrX2NvdW50X2ltYWdlcyh2a2YpOworICAg ICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmJfaW1hZ2VzOyBpKyspIHsKKyAgICAg ICAgICAgICAgICAgICAgdmtmLT5sYXlvdXRbaV0gPSBlLT5sYXlvdXRfZHN0W2pdOworICAgICAg ICAgICAgICAgICAgICB2a2YtPmFjY2Vzc1tpXSA9IGUtPmFjY2Vzc19kc3Rbal07CisgICAgICAg ICAgICAgICAgICAgIHZrZi0+cXVldWVfZmFtaWx5W2ldID0gZS0+cXVldWVfZmFtaWx5X2RzdFtq XTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2a2ZjLT51 bmxvY2tfZnJhbWUoaHdmYywgdmtmKTsKKyAgICAgICAgICAgIGUtPmZyYW1lX2xvY2tlZFtqXSA9 IDA7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBlLT5oYWRfc3VibWlzc2lvbiA9IDE7CisKKyAg ICByZXR1cm4gMDsKK30KKworaW50IGZmX3ZrX2FsbG9jX21lbShGRlZ1bGthbkNvbnRleHQgKnMs IFZrTWVtb3J5UmVxdWlyZW1lbnRzICpyZXEsCisgICAgICAgICAgICAgICAgICAgIFZrTWVtb3J5 UHJvcGVydHlGbGFnQml0cyByZXFfZmxhZ3MsIHZvaWQgKmFsbG9jX2V4dGVuc2lvbiwKKyAgICAg ICAgICAgICAgICAgICAgVmtNZW1vcnlQcm9wZXJ0eUZsYWdCaXRzICptZW1fZmxhZ3MsIFZrRGV2 aWNlTWVtb3J5ICptZW0pCit7CisgICAgVmtSZXN1bHQgcmV0OworICAgIGludCBpbmRleCA9IC0x OworICAgIEZGVnVsa2FuRnVuY3Rpb25zICp2ayA9ICZzLT52a2ZuOworCisgICAgVmtNZW1vcnlB bGxvY2F0ZUluZm8gYWxsb2NfaW5mbyA9IHsKKyAgICAgICAgLnNUeXBlICAgICAgICAgICA9IFZL X1NUUlVDVFVSRV9UWVBFX01FTU9SWV9BTExPQ0FURV9JTkZPLAorICAgICAgICAucE5leHQgICAg ICAgICAgID0gYWxsb2NfZXh0ZW5zaW9uLAorICAgIH07CisKKyAgICBhbGxvY19pbmZvLmFsbG9j YXRpb25TaXplID0gcmVxLT5zaXplOworCisgICAgLyogVGhlIHZ1bGthbiBzcGVjIHJlcXVpcmVz IG1lbW9yeSB0eXBlcyB0byBiZSBzb3J0ZWQgaW4gdGhlICJvcHRpbWFsIgorICAgICAqIG9yZGVy LCBzbyB0aGUgZmlyc3QgbWF0Y2hpbmcgdHlwZSB3ZSBmaW5kIHdpbGwgYmUgdGhlIGJlc3QvZmFz dGVzdCBvbmUgKi8KKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHMtPm1wcm9wcy5tZW1vcnlUeXBl Q291bnQ7IGkrKykgeworICAgICAgICAvKiBUaGUgbWVtb3J5IHR5cGUgbXVzdCBiZSBzdXBwb3J0 ZWQgYnkgdGhlIHJlcXVpcmVtZW50cyAoYml0ZmllbGQpICovCisgICAgICAgIGlmICghKHJlcS0+ bWVtb3J5VHlwZUJpdHMgJiAoMSA8PCBpKSkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAg ICAgICAvKiBUaGUgbWVtb3J5IHR5cGUgZmxhZ3MgbXVzdCBpbmNsdWRlIG91ciBwcm9wZXJ0aWVz ICovCisgICAgICAgIGlmICgocmVxX2ZsYWdzICE9IFVJTlQzMl9NQVgpICYmCisgICAgICAgICAg ICAoKHMtPm1wcm9wcy5tZW1vcnlUeXBlc1tpXS5wcm9wZXJ0eUZsYWdzICYgcmVxX2ZsYWdzKSAh PSByZXFfZmxhZ3MpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgLyogRm91bmQg YSBzdWl0YWJsZSBtZW1vcnkgdHlwZSAqLworICAgICAgICBpbmRleCA9IGk7CisgICAgICAgIGJy ZWFrOworICAgIH0KKworICAgIGlmIChpbmRleCA8IDApIHsKKyAgICAgICAgYXZfbG9nKHMsIEFW X0xPR19FUlJPUiwgIk5vIG1lbW9yeSB0eXBlIGZvdW5kIGZvciBmbGFncyAweCV4XG4iLAorICAg ICAgICAgICAgICAgcmVxX2ZsYWdzKTsKKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsK KyAgICB9CisKKyAgICBhbGxvY19pbmZvLm1lbW9yeVR5cGVJbmRleCA9IGluZGV4OworCisgICAg cmV0ID0gdmstPkFsbG9jYXRlTWVtb3J5KHMtPmh3Y3R4LT5hY3RfZGV2LCAmYWxsb2NfaW5mbywK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy0+aHdjdHgtPmFsbG9jLCBtZW0pOworICAg IGlmIChyZXQgIT0gVktfU1VDQ0VTUykKKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsK KworICAgIGlmIChtZW1fZmxhZ3MpCisgICAgICAgICptZW1fZmxhZ3MgfD0gcy0+bXByb3BzLm1l bW9yeVR5cGVzW2luZGV4XS5wcm9wZXJ0eUZsYWdzOworCisgICAgcmV0dXJuIDA7Cit9CisKK2lu dCBmZl92a19jcmVhdGVfYnVmKEZGVnVsa2FuQ29udGV4dCAqcywgRkZWa0J1ZmZlciAqYnVmLCBz aXplX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnBOZXh0LCB2b2lkICphbGxv Y19wTmV4dCwKKyAgICAgICAgICAgICAgICAgICAgIFZrQnVmZmVyVXNhZ2VGbGFncyB1c2FnZSwg VmtNZW1vcnlQcm9wZXJ0eUZsYWdCaXRzIGZsYWdzKQoreworICAgIGludCBlcnI7CisgICAgVmtS ZXN1bHQgcmV0OworICAgIGludCB1c2VfZGVkX21lbTsKKyAgICBGRlZ1bGthbkZ1bmN0aW9ucyAq dmsgPSAmcy0+dmtmbjsKKworICAgIC8qIEJ1ZmZlciB1c2FnZSBmbGFncyBjb3JyZXNwb25kaW5n IHRvIGJ1ZmZlciBkZXNjcmlwdG9yIHR5cGVzICovCisgICAgY29uc3QgVmtCdWZmZXJVc2FnZUZs YWdzIGRlc2NfdXNhZ2UgPQorICAgICAgICBWS19CVUZGRVJfVVNBR0VfVU5JRk9STV9CVUZGRVJf QklUIHwKKyAgICAgICAgVktfQlVGRkVSX1VTQUdFX1NUT1JBR0VfQlVGRkVSX0JJVCB8CisgICAg ICAgIFZLX0JVRkZFUl9VU0FHRV9VTklGT1JNX1RFWEVMX0JVRkZFUl9CSVQgfAorICAgICAgICBW S19CVUZGRVJfVVNBR0VfU1RPUkFHRV9URVhFTF9CVUZGRVJfQklUOworCisgICAgaWYgKChzLT5l eHRlbnNpb25zICYgRkZfVktfRVhUX0RFU0NSSVBUT1JfQlVGRkVSKSAmJiAodXNhZ2UgJiBkZXNj X3VzYWdlKSkKKyAgICAgICAgdXNhZ2UgfD0gVktfQlVGRkVSX1VTQUdFX1NIQURFUl9ERVZJQ0Vf QUREUkVTU19CSVQ7CisKKyAgICBWa0J1ZmZlckNyZWF0ZUluZm8gYnVmX3NwYXduID0geworICAg ICAgICAuc1R5cGUgICAgICAgPSBWS19TVFJVQ1RVUkVfVFlQRV9CVUZGRVJfQ1JFQVRFX0lORk8s CisgICAgICAgIC5wTmV4dCAgICAgICA9IHBOZXh0LAorICAgICAgICAudXNhZ2UgICAgICAgPSB1 c2FnZSwKKyAgICAgICAgLnNoYXJpbmdNb2RlID0gVktfU0hBUklOR19NT0RFX0VYQ0xVU0lWRSwK KyAgICAgICAgLnNpemUgICAgICAgID0gZmxhZ3MgJiBWS19NRU1PUllfUFJPUEVSVFlfSE9TVF9W SVNJQkxFX0JJVCA/CisgICAgICAgICAgICAgICAgICAgICAgIEZGQUxJR04oc2l6ZSwgcy0+cHJv cHMucHJvcGVydGllcy5saW1pdHMubWluTWVtb3J5TWFwQWxpZ25tZW50KSA6CisgICAgICAgICAg ICAgICAgICAgICAgIHNpemUsCisgICAgfTsKKworICAgIFZrTWVtb3J5QWxsb2NhdGVGbGFnc0lu Zm8gYWxsb2NfZmxhZ3MgPSB7CisgICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX01F TU9SWV9BTExPQ0FURV9GTEFHU19JTkZPLAorICAgICAgICAuZmxhZ3MgPSBWS19NRU1PUllfQUxM T0NBVEVfREVWSUNFX0FERFJFU1NfQklULAorICAgIH07CisgICAgVmtCdWZmZXJNZW1vcnlSZXF1 aXJlbWVudHNJbmZvMiByZXFfZGVzYyA9IHsKKyAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJF X1RZUEVfQlVGRkVSX01FTU9SWV9SRVFVSVJFTUVOVFNfSU5GT18yLAorICAgIH07CisgICAgVmtN ZW1vcnlEZWRpY2F0ZWRBbGxvY2F0ZUluZm8gZGVkX2FsbG9jID0geworICAgICAgICAuc1R5cGUg PSBWS19TVFJVQ1RVUkVfVFlQRV9NRU1PUllfREVESUNBVEVEX0FMTE9DQVRFX0lORk8sCisgICAg ICAgIC5wTmV4dCA9IGFsbG9jX3BOZXh0LAorICAgIH07CisgICAgVmtNZW1vcnlEZWRpY2F0ZWRS ZXF1aXJlbWVudHMgZGVkX3JlcSA9IHsKKyAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZ UEVfTUVNT1JZX0RFRElDQVRFRF9SRVFVSVJFTUVOVFMsCisgICAgfTsKKyAgICBWa01lbW9yeVJl cXVpcmVtZW50czIgcmVxID0geworICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9N RU1PUllfUkVRVUlSRU1FTlRTXzIsCisgICAgICAgIC5wTmV4dCA9ICZkZWRfcmVxLAorICAgIH07 CisKKyAgICBhdl9sb2cocywgQVZfTE9HX0RFQlVHLCAiQ3JlYXRpbmcgYSBidWZmZXIgb2YgJSJT SVpFX1NQRUNJRklFUiIgYnl0ZXMsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAidXNh Z2U6IDB4JXgsIGZsYWdzOiAweCV4XG4iLAorICAgICAgICAgICBzaXplLCB1c2FnZSwgZmxhZ3Mp OworCisgICAgcmV0ID0gdmstPkNyZWF0ZUJ1ZmZlcihzLT5od2N0eC0+YWN0X2RldiwgJmJ1Zl9z cGF3biwgcy0+aHdjdHgtPmFsbG9jLCAmYnVmLT5idWYpOworICAgIGlmIChyZXQgIT0gVktfU1VD Q0VTUykgeworICAgICAgICBhdl9sb2cocywgQVZfTE9HX0VSUk9SLCAiRmFpbGVkIHRvIGNyZWF0 ZSBidWZmZXI6ICVzXG4iLAorICAgICAgICAgICAgICAgZmZfdmtfcmV0MnN0cihyZXQpKTsKKyAg ICAgICAgcmV0dXJuIEFWRVJST1JfRVhURVJOQUw7CisgICAgfQorCisgICAgcmVxX2Rlc2MuYnVm ZmVyID0gYnVmLT5idWY7CisKKyAgICB2ay0+R2V0QnVmZmVyTWVtb3J5UmVxdWlyZW1lbnRzMihz LT5od2N0eC0+YWN0X2RldiwgJnJlcV9kZXNjLCAmcmVxKTsKKworICAgIC8qIEluIGNhc2UgdGhl IGltcGxlbWVudGF0aW9uIHByZWZlcnMvcmVxdWlyZXMgZGVkaWNhdGVkIGFsbG9jYXRpb24gKi8K KyAgICB1c2VfZGVkX21lbSA9IGRlZF9yZXEucHJlZmVyc0RlZGljYXRlZEFsbG9jYXRpb24gfAor ICAgICAgICAgICAgICAgICAgZGVkX3JlcS5yZXF1aXJlc0RlZGljYXRlZEFsbG9jYXRpb247Cisg ICAgaWYgKHVzZV9kZWRfbWVtKSB7CisgICAgICAgIGRlZF9hbGxvYy5idWZmZXIgPSBidWYtPmJ1 ZjsKKyAgICAgICAgZGVkX2FsbG9jLnBOZXh0ID0gYWxsb2NfcE5leHQ7CisgICAgICAgIGFsbG9j X3BOZXh0ID0gJmRlZF9hbGxvYzsKKyAgICB9CisKKyAgICBpZiAodXNhZ2UgJiBWS19CVUZGRVJf VVNBR0VfU0hBREVSX0RFVklDRV9BRERSRVNTX0JJVCkgeworICAgICAgICBhbGxvY19mbGFncy5w TmV4dCA9IGFsbG9jX3BOZXh0OworICAgICAgICBhbGxvY19wTmV4dCA9ICZhbGxvY19mbGFnczsK KyAgICB9CisKKyAgICBlcnIgPSBmZl92a19hbGxvY19tZW0ocywgJnJlcS5tZW1vcnlSZXF1aXJl bWVudHMsIGZsYWdzLCBhbGxvY19wTmV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJmJ1 Zi0+ZmxhZ3MsICZidWYtPm1lbSk7CisgICAgaWYgKGVycikKKyAgICAgICAgcmV0dXJuIGVycjsK KworICAgIHJldCA9IHZrLT5CaW5kQnVmZmVyTWVtb3J5KHMtPmh3Y3R4LT5hY3RfZGV2LCBidWYt PmJ1ZiwgYnVmLT5tZW0sIDApOworICAgIGlmIChyZXQgIT0gVktfU1VDQ0VTUykgeworICAgICAg ICBhdl9sb2cocywgQVZfTE9HX0VSUk9SLCAiRmFpbGVkIHRvIGJpbmQgbWVtb3J5IHRvIGJ1ZmZl cjogJXNcbiIsCisgICAgICAgICAgICAgICBmZl92a19yZXQyc3RyKHJldCkpOworICAgICAgICBy ZXR1cm4gQVZFUlJPUl9FWFRFUk5BTDsKKyAgICB9CisKKyAgICBpZiAodXNhZ2UgJiBWS19CVUZG RVJfVVNBR0VfU0hBREVSX0RFVklDRV9BRERSRVNTX0JJVCkgeworICAgICAgICBWa0J1ZmZlckRl dmljZUFkZHJlc3NJbmZvIGFkZHJlc3NfaW5mbyA9IHsKKyAgICAgICAgICAgIC5zVHlwZSA9IFZL X1NUUlVDVFVSRV9UWVBFX0JVRkZFUl9ERVZJQ0VfQUREUkVTU19JTkZPLAorICAgICAgICAgICAg LmJ1ZmZlciA9IGJ1Zi0+YnVmLAorICAgICAgICB9OworICAgICAgICBidWYtPmFkZHJlc3MgPSB2 ay0+R2V0QnVmZmVyRGV2aWNlQWRkcmVzcyhzLT5od2N0eC0+YWN0X2RldiwgJmFkZHJlc3NfaW5m byk7CisgICAgfQorCisgICAgYnVmLT5zaXplID0gc2l6ZTsKKworICAgIHJldHVybiAwOworfQor CitpbnQgZmZfdmtfbWFwX2J1ZmZlcnMoRkZWdWxrYW5Db250ZXh0ICpzLCBGRlZrQnVmZmVyICoq YnVmLCB1aW50OF90ICptZW1bXSwKKyAgICAgICAgICAgICAgICAgICAgICBpbnQgbmJfYnVmZmVy cywgaW50IGludmFsaWRhdGUpCit7CisgICAgVmtSZXN1bHQgcmV0OworICAgIEZGVnVsa2FuRnVu Y3Rpb25zICp2ayA9ICZzLT52a2ZuOworICAgIFZrTWFwcGVkTWVtb3J5UmFuZ2UgaW52YWxfbGlz dFs2NF07CisgICAgaW50IGludmFsX2NvdW50ID0gMDsKKworICAgIGZvciAoaW50IGkgPSAwOyBp IDwgbmJfYnVmZmVyczsgaSsrKSB7CisgICAgICAgIHZvaWQgKmRzdDsKKyAgICAgICAgcmV0ID0g dmstPk1hcE1lbW9yeShzLT5od2N0eC0+YWN0X2RldiwgYnVmW2ldLT5tZW0sIDAsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgVktfV0hPTEVfU0laRSwgMCwgJmRzdCk7CisgICAgICAgIGlm IChyZXQgIT0gVktfU1VDQ0VTUykgeworICAgICAgICAgICAgYXZfbG9nKHMsIEFWX0xPR19FUlJP UiwgIkZhaWxlZCB0byBtYXAgYnVmZmVyIG1lbW9yeTogJXNcbiIsCisgICAgICAgICAgICAgICAg ICAgZmZfdmtfcmV0MnN0cihyZXQpKTsKKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0VYVEVS TkFMOworICAgICAgICB9CisgICAgICAgIG1lbVtpXSA9IGJ1ZltpXS0+bWFwcGVkX21lbSA9IGRz dDsKKyAgICB9CisKKyAgICBpZiAoIWludmFsaWRhdGUpCisgICAgICAgIHJldHVybiAwOworCisg ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuYl9idWZmZXJzOyBpKyspIHsKKyAgICAgICAgY29uc3Qg VmtNYXBwZWRNZW1vcnlSYW5nZSBpdmFsX2J1ZiA9IHsKKyAgICAgICAgICAgIC5zVHlwZSAgPSBW S19TVFJVQ1RVUkVfVFlQRV9NQVBQRURfTUVNT1JZX1JBTkdFLAorICAgICAgICAgICAgLm1lbW9y eSA9IGJ1ZltpXS0+bWVtLAorICAgICAgICAgICAgLnNpemUgICA9IFZLX1dIT0xFX1NJWkUsCisg ICAgICAgIH07CisgICAgICAgIGlmIChidWZbaV0tPmZsYWdzICYgVktfTUVNT1JZX1BST1BFUlRZ X0hPU1RfQ09IRVJFTlRfQklUKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGludmFs X2xpc3RbaW52YWxfY291bnQrK10gPSBpdmFsX2J1ZjsKKyAgICB9CisKKyAgICBpZiAoaW52YWxf Y291bnQpIHsKKyAgICAgICAgcmV0ID0gdmstPkludmFsaWRhdGVNYXBwZWRNZW1vcnlSYW5nZXMo cy0+aHdjdHgtPmFjdF9kZXYsIGludmFsX2NvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpbnZhbF9saXN0KTsKKyAgICAgICAgaWYgKHJldCAhPSBW S19TVUNDRVNTKSB7CisgICAgICAgICAgICBhdl9sb2cocywgQVZfTE9HX0VSUk9SLCAiRmFpbGVk IHRvIGludmFsaWRhdGUgbWVtb3J5OiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICBmZl92a19y ZXQyc3RyKHJldCkpOworICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfRVhURVJOQUw7CisgICAg ICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworaW50IGZmX3ZrX3VubWFwX2J1ZmZl cnMoRkZWdWxrYW5Db250ZXh0ICpzLCBGRlZrQnVmZmVyICoqYnVmLCBpbnQgbmJfYnVmZmVycywK KyAgICAgICAgICAgICAgICAgICAgICAgIGludCBmbHVzaCkKK3sKKyAgICBpbnQgZXJyID0gMDsK KyAgICBWa1Jlc3VsdCByZXQ7CisgICAgRkZWdWxrYW5GdW5jdGlvbnMgKnZrID0gJnMtPnZrZm47 CisgICAgVmtNYXBwZWRNZW1vcnlSYW5nZSBmbHVzaF9saXN0WzY0XTsKKyAgICBpbnQgZmx1c2hf Y291bnQgPSAwOworCisgICAgaWYgKGZsdXNoKSB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBp IDwgbmJfYnVmZmVyczsgaSsrKSB7CisgICAgICAgICAgICBjb25zdCBWa01hcHBlZE1lbW9yeVJh bmdlIGZsdXNoX2J1ZiA9IHsKKyAgICAgICAgICAgICAgICAuc1R5cGUgID0gVktfU1RSVUNUVVJF X1RZUEVfTUFQUEVEX01FTU9SWV9SQU5HRSwKKyAgICAgICAgICAgICAgICAubWVtb3J5ID0gYnVm W2ldLT5tZW0sCisgICAgICAgICAgICAgICAgLnNpemUgICA9IFZLX1dIT0xFX1NJWkUsCisgICAg ICAgICAgICB9OworCisgICAgICAgICAgICBhdl9hc3NlcnQwKCFidWZbaV0tPmhvc3RfcmVmKTsK KyAgICAgICAgICAgIGlmIChidWZbaV0tPmZsYWdzICYgVktfTUVNT1JZX1BST1BFUlRZX0hPU1Rf Q09IRVJFTlRfQklUKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgZmx1 c2hfbGlzdFtmbHVzaF9jb3VudCsrXSA9IGZsdXNoX2J1ZjsKKyAgICAgICAgfQorICAgIH0KKwor ICAgIGlmIChmbHVzaF9jb3VudCkgeworICAgICAgICByZXQgPSB2ay0+Rmx1c2hNYXBwZWRNZW1v cnlSYW5nZXMocy0+aHdjdHgtPmFjdF9kZXYsIGZsdXNoX2NvdW50LAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZmx1c2hfbGlzdCk7CisgICAgICAgIGlmIChyZXQg IT0gVktfU1VDQ0VTUykgeworICAgICAgICAgICAgYXZfbG9nKHMsIEFWX0xPR19FUlJPUiwgIkZh aWxlZCB0byBmbHVzaCBtZW1vcnk6ICVzXG4iLAorICAgICAgICAgICAgICAgICAgIGZmX3ZrX3Jl dDJzdHIocmV0KSk7CisgICAgICAgICAgICBlcnIgPSBBVkVSUk9SX0VYVEVSTkFMOyAvKiBXZSBz dGlsbCB3YW50IHRvIHRyeSB0byB1bm1hcCB0aGVtICovCisgICAgICAgIH0KKyAgICB9CisKKyAg ICBmb3IgKGludCBpID0gMDsgaSA8IG5iX2J1ZmZlcnM7IGkrKykgeworICAgICAgICB2ay0+VW5t YXBNZW1vcnkocy0+aHdjdHgtPmFjdF9kZXYsIGJ1ZltpXS0+bWVtKTsKKyAgICAgICAgYnVmW2ld LT5tYXBwZWRfbWVtID0gTlVMTDsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyOworfQorCit2b2lk IGZmX3ZrX2ZyZWVfYnVmKEZGVnVsa2FuQ29udGV4dCAqcywgRkZWa0J1ZmZlciAqYnVmKQorewor ICAgIEZGVnVsa2FuRnVuY3Rpb25zICp2ayA9ICZzLT52a2ZuOworCisgICAgaWYgKCFidWYgfHwg IXMtPmh3Y3R4KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoYnVmLT5tYXBwZWRfbWVtICYm ICFidWYtPmhvc3RfcmVmKQorICAgICAgICBmZl92a191bm1hcF9idWZmZXIocywgYnVmLCAwKTsK KyAgICBpZiAoYnVmLT5idWYgIT0gVktfTlVMTF9IQU5ETEUpCisgICAgICAgIHZrLT5EZXN0cm95 QnVmZmVyKHMtPmh3Y3R4LT5hY3RfZGV2LCBidWYtPmJ1Ziwgcy0+aHdjdHgtPmFsbG9jKTsKKyAg ICBpZiAoYnVmLT5tZW0gIT0gVktfTlVMTF9IQU5ETEUpCisgICAgICAgIHZrLT5GcmVlTWVtb3J5 KHMtPmh3Y3R4LT5hY3RfZGV2LCBidWYtPm1lbSwgcy0+aHdjdHgtPmFsbG9jKTsKKyAgICBpZiAo YnVmLT5ob3N0X3JlZikKKyAgICAgICAgYXZfYnVmZmVyX3VucmVmKCZidWYtPmhvc3RfcmVmKTsK KworICAgIGJ1Zi0+YnVmID0gVktfTlVMTF9IQU5ETEU7CisgICAgYnVmLT5tZW0gPSBWS19OVUxM X0hBTkRMRTsKKyAgICBidWYtPm1hcHBlZF9tZW0gPSBOVUxMOworfQorCitzdGF0aWMgdm9pZCBm cmVlX2RhdGFfYnVmKHZvaWQgKm9wYXF1ZSwgdWludDhfdCAqZGF0YSkKK3sKKyAgICBGRlZ1bGth bkNvbnRleHQgKmN0eCA9IG9wYXF1ZTsKKyAgICBGRlZrQnVmZmVyICpidWYgPSAoRkZWa0J1ZmZl ciAqKWRhdGE7CisgICAgZmZfdmtfZnJlZV9idWYoY3R4LCBidWYpOworICAgIGF2X2ZyZWUoZGF0 YSk7Cit9CisKK3N0YXRpYyBBVkJ1ZmZlclJlZiAqYWxsb2NfZGF0YV9idWYodm9pZCAqb3BhcXVl LCBzaXplX3Qgc2l6ZSkKK3sKKyAgICBBVkJ1ZmZlclJlZiAqcmVmOworICAgIHVpbnQ4X3QgKmJ1 ZiA9IGF2X21hbGxvY3ooc2l6ZSk7CisgICAgaWYgKCFidWYpCisgICAgICAgIHJldHVybiBOVUxM OworCisgICAgcmVmID0gYXZfYnVmZmVyX2NyZWF0ZShidWYsIHNpemUsIGZyZWVfZGF0YV9idWYs IG9wYXF1ZSwgMCk7CisgICAgaWYgKCFyZWYpCisgICAgICAgIGF2X2ZyZWUoYnVmKTsKKyAgICBy ZXR1cm4gcmVmOworfQorCitpbnQgZmZfdmtfZ2V0X3Bvb2xlZF9idWZmZXIoRkZWdWxrYW5Db250 ZXh0ICpjdHgsIEFWQnVmZmVyUG9vbCAqKmJ1Zl9wb29sLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEFWQnVmZmVyUmVmICoqYnVmLCBWa0J1ZmZlclVzYWdlRmxhZ3MgdXNhZ2UsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqY3JlYXRlX3BOZXh0LCBzaXplX3Qgc2l6ZSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBWa01lbW9yeVByb3BlcnR5RmxhZ0JpdHMgbWVt X3Byb3BzKQoreworICAgIGludCBlcnI7CisgICAgQVZCdWZmZXJSZWYgKnJlZjsKKyAgICBGRlZr QnVmZmVyICpkYXRhOworCisgICAgKmJ1ZiA9IE5VTEw7CisKKyAgICBpZiAoISgqYnVmX3Bvb2wp KSB7CisgICAgICAgICpidWZfcG9vbCA9IGF2X2J1ZmZlcl9wb29sX2luaXQyKHNpemVvZihGRlZr QnVmZmVyKSwgY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBh bGxvY19kYXRhX2J1ZiwgTlVMTCk7CisgICAgICAgIGlmICghKCpidWZfcG9vbCkpCisgICAgICAg ICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOworICAgIH0KKworICAgICpidWYgPSByZWYgPSBh dl9idWZmZXJfcG9vbF9nZXQoKmJ1Zl9wb29sKTsKKyAgICBpZiAoIXJlZikKKyAgICAgICAgcmV0 dXJuIEFWRVJST1IoRU5PTUVNKTsKKworICAgIGRhdGEgPSAoRkZWa0J1ZmZlciAqKXJlZi0+ZGF0 YTsKKyAgICBkYXRhLT5zdGFnZSA9IFZLX1BJUEVMSU5FX1NUQUdFXzJfQUxMX0NPTU1BTkRTX0JJ VDsKKyAgICBkYXRhLT5hY2Nlc3MgPSBWS19BQ0NFU1NfMl9OT05FOworCisgICAgaWYgKGRhdGEt PnNpemUgPj0gc2l6ZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBmZl92a19mcmVlX2J1Zihj dHgsIGRhdGEpOworICAgIG1lbXNldChkYXRhLCAwLCBzaXplb2YoKmRhdGEpKTsKKworICAgIGVy ciA9IGZmX3ZrX2NyZWF0ZV9idWYoY3R4LCBkYXRhLCBzaXplLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgY3JlYXRlX3BOZXh0LCBOVUxMLCB1c2FnZSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIG1lbV9wcm9wcyk7CisgICAgaWYgKGVyciA8IDApIHsKKyAgICAgICAgYXZfYnVmZmVy X3VucmVmKCZyZWYpOworICAgICAgICAqYnVmID0gTlVMTDsKKyAgICAgICAgcmV0dXJuIGVycjsK KyAgICB9CisKKyAgICBpZiAobWVtX3Byb3BzICYgVktfTUVNT1JZX1BST1BFUlRZX0hPU1RfVklT SUJMRV9CSVQpIHsKKyAgICAgICAgZXJyID0gZmZfdmtfbWFwX2J1ZmZlcihjdHgsIGRhdGEsICZk YXRhLT5tYXBwZWRfbWVtLCAwKTsKKyAgICAgICAgaWYgKGVyciA8IDApIHsKKyAgICAgICAgICAg IGF2X2J1ZmZlcl91bnJlZigmcmVmKTsKKyAgICAgICAgICAgICpidWYgPSBOVUxMOworICAgICAg ICAgICAgcmV0dXJuIGVycjsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAwOworfQor CitzdGF0aWMgaW50IGNyZWF0ZV9tYXBwZWRfYnVmZmVyKEZGVnVsa2FuQ29udGV4dCAqcywKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkZWa0J1ZmZlciAqdmtiLCBWa0J1ZmZlclVz YWdlRmxhZ3MgdXNhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBz aXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWa0V4dGVybmFsTWVtb3J5QnVm ZmVyQ3JlYXRlSW5mbyAqY3JlYXRlX2Rlc2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFZrSW1wb3J0TWVtb3J5SG9zdFBvaW50ZXJJbmZvRVhUICppbXBvcnRfZGVzYywKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgVmtNZW1vcnlIb3N0UG9pbnRlclByb3BlcnRpZXNF WFQgcHJvcHMpCit7CisgICAgaW50IGVycjsKKyAgICBWa1Jlc3VsdCByZXQ7CisgICAgRkZWdWxr YW5GdW5jdGlvbnMgKnZrID0gJnMtPnZrZm47CisKKyAgICBWa0J1ZmZlckNyZWF0ZUluZm8gYnVm X3NwYXduID0geworICAgICAgICAuc1R5cGUgICAgICAgPSBWS19TVFJVQ1RVUkVfVFlQRV9CVUZG RVJfQ1JFQVRFX0lORk8sCisgICAgICAgIC5wTmV4dCAgICAgICA9IGNyZWF0ZV9kZXNjLAorICAg ICAgICAudXNhZ2UgICAgICAgPSB1c2FnZSwKKyAgICAgICAgLnNoYXJpbmdNb2RlID0gVktfU0hB UklOR19NT0RFX0VYQ0xVU0lWRSwKKyAgICAgICAgLnNpemUgICAgICAgID0gc2l6ZSwKKyAgICB9 OworICAgIFZrTWVtb3J5UmVxdWlyZW1lbnRzIHJlcSA9IHsKKyAgICAgICAgLnNpemUgICAgICAg ICAgID0gc2l6ZSwKKyAgICAgICAgLmFsaWdubWVudCAgICAgID0gcy0+aHByb3BzLm1pbkltcG9y dGVkSG9zdFBvaW50ZXJBbGlnbm1lbnQsCisgICAgICAgIC5tZW1vcnlUeXBlQml0cyA9IHByb3Bz Lm1lbW9yeVR5cGVCaXRzLAorICAgIH07CisKKyAgICBlcnIgPSBmZl92a19hbGxvY19tZW0ocywg JnJlcSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgVktfTUVNT1JZX1BST1BFUlRZX0hPU1Rf VklTSUJMRV9CSVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGltcG9ydF9kZXNjLCAmdmti LT5mbGFncywgJnZrYi0+bWVtKTsKKyAgICBpZiAoZXJyIDwgMCkKKyAgICAgICAgcmV0dXJuIGVy cjsKKworICAgIHJldCA9IHZrLT5DcmVhdGVCdWZmZXIocy0+aHdjdHgtPmFjdF9kZXYsICZidWZf c3Bhd24sIHMtPmh3Y3R4LT5hbGxvYywgJnZrYi0+YnVmKTsKKyAgICBpZiAocmV0ICE9IFZLX1NV Q0NFU1MpIHsKKyAgICAgICAgdmstPkZyZWVNZW1vcnkocy0+aHdjdHgtPmFjdF9kZXYsIHZrYi0+ bWVtLCBzLT5od2N0eC0+YWxsb2MpOworICAgICAgICByZXR1cm4gQVZFUlJPUl9FWFRFUk5BTDsK KyAgICB9CisKKyAgICByZXQgPSB2ay0+QmluZEJ1ZmZlck1lbW9yeShzLT5od2N0eC0+YWN0X2Rl diwgdmtiLT5idWYsIHZrYi0+bWVtLCAwKTsKKyAgICBpZiAocmV0ICE9IFZLX1NVQ0NFU1MpIHsK KyAgICAgICAgdmstPkZyZWVNZW1vcnkocy0+aHdjdHgtPmFjdF9kZXYsIHZrYi0+bWVtLCBzLT5o d2N0eC0+YWxsb2MpOworICAgICAgICB2ay0+RGVzdHJveUJ1ZmZlcihzLT5od2N0eC0+YWN0X2Rl diwgdmtiLT5idWYsIHMtPmh3Y3R4LT5hbGxvYyk7CisgICAgICAgIHJldHVybiBBVkVSUk9SX0VY VEVSTkFMOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBkZXN0cm95 X2F2dmtidWYodm9pZCAqb3BhcXVlLCB1aW50OF90ICpkYXRhKQoreworICAgIEZGVnVsa2FuQ29u dGV4dCAqcyA9IG9wYXF1ZTsKKyAgICBGRlZrQnVmZmVyICpidWYgPSAoRkZWa0J1ZmZlciAqKWRh dGE7CisgICAgZmZfdmtfZnJlZV9idWYocywgYnVmKTsKKyAgICBhdl9mcmVlKGJ1Zik7Cit9CisK K2ludCBmZl92a19ob3N0X21hcF9idWZmZXIoRkZWdWxrYW5Db250ZXh0ICpzLCBBVkJ1ZmZlclJl ZiAqKmRzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqc3JjX2RhdGEsIGNv bnN0IEFWQnVmZmVyUmVmICpzcmNfYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICBWa0J1 ZmZlclVzYWdlRmxhZ3MgdXNhZ2UpCit7CisgICAgaW50IGVycjsKKyAgICBWa1Jlc3VsdCByZXQ7 CisgICAgRkZWdWxrYW5GdW5jdGlvbnMgKnZrID0gJnMtPnZrZm47CisKKyAgICBWa0V4dGVybmFs TWVtb3J5QnVmZmVyQ3JlYXRlSW5mbyBjcmVhdGVfZGVzYyA9IHsKKyAgICAgICAgLnNUeXBlID0g VktfU1RSVUNUVVJFX1RZUEVfRVhURVJOQUxfTUVNT1JZX0JVRkZFUl9DUkVBVEVfSU5GTywKKyAg ICAgICAgLmhhbmRsZVR5cGVzID0gVktfRVhURVJOQUxfTUVNT1JZX0hBTkRMRV9UWVBFX0hPU1Rf QUxMT0NBVElPTl9CSVRfRVhULAorICAgIH07CisgICAgVmtNZW1vcnlBbGxvY2F0ZUZsYWdzSW5m byBhbGxvY19mbGFncyA9IHsKKyAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfTUVN T1JZX0FMTE9DQVRFX0ZMQUdTX0lORk8sCisgICAgICAgIC5mbGFncyA9IFZLX01FTU9SWV9BTExP Q0FURV9ERVZJQ0VfQUREUkVTU19CSVQsCisgICAgfTsKKyAgICBWa0ltcG9ydE1lbW9yeUhvc3RQ b2ludGVySW5mb0VYVCBpbXBvcnRfZGVzYyA9IHsKKyAgICAgICAgLnNUeXBlID0gVktfU1RSVUNU VVJFX1RZUEVfSU1QT1JUX01FTU9SWV9IT1NUX1BPSU5URVJfSU5GT19FWFQsCisgICAgICAgIC5o YW5kbGVUeXBlID0gVktfRVhURVJOQUxfTUVNT1JZX0hBTkRMRV9UWVBFX0hPU1RfQUxMT0NBVElP Tl9CSVRfRVhULAorICAgICAgICAucE5leHQgPSB1c2FnZSAmIFZLX0JVRkZFUl9VU0FHRV9TSEFE RVJfREVWSUNFX0FERFJFU1NfQklUID8gJmFsbG9jX2ZsYWdzIDogTlVMTCwKKyAgICB9OworICAg IFZrTWVtb3J5SG9zdFBvaW50ZXJQcm9wZXJ0aWVzRVhUIHByb3BzOworCisgICAgQVZCdWZmZXJS ZWYgKnJlZjsKKyAgICBGRlZrQnVmZmVyICp2a2I7CisgICAgc2l6ZV90IG9mZnM7CisgICAgc2l6 ZV90IGJ1ZmZlcl9zaXplOworCisgICAgKmRzdCA9IE5VTEw7CisKKyAgICAvKiBHZXQgdGhlIHBy ZXZpb3VzIHBvaW50IGF0IHdoaWNoIG1hcHBpbmcgd2FzIHBvc3NpYmxlIGFuZCB1c2UgaXQgKi8K KyAgICBvZmZzID0gKHVpbnRwdHJfdClzcmNfZGF0YSAlIHMtPmhwcm9wcy5taW5JbXBvcnRlZEhv c3RQb2ludGVyQWxpZ25tZW50OworICAgIGltcG9ydF9kZXNjLnBIb3N0UG9pbnRlciA9IHNyY19k YXRhIC0gb2ZmczsKKworICAgIHByb3BzID0gKFZrTWVtb3J5SG9zdFBvaW50ZXJQcm9wZXJ0aWVz RVhUKSB7CisgICAgICAgIFZLX1NUUlVDVFVSRV9UWVBFX01FTU9SWV9IT1NUX1BPSU5URVJfUFJP UEVSVElFU19FWFQsCisgICAgfTsKKyAgICByZXQgPSB2ay0+R2V0TWVtb3J5SG9zdFBvaW50ZXJQ cm9wZXJ0aWVzRVhUKHMtPmh3Y3R4LT5hY3RfZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaW1wb3J0X2Rlc2MuaGFuZGxlVHlwZSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltcG9ydF9kZXNjLnBIb3N0 UG9pbnRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICZwcm9wcyk7CisgICAgaWYgKCEocmV0ID09IFZLX1NVQ0NFU1MgJiYgcHJvcHMubWVtb3J5VHlw ZUJpdHMpKQorICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOworCisgICAgLyogUmVmIHRo ZSBzb3VyY2UgYnVmZmVyICovCisgICAgcmVmID0gYXZfYnVmZmVyX3JlZihzcmNfYnVmKTsKKyAg ICBpZiAoIXJlZikKKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKKworICAgIC8qIEFk ZCB0aGUgb2Zmc2V0IGF0IHRoZSBzdGFydCwgd2hpY2ggZ2V0cyBpZ25vcmVkICovCisgICAgY29u c3QgcHRyZGlmZl90IHNyY19vZmZzZXQgPSBzcmNfZGF0YSAtIHNyY19idWYtPmRhdGE7CisgICAg YnVmZmVyX3NpemUgPSBvZmZzICsgKHNyY19idWYtPnNpemUgLSBzcmNfb2Zmc2V0KTsKKyAgICBi dWZmZXJfc2l6ZSA9IEZGQUxJR04oYnVmZmVyX3NpemUsIHMtPnByb3BzLnByb3BlcnRpZXMubGlt aXRzLm1pbk1lbW9yeU1hcEFsaWdubWVudCk7CisgICAgYnVmZmVyX3NpemUgPSBGRkFMSUdOKGJ1 ZmZlcl9zaXplLCBzLT5ocHJvcHMubWluSW1wb3J0ZWRIb3N0UG9pbnRlckFsaWdubWVudCk7CisK KyAgICAvKiBDcmVhdGUgYSBidWZmZXIgc3RydWN0ICovCisgICAgdmtiID0gYXZfbWFsbG9jeihz aXplb2YoKnZrYikpOworICAgIGlmICghdmtiKSB7CisgICAgICAgIGF2X2J1ZmZlcl91bnJlZigm cmVmKTsKKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKKyAgICB9CisKKyAgICBlcnIg PSBjcmVhdGVfbWFwcGVkX2J1ZmZlcihzLCB2a2IsIHVzYWdlLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGJ1ZmZlcl9zaXplLCAmY3JlYXRlX2Rlc2MsICZpbXBvcnRfZGVzYywKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wcyk7CisgICAgaWYgKGVyciA8IDApIHsK KyAgICAgICAgYXZfYnVmZmVyX3VucmVmKCZyZWYpOworICAgICAgICBhdl9mcmVlKHZrYik7Cisg ICAgICAgIHJldHVybiBlcnI7CisgICAgfQorCisgICAgaWYgKHVzYWdlICYgVktfQlVGRkVSX1VT QUdFX1NIQURFUl9ERVZJQ0VfQUREUkVTU19CSVQpIHsKKyAgICAgICAgVmtCdWZmZXJEZXZpY2VB ZGRyZXNzSW5mbyBhZGRyZXNzX2luZm8gPSB7CisgICAgICAgICAgICAuc1R5cGUgPSBWS19TVFJV Q1RVUkVfVFlQRV9CVUZGRVJfREVWSUNFX0FERFJFU1NfSU5GTywKKyAgICAgICAgICAgIC5idWZm ZXIgPSB2a2ItPmJ1ZiwKKyAgICAgICAgfTsKKyAgICAgICAgdmtiLT5hZGRyZXNzID0gdmstPkdl dEJ1ZmZlckRldmljZUFkZHJlc3Mocy0+aHdjdHgtPmFjdF9kZXYsICZhZGRyZXNzX2luZm8pOwor ICAgIH0KKworICAgIHZrYi0+aG9zdF9yZWYgICAgICAgPSByZWY7CisgICAgdmtiLT52aXJ0dWFs X29mZnNldCA9IG9mZnM7CisgICAgdmtiLT5hZGRyZXNzICAgICAgICs9IG9mZnM7CisgICAgdmti LT5tYXBwZWRfbWVtICAgICA9IHNyY19kYXRhOworICAgIHZrYi0+c2l6ZSAgICAgICAgICAgPSBi dWZmZXJfc2l6ZSAtIG9mZnM7CisgICAgdmtiLT5mbGFncyAgICAgICAgIHw9IFZLX01FTU9SWV9Q Uk9QRVJUWV9IT1NUX0NPSEVSRU5UX0JJVDsKKworICAgIC8qIENyZWF0ZSBhIHJlZiAqLworICAg ICpkc3QgPSBhdl9idWZmZXJfY3JlYXRlKCh1aW50OF90ICopdmtiLCBzaXplb2YoKnZrYiksCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdHJveV9hdnZrYnVmLCBzLCAwKTsKKyAgICBp ZiAoISgqZHN0KSkgeworICAgICAgICBkZXN0cm95X2F2dmtidWYocywgKHVpbnQ4X3QgKil2a2Ip OworICAgICAgICAqZHN0ID0gTlVMTDsKKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsK KyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworaW50IGZmX3ZrX3NoYWRlcl9hZGRfcHVzaF9j b25zdChGRlZ1bGthblNoYWRlciAqc2hkLCBpbnQgb2Zmc2V0LCBpbnQgc2l6ZSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgVmtTaGFkZXJTdGFnZUZsYWdCaXRzIHN0YWdlKQorewor ICAgIFZrUHVzaENvbnN0YW50UmFuZ2UgKnBjOworCisgICAgc2hkLT5wdXNoX2NvbnN0cyA9IGF2 X3JlYWxsb2NfYXJyYXkoc2hkLT5wdXNoX2NvbnN0cywKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzaXplb2YoKnNoZC0+cHVzaF9jb25zdHMpLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoZC0+cHVzaF9jb25zdHNfbnVtICsgMSk7Cisg ICAgaWYgKCFzaGQtPnB1c2hfY29uc3RzKQorICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0p OworCisgICAgcGMgPSAmc2hkLT5wdXNoX2NvbnN0c1tzaGQtPnB1c2hfY29uc3RzX251bSsrXTsK KyAgICBtZW1zZXQocGMsIDAsIHNpemVvZigqcGMpKTsKKworICAgIHBjLT5zdGFnZUZsYWdzID0g c3RhZ2U7CisgICAgcGMtPm9mZnNldCA9IG9mZnNldDsKKyAgICBwYy0+c2l6ZSA9IHNpemU7CisK KyAgICByZXR1cm4gMDsKK30KKworaW50IGZmX3ZrX2luaXRfc2FtcGxlcihGRlZ1bGthbkNvbnRl eHQgKnMsIFZrU2FtcGxlciAqc2FtcGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50IHVu bm9ybV9jb29yZHMsIFZrRmlsdGVyIGZpbHQpCit7CisgICAgVmtSZXN1bHQgcmV0OworICAgIEZG VnVsa2FuRnVuY3Rpb25zICp2ayA9ICZzLT52a2ZuOworCisgICAgVmtTYW1wbGVyQ3JlYXRlSW5m byBzYW1wbGVyX2luZm8gPSB7CisgICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX1NB TVBMRVJfQ1JFQVRFX0lORk8sCisgICAgICAgIC5tYWdGaWx0ZXIgPSBmaWx0LAorICAgICAgICAu bWluRmlsdGVyID0gc2FtcGxlcl9pbmZvLm1hZ0ZpbHRlciwKKyAgICAgICAgLm1pcG1hcE1vZGUg PSB1bm5vcm1fY29vcmRzID8gVktfU0FNUExFUl9NSVBNQVBfTU9ERV9ORUFSRVNUIDoKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfU0FNUExFUl9NSVBNQVBfTU9ERV9M SU5FQVIsCisgICAgICAgIC5hZGRyZXNzTW9kZVUgPSBWS19TQU1QTEVSX0FERFJFU1NfTU9ERV9D TEFNUF9UT19FREdFLAorICAgICAgICAuYWRkcmVzc01vZGVWID0gc2FtcGxlcl9pbmZvLmFkZHJl c3NNb2RlVSwKKyAgICAgICAgLmFkZHJlc3NNb2RlVyA9IHNhbXBsZXJfaW5mby5hZGRyZXNzTW9k ZVUsCisgICAgICAgIC5hbmlzb3Ryb3B5RW5hYmxlID0gVktfRkFMU0UsCisgICAgICAgIC5jb21w YXJlT3AgPSBWS19DT01QQVJFX09QX05FVkVSLAorICAgICAgICAuYm9yZGVyQ29sb3IgPSBWS19C T1JERVJfQ09MT1JfRkxPQVRfVFJBTlNQQVJFTlRfQkxBQ0ssCisgICAgICAgIC51bm5vcm1hbGl6 ZWRDb29yZGluYXRlcyA9IHVubm9ybV9jb29yZHMsCisgICAgfTsKKworICAgIHJldCA9IHZrLT5D cmVhdGVTYW1wbGVyKHMtPmh3Y3R4LT5hY3RfZGV2LCAmc2FtcGxlcl9pbmZvLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHMtPmh3Y3R4LT5hbGxvYywgc2FtcGxlcik7CisgICAgaWYgKHJl dCAhPSBWS19TVUNDRVNTKSB7CisgICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJST1IsICJVbmFi bGUgdG8gaW5pdCBzYW1wbGVyOiAlc1xuIiwKKyAgICAgICAgICAgICAgIGZmX3ZrX3JldDJzdHIo cmV0KSk7CisgICAgICAgIHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOworICAgIH0KKworICAgIHJl dHVybiAwOworfQorCitWa0ltYWdlQXNwZWN0RmxhZ3MgZmZfdmtfYXNwZWN0X2ZsYWcoQVZGcmFt ZSAqZiwgaW50IHApCit7CisgICAgQVZWa0ZyYW1lICp2a2YgPSAoQVZWa0ZyYW1lICopZi0+ZGF0 YVswXTsKKyAgICBBVkhXRnJhbWVzQ29udGV4dCAqaHdmYyA9IChBVkhXRnJhbWVzQ29udGV4dCAq KWYtPmh3X2ZyYW1lc19jdHgtPmRhdGE7CisgICAgaW50IG5iX2ltYWdlcyA9IGZmX3ZrX2NvdW50 X2ltYWdlcyh2a2YpOworICAgIGludCBuYl9wbGFuZXMgPSBhdl9waXhfZm10X2NvdW50X3BsYW5l cyhod2ZjLT5zd19mb3JtYXQpOworCisgICAgc3RhdGljIGNvbnN0IFZrSW1hZ2VBc3BlY3RGbGFn cyBwbGFuZV9hc3BlY3RbXSA9IHsgVktfSU1BR0VfQVNQRUNUX1BMQU5FXzBfQklULAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZLX0lNQUdF X0FTUEVDVF9QTEFORV8xX0JJVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBWS19JTUFHRV9BU1BFQ1RfUExBTkVfMl9CSVQsIH07CisKKyAg ICBpZiAoZmZfdmtfbXRfaXNfbnBfcmdiKGh3ZmMtPnN3X2Zvcm1hdCkgfHwgKG5iX3BsYW5lcyA9 PSBuYl9pbWFnZXMpKQorICAgICAgICByZXR1cm4gVktfSU1BR0VfQVNQRUNUX0NPTE9SX0JJVDsK KworICAgIHJldHVybiBwbGFuZV9hc3BlY3RbcF07Cit9CisKK2ludCBmZl92a19tdF9pc19ucF9y Z2IoZW51bSBBVlBpeGVsRm9ybWF0IHBpeF9mbXQpCit7CisgICAgaWYgKHBpeF9mbXQgPT0gQVZf UElYX0ZNVF9BQkdSICAgfHwgcGl4X2ZtdCA9PSBBVl9QSVhfRk1UX0JHUkEgICB8fAorICAgICAg ICBwaXhfZm10ID09IEFWX1BJWF9GTVRfUkdCQSAgIHx8IHBpeF9mbXQgPT0gQVZfUElYX0ZNVF9S R0IyNCAgfHwKKyAgICAgICAgcGl4X2ZtdCA9PSBBVl9QSVhfRk1UX0JHUjI0ICB8fCBwaXhfZm10 ID09IEFWX1BJWF9GTVRfUkdCNDggIHx8CisgICAgICAgIHBpeF9mbXQgPT0gQVZfUElYX0ZNVF9S R0JBNjQgfHwgcGl4X2ZtdCA9PSBBVl9QSVhfRk1UX1JHQjU2NSB8fAorICAgICAgICBwaXhfZm10 ID09IEFWX1BJWF9GTVRfQkdSNTY1IHx8IHBpeF9mbXQgPT0gQVZfUElYX0ZNVF9CR1IwICAgfHwK KyAgICAgICAgcGl4X2ZtdCA9PSBBVl9QSVhfRk1UXzBCR1IgICB8fCBwaXhfZm10ID09IEFWX1BJ WF9GTVRfUkdCMCAgIHx8CisgICAgICAgIHBpeF9mbXQgPT0gQVZfUElYX0ZNVF9HQlJQMTAgIHx8 IHBpeF9mbXQgPT0gQVZfUElYX0ZNVF9HQlJQMTIgfHwKKyAgICAgICAgcGl4X2ZtdCA9PSBBVl9Q SVhfRk1UX0dCUlAxNCAgfHwgcGl4X2ZtdCA9PSBBVl9QSVhfRk1UX0dCUlAxNiB8fAorICAgICAg ICBwaXhfZm10ID09IEFWX1BJWF9GTVRfR0JSQVAgICB8fCBwaXhfZm10ID09IEFWX1BJWF9GTVRf R0JSQVAxMCB8fAorICAgICAgICBwaXhfZm10ID09IEFWX1BJWF9GTVRfR0JSQVAxMiB8fCBwaXhf Zm10ID09IEFWX1BJWF9GTVRfR0JSQVAxNCB8fAorICAgICAgICBwaXhfZm10ID09IEFWX1BJWF9G TVRfR0JSQVAxNiB8fCBwaXhfZm10ID09IEFWX1BJWF9GTVRfR0JSQVAzMiB8fAorICAgICAgICBw aXhfZm10ID09IEFWX1BJWF9GTVRfR0JSUEYzMiB8fCBwaXhfZm10ID09IEFWX1BJWF9GTVRfR0JS QVBGMzIgfHwKKyAgICAgICAgcGl4X2ZtdCA9PSBBVl9QSVhfRk1UX1gyUkdCMTAgfHwgcGl4X2Zt dCA9PSBBVl9QSVhfRk1UX1gyQkdSMTAgfHwKKyAgICAgICAgcGl4X2ZtdCA9PSBBVl9QSVhfRk1U X1JHQkFGMzIgfHwgcGl4X2ZtdCA9PSBBVl9QSVhfRk1UX1JHQkYzMiB8fAorICAgICAgICBwaXhf Zm10ID09IEFWX1BJWF9GTVRfUkdCQTEyOCB8fCBwaXhfZm10ID09IEFWX1BJWF9GTVRfUkdCOTYg fHwKKyAgICAgICAgcGl4X2ZtdCA9PSBBVl9QSVhfRk1UX0dCUlAgfHwgcGl4X2ZtdCA9PSBBVl9Q SVhfRk1UX0JBWUVSX1JHR0IxNikKKyAgICAgICAgcmV0dXJuIDE7CisgICAgcmV0dXJuIDA7Cit9 CisKK3ZvaWQgZmZfdmtfc2V0X3Blcm0oZW51bSBBVlBpeGVsRm9ybWF0IHBpeF9mbXQsIGludCBs dXRbNF0sIGludCBpbnYpCit7CisgICAgc3dpdGNoIChwaXhfZm10KSB7CisgICAgY2FzZSBBVl9Q SVhfRk1UX0dCUlA6CisgICAgY2FzZSBBVl9QSVhfRk1UX0dCUkFQOgorICAgIGNhc2UgQVZfUElY X0ZNVF9HQlJBUDEwOgorICAgIGNhc2UgQVZfUElYX0ZNVF9HQlJBUDEyOgorICAgIGNhc2UgQVZf UElYX0ZNVF9HQlJBUDE0OgorICAgIGNhc2UgQVZfUElYX0ZNVF9HQlJBUDE2OgorICAgIGNhc2Ug QVZfUElYX0ZNVF9HQlJQMTA6CisgICAgY2FzZSBBVl9QSVhfRk1UX0dCUlAxMjoKKyAgICBjYXNl IEFWX1BJWF9GTVRfR0JSUDE0OgorICAgIGNhc2UgQVZfUElYX0ZNVF9HQlJQMTY6CisgICAgY2Fz ZSBBVl9QSVhfRk1UX0dCUlBGMzI6CisgICAgY2FzZSBBVl9QSVhfRk1UX0dCUkFQMzI6CisgICAg Y2FzZSBBVl9QSVhfRk1UX0dCUkFQRjMyOgorICAgICAgICBsdXRbMF0gPSAxOworICAgICAgICBs dXRbMV0gPSAyOworICAgICAgICBsdXRbMl0gPSAwOworICAgICAgICBsdXRbM10gPSAzOworICAg ICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBsdXRbMF0gPSAwOworICAgICAgICBs dXRbMV0gPSAxOworICAgICAgICBsdXRbMl0gPSAyOworICAgICAgICBsdXRbM10gPSAzOworICAg ICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAoaW52KSB7CisgICAgICAgIGludCBsdXRfdG1w WzRdID0geyBsdXRbMF0sIGx1dFsxXSwgbHV0WzJdLCBsdXRbM10gfTsKKyAgICAgICAgZm9yIChp bnQgaSA9IDA7IGkgPCA0OyBpKyspCisgICAgICAgICAgICBsdXRbbHV0X3RtcFtpXV0gPSBpOwor ICAgIH0KKworICAgIHJldHVybjsKK30KKworY29uc3QgY2hhciAqZmZfdmtfc2hhZGVyX3JlcF9m bXQoZW51bSBBVlBpeGVsRm9ybWF0IHBpeF9mbXQsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBlbnVtIEZGVmtTaGFkZXJSZXBGb3JtYXQgcmVwX2ZtdCkKK3sKKyAgICBzd2l0Y2gg KHBpeF9mbXQpIHsKKyAgICBjYXNlIEFWX1BJWF9GTVRfUkdCQToKKyAgICBjYXNlIEFWX1BJWF9G TVRfQkdSQToKKyAgICBjYXNlIEFWX1BJWF9GTVRfUkdCMjQ6CisgICAgY2FzZSBBVl9QSVhfRk1U X0JHUjI0OgorICAgIGNhc2UgQVZfUElYX0ZNVF9CR1IwOgorICAgIGNhc2UgQVZfUElYX0ZNVF9S R0IwOgorICAgIGNhc2UgQVZfUElYX0ZNVF9SR0I1NjU6CisgICAgY2FzZSBBVl9QSVhfRk1UX0JH UjU2NToKKyAgICBjYXNlIEFWX1BJWF9GTVRfVVlWQToKKyAgICBjYXNlIEFWX1BJWF9GTVRfWVVZ VjQyMjoKKyAgICBjYXNlIEFWX1BJWF9GTVRfVVlWWTQyMjogeworICAgICAgICBjb25zdCBjaGFy ICpyZXBfdGFiW10gPSB7CisgICAgICAgICAgICBbRkZfVktfUkVQX05BVElWRV0gPSAicmdiYTh1 aSIsCisgICAgICAgICAgICBbRkZfVktfUkVQX0ZMT0FUXSA9ICJyZ2JhOCIsCisgICAgICAgICAg ICBbRkZfVktfUkVQX0lOVF0gPSAicmdiYThpIiwKKyAgICAgICAgICAgIFtGRl9WS19SRVBfVUlO VF0gPSAicmdiYTh1aSIsCisgICAgICAgIH07CisgICAgICAgIHJldHVybiByZXBfdGFiW3JlcF9m bXRdOworICAgIH0KKyAgICBjYXNlIEFWX1BJWF9GTVRfWDJSR0IxMDoKKyAgICBjYXNlIEFWX1BJ WF9GTVRfWDJCR1IxMDoKKyAgICBjYXNlIEFWX1BJWF9GTVRfWTIxMDoKKyAgICBjYXNlIEFWX1BJ WF9GTVRfWFYzMDogeworICAgICAgICBjb25zdCBjaGFyICpyZXBfdGFiW10gPSB7CisgICAgICAg ICAgICBbRkZfVktfUkVQX05BVElWRV0gPSAicmdiMTBfYTJ1aSIsCisgICAgICAgICAgICBbRkZf VktfUkVQX0ZMT0FUXSA9ICJyZ2IxMF9hMiIsCisgICAgICAgICAgICBbRkZfVktfUkVQX0lOVF0g PSBOVUxMLAorICAgICAgICAgICAgW0ZGX1ZLX1JFUF9VSU5UXSA9ICJyZ2IxMF9hMnVpIiwKKyAg ICAgICAgfTsKKyAgICAgICAgcmV0dXJuIHJlcF90YWJbcmVwX2ZtdF07CisgICAgfQorICAgIGNh c2UgQVZfUElYX0ZNVF9SR0I0ODoKKyAgICBjYXNlIEFWX1BJWF9GTVRfUkdCQTY0OgorICAgIGNh c2UgQVZfUElYX0ZNVF9ZMjEyOgorICAgIGNhc2UgQVZfUElYX0ZNVF9ZMjE2OgorICAgIGNhc2Ug QVZfUElYX0ZNVF9YVjM2OgorICAgIGNhc2UgQVZfUElYX0ZNVF9YVjQ4OiB7CisgICAgICAgIGNv bnN0IGNoYXIgKnJlcF90YWJbXSA9IHsKKyAgICAgICAgICAgIFtGRl9WS19SRVBfTkFUSVZFXSA9 ICJyZ2JhMTZ1aSIsCisgICAgICAgICAgICBbRkZfVktfUkVQX0ZMT0FUXSA9ICJyZ2JhMTYiLAor ICAgICAgICAgICAgW0ZGX1ZLX1JFUF9JTlRdID0gInJnYmExNmkiLAorICAgICAgICAgICAgW0ZG X1ZLX1JFUF9VSU5UXSA9ICJyZ2JhMTZ1aSIsCisgICAgICAgIH07CisgICAgICAgIHJldHVybiBy ZXBfdGFiW3JlcF9mbXRdOworICAgIH0KKyAgICBjYXNlIEFWX1BJWF9GTVRfUkdCRjMyOgorICAg IGNhc2UgQVZfUElYX0ZNVF9SR0JBRjMyOiB7CisgICAgICAgIGNvbnN0IGNoYXIgKnJlcF90YWJb XSA9IHsKKyAgICAgICAgICAgIFtGRl9WS19SRVBfTkFUSVZFXSA9ICJyZ2JhMzJmIiwKKyAgICAg ICAgICAgIFtGRl9WS19SRVBfRkxPQVRdID0gInJnYmEzMmYiLAorICAgICAgICAgICAgW0ZGX1ZL X1JFUF9JTlRdID0gInJnYmEzMmkiLAorICAgICAgICAgICAgW0ZGX1ZLX1JFUF9VSU5UXSA9ICJy Z2JhMzJ1aSIsCisgICAgICAgIH07CisgICAgICAgIHJldHVybiByZXBfdGFiW3JlcF9mbXRdOwor ICAgIH0KKyAgICBjYXNlIEFWX1BJWF9GTVRfUkdCOTY6CisgICAgY2FzZSBBVl9QSVhfRk1UX1JH QkExMjg6IHsKKyAgICAgICAgY29uc3QgY2hhciAqcmVwX3RhYltdID0geworICAgICAgICAgICAg W0ZGX1ZLX1JFUF9OQVRJVkVdID0gInJnYmEzMnVpIiwKKyAgICAgICAgICAgIFtGRl9WS19SRVBf RkxPQVRdID0gTlVMTCwKKyAgICAgICAgICAgIFtGRl9WS19SRVBfSU5UXSA9ICJyZ2JhMzJpIiwK KyAgICAgICAgICAgIFtGRl9WS19SRVBfVUlOVF0gPSAicmdiYTMydWkiLAorICAgICAgICB9Owor ICAgICAgICByZXR1cm4gcmVwX3RhYltyZXBfZm10XTsKKyAgICB9CisgICAgY2FzZSBBVl9QSVhf Rk1UX0dCUlA6CisgICAgY2FzZSBBVl9QSVhfRk1UX0dSQVk4OgorICAgIGNhc2UgQVZfUElYX0ZN VF9HQlJBUDoKKyAgICBjYXNlIEFWX1BJWF9GTVRfWVVWNDIwUDoKKyAgICBjYXNlIEFWX1BJWF9G TVRfWVVWNDIyUDoKKyAgICBjYXNlIEFWX1BJWF9GTVRfWVVWNDQ0UDoKKyAgICBjYXNlIEFWX1BJ WF9GTVRfWVVWQTQyMFA6CisgICAgY2FzZSBBVl9QSVhfRk1UX1lVVkE0MjJQOgorICAgIGNhc2Ug QVZfUElYX0ZNVF9ZVVZBNDQ0UDogeworICAgICAgICBjb25zdCBjaGFyICpyZXBfdGFiW10gPSB7 CisgICAgICAgICAgICBbRkZfVktfUkVQX05BVElWRV0gPSAicjh1aSIsCisgICAgICAgICAgICBb RkZfVktfUkVQX0ZMT0FUXSA9ICJyOCIsCisgICAgICAgICAgICBbRkZfVktfUkVQX0lOVF0gPSAi cjhpIiwKKyAgICAgICAgICAgIFtGRl9WS19SRVBfVUlOVF0gPSAicjh1aSIsCisgICAgICAgIH07 CisgICAgICAgIHJldHVybiByZXBfdGFiW3JlcF9mbXRdOworICAgIH07CisgICAgY2FzZSBBVl9Q SVhfRk1UX0dSQVkxMDoKKyAgICBjYXNlIEFWX1BJWF9GTVRfR1JBWTEyOgorICAgIGNhc2UgQVZf UElYX0ZNVF9HUkFZMTQ6CisgICAgY2FzZSBBVl9QSVhfRk1UX0dSQVkxNjoKKyAgICBjYXNlIEFW X1BJWF9GTVRfR0JSQVAxMDoKKyAgICBjYXNlIEFWX1BJWF9GTVRfR0JSQVAxMjoKKyAgICBjYXNl IEFWX1BJWF9GTVRfR0JSQVAxNDoKKyAgICBjYXNlIEFWX1BJWF9GTVRfR0JSQVAxNjoKKyAgICBj YXNlIEFWX1BJWF9GTVRfR0JSUDEwOgorICAgIGNhc2UgQVZfUElYX0ZNVF9HQlJQMTI6CisgICAg Y2FzZSBBVl9QSVhfRk1UX0dCUlAxNDoKKyAgICBjYXNlIEFWX1BJWF9GTVRfR0JSUDE2OgorICAg IGNhc2UgQVZfUElYX0ZNVF9ZVVY0MjBQMTA6CisgICAgY2FzZSBBVl9QSVhfRk1UX1lVVjQyMFAx MjoKKyAgICBjYXNlIEFWX1BJWF9GTVRfWVVWNDIwUDE2OgorICAgIGNhc2UgQVZfUElYX0ZNVF9Z VVY0MjJQMTA6CisgICAgY2FzZSBBVl9QSVhfRk1UX1lVVjQyMlAxMjoKKyAgICBjYXNlIEFWX1BJ WF9GTVRfWVVWNDIyUDE2OgorICAgIGNhc2UgQVZfUElYX0ZNVF9ZVVY0NDRQMTA6CisgICAgY2Fz ZSBBVl9QSVhfRk1UX1lVVjQ0NFAxMjoKKyAgICBjYXNlIEFWX1BJWF9GTVRfWVVWNDQ0UDE2Ogor ICAgIGNhc2UgQVZfUElYX0ZNVF9ZVVZBNDIwUDEwOgorICAgIGNhc2UgQVZfUElYX0ZNVF9ZVVZB NDIwUDE2OgorICAgIGNhc2UgQVZfUElYX0ZNVF9ZVVZBNDIyUDEwOgorICAgIGNhc2UgQVZfUElY X0ZNVF9ZVVZBNDIyUDEyOgorICAgIGNhc2UgQVZfUElYX0ZNVF9ZVVZBNDIyUDE2OgorICAgIGNh c2UgQVZfUElYX0ZNVF9ZVVZBNDQ0UDEwOgorICAgIGNhc2UgQVZfUElYX0ZNVF9ZVVZBNDQ0UDEy OgorICAgIGNhc2UgQVZfUElYX0ZNVF9ZVVZBNDQ0UDE2OgorICAgIGNhc2UgQVZfUElYX0ZNVF9C QVlFUl9SR0dCMTY6IHsKKyAgICAgICAgY29uc3QgY2hhciAqcmVwX3RhYltdID0geworICAgICAg ICAgICAgW0ZGX1ZLX1JFUF9OQVRJVkVdID0gInIxNnVpIiwKKyAgICAgICAgICAgIFtGRl9WS19S RVBfRkxPQVRdID0gInIxNmYiLAorICAgICAgICAgICAgW0ZGX1ZLX1JFUF9JTlRdID0gInIxNmki LAorICAgICAgICAgICAgW0ZGX1ZLX1JFUF9VSU5UXSA9ICJyMTZ1aSIsCisgICAgICAgIH07Cisg ICAgICAgIHJldHVybiByZXBfdGFiW3JlcF9mbXRdOworICAgIH07CisgICAgY2FzZSBBVl9QSVhf Rk1UX0dSQVkzMjoKKyAgICBjYXNlIEFWX1BJWF9GTVRfR1JBWUYzMjoKKyAgICBjYXNlIEFWX1BJ WF9GTVRfR0JSUEYzMjoKKyAgICBjYXNlIEFWX1BJWF9GTVRfR0JSQVBGMzI6IHsKKyAgICAgICAg Y29uc3QgY2hhciAqcmVwX3RhYltdID0geworICAgICAgICAgICAgW0ZGX1ZLX1JFUF9OQVRJVkVd ID0gInIzMmYiLAorICAgICAgICAgICAgW0ZGX1ZLX1JFUF9GTE9BVF0gPSAicjMyZiIsCisgICAg ICAgICAgICBbRkZfVktfUkVQX0lOVF0gPSAicjMyaSIsCisgICAgICAgICAgICBbRkZfVktfUkVQ X1VJTlRdID0gInIzMnVpIiwKKyAgICAgICAgfTsKKyAgICAgICAgcmV0dXJuIHJlcF90YWJbcmVw X2ZtdF07CisgICAgfTsKKyAgICBjYXNlIEFWX1BJWF9GTVRfR0JSQVAzMjogeworICAgICAgICBj b25zdCBjaGFyICpyZXBfdGFiW10gPSB7CisgICAgICAgICAgICBbRkZfVktfUkVQX05BVElWRV0g PSAicjMydWkiLAorICAgICAgICAgICAgW0ZGX1ZLX1JFUF9GTE9BVF0gPSBOVUxMLAorICAgICAg ICAgICAgW0ZGX1ZLX1JFUF9JTlRdID0gInIzMmkiLAorICAgICAgICAgICAgW0ZGX1ZLX1JFUF9V SU5UXSA9ICJyMzJ1aSIsCisgICAgICAgIH07CisgICAgICAgIHJldHVybiByZXBfdGFiW3JlcF9m bXRdOworICAgIH07CisgICAgY2FzZSBBVl9QSVhfRk1UX05WMTI6CisgICAgY2FzZSBBVl9QSVhf Rk1UX05WMTY6CisgICAgY2FzZSBBVl9QSVhfRk1UX05WMjQ6IHsKKyAgICAgICAgY29uc3QgY2hh ciAqcmVwX3RhYltdID0geworICAgICAgICAgICAgW0ZGX1ZLX1JFUF9OQVRJVkVdID0gInJnOHVp IiwKKyAgICAgICAgICAgIFtGRl9WS19SRVBfRkxPQVRdID0gInJnOCIsCisgICAgICAgICAgICBb RkZfVktfUkVQX0lOVF0gPSAicmc4aSIsCisgICAgICAgICAgICBbRkZfVktfUkVQX1VJTlRdID0g InJnOHVpIiwKKyAgICAgICAgfTsKKyAgICAgICAgcmV0dXJuIHJlcF90YWJbcmVwX2ZtdF07Cisg ICAgfTsKKyAgICBjYXNlIEFWX1BJWF9GTVRfUDAxMDoKKyAgICBjYXNlIEFWX1BJWF9GTVRfUDIx MDoKKyAgICBjYXNlIEFWX1BJWF9GTVRfUDQxMDogeworICAgICAgICBjb25zdCBjaGFyICpyZXBf dGFiW10gPSB7CisgICAgICAgICAgICBbRkZfVktfUkVQX05BVElWRV0gPSAicmdiMTBfYTJ1aSIs CisgICAgICAgICAgICBbRkZfVktfUkVQX0ZMT0FUXSA9ICJyZ2IxMF9hMiIsCisgICAgICAgICAg ICBbRkZfVktfUkVQX0lOVF0gPSBOVUxMLAorICAgICAgICAgICAgW0ZGX1ZLX1JFUF9VSU5UXSA9 ICJyZ2IxMF9hMnVpIiwKKyAgICAgICAgfTsKKyAgICAgICAgcmV0dXJuIHJlcF90YWJbcmVwX2Zt dF07CisgICAgfTsKKyAgICBjYXNlIEFWX1BJWF9GTVRfUDAxMjoKKyAgICBjYXNlIEFWX1BJWF9G TVRfUDAxNjoKKyAgICBjYXNlIEFWX1BJWF9GTVRfUDIxMjoKKyAgICBjYXNlIEFWX1BJWF9GTVRf UDIxNjoKKyAgICBjYXNlIEFWX1BJWF9GTVRfUDQxMjoKKyAgICBjYXNlIEFWX1BJWF9GTVRfUDQx NjogeworICAgICAgICBjb25zdCBjaGFyICpyZXBfdGFiW10gPSB7CisgICAgICAgICAgICBbRkZf VktfUkVQX05BVElWRV0gPSAicmcxNnVpIiwKKyAgICAgICAgICAgIFtGRl9WS19SRVBfRkxPQVRd ID0gInJnMTYiLAorICAgICAgICAgICAgW0ZGX1ZLX1JFUF9JTlRdID0gInJnMTZpIiwKKyAgICAg ICAgICAgIFtGRl9WS19SRVBfVUlOVF0gPSAicmcxNnVpIiwKKyAgICAgICAgfTsKKyAgICAgICAg cmV0dXJuIHJlcF90YWJbcmVwX2ZtdF07CisgICAgfTsKKyAgICBkZWZhdWx0OgorICAgICAgICBy ZXR1cm4gInJnYmEzMmYiOworICAgIH0KK30KKwordHlwZWRlZiBzdHJ1Y3QgSW1hZ2VWaWV3Q3R4 IHsKKyAgICBpbnQgbmJfdmlld3M7CisgICAgVmtJbWFnZVZpZXcgdmlld3NbXTsKK30gSW1hZ2VW aWV3Q3R4OworCitzdGF0aWMgdm9pZCBkZXN0cm95X2ltYWdldmlld3Modm9pZCAqb3BhcXVlLCB1 aW50OF90ICpkYXRhKQoreworICAgIEZGVnVsa2FuQ29udGV4dCAqcyA9IG9wYXF1ZTsKKyAgICBG RlZ1bGthbkZ1bmN0aW9ucyAqdmsgPSAmcy0+dmtmbjsKKyAgICBJbWFnZVZpZXdDdHggKml2ID0g KEltYWdlVmlld0N0eCAqKWRhdGE7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGl2LT5uYl92 aWV3czsgaSsrKQorICAgICAgICB2ay0+RGVzdHJveUltYWdlVmlldyhzLT5od2N0eC0+YWN0X2Rl diwgaXYtPnZpZXdzW2ldLCBzLT5od2N0eC0+YWxsb2MpOworCisgICAgYXZfZnJlZShpdik7Cit9 CisKK3N0YXRpYyBWa0Zvcm1hdCBtYXBfZm10X3RvX3JlcChWa0Zvcm1hdCBmbXQsIGVudW0gRkZW a1NoYWRlclJlcEZvcm1hdCByZXBfZm10KQoreworI2RlZmluZSBSRVBTX0ZNVChmbXQpIFwKKyAg ICBbRkZfVktfUkVQX05BVElWRV0gPSBmbXQgIyMgX1VJTlQsIFwKKyAgICBbRkZfVktfUkVQX0ZM T0FUXSAgPSBmbXQgIyMgX1VOT1JNLCBcCisgICAgW0ZGX1ZLX1JFUF9JTlRdICAgID0gZm10ICMj IF9TSU5ULCBcCisgICAgW0ZGX1ZLX1JFUF9VSU5UXSAgID0gZm10ICMjIF9VSU5ULAorCisjZGVm aW5lIFJFUFNfRk1UX1BBQ0soZm10LCBudW0pIFwKKyAgICBbRkZfVktfUkVQX05BVElWRV0gPSBm bXQgIyMgX1VJTlRfUEFDSyAjIyBudW0sIFwKKyAgICBbRkZfVktfUkVQX0ZMT0FUXSAgPSBmbXQg IyMgX1VOT1JNX1BBQ0sgIyMgbnVtLCBcCisgICAgW0ZGX1ZLX1JFUF9JTlRdICAgID0gZm10ICMj IF9TSU5UX1BBQ0sgIyMgbnVtLCBcCisgICAgW0ZGX1ZLX1JFUF9VSU5UXSAgID0gZm10ICMjIF9V SU5UX1BBQ0sgIyMgbnVtLAorCisgICAgY29uc3QgVmtGb3JtYXQgZm10c19tYXBbXVs0XSA9IHsK KyAgICAgICAgeyBSRVBTX0ZNVF9QQUNLKFZLX0ZPUk1BVF9BMkIxMEcxMFIxMCwgMzIpIH0sCisg ICAgICAgIHsgUkVQU19GTVRfUEFDSyhWS19GT1JNQVRfQTJSMTBHMTBCMTAsIDMyKSB9LAorICAg ICAgICB7CisgICAgICAgICAgICBWS19GT1JNQVRfQjVHNlI1X1VOT1JNX1BBQ0sxNiwKKyAgICAg ICAgICAgIFZLX0ZPUk1BVF9CNUc2UjVfVU5PUk1fUEFDSzE2LAorICAgICAgICAgICAgVktfRk9S TUFUX1VOREVGSU5FRCwKKyAgICAgICAgICAgIFZLX0ZPUk1BVF9VTkRFRklORUQsCisgICAgICAg IH0sCisgICAgICAgIHsKKyAgICAgICAgICAgIFZLX0ZPUk1BVF9SNUc2QjVfVU5PUk1fUEFDSzE2 LAorICAgICAgICAgICAgVktfRk9STUFUX1I1RzZCNV9VTk9STV9QQUNLMTYsCisgICAgICAgICAg ICBWS19GT1JNQVRfVU5ERUZJTkVELAorICAgICAgICAgICAgVktfRk9STUFUX1VOREVGSU5FRCwK KyAgICAgICAgfSwKKyAgICAgICAgeyBSRVBTX0ZNVChWS19GT1JNQVRfQjhHOFI4KSB9LAorICAg ICAgICB7IFJFUFNfRk1UKFZLX0ZPUk1BVF9COEc4UjhBOCkgfSwKKyAgICAgICAgeyBSRVBTX0ZN VChWS19GT1JNQVRfUjgpIH0sCisgICAgICAgIHsgUkVQU19GTVQoVktfRk9STUFUX1I4RzgpIH0s CisgICAgICAgIHsgUkVQU19GTVQoVktfRk9STUFUX1I4RzhCOCkgfSwKKyAgICAgICAgeyBSRVBT X0ZNVChWS19GT1JNQVRfUjhHOEI4QTgpIH0sCisgICAgICAgIHsgUkVQU19GTVQoVktfRk9STUFU X1IxNikgfSwKKyAgICAgICAgeyBSRVBTX0ZNVChWS19GT1JNQVRfUjE2RzE2KSB9LAorICAgICAg ICB7IFJFUFNfRk1UKFZLX0ZPUk1BVF9SMTZHMTZCMTYpIH0sCisgICAgICAgIHsgUkVQU19GTVQo VktfRk9STUFUX1IxNkcxNkIxNkExNikgfSwKKyAgICAgICAgeworICAgICAgICAgICAgVktfRk9S TUFUX1IzMl9VSU5ULAorICAgICAgICAgICAgVktfRk9STUFUX1IzMl9TRkxPQVQsCisgICAgICAg ICAgICBWS19GT1JNQVRfUjMyX1NJTlQsCisgICAgICAgICAgICBWS19GT1JNQVRfUjMyX1VJTlQs CisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgIFZLX0ZPUk1BVF9SMzJHMzJCMzJf U0ZMT0FULAorICAgICAgICAgICAgVktfRk9STUFUX1IzMkczMkIzMl9TRkxPQVQsCisgICAgICAg ICAgICBWS19GT1JNQVRfVU5ERUZJTkVELAorICAgICAgICAgICAgVktfRk9STUFUX1VOREVGSU5F RCwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgVktfRk9STUFUX1IzMkczMkIz MkEzMl9TRkxPQVQsCisgICAgICAgICAgICBWS19GT1JNQVRfUjMyRzMyQjMyQTMyX1NGTE9BVCwK KyAgICAgICAgICAgIFZLX0ZPUk1BVF9VTkRFRklORUQsCisgICAgICAgICAgICBWS19GT1JNQVRf VU5ERUZJTkVELAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICBWS19GT1JNQVRf UjMyRzMyQjMyX1VJTlQsCisgICAgICAgICAgICBWS19GT1JNQVRfVU5ERUZJTkVELAorICAgICAg ICAgICAgVktfRk9STUFUX1IzMkczMkIzMl9TSU5ULAorICAgICAgICAgICAgVktfRk9STUFUX1Iz MkczMkIzMl9VSU5ULAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICBWS19GT1JN QVRfUjMyRzMyQjMyQTMyX1VJTlQsCisgICAgICAgICAgICBWS19GT1JNQVRfVU5ERUZJTkVELAor ICAgICAgICAgICAgVktfRk9STUFUX1IzMkczMkIzMkEzMl9TSU5ULAorICAgICAgICAgICAgVktf Rk9STUFUX1IzMkczMkIzMkEzMl9VSU5ULAorICAgICAgICB9LAorICAgIH07CisjdW5kZWYgUkVQ U19GTVRfUEFDSworI3VuZGVmIFJFUFNfRk1UCisKKyAgICBpZiAoZm10ID09IFZLX0ZPUk1BVF9V TkRFRklORUQpCisgICAgICAgIHJldHVybiBWS19GT1JNQVRfVU5ERUZJTkVEOworCisgICAgZm9y IChpbnQgaSA9IDA7IGkgPCBGRl9BUlJBWV9FTEVNUyhmbXRzX21hcCk7IGkrKykgeworICAgICAg ICBpZiAoZm10c19tYXBbaV1bRkZfVktfUkVQX05BVElWRV0gPT0gZm10IHx8CisgICAgICAgICAg ICBmbXRzX21hcFtpXVtGRl9WS19SRVBfRkxPQVRdID09IGZtdCB8fAorICAgICAgICAgICAgZm10 c19tYXBbaV1bRkZfVktfUkVQX0lOVF0gPT0gZm10IHx8CisgICAgICAgICAgICBmbXRzX21hcFtp XVtGRl9WS19SRVBfVUlOVF0gPT0gZm10KQorICAgICAgICAgICAgcmV0dXJuIGZtdHNfbWFwW2ld W3JlcF9mbXRdOworICAgIH0KKworICAgIHJldHVybiBWS19GT1JNQVRfVU5ERUZJTkVEOworfQor CitpbnQgZmZfdmtfY3JlYXRlX2ltYWdldmlldyhGRlZ1bGthbkNvbnRleHQgKnMsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICBWa0ltYWdlVmlldyAqaW1nX3ZpZXcsIFZrSW1hZ2VBc3BlY3RG bGFncyAqYXNwZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgQVZGcmFtZSAqZiwgaW50 IHBsYW5lLCBlbnVtIEZGVmtTaGFkZXJSZXBGb3JtYXQgcmVwX2ZtdCkKK3sKKyAgICBWa1Jlc3Vs dCByZXQ7CisgICAgRkZWdWxrYW5GdW5jdGlvbnMgKnZrID0gJnMtPnZrZm47CisgICAgQVZIV0Zy YW1lc0NvbnRleHQgKmh3ZmMgPSAoQVZIV0ZyYW1lc0NvbnRleHQgKilmLT5od19mcmFtZXNfY3R4 LT5kYXRhOworICAgIEFWVnVsa2FuRnJhbWVzQ29udGV4dCAqdmtmYyA9IGh3ZmMtPmh3Y3R4Owor ICAgIGNvbnN0IFZrRm9ybWF0ICpyZXBfZm10cyA9IGF2X3ZrZm10X2Zyb21fcGl4Zm10KGh3ZmMt PnN3X2Zvcm1hdCk7CisgICAgQVZWa0ZyYW1lICp2a2YgPSAoQVZWa0ZyYW1lICopZi0+ZGF0YVsw XTsKKyAgICBjb25zdCBpbnQgbmJfaW1hZ2VzID0gZmZfdmtfY291bnRfaW1hZ2VzKHZrZik7CisK KyAgICBWa0ltYWdlVmlld1VzYWdlQ3JlYXRlSW5mbyB2aWV3X3VzYWdlX2luZm8gPSB7CisgICAg ICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX0lNQUdFX1ZJRVdfVVNBR0VfQ1JFQVRFX0lO Rk8sCisgICAgICAgIC51c2FnZSA9IHZrZmMtPnVzYWdlICYKKyAgICAgICAgICAgICAgICAgKH4o VktfSU1BR0VfVVNBR0VfVklERU9fRU5DT0RFX1NSQ19CSVRfS0hSIHwKKyAgICAgICAgICAgICAg ICAgICAgVktfSU1BR0VfVVNBR0VfVklERU9fREVDT0RFX0RTVF9CSVRfS0hSKSksCisgICAgfTsK KyAgICBWa0ltYWdlVmlld0NyZWF0ZUluZm8gdmlld19jcmVhdGVfaW5mbyA9IHsKKyAgICAgICAg LnNUeXBlICAgICAgPSBWS19TVFJVQ1RVUkVfVFlQRV9JTUFHRV9WSUVXX0NSRUFURV9JTkZPLAor ICAgICAgICAucE5leHQgICAgICA9ICZ2aWV3X3VzYWdlX2luZm8sCisgICAgICAgIC5pbWFnZSAg ICAgID0gdmtmLT5pbWdbRkZNSU4ocGxhbmUsIG5iX2ltYWdlcyAtIDEpXSwKKyAgICAgICAgLnZp ZXdUeXBlICAgPSBWS19JTUFHRV9WSUVXX1RZUEVfMkQsCisgICAgICAgIC5mb3JtYXQgICAgID0g bWFwX2ZtdF90b19yZXAocmVwX2ZtdHNbcGxhbmVdLCByZXBfZm10KSwKKyAgICAgICAgLmNvbXBv bmVudHMgPSBmZl9jb21wX2lkZW50aXR5X21hcCwKKyAgICAgICAgLnN1YnJlc291cmNlUmFuZ2Ug PSB7CisgICAgICAgICAgICAuYXNwZWN0TWFzayA9IGZmX3ZrX2FzcGVjdF9mbGFnKGYsIHBsYW5l KSwKKyAgICAgICAgICAgIC5sZXZlbENvdW50ID0gMSwKKyAgICAgICAgICAgIC5sYXllckNvdW50 ID0gMSwKKyAgICAgICAgfSwKKyAgICB9OworICAgIGlmICh2aWV3X2NyZWF0ZV9pbmZvLmZvcm1h dCA9PSBWS19GT1JNQVRfVU5ERUZJTkVEKSB7CisgICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJS T1IsICJVbmFibGUgdG8gZmluZCBhIGNvbXBhdGlibGUgcmVwcmVzZW50YXRpb24gIgorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAib2YgZm9ybWF0ICVpIGFuZCBtb2RlICVpXG4iLAor ICAgICAgICAgICAgICAgcmVwX2ZtdHNbcGxhbmVdLCByZXBfZm10KTsKKyAgICAgICAgcmV0dXJu IEFWRVJST1IoRUlOVkFMKTsKKyAgICB9CisKKyAgICByZXQgPSB2ay0+Q3JlYXRlSW1hZ2VWaWV3 KHMtPmh3Y3R4LT5hY3RfZGV2LCAmdmlld19jcmVhdGVfaW5mbywKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHMtPmh3Y3R4LT5hbGxvYywgaW1nX3ZpZXcpOworICAgIGlmIChyZXQgIT0g VktfU1VDQ0VTUykgeworICAgICAgICBhdl9sb2cocywgQVZfTE9HX0VSUk9SLCAiRmFpbGVkIHRv IGNyZWF0ZSBpbWFnZXZpZXc6ICVzXG4iLAorICAgICAgICAgICAgICAgZmZfdmtfcmV0MnN0cihy ZXQpKTsKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfRVhURVJOQUw7CisgICAgfQorCisgICAgKmFz cGVjdCA9IHZpZXdfY3JlYXRlX2luZm8uc3VicmVzb3VyY2VSYW5nZS5hc3BlY3RNYXNrOworCisg ICAgcmV0dXJuIDA7Cit9CisKK2ludCBmZl92a19jcmVhdGVfaW1hZ2V2aWV3cyhGRlZ1bGthbkNv bnRleHQgKnMsIEZGVmtFeGVjQ29udGV4dCAqZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICBWa0ltYWdlVmlldyB2aWV3c1tBVl9OVU1fREFUQV9QT0lOVEVSU10sCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgQVZGcmFtZSAqZiwgZW51bSBGRlZrU2hhZGVyUmVwRm9ybWF0IHJlcF9m bXQpCit7CisgICAgaW50IGVycjsKKyAgICBWa1Jlc3VsdCByZXQ7CisgICAgQVZCdWZmZXJSZWYg KmJ1ZjsKKyAgICBGRlZ1bGthbkZ1bmN0aW9ucyAqdmsgPSAmcy0+dmtmbjsKKyAgICBBVkhXRnJh bWVzQ29udGV4dCAqaHdmYyA9IChBVkhXRnJhbWVzQ29udGV4dCAqKWYtPmh3X2ZyYW1lc19jdHgt PmRhdGE7CisgICAgQVZWdWxrYW5GcmFtZXNDb250ZXh0ICp2a2ZjID0gaHdmYy0+aHdjdHg7Cisg ICAgY29uc3QgVmtGb3JtYXQgKnJlcF9mbXRzID0gYXZfdmtmbXRfZnJvbV9waXhmbXQoaHdmYy0+ c3dfZm9ybWF0KTsKKyAgICBBVlZrRnJhbWUgKnZrZiA9IChBVlZrRnJhbWUgKilmLT5kYXRhWzBd OworICAgIGNvbnN0IGludCBuYl9pbWFnZXMgPSBmZl92a19jb3VudF9pbWFnZXModmtmKTsKKyAg ICBjb25zdCBpbnQgbmJfcGxhbmVzID0gYXZfcGl4X2ZtdF9jb3VudF9wbGFuZXMoaHdmYy0+c3df Zm9ybWF0KTsKKworICAgIEltYWdlVmlld0N0eCAqaXY7CisgICAgY29uc3Qgc2l6ZV90IGJ1Zl9z aXplID0gc2l6ZW9mKCppdikgKyBuYl9wbGFuZXMqc2l6ZW9mKFZrSW1hZ2VWaWV3KTsKKyAgICBp diA9IGF2X21hbGxvY3ooYnVmX3NpemUpOworICAgIGlmICghaXYpCisgICAgICAgIHJldHVybiBB VkVSUk9SKEVOT01FTSk7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG5iX3BsYW5lczsgaSsr KSB7CisgICAgICAgIFZrSW1hZ2VWaWV3VXNhZ2VDcmVhdGVJbmZvIHZpZXdfdXNhZ2VfaW5mbyA9 IHsKKyAgICAgICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX0lNQUdFX1ZJRVdfVVNB R0VfQ1JFQVRFX0lORk8sCisgICAgICAgICAgICAudXNhZ2UgPSB2a2ZjLT51c2FnZSAmCisgICAg ICAgICAgICAgICAgICAgICAofihWS19JTUFHRV9VU0FHRV9WSURFT19FTkNPREVfU1JDX0JJVF9L SFIgfAorICAgICAgICAgICAgICAgICAgICAgICAgVktfSU1BR0VfVVNBR0VfVklERU9fREVDT0RF X0RTVF9CSVRfS0hSKSksCisgICAgICAgIH07CisgICAgICAgIFZrSW1hZ2VWaWV3Q3JlYXRlSW5m byB2aWV3X2NyZWF0ZV9pbmZvID0geworICAgICAgICAgICAgLnNUeXBlICAgICAgPSBWS19TVFJV Q1RVUkVfVFlQRV9JTUFHRV9WSUVXX0NSRUFURV9JTkZPLAorICAgICAgICAgICAgLnBOZXh0ICAg ICAgPSAmdmlld191c2FnZV9pbmZvLAorICAgICAgICAgICAgLmltYWdlICAgICAgPSB2a2YtPmlt Z1tGRk1JTihpLCBuYl9pbWFnZXMgLSAxKV0sCisgICAgICAgICAgICAudmlld1R5cGUgICA9IFZL X0lNQUdFX1ZJRVdfVFlQRV8yRCwKKyAgICAgICAgICAgIC5mb3JtYXQgICAgID0gbWFwX2ZtdF90 b19yZXAocmVwX2ZtdHNbaV0sIHJlcF9mbXQpLAorICAgICAgICAgICAgLmNvbXBvbmVudHMgPSBm Zl9jb21wX2lkZW50aXR5X21hcCwKKyAgICAgICAgICAgIC5zdWJyZXNvdXJjZVJhbmdlID0gewor ICAgICAgICAgICAgICAgIC5hc3BlY3RNYXNrID0gZmZfdmtfYXNwZWN0X2ZsYWcoZiwgaSksCisg ICAgICAgICAgICAgICAgLmxldmVsQ291bnQgPSAxLAorICAgICAgICAgICAgICAgIC5sYXllckNv dW50ID0gMSwKKyAgICAgICAgICAgIH0sCisgICAgICAgIH07CisgICAgICAgIGlmICh2aWV3X2Ny ZWF0ZV9pbmZvLmZvcm1hdCA9PSBWS19GT1JNQVRfVU5ERUZJTkVEKSB7CisgICAgICAgICAgICBh dl9sb2cocywgQVZfTE9HX0VSUk9SLCAiVW5hYmxlIHRvIGZpbmQgYSBjb21wYXRpYmxlIHJlcHJl c2VudGF0aW9uICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvZiBmb3Jt YXQgJWkgYW5kIG1vZGUgJWlcbiIsCisgICAgICAgICAgICAgICAgICAgcmVwX2ZtdHNbaV0sIHJl cF9mbXQpOworICAgICAgICAgICAgZXJyID0gQVZFUlJPUihFSU5WQUwpOworICAgICAgICAgICAg Z290byBmYWlsOworICAgICAgICB9CisKKyAgICAgICAgcmV0ID0gdmstPkNyZWF0ZUltYWdlVmll dyhzLT5od2N0eC0+YWN0X2RldiwgJnZpZXdfY3JlYXRlX2luZm8sCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcy0+aHdjdHgtPmFsbG9jLCAmaXYtPnZpZXdzW2ldKTsKKyAgICAg ICAgaWYgKHJldCAhPSBWS19TVUNDRVNTKSB7CisgICAgICAgICAgICBhdl9sb2cocywgQVZfTE9H X0VSUk9SLCAiRmFpbGVkIHRvIGNyZWF0ZSBpbWFnZXZpZXc6ICVzXG4iLAorICAgICAgICAgICAg ICAgICAgIGZmX3ZrX3JldDJzdHIocmV0KSk7CisgICAgICAgICAgICBlcnIgPSBBVkVSUk9SX0VY VEVSTkFMOworICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICB9CisKKyAgICAgICAgaXYt Pm5iX3ZpZXdzKys7CisgICAgfQorCisgICAgYnVmID0gYXZfYnVmZmVyX2NyZWF0ZSgodWludDhf dCAqKWl2LCBidWZfc2l6ZSwgZGVzdHJveV9pbWFnZXZpZXdzLCBzLCAwKTsKKyAgICBpZiAoIWJ1 ZikgeworICAgICAgICBlcnIgPSBBVkVSUk9SKEVOT01FTSk7CisgICAgICAgIGdvdG8gZmFpbDsK KyAgICB9CisKKyAgICAvKiBBZGQgdG8gcXVldWUgZGVwZW5kZW5jaWVzICovCisgICAgZXJyID0g ZmZfdmtfZXhlY19hZGRfZGVwX2J1ZihzLCBlLCAmYnVmLCAxLCAwKTsKKyAgICBpZiAoZXJyIDwg MCkKKyAgICAgICAgYXZfYnVmZmVyX3VucmVmKCZidWYpOworCisgICAgbWVtY3B5KHZpZXdzLCBp di0+dmlld3MsIG5iX3BsYW5lcypzaXplb2YoKnZpZXdzKSk7CisKKyAgICByZXR1cm4gZXJyOwor CitmYWlsOgorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaXYtPm5iX3ZpZXdzOyBpKyspCisgICAg ICAgIHZrLT5EZXN0cm95SW1hZ2VWaWV3KHMtPmh3Y3R4LT5hY3RfZGV2LCBpdi0+dmlld3NbaV0s IHMtPmh3Y3R4LT5hbGxvYyk7CisgICAgYXZfZnJlZShpdik7CisgICAgcmV0dXJuIGVycjsKK30K Kwordm9pZCBmZl92a19mcmFtZV9iYXJyaWVyKEZGVnVsa2FuQ29udGV4dCAqcywgRkZWa0V4ZWND b250ZXh0ICplLAorICAgICAgICAgICAgICAgICAgICAgICAgIEFWRnJhbWUgKnBpYywgVmtJbWFn ZU1lbW9yeUJhcnJpZXIyICpiYXIsIGludCAqbmJfYmFyLAorICAgICAgICAgICAgICAgICAgICAg ICAgIFZrUGlwZWxpbmVTdGFnZUZsYWdzIHNyY19zdGFnZSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICBWa1BpcGVsaW5lU3RhZ2VGbGFncyBkc3Rfc3RhZ2UsCisgICAgICAgICAgICAgICAgICAg ICAgICAgVmtBY2Nlc3NGbGFnQml0cyAgICAgbmV3X2FjY2VzcywKKyAgICAgICAgICAgICAgICAg ICAgICAgICBWa0ltYWdlTGF5b3V0ICAgICAgICBuZXdfbGF5b3V0LAorICAgICAgICAgICAgICAg ICAgICAgICAgIHVpbnQzMl90ICAgICAgICAgICAgIG5ld19xZikKK3sKKyAgICBpbnQgZm91bmQg PSAtMTsKKyAgICBBVlZrRnJhbWUgKnZrZiA9IChBVlZrRnJhbWUgKilwaWMtPmRhdGFbMF07Cisg ICAgY29uc3QgaW50IG5iX2ltYWdlcyA9IGZmX3ZrX2NvdW50X2ltYWdlcyh2a2YpOworICAgIGZv ciAoaW50IGkgPSAwOyBpIDwgZS0+bmJfZnJhbWVfZGVwczsgaSsrKQorICAgICAgICBpZiAoZS0+ ZnJhbWVfZGVwc1tpXS0+ZGF0YVswXSA9PSBwaWMtPmRhdGFbMF0pIHsKKyAgICAgICAgICAgIGlm IChlLT5mcmFtZV91cGRhdGVbaV0pCisgICAgICAgICAgICAgICAgZm91bmQgPSBpOworICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmJfaW1h Z2VzOyBpKyspIHsKKyAgICAgICAgYmFyWypuYl9iYXJdID0gKFZrSW1hZ2VNZW1vcnlCYXJyaWVy MikgeworICAgICAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfSU1BR0VfTUVNT1JZ X0JBUlJJRVJfMiwKKyAgICAgICAgICAgIC5wTmV4dCA9IE5VTEwsCisgICAgICAgICAgICAuc3Jj U3RhZ2VNYXNrID0gc3JjX3N0YWdlLAorICAgICAgICAgICAgLmRzdFN0YWdlTWFzayA9IGRzdF9z dGFnZSwKKyAgICAgICAgICAgIC5zcmNBY2Nlc3NNYXNrID0gZm91bmQgPj0gMCA/IGUtPmFjY2Vz c19kc3RbZm91bmRdIDogdmtmLT5hY2Nlc3NbaV0sCisgICAgICAgICAgICAuZHN0QWNjZXNzTWFz ayA9IG5ld19hY2Nlc3MsCisgICAgICAgICAgICAub2xkTGF5b3V0ID0gZm91bmQgPj0gMCA/IGUt PmxheW91dF9kc3RbZm91bmRdIDogdmtmLT5sYXlvdXRbMF0sCisgICAgICAgICAgICAubmV3TGF5 b3V0ID0gbmV3X2xheW91dCwKKyAgICAgICAgICAgIC5zcmNRdWV1ZUZhbWlseUluZGV4ID0gZm91 bmQgPj0gMCA/IGUtPnF1ZXVlX2ZhbWlseV9kc3RbZm91bmRdIDogdmtmLT5xdWV1ZV9mYW1pbHlb MF0sCisgICAgICAgICAgICAuZHN0UXVldWVGYW1pbHlJbmRleCA9IG5ld19xZiwKKyAgICAgICAg ICAgIC5pbWFnZSA9IHZrZi0+aW1nW2ldLAorICAgICAgICAgICAgLnN1YnJlc291cmNlUmFuZ2Ug PSAoVmtJbWFnZVN1YnJlc291cmNlUmFuZ2UpIHsKKyAgICAgICAgICAgICAgICAuYXNwZWN0TWFz ayA9IFZLX0lNQUdFX0FTUEVDVF9DT0xPUl9CSVQsCisgICAgICAgICAgICAgICAgLmxheWVyQ291 bnQgPSAxLAorICAgICAgICAgICAgICAgIC5sZXZlbENvdW50ID0gMSwKKyAgICAgICAgICAgIH0s CisgICAgICAgIH07CisgICAgICAgICpuYl9iYXIgKz0gMTsKKyAgICB9CisKKyAgICBmZl92a19l eGVjX3VwZGF0ZV9mcmFtZShzLCBlLCBwaWMsICZiYXJbKm5iX2JhciAtIG5iX2ltYWdlc10sIE5V TEwpOworfQorCitpbnQgZmZfdmtfc2hhZGVyX2luaXQoRkZWdWxrYW5Db250ZXh0ICpzLCBGRlZ1 bGthblNoYWRlciAqc2hkLCBjb25zdCBjaGFyICpuYW1lLAorICAgICAgICAgICAgICAgICAgICAg IFZrUGlwZWxpbmVTdGFnZUZsYWdzIHN0YWdlLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IGNoYXIgKmV4dGVuc2lvbnNbXSwgaW50IG5iX2V4dGVuc2lvbnMsCisgICAgICAgICAgICAgICAg ICAgICAgaW50IGxnX3gsIGludCBsZ195LCBpbnQgbGdfeiwKKyAgICAgICAgICAgICAgICAgICAg ICB1aW50MzJfdCByZXF1aXJlZF9zdWJncm91cF9zaXplKQoreworICAgIGF2X2JwcmludF9pbml0 KCZzaGQtPnNyYywgMCwgQVZfQlBSSU5UX1NJWkVfVU5MSU1JVEVEKTsKKworICAgIHNoZC0+bmFt ZSA9IG5hbWU7CisgICAgc2hkLT5zdGFnZSA9IHN0YWdlOworICAgIHNoZC0+bGdfc2l6ZVswXSA9 IGxnX3g7CisgICAgc2hkLT5sZ19zaXplWzFdID0gbGdfeTsKKyAgICBzaGQtPmxnX3NpemVbMl0g PSBsZ196OworCisgICAgc3dpdGNoIChzaGQtPnN0YWdlKSB7CisgICAgY2FzZSBWS19TSEFERVJf U1RBR0VfQU5ZX0hJVF9CSVRfS0hSOgorICAgIGNhc2UgVktfU0hBREVSX1NUQUdFX0NBTExBQkxF X0JJVF9LSFI6CisgICAgY2FzZSBWS19TSEFERVJfU1RBR0VfQ0xPU0VTVF9ISVRfQklUX0tIUjoK KyAgICBjYXNlIFZLX1NIQURFUl9TVEFHRV9JTlRFUlNFQ1RJT05fQklUX0tIUjoKKyAgICBjYXNl IFZLX1NIQURFUl9TVEFHRV9NSVNTX0JJVF9LSFI6CisgICAgY2FzZSBWS19TSEFERVJfU1RBR0Vf UkFZR0VOX0JJVF9LSFI6CisgICAgICAgIHNoZC0+YmluZF9wb2ludCA9IFZLX1BJUEVMSU5FX0JJ TkRfUE9JTlRfUkFZX1RSQUNJTkdfS0hSOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFZLX1NI QURFUl9TVEFHRV9DT01QVVRFX0JJVDoKKyAgICAgICAgc2hkLT5iaW5kX3BvaW50ID0gVktfUElQ RUxJTkVfQklORF9QT0lOVF9DT01QVVRFOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0Ogor ICAgICAgICBzaGQtPmJpbmRfcG9pbnQgPSBWS19QSVBFTElORV9CSU5EX1BPSU5UX0dSQVBISUNT OworICAgICAgICBicmVhazsKKyAgICB9OworCisgICAgaWYgKHJlcXVpcmVkX3N1Ymdyb3VwX3Np emUpIHsKKyAgICAgICAgc2hkLT5zdWJncm91cF9pbmZvLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZ UEVfUElQRUxJTkVfU0hBREVSX1NUQUdFX1JFUVVJUkVEX1NVQkdST1VQX1NJWkVfQ1JFQVRFX0lO Rk87CisgICAgICAgIHNoZC0+c3ViZ3JvdXBfaW5mby5yZXF1aXJlZFN1Ymdyb3VwU2l6ZSA9IHJl cXVpcmVkX3N1Ymdyb3VwX3NpemU7CisgICAgfQorCisgICAgYXZfYnByaW50Zigmc2hkLT5zcmMs ICIvKiAlcyBzaGFkZXI6ICVzICovXG4iLAorICAgICAgICAgICAgICAgKHN0YWdlID09IFZLX1NI QURFUl9TVEFHRV9UQVNLX0JJVF9FWFQgfHwKKyAgICAgICAgICAgICAgICBzdGFnZSA9PSBWS19T SEFERVJfU1RBR0VfTUVTSF9CSVRfRVhUKSA/CisgICAgICAgICAgICAgICAiTWVzaCIgOgorICAg ICAgICAgICAgICAgKHNoZC0+YmluZF9wb2ludCA9PSBWS19QSVBFTElORV9CSU5EX1BPSU5UX1JB WV9UUkFDSU5HX0tIUikgPworICAgICAgICAgICAgICAgIlJheXRyYWNlIiA6CisgICAgICAgICAg ICAgICAoc2hkLT5iaW5kX3BvaW50ID09IFZLX1BJUEVMSU5FX0JJTkRfUE9JTlRfQ09NUFVURSkg PworICAgICAgICAgICAgICAgIkNvbXB1dGUiIDogIkdyYXBoaWNzIiwKKyAgICAgICAgICAgICAg IG5hbWUpOworICAgIEdMU0xGKDAsICN2ZXJzaW9uICVpICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAsNDYwKTsKKyAgICBHTFNMQygwLCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7 CisKKyAgICAvKiBDb21tb24gdXRpbGl0aWVzICovCisgICAgR0xTTEMoMCwgI2RlZmluZSBJU19X SVRISU4odjEsIHYyKSAoKHYxLnggPCB2Mi54KSAmJiAodjEueSA8IHYyLnkpKSAgICAgICApOwor ICAgIEdMU0xDKDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBHTFNMQygwLCAjZXh0ZW5zaW9uIEdMX0VYVF9z Y2FsYXJfYmxvY2tfbGF5b3V0IDogcmVxdWlyZSAgICAgICAgICAgICAgICAgICk7CisgICAgR0xT TEMoMCwgI2V4dGVuc2lvbiBHTF9FWFRfc2hhZGVyX2V4cGxpY2l0X2FyaXRobWV0aWNfdHlwZXMg OiByZXF1aXJlICAgICApOworICAgIEdMU0xDKDAsICNleHRlbnNpb24gR0xfRVhUX2NvbnRyb2xf Zmxvd19hdHRyaWJ1dGVzIDogcmVxdWlyZSAgICAgICAgICAgICAgKTsKKyAgICBHTFNMQygwLCAj ZXh0ZW5zaW9uIEdMX0VYVF9zaGFkZXJfaW1hZ2VfbG9hZF9mb3JtYXR0ZWQgOiByZXF1aXJlICAg ICAgICAgICk7CisgICAgaWYgKHMtPmV4dGVuc2lvbnMgJiBGRl9WS19FWFRfRVhQRUNUX0FTU1VN RSkgeworICAgICAgICBHTFNMQygwLCAjZXh0ZW5zaW9uIEdMX0VYVF9leHBlY3RfYXNzdW1lIDog cmVxdWlyZSAgICAgICAgICAgICAgICAgICAgKTsKKyAgICB9IGVsc2UgeworICAgICAgICBHTFNM QygwLCAjZGVmaW5lIGFzc3VtZUVYVCh4KSAoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKTsKKyAgICAgICAgR0xTTEMoMCwgI2RlZmluZSBleHBlY3RFWFQoeCwgYykgKHgp ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgfQorICAgIGlmICgocy0+ ZXh0ZW5zaW9ucyAmIEZGX1ZLX0VYVF9ERUJVR19VVElMUykgJiYKKyAgICAgICAgKHMtPmV4dGVu c2lvbnMgJiBGRl9WS19FWFRfUkVMQVhFRF9FWFRFTkRFRF9JTlNUUikpIHsKKyAgICAgICAgR0xT TEMoMCwgI2V4dGVuc2lvbiBHTF9FWFRfZGVidWdfcHJpbnRmIDogcmVxdWlyZSAgICAgICAgICAg ICAgICAgICAgICk7CisgICAgICAgIEdMU0xDKDAsICNkZWZpbmUgREVCVUcgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgIH0KKworICAgIGlmIChz dGFnZSA9PSBWS19TSEFERVJfU1RBR0VfVEFTS19CSVRfRVhUIHx8CisgICAgICAgIHN0YWdlID09 IFZLX1NIQURFUl9TVEFHRV9NRVNIX0JJVF9FWFQpCisgICAgICAgIEdMU0xDKDAsICNleHRlbnNp b24gR0xfRVhUX21lc2hfc2hhZGVyIDogcmVxdWlyZSAgICAgICAgICAgICAgICAgICAgICApOwor CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuYl9leHRlbnNpb25zOyBpKyspCisgICAgICAgIEdM U0xGKDAsICNleHRlbnNpb24gJXMgOiAlcyAgICAgICAgICAgICAgICAgICxleHRlbnNpb25zW2ld LCAicmVxdWlyZSIpOworICAgIEdMU0xDKDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKworICAgIEdMU0xGKDAsIGxh eW91dCAobG9jYWxfc2l6ZV94ID0gJWksIGxvY2FsX3NpemVfeSA9ICVpLCBsb2NhbF9zaXplX3og PSAlaSkgaW47CisgICAgICAgICAgLCBzaGQtPmxnX3NpemVbMF0sIHNoZC0+bGdfc2l6ZVsxXSwg c2hkLT5sZ19zaXplWzJdKTsKKyAgICBHTFNMQygwLCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisKKyAgICByZXR1cm4g MDsKK30KKwordm9pZCBmZl92a19zaGFkZXJfcHJpbnQodm9pZCAqY3R4LCBGRlZ1bGthblNoYWRl ciAqc2hkLCBpbnQgcHJpbykKK3sKKyAgICBpbnQgbGluZSA9IDA7CisgICAgY29uc3QgY2hhciAq cCA9IHNoZC0+c3JjLnN0cjsKKyAgICBjb25zdCBjaGFyICpzdGFydCA9IHA7CisgICAgY29uc3Qg c2l6ZV90IGxlbiA9IHN0cmxlbihwKTsKKworICAgIEFWQlByaW50IGJ1ZjsKKyAgICBhdl9icHJp bnRfaW5pdCgmYnVmLCAwLCBBVl9CUFJJTlRfU0laRV9VTkxJTUlURUQpOworCisgICAgZm9yIChp bnQgaSA9IDA7IGkgPCBsZW47IGkrKykgeworICAgICAgICBpZiAocFtpXSA9PSAnXG4nKSB7Cisg ICAgICAgICAgICBhdl9icHJpbnRmKCZidWYsICIlaVx0IiwgKytsaW5lKTsKKyAgICAgICAgICAg IGF2X2JwcmludF9hcHBlbmRfZGF0YSgmYnVmLCBzdGFydCwgJnBbaV0gLSBzdGFydCArIDEpOwor ICAgICAgICAgICAgc3RhcnQgPSAmcFtpICsgMV07CisgICAgICAgIH0KKyAgICB9CisKKyAgICBh dl9sb2coY3R4LCBwcmlvLCAiU2hhZGVyICVzOiBcbiVzIiwgc2hkLT5uYW1lLCBidWYuc3RyKTsK KyAgICBhdl9icHJpbnRfZmluYWxpemUoJmJ1ZiwgTlVMTCk7Cit9CisKK3N0YXRpYyBpbnQgaW5p dF9waXBlbGluZV9sYXlvdXQoRkZWdWxrYW5Db250ZXh0ICpzLCBGRlZ1bGthblNoYWRlciAqc2hk KQoreworICAgIFZrUmVzdWx0IHJldDsKKyAgICBGRlZ1bGthbkZ1bmN0aW9ucyAqdmsgPSAmcy0+ dmtmbjsKKyAgICBWa1BpcGVsaW5lTGF5b3V0Q3JlYXRlSW5mbyBwaXBlbGluZV9sYXlvdXRfaW5m bzsKKworICAgIC8qIEZpbmFsbHkgY3JlYXRlIHRoZSBwaXBlbGluZSBsYXlvdXQgKi8KKyAgICBw aXBlbGluZV9sYXlvdXRfaW5mbyA9IChWa1BpcGVsaW5lTGF5b3V0Q3JlYXRlSW5mbykgeworICAg ICAgICAuc1R5cGUgICAgICAgICAgICAgICAgICA9IFZLX1NUUlVDVFVSRV9UWVBFX1BJUEVMSU5F X0xBWU9VVF9DUkVBVEVfSU5GTywKKyAgICAgICAgLnBTZXRMYXlvdXRzICAgICAgICAgICAgPSBz aGQtPmRlc2NfbGF5b3V0LAorICAgICAgICAuc2V0TGF5b3V0Q291bnQgICAgICAgICA9IHNoZC0+ bmJfZGVzY3JpcHRvcl9zZXRzLAorICAgICAgICAucHVzaENvbnN0YW50UmFuZ2VDb3VudCA9IHNo ZC0+cHVzaF9jb25zdHNfbnVtLAorICAgICAgICAucFB1c2hDb25zdGFudFJhbmdlcyAgICA9IHNo ZC0+cHVzaF9jb25zdHMsCisgICAgfTsKKworICAgIHJldCA9IHZrLT5DcmVhdGVQaXBlbGluZUxh eW91dChzLT5od2N0eC0+YWN0X2RldiwgJnBpcGVsaW5lX2xheW91dF9pbmZvLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzLT5od2N0eC0+YWxsb2MsICZzaGQtPnBpcGVsaW5l X2xheW91dCk7CisgICAgaWYgKHJldCAhPSBWS19TVUNDRVNTKSB7CisgICAgICAgIGF2X2xvZyhz LCBBVl9MT0dfRVJST1IsICJVbmFibGUgdG8gaW5pdCBwaXBlbGluZSBsYXlvdXQ6ICVzXG4iLAor ICAgICAgICAgICAgICAgZmZfdmtfcmV0MnN0cihyZXQpKTsKKyAgICAgICAgcmV0dXJuIEFWRVJS T1JfRVhURVJOQUw7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY3Jl YXRlX3NoYWRlcl9tb2R1bGUoRkZWdWxrYW5Db250ZXh0ICpzLCBGRlZ1bGthblNoYWRlciAqc2hk LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWa1NoYWRlck1vZHVsZSAqbW9kLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpzcGlydiwgc2l6ZV90IHNw aXJ2X2xlbikKK3sKKyAgICBWa1Jlc3VsdCByZXQ7CisgICAgRkZWdWxrYW5GdW5jdGlvbnMgKnZr ID0gJnMtPnZrZm47CisKKyAgICBWa1NoYWRlck1vZHVsZUNyZWF0ZUluZm8gc2hhZGVyX21vZHVs ZV9pbmZvID0geworICAgICAgICAuc1R5cGUgICAgPSBWS19TVFJVQ1RVUkVfVFlQRV9TSEFERVJf TU9EVUxFX0NSRUFURV9JTkZPLAorICAgICAgICAucE5leHQgICAgPSBOVUxMLAorICAgICAgICAu ZmxhZ3MgICAgPSAweDAsCisgICAgICAgIC5wQ29kZSAgICA9ICh2b2lkICopc3BpcnYsCisgICAg ICAgIC5jb2RlU2l6ZSA9IHNwaXJ2X2xlbiwKKyAgICB9OworCisgICAgcmV0ID0gdmstPkNyZWF0 ZVNoYWRlck1vZHVsZShzLT5od2N0eC0+YWN0X2RldiwgJnNoYWRlcl9tb2R1bGVfaW5mbywKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMtPmh3Y3R4LT5hbGxvYywgbW9kKTsKKyAg ICBpZiAocmV0ICE9IFZLX1NVQ0NFU1MpIHsKKyAgICAgICAgYXZfbG9nKHMsIEFWX0xPR19FUlJP UiwgIkVycm9yIGNyZWF0aW5nIHNoYWRlciBtb2R1bGU6ICVzXG4iLAorICAgICAgICAgICAgICAg ZmZfdmtfcmV0MnN0cihyZXQpKTsKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfRVhURVJOQUw7Cisg ICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaW5pdF9jb21wdXRlX3BpcGVs aW5lKEZGVnVsa2FuQ29udGV4dCAqcywgRkZWdWxrYW5TaGFkZXIgKnNoZCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFZrU2hhZGVyTW9kdWxlIG1vZCwgY29uc3QgY2hhciAqZW50 cnlwb2ludCkKK3sKKyAgICBWa1Jlc3VsdCByZXQ7CisgICAgRkZWdWxrYW5GdW5jdGlvbnMgKnZr ID0gJnMtPnZrZm47CisKKyAgICBWa0NvbXB1dGVQaXBlbGluZUNyZWF0ZUluZm8gcGlwZWxpbmVf Y3JlYXRlX2luZm8gPSB7CisgICAgICAgIC5zVHlwZSAgPSBWS19TVFJVQ1RVUkVfVFlQRV9DT01Q VVRFX1BJUEVMSU5FX0NSRUFURV9JTkZPLAorICAgICAgICAuZmxhZ3MgPSAocy0+ZXh0ZW5zaW9u cyAmIEZGX1ZLX0VYVF9ERVNDUklQVE9SX0JVRkZFUikgPworICAgICAgICAgICAgICAgICBWS19Q SVBFTElORV9DUkVBVEVfREVTQ1JJUFRPUl9CVUZGRVJfQklUX0VYVCA6IDB4MCwKKyAgICAgICAg LmxheW91dCA9IHNoZC0+cGlwZWxpbmVfbGF5b3V0LAorICAgICAgICAuc3RhZ2UgPSAoVmtQaXBl bGluZVNoYWRlclN0YWdlQ3JlYXRlSW5mbykgeworICAgICAgICAgICAgLnNUeXBlID0gVktfU1RS VUNUVVJFX1RZUEVfUElQRUxJTkVfU0hBREVSX1NUQUdFX0NSRUFURV9JTkZPLAorICAgICAgICAg ICAgLnBOZXh0ID0gc2hkLT5zdWJncm91cF9pbmZvLnJlcXVpcmVkU3ViZ3JvdXBTaXplID8KKyAg ICAgICAgICAgICAgICAgICAgICZzaGQtPnN1Ymdyb3VwX2luZm8gOiBOVUxMLAorICAgICAgICAg ICAgLnBOYW1lID0gZW50cnlwb2ludCwKKyAgICAgICAgICAgIC5mbGFncyA9IHNoZC0+c3ViZ3Jv dXBfaW5mby5yZXF1aXJlZFN1Ymdyb3VwU2l6ZSA/CisgICAgICAgICAgICAgICAgICAgICBWS19Q SVBFTElORV9TSEFERVJfU1RBR0VfQ1JFQVRFX1JFUVVJUkVfRlVMTF9TVUJHUk9VUFNfQklUIDog MHgwLAorICAgICAgICAgICAgLnN0YWdlID0gc2hkLT5zdGFnZSwKKyAgICAgICAgICAgIC5tb2R1 bGUgPSBtb2QsCisgICAgICAgIH0sCisgICAgfTsKKworICAgIHJldCA9IHZrLT5DcmVhdGVDb21w dXRlUGlwZWxpbmVzKHMtPmh3Y3R4LT5hY3RfZGV2LCBWS19OVUxMX0hBTkRMRSwgMSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcGlwZWxpbmVfY3JlYXRlX2luZm8sCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy0+aHdjdHgtPmFsbG9jLCAmc2hk LT5waXBlbGluZSk7CisgICAgaWYgKHJldCAhPSBWS19TVUNDRVNTKSB7CisgICAgICAgIGF2X2xv ZyhzLCBBVl9MT0dfRVJST1IsICJVbmFibGUgdG8gaW5pdCBjb21wdXRlIHBpcGVsaW5lOiAlc1xu IiwKKyAgICAgICAgICAgICAgIGZmX3ZrX3JldDJzdHIocmV0KSk7CisgICAgICAgIHJldHVybiBB VkVSUk9SX0VYVEVSTkFMOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50 IGNyZWF0ZV9zaGFkZXJfb2JqZWN0KEZGVnVsa2FuQ29udGV4dCAqcywgRkZWdWxrYW5TaGFkZXIg KnNoZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqc3BpcnYsIHNp emVfdCBzcGlydl9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNo YXIgKmVudHJ5cG9pbnQpCit7CisgICAgVmtSZXN1bHQgcmV0OworICAgIEZGVnVsa2FuRnVuY3Rp b25zICp2ayA9ICZzLT52a2ZuOworICAgIHNpemVfdCBzaGFkZXJfc2l6ZSA9IDA7CisKKyAgICBW a1NoYWRlckNyZWF0ZUluZm9FWFQgc2hhZGVyX29ial9jcmVhdGUgPSB7CisgICAgICAgIC5zVHlw ZSA9IFZLX1NUUlVDVFVSRV9UWVBFX1NIQURFUl9DUkVBVEVfSU5GT19FWFQsCisgICAgICAgIC5m bGFncyA9IHNoZC0+c3ViZ3JvdXBfaW5mby5yZXF1aXJlZFN1Ymdyb3VwU2l6ZSA/CisgICAgICAg ICAgICAgICAgIFZLX1NIQURFUl9DUkVBVEVfUkVRVUlSRV9GVUxMX1NVQkdST1VQU19CSVRfRVhU IDogMHgwLAorICAgICAgICAuc3RhZ2UgPSBzaGQtPnN0YWdlLAorICAgICAgICAubmV4dFN0YWdl ID0gMCwKKyAgICAgICAgLmNvZGVUeXBlID0gVktfU0hBREVSX0NPREVfVFlQRV9TUElSVl9FWFQs CisgICAgICAgIC5wQ29kZSA9IHNwaXJ2LAorICAgICAgICAuY29kZVNpemUgPSBzcGlydl9sZW4s CisgICAgICAgIC5wTmFtZSA9IGVudHJ5cG9pbnQsCisgICAgICAgIC5wU2V0TGF5b3V0cyA9IHNo ZC0+ZGVzY19sYXlvdXQsCisgICAgICAgIC5zZXRMYXlvdXRDb3VudCA9IHNoZC0+bmJfZGVzY3Jp cHRvcl9zZXRzLAorICAgICAgICAucHVzaENvbnN0YW50UmFuZ2VDb3VudCA9IHNoZC0+cHVzaF9j b25zdHNfbnVtLAorICAgICAgICAucFB1c2hDb25zdGFudFJhbmdlcyA9IHNoZC0+cHVzaF9jb25z dHMsCisgICAgICAgIC5wU3BlY2lhbGl6YXRpb25JbmZvID0gTlVMTCwKKyAgICB9OworCisgICAg cmV0ID0gdmstPkNyZWF0ZVNoYWRlcnNFWFQocy0+aHdjdHgtPmFjdF9kZXYsIDEsICZzaGFkZXJf b2JqX2NyZWF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLT5od2N0eC0+YWxs b2MsICZzaGQtPm9iamVjdCk7CisgICAgaWYgKHJldCAhPSBWS19TVUNDRVNTKSB7CisgICAgICAg IGF2X2xvZyhzLCBBVl9MT0dfRVJST1IsICJVbmFibGUgdG8gY3JlYXRlIHNoYWRlciBvYmplY3Q6 ICVzXG4iLAorICAgICAgICAgICAgICAgZmZfdmtfcmV0MnN0cihyZXQpKTsKKyAgICAgICAgcmV0 dXJuIEFWRVJST1JfRVhURVJOQUw7CisgICAgfQorCisgICAgaWYgKHZrLT5HZXRTaGFkZXJCaW5h cnlEYXRhRVhUKHMtPmh3Y3R4LT5hY3RfZGV2LCBzaGQtPm9iamVjdCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJnNoYWRlcl9zaXplLCBOVUxMKSA9PSBWS19TVUNDRVNTKQor ICAgICAgICBhdl9sb2cocywgQVZfTE9HX1ZFUkJPU0UsICJTaGFkZXIgJXMgc2l6ZTogJSJTSVpF X1NQRUNJRklFUiIgYmluYXJ5ICglIlNJWkVfU1BFQ0lGSUVSIiBTUElSLVYpXG4iLAorICAgICAg ICAgICAgICAgc2hkLT5uYW1lLCBzaGFkZXJfc2l6ZSwgc3BpcnZfbGVuKTsKKworICAgIHJldHVy biAwOworfQorCitzdGF0aWMgaW50IGluaXRfZGVzY3JpcHRvcnMoRkZWdWxrYW5Db250ZXh0ICpz LCBGRlZ1bGthblNoYWRlciAqc2hkKQoreworICAgIFZrUmVzdWx0IHJldDsKKyAgICBGRlZ1bGth bkZ1bmN0aW9ucyAqdmsgPSAmcy0+dmtmbjsKKworICAgIHNoZC0+ZGVzY19sYXlvdXQgPSBhdl9t YWxsb2NfYXJyYXkoc2hkLT5uYl9kZXNjcmlwdG9yX3NldHMsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzaXplb2YoKnNoZC0+ZGVzY19sYXlvdXQpKTsKKyAgICBpZiAo IXNoZC0+ZGVzY19sYXlvdXQpCisgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7CisKKyAg ICBpZiAoIShzLT5leHRlbnNpb25zICYgRkZfVktfRVhUX0RFU0NSSVBUT1JfQlVGRkVSKSkgewor ICAgICAgICBpbnQgaGFzX3Npbmd1bGFyID0gMDsKKyAgICAgICAgaW50IG1heF9kZXNjcmlwdG9y cyA9IDA7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2hkLT5uYl9kZXNjcmlwdG9yX3Nl dHM7IGkrKykgeworICAgICAgICAgICAgbWF4X2Rlc2NyaXB0b3JzID0gRkZNQVgobWF4X2Rlc2Ny aXB0b3JzLCBzaGQtPmRlc2Nfc2V0W2ldLm5iX2JpbmRpbmdzKTsKKyAgICAgICAgICAgIGlmIChz aGQtPmRlc2Nfc2V0W2ldLnNpbmd1bGFyKQorICAgICAgICAgICAgICAgIGhhc19zaW5ndWxhciA9 IDE7CisgICAgICAgIH0KKyAgICAgICAgc2hkLT51c2VfcHVzaCA9IChzLT5leHRlbnNpb25zICYg RkZfVktfRVhUX1BVU0hfREVTQ1JJUFRPUikgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICht YXhfZGVzY3JpcHRvcnMgPD0gcy0+cHVzaF9kZXNjX3Byb3BzLm1heFB1c2hEZXNjcmlwdG9ycykg JiYKKyAgICAgICAgICAgICAgICAgICAgICAgIChzaGQtPm5iX2Rlc2NyaXB0b3Jfc2V0cyA9PSAx KSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgKGhhc19zaW5ndWxhciA9PSAwKTsKKyAgICB9 CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHNoZC0+bmJfZGVzY3JpcHRvcl9zZXRzOyBpKysp IHsKKyAgICAgICAgRkZWdWxrYW5EZXNjcmlwdG9yU2V0ICpzZXQgPSAmc2hkLT5kZXNjX3NldFtp XTsKKyAgICAgICAgVmtEZXNjcmlwdG9yU2V0TGF5b3V0Q3JlYXRlSW5mbyBkZXNjX2xheW91dF9j cmVhdGUgPSB7CisgICAgICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9ERVNDUklQ VE9SX1NFVF9MQVlPVVRfQ1JFQVRFX0lORk8sCisgICAgICAgICAgICAuYmluZGluZ0NvdW50ID0g c2V0LT5uYl9iaW5kaW5ncywKKyAgICAgICAgICAgIC5wQmluZGluZ3MgPSBzZXQtPmJpbmRpbmcs CisgICAgICAgICAgICAuZmxhZ3MgPSAocy0+ZXh0ZW5zaW9ucyAmIEZGX1ZLX0VYVF9ERVNDUklQ VE9SX0JVRkZFUikgPworICAgICAgICAgICAgICAgICAgICAgVktfREVTQ1JJUFRPUl9TRVRfTEFZ T1VUX0NSRUFURV9ERVNDUklQVE9SX0JVRkZFUl9CSVRfRVhUIDoKKyAgICAgICAgICAgICAgICAg ICAgIChzaGQtPnVzZV9wdXNoKSA/CisgICAgICAgICAgICAgICAgICAgICBWS19ERVNDUklQVE9S X1NFVF9MQVlPVVRfQ1JFQVRFX1BVU0hfREVTQ1JJUFRPUl9CSVRfS0hSIDoKKyAgICAgICAgICAg ICAgICAgICAgIDB4MCwKKyAgICAgICAgfTsKKworICAgICAgICByZXQgPSB2ay0+Q3JlYXRlRGVz Y3JpcHRvclNldExheW91dChzLT5od2N0eC0+YWN0X2RldiwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJmRlc2NfbGF5b3V0X2NyZWF0ZSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy0+aHdjdHgtPmFsbG9jLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2hkLT5kZXNjX2xheW91dFtp XSk7CisgICAgICAgIGlmIChyZXQgIT0gVktfU1VDQ0VTUykgeworICAgICAgICAgICAgYXZfbG9n KHMsIEFWX0xPR19FUlJPUiwgIlVuYWJsZSB0byBjcmVhdGUgZGVzY3JpcHRvciBzZXQgbGF5b3V0 OiAlcyIsCisgICAgICAgICAgICAgICAgICAgZmZfdmtfcmV0MnN0cihyZXQpKTsKKyAgICAgICAg ICAgIHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHMt PmV4dGVuc2lvbnMgJiBGRl9WS19FWFRfREVTQ1JJUFRPUl9CVUZGRVIpIHsKKyAgICAgICAgICAg IHZrLT5HZXREZXNjcmlwdG9yU2V0TGF5b3V0U2l6ZUVYVChzLT5od2N0eC0+YWN0X2Rldiwgc2hk LT5kZXNjX2xheW91dFtpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAmc2V0LT5sYXlvdXRfc2l6ZSk7CisKKyAgICAgICAgICAgIHNldC0+YWxpZ25lZF9z aXplID0gRkZBTElHTihzZXQtPmxheW91dF9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHMtPmRlc2NfYnVmX3Byb3BzLmRlc2NyaXB0b3JCdWZmZXJPZmZzZXRB bGlnbm1lbnQpOworCisgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHNldC0+bmJfYmlu ZGluZ3M7IGorKykKKyAgICAgICAgICAgICAgICB2ay0+R2V0RGVzY3JpcHRvclNldExheW91dEJp bmRpbmdPZmZzZXRFWFQocy0+aHdjdHgtPmFjdF9kZXYsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoZC0+ZGVzY19sYXlvdXRbaV0s CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICZzZXQtPmJpbmRpbmdfb2Zmc2V0W2pdKTsKKyAgICAgICAgfQorICAgIH0KKwor ICAgIHJldHVybiAwOworfQorCitpbnQgZmZfdmtfc2hhZGVyX2xpbmsoRkZWdWxrYW5Db250ZXh0 ICpzLCBGRlZ1bGthblNoYWRlciAqc2hkLAorICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3Qg KnNwaXJ2LCBzaXplX3Qgc3BpcnZfbGVuLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNo YXIgKmVudHJ5cG9pbnQpCit7CisgICAgaW50IGVycjsKKyAgICBGRlZ1bGthbkZ1bmN0aW9ucyAq dmsgPSAmcy0+dmtmbjsKKworICAgIGVyciA9IGluaXRfZGVzY3JpcHRvcnMocywgc2hkKTsKKyAg ICBpZiAoZXJyIDwgMCkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIGVyciA9IGluaXRfcGlw ZWxpbmVfbGF5b3V0KHMsIHNoZCk7CisgICAgaWYgKGVyciA8IDApCisgICAgICAgIHJldHVybiBl cnI7CisKKyAgICBpZiAocy0+ZXh0ZW5zaW9ucyAmIEZGX1ZLX0VYVF9ERVNDUklQVE9SX0JVRkZF UikgeworICAgICAgICBzaGQtPmJvdW5kX2J1ZmZlcl9pbmRpY2VzID0gYXZfY2FsbG9jKHNoZC0+ bmJfZGVzY3JpcHRvcl9zZXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHNpemVvZigqc2hkLT5ib3VuZF9idWZmZXJfaW5kaWNlcykpOworICAgICAgICBp ZiAoIXNoZC0+Ym91bmRfYnVmZmVyX2luZGljZXMpCisgICAgICAgICAgICByZXR1cm4gQVZFUlJP UihFTk9NRU0pOworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2hkLT5uYl9kZXNjcmlw dG9yX3NldHM7IGkrKykKKyAgICAgICAgICAgIHNoZC0+Ym91bmRfYnVmZmVyX2luZGljZXNbaV0g PSBpOworICAgIH0KKworICAgIGlmIChzLT5leHRlbnNpb25zICYgRkZfVktfRVhUX1NIQURFUl9P QkpFQ1QpIHsKKyAgICAgICAgZXJyID0gY3JlYXRlX3NoYWRlcl9vYmplY3Qocywgc2hkLCBzcGly diwgc3BpcnZfbGVuLCBlbnRyeXBvaW50KTsKKyAgICAgICAgaWYgKGVyciA8IDApCisgICAgICAg ICAgICByZXR1cm4gZXJyOworICAgIH0gZWxzZSB7CisgICAgICAgIFZrU2hhZGVyTW9kdWxlIG1v ZDsKKyAgICAgICAgZXJyID0gY3JlYXRlX3NoYWRlcl9tb2R1bGUocywgc2hkLCAmbW9kLCBzcGly diwgc3BpcnZfbGVuKTsKKyAgICAgICAgaWYgKGVyciA8IDApCisgICAgICAgICAgICByZXR1cm4g ZXJyOworCisgICAgICAgIHN3aXRjaCAoc2hkLT5iaW5kX3BvaW50KSB7CisgICAgICAgIGNhc2Ug VktfUElQRUxJTkVfQklORF9QT0lOVF9DT01QVVRFOgorICAgICAgICAgICAgZXJyID0gaW5pdF9j b21wdXRlX3BpcGVsaW5lKHMsIHNoZCwgbW9kLCBlbnRyeXBvaW50KTsKKyAgICAgICAgICAgIGJy ZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYXZfbG9nKHMsIEFWX0xPR19FUlJP UiwgIlVuc3VwcG9ydGVkIHNoYWRlciB0eXBlOiAlaVxuIiwKKyAgICAgICAgICAgICAgICAgICBz aGQtPmJpbmRfcG9pbnQpOworICAgICAgICAgICAgZXJyID0gQVZFUlJPUihFSU5WQUwpOworICAg ICAgICAgICAgYnJlYWs7CisgICAgICAgIH07CisKKyAgICAgICAgdmstPkRlc3Ryb3lTaGFkZXJN b2R1bGUocy0+aHdjdHgtPmFjdF9kZXYsIG1vZCwgcy0+aHdjdHgtPmFsbG9jKTsKKyAgICAgICAg aWYgKGVyciA8IDApCisgICAgICAgICAgICByZXR1cm4gZXJyOworICAgIH0KKworICAgIHJldHVy biAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRlc2NyaXB0b3JfcHJvcHMgeworICAgIHNp emVfdCBzdHJ1Y3Rfc2l6ZTsgLyogU2l6ZSBvZiB0aGUgb3BhcXVlIHdoaWNoIHVwZGF0ZXMgdGhl IGRlc2NyaXB0b3IgKi8KKyAgICBjb25zdCBjaGFyICp0eXBlOworICAgIGludCBpc191bmlmb3Jt OworICAgIGludCBtZW1fcXVhbGk7ICAgICAgLyogQ2FuIHVzZSBhIG1lbW9yeSBxdWFsaWZpZXIg Ki8KKyAgICBpbnQgZGltX25lZWRlZDsgICAgIC8qIE11c3QgaW5kaWNhdGUgZGltZW5zaW9uICov CisgICAgaW50IGJ1Zl9jb250ZW50OyAgICAvKiBNdXN0IGluZGljYXRlIGJ1ZmZlciBjb250ZW50 cyAqLworfSBkZXNjcmlwdG9yX3Byb3BzW10gPSB7CisgICAgW1ZLX0RFU0NSSVBUT1JfVFlQRV9T QU1QTEVSXSAgICAgICAgICAgICAgICA9IHsgc2l6ZW9mKFZrRGVzY3JpcHRvckltYWdlSW5mbyks ICAic2FtcGxlciIsICAgICAgIDEsIDAsIDAsIDAsIH0sCisgICAgW1ZLX0RFU0NSSVBUT1JfVFlQ RV9TQU1QTEVEX0lNQUdFXSAgICAgICAgICA9IHsgc2l6ZW9mKFZrRGVzY3JpcHRvckltYWdlSW5m byksICAidGV4dHVyZSIsICAgICAgIDEsIDAsIDEsIDAsIH0sCisgICAgW1ZLX0RFU0NSSVBUT1Jf VFlQRV9TVE9SQUdFX0lNQUdFXSAgICAgICAgICA9IHsgc2l6ZW9mKFZrRGVzY3JpcHRvckltYWdl SW5mbyksICAiaW1hZ2UiLCAgICAgICAgIDEsIDEsIDEsIDAsIH0sCisgICAgW1ZLX0RFU0NSSVBU T1JfVFlQRV9JTlBVVF9BVFRBQ0hNRU5UXSAgICAgICA9IHsgc2l6ZW9mKFZrRGVzY3JpcHRvcklt YWdlSW5mbyksICAic3VicGFzc0lucHV0IiwgIDEsIDAsIDAsIDAsIH0sCisgICAgW1ZLX0RFU0NS SVBUT1JfVFlQRV9DT01CSU5FRF9JTUFHRV9TQU1QTEVSXSA9IHsgc2l6ZW9mKFZrRGVzY3JpcHRv ckltYWdlSW5mbyksICAic2FtcGxlciIsICAgICAgIDEsIDAsIDEsIDAsIH0sCisgICAgW1ZLX0RF U0NSSVBUT1JfVFlQRV9VTklGT1JNX0JVRkZFUl0gICAgICAgICA9IHsgc2l6ZW9mKFZrRGVzY3Jp cHRvckJ1ZmZlckluZm8pLCAgTlVMTCwgICAgICAgICAgIDEsIDAsIDAsIDEsIH0sCisgICAgW1ZL X0RFU0NSSVBUT1JfVFlQRV9TVE9SQUdFX0JVRkZFUl0gICAgICAgICA9IHsgc2l6ZW9mKFZrRGVz Y3JpcHRvckJ1ZmZlckluZm8pLCAiYnVmZmVyIiwgICAgICAgIDAsIDEsIDAsIDEsIH0sCisgICAg W1ZLX0RFU0NSSVBUT1JfVFlQRV9VTklGT1JNX0JVRkZFUl9EWU5BTUlDXSA9IHsgc2l6ZW9mKFZr RGVzY3JpcHRvckJ1ZmZlckluZm8pLCAgTlVMTCwgICAgICAgICAgIDEsIDAsIDAsIDEsIH0sCisg ICAgW1ZLX0RFU0NSSVBUT1JfVFlQRV9TVE9SQUdFX0JVRkZFUl9EWU5BTUlDXSA9IHsgc2l6ZW9m KFZrRGVzY3JpcHRvckJ1ZmZlckluZm8pLCAiYnVmZmVyIiwgICAgICAgIDAsIDEsIDAsIDEsIH0s CisgICAgW1ZLX0RFU0NSSVBUT1JfVFlQRV9VTklGT1JNX1RFWEVMX0JVRkZFUl0gICA9IHsgc2l6 ZW9mKFZrQnVmZmVyVmlldyksICAgICAgICAgICAic2FtcGxlckJ1ZmZlciIsIDEsIDAsIDAsIDAs IH0sCisgICAgW1ZLX0RFU0NSSVBUT1JfVFlQRV9TVE9SQUdFX1RFWEVMX0JVRkZFUl0gICA9IHsg c2l6ZW9mKFZrQnVmZmVyVmlldyksICAgICAgICAgICAiaW1hZ2VCdWZmZXIiLCAgIDEsIDAsIDAs IDAsIH0sCit9OworCitpbnQgZmZfdmtfc2hhZGVyX2FkZF9kZXNjcmlwdG9yX3NldChGRlZ1bGth bkNvbnRleHQgKnMsIEZGVnVsa2FuU2hhZGVyICpzaGQsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBGRlZ1bGthbkRlc2NyaXB0b3JTZXRCaW5kaW5nICpkZXNjLCBpbnQgbmIs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2luZ3VsYXIsIGludCBw cmludF90b19zaGFkZXJfb25seSkKK3sKKyAgICBpbnQgaGFzX3NhbXBsZXIgPSAwOworICAgIEZG VnVsa2FuRGVzY3JpcHRvclNldCAqc2V0OworCisgICAgaWYgKHByaW50X3RvX3NoYWRlcl9vbmx5 KQorICAgICAgICBnb3RvIHByaW50OworCisgICAgLyogQWN0dWFsIGxheW91dCBhbGxvY2F0ZWQg Zm9yIHRoZSBwaXBlbGluZSAqLworICAgIHNldCA9IGF2X3JlYWxsb2NfYXJyYXkoc2hkLT5kZXNj X3NldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZigqc2hkLT5kZXNjX3NldCks CisgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGQtPm5iX2Rlc2NyaXB0b3Jfc2V0cyArIDEp OworICAgIGlmICghc2V0KQorICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOworICAgIHNo ZC0+ZGVzY19zZXQgPSBzZXQ7CisKKyAgICBzZXQgPSAmc2V0W3NoZC0+bmJfZGVzY3JpcHRvcl9z ZXRzXTsKKyAgICBtZW1zZXQoc2V0LCAwLCBzaXplb2YoKnNldCkpOworCisgICAgc2V0LT5iaW5k aW5nID0gYXZfY2FsbG9jKG5iLCBzaXplb2YoKnNldC0+YmluZGluZykpOworICAgIGlmICghc2V0 LT5iaW5kaW5nKQorICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOworCisgICAgc2V0LT5i aW5kaW5nX29mZnNldCA9IGF2X2NhbGxvYyhuYiwgc2l6ZW9mKCpzZXQtPmJpbmRpbmdfb2Zmc2V0 KSk7CisgICAgaWYgKCFzZXQtPmJpbmRpbmdfb2Zmc2V0KSB7CisgICAgICAgIGF2X2ZyZWVwKCZz ZXQtPmJpbmRpbmcpOworICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOworICAgIH0KKwor ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmI7IGkrKykgeworICAgICAgICBzZXQtPmJpbmRpbmdb aV0uYmluZGluZyAgICAgICAgICAgID0gaTsKKyAgICAgICAgc2V0LT5iaW5kaW5nW2ldLmRlc2Ny aXB0b3JUeXBlICAgICA9IGRlc2NbaV0udHlwZTsKKyAgICAgICAgc2V0LT5iaW5kaW5nW2ldLmRl c2NyaXB0b3JDb3VudCAgICA9IEZGTUFYKGRlc2NbaV0uZWxlbXMsIDEpOworICAgICAgICBzZXQt PmJpbmRpbmdbaV0uc3RhZ2VGbGFncyAgICAgICAgID0gZGVzY1tpXS5zdGFnZXM7CisgICAgICAg IHNldC0+YmluZGluZ1tpXS5wSW1tdXRhYmxlU2FtcGxlcnMgPSBkZXNjW2ldLnNhbXBsZXJzOwor CisgICAgICAgIGlmIChkZXNjW2ldLnR5cGUgPT0gVktfREVTQ1JJUFRPUl9UWVBFX1NBTVBMRVIg fHwKKyAgICAgICAgICAgIGRlc2NbaV0udHlwZSA9PSBWS19ERVNDUklQVE9SX1RZUEVfQ09NQklO RURfSU1BR0VfU0FNUExFUikKKyAgICAgICAgICAgIGhhc19zYW1wbGVyIHw9IDE7CisgICAgfQor CisgICAgc2V0LT51c2FnZSA9IFZLX0JVRkZFUl9VU0FHRV9SRVNPVVJDRV9ERVNDUklQVE9SX0JV RkZFUl9CSVRfRVhUIHwKKyAgICAgICAgICAgICAgICAgVktfQlVGRkVSX1VTQUdFX1NIQURFUl9E RVZJQ0VfQUREUkVTU19CSVQ7CisgICAgaWYgKGhhc19zYW1wbGVyKQorICAgICAgICBzZXQtPnVz YWdlIHw9IFZLX0JVRkZFUl9VU0FHRV9TQU1QTEVSX0RFU0NSSVBUT1JfQlVGRkVSX0JJVF9FWFQ7 CisKKyAgICBpZiAoIShzLT5leHRlbnNpb25zICYgRkZfVktfRVhUX0RFU0NSSVBUT1JfQlVGRkVS KSkgeworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG5iOyBpKyspIHsKKyAgICAgICAgICAg IGludCBqOworICAgICAgICAgICAgVmtEZXNjcmlwdG9yUG9vbFNpemUgKmRlc2NfcG9vbF9zaXpl OworICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IHNoZC0+bmJfZGVzY19wb29sX3NpemU7IGor KykKKyAgICAgICAgICAgICAgICBpZiAoc2hkLT5kZXNjX3Bvb2xfc2l6ZVtqXS50eXBlID09IGRl c2NbaV0udHlwZSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAo aiA+PSBzaGQtPm5iX2Rlc2NfcG9vbF9zaXplKSB7CisgICAgICAgICAgICAgICAgZGVzY19wb29s X3NpemUgPSBhdl9yZWFsbG9jX2FycmF5KHNoZC0+ZGVzY19wb29sX3NpemUsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZigqZGVzY19wb29s X3NpemUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzaGQtPm5iX2Rlc2NfcG9vbF9zaXplICsgMSk7CisgICAgICAgICAgICAgICAgaWYgKCFkZXNj X3Bvb2xfc2l6ZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsK KworICAgICAgICAgICAgICAgIHNoZC0+ZGVzY19wb29sX3NpemUgPSBkZXNjX3Bvb2xfc2l6ZTsK KyAgICAgICAgICAgICAgICBzaGQtPm5iX2Rlc2NfcG9vbF9zaXplKys7CisgICAgICAgICAgICAg ICAgbWVtc2V0KCZkZXNjX3Bvb2xfc2l6ZVtqXSwgMCwgc2l6ZW9mKFZrRGVzY3JpcHRvclBvb2xT aXplKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzaGQtPmRlc2NfcG9vbF9zaXplW2pd LnR5cGUgICAgICAgICAgICAgPSBkZXNjW2ldLnR5cGU7CisgICAgICAgICAgICBzaGQtPmRlc2Nf cG9vbF9zaXplW2pdLmRlc2NyaXB0b3JDb3VudCArPSBGRk1BWChkZXNjW2ldLmVsZW1zLCAxKTsK KyAgICAgICAgfQorICAgIH0KKworICAgIHNldC0+c2luZ3VsYXIgPSBzaW5ndWxhcjsKKyAgICBz ZXQtPm5iX2JpbmRpbmdzID0gbmI7CisgICAgc2hkLT5uYl9kZXNjcmlwdG9yX3NldHMrKzsKKwor cHJpbnQ6CisgICAgLyogV3JpdGUgc2hhZGVyIGluZm8gKi8KKyAgICBmb3IgKGludCBpID0gMDsg aSA8IG5iOyBpKyspIHsKKyAgICAgICAgY29uc3Qgc3RydWN0IGRlc2NyaXB0b3JfcHJvcHMgKnBy b3AgPSAmZGVzY3JpcHRvcl9wcm9wc1tkZXNjW2ldLnR5cGVdOworICAgICAgICBHTFNMQSgibGF5 b3V0IChzZXQgPSAlaSwgYmluZGluZyA9ICVpIiwgRkZNQVgoc2hkLT5uYl9kZXNjcmlwdG9yX3Nl dHMgLSAxLCAwKSwgaSk7CisKKyAgICAgICAgaWYgKGRlc2NbaV0ubWVtX2xheW91dCAmJgorICAg ICAgICAgICAgKGRlc2NbaV0udHlwZSAhPSBWS19ERVNDUklQVE9SX1RZUEVfU1RPUkFHRV9JTUFH RSkpCisgICAgICAgICAgICBHTFNMQSgiLCAlcyIsIGRlc2NbaV0ubWVtX2xheW91dCk7CisKKyAg ICAgICAgR0xTTEEoIikiKTsKKworICAgICAgICBpZiAocHJvcC0+aXNfdW5pZm9ybSkKKyAgICAg ICAgICAgIEdMU0xBKCIgdW5pZm9ybSIpOworCisgICAgICAgIGlmIChwcm9wLT5tZW1fcXVhbGkg JiYgZGVzY1tpXS5tZW1fcXVhbGkpCisgICAgICAgICAgICBHTFNMQSgiICVzIiwgZGVzY1tpXS5t ZW1fcXVhbGkpOworCisgICAgICAgIGlmIChwcm9wLT50eXBlKSB7CisgICAgICAgICAgICBHTFNM QSgiICIpOworICAgICAgICAgICAgaWYgKGRlc2NbaV0udHlwZSA9PSBWS19ERVNDUklQVE9SX1RZ UEVfU1RPUkFHRV9JTUFHRSkgeworICAgICAgICAgICAgICAgIGlmIChkZXNjW2ldLm1lbV9sYXlv dXQpIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IGxlbiA9IHN0cmxlbihkZXNjW2ldLm1lbV9s YXlvdXQpOworICAgICAgICAgICAgICAgICAgICBpZiAoZGVzY1tpXS5tZW1fbGF5b3V0W2xlbiAt IDFdID09ICdpJyAmJgorICAgICAgICAgICAgICAgICAgICAgICAgZGVzY1tpXS5tZW1fbGF5b3V0 W2xlbiAtIDJdID09ICd1JykgeworICAgICAgICAgICAgICAgICAgICAgICAgR0xTTEEoInUiKTsK KyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkZXNjW2ldLm1lbV9sYXlvdXRbbGVuIC0g MV0gPT0gJ2knKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBHTFNMQSgiaSIpOworICAgICAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg ICAgICAgR0xTTEEoIiVzIiwgcHJvcC0+dHlwZSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAo cHJvcC0+ZGltX25lZWRlZCkKKyAgICAgICAgICAgIEdMU0xBKCIlaUQiLCBkZXNjW2ldLmRpbWVu c2lvbnMpOworCisgICAgICAgIEdMU0xBKCIgJXMiLCBkZXNjW2ldLm5hbWUpOworCisgICAgICAg IGlmIChwcm9wLT5idWZfY29udGVudCkgeworICAgICAgICAgICAgR0xTTEEoIiB7XG4gICAgIik7 CisgICAgICAgICAgICBpZiAoZGVzY1tpXS5idWZfZWxlbXMpIHsKKyAgICAgICAgICAgICAgICBH TFNMQSgiJXMiLCBkZXNjW2ldLmJ1Zl9jb250ZW50KTsKKyAgICAgICAgICAgICAgICBHTFNMQSgi WyVpXTsiLCBkZXNjW2ldLmJ1Zl9lbGVtcyk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg ICAgICAgICAgIEdMU0xBKCIlcyIsIGRlc2NbaV0uYnVmX2NvbnRlbnQpOworICAgICAgICAgICAg fQorICAgICAgICAgICAgR0xTTEEoIlxufSIpOworICAgICAgICB9IGVsc2UgaWYgKGRlc2NbaV0u ZWxlbXMgPiAwKSB7CisgICAgICAgICAgICBHTFNMQSgiWyVpXSIsIGRlc2NbaV0uZWxlbXMpOwor ICAgICAgICB9CisKKyAgICAgICAgR0xTTEEoIjsiKTsKKyAgICAgICAgR0xTTEEoIlxuIik7Cisg ICAgfQorICAgIEdMU0xBKCJcbiIpOworCisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBmZl92a19z aGFkZXJfcmVnaXN0ZXJfZXhlYyhGRlZ1bGthbkNvbnRleHQgKnMsIEZGVmtFeGVjUG9vbCAqcG9v bCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGRlZ1bGthblNoYWRlciAqc2hkKQor eworICAgIGludCBlcnI7CisgICAgRkZWdWxrYW5TaGFkZXJEYXRhICpzZDsKKworICAgIGlmICgh c2hkLT5uYl9kZXNjcmlwdG9yX3NldHMpCisgICAgICAgIHJldHVybiAwOworCisgICAgc2QgPSBh dl9yZWFsbG9jX2FycmF5KHBvb2wtPnJlZ19zaGQsCisgICAgICAgICAgICAgICAgICAgICAgICAg IHNpemVvZigqcG9vbC0+cmVnX3NoZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIHBvb2wt Pm5iX3JlZ19zaGQgKyAxKTsKKyAgICBpZiAoIXNkKQorICAgICAgICByZXR1cm4gQVZFUlJPUihF Tk9NRU0pOworCisgICAgcG9vbC0+cmVnX3NoZCA9IHNkOworICAgIHNkID0gJnNkW3Bvb2wtPm5i X3JlZ19zaGQrK107CisgICAgbWVtc2V0KHNkLCAwLCBzaXplb2YoKnNkKSk7CisKKyAgICBzZC0+ c2hkID0gc2hkOworICAgIHNkLT5uYl9kZXNjcmlwdG9yX3NldHMgPSBzaGQtPm5iX2Rlc2NyaXB0 b3Jfc2V0czsKKworICAgIGlmIChzLT5leHRlbnNpb25zICYgRkZfVktfRVhUX0RFU0NSSVBUT1Jf QlVGRkVSKSB7CisgICAgICAgIHNkLT5kZXNjX2JpbmQgPSBhdl9tYWxsb2NfYXJyYXkoc2QtPm5i X2Rlc2NyaXB0b3Jfc2V0cywgc2l6ZW9mKCpzZC0+ZGVzY19iaW5kKSk7CisgICAgICAgIGlmICgh c2QtPmRlc2NfYmluZCkKKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7CisKKyAg ICAgICAgc2QtPmRlc2Nfc2V0X2J1ZiA9IGF2X2NhbGxvYyhzZC0+bmJfZGVzY3JpcHRvcl9zZXRz LCBzaXplb2YoKnNkLT5kZXNjX3NldF9idWYpKTsKKyAgICAgICAgaWYgKCFzZC0+ZGVzY19zZXRf YnVmKQorICAgICAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKKworICAgICAgICBmb3Ig KGludCBpID0gMDsgaSA8IHNkLT5uYl9kZXNjcmlwdG9yX3NldHM7IGkrKykgeworICAgICAgICAg ICAgRkZWdWxrYW5EZXNjcmlwdG9yU2V0ICpzZXQgPSAmc2hkLT5kZXNjX3NldFtpXTsKKyAgICAg ICAgICAgIEZGVnVsa2FuRGVzY3JpcHRvclNldERhdGEgKnNkYiA9ICZzZC0+ZGVzY19zZXRfYnVm W2ldOworICAgICAgICAgICAgaW50IG5iID0gc2V0LT5zaW5ndWxhciA/IDEgOiBwb29sLT5wb29s X3NpemU7CisKKyAgICAgICAgICAgIGVyciA9IGZmX3ZrX2NyZWF0ZV9idWYocywgJnNkYi0+YnVm LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQtPmFsaWduZWRfc2l6ZSpu YiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCwgc2V0LT51 c2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfTUVNT1JZX1BST1BF UlRZX0RFVklDRV9MT0NBTF9CSVQgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBWS19NRU1PUllfUFJPUEVSVFlfSE9TVF9WSVNJQkxFX0JJVCB8CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFZLX01FTU9SWV9QUk9QRVJUWV9IT1NUX0NPSEVSRU5UX0JJVCk7 CisgICAgICAgICAgICBpZiAoZXJyIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyOwor CisgICAgICAgICAgICBlcnIgPSBmZl92a19tYXBfYnVmZmVyKHMsICZzZGItPmJ1ZiwgJnNkYi0+ ZGVzY19tZW0sIDApOworICAgICAgICAgICAgaWYgKGVyciA8IDApCisgICAgICAgICAgICAgICAg cmV0dXJuIGVycjsKKworICAgICAgICAgICAgc2QtPmRlc2NfYmluZFtpXSA9IChWa0Rlc2NyaXB0 b3JCdWZmZXJCaW5kaW5nSW5mb0VYVCkgeworICAgICAgICAgICAgICAgIC5zVHlwZSA9IFZLX1NU UlVDVFVSRV9UWVBFX0RFU0NSSVBUT1JfQlVGRkVSX0JJTkRJTkdfSU5GT19FWFQsCisgICAgICAg ICAgICAgICAgLnVzYWdlID0gc2V0LT51c2FnZSwKKyAgICAgICAgICAgICAgICAuYWRkcmVzcyA9 IHNkYi0+YnVmLmFkZHJlc3MsCisgICAgICAgICAgICB9OworICAgICAgICB9CisgICAgfSBlbHNl IGlmICghc2hkLT51c2VfcHVzaCkgeworICAgICAgICBWa1Jlc3VsdCByZXQ7CisgICAgICAgIEZG VnVsa2FuRnVuY3Rpb25zICp2ayA9ICZzLT52a2ZuOworICAgICAgICBWa0Rlc2NyaXB0b3JTZXRM YXlvdXQgKnRtcF9sYXlvdXRzOworICAgICAgICBWa0Rlc2NyaXB0b3JTZXRBbGxvY2F0ZUluZm8g c2V0X2FsbG9jX2luZm87CisgICAgICAgIFZrRGVzY3JpcHRvclBvb2xDcmVhdGVJbmZvIHBvb2xf Y3JlYXRlX2luZm87CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaGQtPm5iX2Rlc2Nf cG9vbF9zaXplOyBpKyspCisgICAgICAgICAgICBzaGQtPmRlc2NfcG9vbF9zaXplW2ldLmRlc2Ny aXB0b3JDb3VudCAqPSBwb29sLT5wb29sX3NpemU7CisKKyAgICAgICAgcG9vbF9jcmVhdGVfaW5m byA9IChWa0Rlc2NyaXB0b3JQb29sQ3JlYXRlSW5mbykgeworICAgICAgICAgICAgLnNUeXBlID0g VktfU1RSVUNUVVJFX1RZUEVfREVTQ1JJUFRPUl9QT09MX0NSRUFURV9JTkZPLAorICAgICAgICAg ICAgLmZsYWdzID0gMCwKKyAgICAgICAgICAgIC5wUG9vbFNpemVzID0gc2hkLT5kZXNjX3Bvb2xf c2l6ZSwKKyAgICAgICAgICAgIC5wb29sU2l6ZUNvdW50ID0gc2hkLT5uYl9kZXNjX3Bvb2xfc2l6 ZSwKKyAgICAgICAgICAgIC5tYXhTZXRzID0gc2QtPm5iX2Rlc2NyaXB0b3Jfc2V0cypwb29sLT5w b29sX3NpemUsCisgICAgICAgIH07CisKKyAgICAgICAgcmV0ID0gdmstPkNyZWF0ZURlc2NyaXB0 b3JQb29sKHMtPmh3Y3R4LT5hY3RfZGV2LCAmcG9vbF9jcmVhdGVfaW5mbywKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMtPmh3Y3R4LT5hbGxvYywgJnNkLT5kZXNjX3Bv b2wpOworICAgICAgICBpZiAocmV0ICE9IFZLX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgIGF2X2xv ZyhzLCBBVl9MT0dfRVJST1IsICJVbmFibGUgdG8gY3JlYXRlIGRlc2NyaXB0b3IgcG9vbDogJXNc biIsCisgICAgICAgICAgICAgICAgICAgZmZfdmtfcmV0MnN0cihyZXQpKTsKKyAgICAgICAgICAg IHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOworICAgICAgICB9CisKKyAgICAgICAgdG1wX2xheW91 dHMgPSBhdl9tYWxsb2NfYXJyYXkocG9vbF9jcmVhdGVfaW5mby5tYXhTZXRzLCBzaXplb2YoKnRt cF9sYXlvdXRzKSk7CisgICAgICAgIGlmICghdG1wX2xheW91dHMpCisgICAgICAgICAgICByZXR1 cm4gQVZFUlJPUihFTk9NRU0pOworCisgICAgICAgIC8qIENvbGF0ZSBlYWNoIGV4ZWN1dGlvbiBj b250ZXh0J3MgZGVzY3JpcHRvciBzZXQgbGF5b3V0cyAqLworICAgICAgICBmb3IgKGludCBpID0g MDsgaSA8IHBvb2wtPnBvb2xfc2l6ZTsgaSsrKQorICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7 IGogPCBzZC0+bmJfZGVzY3JpcHRvcl9zZXRzOyBqKyspCisgICAgICAgICAgICAgICAgdG1wX2xh eW91dHNbaSpzZC0+bmJfZGVzY3JpcHRvcl9zZXRzICsgal0gPSBzaGQtPmRlc2NfbGF5b3V0W2pd OworCisgICAgICAgIHNldF9hbGxvY19pbmZvID0gKFZrRGVzY3JpcHRvclNldEFsbG9jYXRlSW5m bykgeworICAgICAgICAgICAgLnNUeXBlICAgICAgICAgICAgICA9IFZLX1NUUlVDVFVSRV9UWVBF X0RFU0NSSVBUT1JfU0VUX0FMTE9DQVRFX0lORk8sCisgICAgICAgICAgICAuZGVzY3JpcHRvclBv b2wgICAgID0gc2QtPmRlc2NfcG9vbCwKKyAgICAgICAgICAgIC5wU2V0TGF5b3V0cyAgICAgICAg PSB0bXBfbGF5b3V0cywKKyAgICAgICAgICAgIC5kZXNjcmlwdG9yU2V0Q291bnQgPSBwb29sX2Ny ZWF0ZV9pbmZvLm1heFNldHMsCisgICAgICAgIH07CisKKyAgICAgICAgc2QtPmRlc2Nfc2V0cyA9 IGF2X21hbGxvY19hcnJheShwb29sX2NyZWF0ZV9pbmZvLm1heFNldHMsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKCp0bXBfbGF5b3V0cykpOworICAgICAg ICBpZiAoIXNkLT5kZXNjX3NldHMpIHsKKyAgICAgICAgICAgIGF2X2ZyZWUodG1wX2xheW91dHMp OworICAgICAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKKyAgICAgICAgfQorICAgICAg ICByZXQgPSB2ay0+QWxsb2NhdGVEZXNjcmlwdG9yU2V0cyhzLT5od2N0eC0+YWN0X2RldiwgJnNl dF9hbGxvY19pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz ZC0+ZGVzY19zZXRzKTsKKyAgICAgICAgYXZfZnJlZSh0bXBfbGF5b3V0cyk7CisgICAgICAgIGlm IChyZXQgIT0gVktfU1VDQ0VTUykgeworICAgICAgICAgICAgYXZfbG9nKHMsIEFWX0xPR19FUlJP UiwgIlVuYWJsZSB0byBhbGxvY2F0ZSBkZXNjcmlwdG9yIHNldDogJXNcbiIsCisgICAgICAgICAg ICAgICAgICAgZmZfdmtfcmV0MnN0cihyZXQpKTsKKyAgICAgICAgICAgIGF2X2ZyZWVwKCZzZC0+ ZGVzY19zZXRzKTsKKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOworICAgICAg ICB9CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgRkZWdWxrYW5T aGFkZXJEYXRhICpnZXRfc2hkX2RhdGEoRkZWa0V4ZWNDb250ZXh0ICplLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGRlZ1bGthblNoYWRlciAqc2hkKQor eworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZS0+cGFyZW50LT5uYl9yZWdfc2hkOyBpKyspCisg ICAgICAgIGlmIChlLT5wYXJlbnQtPnJlZ19zaGRbaV0uc2hkID09IHNoZCkKKyAgICAgICAgICAg IHJldHVybiAmZS0+cGFyZW50LT5yZWdfc2hkW2ldOworICAgIHJldHVybiBOVUxMOworfQorCitz dGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX3NldF9kZXNjcmlwdG9yKEZGVnVsa2FuQ29udGV4dCAq cywgRkZWa0V4ZWNDb250ZXh0ICplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBGRlZ1bGthblNoYWRlciAqc2hkLCBpbnQgc2V0LAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpbnQgYmluZF9pZHgsIGludCBhcnJheV9pZHgsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZrRGVzY3JpcHRvckdldEluZm9F WFQgKmRlc2NfZ2V0X2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHNpemVfdCBkZXNjX3NpemUpCit7CisgICAgRkZWdWxrYW5GdW5jdGlvbnMgKnZrID0gJnMt PnZrZm47CisgICAgRkZWdWxrYW5EZXNjcmlwdG9yU2V0ICpkZXNjX3NldCA9ICZzaGQtPmRlc2Nf c2V0W3NldF07CisgICAgRkZWdWxrYW5TaGFkZXJEYXRhICpzZCA9IGdldF9zaGRfZGF0YShlLCBz aGQpOworICAgIGNvbnN0IHNpemVfdCBleGVjX29mZnNldCA9IGRlc2Nfc2V0LT5zaW5ndWxhciA/ IDAgOiBkZXNjX3NldC0+YWxpZ25lZF9zaXplKmUtPmlkeDsKKworICAgIHZvaWQgKmRlc2MgPSBz ZC0+ZGVzY19zZXRfYnVmW3NldF0uZGVzY19tZW0gKyAgICAgLyogQmFzZSAqLworICAgICAgICAg ICAgICAgICBleGVjX29mZnNldCArICAgICAgICAgICAgICAgICAgICAgICAgLyogRXhlY3V0aW9u IGNvbnRleHQgKi8KKyAgICAgICAgICAgICAgICAgZGVzY19zZXQtPmJpbmRpbmdfb2Zmc2V0W2Jp bmRfaWR4XSArIC8qIERlc2NyaXB0b3IgYmluZGluZyAqLworICAgICAgICAgICAgICAgICBhcnJh eV9pZHgqZGVzY19zaXplOyAgICAgICAgICAgICAgICAgLyogQXJyYXkgcG9zaXRpb24gKi8KKwor ICAgIHZrLT5HZXREZXNjcmlwdG9yRVhUKHMtPmh3Y3R4LT5hY3RfZGV2LCBkZXNjX2dldF9pbmZv LCBkZXNjX3NpemUsIGRlc2MpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX3NldF9w b29sX3dyaXRlKEZGVnVsa2FuQ29udGV4dCAqcywgRkZWa0V4ZWNDb250ZXh0ICplLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGRlZ1bGthblNoYWRlciAqc2hkLCBp bnQgc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWa1dyaXRl RGVzY3JpcHRvclNldCAqd3JpdGVfaW5mbykKK3sKKyAgICBGRlZ1bGthbkZ1bmN0aW9ucyAqdmsg PSAmcy0+dmtmbjsKKyAgICBGRlZ1bGthbkRlc2NyaXB0b3JTZXQgKmRlc2Nfc2V0ID0gJnNoZC0+ ZGVzY19zZXRbc2V0XTsKKyAgICBGRlZ1bGthblNoYWRlckRhdGEgKnNkID0gZ2V0X3NoZF9kYXRh KGUsIHNoZCk7CisKKyAgICBpZiAoZGVzY19zZXQtPnNpbmd1bGFyKSB7CisgICAgICAgIGZvciAo aW50IGkgPSAwOyBpIDwgZS0+cGFyZW50LT5wb29sX3NpemU7IGkrKykgeworICAgICAgICAgICAg d3JpdGVfaW5mby0+ZHN0U2V0ID0gc2QtPmRlc2Nfc2V0c1tpKnNkLT5uYl9kZXNjcmlwdG9yX3Nl dHMgKyBzZXRdOworICAgICAgICAgICAgdmstPlVwZGF0ZURlc2NyaXB0b3JTZXRzKHMtPmh3Y3R4 LT5hY3RfZGV2LCAxLCB3cml0ZV9pbmZvLCAwLCBOVUxMKTsKKyAgICAgICAgfQorICAgIH0gZWxz ZSB7CisgICAgICAgIGlmIChzaGQtPnVzZV9wdXNoKSB7CisgICAgICAgICAgICB2ay0+Q21kUHVz aERlc2NyaXB0b3JTZXRLSFIoZS0+YnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHNoZC0+YmluZF9wb2ludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzaGQtPnBpcGVsaW5lX2xheW91dCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzZXQsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgd3JpdGVfaW5mbyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB3cml0 ZV9pbmZvLT5kc3RTZXQgPSBzZC0+ZGVzY19zZXRzW2UtPmlkeCpzZC0+bmJfZGVzY3JpcHRvcl9z ZXRzICsgc2V0XTsKKyAgICAgICAgICAgIHZrLT5VcGRhdGVEZXNjcmlwdG9yU2V0cyhzLT5od2N0 eC0+YWN0X2RldiwgMSwgd3JpdGVfaW5mbywgMCwgTlVMTCk7CisgICAgICAgIH0KKyAgICB9Cit9 CisKK2ludCBmZl92a19zaGFkZXJfdXBkYXRlX2ltZyhGRlZ1bGthbkNvbnRleHQgKnMsIEZGVmtF eGVjQ29udGV4dCAqZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGRlZ1bGthblNoYWRl ciAqc2hkLCBpbnQgc2V0LCBpbnQgYmluZCwgaW50IG9mZnMsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgVmtJbWFnZVZpZXcgdmlldywgVmtJbWFnZUxheW91dCBsYXlvdXQsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgVmtTYW1wbGVyIHNhbXBsZXIpCit7CisgICAgRkZWdWxrYW5E ZXNjcmlwdG9yU2V0ICpkZXNjX3NldCA9ICZzaGQtPmRlc2Nfc2V0W3NldF07CisKKyAgICBpZiAo cy0+ZXh0ZW5zaW9ucyAmIEZGX1ZLX0VYVF9ERVNDUklQVE9SX0JVRkZFUikgeworICAgICAgICBW a0Rlc2NyaXB0b3JHZXRJbmZvRVhUIGRlc2NfZ2V0X2luZm8gPSB7CisgICAgICAgICAgICAuc1R5 cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9ERVNDUklQVE9SX0dFVF9JTkZPX0VYVCwKKyAgICAgICAg ICAgIC50eXBlID0gZGVzY19zZXQtPmJpbmRpbmdbYmluZF0uZGVzY3JpcHRvclR5cGUsCisgICAg ICAgIH07CisgICAgICAgIFZrRGVzY3JpcHRvckltYWdlSW5mbyBkZXNjX2ltZ19pbmZvID0gewor ICAgICAgICAgICAgLmltYWdlVmlldyA9IHZpZXcsCisgICAgICAgICAgICAuc2FtcGxlciA9IHNh bXBsZXIsCisgICAgICAgICAgICAuaW1hZ2VMYXlvdXQgPSBsYXlvdXQsCisgICAgICAgIH07Cisg ICAgICAgIHNpemVfdCBkZXNjX3NpemU7CisKKyAgICAgICAgc3dpdGNoIChkZXNjX2dldF9pbmZv LnR5cGUpIHsKKyAgICAgICAgY2FzZSBWS19ERVNDUklQVE9SX1RZUEVfU0FNUExFRF9JTUFHRToK KyAgICAgICAgICAgIGRlc2NfZ2V0X2luZm8uZGF0YS5wU2FtcGxlZEltYWdlID0gJmRlc2NfaW1n X2luZm87CisgICAgICAgICAgICBkZXNjX3NpemUgPSBzLT5kZXNjX2J1Zl9wcm9wcy5zYW1wbGVk SW1hZ2VEZXNjcmlwdG9yU2l6ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFZL X0RFU0NSSVBUT1JfVFlQRV9TVE9SQUdFX0lNQUdFOgorICAgICAgICAgICAgZGVzY19nZXRfaW5m by5kYXRhLnBTdG9yYWdlSW1hZ2UgPSAmZGVzY19pbWdfaW5mbzsKKyAgICAgICAgICAgIGRlc2Nf c2l6ZSA9IHMtPmRlc2NfYnVmX3Byb3BzLnN0b3JhZ2VJbWFnZURlc2NyaXB0b3JTaXplOworICAg ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVktfREVTQ1JJUFRPUl9UWVBFX0lOUFVUX0FU VEFDSE1FTlQ6CisgICAgICAgICAgICBkZXNjX2dldF9pbmZvLmRhdGEucElucHV0QXR0YWNobWVu dEltYWdlID0gJmRlc2NfaW1nX2luZm87CisgICAgICAgICAgICBkZXNjX3NpemUgPSBzLT5kZXNj X2J1Zl9wcm9wcy5pbnB1dEF0dGFjaG1lbnREZXNjcmlwdG9yU2l6ZTsKKyAgICAgICAgICAgIGJy ZWFrOworICAgICAgICBjYXNlIFZLX0RFU0NSSVBUT1JfVFlQRV9DT01CSU5FRF9JTUFHRV9TQU1Q TEVSOgorICAgICAgICAgICAgZGVzY19nZXRfaW5mby5kYXRhLnBDb21iaW5lZEltYWdlU2FtcGxl ciA9ICZkZXNjX2ltZ19pbmZvOworICAgICAgICAgICAgZGVzY19zaXplID0gcy0+ZGVzY19idWZf cHJvcHMuY29tYmluZWRJbWFnZVNhbXBsZXJEZXNjcmlwdG9yU2l6ZTsKKyAgICAgICAgICAgIGJy ZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYXZfbG9nKHMsIEFWX0xPR19FUlJP UiwgIkludmFsaWQgZGVzY3JpcHRvciB0eXBlIGF0IHNldCAlaSBiaW5kaW5nICVpOiAlaSFcbiIs CisgICAgICAgICAgICAgICAgICAgc2V0LCBiaW5kLCBkZXNjX2dldF9pbmZvLnR5cGUpOworICAg ICAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg ICAgICB9OworCisgICAgICAgIHVwZGF0ZV9zZXRfZGVzY3JpcHRvcihzLCBlLCBzaGQsIHNldCwg YmluZCwgb2ZmcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkZXNjX2dldF9pbmZv LCBkZXNjX3NpemUpOworICAgIH0gZWxzZSB7CisgICAgICAgIFZrRGVzY3JpcHRvckltYWdlSW5m byBkZXNjX3Bvb2xfd3JpdGVfaW5mb19pbWcgPSB7CisgICAgICAgICAgICAuc2FtcGxlciA9IHNh bXBsZXIsCisgICAgICAgICAgICAuaW1hZ2VWaWV3ID0gdmlldywKKyAgICAgICAgICAgIC5pbWFn ZUxheW91dCA9IGxheW91dCwKKyAgICAgICAgfTsKKyAgICAgICAgVmtXcml0ZURlc2NyaXB0b3JT ZXQgZGVzY19wb29sX3dyaXRlX2luZm8gPSB7CisgICAgICAgICAgICAuc1R5cGUgPSBWS19TVFJV Q1RVUkVfVFlQRV9XUklURV9ERVNDUklQVE9SX1NFVCwKKyAgICAgICAgICAgIC5kc3RCaW5kaW5n ID0gYmluZCwKKyAgICAgICAgICAgIC5kZXNjcmlwdG9yQ291bnQgPSAxLAorICAgICAgICAgICAg LmRzdEFycmF5RWxlbWVudCA9IG9mZnMsCisgICAgICAgICAgICAuZGVzY3JpcHRvclR5cGUgPSBk ZXNjX3NldC0+YmluZGluZ1tiaW5kXS5kZXNjcmlwdG9yVHlwZSwKKyAgICAgICAgICAgIC5wSW1h Z2VJbmZvID0gJmRlc2NfcG9vbF93cml0ZV9pbmZvX2ltZywKKyAgICAgICAgfTsKKyAgICAgICAg dXBkYXRlX3NldF9wb29sX3dyaXRlKHMsIGUsIHNoZCwgc2V0LCAmZGVzY19wb29sX3dyaXRlX2lu Zm8pOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCit2b2lkIGZmX3ZrX3NoYWRlcl91cGRh dGVfaW1nX2FycmF5KEZGVnVsa2FuQ29udGV4dCAqcywgRkZWa0V4ZWNDb250ZXh0ICplLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGRlZ1bGthblNoYWRlciAqc2hkLCBBVkZy YW1lICpmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWa0ltYWdlVmlldyAq dmlld3MsIGludCBzZXQsIGludCBiaW5kaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBWa0ltYWdlTGF5b3V0IGxheW91dCwgVmtTYW1wbGVyIHNhbXBsZXIpCit7CisgICAg QVZIV0ZyYW1lc0NvbnRleHQgKmh3ZmMgPSAoQVZIV0ZyYW1lc0NvbnRleHQgKilmLT5od19mcmFt ZXNfY3R4LT5kYXRhOworICAgIGNvbnN0IGludCBuYl9wbGFuZXMgPSBhdl9waXhfZm10X2NvdW50 X3BsYW5lcyhod2ZjLT5zd19mb3JtYXQpOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuYl9w bGFuZXM7IGkrKykKKyAgICAgICAgZmZfdmtfc2hhZGVyX3VwZGF0ZV9pbWcocywgZSwgc2hkLCBz ZXQsIGJpbmRpbmcsIGksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdzW2ld LCBsYXlvdXQsIHNhbXBsZXIpOworfQorCitpbnQgZmZfdmtfc2hhZGVyX3VwZGF0ZV9kZXNjX2J1 ZmZlcihGRlZ1bGthbkNvbnRleHQgKnMsIEZGVmtFeGVjQ29udGV4dCAqZSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEZGVnVsa2FuU2hhZGVyICpzaGQsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2V0LCBpbnQgYmluZCwgaW50IGVsZW0sCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGRlZrQnVmZmVyICpidWYsIFZrRGV2 aWNlU2l6ZSBvZmZzZXQsIFZrRGV2aWNlU2l6ZSBsZW4sCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBWa0Zvcm1hdCBmbXQpCit7CisgICAgRkZWdWxrYW5EZXNjcmlwdG9yU2V0 ICpkZXNjX3NldCA9ICZzaGQtPmRlc2Nfc2V0W3NldF07CisKKyAgICBpZiAocy0+ZXh0ZW5zaW9u cyAmIEZGX1ZLX0VYVF9ERVNDUklQVE9SX0JVRkZFUikgeworICAgICAgICBWa0Rlc2NyaXB0b3JH ZXRJbmZvRVhUIGRlc2NfZ2V0X2luZm8gPSB7CisgICAgICAgICAgICAuc1R5cGUgPSBWS19TVFJV Q1RVUkVfVFlQRV9ERVNDUklQVE9SX0dFVF9JTkZPX0VYVCwKKyAgICAgICAgICAgIC50eXBlID0g ZGVzY19zZXQtPmJpbmRpbmdbYmluZF0uZGVzY3JpcHRvclR5cGUsCisgICAgICAgIH07CisgICAg ICAgIFZrRGVzY3JpcHRvckFkZHJlc3NJbmZvRVhUIGRlc2NfYnVmX2luZm8gPSB7CisgICAgICAg ICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9ERVNDUklQVE9SX0FERFJFU1NfSU5GT19F WFQsCisgICAgICAgICAgICAuYWRkcmVzcyA9IGJ1Zi0+YWRkcmVzcyArIG9mZnNldCwKKyAgICAg ICAgICAgIC5yYW5nZSA9IGxlbiwKKyAgICAgICAgICAgIC5mb3JtYXQgPSBmbXQsCisgICAgICAg IH07CisgICAgICAgIHNpemVfdCBkZXNjX3NpemU7CisKKyAgICAgICAgc3dpdGNoIChkZXNjX2dl dF9pbmZvLnR5cGUpIHsKKyAgICAgICAgY2FzZSBWS19ERVNDUklQVE9SX1RZUEVfVU5JRk9STV9C VUZGRVI6CisgICAgICAgICAgICBkZXNjX2dldF9pbmZvLmRhdGEucFVuaWZvcm1CdWZmZXIgPSAm ZGVzY19idWZfaW5mbzsKKyAgICAgICAgICAgIGRlc2Nfc2l6ZSA9IHMtPmRlc2NfYnVmX3Byb3Bz LnVuaWZvcm1CdWZmZXJEZXNjcmlwdG9yU2l6ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg ICBjYXNlIFZLX0RFU0NSSVBUT1JfVFlQRV9TVE9SQUdFX0JVRkZFUjoKKyAgICAgICAgICAgIGRl c2NfZ2V0X2luZm8uZGF0YS5wU3RvcmFnZUJ1ZmZlciA9ICZkZXNjX2J1Zl9pbmZvOworICAgICAg ICAgICAgZGVzY19zaXplID0gcy0+ZGVzY19idWZfcHJvcHMuc3RvcmFnZUJ1ZmZlckRlc2NyaXB0 b3JTaXplOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVktfREVTQ1JJUFRPUl9U WVBFX1VOSUZPUk1fVEVYRUxfQlVGRkVSOgorICAgICAgICAgICAgZGVzY19nZXRfaW5mby5kYXRh LnBVbmlmb3JtVGV4ZWxCdWZmZXIgPSAmZGVzY19idWZfaW5mbzsKKyAgICAgICAgICAgIGRlc2Nf c2l6ZSA9IHMtPmRlc2NfYnVmX3Byb3BzLnVuaWZvcm1UZXhlbEJ1ZmZlckRlc2NyaXB0b3JTaXpl OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVktfREVTQ1JJUFRPUl9UWVBFX1NU T1JBR0VfVEVYRUxfQlVGRkVSOgorICAgICAgICAgICAgZGVzY19nZXRfaW5mby5kYXRhLnBTdG9y YWdlVGV4ZWxCdWZmZXIgPSAmZGVzY19idWZfaW5mbzsKKyAgICAgICAgICAgIGRlc2Nfc2l6ZSA9 IHMtPmRlc2NfYnVmX3Byb3BzLnN0b3JhZ2VUZXhlbEJ1ZmZlckRlc2NyaXB0b3JTaXplOworICAg ICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBhdl9sb2cocywg QVZfTE9HX0VSUk9SLCAiSW52YWxpZCBkZXNjcmlwdG9yIHR5cGUgYXQgc2V0ICVpIGJpbmRpbmcg JWk6ICVpIVxuIiwKKyAgICAgICAgICAgICAgICAgICBzZXQsIGJpbmQsIGRlc2NfZ2V0X2luZm8u dHlwZSk7CisgICAgICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOworICAgICAgICAgICAg YnJlYWs7CisgICAgICAgIH07CisKKyAgICAgICAgdXBkYXRlX3NldF9kZXNjcmlwdG9yKHMsIGUs IHNoZCwgc2V0LCBiaW5kLCBlbGVtLCAmZGVzY19nZXRfaW5mbywgZGVzY19zaXplKTsKKyAgICB9 IGVsc2UgeworICAgICAgICBWa0Rlc2NyaXB0b3JCdWZmZXJJbmZvIGRlc2NfcG9vbF93cml0ZV9p bmZvX2J1ZiA9IHsKKyAgICAgICAgICAgIC5idWZmZXIgPSBidWYtPmJ1ZiwKKyAgICAgICAgICAg IC5vZmZzZXQgPSBidWYtPnZpcnR1YWxfb2Zmc2V0ICsgb2Zmc2V0LAorICAgICAgICAgICAgLnJh bmdlID0gbGVuLAorICAgICAgICB9OworICAgICAgICBWa1dyaXRlRGVzY3JpcHRvclNldCBkZXNj X3Bvb2xfd3JpdGVfaW5mbyA9IHsKKyAgICAgICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9U WVBFX1dSSVRFX0RFU0NSSVBUT1JfU0VULAorICAgICAgICAgICAgLmRzdEJpbmRpbmcgPSBiaW5k LAorICAgICAgICAgICAgLmRlc2NyaXB0b3JDb3VudCA9IDEsCisgICAgICAgICAgICAuZHN0QXJy YXlFbGVtZW50ID0gZWxlbSwKKyAgICAgICAgICAgIC5kZXNjcmlwdG9yVHlwZSA9IGRlc2Nfc2V0 LT5iaW5kaW5nW2JpbmRdLmRlc2NyaXB0b3JUeXBlLAorICAgICAgICAgICAgLnBCdWZmZXJJbmZv ID0gJmRlc2NfcG9vbF93cml0ZV9pbmZvX2J1ZiwKKyAgICAgICAgfTsKKyAgICAgICAgdXBkYXRl X3NldF9wb29sX3dyaXRlKHMsIGUsIHNoZCwgc2V0LCAmZGVzY19wb29sX3dyaXRlX2luZm8pOwor ICAgIH0KKworICAgIHJldHVybiAwOworfQorCit2b2lkIGZmX3ZrX3NoYWRlcl91cGRhdGVfcHVz aF9jb25zdChGRlZ1bGthbkNvbnRleHQgKnMsIEZGVmtFeGVjQ29udGV4dCAqZSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZGVnVsa2FuU2hhZGVyICpzaGQsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWa1NoYWRlclN0YWdlRmxhZ0JpdHMgc3RhZ2Us CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgb2Zmc2V0LCBzaXplX3Qg c2l6ZSwgdm9pZCAqc3JjKQoreworICAgIEZGVnVsa2FuRnVuY3Rpb25zICp2ayA9ICZzLT52a2Zu OworICAgIHZrLT5DbWRQdXNoQ29uc3RhbnRzKGUtPmJ1Ziwgc2hkLT5waXBlbGluZV9sYXlvdXQs CisgICAgICAgICAgICAgICAgICAgICAgICAgc3RhZ2UsIG9mZnNldCwgc2l6ZSwgc3JjKTsKK30K Kwordm9pZCBmZl92a19leGVjX2JpbmRfc2hhZGVyKEZGVnVsa2FuQ29udGV4dCAqcywgRkZWa0V4 ZWNDb250ZXh0ICplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZGVnVsa2FuU2hhZGVy ICpzaGQpCit7CisgICAgRkZWdWxrYW5GdW5jdGlvbnMgKnZrID0gJnMtPnZrZm47CisgICAgVmtE ZXZpY2VTaXplIG9mZnNldHNbMTAyNF07CisgICAgRkZWdWxrYW5TaGFkZXJEYXRhICpzZCA9IGdl dF9zaGRfZGF0YShlLCBzaGQpOworCisgICAgaWYgKHMtPmV4dGVuc2lvbnMgJiBGRl9WS19FWFRf U0hBREVSX09CSkVDVCkgeworICAgICAgICBWa1NoYWRlclN0YWdlRmxhZ0JpdHMgc3RhZ2VzID0g c2hkLT5zdGFnZTsKKyAgICAgICAgdmstPkNtZEJpbmRTaGFkZXJzRVhUKGUtPmJ1ZiwgMSwgJnN0 YWdlcywgJnNoZC0+b2JqZWN0KTsKKyAgICB9IGVsc2UgeworICAgICAgICB2ay0+Q21kQmluZFBp cGVsaW5lKGUtPmJ1Ziwgc2hkLT5iaW5kX3BvaW50LCBzaGQtPnBpcGVsaW5lKTsKKyAgICB9CisK KyAgICBpZiAoc2QgJiYgc2QtPm5iX2Rlc2NyaXB0b3Jfc2V0cykgeworICAgICAgICBpZiAocy0+ ZXh0ZW5zaW9ucyAmIEZGX1ZLX0VYVF9ERVNDUklQVE9SX0JVRkZFUikgeworICAgICAgICAgICAg Zm9yIChpbnQgaSA9IDA7IGkgPCBzZC0+bmJfZGVzY3JpcHRvcl9zZXRzOyBpKyspCisgICAgICAg ICAgICAgICAgb2Zmc2V0c1tpXSA9IHNoZC0+ZGVzY19zZXRbaV0uc2luZ3VsYXIgPyAwIDogc2hk LT5kZXNjX3NldFtpXS5hbGlnbmVkX3NpemUqZS0+aWR4OworCisgICAgICAgICAgICAvKiBCaW5k IGRlc2NyaXB0b3IgYnVmZmVycyAqLworICAgICAgICAgICAgdmstPkNtZEJpbmREZXNjcmlwdG9y QnVmZmVyc0VYVChlLT5idWYsIHNkLT5uYl9kZXNjcmlwdG9yX3NldHMsIHNkLT5kZXNjX2JpbmQp OworICAgICAgICAgICAgLyogQmluZGluZyBvZmZzZXRzICovCisgICAgICAgICAgICB2ay0+Q21k U2V0RGVzY3JpcHRvckJ1ZmZlck9mZnNldHNFWFQoZS0+YnVmLCBzaGQtPmJpbmRfcG9pbnQsIHNo ZC0+cGlwZWxpbmVfbGF5b3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDAsIHNkLT5uYl9kZXNjcmlwdG9yX3NldHMsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hkLT5ib3VuZF9idWZmZXJfaW5kaWNl cywgb2Zmc2V0cyk7CisgICAgICAgIH0gZWxzZSBpZiAoIXNoZC0+dXNlX3B1c2gpIHsKKyAgICAg ICAgICAgIHZrLT5DbWRCaW5kRGVzY3JpcHRvclNldHMoZS0+YnVmLCBzaGQtPmJpbmRfcG9pbnQs IHNoZC0+cGlwZWxpbmVfbGF5b3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAwLCBzZC0+bmJfZGVzY3JpcHRvcl9zZXRzLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAmc2QtPmRlc2Nfc2V0c1tlLT5pZHgqc2QtPm5iX2Rlc2NyaXB0b3Jfc2V0 c10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIE5VTEwpOworICAg ICAgICB9CisgICAgfQorfQorCit2b2lkIGZmX3ZrX3NoYWRlcl9mcmVlKEZGVnVsa2FuQ29udGV4 dCAqcywgRkZWdWxrYW5TaGFkZXIgKnNoZCkKK3sKKyAgICBGRlZ1bGthbkZ1bmN0aW9ucyAqdmsg PSAmcy0+dmtmbjsKKworICAgIGF2X2JwcmludF9maW5hbGl6ZSgmc2hkLT5zcmMsIE5VTEwpOwor CisjaWYgMAorICAgIGlmIChzaGQtPnNoYWRlci5tb2R1bGUpCisgICAgICAgIHZrLT5EZXN0cm95 U2hhZGVyTW9kdWxlKHMtPmh3Y3R4LT5hY3RfZGV2LCBzaGQtPnNoYWRlci5tb2R1bGUsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMtPmh3Y3R4LT5hbGxvYyk7CisjZW5kaWYKKwor ICAgIGlmIChzaGQtPm9iamVjdCkKKyAgICAgICAgdmstPkRlc3Ryb3lTaGFkZXJFWFQocy0+aHdj dHgtPmFjdF9kZXYsIHNoZC0+b2JqZWN0LCBzLT5od2N0eC0+YWxsb2MpOworICAgIGlmIChzaGQt PnBpcGVsaW5lKQorICAgICAgICB2ay0+RGVzdHJveVBpcGVsaW5lKHMtPmh3Y3R4LT5hY3RfZGV2 LCBzaGQtPnBpcGVsaW5lLCBzLT5od2N0eC0+YWxsb2MpOworICAgIGlmIChzaGQtPnBpcGVsaW5l X2xheW91dCkKKyAgICAgICAgdmstPkRlc3Ryb3lQaXBlbGluZUxheW91dChzLT5od2N0eC0+YWN0 X2Rldiwgc2hkLT5waXBlbGluZV9sYXlvdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcy0+aHdjdHgtPmFsbG9jKTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2hkLT5u Yl9kZXNjcmlwdG9yX3NldHM7IGkrKykgeworICAgICAgICBGRlZ1bGthbkRlc2NyaXB0b3JTZXQg KnNldCA9ICZzaGQtPmRlc2Nfc2V0W2ldOworICAgICAgICBhdl9mcmVlKHNldC0+YmluZGluZyk7 CisgICAgICAgIGF2X2ZyZWUoc2V0LT5iaW5kaW5nX29mZnNldCk7CisgICAgfQorCisgICAgaWYg KHNoZC0+ZGVzY19sYXlvdXQpIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaGQtPm5i X2Rlc2NyaXB0b3Jfc2V0czsgaSsrKQorICAgICAgICAgICAgaWYgKHNoZC0+ZGVzY19sYXlvdXRb aV0pCisgICAgICAgICAgICAgICAgdmstPkRlc3Ryb3lEZXNjcmlwdG9yU2V0TGF5b3V0KHMtPmh3 Y3R4LT5hY3RfZGV2LCBzaGQtPmRlc2NfbGF5b3V0W2ldLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzLT5od2N0eC0+YWxsb2MpOworICAgIH0KKworICAg IGF2X2ZyZWVwKCZzaGQtPmRlc2NfcG9vbF9zaXplKTsKKyAgICBhdl9mcmVlcCgmc2hkLT5kZXNj X2xheW91dCk7CisgICAgYXZfZnJlZXAoJnNoZC0+ZGVzY19zZXQpOworICAgIGF2X2ZyZWVwKCZz aGQtPmJvdW5kX2J1ZmZlcl9pbmRpY2VzKTsKKyAgICBhdl9mcmVlcCgmc2hkLT5wdXNoX2NvbnN0 cyk7CisgICAgc2hkLT5wdXNoX2NvbnN0c19udW0gPSAwOworfQorCit2b2lkIGZmX3ZrX3VuaW5p dChGRlZ1bGthbkNvbnRleHQgKnMpCit7CisgICAgYXZfZnJlZXAoJnMtPnF1ZXJ5X3Byb3BzKTsK KyAgICBhdl9mcmVlcCgmcy0+cWZfcHJvcHMpOworICAgIGF2X2ZyZWVwKCZzLT52aWRlb19wcm9w cyk7CisgICAgYXZfZnJlZXAoJnMtPmNvb3BfbWF0X3Byb3BzKTsKKyAgICBhdl9mcmVlcCgmcy0+ aG9zdF9pbWFnZV9jb3B5X2xheW91dHMpOworCisgICAgYXZfYnVmZmVyX3VucmVmKCZzLT5kZXZp Y2VfcmVmKTsKKyAgICBhdl9idWZmZXJfdW5yZWYoJnMtPmZyYW1lc19yZWYpOworfQorCitpbnQg ZmZfdmtfaW5pdChGRlZ1bGthbkNvbnRleHQgKnMsIHZvaWQgKmxvZ19wYXJlbnQsCisgICAgICAg ICAgICAgICBBVkJ1ZmZlclJlZiAqZGV2aWNlX3JlZiwgQVZCdWZmZXJSZWYgKmZyYW1lc19yZWYp Cit7CisgICAgaW50IGVycjsKKworICAgIHN0YXRpYyBjb25zdCBBVkNsYXNzIHZ1bGthbl9jb250 ZXh0X2NsYXNzID0geworICAgICAgICAuY2xhc3NfbmFtZSAgICAgICA9ICJ2ayIsCisgICAgICAg IC52ZXJzaW9uICAgICAgICAgID0gTElCQVZVVElMX1ZFUlNJT05fSU5ULAorICAgICAgICAucGFy ZW50X2xvZ19jb250ZXh0X29mZnNldCA9IG9mZnNldG9mKEZGVnVsa2FuQ29udGV4dCwgbG9nX3Bh cmVudCksCisgICAgfTsKKworICAgIG1lbXNldChzLCAwLCBzaXplb2YoKnMpKTsKKyAgICBzLT5s b2dfcGFyZW50ID0gbG9nX3BhcmVudDsKKyAgICBzLT5jbGFzcyAgICAgID0gJnZ1bGthbl9jb250 ZXh0X2NsYXNzOworCisgICAgaWYgKGZyYW1lc19yZWYpIHsKKyAgICAgICAgcy0+ZnJhbWVzX3Jl ZiA9IGF2X2J1ZmZlcl9yZWYoZnJhbWVzX3JlZik7CisgICAgICAgIGlmICghcy0+ZnJhbWVzX3Jl ZikKKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7CisKKyAgICAgICAgcy0+ZnJh bWVzID0gKEFWSFdGcmFtZXNDb250ZXh0ICopcy0+ZnJhbWVzX3JlZi0+ZGF0YTsKKyAgICAgICAg cy0+aHdmYyA9IHMtPmZyYW1lcy0+aHdjdHg7CisKKyAgICAgICAgZGV2aWNlX3JlZiA9IHMtPmZy YW1lcy0+ZGV2aWNlX3JlZjsKKyAgICB9CisKKyAgICBzLT5kZXZpY2VfcmVmID0gYXZfYnVmZmVy X3JlZihkZXZpY2VfcmVmKTsKKyAgICBpZiAoIXMtPmRldmljZV9yZWYpIHsKKyAgICAgICAgZmZf dmtfdW5pbml0KHMpOworICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOworICAgIH0KKwor ICAgIHMtPmRldmljZSA9IChBVkhXRGV2aWNlQ29udGV4dCAqKXMtPmRldmljZV9yZWYtPmRhdGE7 CisgICAgcy0+aHdjdHggPSBzLT5kZXZpY2UtPmh3Y3R4OworCisgICAgcy0+ZXh0ZW5zaW9ucyA9 IGZmX3ZrX2V4dGVuc2lvbnNfdG9fbWFzayhzLT5od2N0eC0+ZW5hYmxlZF9kZXZfZXh0ZW5zaW9u cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMtPmh3Y3R4 LT5uYl9lbmFibGVkX2Rldl9leHRlbnNpb25zKTsKKyAgICBzLT5leHRlbnNpb25zIHw9IGZmX3Zr X2V4dGVuc2lvbnNfdG9fbWFzayhzLT5od2N0eC0+ZW5hYmxlZF9pbnN0X2V4dGVuc2lvbnMsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy0+aHdjdHgtPm5i X2VuYWJsZWRfaW5zdF9leHRlbnNpb25zKTsKKworICAgIGVyciA9IGZmX3ZrX2xvYWRfZnVuY3Rp b25zKHMtPmRldmljZSwgJnMtPnZrZm4sIHMtPmV4dGVuc2lvbnMsIDEsIDEpOworICAgIGlmIChl cnIgPCAwKSB7CisgICAgICAgIGZmX3ZrX3VuaW5pdChzKTsKKyAgICAgICAgcmV0dXJuIGVycjsK KyAgICB9CisKKyAgICBlcnIgPSBmZl92a19sb2FkX3Byb3BzKHMpOworICAgIGlmIChlcnIgPCAw KSB7CisgICAgICAgIGZmX3ZrX3VuaW5pdChzKTsKKyAgICAgICAgcmV0dXJuIGVycjsKKyAgICB9 CisKKyAgICByZXR1cm4gMDsKK30KLS0gCjIuNDkuMQoKCkZyb20gYjFlM2NiMzQyNDVmNjJkYzc0 YzNjMjZhMmZjNmQ2YjMzMGQ5NTdjYSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKRnJvbTogSmFt YWlrYTEgPGx1a2FzemN6MThAd3AucGw+CkRhdGU6IFdlZCwgMyBTZXAgMjAyNSAxMzoxODoyMCAr MDAwMApTdWJqZWN0OiBbUEFUQ0ggMDQ1LzExOF0gQ2hhbmdpbmcgdnVsa2FuIGZpbGUgZGlyZWN0 b3J5CgotLS0KIGxpYmF2dXRpbC92dWxrYW4uaCB8IDY2NSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCA2NjUgZGVsZXRpb25zKC0p CiBkZWxldGUgbW9kZSAxMDA2NDQgbGliYXZ1dGlsL3Z1bGthbi5oCgpkaWZmIC0tZ2l0IGEvbGli YXZ1dGlsL3Z1bGthbi5oIGIvbGliYXZ1dGlsL3Z1bGthbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw MDY0NAppbmRleCBlMWM5YTU3OTJmLi4wMDAwMDAwMDAwCi0tLSBhL2xpYmF2dXRpbC92dWxrYW4u aAorKysgL2Rldi9udWxsCkBAIC0xLDY2NSArMCwwIEBACi0vKgotICogVGhpcyBmaWxlIGlzIHBh cnQgb2YgRkZtcGVnLgotICoKLSAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyLjEgb2YgdGhl IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICog RkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws Ci0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3 YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w eSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRo IEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlv biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjEx MC0xMzAxIFVTQQotICovCi0KLSNpZm5kZWYgQVZVVElMX1ZVTEtBTl9ICi0jZGVmaW5lIEFWVVRJ TF9WVUxLQU5fSAotCi0jZGVmaW5lIFZLX05PX1BST1RPVFlQRVMKLQotI2luY2x1ZGUgPHN0ZGF0 b21pYy5oPgotCi0jaW5jbHVkZSAicGl4ZGVzYy5oIgotI2luY2x1ZGUgImJwcmludC5oIgotI2lu Y2x1ZGUgImh3Y29udGV4dC5oIgotI2luY2x1ZGUgInZ1bGthbl9mdW5jdGlvbnMuaCIKLSNpbmNs dWRlICJod2NvbnRleHRfdnVsa2FuLmgiCi0KLS8qIEdMU0wgbWFuYWdlbWVudCBtYWNyb3MgKi8K LSNkZWZpbmUgSU5ERU5UKE4pIElOREVOVF8jI04KLSNkZWZpbmUgSU5ERU5UXzAKLSNkZWZpbmUg SU5ERU5UXzEgSU5ERU5UXzAgIiAgICAiCi0jZGVmaW5lIElOREVOVF8yIElOREVOVF8xIElOREVO VF8xCi0jZGVmaW5lIElOREVOVF8zIElOREVOVF8yIElOREVOVF8xCi0jZGVmaW5lIElOREVOVF80 IElOREVOVF8zIElOREVOVF8xCi0jZGVmaW5lIElOREVOVF81IElOREVOVF80IElOREVOVF8xCi0j ZGVmaW5lIElOREVOVF82IElOREVOVF81IElOREVOVF8xCi0jZGVmaW5lIEMoTiwgUykgICAgICAg ICAgSU5ERU5UKE4pICNTICJcbiIKLQotI2RlZmluZSBHTFNMQyhOLCBTKSAgICAgICAgICAgICAg ICAgICAgIFwKLSAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg ICAgIGF2X2JwcmludGYoJnNoZC0+c3JjLCBDKE4sIFMpKTsgXAotICAgIH0gd2hpbGUgKDApCi0K LSNkZWZpbmUgR0xTTEEoLi4uKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGRvIHsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGF2X2JwcmludGYo JnNoZC0+c3JjLCBfX1ZBX0FSR1NfXyk7IFwKLSAgICB9IHdoaWxlICgwKQotCi0jZGVmaW5lIEdM U0xGKE4sIFMsIC4uLikgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBkbyB7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBhdl9i cHJpbnRmKCZzaGQtPnNyYywgQyhOLCBTKSwgX19WQV9BUkdTX18pOyBcCi0gICAgfSB3aGlsZSAo MCkKLQotI2RlZmluZSBHTFNMRChEKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCi0gICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKLSAgICAgICAgYXZfYnByaW50Zigmc2hkLT5zcmMsICJcbiIpOyAgICAgICAgICAg ICAgICAgICAgXAotICAgICAgICBhdl9icHJpbnRfYXBwZW5kX2RhdGEoJnNoZC0+c3JjLCBELCBz dHJsZW4oRCkpOyBcCi0gICAgICAgIGF2X2JwcmludGYoJnNoZC0+c3JjLCAiXG4iKTsgICAgICAg ICAgICAgICAgICAgIFwKLSAgICB9IHdoaWxlICgwKQotCi0vKiBIZWxwZXIsIHByZXR0eSBtdWNo IGV2ZXJ5IFZ1bGthbiByZXR1cm4gdmFsdWUgbmVlZHMgdG8gYmUgY2hlY2tlZCAqLwotI2RlZmlu ZSBSRVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKLSAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGlmICgo ZXJyID0gKHgpKSA8IDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAotICAgICAgICAgICAgZ290byBmYWlsOyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9IHdoaWxlICgwKQotCi0j ZGVmaW5lIERVUF9TQU1QTEVSKHgpIHsgeCwgeCwgeCwgeCB9Ci0KLXR5cGVkZWYgc3RydWN0IEZG VnVsa2FuRGVzY3JpcHRvclNldEJpbmRpbmcgewotICAgIGNvbnN0IGNoYXIgICAgICAgICAqbmFt ZTsKLSAgICBWa0Rlc2NyaXB0b3JUeXBlICAgIHR5cGU7Ci0gICAgY29uc3QgY2hhciAgICAgICAg ICptZW1fbGF5b3V0OyAgLyogU3RvcmFnZSBpbWFnZXMgKHJnYmE4LCBldGMuKSBhbmQgYnVmZmVy cyAoc3RkNDMwLCBldGMuKSAqLwotICAgIGNvbnN0IGNoYXIgICAgICAgICAqbWVtX3F1YWxpOyAg IC8qIHJlYWRvbmx5LCB3cml0ZW9ubHksIGV0Yy4gKi8KLSAgICBjb25zdCBjaGFyICAgICAgICAg KmJ1Zl9jb250ZW50OyAvKiBGb3IgYnVmZmVycyAqLwotICAgIHVpbnQzMl90ICAgICAgICAgICAg ZGltZW5zaW9uczsgIC8qIE5lZWRlZCBmb3IgZS5nLiBzYW1wbGVyJWlEICovCi0gICAgdWludDMy X3QgICAgICAgICAgICBlbGVtczsgICAgICAgLyogMCAtIHNjYWxhciwgMSBvciBtb3JlIC0gdmVj dG9yICovCi0gICAgVmtTaGFkZXJTdGFnZUZsYWdzICBzdGFnZXM7Ci0gICAgdWludDMyX3QgICAg ICAgICAgICBidWZfZWxlbXM7ICAgLyogQXBwZW5kcyBbYnVmX2VsZW1zXSB0byB0aGUgY29udGVu dHMuIEF2b2lkcyBtYW51YWxseSBwcmludGluZyB0byBhIHN0cmluZy4gKi8KLSAgICBWa1NhbXBs ZXIgICAgICAgICAgIHNhbXBsZXJzWzRdOyAvKiBTYW1wbGVyIHRvIHVzZSBmb3IgYWxsIGVsZW1z ICovCi19IEZGVnVsa2FuRGVzY3JpcHRvclNldEJpbmRpbmc7Ci0KLXR5cGVkZWYgc3RydWN0IEZG VmtCdWZmZXIgewotICAgIFZrQnVmZmVyIGJ1ZjsKLSAgICBWa0RldmljZU1lbW9yeSBtZW07Ci0g ICAgVmtNZW1vcnlQcm9wZXJ0eUZsYWdCaXRzIGZsYWdzOwotICAgIHNpemVfdCBzaXplOwotICAg IFZrRGV2aWNlQWRkcmVzcyBhZGRyZXNzOwotCi0gICAgLyogTG9jYWwgdXNlIG9ubHkgKi8KLSAg ICBWa1BpcGVsaW5lU3RhZ2VGbGFnczIgc3RhZ2U7Ci0gICAgVmtBY2Nlc3NGbGFnczIgYWNjZXNz OwotCi0gICAgLyogT25seSB2YWxpZCB3aGVuIGFsbG9jYXRlZCB2aWEgZmZfdmtfZ2V0X3Bvb2xl ZF9idWZmZXIgd2l0aCBIT1NUX1ZJU0lCTEUgb3IKLSAgICAgKiB2aWEgZmZfdmtfaG9zdF9tYXBf YnVmZmVyICovCi0gICAgdWludDhfdCAqbWFwcGVkX21lbTsKLQotICAgIC8qIFNldCBieSBmZl92 a19ob3N0X21hcF9idWZmZXIuIFRoaXMgaXMgdGhlIG9mZnNldCBhdCB3aGljaCB0aGUgYnVmZmVy IGRhdGEKLSAgICAgKiBhY3R1YWxseSBiZWdpbnMgYXQuCi0gICAgICogVGhlIGFkZHJlc3MgYW5k IG1hcHBlZF9tZW0gZmllbGRzIHdpbGwgYmUgb2Zmc2V0IGJ5IHRoaXMgYW1vdW50LiAqLwotICAg IHNpemVfdCB2aXJ0dWFsX29mZnNldDsKLQotICAgIC8qIElmIGhvc3QgbWFwcGluZywgcmVmZXJl bmNlIHRvIHRoZSBiYWNraW5nIGhvc3QgbWVtb3J5IGJ1ZmZlciAqLwotICAgIEFWQnVmZmVyUmVm ICpob3N0X3JlZjsKLX0gRkZWa0J1ZmZlcjsKLQotdHlwZWRlZiBzdHJ1Y3QgRkZWa0V4ZWNDb250 ZXh0IHsKLSAgICB1aW50MzJfdCBpZHg7Ci0gICAgY29uc3Qgc3RydWN0IEZGVmtFeGVjUG9vbCAq cGFyZW50OwotICAgIGludCBoYWRfc3VibWlzc2lvbjsKLQotICAgIC8qIFF1ZXVlIGZvciB0aGUg ZXhlY3V0aW9uIGNvbnRleHQgKi8KLSAgICBWa1F1ZXVlIHF1ZXVlOwotICAgIGludCBxZjsKLSAg ICBpbnQgcWk7Ci0KLSAgICAvKiBDb21tYW5kIGJ1ZmZlciBmb3IgdGhlIGNvbnRleHQgKi8KLSAg ICBWa0NvbW1hbmRCdWZmZXIgYnVmOwotCi0gICAgLyogRmVuY2UgZm9yIHRoZSBjb21tYW5kIGJ1 ZmZlciAqLwotICAgIFZrRmVuY2UgZmVuY2U7Ci0KLSAgICAvKiBPcGFxdWUgZGF0YSwgdW50b3Vj aGVkLCBmcmVlIHRvIHVzZSBieSB1c2VycyAqLwotICAgIHZvaWQgKm9wYXF1ZTsKLQotICAgIHZv aWQgKnF1ZXJ5X2RhdGE7Ci0gICAgaW50IHF1ZXJ5X2lkeDsKLQotICAgIC8qIEJ1ZmZlciBkZXBl bmRlbmNpZXMgKi8KLSAgICBBVkJ1ZmZlclJlZiAqKmJ1Zl9kZXBzOwotICAgIGludCBuYl9idWZf ZGVwczsKLSAgICB1bnNpZ25lZCBpbnQgYnVmX2RlcHNfYWxsb2Nfc2l6ZTsKLQotICAgIC8qIEZy YW1lIGRlcGVuZGVuY2llcyAqLwotICAgIEFWRnJhbWUgKipmcmFtZV9kZXBzOwotICAgIHVuc2ln bmVkIGludCBmcmFtZV9kZXBzX2FsbG9jX3NpemU7Ci0gICAgaW50IG5iX2ZyYW1lX2RlcHM7Ci0K LSAgICAvKiBTb2Z0d2FyZSBmcmFtZSBkZXBlbmRlbmNpZXMgKi8KLSAgICBBVkZyYW1lICoqc3df ZnJhbWVfZGVwczsKLSAgICB1bnNpZ25lZCBpbnQgc3dfZnJhbWVfZGVwc19hbGxvY19zaXplOwot ICAgIGludCBuYl9zd19mcmFtZV9kZXBzOwotCi0gICAgVmtTZW1hcGhvcmVTdWJtaXRJbmZvICpz ZW1fd2FpdDsKLSAgICB1bnNpZ25lZCBpbnQgc2VtX3dhaXRfYWxsb2M7Ci0gICAgaW50IHNlbV93 YWl0X2NudDsKLQotICAgIFZrU2VtYXBob3JlU3VibWl0SW5mbyAqc2VtX3NpZzsKLSAgICB1bnNp Z25lZCBpbnQgc2VtX3NpZ19hbGxvYzsKLSAgICBpbnQgc2VtX3NpZ19jbnQ7Ci0KLSAgICB1aW50 NjRfdCAqKnNlbV9zaWdfdmFsX2RzdDsKLSAgICB1bnNpZ25lZCBpbnQgc2VtX3NpZ192YWxfZHN0 X2FsbG9jOwotICAgIGludCBzZW1fc2lnX3ZhbF9kc3RfY250OwotCi0gICAgdWludDhfdCAqZnJh bWVfbG9ja2VkOwotICAgIHVuc2lnbmVkIGludCBmcmFtZV9sb2NrZWRfYWxsb2Nfc2l6ZTsKLQot ICAgIFZrQWNjZXNzRmxhZ0JpdHMgKmFjY2Vzc19kc3Q7Ci0gICAgdW5zaWduZWQgaW50IGFjY2Vz c19kc3RfYWxsb2M7Ci0KLSAgICBWa0ltYWdlTGF5b3V0ICpsYXlvdXRfZHN0OwotICAgIHVuc2ln bmVkIGludCBsYXlvdXRfZHN0X2FsbG9jOwotCi0gICAgdWludDMyX3QgKnF1ZXVlX2ZhbWlseV9k c3Q7Ci0gICAgdW5zaWduZWQgaW50IHF1ZXVlX2ZhbWlseV9kc3RfYWxsb2M7Ci0KLSAgICB1aW50 OF90ICpmcmFtZV91cGRhdGU7Ci0gICAgdW5zaWduZWQgaW50IGZyYW1lX3VwZGF0ZV9hbGxvY19z aXplOwotfSBGRlZrRXhlY0NvbnRleHQ7Ci0KLXR5cGVkZWYgc3RydWN0IEZGVnVsa2FuRGVzY3Jp cHRvclNldCB7Ci0gICAgLyogRGVzY3JpcHRvciBidWZmZXIgKi8KLSAgICBWa0RldmljZVNpemUg bGF5b3V0X3NpemU7Ci0gICAgVmtEZXZpY2VTaXplIGFsaWduZWRfc2l6ZTsgLyogZGVzY3JpcHRv ckJ1ZmZlck9mZnNldEFsaWdubWVudCAqLwotICAgIFZrQnVmZmVyVXNhZ2VGbGFncyB1c2FnZTsK LQotICAgIFZrRGVzY3JpcHRvclNldExheW91dEJpbmRpbmcgKmJpbmRpbmc7Ci0gICAgVmtEZXZp Y2VTaXplICpiaW5kaW5nX29mZnNldDsKLSAgICBpbnQgbmJfYmluZGluZ3M7Ci0KLSAgICAvKiBE ZXNjcmlwdG9yIHNldCBpcyBzaGFyZWQgYmV0d2VlbiBhbGwgc3VibWlzc2lvbnMgKi8KLSAgICBp bnQgc2luZ3VsYXI7Ci19IEZGVnVsa2FuRGVzY3JpcHRvclNldDsKLQotdHlwZWRlZiBzdHJ1Y3Qg RkZWdWxrYW5TaGFkZXIgewotICAgIC8qIE5hbWUgZm9yIGlkL2RlYnVnZ2luZyBwdXJwb3NlcyAq LwotICAgIGNvbnN0IGNoYXIgKm5hbWU7Ci0KLSAgICAvKiBTaGFkZXIgdGV4dCAqLwotICAgIEFW QlByaW50IHNyYzsKLQotICAgIC8qIENvbXB1dGUgc2hhZGVyIGxvY2FsIGdyb3VwIHNpemVzICov Ci0gICAgaW50IGxnX3NpemVbM107Ci0KLSAgICAvKiBTaGFkZXIgYmluZCBwb2ludC90eXBlICov Ci0gICAgVmtQaXBlbGluZVN0YWdlRmxhZ3Mgc3RhZ2U7Ci0gICAgVmtQaXBlbGluZUJpbmRQb2lu dCBiaW5kX3BvaW50OwotCi0gICAgLyogQ3JlYXRpb24gaW5mbyAqLwotICAgIFZrUGlwZWxpbmVT aGFkZXJTdGFnZVJlcXVpcmVkU3ViZ3JvdXBTaXplQ3JlYXRlSW5mbyBzdWJncm91cF9pbmZvOwot Ci0gICAgLyogQmFzZSBzaGFkZXIgb2JqZWN0ICovCi0gICAgVmtTaGFkZXJFWFQgb2JqZWN0Owot ICAgIFZrUGlwZWxpbmUgcGlwZWxpbmU7Ci0KLSAgICAvKiBQaXBlbGluZSBsYXlvdXQgKi8KLSAg ICBWa1BpcGVsaW5lTGF5b3V0IHBpcGVsaW5lX2xheW91dDsKLQotICAgIC8qIFB1c2ggY29uc3Rz ICovCi0gICAgVmtQdXNoQ29uc3RhbnRSYW5nZSAqcHVzaF9jb25zdHM7Ci0gICAgaW50IHB1c2hf Y29uc3RzX251bTsKLQotICAgIC8qIERlc2NyaXB0b3Igc2V0cyAqLwotICAgIEZGVnVsa2FuRGVz Y3JpcHRvclNldCAqZGVzY19zZXQ7Ci0gICAgaW50IG5iX2Rlc2NyaXB0b3Jfc2V0czsKLQotICAg IC8qIERlc2NyaXB0b3IgYnVmZmVyICovCi0gICAgVmtEZXNjcmlwdG9yU2V0TGF5b3V0ICpkZXNj X2xheW91dDsKLSAgICB1aW50MzJfdCAqYm91bmRfYnVmZmVyX2luZGljZXM7Ci0KLSAgICAvKiBE ZXNjcmlwdG9yIHBvb2wgKi8KLSAgICBpbnQgdXNlX3B1c2g7Ci0gICAgVmtEZXNjcmlwdG9yUG9v bFNpemUgKmRlc2NfcG9vbF9zaXplOwotICAgIGludCBuYl9kZXNjX3Bvb2xfc2l6ZTsKLX0gRkZW dWxrYW5TaGFkZXI7Ci0KLXR5cGVkZWYgc3RydWN0IEZGVnVsa2FuRGVzY3JpcHRvclNldERhdGEg ewotICAgIC8qIERlc2NyaXB0b3IgYnVmZmVyICovCi0gICAgRkZWa0J1ZmZlciBidWY7Ci0gICAg dWludDhfdCAqZGVzY19tZW07Ci19IEZGVnVsa2FuRGVzY3JpcHRvclNldERhdGE7Ci0KLXR5cGVk ZWYgc3RydWN0IEZGVnVsa2FuU2hhZGVyRGF0YSB7Ci0gICAgLyogU2hhZGVyIHRvIHdoaWNoIHRo aXMgZGF0YSBiZWxvbmdzIHRvICovCi0gICAgRkZWdWxrYW5TaGFkZXIgKnNoZDsKLSAgICBpbnQg bmJfZGVzY3JpcHRvcl9zZXRzOwotCi0gICAgLyogRGVzY3JpcHRvciBidWZmZXIgKi8KLSAgICBG RlZ1bGthbkRlc2NyaXB0b3JTZXREYXRhICpkZXNjX3NldF9idWY7Ci0gICAgVmtEZXNjcmlwdG9y QnVmZmVyQmluZGluZ0luZm9FWFQgKmRlc2NfYmluZDsKLQotICAgIC8qIERlc2NyaXB0b3IgcG9v bHMgKi8KLSAgICBWa0Rlc2NyaXB0b3JTZXQgKmRlc2Nfc2V0czsKLSAgICBWa0Rlc2NyaXB0b3JQ b29sIGRlc2NfcG9vbDsKLX0gRkZWdWxrYW5TaGFkZXJEYXRhOwotCi10eXBlZGVmIHN0cnVjdCBG RlZrRXhlY1Bvb2wgewotICAgIEZGVmtFeGVjQ29udGV4dCAqY29udGV4dHM7Ci0gICAgYXRvbWlj X3VpbnRfbGVhc3Q2NF90IGlkeDsKLQotICAgIFZrQ29tbWFuZFBvb2wgKmNtZF9idWZfcG9vbHM7 Ci0gICAgVmtDb21tYW5kQnVmZmVyICpjbWRfYnVmczsKLSAgICBpbnQgcG9vbF9zaXplOwotCi0g ICAgVmtRdWVyeVBvb2wgcXVlcnlfcG9vbDsKLSAgICB2b2lkICpxdWVyeV9kYXRhOwotICAgIGlu dCBxdWVyeV9yZXN1bHRzOwotICAgIGludCBxdWVyeV9zdGF0dXNlczsKLSAgICBpbnQgcXVlcnlf NjRiaXQ7Ci0gICAgaW50IHF1ZXJ5X3N0YXR1c19zdHJpZGU7Ci0gICAgaW50IG5iX3F1ZXJpZXM7 Ci0gICAgc2l6ZV90IHFkX3NpemU7Ci0KLSAgICAvKiBSZWdpc3RlcmVkIHNoYWRlcnMnIGRhdGEg Ki8KLSAgICBGRlZ1bGthblNoYWRlckRhdGEgKnJlZ19zaGQ7Ci0gICAgaW50IG5iX3JlZ19zaGQ7 Ci19IEZGVmtFeGVjUG9vbDsKLQotdHlwZWRlZiBzdHJ1Y3QgRkZWdWxrYW5Db250ZXh0IHsKLSAg ICBjb25zdCBBVkNsYXNzICpjbGFzczsKLSAgICB2b2lkICpsb2dfcGFyZW50OwotCi0gICAgRkZW dWxrYW5GdW5jdGlvbnMgICAgIHZrZm47Ci0gICAgRkZWdWxrYW5FeHRlbnNpb25zICAgIGV4dGVu c2lvbnM7Ci0gICAgVmtQaHlzaWNhbERldmljZVByb3BlcnRpZXMyIHByb3BzOwotICAgIFZrUGh5 c2ljYWxEZXZpY2VWdWxrYW4xMVByb3BlcnRpZXMgcHJvcHNfMTE7Ci0gICAgVmtQaHlzaWNhbERl dmljZURyaXZlclByb3BlcnRpZXMgZHJpdmVyX3Byb3BzOwotICAgIFZrUGh5c2ljYWxEZXZpY2VN ZW1vcnlQcm9wZXJ0aWVzIG1wcm9wczsKLSAgICBWa1BoeXNpY2FsRGV2aWNlRXh0ZXJuYWxNZW1v cnlIb3N0UHJvcGVydGllc0VYVCBocHJvcHM7Ci0gICAgVmtQaHlzaWNhbERldmljZURlc2NyaXB0 b3JCdWZmZXJQcm9wZXJ0aWVzRVhUIGRlc2NfYnVmX3Byb3BzOwotICAgIFZrUGh5c2ljYWxEZXZp Y2VTdWJncm91cFNpemVDb250cm9sUHJvcGVydGllcyBzdWJncm91cF9wcm9wczsKLSAgICBWa1Bo eXNpY2FsRGV2aWNlQ29vcGVyYXRpdmVNYXRyaXhQcm9wZXJ0aWVzS0hSIGNvb3BfbWF0cml4X3By b3BzOwotICAgIFZrUGh5c2ljYWxEZXZpY2VQdXNoRGVzY3JpcHRvclByb3BlcnRpZXNLSFIgcHVz aF9kZXNjX3Byb3BzOwotICAgIFZrUGh5c2ljYWxEZXZpY2VPcHRpY2FsRmxvd1Byb3BlcnRpZXNO ViBvcHRpY2FsX2Zsb3dfcHJvcHM7Ci0gICAgVmtRdWV1ZUZhbWlseVF1ZXJ5UmVzdWx0U3RhdHVz UHJvcGVydGllc0tIUiAqcXVlcnlfcHJvcHM7Ci0gICAgVmtRdWV1ZUZhbWlseVZpZGVvUHJvcGVy dGllc0tIUiAqdmlkZW9fcHJvcHM7Ci0gICAgVmtRdWV1ZUZhbWlseVByb3BlcnRpZXMyICpxZl9w cm9wczsKLSAgICBpbnQgdG90X25iX3FmczsKLSAgICBWa1BoeXNpY2FsRGV2aWNlSG9zdEltYWdl Q29weVByb3BlcnRpZXNFWFQgaG9zdF9pbWFnZV9wcm9wczsKLSAgICBWa0ltYWdlTGF5b3V0ICpo b3N0X2ltYWdlX2NvcHlfbGF5b3V0czsKLQotICAgIFZrQ29vcGVyYXRpdmVNYXRyaXhQcm9wZXJ0 aWVzS0hSICpjb29wX21hdF9wcm9wczsKLSAgICB1aW50MzJfdCBjb29wX21hdF9wcm9wc19uYjsK LQotICAgIFZrUGh5c2ljYWxEZXZpY2VTaGFkZXJBdG9taWNGbG9hdEZlYXR1cmVzRVhUIGF0b21p Y19mbG9hdF9mZWF0czsKLSAgICBWa1BoeXNpY2FsRGV2aWNlVnVsa2FuMTJGZWF0dXJlcyBmZWF0 c18xMjsKLSAgICBWa1BoeXNpY2FsRGV2aWNlRmVhdHVyZXMyIGZlYXRzOwotCi0gICAgQVZCdWZm ZXJSZWYgICAgICAgICAgICpkZXZpY2VfcmVmOwotICAgIEFWSFdEZXZpY2VDb250ZXh0ICAgICAq ZGV2aWNlOwotICAgIEFWVnVsa2FuRGV2aWNlQ29udGV4dCAqaHdjdHg7Ci0KLSAgICBBVkJ1ZmZl clJlZiAgICAgICAgICAgKmlucHV0X2ZyYW1lc19yZWY7Ci0gICAgQVZCdWZmZXJSZWYgICAgICAg ICAgICpmcmFtZXNfcmVmOwotICAgIEFWSFdGcmFtZXNDb250ZXh0ICAgICAqZnJhbWVzOwotICAg IEFWVnVsa2FuRnJhbWVzQ29udGV4dCAqaHdmYzsKLQotICAgIHVpbnQzMl90ICAgICAgICAgICAg ICAgcWZzWzY0XTsKLSAgICBpbnQgICAgICAgICAgICAgICAgICAgIG5iX3FmczsKLQotICAgIC8q IFByb3BlcnRpZXMgKi8KLSAgICBpbnQgICAgICAgICAgICAgICAgIG91dHB1dF93aWR0aDsKLSAg ICBpbnQgICAgICAgICAgICAgICAgb3V0cHV0X2hlaWdodDsKLSAgICBlbnVtIEFWUGl4ZWxGb3Jt YXQgb3V0cHV0X2Zvcm1hdDsKLSAgICBlbnVtIEFWUGl4ZWxGb3JtYXQgIGlucHV0X2Zvcm1hdDsK LX0gRkZWdWxrYW5Db250ZXh0OwotCi1zdGF0aWMgaW5saW5lIGludCBmZl92a19jb3VudF9pbWFn ZXMoQVZWa0ZyYW1lICpmKQotewotICAgIGludCBjbnQgPSAwOwotICAgIHdoaWxlIChjbnQgPCBG Rl9BUlJBWV9FTEVNUyhmLT5pbWcpICYmIGYtPmltZ1tjbnRdKQotICAgICAgICBjbnQrKzsKLQot ICAgIHJldHVybiBjbnQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgY29uc3Qgdm9pZCAqZmZfdmtfZmlu ZF9zdHJ1Y3QoY29uc3Qgdm9pZCAqY2hhaW4sIFZrU3RydWN0dXJlVHlwZSBzdHlwZSkKLXsKLSAg ICBjb25zdCBWa0Jhc2VJblN0cnVjdHVyZSAqaW4gPSBjaGFpbjsKLSAgICB3aGlsZSAoaW4pIHsK LSAgICAgICAgaWYgKGluLT5zVHlwZSA9PSBzdHlwZSkKLSAgICAgICAgICAgIHJldHVybiBpbjsK LQotICAgICAgICBpbiA9IGluLT5wTmV4dDsKLSAgICB9Ci0KLSAgICByZXR1cm4gTlVMTDsKLX0K LQotc3RhdGljIGlubGluZSB2b2lkIGZmX3ZrX2xpbmtfc3RydWN0KHZvaWQgKmNoYWluLCBjb25z dCB2b2lkICppbikKLXsKLSAgICBWa0Jhc2VPdXRTdHJ1Y3R1cmUgKm91dCA9IGNoYWluOwotICAg IHdoaWxlIChvdXQtPnBOZXh0KQotICAgICAgICBvdXQgPSBvdXQtPnBOZXh0OwotCi0gICAgb3V0 LT5wTmV4dCA9ICh2b2lkICopaW47Ci19Ci0KLSNkZWZpbmUgRkZfVktfU1RSVUNUX0VYVChDVFgs IEJBU0UsIFNUUlVDVF9QLCBFWFRfRkxBRywgVFlQRSkgXAotICAgIGRvIHsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGlmICgo RVhUX0ZMQUcgPT0gRkZfVktfRVhUX05PX0ZMQUcpIHx8ICAgICAgICAgICAgICAgIFwKLSAgICAg ICAgICAgICgoQ1RYKS0+ZXh0ZW5zaW9ucyAmIEVYVF9GTEFHKSkgeyAgICAgICAgICAgICAgICAg XAotICAgICAgICAgICAgKFNUUlVDVF9QKS0+c1R5cGUgPSBUWVBFOyAgICAgICAgICAgICAgICAg ICAgICAgICBcCi0gICAgICAgICAgICBmZl92a19saW5rX3N0cnVjdChCQVNFLCBTVFJVQ1RfUCk7 ICAgICAgICAgICAgICAgIFwKLSAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gd2hpbGUgKDApCi0KLS8qIElkZW50aXR5 IG1hcHBpbmcgLSByID0gciwgYiA9IGIsIGcgPSBnLCBhID0gYSAqLwotZXh0ZXJuIGNvbnN0IFZr Q29tcG9uZW50TWFwcGluZyBmZl9jb21wX2lkZW50aXR5X21hcDsKLQotLyoqCi0gKiBJbml0aWFs aXplcyB0aGUgQVZDbGFzcywgaW4gY2FzZSB0aGlzIGNvbnRleHQgaXMgbm90IHVzZWQKLSAqIGFz IHRoZSBtYWluIHVzZXIncyBjb250ZXh0LgotICogTWF5IHVzZSBlaXRoZXIgYSBmcmFtZXMgY29u dGV4dCByZWZlcmVuY2UsIG9yIGEgZGV2aWNlIGNvbnRleHQgcmVmZXJlbmNlLgotICovCi1pbnQg ZmZfdmtfaW5pdChGRlZ1bGthbkNvbnRleHQgKnMsIHZvaWQgKmxvZ19wYXJlbnQsCi0gICAgICAg ICAgICAgICBBVkJ1ZmZlclJlZiAqZGV2aWNlX3JlZiwgQVZCdWZmZXJSZWYgKmZyYW1lc19yZWYp OwotCi0vKioKLSAqIENvbnZlcnRzIFZ1bGthbiByZXR1cm4gdmFsdWVzIHRvIHN0cmluZ3MKLSAq LwotY29uc3QgY2hhciAqZmZfdmtfcmV0MnN0cihWa1Jlc3VsdCByZXMpOwotCi0vKioKLSAqIE1h cCBiZXR3ZWVuIHVzYWdlIGFuZCBmZWF0dXJlcy4KLSAqLwotVmtJbWFnZVVzYWdlRmxhZ3MgZmZf dmtfbWFwX2ZlYXRzX3RvX3VzYWdlKFZrRm9ybWF0RmVhdHVyZUZsYWdCaXRzMiBmZWF0cyk7Ci1W a0Zvcm1hdEZlYXR1cmVGbGFnQml0czIgZmZfdmtfbWFwX3VzYWdlX3RvX2ZlYXRzKFZrSW1hZ2VV c2FnZUZsYWdzIHVzYWdlKTsKLQotLyoqCi0gKiBSZXR1cm5zIDEgaWYgcGl4Zm10IGlzIGEgdXNh YmxlIFJHQiBmb3JtYXQuCi0gKi8KLWludCBmZl92a19tdF9pc19ucF9yZ2IoZW51bSBBVlBpeGVs Rm9ybWF0IHBpeF9mbXQpOwotCi0vKioKLSAqIFNpbmNlIHN0b3JhZ2UgaW1hZ2VzIG1heSBub3Qg YmUgc3dpenpsZWQsIHdlIGhhdmUgdG8gZG8gdGhpcyBpbiB0aGUKLSAqIHNoYWRlciBpdHNlbGYu IFRoaXMgZmlsbHMgaW4gYSBsb29rdXAgdGFibGUgdG8gZG8gaXQuCi0gKi8KLXZvaWQgZmZfdmtf c2V0X3Blcm0oZW51bSBBVlBpeGVsRm9ybWF0IHBpeF9mbXQsIGludCBsdXRbNF0sIGludCBpbnYp OwotCi0vKioKLSAqIEdldCB0aGUgYXNwZWN0IGZsYWcgZm9yIGEgcGxhbmUgZnJvbSBhbiBpbWFn ZS4KLSAqLwotVmtJbWFnZUFzcGVjdEZsYWdzIGZmX3ZrX2FzcGVjdF9mbGFnKEFWRnJhbWUgKmYs IGludCBwKTsKLQotLyoqCi0gKiBSZXR1cm5zIHRoZSBmb3JtYXQgdG8gdXNlIGZvciBpbWFnZXMg aW4gc2hhZGVycy4KLSAqLwotZW51bSBGRlZrU2hhZGVyUmVwRm9ybWF0IHsKLSAgICAvKiBOYXRp dmUgZm9ybWF0IHdpdGggbm8gY29udmVyc2lvbi4gTWF5IHJlcXVpcmUgY2FzdGluZy4gKi8KLSAg ICBGRl9WS19SRVBfTkFUSVZFID0gMCwKLSAgICAvKiBGbG9hdCBjb252ZXJzaW9uIG9mIHRoZSBu YXRpdmUgZm9ybWF0LiAqLwotICAgIEZGX1ZLX1JFUF9GTE9BVCwKLSAgICAvKiBTaWduZWQgaW50 ZWdlciB2ZXJzaW9uIG9mIHRoZSBuYXRpdmUgZm9ybWF0ICovCi0gICAgRkZfVktfUkVQX0lOVCwK LSAgICAvKiBVbnNpZ25lZCBpbnRlZ2VyIHZlcnNpb24gb2YgdGhlIG5hdGl2ZSBmb3JtYXQgKi8K LSAgICBGRl9WS19SRVBfVUlOVCwKLX07Ci1jb25zdCBjaGFyICpmZl92a19zaGFkZXJfcmVwX2Zt dChlbnVtIEFWUGl4ZWxGb3JtYXQgcGl4X2ZtdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGVudW0gRkZWa1NoYWRlclJlcEZvcm1hdCByZXBfZm10KTsKLQotLyoqCi0gKiBMb2Fk cyBwcm9wcy9tcHJvcHMvZHJpdmVyX3Byb3BzCi0gKi8KLWludCBmZl92a19sb2FkX3Byb3BzKEZG VnVsa2FuQ29udGV4dCAqcyk7Ci0KLS8qKgotICogQ2hvb3NlcyBhbiBhcHByb3ByaWF0ZSBRRi4K LSAqLwotQVZWdWxrYW5EZXZpY2VRdWV1ZUZhbWlseSAqZmZfdmtfcWZfZmluZChGRlZ1bGthbkNv bnRleHQgKnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZrUXVl dWVGbGFnQml0cyBkZXZfZmFtaWx5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBWa1ZpZGVvQ29kZWNPcGVyYXRpb25GbGFnQml0c0tIUiB2aWRfb3BzKTsKLQotLyoq Ci0gKiBBbGxvY2F0ZXMvZnJlZXMgYW4gZXhlY3V0aW9uIHBvb2wuCi0gKiBJZiB1c2VkIGluIGEg bXVsdGktdGhyZWFkZWQgY29udGV4dCwgdGhlcmUgbXVzdCBiZSBhdCBsZWFzdCBhcyBtYW55IGNv bnRleHRzCi0gKiBhcyB0aGVyZSBhcmUgdGhyZWFkcy4KLSAqIGZmX3ZrX2V4ZWNfcG9vbF9pbml0 X2Rlc2MoKSBNVVNUIGJlIGNhbGxlZCBpZiBmZl92a19leGVjX2Rlc2NyaXB0b3Jfc2V0X2FkZCgp Ci0gKiBoYXMgYmVlbiBjYWxsZWQuCi0gKi8KLWludCBmZl92a19leGVjX3Bvb2xfaW5pdChGRlZ1 bGthbkNvbnRleHQgKnMsIEFWVnVsa2FuRGV2aWNlUXVldWVGYW1pbHkgKnFmLAotICAgICAgICAg ICAgICAgICAgICAgICAgIEZGVmtFeGVjUG9vbCAqcG9vbCwgaW50IG5iX2NvbnRleHRzLAotICAg ICAgICAgICAgICAgICAgICAgICAgIGludCBuYl9xdWVyaWVzLCBWa1F1ZXJ5VHlwZSBxdWVyeV90 eXBlLCBpbnQgcXVlcnlfNjRiaXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9p ZCAqcXVlcnlfY3JlYXRlX3BuZXh0KTsKLXZvaWQgZmZfdmtfZXhlY19wb29sX2ZyZWUoRkZWdWxr YW5Db250ZXh0ICpzLCBGRlZrRXhlY1Bvb2wgKnBvb2wpOwotCi0vKioKLSAqIFJldHJpZXZlIGFu IGV4ZWN1dGlvbiBwb29sLiBUaHJlYWRzYWZlLgotICovCi1GRlZrRXhlY0NvbnRleHQgKmZmX3Zr X2V4ZWNfZ2V0KEZGVnVsa2FuQ29udGV4dCAqcywgRkZWa0V4ZWNQb29sICpwb29sKTsKLQotLyoq Ci0gKiBQZXJmb3JtcyBuYl9xdWVyaWVzIHF1ZXJpZXMgYW5kIHJldHVybnMgdGhlaXIgcmVzdWx0 cyBhbmQgc3RhdHVzZXMuCi0gKiA2NF9CSVQgYW5kIFdJVEhfU1RBVFVTIGZsYWdzIGFyZSBpZ25v cmVkIGFzIDY0X0JJVCBtdXN0IGJlIHNwZWNpZmllZCB2aWEKLSAqIHF1ZXJ5XzY0Yml0IGluIGZm X3ZrX2V4ZWNfcG9vbF9pbml0KCkgYW5kIFdJVEhfU1RBVFVTIGlzIGFsd2F5cyBlbmFibGVkLgot ICovCi1Wa1Jlc3VsdCBmZl92a19leGVjX2dldF9xdWVyeShGRlZ1bGthbkNvbnRleHQgKnMsIEZG VmtFeGVjQ29udGV4dCAqZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKipk YXRhLCBWa1F1ZXJ5UmVzdWx0RmxhZ0JpdHMgZmxhZ3MpOwotCi0vKioKLSAqIFN0YXJ0L3N1Ym1p dC93YWl0IGFuIGV4ZWN1dGlvbi4KLSAqIGZmX3ZrX2V4ZWNfc3RhcnQoKSBhbHdheXMgd2FpdHMg b24gYSBzdWJtaXNzaW9uLCBzbyB1c2luZyBmZl92a19leGVjX3dhaXQoKQotICogaXMgbm90IG5l Y2Vzc2FyeSAodW5sZXNzIHVzaW5nIGl0IGlzIGp1c3QgYmV0dGVyKS4KLSAqLwotaW50IGZmX3Zr X2V4ZWNfc3RhcnQoRkZWdWxrYW5Db250ZXh0ICpzLCBGRlZrRXhlY0NvbnRleHQgKmUpOwotaW50 IGZmX3ZrX2V4ZWNfc3VibWl0KEZGVnVsa2FuQ29udGV4dCAqcywgRkZWa0V4ZWNDb250ZXh0ICpl KTsKLXZvaWQgZmZfdmtfZXhlY193YWl0KEZGVnVsa2FuQ29udGV4dCAqcywgRkZWa0V4ZWNDb250 ZXh0ICplKTsKLQotLyoqCi0gKiBFeGVjdXRpb24gZGVwZW5kZW5jeSBtYW5hZ2VtZW50LgotICog Q2FuIGF0dGFjaCBidWZmZXJzIHRvIGV4ZWN1dGlvbnMgdGhhdCB3aWxsIG9ubHkgYmUgdW5yZWYn ZCBvbmNlIHRoZQotICogYnVmZmVyIGhhcyBmaW5pc2hlZCBleGVjdXRpbmcuCi0gKiBBZGRpbmcg YSBmcmFtZSBkZXAgd2lsbCAqbG9jayB0aGUgZnJhbWUqLCB1bnRpbCBlaXRoZXIgdGhlIGRlcGVu ZGVuY2llcwotICogYXJlIGRpc2NhcmRlZCwgdGhlIGV4ZWN1dGlvbiBpcyBzdWJtaXR0ZWQsIG9y IGEgZmFpbHVyZSBoYXBwZW5zLgotICogdXBkYXRlX2ZyYW1lIHdpbGwgdXBkYXRlIHRoZSBmcmFt ZSdzIHByb3BlcnRpZXMgYmVmb3JlIGl0IGlzIHVubG9ja2VkLAotICogb25seSBpZiBzdWJtaXNz aW9uIHdhcyBzdWNjZXNzZnVsLgotICovCi1pbnQgZmZfdmtfZXhlY19hZGRfZGVwX2J1ZihGRlZ1 bGthbkNvbnRleHQgKnMsIEZGVmtFeGVjQ29udGV4dCAqZSwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgIEFWQnVmZmVyUmVmICoqZGVwcywgaW50IG5iX2RlcHMsIGludCByZWYpOwotaW50IGZm X3ZrX2V4ZWNfYWRkX2RlcF93YWl0X3NlbShGRlZ1bGthbkNvbnRleHQgKnMsIEZGVmtFeGVjQ29u dGV4dCAqZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmtTZW1hcGhvcmUgc2Vt LCB1aW50NjRfdCB2YWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZrUGlwZWxp bmVTdGFnZUZsYWdCaXRzMiBzdGFnZSk7Ci1pbnQgZmZfdmtfZXhlY19hZGRfZGVwX2Jvb2xfc2Vt KEZGVnVsa2FuQ29udGV4dCAqcywgRkZWa0V4ZWNDb250ZXh0ICplLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBWa1NlbWFwaG9yZSAqc2VtLCBpbnQgbmIsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFZrUGlwZWxpbmVTdGFnZUZsYWdCaXRzMiBzdGFnZSwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHdhaXQpOyAvKiBPd25lcnNoaXAgdHJhbnNm ZXJyZWQgaWYgIXdhaXQgKi8KLWludCBmZl92a19leGVjX2FkZF9kZXBfZnJhbWUoRkZWdWxrYW5D b250ZXh0ICpzLCBGRlZrRXhlY0NvbnRleHQgKmUsIEFWRnJhbWUgKmYsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFZrUGlwZWxpbmVTdGFnZUZsYWdCaXRzMiB3YWl0X3N0YWdlLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBWa1BpcGVsaW5lU3RhZ2VGbGFnQml0czIgc2lnbmFs X3N0YWdlKTsKLWludCBmZl92a19leGVjX2FkZF9kZXBfc3dfZnJhbWUoRkZWdWxrYW5Db250ZXh0 ICpzLCBGRlZrRXhlY0NvbnRleHQgKmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEFWRnJhbWUgKmYpOwotdm9pZCBmZl92a19leGVjX3VwZGF0ZV9mcmFtZShGRlZ1bGthbkNvbnRl eHQgKnMsIEZGVmtFeGVjQ29udGV4dCAqZSwgQVZGcmFtZSAqZiwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgVmtJbWFnZU1lbW9yeUJhcnJpZXIyICpiYXIsIHVpbnQzMl90ICpuYl9pbWdf YmFyKTsKLWludCBmZl92a19leGVjX21pcnJvcl9zZW1fdmFsdWUoRkZWdWxrYW5Db250ZXh0ICpz LCBGRlZrRXhlY0NvbnRleHQgKmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZr U2VtYXBob3JlICpkc3QsIHVpbnQ2NF90ICpkc3RfdmFsLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBBVkZyYW1lICpmKTsKLXZvaWQgZmZfdmtfZXhlY19kaXNjYXJkX2RlcHMoRkZW dWxrYW5Db250ZXh0ICpzLCBGRlZrRXhlY0NvbnRleHQgKmUpOwotCi0vKioKLSAqIENyZWF0ZSBh IHNpbmdsZSBpbWFnZXZpZXcgZm9yIGEgZ2l2ZW4gcGxhbmUuCi0gKi8KLWludCBmZl92a19jcmVh dGVfaW1hZ2V2aWV3KEZGVnVsa2FuQ29udGV4dCAqcywKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgIFZrSW1hZ2VWaWV3ICppbWdfdmlldywgVmtJbWFnZUFzcGVjdEZsYWdzICphc3BlY3QsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICBBVkZyYW1lICpmLCBpbnQgcGxhbmUsIGVudW0gRkZW a1NoYWRlclJlcEZvcm1hdCByZXBfZm10KTsKLQotLyoqCi0gKiBDcmVhdGUgYW4gaW1hZ2V2aWV3 IGFuZCBhZGQgaXQgYXMgYSBkZXBlbmRlbmN5IHRvIGFuIGV4ZWN1dGlvbi4KLSAqLwotaW50IGZm X3ZrX2NyZWF0ZV9pbWFnZXZpZXdzKEZGVnVsa2FuQ29udGV4dCAqcywgRkZWa0V4ZWNDb250ZXh0 ICplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZrSW1hZ2VWaWV3IHZpZXdzW0FWX05V TV9EQVRBX1BPSU5URVJTXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVkZyYW1lICpm LCBlbnVtIEZGVmtTaGFkZXJSZXBGb3JtYXQgcmVwX2ZtdCk7Ci0KLXZvaWQgZmZfdmtfZnJhbWVf YmFycmllcihGRlZ1bGthbkNvbnRleHQgKnMsIEZGVmtFeGVjQ29udGV4dCAqZSwKLSAgICAgICAg ICAgICAgICAgICAgICAgICBBVkZyYW1lICpwaWMsIFZrSW1hZ2VNZW1vcnlCYXJyaWVyMiAqYmFy LCBpbnQgKm5iX2JhciwKLSAgICAgICAgICAgICAgICAgICAgICAgICBWa1BpcGVsaW5lU3RhZ2VG bGFncyBzcmNfc3RhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgVmtQaXBlbGluZVN0YWdl RmxhZ3MgZHN0X3N0YWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgIFZrQWNjZXNzRmxhZ0Jp dHMgICAgIG5ld19hY2Nlc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgVmtJbWFnZUxheW91 dCAgICAgICAgbmV3X2xheW91dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAg ICAgICAgICAgICBuZXdfcWYpOwotCi0vKioKLSAqIE1lbW9yeS9idWZmZXIvaW1hZ2UgYWxsb2Nh dGlvbiBoZWxwZXJzLgotICovCi1pbnQgZmZfdmtfYWxsb2NfbWVtKEZGVnVsa2FuQ29udGV4dCAq cywgVmtNZW1vcnlSZXF1aXJlbWVudHMgKnJlcSwKLSAgICAgICAgICAgICAgICAgICAgVmtNZW1v cnlQcm9wZXJ0eUZsYWdCaXRzIHJlcV9mbGFncywgdm9pZCAqYWxsb2NfZXh0ZW5zaW9uLAotICAg ICAgICAgICAgICAgICAgICBWa01lbW9yeVByb3BlcnR5RmxhZ0JpdHMgKm1lbV9mbGFncywgVmtE ZXZpY2VNZW1vcnkgKm1lbSk7Ci1pbnQgZmZfdmtfY3JlYXRlX2J1ZihGRlZ1bGthbkNvbnRleHQg KnMsIEZGVmtCdWZmZXIgKmJ1Ziwgc2l6ZV90IHNpemUsCi0gICAgICAgICAgICAgICAgICAgICB2 b2lkICpwTmV4dCwgdm9pZCAqYWxsb2NfcE5leHQsCi0gICAgICAgICAgICAgICAgICAgICBWa0J1 ZmZlclVzYWdlRmxhZ3MgdXNhZ2UsIFZrTWVtb3J5UHJvcGVydHlGbGFnQml0cyBmbGFncyk7Ci0K LS8qKgotICogQnVmZmVyIG1hbmFnZW1lbnQgY29kZS4KLSAqLwotaW50IGZmX3ZrX21hcF9idWZm ZXJzKEZGVnVsa2FuQ29udGV4dCAqcywgRkZWa0J1ZmZlciAqKmJ1ZiwgdWludDhfdCAqbWVtW10s Ci0gICAgICAgICAgICAgICAgICAgICAgaW50IG5iX2J1ZmZlcnMsIGludCBpbnZhbGlkYXRlKTsK LWludCBmZl92a191bm1hcF9idWZmZXJzKEZGVnVsa2FuQ29udGV4dCAqcywgRkZWa0J1ZmZlciAq KmJ1ZiwgaW50IG5iX2J1ZmZlcnMsCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmx1c2gp OwotCi1zdGF0aWMgaW5saW5lIGludCBmZl92a19tYXBfYnVmZmVyKEZGVnVsa2FuQ29udGV4dCAq cywgRkZWa0J1ZmZlciAqYnVmLCB1aW50OF90ICoqbWVtLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpbnQgaW52YWxpZGF0ZSkKLXsKLSAgICByZXR1cm4gZmZfdmtfbWFwX2J1 ZmZlcnMocywgKEZGVmtCdWZmZXIgKltdKXsgYnVmIH0sIG1lbSwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgMSwgaW52YWxpZGF0ZSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGZmX3Zr X3VubWFwX2J1ZmZlcihGRlZ1bGthbkNvbnRleHQgKnMsIEZGVmtCdWZmZXIgKmJ1ZiwgaW50IGZs dXNoKQotewotICAgIHJldHVybiBmZl92a191bm1hcF9idWZmZXJzKHMsIChGRlZrQnVmZmVyICpb XSl7IGJ1ZiB9LCAxLCBmbHVzaCk7Ci19Ci0KLXZvaWQgZmZfdmtfZnJlZV9idWYoRkZWdWxrYW5D b250ZXh0ICpzLCBGRlZrQnVmZmVyICpidWYpOwotCi0vKiogSW5pdGlhbGl6ZSBhIHBvb2wgYW5k IGNyZWF0ZSBBVkJ1ZmZlclJlZnMgY29udGFpbmluZyBGRlZrQnVmZmVyLgotICogVGhyZWFkc2Fm ZSB0byB1c2UuIEJ1ZmZlcnMgYXJlIGF1dG9tYXRpY2FsbHkgbWFwcGVkIG9uIGNyZWF0aW9uIGlm Ci0gKiBWS19NRU1PUllfUFJPUEVSVFlfSE9TVF9WSVNJQkxFX0JJVCBpcyBzZXQgaW4gbWVtX3By b3BzLiBVc2VycyBzaG91bGQKLSAqIHN5bmNocm9uaXplIGFjY2VzcyB0aGVtc2VsdmVzZC4gTWFp bmx5IG1lYW50IGZvciBkZXZpY2UtbG9jYWwgYnVmZmVycy4gKi8KLWludCBmZl92a19nZXRfcG9v bGVkX2J1ZmZlcihGRlZ1bGthbkNvbnRleHQgKmN0eCwgQVZCdWZmZXJQb29sICoqYnVmX3Bvb2ws Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQVZCdWZmZXJSZWYgKipidWYsIFZrQnVmZmVy VXNhZ2VGbGFncyB1c2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpjcmVh dGVfcE5leHQsIHNpemVfdCBzaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZrTWVt b3J5UHJvcGVydHlGbGFnQml0cyBtZW1fcHJvcHMpOwotCi0vKiogTWFwcyBhIHN5c3RlbSBSQU0g YnVmZmVyIGludG8gYSBWdWxrYW4gYnVmZmVyLgotICogUmVmZXJlbmNlcyB0aGUgc291cmNlIGJ1 ZmZlci4KLSAqLwotaW50IGZmX3ZrX2hvc3RfbWFwX2J1ZmZlcihGRlZ1bGthbkNvbnRleHQgKnMs IEFWQnVmZmVyUmVmICoqZHN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpz cmNfZGF0YSwgY29uc3QgQVZCdWZmZXJSZWYgKnNyY19idWYsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgIFZrQnVmZmVyVXNhZ2VGbGFncyB1c2FnZSk7Ci0KLS8qKgotICogQ3JlYXRlIGEgc2Ft cGxlci4KLSAqLwotaW50IGZmX3ZrX2luaXRfc2FtcGxlcihGRlZ1bGthbkNvbnRleHQgKnMsIFZr U2FtcGxlciAqc2FtcGxlciwKLSAgICAgICAgICAgICAgICAgICAgICAgaW50IHVubm9ybV9jb29y ZHMsIFZrRmlsdGVyIGZpbHQpOwotCi0vKioKLSAqIEluaXRpYWxpemUgYSBzaGFkZXIgb2JqZWN0 LCB3aXRoIGEgc3BlY2lmaWMgc2V0IG9mIGV4dGVuc2lvbnMsIHR5cGUrYmluZCwKLSAqIGxvY2Fs IGdyb3VwIHNpemUsIGFuZCBzdWJncm91cCByZXF1aXJlbWVudHMuCi0gKi8KLWludCBmZl92a19z aGFkZXJfaW5pdChGRlZ1bGthbkNvbnRleHQgKnMsIEZGVnVsa2FuU2hhZGVyICpzaGQsIGNvbnN0 IGNoYXIgKm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgVmtQaXBlbGluZVN0YWdlRmxhZ3Mg c3RhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZXh0ZW5zaW9uc1tdLCBp bnQgbmJfZXh0ZW5zaW9ucywKLSAgICAgICAgICAgICAgICAgICAgICBpbnQgbGdfeCwgaW50IGxn X3ksIGludCBsZ196LAotICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHJlcXVpcmVkX3N1 Ymdyb3VwX3NpemUpOwotCi0vKioKLSAqIE91dHB1dCB0aGUgc2hhZGVyIGNvZGUgYXMgbG9nZ2lu ZyBkYXRhLCB3aXRoIGEgc3BlY2lmaWMKLSAqIHByaW9yaXR5LgotICovCi12b2lkIGZmX3ZrX3No YWRlcl9wcmludCh2b2lkICpjdHgsIEZGVnVsa2FuU2hhZGVyICpzaGQsIGludCBwcmlvKTsKLQot LyoqCi0gKiBMaW5rIGEgc2hhZGVyIGludG8gYW4gZXhlY3V0YWJsZS4KLSAqLwotaW50IGZmX3Zr X3NoYWRlcl9saW5rKEZGVnVsa2FuQ29udGV4dCAqcywgRkZWdWxrYW5TaGFkZXIgKnNoZCwKLSAg ICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpzcGlydiwgc2l6ZV90IHNwaXJ2X2xlbiwKLSAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplbnRyeXBvaW50KTsKLQotLyoqCi0gKiBB ZGQvdXBkYXRlIHB1c2ggY29uc3RhbnRzIGZvciBleGVjdXRpb24uCi0gKi8KLWludCBmZl92a19z aGFkZXJfYWRkX3B1c2hfY29uc3QoRkZWdWxrYW5TaGFkZXIgKnNoZCwgaW50IG9mZnNldCwgaW50 IHNpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZrU2hhZGVyU3RhZ2VGbGFn Qml0cyBzdGFnZSk7Ci0KLS8qKgotICogQWRkIGRlc2NyaXB0b3IgdG8gYSBzaGFkZXIuIE11c3Qg YmUgY2FsbGVkIGJlZm9yZSBzaGFkZXIgaW5pdC4KLSAqLwotaW50IGZmX3ZrX3NoYWRlcl9hZGRf ZGVzY3JpcHRvcl9zZXQoRkZWdWxrYW5Db250ZXh0ICpzLCBGRlZ1bGthblNoYWRlciAqc2hkLAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkZWdWxrYW5EZXNjcmlwdG9yU2V0 QmluZGluZyAqZGVzYywgaW50IG5iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaW50IHNpbmd1bGFyLCBpbnQgcHJpbnRfdG9fc2hhZGVyX29ubHkpOwotCi0vKioKLSAqIFJl Z2lzdGVyIGEgc2hhZGVyIHdpdGggYW4gZXhlYyBwb29sLgotICogUG9vbCBtYXkgYmUgTlVMTCBp ZiBhbGwgZGVzY3JpcHRvciBzZXRzIGFyZSByZWFkLW9ubHkuCi0gKi8KLWludCBmZl92a19zaGFk ZXJfcmVnaXN0ZXJfZXhlYyhGRlZ1bGthbkNvbnRleHQgKnMsIEZGVmtFeGVjUG9vbCAqcG9vbCwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGRlZ1bGthblNoYWRlciAqc2hkKTsKLQot LyoqCi0gKiBCaW5kIGEgc2hhZGVyLgotICovCi12b2lkIGZmX3ZrX2V4ZWNfYmluZF9zaGFkZXIo RkZWdWxrYW5Db250ZXh0ICpzLCBGRlZrRXhlY0NvbnRleHQgKmUsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgRkZWdWxrYW5TaGFkZXIgKnNoZCk7Ci0KLS8qKgotICogVXBkYXRlIHB1c2gg Y29uc3RhbnQgaW4gYSBzaGFkZXIuCi0gKiBNdXN0IGJlIGNhbGxlZCBiZWZvcmUgYmluZGluZyB0 aGUgc2hhZGVyLgotICovCi12b2lkIGZmX3ZrX3NoYWRlcl91cGRhdGVfcHVzaF9jb25zdChGRlZ1 bGthbkNvbnRleHQgKnMsIEZGVmtFeGVjQ29udGV4dCAqZSwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEZGVnVsa2FuU2hhZGVyICpzaGQsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBWa1NoYWRlclN0YWdlRmxhZ0JpdHMgc3RhZ2UsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwgdm9pZCAq c3JjKTsKLQotLyoqCi0gKiBVcGRhdGUgYSBkZXNjcmlwdG9yIGluIGEgYnVmZmVyIHdpdGggYSBi dWZmZXIuCi0gKiBNdXN0IGJlIGNhbGxlZCBiZWZvcmUgYmluZGluZyB0aGUgc2hhZGVyLgotICov Ci1pbnQgZmZfdmtfc2hhZGVyX3VwZGF0ZV9kZXNjX2J1ZmZlcihGRlZ1bGthbkNvbnRleHQgKnMs IEZGVmtFeGVjQ29udGV4dCAqZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEZGVnVsa2FuU2hhZGVyICpzaGQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpbnQgc2V0LCBpbnQgYmluZCwgaW50IGVsZW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBGRlZrQnVmZmVyICpidWYsIFZrRGV2aWNlU2l6ZSBvZmZzZXQsIFZrRGV2aWNl U2l6ZSBsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWa0Zvcm1hdCBm bXQpOwotCi0vKioKLSAqIFNldHMgYW4gaW1hZ2UgZGVzY3JpcHRvciBmb3Igc3BlY2lmaWVkIHNo YWRlciBhbmQgYmluZGluZy4KLSAqLwotaW50IGZmX3ZrX3NoYWRlcl91cGRhdGVfaW1nKEZGVnVs a2FuQ29udGV4dCAqcywgRkZWa0V4ZWNDb250ZXh0ICplLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEZGVnVsa2FuU2hhZGVyICpzaGQsIGludCBzZXQsIGludCBiaW5kLCBpbnQgb2ZmcywK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBWa0ltYWdlVmlldyB2aWV3LCBWa0ltYWdlTGF5 b3V0IGxheW91dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBWa1NhbXBsZXIgc2FtcGxl cik7Ci0KLS8qKgotICogVXBkYXRlIGEgZGVzY3JpcHRvciBpbiBhIGJ1ZmZlciB3aXRoIGFuIGlt YWdlIGFycmF5Li4KLSAqIE11c3QgYmUgY2FsbGVkIGJlZm9yZSBiaW5kaW5nIHRoZSBzaGFkZXIu Ci0gKi8KLXZvaWQgZmZfdmtfc2hhZGVyX3VwZGF0ZV9pbWdfYXJyYXkoRkZWdWxrYW5Db250ZXh0 ICpzLCBGRlZrRXhlY0NvbnRleHQgKmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEZGVnVsa2FuU2hhZGVyICpzaGQsIEFWRnJhbWUgKmYsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFZrSW1hZ2VWaWV3ICp2aWV3cywgaW50IHNldCwgaW50IGJpbmRpbmcs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZrSW1hZ2VMYXlvdXQgbGF5b3V0 LCBWa1NhbXBsZXIgc2FtcGxlcik7Ci0KLS8qKgotICogRnJlZSBhIHNoYWRlci4KLSAqLwotdm9p ZCBmZl92a19zaGFkZXJfZnJlZShGRlZ1bGthbkNvbnRleHQgKnMsIEZGVnVsa2FuU2hhZGVyICpz aGQpOwotCi0vKioKLSAqIEZyZWVzIG1haW4gY29udGV4dC4KLSAqLwotdm9pZCBmZl92a191bmlu aXQoRkZWdWxrYW5Db250ZXh0ICpzKTsKLQotI2VuZGlmIC8qIEFWVVRJTF9WVUxLQU5fSCAqLwot LSAKMi40OS4xCgoKRnJvbSBkZTQ0MzA3OTJjNjI1NTIxMTcxZTc2MGUxNjY0OTY5ODU4YTEwODM4 IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBKYW1haWthMSA8bHVrYXN6Y3oxOEB3cC5w bD4KRGF0ZTogV2VkLCAzIFNlcCAyMDI1IDEzOjE4OjQxICswMDAwClN1YmplY3Q6IFtQQVRDSCAw NDYvMTE4XSBDaGFuZ2luZyB2dWxrYW4gZmlsZSBkaXJlY3RvcnkKCi0tLQogbGliYXZ1dGlsL3Z1 bGthbi92dWxrYW4uaCB8IDY2NSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KwogMSBmaWxlIGNoYW5nZWQsIDY2NSBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQg bGliYXZ1dGlsL3Z1bGthbi92dWxrYW4uaAoKZGlmZiAtLWdpdCBhL2xpYmF2dXRpbC92dWxrYW4v dnVsa2FuLmggYi9saWJhdnV0aWwvdnVsa2FuL3Z1bGthbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAuLjg0Zjc4YTY0ODUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJhdnV0 aWwvdnVsa2FuL3Z1bGthbi5oCkBAIC0wLDAgKzEsNjY1IEBACisvKgorICogVGhpcyBmaWxlIGlz IHBhcnQgb2YgRkZtcGVnLgorICoKKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5 IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2Yg dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor ICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg Y29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3 aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRh dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAw MjExMC0xMzAxIFVTQQorICovCisKKyNpZm5kZWYgQVZVVElMX1ZVTEtBTl9ICisjZGVmaW5lIEFW VVRJTF9WVUxLQU5fSAorCisjZGVmaW5lIFZLX05PX1BST1RPVFlQRVMKKworI2luY2x1ZGUgPHN0 ZGF0b21pYy5oPgorCisjaW5jbHVkZSAibGliYXZ1dGlsL3BpeGRlc2MuaCIKKyNpbmNsdWRlICJs aWJhdnV0aWwvYnByaW50LmgiCisjaW5jbHVkZSAibGliYXZ1dGlsL2h3Y29udGV4dC5oIgorI2lu Y2x1ZGUgInZ1bGthbl9mdW5jdGlvbnMuaCIKKyNpbmNsdWRlICJod2NvbnRleHRfdnVsa2FuLmgi CisKKy8qIEdMU0wgbWFuYWdlbWVudCBtYWNyb3MgKi8KKyNkZWZpbmUgSU5ERU5UKE4pIElOREVO VF8jI04KKyNkZWZpbmUgSU5ERU5UXzAKKyNkZWZpbmUgSU5ERU5UXzEgSU5ERU5UXzAgIiAgICAi CisjZGVmaW5lIElOREVOVF8yIElOREVOVF8xIElOREVOVF8xCisjZGVmaW5lIElOREVOVF8zIElO REVOVF8yIElOREVOVF8xCisjZGVmaW5lIElOREVOVF80IElOREVOVF8zIElOREVOVF8xCisjZGVm aW5lIElOREVOVF81IElOREVOVF80IElOREVOVF8xCisjZGVmaW5lIElOREVOVF82IElOREVOVF81 IElOREVOVF8xCisjZGVmaW5lIEMoTiwgUykgICAgICAgICAgSU5ERU5UKE4pICNTICJcbiIKKwor I2RlZmluZSBHTFNMQyhOLCBTKSAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBkbyB7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGF2X2JwcmludGYoJnNoZC0+c3Jj LCBDKE4sIFMpKTsgXAorICAgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgR0xTTEEoLi4uKSAgICAg ICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCisgICAgICAgIGF2X2JwcmludGYoJnNoZC0+c3JjLCBfX1ZBX0FSR1NfXyk7 IFwKKyAgICB9IHdoaWxlICgwKQorCisjZGVmaW5lIEdMU0xGKE4sIFMsIC4uLikgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKKyAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAorICAgICAgICBhdl9icHJpbnRmKCZzaGQtPnNyYywgQyhOLCBT KSwgX19WQV9BUkdTX18pOyBcCisgICAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBHTFNMRChEKSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZG8geyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgYXZfYnBy aW50Zigmc2hkLT5zcmMsICJcbiIpOyAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBhdl9i cHJpbnRfYXBwZW5kX2RhdGEoJnNoZC0+c3JjLCBELCBzdHJsZW4oRCkpOyBcCisgICAgICAgIGF2 X2JwcmludGYoJnNoZC0+c3JjLCAiXG4iKTsgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IHdo aWxlICgwKQorCisvKiBIZWxwZXIsIHByZXR0eSBtdWNoIGV2ZXJ5IFZ1bGthbiByZXR1cm4gdmFs dWUgbmVlZHMgdG8gYmUgY2hlY2tlZCAqLworI2RlZmluZSBSRVQoeCkgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBk byB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmICgoZXJyID0gKHgpKSA8IDApICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAg Z290byBmYWlsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKKyAgICB9IHdoaWxlICgwKQorCisjZGVmaW5lIERVUF9TQU1QTEVSKHgpIHsg eCwgeCwgeCwgeCB9CisKK3R5cGVkZWYgc3RydWN0IEZGVnVsa2FuRGVzY3JpcHRvclNldEJpbmRp bmcgeworICAgIGNvbnN0IGNoYXIgICAgICAgICAqbmFtZTsKKyAgICBWa0Rlc2NyaXB0b3JUeXBl ICAgIHR5cGU7CisgICAgY29uc3QgY2hhciAgICAgICAgICptZW1fbGF5b3V0OyAgLyogU3RvcmFn ZSBpbWFnZXMgKHJnYmE4LCBldGMuKSBhbmQgYnVmZmVycyAoc3RkNDMwLCBldGMuKSAqLworICAg IGNvbnN0IGNoYXIgICAgICAgICAqbWVtX3F1YWxpOyAgIC8qIHJlYWRvbmx5LCB3cml0ZW9ubHks IGV0Yy4gKi8KKyAgICBjb25zdCBjaGFyICAgICAgICAgKmJ1Zl9jb250ZW50OyAvKiBGb3IgYnVm ZmVycyAqLworICAgIHVpbnQzMl90ICAgICAgICAgICAgZGltZW5zaW9uczsgIC8qIE5lZWRlZCBm b3IgZS5nLiBzYW1wbGVyJWlEICovCisgICAgdWludDMyX3QgICAgICAgICAgICBlbGVtczsgICAg ICAgLyogMCAtIHNjYWxhciwgMSBvciBtb3JlIC0gdmVjdG9yICovCisgICAgVmtTaGFkZXJTdGFn ZUZsYWdzICBzdGFnZXM7CisgICAgdWludDMyX3QgICAgICAgICAgICBidWZfZWxlbXM7ICAgLyog QXBwZW5kcyBbYnVmX2VsZW1zXSB0byB0aGUgY29udGVudHMuIEF2b2lkcyBtYW51YWxseSBwcmlu dGluZyB0byBhIHN0cmluZy4gKi8KKyAgICBWa1NhbXBsZXIgICAgICAgICAgIHNhbXBsZXJzWzRd OyAvKiBTYW1wbGVyIHRvIHVzZSBmb3IgYWxsIGVsZW1zICovCit9IEZGVnVsa2FuRGVzY3JpcHRv clNldEJpbmRpbmc7CisKK3R5cGVkZWYgc3RydWN0IEZGVmtCdWZmZXIgeworICAgIFZrQnVmZmVy IGJ1ZjsKKyAgICBWa0RldmljZU1lbW9yeSBtZW07CisgICAgVmtNZW1vcnlQcm9wZXJ0eUZsYWdC aXRzIGZsYWdzOworICAgIHNpemVfdCBzaXplOworICAgIFZrRGV2aWNlQWRkcmVzcyBhZGRyZXNz OworCisgICAgLyogTG9jYWwgdXNlIG9ubHkgKi8KKyAgICBWa1BpcGVsaW5lU3RhZ2VGbGFnczIg c3RhZ2U7CisgICAgVmtBY2Nlc3NGbGFnczIgYWNjZXNzOworCisgICAgLyogT25seSB2YWxpZCB3 aGVuIGFsbG9jYXRlZCB2aWEgZmZfdmtfZ2V0X3Bvb2xlZF9idWZmZXIgd2l0aCBIT1NUX1ZJU0lC TEUgb3IKKyAgICAgKiB2aWEgZmZfdmtfaG9zdF9tYXBfYnVmZmVyICovCisgICAgdWludDhfdCAq bWFwcGVkX21lbTsKKworICAgIC8qIFNldCBieSBmZl92a19ob3N0X21hcF9idWZmZXIuIFRoaXMg aXMgdGhlIG9mZnNldCBhdCB3aGljaCB0aGUgYnVmZmVyIGRhdGEKKyAgICAgKiBhY3R1YWxseSBi ZWdpbnMgYXQuCisgICAgICogVGhlIGFkZHJlc3MgYW5kIG1hcHBlZF9tZW0gZmllbGRzIHdpbGwg YmUgb2Zmc2V0IGJ5IHRoaXMgYW1vdW50LiAqLworICAgIHNpemVfdCB2aXJ0dWFsX29mZnNldDsK KworICAgIC8qIElmIGhvc3QgbWFwcGluZywgcmVmZXJlbmNlIHRvIHRoZSBiYWNraW5nIGhvc3Qg bWVtb3J5IGJ1ZmZlciAqLworICAgIEFWQnVmZmVyUmVmICpob3N0X3JlZjsKK30gRkZWa0J1ZmZl cjsKKwordHlwZWRlZiBzdHJ1Y3QgRkZWa0V4ZWNDb250ZXh0IHsKKyAgICB1aW50MzJfdCBpZHg7 CisgICAgY29uc3Qgc3RydWN0IEZGVmtFeGVjUG9vbCAqcGFyZW50OworICAgIGludCBoYWRfc3Vi bWlzc2lvbjsKKworICAgIC8qIFF1ZXVlIGZvciB0aGUgZXhlY3V0aW9uIGNvbnRleHQgKi8KKyAg ICBWa1F1ZXVlIHF1ZXVlOworICAgIGludCBxZjsKKyAgICBpbnQgcWk7CisKKyAgICAvKiBDb21t YW5kIGJ1ZmZlciBmb3IgdGhlIGNvbnRleHQgKi8KKyAgICBWa0NvbW1hbmRCdWZmZXIgYnVmOwor CisgICAgLyogRmVuY2UgZm9yIHRoZSBjb21tYW5kIGJ1ZmZlciAqLworICAgIFZrRmVuY2UgZmVu Y2U7CisKKyAgICAvKiBPcGFxdWUgZGF0YSwgdW50b3VjaGVkLCBmcmVlIHRvIHVzZSBieSB1c2Vy cyAqLworICAgIHZvaWQgKm9wYXF1ZTsKKworICAgIHZvaWQgKnF1ZXJ5X2RhdGE7CisgICAgaW50 IHF1ZXJ5X2lkeDsKKworICAgIC8qIEJ1ZmZlciBkZXBlbmRlbmNpZXMgKi8KKyAgICBBVkJ1ZmZl clJlZiAqKmJ1Zl9kZXBzOworICAgIGludCBuYl9idWZfZGVwczsKKyAgICB1bnNpZ25lZCBpbnQg YnVmX2RlcHNfYWxsb2Nfc2l6ZTsKKworICAgIC8qIEZyYW1lIGRlcGVuZGVuY2llcyAqLworICAg IEFWRnJhbWUgKipmcmFtZV9kZXBzOworICAgIHVuc2lnbmVkIGludCBmcmFtZV9kZXBzX2FsbG9j X3NpemU7CisgICAgaW50IG5iX2ZyYW1lX2RlcHM7CisKKyAgICAvKiBTb2Z0d2FyZSBmcmFtZSBk ZXBlbmRlbmNpZXMgKi8KKyAgICBBVkZyYW1lICoqc3dfZnJhbWVfZGVwczsKKyAgICB1bnNpZ25l ZCBpbnQgc3dfZnJhbWVfZGVwc19hbGxvY19zaXplOworICAgIGludCBuYl9zd19mcmFtZV9kZXBz OworCisgICAgVmtTZW1hcGhvcmVTdWJtaXRJbmZvICpzZW1fd2FpdDsKKyAgICB1bnNpZ25lZCBp bnQgc2VtX3dhaXRfYWxsb2M7CisgICAgaW50IHNlbV93YWl0X2NudDsKKworICAgIFZrU2VtYXBo b3JlU3VibWl0SW5mbyAqc2VtX3NpZzsKKyAgICB1bnNpZ25lZCBpbnQgc2VtX3NpZ19hbGxvYzsK KyAgICBpbnQgc2VtX3NpZ19jbnQ7CisKKyAgICB1aW50NjRfdCAqKnNlbV9zaWdfdmFsX2RzdDsK KyAgICB1bnNpZ25lZCBpbnQgc2VtX3NpZ192YWxfZHN0X2FsbG9jOworICAgIGludCBzZW1fc2ln X3ZhbF9kc3RfY250OworCisgICAgdWludDhfdCAqZnJhbWVfbG9ja2VkOworICAgIHVuc2lnbmVk IGludCBmcmFtZV9sb2NrZWRfYWxsb2Nfc2l6ZTsKKworICAgIFZrQWNjZXNzRmxhZ0JpdHMgKmFj Y2Vzc19kc3Q7CisgICAgdW5zaWduZWQgaW50IGFjY2Vzc19kc3RfYWxsb2M7CisKKyAgICBWa0lt YWdlTGF5b3V0ICpsYXlvdXRfZHN0OworICAgIHVuc2lnbmVkIGludCBsYXlvdXRfZHN0X2FsbG9j OworCisgICAgdWludDMyX3QgKnF1ZXVlX2ZhbWlseV9kc3Q7CisgICAgdW5zaWduZWQgaW50IHF1 ZXVlX2ZhbWlseV9kc3RfYWxsb2M7CisKKyAgICB1aW50OF90ICpmcmFtZV91cGRhdGU7CisgICAg dW5zaWduZWQgaW50IGZyYW1lX3VwZGF0ZV9hbGxvY19zaXplOworfSBGRlZrRXhlY0NvbnRleHQ7 CisKK3R5cGVkZWYgc3RydWN0IEZGVnVsa2FuRGVzY3JpcHRvclNldCB7CisgICAgLyogRGVzY3Jp cHRvciBidWZmZXIgKi8KKyAgICBWa0RldmljZVNpemUgbGF5b3V0X3NpemU7CisgICAgVmtEZXZp Y2VTaXplIGFsaWduZWRfc2l6ZTsgLyogZGVzY3JpcHRvckJ1ZmZlck9mZnNldEFsaWdubWVudCAq LworICAgIFZrQnVmZmVyVXNhZ2VGbGFncyB1c2FnZTsKKworICAgIFZrRGVzY3JpcHRvclNldExh eW91dEJpbmRpbmcgKmJpbmRpbmc7CisgICAgVmtEZXZpY2VTaXplICpiaW5kaW5nX29mZnNldDsK KyAgICBpbnQgbmJfYmluZGluZ3M7CisKKyAgICAvKiBEZXNjcmlwdG9yIHNldCBpcyBzaGFyZWQg YmV0d2VlbiBhbGwgc3VibWlzc2lvbnMgKi8KKyAgICBpbnQgc2luZ3VsYXI7Cit9IEZGVnVsa2Fu RGVzY3JpcHRvclNldDsKKwordHlwZWRlZiBzdHJ1Y3QgRkZWdWxrYW5TaGFkZXIgeworICAgIC8q IE5hbWUgZm9yIGlkL2RlYnVnZ2luZyBwdXJwb3NlcyAqLworICAgIGNvbnN0IGNoYXIgKm5hbWU7 CisKKyAgICAvKiBTaGFkZXIgdGV4dCAqLworICAgIEFWQlByaW50IHNyYzsKKworICAgIC8qIENv bXB1dGUgc2hhZGVyIGxvY2FsIGdyb3VwIHNpemVzICovCisgICAgaW50IGxnX3NpemVbM107CisK KyAgICAvKiBTaGFkZXIgYmluZCBwb2ludC90eXBlICovCisgICAgVmtQaXBlbGluZVN0YWdlRmxh Z3Mgc3RhZ2U7CisgICAgVmtQaXBlbGluZUJpbmRQb2ludCBiaW5kX3BvaW50OworCisgICAgLyog Q3JlYXRpb24gaW5mbyAqLworICAgIFZrUGlwZWxpbmVTaGFkZXJTdGFnZVJlcXVpcmVkU3ViZ3Jv dXBTaXplQ3JlYXRlSW5mbyBzdWJncm91cF9pbmZvOworCisgICAgLyogQmFzZSBzaGFkZXIgb2Jq ZWN0ICovCisgICAgVmtTaGFkZXJFWFQgb2JqZWN0OworICAgIFZrUGlwZWxpbmUgcGlwZWxpbmU7 CisKKyAgICAvKiBQaXBlbGluZSBsYXlvdXQgKi8KKyAgICBWa1BpcGVsaW5lTGF5b3V0IHBpcGVs aW5lX2xheW91dDsKKworICAgIC8qIFB1c2ggY29uc3RzICovCisgICAgVmtQdXNoQ29uc3RhbnRS YW5nZSAqcHVzaF9jb25zdHM7CisgICAgaW50IHB1c2hfY29uc3RzX251bTsKKworICAgIC8qIERl c2NyaXB0b3Igc2V0cyAqLworICAgIEZGVnVsa2FuRGVzY3JpcHRvclNldCAqZGVzY19zZXQ7Cisg ICAgaW50IG5iX2Rlc2NyaXB0b3Jfc2V0czsKKworICAgIC8qIERlc2NyaXB0b3IgYnVmZmVyICov CisgICAgVmtEZXNjcmlwdG9yU2V0TGF5b3V0ICpkZXNjX2xheW91dDsKKyAgICB1aW50MzJfdCAq Ym91bmRfYnVmZmVyX2luZGljZXM7CisKKyAgICAvKiBEZXNjcmlwdG9yIHBvb2wgKi8KKyAgICBp bnQgdXNlX3B1c2g7CisgICAgVmtEZXNjcmlwdG9yUG9vbFNpemUgKmRlc2NfcG9vbF9zaXplOwor ICAgIGludCBuYl9kZXNjX3Bvb2xfc2l6ZTsKK30gRkZWdWxrYW5TaGFkZXI7CisKK3R5cGVkZWYg c3RydWN0IEZGVnVsa2FuRGVzY3JpcHRvclNldERhdGEgeworICAgIC8qIERlc2NyaXB0b3IgYnVm ZmVyICovCisgICAgRkZWa0J1ZmZlciBidWY7CisgICAgdWludDhfdCAqZGVzY19tZW07Cit9IEZG VnVsa2FuRGVzY3JpcHRvclNldERhdGE7CisKK3R5cGVkZWYgc3RydWN0IEZGVnVsa2FuU2hhZGVy RGF0YSB7CisgICAgLyogU2hhZGVyIHRvIHdoaWNoIHRoaXMgZGF0YSBiZWxvbmdzIHRvICovCisg ICAgRkZWdWxrYW5TaGFkZXIgKnNoZDsKKyAgICBpbnQgbmJfZGVzY3JpcHRvcl9zZXRzOworCisg ICAgLyogRGVzY3JpcHRvciBidWZmZXIgKi8KKyAgICBGRlZ1bGthbkRlc2NyaXB0b3JTZXREYXRh ICpkZXNjX3NldF9idWY7CisgICAgVmtEZXNjcmlwdG9yQnVmZmVyQmluZGluZ0luZm9FWFQgKmRl c2NfYmluZDsKKworICAgIC8qIERlc2NyaXB0b3IgcG9vbHMgKi8KKyAgICBWa0Rlc2NyaXB0b3JT ZXQgKmRlc2Nfc2V0czsKKyAgICBWa0Rlc2NyaXB0b3JQb29sIGRlc2NfcG9vbDsKK30gRkZWdWxr YW5TaGFkZXJEYXRhOworCit0eXBlZGVmIHN0cnVjdCBGRlZrRXhlY1Bvb2wgeworICAgIEZGVmtF eGVjQ29udGV4dCAqY29udGV4dHM7CisgICAgYXRvbWljX3VpbnRfbGVhc3Q2NF90IGlkeDsKKwor ICAgIFZrQ29tbWFuZFBvb2wgKmNtZF9idWZfcG9vbHM7CisgICAgVmtDb21tYW5kQnVmZmVyICpj bWRfYnVmczsKKyAgICBpbnQgcG9vbF9zaXplOworCisgICAgVmtRdWVyeVBvb2wgcXVlcnlfcG9v bDsKKyAgICB2b2lkICpxdWVyeV9kYXRhOworICAgIGludCBxdWVyeV9yZXN1bHRzOworICAgIGlu dCBxdWVyeV9zdGF0dXNlczsKKyAgICBpbnQgcXVlcnlfNjRiaXQ7CisgICAgaW50IHF1ZXJ5X3N0 YXR1c19zdHJpZGU7CisgICAgaW50IG5iX3F1ZXJpZXM7CisgICAgc2l6ZV90IHFkX3NpemU7CisK KyAgICAvKiBSZWdpc3RlcmVkIHNoYWRlcnMnIGRhdGEgKi8KKyAgICBGRlZ1bGthblNoYWRlckRh dGEgKnJlZ19zaGQ7CisgICAgaW50IG5iX3JlZ19zaGQ7Cit9IEZGVmtFeGVjUG9vbDsKKwordHlw ZWRlZiBzdHJ1Y3QgRkZWdWxrYW5Db250ZXh0IHsKKyAgICBjb25zdCBBVkNsYXNzICpjbGFzczsK KyAgICB2b2lkICpsb2dfcGFyZW50OworCisgICAgRkZWdWxrYW5GdW5jdGlvbnMgICAgIHZrZm47 CisgICAgRkZWdWxrYW5FeHRlbnNpb25zICAgIGV4dGVuc2lvbnM7CisgICAgVmtQaHlzaWNhbERl dmljZVByb3BlcnRpZXMyIHByb3BzOworICAgIFZrUGh5c2ljYWxEZXZpY2VWdWxrYW4xMVByb3Bl cnRpZXMgcHJvcHNfMTE7CisgICAgVmtQaHlzaWNhbERldmljZURyaXZlclByb3BlcnRpZXMgZHJp dmVyX3Byb3BzOworICAgIFZrUGh5c2ljYWxEZXZpY2VNZW1vcnlQcm9wZXJ0aWVzIG1wcm9wczsK KyAgICBWa1BoeXNpY2FsRGV2aWNlRXh0ZXJuYWxNZW1vcnlIb3N0UHJvcGVydGllc0VYVCBocHJv cHM7CisgICAgVmtQaHlzaWNhbERldmljZURlc2NyaXB0b3JCdWZmZXJQcm9wZXJ0aWVzRVhUIGRl c2NfYnVmX3Byb3BzOworICAgIFZrUGh5c2ljYWxEZXZpY2VTdWJncm91cFNpemVDb250cm9sUHJv cGVydGllcyBzdWJncm91cF9wcm9wczsKKyAgICBWa1BoeXNpY2FsRGV2aWNlQ29vcGVyYXRpdmVN YXRyaXhQcm9wZXJ0aWVzS0hSIGNvb3BfbWF0cml4X3Byb3BzOworICAgIFZrUGh5c2ljYWxEZXZp Y2VQdXNoRGVzY3JpcHRvclByb3BlcnRpZXNLSFIgcHVzaF9kZXNjX3Byb3BzOworICAgIFZrUGh5 c2ljYWxEZXZpY2VPcHRpY2FsRmxvd1Byb3BlcnRpZXNOViBvcHRpY2FsX2Zsb3dfcHJvcHM7Cisg ICAgVmtRdWV1ZUZhbWlseVF1ZXJ5UmVzdWx0U3RhdHVzUHJvcGVydGllc0tIUiAqcXVlcnlfcHJv cHM7CisgICAgVmtRdWV1ZUZhbWlseVZpZGVvUHJvcGVydGllc0tIUiAqdmlkZW9fcHJvcHM7Cisg ICAgVmtRdWV1ZUZhbWlseVByb3BlcnRpZXMyICpxZl9wcm9wczsKKyAgICBpbnQgdG90X25iX3Fm czsKKyAgICBWa1BoeXNpY2FsRGV2aWNlSG9zdEltYWdlQ29weVByb3BlcnRpZXNFWFQgaG9zdF9p bWFnZV9wcm9wczsKKyAgICBWa0ltYWdlTGF5b3V0ICpob3N0X2ltYWdlX2NvcHlfbGF5b3V0czsK KworICAgIFZrQ29vcGVyYXRpdmVNYXRyaXhQcm9wZXJ0aWVzS0hSICpjb29wX21hdF9wcm9wczsK KyAgICB1aW50MzJfdCBjb29wX21hdF9wcm9wc19uYjsKKworICAgIFZrUGh5c2ljYWxEZXZpY2VT aGFkZXJBdG9taWNGbG9hdEZlYXR1cmVzRVhUIGF0b21pY19mbG9hdF9mZWF0czsKKyAgICBWa1Bo eXNpY2FsRGV2aWNlVnVsa2FuMTJGZWF0dXJlcyBmZWF0c18xMjsKKyAgICBWa1BoeXNpY2FsRGV2 aWNlRmVhdHVyZXMyIGZlYXRzOworCisgICAgQVZCdWZmZXJSZWYgICAgICAgICAgICpkZXZpY2Vf cmVmOworICAgIEFWSFdEZXZpY2VDb250ZXh0ICAgICAqZGV2aWNlOworICAgIEFWVnVsa2FuRGV2 aWNlQ29udGV4dCAqaHdjdHg7CisKKyAgICBBVkJ1ZmZlclJlZiAgICAgICAgICAgKmlucHV0X2Zy YW1lc19yZWY7CisgICAgQVZCdWZmZXJSZWYgICAgICAgICAgICpmcmFtZXNfcmVmOworICAgIEFW SFdGcmFtZXNDb250ZXh0ICAgICAqZnJhbWVzOworICAgIEFWVnVsa2FuRnJhbWVzQ29udGV4dCAq aHdmYzsKKworICAgIHVpbnQzMl90ICAgICAgICAgICAgICAgcWZzWzY0XTsKKyAgICBpbnQgICAg ICAgICAgICAgICAgICAgIG5iX3FmczsKKworICAgIC8qIFByb3BlcnRpZXMgKi8KKyAgICBpbnQg ICAgICAgICAgICAgICAgIG91dHB1dF93aWR0aDsKKyAgICBpbnQgICAgICAgICAgICAgICAgb3V0 cHV0X2hlaWdodDsKKyAgICBlbnVtIEFWUGl4ZWxGb3JtYXQgb3V0cHV0X2Zvcm1hdDsKKyAgICBl bnVtIEFWUGl4ZWxGb3JtYXQgIGlucHV0X2Zvcm1hdDsKK30gRkZWdWxrYW5Db250ZXh0OworCitz dGF0aWMgaW5saW5lIGludCBmZl92a19jb3VudF9pbWFnZXMoQVZWa0ZyYW1lICpmKQoreworICAg IGludCBjbnQgPSAwOworICAgIHdoaWxlIChjbnQgPCBGRl9BUlJBWV9FTEVNUyhmLT5pbWcpICYm IGYtPmltZ1tjbnRdKQorICAgICAgICBjbnQrKzsKKworICAgIHJldHVybiBjbnQ7Cit9CisKK3N0 YXRpYyBpbmxpbmUgY29uc3Qgdm9pZCAqZmZfdmtfZmluZF9zdHJ1Y3QoY29uc3Qgdm9pZCAqY2hh aW4sIFZrU3RydWN0dXJlVHlwZSBzdHlwZSkKK3sKKyAgICBjb25zdCBWa0Jhc2VJblN0cnVjdHVy ZSAqaW4gPSBjaGFpbjsKKyAgICB3aGlsZSAoaW4pIHsKKyAgICAgICAgaWYgKGluLT5zVHlwZSA9 PSBzdHlwZSkKKyAgICAgICAgICAgIHJldHVybiBpbjsKKworICAgICAgICBpbiA9IGluLT5wTmV4 dDsKKyAgICB9CisKKyAgICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGZm X3ZrX2xpbmtfc3RydWN0KHZvaWQgKmNoYWluLCBjb25zdCB2b2lkICppbikKK3sKKyAgICBWa0Jh c2VPdXRTdHJ1Y3R1cmUgKm91dCA9IGNoYWluOworICAgIHdoaWxlIChvdXQtPnBOZXh0KQorICAg ICAgICBvdXQgPSBvdXQtPnBOZXh0OworCisgICAgb3V0LT5wTmV4dCA9ICh2b2lkICopaW47Cit9 CisKKyNkZWZpbmUgRkZfVktfU1RSVUNUX0VYVChDVFgsIEJBU0UsIFNUUlVDVF9QLCBFWFRfRkxB RywgVFlQRSkgXAorICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmICgoRVhUX0ZMQUcgPT0gRkZfVktfRVhUX05P X0ZMQUcpIHx8ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICgoQ1RYKS0+ZXh0ZW5zaW9u cyAmIEVYVF9GTEFHKSkgeyAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgKFNUUlVDVF9Q KS0+c1R5cGUgPSBUWVBFOyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBm Zl92a19saW5rX3N0cnVjdChCQVNFLCBTVFJVQ1RfUCk7ICAgICAgICAgICAgICAgIFwKKyAgICAg ICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAorICAgIH0gd2hpbGUgKDApCisKKy8qIElkZW50aXR5IG1hcHBpbmcgLSByID0gciwgYiA9IGIs IGcgPSBnLCBhID0gYSAqLworZXh0ZXJuIGNvbnN0IFZrQ29tcG9uZW50TWFwcGluZyBmZl9jb21w X2lkZW50aXR5X21hcDsKKworLyoqCisgKiBJbml0aWFsaXplcyB0aGUgQVZDbGFzcywgaW4gY2Fz ZSB0aGlzIGNvbnRleHQgaXMgbm90IHVzZWQKKyAqIGFzIHRoZSBtYWluIHVzZXIncyBjb250ZXh0 LgorICogTWF5IHVzZSBlaXRoZXIgYSBmcmFtZXMgY29udGV4dCByZWZlcmVuY2UsIG9yIGEgZGV2 aWNlIGNvbnRleHQgcmVmZXJlbmNlLgorICovCitpbnQgZmZfdmtfaW5pdChGRlZ1bGthbkNvbnRl eHQgKnMsIHZvaWQgKmxvZ19wYXJlbnQsCisgICAgICAgICAgICAgICBBVkJ1ZmZlclJlZiAqZGV2 aWNlX3JlZiwgQVZCdWZmZXJSZWYgKmZyYW1lc19yZWYpOworCisvKioKKyAqIENvbnZlcnRzIFZ1 bGthbiByZXR1cm4gdmFsdWVzIHRvIHN0cmluZ3MKKyAqLworY29uc3QgY2hhciAqZmZfdmtfcmV0 MnN0cihWa1Jlc3VsdCByZXMpOworCisvKioKKyAqIE1hcCBiZXR3ZWVuIHVzYWdlIGFuZCBmZWF0 dXJlcy4KKyAqLworVmtJbWFnZVVzYWdlRmxhZ3MgZmZfdmtfbWFwX2ZlYXRzX3RvX3VzYWdlKFZr Rm9ybWF0RmVhdHVyZUZsYWdCaXRzMiBmZWF0cyk7CitWa0Zvcm1hdEZlYXR1cmVGbGFnQml0czIg ZmZfdmtfbWFwX3VzYWdlX3RvX2ZlYXRzKFZrSW1hZ2VVc2FnZUZsYWdzIHVzYWdlKTsKKworLyoq CisgKiBSZXR1cm5zIDEgaWYgcGl4Zm10IGlzIGEgdXNhYmxlIFJHQiBmb3JtYXQuCisgKi8KK2lu dCBmZl92a19tdF9pc19ucF9yZ2IoZW51bSBBVlBpeGVsRm9ybWF0IHBpeF9mbXQpOworCisvKioK KyAqIFNpbmNlIHN0b3JhZ2UgaW1hZ2VzIG1heSBub3QgYmUgc3dpenpsZWQsIHdlIGhhdmUgdG8g ZG8gdGhpcyBpbiB0aGUKKyAqIHNoYWRlciBpdHNlbGYuIFRoaXMgZmlsbHMgaW4gYSBsb29rdXAg dGFibGUgdG8gZG8gaXQuCisgKi8KK3ZvaWQgZmZfdmtfc2V0X3Blcm0oZW51bSBBVlBpeGVsRm9y bWF0IHBpeF9mbXQsIGludCBsdXRbNF0sIGludCBpbnYpOworCisvKioKKyAqIEdldCB0aGUgYXNw ZWN0IGZsYWcgZm9yIGEgcGxhbmUgZnJvbSBhbiBpbWFnZS4KKyAqLworVmtJbWFnZUFzcGVjdEZs YWdzIGZmX3ZrX2FzcGVjdF9mbGFnKEFWRnJhbWUgKmYsIGludCBwKTsKKworLyoqCisgKiBSZXR1 cm5zIHRoZSBmb3JtYXQgdG8gdXNlIGZvciBpbWFnZXMgaW4gc2hhZGVycy4KKyAqLworZW51bSBG RlZrU2hhZGVyUmVwRm9ybWF0IHsKKyAgICAvKiBOYXRpdmUgZm9ybWF0IHdpdGggbm8gY29udmVy c2lvbi4gTWF5IHJlcXVpcmUgY2FzdGluZy4gKi8KKyAgICBGRl9WS19SRVBfTkFUSVZFID0gMCwK KyAgICAvKiBGbG9hdCBjb252ZXJzaW9uIG9mIHRoZSBuYXRpdmUgZm9ybWF0LiAqLworICAgIEZG X1ZLX1JFUF9GTE9BVCwKKyAgICAvKiBTaWduZWQgaW50ZWdlciB2ZXJzaW9uIG9mIHRoZSBuYXRp dmUgZm9ybWF0ICovCisgICAgRkZfVktfUkVQX0lOVCwKKyAgICAvKiBVbnNpZ25lZCBpbnRlZ2Vy IHZlcnNpb24gb2YgdGhlIG5hdGl2ZSBmb3JtYXQgKi8KKyAgICBGRl9WS19SRVBfVUlOVCwKK307 Citjb25zdCBjaGFyICpmZl92a19zaGFkZXJfcmVwX2ZtdChlbnVtIEFWUGl4ZWxGb3JtYXQgcGl4 X2ZtdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gRkZWa1NoYWRlclJl cEZvcm1hdCByZXBfZm10KTsKKworLyoqCisgKiBMb2FkcyBwcm9wcy9tcHJvcHMvZHJpdmVyX3By b3BzCisgKi8KK2ludCBmZl92a19sb2FkX3Byb3BzKEZGVnVsa2FuQ29udGV4dCAqcyk7CisKKy8q KgorICogQ2hvb3NlcyBhbiBhcHByb3ByaWF0ZSBRRi4KKyAqLworQVZWdWxrYW5EZXZpY2VRdWV1 ZUZhbWlseSAqZmZfdmtfcWZfZmluZChGRlZ1bGthbkNvbnRleHQgKnMsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZrUXVldWVGbGFnQml0cyBkZXZfZmFtaWx5LAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWa1ZpZGVvQ29kZWNPcGVy YXRpb25GbGFnQml0c0tIUiB2aWRfb3BzKTsKKworLyoqCisgKiBBbGxvY2F0ZXMvZnJlZXMgYW4g ZXhlY3V0aW9uIHBvb2wuCisgKiBJZiB1c2VkIGluIGEgbXVsdGktdGhyZWFkZWQgY29udGV4dCwg dGhlcmUgbXVzdCBiZSBhdCBsZWFzdCBhcyBtYW55IGNvbnRleHRzCisgKiBhcyB0aGVyZSBhcmUg dGhyZWFkcy4KKyAqIGZmX3ZrX2V4ZWNfcG9vbF9pbml0X2Rlc2MoKSBNVVNUIGJlIGNhbGxlZCBp ZiBmZl92a19leGVjX2Rlc2NyaXB0b3Jfc2V0X2FkZCgpCisgKiBoYXMgYmVlbiBjYWxsZWQuCisg Ki8KK2ludCBmZl92a19leGVjX3Bvb2xfaW5pdChGRlZ1bGthbkNvbnRleHQgKnMsIEFWVnVsa2Fu RGV2aWNlUXVldWVGYW1pbHkgKnFmLAorICAgICAgICAgICAgICAgICAgICAgICAgIEZGVmtFeGVj UG9vbCAqcG9vbCwgaW50IG5iX2NvbnRleHRzLAorICAgICAgICAgICAgICAgICAgICAgICAgIGlu dCBuYl9xdWVyaWVzLCBWa1F1ZXJ5VHlwZSBxdWVyeV90eXBlLCBpbnQgcXVlcnlfNjRiaXQsCisg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqcXVlcnlfY3JlYXRlX3BuZXh0KTsK K3ZvaWQgZmZfdmtfZXhlY19wb29sX2ZyZWUoRkZWdWxrYW5Db250ZXh0ICpzLCBGRlZrRXhlY1Bv b2wgKnBvb2wpOworCisvKioKKyAqIFJldHJpZXZlIGFuIGV4ZWN1dGlvbiBwb29sLiBUaHJlYWRz YWZlLgorICovCitGRlZrRXhlY0NvbnRleHQgKmZmX3ZrX2V4ZWNfZ2V0KEZGVnVsa2FuQ29udGV4 dCAqcywgRkZWa0V4ZWNQb29sICpwb29sKTsKKworLyoqCisgKiBQZXJmb3JtcyBuYl9xdWVyaWVz IHF1ZXJpZXMgYW5kIHJldHVybnMgdGhlaXIgcmVzdWx0cyBhbmQgc3RhdHVzZXMuCisgKiA2NF9C SVQgYW5kIFdJVEhfU1RBVFVTIGZsYWdzIGFyZSBpZ25vcmVkIGFzIDY0X0JJVCBtdXN0IGJlIHNw ZWNpZmllZCB2aWEKKyAqIHF1ZXJ5XzY0Yml0IGluIGZmX3ZrX2V4ZWNfcG9vbF9pbml0KCkgYW5k IFdJVEhfU1RBVFVTIGlzIGFsd2F5cyBlbmFibGVkLgorICovCitWa1Jlc3VsdCBmZl92a19leGVj X2dldF9xdWVyeShGRlZ1bGthbkNvbnRleHQgKnMsIEZGVmtFeGVjQ29udGV4dCAqZSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKipkYXRhLCBWa1F1ZXJ5UmVzdWx0RmxhZ0Jp dHMgZmxhZ3MpOworCisvKioKKyAqIFN0YXJ0L3N1Ym1pdC93YWl0IGFuIGV4ZWN1dGlvbi4KKyAq IGZmX3ZrX2V4ZWNfc3RhcnQoKSBhbHdheXMgd2FpdHMgb24gYSBzdWJtaXNzaW9uLCBzbyB1c2lu ZyBmZl92a19leGVjX3dhaXQoKQorICogaXMgbm90IG5lY2Vzc2FyeSAodW5sZXNzIHVzaW5nIGl0 IGlzIGp1c3QgYmV0dGVyKS4KKyAqLworaW50IGZmX3ZrX2V4ZWNfc3RhcnQoRkZWdWxrYW5Db250 ZXh0ICpzLCBGRlZrRXhlY0NvbnRleHQgKmUpOworaW50IGZmX3ZrX2V4ZWNfc3VibWl0KEZGVnVs a2FuQ29udGV4dCAqcywgRkZWa0V4ZWNDb250ZXh0ICplKTsKK3ZvaWQgZmZfdmtfZXhlY193YWl0 KEZGVnVsa2FuQ29udGV4dCAqcywgRkZWa0V4ZWNDb250ZXh0ICplKTsKKworLyoqCisgKiBFeGVj dXRpb24gZGVwZW5kZW5jeSBtYW5hZ2VtZW50LgorICogQ2FuIGF0dGFjaCBidWZmZXJzIHRvIGV4 ZWN1dGlvbnMgdGhhdCB3aWxsIG9ubHkgYmUgdW5yZWYnZCBvbmNlIHRoZQorICogYnVmZmVyIGhh cyBmaW5pc2hlZCBleGVjdXRpbmcuCisgKiBBZGRpbmcgYSBmcmFtZSBkZXAgd2lsbCAqbG9jayB0 aGUgZnJhbWUqLCB1bnRpbCBlaXRoZXIgdGhlIGRlcGVuZGVuY2llcworICogYXJlIGRpc2NhcmRl ZCwgdGhlIGV4ZWN1dGlvbiBpcyBzdWJtaXR0ZWQsIG9yIGEgZmFpbHVyZSBoYXBwZW5zLgorICog dXBkYXRlX2ZyYW1lIHdpbGwgdXBkYXRlIHRoZSBmcmFtZSdzIHByb3BlcnRpZXMgYmVmb3JlIGl0 IGlzIHVubG9ja2VkLAorICogb25seSBpZiBzdWJtaXNzaW9uIHdhcyBzdWNjZXNzZnVsLgorICov CitpbnQgZmZfdmtfZXhlY19hZGRfZGVwX2J1ZihGRlZ1bGthbkNvbnRleHQgKnMsIEZGVmtFeGVj Q29udGV4dCAqZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEFWQnVmZmVyUmVmICoqZGVw cywgaW50IG5iX2RlcHMsIGludCByZWYpOworaW50IGZmX3ZrX2V4ZWNfYWRkX2RlcF93YWl0X3Nl bShGRlZ1bGthbkNvbnRleHQgKnMsIEZGVmtFeGVjQ29udGV4dCAqZSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgVmtTZW1hcGhvcmUgc2VtLCB1aW50NjRfdCB2YWwsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFZrUGlwZWxpbmVTdGFnZUZsYWdCaXRzMiBzdGFnZSk7 CitpbnQgZmZfdmtfZXhlY19hZGRfZGVwX2Jvb2xfc2VtKEZGVnVsa2FuQ29udGV4dCAqcywgRkZW a0V4ZWNDb250ZXh0ICplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWa1NlbWFw aG9yZSAqc2VtLCBpbnQgbmIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZrUGlw ZWxpbmVTdGFnZUZsYWdCaXRzMiBzdGFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaW50IHdhaXQpOyAvKiBPd25lcnNoaXAgdHJhbnNmZXJyZWQgaWYgIXdhaXQgKi8KK2ludCBm Zl92a19leGVjX2FkZF9kZXBfZnJhbWUoRkZWdWxrYW5Db250ZXh0ICpzLCBGRlZrRXhlY0NvbnRl eHQgKmUsIEFWRnJhbWUgKmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZrUGlwZWxp bmVTdGFnZUZsYWdCaXRzMiB3YWl0X3N0YWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBWa1BpcGVsaW5lU3RhZ2VGbGFnQml0czIgc2lnbmFsX3N0YWdlKTsKK2ludCBmZl92a19leGVj X2FkZF9kZXBfc3dfZnJhbWUoRkZWdWxrYW5Db250ZXh0ICpzLCBGRlZrRXhlY0NvbnRleHQgKmUs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFWRnJhbWUgKmYpOwordm9pZCBmZl92 a19leGVjX3VwZGF0ZV9mcmFtZShGRlZ1bGthbkNvbnRleHQgKnMsIEZGVmtFeGVjQ29udGV4dCAq ZSwgQVZGcmFtZSAqZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmtJbWFnZU1lbW9y eUJhcnJpZXIyICpiYXIsIHVpbnQzMl90ICpuYl9pbWdfYmFyKTsKK2ludCBmZl92a19leGVjX21p cnJvcl9zZW1fdmFsdWUoRkZWdWxrYW5Db250ZXh0ICpzLCBGRlZrRXhlY0NvbnRleHQgKmUsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZrU2VtYXBob3JlICpkc3QsIHVpbnQ2NF90 ICpkc3RfdmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVkZyYW1lICpmKTsK K3ZvaWQgZmZfdmtfZXhlY19kaXNjYXJkX2RlcHMoRkZWdWxrYW5Db250ZXh0ICpzLCBGRlZrRXhl Y0NvbnRleHQgKmUpOworCisvKioKKyAqIENyZWF0ZSBhIHNpbmdsZSBpbWFnZXZpZXcgZm9yIGEg Z2l2ZW4gcGxhbmUuCisgKi8KK2ludCBmZl92a19jcmVhdGVfaW1hZ2V2aWV3KEZGVnVsa2FuQ29u dGV4dCAqcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFZrSW1hZ2VWaWV3ICppbWdfdmll dywgVmtJbWFnZUFzcGVjdEZsYWdzICphc3BlY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICBBVkZyYW1lICpmLCBpbnQgcGxhbmUsIGVudW0gRkZWa1NoYWRlclJlcEZvcm1hdCByZXBfZm10 KTsKKworLyoqCisgKiBDcmVhdGUgYW4gaW1hZ2V2aWV3IGFuZCBhZGQgaXQgYXMgYSBkZXBlbmRl bmN5IHRvIGFuIGV4ZWN1dGlvbi4KKyAqLworaW50IGZmX3ZrX2NyZWF0ZV9pbWFnZXZpZXdzKEZG VnVsa2FuQ29udGV4dCAqcywgRkZWa0V4ZWNDb250ZXh0ICplLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFZrSW1hZ2VWaWV3IHZpZXdzW0FWX05VTV9EQVRBX1BPSU5URVJTXSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICBBVkZyYW1lICpmLCBlbnVtIEZGVmtTaGFkZXJSZXBGb3Jt YXQgcmVwX2ZtdCk7CisKK3ZvaWQgZmZfdmtfZnJhbWVfYmFycmllcihGRlZ1bGthbkNvbnRleHQg KnMsIEZGVmtFeGVjQ29udGV4dCAqZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBBVkZyYW1l ICpwaWMsIFZrSW1hZ2VNZW1vcnlCYXJyaWVyMiAqYmFyLCBpbnQgKm5iX2JhciwKKyAgICAgICAg ICAgICAgICAgICAgICAgICBWa1BpcGVsaW5lU3RhZ2VGbGFncyBzcmNfc3RhZ2UsCisgICAgICAg ICAgICAgICAgICAgICAgICAgVmtQaXBlbGluZVN0YWdlRmxhZ3MgZHN0X3N0YWdlLAorICAgICAg ICAgICAgICAgICAgICAgICAgIFZrQWNjZXNzRmxhZ0JpdHMgICAgIG5ld19hY2Nlc3MsCisgICAg ICAgICAgICAgICAgICAgICAgICAgVmtJbWFnZUxheW91dCAgICAgICAgbmV3X2xheW91dCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAgICAgICAgICAgICBuZXdfcWYpOworCisv KioKKyAqIE1lbW9yeS9idWZmZXIvaW1hZ2UgYWxsb2NhdGlvbiBoZWxwZXJzLgorICovCitpbnQg ZmZfdmtfYWxsb2NfbWVtKEZGVnVsa2FuQ29udGV4dCAqcywgVmtNZW1vcnlSZXF1aXJlbWVudHMg KnJlcSwKKyAgICAgICAgICAgICAgICAgICAgVmtNZW1vcnlQcm9wZXJ0eUZsYWdCaXRzIHJlcV9m bGFncywgdm9pZCAqYWxsb2NfZXh0ZW5zaW9uLAorICAgICAgICAgICAgICAgICAgICBWa01lbW9y eVByb3BlcnR5RmxhZ0JpdHMgKm1lbV9mbGFncywgVmtEZXZpY2VNZW1vcnkgKm1lbSk7CitpbnQg ZmZfdmtfY3JlYXRlX2J1ZihGRlZ1bGthbkNvbnRleHQgKnMsIEZGVmtCdWZmZXIgKmJ1Ziwgc2l6 ZV90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICB2b2lkICpwTmV4dCwgdm9pZCAqYWxsb2Nf cE5leHQsCisgICAgICAgICAgICAgICAgICAgICBWa0J1ZmZlclVzYWdlRmxhZ3MgdXNhZ2UsIFZr TWVtb3J5UHJvcGVydHlGbGFnQml0cyBmbGFncyk7CisKKy8qKgorICogQnVmZmVyIG1hbmFnZW1l bnQgY29kZS4KKyAqLworaW50IGZmX3ZrX21hcF9idWZmZXJzKEZGVnVsa2FuQ29udGV4dCAqcywg RkZWa0J1ZmZlciAqKmJ1ZiwgdWludDhfdCAqbWVtW10sCisgICAgICAgICAgICAgICAgICAgICAg aW50IG5iX2J1ZmZlcnMsIGludCBpbnZhbGlkYXRlKTsKK2ludCBmZl92a191bm1hcF9idWZmZXJz KEZGVnVsa2FuQ29udGV4dCAqcywgRkZWa0J1ZmZlciAqKmJ1ZiwgaW50IG5iX2J1ZmZlcnMsCisg ICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmx1c2gpOworCitzdGF0aWMgaW5saW5lIGludCBm Zl92a19tYXBfYnVmZmVyKEZGVnVsa2FuQ29udGV4dCAqcywgRkZWa0J1ZmZlciAqYnVmLCB1aW50 OF90ICoqbWVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW52YWxp ZGF0ZSkKK3sKKyAgICByZXR1cm4gZmZfdmtfbWFwX2J1ZmZlcnMocywgKEZGVmtCdWZmZXIgKltd KXsgYnVmIH0sIG1lbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgaW52YWxpZGF0 ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGZmX3ZrX3VubWFwX2J1ZmZlcihGRlZ1bGthbkNv bnRleHQgKnMsIEZGVmtCdWZmZXIgKmJ1ZiwgaW50IGZsdXNoKQoreworICAgIHJldHVybiBmZl92 a191bm1hcF9idWZmZXJzKHMsIChGRlZrQnVmZmVyICpbXSl7IGJ1ZiB9LCAxLCBmbHVzaCk7Cit9 CisKK3ZvaWQgZmZfdmtfZnJlZV9idWYoRkZWdWxrYW5Db250ZXh0ICpzLCBGRlZrQnVmZmVyICpi dWYpOworCisvKiogSW5pdGlhbGl6ZSBhIHBvb2wgYW5kIGNyZWF0ZSBBVkJ1ZmZlclJlZnMgY29u dGFpbmluZyBGRlZrQnVmZmVyLgorICogVGhyZWFkc2FmZSB0byB1c2UuIEJ1ZmZlcnMgYXJlIGF1 dG9tYXRpY2FsbHkgbWFwcGVkIG9uIGNyZWF0aW9uIGlmCisgKiBWS19NRU1PUllfUFJPUEVSVFlf SE9TVF9WSVNJQkxFX0JJVCBpcyBzZXQgaW4gbWVtX3Byb3BzLiBVc2VycyBzaG91bGQKKyAqIHN5 bmNocm9uaXplIGFjY2VzcyB0aGVtc2VsdmVzZC4gTWFpbmx5IG1lYW50IGZvciBkZXZpY2UtbG9j YWwgYnVmZmVycy4gKi8KK2ludCBmZl92a19nZXRfcG9vbGVkX2J1ZmZlcihGRlZ1bGthbkNvbnRl eHQgKmN0eCwgQVZCdWZmZXJQb29sICoqYnVmX3Bvb2wsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgQVZCdWZmZXJSZWYgKipidWYsIFZrQnVmZmVyVXNhZ2VGbGFncyB1c2FnZSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpjcmVhdGVfcE5leHQsIHNpemVfdCBzaXplLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZrTWVtb3J5UHJvcGVydHlGbGFnQml0cyBtZW1f cHJvcHMpOworCisvKiogTWFwcyBhIHN5c3RlbSBSQU0gYnVmZmVyIGludG8gYSBWdWxrYW4gYnVm ZmVyLgorICogUmVmZXJlbmNlcyB0aGUgc291cmNlIGJ1ZmZlci4KKyAqLworaW50IGZmX3ZrX2hv c3RfbWFwX2J1ZmZlcihGRlZ1bGthbkNvbnRleHQgKnMsIEFWQnVmZmVyUmVmICoqZHN0LAorICAg ICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpzcmNfZGF0YSwgY29uc3QgQVZCdWZmZXJS ZWYgKnNyY19idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFZrQnVmZmVyVXNhZ2VGbGFn cyB1c2FnZSk7CisKKy8qKgorICogQ3JlYXRlIGEgc2FtcGxlci4KKyAqLworaW50IGZmX3ZrX2lu aXRfc2FtcGxlcihGRlZ1bGthbkNvbnRleHQgKnMsIFZrU2FtcGxlciAqc2FtcGxlciwKKyAgICAg ICAgICAgICAgICAgICAgICAgaW50IHVubm9ybV9jb29yZHMsIFZrRmlsdGVyIGZpbHQpOworCisv KioKKyAqIEluaXRpYWxpemUgYSBzaGFkZXIgb2JqZWN0LCB3aXRoIGEgc3BlY2lmaWMgc2V0IG9m IGV4dGVuc2lvbnMsIHR5cGUrYmluZCwKKyAqIGxvY2FsIGdyb3VwIHNpemUsIGFuZCBzdWJncm91 cCByZXF1aXJlbWVudHMuCisgKi8KK2ludCBmZl92a19zaGFkZXJfaW5pdChGRlZ1bGthbkNvbnRl eHQgKnMsIEZGVnVsa2FuU2hhZGVyICpzaGQsIGNvbnN0IGNoYXIgKm5hbWUsCisgICAgICAgICAg ICAgICAgICAgICAgVmtQaXBlbGluZVN0YWdlRmxhZ3Mgc3RhZ2UsCisgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgY2hhciAqZXh0ZW5zaW9uc1tdLCBpbnQgbmJfZXh0ZW5zaW9ucywKKyAgICAg ICAgICAgICAgICAgICAgICBpbnQgbGdfeCwgaW50IGxnX3ksIGludCBsZ196LAorICAgICAgICAg ICAgICAgICAgICAgIHVpbnQzMl90IHJlcXVpcmVkX3N1Ymdyb3VwX3NpemUpOworCisvKioKKyAq IE91dHB1dCB0aGUgc2hhZGVyIGNvZGUgYXMgbG9nZ2luZyBkYXRhLCB3aXRoIGEgc3BlY2lmaWMK KyAqIHByaW9yaXR5LgorICovCit2b2lkIGZmX3ZrX3NoYWRlcl9wcmludCh2b2lkICpjdHgsIEZG VnVsa2FuU2hhZGVyICpzaGQsIGludCBwcmlvKTsKKworLyoqCisgKiBMaW5rIGEgc2hhZGVyIGlu dG8gYW4gZXhlY3V0YWJsZS4KKyAqLworaW50IGZmX3ZrX3NoYWRlcl9saW5rKEZGVnVsa2FuQ29u dGV4dCAqcywgRkZWdWxrYW5TaGFkZXIgKnNoZCwKKyAgICAgICAgICAgICAgICAgICAgICB1aW50 OF90ICpzcGlydiwgc2l6ZV90IHNwaXJ2X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICBjb25z dCBjaGFyICplbnRyeXBvaW50KTsKKworLyoqCisgKiBBZGQvdXBkYXRlIHB1c2ggY29uc3RhbnRz IGZvciBleGVjdXRpb24uCisgKi8KK2ludCBmZl92a19zaGFkZXJfYWRkX3B1c2hfY29uc3QoRkZW dWxrYW5TaGFkZXIgKnNoZCwgaW50IG9mZnNldCwgaW50IHNpemUsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFZrU2hhZGVyU3RhZ2VGbGFnQml0cyBzdGFnZSk7CisKKy8qKgorICog QWRkIGRlc2NyaXB0b3IgdG8gYSBzaGFkZXIuIE11c3QgYmUgY2FsbGVkIGJlZm9yZSBzaGFkZXIg aW5pdC4KKyAqLworaW50IGZmX3ZrX3NoYWRlcl9hZGRfZGVzY3JpcHRvcl9zZXQoRkZWdWxrYW5D b250ZXh0ICpzLCBGRlZ1bGthblNoYWRlciAqc2hkLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgRkZWdWxrYW5EZXNjcmlwdG9yU2V0QmluZGluZyAqZGVzYywgaW50IG5iLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNpbmd1bGFyLCBpbnQgcHJp bnRfdG9fc2hhZGVyX29ubHkpOworCisvKioKKyAqIFJlZ2lzdGVyIGEgc2hhZGVyIHdpdGggYW4g ZXhlYyBwb29sLgorICogUG9vbCBtYXkgYmUgTlVMTCBpZiBhbGwgZGVzY3JpcHRvciBzZXRzIGFy ZSByZWFkLW9ubHkuCisgKi8KK2ludCBmZl92a19zaGFkZXJfcmVnaXN0ZXJfZXhlYyhGRlZ1bGth bkNvbnRleHQgKnMsIEZGVmtFeGVjUG9vbCAqcG9vbCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBGRlZ1bGthblNoYWRlciAqc2hkKTsKKworLyoqCisgKiBCaW5kIGEgc2hhZGVyLgor ICovCit2b2lkIGZmX3ZrX2V4ZWNfYmluZF9zaGFkZXIoRkZWdWxrYW5Db250ZXh0ICpzLCBGRlZr RXhlY0NvbnRleHQgKmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkZWdWxrYW5TaGFk ZXIgKnNoZCk7CisKKy8qKgorICogVXBkYXRlIHB1c2ggY29uc3RhbnQgaW4gYSBzaGFkZXIuCisg KiBNdXN0IGJlIGNhbGxlZCBiZWZvcmUgYmluZGluZyB0aGUgc2hhZGVyLgorICovCit2b2lkIGZm X3ZrX3NoYWRlcl91cGRhdGVfcHVzaF9jb25zdChGRlZ1bGthbkNvbnRleHQgKnMsIEZGVmtFeGVj Q29udGV4dCAqZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZGVnVsa2Fu U2hhZGVyICpzaGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWa1NoYWRl clN0YWdlRmxhZ0JpdHMgc3RhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpbnQgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwgdm9pZCAqc3JjKTsKKworLyoqCisgKiBVcGRhdGUg YSBkZXNjcmlwdG9yIGluIGEgYnVmZmVyIHdpdGggYSBidWZmZXIuCisgKiBNdXN0IGJlIGNhbGxl ZCBiZWZvcmUgYmluZGluZyB0aGUgc2hhZGVyLgorICovCitpbnQgZmZfdmtfc2hhZGVyX3VwZGF0 ZV9kZXNjX2J1ZmZlcihGRlZ1bGthbkNvbnRleHQgKnMsIEZGVmtFeGVjQ29udGV4dCAqZSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZGVnVsa2FuU2hhZGVyICpzaGQsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2V0LCBpbnQgYmluZCwgaW50 IGVsZW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGRlZrQnVmZmVyICpi dWYsIFZrRGV2aWNlU2l6ZSBvZmZzZXQsIFZrRGV2aWNlU2l6ZSBsZW4sCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBWa0Zvcm1hdCBmbXQpOworCisvKioKKyAqIFNldHMgYW4g aW1hZ2UgZGVzY3JpcHRvciBmb3Igc3BlY2lmaWVkIHNoYWRlciBhbmQgYmluZGluZy4KKyAqLwor aW50IGZmX3ZrX3NoYWRlcl91cGRhdGVfaW1nKEZGVnVsa2FuQ29udGV4dCAqcywgRkZWa0V4ZWND b250ZXh0ICplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZGVnVsa2FuU2hhZGVyICpz aGQsIGludCBzZXQsIGludCBiaW5kLCBpbnQgb2ZmcywKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICBWa0ltYWdlVmlldyB2aWV3LCBWa0ltYWdlTGF5b3V0IGxheW91dCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICBWa1NhbXBsZXIgc2FtcGxlcik7CisKKy8qKgorICogVXBkYXRlIGEg ZGVzY3JpcHRvciBpbiBhIGJ1ZmZlciB3aXRoIGFuIGltYWdlIGFycmF5Li4KKyAqIE11c3QgYmUg Y2FsbGVkIGJlZm9yZSBiaW5kaW5nIHRoZSBzaGFkZXIuCisgKi8KK3ZvaWQgZmZfdmtfc2hhZGVy X3VwZGF0ZV9pbWdfYXJyYXkoRkZWdWxrYW5Db250ZXh0ICpzLCBGRlZrRXhlY0NvbnRleHQgKmUs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZGVnVsa2FuU2hhZGVyICpzaGQs IEFWRnJhbWUgKmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZrSW1hZ2VW aWV3ICp2aWV3cywgaW50IHNldCwgaW50IGJpbmRpbmcsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFZrSW1hZ2VMYXlvdXQgbGF5b3V0LCBWa1NhbXBsZXIgc2FtcGxlcik7CisK Ky8qKgorICogRnJlZSBhIHNoYWRlci4KKyAqLwordm9pZCBmZl92a19zaGFkZXJfZnJlZShGRlZ1 bGthbkNvbnRleHQgKnMsIEZGVnVsa2FuU2hhZGVyICpzaGQpOworCisvKioKKyAqIEZyZWVzIG1h aW4gY29udGV4dC4KKyAqLwordm9pZCBmZl92a191bmluaXQoRkZWdWxrYW5Db250ZXh0ICpzKTsK KworI2VuZGlmIC8qIEFWVVRJTF9WVUxLQU5fSCAqLwotLSAKMi40OS4xCgoKRnJvbSAwMTI2MDQw NzFjOTdlODczZGVjOWE2NTQ4ZTI3MWE2ZjA3ZGJkNzNjIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAw MQpGcm9tOiBKYW1haWthMSA8bHVrYXN6Y3oxOEB3cC5wbD4KRGF0ZTogV2VkLCAzIFNlcCAyMDI1 IDEzOjE5OjE5ICswMDAwClN1YmplY3Q6IFtQQVRDSCAwNDcvMTE4XSBDaGFuZ2luZyB2dWxrYW4g ZmlsZSBkaXJlY3RvcnkKCi0tLQogbGliYXZ1dGlsL3Z1bGthbl9nbHNsYW5nLmMgfCAzMDggLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDMwOCBk ZWxldGlvbnMoLSkKIGRlbGV0ZSBtb2RlIDEwMDY0NCBsaWJhdnV0aWwvdnVsa2FuX2dsc2xhbmcu YwoKZGlmZiAtLWdpdCBhL2xpYmF2dXRpbC92dWxrYW5fZ2xzbGFuZy5jIGIvbGliYXZ1dGlsL3Z1 bGthbl9nbHNsYW5nLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjZjU0ZGU4NTQu LjAwMDAwMDAwMDAKLS0tIGEvbGliYXZ1dGlsL3Z1bGthbl9nbHNsYW5nLmMKKysrIC9kZXYvbnVs bApAQCAtMSwzMDggKzAsMCBAQAotLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4K LSAqCi0gKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg YW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdl bmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAo YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIEZGbXBlZyBpcyBkaXN0 cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhP VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAq IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl ZSB0aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh aWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM ZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5v dCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKLSAq LwotCi0jaW5jbHVkZSA8cHRocmVhZC5oPgotCi0jaW5jbHVkZSA8Z2xzbGFuZy9idWlsZF9pbmZv Lmg+Ci0jaW5jbHVkZSA8Z2xzbGFuZy9JbmNsdWRlL2dsc2xhbmdfY19pbnRlcmZhY2UuaD4KLQot I2luY2x1ZGUgInZ1bGthbl9zcGlydi5oIgotI2luY2x1ZGUgImxpYmF2dXRpbC9tZW0uaCIKLSNp bmNsdWRlICJsaWJhdnV0aWwvYXZhc3NlcnQuaCIKLQotc3RhdGljIHB0aHJlYWRfbXV0ZXhfdCBn bHNsY19tdXRleCA9IFBUSFJFQURfTVVURVhfSU5JVElBTElaRVI7Ci1zdGF0aWMgaW50IGdsc2xj X3JlZmNvdW50ID0gMDsKLQotc3RhdGljIGNvbnN0IGdsc2xhbmdfcmVzb3VyY2VfdCBnbHNsY19y ZXNvdXJjZV9saW1pdHMgPSB7Ci0gICAgLm1heF9saWdodHMgPSAzMiwKLSAgICAubWF4X2NsaXBf cGxhbmVzID0gNiwKLSAgICAubWF4X3RleHR1cmVfdW5pdHMgPSAzMiwKLSAgICAubWF4X3RleHR1 cmVfY29vcmRzID0gMzIsCi0gICAgLm1heF92ZXJ0ZXhfYXR0cmlicyA9IDY0LAotICAgIC5tYXhf dmVydGV4X3VuaWZvcm1fY29tcG9uZW50cyA9IDQwOTYsCi0gICAgLm1heF92YXJ5aW5nX2Zsb2F0 cyA9IDY0LAotICAgIC5tYXhfdmVydGV4X3RleHR1cmVfaW1hZ2VfdW5pdHMgPSAzMiwKLSAgICAu bWF4X2NvbWJpbmVkX3RleHR1cmVfaW1hZ2VfdW5pdHMgPSA4MCwKLSAgICAubWF4X3RleHR1cmVf aW1hZ2VfdW5pdHMgPSAzMiwKLSAgICAubWF4X2ZyYWdtZW50X3VuaWZvcm1fY29tcG9uZW50cyA9 IDQwOTYsCi0gICAgLm1heF9kcmF3X2J1ZmZlcnMgPSAzMiwKLSAgICAubWF4X3ZlcnRleF91bmlm b3JtX3ZlY3RvcnMgPSAxMjgsCi0gICAgLm1heF92YXJ5aW5nX3ZlY3RvcnMgPSA4LAotICAgIC5t YXhfZnJhZ21lbnRfdW5pZm9ybV92ZWN0b3JzID0gMTYsCi0gICAgLm1heF92ZXJ0ZXhfb3V0cHV0 X3ZlY3RvcnMgPSAxNiwKLSAgICAubWF4X2ZyYWdtZW50X2lucHV0X3ZlY3RvcnMgPSAxNSwKLSAg ICAubWluX3Byb2dyYW1fdGV4ZWxfb2Zmc2V0ID0gLTgsCi0gICAgLm1heF9wcm9ncmFtX3RleGVs X29mZnNldCA9IDcsCi0gICAgLm1heF9jbGlwX2Rpc3RhbmNlcyA9IDgsCi0gICAgLm1heF9jb21w dXRlX3dvcmtfZ3JvdXBfY291bnRfeCA9IDY1NTM1LAotICAgIC5tYXhfY29tcHV0ZV93b3JrX2dy b3VwX2NvdW50X3kgPSA2NTUzNSwKLSAgICAubWF4X2NvbXB1dGVfd29ya19ncm91cF9jb3VudF96 ID0gNjU1MzUsCi0gICAgLm1heF9jb21wdXRlX3dvcmtfZ3JvdXBfc2l6ZV94ID0gMTAyNCwKLSAg ICAubWF4X2NvbXB1dGVfd29ya19ncm91cF9zaXplX3kgPSAxMDI0LAotICAgIC5tYXhfY29tcHV0 ZV93b3JrX2dyb3VwX3NpemVfeiA9IDY0LAotICAgIC5tYXhfY29tcHV0ZV91bmlmb3JtX2NvbXBv bmVudHMgPSAxMDI0LAotICAgIC5tYXhfY29tcHV0ZV90ZXh0dXJlX2ltYWdlX3VuaXRzID0gMTYs Ci0gICAgLm1heF9jb21wdXRlX2ltYWdlX3VuaWZvcm1zID0gOCwKLSAgICAubWF4X2NvbXB1dGVf YXRvbWljX2NvdW50ZXJzID0gOCwKLSAgICAubWF4X2NvbXB1dGVfYXRvbWljX2NvdW50ZXJfYnVm ZmVycyA9IDEsCi0gICAgLm1heF92YXJ5aW5nX2NvbXBvbmVudHMgPSA2MCwKLSAgICAubWF4X3Zl cnRleF9vdXRwdXRfY29tcG9uZW50cyA9IDY0LAotICAgIC5tYXhfZ2VvbWV0cnlfaW5wdXRfY29t cG9uZW50cyA9IDY0LAotICAgIC5tYXhfZ2VvbWV0cnlfb3V0cHV0X2NvbXBvbmVudHMgPSAxMjgs Ci0gICAgLm1heF9mcmFnbWVudF9pbnB1dF9jb21wb25lbnRzID0gMTI4LAotICAgIC5tYXhfaW1h Z2VfdW5pdHMgPSA4LAotICAgIC5tYXhfY29tYmluZWRfaW1hZ2VfdW5pdHNfYW5kX2ZyYWdtZW50 X291dHB1dHMgPSA4LAotICAgIC5tYXhfY29tYmluZWRfc2hhZGVyX291dHB1dF9yZXNvdXJjZXMg PSA4LAotICAgIC5tYXhfaW1hZ2Vfc2FtcGxlcyA9IDAsCi0gICAgLm1heF92ZXJ0ZXhfaW1hZ2Vf dW5pZm9ybXMgPSAwLAotICAgIC5tYXhfdGVzc19jb250cm9sX2ltYWdlX3VuaWZvcm1zID0gMCwK LSAgICAubWF4X3Rlc3NfZXZhbHVhdGlvbl9pbWFnZV91bmlmb3JtcyA9IDAsCi0gICAgLm1heF9n ZW9tZXRyeV9pbWFnZV91bmlmb3JtcyA9IDAsCi0gICAgLm1heF9mcmFnbWVudF9pbWFnZV91bmlm b3JtcyA9IDgsCi0gICAgLm1heF9jb21iaW5lZF9pbWFnZV91bmlmb3JtcyA9IDgsCi0gICAgLm1h eF9nZW9tZXRyeV90ZXh0dXJlX2ltYWdlX3VuaXRzID0gMTYsCi0gICAgLm1heF9nZW9tZXRyeV9v dXRwdXRfdmVydGljZXMgPSAyNTYsCi0gICAgLm1heF9nZW9tZXRyeV90b3RhbF9vdXRwdXRfY29t cG9uZW50cyA9IDEwMjQsCi0gICAgLm1heF9nZW9tZXRyeV91bmlmb3JtX2NvbXBvbmVudHMgPSAx MDI0LAotICAgIC5tYXhfZ2VvbWV0cnlfdmFyeWluZ19jb21wb25lbnRzID0gNjQsCi0gICAgLm1h eF90ZXNzX2NvbnRyb2xfaW5wdXRfY29tcG9uZW50cyA9IDEyOCwKLSAgICAubWF4X3Rlc3NfY29u dHJvbF9vdXRwdXRfY29tcG9uZW50cyA9IDEyOCwKLSAgICAubWF4X3Rlc3NfY29udHJvbF90ZXh0 dXJlX2ltYWdlX3VuaXRzID0gMTYsCi0gICAgLm1heF90ZXNzX2NvbnRyb2xfdW5pZm9ybV9jb21w b25lbnRzID0gMTAyNCwKLSAgICAubWF4X3Rlc3NfY29udHJvbF90b3RhbF9vdXRwdXRfY29tcG9u ZW50cyA9IDQwOTYsCi0gICAgLm1heF90ZXNzX2V2YWx1YXRpb25faW5wdXRfY29tcG9uZW50cyA9 IDEyOCwKLSAgICAubWF4X3Rlc3NfZXZhbHVhdGlvbl9vdXRwdXRfY29tcG9uZW50cyA9IDEyOCwK LSAgICAubWF4X3Rlc3NfZXZhbHVhdGlvbl90ZXh0dXJlX2ltYWdlX3VuaXRzID0gMTYsCi0gICAg Lm1heF90ZXNzX2V2YWx1YXRpb25fdW5pZm9ybV9jb21wb25lbnRzID0gMTAyNCwKLSAgICAubWF4 X3Rlc3NfcGF0Y2hfY29tcG9uZW50cyA9IDEyMCwKLSAgICAubWF4X3BhdGNoX3ZlcnRpY2VzID0g MzIsCi0gICAgLm1heF90ZXNzX2dlbl9sZXZlbCA9IDY0LAotICAgIC5tYXhfdmlld3BvcnRzID0g MTYsCi0gICAgLm1heF92ZXJ0ZXhfYXRvbWljX2NvdW50ZXJzID0gMCwKLSAgICAubWF4X3Rlc3Nf Y29udHJvbF9hdG9taWNfY291bnRlcnMgPSAwLAotICAgIC5tYXhfdGVzc19ldmFsdWF0aW9uX2F0 b21pY19jb3VudGVycyA9IDAsCi0gICAgLm1heF9nZW9tZXRyeV9hdG9taWNfY291bnRlcnMgPSAw LAotICAgIC5tYXhfZnJhZ21lbnRfYXRvbWljX2NvdW50ZXJzID0gOCwKLSAgICAubWF4X2NvbWJp bmVkX2F0b21pY19jb3VudGVycyA9IDgsCi0gICAgLm1heF9hdG9taWNfY291bnRlcl9iaW5kaW5n cyA9IDEsCi0gICAgLm1heF92ZXJ0ZXhfYXRvbWljX2NvdW50ZXJfYnVmZmVycyA9IDAsCi0gICAg Lm1heF90ZXNzX2NvbnRyb2xfYXRvbWljX2NvdW50ZXJfYnVmZmVycyA9IDAsCi0gICAgLm1heF90 ZXNzX2V2YWx1YXRpb25fYXRvbWljX2NvdW50ZXJfYnVmZmVycyA9IDAsCi0gICAgLm1heF9nZW9t ZXRyeV9hdG9taWNfY291bnRlcl9idWZmZXJzID0gMCwKLSAgICAubWF4X2ZyYWdtZW50X2F0b21p Y19jb3VudGVyX2J1ZmZlcnMgPSAxLAotICAgIC5tYXhfY29tYmluZWRfYXRvbWljX2NvdW50ZXJf YnVmZmVycyA9IDEsCi0gICAgLm1heF9hdG9taWNfY291bnRlcl9idWZmZXJfc2l6ZSA9IDE2Mzg0 LAotICAgIC5tYXhfdHJhbnNmb3JtX2ZlZWRiYWNrX2J1ZmZlcnMgPSA0LAotICAgIC5tYXhfdHJh bnNmb3JtX2ZlZWRiYWNrX2ludGVybGVhdmVkX2NvbXBvbmVudHMgPSA2NCwKLSAgICAubWF4X2N1 bGxfZGlzdGFuY2VzID0gOCwKLSAgICAubWF4X2NvbWJpbmVkX2NsaXBfYW5kX2N1bGxfZGlzdGFu Y2VzID0gOCwKLSAgICAubWF4X3NhbXBsZXMgPSA0LAotICAgIC5tYXhfbWVzaF9vdXRwdXRfdmVy dGljZXNfbnYgPSAyNTYsCi0gICAgLm1heF9tZXNoX291dHB1dF9wcmltaXRpdmVzX252ID0gNTEy LAotICAgIC5tYXhfbWVzaF93b3JrX2dyb3VwX3NpemVfeF9udiA9IDMyLAotICAgIC5tYXhfbWVz aF93b3JrX2dyb3VwX3NpemVfeV9udiA9IDEsCi0gICAgLm1heF9tZXNoX3dvcmtfZ3JvdXBfc2l6 ZV96X252ID0gMSwKLSAgICAubWF4X3Rhc2tfd29ya19ncm91cF9zaXplX3hfbnYgPSAzMiwKLSAg ICAubWF4X3Rhc2tfd29ya19ncm91cF9zaXplX3lfbnYgPSAxLAotICAgIC5tYXhfdGFza193b3Jr X2dyb3VwX3NpemVfel9udiA9IDEsCi0gICAgLm1heF9tZXNoX3ZpZXdfY291bnRfbnYgPSA0LAot ICAgIC5tYXhEdWFsU291cmNlRHJhd0J1ZmZlcnNFWFQgPSAxLAotCi0gICAgLmxpbWl0cyA9IHsK LSAgICAgICAgLm5vbl9pbmR1Y3RpdmVfZm9yX2xvb3BzID0gMSwKLSAgICAgICAgLndoaWxlX2xv b3BzID0gMSwKLSAgICAgICAgLmRvX3doaWxlX2xvb3BzID0gMSwKLSAgICAgICAgLmdlbmVyYWxf dW5pZm9ybV9pbmRleGluZyA9IDEsCi0gICAgICAgIC5nZW5lcmFsX2F0dHJpYnV0ZV9tYXRyaXhf dmVjdG9yX2luZGV4aW5nID0gMSwKLSAgICAgICAgLmdlbmVyYWxfdmFyeWluZ19pbmRleGluZyA9 IDEsCi0gICAgICAgIC5nZW5lcmFsX3NhbXBsZXJfaW5kZXhpbmcgPSAxLAotICAgICAgICAuZ2Vu ZXJhbF92YXJpYWJsZV9pbmRleGluZyA9IDEsCi0gICAgICAgIC5nZW5lcmFsX2NvbnN0YW50X21h dHJpeF92ZWN0b3JfaW5kZXhpbmcgPSAxLAotICAgIH0KLX07Ci0KLXN0YXRpYyBpbnQgZ2xzbGNf c2hhZGVyX2NvbXBpbGUoRkZWdWxrYW5Db250ZXh0ICpzLCBGRlZrU1BJUlZDb21waWxlciAqY3R4 LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGRlZ1bGthblNoYWRlciAqc2hkLCB1 aW50OF90ICoqZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpz aXplLCBjb25zdCBjaGFyICplbnRyeXBvaW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB2b2lkICoqb3BhcXVlKQotewotICAgIGNvbnN0IGNoYXIgKm1lc3NhZ2VzOwotICAgIGds c2xhbmdfc2hhZGVyX3QgKmdsc2xjX3NoYWRlcjsKLSAgICBnbHNsYW5nX3Byb2dyYW1fdCAqZ2xz bGNfcHJvZ3JhbTsKLQotICAgIHN0YXRpYyBjb25zdCBnbHNsYW5nX3N0YWdlX3QgZ2xzbGNfc3Rh Z2VbXSA9IHsKLSAgICAgICAgW1ZLX1NIQURFUl9TVEFHRV9WRVJURVhfQklUXSAgID0gR0xTTEFO R19TVEFHRV9WRVJURVgsCi0gICAgICAgIFtWS19TSEFERVJfU1RBR0VfRlJBR01FTlRfQklUXSA9 IEdMU0xBTkdfU1RBR0VfRlJBR01FTlQsCi0gICAgICAgIFtWS19TSEFERVJfU1RBR0VfQ09NUFVU RV9CSVRdICA9IEdMU0xBTkdfU1RBR0VfQ09NUFVURSwKLSNpZiAoKEdMU0xBTkdfVkVSU0lPTl9N QUpPUikgPiAxMikKLSAgICAgICAgW1ZLX1NIQURFUl9TVEFHRV9UQVNLX0JJVF9FWFRdID0gR0xT TEFOR19TVEFHRV9UQVNLLAotICAgICAgICBbVktfU0hBREVSX1NUQUdFX01FU0hfQklUX0VYVF0g PSBHTFNMQU5HX1NUQUdFX01FU0gsCi0gICAgICAgIFtWS19TSEFERVJfU1RBR0VfUkFZR0VOX0JJ VF9LSFJdID0gR0xTTEFOR19TVEFHRV9SQVlHRU4sCi0gICAgICAgIFtWS19TSEFERVJfU1RBR0Vf SU5URVJTRUNUSU9OX0JJVF9LSFJdID0gR0xTTEFOR19TVEFHRV9JTlRFUlNFQ1QsCi0gICAgICAg IFtWS19TSEFERVJfU1RBR0VfQU5ZX0hJVF9CSVRfS0hSXSA9IEdMU0xBTkdfU1RBR0VfQU5ZSElU LAotICAgICAgICBbVktfU0hBREVSX1NUQUdFX0NMT1NFU1RfSElUX0JJVF9LSFJdID0gR0xTTEFO R19TVEFHRV9DTE9TRVNUSElULAotICAgICAgICBbVktfU0hBREVSX1NUQUdFX01JU1NfQklUX0tI Ul0gPSBHTFNMQU5HX1NUQUdFX01JU1MsCi0gICAgICAgIFtWS19TSEFERVJfU1RBR0VfQ0FMTEFC TEVfQklUX0tIUl0gPSBHTFNMQU5HX1NUQUdFX0NBTExBQkxFLAotI2VuZGlmCi0gICAgfTsKLQot ICAgIGNvbnN0IGdsc2xhbmdfaW5wdXRfdCBnbHNsY19pbnB1dCA9IHsKLSAgICAgICAgLmxhbmd1 YWdlICAgICAgICAgICAgICAgICAgICAgICAgICA9IEdMU0xBTkdfU09VUkNFX0dMU0wsCi0gICAg ICAgIC5zdGFnZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBnbHNsY19zdGFnZVtzaGQt PnN0YWdlXSwKLSAgICAgICAgLmNsaWVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IEdM U0xBTkdfQ0xJRU5UX1ZVTEtBTiwKLSNpZiAoKEdMU0xBTkdfVkVSU0lPTl9NQUpPUikgPj0gMTIp Ci0gICAgICAgIC5jbGllbnRfdmVyc2lvbiAgICAgICAgICAgICAgICAgICAgPSBHTFNMQU5HX1RB UkdFVF9WVUxLQU5fMV8zLAotICAgICAgICAudGFyZ2V0X2xhbmd1YWdlX3ZlcnNpb24gICAgICAg ICAgID0gR0xTTEFOR19UQVJHRVRfU1BWXzFfNiwKLSNlbHNlCi0gICAgICAgIC5jbGllbnRfdmVy c2lvbiAgICAgICAgICAgICAgICAgICAgPSBHTFNMQU5HX1RBUkdFVF9WVUxLQU5fMV8yLAotICAg ICAgICAudGFyZ2V0X2xhbmd1YWdlX3ZlcnNpb24gICAgICAgICAgID0gR0xTTEFOR19UQVJHRVRf U1BWXzFfNSwKLSNlbmRpZgotICAgICAgICAudGFyZ2V0X2xhbmd1YWdlICAgICAgICAgICAgICAg ICAgID0gR0xTTEFOR19UQVJHRVRfU1BWLAotICAgICAgICAuY29kZSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgID0gc2hkLT5zcmMuc3RyLAotICAgICAgICAuZGVmYXVsdF92ZXJzaW9uICAg ICAgICAgICAgICAgICAgID0gNDYwLAotICAgICAgICAuZGVmYXVsdF9wcm9maWxlICAgICAgICAg ICAgICAgICAgID0gR0xTTEFOR19OT19QUk9GSUxFLAotICAgICAgICAuZm9yY2VfZGVmYXVsdF92 ZXJzaW9uX2FuZF9wcm9maWxlID0gZmFsc2UsCi0gICAgICAgIC5mb3J3YXJkX2NvbXBhdGlibGUg ICAgICAgICAgICAgICAgPSBmYWxzZSwKLSAgICAgICAgLm1lc3NhZ2VzICAgICAgICAgICAgICAg ICAgICAgICAgICA9IEdMU0xBTkdfTVNHX0RFRkFVTFRfQklULAotICAgICAgICAucmVzb3VyY2Ug ICAgICAgICAgICAgICAgICAgICAgICAgID0gJmdsc2xjX3Jlc291cmNlX2xpbWl0cywKLSAgICB9 OwotCi0jaWYgKChHTFNMQU5HX1ZFUlNJT05fTUFKT1IpID49IDEyKQotICAgIGdsc2xhbmdfc3B2 X29wdGlvbnNfdCBnbHNsY19vcHRzID0gewotICAgICAgICAuZ2VuZXJhdGVfZGVidWdfaW5mbyA9 ICEhKHMtPmV4dGVuc2lvbnMgJiAoRkZfVktfRVhUX0RFQlVHX1VUSUxTIHwgRkZfVktfRVhUX1JF TEFYRURfRVhURU5ERURfSU5TVFIpKSwKLSAgICAgICAgLmVtaXRfbm9uc2VtYW50aWNfc2hhZGVy X2RlYnVnX2luZm8gPSAhIShzLT5leHRlbnNpb25zICYgRkZfVktfRVhUX1JFTEFYRURfRVhURU5E RURfSU5TVFIpLAotICAgICAgICAuZW1pdF9ub25zZW1hbnRpY19zaGFkZXJfZGVidWdfc291cmNl ID0gISEocy0+ZXh0ZW5zaW9ucyAmIEZGX1ZLX0VYVF9SRUxBWEVEX0VYVEVOREVEX0lOU1RSKSwK LSAgICAgICAgLmRpc2FibGVfb3B0aW1pemVyID0gISEocy0+ZXh0ZW5zaW9ucyAmIEZGX1ZLX0VY VF9ERUJVR19VVElMUyksCi0gICAgICAgIC5zdHJpcF9kZWJ1Z19pbmZvID0gIShzLT5leHRlbnNp b25zICYgKEZGX1ZLX0VYVF9ERUJVR19VVElMUyB8IEZGX1ZLX0VYVF9SRUxBWEVEX0VYVEVOREVE X0lOU1RSKSksCi0gICAgICAgIC5vcHRpbWl6ZV9zaXplID0gMCwKLSAgICAgICAgLmRpc2Fzc2Vt YmxlID0gMCwKLSAgICAgICAgLnZhbGlkYXRlID0gMSwKLSAgICAgICAgLyogLmNvbXBpbGVfb25s eSA9IDAsICovCi0gICAgfTsKLSNlbmRpZgotCi0gICAgYXZfYXNzZXJ0MChnbHNsY19yZWZjb3Vu dCk7Ci0KLSAgICAqb3BhcXVlID0gTlVMTDsKLQotICAgIGlmICghKGdsc2xjX3NoYWRlciA9IGds c2xhbmdfc2hhZGVyX2NyZWF0ZSgmZ2xzbGNfaW5wdXQpKSkKLSAgICAgICAgcmV0dXJuIEFWRVJS T1IoRU5PTUVNKTsKLQotICAgIGlmICghZ2xzbGFuZ19zaGFkZXJfcHJlcHJvY2VzcyhnbHNsY19z aGFkZXIsICZnbHNsY19pbnB1dCkpIHsKLSAgICAgICAgZmZfdmtfc2hhZGVyX3ByaW50KHMsIHNo ZCwgQVZfTE9HX1dBUk5JTkcpOwotICAgICAgICBhdl9sb2cocywgQVZfTE9HX0VSUk9SLCAiVW5h YmxlIHRvIHByZXByb2Nlc3Mgc2hhZGVyOiAlcyAoJXMpIVxuIiwKLSAgICAgICAgICAgICAgIGds c2xhbmdfc2hhZGVyX2dldF9pbmZvX2xvZyhnbHNsY19zaGFkZXIpLAotICAgICAgICAgICAgICAg Z2xzbGFuZ19zaGFkZXJfZ2V0X2luZm9fZGVidWdfbG9nKGdsc2xjX3NoYWRlcikpOwotICAgICAg ICBnbHNsYW5nX3NoYWRlcl9kZWxldGUoZ2xzbGNfc2hhZGVyKTsKLSAgICAgICAgcmV0dXJuIEFW RVJST1IoRUlOVkFMKTsKLSAgICB9Ci0KLSAgICBpZiAoIWdsc2xhbmdfc2hhZGVyX3BhcnNlKGds c2xjX3NoYWRlciwgJmdsc2xjX2lucHV0KSkgewotICAgICAgICBmZl92a19zaGFkZXJfcHJpbnQo cywgc2hkLCBBVl9MT0dfV0FSTklORyk7Ci0gICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJST1Is ICJVbmFibGUgdG8gcGFyc2Ugc2hhZGVyOiAlcyAoJXMpIVxuIiwKLSAgICAgICAgICAgICAgIGds c2xhbmdfc2hhZGVyX2dldF9pbmZvX2xvZyhnbHNsY19zaGFkZXIpLAotICAgICAgICAgICAgICAg Z2xzbGFuZ19zaGFkZXJfZ2V0X2luZm9fZGVidWdfbG9nKGdsc2xjX3NoYWRlcikpOwotICAgICAg ICBnbHNsYW5nX3NoYWRlcl9kZWxldGUoZ2xzbGNfc2hhZGVyKTsKLSAgICAgICAgcmV0dXJuIEFW RVJST1IoRUlOVkFMKTsKLSAgICB9Ci0KLSAgICBpZiAoIShnbHNsY19wcm9ncmFtID0gZ2xzbGFu Z19wcm9ncmFtX2NyZWF0ZSgpKSkgewotICAgICAgICBnbHNsYW5nX3NoYWRlcl9kZWxldGUoZ2xz bGNfc2hhZGVyKTsKLSAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKLSAgICB9Ci0KLSAg ICBnbHNsYW5nX3Byb2dyYW1fYWRkX3NoYWRlcihnbHNsY19wcm9ncmFtLCBnbHNsY19zaGFkZXIp OwotCi0gICAgaWYgKCFnbHNsYW5nX3Byb2dyYW1fbGluayhnbHNsY19wcm9ncmFtLCBHTFNMQU5H X01TR19TUFZfUlVMRVNfQklUIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEdMU0xBTkdfTVNHX1ZVTEtBTl9SVUxFU19CSVQpKSB7Ci0gICAgICAgIGZmX3Zr X3NoYWRlcl9wcmludChzLCBzaGQsIEFWX0xPR19XQVJOSU5HKTsKLSAgICAgICAgYXZfbG9nKHMs IEFWX0xPR19FUlJPUiwgIlVuYWJsZSB0byBsaW5rIHNoYWRlcjogJXMgKCVzKSFcbiIsCi0gICAg ICAgICAgICAgICBnbHNsYW5nX3Byb2dyYW1fZ2V0X2luZm9fbG9nKGdsc2xjX3Byb2dyYW0pLAot ICAgICAgICAgICAgICAgZ2xzbGFuZ19wcm9ncmFtX2dldF9pbmZvX2RlYnVnX2xvZyhnbHNsY19w cm9ncmFtKSk7Ci0gICAgICAgIGdsc2xhbmdfcHJvZ3JhbV9kZWxldGUoZ2xzbGNfcHJvZ3JhbSk7 Ci0gICAgICAgIGdsc2xhbmdfc2hhZGVyX2RlbGV0ZShnbHNsY19zaGFkZXIpOwotICAgICAgICBy ZXR1cm4gQVZFUlJPUihFSU5WQUwpOwotICAgIH0KLQotI2lmICgoR0xTTEFOR19WRVJTSU9OX01B Sk9SKSA+PSAxMikKLSAgICBnbHNsYW5nX3Byb2dyYW1fU1BJUlZfZ2VuZXJhdGVfd2l0aF9vcHRp b25zKGdsc2xjX3Byb2dyYW0sIGdsc2xjX2lucHV0LnN0YWdlLCAmZ2xzbGNfb3B0cyk7Ci0jZWxz ZQotICAgIGdsc2xhbmdfcHJvZ3JhbV9TUElSVl9nZW5lcmF0ZShnbHNsY19wcm9ncmFtLCBnbHNs Y19pbnB1dC5zdGFnZSk7Ci0jZW5kaWYKLQotICAgIG1lc3NhZ2VzID0gZ2xzbGFuZ19wcm9ncmFt X1NQSVJWX2dldF9tZXNzYWdlcyhnbHNsY19wcm9ncmFtKTsKLSAgICBpZiAobWVzc2FnZXMpIHsK LSAgICAgICAgZmZfdmtfc2hhZGVyX3ByaW50KHMsIHNoZCwgQVZfTE9HX1dBUk5JTkcpOwotICAg ICAgICBhdl9sb2cocywgQVZfTE9HX1dBUk5JTkcsICIlc1xuIiwgbWVzc2FnZXMpOwotICAgIH0g ZWxzZSB7Ci0gICAgICAgIGZmX3ZrX3NoYWRlcl9wcmludChzLCBzaGQsIEFWX0xPR19UUkFDRSk7 Ci0gICAgfQotCi0gICAgZ2xzbGFuZ19zaGFkZXJfZGVsZXRlKGdsc2xjX3NoYWRlcik7Ci0KLSAg ICAqc2l6ZSA9IGdsc2xhbmdfcHJvZ3JhbV9TUElSVl9nZXRfc2l6ZShnbHNsY19wcm9ncmFtKSAq IHNpemVvZih1bnNpZ25lZCBpbnQpOwotICAgICpkYXRhID0gKHZvaWQgKilnbHNsYW5nX3Byb2dy YW1fU1BJUlZfZ2V0X3B0cihnbHNsY19wcm9ncmFtKTsKLSAgICAqb3BhcXVlID0gZ2xzbGNfcHJv Z3JhbTsKLQotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBnbHNsY19zaGFkZXJfZnJl ZShGRlZrU1BJUlZDb21waWxlciAqY3R4LCB2b2lkICoqb3BhcXVlKQotewotICAgIGlmICghb3Bh cXVlIHx8ICEqb3BhcXVlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdl9hc3NlcnQwKGdsc2xj X3JlZmNvdW50KTsKLSAgICBnbHNsYW5nX3Byb2dyYW1fZGVsZXRlKCpvcGFxdWUpOwotICAgICpv cGFxdWUgPSBOVUxMOwotfQotCi1zdGF0aWMgdm9pZCBnbHNsY191bmluaXQoRkZWa1NQSVJWQ29t cGlsZXIgKipjdHgpCi17Ci0gICAgaWYgKCFjdHggfHwgISpjdHgpCi0gICAgICAgIHJldHVybjsK LQotICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmZ2xzbGNfbXV0ZXgpOwotICAgIGlmIChnbHNsY19y ZWZjb3VudCAmJiAoLS1nbHNsY19yZWZjb3VudCA9PSAwKSkKLSAgICAgICAgZ2xzbGFuZ19maW5h bGl6ZV9wcm9jZXNzKCk7Ci0gICAgcHRocmVhZF9tdXRleF91bmxvY2soJmdsc2xjX211dGV4KTsK LQotICAgIGF2X2ZyZWVwKGN0eCk7Ci19Ci0KLUZGVmtTUElSVkNvbXBpbGVyICpmZl92a19nbHNs YW5nX2luaXQodm9pZCkKLXsKLSAgICBGRlZrU1BJUlZDb21waWxlciAqcmV0ID0gYXZfbWFsbG9j eihzaXplb2YoKnJldCkpOwotICAgIGlmICghcmV0KQotICAgICAgICByZXR1cm4gTlVMTDsKLQot ICAgIHJldC0+Y29tcGlsZV9zaGFkZXIgPSBnbHNsY19zaGFkZXJfY29tcGlsZTsKLSAgICByZXQt PmZyZWVfc2hhZGVyICAgID0gZ2xzbGNfc2hhZGVyX2ZyZWU7Ci0gICAgcmV0LT51bmluaXQgICAg ICAgICA9IGdsc2xjX3VuaW5pdDsKLQotICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmZ2xzbGNfbXV0 ZXgpOwotICAgIGlmICghZ2xzbGNfcmVmY291bnQrKykgewotICAgICAgICBpZiAoIWdsc2xhbmdf aW5pdGlhbGl6ZV9wcm9jZXNzKCkpIHsKLSAgICAgICAgICAgIGF2X2ZyZWVwKCZyZXQpOwotICAg ICAgICAgICAgZ2xzbGNfcmVmY291bnQtLTsKLSAgICAgICAgfQotICAgIH0KLSAgICBwdGhyZWFk X211dGV4X3VubG9jaygmZ2xzbGNfbXV0ZXgpOwotCi0gICAgcmV0dXJuIHJldDsKLX0KLS0gCjIu NDkuMQoKCkZyb20gMTkxMjUzZjNjZmU5ZTViYzdiYjM1YjZhN2VmZjBjZTFhNzUzZDgxZCBNb24g U2VwIDE3IDAwOjAwOjAwIDIwMDEKRnJvbTogSmFtYWlrYTEgPGx1a2FzemN6MThAd3AucGw+CkRh dGU6IFdlZCwgMyBTZXAgMjAyNSAxMzoxOTo0MyArMDAwMApTdWJqZWN0OiBbUEFUQ0ggMDQ4LzEx OF0gQ2hhbmdpbmcgdnVsa2FuIGZpbGUgZGlyZWN0b3J5CgotLS0KIGxpYmF2dXRpbC92dWxrYW4v dnVsa2FuX2dsc2xhbmcuYyB8IDMwOCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDEg ZmlsZSBjaGFuZ2VkLCAzMDggaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2 dXRpbC92dWxrYW4vdnVsa2FuX2dsc2xhbmcuYwoKZGlmZiAtLWdpdCBhL2xpYmF2dXRpbC92dWxr YW4vdnVsa2FuX2dsc2xhbmcuYyBiL2xpYmF2dXRpbC92dWxrYW4vdnVsa2FuX2dsc2xhbmcuYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi40Y2Y1NGRlODU0Ci0tLSAvZGV2 L251bGwKKysrIGIvbGliYXZ1dGlsL3Z1bGthbi92dWxrYW5fZ2xzbGFuZy5jCkBAIC0wLDAgKzEs MzA4IEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgorICoKKyAqIEZGbXBl ZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247 IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRo ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq IExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs IFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0 aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0 LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorICovCisKKyNpbmNsdWRl IDxwdGhyZWFkLmg+CisKKyNpbmNsdWRlIDxnbHNsYW5nL2J1aWxkX2luZm8uaD4KKyNpbmNsdWRl IDxnbHNsYW5nL0luY2x1ZGUvZ2xzbGFuZ19jX2ludGVyZmFjZS5oPgorCisjaW5jbHVkZSAidnVs a2FuX3NwaXJ2LmgiCisjaW5jbHVkZSAibGliYXZ1dGlsL21lbS5oIgorI2luY2x1ZGUgImxpYmF2 dXRpbC9hdmFzc2VydC5oIgorCitzdGF0aWMgcHRocmVhZF9tdXRleF90IGdsc2xjX211dGV4ID0g UFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUjsKK3N0YXRpYyBpbnQgZ2xzbGNfcmVmY291bnQgPSAw OworCitzdGF0aWMgY29uc3QgZ2xzbGFuZ19yZXNvdXJjZV90IGdsc2xjX3Jlc291cmNlX2xpbWl0 cyA9IHsKKyAgICAubWF4X2xpZ2h0cyA9IDMyLAorICAgIC5tYXhfY2xpcF9wbGFuZXMgPSA2LAor ICAgIC5tYXhfdGV4dHVyZV91bml0cyA9IDMyLAorICAgIC5tYXhfdGV4dHVyZV9jb29yZHMgPSAz MiwKKyAgICAubWF4X3ZlcnRleF9hdHRyaWJzID0gNjQsCisgICAgLm1heF92ZXJ0ZXhfdW5pZm9y bV9jb21wb25lbnRzID0gNDA5NiwKKyAgICAubWF4X3ZhcnlpbmdfZmxvYXRzID0gNjQsCisgICAg Lm1heF92ZXJ0ZXhfdGV4dHVyZV9pbWFnZV91bml0cyA9IDMyLAorICAgIC5tYXhfY29tYmluZWRf dGV4dHVyZV9pbWFnZV91bml0cyA9IDgwLAorICAgIC5tYXhfdGV4dHVyZV9pbWFnZV91bml0cyA9 IDMyLAorICAgIC5tYXhfZnJhZ21lbnRfdW5pZm9ybV9jb21wb25lbnRzID0gNDA5NiwKKyAgICAu bWF4X2RyYXdfYnVmZmVycyA9IDMyLAorICAgIC5tYXhfdmVydGV4X3VuaWZvcm1fdmVjdG9ycyA9 IDEyOCwKKyAgICAubWF4X3ZhcnlpbmdfdmVjdG9ycyA9IDgsCisgICAgLm1heF9mcmFnbWVudF91 bmlmb3JtX3ZlY3RvcnMgPSAxNiwKKyAgICAubWF4X3ZlcnRleF9vdXRwdXRfdmVjdG9ycyA9IDE2 LAorICAgIC5tYXhfZnJhZ21lbnRfaW5wdXRfdmVjdG9ycyA9IDE1LAorICAgIC5taW5fcHJvZ3Jh bV90ZXhlbF9vZmZzZXQgPSAtOCwKKyAgICAubWF4X3Byb2dyYW1fdGV4ZWxfb2Zmc2V0ID0gNywK KyAgICAubWF4X2NsaXBfZGlzdGFuY2VzID0gOCwKKyAgICAubWF4X2NvbXB1dGVfd29ya19ncm91 cF9jb3VudF94ID0gNjU1MzUsCisgICAgLm1heF9jb21wdXRlX3dvcmtfZ3JvdXBfY291bnRfeSA9 IDY1NTM1LAorICAgIC5tYXhfY29tcHV0ZV93b3JrX2dyb3VwX2NvdW50X3ogPSA2NTUzNSwKKyAg ICAubWF4X2NvbXB1dGVfd29ya19ncm91cF9zaXplX3ggPSAxMDI0LAorICAgIC5tYXhfY29tcHV0 ZV93b3JrX2dyb3VwX3NpemVfeSA9IDEwMjQsCisgICAgLm1heF9jb21wdXRlX3dvcmtfZ3JvdXBf c2l6ZV96ID0gNjQsCisgICAgLm1heF9jb21wdXRlX3VuaWZvcm1fY29tcG9uZW50cyA9IDEwMjQs CisgICAgLm1heF9jb21wdXRlX3RleHR1cmVfaW1hZ2VfdW5pdHMgPSAxNiwKKyAgICAubWF4X2Nv bXB1dGVfaW1hZ2VfdW5pZm9ybXMgPSA4LAorICAgIC5tYXhfY29tcHV0ZV9hdG9taWNfY291bnRl cnMgPSA4LAorICAgIC5tYXhfY29tcHV0ZV9hdG9taWNfY291bnRlcl9idWZmZXJzID0gMSwKKyAg ICAubWF4X3ZhcnlpbmdfY29tcG9uZW50cyA9IDYwLAorICAgIC5tYXhfdmVydGV4X291dHB1dF9j b21wb25lbnRzID0gNjQsCisgICAgLm1heF9nZW9tZXRyeV9pbnB1dF9jb21wb25lbnRzID0gNjQs CisgICAgLm1heF9nZW9tZXRyeV9vdXRwdXRfY29tcG9uZW50cyA9IDEyOCwKKyAgICAubWF4X2Zy YWdtZW50X2lucHV0X2NvbXBvbmVudHMgPSAxMjgsCisgICAgLm1heF9pbWFnZV91bml0cyA9IDgs CisgICAgLm1heF9jb21iaW5lZF9pbWFnZV91bml0c19hbmRfZnJhZ21lbnRfb3V0cHV0cyA9IDgs CisgICAgLm1heF9jb21iaW5lZF9zaGFkZXJfb3V0cHV0X3Jlc291cmNlcyA9IDgsCisgICAgLm1h eF9pbWFnZV9zYW1wbGVzID0gMCwKKyAgICAubWF4X3ZlcnRleF9pbWFnZV91bmlmb3JtcyA9IDAs CisgICAgLm1heF90ZXNzX2NvbnRyb2xfaW1hZ2VfdW5pZm9ybXMgPSAwLAorICAgIC5tYXhfdGVz c19ldmFsdWF0aW9uX2ltYWdlX3VuaWZvcm1zID0gMCwKKyAgICAubWF4X2dlb21ldHJ5X2ltYWdl X3VuaWZvcm1zID0gMCwKKyAgICAubWF4X2ZyYWdtZW50X2ltYWdlX3VuaWZvcm1zID0gOCwKKyAg ICAubWF4X2NvbWJpbmVkX2ltYWdlX3VuaWZvcm1zID0gOCwKKyAgICAubWF4X2dlb21ldHJ5X3Rl eHR1cmVfaW1hZ2VfdW5pdHMgPSAxNiwKKyAgICAubWF4X2dlb21ldHJ5X291dHB1dF92ZXJ0aWNl cyA9IDI1NiwKKyAgICAubWF4X2dlb21ldHJ5X3RvdGFsX291dHB1dF9jb21wb25lbnRzID0gMTAy NCwKKyAgICAubWF4X2dlb21ldHJ5X3VuaWZvcm1fY29tcG9uZW50cyA9IDEwMjQsCisgICAgLm1h eF9nZW9tZXRyeV92YXJ5aW5nX2NvbXBvbmVudHMgPSA2NCwKKyAgICAubWF4X3Rlc3NfY29udHJv bF9pbnB1dF9jb21wb25lbnRzID0gMTI4LAorICAgIC5tYXhfdGVzc19jb250cm9sX291dHB1dF9j b21wb25lbnRzID0gMTI4LAorICAgIC5tYXhfdGVzc19jb250cm9sX3RleHR1cmVfaW1hZ2VfdW5p dHMgPSAxNiwKKyAgICAubWF4X3Rlc3NfY29udHJvbF91bmlmb3JtX2NvbXBvbmVudHMgPSAxMDI0 LAorICAgIC5tYXhfdGVzc19jb250cm9sX3RvdGFsX291dHB1dF9jb21wb25lbnRzID0gNDA5NiwK KyAgICAubWF4X3Rlc3NfZXZhbHVhdGlvbl9pbnB1dF9jb21wb25lbnRzID0gMTI4LAorICAgIC5t YXhfdGVzc19ldmFsdWF0aW9uX291dHB1dF9jb21wb25lbnRzID0gMTI4LAorICAgIC5tYXhfdGVz c19ldmFsdWF0aW9uX3RleHR1cmVfaW1hZ2VfdW5pdHMgPSAxNiwKKyAgICAubWF4X3Rlc3NfZXZh bHVhdGlvbl91bmlmb3JtX2NvbXBvbmVudHMgPSAxMDI0LAorICAgIC5tYXhfdGVzc19wYXRjaF9j b21wb25lbnRzID0gMTIwLAorICAgIC5tYXhfcGF0Y2hfdmVydGljZXMgPSAzMiwKKyAgICAubWF4 X3Rlc3NfZ2VuX2xldmVsID0gNjQsCisgICAgLm1heF92aWV3cG9ydHMgPSAxNiwKKyAgICAubWF4 X3ZlcnRleF9hdG9taWNfY291bnRlcnMgPSAwLAorICAgIC5tYXhfdGVzc19jb250cm9sX2F0b21p Y19jb3VudGVycyA9IDAsCisgICAgLm1heF90ZXNzX2V2YWx1YXRpb25fYXRvbWljX2NvdW50ZXJz ID0gMCwKKyAgICAubWF4X2dlb21ldHJ5X2F0b21pY19jb3VudGVycyA9IDAsCisgICAgLm1heF9m cmFnbWVudF9hdG9taWNfY291bnRlcnMgPSA4LAorICAgIC5tYXhfY29tYmluZWRfYXRvbWljX2Nv dW50ZXJzID0gOCwKKyAgICAubWF4X2F0b21pY19jb3VudGVyX2JpbmRpbmdzID0gMSwKKyAgICAu bWF4X3ZlcnRleF9hdG9taWNfY291bnRlcl9idWZmZXJzID0gMCwKKyAgICAubWF4X3Rlc3NfY29u dHJvbF9hdG9taWNfY291bnRlcl9idWZmZXJzID0gMCwKKyAgICAubWF4X3Rlc3NfZXZhbHVhdGlv bl9hdG9taWNfY291bnRlcl9idWZmZXJzID0gMCwKKyAgICAubWF4X2dlb21ldHJ5X2F0b21pY19j b3VudGVyX2J1ZmZlcnMgPSAwLAorICAgIC5tYXhfZnJhZ21lbnRfYXRvbWljX2NvdW50ZXJfYnVm ZmVycyA9IDEsCisgICAgLm1heF9jb21iaW5lZF9hdG9taWNfY291bnRlcl9idWZmZXJzID0gMSwK KyAgICAubWF4X2F0b21pY19jb3VudGVyX2J1ZmZlcl9zaXplID0gMTYzODQsCisgICAgLm1heF90 cmFuc2Zvcm1fZmVlZGJhY2tfYnVmZmVycyA9IDQsCisgICAgLm1heF90cmFuc2Zvcm1fZmVlZGJh Y2tfaW50ZXJsZWF2ZWRfY29tcG9uZW50cyA9IDY0LAorICAgIC5tYXhfY3VsbF9kaXN0YW5jZXMg PSA4LAorICAgIC5tYXhfY29tYmluZWRfY2xpcF9hbmRfY3VsbF9kaXN0YW5jZXMgPSA4LAorICAg IC5tYXhfc2FtcGxlcyA9IDQsCisgICAgLm1heF9tZXNoX291dHB1dF92ZXJ0aWNlc19udiA9IDI1 NiwKKyAgICAubWF4X21lc2hfb3V0cHV0X3ByaW1pdGl2ZXNfbnYgPSA1MTIsCisgICAgLm1heF9t ZXNoX3dvcmtfZ3JvdXBfc2l6ZV94X252ID0gMzIsCisgICAgLm1heF9tZXNoX3dvcmtfZ3JvdXBf c2l6ZV95X252ID0gMSwKKyAgICAubWF4X21lc2hfd29ya19ncm91cF9zaXplX3pfbnYgPSAxLAor ICAgIC5tYXhfdGFza193b3JrX2dyb3VwX3NpemVfeF9udiA9IDMyLAorICAgIC5tYXhfdGFza193 b3JrX2dyb3VwX3NpemVfeV9udiA9IDEsCisgICAgLm1heF90YXNrX3dvcmtfZ3JvdXBfc2l6ZV96 X252ID0gMSwKKyAgICAubWF4X21lc2hfdmlld19jb3VudF9udiA9IDQsCisgICAgLm1heER1YWxT b3VyY2VEcmF3QnVmZmVyc0VYVCA9IDEsCisKKyAgICAubGltaXRzID0geworICAgICAgICAubm9u X2luZHVjdGl2ZV9mb3JfbG9vcHMgPSAxLAorICAgICAgICAud2hpbGVfbG9vcHMgPSAxLAorICAg ICAgICAuZG9fd2hpbGVfbG9vcHMgPSAxLAorICAgICAgICAuZ2VuZXJhbF91bmlmb3JtX2luZGV4 aW5nID0gMSwKKyAgICAgICAgLmdlbmVyYWxfYXR0cmlidXRlX21hdHJpeF92ZWN0b3JfaW5kZXhp bmcgPSAxLAorICAgICAgICAuZ2VuZXJhbF92YXJ5aW5nX2luZGV4aW5nID0gMSwKKyAgICAgICAg LmdlbmVyYWxfc2FtcGxlcl9pbmRleGluZyA9IDEsCisgICAgICAgIC5nZW5lcmFsX3ZhcmlhYmxl X2luZGV4aW5nID0gMSwKKyAgICAgICAgLmdlbmVyYWxfY29uc3RhbnRfbWF0cml4X3ZlY3Rvcl9p bmRleGluZyA9IDEsCisgICAgfQorfTsKKworc3RhdGljIGludCBnbHNsY19zaGFkZXJfY29tcGls ZShGRlZ1bGthbkNvbnRleHQgKnMsIEZGVmtTUElSVkNvbXBpbGVyICpjdHgsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEZGVnVsa2FuU2hhZGVyICpzaGQsIHVpbnQ4X3QgKipkYXRh LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKnNpemUsIGNvbnN0IGNo YXIgKmVudHJ5cG9pbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKipv cGFxdWUpCit7CisgICAgY29uc3QgY2hhciAqbWVzc2FnZXM7CisgICAgZ2xzbGFuZ19zaGFkZXJf dCAqZ2xzbGNfc2hhZGVyOworICAgIGdsc2xhbmdfcHJvZ3JhbV90ICpnbHNsY19wcm9ncmFtOwor CisgICAgc3RhdGljIGNvbnN0IGdsc2xhbmdfc3RhZ2VfdCBnbHNsY19zdGFnZVtdID0geworICAg ICAgICBbVktfU0hBREVSX1NUQUdFX1ZFUlRFWF9CSVRdICAgPSBHTFNMQU5HX1NUQUdFX1ZFUlRF WCwKKyAgICAgICAgW1ZLX1NIQURFUl9TVEFHRV9GUkFHTUVOVF9CSVRdID0gR0xTTEFOR19TVEFH RV9GUkFHTUVOVCwKKyAgICAgICAgW1ZLX1NIQURFUl9TVEFHRV9DT01QVVRFX0JJVF0gID0gR0xT TEFOR19TVEFHRV9DT01QVVRFLAorI2lmICgoR0xTTEFOR19WRVJTSU9OX01BSk9SKSA+IDEyKQor ICAgICAgICBbVktfU0hBREVSX1NUQUdFX1RBU0tfQklUX0VYVF0gPSBHTFNMQU5HX1NUQUdFX1RB U0ssCisgICAgICAgIFtWS19TSEFERVJfU1RBR0VfTUVTSF9CSVRfRVhUXSA9IEdMU0xBTkdfU1RB R0VfTUVTSCwKKyAgICAgICAgW1ZLX1NIQURFUl9TVEFHRV9SQVlHRU5fQklUX0tIUl0gPSBHTFNM QU5HX1NUQUdFX1JBWUdFTiwKKyAgICAgICAgW1ZLX1NIQURFUl9TVEFHRV9JTlRFUlNFQ1RJT05f QklUX0tIUl0gPSBHTFNMQU5HX1NUQUdFX0lOVEVSU0VDVCwKKyAgICAgICAgW1ZLX1NIQURFUl9T VEFHRV9BTllfSElUX0JJVF9LSFJdID0gR0xTTEFOR19TVEFHRV9BTllISVQsCisgICAgICAgIFtW S19TSEFERVJfU1RBR0VfQ0xPU0VTVF9ISVRfQklUX0tIUl0gPSBHTFNMQU5HX1NUQUdFX0NMT1NF U1RISVQsCisgICAgICAgIFtWS19TSEFERVJfU1RBR0VfTUlTU19CSVRfS0hSXSA9IEdMU0xBTkdf U1RBR0VfTUlTUywKKyAgICAgICAgW1ZLX1NIQURFUl9TVEFHRV9DQUxMQUJMRV9CSVRfS0hSXSA9 IEdMU0xBTkdfU1RBR0VfQ0FMTEFCTEUsCisjZW5kaWYKKyAgICB9OworCisgICAgY29uc3QgZ2xz bGFuZ19pbnB1dF90IGdsc2xjX2lucHV0ID0geworICAgICAgICAubGFuZ3VhZ2UgICAgICAgICAg ICAgICAgICAgICAgICAgID0gR0xTTEFOR19TT1VSQ0VfR0xTTCwKKyAgICAgICAgLnN0YWdlICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA9IGdsc2xjX3N0YWdlW3NoZC0+c3RhZ2VdLAorICAg ICAgICAuY2xpZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gR0xTTEFOR19DTElFTlRf VlVMS0FOLAorI2lmICgoR0xTTEFOR19WRVJTSU9OX01BSk9SKSA+PSAxMikKKyAgICAgICAgLmNs aWVudF92ZXJzaW9uICAgICAgICAgICAgICAgICAgICA9IEdMU0xBTkdfVEFSR0VUX1ZVTEtBTl8x XzMsCisgICAgICAgIC50YXJnZXRfbGFuZ3VhZ2VfdmVyc2lvbiAgICAgICAgICAgPSBHTFNMQU5H X1RBUkdFVF9TUFZfMV82LAorI2Vsc2UKKyAgICAgICAgLmNsaWVudF92ZXJzaW9uICAgICAgICAg ICAgICAgICAgICA9IEdMU0xBTkdfVEFSR0VUX1ZVTEtBTl8xXzIsCisgICAgICAgIC50YXJnZXRf bGFuZ3VhZ2VfdmVyc2lvbiAgICAgICAgICAgPSBHTFNMQU5HX1RBUkdFVF9TUFZfMV81LAorI2Vu ZGlmCisgICAgICAgIC50YXJnZXRfbGFuZ3VhZ2UgICAgICAgICAgICAgICAgICAgPSBHTFNMQU5H X1RBUkdFVF9TUFYsCisgICAgICAgIC5jb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg PSBzaGQtPnNyYy5zdHIsCisgICAgICAgIC5kZWZhdWx0X3ZlcnNpb24gICAgICAgICAgICAgICAg ICAgPSA0NjAsCisgICAgICAgIC5kZWZhdWx0X3Byb2ZpbGUgICAgICAgICAgICAgICAgICAgPSBH TFNMQU5HX05PX1BST0ZJTEUsCisgICAgICAgIC5mb3JjZV9kZWZhdWx0X3ZlcnNpb25fYW5kX3By b2ZpbGUgPSBmYWxzZSwKKyAgICAgICAgLmZvcndhcmRfY29tcGF0aWJsZSAgICAgICAgICAgICAg ICA9IGZhbHNlLAorICAgICAgICAubWVzc2FnZXMgICAgICAgICAgICAgICAgICAgICAgICAgID0g R0xTTEFOR19NU0dfREVGQVVMVF9CSVQsCisgICAgICAgIC5yZXNvdXJjZSAgICAgICAgICAgICAg ICAgICAgICAgICAgPSAmZ2xzbGNfcmVzb3VyY2VfbGltaXRzLAorICAgIH07CisKKyNpZiAoKEdM U0xBTkdfVkVSU0lPTl9NQUpPUikgPj0gMTIpCisgICAgZ2xzbGFuZ19zcHZfb3B0aW9uc190IGds c2xjX29wdHMgPSB7CisgICAgICAgIC5nZW5lcmF0ZV9kZWJ1Z19pbmZvID0gISEocy0+ZXh0ZW5z aW9ucyAmIChGRl9WS19FWFRfREVCVUdfVVRJTFMgfCBGRl9WS19FWFRfUkVMQVhFRF9FWFRFTkRF RF9JTlNUUikpLAorICAgICAgICAuZW1pdF9ub25zZW1hbnRpY19zaGFkZXJfZGVidWdfaW5mbyA9 ICEhKHMtPmV4dGVuc2lvbnMgJiBGRl9WS19FWFRfUkVMQVhFRF9FWFRFTkRFRF9JTlNUUiksCisg ICAgICAgIC5lbWl0X25vbnNlbWFudGljX3NoYWRlcl9kZWJ1Z19zb3VyY2UgPSAhIShzLT5leHRl bnNpb25zICYgRkZfVktfRVhUX1JFTEFYRURfRVhURU5ERURfSU5TVFIpLAorICAgICAgICAuZGlz YWJsZV9vcHRpbWl6ZXIgPSAhIShzLT5leHRlbnNpb25zICYgRkZfVktfRVhUX0RFQlVHX1VUSUxT KSwKKyAgICAgICAgLnN0cmlwX2RlYnVnX2luZm8gPSAhKHMtPmV4dGVuc2lvbnMgJiAoRkZfVktf RVhUX0RFQlVHX1VUSUxTIHwgRkZfVktfRVhUX1JFTEFYRURfRVhURU5ERURfSU5TVFIpKSwKKyAg ICAgICAgLm9wdGltaXplX3NpemUgPSAwLAorICAgICAgICAuZGlzYXNzZW1ibGUgPSAwLAorICAg ICAgICAudmFsaWRhdGUgPSAxLAorICAgICAgICAvKiAuY29tcGlsZV9vbmx5ID0gMCwgKi8KKyAg ICB9OworI2VuZGlmCisKKyAgICBhdl9hc3NlcnQwKGdsc2xjX3JlZmNvdW50KTsKKworICAgICpv cGFxdWUgPSBOVUxMOworCisgICAgaWYgKCEoZ2xzbGNfc2hhZGVyID0gZ2xzbGFuZ19zaGFkZXJf Y3JlYXRlKCZnbHNsY19pbnB1dCkpKQorICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOwor CisgICAgaWYgKCFnbHNsYW5nX3NoYWRlcl9wcmVwcm9jZXNzKGdsc2xjX3NoYWRlciwgJmdsc2xj X2lucHV0KSkgeworICAgICAgICBmZl92a19zaGFkZXJfcHJpbnQocywgc2hkLCBBVl9MT0dfV0FS TklORyk7CisgICAgICAgIGF2X2xvZyhzLCBBVl9MT0dfRVJST1IsICJVbmFibGUgdG8gcHJlcHJv Y2VzcyBzaGFkZXI6ICVzICglcykhXG4iLAorICAgICAgICAgICAgICAgZ2xzbGFuZ19zaGFkZXJf Z2V0X2luZm9fbG9nKGdsc2xjX3NoYWRlciksCisgICAgICAgICAgICAgICBnbHNsYW5nX3NoYWRl cl9nZXRfaW5mb19kZWJ1Z19sb2coZ2xzbGNfc2hhZGVyKSk7CisgICAgICAgIGdsc2xhbmdfc2hh ZGVyX2RlbGV0ZShnbHNsY19zaGFkZXIpOworICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwp OworICAgIH0KKworICAgIGlmICghZ2xzbGFuZ19zaGFkZXJfcGFyc2UoZ2xzbGNfc2hhZGVyLCAm Z2xzbGNfaW5wdXQpKSB7CisgICAgICAgIGZmX3ZrX3NoYWRlcl9wcmludChzLCBzaGQsIEFWX0xP R19XQVJOSU5HKTsKKyAgICAgICAgYXZfbG9nKHMsIEFWX0xPR19FUlJPUiwgIlVuYWJsZSB0byBw YXJzZSBzaGFkZXI6ICVzICglcykhXG4iLAorICAgICAgICAgICAgICAgZ2xzbGFuZ19zaGFkZXJf Z2V0X2luZm9fbG9nKGdsc2xjX3NoYWRlciksCisgICAgICAgICAgICAgICBnbHNsYW5nX3NoYWRl cl9nZXRfaW5mb19kZWJ1Z19sb2coZ2xzbGNfc2hhZGVyKSk7CisgICAgICAgIGdsc2xhbmdfc2hh ZGVyX2RlbGV0ZShnbHNsY19zaGFkZXIpOworICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwp OworICAgIH0KKworICAgIGlmICghKGdsc2xjX3Byb2dyYW0gPSBnbHNsYW5nX3Byb2dyYW1fY3Jl YXRlKCkpKSB7CisgICAgICAgIGdsc2xhbmdfc2hhZGVyX2RlbGV0ZShnbHNsY19zaGFkZXIpOwor ICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOworICAgIH0KKworICAgIGdsc2xhbmdfcHJv Z3JhbV9hZGRfc2hhZGVyKGdsc2xjX3Byb2dyYW0sIGdsc2xjX3NoYWRlcik7CisKKyAgICBpZiAo IWdsc2xhbmdfcHJvZ3JhbV9saW5rKGdsc2xjX3Byb2dyYW0sIEdMU0xBTkdfTVNHX1NQVl9SVUxF U19CSVQgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xT TEFOR19NU0dfVlVMS0FOX1JVTEVTX0JJVCkpIHsKKyAgICAgICAgZmZfdmtfc2hhZGVyX3ByaW50 KHMsIHNoZCwgQVZfTE9HX1dBUk5JTkcpOworICAgICAgICBhdl9sb2cocywgQVZfTE9HX0VSUk9S LCAiVW5hYmxlIHRvIGxpbmsgc2hhZGVyOiAlcyAoJXMpIVxuIiwKKyAgICAgICAgICAgICAgIGds c2xhbmdfcHJvZ3JhbV9nZXRfaW5mb19sb2coZ2xzbGNfcHJvZ3JhbSksCisgICAgICAgICAgICAg ICBnbHNsYW5nX3Byb2dyYW1fZ2V0X2luZm9fZGVidWdfbG9nKGdsc2xjX3Byb2dyYW0pKTsKKyAg ICAgICAgZ2xzbGFuZ19wcm9ncmFtX2RlbGV0ZShnbHNsY19wcm9ncmFtKTsKKyAgICAgICAgZ2xz bGFuZ19zaGFkZXJfZGVsZXRlKGdsc2xjX3NoYWRlcik7CisgICAgICAgIHJldHVybiBBVkVSUk9S KEVJTlZBTCk7CisgICAgfQorCisjaWYgKChHTFNMQU5HX1ZFUlNJT05fTUFKT1IpID49IDEyKQor ICAgIGdsc2xhbmdfcHJvZ3JhbV9TUElSVl9nZW5lcmF0ZV93aXRoX29wdGlvbnMoZ2xzbGNfcHJv Z3JhbSwgZ2xzbGNfaW5wdXQuc3RhZ2UsICZnbHNsY19vcHRzKTsKKyNlbHNlCisgICAgZ2xzbGFu Z19wcm9ncmFtX1NQSVJWX2dlbmVyYXRlKGdsc2xjX3Byb2dyYW0sIGdsc2xjX2lucHV0LnN0YWdl KTsKKyNlbmRpZgorCisgICAgbWVzc2FnZXMgPSBnbHNsYW5nX3Byb2dyYW1fU1BJUlZfZ2V0X21l c3NhZ2VzKGdsc2xjX3Byb2dyYW0pOworICAgIGlmIChtZXNzYWdlcykgeworICAgICAgICBmZl92 a19zaGFkZXJfcHJpbnQocywgc2hkLCBBVl9MT0dfV0FSTklORyk7CisgICAgICAgIGF2X2xvZyhz LCBBVl9MT0dfV0FSTklORywgIiVzXG4iLCBtZXNzYWdlcyk7CisgICAgfSBlbHNlIHsKKyAgICAg ICAgZmZfdmtfc2hhZGVyX3ByaW50KHMsIHNoZCwgQVZfTE9HX1RSQUNFKTsKKyAgICB9CisKKyAg ICBnbHNsYW5nX3NoYWRlcl9kZWxldGUoZ2xzbGNfc2hhZGVyKTsKKworICAgICpzaXplID0gZ2xz bGFuZ19wcm9ncmFtX1NQSVJWX2dldF9zaXplKGdsc2xjX3Byb2dyYW0pICogc2l6ZW9mKHVuc2ln bmVkIGludCk7CisgICAgKmRhdGEgPSAodm9pZCAqKWdsc2xhbmdfcHJvZ3JhbV9TUElSVl9nZXRf cHRyKGdsc2xjX3Byb2dyYW0pOworICAgICpvcGFxdWUgPSBnbHNsY19wcm9ncmFtOworCisgICAg cmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGdsc2xjX3NoYWRlcl9mcmVlKEZGVmtTUElSVkNv bXBpbGVyICpjdHgsIHZvaWQgKipvcGFxdWUpCit7CisgICAgaWYgKCFvcGFxdWUgfHwgISpvcGFx dWUpCisgICAgICAgIHJldHVybjsKKworICAgIGF2X2Fzc2VydDAoZ2xzbGNfcmVmY291bnQpOwor ICAgIGdsc2xhbmdfcHJvZ3JhbV9kZWxldGUoKm9wYXF1ZSk7CisgICAgKm9wYXF1ZSA9IE5VTEw7 Cit9CisKK3N0YXRpYyB2b2lkIGdsc2xjX3VuaW5pdChGRlZrU1BJUlZDb21waWxlciAqKmN0eCkK K3sKKyAgICBpZiAoIWN0eCB8fCAhKmN0eCkKKyAgICAgICAgcmV0dXJuOworCisgICAgcHRocmVh ZF9tdXRleF9sb2NrKCZnbHNsY19tdXRleCk7CisgICAgaWYgKGdsc2xjX3JlZmNvdW50ICYmICgt LWdsc2xjX3JlZmNvdW50ID09IDApKQorICAgICAgICBnbHNsYW5nX2ZpbmFsaXplX3Byb2Nlc3Mo KTsKKyAgICBwdGhyZWFkX211dGV4X3VubG9jaygmZ2xzbGNfbXV0ZXgpOworCisgICAgYXZfZnJl ZXAoY3R4KTsKK30KKworRkZWa1NQSVJWQ29tcGlsZXIgKmZmX3ZrX2dsc2xhbmdfaW5pdCh2b2lk KQoreworICAgIEZGVmtTUElSVkNvbXBpbGVyICpyZXQgPSBhdl9tYWxsb2N6KHNpemVvZigqcmV0 KSk7CisgICAgaWYgKCFyZXQpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgcmV0LT5jb21w aWxlX3NoYWRlciA9IGdsc2xjX3NoYWRlcl9jb21waWxlOworICAgIHJldC0+ZnJlZV9zaGFkZXIg ICAgPSBnbHNsY19zaGFkZXJfZnJlZTsKKyAgICByZXQtPnVuaW5pdCAgICAgICAgID0gZ2xzbGNf dW5pbml0OworCisgICAgcHRocmVhZF9tdXRleF9sb2NrKCZnbHNsY19tdXRleCk7CisgICAgaWYg KCFnbHNsY19yZWZjb3VudCsrKSB7CisgICAgICAgIGlmICghZ2xzbGFuZ19pbml0aWFsaXplX3By b2Nlc3MoKSkgeworICAgICAgICAgICAgYXZfZnJlZXAoJnJldCk7CisgICAgICAgICAgICBnbHNs Y19yZWZjb3VudC0tOworICAgICAgICB9CisgICAgfQorICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2Nr KCZnbHNsY19tdXRleCk7CisKKyAgICByZXR1cm4gcmV0OworfQotLSAKMi40OS4xCgoKRnJvbSAy NjYxOTc0OGY5NTZhNDMxMzE4Mzg5OTk0MjM3NzJhMzJjZTI5MGE2IE1vbiBTZXAgMTcgMDA6MDA6 MDAgMjAwMQpGcm9tOiBKYW1haWthMSA8bHVrYXN6Y3oxOEB3cC5wbD4KRGF0ZTogV2VkLCAzIFNl cCAyMDI1IDEzOjIwOjA5ICswMDAwClN1YmplY3Q6IFtQQVRDSCAwNDkvMTE4XSBDaGFuZ2luZyB2 dWxrYW4gZmlsZSBkaXJlY3RvcnkKCi0tLQogbGliYXZ1dGlsL3Z1bGthbl9mdW5jdGlvbnMuaCB8 IDI4MyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQs IDI4MyBkZWxldGlvbnMoLSkKIGRlbGV0ZSBtb2RlIDEwMDY0NCBsaWJhdnV0aWwvdnVsa2FuX2Z1 bmN0aW9ucy5oCgpkaWZmIC0tZ2l0IGEvbGliYXZ1dGlsL3Z1bGthbl9mdW5jdGlvbnMuaCBiL2xp YmF2dXRpbC92dWxrYW5fZnVuY3Rpb25zLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDRkMjBiN2Q4MDYuLjAwMDAwMDAwMDAKLS0tIGEvbGliYXZ1dGlsL3Z1bGthbl9mdW5jdGlvbnMu aAorKysgL2Rldi9udWxsCkBAIC0xLDI4MyArMCwwIEBACi0vKgotICogVGhpcyBmaWxlIGlzIHBh cnQgb2YgRkZtcGVnLgotICoKLSAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyLjEgb2YgdGhl IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICog RkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws Ci0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3 YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w eSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRo IEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlv biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjEx MC0xMzAxIFVTQQotICovCi0KLSNpZm5kZWYgQVZVVElMX1ZVTEtBTl9GVU5DVElPTlNfSAotI2Rl ZmluZSBBVlVUSUxfVlVMS0FOX0ZVTkNUSU9OU19ICi0KLSNkZWZpbmUgVktfTk9fUFJPVE9UWVBF UwotI2RlZmluZSBWS19FTkFCTEVfQkVUQV9FWFRFTlNJT05TCi0KLSNpbmNsdWRlICJod2NvbnRl eHQuaCIKLSNpbmNsdWRlICJod2NvbnRleHRfdnVsa2FuLmgiCi0KLS8qIEFuIGVudW0gb2YgYml0 ZmxhZ3MgZm9yIGV2ZXJ5IG9wdGlvbmFsIGV4dGVuc2lvbiB3ZSBuZWVkICovCi10eXBlZGVmIHVp bnQ2NF90IEZGVnVsa2FuRXh0ZW5zaW9uczsKLQotLyogTk9URTogd2hlbiBhZGRpbmcgbmV3IGVu dHJpZXMsIG1ha2Ugc3VyZSB0byB1cGRhdGUgZmZfdmtfZXh0ZW5zaW9uc190b19tYXNrICovCi0j ZGVmaW5lIEZGX1ZLX0VYVF9FWFRFUk5BTF9ETUFCVUZfTUVNT1JZICgxVUxMIDw8ICAwKSAvKiBW S19FWFRfZXh0ZXJuYWxfbWVtb3J5X2RtYV9idWYgKi8KLSNkZWZpbmUgRkZfVktfRVhUX0RSTV9N T0RJRklFUl9GTEFHUyAgICAgKDFVTEwgPDwgIDEpIC8qIFZLX0VYVF9pbWFnZV9kcm1fZm9ybWF0 X21vZGlmaWVyICovCi0jZGVmaW5lIEZGX1ZLX0VYVF9FWFRFUk5BTF9GRF9NRU1PUlkgICAgICgx VUxMIDw8ICAyKSAvKiBWS19LSFJfZXh0ZXJuYWxfbWVtb3J5X2ZkICovCi0jZGVmaW5lIEZGX1ZL X0VYVF9FWFRFUk5BTF9GRF9TRU0gICAgICAgICgxVUxMIDw8ICAzKSAvKiBWS19LSFJfZXh0ZXJu YWxfc2VtYXBob3JlX2ZkICovCi0jZGVmaW5lIEZGX1ZLX0VYVF9FWFRFUk5BTF9IT1NUX01FTU9S WSAgICgxVUxMIDw8ICA0KSAvKiBWS19FWFRfZXh0ZXJuYWxfbWVtb3J5X2hvc3QgKi8KLSNkZWZp bmUgRkZfVktfRVhUX0RFQlVHX1VUSUxTICAgICAgICAgICAgKDFVTEwgPDwgIDUpIC8qIFZLX0VY VF9kZWJ1Z191dGlscyAqLwotCi0jZGVmaW5lIEZGX1ZLX0VYVF9FWFRFUk5BTF9XSU4zMl9NRU1P UlkgICgxVUxMIDw8ICA2KSAvKiBWS19LSFJfZXh0ZXJuYWxfbWVtb3J5X3dpbjMyICovCi0jZGVm aW5lIEZGX1ZLX0VYVF9FWFRFUk5BTF9XSU4zMl9TRU0gICAgICgxVUxMIDw8ICA3KSAvKiBWS19L SFJfZXh0ZXJuYWxfc2VtYXBob3JlX3dpbjMyICovCi0KLSNkZWZpbmUgRkZfVktfRVhUX0RFU0NS SVBUT1JfQlVGRkVSICAgICAgKDFVTEwgPDwgIDgpIC8qIFZLX0VYVF9kZXNjcmlwdG9yX2J1ZmZl ciAqLwotI2RlZmluZSBGRl9WS19FWFRfREVWSUNFX0RSTSAgICAgICAgICAgICAoMVVMTCA8PCAg OSkgLyogVktfRVhUX3BoeXNpY2FsX2RldmljZV9kcm0gKi8KLSNkZWZpbmUgRkZfVktfRVhUX0FU T01JQ19GTE9BVCAgICAgICAgICAgKDFVTEwgPDwgMTApIC8qIFZLX0VYVF9zaGFkZXJfYXRvbWlj X2Zsb2F0ICovCi0jZGVmaW5lIEZGX1ZLX0VYVF9DT09QX01BVFJJWCAgICAgICAgICAgICgxVUxM IDw8IDExKSAvKiBWS19LSFJfY29vcGVyYXRpdmVfbWF0cml4ICovCi0jZGVmaW5lIEZGX1ZLX0VY VF9PUFRJQ0FMX0ZMT1cgICAgICAgICAgICgxVUxMIDw8IDEyKSAvKiBWS19OVl9vcHRpY2FsX2Zs b3cgKi8KLSNkZWZpbmUgRkZfVktfRVhUX1NIQURFUl9PQkpFQ1QgICAgICAgICAgKDFVTEwgPDwg MTMpIC8qIFZLX0VYVF9zaGFkZXJfb2JqZWN0ICovCi0jZGVmaW5lIEZGX1ZLX0VYVF9QVVNIX0RF U0NSSVBUT1IgICAgICAgICgxVUxMIDw8IDE0KSAvKiBWS19LSFJfcHVzaF9kZXNjcmlwdG9yICov Ci0jZGVmaW5lIEZGX1ZLX0VYVF9SRUxBWEVEX0VYVEVOREVEX0lOU1RSICgxVUxMIDw8IDE1KSAv KiBWS19LSFJfc2hhZGVyX3JlbGF4ZWRfZXh0ZW5kZWRfaW5zdHJ1Y3Rpb24gKi8KLSNkZWZpbmUg RkZfVktfRVhUX0VYUEVDVF9BU1NVTUUgICAgICAgICAgKDFVTEwgPDwgMTYpIC8qIFZLX0tIUl9z aGFkZXJfZXhwZWN0X2Fzc3VtZSAqLwotI2RlZmluZSBGRl9WS19FWFRfU1VCR1JPVVBfUk9UQVRF ICAgICAgICAoMVVMTCA8PCAxNykgLyogVktfS0hSX3NoYWRlcl9zdWJncm91cF9yb3RhdGUgKi8K LSNkZWZpbmUgRkZfVktfRVhUX0hPU1RfSU1BR0VfQ09QWSAgICAgICAgKDFVTEwgPDwgMTgpIC8q IFZLX0VYVF9ob3N0X2ltYWdlX2NvcHkgKi8KLQotLyogVmlkZW8gZXh0ZW5zaW9ucyAqLwotI2Rl ZmluZSBGRl9WS19FWFRfVklERU9fUVVFVUUgICAgICAgICAgICAoMVVMTCA8PCAzNikgLyogVktf S0hSX3ZpZGVvX3F1ZXVlICovCi0jZGVmaW5lIEZGX1ZLX0VYVF9WSURFT19NQUlOVEVOQU5DRV8x ICAgICgxVUxMIDw8IDM3KSAvKiBWS19LSFJfdmlkZW9fbWFpbnRlbmFuY2UxICovCi0jZGVmaW5l IEZGX1ZLX0VYVF9WSURFT19NQUlOVEVOQU5DRV8yICAgICgxVUxMIDw8IDM4KSAvKiBWS19LSFJf dmlkZW9fbWFpbnRlbmFuY2UyICovCi0KLSNkZWZpbmUgRkZfVktfRVhUX1ZJREVPX0RFQ09ERV9R VUVVRSAgICAgKDFVTEwgPDwgNDApIC8qIFZLX0tIUl92aWRlb19kZWNvZGVfcXVldWUgKi8KLSNk ZWZpbmUgRkZfVktfRVhUX1ZJREVPX0RFQ09ERV9IMjY0ICAgICAgKDFVTEwgPDwgNDEpIC8qIFZL X0tIUl92aWRlb19kZWNvZGVfaDI2NCAqLwotI2RlZmluZSBGRl9WS19FWFRfVklERU9fREVDT0RF X0gyNjUgICAgICAoMVVMTCA8PCA0MikgLyogVktfS0hSX3ZpZGVvX2RlY29kZV9oMjY1ICovCi0j ZGVmaW5lIEZGX1ZLX0VYVF9WSURFT19ERUNPREVfVlA5ICAgICAgICgxVUxMIDw8IDQzKSAvKiBW S19LSFJfdmlkZW9fZGVjb2RlX3ZwOSAqLwotI2RlZmluZSBGRl9WS19FWFRfVklERU9fREVDT0RF X0FWMSAgICAgICAoMVVMTCA8PCA0NCkgLyogVktfS0hSX3ZpZGVvX2RlY29kZV9hdjEgKi8KLQot I2RlZmluZSBGRl9WS19FWFRfVklERU9fRU5DT0RFX1FVRVVFICAgICAoMVVMTCA8PCA1MCkgLyog VktfS0hSX3ZpZGVvX2VuY29kZV9xdWV1ZSAqLwotI2RlZmluZSBGRl9WS19FWFRfVklERU9fRU5D T0RFX0gyNjQgICAgICAoMVVMTCA8PCA1MSkgLyogVktfS0hSX3ZpZGVvX2VuY29kZV9oMjY0ICov Ci0jZGVmaW5lIEZGX1ZLX0VYVF9WSURFT19FTkNPREVfSDI2NSAgICAgICgxVUxMIDw8IDUyKSAv KiBWS19LSFJfdmlkZW9fZW5jb2RlX2gyNjUgKi8KLSNkZWZpbmUgRkZfVktfRVhUX1ZJREVPX0VO Q09ERV9BVjEgICAgICAgKDFVTEwgPDwgNTMpIC8qIFZLX0tIUl92aWRlb19lbmNvZGVfYXYxICov Ci0KLSNkZWZpbmUgRkZfVktfRVhUX1BPUlRBQklMSVRZX1NVQlNFVCAgICAgKDFVTEwgPDwgNjIp Ci0jZGVmaW5lIEZGX1ZLX0VYVF9OT19GTEFHICAgICAgICAgICAgICAgICgxVUxMIDw8IDYzKQot Ci0vKiBNYWNybyBjb250YWluaW5nIGV2ZXJ5IGZ1bmN0aW9uIHRoYXQgd2UgdXRpbGl6ZSBpbiBv dXIgY29kZWJhc2UgKi8KLSNkZWZpbmUgRk5fTElTVChNQUNSTykgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIC8q IEluc3RhbmNlICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgTUFDUk8oMCwgMCwgRkZfVktfRVhUX05P X0ZMQUcsICAgICAgICAgICAgICBFbnVtZXJhdGVJbnN0YW5jZUV4dGVuc2lvblByb3BlcnRpZXMp ICAgIFwKLSAgICBNQUNSTygwLCAwLCBGRl9WS19FWFRfTk9fRkxBRywgICAgICAgICAgICAgIEVu dW1lcmF0ZUluc3RhbmNlTGF5ZXJQcm9wZXJ0aWVzKSAgICAgICAgXAotICAgIE1BQ1JPKDAsIDAs IEZGX1ZLX0VYVF9OT19GTEFHLCAgICAgICAgICAgICAgQ3JlYXRlSW5zdGFuY2UpICAgICAgICAg ICAgICAgICAgICAgICAgICBcCi0gICAgTUFDUk8oMSwgMCwgRkZfVktfRVhUX05PX0ZMQUcsICAg ICAgICAgICAgICBEZXN0cm95SW5zdGFuY2UpICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIC8qIERlYnVnICovICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCi0gICAgTUFDUk8oMSwgMCwgRkZfVktfRVhUX05PX0ZMQUcsICAgICAgICAgICAg ICBDcmVhdGVEZWJ1Z1V0aWxzTWVzc2VuZ2VyRVhUKSAgICAgICAgICAgIFwKLSAgICBNQUNSTygx LCAwLCBGRl9WS19FWFRfTk9fRkxBRywgICAgICAgICAgICAgIERlc3Ryb3lEZWJ1Z1V0aWxzTWVz c2VuZ2VyRVhUKSAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc Ci0gICAgLyogRGV2aWNlICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBNQUNSTygxLCAwLCBGRl9W S19FWFRfTk9fRkxBRywgICAgICAgICAgICAgIEdldERldmljZVByb2NBZGRyKSAgICAgICAgICAg ICAgICAgICAgICAgXAotICAgIE1BQ1JPKDEsIDAsIEZGX1ZLX0VYVF9OT19GTEFHLCAgICAgICAg ICAgICAgQ3JlYXRlRGV2aWNlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgTUFD Uk8oMSwgMCwgRkZfVktfRVhUX05PX0ZMQUcsICAgICAgICAgICAgICBHZXRQaHlzaWNhbERldmlj ZUZlYXR1cmVzMikgICAgICAgICAgICAgIFwKLSAgICBNQUNSTygxLCAwLCBGRl9WS19FWFRfTk9f RkxBRywgICAgICAgICAgICAgIEdldFBoeXNpY2FsRGV2aWNlUHJvcGVydGllcykgICAgICAgICAg ICAgXAotICAgIE1BQ1JPKDEsIDAsIEZGX1ZLX0VYVF9OT19GTEFHLCAgICAgICAgICAgICAgR2V0 UGh5c2ljYWxEZXZpY2VFeHRlcm5hbFNlbWFwaG9yZVByb3BlcnRpZXMpICAgICAgICAgIFwKLSAg ICBNQUNSTygxLCAwLCBGRl9WS19FWFRfVklERU9fUVVFVUUsICAgICAgICAgIEdldFBoeXNpY2Fs RGV2aWNlVmlkZW9DYXBhYmlsaXRpZXNLSFIpICAgICBcCi0gICAgTUFDUk8oMSwgMCwgRkZfVktf RVhUX1ZJREVPX1FVRVVFLCAgICAgICAgICBHZXRQaHlzaWNhbERldmljZVZpZGVvRm9ybWF0UHJv cGVydGllc0tIUikgXAotICAgIE1BQ1JPKDEsIDAsIEZGX1ZLX0VYVF9OT19GTEFHLCAgICAgICAg ICAgICAgRGV2aWNlV2FpdElkbGUpICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgTUFD Uk8oMSwgMCwgRkZfVktfRVhUX05PX0ZMQUcsICAgICAgICAgICAgICBEZXN0cm95RGV2aWNlKSAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAotICAgIE1BQ1JPKDEsIDAsIEZGX1ZLX0VYVF9OT19GTEFHLCAgICAgICAgICAgICAgRW51 bWVyYXRlUGh5c2ljYWxEZXZpY2VzKSAgICAgICAgICAgICAgICBcCi0gICAgTUFDUk8oMSwgMCwg RkZfVktfRVhUX05PX0ZMQUcsICAgICAgICAgICAgICBFbnVtZXJhdGVEZXZpY2VFeHRlbnNpb25Q cm9wZXJ0aWVzKSAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg IE1BQ1JPKDEsIDAsIEZGX1ZLX0VYVF9OT19GTEFHLCAgICAgICAgICAgICAgR2V0UGh5c2ljYWxE ZXZpY2VQcm9wZXJ0aWVzMikgICAgICAgICAgICBcCi0gICAgTUFDUk8oMSwgMCwgRkZfVktfRVhU X05PX0ZMQUcsICAgICAgICAgICAgICBHZXRQaHlzaWNhbERldmljZU1lbW9yeVByb3BlcnRpZXMp ICAgICAgIFwKLSAgICBNQUNSTygxLCAwLCBGRl9WS19FWFRfTk9fRkxBRywgICAgICAgICAgICAg IEdldFBoeXNpY2FsRGV2aWNlRm9ybWF0UHJvcGVydGllczIpICAgICAgXAotICAgIE1BQ1JPKDEs IDAsIEZGX1ZLX0VYVF9OT19GTEFHLCAgICAgICAgICAgICAgR2V0UGh5c2ljYWxEZXZpY2VJbWFn ZUZvcm1hdFByb3BlcnRpZXMyKSBcCi0gICAgTUFDUk8oMSwgMCwgRkZfVktfRVhUX05PX0ZMQUcs ICAgICAgICAgICAgICBHZXRQaHlzaWNhbERldmljZVF1ZXVlRmFtaWx5UHJvcGVydGllcykgIFwK LSAgICBNQUNSTygxLCAwLCBGRl9WS19FWFRfTk9fRkxBRywgICAgICAgICAgICAgIEdldFBoeXNp Y2FsRGV2aWNlUXVldWVGYW1pbHlQcm9wZXJ0aWVzMikgXAotICAgIE1BQ1JPKDEsIDAsIEZGX1ZL X0VYVF9DT09QX01BVFJJWCwgICAgICAgICAgR2V0UGh5c2ljYWxEZXZpY2VDb29wZXJhdGl2ZU1h dHJpeFByb3BlcnRpZXNLSFIpIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot ICAgIC8qIENvbW1hbmQgcG9vbCAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgTUFDUk8oMSwgMSwgRkZfVktf RVhUX05PX0ZMQUcsICAgICAgICAgICAgICBDcmVhdGVDb21tYW5kUG9vbCkgICAgICAgICAgICAg ICAgICAgICAgIFwKLSAgICBNQUNSTygxLCAxLCBGRl9WS19FWFRfTk9fRkxBRywgICAgICAgICAg ICAgIERlc3Ryb3lDb21tYW5kUG9vbCkgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgLyogQ29tbWFuZCBidWZmZXIgKi8gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKLSAgICBNQUNSTygxLCAxLCBGRl9WS19FWFRfTk9fRkxBRywgICAgICAgICAgICAgIEFsbG9j YXRlQ29tbWFuZEJ1ZmZlcnMpICAgICAgICAgICAgICAgICAgXAotICAgIE1BQ1JPKDEsIDEsIEZG X1ZLX0VYVF9OT19GTEFHLCAgICAgICAgICAgICAgQmVnaW5Db21tYW5kQnVmZmVyKSAgICAgICAg ICAgICAgICAgICAgICBcCi0gICAgTUFDUk8oMSwgMSwgRkZfVktfRVhUX05PX0ZMQUcsICAgICAg ICAgICAgICBFbmRDb21tYW5kQnVmZmVyKSAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBN QUNSTygxLCAxLCBGRl9WS19FWFRfTk9fRkxBRywgICAgICAgICAgICAgIEZyZWVDb21tYW5kQnVm ZmVycykgICAgICAgICAgICAgICAgICAgICAgXAotICAgIE1BQ1JPKDEsIDEsIEZGX1ZLX0VYVF9O T19GTEFHLCAgICAgICAgICAgICAgQ21kRGlzcGF0Y2gpICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAvKiBRdWV1ZSAq LyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAotICAgIE1BQ1JPKDEsIDEsIEZGX1ZLX0VYVF9OT19GTEFHLCAg ICAgICAgICAgICAgR2V0RGV2aWNlUXVldWUpICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g ICAgTUFDUk8oMSwgMSwgRkZfVktfRVhUX05PX0ZMQUcsICAgICAgICAgICAgICBRdWV1ZVN1Ym1p dCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBNQUNSTygxLCAxLCBGRl9WS19F WFRfTk9fRkxBRywgICAgICAgICAgICAgIFF1ZXVlU3VibWl0MikgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAvKiBG ZW5jZXMgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIE1BQ1JPKDEsIDEsIEZGX1ZLX0VYVF9OT19G TEFHLCAgICAgICAgICAgICAgQ3JlYXRlRmVuY2UpICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCi0gICAgTUFDUk8oMSwgMSwgRkZfVktfRVhUX05PX0ZMQUcsICAgICAgICAgICAgICBXYWl0 Rm9yRmVuY2VzKSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBNQUNSTygxLCAxLCBG Rl9WS19FWFRfTk9fRkxBRywgICAgICAgICAgICAgIEdldEZlbmNlU3RhdHVzKSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgTUFDUk8oMSwgMSwgRkZfVktfRVhU X05PX0ZMQUcsICAgICAgICAgICAgICBSZXNldEZlbmNlcykgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKLSAgICBNQUNSTygxLCAxLCBGRl9WS19FWFRfTk9fRkxBRywgICAgICAgICAgICAg IERlc3Ryb3lGZW5jZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCi0gICAgLyogU2VtYXBob3JlcyAqLyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK LSAgICBNQUNSTygxLCAxLCBGRl9WS19FWFRfRVhURVJOQUxfRkRfU0VNLCAgICAgIEdldFNlbWFw aG9yZUZkS0hSKSAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIE1BQ1JPKDEsIDEsIEZGX1ZL X0VYVF9FWFRFUk5BTF9GRF9TRU0sICAgICAgSW1wb3J0U2VtYXBob3JlRmRLSFIpICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBNQUNSTygxLCAxLCBGRl9WS19FWFRfTk9f RkxBRywgICAgICAgICAgICAgIENyZWF0ZVNlbWFwaG9yZSkgICAgICAgICAgICAgICAgICAgICAg ICAgXAotICAgIE1BQ1JPKDEsIDEsIEZGX1ZLX0VYVF9OT19GTEFHLCAgICAgICAgICAgICAgV2Fp dFNlbWFwaG9yZXMpICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgTUFDUk8oMSwgMSwg RkZfVktfRVhUX05PX0ZMQUcsICAgICAgICAgICAgICBEZXN0cm95U2VtYXBob3JlKSAgICAgICAg ICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg IC8qIE1lbW9yeSAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgTUFDUk8oMSwgMSwgRkZfVktfRVhU X0VYVEVSTkFMX0ZEX01FTU9SWSwgICBHZXRNZW1vcnlGZEtIUikgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKLSAgICBNQUNSTygxLCAxLCBGRl9WS19FWFRfTk9fRkxBRywgICAgICAgICAgICAg IEdldE1lbW9yeUZkUHJvcGVydGllc0tIUikgICAgICAgICAgICAgICAgXAotICAgIE1BQ1JPKDEs IDEsIEZGX1ZLX0VYVF9FWFRFUk5BTF9IT1NUX01FTU9SWSwgR2V0TWVtb3J5SG9zdFBvaW50ZXJQ cm9wZXJ0aWVzRVhUKSAgICAgICBcCi0gICAgTUFDUk8oMSwgMSwgRkZfVktfRVhUX05PX0ZMQUcs ICAgICAgICAgICAgICBBbGxvY2F0ZU1lbW9yeSkgICAgICAgICAgICAgICAgICAgICAgICAgIFwK LSAgICBNQUNSTygxLCAxLCBGRl9WS19FWFRfTk9fRkxBRywgICAgICAgICAgICAgIE1hcE1lbW9y eSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIE1BQ1JPKDEsIDEsIEZGX1ZL X0VYVF9OT19GTEFHLCAgICAgICAgICAgICAgRmx1c2hNYXBwZWRNZW1vcnlSYW5nZXMpICAgICAg ICAgICAgICAgICBcCi0gICAgTUFDUk8oMSwgMSwgRkZfVktfRVhUX05PX0ZMQUcsICAgICAgICAg ICAgICBJbnZhbGlkYXRlTWFwcGVkTWVtb3J5UmFuZ2VzKSAgICAgICAgICAgIFwKLSAgICBNQUNS TygxLCAxLCBGRl9WS19FWFRfTk9fRkxBRywgICAgICAgICAgICAgIFVubWFwTWVtb3J5KSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIE1BQ1JPKDEsIDEsIEZGX1ZLX0VYVF9OT19G TEFHLCAgICAgICAgICAgICAgRnJlZU1lbW9yeSkgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAvKiBDb21tYW5kcyAq LyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAotICAgIE1BQ1JPKDEsIDEsIEZGX1ZLX0VYVF9OT19GTEFHLCAgICAg ICAgICAgICAgQ21kQmluZERlc2NyaXB0b3JTZXRzKSAgICAgICAgICAgICAgICAgICBcCi0gICAg TUFDUk8oMSwgMSwgRkZfVktfRVhUX05PX0ZMQUcsICAgICAgICAgICAgICBDbWRQdXNoQ29uc3Rh bnRzKSAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBNQUNSTygxLCAxLCBGRl9WS19FWFRf Tk9fRkxBRywgICAgICAgICAgICAgIENtZEJpbmRQaXBlbGluZSkgICAgICAgICAgICAgICAgICAg ICAgICAgXAotICAgIE1BQ1JPKDEsIDEsIEZGX1ZLX0VYVF9OT19GTEFHLCAgICAgICAgICAgICAg Q21kUGlwZWxpbmVCYXJyaWVyKSAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgTUFDUk8oMSwg MSwgRkZfVktfRVhUX05PX0ZMQUcsICAgICAgICAgICAgICBDbWRDb3B5QnVmZmVyVG9JbWFnZSkg ICAgICAgICAgICAgICAgICAgIFwKLSAgICBNQUNSTygxLCAxLCBGRl9WS19FWFRfTk9fRkxBRywg ICAgICAgICAgICAgIENtZENvcHlJbWFnZVRvQnVmZmVyKSAgICAgICAgICAgICAgICAgICAgXAot ICAgIE1BQ1JPKDEsIDEsIEZGX1ZLX0VYVF9OT19GTEFHLCAgICAgICAgICAgICAgQ21kQ2xlYXJD b2xvckltYWdlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBNQUNS TygxLCAxLCBGRl9WS19FWFRfTk9fRkxBRywgICAgICAgICAgICAgIENtZENvcHlCdWZmZXIpICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKLSAgICAvKiBCdWZmZXIgKi8gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg IE1BQ1JPKDEsIDEsIEZGX1ZLX0VYVF9OT19GTEFHLCAgICAgICAgICAgICAgR2V0QnVmZmVyTWVt b3J5UmVxdWlyZW1lbnRzMikgICAgICAgICAgICBcCi0gICAgTUFDUk8oMSwgMSwgRkZfVktfRVhU X05PX0ZMQUcsICAgICAgICAgICAgICBDcmVhdGVCdWZmZXIpICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKLSAgICBNQUNSTygxLCAxLCBGRl9WS19FWFRfTk9fRkxBRywgICAgICAgICAgICAg IEJpbmRCdWZmZXJNZW1vcnkpICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIE1BQ1JPKDEs IDEsIEZGX1ZLX0VYVF9OT19GTEFHLCAgICAgICAgICAgICAgR2V0QnVmZmVyRGV2aWNlQWRkcmVz cykgICAgICAgICAgICAgICAgICAgIFwKLSAgICBNQUNSTygxLCAxLCBGRl9WS19FWFRfTk9fRkxB RywgICAgICAgICAgICAgIENtZEZpbGxCdWZmZXIpICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCi0gICAgTUFDUk8oMSwgMSwgRkZfVktfRVhUX05PX0ZMQUcsICAgICAgICAgICAgICBEZXN0 cm95QnVmZmVyKSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAotICAgIC8qIEltYWdlICovICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg TUFDUk8oMSwgMSwgRkZfVktfRVhUX0RSTV9NT0RJRklFUl9GTEFHUywgICBHZXRJbWFnZURybUZv cm1hdE1vZGlmaWVyUHJvcGVydGllc0VYVCkgIFwKLSAgICBNQUNSTygxLCAxLCBGRl9WS19FWFRf Tk9fRkxBRywgICAgICAgICAgICAgIEdldEltYWdlTWVtb3J5UmVxdWlyZW1lbnRzMikgICAgICAg ICAgICAgXAotICAgIE1BQ1JPKDEsIDEsIEZGX1ZLX0VYVF9OT19GTEFHLCAgICAgICAgICAgICAg Q3JlYXRlSW1hZ2UpICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgTUFDUk8oMSwg MSwgRkZfVktfRVhUX05PX0ZMQUcsICAgICAgICAgICAgICBCaW5kSW1hZ2VNZW1vcnkyKSAgICAg ICAgICAgICAgICAgICAgICAgIFwKLSAgICBNQUNSTygxLCAxLCBGRl9WS19FWFRfTk9fRkxBRywg ICAgICAgICAgICAgIEdldEltYWdlU3VicmVzb3VyY2VMYXlvdXQpICAgICAgICAgICAgICAgXAot ICAgIE1BQ1JPKDEsIDEsIEZGX1ZLX0VYVF9OT19GTEFHLCAgICAgICAgICAgICAgRGVzdHJveUlt YWdlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKLSAgICAvKiBJbWFnZVZpZXcgKi8gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIE1BQ1JP KDEsIDEsIEZGX1ZLX0VYVF9OT19GTEFHLCAgICAgICAgICAgICAgQ3JlYXRlSW1hZ2VWaWV3KSAg ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgTUFDUk8oMSwgMSwgRkZfVktfRVhUX05PX0ZM QUcsICAgICAgICAgICAgICBEZXN0cm95SW1hZ2VWaWV3KSAgICAgICAgICAgICAgICAgICAgICAg IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIC8qIERlc2NyaXB0b3JT ZXQgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCi0gICAgTUFDUk8oMSwgMSwgRkZfVktfRVhUX05PX0ZMQUcsICAgICAg ICAgICAgICBDcmVhdGVEZXNjcmlwdG9yU2V0TGF5b3V0KSAgICAgICAgICAgICAgIFwKLSAgICBN QUNSTygxLCAxLCBGRl9WS19FWFRfTk9fRkxBRywgICAgICAgICAgICAgIEFsbG9jYXRlRGVzY3Jp cHRvclNldHMpICAgICAgICAgICAgICAgICAgXAotICAgIE1BQ1JPKDEsIDEsIEZGX1ZLX0VYVF9O T19GTEFHLCAgICAgICAgICAgICAgQ3JlYXRlRGVzY3JpcHRvclBvb2wpICAgICAgICAgICAgICAg ICAgICBcCi0gICAgTUFDUk8oMSwgMSwgRkZfVktfRVhUX05PX0ZMQUcsICAgICAgICAgICAgICBE ZXN0cm95RGVzY3JpcHRvclBvb2wpICAgICAgICAgICAgICAgICAgIFwKLSAgICBNQUNSTygxLCAx LCBGRl9WS19FWFRfTk9fRkxBRywgICAgICAgICAgICAgIERlc3Ryb3lEZXNjcmlwdG9yU2V0TGF5 b3V0KSAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g ICAgLyogRGVzY3JpcHRvciBidWZmZXJzICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIE1BQ1JPKDEsIDEsIEZGX1ZL X0VYVF9ERVNDUklQVE9SX0JVRkZFUiwgICAgR2V0RGVzY3JpcHRvclNldExheW91dFNpemVFWFQp ICAgICAgICAgICAgIFwKLSAgICBNQUNSTygxLCAxLCBGRl9WS19FWFRfREVTQ1JJUFRPUl9CVUZG RVIsICAgIEdldERlc2NyaXB0b3JTZXRMYXlvdXRCaW5kaW5nT2Zmc2V0RVhUKSAgICBcCi0gICAg TUFDUk8oMSwgMSwgRkZfVktfRVhUX0RFU0NSSVBUT1JfQlVGRkVSLCAgICBHZXREZXNjcmlwdG9y RVhUKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIE1BQ1JPKDEsIDEsIEZGX1ZLX0VY VF9ERVNDUklQVE9SX0JVRkZFUiwgICAgQ21kQmluZERlc2NyaXB0b3JCdWZmZXJzRVhUKSAgICAg ICAgICAgICAgIFwKLSAgICBNQUNSTygxLCAxLCBGRl9WS19FWFRfREVTQ1JJUFRPUl9CVUZGRVIs ICAgIENtZFNldERlc2NyaXB0b3JCdWZmZXJPZmZzZXRzRVhUKSAgICAgICAgICBcCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIC8qIERlc2NyaXB0b3JVcGRhdGVUZW1w bGF0ZSAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCi0gICAgTUFDUk8oMSwgMSwgRkZfVktfRVhUX05PX0ZMQUcsICAgICAgICAgICAgICBV cGRhdGVEZXNjcmlwdG9yU2V0V2l0aFRlbXBsYXRlKSAgICAgICAgIFwKLSAgICBNQUNSTygxLCAx LCBGRl9WS19FWFRfTk9fRkxBRywgICAgICAgICAgICAgIENyZWF0ZURlc2NyaXB0b3JVcGRhdGVU ZW1wbGF0ZSkgICAgICAgICAgXAotICAgIE1BQ1JPKDEsIDEsIEZGX1ZLX0VYVF9OT19GTEFHLCAg ICAgICAgICAgICAgRGVzdHJveURlc2NyaXB0b3JVcGRhdGVUZW1wbGF0ZSkgICAgICAgICBcCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIC8qIERl c2NyaXB0b3JzICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBNQUNSTygxLCAxLCBG Rl9WS19FWFRfTk9fRkxBRywgICAgICAgICAgICAgIFVwZGF0ZURlc2NyaXB0b3JTZXRzKSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgTUFDUk8oMSwgMSwgRkZfVktfRVhU X1BVU0hfREVTQ1JJUFRPUiwgICAgICBDbWRQdXNoRGVzY3JpcHRvclNldEtIUikgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKLSAgICAvKiBRdWVyaWVzICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgTUFDUk8oMSwgMSwg RkZfVktfRVhUX05PX0ZMQUcsICAgICAgICAgICAgICBDcmVhdGVRdWVyeVBvb2wpICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAotICAgIE1BQ1JPKDEsIDEsIEZGX1ZLX0VYVF9OT19GTEFHLCAg ICAgICAgICAgICAgR2V0UXVlcnlQb29sUmVzdWx0cykgICAgICAgICAgICAgICAgICAgICAgIFwK LSAgICBNQUNSTygxLCAxLCBGRl9WS19FWFRfTk9fRkxBRywgICAgICAgICAgICAgIFJlc2V0UXVl cnlQb29sKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgTUFDUk8oMSwgMSwgRkZf VktfRVhUX05PX0ZMQUcsICAgICAgICAgICAgICBDbWRCZWdpblF1ZXJ5KSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAotICAgIE1BQ1JPKDEsIDEsIEZGX1ZLX0VYVF9OT19GTEFHLCAgICAg ICAgICAgICAgQ21kRW5kUXVlcnkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg ICBNQUNSTygxLCAxLCBGRl9WS19FWFRfTk9fRkxBRywgICAgICAgICAgICAgIENtZFJlc2V0UXVl cnlQb29sKSAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgTUFDUk8oMSwgMSwgRkZfVktf RVhUX05PX0ZMQUcsICAgICAgICAgICAgICBEZXN0cm95UXVlcnlQb29sKSAgICAgICAgICAgICAg ICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAv KiBzeW5jMiAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgTUFDUk8oMSwgMSwgRkZfVktfRVhU X05PX0ZMQUcsICAgICAgICAgICAgICBDbWRQaXBlbGluZUJhcnJpZXIyKSAgICAgICAgICAgICAg ICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAvKiBI b3N0IGltYWdlIGNvcHkgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgTUFDUk8oMSwgMSwg RkZfVktfRVhUX0hPU1RfSU1BR0VfQ09QWSwgICAgICBUcmFuc2l0aW9uSW1hZ2VMYXlvdXRFWFQp ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIE1BQ1JPKDEsIDEsIEZGX1ZLX0VY VF9IT1NUX0lNQUdFX0NPUFksICAgICAgQ29weU1lbW9yeVRvSW1hZ2VFWFQpICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBNQUNSTygxLCAxLCBGRl9WS19FWFRfSE9TVF9J TUFHRV9DT1BZLCAgICAgIENvcHlJbWFnZVRvTWVtb3J5RVhUKSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAotICAgIC8qIFZpZGVvIHF1ZXVlICovICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBNQUNSTygx LCAxLCBGRl9WS19FWFRfVklERU9fUVVFVUUsICAgICAgICAgIENyZWF0ZVZpZGVvU2Vzc2lvbktI UikgICAgICAgICAgICAgICAgICAgICBcCi0gICAgTUFDUk8oMSwgMSwgRkZfVktfRVhUX1ZJREVP X1FVRVVFLCAgICAgICAgICBDcmVhdGVWaWRlb1Nlc3Npb25QYXJhbWV0ZXJzS0hSKSAgICAgICAg ICAgXAotICAgIE1BQ1JPKDEsIDEsIEZGX1ZLX0VYVF9WSURFT19RVUVVRSwgICAgICAgICAgR2V0 VmlkZW9TZXNzaW9uTWVtb3J5UmVxdWlyZW1lbnRzS0hSKSAgICAgIFwKLSAgICBNQUNSTygxLCAx LCBGRl9WS19FWFRfVklERU9fUVVFVUUsICAgICAgICAgIEJpbmRWaWRlb1Nlc3Npb25NZW1vcnlL SFIpICAgICAgICAgICAgICAgICBcCi0gICAgTUFDUk8oMSwgMSwgRkZfVktfRVhUX1ZJREVPX1FV RVVFLCAgICAgICAgICBDbWRCZWdpblZpZGVvQ29kaW5nS0hSKSAgICAgICAgICAgICAgICAgICAg XAotICAgIE1BQ1JPKDEsIDEsIEZGX1ZLX0VYVF9WSURFT19RVUVVRSwgICAgICAgICAgQ21kQ29u dHJvbFZpZGVvQ29kaW5nS0hSKSAgICAgICAgICAgICAgICAgIFwKLSAgICBNQUNSTygxLCAxLCBG Rl9WS19FWFRfVklERU9fUVVFVUUsICAgICAgICAgIENtZEVuZFZpZGVvQ29kaW5nS0hSKSAgICAg ICAgICAgICAgICAgICAgICBcCi0gICAgTUFDUk8oMSwgMSwgRkZfVktfRVhUX1ZJREVPX1FVRVVF LCAgICAgICAgICBEZXN0cm95VmlkZW9TZXNzaW9uUGFyYW1ldGVyc0tIUikgICAgICAgICAgXAot ICAgIE1BQ1JPKDEsIDEsIEZGX1ZLX0VYVF9WSURFT19RVUVVRSwgICAgICAgICAgRGVzdHJveVZp ZGVvU2Vzc2lvbktIUikgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCi0gICAgLyogVmlkZW8gZGVjb2RpbmcgKi8gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg IE1BQ1JPKDEsIDEsIEZGX1ZLX0VYVF9WSURFT19ERUNPREVfUVVFVUUsICAgQ21kRGVjb2RlVmlk ZW9LSFIpICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCi0gICAgLyogVmlkZW8gZW5jb2RpbmcgKi8gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIE1B Q1JPKDEsIDEsIEZGX1ZLX0VYVF9WSURFT19FTkNPREVfUVVFVUUsICAgQ21kRW5jb2RlVmlkZW9L SFIpICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBNQUNSTygxLCAxLCBGRl9WS19FWFRf VklERU9fRU5DT0RFX1FVRVVFLCAgIEdldEVuY29kZWRWaWRlb1Nlc3Npb25QYXJhbWV0ZXJzS0hS KSAgICAgICBcCi0gICAgTUFDUk8oMSwgMCwgRkZfVktfRVhUX1ZJREVPX0VOQ09ERV9RVUVVRSwg ICBHZXRQaHlzaWNhbERldmljZVZpZGVvRW5jb2RlUXVhbGl0eUxldmVsUHJvcGVydGllc0tIUikg XAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgLyogUGlwZWxpbmUgKi8g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKLSAgICBNQUNSTygxLCAxLCBGRl9WS19FWFRfTk9fRkxBRywgICAgICAg ICAgICAgIENyZWF0ZVBpcGVsaW5lTGF5b3V0KSAgICAgICAgICAgICAgICAgICAgXAotICAgIE1B Q1JPKDEsIDEsIEZGX1ZLX0VYVF9OT19GTEFHLCAgICAgICAgICAgICAgRGVzdHJveVBpcGVsaW5l TGF5b3V0KSAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKLSAgICAvKiBQaXBlbGluZUxheW91dCAqLyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIE1BQ1JPKDEsIDEs IEZGX1ZLX0VYVF9OT19GTEFHLCAgICAgICAgICAgICAgQ3JlYXRlQ29tcHV0ZVBpcGVsaW5lcykg ICAgICAgICAgICAgICAgICBcCi0gICAgTUFDUk8oMSwgMSwgRkZfVktfRVhUX05PX0ZMQUcsICAg ICAgICAgICAgICBEZXN0cm95UGlwZWxpbmUpICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIC8qIFNhbXBsZXIgKi8gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCi0gICAgTUFDUk8oMSwgMSwgRkZfVktfRVhUX05PX0ZMQUcsICAgICAgICAgICAg ICBDcmVhdGVTYW1wbGVyWWNiY3JDb252ZXJzaW9uKSAgICAgICAgICAgICAgXAotICAgIE1BQ1JP KDEsIDEsIEZGX1ZLX0VYVF9OT19GTEFHLCAgICAgICAgICAgICAgRGVzdHJveVNhbXBsZXJZY2Jj ckNvbnZlcnNpb24pICAgICAgICAgICAgIFwKLSAgICBNQUNSTygxLCAxLCBGRl9WS19FWFRfTk9f RkxBRywgICAgICAgICAgICAgIENyZWF0ZVNhbXBsZXIpICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAotICAgIE1BQ1JPKDEsIDEsIEZGX1ZLX0VYVF9OT19GTEFHLCAgICAgICAgICAgICAgRGVz dHJveVNhbXBsZXIpICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAotICAgIC8qIE9wdGljYWwgZmxvdyAqLyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK LSAgICBNQUNSTygxLCAxLCBGRl9WS19FWFRfT1BUSUNBTF9GTE9XLCAgICAgICAgIEJpbmRPcHRp Y2FsRmxvd1Nlc3Npb25JbWFnZU5WKSAgICAgICAgICAgICBcCi0gICAgTUFDUk8oMSwgMSwgRkZf VktfRVhUX09QVElDQUxfRkxPVywgICAgICAgICBDbWRPcHRpY2FsRmxvd0V4ZWN1dGVOVikgICAg ICAgICAgICAgICAgICAgXAotICAgIE1BQ1JPKDEsIDEsIEZGX1ZLX0VYVF9PUFRJQ0FMX0ZMT1cs ICAgICAgICAgQ3JlYXRlT3B0aWNhbEZsb3dTZXNzaW9uTlYpICAgICAgICAgICAgICAgIFwKLSAg ICBNQUNSTygxLCAxLCBGRl9WS19FWFRfT1BUSUNBTF9GTE9XLCAgICAgICAgIERlc3Ryb3lPcHRp Y2FsRmxvd1Nlc3Npb25OVikgICAgICAgICAgICAgICBcCi0gICAgTUFDUk8oMSwgMCwgRkZfVktf RVhUX09QVElDQUxfRkxPVywgICAgICAgICBHZXRQaHlzaWNhbERldmljZU9wdGljYWxGbG93SW1h Z2VGb3JtYXRzTlYpXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgLyog U2hhZGVycyAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBNQUNSTygxLCAxLCBGRl9WS19FWFRfTk9f RkxBRywgICAgICAgICAgICAgIENyZWF0ZVNoYWRlck1vZHVsZSkgICAgICAgICAgICAgICAgICAg ICAgXAotICAgIE1BQ1JPKDEsIDEsIEZGX1ZLX0VYVF9OT19GTEFHLCAgICAgICAgICAgICAgRGVz dHJveVNoYWRlck1vZHVsZSkgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBNQUNSTygxLCAx LCBGRl9WS19FWFRfU0hBREVSX09CSkVDVCwgICAgICAgIENtZEJpbmRTaGFkZXJzRVhUKSAgICAg ICAgICAgICAgICAgICAgICAgICBcCi0gICAgTUFDUk8oMSwgMSwgRkZfVktfRVhUX1NIQURFUl9P QkpFQ1QsICAgICAgICBDcmVhdGVTaGFkZXJzRVhUKSAgICAgICAgICAgICAgICAgICAgICAgICAg XAotICAgIE1BQ1JPKDEsIDEsIEZGX1ZLX0VYVF9TSEFERVJfT0JKRUNULCAgICAgICAgRGVzdHJv eVNoYWRlckVYVCkgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBNQUNSTygxLCAxLCBG Rl9WS19FWFRfU0hBREVSX09CSkVDVCwgICAgICAgIEdldFNoYWRlckJpbmFyeURhdGFFWFQpCi0K LS8qIE1hY3JvIGNvbnRhaW5pbmcgZXZlcnkgd2luMzIgc3BlY2lmaWMgZnVuY3Rpb24gdGhhdCB3 ZSB1dGlsaXplIGluIG91ciBjb2RlYmFzZSAqLwotI2RlZmluZSBGTl9MSVNUX1dJTjMyKE1BQ1JP KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCi0gICAgTUFDUk8oMSwgMSwgRkZfVktfRVhUX0VYVEVSTkFMX1dJTjMyX1NFTSwgICAg R2V0U2VtYXBob3JlV2luMzJIYW5kbGVLSFIpICAgICAgICAgICAgIFwKLSAgICBNQUNSTygxLCAx LCBGRl9WS19FWFRfRVhURVJOQUxfV0lOMzJfTUVNT1JZLCBHZXRNZW1vcnlXaW4zMkhhbmRsZUtI UikKLQotLyogTWFjcm8gdG8gdHVybiBhIGZ1bmN0aW9uIG5hbWUgaW50byBhIGRlZmluaXRpb24g Ki8KLSNkZWZpbmUgUEZOX0RFRihyZXFfaW5zdCwgcmVxX2RldiwgZXh0X2ZsYWcsIG5hbWUpIFwK LSAgICBQRk5fdmsjI25hbWUgbmFtZTsKLQotLyogU3RydWN0dXJlIHdpdGggdGhlIGRlZmluaXRp b24gb2YgYWxsIGxpc3RlZCBmdW5jdGlvbnMgKi8KLXR5cGVkZWYgc3RydWN0IEZGVnVsa2FuRnVu Y3Rpb25zIHsKLSAgICBGTl9MSVNUKFBGTl9ERUYpCi0jaWZkZWYgX1dJTjMyCi0gICAgRk5fTElT VF9XSU4zMihQRk5fREVGKQotI2VuZGlmCi19IEZGVnVsa2FuRnVuY3Rpb25zOwotCi0jZW5kaWYg LyogQVZVVElMX1ZVTEtBTl9GVU5DVElPTlNfSCAqLwotLSAKMi40OS4xCgoKRnJvbSBmNTllZGU0 NTM4NWM2ZTk2MmJiMmViNDIyNzExNjBjMzhjMDMzNTkzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAw MQpGcm9tOiBKYW1haWthMSA8bHVrYXN6Y3oxOEB3cC5wbD4KRGF0ZTogV2VkLCAzIFNlcCAyMDI1 IDEzOjIwOjMyICswMDAwClN1YmplY3Q6IFtQQVRDSCAwNTAvMTE4XSBDaGFuZ2luZyB2dWxrYW4g ZmlsZSBkaXJlY3RvcnkKCi0tLQogbGliYXZ1dGlsL3Z1bGthbi92dWxrYW5fZnVuY3Rpb25zLmgg fCAyODMgKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogMSBmaWxlIGNoYW5nZWQsIDI4MyBp bnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliYXZ1dGlsL3Z1bGthbi92dWxrYW5f ZnVuY3Rpb25zLmgKCmRpZmYgLS1naXQgYS9saWJhdnV0aWwvdnVsa2FuL3Z1bGthbl9mdW5jdGlv bnMuaCBiL2xpYmF2dXRpbC92dWxrYW4vdnVsa2FuX2Z1bmN0aW9ucy5oCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjI4NzJlODEzZTMKLS0tIC9kZXYvbnVsbAorKysgYi9s aWJhdnV0aWwvdnVsa2FuL3Z1bGthbl9mdW5jdGlvbnMuaApAQCAtMCwwICsxLDI4MyBAQAorLyoK KyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KKyAqCisgKiBGRm1wZWcgaXMgZnJlZSBz b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5k ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq IHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl ciB2ZXJzaW9uLgorICoKKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0 IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0 IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAq IExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29m dHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv b3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKyAqLworCisjaWZuZGVmIEFWVVRJTF9WVUxL QU5fRlVOQ1RJT05TX0gKKyNkZWZpbmUgQVZVVElMX1ZVTEtBTl9GVU5DVElPTlNfSAorCisjZGVm aW5lIFZLX05PX1BST1RPVFlQRVMKKyNkZWZpbmUgVktfRU5BQkxFX0JFVEFfRVhURU5TSU9OUwor CisjaW5jbHVkZSAibGliYXZ1dGlsL2h3Y29udGV4dC5oIgorI2luY2x1ZGUgImh3Y29udGV4dF92 dWxrYW4uaCIKKworLyogQW4gZW51bSBvZiBiaXRmbGFncyBmb3IgZXZlcnkgb3B0aW9uYWwgZXh0 ZW5zaW9uIHdlIG5lZWQgKi8KK3R5cGVkZWYgdWludDY0X3QgRkZWdWxrYW5FeHRlbnNpb25zOwor CisvKiBOT1RFOiB3aGVuIGFkZGluZyBuZXcgZW50cmllcywgbWFrZSBzdXJlIHRvIHVwZGF0ZSBm Zl92a19leHRlbnNpb25zX3RvX21hc2sgKi8KKyNkZWZpbmUgRkZfVktfRVhUX0VYVEVSTkFMX0RN QUJVRl9NRU1PUlkgKDFVTEwgPDwgIDApIC8qIFZLX0VYVF9leHRlcm5hbF9tZW1vcnlfZG1hX2J1 ZiAqLworI2RlZmluZSBGRl9WS19FWFRfRFJNX01PRElGSUVSX0ZMQUdTICAgICAoMVVMTCA8PCAg MSkgLyogVktfRVhUX2ltYWdlX2RybV9mb3JtYXRfbW9kaWZpZXIgKi8KKyNkZWZpbmUgRkZfVktf RVhUX0VYVEVSTkFMX0ZEX01FTU9SWSAgICAgKDFVTEwgPDwgIDIpIC8qIFZLX0tIUl9leHRlcm5h bF9tZW1vcnlfZmQgKi8KKyNkZWZpbmUgRkZfVktfRVhUX0VYVEVSTkFMX0ZEX1NFTSAgICAgICAg KDFVTEwgPDwgIDMpIC8qIFZLX0tIUl9leHRlcm5hbF9zZW1hcGhvcmVfZmQgKi8KKyNkZWZpbmUg RkZfVktfRVhUX0VYVEVSTkFMX0hPU1RfTUVNT1JZICAgKDFVTEwgPDwgIDQpIC8qIFZLX0VYVF9l eHRlcm5hbF9tZW1vcnlfaG9zdCAqLworI2RlZmluZSBGRl9WS19FWFRfREVCVUdfVVRJTFMgICAg ICAgICAgICAoMVVMTCA8PCAgNSkgLyogVktfRVhUX2RlYnVnX3V0aWxzICovCisKKyNkZWZpbmUg RkZfVktfRVhUX0VYVEVSTkFMX1dJTjMyX01FTU9SWSAgKDFVTEwgPDwgIDYpIC8qIFZLX0tIUl9l eHRlcm5hbF9tZW1vcnlfd2luMzIgKi8KKyNkZWZpbmUgRkZfVktfRVhUX0VYVEVSTkFMX1dJTjMy X1NFTSAgICAgKDFVTEwgPDwgIDcpIC8qIFZLX0tIUl9leHRlcm5hbF9zZW1hcGhvcmVfd2luMzIg Ki8KKworI2RlZmluZSBGRl9WS19FWFRfREVTQ1JJUFRPUl9CVUZGRVIgICAgICAoMVVMTCA8PCAg OCkgLyogVktfRVhUX2Rlc2NyaXB0b3JfYnVmZmVyICovCisjZGVmaW5lIEZGX1ZLX0VYVF9ERVZJ Q0VfRFJNICAgICAgICAgICAgICgxVUxMIDw8ICA5KSAvKiBWS19FWFRfcGh5c2ljYWxfZGV2aWNl X2RybSAqLworI2RlZmluZSBGRl9WS19FWFRfQVRPTUlDX0ZMT0FUICAgICAgICAgICAoMVVMTCA8 PCAxMCkgLyogVktfRVhUX3NoYWRlcl9hdG9taWNfZmxvYXQgKi8KKyNkZWZpbmUgRkZfVktfRVhU X0NPT1BfTUFUUklYICAgICAgICAgICAgKDFVTEwgPDwgMTEpIC8qIFZLX0tIUl9jb29wZXJhdGl2 ZV9tYXRyaXggKi8KKyNkZWZpbmUgRkZfVktfRVhUX09QVElDQUxfRkxPVyAgICAgICAgICAgKDFV TEwgPDwgMTIpIC8qIFZLX05WX29wdGljYWxfZmxvdyAqLworI2RlZmluZSBGRl9WS19FWFRfU0hB REVSX09CSkVDVCAgICAgICAgICAoMVVMTCA8PCAxMykgLyogVktfRVhUX3NoYWRlcl9vYmplY3Qg Ki8KKyNkZWZpbmUgRkZfVktfRVhUX1BVU0hfREVTQ1JJUFRPUiAgICAgICAgKDFVTEwgPDwgMTQp IC8qIFZLX0tIUl9wdXNoX2Rlc2NyaXB0b3IgKi8KKyNkZWZpbmUgRkZfVktfRVhUX1JFTEFYRURf RVhURU5ERURfSU5TVFIgKDFVTEwgPDwgMTUpIC8qIFZLX0tIUl9zaGFkZXJfcmVsYXhlZF9leHRl bmRlZF9pbnN0cnVjdGlvbiAqLworI2RlZmluZSBGRl9WS19FWFRfRVhQRUNUX0FTU1VNRSAgICAg ICAgICAoMVVMTCA8PCAxNikgLyogVktfS0hSX3NoYWRlcl9leHBlY3RfYXNzdW1lICovCisjZGVm aW5lIEZGX1ZLX0VYVF9TVUJHUk9VUF9ST1RBVEUgICAgICAgICgxVUxMIDw8IDE3KSAvKiBWS19L SFJfc2hhZGVyX3N1Ymdyb3VwX3JvdGF0ZSAqLworI2RlZmluZSBGRl9WS19FWFRfSE9TVF9JTUFH RV9DT1BZICAgICAgICAoMVVMTCA8PCAxOCkgLyogVktfRVhUX2hvc3RfaW1hZ2VfY29weSAqLwor CisvKiBWaWRlbyBleHRlbnNpb25zICovCisjZGVmaW5lIEZGX1ZLX0VYVF9WSURFT19RVUVVRSAg ICAgICAgICAgICgxVUxMIDw8IDM2KSAvKiBWS19LSFJfdmlkZW9fcXVldWUgKi8KKyNkZWZpbmUg RkZfVktfRVhUX1ZJREVPX01BSU5URU5BTkNFXzEgICAgKDFVTEwgPDwgMzcpIC8qIFZLX0tIUl92 aWRlb19tYWludGVuYW5jZTEgKi8KKyNkZWZpbmUgRkZfVktfRVhUX1ZJREVPX01BSU5URU5BTkNF XzIgICAgKDFVTEwgPDwgMzgpIC8qIFZLX0tIUl92aWRlb19tYWludGVuYW5jZTIgKi8KKworI2Rl ZmluZSBGRl9WS19FWFRfVklERU9fREVDT0RFX1FVRVVFICAgICAoMVVMTCA8PCA0MCkgLyogVktf S0hSX3ZpZGVvX2RlY29kZV9xdWV1ZSAqLworI2RlZmluZSBGRl9WS19FWFRfVklERU9fREVDT0RF X0gyNjQgICAgICAoMVVMTCA8PCA0MSkgLyogVktfS0hSX3ZpZGVvX2RlY29kZV9oMjY0ICovCisj ZGVmaW5lIEZGX1ZLX0VYVF9WSURFT19ERUNPREVfSDI2NSAgICAgICgxVUxMIDw8IDQyKSAvKiBW S19LSFJfdmlkZW9fZGVjb2RlX2gyNjUgKi8KKyNkZWZpbmUgRkZfVktfRVhUX1ZJREVPX0RFQ09E RV9WUDkgICAgICAgKDFVTEwgPDwgNDMpIC8qIFZLX0tIUl92aWRlb19kZWNvZGVfdnA5ICovCisj ZGVmaW5lIEZGX1ZLX0VYVF9WSURFT19ERUNPREVfQVYxICAgICAgICgxVUxMIDw8IDQ0KSAvKiBW S19LSFJfdmlkZW9fZGVjb2RlX2F2MSAqLworCisjZGVmaW5lIEZGX1ZLX0VYVF9WSURFT19FTkNP REVfUVVFVUUgICAgICgxVUxMIDw8IDUwKSAvKiBWS19LSFJfdmlkZW9fZW5jb2RlX3F1ZXVlICov CisjZGVmaW5lIEZGX1ZLX0VYVF9WSURFT19FTkNPREVfSDI2NCAgICAgICgxVUxMIDw8IDUxKSAv KiBWS19LSFJfdmlkZW9fZW5jb2RlX2gyNjQgKi8KKyNkZWZpbmUgRkZfVktfRVhUX1ZJREVPX0VO Q09ERV9IMjY1ICAgICAgKDFVTEwgPDwgNTIpIC8qIFZLX0tIUl92aWRlb19lbmNvZGVfaDI2NSAq LworI2RlZmluZSBGRl9WS19FWFRfVklERU9fRU5DT0RFX0FWMSAgICAgICAoMVVMTCA8PCA1Mykg LyogVktfS0hSX3ZpZGVvX2VuY29kZV9hdjEgKi8KKworI2RlZmluZSBGRl9WS19FWFRfUE9SVEFC SUxJVFlfU1VCU0VUICAgICAoMVVMTCA8PCA2MikKKyNkZWZpbmUgRkZfVktfRVhUX05PX0ZMQUcg ICAgICAgICAgICAgICAgKDFVTEwgPDwgNjMpCisKKy8qIE1hY3JvIGNvbnRhaW5pbmcgZXZlcnkg ZnVuY3Rpb24gdGhhdCB3ZSB1dGlsaXplIGluIG91ciBjb2RlYmFzZSAqLworI2RlZmluZSBGTl9M SVNUKE1BQ1JPKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCisgICAgLyogSW5zdGFuY2UgKi8gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK KyAgICBNQUNSTygwLCAwLCBGRl9WS19FWFRfTk9fRkxBRywgICAgICAgICAgICAgIEVudW1lcmF0 ZUluc3RhbmNlRXh0ZW5zaW9uUHJvcGVydGllcykgICAgXAorICAgIE1BQ1JPKDAsIDAsIEZGX1ZL X0VYVF9OT19GTEFHLCAgICAgICAgICAgICAgRW51bWVyYXRlSW5zdGFuY2VMYXllclByb3BlcnRp ZXMpICAgICAgICBcCisgICAgTUFDUk8oMCwgMCwgRkZfVktfRVhUX05PX0ZMQUcsICAgICAgICAg ICAgICBDcmVhdGVJbnN0YW5jZSkgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBNQUNS TygxLCAwLCBGRl9WS19FWFRfTk9fRkxBRywgICAgICAgICAgICAgIERlc3Ryb3lJbnN0YW5jZSkg ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCisgICAgLyogRGVidWcgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBNQUNSTygxLCAwLCBG Rl9WS19FWFRfTk9fRkxBRywgICAgICAgICAgICAgIENyZWF0ZURlYnVnVXRpbHNNZXNzZW5nZXJF WFQpICAgICAgICAgICAgXAorICAgIE1BQ1JPKDEsIDAsIEZGX1ZLX0VYVF9OT19GTEFHLCAgICAg ICAgICAgICAgRGVzdHJveURlYnVnVXRpbHNNZXNzZW5nZXJFWFQpICAgICAgICAgICBcCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAvKiBEZXZpY2UgKi8gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAorICAgIE1BQ1JPKDEsIDAsIEZGX1ZLX0VYVF9OT19GTEFHLCAgICAgICAgICAgICAg R2V0RGV2aWNlUHJvY0FkZHIpICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgTUFDUk8oMSwg MCwgRkZfVktfRVhUX05PX0ZMQUcsICAgICAgICAgICAgICBDcmVhdGVEZXZpY2UpICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKKyAgICBNQUNSTygxLCAwLCBGRl9WS19FWFRfTk9fRkxBRywg ICAgICAgICAgICAgIEdldFBoeXNpY2FsRGV2aWNlRmVhdHVyZXMyKSAgICAgICAgICAgICAgXAor ICAgIE1BQ1JPKDEsIDAsIEZGX1ZLX0VYVF9OT19GTEFHLCAgICAgICAgICAgICAgR2V0UGh5c2lj YWxEZXZpY2VQcm9wZXJ0aWVzKSAgICAgICAgICAgICBcCisgICAgTUFDUk8oMSwgMCwgRkZfVktf RVhUX05PX0ZMQUcsICAgICAgICAgICAgICBHZXRQaHlzaWNhbERldmljZUV4dGVybmFsU2VtYXBo b3JlUHJvcGVydGllcykgICAgICAgICAgXAorICAgIE1BQ1JPKDEsIDAsIEZGX1ZLX0VYVF9WSURF T19RVUVVRSwgICAgICAgICAgR2V0UGh5c2ljYWxEZXZpY2VWaWRlb0NhcGFiaWxpdGllc0tIUikg ICAgIFwKKyAgICBNQUNSTygxLCAwLCBGRl9WS19FWFRfVklERU9fUVVFVUUsICAgICAgICAgIEdl dFBoeXNpY2FsRGV2aWNlVmlkZW9Gb3JtYXRQcm9wZXJ0aWVzS0hSKSBcCisgICAgTUFDUk8oMSwg MCwgRkZfVktfRVhUX05PX0ZMQUcsICAgICAgICAgICAgICBEZXZpY2VXYWl0SWRsZSkgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKKyAgICBNQUNSTygxLCAwLCBGRl9WS19FWFRfTk9fRkxBRywg ICAgICAgICAgICAgIERlc3Ryb3lEZXZpY2UpICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgTUFDUk8oMSwgMCwgRkZfVktf RVhUX05PX0ZMQUcsICAgICAgICAgICAgICBFbnVtZXJhdGVQaHlzaWNhbERldmljZXMpICAgICAg ICAgICAgICAgIFwKKyAgICBNQUNSTygxLCAwLCBGRl9WS19FWFRfTk9fRkxBRywgICAgICAgICAg ICAgIEVudW1lcmF0ZURldmljZUV4dGVuc2lvblByb3BlcnRpZXMpICAgICAgXAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgTUFDUk8oMSwgMCwgRkZfVktfRVhUX05PX0ZM QUcsICAgICAgICAgICAgICBHZXRQaHlzaWNhbERldmljZVByb3BlcnRpZXMyKSAgICAgICAgICAg IFwKKyAgICBNQUNSTygxLCAwLCBGRl9WS19FWFRfTk9fRkxBRywgICAgICAgICAgICAgIEdldFBo eXNpY2FsRGV2aWNlTWVtb3J5UHJvcGVydGllcykgICAgICAgXAorICAgIE1BQ1JPKDEsIDAsIEZG X1ZLX0VYVF9OT19GTEFHLCAgICAgICAgICAgICAgR2V0UGh5c2ljYWxEZXZpY2VGb3JtYXRQcm9w ZXJ0aWVzMikgICAgICBcCisgICAgTUFDUk8oMSwgMCwgRkZfVktfRVhUX05PX0ZMQUcsICAgICAg ICAgICAgICBHZXRQaHlzaWNhbERldmljZUltYWdlRm9ybWF0UHJvcGVydGllczIpIFwKKyAgICBN QUNSTygxLCAwLCBGRl9WS19FWFRfTk9fRkxBRywgICAgICAgICAgICAgIEdldFBoeXNpY2FsRGV2 aWNlUXVldWVGYW1pbHlQcm9wZXJ0aWVzKSAgXAorICAgIE1BQ1JPKDEsIDAsIEZGX1ZLX0VYVF9O T19GTEFHLCAgICAgICAgICAgICAgR2V0UGh5c2ljYWxEZXZpY2VRdWV1ZUZhbWlseVByb3BlcnRp ZXMyKSBcCisgICAgTUFDUk8oMSwgMCwgRkZfVktfRVhUX0NPT1BfTUFUUklYLCAgICAgICAgICBH ZXRQaHlzaWNhbERldmljZUNvb3BlcmF0aXZlTWF0cml4UHJvcGVydGllc0tIUikgXAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgLyogQ29tbWFuZCBwb29sICovICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKKyAgICBNQUNSTygxLCAxLCBGRl9WS19FWFRfTk9fRkxBRywgICAgICAgICAgICAgIENy ZWF0ZUNvbW1hbmRQb29sKSAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIE1BQ1JPKDEsIDEs IEZGX1ZLX0VYVF9OT19GTEFHLCAgICAgICAgICAgICAgRGVzdHJveUNvbW1hbmRQb29sKSAgICAg ICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg ICAvKiBDb21tYW5kIGJ1ZmZlciAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIE1BQ1JPKDEsIDEsIEZGX1ZLX0VY VF9OT19GTEFHLCAgICAgICAgICAgICAgQWxsb2NhdGVDb21tYW5kQnVmZmVycykgICAgICAgICAg ICAgICAgICBcCisgICAgTUFDUk8oMSwgMSwgRkZfVktfRVhUX05PX0ZMQUcsICAgICAgICAgICAg ICBCZWdpbkNvbW1hbmRCdWZmZXIpICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBNQUNSTygx LCAxLCBGRl9WS19FWFRfTk9fRkxBRywgICAgICAgICAgICAgIEVuZENvbW1hbmRCdWZmZXIpICAg ICAgICAgICAgICAgICAgICAgICAgXAorICAgIE1BQ1JPKDEsIDEsIEZGX1ZLX0VYVF9OT19GTEFH LCAgICAgICAgICAgICAgRnJlZUNvbW1hbmRCdWZmZXJzKSAgICAgICAgICAgICAgICAgICAgICBc CisgICAgTUFDUk8oMSwgMSwgRkZfVktfRVhUX05PX0ZMQUcsICAgICAgICAgICAgICBDbWREaXNw YXRjaCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAorICAgIC8qIFF1ZXVlICovICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgTUFD Uk8oMSwgMSwgRkZfVktfRVhUX05PX0ZMQUcsICAgICAgICAgICAgICBHZXREZXZpY2VRdWV1ZSkg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBNQUNSTygxLCAxLCBGRl9WS19FWFRfTk9f RkxBRywgICAgICAgICAgICAgIFF1ZXVlU3VibWl0KSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAorICAgIE1BQ1JPKDEsIDEsIEZGX1ZLX0VYVF9OT19GTEFHLCAgICAgICAgICAgICAgUXVl dWVTdWJtaXQyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAorICAgIC8qIEZlbmNlcyAqLyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg ICAgTUFDUk8oMSwgMSwgRkZfVktfRVhUX05PX0ZMQUcsICAgICAgICAgICAgICBDcmVhdGVGZW5j ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBNQUNSTygxLCAxLCBGRl9WS19F WFRfTk9fRkxBRywgICAgICAgICAgICAgIFdhaXRGb3JGZW5jZXMpICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAorICAgIE1BQ1JPKDEsIDEsIEZGX1ZLX0VYVF9OT19GTEFHLCAgICAgICAgICAg ICAgR2V0RmVuY2VTdGF0dXMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKKyAgICBNQUNSTygxLCAxLCBGRl9WS19FWFRfTk9fRkxBRywgICAgICAgICAgICAgIFJlc2V0 RmVuY2VzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIE1BQ1JPKDEsIDEsIEZG X1ZLX0VYVF9OT19GTEFHLCAgICAgICAgICAgICAgRGVzdHJveUZlbmNlKSAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAv KiBTZW1hcGhvcmVzICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIE1BQ1JPKDEsIDEsIEZGX1ZLX0VYVF9F WFRFUk5BTF9GRF9TRU0sICAgICAgR2V0U2VtYXBob3JlRmRLSFIpICAgICAgICAgICAgICAgICAg ICAgICBcCisgICAgTUFDUk8oMSwgMSwgRkZfVktfRVhUX0VYVEVSTkFMX0ZEX1NFTSwgICAgICBJ bXBvcnRTZW1hcGhvcmVGZEtIUikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor ICAgIE1BQ1JPKDEsIDEsIEZGX1ZLX0VYVF9OT19GTEFHLCAgICAgICAgICAgICAgQ3JlYXRlU2Vt YXBob3JlKSAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgTUFDUk8oMSwgMSwgRkZfVktf RVhUX05PX0ZMQUcsICAgICAgICAgICAgICBXYWl0U2VtYXBob3JlcykgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKKyAgICBNQUNSTygxLCAxLCBGRl9WS19FWFRfTk9fRkxBRywgICAgICAgICAg ICAgIERlc3Ryb3lTZW1hcGhvcmUpICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgLyogTWVtb3J5ICovICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKKyAgICBNQUNSTygxLCAxLCBGRl9WS19FWFRfRVhURVJOQUxfRkRfTUVNT1JZLCAgIEdldE1l bW9yeUZkS0hSKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIE1BQ1JPKDEsIDEsIEZG X1ZLX0VYVF9OT19GTEFHLCAgICAgICAgICAgICAgR2V0TWVtb3J5RmRQcm9wZXJ0aWVzS0hSKSAg ICAgICAgICAgICAgICBcCisgICAgTUFDUk8oMSwgMSwgRkZfVktfRVhUX0VYVEVSTkFMX0hPU1Rf TUVNT1JZLCBHZXRNZW1vcnlIb3N0UG9pbnRlclByb3BlcnRpZXNFWFQpICAgICAgIFwKKyAgICBN QUNSTygxLCAxLCBGRl9WS19FWFRfTk9fRkxBRywgICAgICAgICAgICAgIEFsbG9jYXRlTWVtb3J5 KSAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIE1BQ1JPKDEsIDEsIEZGX1ZLX0VYVF9O T19GTEFHLCAgICAgICAgICAgICAgTWFwTWVtb3J5KSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCisgICAgTUFDUk8oMSwgMSwgRkZfVktfRVhUX05PX0ZMQUcsICAgICAgICAgICAgICBG bHVzaE1hcHBlZE1lbW9yeVJhbmdlcykgICAgICAgICAgICAgICAgIFwKKyAgICBNQUNSTygxLCAx LCBGRl9WS19FWFRfTk9fRkxBRywgICAgICAgICAgICAgIEludmFsaWRhdGVNYXBwZWRNZW1vcnlS YW5nZXMpICAgICAgICAgICAgXAorICAgIE1BQ1JPKDEsIDEsIEZGX1ZLX0VYVF9OT19GTEFHLCAg ICAgICAgICAgICAgVW5tYXBNZW1vcnkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg ICAgTUFDUk8oMSwgMSwgRkZfVktfRVhUX05PX0ZMQUcsICAgICAgICAgICAgICBGcmVlTWVtb3J5 KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAorICAgIC8qIENvbW1hbmRzICovICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgTUFDUk8o MSwgMSwgRkZfVktfRVhUX05PX0ZMQUcsICAgICAgICAgICAgICBDbWRCaW5kRGVzY3JpcHRvclNl dHMpICAgICAgICAgICAgICAgICAgIFwKKyAgICBNQUNSTygxLCAxLCBGRl9WS19FWFRfTk9fRkxB RywgICAgICAgICAgICAgIENtZFB1c2hDb25zdGFudHMpICAgICAgICAgICAgICAgICAgICAgICAg XAorICAgIE1BQ1JPKDEsIDEsIEZGX1ZLX0VYVF9OT19GTEFHLCAgICAgICAgICAgICAgQ21kQmlu ZFBpcGVsaW5lKSAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgTUFDUk8oMSwgMSwgRkZf VktfRVhUX05PX0ZMQUcsICAgICAgICAgICAgICBDbWRQaXBlbGluZUJhcnJpZXIpICAgICAgICAg ICAgICAgICAgICAgIFwKKyAgICBNQUNSTygxLCAxLCBGRl9WS19FWFRfTk9fRkxBRywgICAgICAg ICAgICAgIENtZENvcHlCdWZmZXJUb0ltYWdlKSAgICAgICAgICAgICAgICAgICAgXAorICAgIE1B Q1JPKDEsIDEsIEZGX1ZLX0VYVF9OT19GTEFHLCAgICAgICAgICAgICAgQ21kQ29weUltYWdlVG9C dWZmZXIpICAgICAgICAgICAgICAgICAgICBcCisgICAgTUFDUk8oMSwgMSwgRkZfVktfRVhUX05P X0ZMQUcsICAgICAgICAgICAgICBDbWRDbGVhckNvbG9ySW1hZ2UpICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAorICAgIE1BQ1JPKDEsIDEsIEZGX1ZLX0VYVF9OT19GTEFHLCAg ICAgICAgICAgICAgQ21kQ29weUJ1ZmZlcikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC8qIEJ1 ZmZlciAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgTUFDUk8oMSwgMSwgRkZfVktfRVhUX05PX0ZM QUcsICAgICAgICAgICAgICBHZXRCdWZmZXJNZW1vcnlSZXF1aXJlbWVudHMyKSAgICAgICAgICAg IFwKKyAgICBNQUNSTygxLCAxLCBGRl9WS19FWFRfTk9fRkxBRywgICAgICAgICAgICAgIENyZWF0 ZUJ1ZmZlcikgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIE1BQ1JPKDEsIDEsIEZG X1ZLX0VYVF9OT19GTEFHLCAgICAgICAgICAgICAgQmluZEJ1ZmZlck1lbW9yeSkgICAgICAgICAg ICAgICAgICAgICAgICBcCisgICAgTUFDUk8oMSwgMSwgRkZfVktfRVhUX05PX0ZMQUcsICAgICAg ICAgICAgICBHZXRCdWZmZXJEZXZpY2VBZGRyZXNzKSAgICAgICAgICAgICAgICAgICAgXAorICAg IE1BQ1JPKDEsIDEsIEZGX1ZLX0VYVF9OT19GTEFHLCAgICAgICAgICAgICAgQ21kRmlsbEJ1ZmZl cikgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBNQUNSTygxLCAxLCBGRl9WS19F WFRfTk9fRkxBRywgICAgICAgICAgICAgIERlc3Ryb3lCdWZmZXIpICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgLyogSW1h Z2UgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBNQUNSTygxLCAxLCBGRl9WS19FWFRfRFJNX01P RElGSUVSX0ZMQUdTLCAgIEdldEltYWdlRHJtRm9ybWF0TW9kaWZpZXJQcm9wZXJ0aWVzRVhUKSAg XAorICAgIE1BQ1JPKDEsIDEsIEZGX1ZLX0VYVF9OT19GTEFHLCAgICAgICAgICAgICAgR2V0SW1h Z2VNZW1vcnlSZXF1aXJlbWVudHMyKSAgICAgICAgICAgICBcCisgICAgTUFDUk8oMSwgMSwgRkZf VktfRVhUX05PX0ZMQUcsICAgICAgICAgICAgICBDcmVhdGVJbWFnZSkgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKKyAgICBNQUNSTygxLCAxLCBGRl9WS19FWFRfTk9fRkxBRywgICAgICAg ICAgICAgIEJpbmRJbWFnZU1lbW9yeTIpICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIE1B Q1JPKDEsIDEsIEZGX1ZLX0VYVF9OT19GTEFHLCAgICAgICAgICAgICAgR2V0SW1hZ2VTdWJyZXNv dXJjZUxheW91dCkgICAgICAgICAgICAgICBcCisgICAgTUFDUk8oMSwgMSwgRkZfVktfRVhUX05P X0ZMQUcsICAgICAgICAgICAgICBEZXN0cm95SW1hZ2UpICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC8qIEltYWdlVmll dyAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCisgICAgTUFDUk8oMSwgMSwgRkZfVktfRVhUX05PX0ZMQUcsICAg ICAgICAgICAgICBDcmVhdGVJbWFnZVZpZXcpICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg ICBNQUNSTygxLCAxLCBGRl9WS19FWFRfTk9fRkxBRywgICAgICAgICAgICAgIERlc3Ryb3lJbWFn ZVZpZXcpICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCisgICAgLyogRGVzY3JpcHRvclNldCAqLyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBNQUNSTygx LCAxLCBGRl9WS19FWFRfTk9fRkxBRywgICAgICAgICAgICAgIENyZWF0ZURlc2NyaXB0b3JTZXRM YXlvdXQpICAgICAgICAgICAgICAgXAorICAgIE1BQ1JPKDEsIDEsIEZGX1ZLX0VYVF9OT19GTEFH LCAgICAgICAgICAgICAgQWxsb2NhdGVEZXNjcmlwdG9yU2V0cykgICAgICAgICAgICAgICAgICBc CisgICAgTUFDUk8oMSwgMSwgRkZfVktfRVhUX05PX0ZMQUcsICAgICAgICAgICAgICBDcmVhdGVE ZXNjcmlwdG9yUG9vbCkgICAgICAgICAgICAgICAgICAgIFwKKyAgICBNQUNSTygxLCAxLCBGRl9W S19FWFRfTk9fRkxBRywgICAgICAgICAgICAgIERlc3Ryb3lEZXNjcmlwdG9yUG9vbCkgICAgICAg ICAgICAgICAgICAgXAorICAgIE1BQ1JPKDEsIDEsIEZGX1ZLX0VYVF9OT19GTEFHLCAgICAgICAg ICAgICAgRGVzdHJveURlc2NyaXB0b3JTZXRMYXlvdXQpICAgICAgICAgICAgICBcCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAvKiBEZXNjcmlwdG9yIGJ1ZmZlcnMgKi8g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCisgICAgTUFDUk8oMSwgMSwgRkZfVktfRVhUX0RFU0NSSVBUT1JfQlVGRkVSLCAgICBH ZXREZXNjcmlwdG9yU2V0TGF5b3V0U2l6ZUVYVCkgICAgICAgICAgICAgXAorICAgIE1BQ1JPKDEs IDEsIEZGX1ZLX0VYVF9ERVNDUklQVE9SX0JVRkZFUiwgICAgR2V0RGVzY3JpcHRvclNldExheW91 dEJpbmRpbmdPZmZzZXRFWFQpICAgIFwKKyAgICBNQUNSTygxLCAxLCBGRl9WS19FWFRfREVTQ1JJ UFRPUl9CVUZGRVIsICAgIEdldERlc2NyaXB0b3JFWFQpICAgICAgICAgICAgICAgICAgICAgICAg ICBcCisgICAgTUFDUk8oMSwgMSwgRkZfVktfRVhUX0RFU0NSSVBUT1JfQlVGRkVSLCAgICBDbWRC aW5kRGVzY3JpcHRvckJ1ZmZlcnNFWFQpICAgICAgICAgICAgICAgXAorICAgIE1BQ1JPKDEsIDEs IEZGX1ZLX0VYVF9ERVNDUklQVE9SX0JVRkZFUiwgICAgQ21kU2V0RGVzY3JpcHRvckJ1ZmZlck9m ZnNldHNFWFQpICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc CisgICAgLyogRGVzY3JpcHRvclVwZGF0ZVRlbXBsYXRlICovICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBNQUNSTygxLCAxLCBGRl9W S19FWFRfTk9fRkxBRywgICAgICAgICAgICAgIFVwZGF0ZURlc2NyaXB0b3JTZXRXaXRoVGVtcGxh dGUpICAgICAgICAgXAorICAgIE1BQ1JPKDEsIDEsIEZGX1ZLX0VYVF9OT19GTEFHLCAgICAgICAg ICAgICAgQ3JlYXRlRGVzY3JpcHRvclVwZGF0ZVRlbXBsYXRlKSAgICAgICAgICBcCisgICAgTUFD Uk8oMSwgMSwgRkZfVktfRVhUX05PX0ZMQUcsICAgICAgICAgICAgICBEZXN0cm95RGVzY3JpcHRv clVwZGF0ZVRlbXBsYXRlKSAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCisgICAgLyogRGVzY3JpcHRvcnMgKi8gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAorICAgIE1BQ1JPKDEsIDEsIEZGX1ZLX0VYVF9OT19GTEFHLCAgICAgICAgICAg ICAgVXBkYXRlRGVzY3JpcHRvclNldHMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKKyAgICBNQUNSTygxLCAxLCBGRl9WS19FWFRfUFVTSF9ERVNDUklQVE9SLCAgICAgIENtZFB1 c2hEZXNjcmlwdG9yU2V0S0hSKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC8qIFF1ZXJpZXMgKi8gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKKyAgICBNQUNSTygxLCAxLCBGRl9WS19FWFRfTk9fRkxBRywgICAgICAgICAg ICAgIENyZWF0ZVF1ZXJ5UG9vbCkgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgTUFD Uk8oMSwgMSwgRkZfVktfRVhUX05PX0ZMQUcsICAgICAgICAgICAgICBHZXRRdWVyeVBvb2xSZXN1 bHRzKSAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIE1BQ1JPKDEsIDEsIEZGX1ZLX0VYVF9O T19GTEFHLCAgICAgICAgICAgICAgUmVzZXRRdWVyeVBvb2wpICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKKyAgICBNQUNSTygxLCAxLCBGRl9WS19FWFRfTk9fRkxBRywgICAgICAgICAgICAg IENtZEJlZ2luUXVlcnkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgTUFDUk8o MSwgMSwgRkZfVktfRVhUX05PX0ZMQUcsICAgICAgICAgICAgICBDbWRFbmRRdWVyeSkgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIE1BQ1JPKDEsIDEsIEZGX1ZLX0VYVF9OT19G TEFHLCAgICAgICAgICAgICAgQ21kUmVzZXRRdWVyeVBvb2wpICAgICAgICAgICAgICAgICAgICAg ICAgIFwKKyAgICBNQUNSTygxLCAxLCBGRl9WS19FWFRfTk9fRkxBRywgICAgICAgICAgICAgIERl c3Ryb3lRdWVyeVBvb2wpICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAorICAgIC8qIHN5bmMyICovICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKKyAgICBNQUNSTygxLCAxLCBGRl9WS19FWFRfTk9fRkxBRywgICAgICAgICAgICAgIENtZFBp cGVsaW5lQmFycmllcjIpICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAorICAgIC8qIEhvc3QgaW1hZ2UgY29weSAqLyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKKyAgICBNQUNSTygxLCAxLCBGRl9WS19FWFRfSE9TVF9JTUFHRV9DT1BZLCAg ICAgIFRyYW5zaXRpb25JbWFnZUxheW91dEVYVCkgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCisgICAgTUFDUk8oMSwgMSwgRkZfVktfRVhUX0hPU1RfSU1BR0VfQ09QWSwgICAgICBDb3B5 TWVtb3J5VG9JbWFnZUVYVCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg IE1BQ1JPKDEsIDEsIEZGX1ZLX0VYVF9IT1NUX0lNQUdFX0NPUFksICAgICAgQ29weUltYWdlVG9N ZW1vcnlFWFQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgLyogVmlkZW8gcXVldWUg Ki8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAorICAgIE1BQ1JPKDEsIDEsIEZGX1ZLX0VYVF9WSURFT19RVUVVRSwg ICAgICAgICAgQ3JlYXRlVmlkZW9TZXNzaW9uS0hSKSAgICAgICAgICAgICAgICAgICAgIFwKKyAg ICBNQUNSTygxLCAxLCBGRl9WS19FWFRfVklERU9fUVVFVUUsICAgICAgICAgIENyZWF0ZVZpZGVv U2Vzc2lvblBhcmFtZXRlcnNLSFIpICAgICAgICAgICBcCisgICAgTUFDUk8oMSwgMSwgRkZfVktf RVhUX1ZJREVPX1FVRVVFLCAgICAgICAgICBHZXRWaWRlb1Nlc3Npb25NZW1vcnlSZXF1aXJlbWVu dHNLSFIpICAgICAgXAorICAgIE1BQ1JPKDEsIDEsIEZGX1ZLX0VYVF9WSURFT19RVUVVRSwgICAg ICAgICAgQmluZFZpZGVvU2Vzc2lvbk1lbW9yeUtIUikgICAgICAgICAgICAgICAgIFwKKyAgICBN QUNSTygxLCAxLCBGRl9WS19FWFRfVklERU9fUVVFVUUsICAgICAgICAgIENtZEJlZ2luVmlkZW9D b2RpbmdLSFIpICAgICAgICAgICAgICAgICAgICBcCisgICAgTUFDUk8oMSwgMSwgRkZfVktfRVhU X1ZJREVPX1FVRVVFLCAgICAgICAgICBDbWRDb250cm9sVmlkZW9Db2RpbmdLSFIpICAgICAgICAg ICAgICAgICAgXAorICAgIE1BQ1JPKDEsIDEsIEZGX1ZLX0VYVF9WSURFT19RVUVVRSwgICAgICAg ICAgQ21kRW5kVmlkZW9Db2RpbmdLSFIpICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBNQUNS TygxLCAxLCBGRl9WS19FWFRfVklERU9fUVVFVUUsICAgICAgICAgIERlc3Ryb3lWaWRlb1Nlc3Np b25QYXJhbWV0ZXJzS0hSKSAgICAgICAgICBcCisgICAgTUFDUk8oMSwgMSwgRkZfVktfRVhUX1ZJ REVPX1FVRVVFLCAgICAgICAgICBEZXN0cm95VmlkZW9TZXNzaW9uS0hSKSAgICAgICAgICAgICAg ICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAvKiBWaWRl byBkZWNvZGluZyAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgTUFDUk8oMSwgMSwgRkZfVktfRVhUX1ZJREVP X0RFQ09ERV9RVUVVRSwgICBDbWREZWNvZGVWaWRlb0tIUikgICAgICAgICAgICAgICAgICAgICAg ICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAvKiBWaWRlbyBl bmNvZGluZyAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCisgICAgTUFDUk8oMSwgMSwgRkZfVktfRVhUX1ZJREVPX0VO Q09ERV9RVUVVRSwgICBDbWRFbmNvZGVWaWRlb0tIUikgICAgICAgICAgICAgICAgICAgICAgICAg XAorICAgIE1BQ1JPKDEsIDEsIEZGX1ZLX0VYVF9WSURFT19FTkNPREVfUVVFVUUsICAgR2V0RW5j b2RlZFZpZGVvU2Vzc2lvblBhcmFtZXRlcnNLSFIpICAgICAgIFwKKyAgICBNQUNSTygxLCAwLCBG Rl9WS19FWFRfVklERU9fRU5DT0RFX1FVRVVFLCAgIEdldFBoeXNpY2FsRGV2aWNlVmlkZW9FbmNv ZGVRdWFsaXR5TGV2ZWxQcm9wZXJ0aWVzS0hSKSBcCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKKyAgICAvKiBQaXBlbGluZSAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIE1BQ1JPKDEs IDEsIEZGX1ZLX0VYVF9OT19GTEFHLCAgICAgICAgICAgICAgQ3JlYXRlUGlwZWxpbmVMYXlvdXQp ICAgICAgICAgICAgICAgICAgICBcCisgICAgTUFDUk8oMSwgMSwgRkZfVktfRVhUX05PX0ZMQUcs ICAgICAgICAgICAgICBEZXN0cm95UGlwZWxpbmVMYXlvdXQpICAgICAgICAgICAgICAgICAgIFwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIC8qIFBpcGVsaW5lTGF5b3V0 ICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCisgICAgTUFDUk8oMSwgMSwgRkZfVktfRVhUX05PX0ZMQUcsICAgICAgICAg ICAgICBDcmVhdGVDb21wdXRlUGlwZWxpbmVzKSAgICAgICAgICAgICAgICAgIFwKKyAgICBNQUNS TygxLCAxLCBGRl9WS19FWFRfTk9fRkxBRywgICAgICAgICAgICAgIERlc3Ryb3lQaXBlbGluZSkg ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCisgICAgLyogU2FtcGxlciAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBNQUNSTygxLCAxLCBG Rl9WS19FWFRfTk9fRkxBRywgICAgICAgICAgICAgIENyZWF0ZVNhbXBsZXJZY2JjckNvbnZlcnNp b24pICAgICAgICAgICAgICBcCisgICAgTUFDUk8oMSwgMSwgRkZfVktfRVhUX05PX0ZMQUcsICAg ICAgICAgICAgICBEZXN0cm95U2FtcGxlclljYmNyQ29udmVyc2lvbikgICAgICAgICAgICAgXAor ICAgIE1BQ1JPKDEsIDEsIEZGX1ZLX0VYVF9OT19GTEFHLCAgICAgICAgICAgICAgQ3JlYXRlU2Ft cGxlcikgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgTUFDUk8oMSwgMSwgRkZfVktf RVhUX05PX0ZMQUcsICAgICAgICAgICAgICBEZXN0cm95U2FtcGxlcikgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgLyog T3B0aWNhbCBmbG93ICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIE1BQ1JPKDEsIDEsIEZGX1ZLX0VYVF9P UFRJQ0FMX0ZMT1csICAgICAgICAgQmluZE9wdGljYWxGbG93U2Vzc2lvbkltYWdlTlYpICAgICAg ICAgICAgIFwKKyAgICBNQUNSTygxLCAxLCBGRl9WS19FWFRfT1BUSUNBTF9GTE9XLCAgICAgICAg IENtZE9wdGljYWxGbG93RXhlY3V0ZU5WKSAgICAgICAgICAgICAgICAgICBcCisgICAgTUFDUk8o MSwgMSwgRkZfVktfRVhUX09QVElDQUxfRkxPVywgICAgICAgICBDcmVhdGVPcHRpY2FsRmxvd1Nl c3Npb25OVikgICAgICAgICAgICAgICAgXAorICAgIE1BQ1JPKDEsIDEsIEZGX1ZLX0VYVF9PUFRJ Q0FMX0ZMT1csICAgICAgICAgRGVzdHJveU9wdGljYWxGbG93U2Vzc2lvbk5WKSAgICAgICAgICAg ICAgIFwKKyAgICBNQUNSTygxLCAwLCBGRl9WS19FWFRfT1BUSUNBTF9GTE9XLCAgICAgICAgIEdl dFBoeXNpY2FsRGV2aWNlT3B0aWNhbEZsb3dJbWFnZUZvcm1hdHNOVilcCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKKyAgICAvKiBTaGFkZXJzICovICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor ICAgIE1BQ1JPKDEsIDEsIEZGX1ZLX0VYVF9OT19GTEFHLCAgICAgICAgICAgICAgQ3JlYXRlU2hh ZGVyTW9kdWxlKSAgICAgICAgICAgICAgICAgICAgICBcCisgICAgTUFDUk8oMSwgMSwgRkZfVktf RVhUX05PX0ZMQUcsICAgICAgICAgICAgICBEZXN0cm95U2hhZGVyTW9kdWxlKSAgICAgICAgICAg ICAgICAgICAgICAgXAorICAgIE1BQ1JPKDEsIDEsIEZGX1ZLX0VYVF9TSEFERVJfT0JKRUNULCAg ICAgICAgQ21kQmluZFNoYWRlcnNFWFQpICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBN QUNSTygxLCAxLCBGRl9WS19FWFRfU0hBREVSX09CSkVDVCwgICAgICAgIENyZWF0ZVNoYWRlcnNF WFQpICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgTUFDUk8oMSwgMSwgRkZfVktfRVhU X1NIQURFUl9PQkpFQ1QsICAgICAgICBEZXN0cm95U2hhZGVyRVhUKSAgICAgICAgICAgICAgICAg ICAgICAgICAgXAorICAgIE1BQ1JPKDEsIDEsIEZGX1ZLX0VYVF9TSEFERVJfT0JKRUNULCAgICAg ICAgR2V0U2hhZGVyQmluYXJ5RGF0YUVYVCkKKworLyogTWFjcm8gY29udGFpbmluZyBldmVyeSB3 aW4zMiBzcGVjaWZpYyBmdW5jdGlvbiB0aGF0IHdlIHV0aWxpemUgaW4gb3VyIGNvZGViYXNlICov CisjZGVmaW5lIEZOX0xJU1RfV0lOMzIoTUFDUk8pICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBNQUNSTygxLCAxLCBGRl9W S19FWFRfRVhURVJOQUxfV0lOMzJfU0VNLCAgICBHZXRTZW1hcGhvcmVXaW4zMkhhbmRsZUtIUikg ICAgICAgICAgICAgXAorICAgIE1BQ1JPKDEsIDEsIEZGX1ZLX0VYVF9FWFRFUk5BTF9XSU4zMl9N RU1PUlksIEdldE1lbW9yeVdpbjMySGFuZGxlS0hSKQorCisvKiBNYWNybyB0byB0dXJuIGEgZnVu Y3Rpb24gbmFtZSBpbnRvIGEgZGVmaW5pdGlvbiAqLworI2RlZmluZSBQRk5fREVGKHJlcV9pbnN0 LCByZXFfZGV2LCBleHRfZmxhZywgbmFtZSkgXAorICAgIFBGTl92ayMjbmFtZSBuYW1lOworCisv KiBTdHJ1Y3R1cmUgd2l0aCB0aGUgZGVmaW5pdGlvbiBvZiBhbGwgbGlzdGVkIGZ1bmN0aW9ucyAq LwordHlwZWRlZiBzdHJ1Y3QgRkZWdWxrYW5GdW5jdGlvbnMgeworICAgIEZOX0xJU1QoUEZOX0RF RikKKyNpZmRlZiBfV0lOMzIKKyAgICBGTl9MSVNUX1dJTjMyKFBGTl9ERUYpCisjZW5kaWYKK30g RkZWdWxrYW5GdW5jdGlvbnM7CisKKyNlbmRpZiAvKiBBVlVUSUxfVlVMS0FOX0ZVTkNUSU9OU19I ICovCi0tIAoyLjQ5LjEKCgpGcm9tIGU5NGFkNjRmZTY0MGFmOThmMzJhZWJjMWViZjlhODRkOTk3 YThiNzggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCkZyb206IEphbWFpa2ExIDxsdWthc3pjejE4 QHdwLnBsPgpEYXRlOiBXZWQsIDMgU2VwIDIwMjUgMTM6MjA6NTIgKzAwMDAKU3ViamVjdDogW1BB VENIIDA1MS8xMThdIENoYW5naW5nIHZ1bGthbiBmaWxlIGRpcmVjdG9yeQoKLS0tCiBsaWJhdnV0 aWwvdnVsa2FuX3NoYWRlcmMuYyB8IDE0NCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgMTQ0IGRlbGV0aW9ucygtKQogZGVsZXRlIG1vZGUgMTAw NjQ0IGxpYmF2dXRpbC92dWxrYW5fc2hhZGVyYy5jCgpkaWZmIC0tZ2l0IGEvbGliYXZ1dGlsL3Z1 bGthbl9zaGFkZXJjLmMgYi9saWJhdnV0aWwvdnVsa2FuX3NoYWRlcmMuYwpkZWxldGVkIGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggZTU2M2I2NDJkZi4uMDAwMDAwMDAwMAotLS0gYS9saWJhdnV0aWwv dnVsa2FuX3NoYWRlcmMuYworKysgL2Rldi9udWxsCkBAIC0xLDE0NCArMCwwIEBACi0vKgotICog VGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgotICoKLSAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3 YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0 aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMg cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVy c2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl cnNpb24uCi0gKgotICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg d2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZl IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGlj ZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2Fy ZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwg Qm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQotICovCi0KLSNpbmNsdWRlIDxzaGFkZXJjL3NoYWRl cmMuaD4KLQotI2luY2x1ZGUgImxpYmF2dXRpbC9tZW0uaCIKLSNpbmNsdWRlICJ2dWxrYW5fc3Bp cnYuaCIKLQotc3RhdGljIGludCBzaGRjX3NoYWRlcl9jb21waWxlKEZGVnVsa2FuQ29udGV4dCAq cywgRkZWa1NQSVJWQ29tcGlsZXIgKmN0eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBGRlZ1bGthblNoYWRlciAqc2hkLCB1aW50OF90ICoqZGF0YSwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzaXplX3QgKnNpemUsIGNvbnN0IGNoYXIgKmVudHJ5cG9pbnQsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqKm9wYXF1ZSkKLXsKLSAgICBpbnQgbG9n bGV2ZWwsIGVyciwgd2FybiwgcmV0OwotICAgIGNvbnN0IGNoYXIgKnN0YXR1cywgKm1lc3NhZ2U7 Ci0gICAgc2hhZGVyY19jb21waWxhdGlvbl9yZXN1bHRfdCByZXM7Ci0gICAgc3RhdGljIGNvbnN0 IGNoYXIgKnNoZGNfcmVzdWx0W10gPSB7Ci0gICAgICAgIFtzaGFkZXJjX2NvbXBpbGF0aW9uX3N0 YXR1c19zdWNjZXNzXSAgICAgICAgICAgID0gInN1Y2Nlc3MiLAotICAgICAgICBbc2hhZGVyY19j b21waWxhdGlvbl9zdGF0dXNfaW52YWxpZF9zdGFnZV0gICAgICA9ICJpbnZhbGlkIHN0YWdlIiwK LSAgICAgICAgW3NoYWRlcmNfY29tcGlsYXRpb25fc3RhdHVzX2NvbXBpbGF0aW9uX2Vycm9yXSAg PSAiZXJyb3IiLAotICAgICAgICBbc2hhZGVyY19jb21waWxhdGlvbl9zdGF0dXNfaW50ZXJuYWxf ZXJyb3JdICAgICA9ICJpbnRlcm5hbCBlcnJvciIsCi0gICAgICAgIFtzaGFkZXJjX2NvbXBpbGF0 aW9uX3N0YXR1c19udWxsX3Jlc3VsdF9vYmplY3RdID0gIm5vIHJlc3VsdCIsCi0gICAgICAgIFtz aGFkZXJjX2NvbXBpbGF0aW9uX3N0YXR1c19pbnZhbGlkX2Fzc2VtYmx5XSAgID0gImludmFsaWQg YXNzZW1ibHkiLAotICAgIH07Ci0gICAgc3RhdGljIGNvbnN0IHNoYWRlcmNfc2hhZGVyX2tpbmQg c2hkY19raW5kW10gPSB7Ci0gICAgICAgIFtWS19TSEFERVJfU1RBR0VfVkVSVEVYX0JJVF0gICA9 IHNoYWRlcmNfZ2xzbF92ZXJ0ZXhfc2hhZGVyLAotICAgICAgICBbVktfU0hBREVSX1NUQUdFX0ZS QUdNRU5UX0JJVF0gPSBzaGFkZXJjX2dsc2xfZnJhZ21lbnRfc2hhZGVyLAotICAgICAgICBbVktf U0hBREVSX1NUQUdFX0NPTVBVVEVfQklUXSAgPSBzaGFkZXJjX2dsc2xfY29tcHV0ZV9zaGFkZXIs Ci0gICAgICAgIFtWS19TSEFERVJfU1RBR0VfTUVTSF9CSVRfRVhUXSA9IHNoYWRlcmNfbWVzaF9z aGFkZXIsCi0gICAgICAgIFtWS19TSEFERVJfU1RBR0VfVEFTS19CSVRfRVhUXSA9IHNoYWRlcmNf dGFza19zaGFkZXIsCi0gICAgICAgIFtWS19TSEFERVJfU1RBR0VfUkFZR0VOX0JJVF9LSFJdID0g c2hhZGVyY19yYXlnZW5fc2hhZGVyLAotICAgICAgICBbVktfU0hBREVSX1NUQUdFX0FOWV9ISVRf QklUX0tIUl0gPSBzaGFkZXJjX2FueWhpdF9zaGFkZXIsCi0gICAgICAgIFtWS19TSEFERVJfU1RB R0VfQ0xPU0VTVF9ISVRfQklUX0tIUl0gPSBzaGFkZXJjX2Nsb3Nlc3RoaXRfc2hhZGVyLAotICAg ICAgICBbVktfU0hBREVSX1NUQUdFX01JU1NfQklUX0tIUl0gPSBzaGFkZXJjX21pc3Nfc2hhZGVy LAotICAgICAgICBbVktfU0hBREVSX1NUQUdFX0lOVEVSU0VDVElPTl9CSVRfS0hSXSA9IHNoYWRl cmNfaW50ZXJzZWN0aW9uX3NoYWRlciwKLSAgICAgICAgW1ZLX1NIQURFUl9TVEFHRV9DQUxMQUJM RV9CSVRfS0hSXSA9IHNoYWRlcmNfY2FsbGFibGVfc2hhZGVyLAotICAgIH07Ci0KLSAgICBzaGFk ZXJjX2NvbXBpbGVfb3B0aW9uc190IG9wdHMgPSBzaGFkZXJjX2NvbXBpbGVfb3B0aW9uc19pbml0 aWFsaXplKCk7Ci0gICAgKm9wYXF1ZSA9IE5VTEw7Ci0gICAgaWYgKCFvcHRzKQotICAgICAgICBy ZXR1cm4gQVZFUlJPUihFTk9NRU0pOwotCi0gICAgc2hhZGVyY19jb21waWxlX29wdGlvbnNfc2V0 X3RhcmdldF9lbnYob3B0cywgc2hhZGVyY190YXJnZXRfZW52X3Z1bGthbiwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFkZXJjX2Vudl92ZXJzaW9uX3Z1bGth bl8xXzMpOwotICAgIHNoYWRlcmNfY29tcGlsZV9vcHRpb25zX3NldF90YXJnZXRfc3BpcnYob3B0 cywgc2hhZGVyY19zcGlydl92ZXJzaW9uXzFfNik7Ci0KLSAgICAvKiBJZiBlaXRoZXIgZXh0ZW5z aW9uIGlzIHNldCwgdHVybiBvbiBkZWJ1ZyBpbmZvICovCi0gICAgaWYgKHMtPmV4dGVuc2lvbnMg JiAoRkZfVktfRVhUX0RFQlVHX1VUSUxTIHwgRkZfVktfRVhUX1JFTEFYRURfRVhURU5ERURfSU5T VFIpKQotICAgICAgICBzaGFkZXJjX2NvbXBpbGVfb3B0aW9uc19zZXRfZ2VuZXJhdGVfZGVidWdf aW5mbyhvcHRzKTsKLQotICAgIGlmIChzLT5leHRlbnNpb25zICYgRkZfVktfRVhUX0RFQlVHX1VU SUxTKQotICAgICAgICBzaGFkZXJjX2NvbXBpbGVfb3B0aW9uc19zZXRfb3B0aW1pemF0aW9uX2xl dmVsKG9wdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc2hhZGVyY19vcHRpbWl6YXRpb25fbGV2ZWxfemVybyk7Ci0gICAgZWxzZQotICAg ICAgICBzaGFkZXJjX2NvbXBpbGVfb3B0aW9uc19zZXRfb3B0aW1pemF0aW9uX2xldmVsKG9wdHMs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c2hhZGVyY19vcHRpbWl6YXRpb25fbGV2ZWxfcGVyZm9ybWFuY2UpOwotCi0gICAgcmVzID0gc2hh ZGVyY19jb21waWxlX2ludG9fc3B2KChzaGFkZXJjX2NvbXBpbGVyX3QpY3R4LT5wcml2LAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGQtPnNyYy5zdHIsIHN0cmxlbihzaGQt PnNyYy5zdHIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGRjX2tpbmRb c2hkLT5zdGFnZV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoZC0+bmFt ZSwgZW50cnlwb2ludCwgb3B0cyk7Ci0gICAgc2hhZGVyY19jb21waWxlX29wdGlvbnNfcmVsZWFz ZShvcHRzKTsKLQotICAgIHJldCA9IHNoYWRlcmNfcmVzdWx0X2dldF9jb21waWxhdGlvbl9zdGF0 dXMocmVzKTsKLSAgICBlcnIgPSBzaGFkZXJjX3Jlc3VsdF9nZXRfbnVtX2Vycm9ycyhyZXMpOwot ICAgIHdhcm4gPSBzaGFkZXJjX3Jlc3VsdF9nZXRfbnVtX3dhcm5pbmdzKHJlcyk7Ci0gICAgbWVz c2FnZSA9IHNoYWRlcmNfcmVzdWx0X2dldF9lcnJvcl9tZXNzYWdlKHJlcyk7Ci0KLSAgICBpZiAo cmV0ICE9IHNoYWRlcmNfY29tcGlsYXRpb25fc3RhdHVzX3N1Y2Nlc3MgJiYgIWVycikKLSAgICAg ICAgZXJyID0gMTsKLQotICAgIGxvZ2xldmVsID0gZXJyID8gQVZfTE9HX0VSUk9SIDogd2FybiA/ IEFWX0xPR19XQVJOSU5HIDogQVZfTE9HX1RSQUNFOwotCi0gICAgZmZfdmtfc2hhZGVyX3ByaW50 KHMsIHNoZCwgbG9nbGV2ZWwpOwotICAgIGlmIChtZXNzYWdlICYmIChlcnIgfHwgd2FybikpCi0g ICAgICAgIGF2X2xvZyhzLCBsb2dsZXZlbCwgIiVzXG4iLCBtZXNzYWdlKTsKLSAgICBzdGF0dXMg PSByZXQgPCBGRl9BUlJBWV9FTEVNUyhzaGRjX3Jlc3VsdCkgPyBzaGRjX3Jlc3VsdFtyZXRdIDog InVua25vd24iOwotICAgIGF2X2xvZyhzLCBsb2dsZXZlbCwgInNoYWRlcmMgY29tcGlsZSBzdGF0 dXMgJyVzJyAoJWQgZXJyb3JzLCAlZCB3YXJuaW5ncylcbiIsCi0gICAgICAgICAgIHN0YXR1cywg ZXJyLCB3YXJuKTsKLQotICAgIGlmIChlcnIgPiAwKQotICAgICAgICByZXR1cm4gQVZFUlJPUihF SU5WQUwpOwotCi0gICAgKmRhdGEgPSAodWludDhfdCAqKXNoYWRlcmNfcmVzdWx0X2dldF9ieXRl cyhyZXMpOwotICAgICpzaXplID0gc2hhZGVyY19yZXN1bHRfZ2V0X2xlbmd0aChyZXMpOwotICAg ICpvcGFxdWUgPSByZXM7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgc2hkY19z aGFkZXJfZnJlZShGRlZrU1BJUlZDb21waWxlciAqY3R4LCB2b2lkICoqb3BhcXVlKQotewotICAg IGlmICghb3BhcXVlIHx8ICEqb3BhcXVlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzaGFkZXJj X3Jlc3VsdF9yZWxlYXNlKChzaGFkZXJjX2NvbXBpbGF0aW9uX3Jlc3VsdF90KSpvcGFxdWUpOwot ICAgICpvcGFxdWUgPSBOVUxMOwotfQotCi1zdGF0aWMgdm9pZCBzaGRjX3VuaW5pdChGRlZrU1BJ UlZDb21waWxlciAqKmN0eCkKLXsKLSAgICBGRlZrU1BJUlZDb21waWxlciAqczsKLQotICAgIGlm ICghY3R4IHx8ICEqY3R4KQotICAgICAgICByZXR1cm47Ci0KLSAgICBzID0gKmN0eDsKLQotICAg IHNoYWRlcmNfY29tcGlsZXJfcmVsZWFzZSgoc2hhZGVyY19jb21waWxlcl90KXMtPnByaXYpOwot ICAgIGF2X2ZyZWVwKGN0eCk7Ci19Ci0KLUZGVmtTUElSVkNvbXBpbGVyICpmZl92a19zaGFkZXJj X2luaXQodm9pZCkKLXsKLSAgICBGRlZrU1BJUlZDb21waWxlciAqcmV0ID0gYXZfbWFsbG9jeihz aXplb2YoKnJldCkpOwotICAgIGlmICghcmV0KQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAg IHJldC0+Y29tcGlsZV9zaGFkZXIgPSBzaGRjX3NoYWRlcl9jb21waWxlOwotICAgIHJldC0+ZnJl ZV9zaGFkZXIgICAgPSBzaGRjX3NoYWRlcl9mcmVlOwotICAgIHJldC0+dW5pbml0ICAgICAgICAg PSBzaGRjX3VuaW5pdDsKLQotICAgIHJldC0+cHJpdiAgICAgICAgICAgPSAodm9pZCAqKXNoYWRl cmNfY29tcGlsZXJfaW5pdGlhbGl6ZSgpOwotICAgIGlmICghcmV0LT5wcml2KQotICAgICAgICBh dl9mcmVlcCgmcmV0KTsKLQotICAgIHJldHVybiByZXQ7Ci19Ci0tIAoyLjQ5LjEKCgpGcm9tIDZk YjRmNDgwNDQ5YTU4MWQxY2IwM2ZlNmUzN2Y2ZTg0ZjlmMzliOTEgTW9uIFNlcCAxNyAwMDowMDow MCAyMDAxCkZyb206IEphbWFpa2ExIDxsdWthc3pjejE4QHdwLnBsPgpEYXRlOiBXZWQsIDMgU2Vw IDIwMjUgMTM6MjE6MTcgKzAwMDAKU3ViamVjdDogW1BBVENIIDA1Mi8xMThdIENoYW5naW5nIHZ1 bGthbiBmaWxlIGRpcmVjdG9yeQoKLS0tCiBsaWJhdnV0aWwvdnVsa2FuL3Z1bGthbl9zaGFkZXJj LmMgfCAxNDQgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiAxIGZpbGUgY2hhbmdlZCwg MTQ0IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJhdnV0aWwvdnVsa2FuL3Z1 bGthbl9zaGFkZXJjLmMKCmRpZmYgLS1naXQgYS9saWJhdnV0aWwvdnVsa2FuL3Z1bGthbl9zaGFk ZXJjLmMgYi9saWJhdnV0aWwvdnVsa2FuL3Z1bGthbl9zaGFkZXJjLmMKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uZTU2M2I2NDJkZgotLS0gL2Rldi9udWxsCisrKyBiL2xp YmF2dXRpbC92dWxrYW4vdnVsa2FuX3NoYWRlcmMuYwpAQCAtMCwwICsxLDE0NCBAQAorLyoKKyAq IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KKyAqCisgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0 d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl cnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2 ZXJzaW9uLgorICoKKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0 IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2 ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2 ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExp Y2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdh cmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKyAqLworCisjaW5jbHVkZSA8c2hhZGVyYy9zaGFk ZXJjLmg+CisKKyNpbmNsdWRlICJsaWJhdnV0aWwvbWVtLmgiCisjaW5jbHVkZSAidnVsa2FuX3Nw aXJ2LmgiCisKK3N0YXRpYyBpbnQgc2hkY19zaGFkZXJfY29tcGlsZShGRlZ1bGthbkNvbnRleHQg KnMsIEZGVmtTUElSVkNvbXBpbGVyICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgRkZWdWxrYW5TaGFkZXIgKnNoZCwgdWludDhfdCAqKmRhdGEsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc2l6ZV90ICpzaXplLCBjb25zdCBjaGFyICplbnRyeXBvaW50LAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKipvcGFxdWUpCit7CisgICAgaW50IGxv Z2xldmVsLCBlcnIsIHdhcm4sIHJldDsKKyAgICBjb25zdCBjaGFyICpzdGF0dXMsICptZXNzYWdl OworICAgIHNoYWRlcmNfY29tcGlsYXRpb25fcmVzdWx0X3QgcmVzOworICAgIHN0YXRpYyBjb25z dCBjaGFyICpzaGRjX3Jlc3VsdFtdID0geworICAgICAgICBbc2hhZGVyY19jb21waWxhdGlvbl9z dGF0dXNfc3VjY2Vzc10gICAgICAgICAgICA9ICJzdWNjZXNzIiwKKyAgICAgICAgW3NoYWRlcmNf Y29tcGlsYXRpb25fc3RhdHVzX2ludmFsaWRfc3RhZ2VdICAgICAgPSAiaW52YWxpZCBzdGFnZSIs CisgICAgICAgIFtzaGFkZXJjX2NvbXBpbGF0aW9uX3N0YXR1c19jb21waWxhdGlvbl9lcnJvcl0g ID0gImVycm9yIiwKKyAgICAgICAgW3NoYWRlcmNfY29tcGlsYXRpb25fc3RhdHVzX2ludGVybmFs X2Vycm9yXSAgICAgPSAiaW50ZXJuYWwgZXJyb3IiLAorICAgICAgICBbc2hhZGVyY19jb21waWxh dGlvbl9zdGF0dXNfbnVsbF9yZXN1bHRfb2JqZWN0XSA9ICJubyByZXN1bHQiLAorICAgICAgICBb c2hhZGVyY19jb21waWxhdGlvbl9zdGF0dXNfaW52YWxpZF9hc3NlbWJseV0gICA9ICJpbnZhbGlk IGFzc2VtYmx5IiwKKyAgICB9OworICAgIHN0YXRpYyBjb25zdCBzaGFkZXJjX3NoYWRlcl9raW5k IHNoZGNfa2luZFtdID0geworICAgICAgICBbVktfU0hBREVSX1NUQUdFX1ZFUlRFWF9CSVRdICAg PSBzaGFkZXJjX2dsc2xfdmVydGV4X3NoYWRlciwKKyAgICAgICAgW1ZLX1NIQURFUl9TVEFHRV9G UkFHTUVOVF9CSVRdID0gc2hhZGVyY19nbHNsX2ZyYWdtZW50X3NoYWRlciwKKyAgICAgICAgW1ZL X1NIQURFUl9TVEFHRV9DT01QVVRFX0JJVF0gID0gc2hhZGVyY19nbHNsX2NvbXB1dGVfc2hhZGVy LAorICAgICAgICBbVktfU0hBREVSX1NUQUdFX01FU0hfQklUX0VYVF0gPSBzaGFkZXJjX21lc2hf c2hhZGVyLAorICAgICAgICBbVktfU0hBREVSX1NUQUdFX1RBU0tfQklUX0VYVF0gPSBzaGFkZXJj X3Rhc2tfc2hhZGVyLAorICAgICAgICBbVktfU0hBREVSX1NUQUdFX1JBWUdFTl9CSVRfS0hSXSA9 IHNoYWRlcmNfcmF5Z2VuX3NoYWRlciwKKyAgICAgICAgW1ZLX1NIQURFUl9TVEFHRV9BTllfSElU X0JJVF9LSFJdID0gc2hhZGVyY19hbnloaXRfc2hhZGVyLAorICAgICAgICBbVktfU0hBREVSX1NU QUdFX0NMT1NFU1RfSElUX0JJVF9LSFJdID0gc2hhZGVyY19jbG9zZXN0aGl0X3NoYWRlciwKKyAg ICAgICAgW1ZLX1NIQURFUl9TVEFHRV9NSVNTX0JJVF9LSFJdID0gc2hhZGVyY19taXNzX3NoYWRl ciwKKyAgICAgICAgW1ZLX1NIQURFUl9TVEFHRV9JTlRFUlNFQ1RJT05fQklUX0tIUl0gPSBzaGFk ZXJjX2ludGVyc2VjdGlvbl9zaGFkZXIsCisgICAgICAgIFtWS19TSEFERVJfU1RBR0VfQ0FMTEFC TEVfQklUX0tIUl0gPSBzaGFkZXJjX2NhbGxhYmxlX3NoYWRlciwKKyAgICB9OworCisgICAgc2hh ZGVyY19jb21waWxlX29wdGlvbnNfdCBvcHRzID0gc2hhZGVyY19jb21waWxlX29wdGlvbnNfaW5p dGlhbGl6ZSgpOworICAgICpvcGFxdWUgPSBOVUxMOworICAgIGlmICghb3B0cykKKyAgICAgICAg cmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKKworICAgIHNoYWRlcmNfY29tcGlsZV9vcHRpb25zX3Nl dF90YXJnZXRfZW52KG9wdHMsIHNoYWRlcmNfdGFyZ2V0X2Vudl92dWxrYW4sCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhZGVyY19lbnZfdmVyc2lvbl92dWxr YW5fMV8zKTsKKyAgICBzaGFkZXJjX2NvbXBpbGVfb3B0aW9uc19zZXRfdGFyZ2V0X3NwaXJ2KG9w dHMsIHNoYWRlcmNfc3BpcnZfdmVyc2lvbl8xXzYpOworCisgICAgLyogSWYgZWl0aGVyIGV4dGVu c2lvbiBpcyBzZXQsIHR1cm4gb24gZGVidWcgaW5mbyAqLworICAgIGlmIChzLT5leHRlbnNpb25z ICYgKEZGX1ZLX0VYVF9ERUJVR19VVElMUyB8IEZGX1ZLX0VYVF9SRUxBWEVEX0VYVEVOREVEX0lO U1RSKSkKKyAgICAgICAgc2hhZGVyY19jb21waWxlX29wdGlvbnNfc2V0X2dlbmVyYXRlX2RlYnVn X2luZm8ob3B0cyk7CisKKyAgICBpZiAocy0+ZXh0ZW5zaW9ucyAmIEZGX1ZLX0VYVF9ERUJVR19V VElMUykKKyAgICAgICAgc2hhZGVyY19jb21waWxlX29wdGlvbnNfc2V0X29wdGltaXphdGlvbl9s ZXZlbChvcHRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHNoYWRlcmNfb3B0aW1pemF0aW9uX2xldmVsX3plcm8pOworICAgIGVsc2UKKyAg ICAgICAgc2hhZGVyY19jb21waWxlX29wdGlvbnNfc2V0X29wdGltaXphdGlvbl9sZXZlbChvcHRz LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHNoYWRlcmNfb3B0aW1pemF0aW9uX2xldmVsX3BlcmZvcm1hbmNlKTsKKworICAgIHJlcyA9IHNo YWRlcmNfY29tcGlsZV9pbnRvX3Nwdigoc2hhZGVyY19jb21waWxlcl90KWN0eC0+cHJpdiwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hkLT5zcmMuc3RyLCBzdHJsZW4oc2hk LT5zcmMuc3RyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hkY19raW5k W3NoZC0+c3RhZ2VdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGQtPm5h bWUsIGVudHJ5cG9pbnQsIG9wdHMpOworICAgIHNoYWRlcmNfY29tcGlsZV9vcHRpb25zX3JlbGVh c2Uob3B0cyk7CisKKyAgICByZXQgPSBzaGFkZXJjX3Jlc3VsdF9nZXRfY29tcGlsYXRpb25fc3Rh dHVzKHJlcyk7CisgICAgZXJyID0gc2hhZGVyY19yZXN1bHRfZ2V0X251bV9lcnJvcnMocmVzKTsK KyAgICB3YXJuID0gc2hhZGVyY19yZXN1bHRfZ2V0X251bV93YXJuaW5ncyhyZXMpOworICAgIG1l c3NhZ2UgPSBzaGFkZXJjX3Jlc3VsdF9nZXRfZXJyb3JfbWVzc2FnZShyZXMpOworCisgICAgaWYg KHJldCAhPSBzaGFkZXJjX2NvbXBpbGF0aW9uX3N0YXR1c19zdWNjZXNzICYmICFlcnIpCisgICAg ICAgIGVyciA9IDE7CisKKyAgICBsb2dsZXZlbCA9IGVyciA/IEFWX0xPR19FUlJPUiA6IHdhcm4g PyBBVl9MT0dfV0FSTklORyA6IEFWX0xPR19UUkFDRTsKKworICAgIGZmX3ZrX3NoYWRlcl9wcmlu dChzLCBzaGQsIGxvZ2xldmVsKTsKKyAgICBpZiAobWVzc2FnZSAmJiAoZXJyIHx8IHdhcm4pKQor ICAgICAgICBhdl9sb2cocywgbG9nbGV2ZWwsICIlc1xuIiwgbWVzc2FnZSk7CisgICAgc3RhdHVz ID0gcmV0IDwgRkZfQVJSQVlfRUxFTVMoc2hkY19yZXN1bHQpID8gc2hkY19yZXN1bHRbcmV0XSA6 ICJ1bmtub3duIjsKKyAgICBhdl9sb2cocywgbG9nbGV2ZWwsICJzaGFkZXJjIGNvbXBpbGUgc3Rh dHVzICclcycgKCVkIGVycm9ycywgJWQgd2FybmluZ3MpXG4iLAorICAgICAgICAgICBzdGF0dXMs IGVyciwgd2Fybik7CisKKyAgICBpZiAoZXJyID4gMCkKKyAgICAgICAgcmV0dXJuIEFWRVJST1Io RUlOVkFMKTsKKworICAgICpkYXRhID0gKHVpbnQ4X3QgKilzaGFkZXJjX3Jlc3VsdF9nZXRfYnl0 ZXMocmVzKTsKKyAgICAqc2l6ZSA9IHNoYWRlcmNfcmVzdWx0X2dldF9sZW5ndGgocmVzKTsKKyAg ICAqb3BhcXVlID0gcmVzOworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNoZGNf c2hhZGVyX2ZyZWUoRkZWa1NQSVJWQ29tcGlsZXIgKmN0eCwgdm9pZCAqKm9wYXF1ZSkKK3sKKyAg ICBpZiAoIW9wYXF1ZSB8fCAhKm9wYXF1ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc2hhZGVy Y19yZXN1bHRfcmVsZWFzZSgoc2hhZGVyY19jb21waWxhdGlvbl9yZXN1bHRfdCkqb3BhcXVlKTsK KyAgICAqb3BhcXVlID0gTlVMTDsKK30KKworc3RhdGljIHZvaWQgc2hkY191bmluaXQoRkZWa1NQ SVJWQ29tcGlsZXIgKipjdHgpCit7CisgICAgRkZWa1NQSVJWQ29tcGlsZXIgKnM7CisKKyAgICBp ZiAoIWN0eCB8fCAhKmN0eCkKKyAgICAgICAgcmV0dXJuOworCisgICAgcyA9ICpjdHg7CisKKyAg ICBzaGFkZXJjX2NvbXBpbGVyX3JlbGVhc2UoKHNoYWRlcmNfY29tcGlsZXJfdClzLT5wcml2KTsK KyAgICBhdl9mcmVlcChjdHgpOworfQorCitGRlZrU1BJUlZDb21waWxlciAqZmZfdmtfc2hhZGVy Y19pbml0KHZvaWQpCit7CisgICAgRkZWa1NQSVJWQ29tcGlsZXIgKnJldCA9IGF2X21hbGxvY3oo c2l6ZW9mKCpyZXQpKTsKKyAgICBpZiAoIXJldCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAg ICByZXQtPmNvbXBpbGVfc2hhZGVyID0gc2hkY19zaGFkZXJfY29tcGlsZTsKKyAgICByZXQtPmZy ZWVfc2hhZGVyICAgID0gc2hkY19zaGFkZXJfZnJlZTsKKyAgICByZXQtPnVuaW5pdCAgICAgICAg ID0gc2hkY191bmluaXQ7CisKKyAgICByZXQtPnByaXYgICAgICAgICAgID0gKHZvaWQgKilzaGFk ZXJjX2NvbXBpbGVyX2luaXRpYWxpemUoKTsKKyAgICBpZiAoIXJldC0+cHJpdikKKyAgICAgICAg YXZfZnJlZXAoJnJldCk7CisKKyAgICByZXR1cm4gcmV0OworfQotLSAKMi40OS4xCgoKRnJvbSBl M2JkN2NjNGEyZjliNThhMjlmMTEwNjY0ZmYxNzhhODIwODc5ZmFjIE1vbiBTZXAgMTcgMDA6MDA6 MDAgMjAwMQpGcm9tOiBKYW1haWthMSA8bHVrYXN6Y3oxOEB3cC5wbD4KRGF0ZTogV2VkLCAzIFNl cCAyMDI1IDEzOjIxOjM5ICswMDAwClN1YmplY3Q6IFtQQVRDSCAwNTMvMTE4XSBDaGFuZ2luZyB2 dWxrYW4gZmlsZSBkaXJlY3RvcnkKCi0tLQogbGliYXZ1dGlsL3Z1bGthbl9sb2FkZXIuaCB8IDE4 OSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQs IDE4OSBkZWxldGlvbnMoLSkKIGRlbGV0ZSBtb2RlIDEwMDY0NCBsaWJhdnV0aWwvdnVsa2FuX2xv YWRlci5oCgpkaWZmIC0tZ2l0IGEvbGliYXZ1dGlsL3Z1bGthbl9sb2FkZXIuaCBiL2xpYmF2dXRp bC92dWxrYW5fbG9hZGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyMDc1MTE2 NjMuLjAwMDAwMDAwMDAKLS0tIGEvbGliYXZ1dGlsL3Z1bGthbl9sb2FkZXIuaAorKysgL2Rldi9u dWxsCkBAIC0xLDE4OSArMCwwIEBACi0vKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVn LgotICoKLSAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp dCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIg R2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9y IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogRkZtcGVnIGlzIGRp c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lU SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgot ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg U2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl dGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V IExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYg bm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEg RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQot ICovCi0KLSNpZm5kZWYgQVZVVElMX1ZVTEtBTl9MT0FERVJfSAotI2RlZmluZSBBVlVUSUxfVlVM S0FOX0xPQURFUl9ICi0KLSNpbmNsdWRlIDxzdGRpby5oPgotCi0jaW5jbHVkZSAiYXZhc3NlcnQu aCIKLSNpbmNsdWRlICJ2dWxrYW5fZnVuY3Rpb25zLmgiCi0KLS8qIE1hY3JvIHRvIHR1cm4gYSBm dW5jdGlvbiBuYW1lIGludG8gYSBsb2FkZXIgc3RydWN0ICovCi0jZGVmaW5lIFBGTl9MT0FEX0lO Rk8ocmVxX2luc3QsIHJlcV9kZXYsIGV4dF9mbGFnLCBuYW1lKSBcCi0gICAgeyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHJlcV9p bnN0LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHJl cV9kZXYsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAg IG9mZnNldG9mKEZGVnVsa2FuRnVuY3Rpb25zLCBuYW1lKSwgICAgICAgICAgICAgICBcCi0gICAg ICAgIGV4dF9mbGFnLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g ICAgfSwKLQotc3RhdGljIGlubGluZSB1aW50NjRfdCBmZl92a19leHRlbnNpb25zX3RvX21hc2so Y29uc3QgY2hhciAqIGNvbnN0ICpleHRlbnNpb25zLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaW50IG5iX2V4dGVuc2lvbnMpCi17Ci0gICAgc3RhdGlj IGNvbnN0IHN0cnVjdCBFeHRlbnNpb25NYXAgewotICAgICAgICBjb25zdCBjaGFyICpuYW1lOwot ICAgICAgICBGRlZ1bGthbkV4dGVuc2lvbnMgZmxhZzsKLSAgICB9IGV4dGVuc2lvbl9tYXBbXSA9 IHsKLSAgICAgICAgLyogSW5zdGFuY2UgZXh0ZW5zaW9ucyAqLwotICAgICAgICB7IFZLX0VYVF9E RUJVR19VVElMU19FWFRFTlNJT05fTkFNRSwgICAgICAgICAgICAgICAgICAgICAgICAgRkZfVktf RVhUX0RFQlVHX1VUSUxTICAgICAgICAgICAgfSwKLQotICAgICAgICAvKiBEZXZpY2UgZXh0ZW5z aW9ucyAqLwotI2lmZGVmIFZLX0tIUl9zaGFkZXJfcmVsYXhlZF9leHRlbmRlZF9pbnN0cnVjdGlv bgotICAgICAgICB7IFZLX0tIUl9TSEFERVJfUkVMQVhFRF9FWFRFTkRFRF9JTlNUUlVDVElPTl9F WFRFTlNJT05fTkFNRSwgRkZfVktfRVhUX1JFTEFYRURfRVhURU5ERURfSU5TVFIgfSwKLSNlbmRp ZgotICAgICAgICB7IFZLX0VYVF9FWFRFUk5BTF9NRU1PUllfRE1BX0JVRl9FWFRFTlNJT05fTkFN RSwgICBGRl9WS19FWFRfRVhURVJOQUxfRE1BQlVGX01FTU9SWSB9LAotICAgICAgICB7IFZLX0VY VF9JTUFHRV9EUk1fRk9STUFUX01PRElGSUVSX0VYVEVOU0lPTl9OQU1FLCBGRl9WS19FWFRfRFJN X01PRElGSUVSX0ZMQUdTICAgICB9LAotICAgICAgICB7IFZLX0tIUl9FWFRFUk5BTF9NRU1PUllf RkRfRVhURU5TSU9OX05BTUUsICAgICAgICBGRl9WS19FWFRfRVhURVJOQUxfRkRfTUVNT1JZICAg ICB9LAotICAgICAgICB7IFZLX0tIUl9FWFRFUk5BTF9TRU1BUEhPUkVfRkRfRVhURU5TSU9OX05B TUUsICAgICBGRl9WS19FWFRfRVhURVJOQUxfRkRfU0VNICAgICAgICB9LAotICAgICAgICB7IFZL X0VYVF9FWFRFUk5BTF9NRU1PUllfSE9TVF9FWFRFTlNJT05fTkFNRSwgICAgICBGRl9WS19FWFRf RVhURVJOQUxfSE9TVF9NRU1PUlkgICB9LAotICAgICAgICB7IFZLX0VYVF9ERUJVR19VVElMU19F WFRFTlNJT05fTkFNRSwgICAgICAgICAgICAgICBGRl9WS19FWFRfREVCVUdfVVRJTFMgICAgICAg ICAgICB9LAotICAgICAgICB7IFZLX0VYVF9QSFlTSUNBTF9ERVZJQ0VfRFJNX0VYVEVOU0lPTl9O QU1FLCAgICAgICBGRl9WS19FWFRfREVWSUNFX0RSTSAgICAgICAgICAgICB9LAotICAgICAgICB7 IFZLX0VYVF9TSEFERVJfQVRPTUlDX0ZMT0FUX0VYVEVOU0lPTl9OQU1FLCAgICAgICBGRl9WS19F WFRfQVRPTUlDX0ZMT0FUICAgICAgICAgICB9LAotICAgICAgICB7IFZLX0tIUl9DT09QRVJBVElW RV9NQVRSSVhfRVhURU5TSU9OX05BTUUsICAgICAgICBGRl9WS19FWFRfQ09PUF9NQVRSSVggICAg ICAgICAgICB9LAotICAgICAgICB7IFZLX05WX09QVElDQUxfRkxPV19FWFRFTlNJT05fTkFNRSwg ICAgICAgICAgICAgICBGRl9WS19FWFRfT1BUSUNBTF9GTE9XICAgICAgICAgICB9LAotICAgICAg ICB7IFZLX0VYVF9TSEFERVJfT0JKRUNUX0VYVEVOU0lPTl9OQU1FLCAgICAgICAgICAgICBGRl9W S19FWFRfU0hBREVSX09CSkVDVCAgICAgICAgICB9LAotICAgICAgICB7IFZLX0tIUl9TSEFERVJf U1VCR1JPVVBfUk9UQVRFX0VYVEVOU0lPTl9OQU1FLCAgICBGRl9WS19FWFRfU1VCR1JPVVBfUk9U QVRFICAgICAgICB9LAotICAgICAgICB7IFZLX0VYVF9IT1NUX0lNQUdFX0NPUFlfRVhURU5TSU9O X05BTUUsICAgICAgICAgICBGRl9WS19FWFRfSE9TVF9JTUFHRV9DT1BZICAgICAgICB9LAotICAg ICAgICB7IFZLX0tIUl9WSURFT19NQUlOVEVOQU5DRV8xX0VYVEVOU0lPTl9OQU1FLCAgICAgICBG Rl9WS19FWFRfVklERU9fTUFJTlRFTkFOQ0VfMSAgICB9LAotI2lmZGVmIFZLX0tIUl92aWRlb19t YWludGVuYW5jZTIKLSAgICAgICAgeyBWS19LSFJfVklERU9fTUFJTlRFTkFOQ0VfMl9FWFRFTlNJ T05fTkFNRSwgICAgICAgRkZfVktfRVhUX1ZJREVPX01BSU5URU5BTkNFXzIgICAgfSwKLSNlbmRp ZgotI2lmZGVmIF9XSU4zMgotICAgICAgICB7IFZLX0tIUl9FWFRFUk5BTF9NRU1PUllfV0lOMzJf RVhURU5TSU9OX05BTUUsICAgICBGRl9WS19FWFRfRVhURVJOQUxfV0lOMzJfTUVNT1JZICB9LAot ICAgICAgICB7IFZLX0tIUl9FWFRFUk5BTF9TRU1BUEhPUkVfV0lOMzJfRVhURU5TSU9OX05BTUUs ICBGRl9WS19FWFRfRVhURVJOQUxfV0lOMzJfU0VNICAgICB9LAotI2VuZGlmCi0gICAgICAgIHsg VktfRVhUX0RFU0NSSVBUT1JfQlVGRkVSX0VYVEVOU0lPTl9OQU1FLCAgICAgICAgIEZGX1ZLX0VY VF9ERVNDUklQVE9SX0JVRkZFUiwgICAgIH0sCi0gICAgICAgIHsgVktfS0hSX1ZJREVPX1FVRVVF X0VYVEVOU0lPTl9OQU1FLCAgICAgICAgICAgICAgIEZGX1ZLX0VYVF9WSURFT19RVUVVRSAgICAg ICAgICAgIH0sCi0gICAgICAgIHsgVktfS0hSX1ZJREVPX0VOQ09ERV9RVUVVRV9FWFRFTlNJT05f TkFNRSwgICAgICAgIEZGX1ZLX0VYVF9WSURFT19FTkNPREVfUVVFVUUgICAgIH0sCi0gICAgICAg IHsgVktfS0hSX1ZJREVPX0RFQ09ERV9RVUVVRV9FWFRFTlNJT05fTkFNRSwgICAgICAgIEZGX1ZL X0VYVF9WSURFT19ERUNPREVfUVVFVUUgICAgIH0sCi0gICAgICAgIHsgVktfS0hSX1ZJREVPX0VO Q09ERV9IMjY0X0VYVEVOU0lPTl9OQU1FLCAgICAgICAgIEZGX1ZLX0VYVF9WSURFT19FTkNPREVf SDI2NCAgICAgIH0sCi0gICAgICAgIHsgVktfS0hSX1ZJREVPX0RFQ09ERV9IMjY0X0VYVEVOU0lP Tl9OQU1FLCAgICAgICAgIEZGX1ZLX0VYVF9WSURFT19ERUNPREVfSDI2NCAgICAgIH0sCi0gICAg ICAgIHsgVktfS0hSX1ZJREVPX0VOQ09ERV9IMjY1X0VYVEVOU0lPTl9OQU1FLCAgICAgICAgIEZG X1ZLX0VYVF9WSURFT19FTkNPREVfSDI2NSAgICAgIH0sCi0gICAgICAgIHsgVktfS0hSX1ZJREVP X0RFQ09ERV9IMjY1X0VYVEVOU0lPTl9OQU1FLCAgICAgICAgIEZGX1ZLX0VYVF9WSURFT19ERUNP REVfSDI2NSAgICAgIH0sCi0jaWZkZWYgVktfS0hSX3ZpZGVvX2RlY29kZV92cDkKLSAgICAgICAg eyBWS19LSFJfVklERU9fREVDT0RFX1ZQOV9FWFRFTlNJT05fTkFNRSwgICAgICAgICAgRkZfVktf RVhUX1ZJREVPX0RFQ09ERV9WUDkgICAgICAgfSwKLSNlbmRpZgotICAgICAgICB7IFZLX0tIUl9W SURFT19ERUNPREVfQVYxX0VYVEVOU0lPTl9OQU1FLCAgICAgICAgICBGRl9WS19FWFRfVklERU9f REVDT0RFX0FWMSAgICAgICB9LAotICAgICAgICB7IFZLX0tIUl9QVVNIX0RFU0NSSVBUT1JfRVhU RU5TSU9OX05BTUUsICAgICAgICAgICBGRl9WS19FWFRfUFVTSF9ERVNDUklQVE9SICAgICAgICB9 LAotI2lmZGVmIFZLX0tIUl9zaGFkZXJfZXhwZWN0X2Fzc3VtZQotICAgICAgICB7IFZLX0tIUl9T SEFERVJfRVhQRUNUX0FTU1VNRV9FWFRFTlNJT05fTkFNRSwgICAgICBGRl9WS19FWFRfRVhQRUNU X0FTU1VNRSAgICAgICAgICB9LAotI2VuZGlmCi0jaWZkZWYgVktfS0hSX3ZpZGVvX2VuY29kZV9h djEKLSAgICAgICAgeyBWS19LSFJfVklERU9fRU5DT0RFX0FWMV9FWFRFTlNJT05fTkFNRSwgICAg ICAgICAgRkZfVktfRVhUX1ZJREVPX0VOQ09ERV9BVjEgICAgICAgfSwKLSNlbmRpZgotICAgIH07 Ci0KLSAgICBGRlZ1bGthbkV4dGVuc2lvbnMgbWFzayA9IDB4MDsKLQotICAgIGZvciAoaW50IGkg PSAwOyBpIDwgbmJfZXh0ZW5zaW9uczsgaSsrKSB7Ci0gICAgICAgIGZvciAoaW50IGogPSAwOyBq IDwgRkZfQVJSQVlfRUxFTVMoZXh0ZW5zaW9uX21hcCk7IGorKykgewotICAgICAgICAgICAgaWYg KCFzdHJjbXAoZXh0ZW5zaW9uc1tpXSwgZXh0ZW5zaW9uX21hcFtqXS5uYW1lKSkgewotICAgICAg ICAgICAgICAgIG1hc2sgfD0gZXh0ZW5zaW9uX21hcFtqXS5mbGFnOwotICAgICAgICAgICAgICAg IGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJu IG1hc2s7Ci19Ci0KLS8qKgotICogRnVuY3Rpb24gbG9hZGVyLgotICogVnVsa2FuIGZ1bmN0aW9u IGZyb20gc2NyYXRjaCBsb2FkaW5nIGhhcHBlbnMgaW4gMyBzdGFnZXMgLSB0aGUgZmlyc3Qgb25l Ci0gKiBpcyBiZWZvcmUgYW55IGluaXRpYWxpemF0aW9uIGhhcyBoYXBwZW5lZCwgYW5kIHlvdSBo YXZlIG5laXRoZXIgYW4gaW5zdGFuY2UKLSAqIHN0cnVjdHVyZSBub3IgYSBkZXZpY2Ugc3RydWN0 dXJlLiBBdCB0aGlzIHN0YWdlLCB5b3UgY2FuIG9ubHkgZ2V0IHRoZSBiYXJlCi0gKiBtaW5pbWFs cyB0byBpbml0aWFsaXplIGFuIGluc3RhbmNlLgotICogVGhlIHNlY29uZCBzdGFnZSBpcyB3aGVu IHlvdSBoYXZlIGFuIGluc3RhbmNlLiBBdCB0aGlzIHN0YWdlLCB5b3UgY2FuCi0gKiBpbml0aWFs aXplIGEgVmtEZXZpY2UsIGFuZCBoYXZlIGFuIGlkZWEgb2Ygd2hhdCBleHRlbnNpb25zIGVhY2gg ZGV2aWNlCi0gKiBzdXBwb3J0cy4KLSAqIEZpbmFsbHksIGluIHRoZSB0aGlyZCBzdGFnZSwgeW91 IGNhbiBwcm9jZWVkIGFuZCBsb2FkIGFsbCBjb3JlIGZ1bmN0aW9ucywKLSAqIHBsdXMgeW91IGNh biBiZSBzdXJlIHRoYXQgYW55IGV4dGVuc2lvbnMgeW91J3ZlIGVuYWJsZWQgZHVyaW5nIGRldmlj ZQotICogaW5pdGlhbGl6YXRpb24gd2lsbCBiZSBhdmFpbGFibGUuCi0gKi8KLXN0YXRpYyBpbmxp bmUgaW50IGZmX3ZrX2xvYWRfZnVuY3Rpb25zKEFWSFdEZXZpY2VDb250ZXh0ICpjdHgsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGRlZ1bGthbkZ1bmN0aW9ucyAqdmss Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCBleHRlbnNp b25zX21hc2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaGFz X2luc3QsIGludCBoYXNfZGV2KQotewotICAgIEFWVnVsa2FuRGV2aWNlQ29udGV4dCAqaHdjdHgg PSBjdHgtPmh3Y3R4OwotCi0gICAgc3RhdGljIGNvbnN0IHN0cnVjdCBGdW5jdGlvbkxvYWRJbmZv IHsKLSAgICAgICAgY2hhciByZXFfaW5zdDsKLSAgICAgICAgY2hhciByZXFfZGV2OwotICAgICAg ICB1aW50MTZfdCBzdHJ1Y3Rfb2Zmc2V0OwotICAgICAgICBGRlZ1bGthbkV4dGVuc2lvbnMgZXh0 X2ZsYWc7Ci0gICAgfSB2a19sb2FkX2luZm9bXSA9IHsKLSAgICAgICAgRk5fTElTVChQRk5fTE9B RF9JTkZPKQotI2lmZGVmIF9XSU4zMgotICAgICAgICBGTl9MSVNUX1dJTjMyKFBGTl9MT0FEX0lO Rk8pCi0jZW5kaWYKLSAgICB9OwotICAgIC8vIENvbmNhdGVuYXRlIHRoZSBuYW1lcyB0byBhdm9p ZCByZWxvY2F0aW9ucy4gVGhlIHJlc3VsdGluZyBzdHJpbmcKLSAgICAvLyB3aWxsIGVuZCB3aXRo IFwwXDAKLSNkZWZpbmUgRlVOQ19OQU1FKHJlcV9pbnN0LCByZXFfZGV2LCBleHRfZmxhZywgbmFt ZSkgInZrIiNuYW1lIlwwIgotICAgIGNvbnN0IGNoYXIgKm5hbWUgPQotICAgICAgICBGTl9MSVNU KEZVTkNfTkFNRSkKLSNpZmRlZiBfV0lOMzIKLSAgICAgICAgRk5fTElTVF9XSU4zMihGVU5DX05B TUUpCi0jZW5kaWYKLSAgICA7Ci0jdW5kZWYgRlVOQ19OQU1FCi0KLSAgICBmb3IgKGludCBpID0g MDsgaSA8IEZGX0FSUkFZX0VMRU1TKHZrX2xvYWRfaW5mbyk7IG5hbWUgKz0gc3RybGVuKG5hbWUp ICsgMSwgaSsrKSB7Ci0gICAgICAgIGNvbnN0IHN0cnVjdCBGdW5jdGlvbkxvYWRJbmZvICpsb2Fk ID0gJnZrX2xvYWRfaW5mb1tpXTsKLSAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIgZXh0ZW5zaW9u c1tdWzRdID0geyAiIiwgIkVYVCIsICJLSFIiIH07Ci0gICAgICAgIFBGTl92a1ZvaWRGdW5jdGlv biBmbjsKLQotICAgICAgICBpZiAobG9hZC0+cmVxX2RldiAgJiYgIWhhc19kZXYpCi0gICAgICAg ICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKGxvYWQtPnJlcV9pbnN0ICYmICFoYXNfaW5zdCkK LSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgRkZf QVJSQVlfRUxFTVMoZXh0ZW5zaW9ucyk7IGorKykgewotICAgICAgICAgICAgY2hhciBleHRfbmFt ZVsxMjhdOwotICAgICAgICAgICAgYXZfdW51c2VkIGludCBuOwotCi0gICAgICAgICAgICBuID0g c25wcmludGYoZXh0X25hbWUsIHNpemVvZihleHRfbmFtZSksICIlcyVzIiwgbmFtZSwgZXh0ZW5z aW9uc1tqXSk7Ci0gICAgICAgICAgICBhdl9hc3NlcnQxKG4gPCBzaXplb2YoZXh0X25hbWUpKTsK LQotICAgICAgICAgICAgaWYgKGxvYWQtPnJlcV9kZXYpCi0gICAgICAgICAgICAgICAgZm4gPSB2 ay0+R2V0RGV2aWNlUHJvY0FkZHIoaHdjdHgtPmFjdF9kZXYsIGV4dF9uYW1lKTsKLSAgICAgICAg ICAgIGVsc2UgaWYgKGxvYWQtPnJlcV9pbnN0KQotICAgICAgICAgICAgICAgIGZuID0gaHdjdHgt PmdldF9wcm9jX2FkZHIoaHdjdHgtPmluc3QsIGV4dF9uYW1lKTsKLSAgICAgICAgICAgIGVsc2UK LSAgICAgICAgICAgICAgICBmbiA9IGh3Y3R4LT5nZXRfcHJvY19hZGRyKE5VTEwsIGV4dF9uYW1l KTsKLQotICAgICAgICAgICAgaWYgKGZuKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg ICB9Ci0KLSAgICAgICAgaWYgKCFmbiAmJiAoKGV4dGVuc2lvbnNfbWFzayAmfiBGRl9WS19FWFRf Tk9fRkxBRykgJiBsb2FkLT5leHRfZmxhZykpIHsKLSAgICAgICAgICAgIGF2X2xvZyhjdHgsIEFW X0xPR19FUlJPUiwgIkxvYWRlciBlcnJvciwgZnVuY3Rpb24gXCIlc1wiIGluZGljYXRlZCAiCi0g ICAgICAgICAgICAgICAgICAgImFzIHN1cHBvcnRlZCwgYnV0IGdvdCBOVUxMIGZ1bmN0aW9uIHBv aW50ZXIhXG4iLCBuYW1lKTsKLSAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOwot ICAgICAgICB9Ci0KLSAgICAgICAgKihQRk5fdmtWb2lkRnVuY3Rpb24gKikoKHVpbnQ4X3QgKil2 ayArIGxvYWQtPnN0cnVjdF9vZmZzZXQpID0gZm47Ci0gICAgfQotICAgIGF2X2Fzc2VydDEoKm5h bWUgPT0gJ1wwJyk7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotI2VuZGlmIC8qIEFWVVRJTF9WVUxL QU5fTE9BREVSX0ggKi8KLS0gCjIuNDkuMQoKCkZyb20gNjVkZTEyMDg4NjBjY2RlYjAxNmEzNjVm NjA5NDJhZWNiNjhiMjcyYiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKRnJvbTogSmFtYWlrYTEg PGx1a2FzemN6MThAd3AucGw+CkRhdGU6IFdlZCwgMyBTZXAgMjAyNSAxMzoyMjowNyArMDAwMApT dWJqZWN0OiBbUEFUQ0ggMDU0LzExOF0gQ2hhbmdpbmcgdnVsa2FuIGZpbGUgZGlyZWN0b3J5Cgot LS0KIGxpYmF2dXRpbC92dWxrYW4vdnVsa2FuX2xvYWRlci5oIHwgMTg5ICsrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysKIDEgZmlsZSBjaGFuZ2VkLCAxODkgaW5zZXJ0aW9ucygrKQogY3Jl YXRlIG1vZGUgMTAwNjQ0IGxpYmF2dXRpbC92dWxrYW4vdnVsa2FuX2xvYWRlci5oCgpkaWZmIC0t Z2l0IGEvbGliYXZ1dGlsL3Z1bGthbi92dWxrYW5fbG9hZGVyLmggYi9saWJhdnV0aWwvdnVsa2Fu L3Z1bGthbl9sb2FkZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi43 ZDBmNGJlZTNiCi0tLSAvZGV2L251bGwKKysrIGIvbGliYXZ1dGlsL3Z1bGthbi92dWxrYW5fbG9h ZGVyLmgKQEAgLTAsMCArMSwxODkgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1w ZWcuCisgKgorICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3Nl ciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwg b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBGRm1wZWcgaXMg ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu ICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBp ZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1 MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNB CisgKi8KKworI2lmbmRlZiBBVlVUSUxfVlVMS0FOX0xPQURFUl9ICisjZGVmaW5lIEFWVVRJTF9W VUxLQU5fTE9BREVSX0gKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpbmNsdWRlICJsaWJhdnV0 aWwvYXZhc3NlcnQuaCIKKyNpbmNsdWRlICJ2dWxrYW5fZnVuY3Rpb25zLmgiCisKKy8qIE1hY3Jv IHRvIHR1cm4gYSBmdW5jdGlvbiBuYW1lIGludG8gYSBsb2FkZXIgc3RydWN0ICovCisjZGVmaW5l IFBGTl9MT0FEX0lORk8ocmVxX2luc3QsIHJlcV9kZXYsIGV4dF9mbGFnLCBuYW1lKSBcCisgICAg eyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg ICAgICAgIHJlcV9pbnN0LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc CisgICAgICAgIHJlcV9kZXYsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCisgICAgICAgIG9mZnNldG9mKEZGVnVsa2FuRnVuY3Rpb25zLCBuYW1lKSwgICAgICAgICAg ICAgICBcCisgICAgICAgIGV4dF9mbGFnLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCisgICAgfSwKKworc3RhdGljIGlubGluZSB1aW50NjRfdCBmZl92a19leHRlbnNp b25zX3RvX21hc2soY29uc3QgY2hhciAqIGNvbnN0ICpleHRlbnNpb25zLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG5iX2V4dGVuc2lvbnMpCit7 CisgICAgc3RhdGljIGNvbnN0IHN0cnVjdCBFeHRlbnNpb25NYXAgeworICAgICAgICBjb25zdCBj aGFyICpuYW1lOworICAgICAgICBGRlZ1bGthbkV4dGVuc2lvbnMgZmxhZzsKKyAgICB9IGV4dGVu c2lvbl9tYXBbXSA9IHsKKyAgICAgICAgLyogSW5zdGFuY2UgZXh0ZW5zaW9ucyAqLworICAgICAg ICB7IFZLX0VYVF9ERUJVR19VVElMU19FWFRFTlNJT05fTkFNRSwgICAgICAgICAgICAgICAgICAg ICAgICAgRkZfVktfRVhUX0RFQlVHX1VUSUxTICAgICAgICAgICAgfSwKKworICAgICAgICAvKiBE ZXZpY2UgZXh0ZW5zaW9ucyAqLworI2lmZGVmIFZLX0tIUl9zaGFkZXJfcmVsYXhlZF9leHRlbmRl ZF9pbnN0cnVjdGlvbgorICAgICAgICB7IFZLX0tIUl9TSEFERVJfUkVMQVhFRF9FWFRFTkRFRF9J TlNUUlVDVElPTl9FWFRFTlNJT05fTkFNRSwgRkZfVktfRVhUX1JFTEFYRURfRVhURU5ERURfSU5T VFIgfSwKKyNlbmRpZgorICAgICAgICB7IFZLX0VYVF9FWFRFUk5BTF9NRU1PUllfRE1BX0JVRl9F WFRFTlNJT05fTkFNRSwgICBGRl9WS19FWFRfRVhURVJOQUxfRE1BQlVGX01FTU9SWSB9LAorICAg ICAgICB7IFZLX0VYVF9JTUFHRV9EUk1fRk9STUFUX01PRElGSUVSX0VYVEVOU0lPTl9OQU1FLCBG Rl9WS19FWFRfRFJNX01PRElGSUVSX0ZMQUdTICAgICB9LAorICAgICAgICB7IFZLX0tIUl9FWFRF Uk5BTF9NRU1PUllfRkRfRVhURU5TSU9OX05BTUUsICAgICAgICBGRl9WS19FWFRfRVhURVJOQUxf RkRfTUVNT1JZICAgICB9LAorICAgICAgICB7IFZLX0tIUl9FWFRFUk5BTF9TRU1BUEhPUkVfRkRf RVhURU5TSU9OX05BTUUsICAgICBGRl9WS19FWFRfRVhURVJOQUxfRkRfU0VNICAgICAgICB9LAor ICAgICAgICB7IFZLX0VYVF9FWFRFUk5BTF9NRU1PUllfSE9TVF9FWFRFTlNJT05fTkFNRSwgICAg ICBGRl9WS19FWFRfRVhURVJOQUxfSE9TVF9NRU1PUlkgICB9LAorICAgICAgICB7IFZLX0VYVF9E RUJVR19VVElMU19FWFRFTlNJT05fTkFNRSwgICAgICAgICAgICAgICBGRl9WS19FWFRfREVCVUdf VVRJTFMgICAgICAgICAgICB9LAorICAgICAgICB7IFZLX0VYVF9QSFlTSUNBTF9ERVZJQ0VfRFJN X0VYVEVOU0lPTl9OQU1FLCAgICAgICBGRl9WS19FWFRfREVWSUNFX0RSTSAgICAgICAgICAgICB9 LAorICAgICAgICB7IFZLX0VYVF9TSEFERVJfQVRPTUlDX0ZMT0FUX0VYVEVOU0lPTl9OQU1FLCAg ICAgICBGRl9WS19FWFRfQVRPTUlDX0ZMT0FUICAgICAgICAgICB9LAorICAgICAgICB7IFZLX0tI Ul9DT09QRVJBVElWRV9NQVRSSVhfRVhURU5TSU9OX05BTUUsICAgICAgICBGRl9WS19FWFRfQ09P UF9NQVRSSVggICAgICAgICAgICB9LAorICAgICAgICB7IFZLX05WX09QVElDQUxfRkxPV19FWFRF TlNJT05fTkFNRSwgICAgICAgICAgICAgICBGRl9WS19FWFRfT1BUSUNBTF9GTE9XICAgICAgICAg ICB9LAorICAgICAgICB7IFZLX0VYVF9TSEFERVJfT0JKRUNUX0VYVEVOU0lPTl9OQU1FLCAgICAg ICAgICAgICBGRl9WS19FWFRfU0hBREVSX09CSkVDVCAgICAgICAgICB9LAorICAgICAgICB7IFZL X0tIUl9TSEFERVJfU1VCR1JPVVBfUk9UQVRFX0VYVEVOU0lPTl9OQU1FLCAgICBGRl9WS19FWFRf U1VCR1JPVVBfUk9UQVRFICAgICAgICB9LAorICAgICAgICB7IFZLX0VYVF9IT1NUX0lNQUdFX0NP UFlfRVhURU5TSU9OX05BTUUsICAgICAgICAgICBGRl9WS19FWFRfSE9TVF9JTUFHRV9DT1BZICAg ICAgICB9LAorICAgICAgICB7IFZLX0tIUl9WSURFT19NQUlOVEVOQU5DRV8xX0VYVEVOU0lPTl9O QU1FLCAgICAgICBGRl9WS19FWFRfVklERU9fTUFJTlRFTkFOQ0VfMSAgICB9LAorI2lmZGVmIFZL X0tIUl92aWRlb19tYWludGVuYW5jZTIKKyAgICAgICAgeyBWS19LSFJfVklERU9fTUFJTlRFTkFO Q0VfMl9FWFRFTlNJT05fTkFNRSwgICAgICAgRkZfVktfRVhUX1ZJREVPX01BSU5URU5BTkNFXzIg ICAgfSwKKyNlbmRpZgorI2lmZGVmIF9XSU4zMgorICAgICAgICB7IFZLX0tIUl9FWFRFUk5BTF9N RU1PUllfV0lOMzJfRVhURU5TSU9OX05BTUUsICAgICBGRl9WS19FWFRfRVhURVJOQUxfV0lOMzJf TUVNT1JZICB9LAorICAgICAgICB7IFZLX0tIUl9FWFRFUk5BTF9TRU1BUEhPUkVfV0lOMzJfRVhU RU5TSU9OX05BTUUsICBGRl9WS19FWFRfRVhURVJOQUxfV0lOMzJfU0VNICAgICB9LAorI2VuZGlm CisgICAgICAgIHsgVktfRVhUX0RFU0NSSVBUT1JfQlVGRkVSX0VYVEVOU0lPTl9OQU1FLCAgICAg ICAgIEZGX1ZLX0VYVF9ERVNDUklQVE9SX0JVRkZFUiwgICAgIH0sCisgICAgICAgIHsgVktfS0hS X1ZJREVPX1FVRVVFX0VYVEVOU0lPTl9OQU1FLCAgICAgICAgICAgICAgIEZGX1ZLX0VYVF9WSURF T19RVUVVRSAgICAgICAgICAgIH0sCisgICAgICAgIHsgVktfS0hSX1ZJREVPX0VOQ09ERV9RVUVV RV9FWFRFTlNJT05fTkFNRSwgICAgICAgIEZGX1ZLX0VYVF9WSURFT19FTkNPREVfUVVFVUUgICAg IH0sCisgICAgICAgIHsgVktfS0hSX1ZJREVPX0RFQ09ERV9RVUVVRV9FWFRFTlNJT05fTkFNRSwg ICAgICAgIEZGX1ZLX0VYVF9WSURFT19ERUNPREVfUVVFVUUgICAgIH0sCisgICAgICAgIHsgVktf S0hSX1ZJREVPX0VOQ09ERV9IMjY0X0VYVEVOU0lPTl9OQU1FLCAgICAgICAgIEZGX1ZLX0VYVF9W SURFT19FTkNPREVfSDI2NCAgICAgIH0sCisgICAgICAgIHsgVktfS0hSX1ZJREVPX0RFQ09ERV9I MjY0X0VYVEVOU0lPTl9OQU1FLCAgICAgICAgIEZGX1ZLX0VYVF9WSURFT19ERUNPREVfSDI2NCAg ICAgIH0sCisgICAgICAgIHsgVktfS0hSX1ZJREVPX0VOQ09ERV9IMjY1X0VYVEVOU0lPTl9OQU1F LCAgICAgICAgIEZGX1ZLX0VYVF9WSURFT19FTkNPREVfSDI2NSAgICAgIH0sCisgICAgICAgIHsg VktfS0hSX1ZJREVPX0RFQ09ERV9IMjY1X0VYVEVOU0lPTl9OQU1FLCAgICAgICAgIEZGX1ZLX0VY VF9WSURFT19ERUNPREVfSDI2NSAgICAgIH0sCisjaWZkZWYgVktfS0hSX3ZpZGVvX2RlY29kZV92 cDkKKyAgICAgICAgeyBWS19LSFJfVklERU9fREVDT0RFX1ZQOV9FWFRFTlNJT05fTkFNRSwgICAg ICAgICAgRkZfVktfRVhUX1ZJREVPX0RFQ09ERV9WUDkgICAgICAgfSwKKyNlbmRpZgorICAgICAg ICB7IFZLX0tIUl9WSURFT19ERUNPREVfQVYxX0VYVEVOU0lPTl9OQU1FLCAgICAgICAgICBGRl9W S19FWFRfVklERU9fREVDT0RFX0FWMSAgICAgICB9LAorICAgICAgICB7IFZLX0tIUl9QVVNIX0RF U0NSSVBUT1JfRVhURU5TSU9OX05BTUUsICAgICAgICAgICBGRl9WS19FWFRfUFVTSF9ERVNDUklQ VE9SICAgICAgICB9LAorI2lmZGVmIFZLX0tIUl9zaGFkZXJfZXhwZWN0X2Fzc3VtZQorICAgICAg ICB7IFZLX0tIUl9TSEFERVJfRVhQRUNUX0FTU1VNRV9FWFRFTlNJT05fTkFNRSwgICAgICBGRl9W S19FWFRfRVhQRUNUX0FTU1VNRSAgICAgICAgICB9LAorI2VuZGlmCisjaWZkZWYgVktfS0hSX3Zp ZGVvX2VuY29kZV9hdjEKKyAgICAgICAgeyBWS19LSFJfVklERU9fRU5DT0RFX0FWMV9FWFRFTlNJ T05fTkFNRSwgICAgICAgICAgRkZfVktfRVhUX1ZJREVPX0VOQ09ERV9BVjEgICAgICAgfSwKKyNl bmRpZgorICAgIH07CisKKyAgICBGRlZ1bGthbkV4dGVuc2lvbnMgbWFzayA9IDB4MDsKKworICAg IGZvciAoaW50IGkgPSAwOyBpIDwgbmJfZXh0ZW5zaW9uczsgaSsrKSB7CisgICAgICAgIGZvciAo aW50IGogPSAwOyBqIDwgRkZfQVJSQVlfRUxFTVMoZXh0ZW5zaW9uX21hcCk7IGorKykgeworICAg ICAgICAgICAgaWYgKCFzdHJjbXAoZXh0ZW5zaW9uc1tpXSwgZXh0ZW5zaW9uX21hcFtqXS5uYW1l KSkgeworICAgICAgICAgICAgICAgIG1hc2sgfD0gZXh0ZW5zaW9uX21hcFtqXS5mbGFnOworICAg ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor CisgICAgcmV0dXJuIG1hc2s7Cit9CisKKy8qKgorICogRnVuY3Rpb24gbG9hZGVyLgorICogVnVs a2FuIGZ1bmN0aW9uIGZyb20gc2NyYXRjaCBsb2FkaW5nIGhhcHBlbnMgaW4gMyBzdGFnZXMgLSB0 aGUgZmlyc3Qgb25lCisgKiBpcyBiZWZvcmUgYW55IGluaXRpYWxpemF0aW9uIGhhcyBoYXBwZW5l ZCwgYW5kIHlvdSBoYXZlIG5laXRoZXIgYW4gaW5zdGFuY2UKKyAqIHN0cnVjdHVyZSBub3IgYSBk ZXZpY2Ugc3RydWN0dXJlLiBBdCB0aGlzIHN0YWdlLCB5b3UgY2FuIG9ubHkgZ2V0IHRoZSBiYXJl CisgKiBtaW5pbWFscyB0byBpbml0aWFsaXplIGFuIGluc3RhbmNlLgorICogVGhlIHNlY29uZCBz dGFnZSBpcyB3aGVuIHlvdSBoYXZlIGFuIGluc3RhbmNlLiBBdCB0aGlzIHN0YWdlLCB5b3UgY2Fu CisgKiBpbml0aWFsaXplIGEgVmtEZXZpY2UsIGFuZCBoYXZlIGFuIGlkZWEgb2Ygd2hhdCBleHRl bnNpb25zIGVhY2ggZGV2aWNlCisgKiBzdXBwb3J0cy4KKyAqIEZpbmFsbHksIGluIHRoZSB0aGly ZCBzdGFnZSwgeW91IGNhbiBwcm9jZWVkIGFuZCBsb2FkIGFsbCBjb3JlIGZ1bmN0aW9ucywKKyAq IHBsdXMgeW91IGNhbiBiZSBzdXJlIHRoYXQgYW55IGV4dGVuc2lvbnMgeW91J3ZlIGVuYWJsZWQg ZHVyaW5nIGRldmljZQorICogaW5pdGlhbGl6YXRpb24gd2lsbCBiZSBhdmFpbGFibGUuCisgKi8K K3N0YXRpYyBpbmxpbmUgaW50IGZmX3ZrX2xvYWRfZnVuY3Rpb25zKEFWSFdEZXZpY2VDb250ZXh0 ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGRlZ1bGthbkZ1 bmN0aW9ucyAqdmssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50 NjRfdCBleHRlbnNpb25zX21hc2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpbnQgaGFzX2luc3QsIGludCBoYXNfZGV2KQoreworICAgIEFWVnVsa2FuRGV2aWNlQ29u dGV4dCAqaHdjdHggPSBjdHgtPmh3Y3R4OworCisgICAgc3RhdGljIGNvbnN0IHN0cnVjdCBGdW5j dGlvbkxvYWRJbmZvIHsKKyAgICAgICAgY2hhciByZXFfaW5zdDsKKyAgICAgICAgY2hhciByZXFf ZGV2OworICAgICAgICB1aW50MTZfdCBzdHJ1Y3Rfb2Zmc2V0OworICAgICAgICBGRlZ1bGthbkV4 dGVuc2lvbnMgZXh0X2ZsYWc7CisgICAgfSB2a19sb2FkX2luZm9bXSA9IHsKKyAgICAgICAgRk5f TElTVChQRk5fTE9BRF9JTkZPKQorI2lmZGVmIF9XSU4zMgorICAgICAgICBGTl9MSVNUX1dJTjMy KFBGTl9MT0FEX0lORk8pCisjZW5kaWYKKyAgICB9OworICAgIC8vIENvbmNhdGVuYXRlIHRoZSBu YW1lcyB0byBhdm9pZCByZWxvY2F0aW9ucy4gVGhlIHJlc3VsdGluZyBzdHJpbmcKKyAgICAvLyB3 aWxsIGVuZCB3aXRoIFwwXDAKKyNkZWZpbmUgRlVOQ19OQU1FKHJlcV9pbnN0LCByZXFfZGV2LCBl eHRfZmxhZywgbmFtZSkgInZrIiNuYW1lIlwwIgorICAgIGNvbnN0IGNoYXIgKm5hbWUgPQorICAg ICAgICBGTl9MSVNUKEZVTkNfTkFNRSkKKyNpZmRlZiBfV0lOMzIKKyAgICAgICAgRk5fTElTVF9X SU4zMihGVU5DX05BTUUpCisjZW5kaWYKKyAgICA7CisjdW5kZWYgRlVOQ19OQU1FCisKKyAgICBm b3IgKGludCBpID0gMDsgaSA8IEZGX0FSUkFZX0VMRU1TKHZrX2xvYWRfaW5mbyk7IG5hbWUgKz0g c3RybGVuKG5hbWUpICsgMSwgaSsrKSB7CisgICAgICAgIGNvbnN0IHN0cnVjdCBGdW5jdGlvbkxv YWRJbmZvICpsb2FkID0gJnZrX2xvYWRfaW5mb1tpXTsKKyAgICAgICAgc3RhdGljIGNvbnN0IGNo YXIgZXh0ZW5zaW9uc1tdWzRdID0geyAiIiwgIkVYVCIsICJLSFIiIH07CisgICAgICAgIFBGTl92 a1ZvaWRGdW5jdGlvbiBmbjsKKworICAgICAgICBpZiAobG9hZC0+cmVxX2RldiAgJiYgIWhhc19k ZXYpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKGxvYWQtPnJlcV9pbnN0ICYm ICFoYXNfaW5zdCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGZvciAoaW50IGog PSAwOyBqIDwgRkZfQVJSQVlfRUxFTVMoZXh0ZW5zaW9ucyk7IGorKykgeworICAgICAgICAgICAg Y2hhciBleHRfbmFtZVsxMjhdOworICAgICAgICAgICAgYXZfdW51c2VkIGludCBuOworCisgICAg ICAgICAgICBuID0gc25wcmludGYoZXh0X25hbWUsIHNpemVvZihleHRfbmFtZSksICIlcyVzIiwg bmFtZSwgZXh0ZW5zaW9uc1tqXSk7CisgICAgICAgICAgICBhdl9hc3NlcnQxKG4gPCBzaXplb2Yo ZXh0X25hbWUpKTsKKworICAgICAgICAgICAgaWYgKGxvYWQtPnJlcV9kZXYpCisgICAgICAgICAg ICAgICAgZm4gPSB2ay0+R2V0RGV2aWNlUHJvY0FkZHIoaHdjdHgtPmFjdF9kZXYsIGV4dF9uYW1l KTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGxvYWQtPnJlcV9pbnN0KQorICAgICAgICAgICAgICAg IGZuID0gaHdjdHgtPmdldF9wcm9jX2FkZHIoaHdjdHgtPmluc3QsIGV4dF9uYW1lKTsKKyAgICAg ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBmbiA9IGh3Y3R4LT5nZXRfcHJvY19hZGRyKE5V TEwsIGV4dF9uYW1lKTsKKworICAgICAgICAgICAgaWYgKGZuKQorICAgICAgICAgICAgICAgIGJy ZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFmbiAmJiAoKGV4dGVuc2lvbnNfbWFzayAm fiBGRl9WS19FWFRfTk9fRkxBRykgJiBsb2FkLT5leHRfZmxhZykpIHsKKyAgICAgICAgICAgIGF2 X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIkxvYWRlciBlcnJvciwgZnVuY3Rpb24gXCIlc1wiIGlu ZGljYXRlZCAiCisgICAgICAgICAgICAgICAgICAgImFzIHN1cHBvcnRlZCwgYnV0IGdvdCBOVUxM IGZ1bmN0aW9uIHBvaW50ZXIhXG4iLCBuYW1lKTsKKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9S X0VYVEVSTkFMOworICAgICAgICB9CisKKyAgICAgICAgKihQRk5fdmtWb2lkRnVuY3Rpb24gKiko KHVpbnQ4X3QgKil2ayArIGxvYWQtPnN0cnVjdF9vZmZzZXQpID0gZm47CisgICAgfQorICAgIGF2 X2Fzc2VydDEoKm5hbWUgPT0gJ1wwJyk7CisKKyAgICByZXR1cm4gMDsKK30KKworI2VuZGlmIC8q IEFWVVRJTF9WVUxLQU5fTE9BREVSX0ggKi8KLS0gCjIuNDkuMQoKCkZyb20gZWVlZWRhZjBhOTli MjhmMjhmZTlkYzNmY2Y0ZDUzZGEyZjhhNjc2OCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKRnJv bTogSmFtYWlrYTEgPGx1a2FzemN6MThAd3AucGw+CkRhdGU6IFdlZCwgMyBTZXAgMjAyNSAxMzoy Mjo0NiArMDAwMApTdWJqZWN0OiBbUEFUQ0ggMDU1LzExOF0gQ2hhbmdpbmcgdnVsa2FuIGZpbGUg ZGlyZWN0b3J5CgotLS0KIGxpYmF2dXRpbC92dWxrYW5fc3BpcnYuaCB8IDQ0IC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCA0NCBkZWxldGlv bnMoLSkKIGRlbGV0ZSBtb2RlIDEwMDY0NCBsaWJhdnV0aWwvdnVsa2FuX3NwaXJ2LmgKCmRpZmYg LS1naXQgYS9saWJhdnV0aWwvdnVsa2FuX3NwaXJ2LmggYi9saWJhdnV0aWwvdnVsa2FuX3NwaXJ2 LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxM2I1MGY4ZTcuLjAwMDAwMDAwMDAK LS0tIGEvbGliYXZ1dGlsL3Z1bGthbl9zcGlydi5oCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAs MCBAQAotLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KLSAqCi0gKiBGRm1wZWcg aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2Rp ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0g KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl aXRoZXIKLSAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p IGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUg aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElU WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBM ZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlv dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ dWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhl IEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg RmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKLSAqLwotCi0jaWZuZGVmIEFW VVRJTF9WVUxLQU5fU1BJUlZfSAotI2RlZmluZSBBVlVUSUxfVlVMS0FOX1NQSVJWX0gKLQotI2lu Y2x1ZGUgInZ1bGthbi5oIgotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLXR5cGVkZWYgc3RydWN0 IEZGVmtTUElSVkNvbXBpbGVyIHsKLSAgICB2b2lkICpwcml2OwotICAgIGludCAoKmNvbXBpbGVf c2hhZGVyKShGRlZ1bGthbkNvbnRleHQgKnMsIHN0cnVjdCBGRlZrU1BJUlZDb21waWxlciAqY3R4 LAotICAgICAgICAgICAgICAgICAgICAgICAgICBGRlZ1bGthblNoYWRlciAqc2hkLCB1aW50OF90 ICoqZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpzaXplLCBjb25zdCBj aGFyICplbnRyeXBvaW50LCB2b2lkICoqb3BhcXVlKTsKLSAgICB2b2lkICgqZnJlZV9zaGFkZXIp KHN0cnVjdCBGRlZrU1BJUlZDb21waWxlciAqY3R4LCB2b2lkICoqb3BhcXVlKTsKLSAgICB2b2lk ICgqdW5pbml0KShzdHJ1Y3QgRkZWa1NQSVJWQ29tcGlsZXIgKipjdHgpOwotfSBGRlZrU1BJUlZD b21waWxlcjsKLQotI2lmIENPTkZJR19MSUJHTFNMQU5HCi1GRlZrU1BJUlZDb21waWxlciAqZmZf dmtfZ2xzbGFuZ19pbml0KHZvaWQpOwotI2RlZmluZSBmZl92a19zcGlydl9pbml0IGZmX3ZrX2ds c2xhbmdfaW5pdAotI2VuZGlmCi0jaWYgQ09ORklHX0xJQlNIQURFUkMKLUZGVmtTUElSVkNvbXBp bGVyICpmZl92a19zaGFkZXJjX2luaXQodm9pZCk7Ci0jZGVmaW5lIGZmX3ZrX3NwaXJ2X2luaXQg ZmZfdmtfc2hhZGVyY19pbml0Ci0jZW5kaWYKLQotI2VuZGlmIC8qIEFWVVRJTF9WVUxLQU5fSCAq LwotLSAKMi40OS4xCgoKRnJvbSA4ODkxMmYwNzc5NjEzOTdmMTc5NWIwMjA0ODAwZDFhZjAxYzI2 ODMxIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBKYW1haWthMSA8bHVrYXN6Y3oxOEB3 cC5wbD4KRGF0ZTogV2VkLCAzIFNlcCAyMDI1IDEzOjIzOjEyICswMDAwClN1YmplY3Q6IFtQQVRD SCAwNTYvMTE4XSBDaGFuZ2luZyB2dWxrYW4gZmlsZSBkaXJlY3RvcnkKCi0tLQogbGliYXZ1dGls L3Z1bGthbi92dWxrYW5fc3BpcnYuaCB8IDQ0ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKwogMSBmaWxlIGNoYW5nZWQsIDQ0IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBsaWJhdnV0aWwvdnVsa2FuL3Z1bGthbl9zcGlydi5oCgpkaWZmIC0tZ2l0IGEvbGliYXZ1dGls L3Z1bGthbi92dWxrYW5fc3BpcnYuaCBiL2xpYmF2dXRpbC92dWxrYW4vdnVsa2FuX3NwaXJ2LmgK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uNzc5N2FlNGQ3OQotLS0gL2Rl di9udWxsCisrKyBiL2xpYmF2dXRpbC92dWxrYW4vdnVsa2FuX3NwaXJ2LmgKQEAgLTAsMCArMSw0 NCBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KKyAqCisgKiBGRm1wZWcg aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisg KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl aXRoZXIKKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUg aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM ZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ dWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhl IEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg RmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKyAqLworCisjaWZuZGVmIEFW VVRJTF9WVUxLQU5fU1BJUlZfSAorI2RlZmluZSBBVlVUSUxfVlVMS0FOX1NQSVJWX0gKKworI2lu Y2x1ZGUgInZ1bGthbi5oIgorCisjaW5jbHVkZSAibGliYXZ1dGlsL2NvbmZpZy5oIgorCit0eXBl ZGVmIHN0cnVjdCBGRlZrU1BJUlZDb21waWxlciB7CisgICAgdm9pZCAqcHJpdjsKKyAgICBpbnQg KCpjb21waWxlX3NoYWRlcikoRkZWdWxrYW5Db250ZXh0ICpzLCBzdHJ1Y3QgRkZWa1NQSVJWQ29t cGlsZXIgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRkZWdWxrYW5TaGFkZXIgKnNo ZCwgdWludDhfdCAqKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqc2l6 ZSwgY29uc3QgY2hhciAqZW50cnlwb2ludCwgdm9pZCAqKm9wYXF1ZSk7CisgICAgdm9pZCAoKmZy ZWVfc2hhZGVyKShzdHJ1Y3QgRkZWa1NQSVJWQ29tcGlsZXIgKmN0eCwgdm9pZCAqKm9wYXF1ZSk7 CisgICAgdm9pZCAoKnVuaW5pdCkoc3RydWN0IEZGVmtTUElSVkNvbXBpbGVyICoqY3R4KTsKK30g RkZWa1NQSVJWQ29tcGlsZXI7CisKKyNpZiBDT05GSUdfTElCR0xTTEFORworRkZWa1NQSVJWQ29t cGlsZXIgKmZmX3ZrX2dsc2xhbmdfaW5pdCh2b2lkKTsKKyNkZWZpbmUgZmZfdmtfc3BpcnZfaW5p dCBmZl92a19nbHNsYW5nX2luaXQKKyNlbmRpZgorI2lmIENPTkZJR19MSUJTSEFERVJDCitGRlZr U1BJUlZDb21waWxlciAqZmZfdmtfc2hhZGVyY19pbml0KHZvaWQpOworI2RlZmluZSBmZl92a19z cGlydl9pbml0IGZmX3ZrX3NoYWRlcmNfaW5pdAorI2VuZGlmCisKKyNlbmRpZiAvKiBBVlVUSUxf VlVMS0FOX0ggKi8KLS0gCjIuNDkuMQoKCkZyb20gZjc2YzA2MGUxNWYyOWNiOGYzMjg3MjBlYTYx M2UyNDAyOWYxOTI1YSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKRnJvbTogSmFtYWlrYTEgPGx1 a2FzemN6MThAd3AucGw+CkRhdGU6IFdlZCwgMyBTZXAgMjAyNSAxMzoyNDoyNSArMDAwMApTdWJq ZWN0OiBbUEFUQ0ggMDU3LzExOF0gQ2hhbmdpbmcgdnVsa2FuIGZpbGUgZGlyZWN0b3J5CgotLS0K IGxpYmF2Y29kZWMvZmZ2MV92dWxrYW4uYyB8IDEyMyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAxMjMgZGVsZXRpb25zKC0pCiBkZWxldGUg bW9kZSAxMDA2NDQgbGliYXZjb2RlYy9mZnYxX3Z1bGthbi5jCgpkaWZmIC0tZ2l0IGEvbGliYXZj b2RlYy9mZnYxX3Z1bGthbi5jIGIvbGliYXZjb2RlYy9mZnYxX3Z1bGthbi5jCmRlbGV0ZWQgZmls ZSBtb2RlIDEwMDY0NAppbmRleCA2ZjQ5ZTJlYmIxLi4wMDAwMDAwMDAwCi0tLSBhL2xpYmF2Y29k ZWMvZmZ2MV92dWxrYW4uYworKysgL2Rldi9udWxsCkBAIC0xLDEyMyArMCwwIEBACi0vKgotICog Q29weXJpZ2h0IChjKSAyMDI1IEx5bm5lIDxkZXZAbHlubmUuZWU+Ci0gKgotICogVGhpcyBmaWxl IGlzIHBhcnQgb2YgRkZtcGVnLgotICoKLSAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVk IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyLjEg b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0g KgotICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1 c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w bGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk IGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9u ZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91 bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBN QSAwMjExMC0xMzAxIFVTQQotICovCi0KLSNpbmNsdWRlICJmZnYxX3Z1bGthbi5oIgotI2luY2x1 ZGUgImxpYmF2dXRpbC9jcmMuaCIKLQotaW50IGZmX2ZmdjFfdmtfdXBkYXRlX3N0YXRlX3RyYW5z aXRpb25fZGF0YShGRlZ1bGthbkNvbnRleHQgKnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEZGVmtCdWZmZXIgKnZrYiwgRkZWMUNvbnRleHQgKmYpCi17Ci0g ICAgaW50IGVycjsKLSAgICB1aW50OF90ICpidWZfbWFwcGVkOwotCi0gICAgUkVUKGZmX3ZrX21h cF9idWZmZXIocywgdmtiLCAmYnVmX21hcHBlZCwgMCkpOwotCi0gICAgZm9yIChpbnQgaSA9IDE7 IGkgPCAyNTY7IGkrKykgewotICAgICAgICBidWZfbWFwcGVkWzI1NiArIGldID0gZi0+c3RhdGVf dHJhbnNpdGlvbltpXTsKLSAgICAgICAgYnVmX21hcHBlZFsyNTYgLSBpXSA9IDI1NiAtIChpbnQp Zi0+c3RhdGVfdHJhbnNpdGlvbltpXTsKLSAgICB9Ci0KLSAgICBSRVQoZmZfdmtfdW5tYXBfYnVm ZmVyKHMsIHZrYiwgMSkpOwotCi1mYWlsOgotICAgIHJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBp bnQgaW5pdF9zdGF0ZV90cmFuc2l0aW9uX2RhdGEoRkZWdWxrYW5Db250ZXh0ICpzLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGRlZrQnVmZmVyICp2a2IsIEZGVjFDb250 ZXh0ICpmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCp3cml0 ZV9kYXRhKShGRlZ1bGthbkNvbnRleHQgKnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZGVmtCdWZmZXIgKnZrYiwgRkZWMUNvbnRleHQg KmYpKQotewotICAgIGludCBlcnI7Ci0gICAgc2l6ZV90IGJ1Zl9sZW4gPSA1MTIqc2l6ZW9mKHVp bnQ4X3QpOwotCi0gICAgUkVUKGZmX3ZrX2NyZWF0ZV9idWYocywgdmtiLAotICAgICAgICAgICAg ICAgICAgICAgICAgIGJ1Zl9sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVM TCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBWS19CVUZGRVJfVVNBR0VfU0hBREVSX0RFVklD RV9BRERSRVNTX0JJVCB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgVktfQlVGRkVSX1VTQUdF X1VOSUZPUk1fQlVGRkVSX0JJVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBWS19NRU1PUllf UFJPUEVSVFlfREVWSUNFX0xPQ0FMX0JJVCB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgVktf TUVNT1JZX1BST1BFUlRZX0hPU1RfVklTSUJMRV9CSVQpKTsKLQotICAgIHdyaXRlX2RhdGEocywg dmtiLCBmKTsKLQotZmFpbDoKLSAgICByZXR1cm4gZXJyOwotfQotCi1pbnQgZmZfZmZ2MV92a19p bml0X3N0YXRlX3RyYW5zaXRpb25fZGF0YShGRlZ1bGthbkNvbnRleHQgKnMsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGRlZrQnVmZmVyICp2a2IsIEZGVjFDb250 ZXh0ICpmKQotewotICAgIHJldHVybiBpbml0X3N0YXRlX3RyYW5zaXRpb25fZGF0YShzLCB2a2Is IGYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZmX2ZmdjFfdmtfdXBk YXRlX3N0YXRlX3RyYW5zaXRpb25fZGF0YSk7Ci19Ci0KLWludCBmZl9mZnYxX3ZrX2luaXRfcXVh bnRfdGFibGVfZGF0YShGRlZ1bGthbkNvbnRleHQgKnMsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgRkZWa0J1ZmZlciAqdmtiLCBGRlYxQ29udGV4dCAqZikKLXsKLSAgICBp bnQgZXJyOwotCi0gICAgaW50MTZfdCAqYnVmX21hcHBlZDsKLSAgICBzaXplX3QgYnVmX2xlbiA9 IE1BWF9RVUFOVF9UQUJMRVMqCi0gICAgICAgICAgICAgICAgICAgICBNQVhfQ09OVEVYVF9JTlBV VFMqCi0gICAgICAgICAgICAgICAgICAgICBNQVhfUVVBTlRfVEFCTEVfU0laRSpzaXplb2YoaW50 MTZfdCk7Ci0KLSAgICBSRVQoZmZfdmtfY3JlYXRlX2J1ZihzLCB2a2IsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgYnVmX2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxM LAotICAgICAgICAgICAgICAgICAgICAgICAgIFZLX0JVRkZFUl9VU0FHRV9TSEFERVJfREVWSUNF X0FERFJFU1NfQklUIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICBWS19CVUZGRVJfVVNBR0Vf VU5JRk9STV9CVUZGRVJfQklULAotICAgICAgICAgICAgICAgICAgICAgICAgIFZLX01FTU9SWV9Q Uk9QRVJUWV9ERVZJQ0VfTE9DQUxfQklUIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICBWS19N RU1PUllfUFJPUEVSVFlfSE9TVF9WSVNJQkxFX0JJVCkpOwotICAgIFJFVChmZl92a19tYXBfYnVm ZmVyKHMsIHZrYiwgKHZvaWQgKikmYnVmX21hcHBlZCwgMCkpOwotCi0gICAgbWVtY3B5KGJ1Zl9t YXBwZWQsIGYtPnF1YW50X3RhYmxlcywKLSAgICAgICAgICAgc2l6ZW9mKGYtPnF1YW50X3RhYmxl cykpOwotCi0gICAgUkVUKGZmX3ZrX3VubWFwX2J1ZmZlcihzLCB2a2IsIDEpKTsKLQotZmFpbDoK LSAgICByZXR1cm4gZXJyOwotfQotCi1pbnQgZmZfZmZ2MV92a19pbml0X2NyY190YWJsZV9kYXRh KEZGVnVsa2FuQ29udGV4dCAqcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg RkZWa0J1ZmZlciAqdmtiLCBGRlYxQ29udGV4dCAqZikKLXsKLSAgICBpbnQgZXJyOwotCi0gICAg dWludDMyX3QgKmJ1Zl9tYXBwZWQ7Ci0gICAgc2l6ZV90IGJ1Zl9sZW4gPSAyNTYqc2l6ZW9mKGlu dDMyX3QpOwotCi0gICAgUkVUKGZmX3ZrX2NyZWF0ZV9idWYocywgdmtiLAotICAgICAgICAgICAg ICAgICAgICAgICAgIGJ1Zl9sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVM TCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBWS19CVUZGRVJfVVNBR0VfU0hBREVSX0RFVklD RV9BRERSRVNTX0JJVCB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgVktfQlVGRkVSX1VTQUdF X1VOSUZPUk1fQlVGRkVSX0JJVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBWS19NRU1PUllf UFJPUEVSVFlfREVWSUNFX0xPQ0FMX0JJVCB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgVktf TUVNT1JZX1BST1BFUlRZX0hPU1RfVklTSUJMRV9CSVQpKTsKLSAgICBSRVQoZmZfdmtfbWFwX2J1 ZmZlcihzLCB2a2IsICh2b2lkICopJmJ1Zl9tYXBwZWQsIDApKTsKLQotICAgIG1lbWNweShidWZf bWFwcGVkLCBhdl9jcmNfZ2V0X3RhYmxlKEFWX0NSQ18zMl9JRUVFKSwgYnVmX2xlbik7Ci0KLSAg ICBSRVQoZmZfdmtfdW5tYXBfYnVmZmVyKHMsIHZrYiwgMSkpOwotCi1mYWlsOgotICAgIHJldHVy biBlcnI7Ci19Ci0tIAoyLjQ5LjEKCgpGcm9tIDU3YjFhYTQ4ZTlmZTkzNzJiNzE5ODEwMmE5NmFi NDZlNDc0NTAwZWUgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCkZyb206IEphbWFpa2ExIDxsdWth c3pjejE4QHdwLnBsPgpEYXRlOiBXZWQsIDMgU2VwIDIwMjUgMTM6MjU6MDIgKzAwMDAKU3ViamVj dDogW1BBVENIIDA1OC8xMThdIENoYW5naW5nIHZ1bGthbiBmaWxlIGRpcmVjdG9yeQoKLS0tCiBs aWJhdmNvZGVjL3Z1bGthbi9mZnYxX3Z1bGthbi5jIHwgMTIzICsrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrCiAxIGZpbGUgY2hhbmdlZCwgMTIzIGluc2VydGlvbnMoKykKIGNyZWF0ZSBt b2RlIDEwMDY0NCBsaWJhdmNvZGVjL3Z1bGthbi9mZnYxX3Z1bGthbi5jCgpkaWZmIC0tZ2l0IGEv bGliYXZjb2RlYy92dWxrYW4vZmZ2MV92dWxrYW4uYyBiL2xpYmF2Y29kZWMvdnVsa2FuL2ZmdjFf dnVsa2FuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uNmY0OWUyZWJi MQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmF2Y29kZWMvdnVsa2FuL2ZmdjFfdnVsa2FuLmMKQEAg LTAsMCArMSwxMjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMjUgTHlubmUgPGRldkBseW5u ZS5lZT4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCisgKgorICogRkZtcGVn IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwor ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg ZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog TGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg UHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRo ZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs IEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisgKi8KKworI2luY2x1ZGUg ImZmdjFfdnVsa2FuLmgiCisjaW5jbHVkZSAibGliYXZ1dGlsL2NyYy5oIgorCitpbnQgZmZfZmZ2 MV92a191cGRhdGVfc3RhdGVfdHJhbnNpdGlvbl9kYXRhKEZGVnVsa2FuQ29udGV4dCAqcywKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkZWa0J1ZmZlciAqdmti LCBGRlYxQ29udGV4dCAqZikKK3sKKyAgICBpbnQgZXJyOworICAgIHVpbnQ4X3QgKmJ1Zl9tYXBw ZWQ7CisKKyAgICBSRVQoZmZfdmtfbWFwX2J1ZmZlcihzLCB2a2IsICZidWZfbWFwcGVkLCAwKSk7 CisKKyAgICBmb3IgKGludCBpID0gMTsgaSA8IDI1NjsgaSsrKSB7CisgICAgICAgIGJ1Zl9tYXBw ZWRbMjU2ICsgaV0gPSBmLT5zdGF0ZV90cmFuc2l0aW9uW2ldOworICAgICAgICBidWZfbWFwcGVk WzI1NiAtIGldID0gMjU2IC0gKGludClmLT5zdGF0ZV90cmFuc2l0aW9uW2ldOworICAgIH0KKwor ICAgIFJFVChmZl92a191bm1hcF9idWZmZXIocywgdmtiLCAxKSk7CisKK2ZhaWw6CisgICAgcmV0 dXJuIGVycjsKK30KKworc3RhdGljIGludCBpbml0X3N0YXRlX3RyYW5zaXRpb25fZGF0YShGRlZ1 bGthbkNvbnRleHQgKnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZG VmtCdWZmZXIgKnZrYiwgRkZWMUNvbnRleHQgKmYsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGludCAoKndyaXRlX2RhdGEpKEZGVnVsa2FuQ29udGV4dCAqcywKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkZWa0J1 ZmZlciAqdmtiLCBGRlYxQ29udGV4dCAqZikpCit7CisgICAgaW50IGVycjsKKyAgICBzaXplX3Qg YnVmX2xlbiA9IDUxMipzaXplb2YodWludDhfdCk7CisKKyAgICBSRVQoZmZfdmtfY3JlYXRlX2J1 ZihzLCB2a2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgYnVmX2xlbiwKKyAgICAgICAgICAg ICAgICAgICAgICAgICBOVUxMLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgIFZLX0JV RkZFUl9VU0FHRV9TSEFERVJfREVWSUNFX0FERFJFU1NfQklUIHwKKyAgICAgICAgICAgICAgICAg ICAgICAgICBWS19CVUZGRVJfVVNBR0VfVU5JRk9STV9CVUZGRVJfQklULAorICAgICAgICAgICAg ICAgICAgICAgICAgIFZLX01FTU9SWV9QUk9QRVJUWV9ERVZJQ0VfTE9DQUxfQklUIHwKKyAgICAg ICAgICAgICAgICAgICAgICAgICBWS19NRU1PUllfUFJPUEVSVFlfSE9TVF9WSVNJQkxFX0JJVCkp OworCisgICAgd3JpdGVfZGF0YShzLCB2a2IsIGYpOworCitmYWlsOgorICAgIHJldHVybiBlcnI7 Cit9CisKK2ludCBmZl9mZnYxX3ZrX2luaXRfc3RhdGVfdHJhbnNpdGlvbl9kYXRhKEZGVnVsa2Fu Q29udGV4dCAqcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZG VmtCdWZmZXIgKnZrYiwgRkZWMUNvbnRleHQgKmYpCit7CisgICAgcmV0dXJuIGluaXRfc3RhdGVf dHJhbnNpdGlvbl9kYXRhKHMsIHZrYiwgZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZmZfZmZ2MV92a191cGRhdGVfc3RhdGVfdHJhbnNpdGlvbl9kYXRhKTsKK30KKwor aW50IGZmX2ZmdjFfdmtfaW5pdF9xdWFudF90YWJsZV9kYXRhKEZGVnVsa2FuQ29udGV4dCAqcywK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGRlZrQnVmZmVyICp2a2IsIEZG VjFDb250ZXh0ICpmKQoreworICAgIGludCBlcnI7CisKKyAgICBpbnQxNl90ICpidWZfbWFwcGVk OworICAgIHNpemVfdCBidWZfbGVuID0gTUFYX1FVQU5UX1RBQkxFUyoKKyAgICAgICAgICAgICAg ICAgICAgIE1BWF9DT05URVhUX0lOUFVUUyoKKyAgICAgICAgICAgICAgICAgICAgIE1BWF9RVUFO VF9UQUJMRV9TSVpFKnNpemVvZihpbnQxNl90KTsKKworICAgIFJFVChmZl92a19jcmVhdGVfYnVm KHMsIHZrYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBidWZfbGVuLAorICAgICAgICAgICAg ICAgICAgICAgICAgIE5VTEwsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgVktfQlVG RkVSX1VTQUdFX1NIQURFUl9ERVZJQ0VfQUREUkVTU19CSVQgfAorICAgICAgICAgICAgICAgICAg ICAgICAgIFZLX0JVRkZFUl9VU0FHRV9VTklGT1JNX0JVRkZFUl9CSVQsCisgICAgICAgICAgICAg ICAgICAgICAgICAgVktfTUVNT1JZX1BST1BFUlRZX0RFVklDRV9MT0NBTF9CSVQgfAorICAgICAg ICAgICAgICAgICAgICAgICAgIFZLX01FTU9SWV9QUk9QRVJUWV9IT1NUX1ZJU0lCTEVfQklUKSk7 CisgICAgUkVUKGZmX3ZrX21hcF9idWZmZXIocywgdmtiLCAodm9pZCAqKSZidWZfbWFwcGVkLCAw KSk7CisKKyAgICBtZW1jcHkoYnVmX21hcHBlZCwgZi0+cXVhbnRfdGFibGVzLAorICAgICAgICAg ICBzaXplb2YoZi0+cXVhbnRfdGFibGVzKSk7CisKKyAgICBSRVQoZmZfdmtfdW5tYXBfYnVmZmVy KHMsIHZrYiwgMSkpOworCitmYWlsOgorICAgIHJldHVybiBlcnI7Cit9CisKK2ludCBmZl9mZnYx X3ZrX2luaXRfY3JjX3RhYmxlX2RhdGEoRkZWdWxrYW5Db250ZXh0ICpzLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBGRlZrQnVmZmVyICp2a2IsIEZGVjFDb250ZXh0ICpmKQor eworICAgIGludCBlcnI7CisKKyAgICB1aW50MzJfdCAqYnVmX21hcHBlZDsKKyAgICBzaXplX3Qg YnVmX2xlbiA9IDI1NipzaXplb2YoaW50MzJfdCk7CisKKyAgICBSRVQoZmZfdmtfY3JlYXRlX2J1 ZihzLCB2a2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgYnVmX2xlbiwKKyAgICAgICAgICAg ICAgICAgICAgICAgICBOVUxMLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgIFZLX0JV RkZFUl9VU0FHRV9TSEFERVJfREVWSUNFX0FERFJFU1NfQklUIHwKKyAgICAgICAgICAgICAgICAg ICAgICAgICBWS19CVUZGRVJfVVNBR0VfVU5JRk9STV9CVUZGRVJfQklULAorICAgICAgICAgICAg ICAgICAgICAgICAgIFZLX01FTU9SWV9QUk9QRVJUWV9ERVZJQ0VfTE9DQUxfQklUIHwKKyAgICAg ICAgICAgICAgICAgICAgICAgICBWS19NRU1PUllfUFJPUEVSVFlfSE9TVF9WSVNJQkxFX0JJVCkp OworICAgIFJFVChmZl92a19tYXBfYnVmZmVyKHMsIHZrYiwgKHZvaWQgKikmYnVmX21hcHBlZCwg MCkpOworCisgICAgbWVtY3B5KGJ1Zl9tYXBwZWQsIGF2X2NyY19nZXRfdGFibGUoQVZfQ1JDXzMy X0lFRUUpLCBidWZfbGVuKTsKKworICAgIFJFVChmZl92a191bm1hcF9idWZmZXIocywgdmtiLCAx KSk7CisKK2ZhaWw6CisgICAgcmV0dXJuIGVycjsKK30KLS0gCjIuNDkuMQoKCkZyb20gYjFmNmMz M2MzZTgzOWRhYTIwYjc3NzI4MmE4NTAyYjY2MGY2MWMxMiBNb24gU2VwIDE3IDAwOjAwOjAwIDIw MDEKRnJvbTogSmFtYWlrYTEgPGx1a2FzemN6MThAd3AucGw+CkRhdGU6IFdlZCwgMyBTZXAgMjAy NSAxMzoyNToyOCArMDAwMApTdWJqZWN0OiBbUEFUQ0ggMDU5LzExOF0gQ2hhbmdpbmcgdnVsa2Fu IGZpbGUgZGlyZWN0b3J5CgotLS0KIGxpYmF2Y29kZWMvZmZ2MWVuY192dWxrYW4uYyB8IDE4NDgg LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAxODQ4 IGRlbGV0aW9ucygtKQogZGVsZXRlIG1vZGUgMTAwNjQ0IGxpYmF2Y29kZWMvZmZ2MWVuY192dWxr YW4uYwoKZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvZmZ2MWVuY192dWxrYW4uYyBiL2xpYmF2Y29k ZWMvZmZ2MWVuY192dWxrYW4uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjU5YmM3 NWQ0Yy4uMDAwMDAwMDAwMAotLS0gYS9saWJhdmNvZGVjL2ZmdjFlbmNfdnVsa2FuLmMKKysrIC9k ZXYvbnVsbApAQCAtMSwxODQ4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMjQgTHlu bmUgPGRldkBseW5uZS5lZT4KLSAqCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCi0g KgotICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu ZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l cmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0 IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBGRm1wZWcgaXMgZGlzdHJp YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VU IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBN RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg dGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls cy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVz c2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3Qs IHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCi0gKi8K LQotI2luY2x1ZGUgImxpYmF2dXRpbC9tZW0uaCIKLSNpbmNsdWRlICJsaWJhdnV0aWwvdnVsa2Fu LmgiCi0jaW5jbHVkZSAibGliYXZ1dGlsL3Z1bGthbl9zcGlydi5oIgotCi0jaW5jbHVkZSAiYXZj b2RlYy5oIgotI2luY2x1ZGUgImludGVybmFsLmgiCi0jaW5jbHVkZSAiaHdjb25maWcuaCIKLSNp bmNsdWRlICJlbmNvZGUuaCIKLSNpbmNsdWRlICJsaWJhdnV0aWwvb3B0LmgiCi0jaW5jbHVkZSAi Y29kZWNfaW50ZXJuYWwuaCIKLQotI2luY2x1ZGUgImZmdjEuaCIKLSNpbmNsdWRlICJmZnYxZW5j LmgiCi0jaW5jbHVkZSAiZmZ2MV92dWxrYW4uaCIKLQotLyogUGFyYWxsZWwgR29sb21iIGFsaWdu bWVudCAqLwotI2RlZmluZSBMR19BTElHTl9XIDMyCi0jZGVmaW5lIExHX0FMSUdOX0ggMzIKLQot LyogVW5saWtlIHRoZSBkZWNvZGVyLCB3ZSBuZWVkIDQgbGluZXMgKGJ1dCByZWFsbHkgb25seSAz KSAqLwotI2RlZmluZSBSR0JfTElORUNBQ0hFIDQKLQotdHlwZWRlZiBzdHJ1Y3QgVnVsa2FuRW5j b2RlRkZ2MUZyYW1lRGF0YSB7Ci0gICAgLyogT3V0cHV0IGRhdGEgKi8KLSAgICBBVkJ1ZmZlclJl ZiAqb3V0X2RhdGFfcmVmOwotCi0gICAgLyogUmVzdWx0cyBkYXRhICovCi0gICAgQVZCdWZmZXJS ZWYgKnJlc3VsdHNfZGF0YV9yZWY7Ci0KLSAgICAvKiBDb3BpZWQgZnJvbSB0aGUgc291cmNlICov Ci0gICAgaW50NjRfdCBwdHM7Ci0gICAgaW50NjRfdCBkdXJhdGlvbjsKLSAgICB2b2lkICAgICAg ICAqZnJhbWVfb3BhcXVlOwotICAgIEFWQnVmZmVyUmVmICpmcmFtZV9vcGFxdWVfcmVmOwotCi0g ICAgaW50IGtleV9mcmFtZTsKLX0gVnVsa2FuRW5jb2RlRkZ2MUZyYW1lRGF0YTsKLQotdHlwZWRl ZiBzdHJ1Y3QgVnVsa2FuRW5jb2RlRkZ2MUNvbnRleHQgewotICAgIEZGVjFDb250ZXh0IGN0eDsK LSAgICBBVkZyYW1lICpmcmFtZTsKLQotICAgIEZGVnVsa2FuQ29udGV4dCBzOwotICAgIEFWVnVs a2FuRGV2aWNlUXVldWVGYW1pbHkgKnFmOwotICAgIEZGVmtFeGVjUG9vbCBleGVjX3Bvb2w7Ci0K LSAgICBBVlZ1bGthbkRldmljZVF1ZXVlRmFtaWx5ICp0cmFuc2Zlcl9xZjsKLSAgICBGRlZrRXhl Y1Bvb2wgdHJhbnNmZXJfZXhlY19wb29sOwotCi0gICAgVmtCdWZmZXJDb3B5ICpidWZfcmVnaW9u czsKLSAgICBWdWxrYW5FbmNvZGVGRnYxRnJhbWVEYXRhICpleGVjX2N0eF9pbmZvOwotICAgIGlu dCBpbl9mbGlnaHQ7Ci0gICAgaW50IGFzeW5jX2RlcHRoOwotICAgIHNpemVfdCBtYXhfaGVhcF9z aXplOwotCi0gICAgRkZWdWxrYW5TaGFkZXIgc2V0dXA7Ci0gICAgRkZWdWxrYW5TaGFkZXIgcmN0 X3NlYXJjaDsKLSAgICBGRlZ1bGthblNoYWRlciByZXNldDsKLSAgICBGRlZ1bGthblNoYWRlciBl bmM7Ci0KLSAgICAvKiBDb25zdGFudCByZWFkLW9ubHkgYnVmZmVycyAqLwotICAgIEZGVmtCdWZm ZXIgcXVhbnRfYnVmOwotICAgIEZGVmtCdWZmZXIgcmFuZ2Vjb2Rlcl9zdGF0aWNfYnVmOwotICAg IEZGVmtCdWZmZXIgY3JjX3RhYl9idWY7Ci0KLSAgICAvKiBTbGljZSBkYXRhIGJ1ZmZlciBwb29s ICovCi0gICAgQVZCdWZmZXJQb29sICpzbGljZV9kYXRhX3Bvb2w7Ci0gICAgQVZCdWZmZXJSZWYg KmtleWZyYW1lX3NsaWNlX2RhdGFfcmVmOwotCi0gICAgLyogT3V0cHV0IGRhdGEgYnVmZmVyICov Ci0gICAgQVZCdWZmZXJQb29sICpvdXRfZGF0YV9wb29sOwotCi0gICAgLyogU2xpY2UgcmVzdWx0 cyBidWZmZXIgKi8KLSAgICBBVkJ1ZmZlclBvb2wgKnJlc3VsdHNfZGF0YV9wb29sOwotCi0gICAg LyogSW50ZXJtZWRpYXRlIGZyYW1lIHBvb2wgKi8KLSAgICBBVkJ1ZmZlclJlZiAqaW50ZXJtZWRp YXRlX2ZyYW1lc19yZWY7Ci0KLSAgICAvKiBSZXByZXNlbnRhdGlvbiBtb2RlICovCi0gICAgZW51 bSBGRlZrU2hhZGVyUmVwRm9ybWF0IHJlcF9mbXQ7Ci0KLSAgICBpbnQgbnVtX2hfc2xpY2VzOwot ICAgIGludCBudW1fdl9zbGljZXM7Ci0gICAgaW50IGZvcmNlX3BjbTsKLSAgICBpbnQgb3B0aW1p emVfcmN0OwotCi0gICAgaW50IGlzX3JnYjsKLSAgICBpbnQgcHBpOwotICAgIGludCBjaHVua3M7 Ci19IFZ1bGthbkVuY29kZUZGdjFDb250ZXh0OwotCi1leHRlcm4gY29uc3QgY2hhciAqZmZfc291 cmNlX2NvbW1vbl9jb21wOwotZXh0ZXJuIGNvbnN0IGNoYXIgKmZmX3NvdXJjZV9yYW5nZWNvZGVy X2NvbXA7Ci1leHRlcm4gY29uc3QgY2hhciAqZmZfc291cmNlX2ZmdjFfdmxjX2NvbXA7Ci1leHRl cm4gY29uc3QgY2hhciAqZmZfc291cmNlX2ZmdjFfY29tbW9uX2NvbXA7Ci1leHRlcm4gY29uc3Qg Y2hhciAqZmZfc291cmNlX2ZmdjFfcmVzZXRfY29tcDsKLWV4dGVybiBjb25zdCBjaGFyICpmZl9z b3VyY2VfZmZ2MV9yY3Rfc2VhcmNoX2NvbXA7Ci1leHRlcm4gY29uc3QgY2hhciAqZmZfc291cmNl X2ZmdjFfZW5jX3NldHVwX2NvbXA7Ci1leHRlcm4gY29uc3QgY2hhciAqZmZfc291cmNlX2ZmdjFf ZW5jX2NvbXA7Ci0KLXR5cGVkZWYgc3RydWN0IEZGdjFWa1BhcmFtZXRlcnMgewotICAgIFZrRGV2 aWNlQWRkcmVzcyBzbGljZV9zdGF0ZTsKLSAgICBWa0RldmljZUFkZHJlc3Mgc2NyYXRjaF9kYXRh OwotICAgIFZrRGV2aWNlQWRkcmVzcyBvdXRfZGF0YTsKLQotICAgIGludDMyX3QgZm10X2x1dFs0 XTsKLSAgICBpbnQzMl90IHNhclsyXTsKLSAgICB1aW50MzJfdCBjaHJvbWFfc2hpZnRbMl07Ci0K LSAgICB1aW50MzJfdCBwbGFuZV9zdGF0ZV9zaXplOwotICAgIHVpbnQzMl90IGNvbnRleHRfY291 bnQ7Ci0gICAgdWludDMyX3QgY3JjcmVmOwotICAgIHVpbnQzMl90IHNsaWNlX3NpemVfbWF4Owot ICAgIGludCAgICAgIHJjdF9vZmZzZXQ7Ci0KLSAgICB1aW50OF90IGV4dGVuZF9sb29rdXBbOF07 Ci0gICAgdWludDhfdCBiaXRzX3Blcl9yYXdfc2FtcGxlOwotICAgIHVpbnQ4X3QgY29udGV4dF9t b2RlbDsKLSAgICB1aW50OF90IHZlcnNpb247Ci0gICAgdWludDhfdCBtaWNyb192ZXJzaW9uOwot ICAgIHVpbnQ4X3QgZm9yY2VfcGNtOwotICAgIHVpbnQ4X3Qga2V5X2ZyYW1lOwotICAgIHVpbnQ4 X3QgY29tcG9uZW50czsKLSAgICB1aW50OF90IHBsYW5lczsKLSAgICB1aW50OF90IGNvZGVjX3Bs YW5lczsKLSAgICB1aW50OF90IHBsYW5hcl9yZ2I7Ci0gICAgdWludDhfdCB0cmFuc3BhcmVuY3k7 Ci0gICAgdWludDhfdCBjb2xvcnNwYWNlOwotICAgIHVpbnQ4X3QgcGljX21vZGU7Ci0gICAgdWlu dDhfdCBlYzsKLSAgICB1aW50OF90IHBwaTsKLSAgICB1aW50OF90IGNodW5rczsKLSAgICB1aW50 OF90IHJjdF9zZWFyY2g7Ci0gICAgdWludDhfdCBwYWRkaW5nWzNdOwotfSBGRnYxVmtQYXJhbWV0 ZXJzOwotCi1zdGF0aWMgdm9pZCBhZGRfcHVzaF9kYXRhKEZGVnVsa2FuU2hhZGVyICpzaGQpCi17 Ci0gICAgR0xTTEMoMCwgbGF5b3V0KHB1c2hfY29uc3RhbnQsIHNjYWxhcikgdW5pZm9ybSBwdXNo Q29uc3RhbnRzIHsgICAgICAgICAgICApOwotICAgIEdMU0xDKDEsICAgIHU4YnVmIHNsaWNlX3N0 YXRlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBH TFNMQygxLCAgICB1OGJ1ZiBzY3JhdGNoX2RhdGE7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICk7Ci0gICAgR0xTTEMoMSwgICAgdThidWYgb3V0X2RhdGE7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIEdMU0xDKDAs ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKTsKLSAgICBHTFNMQygxLCAgICBpdmVjNCBmbXRfbHV0OyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgR0xTTEMoMSwgICAgaXZl YzIgc2FyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICApOwotICAgIEdMU0xDKDEsICAgIHV2ZWMyIGNocm9tYV9zaGlmdDsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBHTFNMQygwLCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0g ICAgR0xTTEMoMSwgICAgdWludCBwbGFuZV9zdGF0ZV9zaXplOyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICApOwotICAgIEdMU0xDKDEsICAgIHVpbnQgY29udGV4dF9jb3Vu dDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBHTFNM QygxLCAgICB1aW50MzJfdCBjcmNyZWY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICk7Ci0gICAgR0xTTEMoMSwgICAgdWludDMyX3Qgc2xpY2Vfc2l6ZV9tYXg7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIEdMU0xDKDEsICAg IGludCByY3Rfb2Zmc2V0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKTsKLSAgICBHTFNMQygwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgR0xTTEMoMSwgICAgdWludDhf dCBleHRlbmRfbG9va3VwWzhdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAp OwotICAgIEdMU0xDKDEsICAgIHVpbnQ4X3QgYml0c19wZXJfcmF3X3NhbXBsZTsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBHTFNMQygxLCAgICB1aW50OF90IGNvbnRl eHRfbW9kZWw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAg R0xTTEMoMSwgICAgdWludDhfdCB2ZXJzaW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICApOwotICAgIEdMU0xDKDEsICAgIHVpbnQ4X3QgbWljcm9fdmVyc2lv bjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBHTFNMQygx LCAgICB1aW50OF90IGZvcmNlX3BjbTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICk7Ci0gICAgR0xTTEMoMSwgICAgdWludDhfdCBrZXlfZnJhbWU7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIEdMU0xDKDEsICAgIHVp bnQ4X3QgY29tcG9uZW50czsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKTsKLSAgICBHTFNMQygxLCAgICB1aW50OF90IHBsYW5lczsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgR0xTTEMoMSwgICAgdWludDhfdCBj b2RlY19wbGFuZXM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwot ICAgIEdMU0xDKDEsICAgIHVpbnQ4X3QgcGxhbmFyX3JnYjsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBHTFNMQygxLCAgICB1aW50OF90IHRyYW5zcGFy ZW5jeTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgR0xT TEMoMSwgICAgdWludDhfdCBjb2xvcnNwYWNlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICApOwotICAgIEdMU0xDKDEsICAgIHVpbnQ4X3QgcGljX21vZGU7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBHTFNMQygxLCAg ICB1aW50OF90IGVjOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICk7Ci0gICAgR0xTTEMoMSwgICAgdWludDhfdCBwcGk7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIEdMU0xDKDEsICAgIHVpbnQ4 X3QgY2h1bmtzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KTsKLSAgICBHTFNMQygxLCAgICB1aW50OF90IHJjdF9zZWFyY2g7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgR0xTTEMoMSwgICAgdWludDhfdCBwYWRk aW5nWzNdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAg IEdMU0xDKDAsIH07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKTsKLSAgICBmZl92a19zaGFkZXJfYWRkX3B1c2hfY29uc3Qoc2hk LCAwLCBzaXplb2YoRkZ2MVZrUGFyYW1ldGVycyksCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFZLX1NIQURFUl9TVEFHRV9DT01QVVRFX0JJVCk7Ci19Ci0KLXR5cGVkZWYgc3RydWN0 IEZGdjFWa1JDVFNlYXJjaFBhcmFtZXRlcnMgewotICAgIGludCBmbXRfbHV0WzRdOwotICAgIGlu dCByY3Rfb2Zmc2V0OwotICAgIHVpbnQ4X3QgcGxhbmFyX3JnYjsKLSAgICB1aW50OF90IHRyYW5z cGFyZW5jeTsKLSAgICB1aW50OF90IGtleV9mcmFtZTsKLSAgICB1aW50OF90IGZvcmNlX3BjbTsK LSAgICB1aW50OF90IHZlcnNpb247Ci0gICAgdWludDhfdCBtaWNyb192ZXJzaW9uOwotICAgIHVp bnQ4X3QgcGFkZGluZ1syXTsKLX0gRkZ2MVZrUkNUU2VhcmNoUGFyYW1ldGVyczsKLQotc3RhdGlj IGludCBydW5fcmN0X3NlYXJjaChBVkNvZGVjQ29udGV4dCAqYXZjdHgsIEZGVmtFeGVjQ29udGV4 dCAqZXhlYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgQVZGcmFtZSAqZW5jX2luLCBWa0lt YWdlVmlldyAqZW5jX2luX3ZpZXdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICBGRlZrQnVm ZmVyICpzbGljZV9kYXRhX2J1ZiwgdWludDMyX3Qgc2xpY2VfZGF0YV9zaXplKQotewotICAgIFZ1 bGthbkVuY29kZUZGdjFDb250ZXh0ICpmdiA9IGF2Y3R4LT5wcml2X2RhdGE7Ci0gICAgRkZWMUNv bnRleHQgKmYgPSAmZnYtPmN0eDsKLSAgICBGRlZ1bGthbkZ1bmN0aW9ucyAqdmsgPSAmZnYtPnMu dmtmbjsKLSAgICBBVkhXRnJhbWVzQ29udGV4dCAqc3JjX2h3ZmMgPSAoQVZIV0ZyYW1lc0NvbnRl eHQgKillbmNfaW4tPmh3X2ZyYW1lc19jdHgtPmRhdGE7Ci0gICAgRkZ2MVZrUkNUU2VhcmNoUGFy YW1ldGVycyBwZDsKLQotICAgIC8qIFVwZGF0ZSBkZXNjcmlwdG9ycyAqLwotICAgIGZmX3ZrX3No YWRlcl91cGRhdGVfZGVzY19idWZmZXIoJmZ2LT5zLCBleGVjLCAmZnYtPnJjdF9zZWFyY2gsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc2xpY2VfZGF0YV9idWYsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAwLCBzbGljZV9kYXRhX3NpemUqZi0+c2xpY2VfY291bnQsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19GT1JNQVRfVU5ERUZJTkVEKTsK LSAgICBmZl92a19zaGFkZXJfdXBkYXRlX2ltZ19hcnJheSgmZnYtPnMsIGV4ZWMsICZmdi0+cmN0 X3NlYXJjaCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNfaW4sIGVuY19p bl92aWV3cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAxLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZLX0lNQUdFX0xBWU9VVF9HRU5FUkFMLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZLX05VTExfSEFORExFKTsKLQotICAgIGZm X3ZrX2V4ZWNfYmluZF9zaGFkZXIoJmZ2LT5zLCBleGVjLCAmZnYtPnJjdF9zZWFyY2gpOwotCi0g ICAgcGQgPSAoRkZ2MVZrUkNUU2VhcmNoUGFyYW1ldGVycykgewotICAgICAgICAucmN0X29mZnNl dCA9IDEgPDwgZi0+Yml0c19wZXJfcmF3X3NhbXBsZSwKLSAgICAgICAgLnBsYW5hcl9yZ2IgPSBm Zl92a19tdF9pc19ucF9yZ2Ioc3JjX2h3ZmMtPnN3X2Zvcm1hdCkgJiYKLSAgICAgICAgICAgICAg ICAgICAgICAoZmZfdmtfY291bnRfaW1hZ2VzKChBVlZrRnJhbWUgKillbmNfaW4tPmRhdGFbMF0p ID4gMSksCi0gICAgICAgIC50cmFuc3BhcmVuY3kgPSBmLT50cmFuc3BhcmVuY3ksCi0gICAgICAg IC5rZXlfZnJhbWUgPSBmLT5rZXlfZnJhbWUsCi0gICAgICAgIC5mb3JjZV9wY20gPSBmdi0+Zm9y Y2VfcGNtLAotICAgICAgICAudmVyc2lvbiA9IGYtPnZlcnNpb24sCi0gICAgICAgIC5taWNyb192 ZXJzaW9uID0gZi0+bWljcm9fdmVyc2lvbiwKLSAgICB9OwotCi0gICAgaWYgKGF2Y3R4LT5zd19w aXhfZm10ID09IEFWX1BJWF9GTVRfR0JSUDEwIHx8Ci0gICAgICAgIGF2Y3R4LT5zd19waXhfZm10 ID09IEFWX1BJWF9GTVRfR0JSUDEyIHx8Ci0gICAgICAgIGF2Y3R4LT5zd19waXhfZm10ID09IEFW X1BJWF9GTVRfR0JSUDE0KQotICAgICAgICBtZW1jcHkocGQuZm10X2x1dCwgKGludCBbNF0pIHsg MiwgMSwgMCwgMyB9LCA0KnNpemVvZihpbnQpKTsKLSAgICBlbHNlCi0gICAgICAgIGZmX3ZrX3Nl dF9wZXJtKGF2Y3R4LT5zd19waXhfZm10LCBwZC5mbXRfbHV0LCAxKTsKLQotICAgIGZmX3ZrX3No YWRlcl91cGRhdGVfcHVzaF9jb25zdCgmZnYtPnMsIGV4ZWMsICZmdi0+cmN0X3NlYXJjaCwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfU0hBREVSX1NUQUdFX0NPTVBVVEVf QklULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBzaXplb2YocGQpLCAm cGQpOwotCi0gICAgdmstPkNtZERpc3BhdGNoKGV4ZWMtPmJ1ZiwgZnYtPmN0eC5udW1faF9zbGlj ZXMsIGZ2LT5jdHgubnVtX3Zfc2xpY2VzLCAxKTsKLQotICAgIHJldHVybiAwOwotfQotCi1zdGF0 aWMgaW50IHZ1bGthbl9lbmNvZGVfZmZ2MV9zdWJtaXRfZnJhbWUoQVZDb2RlY0NvbnRleHQgKmF2 Y3R4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZGVmtFeGVj Q29udGV4dCAqZXhlYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBBVkZyYW1lICpwaWN0KQotewotICAgIGludCBlcnI7Ci0gICAgVnVsa2FuRW5jb2Rl RkZ2MUNvbnRleHQgKmZ2ID0gYXZjdHgtPnByaXZfZGF0YTsKLSAgICBGRlYxQ29udGV4dCAqZiA9 ICZmdi0+Y3R4OwotICAgIEZGVnVsa2FuRnVuY3Rpb25zICp2ayA9ICZmdi0+cy52a2ZuOwotCi0g ICAgVnVsa2FuRW5jb2RlRkZ2MUZyYW1lRGF0YSAqZmQgPSBleGVjLT5vcGFxdWU7Ci0gICAgRkZ2 MVZrUGFyYW1ldGVycyBwZDsKLQotICAgIC8qIFNsaWNlIGRhdGEgKi8KLSAgICBBVkJ1ZmZlclJl ZiAqc2xpY2VfZGF0YV9yZWY7Ci0gICAgRkZWa0J1ZmZlciAqc2xpY2VfZGF0YV9idWY7Ci0gICAg dWludDMyX3QgcGxhbmVfc3RhdGVfc2l6ZTsKLSAgICB1aW50MzJfdCBzbGljZV9zdGF0ZV9zaXpl OwotICAgIHVpbnQzMl90IHNsaWNlX2RhdGFfc2l6ZTsKLQotICAgIC8qIE91dHB1dCBkYXRhICov Ci0gICAgc2l6ZV90IG1heHNpemU7Ci0gICAgRkZWa0J1ZmZlciAqb3V0X2RhdGFfYnVmOwotCi0g ICAgLyogUmVzdWx0cyBkYXRhICovCi0gICAgRkZWa0J1ZmZlciAqcmVzdWx0c19kYXRhX2J1ZjsK LQotICAgIGludCBoYXNfaW50ZXIgPSBhdmN0eC0+Z29wX3NpemUgPiAxOwotICAgIHVpbnQzMl90 IGNvbnRleHRfY291bnQgPSBmLT5jb250ZXh0X2NvdW50W2YtPmNvbnRleHRfbW9kZWxdOwotICAg IGNvbnN0IEFWUGl4Rm10RGVzY3JpcHRvciAqZm10X2Rlc2MgPSBhdl9waXhfZm10X2Rlc2NfZ2V0 KGF2Y3R4LT5zd19waXhfZm10KTsKLQotICAgIEFWRnJhbWUgKnNyYyA9IChBVkZyYW1lICopcGlj dDsKLSAgICBWa0ltYWdlVmlldyBzcmNfdmlld3NbQVZfTlVNX0RBVEFfUE9JTlRFUlNdOwotCi0g ICAgQVZGcmFtZSAqdG1wID0gTlVMTDsKLSAgICBWa0ltYWdlVmlldyB0bXBfdmlld3NbQVZfTlVN X0RBVEFfUE9JTlRFUlNdOwotCi0gICAgVmtJbWFnZU1lbW9yeUJhcnJpZXIyIGltZ19iYXJbMzdd OwotICAgIGludCBuYl9pbWdfYmFyID0gMDsKLSAgICBWa0J1ZmZlck1lbW9yeUJhcnJpZXIyIGJ1 Zl9iYXJbOF07Ci0gICAgaW50IG5iX2J1Zl9iYXIgPSAwOwotCi0gICAgLyogU3RhcnQgcmVjb3Jk aW5nICovCi0gICAgZmZfdmtfZXhlY19zdGFydCgmZnYtPnMsIGV4ZWMpOwotCi0gICAgLyogRnJh bWUgc3RhdGUgKi8KLSAgICBmLT5jdXJfZW5jX2ZyYW1lID0gcGljdDsKLSAgICBpZiAoYXZjdHgt PmdvcF9zaXplID09IDAgfHwgZi0+cGljdHVyZV9udW1iZXIgJSBhdmN0eC0+Z29wX3NpemUgPT0g MCkgewotICAgICAgICBhdl9idWZmZXJfdW5yZWYoJmZ2LT5rZXlmcmFtZV9zbGljZV9kYXRhX3Jl Zik7Ci0gICAgICAgIGYtPmtleV9mcmFtZSA9IGZkLT5rZXlfZnJhbWUgPSAxOwotICAgICAgICBm LT5nb2JfY291bnQrKzsKLSAgICB9IGVsc2UgewotICAgICAgICBmLT5rZXlfZnJhbWUgPSBmZC0+ a2V5X2ZyYW1lID0gMDsKLSAgICB9Ci0KLSAgICBmLT5zbGljZV9jb3VudCA9IGYtPm1heF9zbGlj ZV9jb3VudDsKLQotICAgIC8qIEFsbG9jYXRlIHNsaWNlIGJ1ZmZlciBkYXRhICovCi0gICAgaWYg KGYtPmFjID09IEFDX0dPTE9NQl9SSUNFKQotICAgICAgICBwbGFuZV9zdGF0ZV9zaXplID0gODsK LSAgICBlbHNlCi0gICAgICAgIHBsYW5lX3N0YXRlX3NpemUgPSBDT05URVhUX1NJWkU7Ci0KLSAg ICBwbGFuZV9zdGF0ZV9zaXplICo9IGNvbnRleHRfY291bnQ7Ci0gICAgc2xpY2Vfc3RhdGVfc2l6 ZSA9IHBsYW5lX3N0YXRlX3NpemUqZi0+cGxhbmVfY291bnQ7Ci0KLSAgICBzbGljZV9kYXRhX3Np emUgPSAyNTY7IC8qIE92ZXJlc3RpbWF0aW9uIGZvciB0aGUgU2xpY2VDb250ZXh0IHN0cnVjdCAq LwotICAgIHNsaWNlX3N0YXRlX3NpemUgKz0gc2xpY2VfZGF0YV9zaXplOwotICAgIHNsaWNlX3N0 YXRlX3NpemUgPSBGRkFMSUdOKHNsaWNlX3N0YXRlX3NpemUsIDgpOwotCi0gICAgLyogQWxsb2Nh dGUgc2xpY2UgZGF0YSBidWZmZXIgKi8KLSAgICBzbGljZV9kYXRhX3JlZiA9IGZ2LT5rZXlmcmFt ZV9zbGljZV9kYXRhX3JlZjsKLSAgICBpZiAoIXNsaWNlX2RhdGFfcmVmKSB7Ci0gICAgICAgIFJF VChmZl92a19nZXRfcG9vbGVkX2J1ZmZlcigmZnYtPnMsICZmdi0+c2xpY2VfZGF0YV9wb29sLAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNsaWNlX2RhdGFfcmVmLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfQlVGRkVSX1VTQUdFX1NUT1JBR0Vf QlVGRkVSX0JJVCB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19CVUZG RVJfVVNBR0VfU0hBREVSX0RFVklDRV9BRERSRVNTX0JJVCwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIE5VTEwsIHNsaWNlX3N0YXRlX3NpemUqZi0+c2xpY2VfY291bnQsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19NRU1PUllfUFJPUEVSVFlfREVW SUNFX0xPQ0FMX0JJVCkpOwotCi0gICAgICAgIC8qIE9ubHkgc2F2ZSBpdCBpZiB3ZSdyZSBnb2lu ZyB0byB1c2UgaXQgYWdhaW4gKi8KLSAgICAgICAgaWYgKGhhc19pbnRlcikKLSAgICAgICAgICAg IGZ2LT5rZXlmcmFtZV9zbGljZV9kYXRhX3JlZiA9IHNsaWNlX2RhdGFfcmVmOwotICAgIH0KLSAg ICBzbGljZV9kYXRhX2J1ZiA9IChGRlZrQnVmZmVyICopc2xpY2VfZGF0YV9yZWYtPmRhdGE7Ci0g ICAgZmZfdmtfZXhlY19hZGRfZGVwX2J1ZigmZnYtPnMsIGV4ZWMsICZzbGljZV9kYXRhX3JlZiwg MSwgaGFzX2ludGVyKTsKLQotICAgIC8qIEFsbG9jYXRlIHJlc3VsdHMgYnVmZmVyICovCi0gICAg UkVUKGZmX3ZrX2dldF9wb29sZWRfYnVmZmVyKCZmdi0+cywgJmZ2LT5yZXN1bHRzX2RhdGFfcG9v bCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZkLT5yZXN1bHRzX2RhdGFfcmVm LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19CVUZGRVJfVVNBR0VfU1RPUkFH RV9CVUZGRVJfQklUIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfQlVGRkVS X1VTQUdFX1NIQURFUl9ERVZJQ0VfQUREUkVTU19CSVQsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIE5VTEwsIDIqZi0+c2xpY2VfY291bnQqc2l6ZW9mKHVpbnQ2NF90KSwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfTUVNT1JZX1BST1BFUlRZX0RFVklDRV9MT0NB TF9CSVQgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19NRU1PUllfUFJPUEVS VFlfSE9TVF9WSVNJQkxFX0JJVCkpOwotICAgIHJlc3VsdHNfZGF0YV9idWYgPSAoRkZWa0J1ZmZl ciAqKWZkLT5yZXN1bHRzX2RhdGFfcmVmLT5kYXRhOwotICAgIGZmX3ZrX2V4ZWNfYWRkX2RlcF9i dWYoJmZ2LT5zLCBleGVjLCAmZmQtPnJlc3VsdHNfZGF0YV9yZWYsIDEsIDEpOwotCi0gICAgLyog T3V0cHV0IGJ1ZmZlciBzaXplICovCi0gICAgbWF4c2l6ZSA9IGZmX2ZmdjFfZW5jb2RlX2J1ZmZl cl9zaXplKGF2Y3R4KTsKLSAgICBtYXhzaXplID0gRkZNSU4obWF4c2l6ZSwgZnYtPnMucHJvcHNf MTEubWF4TWVtb3J5QWxsb2NhdGlvblNpemUpOwotCi0gICAgLyogQWxsb2NhdGUgb3V0cHV0IGJ1 ZmZlciAqLwotICAgIFJFVChmZl92a19nZXRfcG9vbGVkX2J1ZmZlcigmZnYtPnMsICZmdi0+b3V0 X2RhdGFfcG9vbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZkLT5vdXRfZGF0 YV9yZWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZLX0JVRkZFUl9VU0FHRV9U UkFOU0ZFUl9TUkNfQklUIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfQlVG RkVSX1VTQUdFX1NUT1JBR0VfQlVGRkVSX0JJVCB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFZLX0JVRkZFUl9VU0FHRV9TSEFERVJfREVWSUNFX0FERFJFU1NfQklULAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBtYXhzaXplLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBWS19NRU1PUllfUFJPUEVSVFlfSE9TVF9WSVNJQkxFX0JJVCB8Ci0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtYXhzaXplIDwgZnYtPm1heF9oZWFwX3Np emUgPwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfTUVNT1JZX1BST1BFUlRZ X0RFVklDRV9MT0NBTF9CSVQgOiAweDApIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKCEoZnYtPnMuZXh0ZW5zaW9ucyAmIEZGX1ZLX0VYVF9FWFRFUk5BTF9IT1NUX01FTU9SWSkg PwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfTUVNT1JZX1BST1BFUlRZX0hP U1RfQ0FDSEVEX0JJVCA6IDB4MCkpKTsKLSAgICBvdXRfZGF0YV9idWYgPSAoRkZWa0J1ZmZlciAq KWZkLT5vdXRfZGF0YV9yZWYtPmRhdGE7Ci0gICAgZmZfdmtfZXhlY19hZGRfZGVwX2J1ZigmZnYt PnMsIGV4ZWMsICZmZC0+b3V0X2RhdGFfcmVmLCAxLCAxKTsKLQotICAgIC8qIFByZXBhcmUgaW5w dXQgZnJhbWUgKi8KLSAgICBSRVQoZmZfdmtfZXhlY19hZGRfZGVwX2ZyYW1lKCZmdi0+cywgZXhl Yywgc3JjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfUElQRUxJTkVfU1RB R0VfMl9BTExfQ09NTUFORFNfQklULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg VktfUElQRUxJTkVfU1RBR0VfMl9DT01QVVRFX1NIQURFUl9CSVQpKTsKLQotICAgIFJFVChmZl92 a19jcmVhdGVfaW1hZ2V2aWV3cygmZnYtPnMsIGV4ZWMsIHNyY192aWV3cywgc3JjLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBmdi0+cmVwX2ZtdCkpOwotICAgIGZmX3ZrX2ZyYW1l X2JhcnJpZXIoJmZ2LT5zLCBleGVjLCBzcmMsIGltZ19iYXIsICZuYl9pbWdfYmFyLAotICAgICAg ICAgICAgICAgICAgICAgICAgVktfUElQRUxJTkVfU1RBR0VfMl9BTExfQ09NTUFORFNfQklULAot ICAgICAgICAgICAgICAgICAgICAgICAgVktfUElQRUxJTkVfU1RBR0VfMl9DT01QVVRFX1NIQURF Ul9CSVQsCi0gICAgICAgICAgICAgICAgICAgICAgICBWS19BQ0NFU1NfU0hBREVSX1JFQURfQklU LAotICAgICAgICAgICAgICAgICAgICAgICAgVktfSU1BR0VfTEFZT1VUX0dFTkVSQUwsCi0gICAg ICAgICAgICAgICAgICAgICAgICBWS19RVUVVRV9GQU1JTFlfSUdOT1JFRCk7Ci0KLSAgICBpZiAo ZnYtPmlzX3JnYikgewotICAgICAgICAvKiBDcmVhdGUgYSB0ZW1wb3JhdHkgZnJhbWUgKi8KLSAg ICAgICAgdG1wID0gYXZfZnJhbWVfYWxsb2MoKTsKLSAgICAgICAgaWYgKCEodG1wKSkKLSAgICAg ICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7Ci0KLSAgICAgICAgUkVUKGF2X2h3ZnJhbWVf Z2V0X2J1ZmZlcihmdi0+aW50ZXJtZWRpYXRlX2ZyYW1lc19yZWYsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdG1wLCAwKSk7Ci0KLSAgICAgICAgUkVUKGZmX3ZrX2V4ZWNfYWRk X2RlcF9mcmFtZSgmZnYtPnMsIGV4ZWMsIHRtcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBWS19QSVBFTElORV9TVEFHRV8yX0FMTF9DT01NQU5EU19CSVQsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfUElQRUxJTkVfU1RBR0VfMl9DT01QVVRF X1NIQURFUl9CSVQpKTsKLSAgICAgICAgUkVUKGZmX3ZrX2NyZWF0ZV9pbWFnZXZpZXdzKCZmdi0+ cywgZXhlYywgdG1wX3ZpZXdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dG1wLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnYtPnJlcF9mbXQpKTsK LSAgICB9Ci0KLSAgICAvKiBTZXR1cCBzaGFkZXIgKi8KLSAgICBmZl92a19zaGFkZXJfdXBkYXRl X2Rlc2NfYnVmZmVyKCZmdi0+cywgZXhlYywgJmZ2LT5zZXR1cCwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDEsIDAsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzbGljZV9kYXRhX2J1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDAsIHNsaWNlX2RhdGFfc2l6ZSpmLT5zbGljZV9jb3VudCwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFZLX0ZPUk1BVF9VTkRFRklORUQpOwotICAgIGZmX3ZrX3NoYWRl cl91cGRhdGVfaW1nX2FycmF5KCZmdi0+cywgZXhlYywgJmZ2LT5zZXR1cCwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzcmMsIHNyY192aWV3cywKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAxLCAxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFZLX0lNQUdFX0xBWU9VVF9HRU5FUkFMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFZLX05VTExfSEFORExFKTsKLQotICAgIC8qIEFkZCBhIGJ1ZmZlciBiYXJyaWVyIGJldHdl ZW4gcHJldmlvdXMgYW5kIGN1cnJlbnQgZnJhbWUgKi8KLSAgICBpZiAoIWYtPmtleV9mcmFtZSkg ewotICAgICAgICBidWZfYmFyW25iX2J1Zl9iYXIrK10gPSAoVmtCdWZmZXJNZW1vcnlCYXJyaWVy MikgewotICAgICAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfQlVGRkVSX01FTU9S WV9CQVJSSUVSXzIsCi0gICAgICAgICAgICAuc3JjU3RhZ2VNYXNrID0gc2xpY2VfZGF0YV9idWYt PnN0YWdlLAotICAgICAgICAgICAgLmRzdFN0YWdlTWFzayA9IFZLX1BJUEVMSU5FX1NUQUdFXzJf Q09NUFVURV9TSEFERVJfQklULAotICAgICAgICAgICAgLnNyY0FjY2Vzc01hc2sgPSBzbGljZV9k YXRhX2J1Zi0+YWNjZXNzLAotICAgICAgICAgICAgLmRzdEFjY2Vzc01hc2sgPSBWS19BQ0NFU1Nf Ml9TSEFERVJfU1RPUkFHRV9SRUFEX0JJVCB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg IFZLX0FDQ0VTU18yX1NIQURFUl9TVE9SQUdFX1dSSVRFX0JJVCwKLSAgICAgICAgICAgIC5zcmNR dWV1ZUZhbWlseUluZGV4ID0gVktfUVVFVUVfRkFNSUxZX0lHTk9SRUQsCi0gICAgICAgICAgICAu ZHN0UXVldWVGYW1pbHlJbmRleCA9IFZLX1FVRVVFX0ZBTUlMWV9JR05PUkVELAotICAgICAgICAg ICAgLmJ1ZmZlciA9IHNsaWNlX2RhdGFfYnVmLT5idWYsCi0gICAgICAgICAgICAuc2l6ZSA9IFZL X1dIT0xFX1NJWkUsCi0gICAgICAgICAgICAub2Zmc2V0ID0gMCwKLSAgICAgICAgfTsKLSAgICB9 Ci0KLSAgICBpZiAoZnYtPm9wdGltaXplX3JjdCkgewotICAgICAgICBSRVQocnVuX3JjdF9zZWFy Y2goYXZjdHgsIGV4ZWMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBzcmMsIHNyY192aWV3 cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsaWNlX2RhdGFfYnVmLCBzbGljZV9kYXRh X3NpemUpKTsKLQotICAgICAgICBidWZfYmFyW25iX2J1Zl9iYXIrK10gPSAoVmtCdWZmZXJNZW1v cnlCYXJyaWVyMikgewotICAgICAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfQlVG RkVSX01FTU9SWV9CQVJSSUVSXzIsCi0gICAgICAgICAgICAuc3JjU3RhZ2VNYXNrID0gc2xpY2Vf ZGF0YV9idWYtPnN0YWdlLAotICAgICAgICAgICAgLmRzdFN0YWdlTWFzayA9IFZLX1BJUEVMSU5F X1NUQUdFXzJfQ09NUFVURV9TSEFERVJfQklULAotICAgICAgICAgICAgLnNyY0FjY2Vzc01hc2sg PSBzbGljZV9kYXRhX2J1Zi0+YWNjZXNzLAotICAgICAgICAgICAgLmRzdEFjY2Vzc01hc2sgPSBW S19BQ0NFU1NfMl9TSEFERVJfU1RPUkFHRV9XUklURV9CSVQsCi0gICAgICAgICAgICAuc3JjUXVl dWVGYW1pbHlJbmRleCA9IFZLX1FVRVVFX0ZBTUlMWV9JR05PUkVELAotICAgICAgICAgICAgLmRz dFF1ZXVlRmFtaWx5SW5kZXggPSBWS19RVUVVRV9GQU1JTFlfSUdOT1JFRCwKLSAgICAgICAgICAg IC5idWZmZXIgPSBzbGljZV9kYXRhX2J1Zi0+YnVmLAotICAgICAgICAgICAgLnNpemUgPSBzbGlj ZV9kYXRhX3NpemUqZi0+c2xpY2VfY291bnQsCi0gICAgICAgICAgICAub2Zmc2V0ID0gMCwKLSAg ICAgICAgfTsKLSAgICB9Ci0KLSAgICB2ay0+Q21kUGlwZWxpbmVCYXJyaWVyMihleGVjLT5idWYs ICYoVmtEZXBlbmRlbmN5SW5mbykgewotICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQ RV9ERVBFTkRFTkNZX0lORk8sCi0gICAgICAgIC5wSW1hZ2VNZW1vcnlCYXJyaWVycyA9IGltZ19i YXIsCi0gICAgICAgIC5pbWFnZU1lbW9yeUJhcnJpZXJDb3VudCA9IG5iX2ltZ19iYXIsCi0gICAg ICAgIC5wQnVmZmVyTWVtb3J5QmFycmllcnMgPSBidWZfYmFyLAotICAgICAgICAuYnVmZmVyTWVt b3J5QmFycmllckNvdW50ID0gbmJfYnVmX2JhciwKLSAgICB9KTsKLSAgICBuYl9pbWdfYmFyID0g MDsKLSAgICBpZiAobmJfYnVmX2JhcikgewotICAgICAgICBzbGljZV9kYXRhX2J1Zi0+c3RhZ2Ug PSBidWZfYmFyWzBdLmRzdFN0YWdlTWFzazsKLSAgICAgICAgc2xpY2VfZGF0YV9idWYtPmFjY2Vz cyA9IGJ1Zl9iYXJbMF0uZHN0QWNjZXNzTWFzazsKLSAgICAgICAgbmJfYnVmX2JhciA9IDA7Ci0g ICAgfQotCi0gICAgLyogUnVuIHNldHVwIHNoYWRlciAqLwotICAgIGZmX3ZrX2V4ZWNfYmluZF9z aGFkZXIoJmZ2LT5zLCBleGVjLCAmZnYtPnNldHVwKTsKLSAgICBwZCA9IChGRnYxVmtQYXJhbWV0 ZXJzKSB7Ci0gICAgICAgIC5zbGljZV9zdGF0ZSA9IHNsaWNlX2RhdGFfYnVmLT5hZGRyZXNzICsg Zi0+c2xpY2VfY291bnQqMjU2LAotICAgICAgICAub3V0X2RhdGEgPSBvdXRfZGF0YV9idWYtPmFk ZHJlc3MsCi0gICAgICAgIC5iaXRzX3Blcl9yYXdfc2FtcGxlID0gZi0+Yml0c19wZXJfcmF3X3Nh bXBsZSwKLSAgICAgICAgLnNhclswXSA9IHBpY3QtPnNhbXBsZV9hc3BlY3RfcmF0aW8ubnVtLAot ICAgICAgICAuc2FyWzFdID0gcGljdC0+c2FtcGxlX2FzcGVjdF9yYXRpby5kZW4sCi0gICAgICAg IC5jaHJvbWFfc2hpZnRbMF0gPSBmLT5jaHJvbWFfaF9zaGlmdCwKLSAgICAgICAgLmNocm9tYV9z aGlmdFsxXSA9IGYtPmNocm9tYV92X3NoaWZ0LAotICAgICAgICAucGxhbmVfc3RhdGVfc2l6ZSA9 IHBsYW5lX3N0YXRlX3NpemUsCi0gICAgICAgIC5jb250ZXh0X2NvdW50ID0gY29udGV4dF9jb3Vu dCwKLSAgICAgICAgLmNyY3JlZiA9IGYtPmNyY3JlZiwKLSAgICAgICAgLnJjdF9vZmZzZXQgPSAx IDw8IGYtPmJpdHNfcGVyX3Jhd19zYW1wbGUsCi0gICAgICAgIC5zbGljZV9zaXplX21heCA9IG91 dF9kYXRhX2J1Zi0+c2l6ZSAvIGYtPnNsaWNlX2NvdW50LAotICAgICAgICAuY29udGV4dF9tb2Rl bCA9IGZ2LT5jdHguY29udGV4dF9tb2RlbCwKLSAgICAgICAgLnZlcnNpb24gPSBmLT52ZXJzaW9u LAotICAgICAgICAubWljcm9fdmVyc2lvbiA9IGYtPm1pY3JvX3ZlcnNpb24sCi0gICAgICAgIC5m b3JjZV9wY20gPSBmdi0+Zm9yY2VfcGNtLAotICAgICAgICAua2V5X2ZyYW1lID0gZi0+a2V5X2Zy YW1lLAotICAgICAgICAuY29tcG9uZW50cyA9IGZtdF9kZXNjLT5uYl9jb21wb25lbnRzLAotICAg ICAgICAucGxhbmVzID0gYXZfcGl4X2ZtdF9jb3VudF9wbGFuZXMoYXZjdHgtPnN3X3BpeF9mbXQp LAotICAgICAgICAuY29kZWNfcGxhbmVzID0gZi0+cGxhbmVfY291bnQsCi0gICAgICAgIC5wbGFu YXJfcmdiID0gZmZfdmtfbXRfaXNfbnBfcmdiKGF2Y3R4LT5zd19waXhfZm10KSAmJgotICAgICAg ICAgICAgICAgICAgICAgIChmZl92a19jb3VudF9pbWFnZXMoKEFWVmtGcmFtZSAqKXNyYy0+ZGF0 YVswXSkgPiAxKSwKLSAgICAgICAgLnRyYW5zcGFyZW5jeSA9IGYtPnRyYW5zcGFyZW5jeSwKLSAg ICAgICAgLmNvbG9yc3BhY2UgPSBmLT5jb2xvcnNwYWNlLAotICAgICAgICAucGljX21vZGUgPSAh KHBpY3QtPmZsYWdzICYgQVZfRlJBTUVfRkxBR19JTlRFUkxBQ0VEKSA/IDMgOgotICAgICAgICAg ICAgICAgICAgICAhKHBpY3QtPmZsYWdzICYgQVZfRlJBTUVfRkxBR19UT1BfRklFTERfRklSU1Qp ID8gMiA6IDEsCi0gICAgICAgIC5lYyA9IGYtPmVjLAotICAgICAgICAucHBpID0gZnYtPnBwaSwK LSAgICAgICAgLmNodW5rcyA9IGZ2LT5jaHVua3MsCi0gICAgICAgIC5yY3Rfc2VhcmNoID0gZnYt Pm9wdGltaXplX3JjdCwKLSAgICB9OwotCi0gICAgLyogRm9yIHNvbWUgcmVhc29uIHRoZSBDIEZG djEgZW5jb2Rlci9kZWNvZGVyIHRyZWF0cyB0aGVzZSBkaWZmZXJlbnRseSAqLwotICAgIGlmIChh dmN0eC0+c3dfcGl4X2ZtdCA9PSBBVl9QSVhfRk1UX0dCUlAxMCB8fAotICAgICAgICBhdmN0eC0+ c3dfcGl4X2ZtdCA9PSBBVl9QSVhfRk1UX0dCUlAxMiB8fAotICAgICAgICBhdmN0eC0+c3dfcGl4 X2ZtdCA9PSBBVl9QSVhfRk1UX0dCUlAxNCkKLSAgICAgICAgbWVtY3B5KHBkLmZtdF9sdXQsIChp bnQgWzRdKSB7IDIsIDEsIDAsIDMgfSwgNCpzaXplb2YoaW50KSk7Ci0gICAgZWxzZQotICAgICAg ICBmZl92a19zZXRfcGVybShhdmN0eC0+c3dfcGl4X2ZtdCwgcGQuZm10X2x1dCwgMSk7Ci0KLSAg ICBmb3IgKGludCBpID0gMDsgaSA8IGYtPnF1YW50X3RhYmxlX2NvdW50OyBpKyspCi0gICAgICAg IHBkLmV4dGVuZF9sb29rdXBbaV0gPSAoZi0+cXVhbnRfdGFibGVzW2ldWzNdWzEyN10gIT0gMCkg fHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmLT5xdWFudF90YWJsZXNbaV1bNF1b MTI3XSAhPSAwKTsKLSAgICBmZl92a19zaGFkZXJfdXBkYXRlX3B1c2hfY29uc3QoJmZ2LT5zLCBl eGVjLCAmZnYtPnNldHVwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19T SEFERVJfU1RBR0VfQ09NUFVURV9CSVQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDAsIHNpemVvZihwZCksICZwZCk7Ci0gICAgdmstPkNtZERpc3BhdGNoKGV4ZWMtPmJ1Ziwg ZnYtPmN0eC5udW1faF9zbGljZXMsIGZ2LT5jdHgubnVtX3Zfc2xpY2VzLCAxKTsKLQotICAgIC8q IENsZWFuIHVwIHRlbXBvcmFyeSBpbWFnZSAqLwotICAgIGlmIChmdi0+aXNfcmdiKSB7Ci0gICAg ICAgIEFWVmtGcmFtZSAqdmtmID0gKEFWVmtGcmFtZSAqKXRtcC0+ZGF0YVswXTsKLSAgICAgICAg dmstPkNtZENsZWFyQ29sb3JJbWFnZShleGVjLT5idWYsIHZrZi0+aW1nWzBdLCBWS19JTUFHRV9M QVlPVVRfR0VORVJBTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmKChWa0NsZWFy Q29sb3JWYWx1ZSkgeyAwIH0pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsICYo KFZrSW1hZ2VTdWJyZXNvdXJjZVJhbmdlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIC5hc3BlY3RNYXNrID0gVktfSU1BR0VfQVNQRUNUX0NPTE9SX0JJVCwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLmxldmVsQ291bnQgPSAxLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAubGF5ZXJDb3VudCA9IDEsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgfSkpOwotICAgIH0KLQotICAgIC8qIFNldHVwIHNoYWRlciBtb2RpZmll ZCB0aGUgc2xpY2UgZGF0YSBidWZmZXIgKi8KLSAgICBidWZfYmFyW25iX2J1Zl9iYXIrK10gPSAo VmtCdWZmZXJNZW1vcnlCYXJyaWVyMikgewotICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVf VFlQRV9CVUZGRVJfTUVNT1JZX0JBUlJJRVJfMiwKLSAgICAgICAgLnNyY1N0YWdlTWFzayA9IHNs aWNlX2RhdGFfYnVmLT5zdGFnZSwKLSAgICAgICAgLmRzdFN0YWdlTWFzayA9IFZLX1BJUEVMSU5F X1NUQUdFXzJfQ09NUFVURV9TSEFERVJfQklULAotICAgICAgICAuc3JjQWNjZXNzTWFzayA9IHNs aWNlX2RhdGFfYnVmLT5hY2Nlc3MsCi0gICAgICAgIC5kc3RBY2Nlc3NNYXNrID0gVktfQUNDRVNT XzJfU0hBREVSX1NUT1JBR0VfUkVBRF9CSVQgfAotICAgICAgICAgICAgICAgICAgICAgICAgIFZL X0FDQ0VTU18yX1NIQURFUl9TVE9SQUdFX1dSSVRFX0JJVCwKLSAgICAgICAgLnNyY1F1ZXVlRmFt aWx5SW5kZXggPSBWS19RVUVVRV9GQU1JTFlfSUdOT1JFRCwKLSAgICAgICAgLmRzdFF1ZXVlRmFt aWx5SW5kZXggPSBWS19RVUVVRV9GQU1JTFlfSUdOT1JFRCwKLSAgICAgICAgLmJ1ZmZlciA9IHNs aWNlX2RhdGFfYnVmLT5idWYsCi0gICAgICAgIC5zaXplID0gc2xpY2VfZGF0YV9zaXplKmYtPnNs aWNlX2NvdW50LAotICAgICAgICAub2Zmc2V0ID0gMCwKLSAgICB9OwotCi0gICAgaWYgKGYtPmtl eV9mcmFtZSB8fCBmLT52ZXJzaW9uID4gMykgewotICAgICAgICBGRnYxVmtSZXNldFBhcmFtZXRl cnMgcGRfcmVzZXQ7Ci0KLSAgICAgICAgZmZfdmtfc2hhZGVyX3VwZGF0ZV9kZXNjX2J1ZmZlcigm ZnYtPnMsIGV4ZWMsICZmdi0+cmVzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgMSwgMCwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzbGljZV9kYXRhX2J1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAwLCBzbGljZV9kYXRhX3NpemUqZi0+c2xpY2VfY291bnQsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgVktfRk9STUFUX1VOREVGSU5FRCk7Ci0KLSAgICAgICAgLyog UnVuIHNldHVwIHNoYWRlciAqLwotICAgICAgICBmZl92a19leGVjX2JpbmRfc2hhZGVyKCZmdi0+ cywgZXhlYywgJmZ2LT5yZXNldCk7Ci0gICAgICAgIHBkX3Jlc2V0ID0gKEZGdjFWa1Jlc2V0UGFy YW1ldGVycykgewotICAgICAgICAgICAgLnNsaWNlX3N0YXRlID0gc2xpY2VfZGF0YV9idWYtPmFk ZHJlc3MgKyBmLT5zbGljZV9jb3VudCoyNTYsCi0gICAgICAgICAgICAucGxhbmVfc3RhdGVfc2l6 ZSA9IHBsYW5lX3N0YXRlX3NpemUsCi0gICAgICAgICAgICAuY29kZWNfcGxhbmVzID0gZi0+cGxh bmVfY291bnQsCi0gICAgICAgICAgICAua2V5X2ZyYW1lID0gZi0+a2V5X2ZyYW1lLAotICAgICAg ICB9OwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGYtPnF1YW50X3RhYmxlX2NvdW50OyBp KyspCi0gICAgICAgICAgICBwZF9yZXNldC5jb250ZXh0X2NvdW50W2ldID0gZi0+Y29udGV4dF9j b3VudFtpXTsKLQotICAgICAgICBmZl92a19zaGFkZXJfdXBkYXRlX3B1c2hfY29uc3QoJmZ2LT5z LCBleGVjLCAmZnYtPnJlc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgVktfU0hBREVSX1NUQUdFX0NPTVBVVEVfQklULAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgMCwgc2l6ZW9mKHBkX3Jlc2V0KSwgJnBkX3Jlc2V0KTsKLQotICAgICAg ICAvKiBTeW5jIGJldHdlZW4gc2V0dXAgYW5kIHJlc2V0IHNoYWRlcnMgKi8KLSAgICAgICAgdmst PkNtZFBpcGVsaW5lQmFycmllcjIoZXhlYy0+YnVmLCAmKFZrRGVwZW5kZW5jeUluZm8pIHsKLSAg ICAgICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX0RFUEVOREVOQ1lfSU5GTywKLSAg ICAgICAgICAgIC5wQnVmZmVyTWVtb3J5QmFycmllcnMgPSBidWZfYmFyLAotICAgICAgICAgICAg LmJ1ZmZlck1lbW9yeUJhcnJpZXJDb3VudCA9IG5iX2J1Zl9iYXIsCi0gICAgICAgIH0pOwotICAg ICAgICBzbGljZV9kYXRhX2J1Zi0+c3RhZ2UgPSBidWZfYmFyWzBdLmRzdFN0YWdlTWFzazsKLSAg ICAgICAgc2xpY2VfZGF0YV9idWYtPmFjY2VzcyA9IGJ1Zl9iYXJbMF0uZHN0QWNjZXNzTWFzazsK LSAgICAgICAgbmJfYnVmX2JhciA9IDA7Ci0KLSAgICAgICAgdmstPkNtZERpc3BhdGNoKGV4ZWMt PmJ1ZiwgZnYtPmN0eC5udW1faF9zbGljZXMsIGZ2LT5jdHgubnVtX3Zfc2xpY2VzLAotICAgICAg ICAgICAgICAgICAgICAgICAgZi0+cGxhbmVfY291bnQpOwotICAgIH0KLQotICAgIC8qIElmIHRo ZSByZXNldCBzaGFkZXIgcmFuLCBpbnNlcnQgYSBiYXJyaWVyIG5vdy4gKi8KLSAgICBpZiAoZi0+ a2V5X2ZyYW1lIHx8IGYtPnZlcnNpb24gPiAzKSB7Ci0gICAgICAgIC8qIFJlc2V0IHNoYWRlciBt b2RpZmllZCB0aGUgc2xpY2UgZGF0YSBidWZmZXIgKi8KLSAgICAgICAgYnVmX2JhcltuYl9idWZf YmFyKytdID0gKFZrQnVmZmVyTWVtb3J5QmFycmllcjIpIHsKLSAgICAgICAgICAgIC5zVHlwZSA9 IFZLX1NUUlVDVFVSRV9UWVBFX0JVRkZFUl9NRU1PUllfQkFSUklFUl8yLAotICAgICAgICAgICAg LnNyY1N0YWdlTWFzayA9IHNsaWNlX2RhdGFfYnVmLT5zdGFnZSwKLSAgICAgICAgICAgIC5kc3RT dGFnZU1hc2sgPSBWS19QSVBFTElORV9TVEFHRV8yX0NPTVBVVEVfU0hBREVSX0JJVCwKLSAgICAg ICAgICAgIC5zcmNBY2Nlc3NNYXNrID0gc2xpY2VfZGF0YV9idWYtPmFjY2VzcywKLSAgICAgICAg ICAgIC5kc3RBY2Nlc3NNYXNrID0gVktfQUNDRVNTXzJfU0hBREVSX1NUT1JBR0VfUkVBRF9CSVQg fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19BQ0NFU1NfMl9TSEFERVJfU1RPUkFH RV9XUklURV9CSVQsCi0gICAgICAgICAgICAuc3JjUXVldWVGYW1pbHlJbmRleCA9IFZLX1FVRVVF X0ZBTUlMWV9JR05PUkVELAotICAgICAgICAgICAgLmRzdFF1ZXVlRmFtaWx5SW5kZXggPSBWS19R VUVVRV9GQU1JTFlfSUdOT1JFRCwKLSAgICAgICAgICAgIC5idWZmZXIgPSBzbGljZV9kYXRhX2J1 Zi0+YnVmLAotICAgICAgICAgICAgLnNpemUgPSBzbGljZV9kYXRhX2J1Zi0+c2l6ZSAtIHNsaWNl X2RhdGFfc2l6ZSpmLT5zbGljZV9jb3VudCwKLSAgICAgICAgICAgIC5vZmZzZXQgPSBzbGljZV9k YXRhX3NpemUqZi0+c2xpY2VfY291bnQsCi0gICAgICAgIH07Ci0gICAgfQotCi0gICAgaWYgKGZ2 LT5pc19yZ2IpIHsKLSAgICAgICAgZmZfdmtfZnJhbWVfYmFycmllcigmZnYtPnMsIGV4ZWMsIHRt cCwgaW1nX2JhciwgJm5iX2ltZ19iYXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVktf UElQRUxJTkVfU1RBR0VfMl9BTExfQ09NTUFORFNfQklULAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFZLX1BJUEVMSU5FX1NUQUdFXzJfQ09NUFVURV9TSEFERVJfQklULAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFZLX0FDQ0VTU19TSEFERVJfUkVBRF9CSVQgfCBWS19BQ0NFU1Nf U0hBREVSX1dSSVRFX0JJVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19JTUFHRV9M QVlPVVRfR0VORVJBTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19RVUVVRV9GQU1J TFlfSUdOT1JFRCk7Ci0gICAgfQotCi0gICAgLyogRmluYWwgYmFycmllciBiZWZvcmUgZW5jb2Rp bmcgKi8KLSAgICB2ay0+Q21kUGlwZWxpbmVCYXJyaWVyMihleGVjLT5idWYsICYoVmtEZXBlbmRl bmN5SW5mbykgewotICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9ERVBFTkRFTkNZ X0lORk8sCi0gICAgICAgIC5wSW1hZ2VNZW1vcnlCYXJyaWVycyA9IGltZ19iYXIsCi0gICAgICAg IC5pbWFnZU1lbW9yeUJhcnJpZXJDb3VudCA9IG5iX2ltZ19iYXIsCi0gICAgICAgIC5wQnVmZmVy TWVtb3J5QmFycmllcnMgPSBidWZfYmFyLAotICAgICAgICAuYnVmZmVyTWVtb3J5QmFycmllckNv dW50ID0gbmJfYnVmX2JhciwKLSAgICB9KTsKLSAgICBuYl9pbWdfYmFyID0gMDsKLSAgICBpZiAo bmJfYnVmX2JhcikgewotICAgICAgICBzbGljZV9kYXRhX2J1Zi0+c3RhZ2UgPSBidWZfYmFyWzBd LmRzdFN0YWdlTWFzazsKLSAgICAgICAgc2xpY2VfZGF0YV9idWYtPmFjY2VzcyA9IGJ1Zl9iYXJb MF0uZHN0QWNjZXNzTWFzazsKLSAgICAgICAgbmJfYnVmX2JhciA9IDA7Ci0gICAgfQotCi0gICAg LyogTWFpbiBlbmNvZGUgc2hhZGVyICovCi0gICAgZmZfdmtfc2hhZGVyX3VwZGF0ZV9kZXNjX2J1 ZmZlcigmZnYtPnMsIGV4ZWMsICZmdi0+ZW5jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgMSwgMCwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNs aWNlX2RhdGFfYnVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgc2xp Y2VfZGF0YV9zaXplKmYtPnNsaWNlX2NvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgVktfRk9STUFUX1VOREVGSU5FRCk7Ci0gICAgZmZfdmtfc2hhZGVyX3VwZGF0ZV9p bWdfYXJyYXkoJmZ2LT5zLCBleGVjLCAmZnYtPmVuYywKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzcmMsIHNyY192aWV3cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAxLCAxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZLX0lNQUdFX0xB WU9VVF9HRU5FUkFMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZLX05VTExf SEFORExFKTsKLSAgICBmZl92a19zaGFkZXJfdXBkYXRlX2Rlc2NfYnVmZmVyKCZmdi0+cywgZXhl YywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmdi0+ZW5jLCAxLCAyLCAw LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0c19kYXRhX2J1ZiwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIHJlc3VsdHNfZGF0YV9idWYt PnNpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19GT1JNQVRfVU5E RUZJTkVEKTsKLSAgICBpZiAoZnYtPmlzX3JnYikKLSAgICAgICAgZmZfdmtfc2hhZGVyX3VwZGF0 ZV9pbWdfYXJyYXkoJmZ2LT5zLCBleGVjLCAmZnYtPmVuYywKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdG1wLCB0bXBfdmlld3MsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDEsIDMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFZLX0lNQUdFX0xBWU9VVF9HRU5FUkFMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBWS19OVUxMX0hBTkRMRSk7Ci0KLSAgICBmZl92a19leGVjX2JpbmRfc2hhZGVy KCZmdi0+cywgZXhlYywgJmZ2LT5lbmMpOwotICAgIGZmX3ZrX3NoYWRlcl91cGRhdGVfcHVzaF9j b25zdCgmZnYtPnMsIGV4ZWMsICZmdi0+ZW5jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBWS19TSEFERVJfU1RBR0VfQ09NUFVURV9CSVQsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDAsIHNpemVvZihwZCksICZwZCk7Ci0gICAgdmstPkNtZERpc3BhdGNo KGV4ZWMtPmJ1ZiwgZnYtPmN0eC5udW1faF9zbGljZXMsIGZ2LT5jdHgubnVtX3Zfc2xpY2VzLCAx KTsKLQotICAgIC8qIFN1Ym1pdCAqLwotICAgIGVyciA9IGZmX3ZrX2V4ZWNfc3VibWl0KCZmdi0+ cywgZXhlYyk7Ci0gICAgaWYgKGVyciA8IDApCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICBm LT5waWN0dXJlX251bWJlcisrOwotCi0gICAgLyogVGhpcywgaWYgbmVlZGVkLCB3YXMgcmVmZXJl bmNlZCBieSB0aGUgZXhlY3V0aW9uIGNvbnRleHQKLSAgICAgKiBhcyBpdCB3YXMgZGVjbGFyZWQg YXMgYSBkZXBlbmRlbmN5LiAqLwotICAgIGF2X2ZyYW1lX2ZyZWUoJnRtcCk7Ci0gICAgcmV0dXJu IDA7Ci0KLWZhaWw6Ci0gICAgYXZfZnJhbWVfZnJlZSgmdG1wKTsKLSAgICBmZl92a19leGVjX2Rp c2NhcmRfZGVwcygmZnYtPnMsIGV4ZWMpOwotCi0gICAgcmV0dXJuIGVycjsKLX0KLQotc3RhdGlj IGludCB0cmFuc2Zlcl9zbGljZXMoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgVmtCdWZmZXJDb3B5ICpidWZfcmVnaW9ucywgaW50IG5iX3JlZ2lvbnMs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBWdWxrYW5FbmNvZGVGRnYxRnJhbWVEYXRhICpm ZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKmRzdCwgQVZCdWZmZXJSZWYg KmRzdF9yZWYpCi17Ci0gICAgaW50IGVycjsKLSAgICBWdWxrYW5FbmNvZGVGRnYxQ29udGV4dCAq ZnYgPSBhdmN0eC0+cHJpdl9kYXRhOwotICAgIEZGVnVsa2FuRnVuY3Rpb25zICp2ayA9ICZmdi0+ cy52a2ZuOwotICAgIEZGVmtFeGVjQ29udGV4dCAqZXhlYzsKLQotICAgIEZGVmtCdWZmZXIgKm91 dF9kYXRhX2J1ZiA9IChGRlZrQnVmZmVyICopZmQtPm91dF9kYXRhX3JlZi0+ZGF0YTsKLQotICAg IEFWQnVmZmVyUmVmICptYXBwZWRfcmVmOwotICAgIEZGVmtCdWZmZXIgKm1hcHBlZF9idWY7Ci0K LSAgICBWa0J1ZmZlck1lbW9yeUJhcnJpZXIyIGJ1Zl9iYXJbOF07Ci0gICAgaW50IG5iX2J1Zl9i YXIgPSAwOwotCi0gICAgZXJyID0gZmZfdmtfaG9zdF9tYXBfYnVmZmVyKCZmdi0+cywgJm1hcHBl ZF9yZWYsIGRzdCwgZHN0X3JlZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktf QlVGRkVSX1VTQUdFX1RSQU5TRkVSX0RTVF9CSVQpOwotICAgIGlmIChlcnIgPCAwKQotICAgICAg ICByZXR1cm4gZXJyOwotCi0gICAgbWFwcGVkX2J1ZiA9IChGRlZrQnVmZmVyICopbWFwcGVkX3Jl Zi0+ZGF0YTsKLQotICAgIC8qIFRyYW5zZmVyIHRoZSBzbGljZXMgKi8KLSAgICBleGVjID0gZmZf dmtfZXhlY19nZXQoJmZ2LT5zLCAmZnYtPnRyYW5zZmVyX2V4ZWNfcG9vbCk7Ci0gICAgZmZfdmtf ZXhlY19zdGFydCgmZnYtPnMsIGV4ZWMpOwotCi0gICAgZmZfdmtfZXhlY19hZGRfZGVwX2J1Zigm ZnYtPnMsIGV4ZWMsICZmZC0+b3V0X2RhdGFfcmVmLCAxLCAwKTsKLSAgICBmZC0+b3V0X2RhdGFf cmVmID0gTlVMTDsgLyogT3duZXJzaGlwIHBhc3NlZCAqLwotCi0gICAgZmZfdmtfZXhlY19hZGRf ZGVwX2J1ZigmZnYtPnMsIGV4ZWMsICZtYXBwZWRfcmVmLCAxLCAwKTsKLSAgICBtYXBwZWRfcmVm ID0gTlVMTDsgLyogT3duZXJzaGlwIHBhc3NlZCAqLwotCi0gICAgLyogRW5zdXJlIHRoZSBvdXRw dXQgYnVmZmVyIGlzIGZpbmlzaGVkICovCi0gICAgYnVmX2JhcltuYl9idWZfYmFyKytdID0gKFZr QnVmZmVyTWVtb3J5QmFycmllcjIpIHsKLSAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZ UEVfQlVGRkVSX01FTU9SWV9CQVJSSUVSXzIsCi0gICAgICAgIC5zcmNTdGFnZU1hc2sgPSBvdXRf ZGF0YV9idWYtPnN0YWdlLAotICAgICAgICAuZHN0U3RhZ2VNYXNrID0gVktfUElQRUxJTkVfU1RB R0VfMl9UUkFOU0ZFUl9CSVQsCi0gICAgICAgIC5zcmNBY2Nlc3NNYXNrID0gb3V0X2RhdGFfYnVm LT5hY2Nlc3MsCi0gICAgICAgIC5kc3RBY2Nlc3NNYXNrID0gVktfQUNDRVNTXzJfVFJBTlNGRVJf UkVBRF9CSVQsCi0gICAgICAgIC5zcmNRdWV1ZUZhbWlseUluZGV4ID0gVktfUVVFVUVfRkFNSUxZ X0lHTk9SRUQsCi0gICAgICAgIC5kc3RRdWV1ZUZhbWlseUluZGV4ID0gVktfUVVFVUVfRkFNSUxZ X0lHTk9SRUQsCi0gICAgICAgIC5idWZmZXIgPSBvdXRfZGF0YV9idWYtPmJ1ZiwKLSAgICAgICAg LnNpemUgPSBWS19XSE9MRV9TSVpFLAotICAgICAgICAub2Zmc2V0ID0gMCwKLSAgICB9OwotICAg IHZrLT5DbWRQaXBlbGluZUJhcnJpZXIyKGV4ZWMtPmJ1ZiwgJihWa0RlcGVuZGVuY3lJbmZvKSB7 Ci0gICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX0RFUEVOREVOQ1lfSU5GTywKLSAg ICAgICAgLnBCdWZmZXJNZW1vcnlCYXJyaWVycyA9IGJ1Zl9iYXIsCi0gICAgICAgIC5idWZmZXJN ZW1vcnlCYXJyaWVyQ291bnQgPSBuYl9idWZfYmFyLAotICAgIH0pOwotICAgIG91dF9kYXRhX2J1 Zi0+c3RhZ2UgPSBidWZfYmFyWzBdLmRzdFN0YWdlTWFzazsKLSAgICBvdXRfZGF0YV9idWYtPmFj Y2VzcyA9IGJ1Zl9iYXJbMF0uZHN0QWNjZXNzTWFzazsKLSAgICBuYl9idWZfYmFyID0gMDsKLQot ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmJfcmVnaW9uczsgaSsrKQotICAgICAgICBidWZfcmVn aW9uc1tpXS5kc3RPZmZzZXQgKz0gbWFwcGVkX2J1Zi0+dmlydHVhbF9vZmZzZXQ7Ci0KLSAgICB2 ay0+Q21kQ29weUJ1ZmZlcihleGVjLT5idWYsCi0gICAgICAgICAgICAgICAgICAgICAgb3V0X2Rh dGFfYnVmLT5idWYsIG1hcHBlZF9idWYtPmJ1ZiwKLSAgICAgICAgICAgICAgICAgICAgICBuYl9y ZWdpb25zLCBidWZfcmVnaW9ucyk7Ci0KLSAgICAvKiBTdWJtaXQgKi8KLSAgICBlcnIgPSBmZl92 a19leGVjX3N1Ym1pdCgmZnYtPnMsIGV4ZWMpOwotICAgIGlmIChlcnIgPCAwKQotICAgICAgICBy ZXR1cm4gZXJyOwotCi0gICAgLyogV2UgbmVlZCB0aGUgZW5jb2RlZCBkYXRhIGltbWVkaWF0ZWx5 ICovCi0gICAgZmZfdmtfZXhlY193YWl0KCZmdi0+cywgZXhlYyk7Ci0KLSAgICByZXR1cm4gMDsK LX0KLQotc3RhdGljIGludCBnZXRfcGFja2V0KEFWQ29kZWNDb250ZXh0ICphdmN0eCwgRkZWa0V4 ZWNDb250ZXh0ICpleGVjLAotICAgICAgICAgICAgICAgICAgICAgIEFWUGFja2V0ICpwa3QpCi17 Ci0gICAgaW50IGVycjsKLSAgICBWdWxrYW5FbmNvZGVGRnYxQ29udGV4dCAqZnYgPSBhdmN0eC0+ cHJpdl9kYXRhOwotICAgIEZGVjFDb250ZXh0ICpmID0gJmZ2LT5jdHg7Ci0gICAgRkZWdWxrYW5G dW5jdGlvbnMgKnZrID0gJmZ2LT5zLnZrZm47Ci0gICAgVnVsa2FuRW5jb2RlRkZ2MUZyYW1lRGF0 YSAqZmQgPSBleGVjLT5vcGFxdWU7Ci0KLSAgICBGRlZrQnVmZmVyICpvdXRfZGF0YV9idWYgPSAo RkZWa0J1ZmZlciAqKWZkLT5vdXRfZGF0YV9yZWYtPmRhdGE7Ci0gICAgRkZWa0J1ZmZlciAqcmVz dWx0c19kYXRhX2J1ZiA9IChGRlZrQnVmZmVyICopZmQtPnJlc3VsdHNfZGF0YV9yZWYtPmRhdGE7 Ci0gICAgdWludDY0X3QgKnNjOwotCi0gICAgLyogTWFrZSBzdXJlIGVuY29kaW5nJ3MgZG9uZSAq LwotICAgIGZmX3ZrX2V4ZWNfd2FpdCgmZnYtPnMsIGV4ZWMpOwotCi0gICAgLyogSW52YWxpZGF0 ZSBzbGljZS9vdXRwdXQgZGF0YSBpZiBuZWVkZWQgKi8KLSAgICBpZiAoIShyZXN1bHRzX2RhdGFf YnVmLT5mbGFncyAmIFZLX01FTU9SWV9QUk9QRVJUWV9IT1NUX0NPSEVSRU5UX0JJVCkpIHsKLSAg ICAgICAgVmtNYXBwZWRNZW1vcnlSYW5nZSBpbnZhbGlkYXRlX2RhdGEgPSB7Ci0gICAgICAgICAg ICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9NQVBQRURfTUVNT1JZX1JBTkdFLAotICAgICAg ICAgICAgLm1lbW9yeSA9IHJlc3VsdHNfZGF0YV9idWYtPm1lbSwKLSAgICAgICAgICAgIC5vZmZz ZXQgPSAwLAotICAgICAgICAgICAgLnNpemUgPSBWS19XSE9MRV9TSVpFLAotICAgICAgICB9Owot ICAgICAgICB2ay0+SW52YWxpZGF0ZU1hcHBlZE1lbW9yeVJhbmdlcyhmdi0+cy5od2N0eC0+YWN0 X2RldiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgJmludmFs aWRhdGVfZGF0YSk7Ci0gICAgfQotCi0gICAgLyogQ2FsY3VsYXRlIGZpbmFsIHNpemUgKi8KLSAg ICBwa3QtPnNpemUgPSAwOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZi0+c2xpY2VfY291bnQ7 IGkrKykgewotICAgICAgICBzYyA9ICYoKHVpbnQ2NF90ICopcmVzdWx0c19kYXRhX2J1Zi0+bWFw cGVkX21lbSlbaSoyXTsKLSAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfREVCVUcsICJTbGlj ZSAlaSBzaXplID0gJSJQUkl1NjQiLCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAic3JjIG9mZnNldCA9ICUiUFJJdTY0IlxuIiwKLSAgICAgICAgICAgICAgIGksIHNjWzBd LCBzY1sxXSk7Ci0KLSAgICAgICAgZnYtPmJ1Zl9yZWdpb25zW2ldID0gKFZrQnVmZmVyQ29weSkg ewotICAgICAgICAgICAgLnNyY09mZnNldCA9IHNjWzFdLAotICAgICAgICAgICAgLmRzdE9mZnNl dCA9IHBrdC0+c2l6ZSwKLSAgICAgICAgICAgIC5zaXplID0gc2NbMF0sCi0gICAgICAgIH07Ci0g ICAgICAgIHBrdC0+c2l6ZSArPSBzY1swXTsKLSAgICB9Ci0gICAgYXZfbG9nKGF2Y3R4LCBBVl9M T0dfVkVSQk9TRSwgIkVuY29kZWQgZGF0YTogJWlNaUJcbiIsIHBrdC0+c2l6ZSAvICgxMDI0KjEw MjQpKTsKLSAgICBhdl9idWZmZXJfdW5yZWYoJmZkLT5yZXN1bHRzX2RhdGFfcmVmKTsgLyogTm8g bmVlZCBmb3IgdGhpcyBidWZmZXIgYW55bW9yZSAqLwotCi0gICAgLyogQWxsb2NhdGUgcGFja2V0 ICovCi0gICAgaWYgKChlcnIgPSBmZl9nZXRfZW5jb2RlX2J1ZmZlcihhdmN0eCwgcGt0LCBwa3Qt PnNpemUsIDApKSA8IDApCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICBwa3QtPnB0cyAgICAg ID0gZmQtPnB0czsKLSAgICBwa3QtPmR0cyAgICAgID0gZmQtPnB0czsKLSAgICBwa3QtPmR1cmF0 aW9uID0gZmQtPmR1cmF0aW9uOwotICAgIHBrdC0+ZmxhZ3MgICB8PSBBVl9QS1RfRkxBR19LRVkg KiBmZC0+a2V5X2ZyYW1lOwotCi0gICAgaWYgKGF2Y3R4LT5mbGFncyAmIEFWX0NPREVDX0ZMQUdf Q09QWV9PUEFRVUUpIHsKLSAgICAgICAgcGt0LT5vcGFxdWUgICAgICAgICAgPSBmZC0+ZnJhbWVf b3BhcXVlOwotICAgICAgICBwa3QtPm9wYXF1ZV9yZWYgICAgICA9IGZkLT5mcmFtZV9vcGFxdWVf cmVmOwotICAgICAgICBmZC0+ZnJhbWVfb3BhcXVlX3JlZiA9IE5VTEw7Ci0gICAgfQotCi0gICAg LyogVHJ5IHVzaW5nIGhvc3QgbWFwcGVkIG1lbW9yeSB0cmFuc2ZlcnMgZmlyc3QgKi8KLSAgICBp ZiAoZnYtPnMuZXh0ZW5zaW9ucyAmIEZGX1ZLX0VYVF9FWFRFUk5BTF9IT1NUX01FTU9SWSkgewot ICAgICAgICBlcnIgPSB0cmFuc2Zlcl9zbGljZXMoYXZjdHgsIGZ2LT5idWZfcmVnaW9ucywgZi0+ c2xpY2VfY291bnQsIGZkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGt0LT5kYXRh LCBwa3QtPmJ1Zik7Ci0gICAgICAgIGlmIChlcnIgPj0gMCkKLSAgICAgICAgICAgIHJldHVybiBl cnI7Ci0gICAgfQotCi0gICAgLyogSW52YWxpZGF0ZSBzbGljZS9vdXRwdXQgZGF0YSBpZiBuZWVk ZWQgKi8KLSAgICBpZiAoIShvdXRfZGF0YV9idWYtPmZsYWdzICYgVktfTUVNT1JZX1BST1BFUlRZ X0hPU1RfQ09IRVJFTlRfQklUKSkgewotICAgICAgICBWa01hcHBlZE1lbW9yeVJhbmdlIGludmFs aWRhdGVfZGF0YSA9IHsKLSAgICAgICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX01B UFBFRF9NRU1PUllfUkFOR0UsCi0gICAgICAgICAgICAubWVtb3J5ID0gb3V0X2RhdGFfYnVmLT5t ZW0sCi0gICAgICAgICAgICAub2Zmc2V0ID0gMCwKLSAgICAgICAgICAgIC5zaXplID0gVktfV0hP TEVfU0laRSwKLSAgICAgICAgfTsKLSAgICAgICAgdmstPkludmFsaWRhdGVNYXBwZWRNZW1vcnlS YW5nZXMoZnYtPnMuaHdjdHgtPmFjdF9kZXYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDEsICZpbnZhbGlkYXRlX2RhdGEpOwotICAgIH0KLQotICAgIC8qIENvcHkg ZWFjaCBzbGljZSAqLwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZi0+c2xpY2VfY291bnQ7IGkr KykgewotICAgICAgICBWa0J1ZmZlckNvcHkgKnJlZ2lvbiA9ICZmdi0+YnVmX3JlZ2lvbnNbaV07 Ci0gICAgICAgIG1lbWNweShwa3QtPmRhdGEgKyByZWdpb24tPmRzdE9mZnNldCwKLSAgICAgICAg ICAgICAgIG91dF9kYXRhX2J1Zi0+bWFwcGVkX21lbSArIHJlZ2lvbi0+c3JjT2Zmc2V0LAotICAg ICAgICAgICAgICAgcmVnaW9uLT5zaXplKTsKLSAgICB9Ci0KLSAgICBhdl9idWZmZXJfdW5yZWYo JmZkLT5vdXRfZGF0YV9yZWYpOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgdnVs a2FuX2VuY29kZV9mZnYxX3JlY2VpdmVfcGFja2V0KEFWQ29kZWNDb250ZXh0ICphdmN0eCwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFWUGFja2V0ICpwa3Qp Ci17Ci0gICAgaW50IGVycjsKLSAgICBWdWxrYW5FbmNvZGVGRnYxQ29udGV4dCAqZnYgPSBhdmN0 eC0+cHJpdl9kYXRhOwotICAgIFZ1bGthbkVuY29kZUZGdjFGcmFtZURhdGEgKmZkOwotICAgIEZG VmtFeGVjQ29udGV4dCAqZXhlYzsKLSAgICBBVkZyYW1lICpmcmFtZTsKLQotICAgIHdoaWxlICgx KSB7Ci0gICAgICAgIC8qIFJvbGwgYW4gZXhlY3V0aW9uIGNvbnRleHQgKi8KLSAgICAgICAgZXhl YyA9IGZmX3ZrX2V4ZWNfZ2V0KCZmdi0+cywgJmZ2LT5leGVjX3Bvb2wpOwotCi0gICAgICAgIC8q IElmIGl0IGhhZCBhIGZyYW1lLCBpbW1lZGlhdGVseSBvdXRwdXQgaXQgKi8KLSAgICAgICAgaWYg KGV4ZWMtPmhhZF9zdWJtaXNzaW9uKSB7Ci0gICAgICAgICAgICBleGVjLT5oYWRfc3VibWlzc2lv biA9IDA7Ci0gICAgICAgICAgICBmdi0+aW5fZmxpZ2h0LS07Ci0gICAgICAgICAgICByZXR1cm4g Z2V0X3BhY2tldChhdmN0eCwgZXhlYywgcGt0KTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIEdl dCBuZXh0IGZyYW1lIHRvIGVuY29kZSAqLwotICAgICAgICBmcmFtZSA9IGZ2LT5mcmFtZTsKLSAg ICAgICAgZXJyID0gZmZfZW5jb2RlX2dldF9mcmFtZShhdmN0eCwgZnJhbWUpOwotICAgICAgICBp ZiAoZXJyIDwgMCAmJiBlcnIgIT0gQVZFUlJPUl9FT0YpIHsKLSAgICAgICAgICAgIHJldHVybiBl cnI7Ci0gICAgICAgIH0gZWxzZSBpZiAoZXJyID09IEFWRVJST1JfRU9GKSB7Ci0gICAgICAgICAg ICBpZiAoIWZ2LT5pbl9mbGlnaHQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKLSAgICAg ICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgLyogRW5jb2RlIGZyYW1lICov Ci0gICAgICAgIGZkID0gZXhlYy0+b3BhcXVlOwotICAgICAgICBmZC0+cHRzID0gZnJhbWUtPnB0 czsKLSAgICAgICAgZmQtPmR1cmF0aW9uID0gZnJhbWUtPmR1cmF0aW9uOwotICAgICAgICBpZiAo YXZjdHgtPmZsYWdzICYgQVZfQ09ERUNfRkxBR19DT1BZX09QQVFVRSkgewotICAgICAgICAgICAg ZmQtPmZyYW1lX29wYXF1ZSAgICAgPSBmcmFtZS0+b3BhcXVlOwotICAgICAgICAgICAgZmQtPmZy YW1lX29wYXF1ZV9yZWYgPSBmcmFtZS0+b3BhcXVlX3JlZjsKLSAgICAgICAgICAgIGZyYW1lLT5v cGFxdWVfcmVmICAgID0gTlVMTDsKLSAgICAgICAgfQotCi0gICAgICAgIGVyciA9IHZ1bGthbl9l bmNvZGVfZmZ2MV9zdWJtaXRfZnJhbWUoYXZjdHgsIGV4ZWMsIGZyYW1lKTsKLSAgICAgICAgYXZf ZnJhbWVfdW5yZWYoZnJhbWUpOwotICAgICAgICBpZiAoZXJyIDwgMCkKLSAgICAgICAgICAgIHJl dHVybiBlcnI7Ci0KLSAgICAgICAgZnYtPmluX2ZsaWdodCsrOwotICAgICAgICBpZiAoZnYtPmlu X2ZsaWdodCA8IGZ2LT5hc3luY19kZXB0aCkKLSAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVB R0FJTik7Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgaW5pdF9pbmRp cmVjdChBVkNvZGVjQ29udGV4dCAqYXZjdHgsIGVudW0gQVZQaXhlbEZvcm1hdCBzd19mb3JtYXQp Ci17Ci0gICAgaW50IGVycjsKLSAgICBWdWxrYW5FbmNvZGVGRnYxQ29udGV4dCAqZnYgPSBhdmN0 eC0+cHJpdl9kYXRhOwotICAgIEZGVjFDb250ZXh0ICpmID0gJmZ2LT5jdHg7Ci0gICAgQVZIV0Zy YW1lc0NvbnRleHQgKmZyYW1lc19jdHg7Ci0gICAgQVZWdWxrYW5GcmFtZXNDb250ZXh0ICp2a19m cmFtZXM7Ci0KLSAgICBmdi0+aW50ZXJtZWRpYXRlX2ZyYW1lc19yZWYgPSBhdl9od2ZyYW1lX2N0 eF9hbGxvYyhmdi0+cy5kZXZpY2VfcmVmKTsKLSAgICBpZiAoIWZ2LT5pbnRlcm1lZGlhdGVfZnJh bWVzX3JlZikKLSAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKLQotICAgIGZyYW1lc19j dHggPSAoQVZIV0ZyYW1lc0NvbnRleHQgKilmdi0+aW50ZXJtZWRpYXRlX2ZyYW1lc19yZWYtPmRh dGE7Ci0gICAgZnJhbWVzX2N0eC0+Zm9ybWF0ICAgID0gQVZfUElYX0ZNVF9WVUxLQU47Ci0gICAg ZnJhbWVzX2N0eC0+c3dfZm9ybWF0ID0gc3dfZm9ybWF0OwotICAgIGZyYW1lc19jdHgtPndpZHRo ICAgICA9IGZ2LT5zLmZyYW1lcy0+d2lkdGg7Ci0gICAgZnJhbWVzX2N0eC0+aGVpZ2h0ICAgID0g Zi0+bnVtX3Zfc2xpY2VzKlJHQl9MSU5FQ0FDSEU7Ci0KLSAgICB2a19mcmFtZXMgPSBmcmFtZXNf Y3R4LT5od2N0eDsKLSAgICB2a19mcmFtZXMtPnRpbGluZyAgICA9IFZLX0lNQUdFX1RJTElOR19P UFRJTUFMOwotICAgIHZrX2ZyYW1lcy0+dXNhZ2UgICAgID0gVktfSU1BR0VfVVNBR0VfU1RPUkFH RV9CSVQgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfSU1BR0VfVVNBR0VfVFJBTlNG RVJfRFNUX0JJVDsKLSAgICB2a19mcmFtZXMtPmltZ19mbGFncyA9IFZLX0lNQUdFX0NSRUFURV9N VVRBQkxFX0ZPUk1BVF9CSVQ7Ci0KLSAgICBlcnIgPSBhdl9od2ZyYW1lX2N0eF9pbml0KGZ2LT5p bnRlcm1lZGlhdGVfZnJhbWVzX3JlZik7Ci0gICAgaWYgKGVyciA8IDApIHsKLSAgICAgICAgYXZf bG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJVbmFibGUgdG8gaW5pdGlhbGl6ZSBmcmFtZSBwb29s IHdpdGggZm9ybWF0ICVzOiAlc1xuIiwKLSAgICAgICAgICAgICAgIGF2X2dldF9waXhfZm10X25h bWUoc3dfZm9ybWF0KSwgYXZfZXJyMnN0cihlcnIpKTsKLSAgICAgICAgYXZfYnVmZmVyX3VucmVm KCZmdi0+aW50ZXJtZWRpYXRlX2ZyYW1lc19yZWYpOwotICAgICAgICByZXR1cm4gZXJyOwotICAg IH0KLQotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGNoZWNrX3N1cHBvcnQoQVZIV0Zy YW1lc0NvbnN0cmFpbnRzICpjb25zdHJhaW50cywKLSAgICAgICAgICAgICAgICAgICAgICAgICBl bnVtIEFWUGl4ZWxGb3JtYXQgZm10KQotewotICAgIGZvciAoaW50IGkgPSAwOyBjb25zdHJhaW50 cy0+dmFsaWRfc3dfZm9ybWF0c1tpXTsgaSsrKSB7Ci0gICAgICAgIGlmIChjb25zdHJhaW50cy0+ dmFsaWRfc3dfZm9ybWF0c1tpXSA9PSBmbXQpCi0gICAgICAgICAgICByZXR1cm4gMTsKLSAgICB9 Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBlbnVtIEFWUGl4ZWxGb3JtYXQgZ2V0X3N1cHBv cnRlZF9yZ2JfYnVmZmVyX2ZtdChBVkNvZGVjQ29udGV4dCAqYXZjdHgpCi17Ci0gICAgVnVsa2Fu RW5jb2RlRkZ2MUNvbnRleHQgKmZ2ID0gYXZjdHgtPnByaXZfZGF0YTsKLQotICAgIGVudW0gQVZQ aXhlbEZvcm1hdCBmbXQ7Ci0gICAgQVZIV0ZyYW1lc0NvbnN0cmFpbnRzICpjb25zdHJhaW50czsK LSAgICBjb25zdHJhaW50cyA9IGF2X2h3ZGV2aWNlX2dldF9od2ZyYW1lX2NvbnN0cmFpbnRzKGZ2 LT5zLmRldmljZV9yZWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBOVUxMKTsKLQotICAgIC8qIFdoYXQgd2UnZCBsaWtlIHRvIG9wdGltYWxs eSBoYXZlICovCi0gICAgZm10ID0gZnYtPmN0eC51c2UzMmJpdCA/Ci0gICAgICAgICAgKGZ2LT5j dHgudHJhbnNwYXJlbmN5ID8gQVZfUElYX0ZNVF9SR0JBMTI4IDogQVZfUElYX0ZNVF9SR0I5Nikg OgotICAgICAgICAgIChmdi0+Y3R4LnRyYW5zcGFyZW5jeSA/IEFWX1BJWF9GTVRfUkdCQTY0ICA6 IEFWX1BJWF9GTVRfUkdCNDgpOwotICAgIGlmIChjaGVja19zdXBwb3J0KGNvbnN0cmFpbnRzLCBm bXQpKQotICAgICAgICBnb3RvIGVuZDsKLQotICAgIGlmIChmdi0+Y3R4LnVzZTMyYml0KSB7Ci0g ICAgICAgIGlmIChjaGVja19zdXBwb3J0KGNvbnN0cmFpbnRzLCAoZm10ID0gQVZfUElYX0ZNVF9S R0JBMTI4KSkpCi0gICAgICAgICAgICBnb3RvIGVuZDsKLSAgICB9IGVsc2UgewotICAgICAgICBp ZiAoY2hlY2tfc3VwcG9ydChjb25zdHJhaW50cywgKGZtdCA9IEFWX1BJWF9GTVRfUkdCQTY0KSkp Ci0gICAgICAgICAgICBnb3RvIGVuZDsKLQotICAgICAgICBpZiAoIWZ2LT5jdHgudHJhbnNwYXJl bmN5ICYmCi0gICAgICAgICAgICBjaGVja19zdXBwb3J0KGNvbnN0cmFpbnRzLCAoZm10ID0gQVZf UElYX0ZNVF9SR0I5NikpKQotICAgICAgICAgICAgICAgIGdvdG8gZW5kOwotCi0gICAgICAgIGlm IChjaGVja19zdXBwb3J0KGNvbnN0cmFpbnRzLCAoZm10ID0gQVZfUElYX0ZNVF9SR0JBMTI4KSkp Ci0gICAgICAgICAgICBnb3RvIGVuZDsKLSAgICB9Ci0KLSAgICBmbXQgPSBBVl9QSVhfRk1UX05P TkU7Ci0KLWVuZDoKLSAgICBhdl9od2ZyYW1lX2NvbnN0cmFpbnRzX2ZyZWUoJmNvbnN0cmFpbnRz KTsKLSAgICByZXR1cm4gZm10OwotfQotCi1zdGF0aWMgdm9pZCBkZWZpbmVfc2hhcmVkX2NvZGUo QVZDb2RlY0NvbnRleHQgKmF2Y3R4LCBGRlZ1bGthblNoYWRlciAqc2hkKQotewotICAgIFZ1bGth bkVuY29kZUZGdjFDb250ZXh0ICpmdiA9IGF2Y3R4LT5wcml2X2RhdGE7Ci0gICAgRkZWMUNvbnRl eHQgKmYgPSAmZnYtPmN0eDsKLSAgICBpbnQgc21wX2JpdHMgPSBmdi0+Y3R4LnVzZTMyYml0ID8g MzIgOiAxNjsKLQotICAgIGF2X2JwcmludGYoJnNoZC0+c3JjLCAiI2RlZmluZSBSR0JfTElORUNB Q0hFICVpXG4iICAgICAgICAgICAgICAgICAgICxSR0JfTElORUNBQ0hFKTsKLSAgICBhdl9icHJp bnRmKCZzaGQtPnNyYywgIiNkZWZpbmUgQ09OVEVYVF9TSVpFICVpXG4iICAgICAgICAgICAgICAg ICAgICAsQ09OVEVYVF9TSVpFKTsKLSAgICBhdl9icHJpbnRmKCZzaGQtPnNyYywgIiNkZWZpbmUg TUFYX1FVQU5UX1RBQkxFX01BU0sgMHgleFxuIiAgICAgICAgICAsTUFYX1FVQU5UX1RBQkxFX01B U0spOwotCi0gICAgaWYgKGYtPmFjID09IEFDX0dPTE9NQl9SSUNFKSB7Ci0gICAgICAgIGF2X2Jw cmludGYoJnNoZC0+c3JjLCAiI2RlZmluZSBQQl9VTkFMSUdORURcbiIgICAgICAgICAgICAgICAg ICAgKTsKLSAgICAgICAgYXZfYnByaW50Zigmc2hkLT5zcmMsICIjZGVmaW5lIEdPTE9NQlxuIiAg ICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIH0KLQotICAgIGlmIChmdi0+aXNfcmdiKQot ICAgICAgICBhdl9icHJpbnRmKCZzaGQtPnNyYywgIiNkZWZpbmUgUkdCXG4iKTsKLQotICAgIEdM U0xGKDAsICNkZWZpbmUgVFlQRSBpbnQlaV90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICxzbXBfYml0cyk7Ci0gICAgR0xTTEYoMCwgI2RlZmluZSBWVFlQRTIgaSVpdmVj MiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLHNtcF9iaXRzKTsKLSAgICBH TFNMRigwLCAjZGVmaW5lIFZUWVBFMyBpJWl2ZWMzICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAsc21wX2JpdHMpOwotICAgIEdMU0xEKGZmX3NvdXJjZV9yYW5nZWNvZGVyX2Nv bXApOwotCi0gICAgaWYgKGYtPmFjID09IEFDX0dPTE9NQl9SSUNFKQotICAgICAgICBHTFNMRChm Zl9zb3VyY2VfZmZ2MV92bGNfY29tcCk7Ci0KLSAgICBHTFNMRChmZl9zb3VyY2VfZmZ2MV9jb21t b25fY29tcCk7Ci19Ci0KLXN0YXRpYyBpbnQgaW5pdF9yY3Rfc2VhcmNoX3NoYWRlcihBVkNvZGVj Q29udGV4dCAqYXZjdHgsIEZGVmtTUElSVkNvbXBpbGVyICpzcHYpCi17Ci0gICAgaW50IGVycjsK LSAgICBWdWxrYW5FbmNvZGVGRnYxQ29udGV4dCAqZnYgPSBhdmN0eC0+cHJpdl9kYXRhOwotICAg IEZGVjFDb250ZXh0ICpmID0gJmZ2LT5jdHg7Ci0gICAgRkZWdWxrYW5TaGFkZXIgKnNoZCA9ICZm di0+cmN0X3NlYXJjaDsKLSAgICBGRlZ1bGthbkRlc2NyaXB0b3JTZXRCaW5kaW5nICpkZXNjX3Nl dDsKLQotICAgIHVpbnQ4X3QgKnNwdl9kYXRhOwotICAgIHNpemVfdCBzcHZfbGVuOwotICAgIHZv aWQgKnNwdl9vcGFxdWUgPSBOVUxMOwotCi0gICAgUkVUKGZmX3ZrX3NoYWRlcl9pbml0KCZmdi0+ cywgc2hkLCAiZmZ2MV9yY3Rfc2VhcmNoIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgVktf U0hBREVSX1NUQUdFX0NPTVBVVEVfQklULAotICAgICAgICAgICAgICAgICAgICAgICAgICAoY29u c3QgY2hhciAqW10pIHsgIkdMX0VYVF9idWZmZXJfcmVmZXJlbmNlIiwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJHTF9FWFRfYnVmZmVyX3JlZmVyZW5jZTIi LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkdMX0VYVF9u dWxsX2luaXRpYWxpemVyIiB9LCAzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAzMiwgMzIs IDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDApKTsKLQotICAgIC8qIENvbW1vbiBjb2Rl YyBoZWFkZXIgKi8KLSAgICBHTFNMRChmZl9zb3VyY2VfY29tbW9uX2NvbXApOwotCi0gICAgR0xT TEMoMCwgbGF5b3V0KHB1c2hfY29uc3RhbnQsIHNjYWxhcikgdW5pZm9ybSBwdXNoQ29uc3RhbnRz IHsgICAgICAgICAgICAgKTsKLSAgICBHTFNMQygxLCAgICBpdmVjNCBmbXRfbHV0OyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIEdMU0xDKDEs ICAgIGludCByY3Rfb2Zmc2V0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICk7Ci0gICAgR0xTTEMoMSwgICAgdWludDhfdCBwbGFuYXJfcmdiOyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBHTFNMQygxLCAgICB1 aW50OF90IHRyYW5zcGFyZW5jeTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICApOwotICAgIEdMU0xDKDEsICAgIHVpbnQ4X3Qga2V5X2ZyYW1lOyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgR0xTTEMoMSwgICAgdWludDhf dCBmb3JjZV9wY207ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KTsKLSAgICBHTFNMQygxLCAgICB1aW50OF90IHZlcnNpb247ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIEdMU0xDKDEsICAgIHVpbnQ4X3QgbWlj cm9fdmVyc2lvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0g ICAgR0xTTEMoMSwgICAgdWludDhfdCBwYWRkaW5nWzNdOyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBHTFNMQygwLCB9OyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIGZm X3ZrX3NoYWRlcl9hZGRfcHVzaF9jb25zdChzaGQsIDAsIHNpemVvZihGRnYxVmtSZXNldFBhcmFt ZXRlcnMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19TSEFERVJfU1RBR0Vf Q09NUFVURV9CSVQpOwotCi0gICAgYXZfYnByaW50Zigmc2hkLT5zcmMsICIjZGVmaW5lIE1BWF9R VUFOVF9UQUJMRVMgJWlcbiIsIE1BWF9RVUFOVF9UQUJMRVMpOwotICAgIGF2X2JwcmludGYoJnNo ZC0+c3JjLCAiI2RlZmluZSBNQVhfQ09OVEVYVF9JTlBVVFMgJWlcbiIsIE1BWF9DT05URVhUX0lO UFVUUyk7Ci0gICAgYXZfYnByaW50Zigmc2hkLT5zcmMsICIjZGVmaW5lIE1BWF9RVUFOVF9UQUJM RV9TSVpFICVpXG4iLCBNQVhfUVVBTlRfVEFCTEVfU0laRSk7Ci0KLSAgICAvKiBOZXZlciB1c2Vk ICovCi0gICAgZGVzY19zZXQgPSAoRkZWdWxrYW5EZXNjcmlwdG9yU2V0QmluZGluZyBbXSkgewot ICAgICAgICB7Ci0gICAgICAgICAgICAubmFtZSAgICAgICAgPSAicmFuZ2Vjb2Rlcl9zdGF0aWNf YnVmIiwKLSAgICAgICAgICAgIC50eXBlICAgICAgICA9IFZLX0RFU0NSSVBUT1JfVFlQRV9VTklG T1JNX0JVRkZFUiwKLSAgICAgICAgICAgIC5zdGFnZXMgICAgICA9IFZLX1NIQURFUl9TVEFHRV9D T01QVVRFX0JJVCwKLSAgICAgICAgICAgIC5tZW1fbGF5b3V0ICA9ICJzY2FsYXIiLAotICAgICAg ICAgICAgLmJ1Zl9jb250ZW50ID0gInVpbnQ4X3QgemVyb19vbmVfc3RhdGVbNTEyXTsiLAotICAg ICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAubmFtZSAgICAgICAgPSAicXVhbnRfYnVm IiwKLSAgICAgICAgICAgIC50eXBlICAgICAgICA9IFZLX0RFU0NSSVBUT1JfVFlQRV9VTklGT1JN X0JVRkZFUiwKLSAgICAgICAgICAgIC5zdGFnZXMgICAgICA9IFZLX1NIQURFUl9TVEFHRV9DT01Q VVRFX0JJVCwKLSAgICAgICAgICAgIC5tZW1fbGF5b3V0ICA9ICJzY2FsYXIiLAotICAgICAgICAg ICAgLmJ1Zl9jb250ZW50ID0gImludDE2X3QgcXVhbnRfdGFibGVbTUFYX1FVQU5UX1RBQkxFU10i Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAiW01BWF9DT05URVhUX0lOUFVUU11bTUFYX1FV QU5UX1RBQkxFX1NJWkVdOyIsCi0gICAgICAgIH0sCi0gICAgfTsKLSAgICBSRVQoZmZfdmtfc2hh ZGVyX2FkZF9kZXNjcmlwdG9yX3NldCgmZnYtPnMsIHNoZCwgZGVzY19zZXQsIDIsIDEsIDEpKTsK LQotICAgIGRlZmluZV9zaGFyZWRfY29kZShhdmN0eCwgc2hkKTsKLQotICAgIGRlc2Nfc2V0ID0g KEZGVnVsa2FuRGVzY3JpcHRvclNldEJpbmRpbmcgW10pIHsKLSAgICAgICAgewotICAgICAgICAg ICAgLm5hbWUgICAgICAgID0gInNsaWNlX2RhdGFfYnVmIiwKLSAgICAgICAgICAgIC50eXBlICAg ICAgICA9IFZLX0RFU0NSSVBUT1JfVFlQRV9TVE9SQUdFX0JVRkZFUiwKLSAgICAgICAgICAgIC5z dGFnZXMgICAgICA9IFZLX1NIQURFUl9TVEFHRV9DT01QVVRFX0JJVCwKLSAgICAgICAgICAgIC5i dWZfY29udGVudCA9ICJTbGljZUNvbnRleHQgc2xpY2VfY3R4IiwKLSAgICAgICAgICAgIC5idWZf ZWxlbXMgICA9IGYtPm1heF9zbGljZV9jb3VudCwKLSAgICAgICAgfSwKLSAgICAgICAgewotICAg ICAgICAgICAgLm5hbWUgICAgICAgPSAic3JjIiwKLSAgICAgICAgICAgIC50eXBlICAgICAgID0g VktfREVTQ1JJUFRPUl9UWVBFX1NUT1JBR0VfSU1BR0UsCi0gICAgICAgICAgICAuZGltZW5zaW9u cyA9IDIsCi0gICAgICAgICAgICAubWVtX2xheW91dCA9IGZmX3ZrX3NoYWRlcl9yZXBfZm10KGZ2 LT5zLmZyYW1lcy0+c3dfZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBmdi0+cmVwX2ZtdCksCi0gICAgICAgICAgICAuZWxlbXMgICAgICA9IGF2 X3BpeF9mbXRfY291bnRfcGxhbmVzKGZ2LT5zLmZyYW1lcy0+c3dfZm9ybWF0KSwKLSAgICAgICAg ICAgIC5tZW1fcXVhbGkgID0gInJlYWRvbmx5IiwKLSAgICAgICAgICAgIC5zdGFnZXMgICAgID0g VktfU0hBREVSX1NUQUdFX0NPTVBVVEVfQklULAotICAgICAgICB9LAotICAgIH07Ci0gICAgUkVU KGZmX3ZrX3NoYWRlcl9hZGRfZGVzY3JpcHRvcl9zZXQoJmZ2LT5zLCBzaGQsIGRlc2Nfc2V0LCAy LCAwLCAwKSk7Ci0KLSAgICBHTFNMRChmZl9zb3VyY2VfZmZ2MV9yY3Rfc2VhcmNoX2NvbXApOwot Ci0gICAgUkVUKHNwdi0+Y29tcGlsZV9zaGFkZXIoJmZ2LT5zLCBzcHYsIHNoZCwgJnNwdl9kYXRh LCAmc3B2X2xlbiwgIm1haW4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzcHZfb3Bh cXVlKSk7Ci0gICAgUkVUKGZmX3ZrX3NoYWRlcl9saW5rKCZmdi0+cywgc2hkLCBzcHZfZGF0YSwg c3B2X2xlbiwgIm1haW4iKSk7Ci0KLSAgICBSRVQoZmZfdmtfc2hhZGVyX3JlZ2lzdGVyX2V4ZWMo JmZ2LT5zLCAmZnYtPmV4ZWNfcG9vbCwgc2hkKSk7Ci0KLWZhaWw6Ci0gICAgaWYgKHNwdl9vcGFx dWUpCi0gICAgICAgIHNwdi0+ZnJlZV9zaGFkZXIoc3B2LCAmc3B2X29wYXF1ZSk7Ci0KLSAgICBy ZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IGluaXRfc2V0dXBfc2hhZGVyKEFWQ29kZWNDb250 ZXh0ICphdmN0eCwgRkZWa1NQSVJWQ29tcGlsZXIgKnNwdikKLXsKLSAgICBpbnQgZXJyOwotICAg IFZ1bGthbkVuY29kZUZGdjFDb250ZXh0ICpmdiA9IGF2Y3R4LT5wcml2X2RhdGE7Ci0gICAgRkZW MUNvbnRleHQgKmYgPSAmZnYtPmN0eDsKLSAgICBGRlZ1bGthblNoYWRlciAqc2hkID0gJmZ2LT5z ZXR1cDsKLSAgICBGRlZ1bGthbkRlc2NyaXB0b3JTZXRCaW5kaW5nICpkZXNjX3NldDsKLQotICAg IHVpbnQ4X3QgKnNwdl9kYXRhOwotICAgIHNpemVfdCBzcHZfbGVuOwotICAgIHZvaWQgKnNwdl9v cGFxdWUgPSBOVUxMOwotCi0gICAgUkVUKGZmX3ZrX3NoYWRlcl9pbml0KCZmdi0+cywgc2hkLCAi ZmZ2MV9zZXR1cCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFZLX1NIQURFUl9TVEFHRV9D T01QVVRFX0JJVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IGNoYXIgKltdKSB7 ICJHTF9FWFRfYnVmZmVyX3JlZmVyZW5jZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAiR0xfRVhUX2J1ZmZlcl9yZWZlcmVuY2UyIiB9LCAyLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAxLCAxLCAxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAw KSk7Ci0KLSAgICAvKiBDb21tb24gY29kZWMgaGVhZGVyICovCi0gICAgR0xTTEQoZmZfc291cmNl X2NvbW1vbl9jb21wKTsKLSAgICBhZGRfcHVzaF9kYXRhKHNoZCk7Ci0KLSAgICBhdl9icHJpbnRm KCZzaGQtPnNyYywgIiNkZWZpbmUgTUFYX1FVQU5UX1RBQkxFUyAlaVxuIiwgTUFYX1FVQU5UX1RB QkxFUyk7Ci0gICAgYXZfYnByaW50Zigmc2hkLT5zcmMsICIjZGVmaW5lIE1BWF9DT05URVhUX0lO UFVUUyAlaVxuIiwgTUFYX0NPTlRFWFRfSU5QVVRTKTsKLSAgICBhdl9icHJpbnRmKCZzaGQtPnNy YywgIiNkZWZpbmUgTUFYX1FVQU5UX1RBQkxFX1NJWkUgJWlcbiIsIE1BWF9RVUFOVF9UQUJMRV9T SVpFKTsKLSAgICBhdl9icHJpbnRmKCZzaGQtPnNyYywgIiNkZWZpbmUgRlVMTF9SRU5PUk1cbiIp OwotCi0gICAgZGVzY19zZXQgPSAoRkZWdWxrYW5EZXNjcmlwdG9yU2V0QmluZGluZyBbXSkgewot ICAgICAgICB7Ci0gICAgICAgICAgICAubmFtZSAgICAgICAgPSAicmFuZ2Vjb2Rlcl9zdGF0aWNf YnVmIiwKLSAgICAgICAgICAgIC50eXBlICAgICAgICA9IFZLX0RFU0NSSVBUT1JfVFlQRV9VTklG T1JNX0JVRkZFUiwKLSAgICAgICAgICAgIC5zdGFnZXMgICAgICA9IFZLX1NIQURFUl9TVEFHRV9D T01QVVRFX0JJVCwKLSAgICAgICAgICAgIC5tZW1fbGF5b3V0ICA9ICJzY2FsYXIiLAotICAgICAg ICAgICAgLmJ1Zl9jb250ZW50ID0gInVpbnQ4X3QgemVyb19vbmVfc3RhdGVbNTEyXTsiLAotICAg ICAgICB9LAotICAgICAgICB7IC8qIFRoaXMgZGVzY3JpcHRvciBpcyBuZXZlciB1c2VkICovCi0g ICAgICAgICAgICAubmFtZSAgICAgICAgPSAicXVhbnRfYnVmIiwKLSAgICAgICAgICAgIC50eXBl ICAgICAgICA9IFZLX0RFU0NSSVBUT1JfVFlQRV9VTklGT1JNX0JVRkZFUiwKLSAgICAgICAgICAg IC5zdGFnZXMgICAgICA9IFZLX1NIQURFUl9TVEFHRV9DT01QVVRFX0JJVCwKLSAgICAgICAgICAg IC5tZW1fbGF5b3V0ICA9ICJzY2FsYXIiLAotICAgICAgICAgICAgLmJ1Zl9jb250ZW50ID0gImlu dDE2X3QgcXVhbnRfdGFibGVbTUFYX1FVQU5UX1RBQkxFU10iCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAiW01BWF9DT05URVhUX0lOUFVUU11bTUFYX1FVQU5UX1RBQkxFX1NJWkVdOyIsCi0g ICAgICAgIH0sCi0gICAgfTsKLSAgICBSRVQoZmZfdmtfc2hhZGVyX2FkZF9kZXNjcmlwdG9yX3Nl dCgmZnYtPnMsIHNoZCwgZGVzY19zZXQsIDIsIDEsIDApKTsKLQotICAgIGRlZmluZV9zaGFyZWRf Y29kZShhdmN0eCwgc2hkKTsKLQotICAgIGRlc2Nfc2V0ID0gKEZGVnVsa2FuRGVzY3JpcHRvclNl dEJpbmRpbmcgW10pIHsKLSAgICAgICAgewotICAgICAgICAgICAgLm5hbWUgICAgICAgID0gInNs aWNlX2RhdGFfYnVmIiwKLSAgICAgICAgICAgIC50eXBlICAgICAgICA9IFZLX0RFU0NSSVBUT1Jf VFlQRV9TVE9SQUdFX0JVRkZFUiwKLSAgICAgICAgICAgIC5zdGFnZXMgICAgICA9IFZLX1NIQURF Ul9TVEFHRV9DT01QVVRFX0JJVCwKLSAgICAgICAgICAgIC5idWZfY29udGVudCA9ICJTbGljZUNv bnRleHQgc2xpY2VfY3R4IiwKLSAgICAgICAgICAgIC5idWZfZWxlbXMgICA9IGYtPm1heF9zbGlj ZV9jb3VudCwKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAgICAgLm5hbWUgICAgICAg PSAic3JjIiwKLSAgICAgICAgICAgIC50eXBlICAgICAgID0gVktfREVTQ1JJUFRPUl9UWVBFX1NU T1JBR0VfSU1BR0UsCi0gICAgICAgICAgICAuZGltZW5zaW9ucyA9IDIsCi0gICAgICAgICAgICAu bWVtX2xheW91dCA9IGZmX3ZrX3NoYWRlcl9yZXBfZm10KGZ2LT5zLmZyYW1lcy0+c3dfZm9ybWF0 LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdi0+cmVw X2ZtdCksCi0gICAgICAgICAgICAuZWxlbXMgICAgICA9IGF2X3BpeF9mbXRfY291bnRfcGxhbmVz KGZ2LT5zLmZyYW1lcy0+c3dfZm9ybWF0KSwKLSAgICAgICAgICAgIC5tZW1fcXVhbGkgID0gInJl YWRvbmx5IiwKLSAgICAgICAgICAgIC5zdGFnZXMgICAgID0gVktfU0hBREVSX1NUQUdFX0NPTVBV VEVfQklULAotICAgICAgICB9LAotICAgIH07Ci0gICAgUkVUKGZmX3ZrX3NoYWRlcl9hZGRfZGVz Y3JpcHRvcl9zZXQoJmZ2LT5zLCBzaGQsIGRlc2Nfc2V0LCAyLCAwLCAwKSk7Ci0KLSAgICBHTFNM RChmZl9zb3VyY2VfZmZ2MV9lbmNfc2V0dXBfY29tcCk7Ci0KLSAgICBSRVQoc3B2LT5jb21waWxl X3NoYWRlcigmZnYtPnMsIHNwdiwgc2hkLCAmc3B2X2RhdGEsICZzcHZfbGVuLCAibWFpbiIsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNwdl9vcGFxdWUpKTsKLSAgICBSRVQoZmZfdmtf c2hhZGVyX2xpbmsoJmZ2LT5zLCBzaGQsIHNwdl9kYXRhLCBzcHZfbGVuLCAibWFpbiIpKTsKLQot ICAgIFJFVChmZl92a19zaGFkZXJfcmVnaXN0ZXJfZXhlYygmZnYtPnMsICZmdi0+ZXhlY19wb29s LCBzaGQpKTsKLQotZmFpbDoKLSAgICBpZiAoc3B2X29wYXF1ZSkKLSAgICAgICAgc3B2LT5mcmVl X3NoYWRlcihzcHYsICZzcHZfb3BhcXVlKTsKLQotICAgIHJldHVybiBlcnI7Ci19Ci0KLXN0YXRp YyBpbnQgaW5pdF9yZXNldF9zaGFkZXIoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LCBGRlZrU1BJUlZD b21waWxlciAqc3B2KQotewotICAgIGludCBlcnI7Ci0gICAgVnVsa2FuRW5jb2RlRkZ2MUNvbnRl eHQgKmZ2ID0gYXZjdHgtPnByaXZfZGF0YTsKLSAgICBGRlYxQ29udGV4dCAqZiA9ICZmdi0+Y3R4 OwotICAgIEZGVnVsa2FuU2hhZGVyICpzaGQgPSAmZnYtPnJlc2V0OwotICAgIEZGVnVsa2FuRGVz Y3JpcHRvclNldEJpbmRpbmcgKmRlc2Nfc2V0OwotCi0gICAgdWludDhfdCAqc3B2X2RhdGE7Ci0g ICAgc2l6ZV90IHNwdl9sZW47Ci0gICAgdm9pZCAqc3B2X29wYXF1ZSA9IE5VTEw7Ci0gICAgaW50 IHdnX2RpbSA9IEZGTUlOKGZ2LT5zLnByb3BzLnByb3BlcnRpZXMubGltaXRzLm1heENvbXB1dGVX b3JrR3JvdXBTaXplWzBdLCAxMDI0KTsKLQotICAgIFJFVChmZl92a19zaGFkZXJfaW5pdCgmZnYt PnMsIHNoZCwgImZmdjFfcmVzZXQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICBWS19TSEFE RVJfU1RBR0VfQ09NUFVURV9CSVQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBj aGFyICpbXSkgeyAiR0xfRVhUX2J1ZmZlcl9yZWZlcmVuY2UiLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIkdMX0VYVF9idWZmZXJfcmVmZXJlbmNlMiIgfSwg MiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgd2dfZGltLCAxLCAxLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAwKSk7Ci0KLSAgICAvKiBDb21tb24gY29kZWMgaGVhZGVyICovCi0gICAg R0xTTEQoZmZfc291cmNlX2NvbW1vbl9jb21wKTsKLQotICAgIEdMU0xDKDAsIGxheW91dChwdXNo X2NvbnN0YW50LCBzY2FsYXIpIHVuaWZvcm0gcHVzaENvbnN0YW50cyB7ICAgICAgICAgICAgICk7 Ci0gICAgR0xTTEYoMSwgICAgdWludCBjb250ZXh0X2NvdW50WyVpXTsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLE1BWF9RVUFOVF9UQUJMRVMpOwotICAgIEdMU0xDKDEs ICAgIHU4YnVmIHNsaWNlX3N0YXRlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICk7Ci0gICAgR0xTTEMoMSwgICAgdWludCBwbGFuZV9zdGF0ZV9zaXplOyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBHTFNMQygxLCAgICB1 aW50OF90IGNvZGVjX3BsYW5lczsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICApOwotICAgIEdMU0xDKDEsICAgIHVpbnQ4X3Qga2V5X2ZyYW1lOyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgR0xTTEMoMSwgICAgdWludDhf dCB2ZXJzaW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KTsKLSAgICBHTFNMQygxLCAgICB1aW50OF90IG1pY3JvX3ZlcnNpb247ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIEdMU0xDKDEsICAgIHVpbnQ4X3QgcGFk ZGluZ1sxXTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0g ICAgR0xTTEMoMCwgfTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBmZl92a19zaGFkZXJfYWRkX3B1c2hfY29uc3Qo c2hkLCAwLCBzaXplb2YoRkZ2MVZrUmVzZXRQYXJhbWV0ZXJzKSwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgVktfU0hBREVSX1NUQUdFX0NPTVBVVEVfQklUKTsKLQotICAgIGF2X2Jw cmludGYoJnNoZC0+c3JjLCAiI2RlZmluZSBNQVhfUVVBTlRfVEFCTEVTICVpXG4iLCBNQVhfUVVB TlRfVEFCTEVTKTsKLSAgICBhdl9icHJpbnRmKCZzaGQtPnNyYywgIiNkZWZpbmUgTUFYX0NPTlRF WFRfSU5QVVRTICVpXG4iLCBNQVhfQ09OVEVYVF9JTlBVVFMpOwotICAgIGF2X2JwcmludGYoJnNo ZC0+c3JjLCAiI2RlZmluZSBNQVhfUVVBTlRfVEFCTEVfU0laRSAlaVxuIiwgTUFYX1FVQU5UX1RB QkxFX1NJWkUpOwotCi0gICAgZGVzY19zZXQgPSAoRkZWdWxrYW5EZXNjcmlwdG9yU2V0QmluZGlu ZyBbXSkgewotICAgICAgICB7Ci0gICAgICAgICAgICAubmFtZSAgICAgICAgPSAicmFuZ2Vjb2Rl cl9zdGF0aWNfYnVmIiwKLSAgICAgICAgICAgIC50eXBlICAgICAgICA9IFZLX0RFU0NSSVBUT1Jf VFlQRV9VTklGT1JNX0JVRkZFUiwKLSAgICAgICAgICAgIC5zdGFnZXMgICAgICA9IFZLX1NIQURF Ul9TVEFHRV9DT01QVVRFX0JJVCwKLSAgICAgICAgICAgIC5tZW1fbGF5b3V0ICA9ICJzY2FsYXIi LAotICAgICAgICAgICAgLmJ1Zl9jb250ZW50ID0gInVpbnQ4X3QgemVyb19vbmVfc3RhdGVbNTEy XTsiLAotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAubmFtZSAgICAgICAgPSAi cXVhbnRfYnVmIiwKLSAgICAgICAgICAgIC50eXBlICAgICAgICA9IFZLX0RFU0NSSVBUT1JfVFlQ RV9VTklGT1JNX0JVRkZFUiwKLSAgICAgICAgICAgIC5zdGFnZXMgICAgICA9IFZLX1NIQURFUl9T VEFHRV9DT01QVVRFX0JJVCwKLSAgICAgICAgICAgIC5tZW1fbGF5b3V0ICA9ICJzY2FsYXIiLAot ICAgICAgICAgICAgLmJ1Zl9jb250ZW50ID0gImludDE2X3QgcXVhbnRfdGFibGVbTUFYX1FVQU5U X1RBQkxFU10iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAiW01BWF9DT05URVhUX0lOUFVU U11bTUFYX1FVQU5UX1RBQkxFX1NJWkVdOyIsCi0gICAgICAgIH0sCi0gICAgfTsKLSAgICBSRVQo ZmZfdmtfc2hhZGVyX2FkZF9kZXNjcmlwdG9yX3NldCgmZnYtPnMsIHNoZCwgZGVzY19zZXQsIDIs IDEsIDApKTsKLQotICAgIGRlZmluZV9zaGFyZWRfY29kZShhdmN0eCwgc2hkKTsKLQotICAgIGRl c2Nfc2V0ID0gKEZGVnVsa2FuRGVzY3JpcHRvclNldEJpbmRpbmcgW10pIHsKLSAgICAgICAgewot ICAgICAgICAgICAgLm5hbWUgICAgICAgID0gInNsaWNlX2RhdGFfYnVmIiwKLSAgICAgICAgICAg IC50eXBlICAgICAgICA9IFZLX0RFU0NSSVBUT1JfVFlQRV9TVE9SQUdFX0JVRkZFUiwKLSAgICAg ICAgICAgIC5tZW1fcXVhbGkgICA9ICJyZWFkb25seSIsCi0gICAgICAgICAgICAuc3RhZ2VzICAg ICAgPSBWS19TSEFERVJfU1RBR0VfQ09NUFVURV9CSVQsCi0gICAgICAgICAgICAuYnVmX2NvbnRl bnQgPSAiU2xpY2VDb250ZXh0IHNsaWNlX2N0eCIsCi0gICAgICAgICAgICAuYnVmX2VsZW1zICAg PSBmLT5tYXhfc2xpY2VfY291bnQsCi0gICAgICAgIH0sCi0gICAgfTsKLSAgICBSRVQoZmZfdmtf c2hhZGVyX2FkZF9kZXNjcmlwdG9yX3NldCgmZnYtPnMsIHNoZCwgZGVzY19zZXQsIDEsIDAsIDAp KTsKLQotICAgIEdMU0xEKGZmX3NvdXJjZV9mZnYxX3Jlc2V0X2NvbXApOwotCi0gICAgUkVUKHNw di0+Y29tcGlsZV9zaGFkZXIoJmZ2LT5zLCBzcHYsIHNoZCwgJnNwdl9kYXRhLCAmc3B2X2xlbiwg Im1haW4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzcHZfb3BhcXVlKSk7Ci0gICAg UkVUKGZmX3ZrX3NoYWRlcl9saW5rKCZmdi0+cywgc2hkLCBzcHZfZGF0YSwgc3B2X2xlbiwgIm1h aW4iKSk7Ci0KLSAgICBSRVQoZmZfdmtfc2hhZGVyX3JlZ2lzdGVyX2V4ZWMoJmZ2LT5zLCAmZnYt PmV4ZWNfcG9vbCwgc2hkKSk7Ci0KLWZhaWw6Ci0gICAgaWYgKHNwdl9vcGFxdWUpCi0gICAgICAg IHNwdi0+ZnJlZV9zaGFkZXIoc3B2LCAmc3B2X29wYXF1ZSk7Ci0KLSAgICByZXR1cm4gZXJyOwot fQotCi1zdGF0aWMgaW50IGluaXRfZW5jb2RlX3NoYWRlcihBVkNvZGVjQ29udGV4dCAqYXZjdHgs IEZGVmtTUElSVkNvbXBpbGVyICpzcHYpCi17Ci0gICAgaW50IGVycjsKLSAgICBWdWxrYW5FbmNv ZGVGRnYxQ29udGV4dCAqZnYgPSBhdmN0eC0+cHJpdl9kYXRhOwotICAgIEZGVjFDb250ZXh0ICpm ID0gJmZ2LT5jdHg7Ci0gICAgRkZWdWxrYW5TaGFkZXIgKnNoZCA9ICZmdi0+ZW5jOwotICAgIEZG VnVsa2FuRGVzY3JpcHRvclNldEJpbmRpbmcgKmRlc2Nfc2V0OwotCi0gICAgdWludDhfdCAqc3B2 X2RhdGE7Ci0gICAgc2l6ZV90IHNwdl9sZW47Ci0gICAgdm9pZCAqc3B2X29wYXF1ZSA9IE5VTEw7 Ci0gICAgaW50IHVzZV9jYWNoZWRfcmVhZGVyID0gZnYtPmN0eC5hYyAhPSBBQ19HT0xPTUJfUklD RTsKLQotICAgIFJFVChmZl92a19zaGFkZXJfaW5pdCgmZnYtPnMsIHNoZCwgImZmdjFfZW5jIiwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgVktfU0hBREVSX1NUQUdFX0NPTVBVVEVfQklULAot ICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAqW10pIHsgIkdMX0VYVF9idWZm ZXJfcmVmZXJlbmNlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICJHTF9FWFRfYnVmZmVyX3JlZmVyZW5jZTIiIH0sIDIsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgIHVzZV9jYWNoZWRfcmVhZGVyID8gQ09OVEVYVF9TSVpFIDogMSwgMSwgMSwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgMCkpOwotCi0gICAgLyogQ29tbW9uIGNvZGVjIGhlYWRlciAq LwotICAgIEdMU0xEKGZmX3NvdXJjZV9jb21tb25fY29tcCk7Ci0KLSAgICBhZGRfcHVzaF9kYXRh KHNoZCk7Ci0KLSAgICBhdl9icHJpbnRmKCZzaGQtPnNyYywgIiNkZWZpbmUgTUFYX1FVQU5UX1RB QkxFUyAlaVxuIiwgTUFYX1FVQU5UX1RBQkxFUyk7Ci0gICAgYXZfYnByaW50Zigmc2hkLT5zcmMs ICIjZGVmaW5lIE1BWF9DT05URVhUX0lOUFVUUyAlaVxuIiwgTUFYX0NPTlRFWFRfSU5QVVRTKTsK LSAgICBhdl9icHJpbnRmKCZzaGQtPnNyYywgIiNkZWZpbmUgTUFYX1FVQU5UX1RBQkxFX1NJWkUg JWlcbiIsIE1BWF9RVUFOVF9UQUJMRV9TSVpFKTsKLQotICAgIGlmICh1c2VfY2FjaGVkX3JlYWRl cikKLSAgICAgICAgYXZfYnByaW50Zigmc2hkLT5zcmMsICIjZGVmaW5lIENBQ0hFRF9TWU1CT0xf UkVBREVSIDFcbiIpOwotCi0gICAgZGVzY19zZXQgPSAoRkZWdWxrYW5EZXNjcmlwdG9yU2V0Qmlu ZGluZyBbXSkgewotICAgICAgICB7Ci0gICAgICAgICAgICAubmFtZSAgICAgICAgPSAicmFuZ2Vj b2Rlcl9zdGF0aWNfYnVmIiwKLSAgICAgICAgICAgIC50eXBlICAgICAgICA9IFZLX0RFU0NSSVBU T1JfVFlQRV9VTklGT1JNX0JVRkZFUiwKLSAgICAgICAgICAgIC5zdGFnZXMgICAgICA9IFZLX1NI QURFUl9TVEFHRV9DT01QVVRFX0JJVCwKLSAgICAgICAgICAgIC5tZW1fbGF5b3V0ICA9ICJzY2Fs YXIiLAotICAgICAgICAgICAgLmJ1Zl9jb250ZW50ID0gInVpbnQ4X3QgemVyb19vbmVfc3RhdGVb NTEyXTsiLAotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAubmFtZSAgICAgICAg PSAicXVhbnRfYnVmIiwKLSAgICAgICAgICAgIC50eXBlICAgICAgICA9IFZLX0RFU0NSSVBUT1Jf VFlQRV9VTklGT1JNX0JVRkZFUiwKLSAgICAgICAgICAgIC5zdGFnZXMgICAgICA9IFZLX1NIQURF Ul9TVEFHRV9DT01QVVRFX0JJVCwKLSAgICAgICAgICAgIC5tZW1fbGF5b3V0ICA9ICJzY2FsYXIi LAotICAgICAgICAgICAgLmJ1Zl9jb250ZW50ID0gImludDE2X3QgcXVhbnRfdGFibGVbTUFYX1FV QU5UX1RBQkxFU10iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAiW01BWF9DT05URVhUX0lO UFVUU11bTUFYX1FVQU5UX1RBQkxFX1NJWkVdOyIsCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAg ICAgICAgICAgIC5uYW1lICAgICAgICA9ICJjcmNfaWVlZV9idWYiLAotICAgICAgICAgICAgLnR5 cGUgICAgICAgID0gVktfREVTQ1JJUFRPUl9UWVBFX1VOSUZPUk1fQlVGRkVSLAotICAgICAgICAg ICAgLnN0YWdlcyAgICAgID0gVktfU0hBREVSX1NUQUdFX0NPTVBVVEVfQklULAotICAgICAgICAg ICAgLm1lbV9sYXlvdXQgID0gInNjYWxhciIsCi0gICAgICAgICAgICAuYnVmX2NvbnRlbnQgPSAi dWludDMyX3QgY3JjX2llZWVbMjU2XTsiLAotICAgICAgICB9LAotICAgIH07Ci0KLSAgICBSRVQo ZmZfdmtfc2hhZGVyX2FkZF9kZXNjcmlwdG9yX3NldCgmZnYtPnMsIHNoZCwgZGVzY19zZXQsIDMs IDEsIDApKTsKLQotICAgIGRlZmluZV9zaGFyZWRfY29kZShhdmN0eCwgc2hkKTsKLQotICAgIGRl c2Nfc2V0ID0gKEZGVnVsa2FuRGVzY3JpcHRvclNldEJpbmRpbmcgW10pIHsKLSAgICAgICAgewot ICAgICAgICAgICAgLm5hbWUgICAgICAgID0gInNsaWNlX2RhdGFfYnVmIiwKLSAgICAgICAgICAg IC50eXBlICAgICAgICA9IFZLX0RFU0NSSVBUT1JfVFlQRV9TVE9SQUdFX0JVRkZFUiwKLSAgICAg ICAgICAgIC5zdGFnZXMgICAgICA9IFZLX1NIQURFUl9TVEFHRV9DT01QVVRFX0JJVCwKLSAgICAg ICAgICAgIC5idWZfY29udGVudCA9ICJTbGljZUNvbnRleHQgc2xpY2VfY3R4IiwKLSAgICAgICAg ICAgIC5idWZfZWxlbXMgICA9IGYtPm1heF9zbGljZV9jb3VudCwKLSAgICAgICAgfSwKLSAgICAg ICAgewotICAgICAgICAgICAgLm5hbWUgICAgICAgPSAic3JjIiwKLSAgICAgICAgICAgIC50eXBl ICAgICAgID0gVktfREVTQ1JJUFRPUl9UWVBFX1NUT1JBR0VfSU1BR0UsCi0gICAgICAgICAgICAu ZGltZW5zaW9ucyA9IDIsCi0gICAgICAgICAgICAubWVtX2xheW91dCA9IGZmX3ZrX3NoYWRlcl9y ZXBfZm10KGZ2LT5zLmZyYW1lcy0+c3dfZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBmdi0+cmVwX2ZtdCksCi0gICAgICAgICAgICAuZWxlbXMg ICAgICA9IGF2X3BpeF9mbXRfY291bnRfcGxhbmVzKGZ2LT5zLmZyYW1lcy0+c3dfZm9ybWF0KSwK LSAgICAgICAgICAgIC5tZW1fcXVhbGkgID0gInJlYWRvbmx5IiwKLSAgICAgICAgICAgIC5zdGFn ZXMgICAgID0gVktfU0hBREVSX1NUQUdFX0NPTVBVVEVfQklULAotICAgICAgICB9LAotICAgICAg ICB7Ci0gICAgICAgICAgICAubmFtZSAgICAgICAgPSAicmVzdWx0c19kYXRhX2J1ZiIsCi0gICAg ICAgICAgICAudHlwZSAgICAgICAgPSBWS19ERVNDUklQVE9SX1RZUEVfU1RPUkFHRV9CVUZGRVIs Ci0gICAgICAgICAgICAuc3RhZ2VzICAgICAgPSBWS19TSEFERVJfU1RBR0VfQ09NUFVURV9CSVQs Ci0gICAgICAgICAgICAubWVtX3F1YWxpICAgPSAid3JpdGVvbmx5IiwKLSAgICAgICAgICAgIC5i dWZfY29udGVudCA9ICJ1aW50NjRfdCBzbGljZV9yZXN1bHRzWzIwNDhdOyIsCi0gICAgICAgIH0s Ci0gICAgICAgIHsgLyogcGxhY2UgaG9sZGVyIGZvciBkZXNjX3NldFszXSAqLwotICAgICAgICB9 LAotICAgIH07Ci0gICAgaWYgKGZ2LT5pc19yZ2IpIHsKLSAgICAgICAgQVZIV0ZyYW1lc0NvbnRl eHQgKmludGVybWVkaWF0ZV9mcmFtZXNfY3R4OwotICAgICAgICBpbnRlcm1lZGlhdGVfZnJhbWVz X2N0eCA9IChBVkhXRnJhbWVzQ29udGV4dCAqKWZ2LT5pbnRlcm1lZGlhdGVfZnJhbWVzX3JlZi0+ ZGF0YTsKLSAgICAgICAgZGVzY19zZXRbM10gPSAoRkZWdWxrYW5EZXNjcmlwdG9yU2V0QmluZGlu ZykgewotICAgICAgICAgICAgLm5hbWUgICAgICAgPSAidG1wIiwKLSAgICAgICAgICAgIC50eXBl ICAgICAgID0gVktfREVTQ1JJUFRPUl9UWVBFX1NUT1JBR0VfSU1BR0UsCi0gICAgICAgICAgICAu ZGltZW5zaW9ucyA9IDIsCi0gICAgICAgICAgICAubWVtX2xheW91dCA9IGZmX3ZrX3NoYWRlcl9y ZXBfZm10KGludGVybWVkaWF0ZV9mcmFtZXNfY3R4LT5zd19mb3JtYXQsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZGX1ZLX1JFUF9OQVRJVkUpLAotICAg ICAgICAgICAgLnN0YWdlcyAgICAgPSBWS19TSEFERVJfU1RBR0VfQ09NUFVURV9CSVQsCi0gICAg ICAgIH07Ci0gICAgfQotICAgIFJFVChmZl92a19zaGFkZXJfYWRkX2Rlc2NyaXB0b3Jfc2V0KCZm di0+cywgc2hkLCBkZXNjX3NldCwgMyArIGZ2LT5pc19yZ2IsIDAsIDApKTsKLQotICAgIEdMU0xE KGZmX3NvdXJjZV9mZnYxX2VuY19jb21wKTsKLQotICAgIFJFVChzcHYtPmNvbXBpbGVfc2hhZGVy KCZmdi0+cywgc3B2LCBzaGQsICZzcHZfZGF0YSwgJnNwdl9sZW4sICJtYWluIiwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAmc3B2X29wYXF1ZSkpOwotICAgIFJFVChmZl92a19zaGFkZXJf bGluaygmZnYtPnMsIHNoZCwgc3B2X2RhdGEsIHNwdl9sZW4sICJtYWluIikpOwotCi0gICAgUkVU KGZmX3ZrX3NoYWRlcl9yZWdpc3Rlcl9leGVjKCZmdi0+cywgJmZ2LT5leGVjX3Bvb2wsIHNoZCkp OwotCi1mYWlsOgotICAgIGlmIChzcHZfb3BhcXVlKQotICAgICAgICBzcHYtPmZyZWVfc2hhZGVy KHNwdiwgJnNwdl9vcGFxdWUpOwotCi0gICAgcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGF2X2Nv bGQgaW50IHZ1bGthbl9lbmNvZGVfZmZ2MV9pbml0KEFWQ29kZWNDb250ZXh0ICphdmN0eCkKLXsK LSAgICBpbnQgZXJyOwotICAgIHNpemVfdCBtYXhzaXplLCBtYXhfaGVhcF9zaXplLCBtYXhfaG9z dF9zaXplOwotICAgIFZ1bGthbkVuY29kZUZGdjFDb250ZXh0ICpmdiA9IGF2Y3R4LT5wcml2X2Rh dGE7Ci0gICAgRkZWMUNvbnRleHQgKmYgPSAmZnYtPmN0eDsKLSAgICBGRlZrU1BJUlZDb21waWxl ciAqc3B2OwotCi0gICAgaWYgKChlcnIgPSBmZl9mZnYxX2NvbW1vbl9pbml0KGF2Y3R4LCBmKSkg PCAwKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgaWYgKGYtPmFjID09IDEpCi0gICAgICAg IGYtPmFjID0gQUNfUkFOR0VfQ1VTVE9NX1RBQjsKLQotICAgIGVyciA9IGZmX2ZmdjFfZW5jb2Rl X3NldHVwX3BsYW5lX2luZm8oYXZjdHgsIGF2Y3R4LT5zd19waXhfZm10KTsKLSAgICBpZiAoZXJy IDwgMCkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIC8qIFRhcmdldCB2ZXJzaW9uIDMgYnkg ZGVmYXVsdCAqLwotICAgIGYtPnZlcnNpb24gPSAzOwotCi0gICAgZXJyID0gZmZfZmZ2MV9lbmNv ZGVfaW5pdChhdmN0eCk7Ci0gICAgaWYgKGVyciA8IDApCi0gICAgICAgIHJldHVybiBlcnI7Ci0K LSAgICAvKiBSaWNlIGNvZGluZyBkaWQgbm90IHN1cHBvcnQgaGlnaCBiaXQgZGVwdGhzICovCi0g ICAgaWYgKGYtPmJpdHNfcGVyX3Jhd19zYW1wbGUgPiAoZi0+dmVyc2lvbiA+IDMgPyAxNiA6IDgp KSB7Ci0gICAgICAgIGlmIChmLT5hYyA9PSBBQ19HT0xPTUJfUklDRSkgewotICAgICAgICAgICAg YXZfbG9nKGF2Y3R4LCBBVl9MT0dfV0FSTklORywgImJpdHNfcGVyX3Jhd19zYW1wbGUgPiA4LCAi Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZm9yY2luZyByYW5n ZSBjb2RlclxuIik7Ci0gICAgICAgICAgICBmLT5hYyA9IEFDX1JBTkdFX0NVU1RPTV9UQUI7Ci0g ICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoZi0+dmVyc2lvbiA8IDQgJiYgYXZjdHgtPmdvcF9z aXplID4gMSkgewotICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIlVzaW5nIGlu dGVyIGZyYW1lcyByZXF1aXJlcyB2ZXJzaW9uIDQgKC1sZXZlbCA0KVxuIik7Ci0gICAgICAgIHJl dHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwotICAgIH0KLQotICAgIGlmIChmLT52ZXJzaW9uID09 IDQgJiYgYXZjdHgtPnN0cmljdF9zdGRfY29tcGxpYW5jZSA+IEZGX0NPTVBMSUFOQ0VfRVhQRVJJ TUVOVEFMKSB7Ci0gICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiVmVyc2lvbiA0 IGlzIGV4cGVyaW1lbnRhbCBhbmQgcmVxdWlyZXMgLXN0cmljdCAtMlxuIik7Ci0gICAgICAgICAg ICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKLSAgICB9Ci0KLSAgICAvKiBXZSB0YXJnZXQg dmVyc2lvbiA0LjMgKi8KLSAgICBpZiAoZi0+dmVyc2lvbiA9PSA0ICYmIGYtPm1pY3JvX3ZlcnNp b24gPiA0KQotICAgICAgICBmLT5taWNyb192ZXJzaW9uID0gMzsKLQotICAgIC8vaWYgKGZ2LT5j dHguYWMgPT0gQUNfR09MT01CX1JJQ0UpIHsKLSAgICBpZiAoMCkgewotICAgICAgICBpbnQgd19h ID0gRkZBTElHTihhdmN0eC0+d2lkdGgsIExHX0FMSUdOX1cpOwotICAgICAgICBpbnQgaF9hID0g RkZBTElHTihhdmN0eC0+aGVpZ2h0LCBMR19BTElHTl9IKTsKLSAgICAgICAgaW50IHdfc2wsIGhf c2w7Ci0KLSAgICAgICAgLyogUGl4ZWxzIHBlciBsaW5lIGFuIGludm9jYXRpb24gaGFuZGxlcyAq LwotICAgICAgICBpbnQgcHBpID0gMDsKLSAgICAgICAgLyogQ2h1bmsgc2l6ZSAqLwotICAgICAg ICBpbnQgY2h1bmtzID0gMDsKLQotICAgICAgICBkbyB7Ci0gICAgICAgICAgICBpZiAocHBpIDwg MikKLSAgICAgICAgICAgICAgICBwcGkrKzsKLSAgICAgICAgICAgIGNodW5rcysrOwotICAgICAg ICAgICAgd19zbCA9IHdfYSAvIChMR19BTElHTl9XKnBwaSk7Ci0gICAgICAgICAgICBoX3NsID0g aF9hIC8gKExHX0FMSUdOX0gqY2h1bmtzKTsKLSAgICAgICAgfSB3aGlsZSAod19zbCA+IE1BWF9T TElDRVMgLyBoX3NsKTsKLQotICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19WRVJCT1NFLCAi U2xpY2UgY29uZmlnOiAlaXglaSwgJWkgdG90YWxcbiIsCi0gICAgICAgICAgICAgICBMR19BTElH Tl9XKnBwaSwgTEdfQUxJR05fSCpjaHVua3MsIHdfc2wqaF9zbCk7Ci0gICAgICAgIGF2X2xvZyhh dmN0eCwgQVZfTE9HX1ZFUkJPU0UsICJIb3Jpem9udGFsIHNsaWNlczogJWkgKCVpIHBpeGVscyBw ZXIgaW52b2MpXG4iLAotICAgICAgICAgICAgICAgd19zbCwgcHBpKTsKLSAgICAgICAgYXZfbG9n KGF2Y3R4LCBBVl9MT0dfVkVSQk9TRSwgIlZlcnRpY2FsIHNsaWNlczogJWkgKCVpIGNodW5rcylc biIsCi0gICAgICAgICAgICAgICBoX3NsLCBjaHVua3MpOwotCi0gICAgICAgIGYtPm51bV9oX3Ns aWNlcyA9IHdfc2w7Ci0gICAgICAgIGYtPm51bV92X3NsaWNlcyA9IGhfc2w7Ci0KLSAgICAgICAg ZnYtPnBwaSA9IHBwaTsKLSAgICAgICAgZnYtPmNodW5rcyA9IGNodW5rczsKLSAgICB9IGVsc2Ug ewotICAgICAgICBmLT5udW1faF9zbGljZXMgPSBmdi0+bnVtX2hfc2xpY2VzOwotICAgICAgICBm LT5udW1fdl9zbGljZXMgPSBmdi0+bnVtX3Zfc2xpY2VzOwotCi0gICAgICAgIGlmIChmLT5udW1f aF9zbGljZXMgPD0gMCAmJiBmLT5udW1fdl9zbGljZXMgPD0gMCkgewotICAgICAgICAgICAgaWYg KGF2Y3R4LT5zbGljZXMpIHsKLSAgICAgICAgICAgICAgICBlcnIgPSBmZl9mZnYxX2VuY29kZV9k ZXRlcm1pbmVfc2xpY2VzKGF2Y3R4KTsKLSAgICAgICAgICAgICAgICBpZiAoZXJyIDwgMCkKLSAg ICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg ICAgICAgICAgICAgZi0+bnVtX2hfc2xpY2VzID0gMzI7Ci0gICAgICAgICAgICAgICAgZi0+bnVt X3Zfc2xpY2VzID0gMzI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoZi0+bnVt X2hfc2xpY2VzICYmIGYtPm51bV92X3NsaWNlcyA8PSAwKSB7Ci0gICAgICAgICAgICBmLT5udW1f dl9zbGljZXMgPSBNQVhfU0xJQ0VTIC8gZi0+bnVtX2hfc2xpY2VzOwotICAgICAgICB9IGVsc2Ug aWYgKGYtPm51bV92X3NsaWNlcyAmJiBmLT5udW1faF9zbGljZXMgPD0gMCkgewotICAgICAgICAg ICAgZi0+bnVtX2hfc2xpY2VzID0gTUFYX1NMSUNFUyAvIGYtPm51bV92X3NsaWNlczsKLSAgICAg ICAgfQotCi0gICAgICAgIGYtPm51bV9oX3NsaWNlcyA9IEZGTUlOKGYtPm51bV9oX3NsaWNlcywg YXZjdHgtPndpZHRoKTsKLSAgICAgICAgZi0+bnVtX3Zfc2xpY2VzID0gRkZNSU4oZi0+bnVtX3Zf c2xpY2VzLCBhdmN0eC0+aGVpZ2h0KTsKLQotICAgICAgICBpZiAoZi0+bnVtX2hfc2xpY2VzICog Zi0+bnVtX3Zfc2xpY2VzID4gTUFYX1NMSUNFUykgewotICAgICAgICAgICAgYXZfbG9nKGF2Y3R4 LCBBVl9MT0dfRVJST1IsICJUb28gbWFueSBzbGljZXMgKCVpKSwgbWF4aW11bSBzdXBwb3J0ZWQg IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJieSB0aGUgc3RhbmRh cmQgaXMgJWlcbiIsCi0gICAgICAgICAgICAgICAgICAgZi0+bnVtX2hfc2xpY2VzICogZi0+bnVt X3Zfc2xpY2VzLCBNQVhfU0xJQ0VTKTsKLSAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX1BBVENI V0VMQ09NRTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGYtPm1heF9zbGljZV9jb3VudCA9IGYt Pm51bV9oX3NsaWNlcyAqIGYtPm51bV92X3NsaWNlczsKLQotICAgIGlmICgoZXJyID0gZmZfZmZ2 MV93cml0ZV9leHRyYWRhdGEoYXZjdHgpKSA8IDApCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAg ICBpZiAoZi0+dmVyc2lvbiA8IDQpIHsKLSAgICAgICAgaWYgKCgoZi0+Y2hyb21hX2hfc2hpZnQg PiAwKSAmJiAoYXZjdHgtPndpZHRoICUgKDY0IDw8IGYtPmNocm9tYV9oX3NoaWZ0KSkpIHx8Ci0g ICAgICAgICAgICAoKGYtPmNocm9tYV92X3NoaWZ0ID4gMCkgJiYgKGF2Y3R4LT5oZWlnaHQgJSAo NjQgPDwgZi0+Y2hyb21hX3Zfc2hpZnQpKSkpIHsKLSAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwg QVZfTE9HX0VSUk9SLCAiRW5jb2RpbmcgZnJhbWVzIHdpdGggc3Vic2FtcGxpbmcgYW5kIHVuYWxp Z25lZCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRpbWVuc2lv bnMgaXMgb25seSBzdXBwb3J0ZWQgaW4gdmVyc2lvbiA0ICgtbGV2ZWwgNClcbiIpOwotICAgICAg ICAgICAgcmV0dXJuIEFWRVJST1JfUEFUQ0hXRUxDT01FOwotICAgICAgICB9Ci0gICAgfQotCi0g ICAgaWYgKGZ2LT5mb3JjZV9wY20pIHsKLSAgICAgICAgaWYgKGYtPnZlcnNpb24gPCA0KSB7Ci0g ICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIlBDTSBjb2Rpbmcgb25seSBz dXBwb3J0ZWQgYnkgdmVyc2lvbiA0ICgtbGV2ZWwgNClcbiIpOwotICAgICAgICAgICAgcmV0dXJu IEFWRVJST1JfSU5WQUxJRERBVEE7Ci0gICAgICAgIH0gZWxzZSBpZiAoZi0+YWMgPT0gQUNfR09M T01CX1JJQ0UpIHsKLSAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiUENN IGNvZGluZyByZXF1aXJlcyByYW5nZSBjb2RpbmdcbiIpOwotICAgICAgICAgICAgcmV0dXJuIEFW RVJST1JfSU5WQUxJRERBVEE7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKiBJbml0IFZ1bGth biAqLwotICAgIGVyciA9IGZmX3ZrX2luaXQoJmZ2LT5zLCBhdmN0eCwgTlVMTCwgYXZjdHgtPmh3 X2ZyYW1lc19jdHgpOwotICAgIGlmIChlcnIgPCAwKQotICAgICAgICByZXR1cm4gZXJyOwotCi0g ICAgZnYtPnFmID0gZmZfdmtfcWZfZmluZCgmZnYtPnMsIFZLX1FVRVVFX0NPTVBVVEVfQklULCAw KTsKLSAgICBpZiAoIWZ2LT5xZikgewotICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJP UiwgIkRldmljZSBoYXMgbm8gY29tcHV0ZSBxdWV1ZXMhXG4iKTsKLSAgICAgICAgcmV0dXJuIGVy cjsKLSAgICB9Ci0KLSAgICAvKiBUcnkgdG8gbWVhc3VyZSBWUkFNIHNpemUgKi8KLSAgICBtYXhf aGVhcF9zaXplID0gMDsKLSAgICBtYXhfaG9zdF9zaXplID0gMDsKLSAgICBmb3IgKGludCBpID0g MDsgaSA8IGZ2LT5zLm1wcm9wcy5tZW1vcnlIZWFwQ291bnQ7IGkrKykgewotICAgICAgICBpZiAo ZnYtPnMubXByb3BzLm1lbW9yeUhlYXBzW2ldLmZsYWdzICYgVktfTUVNT1JZX0hFQVBfREVWSUNF X0xPQ0FMX0JJVCkKLSAgICAgICAgICAgIG1heF9oZWFwX3NpemUgPSBGRk1BWChmdi0+bWF4X2hl YXBfc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdi0+cy5tcHJvcHMu bWVtb3J5SGVhcHNbaV0uc2l6ZSk7Ci0gICAgICAgIGlmICghKGZ2LT5zLm1wcm9wcy5tZW1vcnlI ZWFwc1tpXS5mbGFncyAmIFZLX01FTU9SWV9IRUFQX0RFVklDRV9MT0NBTF9CSVQpKQotICAgICAg ICAgICAgbWF4X2hvc3Rfc2l6ZSA9IEZGTUFYKG1heF9ob3N0X3NpemUsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZnYtPnMubXByb3BzLm1lbW9yeUhlYXBzW2ldLnNpemUpOwot ICAgIH0KLSAgICBmdi0+bWF4X2hlYXBfc2l6ZSA9IG1heF9oZWFwX3NpemU7Ci0KLSAgICBtYXhz aXplID0gZmZfZmZ2MV9lbmNvZGVfYnVmZmVyX3NpemUoYXZjdHgpOwotICAgIGlmIChtYXhzaXpl ID4gZnYtPnMucHJvcHNfMTEubWF4TWVtb3J5QWxsb2NhdGlvblNpemUpIHsKLSAgICAgICAgYXZf bG9nKGF2Y3R4LCBBVl9MT0dfV0FSTklORywgIkVuY29kaW5nIGJ1ZmZlciBzaXplICglenUpIGxh cmdlciAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aGFuIG1heGlt dW0gZGV2aWNlIGFsbG9jYXRpb24gKCV6dSksIGNsaXBwaW5nXG4iLAotICAgICAgICAgICAgICAg bWF4c2l6ZSwgZnYtPnMucHJvcHNfMTEubWF4TWVtb3J5QWxsb2NhdGlvblNpemUpOwotICAgICAg ICBtYXhzaXplID0gZnYtPnMucHJvcHNfMTEubWF4TWVtb3J5QWxsb2NhdGlvblNpemU7Ci0gICAg fQotCi0gICAgaWYgKG1heF9oZWFwX3NpemUgPCBtYXhzaXplKSB7Ci0gICAgICAgIGF2X2xvZyhh dmN0eCwgQVZfTE9HX1dBUk5JTkcsICJFbmNvZGluZyBidWZmZXIgKCV6dSkgbGFyZ2VyIHRoYW4g VlJBTSAoJXp1KSwgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidXNp bmcgaG9zdCBtZW1vcnkgKHNsb3dlcilcbiIsCi0gICAgICAgICAgICAgICBtYXhzaXplLCBmdi0+ bWF4X2hlYXBfc2l6ZSk7Ci0KLSAgICAgICAgLyogS2VlcCAxLzJ0aCBvZiBSQU0gYXMgaGVhZHJv b20gKi8KLSAgICAgICAgbWF4X2hlYXBfc2l6ZSA9IG1heF9ob3N0X3NpemUgLSAobWF4X2hvc3Rf c2l6ZSA+PiAxKTsKLSAgICB9IGVsc2UgewotICAgICAgICAvKiBLZWVwIDEvOHRoIG9mIFZSQU0g YXMgaGVhZHJvb20gKi8KLSAgICAgICAgbWF4X2hlYXBfc2l6ZSA9IG1heF9oZWFwX3NpemUgLSAo bWF4X2hlYXBfc2l6ZSA+PiAzKTsKLSAgICB9Ci0KLSAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19J TkZPLCAiQXN5bmMgYnVmZmVyczogJXp1TWlCIHBlciBjb250ZXh0LCAlenVNaUIgdG90YWwsIGRl cHRoOiAlaVxuIiwKLSAgICAgICAgICAgbWF4c2l6ZSAvICgxMDI0KjEwMjQpLAotICAgICAgICAg ICAoZnYtPmFzeW5jX2RlcHRoICogbWF4c2l6ZSkgLyAoMTAyNCoxMDI0KSwKLSAgICAgICAgICAg ZnYtPmFzeW5jX2RlcHRoKTsKLQotICAgIGVyciA9IGZmX3ZrX2V4ZWNfcG9vbF9pbml0KCZmdi0+ cywgZnYtPnFmLCAmZnYtPmV4ZWNfcG9vbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBmdi0+YXN5bmNfZGVwdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwg MCwgTlVMTCk7Ci0gICAgaWYgKGVyciA8IDApCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICBm di0+dHJhbnNmZXJfcWYgPSBmZl92a19xZl9maW5kKCZmdi0+cywgVktfUVVFVUVfVFJBTlNGRVJf QklULCAwKTsKLSAgICBpZiAoIWZ2LT50cmFuc2Zlcl9xZikgewotICAgICAgICBhdl9sb2coYXZj dHgsIEFWX0xPR19FUlJPUiwgIkRldmljZSBoYXMgbm8gdHJhbnNmZXIgcXVldWVzIVxuIik7Ci0g ICAgICAgIHJldHVybiBlcnI7Ci0gICAgfQotCi0gICAgZXJyID0gZmZfdmtfZXhlY19wb29sX2lu aXQoJmZ2LT5zLCBmdi0+dHJhbnNmZXJfcWYsICZmdi0+dHJhbnNmZXJfZXhlY19wb29sLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgMCwgMCwgMCwgTlVMTCk7Ci0gICAgaWYgKGVyciA8IDApCi0gICAgICAgIHJldHVybiBl cnI7Ci0KLSAgICBzcHYgPSBmZl92a19zcGlydl9pbml0KCk7Ci0gICAgaWYgKCFzcHYpIHsKLSAg ICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJVbmFibGUgdG8gaW5pdGlhbGl6ZSBT UElSLVYgY29tcGlsZXIhXG4iKTsKLSAgICAgICAgcmV0dXJuIEFWRVJST1JfRVhURVJOQUw7Ci0g ICAgfQotCi0gICAgLyogRGV0ZWN0IHRoZSBzcGVjaWFsIFJHQiBjb2RpbmcgbW9kZSAqLwotICAg IGZ2LT5pc19yZ2IgPSAhKGYtPmNvbG9yc3BhY2UgPT0gMCAmJiBhdmN0eC0+c3dfcGl4X2ZtdCAh PSBBVl9QSVhfRk1UX1lBOCkgJiYKLSAgICAgICAgICAgICAgICAgIShhdmN0eC0+c3dfcGl4X2Zt dCA9PSBBVl9QSVhfRk1UX1lBOCk7Ci0KLSAgICAvKiBiaXRzX3Blcl9yYXdfc2FtcGxlIHVzZSBy ZWd1bGFyIHVuc2lnbmVkIHJlcHJlc2VudGF0aW9uLAotICAgICAqIGJ1dCBpbiBoaWdoZXIgYml0 IGRlcHRocywgdGhlIGRhdGEgaXMgY2FzdGVkIHRvIGludDE2X3QgKi8KLSAgICBmdi0+cmVwX2Zt dCA9IEZGX1ZLX1JFUF9VSU5UOwotICAgIGlmICghZnYtPmlzX3JnYiAmJiBmLT5iaXRzX3Blcl9y YXdfc2FtcGxlID4gOCkKLSAgICAgICAgZnYtPnJlcF9mbXQgPSBGRl9WS19SRVBfSU5UOwotCi0g ICAgLyogSW5pdCByY3Qgc2VhcmNoIHNoYWRlciAqLwotICAgIGZ2LT5vcHRpbWl6ZV9yY3QgPSBm di0+aXNfcmdiICYmIGYtPnZlcnNpb24gPj0gNCAmJgotICAgICAgICAgICAgICAgICAgICAgICAh ZnYtPmZvcmNlX3BjbSAmJiBmdi0+b3B0aW1pemVfcmN0OwotICAgIGlmIChmdi0+b3B0aW1pemVf cmN0KSB7Ci0gICAgICAgIGVyciA9IGluaXRfcmN0X3NlYXJjaF9zaGFkZXIoYXZjdHgsIHNwdik7 Ci0gICAgICAgIGlmIChlcnIgPCAwKSB7Ci0gICAgICAgICAgICBzcHYtPnVuaW5pdCgmc3B2KTsK LSAgICAgICAgICAgIHJldHVybiBlcnI7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKiBJbml0 IHNldHVwIHNoYWRlciAqLwotICAgIGVyciA9IGluaXRfc2V0dXBfc2hhZGVyKGF2Y3R4LCBzcHYp OwotICAgIGlmIChlcnIgPCAwKSB7Ci0gICAgICAgIHNwdi0+dW5pbml0KCZzcHYpOwotICAgICAg ICByZXR1cm4gZXJyOwotICAgIH0KLQotICAgIC8qIEluaXQgcmVzZXQgc2hhZGVyICovCi0gICAg ZXJyID0gaW5pdF9yZXNldF9zaGFkZXIoYXZjdHgsIHNwdik7Ci0gICAgaWYgKGVyciA8IDApIHsK LSAgICAgICAgc3B2LT51bmluaXQoJnNwdik7Ci0gICAgICAgIHJldHVybiBlcnI7Ci0gICAgfQot Ci0gICAgaWYgKGZ2LT5pc19yZ2IpIHsKLSAgICAgICAgZW51bSBBVlBpeGVsRm9ybWF0IGludGVy bWVkaWF0ZV9mbXQgPSBnZXRfc3VwcG9ydGVkX3JnYl9idWZmZXJfZm10KGF2Y3R4KTsKLSAgICAg ICAgaWYgKGludGVybWVkaWF0ZV9mbXQgPT0gQVZfUElYX0ZNVF9OT05FKSB7Ci0gICAgICAgICAg ICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIlVuYWJsZSB0byBmaW5kIGEgc3VwcG9ydGVk IGNvbXBhdGlibGUgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJw aXhlbCBmb3JtYXQgZm9yIFJDVCBidWZmZXIhXG4iKTsKLSAgICAgICAgICAgIHJldHVybiBBVkVS Uk9SKEVOT1RTVVApOwotICAgICAgICB9Ci0KLSAgICAgICAgUkVUKGluaXRfaW5kaXJlY3QoYXZj dHgsIGludGVybWVkaWF0ZV9mbXQpKTsKLSAgICB9Ci0KLSAgICAvKiBFbmNvZGUgc2hhZGVyICov Ci0gICAgZXJyID0gaW5pdF9lbmNvZGVfc2hhZGVyKGF2Y3R4LCBzcHYpOwotICAgIGlmIChlcnIg PCAwKSB7Ci0gICAgICAgIHNwdi0+dW5pbml0KCZzcHYpOwotICAgICAgICByZXR1cm4gZXJyOwot ICAgIH0KLQotICAgIHNwdi0+dW5pbml0KCZzcHYpOwotCi0gICAgLyogUmFuZ2UgY29kZXIgZGF0 YSAqLwotICAgIGVyciA9IGZmX2ZmdjFfdmtfaW5pdF9zdGF0ZV90cmFuc2l0aW9uX2RhdGEoJmZ2 LT5zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZ2 LT5yYW5nZWNvZGVyX3N0YXRpY19idWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBmKTsKLSAgICBpZiAoZXJyIDwgMCkKLSAgICAgICAgcmV0dXJuIGVy cjsKLQotICAgIC8qIFF1YW50aXphdGlvbiB0YWJsZSBkYXRhICovCi0gICAgZXJyID0gZmZfZmZ2 MV92a19pbml0X3F1YW50X3RhYmxlX2RhdGEoJmZ2LT5zLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICZmdi0+cXVhbnRfYnVmLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGYpOwotICAgIGlmIChlcnIgPCAwKQotICAgICAgICBy ZXR1cm4gZXJyOwotCi0gICAgLyogQ1JDIHRhYmxlIGJ1ZmZlciAqLwotICAgIGVyciA9IGZmX2Zm djFfdmtfaW5pdF9jcmNfdGFibGVfZGF0YSgmZnYtPnMsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICZmdi0+Y3JjX3RhYl9idWYsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGYpOwotICAgIGlmIChlcnIgPCAwKQotICAgICAgICByZXR1 cm4gZXJyOwotCi0gICAgLyogVXBkYXRlIHNldHVwIGdsb2JhbCBkZXNjcmlwdG9ycyAqLwotICAg IFJFVChmZl92a19zaGFkZXJfdXBkYXRlX2Rlc2NfYnVmZmVyKCZmdi0+cywgJmZ2LT5leGVjX3Bv b2wuY29udGV4dHNbMF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg JmZ2LT5zZXR1cCwgMCwgMCwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAmZnYtPnJhbmdlY29kZXJfc3RhdGljX2J1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAwLCBmdi0+cmFuZ2Vjb2Rlcl9zdGF0aWNfYnVmLnNpemUsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfRk9STUFUX1VOREVGSU5FRCkp OwotCi0gICAgLyogVXBkYXRlIGVuY29kZSBnbG9iYWwgZGVzY3JpcHRvcnMgKi8KLSAgICBSRVQo ZmZfdmtfc2hhZGVyX3VwZGF0ZV9kZXNjX2J1ZmZlcigmZnYtPnMsICZmdi0+ZXhlY19wb29sLmNv bnRleHRzWzBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmdi0+ ZW5jLCAwLCAwLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZm di0+cmFuZ2Vjb2Rlcl9zdGF0aWNfYnVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDAsIGZ2LT5yYW5nZWNvZGVyX3N0YXRpY19idWYuc2l6ZSwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19GT1JNQVRfVU5ERUZJTkVEKSk7Ci0gICAg UkVUKGZmX3ZrX3NoYWRlcl91cGRhdGVfZGVzY19idWZmZXIoJmZ2LT5zLCAmZnYtPmV4ZWNfcG9v bC5jb250ZXh0c1swXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm ZnYtPmVuYywgMCwgMSwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAmZnYtPnF1YW50X2J1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAwLCBmdi0+cXVhbnRfYnVmLnNpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgVktfRk9STUFUX1VOREVGSU5FRCkpOwotICAgIFJFVChmZl92a19zaGFkZXJfdXBk YXRlX2Rlc2NfYnVmZmVyKCZmdi0+cywgJmZ2LT5leGVjX3Bvb2wuY29udGV4dHNbMF0sCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZ2LT5lbmMsIDAsIDIsIDAsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZ2LT5jcmNfdGFiX2J1ZiwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBmdi0+Y3JjX3RhYl9i dWYuc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19GT1JN QVRfVU5ERUZJTkVEKSk7Ci0KLSAgICAvKiBUZW1wb3JhcnkgZnJhbWUgKi8KLSAgICBmdi0+ZnJh bWUgPSBhdl9mcmFtZV9hbGxvYygpOwotICAgIGlmICghZnYtPmZyYW1lKQotICAgICAgICByZXR1 cm4gQVZFUlJPUihFTk9NRU0pOwotCi0gICAgLyogQXN5bmMgZGF0YSBwb29sICovCi0gICAgZnYt PmFzeW5jX2RlcHRoID0gZnYtPmV4ZWNfcG9vbC5wb29sX3NpemU7Ci0gICAgZnYtPmV4ZWNfY3R4 X2luZm8gPSBhdl9jYWxsb2MoZnYtPmFzeW5jX2RlcHRoLCBzaXplb2YoKmZ2LT5leGVjX2N0eF9p bmZvKSk7Ci0gICAgaWYgKCFmdi0+ZXhlY19jdHhfaW5mbykKLSAgICAgICAgcmV0dXJuIEFWRVJS T1IoRU5PTUVNKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGZ2LT5hc3luY19kZXB0aDsgaSsr KQotICAgICAgICBmdi0+ZXhlY19wb29sLmNvbnRleHRzW2ldLm9wYXF1ZSA9ICZmdi0+ZXhlY19j dHhfaW5mb1tpXTsKLQotICAgIGZ2LT5idWZfcmVnaW9ucyA9IGF2X21hbGxvY19hcnJheShmLT5t YXhfc2xpY2VfY291bnQsIHNpemVvZigqZnYtPmJ1Zl9yZWdpb25zKSk7Ci0gICAgaWYgKCFmdi0+ YnVmX3JlZ2lvbnMpCi0gICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7Ci0KLWZhaWw6Ci0g ICAgcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGF2X2NvbGQgaW50IHZ1bGthbl9lbmNvZGVfZmZ2 MV9jbG9zZShBVkNvZGVjQ29udGV4dCAqYXZjdHgpCi17Ci0gICAgVnVsa2FuRW5jb2RlRkZ2MUNv bnRleHQgKmZ2ID0gYXZjdHgtPnByaXZfZGF0YTsKLQotICAgIGZmX3ZrX2V4ZWNfcG9vbF9mcmVl KCZmdi0+cywgJmZ2LT5leGVjX3Bvb2wpOwotICAgIGZmX3ZrX2V4ZWNfcG9vbF9mcmVlKCZmdi0+ cywgJmZ2LT50cmFuc2Zlcl9leGVjX3Bvb2wpOwotCi0gICAgZmZfdmtfc2hhZGVyX2ZyZWUoJmZ2 LT5zLCAmZnYtPmVuYyk7Ci0gICAgZmZfdmtfc2hhZGVyX2ZyZWUoJmZ2LT5zLCAmZnYtPnJlc2V0 KTsKLSAgICBmZl92a19zaGFkZXJfZnJlZSgmZnYtPnMsICZmdi0+c2V0dXApOwotICAgIGZmX3Zr X3NoYWRlcl9mcmVlKCZmdi0+cywgJmZ2LT5yY3Rfc2VhcmNoKTsKLQotICAgIGlmIChmdi0+ZXhl Y19jdHhfaW5mbykgewotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGZ2LT5hc3luY19kZXB0 aDsgaSsrKSB7Ci0gICAgICAgICAgICBWdWxrYW5FbmNvZGVGRnYxRnJhbWVEYXRhICpmZCA9ICZm di0+ZXhlY19jdHhfaW5mb1tpXTsKLSAgICAgICAgICAgIGF2X2J1ZmZlcl91bnJlZigmZmQtPm91 dF9kYXRhX3JlZik7Ci0gICAgICAgICAgICBhdl9idWZmZXJfdW5yZWYoJmZkLT5yZXN1bHRzX2Rh dGFfcmVmKTsKLSAgICAgICAgICAgIGF2X2J1ZmZlcl91bnJlZigmZmQtPmZyYW1lX29wYXF1ZV9y ZWYpOwotICAgICAgICB9Ci0gICAgfQotICAgIGF2X2ZyZWUoZnYtPmV4ZWNfY3R4X2luZm8pOwot Ci0gICAgYXZfYnVmZmVyX3VucmVmKCZmdi0+aW50ZXJtZWRpYXRlX2ZyYW1lc19yZWYpOwotCi0g ICAgYXZfYnVmZmVyX3Bvb2xfdW5pbml0KCZmdi0+cmVzdWx0c19kYXRhX3Bvb2wpOwotCi0gICAg YXZfYnVmZmVyX3Bvb2xfdW5pbml0KCZmdi0+b3V0X2RhdGFfcG9vbCk7Ci0KLSAgICBhdl9idWZm ZXJfdW5yZWYoJmZ2LT5rZXlmcmFtZV9zbGljZV9kYXRhX3JlZik7Ci0gICAgYXZfYnVmZmVyX3Bv b2xfdW5pbml0KCZmdi0+c2xpY2VfZGF0YV9wb29sKTsKLQotICAgIGZmX3ZrX2ZyZWVfYnVmKCZm di0+cywgJmZ2LT5xdWFudF9idWYpOwotICAgIGZmX3ZrX2ZyZWVfYnVmKCZmdi0+cywgJmZ2LT5y YW5nZWNvZGVyX3N0YXRpY19idWYpOwotICAgIGZmX3ZrX2ZyZWVfYnVmKCZmdi0+cywgJmZ2LT5j cmNfdGFiX2J1Zik7Ci0KLSAgICBhdl9mcmVlKGZ2LT5idWZfcmVnaW9ucyk7Ci0gICAgYXZfZnJh bWVfZnJlZSgmZnYtPmZyYW1lKTsKLSAgICBmZl92a191bmluaXQoJmZ2LT5zKTsKLQotICAgIHJl dHVybiAwOwotfQotCi0jZGVmaW5lIE9GRlNFVCh4KSBvZmZzZXRvZihWdWxrYW5FbmNvZGVGRnYx Q29udGV4dCwgeCkKLSNkZWZpbmUgVkUgQVZfT1BUX0ZMQUdfVklERU9fUEFSQU0gfCBBVl9PUFRf RkxBR19FTkNPRElOR19QQVJBTQotc3RhdGljIGNvbnN0IEFWT3B0aW9uIHZ1bGthbl9lbmNvZGVf ZmZ2MV9vcHRpb25zW10gPSB7Ci0gICAgeyAic2xpY2VjcmMiLCAiUHJvdGVjdCBzbGljZXMgd2l0 aCBDUkNzIiwgT0ZGU0VUKGN0eC5lYyksIEFWX09QVF9UWVBFX0lOVCwKLSAgICAgICAgICAgIHsg Lmk2NCA9IC0xIH0sIC0xLCAyLCBWRSB9LAotICAgIHsgImNvbnRleHQiLCAiQ29udGV4dCBtb2Rl bCIsIE9GRlNFVChjdHguY29udGV4dF9tb2RlbCksIEFWX09QVF9UWVBFX0lOVCwKLSAgICAgICAg ICAgIHsgLmk2NCA9IDAgfSwgMCwgMSwgVkUgfSwKLSAgICB7ICJjb2RlciIsICJDb2RlciB0eXBl IiwgT0ZGU0VUKGN0eC5hYyksIEFWX09QVF9UWVBFX0lOVCwKLSAgICAgICAgICAgIHsgLmk2NCA9 IEFDX1JBTkdFX0NVU1RPTV9UQUIgfSwgLTIsIDIsIFZFLCAudW5pdCA9ICJjb2RlciIgfSwKLSAg ICAgICAgeyAicmljZSIsICJHb2xvbWIgcmljZSIsIDAsIEFWX09QVF9UWVBFX0NPTlNULAotICAg ICAgICAgICAgeyAuaTY0ID0gQUNfR09MT01CX1JJQ0UgfSwgSU5UX01JTiwgSU5UX01BWCwgVkUs IC51bml0ID0gImNvZGVyIiB9LAotICAgICAgICB7ICJyYW5nZV9kZWYiLCAiUmFuZ2Ugd2l0aCBk ZWZhdWx0IHRhYmxlIiwgMCwgQVZfT1BUX1RZUEVfQ09OU1QsCi0gICAgICAgICAgICB7IC5pNjQg PSBBQ19SQU5HRV9ERUZBVUxUX1RBQl9GT1JDRSB9LCBJTlRfTUlOLCBJTlRfTUFYLCBWRSwgLnVu aXQgPSAiY29kZXIiIH0sCi0gICAgICAgIHsgInJhbmdlX3RhYiIsICJSYW5nZSB3aXRoIGN1c3Rv bSB0YWJsZSIsIDAsIEFWX09QVF9UWVBFX0NPTlNULAotICAgICAgICAgICAgeyAuaTY0ID0gQUNf UkFOR0VfQ1VTVE9NX1RBQiB9LCBJTlRfTUlOLCBJTlRfTUFYLCBWRSwgLnVuaXQgPSAiY29kZXIi IH0sCi0gICAgeyAicXRhYmxlIiwgIlF1YW50aXphdGlvbiB0YWJsZSIsIE9GRlNFVChjdHgucXRh YmxlKSwgQVZfT1BUX1RZUEVfSU5ULAotICAgICAgICAgICAgeyAuaTY0ID0gLTEgfSwgLTEsIDIs IFZFICwgLnVuaXQgPSAicXRhYmxlIn0sCi0gICAgICAgIHsgImRlZmF1bHQiLCBOVUxMLCAwLCBB Vl9PUFRfVFlQRV9DT05TVCwKLSAgICAgICAgICAgIHsgLmk2NCA9IFFUQUJMRV9ERUZBVUxUIH0s IElOVF9NSU4sIElOVF9NQVgsIFZFLCAudW5pdCA9ICJxdGFibGUiIH0sCi0gICAgICAgIHsgIjhi aXQiLCBOVUxMLCAwLCBBVl9PUFRfVFlQRV9DT05TVCwKLSAgICAgICAgICAgIHsgLmk2NCA9IFFU QUJMRV84QklUIH0sIElOVF9NSU4sIElOVF9NQVgsIFZFLCAudW5pdCA9ICJxdGFibGUiIH0sCi0g ICAgICAgIHsgImdyZWF0ZXI4Yml0IiwgTlVMTCwgMCwgQVZfT1BUX1RZUEVfQ09OU1QsCi0gICAg ICAgICAgICB7IC5pNjQgPSBRVEFCTEVfR1Q4QklUIH0sIElOVF9NSU4sIElOVF9NQVgsIFZFLCAu dW5pdCA9ICJxdGFibGUiIH0sCi0KLSAgICB7ICJzbGljZXNfaCIsICJOdW1iZXIgb2YgaG9yaXpv bnRhbCBzbGljZXMiLCBPRkZTRVQobnVtX2hfc2xpY2VzKSwgQVZfT1BUX1RZUEVfSU5ULAotICAg ICAgICAgICAgeyAuaTY0ID0gLTEgfSwgLTEsIE1BWF9TTElDRVMsIFZFIH0sCi0gICAgeyAic2xp Y2VzX3YiLCAiTnVtYmVyIG9mIHZlcnRpY2FsIHNsaWNlcyIsIE9GRlNFVChudW1fdl9zbGljZXMp LCBBVl9PUFRfVFlQRV9JTlQsCi0gICAgICAgICAgICB7IC5pNjQgPSAtMSB9LCAtMSwgTUFYX1NM SUNFUywgVkUgfSwKLQotICAgIHsgImZvcmNlX3BjbSIsICJDb2RlIGFsbCBzbGljZXMgd2l0aCBu byBwcmVkaWN0aW9uIiwgT0ZGU0VUKGZvcmNlX3BjbSksIEFWX09QVF9UWVBFX0JPT0wsCi0gICAg ICAgICAgICB7IC5pNjQgPSAwIH0sIDAsIDEsIFZFIH0sCi0KLSAgICB7ICJyY3Rfc2VhcmNoIiwg IlJ1biBhIHNlYXJjaCBmb3IgUkNUIHBhcmFtZXRlcnMgKGxldmVsIDQgb25seSkiLCBPRkZTRVQo b3B0aW1pemVfcmN0KSwgQVZfT1BUX1RZUEVfQk9PTCwKLSAgICAgICAgICAgIHsgLmk2NCA9IDEg fSwgMCwgMSwgVkUgfSwKLQotICAgIHsgImFzeW5jX2RlcHRoIiwgIkludGVybmFsIHBhcmFsbGVs aXphdGlvbiBkZXB0aCIsIE9GRlNFVChhc3luY19kZXB0aCksIEFWX09QVF9UWVBFX0lOVCwKLSAg ICAgICAgICAgIHsgLmk2NCA9IDEgfSwgMSwgSU5UX01BWCwgVkUgfSwKLQotICAgIHsgTlVMTCB9 Ci19OwotCi1zdGF0aWMgY29uc3QgRkZDb2RlY0RlZmF1bHQgdnVsa2FuX2VuY29kZV9mZnYxX2Rl ZmF1bHRzW10gPSB7Ci0gICAgeyAiZyIsICIxIiB9LAotICAgIHsgTlVMTCB9LAotfTsKLQotc3Rh dGljIGNvbnN0IEFWQ2xhc3MgdnVsa2FuX2VuY29kZV9mZnYxX2NsYXNzID0gewotICAgIC5jbGFz c19uYW1lID0gImZmdjFfdnVsa2FuIiwKLSAgICAuaXRlbV9uYW1lICA9IGF2X2RlZmF1bHRfaXRl bV9uYW1lLAotICAgIC5vcHRpb24gICAgID0gdnVsa2FuX2VuY29kZV9mZnYxX29wdGlvbnMsCi0g ICAgLnZlcnNpb24gICAgPSBMSUJBVlVUSUxfVkVSU0lPTl9JTlQsCi19OwotCi1jb25zdCBBVkNv ZGVjSFdDb25maWdJbnRlcm5hbCAqY29uc3QgdnVsa2FuX2VuY29kZV9mZnYxX2h3X2NvbmZpZ3Nb XSA9IHsKLSAgICBIV19DT05GSUdfRU5DT0RFUl9GUkFNRVMoVlVMS0FOLCBWVUxLQU4pLAotICAg IE5VTEwsCi19OwotCi1jb25zdCBGRkNvZGVjIGZmX2ZmdjFfdnVsa2FuX2VuY29kZXIgPSB7Ci0g ICAgLnAubmFtZSAgICAgICAgID0gImZmdjFfdnVsa2FuIiwKLSAgICBDT0RFQ19MT05HX05BTUUo IkZGbXBlZyB2aWRlbyBjb2RlYyAjMSAoVnVsa2FuKSIpLAotICAgIC5wLnR5cGUgICAgICAgICA9 IEFWTUVESUFfVFlQRV9WSURFTywKLSAgICAucC5pZCAgICAgICAgICAgPSBBVl9DT0RFQ19JRF9G RlYxLAotICAgIC5wcml2X2RhdGFfc2l6ZSA9IHNpemVvZihWdWxrYW5FbmNvZGVGRnYxQ29udGV4 dCksCi0gICAgLmluaXQgICAgICAgICAgID0gJnZ1bGthbl9lbmNvZGVfZmZ2MV9pbml0LAotICAg IEZGX0NPREVDX1JFQ0VJVkVfUEFDS0VUX0NCKCZ2dWxrYW5fZW5jb2RlX2ZmdjFfcmVjZWl2ZV9w YWNrZXQpLAotICAgIC5jbG9zZSAgICAgICAgICA9ICZ2dWxrYW5fZW5jb2RlX2ZmdjFfY2xvc2Us Ci0gICAgLnAucHJpdl9jbGFzcyAgID0gJnZ1bGthbl9lbmNvZGVfZmZ2MV9jbGFzcywKLSAgICAu cC5jYXBhYmlsaXRpZXMgPSBBVl9DT0RFQ19DQVBfREVMQVkgfAotICAgICAgICAgICAgICAgICAg ICAgIEFWX0NPREVDX0NBUF9IQVJEV0FSRSB8Ci0gICAgICAgICAgICAgICAgICAgICAgQVZfQ09E RUNfQ0FQX0RSMSB8Ci0gICAgICAgICAgICAgICAgICAgICAgQVZfQ09ERUNfQ0FQX0VOQ09ERVJf RkxVU0ggfAotICAgICAgICAgICAgICAgICAgICAgIEFWX0NPREVDX0NBUF9FTkNPREVSX1JFT1JE RVJFRF9PUEFRVUUsCi0gICAgLmNhcHNfaW50ZXJuYWwgID0gRkZfQ09ERUNfQ0FQX0lOSVRfQ0xF QU5VUCB8IEZGX0NPREVDX0NBUF9FT0ZfRkxVU0gsCi0gICAgLmRlZmF1bHRzICAgICAgID0gdnVs a2FuX2VuY29kZV9mZnYxX2RlZmF1bHRzLAotICAgIENPREVDX1BJWEZNVFMoQVZfUElYX0ZNVF9W VUxLQU4pLAotICAgIC5od19jb25maWdzICAgICA9IHZ1bGthbl9lbmNvZGVfZmZ2MV9od19jb25m aWdzLAotICAgIC5wLndyYXBwZXJfbmFtZSA9ICJ2dWxrYW4iLAotfTsKLS0gCjIuNDkuMQoKCkZy b20gZDM3NjdjMGZjYzg3ZGVjOWE0NjcwNzFmNWFlMzNjZWVlYzMwNzgwZiBNb24gU2VwIDE3IDAw OjAwOjAwIDIwMDEKRnJvbTogSmFtYWlrYTEgPGx1a2FzemN6MThAd3AucGw+CkRhdGU6IFdlZCwg MyBTZXAgMjAyNSAxMzoyNTo1MyArMDAwMApTdWJqZWN0OiBbUEFUQ0ggMDYwLzExOF0gQ2hhbmdp bmcgdnVsa2FuIGZpbGUgZGlyZWN0b3J5CgotLS0KIGxpYmF2Y29kZWMvdnVsa2FuL2ZmdjFlbmNf dnVsa2FuLmMgfCAxODQ4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDEgZmlsZSBjaGFu Z2VkLCAxODQ4IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJhdmNvZGVjL3Z1 bGthbi9mZnYxZW5jX3Z1bGthbi5jCgpkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy92dWxrYW4vZmZ2 MWVuY192dWxrYW4uYyBiL2xpYmF2Y29kZWMvdnVsa2FuL2ZmdjFlbmNfdnVsa2FuLmMKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uODgzYWQ3NWQ5YgotLS0gL2Rldi9udWxs CisrKyBiL2xpYmF2Y29kZWMvdnVsa2FuL2ZmdjFlbmNfdnVsa2FuLmMKQEAgLTAsMCArMSwxODQ4 IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDI0IEx5bm5lIDxkZXZAbHlubmUuZWU+CisgKgor ICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgorICoKKyAqIEZGbXBlZyBpcyBmcmVlIHNv ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog dmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy IHZlcnNpb24uCisgKgorICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICog TGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0 d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v ciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorICovCisKKyNpbmNsdWRlICJsaWJhdnV0aWwv bWVtLmgiCisjaW5jbHVkZSAiLi4vLi4vbGliYXZ1dGlsL3Z1bGthbi92dWxrYW4uaCIKKyNpbmNs dWRlICIuLi8uLi9saWJhdnV0aWwvdnVsa2FuL3Z1bGthbl9zcGlydi5oIgorCisjaW5jbHVkZSAi bGliYXZjb2RlYy9hdmNvZGVjLmgiCisjaW5jbHVkZSAibGliYXZjb2RlYy9pbnRlcm5hbC5oIgor I2luY2x1ZGUgImxpYmF2Y29kZWMvaHdjb25maWcuaCIKKyNpbmNsdWRlICJsaWJhdmNvZGVjL2Vu Y29kZS5oIgorI2luY2x1ZGUgImxpYmF2dXRpbC9vcHQuaCIKKyNpbmNsdWRlICJsaWJhdmNvZGVj L2NvZGVjX2ludGVybmFsLmgiCisKKyNpbmNsdWRlICJsaWJhdmNvZGVjL2ZmdjEuaCIKKyNpbmNs dWRlICJsaWJhdmNvZGVjL2ZmdjFlbmMuaCIKKyNpbmNsdWRlICJmZnYxX3Z1bGthbi5oIgorCisv KiBQYXJhbGxlbCBHb2xvbWIgYWxpZ25tZW50ICovCisjZGVmaW5lIExHX0FMSUdOX1cgMzIKKyNk ZWZpbmUgTEdfQUxJR05fSCAzMgorCisvKiBVbmxpa2UgdGhlIGRlY29kZXIsIHdlIG5lZWQgNCBs aW5lcyAoYnV0IHJlYWxseSBvbmx5IDMpICovCisjZGVmaW5lIFJHQl9MSU5FQ0FDSEUgNAorCit0 eXBlZGVmIHN0cnVjdCBWdWxrYW5FbmNvZGVGRnYxRnJhbWVEYXRhIHsKKyAgICAvKiBPdXRwdXQg ZGF0YSAqLworICAgIEFWQnVmZmVyUmVmICpvdXRfZGF0YV9yZWY7CisKKyAgICAvKiBSZXN1bHRz IGRhdGEgKi8KKyAgICBBVkJ1ZmZlclJlZiAqcmVzdWx0c19kYXRhX3JlZjsKKworICAgIC8qIENv cGllZCBmcm9tIHRoZSBzb3VyY2UgKi8KKyAgICBpbnQ2NF90IHB0czsKKyAgICBpbnQ2NF90IGR1 cmF0aW9uOworICAgIHZvaWQgICAgICAgICpmcmFtZV9vcGFxdWU7CisgICAgQVZCdWZmZXJSZWYg KmZyYW1lX29wYXF1ZV9yZWY7CisKKyAgICBpbnQga2V5X2ZyYW1lOworfSBWdWxrYW5FbmNvZGVG RnYxRnJhbWVEYXRhOworCit0eXBlZGVmIHN0cnVjdCBWdWxrYW5FbmNvZGVGRnYxQ29udGV4dCB7 CisgICAgRkZWMUNvbnRleHQgY3R4OworICAgIEFWRnJhbWUgKmZyYW1lOworCisgICAgRkZWdWxr YW5Db250ZXh0IHM7CisgICAgQVZWdWxrYW5EZXZpY2VRdWV1ZUZhbWlseSAqcWY7CisgICAgRkZW a0V4ZWNQb29sIGV4ZWNfcG9vbDsKKworICAgIEFWVnVsa2FuRGV2aWNlUXVldWVGYW1pbHkgKnRy YW5zZmVyX3FmOworICAgIEZGVmtFeGVjUG9vbCB0cmFuc2Zlcl9leGVjX3Bvb2w7CisKKyAgICBW a0J1ZmZlckNvcHkgKmJ1Zl9yZWdpb25zOworICAgIFZ1bGthbkVuY29kZUZGdjFGcmFtZURhdGEg KmV4ZWNfY3R4X2luZm87CisgICAgaW50IGluX2ZsaWdodDsKKyAgICBpbnQgYXN5bmNfZGVwdGg7 CisgICAgc2l6ZV90IG1heF9oZWFwX3NpemU7CisKKyAgICBGRlZ1bGthblNoYWRlciBzZXR1cDsK KyAgICBGRlZ1bGthblNoYWRlciByY3Rfc2VhcmNoOworICAgIEZGVnVsa2FuU2hhZGVyIHJlc2V0 OworICAgIEZGVnVsa2FuU2hhZGVyIGVuYzsKKworICAgIC8qIENvbnN0YW50IHJlYWQtb25seSBi dWZmZXJzICovCisgICAgRkZWa0J1ZmZlciBxdWFudF9idWY7CisgICAgRkZWa0J1ZmZlciByYW5n ZWNvZGVyX3N0YXRpY19idWY7CisgICAgRkZWa0J1ZmZlciBjcmNfdGFiX2J1ZjsKKworICAgIC8q IFNsaWNlIGRhdGEgYnVmZmVyIHBvb2wgKi8KKyAgICBBVkJ1ZmZlclBvb2wgKnNsaWNlX2RhdGFf cG9vbDsKKyAgICBBVkJ1ZmZlclJlZiAqa2V5ZnJhbWVfc2xpY2VfZGF0YV9yZWY7CisKKyAgICAv KiBPdXRwdXQgZGF0YSBidWZmZXIgKi8KKyAgICBBVkJ1ZmZlclBvb2wgKm91dF9kYXRhX3Bvb2w7 CisKKyAgICAvKiBTbGljZSByZXN1bHRzIGJ1ZmZlciAqLworICAgIEFWQnVmZmVyUG9vbCAqcmVz dWx0c19kYXRhX3Bvb2w7CisKKyAgICAvKiBJbnRlcm1lZGlhdGUgZnJhbWUgcG9vbCAqLworICAg IEFWQnVmZmVyUmVmICppbnRlcm1lZGlhdGVfZnJhbWVzX3JlZjsKKworICAgIC8qIFJlcHJlc2Vu dGF0aW9uIG1vZGUgKi8KKyAgICBlbnVtIEZGVmtTaGFkZXJSZXBGb3JtYXQgcmVwX2ZtdDsKKwor ICAgIGludCBudW1faF9zbGljZXM7CisgICAgaW50IG51bV92X3NsaWNlczsKKyAgICBpbnQgZm9y Y2VfcGNtOworICAgIGludCBvcHRpbWl6ZV9yY3Q7CisKKyAgICBpbnQgaXNfcmdiOworICAgIGlu dCBwcGk7CisgICAgaW50IGNodW5rczsKK30gVnVsa2FuRW5jb2RlRkZ2MUNvbnRleHQ7CisKK2V4 dGVybiBjb25zdCBjaGFyICpmZl9zb3VyY2VfY29tbW9uX2NvbXA7CitleHRlcm4gY29uc3QgY2hh ciAqZmZfc291cmNlX3JhbmdlY29kZXJfY29tcDsKK2V4dGVybiBjb25zdCBjaGFyICpmZl9zb3Vy Y2VfZmZ2MV92bGNfY29tcDsKK2V4dGVybiBjb25zdCBjaGFyICpmZl9zb3VyY2VfZmZ2MV9jb21t b25fY29tcDsKK2V4dGVybiBjb25zdCBjaGFyICpmZl9zb3VyY2VfZmZ2MV9yZXNldF9jb21wOwor ZXh0ZXJuIGNvbnN0IGNoYXIgKmZmX3NvdXJjZV9mZnYxX3JjdF9zZWFyY2hfY29tcDsKK2V4dGVy biBjb25zdCBjaGFyICpmZl9zb3VyY2VfZmZ2MV9lbmNfc2V0dXBfY29tcDsKK2V4dGVybiBjb25z dCBjaGFyICpmZl9zb3VyY2VfZmZ2MV9lbmNfY29tcDsKKwordHlwZWRlZiBzdHJ1Y3QgRkZ2MVZr UGFyYW1ldGVycyB7CisgICAgVmtEZXZpY2VBZGRyZXNzIHNsaWNlX3N0YXRlOworICAgIFZrRGV2 aWNlQWRkcmVzcyBzY3JhdGNoX2RhdGE7CisgICAgVmtEZXZpY2VBZGRyZXNzIG91dF9kYXRhOwor CisgICAgaW50MzJfdCBmbXRfbHV0WzRdOworICAgIGludDMyX3Qgc2FyWzJdOworICAgIHVpbnQz Ml90IGNocm9tYV9zaGlmdFsyXTsKKworICAgIHVpbnQzMl90IHBsYW5lX3N0YXRlX3NpemU7Cisg ICAgdWludDMyX3QgY29udGV4dF9jb3VudDsKKyAgICB1aW50MzJfdCBjcmNyZWY7CisgICAgdWlu dDMyX3Qgc2xpY2Vfc2l6ZV9tYXg7CisgICAgaW50ICAgICAgcmN0X29mZnNldDsKKworICAgIHVp bnQ4X3QgZXh0ZW5kX2xvb2t1cFs4XTsKKyAgICB1aW50OF90IGJpdHNfcGVyX3Jhd19zYW1wbGU7 CisgICAgdWludDhfdCBjb250ZXh0X21vZGVsOworICAgIHVpbnQ4X3QgdmVyc2lvbjsKKyAgICB1 aW50OF90IG1pY3JvX3ZlcnNpb247CisgICAgdWludDhfdCBmb3JjZV9wY207CisgICAgdWludDhf dCBrZXlfZnJhbWU7CisgICAgdWludDhfdCBjb21wb25lbnRzOworICAgIHVpbnQ4X3QgcGxhbmVz OworICAgIHVpbnQ4X3QgY29kZWNfcGxhbmVzOworICAgIHVpbnQ4X3QgcGxhbmFyX3JnYjsKKyAg ICB1aW50OF90IHRyYW5zcGFyZW5jeTsKKyAgICB1aW50OF90IGNvbG9yc3BhY2U7CisgICAgdWlu dDhfdCBwaWNfbW9kZTsKKyAgICB1aW50OF90IGVjOworICAgIHVpbnQ4X3QgcHBpOworICAgIHVp bnQ4X3QgY2h1bmtzOworICAgIHVpbnQ4X3QgcmN0X3NlYXJjaDsKKyAgICB1aW50OF90IHBhZGRp bmdbM107Cit9IEZGdjFWa1BhcmFtZXRlcnM7CisKK3N0YXRpYyB2b2lkIGFkZF9wdXNoX2RhdGEo RkZWdWxrYW5TaGFkZXIgKnNoZCkKK3sKKyAgICBHTFNMQygwLCBsYXlvdXQocHVzaF9jb25zdGFu dCwgc2NhbGFyKSB1bmlmb3JtIHB1c2hDb25zdGFudHMgeyAgICAgICAgICAgICk7CisgICAgR0xT TEMoMSwgICAgdThidWYgc2xpY2Vfc3RhdGU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICApOworICAgIEdMU0xDKDEsICAgIHU4YnVmIHNjcmF0Y2hfZGF0YTsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBHTFNMQygxLCAg ICB1OGJ1ZiBvdXRfZGF0YTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICk7CisgICAgR0xTTEMoMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgIEdMU0xDKDEsICAgIGl2ZWM0 IGZtdF9sdXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KTsKKyAgICBHTFNMQygxLCAgICBpdmVjMiBzYXI7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgR0xTTEMoMSwgICAgdXZlYzIgY2hyb21h X3NoaWZ0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAg IEdMU0xDKDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKTsKKyAgICBHTFNMQygxLCAgICB1aW50IHBsYW5lX3N0YXRlX3Np emU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgR0xTTEMo MSwgICAgdWludCBjb250ZXh0X2NvdW50OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICApOworICAgIEdMU0xDKDEsICAgIHVpbnQzMl90IGNyY3JlZjsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBHTFNMQygxLCAgICB1 aW50MzJfdCBzbGljZV9zaXplX21heDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICk7CisgICAgR0xTTEMoMSwgICAgaW50IHJjdF9vZmZzZXQ7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgIEdMU0xDKDAsICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsK KyAgICBHTFNMQygxLCAgICB1aW50OF90IGV4dGVuZF9sb29rdXBbOF07ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgR0xTTEMoMSwgICAgdWludDhfdCBiaXRzX3Bl cl9yYXdfc2FtcGxlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgIEdM U0xDKDEsICAgIHVpbnQ4X3QgY29udGV4dF9tb2RlbDsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKTsKKyAgICBHTFNMQygxLCAgICB1aW50OF90IHZlcnNpb247ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgR0xTTEMoMSwg ICAgdWludDhfdCBtaWNyb192ZXJzaW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICApOworICAgIEdMU0xDKDEsICAgIHVpbnQ4X3QgZm9yY2VfcGNtOyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBHTFNMQygxLCAgICB1aW50 OF90IGtleV9mcmFtZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICk7CisgICAgR0xTTEMoMSwgICAgdWludDhfdCBjb21wb25lbnRzOyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgIEdMU0xDKDEsICAgIHVpbnQ4X3QgcGxh bmVzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAg ICBHTFNMQygxLCAgICB1aW50OF90IGNvZGVjX3BsYW5lczsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICk7CisgICAgR0xTTEMoMSwgICAgdWludDhfdCBwbGFuYXJfcmdi OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgIEdMU0xD KDEsICAgIHVpbnQ4X3QgdHJhbnNwYXJlbmN5OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKTsKKyAgICBHTFNMQygxLCAgICB1aW50OF90IGNvbG9yc3BhY2U7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgR0xTTEMoMSwgICAg dWludDhfdCBwaWNfbW9kZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICApOworICAgIEdMU0xDKDEsICAgIHVpbnQ4X3QgZWM7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBHTFNMQygxLCAgICB1aW50OF90 IHBwaTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7 CisgICAgR0xTTEMoMSwgICAgdWludDhfdCBjaHVua3M7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICApOworICAgIEdMU0xDKDEsICAgIHVpbnQ4X3QgcmN0X3Nl YXJjaDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBH TFNMQygxLCAgICB1aW50OF90IHBhZGRpbmdbM107ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICk7CisgICAgR0xTTEMoMCwgfTsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgIGZmX3ZrX3No YWRlcl9hZGRfcHVzaF9jb25zdChzaGQsIDAsIHNpemVvZihGRnYxVmtQYXJhbWV0ZXJzKSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfU0hBREVSX1NUQUdFX0NPTVBVVEVfQklU KTsKK30KKwordHlwZWRlZiBzdHJ1Y3QgRkZ2MVZrUkNUU2VhcmNoUGFyYW1ldGVycyB7CisgICAg aW50IGZtdF9sdXRbNF07CisgICAgaW50IHJjdF9vZmZzZXQ7CisgICAgdWludDhfdCBwbGFuYXJf cmdiOworICAgIHVpbnQ4X3QgdHJhbnNwYXJlbmN5OworICAgIHVpbnQ4X3Qga2V5X2ZyYW1lOwor ICAgIHVpbnQ4X3QgZm9yY2VfcGNtOworICAgIHVpbnQ4X3QgdmVyc2lvbjsKKyAgICB1aW50OF90 IG1pY3JvX3ZlcnNpb247CisgICAgdWludDhfdCBwYWRkaW5nWzJdOworfSBGRnYxVmtSQ1RTZWFy Y2hQYXJhbWV0ZXJzOworCitzdGF0aWMgaW50IHJ1bl9yY3Rfc2VhcmNoKEFWQ29kZWNDb250ZXh0 ICphdmN0eCwgRkZWa0V4ZWNDb250ZXh0ICpleGVjLAorICAgICAgICAgICAgICAgICAgICAgICAg ICBBVkZyYW1lICplbmNfaW4sIFZrSW1hZ2VWaWV3ICplbmNfaW5fdmlld3MsCisgICAgICAgICAg ICAgICAgICAgICAgICAgIEZGVmtCdWZmZXIgKnNsaWNlX2RhdGFfYnVmLCB1aW50MzJfdCBzbGlj ZV9kYXRhX3NpemUpCit7CisgICAgVnVsa2FuRW5jb2RlRkZ2MUNvbnRleHQgKmZ2ID0gYXZjdHgt PnByaXZfZGF0YTsKKyAgICBGRlYxQ29udGV4dCAqZiA9ICZmdi0+Y3R4OworICAgIEZGVnVsa2Fu RnVuY3Rpb25zICp2ayA9ICZmdi0+cy52a2ZuOworICAgIEFWSFdGcmFtZXNDb250ZXh0ICpzcmNf aHdmYyA9IChBVkhXRnJhbWVzQ29udGV4dCAqKWVuY19pbi0+aHdfZnJhbWVzX2N0eC0+ZGF0YTsK KyAgICBGRnYxVmtSQ1RTZWFyY2hQYXJhbWV0ZXJzIHBkOworCisgICAgLyogVXBkYXRlIGRlc2Ny aXB0b3JzICovCisgICAgZmZfdmtfc2hhZGVyX3VwZGF0ZV9kZXNjX2J1ZmZlcigmZnYtPnMsIGV4 ZWMsICZmdi0+cmN0X3NlYXJjaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDAsIDAsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGljZV9kYXRh X2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIHNsaWNlX2RhdGFf c2l6ZSpmLT5zbGljZV9jb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFZLX0ZPUk1BVF9VTkRFRklORUQpOworICAgIGZmX3ZrX3NoYWRlcl91cGRhdGVfaW1nX2FycmF5 KCZmdi0+cywgZXhlYywgJmZ2LT5yY3Rfc2VhcmNoLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGVuY19pbiwgZW5jX2luX3ZpZXdzLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDAsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfSU1B R0VfTEFZT1VUX0dFTkVSQUwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktf TlVMTF9IQU5ETEUpOworCisgICAgZmZfdmtfZXhlY19iaW5kX3NoYWRlcigmZnYtPnMsIGV4ZWMs ICZmdi0+cmN0X3NlYXJjaCk7CisKKyAgICBwZCA9IChGRnYxVmtSQ1RTZWFyY2hQYXJhbWV0ZXJz KSB7CisgICAgICAgIC5yY3Rfb2Zmc2V0ID0gMSA8PCBmLT5iaXRzX3Blcl9yYXdfc2FtcGxlLAor ICAgICAgICAucGxhbmFyX3JnYiA9IGZmX3ZrX210X2lzX25wX3JnYihzcmNfaHdmYy0+c3dfZm9y bWF0KSAmJgorICAgICAgICAgICAgICAgICAgICAgIChmZl92a19jb3VudF9pbWFnZXMoKEFWVmtG cmFtZSAqKWVuY19pbi0+ZGF0YVswXSkgPiAxKSwKKyAgICAgICAgLnRyYW5zcGFyZW5jeSA9IGYt PnRyYW5zcGFyZW5jeSwKKyAgICAgICAgLmtleV9mcmFtZSA9IGYtPmtleV9mcmFtZSwKKyAgICAg ICAgLmZvcmNlX3BjbSA9IGZ2LT5mb3JjZV9wY20sCisgICAgICAgIC52ZXJzaW9uID0gZi0+dmVy c2lvbiwKKyAgICAgICAgLm1pY3JvX3ZlcnNpb24gPSBmLT5taWNyb192ZXJzaW9uLAorICAgIH07 CisKKyAgICBpZiAoYXZjdHgtPnN3X3BpeF9mbXQgPT0gQVZfUElYX0ZNVF9HQlJQMTAgfHwKKyAg ICAgICAgYXZjdHgtPnN3X3BpeF9mbXQgPT0gQVZfUElYX0ZNVF9HQlJQMTIgfHwKKyAgICAgICAg YXZjdHgtPnN3X3BpeF9mbXQgPT0gQVZfUElYX0ZNVF9HQlJQMTQpCisgICAgICAgIG1lbWNweShw ZC5mbXRfbHV0LCAoaW50IFs0XSkgeyAyLCAxLCAwLCAzIH0sIDQqc2l6ZW9mKGludCkpOworICAg IGVsc2UKKyAgICAgICAgZmZfdmtfc2V0X3Blcm0oYXZjdHgtPnN3X3BpeF9mbXQsIHBkLmZtdF9s dXQsIDEpOworCisgICAgZmZfdmtfc2hhZGVyX3VwZGF0ZV9wdXNoX2NvbnN0KCZmdi0+cywgZXhl YywgJmZ2LT5yY3Rfc2VhcmNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBW S19TSEFERVJfU1RBR0VfQ09NUFVURV9CSVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDAsIHNpemVvZihwZCksICZwZCk7CisKKyAgICB2ay0+Q21kRGlzcGF0Y2goZXhlYy0+ YnVmLCBmdi0+Y3R4Lm51bV9oX3NsaWNlcywgZnYtPmN0eC5udW1fdl9zbGljZXMsIDEpOworCisg ICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdnVsa2FuX2VuY29kZV9mZnYxX3N1Ym1pdF9m cmFtZShBVkNvZGVjQ29udGV4dCAqYXZjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgRkZWa0V4ZWNDb250ZXh0ICpleGVjLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFWRnJhbWUgKnBpY3QpCit7CisgICAgaW50 IGVycjsKKyAgICBWdWxrYW5FbmNvZGVGRnYxQ29udGV4dCAqZnYgPSBhdmN0eC0+cHJpdl9kYXRh OworICAgIEZGVjFDb250ZXh0ICpmID0gJmZ2LT5jdHg7CisgICAgRkZWdWxrYW5GdW5jdGlvbnMg KnZrID0gJmZ2LT5zLnZrZm47CisKKyAgICBWdWxrYW5FbmNvZGVGRnYxRnJhbWVEYXRhICpmZCA9 IGV4ZWMtPm9wYXF1ZTsKKyAgICBGRnYxVmtQYXJhbWV0ZXJzIHBkOworCisgICAgLyogU2xpY2Ug ZGF0YSAqLworICAgIEFWQnVmZmVyUmVmICpzbGljZV9kYXRhX3JlZjsKKyAgICBGRlZrQnVmZmVy ICpzbGljZV9kYXRhX2J1ZjsKKyAgICB1aW50MzJfdCBwbGFuZV9zdGF0ZV9zaXplOworICAgIHVp bnQzMl90IHNsaWNlX3N0YXRlX3NpemU7CisgICAgdWludDMyX3Qgc2xpY2VfZGF0YV9zaXplOwor CisgICAgLyogT3V0cHV0IGRhdGEgKi8KKyAgICBzaXplX3QgbWF4c2l6ZTsKKyAgICBGRlZrQnVm ZmVyICpvdXRfZGF0YV9idWY7CisKKyAgICAvKiBSZXN1bHRzIGRhdGEgKi8KKyAgICBGRlZrQnVm ZmVyICpyZXN1bHRzX2RhdGFfYnVmOworCisgICAgaW50IGhhc19pbnRlciA9IGF2Y3R4LT5nb3Bf c2l6ZSA+IDE7CisgICAgdWludDMyX3QgY29udGV4dF9jb3VudCA9IGYtPmNvbnRleHRfY291bnRb Zi0+Y29udGV4dF9tb2RlbF07CisgICAgY29uc3QgQVZQaXhGbXREZXNjcmlwdG9yICpmbXRfZGVz YyA9IGF2X3BpeF9mbXRfZGVzY19nZXQoYXZjdHgtPnN3X3BpeF9mbXQpOworCisgICAgQVZGcmFt ZSAqc3JjID0gKEFWRnJhbWUgKilwaWN0OworICAgIFZrSW1hZ2VWaWV3IHNyY192aWV3c1tBVl9O VU1fREFUQV9QT0lOVEVSU107CisKKyAgICBBVkZyYW1lICp0bXAgPSBOVUxMOworICAgIFZrSW1h Z2VWaWV3IHRtcF92aWV3c1tBVl9OVU1fREFUQV9QT0lOVEVSU107CisKKyAgICBWa0ltYWdlTWVt b3J5QmFycmllcjIgaW1nX2JhclszN107CisgICAgaW50IG5iX2ltZ19iYXIgPSAwOworICAgIFZr QnVmZmVyTWVtb3J5QmFycmllcjIgYnVmX2Jhcls4XTsKKyAgICBpbnQgbmJfYnVmX2JhciA9IDA7 CisKKyAgICAvKiBTdGFydCByZWNvcmRpbmcgKi8KKyAgICBmZl92a19leGVjX3N0YXJ0KCZmdi0+ cywgZXhlYyk7CisKKyAgICAvKiBGcmFtZSBzdGF0ZSAqLworICAgIGYtPmN1cl9lbmNfZnJhbWUg PSBwaWN0OworICAgIGlmIChhdmN0eC0+Z29wX3NpemUgPT0gMCB8fCBmLT5waWN0dXJlX251bWJl ciAlIGF2Y3R4LT5nb3Bfc2l6ZSA9PSAwKSB7CisgICAgICAgIGF2X2J1ZmZlcl91bnJlZigmZnYt PmtleWZyYW1lX3NsaWNlX2RhdGFfcmVmKTsKKyAgICAgICAgZi0+a2V5X2ZyYW1lID0gZmQtPmtl eV9mcmFtZSA9IDE7CisgICAgICAgIGYtPmdvYl9jb3VudCsrOworICAgIH0gZWxzZSB7CisgICAg ICAgIGYtPmtleV9mcmFtZSA9IGZkLT5rZXlfZnJhbWUgPSAwOworICAgIH0KKworICAgIGYtPnNs aWNlX2NvdW50ID0gZi0+bWF4X3NsaWNlX2NvdW50OworCisgICAgLyogQWxsb2NhdGUgc2xpY2Ug YnVmZmVyIGRhdGEgKi8KKyAgICBpZiAoZi0+YWMgPT0gQUNfR09MT01CX1JJQ0UpCisgICAgICAg IHBsYW5lX3N0YXRlX3NpemUgPSA4OworICAgIGVsc2UKKyAgICAgICAgcGxhbmVfc3RhdGVfc2l6 ZSA9IENPTlRFWFRfU0laRTsKKworICAgIHBsYW5lX3N0YXRlX3NpemUgKj0gY29udGV4dF9jb3Vu dDsKKyAgICBzbGljZV9zdGF0ZV9zaXplID0gcGxhbmVfc3RhdGVfc2l6ZSpmLT5wbGFuZV9jb3Vu dDsKKworICAgIHNsaWNlX2RhdGFfc2l6ZSA9IDI1NjsgLyogT3ZlcmVzdGltYXRpb24gZm9yIHRo ZSBTbGljZUNvbnRleHQgc3RydWN0ICovCisgICAgc2xpY2Vfc3RhdGVfc2l6ZSArPSBzbGljZV9k YXRhX3NpemU7CisgICAgc2xpY2Vfc3RhdGVfc2l6ZSA9IEZGQUxJR04oc2xpY2Vfc3RhdGVfc2l6 ZSwgOCk7CisKKyAgICAvKiBBbGxvY2F0ZSBzbGljZSBkYXRhIGJ1ZmZlciAqLworICAgIHNsaWNl X2RhdGFfcmVmID0gZnYtPmtleWZyYW1lX3NsaWNlX2RhdGFfcmVmOworICAgIGlmICghc2xpY2Vf ZGF0YV9yZWYpIHsKKyAgICAgICAgUkVUKGZmX3ZrX2dldF9wb29sZWRfYnVmZmVyKCZmdi0+cywg JmZ2LT5zbGljZV9kYXRhX3Bvb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAmc2xpY2VfZGF0YV9yZWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBW S19CVUZGRVJfVVNBR0VfU1RPUkFHRV9CVUZGRVJfQklUIHwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFZLX0JVRkZFUl9VU0FHRV9TSEFERVJfREVWSUNFX0FERFJFU1NfQklU LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgc2xpY2Vfc3RhdGVf c2l6ZSpmLT5zbGljZV9jb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFZLX01FTU9SWV9QUk9QRVJUWV9ERVZJQ0VfTE9DQUxfQklUKSk7CisKKyAgICAgICAgLyogT25s eSBzYXZlIGl0IGlmIHdlJ3JlIGdvaW5nIHRvIHVzZSBpdCBhZ2FpbiAqLworICAgICAgICBpZiAo aGFzX2ludGVyKQorICAgICAgICAgICAgZnYtPmtleWZyYW1lX3NsaWNlX2RhdGFfcmVmID0gc2xp Y2VfZGF0YV9yZWY7CisgICAgfQorICAgIHNsaWNlX2RhdGFfYnVmID0gKEZGVmtCdWZmZXIgKilz bGljZV9kYXRhX3JlZi0+ZGF0YTsKKyAgICBmZl92a19leGVjX2FkZF9kZXBfYnVmKCZmdi0+cywg ZXhlYywgJnNsaWNlX2RhdGFfcmVmLCAxLCBoYXNfaW50ZXIpOworCisgICAgLyogQWxsb2NhdGUg cmVzdWx0cyBidWZmZXIgKi8KKyAgICBSRVQoZmZfdmtfZ2V0X3Bvb2xlZF9idWZmZXIoJmZ2LT5z LCAmZnYtPnJlc3VsdHNfZGF0YV9wb29sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAmZmQtPnJlc3VsdHNfZGF0YV9yZWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFZLX0JVRkZFUl9VU0FHRV9TVE9SQUdFX0JVRkZFUl9CSVQgfAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBWS19CVUZGRVJfVVNBR0VfU0hBREVSX0RFVklDRV9BRERSRVNTX0JJVCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgMipmLT5zbGljZV9jb3VudCpz aXplb2YodWludDY0X3QpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19NRU1P UllfUFJPUEVSVFlfREVWSUNFX0xPQ0FMX0JJVCB8CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFZLX01FTU9SWV9QUk9QRVJUWV9IT1NUX1ZJU0lCTEVfQklUKSk7CisgICAgcmVzdWx0 c19kYXRhX2J1ZiA9IChGRlZrQnVmZmVyICopZmQtPnJlc3VsdHNfZGF0YV9yZWYtPmRhdGE7Cisg ICAgZmZfdmtfZXhlY19hZGRfZGVwX2J1ZigmZnYtPnMsIGV4ZWMsICZmZC0+cmVzdWx0c19kYXRh X3JlZiwgMSwgMSk7CisKKyAgICAvKiBPdXRwdXQgYnVmZmVyIHNpemUgKi8KKyAgICBtYXhzaXpl ID0gZmZfZmZ2MV9lbmNvZGVfYnVmZmVyX3NpemUoYXZjdHgpOworICAgIG1heHNpemUgPSBGRk1J TihtYXhzaXplLCBmdi0+cy5wcm9wc18xMS5tYXhNZW1vcnlBbGxvY2F0aW9uU2l6ZSk7CisKKyAg ICAvKiBBbGxvY2F0ZSBvdXRwdXQgYnVmZmVyICovCisgICAgUkVUKGZmX3ZrX2dldF9wb29sZWRf YnVmZmVyKCZmdi0+cywgJmZ2LT5vdXRfZGF0YV9wb29sLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAmZmQtPm91dF9kYXRhX3JlZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgVktfQlVGRkVSX1VTQUdFX1RSQU5TRkVSX1NSQ19CSVQgfAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBWS19CVUZGRVJfVVNBR0VfU1RPUkFHRV9CVUZGRVJfQklUIHwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfQlVGRkVSX1VTQUdFX1NIQURFUl9ERVZJ Q0VfQUREUkVTU19CSVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIG1h eHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZLX01FTU9SWV9QUk9QRVJU WV9IT1NUX1ZJU0lCTEVfQklUIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1h eHNpemUgPCBmdi0+bWF4X2hlYXBfc2l6ZSA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBWS19NRU1PUllfUFJPUEVSVFlfREVWSUNFX0xPQ0FMX0JJVCA6IDB4MCkgfAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAoIShmdi0+cy5leHRlbnNpb25zICYgRkZfVktfRVhU X0VYVEVSTkFMX0hPU1RfTUVNT1JZKSA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBWS19NRU1PUllfUFJPUEVSVFlfSE9TVF9DQUNIRURfQklUIDogMHgwKSkpOworICAgIG91dF9k YXRhX2J1ZiA9IChGRlZrQnVmZmVyICopZmQtPm91dF9kYXRhX3JlZi0+ZGF0YTsKKyAgICBmZl92 a19leGVjX2FkZF9kZXBfYnVmKCZmdi0+cywgZXhlYywgJmZkLT5vdXRfZGF0YV9yZWYsIDEsIDEp OworCisgICAgLyogUHJlcGFyZSBpbnB1dCBmcmFtZSAqLworICAgIFJFVChmZl92a19leGVjX2Fk ZF9kZXBfZnJhbWUoJmZ2LT5zLCBleGVjLCBzcmMsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBWS19QSVBFTElORV9TVEFHRV8yX0FMTF9DT01NQU5EU19CSVQsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBWS19QSVBFTElORV9TVEFHRV8yX0NPTVBVVEVfU0hBREVS X0JJVCkpOworCisgICAgUkVUKGZmX3ZrX2NyZWF0ZV9pbWFnZXZpZXdzKCZmdi0+cywgZXhlYywg c3JjX3ZpZXdzLCBzcmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ2LT5yZXBf Zm10KSk7CisgICAgZmZfdmtfZnJhbWVfYmFycmllcigmZnYtPnMsIGV4ZWMsIHNyYywgaW1nX2Jh ciwgJm5iX2ltZ19iYXIsCisgICAgICAgICAgICAgICAgICAgICAgICBWS19QSVBFTElORV9TVEFH RV8yX0FMTF9DT01NQU5EU19CSVQsCisgICAgICAgICAgICAgICAgICAgICAgICBWS19QSVBFTElO RV9TVEFHRV8yX0NPTVBVVEVfU0hBREVSX0JJVCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFZL X0FDQ0VTU19TSEFERVJfUkVBRF9CSVQsCisgICAgICAgICAgICAgICAgICAgICAgICBWS19JTUFH RV9MQVlPVVRfR0VORVJBTCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFZLX1FVRVVFX0ZBTUlM WV9JR05PUkVEKTsKKworICAgIGlmIChmdi0+aXNfcmdiKSB7CisgICAgICAgIC8qIENyZWF0ZSBh IHRlbXBvcmF0eSBmcmFtZSAqLworICAgICAgICB0bXAgPSBhdl9mcmFtZV9hbGxvYygpOworICAg ICAgICBpZiAoISh0bXApKQorICAgICAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKKwor ICAgICAgICBSRVQoYXZfaHdmcmFtZV9nZXRfYnVmZmVyKGZ2LT5pbnRlcm1lZGlhdGVfZnJhbWVz X3JlZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAsIDApKTsKKworICAg ICAgICBSRVQoZmZfdmtfZXhlY19hZGRfZGVwX2ZyYW1lKCZmdi0+cywgZXhlYywgdG1wLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZLX1BJUEVMSU5FX1NUQUdFXzJfQUxM X0NPTU1BTkRTX0JJVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19Q SVBFTElORV9TVEFHRV8yX0NPTVBVVEVfU0hBREVSX0JJVCkpOworICAgICAgICBSRVQoZmZfdmtf Y3JlYXRlX2ltYWdldmlld3MoJmZ2LT5zLCBleGVjLCB0bXBfdmlld3MsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB0bXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBmdi0+cmVwX2ZtdCkpOworICAgIH0KKworICAgIC8qIFNldHVwIHNoYWRlciAqLwor ICAgIGZmX3ZrX3NoYWRlcl91cGRhdGVfZGVzY19idWZmZXIoJmZ2LT5zLCBleGVjLCAmZnYtPnNl dHVwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgMCwgMCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsaWNlX2RhdGFfYnVmLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgc2xpY2VfZGF0YV9zaXplKmYtPnNsaWNlX2Nv dW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfRk9STUFUX1VOREVG SU5FRCk7CisgICAgZmZfdmtfc2hhZGVyX3VwZGF0ZV9pbWdfYXJyYXkoJmZ2LT5zLCBleGVjLCAm ZnYtPnNldHVwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYywgc3JjX3Zp ZXdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIDEsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgVktfSU1BR0VfTEFZT1VUX0dFTkVSQUwsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfTlVMTF9IQU5ETEUpOworCisgICAgLyogQWRk IGEgYnVmZmVyIGJhcnJpZXIgYmV0d2VlbiBwcmV2aW91cyBhbmQgY3VycmVudCBmcmFtZSAqLwor ICAgIGlmICghZi0+a2V5X2ZyYW1lKSB7CisgICAgICAgIGJ1Zl9iYXJbbmJfYnVmX2JhcisrXSA9 IChWa0J1ZmZlck1lbW9yeUJhcnJpZXIyKSB7CisgICAgICAgICAgICAuc1R5cGUgPSBWS19TVFJV Q1RVUkVfVFlQRV9CVUZGRVJfTUVNT1JZX0JBUlJJRVJfMiwKKyAgICAgICAgICAgIC5zcmNTdGFn ZU1hc2sgPSBzbGljZV9kYXRhX2J1Zi0+c3RhZ2UsCisgICAgICAgICAgICAuZHN0U3RhZ2VNYXNr ID0gVktfUElQRUxJTkVfU1RBR0VfMl9DT01QVVRFX1NIQURFUl9CSVQsCisgICAgICAgICAgICAu c3JjQWNjZXNzTWFzayA9IHNsaWNlX2RhdGFfYnVmLT5hY2Nlc3MsCisgICAgICAgICAgICAuZHN0 QWNjZXNzTWFzayA9IFZLX0FDQ0VTU18yX1NIQURFUl9TVE9SQUdFX1JFQURfQklUIHwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgVktfQUNDRVNTXzJfU0hBREVSX1NUT1JBR0VfV1JJVEVf QklULAorICAgICAgICAgICAgLnNyY1F1ZXVlRmFtaWx5SW5kZXggPSBWS19RVUVVRV9GQU1JTFlf SUdOT1JFRCwKKyAgICAgICAgICAgIC5kc3RRdWV1ZUZhbWlseUluZGV4ID0gVktfUVVFVUVfRkFN SUxZX0lHTk9SRUQsCisgICAgICAgICAgICAuYnVmZmVyID0gc2xpY2VfZGF0YV9idWYtPmJ1ZiwK KyAgICAgICAgICAgIC5zaXplID0gVktfV0hPTEVfU0laRSwKKyAgICAgICAgICAgIC5vZmZzZXQg PSAwLAorICAgICAgICB9OworICAgIH0KKworICAgIGlmIChmdi0+b3B0aW1pemVfcmN0KSB7Cisg ICAgICAgIFJFVChydW5fcmN0X3NlYXJjaChhdmN0eCwgZXhlYywKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgIHNyYywgc3JjX3ZpZXdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xp Y2VfZGF0YV9idWYsIHNsaWNlX2RhdGFfc2l6ZSkpOworCisgICAgICAgIGJ1Zl9iYXJbbmJfYnVm X2JhcisrXSA9IChWa0J1ZmZlck1lbW9yeUJhcnJpZXIyKSB7CisgICAgICAgICAgICAuc1R5cGUg PSBWS19TVFJVQ1RVUkVfVFlQRV9CVUZGRVJfTUVNT1JZX0JBUlJJRVJfMiwKKyAgICAgICAgICAg IC5zcmNTdGFnZU1hc2sgPSBzbGljZV9kYXRhX2J1Zi0+c3RhZ2UsCisgICAgICAgICAgICAuZHN0 U3RhZ2VNYXNrID0gVktfUElQRUxJTkVfU1RBR0VfMl9DT01QVVRFX1NIQURFUl9CSVQsCisgICAg ICAgICAgICAuc3JjQWNjZXNzTWFzayA9IHNsaWNlX2RhdGFfYnVmLT5hY2Nlc3MsCisgICAgICAg ICAgICAuZHN0QWNjZXNzTWFzayA9IFZLX0FDQ0VTU18yX1NIQURFUl9TVE9SQUdFX1dSSVRFX0JJ VCwKKyAgICAgICAgICAgIC5zcmNRdWV1ZUZhbWlseUluZGV4ID0gVktfUVVFVUVfRkFNSUxZX0lH Tk9SRUQsCisgICAgICAgICAgICAuZHN0UXVldWVGYW1pbHlJbmRleCA9IFZLX1FVRVVFX0ZBTUlM WV9JR05PUkVELAorICAgICAgICAgICAgLmJ1ZmZlciA9IHNsaWNlX2RhdGFfYnVmLT5idWYsCisg ICAgICAgICAgICAuc2l6ZSA9IHNsaWNlX2RhdGFfc2l6ZSpmLT5zbGljZV9jb3VudCwKKyAgICAg ICAgICAgIC5vZmZzZXQgPSAwLAorICAgICAgICB9OworICAgIH0KKworICAgIHZrLT5DbWRQaXBl bGluZUJhcnJpZXIyKGV4ZWMtPmJ1ZiwgJihWa0RlcGVuZGVuY3lJbmZvKSB7CisgICAgICAgIC5z VHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX0RFUEVOREVOQ1lfSU5GTywKKyAgICAgICAgLnBJbWFn ZU1lbW9yeUJhcnJpZXJzID0gaW1nX2JhciwKKyAgICAgICAgLmltYWdlTWVtb3J5QmFycmllckNv dW50ID0gbmJfaW1nX2JhciwKKyAgICAgICAgLnBCdWZmZXJNZW1vcnlCYXJyaWVycyA9IGJ1Zl9i YXIsCisgICAgICAgIC5idWZmZXJNZW1vcnlCYXJyaWVyQ291bnQgPSBuYl9idWZfYmFyLAorICAg IH0pOworICAgIG5iX2ltZ19iYXIgPSAwOworICAgIGlmIChuYl9idWZfYmFyKSB7CisgICAgICAg IHNsaWNlX2RhdGFfYnVmLT5zdGFnZSA9IGJ1Zl9iYXJbMF0uZHN0U3RhZ2VNYXNrOworICAgICAg ICBzbGljZV9kYXRhX2J1Zi0+YWNjZXNzID0gYnVmX2JhclswXS5kc3RBY2Nlc3NNYXNrOworICAg ICAgICBuYl9idWZfYmFyID0gMDsKKyAgICB9CisKKyAgICAvKiBSdW4gc2V0dXAgc2hhZGVyICov CisgICAgZmZfdmtfZXhlY19iaW5kX3NoYWRlcigmZnYtPnMsIGV4ZWMsICZmdi0+c2V0dXApOwor ICAgIHBkID0gKEZGdjFWa1BhcmFtZXRlcnMpIHsKKyAgICAgICAgLnNsaWNlX3N0YXRlID0gc2xp Y2VfZGF0YV9idWYtPmFkZHJlc3MgKyBmLT5zbGljZV9jb3VudCoyNTYsCisgICAgICAgIC5vdXRf ZGF0YSA9IG91dF9kYXRhX2J1Zi0+YWRkcmVzcywKKyAgICAgICAgLmJpdHNfcGVyX3Jhd19zYW1w bGUgPSBmLT5iaXRzX3Blcl9yYXdfc2FtcGxlLAorICAgICAgICAuc2FyWzBdID0gcGljdC0+c2Ft cGxlX2FzcGVjdF9yYXRpby5udW0sCisgICAgICAgIC5zYXJbMV0gPSBwaWN0LT5zYW1wbGVfYXNw ZWN0X3JhdGlvLmRlbiwKKyAgICAgICAgLmNocm9tYV9zaGlmdFswXSA9IGYtPmNocm9tYV9oX3No aWZ0LAorICAgICAgICAuY2hyb21hX3NoaWZ0WzFdID0gZi0+Y2hyb21hX3Zfc2hpZnQsCisgICAg ICAgIC5wbGFuZV9zdGF0ZV9zaXplID0gcGxhbmVfc3RhdGVfc2l6ZSwKKyAgICAgICAgLmNvbnRl eHRfY291bnQgPSBjb250ZXh0X2NvdW50LAorICAgICAgICAuY3JjcmVmID0gZi0+Y3JjcmVmLAor ICAgICAgICAucmN0X29mZnNldCA9IDEgPDwgZi0+Yml0c19wZXJfcmF3X3NhbXBsZSwKKyAgICAg ICAgLnNsaWNlX3NpemVfbWF4ID0gb3V0X2RhdGFfYnVmLT5zaXplIC8gZi0+c2xpY2VfY291bnQs CisgICAgICAgIC5jb250ZXh0X21vZGVsID0gZnYtPmN0eC5jb250ZXh0X21vZGVsLAorICAgICAg ICAudmVyc2lvbiA9IGYtPnZlcnNpb24sCisgICAgICAgIC5taWNyb192ZXJzaW9uID0gZi0+bWlj cm9fdmVyc2lvbiwKKyAgICAgICAgLmZvcmNlX3BjbSA9IGZ2LT5mb3JjZV9wY20sCisgICAgICAg IC5rZXlfZnJhbWUgPSBmLT5rZXlfZnJhbWUsCisgICAgICAgIC5jb21wb25lbnRzID0gZm10X2Rl c2MtPm5iX2NvbXBvbmVudHMsCisgICAgICAgIC5wbGFuZXMgPSBhdl9waXhfZm10X2NvdW50X3Bs YW5lcyhhdmN0eC0+c3dfcGl4X2ZtdCksCisgICAgICAgIC5jb2RlY19wbGFuZXMgPSBmLT5wbGFu ZV9jb3VudCwKKyAgICAgICAgLnBsYW5hcl9yZ2IgPSBmZl92a19tdF9pc19ucF9yZ2IoYXZjdHgt PnN3X3BpeF9mbXQpICYmCisgICAgICAgICAgICAgICAgICAgICAgKGZmX3ZrX2NvdW50X2ltYWdl cygoQVZWa0ZyYW1lICopc3JjLT5kYXRhWzBdKSA+IDEpLAorICAgICAgICAudHJhbnNwYXJlbmN5 ID0gZi0+dHJhbnNwYXJlbmN5LAorICAgICAgICAuY29sb3JzcGFjZSA9IGYtPmNvbG9yc3BhY2Us CisgICAgICAgIC5waWNfbW9kZSA9ICEocGljdC0+ZmxhZ3MgJiBBVl9GUkFNRV9GTEFHX0lOVEVS TEFDRUQpID8gMyA6CisgICAgICAgICAgICAgICAgICAgICEocGljdC0+ZmxhZ3MgJiBBVl9GUkFN RV9GTEFHX1RPUF9GSUVMRF9GSVJTVCkgPyAyIDogMSwKKyAgICAgICAgLmVjID0gZi0+ZWMsCisg ICAgICAgIC5wcGkgPSBmdi0+cHBpLAorICAgICAgICAuY2h1bmtzID0gZnYtPmNodW5rcywKKyAg ICAgICAgLnJjdF9zZWFyY2ggPSBmdi0+b3B0aW1pemVfcmN0LAorICAgIH07CisKKyAgICAvKiBG b3Igc29tZSByZWFzb24gdGhlIEMgRkZ2MSBlbmNvZGVyL2RlY29kZXIgdHJlYXRzIHRoZXNlIGRp ZmZlcmVudGx5ICovCisgICAgaWYgKGF2Y3R4LT5zd19waXhfZm10ID09IEFWX1BJWF9GTVRfR0JS UDEwIHx8CisgICAgICAgIGF2Y3R4LT5zd19waXhfZm10ID09IEFWX1BJWF9GTVRfR0JSUDEyIHx8 CisgICAgICAgIGF2Y3R4LT5zd19waXhfZm10ID09IEFWX1BJWF9GTVRfR0JSUDE0KQorICAgICAg ICBtZW1jcHkocGQuZm10X2x1dCwgKGludCBbNF0pIHsgMiwgMSwgMCwgMyB9LCA0KnNpemVvZihp bnQpKTsKKyAgICBlbHNlCisgICAgICAgIGZmX3ZrX3NldF9wZXJtKGF2Y3R4LT5zd19waXhfZm10 LCBwZC5mbXRfbHV0LCAxKTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZi0+cXVhbnRfdGFi bGVfY291bnQ7IGkrKykKKyAgICAgICAgcGQuZXh0ZW5kX2xvb2t1cFtpXSA9IChmLT5xdWFudF90 YWJsZXNbaV1bM11bMTI3XSAhPSAwKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KGYtPnF1YW50X3RhYmxlc1tpXVs0XVsxMjddICE9IDApOworICAgIGZmX3ZrX3NoYWRlcl91cGRh dGVfcHVzaF9jb25zdCgmZnYtPnMsIGV4ZWMsICZmdi0+c2V0dXAsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFZLX1NIQURFUl9TVEFHRV9DT01QVVRFX0JJVCwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgc2l6ZW9mKHBkKSwgJnBkKTsKKyAgICB2ay0+ Q21kRGlzcGF0Y2goZXhlYy0+YnVmLCBmdi0+Y3R4Lm51bV9oX3NsaWNlcywgZnYtPmN0eC5udW1f dl9zbGljZXMsIDEpOworCisgICAgLyogQ2xlYW4gdXAgdGVtcG9yYXJ5IGltYWdlICovCisgICAg aWYgKGZ2LT5pc19yZ2IpIHsKKyAgICAgICAgQVZWa0ZyYW1lICp2a2YgPSAoQVZWa0ZyYW1lICop dG1wLT5kYXRhWzBdOworICAgICAgICB2ay0+Q21kQ2xlYXJDb2xvckltYWdlKGV4ZWMtPmJ1Ziwg dmtmLT5pbWdbMF0sIFZLX0lNQUdFX0xBWU9VVF9HRU5FUkFMLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICYoKFZrQ2xlYXJDb2xvclZhbHVlKSB7IDAgfSksCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgMSwgJigoVmtJbWFnZVN1YnJlc291cmNlUmFuZ2UpIHsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmFzcGVjdE1hc2sgPSBWS19JTUFHRV9BU1BF Q1RfQ09MT1JfQklULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAubGV2ZWxD b3VudCA9IDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5sYXllckNvdW50 ID0gMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7CisgICAgfQorCisgICAg LyogU2V0dXAgc2hhZGVyIG1vZGlmaWVkIHRoZSBzbGljZSBkYXRhIGJ1ZmZlciAqLworICAgIGJ1 Zl9iYXJbbmJfYnVmX2JhcisrXSA9IChWa0J1ZmZlck1lbW9yeUJhcnJpZXIyKSB7CisgICAgICAg IC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX0JVRkZFUl9NRU1PUllfQkFSUklFUl8yLAorICAg ICAgICAuc3JjU3RhZ2VNYXNrID0gc2xpY2VfZGF0YV9idWYtPnN0YWdlLAorICAgICAgICAuZHN0 U3RhZ2VNYXNrID0gVktfUElQRUxJTkVfU1RBR0VfMl9DT01QVVRFX1NIQURFUl9CSVQsCisgICAg ICAgIC5zcmNBY2Nlc3NNYXNrID0gc2xpY2VfZGF0YV9idWYtPmFjY2VzcywKKyAgICAgICAgLmRz dEFjY2Vzc01hc2sgPSBWS19BQ0NFU1NfMl9TSEFERVJfU1RPUkFHRV9SRUFEX0JJVCB8CisgICAg ICAgICAgICAgICAgICAgICAgICAgVktfQUNDRVNTXzJfU0hBREVSX1NUT1JBR0VfV1JJVEVfQklU LAorICAgICAgICAuc3JjUXVldWVGYW1pbHlJbmRleCA9IFZLX1FVRVVFX0ZBTUlMWV9JR05PUkVE LAorICAgICAgICAuZHN0UXVldWVGYW1pbHlJbmRleCA9IFZLX1FVRVVFX0ZBTUlMWV9JR05PUkVE LAorICAgICAgICAuYnVmZmVyID0gc2xpY2VfZGF0YV9idWYtPmJ1ZiwKKyAgICAgICAgLnNpemUg PSBzbGljZV9kYXRhX3NpemUqZi0+c2xpY2VfY291bnQsCisgICAgICAgIC5vZmZzZXQgPSAwLAor ICAgIH07CisKKyAgICBpZiAoZi0+a2V5X2ZyYW1lIHx8IGYtPnZlcnNpb24gPiAzKSB7CisgICAg ICAgIEZGdjFWa1Jlc2V0UGFyYW1ldGVycyBwZF9yZXNldDsKKworICAgICAgICBmZl92a19zaGFk ZXJfdXBkYXRlX2Rlc2NfYnVmZmVyKCZmdi0+cywgZXhlYywgJmZ2LT5yZXNldCwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCAwLCAwLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHNsaWNlX2RhdGFfYnVmLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDAsIHNsaWNlX2RhdGFfc2l6ZSpmLT5zbGljZV9jb3Vu dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19GT1JNQVRfVU5E RUZJTkVEKTsKKworICAgICAgICAvKiBSdW4gc2V0dXAgc2hhZGVyICovCisgICAgICAgIGZmX3Zr X2V4ZWNfYmluZF9zaGFkZXIoJmZ2LT5zLCBleGVjLCAmZnYtPnJlc2V0KTsKKyAgICAgICAgcGRf cmVzZXQgPSAoRkZ2MVZrUmVzZXRQYXJhbWV0ZXJzKSB7CisgICAgICAgICAgICAuc2xpY2Vfc3Rh dGUgPSBzbGljZV9kYXRhX2J1Zi0+YWRkcmVzcyArIGYtPnNsaWNlX2NvdW50KjI1NiwKKyAgICAg ICAgICAgIC5wbGFuZV9zdGF0ZV9zaXplID0gcGxhbmVfc3RhdGVfc2l6ZSwKKyAgICAgICAgICAg IC5jb2RlY19wbGFuZXMgPSBmLT5wbGFuZV9jb3VudCwKKyAgICAgICAgICAgIC5rZXlfZnJhbWUg PSBmLT5rZXlfZnJhbWUsCisgICAgICAgIH07CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg Zi0+cXVhbnRfdGFibGVfY291bnQ7IGkrKykKKyAgICAgICAgICAgIHBkX3Jlc2V0LmNvbnRleHRf Y291bnRbaV0gPSBmLT5jb250ZXh0X2NvdW50W2ldOworCisgICAgICAgIGZmX3ZrX3NoYWRlcl91 cGRhdGVfcHVzaF9jb25zdCgmZnYtPnMsIGV4ZWMsICZmdi0+cmVzZXQsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBWS19TSEFERVJfU1RBR0VfQ09NUFVURV9CSVQsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBzaXplb2YocGRfcmVzZXQp LCAmcGRfcmVzZXQpOworCisgICAgICAgIC8qIFN5bmMgYmV0d2VlbiBzZXR1cCBhbmQgcmVzZXQg c2hhZGVycyAqLworICAgICAgICB2ay0+Q21kUGlwZWxpbmVCYXJyaWVyMihleGVjLT5idWYsICYo VmtEZXBlbmRlbmN5SW5mbykgeworICAgICAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZ UEVfREVQRU5ERU5DWV9JTkZPLAorICAgICAgICAgICAgLnBCdWZmZXJNZW1vcnlCYXJyaWVycyA9 IGJ1Zl9iYXIsCisgICAgICAgICAgICAuYnVmZmVyTWVtb3J5QmFycmllckNvdW50ID0gbmJfYnVm X2JhciwKKyAgICAgICAgfSk7CisgICAgICAgIHNsaWNlX2RhdGFfYnVmLT5zdGFnZSA9IGJ1Zl9i YXJbMF0uZHN0U3RhZ2VNYXNrOworICAgICAgICBzbGljZV9kYXRhX2J1Zi0+YWNjZXNzID0gYnVm X2JhclswXS5kc3RBY2Nlc3NNYXNrOworICAgICAgICBuYl9idWZfYmFyID0gMDsKKworICAgICAg ICB2ay0+Q21kRGlzcGF0Y2goZXhlYy0+YnVmLCBmdi0+Y3R4Lm51bV9oX3NsaWNlcywgZnYtPmN0 eC5udW1fdl9zbGljZXMsCisgICAgICAgICAgICAgICAgICAgICAgICBmLT5wbGFuZV9jb3VudCk7 CisgICAgfQorCisgICAgLyogSWYgdGhlIHJlc2V0IHNoYWRlciByYW4sIGluc2VydCBhIGJhcnJp ZXIgbm93LiAqLworICAgIGlmIChmLT5rZXlfZnJhbWUgfHwgZi0+dmVyc2lvbiA+IDMpIHsKKyAg ICAgICAgLyogUmVzZXQgc2hhZGVyIG1vZGlmaWVkIHRoZSBzbGljZSBkYXRhIGJ1ZmZlciAqLwor ICAgICAgICBidWZfYmFyW25iX2J1Zl9iYXIrK10gPSAoVmtCdWZmZXJNZW1vcnlCYXJyaWVyMikg eworICAgICAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfQlVGRkVSX01FTU9SWV9C QVJSSUVSXzIsCisgICAgICAgICAgICAuc3JjU3RhZ2VNYXNrID0gc2xpY2VfZGF0YV9idWYtPnN0 YWdlLAorICAgICAgICAgICAgLmRzdFN0YWdlTWFzayA9IFZLX1BJUEVMSU5FX1NUQUdFXzJfQ09N UFVURV9TSEFERVJfQklULAorICAgICAgICAgICAgLnNyY0FjY2Vzc01hc2sgPSBzbGljZV9kYXRh X2J1Zi0+YWNjZXNzLAorICAgICAgICAgICAgLmRzdEFjY2Vzc01hc2sgPSBWS19BQ0NFU1NfMl9T SEFERVJfU1RPUkFHRV9SRUFEX0JJVCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZL X0FDQ0VTU18yX1NIQURFUl9TVE9SQUdFX1dSSVRFX0JJVCwKKyAgICAgICAgICAgIC5zcmNRdWV1 ZUZhbWlseUluZGV4ID0gVktfUVVFVUVfRkFNSUxZX0lHTk9SRUQsCisgICAgICAgICAgICAuZHN0 UXVldWVGYW1pbHlJbmRleCA9IFZLX1FVRVVFX0ZBTUlMWV9JR05PUkVELAorICAgICAgICAgICAg LmJ1ZmZlciA9IHNsaWNlX2RhdGFfYnVmLT5idWYsCisgICAgICAgICAgICAuc2l6ZSA9IHNsaWNl X2RhdGFfYnVmLT5zaXplIC0gc2xpY2VfZGF0YV9zaXplKmYtPnNsaWNlX2NvdW50LAorICAgICAg ICAgICAgLm9mZnNldCA9IHNsaWNlX2RhdGFfc2l6ZSpmLT5zbGljZV9jb3VudCwKKyAgICAgICAg fTsKKyAgICB9CisKKyAgICBpZiAoZnYtPmlzX3JnYikgeworICAgICAgICBmZl92a19mcmFtZV9i YXJyaWVyKCZmdi0+cywgZXhlYywgdG1wLCBpbWdfYmFyLCAmbmJfaW1nX2JhciwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICBWS19QSVBFTElORV9TVEFHRV8yX0FMTF9DT01NQU5EU19CSVQs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfUElQRUxJTkVfU1RBR0VfMl9DT01QVVRF X1NIQURFUl9CSVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfQUNDRVNTX1NIQURF Ul9SRUFEX0JJVCB8IFZLX0FDQ0VTU19TSEFERVJfV1JJVEVfQklULAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFZLX0lNQUdFX0xBWU9VVF9HRU5FUkFMLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFZLX1FVRVVFX0ZBTUlMWV9JR05PUkVEKTsKKyAgICB9CisKKyAgICAvKiBGaW5h bCBiYXJyaWVyIGJlZm9yZSBlbmNvZGluZyAqLworICAgIHZrLT5DbWRQaXBlbGluZUJhcnJpZXIy KGV4ZWMtPmJ1ZiwgJihWa0RlcGVuZGVuY3lJbmZvKSB7CisgICAgICAgIC5zVHlwZSA9IFZLX1NU UlVDVFVSRV9UWVBFX0RFUEVOREVOQ1lfSU5GTywKKyAgICAgICAgLnBJbWFnZU1lbW9yeUJhcnJp ZXJzID0gaW1nX2JhciwKKyAgICAgICAgLmltYWdlTWVtb3J5QmFycmllckNvdW50ID0gbmJfaW1n X2JhciwKKyAgICAgICAgLnBCdWZmZXJNZW1vcnlCYXJyaWVycyA9IGJ1Zl9iYXIsCisgICAgICAg IC5idWZmZXJNZW1vcnlCYXJyaWVyQ291bnQgPSBuYl9idWZfYmFyLAorICAgIH0pOworICAgIG5i X2ltZ19iYXIgPSAwOworICAgIGlmIChuYl9idWZfYmFyKSB7CisgICAgICAgIHNsaWNlX2RhdGFf YnVmLT5zdGFnZSA9IGJ1Zl9iYXJbMF0uZHN0U3RhZ2VNYXNrOworICAgICAgICBzbGljZV9kYXRh X2J1Zi0+YWNjZXNzID0gYnVmX2JhclswXS5kc3RBY2Nlc3NNYXNrOworICAgICAgICBuYl9idWZf YmFyID0gMDsKKyAgICB9CisKKyAgICAvKiBNYWluIGVuY29kZSBzaGFkZXIgKi8KKyAgICBmZl92 a19zaGFkZXJfdXBkYXRlX2Rlc2NfYnVmZmVyKCZmdi0+cywgZXhlYywgJmZ2LT5lbmMsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCAwLCAwLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc2xpY2VfZGF0YV9idWYsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAwLCBzbGljZV9kYXRhX3NpemUqZi0+c2xpY2VfY291bnQsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19GT1JNQVRfVU5ERUZJTkVEKTsKKyAg ICBmZl92a19zaGFkZXJfdXBkYXRlX2ltZ19hcnJheSgmZnYtPnMsIGV4ZWMsICZmdi0+ZW5jLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYywgc3JjX3ZpZXdzLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIDEsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgVktfSU1BR0VfTEFZT1VUX0dFTkVSQUwsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgVktfTlVMTF9IQU5ETEUpOworICAgIGZmX3ZrX3NoYWRlcl91cGRhdGVf ZGVzY19idWZmZXIoJmZ2LT5zLCBleGVjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJmZ2LT5lbmMsIDEsIDIsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICByZXN1bHRzX2RhdGFfYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgMCwgcmVzdWx0c19kYXRhX2J1Zi0+c2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFZLX0ZPUk1BVF9VTkRFRklORUQpOworICAgIGlmIChmdi0+aXNfcmdiKQorICAg ICAgICBmZl92a19zaGFkZXJfdXBkYXRlX2ltZ19hcnJheSgmZnYtPnMsIGV4ZWMsICZmdi0+ZW5j LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAsIHRtcF92aWV3cywK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgMywKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfSU1BR0VfTEFZT1VUX0dFTkVSQUwsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZLX05VTExfSEFORExFKTsKKworICAg IGZmX3ZrX2V4ZWNfYmluZF9zaGFkZXIoJmZ2LT5zLCBleGVjLCAmZnYtPmVuYyk7CisgICAgZmZf dmtfc2hhZGVyX3VwZGF0ZV9wdXNoX2NvbnN0KCZmdi0+cywgZXhlYywgJmZ2LT5lbmMsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZLX1NIQURFUl9TVEFHRV9DT01QVVRFX0JJ VCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgc2l6ZW9mKHBkKSwgJnBk KTsKKyAgICB2ay0+Q21kRGlzcGF0Y2goZXhlYy0+YnVmLCBmdi0+Y3R4Lm51bV9oX3NsaWNlcywg ZnYtPmN0eC5udW1fdl9zbGljZXMsIDEpOworCisgICAgLyogU3VibWl0ICovCisgICAgZXJyID0g ZmZfdmtfZXhlY19zdWJtaXQoJmZ2LT5zLCBleGVjKTsKKyAgICBpZiAoZXJyIDwgMCkKKyAgICAg ICAgcmV0dXJuIGVycjsKKworICAgIGYtPnBpY3R1cmVfbnVtYmVyKys7CisKKyAgICAvKiBUaGlz LCBpZiBuZWVkZWQsIHdhcyByZWZlcmVuY2VkIGJ5IHRoZSBleGVjdXRpb24gY29udGV4dAorICAg ICAqIGFzIGl0IHdhcyBkZWNsYXJlZCBhcyBhIGRlcGVuZGVuY3kuICovCisgICAgYXZfZnJhbWVf ZnJlZSgmdG1wKTsKKyAgICByZXR1cm4gMDsKKworZmFpbDoKKyAgICBhdl9mcmFtZV9mcmVlKCZ0 bXApOworICAgIGZmX3ZrX2V4ZWNfZGlzY2FyZF9kZXBzKCZmdi0+cywgZXhlYyk7CisKKyAgICBy ZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHRyYW5zZmVyX3NsaWNlcyhBVkNvZGVjQ29udGV4 dCAqYXZjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBWa0J1ZmZlckNvcHkgKmJ1Zl9y ZWdpb25zLCBpbnQgbmJfcmVnaW9ucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFZ1bGth bkVuY29kZUZGdjFGcmFtZURhdGEgKmZkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdWlu dDhfdCAqZHN0LCBBVkJ1ZmZlclJlZiAqZHN0X3JlZikKK3sKKyAgICBpbnQgZXJyOworICAgIFZ1 bGthbkVuY29kZUZGdjFDb250ZXh0ICpmdiA9IGF2Y3R4LT5wcml2X2RhdGE7CisgICAgRkZWdWxr YW5GdW5jdGlvbnMgKnZrID0gJmZ2LT5zLnZrZm47CisgICAgRkZWa0V4ZWNDb250ZXh0ICpleGVj OworCisgICAgRkZWa0J1ZmZlciAqb3V0X2RhdGFfYnVmID0gKEZGVmtCdWZmZXIgKilmZC0+b3V0 X2RhdGFfcmVmLT5kYXRhOworCisgICAgQVZCdWZmZXJSZWYgKm1hcHBlZF9yZWY7CisgICAgRkZW a0J1ZmZlciAqbWFwcGVkX2J1ZjsKKworICAgIFZrQnVmZmVyTWVtb3J5QmFycmllcjIgYnVmX2Jh cls4XTsKKyAgICBpbnQgbmJfYnVmX2JhciA9IDA7CisKKyAgICBlcnIgPSBmZl92a19ob3N0X21h cF9idWZmZXIoJmZ2LT5zLCAmbWFwcGVkX3JlZiwgZHN0LCBkc3RfcmVmLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBWS19CVUZGRVJfVVNBR0VfVFJBTlNGRVJfRFNUX0JJVCk7Cisg ICAgaWYgKGVyciA8IDApCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICBtYXBwZWRfYnVmID0g KEZGVmtCdWZmZXIgKiltYXBwZWRfcmVmLT5kYXRhOworCisgICAgLyogVHJhbnNmZXIgdGhlIHNs aWNlcyAqLworICAgIGV4ZWMgPSBmZl92a19leGVjX2dldCgmZnYtPnMsICZmdi0+dHJhbnNmZXJf ZXhlY19wb29sKTsKKyAgICBmZl92a19leGVjX3N0YXJ0KCZmdi0+cywgZXhlYyk7CisKKyAgICBm Zl92a19leGVjX2FkZF9kZXBfYnVmKCZmdi0+cywgZXhlYywgJmZkLT5vdXRfZGF0YV9yZWYsIDEs IDApOworICAgIGZkLT5vdXRfZGF0YV9yZWYgPSBOVUxMOyAvKiBPd25lcnNoaXAgcGFzc2VkICov CisKKyAgICBmZl92a19leGVjX2FkZF9kZXBfYnVmKCZmdi0+cywgZXhlYywgJm1hcHBlZF9yZWYs IDEsIDApOworICAgIG1hcHBlZF9yZWYgPSBOVUxMOyAvKiBPd25lcnNoaXAgcGFzc2VkICovCisK KyAgICAvKiBFbnN1cmUgdGhlIG91dHB1dCBidWZmZXIgaXMgZmluaXNoZWQgKi8KKyAgICBidWZf YmFyW25iX2J1Zl9iYXIrK10gPSAoVmtCdWZmZXJNZW1vcnlCYXJyaWVyMikgeworICAgICAgICAu c1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9CVUZGRVJfTUVNT1JZX0JBUlJJRVJfMiwKKyAgICAg ICAgLnNyY1N0YWdlTWFzayA9IG91dF9kYXRhX2J1Zi0+c3RhZ2UsCisgICAgICAgIC5kc3RTdGFn ZU1hc2sgPSBWS19QSVBFTElORV9TVEFHRV8yX1RSQU5TRkVSX0JJVCwKKyAgICAgICAgLnNyY0Fj Y2Vzc01hc2sgPSBvdXRfZGF0YV9idWYtPmFjY2VzcywKKyAgICAgICAgLmRzdEFjY2Vzc01hc2sg PSBWS19BQ0NFU1NfMl9UUkFOU0ZFUl9SRUFEX0JJVCwKKyAgICAgICAgLnNyY1F1ZXVlRmFtaWx5 SW5kZXggPSBWS19RVUVVRV9GQU1JTFlfSUdOT1JFRCwKKyAgICAgICAgLmRzdFF1ZXVlRmFtaWx5 SW5kZXggPSBWS19RVUVVRV9GQU1JTFlfSUdOT1JFRCwKKyAgICAgICAgLmJ1ZmZlciA9IG91dF9k YXRhX2J1Zi0+YnVmLAorICAgICAgICAuc2l6ZSA9IFZLX1dIT0xFX1NJWkUsCisgICAgICAgIC5v ZmZzZXQgPSAwLAorICAgIH07CisgICAgdmstPkNtZFBpcGVsaW5lQmFycmllcjIoZXhlYy0+YnVm LCAmKFZrRGVwZW5kZW5jeUluZm8pIHsKKyAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZ UEVfREVQRU5ERU5DWV9JTkZPLAorICAgICAgICAucEJ1ZmZlck1lbW9yeUJhcnJpZXJzID0gYnVm X2JhciwKKyAgICAgICAgLmJ1ZmZlck1lbW9yeUJhcnJpZXJDb3VudCA9IG5iX2J1Zl9iYXIsCisg ICAgfSk7CisgICAgb3V0X2RhdGFfYnVmLT5zdGFnZSA9IGJ1Zl9iYXJbMF0uZHN0U3RhZ2VNYXNr OworICAgIG91dF9kYXRhX2J1Zi0+YWNjZXNzID0gYnVmX2JhclswXS5kc3RBY2Nlc3NNYXNrOwor ICAgIG5iX2J1Zl9iYXIgPSAwOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuYl9yZWdpb25z OyBpKyspCisgICAgICAgIGJ1Zl9yZWdpb25zW2ldLmRzdE9mZnNldCArPSBtYXBwZWRfYnVmLT52 aXJ0dWFsX29mZnNldDsKKworICAgIHZrLT5DbWRDb3B5QnVmZmVyKGV4ZWMtPmJ1ZiwKKyAgICAg ICAgICAgICAgICAgICAgICBvdXRfZGF0YV9idWYtPmJ1ZiwgbWFwcGVkX2J1Zi0+YnVmLAorICAg ICAgICAgICAgICAgICAgICAgIG5iX3JlZ2lvbnMsIGJ1Zl9yZWdpb25zKTsKKworICAgIC8qIFN1 Ym1pdCAqLworICAgIGVyciA9IGZmX3ZrX2V4ZWNfc3VibWl0KCZmdi0+cywgZXhlYyk7CisgICAg aWYgKGVyciA8IDApCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICAvKiBXZSBuZWVkIHRoZSBl bmNvZGVkIGRhdGEgaW1tZWRpYXRlbHkgKi8KKyAgICBmZl92a19leGVjX3dhaXQoJmZ2LT5zLCBl eGVjKTsKKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdldF9wYWNrZXQoQVZDb2Rl Y0NvbnRleHQgKmF2Y3R4LCBGRlZrRXhlY0NvbnRleHQgKmV4ZWMsCisgICAgICAgICAgICAgICAg ICAgICAgQVZQYWNrZXQgKnBrdCkKK3sKKyAgICBpbnQgZXJyOworICAgIFZ1bGthbkVuY29kZUZG djFDb250ZXh0ICpmdiA9IGF2Y3R4LT5wcml2X2RhdGE7CisgICAgRkZWMUNvbnRleHQgKmYgPSAm ZnYtPmN0eDsKKyAgICBGRlZ1bGthbkZ1bmN0aW9ucyAqdmsgPSAmZnYtPnMudmtmbjsKKyAgICBW dWxrYW5FbmNvZGVGRnYxRnJhbWVEYXRhICpmZCA9IGV4ZWMtPm9wYXF1ZTsKKworICAgIEZGVmtC dWZmZXIgKm91dF9kYXRhX2J1ZiA9IChGRlZrQnVmZmVyICopZmQtPm91dF9kYXRhX3JlZi0+ZGF0 YTsKKyAgICBGRlZrQnVmZmVyICpyZXN1bHRzX2RhdGFfYnVmID0gKEZGVmtCdWZmZXIgKilmZC0+ cmVzdWx0c19kYXRhX3JlZi0+ZGF0YTsKKyAgICB1aW50NjRfdCAqc2M7CisKKyAgICAvKiBNYWtl IHN1cmUgZW5jb2RpbmcncyBkb25lICovCisgICAgZmZfdmtfZXhlY193YWl0KCZmdi0+cywgZXhl Yyk7CisKKyAgICAvKiBJbnZhbGlkYXRlIHNsaWNlL291dHB1dCBkYXRhIGlmIG5lZWRlZCAqLwor ICAgIGlmICghKHJlc3VsdHNfZGF0YV9idWYtPmZsYWdzICYgVktfTUVNT1JZX1BST1BFUlRZX0hP U1RfQ09IRVJFTlRfQklUKSkgeworICAgICAgICBWa01hcHBlZE1lbW9yeVJhbmdlIGludmFsaWRh dGVfZGF0YSA9IHsKKyAgICAgICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX01BUFBF RF9NRU1PUllfUkFOR0UsCisgICAgICAgICAgICAubWVtb3J5ID0gcmVzdWx0c19kYXRhX2J1Zi0+ bWVtLAorICAgICAgICAgICAgLm9mZnNldCA9IDAsCisgICAgICAgICAgICAuc2l6ZSA9IFZLX1dI T0xFX1NJWkUsCisgICAgICAgIH07CisgICAgICAgIHZrLT5JbnZhbGlkYXRlTWFwcGVkTWVtb3J5 UmFuZ2VzKGZ2LT5zLmh3Y3R4LT5hY3RfZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAxLCAmaW52YWxpZGF0ZV9kYXRhKTsKKyAgICB9CisKKyAgICAvKiBDYWxj dWxhdGUgZmluYWwgc2l6ZSAqLworICAgIHBrdC0+c2l6ZSA9IDA7CisgICAgZm9yIChpbnQgaSA9 IDA7IGkgPCBmLT5zbGljZV9jb3VudDsgaSsrKSB7CisgICAgICAgIHNjID0gJigodWludDY0X3Qg KilyZXN1bHRzX2RhdGFfYnVmLT5tYXBwZWRfbWVtKVtpKjJdOworICAgICAgICBhdl9sb2coYXZj dHgsIEFWX0xPR19ERUJVRywgIlNsaWNlICVpIHNpemUgPSAlIlBSSXU2NCIsICIKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzcmMgb2Zmc2V0ID0gJSJQUkl1NjQiXG4iLAor ICAgICAgICAgICAgICAgaSwgc2NbMF0sIHNjWzFdKTsKKworICAgICAgICBmdi0+YnVmX3JlZ2lv bnNbaV0gPSAoVmtCdWZmZXJDb3B5KSB7CisgICAgICAgICAgICAuc3JjT2Zmc2V0ID0gc2NbMV0s CisgICAgICAgICAgICAuZHN0T2Zmc2V0ID0gcGt0LT5zaXplLAorICAgICAgICAgICAgLnNpemUg PSBzY1swXSwKKyAgICAgICAgfTsKKyAgICAgICAgcGt0LT5zaXplICs9IHNjWzBdOworICAgIH0K KyAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19WRVJCT1NFLCAiRW5jb2RlZCBkYXRhOiAlaU1pQlxu IiwgcGt0LT5zaXplIC8gKDEwMjQqMTAyNCkpOworICAgIGF2X2J1ZmZlcl91bnJlZigmZmQtPnJl c3VsdHNfZGF0YV9yZWYpOyAvKiBObyBuZWVkIGZvciB0aGlzIGJ1ZmZlciBhbnltb3JlICovCisK KyAgICAvKiBBbGxvY2F0ZSBwYWNrZXQgKi8KKyAgICBpZiAoKGVyciA9IGZmX2dldF9lbmNvZGVf YnVmZmVyKGF2Y3R4LCBwa3QsIHBrdC0+c2l6ZSwgMCkpIDwgMCkKKyAgICAgICAgcmV0dXJuIGVy cjsKKworICAgIHBrdC0+cHRzICAgICAgPSBmZC0+cHRzOworICAgIHBrdC0+ZHRzICAgICAgPSBm ZC0+cHRzOworICAgIHBrdC0+ZHVyYXRpb24gPSBmZC0+ZHVyYXRpb247CisgICAgcGt0LT5mbGFn cyAgIHw9IEFWX1BLVF9GTEFHX0tFWSAqIGZkLT5rZXlfZnJhbWU7CisKKyAgICBpZiAoYXZjdHgt PmZsYWdzICYgQVZfQ09ERUNfRkxBR19DT1BZX09QQVFVRSkgeworICAgICAgICBwa3QtPm9wYXF1 ZSAgICAgICAgICA9IGZkLT5mcmFtZV9vcGFxdWU7CisgICAgICAgIHBrdC0+b3BhcXVlX3JlZiAg ICAgID0gZmQtPmZyYW1lX29wYXF1ZV9yZWY7CisgICAgICAgIGZkLT5mcmFtZV9vcGFxdWVfcmVm ID0gTlVMTDsKKyAgICB9CisKKyAgICAvKiBUcnkgdXNpbmcgaG9zdCBtYXBwZWQgbWVtb3J5IHRy YW5zZmVycyBmaXJzdCAqLworICAgIGlmIChmdi0+cy5leHRlbnNpb25zICYgRkZfVktfRVhUX0VY VEVSTkFMX0hPU1RfTUVNT1JZKSB7CisgICAgICAgIGVyciA9IHRyYW5zZmVyX3NsaWNlcyhhdmN0 eCwgZnYtPmJ1Zl9yZWdpb25zLCBmLT5zbGljZV9jb3VudCwgZmQsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBwa3QtPmRhdGEsIHBrdC0+YnVmKTsKKyAgICAgICAgaWYgKGVyciA+PSAw KQorICAgICAgICAgICAgcmV0dXJuIGVycjsKKyAgICB9CisKKyAgICAvKiBJbnZhbGlkYXRlIHNs aWNlL291dHB1dCBkYXRhIGlmIG5lZWRlZCAqLworICAgIGlmICghKG91dF9kYXRhX2J1Zi0+Zmxh Z3MgJiBWS19NRU1PUllfUFJPUEVSVFlfSE9TVF9DT0hFUkVOVF9CSVQpKSB7CisgICAgICAgIFZr TWFwcGVkTWVtb3J5UmFuZ2UgaW52YWxpZGF0ZV9kYXRhID0geworICAgICAgICAgICAgLnNUeXBl ID0gVktfU1RSVUNUVVJFX1RZUEVfTUFQUEVEX01FTU9SWV9SQU5HRSwKKyAgICAgICAgICAgIC5t ZW1vcnkgPSBvdXRfZGF0YV9idWYtPm1lbSwKKyAgICAgICAgICAgIC5vZmZzZXQgPSAwLAorICAg ICAgICAgICAgLnNpemUgPSBWS19XSE9MRV9TSVpFLAorICAgICAgICB9OworICAgICAgICB2ay0+ SW52YWxpZGF0ZU1hcHBlZE1lbW9yeVJhbmdlcyhmdi0+cy5od2N0eC0+YWN0X2RldiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgJmludmFsaWRhdGVfZGF0YSk7 CisgICAgfQorCisgICAgLyogQ29weSBlYWNoIHNsaWNlICovCisgICAgZm9yIChpbnQgaSA9IDA7 IGkgPCBmLT5zbGljZV9jb3VudDsgaSsrKSB7CisgICAgICAgIFZrQnVmZmVyQ29weSAqcmVnaW9u ID0gJmZ2LT5idWZfcmVnaW9uc1tpXTsKKyAgICAgICAgbWVtY3B5KHBrdC0+ZGF0YSArIHJlZ2lv bi0+ZHN0T2Zmc2V0LAorICAgICAgICAgICAgICAgb3V0X2RhdGFfYnVmLT5tYXBwZWRfbWVtICsg cmVnaW9uLT5zcmNPZmZzZXQsCisgICAgICAgICAgICAgICByZWdpb24tPnNpemUpOworICAgIH0K KworICAgIGF2X2J1ZmZlcl91bnJlZigmZmQtPm91dF9kYXRhX3JlZik7CisKKyAgICByZXR1cm4g MDsKK30KKworc3RhdGljIGludCB2dWxrYW5fZW5jb2RlX2ZmdjFfcmVjZWl2ZV9wYWNrZXQoQVZD b2RlY0NvbnRleHQgKmF2Y3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgQVZQYWNrZXQgKnBrdCkKK3sKKyAgICBpbnQgZXJyOworICAgIFZ1bGthbkVuY29k ZUZGdjFDb250ZXh0ICpmdiA9IGF2Y3R4LT5wcml2X2RhdGE7CisgICAgVnVsa2FuRW5jb2RlRkZ2 MUZyYW1lRGF0YSAqZmQ7CisgICAgRkZWa0V4ZWNDb250ZXh0ICpleGVjOworICAgIEFWRnJhbWUg KmZyYW1lOworCisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgLyogUm9sbCBhbiBleGVjdXRpb24g Y29udGV4dCAqLworICAgICAgICBleGVjID0gZmZfdmtfZXhlY19nZXQoJmZ2LT5zLCAmZnYtPmV4 ZWNfcG9vbCk7CisKKyAgICAgICAgLyogSWYgaXQgaGFkIGEgZnJhbWUsIGltbWVkaWF0ZWx5IG91 dHB1dCBpdCAqLworICAgICAgICBpZiAoZXhlYy0+aGFkX3N1Ym1pc3Npb24pIHsKKyAgICAgICAg ICAgIGV4ZWMtPmhhZF9zdWJtaXNzaW9uID0gMDsKKyAgICAgICAgICAgIGZ2LT5pbl9mbGlnaHQt LTsKKyAgICAgICAgICAgIHJldHVybiBnZXRfcGFja2V0KGF2Y3R4LCBleGVjLCBwa3QpOworICAg ICAgICB9CisKKyAgICAgICAgLyogR2V0IG5leHQgZnJhbWUgdG8gZW5jb2RlICovCisgICAgICAg IGZyYW1lID0gZnYtPmZyYW1lOworICAgICAgICBlcnIgPSBmZl9lbmNvZGVfZ2V0X2ZyYW1lKGF2 Y3R4LCBmcmFtZSk7CisgICAgICAgIGlmIChlcnIgPCAwICYmIGVyciAhPSBBVkVSUk9SX0VPRikg eworICAgICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgICAgfSBlbHNlIGlmIChlcnIgPT0gQVZF UlJPUl9FT0YpIHsKKyAgICAgICAgICAgIGlmICghZnYtPmluX2ZsaWdodCkKKyAgICAgICAgICAg ICAgICByZXR1cm4gZXJyOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAg ICAgICAvKiBFbmNvZGUgZnJhbWUgKi8KKyAgICAgICAgZmQgPSBleGVjLT5vcGFxdWU7CisgICAg ICAgIGZkLT5wdHMgPSBmcmFtZS0+cHRzOworICAgICAgICBmZC0+ZHVyYXRpb24gPSBmcmFtZS0+ ZHVyYXRpb247CisgICAgICAgIGlmIChhdmN0eC0+ZmxhZ3MgJiBBVl9DT0RFQ19GTEFHX0NPUFlf T1BBUVVFKSB7CisgICAgICAgICAgICBmZC0+ZnJhbWVfb3BhcXVlICAgICA9IGZyYW1lLT5vcGFx dWU7CisgICAgICAgICAgICBmZC0+ZnJhbWVfb3BhcXVlX3JlZiA9IGZyYW1lLT5vcGFxdWVfcmVm OworICAgICAgICAgICAgZnJhbWUtPm9wYXF1ZV9yZWYgICAgPSBOVUxMOworICAgICAgICB9CisK KyAgICAgICAgZXJyID0gdnVsa2FuX2VuY29kZV9mZnYxX3N1Ym1pdF9mcmFtZShhdmN0eCwgZXhl YywgZnJhbWUpOworICAgICAgICBhdl9mcmFtZV91bnJlZihmcmFtZSk7CisgICAgICAgIGlmIChl cnIgPCAwKQorICAgICAgICAgICAgcmV0dXJuIGVycjsKKworICAgICAgICBmdi0+aW5fZmxpZ2h0 Kys7CisgICAgICAgIGlmIChmdi0+aW5fZmxpZ2h0IDwgZnYtPmFzeW5jX2RlcHRoKQorICAgICAg ICAgICAgcmV0dXJuIEFWRVJST1IoRUFHQUlOKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30K Kworc3RhdGljIGludCBpbml0X2luZGlyZWN0KEFWQ29kZWNDb250ZXh0ICphdmN0eCwgZW51bSBB VlBpeGVsRm9ybWF0IHN3X2Zvcm1hdCkKK3sKKyAgICBpbnQgZXJyOworICAgIFZ1bGthbkVuY29k ZUZGdjFDb250ZXh0ICpmdiA9IGF2Y3R4LT5wcml2X2RhdGE7CisgICAgRkZWMUNvbnRleHQgKmYg PSAmZnYtPmN0eDsKKyAgICBBVkhXRnJhbWVzQ29udGV4dCAqZnJhbWVzX2N0eDsKKyAgICBBVlZ1 bGthbkZyYW1lc0NvbnRleHQgKnZrX2ZyYW1lczsKKworICAgIGZ2LT5pbnRlcm1lZGlhdGVfZnJh bWVzX3JlZiA9IGF2X2h3ZnJhbWVfY3R4X2FsbG9jKGZ2LT5zLmRldmljZV9yZWYpOworICAgIGlm ICghZnYtPmludGVybWVkaWF0ZV9mcmFtZXNfcmVmKQorICAgICAgICByZXR1cm4gQVZFUlJPUihF Tk9NRU0pOworCisgICAgZnJhbWVzX2N0eCA9IChBVkhXRnJhbWVzQ29udGV4dCAqKWZ2LT5pbnRl cm1lZGlhdGVfZnJhbWVzX3JlZi0+ZGF0YTsKKyAgICBmcmFtZXNfY3R4LT5mb3JtYXQgICAgPSBB Vl9QSVhfRk1UX1ZVTEtBTjsKKyAgICBmcmFtZXNfY3R4LT5zd19mb3JtYXQgPSBzd19mb3JtYXQ7 CisgICAgZnJhbWVzX2N0eC0+d2lkdGggICAgID0gZnYtPnMuZnJhbWVzLT53aWR0aDsKKyAgICBm cmFtZXNfY3R4LT5oZWlnaHQgICAgPSBmLT5udW1fdl9zbGljZXMqUkdCX0xJTkVDQUNIRTsKKwor ICAgIHZrX2ZyYW1lcyA9IGZyYW1lc19jdHgtPmh3Y3R4OworICAgIHZrX2ZyYW1lcy0+dGlsaW5n ICAgID0gVktfSU1BR0VfVElMSU5HX09QVElNQUw7CisgICAgdmtfZnJhbWVzLT51c2FnZSAgICAg PSBWS19JTUFHRV9VU0FHRV9TVE9SQUdFX0JJVCB8CisgICAgICAgICAgICAgICAgICAgICAgICAg ICBWS19JTUFHRV9VU0FHRV9UUkFOU0ZFUl9EU1RfQklUOworICAgIHZrX2ZyYW1lcy0+aW1nX2Zs YWdzID0gVktfSU1BR0VfQ1JFQVRFX01VVEFCTEVfRk9STUFUX0JJVDsKKworICAgIGVyciA9IGF2 X2h3ZnJhbWVfY3R4X2luaXQoZnYtPmludGVybWVkaWF0ZV9mcmFtZXNfcmVmKTsKKyAgICBpZiAo ZXJyIDwgMCkgeworICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIlVuYWJsZSB0 byBpbml0aWFsaXplIGZyYW1lIHBvb2wgd2l0aCBmb3JtYXQgJXM6ICVzXG4iLAorICAgICAgICAg ICAgICAgYXZfZ2V0X3BpeF9mbXRfbmFtZShzd19mb3JtYXQpLCBhdl9lcnIyc3RyKGVycikpOwor ICAgICAgICBhdl9idWZmZXJfdW5yZWYoJmZ2LT5pbnRlcm1lZGlhdGVfZnJhbWVzX3JlZik7Cisg ICAgICAgIHJldHVybiBlcnI7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBp bnQgY2hlY2tfc3VwcG9ydChBVkhXRnJhbWVzQ29uc3RyYWludHMgKmNvbnN0cmFpbnRzLAorICAg ICAgICAgICAgICAgICAgICAgICAgIGVudW0gQVZQaXhlbEZvcm1hdCBmbXQpCit7CisgICAgZm9y IChpbnQgaSA9IDA7IGNvbnN0cmFpbnRzLT52YWxpZF9zd19mb3JtYXRzW2ldOyBpKyspIHsKKyAg ICAgICAgaWYgKGNvbnN0cmFpbnRzLT52YWxpZF9zd19mb3JtYXRzW2ldID09IGZtdCkKKyAgICAg ICAgICAgIHJldHVybiAxOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGVudW0g QVZQaXhlbEZvcm1hdCBnZXRfc3VwcG9ydGVkX3JnYl9idWZmZXJfZm10KEFWQ29kZWNDb250ZXh0 ICphdmN0eCkKK3sKKyAgICBWdWxrYW5FbmNvZGVGRnYxQ29udGV4dCAqZnYgPSBhdmN0eC0+cHJp dl9kYXRhOworCisgICAgZW51bSBBVlBpeGVsRm9ybWF0IGZtdDsKKyAgICBBVkhXRnJhbWVzQ29u c3RyYWludHMgKmNvbnN0cmFpbnRzOworICAgIGNvbnN0cmFpbnRzID0gYXZfaHdkZXZpY2VfZ2V0 X2h3ZnJhbWVfY29uc3RyYWludHMoZnYtPnMuZGV2aWNlX3JlZiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworCisgICAgLyogV2hh dCB3ZSdkIGxpa2UgdG8gb3B0aW1hbGx5IGhhdmUgKi8KKyAgICBmbXQgPSBmdi0+Y3R4LnVzZTMy Yml0ID8KKyAgICAgICAgICAoZnYtPmN0eC50cmFuc3BhcmVuY3kgPyBBVl9QSVhfRk1UX1JHQkEx MjggOiBBVl9QSVhfRk1UX1JHQjk2KSA6CisgICAgICAgICAgKGZ2LT5jdHgudHJhbnNwYXJlbmN5 ID8gQVZfUElYX0ZNVF9SR0JBNjQgIDogQVZfUElYX0ZNVF9SR0I0OCk7CisgICAgaWYgKGNoZWNr X3N1cHBvcnQoY29uc3RyYWludHMsIGZtdCkpCisgICAgICAgIGdvdG8gZW5kOworCisgICAgaWYg KGZ2LT5jdHgudXNlMzJiaXQpIHsKKyAgICAgICAgaWYgKGNoZWNrX3N1cHBvcnQoY29uc3RyYWlu dHMsIChmbXQgPSBBVl9QSVhfRk1UX1JHQkExMjgpKSkKKyAgICAgICAgICAgIGdvdG8gZW5kOwor ICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChjaGVja19zdXBwb3J0KGNvbnN0cmFpbnRzLCAoZm10 ID0gQVZfUElYX0ZNVF9SR0JBNjQpKSkKKyAgICAgICAgICAgIGdvdG8gZW5kOworCisgICAgICAg IGlmICghZnYtPmN0eC50cmFuc3BhcmVuY3kgJiYKKyAgICAgICAgICAgIGNoZWNrX3N1cHBvcnQo Y29uc3RyYWludHMsIChmbXQgPSBBVl9QSVhfRk1UX1JHQjk2KSkpCisgICAgICAgICAgICAgICAg Z290byBlbmQ7CisKKyAgICAgICAgaWYgKGNoZWNrX3N1cHBvcnQoY29uc3RyYWludHMsIChmbXQg PSBBVl9QSVhfRk1UX1JHQkExMjgpKSkKKyAgICAgICAgICAgIGdvdG8gZW5kOworICAgIH0KKwor ICAgIGZtdCA9IEFWX1BJWF9GTVRfTk9ORTsKKworZW5kOgorICAgIGF2X2h3ZnJhbWVfY29uc3Ry YWludHNfZnJlZSgmY29uc3RyYWludHMpOworICAgIHJldHVybiBmbXQ7Cit9CisKK3N0YXRpYyB2 b2lkIGRlZmluZV9zaGFyZWRfY29kZShBVkNvZGVjQ29udGV4dCAqYXZjdHgsIEZGVnVsa2FuU2hh ZGVyICpzaGQpCit7CisgICAgVnVsa2FuRW5jb2RlRkZ2MUNvbnRleHQgKmZ2ID0gYXZjdHgtPnBy aXZfZGF0YTsKKyAgICBGRlYxQ29udGV4dCAqZiA9ICZmdi0+Y3R4OworICAgIGludCBzbXBfYml0 cyA9IGZ2LT5jdHgudXNlMzJiaXQgPyAzMiA6IDE2OworCisgICAgYXZfYnByaW50Zigmc2hkLT5z cmMsICIjZGVmaW5lIFJHQl9MSU5FQ0FDSEUgJWlcbiIgICAgICAgICAgICAgICAgICAgLFJHQl9M SU5FQ0FDSEUpOworICAgIGF2X2JwcmludGYoJnNoZC0+c3JjLCAiI2RlZmluZSBDT05URVhUX1NJ WkUgJWlcbiIgICAgICAgICAgICAgICAgICAgICxDT05URVhUX1NJWkUpOworICAgIGF2X2Jwcmlu dGYoJnNoZC0+c3JjLCAiI2RlZmluZSBNQVhfUVVBTlRfVEFCTEVfTUFTSyAweCV4XG4iICAgICAg ICAgICxNQVhfUVVBTlRfVEFCTEVfTUFTSyk7CisKKyAgICBpZiAoZi0+YWMgPT0gQUNfR09MT01C X1JJQ0UpIHsKKyAgICAgICAgYXZfYnByaW50Zigmc2hkLT5zcmMsICIjZGVmaW5lIFBCX1VOQUxJ R05FRFxuIiAgICAgICAgICAgICAgICAgICApOworICAgICAgICBhdl9icHJpbnRmKCZzaGQtPnNy YywgIiNkZWZpbmUgR09MT01CXG4iICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgfQor CisgICAgaWYgKGZ2LT5pc19yZ2IpCisgICAgICAgIGF2X2JwcmludGYoJnNoZC0+c3JjLCAiI2Rl ZmluZSBSR0JcbiIpOworCisgICAgR0xTTEYoMCwgI2RlZmluZSBUWVBFIGludCVpX3QgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLHNtcF9iaXRzKTsKKyAgICBHTFNMRigw LCAjZGVmaW5lIFZUWVBFMiBpJWl2ZWMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAsc21wX2JpdHMpOworICAgIEdMU0xGKDAsICNkZWZpbmUgVlRZUEUzIGklaXZlYzMgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICxzbXBfYml0cyk7CisgICAgR0xTTEQo ZmZfc291cmNlX3JhbmdlY29kZXJfY29tcCk7CisKKyAgICBpZiAoZi0+YWMgPT0gQUNfR09MT01C X1JJQ0UpCisgICAgICAgIEdMU0xEKGZmX3NvdXJjZV9mZnYxX3ZsY19jb21wKTsKKworICAgIEdM U0xEKGZmX3NvdXJjZV9mZnYxX2NvbW1vbl9jb21wKTsKK30KKworc3RhdGljIGludCBpbml0X3Jj dF9zZWFyY2hfc2hhZGVyKEFWQ29kZWNDb250ZXh0ICphdmN0eCwgRkZWa1NQSVJWQ29tcGlsZXIg KnNwdikKK3sKKyAgICBpbnQgZXJyOworICAgIFZ1bGthbkVuY29kZUZGdjFDb250ZXh0ICpmdiA9 IGF2Y3R4LT5wcml2X2RhdGE7CisgICAgRkZWMUNvbnRleHQgKmYgPSAmZnYtPmN0eDsKKyAgICBG RlZ1bGthblNoYWRlciAqc2hkID0gJmZ2LT5yY3Rfc2VhcmNoOworICAgIEZGVnVsa2FuRGVzY3Jp cHRvclNldEJpbmRpbmcgKmRlc2Nfc2V0OworCisgICAgdWludDhfdCAqc3B2X2RhdGE7CisgICAg c2l6ZV90IHNwdl9sZW47CisgICAgdm9pZCAqc3B2X29wYXF1ZSA9IE5VTEw7CisKKyAgICBSRVQo ZmZfdmtfc2hhZGVyX2luaXQoJmZ2LT5zLCBzaGQsICJmZnYxX3JjdF9zZWFyY2giLAorICAgICAg ICAgICAgICAgICAgICAgICAgICBWS19TSEFERVJfU1RBR0VfQ09NUFVURV9CSVQsCisgICAgICAg ICAgICAgICAgICAgICAgICAgIChjb25zdCBjaGFyICpbXSkgeyAiR0xfRVhUX2J1ZmZlcl9yZWZl cmVuY2UiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkdM X0VYVF9idWZmZXJfcmVmZXJlbmNlMiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAiR0xfRVhUX251bGxfaW5pdGlhbGl6ZXIiIH0sIDMsCisgICAgICAgICAg ICAgICAgICAgICAgICAgIDMyLCAzMiwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMCkp OworCisgICAgLyogQ29tbW9uIGNvZGVjIGhlYWRlciAqLworICAgIEdMU0xEKGZmX3NvdXJjZV9j b21tb25fY29tcCk7CisKKyAgICBHTFNMQygwLCBsYXlvdXQocHVzaF9jb25zdGFudCwgc2NhbGFy KSB1bmlmb3JtIHB1c2hDb25zdGFudHMgeyAgICAgICAgICAgICApOworICAgIEdMU0xDKDEsICAg IGl2ZWM0IGZtdF9sdXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICk7CisgICAgR0xTTEMoMSwgICAgaW50IHJjdF9vZmZzZXQ7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBHTFNMQygxLCAgICB1aW50 OF90IHBsYW5hcl9yZ2I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICApOworICAgIEdMU0xDKDEsICAgIHVpbnQ4X3QgdHJhbnNwYXJlbmN5OyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgR0xTTEMoMSwgICAgdWludDhfdCBr ZXlfZnJhbWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsK KyAgICBHTFNMQygxLCAgICB1aW50OF90IGZvcmNlX3BjbTsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICApOworICAgIEdMU0xDKDEsICAgIHVpbnQ4X3QgdmVyc2lv bjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAg R0xTTEMoMSwgICAgdWludDhfdCBtaWNyb192ZXJzaW9uOyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKTsKKyAgICBHTFNMQygxLCAgICB1aW50OF90IHBhZGRpbmdbM107 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgIEdMU0xD KDAsIH07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICk7CisgICAgZmZfdmtfc2hhZGVyX2FkZF9wdXNoX2NvbnN0KHNoZCwgMCwg c2l6ZW9mKEZGdjFWa1Jlc2V0UGFyYW1ldGVycyksCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFZLX1NIQURFUl9TVEFHRV9DT01QVVRFX0JJVCk7CisKKyAgICBhdl9icHJpbnRmKCZz aGQtPnNyYywgIiNkZWZpbmUgTUFYX1FVQU5UX1RBQkxFUyAlaVxuIiwgTUFYX1FVQU5UX1RBQkxF Uyk7CisgICAgYXZfYnByaW50Zigmc2hkLT5zcmMsICIjZGVmaW5lIE1BWF9DT05URVhUX0lOUFVU UyAlaVxuIiwgTUFYX0NPTlRFWFRfSU5QVVRTKTsKKyAgICBhdl9icHJpbnRmKCZzaGQtPnNyYywg IiNkZWZpbmUgTUFYX1FVQU5UX1RBQkxFX1NJWkUgJWlcbiIsIE1BWF9RVUFOVF9UQUJMRV9TSVpF KTsKKworICAgIC8qIE5ldmVyIHVzZWQgKi8KKyAgICBkZXNjX3NldCA9IChGRlZ1bGthbkRlc2Ny aXB0b3JTZXRCaW5kaW5nIFtdKSB7CisgICAgICAgIHsKKyAgICAgICAgICAgIC5uYW1lICAgICAg ICA9ICJyYW5nZWNvZGVyX3N0YXRpY19idWYiLAorICAgICAgICAgICAgLnR5cGUgICAgICAgID0g VktfREVTQ1JJUFRPUl9UWVBFX1VOSUZPUk1fQlVGRkVSLAorICAgICAgICAgICAgLnN0YWdlcyAg ICAgID0gVktfU0hBREVSX1NUQUdFX0NPTVBVVEVfQklULAorICAgICAgICAgICAgLm1lbV9sYXlv dXQgID0gInNjYWxhciIsCisgICAgICAgICAgICAuYnVmX2NvbnRlbnQgPSAidWludDhfdCB6ZXJv X29uZV9zdGF0ZVs1MTJdOyIsCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgIC5u YW1lICAgICAgICA9ICJxdWFudF9idWYiLAorICAgICAgICAgICAgLnR5cGUgICAgICAgID0gVktf REVTQ1JJUFRPUl9UWVBFX1VOSUZPUk1fQlVGRkVSLAorICAgICAgICAgICAgLnN0YWdlcyAgICAg ID0gVktfU0hBREVSX1NUQUdFX0NPTVBVVEVfQklULAorICAgICAgICAgICAgLm1lbV9sYXlvdXQg ID0gInNjYWxhciIsCisgICAgICAgICAgICAuYnVmX2NvbnRlbnQgPSAiaW50MTZfdCBxdWFudF90 YWJsZVtNQVhfUVVBTlRfVEFCTEVTXSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJbTUFY X0NPTlRFWFRfSU5QVVRTXVtNQVhfUVVBTlRfVEFCTEVfU0laRV07IiwKKyAgICAgICAgfSwKKyAg ICB9OworICAgIFJFVChmZl92a19zaGFkZXJfYWRkX2Rlc2NyaXB0b3Jfc2V0KCZmdi0+cywgc2hk LCBkZXNjX3NldCwgMiwgMSwgMSkpOworCisgICAgZGVmaW5lX3NoYXJlZF9jb2RlKGF2Y3R4LCBz aGQpOworCisgICAgZGVzY19zZXQgPSAoRkZWdWxrYW5EZXNjcmlwdG9yU2V0QmluZGluZyBbXSkg eworICAgICAgICB7CisgICAgICAgICAgICAubmFtZSAgICAgICAgPSAic2xpY2VfZGF0YV9idWYi LAorICAgICAgICAgICAgLnR5cGUgICAgICAgID0gVktfREVTQ1JJUFRPUl9UWVBFX1NUT1JBR0Vf QlVGRkVSLAorICAgICAgICAgICAgLnN0YWdlcyAgICAgID0gVktfU0hBREVSX1NUQUdFX0NPTVBV VEVfQklULAorICAgICAgICAgICAgLmJ1Zl9jb250ZW50ID0gIlNsaWNlQ29udGV4dCBzbGljZV9j dHgiLAorICAgICAgICAgICAgLmJ1Zl9lbGVtcyAgID0gZi0+bWF4X3NsaWNlX2NvdW50LAorICAg ICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAubmFtZSAgICAgICA9ICJzcmMiLAorICAg ICAgICAgICAgLnR5cGUgICAgICAgPSBWS19ERVNDUklQVE9SX1RZUEVfU1RPUkFHRV9JTUFHRSwK KyAgICAgICAgICAgIC5kaW1lbnNpb25zID0gMiwKKyAgICAgICAgICAgIC5tZW1fbGF5b3V0ID0g ZmZfdmtfc2hhZGVyX3JlcF9mbXQoZnYtPnMuZnJhbWVzLT5zd19mb3JtYXQsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ2LT5yZXBfZm10KSwKKyAgICAg ICAgICAgIC5lbGVtcyAgICAgID0gYXZfcGl4X2ZtdF9jb3VudF9wbGFuZXMoZnYtPnMuZnJhbWVz LT5zd19mb3JtYXQpLAorICAgICAgICAgICAgLm1lbV9xdWFsaSAgPSAicmVhZG9ubHkiLAorICAg ICAgICAgICAgLnN0YWdlcyAgICAgPSBWS19TSEFERVJfU1RBR0VfQ09NUFVURV9CSVQsCisgICAg ICAgIH0sCisgICAgfTsKKyAgICBSRVQoZmZfdmtfc2hhZGVyX2FkZF9kZXNjcmlwdG9yX3NldCgm ZnYtPnMsIHNoZCwgZGVzY19zZXQsIDIsIDAsIDApKTsKKworICAgIEdMU0xEKGZmX3NvdXJjZV9m ZnYxX3JjdF9zZWFyY2hfY29tcCk7CisKKyAgICBSRVQoc3B2LT5jb21waWxlX3NoYWRlcigmZnYt PnMsIHNwdiwgc2hkLCAmc3B2X2RhdGEsICZzcHZfbGVuLCAibWFpbiIsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJnNwdl9vcGFxdWUpKTsKKyAgICBSRVQoZmZfdmtfc2hhZGVyX2xpbmso JmZ2LT5zLCBzaGQsIHNwdl9kYXRhLCBzcHZfbGVuLCAibWFpbiIpKTsKKworICAgIFJFVChmZl92 a19zaGFkZXJfcmVnaXN0ZXJfZXhlYygmZnYtPnMsICZmdi0+ZXhlY19wb29sLCBzaGQpKTsKKwor ZmFpbDoKKyAgICBpZiAoc3B2X29wYXF1ZSkKKyAgICAgICAgc3B2LT5mcmVlX3NoYWRlcihzcHYs ICZzcHZfb3BhcXVlKTsKKworICAgIHJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgaW5pdF9z ZXR1cF9zaGFkZXIoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LCBGRlZrU1BJUlZDb21waWxlciAqc3B2 KQoreworICAgIGludCBlcnI7CisgICAgVnVsa2FuRW5jb2RlRkZ2MUNvbnRleHQgKmZ2ID0gYXZj dHgtPnByaXZfZGF0YTsKKyAgICBGRlYxQ29udGV4dCAqZiA9ICZmdi0+Y3R4OworICAgIEZGVnVs a2FuU2hhZGVyICpzaGQgPSAmZnYtPnNldHVwOworICAgIEZGVnVsa2FuRGVzY3JpcHRvclNldEJp bmRpbmcgKmRlc2Nfc2V0OworCisgICAgdWludDhfdCAqc3B2X2RhdGE7CisgICAgc2l6ZV90IHNw dl9sZW47CisgICAgdm9pZCAqc3B2X29wYXF1ZSA9IE5VTEw7CisKKyAgICBSRVQoZmZfdmtfc2hh ZGVyX2luaXQoJmZ2LT5zLCBzaGQsICJmZnYxX3NldHVwIiwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgVktfU0hBREVSX1NUQUdFX0NPTVBVVEVfQklULAorICAgICAgICAgICAgICAgICAgICAg ICAgICAoY29uc3QgY2hhciAqW10pIHsgIkdMX0VYVF9idWZmZXJfcmVmZXJlbmNlIiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJHTF9FWFRfYnVmZmVyX3Jl ZmVyZW5jZTIiIH0sIDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIDEsIDEsCisgICAg ICAgICAgICAgICAgICAgICAgICAgIDApKTsKKworICAgIC8qIENvbW1vbiBjb2RlYyBoZWFkZXIg Ki8KKyAgICBHTFNMRChmZl9zb3VyY2VfY29tbW9uX2NvbXApOworICAgIGFkZF9wdXNoX2RhdGEo c2hkKTsKKworICAgIGF2X2JwcmludGYoJnNoZC0+c3JjLCAiI2RlZmluZSBNQVhfUVVBTlRfVEFC TEVTICVpXG4iLCBNQVhfUVVBTlRfVEFCTEVTKTsKKyAgICBhdl9icHJpbnRmKCZzaGQtPnNyYywg IiNkZWZpbmUgTUFYX0NPTlRFWFRfSU5QVVRTICVpXG4iLCBNQVhfQ09OVEVYVF9JTlBVVFMpOwor ICAgIGF2X2JwcmludGYoJnNoZC0+c3JjLCAiI2RlZmluZSBNQVhfUVVBTlRfVEFCTEVfU0laRSAl aVxuIiwgTUFYX1FVQU5UX1RBQkxFX1NJWkUpOworICAgIGF2X2JwcmludGYoJnNoZC0+c3JjLCAi I2RlZmluZSBGVUxMX1JFTk9STVxuIik7CisKKyAgICBkZXNjX3NldCA9IChGRlZ1bGthbkRlc2Ny aXB0b3JTZXRCaW5kaW5nIFtdKSB7CisgICAgICAgIHsKKyAgICAgICAgICAgIC5uYW1lICAgICAg ICA9ICJyYW5nZWNvZGVyX3N0YXRpY19idWYiLAorICAgICAgICAgICAgLnR5cGUgICAgICAgID0g VktfREVTQ1JJUFRPUl9UWVBFX1VOSUZPUk1fQlVGRkVSLAorICAgICAgICAgICAgLnN0YWdlcyAg ICAgID0gVktfU0hBREVSX1NUQUdFX0NPTVBVVEVfQklULAorICAgICAgICAgICAgLm1lbV9sYXlv dXQgID0gInNjYWxhciIsCisgICAgICAgICAgICAuYnVmX2NvbnRlbnQgPSAidWludDhfdCB6ZXJv X29uZV9zdGF0ZVs1MTJdOyIsCisgICAgICAgIH0sCisgICAgICAgIHsgLyogVGhpcyBkZXNjcmlw dG9yIGlzIG5ldmVyIHVzZWQgKi8KKyAgICAgICAgICAgIC5uYW1lICAgICAgICA9ICJxdWFudF9i dWYiLAorICAgICAgICAgICAgLnR5cGUgICAgICAgID0gVktfREVTQ1JJUFRPUl9UWVBFX1VOSUZP Uk1fQlVGRkVSLAorICAgICAgICAgICAgLnN0YWdlcyAgICAgID0gVktfU0hBREVSX1NUQUdFX0NP TVBVVEVfQklULAorICAgICAgICAgICAgLm1lbV9sYXlvdXQgID0gInNjYWxhciIsCisgICAgICAg ICAgICAuYnVmX2NvbnRlbnQgPSAiaW50MTZfdCBxdWFudF90YWJsZVtNQVhfUVVBTlRfVEFCTEVT XSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJbTUFYX0NPTlRFWFRfSU5QVVRTXVtNQVhf UVVBTlRfVEFCTEVfU0laRV07IiwKKyAgICAgICAgfSwKKyAgICB9OworICAgIFJFVChmZl92a19z aGFkZXJfYWRkX2Rlc2NyaXB0b3Jfc2V0KCZmdi0+cywgc2hkLCBkZXNjX3NldCwgMiwgMSwgMCkp OworCisgICAgZGVmaW5lX3NoYXJlZF9jb2RlKGF2Y3R4LCBzaGQpOworCisgICAgZGVzY19zZXQg PSAoRkZWdWxrYW5EZXNjcmlwdG9yU2V0QmluZGluZyBbXSkgeworICAgICAgICB7CisgICAgICAg ICAgICAubmFtZSAgICAgICAgPSAic2xpY2VfZGF0YV9idWYiLAorICAgICAgICAgICAgLnR5cGUg ICAgICAgID0gVktfREVTQ1JJUFRPUl9UWVBFX1NUT1JBR0VfQlVGRkVSLAorICAgICAgICAgICAg LnN0YWdlcyAgICAgID0gVktfU0hBREVSX1NUQUdFX0NPTVBVVEVfQklULAorICAgICAgICAgICAg LmJ1Zl9jb250ZW50ID0gIlNsaWNlQ29udGV4dCBzbGljZV9jdHgiLAorICAgICAgICAgICAgLmJ1 Zl9lbGVtcyAgID0gZi0+bWF4X3NsaWNlX2NvdW50LAorICAgICAgICB9LAorICAgICAgICB7Cisg ICAgICAgICAgICAubmFtZSAgICAgICA9ICJzcmMiLAorICAgICAgICAgICAgLnR5cGUgICAgICAg PSBWS19ERVNDUklQVE9SX1RZUEVfU1RPUkFHRV9JTUFHRSwKKyAgICAgICAgICAgIC5kaW1lbnNp b25zID0gMiwKKyAgICAgICAgICAgIC5tZW1fbGF5b3V0ID0gZmZfdmtfc2hhZGVyX3JlcF9mbXQo ZnYtPnMuZnJhbWVzLT5zd19mb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGZ2LT5yZXBfZm10KSwKKyAgICAgICAgICAgIC5lbGVtcyAgICAgID0g YXZfcGl4X2ZtdF9jb3VudF9wbGFuZXMoZnYtPnMuZnJhbWVzLT5zd19mb3JtYXQpLAorICAgICAg ICAgICAgLm1lbV9xdWFsaSAgPSAicmVhZG9ubHkiLAorICAgICAgICAgICAgLnN0YWdlcyAgICAg PSBWS19TSEFERVJfU1RBR0VfQ09NUFVURV9CSVQsCisgICAgICAgIH0sCisgICAgfTsKKyAgICBS RVQoZmZfdmtfc2hhZGVyX2FkZF9kZXNjcmlwdG9yX3NldCgmZnYtPnMsIHNoZCwgZGVzY19zZXQs IDIsIDAsIDApKTsKKworICAgIEdMU0xEKGZmX3NvdXJjZV9mZnYxX2VuY19zZXR1cF9jb21wKTsK KworICAgIFJFVChzcHYtPmNvbXBpbGVfc2hhZGVyKCZmdi0+cywgc3B2LCBzaGQsICZzcHZfZGF0 YSwgJnNwdl9sZW4sICJtYWluIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3B2X29w YXF1ZSkpOworICAgIFJFVChmZl92a19zaGFkZXJfbGluaygmZnYtPnMsIHNoZCwgc3B2X2RhdGEs IHNwdl9sZW4sICJtYWluIikpOworCisgICAgUkVUKGZmX3ZrX3NoYWRlcl9yZWdpc3Rlcl9leGVj KCZmdi0+cywgJmZ2LT5leGVjX3Bvb2wsIHNoZCkpOworCitmYWlsOgorICAgIGlmIChzcHZfb3Bh cXVlKQorICAgICAgICBzcHYtPmZyZWVfc2hhZGVyKHNwdiwgJnNwdl9vcGFxdWUpOworCisgICAg cmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBpbml0X3Jlc2V0X3NoYWRlcihBVkNvZGVjQ29u dGV4dCAqYXZjdHgsIEZGVmtTUElSVkNvbXBpbGVyICpzcHYpCit7CisgICAgaW50IGVycjsKKyAg ICBWdWxrYW5FbmNvZGVGRnYxQ29udGV4dCAqZnYgPSBhdmN0eC0+cHJpdl9kYXRhOworICAgIEZG VjFDb250ZXh0ICpmID0gJmZ2LT5jdHg7CisgICAgRkZWdWxrYW5TaGFkZXIgKnNoZCA9ICZmdi0+ cmVzZXQ7CisgICAgRkZWdWxrYW5EZXNjcmlwdG9yU2V0QmluZGluZyAqZGVzY19zZXQ7CisKKyAg ICB1aW50OF90ICpzcHZfZGF0YTsKKyAgICBzaXplX3Qgc3B2X2xlbjsKKyAgICB2b2lkICpzcHZf b3BhcXVlID0gTlVMTDsKKyAgICBpbnQgd2dfZGltID0gRkZNSU4oZnYtPnMucHJvcHMucHJvcGVy dGllcy5saW1pdHMubWF4Q29tcHV0ZVdvcmtHcm91cFNpemVbMF0sIDEwMjQpOworCisgICAgUkVU KGZmX3ZrX3NoYWRlcl9pbml0KCZmdi0+cywgc2hkLCAiZmZ2MV9yZXNldCIsCisgICAgICAgICAg ICAgICAgICAgICAgICAgIFZLX1NIQURFUl9TVEFHRV9DT01QVVRFX0JJVCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgKGNvbnN0IGNoYXIgKltdKSB7ICJHTF9FWFRfYnVmZmVyX3JlZmVyZW5j ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiR0xfRVhU X2J1ZmZlcl9yZWZlcmVuY2UyIiB9LCAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICB3Z19k aW0sIDEsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDApKTsKKworICAgIC8qIENvbW1v biBjb2RlYyBoZWFkZXIgKi8KKyAgICBHTFNMRChmZl9zb3VyY2VfY29tbW9uX2NvbXApOworCisg ICAgR0xTTEMoMCwgbGF5b3V0KHB1c2hfY29uc3RhbnQsIHNjYWxhcikgdW5pZm9ybSBwdXNoQ29u c3RhbnRzIHsgICAgICAgICAgICAgKTsKKyAgICBHTFNMRigxLCAgICB1aW50IGNvbnRleHRfY291 bnRbJWldOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsTUFYX1FVQU5U X1RBQkxFUyk7CisgICAgR0xTTEMoMSwgICAgdThidWYgc2xpY2Vfc3RhdGU7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBHTFNMQygxLCAgICB1aW50 IHBsYW5lX3N0YXRlX3NpemU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICApOworICAgIEdMU0xDKDEsICAgIHVpbnQ4X3QgY29kZWNfcGxhbmVzOyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgR0xTTEMoMSwgICAgdWludDhfdCBr ZXlfZnJhbWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsK KyAgICBHTFNMQygxLCAgICB1aW50OF90IHZlcnNpb247ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICApOworICAgIEdMU0xDKDEsICAgIHVpbnQ4X3QgbWljcm9f dmVyc2lvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAg R0xTTEMoMSwgICAgdWludDhfdCBwYWRkaW5nWzFdOyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKTsKKyAgICBHTFNMQygwLCB9OyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgIGZmX3Zr X3NoYWRlcl9hZGRfcHVzaF9jb25zdChzaGQsIDAsIHNpemVvZihGRnYxVmtSZXNldFBhcmFtZXRl cnMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19TSEFERVJfU1RBR0VfQ09N UFVURV9CSVQpOworCisgICAgYXZfYnByaW50Zigmc2hkLT5zcmMsICIjZGVmaW5lIE1BWF9RVUFO VF9UQUJMRVMgJWlcbiIsIE1BWF9RVUFOVF9UQUJMRVMpOworICAgIGF2X2JwcmludGYoJnNoZC0+ c3JjLCAiI2RlZmluZSBNQVhfQ09OVEVYVF9JTlBVVFMgJWlcbiIsIE1BWF9DT05URVhUX0lOUFVU Uyk7CisgICAgYXZfYnByaW50Zigmc2hkLT5zcmMsICIjZGVmaW5lIE1BWF9RVUFOVF9UQUJMRV9T SVpFICVpXG4iLCBNQVhfUVVBTlRfVEFCTEVfU0laRSk7CisKKyAgICBkZXNjX3NldCA9IChGRlZ1 bGthbkRlc2NyaXB0b3JTZXRCaW5kaW5nIFtdKSB7CisgICAgICAgIHsKKyAgICAgICAgICAgIC5u YW1lICAgICAgICA9ICJyYW5nZWNvZGVyX3N0YXRpY19idWYiLAorICAgICAgICAgICAgLnR5cGUg ICAgICAgID0gVktfREVTQ1JJUFRPUl9UWVBFX1VOSUZPUk1fQlVGRkVSLAorICAgICAgICAgICAg LnN0YWdlcyAgICAgID0gVktfU0hBREVSX1NUQUdFX0NPTVBVVEVfQklULAorICAgICAgICAgICAg Lm1lbV9sYXlvdXQgID0gInNjYWxhciIsCisgICAgICAgICAgICAuYnVmX2NvbnRlbnQgPSAidWlu dDhfdCB6ZXJvX29uZV9zdGF0ZVs1MTJdOyIsCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAg ICAgICAgIC5uYW1lICAgICAgICA9ICJxdWFudF9idWYiLAorICAgICAgICAgICAgLnR5cGUgICAg ICAgID0gVktfREVTQ1JJUFRPUl9UWVBFX1VOSUZPUk1fQlVGRkVSLAorICAgICAgICAgICAgLnN0 YWdlcyAgICAgID0gVktfU0hBREVSX1NUQUdFX0NPTVBVVEVfQklULAorICAgICAgICAgICAgLm1l bV9sYXlvdXQgID0gInNjYWxhciIsCisgICAgICAgICAgICAuYnVmX2NvbnRlbnQgPSAiaW50MTZf dCBxdWFudF90YWJsZVtNQVhfUVVBTlRfVEFCTEVTXSIKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICJbTUFYX0NPTlRFWFRfSU5QVVRTXVtNQVhfUVVBTlRfVEFCTEVfU0laRV07IiwKKyAgICAg ICAgfSwKKyAgICB9OworICAgIFJFVChmZl92a19zaGFkZXJfYWRkX2Rlc2NyaXB0b3Jfc2V0KCZm di0+cywgc2hkLCBkZXNjX3NldCwgMiwgMSwgMCkpOworCisgICAgZGVmaW5lX3NoYXJlZF9jb2Rl KGF2Y3R4LCBzaGQpOworCisgICAgZGVzY19zZXQgPSAoRkZWdWxrYW5EZXNjcmlwdG9yU2V0Qmlu ZGluZyBbXSkgeworICAgICAgICB7CisgICAgICAgICAgICAubmFtZSAgICAgICAgPSAic2xpY2Vf ZGF0YV9idWYiLAorICAgICAgICAgICAgLnR5cGUgICAgICAgID0gVktfREVTQ1JJUFRPUl9UWVBF X1NUT1JBR0VfQlVGRkVSLAorICAgICAgICAgICAgLm1lbV9xdWFsaSAgID0gInJlYWRvbmx5IiwK KyAgICAgICAgICAgIC5zdGFnZXMgICAgICA9IFZLX1NIQURFUl9TVEFHRV9DT01QVVRFX0JJVCwK KyAgICAgICAgICAgIC5idWZfY29udGVudCA9ICJTbGljZUNvbnRleHQgc2xpY2VfY3R4IiwKKyAg ICAgICAgICAgIC5idWZfZWxlbXMgICA9IGYtPm1heF9zbGljZV9jb3VudCwKKyAgICAgICAgfSwK KyAgICB9OworICAgIFJFVChmZl92a19zaGFkZXJfYWRkX2Rlc2NyaXB0b3Jfc2V0KCZmdi0+cywg c2hkLCBkZXNjX3NldCwgMSwgMCwgMCkpOworCisgICAgR0xTTEQoZmZfc291cmNlX2ZmdjFfcmVz ZXRfY29tcCk7CisKKyAgICBSRVQoc3B2LT5jb21waWxlX3NoYWRlcigmZnYtPnMsIHNwdiwgc2hk LCAmc3B2X2RhdGEsICZzcHZfbGVuLCAibWFpbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJnNwdl9vcGFxdWUpKTsKKyAgICBSRVQoZmZfdmtfc2hhZGVyX2xpbmsoJmZ2LT5zLCBzaGQs IHNwdl9kYXRhLCBzcHZfbGVuLCAibWFpbiIpKTsKKworICAgIFJFVChmZl92a19zaGFkZXJfcmVn aXN0ZXJfZXhlYygmZnYtPnMsICZmdi0+ZXhlY19wb29sLCBzaGQpKTsKKworZmFpbDoKKyAgICBp ZiAoc3B2X29wYXF1ZSkKKyAgICAgICAgc3B2LT5mcmVlX3NoYWRlcihzcHYsICZzcHZfb3BhcXVl KTsKKworICAgIHJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgaW5pdF9lbmNvZGVfc2hhZGVy KEFWQ29kZWNDb250ZXh0ICphdmN0eCwgRkZWa1NQSVJWQ29tcGlsZXIgKnNwdikKK3sKKyAgICBp bnQgZXJyOworICAgIFZ1bGthbkVuY29kZUZGdjFDb250ZXh0ICpmdiA9IGF2Y3R4LT5wcml2X2Rh dGE7CisgICAgRkZWMUNvbnRleHQgKmYgPSAmZnYtPmN0eDsKKyAgICBGRlZ1bGthblNoYWRlciAq c2hkID0gJmZ2LT5lbmM7CisgICAgRkZWdWxrYW5EZXNjcmlwdG9yU2V0QmluZGluZyAqZGVzY19z ZXQ7CisKKyAgICB1aW50OF90ICpzcHZfZGF0YTsKKyAgICBzaXplX3Qgc3B2X2xlbjsKKyAgICB2 b2lkICpzcHZfb3BhcXVlID0gTlVMTDsKKyAgICBpbnQgdXNlX2NhY2hlZF9yZWFkZXIgPSBmdi0+ Y3R4LmFjICE9IEFDX0dPTE9NQl9SSUNFOworCisgICAgUkVUKGZmX3ZrX3NoYWRlcl9pbml0KCZm di0+cywgc2hkLCAiZmZ2MV9lbmMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBWS19TSEFE RVJfU1RBR0VfQ09NUFVURV9CSVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBj aGFyICpbXSkgeyAiR0xfRVhUX2J1ZmZlcl9yZWZlcmVuY2UiLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIkdMX0VYVF9idWZmZXJfcmVmZXJlbmNlMiIgfSwg MiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlX2NhY2hlZF9yZWFkZXIgPyBDT05URVhU X1NJWkUgOiAxLCAxLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAwKSk7CisKKyAgICAv KiBDb21tb24gY29kZWMgaGVhZGVyICovCisgICAgR0xTTEQoZmZfc291cmNlX2NvbW1vbl9jb21w KTsKKworICAgIGFkZF9wdXNoX2RhdGEoc2hkKTsKKworICAgIGF2X2JwcmludGYoJnNoZC0+c3Jj LCAiI2RlZmluZSBNQVhfUVVBTlRfVEFCTEVTICVpXG4iLCBNQVhfUVVBTlRfVEFCTEVTKTsKKyAg ICBhdl9icHJpbnRmKCZzaGQtPnNyYywgIiNkZWZpbmUgTUFYX0NPTlRFWFRfSU5QVVRTICVpXG4i LCBNQVhfQ09OVEVYVF9JTlBVVFMpOworICAgIGF2X2JwcmludGYoJnNoZC0+c3JjLCAiI2RlZmlu ZSBNQVhfUVVBTlRfVEFCTEVfU0laRSAlaVxuIiwgTUFYX1FVQU5UX1RBQkxFX1NJWkUpOworCisg ICAgaWYgKHVzZV9jYWNoZWRfcmVhZGVyKQorICAgICAgICBhdl9icHJpbnRmKCZzaGQtPnNyYywg IiNkZWZpbmUgQ0FDSEVEX1NZTUJPTF9SRUFERVIgMVxuIik7CisKKyAgICBkZXNjX3NldCA9IChG RlZ1bGthbkRlc2NyaXB0b3JTZXRCaW5kaW5nIFtdKSB7CisgICAgICAgIHsKKyAgICAgICAgICAg IC5uYW1lICAgICAgICA9ICJyYW5nZWNvZGVyX3N0YXRpY19idWYiLAorICAgICAgICAgICAgLnR5 cGUgICAgICAgID0gVktfREVTQ1JJUFRPUl9UWVBFX1VOSUZPUk1fQlVGRkVSLAorICAgICAgICAg ICAgLnN0YWdlcyAgICAgID0gVktfU0hBREVSX1NUQUdFX0NPTVBVVEVfQklULAorICAgICAgICAg ICAgLm1lbV9sYXlvdXQgID0gInNjYWxhciIsCisgICAgICAgICAgICAuYnVmX2NvbnRlbnQgPSAi dWludDhfdCB6ZXJvX29uZV9zdGF0ZVs1MTJdOyIsCisgICAgICAgIH0sCisgICAgICAgIHsKKyAg ICAgICAgICAgIC5uYW1lICAgICAgICA9ICJxdWFudF9idWYiLAorICAgICAgICAgICAgLnR5cGUg ICAgICAgID0gVktfREVTQ1JJUFRPUl9UWVBFX1VOSUZPUk1fQlVGRkVSLAorICAgICAgICAgICAg LnN0YWdlcyAgICAgID0gVktfU0hBREVSX1NUQUdFX0NPTVBVVEVfQklULAorICAgICAgICAgICAg Lm1lbV9sYXlvdXQgID0gInNjYWxhciIsCisgICAgICAgICAgICAuYnVmX2NvbnRlbnQgPSAiaW50 MTZfdCBxdWFudF90YWJsZVtNQVhfUVVBTlRfVEFCTEVTXSIKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICJbTUFYX0NPTlRFWFRfSU5QVVRTXVtNQVhfUVVBTlRfVEFCTEVfU0laRV07IiwKKyAg ICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgLm5hbWUgICAgICAgID0gImNyY19pZWVl X2J1ZiIsCisgICAgICAgICAgICAudHlwZSAgICAgICAgPSBWS19ERVNDUklQVE9SX1RZUEVfVU5J Rk9STV9CVUZGRVIsCisgICAgICAgICAgICAuc3RhZ2VzICAgICAgPSBWS19TSEFERVJfU1RBR0Vf Q09NUFVURV9CSVQsCisgICAgICAgICAgICAubWVtX2xheW91dCAgPSAic2NhbGFyIiwKKyAgICAg ICAgICAgIC5idWZfY29udGVudCA9ICJ1aW50MzJfdCBjcmNfaWVlZVsyNTZdOyIsCisgICAgICAg IH0sCisgICAgfTsKKworICAgIFJFVChmZl92a19zaGFkZXJfYWRkX2Rlc2NyaXB0b3Jfc2V0KCZm di0+cywgc2hkLCBkZXNjX3NldCwgMywgMSwgMCkpOworCisgICAgZGVmaW5lX3NoYXJlZF9jb2Rl KGF2Y3R4LCBzaGQpOworCisgICAgZGVzY19zZXQgPSAoRkZWdWxrYW5EZXNjcmlwdG9yU2V0Qmlu ZGluZyBbXSkgeworICAgICAgICB7CisgICAgICAgICAgICAubmFtZSAgICAgICAgPSAic2xpY2Vf ZGF0YV9idWYiLAorICAgICAgICAgICAgLnR5cGUgICAgICAgID0gVktfREVTQ1JJUFRPUl9UWVBF X1NUT1JBR0VfQlVGRkVSLAorICAgICAgICAgICAgLnN0YWdlcyAgICAgID0gVktfU0hBREVSX1NU QUdFX0NPTVBVVEVfQklULAorICAgICAgICAgICAgLmJ1Zl9jb250ZW50ID0gIlNsaWNlQ29udGV4 dCBzbGljZV9jdHgiLAorICAgICAgICAgICAgLmJ1Zl9lbGVtcyAgID0gZi0+bWF4X3NsaWNlX2Nv dW50LAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAubmFtZSAgICAgICA9ICJz cmMiLAorICAgICAgICAgICAgLnR5cGUgICAgICAgPSBWS19ERVNDUklQVE9SX1RZUEVfU1RPUkFH RV9JTUFHRSwKKyAgICAgICAgICAgIC5kaW1lbnNpb25zID0gMiwKKyAgICAgICAgICAgIC5tZW1f bGF5b3V0ID0gZmZfdmtfc2hhZGVyX3JlcF9mbXQoZnYtPnMuZnJhbWVzLT5zd19mb3JtYXQsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ2LT5yZXBfZm10 KSwKKyAgICAgICAgICAgIC5lbGVtcyAgICAgID0gYXZfcGl4X2ZtdF9jb3VudF9wbGFuZXMoZnYt PnMuZnJhbWVzLT5zd19mb3JtYXQpLAorICAgICAgICAgICAgLm1lbV9xdWFsaSAgPSAicmVhZG9u bHkiLAorICAgICAgICAgICAgLnN0YWdlcyAgICAgPSBWS19TSEFERVJfU1RBR0VfQ09NUFVURV9C SVQsCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgIC5uYW1lICAgICAgICA9ICJy ZXN1bHRzX2RhdGFfYnVmIiwKKyAgICAgICAgICAgIC50eXBlICAgICAgICA9IFZLX0RFU0NSSVBU T1JfVFlQRV9TVE9SQUdFX0JVRkZFUiwKKyAgICAgICAgICAgIC5zdGFnZXMgICAgICA9IFZLX1NI QURFUl9TVEFHRV9DT01QVVRFX0JJVCwKKyAgICAgICAgICAgIC5tZW1fcXVhbGkgICA9ICJ3cml0 ZW9ubHkiLAorICAgICAgICAgICAgLmJ1Zl9jb250ZW50ID0gInVpbnQ2NF90IHNsaWNlX3Jlc3Vs dHNbMjA0OF07IiwKKyAgICAgICAgfSwKKyAgICAgICAgeyAvKiBwbGFjZSBob2xkZXIgZm9yIGRl c2Nfc2V0WzNdICovCisgICAgICAgIH0sCisgICAgfTsKKyAgICBpZiAoZnYtPmlzX3JnYikgewor ICAgICAgICBBVkhXRnJhbWVzQ29udGV4dCAqaW50ZXJtZWRpYXRlX2ZyYW1lc19jdHg7CisgICAg ICAgIGludGVybWVkaWF0ZV9mcmFtZXNfY3R4ID0gKEFWSFdGcmFtZXNDb250ZXh0ICopZnYtPmlu dGVybWVkaWF0ZV9mcmFtZXNfcmVmLT5kYXRhOworICAgICAgICBkZXNjX3NldFszXSA9IChGRlZ1 bGthbkRlc2NyaXB0b3JTZXRCaW5kaW5nKSB7CisgICAgICAgICAgICAubmFtZSAgICAgICA9ICJ0 bXAiLAorICAgICAgICAgICAgLnR5cGUgICAgICAgPSBWS19ERVNDUklQVE9SX1RZUEVfU1RPUkFH RV9JTUFHRSwKKyAgICAgICAgICAgIC5kaW1lbnNpb25zID0gMiwKKyAgICAgICAgICAgIC5tZW1f bGF5b3V0ID0gZmZfdmtfc2hhZGVyX3JlcF9mbXQoaW50ZXJtZWRpYXRlX2ZyYW1lc19jdHgtPnN3 X2Zvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg RkZfVktfUkVQX05BVElWRSksCisgICAgICAgICAgICAuc3RhZ2VzICAgICA9IFZLX1NIQURFUl9T VEFHRV9DT01QVVRFX0JJVCwKKyAgICAgICAgfTsKKyAgICB9CisgICAgUkVUKGZmX3ZrX3NoYWRl cl9hZGRfZGVzY3JpcHRvcl9zZXQoJmZ2LT5zLCBzaGQsIGRlc2Nfc2V0LCAzICsgZnYtPmlzX3Jn YiwgMCwgMCkpOworCisgICAgR0xTTEQoZmZfc291cmNlX2ZmdjFfZW5jX2NvbXApOworCisgICAg UkVUKHNwdi0+Y29tcGlsZV9zaGFkZXIoJmZ2LT5zLCBzcHYsIHNoZCwgJnNwdl9kYXRhLCAmc3B2 X2xlbiwgIm1haW4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzcHZfb3BhcXVlKSk7 CisgICAgUkVUKGZmX3ZrX3NoYWRlcl9saW5rKCZmdi0+cywgc2hkLCBzcHZfZGF0YSwgc3B2X2xl biwgIm1haW4iKSk7CisKKyAgICBSRVQoZmZfdmtfc2hhZGVyX3JlZ2lzdGVyX2V4ZWMoJmZ2LT5z LCAmZnYtPmV4ZWNfcG9vbCwgc2hkKSk7CisKK2ZhaWw6CisgICAgaWYgKHNwdl9vcGFxdWUpCisg ICAgICAgIHNwdi0+ZnJlZV9zaGFkZXIoc3B2LCAmc3B2X29wYXF1ZSk7CisKKyAgICByZXR1cm4g ZXJyOworfQorCitzdGF0aWMgYXZfY29sZCBpbnQgdnVsa2FuX2VuY29kZV9mZnYxX2luaXQoQVZD b2RlY0NvbnRleHQgKmF2Y3R4KQoreworICAgIGludCBlcnI7CisgICAgc2l6ZV90IG1heHNpemUs IG1heF9oZWFwX3NpemUsIG1heF9ob3N0X3NpemU7CisgICAgVnVsa2FuRW5jb2RlRkZ2MUNvbnRl eHQgKmZ2ID0gYXZjdHgtPnByaXZfZGF0YTsKKyAgICBGRlYxQ29udGV4dCAqZiA9ICZmdi0+Y3R4 OworICAgIEZGVmtTUElSVkNvbXBpbGVyICpzcHY7CisKKyAgICBpZiAoKGVyciA9IGZmX2ZmdjFf Y29tbW9uX2luaXQoYXZjdHgsIGYpKSA8IDApCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICBp ZiAoZi0+YWMgPT0gMSkKKyAgICAgICAgZi0+YWMgPSBBQ19SQU5HRV9DVVNUT01fVEFCOworCisg ICAgZXJyID0gZmZfZmZ2MV9lbmNvZGVfc2V0dXBfcGxhbmVfaW5mbyhhdmN0eCwgYXZjdHgtPnN3 X3BpeF9mbXQpOworICAgIGlmIChlcnIgPCAwKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAg LyogVGFyZ2V0IHZlcnNpb24gMyBieSBkZWZhdWx0ICovCisgICAgZi0+dmVyc2lvbiA9IDM7CisK KyAgICBlcnIgPSBmZl9mZnYxX2VuY29kZV9pbml0KGF2Y3R4KTsKKyAgICBpZiAoZXJyIDwgMCkK KyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIC8qIFJpY2UgY29kaW5nIGRpZCBub3Qgc3VwcG9y dCBoaWdoIGJpdCBkZXB0aHMgKi8KKyAgICBpZiAoZi0+Yml0c19wZXJfcmF3X3NhbXBsZSA+IChm LT52ZXJzaW9uID4gMyA/IDE2IDogOCkpIHsKKyAgICAgICAgaWYgKGYtPmFjID09IEFDX0dPTE9N Ql9SSUNFKSB7CisgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19XQVJOSU5HLCAiYml0 c19wZXJfcmF3X3NhbXBsZSA+IDgsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICJmb3JjaW5nIHJhbmdlIGNvZGVyXG4iKTsKKyAgICAgICAgICAgIGYtPmFjID0g QUNfUkFOR0VfQ1VTVE9NX1RBQjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChmLT52ZXJz aW9uIDwgNCAmJiBhdmN0eC0+Z29wX3NpemUgPiAxKSB7CisgICAgICAgIGF2X2xvZyhhdmN0eCwg QVZfTE9HX0VSUk9SLCAiVXNpbmcgaW50ZXIgZnJhbWVzIHJlcXVpcmVzIHZlcnNpb24gNCAoLWxl dmVsIDQpXG4iKTsKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgfQor CisgICAgaWYgKGYtPnZlcnNpb24gPT0gNCAmJiBhdmN0eC0+c3RyaWN0X3N0ZF9jb21wbGlhbmNl ID4gRkZfQ09NUExJQU5DRV9FWFBFUklNRU5UQUwpIHsKKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBB Vl9MT0dfRVJST1IsICJWZXJzaW9uIDQgaXMgZXhwZXJpbWVudGFsIGFuZCByZXF1aXJlcyAtc3Ry aWN0IC0yXG4iKTsKKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAg IH0KKworICAgIC8qIFdlIHRhcmdldCB2ZXJzaW9uIDQuMyAqLworICAgIGlmIChmLT52ZXJzaW9u ID09IDQgJiYgZi0+bWljcm9fdmVyc2lvbiA+IDQpCisgICAgICAgIGYtPm1pY3JvX3ZlcnNpb24g PSAzOworCisgICAgLy9pZiAoZnYtPmN0eC5hYyA9PSBBQ19HT0xPTUJfUklDRSkgeworICAgIGlm ICgwKSB7CisgICAgICAgIGludCB3X2EgPSBGRkFMSUdOKGF2Y3R4LT53aWR0aCwgTEdfQUxJR05f Vyk7CisgICAgICAgIGludCBoX2EgPSBGRkFMSUdOKGF2Y3R4LT5oZWlnaHQsIExHX0FMSUdOX0gp OworICAgICAgICBpbnQgd19zbCwgaF9zbDsKKworICAgICAgICAvKiBQaXhlbHMgcGVyIGxpbmUg YW4gaW52b2NhdGlvbiBoYW5kbGVzICovCisgICAgICAgIGludCBwcGkgPSAwOworICAgICAgICAv KiBDaHVuayBzaXplICovCisgICAgICAgIGludCBjaHVua3MgPSAwOworCisgICAgICAgIGRvIHsK KyAgICAgICAgICAgIGlmIChwcGkgPCAyKQorICAgICAgICAgICAgICAgIHBwaSsrOworICAgICAg ICAgICAgY2h1bmtzKys7CisgICAgICAgICAgICB3X3NsID0gd19hIC8gKExHX0FMSUdOX1cqcHBp KTsKKyAgICAgICAgICAgIGhfc2wgPSBoX2EgLyAoTEdfQUxJR05fSCpjaHVua3MpOworICAgICAg ICB9IHdoaWxlICh3X3NsID4gTUFYX1NMSUNFUyAvIGhfc2wpOworCisgICAgICAgIGF2X2xvZyhh dmN0eCwgQVZfTE9HX1ZFUkJPU0UsICJTbGljZSBjb25maWc6ICVpeCVpLCAlaSB0b3RhbFxuIiwK KyAgICAgICAgICAgICAgIExHX0FMSUdOX1cqcHBpLCBMR19BTElHTl9IKmNodW5rcywgd19zbCpo X3NsKTsKKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfVkVSQk9TRSwgIkhvcml6b250YWwg c2xpY2VzOiAlaSAoJWkgcGl4ZWxzIHBlciBpbnZvYylcbiIsCisgICAgICAgICAgICAgICB3X3Ns LCBwcGkpOworICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19WRVJCT1NFLCAiVmVydGljYWwg c2xpY2VzOiAlaSAoJWkgY2h1bmtzKVxuIiwKKyAgICAgICAgICAgICAgIGhfc2wsIGNodW5rcyk7 CisKKyAgICAgICAgZi0+bnVtX2hfc2xpY2VzID0gd19zbDsKKyAgICAgICAgZi0+bnVtX3Zfc2xp Y2VzID0gaF9zbDsKKworICAgICAgICBmdi0+cHBpID0gcHBpOworICAgICAgICBmdi0+Y2h1bmtz ID0gY2h1bmtzOworICAgIH0gZWxzZSB7CisgICAgICAgIGYtPm51bV9oX3NsaWNlcyA9IGZ2LT5u dW1faF9zbGljZXM7CisgICAgICAgIGYtPm51bV92X3NsaWNlcyA9IGZ2LT5udW1fdl9zbGljZXM7 CisKKyAgICAgICAgaWYgKGYtPm51bV9oX3NsaWNlcyA8PSAwICYmIGYtPm51bV92X3NsaWNlcyA8 PSAwKSB7CisgICAgICAgICAgICBpZiAoYXZjdHgtPnNsaWNlcykgeworICAgICAgICAgICAgICAg IGVyciA9IGZmX2ZmdjFfZW5jb2RlX2RldGVybWluZV9zbGljZXMoYXZjdHgpOworICAgICAgICAg ICAgICAgIGlmIChlcnIgPCAwKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyOworICAg ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBmLT5udW1faF9zbGljZXMgPSAzMjsK KyAgICAgICAgICAgICAgICBmLT5udW1fdl9zbGljZXMgPSAzMjsKKyAgICAgICAgICAgIH0KKyAg ICAgICAgfSBlbHNlIGlmIChmLT5udW1faF9zbGljZXMgJiYgZi0+bnVtX3Zfc2xpY2VzIDw9IDAp IHsKKyAgICAgICAgICAgIGYtPm51bV92X3NsaWNlcyA9IE1BWF9TTElDRVMgLyBmLT5udW1faF9z bGljZXM7CisgICAgICAgIH0gZWxzZSBpZiAoZi0+bnVtX3Zfc2xpY2VzICYmIGYtPm51bV9oX3Ns aWNlcyA8PSAwKSB7CisgICAgICAgICAgICBmLT5udW1faF9zbGljZXMgPSBNQVhfU0xJQ0VTIC8g Zi0+bnVtX3Zfc2xpY2VzOworICAgICAgICB9CisKKyAgICAgICAgZi0+bnVtX2hfc2xpY2VzID0g RkZNSU4oZi0+bnVtX2hfc2xpY2VzLCBhdmN0eC0+d2lkdGgpOworICAgICAgICBmLT5udW1fdl9z bGljZXMgPSBGRk1JTihmLT5udW1fdl9zbGljZXMsIGF2Y3R4LT5oZWlnaHQpOworCisgICAgICAg IGlmIChmLT5udW1faF9zbGljZXMgKiBmLT5udW1fdl9zbGljZXMgPiBNQVhfU0xJQ0VTKSB7Cisg ICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIlRvbyBtYW55IHNsaWNlcyAo JWkpLCBtYXhpbXVtIHN1cHBvcnRlZCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgImJ5IHRoZSBzdGFuZGFyZCBpcyAlaVxuIiwKKyAgICAgICAgICAgICAgICAgICBm LT5udW1faF9zbGljZXMgKiBmLT5udW1fdl9zbGljZXMsIE1BWF9TTElDRVMpOworICAgICAgICAg ICAgcmV0dXJuIEFWRVJST1JfUEFUQ0hXRUxDT01FOworICAgICAgICB9CisgICAgfQorCisgICAg Zi0+bWF4X3NsaWNlX2NvdW50ID0gZi0+bnVtX2hfc2xpY2VzICogZi0+bnVtX3Zfc2xpY2VzOwor CisgICAgaWYgKChlcnIgPSBmZl9mZnYxX3dyaXRlX2V4dHJhZGF0YShhdmN0eCkpIDwgMCkKKyAg ICAgICAgcmV0dXJuIGVycjsKKworICAgIGlmIChmLT52ZXJzaW9uIDwgNCkgeworICAgICAgICBp ZiAoKChmLT5jaHJvbWFfaF9zaGlmdCA+IDApICYmIChhdmN0eC0+d2lkdGggJSAoNjQgPDwgZi0+ Y2hyb21hX2hfc2hpZnQpKSkgfHwKKyAgICAgICAgICAgICgoZi0+Y2hyb21hX3Zfc2hpZnQgPiAw KSAmJiAoYXZjdHgtPmhlaWdodCAlICg2NCA8PCBmLT5jaHJvbWFfdl9zaGlmdCkpKSkgeworICAg ICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJFbmNvZGluZyBmcmFtZXMgd2l0 aCBzdWJzYW1wbGluZyBhbmQgdW5hbGlnbmVkICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAiZGltZW5zaW9ucyBpcyBvbmx5IHN1cHBvcnRlZCBpbiB2ZXJzaW9uIDQg KC1sZXZlbCA0KVxuIik7CisgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9QQVRDSFdFTENPTUU7 CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoZnYtPmZvcmNlX3BjbSkgeworICAgICAgICBp ZiAoZi0+dmVyc2lvbiA8IDQpIHsKKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VS Uk9SLCAiUENNIGNvZGluZyBvbmx5IHN1cHBvcnRlZCBieSB2ZXJzaW9uIDQgKC1sZXZlbCA0KVxu Iik7CisgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICAgICAgfSBl bHNlIGlmIChmLT5hYyA9PSBBQ19HT0xPTUJfUklDRSkgeworICAgICAgICAgICAgYXZfbG9nKGF2 Y3R4LCBBVl9MT0dfRVJST1IsICJQQ00gY29kaW5nIHJlcXVpcmVzIHJhbmdlIGNvZGluZ1xuIik7 CisgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICAgICAgfQorICAg IH0KKworICAgIC8qIEluaXQgVnVsa2FuICovCisgICAgZXJyID0gZmZfdmtfaW5pdCgmZnYtPnMs IGF2Y3R4LCBOVUxMLCBhdmN0eC0+aHdfZnJhbWVzX2N0eCk7CisgICAgaWYgKGVyciA8IDApCisg ICAgICAgIHJldHVybiBlcnI7CisKKyAgICBmdi0+cWYgPSBmZl92a19xZl9maW5kKCZmdi0+cywg VktfUVVFVUVfQ09NUFVURV9CSVQsIDApOworICAgIGlmICghZnYtPnFmKSB7CisgICAgICAgIGF2 X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiRGV2aWNlIGhhcyBubyBjb21wdXRlIHF1ZXVlcyFc biIpOworICAgICAgICByZXR1cm4gZXJyOworICAgIH0KKworICAgIC8qIFRyeSB0byBtZWFzdXJl IFZSQU0gc2l6ZSAqLworICAgIG1heF9oZWFwX3NpemUgPSAwOworICAgIG1heF9ob3N0X3NpemUg PSAwOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZnYtPnMubXByb3BzLm1lbW9yeUhlYXBDb3Vu dDsgaSsrKSB7CisgICAgICAgIGlmIChmdi0+cy5tcHJvcHMubWVtb3J5SGVhcHNbaV0uZmxhZ3Mg JiBWS19NRU1PUllfSEVBUF9ERVZJQ0VfTE9DQUxfQklUKQorICAgICAgICAgICAgbWF4X2hlYXBf c2l6ZSA9IEZGTUFYKGZ2LT5tYXhfaGVhcF9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGZ2LT5zLm1wcm9wcy5tZW1vcnlIZWFwc1tpXS5zaXplKTsKKyAgICAgICAgaWYg KCEoZnYtPnMubXByb3BzLm1lbW9yeUhlYXBzW2ldLmZsYWdzICYgVktfTUVNT1JZX0hFQVBfREVW SUNFX0xPQ0FMX0JJVCkpCisgICAgICAgICAgICBtYXhfaG9zdF9zaXplID0gRkZNQVgobWF4X2hv c3Rfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdi0+cy5tcHJvcHMu bWVtb3J5SGVhcHNbaV0uc2l6ZSk7CisgICAgfQorICAgIGZ2LT5tYXhfaGVhcF9zaXplID0gbWF4 X2hlYXBfc2l6ZTsKKworICAgIG1heHNpemUgPSBmZl9mZnYxX2VuY29kZV9idWZmZXJfc2l6ZShh dmN0eCk7CisgICAgaWYgKG1heHNpemUgPiBmdi0+cy5wcm9wc18xMS5tYXhNZW1vcnlBbGxvY2F0 aW9uU2l6ZSkgeworICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19XQVJOSU5HLCAiRW5jb2Rp bmcgYnVmZmVyIHNpemUgKCUiU0laRV9TUEVDSUZJRVIiKSBsYXJnZXIgIgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAidGhhbiBtYXhpbXVtIGRldmljZSBhbGxvY2F0aW9u ICglIlNJWkVfU1BFQ0lGSUVSIiksIGNsaXBwaW5nXG4iLAorICAgICAgICAgICAgICAgbWF4c2l6 ZSwgZnYtPnMucHJvcHNfMTEubWF4TWVtb3J5QWxsb2NhdGlvblNpemUpOworICAgICAgICBtYXhz aXplID0gZnYtPnMucHJvcHNfMTEubWF4TWVtb3J5QWxsb2NhdGlvblNpemU7CisgICAgfQorCisg ICAgaWYgKG1heF9oZWFwX3NpemUgPCBtYXhzaXplKSB7CisgICAgICAgIGF2X2xvZyhhdmN0eCwg QVZfTE9HX1dBUk5JTkcsICJFbmNvZGluZyBidWZmZXIgKCUiU0laRV9TUEVDSUZJRVIiKSBsYXJn ZXIgdGhhbiBWUkFNICglIlNJWkVfU1BFQ0lGSUVSIiksICIKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgInVzaW5nIGhvc3QgbWVtb3J5IChzbG93ZXIpXG4iLAorICAgICAg ICAgICAgICAgbWF4c2l6ZSwgZnYtPm1heF9oZWFwX3NpemUpOworCisgICAgICAgIC8qIEtlZXAg MS8ydGggb2YgUkFNIGFzIGhlYWRyb29tICovCisgICAgICAgIG1heF9oZWFwX3NpemUgPSBtYXhf aG9zdF9zaXplIC0gKG1heF9ob3N0X3NpemUgPj4gMSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg LyogS2VlcCAxLzh0aCBvZiBWUkFNIGFzIGhlYWRyb29tICovCisgICAgICAgIG1heF9oZWFwX3Np emUgPSBtYXhfaGVhcF9zaXplIC0gKG1heF9oZWFwX3NpemUgPj4gMyk7CisgICAgfQorCisgICAg YXZfbG9nKGF2Y3R4LCBBVl9MT0dfSU5GTywgIkFzeW5jIGJ1ZmZlcnM6ICUiU0laRV9TUEVDSUZJ RVIiTWlCIHBlciBjb250ZXh0LCAlIlNJWkVfU1BFQ0lGSUVSIk1pQiB0b3RhbCwgZGVwdGg6ICVp XG4iLAorICAgICAgICAgICBtYXhzaXplIC8gKDEwMjQqMTAyNCksCisgICAgICAgICAgIChmdi0+ YXN5bmNfZGVwdGggKiBtYXhzaXplKSAvICgxMDI0KjEwMjQpLAorICAgICAgICAgICBmdi0+YXN5 bmNfZGVwdGgpOworCisgICAgZXJyID0gZmZfdmtfZXhlY19wb29sX2luaXQoJmZ2LT5zLCBmdi0+ cWYsICZmdi0+ZXhlY19wb29sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ2LT5h c3luY19kZXB0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLCBOVUxM KTsKKyAgICBpZiAoZXJyIDwgMCkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIGZ2LT50cmFu c2Zlcl9xZiA9IGZmX3ZrX3FmX2ZpbmQoJmZ2LT5zLCBWS19RVUVVRV9UUkFOU0ZFUl9CSVQsIDAp OworICAgIGlmICghZnYtPnRyYW5zZmVyX3FmKSB7CisgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZf TE9HX0VSUk9SLCAiRGV2aWNlIGhhcyBubyB0cmFuc2ZlciBxdWV1ZXMhXG4iKTsKKyAgICAgICAg cmV0dXJuIGVycjsKKyAgICB9CisKKyAgICBlcnIgPSBmZl92a19leGVjX3Bvb2xfaW5pdCgmZnYt PnMsIGZ2LT50cmFuc2Zlcl9xZiwgJmZ2LT50cmFuc2Zlcl9leGVjX3Bvb2wsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw LCAwLCAwLCBOVUxMKTsKKyAgICBpZiAoZXJyIDwgMCkKKyAgICAgICAgcmV0dXJuIGVycjsKKwor ICAgIHNwdiA9IGZmX3ZrX3NwaXJ2X2luaXQoKTsKKyAgICBpZiAoIXNwdikgeworICAgICAgICBh dl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIlVuYWJsZSB0byBpbml0aWFsaXplIFNQSVItViBj b21waWxlciFcbiIpOworICAgICAgICByZXR1cm4gQVZFUlJPUl9FWFRFUk5BTDsKKyAgICB9CisK KyAgICAvKiBEZXRlY3QgdGhlIHNwZWNpYWwgUkdCIGNvZGluZyBtb2RlICovCisgICAgZnYtPmlz X3JnYiA9ICEoZi0+Y29sb3JzcGFjZSA9PSAwICYmIGF2Y3R4LT5zd19waXhfZm10ICE9IEFWX1BJ WF9GTVRfWUE4KSAmJgorICAgICAgICAgICAgICAgICAhKGF2Y3R4LT5zd19waXhfZm10ID09IEFW X1BJWF9GTVRfWUE4KTsKKworICAgIC8qIGJpdHNfcGVyX3Jhd19zYW1wbGUgdXNlIHJlZ3VsYXIg dW5zaWduZWQgcmVwcmVzZW50YXRpb24sCisgICAgICogYnV0IGluIGhpZ2hlciBiaXQgZGVwdGhz LCB0aGUgZGF0YSBpcyBjYXN0ZWQgdG8gaW50MTZfdCAqLworICAgIGZ2LT5yZXBfZm10ID0gRkZf VktfUkVQX1VJTlQ7CisgICAgaWYgKCFmdi0+aXNfcmdiICYmIGYtPmJpdHNfcGVyX3Jhd19zYW1w bGUgPiA4KQorICAgICAgICBmdi0+cmVwX2ZtdCA9IEZGX1ZLX1JFUF9JTlQ7CisKKyAgICAvKiBJ bml0IHJjdCBzZWFyY2ggc2hhZGVyICovCisgICAgZnYtPm9wdGltaXplX3JjdCA9IGZ2LT5pc19y Z2IgJiYgZi0+dmVyc2lvbiA+PSA0ICYmCisgICAgICAgICAgICAgICAgICAgICAgICFmdi0+Zm9y Y2VfcGNtICYmIGZ2LT5vcHRpbWl6ZV9yY3Q7CisgICAgaWYgKGZ2LT5vcHRpbWl6ZV9yY3QpIHsK KyAgICAgICAgZXJyID0gaW5pdF9yY3Rfc2VhcmNoX3NoYWRlcihhdmN0eCwgc3B2KTsKKyAgICAg ICAgaWYgKGVyciA8IDApIHsKKyAgICAgICAgICAgIHNwdi0+dW5pbml0KCZzcHYpOworICAgICAg ICAgICAgcmV0dXJuIGVycjsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIEluaXQgc2V0dXAg c2hhZGVyICovCisgICAgZXJyID0gaW5pdF9zZXR1cF9zaGFkZXIoYXZjdHgsIHNwdik7CisgICAg aWYgKGVyciA8IDApIHsKKyAgICAgICAgc3B2LT51bmluaXQoJnNwdik7CisgICAgICAgIHJldHVy biBlcnI7CisgICAgfQorCisgICAgLyogSW5pdCByZXNldCBzaGFkZXIgKi8KKyAgICBlcnIgPSBp bml0X3Jlc2V0X3NoYWRlcihhdmN0eCwgc3B2KTsKKyAgICBpZiAoZXJyIDwgMCkgeworICAgICAg ICBzcHYtPnVuaW5pdCgmc3B2KTsKKyAgICAgICAgcmV0dXJuIGVycjsKKyAgICB9CisKKyAgICBp ZiAoZnYtPmlzX3JnYikgeworICAgICAgICBlbnVtIEFWUGl4ZWxGb3JtYXQgaW50ZXJtZWRpYXRl X2ZtdCA9IGdldF9zdXBwb3J0ZWRfcmdiX2J1ZmZlcl9mbXQoYXZjdHgpOworICAgICAgICBpZiAo aW50ZXJtZWRpYXRlX2ZtdCA9PSBBVl9QSVhfRk1UX05PTkUpIHsKKyAgICAgICAgICAgIGF2X2xv ZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiVW5hYmxlIHRvIGZpbmQgYSBzdXBwb3J0ZWQgY29tcGF0 aWJsZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBpeGVsIGZv cm1hdCBmb3IgUkNUIGJ1ZmZlciFcbiIpOworICAgICAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5P VFNVUCk7CisgICAgICAgIH0KKworICAgICAgICBSRVQoaW5pdF9pbmRpcmVjdChhdmN0eCwgaW50 ZXJtZWRpYXRlX2ZtdCkpOworICAgIH0KKworICAgIC8qIEVuY29kZSBzaGFkZXIgKi8KKyAgICBl cnIgPSBpbml0X2VuY29kZV9zaGFkZXIoYXZjdHgsIHNwdik7CisgICAgaWYgKGVyciA8IDApIHsK KyAgICAgICAgc3B2LT51bmluaXQoJnNwdik7CisgICAgICAgIHJldHVybiBlcnI7CisgICAgfQor CisgICAgc3B2LT51bmluaXQoJnNwdik7CisKKyAgICAvKiBSYW5nZSBjb2RlciBkYXRhICovCisg ICAgZXJyID0gZmZfZmZ2MV92a19pbml0X3N0YXRlX3RyYW5zaXRpb25fZGF0YSgmZnYtPnMsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZnYtPnJhbmdl Y29kZXJfc3RhdGljX2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGYpOworICAgIGlmIChlcnIgPCAwKQorICAgICAgICByZXR1cm4gZXJyOworCisg ICAgLyogUXVhbnRpemF0aW9uIHRhYmxlIGRhdGEgKi8KKyAgICBlcnIgPSBmZl9mZnYxX3ZrX2lu aXRfcXVhbnRfdGFibGVfZGF0YSgmZnYtPnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJmZ2LT5xdWFudF9idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZik7CisgICAgaWYgKGVyciA8IDApCisgICAgICAgIHJldHVybiBl cnI7CisKKyAgICAvKiBDUkMgdGFibGUgYnVmZmVyICovCisgICAgZXJyID0gZmZfZmZ2MV92a19p bml0X2NyY190YWJsZV9kYXRhKCZmdi0+cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJmZ2LT5jcmNfdGFiX2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZik7CisgICAgaWYgKGVyciA8IDApCisgICAgICAgIHJldHVybiBlcnI7 CisKKyAgICAvKiBVcGRhdGUgc2V0dXAgZ2xvYmFsIGRlc2NyaXB0b3JzICovCisgICAgUkVUKGZm X3ZrX3NoYWRlcl91cGRhdGVfZGVzY19idWZmZXIoJmZ2LT5zLCAmZnYtPmV4ZWNfcG9vbC5jb250 ZXh0c1swXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZnYtPnNl dHVwLCAwLCAwLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZm di0+cmFuZ2Vjb2Rlcl9zdGF0aWNfYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDAsIGZ2LT5yYW5nZWNvZGVyX3N0YXRpY19idWYuc2l6ZSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19GT1JNQVRfVU5ERUZJTkVEKSk7CisKKyAg ICAvKiBVcGRhdGUgZW5jb2RlIGdsb2JhbCBkZXNjcmlwdG9ycyAqLworICAgIFJFVChmZl92a19z aGFkZXJfdXBkYXRlX2Rlc2NfYnVmZmVyKCZmdi0+cywgJmZ2LT5leGVjX3Bvb2wuY29udGV4dHNb MF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZ2LT5lbmMsIDAs IDAsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZ2LT5yYW5n ZWNvZGVyX3N0YXRpY19idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgMCwgZnYtPnJhbmdlY29kZXJfc3RhdGljX2J1Zi5zaXplLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFZLX0ZPUk1BVF9VTkRFRklORUQpKTsKKyAgICBSRVQoZmZf dmtfc2hhZGVyX3VwZGF0ZV9kZXNjX2J1ZmZlcigmZnYtPnMsICZmdi0+ZXhlY19wb29sLmNvbnRl eHRzWzBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmdi0+ZW5j LCAwLCAxLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmdi0+ cXVhbnRfYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIGZ2 LT5xdWFudF9idWYuc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBWS19GT1JNQVRfVU5ERUZJTkVEKSk7CisgICAgUkVUKGZmX3ZrX3NoYWRlcl91cGRhdGVfZGVz Y19idWZmZXIoJmZ2LT5zLCAmZnYtPmV4ZWNfcG9vbC5jb250ZXh0c1swXSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZnYtPmVuYywgMCwgMiwgMCwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZnYtPmNyY190YWJfYnVmLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIGZ2LT5jcmNfdGFiX2J1Zi5zaXpl LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZLX0ZPUk1BVF9VTkRF RklORUQpKTsKKworICAgIC8qIFRlbXBvcmFyeSBmcmFtZSAqLworICAgIGZ2LT5mcmFtZSA9IGF2 X2ZyYW1lX2FsbG9jKCk7CisgICAgaWYgKCFmdi0+ZnJhbWUpCisgICAgICAgIHJldHVybiBBVkVS Uk9SKEVOT01FTSk7CisKKyAgICAvKiBBc3luYyBkYXRhIHBvb2wgKi8KKyAgICBmdi0+YXN5bmNf ZGVwdGggPSBmdi0+ZXhlY19wb29sLnBvb2xfc2l6ZTsKKyAgICBmdi0+ZXhlY19jdHhfaW5mbyA9 IGF2X2NhbGxvYyhmdi0+YXN5bmNfZGVwdGgsIHNpemVvZigqZnYtPmV4ZWNfY3R4X2luZm8pKTsK KyAgICBpZiAoIWZ2LT5leGVjX2N0eF9pbmZvKQorICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9N RU0pOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZnYtPmFzeW5jX2RlcHRoOyBpKyspCisgICAg ICAgIGZ2LT5leGVjX3Bvb2wuY29udGV4dHNbaV0ub3BhcXVlID0gJmZ2LT5leGVjX2N0eF9pbmZv W2ldOworCisgICAgZnYtPmJ1Zl9yZWdpb25zID0gYXZfbWFsbG9jX2FycmF5KGYtPm1heF9zbGlj ZV9jb3VudCwgc2l6ZW9mKCpmdi0+YnVmX3JlZ2lvbnMpKTsKKyAgICBpZiAoIWZ2LT5idWZfcmVn aW9ucykKKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKKworZmFpbDoKKyAgICByZXR1 cm4gZXJyOworfQorCitzdGF0aWMgYXZfY29sZCBpbnQgdnVsa2FuX2VuY29kZV9mZnYxX2Nsb3Nl KEFWQ29kZWNDb250ZXh0ICphdmN0eCkKK3sKKyAgICBWdWxrYW5FbmNvZGVGRnYxQ29udGV4dCAq ZnYgPSBhdmN0eC0+cHJpdl9kYXRhOworCisgICAgZmZfdmtfZXhlY19wb29sX2ZyZWUoJmZ2LT5z LCAmZnYtPmV4ZWNfcG9vbCk7CisgICAgZmZfdmtfZXhlY19wb29sX2ZyZWUoJmZ2LT5zLCAmZnYt PnRyYW5zZmVyX2V4ZWNfcG9vbCk7CisKKyAgICBmZl92a19zaGFkZXJfZnJlZSgmZnYtPnMsICZm di0+ZW5jKTsKKyAgICBmZl92a19zaGFkZXJfZnJlZSgmZnYtPnMsICZmdi0+cmVzZXQpOworICAg IGZmX3ZrX3NoYWRlcl9mcmVlKCZmdi0+cywgJmZ2LT5zZXR1cCk7CisgICAgZmZfdmtfc2hhZGVy X2ZyZWUoJmZ2LT5zLCAmZnYtPnJjdF9zZWFyY2gpOworCisgICAgaWYgKGZ2LT5leGVjX2N0eF9p bmZvKSB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZnYtPmFzeW5jX2RlcHRoOyBpKysp IHsKKyAgICAgICAgICAgIFZ1bGthbkVuY29kZUZGdjFGcmFtZURhdGEgKmZkID0gJmZ2LT5leGVj X2N0eF9pbmZvW2ldOworICAgICAgICAgICAgYXZfYnVmZmVyX3VucmVmKCZmZC0+b3V0X2RhdGFf cmVmKTsKKyAgICAgICAgICAgIGF2X2J1ZmZlcl91bnJlZigmZmQtPnJlc3VsdHNfZGF0YV9yZWYp OworICAgICAgICAgICAgYXZfYnVmZmVyX3VucmVmKCZmZC0+ZnJhbWVfb3BhcXVlX3JlZik7Cisg ICAgICAgIH0KKyAgICB9CisgICAgYXZfZnJlZShmdi0+ZXhlY19jdHhfaW5mbyk7CisKKyAgICBh dl9idWZmZXJfdW5yZWYoJmZ2LT5pbnRlcm1lZGlhdGVfZnJhbWVzX3JlZik7CisKKyAgICBhdl9i dWZmZXJfcG9vbF91bmluaXQoJmZ2LT5yZXN1bHRzX2RhdGFfcG9vbCk7CisKKyAgICBhdl9idWZm ZXJfcG9vbF91bmluaXQoJmZ2LT5vdXRfZGF0YV9wb29sKTsKKworICAgIGF2X2J1ZmZlcl91bnJl ZigmZnYtPmtleWZyYW1lX3NsaWNlX2RhdGFfcmVmKTsKKyAgICBhdl9idWZmZXJfcG9vbF91bmlu aXQoJmZ2LT5zbGljZV9kYXRhX3Bvb2wpOworCisgICAgZmZfdmtfZnJlZV9idWYoJmZ2LT5zLCAm ZnYtPnF1YW50X2J1Zik7CisgICAgZmZfdmtfZnJlZV9idWYoJmZ2LT5zLCAmZnYtPnJhbmdlY29k ZXJfc3RhdGljX2J1Zik7CisgICAgZmZfdmtfZnJlZV9idWYoJmZ2LT5zLCAmZnYtPmNyY190YWJf YnVmKTsKKworICAgIGF2X2ZyZWUoZnYtPmJ1Zl9yZWdpb25zKTsKKyAgICBhdl9mcmFtZV9mcmVl KCZmdi0+ZnJhbWUpOworICAgIGZmX3ZrX3VuaW5pdCgmZnYtPnMpOworCisgICAgcmV0dXJuIDA7 Cit9CisKKyNkZWZpbmUgT0ZGU0VUKHgpIG9mZnNldG9mKFZ1bGthbkVuY29kZUZGdjFDb250ZXh0 LCB4KQorI2RlZmluZSBWRSBBVl9PUFRfRkxBR19WSURFT19QQVJBTSB8IEFWX09QVF9GTEFHX0VO Q09ESU5HX1BBUkFNCitzdGF0aWMgY29uc3QgQVZPcHRpb24gdnVsa2FuX2VuY29kZV9mZnYxX29w dGlvbnNbXSA9IHsKKyAgICB7ICJzbGljZWNyYyIsICJQcm90ZWN0IHNsaWNlcyB3aXRoIENSQ3Mi LCBPRkZTRVQoY3R4LmVjKSwgQVZfT1BUX1RZUEVfSU5ULAorICAgICAgICAgICAgeyAuaTY0ID0g LTEgfSwgLTEsIDIsIFZFIH0sCisgICAgeyAiY29udGV4dCIsICJDb250ZXh0IG1vZGVsIiwgT0ZG U0VUKGN0eC5jb250ZXh0X21vZGVsKSwgQVZfT1BUX1RZUEVfSU5ULAorICAgICAgICAgICAgeyAu aTY0ID0gMCB9LCAwLCAxLCBWRSB9LAorICAgIHsgImNvZGVyIiwgIkNvZGVyIHR5cGUiLCBPRkZT RVQoY3R4LmFjKSwgQVZfT1BUX1RZUEVfSU5ULAorICAgICAgICAgICAgeyAuaTY0ID0gQUNfUkFO R0VfQ1VTVE9NX1RBQiB9LCAtMiwgMiwgVkUsIC51bml0ID0gImNvZGVyIiB9LAorICAgICAgICB7 ICJyaWNlIiwgIkdvbG9tYiByaWNlIiwgMCwgQVZfT1BUX1RZUEVfQ09OU1QsCisgICAgICAgICAg ICB7IC5pNjQgPSBBQ19HT0xPTUJfUklDRSB9LCBJTlRfTUlOLCBJTlRfTUFYLCBWRSwgLnVuaXQg PSAiY29kZXIiIH0sCisgICAgICAgIHsgInJhbmdlX2RlZiIsICJSYW5nZSB3aXRoIGRlZmF1bHQg dGFibGUiLCAwLCBBVl9PUFRfVFlQRV9DT05TVCwKKyAgICAgICAgICAgIHsgLmk2NCA9IEFDX1JB TkdFX0RFRkFVTFRfVEFCX0ZPUkNFIH0sIElOVF9NSU4sIElOVF9NQVgsIFZFLCAudW5pdCA9ICJj b2RlciIgfSwKKyAgICAgICAgeyAicmFuZ2VfdGFiIiwgIlJhbmdlIHdpdGggY3VzdG9tIHRhYmxl IiwgMCwgQVZfT1BUX1RZUEVfQ09OU1QsCisgICAgICAgICAgICB7IC5pNjQgPSBBQ19SQU5HRV9D VVNUT01fVEFCIH0sIElOVF9NSU4sIElOVF9NQVgsIFZFLCAudW5pdCA9ICJjb2RlciIgfSwKKyAg ICB7ICJxdGFibGUiLCAiUXVhbnRpemF0aW9uIHRhYmxlIiwgT0ZGU0VUKGN0eC5xdGFibGUpLCBB Vl9PUFRfVFlQRV9JTlQsCisgICAgICAgICAgICB7IC5pNjQgPSAtMSB9LCAtMSwgMiwgVkUgLCAu dW5pdCA9ICJxdGFibGUifSwKKyAgICAgICAgeyAiZGVmYXVsdCIsIE5VTEwsIDAsIEFWX09QVF9U WVBFX0NPTlNULAorICAgICAgICAgICAgeyAuaTY0ID0gUVRBQkxFX0RFRkFVTFQgfSwgSU5UX01J TiwgSU5UX01BWCwgVkUsIC51bml0ID0gInF0YWJsZSIgfSwKKyAgICAgICAgeyAiOGJpdCIsIE5V TEwsIDAsIEFWX09QVF9UWVBFX0NPTlNULAorICAgICAgICAgICAgeyAuaTY0ID0gUVRBQkxFXzhC SVQgfSwgSU5UX01JTiwgSU5UX01BWCwgVkUsIC51bml0ID0gInF0YWJsZSIgfSwKKyAgICAgICAg eyAiZ3JlYXRlcjhiaXQiLCBOVUxMLCAwLCBBVl9PUFRfVFlQRV9DT05TVCwKKyAgICAgICAgICAg IHsgLmk2NCA9IFFUQUJMRV9HVDhCSVQgfSwgSU5UX01JTiwgSU5UX01BWCwgVkUsIC51bml0ID0g InF0YWJsZSIgfSwKKworICAgIHsgInNsaWNlc19oIiwgIk51bWJlciBvZiBob3Jpem9udGFsIHNs aWNlcyIsIE9GRlNFVChudW1faF9zbGljZXMpLCBBVl9PUFRfVFlQRV9JTlQsCisgICAgICAgICAg ICB7IC5pNjQgPSAtMSB9LCAtMSwgTUFYX1NMSUNFUywgVkUgfSwKKyAgICB7ICJzbGljZXNfdiIs ICJOdW1iZXIgb2YgdmVydGljYWwgc2xpY2VzIiwgT0ZGU0VUKG51bV92X3NsaWNlcyksIEFWX09Q VF9UWVBFX0lOVCwKKyAgICAgICAgICAgIHsgLmk2NCA9IC0xIH0sIC0xLCBNQVhfU0xJQ0VTLCBW RSB9LAorCisgICAgeyAiZm9yY2VfcGNtIiwgIkNvZGUgYWxsIHNsaWNlcyB3aXRoIG5vIHByZWRp Y3Rpb24iLCBPRkZTRVQoZm9yY2VfcGNtKSwgQVZfT1BUX1RZUEVfQk9PTCwKKyAgICAgICAgICAg IHsgLmk2NCA9IDAgfSwgMCwgMSwgVkUgfSwKKworICAgIHsgInJjdF9zZWFyY2giLCAiUnVuIGEg c2VhcmNoIGZvciBSQ1QgcGFyYW1ldGVycyAobGV2ZWwgNCBvbmx5KSIsIE9GRlNFVChvcHRpbWl6 ZV9yY3QpLCBBVl9PUFRfVFlQRV9CT09MLAorICAgICAgICAgICAgeyAuaTY0ID0gMSB9LCAwLCAx LCBWRSB9LAorCisgICAgeyAiYXN5bmNfZGVwdGgiLCAiSW50ZXJuYWwgcGFyYWxsZWxpemF0aW9u IGRlcHRoIiwgT0ZGU0VUKGFzeW5jX2RlcHRoKSwgQVZfT1BUX1RZUEVfSU5ULAorICAgICAgICAg ICAgeyAuaTY0ID0gMSB9LCAxLCBJTlRfTUFYLCBWRSB9LAorCisgICAgeyBOVUxMIH0KK307CisK K3N0YXRpYyBjb25zdCBGRkNvZGVjRGVmYXVsdCB2dWxrYW5fZW5jb2RlX2ZmdjFfZGVmYXVsdHNb XSA9IHsKKyAgICB7ICJnIiwgIjEiIH0sCisgICAgeyBOVUxMIH0sCit9OworCitzdGF0aWMgY29u c3QgQVZDbGFzcyB2dWxrYW5fZW5jb2RlX2ZmdjFfY2xhc3MgPSB7CisgICAgLmNsYXNzX25hbWUg PSAiZmZ2MV92dWxrYW4iLAorICAgIC5pdGVtX25hbWUgID0gYXZfZGVmYXVsdF9pdGVtX25hbWUs CisgICAgLm9wdGlvbiAgICAgPSB2dWxrYW5fZW5jb2RlX2ZmdjFfb3B0aW9ucywKKyAgICAudmVy c2lvbiAgICA9IExJQkFWVVRJTF9WRVJTSU9OX0lOVCwKK307CisKK2NvbnN0IEFWQ29kZWNIV0Nv bmZpZ0ludGVybmFsICpjb25zdCB2dWxrYW5fZW5jb2RlX2ZmdjFfaHdfY29uZmlnc1tdID0gewor ICAgIEhXX0NPTkZJR19FTkNPREVSX0ZSQU1FUyhWVUxLQU4sIFZVTEtBTiksCisgICAgTlVMTCwK K307CisKK2NvbnN0IEZGQ29kZWMgZmZfZmZ2MV92dWxrYW5fZW5jb2RlciA9IHsKKyAgICAucC5u YW1lICAgICAgICAgPSAiZmZ2MV92dWxrYW4iLAorICAgIENPREVDX0xPTkdfTkFNRSgiRkZtcGVn IHZpZGVvIGNvZGVjICMxIChWdWxrYW4pIiksCisgICAgLnAudHlwZSAgICAgICAgID0gQVZNRURJ QV9UWVBFX1ZJREVPLAorICAgIC5wLmlkICAgICAgICAgICA9IEFWX0NPREVDX0lEX0ZGVjEsCisg ICAgLnByaXZfZGF0YV9zaXplID0gc2l6ZW9mKFZ1bGthbkVuY29kZUZGdjFDb250ZXh0KSwKKyAg ICAuaW5pdCAgICAgICAgICAgPSAmdnVsa2FuX2VuY29kZV9mZnYxX2luaXQsCisgICAgRkZfQ09E RUNfUkVDRUlWRV9QQUNLRVRfQ0IoJnZ1bGthbl9lbmNvZGVfZmZ2MV9yZWNlaXZlX3BhY2tldCks CisgICAgLmNsb3NlICAgICAgICAgID0gJnZ1bGthbl9lbmNvZGVfZmZ2MV9jbG9zZSwKKyAgICAu cC5wcml2X2NsYXNzICAgPSAmdnVsa2FuX2VuY29kZV9mZnYxX2NsYXNzLAorICAgIC5wLmNhcGFi aWxpdGllcyA9IEFWX0NPREVDX0NBUF9ERUxBWSB8CisgICAgICAgICAgICAgICAgICAgICAgQVZf Q09ERUNfQ0FQX0hBUkRXQVJFIHwKKyAgICAgICAgICAgICAgICAgICAgICBBVl9DT0RFQ19DQVBf RFIxIHwKKyAgICAgICAgICAgICAgICAgICAgICBBVl9DT0RFQ19DQVBfRU5DT0RFUl9GTFVTSCB8 CisgICAgICAgICAgICAgICAgICAgICAgQVZfQ09ERUNfQ0FQX0VOQ09ERVJfUkVPUkRFUkVEX09Q QVFVRSwKKyAgICAuY2Fwc19pbnRlcm5hbCAgPSBGRl9DT0RFQ19DQVBfSU5JVF9DTEVBTlVQIHwg RkZfQ09ERUNfQ0FQX0VPRl9GTFVTSCwKKyAgICAuZGVmYXVsdHMgICAgICAgPSB2dWxrYW5fZW5j b2RlX2ZmdjFfZGVmYXVsdHMsCisgICAgQ09ERUNfUElYRk1UUyhBVl9QSVhfRk1UX1ZVTEtBTiks CisgICAgLmh3X2NvbmZpZ3MgICAgID0gdnVsa2FuX2VuY29kZV9mZnYxX2h3X2NvbmZpZ3MsCisg ICAgLnAud3JhcHBlcl9uYW1lID0gInZ1bGthbiIsCit9OwotLSAKMi40OS4xCgoKRnJvbSA0YTRm NmIzNzJlNWJhMDg4YmVkMGM3MmEwMzhkNjA3NjU1MGRjZTliIE1vbiBTZXAgMTcgMDA6MDA6MDAg MjAwMQpGcm9tOiBKYW1haWthMSA8bHVrYXN6Y3oxOEB3cC5wbD4KRGF0ZTogV2VkLCAzIFNlcCAy MDI1IDEzOjI2OjQyICswMDAwClN1YmplY3Q6IFtQQVRDSCAwNjEvMTE4XSBDaGFuZ2luZyB2dWxr YW4gZmlsZSBkaXJlY3RvcnkKCi0tLQogbGliYXZjb2RlYy9mZnYxX3Z1bGthbi5oIHwgNjIgLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDYy IGRlbGV0aW9ucygtKQogZGVsZXRlIG1vZGUgMTAwNjQ0IGxpYmF2Y29kZWMvZmZ2MV92dWxrYW4u aAoKZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvZmZ2MV92dWxrYW4uaCBiL2xpYmF2Y29kZWMvZmZ2 MV92dWxrYW4uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzcyNDc4ZjRiNy4uMDAw MDAwMDAwMAotLS0gYS9saWJhdmNvZGVjL2ZmdjFfdnVsa2FuLmgKKysrIC9kZXYvbnVsbApAQCAt MSw2MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDI0IEx5bm5lIDxkZXZAbHlubmUu ZWU+Ci0gKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgotICoKLSAqIEZGbXBlZyBp cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlm eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAq IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp dGhlcgotICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg YW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7 IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZ IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExl c3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91 IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1 YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUg RnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG aWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQotICovCi0KLSNpZm5kZWYgQVZD T0RFQ19GRlYxX1ZVTEtBTl9ICi0jZGVmaW5lIEFWQ09ERUNfRkZWMV9WVUxLQU5fSAotCi0jaW5j bHVkZSAibGliYXZ1dGlsL3Z1bGthbi5oIgotI2luY2x1ZGUgImZmdjEuaCIKLQotaW50IGZmX2Zm djFfdmtfdXBkYXRlX3N0YXRlX3RyYW5zaXRpb25fZGF0YShGRlZ1bGthbkNvbnRleHQgKnMsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZGVmtCdWZmZXIgKnZr YiwgRkZWMUNvbnRleHQgKmYpOwotCi1pbnQgZmZfZmZ2MV92a19pbml0X3N0YXRlX3RyYW5zaXRp b25fZGF0YShGRlZ1bGthbkNvbnRleHQgKnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBGRlZrQnVmZmVyICp2a2IsIEZGVjFDb250ZXh0ICpmKTsKLQotaW50IGZm X2ZmdjFfdmtfaW5pdF9xdWFudF90YWJsZV9kYXRhKEZGVnVsa2FuQ29udGV4dCAqcywKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGRlZrQnVmZmVyICp2a2IsIEZGVjFDb250 ZXh0ICpmKTsKLQotaW50IGZmX2ZmdjFfdmtfaW5pdF9jcmNfdGFibGVfZGF0YShGRlZ1bGthbkNv bnRleHQgKnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZGVmtCdWZmZXIg KnZrYiwgRkZWMUNvbnRleHQgKmYpOwotCi10eXBlZGVmIHN0cnVjdCBGRnYxVmtSQ1RQYXJhbWV0 ZXJzIHsKLSAgICBpbnQgZm10X2x1dFs0XTsKLSAgICBpbnQgb2Zmc2V0OwotICAgIHVpbnQ4X3Qg Yml0czsKLSAgICB1aW50OF90IHBsYW5hcl9yZ2I7Ci0gICAgdWludDhfdCBjb2xvcl9wbGFuZXM7 Ci0gICAgdWludDhfdCB0cmFuc3BhcmVuY3k7Ci0gICAgdWludDhfdCB2ZXJzaW9uOwotICAgIHVp bnQ4X3QgbWljcm9fdmVyc2lvbjsKLSAgICB1aW50OF90IHBhZGRpbmdbMl07Ci19IEZGdjFWa1JD VFBhcmFtZXRlcnM7Ci0KLXR5cGVkZWYgc3RydWN0IEZGdjFWa1Jlc2V0UGFyYW1ldGVycyB7Ci0g ICAgdWludDMyX3QgY29udGV4dF9jb3VudFtNQVhfUVVBTlRfVEFCTEVTXTsKLSAgICBWa0Rldmlj ZUFkZHJlc3Mgc2xpY2Vfc3RhdGU7Ci0gICAgdWludDMyX3QgcGxhbmVfc3RhdGVfc2l6ZTsKLSAg ICB1aW50OF90IGNvZGVjX3BsYW5lczsKLSAgICB1aW50OF90IGtleV9mcmFtZTsKLSAgICB1aW50 OF90IHZlcnNpb247Ci0gICAgdWludDhfdCBtaWNyb192ZXJzaW9uOwotICAgIHVpbnQ4X3QgcGFk ZGluZ1sxXTsKLX0gRkZ2MVZrUmVzZXRQYXJhbWV0ZXJzOwotCi0jZW5kaWYgLyogQVZDT0RFQ19G RlYxX1ZVTEtBTl9IICovCi0tIAoyLjQ5LjEKCgpGcm9tIGY2MzUwYTE0Yjc0Njc2MzM1YjU3NjFj OTZiMjZiZjY0N2MxM2Y5M2YgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCkZyb206IEphbWFpa2Ex IDxsdWthc3pjejE4QHdwLnBsPgpEYXRlOiBXZWQsIDMgU2VwIDIwMjUgMTM6Mjc6MjcgKzAwMDAK U3ViamVjdDogW1BBVENIIDA2Mi8xMThdIENoYW5naW5nIHZ1bGthbiBmaWxlIGRpcmVjdG9yeQoK LS0tCiBsaWJhdmNvZGVjL3Z1bGthbi9mZnYxX3Z1bGthbi5oIHwgNjIgKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrCiAxIGZpbGUgY2hhbmdlZCwgNjIgaW5zZXJ0aW9ucygrKQogY3Jl YXRlIG1vZGUgMTAwNjQ0IGxpYmF2Y29kZWMvdnVsa2FuL2ZmdjFfdnVsa2FuLmgKCmRpZmYgLS1n aXQgYS9saWJhdmNvZGVjL3Z1bGthbi9mZnYxX3Z1bGthbi5oIGIvbGliYXZjb2RlYy92dWxrYW4v ZmZ2MV92dWxrYW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5iYjEw NzcwNTc2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYXZjb2RlYy92dWxrYW4vZmZ2MV92dWxrYW4u aApAQCAtMCwwICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDI0IEx5bm5lIDxkZXZA bHlubmUuZWU+CisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgorICoKKyAqIEZG bXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b247IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGlu IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK KyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5l cmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0 byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry ZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorICovCisKKyNpZm5k ZWYgQVZDT0RFQ19GRlYxX1ZVTEtBTl9ICisjZGVmaW5lIEFWQ09ERUNfRkZWMV9WVUxLQU5fSAor CisjaW5jbHVkZSAiLi4vLi4vbGliYXZ1dGlsL3Z1bGthbi92dWxrYW4uaCIKKyNpbmNsdWRlICJs aWJhdmNvZGVjL2ZmdjEuaCIKKworaW50IGZmX2ZmdjFfdmtfdXBkYXRlX3N0YXRlX3RyYW5zaXRp b25fZGF0YShGRlZ1bGthbkNvbnRleHQgKnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEZGVmtCdWZmZXIgKnZrYiwgRkZWMUNvbnRleHQgKmYpOworCitpbnQg ZmZfZmZ2MV92a19pbml0X3N0YXRlX3RyYW5zaXRpb25fZGF0YShGRlZ1bGthbkNvbnRleHQgKnMs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGRlZrQnVmZmVyICp2 a2IsIEZGVjFDb250ZXh0ICpmKTsKKworaW50IGZmX2ZmdjFfdmtfaW5pdF9xdWFudF90YWJsZV9k YXRhKEZGVnVsa2FuQ29udGV4dCAqcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBGRlZrQnVmZmVyICp2a2IsIEZGVjFDb250ZXh0ICpmKTsKKworaW50IGZmX2ZmdjFfdmtf aW5pdF9jcmNfdGFibGVfZGF0YShGRlZ1bGthbkNvbnRleHQgKnMsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEZGVmtCdWZmZXIgKnZrYiwgRkZWMUNvbnRleHQgKmYpOworCit0 eXBlZGVmIHN0cnVjdCBGRnYxVmtSQ1RQYXJhbWV0ZXJzIHsKKyAgICBpbnQgZm10X2x1dFs0XTsK KyAgICBpbnQgb2Zmc2V0OworICAgIHVpbnQ4X3QgYml0czsKKyAgICB1aW50OF90IHBsYW5hcl9y Z2I7CisgICAgdWludDhfdCBjb2xvcl9wbGFuZXM7CisgICAgdWludDhfdCB0cmFuc3BhcmVuY3k7 CisgICAgdWludDhfdCB2ZXJzaW9uOworICAgIHVpbnQ4X3QgbWljcm9fdmVyc2lvbjsKKyAgICB1 aW50OF90IHBhZGRpbmdbMl07Cit9IEZGdjFWa1JDVFBhcmFtZXRlcnM7CisKK3R5cGVkZWYgc3Ry dWN0IEZGdjFWa1Jlc2V0UGFyYW1ldGVycyB7CisgICAgdWludDMyX3QgY29udGV4dF9jb3VudFtN QVhfUVVBTlRfVEFCTEVTXTsKKyAgICBWa0RldmljZUFkZHJlc3Mgc2xpY2Vfc3RhdGU7CisgICAg dWludDMyX3QgcGxhbmVfc3RhdGVfc2l6ZTsKKyAgICB1aW50OF90IGNvZGVjX3BsYW5lczsKKyAg ICB1aW50OF90IGtleV9mcmFtZTsKKyAgICB1aW50OF90IHZlcnNpb247CisgICAgdWludDhfdCBt aWNyb192ZXJzaW9uOworICAgIHVpbnQ4X3QgcGFkZGluZ1sxXTsKK30gRkZ2MVZrUmVzZXRQYXJh bWV0ZXJzOworCisjZW5kaWYgLyogQVZDT0RFQ19GRlYxX1ZVTEtBTl9IICovCi0tIAoyLjQ5LjEK CgpGcm9tIDNlZDI5YmJlMzVhZDNlMzRkZjIyZjE1ODg4YzVkZDIxMTFmOTk3NGYgTW9uIFNlcCAx NyAwMDowMDowMCAyMDAxCkZyb206IEphbWFpa2ExIDxsdWthc3pjejE4QHdwLnBsPgpEYXRlOiBX ZWQsIDMgU2VwIDIwMjUgMTM6Mjc6NTQgKzAwMDAKU3ViamVjdDogW1BBVENIIDA2My8xMThdIENo YW5naW5nIHZ1bGthbiBmaWxlIGRpcmVjdG9yeQoKLS0tCiBsaWJhdmNvZGVjL3Z1bGthbl9hdjEu YyB8IDY3MCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAxIGZpbGUg Y2hhbmdlZCwgNjcwIGRlbGV0aW9ucygtKQogZGVsZXRlIG1vZGUgMTAwNjQ0IGxpYmF2Y29kZWMv dnVsa2FuX2F2MS5jCgpkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy92dWxrYW5fYXYxLmMgYi9saWJh dmNvZGVjL3Z1bGthbl9hdjEuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzg4ZTNj Y2E3OC4uMDAwMDAwMDAwMAotLS0gYS9saWJhdmNvZGVjL3Z1bGthbl9hdjEuYworKysgL2Rldi9u dWxsCkBAIC0xLDY3MCArMCwwIEBACi0vKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVn LgotICoKLSAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp dCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIg R2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9y IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogRkZtcGVnIGlzIGRp c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lU SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgot ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg U2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl dGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V IExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYg bm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEg RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQot ICovCi0KLSNpbmNsdWRlICJhdjFkZWMuaCIKLQotI2luY2x1ZGUgInZ1bGthbl9kZWNvZGUuaCIK LQotLyogTWF4aW11bSBudW1iZXIgb2YgdGlsZXMgc3BlY2lmaWVkIGJ5IGFueSBkZWZpbmVkIGxl dmVsICovCi0jZGVmaW5lIE1BWF9USUxFUyAyNTYKLQotY29uc3QgRkZWdWxrYW5EZWNvZGVEZXNj cmlwdG9yIGZmX3ZrX2RlY19hdjFfZGVzYyA9IHsKLSAgICAuY29kZWNfaWQgICAgICAgICA9IEFW X0NPREVDX0lEX0FWMSwKLSAgICAuZGVjb2RlX2V4dGVuc2lvbiA9IEZGX1ZLX0VYVF9WSURFT19E RUNPREVfQVYxLAotICAgIC5xdWV1ZV9mbGFncyAgICAgID0gVktfUVVFVUVfVklERU9fREVDT0RF X0JJVF9LSFIsCi0gICAgLmRlY29kZV9vcCAgICAgICAgPSBWS19WSURFT19DT0RFQ19PUEVSQVRJ T05fREVDT0RFX0FWMV9CSVRfS0hSLAotICAgIC5leHRfcHJvcHMgPSB7Ci0gICAgICAgIC5leHRl bnNpb25OYW1lID0gVktfU1REX1ZVTEtBTl9WSURFT19DT0RFQ19BVjFfREVDT0RFX0VYVEVOU0lP Tl9OQU1FLAotICAgICAgICAuc3BlY1ZlcnNpb24gICA9IFZLX1NURF9WVUxLQU5fVklERU9fQ09E RUNfQVYxX0RFQ09ERV9TUEVDX1ZFUlNJT04sCi0gICAgfSwKLX07Ci0KLXR5cGVkZWYgc3RydWN0 IEFWMVZ1bGthbkRlY29kZVBpY3R1cmUgewotICAgIEZGVnVsa2FuRGVjb2RlUGljdHVyZSAgICAg ICAgICAgdnA7Ci0KLSAgICAvKiBUT0RPOiBpbnZlc3RpZ2F0ZSBpZiB0aGlzIGNhbiBiZSByZW1v dmVkIHRvIG1ha2UgZGVjb2RpbmcgY29tcGxldGVseQotICAgICAqIGluZGVwZW5kZW50LiAqLwot ICAgIEZGVnVsa2FuRGVjb2RlQ29udGV4dCAgICAgICAgICAqZGVjOwotCi0gICAgdWludDMyX3Qg dGlsZV9zaXplc1tNQVhfVElMRVNdOwotCi0gICAgLyogQ3VycmVudCBwaWN0dXJlICovCi0gICAg U3RkVmlkZW9EZWNvZGVBVjFSZWZlcmVuY2VJbmZvICAgICBzdGRfcmVmOwotICAgIFZrVmlkZW9E ZWNvZGVBVjFEcGJTbG90SW5mb0tIUiAgICAgdmthdjFfcmVmOwotICAgIHVpbnQxNl90IHdpZHRo X2luX3Nic19taW51czFbNjRdOwotICAgIHVpbnQxNl90IGhlaWdodF9pbl9zYnNfbWludXMxWzY0 XTsKLSAgICB1aW50MTZfdCBtaV9jb2xfc3RhcnRzWzY0XTsKLSAgICB1aW50MTZfdCBtaV9yb3df c3RhcnRzWzY0XTsKLSAgICBTdGRWaWRlb0FWMVRpbGVJbmZvIHRpbGVfaW5mbzsKLSAgICBTdGRW aWRlb0FWMVF1YW50aXphdGlvbiBxdWFudGl6YXRpb247Ci0gICAgU3RkVmlkZW9BVjFTZWdtZW50 YXRpb24gc2VnbWVudGF0aW9uOwotICAgIFN0ZFZpZGVvQVYxTG9vcEZpbHRlciBsb29wX2ZpbHRl cjsKLSAgICBTdGRWaWRlb0FWMUNERUYgY2RlZjsKLSAgICBTdGRWaWRlb0FWMUxvb3BSZXN0b3Jh dGlvbiBsb29wX3Jlc3RvcmF0aW9uOwotICAgIFN0ZFZpZGVvQVYxR2xvYmFsTW90aW9uIGdsb2Jh bF9tb3Rpb247Ci0gICAgU3RkVmlkZW9BVjFGaWxtR3JhaW4gZmlsbV9ncmFpbjsKLSAgICBTdGRW aWRlb0RlY29kZUFWMVBpY3R1cmVJbmZvICAgIHN0ZF9waWNfaW5mbzsKLSAgICBWa1ZpZGVvRGVj b2RlQVYxUGljdHVyZUluZm9LSFIgICAgIGF2MV9waWNfaW5mbzsKLQotICAgIC8qIFBpY3R1cmUg cmVmcyAqLwotICAgIGNvbnN0IEFWMUZyYW1lICAgICAgICAgICAgICAgICAgICAgKnJlZl9zcmMg ICBbQVYxX05VTV9SRUZfRlJBTUVTXTsKLSAgICBTdGRWaWRlb0RlY29kZUFWMVJlZmVyZW5jZUlu Zm8gICAgICBzdGRfcmVmcyAgW0FWMV9OVU1fUkVGX0ZSQU1FU107Ci0gICAgVmtWaWRlb0RlY29k ZUFWMURwYlNsb3RJbmZvS0hSICAgICAgdmthdjFfcmVmc1tBVjFfTlVNX1JFRl9GUkFNRVNdOwot Ci0gICAgdWludDhfdCBmcmFtZV9pZF9zZXQ7Ci0gICAgdWludDhfdCBmcmFtZV9pZDsKLSAgICB1 aW50OF90IHJlZl9mcmFtZV9zaWduX2JpYXNfbWFzazsKLX0gQVYxVnVsa2FuRGVjb2RlUGljdHVy ZTsKLQotc3RhdGljIGludCB2a19hdjFfZmlsbF9waWN0KEFWQ29kZWNDb250ZXh0ICphdmN0eCwg Y29uc3QgQVYxRnJhbWUgKipyZWZfc3JjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZr VmlkZW9SZWZlcmVuY2VTbG90SW5mb0tIUiAqcmVmX3Nsb3QsICAgICAgLyogTWFpbiBzdHJ1Y3R1 cmUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBWa1ZpZGVvUGljdHVyZVJlc291cmNl SW5mb0tIUiAqcmVmLCAgICAgICAgIC8qIEdvZXMgaW4gXiAqLwotICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFN0ZFZpZGVvRGVjb2RlQVYxUmVmZXJlbmNlSW5mbyAqdmthdjFfc3RkX3JlZiwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBWa1ZpZGVvRGVjb2RlQVYxRHBiU2xvdEluZm9L SFIgKnZrYXYxX3JlZiwgLyogR29lcyBpbiBeICovCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3QgQVYxRnJhbWUgKnBpYywgaW50IGlzX2N1cnJlbnQsIGludCBoYXNfZ3JhaW4sCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqc2F2ZWRfb3JkZXJfaGlu dHMpCi17Ci0gICAgRkZWdWxrYW5EZWNvZGVDb250ZXh0ICpkZWMgPSBhdmN0eC0+aW50ZXJuYWwt Pmh3YWNjZWxfcHJpdl9kYXRhOwotICAgIEZGVnVsa2FuRGVjb2RlU2hhcmVkICpjdHggPSBkZWMt PnNoYXJlZF9jdHg7Ci0gICAgQVYxVnVsa2FuRGVjb2RlUGljdHVyZSAqaHAgPSBwaWMtPmh3YWNj ZWxfcGljdHVyZV9wcml2YXRlOwotICAgIEZGVnVsa2FuRGVjb2RlUGljdHVyZSAqdmtwaWMgPSAm aHAtPnZwOwotCi0gICAgaW50IGVyciA9IGZmX3ZrX2RlY29kZV9wcmVwYXJlX2ZyYW1lKGRlYywg cGljLT5mLCB2a3BpYywgaXNfY3VycmVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaGFzX2dyYWluIHx8IGRlYy0+ZGVkaWNhdGVkX2RwYik7Ci0gICAgaWYgKGVy ciA8IDApCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICAqdmthdjFfc3RkX3JlZiA9IChTdGRW aWRlb0RlY29kZUFWMVJlZmVyZW5jZUluZm8pIHsKLSAgICAgICAgLmZsYWdzID0gKFN0ZFZpZGVv RGVjb2RlQVYxUmVmZXJlbmNlSW5mb0ZsYWdzKSB7Ci0gICAgICAgICAgICAuZGlzYWJsZV9mcmFt ZV9lbmRfdXBkYXRlX2NkZiA9IHBpYy0+cmF3X2ZyYW1lX2hlYWRlci0+ZGlzYWJsZV9mcmFtZV9l bmRfdXBkYXRlX2NkZiwKLSAgICAgICAgICAgIC5zZWdtZW50YXRpb25fZW5hYmxlZCA9IHBpYy0+ cmF3X2ZyYW1lX2hlYWRlci0+c2VnbWVudGF0aW9uX2VuYWJsZWQsCi0gICAgICAgIH0sCi0gICAg ICAgIC5mcmFtZV90eXBlID0gcGljLT5yYXdfZnJhbWVfaGVhZGVyLT5mcmFtZV90eXBlLAotICAg ICAgICAuT3JkZXJIaW50ID0gcGljLT5yYXdfZnJhbWVfaGVhZGVyLT5vcmRlcl9oaW50LAotICAg ICAgICAuUmVmRnJhbWVTaWduQmlhcyA9IGhwLT5yZWZfZnJhbWVfc2lnbl9iaWFzX21hc2ssCi0g ICAgfTsKLQotICAgIGlmIChzYXZlZF9vcmRlcl9oaW50cykgewotICAgICAgICBpZiAoZGVjLT5x dWlya19hdjFfb2Zmc2V0KQotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCBTVERfVklE RU9fQVYxX1RPVEFMX1JFRlNfUEVSX0ZSQU1FOyBpKyspCi0gICAgICAgICAgICAgICAgdmthdjFf c3RkX3JlZi0+U2F2ZWRPcmRlckhpbnRzW2kgLSAxXSA9IHNhdmVkX29yZGVyX2hpbnRzW2ldOwot ICAgICAgICBlbHNlCi0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IFNURF9WSURFT19B VjFfVE9UQUxfUkVGU19QRVJfRlJBTUU7IGkrKykKLSAgICAgICAgICAgICAgICB2a2F2MV9zdGRf cmVmLT5TYXZlZE9yZGVySGludHNbaV0gPSBzYXZlZF9vcmRlcl9oaW50c1tpXTsKLSAgICB9Ci0K LSAgICAqdmthdjFfcmVmID0gKFZrVmlkZW9EZWNvZGVBVjFEcGJTbG90SW5mb0tIUikgewotICAg ICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9WSURFT19ERUNPREVfQVYxX0RQQl9TTE9U X0lORk9fS0hSLAotICAgICAgICAucFN0ZFJlZmVyZW5jZUluZm8gPSB2a2F2MV9zdGRfcmVmLAot ICAgIH07Ci0KLSAgICB2a2F2MV9zdGRfcmVmLT5mbGFncy5kaXNhYmxlX2ZyYW1lX2VuZF91cGRh dGVfY2RmID0gcGljLT5yYXdfZnJhbWVfaGVhZGVyLT5kaXNhYmxlX2ZyYW1lX2VuZF91cGRhdGVf Y2RmOwotICAgIHZrYXYxX3N0ZF9yZWYtPmZsYWdzLnNlZ21lbnRhdGlvbl9lbmFibGVkID0gcGlj LT5yYXdfZnJhbWVfaGVhZGVyLT5zZWdtZW50YXRpb25fZW5hYmxlZDsKLSAgICB2a2F2MV9zdGRf cmVmLT5mcmFtZV90eXBlID0gcGljLT5yYXdfZnJhbWVfaGVhZGVyLT5mcmFtZV90eXBlOwotCi0g ICAgKnJlZiA9IChWa1ZpZGVvUGljdHVyZVJlc291cmNlSW5mb0tIUikgewotICAgICAgICAuc1R5 cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9WSURFT19QSUNUVVJFX1JFU09VUkNFX0lORk9fS0hSLAot ICAgICAgICAuY29kZWRPZmZzZXQgPSAoVmtPZmZzZXQyRCl7IDAsIDAgfSwKLSAgICAgICAgLmNv ZGVkRXh0ZW50ID0gKFZrRXh0ZW50MkQpeyBwaWMtPmYtPndpZHRoLCBwaWMtPmYtPmhlaWdodCB9 LAotICAgICAgICAuYmFzZUFycmF5TGF5ZXIgPSAoKGhhc19ncmFpbiB8fCBkZWMtPmRlZGljYXRl ZF9kcGIpICYmIGN0eC0+Y29tbW9uLmxheWVyZWRfZHBiKSA/Ci0gICAgICAgICAgICAgICAgICAg ICAgICAgIGhwLT5mcmFtZV9pZCA6IDAsCi0gICAgICAgIC5pbWFnZVZpZXdCaW5kaW5nID0gdmtw aWMtPnZpZXcucmVmWzBdLAotICAgIH07Ci0KLSAgICAqcmVmX3Nsb3QgPSAoVmtWaWRlb1JlZmVy ZW5jZVNsb3RJbmZvS0hSKSB7Ci0gICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX1ZJ REVPX1JFRkVSRU5DRV9TTE9UX0lORk9fS0hSLAotICAgICAgICAucE5leHQgPSB2a2F2MV9yZWYs Ci0gICAgICAgIC5zbG90SW5kZXggPSBocC0+ZnJhbWVfaWQsCi0gICAgICAgIC5wUGljdHVyZVJl c291cmNlID0gcmVmLAotICAgIH07Ci0KLSAgICBpZiAocmVmX3NyYykKLSAgICAgICAgKnJlZl9z cmMgPSBwaWM7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgdmtfYXYxX3BhcmFt c19maWxsKEFWQ29kZWNDb250ZXh0ICphdmN0eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBTdGRWaWRlb0FWMVRpbWluZ0luZm8gKmF2MV90aW1pbmdfaW5mbywKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBTdGRWaWRlb0FWMUNvbG9yQ29uZmlnICphdjFfY29sb3JfY29u ZmlnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0ZFZpZGVvQVYxU2VxdWVuY2VI ZWFkZXIgKmF2MV9zZXF1ZW5jZV9oZWFkZXIpCi17Ci0gICAgY29uc3QgQVYxRGVjQ29udGV4dCAq cyA9IGF2Y3R4LT5wcml2X2RhdGE7Ci0gICAgY29uc3QgQVYxUmF3U2VxdWVuY2VIZWFkZXIgKnNl cSA9IHMtPnJhd19zZXE7Ci0KLSAgICAqYXYxX3RpbWluZ19pbmZvID0gKFN0ZFZpZGVvQVYxVGlt aW5nSW5mbykgewotICAgICAgICAuZmxhZ3MgPSAoU3RkVmlkZW9BVjFUaW1pbmdJbmZvRmxhZ3Mp IHsKLSAgICAgICAgICAgIC5lcXVhbF9waWN0dXJlX2ludGVydmFsID0gc2VxLT50aW1pbmdfaW5m by5lcXVhbF9waWN0dXJlX2ludGVydmFsLAotICAgICAgICB9LAotICAgICAgICAubnVtX3VuaXRz X2luX2Rpc3BsYXlfdGljayA9IHNlcS0+dGltaW5nX2luZm8ubnVtX3VuaXRzX2luX2Rpc3BsYXlf dGljaywKLSAgICAgICAgLnRpbWVfc2NhbGUgPSBzZXEtPnRpbWluZ19pbmZvLnRpbWVfc2NhbGUs Ci0gICAgICAgIC5udW1fdGlja3NfcGVyX3BpY3R1cmVfbWludXNfMSA9IHNlcS0+dGltaW5nX2lu Zm8ubnVtX3RpY2tzX3Blcl9waWN0dXJlX21pbnVzXzEsCi0gICAgfTsKLQotICAgICphdjFfY29s b3JfY29uZmlnID0gKFN0ZFZpZGVvQVYxQ29sb3JDb25maWcpIHsKLSAgICAgICAgLmZsYWdzID0g KFN0ZFZpZGVvQVYxQ29sb3JDb25maWdGbGFncykgewotICAgICAgICAgICAgLm1vbm9fY2hyb21l ID0gc2VxLT5jb2xvcl9jb25maWcubW9ub19jaHJvbWUsCi0gICAgICAgICAgICAuY29sb3JfcmFu Z2UgPSBzZXEtPmNvbG9yX2NvbmZpZy5jb2xvcl9yYW5nZSwKLSAgICAgICAgICAgIC5zZXBhcmF0 ZV91dl9kZWx0YV9xID0gc2VxLT5jb2xvcl9jb25maWcuc2VwYXJhdGVfdXZfZGVsdGFfcSwKLSAg ICAgICAgfSwKLSAgICAgICAgLkJpdERlcHRoID0gc2VxLT5jb2xvcl9jb25maWcudHdlbHZlX2Jp dCAgICA/IDEyIDoKLSAgICAgICAgICAgICAgICAgICAgc2VxLT5jb2xvcl9jb25maWcuaGlnaF9i aXRkZXB0aCA/IDEwIDogOCwKLSAgICAgICAgLnN1YnNhbXBsaW5nX3ggPSBzZXEtPmNvbG9yX2Nv bmZpZy5zdWJzYW1wbGluZ194LAotICAgICAgICAuc3Vic2FtcGxpbmdfeSA9IHNlcS0+Y29sb3Jf Y29uZmlnLnN1YnNhbXBsaW5nX3ksCi0gICAgICAgIC5jb2xvcl9wcmltYXJpZXMgPSBzZXEtPmNv bG9yX2NvbmZpZy5jb2xvcl9wcmltYXJpZXMsCi0gICAgICAgIC50cmFuc2Zlcl9jaGFyYWN0ZXJp c3RpY3MgPSBzZXEtPmNvbG9yX2NvbmZpZy50cmFuc2Zlcl9jaGFyYWN0ZXJpc3RpY3MsCi0gICAg ICAgIC5tYXRyaXhfY29lZmZpY2llbnRzID0gc2VxLT5jb2xvcl9jb25maWcubWF0cml4X2NvZWZm aWNpZW50cywKLSAgICB9OwotCi0gICAgKmF2MV9zZXF1ZW5jZV9oZWFkZXIgPSAoU3RkVmlkZW9B VjFTZXF1ZW5jZUhlYWRlcikgewotICAgICAgICAuZmxhZ3MgPSAoU3RkVmlkZW9BVjFTZXF1ZW5j ZUhlYWRlckZsYWdzKSB7Ci0gICAgICAgICAgICAuc3RpbGxfcGljdHVyZSA9IHNlcS0+c3RpbGxf cGljdHVyZSwKLSAgICAgICAgICAgIC5yZWR1Y2VkX3N0aWxsX3BpY3R1cmVfaGVhZGVyID0gc2Vx LT5yZWR1Y2VkX3N0aWxsX3BpY3R1cmVfaGVhZGVyLAotICAgICAgICAgICAgLnVzZV8xMjh4MTI4 X3N1cGVyYmxvY2sgPSBzZXEtPnVzZV8xMjh4MTI4X3N1cGVyYmxvY2ssCi0gICAgICAgICAgICAu ZW5hYmxlX2ZpbHRlcl9pbnRyYSA9IHNlcS0+ZW5hYmxlX2ZpbHRlcl9pbnRyYSwKLSAgICAgICAg ICAgIC5lbmFibGVfaW50cmFfZWRnZV9maWx0ZXIgPSBzZXEtPmVuYWJsZV9pbnRyYV9lZGdlX2Zp bHRlciwKLSAgICAgICAgICAgIC5lbmFibGVfaW50ZXJpbnRyYV9jb21wb3VuZCA9IHNlcS0+ZW5h YmxlX2ludGVyaW50cmFfY29tcG91bmQsCi0gICAgICAgICAgICAuZW5hYmxlX21hc2tlZF9jb21w b3VuZCA9IHNlcS0+ZW5hYmxlX21hc2tlZF9jb21wb3VuZCwKLSAgICAgICAgICAgIC5lbmFibGVf d2FycGVkX21vdGlvbiA9IHNlcS0+ZW5hYmxlX3dhcnBlZF9tb3Rpb24sCi0gICAgICAgICAgICAu ZW5hYmxlX2R1YWxfZmlsdGVyID0gc2VxLT5lbmFibGVfZHVhbF9maWx0ZXIsCi0gICAgICAgICAg ICAuZW5hYmxlX29yZGVyX2hpbnQgPSBzZXEtPmVuYWJsZV9vcmRlcl9oaW50LAotICAgICAgICAg ICAgLmVuYWJsZV9qbnRfY29tcCA9IHNlcS0+ZW5hYmxlX2pudF9jb21wLAotICAgICAgICAgICAg LmVuYWJsZV9yZWZfZnJhbWVfbXZzID0gc2VxLT5lbmFibGVfcmVmX2ZyYW1lX212cywKLSAgICAg ICAgICAgIC5mcmFtZV9pZF9udW1iZXJzX3ByZXNlbnRfZmxhZyA9IHNlcS0+ZnJhbWVfaWRfbnVt YmVyc19wcmVzZW50X2ZsYWcsCi0gICAgICAgICAgICAuZW5hYmxlX3N1cGVycmVzID0gc2VxLT5l bmFibGVfc3VwZXJyZXMsCi0gICAgICAgICAgICAuZW5hYmxlX2NkZWYgPSBzZXEtPmVuYWJsZV9j ZGVmLAotICAgICAgICAgICAgLmVuYWJsZV9yZXN0b3JhdGlvbiA9IHNlcS0+ZW5hYmxlX3Jlc3Rv cmF0aW9uLAotICAgICAgICAgICAgLmZpbG1fZ3JhaW5fcGFyYW1zX3ByZXNlbnQgPSBzZXEtPmZp bG1fZ3JhaW5fcGFyYW1zX3ByZXNlbnQsCi0gICAgICAgICAgICAudGltaW5nX2luZm9fcHJlc2Vu dF9mbGFnID0gc2VxLT50aW1pbmdfaW5mb19wcmVzZW50X2ZsYWcsCi0gICAgICAgICAgICAuaW5p dGlhbF9kaXNwbGF5X2RlbGF5X3ByZXNlbnRfZmxhZyA9IHNlcS0+aW5pdGlhbF9kaXNwbGF5X2Rl bGF5X3ByZXNlbnRfZmxhZywKLSAgICAgICAgfSwKLSAgICAgICAgLnNlcV9wcm9maWxlID0gc2Vx LT5zZXFfcHJvZmlsZSwKLSAgICAgICAgLmZyYW1lX3dpZHRoX2JpdHNfbWludXNfMSA9IHNlcS0+ ZnJhbWVfd2lkdGhfYml0c19taW51c18xLAotICAgICAgICAuZnJhbWVfaGVpZ2h0X2JpdHNfbWlu dXNfMSA9IHNlcS0+ZnJhbWVfaGVpZ2h0X2JpdHNfbWludXNfMSwKLSAgICAgICAgLm1heF9mcmFt ZV93aWR0aF9taW51c18xID0gc2VxLT5tYXhfZnJhbWVfd2lkdGhfbWludXNfMSwKLSAgICAgICAg Lm1heF9mcmFtZV9oZWlnaHRfbWludXNfMSA9IHNlcS0+bWF4X2ZyYW1lX2hlaWdodF9taW51c18x LAotICAgICAgICAuZGVsdGFfZnJhbWVfaWRfbGVuZ3RoX21pbnVzXzIgPSBzZXEtPmRlbHRhX2Zy YW1lX2lkX2xlbmd0aF9taW51c18yLAotICAgICAgICAuYWRkaXRpb25hbF9mcmFtZV9pZF9sZW5n dGhfbWludXNfMSA9IHNlcS0+YWRkaXRpb25hbF9mcmFtZV9pZF9sZW5ndGhfbWludXNfMSwKLSAg ICAgICAgLm9yZGVyX2hpbnRfYml0c19taW51c18xID0gc2VxLT5vcmRlcl9oaW50X2JpdHNfbWlu dXNfMSwKLSAgICAgICAgLnNlcV9mb3JjZV9pbnRlZ2VyX212ID0gc2VxLT5zZXFfZm9yY2VfaW50 ZWdlcl9tdiwKLSAgICAgICAgLnNlcV9mb3JjZV9zY3JlZW5fY29udGVudF90b29scyA9IHNlcS0+ c2VxX2ZvcmNlX3NjcmVlbl9jb250ZW50X3Rvb2xzLAotICAgICAgICAucFRpbWluZ0luZm8gPSBh djFfdGltaW5nX2luZm8sCi0gICAgICAgIC5wQ29sb3JDb25maWcgPSBhdjFfY29sb3JfY29uZmln LAotICAgIH07Ci19Ci0KLXN0YXRpYyBpbnQgdmtfYXYxX2NyZWF0ZV9wYXJhbXMoQVZDb2RlY0Nv bnRleHQgKmF2Y3R4LCBBVkJ1ZmZlclJlZiAqKmJ1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgQVYxVnVsa2FuRGVjb2RlUGljdHVyZSAqYXApCi17Ci0gICAgaW50IGVycjsKLSAg ICBGRlZ1bGthbkRlY29kZUNvbnRleHQgKmRlYyA9IGF2Y3R4LT5pbnRlcm5hbC0+aHdhY2NlbF9w cml2X2RhdGE7Ci0gICAgRkZWdWxrYW5EZWNvZGVTaGFyZWQgKmN0eCA9IGRlYy0+c2hhcmVkX2N0 eDsKLQotICAgIFN0ZFZpZGVvQVYxU2VxdWVuY2VIZWFkZXIgYXYxX3NlcXVlbmNlX2hlYWRlcjsK LSAgICBTdGRWaWRlb0FWMVRpbWluZ0luZm8gYXYxX3RpbWluZ19pbmZvOwotICAgIFN0ZFZpZGVv QVYxQ29sb3JDb25maWcgYXYxX2NvbG9yX2NvbmZpZzsKLSAgICBWa1ZpZGVvRGVjb2RlQVYxU2Vz c2lvblBhcmFtZXRlcnNDcmVhdGVJbmZvS0hSIGF2MV9wYXJhbXM7Ci0gICAgVmtWaWRlb1Nlc3Np b25QYXJhbWV0ZXJzQ3JlYXRlSW5mb0tIUiBzZXNzaW9uX3BhcmFtc19jcmVhdGU7Ci0KLSAgICB2 a19hdjFfcGFyYW1zX2ZpbGwoYXZjdHgsICZhdjFfdGltaW5nX2luZm8sICZhdjFfY29sb3JfY29u ZmlnLAotICAgICAgICAgICAgICAgICAgICAgICAmYXYxX3NlcXVlbmNlX2hlYWRlcik7Ci0KLSAg ICBhdjFfcGFyYW1zID0gKFZrVmlkZW9EZWNvZGVBVjFTZXNzaW9uUGFyYW1ldGVyc0NyZWF0ZUlu Zm9LSFIpIHsKLSAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfVklERU9fREVDT0RF X0FWMV9TRVNTSU9OX1BBUkFNRVRFUlNfQ1JFQVRFX0lORk9fS0hSLAotICAgICAgICAucFN0ZFNl cXVlbmNlSGVhZGVyID0gJmF2MV9zZXF1ZW5jZV9oZWFkZXIsCi0gICAgfTsKLSAgICBzZXNzaW9u X3BhcmFtc19jcmVhdGUgPSAoVmtWaWRlb1Nlc3Npb25QYXJhbWV0ZXJzQ3JlYXRlSW5mb0tIUikg ewotICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9WSURFT19TRVNTSU9OX1BBUkFN RVRFUlNfQ1JFQVRFX0lORk9fS0hSLAotICAgICAgICAucE5leHQgPSAmYXYxX3BhcmFtcywKLSAg ICAgICAgLnZpZGVvU2Vzc2lvbiA9IGN0eC0+Y29tbW9uLnNlc3Npb24sCi0gICAgICAgIC52aWRl b1Nlc3Npb25QYXJhbWV0ZXJzVGVtcGxhdGUgPSBWS19OVUxMX0hBTkRMRSwKLSAgICB9OwotCi0g ICAgZXJyID0gZmZfdmtfZGVjb2RlX2NyZWF0ZV9wYXJhbXMoYnVmLCBhdmN0eCwgY3R4LCAmc2Vz c2lvbl9wYXJhbXNfY3JlYXRlKTsKLSAgICBpZiAoZXJyIDwgMCkKLSAgICAgICAgcmV0dXJuIGVy cjsKLQotICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0RFQlVHLCAiQ3JlYXRlZCBmcmFtZSBwYXJh bWV0ZXJzXG4iKTsKLQotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHZrX2F2MV9zdGFy dF9mcmFtZShBVkNvZGVjQ29udGV4dCAgICAgICAgICAqYXZjdHgsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBhdl91bnVzZWQgY29uc3QgQVZCdWZmZXJSZWYgKmJ1ZmZlcl9yZWYsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdl91bnVzZWQgY29uc3QgdWludDhfdCAqYnVm ZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZfdW51c2VkIHVpbnQzMl90ICAg ICAgIHNpemUpCi17Ci0gICAgaW50IGVycjsKLSAgICBpbnQgcmVmX2NvdW50ID0gMDsKLSAgICBB VjFEZWNDb250ZXh0ICpzID0gYXZjdHgtPnByaXZfZGF0YTsKLSAgICBjb25zdCBBVjFGcmFtZSAq cGljID0gJnMtPmN1cl9mcmFtZTsKLSAgICBGRlZ1bGthbkRlY29kZUNvbnRleHQgKmRlYyA9IGF2 Y3R4LT5pbnRlcm5hbC0+aHdhY2NlbF9wcml2X2RhdGE7Ci0gICAgdWludDMyX3QgZnJhbWVfaWRf YWxsb2NfbWFzayA9IDA7Ci0KLSAgICBBVjFWdWxrYW5EZWNvZGVQaWN0dXJlICphcCA9IHBpYy0+ aHdhY2NlbF9waWN0dXJlX3ByaXZhdGU7Ci0gICAgRkZWdWxrYW5EZWNvZGVQaWN0dXJlICp2cCA9 ICZhcC0+dnA7Ci0KLSAgICBjb25zdCBBVjFSYXdGcmFtZUhlYWRlciAqZnJhbWVfaGVhZGVyID0g cy0+cmF3X2ZyYW1lX2hlYWRlcjsKLSAgICBjb25zdCBBVjFSYXdGaWxtR3JhaW5QYXJhbXMgKmZp bG1fZ3JhaW4gPSAmcy0+Y3VyX2ZyYW1lLmZpbG1fZ3JhaW47Ci0KLSAgICBjb25zdCBpbnQgYXBw bHlfZ3JhaW4gPSAhKGF2Y3R4LT5leHBvcnRfc2lkZV9kYXRhICYgQVZfQ09ERUNfRVhQT1JUX0RB VEFfRklMTV9HUkFJTikgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxtX2dyYWlu LT5hcHBseV9ncmFpbjsKLSAgICBTdGRWaWRlb0FWMUZyYW1lUmVzdG9yYXRpb25UeXBlIHJlbWFw X2xyX3R5cGVbNF0gPSB7IFNURF9WSURFT19BVjFfRlJBTUVfUkVTVE9SQVRJT05fVFlQRV9OT05F LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgU1REX1ZJREVPX0FWMV9GUkFNRV9SRVNUT1JBVElPTl9UWVBFX1NXSVRDSEFCTEUsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVERf VklERU9fQVYxX0ZSQU1FX1JFU1RPUkFUSU9OX1RZUEVfV0lFTkVSLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1REX1ZJREVPX0FWMV9G UkFNRV9SRVNUT1JBVElPTl9UWVBFX1NHUlBST0ogfTsKLQotICAgIC8qIFVzZSB0aGUgY3VycmVu dCBmcmFtZV9pZHMgaW4gcmVmW10gdG8gZGVjaWRlIG9jY3VwaWVkIGZyYW1lX2lkcyAqLwotICAg IGZvciAoaW50IGkgPSAwOyBpIDwgU1REX1ZJREVPX0FWMV9OVU1fUkVGX0ZSQU1FUzsgaSsrKSB7 Ci0gICAgICAgIGNvbnN0IEFWMVZ1bGthbkRlY29kZVBpY3R1cmUqIHJwID0gcy0+cmVmW2ldLmh3 YWNjZWxfcGljdHVyZV9wcml2YXRlOwotICAgICAgICBpZiAocnApCi0gICAgICAgICAgICBmcmFt ZV9pZF9hbGxvY19tYXNrIHw9IDEgPDwgcnAtPmZyYW1lX2lkOwotICAgIH0KLQotICAgIGlmICgh YXAtPmZyYW1lX2lkX3NldCkgewotICAgICAgICB1bnNpZ25lZCBzbG90X2lkeCA9IDA7Ci0gICAg ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAzMjsgaSsrKSB7Ci0gICAgICAgICAgICBpZiAo IShmcmFtZV9pZF9hbGxvY19tYXNrICYgKDEgPDwgaSkpKSB7Ci0gICAgICAgICAgICAgICAgc2xv dF9pZHggPSBpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAg ICB9Ci0gICAgICAgIGFwLT5mcmFtZV9pZCA9IHNsb3RfaWR4OwotICAgICAgICBhcC0+ZnJhbWVf aWRfc2V0ID0gMTsKLSAgICAgICAgZnJhbWVfaWRfYWxsb2NfbWFzayB8PSAoMSA8PCBzbG90X2lk eCk7Ci0gICAgfQotCi0gICAgYXAtPnJlZl9mcmFtZV9zaWduX2JpYXNfbWFzayA9IDB4MDsKLSAg ICBmb3IgKGludCBpID0gMDsgaSA8IFNURF9WSURFT19BVjFfVE9UQUxfUkVGU19QRVJfRlJBTUU7 IGkrKykKLSAgICAgICAgYXAtPnJlZl9mcmFtZV9zaWduX2JpYXNfbWFzayB8PSBwaWMtPnJlZl9m cmFtZV9zaWduX2JpYXNbaV0gPDwgaTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgU1REX1ZJ REVPX0FWMV9SRUZTX1BFUl9GUkFNRTsgaSsrKSB7Ci0gICAgICAgIGNvbnN0IGludCBpZHggPSBw aWMtPnJhd19mcmFtZV9oZWFkZXItPnJlZl9mcmFtZV9pZHhbaV07Ci0gICAgICAgIGNvbnN0IEFW MUZyYW1lICpyZWZfZnJhbWUgPSAmcy0+cmVmW2lkeF07Ci0gICAgICAgIEFWMVZ1bGthbkRlY29k ZVBpY3R1cmUgKmhwID0gcmVmX2ZyYW1lLT5od2FjY2VsX3BpY3R1cmVfcHJpdmF0ZTsKLSAgICAg ICAgaW50IGZvdW5kID0gMDsKLQotICAgICAgICBpZiAoIXJlZl9mcmFtZS0+ZikKLSAgICAgICAg ICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgcmVmX2NvdW50OyBq KyspIHsKLSAgICAgICAgICAgIGlmICh2cC0+cmVmX3Nsb3RzW2pdLnNsb3RJbmRleCA9PSBocC0+ ZnJhbWVfaWQpIHsKLSAgICAgICAgICAgICAgICBmb3VuZCA9IDE7Ci0gICAgICAgICAgICAgICAg YnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGZvdW5kKQotICAg ICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgZXJyID0gdmtfYXYxX2ZpbGxfcGljdChhdmN0 eCwgJmFwLT5yZWZfc3JjW3JlZl9jb3VudF0sICZ2cC0+cmVmX3Nsb3RzW3JlZl9jb3VudF0sCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnZwLT5yZWZzW3JlZl9jb3VudF0sICZhcC0+ c3RkX3JlZnNbcmVmX2NvdW50XSwgJmFwLT52a2F2MV9yZWZzW3JlZl9jb3VudF0sCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcmVmX2ZyYW1lLCAwLCAwLCByZWZfZnJhbWUtPm9yZGVy X2hpbnRzKTsKLSAgICAgICAgaWYgKGVyciA8IDApCi0gICAgICAgICAgICByZXR1cm4gZXJyOwot Ci0gICAgICAgIHJlZl9jb3VudCsrOwotICAgIH0KLQotICAgIGVyciA9IHZrX2F2MV9maWxsX3Bp Y3QoYXZjdHgsIE5VTEwsICZ2cC0+cmVmX3Nsb3QsICZ2cC0+cmVmLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgJmFwLT5zdGRfcmVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgJmFw LT52a2F2MV9yZWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBwaWMsIDEsIGFwcGx5X2dy YWluLCBOVUxMKTsKLSAgICBpZiAoZXJyIDwgMCkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAg IGFwLT5hdjFfcGljX2luZm8gPSAoVmtWaWRlb0RlY29kZUFWMVBpY3R1cmVJbmZvS0hSKSB7Ci0g ICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX1ZJREVPX0RFQ09ERV9BVjFfUElDVFVS RV9JTkZPX0tIUiwKLSAgICAgICAgLnBTdGRQaWN0dXJlSW5mbyA9ICZhcC0+c3RkX3BpY19pbmZv LAotICAgICAgICAuZnJhbWVIZWFkZXJPZmZzZXQgPSAwLAotICAgICAgICAudGlsZUNvdW50ID0g MCwKLSAgICAgICAgLnBUaWxlT2Zmc2V0cyA9IE5VTEwsCi0gICAgICAgIC5wVGlsZVNpemVzID0g YXAtPnRpbGVfc2l6ZXMsCi0gICAgfTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgU1REX1ZJ REVPX0FWMV9SRUZTX1BFUl9GUkFNRTsgaSsrKSB7Ci0gICAgICAgIGNvbnN0IGludCBpZHggPSBw aWMtPnJhd19mcmFtZV9oZWFkZXItPnJlZl9mcmFtZV9pZHhbaV07Ci0gICAgICAgIGNvbnN0IEFW MUZyYW1lICpyZWZfZnJhbWUgPSAmcy0+cmVmW2lkeF07Ci0gICAgICAgIEFWMVZ1bGthbkRlY29k ZVBpY3R1cmUgKmhwID0gcmVmX2ZyYW1lLT5od2FjY2VsX3BpY3R1cmVfcHJpdmF0ZTsKLQotICAg ICAgICBpZiAoIXJlZl9mcmFtZS0+ZikKLSAgICAgICAgICAgIGFwLT5hdjFfcGljX2luZm8ucmVm ZXJlbmNlTmFtZVNsb3RJbmRpY2VzW2ldID0gQVYxX1JFRl9GUkFNRV9OT05FOwotICAgICAgICBl bHNlCi0gICAgICAgICAgICBhcC0+YXYxX3BpY19pbmZvLnJlZmVyZW5jZU5hbWVTbG90SW5kaWNl c1tpXSA9IGhwLT5mcmFtZV9pZDsKLSAgICB9Ci0KLSAgICB2cC0+ZGVjb2RlX2luZm8gPSAoVmtW aWRlb0RlY29kZUluZm9LSFIpIHsKLSAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVf VklERU9fREVDT0RFX0lORk9fS0hSLAotICAgICAgICAucE5leHQgPSAmYXAtPmF2MV9waWNfaW5m bywKLSAgICAgICAgLmZsYWdzID0gMHgwLAotICAgICAgICAucFNldHVwUmVmZXJlbmNlU2xvdCA9 ICZ2cC0+cmVmX3Nsb3QsCi0gICAgICAgIC5yZWZlcmVuY2VTbG90Q291bnQgPSByZWZfY291bnQs Ci0gICAgICAgIC5wUmVmZXJlbmNlU2xvdHMgPSB2cC0+cmVmX3Nsb3RzLAotICAgICAgICAuZHN0 UGljdHVyZVJlc291cmNlID0gKFZrVmlkZW9QaWN0dXJlUmVzb3VyY2VJbmZvS0hSKSB7Ci0gICAg ICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9WSURFT19QSUNUVVJFX1JFU09VUkNF X0lORk9fS0hSLAotICAgICAgICAgICAgLmNvZGVkT2Zmc2V0ID0gKFZrT2Zmc2V0MkQpeyAwLCAw IH0sCi0gICAgICAgICAgICAuY29kZWRFeHRlbnQgPSAoVmtFeHRlbnQyRCl7IHBpYy0+Zi0+d2lk dGgsIHBpYy0+Zi0+aGVpZ2h0IH0sCi0gICAgICAgICAgICAuYmFzZUFycmF5TGF5ZXIgPSAwLAot ICAgICAgICAgICAgLmltYWdlVmlld0JpbmRpbmcgPSB2cC0+dmlldy5vdXRbMF0sCi0gICAgICAg IH0sCi0gICAgfTsKLQotICAgIGFwLT50aWxlX2luZm8gPSAoU3RkVmlkZW9BVjFUaWxlSW5mbykg ewotICAgICAgICAuZmxhZ3MgPSAoU3RkVmlkZW9BVjFUaWxlSW5mb0ZsYWdzKSB7Ci0gICAgICAg ICAgICAudW5pZm9ybV90aWxlX3NwYWNpbmdfZmxhZyA9IGZyYW1lX2hlYWRlci0+dW5pZm9ybV90 aWxlX3NwYWNpbmdfZmxhZywKLSAgICAgICAgfSwKLSAgICAgICAgLlRpbGVDb2xzID0gZnJhbWVf aGVhZGVyLT50aWxlX2NvbHMsCi0gICAgICAgIC5UaWxlUm93cyA9IGZyYW1lX2hlYWRlci0+dGls ZV9yb3dzLAotICAgICAgICAuY29udGV4dF91cGRhdGVfdGlsZV9pZCA9IGZyYW1lX2hlYWRlci0+ Y29udGV4dF91cGRhdGVfdGlsZV9pZCwKLSAgICAgICAgLnRpbGVfc2l6ZV9ieXRlc19taW51c18x ID0gZnJhbWVfaGVhZGVyLT50aWxlX3NpemVfYnl0ZXNfbWludXMxLAotICAgICAgICAucFdpZHRo SW5TYnNNaW51czEgPSBhcC0+d2lkdGhfaW5fc2JzX21pbnVzMSwKLSAgICAgICAgLnBIZWlnaHRJ blNic01pbnVzMSA9IGFwLT5oZWlnaHRfaW5fc2JzX21pbnVzMSwKLSAgICAgICAgLnBNaUNvbFN0 YXJ0cyA9IGFwLT5taV9jb2xfc3RhcnRzLAotICAgICAgICAucE1pUm93U3RhcnRzID0gYXAtPm1p X3Jvd19zdGFydHMsCi0gICAgfTsKLQotICAgIGFwLT5xdWFudGl6YXRpb24gPSAoU3RkVmlkZW9B VjFRdWFudGl6YXRpb24pIHsKLSAgICAgICAgLmZsYWdzLnVzaW5nX3FtYXRyaXggPSBmcmFtZV9o ZWFkZXItPnVzaW5nX3FtYXRyaXgsCi0gICAgICAgIC5mbGFncy5kaWZmX3V2X2RlbHRhID0gZnJh bWVfaGVhZGVyLT5kaWZmX3V2X2RlbHRhLAotICAgICAgICAuYmFzZV9xX2lkeCA9IGZyYW1lX2hl YWRlci0+YmFzZV9xX2lkeCwKLSAgICAgICAgLkRlbHRhUVlEYyA9IGZyYW1lX2hlYWRlci0+ZGVs dGFfcV95X2RjLAotICAgICAgICAuRGVsdGFRVURjID0gZnJhbWVfaGVhZGVyLT5kZWx0YV9xX3Vf ZGMsCi0gICAgICAgIC5EZWx0YVFVQWMgPSBmcmFtZV9oZWFkZXItPmRlbHRhX3FfdV9hYywKLSAg ICAgICAgLkRlbHRhUVZEYyA9IGZyYW1lX2hlYWRlci0+ZGVsdGFfcV92X2RjLAotICAgICAgICAu RGVsdGFRVkFjID0gZnJhbWVfaGVhZGVyLT5kZWx0YV9xX3ZfYWMsCi0gICAgICAgIC5xbV95ID0g ZnJhbWVfaGVhZGVyLT5xbV95LAotICAgICAgICAucW1fdSA9IGZyYW1lX2hlYWRlci0+cW1fdSwK LSAgICAgICAgLnFtX3YgPSBmcmFtZV9oZWFkZXItPnFtX3YsCi0gICAgfTsKLQotICAgIGFwLT5s b29wX2ZpbHRlciA9IChTdGRWaWRlb0FWMUxvb3BGaWx0ZXIpIHsKLSAgICAgICAgLmZsYWdzID0g KFN0ZFZpZGVvQVYxTG9vcEZpbHRlckZsYWdzKSB7Ci0gICAgICAgICAgICAubG9vcF9maWx0ZXJf ZGVsdGFfZW5hYmxlZCA9IGZyYW1lX2hlYWRlci0+bG9vcF9maWx0ZXJfZGVsdGFfZW5hYmxlZCwK LSAgICAgICAgICAgIC5sb29wX2ZpbHRlcl9kZWx0YV91cGRhdGUgPSBmcmFtZV9oZWFkZXItPmxv b3BfZmlsdGVyX2RlbHRhX3VwZGF0ZSwKLSAgICAgICAgfSwKLSAgICAgICAgLmxvb3BfZmlsdGVy X3NoYXJwbmVzcyA9IGZyYW1lX2hlYWRlci0+bG9vcF9maWx0ZXJfc2hhcnBuZXNzLAotICAgIH07 Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IFNURF9WSURFT19BVjFfTUFYX0xPT1BfRklMVEVS X1NUUkVOR1RIUzsgaSsrKQotICAgICAgICBhcC0+bG9vcF9maWx0ZXIubG9vcF9maWx0ZXJfbGV2 ZWxbaV0gPSBmcmFtZV9oZWFkZXItPmxvb3BfZmlsdGVyX2xldmVsW2ldOwotICAgIGZvciAoaW50 IGkgPSAwOyBpIDwgU1REX1ZJREVPX0FWMV9MT09QX0ZJTFRFUl9BREpVU1RNRU5UUzsgaSsrKQot ICAgICAgICBhcC0+bG9vcF9maWx0ZXIubG9vcF9maWx0ZXJfbW9kZV9kZWx0YXNbaV0gPSBmcmFt ZV9oZWFkZXItPmxvb3BfZmlsdGVyX21vZGVfZGVsdGFzW2ldOwotCi0gICAgYXAtPmNkZWYgPSAo U3RkVmlkZW9BVjFDREVGKSB7Ci0gICAgICAgIC5jZGVmX2RhbXBpbmdfbWludXNfMyA9IGZyYW1l X2hlYWRlci0+Y2RlZl9kYW1waW5nX21pbnVzXzMsCi0gICAgICAgIC5jZGVmX2JpdHMgPSBmcmFt ZV9oZWFkZXItPmNkZWZfYml0cywKLSAgICB9OwotCi0gICAgYXAtPmxvb3BfcmVzdG9yYXRpb24g PSAoU3RkVmlkZW9BVjFMb29wUmVzdG9yYXRpb24pIHsKLSAgICAgICAgLkZyYW1lUmVzdG9yYXRp b25UeXBlWzBdID0gcmVtYXBfbHJfdHlwZVtmcmFtZV9oZWFkZXItPmxyX3R5cGVbMF1dLAotICAg ICAgICAuRnJhbWVSZXN0b3JhdGlvblR5cGVbMV0gPSByZW1hcF9scl90eXBlW2ZyYW1lX2hlYWRl ci0+bHJfdHlwZVsxXV0sCi0gICAgICAgIC5GcmFtZVJlc3RvcmF0aW9uVHlwZVsyXSA9IHJlbWFw X2xyX3R5cGVbZnJhbWVfaGVhZGVyLT5scl90eXBlWzJdXSwKLSAgICAgICAgLkxvb3BSZXN0b3Jh dGlvblNpemVbMF0gPSAxICsgZnJhbWVfaGVhZGVyLT5scl91bml0X3NoaWZ0LAotICAgICAgICAu TG9vcFJlc3RvcmF0aW9uU2l6ZVsxXSA9IDEgKyBmcmFtZV9oZWFkZXItPmxyX3VuaXRfc2hpZnQg LSBmcmFtZV9oZWFkZXItPmxyX3V2X3NoaWZ0LAotICAgICAgICAuTG9vcFJlc3RvcmF0aW9uU2l6 ZVsyXSA9IDEgKyBmcmFtZV9oZWFkZXItPmxyX3VuaXRfc2hpZnQgLSBmcmFtZV9oZWFkZXItPmxy X3V2X3NoaWZ0LAotICAgIH07Ci0KLSAgICBhcC0+ZmlsbV9ncmFpbiA9IChTdGRWaWRlb0FWMUZp bG1HcmFpbikgewotICAgICAgICAuZmxhZ3MgPSAoU3RkVmlkZW9BVjFGaWxtR3JhaW5GbGFncykg ewotICAgICAgICAgICAgLmNocm9tYV9zY2FsaW5nX2Zyb21fbHVtYSA9IGZpbG1fZ3JhaW4tPmNo cm9tYV9zY2FsaW5nX2Zyb21fbHVtYSwKLSAgICAgICAgICAgIC5vdmVybGFwX2ZsYWcgPSBmaWxt X2dyYWluLT5vdmVybGFwX2ZsYWcsCi0gICAgICAgICAgICAuY2xpcF90b19yZXN0cmljdGVkX3Jh bmdlID0gZmlsbV9ncmFpbi0+Y2xpcF90b19yZXN0cmljdGVkX3JhbmdlLAotICAgICAgICB9LAot ICAgICAgICAuZ3JhaW5fc2NhbGluZ19taW51c184ID0gZmlsbV9ncmFpbi0+Z3JhaW5fc2NhbGlu Z19taW51c184LAotICAgICAgICAuYXJfY29lZmZfbGFnID0gZmlsbV9ncmFpbi0+YXJfY29lZmZf bGFnLAotICAgICAgICAuYXJfY29lZmZfc2hpZnRfbWludXNfNiA9IGZpbG1fZ3JhaW4tPmFyX2Nv ZWZmX3NoaWZ0X21pbnVzXzYsCi0gICAgICAgIC5ncmFpbl9zY2FsZV9zaGlmdCA9IGZpbG1fZ3Jh aW4tPmdyYWluX3NjYWxlX3NoaWZ0LAotICAgICAgICAuZ3JhaW5fc2VlZCA9IGZpbG1fZ3JhaW4t PmdyYWluX3NlZWQsCi0gICAgICAgIC5maWxtX2dyYWluX3BhcmFtc19yZWZfaWR4ID0gZmlsbV9n cmFpbi0+ZmlsbV9ncmFpbl9wYXJhbXNfcmVmX2lkeCwKLSAgICAgICAgLm51bV95X3BvaW50cyA9 IGZpbG1fZ3JhaW4tPm51bV95X3BvaW50cywKLSAgICAgICAgLm51bV9jYl9wb2ludHMgPSBmaWxt X2dyYWluLT5udW1fY2JfcG9pbnRzLAotICAgICAgICAubnVtX2NyX3BvaW50cyA9IGZpbG1fZ3Jh aW4tPm51bV9jcl9wb2ludHMsCi0gICAgICAgIC5jYl9tdWx0ID0gZmlsbV9ncmFpbi0+Y2JfbXVs dCwKLSAgICAgICAgLmNiX2x1bWFfbXVsdCA9IGZpbG1fZ3JhaW4tPmNiX2x1bWFfbXVsdCwKLSAg ICAgICAgLmNiX29mZnNldCA9IGZpbG1fZ3JhaW4tPmNiX29mZnNldCwKLSAgICAgICAgLmNyX211 bHQgPSBmaWxtX2dyYWluLT5jcl9tdWx0LAotICAgICAgICAuY3JfbHVtYV9tdWx0ID0gZmlsbV9n cmFpbi0+Y3JfbHVtYV9tdWx0LAotICAgICAgICAuY3Jfb2Zmc2V0ID0gZmlsbV9ncmFpbi0+Y3Jf b2Zmc2V0LAotICAgIH07Ci0KLSAgICAvKiBTZXR1cCBmcmFtZSBoZWFkZXIgKi8KLSAgICBhcC0+ c3RkX3BpY19pbmZvID0gKFN0ZFZpZGVvRGVjb2RlQVYxUGljdHVyZUluZm8pIHsKLSAgICAgICAg LmZsYWdzID0gKFN0ZFZpZGVvRGVjb2RlQVYxUGljdHVyZUluZm9GbGFncykgewotICAgICAgICAg ICAgLmVycm9yX3Jlc2lsaWVudF9tb2RlID0gZnJhbWVfaGVhZGVyLT5lcnJvcl9yZXNpbGllbnRf bW9kZSwKLSAgICAgICAgICAgIC5kaXNhYmxlX2NkZl91cGRhdGUgPSBmcmFtZV9oZWFkZXItPmRp c2FibGVfY2RmX3VwZGF0ZSwKLSAgICAgICAgICAgIC51c2Vfc3VwZXJyZXMgPSBmcmFtZV9oZWFk ZXItPnVzZV9zdXBlcnJlcywKLSAgICAgICAgICAgIC5yZW5kZXJfYW5kX2ZyYW1lX3NpemVfZGlm ZmVyZW50ID0gZnJhbWVfaGVhZGVyLT5yZW5kZXJfYW5kX2ZyYW1lX3NpemVfZGlmZmVyZW50LAot ICAgICAgICAgICAgLmFsbG93X3NjcmVlbl9jb250ZW50X3Rvb2xzID0gZnJhbWVfaGVhZGVyLT5h bGxvd19zY3JlZW5fY29udGVudF90b29scywKLSAgICAgICAgICAgIC5pc19maWx0ZXJfc3dpdGNo YWJsZSA9IGZyYW1lX2hlYWRlci0+aXNfZmlsdGVyX3N3aXRjaGFibGUsCi0gICAgICAgICAgICAu Zm9yY2VfaW50ZWdlcl9tdiA9IHBpYy0+Zm9yY2VfaW50ZWdlcl9tdiwKLSAgICAgICAgICAgIC5m cmFtZV9zaXplX292ZXJyaWRlX2ZsYWcgPSBmcmFtZV9oZWFkZXItPmZyYW1lX3NpemVfb3ZlcnJp ZGVfZmxhZywKLSAgICAgICAgICAgIC5idWZmZXJfcmVtb3ZhbF90aW1lX3ByZXNlbnRfZmxhZyA9 IGZyYW1lX2hlYWRlci0+YnVmZmVyX3JlbW92YWxfdGltZV9wcmVzZW50X2ZsYWcsCi0gICAgICAg ICAgICAuYWxsb3dfaW50cmFiYyA9IGZyYW1lX2hlYWRlci0+YWxsb3dfaW50cmFiYywKLSAgICAg ICAgICAgIC5mcmFtZV9yZWZzX3Nob3J0X3NpZ25hbGluZyA9IGZyYW1lX2hlYWRlci0+ZnJhbWVf cmVmc19zaG9ydF9zaWduYWxpbmcsCi0gICAgICAgICAgICAuYWxsb3dfaGlnaF9wcmVjaXNpb25f bXYgPSBmcmFtZV9oZWFkZXItPmFsbG93X2hpZ2hfcHJlY2lzaW9uX212LAotICAgICAgICAgICAg LmlzX21vdGlvbl9tb2RlX3N3aXRjaGFibGUgPSBmcmFtZV9oZWFkZXItPmlzX21vdGlvbl9tb2Rl X3N3aXRjaGFibGUsCi0gICAgICAgICAgICAudXNlX3JlZl9mcmFtZV9tdnMgPSBmcmFtZV9oZWFk ZXItPnVzZV9yZWZfZnJhbWVfbXZzLAotICAgICAgICAgICAgLmRpc2FibGVfZnJhbWVfZW5kX3Vw ZGF0ZV9jZGYgPSBmcmFtZV9oZWFkZXItPmRpc2FibGVfZnJhbWVfZW5kX3VwZGF0ZV9jZGYsCi0g ICAgICAgICAgICAuYWxsb3dfd2FycGVkX21vdGlvbiA9IGZyYW1lX2hlYWRlci0+YWxsb3dfd2Fy cGVkX21vdGlvbiwKLSAgICAgICAgICAgIC5yZWR1Y2VkX3R4X3NldCA9IGZyYW1lX2hlYWRlci0+ cmVkdWNlZF90eF9zZXQsCi0gICAgICAgICAgICAucmVmZXJlbmNlX3NlbGVjdCA9IGZyYW1lX2hl YWRlci0+cmVmZXJlbmNlX3NlbGVjdCwKLSAgICAgICAgICAgIC5za2lwX21vZGVfcHJlc2VudCA9 IGZyYW1lX2hlYWRlci0+c2tpcF9tb2RlX3ByZXNlbnQsCi0gICAgICAgICAgICAuZGVsdGFfcV9w cmVzZW50ID0gZnJhbWVfaGVhZGVyLT5kZWx0YV9xX3ByZXNlbnQsCi0gICAgICAgICAgICAuZGVs dGFfbGZfcHJlc2VudCA9IGZyYW1lX2hlYWRlci0+ZGVsdGFfbGZfcHJlc2VudCwKLSAgICAgICAg ICAgIC5kZWx0YV9sZl9tdWx0aSA9IGZyYW1lX2hlYWRlci0+ZGVsdGFfbGZfbXVsdGksCi0gICAg ICAgICAgICAuc2VnbWVudGF0aW9uX2VuYWJsZWQgPSBmcmFtZV9oZWFkZXItPnNlZ21lbnRhdGlv bl9lbmFibGVkLAotICAgICAgICAgICAgLnNlZ21lbnRhdGlvbl91cGRhdGVfbWFwID0gZnJhbWVf aGVhZGVyLT5zZWdtZW50YXRpb25fdXBkYXRlX21hcCwKLSAgICAgICAgICAgIC5zZWdtZW50YXRp b25fdGVtcG9yYWxfdXBkYXRlID0gZnJhbWVfaGVhZGVyLT5zZWdtZW50YXRpb25fdGVtcG9yYWxf dXBkYXRlLAotICAgICAgICAgICAgLnNlZ21lbnRhdGlvbl91cGRhdGVfZGF0YSA9IGZyYW1lX2hl YWRlci0+c2VnbWVudGF0aW9uX3VwZGF0ZV9kYXRhLAotICAgICAgICAgICAgLlVzZXNMciA9IGZy YW1lX2hlYWRlci0+bHJfdHlwZVswXSB8fCBmcmFtZV9oZWFkZXItPmxyX3R5cGVbMV0gfHwgZnJh bWVfaGVhZGVyLT5scl90eXBlWzJdLAotICAgICAgICAgICAgLmFwcGx5X2dyYWluID0gYXBwbHlf Z3JhaW4sCi0gICAgICAgIH0sCi0gICAgICAgIC5mcmFtZV90eXBlID0gZnJhbWVfaGVhZGVyLT5m cmFtZV90eXBlLAotICAgICAgICAuY3VycmVudF9mcmFtZV9pZCA9IGZyYW1lX2hlYWRlci0+Y3Vy cmVudF9mcmFtZV9pZCwKLSAgICAgICAgLk9yZGVySGludCA9IGZyYW1lX2hlYWRlci0+b3JkZXJf aGludCwKLSAgICAgICAgLnByaW1hcnlfcmVmX2ZyYW1lID0gZnJhbWVfaGVhZGVyLT5wcmltYXJ5 X3JlZl9mcmFtZSwKLSAgICAgICAgLnJlZnJlc2hfZnJhbWVfZmxhZ3MgPSBmcmFtZV9oZWFkZXIt PnJlZnJlc2hfZnJhbWVfZmxhZ3MsCi0gICAgICAgIC5pbnRlcnBvbGF0aW9uX2ZpbHRlciA9IGZy YW1lX2hlYWRlci0+aW50ZXJwb2xhdGlvbl9maWx0ZXIsCi0gICAgICAgIC5UeE1vZGUgPSBmcmFt ZV9oZWFkZXItPnR4X21vZGUsCi0gICAgICAgIC5kZWx0YV9xX3JlcyA9IGZyYW1lX2hlYWRlci0+ ZGVsdGFfcV9yZXMsCi0gICAgICAgIC5kZWx0YV9sZl9yZXMgPSBmcmFtZV9oZWFkZXItPmRlbHRh X2xmX3JlcywKLSAgICAgICAgLlNraXBNb2RlRnJhbWVbMF0gPSBzLT5jdXJfZnJhbWUuc2tpcF9t b2RlX2ZyYW1lX2lkeFswXSwKLSAgICAgICAgLlNraXBNb2RlRnJhbWVbMV0gPSBzLT5jdXJfZnJh bWUuc2tpcF9tb2RlX2ZyYW1lX2lkeFsxXSwKLSAgICAgICAgLmNvZGVkX2Rlbm9tID0gZnJhbWVf aGVhZGVyLT5jb2RlZF9kZW5vbSwKLSAgICAgICAgLnBUaWxlSW5mbyA9ICZhcC0+dGlsZV9pbmZv LAotICAgICAgICAucFF1YW50aXphdGlvbiA9ICZhcC0+cXVhbnRpemF0aW9uLAotICAgICAgICAu cFNlZ21lbnRhdGlvbiA9ICZhcC0+c2VnbWVudGF0aW9uLAotICAgICAgICAucExvb3BGaWx0ZXIg PSAmYXAtPmxvb3BfZmlsdGVyLAotICAgICAgICAucENERUYgPSAmYXAtPmNkZWYsCi0gICAgICAg IC5wTG9vcFJlc3RvcmF0aW9uID0gJmFwLT5sb29wX3Jlc3RvcmF0aW9uLAotICAgICAgICAucEds b2JhbE1vdGlvbiA9ICZhcC0+Z2xvYmFsX21vdGlvbiwKLSAgICAgICAgLnBGaWxtR3JhaW4gPSBh cHBseV9ncmFpbiA/ICZhcC0+ZmlsbV9ncmFpbiA6IE5VTEwsCi0gICAgfTsKLQotICAgIGZvciAo aW50IGkgPSAwOyBpIDwgNjQ7IGkrKykgewotICAgICAgICBhcC0+d2lkdGhfaW5fc2JzX21pbnVz MVtpXSA9IGZyYW1lX2hlYWRlci0+d2lkdGhfaW5fc2JzX21pbnVzXzFbaV07Ci0gICAgICAgIGFw LT5oZWlnaHRfaW5fc2JzX21pbnVzMVtpXSA9IGZyYW1lX2hlYWRlci0+aGVpZ2h0X2luX3Nic19t aW51c18xW2ldOwotICAgICAgICBhcC0+bWlfY29sX3N0YXJ0c1tpXSA9IGZyYW1lX2hlYWRlci0+ dGlsZV9zdGFydF9jb2xfc2JbaV07Ci0gICAgICAgIGFwLT5taV9yb3dfc3RhcnRzW2ldID0gZnJh bWVfaGVhZGVyLT50aWxlX3N0YXJ0X3Jvd19zYltpXTsKLSAgICB9Ci0KLSAgICBmb3IgKGludCBp ID0gMDsgaSA8IFNURF9WSURFT19BVjFfTUFYX1NFR01FTlRTOyBpKyspIHsKLSAgICAgICAgYXAt PnNlZ21lbnRhdGlvbi5GZWF0dXJlRW5hYmxlZFtpXSA9IDB4MDsKLSAgICAgICAgZm9yIChpbnQg aiA9IDA7IGogPCBTVERfVklERU9fQVYxX1NFR19MVkxfTUFYOyBqKyspIHsKLSAgICAgICAgICAg IGFwLT5zZWdtZW50YXRpb24uRmVhdHVyZUVuYWJsZWRbaV0gfD0gKGZyYW1lX2hlYWRlci0+ZmVh dHVyZV9lbmFibGVkW2ldW2pdIDw8IGopOwotICAgICAgICAgICAgYXAtPnNlZ21lbnRhdGlvbi5G ZWF0dXJlRGF0YVtpXVtqXSA9IGZyYW1lX2hlYWRlci0+ZmVhdHVyZV92YWx1ZVtpXVtqXTsKLSAg ICAgICAgfQotICAgIH0KLQotICAgIGlmIChkZWMtPnF1aXJrX2F2MV9vZmZzZXQpCi0gICAgICAg IGZvciAoaW50IGkgPSAxOyBpIDwgU1REX1ZJREVPX0FWMV9UT1RBTF9SRUZTX1BFUl9GUkFNRTsg aSsrKQotICAgICAgICAgICAgYXAtPnN0ZF9waWNfaW5mby5PcmRlckhpbnRzW2kgLSAxXSA9IHBp Yy0+b3JkZXJfaGludHNbaV07Ci0gICAgZWxzZQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8 IFNURF9WSURFT19BVjFfVE9UQUxfUkVGU19QRVJfRlJBTUU7IGkrKykKLSAgICAgICAgICAgIGFw LT5zdGRfcGljX2luZm8uT3JkZXJIaW50c1tpXSA9IHBpYy0+b3JkZXJfaGludHNbaV07Ci0KLSAg ICBmb3IgKGludCBpID0gMDsgaSA8IFNURF9WSURFT19BVjFfVE9UQUxfUkVGU19QRVJfRlJBTUU7 IGkrKykgewotICAgICAgICBhcC0+bG9vcF9maWx0ZXIubG9vcF9maWx0ZXJfcmVmX2RlbHRhc1tp XSA9IGZyYW1lX2hlYWRlci0+bG9vcF9maWx0ZXJfcmVmX2RlbHRhc1tpXTsKLSAgICAgICAgYXAt Pmdsb2JhbF9tb3Rpb24uR21UeXBlW2ldID0gcy0+Y3VyX2ZyYW1lLmdtX3R5cGVbaV07Ci0gICAg ICAgIGZvciAoaW50IGogPSAwOyBqIDwgU1REX1ZJREVPX0FWMV9HTE9CQUxfTU9USU9OX1BBUkFN UzsgaisrKSB7Ci0gICAgICAgICAgICBhcC0+Z2xvYmFsX21vdGlvbi5nbV9wYXJhbXNbaV1bal0g PSBzLT5jdXJfZnJhbWUuZ21fcGFyYW1zW2ldW2pdOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg Zm9yIChpbnQgaSA9IDA7IGkgPCBTVERfVklERU9fQVYxX01BWF9DREVGX0ZJTFRFUl9TVFJFTkdU SFM7IGkrKykgewotICAgICAgICBhcC0+Y2RlZi5jZGVmX3lfcHJpX3N0cmVuZ3RoW2ldID0gZnJh bWVfaGVhZGVyLT5jZGVmX3lfcHJpX3N0cmVuZ3RoW2ldOwotICAgICAgICBhcC0+Y2RlZi5jZGVm X3lfc2VjX3N0cmVuZ3RoW2ldID0gZnJhbWVfaGVhZGVyLT5jZGVmX3lfc2VjX3N0cmVuZ3RoW2ld OwotICAgICAgICBhcC0+Y2RlZi5jZGVmX3V2X3ByaV9zdHJlbmd0aFtpXSA9IGZyYW1lX2hlYWRl ci0+Y2RlZl91dl9wcmlfc3RyZW5ndGhbaV07Ci0gICAgICAgIGFwLT5jZGVmLmNkZWZfdXZfc2Vj X3N0cmVuZ3RoW2ldID0gZnJhbWVfaGVhZGVyLT5jZGVmX3V2X3NlY19zdHJlbmd0aFtpXTsKLSAg ICB9Ci0KLSAgICBpZiAoYXBwbHlfZ3JhaW4pIHsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg PCBTVERfVklERU9fQVYxX01BWF9OVU1fWV9QT0lOVFM7IGkrKykgewotICAgICAgICAgICAgYXAt PmZpbG1fZ3JhaW4ucG9pbnRfeV92YWx1ZVtpXSA9IGZpbG1fZ3JhaW4tPnBvaW50X3lfdmFsdWVb aV07Ci0gICAgICAgICAgICBhcC0+ZmlsbV9ncmFpbi5wb2ludF95X3NjYWxpbmdbaV0gPSBmaWxt X2dyYWluLT5wb2ludF95X3NjYWxpbmdbaV07Ci0gICAgICAgIH0KLQotICAgICAgICBmb3IgKGlu dCBpID0gMDsgaSA8IFNURF9WSURFT19BVjFfTUFYX05VTV9DQl9QT0lOVFM7IGkrKykgewotICAg ICAgICAgICAgYXAtPmZpbG1fZ3JhaW4ucG9pbnRfY2JfdmFsdWVbaV0gPSBmaWxtX2dyYWluLT5w b2ludF9jYl92YWx1ZVtpXTsKLSAgICAgICAgICAgIGFwLT5maWxtX2dyYWluLnBvaW50X2NiX3Nj YWxpbmdbaV0gPSBmaWxtX2dyYWluLT5wb2ludF9jYl9zY2FsaW5nW2ldOwotICAgICAgICAgICAg YXAtPmZpbG1fZ3JhaW4ucG9pbnRfY3JfdmFsdWVbaV0gPSBmaWxtX2dyYWluLT5wb2ludF9jcl92 YWx1ZVtpXTsKLSAgICAgICAgICAgIGFwLT5maWxtX2dyYWluLnBvaW50X2NyX3NjYWxpbmdbaV0g PSBmaWxtX2dyYWluLT5wb2ludF9jcl9zY2FsaW5nW2ldOwotICAgICAgICB9Ci0KLSAgICAgICAg Zm9yIChpbnQgaSA9IDA7IGkgPCBTVERfVklERU9fQVYxX01BWF9OVU1fUE9TX0xVTUE7IGkrKykK LSAgICAgICAgICAgIGFwLT5maWxtX2dyYWluLmFyX2NvZWZmc195X3BsdXNfMTI4W2ldID0gZmls bV9ncmFpbi0+YXJfY29lZmZzX3lfcGx1c18xMjhbaV07Ci0KLSAgICAgICAgZm9yIChpbnQgaSA9 IDA7IGkgPCBTVERfVklERU9fQVYxX01BWF9OVU1fUE9TX0NIUk9NQTsgaSsrKSB7Ci0gICAgICAg ICAgICBhcC0+ZmlsbV9ncmFpbi5hcl9jb2VmZnNfY2JfcGx1c18xMjhbaV0gPSBmaWxtX2dyYWlu LT5hcl9jb2VmZnNfY2JfcGx1c18xMjhbaV07Ci0gICAgICAgICAgICBhcC0+ZmlsbV9ncmFpbi5h cl9jb2VmZnNfY3JfcGx1c18xMjhbaV0gPSBmaWxtX2dyYWluLT5hcl9jb2VmZnNfY3JfcGx1c18x MjhbaV07Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBhcC0+ZGVjID0gZGVjOwotCi0gICAgcmV0 dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgdmtfYXYxX2RlY29kZV9zbGljZShBVkNvZGVjQ29udGV4 dCAqYXZjdHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAg KmRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgICAgICAgIHNp emUpCi17Ci0gICAgaW50IGVycjsKLSAgICBjb25zdCBBVjFEZWNDb250ZXh0ICpzID0gYXZjdHgt PnByaXZfZGF0YTsKLSAgICBBVjFWdWxrYW5EZWNvZGVQaWN0dXJlICphcCA9IHMtPmN1cl9mcmFt ZS5od2FjY2VsX3BpY3R1cmVfcHJpdmF0ZTsKLSAgICBGRlZ1bGthbkRlY29kZVBpY3R1cmUgKnZw ID0gJmFwLT52cDsKLQotICAgIC8qIFRvbyBtYW55IHRpbGVzLCBleGNlZWRpbmcgYWxsIGRlZmlu ZWQgbGV2ZWxzIGluIHRoZSBBVjEgc3BlYyAqLwotICAgIGlmIChhcC0+YXYxX3BpY19pbmZvLnRp bGVDb3VudCA+IE1BWF9USUxFUykKLSAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PU1lTKTsKLQot ICAgIGZvciAoaW50IGkgPSBzLT50Z19zdGFydDsgaSA8PSBzLT50Z19lbmQ7IGkrKykgewotICAg ICAgICBhcC0+dGlsZV9zaXplc1thcC0+YXYxX3BpY19pbmZvLnRpbGVDb3VudF0gPSBzLT50aWxl X2dyb3VwX2luZm9baV0udGlsZV9zaXplOwotCi0gICAgICAgIGVyciA9IGZmX3ZrX2RlY29kZV9h ZGRfc2xpY2UoYXZjdHgsIHZwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGRhdGEgKyBzLT50aWxlX2dyb3VwX2luZm9baV0udGlsZV9vZmZzZXQsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcy0+dGlsZV9ncm91cF9pbmZvW2ldLnRpbGVfc2l6ZSwg MCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYXAtPmF2MV9waWNfaW5m by50aWxlQ291bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmFwLT5h djFfcGljX2luZm8ucFRpbGVPZmZzZXRzKTsKLSAgICAgICAgaWYgKGVyciA8IDApCi0gICAgICAg ICAgICByZXR1cm4gZXJyOwotICAgIH0KLQotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgaW50 IHZrX2F2MV9lbmRfZnJhbWUoQVZDb2RlY0NvbnRleHQgKmF2Y3R4KQotewotICAgIGNvbnN0IEFW MURlY0NvbnRleHQgKnMgPSBhdmN0eC0+cHJpdl9kYXRhOwotICAgIEZGVnVsa2FuRGVjb2RlQ29u dGV4dCAqZGVjID0gYXZjdHgtPmludGVybmFsLT5od2FjY2VsX3ByaXZfZGF0YTsKLSAgICBGRlZ1 bGthbkRlY29kZVNoYXJlZCAqY3R4ID0gZGVjLT5zaGFyZWRfY3R4OwotCi0gICAgY29uc3QgQVYx RnJhbWUgKnBpYyA9ICZzLT5jdXJfZnJhbWU7Ci0gICAgQVYxVnVsa2FuRGVjb2RlUGljdHVyZSAq YXAgPSBwaWMtPmh3YWNjZWxfcGljdHVyZV9wcml2YXRlOwotICAgIEZGVnVsa2FuRGVjb2RlUGlj dHVyZSAqdnAgPSAmYXAtPnZwOwotICAgIEZGVnVsa2FuRGVjb2RlUGljdHVyZSAqcnZwW0FWMV9O VU1fUkVGX0ZSQU1FU10gPSB7IDAgfTsKLSAgICBBVkZyYW1lICpyYXZbQVYxX05VTV9SRUZfRlJB TUVTXSA9IHsgMCB9OwotCi0jaWZkZWYgVktfS0hSX3ZpZGVvX21haW50ZW5hbmNlMgotICAgIFN0 ZFZpZGVvQVYxU2VxdWVuY2VIZWFkZXIgYXYxX3NlcXVlbmNlX2hlYWRlcjsKLSAgICBTdGRWaWRl b0FWMVRpbWluZ0luZm8gYXYxX3RpbWluZ19pbmZvOwotICAgIFN0ZFZpZGVvQVYxQ29sb3JDb25m aWcgYXYxX2NvbG9yX2NvbmZpZzsKLSAgICBWa1ZpZGVvRGVjb2RlQVYxSW5saW5lU2Vzc2lvblBh cmFtZXRlcnNJbmZvS0hSIGF2MV9wYXJhbXM7Ci0KLSAgICBpZiAoY3R4LT5zLmV4dGVuc2lvbnMg JiBGRl9WS19FWFRfVklERU9fTUFJTlRFTkFOQ0VfMikgewotICAgICAgICB2a19hdjFfcGFyYW1z X2ZpbGwoYXZjdHgsICZhdjFfdGltaW5nX2luZm8sICZhdjFfY29sb3JfY29uZmlnLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgJmF2MV9zZXF1ZW5jZV9oZWFkZXIpOwotICAgICAgICBhdjFf cGFyYW1zID0gKFZrVmlkZW9EZWNvZGVBVjFJbmxpbmVTZXNzaW9uUGFyYW1ldGVyc0luZm9LSFIp IHsKLSAgICAgICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX1ZJREVPX0RFQ09ERV9B VjFfSU5MSU5FX1NFU1NJT05fUEFSQU1FVEVSU19JTkZPX0tIUiwKLSAgICAgICAgICAgIC5wU3Rk U2VxdWVuY2VIZWFkZXIgPSAmYXYxX3NlcXVlbmNlX2hlYWRlciwKLSAgICAgICAgfTsKLSAgICAg ICAgYXAtPmF2MV9waWNfaW5mby5wTmV4dCA9ICZhdjFfcGFyYW1zOwotICAgIH0KLSNlbmRpZgot Ci0gICAgaWYgKCFhcC0+YXYxX3BpY19pbmZvLnRpbGVDb3VudCkKLSAgICAgICAgcmV0dXJuIDA7 Ci0KLSAgICBpZiAoIWRlYy0+c2Vzc2lvbl9wYXJhbXMgJiYKLSAgICAgICAgIShjdHgtPnMuZXh0 ZW5zaW9ucyAmIEZGX1ZLX0VYVF9WSURFT19NQUlOVEVOQU5DRV8yKSkgewotICAgICAgICBpbnQg ZXJyID0gdmtfYXYxX2NyZWF0ZV9wYXJhbXMoYXZjdHgsICZkZWMtPnNlc3Npb25fcGFyYW1zLCBh cCk7Ci0gICAgICAgIGlmIChlcnIgPCAwKQotICAgICAgICAgICAgcmV0dXJuIGVycjsKLSAgICB9 Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHZwLT5kZWNvZGVfaW5mby5yZWZlcmVuY2VTbG90 Q291bnQ7IGkrKykgewotICAgICAgICBjb25zdCBBVjFGcmFtZSAqcnAgPSBhcC0+cmVmX3NyY1tp XTsKLSAgICAgICAgQVYxVnVsa2FuRGVjb2RlUGljdHVyZSAqcmhwID0gcnAtPmh3YWNjZWxfcGlj dHVyZV9wcml2YXRlOwotCi0gICAgICAgIHJ2cFtpXSA9ICZyaHAtPnZwOwotICAgICAgICByYXZb aV0gPSBhcC0+cmVmX3NyY1tpXS0+ZjsKLSAgICB9Ci0KLSAgICBhdl9sb2coYXZjdHgsIEFWX0xP R19ERUJVRywgIkRlY29kaW5nIGZyYW1lLCAlIlNJWkVfU1BFQ0lGSUVSIiBieXRlcywgJWkgdGls ZXNcbiIsCi0gICAgICAgICAgIHZwLT5zbGljZXNfc2l6ZSwgYXAtPmF2MV9waWNfaW5mby50aWxl Q291bnQpOwotCi0gICAgcmV0dXJuIGZmX3ZrX2RlY29kZV9mcmFtZShhdmN0eCwgcGljLT5mLCB2 cCwgcmF2LCBydnApOwotfQotCi1zdGF0aWMgdm9pZCB2a19hdjFfZnJlZV9mcmFtZV9wcml2KEFW UmVmU3RydWN0T3BhcXVlIF9od2N0eCwgdm9pZCAqZGF0YSkKLXsKLSAgICBBVkhXRGV2aWNlQ29u dGV4dCAqaHdjdHggPSBfaHdjdHgubmM7Ci0gICAgQVYxVnVsa2FuRGVjb2RlUGljdHVyZSAqYXAg PSBkYXRhOwotCi0gICAgLyogRnJlZSBmcmFtZSByZXNvdXJjZXMsIHRoaXMgYWxzbyBkZXN0cm95 cyB0aGUgc2Vzc2lvbiBwYXJhbWV0ZXJzLiAqLwotICAgIGZmX3ZrX2RlY29kZV9mcmVlX2ZyYW1l KGh3Y3R4LCAmYXAtPnZwKTsKLX0KLQotY29uc3QgRkZIV0FjY2VsIGZmX2F2MV92dWxrYW5faHdh Y2NlbCA9IHsKLSAgICAucC5uYW1lICAgICAgICAgICAgICAgID0gImF2MV92dWxrYW4iLAotICAg IC5wLnR5cGUgICAgICAgICAgICAgICAgPSBBVk1FRElBX1RZUEVfVklERU8sCi0gICAgLnAuaWQg ICAgICAgICAgICAgICAgICA9IEFWX0NPREVDX0lEX0FWMSwKLSAgICAucC5waXhfZm10ICAgICAg ICAgICAgID0gQVZfUElYX0ZNVF9WVUxLQU4sCi0gICAgLnN0YXJ0X2ZyYW1lICAgICAgICAgICA9 ICZ2a19hdjFfc3RhcnRfZnJhbWUsCi0gICAgLmRlY29kZV9zbGljZSAgICAgICAgICA9ICZ2a19h djFfZGVjb2RlX3NsaWNlLAotICAgIC5lbmRfZnJhbWUgICAgICAgICAgICAgPSAmdmtfYXYxX2Vu ZF9mcmFtZSwKLSAgICAuZnJlZV9mcmFtZV9wcml2ICAgICAgID0gJnZrX2F2MV9mcmVlX2ZyYW1l X3ByaXYsCi0gICAgLmZyYW1lX3ByaXZfZGF0YV9zaXplICA9IHNpemVvZihBVjFWdWxrYW5EZWNv ZGVQaWN0dXJlKSwKLSAgICAuaW5pdCAgICAgICAgICAgICAgICAgID0gJmZmX3ZrX2RlY29kZV9p bml0LAotICAgIC51cGRhdGVfdGhyZWFkX2NvbnRleHQgPSAmZmZfdmtfdXBkYXRlX3RocmVhZF9j b250ZXh0LAotICAgIC5kZWNvZGVfcGFyYW1zICAgICAgICAgPSAmZmZfdmtfcGFyYW1zX2ludmFs aWRhdGUsCi0gICAgLmZsdXNoICAgICAgICAgICAgICAgICA9ICZmZl92a19kZWNvZGVfZmx1c2gs Ci0gICAgLnVuaW5pdCAgICAgICAgICAgICAgICA9ICZmZl92a19kZWNvZGVfdW5pbml0LAotICAg IC5mcmFtZV9wYXJhbXMgICAgICAgICAgPSAmZmZfdmtfZnJhbWVfcGFyYW1zLAotICAgIC5wcml2 X2RhdGFfc2l6ZSAgICAgICAgPSBzaXplb2YoRkZWdWxrYW5EZWNvZGVDb250ZXh0KSwKLSAgICAu Y2Fwc19pbnRlcm5hbCAgICAgICAgID0gSFdBQ0NFTF9DQVBfQVNZTkNfU0FGRSwKLX07Ci0tIAoy LjQ5LjEKCgpGcm9tIDAyNjA1MDEyZDExODI0MTZiZWNhMzcwOTlhM2E2NzBmZjBlMjljMjYgTW9u IFNlcCAxNyAwMDowMDowMCAyMDAxCkZyb206IEphbWFpa2ExIDxsdWthc3pjejE4QHdwLnBsPgpE YXRlOiBXZWQsIDMgU2VwIDIwMjUgMTM6Mjg6MjIgKzAwMDAKU3ViamVjdDogW1BBVENIIDA2NC8x MThdIENoYW5naW5nIHZ1bGthbiBmaWxlIGRpcmVjdG9yeQoKLS0tCiBsaWJhdmNvZGVjL3Z1bGth bi92dWxrYW5fYXYxLmMgfCA2NzAgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiAx IGZpbGUgY2hhbmdlZCwgNjcwIGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJh dmNvZGVjL3Z1bGthbi92dWxrYW5fYXYxLmMKCmRpZmYgLS1naXQgYS9saWJhdmNvZGVjL3Z1bGth bi92dWxrYW5fYXYxLmMgYi9saWJhdmNvZGVjL3Z1bGthbi92dWxrYW5fYXYxLmMKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uZWU5NTRhNDZlZAotLS0gL2Rldi9udWxsCisr KyBiL2xpYmF2Y29kZWMvdnVsa2FuL3Z1bGthbl9hdjEuYwpAQCAtMCwwICsxLDY3MCBAQAorLyoK KyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KKyAqCisgKiBGRm1wZWcgaXMgZnJlZSBz b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5k ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq IHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl ciB2ZXJzaW9uLgorICoKKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0 IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0 IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAq IExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29m dHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv b3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKyAqLworCisjaW5jbHVkZSAibGliYXZjb2Rl Yy9hdjFkZWMuaCIKKworI2luY2x1ZGUgInZ1bGthbl9kZWNvZGUuaCIKKworLyogTWF4aW11bSBu dW1iZXIgb2YgdGlsZXMgc3BlY2lmaWVkIGJ5IGFueSBkZWZpbmVkIGxldmVsICovCisjZGVmaW5l IE1BWF9USUxFUyAyNTYKKworY29uc3QgRkZWdWxrYW5EZWNvZGVEZXNjcmlwdG9yIGZmX3ZrX2Rl Y19hdjFfZGVzYyA9IHsKKyAgICAuY29kZWNfaWQgICAgICAgICA9IEFWX0NPREVDX0lEX0FWMSwK KyAgICAuZGVjb2RlX2V4dGVuc2lvbiA9IEZGX1ZLX0VYVF9WSURFT19ERUNPREVfQVYxLAorICAg IC5xdWV1ZV9mbGFncyAgICAgID0gVktfUVVFVUVfVklERU9fREVDT0RFX0JJVF9LSFIsCisgICAg LmRlY29kZV9vcCAgICAgICAgPSBWS19WSURFT19DT0RFQ19PUEVSQVRJT05fREVDT0RFX0FWMV9C SVRfS0hSLAorICAgIC5leHRfcHJvcHMgPSB7CisgICAgICAgIC5leHRlbnNpb25OYW1lID0gVktf U1REX1ZVTEtBTl9WSURFT19DT0RFQ19BVjFfREVDT0RFX0VYVEVOU0lPTl9OQU1FLAorICAgICAg ICAuc3BlY1ZlcnNpb24gICA9IFZLX1NURF9WVUxLQU5fVklERU9fQ09ERUNfQVYxX0RFQ09ERV9T UEVDX1ZFUlNJT04sCisgICAgfSwKK307CisKK3R5cGVkZWYgc3RydWN0IEFWMVZ1bGthbkRlY29k ZVBpY3R1cmUgeworICAgIEZGVnVsa2FuRGVjb2RlUGljdHVyZSAgICAgICAgICAgdnA7CisKKyAg ICAvKiBUT0RPOiBpbnZlc3RpZ2F0ZSBpZiB0aGlzIGNhbiBiZSByZW1vdmVkIHRvIG1ha2UgZGVj b2RpbmcgY29tcGxldGVseQorICAgICAqIGluZGVwZW5kZW50LiAqLworICAgIEZGVnVsa2FuRGVj b2RlQ29udGV4dCAgICAgICAgICAqZGVjOworCisgICAgdWludDMyX3QgdGlsZV9zaXplc1tNQVhf VElMRVNdOworCisgICAgLyogQ3VycmVudCBwaWN0dXJlICovCisgICAgU3RkVmlkZW9EZWNvZGVB VjFSZWZlcmVuY2VJbmZvICAgICBzdGRfcmVmOworICAgIFZrVmlkZW9EZWNvZGVBVjFEcGJTbG90 SW5mb0tIUiAgICAgdmthdjFfcmVmOworICAgIHVpbnQxNl90IHdpZHRoX2luX3Nic19taW51czFb NjRdOworICAgIHVpbnQxNl90IGhlaWdodF9pbl9zYnNfbWludXMxWzY0XTsKKyAgICB1aW50MTZf dCBtaV9jb2xfc3RhcnRzWzY0XTsKKyAgICB1aW50MTZfdCBtaV9yb3dfc3RhcnRzWzY0XTsKKyAg ICBTdGRWaWRlb0FWMVRpbGVJbmZvIHRpbGVfaW5mbzsKKyAgICBTdGRWaWRlb0FWMVF1YW50aXph dGlvbiBxdWFudGl6YXRpb247CisgICAgU3RkVmlkZW9BVjFTZWdtZW50YXRpb24gc2VnbWVudGF0 aW9uOworICAgIFN0ZFZpZGVvQVYxTG9vcEZpbHRlciBsb29wX2ZpbHRlcjsKKyAgICBTdGRWaWRl b0FWMUNERUYgY2RlZjsKKyAgICBTdGRWaWRlb0FWMUxvb3BSZXN0b3JhdGlvbiBsb29wX3Jlc3Rv cmF0aW9uOworICAgIFN0ZFZpZGVvQVYxR2xvYmFsTW90aW9uIGdsb2JhbF9tb3Rpb247CisgICAg U3RkVmlkZW9BVjFGaWxtR3JhaW4gZmlsbV9ncmFpbjsKKyAgICBTdGRWaWRlb0RlY29kZUFWMVBp Y3R1cmVJbmZvICAgIHN0ZF9waWNfaW5mbzsKKyAgICBWa1ZpZGVvRGVjb2RlQVYxUGljdHVyZUlu Zm9LSFIgICAgIGF2MV9waWNfaW5mbzsKKworICAgIC8qIFBpY3R1cmUgcmVmcyAqLworICAgIGNv bnN0IEFWMUZyYW1lICAgICAgICAgICAgICAgICAgICAgKnJlZl9zcmMgICBbQVYxX05VTV9SRUZf RlJBTUVTXTsKKyAgICBTdGRWaWRlb0RlY29kZUFWMVJlZmVyZW5jZUluZm8gICAgICBzdGRfcmVm cyAgW0FWMV9OVU1fUkVGX0ZSQU1FU107CisgICAgVmtWaWRlb0RlY29kZUFWMURwYlNsb3RJbmZv S0hSICAgICAgdmthdjFfcmVmc1tBVjFfTlVNX1JFRl9GUkFNRVNdOworCisgICAgdWludDhfdCBm cmFtZV9pZF9zZXQ7CisgICAgdWludDhfdCBmcmFtZV9pZDsKKyAgICB1aW50OF90IHJlZl9mcmFt ZV9zaWduX2JpYXNfbWFzazsKK30gQVYxVnVsa2FuRGVjb2RlUGljdHVyZTsKKworc3RhdGljIGlu dCB2a19hdjFfZmlsbF9waWN0KEFWQ29kZWNDb250ZXh0ICphdmN0eCwgY29uc3QgQVYxRnJhbWUg KipyZWZfc3JjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZrVmlkZW9SZWZlcmVuY2VT bG90SW5mb0tIUiAqcmVmX3Nsb3QsICAgICAgLyogTWFpbiBzdHJ1Y3R1cmUgKi8KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICBWa1ZpZGVvUGljdHVyZVJlc291cmNlSW5mb0tIUiAqcmVmLCAg ICAgICAgIC8qIEdvZXMgaW4gXiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0ZFZp ZGVvRGVjb2RlQVYxUmVmZXJlbmNlSW5mbyAqdmthdjFfc3RkX3JlZiwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICBWa1ZpZGVvRGVjb2RlQVYxRHBiU2xvdEluZm9LSFIgKnZrYXYxX3JlZiwg LyogR29lcyBpbiBeICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQVYxRnJh bWUgKnBpYywgaW50IGlzX2N1cnJlbnQsIGludCBoYXNfZ3JhaW4sCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgdWludDhfdCAqc2F2ZWRfb3JkZXJfaGludHMpCit7CisgICAgRkZW dWxrYW5EZWNvZGVDb250ZXh0ICpkZWMgPSBhdmN0eC0+aW50ZXJuYWwtPmh3YWNjZWxfcHJpdl9k YXRhOworICAgIEZGVnVsa2FuRGVjb2RlU2hhcmVkICpjdHggPSBkZWMtPnNoYXJlZF9jdHg7Cisg ICAgQVYxVnVsa2FuRGVjb2RlUGljdHVyZSAqaHAgPSBwaWMtPmh3YWNjZWxfcGljdHVyZV9wcml2 YXRlOworICAgIEZGVnVsa2FuRGVjb2RlUGljdHVyZSAqdmtwaWMgPSAmaHAtPnZwOworCisgICAg aW50IGVyciA9IGZmX3ZrX2RlY29kZV9wcmVwYXJlX2ZyYW1lKGRlYywgcGljLT5mLCB2a3BpYywg aXNfY3VycmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFz X2dyYWluIHx8IGRlYy0+ZGVkaWNhdGVkX2RwYik7CisgICAgaWYgKGVyciA8IDApCisgICAgICAg IHJldHVybiBlcnI7CisKKyAgICAqdmthdjFfc3RkX3JlZiA9IChTdGRWaWRlb0RlY29kZUFWMVJl ZmVyZW5jZUluZm8pIHsKKyAgICAgICAgLmZsYWdzID0gKFN0ZFZpZGVvRGVjb2RlQVYxUmVmZXJl bmNlSW5mb0ZsYWdzKSB7CisgICAgICAgICAgICAuZGlzYWJsZV9mcmFtZV9lbmRfdXBkYXRlX2Nk ZiA9IHBpYy0+cmF3X2ZyYW1lX2hlYWRlci0+ZGlzYWJsZV9mcmFtZV9lbmRfdXBkYXRlX2NkZiwK KyAgICAgICAgICAgIC5zZWdtZW50YXRpb25fZW5hYmxlZCA9IHBpYy0+cmF3X2ZyYW1lX2hlYWRl ci0+c2VnbWVudGF0aW9uX2VuYWJsZWQsCisgICAgICAgIH0sCisgICAgICAgIC5mcmFtZV90eXBl ID0gcGljLT5yYXdfZnJhbWVfaGVhZGVyLT5mcmFtZV90eXBlLAorICAgICAgICAuT3JkZXJIaW50 ID0gcGljLT5yYXdfZnJhbWVfaGVhZGVyLT5vcmRlcl9oaW50LAorICAgICAgICAuUmVmRnJhbWVT aWduQmlhcyA9IGhwLT5yZWZfZnJhbWVfc2lnbl9iaWFzX21hc2ssCisgICAgfTsKKworICAgIGlm IChzYXZlZF9vcmRlcl9oaW50cykgeworICAgICAgICBpZiAoZGVjLT5xdWlya19hdjFfb2Zmc2V0 KQorICAgICAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCBTVERfVklERU9fQVYxX1RPVEFMX1JF RlNfUEVSX0ZSQU1FOyBpKyspCisgICAgICAgICAgICAgICAgdmthdjFfc3RkX3JlZi0+U2F2ZWRP cmRlckhpbnRzW2kgLSAxXSA9IHNhdmVkX29yZGVyX2hpbnRzW2ldOworICAgICAgICBlbHNlCisg ICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IFNURF9WSURFT19BVjFfVE9UQUxfUkVGU19Q RVJfRlJBTUU7IGkrKykKKyAgICAgICAgICAgICAgICB2a2F2MV9zdGRfcmVmLT5TYXZlZE9yZGVy SGludHNbaV0gPSBzYXZlZF9vcmRlcl9oaW50c1tpXTsKKyAgICB9CisKKyAgICAqdmthdjFfcmVm ID0gKFZrVmlkZW9EZWNvZGVBVjFEcGJTbG90SW5mb0tIUikgeworICAgICAgICAuc1R5cGUgPSBW S19TVFJVQ1RVUkVfVFlQRV9WSURFT19ERUNPREVfQVYxX0RQQl9TTE9UX0lORk9fS0hSLAorICAg ICAgICAucFN0ZFJlZmVyZW5jZUluZm8gPSB2a2F2MV9zdGRfcmVmLAorICAgIH07CisKKyAgICB2 a2F2MV9zdGRfcmVmLT5mbGFncy5kaXNhYmxlX2ZyYW1lX2VuZF91cGRhdGVfY2RmID0gcGljLT5y YXdfZnJhbWVfaGVhZGVyLT5kaXNhYmxlX2ZyYW1lX2VuZF91cGRhdGVfY2RmOworICAgIHZrYXYx X3N0ZF9yZWYtPmZsYWdzLnNlZ21lbnRhdGlvbl9lbmFibGVkID0gcGljLT5yYXdfZnJhbWVfaGVh ZGVyLT5zZWdtZW50YXRpb25fZW5hYmxlZDsKKyAgICB2a2F2MV9zdGRfcmVmLT5mcmFtZV90eXBl ID0gcGljLT5yYXdfZnJhbWVfaGVhZGVyLT5mcmFtZV90eXBlOworCisgICAgKnJlZiA9IChWa1Zp ZGVvUGljdHVyZVJlc291cmNlSW5mb0tIUikgeworICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RV UkVfVFlQRV9WSURFT19QSUNUVVJFX1JFU09VUkNFX0lORk9fS0hSLAorICAgICAgICAuY29kZWRP ZmZzZXQgPSAoVmtPZmZzZXQyRCl7IDAsIDAgfSwKKyAgICAgICAgLmNvZGVkRXh0ZW50ID0gKFZr RXh0ZW50MkQpeyBwaWMtPmYtPndpZHRoLCBwaWMtPmYtPmhlaWdodCB9LAorICAgICAgICAuYmFz ZUFycmF5TGF5ZXIgPSAoKGhhc19ncmFpbiB8fCBkZWMtPmRlZGljYXRlZF9kcGIpICYmIGN0eC0+ Y29tbW9uLmxheWVyZWRfZHBiKSA/CisgICAgICAgICAgICAgICAgICAgICAgICAgIGhwLT5mcmFt ZV9pZCA6IDAsCisgICAgICAgIC5pbWFnZVZpZXdCaW5kaW5nID0gdmtwaWMtPnZpZXcucmVmWzBd LAorICAgIH07CisKKyAgICAqcmVmX3Nsb3QgPSAoVmtWaWRlb1JlZmVyZW5jZVNsb3RJbmZvS0hS KSB7CisgICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX1ZJREVPX1JFRkVSRU5DRV9T TE9UX0lORk9fS0hSLAorICAgICAgICAucE5leHQgPSB2a2F2MV9yZWYsCisgICAgICAgIC5zbG90 SW5kZXggPSBocC0+ZnJhbWVfaWQsCisgICAgICAgIC5wUGljdHVyZVJlc291cmNlID0gcmVmLAor ICAgIH07CisKKyAgICBpZiAocmVmX3NyYykKKyAgICAgICAgKnJlZl9zcmMgPSBwaWM7CisKKyAg ICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdmtfYXYxX3BhcmFtc19maWxsKEFWQ29kZWND b250ZXh0ICphdmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGRWaWRlb0FW MVRpbWluZ0luZm8gKmF2MV90aW1pbmdfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBTdGRWaWRlb0FWMUNvbG9yQ29uZmlnICphdjFfY29sb3JfY29uZmlnLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFN0ZFZpZGVvQVYxU2VxdWVuY2VIZWFkZXIgKmF2MV9zZXF1 ZW5jZV9oZWFkZXIpCit7CisgICAgY29uc3QgQVYxRGVjQ29udGV4dCAqcyA9IGF2Y3R4LT5wcml2 X2RhdGE7CisgICAgY29uc3QgQVYxUmF3U2VxdWVuY2VIZWFkZXIgKnNlcSA9IHMtPnJhd19zZXE7 CisKKyAgICAqYXYxX3RpbWluZ19pbmZvID0gKFN0ZFZpZGVvQVYxVGltaW5nSW5mbykgeworICAg ICAgICAuZmxhZ3MgPSAoU3RkVmlkZW9BVjFUaW1pbmdJbmZvRmxhZ3MpIHsKKyAgICAgICAgICAg IC5lcXVhbF9waWN0dXJlX2ludGVydmFsID0gc2VxLT50aW1pbmdfaW5mby5lcXVhbF9waWN0dXJl X2ludGVydmFsLAorICAgICAgICB9LAorICAgICAgICAubnVtX3VuaXRzX2luX2Rpc3BsYXlfdGlj ayA9IHNlcS0+dGltaW5nX2luZm8ubnVtX3VuaXRzX2luX2Rpc3BsYXlfdGljaywKKyAgICAgICAg LnRpbWVfc2NhbGUgPSBzZXEtPnRpbWluZ19pbmZvLnRpbWVfc2NhbGUsCisgICAgICAgIC5udW1f dGlja3NfcGVyX3BpY3R1cmVfbWludXNfMSA9IHNlcS0+dGltaW5nX2luZm8ubnVtX3RpY2tzX3Bl cl9waWN0dXJlX21pbnVzXzEsCisgICAgfTsKKworICAgICphdjFfY29sb3JfY29uZmlnID0gKFN0 ZFZpZGVvQVYxQ29sb3JDb25maWcpIHsKKyAgICAgICAgLmZsYWdzID0gKFN0ZFZpZGVvQVYxQ29s b3JDb25maWdGbGFncykgeworICAgICAgICAgICAgLm1vbm9fY2hyb21lID0gc2VxLT5jb2xvcl9j b25maWcubW9ub19jaHJvbWUsCisgICAgICAgICAgICAuY29sb3JfcmFuZ2UgPSBzZXEtPmNvbG9y X2NvbmZpZy5jb2xvcl9yYW5nZSwKKyAgICAgICAgICAgIC5zZXBhcmF0ZV91dl9kZWx0YV9xID0g c2VxLT5jb2xvcl9jb25maWcuc2VwYXJhdGVfdXZfZGVsdGFfcSwKKyAgICAgICAgfSwKKyAgICAg ICAgLkJpdERlcHRoID0gc2VxLT5jb2xvcl9jb25maWcudHdlbHZlX2JpdCAgICA/IDEyIDoKKyAg ICAgICAgICAgICAgICAgICAgc2VxLT5jb2xvcl9jb25maWcuaGlnaF9iaXRkZXB0aCA/IDEwIDog OCwKKyAgICAgICAgLnN1YnNhbXBsaW5nX3ggPSBzZXEtPmNvbG9yX2NvbmZpZy5zdWJzYW1wbGlu Z194LAorICAgICAgICAuc3Vic2FtcGxpbmdfeSA9IHNlcS0+Y29sb3JfY29uZmlnLnN1YnNhbXBs aW5nX3ksCisgICAgICAgIC5jb2xvcl9wcmltYXJpZXMgPSBzZXEtPmNvbG9yX2NvbmZpZy5jb2xv cl9wcmltYXJpZXMsCisgICAgICAgIC50cmFuc2Zlcl9jaGFyYWN0ZXJpc3RpY3MgPSBzZXEtPmNv bG9yX2NvbmZpZy50cmFuc2Zlcl9jaGFyYWN0ZXJpc3RpY3MsCisgICAgICAgIC5tYXRyaXhfY29l ZmZpY2llbnRzID0gc2VxLT5jb2xvcl9jb25maWcubWF0cml4X2NvZWZmaWNpZW50cywKKyAgICB9 OworCisgICAgKmF2MV9zZXF1ZW5jZV9oZWFkZXIgPSAoU3RkVmlkZW9BVjFTZXF1ZW5jZUhlYWRl cikgeworICAgICAgICAuZmxhZ3MgPSAoU3RkVmlkZW9BVjFTZXF1ZW5jZUhlYWRlckZsYWdzKSB7 CisgICAgICAgICAgICAuc3RpbGxfcGljdHVyZSA9IHNlcS0+c3RpbGxfcGljdHVyZSwKKyAgICAg ICAgICAgIC5yZWR1Y2VkX3N0aWxsX3BpY3R1cmVfaGVhZGVyID0gc2VxLT5yZWR1Y2VkX3N0aWxs X3BpY3R1cmVfaGVhZGVyLAorICAgICAgICAgICAgLnVzZV8xMjh4MTI4X3N1cGVyYmxvY2sgPSBz ZXEtPnVzZV8xMjh4MTI4X3N1cGVyYmxvY2ssCisgICAgICAgICAgICAuZW5hYmxlX2ZpbHRlcl9p bnRyYSA9IHNlcS0+ZW5hYmxlX2ZpbHRlcl9pbnRyYSwKKyAgICAgICAgICAgIC5lbmFibGVfaW50 cmFfZWRnZV9maWx0ZXIgPSBzZXEtPmVuYWJsZV9pbnRyYV9lZGdlX2ZpbHRlciwKKyAgICAgICAg ICAgIC5lbmFibGVfaW50ZXJpbnRyYV9jb21wb3VuZCA9IHNlcS0+ZW5hYmxlX2ludGVyaW50cmFf Y29tcG91bmQsCisgICAgICAgICAgICAuZW5hYmxlX21hc2tlZF9jb21wb3VuZCA9IHNlcS0+ZW5h YmxlX21hc2tlZF9jb21wb3VuZCwKKyAgICAgICAgICAgIC5lbmFibGVfd2FycGVkX21vdGlvbiA9 IHNlcS0+ZW5hYmxlX3dhcnBlZF9tb3Rpb24sCisgICAgICAgICAgICAuZW5hYmxlX2R1YWxfZmls dGVyID0gc2VxLT5lbmFibGVfZHVhbF9maWx0ZXIsCisgICAgICAgICAgICAuZW5hYmxlX29yZGVy X2hpbnQgPSBzZXEtPmVuYWJsZV9vcmRlcl9oaW50LAorICAgICAgICAgICAgLmVuYWJsZV9qbnRf Y29tcCA9IHNlcS0+ZW5hYmxlX2pudF9jb21wLAorICAgICAgICAgICAgLmVuYWJsZV9yZWZfZnJh bWVfbXZzID0gc2VxLT5lbmFibGVfcmVmX2ZyYW1lX212cywKKyAgICAgICAgICAgIC5mcmFtZV9p ZF9udW1iZXJzX3ByZXNlbnRfZmxhZyA9IHNlcS0+ZnJhbWVfaWRfbnVtYmVyc19wcmVzZW50X2Zs YWcsCisgICAgICAgICAgICAuZW5hYmxlX3N1cGVycmVzID0gc2VxLT5lbmFibGVfc3VwZXJyZXMs CisgICAgICAgICAgICAuZW5hYmxlX2NkZWYgPSBzZXEtPmVuYWJsZV9jZGVmLAorICAgICAgICAg ICAgLmVuYWJsZV9yZXN0b3JhdGlvbiA9IHNlcS0+ZW5hYmxlX3Jlc3RvcmF0aW9uLAorICAgICAg ICAgICAgLmZpbG1fZ3JhaW5fcGFyYW1zX3ByZXNlbnQgPSBzZXEtPmZpbG1fZ3JhaW5fcGFyYW1z X3ByZXNlbnQsCisgICAgICAgICAgICAudGltaW5nX2luZm9fcHJlc2VudF9mbGFnID0gc2VxLT50 aW1pbmdfaW5mb19wcmVzZW50X2ZsYWcsCisgICAgICAgICAgICAuaW5pdGlhbF9kaXNwbGF5X2Rl bGF5X3ByZXNlbnRfZmxhZyA9IHNlcS0+aW5pdGlhbF9kaXNwbGF5X2RlbGF5X3ByZXNlbnRfZmxh ZywKKyAgICAgICAgfSwKKyAgICAgICAgLnNlcV9wcm9maWxlID0gc2VxLT5zZXFfcHJvZmlsZSwK KyAgICAgICAgLmZyYW1lX3dpZHRoX2JpdHNfbWludXNfMSA9IHNlcS0+ZnJhbWVfd2lkdGhfYml0 c19taW51c18xLAorICAgICAgICAuZnJhbWVfaGVpZ2h0X2JpdHNfbWludXNfMSA9IHNlcS0+ZnJh bWVfaGVpZ2h0X2JpdHNfbWludXNfMSwKKyAgICAgICAgLm1heF9mcmFtZV93aWR0aF9taW51c18x ID0gc2VxLT5tYXhfZnJhbWVfd2lkdGhfbWludXNfMSwKKyAgICAgICAgLm1heF9mcmFtZV9oZWln aHRfbWludXNfMSA9IHNlcS0+bWF4X2ZyYW1lX2hlaWdodF9taW51c18xLAorICAgICAgICAuZGVs dGFfZnJhbWVfaWRfbGVuZ3RoX21pbnVzXzIgPSBzZXEtPmRlbHRhX2ZyYW1lX2lkX2xlbmd0aF9t aW51c18yLAorICAgICAgICAuYWRkaXRpb25hbF9mcmFtZV9pZF9sZW5ndGhfbWludXNfMSA9IHNl cS0+YWRkaXRpb25hbF9mcmFtZV9pZF9sZW5ndGhfbWludXNfMSwKKyAgICAgICAgLm9yZGVyX2hp bnRfYml0c19taW51c18xID0gc2VxLT5vcmRlcl9oaW50X2JpdHNfbWludXNfMSwKKyAgICAgICAg LnNlcV9mb3JjZV9pbnRlZ2VyX212ID0gc2VxLT5zZXFfZm9yY2VfaW50ZWdlcl9tdiwKKyAgICAg ICAgLnNlcV9mb3JjZV9zY3JlZW5fY29udGVudF90b29scyA9IHNlcS0+c2VxX2ZvcmNlX3NjcmVl bl9jb250ZW50X3Rvb2xzLAorICAgICAgICAucFRpbWluZ0luZm8gPSBhdjFfdGltaW5nX2luZm8s CisgICAgICAgIC5wQ29sb3JDb25maWcgPSBhdjFfY29sb3JfY29uZmlnLAorICAgIH07Cit9CisK K3N0YXRpYyBpbnQgdmtfYXYxX2NyZWF0ZV9wYXJhbXMoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LCBB VkJ1ZmZlclJlZiAqKmJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVYxVnVs a2FuRGVjb2RlUGljdHVyZSAqYXApCit7CisgICAgaW50IGVycjsKKyAgICBGRlZ1bGthbkRlY29k ZUNvbnRleHQgKmRlYyA9IGF2Y3R4LT5pbnRlcm5hbC0+aHdhY2NlbF9wcml2X2RhdGE7CisgICAg RkZWdWxrYW5EZWNvZGVTaGFyZWQgKmN0eCA9IGRlYy0+c2hhcmVkX2N0eDsKKworICAgIFN0ZFZp ZGVvQVYxU2VxdWVuY2VIZWFkZXIgYXYxX3NlcXVlbmNlX2hlYWRlcjsKKyAgICBTdGRWaWRlb0FW MVRpbWluZ0luZm8gYXYxX3RpbWluZ19pbmZvOworICAgIFN0ZFZpZGVvQVYxQ29sb3JDb25maWcg YXYxX2NvbG9yX2NvbmZpZzsKKyAgICBWa1ZpZGVvRGVjb2RlQVYxU2Vzc2lvblBhcmFtZXRlcnND cmVhdGVJbmZvS0hSIGF2MV9wYXJhbXM7CisgICAgVmtWaWRlb1Nlc3Npb25QYXJhbWV0ZXJzQ3Jl YXRlSW5mb0tIUiBzZXNzaW9uX3BhcmFtc19jcmVhdGU7CisKKyAgICB2a19hdjFfcGFyYW1zX2Zp bGwoYXZjdHgsICZhdjFfdGltaW5nX2luZm8sICZhdjFfY29sb3JfY29uZmlnLAorICAgICAgICAg ICAgICAgICAgICAgICAmYXYxX3NlcXVlbmNlX2hlYWRlcik7CisKKyAgICBhdjFfcGFyYW1zID0g KFZrVmlkZW9EZWNvZGVBVjFTZXNzaW9uUGFyYW1ldGVyc0NyZWF0ZUluZm9LSFIpIHsKKyAgICAg ICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfVklERU9fREVDT0RFX0FWMV9TRVNTSU9OX1BB UkFNRVRFUlNfQ1JFQVRFX0lORk9fS0hSLAorICAgICAgICAucFN0ZFNlcXVlbmNlSGVhZGVyID0g JmF2MV9zZXF1ZW5jZV9oZWFkZXIsCisgICAgfTsKKyAgICBzZXNzaW9uX3BhcmFtc19jcmVhdGUg PSAoVmtWaWRlb1Nlc3Npb25QYXJhbWV0ZXJzQ3JlYXRlSW5mb0tIUikgeworICAgICAgICAuc1R5 cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9WSURFT19TRVNTSU9OX1BBUkFNRVRFUlNfQ1JFQVRFX0lO Rk9fS0hSLAorICAgICAgICAucE5leHQgPSAmYXYxX3BhcmFtcywKKyAgICAgICAgLnZpZGVvU2Vz c2lvbiA9IGN0eC0+Y29tbW9uLnNlc3Npb24sCisgICAgICAgIC52aWRlb1Nlc3Npb25QYXJhbWV0 ZXJzVGVtcGxhdGUgPSBWS19OVUxMX0hBTkRMRSwKKyAgICB9OworCisgICAgZXJyID0gZmZfdmtf ZGVjb2RlX2NyZWF0ZV9wYXJhbXMoYnVmLCBhdmN0eCwgY3R4LCAmc2Vzc2lvbl9wYXJhbXNfY3Jl YXRlKTsKKyAgICBpZiAoZXJyIDwgMCkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIGF2X2xv ZyhhdmN0eCwgQVZfTE9HX0RFQlVHLCAiQ3JlYXRlZCBmcmFtZSBwYXJhbWV0ZXJzXG4iKTsKKwor ICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZrX2F2MV9zdGFydF9mcmFtZShBVkNvZGVj Q29udGV4dCAgICAgICAgICAqYXZjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBh dl91bnVzZWQgY29uc3QgQVZCdWZmZXJSZWYgKmJ1ZmZlcl9yZWYsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBhdl91bnVzZWQgY29uc3QgdWludDhfdCAqYnVmZmVyLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgYXZfdW51c2VkIHVpbnQzMl90ICAgICAgIHNpemUpCit7Cisg ICAgaW50IGVycjsKKyAgICBpbnQgcmVmX2NvdW50ID0gMDsKKyAgICBBVjFEZWNDb250ZXh0ICpz ID0gYXZjdHgtPnByaXZfZGF0YTsKKyAgICBjb25zdCBBVjFGcmFtZSAqcGljID0gJnMtPmN1cl9m cmFtZTsKKyAgICBGRlZ1bGthbkRlY29kZUNvbnRleHQgKmRlYyA9IGF2Y3R4LT5pbnRlcm5hbC0+ aHdhY2NlbF9wcml2X2RhdGE7CisgICAgdWludDMyX3QgZnJhbWVfaWRfYWxsb2NfbWFzayA9IDA7 CisKKyAgICBBVjFWdWxrYW5EZWNvZGVQaWN0dXJlICphcCA9IHBpYy0+aHdhY2NlbF9waWN0dXJl X3ByaXZhdGU7CisgICAgRkZWdWxrYW5EZWNvZGVQaWN0dXJlICp2cCA9ICZhcC0+dnA7CisKKyAg ICBjb25zdCBBVjFSYXdGcmFtZUhlYWRlciAqZnJhbWVfaGVhZGVyID0gcy0+cmF3X2ZyYW1lX2hl YWRlcjsKKyAgICBjb25zdCBBVjFSYXdGaWxtR3JhaW5QYXJhbXMgKmZpbG1fZ3JhaW4gPSAmcy0+ Y3VyX2ZyYW1lLmZpbG1fZ3JhaW47CisKKyAgICBjb25zdCBpbnQgYXBwbHlfZ3JhaW4gPSAhKGF2 Y3R4LT5leHBvcnRfc2lkZV9kYXRhICYgQVZfQ09ERUNfRVhQT1JUX0RBVEFfRklMTV9HUkFJTikg JiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxtX2dyYWluLT5hcHBseV9ncmFpbjsK KyAgICBTdGRWaWRlb0FWMUZyYW1lUmVzdG9yYXRpb25UeXBlIHJlbWFwX2xyX3R5cGVbNF0gPSB7 IFNURF9WSURFT19BVjFfRlJBTUVfUkVTVE9SQVRJT05fVFlQRV9OT05FLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1REX1ZJREVPX0FW MV9GUkFNRV9SRVNUT1JBVElPTl9UWVBFX1NXSVRDSEFCTEUsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVERfVklERU9fQVYxX0ZSQU1F X1JFU1RPUkFUSU9OX1RZUEVfV0lFTkVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgU1REX1ZJREVPX0FWMV9GUkFNRV9SRVNUT1JBVElP Tl9UWVBFX1NHUlBST0ogfTsKKworICAgIC8qIFVzZSB0aGUgY3VycmVudCBmcmFtZV9pZHMgaW4g cmVmW10gdG8gZGVjaWRlIG9jY3VwaWVkIGZyYW1lX2lkcyAqLworICAgIGZvciAoaW50IGkgPSAw OyBpIDwgU1REX1ZJREVPX0FWMV9OVU1fUkVGX0ZSQU1FUzsgaSsrKSB7CisgICAgICAgIGNvbnN0 IEFWMVZ1bGthbkRlY29kZVBpY3R1cmUqIHJwID0gcy0+cmVmW2ldLmh3YWNjZWxfcGljdHVyZV9w cml2YXRlOworICAgICAgICBpZiAocnApCisgICAgICAgICAgICBmcmFtZV9pZF9hbGxvY19tYXNr IHw9IDEgPDwgcnAtPmZyYW1lX2lkOworICAgIH0KKworICAgIGlmICghYXAtPmZyYW1lX2lkX3Nl dCkgeworICAgICAgICB1bnNpZ25lZCBzbG90X2lkeCA9IDA7CisgICAgICAgIGZvciAodW5zaWdu ZWQgaSA9IDA7IGkgPCAzMjsgaSsrKSB7CisgICAgICAgICAgICBpZiAoIShmcmFtZV9pZF9hbGxv Y19tYXNrICYgKDEgPDwgaSkpKSB7CisgICAgICAgICAgICAgICAgc2xvdF9pZHggPSBpOworICAg ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGFw LT5mcmFtZV9pZCA9IHNsb3RfaWR4OworICAgICAgICBhcC0+ZnJhbWVfaWRfc2V0ID0gMTsKKyAg ICAgICAgZnJhbWVfaWRfYWxsb2NfbWFzayB8PSAoMSA8PCBzbG90X2lkeCk7CisgICAgfQorCisg ICAgYXAtPnJlZl9mcmFtZV9zaWduX2JpYXNfbWFzayA9IDB4MDsKKyAgICBmb3IgKGludCBpID0g MDsgaSA8IFNURF9WSURFT19BVjFfVE9UQUxfUkVGU19QRVJfRlJBTUU7IGkrKykKKyAgICAgICAg YXAtPnJlZl9mcmFtZV9zaWduX2JpYXNfbWFzayB8PSBwaWMtPnJlZl9mcmFtZV9zaWduX2JpYXNb aV0gPDwgaTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgU1REX1ZJREVPX0FWMV9SRUZTX1BF Ul9GUkFNRTsgaSsrKSB7CisgICAgICAgIGNvbnN0IGludCBpZHggPSBwaWMtPnJhd19mcmFtZV9o ZWFkZXItPnJlZl9mcmFtZV9pZHhbaV07CisgICAgICAgIGNvbnN0IEFWMUZyYW1lICpyZWZfZnJh bWUgPSAmcy0+cmVmW2lkeF07CisgICAgICAgIEFWMVZ1bGthbkRlY29kZVBpY3R1cmUgKmhwID0g cmVmX2ZyYW1lLT5od2FjY2VsX3BpY3R1cmVfcHJpdmF0ZTsKKyAgICAgICAgaW50IGZvdW5kID0g MDsKKworICAgICAgICBpZiAoIXJlZl9mcmFtZS0+ZikKKyAgICAgICAgICAgIGNvbnRpbnVlOwor CisgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgcmVmX2NvdW50OyBqKyspIHsKKyAgICAgICAg ICAgIGlmICh2cC0+cmVmX3Nsb3RzW2pdLnNsb3RJbmRleCA9PSBocC0+ZnJhbWVfaWQpIHsKKyAg ICAgICAgICAgICAgICBmb3VuZCA9IDE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZvdW5kKQorICAgICAgICAgICAgY29udGlu dWU7CisKKyAgICAgICAgZXJyID0gdmtfYXYxX2ZpbGxfcGljdChhdmN0eCwgJmFwLT5yZWZfc3Jj W3JlZl9jb3VudF0sICZ2cC0+cmVmX3Nsb3RzW3JlZl9jb3VudF0sCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJnZwLT5yZWZzW3JlZl9jb3VudF0sICZhcC0+c3RkX3JlZnNbcmVmX2Nv dW50XSwgJmFwLT52a2F2MV9yZWZzW3JlZl9jb3VudF0sCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcmVmX2ZyYW1lLCAwLCAwLCByZWZfZnJhbWUtPm9yZGVyX2hpbnRzKTsKKyAgICAg ICAgaWYgKGVyciA8IDApCisgICAgICAgICAgICByZXR1cm4gZXJyOworCisgICAgICAgIHJlZl9j b3VudCsrOworICAgIH0KKworICAgIGVyciA9IHZrX2F2MV9maWxsX3BpY3QoYXZjdHgsIE5VTEws ICZ2cC0+cmVmX3Nsb3QsICZ2cC0+cmVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJmFw LT5zdGRfcmVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJmFwLT52a2F2MV9yZWYsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICBwaWMsIDEsIGFwcGx5X2dyYWluLCBOVUxMKTsKKyAg ICBpZiAoZXJyIDwgMCkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIGFwLT5hdjFfcGljX2lu Zm8gPSAoVmtWaWRlb0RlY29kZUFWMVBpY3R1cmVJbmZvS0hSKSB7CisgICAgICAgIC5zVHlwZSA9 IFZLX1NUUlVDVFVSRV9UWVBFX1ZJREVPX0RFQ09ERV9BVjFfUElDVFVSRV9JTkZPX0tIUiwKKyAg ICAgICAgLnBTdGRQaWN0dXJlSW5mbyA9ICZhcC0+c3RkX3BpY19pbmZvLAorICAgICAgICAuZnJh bWVIZWFkZXJPZmZzZXQgPSAwLAorICAgICAgICAudGlsZUNvdW50ID0gMCwKKyAgICAgICAgLnBU aWxlT2Zmc2V0cyA9IE5VTEwsCisgICAgICAgIC5wVGlsZVNpemVzID0gYXAtPnRpbGVfc2l6ZXMs CisgICAgfTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgU1REX1ZJREVPX0FWMV9SRUZTX1BF Ul9GUkFNRTsgaSsrKSB7CisgICAgICAgIGNvbnN0IGludCBpZHggPSBwaWMtPnJhd19mcmFtZV9o ZWFkZXItPnJlZl9mcmFtZV9pZHhbaV07CisgICAgICAgIGNvbnN0IEFWMUZyYW1lICpyZWZfZnJh bWUgPSAmcy0+cmVmW2lkeF07CisgICAgICAgIEFWMVZ1bGthbkRlY29kZVBpY3R1cmUgKmhwID0g cmVmX2ZyYW1lLT5od2FjY2VsX3BpY3R1cmVfcHJpdmF0ZTsKKworICAgICAgICBpZiAoIXJlZl9m cmFtZS0+ZikKKyAgICAgICAgICAgIGFwLT5hdjFfcGljX2luZm8ucmVmZXJlbmNlTmFtZVNsb3RJ bmRpY2VzW2ldID0gQVYxX1JFRl9GUkFNRV9OT05FOworICAgICAgICBlbHNlCisgICAgICAgICAg ICBhcC0+YXYxX3BpY19pbmZvLnJlZmVyZW5jZU5hbWVTbG90SW5kaWNlc1tpXSA9IGhwLT5mcmFt ZV9pZDsKKyAgICB9CisKKyAgICB2cC0+ZGVjb2RlX2luZm8gPSAoVmtWaWRlb0RlY29kZUluZm9L SFIpIHsKKyAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfVklERU9fREVDT0RFX0lO Rk9fS0hSLAorICAgICAgICAucE5leHQgPSAmYXAtPmF2MV9waWNfaW5mbywKKyAgICAgICAgLmZs YWdzID0gMHgwLAorICAgICAgICAucFNldHVwUmVmZXJlbmNlU2xvdCA9ICZ2cC0+cmVmX3Nsb3Qs CisgICAgICAgIC5yZWZlcmVuY2VTbG90Q291bnQgPSByZWZfY291bnQsCisgICAgICAgIC5wUmVm ZXJlbmNlU2xvdHMgPSB2cC0+cmVmX3Nsb3RzLAorICAgICAgICAuZHN0UGljdHVyZVJlc291cmNl ID0gKFZrVmlkZW9QaWN0dXJlUmVzb3VyY2VJbmZvS0hSKSB7CisgICAgICAgICAgICAuc1R5cGUg PSBWS19TVFJVQ1RVUkVfVFlQRV9WSURFT19QSUNUVVJFX1JFU09VUkNFX0lORk9fS0hSLAorICAg ICAgICAgICAgLmNvZGVkT2Zmc2V0ID0gKFZrT2Zmc2V0MkQpeyAwLCAwIH0sCisgICAgICAgICAg ICAuY29kZWRFeHRlbnQgPSAoVmtFeHRlbnQyRCl7IHBpYy0+Zi0+d2lkdGgsIHBpYy0+Zi0+aGVp Z2h0IH0sCisgICAgICAgICAgICAuYmFzZUFycmF5TGF5ZXIgPSAwLAorICAgICAgICAgICAgLmlt YWdlVmlld0JpbmRpbmcgPSB2cC0+dmlldy5vdXRbMF0sCisgICAgICAgIH0sCisgICAgfTsKKwor ICAgIGFwLT50aWxlX2luZm8gPSAoU3RkVmlkZW9BVjFUaWxlSW5mbykgeworICAgICAgICAuZmxh Z3MgPSAoU3RkVmlkZW9BVjFUaWxlSW5mb0ZsYWdzKSB7CisgICAgICAgICAgICAudW5pZm9ybV90 aWxlX3NwYWNpbmdfZmxhZyA9IGZyYW1lX2hlYWRlci0+dW5pZm9ybV90aWxlX3NwYWNpbmdfZmxh ZywKKyAgICAgICAgfSwKKyAgICAgICAgLlRpbGVDb2xzID0gZnJhbWVfaGVhZGVyLT50aWxlX2Nv bHMsCisgICAgICAgIC5UaWxlUm93cyA9IGZyYW1lX2hlYWRlci0+dGlsZV9yb3dzLAorICAgICAg ICAuY29udGV4dF91cGRhdGVfdGlsZV9pZCA9IGZyYW1lX2hlYWRlci0+Y29udGV4dF91cGRhdGVf dGlsZV9pZCwKKyAgICAgICAgLnRpbGVfc2l6ZV9ieXRlc19taW51c18xID0gZnJhbWVfaGVhZGVy LT50aWxlX3NpemVfYnl0ZXNfbWludXMxLAorICAgICAgICAucFdpZHRoSW5TYnNNaW51czEgPSBh cC0+d2lkdGhfaW5fc2JzX21pbnVzMSwKKyAgICAgICAgLnBIZWlnaHRJblNic01pbnVzMSA9IGFw LT5oZWlnaHRfaW5fc2JzX21pbnVzMSwKKyAgICAgICAgLnBNaUNvbFN0YXJ0cyA9IGFwLT5taV9j b2xfc3RhcnRzLAorICAgICAgICAucE1pUm93U3RhcnRzID0gYXAtPm1pX3Jvd19zdGFydHMsCisg ICAgfTsKKworICAgIGFwLT5xdWFudGl6YXRpb24gPSAoU3RkVmlkZW9BVjFRdWFudGl6YXRpb24p IHsKKyAgICAgICAgLmZsYWdzLnVzaW5nX3FtYXRyaXggPSBmcmFtZV9oZWFkZXItPnVzaW5nX3Ft YXRyaXgsCisgICAgICAgIC5mbGFncy5kaWZmX3V2X2RlbHRhID0gZnJhbWVfaGVhZGVyLT5kaWZm X3V2X2RlbHRhLAorICAgICAgICAuYmFzZV9xX2lkeCA9IGZyYW1lX2hlYWRlci0+YmFzZV9xX2lk eCwKKyAgICAgICAgLkRlbHRhUVlEYyA9IGZyYW1lX2hlYWRlci0+ZGVsdGFfcV95X2RjLAorICAg ICAgICAuRGVsdGFRVURjID0gZnJhbWVfaGVhZGVyLT5kZWx0YV9xX3VfZGMsCisgICAgICAgIC5E ZWx0YVFVQWMgPSBmcmFtZV9oZWFkZXItPmRlbHRhX3FfdV9hYywKKyAgICAgICAgLkRlbHRhUVZE YyA9IGZyYW1lX2hlYWRlci0+ZGVsdGFfcV92X2RjLAorICAgICAgICAuRGVsdGFRVkFjID0gZnJh bWVfaGVhZGVyLT5kZWx0YV9xX3ZfYWMsCisgICAgICAgIC5xbV95ID0gZnJhbWVfaGVhZGVyLT5x bV95LAorICAgICAgICAucW1fdSA9IGZyYW1lX2hlYWRlci0+cW1fdSwKKyAgICAgICAgLnFtX3Yg PSBmcmFtZV9oZWFkZXItPnFtX3YsCisgICAgfTsKKworICAgIGFwLT5sb29wX2ZpbHRlciA9IChT dGRWaWRlb0FWMUxvb3BGaWx0ZXIpIHsKKyAgICAgICAgLmZsYWdzID0gKFN0ZFZpZGVvQVYxTG9v cEZpbHRlckZsYWdzKSB7CisgICAgICAgICAgICAubG9vcF9maWx0ZXJfZGVsdGFfZW5hYmxlZCA9 IGZyYW1lX2hlYWRlci0+bG9vcF9maWx0ZXJfZGVsdGFfZW5hYmxlZCwKKyAgICAgICAgICAgIC5s b29wX2ZpbHRlcl9kZWx0YV91cGRhdGUgPSBmcmFtZV9oZWFkZXItPmxvb3BfZmlsdGVyX2RlbHRh X3VwZGF0ZSwKKyAgICAgICAgfSwKKyAgICAgICAgLmxvb3BfZmlsdGVyX3NoYXJwbmVzcyA9IGZy YW1lX2hlYWRlci0+bG9vcF9maWx0ZXJfc2hhcnBuZXNzLAorICAgIH07CisKKyAgICBmb3IgKGlu dCBpID0gMDsgaSA8IFNURF9WSURFT19BVjFfTUFYX0xPT1BfRklMVEVSX1NUUkVOR1RIUzsgaSsr KQorICAgICAgICBhcC0+bG9vcF9maWx0ZXIubG9vcF9maWx0ZXJfbGV2ZWxbaV0gPSBmcmFtZV9o ZWFkZXItPmxvb3BfZmlsdGVyX2xldmVsW2ldOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgU1RE X1ZJREVPX0FWMV9MT09QX0ZJTFRFUl9BREpVU1RNRU5UUzsgaSsrKQorICAgICAgICBhcC0+bG9v cF9maWx0ZXIubG9vcF9maWx0ZXJfbW9kZV9kZWx0YXNbaV0gPSBmcmFtZV9oZWFkZXItPmxvb3Bf ZmlsdGVyX21vZGVfZGVsdGFzW2ldOworCisgICAgYXAtPmNkZWYgPSAoU3RkVmlkZW9BVjFDREVG KSB7CisgICAgICAgIC5jZGVmX2RhbXBpbmdfbWludXNfMyA9IGZyYW1lX2hlYWRlci0+Y2RlZl9k YW1waW5nX21pbnVzXzMsCisgICAgICAgIC5jZGVmX2JpdHMgPSBmcmFtZV9oZWFkZXItPmNkZWZf Yml0cywKKyAgICB9OworCisgICAgYXAtPmxvb3BfcmVzdG9yYXRpb24gPSAoU3RkVmlkZW9BVjFM b29wUmVzdG9yYXRpb24pIHsKKyAgICAgICAgLkZyYW1lUmVzdG9yYXRpb25UeXBlWzBdID0gcmVt YXBfbHJfdHlwZVtmcmFtZV9oZWFkZXItPmxyX3R5cGVbMF1dLAorICAgICAgICAuRnJhbWVSZXN0 b3JhdGlvblR5cGVbMV0gPSByZW1hcF9scl90eXBlW2ZyYW1lX2hlYWRlci0+bHJfdHlwZVsxXV0s CisgICAgICAgIC5GcmFtZVJlc3RvcmF0aW9uVHlwZVsyXSA9IHJlbWFwX2xyX3R5cGVbZnJhbWVf aGVhZGVyLT5scl90eXBlWzJdXSwKKyAgICAgICAgLkxvb3BSZXN0b3JhdGlvblNpemVbMF0gPSAx ICsgZnJhbWVfaGVhZGVyLT5scl91bml0X3NoaWZ0LAorICAgICAgICAuTG9vcFJlc3RvcmF0aW9u U2l6ZVsxXSA9IDEgKyBmcmFtZV9oZWFkZXItPmxyX3VuaXRfc2hpZnQgLSBmcmFtZV9oZWFkZXIt PmxyX3V2X3NoaWZ0LAorICAgICAgICAuTG9vcFJlc3RvcmF0aW9uU2l6ZVsyXSA9IDEgKyBmcmFt ZV9oZWFkZXItPmxyX3VuaXRfc2hpZnQgLSBmcmFtZV9oZWFkZXItPmxyX3V2X3NoaWZ0LAorICAg IH07CisKKyAgICBhcC0+ZmlsbV9ncmFpbiA9IChTdGRWaWRlb0FWMUZpbG1HcmFpbikgeworICAg ICAgICAuZmxhZ3MgPSAoU3RkVmlkZW9BVjFGaWxtR3JhaW5GbGFncykgeworICAgICAgICAgICAg LmNocm9tYV9zY2FsaW5nX2Zyb21fbHVtYSA9IGZpbG1fZ3JhaW4tPmNocm9tYV9zY2FsaW5nX2Zy b21fbHVtYSwKKyAgICAgICAgICAgIC5vdmVybGFwX2ZsYWcgPSBmaWxtX2dyYWluLT5vdmVybGFw X2ZsYWcsCisgICAgICAgICAgICAuY2xpcF90b19yZXN0cmljdGVkX3JhbmdlID0gZmlsbV9ncmFp bi0+Y2xpcF90b19yZXN0cmljdGVkX3JhbmdlLAorICAgICAgICB9LAorICAgICAgICAuZ3JhaW5f c2NhbGluZ19taW51c184ID0gZmlsbV9ncmFpbi0+Z3JhaW5fc2NhbGluZ19taW51c184LAorICAg ICAgICAuYXJfY29lZmZfbGFnID0gZmlsbV9ncmFpbi0+YXJfY29lZmZfbGFnLAorICAgICAgICAu YXJfY29lZmZfc2hpZnRfbWludXNfNiA9IGZpbG1fZ3JhaW4tPmFyX2NvZWZmX3NoaWZ0X21pbnVz XzYsCisgICAgICAgIC5ncmFpbl9zY2FsZV9zaGlmdCA9IGZpbG1fZ3JhaW4tPmdyYWluX3NjYWxl X3NoaWZ0LAorICAgICAgICAuZ3JhaW5fc2VlZCA9IGZpbG1fZ3JhaW4tPmdyYWluX3NlZWQsCisg ICAgICAgIC5maWxtX2dyYWluX3BhcmFtc19yZWZfaWR4ID0gZmlsbV9ncmFpbi0+ZmlsbV9ncmFp bl9wYXJhbXNfcmVmX2lkeCwKKyAgICAgICAgLm51bV95X3BvaW50cyA9IGZpbG1fZ3JhaW4tPm51 bV95X3BvaW50cywKKyAgICAgICAgLm51bV9jYl9wb2ludHMgPSBmaWxtX2dyYWluLT5udW1fY2Jf cG9pbnRzLAorICAgICAgICAubnVtX2NyX3BvaW50cyA9IGZpbG1fZ3JhaW4tPm51bV9jcl9wb2lu dHMsCisgICAgICAgIC5jYl9tdWx0ID0gZmlsbV9ncmFpbi0+Y2JfbXVsdCwKKyAgICAgICAgLmNi X2x1bWFfbXVsdCA9IGZpbG1fZ3JhaW4tPmNiX2x1bWFfbXVsdCwKKyAgICAgICAgLmNiX29mZnNl dCA9IGZpbG1fZ3JhaW4tPmNiX29mZnNldCwKKyAgICAgICAgLmNyX211bHQgPSBmaWxtX2dyYWlu LT5jcl9tdWx0LAorICAgICAgICAuY3JfbHVtYV9tdWx0ID0gZmlsbV9ncmFpbi0+Y3JfbHVtYV9t dWx0LAorICAgICAgICAuY3Jfb2Zmc2V0ID0gZmlsbV9ncmFpbi0+Y3Jfb2Zmc2V0LAorICAgIH07 CisKKyAgICAvKiBTZXR1cCBmcmFtZSBoZWFkZXIgKi8KKyAgICBhcC0+c3RkX3BpY19pbmZvID0g KFN0ZFZpZGVvRGVjb2RlQVYxUGljdHVyZUluZm8pIHsKKyAgICAgICAgLmZsYWdzID0gKFN0ZFZp ZGVvRGVjb2RlQVYxUGljdHVyZUluZm9GbGFncykgeworICAgICAgICAgICAgLmVycm9yX3Jlc2ls aWVudF9tb2RlID0gZnJhbWVfaGVhZGVyLT5lcnJvcl9yZXNpbGllbnRfbW9kZSwKKyAgICAgICAg ICAgIC5kaXNhYmxlX2NkZl91cGRhdGUgPSBmcmFtZV9oZWFkZXItPmRpc2FibGVfY2RmX3VwZGF0 ZSwKKyAgICAgICAgICAgIC51c2Vfc3VwZXJyZXMgPSBmcmFtZV9oZWFkZXItPnVzZV9zdXBlcnJl cywKKyAgICAgICAgICAgIC5yZW5kZXJfYW5kX2ZyYW1lX3NpemVfZGlmZmVyZW50ID0gZnJhbWVf aGVhZGVyLT5yZW5kZXJfYW5kX2ZyYW1lX3NpemVfZGlmZmVyZW50LAorICAgICAgICAgICAgLmFs bG93X3NjcmVlbl9jb250ZW50X3Rvb2xzID0gZnJhbWVfaGVhZGVyLT5hbGxvd19zY3JlZW5fY29u dGVudF90b29scywKKyAgICAgICAgICAgIC5pc19maWx0ZXJfc3dpdGNoYWJsZSA9IGZyYW1lX2hl YWRlci0+aXNfZmlsdGVyX3N3aXRjaGFibGUsCisgICAgICAgICAgICAuZm9yY2VfaW50ZWdlcl9t diA9IHBpYy0+Zm9yY2VfaW50ZWdlcl9tdiwKKyAgICAgICAgICAgIC5mcmFtZV9zaXplX292ZXJy aWRlX2ZsYWcgPSBmcmFtZV9oZWFkZXItPmZyYW1lX3NpemVfb3ZlcnJpZGVfZmxhZywKKyAgICAg ICAgICAgIC5idWZmZXJfcmVtb3ZhbF90aW1lX3ByZXNlbnRfZmxhZyA9IGZyYW1lX2hlYWRlci0+ YnVmZmVyX3JlbW92YWxfdGltZV9wcmVzZW50X2ZsYWcsCisgICAgICAgICAgICAuYWxsb3dfaW50 cmFiYyA9IGZyYW1lX2hlYWRlci0+YWxsb3dfaW50cmFiYywKKyAgICAgICAgICAgIC5mcmFtZV9y ZWZzX3Nob3J0X3NpZ25hbGluZyA9IGZyYW1lX2hlYWRlci0+ZnJhbWVfcmVmc19zaG9ydF9zaWdu YWxpbmcsCisgICAgICAgICAgICAuYWxsb3dfaGlnaF9wcmVjaXNpb25fbXYgPSBmcmFtZV9oZWFk ZXItPmFsbG93X2hpZ2hfcHJlY2lzaW9uX212LAorICAgICAgICAgICAgLmlzX21vdGlvbl9tb2Rl X3N3aXRjaGFibGUgPSBmcmFtZV9oZWFkZXItPmlzX21vdGlvbl9tb2RlX3N3aXRjaGFibGUsCisg ICAgICAgICAgICAudXNlX3JlZl9mcmFtZV9tdnMgPSBmcmFtZV9oZWFkZXItPnVzZV9yZWZfZnJh bWVfbXZzLAorICAgICAgICAgICAgLmRpc2FibGVfZnJhbWVfZW5kX3VwZGF0ZV9jZGYgPSBmcmFt ZV9oZWFkZXItPmRpc2FibGVfZnJhbWVfZW5kX3VwZGF0ZV9jZGYsCisgICAgICAgICAgICAuYWxs b3dfd2FycGVkX21vdGlvbiA9IGZyYW1lX2hlYWRlci0+YWxsb3dfd2FycGVkX21vdGlvbiwKKyAg ICAgICAgICAgIC5yZWR1Y2VkX3R4X3NldCA9IGZyYW1lX2hlYWRlci0+cmVkdWNlZF90eF9zZXQs CisgICAgICAgICAgICAucmVmZXJlbmNlX3NlbGVjdCA9IGZyYW1lX2hlYWRlci0+cmVmZXJlbmNl X3NlbGVjdCwKKyAgICAgICAgICAgIC5za2lwX21vZGVfcHJlc2VudCA9IGZyYW1lX2hlYWRlci0+ c2tpcF9tb2RlX3ByZXNlbnQsCisgICAgICAgICAgICAuZGVsdGFfcV9wcmVzZW50ID0gZnJhbWVf aGVhZGVyLT5kZWx0YV9xX3ByZXNlbnQsCisgICAgICAgICAgICAuZGVsdGFfbGZfcHJlc2VudCA9 IGZyYW1lX2hlYWRlci0+ZGVsdGFfbGZfcHJlc2VudCwKKyAgICAgICAgICAgIC5kZWx0YV9sZl9t dWx0aSA9IGZyYW1lX2hlYWRlci0+ZGVsdGFfbGZfbXVsdGksCisgICAgICAgICAgICAuc2VnbWVu dGF0aW9uX2VuYWJsZWQgPSBmcmFtZV9oZWFkZXItPnNlZ21lbnRhdGlvbl9lbmFibGVkLAorICAg ICAgICAgICAgLnNlZ21lbnRhdGlvbl91cGRhdGVfbWFwID0gZnJhbWVfaGVhZGVyLT5zZWdtZW50 YXRpb25fdXBkYXRlX21hcCwKKyAgICAgICAgICAgIC5zZWdtZW50YXRpb25fdGVtcG9yYWxfdXBk YXRlID0gZnJhbWVfaGVhZGVyLT5zZWdtZW50YXRpb25fdGVtcG9yYWxfdXBkYXRlLAorICAgICAg ICAgICAgLnNlZ21lbnRhdGlvbl91cGRhdGVfZGF0YSA9IGZyYW1lX2hlYWRlci0+c2VnbWVudGF0 aW9uX3VwZGF0ZV9kYXRhLAorICAgICAgICAgICAgLlVzZXNMciA9IGZyYW1lX2hlYWRlci0+bHJf dHlwZVswXSB8fCBmcmFtZV9oZWFkZXItPmxyX3R5cGVbMV0gfHwgZnJhbWVfaGVhZGVyLT5scl90 eXBlWzJdLAorICAgICAgICAgICAgLmFwcGx5X2dyYWluID0gYXBwbHlfZ3JhaW4sCisgICAgICAg IH0sCisgICAgICAgIC5mcmFtZV90eXBlID0gZnJhbWVfaGVhZGVyLT5mcmFtZV90eXBlLAorICAg ICAgICAuY3VycmVudF9mcmFtZV9pZCA9IGZyYW1lX2hlYWRlci0+Y3VycmVudF9mcmFtZV9pZCwK KyAgICAgICAgLk9yZGVySGludCA9IGZyYW1lX2hlYWRlci0+b3JkZXJfaGludCwKKyAgICAgICAg LnByaW1hcnlfcmVmX2ZyYW1lID0gZnJhbWVfaGVhZGVyLT5wcmltYXJ5X3JlZl9mcmFtZSwKKyAg ICAgICAgLnJlZnJlc2hfZnJhbWVfZmxhZ3MgPSBmcmFtZV9oZWFkZXItPnJlZnJlc2hfZnJhbWVf ZmxhZ3MsCisgICAgICAgIC5pbnRlcnBvbGF0aW9uX2ZpbHRlciA9IGZyYW1lX2hlYWRlci0+aW50 ZXJwb2xhdGlvbl9maWx0ZXIsCisgICAgICAgIC5UeE1vZGUgPSBmcmFtZV9oZWFkZXItPnR4X21v ZGUsCisgICAgICAgIC5kZWx0YV9xX3JlcyA9IGZyYW1lX2hlYWRlci0+ZGVsdGFfcV9yZXMsCisg ICAgICAgIC5kZWx0YV9sZl9yZXMgPSBmcmFtZV9oZWFkZXItPmRlbHRhX2xmX3JlcywKKyAgICAg ICAgLlNraXBNb2RlRnJhbWVbMF0gPSBzLT5jdXJfZnJhbWUuc2tpcF9tb2RlX2ZyYW1lX2lkeFsw XSwKKyAgICAgICAgLlNraXBNb2RlRnJhbWVbMV0gPSBzLT5jdXJfZnJhbWUuc2tpcF9tb2RlX2Zy YW1lX2lkeFsxXSwKKyAgICAgICAgLmNvZGVkX2Rlbm9tID0gZnJhbWVfaGVhZGVyLT5jb2RlZF9k ZW5vbSwKKyAgICAgICAgLnBUaWxlSW5mbyA9ICZhcC0+dGlsZV9pbmZvLAorICAgICAgICAucFF1 YW50aXphdGlvbiA9ICZhcC0+cXVhbnRpemF0aW9uLAorICAgICAgICAucFNlZ21lbnRhdGlvbiA9 ICZhcC0+c2VnbWVudGF0aW9uLAorICAgICAgICAucExvb3BGaWx0ZXIgPSAmYXAtPmxvb3BfZmls dGVyLAorICAgICAgICAucENERUYgPSAmYXAtPmNkZWYsCisgICAgICAgIC5wTG9vcFJlc3RvcmF0 aW9uID0gJmFwLT5sb29wX3Jlc3RvcmF0aW9uLAorICAgICAgICAucEdsb2JhbE1vdGlvbiA9ICZh cC0+Z2xvYmFsX21vdGlvbiwKKyAgICAgICAgLnBGaWxtR3JhaW4gPSBhcHBseV9ncmFpbiA/ICZh cC0+ZmlsbV9ncmFpbiA6IE5VTEwsCisgICAgfTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwg NjQ7IGkrKykgeworICAgICAgICBhcC0+d2lkdGhfaW5fc2JzX21pbnVzMVtpXSA9IGZyYW1lX2hl YWRlci0+d2lkdGhfaW5fc2JzX21pbnVzXzFbaV07CisgICAgICAgIGFwLT5oZWlnaHRfaW5fc2Jz X21pbnVzMVtpXSA9IGZyYW1lX2hlYWRlci0+aGVpZ2h0X2luX3Nic19taW51c18xW2ldOworICAg ICAgICBhcC0+bWlfY29sX3N0YXJ0c1tpXSA9IGZyYW1lX2hlYWRlci0+dGlsZV9zdGFydF9jb2xf c2JbaV07CisgICAgICAgIGFwLT5taV9yb3dfc3RhcnRzW2ldID0gZnJhbWVfaGVhZGVyLT50aWxl X3N0YXJ0X3Jvd19zYltpXTsKKyAgICB9CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IFNURF9W SURFT19BVjFfTUFYX1NFR01FTlRTOyBpKyspIHsKKyAgICAgICAgYXAtPnNlZ21lbnRhdGlvbi5G ZWF0dXJlRW5hYmxlZFtpXSA9IDB4MDsKKyAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBTVERf VklERU9fQVYxX1NFR19MVkxfTUFYOyBqKyspIHsKKyAgICAgICAgICAgIGFwLT5zZWdtZW50YXRp b24uRmVhdHVyZUVuYWJsZWRbaV0gfD0gKGZyYW1lX2hlYWRlci0+ZmVhdHVyZV9lbmFibGVkW2ld W2pdIDw8IGopOworICAgICAgICAgICAgYXAtPnNlZ21lbnRhdGlvbi5GZWF0dXJlRGF0YVtpXVtq XSA9IGZyYW1lX2hlYWRlci0+ZmVhdHVyZV92YWx1ZVtpXVtqXTsKKyAgICAgICAgfQorICAgIH0K KworICAgIGlmIChkZWMtPnF1aXJrX2F2MV9vZmZzZXQpCisgICAgICAgIGZvciAoaW50IGkgPSAx OyBpIDwgU1REX1ZJREVPX0FWMV9UT1RBTF9SRUZTX1BFUl9GUkFNRTsgaSsrKQorICAgICAgICAg ICAgYXAtPnN0ZF9waWNfaW5mby5PcmRlckhpbnRzW2kgLSAxXSA9IHBpYy0+b3JkZXJfaGludHNb aV07CisgICAgZWxzZQorICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IFNURF9WSURFT19BVjFf VE9UQUxfUkVGU19QRVJfRlJBTUU7IGkrKykKKyAgICAgICAgICAgIGFwLT5zdGRfcGljX2luZm8u T3JkZXJIaW50c1tpXSA9IHBpYy0+b3JkZXJfaGludHNbaV07CisKKyAgICBmb3IgKGludCBpID0g MDsgaSA8IFNURF9WSURFT19BVjFfVE9UQUxfUkVGU19QRVJfRlJBTUU7IGkrKykgeworICAgICAg ICBhcC0+bG9vcF9maWx0ZXIubG9vcF9maWx0ZXJfcmVmX2RlbHRhc1tpXSA9IGZyYW1lX2hlYWRl ci0+bG9vcF9maWx0ZXJfcmVmX2RlbHRhc1tpXTsKKyAgICAgICAgYXAtPmdsb2JhbF9tb3Rpb24u R21UeXBlW2ldID0gcy0+Y3VyX2ZyYW1lLmdtX3R5cGVbaV07CisgICAgICAgIGZvciAoaW50IGog PSAwOyBqIDwgU1REX1ZJREVPX0FWMV9HTE9CQUxfTU9USU9OX1BBUkFNUzsgaisrKSB7CisgICAg ICAgICAgICBhcC0+Z2xvYmFsX21vdGlvbi5nbV9wYXJhbXNbaV1bal0gPSBzLT5jdXJfZnJhbWUu Z21fcGFyYW1zW2ldW2pdOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChpbnQgaSA9IDA7 IGkgPCBTVERfVklERU9fQVYxX01BWF9DREVGX0ZJTFRFUl9TVFJFTkdUSFM7IGkrKykgeworICAg ICAgICBhcC0+Y2RlZi5jZGVmX3lfcHJpX3N0cmVuZ3RoW2ldID0gZnJhbWVfaGVhZGVyLT5jZGVm X3lfcHJpX3N0cmVuZ3RoW2ldOworICAgICAgICBhcC0+Y2RlZi5jZGVmX3lfc2VjX3N0cmVuZ3Ro W2ldID0gZnJhbWVfaGVhZGVyLT5jZGVmX3lfc2VjX3N0cmVuZ3RoW2ldOworICAgICAgICBhcC0+ Y2RlZi5jZGVmX3V2X3ByaV9zdHJlbmd0aFtpXSA9IGZyYW1lX2hlYWRlci0+Y2RlZl91dl9wcmlf c3RyZW5ndGhbaV07CisgICAgICAgIGFwLT5jZGVmLmNkZWZfdXZfc2VjX3N0cmVuZ3RoW2ldID0g ZnJhbWVfaGVhZGVyLT5jZGVmX3V2X3NlY19zdHJlbmd0aFtpXTsKKyAgICB9CisKKyAgICBpZiAo YXBwbHlfZ3JhaW4pIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBTVERfVklERU9fQVYx X01BWF9OVU1fWV9QT0lOVFM7IGkrKykgeworICAgICAgICAgICAgYXAtPmZpbG1fZ3JhaW4ucG9p bnRfeV92YWx1ZVtpXSA9IGZpbG1fZ3JhaW4tPnBvaW50X3lfdmFsdWVbaV07CisgICAgICAgICAg ICBhcC0+ZmlsbV9ncmFpbi5wb2ludF95X3NjYWxpbmdbaV0gPSBmaWxtX2dyYWluLT5wb2ludF95 X3NjYWxpbmdbaV07CisgICAgICAgIH0KKworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IFNU RF9WSURFT19BVjFfTUFYX05VTV9DQl9QT0lOVFM7IGkrKykgeworICAgICAgICAgICAgYXAtPmZp bG1fZ3JhaW4ucG9pbnRfY2JfdmFsdWVbaV0gPSBmaWxtX2dyYWluLT5wb2ludF9jYl92YWx1ZVtp XTsKKyAgICAgICAgICAgIGFwLT5maWxtX2dyYWluLnBvaW50X2NiX3NjYWxpbmdbaV0gPSBmaWxt X2dyYWluLT5wb2ludF9jYl9zY2FsaW5nW2ldOworICAgICAgICAgICAgYXAtPmZpbG1fZ3JhaW4u cG9pbnRfY3JfdmFsdWVbaV0gPSBmaWxtX2dyYWluLT5wb2ludF9jcl92YWx1ZVtpXTsKKyAgICAg ICAgICAgIGFwLT5maWxtX2dyYWluLnBvaW50X2NyX3NjYWxpbmdbaV0gPSBmaWxtX2dyYWluLT5w b2ludF9jcl9zY2FsaW5nW2ldOworICAgICAgICB9CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7 IGkgPCBTVERfVklERU9fQVYxX01BWF9OVU1fUE9TX0xVTUE7IGkrKykKKyAgICAgICAgICAgIGFw LT5maWxtX2dyYWluLmFyX2NvZWZmc195X3BsdXNfMTI4W2ldID0gZmlsbV9ncmFpbi0+YXJfY29l ZmZzX3lfcGx1c18xMjhbaV07CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBTVERfVklE RU9fQVYxX01BWF9OVU1fUE9TX0NIUk9NQTsgaSsrKSB7CisgICAgICAgICAgICBhcC0+ZmlsbV9n cmFpbi5hcl9jb2VmZnNfY2JfcGx1c18xMjhbaV0gPSBmaWxtX2dyYWluLT5hcl9jb2VmZnNfY2Jf cGx1c18xMjhbaV07CisgICAgICAgICAgICBhcC0+ZmlsbV9ncmFpbi5hcl9jb2VmZnNfY3JfcGx1 c18xMjhbaV0gPSBmaWxtX2dyYWluLT5hcl9jb2VmZnNfY3JfcGx1c18xMjhbaV07CisgICAgICAg IH0KKyAgICB9CisKKyAgICBhcC0+ZGVjID0gZGVjOworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0 YXRpYyBpbnQgdmtfYXYxX2RlY29kZV9zbGljZShBVkNvZGVjQ29udGV4dCAqYXZjdHgsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAgKmRhdGEsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgICAgICAgIHNpemUpCit7CisgICAgaW50 IGVycjsKKyAgICBjb25zdCBBVjFEZWNDb250ZXh0ICpzID0gYXZjdHgtPnByaXZfZGF0YTsKKyAg ICBBVjFWdWxrYW5EZWNvZGVQaWN0dXJlICphcCA9IHMtPmN1cl9mcmFtZS5od2FjY2VsX3BpY3R1 cmVfcHJpdmF0ZTsKKyAgICBGRlZ1bGthbkRlY29kZVBpY3R1cmUgKnZwID0gJmFwLT52cDsKKwor ICAgIC8qIFRvbyBtYW55IHRpbGVzLCBleGNlZWRpbmcgYWxsIGRlZmluZWQgbGV2ZWxzIGluIHRo ZSBBVjEgc3BlYyAqLworICAgIGlmIChhcC0+YXYxX3BpY19pbmZvLnRpbGVDb3VudCA+IE1BWF9U SUxFUykKKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PU1lTKTsKKworICAgIGZvciAoaW50IGkg PSBzLT50Z19zdGFydDsgaSA8PSBzLT50Z19lbmQ7IGkrKykgeworICAgICAgICBhcC0+dGlsZV9z aXplc1thcC0+YXYxX3BpY19pbmZvLnRpbGVDb3VudF0gPSBzLT50aWxlX2dyb3VwX2luZm9baV0u dGlsZV9zaXplOworCisgICAgICAgIGVyciA9IGZmX3ZrX2RlY29kZV9hZGRfc2xpY2UoYXZjdHgs IHZwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgKyBzLT50aWxl X2dyb3VwX2luZm9baV0udGlsZV9vZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcy0+dGlsZV9ncm91cF9pbmZvW2ldLnRpbGVfc2l6ZSwgMCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAmYXAtPmF2MV9waWNfaW5mby50aWxlQ291bnQsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmFwLT5hdjFfcGljX2luZm8ucFRp bGVPZmZzZXRzKTsKKyAgICAgICAgaWYgKGVyciA8IDApCisgICAgICAgICAgICByZXR1cm4gZXJy OworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZrX2F2MV9lbmRfZnJh bWUoQVZDb2RlY0NvbnRleHQgKmF2Y3R4KQoreworICAgIGNvbnN0IEFWMURlY0NvbnRleHQgKnMg PSBhdmN0eC0+cHJpdl9kYXRhOworICAgIEZGVnVsa2FuRGVjb2RlQ29udGV4dCAqZGVjID0gYXZj dHgtPmludGVybmFsLT5od2FjY2VsX3ByaXZfZGF0YTsKKyAgICBGRlZ1bGthbkRlY29kZVNoYXJl ZCAqY3R4ID0gZGVjLT5zaGFyZWRfY3R4OworCisgICAgY29uc3QgQVYxRnJhbWUgKnBpYyA9ICZz LT5jdXJfZnJhbWU7CisgICAgQVYxVnVsa2FuRGVjb2RlUGljdHVyZSAqYXAgPSBwaWMtPmh3YWNj ZWxfcGljdHVyZV9wcml2YXRlOworICAgIEZGVnVsa2FuRGVjb2RlUGljdHVyZSAqdnAgPSAmYXAt PnZwOworICAgIEZGVnVsa2FuRGVjb2RlUGljdHVyZSAqcnZwW0FWMV9OVU1fUkVGX0ZSQU1FU10g PSB7IDAgfTsKKyAgICBBVkZyYW1lICpyYXZbQVYxX05VTV9SRUZfRlJBTUVTXSA9IHsgMCB9Owor CisjaWZkZWYgVktfS0hSX3ZpZGVvX21haW50ZW5hbmNlMgorICAgIFN0ZFZpZGVvQVYxU2VxdWVu Y2VIZWFkZXIgYXYxX3NlcXVlbmNlX2hlYWRlcjsKKyAgICBTdGRWaWRlb0FWMVRpbWluZ0luZm8g YXYxX3RpbWluZ19pbmZvOworICAgIFN0ZFZpZGVvQVYxQ29sb3JDb25maWcgYXYxX2NvbG9yX2Nv bmZpZzsKKyAgICBWa1ZpZGVvRGVjb2RlQVYxSW5saW5lU2Vzc2lvblBhcmFtZXRlcnNJbmZvS0hS IGF2MV9wYXJhbXM7CisKKyAgICBpZiAoY3R4LT5zLmV4dGVuc2lvbnMgJiBGRl9WS19FWFRfVklE RU9fTUFJTlRFTkFOQ0VfMikgeworICAgICAgICB2a19hdjFfcGFyYW1zX2ZpbGwoYXZjdHgsICZh djFfdGltaW5nX2luZm8sICZhdjFfY29sb3JfY29uZmlnLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgJmF2MV9zZXF1ZW5jZV9oZWFkZXIpOworICAgICAgICBhdjFfcGFyYW1zID0gKFZrVmlk ZW9EZWNvZGVBVjFJbmxpbmVTZXNzaW9uUGFyYW1ldGVyc0luZm9LSFIpIHsKKyAgICAgICAgICAg IC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX1ZJREVPX0RFQ09ERV9BVjFfSU5MSU5FX1NFU1NJ T05fUEFSQU1FVEVSU19JTkZPX0tIUiwKKyAgICAgICAgICAgIC5wU3RkU2VxdWVuY2VIZWFkZXIg PSAmYXYxX3NlcXVlbmNlX2hlYWRlciwKKyAgICAgICAgfTsKKyAgICAgICAgYXAtPmF2MV9waWNf aW5mby5wTmV4dCA9ICZhdjFfcGFyYW1zOworICAgIH0KKyNlbmRpZgorCisgICAgaWYgKCFhcC0+ YXYxX3BpY19pbmZvLnRpbGVDb3VudCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoIWRl Yy0+c2Vzc2lvbl9wYXJhbXMgJiYKKyAgICAgICAgIShjdHgtPnMuZXh0ZW5zaW9ucyAmIEZGX1ZL X0VYVF9WSURFT19NQUlOVEVOQU5DRV8yKSkgeworICAgICAgICBpbnQgZXJyID0gdmtfYXYxX2Ny ZWF0ZV9wYXJhbXMoYXZjdHgsICZkZWMtPnNlc3Npb25fcGFyYW1zLCBhcCk7CisgICAgICAgIGlm IChlcnIgPCAwKQorICAgICAgICAgICAgcmV0dXJuIGVycjsKKyAgICB9CisKKyAgICBmb3IgKGlu dCBpID0gMDsgaSA8IHZwLT5kZWNvZGVfaW5mby5yZWZlcmVuY2VTbG90Q291bnQ7IGkrKykgewor ICAgICAgICBjb25zdCBBVjFGcmFtZSAqcnAgPSBhcC0+cmVmX3NyY1tpXTsKKyAgICAgICAgQVYx VnVsa2FuRGVjb2RlUGljdHVyZSAqcmhwID0gcnAtPmh3YWNjZWxfcGljdHVyZV9wcml2YXRlOwor CisgICAgICAgIHJ2cFtpXSA9ICZyaHAtPnZwOworICAgICAgICByYXZbaV0gPSBhcC0+cmVmX3Ny Y1tpXS0+ZjsKKyAgICB9CisKKyAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19ERUJVRywgIkRlY29k aW5nIGZyYW1lLCAlIlNJWkVfU1BFQ0lGSUVSIiBieXRlcywgJWkgdGlsZXNcbiIsCisgICAgICAg ICAgIHZwLT5zbGljZXNfc2l6ZSwgYXAtPmF2MV9waWNfaW5mby50aWxlQ291bnQpOworCisgICAg cmV0dXJuIGZmX3ZrX2RlY29kZV9mcmFtZShhdmN0eCwgcGljLT5mLCB2cCwgcmF2LCBydnApOwor fQorCitzdGF0aWMgdm9pZCB2a19hdjFfZnJlZV9mcmFtZV9wcml2KEFWUmVmU3RydWN0T3BhcXVl IF9od2N0eCwgdm9pZCAqZGF0YSkKK3sKKyAgICBBVkhXRGV2aWNlQ29udGV4dCAqaHdjdHggPSBf aHdjdHgubmM7CisgICAgQVYxVnVsa2FuRGVjb2RlUGljdHVyZSAqYXAgPSBkYXRhOworCisgICAg LyogRnJlZSBmcmFtZSByZXNvdXJjZXMsIHRoaXMgYWxzbyBkZXN0cm95cyB0aGUgc2Vzc2lvbiBw YXJhbWV0ZXJzLiAqLworICAgIGZmX3ZrX2RlY29kZV9mcmVlX2ZyYW1lKGh3Y3R4LCAmYXAtPnZw KTsKK30KKworY29uc3QgRkZIV0FjY2VsIGZmX2F2MV92dWxrYW5faHdhY2NlbCA9IHsKKyAgICAu cC5uYW1lICAgICAgICAgICAgICAgID0gImF2MV92dWxrYW4iLAorICAgIC5wLnR5cGUgICAgICAg ICAgICAgICAgPSBBVk1FRElBX1RZUEVfVklERU8sCisgICAgLnAuaWQgICAgICAgICAgICAgICAg ICA9IEFWX0NPREVDX0lEX0FWMSwKKyAgICAucC5waXhfZm10ICAgICAgICAgICAgID0gQVZfUElY X0ZNVF9WVUxLQU4sCisgICAgLnN0YXJ0X2ZyYW1lICAgICAgICAgICA9ICZ2a19hdjFfc3RhcnRf ZnJhbWUsCisgICAgLmRlY29kZV9zbGljZSAgICAgICAgICA9ICZ2a19hdjFfZGVjb2RlX3NsaWNl LAorICAgIC5lbmRfZnJhbWUgICAgICAgICAgICAgPSAmdmtfYXYxX2VuZF9mcmFtZSwKKyAgICAu ZnJlZV9mcmFtZV9wcml2ICAgICAgID0gJnZrX2F2MV9mcmVlX2ZyYW1lX3ByaXYsCisgICAgLmZy YW1lX3ByaXZfZGF0YV9zaXplICA9IHNpemVvZihBVjFWdWxrYW5EZWNvZGVQaWN0dXJlKSwKKyAg ICAuaW5pdCAgICAgICAgICAgICAgICAgID0gJmZmX3ZrX2RlY29kZV9pbml0LAorICAgIC51cGRh dGVfdGhyZWFkX2NvbnRleHQgPSAmZmZfdmtfdXBkYXRlX3RocmVhZF9jb250ZXh0LAorICAgIC5k ZWNvZGVfcGFyYW1zICAgICAgICAgPSAmZmZfdmtfcGFyYW1zX2ludmFsaWRhdGUsCisgICAgLmZs dXNoICAgICAgICAgICAgICAgICA9ICZmZl92a19kZWNvZGVfZmx1c2gsCisgICAgLnVuaW5pdCAg ICAgICAgICAgICAgICA9ICZmZl92a19kZWNvZGVfdW5pbml0LAorICAgIC5mcmFtZV9wYXJhbXMg ICAgICAgICAgPSAmZmZfdmtfZnJhbWVfcGFyYW1zLAorICAgIC5wcml2X2RhdGFfc2l6ZSAgICAg ICAgPSBzaXplb2YoRkZWdWxrYW5EZWNvZGVDb250ZXh0KSwKKyAgICAuY2Fwc19pbnRlcm5hbCAg ICAgICAgID0gSFdBQ0NFTF9DQVBfQVNZTkNfU0FGRSwKK307Ci0tIAoyLjQ5LjEKCgpGcm9tIDE3 MGQ4M2VjZDY4NGI0NTA3OGE2Mzc3ZGJmYmM5NjUyNzEzMTAyZGIgTW9uIFNlcCAxNyAwMDowMDow MCAyMDAxCkZyb206IEphbWFpa2ExIDxsdWthc3pjejE4QHdwLnBsPgpEYXRlOiBXZWQsIDMgU2Vw IDIwMjUgMTM6Mjk6MDIgKzAwMDAKU3ViamVjdDogW1BBVENIIDA2NS8xMThdIENoYW5naW5nIHZ1 bGthbiBmaWxlIGRpcmVjdG9yeQoKLS0tCiBsaWJhdmNvZGVjL3Z1bGthbl9kZWNvZGUuYyB8IDEz OTkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwg MTM5OSBkZWxldGlvbnMoLSkKIGRlbGV0ZSBtb2RlIDEwMDY0NCBsaWJhdmNvZGVjL3Z1bGthbl9k ZWNvZGUuYwoKZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvdnVsa2FuX2RlY29kZS5jIGIvbGliYXZj b2RlYy92dWxrYW5fZGVjb2RlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwMzhk NDU2ZGQuLjAwMDAwMDAwMDAKLS0tIGEvbGliYXZjb2RlYy92dWxrYW5fZGVjb2RlLmMKKysrIC9k ZXYvbnVsbApAQCAtMSwxMzk5ICswLDAgQEAKLS8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBG Rm1wZWcuCi0gKgotICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli dXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl c3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5z ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBGRm1wZWcg aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1 dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5 IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UuICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v cmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVn OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMu LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEg VVNBCi0gKi8KLQotI2luY2x1ZGUgImxpYmF2dXRpbC9yZWZzdHJ1Y3QuaCIKLSNpbmNsdWRlICJ2 dWxrYW5fdmlkZW8uaCIKLSNpbmNsdWRlICJ2dWxrYW5fZGVjb2RlLmgiCi0jaW5jbHVkZSAiY29u ZmlnX2NvbXBvbmVudHMuaCIKLSNpbmNsdWRlICJsaWJhdnV0aWwvYXZhc3NlcnQuaCIKLSNpbmNs dWRlICJsaWJhdnV0aWwvbWVtLmgiCi0jaW5jbHVkZSAibGliYXZ1dGlsL3Z1bGthbl9sb2FkZXIu aCIKLQotI2RlZmluZSBERUNPREVSX0lTX1NEUihjb2RlY19pZCkgXAotICAgICgoKGNvZGVjX2lk KSA9PSBBVl9DT0RFQ19JRF9GRlYxKSB8fCBcCi0gICAgICgoY29kZWNfaWQpID09IEFWX0NPREVD X0lEX1BST1JFU19SQVcpKQotCi0jaWYgQ09ORklHX0gyNjRfVlVMS0FOX0hXQUNDRUwKLWV4dGVy biBjb25zdCBGRlZ1bGthbkRlY29kZURlc2NyaXB0b3IgZmZfdmtfZGVjX2gyNjRfZGVzYzsKLSNl bmRpZgotI2lmIENPTkZJR19IRVZDX1ZVTEtBTl9IV0FDQ0VMCi1leHRlcm4gY29uc3QgRkZWdWxr YW5EZWNvZGVEZXNjcmlwdG9yIGZmX3ZrX2RlY19oZXZjX2Rlc2M7Ci0jZW5kaWYKLSNpZiBDT05G SUdfVlA5X1ZVTEtBTl9IV0FDQ0VMCi1leHRlcm4gY29uc3QgRkZWdWxrYW5EZWNvZGVEZXNjcmlw dG9yIGZmX3ZrX2RlY192cDlfZGVzYzsKLSNlbmRpZgotI2lmIENPTkZJR19BVjFfVlVMS0FOX0hX QUNDRUwKLWV4dGVybiBjb25zdCBGRlZ1bGthbkRlY29kZURlc2NyaXB0b3IgZmZfdmtfZGVjX2F2 MV9kZXNjOwotI2VuZGlmCi0jaWYgQ09ORklHX0ZGVjFfVlVMS0FOX0hXQUNDRUwKLWV4dGVybiBj b25zdCBGRlZ1bGthbkRlY29kZURlc2NyaXB0b3IgZmZfdmtfZGVjX2ZmdjFfZGVzYzsKLSNlbmRp ZgotI2lmIENPTkZJR19QUk9SRVNfUkFXX1ZVTEtBTl9IV0FDQ0VMCi1leHRlcm4gY29uc3QgRkZW dWxrYW5EZWNvZGVEZXNjcmlwdG9yIGZmX3ZrX2RlY19wcm9yZXNfcmF3X2Rlc2M7Ci0jZW5kaWYK LQotc3RhdGljIGNvbnN0IEZGVnVsa2FuRGVjb2RlRGVzY3JpcHRvciAqZGVjX2Rlc2NzW10gPSB7 Ci0jaWYgQ09ORklHX0gyNjRfVlVMS0FOX0hXQUNDRUwKLSAgICAmZmZfdmtfZGVjX2gyNjRfZGVz YywKLSNlbmRpZgotI2lmIENPTkZJR19IRVZDX1ZVTEtBTl9IV0FDQ0VMCi0gICAgJmZmX3ZrX2Rl Y19oZXZjX2Rlc2MsCi0jZW5kaWYKLSNpZiBDT05GSUdfVlA5X1ZVTEtBTl9IV0FDQ0VMCi0gICAg JmZmX3ZrX2RlY192cDlfZGVzYywKLSNlbmRpZgotI2lmIENPTkZJR19BVjFfVlVMS0FOX0hXQUND RUwKLSAgICAmZmZfdmtfZGVjX2F2MV9kZXNjLAotI2VuZGlmCi0jaWYgQ09ORklHX0ZGVjFfVlVM S0FOX0hXQUNDRUwKLSAgICAmZmZfdmtfZGVjX2ZmdjFfZGVzYywKLSNlbmRpZgotI2lmIENPTkZJ R19QUk9SRVNfUkFXX1ZVTEtBTl9IV0FDQ0VMCi0gICAgJmZmX3ZrX2RlY19wcm9yZXNfcmF3X2Rl c2MsCi0jZW5kaWYKLX07Ci0KLXR5cGVkZWYgc3RydWN0IEZGVnVsa2FuRGVjb2RlUHJvZmlsZURh dGEgewotICAgICBWa1ZpZGVvRGVjb2RlSDI2NFByb2ZpbGVJbmZvS0hSIGgyNjRfcHJvZmlsZTsK LSAgICAgVmtWaWRlb0RlY29kZUgyNjVQcm9maWxlSW5mb0tIUiBoMjY1X3Byb2ZpbGU7Ci0jaWYg Q09ORklHX1ZQOV9WVUxLQU5fSFdBQ0NFTAotICAgICBWa1ZpZGVvRGVjb2RlVlA5UHJvZmlsZUlu Zm9LSFIgdnA5X3Byb2ZpbGU7Ci0jZW5kaWYKLSAgICAgVmtWaWRlb0RlY29kZUFWMVByb2ZpbGVJ bmZvS0hSIGF2MV9wcm9maWxlOwotCi0gICAgVmtWaWRlb0RlY29kZVVzYWdlSW5mb0tIUiB1c2Fn ZTsKLSAgICBWa1ZpZGVvUHJvZmlsZUluZm9LSFIgcHJvZmlsZTsKLSAgICBWa1ZpZGVvUHJvZmls ZUxpc3RJbmZvS0hSIHByb2ZpbGVfbGlzdDsKLX0gRkZWdWxrYW5EZWNvZGVQcm9maWxlRGF0YTsK LQotc3RhdGljIGNvbnN0IEZGVnVsa2FuRGVjb2RlRGVzY3JpcHRvciAqZ2V0X2NvZGVjZGVzYyhl bnVtIEFWQ29kZWNJRCBjb2RlY19pZCkKLXsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IEZG X0FSUkFZX0VMRU1TKGRlY19kZXNjcyk7IGkrKykKLSAgICAgICAgaWYgKGRlY19kZXNjc1tpXS0+ Y29kZWNfaWQgPT0gY29kZWNfaWQpCi0gICAgICAgICAgICByZXR1cm4gZGVjX2Rlc2NzW2ldOwot ICAgIGF2X2Fzc2VydDEoISJubyBjb2RlYyBkZXNjcmlwdG9yIik7Ci0gICAgcmV0dXJuIE5VTEw7 Ci19Ci0KLXN0YXRpYyBjb25zdCBWa1ZpZGVvUHJvZmlsZUluZm9LSFIgKmdldF92aWRlb19wcm9m aWxlKEZGVnVsa2FuRGVjb2RlU2hhcmVkICpjdHgsIGVudW0gQVZDb2RlY0lEIGNvZGVjX2lkKQot ewotICAgIGNvbnN0IFZrVmlkZW9Qcm9maWxlTGlzdEluZm9LSFIgKnByb2ZpbGVfbGlzdDsKLQot ICAgIFZrU3RydWN0dXJlVHlwZSBwcm9maWxlX3N0cnVjdF90eXBlID0KLSAgICAgICAgY29kZWNf aWQgPT0gQVZfQ09ERUNfSURfSDI2NCA/IFZLX1NUUlVDVFVSRV9UWVBFX1ZJREVPX0RFQ09ERV9I MjY0X1BST0ZJTEVfSU5GT19LSFIgOgotICAgICAgICBjb2RlY19pZCA9PSBBVl9DT0RFQ19JRF9I RVZDID8gVktfU1RSVUNUVVJFX1RZUEVfVklERU9fREVDT0RFX0gyNjVfUFJPRklMRV9JTkZPX0tI UiA6Ci0jaWYgQ09ORklHX1ZQOV9WVUxLQU5fSFdBQ0NFTAotICAgICAgICBjb2RlY19pZCA9PSBB Vl9DT0RFQ19JRF9WUDkgID8gVktfU1RSVUNUVVJFX1RZUEVfVklERU9fREVDT0RFX1ZQOV9QUk9G SUxFX0lORk9fS0hSIDoKLSNlbmRpZgotICAgICAgICBjb2RlY19pZCA9PSBBVl9DT0RFQ19JRF9B VjEgID8gVktfU1RSVUNUVVJFX1RZUEVfVklERU9fREVDT0RFX0FWMV9QUk9GSUxFX0lORk9fS0hS IDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZLX1NUUlVDVFVSRV9U WVBFX01BWF9FTlVNOwotICAgIGlmIChwcm9maWxlX3N0cnVjdF90eXBlID09IFZLX1NUUlVDVFVS RV9UWVBFX01BWF9FTlVNKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIHByb2ZpbGVfbGlz dCA9IGZmX3ZrX2ZpbmRfc3RydWN0KGN0eC0+cy5od2ZjLT5jcmVhdGVfcG5leHQsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfU1RSVUNUVVJFX1RZUEVfVklERU9fUFJP RklMRV9MSVNUX0lORk9fS0hSKTsKLSAgICBpZiAoIXByb2ZpbGVfbGlzdCkKLSAgICAgICAgcmV0 dXJuIE5VTEw7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHByb2ZpbGVfbGlzdC0+cHJvZmls ZUNvdW50OyBpKyspCi0gICAgICAgIGlmIChmZl92a19maW5kX3N0cnVjdChwcm9maWxlX2xpc3Qt PnBQcm9maWxlc1tpXS5wTmV4dCwgcHJvZmlsZV9zdHJ1Y3RfdHlwZSkpCi0gICAgICAgICAgICBy ZXR1cm4gJnByb2ZpbGVfbGlzdC0+cFByb2ZpbGVzW2ldOwotCi0gICAgcmV0dXJuIE5VTEw7Ci19 Ci0KLWludCBmZl92a191cGRhdGVfdGhyZWFkX2NvbnRleHQoQVZDb2RlY0NvbnRleHQgKmRzdCwg Y29uc3QgQVZDb2RlY0NvbnRleHQgKnNyYykKLXsKLSAgICBpbnQgZXJyOwotICAgIEZGVnVsa2Fu RGVjb2RlQ29udGV4dCAqc3JjX2N0eCA9IHNyYy0+aW50ZXJuYWwtPmh3YWNjZWxfcHJpdl9kYXRh OwotICAgIEZGVnVsa2FuRGVjb2RlQ29udGV4dCAqZHN0X2N0eCA9IGRzdC0+aW50ZXJuYWwtPmh3 YWNjZWxfcHJpdl9kYXRhOwotCi0gICAgYXZfcmVmc3RydWN0X3JlcGxhY2UoJmRzdF9jdHgtPnNo YXJlZF9jdHgsIHNyY19jdHgtPnNoYXJlZF9jdHgpOwotCi0gICAgZXJyID0gYXZfYnVmZmVyX3Jl cGxhY2UoJmRzdF9jdHgtPnNlc3Npb25fcGFyYW1zLCBzcmNfY3R4LT5zZXNzaW9uX3BhcmFtcyk7 Ci0gICAgaWYgKGVyciA8IDApCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICBkc3RfY3R4LT5k ZWRpY2F0ZWRfZHBiID0gc3JjX2N0eC0+ZGVkaWNhdGVkX2RwYjsKLSAgICBkc3RfY3R4LT5leHRl cm5hbF9mZyA9IHNyY19jdHgtPmV4dGVybmFsX2ZnOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLWlu dCBmZl92a19wYXJhbXNfaW52YWxpZGF0ZShBVkNvZGVjQ29udGV4dCAqYXZjdHgsIGludCB0LCBj b25zdCB1aW50OF90ICpiLCB1aW50MzJfdCBzKQotewotICAgIEZGVnVsa2FuRGVjb2RlQ29udGV4 dCAqZGVjID0gYXZjdHgtPmludGVybmFsLT5od2FjY2VsX3ByaXZfZGF0YTsKLSAgICBhdl9idWZm ZXJfdW5yZWYoJmRlYy0+c2Vzc2lvbl9wYXJhbXMpOwotICAgIHJldHVybiAwOwotfQotCi1zdGF0 aWMgQVZGcmFtZSAqdmtfZ2V0X2RwYl9wb29sKEZGVnVsa2FuRGVjb2RlU2hhcmVkICpjdHgpCi17 Ci0gICAgaW50IGVycjsKLSAgICBBVkZyYW1lICphdmYgPSBhdl9mcmFtZV9hbGxvYygpOwotICAg IGlmICghYXZmKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIGVyciA9IGF2X2h3ZnJhbWVf Z2V0X2J1ZmZlcihjdHgtPmNvbW1vbi5kcGJfaHdmY19yZWYsIGF2ZiwgMHgwKTsKLSAgICBpZiAo ZXJyIDwgMCkKLSAgICAgICAgYXZfZnJhbWVfZnJlZSgmYXZmKTsKLQotICAgIHJldHVybiBhdmY7 Ci19Ci0KLXN0YXRpYyB2b2lkIGluaXRfZnJhbWUoRkZWdWxrYW5EZWNvZGVDb250ZXh0ICpkZWMs IEZGVnVsa2FuRGVjb2RlUGljdHVyZSAqdmtwaWMpCi17Ci0gICAgRkZWdWxrYW5EZWNvZGVTaGFy ZWQgKmN0eCA9IGRlYy0+c2hhcmVkX2N0eDsKLSAgICBGRlZ1bGthbkZ1bmN0aW9ucyAqdmsgPSAm Y3R4LT5zLnZrZm47Ci0KLSAgICB2a3BpYy0+ZHBiX2ZyYW1lICAgICA9IE5VTEw7Ci0gICAgZm9y IChpbnQgaSA9IDA7IGkgPCBBVl9OVU1fREFUQV9QT0lOVEVSUzsgaSsrKSB7Ci0gICAgICAgIHZr cGljLT52aWV3LnJlZltpXSAgPSBWS19OVUxMX0hBTkRMRTsKLSAgICAgICAgdmtwaWMtPnZpZXcu b3V0W2ldICA9IFZLX05VTExfSEFORExFOwotICAgICAgICB2a3BpYy0+dmlldy5kc3RbaV0gID0g VktfTlVMTF9IQU5ETEU7Ci0gICAgfQotCi0gICAgdmtwaWMtPmRlc3Ryb3lfaW1hZ2VfdmlldyA9 IHZrLT5EZXN0cm95SW1hZ2VWaWV3OwotICAgIHZrcGljLT53YWl0X3NlbWFwaG9yZXMgPSB2ay0+ V2FpdFNlbWFwaG9yZXM7Ci0gICAgdmtwaWMtPmludmFsaWRhdGVfbWVtb3J5X3JhbmdlcyA9IHZr LT5JbnZhbGlkYXRlTWFwcGVkTWVtb3J5UmFuZ2VzOwotfQotCi1pbnQgZmZfdmtfZGVjb2RlX3By ZXBhcmVfZnJhbWUoRkZWdWxrYW5EZWNvZGVDb250ZXh0ICpkZWMsIEFWRnJhbWUgKnBpYywKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGRlZ1bGthbkRlY29kZVBpY3R1cmUgKnZrcGlj LCBpbnQgaXNfY3VycmVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWxs b2NfZHBiKQotewotICAgIGludCBlcnI7Ci0gICAgRkZWdWxrYW5EZWNvZGVTaGFyZWQgKmN0eCA9 IGRlYy0+c2hhcmVkX2N0eDsKLQotICAgIHZrcGljLT5zbGljZXNfc2l6ZSA9IDA7Ci0KLSAgICAv KiBJZiB0aGUgZGVjb2RlciBtYWRlIGEgYmxhbmsgZnJhbWUgdG8gbWFrZSB1cCBmb3IgYSBtaXNz aW5nIHJlZiwgb3IgdGhlCi0gICAgICogZnJhbWUgaXMgdGhlIGN1cnJlbnQgZnJhbWUgc28gaXQn cyBtaXNzaW5nIG9uZSwgY3JlYXRlIGEgcmUtcmVwcmVzZW50YXRpb24gKi8KLSAgICBpZiAodmtw aWMtPnZpZXcucmVmWzBdKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGluaXRfZnJhbWUoZGVj LCB2a3BpYyk7Ci0KLSAgICBpZiAoY3R4LT5jb21tb24ubGF5ZXJlZF9kcGIgJiYgYWxsb2NfZHBi KSB7Ci0gICAgICAgIHZrcGljLT52aWV3LnJlZlswXSA9IGN0eC0+Y29tbW9uLmxheWVyZWRfdmll dzsKLSAgICAgICAgdmtwaWMtPnZpZXcuYXNwZWN0X3JlZlswXSA9IGN0eC0+Y29tbW9uLmxheWVy ZWRfYXNwZWN0OwotICAgIH0gZWxzZSBpZiAoYWxsb2NfZHBiKSB7Ci0gICAgICAgIEFWSFdGcmFt ZXNDb250ZXh0ICpkcGJfZnJhbWVzID0gKEFWSFdGcmFtZXNDb250ZXh0ICopY3R4LT5jb21tb24u ZHBiX2h3ZmNfcmVmLT5kYXRhOwotICAgICAgICBBVlZ1bGthbkZyYW1lc0NvbnRleHQgKmRwYl9o d2ZjID0gZHBiX2ZyYW1lcy0+aHdjdHg7Ci0KLSAgICAgICAgdmtwaWMtPmRwYl9mcmFtZSA9IHZr X2dldF9kcGJfcG9vbChjdHgpOwotICAgICAgICBpZiAoIXZrcGljLT5kcGJfZnJhbWUpCi0gICAg ICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOwotCi0gICAgICAgIGVyciA9IGZmX3ZrX2Ny ZWF0ZV92aWV3KCZjdHgtPnMsICZjdHgtPmNvbW1vbiwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJnZrcGljLT52aWV3LnJlZlswXSwgJnZrcGljLT52aWV3LmFzcGVjdF9yZWZbMF0s Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChBVlZrRnJhbWUgKil2a3BpYy0+ZHBi X2ZyYW1lLT5kYXRhWzBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcGJfaHdm Yy0+Zm9ybWF0WzBdLCAhaXNfY3VycmVudCk7Ci0gICAgICAgIGlmIChlcnIgPCAwKQotICAgICAg ICAgICAgcmV0dXJuIGVycjsKLQotICAgICAgICB2a3BpYy0+dmlldy5kc3RbMF0gPSB2a3BpYy0+ dmlldy5yZWZbMF07Ci0gICAgfQotCi0gICAgaWYgKCFhbGxvY19kcGIgfHwgaXNfY3VycmVudCkg ewotICAgICAgICBBVkhXRnJhbWVzQ29udGV4dCAqZnJhbWVzID0gKEFWSFdGcmFtZXNDb250ZXh0 ICopcGljLT5od19mcmFtZXNfY3R4LT5kYXRhOwotICAgICAgICBBVlZ1bGthbkZyYW1lc0NvbnRl eHQgKmh3ZmMgPSBmcmFtZXMtPmh3Y3R4OwotCi0gICAgICAgIGVyciA9IGZmX3ZrX2NyZWF0ZV92 aWV3KCZjdHgtPnMsICZjdHgtPmNvbW1vbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJnZrcGljLT52aWV3Lm91dFswXSwgJnZrcGljLT52aWV3LmFzcGVjdFswXSwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKEFWVmtGcmFtZSAqKXBpYy0+ZGF0YVswXSwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaHdmYy0+Zm9ybWF0WzBdLCAhaXNfY3VycmVudCk7 Ci0gICAgICAgIGlmIChlcnIgPCAwKQotICAgICAgICAgICAgcmV0dXJuIGVycjsKLQotICAgICAg ICBpZiAoIWFsbG9jX2RwYikgewotICAgICAgICAgICAgdmtwaWMtPnZpZXcucmVmWzBdID0gdmtw aWMtPnZpZXcub3V0WzBdOwotICAgICAgICAgICAgdmtwaWMtPnZpZXcuYXNwZWN0X3JlZlswXSA9 IHZrcGljLT52aWV3LmFzcGVjdFswXTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiAw OwotfQotCi1pbnQgZmZfdmtfZGVjb2RlX3ByZXBhcmVfZnJhbWVfc2RyKEZGVnVsa2FuRGVjb2Rl Q29udGV4dCAqZGVjLCBBVkZyYW1lICpwaWMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEZGVnVsa2FuRGVjb2RlUGljdHVyZSAqdmtwaWMsIGludCBpc19jdXJyZW50LAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIEZGVmtTaGFkZXJSZXBGb3JtYXQg cmVwX2ZtdCwgaW50IGFsbG9jX2RwYikKLXsKLSAgICBpbnQgZXJyOwotICAgIEZGVnVsa2FuRGVj b2RlU2hhcmVkICpjdHggPSBkZWMtPnNoYXJlZF9jdHg7Ci0gICAgQVZIV0ZyYW1lc0NvbnRleHQg KmZyYW1lcyA9IChBVkhXRnJhbWVzQ29udGV4dCAqKXBpYy0+aHdfZnJhbWVzX2N0eC0+ZGF0YTsK LQotICAgIHZrcGljLT5zbGljZXNfc2l6ZSA9IDA7Ci0KLSAgICBpZiAodmtwaWMtPnZpZXcucmVm WzBdKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGluaXRfZnJhbWUoZGVjLCB2a3BpYyk7Ci0K LSAgICBmb3IgKGludCBpID0gMDsgaSA8IGF2X3BpeF9mbXRfY291bnRfcGxhbmVzKGZyYW1lcy0+ c3dfZm9ybWF0KTsgaSsrKSB7Ci0gICAgICAgIGlmIChhbGxvY19kcGIpIHsKLSAgICAgICAgICAg IHZrcGljLT5kcGJfZnJhbWUgPSB2a19nZXRfZHBiX3Bvb2woY3R4KTsKLSAgICAgICAgICAgIGlm ICghdmtwaWMtPmRwYl9mcmFtZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9N RU0pOwotCi0gICAgICAgICAgICBlcnIgPSBmZl92a19jcmVhdGVfaW1hZ2V2aWV3KCZjdHgtPnMs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ2a3BpYy0+dmlldy5y ZWZbaV0sICZ2a3BpYy0+dmlldy5hc3BlY3RfcmVmW2ldLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB2a3BpYy0+ZHBiX2ZyYW1lLCBpLCByZXBfZm10KTsKLSAgICAg ICAgICAgIGlmIChlcnIgPCAwKQotICAgICAgICAgICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICAg ICAgICAgIHZrcGljLT52aWV3LmRzdFtpXSA9IHZrcGljLT52aWV3LnJlZltpXTsKLSAgICAgICAg fQotCi0gICAgICAgIGlmICghYWxsb2NfZHBiIHx8IGlzX2N1cnJlbnQpIHsKLSAgICAgICAgICAg IGVyciA9IGZmX3ZrX2NyZWF0ZV9pbWFnZXZpZXcoJmN0eC0+cywKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJnZrcGljLT52aWV3Lm91dFtpXSwgJnZrcGljLT52aWV3 LmFzcGVjdFtpXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlj LCBpLCByZXBfZm10KTsKLSAgICAgICAgICAgIGlmIChlcnIgPCAwKQotICAgICAgICAgICAgICAg IHJldHVybiBlcnI7Ci0KLSAgICAgICAgICAgIGlmICghYWxsb2NfZHBiKSB7Ci0gICAgICAgICAg ICAgICAgdmtwaWMtPnZpZXcucmVmW2ldID0gdmtwaWMtPnZpZXcub3V0W2ldOwotICAgICAgICAg ICAgICAgIHZrcGljLT52aWV3LmFzcGVjdF9yZWZbaV0gPSB2a3BpYy0+dmlldy5hc3BlY3RbaV07 Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0KLQot aW50IGZmX3ZrX2RlY29kZV9hZGRfc2xpY2UoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LCBGRlZ1bGth bkRlY29kZVBpY3R1cmUgKnZwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWlu dDhfdCAqZGF0YSwgc2l6ZV90IHNpemUsIGludCBhZGRfc3RhcnRjb2RlLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgdWludDMyX3QgKm5iX3NsaWNlcywgY29uc3QgdWludDMyX3QgKipvZmZz ZXRzKQotewotICAgIEZGVnVsa2FuRGVjb2RlQ29udGV4dCAqZGVjID0gYXZjdHgtPmludGVybmFs LT5od2FjY2VsX3ByaXZfZGF0YTsKLSAgICBGRlZ1bGthbkRlY29kZVNoYXJlZCAqY3R4ID0gZGVj LT5zaGFyZWRfY3R4OwotCi0gICAgc3RhdGljIGNvbnN0IHVpbnQ4X3Qgc3RhcnRjb2RlX3ByZWZp eFszXSA9IHsgMHgwLCAweDAsIDB4MSB9OwotICAgIGNvbnN0IHNpemVfdCBzdGFydGNvZGVfbGVu ID0gYWRkX3N0YXJ0Y29kZSA/IHNpemVvZihzdGFydGNvZGVfcHJlZml4KSA6IDA7Ci0gICAgY29u c3QgaW50IG5iID0gbmJfc2xpY2VzID8gKm5iX3NsaWNlcyA6IDA7Ci0gICAgdWludDhfdCAqc2xp Y2VzOwotICAgIHVpbnQzMl90ICpzbGljZV9vZmY7Ci0gICAgRkZWa0J1ZmZlciAqdmtidWY7Ci0K LSAgICBzaXplX3QgbmV3X3NpemUgPSB2cC0+c2xpY2VzX3NpemUgKyBzdGFydGNvZGVfbGVuICsg c2l6ZSArCi0gICAgICAgICAgICAgICAgICAgICAgY3R4LT5jYXBzLm1pbkJpdHN0cmVhbUJ1ZmZl clNpemVBbGlnbm1lbnQ7Ci0gICAgbmV3X3NpemUgPSBGRkFMSUdOKG5ld19zaXplLCBjdHgtPmNh cHMubWluQml0c3RyZWFtQnVmZmVyU2l6ZUFsaWdubWVudCk7Ci0KLSAgICBpZiAob2Zmc2V0cykg ewotICAgICAgICBzbGljZV9vZmYgPSBhdl9mYXN0X3JlYWxsb2MoZGVjLT5zbGljZV9vZmYsICZk ZWMtPnNsaWNlX29mZl9tYXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo bmIgKyAxKSpzaXplb2Yoc2xpY2Vfb2ZmKSk7Ci0gICAgICAgIGlmICghc2xpY2Vfb2ZmKQotICAg ICAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKLQotICAgICAgICAqb2Zmc2V0cyA9IGRl Yy0+c2xpY2Vfb2ZmID0gc2xpY2Vfb2ZmOwotCi0gICAgICAgIHNsaWNlX29mZltuYl0gPSB2cC0+ c2xpY2VzX3NpemU7Ci0gICAgfQotCi0gICAgdmtidWYgPSB2cC0+c2xpY2VzX2J1ZiA/IChGRlZr QnVmZmVyICopdnAtPnNsaWNlc19idWYtPmRhdGEgOiBOVUxMOwotICAgIGlmICghdmtidWYgfHwg dmtidWYtPnNpemUgPCBuZXdfc2l6ZSkgewotICAgICAgICBpbnQgZXJyOwotICAgICAgICBBVkJ1 ZmZlclJlZiAqbmV3X3JlZjsKLSAgICAgICAgRkZWa0J1ZmZlciAqbmV3X2J1ZjsKLQotICAgICAg ICAvKiBObyBwb2ludCBpbiByZXF1ZXN0aW5nIGFueXRoaW5nIHNtYWxsZXIuICovCi0gICAgICAg IHNpemVfdCBidWZfc2l6ZSA9IEZGTUFYKG5ld19zaXplLCAxMDI0KjEwMjQpOwotCi0gICAgICAg IC8qIEFsaWduIGJ1ZmZlciB0byBuZWFyZXN0IHBvd2VyIG9mIHR3by4gTWFrZXMgZnJhZ21lbnRh dGlvbiBtYW5hZ2VtZW50Ci0gICAgICAgICAqIGVhc2llciwgYW5kIGdpdmVzIHVzIGFtcGxlIGhl YWRyb29tLiAqLwotICAgICAgICBidWZfc2l6ZSA9IDIgPDwgYXZfbG9nMihidWZfc2l6ZSk7Ci0K LSAgICAgICAgZXJyID0gZmZfdmtfZ2V0X3Bvb2xlZF9idWZmZXIoJmN0eC0+cywgJmN0eC0+YnVm X3Bvb2wsICZuZXdfcmVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBE RUNPREVSX0lTX1NEUihhdmN0eC0+Y29kZWNfaWQpID8KLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKFZLX0JVRkZFUl9VU0FHRV9TVE9SQUdFX0JVRkZFUl9CSVQgfAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfQlVGRkVSX1VTQUdFX1NIQURF Ul9ERVZJQ0VfQUREUkVTU19CSVQpIDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgVktfQlVGRkVSX1VTQUdFX1ZJREVPX0RFQ09ERV9TUkNfQklUX0tIUiwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT5zLmh3ZmMtPmNyZWF0ZV9wbmV4dCwg YnVmX3NpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZLX01FTU9S WV9QUk9QRVJUWV9IT1NUX1ZJU0lCTEVfQklUIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKERFQ09ERVJfSVNfU0RSKGF2Y3R4LT5jb2RlY19pZCkgPwotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfTUVNT1JZX1BST1BFUlRZX0RFVklDRV9M T0NBTF9CSVQgOiAweDApKTsKLSAgICAgICAgaWYgKGVyciA8IDApCi0gICAgICAgICAgICByZXR1 cm4gZXJyOwotCi0gICAgICAgIG5ld19idWYgPSAoRkZWa0J1ZmZlciAqKW5ld19yZWYtPmRhdGE7 Ci0KLSAgICAgICAgLyogQ29weSBkYXRhIGZyb20gdGhlIG9sZCBidWZmZXIgKi8KLSAgICAgICAg aWYgKHZrYnVmKSB7Ci0gICAgICAgICAgICBtZW1jcHkobmV3X2J1Zi0+bWFwcGVkX21lbSwgdmti dWYtPm1hcHBlZF9tZW0sIHZwLT5zbGljZXNfc2l6ZSk7Ci0gICAgICAgICAgICBhdl9idWZmZXJf dW5yZWYoJnZwLT5zbGljZXNfYnVmKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZwLT5zbGljZXNf YnVmID0gbmV3X3JlZjsKLSAgICAgICAgdmtidWYgPSBuZXdfYnVmOwotICAgIH0KLSAgICBzbGlj ZXMgPSB2a2J1Zi0+bWFwcGVkX21lbTsKLQotICAgIC8qIFN0YXJ0Y29kZSAqLwotICAgIG1lbWNw eShzbGljZXMgKyB2cC0+c2xpY2VzX3NpemUsIHN0YXJ0Y29kZV9wcmVmaXgsIHN0YXJ0Y29kZV9s ZW4pOwotCi0gICAgLyogU2xpY2UgZGF0YSAqLwotICAgIG1lbWNweShzbGljZXMgKyB2cC0+c2xp Y2VzX3NpemUgKyBzdGFydGNvZGVfbGVuLCBkYXRhLCBzaXplKTsKLQotICAgIGlmIChuYl9zbGlj ZXMpCi0gICAgICAgICpuYl9zbGljZXMgPSBuYiArIDE7Ci0KLSAgICB2cC0+c2xpY2VzX3NpemUg Kz0gc3RhcnRjb2RlX2xlbiArIHNpemU7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBmZl92 a19kZWNvZGVfZmx1c2goQVZDb2RlY0NvbnRleHQgKmF2Y3R4KQotewotICAgIEZGVnVsa2FuRGVj b2RlQ29udGV4dCAqZGVjID0gYXZjdHgtPmludGVybmFsLT5od2FjY2VsX3ByaXZfZGF0YTsKLSAg ICBGRlZ1bGthbkRlY29kZVNoYXJlZCAqY3R4ID0gZGVjLT5zaGFyZWRfY3R4OwotCi0gICAgRkZW dWxrYW5GdW5jdGlvbnMgKnZrID0gJmN0eC0+cy52a2ZuOwotICAgIFZrVmlkZW9CZWdpbkNvZGlu Z0luZm9LSFIgZGVjb2RlX3N0YXJ0ID0gewotICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVf VFlQRV9WSURFT19CRUdJTl9DT0RJTkdfSU5GT19LSFIsCi0gICAgICAgIC52aWRlb1Nlc3Npb24g PSBjdHgtPmNvbW1vbi5zZXNzaW9uLAotICAgICAgICAudmlkZW9TZXNzaW9uUGFyYW1ldGVycyA9 IGN0eC0+ZW1wdHlfc2Vzc2lvbl9wYXJhbXMsCi0gICAgfTsKLSAgICBWa1ZpZGVvQ29kaW5nQ29u dHJvbEluZm9LSFIgZGVjb2RlX2N0cmwgPSB7Ci0gICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVS RV9UWVBFX1ZJREVPX0NPRElOR19DT05UUk9MX0lORk9fS0hSLAotICAgICAgICAuZmxhZ3MgPSBW S19WSURFT19DT0RJTkdfQ09OVFJPTF9SRVNFVF9CSVRfS0hSLAotICAgIH07Ci0gICAgVmtWaWRl b0VuZENvZGluZ0luZm9LSFIgZGVjb2RlX2VuZCA9IHsKLSAgICAgICAgLnNUeXBlID0gVktfU1RS VUNUVVJFX1RZUEVfVklERU9fRU5EX0NPRElOR19JTkZPX0tIUiwKLSAgICB9OwotCi0gICAgVmtD b21tYW5kQnVmZmVyIGNtZF9idWY7Ci0gICAgRkZWa0V4ZWNDb250ZXh0ICpleGVjOwotCi0gICAg LyogTm9uLXZpZGVvIHF1ZXVlcyBkbyBub3QgbmVlZCB0byBiZSByZXNldCAqLwotICAgIGlmICgh KGdldF9jb2RlY2Rlc2MoYXZjdHgtPmNvZGVjX2lkKS0+ZGVjb2RlX29wKSkKLSAgICAgICAgcmV0 dXJuOwotCi0gICAgZXhlYyA9IGZmX3ZrX2V4ZWNfZ2V0KCZjdHgtPnMsICZjdHgtPmV4ZWNfcG9v bCk7Ci0gICAgZmZfdmtfZXhlY19zdGFydCgmY3R4LT5zLCBleGVjKTsKLSAgICBjbWRfYnVmID0g ZXhlYy0+YnVmOwotCi0gICAgdmstPkNtZEJlZ2luVmlkZW9Db2RpbmdLSFIoY21kX2J1ZiwgJmRl Y29kZV9zdGFydCk7Ci0gICAgdmstPkNtZENvbnRyb2xWaWRlb0NvZGluZ0tIUihjbWRfYnVmLCAm ZGVjb2RlX2N0cmwpOwotICAgIHZrLT5DbWRFbmRWaWRlb0NvZGluZ0tIUihjbWRfYnVmLCAmZGVj b2RlX2VuZCk7Ci0gICAgZmZfdmtfZXhlY19zdWJtaXQoJmN0eC0+cywgZXhlYyk7Ci19Ci0KLWlu dCBmZl92a19kZWNvZGVfZnJhbWUoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LAotICAgICAgICAgICAg ICAgICAgICAgICBBVkZyYW1lICpwaWMsICAgIEZGVnVsa2FuRGVjb2RlUGljdHVyZSAqdnAsCi0g ICAgICAgICAgICAgICAgICAgICAgIEFWRnJhbWUgKnJwaWNbXSwgRkZWdWxrYW5EZWNvZGVQaWN0 dXJlICpydmtwW10pCi17Ci0gICAgaW50IGVycjsKLSAgICBWa1Jlc3VsdCByZXQ7Ci0gICAgVmtD b21tYW5kQnVmZmVyIGNtZF9idWY7Ci0gICAgRkZWa0J1ZmZlciAqc2RfYnVmOwotCi0gICAgRkZW dWxrYW5EZWNvZGVDb250ZXh0ICpkZWMgPSBhdmN0eC0+aW50ZXJuYWwtPmh3YWNjZWxfcHJpdl9k YXRhOwotICAgIEZGVnVsa2FuRGVjb2RlU2hhcmVkICpjdHggPSBkZWMtPnNoYXJlZF9jdHg7Ci0g ICAgRkZWdWxrYW5GdW5jdGlvbnMgKnZrID0gJmN0eC0+cy52a2ZuOwotCi0gICAgLyogT3V0cHV0 ICovCi0gICAgQVZWa0ZyYW1lICp2a2YgPSAoQVZWa0ZyYW1lICopcGljLT5idWZbMF0tPmRhdGE7 Ci0KLSAgICAvKiBRdWlya3MgKi8KLSAgICBjb25zdCBpbnQgbGF5ZXJlZF9kcGIgPSBjdHgtPmNv bW1vbi5sYXllcmVkX2RwYjsKLQotICAgIFZrVmlkZW9CZWdpbkNvZGluZ0luZm9LSFIgZGVjb2Rl X3N0YXJ0ID0gewotICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9WSURFT19CRUdJ Tl9DT0RJTkdfSU5GT19LSFIsCi0gICAgICAgIC52aWRlb1Nlc3Npb24gPSBjdHgtPmNvbW1vbi5z ZXNzaW9uLAotICAgICAgICAudmlkZW9TZXNzaW9uUGFyYW1ldGVycyA9IGRlYy0+c2Vzc2lvbl9w YXJhbXMgPwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooKFZrVmlkZW9TZXNz aW9uUGFyYW1ldGVyc0tIUiAqKWRlYy0+c2Vzc2lvbl9wYXJhbXMtPmRhdGEpIDoKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBWS19OVUxMX0hBTkRMRSwKLSAgICAgICAgLnJlZmVy ZW5jZVNsb3RDb3VudCA9IHZwLT5kZWNvZGVfaW5mby5yZWZlcmVuY2VTbG90Q291bnQsCi0gICAg ICAgIC5wUmVmZXJlbmNlU2xvdHMgPSB2cC0+ZGVjb2RlX2luZm8ucFJlZmVyZW5jZVNsb3RzLAot ICAgIH07Ci0gICAgVmtWaWRlb0VuZENvZGluZ0luZm9LSFIgZGVjb2RlX2VuZCA9IHsKLSAgICAg ICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfVklERU9fRU5EX0NPRElOR19JTkZPX0tIUiwK LSAgICB9OwotCi0gICAgVmtJbWFnZU1lbW9yeUJhcnJpZXIyIGltZ19iYXJbMzddOwotICAgIGlu dCBuYl9pbWdfYmFyID0gMDsKLSAgICBzaXplX3QgZGF0YV9zaXplID0gRkZBTElHTih2cC0+c2xp Y2VzX3NpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT5jYXBzLm1pbkJp dHN0cmVhbUJ1ZmZlclNpemVBbGlnbm1lbnQpOwotCi0gICAgRkZWa0V4ZWNDb250ZXh0ICpleGVj ID0gZmZfdmtfZXhlY19nZXQoJmN0eC0+cywgJmN0eC0+ZXhlY19wb29sKTsKLQotICAgIC8qIFRo ZSBjdXJyZW50IGRlY29kaW5nIHJlZmVyZW5jZSBoYXMgdG8gYmUgYm91bmQgYXMgYW4gaW5hY3Rp dmUgcmVmZXJlbmNlICovCi0gICAgVmtWaWRlb1JlZmVyZW5jZVNsb3RJbmZvS0hSICpjdXJfdmtf cmVmOwotICAgIGN1cl92a19yZWYgPSAodm9pZCAqKSZkZWNvZGVfc3RhcnQucFJlZmVyZW5jZVNs b3RzW2RlY29kZV9zdGFydC5yZWZlcmVuY2VTbG90Q291bnRdOwotICAgIGN1cl92a19yZWZbMF0g PSB2cC0+cmVmX3Nsb3Q7Ci0gICAgY3VyX3ZrX3JlZlswXS5zbG90SW5kZXggPSAtMTsKLSAgICBk ZWNvZGVfc3RhcnQucmVmZXJlbmNlU2xvdENvdW50Kys7Ci0KLSAgICBzZF9idWYgPSAoRkZWa0J1 ZmZlciAqKXZwLT5zbGljZXNfYnVmLT5kYXRhOwotCi0gICAgLyogRmx1c2ggaWYgbmVlZGVkICov Ci0gICAgaWYgKCEoc2RfYnVmLT5mbGFncyAmIFZLX01FTU9SWV9QUk9QRVJUWV9IT1NUX0NPSEVS RU5UX0JJVCkpIHsKLSAgICAgICAgVmtNYXBwZWRNZW1vcnlSYW5nZSBmbHVzaF9idWYgPSB7Ci0g ICAgICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9NQVBQRURfTUVNT1JZX1JBTkdF LAotICAgICAgICAgICAgLm1lbW9yeSA9IHNkX2J1Zi0+bWVtLAotICAgICAgICAgICAgLm9mZnNl dCA9IDAsCi0gICAgICAgICAgICAuc2l6ZSA9IEZGQUxJR04odnAtPnNsaWNlc19zaXplLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+cy5wcm9wcy5wcm9wZXJ0aWVzLmxpbWl0cy5u b25Db2hlcmVudEF0b21TaXplKSwKLSAgICAgICAgfTsKLQotICAgICAgICByZXQgPSB2ay0+Rmx1 c2hNYXBwZWRNZW1vcnlSYW5nZXMoY3R4LT5zLmh3Y3R4LT5hY3RfZGV2LCAxLCAmZmx1c2hfYnVm KTsKLSAgICAgICAgaWYgKHJldCAhPSBWS19TVUNDRVNTKSB7Ci0gICAgICAgICAgICBhdl9sb2co YXZjdHgsIEFWX0xPR19FUlJPUiwgIkZhaWxlZCB0byBmbHVzaCBtZW1vcnk6ICVzXG4iLAotICAg ICAgICAgICAgICAgICAgIGZmX3ZrX3JldDJzdHIocmV0KSk7Ci0gICAgICAgICAgICByZXR1cm4g QVZFUlJPUl9FWFRFUk5BTDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHZwLT5kZWNvZGVfaW5m by5zcmNCdWZmZXIgICAgICAgPSBzZF9idWYtPmJ1ZjsKLSAgICB2cC0+ZGVjb2RlX2luZm8uc3Jj QnVmZmVyT2Zmc2V0ID0gMDsKLSAgICB2cC0+ZGVjb2RlX2luZm8uc3JjQnVmZmVyUmFuZ2UgID0g ZGF0YV9zaXplOwotCi0gICAgLyogU3RhcnQgY29tbWFuZCBidWZmZXIgcmVjb3JkaW5nICovCi0g ICAgZXJyID0gZmZfdmtfZXhlY19zdGFydCgmY3R4LT5zLCBleGVjKTsKLSAgICBpZiAoZXJyIDwg MCkKLSAgICAgICAgcmV0dXJuIGVycjsKLSAgICBjbWRfYnVmID0gZXhlYy0+YnVmOwotCi0gICAg LyogU2xpY2VzICovCi0gICAgZXJyID0gZmZfdmtfZXhlY19hZGRfZGVwX2J1ZigmY3R4LT5zLCBl eGVjLCAmdnAtPnNsaWNlc19idWYsIDEsIDApOwotICAgIGlmIChlcnIgPCAwKQotICAgICAgICBy ZXR1cm4gZXJyOwotICAgIHZwLT5zbGljZXNfYnVmID0gTlVMTDsgLyogT3duZWQgYnkgdGhlIGV4 ZWMgYnVmZmVyIGZyb20gbm93IG9uICovCi0KLSAgICAvKiBQYXJhbWV0ZXJzICovCi0gICAgZXJy ID0gZmZfdmtfZXhlY19hZGRfZGVwX2J1ZigmY3R4LT5zLCBleGVjLCAmZGVjLT5zZXNzaW9uX3Bh cmFtcywgMSwgMSk7Ci0gICAgaWYgKGVyciA8IDApCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAg ICBlcnIgPSBmZl92a19leGVjX2FkZF9kZXBfZnJhbWUoJmN0eC0+cywgZXhlYywgcGljLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19QSVBFTElORV9TVEFHRV8yX1ZJREVP X0RFQ09ERV9CSVRfS0hSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19Q SVBFTElORV9TVEFHRV8yX1ZJREVPX0RFQ09ERV9CSVRfS0hSKTsKLSAgICBpZiAoZXJyIDwgMCkK LSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIGVyciA9IGZmX3ZrX2V4ZWNfbWlycm9yX3NlbV92 YWx1ZSgmY3R4LT5zLCBleGVjLCAmdnAtPnNlbSwgJnZwLT5zZW1fdmFsdWUsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpYyk7Ci0gICAgaWYgKGVyciA8IDApCi0gICAg ICAgIHJldHVybiBlcnI7Ci0KLSAgICAvKiBPdXRwdXQgaW1hZ2UgLSBjaGFuZ2UgbGF5b3V0LCBh cyBpdCBjb21lcyBmcm9tIGEgcG9vbCAqLwotICAgIGltZ19iYXJbbmJfaW1nX2Jhcl0gPSAoVmtJ bWFnZU1lbW9yeUJhcnJpZXIyKSB7Ci0gICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBF X0lNQUdFX01FTU9SWV9CQVJSSUVSXzIsCi0gICAgICAgIC5wTmV4dCA9IE5VTEwsCi0gICAgICAg IC5zcmNTdGFnZU1hc2sgPSBWS19QSVBFTElORV9TVEFHRV8yX1ZJREVPX0RFQ09ERV9CSVRfS0hS LAotICAgICAgICAuZHN0U3RhZ2VNYXNrID0gVktfUElQRUxJTkVfU1RBR0VfMl9WSURFT19ERUNP REVfQklUX0tIUiwKLSAgICAgICAgLnNyY0FjY2Vzc01hc2sgPSBWS19BQ0NFU1NfMl9OT05FLAot ICAgICAgICAuZHN0QWNjZXNzTWFzayA9IFZLX0FDQ0VTU18yX1ZJREVPX0RFQ09ERV9XUklURV9C SVRfS0hSLAotICAgICAgICAub2xkTGF5b3V0ID0gdmtmLT5sYXlvdXRbMF0sCi0gICAgICAgIC5u ZXdMYXlvdXQgPSAobGF5ZXJlZF9kcGIgfHwgdnAtPmRwYl9mcmFtZSkgPwotICAgICAgICAgICAg ICAgICAgICAgVktfSU1BR0VfTEFZT1VUX1ZJREVPX0RFQ09ERV9EU1RfS0hSIDoKLSAgICAgICAg ICAgICAgICAgICAgIFZLX0lNQUdFX0xBWU9VVF9WSURFT19ERUNPREVfRFBCX0tIUiwgLyogU3Bl YywgMDcyNTIgdXR0ZXIgbWFkbmVzcyAqLwotICAgICAgICAuc3JjUXVldWVGYW1pbHlJbmRleCA9 IHZrZi0+cXVldWVfZmFtaWx5WzBdLAotICAgICAgICAuZHN0UXVldWVGYW1pbHlJbmRleCA9IFZL X1FVRVVFX0ZBTUlMWV9JR05PUkVELAotICAgICAgICAuaW1hZ2UgPSB2a2YtPmltZ1swXSwKLSAg ICAgICAgLnN1YnJlc291cmNlUmFuZ2UgPSAoVmtJbWFnZVN1YnJlc291cmNlUmFuZ2UpIHsKLSAg ICAgICAgICAgIC5hc3BlY3RNYXNrID0gdnAtPnZpZXcuYXNwZWN0WzBdLAotICAgICAgICAgICAg LmxheWVyQ291bnQgPSAxLAotICAgICAgICAgICAgLmxldmVsQ291bnQgPSAxLAotICAgICAgICB9 LAotICAgIH07Ci0gICAgZmZfdmtfZXhlY191cGRhdGVfZnJhbWUoJmN0eC0+cywgZXhlYywgcGlj LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpbWdfYmFyW25iX2ltZ19iYXJdLCAmbmJf aW1nX2Jhcik7Ci0KLSAgICAvKiBSZWZlcmVuY2UgZm9yIHRoZSBjdXJyZW50IGltYWdlLCBpZiBl eGlzdGluZyBhbmQgbm90IGxheWVyZWQgKi8KLSAgICBpZiAodnAtPmRwYl9mcmFtZSkgewotICAg ICAgICBlcnIgPSBmZl92a19leGVjX2FkZF9kZXBfZnJhbWUoJmN0eC0+cywgZXhlYywgdnAtPmRw Yl9mcmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZLX1BJUEVM SU5FX1NUQUdFXzJfVklERU9fREVDT0RFX0JJVF9LSFIsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBWS19QSVBFTElORV9TVEFHRV8yX1ZJREVPX0RFQ09ERV9CSVRfS0hS KTsKLSAgICAgICAgaWYgKGVyciA8IDApCi0gICAgICAgICAgICByZXR1cm4gZXJyOwotICAgIH0K LQotICAgIGlmICghbGF5ZXJlZF9kcGIpIHsKLSAgICAgICAgLyogQWxsIHJlZmVyZW5jZXMgKGFw YXJ0IGZyb20gdGhlIGN1cnJlbnQpIGZvciBub24tbGF5ZXJlZCByZWZzICovCi0KLSAgICAgICAg Zm9yIChpbnQgaSA9IDA7IGkgPCB2cC0+ZGVjb2RlX2luZm8ucmVmZXJlbmNlU2xvdENvdW50OyBp KyspIHsKLSAgICAgICAgICAgIEFWRnJhbWUgKnJlZl9mcmFtZSA9IHJwaWNbaV07Ci0gICAgICAg ICAgICBGRlZ1bGthbkRlY29kZVBpY3R1cmUgKnJ2cCA9IHJ2a3BbaV07Ci0gICAgICAgICAgICBB VkZyYW1lICpyZWYgPSBydnAtPmRwYl9mcmFtZSA/IHJ2cC0+ZHBiX2ZyYW1lIDogcmVmX2ZyYW1l OwotCi0gICAgICAgICAgICBlcnIgPSBmZl92a19leGVjX2FkZF9kZXBfZnJhbWUoJmN0eC0+cywg ZXhlYywgcmVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZL X1BJUEVMSU5FX1NUQUdFXzJfVklERU9fREVDT0RFX0JJVF9LSFIsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfUElQRUxJTkVfU1RBR0VfMl9WSURFT19ERUNP REVfQklUX0tIUik7Ci0gICAgICAgICAgICBpZiAoZXJyIDwgMCkKLSAgICAgICAgICAgICAgICBy ZXR1cm4gZXJyOwotCi0gICAgICAgICAgICBpZiAoZXJyID09IDApIHsKLSAgICAgICAgICAgICAg ICBlcnIgPSBmZl92a19leGVjX21pcnJvcl9zZW1fdmFsdWUoJmN0eC0+cywgZXhlYywKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnJ2cC0+c2VtLCAm cnZwLT5zZW1fdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHJlZik7Ci0gICAgICAgICAgICAgICAgaWYgKGVyciA8IDApCi0gICAgICAgICAg ICAgICAgICAgIHJldHVybiBlcnI7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICgh cnZwLT5kcGJfZnJhbWUpIHsKLSAgICAgICAgICAgICAgICBBVlZrRnJhbWUgKnJ2a2YgPSAoQVZW a0ZyYW1lICopcmVmLT5kYXRhWzBdOwotCi0gICAgICAgICAgICAgICAgaW1nX2JhcltuYl9pbWdf YmFyXSA9IChWa0ltYWdlTWVtb3J5QmFycmllcjIpIHsKLSAgICAgICAgICAgICAgICAgICAgLnNU eXBlID0gVktfU1RSVUNUVVJFX1RZUEVfSU1BR0VfTUVNT1JZX0JBUlJJRVJfMiwKLSAgICAgICAg ICAgICAgICAgICAgLnBOZXh0ID0gTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgLnNyY1N0YWdl TWFzayA9IFZLX1BJUEVMSU5FX1NUQUdFXzJfVklERU9fREVDT0RFX0JJVF9LSFIsCi0gICAgICAg ICAgICAgICAgICAgIC5kc3RTdGFnZU1hc2sgPSBWS19QSVBFTElORV9TVEFHRV8yX1ZJREVPX0RF Q09ERV9CSVRfS0hSLAotICAgICAgICAgICAgICAgICAgICAuc3JjQWNjZXNzTWFzayA9IFZLX0FD Q0VTU18yX05PTkUsCi0gICAgICAgICAgICAgICAgICAgIC5kc3RBY2Nlc3NNYXNrID0gVktfQUND RVNTXzJfVklERU9fREVDT0RFX1JFQURfQklUX0tIUiB8Ci0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgVktfQUNDRVNTXzJfVklERU9fREVDT0RFX1dSSVRFX0JJVF9LSFIsCi0g ICAgICAgICAgICAgICAgICAgIC5vbGRMYXlvdXQgPSBydmtmLT5sYXlvdXRbMF0sCi0gICAgICAg ICAgICAgICAgICAgIC5uZXdMYXlvdXQgPSBWS19JTUFHRV9MQVlPVVRfVklERU9fREVDT0RFX0RQ Ql9LSFIsCi0gICAgICAgICAgICAgICAgICAgIC5zcmNRdWV1ZUZhbWlseUluZGV4ID0gcnZrZi0+ cXVldWVfZmFtaWx5WzBdLAotICAgICAgICAgICAgICAgICAgICAuZHN0UXVldWVGYW1pbHlJbmRl eCA9IFZLX1FVRVVFX0ZBTUlMWV9JR05PUkVELAotICAgICAgICAgICAgICAgICAgICAuaW1hZ2Ug PSBydmtmLT5pbWdbMF0sCi0gICAgICAgICAgICAgICAgICAgIC5zdWJyZXNvdXJjZVJhbmdlID0g KFZrSW1hZ2VTdWJyZXNvdXJjZVJhbmdlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAuYXNw ZWN0TWFzayA9IHJ2cC0+dmlldy5hc3BlY3RfcmVmWzBdLAotICAgICAgICAgICAgICAgICAgICAg ICAgLmxheWVyQ291bnQgPSAxLAotICAgICAgICAgICAgICAgICAgICAgICAgLmxldmVsQ291bnQg PSAxLAotICAgICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIH07Ci0gICAgICAg ICAgICAgICAgZmZfdmtfZXhlY191cGRhdGVfZnJhbWUoJmN0eC0+cywgZXhlYywgcmVmLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpbWdfYmFyW25iX2ltZ19iYXJd LCAmbmJfaW1nX2Jhcik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYg KHZwLT5kZWNvZGVfaW5mby5yZWZlcmVuY2VTbG90Q291bnQgfHwKLSAgICAgICAgICAgICAgIHZw LT52aWV3Lm91dFswXSAhPSB2cC0+dmlldy5yZWZbMF0pIHsKLSAgICAgICAgLyogU2luZ2xlIGJh cnJpZXIgZm9yIGEgc2luZ2xlIGxheWVyZWQgcmVmICovCi0gICAgICAgIGVyciA9IGZmX3ZrX2V4 ZWNfYWRkX2RlcF9mcmFtZSgmY3R4LT5zLCBleGVjLCBjdHgtPmNvbW1vbi5sYXllcmVkX2ZyYW1l LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfUElQRUxJTkVfU1RB R0VfMl9WSURFT19ERUNPREVfQklUX0tIUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFZLX1BJUEVMSU5FX1NUQUdFXzJfVklERU9fREVDT0RFX0JJVF9LSFIpOwotICAg ICAgICBpZiAoZXJyIDwgMCkKLSAgICAgICAgICAgIHJldHVybiBlcnI7Ci0gICAgfQotCi0gICAg LyogQ2hhbmdlIGltYWdlIGxheW91dCAqLwotICAgIHZrLT5DbWRQaXBlbGluZUJhcnJpZXIyKGNt ZF9idWYsICYoVmtEZXBlbmRlbmN5SW5mbykgewotICAgICAgICAgICAgLnNUeXBlID0gVktfU1RS VUNUVVJFX1RZUEVfREVQRU5ERU5DWV9JTkZPLAotICAgICAgICAgICAgLmRlcGVuZGVuY3lGbGFn cyA9IFZLX0RFUEVOREVOQ1lfQllfUkVHSU9OX0JJVCwKLSAgICAgICAgICAgIC5wSW1hZ2VNZW1v cnlCYXJyaWVycyA9IGltZ19iYXIsCi0gICAgICAgICAgICAuaW1hZ2VNZW1vcnlCYXJyaWVyQ291 bnQgPSBuYl9pbWdfYmFyLAotICAgICAgICB9KTsKLQotICAgIC8qIFN0YXJ0LCB1c2UgcGFyYW1l dGVycywgZGVjb2RlIGFuZCBlbmQgZGVjb2RpbmcgKi8KLSAgICB2ay0+Q21kQmVnaW5WaWRlb0Nv ZGluZ0tIUihjbWRfYnVmLCAmZGVjb2RlX3N0YXJ0KTsKLSAgICB2ay0+Q21kRGVjb2RlVmlkZW9L SFIoY21kX2J1ZiwgJnZwLT5kZWNvZGVfaW5mbyk7Ci0gICAgdmstPkNtZEVuZFZpZGVvQ29kaW5n S0hSKGNtZF9idWYsICZkZWNvZGVfZW5kKTsKLQotICAgIC8qIEVuZCByZWNvcmRpbmcgYW5kIHN1 Ym1pdCBmb3IgZXhlY3V0aW9uICovCi0gICAgcmV0dXJuIGZmX3ZrX2V4ZWNfc3VibWl0KCZjdHgt PnMsIGV4ZWMpOwotfQotCi12b2lkIGZmX3ZrX2RlY29kZV9mcmVlX2ZyYW1lKEFWSFdEZXZpY2VD b250ZXh0ICpkZXZfY3R4LCBGRlZ1bGthbkRlY29kZVBpY3R1cmUgKnZwKQotewotICAgIEFWVnVs a2FuRGV2aWNlQ29udGV4dCAqaHdjdHggPSBkZXZfY3R4LT5od2N0eDsKLQotICAgIFZrU2VtYXBo b3JlV2FpdEluZm8gc2VtX3dhaXQgPSAoVmtTZW1hcGhvcmVXYWl0SW5mbykgewotICAgICAgICAu c1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9TRU1BUEhPUkVfV0FJVF9JTkZPLAotICAgICAgICAu cFNlbWFwaG9yZXMgPSAmdnAtPnNlbSwKLSAgICAgICAgLnBWYWx1ZXMgPSAmdnAtPnNlbV92YWx1 ZSwKLSAgICAgICAgLnNlbWFwaG9yZUNvdW50ID0gMSwKLSAgICB9OwotCi0gICAgLyogV2UgZG8g bm90IGhhdmUgdG8gbG9jayB0aGUgZnJhbWUgaGVyZSBiZWNhdXNlIHdlJ3JlIG5vdCBpbnRlcmVz dGVkCi0gICAgICogaW4gdGhlIGFjdHVhbCBjdXJyZW50IHNlbWFwaG9yZSB2YWx1ZSwgYnV0IG9u bHkgdGhhdCBpdCdzIGxhdGVyIHRoYW4KLSAgICAgKiB0aGUgdGltZSB3ZSBzdWJtaXR0ZWQgdGhl IGltYWdlIGZvciBkZWNvZGluZy4gKi8KLSAgICBpZiAodnAtPnNlbSkKLSAgICAgICAgdnAtPndh aXRfc2VtYXBob3Jlcyhod2N0eC0+YWN0X2RldiwgJnNlbV93YWl0LCBVSU5UNjRfTUFYKTsKLQot ICAgIC8qIEZyZWUgc2xpY2VzIGRhdGEgKi8KLSAgICBhdl9idWZmZXJfdW5yZWYoJnZwLT5zbGlj ZXNfYnVmKTsKLQotICAgIC8qIERlc3Ryb3kgaW1hZ2UgdmlldyAob3V0KSAqLwotICAgIGZvciAo aW50IGkgPSAwOyBpIDwgQVZfTlVNX0RBVEFfUE9JTlRFUlM7IGkrKykgewotICAgICAgICBpZiAo dnAtPnZpZXcub3V0W2ldICYmIHZwLT52aWV3Lm91dFtpXSAhPSB2cC0+dmlldy5kc3RbaV0pCi0g ICAgICAgICAgICB2cC0+ZGVzdHJveV9pbWFnZV92aWV3KGh3Y3R4LT5hY3RfZGV2LCB2cC0+dmll dy5vdXRbaV0sIGh3Y3R4LT5hbGxvYyk7Ci0KLSAgICAgICAgLyogRGVzdHJveSBpbWFnZSB2aWV3 IChyZWYsIHVubGF5ZXJlZCkgKi8KLSAgICAgICAgaWYgKHZwLT52aWV3LmRzdFtpXSkKLSAgICAg ICAgICAgIHZwLT5kZXN0cm95X2ltYWdlX3ZpZXcoaHdjdHgtPmFjdF9kZXYsIHZwLT52aWV3LmRz dFtpXSwgaHdjdHgtPmFsbG9jKTsKLSAgICB9Ci0KLSAgICBhdl9mcmFtZV9mcmVlKCZ2cC0+ZHBi X2ZyYW1lKTsKLX0KLQotc3RhdGljIHZvaWQgZnJlZV9jb21tb24oQVZSZWZTdHJ1Y3RPcGFxdWUg dW51c2VkLCB2b2lkICpvYmopCi17Ci0gICAgRkZWdWxrYW5EZWNvZGVTaGFyZWQgKmN0eCA9IG9i ajsKLSAgICBGRlZ1bGthbkNvbnRleHQgKnMgPSAmY3R4LT5zOwotICAgIEZGVnVsa2FuRnVuY3Rp b25zICp2ayA9ICZjdHgtPnMudmtmbjsKLQotICAgIC8qIFdhaXQgb24gYW5kIGZyZWUgZXhlY3V0 aW9uIHBvb2wgKi8KLSAgICBmZl92a19leGVjX3Bvb2xfZnJlZSgmY3R4LT5zLCAmY3R4LT5leGVj X3Bvb2wpOwotCi0gICAgLyogVGhpcyBhbHNvIGZyZWVzIGFsbCByZWZlcmVuY2VzIGZyb20gdGhp cyBwb29sICovCi0gICAgYXZfZnJhbWVfZnJlZSgmY3R4LT5jb21tb24ubGF5ZXJlZF9mcmFtZSk7 Ci0KLSAgICAvKiBEZXN0cm95IHBhcmFtZXRlcnMgKi8KLSAgICBpZiAoY3R4LT5lbXB0eV9zZXNz aW9uX3BhcmFtcykKLSAgICAgICAgdmstPkRlc3Ryb3lWaWRlb1Nlc3Npb25QYXJhbWV0ZXJzS0hS KHMtPmh3Y3R4LT5hY3RfZGV2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY3R4LT5lbXB0eV9zZXNzaW9uX3BhcmFtcywKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHMtPmh3Y3R4LT5hbGxvYyk7Ci0KLSAgICBhdl9idWZm ZXJfcG9vbF91bmluaXQoJmN0eC0+YnVmX3Bvb2wpOwotCi0gICAgZmZfdmtfdmlkZW9fY29tbW9u X3VuaW5pdChzLCAmY3R4LT5jb21tb24pOwotCi0gICAgaWYgKGN0eC0+c2RfY3R4X2ZyZWUpCi0g ICAgICAgIGN0eC0+c2RfY3R4X2ZyZWUoY3R4KTsKLQotICAgIGZmX3ZrX3VuaW5pdChzKTsKLX0K LQotc3RhdGljIGludCB2dWxrYW5fZGVjb2RlX2Jvb3RzdHJhcChBVkNvZGVjQ29udGV4dCAqYXZj dHgsIEFWQnVmZmVyUmVmICpmcmFtZXNfcmVmKQotewotICAgIGludCBlcnI7Ci0gICAgRkZWdWxr YW5EZWNvZGVDb250ZXh0ICpkZWMgPSBhdmN0eC0+aW50ZXJuYWwtPmh3YWNjZWxfcHJpdl9kYXRh OwotICAgIGNvbnN0IEZGVnVsa2FuRGVjb2RlRGVzY3JpcHRvciAqdmtfZGVzYyA9IGdldF9jb2Rl Y2Rlc2MoYXZjdHgtPmNvZGVjX2lkKTsKLSAgICBBVkhXRnJhbWVzQ29udGV4dCAqZnJhbWVzID0g KEFWSFdGcmFtZXNDb250ZXh0ICopZnJhbWVzX3JlZi0+ZGF0YTsKLSAgICBBVkhXRGV2aWNlQ29u dGV4dCAqZGV2aWNlID0gKEFWSFdEZXZpY2VDb250ZXh0ICopZnJhbWVzLT5kZXZpY2VfcmVmLT5k YXRhOwotICAgIEFWVnVsa2FuRGV2aWNlQ29udGV4dCAqaHdjdHggPSBkZXZpY2UtPmh3Y3R4Owot ICAgIEZGVnVsa2FuRGVjb2RlU2hhcmVkICpjdHg7Ci0KLSAgICBpZiAoZGVjLT5zaGFyZWRfY3R4 KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGRlYy0+c2hhcmVkX2N0eCA9IGF2X3JlZnN0cnVj dF9hbGxvY19leHQoc2l6ZW9mKCpjdHgpLCAwLCBOVUxMLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZnJlZV9jb21tb24pOwotICAgIGlmICghZGVjLT5zaGFy ZWRfY3R4KQotICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOwotCi0gICAgY3R4ID0gZGVj LT5zaGFyZWRfY3R4OwotCi0gICAgY3R4LT5zLmV4dGVuc2lvbnMgPSBmZl92a19leHRlbnNpb25z X3RvX21hc2soaHdjdHgtPmVuYWJsZWRfZGV2X2V4dGVuc2lvbnMsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHdjdHgtPm5iX2VuYWJsZWRfZGV2X2V4 dGVuc2lvbnMpOwotCi0gICAgaWYgKHZrX2Rlc2MtPnF1ZXVlX2ZsYWdzICYgVktfUVVFVUVfVklE RU9fREVDT0RFX0JJVF9LSFIpIHsKLSAgICAgICAgaWYgKCEoY3R4LT5zLmV4dGVuc2lvbnMgJiBG Rl9WS19FWFRfVklERU9fREVDT0RFX1FVRVVFKSkgewotICAgICAgICAgICAgYXZfbG9nKGF2Y3R4 LCBBVl9MT0dfRVJST1IsICJEZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGUgJXMgZXh0ZW5zaW9u IVxuIiwKLSAgICAgICAgICAgICAgICAgICBWS19LSFJfVklERU9fREVDT0RFX1FVRVVFX0VYVEVO U0lPTl9OQU1FKTsKLSAgICAgICAgICAgIGF2X3JlZnN0cnVjdF91bnJlZigmZGVjLT5zaGFyZWRf Y3R4KTsKLSAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT1NZUyk7Ci0gICAgICAgIH0KLSAg ICB9Ci0KLSAgICBlcnIgPSBmZl92a19sb2FkX2Z1bmN0aW9ucyhkZXZpY2UsICZjdHgtPnMudmtm biwgY3R4LT5zLmV4dGVuc2lvbnMsIDEsIDEpOwotICAgIGlmIChlcnIgPCAwKSB7Ci0gICAgICAg IGF2X3JlZnN0cnVjdF91bnJlZigmZGVjLT5zaGFyZWRfY3R4KTsKLSAgICAgICAgcmV0dXJuIGVy cjsKLSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIFZrUmVzdWx0IHZ1bGthbl9z ZXR1cF9wcm9maWxlKEFWQ29kZWNDb250ZXh0ICphdmN0eCwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBGRlZ1bGthbkRlY29kZVByb2ZpbGVEYXRhICpwcm9mLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFWVnVsa2FuRGV2aWNlQ29udGV4dCAqaHdj dHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkZWdWxrYW5GdW5jdGlv bnMgKnZrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZGVnVs a2FuRGVjb2RlRGVzY3JpcHRvciAqdmtfZGVzYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBWa1ZpZGVvRGVjb2RlSDI2NENhcGFiaWxpdGllc0tIUiAqaDI2NF9jYXBzLAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZrVmlkZW9EZWNvZGVIMjY1Q2Fw YWJpbGl0aWVzS0hSICpoMjY1X2NhcHMsCi0jaWYgQ09ORklHX1ZQOV9WVUxLQU5fSFdBQ0NFTAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZrVmlkZW9EZWNvZGVWUDlDYXBh YmlsaXRpZXNLSFIgKnZwOV9jYXBzLAotI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgVmtWaWRlb0RlY29kZUFWMUNhcGFiaWxpdGllc0tIUiAqYXYxX2NhcHMsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmtWaWRlb0NhcGFiaWxpdGllc0tI UiAqY2FwcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWa1ZpZGVvRGVj b2RlQ2FwYWJpbGl0aWVzS0hSICpkZWNfY2FwcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpbnQgY3VyX3Byb2ZpbGUpCi17Ci0gICAgVmtWaWRlb0RlY29kZVVzYWdlSW5m b0tIUiAqdXNhZ2UgPSAmcHJvZi0+dXNhZ2U7Ci0gICAgVmtWaWRlb1Byb2ZpbGVJbmZvS0hSICpw cm9maWxlID0gJnByb2YtPnByb2ZpbGU7Ci0gICAgVmtWaWRlb1Byb2ZpbGVMaXN0SW5mb0tIUiAq cHJvZmlsZV9saXN0ID0gJnByb2YtPnByb2ZpbGVfbGlzdDsKLQotICAgIFZrVmlkZW9EZWNvZGVI MjY0UHJvZmlsZUluZm9LSFIgKmgyNjRfcHJvZmlsZSA9ICZwcm9mLT5oMjY0X3Byb2ZpbGU7Ci0g ICAgVmtWaWRlb0RlY29kZUgyNjVQcm9maWxlSW5mb0tIUiAqaDI2NV9wcm9maWxlID0gJnByb2Yt PmgyNjVfcHJvZmlsZTsKLSNpZiBDT05GSUdfVlA5X1ZVTEtBTl9IV0FDQ0VMCi0gICAgVmtWaWRl b0RlY29kZVZQOVByb2ZpbGVJbmZvS0hSICp2cDlfcHJvZmlsZSAgPSAmcHJvZi0+dnA5X3Byb2Zp bGU7Ci0jZW5kaWYKLSAgICBWa1ZpZGVvRGVjb2RlQVYxUHJvZmlsZUluZm9LSFIgKmF2MV9wcm9m aWxlICA9ICZwcm9mLT5hdjFfcHJvZmlsZTsKLQotICAgIGNvbnN0IEFWUGl4Rm10RGVzY3JpcHRv ciAqZGVzYyA9IGF2X3BpeF9mbXRfZGVzY19nZXQoYXZjdHgtPnN3X3BpeF9mbXQpOwotICAgIGlm ICghZGVzYykKLSAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKLQotICAgIGlmIChhdmN0 eC0+Y29kZWNfaWQgPT0gQVZfQ09ERUNfSURfSDI2NCkgewotICAgICAgICBkZWNfY2Fwcy0+cE5l eHQgPSBoMjY0X2NhcHM7Ci0gICAgICAgIHVzYWdlLT5wTmV4dCA9IGgyNjRfcHJvZmlsZTsKLSAg ICAgICAgaDI2NF9wcm9maWxlLT5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX1ZJREVPX0RFQ09E RV9IMjY0X1BST0ZJTEVfSU5GT19LSFI7Ci0KLSAgICAgICAgLyogVnVsa2FuIHRyYW5zbWl0cyBh bGwgdGhlIGNvbnN0cmFudF9zZXQgZmxhZ3MsIHJhdGhlciB0aGFuIHdhbnRpbmcgdGhlbQotICAg ICAgICAgKiBtZXJnZWQgaW4gdGhlIHByb2ZpbGUgSURDICovCi0gICAgICAgIGgyNjRfcHJvZmls ZS0+c3RkUHJvZmlsZUlkYyA9IGN1cl9wcm9maWxlICYgfihBVl9QUk9GSUxFX0gyNjRfQ09OU1RS QUlORUQgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgQVZfUFJPRklMRV9IMjY0X0lOVFJBKTsKLQotICAgICAgICBoMjY0X3Byb2ZpbGUtPnBp Y3R1cmVMYXlvdXQgPSBhdmN0eC0+ZmllbGRfb3JkZXIgPT0gQVZfRklFTERfVU5LTk9XTiB8fAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdmN0eC0+ZmllbGRfb3JkZXIg PT0gQVZfRklFTERfUFJPR1JFU1NJVkUgPwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBWS19WSURFT19ERUNPREVfSDI2NF9QSUNUVVJFX0xBWU9VVF9QUk9HUkVTU0lWRV9L SFIgOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19WSURFT19ERUNP REVfSDI2NF9QSUNUVVJFX0xBWU9VVF9JTlRFUkxBQ0VEX0lOVEVSTEVBVkVEX0xJTkVTX0JJVF9L SFI7Ci0gICAgfSBlbHNlIGlmIChhdmN0eC0+Y29kZWNfaWQgPT0gQVZfQ09ERUNfSURfSDI2NSkg ewotICAgICAgICBkZWNfY2Fwcy0+cE5leHQgPSBoMjY1X2NhcHM7Ci0gICAgICAgIHVzYWdlLT5w TmV4dCA9IGgyNjVfcHJvZmlsZTsKLSAgICAgICAgaDI2NV9wcm9maWxlLT5zVHlwZSA9IFZLX1NU UlVDVFVSRV9UWVBFX1ZJREVPX0RFQ09ERV9IMjY1X1BST0ZJTEVfSU5GT19LSFI7Ci0gICAgICAg IGgyNjVfcHJvZmlsZS0+c3RkUHJvZmlsZUlkYyA9IGN1cl9wcm9maWxlOwotI2lmIENPTkZJR19W UDlfVlVMS0FOX0hXQUNDRUwKLSAgICB9IGVsc2UgaWYgKGF2Y3R4LT5jb2RlY19pZCA9PSBBVl9D T0RFQ19JRF9WUDkpIHsKLSAgICAgICAgZGVjX2NhcHMtPnBOZXh0ID0gdnA5X2NhcHM7Ci0gICAg ICAgIHVzYWdlLT5wTmV4dCA9IHZwOV9wcm9maWxlOwotICAgICAgICB2cDlfcHJvZmlsZS0+c1R5 cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9WSURFT19ERUNPREVfVlA5X1BST0ZJTEVfSU5GT19LSFI7 Ci0gICAgICAgIHZwOV9wcm9maWxlLT5zdGRQcm9maWxlID0gY3VyX3Byb2ZpbGU7Ci0jZW5kaWYK LSAgICB9IGVsc2UgaWYgKGF2Y3R4LT5jb2RlY19pZCA9PSBBVl9DT0RFQ19JRF9BVjEpIHsKLSAg ICAgICAgZGVjX2NhcHMtPnBOZXh0ID0gYXYxX2NhcHM7Ci0gICAgICAgIHVzYWdlLT5wTmV4dCA9 IGF2MV9wcm9maWxlOwotICAgICAgICBhdjFfcHJvZmlsZS0+c1R5cGUgPSBWS19TVFJVQ1RVUkVf VFlQRV9WSURFT19ERUNPREVfQVYxX1BST0ZJTEVfSU5GT19LSFI7Ci0gICAgICAgIGF2MV9wcm9m aWxlLT5zdGRQcm9maWxlID0gY3VyX3Byb2ZpbGU7Ci0gICAgICAgIGF2MV9wcm9maWxlLT5maWxt R3JhaW5TdXBwb3J0ID0gIShhdmN0eC0+ZXhwb3J0X3NpZGVfZGF0YSAmIEFWX0NPREVDX0VYUE9S VF9EQVRBX0ZJTE1fR1JBSU4pOwotICAgIH0KLQotICAgIHVzYWdlLT5zVHlwZSAgICAgICAgICAg PSBWS19TVFJVQ1RVUkVfVFlQRV9WSURFT19ERUNPREVfVVNBR0VfSU5GT19LSFI7Ci0gICAgdXNh Z2UtPnZpZGVvVXNhZ2VIaW50cyA9IFZLX1ZJREVPX0RFQ09ERV9VU0FHRV9ERUZBVUxUX0tIUjsK LQotICAgIHByb2ZpbGUtPnNUeXBlICAgICAgICAgICAgICAgPSBWS19TVFJVQ1RVUkVfVFlQRV9W SURFT19QUk9GSUxFX0lORk9fS0hSOwotICAgIHByb2ZpbGUtPnBOZXh0ICAgICAgICAgICAgICAg PSB1c2FnZTsKLSAgICBwcm9maWxlLT52aWRlb0NvZGVjT3BlcmF0aW9uID0gdmtfZGVzYy0+ZGVj b2RlX29wOwotICAgIHByb2ZpbGUtPmNocm9tYVN1YnNhbXBsaW5nICAgPSBmZl92a19zdWJzYW1w bGluZ19mcm9tX2F2X2Rlc2MoZGVzYyk7Ci0gICAgcHJvZmlsZS0+bHVtYUJpdERlcHRoICAgICAg ICA9IGZmX3ZrX2RlcHRoX2Zyb21fYXZfZGVwdGgoZGVzYy0+Y29tcFswXS5kZXB0aCk7Ci0gICAg cHJvZmlsZS0+Y2hyb21hQml0RGVwdGggICAgICA9IHByb2ZpbGUtPmx1bWFCaXREZXB0aDsKLQot ICAgIHByb2ZpbGVfbGlzdC0+c1R5cGUgICAgICAgID0gVktfU1RSVUNUVVJFX1RZUEVfVklERU9f UFJPRklMRV9MSVNUX0lORk9fS0hSOwotICAgIHByb2ZpbGVfbGlzdC0+cHJvZmlsZUNvdW50ID0g MTsKLSAgICBwcm9maWxlX2xpc3QtPnBQcm9maWxlcyAgICA9IHByb2ZpbGU7Ci0KLSAgICAvKiBH ZXQgdGhlIGNhcGFiaWxpdGllcyBvZiB0aGUgZGVjb2RlciBmb3IgdGhlIGdpdmVuIHByb2ZpbGUg Ki8KLSAgICBjYXBzLT5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX1ZJREVPX0NBUEFCSUxJVElF U19LSFI7Ci0gICAgY2Fwcy0+cE5leHQgPSBkZWNfY2FwczsKLSAgICBkZWNfY2Fwcy0+c1R5cGUg PSBWS19TVFJVQ1RVUkVfVFlQRV9WSURFT19ERUNPREVfQ0FQQUJJTElUSUVTX0tIUjsKLSAgICAv KiBkZWNfY2Fwcy0+cE5leHQgYWxyZWFkeSBmaWxsZWQgaW4gKi8KLQotICAgIHJldHVybiB2ay0+ R2V0UGh5c2ljYWxEZXZpY2VWaWRlb0NhcGFiaWxpdGllc0tIUihod2N0eC0+cGh5c19kZXYsIHBy b2ZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNhcHMpOwotfQotCi1zdGF0aWMgaW50IHZ1bGthbl9kZWNvZGVfZ2V0X3Byb2ZpbGUoQVZD b2RlY0NvbnRleHQgKmF2Y3R4LCBBVkJ1ZmZlclJlZiAqZnJhbWVzX3JlZiwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIEFWUGl4ZWxGb3JtYXQgKnBpeF9mbXQsIFZr Rm9ybWF0ICp2a19mbXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkZW dWxrYW5EZWNvZGVQcm9maWxlRGF0YSAqcHJvZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpbnQgKmRwYl9kZWRpY2F0ZSkKLXsKLSAgICBWa1Jlc3VsdCByZXQ7Ci0gICAg aW50IG1heF9sZXZlbCwgYmFzZV9wcm9maWxlLCBjdXJfcHJvZmlsZTsKLSAgICBjb25zdCBGRlZ1 bGthbkRlY29kZURlc2NyaXB0b3IgKnZrX2Rlc2MgPSBnZXRfY29kZWNkZXNjKGF2Y3R4LT5jb2Rl Y19pZCk7Ci0gICAgQVZIV0ZyYW1lc0NvbnRleHQgKmZyYW1lcyA9IChBVkhXRnJhbWVzQ29udGV4 dCAqKWZyYW1lc19yZWYtPmRhdGE7Ci0gICAgQVZIV0RldmljZUNvbnRleHQgKmRldmljZSA9IChB VkhXRGV2aWNlQ29udGV4dCAqKWZyYW1lcy0+ZGV2aWNlX3JlZi0+ZGF0YTsKLSAgICBBVlZ1bGth bkRldmljZUNvbnRleHQgKmh3Y3R4ID0gZGV2aWNlLT5od2N0eDsKLSAgICBlbnVtIEFWUGl4ZWxG b3JtYXQgc291cmNlX2Zvcm1hdDsKLSAgICBlbnVtIEFWUGl4ZWxGb3JtYXQgYmVzdF9mb3JtYXQ7 Ci0gICAgVmtGb3JtYXQgYmVzdF92a2ZtdDsKLQotICAgIEZGVnVsa2FuRGVjb2RlQ29udGV4dCAq ZGVjID0gYXZjdHgtPmludGVybmFsLT5od2FjY2VsX3ByaXZfZGF0YTsKLSAgICBGRlZ1bGthbkRl Y29kZVNoYXJlZCAqY3R4ID0gZGVjLT5zaGFyZWRfY3R4OwotICAgIEZGVnVsa2FuRnVuY3Rpb25z ICp2ayA9ICZjdHgtPnMudmtmbjsKLQotICAgIFZrVmlkZW9DYXBhYmlsaXRpZXNLSFIgKmNhcHMg PSAmY3R4LT5jYXBzOwotICAgIFZrVmlkZW9EZWNvZGVDYXBhYmlsaXRpZXNLSFIgKmRlY19jYXBz ID0gJmN0eC0+ZGVjX2NhcHM7Ci0KLSAgICBWa1ZpZGVvRGVjb2RlSDI2NENhcGFiaWxpdGllc0tI UiBoMjY0X2NhcHMgPSB7Ci0gICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX1ZJREVP X0RFQ09ERV9IMjY0X0NBUEFCSUxJVElFU19LSFIsCi0gICAgfTsKLSAgICBWa1ZpZGVvRGVjb2Rl SDI2NUNhcGFiaWxpdGllc0tIUiBoMjY1X2NhcHMgPSB7Ci0gICAgICAgIC5zVHlwZSA9IFZLX1NU UlVDVFVSRV9UWVBFX1ZJREVPX0RFQ09ERV9IMjY1X0NBUEFCSUxJVElFU19LSFIsCi0gICAgfTsK LSNpZiBDT05GSUdfVlA5X1ZVTEtBTl9IV0FDQ0VMCi0gICAgVmtWaWRlb0RlY29kZVZQOUNhcGFi aWxpdGllc0tIUiB2cDlfY2FwcyA9IHsKLSAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZ UEVfVklERU9fREVDT0RFX1ZQOV9DQVBBQklMSVRJRVNfS0hSLAotICAgIH07Ci0jZW5kaWYKLSAg ICBWa1ZpZGVvRGVjb2RlQVYxQ2FwYWJpbGl0aWVzS0hSIGF2MV9jYXBzID0gewotICAgICAgICAu c1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9WSURFT19ERUNPREVfQVYxX0NBUEFCSUxJVElFU19L SFIsCi0gICAgfTsKLQotICAgIFZrUGh5c2ljYWxEZXZpY2VWaWRlb0Zvcm1hdEluZm9LSFIgZm10 X2luZm8gPSB7Ci0gICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX1BIWVNJQ0FMX0RF VklDRV9WSURFT19GT1JNQVRfSU5GT19LSFIsCi0gICAgICAgIC5wTmV4dCA9ICZwcm9mLT5wcm9m aWxlX2xpc3QsCi0gICAgfTsKLSAgICBWa1ZpZGVvRm9ybWF0UHJvcGVydGllc0tIUiAqcmV0X2lu Zm87Ci0gICAgdWludDMyX3QgbmJfb3V0X2ZtdHMgPSAwOwotCi0gICAgaWYgKCEodmtfZGVzYy0+ ZGVjb2RlX2V4dGVuc2lvbiAmIGN0eC0+cy5leHRlbnNpb25zKSkgewotICAgICAgICBhdl9sb2co YXZjdHgsIEFWX0xPR19FUlJPUiwgIkRldmljZSBkb2VzIG5vdCBzdXBwb3J0IGRlY29kaW5nICVz IVxuIiwKLSAgICAgICAgICAgICAgIGF2Y29kZWNfZ2V0X25hbWUoYXZjdHgtPmNvZGVjX2lkKSk7 Ci0gICAgICAgIHJldHVybiBBVkVSUk9SKEVOT1NZUyk7Ci0gICAgfQotCi0gICAgY3VyX3Byb2Zp bGUgPSBhdmN0eC0+cHJvZmlsZTsKLSAgICBiYXNlX3Byb2ZpbGUgPSBhdmN0eC0+Y29kZWNfaWQg PT0gQVZfQ09ERUNfSURfSDI2NCA/IEFWX1BST0ZJTEVfSDI2NF9DT05TVFJBSU5FRF9CQVNFTElO RSA6Ci0gICAgICAgICAgICAgICAgICAgYXZjdHgtPmNvZGVjX2lkID09IEFWX0NPREVDX0lEX0gy NjUgPyBBVl9QUk9GSUxFX0hFVkNfTUFJTiA6Ci0jaWYgQ09ORklHX1ZQOV9WVUxLQU5fSFdBQ0NF TAotICAgICAgICAgICAgICAgICAgIGF2Y3R4LT5jb2RlY19pZCA9PSBBVl9DT0RFQ19JRF9WUDkg ID8gU1REX1ZJREVPX1ZQOV9QUk9GSUxFXzAgOgotI2VuZGlmCi0gICAgICAgICAgICAgICAgICAg YXZjdHgtPmNvZGVjX2lkID09IEFWX0NPREVDX0lEX0FWMSAgPyBTVERfVklERU9fQVYxX1BST0ZJ TEVfTUFJTiA6Ci0gICAgICAgICAgICAgICAgICAgMDsKLQotICAgIHJldCA9IHZ1bGthbl9zZXR1 cF9wcm9maWxlKGF2Y3R4LCBwcm9mLCBod2N0eCwgdmssIHZrX2Rlc2MsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJmgyNjRfY2FwcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAmaDI2NV9jYXBzLAotI2lmIENPTkZJR19WUDlfVlVMS0FOX0hXQUNDRUwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAmdnA5X2NhcHMsCi0jZW5kaWYKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAmYXYxX2NhcHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY2FwcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNfY2FwcywKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJfcHJvZmlsZSk7Ci0gICAgaWYgKHJldCA9PSBW S19FUlJPUl9WSURFT19QUk9GSUxFX09QRVJBVElPTl9OT1RfU1VQUE9SVEVEX0tIUiAmJgotICAg ICAgICBhdmN0eC0+ZmxhZ3MgJiBBVl9IV0FDQ0VMX0ZMQUdfQUxMT1dfUFJPRklMRV9NSVNNQVRD SCAmJgotICAgICAgICBhdmN0eC0+cHJvZmlsZSAhPSBiYXNlX3Byb2ZpbGUpIHsKLSAgICAgICAg YXZfbG9nKGF2Y3R4LCBBVl9MT0dfVkVSQk9TRSwgIiVzIHByb2ZpbGUgJXMgbm90IHN1cHBvcnRl ZCwgYXR0ZW1wdGluZyAiCi0gICAgICAgICAgICAgICAiYWdhaW4gd2l0aCBwcm9maWxlICVzXG4i LAotICAgICAgICAgICAgICAgYXZjb2RlY19nZXRfbmFtZShhdmN0eC0+Y29kZWNfaWQpLAotICAg ICAgICAgICAgICAgYXZjb2RlY19wcm9maWxlX25hbWUoYXZjdHgtPmNvZGVjX2lkLCBjdXJfcHJv ZmlsZSksCi0gICAgICAgICAgICAgICBhdmNvZGVjX3Byb2ZpbGVfbmFtZShhdmN0eC0+Y29kZWNf aWQsIGJhc2VfcHJvZmlsZSkpOwotICAgICAgICBjdXJfcHJvZmlsZSA9IGJhc2VfcHJvZmlsZTsK LSAgICAgICAgcmV0ID0gdnVsa2FuX3NldHVwX3Byb2ZpbGUoYXZjdHgsIHByb2YsIGh3Y3R4LCB2 aywgdmtfZGVzYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmgyNjRfY2Fw cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmgyNjVfY2FwcywKLSNpZiBD T05GSUdfVlA5X1ZVTEtBTl9IV0FDQ0VMCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICZ2cDlfY2FwcywKLSNlbmRpZgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAmYXYxX2NhcHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcHMsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY19jYXBzLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjdXJfcHJvZmlsZSk7Ci0gICAgfQotCi0gICAgaWYgKHJl dCA9PSBWS19FUlJPUl9WSURFT19QUk9GSUxFX09QRVJBVElPTl9OT1RfU1VQUE9SVEVEX0tIUikg ewotICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19WRVJCT1NFLCAiVW5hYmxlIHRvIGluaXRp YWxpemUgdmlkZW8gc2Vzc2lvbjogIgotICAgICAgICAgICAgICAgIiVzIHByb2ZpbGUgXCIlc1wi IG5vdCBzdXBwb3J0ZWQhXG4iLAotICAgICAgICAgICAgICAgYXZjb2RlY19nZXRfbmFtZShhdmN0 eC0+Y29kZWNfaWQpLAotICAgICAgICAgICAgICAgYXZjb2RlY19wcm9maWxlX25hbWUoYXZjdHgt PmNvZGVjX2lkLCBjdXJfcHJvZmlsZSkpOwotICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwp OwotICAgIH0gZWxzZSBpZiAocmV0ID09IFZLX0VSUk9SX1ZJREVPX1BST0ZJTEVfRk9STUFUX05P VF9TVVBQT1JURURfS0hSKSB7Ci0gICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX1ZFUkJPU0Us ICJVbmFibGUgdG8gaW5pdGlhbGl6ZSB2aWRlbyBzZXNzaW9uOiAiCi0gICAgICAgICAgICAgICAi Zm9ybWF0ICglcykgbm90IHN1cHBvcnRlZCFcbiIsCi0gICAgICAgICAgICAgICBhdl9nZXRfcGl4 X2ZtdF9uYW1lKGF2Y3R4LT5zd19waXhfZm10KSk7Ci0gICAgICAgIHJldHVybiBBVkVSUk9SKEVJ TlZBTCk7Ci0gICAgfSBlbHNlIGlmIChyZXQgPT0gVktfRVJST1JfRkVBVFVSRV9OT1RfUFJFU0VO VCB8fAotICAgICAgICAgICAgICAgcmV0ID09IFZLX0VSUk9SX0ZPUk1BVF9OT1RfU1VQUE9SVEVE KSB7Ci0gICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7Ci0gICAgfSBlbHNlIGlmIChyZXQg IT0gVktfU1VDQ0VTUykgewotICAgICAgICByZXR1cm4gQVZFUlJPUl9FWFRFUk5BTDsKLSAgICB9 Ci0KLSAgICBtYXhfbGV2ZWwgPSBhdmN0eC0+Y29kZWNfaWQgPT0gQVZfQ09ERUNfSURfSDI2NCA/ IGZmX3ZrX2gyNjRfbGV2ZWxfdG9fYXYoaDI2NF9jYXBzLm1heExldmVsSWRjKSA6Ci0gICAgICAg ICAgICAgICAgYXZjdHgtPmNvZGVjX2lkID09IEFWX0NPREVDX0lEX0gyNjUgPyBmZl92a19oMjY1 X2xldmVsX3RvX2F2KGgyNjVfY2Fwcy5tYXhMZXZlbElkYykgOgotI2lmIENPTkZJR19WUDlfVlVM S0FOX0hXQUNDRUwKLSAgICAgICAgICAgICAgICBhdmN0eC0+Y29kZWNfaWQgPT0gQVZfQ09ERUNf SURfVlA5ICA/IHZwOV9jYXBzLm1heExldmVsIDoKLSNlbmRpZgotICAgICAgICAgICAgICAgIGF2 Y3R4LT5jb2RlY19pZCA9PSBBVl9DT0RFQ19JRF9BVjEgID8gYXYxX2NhcHMubWF4TGV2ZWwgOgot ICAgICAgICAgICAgICAgIDA7Ci0KLSAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19WRVJCT1NFLCAi RGVjb2RlciBjYXBhYmlsaXRpZXMgZm9yICVzIHByb2ZpbGUgXCIlc1wiOlxuIiwKLSAgICAgICAg ICAgYXZjb2RlY19nZXRfbmFtZShhdmN0eC0+Y29kZWNfaWQpLAotICAgICAgICAgICBhdmNvZGVj X3Byb2ZpbGVfbmFtZShhdmN0eC0+Y29kZWNfaWQsIGN1cl9wcm9maWxlKSk7Ci0gICAgYXZfbG9n KGF2Y3R4LCBBVl9MT0dfVkVSQk9TRSwgIiAgICBNYXhpbXVtIGxldmVsOiAlaSAoc3RyZWFtICVp KVxuIiwKLSAgICAgICAgICAgbWF4X2xldmVsLCBhdmN0eC0+bGV2ZWwpOwotICAgIGF2X2xvZyhh dmN0eCwgQVZfTE9HX1ZFUkJPU0UsICIgICAgV2lkdGg6IGZyb20gJWkgdG8gJWlcbiIsCi0gICAg ICAgICAgIGNhcHMtPm1pbkNvZGVkRXh0ZW50LndpZHRoLCBjYXBzLT5tYXhDb2RlZEV4dGVudC53 aWR0aCk7Ci0gICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfVkVSQk9TRSwgIiAgICBIZWlnaHQ6IGZy b20gJWkgdG8gJWlcbiIsCi0gICAgICAgICAgIGNhcHMtPm1pbkNvZGVkRXh0ZW50LmhlaWdodCwg Y2Fwcy0+bWF4Q29kZWRFeHRlbnQuaGVpZ2h0KTsKLSAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19W RVJCT1NFLCAiICAgIFdpZHRoIGFsaWdubWVudDogJWlcbiIsCi0gICAgICAgICAgIGNhcHMtPnBp Y3R1cmVBY2Nlc3NHcmFudWxhcml0eS53aWR0aCk7Ci0gICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0df VkVSQk9TRSwgIiAgICBIZWlnaHQgYWxpZ25tZW50OiAlaVxuIiwKLSAgICAgICAgICAgY2Fwcy0+ cGljdHVyZUFjY2Vzc0dyYW51bGFyaXR5LmhlaWdodCk7Ci0gICAgYXZfbG9nKGF2Y3R4LCBBVl9M T0dfVkVSQk9TRSwgIiAgICBCaXRzdHJlYW0gb2Zmc2V0IGFsaWdubWVudDogJSJQUkl1NjQiXG4i LAotICAgICAgICAgICBjYXBzLT5taW5CaXRzdHJlYW1CdWZmZXJPZmZzZXRBbGlnbm1lbnQpOwot ICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX1ZFUkJPU0UsICIgICAgQml0c3RyZWFtIHNpemUgYWxp Z25tZW50OiAlIlBSSXU2NCJcbiIsCi0gICAgICAgICAgIGNhcHMtPm1pbkJpdHN0cmVhbUJ1ZmZl clNpemVBbGlnbm1lbnQpOwotICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX1ZFUkJPU0UsICIgICAg TWF4aW11bSByZWZlcmVuY2VzOiAldVxuIiwKLSAgICAgICAgICAgY2Fwcy0+bWF4RHBiU2xvdHMp OwotICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX1ZFUkJPU0UsICIgICAgTWF4aW11bSBhY3RpdmUg cmVmZXJlbmNlczogJXVcbiIsCi0gICAgICAgICAgIGNhcHMtPm1heEFjdGl2ZVJlZmVyZW5jZVBp Y3R1cmVzKTsKLSAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19WRVJCT1NFLCAiICAgIENvZGVjIGhl YWRlciBuYW1lOiAnJXMnIChkcml2ZXIpLCAnJXMnIChjb21waWxlZClcbiIsCi0gICAgICAgICAg IGNhcHMtPnN0ZEhlYWRlclZlcnNpb24uZXh0ZW5zaW9uTmFtZSwKLSAgICAgICAgICAgdmtfZGVz Yy0+ZXh0X3Byb3BzLmV4dGVuc2lvbk5hbWUpOwotICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX1ZF UkJPU0UsICIgICAgQ29kZWMgaGVhZGVyIHZlcnNpb246ICVpLiVpLiVpIChkcml2ZXIpLCAlaS4l aS4laSAoY29tcGlsZWQpXG4iLAotICAgICAgICAgICBDT0RFQ19WRVIoY2Fwcy0+c3RkSGVhZGVy VmVyc2lvbi5zcGVjVmVyc2lvbiksCi0gICAgICAgICAgIENPREVDX1ZFUih2a19kZXNjLT5leHRf cHJvcHMuc3BlY1ZlcnNpb24pKTsKLSAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19WRVJCT1NFLCAi ICAgIERlY29kZSBtb2RlczolcyVzJXNcbiIsCi0gICAgICAgICAgIGRlY19jYXBzLT5mbGFncyA/ ICIiIDoKLSAgICAgICAgICAgICAgICIgaW52YWxpZCIsCi0gICAgICAgICAgIGRlY19jYXBzLT5m bGFncyAmIFZLX1ZJREVPX0RFQ09ERV9DQVBBQklMSVRZX0RQQl9BTkRfT1VUUFVUX0NPSU5DSURF X0JJVF9LSFIgPwotICAgICAgICAgICAgICAgIiByZXVzZV9kc3RfZHBiIiA6ICIiLAotICAgICAg ICAgICBkZWNfY2Fwcy0+ZmxhZ3MgJiBWS19WSURFT19ERUNPREVfQ0FQQUJJTElUWV9EUEJfQU5E X09VVFBVVF9ESVNUSU5DVF9CSVRfS0hSID8KLSAgICAgICAgICAgICAgICIgZGVkaWNhdGVkX2Rw YiIgOiAiIik7Ci0gICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfVkVSQk9TRSwgIiAgICBDYXBhYmls aXR5IGZsYWdzOiVzJXMlc1xuIiwKLSAgICAgICAgICAgY2Fwcy0+ZmxhZ3MgPyAiIiA6Ci0gICAg ICAgICAgICAgICAiIG5vbmUiLAotICAgICAgICAgICBjYXBzLT5mbGFncyAmIFZLX1ZJREVPX0NB UEFCSUxJVFlfUFJPVEVDVEVEX0NPTlRFTlRfQklUX0tIUiA/Ci0gICAgICAgICAgICAgICAiIHBy b3RlY3RlZCIgOiAiIiwKLSAgICAgICAgICAgY2Fwcy0+ZmxhZ3MgJiBWS19WSURFT19DQVBBQklM SVRZX1NFUEFSQVRFX1JFRkVSRU5DRV9JTUFHRVNfQklUX0tIUiA/Ci0gICAgICAgICAgICAgICAi IHNlcGFyYXRlX3JlZmVyZW5jZXMiIDogIiIpOwotCi0gICAgLyogQ2hlY2sgaWYgZGVjb2Rpbmcg aXMgcG9zc2libGUgd2l0aCB0aGUgZ2l2ZW4gcGFyYW1ldGVycyAqLwotICAgIGlmIChhdmN0eC0+ Y29kZWRfd2lkdGggIDwgY2Fwcy0+bWluQ29kZWRFeHRlbnQud2lkdGggICB8fAotICAgICAgICBh dmN0eC0+Y29kZWRfaGVpZ2h0IDwgY2Fwcy0+bWluQ29kZWRFeHRlbnQuaGVpZ2h0ICB8fAotICAg ICAgICBhdmN0eC0+Y29kZWRfd2lkdGggID4gY2Fwcy0+bWF4Q29kZWRFeHRlbnQud2lkdGggICB8 fAotICAgICAgICBhdmN0eC0+Y29kZWRfaGVpZ2h0ID4gY2Fwcy0+bWF4Q29kZWRFeHRlbnQuaGVp Z2h0KQotICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOwotCi0gICAgaWYgKCEoYXZjdHgt Pmh3YWNjZWxfZmxhZ3MgJiBBVl9IV0FDQ0VMX0ZMQUdfSUdOT1JFX0xFVkVMKSAmJgotICAgICAg ICBhdmN0eC0+bGV2ZWwgPiBtYXhfbGV2ZWwpCi0gICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZB TCk7Ci0KLSAgICAvKiBTb21lIGJhc2ljIHNhbml0eSBjaGVja2luZyAqLwotICAgIGlmICghKGRl Y19jYXBzLT5mbGFncyAmIChWS19WSURFT19ERUNPREVfQ0FQQUJJTElUWV9EUEJfQU5EX09VVFBV VF9DT0lOQ0lERV9CSVRfS0hSIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfVklE RU9fREVDT0RFX0NBUEFCSUxJVFlfRFBCX0FORF9PVVRQVVRfRElTVElOQ1RfQklUX0tIUikpKSB7 Ci0gICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiQnVnZ3kgZHJpdmVyIHNpZ25h bHMgaW52YWxpZCBkZWNvZGluZyBtb2RlOiBuZWl0aGVyICIKLSAgICAgICAgICAgICAgICJWS19W SURFT19ERUNPREVfQ0FQQUJJTElUWV9EUEJfQU5EX09VVFBVVF9DT0lOQ0lERV9CSVRfS0hSIG5v ciAiCi0gICAgICAgICAgICAgICAiVktfVklERU9fREVDT0RFX0NBUEFCSUxJVFlfRFBCX0FORF9P VVRQVVRfRElTVElOQ1RfQklUX0tIUiBhcmUgc2V0IVxuIik7Ci0gICAgICAgIHJldHVybiBBVkVS Uk9SX0VYVEVSTkFMOwotICAgIH0gZWxzZSBpZiAoKGRlY19jYXBzLT5mbGFncyAmIChWS19WSURF T19ERUNPREVfQ0FQQUJJTElUWV9EUEJfQU5EX09VVFBVVF9DT0lOQ0lERV9CSVRfS0hSIHwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfVklERU9fREVDT0RFX0NBUEFCSUxJ VFlfRFBCX0FORF9PVVRQVVRfRElTVElOQ1RfQklUX0tIUikgPT0KLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgVktfVklERU9fREVDT0RFX0NBUEFCSUxJVFlfRFBCX0FORF9PVVRQ VVRfQ09JTkNJREVfQklUX0tIUikgJiYKLSAgICAgICAgICAgICAgICEoY2Fwcy0+ZmxhZ3MgJiBW S19WSURFT19DQVBBQklMSVRZX1NFUEFSQVRFX1JFRkVSRU5DRV9JTUFHRVNfQklUX0tIUikpIHsK LSAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJDYW5ub3QgaW5pdGlhbGl6ZSBW dWxrYW4gZGVjb2Rpbmcgc2Vzc2lvbiwgYnVnZ3kgZHJpdmVyOiAiCi0gICAgICAgICAgICAgICAi VktfVklERU9fREVDT0RFX0NBUEFCSUxJVFlfRFBCX0FORF9PVVRQVVRfQ09JTkNJREVfQklUX0tI UiBzZXQgIgotICAgICAgICAgICAgICAgImJ1dCBWS19WSURFT19DQVBBQklMSVRZX1NFUEFSQVRF X1JFRkVSRU5DRV9JTUFHRVNfQklUX0tIUiBpcyB1bnNldCFcbiIpOwotICAgICAgICByZXR1cm4g QVZFUlJPUl9FWFRFUk5BTDsKLSAgICB9Ci0KLSAgICBkZWMtPmRlZGljYXRlZF9kcGIgPSAhKGRl Y19jYXBzLT5mbGFncyAmIFZLX1ZJREVPX0RFQ09ERV9DQVBBQklMSVRZX0RQQl9BTkRfT1VUUFVU X0NPSU5DSURFX0JJVF9LSFIpOwotICAgIGN0eC0+Y29tbW9uLmxheWVyZWRfZHBiID0gIWRlYy0+ ZGVkaWNhdGVkX2RwYiA/IDAgOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIShjYXBz LT5mbGFncyAmIFZLX1ZJREVPX0NBUEFCSUxJVFlfU0VQQVJBVEVfUkVGRVJFTkNFX0lNQUdFU19C SVRfS0hSKTsKLQotICAgIGlmIChkZWMtPmRlZGljYXRlZF9kcGIpIHsKLSAgICAgICAgZm10X2lu Zm8uaW1hZ2VVc2FnZSA9IFZLX0lNQUdFX1VTQUdFX1ZJREVPX0RFQ09ERV9EUEJfQklUX0tIUjsK LSAgICB9IGVsc2UgewotICAgICAgICBmbXRfaW5mby5pbWFnZVVzYWdlID0gVktfSU1BR0VfVVNB R0VfVklERU9fREVDT0RFX0RQQl9CSVRfS0hSIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFZLX0lNQUdFX1VTQUdFX1ZJREVPX0RFQ09ERV9EU1RfQklUX0tIUiB8Ci0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBWS19JTUFHRV9VU0FHRV9UUkFOU0ZFUl9TUkNfQklUICAgICAg ICAgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfSU1BR0VfVVNBR0VfU0FNUExF RF9CSVQ7Ci0KLSAgICAgICAgaWYgKGN0eC0+cy5leHRlbnNpb25zICYgKEZGX1ZLX0VYVF9WSURF T19FTkNPREVfUVVFVUUgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkZfVktf RVhUX1ZJREVPX01BSU5URU5BTkNFXzEpKQotICAgICAgICAgICAgZm10X2luZm8uaW1hZ2VVc2Fn ZSB8PSBWS19JTUFHRV9VU0FHRV9WSURFT19FTkNPREVfU1JDX0JJVF9LSFI7Ci0gICAgfQotCi0g ICAgLyogR2V0IHRoZSBmb3JtYXQgb2YgdGhlIGltYWdlcyBuZWNlc3NhcnkgKi8KLSAgICByZXQg PSB2ay0+R2V0UGh5c2ljYWxEZXZpY2VWaWRlb0Zvcm1hdFByb3BlcnRpZXNLSFIoaHdjdHgtPnBo eXNfZGV2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAmZm10X2luZm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICZuYl9vdXRfZm10cywgTlVMTCk7Ci0gICAgaWYgKHJldCA9PSBW S19FUlJPUl9GT1JNQVRfTk9UX1NVUFBPUlRFRCB8fAotICAgICAgICAoIW5iX291dF9mbXRzICYm IHJldCA9PSBWS19TVUNDRVNTKSkgewotICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOwot ICAgIH0gZWxzZSBpZiAocmV0ICE9IFZLX1NVQ0NFU1MpIHsKLSAgICAgICAgYXZfbG9nKGF2Y3R4 LCBBVl9MT0dfRVJST1IsICJVbmFibGUgdG8gZ2V0IFZ1bGthbiBmb3JtYXQgcHJvcGVydGllczog JXMhXG4iLAotICAgICAgICAgICAgICAgZmZfdmtfcmV0MnN0cihyZXQpKTsKLSAgICAgICAgcmV0 dXJuIEFWRVJST1JfRVhURVJOQUw7Ci0gICAgfQotCi0gICAgcmV0X2luZm8gPSBhdl9tYWxsb2N6 KHNpemVvZigqcmV0X2luZm8pKm5iX291dF9mbXRzKTsKLSAgICBpZiAoIXJldF9pbmZvKQotICAg ICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBu Yl9vdXRfZm10czsgaSsrKQotICAgICAgICByZXRfaW5mb1tpXS5zVHlwZSA9IFZLX1NUUlVDVFVS RV9UWVBFX1ZJREVPX0ZPUk1BVF9QUk9QRVJUSUVTX0tIUjsKLQotICAgIHJldCA9IHZrLT5HZXRQ aHlzaWNhbERldmljZVZpZGVvRm9ybWF0UHJvcGVydGllc0tIUihod2N0eC0+cGh5c19kZXYsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZm bXRfaW5mbywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJm5iX291dF9mbXRzLCByZXRfaW5mbyk7Ci0gICAgaWYgKHJldCA9PSBWS19FUlJP Ul9GT1JNQVRfTk9UX1NVUFBPUlRFRCB8fAotICAgICAgICAoIW5iX291dF9mbXRzICYmIHJldCA9 PSBWS19TVUNDRVNTKSkgewotICAgICAgICBhdl9mcmVlKHJldF9pbmZvKTsKLSAgICAgICAgcmV0 dXJuIEFWRVJST1IoRUlOVkFMKTsKLSAgICB9IGVsc2UgaWYgKHJldCAhPSBWS19TVUNDRVNTKSB7 Ci0gICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiVW5hYmxlIHRvIGdldCBWdWxr YW4gZm9ybWF0IHByb3BlcnRpZXM6ICVzIVxuIiwKLSAgICAgICAgICAgICAgIGZmX3ZrX3JldDJz dHIocmV0KSk7Ci0gICAgICAgIGF2X2ZyZWUocmV0X2luZm8pOwotICAgICAgICByZXR1cm4gQVZF UlJPUl9FWFRFUk5BTDsKLSAgICB9Ci0KLSAgICAvKiBGaW5kIGEgZm9ybWF0IHRvIHVzZSAqLwot ICAgICpwaXhfZm10ID0gYmVzdF9mb3JtYXQgPSBBVl9QSVhfRk1UX05PTkU7Ci0gICAgKnZrX2Zt dCAgPSBiZXN0X3ZrZm10ID0gVktfRk9STUFUX1VOREVGSU5FRDsKLSAgICBzb3VyY2VfZm9ybWF0 ID0gYXZjdHgtPnN3X3BpeF9mbXQ7Ci0KLSAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19ERUJVRywg IkNob29zaW5nIGJlc3QgcGl4ZWwgZm9ybWF0IGZvciBkZWNvZGluZyBmcm9tICVpOlxuIiwgbmJf b3V0X2ZtdHMpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmJfb3V0X2ZtdHM7IGkrKykgewot ICAgICAgICBlbnVtIEFWUGl4ZWxGb3JtYXQgdG1wID0gZmZfdmtfcGl4X2ZtdF9mcm9tX3ZrZm10 KHJldF9pbmZvW2ldLmZvcm1hdCk7Ci0gICAgICAgIGlmICh0bXAgPT0gQVZfUElYX0ZNVF9OT05F KSB7Ci0gICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19XQVJOSU5HLCAiSW52YWxpZC91 bmtub3duIFZ1bGthbiBmb3JtYXQgJWkhXG4iLCByZXRfaW5mb1tpXS5mb3JtYXQpOwotICAgICAg ICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBiZXN0X2Zvcm1hdCA9IGF2X2Zp bmRfYmVzdF9waXhfZm10X29mXzIodG1wLCBiZXN0X2Zvcm1hdCwgc291cmNlX2Zvcm1hdCwgMCwg TlVMTCk7Ci0gICAgICAgIGlmICh0bXAgPT0gYmVzdF9mb3JtYXQpCi0gICAgICAgICAgICBiZXN0 X3ZrZm10ID0gcmV0X2luZm9baV0uZm9ybWF0OwotCi0gICAgICAgIGF2X2xvZyhhdmN0eCwgQVZf TE9HX0RFQlVHLCAiICAgICVzJXMgKFZ1bGthbiBJRDogJWkpXG4iLAotICAgICAgICAgICAgICAg YXZfZ2V0X3BpeF9mbXRfbmFtZSh0bXApLCB0bXAgPT0gYmVzdF9mb3JtYXQgPyAiKiIgOiAiIiwK LSAgICAgICAgICAgICAgIHJldF9pbmZvW2ldLmZvcm1hdCk7Ci0gICAgfQotCi0gICAgYXZfZnJl ZShyZXRfaW5mbyk7Ci0KLSAgICBpZiAoYmVzdF9mb3JtYXQgPT0gQVZfUElYX0ZNVF9OT05FKSB7 Ci0gICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiTm8gdmFsaWQvY29tcGF0aWJs ZSBwaXhlbCBmb3JtYXQgZm91bmQgZm9yIGRlY29kaW5nIVxuIik7Ci0gICAgICAgIHJldHVybiBB VkVSUk9SKEVJTlZBTCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9M T0dfVkVSQk9TRSwgIkNob3NlbiBmcmFtZSBwaXhmbXQ6ICVzIChWdWxrYW4gSUQ6ICVpKVxuIiwK LSAgICAgICAgICAgICAgIGF2X2dldF9waXhfZm10X25hbWUoYmVzdF9mb3JtYXQpLCBiZXN0X3Zr Zm10KTsKLSAgICB9Ci0KLSAgICAqcGl4X2ZtdCA9IGJlc3RfZm9ybWF0OwotICAgICp2a19mbXQg PSBiZXN0X3ZrZm10OwotCi0gICAgKmRwYl9kZWRpY2F0ZSA9IGRlYy0+ZGVkaWNhdGVkX2RwYjsK LQotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBmcmVlX3Byb2ZpbGVfZGF0YShBVkhX RnJhbWVzQ29udGV4dCAqaHdmYykKLXsKLSAgICBhdl9mcmVlKGh3ZmMtPnVzZXJfb3BhcXVlKTsK LX0KLQotaW50IGZmX3ZrX2ZyYW1lX3BhcmFtcyhBVkNvZGVjQ29udGV4dCAqYXZjdHgsIEFWQnVm ZmVyUmVmICpod19mcmFtZXNfY3R4KQotewotICAgIFZrRm9ybWF0IHZrZm10ID0gVktfRk9STUFU X1VOREVGSU5FRDsKLSAgICBpbnQgZXJyLCBkZWRpY2F0ZWRfZHBiOwotICAgIEFWSFdGcmFtZXND b250ZXh0ICpmcmFtZXNfY3R4ID0gKEFWSFdGcmFtZXNDb250ZXh0Kilod19mcmFtZXNfY3R4LT5k YXRhOwotICAgIEFWVnVsa2FuRnJhbWVzQ29udGV4dCAqaHdmYyA9IGZyYW1lc19jdHgtPmh3Y3R4 OwotICAgIEZGVnVsa2FuRGVjb2RlQ29udGV4dCAqZGVjID0gYXZjdHgtPmludGVybmFsLT5od2Fj Y2VsX3ByaXZfZGF0YTsKLSAgICBGRlZ1bGthbkRlY29kZVByb2ZpbGVEYXRhICpwcm9mID0gTlVM TDsKLQotICAgIGVyciA9IHZ1bGthbl9kZWNvZGVfYm9vdHN0cmFwKGF2Y3R4LCBod19mcmFtZXNf Y3R4KTsKLSAgICBpZiAoZXJyIDwgMCkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIGZyYW1l c19jdHgtPnN3X2Zvcm1hdCA9IGF2Y3R4LT5zd19waXhfZm10OwotCi0gICAgaWYgKCFERUNPREVS X0lTX1NEUihhdmN0eC0+Y29kZWNfaWQpKSB7Ci0gICAgICAgIHByb2YgPSBhdl9tYWxsb2N6KHNp emVvZihGRlZ1bGthbkRlY29kZVByb2ZpbGVEYXRhKSk7Ci0gICAgICAgIGlmICghcHJvZikKLSAg ICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7Ci0KLSAgICAgICAgZXJyID0gdnVsa2Fu X2RlY29kZV9nZXRfcHJvZmlsZShhdmN0eCwgaHdfZnJhbWVzX2N0eCwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAmZnJhbWVzX2N0eC0+c3dfZm9ybWF0LCAmdmtmbXQs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZiwgJmRlZGljYXRl ZF9kcGIpOwotICAgICAgICBpZiAoZXJyIDwgMCkgewotICAgICAgICAgICAgYXZfZnJlZShwcm9m KTsKLSAgICAgICAgICAgIHJldHVybiBlcnI7Ci0gICAgICAgIH0KLQotICAgICAgICBmcmFtZXNf Y3R4LT51c2VyX29wYXF1ZSA9IHByb2Y7Ci0gICAgICAgIGZyYW1lc19jdHgtPmZyZWUgICAgICAg ID0gZnJlZV9wcm9maWxlX2RhdGE7Ci0KLSAgICAgICAgaHdmYy0+Y3JlYXRlX3BuZXh0ID0gJnBy b2YtPnByb2ZpbGVfbGlzdDsKLSAgICB9IGVsc2UgewotICAgICAgICBzd2l0Y2ggKGZyYW1lc19j dHgtPnN3X2Zvcm1hdCkgewotICAgICAgICBjYXNlIEFWX1BJWF9GTVRfR0JSQVAxNjoKLSAgICAg ICAgICAgIC8qIFRoaXMgc2hvdWxkIGJlIG1vcmUgZWZmaWNpZW50IGZvciBkb3dubG9hZGluZyBh bmQgdXNpbmcgKi8KLSAgICAgICAgICAgIGZyYW1lc19jdHgtPnN3X2Zvcm1hdCA9IEFWX1BJWF9G TVRfUkdCQTY0OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQVZfUElYX0ZNVF9H QlJQMTA6Ci0gICAgICAgICAgICAvKiBUaGlzIHNhdmVzIG1lbW9yeSBiYW5kd2lkdGggd2hlbiBk b3dubG9hZGluZyAqLwotICAgICAgICAgICAgZnJhbWVzX2N0eC0+c3dfZm9ybWF0ID0gQVZfUElY X0ZNVF9YMkJHUjEwOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQVZfUElYX0ZN VF9CR1IwOgotICAgICAgICAgICAgLyogbXB2IGhhcyBpc3N1ZXMgd2l0aCBiZ3IwIG1hcHBpbmcs IHNvIGp1c3QgcmVtYXAgaXQgKi8KLSAgICAgICAgICAgIGZyYW1lc19jdHgtPnN3X2Zvcm1hdCA9 IEFWX1BJWF9GTVRfUkdCMDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0Ogot ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBmcmFtZXNfY3R4LT53 aWR0aCAgPSBhdmN0eC0+Y29kZWRfd2lkdGg7Ci0gICAgZnJhbWVzX2N0eC0+aGVpZ2h0ID0gYXZj dHgtPmNvZGVkX2hlaWdodDsKLSAgICBmcmFtZXNfY3R4LT5mb3JtYXQgPSBBVl9QSVhfRk1UX1ZV TEtBTjsKLQotICAgIGh3ZmMtPmZvcm1hdFswXSAgICA9IHZrZm10OwotICAgIGh3ZmMtPnRpbGlu ZyAgICAgICA9IFZLX0lNQUdFX1RJTElOR19PUFRJTUFMOwotICAgIGh3ZmMtPnVzYWdlICAgICAg ICA9IFZLX0lNQUdFX1VTQUdFX1RSQU5TRkVSX1NSQ19CSVQgfAotICAgICAgICAgICAgICAgICAg ICAgICAgIFZLX0lNQUdFX1VTQUdFX1NUT1JBR0VfQklUICAgICAgfAotICAgICAgICAgICAgICAg ICAgICAgICAgIFZLX0lNQUdFX1VTQUdFX1NBTVBMRURfQklUOwotCi0gICAgaWYgKHByb2YpIHsK LSAgICAgICAgRkZWdWxrYW5EZWNvZGVTaGFyZWQgKmN0eDsKLQotICAgICAgICBod2ZjLT51c2Fn ZSB8PSBWS19JTUFHRV9VU0FHRV9WSURFT19ERUNPREVfRFNUX0JJVF9LSFI7Ci0gICAgICAgIGlm ICghZGVjLT5kZWRpY2F0ZWRfZHBiKQotICAgICAgICAgICAgaHdmYy0+dXNhZ2UgfD0gVktfSU1B R0VfVVNBR0VfVklERU9fREVDT0RFX0RQQl9CSVRfS0hSOwotCi0gICAgICAgIGN0eCA9IGRlYy0+ c2hhcmVkX2N0eDsKLSAgICAgICAgaWYgKGN0eC0+cy5leHRlbnNpb25zICYgKEZGX1ZLX0VYVF9W SURFT19FTkNPREVfUVVFVUUgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkZf VktfRVhUX1ZJREVPX01BSU5URU5BTkNFXzEpKQotICAgICAgICAgICAgaHdmYy0+dXNhZ2UgfD0g VktfSU1BR0VfVVNBR0VfVklERU9fRU5DT0RFX1NSQ19CSVRfS0hSOwotICAgIH0KLQotICAgIHJl dHVybiBlcnI7Ci19Ci0KLXN0YXRpYyB2b2lkIHZrX2RlY29kZV9mcmVlX3BhcmFtcyh2b2lkICpv cGFxdWUsIHVpbnQ4X3QgKmRhdGEpCi17Ci0gICAgRkZWdWxrYW5EZWNvZGVTaGFyZWQgKmN0eCA9 IG9wYXF1ZTsKLSAgICBGRlZ1bGthbkZ1bmN0aW9ucyAqdmsgPSAmY3R4LT5zLnZrZm47Ci0gICAg VmtWaWRlb1Nlc3Npb25QYXJhbWV0ZXJzS0hSICpwYXIgPSAoVmtWaWRlb1Nlc3Npb25QYXJhbWV0 ZXJzS0hSICopZGF0YTsKLSAgICB2ay0+RGVzdHJveVZpZGVvU2Vzc2lvblBhcmFtZXRlcnNLSFIo Y3R4LT5zLmh3Y3R4LT5hY3RfZGV2LCAqcGFyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjdHgtPnMuaHdjdHgtPmFsbG9jKTsKLSAgICBhdl9mcmVlKHBhcik7Ci19 Ci0KLWludCBmZl92a19kZWNvZGVfY3JlYXRlX3BhcmFtcyhBVkJ1ZmZlclJlZiAqKnBhcl9yZWYs IHZvaWQgKmxvZ2N0eCwgRkZWdWxrYW5EZWNvZGVTaGFyZWQgKmN0eCwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCBWa1ZpZGVvU2Vzc2lvblBhcmFtZXRlcnNDcmVhdGVJbmZv S0hSICpzZXNzaW9uX3BhcmFtc19jcmVhdGUpCi17Ci0gICAgVmtWaWRlb1Nlc3Npb25QYXJhbWV0 ZXJzS0hSICpwYXIgPSBhdl9tYWxsb2Moc2l6ZW9mKCpwYXIpKTsKLSAgICBjb25zdCBGRlZ1bGth bkZ1bmN0aW9ucyAqdmsgPSAmY3R4LT5zLnZrZm47Ci0gICAgVmtSZXN1bHQgcmV0OwotCi0gICAg aWYgKCFwYXIpCi0gICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7Ci0KLSAgICAvKiBDcmVh dGUgc2Vzc2lvbiBwYXJhbWV0ZXJzICovCi0gICAgcmV0ID0gdmstPkNyZWF0ZVZpZGVvU2Vzc2lv blBhcmFtZXRlcnNLSFIoY3R4LT5zLmh3Y3R4LT5hY3RfZGV2LCBzZXNzaW9uX3BhcmFtc19jcmVh dGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT5z Lmh3Y3R4LT5hbGxvYywgcGFyKTsKLSAgICBpZiAocmV0ICE9IFZLX1NVQ0NFU1MpIHsKLSAgICAg ICAgYXZfbG9nKGxvZ2N0eCwgQVZfTE9HX0VSUk9SLCAiVW5hYmxlIHRvIGNyZWF0ZSBWdWxrYW4g dmlkZW8gc2Vzc2lvbiBwYXJhbWV0ZXJzOiAlcyFcbiIsCi0gICAgICAgICAgICAgICBmZl92a19y ZXQyc3RyKHJldCkpOwotICAgICAgICBhdl9mcmVlKHBhcik7Ci0gICAgICAgIHJldHVybiBBVkVS Uk9SX0VYVEVSTkFMOwotICAgIH0KLSAgICAqcGFyX3JlZiA9IGF2X2J1ZmZlcl9jcmVhdGUoKHVp bnQ4X3QgKilwYXIsIHNpemVvZigqcGFyKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdmtfZGVjb2RlX2ZyZWVfcGFyYW1zLCBjdHgsIDApOwotICAgIGlmICghKnBhcl9yZWYpIHsK LSAgICAgICAgdmtfZGVjb2RlX2ZyZWVfcGFyYW1zKGN0eCwgKHVpbnQ4X3QgKilwYXIpOwotICAg ICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOwotICAgIH0KLQotICAgIHJldHVybiAwOwotfQot Ci1pbnQgZmZfdmtfZGVjb2RlX3VuaW5pdChBVkNvZGVjQ29udGV4dCAqYXZjdHgpCi17Ci0gICAg RkZWdWxrYW5EZWNvZGVDb250ZXh0ICpkZWMgPSBhdmN0eC0+aW50ZXJuYWwtPmh3YWNjZWxfcHJp dl9kYXRhOwotCi0gICAgYXZfZnJlZXAoJmRlYy0+aGV2Y19oZWFkZXJzKTsKLSAgICBhdl9idWZm ZXJfdW5yZWYoJmRlYy0+c2Vzc2lvbl9wYXJhbXMpOwotICAgIGF2X3JlZnN0cnVjdF91bnJlZigm ZGVjLT5zaGFyZWRfY3R4KTsKLSAgICBhdl9mcmVlcCgmZGVjLT5zbGljZV9vZmYpOwotICAgIHJl dHVybiAwOwotfQotCi1zdGF0aWMgaW50IGNyZWF0ZV9lbXB0eV9zZXNzaW9uX3BhcmFtZXRlcnMo QVZDb2RlY0NvbnRleHQgKmF2Y3R4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEZGVnVsa2FuRGVjb2RlU2hhcmVkICpjdHgpCi17Ci0gICAgVmtSZXN1bHQgcmV0 OwotICAgIEZGVnVsa2FuQ29udGV4dCAqcyA9ICZjdHgtPnM7Ci0gICAgRkZWdWxrYW5GdW5jdGlv bnMgKnZrID0gJnMtPnZrZm47Ci0KLSAgICBWa1ZpZGVvRGVjb2RlSDI2NFNlc3Npb25QYXJhbWV0 ZXJzQ3JlYXRlSW5mb0tIUiBoMjY0X3BhcmFtcyA9IHsKLSAgICAgICAgLnNUeXBlID0gVktfU1RS VUNUVVJFX1RZUEVfVklERU9fREVDT0RFX0gyNjRfU0VTU0lPTl9QQVJBTUVURVJTX0NSRUFURV9J TkZPX0tIUiwKLSAgICB9OwotICAgIFZrVmlkZW9EZWNvZGVIMjY1U2Vzc2lvblBhcmFtZXRlcnND cmVhdGVJbmZvS0hSIGgyNjVfcGFyYW1zID0gewotICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RV UkVfVFlQRV9WSURFT19ERUNPREVfSDI2NV9TRVNTSU9OX1BBUkFNRVRFUlNfQ1JFQVRFX0lORk9f S0hSLAotICAgIH07Ci0gICAgU3RkVmlkZW9BVjFTZXF1ZW5jZUhlYWRlciBhdjFfZW1wdHlfc2Vx ID0geyAwIH07Ci0gICAgVmtWaWRlb0RlY29kZUFWMVNlc3Npb25QYXJhbWV0ZXJzQ3JlYXRlSW5m b0tIUiBhdjFfcGFyYW1zID0gewotICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9W SURFT19ERUNPREVfQVYxX1NFU1NJT05fUEFSQU1FVEVSU19DUkVBVEVfSU5GT19LSFIsCi0gICAg ICAgIC5wU3RkU2VxdWVuY2VIZWFkZXIgPSAmYXYxX2VtcHR5X3NlcSwKLSAgICB9OwotICAgIFZr VmlkZW9TZXNzaW9uUGFyYW1ldGVyc0NyZWF0ZUluZm9LSFIgc2Vzc2lvbl9wYXJhbXNfY3JlYXRl ID0gewotICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9WSURFT19TRVNTSU9OX1BB UkFNRVRFUlNfQ1JFQVRFX0lORk9fS0hSLAotICAgICAgICAucE5leHQgPSBhdmN0eC0+Y29kZWNf aWQgPT0gQVZfQ09ERUNfSURfSDI2NCA/ICh2b2lkICopJmgyNjRfcGFyYW1zIDoKLSAgICAgICAg ICAgICAgICAgYXZjdHgtPmNvZGVjX2lkID09IEFWX0NPREVDX0lEX0hFVkMgPyAodm9pZCAqKSZo MjY1X3BhcmFtcyA6Ci0gICAgICAgICAgICAgICAgIGF2Y3R4LT5jb2RlY19pZCA9PSBBVl9DT0RF Q19JRF9BVjEgID8gKHZvaWQgKikmYXYxX3BhcmFtcyAgOgotICAgICAgICAgICAgICAgICBOVUxM LAotICAgICAgICAudmlkZW9TZXNzaW9uID0gY3R4LT5jb21tb24uc2Vzc2lvbiwKLSAgICB9Owot Ci0gICAgaWYgKGF2Y3R4LT5jb2RlY19pZCA9PSBBVl9DT0RFQ19JRF9WUDkpCi0gICAgICAgIHJl dHVybiAwOwotCi0gICAgcmV0ID0gdmstPkNyZWF0ZVZpZGVvU2Vzc2lvblBhcmFtZXRlcnNLSFIo cy0+aHdjdHgtPmFjdF9kZXYsICZzZXNzaW9uX3BhcmFtc19jcmVhdGUsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy0+aHdjdHgtPmFsbG9jLCAmY3R4LT5l bXB0eV9zZXNzaW9uX3BhcmFtcyk7Ci0gICAgaWYgKHJldCAhPSBWS19TVUNDRVNTKSB7Ci0gICAg ICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiVW5hYmxlIHRvIGNyZWF0ZSBlbXB0eSBW dWxrYW4gdmlkZW8gc2Vzc2lvbiBwYXJhbWV0ZXJzOiAlcyFcbiIsCi0gICAgICAgICAgICAgICBm Zl92a19yZXQyc3RyKHJldCkpOwotICAgICAgICByZXR1cm4gQVZFUlJPUl9FWFRFUk5BTDsKLSAg ICB9Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotaW50IGZmX3ZrX2RlY29kZV9pbml0KEFWQ29kZWND b250ZXh0ICphdmN0eCkKLXsKLSAgICBpbnQgZXJyOwotICAgIEZGVnVsa2FuRGVjb2RlQ29udGV4 dCAqZGVjID0gYXZjdHgtPmludGVybmFsLT5od2FjY2VsX3ByaXZfZGF0YTsKLSAgICBGRlZ1bGth bkRlY29kZVNoYXJlZCAqY3R4OwotICAgIEZGVnVsa2FuQ29udGV4dCAqczsKLSAgICBpbnQgYXN5 bmNfZGVwdGg7Ci0gICAgY29uc3QgVmtWaWRlb1Byb2ZpbGVJbmZvS0hSICpwcm9maWxlOwotICAg IGNvbnN0IEZGVnVsa2FuRGVjb2RlRGVzY3JpcHRvciAqdmtfZGVzYzsKLSAgICBjb25zdCBWa1Bo eXNpY2FsRGV2aWNlRHJpdmVyUHJvcGVydGllcyAqZHJpdmVyX3Byb3BzOwotCi0gICAgVmtWaWRl b1Nlc3Npb25DcmVhdGVJbmZvS0hSIHNlc3Npb25fY3JlYXRlID0gewotICAgICAgICAuc1R5cGUg PSBWS19TVFJVQ1RVUkVfVFlQRV9WSURFT19TRVNTSU9OX0NSRUFURV9JTkZPX0tIUiwKLSAgICB9 OwotCi0gICAgZXJyID0gZmZfZGVjb2RlX2dldF9od19mcmFtZXNfY3R4KGF2Y3R4LCBBVl9IV0RF VklDRV9UWVBFX1ZVTEtBTik7Ci0gICAgaWYgKGVyciA8IDApCi0gICAgICAgIHJldHVybiBlcnI7 Ci0KLSAgICAvKiBJbml0aWFsaXplIGNvbnRleHRzICovCi0gICAgY3R4ID0gZGVjLT5zaGFyZWRf Y3R4OwotICAgIHMgPSAmY3R4LT5zOwotCi0gICAgZXJyID0gZmZfdmtfaW5pdChzLCBhdmN0eCwg TlVMTCwgYXZjdHgtPmh3X2ZyYW1lc19jdHgpOwotICAgIGlmIChlcnIgPCAwKQotICAgICAgICBy ZXR1cm4gZXJyOwotCi0gICAgdmtfZGVzYyA9IGdldF9jb2RlY2Rlc2MoYXZjdHgtPmNvZGVjX2lk KTsKLQotICAgIHByb2ZpbGUgPSBnZXRfdmlkZW9fcHJvZmlsZShjdHgsIGF2Y3R4LT5jb2RlY19p ZCk7Ci0gICAgaWYgKCh2a19kZXNjLT5xdWV1ZV9mbGFncyAmIFZLX1FVRVVFX1ZJREVPX0RFQ09E RV9CSVRfS0hSKSAmJiAhcHJvZmlsZSkgewotICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19F UlJPUiwgIlZpZGVvIHByb2ZpbGUgbWlzc2luZyBmcm9tIGZyYW1lcyBjb250ZXh0ISIpOwotICAg ICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOwotICAgIH0KLQotICAgIC8qIENyZWF0ZSBxdWV1 ZSBjb250ZXh0ICovCi0gICAgdmtfZGVzYyA9IGdldF9jb2RlY2Rlc2MoYXZjdHgtPmNvZGVjX2lk KTsKLSAgICBjdHgtPnFmID0gZmZfdmtfcWZfZmluZChzLCB2a19kZXNjLT5xdWV1ZV9mbGFncywg dmtfZGVzYy0+ZGVjb2RlX29wKTsKLSAgICBpZiAoIWN0eC0+cWYpIHsKLSAgICAgICAgYXZfbG9n KGF2Y3R4LCBBVl9MT0dfRVJST1IsICJEZWNvZGluZyBvZiAlcyBpcyBub3Qgc3VwcG9ydGVkIGJ5 IHRoaXMgZGV2aWNlXG4iLAotICAgICAgICAgICAgICAgYXZjb2RlY19nZXRfbmFtZShhdmN0eC0+ Y29kZWNfaWQpKTsKLSAgICAgICAgcmV0dXJuIGVycjsKLSAgICB9Ci0KLSAgICBzZXNzaW9uX2Ny ZWF0ZS5xdWV1ZUZhbWlseUluZGV4ID0gY3R4LT5xZi0+aWR4OwotICAgIHNlc3Npb25fY3JlYXRl Lm1heENvZGVkRXh0ZW50ID0gY3R4LT5jYXBzLm1heENvZGVkRXh0ZW50OwotICAgIHNlc3Npb25f Y3JlYXRlLm1heERwYlNsb3RzID0gY3R4LT5jYXBzLm1heERwYlNsb3RzOwotICAgIHNlc3Npb25f Y3JlYXRlLm1heEFjdGl2ZVJlZmVyZW5jZVBpY3R1cmVzID0gY3R4LT5jYXBzLm1heEFjdGl2ZVJl ZmVyZW5jZVBpY3R1cmVzOwotICAgIHNlc3Npb25fY3JlYXRlLnBpY3R1cmVGb3JtYXQgPSBzLT5o d2ZjLT5mb3JtYXRbMF07Ci0gICAgc2Vzc2lvbl9jcmVhdGUucmVmZXJlbmNlUGljdHVyZUZvcm1h dCA9IHNlc3Npb25fY3JlYXRlLnBpY3R1cmVGb3JtYXQ7Ci0gICAgc2Vzc2lvbl9jcmVhdGUucFN0 ZEhlYWRlclZlcnNpb24gPSAmdmtfZGVzYy0+ZXh0X3Byb3BzOwotICAgIHNlc3Npb25fY3JlYXRl LnBWaWRlb1Byb2ZpbGUgPSBwcm9maWxlOwotI2lmZGVmIFZLX0tIUl92aWRlb19tYWludGVuYW5j ZTIKLSAgICBpZiAoY3R4LT5zLmV4dGVuc2lvbnMgJiBGRl9WS19FWFRfVklERU9fTUFJTlRFTkFO Q0VfMikKLSAgICAgICAgc2Vzc2lvbl9jcmVhdGUuZmxhZ3MgPSBWS19WSURFT19TRVNTSU9OX0NS RUFURV9JTkxJTkVfU0VTU0lPTl9QQVJBTUVURVJTX0JJVF9LSFI7Ci0jZW5kaWYKLQotICAgIC8q IENyZWF0ZSBkZWNvZGUgZXhlYyBjb250ZXh0IGZvciB0aGlzIHNwZWNpZmljIG1haW4gdGhyZWFk LgotICAgICAqIDIgYXN5bmMgY29udGV4dHMgcGVyIHRocmVhZCB3YXMgZXhwZXJpbWVudGFsbHkg ZGV0ZXJtaW5lZCB0byBiZSBvcHRpbWFsCi0gICAgICogZm9yIGEgbWFqb3JpdHkgb2Ygc3RyZWFt cy4gKi8KLSAgICBhc3luY19kZXB0aCA9IDIqY3R4LT5xZi0+bnVtOwotICAgIC8qIFdlIGRvbid0 IG5lZWQgbW9yZSB0aGFuIDIgcGVyIHRocmVhZCBjb250ZXh0ICovCi0gICAgYXN5bmNfZGVwdGgg PSBGRk1JTihhc3luY19kZXB0aCwgMiphdmN0eC0+dGhyZWFkX2NvdW50KTsKLSAgICAvKiBNYWtl IHN1cmUgdGhlcmUgYXJlIGVub3VnaCBhc3luYyBjb250ZXh0cyBmb3IgZWFjaCB0aHJlYWQgKi8K LSAgICBhc3luY19kZXB0aCA9IEZGTUFYKGFzeW5jX2RlcHRoLCBhdmN0eC0+dGhyZWFkX2NvdW50 KTsKLQotICAgIGVyciA9IGZmX3ZrX2V4ZWNfcG9vbF9pbml0KHMsIGN0eC0+cWYsICZjdHgtPmV4 ZWNfcG9vbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3luY19kZXB0aCwgMCwg MCwgMCwgcHJvZmlsZSk7Ci0gICAgaWYgKGVyciA8IDApCi0gICAgICAgIGdvdG8gZmFpbDsKLQot ICAgIGlmICghREVDT0RFUl9JU19TRFIoYXZjdHgtPmNvZGVjX2lkKSkgewotICAgICAgICBlcnIg PSBmZl92a192aWRlb19jb21tb25faW5pdChhdmN0eCwgcywgJmN0eC0+Y29tbW9uLCAmc2Vzc2lv bl9jcmVhdGUpOwotICAgICAgICBpZiAoZXJyIDwgMCkKLSAgICAgICAgICAgIGdvdG8gZmFpbDsK LSAgICB9Ci0KLSAgICAvKiBJZiBkb2luZyBhbiBvdXQtb2YtcGxhY2UgZGVjb2RpbmcsIGNyZWF0 ZSBhIERQQiBwb29sICovCi0gICAgaWYgKGRlYy0+ZGVkaWNhdGVkX2RwYiB8fCBhdmN0eC0+Y29k ZWNfaWQgPT0gQVZfQ09ERUNfSURfQVYxKSB7Ci0gICAgICAgIEFWSFdGcmFtZXNDb250ZXh0ICpk cGJfZnJhbWVzOwotICAgICAgICBBVlZ1bGthbkZyYW1lc0NvbnRleHQgKmRwYl9od2ZjOwotCi0g ICAgICAgIGN0eC0+Y29tbW9uLmRwYl9od2ZjX3JlZiA9IGF2X2h3ZnJhbWVfY3R4X2FsbG9jKHMt PmZyYW1lcy0+ZGV2aWNlX3JlZik7Ci0gICAgICAgIGlmICghY3R4LT5jb21tb24uZHBiX2h3ZmNf cmVmKSB7Ci0gICAgICAgICAgICBlcnIgPSBBVkVSUk9SKEVOT01FTSk7Ci0gICAgICAgICAgICBn b3RvIGZhaWw7Ci0gICAgICAgIH0KLQotICAgICAgICBkcGJfZnJhbWVzID0gKEFWSFdGcmFtZXND b250ZXh0ICopY3R4LT5jb21tb24uZHBiX2h3ZmNfcmVmLT5kYXRhOwotICAgICAgICBkcGJfZnJh bWVzLT5mb3JtYXQgICAgPSBzLT5mcmFtZXMtPmZvcm1hdDsKLSAgICAgICAgZHBiX2ZyYW1lcy0+ c3dfZm9ybWF0ID0gcy0+ZnJhbWVzLT5zd19mb3JtYXQ7Ci0gICAgICAgIGRwYl9mcmFtZXMtPndp ZHRoICAgICA9IGF2Y3R4LT5jb2RlZF93aWR0aDsKLSAgICAgICAgZHBiX2ZyYW1lcy0+aGVpZ2h0 ICAgID0gYXZjdHgtPmNvZGVkX2hlaWdodDsKLQotICAgICAgICBkcGJfaHdmYyA9IGRwYl9mcmFt ZXMtPmh3Y3R4OwotICAgICAgICBkcGJfaHdmYy0+Y3JlYXRlX3BuZXh0ID0gKHZvaWQgKilmZl92 a19maW5kX3N0cnVjdChjdHgtPnMuaHdmYy0+Y3JlYXRlX3BuZXh0LAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19TVFJVQ1RVUkVf VFlQRV9WSURFT19QUk9GSUxFX0xJU1RfSU5GT19LSFIpOwotICAgICAgICBkcGJfaHdmYy0+Zm9y bWF0WzBdICAgID0gcy0+aHdmYy0+Zm9ybWF0WzBdOwotICAgICAgICBkcGJfaHdmYy0+dGlsaW5n ICAgICAgID0gVktfSU1BR0VfVElMSU5HX09QVElNQUw7Ci0gICAgICAgIGRwYl9od2ZjLT51c2Fn ZSAgICAgICAgPSBWS19JTUFHRV9VU0FHRV9WSURFT19ERUNPREVfRFBCX0JJVF9LSFIgfAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfSU1BR0VfVVNBR0VfU0FNUExFRF9CSVQ7 IC8qIFNodXRzIHZhbGlkYXRvciB1cC4gKi8KLQotICAgICAgICBpZiAoY3R4LT5jb21tb24ubGF5 ZXJlZF9kcGIpCi0gICAgICAgICAgICBkcGJfaHdmYy0+bmJfbGF5ZXJzID0gY3R4LT5jYXBzLm1h eERwYlNsb3RzOwotCi0gICAgICAgIGVyciA9IGF2X2h3ZnJhbWVfY3R4X2luaXQoY3R4LT5jb21t b24uZHBiX2h3ZmNfcmVmKTsKLSAgICAgICAgaWYgKGVyciA8IDApCi0gICAgICAgICAgICBnb3Rv IGZhaWw7Ci0KLSAgICAgICAgaWYgKGN0eC0+Y29tbW9uLmxheWVyZWRfZHBiKSB7Ci0gICAgICAg ICAgICBjdHgtPmNvbW1vbi5sYXllcmVkX2ZyYW1lID0gdmtfZ2V0X2RwYl9wb29sKGN0eCk7Ci0g ICAgICAgICAgICBpZiAoIWN0eC0+Y29tbW9uLmxheWVyZWRfZnJhbWUpIHsKLSAgICAgICAgICAg ICAgICBlcnIgPSBBVkVSUk9SKEVOT01FTSk7Ci0gICAgICAgICAgICAgICAgZ290byBmYWlsOwot ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBlcnIgPSBmZl92a19jcmVhdGVfdmlldygmY3R4 LT5zLCAmY3R4LT5jb21tb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm Y3R4LT5jb21tb24ubGF5ZXJlZF92aWV3LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJmN0eC0+Y29tbW9uLmxheWVyZWRfYXNwZWN0LAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKEFWVmtGcmFtZSAqKWN0eC0+Y29tbW9uLmxheWVyZWRfZnJhbWUtPmRh dGFbMF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLT5od2ZjLT5mb3Jt YXRbMF0sIDEpOwotICAgICAgICAgICAgaWYgKGVyciA8IDApCi0gICAgICAgICAgICAgICAgZ290 byBmYWlsOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKCFERUNPREVSX0lTX1NEUihhdmN0 eC0+Y29kZWNfaWQpKSB7Ci0gICAgICAgIGlmICghKGN0eC0+cy5leHRlbnNpb25zICYgRkZfVktf RVhUX1ZJREVPX01BSU5URU5BTkNFXzIpKSB7Ci0gICAgICAgICAgICBlcnIgPSBjcmVhdGVfZW1w dHlfc2Vzc2lvbl9wYXJhbWV0ZXJzKGF2Y3R4LCBjdHgpOwotICAgICAgICAgICAgaWYgKGVyciA8 IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7 Ci0gICAgICAgIC8qIEZvciBTRFIgZGVjb2RlcnMsIHRoaXMgYWxpZ25tZW50IHZhbHVlIHdpbGwg YmUgMC4gU2luY2UgdGhpcyB3aWxsIG1ha2UKLSAgICAgICAgICogYWRkX3NsaWNlKCkgbWFsZnVu Y3Rpb24sIHNldCBpdCB0byBhIHNhbmUgZGVmYXVsdCB2YWx1ZS4gKi8KLSAgICAgICAgY3R4LT5j YXBzLm1pbkJpdHN0cmVhbUJ1ZmZlclNpemVBbGlnbm1lbnQgPSBBVl9JTlBVVF9CVUZGRVJfUEFE RElOR19TSVpFOwotICAgIH0KLQotICAgIGRyaXZlcl9wcm9wcyA9ICZkZWMtPnNoYXJlZF9jdHgt PnMuZHJpdmVyX3Byb3BzOwotICAgIGlmIChkcml2ZXJfcHJvcHMtPmRyaXZlcklEID09IFZLX0RS SVZFUl9JRF9OVklESUFfUFJPUFJJRVRBUlkgJiYKLSAgICAgICAgZHJpdmVyX3Byb3BzLT5jb25m b3JtYW5jZVZlcnNpb24ubWFqb3IgPT0gMSAmJgotICAgICAgICBkcml2ZXJfcHJvcHMtPmNvbmZv cm1hbmNlVmVyc2lvbi5taW5vciA9PSAzICYmCi0gICAgICAgIGRyaXZlcl9wcm9wcy0+Y29uZm9y bWFuY2VWZXJzaW9uLnN1Ym1pbm9yID09IDggJiYKLSAgICAgICAgZHJpdmVyX3Byb3BzLT5jb25m b3JtYW5jZVZlcnNpb24ucGF0Y2ggPCAzKQotICAgICAgICBkZWMtPnF1aXJrX2F2MV9vZmZzZXQg PSAxOwotCi0gICAgZmZfdmtfZGVjb2RlX2ZsdXNoKGF2Y3R4KTsKLQotICAgIGF2X2xvZyhhdmN0 eCwgQVZfTE9HX1ZFUkJPU0UsICJWdWxrYW4gZGVjb2RlciBpbml0aWFsaXphdGlvbiBzdWNjZXNz ZnVsXG4iKTsKLQotICAgIHJldHVybiAwOwotCi1mYWlsOgotICAgIGZmX3ZrX2RlY29kZV91bmlu aXQoYXZjdHgpOwotCi0gICAgcmV0dXJuIGVycjsKLX0KLS0gCjIuNDkuMQoKCkZyb20gZDA5MDAw YzhiZWEyNTMzZGQzNTI3YmM5NjVmODIzYjEwOWUyZWM1OSBNb24gU2VwIDE3IDAwOjAwOjAwIDIw MDEKRnJvbTogSmFtYWlrYTEgPGx1a2FzemN6MThAd3AucGw+CkRhdGU6IFdlZCwgMyBTZXAgMjAy NSAxMzoyOTozMSArMDAwMApTdWJqZWN0OiBbUEFUQ0ggMDY2LzExOF0gQ2hhbmdpbmcgdnVsa2Fu IGZpbGUgZGlyZWN0b3J5CgotLS0KIGxpYmF2Y29kZWMvdnVsa2FuL3Z1bGthbl9kZWNvZGUuYyB8 IDEzOTkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDEgZmlsZSBjaGFuZ2VkLCAxMzk5 IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJhdmNvZGVjL3Z1bGthbi92dWxr YW5fZGVjb2RlLmMKCmRpZmYgLS1naXQgYS9saWJhdmNvZGVjL3Z1bGthbi92dWxrYW5fZGVjb2Rl LmMgYi9saWJhdmNvZGVjL3Z1bGthbi92dWxrYW5fZGVjb2RlLmMKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMC4uZmM5MzRjYTcyZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmF2 Y29kZWMvdnVsa2FuL3Z1bGthbl9kZWNvZGUuYwpAQCAtMCwwICsxLDEzOTkgQEAKKy8qCisgKiBU aGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCisgKgorICogRkZtcGVnIGlzIGZyZWUgc29mdHdh cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz aW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy c2lvbi4KKyAqCisgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3 aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNl bnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJl CisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBC b3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisgKi8KKworI2luY2x1ZGUgImxpYmF2dXRpbC9yZWZz dHJ1Y3QuaCIKKyNpbmNsdWRlICJ2dWxrYW5fdmlkZW8uaCIKKyNpbmNsdWRlICJ2dWxrYW5fZGVj b2RlLmgiCisjaW5jbHVkZSAibGliYXZjb2RlYy9jb25maWdfY29tcG9uZW50cy5oIgorI2luY2x1 ZGUgImxpYmF2dXRpbC9hdmFzc2VydC5oIgorI2luY2x1ZGUgImxpYmF2dXRpbC9tZW0uaCIKKyNp bmNsdWRlICIuLi8uLi9saWJhdnV0aWwvdnVsa2FuL3Z1bGthbl9sb2FkZXIuaCIKKworI2RlZmlu ZSBERUNPREVSX0lTX1NEUihjb2RlY19pZCkgXAorICAgICgoKGNvZGVjX2lkKSA9PSBBVl9DT0RF Q19JRF9GRlYxKSB8fCBcCisgICAgICgoY29kZWNfaWQpID09IEFWX0NPREVDX0lEX1BST1JFU19S QVcpKQorCisjaWYgQ09ORklHX0gyNjRfVlVMS0FOX0hXQUNDRUwKK2V4dGVybiBjb25zdCBGRlZ1 bGthbkRlY29kZURlc2NyaXB0b3IgZmZfdmtfZGVjX2gyNjRfZGVzYzsKKyNlbmRpZgorI2lmIENP TkZJR19IRVZDX1ZVTEtBTl9IV0FDQ0VMCitleHRlcm4gY29uc3QgRkZWdWxrYW5EZWNvZGVEZXNj cmlwdG9yIGZmX3ZrX2RlY19oZXZjX2Rlc2M7CisjZW5kaWYKKyNpZiBDT05GSUdfVlA5X1ZVTEtB Tl9IV0FDQ0VMCitleHRlcm4gY29uc3QgRkZWdWxrYW5EZWNvZGVEZXNjcmlwdG9yIGZmX3ZrX2Rl Y192cDlfZGVzYzsKKyNlbmRpZgorI2lmIENPTkZJR19BVjFfVlVMS0FOX0hXQUNDRUwKK2V4dGVy biBjb25zdCBGRlZ1bGthbkRlY29kZURlc2NyaXB0b3IgZmZfdmtfZGVjX2F2MV9kZXNjOworI2Vu ZGlmCisjaWYgQ09ORklHX0ZGVjFfVlVMS0FOX0hXQUNDRUwKK2V4dGVybiBjb25zdCBGRlZ1bGth bkRlY29kZURlc2NyaXB0b3IgZmZfdmtfZGVjX2ZmdjFfZGVzYzsKKyNlbmRpZgorI2lmIENPTkZJ R19QUk9SRVNfUkFXX1ZVTEtBTl9IV0FDQ0VMCitleHRlcm4gY29uc3QgRkZWdWxrYW5EZWNvZGVE ZXNjcmlwdG9yIGZmX3ZrX2RlY19wcm9yZXNfcmF3X2Rlc2M7CisjZW5kaWYKKworc3RhdGljIGNv bnN0IEZGVnVsa2FuRGVjb2RlRGVzY3JpcHRvciAqZGVjX2Rlc2NzW10gPSB7CisjaWYgQ09ORklH X0gyNjRfVlVMS0FOX0hXQUNDRUwKKyAgICAmZmZfdmtfZGVjX2gyNjRfZGVzYywKKyNlbmRpZgor I2lmIENPTkZJR19IRVZDX1ZVTEtBTl9IV0FDQ0VMCisgICAgJmZmX3ZrX2RlY19oZXZjX2Rlc2Ms CisjZW5kaWYKKyNpZiBDT05GSUdfVlA5X1ZVTEtBTl9IV0FDQ0VMCisgICAgJmZmX3ZrX2RlY192 cDlfZGVzYywKKyNlbmRpZgorI2lmIENPTkZJR19BVjFfVlVMS0FOX0hXQUNDRUwKKyAgICAmZmZf dmtfZGVjX2F2MV9kZXNjLAorI2VuZGlmCisjaWYgQ09ORklHX0ZGVjFfVlVMS0FOX0hXQUNDRUwK KyAgICAmZmZfdmtfZGVjX2ZmdjFfZGVzYywKKyNlbmRpZgorI2lmIENPTkZJR19QUk9SRVNfUkFX X1ZVTEtBTl9IV0FDQ0VMCisgICAgJmZmX3ZrX2RlY19wcm9yZXNfcmF3X2Rlc2MsCisjZW5kaWYK K307CisKK3R5cGVkZWYgc3RydWN0IEZGVnVsa2FuRGVjb2RlUHJvZmlsZURhdGEgeworICAgICBW a1ZpZGVvRGVjb2RlSDI2NFByb2ZpbGVJbmZvS0hSIGgyNjRfcHJvZmlsZTsKKyAgICAgVmtWaWRl b0RlY29kZUgyNjVQcm9maWxlSW5mb0tIUiBoMjY1X3Byb2ZpbGU7CisjaWYgQ09ORklHX1ZQOV9W VUxLQU5fSFdBQ0NFTAorICAgICBWa1ZpZGVvRGVjb2RlVlA5UHJvZmlsZUluZm9LSFIgdnA5X3By b2ZpbGU7CisjZW5kaWYKKyAgICAgVmtWaWRlb0RlY29kZUFWMVByb2ZpbGVJbmZvS0hSIGF2MV9w cm9maWxlOworCisgICAgVmtWaWRlb0RlY29kZVVzYWdlSW5mb0tIUiB1c2FnZTsKKyAgICBWa1Zp ZGVvUHJvZmlsZUluZm9LSFIgcHJvZmlsZTsKKyAgICBWa1ZpZGVvUHJvZmlsZUxpc3RJbmZvS0hS IHByb2ZpbGVfbGlzdDsKK30gRkZWdWxrYW5EZWNvZGVQcm9maWxlRGF0YTsKKworc3RhdGljIGNv bnN0IEZGVnVsa2FuRGVjb2RlRGVzY3JpcHRvciAqZ2V0X2NvZGVjZGVzYyhlbnVtIEFWQ29kZWNJ RCBjb2RlY19pZCkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IEZGX0FSUkFZX0VMRU1T KGRlY19kZXNjcyk7IGkrKykKKyAgICAgICAgaWYgKGRlY19kZXNjc1tpXS0+Y29kZWNfaWQgPT0g Y29kZWNfaWQpCisgICAgICAgICAgICByZXR1cm4gZGVjX2Rlc2NzW2ldOworICAgIGF2X2Fzc2Vy dDEoISJubyBjb2RlYyBkZXNjcmlwdG9yIik7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRp YyBjb25zdCBWa1ZpZGVvUHJvZmlsZUluZm9LSFIgKmdldF92aWRlb19wcm9maWxlKEZGVnVsa2Fu RGVjb2RlU2hhcmVkICpjdHgsIGVudW0gQVZDb2RlY0lEIGNvZGVjX2lkKQoreworICAgIGNvbnN0 IFZrVmlkZW9Qcm9maWxlTGlzdEluZm9LSFIgKnByb2ZpbGVfbGlzdDsKKworICAgIFZrU3RydWN0 dXJlVHlwZSBwcm9maWxlX3N0cnVjdF90eXBlID0KKyAgICAgICAgY29kZWNfaWQgPT0gQVZfQ09E RUNfSURfSDI2NCA/IFZLX1NUUlVDVFVSRV9UWVBFX1ZJREVPX0RFQ09ERV9IMjY0X1BST0ZJTEVf SU5GT19LSFIgOgorICAgICAgICBjb2RlY19pZCA9PSBBVl9DT0RFQ19JRF9IRVZDID8gVktfU1RS VUNUVVJFX1RZUEVfVklERU9fREVDT0RFX0gyNjVfUFJPRklMRV9JTkZPX0tIUiA6CisjaWYgQ09O RklHX1ZQOV9WVUxLQU5fSFdBQ0NFTAorICAgICAgICBjb2RlY19pZCA9PSBBVl9DT0RFQ19JRF9W UDkgID8gVktfU1RSVUNUVVJFX1RZUEVfVklERU9fREVDT0RFX1ZQOV9QUk9GSUxFX0lORk9fS0hS IDoKKyNlbmRpZgorICAgICAgICBjb2RlY19pZCA9PSBBVl9DT0RFQ19JRF9BVjEgID8gVktfU1RS VUNUVVJFX1RZUEVfVklERU9fREVDT0RFX0FWMV9QUk9GSUxFX0lORk9fS0hSIDoKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZLX1NUUlVDVFVSRV9UWVBFX01BWF9FTlVN OworICAgIGlmIChwcm9maWxlX3N0cnVjdF90eXBlID09IFZLX1NUUlVDVFVSRV9UWVBFX01BWF9F TlVNKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHByb2ZpbGVfbGlzdCA9IGZmX3ZrX2Zp bmRfc3RydWN0KGN0eC0+cy5od2ZjLT5jcmVhdGVfcG5leHQsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgVktfU1RSVUNUVVJFX1RZUEVfVklERU9fUFJPRklMRV9MSVNUX0lO Rk9fS0hSKTsKKyAgICBpZiAoIXByb2ZpbGVfbGlzdCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisK KyAgICBmb3IgKGludCBpID0gMDsgaSA8IHByb2ZpbGVfbGlzdC0+cHJvZmlsZUNvdW50OyBpKysp CisgICAgICAgIGlmIChmZl92a19maW5kX3N0cnVjdChwcm9maWxlX2xpc3QtPnBQcm9maWxlc1tp XS5wTmV4dCwgcHJvZmlsZV9zdHJ1Y3RfdHlwZSkpCisgICAgICAgICAgICByZXR1cm4gJnByb2Zp bGVfbGlzdC0+cFByb2ZpbGVzW2ldOworCisgICAgcmV0dXJuIE5VTEw7Cit9CisKK2ludCBmZl92 a191cGRhdGVfdGhyZWFkX2NvbnRleHQoQVZDb2RlY0NvbnRleHQgKmRzdCwgY29uc3QgQVZDb2Rl Y0NvbnRleHQgKnNyYykKK3sKKyAgICBpbnQgZXJyOworICAgIEZGVnVsa2FuRGVjb2RlQ29udGV4 dCAqc3JjX2N0eCA9IHNyYy0+aW50ZXJuYWwtPmh3YWNjZWxfcHJpdl9kYXRhOworICAgIEZGVnVs a2FuRGVjb2RlQ29udGV4dCAqZHN0X2N0eCA9IGRzdC0+aW50ZXJuYWwtPmh3YWNjZWxfcHJpdl9k YXRhOworCisgICAgYXZfcmVmc3RydWN0X3JlcGxhY2UoJmRzdF9jdHgtPnNoYXJlZF9jdHgsIHNy Y19jdHgtPnNoYXJlZF9jdHgpOworCisgICAgZXJyID0gYXZfYnVmZmVyX3JlcGxhY2UoJmRzdF9j dHgtPnNlc3Npb25fcGFyYW1zLCBzcmNfY3R4LT5zZXNzaW9uX3BhcmFtcyk7CisgICAgaWYgKGVy ciA8IDApCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICBkc3RfY3R4LT5kZWRpY2F0ZWRfZHBi ID0gc3JjX2N0eC0+ZGVkaWNhdGVkX2RwYjsKKyAgICBkc3RfY3R4LT5leHRlcm5hbF9mZyA9IHNy Y19jdHgtPmV4dGVybmFsX2ZnOworCisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBmZl92a19wYXJh bXNfaW52YWxpZGF0ZShBVkNvZGVjQ29udGV4dCAqYXZjdHgsIGludCB0LCBjb25zdCB1aW50OF90 ICpiLCB1aW50MzJfdCBzKQoreworICAgIEZGVnVsa2FuRGVjb2RlQ29udGV4dCAqZGVjID0gYXZj dHgtPmludGVybmFsLT5od2FjY2VsX3ByaXZfZGF0YTsKKyAgICBhdl9idWZmZXJfdW5yZWYoJmRl Yy0+c2Vzc2lvbl9wYXJhbXMpOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgQVZGcmFtZSAq dmtfZ2V0X2RwYl9wb29sKEZGVnVsa2FuRGVjb2RlU2hhcmVkICpjdHgpCit7CisgICAgaW50IGVy cjsKKyAgICBBVkZyYW1lICphdmYgPSBhdl9mcmFtZV9hbGxvYygpOworICAgIGlmICghYXZmKQor ICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGVyciA9IGF2X2h3ZnJhbWVfZ2V0X2J1ZmZlcihj dHgtPmNvbW1vbi5kcGJfaHdmY19yZWYsIGF2ZiwgMHgwKTsKKyAgICBpZiAoZXJyIDwgMCkKKyAg ICAgICAgYXZfZnJhbWVfZnJlZSgmYXZmKTsKKworICAgIHJldHVybiBhdmY7Cit9CisKK3N0YXRp YyB2b2lkIGluaXRfZnJhbWUoRkZWdWxrYW5EZWNvZGVDb250ZXh0ICpkZWMsIEZGVnVsa2FuRGVj b2RlUGljdHVyZSAqdmtwaWMpCit7CisgICAgRkZWdWxrYW5EZWNvZGVTaGFyZWQgKmN0eCA9IGRl Yy0+c2hhcmVkX2N0eDsKKyAgICBGRlZ1bGthbkZ1bmN0aW9ucyAqdmsgPSAmY3R4LT5zLnZrZm47 CisKKyAgICB2a3BpYy0+ZHBiX2ZyYW1lICAgICA9IE5VTEw7CisgICAgZm9yIChpbnQgaSA9IDA7 IGkgPCBBVl9OVU1fREFUQV9QT0lOVEVSUzsgaSsrKSB7CisgICAgICAgIHZrcGljLT52aWV3LnJl ZltpXSAgPSBWS19OVUxMX0hBTkRMRTsKKyAgICAgICAgdmtwaWMtPnZpZXcub3V0W2ldICA9IFZL X05VTExfSEFORExFOworICAgICAgICB2a3BpYy0+dmlldy5kc3RbaV0gID0gVktfTlVMTF9IQU5E TEU7CisgICAgfQorCisgICAgdmtwaWMtPmRlc3Ryb3lfaW1hZ2VfdmlldyA9IHZrLT5EZXN0cm95 SW1hZ2VWaWV3OworICAgIHZrcGljLT53YWl0X3NlbWFwaG9yZXMgPSB2ay0+V2FpdFNlbWFwaG9y ZXM7CisgICAgdmtwaWMtPmludmFsaWRhdGVfbWVtb3J5X3JhbmdlcyA9IHZrLT5JbnZhbGlkYXRl TWFwcGVkTWVtb3J5UmFuZ2VzOworfQorCitpbnQgZmZfdmtfZGVjb2RlX3ByZXBhcmVfZnJhbWUo RkZWdWxrYW5EZWNvZGVDb250ZXh0ICpkZWMsIEFWRnJhbWUgKnBpYywKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBGRlZ1bGthbkRlY29kZVBpY3R1cmUgKnZrcGljLCBpbnQgaXNfY3Vy cmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWxsb2NfZHBiKQorewor ICAgIGludCBlcnI7CisgICAgRkZWdWxrYW5EZWNvZGVTaGFyZWQgKmN0eCA9IGRlYy0+c2hhcmVk X2N0eDsKKworICAgIHZrcGljLT5zbGljZXNfc2l6ZSA9IDA7CisKKyAgICAvKiBJZiB0aGUgZGVj b2RlciBtYWRlIGEgYmxhbmsgZnJhbWUgdG8gbWFrZSB1cCBmb3IgYSBtaXNzaW5nIHJlZiwgb3Ig dGhlCisgICAgICogZnJhbWUgaXMgdGhlIGN1cnJlbnQgZnJhbWUgc28gaXQncyBtaXNzaW5nIG9u ZSwgY3JlYXRlIGEgcmUtcmVwcmVzZW50YXRpb24gKi8KKyAgICBpZiAodmtwaWMtPnZpZXcucmVm WzBdKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGluaXRfZnJhbWUoZGVjLCB2a3BpYyk7CisK KyAgICBpZiAoY3R4LT5jb21tb24ubGF5ZXJlZF9kcGIgJiYgYWxsb2NfZHBiKSB7CisgICAgICAg IHZrcGljLT52aWV3LnJlZlswXSA9IGN0eC0+Y29tbW9uLmxheWVyZWRfdmlldzsKKyAgICAgICAg dmtwaWMtPnZpZXcuYXNwZWN0X3JlZlswXSA9IGN0eC0+Y29tbW9uLmxheWVyZWRfYXNwZWN0Owor ICAgIH0gZWxzZSBpZiAoYWxsb2NfZHBiKSB7CisgICAgICAgIEFWSFdGcmFtZXNDb250ZXh0ICpk cGJfZnJhbWVzID0gKEFWSFdGcmFtZXNDb250ZXh0ICopY3R4LT5jb21tb24uZHBiX2h3ZmNfcmVm LT5kYXRhOworICAgICAgICBBVlZ1bGthbkZyYW1lc0NvbnRleHQgKmRwYl9od2ZjID0gZHBiX2Zy YW1lcy0+aHdjdHg7CisKKyAgICAgICAgdmtwaWMtPmRwYl9mcmFtZSA9IHZrX2dldF9kcGJfcG9v bChjdHgpOworICAgICAgICBpZiAoIXZrcGljLT5kcGJfZnJhbWUpCisgICAgICAgICAgICByZXR1 cm4gQVZFUlJPUihFTk9NRU0pOworCisgICAgICAgIGVyciA9IGZmX3ZrX2NyZWF0ZV92aWV3KCZj dHgtPnMsICZjdHgtPmNvbW1vbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnZr cGljLT52aWV3LnJlZlswXSwgJnZrcGljLT52aWV3LmFzcGVjdF9yZWZbMF0sCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChBVlZrRnJhbWUgKil2a3BpYy0+ZHBiX2ZyYW1lLT5kYXRh WzBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcGJfaHdmYy0+Zm9ybWF0WzBd LCAhaXNfY3VycmVudCk7CisgICAgICAgIGlmIChlcnIgPCAwKQorICAgICAgICAgICAgcmV0dXJu IGVycjsKKworICAgICAgICB2a3BpYy0+dmlldy5kc3RbMF0gPSB2a3BpYy0+dmlldy5yZWZbMF07 CisgICAgfQorCisgICAgaWYgKCFhbGxvY19kcGIgfHwgaXNfY3VycmVudCkgeworICAgICAgICBB VkhXRnJhbWVzQ29udGV4dCAqZnJhbWVzID0gKEFWSFdGcmFtZXNDb250ZXh0ICopcGljLT5od19m cmFtZXNfY3R4LT5kYXRhOworICAgICAgICBBVlZ1bGthbkZyYW1lc0NvbnRleHQgKmh3ZmMgPSBm cmFtZXMtPmh3Y3R4OworCisgICAgICAgIGVyciA9IGZmX3ZrX2NyZWF0ZV92aWV3KCZjdHgtPnMs ICZjdHgtPmNvbW1vbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnZrcGljLT52 aWV3Lm91dFswXSwgJnZrcGljLT52aWV3LmFzcGVjdFswXSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKEFWVmtGcmFtZSAqKXBpYy0+ZGF0YVswXSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaHdmYy0+Zm9ybWF0WzBdLCAhaXNfY3VycmVudCk7CisgICAgICAgIGlm IChlcnIgPCAwKQorICAgICAgICAgICAgcmV0dXJuIGVycjsKKworICAgICAgICBpZiAoIWFsbG9j X2RwYikgeworICAgICAgICAgICAgdmtwaWMtPnZpZXcucmVmWzBdID0gdmtwaWMtPnZpZXcub3V0 WzBdOworICAgICAgICAgICAgdmtwaWMtPnZpZXcuYXNwZWN0X3JlZlswXSA9IHZrcGljLT52aWV3 LmFzcGVjdFswXTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAwOworfQorCitpbnQg ZmZfdmtfZGVjb2RlX3ByZXBhcmVfZnJhbWVfc2RyKEZGVnVsa2FuRGVjb2RlQ29udGV4dCAqZGVj LCBBVkZyYW1lICpwaWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZGVnVs a2FuRGVjb2RlUGljdHVyZSAqdmtwaWMsIGludCBpc19jdXJyZW50LAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBlbnVtIEZGVmtTaGFkZXJSZXBGb3JtYXQgcmVwX2ZtdCwgaW50 IGFsbG9jX2RwYikKK3sKKyAgICBpbnQgZXJyOworICAgIEZGVnVsa2FuRGVjb2RlU2hhcmVkICpj dHggPSBkZWMtPnNoYXJlZF9jdHg7CisgICAgQVZIV0ZyYW1lc0NvbnRleHQgKmZyYW1lcyA9IChB VkhXRnJhbWVzQ29udGV4dCAqKXBpYy0+aHdfZnJhbWVzX2N0eC0+ZGF0YTsKKworICAgIHZrcGlj LT5zbGljZXNfc2l6ZSA9IDA7CisKKyAgICBpZiAodmtwaWMtPnZpZXcucmVmWzBdKQorICAgICAg ICByZXR1cm4gMDsKKworICAgIGluaXRfZnJhbWUoZGVjLCB2a3BpYyk7CisKKyAgICBmb3IgKGlu dCBpID0gMDsgaSA8IGF2X3BpeF9mbXRfY291bnRfcGxhbmVzKGZyYW1lcy0+c3dfZm9ybWF0KTsg aSsrKSB7CisgICAgICAgIGlmIChhbGxvY19kcGIpIHsKKyAgICAgICAgICAgIHZrcGljLT5kcGJf ZnJhbWUgPSB2a19nZXRfZHBiX3Bvb2woY3R4KTsKKyAgICAgICAgICAgIGlmICghdmtwaWMtPmRw Yl9mcmFtZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOworCisgICAg ICAgICAgICBlcnIgPSBmZl92a19jcmVhdGVfaW1hZ2V2aWV3KCZjdHgtPnMsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ2a3BpYy0+dmlldy5yZWZbaV0sICZ2a3Bp Yy0+dmlldy5hc3BlY3RfcmVmW2ldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB2a3BpYy0+ZHBiX2ZyYW1lLCBpLCByZXBfZm10KTsKKyAgICAgICAgICAgIGlmIChl cnIgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybiBlcnI7CisKKyAgICAgICAgICAgIHZrcGlj LT52aWV3LmRzdFtpXSA9IHZrcGljLT52aWV3LnJlZltpXTsKKyAgICAgICAgfQorCisgICAgICAg IGlmICghYWxsb2NfZHBiIHx8IGlzX2N1cnJlbnQpIHsKKyAgICAgICAgICAgIGVyciA9IGZmX3Zr X2NyZWF0ZV9pbWFnZXZpZXcoJmN0eC0+cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJnZrcGljLT52aWV3Lm91dFtpXSwgJnZrcGljLT52aWV3LmFzcGVjdFtpXSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGljLCBpLCByZXBfZm10 KTsKKyAgICAgICAgICAgIGlmIChlcnIgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybiBlcnI7 CisKKyAgICAgICAgICAgIGlmICghYWxsb2NfZHBiKSB7CisgICAgICAgICAgICAgICAgdmtwaWMt PnZpZXcucmVmW2ldID0gdmtwaWMtPnZpZXcub3V0W2ldOworICAgICAgICAgICAgICAgIHZrcGlj LT52aWV3LmFzcGVjdF9yZWZbaV0gPSB2a3BpYy0+dmlldy5hc3BlY3RbaV07CisgICAgICAgICAg ICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworaW50IGZmX3ZrX2Rl Y29kZV9hZGRfc2xpY2UoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LCBGRlZ1bGthbkRlY29kZVBpY3R1 cmUgKnZwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqZGF0YSwg c2l6ZV90IHNpemUsIGludCBhZGRfc3RhcnRjb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgdWludDMyX3QgKm5iX3NsaWNlcywgY29uc3QgdWludDMyX3QgKipvZmZzZXRzKQoreworICAg IEZGVnVsa2FuRGVjb2RlQ29udGV4dCAqZGVjID0gYXZjdHgtPmludGVybmFsLT5od2FjY2VsX3By aXZfZGF0YTsKKyAgICBGRlZ1bGthbkRlY29kZVNoYXJlZCAqY3R4ID0gZGVjLT5zaGFyZWRfY3R4 OworCisgICAgc3RhdGljIGNvbnN0IHVpbnQ4X3Qgc3RhcnRjb2RlX3ByZWZpeFszXSA9IHsgMHgw LCAweDAsIDB4MSB9OworICAgIGNvbnN0IHNpemVfdCBzdGFydGNvZGVfbGVuID0gYWRkX3N0YXJ0 Y29kZSA/IHNpemVvZihzdGFydGNvZGVfcHJlZml4KSA6IDA7CisgICAgY29uc3QgaW50IG5iID0g bmJfc2xpY2VzID8gKm5iX3NsaWNlcyA6IDA7CisgICAgdWludDhfdCAqc2xpY2VzOworICAgIHVp bnQzMl90ICpzbGljZV9vZmY7CisgICAgRkZWa0J1ZmZlciAqdmtidWY7CisKKyAgICBzaXplX3Qg bmV3X3NpemUgPSB2cC0+c2xpY2VzX3NpemUgKyBzdGFydGNvZGVfbGVuICsgc2l6ZSArCisgICAg ICAgICAgICAgICAgICAgICAgY3R4LT5jYXBzLm1pbkJpdHN0cmVhbUJ1ZmZlclNpemVBbGlnbm1l bnQ7CisgICAgbmV3X3NpemUgPSBGRkFMSUdOKG5ld19zaXplLCBjdHgtPmNhcHMubWluQml0c3Ry ZWFtQnVmZmVyU2l6ZUFsaWdubWVudCk7CisKKyAgICBpZiAob2Zmc2V0cykgeworICAgICAgICBz bGljZV9vZmYgPSBhdl9mYXN0X3JlYWxsb2MoZGVjLT5zbGljZV9vZmYsICZkZWMtPnNsaWNlX29m Zl9tYXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmIgKyAxKSpzaXpl b2Yoc2xpY2Vfb2ZmKSk7CisgICAgICAgIGlmICghc2xpY2Vfb2ZmKQorICAgICAgICAgICAgcmV0 dXJuIEFWRVJST1IoRU5PTUVNKTsKKworICAgICAgICAqb2Zmc2V0cyA9IGRlYy0+c2xpY2Vfb2Zm ID0gc2xpY2Vfb2ZmOworCisgICAgICAgIHNsaWNlX29mZltuYl0gPSB2cC0+c2xpY2VzX3NpemU7 CisgICAgfQorCisgICAgdmtidWYgPSB2cC0+c2xpY2VzX2J1ZiA/IChGRlZrQnVmZmVyICopdnAt PnNsaWNlc19idWYtPmRhdGEgOiBOVUxMOworICAgIGlmICghdmtidWYgfHwgdmtidWYtPnNpemUg PCBuZXdfc2l6ZSkgeworICAgICAgICBpbnQgZXJyOworICAgICAgICBBVkJ1ZmZlclJlZiAqbmV3 X3JlZjsKKyAgICAgICAgRkZWa0J1ZmZlciAqbmV3X2J1ZjsKKworICAgICAgICAvKiBObyBwb2lu dCBpbiByZXF1ZXN0aW5nIGFueXRoaW5nIHNtYWxsZXIuICovCisgICAgICAgIHNpemVfdCBidWZf c2l6ZSA9IEZGTUFYKG5ld19zaXplLCAxMDI0KjEwMjQpOworCisgICAgICAgIC8qIEFsaWduIGJ1 ZmZlciB0byBuZWFyZXN0IHBvd2VyIG9mIHR3by4gTWFrZXMgZnJhZ21lbnRhdGlvbiBtYW5hZ2Vt ZW50CisgICAgICAgICAqIGVhc2llciwgYW5kIGdpdmVzIHVzIGFtcGxlIGhlYWRyb29tLiAqLwor ICAgICAgICBidWZfc2l6ZSA9IDIgPDwgYXZfbG9nMihidWZfc2l6ZSk7CisKKyAgICAgICAgZXJy ID0gZmZfdmtfZ2V0X3Bvb2xlZF9idWZmZXIoJmN0eC0+cywgJmN0eC0+YnVmX3Bvb2wsICZuZXdf cmVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBERUNPREVSX0lTX1NE UihhdmN0eC0+Y29kZWNfaWQpID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKFZLX0JVRkZFUl9VU0FHRV9TVE9SQUdFX0JVRkZFUl9CSVQgfAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgVktfQlVGRkVSX1VTQUdFX1NIQURFUl9ERVZJQ0VfQURE UkVTU19CSVQpIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfQlVG RkVSX1VTQUdFX1ZJREVPX0RFQ09ERV9TUkNfQklUX0tIUiwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY3R4LT5zLmh3ZmMtPmNyZWF0ZV9wbmV4dCwgYnVmX3NpemUsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZLX01FTU9SWV9QUk9QRVJUWV9I T1NUX1ZJU0lCTEVfQklUIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KERFQ09ERVJfSVNfU0RSKGF2Y3R4LT5jb2RlY19pZCkgPworICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgVktfTUVNT1JZX1BST1BFUlRZX0RFVklDRV9MT0NBTF9CSVQgOiAw eDApKTsKKyAgICAgICAgaWYgKGVyciA8IDApCisgICAgICAgICAgICByZXR1cm4gZXJyOworCisg ICAgICAgIG5ld19idWYgPSAoRkZWa0J1ZmZlciAqKW5ld19yZWYtPmRhdGE7CisKKyAgICAgICAg LyogQ29weSBkYXRhIGZyb20gdGhlIG9sZCBidWZmZXIgKi8KKyAgICAgICAgaWYgKHZrYnVmKSB7 CisgICAgICAgICAgICBtZW1jcHkobmV3X2J1Zi0+bWFwcGVkX21lbSwgdmtidWYtPm1hcHBlZF9t ZW0sIHZwLT5zbGljZXNfc2l6ZSk7CisgICAgICAgICAgICBhdl9idWZmZXJfdW5yZWYoJnZwLT5z bGljZXNfYnVmKTsKKyAgICAgICAgfQorCisgICAgICAgIHZwLT5zbGljZXNfYnVmID0gbmV3X3Jl ZjsKKyAgICAgICAgdmtidWYgPSBuZXdfYnVmOworICAgIH0KKyAgICBzbGljZXMgPSB2a2J1Zi0+ bWFwcGVkX21lbTsKKworICAgIC8qIFN0YXJ0Y29kZSAqLworICAgIG1lbWNweShzbGljZXMgKyB2 cC0+c2xpY2VzX3NpemUsIHN0YXJ0Y29kZV9wcmVmaXgsIHN0YXJ0Y29kZV9sZW4pOworCisgICAg LyogU2xpY2UgZGF0YSAqLworICAgIG1lbWNweShzbGljZXMgKyB2cC0+c2xpY2VzX3NpemUgKyBz dGFydGNvZGVfbGVuLCBkYXRhLCBzaXplKTsKKworICAgIGlmIChuYl9zbGljZXMpCisgICAgICAg ICpuYl9zbGljZXMgPSBuYiArIDE7CisKKyAgICB2cC0+c2xpY2VzX3NpemUgKz0gc3RhcnRjb2Rl X2xlbiArIHNpemU7CisKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBmZl92a19kZWNvZGVfZmx1 c2goQVZDb2RlY0NvbnRleHQgKmF2Y3R4KQoreworICAgIEZGVnVsa2FuRGVjb2RlQ29udGV4dCAq ZGVjID0gYXZjdHgtPmludGVybmFsLT5od2FjY2VsX3ByaXZfZGF0YTsKKyAgICBGRlZ1bGthbkRl Y29kZVNoYXJlZCAqY3R4ID0gZGVjLT5zaGFyZWRfY3R4OworCisgICAgRkZWdWxrYW5GdW5jdGlv bnMgKnZrID0gJmN0eC0+cy52a2ZuOworICAgIFZrVmlkZW9CZWdpbkNvZGluZ0luZm9LSFIgZGVj b2RlX3N0YXJ0ID0geworICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9WSURFT19C RUdJTl9DT0RJTkdfSU5GT19LSFIsCisgICAgICAgIC52aWRlb1Nlc3Npb24gPSBjdHgtPmNvbW1v bi5zZXNzaW9uLAorICAgICAgICAudmlkZW9TZXNzaW9uUGFyYW1ldGVycyA9IGN0eC0+ZW1wdHlf c2Vzc2lvbl9wYXJhbXMsCisgICAgfTsKKyAgICBWa1ZpZGVvQ29kaW5nQ29udHJvbEluZm9LSFIg ZGVjb2RlX2N0cmwgPSB7CisgICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX1ZJREVP X0NPRElOR19DT05UUk9MX0lORk9fS0hSLAorICAgICAgICAuZmxhZ3MgPSBWS19WSURFT19DT0RJ TkdfQ09OVFJPTF9SRVNFVF9CSVRfS0hSLAorICAgIH07CisgICAgVmtWaWRlb0VuZENvZGluZ0lu Zm9LSFIgZGVjb2RlX2VuZCA9IHsKKyAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVf VklERU9fRU5EX0NPRElOR19JTkZPX0tIUiwKKyAgICB9OworCisgICAgVmtDb21tYW5kQnVmZmVy IGNtZF9idWY7CisgICAgRkZWa0V4ZWNDb250ZXh0ICpleGVjOworCisgICAgLyogTm9uLXZpZGVv IHF1ZXVlcyBkbyBub3QgbmVlZCB0byBiZSByZXNldCAqLworICAgIGlmICghKGdldF9jb2RlY2Rl c2MoYXZjdHgtPmNvZGVjX2lkKS0+ZGVjb2RlX29wKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg ZXhlYyA9IGZmX3ZrX2V4ZWNfZ2V0KCZjdHgtPnMsICZjdHgtPmV4ZWNfcG9vbCk7CisgICAgZmZf dmtfZXhlY19zdGFydCgmY3R4LT5zLCBleGVjKTsKKyAgICBjbWRfYnVmID0gZXhlYy0+YnVmOwor CisgICAgdmstPkNtZEJlZ2luVmlkZW9Db2RpbmdLSFIoY21kX2J1ZiwgJmRlY29kZV9zdGFydCk7 CisgICAgdmstPkNtZENvbnRyb2xWaWRlb0NvZGluZ0tIUihjbWRfYnVmLCAmZGVjb2RlX2N0cmwp OworICAgIHZrLT5DbWRFbmRWaWRlb0NvZGluZ0tIUihjbWRfYnVmLCAmZGVjb2RlX2VuZCk7Cisg ICAgZmZfdmtfZXhlY19zdWJtaXQoJmN0eC0+cywgZXhlYyk7Cit9CisKK2ludCBmZl92a19kZWNv ZGVfZnJhbWUoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LAorICAgICAgICAgICAgICAgICAgICAgICBB VkZyYW1lICpwaWMsICAgIEZGVnVsa2FuRGVjb2RlUGljdHVyZSAqdnAsCisgICAgICAgICAgICAg ICAgICAgICAgIEFWRnJhbWUgKnJwaWNbXSwgRkZWdWxrYW5EZWNvZGVQaWN0dXJlICpydmtwW10p Cit7CisgICAgaW50IGVycjsKKyAgICBWa1Jlc3VsdCByZXQ7CisgICAgVmtDb21tYW5kQnVmZmVy IGNtZF9idWY7CisgICAgRkZWa0J1ZmZlciAqc2RfYnVmOworCisgICAgRkZWdWxrYW5EZWNvZGVD b250ZXh0ICpkZWMgPSBhdmN0eC0+aW50ZXJuYWwtPmh3YWNjZWxfcHJpdl9kYXRhOworICAgIEZG VnVsa2FuRGVjb2RlU2hhcmVkICpjdHggPSBkZWMtPnNoYXJlZF9jdHg7CisgICAgRkZWdWxrYW5G dW5jdGlvbnMgKnZrID0gJmN0eC0+cy52a2ZuOworCisgICAgLyogT3V0cHV0ICovCisgICAgQVZW a0ZyYW1lICp2a2YgPSAoQVZWa0ZyYW1lICopcGljLT5idWZbMF0tPmRhdGE7CisKKyAgICAvKiBR dWlya3MgKi8KKyAgICBjb25zdCBpbnQgbGF5ZXJlZF9kcGIgPSBjdHgtPmNvbW1vbi5sYXllcmVk X2RwYjsKKworICAgIFZrVmlkZW9CZWdpbkNvZGluZ0luZm9LSFIgZGVjb2RlX3N0YXJ0ID0gewor ICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9WSURFT19CRUdJTl9DT0RJTkdfSU5G T19LSFIsCisgICAgICAgIC52aWRlb1Nlc3Npb24gPSBjdHgtPmNvbW1vbi5zZXNzaW9uLAorICAg ICAgICAudmlkZW9TZXNzaW9uUGFyYW1ldGVycyA9IGRlYy0+c2Vzc2lvbl9wYXJhbXMgPworICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooKFZrVmlkZW9TZXNzaW9uUGFyYW1ldGVy c0tIUiAqKWRlYy0+c2Vzc2lvbl9wYXJhbXMtPmRhdGEpIDoKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBWS19OVUxMX0hBTkRMRSwKKyAgICAgICAgLnJlZmVyZW5jZVNsb3RDb3Vu dCA9IHZwLT5kZWNvZGVfaW5mby5yZWZlcmVuY2VTbG90Q291bnQsCisgICAgICAgIC5wUmVmZXJl bmNlU2xvdHMgPSB2cC0+ZGVjb2RlX2luZm8ucFJlZmVyZW5jZVNsb3RzLAorICAgIH07CisgICAg VmtWaWRlb0VuZENvZGluZ0luZm9LSFIgZGVjb2RlX2VuZCA9IHsKKyAgICAgICAgLnNUeXBlID0g VktfU1RSVUNUVVJFX1RZUEVfVklERU9fRU5EX0NPRElOR19JTkZPX0tIUiwKKyAgICB9OworCisg ICAgVmtJbWFnZU1lbW9yeUJhcnJpZXIyIGltZ19iYXJbMzddOworICAgIGludCBuYl9pbWdfYmFy ID0gMDsKKyAgICBzaXplX3QgZGF0YV9zaXplID0gRkZBTElHTih2cC0+c2xpY2VzX3NpemUsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT5jYXBzLm1pbkJpdHN0cmVhbUJ1ZmZl clNpemVBbGlnbm1lbnQpOworCisgICAgRkZWa0V4ZWNDb250ZXh0ICpleGVjID0gZmZfdmtfZXhl Y19nZXQoJmN0eC0+cywgJmN0eC0+ZXhlY19wb29sKTsKKworICAgIC8qIFRoZSBjdXJyZW50IGRl Y29kaW5nIHJlZmVyZW5jZSBoYXMgdG8gYmUgYm91bmQgYXMgYW4gaW5hY3RpdmUgcmVmZXJlbmNl ICovCisgICAgVmtWaWRlb1JlZmVyZW5jZVNsb3RJbmZvS0hSICpjdXJfdmtfcmVmOworICAgIGN1 cl92a19yZWYgPSAodm9pZCAqKSZkZWNvZGVfc3RhcnQucFJlZmVyZW5jZVNsb3RzW2RlY29kZV9z dGFydC5yZWZlcmVuY2VTbG90Q291bnRdOworICAgIGN1cl92a19yZWZbMF0gPSB2cC0+cmVmX3Ns b3Q7CisgICAgY3VyX3ZrX3JlZlswXS5zbG90SW5kZXggPSAtMTsKKyAgICBkZWNvZGVfc3RhcnQu cmVmZXJlbmNlU2xvdENvdW50Kys7CisKKyAgICBzZF9idWYgPSAoRkZWa0J1ZmZlciAqKXZwLT5z bGljZXNfYnVmLT5kYXRhOworCisgICAgLyogRmx1c2ggaWYgbmVlZGVkICovCisgICAgaWYgKCEo c2RfYnVmLT5mbGFncyAmIFZLX01FTU9SWV9QUk9QRVJUWV9IT1NUX0NPSEVSRU5UX0JJVCkpIHsK KyAgICAgICAgVmtNYXBwZWRNZW1vcnlSYW5nZSBmbHVzaF9idWYgPSB7CisgICAgICAgICAgICAu c1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9NQVBQRURfTUVNT1JZX1JBTkdFLAorICAgICAgICAg ICAgLm1lbW9yeSA9IHNkX2J1Zi0+bWVtLAorICAgICAgICAgICAgLm9mZnNldCA9IDAsCisgICAg ICAgICAgICAuc2l6ZSA9IEZGQUxJR04odnAtPnNsaWNlc19zaXplLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGN0eC0+cy5wcm9wcy5wcm9wZXJ0aWVzLmxpbWl0cy5ub25Db2hlcmVudEF0 b21TaXplKSwKKyAgICAgICAgfTsKKworICAgICAgICByZXQgPSB2ay0+Rmx1c2hNYXBwZWRNZW1v cnlSYW5nZXMoY3R4LT5zLmh3Y3R4LT5hY3RfZGV2LCAxLCAmZmx1c2hfYnVmKTsKKyAgICAgICAg aWYgKHJldCAhPSBWS19TVUNDRVNTKSB7CisgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xP R19FUlJPUiwgIkZhaWxlZCB0byBmbHVzaCBtZW1vcnk6ICVzXG4iLAorICAgICAgICAgICAgICAg ICAgIGZmX3ZrX3JldDJzdHIocmV0KSk7CisgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9FWFRF Uk5BTDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZwLT5kZWNvZGVfaW5mby5zcmNCdWZmZXIg ICAgICAgPSBzZF9idWYtPmJ1ZjsKKyAgICB2cC0+ZGVjb2RlX2luZm8uc3JjQnVmZmVyT2Zmc2V0 ID0gMDsKKyAgICB2cC0+ZGVjb2RlX2luZm8uc3JjQnVmZmVyUmFuZ2UgID0gZGF0YV9zaXplOwor CisgICAgLyogU3RhcnQgY29tbWFuZCBidWZmZXIgcmVjb3JkaW5nICovCisgICAgZXJyID0gZmZf dmtfZXhlY19zdGFydCgmY3R4LT5zLCBleGVjKTsKKyAgICBpZiAoZXJyIDwgMCkKKyAgICAgICAg cmV0dXJuIGVycjsKKyAgICBjbWRfYnVmID0gZXhlYy0+YnVmOworCisgICAgLyogU2xpY2VzICov CisgICAgZXJyID0gZmZfdmtfZXhlY19hZGRfZGVwX2J1ZigmY3R4LT5zLCBleGVjLCAmdnAtPnNs aWNlc19idWYsIDEsIDApOworICAgIGlmIChlcnIgPCAwKQorICAgICAgICByZXR1cm4gZXJyOwor ICAgIHZwLT5zbGljZXNfYnVmID0gTlVMTDsgLyogT3duZWQgYnkgdGhlIGV4ZWMgYnVmZmVyIGZy b20gbm93IG9uICovCisKKyAgICAvKiBQYXJhbWV0ZXJzICovCisgICAgZXJyID0gZmZfdmtfZXhl Y19hZGRfZGVwX2J1ZigmY3R4LT5zLCBleGVjLCAmZGVjLT5zZXNzaW9uX3BhcmFtcywgMSwgMSk7 CisgICAgaWYgKGVyciA8IDApCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICBlcnIgPSBmZl92 a19leGVjX2FkZF9kZXBfZnJhbWUoJmN0eC0+cywgZXhlYywgcGljLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBWS19QSVBFTElORV9TVEFHRV8yX1ZJREVPX0RFQ09ERV9CSVRf S0hSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19QSVBFTElORV9TVEFH RV8yX1ZJREVPX0RFQ09ERV9CSVRfS0hSKTsKKyAgICBpZiAoZXJyIDwgMCkKKyAgICAgICAgcmV0 dXJuIGVycjsKKworICAgIGVyciA9IGZmX3ZrX2V4ZWNfbWlycm9yX3NlbV92YWx1ZSgmY3R4LT5z LCBleGVjLCAmdnAtPnNlbSwgJnZwLT5zZW1fdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHBpYyk7CisgICAgaWYgKGVyciA8IDApCisgICAgICAgIHJldHVybiBl cnI7CisKKyAgICAvKiBPdXRwdXQgaW1hZ2UgLSBjaGFuZ2UgbGF5b3V0LCBhcyBpdCBjb21lcyBm cm9tIGEgcG9vbCAqLworICAgIGltZ19iYXJbbmJfaW1nX2Jhcl0gPSAoVmtJbWFnZU1lbW9yeUJh cnJpZXIyKSB7CisgICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX0lNQUdFX01FTU9S WV9CQVJSSUVSXzIsCisgICAgICAgIC5wTmV4dCA9IE5VTEwsCisgICAgICAgIC5zcmNTdGFnZU1h c2sgPSBWS19QSVBFTElORV9TVEFHRV8yX1ZJREVPX0RFQ09ERV9CSVRfS0hSLAorICAgICAgICAu ZHN0U3RhZ2VNYXNrID0gVktfUElQRUxJTkVfU1RBR0VfMl9WSURFT19ERUNPREVfQklUX0tIUiwK KyAgICAgICAgLnNyY0FjY2Vzc01hc2sgPSBWS19BQ0NFU1NfMl9OT05FLAorICAgICAgICAuZHN0 QWNjZXNzTWFzayA9IFZLX0FDQ0VTU18yX1ZJREVPX0RFQ09ERV9XUklURV9CSVRfS0hSLAorICAg ICAgICAub2xkTGF5b3V0ID0gdmtmLT5sYXlvdXRbMF0sCisgICAgICAgIC5uZXdMYXlvdXQgPSAo bGF5ZXJlZF9kcGIgfHwgdnAtPmRwYl9mcmFtZSkgPworICAgICAgICAgICAgICAgICAgICAgVktf SU1BR0VfTEFZT1VUX1ZJREVPX0RFQ09ERV9EU1RfS0hSIDoKKyAgICAgICAgICAgICAgICAgICAg IFZLX0lNQUdFX0xBWU9VVF9WSURFT19ERUNPREVfRFBCX0tIUiwgLyogU3BlYywgMDcyNTIgdXR0 ZXIgbWFkbmVzcyAqLworICAgICAgICAuc3JjUXVldWVGYW1pbHlJbmRleCA9IHZrZi0+cXVldWVf ZmFtaWx5WzBdLAorICAgICAgICAuZHN0UXVldWVGYW1pbHlJbmRleCA9IFZLX1FVRVVFX0ZBTUlM WV9JR05PUkVELAorICAgICAgICAuaW1hZ2UgPSB2a2YtPmltZ1swXSwKKyAgICAgICAgLnN1YnJl c291cmNlUmFuZ2UgPSAoVmtJbWFnZVN1YnJlc291cmNlUmFuZ2UpIHsKKyAgICAgICAgICAgIC5h c3BlY3RNYXNrID0gdnAtPnZpZXcuYXNwZWN0WzBdLAorICAgICAgICAgICAgLmxheWVyQ291bnQg PSAxLAorICAgICAgICAgICAgLmxldmVsQ291bnQgPSAxLAorICAgICAgICB9LAorICAgIH07Cisg ICAgZmZfdmtfZXhlY191cGRhdGVfZnJhbWUoJmN0eC0+cywgZXhlYywgcGljLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICZpbWdfYmFyW25iX2ltZ19iYXJdLCAmbmJfaW1nX2Jhcik7CisK KyAgICAvKiBSZWZlcmVuY2UgZm9yIHRoZSBjdXJyZW50IGltYWdlLCBpZiBleGlzdGluZyBhbmQg bm90IGxheWVyZWQgKi8KKyAgICBpZiAodnAtPmRwYl9mcmFtZSkgeworICAgICAgICBlcnIgPSBm Zl92a19leGVjX2FkZF9kZXBfZnJhbWUoJmN0eC0+cywgZXhlYywgdnAtPmRwYl9mcmFtZSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZLX1BJUEVMSU5FX1NUQUdFXzJf VklERU9fREVDT0RFX0JJVF9LSFIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBWS19QSVBFTElORV9TVEFHRV8yX1ZJREVPX0RFQ09ERV9CSVRfS0hSKTsKKyAgICAgICAg aWYgKGVyciA8IDApCisgICAgICAgICAgICByZXR1cm4gZXJyOworICAgIH0KKworICAgIGlmICgh bGF5ZXJlZF9kcGIpIHsKKyAgICAgICAgLyogQWxsIHJlZmVyZW5jZXMgKGFwYXJ0IGZyb20gdGhl IGN1cnJlbnQpIGZvciBub24tbGF5ZXJlZCByZWZzICovCisKKyAgICAgICAgZm9yIChpbnQgaSA9 IDA7IGkgPCB2cC0+ZGVjb2RlX2luZm8ucmVmZXJlbmNlU2xvdENvdW50OyBpKyspIHsKKyAgICAg ICAgICAgIEFWRnJhbWUgKnJlZl9mcmFtZSA9IHJwaWNbaV07CisgICAgICAgICAgICBGRlZ1bGth bkRlY29kZVBpY3R1cmUgKnJ2cCA9IHJ2a3BbaV07CisgICAgICAgICAgICBBVkZyYW1lICpyZWYg PSBydnAtPmRwYl9mcmFtZSA/IHJ2cC0+ZHBiX2ZyYW1lIDogcmVmX2ZyYW1lOworCisgICAgICAg ICAgICBlcnIgPSBmZl92a19leGVjX2FkZF9kZXBfZnJhbWUoJmN0eC0+cywgZXhlYywgcmVmLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZLX1BJUEVMSU5FX1NU QUdFXzJfVklERU9fREVDT0RFX0JJVF9LSFIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgVktfUElQRUxJTkVfU1RBR0VfMl9WSURFT19ERUNPREVfQklUX0tIUik7 CisgICAgICAgICAgICBpZiAoZXJyIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyOwor CisgICAgICAgICAgICBpZiAoZXJyID09IDApIHsKKyAgICAgICAgICAgICAgICBlcnIgPSBmZl92 a19leGVjX21pcnJvcl9zZW1fdmFsdWUoJmN0eC0+cywgZXhlYywKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnJ2cC0+c2VtLCAmcnZwLT5zZW1fdmFs dWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl Zik7CisgICAgICAgICAgICAgICAgaWYgKGVyciA8IDApCisgICAgICAgICAgICAgICAgICAgIHJl dHVybiBlcnI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghcnZwLT5kcGJfZnJh bWUpIHsKKyAgICAgICAgICAgICAgICBBVlZrRnJhbWUgKnJ2a2YgPSAoQVZWa0ZyYW1lICopcmVm LT5kYXRhWzBdOworCisgICAgICAgICAgICAgICAgaW1nX2JhcltuYl9pbWdfYmFyXSA9IChWa0lt YWdlTWVtb3J5QmFycmllcjIpIHsKKyAgICAgICAgICAgICAgICAgICAgLnNUeXBlID0gVktfU1RS VUNUVVJFX1RZUEVfSU1BR0VfTUVNT1JZX0JBUlJJRVJfMiwKKyAgICAgICAgICAgICAgICAgICAg LnBOZXh0ID0gTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgLnNyY1N0YWdlTWFzayA9IFZLX1BJ UEVMSU5FX1NUQUdFXzJfVklERU9fREVDT0RFX0JJVF9LSFIsCisgICAgICAgICAgICAgICAgICAg IC5kc3RTdGFnZU1hc2sgPSBWS19QSVBFTElORV9TVEFHRV8yX1ZJREVPX0RFQ09ERV9CSVRfS0hS LAorICAgICAgICAgICAgICAgICAgICAuc3JjQWNjZXNzTWFzayA9IFZLX0FDQ0VTU18yX05PTkUs CisgICAgICAgICAgICAgICAgICAgIC5kc3RBY2Nlc3NNYXNrID0gVktfQUNDRVNTXzJfVklERU9f REVDT0RFX1JFQURfQklUX0tIUiB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgVktfQUNDRVNTXzJfVklERU9fREVDT0RFX1dSSVRFX0JJVF9LSFIsCisgICAgICAgICAgICAg ICAgICAgIC5vbGRMYXlvdXQgPSBydmtmLT5sYXlvdXRbMF0sCisgICAgICAgICAgICAgICAgICAg IC5uZXdMYXlvdXQgPSBWS19JTUFHRV9MQVlPVVRfVklERU9fREVDT0RFX0RQQl9LSFIsCisgICAg ICAgICAgICAgICAgICAgIC5zcmNRdWV1ZUZhbWlseUluZGV4ID0gcnZrZi0+cXVldWVfZmFtaWx5 WzBdLAorICAgICAgICAgICAgICAgICAgICAuZHN0UXVldWVGYW1pbHlJbmRleCA9IFZLX1FVRVVF X0ZBTUlMWV9JR05PUkVELAorICAgICAgICAgICAgICAgICAgICAuaW1hZ2UgPSBydmtmLT5pbWdb MF0sCisgICAgICAgICAgICAgICAgICAgIC5zdWJyZXNvdXJjZVJhbmdlID0gKFZrSW1hZ2VTdWJy ZXNvdXJjZVJhbmdlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAuYXNwZWN0TWFzayA9IHJ2 cC0+dmlldy5hc3BlY3RfcmVmWzBdLAorICAgICAgICAgICAgICAgICAgICAgICAgLmxheWVyQ291 bnQgPSAxLAorICAgICAgICAgICAgICAgICAgICAgICAgLmxldmVsQ291bnQgPSAxLAorICAgICAg ICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgZmZf dmtfZXhlY191cGRhdGVfZnJhbWUoJmN0eC0+cywgZXhlYywgcmVmLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICZpbWdfYmFyW25iX2ltZ19iYXJdLCAmbmJfaW1nX2Jh cik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKHZwLT5kZWNvZGVf aW5mby5yZWZlcmVuY2VTbG90Q291bnQgfHwKKyAgICAgICAgICAgICAgIHZwLT52aWV3Lm91dFsw XSAhPSB2cC0+dmlldy5yZWZbMF0pIHsKKyAgICAgICAgLyogU2luZ2xlIGJhcnJpZXIgZm9yIGEg c2luZ2xlIGxheWVyZWQgcmVmICovCisgICAgICAgIGVyciA9IGZmX3ZrX2V4ZWNfYWRkX2RlcF9m cmFtZSgmY3R4LT5zLCBleGVjLCBjdHgtPmNvbW1vbi5sYXllcmVkX2ZyYW1lLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfUElQRUxJTkVfU1RBR0VfMl9WSURFT19E RUNPREVfQklUX0tIUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZL X1BJUEVMSU5FX1NUQUdFXzJfVklERU9fREVDT0RFX0JJVF9LSFIpOworICAgICAgICBpZiAoZXJy IDwgMCkKKyAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgfQorCisgICAgLyogQ2hhbmdlIGlt YWdlIGxheW91dCAqLworICAgIHZrLT5DbWRQaXBlbGluZUJhcnJpZXIyKGNtZF9idWYsICYoVmtE ZXBlbmRlbmN5SW5mbykgeworICAgICAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVf REVQRU5ERU5DWV9JTkZPLAorICAgICAgICAgICAgLmRlcGVuZGVuY3lGbGFncyA9IFZLX0RFUEVO REVOQ1lfQllfUkVHSU9OX0JJVCwKKyAgICAgICAgICAgIC5wSW1hZ2VNZW1vcnlCYXJyaWVycyA9 IGltZ19iYXIsCisgICAgICAgICAgICAuaW1hZ2VNZW1vcnlCYXJyaWVyQ291bnQgPSBuYl9pbWdf YmFyLAorICAgICAgICB9KTsKKworICAgIC8qIFN0YXJ0LCB1c2UgcGFyYW1ldGVycywgZGVjb2Rl IGFuZCBlbmQgZGVjb2RpbmcgKi8KKyAgICB2ay0+Q21kQmVnaW5WaWRlb0NvZGluZ0tIUihjbWRf YnVmLCAmZGVjb2RlX3N0YXJ0KTsKKyAgICB2ay0+Q21kRGVjb2RlVmlkZW9LSFIoY21kX2J1Ziwg JnZwLT5kZWNvZGVfaW5mbyk7CisgICAgdmstPkNtZEVuZFZpZGVvQ29kaW5nS0hSKGNtZF9idWYs ICZkZWNvZGVfZW5kKTsKKworICAgIC8qIEVuZCByZWNvcmRpbmcgYW5kIHN1Ym1pdCBmb3IgZXhl Y3V0aW9uICovCisgICAgcmV0dXJuIGZmX3ZrX2V4ZWNfc3VibWl0KCZjdHgtPnMsIGV4ZWMpOwor fQorCit2b2lkIGZmX3ZrX2RlY29kZV9mcmVlX2ZyYW1lKEFWSFdEZXZpY2VDb250ZXh0ICpkZXZf Y3R4LCBGRlZ1bGthbkRlY29kZVBpY3R1cmUgKnZwKQoreworICAgIEFWVnVsa2FuRGV2aWNlQ29u dGV4dCAqaHdjdHggPSBkZXZfY3R4LT5od2N0eDsKKworICAgIFZrU2VtYXBob3JlV2FpdEluZm8g c2VtX3dhaXQgPSAoVmtTZW1hcGhvcmVXYWl0SW5mbykgeworICAgICAgICAuc1R5cGUgPSBWS19T VFJVQ1RVUkVfVFlQRV9TRU1BUEhPUkVfV0FJVF9JTkZPLAorICAgICAgICAucFNlbWFwaG9yZXMg PSAmdnAtPnNlbSwKKyAgICAgICAgLnBWYWx1ZXMgPSAmdnAtPnNlbV92YWx1ZSwKKyAgICAgICAg LnNlbWFwaG9yZUNvdW50ID0gMSwKKyAgICB9OworCisgICAgLyogV2UgZG8gbm90IGhhdmUgdG8g bG9jayB0aGUgZnJhbWUgaGVyZSBiZWNhdXNlIHdlJ3JlIG5vdCBpbnRlcmVzdGVkCisgICAgICog aW4gdGhlIGFjdHVhbCBjdXJyZW50IHNlbWFwaG9yZSB2YWx1ZSwgYnV0IG9ubHkgdGhhdCBpdCdz IGxhdGVyIHRoYW4KKyAgICAgKiB0aGUgdGltZSB3ZSBzdWJtaXR0ZWQgdGhlIGltYWdlIGZvciBk ZWNvZGluZy4gKi8KKyAgICBpZiAodnAtPnNlbSkKKyAgICAgICAgdnAtPndhaXRfc2VtYXBob3Jl cyhod2N0eC0+YWN0X2RldiwgJnNlbV93YWl0LCBVSU5UNjRfTUFYKTsKKworICAgIC8qIEZyZWUg c2xpY2VzIGRhdGEgKi8KKyAgICBhdl9idWZmZXJfdW5yZWYoJnZwLT5zbGljZXNfYnVmKTsKKwor ICAgIC8qIERlc3Ryb3kgaW1hZ2UgdmlldyAob3V0KSAqLworICAgIGZvciAoaW50IGkgPSAwOyBp IDwgQVZfTlVNX0RBVEFfUE9JTlRFUlM7IGkrKykgeworICAgICAgICBpZiAodnAtPnZpZXcub3V0 W2ldICYmIHZwLT52aWV3Lm91dFtpXSAhPSB2cC0+dmlldy5kc3RbaV0pCisgICAgICAgICAgICB2 cC0+ZGVzdHJveV9pbWFnZV92aWV3KGh3Y3R4LT5hY3RfZGV2LCB2cC0+dmlldy5vdXRbaV0sIGh3 Y3R4LT5hbGxvYyk7CisKKyAgICAgICAgLyogRGVzdHJveSBpbWFnZSB2aWV3IChyZWYsIHVubGF5 ZXJlZCkgKi8KKyAgICAgICAgaWYgKHZwLT52aWV3LmRzdFtpXSkKKyAgICAgICAgICAgIHZwLT5k ZXN0cm95X2ltYWdlX3ZpZXcoaHdjdHgtPmFjdF9kZXYsIHZwLT52aWV3LmRzdFtpXSwgaHdjdHgt PmFsbG9jKTsKKyAgICB9CisKKyAgICBhdl9mcmFtZV9mcmVlKCZ2cC0+ZHBiX2ZyYW1lKTsKK30K Kworc3RhdGljIHZvaWQgZnJlZV9jb21tb24oQVZSZWZTdHJ1Y3RPcGFxdWUgdW51c2VkLCB2b2lk ICpvYmopCit7CisgICAgRkZWdWxrYW5EZWNvZGVTaGFyZWQgKmN0eCA9IG9iajsKKyAgICBGRlZ1 bGthbkNvbnRleHQgKnMgPSAmY3R4LT5zOworICAgIEZGVnVsa2FuRnVuY3Rpb25zICp2ayA9ICZj dHgtPnMudmtmbjsKKworICAgIC8qIFdhaXQgb24gYW5kIGZyZWUgZXhlY3V0aW9uIHBvb2wgKi8K KyAgICBmZl92a19leGVjX3Bvb2xfZnJlZSgmY3R4LT5zLCAmY3R4LT5leGVjX3Bvb2wpOworCisg ICAgLyogVGhpcyBhbHNvIGZyZWVzIGFsbCByZWZlcmVuY2VzIGZyb20gdGhpcyBwb29sICovCisg ICAgYXZfZnJhbWVfZnJlZSgmY3R4LT5jb21tb24ubGF5ZXJlZF9mcmFtZSk7CisKKyAgICAvKiBE ZXN0cm95IHBhcmFtZXRlcnMgKi8KKyAgICBpZiAoY3R4LT5lbXB0eV9zZXNzaW9uX3BhcmFtcykK KyAgICAgICAgdmstPkRlc3Ryb3lWaWRlb1Nlc3Npb25QYXJhbWV0ZXJzS0hSKHMtPmh3Y3R4LT5h Y3RfZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4 LT5lbXB0eV9zZXNzaW9uX3BhcmFtcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHMtPmh3Y3R4LT5hbGxvYyk7CisKKyAgICBhdl9idWZmZXJfcG9vbF91bmlu aXQoJmN0eC0+YnVmX3Bvb2wpOworCisgICAgZmZfdmtfdmlkZW9fY29tbW9uX3VuaW5pdChzLCAm Y3R4LT5jb21tb24pOworCisgICAgaWYgKGN0eC0+c2RfY3R4X2ZyZWUpCisgICAgICAgIGN0eC0+ c2RfY3R4X2ZyZWUoY3R4KTsKKworICAgIGZmX3ZrX3VuaW5pdChzKTsKK30KKworc3RhdGljIGlu dCB2dWxrYW5fZGVjb2RlX2Jvb3RzdHJhcChBVkNvZGVjQ29udGV4dCAqYXZjdHgsIEFWQnVmZmVy UmVmICpmcmFtZXNfcmVmKQoreworICAgIGludCBlcnI7CisgICAgRkZWdWxrYW5EZWNvZGVDb250 ZXh0ICpkZWMgPSBhdmN0eC0+aW50ZXJuYWwtPmh3YWNjZWxfcHJpdl9kYXRhOworICAgIGNvbnN0 IEZGVnVsa2FuRGVjb2RlRGVzY3JpcHRvciAqdmtfZGVzYyA9IGdldF9jb2RlY2Rlc2MoYXZjdHgt PmNvZGVjX2lkKTsKKyAgICBBVkhXRnJhbWVzQ29udGV4dCAqZnJhbWVzID0gKEFWSFdGcmFtZXND b250ZXh0ICopZnJhbWVzX3JlZi0+ZGF0YTsKKyAgICBBVkhXRGV2aWNlQ29udGV4dCAqZGV2aWNl ID0gKEFWSFdEZXZpY2VDb250ZXh0ICopZnJhbWVzLT5kZXZpY2VfcmVmLT5kYXRhOworICAgIEFW VnVsa2FuRGV2aWNlQ29udGV4dCAqaHdjdHggPSBkZXZpY2UtPmh3Y3R4OworICAgIEZGVnVsa2Fu RGVjb2RlU2hhcmVkICpjdHg7CisKKyAgICBpZiAoZGVjLT5zaGFyZWRfY3R4KQorICAgICAgICBy ZXR1cm4gMDsKKworICAgIGRlYy0+c2hhcmVkX2N0eCA9IGF2X3JlZnN0cnVjdF9hbGxvY19leHQo c2l6ZW9mKCpjdHgpLCAwLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZnJlZV9jb21tb24pOworICAgIGlmICghZGVjLT5zaGFyZWRfY3R4KQorICAg ICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOworCisgICAgY3R4ID0gZGVjLT5zaGFyZWRfY3R4 OworCisgICAgY3R4LT5zLmV4dGVuc2lvbnMgPSBmZl92a19leHRlbnNpb25zX3RvX21hc2soaHdj dHgtPmVuYWJsZWRfZGV2X2V4dGVuc2lvbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaHdjdHgtPm5iX2VuYWJsZWRfZGV2X2V4dGVuc2lvbnMpOwor CisgICAgaWYgKHZrX2Rlc2MtPnF1ZXVlX2ZsYWdzICYgVktfUVVFVUVfVklERU9fREVDT0RFX0JJ VF9LSFIpIHsKKyAgICAgICAgaWYgKCEoY3R4LT5zLmV4dGVuc2lvbnMgJiBGRl9WS19FWFRfVklE RU9fREVDT0RFX1FVRVVFKSkgeworICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJS T1IsICJEZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGUgJXMgZXh0ZW5zaW9uIVxuIiwKKyAgICAg ICAgICAgICAgICAgICBWS19LSFJfVklERU9fREVDT0RFX1FVRVVFX0VYVEVOU0lPTl9OQU1FKTsK KyAgICAgICAgICAgIGF2X3JlZnN0cnVjdF91bnJlZigmZGVjLT5zaGFyZWRfY3R4KTsKKyAgICAg ICAgICAgIHJldHVybiBBVkVSUk9SKEVOT1NZUyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBl cnIgPSBmZl92a19sb2FkX2Z1bmN0aW9ucyhkZXZpY2UsICZjdHgtPnMudmtmbiwgY3R4LT5zLmV4 dGVuc2lvbnMsIDEsIDEpOworICAgIGlmIChlcnIgPCAwKSB7CisgICAgICAgIGF2X3JlZnN0cnVj dF91bnJlZigmZGVjLT5zaGFyZWRfY3R4KTsKKyAgICAgICAgcmV0dXJuIGVycjsKKyAgICB9CisK KyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIFZrUmVzdWx0IHZ1bGthbl9zZXR1cF9wcm9maWxl KEFWQ29kZWNDb250ZXh0ICphdmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBGRlZ1bGthbkRlY29kZVByb2ZpbGVEYXRhICpwcm9mLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEFWVnVsa2FuRGV2aWNlQ29udGV4dCAqaHdjdHgsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkZWdWxrYW5GdW5jdGlvbnMgKnZrLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZGVnVsa2FuRGVjb2RlRGVz Y3JpcHRvciAqdmtfZGVzYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBW a1ZpZGVvRGVjb2RlSDI2NENhcGFiaWxpdGllc0tIUiAqaDI2NF9jYXBzLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFZrVmlkZW9EZWNvZGVIMjY1Q2FwYWJpbGl0aWVzS0hS ICpoMjY1X2NhcHMsCisjaWYgQ09ORklHX1ZQOV9WVUxLQU5fSFdBQ0NFTAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFZrVmlkZW9EZWNvZGVWUDlDYXBhYmlsaXRpZXNLSFIg KnZwOV9jYXBzLAorI2VuZGlmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg VmtWaWRlb0RlY29kZUFWMUNhcGFiaWxpdGllc0tIUiAqYXYxX2NhcHMsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgVmtWaWRlb0NhcGFiaWxpdGllc0tIUiAqY2FwcywKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWa1ZpZGVvRGVjb2RlQ2FwYWJpbGl0 aWVzS0hSICpkZWNfY2FwcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp bnQgY3VyX3Byb2ZpbGUpCit7CisgICAgVmtWaWRlb0RlY29kZVVzYWdlSW5mb0tIUiAqdXNhZ2Ug PSAmcHJvZi0+dXNhZ2U7CisgICAgVmtWaWRlb1Byb2ZpbGVJbmZvS0hSICpwcm9maWxlID0gJnBy b2YtPnByb2ZpbGU7CisgICAgVmtWaWRlb1Byb2ZpbGVMaXN0SW5mb0tIUiAqcHJvZmlsZV9saXN0 ID0gJnByb2YtPnByb2ZpbGVfbGlzdDsKKworICAgIFZrVmlkZW9EZWNvZGVIMjY0UHJvZmlsZUlu Zm9LSFIgKmgyNjRfcHJvZmlsZSA9ICZwcm9mLT5oMjY0X3Byb2ZpbGU7CisgICAgVmtWaWRlb0Rl Y29kZUgyNjVQcm9maWxlSW5mb0tIUiAqaDI2NV9wcm9maWxlID0gJnByb2YtPmgyNjVfcHJvZmls ZTsKKyNpZiBDT05GSUdfVlA5X1ZVTEtBTl9IV0FDQ0VMCisgICAgVmtWaWRlb0RlY29kZVZQOVBy b2ZpbGVJbmZvS0hSICp2cDlfcHJvZmlsZSAgPSAmcHJvZi0+dnA5X3Byb2ZpbGU7CisjZW5kaWYK KyAgICBWa1ZpZGVvRGVjb2RlQVYxUHJvZmlsZUluZm9LSFIgKmF2MV9wcm9maWxlICA9ICZwcm9m LT5hdjFfcHJvZmlsZTsKKworICAgIGNvbnN0IEFWUGl4Rm10RGVzY3JpcHRvciAqZGVzYyA9IGF2 X3BpeF9mbXRfZGVzY19nZXQoYXZjdHgtPnN3X3BpeF9mbXQpOworICAgIGlmICghZGVzYykKKyAg ICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKKworICAgIGlmIChhdmN0eC0+Y29kZWNfaWQg PT0gQVZfQ09ERUNfSURfSDI2NCkgeworICAgICAgICBkZWNfY2Fwcy0+cE5leHQgPSBoMjY0X2Nh cHM7CisgICAgICAgIHVzYWdlLT5wTmV4dCA9IGgyNjRfcHJvZmlsZTsKKyAgICAgICAgaDI2NF9w cm9maWxlLT5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX1ZJREVPX0RFQ09ERV9IMjY0X1BST0ZJ TEVfSU5GT19LSFI7CisKKyAgICAgICAgLyogVnVsa2FuIHRyYW5zbWl0cyBhbGwgdGhlIGNvbnN0 cmFudF9zZXQgZmxhZ3MsIHJhdGhlciB0aGFuIHdhbnRpbmcgdGhlbQorICAgICAgICAgKiBtZXJn ZWQgaW4gdGhlIHByb2ZpbGUgSURDICovCisgICAgICAgIGgyNjRfcHJvZmlsZS0+c3RkUHJvZmls ZUlkYyA9IGN1cl9wcm9maWxlICYgfihBVl9QUk9GSUxFX0gyNjRfQ09OU1RSQUlORUQgfAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVZfUFJP RklMRV9IMjY0X0lOVFJBKTsKKworICAgICAgICBoMjY0X3Byb2ZpbGUtPnBpY3R1cmVMYXlvdXQg PSBhdmN0eC0+ZmllbGRfb3JkZXIgPT0gQVZfRklFTERfVU5LTk9XTiB8fAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBhdmN0eC0+ZmllbGRfb3JkZXIgPT0gQVZfRklFTERf UFJPR1JFU1NJVkUgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19W SURFT19ERUNPREVfSDI2NF9QSUNUVVJFX0xBWU9VVF9QUk9HUkVTU0lWRV9LSFIgOgorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19WSURFT19ERUNPREVfSDI2NF9QSUNU VVJFX0xBWU9VVF9JTlRFUkxBQ0VEX0lOVEVSTEVBVkVEX0xJTkVTX0JJVF9LSFI7CisgICAgfSBl bHNlIGlmIChhdmN0eC0+Y29kZWNfaWQgPT0gQVZfQ09ERUNfSURfSDI2NSkgeworICAgICAgICBk ZWNfY2Fwcy0+cE5leHQgPSBoMjY1X2NhcHM7CisgICAgICAgIHVzYWdlLT5wTmV4dCA9IGgyNjVf cHJvZmlsZTsKKyAgICAgICAgaDI2NV9wcm9maWxlLT5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBF X1ZJREVPX0RFQ09ERV9IMjY1X1BST0ZJTEVfSU5GT19LSFI7CisgICAgICAgIGgyNjVfcHJvZmls ZS0+c3RkUHJvZmlsZUlkYyA9IGN1cl9wcm9maWxlOworI2lmIENPTkZJR19WUDlfVlVMS0FOX0hX QUNDRUwKKyAgICB9IGVsc2UgaWYgKGF2Y3R4LT5jb2RlY19pZCA9PSBBVl9DT0RFQ19JRF9WUDkp IHsKKyAgICAgICAgZGVjX2NhcHMtPnBOZXh0ID0gdnA5X2NhcHM7CisgICAgICAgIHVzYWdlLT5w TmV4dCA9IHZwOV9wcm9maWxlOworICAgICAgICB2cDlfcHJvZmlsZS0+c1R5cGUgPSBWS19TVFJV Q1RVUkVfVFlQRV9WSURFT19ERUNPREVfVlA5X1BST0ZJTEVfSU5GT19LSFI7CisgICAgICAgIHZw OV9wcm9maWxlLT5zdGRQcm9maWxlID0gY3VyX3Byb2ZpbGU7CisjZW5kaWYKKyAgICB9IGVsc2Ug aWYgKGF2Y3R4LT5jb2RlY19pZCA9PSBBVl9DT0RFQ19JRF9BVjEpIHsKKyAgICAgICAgZGVjX2Nh cHMtPnBOZXh0ID0gYXYxX2NhcHM7CisgICAgICAgIHVzYWdlLT5wTmV4dCA9IGF2MV9wcm9maWxl OworICAgICAgICBhdjFfcHJvZmlsZS0+c1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9WSURFT19E RUNPREVfQVYxX1BST0ZJTEVfSU5GT19LSFI7CisgICAgICAgIGF2MV9wcm9maWxlLT5zdGRQcm9m aWxlID0gY3VyX3Byb2ZpbGU7CisgICAgICAgIGF2MV9wcm9maWxlLT5maWxtR3JhaW5TdXBwb3J0 ID0gIShhdmN0eC0+ZXhwb3J0X3NpZGVfZGF0YSAmIEFWX0NPREVDX0VYUE9SVF9EQVRBX0ZJTE1f R1JBSU4pOworICAgIH0KKworICAgIHVzYWdlLT5zVHlwZSAgICAgICAgICAgPSBWS19TVFJVQ1RV UkVfVFlQRV9WSURFT19ERUNPREVfVVNBR0VfSU5GT19LSFI7CisgICAgdXNhZ2UtPnZpZGVvVXNh Z2VIaW50cyA9IFZLX1ZJREVPX0RFQ09ERV9VU0FHRV9ERUZBVUxUX0tIUjsKKworICAgIHByb2Zp bGUtPnNUeXBlICAgICAgICAgICAgICAgPSBWS19TVFJVQ1RVUkVfVFlQRV9WSURFT19QUk9GSUxF X0lORk9fS0hSOworICAgIHByb2ZpbGUtPnBOZXh0ICAgICAgICAgICAgICAgPSB1c2FnZTsKKyAg ICBwcm9maWxlLT52aWRlb0NvZGVjT3BlcmF0aW9uID0gdmtfZGVzYy0+ZGVjb2RlX29wOworICAg IHByb2ZpbGUtPmNocm9tYVN1YnNhbXBsaW5nICAgPSBmZl92a19zdWJzYW1wbGluZ19mcm9tX2F2 X2Rlc2MoZGVzYyk7CisgICAgcHJvZmlsZS0+bHVtYUJpdERlcHRoICAgICAgICA9IGZmX3ZrX2Rl cHRoX2Zyb21fYXZfZGVwdGgoZGVzYy0+Y29tcFswXS5kZXB0aCk7CisgICAgcHJvZmlsZS0+Y2hy b21hQml0RGVwdGggICAgICA9IHByb2ZpbGUtPmx1bWFCaXREZXB0aDsKKworICAgIHByb2ZpbGVf bGlzdC0+c1R5cGUgICAgICAgID0gVktfU1RSVUNUVVJFX1RZUEVfVklERU9fUFJPRklMRV9MSVNU X0lORk9fS0hSOworICAgIHByb2ZpbGVfbGlzdC0+cHJvZmlsZUNvdW50ID0gMTsKKyAgICBwcm9m aWxlX2xpc3QtPnBQcm9maWxlcyAgICA9IHByb2ZpbGU7CisKKyAgICAvKiBHZXQgdGhlIGNhcGFi aWxpdGllcyBvZiB0aGUgZGVjb2RlciBmb3IgdGhlIGdpdmVuIHByb2ZpbGUgKi8KKyAgICBjYXBz LT5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX1ZJREVPX0NBUEFCSUxJVElFU19LSFI7CisgICAg Y2Fwcy0+cE5leHQgPSBkZWNfY2FwczsKKyAgICBkZWNfY2Fwcy0+c1R5cGUgPSBWS19TVFJVQ1RV UkVfVFlQRV9WSURFT19ERUNPREVfQ0FQQUJJTElUSUVTX0tIUjsKKyAgICAvKiBkZWNfY2Fwcy0+ cE5leHQgYWxyZWFkeSBmaWxsZWQgaW4gKi8KKworICAgIHJldHVybiB2ay0+R2V0UGh5c2ljYWxE ZXZpY2VWaWRlb0NhcGFiaWxpdGllc0tIUihod2N0eC0+cGh5c19kZXYsIHByb2ZpbGUsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcHMpOwor fQorCitzdGF0aWMgaW50IHZ1bGthbl9kZWNvZGVfZ2V0X3Byb2ZpbGUoQVZDb2RlY0NvbnRleHQg KmF2Y3R4LCBBVkJ1ZmZlclJlZiAqZnJhbWVzX3JlZiwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBlbnVtIEFWUGl4ZWxGb3JtYXQgKnBpeF9mbXQsIFZrRm9ybWF0ICp2a19m bXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkZWdWxrYW5EZWNvZGVQ cm9maWxlRGF0YSAqcHJvZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp bnQgKmRwYl9kZWRpY2F0ZSkKK3sKKyAgICBWa1Jlc3VsdCByZXQ7CisgICAgaW50IG1heF9sZXZl bCwgYmFzZV9wcm9maWxlLCBjdXJfcHJvZmlsZTsKKyAgICBjb25zdCBGRlZ1bGthbkRlY29kZURl c2NyaXB0b3IgKnZrX2Rlc2MgPSBnZXRfY29kZWNkZXNjKGF2Y3R4LT5jb2RlY19pZCk7CisgICAg QVZIV0ZyYW1lc0NvbnRleHQgKmZyYW1lcyA9IChBVkhXRnJhbWVzQ29udGV4dCAqKWZyYW1lc19y ZWYtPmRhdGE7CisgICAgQVZIV0RldmljZUNvbnRleHQgKmRldmljZSA9IChBVkhXRGV2aWNlQ29u dGV4dCAqKWZyYW1lcy0+ZGV2aWNlX3JlZi0+ZGF0YTsKKyAgICBBVlZ1bGthbkRldmljZUNvbnRl eHQgKmh3Y3R4ID0gZGV2aWNlLT5od2N0eDsKKyAgICBlbnVtIEFWUGl4ZWxGb3JtYXQgc291cmNl X2Zvcm1hdDsKKyAgICBlbnVtIEFWUGl4ZWxGb3JtYXQgYmVzdF9mb3JtYXQ7CisgICAgVmtGb3Jt YXQgYmVzdF92a2ZtdDsKKworICAgIEZGVnVsa2FuRGVjb2RlQ29udGV4dCAqZGVjID0gYXZjdHgt PmludGVybmFsLT5od2FjY2VsX3ByaXZfZGF0YTsKKyAgICBGRlZ1bGthbkRlY29kZVNoYXJlZCAq Y3R4ID0gZGVjLT5zaGFyZWRfY3R4OworICAgIEZGVnVsa2FuRnVuY3Rpb25zICp2ayA9ICZjdHgt PnMudmtmbjsKKworICAgIFZrVmlkZW9DYXBhYmlsaXRpZXNLSFIgKmNhcHMgPSAmY3R4LT5jYXBz OworICAgIFZrVmlkZW9EZWNvZGVDYXBhYmlsaXRpZXNLSFIgKmRlY19jYXBzID0gJmN0eC0+ZGVj X2NhcHM7CisKKyAgICBWa1ZpZGVvRGVjb2RlSDI2NENhcGFiaWxpdGllc0tIUiBoMjY0X2NhcHMg PSB7CisgICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX1ZJREVPX0RFQ09ERV9IMjY0 X0NBUEFCSUxJVElFU19LSFIsCisgICAgfTsKKyAgICBWa1ZpZGVvRGVjb2RlSDI2NUNhcGFiaWxp dGllc0tIUiBoMjY1X2NhcHMgPSB7CisgICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBF X1ZJREVPX0RFQ09ERV9IMjY1X0NBUEFCSUxJVElFU19LSFIsCisgICAgfTsKKyNpZiBDT05GSUdf VlA5X1ZVTEtBTl9IV0FDQ0VMCisgICAgVmtWaWRlb0RlY29kZVZQOUNhcGFiaWxpdGllc0tIUiB2 cDlfY2FwcyA9IHsKKyAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfVklERU9fREVD T0RFX1ZQOV9DQVBBQklMSVRJRVNfS0hSLAorICAgIH07CisjZW5kaWYKKyAgICBWa1ZpZGVvRGVj b2RlQVYxQ2FwYWJpbGl0aWVzS0hSIGF2MV9jYXBzID0geworICAgICAgICAuc1R5cGUgPSBWS19T VFJVQ1RVUkVfVFlQRV9WSURFT19ERUNPREVfQVYxX0NBUEFCSUxJVElFU19LSFIsCisgICAgfTsK KworICAgIFZrUGh5c2ljYWxEZXZpY2VWaWRlb0Zvcm1hdEluZm9LSFIgZm10X2luZm8gPSB7Cisg ICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX1BIWVNJQ0FMX0RFVklDRV9WSURFT19G T1JNQVRfSU5GT19LSFIsCisgICAgICAgIC5wTmV4dCA9ICZwcm9mLT5wcm9maWxlX2xpc3QsCisg ICAgfTsKKyAgICBWa1ZpZGVvRm9ybWF0UHJvcGVydGllc0tIUiAqcmV0X2luZm87CisgICAgdWlu dDMyX3QgbmJfb3V0X2ZtdHMgPSAwOworCisgICAgaWYgKCEodmtfZGVzYy0+ZGVjb2RlX2V4dGVu c2lvbiAmIGN0eC0+cy5leHRlbnNpb25zKSkgeworICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xP R19FUlJPUiwgIkRldmljZSBkb2VzIG5vdCBzdXBwb3J0IGRlY29kaW5nICVzIVxuIiwKKyAgICAg ICAgICAgICAgIGF2Y29kZWNfZ2V0X25hbWUoYXZjdHgtPmNvZGVjX2lkKSk7CisgICAgICAgIHJl dHVybiBBVkVSUk9SKEVOT1NZUyk7CisgICAgfQorCisgICAgY3VyX3Byb2ZpbGUgPSBhdmN0eC0+ cHJvZmlsZTsKKyAgICBiYXNlX3Byb2ZpbGUgPSBhdmN0eC0+Y29kZWNfaWQgPT0gQVZfQ09ERUNf SURfSDI2NCA/IEFWX1BST0ZJTEVfSDI2NF9DT05TVFJBSU5FRF9CQVNFTElORSA6CisgICAgICAg ICAgICAgICAgICAgYXZjdHgtPmNvZGVjX2lkID09IEFWX0NPREVDX0lEX0gyNjUgPyBBVl9QUk9G SUxFX0hFVkNfTUFJTiA6CisjaWYgQ09ORklHX1ZQOV9WVUxLQU5fSFdBQ0NFTAorICAgICAgICAg ICAgICAgICAgIGF2Y3R4LT5jb2RlY19pZCA9PSBBVl9DT0RFQ19JRF9WUDkgID8gU1REX1ZJREVP X1ZQOV9QUk9GSUxFXzAgOgorI2VuZGlmCisgICAgICAgICAgICAgICAgICAgYXZjdHgtPmNvZGVj X2lkID09IEFWX0NPREVDX0lEX0FWMSAgPyBTVERfVklERU9fQVYxX1BST0ZJTEVfTUFJTiA6Cisg ICAgICAgICAgICAgICAgICAgMDsKKworICAgIHJldCA9IHZ1bGthbl9zZXR1cF9wcm9maWxlKGF2 Y3R4LCBwcm9mLCBod2N0eCwgdmssIHZrX2Rlc2MsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJmgyNjRfY2FwcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaDI2NV9j YXBzLAorI2lmIENPTkZJR19WUDlfVlVMS0FOX0hXQUNDRUwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAmdnA5X2NhcHMsCisjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAmYXYxX2NhcHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FwcywKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNfY2FwcywKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjdXJfcHJvZmlsZSk7CisgICAgaWYgKHJldCA9PSBWS19FUlJPUl9WSURF T19QUk9GSUxFX09QRVJBVElPTl9OT1RfU1VQUE9SVEVEX0tIUiAmJgorICAgICAgICBhdmN0eC0+ ZmxhZ3MgJiBBVl9IV0FDQ0VMX0ZMQUdfQUxMT1dfUFJPRklMRV9NSVNNQVRDSCAmJgorICAgICAg ICBhdmN0eC0+cHJvZmlsZSAhPSBiYXNlX3Byb2ZpbGUpIHsKKyAgICAgICAgYXZfbG9nKGF2Y3R4 LCBBVl9MT0dfVkVSQk9TRSwgIiVzIHByb2ZpbGUgJXMgbm90IHN1cHBvcnRlZCwgYXR0ZW1wdGlu ZyAiCisgICAgICAgICAgICAgICAiYWdhaW4gd2l0aCBwcm9maWxlICVzXG4iLAorICAgICAgICAg ICAgICAgYXZjb2RlY19nZXRfbmFtZShhdmN0eC0+Y29kZWNfaWQpLAorICAgICAgICAgICAgICAg YXZjb2RlY19wcm9maWxlX25hbWUoYXZjdHgtPmNvZGVjX2lkLCBjdXJfcHJvZmlsZSksCisgICAg ICAgICAgICAgICBhdmNvZGVjX3Byb2ZpbGVfbmFtZShhdmN0eC0+Y29kZWNfaWQsIGJhc2VfcHJv ZmlsZSkpOworICAgICAgICBjdXJfcHJvZmlsZSA9IGJhc2VfcHJvZmlsZTsKKyAgICAgICAgcmV0 ID0gdnVsa2FuX3NldHVwX3Byb2ZpbGUoYXZjdHgsIHByb2YsIGh3Y3R4LCB2aywgdmtfZGVzYywK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmgyNjRfY2FwcywKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJmgyNjVfY2FwcywKKyNpZiBDT05GSUdfVlA5X1ZV TEtBTl9IV0FDQ0VMCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ2cDlfY2Fw cywKKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYXYxX2NhcHMs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcHMsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGRlY19jYXBzLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjdXJfcHJvZmlsZSk7CisgICAgfQorCisgICAgaWYgKHJldCA9PSBWS19FUlJP Ul9WSURFT19QUk9GSUxFX09QRVJBVElPTl9OT1RfU1VQUE9SVEVEX0tIUikgeworICAgICAgICBh dl9sb2coYXZjdHgsIEFWX0xPR19WRVJCT1NFLCAiVW5hYmxlIHRvIGluaXRpYWxpemUgdmlkZW8g c2Vzc2lvbjogIgorICAgICAgICAgICAgICAgIiVzIHByb2ZpbGUgXCIlc1wiIG5vdCBzdXBwb3J0 ZWQhXG4iLAorICAgICAgICAgICAgICAgYXZjb2RlY19nZXRfbmFtZShhdmN0eC0+Y29kZWNfaWQp LAorICAgICAgICAgICAgICAgYXZjb2RlY19wcm9maWxlX25hbWUoYXZjdHgtPmNvZGVjX2lkLCBj dXJfcHJvZmlsZSkpOworICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOworICAgIH0gZWxz ZSBpZiAocmV0ID09IFZLX0VSUk9SX1ZJREVPX1BST0ZJTEVfRk9STUFUX05PVF9TVVBQT1JURURf S0hSKSB7CisgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX1ZFUkJPU0UsICJVbmFibGUgdG8g aW5pdGlhbGl6ZSB2aWRlbyBzZXNzaW9uOiAiCisgICAgICAgICAgICAgICAiZm9ybWF0ICglcykg bm90IHN1cHBvcnRlZCFcbiIsCisgICAgICAgICAgICAgICBhdl9nZXRfcGl4X2ZtdF9uYW1lKGF2 Y3R4LT5zd19waXhfZm10KSk7CisgICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7CisgICAg fSBlbHNlIGlmIChyZXQgPT0gVktfRVJST1JfRkVBVFVSRV9OT1RfUFJFU0VOVCB8fAorICAgICAg ICAgICAgICAgcmV0ID09IFZLX0VSUk9SX0ZPUk1BVF9OT1RfU1VQUE9SVEVEKSB7CisgICAgICAg IHJldHVybiBBVkVSUk9SKEVJTlZBTCk7CisgICAgfSBlbHNlIGlmIChyZXQgIT0gVktfU1VDQ0VT UykgeworICAgICAgICByZXR1cm4gQVZFUlJPUl9FWFRFUk5BTDsKKyAgICB9CisKKyAgICBtYXhf bGV2ZWwgPSBhdmN0eC0+Y29kZWNfaWQgPT0gQVZfQ09ERUNfSURfSDI2NCA/IGZmX3ZrX2gyNjRf bGV2ZWxfdG9fYXYoaDI2NF9jYXBzLm1heExldmVsSWRjKSA6CisgICAgICAgICAgICAgICAgYXZj dHgtPmNvZGVjX2lkID09IEFWX0NPREVDX0lEX0gyNjUgPyBmZl92a19oMjY1X2xldmVsX3RvX2F2 KGgyNjVfY2Fwcy5tYXhMZXZlbElkYykgOgorI2lmIENPTkZJR19WUDlfVlVMS0FOX0hXQUNDRUwK KyAgICAgICAgICAgICAgICBhdmN0eC0+Y29kZWNfaWQgPT0gQVZfQ09ERUNfSURfVlA5ICA/IHZw OV9jYXBzLm1heExldmVsIDoKKyNlbmRpZgorICAgICAgICAgICAgICAgIGF2Y3R4LT5jb2RlY19p ZCA9PSBBVl9DT0RFQ19JRF9BVjEgID8gYXYxX2NhcHMubWF4TGV2ZWwgOgorICAgICAgICAgICAg ICAgIDA7CisKKyAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19WRVJCT1NFLCAiRGVjb2RlciBjYXBh YmlsaXRpZXMgZm9yICVzIHByb2ZpbGUgXCIlc1wiOlxuIiwKKyAgICAgICAgICAgYXZjb2RlY19n ZXRfbmFtZShhdmN0eC0+Y29kZWNfaWQpLAorICAgICAgICAgICBhdmNvZGVjX3Byb2ZpbGVfbmFt ZShhdmN0eC0+Y29kZWNfaWQsIGN1cl9wcm9maWxlKSk7CisgICAgYXZfbG9nKGF2Y3R4LCBBVl9M T0dfVkVSQk9TRSwgIiAgICBNYXhpbXVtIGxldmVsOiAlaSAoc3RyZWFtICVpKVxuIiwKKyAgICAg ICAgICAgbWF4X2xldmVsLCBhdmN0eC0+bGV2ZWwpOworICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9H X1ZFUkJPU0UsICIgICAgV2lkdGg6IGZyb20gJWkgdG8gJWlcbiIsCisgICAgICAgICAgIGNhcHMt Pm1pbkNvZGVkRXh0ZW50LndpZHRoLCBjYXBzLT5tYXhDb2RlZEV4dGVudC53aWR0aCk7CisgICAg YXZfbG9nKGF2Y3R4LCBBVl9MT0dfVkVSQk9TRSwgIiAgICBIZWlnaHQ6IGZyb20gJWkgdG8gJWlc biIsCisgICAgICAgICAgIGNhcHMtPm1pbkNvZGVkRXh0ZW50LmhlaWdodCwgY2Fwcy0+bWF4Q29k ZWRFeHRlbnQuaGVpZ2h0KTsKKyAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19WRVJCT1NFLCAiICAg IFdpZHRoIGFsaWdubWVudDogJWlcbiIsCisgICAgICAgICAgIGNhcHMtPnBpY3R1cmVBY2Nlc3NH cmFudWxhcml0eS53aWR0aCk7CisgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfVkVSQk9TRSwgIiAg ICBIZWlnaHQgYWxpZ25tZW50OiAlaVxuIiwKKyAgICAgICAgICAgY2Fwcy0+cGljdHVyZUFjY2Vz c0dyYW51bGFyaXR5LmhlaWdodCk7CisgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfVkVSQk9TRSwg IiAgICBCaXRzdHJlYW0gb2Zmc2V0IGFsaWdubWVudDogJSJQUkl1NjQiXG4iLAorICAgICAgICAg ICBjYXBzLT5taW5CaXRzdHJlYW1CdWZmZXJPZmZzZXRBbGlnbm1lbnQpOworICAgIGF2X2xvZyhh dmN0eCwgQVZfTE9HX1ZFUkJPU0UsICIgICAgQml0c3RyZWFtIHNpemUgYWxpZ25tZW50OiAlIlBS SXU2NCJcbiIsCisgICAgICAgICAgIGNhcHMtPm1pbkJpdHN0cmVhbUJ1ZmZlclNpemVBbGlnbm1l bnQpOworICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX1ZFUkJPU0UsICIgICAgTWF4aW11bSByZWZl cmVuY2VzOiAldVxuIiwKKyAgICAgICAgICAgY2Fwcy0+bWF4RHBiU2xvdHMpOworICAgIGF2X2xv ZyhhdmN0eCwgQVZfTE9HX1ZFUkJPU0UsICIgICAgTWF4aW11bSBhY3RpdmUgcmVmZXJlbmNlczog JXVcbiIsCisgICAgICAgICAgIGNhcHMtPm1heEFjdGl2ZVJlZmVyZW5jZVBpY3R1cmVzKTsKKyAg ICBhdl9sb2coYXZjdHgsIEFWX0xPR19WRVJCT1NFLCAiICAgIENvZGVjIGhlYWRlciBuYW1lOiAn JXMnIChkcml2ZXIpLCAnJXMnIChjb21waWxlZClcbiIsCisgICAgICAgICAgIGNhcHMtPnN0ZEhl YWRlclZlcnNpb24uZXh0ZW5zaW9uTmFtZSwKKyAgICAgICAgICAgdmtfZGVzYy0+ZXh0X3Byb3Bz LmV4dGVuc2lvbk5hbWUpOworICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX1ZFUkJPU0UsICIgICAg Q29kZWMgaGVhZGVyIHZlcnNpb246ICVpLiVpLiVpIChkcml2ZXIpLCAlaS4laS4laSAoY29tcGls ZWQpXG4iLAorICAgICAgICAgICBDT0RFQ19WRVIoY2Fwcy0+c3RkSGVhZGVyVmVyc2lvbi5zcGVj VmVyc2lvbiksCisgICAgICAgICAgIENPREVDX1ZFUih2a19kZXNjLT5leHRfcHJvcHMuc3BlY1Zl cnNpb24pKTsKKyAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19WRVJCT1NFLCAiICAgIERlY29kZSBt b2RlczolcyVzJXNcbiIsCisgICAgICAgICAgIGRlY19jYXBzLT5mbGFncyA/ICIiIDoKKyAgICAg ICAgICAgICAgICIgaW52YWxpZCIsCisgICAgICAgICAgIGRlY19jYXBzLT5mbGFncyAmIFZLX1ZJ REVPX0RFQ09ERV9DQVBBQklMSVRZX0RQQl9BTkRfT1VUUFVUX0NPSU5DSURFX0JJVF9LSFIgPwor ICAgICAgICAgICAgICAgIiByZXVzZV9kc3RfZHBiIiA6ICIiLAorICAgICAgICAgICBkZWNfY2Fw cy0+ZmxhZ3MgJiBWS19WSURFT19ERUNPREVfQ0FQQUJJTElUWV9EUEJfQU5EX09VVFBVVF9ESVNU SU5DVF9CSVRfS0hSID8KKyAgICAgICAgICAgICAgICIgZGVkaWNhdGVkX2RwYiIgOiAiIik7Cisg ICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfVkVSQk9TRSwgIiAgICBDYXBhYmlsaXR5IGZsYWdzOiVz JXMlc1xuIiwKKyAgICAgICAgICAgY2Fwcy0+ZmxhZ3MgPyAiIiA6CisgICAgICAgICAgICAgICAi IG5vbmUiLAorICAgICAgICAgICBjYXBzLT5mbGFncyAmIFZLX1ZJREVPX0NBUEFCSUxJVFlfUFJP VEVDVEVEX0NPTlRFTlRfQklUX0tIUiA/CisgICAgICAgICAgICAgICAiIHByb3RlY3RlZCIgOiAi IiwKKyAgICAgICAgICAgY2Fwcy0+ZmxhZ3MgJiBWS19WSURFT19DQVBBQklMSVRZX1NFUEFSQVRF X1JFRkVSRU5DRV9JTUFHRVNfQklUX0tIUiA/CisgICAgICAgICAgICAgICAiIHNlcGFyYXRlX3Jl ZmVyZW5jZXMiIDogIiIpOworCisgICAgLyogQ2hlY2sgaWYgZGVjb2RpbmcgaXMgcG9zc2libGUg d2l0aCB0aGUgZ2l2ZW4gcGFyYW1ldGVycyAqLworICAgIGlmIChhdmN0eC0+Y29kZWRfd2lkdGgg IDwgY2Fwcy0+bWluQ29kZWRFeHRlbnQud2lkdGggICB8fAorICAgICAgICBhdmN0eC0+Y29kZWRf aGVpZ2h0IDwgY2Fwcy0+bWluQ29kZWRFeHRlbnQuaGVpZ2h0ICB8fAorICAgICAgICBhdmN0eC0+ Y29kZWRfd2lkdGggID4gY2Fwcy0+bWF4Q29kZWRFeHRlbnQud2lkdGggICB8fAorICAgICAgICBh dmN0eC0+Y29kZWRfaGVpZ2h0ID4gY2Fwcy0+bWF4Q29kZWRFeHRlbnQuaGVpZ2h0KQorICAgICAg ICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOworCisgICAgaWYgKCEoYXZjdHgtPmh3YWNjZWxfZmxh Z3MgJiBBVl9IV0FDQ0VMX0ZMQUdfSUdOT1JFX0xFVkVMKSAmJgorICAgICAgICBhdmN0eC0+bGV2 ZWwgPiBtYXhfbGV2ZWwpCisgICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7CisKKyAgICAv KiBTb21lIGJhc2ljIHNhbml0eSBjaGVja2luZyAqLworICAgIGlmICghKGRlY19jYXBzLT5mbGFn cyAmIChWS19WSURFT19ERUNPREVfQ0FQQUJJTElUWV9EUEJfQU5EX09VVFBVVF9DT0lOQ0lERV9C SVRfS0hSIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfVklERU9fREVDT0RFX0NB UEFCSUxJVFlfRFBCX0FORF9PVVRQVVRfRElTVElOQ1RfQklUX0tIUikpKSB7CisgICAgICAgIGF2 X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiQnVnZ3kgZHJpdmVyIHNpZ25hbHMgaW52YWxpZCBk ZWNvZGluZyBtb2RlOiBuZWl0aGVyICIKKyAgICAgICAgICAgICAgICJWS19WSURFT19ERUNPREVf Q0FQQUJJTElUWV9EUEJfQU5EX09VVFBVVF9DT0lOQ0lERV9CSVRfS0hSIG5vciAiCisgICAgICAg ICAgICAgICAiVktfVklERU9fREVDT0RFX0NBUEFCSUxJVFlfRFBCX0FORF9PVVRQVVRfRElTVElO Q1RfQklUX0tIUiBhcmUgc2V0IVxuIik7CisgICAgICAgIHJldHVybiBBVkVSUk9SX0VYVEVSTkFM OworICAgIH0gZWxzZSBpZiAoKGRlY19jYXBzLT5mbGFncyAmIChWS19WSURFT19ERUNPREVfQ0FQ QUJJTElUWV9EUEJfQU5EX09VVFBVVF9DT0lOQ0lERV9CSVRfS0hSIHwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgVktfVklERU9fREVDT0RFX0NBUEFCSUxJVFlfRFBCX0FORF9P VVRQVVRfRElTVElOQ1RfQklUX0tIUikgPT0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgVktfVklERU9fREVDT0RFX0NBUEFCSUxJVFlfRFBCX0FORF9PVVRQVVRfQ09JTkNJREVf QklUX0tIUikgJiYKKyAgICAgICAgICAgICAgICEoY2Fwcy0+ZmxhZ3MgJiBWS19WSURFT19DQVBB QklMSVRZX1NFUEFSQVRFX1JFRkVSRU5DRV9JTUFHRVNfQklUX0tIUikpIHsKKyAgICAgICAgYXZf bG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJDYW5ub3QgaW5pdGlhbGl6ZSBWdWxrYW4gZGVjb2Rp bmcgc2Vzc2lvbiwgYnVnZ3kgZHJpdmVyOiAiCisgICAgICAgICAgICAgICAiVktfVklERU9fREVD T0RFX0NBUEFCSUxJVFlfRFBCX0FORF9PVVRQVVRfQ09JTkNJREVfQklUX0tIUiBzZXQgIgorICAg ICAgICAgICAgICAgImJ1dCBWS19WSURFT19DQVBBQklMSVRZX1NFUEFSQVRFX1JFRkVSRU5DRV9J TUFHRVNfQklUX0tIUiBpcyB1bnNldCFcbiIpOworICAgICAgICByZXR1cm4gQVZFUlJPUl9FWFRF Uk5BTDsKKyAgICB9CisKKyAgICBkZWMtPmRlZGljYXRlZF9kcGIgPSAhKGRlY19jYXBzLT5mbGFn cyAmIFZLX1ZJREVPX0RFQ09ERV9DQVBBQklMSVRZX0RQQl9BTkRfT1VUUFVUX0NPSU5DSURFX0JJ VF9LSFIpOworICAgIGN0eC0+Y29tbW9uLmxheWVyZWRfZHBiID0gIWRlYy0+ZGVkaWNhdGVkX2Rw YiA/IDAgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIShjYXBzLT5mbGFncyAmIFZL X1ZJREVPX0NBUEFCSUxJVFlfU0VQQVJBVEVfUkVGRVJFTkNFX0lNQUdFU19CSVRfS0hSKTsKKwor ICAgIGlmIChkZWMtPmRlZGljYXRlZF9kcGIpIHsKKyAgICAgICAgZm10X2luZm8uaW1hZ2VVc2Fn ZSA9IFZLX0lNQUdFX1VTQUdFX1ZJREVPX0RFQ09ERV9EUEJfQklUX0tIUjsKKyAgICB9IGVsc2Ug eworICAgICAgICBmbXRfaW5mby5pbWFnZVVzYWdlID0gVktfSU1BR0VfVVNBR0VfVklERU9fREVD T0RFX0RQQl9CSVRfS0hSIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZLX0lNQUdF X1VTQUdFX1ZJREVPX0RFQ09ERV9EU1RfQklUX0tIUiB8CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBWS19JTUFHRV9VU0FHRV9UUkFOU0ZFUl9TUkNfQklUICAgICAgICAgfAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgVktfSU1BR0VfVVNBR0VfU0FNUExFRF9CSVQ7CisKKyAg ICAgICAgaWYgKGN0eC0+cy5leHRlbnNpb25zICYgKEZGX1ZLX0VYVF9WSURFT19FTkNPREVfUVVF VUUgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkZfVktfRVhUX1ZJREVPX01B SU5URU5BTkNFXzEpKQorICAgICAgICAgICAgZm10X2luZm8uaW1hZ2VVc2FnZSB8PSBWS19JTUFH RV9VU0FHRV9WSURFT19FTkNPREVfU1JDX0JJVF9LSFI7CisgICAgfQorCisgICAgLyogR2V0IHRo ZSBmb3JtYXQgb2YgdGhlIGltYWdlcyBuZWNlc3NhcnkgKi8KKyAgICByZXQgPSB2ay0+R2V0UGh5 c2ljYWxEZXZpY2VWaWRlb0Zvcm1hdFByb3BlcnRpZXNLSFIoaHdjdHgtPnBoeXNfZGV2LAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZm10 X2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICZuYl9vdXRfZm10cywgTlVMTCk7CisgICAgaWYgKHJldCA9PSBWS19FUlJPUl9GT1JN QVRfTk9UX1NVUFBPUlRFRCB8fAorICAgICAgICAoIW5iX291dF9mbXRzICYmIHJldCA9PSBWS19T VUNDRVNTKSkgeworICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOworICAgIH0gZWxzZSBp ZiAocmV0ICE9IFZLX1NVQ0NFU1MpIHsKKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJS T1IsICJVbmFibGUgdG8gZ2V0IFZ1bGthbiBmb3JtYXQgcHJvcGVydGllczogJXMhXG4iLAorICAg ICAgICAgICAgICAgZmZfdmtfcmV0MnN0cihyZXQpKTsKKyAgICAgICAgcmV0dXJuIEFWRVJST1Jf RVhURVJOQUw7CisgICAgfQorCisgICAgcmV0X2luZm8gPSBhdl9tYWxsb2N6KHNpemVvZigqcmV0 X2luZm8pKm5iX291dF9mbXRzKTsKKyAgICBpZiAoIXJldF9pbmZvKQorICAgICAgICByZXR1cm4g QVZFUlJPUihFTk9NRU0pOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuYl9vdXRfZm10czsg aSsrKQorICAgICAgICByZXRfaW5mb1tpXS5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX1ZJREVP X0ZPUk1BVF9QUk9QRVJUSUVTX0tIUjsKKworICAgIHJldCA9IHZrLT5HZXRQaHlzaWNhbERldmlj ZVZpZGVvRm9ybWF0UHJvcGVydGllc0tIUihod2N0eC0+cGh5c19kZXYsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmbXRfaW5mbywKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5i X291dF9mbXRzLCByZXRfaW5mbyk7CisgICAgaWYgKHJldCA9PSBWS19FUlJPUl9GT1JNQVRfTk9U X1NVUFBPUlRFRCB8fAorICAgICAgICAoIW5iX291dF9mbXRzICYmIHJldCA9PSBWS19TVUNDRVNT KSkgeworICAgICAgICBhdl9mcmVlKHJldF9pbmZvKTsKKyAgICAgICAgcmV0dXJuIEFWRVJST1Io RUlOVkFMKTsKKyAgICB9IGVsc2UgaWYgKHJldCAhPSBWS19TVUNDRVNTKSB7CisgICAgICAgIGF2 X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiVW5hYmxlIHRvIGdldCBWdWxrYW4gZm9ybWF0IHBy b3BlcnRpZXM6ICVzIVxuIiwKKyAgICAgICAgICAgICAgIGZmX3ZrX3JldDJzdHIocmV0KSk7Cisg ICAgICAgIGF2X2ZyZWUocmV0X2luZm8pOworICAgICAgICByZXR1cm4gQVZFUlJPUl9FWFRFUk5B TDsKKyAgICB9CisKKyAgICAvKiBGaW5kIGEgZm9ybWF0IHRvIHVzZSAqLworICAgICpwaXhfZm10 ID0gYmVzdF9mb3JtYXQgPSBBVl9QSVhfRk1UX05PTkU7CisgICAgKnZrX2ZtdCAgPSBiZXN0X3Zr Zm10ID0gVktfRk9STUFUX1VOREVGSU5FRDsKKyAgICBzb3VyY2VfZm9ybWF0ID0gYXZjdHgtPnN3 X3BpeF9mbXQ7CisKKyAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19ERUJVRywgIkNob29zaW5nIGJl c3QgcGl4ZWwgZm9ybWF0IGZvciBkZWNvZGluZyBmcm9tICVpOlxuIiwgbmJfb3V0X2ZtdHMpOwor ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmJfb3V0X2ZtdHM7IGkrKykgeworICAgICAgICBlbnVt IEFWUGl4ZWxGb3JtYXQgdG1wID0gZmZfdmtfcGl4X2ZtdF9mcm9tX3ZrZm10KHJldF9pbmZvW2ld LmZvcm1hdCk7CisgICAgICAgIGlmICh0bXAgPT0gQVZfUElYX0ZNVF9OT05FKSB7CisgICAgICAg ICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19XQVJOSU5HLCAiSW52YWxpZC91bmtub3duIFZ1bGth biBmb3JtYXQgJWkhXG4iLCByZXRfaW5mb1tpXS5mb3JtYXQpOworICAgICAgICAgICAgY29udGlu dWU7CisgICAgICAgIH0KKworICAgICAgICBiZXN0X2Zvcm1hdCA9IGF2X2ZpbmRfYmVzdF9waXhf Zm10X29mXzIodG1wLCBiZXN0X2Zvcm1hdCwgc291cmNlX2Zvcm1hdCwgMCwgTlVMTCk7CisgICAg ICAgIGlmICh0bXAgPT0gYmVzdF9mb3JtYXQpCisgICAgICAgICAgICBiZXN0X3ZrZm10ID0gcmV0 X2luZm9baV0uZm9ybWF0OworCisgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0RFQlVHLCAi ICAgICVzJXMgKFZ1bGthbiBJRDogJWkpXG4iLAorICAgICAgICAgICAgICAgYXZfZ2V0X3BpeF9m bXRfbmFtZSh0bXApLCB0bXAgPT0gYmVzdF9mb3JtYXQgPyAiKiIgOiAiIiwKKyAgICAgICAgICAg ICAgIHJldF9pbmZvW2ldLmZvcm1hdCk7CisgICAgfQorCisgICAgYXZfZnJlZShyZXRfaW5mbyk7 CisKKyAgICBpZiAoYmVzdF9mb3JtYXQgPT0gQVZfUElYX0ZNVF9OT05FKSB7CisgICAgICAgIGF2 X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiTm8gdmFsaWQvY29tcGF0aWJsZSBwaXhlbCBmb3Jt YXQgZm91bmQgZm9yIGRlY29kaW5nIVxuIik7CisgICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZB TCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfVkVSQk9TRSwg IkNob3NlbiBmcmFtZSBwaXhmbXQ6ICVzIChWdWxrYW4gSUQ6ICVpKVxuIiwKKyAgICAgICAgICAg ICAgIGF2X2dldF9waXhfZm10X25hbWUoYmVzdF9mb3JtYXQpLCBiZXN0X3ZrZm10KTsKKyAgICB9 CisKKyAgICAqcGl4X2ZtdCA9IGJlc3RfZm9ybWF0OworICAgICp2a19mbXQgPSBiZXN0X3ZrZm10 OworCisgICAgKmRwYl9kZWRpY2F0ZSA9IGRlYy0+ZGVkaWNhdGVkX2RwYjsKKworICAgIHJldHVy biAwOworfQorCitzdGF0aWMgdm9pZCBmcmVlX3Byb2ZpbGVfZGF0YShBVkhXRnJhbWVzQ29udGV4 dCAqaHdmYykKK3sKKyAgICBhdl9mcmVlKGh3ZmMtPnVzZXJfb3BhcXVlKTsKK30KKworaW50IGZm X3ZrX2ZyYW1lX3BhcmFtcyhBVkNvZGVjQ29udGV4dCAqYXZjdHgsIEFWQnVmZmVyUmVmICpod19m cmFtZXNfY3R4KQoreworICAgIFZrRm9ybWF0IHZrZm10ID0gVktfRk9STUFUX1VOREVGSU5FRDsK KyAgICBpbnQgZXJyLCBkZWRpY2F0ZWRfZHBiOworICAgIEFWSFdGcmFtZXNDb250ZXh0ICpmcmFt ZXNfY3R4ID0gKEFWSFdGcmFtZXNDb250ZXh0Kilod19mcmFtZXNfY3R4LT5kYXRhOworICAgIEFW VnVsa2FuRnJhbWVzQ29udGV4dCAqaHdmYyA9IGZyYW1lc19jdHgtPmh3Y3R4OworICAgIEZGVnVs a2FuRGVjb2RlQ29udGV4dCAqZGVjID0gYXZjdHgtPmludGVybmFsLT5od2FjY2VsX3ByaXZfZGF0 YTsKKyAgICBGRlZ1bGthbkRlY29kZVByb2ZpbGVEYXRhICpwcm9mID0gTlVMTDsKKworICAgIGVy ciA9IHZ1bGthbl9kZWNvZGVfYm9vdHN0cmFwKGF2Y3R4LCBod19mcmFtZXNfY3R4KTsKKyAgICBp ZiAoZXJyIDwgMCkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIGZyYW1lc19jdHgtPnN3X2Zv cm1hdCA9IGF2Y3R4LT5zd19waXhfZm10OworCisgICAgaWYgKCFERUNPREVSX0lTX1NEUihhdmN0 eC0+Y29kZWNfaWQpKSB7CisgICAgICAgIHByb2YgPSBhdl9tYWxsb2N6KHNpemVvZihGRlZ1bGth bkRlY29kZVByb2ZpbGVEYXRhKSk7CisgICAgICAgIGlmICghcHJvZikKKyAgICAgICAgICAgIHJl dHVybiBBVkVSUk9SKEVOT01FTSk7CisKKyAgICAgICAgZXJyID0gdnVsa2FuX2RlY29kZV9nZXRf cHJvZmlsZShhdmN0eCwgaHdfZnJhbWVzX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAmZnJhbWVzX2N0eC0+c3dfZm9ybWF0LCAmdmtmbXQsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZiwgJmRlZGljYXRlZF9kcGIpOworICAg ICAgICBpZiAoZXJyIDwgMCkgeworICAgICAgICAgICAgYXZfZnJlZShwcm9mKTsKKyAgICAgICAg ICAgIHJldHVybiBlcnI7CisgICAgICAgIH0KKworICAgICAgICBmcmFtZXNfY3R4LT51c2VyX29w YXF1ZSA9IHByb2Y7CisgICAgICAgIGZyYW1lc19jdHgtPmZyZWUgICAgICAgID0gZnJlZV9wcm9m aWxlX2RhdGE7CisKKyAgICAgICAgaHdmYy0+Y3JlYXRlX3BuZXh0ID0gJnByb2YtPnByb2ZpbGVf bGlzdDsKKyAgICB9IGVsc2UgeworICAgICAgICBzd2l0Y2ggKGZyYW1lc19jdHgtPnN3X2Zvcm1h dCkgeworICAgICAgICBjYXNlIEFWX1BJWF9GTVRfR0JSQVAxNjoKKyAgICAgICAgICAgIC8qIFRo aXMgc2hvdWxkIGJlIG1vcmUgZWZmaWNpZW50IGZvciBkb3dubG9hZGluZyBhbmQgdXNpbmcgKi8K KyAgICAgICAgICAgIGZyYW1lc19jdHgtPnN3X2Zvcm1hdCA9IEFWX1BJWF9GTVRfUkdCQTY0Owor ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQVZfUElYX0ZNVF9HQlJQMTA6CisgICAg ICAgICAgICAvKiBUaGlzIHNhdmVzIG1lbW9yeSBiYW5kd2lkdGggd2hlbiBkb3dubG9hZGluZyAq LworICAgICAgICAgICAgZnJhbWVzX2N0eC0+c3dfZm9ybWF0ID0gQVZfUElYX0ZNVF9YMkJHUjEw OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQVZfUElYX0ZNVF9CR1IwOgorICAg ICAgICAgICAgLyogbXB2IGhhcyBpc3N1ZXMgd2l0aCBiZ3IwIG1hcHBpbmcsIHNvIGp1c3QgcmVt YXAgaXQgKi8KKyAgICAgICAgICAgIGZyYW1lc19jdHgtPnN3X2Zvcm1hdCA9IEFWX1BJWF9GTVRf UkdCMDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg YnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmcmFtZXNfY3R4LT53aWR0aCAgPSBhdmN0 eC0+Y29kZWRfd2lkdGg7CisgICAgZnJhbWVzX2N0eC0+aGVpZ2h0ID0gYXZjdHgtPmNvZGVkX2hl aWdodDsKKyAgICBmcmFtZXNfY3R4LT5mb3JtYXQgPSBBVl9QSVhfRk1UX1ZVTEtBTjsKKworICAg IGh3ZmMtPmZvcm1hdFswXSAgICA9IHZrZm10OworICAgIGh3ZmMtPnRpbGluZyAgICAgICA9IFZL X0lNQUdFX1RJTElOR19PUFRJTUFMOworICAgIGh3ZmMtPnVzYWdlICAgICAgICA9IFZLX0lNQUdF X1VTQUdFX1RSQU5TRkVSX1NSQ19CSVQgfAorICAgICAgICAgICAgICAgICAgICAgICAgIFZLX0lN QUdFX1VTQUdFX1NUT1JBR0VfQklUICAgICAgfAorICAgICAgICAgICAgICAgICAgICAgICAgIFZL X0lNQUdFX1VTQUdFX1NBTVBMRURfQklUOworCisgICAgaWYgKHByb2YpIHsKKyAgICAgICAgRkZW dWxrYW5EZWNvZGVTaGFyZWQgKmN0eDsKKworICAgICAgICBod2ZjLT51c2FnZSB8PSBWS19JTUFH RV9VU0FHRV9WSURFT19ERUNPREVfRFNUX0JJVF9LSFI7CisgICAgICAgIGlmICghZGVjLT5kZWRp Y2F0ZWRfZHBiKQorICAgICAgICAgICAgaHdmYy0+dXNhZ2UgfD0gVktfSU1BR0VfVVNBR0VfVklE RU9fREVDT0RFX0RQQl9CSVRfS0hSOworCisgICAgICAgIGN0eCA9IGRlYy0+c2hhcmVkX2N0eDsK KyAgICAgICAgaWYgKGN0eC0+cy5leHRlbnNpb25zICYgKEZGX1ZLX0VYVF9WSURFT19FTkNPREVf UVVFVUUgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkZfVktfRVhUX1ZJREVP X01BSU5URU5BTkNFXzEpKQorICAgICAgICAgICAgaHdmYy0+dXNhZ2UgfD0gVktfSU1BR0VfVVNB R0VfVklERU9fRU5DT0RFX1NSQ19CSVRfS0hSOworICAgIH0KKworICAgIHJldHVybiBlcnI7Cit9 CisKK3N0YXRpYyB2b2lkIHZrX2RlY29kZV9mcmVlX3BhcmFtcyh2b2lkICpvcGFxdWUsIHVpbnQ4 X3QgKmRhdGEpCit7CisgICAgRkZWdWxrYW5EZWNvZGVTaGFyZWQgKmN0eCA9IG9wYXF1ZTsKKyAg ICBGRlZ1bGthbkZ1bmN0aW9ucyAqdmsgPSAmY3R4LT5zLnZrZm47CisgICAgVmtWaWRlb1Nlc3Np b25QYXJhbWV0ZXJzS0hSICpwYXIgPSAoVmtWaWRlb1Nlc3Npb25QYXJhbWV0ZXJzS0hSICopZGF0 YTsKKyAgICB2ay0+RGVzdHJveVZpZGVvU2Vzc2lvblBhcmFtZXRlcnNLSFIoY3R4LT5zLmh3Y3R4 LT5hY3RfZGV2LCAqcGFyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjdHgtPnMuaHdjdHgtPmFsbG9jKTsKKyAgICBhdl9mcmVlKHBhcik7Cit9CisKK2ludCBmZl92 a19kZWNvZGVfY3JlYXRlX3BhcmFtcyhBVkJ1ZmZlclJlZiAqKnBhcl9yZWYsIHZvaWQgKmxvZ2N0 eCwgRkZWdWxrYW5EZWNvZGVTaGFyZWQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBWa1ZpZGVvU2Vzc2lvblBhcmFtZXRlcnNDcmVhdGVJbmZvS0hSICpzZXNzaW9u X3BhcmFtc19jcmVhdGUpCit7CisgICAgVmtWaWRlb1Nlc3Npb25QYXJhbWV0ZXJzS0hSICpwYXIg PSBhdl9tYWxsb2Moc2l6ZW9mKCpwYXIpKTsKKyAgICBjb25zdCBGRlZ1bGthbkZ1bmN0aW9ucyAq dmsgPSAmY3R4LT5zLnZrZm47CisgICAgVmtSZXN1bHQgcmV0OworCisgICAgaWYgKCFwYXIpCisg ICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7CisKKyAgICAvKiBDcmVhdGUgc2Vzc2lvbiBw YXJhbWV0ZXJzICovCisgICAgcmV0ID0gdmstPkNyZWF0ZVZpZGVvU2Vzc2lvblBhcmFtZXRlcnNL SFIoY3R4LT5zLmh3Y3R4LT5hY3RfZGV2LCBzZXNzaW9uX3BhcmFtc19jcmVhdGUsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT5zLmh3Y3R4LT5hbGxv YywgcGFyKTsKKyAgICBpZiAocmV0ICE9IFZLX1NVQ0NFU1MpIHsKKyAgICAgICAgYXZfbG9nKGxv Z2N0eCwgQVZfTE9HX0VSUk9SLCAiVW5hYmxlIHRvIGNyZWF0ZSBWdWxrYW4gdmlkZW8gc2Vzc2lv biBwYXJhbWV0ZXJzOiAlcyFcbiIsCisgICAgICAgICAgICAgICBmZl92a19yZXQyc3RyKHJldCkp OworICAgICAgICBhdl9mcmVlKHBhcik7CisgICAgICAgIHJldHVybiBBVkVSUk9SX0VYVEVSTkFM OworICAgIH0KKyAgICAqcGFyX3JlZiA9IGF2X2J1ZmZlcl9jcmVhdGUoKHVpbnQ4X3QgKilwYXIs IHNpemVvZigqcGFyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmtfZGVjb2Rl X2ZyZWVfcGFyYW1zLCBjdHgsIDApOworICAgIGlmICghKnBhcl9yZWYpIHsKKyAgICAgICAgdmtf ZGVjb2RlX2ZyZWVfcGFyYW1zKGN0eCwgKHVpbnQ4X3QgKilwYXIpOworICAgICAgICByZXR1cm4g QVZFUlJPUihFTk9NRU0pOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitpbnQgZmZfdmtf ZGVjb2RlX3VuaW5pdChBVkNvZGVjQ29udGV4dCAqYXZjdHgpCit7CisgICAgRkZWdWxrYW5EZWNv ZGVDb250ZXh0ICpkZWMgPSBhdmN0eC0+aW50ZXJuYWwtPmh3YWNjZWxfcHJpdl9kYXRhOworCisg ICAgYXZfZnJlZXAoJmRlYy0+aGV2Y19oZWFkZXJzKTsKKyAgICBhdl9idWZmZXJfdW5yZWYoJmRl Yy0+c2Vzc2lvbl9wYXJhbXMpOworICAgIGF2X3JlZnN0cnVjdF91bnJlZigmZGVjLT5zaGFyZWRf Y3R4KTsKKyAgICBhdl9mcmVlcCgmZGVjLT5zbGljZV9vZmYpOworICAgIHJldHVybiAwOworfQor CitzdGF0aWMgaW50IGNyZWF0ZV9lbXB0eV9zZXNzaW9uX3BhcmFtZXRlcnMoQVZDb2RlY0NvbnRl eHQgKmF2Y3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZG VnVsa2FuRGVjb2RlU2hhcmVkICpjdHgpCit7CisgICAgVmtSZXN1bHQgcmV0OworICAgIEZGVnVs a2FuQ29udGV4dCAqcyA9ICZjdHgtPnM7CisgICAgRkZWdWxrYW5GdW5jdGlvbnMgKnZrID0gJnMt PnZrZm47CisKKyAgICBWa1ZpZGVvRGVjb2RlSDI2NFNlc3Npb25QYXJhbWV0ZXJzQ3JlYXRlSW5m b0tIUiBoMjY0X3BhcmFtcyA9IHsKKyAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVf VklERU9fREVDT0RFX0gyNjRfU0VTU0lPTl9QQVJBTUVURVJTX0NSRUFURV9JTkZPX0tIUiwKKyAg ICB9OworICAgIFZrVmlkZW9EZWNvZGVIMjY1U2Vzc2lvblBhcmFtZXRlcnNDcmVhdGVJbmZvS0hS IGgyNjVfcGFyYW1zID0geworICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9WSURF T19ERUNPREVfSDI2NV9TRVNTSU9OX1BBUkFNRVRFUlNfQ1JFQVRFX0lORk9fS0hSLAorICAgIH07 CisgICAgU3RkVmlkZW9BVjFTZXF1ZW5jZUhlYWRlciBhdjFfZW1wdHlfc2VxID0geyAwIH07Cisg ICAgVmtWaWRlb0RlY29kZUFWMVNlc3Npb25QYXJhbWV0ZXJzQ3JlYXRlSW5mb0tIUiBhdjFfcGFy YW1zID0geworICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9WSURFT19ERUNPREVf QVYxX1NFU1NJT05fUEFSQU1FVEVSU19DUkVBVEVfSU5GT19LSFIsCisgICAgICAgIC5wU3RkU2Vx dWVuY2VIZWFkZXIgPSAmYXYxX2VtcHR5X3NlcSwKKyAgICB9OworICAgIFZrVmlkZW9TZXNzaW9u UGFyYW1ldGVyc0NyZWF0ZUluZm9LSFIgc2Vzc2lvbl9wYXJhbXNfY3JlYXRlID0geworICAgICAg ICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9WSURFT19TRVNTSU9OX1BBUkFNRVRFUlNfQ1JF QVRFX0lORk9fS0hSLAorICAgICAgICAucE5leHQgPSBhdmN0eC0+Y29kZWNfaWQgPT0gQVZfQ09E RUNfSURfSDI2NCA/ICh2b2lkICopJmgyNjRfcGFyYW1zIDoKKyAgICAgICAgICAgICAgICAgYXZj dHgtPmNvZGVjX2lkID09IEFWX0NPREVDX0lEX0hFVkMgPyAodm9pZCAqKSZoMjY1X3BhcmFtcyA6 CisgICAgICAgICAgICAgICAgIGF2Y3R4LT5jb2RlY19pZCA9PSBBVl9DT0RFQ19JRF9BVjEgID8g KHZvaWQgKikmYXYxX3BhcmFtcyAgOgorICAgICAgICAgICAgICAgICBOVUxMLAorICAgICAgICAu dmlkZW9TZXNzaW9uID0gY3R4LT5jb21tb24uc2Vzc2lvbiwKKyAgICB9OworCisgICAgaWYgKGF2 Y3R4LT5jb2RlY19pZCA9PSBBVl9DT0RFQ19JRF9WUDkpCisgICAgICAgIHJldHVybiAwOworCisg ICAgcmV0ID0gdmstPkNyZWF0ZVZpZGVvU2Vzc2lvblBhcmFtZXRlcnNLSFIocy0+aHdjdHgtPmFj dF9kZXYsICZzZXNzaW9uX3BhcmFtc19jcmVhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcy0+aHdjdHgtPmFsbG9jLCAmY3R4LT5lbXB0eV9zZXNzaW9u X3BhcmFtcyk7CisgICAgaWYgKHJldCAhPSBWS19TVUNDRVNTKSB7CisgICAgICAgIGF2X2xvZyhh dmN0eCwgQVZfTE9HX0VSUk9SLCAiVW5hYmxlIHRvIGNyZWF0ZSBlbXB0eSBWdWxrYW4gdmlkZW8g c2Vzc2lvbiBwYXJhbWV0ZXJzOiAlcyFcbiIsCisgICAgICAgICAgICAgICBmZl92a19yZXQyc3Ry KHJldCkpOworICAgICAgICByZXR1cm4gQVZFUlJPUl9FWFRFUk5BTDsKKyAgICB9CisKKyAgICBy ZXR1cm4gMDsKK30KKworaW50IGZmX3ZrX2RlY29kZV9pbml0KEFWQ29kZWNDb250ZXh0ICphdmN0 eCkKK3sKKyAgICBpbnQgZXJyOworICAgIEZGVnVsa2FuRGVjb2RlQ29udGV4dCAqZGVjID0gYXZj dHgtPmludGVybmFsLT5od2FjY2VsX3ByaXZfZGF0YTsKKyAgICBGRlZ1bGthbkRlY29kZVNoYXJl ZCAqY3R4OworICAgIEZGVnVsa2FuQ29udGV4dCAqczsKKyAgICBpbnQgYXN5bmNfZGVwdGg7Cisg ICAgY29uc3QgVmtWaWRlb1Byb2ZpbGVJbmZvS0hSICpwcm9maWxlOworICAgIGNvbnN0IEZGVnVs a2FuRGVjb2RlRGVzY3JpcHRvciAqdmtfZGVzYzsKKyAgICBjb25zdCBWa1BoeXNpY2FsRGV2aWNl RHJpdmVyUHJvcGVydGllcyAqZHJpdmVyX3Byb3BzOworCisgICAgVmtWaWRlb1Nlc3Npb25DcmVh dGVJbmZvS0hSIHNlc3Npb25fY3JlYXRlID0geworICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RV UkVfVFlQRV9WSURFT19TRVNTSU9OX0NSRUFURV9JTkZPX0tIUiwKKyAgICB9OworCisgICAgZXJy ID0gZmZfZGVjb2RlX2dldF9od19mcmFtZXNfY3R4KGF2Y3R4LCBBVl9IV0RFVklDRV9UWVBFX1ZV TEtBTik7CisgICAgaWYgKGVyciA8IDApCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICAvKiBJ bml0aWFsaXplIGNvbnRleHRzICovCisgICAgY3R4ID0gZGVjLT5zaGFyZWRfY3R4OworICAgIHMg PSAmY3R4LT5zOworCisgICAgZXJyID0gZmZfdmtfaW5pdChzLCBhdmN0eCwgTlVMTCwgYXZjdHgt Pmh3X2ZyYW1lc19jdHgpOworICAgIGlmIChlcnIgPCAwKQorICAgICAgICByZXR1cm4gZXJyOwor CisgICAgdmtfZGVzYyA9IGdldF9jb2RlY2Rlc2MoYXZjdHgtPmNvZGVjX2lkKTsKKworICAgIHBy b2ZpbGUgPSBnZXRfdmlkZW9fcHJvZmlsZShjdHgsIGF2Y3R4LT5jb2RlY19pZCk7CisgICAgaWYg KCh2a19kZXNjLT5xdWV1ZV9mbGFncyAmIFZLX1FVRVVFX1ZJREVPX0RFQ09ERV9CSVRfS0hSKSAm JiAhcHJvZmlsZSkgeworICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIlZpZGVv IHByb2ZpbGUgbWlzc2luZyBmcm9tIGZyYW1lcyBjb250ZXh0ISIpOworICAgICAgICByZXR1cm4g QVZFUlJPUihFSU5WQUwpOworICAgIH0KKworICAgIC8qIENyZWF0ZSBxdWV1ZSBjb250ZXh0ICov CisgICAgdmtfZGVzYyA9IGdldF9jb2RlY2Rlc2MoYXZjdHgtPmNvZGVjX2lkKTsKKyAgICBjdHgt PnFmID0gZmZfdmtfcWZfZmluZChzLCB2a19kZXNjLT5xdWV1ZV9mbGFncywgdmtfZGVzYy0+ZGVj b2RlX29wKTsKKyAgICBpZiAoIWN0eC0+cWYpIHsKKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9M T0dfRVJST1IsICJEZWNvZGluZyBvZiAlcyBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgZGV2aWNl XG4iLAorICAgICAgICAgICAgICAgYXZjb2RlY19nZXRfbmFtZShhdmN0eC0+Y29kZWNfaWQpKTsK KyAgICAgICAgcmV0dXJuIGVycjsKKyAgICB9CisKKyAgICBzZXNzaW9uX2NyZWF0ZS5xdWV1ZUZh bWlseUluZGV4ID0gY3R4LT5xZi0+aWR4OworICAgIHNlc3Npb25fY3JlYXRlLm1heENvZGVkRXh0 ZW50ID0gY3R4LT5jYXBzLm1heENvZGVkRXh0ZW50OworICAgIHNlc3Npb25fY3JlYXRlLm1heERw YlNsb3RzID0gY3R4LT5jYXBzLm1heERwYlNsb3RzOworICAgIHNlc3Npb25fY3JlYXRlLm1heEFj dGl2ZVJlZmVyZW5jZVBpY3R1cmVzID0gY3R4LT5jYXBzLm1heEFjdGl2ZVJlZmVyZW5jZVBpY3R1 cmVzOworICAgIHNlc3Npb25fY3JlYXRlLnBpY3R1cmVGb3JtYXQgPSBzLT5od2ZjLT5mb3JtYXRb MF07CisgICAgc2Vzc2lvbl9jcmVhdGUucmVmZXJlbmNlUGljdHVyZUZvcm1hdCA9IHNlc3Npb25f Y3JlYXRlLnBpY3R1cmVGb3JtYXQ7CisgICAgc2Vzc2lvbl9jcmVhdGUucFN0ZEhlYWRlclZlcnNp b24gPSAmdmtfZGVzYy0+ZXh0X3Byb3BzOworICAgIHNlc3Npb25fY3JlYXRlLnBWaWRlb1Byb2Zp bGUgPSBwcm9maWxlOworI2lmZGVmIFZLX0tIUl92aWRlb19tYWludGVuYW5jZTIKKyAgICBpZiAo Y3R4LT5zLmV4dGVuc2lvbnMgJiBGRl9WS19FWFRfVklERU9fTUFJTlRFTkFOQ0VfMikKKyAgICAg ICAgc2Vzc2lvbl9jcmVhdGUuZmxhZ3MgPSBWS19WSURFT19TRVNTSU9OX0NSRUFURV9JTkxJTkVf U0VTU0lPTl9QQVJBTUVURVJTX0JJVF9LSFI7CisjZW5kaWYKKworICAgIC8qIENyZWF0ZSBkZWNv ZGUgZXhlYyBjb250ZXh0IGZvciB0aGlzIHNwZWNpZmljIG1haW4gdGhyZWFkLgorICAgICAqIDIg YXN5bmMgY29udGV4dHMgcGVyIHRocmVhZCB3YXMgZXhwZXJpbWVudGFsbHkgZGV0ZXJtaW5lZCB0 byBiZSBvcHRpbWFsCisgICAgICogZm9yIGEgbWFqb3JpdHkgb2Ygc3RyZWFtcy4gKi8KKyAgICBh c3luY19kZXB0aCA9IDIqY3R4LT5xZi0+bnVtOworICAgIC8qIFdlIGRvbid0IG5lZWQgbW9yZSB0 aGFuIDIgcGVyIHRocmVhZCBjb250ZXh0ICovCisgICAgYXN5bmNfZGVwdGggPSBGRk1JTihhc3lu Y19kZXB0aCwgMiphdmN0eC0+dGhyZWFkX2NvdW50KTsKKyAgICAvKiBNYWtlIHN1cmUgdGhlcmUg YXJlIGVub3VnaCBhc3luYyBjb250ZXh0cyBmb3IgZWFjaCB0aHJlYWQgKi8KKyAgICBhc3luY19k ZXB0aCA9IEZGTUFYKGFzeW5jX2RlcHRoLCBhdmN0eC0+dGhyZWFkX2NvdW50KTsKKworICAgIGVy ciA9IGZmX3ZrX2V4ZWNfcG9vbF9pbml0KHMsIGN0eC0+cWYsICZjdHgtPmV4ZWNfcG9vbCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3luY19kZXB0aCwgMCwgMCwgMCwgcHJvZmls ZSk7CisgICAgaWYgKGVyciA8IDApCisgICAgICAgIGdvdG8gZmFpbDsKKworICAgIGlmICghREVD T0RFUl9JU19TRFIoYXZjdHgtPmNvZGVjX2lkKSkgeworICAgICAgICBlcnIgPSBmZl92a192aWRl b19jb21tb25faW5pdChhdmN0eCwgcywgJmN0eC0+Y29tbW9uLCAmc2Vzc2lvbl9jcmVhdGUpOwor ICAgICAgICBpZiAoZXJyIDwgMCkKKyAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAg ICAvKiBJZiBkb2luZyBhbiBvdXQtb2YtcGxhY2UgZGVjb2RpbmcsIGNyZWF0ZSBhIERQQiBwb29s ICovCisgICAgaWYgKGRlYy0+ZGVkaWNhdGVkX2RwYiB8fCBhdmN0eC0+Y29kZWNfaWQgPT0gQVZf Q09ERUNfSURfQVYxKSB7CisgICAgICAgIEFWSFdGcmFtZXNDb250ZXh0ICpkcGJfZnJhbWVzOwor ICAgICAgICBBVlZ1bGthbkZyYW1lc0NvbnRleHQgKmRwYl9od2ZjOworCisgICAgICAgIGN0eC0+ Y29tbW9uLmRwYl9od2ZjX3JlZiA9IGF2X2h3ZnJhbWVfY3R4X2FsbG9jKHMtPmZyYW1lcy0+ZGV2 aWNlX3JlZik7CisgICAgICAgIGlmICghY3R4LT5jb21tb24uZHBiX2h3ZmNfcmVmKSB7CisgICAg ICAgICAgICBlcnIgPSBBVkVSUk9SKEVOT01FTSk7CisgICAgICAgICAgICBnb3RvIGZhaWw7Cisg ICAgICAgIH0KKworICAgICAgICBkcGJfZnJhbWVzID0gKEFWSFdGcmFtZXNDb250ZXh0ICopY3R4 LT5jb21tb24uZHBiX2h3ZmNfcmVmLT5kYXRhOworICAgICAgICBkcGJfZnJhbWVzLT5mb3JtYXQg ICAgPSBzLT5mcmFtZXMtPmZvcm1hdDsKKyAgICAgICAgZHBiX2ZyYW1lcy0+c3dfZm9ybWF0ID0g cy0+ZnJhbWVzLT5zd19mb3JtYXQ7CisgICAgICAgIGRwYl9mcmFtZXMtPndpZHRoICAgICA9IGF2 Y3R4LT5jb2RlZF93aWR0aDsKKyAgICAgICAgZHBiX2ZyYW1lcy0+aGVpZ2h0ICAgID0gYXZjdHgt PmNvZGVkX2hlaWdodDsKKworICAgICAgICBkcGJfaHdmYyA9IGRwYl9mcmFtZXMtPmh3Y3R4Owor ICAgICAgICBkcGJfaHdmYy0+Y3JlYXRlX3BuZXh0ID0gKHZvaWQgKilmZl92a19maW5kX3N0cnVj dChjdHgtPnMuaHdmYy0+Y3JlYXRlX3BuZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19TVFJVQ1RVUkVfVFlQRV9WSURFT19Q Uk9GSUxFX0xJU1RfSU5GT19LSFIpOworICAgICAgICBkcGJfaHdmYy0+Zm9ybWF0WzBdICAgID0g cy0+aHdmYy0+Zm9ybWF0WzBdOworICAgICAgICBkcGJfaHdmYy0+dGlsaW5nICAgICAgID0gVktf SU1BR0VfVElMSU5HX09QVElNQUw7CisgICAgICAgIGRwYl9od2ZjLT51c2FnZSAgICAgICAgPSBW S19JTUFHRV9VU0FHRV9WSURFT19ERUNPREVfRFBCX0JJVF9LSFIgfAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgVktfSU1BR0VfVVNBR0VfU0FNUExFRF9CSVQ7IC8qIFNodXRzIHZh bGlkYXRvciB1cC4gKi8KKworICAgICAgICBpZiAoY3R4LT5jb21tb24ubGF5ZXJlZF9kcGIpCisg ICAgICAgICAgICBkcGJfaHdmYy0+bmJfbGF5ZXJzID0gY3R4LT5jYXBzLm1heERwYlNsb3RzOwor CisgICAgICAgIGVyciA9IGF2X2h3ZnJhbWVfY3R4X2luaXQoY3R4LT5jb21tb24uZHBiX2h3ZmNf cmVmKTsKKyAgICAgICAgaWYgKGVyciA8IDApCisgICAgICAgICAgICBnb3RvIGZhaWw7CisKKyAg ICAgICAgaWYgKGN0eC0+Y29tbW9uLmxheWVyZWRfZHBiKSB7CisgICAgICAgICAgICBjdHgtPmNv bW1vbi5sYXllcmVkX2ZyYW1lID0gdmtfZ2V0X2RwYl9wb29sKGN0eCk7CisgICAgICAgICAgICBp ZiAoIWN0eC0+Y29tbW9uLmxheWVyZWRfZnJhbWUpIHsKKyAgICAgICAgICAgICAgICBlcnIgPSBB VkVSUk9SKEVOT01FTSk7CisgICAgICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICAgICAg fQorCisgICAgICAgICAgICBlcnIgPSBmZl92a19jcmVhdGVfdmlldygmY3R4LT5zLCAmY3R4LT5j b21tb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY3R4LT5jb21tb24u bGF5ZXJlZF92aWV3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmN0eC0+ Y29tbW9uLmxheWVyZWRfYXNwZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKEFWVmtGcmFtZSAqKWN0eC0+Y29tbW9uLmxheWVyZWRfZnJhbWUtPmRhdGFbMF0sCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLT5od2ZjLT5mb3JtYXRbMF0sIDEpOwor ICAgICAgICAgICAgaWYgKGVyciA8IDApCisgICAgICAgICAgICAgICAgZ290byBmYWlsOworICAg ICAgICB9CisgICAgfQorCisgICAgaWYgKCFERUNPREVSX0lTX1NEUihhdmN0eC0+Y29kZWNfaWQp KSB7CisgICAgICAgIGlmICghKGN0eC0+cy5leHRlbnNpb25zICYgRkZfVktfRVhUX1ZJREVPX01B SU5URU5BTkNFXzIpKSB7CisgICAgICAgICAgICBlcnIgPSBjcmVhdGVfZW1wdHlfc2Vzc2lvbl9w YXJhbWV0ZXJzKGF2Y3R4LCBjdHgpOworICAgICAgICAgICAgaWYgKGVyciA8IDApCisgICAgICAg ICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIC8q IEZvciBTRFIgZGVjb2RlcnMsIHRoaXMgYWxpZ25tZW50IHZhbHVlIHdpbGwgYmUgMC4gU2luY2Ug dGhpcyB3aWxsIG1ha2UKKyAgICAgICAgICogYWRkX3NsaWNlKCkgbWFsZnVuY3Rpb24sIHNldCBp dCB0byBhIHNhbmUgZGVmYXVsdCB2YWx1ZS4gKi8KKyAgICAgICAgY3R4LT5jYXBzLm1pbkJpdHN0 cmVhbUJ1ZmZlclNpemVBbGlnbm1lbnQgPSBBVl9JTlBVVF9CVUZGRVJfUEFERElOR19TSVpFOwor ICAgIH0KKworICAgIGRyaXZlcl9wcm9wcyA9ICZkZWMtPnNoYXJlZF9jdHgtPnMuZHJpdmVyX3By b3BzOworICAgIGlmIChkcml2ZXJfcHJvcHMtPmRyaXZlcklEID09IFZLX0RSSVZFUl9JRF9OVklE SUFfUFJPUFJJRVRBUlkgJiYKKyAgICAgICAgZHJpdmVyX3Byb3BzLT5jb25mb3JtYW5jZVZlcnNp b24ubWFqb3IgPT0gMSAmJgorICAgICAgICBkcml2ZXJfcHJvcHMtPmNvbmZvcm1hbmNlVmVyc2lv bi5taW5vciA9PSAzICYmCisgICAgICAgIGRyaXZlcl9wcm9wcy0+Y29uZm9ybWFuY2VWZXJzaW9u LnN1Ym1pbm9yID09IDggJiYKKyAgICAgICAgZHJpdmVyX3Byb3BzLT5jb25mb3JtYW5jZVZlcnNp b24ucGF0Y2ggPCAzKQorICAgICAgICBkZWMtPnF1aXJrX2F2MV9vZmZzZXQgPSAxOworCisgICAg ZmZfdmtfZGVjb2RlX2ZsdXNoKGF2Y3R4KTsKKworICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX1ZF UkJPU0UsICJWdWxrYW4gZGVjb2RlciBpbml0aWFsaXphdGlvbiBzdWNjZXNzZnVsXG4iKTsKKwor ICAgIHJldHVybiAwOworCitmYWlsOgorICAgIGZmX3ZrX2RlY29kZV91bmluaXQoYXZjdHgpOwor CisgICAgcmV0dXJuIGVycjsKK30KLS0gCjIuNDkuMQoKCkZyb20gNzZmYzkyMDhjYjg4ODRlMjNi NmQzMWYzZDJmYTk4OTFiZTZhYjIyZiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKRnJvbTogSmFt YWlrYTEgPGx1a2FzemN6MThAd3AucGw+CkRhdGU6IFdlZCwgMyBTZXAgMjAyNSAxMzozMDowMCAr MDAwMApTdWJqZWN0OiBbUEFUQ0ggMDY3LzExOF0gQ2hhbmdpbmcgdnVsa2FuIGZpbGUgZGlyZWN0 b3J5CgotLS0KIGxpYmF2Y29kZWMvdnVsa2FuX2RlY29kZS5oIHwgMTg5IC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAxODkgZGVsZXRpb25zKC0p CiBkZWxldGUgbW9kZSAxMDA2NDQgbGliYXZjb2RlYy92dWxrYW5fZGVjb2RlLmgKCmRpZmYgLS1n aXQgYS9saWJhdmNvZGVjL3Z1bGthbl9kZWNvZGUuaCBiL2xpYmF2Y29kZWMvdnVsa2FuX2RlY29k ZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMzI0NjhmMzE3Li4wMDAwMDAwMDAw Ci0tLSBhL2xpYmF2Y29kZWMvdnVsa2FuX2RlY29kZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTg5 ICswLDAgQEAKLS8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCi0gKgotICogRkZt cGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICog bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp YwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv bjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0 aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFC SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQot ICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0g KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy YWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRv IHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl ZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCi0gKi8KLQotI2lmbmRl ZiBBVkNPREVDX1ZVTEtBTl9ERUNPREVfSAotI2RlZmluZSBBVkNPREVDX1ZVTEtBTl9ERUNPREVf SAotCi0jaW5jbHVkZSAiY29kZWNfaWQuaCIKLSNpbmNsdWRlICJkZWNvZGUuaCIKLSNpbmNsdWRl ICJod2FjY2VsX2ludGVybmFsLmgiCi0jaW5jbHVkZSAiaW50ZXJuYWwuaCIKLQotI2luY2x1ZGUg InZ1bGthbl92aWRlby5oIgotCi10eXBlZGVmIHN0cnVjdCBGRlZ1bGthbkRlY29kZURlc2NyaXB0 b3IgewotICAgIGVudW0gQVZDb2RlY0lEICAgICAgICAgICAgICAgICAgIGNvZGVjX2lkOwotICAg IEZGVnVsa2FuRXh0ZW5zaW9ucyAgICAgICAgICAgICAgIGRlY29kZV9leHRlbnNpb247Ci0gICAg VmtRdWV1ZUZsYWdCaXRzICAgICAgICAgICAgICAgICAgcXVldWVfZmxhZ3M7Ci0gICAgVmtWaWRl b0NvZGVjT3BlcmF0aW9uRmxhZ0JpdHNLSFIgZGVjb2RlX29wOwotCi0gICAgVmtFeHRlbnNpb25Q cm9wZXJ0aWVzIGV4dF9wcm9wczsKLX0gRkZWdWxrYW5EZWNvZGVEZXNjcmlwdG9yOwotCi10eXBl ZGVmIHN0cnVjdCBGRlZ1bGthbkRlY29kZVNoYXJlZCB7Ci0gICAgRkZWdWxrYW5Db250ZXh0IHM7 Ci0gICAgRkZWa1ZpZGVvQ29tbW9uIGNvbW1vbjsKLSAgICBBVlZ1bGthbkRldmljZVF1ZXVlRmFt aWx5ICpxZjsKLSAgICBGRlZrRXhlY1Bvb2wgZXhlY19wb29sOwotCi0gICAgQVZCdWZmZXJQb29s ICpidWZfcG9vbDsKLQotICAgIFZrVmlkZW9DYXBhYmlsaXRpZXNLSFIgY2FwczsKLSAgICBWa1Zp ZGVvRGVjb2RlQ2FwYWJpbGl0aWVzS0hSIGRlY19jYXBzOwotCi0gICAgVmtWaWRlb1Nlc3Npb25Q YXJhbWV0ZXJzS0hSIGVtcHR5X3Nlc3Npb25fcGFyYW1zOwotCi0gICAgLyogU29mdHdhcmUtZGVm aW5lZCBkZWNvZGVyIGNvbnRleHQgKi8KLSAgICB2b2lkICpzZF9jdHg7Ci0gICAgdm9pZCAoKnNk X2N0eF9mcmVlKShzdHJ1Y3QgRkZWdWxrYW5EZWNvZGVTaGFyZWQgKmN0eCk7Ci19IEZGVnVsa2Fu RGVjb2RlU2hhcmVkOwotCi10eXBlZGVmIHN0cnVjdCBGRlZ1bGthbkRlY29kZUNvbnRleHQgewot ICAgIEZGVnVsa2FuRGVjb2RlU2hhcmVkICpzaGFyZWRfY3R4OwotICAgIEFWQnVmZmVyUmVmICpz ZXNzaW9uX3BhcmFtczsKLQotICAgIGludCBkZWRpY2F0ZWRfZHBiOyAvKiBPZGRpdHkgICMxIC0g c2VwYXJhdGUgRFBCIGltYWdlcyAqLwotICAgIGludCBleHRlcm5hbF9mZzsgICAvKiBPZGRpdHkg ICMyIC0gaGFyZHdhcmUgY2FuJ3QgYXBwbHkgZmlsbSBncmFpbiAqLwotCi0gICAgLyogV29ya2Fy b3VuZCBmb3IgTlZJRElBIGRyaXZlcnMgdGVzdGVkIHdpdGggQ1RTIHZlcnNpb24gMS4zLjggZm9y IEFWMS4KLSAgICAgKiBUaGUgdGVzdHMgd2VyZSBpbmNvcnJlY3QgYXMgdGhlIE9yZGVySGludHMg d2VyZSBvZmZzZXQgYnkgMS4gKi8KLSAgICBpbnQgcXVpcmtfYXYxX29mZnNldDsKLQotICAgIC8q IFRocmVhZC1sb2NhbCBzdGF0ZSBiZWxvdyAqLwotICAgIHN0cnVjdCBIRVZDSGVhZGVyU2V0ICpo ZXZjX2hlYWRlcnM7Ci0gICAgc2l6ZV90IGhldmNfaGVhZGVyc19zaXplOwotCi0gICAgdWludDMy X3QgICAgICAgICAgICAgICAgICAgICAgICpzbGljZV9vZmY7Ci0gICAgdW5zaWduZWQgaW50ICAg ICAgICAgICAgICAgICAgICBzbGljZV9vZmZfbWF4OwotfSBGRlZ1bGthbkRlY29kZUNvbnRleHQ7 Ci0KLXR5cGVkZWYgc3RydWN0IEZGVnVsa2FuRGVjb2RlUGljdHVyZSB7Ci0gICAgQVZGcmFtZSAg ICAgICAgICAgICAgICAgICAgICAgICpkcGJfZnJhbWU7ICAgICAgLyogT25seSB1c2VkIGZvciBv dXQtb2YtcGxhY2UgZGVjb2RpbmcuICovCi0KLSAgICBzdHJ1Y3QgewotICAgICAgICBWa0ltYWdl VmlldyAgICAgICAgICAgICAgICAgICAgIHJlZltBVl9OVU1fREFUQV9QT0lOVEVSU107ICAgICAg ICAvKiBJbWFnZSByZXByZXNlbnRhdGlvbiB2aWV3IChyZWZlcmVuY2UpICovCi0gICAgICAgIFZr SW1hZ2VWaWV3ICAgICAgICAgICAgICAgICAgICAgb3V0W0FWX05VTV9EQVRBX1BPSU5URVJTXTsg ICAgICAgIC8qIEltYWdlIHJlcHJlc2VudGF0aW9uIHZpZXcgKG91dHB1dC1vbmx5KSAqLwotICAg ICAgICBWa0ltYWdlVmlldyAgICAgICAgICAgICAgICAgICAgIGRzdFtBVl9OVU1fREFUQV9QT0lO VEVSU107ICAgICAgICAvKiBTZXQgdG8gaW1nX3ZpZXdfb3V0IGlmIG5vIGxheWVyZWQgcmVmcyBh cmUgdXNlZCAqLwotICAgICAgICBWa0ltYWdlQXNwZWN0RmxhZ3MgICAgICAgICAgICAgIGFzcGVj dFtBVl9OVU1fREFUQV9QT0lOVEVSU107ICAgICAvKiBJbWFnZSBwbGFuZSBtYXNrIGJpdHMgKi8K LSAgICAgICAgVmtJbWFnZUFzcGVjdEZsYWdzICAgICAgICAgICAgICBhc3BlY3RfcmVmW0FWX05V TV9EQVRBX1BPSU5URVJTXTsgLyogT25seSB1c2VkIGZvciBvdXQtb2YtcGxhY2UgZGVjb2Rpbmcg Ki8KLSAgICB9IHZpZXc7Ci0KLSAgICBWa1NlbWFwaG9yZSAgICAgICAgICAgICAgICAgICAgIHNl bTsKLSAgICB1aW50NjRfdCAgICAgICAgICAgICAgICAgICAgICAgIHNlbV92YWx1ZTsKLQotICAg IC8qIEN1cnJlbnQgcGljdHVyZSAqLwotICAgIFZrVmlkZW9QaWN0dXJlUmVzb3VyY2VJbmZvS0hS ICAgcmVmOwotICAgIFZrVmlkZW9SZWZlcmVuY2VTbG90SW5mb0tIUiAgICAgcmVmX3Nsb3Q7Ci0K LSAgICAvKiBQaWN0dXJlIHJlZnMuIEgyNjQgaGFzIHRoZSBtYXhpbXVtIG51bWJlciBvZiByZWZz ICgzNikgb2YgYW55IHN1cHBvcnRlZCBjb2RlYy4gKi8KLSAgICBWa1ZpZGVvUGljdHVyZVJlc291 cmNlSW5mb0tIUiAgIHJlZnMgICAgIFszNl07Ci0gICAgVmtWaWRlb1JlZmVyZW5jZVNsb3RJbmZv S0hSICAgICByZWZfc2xvdHNbMzZdOwotCi0gICAgLyogTWFpbiBkZWNvZGluZyBzdHJ1Y3QgKi8K LSAgICBWa1ZpZGVvRGVjb2RlSW5mb0tIUiAgICAgICAgICAgIGRlY29kZV9pbmZvOwotCi0gICAg LyogU2xpY2UgZGF0YSAqLwotICAgIEFWQnVmZmVyUmVmICAgICAgICAgICAgICAgICAgICAqc2xp Y2VzX2J1ZjsKLSAgICBzaXplX3QgICAgICAgICAgICAgICAgICAgICAgICAgIHNsaWNlc19zaXpl OwotCi0gICAgLyogVnVsa2FuIGZ1bmN0aW9ucyBuZWVkZWQgZm9yIGRlc3RydWN0aW9uLCBhcyBu byBvdGhlciBjb250ZXh0IGlzIGd1YXJhbnRlZWQgdG8gZXhpc3QgKi8KLSAgICBQRk5fdmtXYWl0 U2VtYXBob3JlcyAgICAgICAgICAgIHdhaXRfc2VtYXBob3JlczsKLSAgICBQRk5fdmtEZXN0cm95 SW1hZ2VWaWV3ICAgICAgICAgIGRlc3Ryb3lfaW1hZ2VfdmlldzsKLSAgICBQRk5fdmtJbnZhbGlk YXRlTWFwcGVkTWVtb3J5UmFuZ2VzIGludmFsaWRhdGVfbWVtb3J5X3JhbmdlczsKLX0gRkZWdWxr YW5EZWNvZGVQaWN0dXJlOwotCi0vKioKLSAqIEluaXRpYWxpemUgZGVjb2Rlci4KLSAqLwotaW50 IGZmX3ZrX2RlY29kZV9pbml0KEFWQ29kZWNDb250ZXh0ICphdmN0eCk7Ci0KLS8qKgotICogU3lu Y2hyb25pemUgdGhlIGNvbnRleHRzIGJldHdlZW4gMiB0aHJlYWRzLgotICovCi1pbnQgZmZfdmtf dXBkYXRlX3RocmVhZF9jb250ZXh0KEFWQ29kZWNDb250ZXh0ICpkc3QsIGNvbnN0IEFWQ29kZWND b250ZXh0ICpzcmMpOwotCi0vKioKLSAqIEluaXRpYWxpemUgaHdfZnJhbWVzX2N0eCB3aXRoIHRo ZSBwYXJhbWV0ZXJzIG5lZWRlZCB0byBkZWNvZGUgdGhlIHN0cmVhbQotICogdXNpbmcgdGhlIHBh cmFtZXRlcnMgZnJvbSBhdmN0eC4KLSAqCi0gKiBOT1RFOiBpZiBhdmN0eC0+aW50ZXJuYWwtPmh3 YWNjZWxfcHJpdl9kYXRhIGV4aXN0cywgd2lsbCBwYXJ0aWFsbHkgaW5pdGlhbGl6ZQotICogdGhl IGNvbnRleHQuCi0gKi8KLWludCBmZl92a19mcmFtZV9wYXJhbXMoQVZDb2RlY0NvbnRleHQgKmF2 Y3R4LCBBVkJ1ZmZlclJlZiAqaHdfZnJhbWVzX2N0eCk7Ci0KLS8qKgotICogUmVtb3ZlcyBjdXJy ZW50IHNlc3Npb24gcGFyYW1ldGVycyB0byByZWNyZWF0ZSB0aGVtCi0gKi8KLWludCBmZl92a19w YXJhbXNfaW52YWxpZGF0ZShBVkNvZGVjQ29udGV4dCAqYXZjdHgsIGludCB0LCBjb25zdCB1aW50 OF90ICpiLCB1aW50MzJfdCBzKTsKLQotLyoqCi0gKiBQcmVwYXJlIGEgZnJhbWUsIGNyZWF0ZXMg dGhlIGltYWdlIHZpZXcsIGFuZCBzZXRzIHVwIHRoZSBkcGIgZmllbGRzLgotICovCi1pbnQgZmZf dmtfZGVjb2RlX3ByZXBhcmVfZnJhbWUoRkZWdWxrYW5EZWNvZGVDb250ZXh0ICpkZWMsIEFWRnJh bWUgKnBpYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGRlZ1bGthbkRlY29kZVBp Y3R1cmUgKnZrcGljLCBpbnQgaXNfY3VycmVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpbnQgYWxsb2NfZHBiKTsKLQotLyoqCi0gKiBTb2Z0d2FyZS1kZWZpbmVkIGRlY29kZXIg dmVyc2lvbiBvZiBmZl92a19kZWNvZGVfcHJlcGFyZV9mcmFtZS4KLSAqLwotaW50IGZmX3ZrX2Rl Y29kZV9wcmVwYXJlX2ZyYW1lX3NkcihGRlZ1bGthbkRlY29kZUNvbnRleHQgKmRlYywgQVZGcmFt ZSAqcGljLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGRlZ1bGthbkRlY29k ZVBpY3R1cmUgKnZrcGljLCBpbnQgaXNfY3VycmVudCwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZW51bSBGRlZrU2hhZGVyUmVwRm9ybWF0IHJlcF9mbXQsIGludCBhbGxvY19k cGIpOwotCi0vKioKLSAqIEFkZCBzbGljZSBkYXRhIHRvIGZyYW1lLgotICovCi1pbnQgZmZfdmtf ZGVjb2RlX2FkZF9zbGljZShBVkNvZGVjQ29udGV4dCAqYXZjdHgsIEZGVnVsa2FuRGVjb2RlUGlj dHVyZSAqdnAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpkYXRh LCBzaXplX3Qgc2l6ZSwgaW50IGFkZF9zdGFydGNvZGUsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICB1aW50MzJfdCAqbmJfc2xpY2VzLCBjb25zdCB1aW50MzJfdCAqKm9mZnNldHMpOwotCi0v KioKLSAqIERlY29kZSBhIGZyYW1lLgotICovCi1pbnQgZmZfdmtfZGVjb2RlX2ZyYW1lKEFWQ29k ZWNDb250ZXh0ICphdmN0eCwKLSAgICAgICAgICAgICAgICAgICAgICAgQVZGcmFtZSAqcGljLCAg ICBGRlZ1bGthbkRlY29kZVBpY3R1cmUgKnZwLAotICAgICAgICAgICAgICAgICAgICAgICBBVkZy YW1lICpycGljW10sIEZGVnVsa2FuRGVjb2RlUGljdHVyZSAqcnZrcFtdKTsKLQotLyoqCi0gKiBG cmVlIGEgZnJhbWUgYW5kIGl0cyBzdGF0ZS4KLSAqLwotdm9pZCBmZl92a19kZWNvZGVfZnJlZV9m cmFtZShBVkhXRGV2aWNlQ29udGV4dCAqZGV2X2N0eCwgRkZWdWxrYW5EZWNvZGVQaWN0dXJlICp2 cCk7Ci0KLS8qKgotICogR2V0IGFuIEZGVmtCdWZmZXIgc3VpdGFibGUgZm9yIGRlY29kaW5nIGZy b20uCi0gKi8KLWludCBmZl92a19nZXRfZGVjb2RlX2J1ZmZlcihGRlZ1bGthbkRlY29kZUNvbnRl eHQgKmN0eCwgQVZCdWZmZXJSZWYgKipidWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg dm9pZCAqY3JlYXRlX3BOZXh0LCBzaXplX3Qgc2l6ZSk7Ci0KLS8qKgotICogQ3JlYXRlIFZrVmlk ZW9TZXNzaW9uUGFyYW1ldGVyc0tIUiB3cmFwcGVkIGluIGFuIEFWQnVmZmVyUmVmLgotICovCi1p bnQgZmZfdmtfZGVjb2RlX2NyZWF0ZV9wYXJhbXMoQVZCdWZmZXJSZWYgKipwYXJfcmVmLCB2b2lk ICpsb2djdHgsIEZGVnVsa2FuRGVjb2RlU2hhcmVkICpjdHgsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgVmtWaWRlb1Nlc3Npb25QYXJhbWV0ZXJzQ3JlYXRlSW5mb0tIUiAq c2Vzc2lvbl9wYXJhbXNfY3JlYXRlKTsKLQotLyoqCi0gKiBGbHVzaCBkZWNvZGVyLgotICovCi12 b2lkIGZmX3ZrX2RlY29kZV9mbHVzaChBVkNvZGVjQ29udGV4dCAqYXZjdHgpOwotCi0vKioKLSAq IEZyZWUgZGVjb2Rlci4KLSAqLwotaW50IGZmX3ZrX2RlY29kZV91bmluaXQoQVZDb2RlY0NvbnRl eHQgKmF2Y3R4KTsKLQotI2VuZGlmIC8qIEFWQ09ERUNfVlVMS0FOX0RFQ09ERV9IICovCi0tIAoy LjQ5LjEKCgpGcm9tIGFiNWMzZjQ3MzU0MmMzZTZkYjYyYTQ0NmUwMzUyZjQ2MmM5ZGExOWUgTW9u IFNlcCAxNyAwMDowMDowMCAyMDAxCkZyb206IEphbWFpa2ExIDxsdWthc3pjejE4QHdwLnBsPgpE YXRlOiBXZWQsIDMgU2VwIDIwMjUgMTM6MzA6MzUgKzAwMDAKU3ViamVjdDogW1BBVENIIDA2OC8x MThdIENoYW5naW5nIHZ1bGthbiBmaWxlIGRpcmVjdG9yeQoKLS0tCiBsaWJhdmNvZGVjL3Z1bGth bi92dWxrYW5fZGVjb2RlLmggfCAxODkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiAx IGZpbGUgY2hhbmdlZCwgMTg5IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJh dmNvZGVjL3Z1bGthbi92dWxrYW5fZGVjb2RlLmgKCmRpZmYgLS1naXQgYS9saWJhdmNvZGVjL3Z1 bGthbi92dWxrYW5fZGVjb2RlLmggYi9saWJhdmNvZGVjL3Z1bGthbi92dWxrYW5fZGVjb2RlLmgK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uNTlkMjIwOTZmNAotLS0gL2Rl di9udWxsCisrKyBiL2xpYmF2Y29kZWMvdnVsa2FuL3Z1bGthbl9kZWNvZGUuaApAQCAtMCwwICsx LDE4OSBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KKyAqCisgKiBGRm1w ZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u OyBlaXRoZXIKKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0 aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg KiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh bCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8g dGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl dCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKyAqLworCisjaWZuZGVm IEFWQ09ERUNfVlVMS0FOX0RFQ09ERV9ICisjZGVmaW5lIEFWQ09ERUNfVlVMS0FOX0RFQ09ERV9I CisKKyNpbmNsdWRlICJsaWJhdmNvZGVjL2NvZGVjX2lkLmgiCisjaW5jbHVkZSAibGliYXZjb2Rl Yy9kZWNvZGUuaCIKKyNpbmNsdWRlICJsaWJhdmNvZGVjL2h3YWNjZWxfaW50ZXJuYWwuaCIKKyNp bmNsdWRlICJsaWJhdmNvZGVjL2ludGVybmFsLmgiCisKKyNpbmNsdWRlICJ2dWxrYW5fdmlkZW8u aCIKKwordHlwZWRlZiBzdHJ1Y3QgRkZWdWxrYW5EZWNvZGVEZXNjcmlwdG9yIHsKKyAgICBlbnVt IEFWQ29kZWNJRCAgICAgICAgICAgICAgICAgICBjb2RlY19pZDsKKyAgICBGRlZ1bGthbkV4dGVu c2lvbnMgICAgICAgICAgICAgICBkZWNvZGVfZXh0ZW5zaW9uOworICAgIFZrUXVldWVGbGFnQml0 cyAgICAgICAgICAgICAgICAgIHF1ZXVlX2ZsYWdzOworICAgIFZrVmlkZW9Db2RlY09wZXJhdGlv bkZsYWdCaXRzS0hSIGRlY29kZV9vcDsKKworICAgIFZrRXh0ZW5zaW9uUHJvcGVydGllcyBleHRf cHJvcHM7Cit9IEZGVnVsa2FuRGVjb2RlRGVzY3JpcHRvcjsKKwordHlwZWRlZiBzdHJ1Y3QgRkZW dWxrYW5EZWNvZGVTaGFyZWQgeworICAgIEZGVnVsa2FuQ29udGV4dCBzOworICAgIEZGVmtWaWRl b0NvbW1vbiBjb21tb247CisgICAgQVZWdWxrYW5EZXZpY2VRdWV1ZUZhbWlseSAqcWY7CisgICAg RkZWa0V4ZWNQb29sIGV4ZWNfcG9vbDsKKworICAgIEFWQnVmZmVyUG9vbCAqYnVmX3Bvb2w7CisK KyAgICBWa1ZpZGVvQ2FwYWJpbGl0aWVzS0hSIGNhcHM7CisgICAgVmtWaWRlb0RlY29kZUNhcGFi aWxpdGllc0tIUiBkZWNfY2FwczsKKworICAgIFZrVmlkZW9TZXNzaW9uUGFyYW1ldGVyc0tIUiBl bXB0eV9zZXNzaW9uX3BhcmFtczsKKworICAgIC8qIFNvZnR3YXJlLWRlZmluZWQgZGVjb2RlciBj b250ZXh0ICovCisgICAgdm9pZCAqc2RfY3R4OworICAgIHZvaWQgKCpzZF9jdHhfZnJlZSkoc3Ry dWN0IEZGVnVsa2FuRGVjb2RlU2hhcmVkICpjdHgpOworfSBGRlZ1bGthbkRlY29kZVNoYXJlZDsK KwordHlwZWRlZiBzdHJ1Y3QgRkZWdWxrYW5EZWNvZGVDb250ZXh0IHsKKyAgICBGRlZ1bGthbkRl Y29kZVNoYXJlZCAqc2hhcmVkX2N0eDsKKyAgICBBVkJ1ZmZlclJlZiAqc2Vzc2lvbl9wYXJhbXM7 CisKKyAgICBpbnQgZGVkaWNhdGVkX2RwYjsgLyogT2RkaXR5ICAjMSAtIHNlcGFyYXRlIERQQiBp bWFnZXMgKi8KKyAgICBpbnQgZXh0ZXJuYWxfZmc7ICAgLyogT2RkaXR5ICAjMiAtIGhhcmR3YXJl IGNhbid0IGFwcGx5IGZpbG0gZ3JhaW4gKi8KKworICAgIC8qIFdvcmthcm91bmQgZm9yIE5WSURJ QSBkcml2ZXJzIHRlc3RlZCB3aXRoIENUUyB2ZXJzaW9uIDEuMy44IGZvciBBVjEuCisgICAgICog VGhlIHRlc3RzIHdlcmUgaW5jb3JyZWN0IGFzIHRoZSBPcmRlckhpbnRzIHdlcmUgb2Zmc2V0IGJ5 IDEuICovCisgICAgaW50IHF1aXJrX2F2MV9vZmZzZXQ7CisKKyAgICAvKiBUaHJlYWQtbG9jYWwg c3RhdGUgYmVsb3cgKi8KKyAgICBzdHJ1Y3QgSEVWQ0hlYWRlclNldCAqaGV2Y19oZWFkZXJzOwor ICAgIHNpemVfdCBoZXZjX2hlYWRlcnNfc2l6ZTsKKworICAgIHVpbnQzMl90ICAgICAgICAgICAg ICAgICAgICAgICAqc2xpY2Vfb2ZmOworICAgIHVuc2lnbmVkIGludCAgICAgICAgICAgICAgICAg ICAgc2xpY2Vfb2ZmX21heDsKK30gRkZWdWxrYW5EZWNvZGVDb250ZXh0OworCit0eXBlZGVmIHN0 cnVjdCBGRlZ1bGthbkRlY29kZVBpY3R1cmUgeworICAgIEFWRnJhbWUgICAgICAgICAgICAgICAg ICAgICAgICAqZHBiX2ZyYW1lOyAgICAgIC8qIE9ubHkgdXNlZCBmb3Igb3V0LW9mLXBsYWNlIGRl Y29kaW5nLiAqLworCisgICAgc3RydWN0IHsKKyAgICAgICAgVmtJbWFnZVZpZXcgICAgICAgICAg ICAgICAgICAgICByZWZbQVZfTlVNX0RBVEFfUE9JTlRFUlNdOyAgICAgICAgLyogSW1hZ2UgcmVw cmVzZW50YXRpb24gdmlldyAocmVmZXJlbmNlKSAqLworICAgICAgICBWa0ltYWdlVmlldyAgICAg ICAgICAgICAgICAgICAgIG91dFtBVl9OVU1fREFUQV9QT0lOVEVSU107ICAgICAgICAvKiBJbWFn ZSByZXByZXNlbnRhdGlvbiB2aWV3IChvdXRwdXQtb25seSkgKi8KKyAgICAgICAgVmtJbWFnZVZp ZXcgICAgICAgICAgICAgICAgICAgICBkc3RbQVZfTlVNX0RBVEFfUE9JTlRFUlNdOyAgICAgICAg LyogU2V0IHRvIGltZ192aWV3X291dCBpZiBubyBsYXllcmVkIHJlZnMgYXJlIHVzZWQgKi8KKyAg ICAgICAgVmtJbWFnZUFzcGVjdEZsYWdzICAgICAgICAgICAgICBhc3BlY3RbQVZfTlVNX0RBVEFf UE9JTlRFUlNdOyAgICAgLyogSW1hZ2UgcGxhbmUgbWFzayBiaXRzICovCisgICAgICAgIFZrSW1h Z2VBc3BlY3RGbGFncyAgICAgICAgICAgICAgYXNwZWN0X3JlZltBVl9OVU1fREFUQV9QT0lOVEVS U107IC8qIE9ubHkgdXNlZCBmb3Igb3V0LW9mLXBsYWNlIGRlY29kaW5nICovCisgICAgfSB2aWV3 OworCisgICAgVmtTZW1hcGhvcmUgICAgICAgICAgICAgICAgICAgICBzZW07CisgICAgdWludDY0 X3QgICAgICAgICAgICAgICAgICAgICAgICBzZW1fdmFsdWU7CisKKyAgICAvKiBDdXJyZW50IHBp Y3R1cmUgKi8KKyAgICBWa1ZpZGVvUGljdHVyZVJlc291cmNlSW5mb0tIUiAgIHJlZjsKKyAgICBW a1ZpZGVvUmVmZXJlbmNlU2xvdEluZm9LSFIgICAgIHJlZl9zbG90OworCisgICAgLyogUGljdHVy ZSByZWZzLiBIMjY0IGhhcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgcmVmcyAoMzYpIG9mIGFueSBz dXBwb3J0ZWQgY29kZWMuICovCisgICAgVmtWaWRlb1BpY3R1cmVSZXNvdXJjZUluZm9LSFIgICBy ZWZzICAgICBbMzZdOworICAgIFZrVmlkZW9SZWZlcmVuY2VTbG90SW5mb0tIUiAgICAgcmVmX3Ns b3RzWzM2XTsKKworICAgIC8qIE1haW4gZGVjb2Rpbmcgc3RydWN0ICovCisgICAgVmtWaWRlb0Rl Y29kZUluZm9LSFIgICAgICAgICAgICBkZWNvZGVfaW5mbzsKKworICAgIC8qIFNsaWNlIGRhdGEg Ki8KKyAgICBBVkJ1ZmZlclJlZiAgICAgICAgICAgICAgICAgICAgKnNsaWNlc19idWY7CisgICAg c2l6ZV90ICAgICAgICAgICAgICAgICAgICAgICAgICBzbGljZXNfc2l6ZTsKKworICAgIC8qIFZ1 bGthbiBmdW5jdGlvbnMgbmVlZGVkIGZvciBkZXN0cnVjdGlvbiwgYXMgbm8gb3RoZXIgY29udGV4 dCBpcyBndWFyYW50ZWVkIHRvIGV4aXN0ICovCisgICAgUEZOX3ZrV2FpdFNlbWFwaG9yZXMgICAg ICAgICAgICB3YWl0X3NlbWFwaG9yZXM7CisgICAgUEZOX3ZrRGVzdHJveUltYWdlVmlldyAgICAg ICAgICBkZXN0cm95X2ltYWdlX3ZpZXc7CisgICAgUEZOX3ZrSW52YWxpZGF0ZU1hcHBlZE1lbW9y eVJhbmdlcyBpbnZhbGlkYXRlX21lbW9yeV9yYW5nZXM7Cit9IEZGVnVsa2FuRGVjb2RlUGljdHVy ZTsKKworLyoqCisgKiBJbml0aWFsaXplIGRlY29kZXIuCisgKi8KK2ludCBmZl92a19kZWNvZGVf aW5pdChBVkNvZGVjQ29udGV4dCAqYXZjdHgpOworCisvKioKKyAqIFN5bmNocm9uaXplIHRoZSBj b250ZXh0cyBiZXR3ZWVuIDIgdGhyZWFkcy4KKyAqLworaW50IGZmX3ZrX3VwZGF0ZV90aHJlYWRf Y29udGV4dChBVkNvZGVjQ29udGV4dCAqZHN0LCBjb25zdCBBVkNvZGVjQ29udGV4dCAqc3JjKTsK KworLyoqCisgKiBJbml0aWFsaXplIGh3X2ZyYW1lc19jdHggd2l0aCB0aGUgcGFyYW1ldGVycyBu ZWVkZWQgdG8gZGVjb2RlIHRoZSBzdHJlYW0KKyAqIHVzaW5nIHRoZSBwYXJhbWV0ZXJzIGZyb20g YXZjdHguCisgKgorICogTk9URTogaWYgYXZjdHgtPmludGVybmFsLT5od2FjY2VsX3ByaXZfZGF0 YSBleGlzdHMsIHdpbGwgcGFydGlhbGx5IGluaXRpYWxpemUKKyAqIHRoZSBjb250ZXh0LgorICov CitpbnQgZmZfdmtfZnJhbWVfcGFyYW1zKEFWQ29kZWNDb250ZXh0ICphdmN0eCwgQVZCdWZmZXJS ZWYgKmh3X2ZyYW1lc19jdHgpOworCisvKioKKyAqIFJlbW92ZXMgY3VycmVudCBzZXNzaW9uIHBh cmFtZXRlcnMgdG8gcmVjcmVhdGUgdGhlbQorICovCitpbnQgZmZfdmtfcGFyYW1zX2ludmFsaWRh dGUoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LCBpbnQgdCwgY29uc3QgdWludDhfdCAqYiwgdWludDMy X3Qgcyk7CisKKy8qKgorICogUHJlcGFyZSBhIGZyYW1lLCBjcmVhdGVzIHRoZSBpbWFnZSB2aWV3 LCBhbmQgc2V0cyB1cCB0aGUgZHBiIGZpZWxkcy4KKyAqLworaW50IGZmX3ZrX2RlY29kZV9wcmVw YXJlX2ZyYW1lKEZGVnVsa2FuRGVjb2RlQ29udGV4dCAqZGVjLCBBVkZyYW1lICpwaWMsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgRkZWdWxrYW5EZWNvZGVQaWN0dXJlICp2a3BpYywg aW50IGlzX2N1cnJlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFsbG9j X2RwYik7CisKKy8qKgorICogU29mdHdhcmUtZGVmaW5lZCBkZWNvZGVyIHZlcnNpb24gb2YgZmZf dmtfZGVjb2RlX3ByZXBhcmVfZnJhbWUuCisgKi8KK2ludCBmZl92a19kZWNvZGVfcHJlcGFyZV9m cmFtZV9zZHIoRkZWdWxrYW5EZWNvZGVDb250ZXh0ICpkZWMsIEFWRnJhbWUgKnBpYywKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkZWdWxrYW5EZWNvZGVQaWN0dXJlICp2a3Bp YywgaW50IGlzX2N1cnJlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVu dW0gRkZWa1NoYWRlclJlcEZvcm1hdCByZXBfZm10LCBpbnQgYWxsb2NfZHBiKTsKKworLyoqCisg KiBBZGQgc2xpY2UgZGF0YSB0byBmcmFtZS4KKyAqLworaW50IGZmX3ZrX2RlY29kZV9hZGRfc2xp Y2UoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LCBGRlZ1bGthbkRlY29kZVBpY3R1cmUgKnZwLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqZGF0YSwgc2l6ZV90IHNpemUs IGludCBhZGRfc3RhcnRjb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qg Km5iX3NsaWNlcywgY29uc3QgdWludDMyX3QgKipvZmZzZXRzKTsKKworLyoqCisgKiBEZWNvZGUg YSBmcmFtZS4KKyAqLworaW50IGZmX3ZrX2RlY29kZV9mcmFtZShBVkNvZGVjQ29udGV4dCAqYXZj dHgsCisgICAgICAgICAgICAgICAgICAgICAgIEFWRnJhbWUgKnBpYywgICAgRkZWdWxrYW5EZWNv ZGVQaWN0dXJlICp2cCwKKyAgICAgICAgICAgICAgICAgICAgICAgQVZGcmFtZSAqcnBpY1tdLCBG RlZ1bGthbkRlY29kZVBpY3R1cmUgKnJ2a3BbXSk7CisKKy8qKgorICogRnJlZSBhIGZyYW1lIGFu ZCBpdHMgc3RhdGUuCisgKi8KK3ZvaWQgZmZfdmtfZGVjb2RlX2ZyZWVfZnJhbWUoQVZIV0Rldmlj ZUNvbnRleHQgKmRldl9jdHgsIEZGVnVsa2FuRGVjb2RlUGljdHVyZSAqdnApOworCisvKioKKyAq IEdldCBhbiBGRlZrQnVmZmVyIHN1aXRhYmxlIGZvciBkZWNvZGluZyBmcm9tLgorICovCitpbnQg ZmZfdmtfZ2V0X2RlY29kZV9idWZmZXIoRkZWdWxrYW5EZWNvZGVDb250ZXh0ICpjdHgsIEFWQnVm ZmVyUmVmICoqYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmNyZWF0ZV9w TmV4dCwgc2l6ZV90IHNpemUpOworCisvKioKKyAqIENyZWF0ZSBWa1ZpZGVvU2Vzc2lvblBhcmFt ZXRlcnNLSFIgd3JhcHBlZCBpbiBhbiBBVkJ1ZmZlclJlZi4KKyAqLworaW50IGZmX3ZrX2RlY29k ZV9jcmVhdGVfcGFyYW1zKEFWQnVmZmVyUmVmICoqcGFyX3JlZiwgdm9pZCAqbG9nY3R4LCBGRlZ1 bGthbkRlY29kZVNoYXJlZCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IFZrVmlkZW9TZXNzaW9uUGFyYW1ldGVyc0NyZWF0ZUluZm9LSFIgKnNlc3Npb25fcGFyYW1z X2NyZWF0ZSk7CisKKy8qKgorICogRmx1c2ggZGVjb2Rlci4KKyAqLwordm9pZCBmZl92a19kZWNv ZGVfZmx1c2goQVZDb2RlY0NvbnRleHQgKmF2Y3R4KTsKKworLyoqCisgKiBGcmVlIGRlY29kZXIu CisgKi8KK2ludCBmZl92a19kZWNvZGVfdW5pbml0KEFWQ29kZWNDb250ZXh0ICphdmN0eCk7CisK KyNlbmRpZiAvKiBBVkNPREVDX1ZVTEtBTl9ERUNPREVfSCAqLwotLSAKMi40OS4xCgoKRnJvbSA0 YWQ2ZmQ4OGYzOGEwODNiMGJhMTcxNTIxZjAxYWRkNzI4ZjIxNTk2IE1vbiBTZXAgMTcgMDA6MDA6 MDAgMjAwMQpGcm9tOiBKYW1haWthMSA8bHVrYXN6Y3oxOEB3cC5wbD4KRGF0ZTogV2VkLCAzIFNl cCAyMDI1IDEzOjMxOjAyICswMDAwClN1YmplY3Q6IFtQQVRDSCAwNjkvMTE4XSBDaGFuZ2luZyB2 dWxrYW4gZmlsZSBkaXJlY3RvcnkKCi0tLQogbGliYXZjb2RlYy92dWxrYW5fZW5jb2RlLmMgfCAx MDU0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQs IDEwNTQgZGVsZXRpb25zKC0pCiBkZWxldGUgbW9kZSAxMDA2NDQgbGliYXZjb2RlYy92dWxrYW5f ZW5jb2RlLmMKCmRpZmYgLS1naXQgYS9saWJhdmNvZGVjL3Z1bGthbl9lbmNvZGUuYyBiL2xpYmF2 Y29kZWMvdnVsa2FuX2VuY29kZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNWMw NDk2ZjFjLi4wMDAwMDAwMDAwCi0tLSBhL2xpYmF2Y29kZWMvdnVsa2FuX2VuY29kZS5jCisrKyAv ZGV2L251bGwKQEAgLTEsMTA1NCArMCwwIEBACi0vKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2Yg RkZtcGVnLgotICoKLSAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp YnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM ZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vu c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogRkZtcGVn IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBi dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50 eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt b3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0 aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBl ZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5j LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAx IFVTQQotICovCi0KLSNpbmNsdWRlICJsaWJhdnV0aWwvbWVtLmgiCi0jaW5jbHVkZSAibGliYXZ1 dGlsL2F2YXNzZXJ0LmgiCi0jaW5jbHVkZSAidnVsa2FuX2VuY29kZS5oIgotI2luY2x1ZGUgImNv bmZpZy5oIgotCi0jaW5jbHVkZSAibGliYXZ1dGlsL3Z1bGthbl9sb2FkZXIuaCIKLQotY29uc3Qg QVZDb2RlY0hXQ29uZmlnSW50ZXJuYWwgKmNvbnN0IGZmX3Z1bGthbl9lbmNvZGVfaHdfY29uZmln c1tdID0gewotICAgIEhXX0NPTkZJR19FTkNPREVSX0ZSQU1FUyhWVUxLQU4sIFZVTEtBTiksCi0g ICAgTlVMTCwKLX07Ci0KLWF2X2NvbGQgdm9pZCBmZl92dWxrYW5fZW5jb2RlX3VuaW5pdChGRlZ1 bGthbkVuY29kZUNvbnRleHQgKmN0eCkKLXsKLSAgICBGRlZ1bGthbkNvbnRleHQgKnMgPSAmY3R4 LT5zOwotICAgIEZGVnVsa2FuRnVuY3Rpb25zICp2ayA9ICZzLT52a2ZuOwotCi0gICAgLyogV2Fp dCBvbiBhbmQgZnJlZSBleGVjdXRpb24gcG9vbCAqLwotICAgIGZmX3ZrX2V4ZWNfcG9vbF9mcmVl KHMsICZjdHgtPmVuY19wb29sKTsKLQotICAgIC8qIERlc3Ryb3kgdGhlIHNlc3Npb24gcGFyYW1z ICovCi0gICAgaWYgKGN0eC0+c2Vzc2lvbl9wYXJhbXMpCi0gICAgICAgIHZrLT5EZXN0cm95Vmlk ZW9TZXNzaW9uUGFyYW1ldGVyc0tIUihzLT5od2N0eC0+YWN0X2RldiwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+c2Vzc2lvbl9wYXJhbXMsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLT5od2N0eC0+YWxsb2Mp OwotCi0gICAgZmZfaHdfYmFzZV9lbmNvZGVfY2xvc2UoJmN0eC0+YmFzZSk7Ci0KLSAgICBhdl9i dWZmZXJfcG9vbF91bmluaXQoJmN0eC0+YnVmX3Bvb2wpOwotCi0gICAgZmZfdmtfdmlkZW9fY29t bW9uX3VuaW5pdChzLCAmY3R4LT5jb21tb24pOwotCi0gICAgZmZfdmtfdW5pbml0KHMpOwotfQot Ci1zdGF0aWMgaW50IHZ1bGthbl9lbmNvZGVfaW5pdChBVkNvZGVjQ29udGV4dCAqYXZjdHgsIEZG SFdCYXNlRW5jb2RlUGljdHVyZSAqcGljKQotewotICAgIGludCBlcnI7Ci0gICAgRkZWdWxrYW5F bmNvZGVDb250ZXh0ICpjdHggPSBhdmN0eC0+cHJpdl9kYXRhOwotICAgIEZGVnVsa2FuRW5jb2Rl UGljdHVyZSAqdnAgPSBwaWMtPnByaXY7Ci0KLSAgICBBVkZyYW1lICpmID0gcGljLT5pbnB1dF9p bWFnZTsKLSAgICBBVkhXRnJhbWVzQ29udGV4dCAqaHdmYyA9IChBVkhXRnJhbWVzQ29udGV4dCAq KWYtPmh3X2ZyYW1lc19jdHgtPmRhdGE7Ci0gICAgQVZWdWxrYW5GcmFtZXNDb250ZXh0ICp2a2Zj ID0gaHdmYy0+aHdjdHg7Ci0gICAgQVZWa0ZyYW1lICp2a2YgPSAoQVZWa0ZyYW1lICopZi0+ZGF0 YVswXTsKLQotICAgIGlmIChjdHgtPmNvZGVjLT5waWN0dXJlX3ByaXZfZGF0YV9zaXplID4gMCkg ewotICAgICAgICBwaWMtPmNvZGVjX3ByaXYgPSBhdl9tYWxsb2N6KGN0eC0+Y29kZWMtPnBpY3R1 cmVfcHJpdl9kYXRhX3NpemUpOwotICAgICAgICBpZiAoIXBpYy0+Y29kZWNfcHJpdikKLSAgICAg ICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7Ci0gICAgfQotCi0gICAgLyogSW5wdXQgaW1h Z2UgdmlldyAqLwotICAgIGVyciA9IGZmX3ZrX2NyZWF0ZV92aWV3KCZjdHgtPnMsICZjdHgtPmNv bW1vbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdnAtPmluLnZpZXcsICZ2cC0+aW4u YXNwZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZrZiwgdmtmYy0+Zm9ybWF0WzBd LCAwKTsKLSAgICBpZiAoZXJyIDwgMCkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIC8qIFJl ZmVyZW5jZSB2aWV3ICovCi0gICAgaWYgKCFjdHgtPmNvbW1vbi5sYXllcmVkX2RwYikgewotICAg ICAgICBBVkZyYW1lICpyZiA9IHBpYy0+cmVjb25faW1hZ2U7Ci0gICAgICAgIEFWVmtGcmFtZSAq cnZrZiA9IChBVlZrRnJhbWUgKilyZi0+ZGF0YVswXTsKLSAgICAgICAgZXJyID0gZmZfdmtfY3Jl YXRlX3ZpZXcoJmN0eC0+cywgJmN0eC0+Y29tbW9uLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAmdnAtPmRwYi52aWV3LCAmdnAtPmRwYi5hc3BlY3QsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHJ2a2YsIGN0eC0+cGljX2Zvcm1hdCwgMSk7Ci0gICAgICAgIGlmIChl cnIgPCAwKQotICAgICAgICAgICAgcmV0dXJuIGVycjsKLSAgICB9IGVsc2UgewotICAgICAgICB2 cC0+ZHBiLnZpZXcgPSBjdHgtPmNvbW1vbi5sYXllcmVkX3ZpZXc7Ci0gICAgICAgIHZwLT5kcGIu YXNwZWN0ID0gY3R4LT5jb21tb24ubGF5ZXJlZF9hc3BlY3Q7Ci0gICAgfQotCi0gICAgcmV0dXJu IDA7Ci19Ci0KLXN0YXRpYyBpbnQgdnVsa2FuX2VuY29kZV9mcmVlKEFWQ29kZWNDb250ZXh0ICph dmN0eCwgRkZIV0Jhc2VFbmNvZGVQaWN0dXJlICpwaWMpCi17Ci0gICAgRkZWdWxrYW5FbmNvZGVD b250ZXh0ICpjdHggPSBhdmN0eC0+cHJpdl9kYXRhOwotICAgIEZGVnVsa2FuRnVuY3Rpb25zICp2 ayA9ICZjdHgtPnMudmtmbjsKLQotICAgIEZGVnVsa2FuRW5jb2RlUGljdHVyZSAqdnAgPSBwaWMt PnByaXY7Ci0KLSAgICBpZiAodnAtPmluLnZpZXcpCi0gICAgICAgIHZrLT5EZXN0cm95SW1hZ2VW aWV3KGN0eC0+cy5od2N0eC0+YWN0X2RldiwgdnAtPmluLnZpZXcsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGN0eC0+cy5od2N0eC0+YWxsb2MpOwotCi0gICAgaWYgKCFjdHgtPmNvbW1v bi5sYXllcmVkX2RwYiAmJiB2cC0+ZHBiLnZpZXcpCi0gICAgICAgIHZrLT5EZXN0cm95SW1hZ2VW aWV3KGN0eC0+cy5od2N0eC0+YWN0X2RldiwgdnAtPmRwYi52aWV3LAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjdHgtPnMuaHdjdHgtPmFsbG9jKTsKLQotICAgIGN0eC0+c2xvdHNbdnAt PmRwYl9zbG90LnNsb3RJbmRleF0gPSBOVUxMOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRp YyBpbnQgaW5pdF9waWNfcmMoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LCBGRkhXQmFzZUVuY29kZVBp Y3R1cmUgKnBpYywKLSAgICAgICAgICAgICAgICAgICAgICAgVmtWaWRlb0VuY29kZVJhdGVDb250 cm9sSW5mb0tIUiAqcmNfaW5mbywKLSAgICAgICAgICAgICAgICAgICAgICAgVmtWaWRlb0VuY29k ZVJhdGVDb250cm9sTGF5ZXJJbmZvS0hSICpyY19sYXllciAvKiBHb2VzIGluIF4gKi8pCi17Ci0g ICAgRkZWdWxrYW5FbmNvZGVDb250ZXh0ICpjdHggPSBhdmN0eC0+cHJpdl9kYXRhOwotCi0gICAg KnJjX2luZm8gPSAoVmtWaWRlb0VuY29kZVJhdGVDb250cm9sSW5mb0tIUikgewotICAgICAgICAu c1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9WSURFT19FTkNPREVfUkFURV9DT05UUk9MX0lORk9f S0hSLAotICAgICAgICAucmF0ZUNvbnRyb2xNb2RlID0gY3R4LT5vcHRzLnJjX21vZGUsCi0gICAg fTsKLQotICAgIGlmIChjdHgtPm9wdHMucmNfbW9kZSA+IFZLX1ZJREVPX0VOQ09ERV9SQVRFX0NP TlRST0xfTU9ERV9ESVNBQkxFRF9CSVRfS0hSKSB7Ci0gICAgICAgICpyY19sYXllciA9IChWa1Zp ZGVvRW5jb2RlUmF0ZUNvbnRyb2xMYXllckluZm9LSFIpIHsKLSAgICAgICAgICAgIC5zVHlwZSA9 IFZLX1NUUlVDVFVSRV9UWVBFX1ZJREVPX0VOQ09ERV9SQVRFX0NPTlRST0xfTEFZRVJfSU5GT19L SFIsCi0gICAgICAgICAgICAuYXZlcmFnZUJpdHJhdGUgPSBhdmN0eC0+Yml0X3JhdGUsCi0gICAg ICAgICAgICAubWF4Qml0cmF0ZSA9IGF2Y3R4LT5yY19tYXhfcmF0ZSA/IGF2Y3R4LT5yY19tYXhf cmF0ZSA6IGF2Y3R4LT5iaXRfcmF0ZSwKLSAgICAgICAgICAgIC5mcmFtZVJhdGVOdW1lcmF0b3Ig PSBhdmN0eC0+ZnJhbWVyYXRlLm51bSwKLSAgICAgICAgICAgIC5mcmFtZVJhdGVEZW5vbWluYXRv ciA9IGF2Y3R4LT5mcmFtZXJhdGUuZGVuLAotICAgICAgICB9OwotICAgICAgICByY19pbmZvLT5s YXllckNvdW50Kys7Ci0gICAgICAgIHJjX2luZm8tPnBMYXllcnMgPSByY19sYXllcjsKLSAgICB9 Ci0KLSAgICByZXR1cm4gY3R4LT5jb2RlYy0+aW5pdF9waWNfcmMoYXZjdHgsIHBpYywgcmNfaW5m bywgcmNfbGF5ZXIpOwotfQotCi1zdGF0aWMgaW50IHZ1bGthbl9lbmNvZGVfaXNzdWUoQVZDb2Rl Y0NvbnRleHQgKmF2Y3R4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZGSFdCYXNl RW5jb2RlUGljdHVyZSAqYmFzZV9waWMpCi17Ci0gICAgRkZWdWxrYW5FbmNvZGVDb250ZXh0ICpj dHggPSBhdmN0eC0+cHJpdl9kYXRhOwotICAgIEZGVnVsa2FuRnVuY3Rpb25zICp2ayA9ICZjdHgt PnMudmtmbjsKLQotICAgIGNvbnN0IHNpemVfdCBzaXplX2FsaWduID0gY3R4LT5jYXBzLm1pbkJp dHN0cmVhbUJ1ZmZlclNpemVBbGlnbm1lbnQ7Ci0KLSAgICBGRlZ1bGthbkVuY29kZVBpY3R1cmUg KnZwID0gYmFzZV9waWMtPnByaXY7Ci0gICAgQVZGcmFtZSAqc3JjID0gKEFWRnJhbWUgKiliYXNl X3BpYy0+aW5wdXRfaW1hZ2U7Ci0gICAgQVZWa0ZyYW1lICp2a2YgPSAoQVZWa0ZyYW1lICopc3Jj LT5kYXRhWzBdOwotCi0gICAgaW50IGVyciwgbWF4X3BrdF9zaXplOwotCi0gICAgRkZWa0J1ZmZl ciAqc2RfYnVmOwotCi0gICAgaW50IHNsb3RfaW5kZXggPSAtMTsKLSAgICBGRlZrRXhlY0NvbnRl eHQgKmV4ZWM7Ci0gICAgVmtDb21tYW5kQnVmZmVyIGNtZF9idWY7Ci0gICAgVmtJbWFnZU1lbW9y eUJhcnJpZXIyIGltZ19iYXJbMzddOwotICAgIGludCBuYl9pbWdfYmFyID0gMDsKLQotICAgIC8q IENvZGluZyBzdGFydC9lbmQgKi8KLSAgICBWa1ZpZGVvQmVnaW5Db2RpbmdJbmZvS0hSIGVuY29k ZV9zdGFydDsKLSAgICBWa1ZpZGVvRW5kQ29kaW5nSW5mb0tIUiBlbmNvZGVfZW5kID0gewotICAg ICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9WSURFT19FTkRfQ09ESU5HX0lORk9fS0hS LAotICAgIH07Ci0KLSAgICBWa1ZpZGVvRW5jb2RlUmF0ZUNvbnRyb2xMYXllckluZm9LSFIgcmNf bGF5ZXI7Ci0gICAgVmtWaWRlb0VuY29kZVJhdGVDb250cm9sSW5mb0tIUiByY19pbmZvOwotICAg IFZrVmlkZW9FbmNvZGVRdWFsaXR5TGV2ZWxJbmZvS0hSIHFfaW5mbzsKLSAgICBWa1ZpZGVvQ29k aW5nQ29udHJvbEluZm9LSFIgZW5jb2RlX2N0cmw7Ci0KLSAgICBWa1ZpZGVvUmVmZXJlbmNlU2xv dEluZm9LSFIgcmVmX3Nsb3RbMzddOwotICAgIFZrVmlkZW9FbmNvZGVJbmZvS0hSIGVuY29kZV9p bmZvOwotCi0gICAgLyogQ3JlYXRlIHBhY2tldCBkYXRhIGJ1ZmZlciAqLwotICAgIG1heF9wa3Rf c2l6ZSA9IEZGQUxJR04oMyAqIGN0eC0+YmFzZS5zdXJmYWNlX3dpZHRoICogY3R4LT5iYXNlLnN1 cmZhY2VfaGVpZ2h0ICsgKDEgPDwgMTYpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4 LT5jYXBzLm1pbkJpdHN0cmVhbUJ1ZmZlclNpemVBbGlnbm1lbnQpOwotCi0gICAgZXJyID0gZmZf dmtfZ2V0X3Bvb2xlZF9idWZmZXIoJmN0eC0+cywgJmN0eC0+YnVmX3Bvb2wsICZ2cC0+cGt0X2J1 ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19CVUZGRVJfVVNBR0VfVklE RU9fRU5DT0RFX0RTVF9CSVRfS0hSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICZjdHgtPnByb2ZpbGVfbGlzdCwgbWF4X3BrdF9zaXplLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFZLX01FTU9SWV9QUk9QRVJUWV9IT1NUX1ZJU0lCTEVfQklUIHwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19NRU1PUllfUFJPUEVSVFlfSE9TVF9DQUNI RURfQklUKTsKLSAgICBpZiAoZXJyIDwgMCkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHNk X2J1ZiA9IChGRlZrQnVmZmVyICopdnAtPnBrdF9idWYtPmRhdGE7Ci0KLSAgICAvKiBTZXR1cCBy YXRlIGNvbnRyb2wgKi8KLSAgICBlcnIgPSBpbml0X3BpY19yYyhhdmN0eCwgYmFzZV9waWMsICZy Y19pbmZvLCAmcmNfbGF5ZXIpOwotICAgIGlmIChlcnIgPCAwKQotICAgICAgICByZXR1cm4gZXJy OwotCi0gICAgcV9pbmZvID0gKFZrVmlkZW9FbmNvZGVRdWFsaXR5TGV2ZWxJbmZvS0hSKSB7Ci0g ICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX1ZJREVPX0VOQ09ERV9RVUFMSVRZX0xF VkVMX0lORk9fS0hSLAotICAgICAgICAucE5leHQgPSAmcmNfaW5mbywKLSAgICAgICAgLnF1YWxp dHlMZXZlbCA9IGN0eC0+b3B0cy5xdWFsaXR5LAotICAgIH07Ci0gICAgZW5jb2RlX2N0cmwgPSAo VmtWaWRlb0NvZGluZ0NvbnRyb2xJbmZvS0hSKSB7Ci0gICAgICAgIC5zVHlwZSA9IFZLX1NUUlVD VFVSRV9UWVBFX1ZJREVPX0NPRElOR19DT05UUk9MX0lORk9fS0hSLAotICAgICAgICAucE5leHQg PSAmcV9pbmZvLAotICAgICAgICAuZmxhZ3MgPSBWS19WSURFT19DT0RJTkdfQ09OVFJPTF9FTkNP REVfUVVBTElUWV9MRVZFTF9CSVRfS0hSIHwKLSAgICAgICAgICAgICAgICAgVktfVklERU9fQ09E SU5HX0NPTlRST0xfRU5DT0RFX1JBVEVfQ09OVFJPTF9CSVRfS0hSIHwKLSAgICAgICAgICAgICAg ICAgVktfVklERU9fQ09ESU5HX0NPTlRST0xfUkVTRVRfQklUX0tIUiwKLSAgICB9OwotCi0gICAg Zm9yIChpbnQgaSA9IDA7IGkgPCBjdHgtPmNhcHMubWF4RHBiU2xvdHM7IGkrKykgewotICAgICAg ICBpZiAoY3R4LT5zbG90c1tpXSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBzbG90X2luZGV4ID0g aTsKLSAgICAgICAgICAgIGN0eC0+c2xvdHNbaV0gPSBiYXNlX3BpYzsKLSAgICAgICAgICAgIGJy ZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIGF2X2Fzc2VydDAoc2xvdF9pbmRleCA+PSAwKTsK LQotICAgIC8qIEN1cnJlbnQgcGljdHVyZSdzIHJlZiBzbG90ICovCi0gICAgdnAtPmRwYl9yZXMg PSAoVmtWaWRlb1BpY3R1cmVSZXNvdXJjZUluZm9LSFIpIHsKLSAgICAgICAgLnNUeXBlID0gVktf U1RSVUNUVVJFX1RZUEVfVklERU9fUElDVFVSRV9SRVNPVVJDRV9JTkZPX0tIUiwKLSAgICAgICAg LnBOZXh0ID0gTlVMTCwKLSAgICAgICAgLmNvZGVkT2Zmc2V0ID0geyAwIH0sCi0gICAgICAgIC5j b2RlZEV4dGVudCA9IChWa0V4dGVudDJEKXsgYXZjdHgtPndpZHRoLCBhdmN0eC0+aGVpZ2h0IH0s Ci0gICAgICAgIC5iYXNlQXJyYXlMYXllciA9IGN0eC0+Y29tbW9uLmxheWVyZWRfZHBiID8gc2xv dF9pbmRleCA6IDAsCi0gICAgICAgIC5pbWFnZVZpZXdCaW5kaW5nID0gdnAtPmRwYi52aWV3LAot ICAgIH07Ci0KLSAgICB2cC0+ZHBiX3Nsb3QgPSAoVmtWaWRlb1JlZmVyZW5jZVNsb3RJbmZvS0hS KSB7Ci0gICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX1ZJREVPX1JFRkVSRU5DRV9T TE9UX0lORk9fS0hSLAotICAgICAgICAucE5leHQgPSBOVUxMLCAgLy8gU2V0IGxhdGVyCi0gICAg ICAgIC5zbG90SW5kZXggPSBzbG90X2luZGV4LAotICAgICAgICAucFBpY3R1cmVSZXNvdXJjZSA9 ICZ2cC0+ZHBiX3JlcywKLSAgICB9OwotCi0gICAgZW5jb2RlX2luZm8gPSAoVmtWaWRlb0VuY29k ZUluZm9LSFIpIHsKLSAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfVklERU9fRU5D T0RFX0lORk9fS0hSLAotICAgICAgICAucE5leHQgPSBOVUxMLCAvLyBTZXQgbGF0ZXIKLSAgICAg ICAgLmZsYWdzID0gMHgwLAotICAgICAgICAuc3JjUGljdHVyZVJlc291cmNlID0gKFZrVmlkZW9Q aWN0dXJlUmVzb3VyY2VJbmZvS0hSKSB7Ci0gICAgICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RV UkVfVFlQRV9WSURFT19QSUNUVVJFX1JFU09VUkNFX0lORk9fS0hSLAotICAgICAgICAgICAgLnBO ZXh0ID0gTlVMTCwKLSAgICAgICAgICAgIC5jb2RlZE9mZnNldCA9IHsgMCwgMCB9LAotICAgICAg ICAgICAgLmNvZGVkRXh0ZW50ID0gKFZrRXh0ZW50MkQpeyBiYXNlX3BpYy0+aW5wdXRfaW1hZ2Ut PndpZHRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlX3Bp Yy0+aW5wdXRfaW1hZ2UtPmhlaWdodCB9LAotICAgICAgICAgICAgLmJhc2VBcnJheUxheWVyID0g MCwKLSAgICAgICAgICAgIC5pbWFnZVZpZXdCaW5kaW5nID0gdnAtPmluLnZpZXcsCi0gICAgICAg IH0sCi0gICAgICAgIC5wU2V0dXBSZWZlcmVuY2VTbG90ID0gJnZwLT5kcGJfc2xvdCwKLSAgICAg ICAgLnJlZmVyZW5jZVNsb3RDb3VudCA9IDAsCi0gICAgICAgIC5wUmVmZXJlbmNlU2xvdHMgPSBy ZWZfc2xvdCwKLSAgICAgICAgLmRzdEJ1ZmZlciA9IHNkX2J1Zi0+YnVmLAotICAgICAgICAuZHN0 QnVmZmVyT2Zmc2V0ID0gMCwKLSAgICAgICAgLmRzdEJ1ZmZlclJhbmdlID0gc2RfYnVmLT5zaXpl LAotICAgICAgICAucHJlY2VkaW5nRXh0ZXJuYWxseUVuY29kZWRCeXRlcyA9IDAsCi0gICAgfTsK LQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTUFYX1JFRkVSRU5DRV9MSVNUX05VTTsgaSsrKSB7 Ci0gICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgYmFzZV9waWMtPm5iX3JlZnNbaV07IGorKykg ewotICAgICAgICAgICAgRkZIV0Jhc2VFbmNvZGVQaWN0dXJlICpyZWYgPSBiYXNlX3BpYy0+cmVm c1tpXVtqXTsKLSAgICAgICAgICAgIEZGVnVsa2FuRW5jb2RlUGljdHVyZSAqcnZwID0gcmVmLT5w cml2OwotICAgICAgICAgICAgcmVmX3Nsb3RbZW5jb2RlX2luZm8ucmVmZXJlbmNlU2xvdENvdW50 KytdID0gcnZwLT5kcGJfc2xvdDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qIENhbGxpbmcg dmtDbWRCZWdpblZpZGVvQ29kaW5nS0hSIHJlcXVpcmVzIHRvIGRlY2xhcmUgYWxsIHJlZmVyZW5j ZXMKLSAgICAgKiBiZWluZyBlbmFibGVkIHVwZnJvbnQsIGluY2x1ZGluZyB0aGUgY3VycmVudCBm cmFtZSdzIG91dHB1dCByZWYuICovCi0gICAgcmVmX3Nsb3RbZW5jb2RlX2luZm8ucmVmZXJlbmNl U2xvdENvdW50XSA9IHZwLT5kcGJfc2xvdDsKLSAgICByZWZfc2xvdFtlbmNvZGVfaW5mby5yZWZl cmVuY2VTbG90Q291bnRdLnNsb3RJbmRleCA9IC0xOwotCi0gICAgLyogU2V0dXAgcGljdHVyZSBw YXJhbWV0ZXJzICovCi0gICAgZXJyID0gY3R4LT5jb2RlYy0+aW5pdF9waWNfcGFyYW1zKGF2Y3R4 LCBiYXNlX3BpYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmVuY29k ZV9pbmZvKTsKLSAgICBpZiAoZXJyIDwgMCkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIGVu Y29kZV9zdGFydCA9IChWa1ZpZGVvQmVnaW5Db2RpbmdJbmZvS0hSKSB7Ci0gICAgICAgIC5zVHlw ZSA9IFZLX1NUUlVDVFVSRV9UWVBFX1ZJREVPX0JFR0lOX0NPRElOR19JTkZPX0tIUiwKLSAgICAg ICAgLnBOZXh0ID0gIWJhc2VfcGljLT5mb3JjZV9pZHIgPyAmcmNfaW5mbyA6IE5VTEwsCi0gICAg ICAgIC52aWRlb1Nlc3Npb24gPSBjdHgtPmNvbW1vbi5zZXNzaW9uLAotICAgICAgICAudmlkZW9T ZXNzaW9uUGFyYW1ldGVycyA9IGN0eC0+c2Vzc2lvbl9wYXJhbXMsCi0gICAgICAgIC5yZWZlcmVu Y2VTbG90Q291bnQgPSBlbmNvZGVfaW5mby5yZWZlcmVuY2VTbG90Q291bnQgKyAxLAotICAgICAg ICAucFJlZmVyZW5jZVNsb3RzID0gcmVmX3Nsb3QsCi0gICAgfTsKLQotICAgIC8qIFdyaXRlIGhl YWRlciAqLwotICAgIGlmIChiYXNlX3BpYy0+dHlwZSA9PSBGRl9IV19QSUNUVVJFX1RZUEVfSURS KSB7Ci0gICAgICAgIHVpbnQ4X3QgKmhkcl9kc3QgPSBzZF9idWYtPm1hcHBlZF9tZW0gKyBlbmNv ZGVfaW5mby5kc3RCdWZmZXJPZmZzZXQ7Ci0gICAgICAgIHNpemVfdCBkYXRhX3NpemUgPSBlbmNv ZGVfaW5mby5kc3RCdWZmZXJSYW5nZTsKLSAgICAgICAgZXJyID0gY3R4LT5jb2RlYy0+d3JpdGVf c2VxdWVuY2VfaGVhZGVycyhhdmN0eCwgYmFzZV9waWMsIGhkcl9kc3QsICZkYXRhX3NpemUpOwot ICAgICAgICBpZiAoZXJyIDwgMCkKLSAgICAgICAgICAgIGdvdG8gZmFpbDsKLSAgICAgICAgZW5j b2RlX2luZm8uZHN0QnVmZmVyT2Zmc2V0ICs9IGRhdGFfc2l6ZTsKLSAgICAgICAgZW5jb2RlX2lu Zm8uZHN0QnVmZmVyUmFuZ2UgIC09IGRhdGFfc2l6ZTsKLSAgICB9Ci0KLSAgICAvKiBXcml0ZSBl eHRyYSB1bml0cyAqLwotICAgIGlmIChjdHgtPmNvZGVjLT53cml0ZV9leHRyYV9oZWFkZXJzKSB7 Ci0gICAgICAgIHVpbnQ4X3QgKmhkcl9kc3QgPSBzZF9idWYtPm1hcHBlZF9tZW0gKyBlbmNvZGVf aW5mby5kc3RCdWZmZXJPZmZzZXQ7Ci0gICAgICAgIHNpemVfdCBkYXRhX3NpemUgPSBlbmNvZGVf aW5mby5kc3RCdWZmZXJSYW5nZTsKLSAgICAgICAgZXJyID0gY3R4LT5jb2RlYy0+d3JpdGVfZXh0 cmFfaGVhZGVycyhhdmN0eCwgYmFzZV9waWMsIGhkcl9kc3QsICZkYXRhX3NpemUpOwotICAgICAg ICBpZiAoZXJyIDwgMCkKLSAgICAgICAgICAgIGdvdG8gZmFpbDsKLSAgICAgICAgZW5jb2RlX2lu Zm8uZHN0QnVmZmVyT2Zmc2V0ICs9IGRhdGFfc2l6ZTsKLSAgICAgICAgZW5jb2RlX2luZm8uZHN0 QnVmZmVyUmFuZ2UgIC09IGRhdGFfc2l6ZTsKLSAgICB9Ci0KLSAgICAvKiBBbGlnbiBidWZmZXIg b2Zmc2V0IHRvIHRoZSByZXF1aXJlZCB2YWx1ZSB3aXRoIGZpbGxlciB1bml0cyAqLwotICAgIGlm IChjdHgtPmNvZGVjLT53cml0ZV9maWxsZXIpIHsKLSAgICAgICAgdWludDhfdCAqaGRyX2RzdCA9 IHNkX2J1Zi0+bWFwcGVkX21lbSArIGVuY29kZV9pbmZvLmRzdEJ1ZmZlck9mZnNldDsKLSAgICAg ICAgc2l6ZV90IGRhdGFfc2l6ZSA9IGVuY29kZV9pbmZvLmRzdEJ1ZmZlclJhbmdlOwotCi0gICAg ICAgIHVpbnQzMl90IG9mZnNldCA9IGVuY29kZV9pbmZvLmRzdEJ1ZmZlck9mZnNldDsKLSAgICAg ICAgc2l6ZV90IG9mZnNldF9hbGlnbiA9IGN0eC0+Y2Fwcy5taW5CaXRzdHJlYW1CdWZmZXJPZmZz ZXRBbGlnbm1lbnQ7Ci0KLSAgICAgICAgdWludDMyX3QgZmlsbGVyX2RhdGEgPSBGRkFMSUdOKG9m ZnNldCwgb2Zmc2V0X2FsaWduKSAtIG9mZnNldDsKLQotICAgICAgICBpZiAoZmlsbGVyX2RhdGEp IHsKLSAgICAgICAgICAgIHdoaWxlIChmaWxsZXJfZGF0YSA8IGN0eC0+Y29kZWMtPmZpbGxlcl9o ZWFkZXJfc2l6ZSkKLSAgICAgICAgICAgICAgICBmaWxsZXJfZGF0YSArPSBvZmZzZXRfYWxpZ247 Ci0KLSAgICAgICAgICAgIGZpbGxlcl9kYXRhIC09IGN0eC0+Y29kZWMtPmZpbGxlcl9oZWFkZXJf c2l6ZTsKLQotICAgICAgICAgICAgZXJyID0gY3R4LT5jb2RlYy0+d3JpdGVfZmlsbGVyKGF2Y3R4 LCBmaWxsZXJfZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBoZHJfZHN0LCAmZGF0YV9zaXplKTsKLSAgICAgICAgICAgIGlmIChlcnIgPCAwKQotICAgICAg ICAgICAgICAgIGdvdG8gZmFpbDsKLQotICAgICAgICAgICAgZW5jb2RlX2luZm8uZHN0QnVmZmVy T2Zmc2V0ICs9IGRhdGFfc2l6ZTsKLSAgICAgICAgICAgIGVuY29kZV9pbmZvLmRzdEJ1ZmZlclJh bmdlICAtPSBkYXRhX3NpemU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB2cC0+c2xpY2VzX29m ZnNldCA9IGVuY29kZV9pbmZvLmRzdEJ1ZmZlck9mZnNldDsKLQotICAgIC8qIEFsaWduIGJ1ZmZl ciBzaXplIHRvIHRoZSBuZWFyZXN0IGxvd2VyIGFsaWdubWVudCByZXF1aXJlbWVudC4gKi8KLSAg ICBlbmNvZGVfaW5mby5kc3RCdWZmZXJSYW5nZSAtPSBzaXplX2FsaWduOwotICAgIGVuY29kZV9p bmZvLmRzdEJ1ZmZlclJhbmdlID0gRkZBTElHTihlbmNvZGVfaW5mby5kc3RCdWZmZXJSYW5nZSwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV9hbGlnbik7Ci0K LSAgICAvKiBTdGFydCBjb21tYW5kIGJ1ZmZlciByZWNvcmRpbmcgKi8KLSAgICBleGVjID0gdnAt PmV4ZWMgPSBmZl92a19leGVjX2dldCgmY3R4LT5zLCAmY3R4LT5lbmNfcG9vbCk7Ci0gICAgZmZf dmtfZXhlY19zdGFydCgmY3R4LT5zLCBleGVjKTsKLSAgICBjbWRfYnVmID0gZXhlYy0+YnVmOwot Ci0gICAgLyogT3V0cHV0IHBhY2tldCBidWZmZXIgKi8KLSAgICBlcnIgPSBmZl92a19leGVjX2Fk ZF9kZXBfYnVmKCZjdHgtPnMsIGV4ZWMsICZ2cC0+cGt0X2J1ZiwgMSwgMSk7Ci0gICAgaWYgKGVy ciA8IDApCi0gICAgICAgIGdvdG8gZmFpbDsKLQotICAgIC8qIFNvdXJjZSBpbWFnZSAqLwotICAg IGVyciA9IGZmX3ZrX2V4ZWNfYWRkX2RlcF9mcmFtZSgmY3R4LT5zLCBleGVjLCBzcmMsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZLX1BJUEVMSU5FX1NUQUdFXzJfQUxMX0NP TU1BTkRTX0JJVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfUElQRUxJ TkVfU1RBR0VfMl9WSURFT19FTkNPREVfQklUX0tIUik7Ci0gICAgaWYgKGVyciA8IDApCi0gICAg ICAgIGdvdG8gZmFpbDsKLQotICAgIC8qIFNvdXJjZSBpbWFnZSBsYXlvdXQgY29udmVyc2lvbiAq LwotICAgIGltZ19iYXJbbmJfaW1nX2Jhcl0gPSAoVmtJbWFnZU1lbW9yeUJhcnJpZXIyKSB7Ci0g ICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX0lNQUdFX01FTU9SWV9CQVJSSUVSXzIs Ci0gICAgICAgIC5wTmV4dCA9IE5VTEwsCi0gICAgICAgIC5zcmNTdGFnZU1hc2sgPSBWS19QSVBF TElORV9TVEFHRV8yX0FMTF9DT01NQU5EU19CSVQsCi0gICAgICAgIC5zcmNBY2Nlc3NNYXNrID0g dmtmLT5hY2Nlc3NbMF0sCi0gICAgICAgIC5kc3RTdGFnZU1hc2sgPSBWS19QSVBFTElORV9TVEFH RV8yX1ZJREVPX0VOQ09ERV9CSVRfS0hSLAotICAgICAgICAuZHN0QWNjZXNzTWFzayA9IFZLX0FD Q0VTU18yX1ZJREVPX0VOQ09ERV9SRUFEX0JJVF9LSFIsCi0gICAgICAgIC5vbGRMYXlvdXQgPSB2 a2YtPmxheW91dFswXSwKLSAgICAgICAgLm5ld0xheW91dCA9IFZLX0lNQUdFX0xBWU9VVF9WSURF T19FTkNPREVfU1JDX0tIUiwKLSAgICAgICAgLnNyY1F1ZXVlRmFtaWx5SW5kZXggPSB2a2YtPnF1 ZXVlX2ZhbWlseVswXSwKLSAgICAgICAgLmRzdFF1ZXVlRmFtaWx5SW5kZXggPSBWS19RVUVVRV9G QU1JTFlfSUdOT1JFRCwKLSAgICAgICAgLmltYWdlID0gdmtmLT5pbWdbMF0sCi0gICAgICAgIC5z dWJyZXNvdXJjZVJhbmdlID0gKFZrSW1hZ2VTdWJyZXNvdXJjZVJhbmdlKSB7Ci0gICAgICAgICAg ICAuYXNwZWN0TWFzayA9IHZwLT5pbi5hc3BlY3QsCi0gICAgICAgICAgICAubGF5ZXJDb3VudCA9 IDEsCi0gICAgICAgICAgICAubGV2ZWxDb3VudCA9IDEsCi0gICAgICAgIH0sCi0gICAgfTsKLSAg ICBmZl92a19leGVjX3VwZGF0ZV9mcmFtZSgmY3R4LT5zLCBleGVjLCBzcmMsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgJmltZ19iYXJbbmJfaW1nX2Jhcl0sICZuYl9pbWdfYmFyKTsKLQot ICAgIGlmICghY3R4LT5jb21tb24ubGF5ZXJlZF9kcGIpIHsKLSAgICAgICAgLyogU291cmNlIGlt YWdlJ3MgcmVmIHNsb3QuCi0gICAgICAgICAqIE5vIG5lZWQgdG8gZG8gYSBsYXlvdXQgY29udmVy c2lvbiwgc2luY2UgdGhlIGZyYW1lcyB3aGljaCBhcmUgYWxsb2NhdGVkCi0gICAgICAgICAqIHdp dGggYSBEUEIgdXNhZ2UgYXJlIGF1dG9tYXRpY2FsbHkgY29udmVydGVkLiAqLwotICAgICAgICBl cnIgPSBmZl92a19leGVjX2FkZF9kZXBfZnJhbWUoJmN0eC0+cywgZXhlYywgYmFzZV9waWMtPnJl Y29uX2ltYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfUElQ RUxJTkVfU1RBR0VfMl9BTExfQ09NTUFORFNfQklULAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgVktfUElQRUxJTkVfU1RBR0VfMl9WSURFT19FTkNPREVfQklUX0tIUik7 Ci0gICAgICAgIGlmIChlcnIgPCAwKQotICAgICAgICAgICAgcmV0dXJuIGVycjsKLQotICAgICAg ICAvKiBBbGwgcmVmZXJlbmNlcyAqLwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IE1BWF9S RUZFUkVOQ0VfTElTVF9OVU07IGkrKykgewotICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGog PCBiYXNlX3BpYy0+bmJfcmVmc1tpXTsgaisrKSB7Ci0gICAgICAgICAgICAgICAgRkZIV0Jhc2VF bmNvZGVQaWN0dXJlICpyZWYgPSBiYXNlX3BpYy0+cmVmc1tpXVtqXTsKLSAgICAgICAgICAgICAg ICBlcnIgPSBmZl92a19leGVjX2FkZF9kZXBfZnJhbWUoJmN0eC0+cywgZXhlYywgcmVmLT5yZWNv bl9pbWFnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg VktfUElQRUxJTkVfU1RBR0VfMl9BTExfQ09NTUFORFNfQklULAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19QSVBFTElORV9TVEFHRV8yX1ZJREVPX0VO Q09ERV9CSVRfS0hSKTsKLSAgICAgICAgICAgICAgICBpZiAoZXJyIDwgMCkKLSAgICAgICAgICAg ICAgICAgICAgcmV0dXJuIGVycjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0gZWxz ZSB7Ci0gICAgICAgIGVyciA9IGZmX3ZrX2V4ZWNfYWRkX2RlcF9mcmFtZSgmY3R4LT5zLCBleGVj LCBjdHgtPmNvbW1vbi5sYXllcmVkX2ZyYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgVktfUElQRUxJTkVfU1RBR0VfMl9WSURFT19FTkNPREVfQklUX0tIUiwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZLX1BJUEVMSU5FX1NUQUdFXzJf VklERU9fRU5DT0RFX0JJVF9LSFIpOwotICAgICAgICBpZiAoZXJyIDwgMCkKLSAgICAgICAgICAg IHJldHVybiBlcnI7Ci0gICAgfQotCi0gICAgLyogQ2hhbmdlIGltYWdlIGxheW91dCAqLwotICAg IHZrLT5DbWRQaXBlbGluZUJhcnJpZXIyKGNtZF9idWYsICYoVmtEZXBlbmRlbmN5SW5mbykgewot ICAgICAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfREVQRU5ERU5DWV9JTkZPLAot ICAgICAgICAgICAgLnBJbWFnZU1lbW9yeUJhcnJpZXJzID0gaW1nX2JhciwKLSAgICAgICAgICAg IC5pbWFnZU1lbW9yeUJhcnJpZXJDb3VudCA9IG5iX2ltZ19iYXIsCi0gICAgICAgIH0pOwotCi0g ICAgLyogU3RhcnQsIHVzZSBwYXJhbWV0ZXJzICovCi0gICAgdmstPkNtZEJlZ2luVmlkZW9Db2Rp bmdLSFIoY21kX2J1ZiwgJmVuY29kZV9zdGFydCk7Ci0KLSAgICAvKiBTZW5kIGNvbnRyb2wgZGF0 YSAqLwotICAgIGlmICghY3R4LT5zZXNzaW9uX3Jlc2V0KSB7Ci0gICAgICAgIHZrLT5DbWRDb250 cm9sVmlkZW9Db2RpbmdLSFIoY21kX2J1ZiwgJmVuY29kZV9jdHJsKTsKLSAgICAgICAgY3R4LT5z ZXNzaW9uX3Jlc2V0Kys7Ci0gICAgfQotCi0gICAgLyogRW5jb2RlICovCi0gICAgdmstPkNtZEJl Z2luUXVlcnkoY21kX2J1ZiwgY3R4LT5lbmNfcG9vbC5xdWVyeV9wb29sLCBleGVjLT5xdWVyeV9p ZHggKyAwLCAwKTsKLSAgICB2ay0+Q21kRW5jb2RlVmlkZW9LSFIoY21kX2J1ZiwgJmVuY29kZV9p bmZvKTsKLSAgICB2ay0+Q21kRW5kUXVlcnkoY21kX2J1ZiwgY3R4LT5lbmNfcG9vbC5xdWVyeV9w b29sLCBleGVjLT5xdWVyeV9pZHggKyAwKTsKLQotICAgIC8qIEVuZCBlbmNvZGluZyAqLwotICAg IHZrLT5DbWRFbmRWaWRlb0NvZGluZ0tIUihjbWRfYnVmLCAmZW5jb2RlX2VuZCk7Ci0KLSAgICAv KiBFbmQgcmVjb3JkaW5nIGFuZCBzdWJtaXQgZm9yIGV4ZWN1dGlvbiAqLwotICAgIGVyciA9IGZm X3ZrX2V4ZWNfc3VibWl0KCZjdHgtPnMsIHZwLT5leGVjKTsKLSAgICBpZiAoZXJyIDwgMCkKLSAg ICAgICAgZ290byBmYWlsOwotCi0gICAgLyogV2UgZG9uJ3QgbmVlZCB0byBrZWVwIHRoZSBpbnB1 dCBpbWFnZSBhbnkgbG9uZ2VyLCBpdHMgYWxyZWFkeSByZWYnZCAqLwotICAgIGF2X2ZyYW1lX2Zy ZWUoJmJhc2VfcGljLT5pbnB1dF9pbWFnZSk7Ci0KLSAgICByZXR1cm4gMDsKLQotZmFpbDoKLSAg ICByZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgdm9pZCB2dWxrYW5fZW5jb2RlX3dhaXQoQVZDb2Rl Y0NvbnRleHQgKmF2Y3R4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZGSFdCYXNl RW5jb2RlUGljdHVyZSAqYmFzZV9waWMpCi17Ci0gICAgRkZWdWxrYW5FbmNvZGVDb250ZXh0ICpj dHggPSBhdmN0eC0+cHJpdl9kYXRhOwotICAgIEZGVnVsa2FuRW5jb2RlUGljdHVyZSAqdnAgPSBi YXNlX3BpYy0+cHJpdjsKLQotICAgIGF2X2Fzc2VydDAoYmFzZV9waWMtPmVuY29kZV9pc3N1ZWQp OwotCi0gICAgaWYgKGJhc2VfcGljLT5lbmNvZGVfY29tcGxldGUpCi0gICAgICAgIHJldHVybjsK LQotICAgIGZmX3ZrX2V4ZWNfd2FpdCgmY3R4LT5zLCB2cC0+ZXhlYyk7Ci0gICAgYmFzZV9waWMt PmVuY29kZV9jb21wbGV0ZSA9IDE7Ci19Ci0KLXN0YXRpYyBpbnQgdnVsa2FuX2VuY29kZV9vdXRw dXQoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBGRkhXQmFzZUVuY29kZVBpY3R1cmUgKmJhc2VfcGljLCBBVlBhY2tldCAqcGt0KQotewotICAg IFZrUmVzdWx0IHJldDsKLSAgICBGRlZ1bGthbkVuY29kZVBpY3R1cmUgKnZwID0gYmFzZV9waWMt PnByaXY7Ci0gICAgRkZWdWxrYW5FbmNvZGVDb250ZXh0ICpjdHggPSBhdmN0eC0+cHJpdl9kYXRh OwotICAgIEZGVmtCdWZmZXIgKnNkX2J1ZiA9IChGRlZrQnVmZmVyICopdnAtPnBrdF9idWYtPmRh dGE7Ci0gICAgdWludDMyX3QgKnF1ZXJ5X2RhdGE7Ci0KLSAgICB2dWxrYW5fZW5jb2RlX3dhaXQo YXZjdHgsIGJhc2VfcGljKTsKLQotICAgIHJldCA9IGZmX3ZrX2V4ZWNfZ2V0X3F1ZXJ5KCZjdHgt PnMsIHZwLT5leGVjLCAodm9pZCAqKikmcXVlcnlfZGF0YSwgMCk7Ci0gICAgaWYgKHJldCA9PSBW S19OT1RfUkVBRFkpIHsKLSAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJVbmFi bGUgdG8gcGVyZm9ybSBxdWVyeTogJXMhXG4iLAotICAgICAgICAgICAgICAgZmZfdmtfcmV0MnN0 cihyZXQpKTsKLSAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKLSAgICB9Ci0KLSAgICBp ZiAocmV0ICE9IFZLX05PVF9SRUFEWSAmJiByZXQgIT0gVktfU1VDQ0VTUykgewotICAgICAgICBh dl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIlVuYWJsZSB0byBwZXJmb3JtIHF1ZXJ5OiAlcyFc biIsCi0gICAgICAgICAgICAgICBmZl92a19yZXQyc3RyKHJldCkpOwotICAgICAgICByZXR1cm4g QVZFUlJPUl9FWFRFUk5BTDsKLSAgICB9Ci0KLSAgICBpZiAocXVlcnlfZGF0YVsyXSAhPSBWS19R VUVSWV9SRVNVTFRfU1RBVFVTX0NPTVBMRVRFX0tIUikgewotICAgICAgICBhdl9sb2coYXZjdHgs IEFWX0xPR19FUlJPUiwgIlVuYWJsZSB0byBlbmNvZGU6ICV1XG4iLCBxdWVyeV9kYXRhWzJdKTsK LSAgICAgICAgcmV0dXJuIEFWRVJST1JfRVhURVJOQUw7Ci0gICAgfQotCi0gICAgLyogSW52YWxp ZGF0ZSBidWZmZXIgaWYgbmVlZGVkICovCi0gICAgaWYgKCEoc2RfYnVmLT5mbGFncyAmIFZLX01F TU9SWV9QUk9QRVJUWV9IT1NUX0NPSEVSRU5UX0JJVCkpIHsKLSAgICAgICAgRkZWdWxrYW5GdW5j dGlvbnMgKnZrID0gJmN0eC0+cy52a2ZuOwotICAgICAgICBWa01hcHBlZE1lbW9yeVJhbmdlIGlu dmFsaWRhdGVfYnVmOwotCi0gICAgICAgIGludCBvZmZzID0gdnAtPnNsaWNlc19vZmZzZXQ7Ci0g ICAgICAgIC8qIElmIHRoZSBub24tY29oZXJlbnQgYWxpZ25tZW50IGlzIGdyZWF0ZXIgdGhhbiB0 aGUgYml0c3RyZWFtIGJ1ZmZlcgotICAgICAgICAgKiBvZmZzZXQncyBhbGlnbm1lbnQsIGFuZCB0 aGUgb2ZmcyB2YWx1ZSBpcyBub3QgYWxpZ25lZCBhbHJlYWR5LAotICAgICAgICAgKiBhbGlnbiBp dCB0byB0aGUgcHJldmlvdXMgYWxpZ25tZW50IHBvaW50LiAqLwotICAgICAgICBpZiAoY3R4LT5z LnByb3BzLnByb3BlcnRpZXMubGltaXRzLm5vbkNvaGVyZW50QXRvbVNpemUgPgotICAgICAgICAg ICAgY3R4LT5jYXBzLm1pbkJpdHN0cmVhbUJ1ZmZlck9mZnNldEFsaWdubWVudCAmJiBvZmZzICYm Ci0gICAgICAgICAgICAoRkZBTElHTihvZmZzLCBjdHgtPnMucHJvcHMucHJvcGVydGllcy5saW1p dHMubm9uQ29oZXJlbnRBdG9tU2l6ZSkgIT0gb2ZmcykpIHsKLSAgICAgICAgICAgIG9mZnMgLT0g Y3R4LT5zLnByb3BzLnByb3BlcnRpZXMubGltaXRzLm5vbkNvaGVyZW50QXRvbVNpemU7Ci0gICAg ICAgICAgICBvZmZzID0gRkZBTElHTihGRk1BWChvZmZzLCAwKSwgY3R4LT5zLnByb3BzLnByb3Bl cnRpZXMubGltaXRzLm5vbkNvaGVyZW50QXRvbVNpemUpOwotICAgICAgICB9Ci0KLSAgICAgICAg aW52YWxpZGF0ZV9idWYgPSAoVmtNYXBwZWRNZW1vcnlSYW5nZSkgewotICAgICAgICAgICAgLnNU eXBlID0gVktfU1RSVUNUVVJFX1RZUEVfTUFQUEVEX01FTU9SWV9SQU5HRSwKLSAgICAgICAgICAg IC5tZW1vcnkgPSBzZF9idWYtPm1lbSwKLSAgICAgICAgICAgIC5vZmZzZXQgPSBvZmZzLAotICAg ICAgICAgICAgLnNpemUgPSBWS19XSE9MRV9TSVpFLAotICAgICAgICB9OwotCi0gICAgICAgIHZr LT5GbHVzaE1hcHBlZE1lbW9yeVJhbmdlcyhjdHgtPnMuaHdjdHgtPmFjdF9kZXYsIDEsICZpbnZh bGlkYXRlX2J1Zik7Ci0gICAgfQotCi0gICAgcGt0LT5kYXRhID0gc2RfYnVmLT5tYXBwZWRfbWVt OwotICAgIHBrdC0+c2l6ZSA9IHZwLT5zbGljZXNfb2Zmc2V0ICsgLyogYmFzZSBvZmZzZXQgKi8K LSAgICAgICAgICAgICAgICBxdWVyeV9kYXRhWzBdICAgICAgIC8qIHNlY29uZGFyeSBvZmZzZXQg Ki8gKwotICAgICAgICAgICAgICAgIHF1ZXJ5X2RhdGFbMV0gICAgICAgLyogc2l6ZSAqLzsKLQot ICAgIC8qIE1vdmUgcmVmZXJlbmNlICovCi0gICAgcGt0LT5idWYgPSB2cC0+cGt0X2J1ZjsKLSAg ICB2cC0+cGt0X2J1ZiA9IE5VTEw7Ci0KLSAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19ERUJVRywg IkZyYW1lICUiUFJJZDY0Ii8lIlBSSWQ2NCAiIGVuY29kZWRcbiIsCi0gICAgICAgICAgIGJhc2Vf cGljLT5kaXNwbGF5X29yZGVyLCBiYXNlX3BpYy0+ZW5jb2RlX29yZGVyKTsKLQotICAgIHJldHVy biBmZl9od19iYXNlX2VuY29kZV9zZXRfb3V0cHV0X3Byb3BlcnR5KCZjdHgtPmJhc2UsIGF2Y3R4 LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2Vf cGljLCBwa3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY3R4LT5jb2RlYy0+ZmxhZ3MgJiBWS19FTkNfRkxBR19OT19ERUxBWSk7Ci19Ci0KLXN0YXRp YyBjb25zdCBGRkhXRW5jb2RlUGljdHVyZU9wZXJhdGlvbiB2dWxrYW5fYmFzZV9lbmNvZGVfb3Bz ID0gewotICAgIC5wcml2X3NpemUgPSBzaXplb2YoRkZWdWxrYW5FbmNvZGVQaWN0dXJlKSwKLSAg ICAuaW5pdCAgID0gJnZ1bGthbl9lbmNvZGVfaW5pdCwKLSAgICAuaXNzdWUgID0gJnZ1bGthbl9l bmNvZGVfaXNzdWUsCi0gICAgLm91dHB1dCA9ICZ2dWxrYW5fZW5jb2RlX291dHB1dCwKLSAgICAu ZnJlZSAgID0gJnZ1bGthbl9lbmNvZGVfZnJlZSwKLX07Ci0KLWludCBmZl92dWxrYW5fZW5jb2Rl X3JlY2VpdmVfcGFja2V0KEFWQ29kZWNDb250ZXh0ICphdmN0eCwgQVZQYWNrZXQgKnBrdCkKLXsK LSAgICBGRlZ1bGthbkVuY29kZUNvbnRleHQgKmN0eCA9IGF2Y3R4LT5wcml2X2RhdGE7Ci0gICAg cmV0dXJuIGZmX2h3X2Jhc2VfZW5jb2RlX3JlY2VpdmVfcGFja2V0KCZjdHgtPmJhc2UsIGF2Y3R4 LCBwa3QpOwotfQotCi1zdGF0aWMgaW50IHZ1bGthbl9lbmNvZGVfY3JlYXRlX2RwYihBVkNvZGVj Q29udGV4dCAqYXZjdHgsIEZGVnVsa2FuRW5jb2RlQ29udGV4dCAqY3R4KQotewotICAgIGludCBl cnI7Ci0gICAgRkZIV0Jhc2VFbmNvZGVDb250ZXh0ICpiYXNlX2N0eCA9ICZjdHgtPmJhc2U7Ci0g ICAgQVZWdWxrYW5GcmFtZXNDb250ZXh0ICpod2ZjOwotCi0gICAgZW51bSBBVlBpeGVsRm9ybWF0 IGRwYl9mb3JtYXQ7Ci0gICAgZXJyID0gZmZfaHdfYmFzZV9nZXRfcmVjb25fZm9ybWF0KGJhc2Vf Y3R4LCBOVUxMLCAmZHBiX2Zvcm1hdCk7Ci0gICAgaWYgKGVyciA8IDApCi0gICAgICAgIHJldHVy biBlcnI7Ci0KLSAgICBiYXNlX2N0eC0+cmVjb25fZnJhbWVzX3JlZiA9IGF2X2h3ZnJhbWVfY3R4 X2FsbG9jKGJhc2VfY3R4LT5kZXZpY2VfcmVmKTsKLSAgICBpZiAoIWJhc2VfY3R4LT5yZWNvbl9m cmFtZXNfcmVmKQotICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOwotCi0gICAgYmFzZV9j dHgtPnJlY29uX2ZyYW1lcyA9IChBVkhXRnJhbWVzQ29udGV4dCAqKWJhc2VfY3R4LT5yZWNvbl9m cmFtZXNfcmVmLT5kYXRhOwotICAgIGh3ZmMgPSAoQVZWdWxrYW5GcmFtZXNDb250ZXh0ICopYmFz ZV9jdHgtPnJlY29uX2ZyYW1lcy0+aHdjdHg7Ci0KLSAgICBiYXNlX2N0eC0+cmVjb25fZnJhbWVz LT5mb3JtYXQgICAgPSBBVl9QSVhfRk1UX1ZVTEtBTjsKLSAgICBiYXNlX2N0eC0+cmVjb25fZnJh bWVzLT5zd19mb3JtYXQgPSBkcGJfZm9ybWF0OwotICAgIGJhc2VfY3R4LT5yZWNvbl9mcmFtZXMt PndpZHRoICAgICA9IGF2Y3R4LT53aWR0aDsKLSAgICBiYXNlX2N0eC0+cmVjb25fZnJhbWVzLT5o ZWlnaHQgICAgPSBhdmN0eC0+aGVpZ2h0OwotCi0gICAgaHdmYy0+Zm9ybWF0WzBdICAgID0gY3R4 LT5waWNfZm9ybWF0OwotICAgIGh3ZmMtPmNyZWF0ZV9wbmV4dCA9ICZjdHgtPnByb2ZpbGVfbGlz dDsKLSAgICBod2ZjLT50aWxpbmcgICAgICAgPSBWS19JTUFHRV9USUxJTkdfT1BUSU1BTDsKLSAg ICBod2ZjLT51c2FnZSAgICAgICAgPSBWS19JTUFHRV9VU0FHRV9WSURFT19FTkNPREVfRFBCX0JJ VF9LSFI7Ci0KLSAgICBpZiAoY3R4LT5jb21tb24ubGF5ZXJlZF9kcGIpCi0gICAgICAgIGh3ZmMt Pm5iX2xheWVycyA9IGN0eC0+Y2Fwcy5tYXhEcGJTbG90czsKLQotICAgIGVyciA9IGF2X2h3ZnJh bWVfY3R4X2luaXQoYmFzZV9jdHgtPnJlY29uX2ZyYW1lc19yZWYpOwotICAgIGlmIChlcnIgPCAw KSB7Ci0gICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiRmFpbGVkIHRvIGluaXRp YWxpc2UgRFBCIGZyYW1lIGNvbnRleHQ6ICVzXG4iLAotICAgICAgICAgICAgICAgYXZfZXJyMnN0 cihlcnIpKTsKLSAgICAgICAgcmV0dXJuIGVycjsKLSAgICB9Ci0KLSAgICBpZiAoY3R4LT5jb21t b24ubGF5ZXJlZF9kcGIpIHsKLSAgICAgICAgY3R4LT5jb21tb24ubGF5ZXJlZF9mcmFtZSA9IGF2 X2ZyYW1lX2FsbG9jKCk7Ci0gICAgICAgIGlmICghY3R4LT5jb21tb24ubGF5ZXJlZF9mcmFtZSkK LSAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7Ci0KLSAgICAgICAgZXJyID0gYXZf aHdmcmFtZV9nZXRfYnVmZmVyKGJhc2VfY3R4LT5yZWNvbl9mcmFtZXNfcmVmLAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT5jb21tb24ubGF5ZXJlZF9mcmFtZSwgMCk7 Ci0gICAgICAgIGlmIChlcnIgPCAwKQotICAgICAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVN KTsKLQotICAgICAgICBlcnIgPSBmZl92a19jcmVhdGVfdmlldygmY3R4LT5zLCAmY3R4LT5jb21t b24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjdHgtPmNvbW1vbi5sYXllcmVk X3ZpZXcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjdHgtPmNvbW1vbi5sYXll cmVkX2FzcGVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEFWVmtGcmFtZSAq KWN0eC0+Y29tbW9uLmxheWVyZWRfZnJhbWUtPmRhdGFbMF0sCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGh3ZmMtPmZvcm1hdFswXSwgMSk7Ci0gICAgICAgIGlmIChlcnIgPCAwKQot ICAgICAgICAgICAgcmV0dXJuIGVycjsKLQotICAgICAgICBhdl9idWZmZXJfdW5yZWYoJmJhc2Vf Y3R4LT5yZWNvbl9mcmFtZXNfcmVmKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotc3Rh dGljIGF2X2NvbGQgaW50IGluaXRfcmMoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LCBGRlZ1bGthbkVu Y29kZUNvbnRleHQgKmN0eCkKLXsKLSAgICBpZiAoY3R4LT5vcHRzLnFwKSB7Ci0gICAgICAgIGN0 eC0+ZXhwbGljaXRfcXAgPSBjdHgtPm9wdHMucXA7Ci0gICAgfSBlbHNlIGlmIChhdmN0eC0+Z2xv YmFsX3F1YWxpdHkgPiAwKSB7Ci0gICAgICAgIGlmIChhdmN0eC0+ZmxhZ3MgJiBBVl9DT0RFQ19G TEFHX1FTQ0FMRSkKLSAgICAgICAgICAgIGN0eC0+ZXhwbGljaXRfcXAgPSBhdmN0eC0+Z2xvYmFs X3F1YWxpdHkgLyBGRl9RUDJMQU1CREE7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGN0eC0+ ZXhwbGljaXRfcXAgPSBhdmN0eC0+Z2xvYmFsX3F1YWxpdHk7Ci0gICAgfQotCi0gICAgaWYgKGN0 eC0+b3B0cy5yY19tb2RlID09IEZGX1ZLX1JDX01PREVfQVVUTykgewotICAgICAgICBpZiAoY3R4 LT5leHBsaWNpdF9xcCA+PSAwKSB7Ci0gICAgICAgICAgICBjdHgtPm9wdHMucmNfbW9kZSA9IFZL X1ZJREVPX0VOQ09ERV9SQVRFX0NPTlRST0xfTU9ERV9ESVNBQkxFRF9CSVRfS0hSOwotICAgICAg ICB9IGVsc2UgaWYgKGF2Y3R4LT5nbG9iYWxfcXVhbGl0eSA+IDApIHsKLSAgICAgICAgICAgIGlm IChhdmN0eC0+ZmxhZ3MgJiBBVl9DT0RFQ19GTEFHX1FTQ0FMRSkKLSAgICAgICAgICAgICAgICBj dHgtPmV4cGxpY2l0X3FwID0gYXZjdHgtPmdsb2JhbF9xdWFsaXR5IC8gRkZfUVAyTEFNQkRBOwot ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGN0eC0+ZXhwbGljaXRfcXAgPSBhdmN0 eC0+Z2xvYmFsX3F1YWxpdHk7Ci0gICAgICAgICAgICBjdHgtPm9wdHMucmNfbW9kZSA9IFZLX1ZJ REVPX0VOQ09ERV9SQVRFX0NPTlRST0xfTU9ERV9ESVNBQkxFRF9CSVRfS0hSOwotICAgICAgICB9 IGVsc2UgaWYgKGF2Y3R4LT5iaXRfcmF0ZSkgewotICAgICAgICAgICAgaWYgKGN0eC0+ZW5jX2Nh cHMucmF0ZUNvbnRyb2xNb2RlcyAmIFZLX1ZJREVPX0VOQ09ERV9SQVRFX0NPTlRST0xfTU9ERV9W QlJfQklUX0tIUikKLSAgICAgICAgICAgICAgICBjdHgtPm9wdHMucmNfbW9kZSA9IFZLX1ZJREVP X0VOQ09ERV9SQVRFX0NPTlRST0xfTU9ERV9WQlJfQklUX0tIUjsKLSAgICAgICAgICAgIGVsc2Ug aWYgKGN0eC0+ZW5jX2NhcHMucmF0ZUNvbnRyb2xNb2RlcyAmIFZLX1ZJREVPX0VOQ09ERV9SQVRF X0NPTlRST0xfTU9ERV9DQlJfQklUX0tIUikKLSAgICAgICAgICAgICAgICBjdHgtPm9wdHMucmNf bW9kZSA9IFZLX1ZJREVPX0VOQ09ERV9SQVRFX0NPTlRST0xfTU9ERV9DQlJfQklUX0tIUjsKLSAg ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBjdHgtPm9wdHMucmNfbW9kZSA9IFZLX1ZJ REVPX0VOQ09ERV9SQVRFX0NPTlRST0xfTU9ERV9ERUZBVUxUX0tIUjsKLSAgICAgICAgfSBlbHNl IHsKLSAgICAgICAgICAgIGN0eC0+ZXhwbGljaXRfcXAgPSAxODsKLSAgICAgICAgICAgIGN0eC0+ b3B0cy5yY19tb2RlID0gVktfVklERU9fRU5DT0RFX1JBVEVfQ09OVFJPTF9NT0RFX0RJU0FCTEVE X0JJVF9LSFI7Ci0gICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19XQVJOSU5HLCAiTm8g cmF0ZSBjb250cm9sIHNldHRpbmdzIHNwZWNpZmllZCwgdXNpbmcgZml4ZWQgUVAgPSAlaVxuIiwK LSAgICAgICAgICAgICAgICAgICBjdHgtPmV4cGxpY2l0X3FwKTsKLSAgICAgICAgfQotICAgIH0g ZWxzZSBpZiAoY3R4LT5vcHRzLnJjX21vZGUgIT0gVktfVklERU9fRU5DT0RFX1JBVEVfQ09OVFJP TF9NT0RFX0RJU0FCTEVEX0JJVF9LSFIgJiYKLSAgICAgICAgICAgICAgICFhdmN0eC0+Yml0X3Jh dGUpIHsKLSAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfV0FSTklORywgIk5vIGJpdHJhdGUg c3BlY2lmaWVkIVxuIik7Ci0gICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7Ci0gICAgfQot Ci0gICAgaWYgKGN0eC0+b3B0cy5yY19tb2RlICYmICEoY3R4LT5lbmNfY2Fwcy5yYXRlQ29udHJv bE1vZGVzICYgY3R4LT5vcHRzLnJjX21vZGUpKSB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBjaGFy ICpyY19tb2Rlc1tdID0gewotICAgICAgICAgICAgW1ZLX1ZJREVPX0VOQ09ERV9SQVRFX0NPTlRS T0xfTU9ERV9ERUZBVUxUX0tIUl0gPSAiZGVmYXVsdCIsCi0gICAgICAgICAgICBbVktfVklERU9f RU5DT0RFX1JBVEVfQ09OVFJPTF9NT0RFX0RJU0FCTEVEX0JJVF9LSFJdID0gImNxcCIsCi0gICAg ICAgICAgICBbVktfVklERU9fRU5DT0RFX1JBVEVfQ09OVFJPTF9NT0RFX0NCUl9CSVRfS0hSXSA9 ICJjYnIiLAotICAgICAgICAgICAgW1ZLX1ZJREVPX0VOQ09ERV9SQVRFX0NPTlRST0xfTU9ERV9W QlJfQklUX0tIUl0gPSAidmJyIiwKLSAgICAgICAgfTsKLSAgICAgICAgYXZfbG9nKGF2Y3R4LCBB Vl9MT0dfRVJST1IsICJVbnN1cHBvcnRlZCByYXRlIGNvbnRyb2wgbW9kZSAlcywgc3VwcG9ydGVk IGFyZTpcbiIsCi0gICAgICAgICAgICAgICByY19tb2Rlc1tGRk1JTihGRl9BUlJBWV9FTEVNUyhy Y19tb2RlcyksIGN0eC0+b3B0cy5yY19tb2RlKV0pOwotICAgICAgICBhdl9sb2coYXZjdHgsIEFW X0xPR19FUlJPUiwgIiAgICAlc1xuIiwgcmNfbW9kZXNbMF0pOwotICAgICAgICBmb3IgKGludCBp ID0gVktfVklERU9fRU5DT0RFX1JBVEVfQ09OVFJPTF9NT0RFX0RJU0FCTEVEX0JJVF9LSFI7Ci0g ICAgICAgICAgICAgICAgIGkgPD0gVktfVklERU9fRU5DT0RFX1JBVEVfQ09OVFJPTF9NT0RFX1ZC Ul9CSVRfS0hSOyBpIDw8PSAxKSB7Ci0gICAgICAgICAgICBpZiAoIShjdHgtPmVuY19jYXBzLnJh dGVDb250cm9sTW9kZXMgJiBpKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg ICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiICAgICVzXG4iLCByY19tb2Rlc1tpXSk7 Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PVFNVUCk7Ci0gICAgfQotCi0g ICAgcmV0dXJuIDA7Ci19Ci0KLWF2X2NvbGQgaW50IGZmX3Z1bGthbl93cml0ZV9nbG9iYWxfaGVh ZGVyKEFWQ29kZWNDb250ZXh0ICphdmN0eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEZGVnVsa2FuRW5jb2RlQ29udGV4dCAqY3R4KQotewotICAgIGludCBlcnI7 Ci0KLSAgICAvKiBXcml0ZSBleHRyYWRhdGEgaWYgbmVlZGVkICovCi0gICAgaWYgKGF2Y3R4LT5m bGFncyAmIEFWX0NPREVDX0ZMQUdfR0xPQkFMX0hFQURFUikgewotICAgICAgICB1aW50OF90IGRh dGFbNDA5Nl07Ci0gICAgICAgIHNpemVfdCBkYXRhX2xlbiA9IHNpemVvZihkYXRhKTsKLQotICAg ICAgICBlcnIgPSBjdHgtPmNvZGVjLT53cml0ZV9zZXF1ZW5jZV9oZWFkZXJzKGF2Y3R4LCBOVUxM LCBkYXRhLCAmZGF0YV9sZW4pOwotICAgICAgICBpZiAoZXJyIDwgMCkgewotICAgICAgICAgICAg YXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJGYWlsZWQgdG8gd3JpdGUgc2VxdWVuY2UgaGVh ZGVyICIKLSAgICAgICAgICAgICAgICAgICAiZm9yIGV4dHJhZGF0YTogJWQuXG4iLCBlcnIpOwot ICAgICAgICAgICAgcmV0dXJuIGVycjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGF2 Y3R4LT5leHRyYWRhdGFfc2l6ZSA9IGRhdGFfbGVuOwotICAgICAgICAgICAgYXZjdHgtPmV4dHJh ZGF0YSA9IGF2X21hbGxvY3ooYXZjdHgtPmV4dHJhZGF0YV9zaXplICsKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFWX0lOUFVUX0JVRkZFUl9QQURESU5HX1NJWkUp OwotICAgICAgICAgICAgaWYgKCFhdmN0eC0+ZXh0cmFkYXRhKSB7Ci0gICAgICAgICAgICAgICAg ZXJyID0gQVZFUlJPUihFTk9NRU0pOwotICAgICAgICAgICAgICAgIHJldHVybiBlcnI7Ci0gICAg ICAgICAgICB9Ci0gICAgICAgICAgICBtZW1jcHkoYXZjdHgtPmV4dHJhZGF0YSwgZGF0YSwgYXZj dHgtPmV4dHJhZGF0YV9zaXplKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiAwOwot fQotCi1hdl9jb2xkIGludCBmZl92dWxrYW5fZW5jb2RlX2luaXQoQVZDb2RlY0NvbnRleHQgKmF2 Y3R4LCBGRlZ1bGthbkVuY29kZUNvbnRleHQgKmN0eCwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCBGRlZ1bGthbkVuY29kZURlc2NyaXB0b3IgKnZrX2Rlc2MsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRkZWdWxrYW5Db2RlYyAqY29kZWMs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqY29kZWNfY2Fwcywgdm9p ZCAqcXVhbGl0eV9wbmV4dCkKLXsKLSAgICBpbnQgaSwgZXJyOwotICAgIFZrUmVzdWx0IHJldDsK LSAgICBGRlZ1bGthbkZ1bmN0aW9ucyAqdmsgPSAmY3R4LT5zLnZrZm47Ci0gICAgRkZWdWxrYW5D b250ZXh0ICpzID0gJmN0eC0+czsKLSAgICBGRkhXQmFzZUVuY29kZUNvbnRleHQgKmJhc2VfY3R4 ID0gJmN0eC0+YmFzZTsKLQotICAgIGNvbnN0IEFWUGl4Rm10RGVzY3JpcHRvciAqZGVzYzsKLQot ICAgIFZrVmlkZW9Gb3JtYXRQcm9wZXJ0aWVzS0hSICpyZXRfaW5mbzsKLSAgICB1aW50MzJfdCBu Yl9vdXRfZm10cyA9IDA7Ci0KLSAgICBWa1BoeXNpY2FsRGV2aWNlVmlkZW9FbmNvZGVRdWFsaXR5 TGV2ZWxJbmZvS0hSIHF1YWxpdHlfaW5mbzsKLQotICAgIFZrUXVlcnlQb29sVmlkZW9FbmNvZGVG ZWVkYmFja0NyZWF0ZUluZm9LSFIgcXVlcnlfY3JlYXRlOwotCi0gICAgVmtWaWRlb1Nlc3Npb25D cmVhdGVJbmZvS0hSIHNlc3Npb25fY3JlYXRlID0gewotICAgICAgICAuc1R5cGUgPSBWS19TVFJV Q1RVUkVfVFlQRV9WSURFT19TRVNTSU9OX0NSRUFURV9JTkZPX0tIUiwKLSAgICB9OwotICAgIFZr UGh5c2ljYWxEZXZpY2VWaWRlb0Zvcm1hdEluZm9LSFIgZm10X2luZm8gPSB7Ci0gICAgICAgIC5z VHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX1BIWVNJQ0FMX0RFVklDRV9WSURFT19GT1JNQVRfSU5G T19LSFIsCi0gICAgICAgIC5wTmV4dCA9ICZjdHgtPnByb2ZpbGVfbGlzdCwKLSAgICB9OwotCi0g ICAgaWYgKCFhdmN0eC0+aHdfZnJhbWVzX2N0eCkgewotICAgICAgICBhdl9sb2coYXZjdHgsIEFW X0xPR19FUlJPUiwgIkEgaGFyZHdhcmUgZnJhbWVzIHJlZmVyZW5jZSBpcyAiCi0gICAgICAgICAg ICAgICAicmVxdWlyZWQgdG8gYXNzb2NpYXRlIHRoZSBlbmNvZGluZyBkZXZpY2UuXG4iKTsKLSAg ICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKLSAgICB9Ci0KLSAgICBjdHgtPmJhc2Uub3Ag PSAmdnVsa2FuX2Jhc2VfZW5jb2RlX29wczsKLSAgICBjdHgtPmNvZGVjID0gY29kZWM7Ci0KLSAg ICBzLT5mcmFtZXNfcmVmID0gYXZfYnVmZmVyX3JlZihhdmN0eC0+aHdfZnJhbWVzX2N0eCk7Ci0g ICAgcy0+ZnJhbWVzID0gKEFWSFdGcmFtZXNDb250ZXh0ICopcy0+ZnJhbWVzX3JlZi0+ZGF0YTsK LSAgICBzLT5od2ZjID0gcy0+ZnJhbWVzLT5od2N0eDsKLQotICAgIHMtPmRldmljZSA9IChBVkhX RGV2aWNlQ29udGV4dCAqKXMtPmZyYW1lcy0+ZGV2aWNlX3JlZi0+ZGF0YTsKLSAgICBzLT5od2N0 eCA9IHMtPmRldmljZS0+aHdjdHg7Ci0KLSAgICBkZXNjID0gYXZfcGl4X2ZtdF9kZXNjX2dldChh dmN0eC0+c3dfcGl4X2ZtdCk7Ci0gICAgaWYgKCFkZXNjKQotICAgICAgICByZXR1cm4gQVZFUlJP UihFSU5WQUwpOwotCi0gICAgcy0+ZXh0ZW5zaW9ucyA9IGZmX3ZrX2V4dGVuc2lvbnNfdG9fbWFz ayhzLT5od2N0eC0+ZW5hYmxlZF9kZXZfZXh0ZW5zaW9ucywKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHMtPmh3Y3R4LT5uYl9lbmFibGVkX2Rldl9leHRlbnNp b25zKTsKLQotICAgIGlmICghKHMtPmV4dGVuc2lvbnMgJiBGRl9WS19FWFRfVklERU9fRU5DT0RF X1FVRVVFKSkgewotICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkRldmljZSBk b2VzIG5vdCBzdXBwb3J0IHRoZSAlcyBleHRlbnNpb24hXG4iLAotICAgICAgICAgICAgICAgVktf S0hSX1ZJREVPX0VOQ09ERV9RVUVVRV9FWFRFTlNJT05fTkFNRSk7Ci0gICAgICAgIHJldHVybiBB VkVSUk9SKEVOT1NZUyk7Ci0gICAgfSBlbHNlIGlmICghKHMtPmV4dGVuc2lvbnMgJiBGRl9WS19F WFRfVklERU9fTUFJTlRFTkFOQ0VfMSkpIHsKLSAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0df RVJST1IsICJEZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCB0aGUgJXMgZXh0ZW5zaW9uIVxuIiwKLSAg ICAgICAgICAgICAgIFZLX0tIUl9WSURFT19NQUlOVEVOQU5DRV8xX0VYVEVOU0lPTl9OQU1FKTsK LSAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PU1lTKTsKLSAgICB9IGVsc2UgaWYgKCEocy0+ZXh0 ZW5zaW9ucyAmIHZrX2Rlc2MtPmVuY29kZV9leHRlbnNpb24pKSB7Ci0gICAgICAgIGF2X2xvZyhh dmN0eCwgQVZfTE9HX0VSUk9SLCAiRGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgZW5jb2RpbmcgJXMh XG4iLAotICAgICAgICAgICAgICAgYXZjb2RlY19nZXRfbmFtZShhdmN0eC0+Y29kZWNfaWQpKTsK LSAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PU1lTKTsKLSAgICB9Ci0KLSAgICAvKiBMb2FkIGZ1 bmN0aW9ucyAqLwotICAgIGVyciA9IGZmX3ZrX2xvYWRfZnVuY3Rpb25zKHMtPmRldmljZSwgdmss IHMtPmV4dGVuc2lvbnMsIDEsIDEpOwotICAgIGlmIChlcnIgPCAwKQotICAgICAgICByZXR1cm4g ZXJyOwotCi0gICAgLyogQ3JlYXRlIHF1ZXVlIGNvbnRleHQgKi8KLSAgICBjdHgtPnFmX2VuYyA9 IGZmX3ZrX3FmX2ZpbmQocywgVktfUVVFVUVfVklERU9fRU5DT0RFX0JJVF9LSFIsIHZrX2Rlc2Mt PmVuY29kZV9vcCk7Ci0gICAgaWYgKCFjdHgtPnFmX2VuYykgewotICAgICAgICBhdl9sb2coYXZj dHgsIEFWX0xPR19FUlJPUiwgIkVuY29kaW5nIG9mICVzIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhp cyBkZXZpY2VcbiIsCi0gICAgICAgICAgICAgICBhdmNvZGVjX2dldF9uYW1lKGF2Y3R4LT5jb2Rl Y19pZCkpOwotICAgICAgICByZXR1cm4gZXJyOwotICAgIH0KLQotICAgIC8qIExvYWQgYWxsIHBy b3BlcnRpZXMgKi8KLSAgICBlcnIgPSBmZl92a19sb2FkX3Byb3BzKHMpOwotICAgIGlmIChlcnIg PCAwKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgLyogU2V0IHR1bmluZyAqLwotICAgIGN0 eC0+dXNhZ2VfaW5mbyA9IChWa1ZpZGVvRW5jb2RlVXNhZ2VJbmZvS0hSKSB7Ci0gICAgICAgIC5z VHlwZSAgICAgICAgICAgICA9IFZLX1NUUlVDVFVSRV9UWVBFX1ZJREVPX0VOQ09ERV9VU0FHRV9J TkZPX0tIUiwKLSAgICAgICAgLnZpZGVvVXNhZ2VIaW50cyAgID0gY3R4LT5vcHRzLnVzYWdlLAot ICAgICAgICAudmlkZW9Db250ZW50SGludHMgPSBjdHgtPm9wdHMuY29udGVudCwKLSAgICAgICAg LnR1bmluZ01vZGUgICAgICAgID0gY3R4LT5vcHRzLnR1bmUsCi0gICAgfTsKLQotICAgIC8qIExv YWQgdXAgdGhlIHByb2ZpbGUgbm93LCBuZWVkZWQgZm9yIGNhcHMgYW5kIHRvIGNyZWF0ZSBhIHF1 ZXJ5IHBvb2wgKi8KLSAgICBjdHgtPnByb2ZpbGUuc1R5cGUgICAgICAgICAgICAgICA9IFZLX1NU UlVDVFVSRV9UWVBFX1ZJREVPX1BST0ZJTEVfSU5GT19LSFI7Ci0gICAgY3R4LT5wcm9maWxlLnBO ZXh0ICAgICAgICAgICAgICAgPSAmY3R4LT51c2FnZV9pbmZvOwotICAgIGN0eC0+cHJvZmlsZS52 aWRlb0NvZGVjT3BlcmF0aW9uID0gdmtfZGVzYy0+ZW5jb2RlX29wOwotICAgIGN0eC0+cHJvZmls ZS5jaHJvbWFTdWJzYW1wbGluZyAgID0gZmZfdmtfc3Vic2FtcGxpbmdfZnJvbV9hdl9kZXNjKGRl c2MpOwotICAgIGN0eC0+cHJvZmlsZS5sdW1hQml0RGVwdGggICAgICAgID0gZmZfdmtfZGVwdGhf ZnJvbV9hdl9kZXB0aChkZXNjLT5jb21wWzBdLmRlcHRoKTsKLSAgICBjdHgtPnByb2ZpbGUuY2hy b21hQml0RGVwdGggICAgICA9IGN0eC0+cHJvZmlsZS5sdW1hQml0RGVwdGg7Ci0KLSAgICAvKiBT ZXR1cCBhIHByb2ZpbGUgKi8KLSAgICBlcnIgPSBjb2RlYy0+aW5pdF9wcm9maWxlKGF2Y3R4LCAm Y3R4LT5wcm9maWxlLCAmY3R4LT51c2FnZV9pbmZvKTsKLSAgICBpZiAoZXJyIDwgMCkKLSAgICAg ICAgcmV0dXJuIGVycjsKLQotICAgIGN0eC0+cHJvZmlsZV9saXN0LnNUeXBlICAgICAgICA9IFZL X1NUUlVDVFVSRV9UWVBFX1ZJREVPX1BST0ZJTEVfTElTVF9JTkZPX0tIUjsKLSAgICBjdHgtPnBy b2ZpbGVfbGlzdC5wcm9maWxlQ291bnQgPSAxOwotICAgIGN0eC0+cHJvZmlsZV9saXN0LnBQcm9m aWxlcyAgICA9ICZjdHgtPnByb2ZpbGU7Ci0KLSAgICAvKiBHZXQgdGhlIGNhcGFiaWxpdGllcyBv ZiB0aGUgZW5jb2RlciBmb3IgdGhlIGdpdmVuIHByb2ZpbGUgKi8KLSAgICBjdHgtPmVuY19jYXBz LnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfVklERU9fRU5DT0RFX0NBUEFCSUxJVElFU19LSFI7 Ci0gICAgY3R4LT5lbmNfY2Fwcy5wTmV4dCA9IGNvZGVjX2NhcHM7Ci0gICAgY3R4LT5jYXBzLnNU eXBlID0gVktfU1RSVUNUVVJFX1RZUEVfVklERU9fQ0FQQUJJTElUSUVTX0tIUjsKLSAgICBjdHgt PmNhcHMucE5leHQgPSAmY3R4LT5lbmNfY2FwczsKLQotICAgIHJldCA9IHZrLT5HZXRQaHlzaWNh bERldmljZVZpZGVvQ2FwYWJpbGl0aWVzS0hSKHMtPmh3Y3R4LT5waHlzX2RldiwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY3R4LT5wcm9maWxl LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZj dHgtPmNhcHMpOwotICAgIGlmIChyZXQgPT0gVktfRVJST1JfVklERU9fUFJPRklMRV9PUEVSQVRJ T05fTk9UX1NVUFBPUlRFRF9LSFIpIHsKLSAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJS T1IsICJVbmFibGUgdG8gaW5pdGlhbGl6ZSBlbmNvZGluZzogIgotICAgICAgICAgICAgICAgIiVz IHByb2ZpbGUgXCIlc1wiIG5vdCBzdXBwb3J0ZWQhXG4iLAotICAgICAgICAgICAgICAgYXZjb2Rl Y19nZXRfbmFtZShhdmN0eC0+Y29kZWNfaWQpLAotICAgICAgICAgICAgICAgYXZjb2RlY19wcm9m aWxlX25hbWUoYXZjdHgtPmNvZGVjX2lkLCBhdmN0eC0+cHJvZmlsZSkpOwotICAgICAgICByZXR1 cm4gQVZFUlJPUihFSU5WQUwpOwotICAgIH0gZWxzZSBpZiAocmV0ID09IFZLX0VSUk9SX1ZJREVP X1BST0ZJTEVfRk9STUFUX05PVF9TVVBQT1JURURfS0hSKSB7Ci0gICAgICAgIGF2X2xvZyhhdmN0 eCwgQVZfTE9HX0VSUk9SLCAiVW5hYmxlIHRvIGluaXRpYWxpemUgZW5jb2Rpbmc6ICIKLSAgICAg ICAgICAgICAgICJmb3JtYXQgKCVzKSBub3Qgc3VwcG9ydGVkIVxuIiwKLSAgICAgICAgICAgICAg IGF2X2dldF9waXhfZm10X25hbWUoYXZjdHgtPnN3X3BpeF9mbXQpKTsKLSAgICAgICAgcmV0dXJu IEFWRVJST1IoRUlOVkFMKTsKLSAgICB9IGVsc2UgaWYgKHJldCA9PSBWS19FUlJPUl9GRUFUVVJF X05PVF9QUkVTRU5UIHx8Ci0gICAgICAgICAgICAgICByZXQgPT0gVktfRVJST1JfRk9STUFUX05P VF9TVVBQT1JURUQpIHsKLSAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKLSAgICB9IGVs c2UgaWYgKHJldCAhPSBWS19TVUNDRVNTKSB7Ci0gICAgICAgIHJldHVybiBBVkVSUk9SX0VYVEVS TkFMOwotICAgIH0KLQotICAgIGVyciA9IGluaXRfcmMoYXZjdHgsIGN0eCk7Ci0gICAgaWYgKGVy ciA8IDApCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICAvKiBDcmVhdGUgY29tbWFuZCBhbmQg cXVlcnkgcG9vbCAqLwotICAgIHF1ZXJ5X2NyZWF0ZSA9IChWa1F1ZXJ5UG9vbFZpZGVvRW5jb2Rl RmVlZGJhY2tDcmVhdGVJbmZvS0hSKSB7Ci0gICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9U WVBFX1FVRVJZX1BPT0xfVklERU9fRU5DT0RFX0ZFRURCQUNLX0NSRUFURV9JTkZPX0tIUiwKLSAg ICAgICAgLnBOZXh0ID0gJmN0eC0+cHJvZmlsZSwKLSAgICAgICAgLmVuY29kZUZlZWRiYWNrRmxh Z3MgPSBjdHgtPmVuY19jYXBzLnN1cHBvcnRlZEVuY29kZUZlZWRiYWNrRmxhZ3MgJgotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICh+VktfVklERU9fRU5DT0RFX0ZFRURCQUNLX0JJVFNU UkVBTV9IQVNfT1ZFUlJJREVTX0JJVF9LSFIpLAotICAgIH07Ci0gICAgZXJyID0gZmZfdmtfZXhl Y19wb29sX2luaXQocywgY3R4LT5xZl9lbmMsICZjdHgtPmVuY19wb29sLCBiYXNlX2N0eC0+YXN5 bmNfZGVwdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgVktfUVVFUllfVFlQ RV9WSURFT19FTkNPREVfRkVFREJBQ0tfS0hSLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICZxdWVyeV9jcmVhdGUpOwotICAgIGlmIChlcnIgPCAwKQotICAgICAgICByZXR1cm4g ZXJyOwotCi0gICAgaWYgKGN0eC0+b3B0cy5xdWFsaXR5ID4gY3R4LT5lbmNfY2Fwcy5tYXhRdWFs aXR5TGV2ZWxzKSB7Ci0gICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiSW52YWxp ZCBxdWFsaXR5IGxldmVsICVpOiBhbGxvd2VkIHJhbmdlIGlzICIKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICIwIHRvICVpXG4iLAotICAgICAgICAgICAgICAgY3R4LT5vcHRz LnF1YWxpdHksIGN0eC0+ZW5jX2NhcHMubWF4UXVhbGl0eUxldmVscyk7Ci0gICAgICAgIHJldHVy biBBVkVSUk9SKEVJTlZBTCk7Ci0gICAgfQotCi0gICAgLyogR2V0IHF1YWxpdHkgcHJvcGVydGll cyBmb3IgdGhlIHByb2ZpbGUgYW5kIHF1YWxpdHkgbGV2ZWwgKi8KLSAgICBxdWFsaXR5X2luZm8g PSAoVmtQaHlzaWNhbERldmljZVZpZGVvRW5jb2RlUXVhbGl0eUxldmVsSW5mb0tIUikgewotICAg ICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9QSFlTSUNBTF9ERVZJQ0VfVklERU9fRU5D T0RFX1FVQUxJVFlfTEVWRUxfSU5GT19LSFIsCi0gICAgICAgIC5wVmlkZW9Qcm9maWxlID0gJmN0 eC0+cHJvZmlsZSwKLSAgICAgICAgLnF1YWxpdHlMZXZlbCA9IGN0eC0+b3B0cy5xdWFsaXR5LAot ICAgIH07Ci0gICAgY3R4LT5xdWFsaXR5X3Byb3BzID0gKFZrVmlkZW9FbmNvZGVRdWFsaXR5TGV2 ZWxQcm9wZXJ0aWVzS0hSKSB7Ci0gICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX1ZJ REVPX0VOQ09ERV9RVUFMSVRZX0xFVkVMX1BST1BFUlRJRVNfS0hSLAotICAgICAgICAucE5leHQg PSBxdWFsaXR5X3BuZXh0LAotICAgIH07Ci0gICAgcmV0ID0gdmstPkdldFBoeXNpY2FsRGV2aWNl VmlkZW9FbmNvZGVRdWFsaXR5TGV2ZWxQcm9wZXJ0aWVzS0hSKHMtPmh3Y3R4LT5waHlzX2RldiwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJnF1YWxpdHlfaW5mbywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmN0eC0+cXVhbGl0eV9wcm9w cyk7Ci0gICAgaWYgKHJldCAhPSBWS19TVUNDRVNTKQotICAgICAgICByZXR1cm4gQVZFUlJPUl9F WFRFUk5BTDsKLQotICAgIC8qIFByaW50b3V0IGluZm9ybWF0aXZlIHByb3BlcnRpZXMgKi8KLSAg ICBhdl9sb2coYXZjdHgsIEFWX0xPR19WRVJCT1NFLCAiRW5jb2RlciBjYXBhYmlsaXRpZXMgZm9y ICVzIHByb2ZpbGUgXCIlc1wiOlxuIiwKLSAgICAgICAgICAgYXZjb2RlY19nZXRfbmFtZShhdmN0 eC0+Y29kZWNfaWQpLAotICAgICAgICAgICBhdmNvZGVjX3Byb2ZpbGVfbmFtZShhdmN0eC0+Y29k ZWNfaWQsIGF2Y3R4LT5wcm9maWxlKSk7Ci0gICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfVkVSQk9T RSwgIiAgICBXaWR0aDogZnJvbSAlaSB0byAlaVxuIiwKLSAgICAgICAgICAgY3R4LT5jYXBzLm1p bkNvZGVkRXh0ZW50LndpZHRoLCBjdHgtPmNhcHMubWF4Q29kZWRFeHRlbnQud2lkdGgpOwotICAg IGF2X2xvZyhhdmN0eCwgQVZfTE9HX1ZFUkJPU0UsICIgICAgSGVpZ2h0OiBmcm9tICVpIHRvICVp XG4iLAotICAgICAgICAgICBjdHgtPmNhcHMubWluQ29kZWRFeHRlbnQuaGVpZ2h0LCBjdHgtPmNh cHMubWF4Q29kZWRFeHRlbnQuaGVpZ2h0KTsKLSAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19WRVJC T1NFLCAiICAgIFdpZHRoIGFsaWdubWVudDogJWlcbiIsCi0gICAgICAgICAgIGN0eC0+Y2Fwcy5w aWN0dXJlQWNjZXNzR3JhbnVsYXJpdHkud2lkdGgpOwotICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9H X1ZFUkJPU0UsICIgICAgSGVpZ2h0IGFsaWdubWVudDogJWlcbiIsCi0gICAgICAgICAgIGN0eC0+ Y2Fwcy5waWN0dXJlQWNjZXNzR3JhbnVsYXJpdHkuaGVpZ2h0KTsKLSAgICBhdl9sb2coYXZjdHgs IEFWX0xPR19WRVJCT1NFLCAiICAgIEJpdHN0cmVhbSBvZmZzZXQgYWxpZ25tZW50OiAlIlBSSXU2 NCJcbiIsCi0gICAgICAgICAgIGN0eC0+Y2Fwcy5taW5CaXRzdHJlYW1CdWZmZXJPZmZzZXRBbGln bm1lbnQpOwotICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX1ZFUkJPU0UsICIgICAgQml0c3RyZWFt IHNpemUgYWxpZ25tZW50OiAlIlBSSXU2NCJcbiIsCi0gICAgICAgICAgIGN0eC0+Y2Fwcy5taW5C aXRzdHJlYW1CdWZmZXJTaXplQWxpZ25tZW50KTsKLSAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19W RVJCT1NFLCAiICAgIE1heGltdW0gcmVmZXJlbmNlczogJXVcbiIsCi0gICAgICAgICAgIGN0eC0+ Y2Fwcy5tYXhEcGJTbG90cyk7Ci0gICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfVkVSQk9TRSwgIiAg ICBNYXhpbXVtIGFjdGl2ZSByZWZlcmVuY2VzOiAldVxuIiwKLSAgICAgICAgICAgY3R4LT5jYXBz Lm1heEFjdGl2ZVJlZmVyZW5jZVBpY3R1cmVzKTsKLSAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19W RVJCT1NFLCAiICAgIENvZGVjIGhlYWRlciB2ZXJzaW9uOiAlaS4laS4laSAoZHJpdmVyKSwgJWku JWkuJWkgKGNvbXBpbGVkKVxuIiwKLSAgICAgICAgICAgQ09ERUNfVkVSKGN0eC0+Y2Fwcy5zdGRI ZWFkZXJWZXJzaW9uLnNwZWNWZXJzaW9uKSwKLSAgICAgICAgICAgQ09ERUNfVkVSKHZrX2Rlc2Mt PmV4dF9wcm9wcy5zcGVjVmVyc2lvbikpOwotICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX1ZFUkJP U0UsICIgICAgRW5jb2RlciBtYXggcXVhbGl0eTogJWlcbiIsCi0gICAgICAgICAgIGN0eC0+ZW5j X2NhcHMubWF4UXVhbGl0eUxldmVscyk7Ci0gICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfVkVSQk9T RSwgIiAgICBFbmNvZGVyIGltYWdlIHdpZHRoIGFsaWdubWVudDogJWlcbiIsCi0gICAgICAgICAg IGN0eC0+ZW5jX2NhcHMuZW5jb2RlSW5wdXRQaWN0dXJlR3JhbnVsYXJpdHkud2lkdGgpOwotICAg IGF2X2xvZyhhdmN0eCwgQVZfTE9HX1ZFUkJPU0UsICIgICAgRW5jb2RlciBpbWFnZSBoZWlnaHQg YWxpZ25tZW50OiAlaVxuIiwKLSAgICAgICAgICAgY3R4LT5lbmNfY2Fwcy5lbmNvZGVJbnB1dFBp Y3R1cmVHcmFudWxhcml0eS5oZWlnaHQpOwotICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX1ZFUkJP U0UsICIgICAgQ2FwYWJpbGl0eSBmbGFnczolcyVzJXNcbiIsCi0gICAgICAgICAgIGN0eC0+Y2Fw cy5mbGFncyA/ICIiIDoKLSAgICAgICAgICAgICAgICIgbm9uZSIsCi0gICAgICAgICAgIGN0eC0+ Y2Fwcy5mbGFncyAmIFZLX1ZJREVPX0NBUEFCSUxJVFlfUFJPVEVDVEVEX0NPTlRFTlRfQklUX0tI UiA/Ci0gICAgICAgICAgICAgICAiIHByb3RlY3RlZCIgOiAiIiwKLSAgICAgICAgICAgY3R4LT5j YXBzLmZsYWdzICYgVktfVklERU9fQ0FQQUJJTElUWV9TRVBBUkFURV9SRUZFUkVOQ0VfSU1BR0VT X0JJVF9LSFIgPwotICAgICAgICAgICAgICAgIiBzZXBhcmF0ZV9yZWZlcmVuY2VzIiA6ICIiKTsK LQotICAgIC8qIFNldHVwIHdpZHRoL2hlaWdodCBhbGlnbm1lbnQgKi8KLSAgICBiYXNlX2N0eC0+ c3VyZmFjZV93aWR0aCA9IGF2Y3R4LT5jb2RlZF93aWR0aCA9Ci0gICAgICAgIEZGQUxJR04oYXZj dHgtPndpZHRoLCBjdHgtPmVuY19jYXBzLmVuY29kZUlucHV0UGljdHVyZUdyYW51bGFyaXR5Lndp ZHRoKTsKLSAgICBiYXNlX2N0eC0+c3VyZmFjZV9oZWlnaHQgPSBhdmN0eC0+Y29kZWRfaGVpZ2h0 ID0KLSAgICAgICAgRkZBTElHTihhdmN0eC0+aGVpZ2h0LCBjdHgtPmVuY19jYXBzLmVuY29kZUlu cHV0UGljdHVyZUdyYW51bGFyaXR5LmhlaWdodCk7Ci0KLSAgICAvKiBTZXR1cCBzbGljZSB3aWR0 aC9oZWlnaHQgKi8KLSAgICBiYXNlX2N0eC0+c2xpY2VfYmxvY2tfd2lkdGggPSBjdHgtPmVuY19j YXBzLmVuY29kZUlucHV0UGljdHVyZUdyYW51bGFyaXR5LndpZHRoOwotICAgIGJhc2VfY3R4LT5z bGljZV9ibG9ja19oZWlnaHQgPSBjdHgtPmVuY19jYXBzLmVuY29kZUlucHV0UGljdHVyZUdyYW51 bGFyaXR5LmhlaWdodDsKLQotICAgIC8qIENoZWNrIGlmIGVuY29kaW5nIGlzIHBvc3NpYmxlIHdp dGggdGhlIGdpdmVuIHBhcmFtZXRlcnMgKi8KLSAgICBpZiAoYXZjdHgtPmNvZGVkX3dpZHRoICA8 IGN0eC0+Y2Fwcy5taW5Db2RlZEV4dGVudC53aWR0aCAgIHx8Ci0gICAgICAgIGF2Y3R4LT5jb2Rl ZF9oZWlnaHQgPCBjdHgtPmNhcHMubWluQ29kZWRFeHRlbnQuaGVpZ2h0ICB8fAotICAgICAgICBh dmN0eC0+Y29kZWRfd2lkdGggID4gY3R4LT5jYXBzLm1heENvZGVkRXh0ZW50LndpZHRoICAgfHwK LSAgICAgICAgYXZjdHgtPmNvZGVkX2hlaWdodCA+IGN0eC0+Y2Fwcy5tYXhDb2RlZEV4dGVudC5o ZWlnaHQpIHsKLSAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJJbnB1dCBvZiAl aXglaSB0b28gbGFyZ2UgZm9yIGVuY29kZXIgbGltaXRzOiAlaXglaSBtYXhcbiIsCi0gICAgICAg ICAgICAgICBhdmN0eC0+Y29kZWRfd2lkdGgsIGF2Y3R4LT5jb2RlZF9oZWlnaHQsCi0gICAgICAg ICAgICAgICBjdHgtPmNhcHMubWluQ29kZWRFeHRlbnQud2lkdGgsIGN0eC0+Y2Fwcy5taW5Db2Rl ZEV4dGVudC5oZWlnaHQpOwotICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOwotICAgIH0K LQotICAgIGZtdF9pbmZvLmltYWdlVXNhZ2UgPSBWS19JTUFHRV9VU0FHRV9WSURFT19FTkNPREVf RFBCX0JJVF9LSFI7Ci0KLSAgICBjdHgtPmNvbW1vbi5sYXllcmVkX2RwYiA9ICEoY3R4LT5jYXBz LmZsYWdzICYgVktfVklERU9fQ0FQQUJJTElUWV9TRVBBUkFURV9SRUZFUkVOQ0VfSU1BR0VTX0JJ VF9LSFIpOwotCi0gICAgLyogR2V0IHRoZSBzdXBwb3J0ZWQgaW1hZ2UgZm9ybWF0cyAqLwotICAg IHJldCA9IHZrLT5HZXRQaHlzaWNhbERldmljZVZpZGVvRm9ybWF0UHJvcGVydGllc0tIUihzLT5o d2N0eC0+cGh5c19kZXYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICZmbXRfaW5mbywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5iX291dF9mbXRzLCBOVUxMKTsKLSAgICBpZiAo cmV0ID09IFZLX0VSUk9SX0ZPUk1BVF9OT1RfU1VQUE9SVEVEIHx8Ci0gICAgICAgICghbmJfb3V0 X2ZtdHMgJiYgcmV0ID09IFZLX1NVQ0NFU1MpKSB7Ci0gICAgICAgIHJldHVybiBBVkVSUk9SKEVJ TlZBTCk7Ci0gICAgfSBlbHNlIGlmIChyZXQgIT0gVktfU1VDQ0VTUykgewotICAgICAgICBhdl9s b2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIlVuYWJsZSB0byBnZXQgVnVsa2FuIGZvcm1hdCBwcm9w ZXJ0aWVzOiAlcyFcbiIsCi0gICAgICAgICAgICAgICBmZl92a19yZXQyc3RyKHJldCkpOwotICAg ICAgICByZXR1cm4gQVZFUlJPUl9FWFRFUk5BTDsKLSAgICB9Ci0KLSAgICByZXRfaW5mbyA9IGF2 X21hbGxvY3ooc2l6ZW9mKCpyZXRfaW5mbykqbmJfb3V0X2ZtdHMpOwotICAgIGlmICghcmV0X2lu Zm8pCi0gICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7Ci0KLSAgICBmb3IgKGludCBpID0g MDsgaSA8IG5iX291dF9mbXRzOyBpKyspCi0gICAgICAgIHJldF9pbmZvW2ldLnNUeXBlID0gVktf U1RSVUNUVVJFX1RZUEVfVklERU9fRk9STUFUX1BST1BFUlRJRVNfS0hSOwotCi0gICAgcmV0ID0g dmstPkdldFBoeXNpY2FsRGV2aWNlVmlkZW9Gb3JtYXRQcm9wZXJ0aWVzS0hSKHMtPmh3Y3R4LT5w aHlzX2RldiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJmZtdF9pbmZvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAmbmJfb3V0X2ZtdHMsIHJldF9pbmZvKTsKLSAgICBpZiAocmV0 ID09IFZLX0VSUk9SX0ZPUk1BVF9OT1RfU1VQUE9SVEVEIHx8Ci0gICAgICAgICghbmJfb3V0X2Zt dHMgJiYgcmV0ID09IFZLX1NVQ0NFU1MpKSB7Ci0gICAgICAgIGF2X2ZyZWUocmV0X2luZm8pOwot ICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOwotICAgIH0gZWxzZSBpZiAocmV0ICE9IFZL X1NVQ0NFU1MpIHsKLSAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJVbmFibGUg dG8gZ2V0IFZ1bGthbiBmb3JtYXQgcHJvcGVydGllczogJXMhXG4iLAotICAgICAgICAgICAgICAg ZmZfdmtfcmV0MnN0cihyZXQpKTsKLSAgICAgICAgYXZfZnJlZShyZXRfaW5mbyk7Ci0gICAgICAg IHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOwotICAgIH0KLQotICAgIGF2X2xvZyhhdmN0eCwgQVZf TE9HX1ZFUkJPU0UsICJTdXBwb3J0ZWQgaW5wdXQgZm9ybWF0czpcbiIpOwotICAgIGZvciAoaSA9 IDA7IGkgPCBuYl9vdXRfZm10czsgaSsrKQotICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19W RVJCT1NFLCAiICAgICVpOiAlaVxuIiwgaSwgcmV0X2luZm9baV0uZm9ybWF0KTsKLQotICAgIGZv ciAoaSA9IDA7IGkgPCBuYl9vdXRfZm10czsgaSsrKSB7Ci0gICAgICAgIGlmIChmZl92a19waXhf Zm10X2Zyb21fdmtmbXQocmV0X2luZm9baV0uZm9ybWF0KSA9PSBzLT5mcmFtZXMtPnN3X2Zvcm1h dCkgewotICAgICAgICAgICAgY3R4LT5waWNfZm9ybWF0ID0gcmV0X2luZm9baV0uZm9ybWF0Owot ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBhdl9mcmVlKHJldF9p bmZvKTsKLQotICAgIGlmIChpID09IG5iX291dF9mbXRzKSB7Ci0gICAgICAgIGF2X2xvZyhhdmN0 eCwgQVZfTE9HX0VSUk9SLCAiUGl4ZWwgZm9ybWF0ICVzIG9mIGlucHV0IGZyYW1lcyBub3Qgc3Vw cG9ydGVkIVxuIiwKLSAgICAgICAgICAgICAgIGF2X2dldF9waXhfZm10X25hbWUocy0+ZnJhbWVz LT5zd19mb3JtYXQpKTsKLSAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKLSAgICB9Ci0K LSAgICAvKiBDcmVhdGUgc2Vzc2lvbiAqLwotICAgIHNlc3Npb25fY3JlYXRlLnBWaWRlb1Byb2Zp bGUgPSAmY3R4LT5wcm9maWxlOwotICAgIHNlc3Npb25fY3JlYXRlLmZsYWdzID0gMHgwOwotICAg IHNlc3Npb25fY3JlYXRlLnF1ZXVlRmFtaWx5SW5kZXggPSBjdHgtPnFmX2VuYy0+aWR4OwotICAg IHNlc3Npb25fY3JlYXRlLm1heENvZGVkRXh0ZW50ID0gY3R4LT5jYXBzLm1heENvZGVkRXh0ZW50 OwotICAgIHNlc3Npb25fY3JlYXRlLm1heERwYlNsb3RzID0gY3R4LT5jYXBzLm1heERwYlNsb3Rz OwotICAgIHNlc3Npb25fY3JlYXRlLm1heEFjdGl2ZVJlZmVyZW5jZVBpY3R1cmVzID0gY3R4LT5j YXBzLm1heEFjdGl2ZVJlZmVyZW5jZVBpY3R1cmVzOwotICAgIHNlc3Npb25fY3JlYXRlLnBpY3R1 cmVGb3JtYXQgPSBjdHgtPnBpY19mb3JtYXQ7Ci0gICAgc2Vzc2lvbl9jcmVhdGUucmVmZXJlbmNl UGljdHVyZUZvcm1hdCA9IHNlc3Npb25fY3JlYXRlLnBpY3R1cmVGb3JtYXQ7Ci0gICAgc2Vzc2lv bl9jcmVhdGUucFN0ZEhlYWRlclZlcnNpb24gPSAmdmtfZGVzYy0+ZXh0X3Byb3BzOwotCi0gICAg ZXJyID0gZmZfdmtfdmlkZW9fY29tbW9uX2luaXQoYXZjdHgsIHMsICZjdHgtPmNvbW1vbiwgJnNl c3Npb25fY3JlYXRlKTsKLSAgICBpZiAoZXJyIDwgMCkKLSAgICAgICAgcmV0dXJuIGVycjsKLQot ICAgIGVyciA9IGZmX2h3X2Jhc2VfZW5jb2RlX2luaXQoYXZjdHgsICZjdHgtPmJhc2UpOwotICAg IGlmIChlcnIgPCAwKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgZXJyID0gdnVsa2FuX2Vu Y29kZV9jcmVhdGVfZHBiKGF2Y3R4LCBjdHgpOwotICAgIGlmIChlcnIgPCAwKQotICAgICAgICBy ZXR1cm4gZXJyOwotCi0gICAgYmFzZV9jdHgtPmFzeW5jX2VuY29kZSA9IDE7Ci0gICAgYmFzZV9j dHgtPmVuY29kZV9maWZvID0gYXZfZmlmb19hbGxvYzIoYmFzZV9jdHgtPmFzeW5jX2RlcHRoLAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihGRlZ1bGth bkVuY29kZVBpY3R1cmUgKiksIDApOwotICAgIGlmICghYmFzZV9jdHgtPmVuY29kZV9maWZvKQot ICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLWlu dCBmZl92dWxrYW5fZW5jb2RlX2NyZWF0ZV9zZXNzaW9uX3BhcmFtcyhBVkNvZGVjQ29udGV4dCAq YXZjdHgsIEZGVnVsa2FuRW5jb2RlQ29udGV4dCAqY3R4LAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmNvZGVjX3BhcmFtc19wbmV4dCkKLXsKLSAgICBW a1Jlc3VsdCByZXQ7Ci0gICAgRkZWdWxrYW5GdW5jdGlvbnMgKnZrID0gJmN0eC0+cy52a2ZuOwot ICAgIEZGVnVsa2FuQ29udGV4dCAqcyA9ICZjdHgtPnM7Ci0KLSAgICBWa1ZpZGVvRW5jb2RlUXVh bGl0eUxldmVsSW5mb0tIUiBxX2luZm87Ci0gICAgVmtWaWRlb1Nlc3Npb25QYXJhbWV0ZXJzQ3Jl YXRlSW5mb0tIUiBzZXNzaW9uX3BhcmFtc19jcmVhdGU7Ci0KLSAgICBxX2luZm8gPSAoVmtWaWRl b0VuY29kZVF1YWxpdHlMZXZlbEluZm9LSFIpIHsKLSAgICAgICAgLnNUeXBlID0gVktfU1RSVUNU VVJFX1RZUEVfVklERU9fRU5DT0RFX1FVQUxJVFlfTEVWRUxfSU5GT19LSFIsCi0gICAgICAgIC5w TmV4dCA9IGNvZGVjX3BhcmFtc19wbmV4dCwKLSAgICAgICAgLnF1YWxpdHlMZXZlbCA9IGN0eC0+ b3B0cy5xdWFsaXR5LAotICAgIH07Ci0gICAgc2Vzc2lvbl9wYXJhbXNfY3JlYXRlID0gKFZrVmlk ZW9TZXNzaW9uUGFyYW1ldGVyc0NyZWF0ZUluZm9LSFIpIHsKLSAgICAgICAgLnNUeXBlID0gVktf U1RSVUNUVVJFX1RZUEVfVklERU9fU0VTU0lPTl9QQVJBTUVURVJTX0NSRUFURV9JTkZPX0tIUiwK LSAgICAgICAgLnBOZXh0ID0gJnFfaW5mbywKLSAgICAgICAgLnZpZGVvU2Vzc2lvbiA9IGN0eC0+ Y29tbW9uLnNlc3Npb24sCi0gICAgICAgIC52aWRlb1Nlc3Npb25QYXJhbWV0ZXJzVGVtcGxhdGUg PSBWS19OVUxMX0hBTkRMRSwKLSAgICB9OwotCi0gICAgLyogQ3JlYXRlIHNlc3Npb24gcGFyYW1l dGVycyAqLwotICAgIHJldCA9IHZrLT5DcmVhdGVWaWRlb1Nlc3Npb25QYXJhbWV0ZXJzS0hSKHMt Pmh3Y3R4LT5hY3RfZGV2LCAmc2Vzc2lvbl9wYXJhbXNfY3JlYXRlLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMtPmh3Y3R4LT5hbGxvYywgJmN0eC0+c2Vz c2lvbl9wYXJhbXMpOwotICAgIGlmIChyZXQgIT0gVktfU1VDQ0VTUykgewotICAgICAgICBhdl9s b2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIlVuYWJsZSB0byBjcmVhdGUgVnVsa2FuIHZpZGVvIHNl c3Npb24gcGFyYW1ldGVyczogJXMhXG4iLAotICAgICAgICAgICAgICAgZmZfdmtfcmV0MnN0cihy ZXQpKTsKLSAgICAgICAgcmV0dXJuIEFWRVJST1JfRVhURVJOQUw7Ci0gICAgfQotCi0gICAgcmV0 dXJuIDA7Ci19Ci0tIAoyLjQ5LjEKCgpGcm9tIGU5OWY3ZTMyNDFhYWI2NmFmMDY3YTNlYjNkYzgx MjVkMWY2M2MxNjMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCkZyb206IEphbWFpa2ExIDxsdWth c3pjejE4QHdwLnBsPgpEYXRlOiBXZWQsIDMgU2VwIDIwMjUgMTM6MzE6MjggKzAwMDAKU3ViamVj dDogW1BBVENIIDA3MC8xMThdIENoYW5naW5nIHZ1bGthbiBmaWxlIGRpcmVjdG9yeQoKLS0tCiBs aWJhdmNvZGVjL3Z1bGthbi92dWxrYW5fZW5jb2RlLmMgfCAxMDU0ICsrKysrKysrKysrKysrKysr KysrKysrKysrKysrCiAxIGZpbGUgY2hhbmdlZCwgMTA1NCBpbnNlcnRpb25zKCspCiBjcmVhdGUg bW9kZSAxMDA2NDQgbGliYXZjb2RlYy92dWxrYW4vdnVsa2FuX2VuY29kZS5jCgpkaWZmIC0tZ2l0 IGEvbGliYXZjb2RlYy92dWxrYW4vdnVsa2FuX2VuY29kZS5jIGIvbGliYXZjb2RlYy92dWxrYW4v dnVsa2FuX2VuY29kZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjg0 OTUwNDEzMWMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJhdmNvZGVjL3Z1bGthbi92dWxrYW5fZW5j b2RlLmMKQEAgLTAsMCArMSwxMDU0IEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZt cGVnLgorICoKKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNz ZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2Us IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogRkZtcGVnIGlz IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF LiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl IGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsg aWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwg NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVT QQorICovCisKKyNpbmNsdWRlICJsaWJhdnV0aWwvbWVtLmgiCisjaW5jbHVkZSAibGliYXZ1dGls L2F2YXNzZXJ0LmgiCisjaW5jbHVkZSAidnVsa2FuX2VuY29kZS5oIgorI2luY2x1ZGUgImxpYmF2 dXRpbC9jb25maWcuaCIKKworI2luY2x1ZGUgIi4uLy4uL2xpYmF2dXRpbC92dWxrYW4vdnVsa2Fu X2xvYWRlci5oIgorCitjb25zdCBBVkNvZGVjSFdDb25maWdJbnRlcm5hbCAqY29uc3QgZmZfdnVs a2FuX2VuY29kZV9od19jb25maWdzW10gPSB7CisgICAgSFdfQ09ORklHX0VOQ09ERVJfRlJBTUVT KFZVTEtBTiwgVlVMS0FOKSwKKyAgICBOVUxMLAorfTsKKworYXZfY29sZCB2b2lkIGZmX3Z1bGth bl9lbmNvZGVfdW5pbml0KEZGVnVsa2FuRW5jb2RlQ29udGV4dCAqY3R4KQoreworICAgIEZGVnVs a2FuQ29udGV4dCAqcyA9ICZjdHgtPnM7CisgICAgRkZWdWxrYW5GdW5jdGlvbnMgKnZrID0gJnMt PnZrZm47CisKKyAgICAvKiBXYWl0IG9uIGFuZCBmcmVlIGV4ZWN1dGlvbiBwb29sICovCisgICAg ZmZfdmtfZXhlY19wb29sX2ZyZWUocywgJmN0eC0+ZW5jX3Bvb2wpOworCisgICAgLyogRGVzdHJv eSB0aGUgc2Vzc2lvbiBwYXJhbXMgKi8KKyAgICBpZiAoY3R4LT5zZXNzaW9uX3BhcmFtcykKKyAg ICAgICAgdmstPkRlc3Ryb3lWaWRlb1Nlc3Npb25QYXJhbWV0ZXJzS0hSKHMtPmh3Y3R4LT5hY3Rf ZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT5z ZXNzaW9uX3BhcmFtcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHMtPmh3Y3R4LT5hbGxvYyk7CisKKyAgICBmZl9od19iYXNlX2VuY29kZV9jbG9zZSgmY3R4 LT5iYXNlKTsKKworICAgIGF2X2J1ZmZlcl9wb29sX3VuaW5pdCgmY3R4LT5idWZfcG9vbCk7CisK KyAgICBmZl92a192aWRlb19jb21tb25fdW5pbml0KHMsICZjdHgtPmNvbW1vbik7CisKKyAgICBm Zl92a191bmluaXQocyk7Cit9CisKK3N0YXRpYyBpbnQgdnVsa2FuX2VuY29kZV9pbml0KEFWQ29k ZWNDb250ZXh0ICphdmN0eCwgRkZIV0Jhc2VFbmNvZGVQaWN0dXJlICpwaWMpCit7CisgICAgaW50 IGVycjsKKyAgICBGRlZ1bGthbkVuY29kZUNvbnRleHQgKmN0eCA9IGF2Y3R4LT5wcml2X2RhdGE7 CisgICAgRkZWdWxrYW5FbmNvZGVQaWN0dXJlICp2cCA9IHBpYy0+cHJpdjsKKworICAgIEFWRnJh bWUgKmYgPSBwaWMtPmlucHV0X2ltYWdlOworICAgIEFWSFdGcmFtZXNDb250ZXh0ICpod2ZjID0g KEFWSFdGcmFtZXNDb250ZXh0ICopZi0+aHdfZnJhbWVzX2N0eC0+ZGF0YTsKKyAgICBBVlZ1bGth bkZyYW1lc0NvbnRleHQgKnZrZmMgPSBod2ZjLT5od2N0eDsKKyAgICBBVlZrRnJhbWUgKnZrZiA9 IChBVlZrRnJhbWUgKilmLT5kYXRhWzBdOworCisgICAgaWYgKGN0eC0+Y29kZWMtPnBpY3R1cmVf cHJpdl9kYXRhX3NpemUgPiAwKSB7CisgICAgICAgIHBpYy0+Y29kZWNfcHJpdiA9IGF2X21hbGxv Y3ooY3R4LT5jb2RlYy0+cGljdHVyZV9wcml2X2RhdGFfc2l6ZSk7CisgICAgICAgIGlmICghcGlj LT5jb2RlY19wcml2KQorICAgICAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKKyAgICB9 CisKKyAgICAvKiBJbnB1dCBpbWFnZSB2aWV3ICovCisgICAgZXJyID0gZmZfdmtfY3JlYXRlX3Zp ZXcoJmN0eC0+cywgJmN0eC0+Y29tbW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ2 cC0+aW4udmlldywgJnZwLT5pbi5hc3BlY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg dmtmLCB2a2ZjLT5mb3JtYXRbMF0sIDApOworICAgIGlmIChlcnIgPCAwKQorICAgICAgICByZXR1 cm4gZXJyOworCisgICAgLyogUmVmZXJlbmNlIHZpZXcgKi8KKyAgICBpZiAoIWN0eC0+Y29tbW9u LmxheWVyZWRfZHBiKSB7CisgICAgICAgIEFWRnJhbWUgKnJmID0gcGljLT5yZWNvbl9pbWFnZTsK KyAgICAgICAgQVZWa0ZyYW1lICpydmtmID0gKEFWVmtGcmFtZSAqKXJmLT5kYXRhWzBdOworICAg ICAgICBlcnIgPSBmZl92a19jcmVhdGVfdmlldygmY3R4LT5zLCAmY3R4LT5jb21tb24sCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ2cC0+ZHBiLnZpZXcsICZ2cC0+ZHBiLmFzcGVj dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnZrZiwgY3R4LT5waWNfZm9ybWF0 LCAxKTsKKyAgICAgICAgaWYgKGVyciA8IDApCisgICAgICAgICAgICByZXR1cm4gZXJyOworICAg IH0gZWxzZSB7CisgICAgICAgIHZwLT5kcGIudmlldyA9IGN0eC0+Y29tbW9uLmxheWVyZWRfdmll dzsKKyAgICAgICAgdnAtPmRwYi5hc3BlY3QgPSBjdHgtPmNvbW1vbi5sYXllcmVkX2FzcGVjdDsK KyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2dWxrYW5fZW5jb2RlX2Zy ZWUoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LCBGRkhXQmFzZUVuY29kZVBpY3R1cmUgKnBpYykKK3sK KyAgICBGRlZ1bGthbkVuY29kZUNvbnRleHQgKmN0eCA9IGF2Y3R4LT5wcml2X2RhdGE7CisgICAg RkZWdWxrYW5GdW5jdGlvbnMgKnZrID0gJmN0eC0+cy52a2ZuOworCisgICAgRkZWdWxrYW5FbmNv ZGVQaWN0dXJlICp2cCA9IHBpYy0+cHJpdjsKKworICAgIGlmICh2cC0+aW4udmlldykKKyAgICAg ICAgdmstPkRlc3Ryb3lJbWFnZVZpZXcoY3R4LT5zLmh3Y3R4LT5hY3RfZGV2LCB2cC0+aW4udmll dywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT5zLmh3Y3R4LT5hbGxvYyk7CisK KyAgICBpZiAoIWN0eC0+Y29tbW9uLmxheWVyZWRfZHBiICYmIHZwLT5kcGIudmlldykKKyAgICAg ICAgdmstPkRlc3Ryb3lJbWFnZVZpZXcoY3R4LT5zLmh3Y3R4LT5hY3RfZGV2LCB2cC0+ZHBiLnZp ZXcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+cy5od2N0eC0+YWxsb2MpOwor CisgICAgY3R4LT5zbG90c1t2cC0+ZHBiX3Nsb3Quc2xvdEluZGV4XSA9IE5VTEw7CisKKyAgICBy ZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpbml0X3BpY19yYyhBVkNvZGVjQ29udGV4dCAqYXZj dHgsIEZGSFdCYXNlRW5jb2RlUGljdHVyZSAqcGljLAorICAgICAgICAgICAgICAgICAgICAgICBW a1ZpZGVvRW5jb2RlUmF0ZUNvbnRyb2xJbmZvS0hSICpyY19pbmZvLAorICAgICAgICAgICAgICAg ICAgICAgICBWa1ZpZGVvRW5jb2RlUmF0ZUNvbnRyb2xMYXllckluZm9LSFIgKnJjX2xheWVyIC8q IEdvZXMgaW4gXiAqLykKK3sKKyAgICBGRlZ1bGthbkVuY29kZUNvbnRleHQgKmN0eCA9IGF2Y3R4 LT5wcml2X2RhdGE7CisKKyAgICAqcmNfaW5mbyA9IChWa1ZpZGVvRW5jb2RlUmF0ZUNvbnRyb2xJ bmZvS0hSKSB7CisgICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX1ZJREVPX0VOQ09E RV9SQVRFX0NPTlRST0xfSU5GT19LSFIsCisgICAgICAgIC5yYXRlQ29udHJvbE1vZGUgPSBjdHgt Pm9wdHMucmNfbW9kZSwKKyAgICB9OworCisgICAgaWYgKGN0eC0+b3B0cy5yY19tb2RlID4gVktf VklERU9fRU5DT0RFX1JBVEVfQ09OVFJPTF9NT0RFX0RJU0FCTEVEX0JJVF9LSFIpIHsKKyAgICAg ICAgKnJjX2xheWVyID0gKFZrVmlkZW9FbmNvZGVSYXRlQ29udHJvbExheWVySW5mb0tIUikgewor ICAgICAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfVklERU9fRU5DT0RFX1JBVEVf Q09OVFJPTF9MQVlFUl9JTkZPX0tIUiwKKyAgICAgICAgICAgIC5hdmVyYWdlQml0cmF0ZSA9IGF2 Y3R4LT5iaXRfcmF0ZSwKKyAgICAgICAgICAgIC5tYXhCaXRyYXRlID0gYXZjdHgtPnJjX21heF9y YXRlID8gYXZjdHgtPnJjX21heF9yYXRlIDogYXZjdHgtPmJpdF9yYXRlLAorICAgICAgICAgICAg LmZyYW1lUmF0ZU51bWVyYXRvciA9IGF2Y3R4LT5mcmFtZXJhdGUubnVtLAorICAgICAgICAgICAg LmZyYW1lUmF0ZURlbm9taW5hdG9yID0gYXZjdHgtPmZyYW1lcmF0ZS5kZW4sCisgICAgICAgIH07 CisgICAgICAgIHJjX2luZm8tPmxheWVyQ291bnQrKzsKKyAgICAgICAgcmNfaW5mby0+cExheWVy cyA9IHJjX2xheWVyOworICAgIH0KKworICAgIHJldHVybiBjdHgtPmNvZGVjLT5pbml0X3BpY19y YyhhdmN0eCwgcGljLCByY19pbmZvLCByY19sYXllcik7Cit9CisKK3N0YXRpYyBpbnQgdnVsa2Fu X2VuY29kZV9pc3N1ZShBVkNvZGVjQ29udGV4dCAqYXZjdHgsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgRkZIV0Jhc2VFbmNvZGVQaWN0dXJlICpiYXNlX3BpYykKK3sKKyAgICBGRlZ1 bGthbkVuY29kZUNvbnRleHQgKmN0eCA9IGF2Y3R4LT5wcml2X2RhdGE7CisgICAgRkZWdWxrYW5G dW5jdGlvbnMgKnZrID0gJmN0eC0+cy52a2ZuOworCisgICAgY29uc3Qgc2l6ZV90IHNpemVfYWxp Z24gPSBjdHgtPmNhcHMubWluQml0c3RyZWFtQnVmZmVyU2l6ZUFsaWdubWVudDsKKworICAgIEZG VnVsa2FuRW5jb2RlUGljdHVyZSAqdnAgPSBiYXNlX3BpYy0+cHJpdjsKKyAgICBBVkZyYW1lICpz cmMgPSAoQVZGcmFtZSAqKWJhc2VfcGljLT5pbnB1dF9pbWFnZTsKKyAgICBBVlZrRnJhbWUgKnZr ZiA9IChBVlZrRnJhbWUgKilzcmMtPmRhdGFbMF07CisKKyAgICBpbnQgZXJyLCBtYXhfcGt0X3Np emU7CisKKyAgICBGRlZrQnVmZmVyICpzZF9idWY7CisKKyAgICBpbnQgc2xvdF9pbmRleCA9IC0x OworICAgIEZGVmtFeGVjQ29udGV4dCAqZXhlYzsKKyAgICBWa0NvbW1hbmRCdWZmZXIgY21kX2J1 ZjsKKyAgICBWa0ltYWdlTWVtb3J5QmFycmllcjIgaW1nX2JhclszN107CisgICAgaW50IG5iX2lt Z19iYXIgPSAwOworCisgICAgLyogQ29kaW5nIHN0YXJ0L2VuZCAqLworICAgIFZrVmlkZW9CZWdp bkNvZGluZ0luZm9LSFIgZW5jb2RlX3N0YXJ0OworICAgIFZrVmlkZW9FbmRDb2RpbmdJbmZvS0hS IGVuY29kZV9lbmQgPSB7CisgICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX1ZJREVP X0VORF9DT0RJTkdfSU5GT19LSFIsCisgICAgfTsKKworICAgIFZrVmlkZW9FbmNvZGVSYXRlQ29u dHJvbExheWVySW5mb0tIUiByY19sYXllcjsKKyAgICBWa1ZpZGVvRW5jb2RlUmF0ZUNvbnRyb2xJ bmZvS0hSIHJjX2luZm87CisgICAgVmtWaWRlb0VuY29kZVF1YWxpdHlMZXZlbEluZm9LSFIgcV9p bmZvOworICAgIFZrVmlkZW9Db2RpbmdDb250cm9sSW5mb0tIUiBlbmNvZGVfY3RybDsKKworICAg IFZrVmlkZW9SZWZlcmVuY2VTbG90SW5mb0tIUiByZWZfc2xvdFszN107CisgICAgVmtWaWRlb0Vu Y29kZUluZm9LSFIgZW5jb2RlX2luZm87CisKKyAgICAvKiBDcmVhdGUgcGFja2V0IGRhdGEgYnVm ZmVyICovCisgICAgbWF4X3BrdF9zaXplID0gRkZBTElHTigzICogY3R4LT5iYXNlLnN1cmZhY2Vf d2lkdGggKiBjdHgtPmJhc2Uuc3VyZmFjZV9oZWlnaHQgKyAoMSA8PCAxNiksCisgICAgICAgICAg ICAgICAgICAgICAgICAgICBjdHgtPmNhcHMubWluQml0c3RyZWFtQnVmZmVyU2l6ZUFsaWdubWVu dCk7CisKKyAgICBlcnIgPSBmZl92a19nZXRfcG9vbGVkX2J1ZmZlcigmY3R4LT5zLCAmY3R4LT5i dWZfcG9vbCwgJnZwLT5wa3RfYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFZLX0JVRkZFUl9VU0FHRV9WSURFT19FTkNPREVfRFNUX0JJVF9LSFIsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJmN0eC0+cHJvZmlsZV9saXN0LCBtYXhfcGt0X3NpemUsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfTUVNT1JZX1BST1BFUlRZX0hPU1Rf VklTSUJMRV9CSVQgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZLX01FTU9S WV9QUk9QRVJUWV9IT1NUX0NBQ0hFRF9CSVQpOworICAgIGlmIChlcnIgPCAwKQorICAgICAgICBy ZXR1cm4gZXJyOworCisgICAgc2RfYnVmID0gKEZGVmtCdWZmZXIgKil2cC0+cGt0X2J1Zi0+ZGF0 YTsKKworICAgIC8qIFNldHVwIHJhdGUgY29udHJvbCAqLworICAgIGVyciA9IGluaXRfcGljX3Jj KGF2Y3R4LCBiYXNlX3BpYywgJnJjX2luZm8sICZyY19sYXllcik7CisgICAgaWYgKGVyciA8IDAp CisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICBxX2luZm8gPSAoVmtWaWRlb0VuY29kZVF1YWxp dHlMZXZlbEluZm9LSFIpIHsKKyAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfVklE RU9fRU5DT0RFX1FVQUxJVFlfTEVWRUxfSU5GT19LSFIsCisgICAgICAgIC5wTmV4dCA9ICZyY19p bmZvLAorICAgICAgICAucXVhbGl0eUxldmVsID0gY3R4LT5vcHRzLnF1YWxpdHksCisgICAgfTsK KyAgICBlbmNvZGVfY3RybCA9IChWa1ZpZGVvQ29kaW5nQ29udHJvbEluZm9LSFIpIHsKKyAgICAg ICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfVklERU9fQ09ESU5HX0NPTlRST0xfSU5GT19L SFIsCisgICAgICAgIC5wTmV4dCA9ICZxX2luZm8sCisgICAgICAgIC5mbGFncyA9IFZLX1ZJREVP X0NPRElOR19DT05UUk9MX0VOQ09ERV9RVUFMSVRZX0xFVkVMX0JJVF9LSFIgfAorICAgICAgICAg ICAgICAgICBWS19WSURFT19DT0RJTkdfQ09OVFJPTF9FTkNPREVfUkFURV9DT05UUk9MX0JJVF9L SFIgfAorICAgICAgICAgICAgICAgICBWS19WSURFT19DT0RJTkdfQ09OVFJPTF9SRVNFVF9CSVRf S0hSLAorICAgIH07CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGN0eC0+Y2Fwcy5tYXhEcGJT bG90czsgaSsrKSB7CisgICAgICAgIGlmIChjdHgtPnNsb3RzW2ldID09IE5VTEwpIHsKKyAgICAg ICAgICAgIHNsb3RfaW5kZXggPSBpOworICAgICAgICAgICAgY3R4LT5zbG90c1tpXSA9IGJhc2Vf cGljOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgYXZfYXNzZXJ0 MChzbG90X2luZGV4ID49IDApOworCisgICAgLyogQ3VycmVudCBwaWN0dXJlJ3MgcmVmIHNsb3Qg Ki8KKyAgICB2cC0+ZHBiX3JlcyA9IChWa1ZpZGVvUGljdHVyZVJlc291cmNlSW5mb0tIUikgewor ICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9WSURFT19QSUNUVVJFX1JFU09VUkNF X0lORk9fS0hSLAorICAgICAgICAucE5leHQgPSBOVUxMLAorICAgICAgICAuY29kZWRPZmZzZXQg PSB7IDAgfSwKKyAgICAgICAgLmNvZGVkRXh0ZW50ID0gKFZrRXh0ZW50MkQpeyBhdmN0eC0+d2lk dGgsIGF2Y3R4LT5oZWlnaHQgfSwKKyAgICAgICAgLmJhc2VBcnJheUxheWVyID0gY3R4LT5jb21t b24ubGF5ZXJlZF9kcGIgPyBzbG90X2luZGV4IDogMCwKKyAgICAgICAgLmltYWdlVmlld0JpbmRp bmcgPSB2cC0+ZHBiLnZpZXcsCisgICAgfTsKKworICAgIHZwLT5kcGJfc2xvdCA9IChWa1ZpZGVv UmVmZXJlbmNlU2xvdEluZm9LSFIpIHsKKyAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZ UEVfVklERU9fUkVGRVJFTkNFX1NMT1RfSU5GT19LSFIsCisgICAgICAgIC5wTmV4dCA9IE5VTEws ICAvLyBTZXQgbGF0ZXIKKyAgICAgICAgLnNsb3RJbmRleCA9IHNsb3RfaW5kZXgsCisgICAgICAg IC5wUGljdHVyZVJlc291cmNlID0gJnZwLT5kcGJfcmVzLAorICAgIH07CisKKyAgICBlbmNvZGVf aW5mbyA9IChWa1ZpZGVvRW5jb2RlSW5mb0tIUikgeworICAgICAgICAuc1R5cGUgPSBWS19TVFJV Q1RVUkVfVFlQRV9WSURFT19FTkNPREVfSU5GT19LSFIsCisgICAgICAgIC5wTmV4dCA9IE5VTEws IC8vIFNldCBsYXRlcgorICAgICAgICAuZmxhZ3MgPSAweDAsCisgICAgICAgIC5zcmNQaWN0dXJl UmVzb3VyY2UgPSAoVmtWaWRlb1BpY3R1cmVSZXNvdXJjZUluZm9LSFIpIHsKKyAgICAgICAgICAg IC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX1ZJREVPX1BJQ1RVUkVfUkVTT1VSQ0VfSU5GT19L SFIsCisgICAgICAgICAgICAucE5leHQgPSBOVUxMLAorICAgICAgICAgICAgLmNvZGVkT2Zmc2V0 ID0geyAwLCAwIH0sCisgICAgICAgICAgICAuY29kZWRFeHRlbnQgPSAoVmtFeHRlbnQyRCl7IGJh c2VfcGljLT5pbnB1dF9pbWFnZS0+d2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGJhc2VfcGljLT5pbnB1dF9pbWFnZS0+aGVpZ2h0IH0sCisgICAgICAgICAg ICAuYmFzZUFycmF5TGF5ZXIgPSAwLAorICAgICAgICAgICAgLmltYWdlVmlld0JpbmRpbmcgPSB2 cC0+aW4udmlldywKKyAgICAgICAgfSwKKyAgICAgICAgLnBTZXR1cFJlZmVyZW5jZVNsb3QgPSAm dnAtPmRwYl9zbG90LAorICAgICAgICAucmVmZXJlbmNlU2xvdENvdW50ID0gMCwKKyAgICAgICAg LnBSZWZlcmVuY2VTbG90cyA9IHJlZl9zbG90LAorICAgICAgICAuZHN0QnVmZmVyID0gc2RfYnVm LT5idWYsCisgICAgICAgIC5kc3RCdWZmZXJPZmZzZXQgPSAwLAorICAgICAgICAuZHN0QnVmZmVy UmFuZ2UgPSBzZF9idWYtPnNpemUsCisgICAgICAgIC5wcmVjZWRpbmdFeHRlcm5hbGx5RW5jb2Rl ZEJ5dGVzID0gMCwKKyAgICB9OworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBNQVhfUkVGRVJF TkNFX0xJU1RfTlVNOyBpKyspIHsKKyAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBiYXNlX3Bp Yy0+bmJfcmVmc1tpXTsgaisrKSB7CisgICAgICAgICAgICBGRkhXQmFzZUVuY29kZVBpY3R1cmUg KnJlZiA9IGJhc2VfcGljLT5yZWZzW2ldW2pdOworICAgICAgICAgICAgRkZWdWxrYW5FbmNvZGVQ aWN0dXJlICpydnAgPSByZWYtPnByaXY7CisgICAgICAgICAgICByZWZfc2xvdFtlbmNvZGVfaW5m by5yZWZlcmVuY2VTbG90Q291bnQrK10gPSBydnAtPmRwYl9zbG90OworICAgICAgICB9CisgICAg fQorCisgICAgLyogQ2FsbGluZyB2a0NtZEJlZ2luVmlkZW9Db2RpbmdLSFIgcmVxdWlyZXMgdG8g ZGVjbGFyZSBhbGwgcmVmZXJlbmNlcworICAgICAqIGJlaW5nIGVuYWJsZWQgdXBmcm9udCwgaW5j bHVkaW5nIHRoZSBjdXJyZW50IGZyYW1lJ3Mgb3V0cHV0IHJlZi4gKi8KKyAgICByZWZfc2xvdFtl bmNvZGVfaW5mby5yZWZlcmVuY2VTbG90Q291bnRdID0gdnAtPmRwYl9zbG90OworICAgIHJlZl9z bG90W2VuY29kZV9pbmZvLnJlZmVyZW5jZVNsb3RDb3VudF0uc2xvdEluZGV4ID0gLTE7CisKKyAg ICAvKiBTZXR1cCBwaWN0dXJlIHBhcmFtZXRlcnMgKi8KKyAgICBlcnIgPSBjdHgtPmNvZGVjLT5p bml0X3BpY19wYXJhbXMoYXZjdHgsIGJhc2VfcGljLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAmZW5jb2RlX2luZm8pOworICAgIGlmIChlcnIgPCAwKQorICAgICAgICBy ZXR1cm4gZXJyOworCisgICAgZW5jb2RlX3N0YXJ0ID0gKFZrVmlkZW9CZWdpbkNvZGluZ0luZm9L SFIpIHsKKyAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfVklERU9fQkVHSU5fQ09E SU5HX0lORk9fS0hSLAorICAgICAgICAucE5leHQgPSAhYmFzZV9waWMtPmZvcmNlX2lkciA/ICZy Y19pbmZvIDogTlVMTCwKKyAgICAgICAgLnZpZGVvU2Vzc2lvbiA9IGN0eC0+Y29tbW9uLnNlc3Np b24sCisgICAgICAgIC52aWRlb1Nlc3Npb25QYXJhbWV0ZXJzID0gY3R4LT5zZXNzaW9uX3BhcmFt cywKKyAgICAgICAgLnJlZmVyZW5jZVNsb3RDb3VudCA9IGVuY29kZV9pbmZvLnJlZmVyZW5jZVNs b3RDb3VudCArIDEsCisgICAgICAgIC5wUmVmZXJlbmNlU2xvdHMgPSByZWZfc2xvdCwKKyAgICB9 OworCisgICAgLyogV3JpdGUgaGVhZGVyICovCisgICAgaWYgKGJhc2VfcGljLT50eXBlID09IEZG X0hXX1BJQ1RVUkVfVFlQRV9JRFIpIHsKKyAgICAgICAgdWludDhfdCAqaGRyX2RzdCA9IHNkX2J1 Zi0+bWFwcGVkX21lbSArIGVuY29kZV9pbmZvLmRzdEJ1ZmZlck9mZnNldDsKKyAgICAgICAgc2l6 ZV90IGRhdGFfc2l6ZSA9IGVuY29kZV9pbmZvLmRzdEJ1ZmZlclJhbmdlOworICAgICAgICBlcnIg PSBjdHgtPmNvZGVjLT53cml0ZV9zZXF1ZW5jZV9oZWFkZXJzKGF2Y3R4LCBiYXNlX3BpYywgaGRy X2RzdCwgJmRhdGFfc2l6ZSk7CisgICAgICAgIGlmIChlcnIgPCAwKQorICAgICAgICAgICAgZ290 byBmYWlsOworICAgICAgICBlbmNvZGVfaW5mby5kc3RCdWZmZXJPZmZzZXQgKz0gZGF0YV9zaXpl OworICAgICAgICBlbmNvZGVfaW5mby5kc3RCdWZmZXJSYW5nZSAgLT0gZGF0YV9zaXplOworICAg IH0KKworICAgIC8qIFdyaXRlIGV4dHJhIHVuaXRzICovCisgICAgaWYgKGN0eC0+Y29kZWMtPndy aXRlX2V4dHJhX2hlYWRlcnMpIHsKKyAgICAgICAgdWludDhfdCAqaGRyX2RzdCA9IHNkX2J1Zi0+ bWFwcGVkX21lbSArIGVuY29kZV9pbmZvLmRzdEJ1ZmZlck9mZnNldDsKKyAgICAgICAgc2l6ZV90 IGRhdGFfc2l6ZSA9IGVuY29kZV9pbmZvLmRzdEJ1ZmZlclJhbmdlOworICAgICAgICBlcnIgPSBj dHgtPmNvZGVjLT53cml0ZV9leHRyYV9oZWFkZXJzKGF2Y3R4LCBiYXNlX3BpYywgaGRyX2RzdCwg JmRhdGFfc2l6ZSk7CisgICAgICAgIGlmIChlcnIgPCAwKQorICAgICAgICAgICAgZ290byBmYWls OworICAgICAgICBlbmNvZGVfaW5mby5kc3RCdWZmZXJPZmZzZXQgKz0gZGF0YV9zaXplOworICAg ICAgICBlbmNvZGVfaW5mby5kc3RCdWZmZXJSYW5nZSAgLT0gZGF0YV9zaXplOworICAgIH0KKwor ICAgIC8qIEFsaWduIGJ1ZmZlciBvZmZzZXQgdG8gdGhlIHJlcXVpcmVkIHZhbHVlIHdpdGggZmls bGVyIHVuaXRzICovCisgICAgaWYgKGN0eC0+Y29kZWMtPndyaXRlX2ZpbGxlcikgeworICAgICAg ICB1aW50OF90ICpoZHJfZHN0ID0gc2RfYnVmLT5tYXBwZWRfbWVtICsgZW5jb2RlX2luZm8uZHN0 QnVmZmVyT2Zmc2V0OworICAgICAgICBzaXplX3QgZGF0YV9zaXplID0gZW5jb2RlX2luZm8uZHN0 QnVmZmVyUmFuZ2U7CisKKyAgICAgICAgdWludDMyX3Qgb2Zmc2V0ID0gZW5jb2RlX2luZm8uZHN0 QnVmZmVyT2Zmc2V0OworICAgICAgICBzaXplX3Qgb2Zmc2V0X2FsaWduID0gY3R4LT5jYXBzLm1p bkJpdHN0cmVhbUJ1ZmZlck9mZnNldEFsaWdubWVudDsKKworICAgICAgICB1aW50MzJfdCBmaWxs ZXJfZGF0YSA9IEZGQUxJR04ob2Zmc2V0LCBvZmZzZXRfYWxpZ24pIC0gb2Zmc2V0OworCisgICAg ICAgIGlmIChmaWxsZXJfZGF0YSkgeworICAgICAgICAgICAgd2hpbGUgKGZpbGxlcl9kYXRhIDwg Y3R4LT5jb2RlYy0+ZmlsbGVyX2hlYWRlcl9zaXplKQorICAgICAgICAgICAgICAgIGZpbGxlcl9k YXRhICs9IG9mZnNldF9hbGlnbjsKKworICAgICAgICAgICAgZmlsbGVyX2RhdGEgLT0gY3R4LT5j b2RlYy0+ZmlsbGVyX2hlYWRlcl9zaXplOworCisgICAgICAgICAgICBlcnIgPSBjdHgtPmNvZGVj LT53cml0ZV9maWxsZXIoYXZjdHgsIGZpbGxlcl9kYXRhLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGhkcl9kc3QsICZkYXRhX3NpemUpOworICAgICAgICAgICAg aWYgKGVyciA8IDApCisgICAgICAgICAgICAgICAgZ290byBmYWlsOworCisgICAgICAgICAgICBl bmNvZGVfaW5mby5kc3RCdWZmZXJPZmZzZXQgKz0gZGF0YV9zaXplOworICAgICAgICAgICAgZW5j b2RlX2luZm8uZHN0QnVmZmVyUmFuZ2UgIC09IGRhdGFfc2l6ZTsKKyAgICAgICAgfQorICAgIH0K KworICAgIHZwLT5zbGljZXNfb2Zmc2V0ID0gZW5jb2RlX2luZm8uZHN0QnVmZmVyT2Zmc2V0Owor CisgICAgLyogQWxpZ24gYnVmZmVyIHNpemUgdG8gdGhlIG5lYXJlc3QgbG93ZXIgYWxpZ25tZW50 IHJlcXVpcmVtZW50LiAqLworICAgIGVuY29kZV9pbmZvLmRzdEJ1ZmZlclJhbmdlIC09IHNpemVf YWxpZ247CisgICAgZW5jb2RlX2luZm8uZHN0QnVmZmVyUmFuZ2UgPSBGRkFMSUdOKGVuY29kZV9p bmZvLmRzdEJ1ZmZlclJhbmdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzaXplX2FsaWduKTsKKworICAgIC8qIFN0YXJ0IGNvbW1hbmQgYnVmZmVyIHJlY29yZGlu ZyAqLworICAgIGV4ZWMgPSB2cC0+ZXhlYyA9IGZmX3ZrX2V4ZWNfZ2V0KCZjdHgtPnMsICZjdHgt PmVuY19wb29sKTsKKyAgICBmZl92a19leGVjX3N0YXJ0KCZjdHgtPnMsIGV4ZWMpOworICAgIGNt ZF9idWYgPSBleGVjLT5idWY7CisKKyAgICAvKiBPdXRwdXQgcGFja2V0IGJ1ZmZlciAqLworICAg IGVyciA9IGZmX3ZrX2V4ZWNfYWRkX2RlcF9idWYoJmN0eC0+cywgZXhlYywgJnZwLT5wa3RfYnVm LCAxLCAxKTsKKyAgICBpZiAoZXJyIDwgMCkKKyAgICAgICAgZ290byBmYWlsOworCisgICAgLyog U291cmNlIGltYWdlICovCisgICAgZXJyID0gZmZfdmtfZXhlY19hZGRfZGVwX2ZyYW1lKCZjdHgt PnMsIGV4ZWMsIHNyYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfUElQ RUxJTkVfU1RBR0VfMl9BTExfQ09NTUFORFNfQklULAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBWS19QSVBFTElORV9TVEFHRV8yX1ZJREVPX0VOQ09ERV9CSVRfS0hSKTsKKyAg ICBpZiAoZXJyIDwgMCkKKyAgICAgICAgZ290byBmYWlsOworCisgICAgLyogU291cmNlIGltYWdl IGxheW91dCBjb252ZXJzaW9uICovCisgICAgaW1nX2JhcltuYl9pbWdfYmFyXSA9IChWa0ltYWdl TWVtb3J5QmFycmllcjIpIHsKKyAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfSU1B R0VfTUVNT1JZX0JBUlJJRVJfMiwKKyAgICAgICAgLnBOZXh0ID0gTlVMTCwKKyAgICAgICAgLnNy Y1N0YWdlTWFzayA9IFZLX1BJUEVMSU5FX1NUQUdFXzJfQUxMX0NPTU1BTkRTX0JJVCwKKyAgICAg ICAgLnNyY0FjY2Vzc01hc2sgPSB2a2YtPmFjY2Vzc1swXSwKKyAgICAgICAgLmRzdFN0YWdlTWFz ayA9IFZLX1BJUEVMSU5FX1NUQUdFXzJfVklERU9fRU5DT0RFX0JJVF9LSFIsCisgICAgICAgIC5k c3RBY2Nlc3NNYXNrID0gVktfQUNDRVNTXzJfVklERU9fRU5DT0RFX1JFQURfQklUX0tIUiwKKyAg ICAgICAgLm9sZExheW91dCA9IHZrZi0+bGF5b3V0WzBdLAorICAgICAgICAubmV3TGF5b3V0ID0g VktfSU1BR0VfTEFZT1VUX1ZJREVPX0VOQ09ERV9TUkNfS0hSLAorICAgICAgICAuc3JjUXVldWVG YW1pbHlJbmRleCA9IHZrZi0+cXVldWVfZmFtaWx5WzBdLAorICAgICAgICAuZHN0UXVldWVGYW1p bHlJbmRleCA9IFZLX1FVRVVFX0ZBTUlMWV9JR05PUkVELAorICAgICAgICAuaW1hZ2UgPSB2a2Yt PmltZ1swXSwKKyAgICAgICAgLnN1YnJlc291cmNlUmFuZ2UgPSAoVmtJbWFnZVN1YnJlc291cmNl UmFuZ2UpIHsKKyAgICAgICAgICAgIC5hc3BlY3RNYXNrID0gdnAtPmluLmFzcGVjdCwKKyAgICAg ICAgICAgIC5sYXllckNvdW50ID0gMSwKKyAgICAgICAgICAgIC5sZXZlbENvdW50ID0gMSwKKyAg ICAgICAgfSwKKyAgICB9OworICAgIGZmX3ZrX2V4ZWNfdXBkYXRlX2ZyYW1lKCZjdHgtPnMsIGV4 ZWMsIHNyYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaW1nX2JhcltuYl9pbWdfYmFy XSwgJm5iX2ltZ19iYXIpOworCisgICAgaWYgKCFjdHgtPmNvbW1vbi5sYXllcmVkX2RwYikgewor ICAgICAgICAvKiBTb3VyY2UgaW1hZ2UncyByZWYgc2xvdC4KKyAgICAgICAgICogTm8gbmVlZCB0 byBkbyBhIGxheW91dCBjb252ZXJzaW9uLCBzaW5jZSB0aGUgZnJhbWVzIHdoaWNoIGFyZSBhbGxv Y2F0ZWQKKyAgICAgICAgICogd2l0aCBhIERQQiB1c2FnZSBhcmUgYXV0b21hdGljYWxseSBjb252 ZXJ0ZWQuICovCisgICAgICAgIGVyciA9IGZmX3ZrX2V4ZWNfYWRkX2RlcF9mcmFtZSgmY3R4LT5z LCBleGVjLCBiYXNlX3BpYy0+cmVjb25faW1hZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBWS19QSVBFTElORV9TVEFHRV8yX0FMTF9DT01NQU5EU19CSVQsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19QSVBFTElORV9TVEFHRV8yX1ZJ REVPX0VOQ09ERV9CSVRfS0hSKTsKKyAgICAgICAgaWYgKGVyciA8IDApCisgICAgICAgICAgICBy ZXR1cm4gZXJyOworCisgICAgICAgIC8qIEFsbCByZWZlcmVuY2VzICovCisgICAgICAgIGZvciAo aW50IGkgPSAwOyBpIDwgTUFYX1JFRkVSRU5DRV9MSVNUX05VTTsgaSsrKSB7CisgICAgICAgICAg ICBmb3IgKGludCBqID0gMDsgaiA8IGJhc2VfcGljLT5uYl9yZWZzW2ldOyBqKyspIHsKKyAgICAg ICAgICAgICAgICBGRkhXQmFzZUVuY29kZVBpY3R1cmUgKnJlZiA9IGJhc2VfcGljLT5yZWZzW2ld W2pdOworICAgICAgICAgICAgICAgIGVyciA9IGZmX3ZrX2V4ZWNfYWRkX2RlcF9mcmFtZSgmY3R4 LT5zLCBleGVjLCByZWYtPnJlY29uX2ltYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBWS19QSVBFTElORV9TVEFHRV8yX0FMTF9DT01NQU5EU19CSVQs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZLX1BJUEVM SU5FX1NUQUdFXzJfVklERU9fRU5DT0RFX0JJVF9LSFIpOworICAgICAgICAgICAgICAgIGlmIChl cnIgPCAwKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyOworICAgICAgICAgICAgfQor ICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZXJyID0gZmZfdmtfZXhlY19hZGRfZGVw X2ZyYW1lKCZjdHgtPnMsIGV4ZWMsIGN0eC0+Y29tbW9uLmxheWVyZWRfZnJhbWUsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19QSVBFTElORV9TVEFHRV8yX1ZJREVP X0VOQ09ERV9CSVRfS0hSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg VktfUElQRUxJTkVfU1RBR0VfMl9WSURFT19FTkNPREVfQklUX0tIUik7CisgICAgICAgIGlmIChl cnIgPCAwKQorICAgICAgICAgICAgcmV0dXJuIGVycjsKKyAgICB9CisKKyAgICAvKiBDaGFuZ2Ug aW1hZ2UgbGF5b3V0ICovCisgICAgdmstPkNtZFBpcGVsaW5lQmFycmllcjIoY21kX2J1ZiwgJihW a0RlcGVuZGVuY3lJbmZvKSB7CisgICAgICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQ RV9ERVBFTkRFTkNZX0lORk8sCisgICAgICAgICAgICAucEltYWdlTWVtb3J5QmFycmllcnMgPSBp bWdfYmFyLAorICAgICAgICAgICAgLmltYWdlTWVtb3J5QmFycmllckNvdW50ID0gbmJfaW1nX2Jh ciwKKyAgICAgICAgfSk7CisKKyAgICAvKiBTdGFydCwgdXNlIHBhcmFtZXRlcnMgKi8KKyAgICB2 ay0+Q21kQmVnaW5WaWRlb0NvZGluZ0tIUihjbWRfYnVmLCAmZW5jb2RlX3N0YXJ0KTsKKworICAg IC8qIFNlbmQgY29udHJvbCBkYXRhICovCisgICAgaWYgKCFjdHgtPnNlc3Npb25fcmVzZXQpIHsK KyAgICAgICAgdmstPkNtZENvbnRyb2xWaWRlb0NvZGluZ0tIUihjbWRfYnVmLCAmZW5jb2RlX2N0 cmwpOworICAgICAgICBjdHgtPnNlc3Npb25fcmVzZXQrKzsKKyAgICB9CisKKyAgICAvKiBFbmNv ZGUgKi8KKyAgICB2ay0+Q21kQmVnaW5RdWVyeShjbWRfYnVmLCBjdHgtPmVuY19wb29sLnF1ZXJ5 X3Bvb2wsIGV4ZWMtPnF1ZXJ5X2lkeCArIDAsIDApOworICAgIHZrLT5DbWRFbmNvZGVWaWRlb0tI UihjbWRfYnVmLCAmZW5jb2RlX2luZm8pOworICAgIHZrLT5DbWRFbmRRdWVyeShjbWRfYnVmLCBj dHgtPmVuY19wb29sLnF1ZXJ5X3Bvb2wsIGV4ZWMtPnF1ZXJ5X2lkeCArIDApOworCisgICAgLyog RW5kIGVuY29kaW5nICovCisgICAgdmstPkNtZEVuZFZpZGVvQ29kaW5nS0hSKGNtZF9idWYsICZl bmNvZGVfZW5kKTsKKworICAgIC8qIEVuZCByZWNvcmRpbmcgYW5kIHN1Ym1pdCBmb3IgZXhlY3V0 aW9uICovCisgICAgZXJyID0gZmZfdmtfZXhlY19zdWJtaXQoJmN0eC0+cywgdnAtPmV4ZWMpOwor ICAgIGlmIChlcnIgPCAwKQorICAgICAgICBnb3RvIGZhaWw7CisKKyAgICAvKiBXZSBkb24ndCBu ZWVkIHRvIGtlZXAgdGhlIGlucHV0IGltYWdlIGFueSBsb25nZXIsIGl0cyBhbHJlYWR5IHJlZidk ICovCisgICAgYXZfZnJhbWVfZnJlZSgmYmFzZV9waWMtPmlucHV0X2ltYWdlKTsKKworICAgIHJl dHVybiAwOworCitmYWlsOgorICAgIHJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIHZ1bGth bl9lbmNvZGVfd2FpdChBVkNvZGVjQ29udGV4dCAqYXZjdHgsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgRkZIV0Jhc2VFbmNvZGVQaWN0dXJlICpiYXNlX3BpYykKK3sKKyAgICBGRlZ1 bGthbkVuY29kZUNvbnRleHQgKmN0eCA9IGF2Y3R4LT5wcml2X2RhdGE7CisgICAgRkZWdWxrYW5F bmNvZGVQaWN0dXJlICp2cCA9IGJhc2VfcGljLT5wcml2OworCisgICAgYXZfYXNzZXJ0MChiYXNl X3BpYy0+ZW5jb2RlX2lzc3VlZCk7CisKKyAgICBpZiAoYmFzZV9waWMtPmVuY29kZV9jb21wbGV0 ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZmZfdmtfZXhlY193YWl0KCZjdHgtPnMsIHZwLT5l eGVjKTsKKyAgICBiYXNlX3BpYy0+ZW5jb2RlX2NvbXBsZXRlID0gMTsKK30KKworc3RhdGljIGlu dCB2dWxrYW5fZW5jb2RlX291dHB1dChBVkNvZGVjQ29udGV4dCAqYXZjdHgsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEZGSFdCYXNlRW5jb2RlUGljdHVyZSAqYmFzZV9waWMsIEFW UGFja2V0ICpwa3QpCit7CisgICAgVmtSZXN1bHQgcmV0OworICAgIEZGVnVsa2FuRW5jb2RlUGlj dHVyZSAqdnAgPSBiYXNlX3BpYy0+cHJpdjsKKyAgICBGRlZ1bGthbkVuY29kZUNvbnRleHQgKmN0 eCA9IGF2Y3R4LT5wcml2X2RhdGE7CisgICAgRkZWa0J1ZmZlciAqc2RfYnVmID0gKEZGVmtCdWZm ZXIgKil2cC0+cGt0X2J1Zi0+ZGF0YTsKKyAgICB1aW50MzJfdCAqcXVlcnlfZGF0YTsKKworICAg IHZ1bGthbl9lbmNvZGVfd2FpdChhdmN0eCwgYmFzZV9waWMpOworCisgICAgcmV0ID0gZmZfdmtf ZXhlY19nZXRfcXVlcnkoJmN0eC0+cywgdnAtPmV4ZWMsICh2b2lkICoqKSZxdWVyeV9kYXRhLCAw KTsKKyAgICBpZiAocmV0ID09IFZLX05PVF9SRUFEWSkgeworICAgICAgICBhdl9sb2coYXZjdHgs IEFWX0xPR19FUlJPUiwgIlVuYWJsZSB0byBwZXJmb3JtIHF1ZXJ5OiAlcyFcbiIsCisgICAgICAg ICAgICAgICBmZl92a19yZXQyc3RyKHJldCkpOworICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5W QUwpOworICAgIH0KKworICAgIGlmIChyZXQgIT0gVktfTk9UX1JFQURZICYmIHJldCAhPSBWS19T VUNDRVNTKSB7CisgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiVW5hYmxlIHRv IHBlcmZvcm0gcXVlcnk6ICVzIVxuIiwKKyAgICAgICAgICAgICAgIGZmX3ZrX3JldDJzdHIocmV0 KSk7CisgICAgICAgIHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOworICAgIH0KKworICAgIGlmIChx dWVyeV9kYXRhWzJdICE9IFZLX1FVRVJZX1JFU1VMVF9TVEFUVVNfQ09NUExFVEVfS0hSKSB7Cisg ICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiVW5hYmxlIHRvIGVuY29kZTogJXVc biIsIHF1ZXJ5X2RhdGFbMl0pOworICAgICAgICByZXR1cm4gQVZFUlJPUl9FWFRFUk5BTDsKKyAg ICB9CisKKyAgICAvKiBJbnZhbGlkYXRlIGJ1ZmZlciBpZiBuZWVkZWQgKi8KKyAgICBpZiAoIShz ZF9idWYtPmZsYWdzICYgVktfTUVNT1JZX1BST1BFUlRZX0hPU1RfQ09IRVJFTlRfQklUKSkgewor ICAgICAgICBGRlZ1bGthbkZ1bmN0aW9ucyAqdmsgPSAmY3R4LT5zLnZrZm47CisgICAgICAgIFZr TWFwcGVkTWVtb3J5UmFuZ2UgaW52YWxpZGF0ZV9idWY7CisKKyAgICAgICAgaW50IG9mZnMgPSB2 cC0+c2xpY2VzX29mZnNldDsKKyAgICAgICAgLyogSWYgdGhlIG5vbi1jb2hlcmVudCBhbGlnbm1l bnQgaXMgZ3JlYXRlciB0aGFuIHRoZSBiaXRzdHJlYW0gYnVmZmVyCisgICAgICAgICAqIG9mZnNl dCdzIGFsaWdubWVudCwgYW5kIHRoZSBvZmZzIHZhbHVlIGlzIG5vdCBhbGlnbmVkIGFscmVhZHks CisgICAgICAgICAqIGFsaWduIGl0IHRvIHRoZSBwcmV2aW91cyBhbGlnbm1lbnQgcG9pbnQuICov CisgICAgICAgIGlmIChjdHgtPnMucHJvcHMucHJvcGVydGllcy5saW1pdHMubm9uQ29oZXJlbnRB dG9tU2l6ZSA+CisgICAgICAgICAgICBjdHgtPmNhcHMubWluQml0c3RyZWFtQnVmZmVyT2Zmc2V0 QWxpZ25tZW50ICYmIG9mZnMgJiYKKyAgICAgICAgICAgIChGRkFMSUdOKG9mZnMsIGN0eC0+cy5w cm9wcy5wcm9wZXJ0aWVzLmxpbWl0cy5ub25Db2hlcmVudEF0b21TaXplKSAhPSBvZmZzKSkgewor ICAgICAgICAgICAgb2ZmcyAtPSBjdHgtPnMucHJvcHMucHJvcGVydGllcy5saW1pdHMubm9uQ29o ZXJlbnRBdG9tU2l6ZTsKKyAgICAgICAgICAgIG9mZnMgPSBGRkFMSUdOKEZGTUFYKG9mZnMsIDAp LCBjdHgtPnMucHJvcHMucHJvcGVydGllcy5saW1pdHMubm9uQ29oZXJlbnRBdG9tU2l6ZSk7Cisg ICAgICAgIH0KKworICAgICAgICBpbnZhbGlkYXRlX2J1ZiA9IChWa01hcHBlZE1lbW9yeVJhbmdl KSB7CisgICAgICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9NQVBQRURfTUVNT1JZ X1JBTkdFLAorICAgICAgICAgICAgLm1lbW9yeSA9IHNkX2J1Zi0+bWVtLAorICAgICAgICAgICAg Lm9mZnNldCA9IG9mZnMsCisgICAgICAgICAgICAuc2l6ZSA9IFZLX1dIT0xFX1NJWkUsCisgICAg ICAgIH07CisKKyAgICAgICAgdmstPkZsdXNoTWFwcGVkTWVtb3J5UmFuZ2VzKGN0eC0+cy5od2N0 eC0+YWN0X2RldiwgMSwgJmludmFsaWRhdGVfYnVmKTsKKyAgICB9CisKKyAgICBwa3QtPmRhdGEg PSBzZF9idWYtPm1hcHBlZF9tZW07CisgICAgcGt0LT5zaXplID0gdnAtPnNsaWNlc19vZmZzZXQg KyAvKiBiYXNlIG9mZnNldCAqLworICAgICAgICAgICAgICAgIHF1ZXJ5X2RhdGFbMF0gICAgICAg Lyogc2Vjb25kYXJ5IG9mZnNldCAqLyArCisgICAgICAgICAgICAgICAgcXVlcnlfZGF0YVsxXSAg ICAgICAvKiBzaXplICovOworCisgICAgLyogTW92ZSByZWZlcmVuY2UgKi8KKyAgICBwa3QtPmJ1 ZiA9IHZwLT5wa3RfYnVmOworICAgIHZwLT5wa3RfYnVmID0gTlVMTDsKKworICAgIGF2X2xvZyhh dmN0eCwgQVZfTE9HX0RFQlVHLCAiRnJhbWUgJSJQUklkNjQiLyUiUFJJZDY0ICIgZW5jb2RlZFxu IiwKKyAgICAgICAgICAgYmFzZV9waWMtPmRpc3BsYXlfb3JkZXIsIGJhc2VfcGljLT5lbmNvZGVf b3JkZXIpOworCisgICAgcmV0dXJuIGZmX2h3X2Jhc2VfZW5jb2RlX3NldF9vdXRwdXRfcHJvcGVy dHkoJmN0eC0+YmFzZSwgYXZjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgYmFzZV9waWMsIHBrdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjdHgtPmNvZGVjLT5mbGFncyAmIFZLX0VOQ19GTEFHX05P X0RFTEFZKTsKK30KKworc3RhdGljIGNvbnN0IEZGSFdFbmNvZGVQaWN0dXJlT3BlcmF0aW9uIHZ1 bGthbl9iYXNlX2VuY29kZV9vcHMgPSB7CisgICAgLnByaXZfc2l6ZSA9IHNpemVvZihGRlZ1bGth bkVuY29kZVBpY3R1cmUpLAorICAgIC5pbml0ICAgPSAmdnVsa2FuX2VuY29kZV9pbml0LAorICAg IC5pc3N1ZSAgPSAmdnVsa2FuX2VuY29kZV9pc3N1ZSwKKyAgICAub3V0cHV0ID0gJnZ1bGthbl9l bmNvZGVfb3V0cHV0LAorICAgIC5mcmVlICAgPSAmdnVsa2FuX2VuY29kZV9mcmVlLAorfTsKKwor aW50IGZmX3Z1bGthbl9lbmNvZGVfcmVjZWl2ZV9wYWNrZXQoQVZDb2RlY0NvbnRleHQgKmF2Y3R4 LCBBVlBhY2tldCAqcGt0KQoreworICAgIEZGVnVsa2FuRW5jb2RlQ29udGV4dCAqY3R4ID0gYXZj dHgtPnByaXZfZGF0YTsKKyAgICByZXR1cm4gZmZfaHdfYmFzZV9lbmNvZGVfcmVjZWl2ZV9wYWNr ZXQoJmN0eC0+YmFzZSwgYXZjdHgsIHBrdCk7Cit9CisKK3N0YXRpYyBpbnQgdnVsa2FuX2VuY29k ZV9jcmVhdGVfZHBiKEFWQ29kZWNDb250ZXh0ICphdmN0eCwgRkZWdWxrYW5FbmNvZGVDb250ZXh0 ICpjdHgpCit7CisgICAgaW50IGVycjsKKyAgICBGRkhXQmFzZUVuY29kZUNvbnRleHQgKmJhc2Vf Y3R4ID0gJmN0eC0+YmFzZTsKKyAgICBBVlZ1bGthbkZyYW1lc0NvbnRleHQgKmh3ZmM7CisKKyAg ICBlbnVtIEFWUGl4ZWxGb3JtYXQgZHBiX2Zvcm1hdDsKKyAgICBlcnIgPSBmZl9od19iYXNlX2dl dF9yZWNvbl9mb3JtYXQoYmFzZV9jdHgsIE5VTEwsICZkcGJfZm9ybWF0KTsKKyAgICBpZiAoZXJy IDwgMCkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIGJhc2VfY3R4LT5yZWNvbl9mcmFtZXNf cmVmID0gYXZfaHdmcmFtZV9jdHhfYWxsb2MoYmFzZV9jdHgtPmRldmljZV9yZWYpOworICAgIGlm ICghYmFzZV9jdHgtPnJlY29uX2ZyYW1lc19yZWYpCisgICAgICAgIHJldHVybiBBVkVSUk9SKEVO T01FTSk7CisKKyAgICBiYXNlX2N0eC0+cmVjb25fZnJhbWVzID0gKEFWSFdGcmFtZXNDb250ZXh0 ICopYmFzZV9jdHgtPnJlY29uX2ZyYW1lc19yZWYtPmRhdGE7CisgICAgaHdmYyA9IChBVlZ1bGth bkZyYW1lc0NvbnRleHQgKiliYXNlX2N0eC0+cmVjb25fZnJhbWVzLT5od2N0eDsKKworICAgIGJh c2VfY3R4LT5yZWNvbl9mcmFtZXMtPmZvcm1hdCAgICA9IEFWX1BJWF9GTVRfVlVMS0FOOworICAg IGJhc2VfY3R4LT5yZWNvbl9mcmFtZXMtPnN3X2Zvcm1hdCA9IGRwYl9mb3JtYXQ7CisgICAgYmFz ZV9jdHgtPnJlY29uX2ZyYW1lcy0+d2lkdGggICAgID0gYXZjdHgtPndpZHRoOworICAgIGJhc2Vf Y3R4LT5yZWNvbl9mcmFtZXMtPmhlaWdodCAgICA9IGF2Y3R4LT5oZWlnaHQ7CisKKyAgICBod2Zj LT5mb3JtYXRbMF0gICAgPSBjdHgtPnBpY19mb3JtYXQ7CisgICAgaHdmYy0+Y3JlYXRlX3BuZXh0 ID0gJmN0eC0+cHJvZmlsZV9saXN0OworICAgIGh3ZmMtPnRpbGluZyAgICAgICA9IFZLX0lNQUdF X1RJTElOR19PUFRJTUFMOworICAgIGh3ZmMtPnVzYWdlICAgICAgICA9IFZLX0lNQUdFX1VTQUdF X1ZJREVPX0VOQ09ERV9EUEJfQklUX0tIUjsKKworICAgIGlmIChjdHgtPmNvbW1vbi5sYXllcmVk X2RwYikKKyAgICAgICAgaHdmYy0+bmJfbGF5ZXJzID0gY3R4LT5jYXBzLm1heERwYlNsb3RzOwor CisgICAgZXJyID0gYXZfaHdmcmFtZV9jdHhfaW5pdChiYXNlX2N0eC0+cmVjb25fZnJhbWVzX3Jl Zik7CisgICAgaWYgKGVyciA8IDApIHsKKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJS T1IsICJGYWlsZWQgdG8gaW5pdGlhbGlzZSBEUEIgZnJhbWUgY29udGV4dDogJXNcbiIsCisgICAg ICAgICAgICAgICBhdl9lcnIyc3RyKGVycikpOworICAgICAgICByZXR1cm4gZXJyOworICAgIH0K KworICAgIGlmIChjdHgtPmNvbW1vbi5sYXllcmVkX2RwYikgeworICAgICAgICBjdHgtPmNvbW1v bi5sYXllcmVkX2ZyYW1lID0gYXZfZnJhbWVfYWxsb2MoKTsKKyAgICAgICAgaWYgKCFjdHgtPmNv bW1vbi5sYXllcmVkX2ZyYW1lKQorICAgICAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsK KworICAgICAgICBlcnIgPSBhdl9od2ZyYW1lX2dldF9idWZmZXIoYmFzZV9jdHgtPnJlY29uX2Zy YW1lc19yZWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgtPmNvbW1v bi5sYXllcmVkX2ZyYW1lLCAwKTsKKyAgICAgICAgaWYgKGVyciA8IDApCisgICAgICAgICAgICBy ZXR1cm4gQVZFUlJPUihFTk9NRU0pOworCisgICAgICAgIGVyciA9IGZmX3ZrX2NyZWF0ZV92aWV3 KCZjdHgtPnMsICZjdHgtPmNvbW1vbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg JmN0eC0+Y29tbW9uLmxheWVyZWRfdmlldywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJmN0eC0+Y29tbW9uLmxheWVyZWRfYXNwZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAoQVZWa0ZyYW1lICopY3R4LT5jb21tb24ubGF5ZXJlZF9mcmFtZS0+ZGF0YVswXSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHdmYy0+Zm9ybWF0WzBdLCAxKTsKKyAg ICAgICAgaWYgKGVyciA8IDApCisgICAgICAgICAgICByZXR1cm4gZXJyOworCisgICAgICAgIGF2 X2J1ZmZlcl91bnJlZigmYmFzZV9jdHgtPnJlY29uX2ZyYW1lc19yZWYpOworICAgIH0KKworICAg IHJldHVybiAwOworfQorCitzdGF0aWMgYXZfY29sZCBpbnQgaW5pdF9yYyhBVkNvZGVjQ29udGV4 dCAqYXZjdHgsIEZGVnVsa2FuRW5jb2RlQ29udGV4dCAqY3R4KQoreworICAgIGlmIChjdHgtPm9w dHMucXApIHsKKyAgICAgICAgY3R4LT5leHBsaWNpdF9xcCA9IGN0eC0+b3B0cy5xcDsKKyAgICB9 IGVsc2UgaWYgKGF2Y3R4LT5nbG9iYWxfcXVhbGl0eSA+IDApIHsKKyAgICAgICAgaWYgKGF2Y3R4 LT5mbGFncyAmIEFWX0NPREVDX0ZMQUdfUVNDQUxFKQorICAgICAgICAgICAgY3R4LT5leHBsaWNp dF9xcCA9IGF2Y3R4LT5nbG9iYWxfcXVhbGl0eSAvIEZGX1FQMkxBTUJEQTsKKyAgICAgICAgZWxz ZQorICAgICAgICAgICAgY3R4LT5leHBsaWNpdF9xcCA9IGF2Y3R4LT5nbG9iYWxfcXVhbGl0eTsK KyAgICB9CisKKyAgICBpZiAoY3R4LT5vcHRzLnJjX21vZGUgPT0gRkZfVktfUkNfTU9ERV9BVVRP KSB7CisgICAgICAgIGlmIChjdHgtPmV4cGxpY2l0X3FwID49IDApIHsKKyAgICAgICAgICAgIGN0 eC0+b3B0cy5yY19tb2RlID0gVktfVklERU9fRU5DT0RFX1JBVEVfQ09OVFJPTF9NT0RFX0RJU0FC TEVEX0JJVF9LSFI7CisgICAgICAgIH0gZWxzZSBpZiAoYXZjdHgtPmdsb2JhbF9xdWFsaXR5ID4g MCkgeworICAgICAgICAgICAgaWYgKGF2Y3R4LT5mbGFncyAmIEFWX0NPREVDX0ZMQUdfUVNDQUxF KQorICAgICAgICAgICAgICAgIGN0eC0+ZXhwbGljaXRfcXAgPSBhdmN0eC0+Z2xvYmFsX3F1YWxp dHkgLyBGRl9RUDJMQU1CREE7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgY3R4 LT5leHBsaWNpdF9xcCA9IGF2Y3R4LT5nbG9iYWxfcXVhbGl0eTsKKyAgICAgICAgICAgIGN0eC0+ b3B0cy5yY19tb2RlID0gVktfVklERU9fRU5DT0RFX1JBVEVfQ09OVFJPTF9NT0RFX0RJU0FCTEVE X0JJVF9LSFI7CisgICAgICAgIH0gZWxzZSBpZiAoYXZjdHgtPmJpdF9yYXRlKSB7CisgICAgICAg ICAgICBpZiAoY3R4LT5lbmNfY2Fwcy5yYXRlQ29udHJvbE1vZGVzICYgVktfVklERU9fRU5DT0RF X1JBVEVfQ09OVFJPTF9NT0RFX1ZCUl9CSVRfS0hSKQorICAgICAgICAgICAgICAgIGN0eC0+b3B0 cy5yY19tb2RlID0gVktfVklERU9fRU5DT0RFX1JBVEVfQ09OVFJPTF9NT0RFX1ZCUl9CSVRfS0hS OworICAgICAgICAgICAgZWxzZSBpZiAoY3R4LT5lbmNfY2Fwcy5yYXRlQ29udHJvbE1vZGVzICYg VktfVklERU9fRU5DT0RFX1JBVEVfQ09OVFJPTF9NT0RFX0NCUl9CSVRfS0hSKQorICAgICAgICAg ICAgICAgIGN0eC0+b3B0cy5yY19tb2RlID0gVktfVklERU9fRU5DT0RFX1JBVEVfQ09OVFJPTF9N T0RFX0NCUl9CSVRfS0hSOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGN0eC0+ b3B0cy5yY19tb2RlID0gVktfVklERU9fRU5DT0RFX1JBVEVfQ09OVFJPTF9NT0RFX0RFRkFVTFRf S0hSOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgY3R4LT5leHBsaWNpdF9xcCA9IDE4 OworICAgICAgICAgICAgY3R4LT5vcHRzLnJjX21vZGUgPSBWS19WSURFT19FTkNPREVfUkFURV9D T05UUk9MX01PREVfRElTQUJMRURfQklUX0tIUjsKKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwg QVZfTE9HX1dBUk5JTkcsICJObyByYXRlIGNvbnRyb2wgc2V0dGluZ3Mgc3BlY2lmaWVkLCB1c2lu ZyBmaXhlZCBRUCA9ICVpXG4iLAorICAgICAgICAgICAgICAgICAgIGN0eC0+ZXhwbGljaXRfcXAp OworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChjdHgtPm9wdHMucmNfbW9kZSAhPSBWS19WSURF T19FTkNPREVfUkFURV9DT05UUk9MX01PREVfRElTQUJMRURfQklUX0tIUiAmJgorICAgICAgICAg ICAgICAgIWF2Y3R4LT5iaXRfcmF0ZSkgeworICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19X QVJOSU5HLCAiTm8gYml0cmF0ZSBzcGVjaWZpZWQhXG4iKTsKKyAgICAgICAgcmV0dXJuIEFWRVJS T1IoRUlOVkFMKTsKKyAgICB9CisKKyAgICBpZiAoY3R4LT5vcHRzLnJjX21vZGUgJiYgIShjdHgt PmVuY19jYXBzLnJhdGVDb250cm9sTW9kZXMgJiBjdHgtPm9wdHMucmNfbW9kZSkpIHsKKyAgICAg ICAgc3RhdGljIGNvbnN0IGNoYXIgKnJjX21vZGVzW10gPSB7CisgICAgICAgICAgICBbVktfVklE RU9fRU5DT0RFX1JBVEVfQ09OVFJPTF9NT0RFX0RFRkFVTFRfS0hSXSA9ICJkZWZhdWx0IiwKKyAg ICAgICAgICAgIFtWS19WSURFT19FTkNPREVfUkFURV9DT05UUk9MX01PREVfRElTQUJMRURfQklU X0tIUl0gPSAiY3FwIiwKKyAgICAgICAgICAgIFtWS19WSURFT19FTkNPREVfUkFURV9DT05UUk9M X01PREVfQ0JSX0JJVF9LSFJdID0gImNiciIsCisgICAgICAgICAgICBbVktfVklERU9fRU5DT0RF X1JBVEVfQ09OVFJPTF9NT0RFX1ZCUl9CSVRfS0hSXSA9ICJ2YnIiLAorICAgICAgICB9OworICAg ICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIlVuc3VwcG9ydGVkIHJhdGUgY29udHJv bCBtb2RlICVzLCBzdXBwb3J0ZWQgYXJlOlxuIiwKKyAgICAgICAgICAgICAgIHJjX21vZGVzW0ZG TUlOKEZGX0FSUkFZX0VMRU1TKHJjX21vZGVzKSwgY3R4LT5vcHRzLnJjX21vZGUpXSk7CisgICAg ICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiICAgICVzXG4iLCByY19tb2Rlc1swXSk7 CisgICAgICAgIGZvciAoaW50IGkgPSBWS19WSURFT19FTkNPREVfUkFURV9DT05UUk9MX01PREVf RElTQUJMRURfQklUX0tIUjsKKyAgICAgICAgICAgICAgICAgaSA8PSBWS19WSURFT19FTkNPREVf UkFURV9DT05UUk9MX01PREVfVkJSX0JJVF9LSFI7IGkgPDw9IDEpIHsKKyAgICAgICAgICAgIGlm ICghKGN0eC0+ZW5jX2NhcHMucmF0ZUNvbnRyb2xNb2RlcyAmIGkpKQorICAgICAgICAgICAgICAg IGNvbnRpbnVlOworICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICIgICAg JXNcbiIsIHJjX21vZGVzW2ldKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gQVZFUlJPUihF Tk9UU1VQKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworYXZfY29sZCBpbnQgZmZfdnVs a2FuX3dyaXRlX2dsb2JhbF9oZWFkZXIoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkZWdWxrYW5FbmNvZGVDb250ZXh0ICpj dHgpCit7CisgICAgaW50IGVycjsKKworICAgIC8qIFdyaXRlIGV4dHJhZGF0YSBpZiBuZWVkZWQg Ki8KKyAgICBpZiAoYXZjdHgtPmZsYWdzICYgQVZfQ09ERUNfRkxBR19HTE9CQUxfSEVBREVSKSB7 CisgICAgICAgIHVpbnQ4X3QgZGF0YVs0MDk2XTsKKyAgICAgICAgc2l6ZV90IGRhdGFfbGVuID0g c2l6ZW9mKGRhdGEpOworCisgICAgICAgIGVyciA9IGN0eC0+Y29kZWMtPndyaXRlX3NlcXVlbmNl X2hlYWRlcnMoYXZjdHgsIE5VTEwsIGRhdGEsICZkYXRhX2xlbik7CisgICAgICAgIGlmIChlcnIg PCAwKSB7CisgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkZhaWxlZCB0 byB3cml0ZSBzZXF1ZW5jZSBoZWFkZXIgIgorICAgICAgICAgICAgICAgICAgICJmb3IgZXh0cmFk YXRhOiAlZC5cbiIsIGVycik7CisgICAgICAgICAgICByZXR1cm4gZXJyOworICAgICAgICB9IGVs c2UgeworICAgICAgICAgICAgYXZjdHgtPmV4dHJhZGF0YV9zaXplID0gZGF0YV9sZW47CisgICAg ICAgICAgICBhdmN0eC0+ZXh0cmFkYXRhID0gYXZfbWFsbG9jeihhdmN0eC0+ZXh0cmFkYXRhX3Np emUgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVZfSU5QVVRf QlVGRkVSX1BBRERJTkdfU0laRSk7CisgICAgICAgICAgICBpZiAoIWF2Y3R4LT5leHRyYWRhdGEp IHsKKyAgICAgICAgICAgICAgICBlcnIgPSBBVkVSUk9SKEVOT01FTSk7CisgICAgICAgICAgICAg ICAgcmV0dXJuIGVycjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1lbWNweShhdmN0eC0+ ZXh0cmFkYXRhLCBkYXRhLCBhdmN0eC0+ZXh0cmFkYXRhX3NpemUpOworICAgICAgICB9CisgICAg fQorCisgICAgcmV0dXJuIDA7Cit9CisKK2F2X2NvbGQgaW50IGZmX3Z1bGthbl9lbmNvZGVfaW5p dChBVkNvZGVjQ29udGV4dCAqYXZjdHgsIEZGVnVsa2FuRW5jb2RlQ29udGV4dCAqY3R4LAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZGVnVsa2FuRW5jb2RlRGVzY3Jp cHRvciAqdmtfZGVzYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBG RlZ1bGthbkNvZGVjICpjb2RlYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2 b2lkICpjb2RlY19jYXBzLCB2b2lkICpxdWFsaXR5X3BuZXh0KQoreworICAgIGludCBpLCBlcnI7 CisgICAgVmtSZXN1bHQgcmV0OworICAgIEZGVnVsa2FuRnVuY3Rpb25zICp2ayA9ICZjdHgtPnMu dmtmbjsKKyAgICBGRlZ1bGthbkNvbnRleHQgKnMgPSAmY3R4LT5zOworICAgIEZGSFdCYXNlRW5j b2RlQ29udGV4dCAqYmFzZV9jdHggPSAmY3R4LT5iYXNlOworCisgICAgY29uc3QgQVZQaXhGbXRE ZXNjcmlwdG9yICpkZXNjOworCisgICAgVmtWaWRlb0Zvcm1hdFByb3BlcnRpZXNLSFIgKnJldF9p bmZvOworICAgIHVpbnQzMl90IG5iX291dF9mbXRzID0gMDsKKworICAgIFZrUGh5c2ljYWxEZXZp Y2VWaWRlb0VuY29kZVF1YWxpdHlMZXZlbEluZm9LSFIgcXVhbGl0eV9pbmZvOworCisgICAgVmtR dWVyeVBvb2xWaWRlb0VuY29kZUZlZWRiYWNrQ3JlYXRlSW5mb0tIUiBxdWVyeV9jcmVhdGU7CisK KyAgICBWa1ZpZGVvU2Vzc2lvbkNyZWF0ZUluZm9LSFIgc2Vzc2lvbl9jcmVhdGUgPSB7CisgICAg ICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX1ZJREVPX1NFU1NJT05fQ1JFQVRFX0lORk9f S0hSLAorICAgIH07CisgICAgVmtQaHlzaWNhbERldmljZVZpZGVvRm9ybWF0SW5mb0tIUiBmbXRf aW5mbyA9IHsKKyAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfUEhZU0lDQUxfREVW SUNFX1ZJREVPX0ZPUk1BVF9JTkZPX0tIUiwKKyAgICAgICAgLnBOZXh0ID0gJmN0eC0+cHJvZmls ZV9saXN0LAorICAgIH07CisKKyAgICBpZiAoIWF2Y3R4LT5od19mcmFtZXNfY3R4KSB7CisgICAg ICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiQSBoYXJkd2FyZSBmcmFtZXMgcmVmZXJl bmNlIGlzICIKKyAgICAgICAgICAgICAgICJyZXF1aXJlZCB0byBhc3NvY2lhdGUgdGhlIGVuY29k aW5nIGRldmljZS5cbiIpOworICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOworICAgIH0K KworICAgIGN0eC0+YmFzZS5vcCA9ICZ2dWxrYW5fYmFzZV9lbmNvZGVfb3BzOworICAgIGN0eC0+ Y29kZWMgPSBjb2RlYzsKKworICAgIHMtPmZyYW1lc19yZWYgPSBhdl9idWZmZXJfcmVmKGF2Y3R4 LT5od19mcmFtZXNfY3R4KTsKKyAgICBzLT5mcmFtZXMgPSAoQVZIV0ZyYW1lc0NvbnRleHQgKilz LT5mcmFtZXNfcmVmLT5kYXRhOworICAgIHMtPmh3ZmMgPSBzLT5mcmFtZXMtPmh3Y3R4OworCisg ICAgcy0+ZGV2aWNlID0gKEFWSFdEZXZpY2VDb250ZXh0ICopcy0+ZnJhbWVzLT5kZXZpY2VfcmVm LT5kYXRhOworICAgIHMtPmh3Y3R4ID0gcy0+ZGV2aWNlLT5od2N0eDsKKworICAgIGRlc2MgPSBh dl9waXhfZm10X2Rlc2NfZ2V0KGF2Y3R4LT5zd19waXhfZm10KTsKKyAgICBpZiAoIWRlc2MpCisg ICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7CisKKyAgICBzLT5leHRlbnNpb25zID0gZmZf dmtfZXh0ZW5zaW9uc190b19tYXNrKHMtPmh3Y3R4LT5lbmFibGVkX2Rldl9leHRlbnNpb25zLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy0+aHdjdHgtPm5i X2VuYWJsZWRfZGV2X2V4dGVuc2lvbnMpOworCisgICAgaWYgKCEocy0+ZXh0ZW5zaW9ucyAmIEZG X1ZLX0VYVF9WSURFT19FTkNPREVfUVVFVUUpKSB7CisgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZf TE9HX0VSUk9SLCAiRGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgdGhlICVzIGV4dGVuc2lvbiFcbiIs CisgICAgICAgICAgICAgICBWS19LSFJfVklERU9fRU5DT0RFX1FVRVVFX0VYVEVOU0lPTl9OQU1F KTsKKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PU1lTKTsKKyAgICB9IGVsc2UgaWYgKCEocy0+ ZXh0ZW5zaW9ucyAmIEZGX1ZLX0VYVF9WSURFT19NQUlOVEVOQU5DRV8xKSkgeworICAgICAgICBh dl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkRldmljZSBkb2VzIG5vdCBzdXBwb3J0IHRoZSAl cyBleHRlbnNpb24hXG4iLAorICAgICAgICAgICAgICAgVktfS0hSX1ZJREVPX01BSU5URU5BTkNF XzFfRVhURU5TSU9OX05BTUUpOworICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9TWVMpOworICAg IH0gZWxzZSBpZiAoIShzLT5leHRlbnNpb25zICYgdmtfZGVzYy0+ZW5jb2RlX2V4dGVuc2lvbikp IHsKKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJEZXZpY2UgZG9lcyBub3Qg c3VwcG9ydCBlbmNvZGluZyAlcyFcbiIsCisgICAgICAgICAgICAgICBhdmNvZGVjX2dldF9uYW1l KGF2Y3R4LT5jb2RlY19pZCkpOworICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9TWVMpOworICAg IH0KKworICAgIC8qIExvYWQgZnVuY3Rpb25zICovCisgICAgZXJyID0gZmZfdmtfbG9hZF9mdW5j dGlvbnMocy0+ZGV2aWNlLCB2aywgcy0+ZXh0ZW5zaW9ucywgMSwgMSk7CisgICAgaWYgKGVyciA8 IDApCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICAvKiBDcmVhdGUgcXVldWUgY29udGV4dCAq LworICAgIGN0eC0+cWZfZW5jID0gZmZfdmtfcWZfZmluZChzLCBWS19RVUVVRV9WSURFT19FTkNP REVfQklUX0tIUiwgdmtfZGVzYy0+ZW5jb2RlX29wKTsKKyAgICBpZiAoIWN0eC0+cWZfZW5jKSB7 CisgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiRW5jb2Rpbmcgb2YgJXMgaXMg bm90IHN1cHBvcnRlZCBieSB0aGlzIGRldmljZVxuIiwKKyAgICAgICAgICAgICAgIGF2Y29kZWNf Z2V0X25hbWUoYXZjdHgtPmNvZGVjX2lkKSk7CisgICAgICAgIHJldHVybiBlcnI7CisgICAgfQor CisgICAgLyogTG9hZCBhbGwgcHJvcGVydGllcyAqLworICAgIGVyciA9IGZmX3ZrX2xvYWRfcHJv cHMocyk7CisgICAgaWYgKGVyciA8IDApCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICAvKiBT ZXQgdHVuaW5nICovCisgICAgY3R4LT51c2FnZV9pbmZvID0gKFZrVmlkZW9FbmNvZGVVc2FnZUlu Zm9LSFIpIHsKKyAgICAgICAgLnNUeXBlICAgICAgICAgICAgID0gVktfU1RSVUNUVVJFX1RZUEVf VklERU9fRU5DT0RFX1VTQUdFX0lORk9fS0hSLAorICAgICAgICAudmlkZW9Vc2FnZUhpbnRzICAg PSBjdHgtPm9wdHMudXNhZ2UsCisgICAgICAgIC52aWRlb0NvbnRlbnRIaW50cyA9IGN0eC0+b3B0 cy5jb250ZW50LAorICAgICAgICAudHVuaW5nTW9kZSAgICAgICAgPSBjdHgtPm9wdHMudHVuZSwK KyAgICB9OworCisgICAgLyogTG9hZCB1cCB0aGUgcHJvZmlsZSBub3csIG5lZWRlZCBmb3IgY2Fw cyBhbmQgdG8gY3JlYXRlIGEgcXVlcnkgcG9vbCAqLworICAgIGN0eC0+cHJvZmlsZS5zVHlwZSAg ICAgICAgICAgICAgID0gVktfU1RSVUNUVVJFX1RZUEVfVklERU9fUFJPRklMRV9JTkZPX0tIUjsK KyAgICBjdHgtPnByb2ZpbGUucE5leHQgICAgICAgICAgICAgICA9ICZjdHgtPnVzYWdlX2luZm87 CisgICAgY3R4LT5wcm9maWxlLnZpZGVvQ29kZWNPcGVyYXRpb24gPSB2a19kZXNjLT5lbmNvZGVf b3A7CisgICAgY3R4LT5wcm9maWxlLmNocm9tYVN1YnNhbXBsaW5nICAgPSBmZl92a19zdWJzYW1w bGluZ19mcm9tX2F2X2Rlc2MoZGVzYyk7CisgICAgY3R4LT5wcm9maWxlLmx1bWFCaXREZXB0aCAg ICAgICAgPSBmZl92a19kZXB0aF9mcm9tX2F2X2RlcHRoKGRlc2MtPmNvbXBbMF0uZGVwdGgpOwor ICAgIGN0eC0+cHJvZmlsZS5jaHJvbWFCaXREZXB0aCAgICAgID0gY3R4LT5wcm9maWxlLmx1bWFC aXREZXB0aDsKKworICAgIC8qIFNldHVwIGEgcHJvZmlsZSAqLworICAgIGVyciA9IGNvZGVjLT5p bml0X3Byb2ZpbGUoYXZjdHgsICZjdHgtPnByb2ZpbGUsICZjdHgtPnVzYWdlX2luZm8pOworICAg IGlmIChlcnIgPCAwKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgY3R4LT5wcm9maWxlX2xp c3Quc1R5cGUgICAgICAgID0gVktfU1RSVUNUVVJFX1RZUEVfVklERU9fUFJPRklMRV9MSVNUX0lO Rk9fS0hSOworICAgIGN0eC0+cHJvZmlsZV9saXN0LnByb2ZpbGVDb3VudCA9IDE7CisgICAgY3R4 LT5wcm9maWxlX2xpc3QucFByb2ZpbGVzICAgID0gJmN0eC0+cHJvZmlsZTsKKworICAgIC8qIEdl dCB0aGUgY2FwYWJpbGl0aWVzIG9mIHRoZSBlbmNvZGVyIGZvciB0aGUgZ2l2ZW4gcHJvZmlsZSAq LworICAgIGN0eC0+ZW5jX2NhcHMuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9WSURFT19FTkNP REVfQ0FQQUJJTElUSUVTX0tIUjsKKyAgICBjdHgtPmVuY19jYXBzLnBOZXh0ID0gY29kZWNfY2Fw czsKKyAgICBjdHgtPmNhcHMuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9WSURFT19DQVBBQklM SVRJRVNfS0hSOworICAgIGN0eC0+Y2Fwcy5wTmV4dCA9ICZjdHgtPmVuY19jYXBzOworCisgICAg cmV0ID0gdmstPkdldFBoeXNpY2FsRGV2aWNlVmlkZW9DYXBhYmlsaXRpZXNLSFIocy0+aHdjdHgt PnBoeXNfZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICZjdHgtPnByb2ZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJmN0eC0+Y2Fwcyk7CisgICAgaWYgKHJldCA9PSBWS19FUlJPUl9W SURFT19QUk9GSUxFX09QRVJBVElPTl9OT1RfU1VQUE9SVEVEX0tIUikgeworICAgICAgICBhdl9s b2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIlVuYWJsZSB0byBpbml0aWFsaXplIGVuY29kaW5nOiAi CisgICAgICAgICAgICAgICAiJXMgcHJvZmlsZSBcIiVzXCIgbm90IHN1cHBvcnRlZCFcbiIsCisg ICAgICAgICAgICAgICBhdmNvZGVjX2dldF9uYW1lKGF2Y3R4LT5jb2RlY19pZCksCisgICAgICAg ICAgICAgICBhdmNvZGVjX3Byb2ZpbGVfbmFtZShhdmN0eC0+Y29kZWNfaWQsIGF2Y3R4LT5wcm9m aWxlKSk7CisgICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7CisgICAgfSBlbHNlIGlmIChy ZXQgPT0gVktfRVJST1JfVklERU9fUFJPRklMRV9GT1JNQVRfTk9UX1NVUFBPUlRFRF9LSFIpIHsK KyAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJVbmFibGUgdG8gaW5pdGlhbGl6 ZSBlbmNvZGluZzogIgorICAgICAgICAgICAgICAgImZvcm1hdCAoJXMpIG5vdCBzdXBwb3J0ZWQh XG4iLAorICAgICAgICAgICAgICAgYXZfZ2V0X3BpeF9mbXRfbmFtZShhdmN0eC0+c3dfcGl4X2Zt dCkpOworICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOworICAgIH0gZWxzZSBpZiAocmV0 ID09IFZLX0VSUk9SX0ZFQVRVUkVfTk9UX1BSRVNFTlQgfHwKKyAgICAgICAgICAgICAgIHJldCA9 PSBWS19FUlJPUl9GT1JNQVRfTk9UX1NVUFBPUlRFRCkgeworICAgICAgICByZXR1cm4gQVZFUlJP UihFSU5WQUwpOworICAgIH0gZWxzZSBpZiAocmV0ICE9IFZLX1NVQ0NFU1MpIHsKKyAgICAgICAg cmV0dXJuIEFWRVJST1JfRVhURVJOQUw7CisgICAgfQorCisgICAgZXJyID0gaW5pdF9yYyhhdmN0 eCwgY3R4KTsKKyAgICBpZiAoZXJyIDwgMCkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIC8q IENyZWF0ZSBjb21tYW5kIGFuZCBxdWVyeSBwb29sICovCisgICAgcXVlcnlfY3JlYXRlID0gKFZr UXVlcnlQb29sVmlkZW9FbmNvZGVGZWVkYmFja0NyZWF0ZUluZm9LSFIpIHsKKyAgICAgICAgLnNU eXBlID0gVktfU1RSVUNUVVJFX1RZUEVfUVVFUllfUE9PTF9WSURFT19FTkNPREVfRkVFREJBQ0tf Q1JFQVRFX0lORk9fS0hSLAorICAgICAgICAucE5leHQgPSAmY3R4LT5wcm9maWxlLAorICAgICAg ICAuZW5jb2RlRmVlZGJhY2tGbGFncyA9IGN0eC0+ZW5jX2NhcHMuc3VwcG9ydGVkRW5jb2RlRmVl ZGJhY2tGbGFncyAmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKH5WS19WSURFT19F TkNPREVfRkVFREJBQ0tfQklUU1RSRUFNX0hBU19PVkVSUklERVNfQklUX0tIUiksCisgICAgfTsK KyAgICBlcnIgPSBmZl92a19leGVjX3Bvb2xfaW5pdChzLCBjdHgtPnFmX2VuYywgJmN0eC0+ZW5j X3Bvb2wsIGJhc2VfY3R4LT5hc3luY19kZXB0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAxLCBWS19RVUVSWV9UWVBFX1ZJREVPX0VOQ09ERV9GRUVEQkFDS19LSFIsIDAsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJnF1ZXJ5X2NyZWF0ZSk7CisgICAgaWYgKGVyciA8 IDApCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICBpZiAoY3R4LT5vcHRzLnF1YWxpdHkgPiBj dHgtPmVuY19jYXBzLm1heFF1YWxpdHlMZXZlbHMpIHsKKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBB Vl9MT0dfRVJST1IsICJJbnZhbGlkIHF1YWxpdHkgbGV2ZWwgJWk6IGFsbG93ZWQgcmFuZ2UgaXMg IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjAgdG8gJWlcbiIsCisgICAg ICAgICAgICAgICBjdHgtPm9wdHMucXVhbGl0eSwgY3R4LT5lbmNfY2Fwcy5tYXhRdWFsaXR5TGV2 ZWxzKTsKKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKKyAgICB9CisKKyAgICAvKiBH ZXQgcXVhbGl0eSBwcm9wZXJ0aWVzIGZvciB0aGUgcHJvZmlsZSBhbmQgcXVhbGl0eSBsZXZlbCAq LworICAgIHF1YWxpdHlfaW5mbyA9IChWa1BoeXNpY2FsRGV2aWNlVmlkZW9FbmNvZGVRdWFsaXR5 TGV2ZWxJbmZvS0hSKSB7CisgICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX1BIWVNJ Q0FMX0RFVklDRV9WSURFT19FTkNPREVfUVVBTElUWV9MRVZFTF9JTkZPX0tIUiwKKyAgICAgICAg LnBWaWRlb1Byb2ZpbGUgPSAmY3R4LT5wcm9maWxlLAorICAgICAgICAucXVhbGl0eUxldmVsID0g Y3R4LT5vcHRzLnF1YWxpdHksCisgICAgfTsKKyAgICBjdHgtPnF1YWxpdHlfcHJvcHMgPSAoVmtW aWRlb0VuY29kZVF1YWxpdHlMZXZlbFByb3BlcnRpZXNLSFIpIHsKKyAgICAgICAgLnNUeXBlID0g VktfU1RSVUNUVVJFX1RZUEVfVklERU9fRU5DT0RFX1FVQUxJVFlfTEVWRUxfUFJPUEVSVElFU19L SFIsCisgICAgICAgIC5wTmV4dCA9IHF1YWxpdHlfcG5leHQsCisgICAgfTsKKyAgICByZXQgPSB2 ay0+R2V0UGh5c2ljYWxEZXZpY2VWaWRlb0VuY29kZVF1YWxpdHlMZXZlbFByb3BlcnRpZXNLSFIo cy0+aHdjdHgtPnBoeXNfZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcXVhbGl0eV9pbmZvLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAmY3R4LT5xdWFsaXR5X3Byb3BzKTsKKyAgICBpZiAocmV0ICE9IFZLX1NVQ0NFU1MpCisgICAg ICAgIHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOworCisgICAgLyogUHJpbnRvdXQgaW5mb3JtYXRp dmUgcHJvcGVydGllcyAqLworICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX1ZFUkJPU0UsICJFbmNv ZGVyIGNhcGFiaWxpdGllcyBmb3IgJXMgcHJvZmlsZSBcIiVzXCI6XG4iLAorICAgICAgICAgICBh dmNvZGVjX2dldF9uYW1lKGF2Y3R4LT5jb2RlY19pZCksCisgICAgICAgICAgIGF2Y29kZWNfcHJv ZmlsZV9uYW1lKGF2Y3R4LT5jb2RlY19pZCwgYXZjdHgtPnByb2ZpbGUpKTsKKyAgICBhdl9sb2co YXZjdHgsIEFWX0xPR19WRVJCT1NFLCAiICAgIFdpZHRoOiBmcm9tICVpIHRvICVpXG4iLAorICAg ICAgICAgICBjdHgtPmNhcHMubWluQ29kZWRFeHRlbnQud2lkdGgsIGN0eC0+Y2Fwcy5tYXhDb2Rl ZEV4dGVudC53aWR0aCk7CisgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfVkVSQk9TRSwgIiAgICBI ZWlnaHQ6IGZyb20gJWkgdG8gJWlcbiIsCisgICAgICAgICAgIGN0eC0+Y2Fwcy5taW5Db2RlZEV4 dGVudC5oZWlnaHQsIGN0eC0+Y2Fwcy5tYXhDb2RlZEV4dGVudC5oZWlnaHQpOworICAgIGF2X2xv ZyhhdmN0eCwgQVZfTE9HX1ZFUkJPU0UsICIgICAgV2lkdGggYWxpZ25tZW50OiAlaVxuIiwKKyAg ICAgICAgICAgY3R4LT5jYXBzLnBpY3R1cmVBY2Nlc3NHcmFudWxhcml0eS53aWR0aCk7CisgICAg YXZfbG9nKGF2Y3R4LCBBVl9MT0dfVkVSQk9TRSwgIiAgICBIZWlnaHQgYWxpZ25tZW50OiAlaVxu IiwKKyAgICAgICAgICAgY3R4LT5jYXBzLnBpY3R1cmVBY2Nlc3NHcmFudWxhcml0eS5oZWlnaHQp OworICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX1ZFUkJPU0UsICIgICAgQml0c3RyZWFtIG9mZnNl dCBhbGlnbm1lbnQ6ICUiUFJJdTY0IlxuIiwKKyAgICAgICAgICAgY3R4LT5jYXBzLm1pbkJpdHN0 cmVhbUJ1ZmZlck9mZnNldEFsaWdubWVudCk7CisgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfVkVS Qk9TRSwgIiAgICBCaXRzdHJlYW0gc2l6ZSBhbGlnbm1lbnQ6ICUiUFJJdTY0IlxuIiwKKyAgICAg ICAgICAgY3R4LT5jYXBzLm1pbkJpdHN0cmVhbUJ1ZmZlclNpemVBbGlnbm1lbnQpOworICAgIGF2 X2xvZyhhdmN0eCwgQVZfTE9HX1ZFUkJPU0UsICIgICAgTWF4aW11bSByZWZlcmVuY2VzOiAldVxu IiwKKyAgICAgICAgICAgY3R4LT5jYXBzLm1heERwYlNsb3RzKTsKKyAgICBhdl9sb2coYXZjdHgs IEFWX0xPR19WRVJCT1NFLCAiICAgIE1heGltdW0gYWN0aXZlIHJlZmVyZW5jZXM6ICV1XG4iLAor ICAgICAgICAgICBjdHgtPmNhcHMubWF4QWN0aXZlUmVmZXJlbmNlUGljdHVyZXMpOworICAgIGF2 X2xvZyhhdmN0eCwgQVZfTE9HX1ZFUkJPU0UsICIgICAgQ29kZWMgaGVhZGVyIHZlcnNpb246ICVp LiVpLiVpIChkcml2ZXIpLCAlaS4laS4laSAoY29tcGlsZWQpXG4iLAorICAgICAgICAgICBDT0RF Q19WRVIoY3R4LT5jYXBzLnN0ZEhlYWRlclZlcnNpb24uc3BlY1ZlcnNpb24pLAorICAgICAgICAg ICBDT0RFQ19WRVIodmtfZGVzYy0+ZXh0X3Byb3BzLnNwZWNWZXJzaW9uKSk7CisgICAgYXZfbG9n KGF2Y3R4LCBBVl9MT0dfVkVSQk9TRSwgIiAgICBFbmNvZGVyIG1heCBxdWFsaXR5OiAlaVxuIiwK KyAgICAgICAgICAgY3R4LT5lbmNfY2Fwcy5tYXhRdWFsaXR5TGV2ZWxzKTsKKyAgICBhdl9sb2co YXZjdHgsIEFWX0xPR19WRVJCT1NFLCAiICAgIEVuY29kZXIgaW1hZ2Ugd2lkdGggYWxpZ25tZW50 OiAlaVxuIiwKKyAgICAgICAgICAgY3R4LT5lbmNfY2Fwcy5lbmNvZGVJbnB1dFBpY3R1cmVHcmFu dWxhcml0eS53aWR0aCk7CisgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfVkVSQk9TRSwgIiAgICBF bmNvZGVyIGltYWdlIGhlaWdodCBhbGlnbm1lbnQ6ICVpXG4iLAorICAgICAgICAgICBjdHgtPmVu Y19jYXBzLmVuY29kZUlucHV0UGljdHVyZUdyYW51bGFyaXR5LmhlaWdodCk7CisgICAgYXZfbG9n KGF2Y3R4LCBBVl9MT0dfVkVSQk9TRSwgIiAgICBDYXBhYmlsaXR5IGZsYWdzOiVzJXMlc1xuIiwK KyAgICAgICAgICAgY3R4LT5jYXBzLmZsYWdzID8gIiIgOgorICAgICAgICAgICAgICAgIiBub25l IiwKKyAgICAgICAgICAgY3R4LT5jYXBzLmZsYWdzICYgVktfVklERU9fQ0FQQUJJTElUWV9QUk9U RUNURURfQ09OVEVOVF9CSVRfS0hSID8KKyAgICAgICAgICAgICAgICIgcHJvdGVjdGVkIiA6ICIi LAorICAgICAgICAgICBjdHgtPmNhcHMuZmxhZ3MgJiBWS19WSURFT19DQVBBQklMSVRZX1NFUEFS QVRFX1JFRkVSRU5DRV9JTUFHRVNfQklUX0tIUiA/CisgICAgICAgICAgICAgICAiIHNlcGFyYXRl X3JlZmVyZW5jZXMiIDogIiIpOworCisgICAgLyogU2V0dXAgd2lkdGgvaGVpZ2h0IGFsaWdubWVu dCAqLworICAgIGJhc2VfY3R4LT5zdXJmYWNlX3dpZHRoID0gYXZjdHgtPmNvZGVkX3dpZHRoID0K KyAgICAgICAgRkZBTElHTihhdmN0eC0+d2lkdGgsIGN0eC0+ZW5jX2NhcHMuZW5jb2RlSW5wdXRQ aWN0dXJlR3JhbnVsYXJpdHkud2lkdGgpOworICAgIGJhc2VfY3R4LT5zdXJmYWNlX2hlaWdodCA9 IGF2Y3R4LT5jb2RlZF9oZWlnaHQgPQorICAgICAgICBGRkFMSUdOKGF2Y3R4LT5oZWlnaHQsIGN0 eC0+ZW5jX2NhcHMuZW5jb2RlSW5wdXRQaWN0dXJlR3JhbnVsYXJpdHkuaGVpZ2h0KTsKKworICAg IC8qIFNldHVwIHNsaWNlIHdpZHRoL2hlaWdodCAqLworICAgIGJhc2VfY3R4LT5zbGljZV9ibG9j a193aWR0aCA9IGN0eC0+ZW5jX2NhcHMuZW5jb2RlSW5wdXRQaWN0dXJlR3JhbnVsYXJpdHkud2lk dGg7CisgICAgYmFzZV9jdHgtPnNsaWNlX2Jsb2NrX2hlaWdodCA9IGN0eC0+ZW5jX2NhcHMuZW5j b2RlSW5wdXRQaWN0dXJlR3JhbnVsYXJpdHkuaGVpZ2h0OworCisgICAgLyogQ2hlY2sgaWYgZW5j b2RpbmcgaXMgcG9zc2libGUgd2l0aCB0aGUgZ2l2ZW4gcGFyYW1ldGVycyAqLworICAgIGlmIChh dmN0eC0+Y29kZWRfd2lkdGggIDwgY3R4LT5jYXBzLm1pbkNvZGVkRXh0ZW50LndpZHRoICAgfHwK KyAgICAgICAgYXZjdHgtPmNvZGVkX2hlaWdodCA8IGN0eC0+Y2Fwcy5taW5Db2RlZEV4dGVudC5o ZWlnaHQgIHx8CisgICAgICAgIGF2Y3R4LT5jb2RlZF93aWR0aCAgPiBjdHgtPmNhcHMubWF4Q29k ZWRFeHRlbnQud2lkdGggICB8fAorICAgICAgICBhdmN0eC0+Y29kZWRfaGVpZ2h0ID4gY3R4LT5j YXBzLm1heENvZGVkRXh0ZW50LmhlaWdodCkgeworICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xP R19FUlJPUiwgIklucHV0IG9mICVpeCVpIHRvbyBsYXJnZSBmb3IgZW5jb2RlciBsaW1pdHM6ICVp eCVpIG1heFxuIiwKKyAgICAgICAgICAgICAgIGF2Y3R4LT5jb2RlZF93aWR0aCwgYXZjdHgtPmNv ZGVkX2hlaWdodCwKKyAgICAgICAgICAgICAgIGN0eC0+Y2Fwcy5taW5Db2RlZEV4dGVudC53aWR0 aCwgY3R4LT5jYXBzLm1pbkNvZGVkRXh0ZW50LmhlaWdodCk7CisgICAgICAgIHJldHVybiBBVkVS Uk9SKEVJTlZBTCk7CisgICAgfQorCisgICAgZm10X2luZm8uaW1hZ2VVc2FnZSA9IFZLX0lNQUdF X1VTQUdFX1ZJREVPX0VOQ09ERV9EUEJfQklUX0tIUjsKKworICAgIGN0eC0+Y29tbW9uLmxheWVy ZWRfZHBiID0gIShjdHgtPmNhcHMuZmxhZ3MgJiBWS19WSURFT19DQVBBQklMSVRZX1NFUEFSQVRF X1JFRkVSRU5DRV9JTUFHRVNfQklUX0tIUik7CisKKyAgICAvKiBHZXQgdGhlIHN1cHBvcnRlZCBp bWFnZSBmb3JtYXRzICovCisgICAgcmV0ID0gdmstPkdldFBoeXNpY2FsRGV2aWNlVmlkZW9Gb3Jt YXRQcm9wZXJ0aWVzS0hSKHMtPmh3Y3R4LT5waHlzX2RldiwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZtdF9pbmZvLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmJfb3V0X2Zt dHMsIE5VTEwpOworICAgIGlmIChyZXQgPT0gVktfRVJST1JfRk9STUFUX05PVF9TVVBQT1JURUQg fHwKKyAgICAgICAgKCFuYl9vdXRfZm10cyAmJiByZXQgPT0gVktfU1VDQ0VTUykpIHsKKyAgICAg ICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKKyAgICB9IGVsc2UgaWYgKHJldCAhPSBWS19TVUND RVNTKSB7CisgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiVW5hYmxlIHRvIGdl dCBWdWxrYW4gZm9ybWF0IHByb3BlcnRpZXM6ICVzIVxuIiwKKyAgICAgICAgICAgICAgIGZmX3Zr X3JldDJzdHIocmV0KSk7CisgICAgICAgIHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOworICAgIH0K KworICAgIHJldF9pbmZvID0gYXZfbWFsbG9jeihzaXplb2YoKnJldF9pbmZvKSpuYl9vdXRfZm10 cyk7CisgICAgaWYgKCFyZXRfaW5mbykKKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsK KworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmJfb3V0X2ZtdHM7IGkrKykKKyAgICAgICAgcmV0 X2luZm9baV0uc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9WSURFT19GT1JNQVRfUFJPUEVSVElF U19LSFI7CisKKyAgICByZXQgPSB2ay0+R2V0UGh5c2ljYWxEZXZpY2VWaWRlb0Zvcm1hdFByb3Bl cnRpZXNLSFIocy0+aHdjdHgtPnBoeXNfZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZm10X2luZm8sCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuYl9vdXRfZm10cywgcmV0 X2luZm8pOworICAgIGlmIChyZXQgPT0gVktfRVJST1JfRk9STUFUX05PVF9TVVBQT1JURUQgfHwK KyAgICAgICAgKCFuYl9vdXRfZm10cyAmJiByZXQgPT0gVktfU1VDQ0VTUykpIHsKKyAgICAgICAg YXZfZnJlZShyZXRfaW5mbyk7CisgICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7CisgICAg fSBlbHNlIGlmIChyZXQgIT0gVktfU1VDQ0VTUykgeworICAgICAgICBhdl9sb2coYXZjdHgsIEFW X0xPR19FUlJPUiwgIlVuYWJsZSB0byBnZXQgVnVsa2FuIGZvcm1hdCBwcm9wZXJ0aWVzOiAlcyFc biIsCisgICAgICAgICAgICAgICBmZl92a19yZXQyc3RyKHJldCkpOworICAgICAgICBhdl9mcmVl KHJldF9pbmZvKTsKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfRVhURVJOQUw7CisgICAgfQorCisg ICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfVkVSQk9TRSwgIlN1cHBvcnRlZCBpbnB1dCBmb3JtYXRz OlxuIik7CisgICAgZm9yIChpID0gMDsgaSA8IG5iX291dF9mbXRzOyBpKyspCisgICAgICAgIGF2 X2xvZyhhdmN0eCwgQVZfTE9HX1ZFUkJPU0UsICIgICAgJWk6ICVpXG4iLCBpLCByZXRfaW5mb1tp XS5mb3JtYXQpOworCisgICAgZm9yIChpID0gMDsgaSA8IG5iX291dF9mbXRzOyBpKyspIHsKKyAg ICAgICAgaWYgKGZmX3ZrX3BpeF9mbXRfZnJvbV92a2ZtdChyZXRfaW5mb1tpXS5mb3JtYXQpID09 IHMtPmZyYW1lcy0+c3dfZm9ybWF0KSB7CisgICAgICAgICAgICBjdHgtPnBpY19mb3JtYXQgPSBy ZXRfaW5mb1tpXS5mb3JtYXQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0K KworICAgIGF2X2ZyZWUocmV0X2luZm8pOworCisgICAgaWYgKGkgPT0gbmJfb3V0X2ZtdHMpIHsK KyAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJQaXhlbCBmb3JtYXQgJXMgb2Yg aW5wdXQgZnJhbWVzIG5vdCBzdXBwb3J0ZWQhXG4iLAorICAgICAgICAgICAgICAgYXZfZ2V0X3Bp eF9mbXRfbmFtZShzLT5mcmFtZXMtPnN3X2Zvcm1hdCkpOworICAgICAgICByZXR1cm4gQVZFUlJP UihFSU5WQUwpOworICAgIH0KKworICAgIC8qIENyZWF0ZSBzZXNzaW9uICovCisgICAgc2Vzc2lv bl9jcmVhdGUucFZpZGVvUHJvZmlsZSA9ICZjdHgtPnByb2ZpbGU7CisgICAgc2Vzc2lvbl9jcmVh dGUuZmxhZ3MgPSAweDA7CisgICAgc2Vzc2lvbl9jcmVhdGUucXVldWVGYW1pbHlJbmRleCA9IGN0 eC0+cWZfZW5jLT5pZHg7CisgICAgc2Vzc2lvbl9jcmVhdGUubWF4Q29kZWRFeHRlbnQgPSBjdHgt PmNhcHMubWF4Q29kZWRFeHRlbnQ7CisgICAgc2Vzc2lvbl9jcmVhdGUubWF4RHBiU2xvdHMgPSBj dHgtPmNhcHMubWF4RHBiU2xvdHM7CisgICAgc2Vzc2lvbl9jcmVhdGUubWF4QWN0aXZlUmVmZXJl bmNlUGljdHVyZXMgPSBjdHgtPmNhcHMubWF4QWN0aXZlUmVmZXJlbmNlUGljdHVyZXM7CisgICAg c2Vzc2lvbl9jcmVhdGUucGljdHVyZUZvcm1hdCA9IGN0eC0+cGljX2Zvcm1hdDsKKyAgICBzZXNz aW9uX2NyZWF0ZS5yZWZlcmVuY2VQaWN0dXJlRm9ybWF0ID0gc2Vzc2lvbl9jcmVhdGUucGljdHVy ZUZvcm1hdDsKKyAgICBzZXNzaW9uX2NyZWF0ZS5wU3RkSGVhZGVyVmVyc2lvbiA9ICZ2a19kZXNj LT5leHRfcHJvcHM7CisKKyAgICBlcnIgPSBmZl92a192aWRlb19jb21tb25faW5pdChhdmN0eCwg cywgJmN0eC0+Y29tbW9uLCAmc2Vzc2lvbl9jcmVhdGUpOworICAgIGlmIChlcnIgPCAwKQorICAg ICAgICByZXR1cm4gZXJyOworCisgICAgZXJyID0gZmZfaHdfYmFzZV9lbmNvZGVfaW5pdChhdmN0 eCwgJmN0eC0+YmFzZSk7CisgICAgaWYgKGVyciA8IDApCisgICAgICAgIHJldHVybiBlcnI7CisK KyAgICBlcnIgPSB2dWxrYW5fZW5jb2RlX2NyZWF0ZV9kcGIoYXZjdHgsIGN0eCk7CisgICAgaWYg KGVyciA8IDApCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICBiYXNlX2N0eC0+YXN5bmNfZW5j b2RlID0gMTsKKyAgICBiYXNlX2N0eC0+ZW5jb2RlX2ZpZm8gPSBhdl9maWZvX2FsbG9jMihiYXNl X2N0eC0+YXN5bmNfZGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc2l6ZW9mKEZGVnVsa2FuRW5jb2RlUGljdHVyZSAqKSwgMCk7CisgICAgaWYgKCFiYXNl X2N0eC0+ZW5jb2RlX2ZpZm8pCisgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7CisKKyAg ICByZXR1cm4gMDsKK30KKworaW50IGZmX3Z1bGthbl9lbmNvZGVfY3JlYXRlX3Nlc3Npb25fcGFy YW1zKEFWQ29kZWNDb250ZXh0ICphdmN0eCwgRkZWdWxrYW5FbmNvZGVDb250ZXh0ICpjdHgsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqY29kZWNfcGFy YW1zX3BuZXh0KQoreworICAgIFZrUmVzdWx0IHJldDsKKyAgICBGRlZ1bGthbkZ1bmN0aW9ucyAq dmsgPSAmY3R4LT5zLnZrZm47CisgICAgRkZWdWxrYW5Db250ZXh0ICpzID0gJmN0eC0+czsKKwor ICAgIFZrVmlkZW9FbmNvZGVRdWFsaXR5TGV2ZWxJbmZvS0hSIHFfaW5mbzsKKyAgICBWa1ZpZGVv U2Vzc2lvblBhcmFtZXRlcnNDcmVhdGVJbmZvS0hSIHNlc3Npb25fcGFyYW1zX2NyZWF0ZTsKKwor ICAgIHFfaW5mbyA9IChWa1ZpZGVvRW5jb2RlUXVhbGl0eUxldmVsSW5mb0tIUikgeworICAgICAg ICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9WSURFT19FTkNPREVfUVVBTElUWV9MRVZFTF9J TkZPX0tIUiwKKyAgICAgICAgLnBOZXh0ID0gY29kZWNfcGFyYW1zX3BuZXh0LAorICAgICAgICAu cXVhbGl0eUxldmVsID0gY3R4LT5vcHRzLnF1YWxpdHksCisgICAgfTsKKyAgICBzZXNzaW9uX3Bh cmFtc19jcmVhdGUgPSAoVmtWaWRlb1Nlc3Npb25QYXJhbWV0ZXJzQ3JlYXRlSW5mb0tIUikgewor ICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9WSURFT19TRVNTSU9OX1BBUkFNRVRF UlNfQ1JFQVRFX0lORk9fS0hSLAorICAgICAgICAucE5leHQgPSAmcV9pbmZvLAorICAgICAgICAu dmlkZW9TZXNzaW9uID0gY3R4LT5jb21tb24uc2Vzc2lvbiwKKyAgICAgICAgLnZpZGVvU2Vzc2lv blBhcmFtZXRlcnNUZW1wbGF0ZSA9IFZLX05VTExfSEFORExFLAorICAgIH07CisKKyAgICAvKiBD cmVhdGUgc2Vzc2lvbiBwYXJhbWV0ZXJzICovCisgICAgcmV0ID0gdmstPkNyZWF0ZVZpZGVvU2Vz c2lvblBhcmFtZXRlcnNLSFIocy0+aHdjdHgtPmFjdF9kZXYsICZzZXNzaW9uX3BhcmFtc19jcmVh dGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy0+aHdj dHgtPmFsbG9jLCAmY3R4LT5zZXNzaW9uX3BhcmFtcyk7CisgICAgaWYgKHJldCAhPSBWS19TVUND RVNTKSB7CisgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiVW5hYmxlIHRvIGNy ZWF0ZSBWdWxrYW4gdmlkZW8gc2Vzc2lvbiBwYXJhbWV0ZXJzOiAlcyFcbiIsCisgICAgICAgICAg ICAgICBmZl92a19yZXQyc3RyKHJldCkpOworICAgICAgICByZXR1cm4gQVZFUlJPUl9FWFRFUk5B TDsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KLS0gCjIuNDkuMQoKCkZyb20gZGJkODJmNzIy OGY0ZDlhMzc1ODkyNDU4YWUwOTNkNWRjNzRlMWM5MCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEK RnJvbTogSmFtYWlrYTEgPGx1a2FzemN6MThAd3AucGw+CkRhdGU6IFdlZCwgMyBTZXAgMjAyNSAx MzozMTo0NiArMDAwMApTdWJqZWN0OiBbUEFUQ0ggMDcxLzExOF0gQ2hhbmdpbmcgdnVsa2FuIGZp bGUgZGlyZWN0b3J5CgotLS0KIGxpYmF2Y29kZWMvdnVsa2FuX2VuY29kZS5oIHwgMjU5IC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAyNTkgZGVs ZXRpb25zKC0pCiBkZWxldGUgbW9kZSAxMDA2NDQgbGliYXZjb2RlYy92dWxrYW5fZW5jb2RlLmgK CmRpZmYgLS1naXQgYS9saWJhdmNvZGVjL3Z1bGthbl9lbmNvZGUuaCBiL2xpYmF2Y29kZWMvdnVs a2FuX2VuY29kZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZGYwNmUxMWQwLi4w MDAwMDAwMDAwCi0tLSBhL2xpYmF2Y29kZWMvdnVsa2FuX2VuY29kZS5oCisrKyAvZGV2L251bGwK QEAgLTEsMjU5ICswLDAgQEAKLS8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCi0g KgotICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu ZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l cmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0 IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBGRm1wZWcgaXMgZGlzdHJp YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VU IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBN RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg dGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls cy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVz c2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3Qs IHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCi0gKi8K LQotI2lmbmRlZiBBVkNPREVDX1ZVTEtBTl9FTkNPREVfSAotI2RlZmluZSBBVkNPREVDX1ZVTEtB Tl9FTkNPREVfSAotCi0jaW5jbHVkZSAiY29kZWNfaWQuaCIKLSNpbmNsdWRlICJpbnRlcm5hbC5o IgotCi0jaW5jbHVkZSAiZW5jb2RlLmgiCi0jaW5jbHVkZSAiaHdjb25maWcuaCIKLQotI2luY2x1 ZGUgInZ1bGthbl92aWRlby5oIgotI2luY2x1ZGUgImh3X2Jhc2VfZW5jb2RlLmgiCi0KLXR5cGVk ZWYgc3RydWN0IEZGVnVsa2FuRW5jb2RlRGVzY3JpcHRvciB7Ci0gICAgZW51bSBBVkNvZGVjSUQg ICAgICAgICAgICAgICAgICAgY29kZWNfaWQ7Ci0gICAgRkZWdWxrYW5FeHRlbnNpb25zICAgICAg ICAgICAgICAgZW5jb2RlX2V4dGVuc2lvbjsKLSAgICBWa1ZpZGVvQ29kZWNPcGVyYXRpb25GbGFn Qml0c0tIUiBlbmNvZGVfb3A7Ci0KLSAgICBWa0V4dGVuc2lvblByb3BlcnRpZXMgZXh0X3Byb3Bz OwotfSBGRlZ1bGthbkVuY29kZURlc2NyaXB0b3I7Ci0KLXR5cGVkZWYgc3RydWN0IEZGVnVsa2Fu RW5jb2RlUGljdHVyZSB7Ci0gICAgRkZIV0Jhc2VFbmNvZGVQaWN0dXJlICBiYXNlOwotICAgIFZr VmlkZW9QaWN0dXJlUmVzb3VyY2VJbmZvS0hSIGRwYl9yZXM7Ci0gICAgVmtWaWRlb1JlZmVyZW5j ZVNsb3RJbmZvS0hSIGRwYl9zbG90OwotCi0gICAgc3RydWN0IHsKLSAgICAgICAgVmtJbWFnZVZp ZXcgICAgICAgIHZpZXc7Ci0gICAgICAgIFZrSW1hZ2VBc3BlY3RGbGFncyBhc3BlY3Q7Ci0gICAg fSBpbjsKLQotICAgIHN0cnVjdCB7Ci0gICAgICAgIFZrSW1hZ2VWaWV3ICAgICAgICB2aWV3Owot ICAgICAgICBWa0ltYWdlQXNwZWN0RmxhZ3MgYXNwZWN0OwotICAgIH0gZHBiOwotCi0gICAgdm9p ZCAgICAgICAgICAgICAgICAgICpjb2RlY19sYXllcjsKLSAgICB2b2lkICAgICAgICAgICAgICAg ICAgKmNvZGVjX3JjX2xheWVyOwotCi0gICAgRkZWa0V4ZWNDb250ZXh0ICAgICAgICpleGVjOwot ICAgIEFWQnVmZmVyUmVmICAgICAgICAgICAqcGt0X2J1ZjsKLSAgICBpbnQgICAgICAgICAgICAg ICAgICAgIHNsaWNlc19vZmZzZXQ7Ci19IEZGVnVsa2FuRW5jb2RlUGljdHVyZTsKLQotLyoqCi0g KiBDYWxsYmFjayBmb3Igd3JpdGluZyBzdHJlYW0tbGV2ZWwgaGVhZGVycy4KLSAqLwotdHlwZWRl ZiBpbnQgKCp2a2VuY19jYl93cml0ZV9zdHJlYW1faGVhZGVycykoQVZDb2RlY0NvbnRleHQgKmF2 Y3R4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhf dCAqZGF0YSwgc2l6ZV90ICpkYXRhX2xlbik7Ci0KLS8qKgotICogQ2FsbGJhY2sgZm9yIGluaXRp YWxpemluZyBjb2RlYy1zcGVjaWZpYyBwaWN0dXJlIGhlYWRlcnMuCi0gKi8KLXR5cGVkZWYgaW50 ICgqdmtlbmNfY2JfaW5pdF9waWNfaGVhZGVycykoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGRlZ1bGthbkVuY29kZVBpY3R1 cmUgKnBpYyk7Ci0KLS8qKgotICogQ2FsbGJhY2sgZm9yIHdyaXRpbmcgYWxpZ25tZW50IGRhdGEu Ci0gKiBBbGlnbiBpcyB0aGUgdmFsdWUgdG8gYWxpZ24gb2Zmc2V0IHRvLgotICovCi10eXBlZGVm IGludCAoKnZrZW5jX2NiX3dyaXRlX2ZpbGxlcikoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LCB1aW50 MzJfdCBmaWxsZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhf dCAqZGF0YSwgc2l6ZV90ICpkYXRhX2xlbik7Ci0KLS8qKgotICogQ2FsbGJhY2sgZm9yIHdyaXRp bmcgYW55IGV4dHJhIHVuaXRzIHJlcXVlc3RlZC4gZGF0YV9sZW4gbXVzdCBiZSBzZXQKLSAqIHRv IHRoZSBhdmFpbGFibGUgc2l6ZSwgYW5kIGl0cyB2YWx1ZSB3aWxsIGJlIG92ZXJ3cml0dGVuIGJ5 IHRoZSAjYnl0ZXMgd3JpdHRlbgotICogdG8gdGhlIG91dHB1dCBidWZmZXIuCi0gKi8KLXR5cGVk ZWYgaW50ICgqdmtlbmNfY2Jfd3JpdGVfZXh0cmFfaGVhZGVycykoQVZDb2RlY0NvbnRleHQgKmF2 Y3R4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGRlZ1bGth bkVuY29kZVBpY3R1cmUgKnBpYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdWludDhfdCAqZGF0YSwgc2l6ZV90ICpkYXRhX2xlbik7Ci0KLXR5cGVkZWYgc3Ry dWN0IEZGVnVsa2FuQ29kZWMgewotICAgIC8qKgotICAgICAqIENvZGVjIGZlYXR1cmUgZmxhZ3Mu Ci0gICAgICovCi0gICAgaW50IGZsYWdzOwotLyogQ29kZWMgb3V0cHV0IHBhY2tldCB3aXRob3V0 IHRpbWVzdGFtcCBkZWxheSwgd2hpY2ggbWVhbnMgdGhlCi0gKiBvdXRwdXQgcGFja2V0IGhhcyBz YW1lIFBUUyBhbmQgRFRTLiBGb3IgQVYxLiAqLwotI2RlZmluZSBWS19FTkNfRkxBR19OT19ERUxB WSAxIDw8IDYKLQotICAgIC8qKgotICAgICAqIFNpemUgb2YgdGhlIGNvZGVjLXNwZWNpZmljIHBp Y3R1cmUgc3RydWN0LgotICAgICAqLwotICAgIHNpemVfdCBwaWN0dXJlX3ByaXZfZGF0YV9zaXpl OwotCi0gICAgLyoqCi0gICAgICogU2l6ZSBvZiB0aGUgZmlsbGVyIGhlYWRlci4KLSAgICAgKi8K LSAgICBzaXplX3QgZmlsbGVyX2hlYWRlcl9zaXplOwotCi0gICAgLyoqCi0gICAgICogSW5pdGlh bGl6ZSBjb2RlYy1zcGVjaWZpYyBzdHJ1Y3RzIGluIGEgVnVsa2FuIHByb2ZpbGUuCi0gICAgICov Ci0gICAgaW50ICgqaW5pdF9wcm9maWxlKShBVkNvZGVjQ29udGV4dCAqYXZjdHgsIFZrVmlkZW9Q cm9maWxlSW5mb0tIUiAqcHJvZmlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnBu ZXh0KTsKLQotICAgIC8qKgotICAgICAqIEluaXRpYWxpemUgY29kZWMtc3BlY2lmaWMgcmF0ZSBj b250cm9sIHN0cnVjdHVyZXMgZm9yIGEgcGljdHVyZS4KLSAgICAgKi8KLSAgICBpbnQgKCppbml0 X3BpY19yYykoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LCBGRkhXQmFzZUVuY29kZVBpY3R1cmUgKnBp YywKLSAgICAgICAgICAgICAgICAgICAgICAgVmtWaWRlb0VuY29kZVJhdGVDb250cm9sSW5mb0tI UiAqcmNfaW5mbywKLSAgICAgICAgICAgICAgICAgICAgICAgVmtWaWRlb0VuY29kZVJhdGVDb250 cm9sTGF5ZXJJbmZvS0hSICpyY19sYXllcik7Ci0KLSAgICAvKioKLSAgICAgKiBJbml0aWFsaXpl IGNvZGVjLXNwZWNpZmljIHBpY3R1cmUgcGFyYW1ldGVycy4KLSAgICAgKi8KLSAgICBpbnQgKCpp bml0X3BpY19wYXJhbXMpKEFWQ29kZWNDb250ZXh0ICphdmN0eCwgRkZIV0Jhc2VFbmNvZGVQaWN0 dXJlICpwaWMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBWa1ZpZGVvRW5jb2RlSW5mb0tI UiAqZW5jb2RlX2luZm8pOwotCi0gICAgLyoqCi0gICAgICogQ2FsbGJhY2sgZm9yIHdyaXRpbmcg c3RyZWFtIGhlYWRlcnMuCi0gICAgICovCi0gICAgaW50ICgqd3JpdGVfc2VxdWVuY2VfaGVhZGVy cykoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEZGSFdCYXNlRW5jb2RlUGljdHVyZSAqYmFzZV9waWMsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdWludDhfdCAqZGF0YSwgc2l6ZV90ICpkYXRhX2xlbik7Ci0KLSAgICAv KioKLSAgICAgKiBDYWxsYmFjayBmb3Igd3JpdGluZyBhbGlnbm1lbnQgZGF0YS4KLSAgICAgKi8K LSAgICBpbnQgKCp3cml0ZV9maWxsZXIpKEFWQ29kZWNDb250ZXh0ICphdmN0eCwgdWludDMyX3Qg ZmlsbGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqZGF0YSwgc2l6ZV90ICpk YXRhX2xlbik7Ci0KLSAgICAvKioKLSAgICAgKiBDYWxsYmFjayBmb3Igd3JpdGluZyBhbnkgZXh0 cmEgdW5pdHMgcmVxdWVzdGVkLiBkYXRhX2xlbiBtdXN0IGJlIHNldAotICAgICAqIHRvIHRoZSBh dmFpbGFibGUgc2l6ZSwgYW5kIGl0cyB2YWx1ZSB3aWxsIGJlIG92ZXJ3cml0dGVuIGJ5IHRoZSAj Ynl0ZXMgd3JpdHRlbgotICAgICAqIHRvIHRoZSBvdXRwdXQgYnVmZmVyLgotICAgICAqLwotICAg IGludCAoKndyaXRlX2V4dHJhX2hlYWRlcnMpKEFWQ29kZWNDb250ZXh0ICphdmN0eCwgRkZIV0Jh c2VFbmNvZGVQaWN0dXJlICpwaWMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWlu dDhfdCAqZGF0YSwgc2l6ZV90ICpkYXRhX2xlbik7Ci19IEZGVnVsa2FuQ29kZWM7Ci0KLXR5cGVk ZWYgc3RydWN0IEZGVmtFbmNvZGVDb21tb25PcHRpb25zIHsKLSAgICBpbnQgcXA7Ci0gICAgaW50 IHF1YWxpdHk7Ci0gICAgaW50IHByb2ZpbGU7Ci0gICAgaW50IGxldmVsOwotICAgIGludCB0aWVy OwotICAgIGludCBhc3luY19kZXB0aDsKLSAgICBWa1ZpZGVvRW5jb2RlVXNhZ2VGbGFnQml0c0tI UiB1c2FnZTsKLSAgICBWa1ZpZGVvRW5jb2RlQ29udGVudEZsYWdCaXRzS0hSIGNvbnRlbnQ7Ci0g ICAgVmtWaWRlb0VuY29kZVR1bmluZ01vZGVLSFIgdHVuZTsKLQotICAgIFZrVmlkZW9FbmNvZGVS YXRlQ29udHJvbE1vZGVGbGFnQml0c0tIUiByY19tb2RlOwotI2RlZmluZSBGRl9WS19SQ19NT0RF X0FVVE8gMHhGRkZGRkZGRgotfSBGRlZrRW5jb2RlQ29tbW9uT3B0aW9uczsKLQotdHlwZWRlZiBz dHJ1Y3QgRkZWdWxrYW5FbmNvZGVDb250ZXh0IHsKLSAgICBGRlZ1bGthbkNvbnRleHQgczsKLSAg ICBGRlZrVmlkZW9Db21tb24gY29tbW9uOwotICAgIEZGSFdCYXNlRW5jb2RlQ29udGV4dCBiYXNl OwotICAgIGNvbnN0IEZGVnVsa2FuQ29kZWMgKmNvZGVjOwotCi0gICAgaW50IGV4cGxpY2l0X3Fw OwotICAgIGludCBzZXNzaW9uX3Jlc2V0OwotCi0gICAgLyogU2Vzc2lvbiBwYXJhbWV0ZXJzIG9i amVjdCwgaW5pdGlhbGl6ZWQgYnkgZWFjaCBjb2RlYyBpbmRlcGVuZGVudGx5Ci0gICAgICogYW5k IHNldCBoZXJlLiAqLwotICAgIFZrVmlkZW9TZXNzaW9uUGFyYW1ldGVyc0tIUiBzZXNzaW9uX3Bh cmFtczsKLQotICAgIEFWQnVmZmVyUG9vbCAqYnVmX3Bvb2w7Ci0KLSAgICBWa0Zvcm1hdCBwaWNf Zm9ybWF0OwotCi0gICAgRkZWa0VuY29kZUNvbW1vbk9wdGlvbnMgb3B0czsKLQotICAgIFZrVmlk ZW9Qcm9maWxlSW5mb0tIUiBwcm9maWxlOwotICAgIFZrVmlkZW9Qcm9maWxlTGlzdEluZm9LSFIg cHJvZmlsZV9saXN0OwotICAgIFZrVmlkZW9DYXBhYmlsaXRpZXNLSFIgY2FwczsKLSAgICBWa1Zp ZGVvRW5jb2RlUXVhbGl0eUxldmVsUHJvcGVydGllc0tIUiBxdWFsaXR5X3Byb3BzOwotICAgIFZr VmlkZW9FbmNvZGVDYXBhYmlsaXRpZXNLSFIgZW5jX2NhcHM7Ci0gICAgVmtWaWRlb0VuY29kZVVz YWdlSW5mb0tIUiB1c2FnZV9pbmZvOwotCi0gICAgQVZWdWxrYW5EZXZpY2VRdWV1ZUZhbWlseSAq cWZfZW5jOwotICAgIEZGVmtFeGVjUG9vbCBlbmNfcG9vbDsKLQotICAgIEZGSFdCYXNlRW5jb2Rl UGljdHVyZSAqc2xvdHNbMzJdOwotfSBGRlZ1bGthbkVuY29kZUNvbnRleHQ7Ci0KLSNkZWZpbmUg VlVMS0FOX0VOQ09ERV9DT01NT05fT1BUSU9OUyBcCi0gICAgeyAicXAiLCAiVXNlIGFuIGV4cGxp Y2l0IGNvbnN0YW50IHF1YW50aXplciBmb3IgdGhlIHdob2xlIHN0cmVhbSIsIE9GRlNFVChjb21t b24ub3B0cy5xcCksIEFWX09QVF9UWVBFX0lOVCwgeyAuaTY0ID0gLTEgfSwgLTEsIDI1NSwgRkxB R1MgfSwgXAotICAgIHsgInF1YWxpdHkiLCAiU2V0IGVuY29kZSBxdWFsaXR5ICh0cmFkZXMgb2Zm IGFnYWluc3Qgc3BlZWQsIGhpZ2hlciBpcyBmYXN0ZXIpIiwgT0ZGU0VUKGNvbW1vbi5vcHRzLnF1 YWxpdHkpLCBBVl9PUFRfVFlQRV9JTlQsIHsgLmk2NCA9IDAgfSwgMCwgSU5UX01BWCwgRkxBR1Mg fSwgXAotICAgIHsgInJjX21vZGUiLCAiU2VsZWN0IHJhdGUgY29udHJvbCB0eXBlIiwgT0ZGU0VU KGNvbW1vbi5vcHRzLnJjX21vZGUpLCBBVl9PUFRfVFlQRV9JTlQsIHsgLmk2NCA9IEZGX1ZLX1JD X01PREVfQVVUTyB9LCAwLCBGRl9WS19SQ19NT0RFX0FVVE8sIEZMQUdTLCAicmNfbW9kZSIgfSwg XAotICAgICAgICB7ICJhdXRvIiwgICAgIkNob29zZSBtb2RlIGF1dG9tYXRpY2FsbHkgYmFzZWQg b24gcGFyYW1ldGVycyIsIDAsIEFWX09QVF9UWVBFX0NPTlNULCB7IC5pNjQgPSBGRl9WS19SQ19N T0RFX0FVVE8gfSwgSU5UX01JTiwgSU5UX01BWCwgRkxBR1MsICJyY19tb2RlIiB9LCBcCi0gICAg ICAgIHsgImRyaXZlciIsICAiRHJpdmVyLXNwZWNpZmljIHJhdGUgY29udHJvbCIsIDAsIEFWX09Q VF9UWVBFX0NPTlNULCB7IC5pNjQgPSBWS19WSURFT19FTkNPREVfUkFURV9DT05UUk9MX01PREVf REVGQVVMVF9LSFIgICAgICB9LCBJTlRfTUlOLCBJTlRfTUFYLCBGTEFHUywgInJjX21vZGUiIH0s IFwKLSAgICAgICAgeyAiY3FwIiwgICAgICJDb25zdGFudCBxdWFudGl6ZXIgbW9kZSIsIDAsIEFW X09QVF9UWVBFX0NPTlNULCB7IC5pNjQgPSBWS19WSURFT19FTkNPREVfUkFURV9DT05UUk9MX01P REVfRElTQUJMRURfQklUX0tIUiB9LCBJTlRfTUlOLCBJTlRfTUFYLCBGTEFHUywgInJjX21vZGUi IH0sIFwKLSAgICAgICAgeyAiY2JyIiwgICAgICJDb25zdGFudCBiaXRyYXRlIG1vZGUiLCAwLCBB Vl9PUFRfVFlQRV9DT05TVCwgeyAuaTY0ID0gVktfVklERU9fRU5DT0RFX1JBVEVfQ09OVFJPTF9N T0RFX0NCUl9CSVRfS0hSICAgICAgfSwgSU5UX01JTiwgSU5UX01BWCwgRkxBR1MsICJyY19tb2Rl IiB9LCBcCi0gICAgICAgIHsgInZiciIsICAgICAiVmFyaWFibGUgYml0cmF0ZSBtb2RlIiwgMCwg QVZfT1BUX1RZUEVfQ09OU1QsIHsgLmk2NCA9IFZLX1ZJREVPX0VOQ09ERV9SQVRFX0NPTlRST0xf TU9ERV9WQlJfQklUX0tIUiAgICAgIH0sIElOVF9NSU4sIElOVF9NQVgsIEZMQUdTLCAicmNfbW9k ZSIgfSwgXAotICAgIHsgInR1bmUiLCAiU2VsZWN0IHR1bmluZyB0eXBlIiwgT0ZGU0VUKGNvbW1v bi5vcHRzLnR1bmUpLCBBVl9PUFRfVFlQRV9JTlQsIHsgLmk2NCA9IFZLX1ZJREVPX0VOQ09ERV9U VU5JTkdfTU9ERV9ERUZBVUxUX0tIUiB9LCAwLCBJTlRfTUFYLCBGTEFHUywgInR1bmUiIH0sIFwK LSAgICAgICAgeyAiZGVmYXVsdCIsICAiRGVmYXVsdCB0dW5pbmciLCAwLCBBVl9PUFRfVFlQRV9D T05TVCwgeyAuaTY0ID0gVktfVklERU9fRU5DT0RFX1RVTklOR19NT0RFX0RFRkFVTFRfS0hSICAg ICAgICAgICB9LCBJTlRfTUlOLCBJTlRfTUFYLCBGTEFHUywgInR1bmUiIH0sIFwKLSAgICAgICAg eyAiaHEiLCAgICAgICAiSGlnaCBxdWFsaXR5IHR1bmluZyIsIDAsIEFWX09QVF9UWVBFX0NPTlNU LCB7IC5pNjQgPSBWS19WSURFT19FTkNPREVfVFVOSU5HX01PREVfSElHSF9RVUFMSVRZX0tIUiAg ICAgIH0sIElOVF9NSU4sIElOVF9NQVgsIEZMQUdTLCAidHVuZSIgfSwgXAotICAgICAgICB7ICJs bCIsICAgICAgICJMb3ctbGF0ZW5jeSB0dW5pbmciLCAwLCBBVl9PUFRfVFlQRV9DT05TVCwgeyAu aTY0ID0gVktfVklERU9fRU5DT0RFX1RVTklOR19NT0RFX0xPV19MQVRFTkNZX0tIUiAgICAgICB9 LCBJTlRfTUlOLCBJTlRfTUFYLCBGTEFHUywgInR1bmUiIH0sIFwKLSAgICAgICAgeyAidWxsIiwg ICAgICAiVWx0cmEgbG93LWxhdGVuY3kgdHVuaW5nIiwgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsg Lmk2NCA9IFZLX1ZJREVPX0VOQ09ERV9UVU5JTkdfTU9ERV9VTFRSQV9MT1dfTEFURU5DWV9LSFIg fSwgSU5UX01JTiwgSU5UX01BWCwgRkxBR1MsICJ0dW5lIiB9LCBcCi0gICAgICAgIHsgImxvc3Ns ZXNzIiwgIkxvc3NsZXNzIG1vZGUgdHVuaW5nIiwgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsgLmk2 NCA9IFZLX1ZJREVPX0VOQ09ERV9UVU5JTkdfTU9ERV9MT1NTTEVTU19LSFIgICAgICAgICAgfSwg SU5UX01JTiwgSU5UX01BWCwgRkxBR1MsICJ0dW5lIiB9LCBcCi0gICAgeyAidXNhZ2UiLCAiU2Vs ZWN0IHVzYWdlIHR5cGUiLCBPRkZTRVQoY29tbW9uLm9wdHMudXNhZ2UpLCBBVl9PUFRfVFlQRV9G TEFHUywgeyAuaTY0ID0gVktfVklERU9fRU5DT0RFX1VTQUdFX0RFRkFVTFRfS0hSIH0sIDAsIElO VF9NQVgsIEZMQUdTLCAidXNhZ2UiIH0sIFwKLSAgICAgICAgeyAiZGVmYXVsdCIsICAgICJEZWZh dWx0IG9wdGltaXphdGlvbnMiLCAwLCBBVl9PUFRfVFlQRV9DT05TVCwgeyAuaTY0ID0gVktfVklE RU9fRU5DT0RFX1VTQUdFX0RFRkFVTFRfS0hSICAgICAgICAgIH0sIElOVF9NSU4sIElOVF9NQVgs IEZMQUdTLCAidXNhZ2UiIH0sIFwKLSAgICAgICAgeyAidHJhbnNjb2RlIiwgICJPcHRpbWl6ZSBm b3IgdHJhbnNjb2RpbmciLCAwLCBBVl9PUFRfVFlQRV9DT05TVCwgeyAuaTY0ID0gVktfVklERU9f RU5DT0RFX1VTQUdFX1RSQU5TQ09ESU5HX0JJVF9LSFIgIH0sIElOVF9NSU4sIElOVF9NQVgsIEZM QUdTLCAidXNhZ2UiIH0sIFwKLSAgICAgICAgeyAic3RyZWFtIiwgICAgICJPcHRpbWl6ZSBmb3Ig c3RyZWFtaW5nIiwgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsgLmk2NCA9IFZLX1ZJREVPX0VOQ09E RV9VU0FHRV9TVFJFQU1JTkdfQklUX0tIUiAgICB9LCBJTlRfTUlOLCBJTlRfTUFYLCBGTEFHUywg InVzYWdlIiB9LCBcCi0gICAgICAgIHsgInJlY29yZCIsICAgICAiT3B0aW1pemUgZm9yIG9mZmxp bmUgcmVjb3JkaW5nIiwgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsgLmk2NCA9IFZLX1ZJREVPX0VO Q09ERV9VU0FHRV9SRUNPUkRJTkdfQklUX0tIUiAgICB9LCBJTlRfTUlOLCBJTlRfTUFYLCBGTEFH UywgInVzYWdlIiB9LCBcCi0gICAgICAgIHsgImNvbmZlcmVuY2UiLCAiT3B0aW1pemUgZm9yIHRl bGVjb25mZXJlbmNpbmciLCAwLCBBVl9PUFRfVFlQRV9DT05TVCwgeyAuaTY0ID0gVktfVklERU9f RU5DT0RFX1VTQUdFX0NPTkZFUkVOQ0lOR19CSVRfS0hSIH0sIElOVF9NSU4sIElOVF9NQVgsIEZM QUdTLCAidXNhZ2UiIH0sIFwKLSAgICB7ICJjb250ZW50IiwgIlNlbGVjdCBjb250ZW50IHR5cGUi LCBPRkZTRVQoY29tbW9uLm9wdHMuY29udGVudCksIEFWX09QVF9UWVBFX0ZMQUdTLCB7IC5pNjQg PSBWS19WSURFT19FTkNPREVfQ09OVEVOVF9ERUZBVUxUX0tIUiB9LCAwLCBJTlRfTUFYLCBGTEFH UywgImNvbnRlbnQiIH0sIFwKLSAgICAgICAgeyAiZGVmYXVsdCIsICAiRGVmYXVsdCBjb250ZW50 IiwgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsgLmk2NCA9IFZLX1ZJREVPX0VOQ09ERV9DT05URU5U X0RFRkFVTFRfS0hSICAgICAgfSwgSU5UX01JTiwgSU5UX01BWCwgRkxBR1MsICJjb250ZW50IiB9 LCBcCi0gICAgICAgIHsgImNhbWVyYSIsICAgIkNhbWVyYSBmb290YWdlIiwgMCwgQVZfT1BUX1RZ UEVfQ09OU1QsIHsgLmk2NCA9IFZLX1ZJREVPX0VOQ09ERV9DT05URU5UX0NBTUVSQV9CSVRfS0hS ICAgfSwgSU5UX01JTiwgSU5UX01BWCwgRkxBR1MsICJjb250ZW50IiB9LCBcCi0gICAgICAgIHsg ImRlc2t0b3AiLCAgIlNjcmVlbiByZWNvcmRpbmciLCAwLCBBVl9PUFRfVFlQRV9DT05TVCwgeyAu aTY0ID0gVktfVklERU9fRU5DT0RFX0NPTlRFTlRfREVTS1RPUF9CSVRfS0hSICB9LCBJTlRfTUlO LCBJTlRfTUFYLCBGTEFHUywgImNvbnRlbnQiIH0sIFwKLSAgICAgICAgeyAicmVuZGVyZWQiLCAi R2FtZSBvciAzRCBjb250ZW50IiwgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsgLmk2NCA9IFZLX1ZJ REVPX0VOQ09ERV9DT05URU5UX1JFTkRFUkVEX0JJVF9LSFIgfSwgSU5UX01JTiwgSU5UX01BWCwg RkxBR1MsICJjb250ZW50IiB9Ci0KLS8qKgotICogSW5pdGlhbGl6ZSBlbmNvZGVyLgotICovCi1h dl9jb2xkIGludCBmZl92dWxrYW5fZW5jb2RlX2luaXQoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LCBG RlZ1bGthbkVuY29kZUNvbnRleHQgKmN0eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBGRlZ1bGthbkVuY29kZURlc2NyaXB0b3IgKnZrX2Rlc2MsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRkZWdWxrYW5Db2RlYyAqY29kZWMsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqY29kZWNfY2Fwcywgdm9pZCAqcXVh bGl0eV9wbmV4dCk7Ci0KLS8qKgotICogV3JpdGUgb3V0IHRoZSBleHRyYWRhdGEgaW4gY2FzZSBp dHMgbmVlZGVkLgotICovCi1hdl9jb2xkIGludCBmZl92dWxrYW5fd3JpdGVfZ2xvYmFsX2hlYWRl cihBVkNvZGVjQ29udGV4dCAqYXZjdHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBGRlZ1bGthbkVuY29kZUNvbnRleHQgKmN0eCk7Ci0KLS8qKgotICogRW5jb2Rl LgotICovCi1pbnQgZmZfdnVsa2FuX2VuY29kZV9yZWNlaXZlX3BhY2tldChBVkNvZGVjQ29udGV4 dCAqYXZjdHgsIEFWUGFja2V0ICpwa3QpOwotCi0vKioKLSAqIFVuaW5pdGlhbGl6ZSBlbmNvZGVy LgotICovCi12b2lkIGZmX3Z1bGthbl9lbmNvZGVfdW5pbml0KEZGVnVsa2FuRW5jb2RlQ29udGV4 dCAqY3R4KTsKLQotLyoqCi0gKiBDcmVhdGUgc2Vzc2lvbiBwYXJhbWV0ZXJzLgotICovCi1pbnQg ZmZfdnVsa2FuX2VuY29kZV9jcmVhdGVfc2Vzc2lvbl9wYXJhbXMoQVZDb2RlY0NvbnRleHQgKmF2 Y3R4LCBGRlZ1bGthbkVuY29kZUNvbnRleHQgKmN0eCwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB2b2lkICpjb2RlY19wYXJhbXNfcG5leHQpOwotCi0vKioKLSAq IFBhcGVyd29yay4KLSAqLwotZXh0ZXJuIGNvbnN0IEFWQ29kZWNIV0NvbmZpZ0ludGVybmFsICpj b25zdCBmZl92dWxrYW5fZW5jb2RlX2h3X2NvbmZpZ3NbXTsKLQotI2VuZGlmIC8qIEFWQ09ERUNf VlVMS0FOX0VOQ09ERV9IICovCi0tIAoyLjQ5LjEKCgpGcm9tIGY5MzM5MmVhNmUwODQzMTYyNTQ3 NWUzNzQ0ZTBiMzkxZWJjNTE1MTYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCkZyb206IEphbWFp a2ExIDxsdWthc3pjejE4QHdwLnBsPgpEYXRlOiBXZWQsIDMgU2VwIDIwMjUgMTM6MzI6MTQgKzAw MDAKU3ViamVjdDogW1BBVENIIDA3Mi8xMThdIENoYW5naW5nIHZ1bGthbiBmaWxlIGRpcmVjdG9y eQoKLS0tCiBsaWJhdmNvZGVjL3Z1bGthbi92dWxrYW5fZW5jb2RlLmggfCAyNTkgKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrCiAxIGZpbGUgY2hhbmdlZCwgMjU5IGluc2VydGlvbnMoKykK IGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJhdmNvZGVjL3Z1bGthbi92dWxrYW5fZW5jb2RlLmgKCmRp ZmYgLS1naXQgYS9saWJhdmNvZGVjL3Z1bGthbi92dWxrYW5fZW5jb2RlLmggYi9saWJhdmNvZGVj L3Z1bGthbi92dWxrYW5fZW5jb2RlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMC4uNTgzMTk5YTdkNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmF2Y29kZWMvdnVsa2FuL3Z1 bGthbl9lbmNvZGUuaApAQCAtMCwwICsxLDI1OSBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0 IG9mIEZGbXBlZy4KKyAqCisgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBM aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIEZG bXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCBG Rm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24s IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAt MTMwMSBVU0EKKyAqLworCisjaWZuZGVmIEFWQ09ERUNfVlVMS0FOX0VOQ09ERV9ICisjZGVmaW5l IEFWQ09ERUNfVlVMS0FOX0VOQ09ERV9ICisKKyNpbmNsdWRlICJsaWJhdmNvZGVjL2NvZGVjX2lk LmgiCisjaW5jbHVkZSAibGliYXZjb2RlYy9pbnRlcm5hbC5oIgorCisjaW5jbHVkZSAibGliYXZj b2RlYy9lbmNvZGUuaCIKKyNpbmNsdWRlICJsaWJhdmNvZGVjL2h3Y29uZmlnLmgiCisKKyNpbmNs dWRlICJ2dWxrYW5fdmlkZW8uaCIKKyNpbmNsdWRlICJsaWJhdmNvZGVjL2h3X2Jhc2VfZW5jb2Rl LmgiCisKK3R5cGVkZWYgc3RydWN0IEZGVnVsa2FuRW5jb2RlRGVzY3JpcHRvciB7CisgICAgZW51 bSBBVkNvZGVjSUQgICAgICAgICAgICAgICAgICAgY29kZWNfaWQ7CisgICAgRkZWdWxrYW5FeHRl bnNpb25zICAgICAgICAgICAgICAgZW5jb2RlX2V4dGVuc2lvbjsKKyAgICBWa1ZpZGVvQ29kZWNP cGVyYXRpb25GbGFnQml0c0tIUiBlbmNvZGVfb3A7CisKKyAgICBWa0V4dGVuc2lvblByb3BlcnRp ZXMgZXh0X3Byb3BzOworfSBGRlZ1bGthbkVuY29kZURlc2NyaXB0b3I7CisKK3R5cGVkZWYgc3Ry dWN0IEZGVnVsa2FuRW5jb2RlUGljdHVyZSB7CisgICAgRkZIV0Jhc2VFbmNvZGVQaWN0dXJlICBi YXNlOworICAgIFZrVmlkZW9QaWN0dXJlUmVzb3VyY2VJbmZvS0hSIGRwYl9yZXM7CisgICAgVmtW aWRlb1JlZmVyZW5jZVNsb3RJbmZvS0hSIGRwYl9zbG90OworCisgICAgc3RydWN0IHsKKyAgICAg ICAgVmtJbWFnZVZpZXcgICAgICAgIHZpZXc7CisgICAgICAgIFZrSW1hZ2VBc3BlY3RGbGFncyBh c3BlY3Q7CisgICAgfSBpbjsKKworICAgIHN0cnVjdCB7CisgICAgICAgIFZrSW1hZ2VWaWV3ICAg ICAgICB2aWV3OworICAgICAgICBWa0ltYWdlQXNwZWN0RmxhZ3MgYXNwZWN0OworICAgIH0gZHBi OworCisgICAgdm9pZCAgICAgICAgICAgICAgICAgICpjb2RlY19sYXllcjsKKyAgICB2b2lkICAg ICAgICAgICAgICAgICAgKmNvZGVjX3JjX2xheWVyOworCisgICAgRkZWa0V4ZWNDb250ZXh0ICAg ICAgICpleGVjOworICAgIEFWQnVmZmVyUmVmICAgICAgICAgICAqcGt0X2J1ZjsKKyAgICBpbnQg ICAgICAgICAgICAgICAgICAgIHNsaWNlc19vZmZzZXQ7Cit9IEZGVnVsa2FuRW5jb2RlUGljdHVy ZTsKKworLyoqCisgKiBDYWxsYmFjayBmb3Igd3JpdGluZyBzdHJlYW0tbGV2ZWwgaGVhZGVycy4K KyAqLwordHlwZWRlZiBpbnQgKCp2a2VuY19jYl93cml0ZV9zdHJlYW1faGVhZGVycykoQVZDb2Rl Y0NvbnRleHQgKmF2Y3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdWludDhfdCAqZGF0YSwgc2l6ZV90ICpkYXRhX2xlbik7CisKKy8qKgorICogQ2FsbGJh Y2sgZm9yIGluaXRpYWxpemluZyBjb2RlYy1zcGVjaWZpYyBwaWN0dXJlIGhlYWRlcnMuCisgKi8K K3R5cGVkZWYgaW50ICgqdmtlbmNfY2JfaW5pdF9waWNfaGVhZGVycykoQVZDb2RlY0NvbnRleHQg KmF2Y3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGRlZ1bGth bkVuY29kZVBpY3R1cmUgKnBpYyk7CisKKy8qKgorICogQ2FsbGJhY2sgZm9yIHdyaXRpbmcgYWxp Z25tZW50IGRhdGEuCisgKiBBbGlnbiBpcyB0aGUgdmFsdWUgdG8gYWxpZ24gb2Zmc2V0IHRvLgor ICovCit0eXBlZGVmIGludCAoKnZrZW5jX2NiX3dyaXRlX2ZpbGxlcikoQVZDb2RlY0NvbnRleHQg KmF2Y3R4LCB1aW50MzJfdCBmaWxsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdWludDhfdCAqZGF0YSwgc2l6ZV90ICpkYXRhX2xlbik7CisKKy8qKgorICogQ2FsbGJh Y2sgZm9yIHdyaXRpbmcgYW55IGV4dHJhIHVuaXRzIHJlcXVlc3RlZC4gZGF0YV9sZW4gbXVzdCBi ZSBzZXQKKyAqIHRvIHRoZSBhdmFpbGFibGUgc2l6ZSwgYW5kIGl0cyB2YWx1ZSB3aWxsIGJlIG92 ZXJ3cml0dGVuIGJ5IHRoZSAjYnl0ZXMgd3JpdHRlbgorICogdG8gdGhlIG91dHB1dCBidWZmZXIu CisgKi8KK3R5cGVkZWYgaW50ICgqdmtlbmNfY2Jfd3JpdGVfZXh0cmFfaGVhZGVycykoQVZDb2Rl Y0NvbnRleHQgKmF2Y3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBGRlZ1bGthbkVuY29kZVBpY3R1cmUgKnBpYywKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqZGF0YSwgc2l6ZV90ICpkYXRhX2xlbik7CisK K3R5cGVkZWYgc3RydWN0IEZGVnVsa2FuQ29kZWMgeworICAgIC8qKgorICAgICAqIENvZGVjIGZl YXR1cmUgZmxhZ3MuCisgICAgICovCisgICAgaW50IGZsYWdzOworLyogQ29kZWMgb3V0cHV0IHBh Y2tldCB3aXRob3V0IHRpbWVzdGFtcCBkZWxheSwgd2hpY2ggbWVhbnMgdGhlCisgKiBvdXRwdXQg cGFja2V0IGhhcyBzYW1lIFBUUyBhbmQgRFRTLiBGb3IgQVYxLiAqLworI2RlZmluZSBWS19FTkNf RkxBR19OT19ERUxBWSAxIDw8IDYKKworICAgIC8qKgorICAgICAqIFNpemUgb2YgdGhlIGNvZGVj LXNwZWNpZmljIHBpY3R1cmUgc3RydWN0LgorICAgICAqLworICAgIHNpemVfdCBwaWN0dXJlX3By aXZfZGF0YV9zaXplOworCisgICAgLyoqCisgICAgICogU2l6ZSBvZiB0aGUgZmlsbGVyIGhlYWRl ci4KKyAgICAgKi8KKyAgICBzaXplX3QgZmlsbGVyX2hlYWRlcl9zaXplOworCisgICAgLyoqCisg ICAgICogSW5pdGlhbGl6ZSBjb2RlYy1zcGVjaWZpYyBzdHJ1Y3RzIGluIGEgVnVsa2FuIHByb2Zp bGUuCisgICAgICovCisgICAgaW50ICgqaW5pdF9wcm9maWxlKShBVkNvZGVjQ29udGV4dCAqYXZj dHgsIFZrVmlkZW9Qcm9maWxlSW5mb0tIUiAqcHJvZmlsZSwKKyAgICAgICAgICAgICAgICAgICAg ICAgIHZvaWQgKnBuZXh0KTsKKworICAgIC8qKgorICAgICAqIEluaXRpYWxpemUgY29kZWMtc3Bl Y2lmaWMgcmF0ZSBjb250cm9sIHN0cnVjdHVyZXMgZm9yIGEgcGljdHVyZS4KKyAgICAgKi8KKyAg ICBpbnQgKCppbml0X3BpY19yYykoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LCBGRkhXQmFzZUVuY29k ZVBpY3R1cmUgKnBpYywKKyAgICAgICAgICAgICAgICAgICAgICAgVmtWaWRlb0VuY29kZVJhdGVD b250cm9sSW5mb0tIUiAqcmNfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgVmtWaWRlb0Vu Y29kZVJhdGVDb250cm9sTGF5ZXJJbmZvS0hSICpyY19sYXllcik7CisKKyAgICAvKioKKyAgICAg KiBJbml0aWFsaXplIGNvZGVjLXNwZWNpZmljIHBpY3R1cmUgcGFyYW1ldGVycy4KKyAgICAgKi8K KyAgICBpbnQgKCppbml0X3BpY19wYXJhbXMpKEFWQ29kZWNDb250ZXh0ICphdmN0eCwgRkZIV0Jh c2VFbmNvZGVQaWN0dXJlICpwaWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBWa1ZpZGVv RW5jb2RlSW5mb0tIUiAqZW5jb2RlX2luZm8pOworCisgICAgLyoqCisgICAgICogQ2FsbGJhY2sg Zm9yIHdyaXRpbmcgc3RyZWFtIGhlYWRlcnMuCisgICAgICovCisgICAgaW50ICgqd3JpdGVfc2Vx dWVuY2VfaGVhZGVycykoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEZGSFdCYXNlRW5jb2RlUGljdHVyZSAqYmFzZV9waWMsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqZGF0YSwgc2l6ZV90ICpkYXRhX2xl bik7CisKKyAgICAvKioKKyAgICAgKiBDYWxsYmFjayBmb3Igd3JpdGluZyBhbGlnbm1lbnQgZGF0 YS4KKyAgICAgKi8KKyAgICBpbnQgKCp3cml0ZV9maWxsZXIpKEFWQ29kZWNDb250ZXh0ICphdmN0 eCwgdWludDMyX3QgZmlsbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqZGF0 YSwgc2l6ZV90ICpkYXRhX2xlbik7CisKKyAgICAvKioKKyAgICAgKiBDYWxsYmFjayBmb3Igd3Jp dGluZyBhbnkgZXh0cmEgdW5pdHMgcmVxdWVzdGVkLiBkYXRhX2xlbiBtdXN0IGJlIHNldAorICAg ICAqIHRvIHRoZSBhdmFpbGFibGUgc2l6ZSwgYW5kIGl0cyB2YWx1ZSB3aWxsIGJlIG92ZXJ3cml0 dGVuIGJ5IHRoZSAjYnl0ZXMgd3JpdHRlbgorICAgICAqIHRvIHRoZSBvdXRwdXQgYnVmZmVyLgor ICAgICAqLworICAgIGludCAoKndyaXRlX2V4dHJhX2hlYWRlcnMpKEFWQ29kZWNDb250ZXh0ICph dmN0eCwgRkZIV0Jhc2VFbmNvZGVQaWN0dXJlICpwaWMsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdWludDhfdCAqZGF0YSwgc2l6ZV90ICpkYXRhX2xlbik7Cit9IEZGVnVsa2FuQ29k ZWM7CisKK3R5cGVkZWYgc3RydWN0IEZGVmtFbmNvZGVDb21tb25PcHRpb25zIHsKKyAgICBpbnQg cXA7CisgICAgaW50IHF1YWxpdHk7CisgICAgaW50IHByb2ZpbGU7CisgICAgaW50IGxldmVsOwor ICAgIGludCB0aWVyOworICAgIGludCBhc3luY19kZXB0aDsKKyAgICBWa1ZpZGVvRW5jb2RlVXNh Z2VGbGFnQml0c0tIUiB1c2FnZTsKKyAgICBWa1ZpZGVvRW5jb2RlQ29udGVudEZsYWdCaXRzS0hS IGNvbnRlbnQ7CisgICAgVmtWaWRlb0VuY29kZVR1bmluZ01vZGVLSFIgdHVuZTsKKworICAgIFZr VmlkZW9FbmNvZGVSYXRlQ29udHJvbE1vZGVGbGFnQml0c0tIUiByY19tb2RlOworI2RlZmluZSBG Rl9WS19SQ19NT0RFX0FVVE8gMHhGRkZGRkZGRgorfSBGRlZrRW5jb2RlQ29tbW9uT3B0aW9uczsK KwordHlwZWRlZiBzdHJ1Y3QgRkZWdWxrYW5FbmNvZGVDb250ZXh0IHsKKyAgICBGRlZ1bGthbkNv bnRleHQgczsKKyAgICBGRlZrVmlkZW9Db21tb24gY29tbW9uOworICAgIEZGSFdCYXNlRW5jb2Rl Q29udGV4dCBiYXNlOworICAgIGNvbnN0IEZGVnVsa2FuQ29kZWMgKmNvZGVjOworCisgICAgaW50 IGV4cGxpY2l0X3FwOworICAgIGludCBzZXNzaW9uX3Jlc2V0OworCisgICAgLyogU2Vzc2lvbiBw YXJhbWV0ZXJzIG9iamVjdCwgaW5pdGlhbGl6ZWQgYnkgZWFjaCBjb2RlYyBpbmRlcGVuZGVudGx5 CisgICAgICogYW5kIHNldCBoZXJlLiAqLworICAgIFZrVmlkZW9TZXNzaW9uUGFyYW1ldGVyc0tI UiBzZXNzaW9uX3BhcmFtczsKKworICAgIEFWQnVmZmVyUG9vbCAqYnVmX3Bvb2w7CisKKyAgICBW a0Zvcm1hdCBwaWNfZm9ybWF0OworCisgICAgRkZWa0VuY29kZUNvbW1vbk9wdGlvbnMgb3B0czsK KworICAgIFZrVmlkZW9Qcm9maWxlSW5mb0tIUiBwcm9maWxlOworICAgIFZrVmlkZW9Qcm9maWxl TGlzdEluZm9LSFIgcHJvZmlsZV9saXN0OworICAgIFZrVmlkZW9DYXBhYmlsaXRpZXNLSFIgY2Fw czsKKyAgICBWa1ZpZGVvRW5jb2RlUXVhbGl0eUxldmVsUHJvcGVydGllc0tIUiBxdWFsaXR5X3By b3BzOworICAgIFZrVmlkZW9FbmNvZGVDYXBhYmlsaXRpZXNLSFIgZW5jX2NhcHM7CisgICAgVmtW aWRlb0VuY29kZVVzYWdlSW5mb0tIUiB1c2FnZV9pbmZvOworCisgICAgQVZWdWxrYW5EZXZpY2VR dWV1ZUZhbWlseSAqcWZfZW5jOworICAgIEZGVmtFeGVjUG9vbCBlbmNfcG9vbDsKKworICAgIEZG SFdCYXNlRW5jb2RlUGljdHVyZSAqc2xvdHNbMzJdOworfSBGRlZ1bGthbkVuY29kZUNvbnRleHQ7 CisKKyNkZWZpbmUgVlVMS0FOX0VOQ09ERV9DT01NT05fT1BUSU9OUyBcCisgICAgeyAicXAiLCAi VXNlIGFuIGV4cGxpY2l0IGNvbnN0YW50IHF1YW50aXplciBmb3IgdGhlIHdob2xlIHN0cmVhbSIs IE9GRlNFVChjb21tb24ub3B0cy5xcCksIEFWX09QVF9UWVBFX0lOVCwgeyAuaTY0ID0gLTEgfSwg LTEsIDI1NSwgRkxBR1MgfSwgXAorICAgIHsgInF1YWxpdHkiLCAiU2V0IGVuY29kZSBxdWFsaXR5 ICh0cmFkZXMgb2ZmIGFnYWluc3Qgc3BlZWQsIGhpZ2hlciBpcyBmYXN0ZXIpIiwgT0ZGU0VUKGNv bW1vbi5vcHRzLnF1YWxpdHkpLCBBVl9PUFRfVFlQRV9JTlQsIHsgLmk2NCA9IDAgfSwgMCwgSU5U X01BWCwgRkxBR1MgfSwgXAorICAgIHsgInJjX21vZGUiLCAiU2VsZWN0IHJhdGUgY29udHJvbCB0 eXBlIiwgT0ZGU0VUKGNvbW1vbi5vcHRzLnJjX21vZGUpLCBBVl9PUFRfVFlQRV9JTlQsIHsgLmk2 NCA9IEZGX1ZLX1JDX01PREVfQVVUTyB9LCAwLCBGRl9WS19SQ19NT0RFX0FVVE8sIEZMQUdTLCAi cmNfbW9kZSIgfSwgXAorICAgICAgICB7ICJhdXRvIiwgICAgIkNob29zZSBtb2RlIGF1dG9tYXRp Y2FsbHkgYmFzZWQgb24gcGFyYW1ldGVycyIsIDAsIEFWX09QVF9UWVBFX0NPTlNULCB7IC5pNjQg PSBGRl9WS19SQ19NT0RFX0FVVE8gfSwgSU5UX01JTiwgSU5UX01BWCwgRkxBR1MsICJyY19tb2Rl IiB9LCBcCisgICAgICAgIHsgImRyaXZlciIsICAiRHJpdmVyLXNwZWNpZmljIHJhdGUgY29udHJv bCIsIDAsIEFWX09QVF9UWVBFX0NPTlNULCB7IC5pNjQgPSBWS19WSURFT19FTkNPREVfUkFURV9D T05UUk9MX01PREVfREVGQVVMVF9LSFIgICAgICB9LCBJTlRfTUlOLCBJTlRfTUFYLCBGTEFHUywg InJjX21vZGUiIH0sIFwKKyAgICAgICAgeyAiY3FwIiwgICAgICJDb25zdGFudCBxdWFudGl6ZXIg bW9kZSIsIDAsIEFWX09QVF9UWVBFX0NPTlNULCB7IC5pNjQgPSBWS19WSURFT19FTkNPREVfUkFU RV9DT05UUk9MX01PREVfRElTQUJMRURfQklUX0tIUiB9LCBJTlRfTUlOLCBJTlRfTUFYLCBGTEFH UywgInJjX21vZGUiIH0sIFwKKyAgICAgICAgeyAiY2JyIiwgICAgICJDb25zdGFudCBiaXRyYXRl IG1vZGUiLCAwLCBBVl9PUFRfVFlQRV9DT05TVCwgeyAuaTY0ID0gVktfVklERU9fRU5DT0RFX1JB VEVfQ09OVFJPTF9NT0RFX0NCUl9CSVRfS0hSICAgICAgfSwgSU5UX01JTiwgSU5UX01BWCwgRkxB R1MsICJyY19tb2RlIiB9LCBcCisgICAgICAgIHsgInZiciIsICAgICAiVmFyaWFibGUgYml0cmF0 ZSBtb2RlIiwgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsgLmk2NCA9IFZLX1ZJREVPX0VOQ09ERV9S QVRFX0NPTlRST0xfTU9ERV9WQlJfQklUX0tIUiAgICAgIH0sIElOVF9NSU4sIElOVF9NQVgsIEZM QUdTLCAicmNfbW9kZSIgfSwgXAorICAgIHsgInR1bmUiLCAiU2VsZWN0IHR1bmluZyB0eXBlIiwg T0ZGU0VUKGNvbW1vbi5vcHRzLnR1bmUpLCBBVl9PUFRfVFlQRV9JTlQsIHsgLmk2NCA9IFZLX1ZJ REVPX0VOQ09ERV9UVU5JTkdfTU9ERV9ERUZBVUxUX0tIUiB9LCAwLCBJTlRfTUFYLCBGTEFHUywg InR1bmUiIH0sIFwKKyAgICAgICAgeyAiZGVmYXVsdCIsICAiRGVmYXVsdCB0dW5pbmciLCAwLCBB Vl9PUFRfVFlQRV9DT05TVCwgeyAuaTY0ID0gVktfVklERU9fRU5DT0RFX1RVTklOR19NT0RFX0RF RkFVTFRfS0hSICAgICAgICAgICB9LCBJTlRfTUlOLCBJTlRfTUFYLCBGTEFHUywgInR1bmUiIH0s IFwKKyAgICAgICAgeyAiaHEiLCAgICAgICAiSGlnaCBxdWFsaXR5IHR1bmluZyIsIDAsIEFWX09Q VF9UWVBFX0NPTlNULCB7IC5pNjQgPSBWS19WSURFT19FTkNPREVfVFVOSU5HX01PREVfSElHSF9R VUFMSVRZX0tIUiAgICAgIH0sIElOVF9NSU4sIElOVF9NQVgsIEZMQUdTLCAidHVuZSIgfSwgXAor ICAgICAgICB7ICJsbCIsICAgICAgICJMb3ctbGF0ZW5jeSB0dW5pbmciLCAwLCBBVl9PUFRfVFlQ RV9DT05TVCwgeyAuaTY0ID0gVktfVklERU9fRU5DT0RFX1RVTklOR19NT0RFX0xPV19MQVRFTkNZ X0tIUiAgICAgICB9LCBJTlRfTUlOLCBJTlRfTUFYLCBGTEFHUywgInR1bmUiIH0sIFwKKyAgICAg ICAgeyAidWxsIiwgICAgICAiVWx0cmEgbG93LWxhdGVuY3kgdHVuaW5nIiwgMCwgQVZfT1BUX1RZ UEVfQ09OU1QsIHsgLmk2NCA9IFZLX1ZJREVPX0VOQ09ERV9UVU5JTkdfTU9ERV9VTFRSQV9MT1df TEFURU5DWV9LSFIgfSwgSU5UX01JTiwgSU5UX01BWCwgRkxBR1MsICJ0dW5lIiB9LCBcCisgICAg ICAgIHsgImxvc3NsZXNzIiwgIkxvc3NsZXNzIG1vZGUgdHVuaW5nIiwgMCwgQVZfT1BUX1RZUEVf Q09OU1QsIHsgLmk2NCA9IFZLX1ZJREVPX0VOQ09ERV9UVU5JTkdfTU9ERV9MT1NTTEVTU19LSFIg ICAgICAgICAgfSwgSU5UX01JTiwgSU5UX01BWCwgRkxBR1MsICJ0dW5lIiB9LCBcCisgICAgeyAi dXNhZ2UiLCAiU2VsZWN0IHVzYWdlIHR5cGUiLCBPRkZTRVQoY29tbW9uLm9wdHMudXNhZ2UpLCBB Vl9PUFRfVFlQRV9GTEFHUywgeyAuaTY0ID0gVktfVklERU9fRU5DT0RFX1VTQUdFX0RFRkFVTFRf S0hSIH0sIDAsIElOVF9NQVgsIEZMQUdTLCAidXNhZ2UiIH0sIFwKKyAgICAgICAgeyAiZGVmYXVs dCIsICAgICJEZWZhdWx0IG9wdGltaXphdGlvbnMiLCAwLCBBVl9PUFRfVFlQRV9DT05TVCwgeyAu aTY0ID0gVktfVklERU9fRU5DT0RFX1VTQUdFX0RFRkFVTFRfS0hSICAgICAgICAgIH0sIElOVF9N SU4sIElOVF9NQVgsIEZMQUdTLCAidXNhZ2UiIH0sIFwKKyAgICAgICAgeyAidHJhbnNjb2RlIiwg ICJPcHRpbWl6ZSBmb3IgdHJhbnNjb2RpbmciLCAwLCBBVl9PUFRfVFlQRV9DT05TVCwgeyAuaTY0 ID0gVktfVklERU9fRU5DT0RFX1VTQUdFX1RSQU5TQ09ESU5HX0JJVF9LSFIgIH0sIElOVF9NSU4s IElOVF9NQVgsIEZMQUdTLCAidXNhZ2UiIH0sIFwKKyAgICAgICAgeyAic3RyZWFtIiwgICAgICJP cHRpbWl6ZSBmb3Igc3RyZWFtaW5nIiwgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsgLmk2NCA9IFZL X1ZJREVPX0VOQ09ERV9VU0FHRV9TVFJFQU1JTkdfQklUX0tIUiAgICB9LCBJTlRfTUlOLCBJTlRf TUFYLCBGTEFHUywgInVzYWdlIiB9LCBcCisgICAgICAgIHsgInJlY29yZCIsICAgICAiT3B0aW1p emUgZm9yIG9mZmxpbmUgcmVjb3JkaW5nIiwgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsgLmk2NCA9 IFZLX1ZJREVPX0VOQ09ERV9VU0FHRV9SRUNPUkRJTkdfQklUX0tIUiAgICB9LCBJTlRfTUlOLCBJ TlRfTUFYLCBGTEFHUywgInVzYWdlIiB9LCBcCisgICAgICAgIHsgImNvbmZlcmVuY2UiLCAiT3B0 aW1pemUgZm9yIHRlbGVjb25mZXJlbmNpbmciLCAwLCBBVl9PUFRfVFlQRV9DT05TVCwgeyAuaTY0 ID0gVktfVklERU9fRU5DT0RFX1VTQUdFX0NPTkZFUkVOQ0lOR19CSVRfS0hSIH0sIElOVF9NSU4s IElOVF9NQVgsIEZMQUdTLCAidXNhZ2UiIH0sIFwKKyAgICB7ICJjb250ZW50IiwgIlNlbGVjdCBj b250ZW50IHR5cGUiLCBPRkZTRVQoY29tbW9uLm9wdHMuY29udGVudCksIEFWX09QVF9UWVBFX0ZM QUdTLCB7IC5pNjQgPSBWS19WSURFT19FTkNPREVfQ09OVEVOVF9ERUZBVUxUX0tIUiB9LCAwLCBJ TlRfTUFYLCBGTEFHUywgImNvbnRlbnQiIH0sIFwKKyAgICAgICAgeyAiZGVmYXVsdCIsICAiRGVm YXVsdCBjb250ZW50IiwgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsgLmk2NCA9IFZLX1ZJREVPX0VO Q09ERV9DT05URU5UX0RFRkFVTFRfS0hSICAgICAgfSwgSU5UX01JTiwgSU5UX01BWCwgRkxBR1Ms ICJjb250ZW50IiB9LCBcCisgICAgICAgIHsgImNhbWVyYSIsICAgIkNhbWVyYSBmb290YWdlIiwg MCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsgLmk2NCA9IFZLX1ZJREVPX0VOQ09ERV9DT05URU5UX0NB TUVSQV9CSVRfS0hSICAgfSwgSU5UX01JTiwgSU5UX01BWCwgRkxBR1MsICJjb250ZW50IiB9LCBc CisgICAgICAgIHsgImRlc2t0b3AiLCAgIlNjcmVlbiByZWNvcmRpbmciLCAwLCBBVl9PUFRfVFlQ RV9DT05TVCwgeyAuaTY0ID0gVktfVklERU9fRU5DT0RFX0NPTlRFTlRfREVTS1RPUF9CSVRfS0hS ICB9LCBJTlRfTUlOLCBJTlRfTUFYLCBGTEFHUywgImNvbnRlbnQiIH0sIFwKKyAgICAgICAgeyAi cmVuZGVyZWQiLCAiR2FtZSBvciAzRCBjb250ZW50IiwgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsg Lmk2NCA9IFZLX1ZJREVPX0VOQ09ERV9DT05URU5UX1JFTkRFUkVEX0JJVF9LSFIgfSwgSU5UX01J TiwgSU5UX01BWCwgRkxBR1MsICJjb250ZW50IiB9CisKKy8qKgorICogSW5pdGlhbGl6ZSBlbmNv ZGVyLgorICovCithdl9jb2xkIGludCBmZl92dWxrYW5fZW5jb2RlX2luaXQoQVZDb2RlY0NvbnRl eHQgKmF2Y3R4LCBGRlZ1bGthbkVuY29kZUNvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCBGRlZ1bGthbkVuY29kZURlc2NyaXB0b3IgKnZrX2Rlc2Ms CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRkZWdWxrYW5Db2RlYyAq Y29kZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqY29kZWNfY2Fw cywgdm9pZCAqcXVhbGl0eV9wbmV4dCk7CisKKy8qKgorICogV3JpdGUgb3V0IHRoZSBleHRyYWRh dGEgaW4gY2FzZSBpdHMgbmVlZGVkLgorICovCithdl9jb2xkIGludCBmZl92dWxrYW5fd3JpdGVf Z2xvYmFsX2hlYWRlcihBVkNvZGVjQ29udGV4dCAqYXZjdHgsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBGRlZ1bGthbkVuY29kZUNvbnRleHQgKmN0eCk7CisKKy8q KgorICogRW5jb2RlLgorICovCitpbnQgZmZfdnVsa2FuX2VuY29kZV9yZWNlaXZlX3BhY2tldChB VkNvZGVjQ29udGV4dCAqYXZjdHgsIEFWUGFja2V0ICpwa3QpOworCisvKioKKyAqIFVuaW5pdGlh bGl6ZSBlbmNvZGVyLgorICovCit2b2lkIGZmX3Z1bGthbl9lbmNvZGVfdW5pbml0KEZGVnVsa2Fu RW5jb2RlQ29udGV4dCAqY3R4KTsKKworLyoqCisgKiBDcmVhdGUgc2Vzc2lvbiBwYXJhbWV0ZXJz LgorICovCitpbnQgZmZfdnVsa2FuX2VuY29kZV9jcmVhdGVfc2Vzc2lvbl9wYXJhbXMoQVZDb2Rl Y0NvbnRleHQgKmF2Y3R4LCBGRlZ1bGthbkVuY29kZUNvbnRleHQgKmN0eCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpjb2RlY19wYXJhbXNfcG5leHQp OworCisvKioKKyAqIFBhcGVyd29yay4KKyAqLworZXh0ZXJuIGNvbnN0IEFWQ29kZWNIV0NvbmZp Z0ludGVybmFsICpjb25zdCBmZl92dWxrYW5fZW5jb2RlX2h3X2NvbmZpZ3NbXTsKKworI2VuZGlm IC8qIEFWQ09ERUNfVlVMS0FOX0VOQ09ERV9IICovCi0tIAoyLjQ5LjEKCgpGcm9tIGIxMjdhMDY1 NTkzMmFlMjU3NzVkYmY3NDFjNzRmYmM1ZmUwNTE1MWIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAx CkZyb206IEphbWFpa2ExIDxsdWthc3pjejE4QHdwLnBsPgpEYXRlOiBXZWQsIDMgU2VwIDIwMjUg MTM6MzI6MzUgKzAwMDAKU3ViamVjdDogW1BBVENIIDA3My8xMThdIENoYW5naW5nIHZ1bGthbiBm aWxlIGRpcmVjdG9yeQoKLS0tCiBsaWJhdmNvZGVjL3Z1bGthbl9lbmNvZGVfYXYxLmMgfCAxNDAx IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgMTQwMSBk ZWxldGlvbnMoLSkKIGRlbGV0ZSBtb2RlIDEwMDY0NCBsaWJhdmNvZGVjL3Z1bGthbl9lbmNvZGVf YXYxLmMKCmRpZmYgLS1naXQgYS9saWJhdmNvZGVjL3Z1bGthbl9lbmNvZGVfYXYxLmMgYi9saWJh dmNvZGVjL3Z1bGthbl9lbmNvZGVfYXYxLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDA4ZmZiZmEzOTMuLjAwMDAwMDAwMDAKLS0tIGEvbGliYXZjb2RlYy92dWxrYW5fZW5jb2RlX2F2 MS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTQwMSArMCwwIEBACi0vKgotICogVGhpcyBmaWxlIGlz IHBhcnQgb2YgRkZtcGVnLgotICoKLSAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5 IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyLjEgb2Yg dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgot ICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm dWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll ZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg Y29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3 aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRh dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAw MjExMC0xMzAxIFVTQQotICovCi0KLSNpbmNsdWRlICJsaWJhdnV0aWwvb3B0LmgiCi0jaW5jbHVk ZSAibGliYXZ1dGlsL21lbS5oIgotCi0jaW5jbHVkZSAiY2JzLmgiCi0jaW5jbHVkZSAiY2JzX2F2 MS5oIgotI2luY2x1ZGUgImF2MV9sZXZlbHMuaCIKLSNpbmNsdWRlICJsaWJhdnV0aWwvbWFzdGVy aW5nX2Rpc3BsYXlfbWV0YWRhdGEuaCIKLQotI2luY2x1ZGUgImNvZGVjX2ludGVybmFsLmgiCi0j aW5jbHVkZSAidnVsa2FuX2VuY29kZS5oIgotCi0jaW5jbHVkZSAibGliYXZ1dGlsL2F2YXNzZXJ0 LmgiCi0KLWNvbnN0IEZGVnVsa2FuRW5jb2RlRGVzY3JpcHRvciBmZl92a19lbmNfYXYxX2Rlc2Mg PSB7Ci0gICAgLmNvZGVjX2lkICAgICAgICAgPSBBVl9DT0RFQ19JRF9BVjEsCi0gICAgLmVuY29k ZV9leHRlbnNpb24gPSBGRl9WS19FWFRfVklERU9fRU5DT0RFX0FWMSwKLSAgICAuZW5jb2RlX29w ICAgICAgICA9IFZLX1ZJREVPX0NPREVDX09QRVJBVElPTl9FTkNPREVfQVYxX0JJVF9LSFIsCi0g ICAgLmV4dF9wcm9wcyA9IHsKLSAgICAgICAgLmV4dGVuc2lvbk5hbWUgPSBWS19TVERfVlVMS0FO X1ZJREVPX0NPREVDX0FWMV9FTkNPREVfRVhURU5TSU9OX05BTUUsCi0gICAgICAgIC5zcGVjVmVy c2lvbiAgID0gVktfU1REX1ZVTEtBTl9WSURFT19DT0RFQ19BVjFfRU5DT0RFX1NQRUNfVkVSU0lP TiwKLSAgICB9LAotfTsKLQotZW51bSBVbml0RWxlbXMgewotICAgIFVOSVRfTUFTVEVSSU5HX0RJ U1BMQVkgICA9IDEgPDwgMCwKLSAgICBVTklUX0NPTlRFTlRfTElHSFRfTEVWRUwgPSAxIDw8IDEs Ci19OwotCi10eXBlZGVmIHN0cnVjdCBWdWxrYW5FbmNvZGVBVjFQaWN0dXJlIHsKLSAgICBpbnQg c2xvdDsKLSAgICBpbnQ2NF90IGxhc3RfaWRyX2ZyYW1lOwotCi0gICAgZW51bSBVbml0RWxlbXMg dW5pdHNfbmVlZGVkOwotCi0gICAgU3RkVmlkZW9BVjFUaWxlSW5mbyB0aWxlX2luZm87Ci0gICAg U3RkVmlkZW9BVjFRdWFudGl6YXRpb24gcXVhbnRpemF0aW9uOwotICAgIFN0ZFZpZGVvQVYxU2Vn bWVudGF0aW9uIHNlZ21lbnRhdGlvbjsKLSAgICBTdGRWaWRlb0FWMUxvb3BGaWx0ZXIgbG9vcF9m aWx0ZXI7Ci0gICAgU3RkVmlkZW9BVjFDREVGIGNkZWY7Ci0gICAgU3RkVmlkZW9BVjFMb29wUmVz dG9yYXRpb24gbG9vcF9yZXN0b3JhdGlvbjsKLSAgICBTdGRWaWRlb0FWMUdsb2JhbE1vdGlvbiBn bG9iYWxfbW90aW9uOwotCi0gICAgU3RkVmlkZW9FbmNvZGVBVjFQaWN0dXJlSW5mbyBhdjFwaWNf aW5mbzsKLSAgICBWa1ZpZGVvRW5jb2RlQVYxUGljdHVyZUluZm9LSFIgdmthdjFwaWNfaW5mbzsK LQotICAgIFN0ZFZpZGVvRW5jb2RlQVYxRXh0ZW5zaW9uSGVhZGVyIGV4dF9oZWFkZXI7Ci0gICAg U3RkVmlkZW9FbmNvZGVBVjFSZWZlcmVuY2VJbmZvIGF2MWRwYl9pbmZvOwotICAgIFZrVmlkZW9F bmNvZGVBVjFEcGJTbG90SW5mb0tIUiB2a2F2MWRwYl9pbmZvOwotCi0gICAgVmtWaWRlb0VuY29k ZUFWMVJhdGVDb250cm9sSW5mb0tIUiB2a3JjX2luZm87Ci0gICAgVmtWaWRlb0VuY29kZUFWMVJh dGVDb250cm9sTGF5ZXJJbmZvS0hSIHZrcmNfbGF5ZXJfaW5mbzsKLSAgICBWa1ZpZGVvRW5jb2Rl QVYxR29wUmVtYWluaW5nRnJhbWVJbmZvS0hSIHZrcmNfcmVtYWluaW5nOwotfSBWdWxrYW5FbmNv ZGVBVjFQaWN0dXJlOwotCi10eXBlZGVmIHN0cnVjdCBWdWxrYW5FbmNvZGVBVjFDb250ZXh0IHsK LSAgICBGRlZ1bGthbkVuY29kZUNvbnRleHQgY29tbW9uOwotCi0gICAgQ29kZWRCaXRzdHJlYW1D b250ZXh0ICpjYnM7Ci0gICAgQ29kZWRCaXRzdHJlYW1GcmFnbWVudCBjdXJyZW50X2FjY2Vzc191 bml0OwotCi0gICAgZW51bSBVbml0RWxlbXMgdW5pdF9lbGVtczsKLSAgICBBVjFSYXdPQlUgc2Vx X2hkcl9vYnU7Ci0gICAgQVYxUmF3T0JVIG1ldGFfY2xsX29idTsKLSAgICBBVjFSYXdPQlUgbWV0 YV9tYXN0ZXJpbmdfb2J1OwotCi0gICAgVmtWaWRlb0VuY29kZUFWMVByb2ZpbGVJbmZvS0hSIHBy b2ZpbGU7Ci0KLSAgICBWa1ZpZGVvRW5jb2RlQVYxQ2FwYWJpbGl0aWVzS0hSIGNhcHM7Ci0gICAg VmtWaWRlb0VuY29kZUFWMVF1YWxpdHlMZXZlbFByb3BlcnRpZXNLSFIgcXVhbGl0eV9wcm9wczsK LQotICAgIHVpbnQ2NF90IGhyZF9idWZmZXJfc2l6ZTsKLSAgICB1aW50NjRfdCBpbml0aWFsX2J1 ZmZlcl9mdWxsbmVzczsKLQotICAgIGludCB1bmlmb3JtX3RpbGU7Ci0gICAgaW50IHRpbGVfY29s czsKLSAgICBpbnQgdGlsZV9yb3dzOwotCi0gICAgaW50IHNlcV90aWVyOwotICAgIGludCBzZXFf bGV2ZWxfaWR4OwotCi0gICAgaW50IHFfaWR4X2lkcjsKLSAgICBpbnQgcV9pZHhfcDsKLSAgICBp bnQgcV9pZHhfYjsKLQotICAgIHVpbnQ4X3QgKnBhZGRpbmdfcGF5bG9hZDsKLX0gVnVsa2FuRW5j b2RlQVYxQ29udGV4dDsKLQotc3RhdGljIGludCBpbml0X3BpY19yYyhBVkNvZGVjQ29udGV4dCAq YXZjdHgsIEZGSFdCYXNlRW5jb2RlUGljdHVyZSAqcGljLAotICAgICAgICAgICAgICAgICAgICAg ICBWa1ZpZGVvRW5jb2RlUmF0ZUNvbnRyb2xJbmZvS0hSICpyY19pbmZvLAotICAgICAgICAgICAg ICAgICAgICAgICBWa1ZpZGVvRW5jb2RlUmF0ZUNvbnRyb2xMYXllckluZm9LSFIgKnJjX2xheWVy KQotewotICAgIFZ1bGthbkVuY29kZUFWMUNvbnRleHQgKmVuYyA9IGF2Y3R4LT5wcml2X2RhdGE7 Ci0gICAgRkZWdWxrYW5FbmNvZGVDb250ZXh0ICAqY3R4ID0gJmVuYy0+Y29tbW9uOwotICAgIFZ1 bGthbkVuY29kZUFWMVBpY3R1cmUgICphcCA9IHBpYy0+Y29kZWNfcHJpdjsKLQotICAgIC8qIFRo aXMgY2FuIGJlIGVhc3kgdG8gY2FsY3VsYXRlICovCi0gICAgYXAtPnZrcmNfcmVtYWluaW5nID0g KFZrVmlkZW9FbmNvZGVBVjFHb3BSZW1haW5pbmdGcmFtZUluZm9LSFIpIHsKLSAgICAgICAgLnNU eXBlID0gVktfU1RSVUNUVVJFX1RZUEVfVklERU9fRU5DT0RFX0FWMV9HT1BfUkVNQUlOSU5HX0ZS QU1FX0lORk9fS0hSLAotICAgICAgICAudXNlR29wUmVtYWluaW5nRnJhbWVzID0gMCwKLSAgICAg ICAgLmdvcFJlbWFpbmluZ0ludHJhID0gMCwKLSAgICAgICAgLmdvcFJlbWFpbmluZ1ByZWRpY3Rp dmUgPSAwLAotICAgICAgICAuZ29wUmVtYWluaW5nQmlwcmVkaWN0aXZlID0gMCwKLSAgICB9Owot Ci0gICAgYXAtPnZrcmNfaW5mbyA9IChWa1ZpZGVvRW5jb2RlQVYxUmF0ZUNvbnRyb2xJbmZvS0hS KSB7Ci0gICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX1ZJREVPX0VOQ09ERV9BVjFf UkFURV9DT05UUk9MX0lORk9fS0hSLAotICAgICAgICAuZmxhZ3MgPSBWS19WSURFT19FTkNPREVf QVYxX1JBVEVfQ09OVFJPTF9SRUZFUkVOQ0VfUEFUVEVSTl9GTEFUX0JJVF9LSFIgfAotICAgICAg ICAgICAgICAgICBWS19WSURFT19FTkNPREVfQVYxX1JBVEVfQ09OVFJPTF9SRUdVTEFSX0dPUF9C SVRfS0hSLAotICAgICAgICAuZ29wRnJhbWVDb3VudCA9IGN0eC0+YmFzZS5nb3Bfc2l6ZSwKLSAg ICAgICAgLmtleUZyYW1lUGVyaW9kID0gY3R4LT5iYXNlLmdvcF9zaXplLAotICAgICAgICAuY29u c2VjdXRpdmVCaXByZWRpY3RpdmVGcmFtZUNvdW50ID0gRkZNQVgoY3R4LT5iYXNlLmJfcGVyX3Ag LSAxLCAwKSwKLSAgICAgICAgLnRlbXBvcmFsTGF5ZXJDb3VudCA9IDAsCi0gICAgfTsKLSAgICBy Y19pbmZvLT5wTmV4dCA9ICZhcC0+dmtyY19pbmZvOwotCi0gICAgaWYgKHJjX2luZm8tPnJhdGVD b250cm9sTW9kZSA+IFZLX1ZJREVPX0VOQ09ERV9SQVRFX0NPTlRST0xfTU9ERV9ESVNBQkxFRF9C SVRfS0hSKSB7Ci0gICAgICAgIHJjX2luZm8tPnZpcnR1YWxCdWZmZXJTaXplSW5NcyA9IChlbmMt PmhyZF9idWZmZXJfc2l6ZSAqIDEwMDBMTCkgLyBhdmN0eC0+Yml0X3JhdGU7Ci0gICAgICAgIHJj X2luZm8tPmluaXRpYWxWaXJ0dWFsQnVmZmVyU2l6ZUluTXMgPSAoZW5jLT5pbml0aWFsX2J1ZmZl cl9mdWxsbmVzcyAqIDEwMDBMTCkgLyBhdmN0eC0+Yml0X3JhdGU7Ci0KLSAgICAgICAgYXAtPnZr cmNfbGF5ZXJfaW5mbyA9IChWa1ZpZGVvRW5jb2RlQVYxUmF0ZUNvbnRyb2xMYXllckluZm9LSFIp IHsKLSAgICAgICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX1ZJREVPX0VOQ09ERV9B VjFfUkFURV9DT05UUk9MX0xBWUVSX0lORk9fS0hSLAotCi0gICAgICAgICAgICAudXNlTWluUUlu ZGV4ICA9IGF2Y3R4LT5xbWluID4gMCwKLSAgICAgICAgICAgIC5taW5RSW5kZXguaW50cmFRSW5k ZXggPSBhdmN0eC0+cW1pbiA+IDAgPyBhdmN0eC0+cW1pbiA6IDAsCi0gICAgICAgICAgICAubWlu UUluZGV4LnByZWRpY3RpdmVRSW5kZXggPSBhdmN0eC0+cW1pbiA+IDAgPyBhdmN0eC0+cW1pbiA6 IDAsCi0gICAgICAgICAgICAubWluUUluZGV4LmJpcHJlZGljdGl2ZVFJbmRleCA9IGF2Y3R4LT5x bWluID4gMCA/IGF2Y3R4LT5xbWluIDogMCwKLQotICAgICAgICAgICAgLnVzZU1heFFJbmRleCAg PSBhdmN0eC0+cW1heCA+IDAsCi0gICAgICAgICAgICAubWF4UUluZGV4LmludHJhUUluZGV4ID0g YXZjdHgtPnFtYXggPiAwID8gYXZjdHgtPnFtYXggOiAwLAotICAgICAgICAgICAgLm1heFFJbmRl eC5wcmVkaWN0aXZlUUluZGV4ID0gYXZjdHgtPnFtYXggPiAwID8gYXZjdHgtPnFtYXggOiAwLAot ICAgICAgICAgICAgLm1heFFJbmRleC5iaXByZWRpY3RpdmVRSW5kZXggPSBhdmN0eC0+cW1heCA+ IDAgPyBhdmN0eC0+cW1heCA6IDAsCi0KLSAgICAgICAgICAgIC51c2VNYXhGcmFtZVNpemUgPSAw LAotICAgICAgICB9OwotICAgICAgICByY19sYXllci0+cE5leHQgPSAmYXAtPnZrcmNfbGF5ZXJf aW5mbzsKLSAgICAgICAgYXAtPnZrcmNfaW5mby50ZW1wb3JhbExheWVyQ291bnQgPSAxOwotICAg IH0KLQotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBzZXRfbmFtZV9zbG90KGludCBz bG90LCBpbnQgKnNsb3RfaW5kaWNlcywgdWludDMyX3QgYWxsb3dlZF9pZHgsIGludCBncm91cCkK LXsKLSAgICBpbnQgZnJvbSA9IGdyb3VwID8gQVYxX1JFRl9GUkFNRV9HT0xERU4gOiAwOwotICAg IGludCB0byA9IGdyb3VwID8gQVYxX1JFRlNfUEVSX0ZSQU1FIDogQVYxX1JFRl9GUkFNRV9HT0xE RU47Ci0KLSAgICBmb3IgKGludCBpID0gZnJvbTsgaSA8IHRvOyBpKyspIHsKLSAgICAgICAgaWYg KChzbG90X2luZGljZXNbaV0gPT0gLTEpICYmIChhbGxvd2VkX2lkeCAmICgxIDw8IGkpKSkgewot ICAgICAgICAgICAgc2xvdF9pbmRpY2VzW2ldID0gc2xvdDsKLSAgICAgICAgICAgIHJldHVybjsK LSAgICAgICAgfQotICAgIH0KLQotICAgIGF2X2Fzc2VydDAoMCk7Ci19Ci0KLQotc3RhdGljIGlu dCBpbml0X3BpY19wYXJhbXMoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LCBGRkhXQmFzZUVuY29kZVBp Y3R1cmUgKnBpYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFZrVmlkZW9FbmNvZGVJbmZv S0hSICplbmNvZGVfaW5mbykKLXsKLSAgICBWdWxrYW5FbmNvZGVBVjFDb250ZXh0ICplbmMgPSBh dmN0eC0+cHJpdl9kYXRhOwotICAgIEZGVnVsa2FuRW5jb2RlQ29udGV4dCAqY3R4ID0gJmVuYy0+ Y29tbW9uOwotICAgIEZGSFdCYXNlRW5jb2RlQ29udGV4dCAqYmFzZV9jdHggPSAmY3R4LT5iYXNl OwotCi0gICAgVnVsa2FuRW5jb2RlQVYxUGljdHVyZSAqYXAgPSBwaWMtPmNvZGVjX3ByaXY7Ci0g ICAgRkZIV0Jhc2VFbmNvZGVQaWN0dXJlICpyZWY7Ci0gICAgVnVsa2FuRW5jb2RlQVYxUGljdHVy ZSAqYXBfcmVmOwotICAgIFZrVmlkZW9SZWZlcmVuY2VTbG90SW5mb0tIUiAqcmVmX3Nsb3Q7Ci0K LSAgICB1aW50MzJfdCByZWZfbmFtZV9tYXNrID0gMHgwOwotICAgIGludCBuYW1lX3Nsb3RzW1NU RF9WSURFT19BVjFfUkVGU19QRVJfRlJBTUVdOwotCi0gICAgU3RkVmlkZW9BVjFTZWdtZW50YXRp b24gKnNlZ21lbnRhdGlvbiA9ICZhcC0+c2VnbWVudGF0aW9uOwotICAgIFN0ZFZpZGVvQVYxTG9v cEZpbHRlciAgKmxvb3BfZmlsdGVyID0gJmFwLT5sb29wX2ZpbHRlcjsKLSAgICBTdGRWaWRlb0FW MVF1YW50aXphdGlvbiAqcXVhbnRpemF0aW9uID0gJmFwLT5xdWFudGl6YXRpb247Ci0gICAgU3Rk VmlkZW9BVjFDREVGICpjZGVmID0gJmFwLT5jZGVmOwotICAgIFN0ZFZpZGVvQVYxTG9vcFJlc3Rv cmF0aW9uICpsb29wX3Jlc3RvcmF0aW9uID0gJmFwLT5sb29wX3Jlc3RvcmF0aW9uOwotICAgIFN0 ZFZpZGVvQVYxR2xvYmFsTW90aW9uICpnbG9iYWxfbW90aW9uID0gJmFwLT5nbG9iYWxfbW90aW9u OwotICAgIFN0ZFZpZGVvQVYxVGlsZUluZm8gKnRpbGVfaW5mbyA9ICZhcC0+dGlsZV9pbmZvOwot ICAgIHN0YXRpYyBjb25zdCBpbnQ4X3QgZGVmYXVsdF9sb29wX2ZpbHRlcl9yZWZfZGVsdGFzW1NU RF9WSURFT19BVjFfVE9UQUxfUkVGU19QRVJfRlJBTUVdID0KLSAgICAgICAgeyAxLCAwLCAwLCAw LCAtMSwgMCwgLTEsIC0xIH07Ci0KLSAgICBWa1ZpZGVvRW5jb2RlQVYxUHJlZGljdGlvbk1vZGVL SFIgcHJlZF9tb2RlOwotICAgIFZrVmlkZW9FbmNvZGVBVjFSYXRlQ29udHJvbEdyb3VwS0hSIHJj X2dyb3VwOwotICAgIGludCBscl91bml0X3NoaWZ0ID0gMDsKLSAgICBpbnQgbHJfdXZfc2hpZnQg PSAwOwotCi0gICAgYXAtPmV4dF9oZWFkZXIgPSAoU3RkVmlkZW9FbmNvZGVBVjFFeHRlbnNpb25I ZWFkZXIpIHsKLSAgICAgICAgLnRlbXBvcmFsX2lkID0gMCwKLSAgICAgICAgLnNwYXRpYWxfaWQg PSAwLAotICAgIH07Ci0KLSAgICAqdGlsZV9pbmZvID0gKFN0ZFZpZGVvQVYxVGlsZUluZm8pIHsK LSAgICAgICAgLmZsYWdzID0gKFN0ZFZpZGVvQVYxVGlsZUluZm9GbGFncykgewotICAgICAgICAg ICAgLnVuaWZvcm1fdGlsZV9zcGFjaW5nX2ZsYWcgPSBlbmMtPnVuaWZvcm1fdGlsZSwKLSAgICAg ICAgfSwKLSAgICAgICAgLlRpbGVDb2xzID0gZW5jLT50aWxlX2NvbHMsCi0gICAgICAgIC5UaWxl Um93cyA9IGVuYy0+dGlsZV9yb3dzLAotICAgICAgICAuY29udGV4dF91cGRhdGVfdGlsZV9pZCA9 IDAsCi0gICAgICAgIC50aWxlX3NpemVfYnl0ZXNfbWludXNfMSA9IDAsCi0gICAgfTsKLQotICAg IGZvciAoaW50IGkgPSAwOyBpIDwgU1REX1ZJREVPX0FWMV9UT1RBTF9SRUZTX1BFUl9GUkFNRTsg aSsrKSB7Ci0gICAgICAgIGdsb2JhbF9tb3Rpb24tPkdtVHlwZVtpXSA9IDA7Ci0gICAgICAgIGZv ciAoaW50IGogPSAwOyBqIDwgU1REX1ZJREVPX0FWMV9HTE9CQUxfTU9USU9OX1BBUkFNUzsgaisr KSB7Ci0gICAgICAgICAgICBnbG9iYWxfbW90aW9uLT5nbV9wYXJhbXNbaV1bal0gPSAwOwotICAg ICAgICB9Ci0gICAgfQotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBTVERfVklERU9fQVYxX1JF RlNfUEVSX0ZSQU1FOyBpKyspCi0gICAgICAgIG5hbWVfc2xvdHNbaV0gPSAtMTsKLQotICAgICps b29wX3Jlc3RvcmF0aW9uID0gKFN0ZFZpZGVvQVYxTG9vcFJlc3RvcmF0aW9uKSB7Ci0gICAgICAg IC5GcmFtZVJlc3RvcmF0aW9uVHlwZVswXSA9IFNURF9WSURFT19BVjFfRlJBTUVfUkVTVE9SQVRJ T05fVFlQRV9OT05FLAotICAgICAgICAuRnJhbWVSZXN0b3JhdGlvblR5cGVbMV0gPSBTVERfVklE RU9fQVYxX0ZSQU1FX1JFU1RPUkFUSU9OX1RZUEVfTk9ORSwKLSAgICAgICAgLkZyYW1lUmVzdG9y YXRpb25UeXBlWzJdID0gU1REX1ZJREVPX0FWMV9GUkFNRV9SRVNUT1JBVElPTl9UWVBFX05PTkUs Ci0gICAgICAgIC5Mb29wUmVzdG9yYXRpb25TaXplWzBdID0gMSArIGxyX3VuaXRfc2hpZnQsCi0g ICAgICAgIC5Mb29wUmVzdG9yYXRpb25TaXplWzFdID0gMSArIGxyX3VuaXRfc2hpZnQgLSBscl91 dl9zaGlmdCwKLSAgICAgICAgLkxvb3BSZXN0b3JhdGlvblNpemVbMl0gPSAxICsgbHJfdW5pdF9z aGlmdCAtIGxyX3V2X3NoaWZ0LAotICAgIH07Ci0KLSAgICAqY2RlZiA9IChTdGRWaWRlb0FWMUNE RUYpIHsKLSAgICAgICAgLmNkZWZfZGFtcGluZ19taW51c18zID0gMCwKLSAgICAgICAgLmNkZWZf Yml0cyA9IDAsCi0gICAgfTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgU1REX1ZJREVPX0FW MV9NQVhfU0VHTUVOVFM7IGkrKykgewotICAgICAgICBzZWdtZW50YXRpb24tPkZlYXR1cmVFbmFi bGVkW2ldID0gMHgwOwotICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IFNURF9WSURFT19BVjFf U0VHX0xWTF9NQVg7IGorKykgewotICAgICAgICAgICAgc2VnbWVudGF0aW9uLT5GZWF0dXJlRW5h YmxlZFtpXSB8PSAweDA7Ci0gICAgICAgICAgICBzZWdtZW50YXRpb24tPkZlYXR1cmVEYXRhW2ld W2pdID0gMDsKLSAgICAgICAgfQotICAgIH0KLQotICAgICpsb29wX2ZpbHRlciA9IChTdGRWaWRl b0FWMUxvb3BGaWx0ZXIpIHsKLSAgICAgICAgLmZsYWdzID0gKFN0ZFZpZGVvQVYxTG9vcEZpbHRl ckZsYWdzKSB7Ci0gICAgICAgICAgICAubG9vcF9maWx0ZXJfZGVsdGFfZW5hYmxlZCA9IDAsCi0g ICAgICAgICAgICAubG9vcF9maWx0ZXJfZGVsdGFfdXBkYXRlID0gMCwKLSAgICAgICAgfSwKLSAg ICAgICAgLmxvb3BfZmlsdGVyX2xldmVsID0geyAwIH0sCi0gICAgICAgIC5sb29wX2ZpbHRlcl9z aGFycG5lc3MgPSAwLAotICAgICAgICAudXBkYXRlX3JlZl9kZWx0YSA9IDAsCi0gICAgICAgIC5s b29wX2ZpbHRlcl9yZWZfZGVsdGFzID0geyAwIH0sCi0gICAgICAgIC51cGRhdGVfbW9kZV9kZWx0 YSA9IDAsCi0gICAgICAgIC5sb29wX2ZpbHRlcl9tb2RlX2RlbHRhcyA9IHsgMCB9LAotICAgIH07 Ci0gICAgbG9vcF9maWx0ZXItPnVwZGF0ZV9tb2RlX2RlbHRhID0gMTsKLSAgICBtZW1jcHkobG9v cF9maWx0ZXItPmxvb3BfZmlsdGVyX3JlZl9kZWx0YXMsIGRlZmF1bHRfbG9vcF9maWx0ZXJfcmVm X2RlbHRhcywKLSAgICAgICAgICAgU1REX1ZJREVPX0FWMV9UT1RBTF9SRUZTX1BFUl9GUkFNRSAq IHNpemVvZihpbnQ4X3QpKTsKLQotICAgICpxdWFudGl6YXRpb24gPSAoU3RkVmlkZW9BVjFRdWFu dGl6YXRpb24pIHsKLSAgICAgICAgLmZsYWdzID0gKFN0ZFZpZGVvQVYxUXVhbnRpemF0aW9uRmxh Z3MpIHsKLSAgICAgICAgICAgIC51c2luZ19xbWF0cml4ID0gMCwKLSAgICAgICAgICAgIC5kaWZm X3V2X2RlbHRhID0gMCwKLSAgICAgICAgICAgIC8qIFJlc2VydmVkICovCi0gICAgICAgIH0sCi0g ICAgICAgIC5iYXNlX3FfaWR4ID0gMCwgLyogU2V0IGxhdGVyICovCi0gICAgICAgIC5EZWx0YVFZ RGMgPSAwLAotICAgICAgICAuRGVsdGFRVURjID0gMCwKLSAgICAgICAgLkRlbHRhUVVBYyA9IDAs Ci0gICAgICAgIC5EZWx0YVFWRGMgPSAwLAotICAgICAgICAuRGVsdGFRVkFjID0gMCwKLSAgICAg ICAgLnFtX3kgPSAwLAotICAgICAgICAucW1fdSA9IDAsCi0gICAgICAgIC5xbV92ID0gMCwKLSAg ICB9OwotCi0gICAgcmVmX3Nsb3QgPSAoVmtWaWRlb1JlZmVyZW5jZVNsb3RJbmZvS0hSICopZW5j b2RlX2luZm8tPnBTZXR1cFJlZmVyZW5jZVNsb3Q7Ci0gICAgYXAtPmF2MXBpY19pbmZvID0gKFN0 ZFZpZGVvRW5jb2RlQVYxUGljdHVyZUluZm8pIHsKLSAgICAgICAgLmZsYWdzID0gKFN0ZFZpZGVv RW5jb2RlQVYxUGljdHVyZUluZm9GbGFncykgewotICAgICAgICAgICAgLmVycm9yX3Jlc2lsaWVu dF9tb2RlID0gKHBpYy0+dHlwZSA9PSBGRl9IV19QSUNUVVJFX1RZUEVfSSB8fAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpYy0+dHlwZSA9PSBGRl9IV19QSUNUVVJFX1RZ UEVfSURSKSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBpYy0+ZGlz cGxheV9vcmRlciA8PSBwaWMtPmVuY29kZV9vcmRlciksCi0gICAgICAgICAgICAuZGlzYWJsZV9j ZGZfdXBkYXRlID0gMCwKLSAgICAgICAgICAgIC51c2Vfc3VwZXJyZXMgPSAwLAotICAgICAgICAg ICAgLnJlbmRlcl9hbmRfZnJhbWVfc2l6ZV9kaWZmZXJlbnQgPSAwLAotICAgICAgICAgICAgLmFs bG93X3NjcmVlbl9jb250ZW50X3Rvb2xzID0gMCwKLSAgICAgICAgICAgIC5pc19maWx0ZXJfc3dp dGNoYWJsZSA9IDAsCi0gICAgICAgICAgICAuZm9yY2VfaW50ZWdlcl9tdiA9IDAsCi0gICAgICAg ICAgICAuZnJhbWVfc2l6ZV9vdmVycmlkZV9mbGFnID0gMCwKLSAgICAgICAgICAgIC5idWZmZXJf cmVtb3ZhbF90aW1lX3ByZXNlbnRfZmxhZyA9IDAsCi0gICAgICAgICAgICAuYWxsb3dfaW50cmFi YyA9IDAsCi0gICAgICAgICAgICAuZnJhbWVfcmVmc19zaG9ydF9zaWduYWxpbmcgPSAwLAotICAg ICAgICAgICAgLmFsbG93X2hpZ2hfcHJlY2lzaW9uX212ID0gMCwKLSAgICAgICAgICAgIC5pc19t b3Rpb25fbW9kZV9zd2l0Y2hhYmxlID0gMCwKLSAgICAgICAgICAgIC51c2VfcmVmX2ZyYW1lX212 cyA9IDAsCi0gICAgICAgICAgICAuZGlzYWJsZV9mcmFtZV9lbmRfdXBkYXRlX2NkZiA9IDAsCi0g ICAgICAgICAgICAuYWxsb3dfd2FycGVkX21vdGlvbiA9IDAsCi0gICAgICAgICAgICAucmVkdWNl ZF90eF9zZXQgPSAwLAotICAgICAgICAgICAgLnNraXBfbW9kZV9wcmVzZW50ID0gMCwKLSAgICAg ICAgICAgIC5kZWx0YV9xX3ByZXNlbnQgPSAwLAotICAgICAgICAgICAgLmRlbHRhX2xmX3ByZXNl bnQgPSAwLAotICAgICAgICAgICAgLmRlbHRhX2xmX211bHRpID0gMCwKLSAgICAgICAgICAgIC5z ZWdtZW50YXRpb25fZW5hYmxlZCA9IDAsCi0gICAgICAgICAgICAuc2VnbWVudGF0aW9uX3VwZGF0 ZV9tYXAgPSAwLAotICAgICAgICAgICAgLnNlZ21lbnRhdGlvbl90ZW1wb3JhbF91cGRhdGUgPSAw LAotICAgICAgICAgICAgLnNlZ21lbnRhdGlvbl91cGRhdGVfZGF0YSA9IDAsCi0gICAgICAgICAg ICAuVXNlc0xyID0gMCwKLSAgICAgICAgICAgIC51c2VzQ2hyb21hTHIgPSAwLAotICAgICAgICAg ICAgLnNob3dfZnJhbWUgPSBwaWMtPmRpc3BsYXlfb3JkZXIgPD0gcGljLT5lbmNvZGVfb3JkZXIs Ci0gICAgICAgICAgICAuc2hvd2FibGVfZnJhbWUgPSAwLAotICAgICAgICAgICAgLyogUmVzZXJ2 ZWQgKi8KLSAgICAgICAgfSwKLSAgICAgICAgLmZyYW1lX3R5cGUgPSAwLCAvLyBzZXQgbGF0ZXIK LSAgICAgICAgLmZyYW1lX3ByZXNlbnRhdGlvbl90aW1lID0gMCwKLSAgICAgICAgLmN1cnJlbnRf ZnJhbWVfaWQgPSByZWZfc2xvdC0+c2xvdEluZGV4LAotICAgICAgICAub3JkZXJfaGludCA9IDAs IC8vIHNldCBsYXRlcgotICAgICAgICAucHJpbWFyeV9yZWZfZnJhbWUgPSAwLCAvLyBzZXQgbGF0 ZXIKLSAgICAgICAgLnJlZnJlc2hfZnJhbWVfZmxhZ3MgPSAweDAsIC8vIHNldCBsYXRlcgotICAg ICAgICAuY29kZWRfZGVub20gPSAwLAotICAgICAgICAucmVuZGVyX3dpZHRoX21pbnVzXzEgPSBi YXNlX2N0eC0+c3VyZmFjZV93aWR0aCAtIDEsCi0gICAgICAgIC5yZW5kZXJfaGVpZ2h0X21pbnVz XzEgPSBiYXNlX2N0eC0+c3VyZmFjZV9oZWlnaHQgLSAxLAotICAgICAgICAuaW50ZXJwb2xhdGlv bl9maWx0ZXIgPSAwLAotICAgICAgICAuVHhNb2RlID0gU1REX1ZJREVPX0FWMV9UWF9NT0RFX1NF TEVDVCwKLSAgICAgICAgLmRlbHRhX3FfcmVzID0gMCwKLSAgICAgICAgLmRlbHRhX2xmX3JlcyA9 IDAsCi0gICAgICAgIC5yZWZfb3JkZXJfaGludCA9IHsgMCB9LCAvLyBzZXQgbGF0ZXIKLSAgICAg ICAgLnJlZl9mcmFtZV9pZHggPSB7IDAgfSwgLy8gc2V0IGxhdGVyCi0gICAgICAgIC8qIFJlc2Vy dmVkICovCi0gICAgICAgIC5kZWx0YV9mcmFtZV9pZF9taW51c18xID0geyAwIH0sCi0KLS8vICAg ICAgICAucFRpbGVJbmZvID0gdGlsZV9pbmZvLCBUT0RPIEZJWAotICAgICAgICAucFF1YW50aXph dGlvbiA9IHF1YW50aXphdGlvbiwKLSAgICAgICAgLnBTZWdtZW50YXRpb24gPSBzZWdtZW50YXRp b24sCi0gICAgICAgIC5wTG9vcEZpbHRlciA9IGxvb3BfZmlsdGVyLAotICAgICAgICAucENERUYg PSBjZGVmLAotICAgICAgICAucExvb3BSZXN0b3JhdGlvbiA9IGxvb3BfcmVzdG9yYXRpb24sCi0g ICAgICAgIC5wR2xvYmFsTW90aW9uID0gZ2xvYmFsX21vdGlvbiwKLSAgICAgICAgLnBFeHRlbnNp b25IZWFkZXIgPSAmYXAtPmV4dF9oZWFkZXIsCi0gICAgICAgIC5wQnVmZmVyUmVtb3ZhbFRpbWVz ID0gTlVMTCwKLSAgICB9OwotCi0gICAgc3dpdGNoIChwaWMtPnR5cGUpIHsKLSAgICBjYXNlIEZG X0hXX1BJQ1RVUkVfVFlQRV9JOgotICAgIGNhc2UgRkZfSFdfUElDVFVSRV9UWVBFX0lEUjoKLSAg ICAgICAgYXZfYXNzZXJ0MChwaWMtPm5iX3JlZnNbMF0gPT0gMCB8fCBwaWMtPm5iX3JlZnNbMV0p OwotICAgICAgICBhcC0+YXYxcGljX2luZm8uZnJhbWVfdHlwZSA9IFNURF9WSURFT19BVjFfRlJB TUVfVFlQRV9LRVk7Ci0gICAgICAgIGFwLT5hdjFwaWNfaW5mby5yZWZyZXNoX2ZyYW1lX2ZsYWdz ID0gMHhGRjsKLSAgICAgICAgcXVhbnRpemF0aW9uLT5iYXNlX3FfaWR4ID0gZW5jLT5xX2lkeF9p ZHI7Ci0gICAgICAgIGFwLT5zbG90ID0gMDsKLSAgICAgICAgYXAtPmxhc3RfaWRyX2ZyYW1lID0g cGljLT5kaXNwbGF5X29yZGVyOwotICAgICAgICBwcmVkX21vZGUgPSBWS19WSURFT19FTkNPREVf QVYxX1BSRURJQ1RJT05fTU9ERV9JTlRSQV9PTkxZX0tIUjsKLSAgICAgICAgcmNfZ3JvdXAgPSBW S19WSURFT19FTkNPREVfQVYxX1JBVEVfQ09OVFJPTF9HUk9VUF9JTlRSQV9LSFI7Ci0gICAgICAg IGJyZWFrOwotICAgIGNhc2UgRkZfSFdfUElDVFVSRV9UWVBFX1A6Ci0gICAgICAgIHJlZiA9IHBp Yy0+cmVmc1swXVtwaWMtPm5iX3JlZnNbMF0gLSAxXTsKLSAgICAgICAgYXBfcmVmID0gcmVmLT5j b2RlY19wcml2OwotCi0gICAgICAgIGFwLT5hdjFwaWNfaW5mby5mcmFtZV90eXBlID0gU1REX1ZJ REVPX0FWMV9GUkFNRV9UWVBFX0lOVEVSOwotICAgICAgICBxdWFudGl6YXRpb24tPmJhc2VfcV9p ZHggPSBlbmMtPnFfaWR4X3A7Ci0KLSAgICAgICAgYXAtPmxhc3RfaWRyX2ZyYW1lID0gYXBfcmVm LT5sYXN0X2lkcl9mcmFtZTsKLSAgICAgICAgYXAtPnNsb3QgPSAhYXBfcmVmLT5zbG90OwotCi0g ICAgICAgIGFwLT5hdjFwaWNfaW5mby5yZWZyZXNoX2ZyYW1lX2ZsYWdzID0gMSA8PCBhcC0+c2xv dDsKLQotICAgICAgICAvKiogc2V0IHRoZSBuZWFyZXN0IGZyYW1lIGluIEwwIGFzIGFsbCByZWZl cmVuY2UgZnJhbWUuICovCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgQVYxX1JFRlNfUEVS X0ZSQU1FOyBpKyspCi0gICAgICAgICAgICBhcC0+YXYxcGljX2luZm8ucmVmX2ZyYW1lX2lkeFtp XSA9IGFwX3JlZi0+c2xvdDsKLQotICAgICAgICBhcC0+YXYxcGljX2luZm8ucHJpbWFyeV9yZWZf ZnJhbWUgPSBhcF9yZWYtPnNsb3Q7Ci0gICAgICAgIGFwLT5hdjFwaWNfaW5mby5yZWZfb3JkZXJf aGludFthcF9yZWYtPnNsb3RdID0gcmVmLT5kaXNwbGF5X29yZGVyIC0gYXBfcmVmLT5sYXN0X2lk cl9mcmFtZTsKLSAgICAgICAgcmNfZ3JvdXAgPSBWS19WSURFT19FTkNPREVfQVYxX1JBVEVfQ09O VFJPTF9HUk9VUF9QUkVESUNUSVZFX0tIUjsKLSAgICAgICAgcHJlZF9tb2RlID0gVktfVklERU9f RU5DT0RFX0FWMV9QUkVESUNUSU9OX01PREVfU0lOR0xFX1JFRkVSRU5DRV9LSFI7Ci0gICAgICAg IHJlZl9uYW1lX21hc2sgPSBlbmMtPmNhcHMuc2luZ2xlUmVmZXJlbmNlTmFtZU1hc2s7Ci0gICAg ICAgIHNldF9uYW1lX3Nsb3QoYXBfcmVmLT5hdjFwaWNfaW5mby5jdXJyZW50X2ZyYW1lX2lkLCBu YW1lX3Nsb3RzLCByZWZfbmFtZV9tYXNrLCAwKTsKLQotLy8gICAgICAgIHZwaWMtPnJlZl9mcmFt ZV9jdHJsX2wwLmZpZWxkcy5zZWFyY2hfaWR4MCA9IEFWMV9SRUZfRlJBTUVfTEFTVDsKLQotICAg ICAgICAvKiogc2V0IHRoZSAybmQgbmVhcmVzdCBmcmFtZSBpbiBMMCBhcyBHb2xkZW4gZnJhbWUu ICovCi0gICAgICAgIGlmICgocGljLT5uYl9yZWZzWzBdID4gMSkgJiYKLSAgICAgICAgICAgICgo ZW5jLT5jYXBzLm1heFNpbmdsZVJlZmVyZW5jZUNvdW50ID4gMSkgfHwKLSAgICAgICAgICAgICAo ZW5jLT5jYXBzLm1heFVuaWRpcmVjdGlvbmFsQ29tcG91bmRSZWZlcmVuY2VDb3VudCA+IDApKSkg ewotICAgICAgICAgICAgaWYgKGVuYy0+Y2Fwcy5tYXhVbmlkaXJlY3Rpb25hbENvbXBvdW5kUmVm ZXJlbmNlQ291bnQpIHsKLSAgICAgICAgICAgICAgICBwcmVkX21vZGUgPSBWS19WSURFT19FTkNP REVfQVYxX1BSRURJQ1RJT05fTU9ERV9VTklESVJFQ1RJT05BTF9DT01QT1VORF9LSFI7Ci0gICAg ICAgICAgICAgICAgcmVmX25hbWVfbWFzayA9IGVuYy0+Y2Fwcy51bmlkaXJlY3Rpb25hbENvbXBv dW5kUmVmZXJlbmNlTmFtZU1hc2s7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZWYgPSBw aWMtPnJlZnNbMF1bcGljLT5uYl9yZWZzWzBdIC0gMl07Ci0gICAgICAgICAgICBhcF9yZWYgPSBy ZWYtPmNvZGVjX3ByaXY7Ci0gICAgICAgICAgICBhcC0+YXYxcGljX2luZm8ucmVmX2ZyYW1lX2lk eFszXSA9IGFwX3JlZi0+c2xvdDsKLSAgICAgICAgICAgIGFwLT5hdjFwaWNfaW5mby5yZWZfb3Jk ZXJfaGludFthcF9yZWYtPnNsb3RdID0gcmVmLT5kaXNwbGF5X29yZGVyIC0gYXBfcmVmLT5sYXN0 X2lkcl9mcmFtZTsKLS8vICAgICAgICAgICAgdnBpYy0+cmVmX2ZyYW1lX2N0cmxfbDAuZmllbGRz LnNlYXJjaF9pZHgxID0gQVYxX1JFRl9GUkFNRV9HT0xERU47Ci0gICAgICAgICAgICBzZXRfbmFt ZV9zbG90KGFwX3JlZi0+YXYxcGljX2luZm8uY3VycmVudF9mcmFtZV9pZCwgbmFtZV9zbG90cywg cmVmX25hbWVfbWFzaywgMCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBG Rl9IV19QSUNUVVJFX1RZUEVfQjoKLSAgICAgICAgYXAtPmF2MXBpY19pbmZvLmZyYW1lX3R5cGUg PSBTVERfVklERU9fQVYxX0ZSQU1FX1RZUEVfSU5URVI7Ci0gICAgICAgIHF1YW50aXphdGlvbi0+ YmFzZV9xX2lkeCA9IGVuYy0+cV9pZHhfYjsKLSAgICAgICAgYXAtPmF2MXBpY19pbmZvLnJlZnJl c2hfZnJhbWVfZmxhZ3MgPSAweDA7Ci0KLSAgICAgICAgcmNfZ3JvdXAgPSBWS19WSURFT19FTkNP REVfQVYxX1JBVEVfQ09OVFJPTF9HUk9VUF9CSVBSRURJQ1RJVkVfS0hSOwotICAgICAgICBwcmVk X21vZGUgPSBWS19WSURFT19FTkNPREVfQVYxX1BSRURJQ1RJT05fTU9ERV9CSURJUkVDVElPTkFM X0NPTVBPVU5EX0tIUjsKLSAgICAgICAgcmVmX25hbWVfbWFzayA9IGVuYy0+Y2Fwcy5iaWRpcmVj dGlvbmFsQ29tcG91bmRSZWZlcmVuY2VOYW1lTWFzazsKLQotLy8gICAgICAgIGZoLT5yZWZlcmVu Y2Vfc2VsZWN0ID0gMTsKLSAgICAgICAgLyoqIEIgZnJhbWUgd2lsbCBub3QgYmUgcmVmZXJlbmNl ZCwgZGlzYWJsZSBpdHMgcmVjb24gZnJhbWUuICovCi0vLyAgICAgICAgdnBpYy0+cGljdHVyZV9m bGFncy5iaXRzLmRpc2FibGVfZnJhbWVfcmVjb24gPSAxOwotCi0gICAgICAgIC8qKiBVc2UgTEFT VF9GUkFNRSBhbmQgQldEUkVGX0ZSQU1FIGZvciByZWZlcmVuY2UuICovCi0vLyAgICAgICAgdnBp Yy0+cmVmX2ZyYW1lX2N0cmxfbDAuZmllbGRzLnNlYXJjaF9pZHgwID0gQVYxX1JFRl9GUkFNRV9M QVNUOwotLy8gICAgICAgIHZwaWMtPnJlZl9mcmFtZV9jdHJsX2wxLmZpZWxkcy5zZWFyY2hfaWR4 MCA9IEFWMV9SRUZfRlJBTUVfQldEUkVGOwotCi0gICAgICAgIHJlZiA9IHBpYy0+cmVmc1swXVtw aWMtPm5iX3JlZnNbMF0gLSAxXTsKLSAgICAgICAgYXBfcmVmID0gcmVmLT5jb2RlY19wcml2Owot ICAgICAgICBhcC0+bGFzdF9pZHJfZnJhbWUgPSBhcF9yZWYtPmxhc3RfaWRyX2ZyYW1lOwotICAg ICAgICBhcC0+YXYxcGljX2luZm8ucHJpbWFyeV9yZWZfZnJhbWUgPSBhcF9yZWYtPnNsb3Q7Ci0g ICAgICAgIGFwLT5hdjFwaWNfaW5mby5yZWZfb3JkZXJfaGludFthcF9yZWYtPnNsb3RdID0gcmVm LT5kaXNwbGF5X29yZGVyIC0gYXBfcmVmLT5sYXN0X2lkcl9mcmFtZTsKLSAgICAgICAgZm9yIChp bnQgaSA9IDA7IGkgPCBBVjFfUkVGX0ZSQU1FX0dPTERFTjsgaSsrKQotICAgICAgICAgICAgYXAt PmF2MXBpY19pbmZvLnJlZl9mcmFtZV9pZHhbaV0gPSBhcF9yZWYtPnNsb3Q7Ci0gICAgICAgIHNl dF9uYW1lX3Nsb3QoYXBfcmVmLT5hdjFwaWNfaW5mby5jdXJyZW50X2ZyYW1lX2lkLCBuYW1lX3Ns b3RzLCByZWZfbmFtZV9tYXNrLCAwKTsKLQotICAgICAgICByZWYgPSBwaWMtPnJlZnNbMV1bcGlj LT5uYl9yZWZzWzFdIC0gMV07Ci0gICAgICAgIGFwX3JlZiA9IHJlZi0+Y29kZWNfcHJpdjsKLSAg ICAgICAgYXAtPmF2MXBpY19pbmZvLnJlZl9vcmRlcl9oaW50W2FwX3JlZi0+c2xvdF0gPSByZWYt PmRpc3BsYXlfb3JkZXIgLSBhcF9yZWYtPmxhc3RfaWRyX2ZyYW1lOwotICAgICAgICBmb3IgKGlu dCBpID0gQVYxX1JFRl9GUkFNRV9HT0xERU47IGkgPCBBVjFfUkVGU19QRVJfRlJBTUU7IGkrKykK LSAgICAgICAgICAgIGFwLT5hdjFwaWNfaW5mby5yZWZfZnJhbWVfaWR4W2ldID0gYXBfcmVmLT5z bG90OwotICAgICAgICBzZXRfbmFtZV9zbG90KGFwX3JlZi0+YXYxcGljX2luZm8uY3VycmVudF9m cmFtZV9pZCwgbmFtZV9zbG90cywgcmVmX25hbWVfbWFzaywgMSk7Ci0gICAgICAgIGJyZWFrOwot ICAgIH0KLQotICAgIGFwLT5hdjFwaWNfaW5mby5mbGFncy5zaG93YWJsZV9mcmFtZSA9IGFwLT5h djFwaWNfaW5mby5mcmFtZV90eXBlICE9IFNURF9WSURFT19BVjFfRlJBTUVfVFlQRV9LRVk7Ci0g ICAgYXAtPmF2MXBpY19pbmZvLm9yZGVyX2hpbnQgPSBwaWMtPmRpc3BsYXlfb3JkZXIgLSBhcC0+ bGFzdF9pZHJfZnJhbWU7Ci0KLSAgICBhcC0+dmthdjFwaWNfaW5mbyA9IChWa1ZpZGVvRW5jb2Rl QVYxUGljdHVyZUluZm9LSFIpIHsKLSAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVf VklERU9fRU5DT0RFX0FWMV9QSUNUVVJFX0lORk9fS0hSLAotICAgICAgICAucE5leHQgPSBOVUxM LAotICAgICAgICAucHJlZGljdGlvbk1vZGUgPSBwcmVkX21vZGUsCi0gICAgICAgIC5yYXRlQ29u dHJvbEdyb3VwID0gcmNfZ3JvdXAsCi0gICAgICAgIC5jb25zdGFudFFJbmRleCA9IHF1YW50aXph dGlvbi0+YmFzZV9xX2lkeCwKLSAgICAgICAgLnBTdGRQaWN0dXJlSW5mbyA9ICZhcC0+YXYxcGlj X2luZm8sCi0gICAgICAgIC8vIC5yZWZlcmVuY2VOYW1lU2xvdEluZGljZXMgaXMgc2V0IGJlbG93 Ci0gICAgICAgIC5wcmltYXJ5UmVmZXJlbmNlQ2RmT25seSA9IDAsCi0gICAgICAgIC5nZW5lcmF0 ZU9idUV4dGVuc2lvbkhlYWRlciA9IDAsCi0gICAgfTsKLSAgICBlbmNvZGVfaW5mby0+cE5leHQg PSAmYXAtPnZrYXYxcGljX2luZm87Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IEZGX0FSUkFZ X0VMRU1TKGFwLT52a2F2MXBpY19pbmZvLnJlZmVyZW5jZU5hbWVTbG90SW5kaWNlcyk7IGkrKykK LSAgICAgICAgYXAtPnZrYXYxcGljX2luZm8ucmVmZXJlbmNlTmFtZVNsb3RJbmRpY2VzW2ldID0g bmFtZV9zbG90c1tpXTsKLQotICAgIHJlZl9zbG90ID0gKFZrVmlkZW9SZWZlcmVuY2VTbG90SW5m b0tIUiAqKWVuY29kZV9pbmZvLT5wU2V0dXBSZWZlcmVuY2VTbG90OwotICAgIHJlZl9zbG90LT5w TmV4dCA9ICZhcC0+dmthdjFkcGJfaW5mbzsKLQotICAgIGFwLT5hdjFkcGJfaW5mbyA9IChTdGRW aWRlb0VuY29kZUFWMVJlZmVyZW5jZUluZm8pIHsKLSAgICAgICAgLmZsYWdzID0gKFN0ZFZpZGVv RW5jb2RlQVYxUmVmZXJlbmNlSW5mb0ZsYWdzKSB7Ci0gICAgICAgICAgICAuZGlzYWJsZV9mcmFt ZV9lbmRfdXBkYXRlX2NkZiA9IDAsCi0gICAgICAgICAgICAuc2VnbWVudGF0aW9uX2VuYWJsZWQg PSAwLAotICAgICAgICAgICAgLyogUmVzZXJ2ZWQgKi8KLSAgICAgICAgfSwKLSAgICAgICAgLlJl ZkZyYW1lSWQgPSByZWZfc2xvdC0+c2xvdEluZGV4LAotICAgICAgICAuZnJhbWVfdHlwZSA9IGFw LT5hdjFwaWNfaW5mby5mcmFtZV90eXBlLAotICAgICAgICAuT3JkZXJIaW50ID0gcGljLT5kaXNw bGF5X29yZGVyIC0gYXAtPmxhc3RfaWRyX2ZyYW1lLAotICAgICAgICAvKiBSZXNlcnZlZCAqLwot ICAgICAgICAucEV4dGVuc2lvbkhlYWRlciA9ICZhcC0+ZXh0X2hlYWRlciwKLSAgICB9OwotCi0g ICAgYXAtPnZrYXYxZHBiX2luZm8gPSAoVmtWaWRlb0VuY29kZUFWMURwYlNsb3RJbmZvS0hSKSB7 Ci0gICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX1ZJREVPX0VOQ09ERV9BVjFfRFBC X1NMT1RfSU5GT19LSFIsCi0gICAgICAgIC5wU3RkUmVmZXJlbmNlSW5mbyA9ICZhcC0+YXYxZHBi X2luZm8sCi0gICAgfTsKLQotICAgIGFwLT51bml0c19uZWVkZWQgPSAwOwotICAgIGlmIChwaWMt PnR5cGUgPT0gRkZfSFdfUElDVFVSRV9UWVBFX0lEUikgewotICAgICAgICBBVkZyYW1lU2lkZURh dGEgKnNkID0gTlVMTDsKLSAgICAgICAgaWYgKGVuYy0+dW5pdF9lbGVtcyAmIFVOSVRfTUFTVEVS SU5HX0RJU1BMQVkpCi0gICAgICAgICAgICBzZCA9IGF2X2ZyYW1lX2dldF9zaWRlX2RhdGEocGlj LT5pbnB1dF9pbWFnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBB Vl9GUkFNRV9EQVRBX01BU1RFUklOR19ESVNQTEFZX01FVEFEQVRBKTsKLSAgICAgICAgaWYgKHNk KSB7Ci0gICAgICAgICAgICBBVk1hc3RlcmluZ0Rpc3BsYXlNZXRhZGF0YSAqbWRtID0KLSAgICAg ICAgICAgICAgICAoQVZNYXN0ZXJpbmdEaXNwbGF5TWV0YWRhdGEgKilzZC0+ZGF0YTsKLSAgICAg ICAgICAgIGlmIChtZG0tPmhhc19wcmltYXJpZXMgJiYgbWRtLT5oYXNfbHVtaW5hbmNlKSB7Ci0g ICAgICAgICAgICAgICAgQVYxUmF3T0JVICAgICAgICAgICAgICAqb2J1ID0gJmVuYy0+bWV0YV9t YXN0ZXJpbmdfb2J1OwotICAgICAgICAgICAgICAgIEFWMVJhd01ldGFkYXRhICAgICAgICAgICpt ZCA9ICZvYnUtPm9idS5tZXRhZGF0YTsKLSAgICAgICAgICAgICAgICBBVjFSYXdNZXRhZGF0YUhE Uk1EQ1YgKm1kY3YgPSAmbWQtPm1ldGFkYXRhLmhkcl9tZGN2OwotICAgICAgICAgICAgICAgIGNv bnN0IGludCAgICAgICAgY2hyb21hX2RlbiA9IDEgPDwgMTY7Ci0gICAgICAgICAgICAgICAgY29u c3QgaW50ICAgICAgbWF4X2x1bWFfZGVuID0gMSA8PCA4OwotICAgICAgICAgICAgICAgIGNvbnN0 IGludCAgICAgIG1pbl9sdW1hX2RlbiA9IDEgPDwgMTQ7Ci0KLSAgICAgICAgICAgICAgICBtZW1z ZXQob2J1LCAwLCBzaXplb2YoKm9idSkpOwotICAgICAgICAgICAgICAgIG9idS0+aGVhZGVyLm9i dV90eXBlID0gQVYxX09CVV9NRVRBREFUQTsKLSAgICAgICAgICAgICAgICBtZC0+bWV0YWRhdGFf dHlwZSA9IEFWMV9NRVRBREFUQV9UWVBFX0hEUl9NRENWOwotCi0gICAgICAgICAgICAgICAgZm9y IChpbnQgaSA9IDA7IGkgPCAzOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgbWRjdi0+cHJp bWFyeV9jaHJvbWF0aWNpdHlfeFtpXSA9Ci0gICAgICAgICAgICAgICAgICAgICAgICBhdl9yZXNj YWxlKG1kbS0+ZGlzcGxheV9wcmltYXJpZXNbaV1bMF0ubnVtLCBjaHJvbWFfZGVuLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZG0tPmRpc3BsYXlfcHJpbWFyaWVzW2ldWzBd LmRlbik7Ci0gICAgICAgICAgICAgICAgICAgIG1kY3YtPnByaW1hcnlfY2hyb21hdGljaXR5X3lb aV0gPQotICAgICAgICAgICAgICAgICAgICAgICAgYXZfcmVzY2FsZShtZG0tPmRpc3BsYXlfcHJp bWFyaWVzW2ldWzFdLm51bSwgY2hyb21hX2RlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbWRtLT5kaXNwbGF5X3ByaW1hcmllc1tpXVsxXS5kZW4pOwotICAgICAgICAgICAg ICAgIH0KLQotICAgICAgICAgICAgICAgIG1kY3YtPndoaXRlX3BvaW50X2Nocm9tYXRpY2l0eV94 ID0KLSAgICAgICAgICAgICAgICAgICAgYXZfcmVzY2FsZShtZG0tPndoaXRlX3BvaW50WzBdLm51 bSwgY2hyb21hX2RlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZG0tPndoaXRl X3BvaW50WzBdLmRlbik7Ci0gICAgICAgICAgICAgICAgbWRjdi0+d2hpdGVfcG9pbnRfY2hyb21h dGljaXR5X3kgPQotICAgICAgICAgICAgICAgICAgICBhdl9yZXNjYWxlKG1kbS0+d2hpdGVfcG9p bnRbMV0ubnVtLCBjaHJvbWFfZGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1k bS0+d2hpdGVfcG9pbnRbMV0uZGVuKTsKLQotICAgICAgICAgICAgICAgIG1kY3YtPmx1bWluYW5j ZV9tYXggPQotICAgICAgICAgICAgICAgICAgICBhdl9yZXNjYWxlKG1kbS0+bWF4X2x1bWluYW5j ZS5udW0sIG1heF9sdW1hX2RlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZG0t Pm1heF9sdW1pbmFuY2UuZGVuKTsKLSAgICAgICAgICAgICAgICBtZGN2LT5sdW1pbmFuY2VfbWlu ID0KLSAgICAgICAgICAgICAgICAgICAgYXZfcmVzY2FsZShtZG0tPm1pbl9sdW1pbmFuY2UubnVt LCBtaW5fbHVtYV9kZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWRtLT5taW5f bHVtaW5hbmNlLmRlbik7Ci0gICAgICAgICAgICAgICAgYXAtPnVuaXRzX25lZWRlZCB8PSBVTklU X01BU1RFUklOR19ESVNQTEFZOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAg aWYgKGVuYy0+dW5pdF9lbGVtcyAmIFVOSVRfQ09OVEVOVF9MSUdIVF9MRVZFTCkKLSAgICAgICAg ICAgIHNkID0gYXZfZnJhbWVfZ2V0X3NpZGVfZGF0YShwaWMtPmlucHV0X2ltYWdlLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFWX0ZSQU1FX0RBVEFfQ09OVEVOVF9M SUdIVF9MRVZFTCk7Ci0gICAgICAgIGlmIChzZCkgewotICAgICAgICAgICAgQVZDb250ZW50TGln aHRNZXRhZGF0YSAqY2xsbSA9IChBVkNvbnRlbnRMaWdodE1ldGFkYXRhICopc2QtPmRhdGE7Ci0g ICAgICAgICAgICBBVjFSYXdPQlUgICAgICAgICAgICAgICAqb2J1ID0gJmVuYy0+bWV0YV9jbGxf b2J1OwotICAgICAgICAgICAgQVYxUmF3TWV0YWRhdGEgICAgICAgICAgICptZCA9ICZvYnUtPm9i dS5tZXRhZGF0YTsKLSAgICAgICAgICAgIEFWMVJhd01ldGFkYXRhSERSQ0xMICAgICpjbGwgPSAm bWQtPm1ldGFkYXRhLmhkcl9jbGw7Ci0KLSAgICAgICAgICAgIG1lbXNldChvYnUsIDAsIHNpemVv Zigqb2J1KSk7Ci0gICAgICAgICAgICBvYnUtPmhlYWRlci5vYnVfdHlwZSA9IEFWMV9PQlVfTUVU QURBVEE7Ci0gICAgICAgICAgICBtZC0+bWV0YWRhdGFfdHlwZSAgICA9IEFWMV9NRVRBREFUQV9U WVBFX0hEUl9DTEw7Ci0gICAgICAgICAgICBjbGwtPm1heF9jbGwgICAgICAgICA9IGNsbG0tPk1h eENMTDsKLSAgICAgICAgICAgIGNsbC0+bWF4X2ZhbGwgICAgICAgID0gY2xsbS0+TWF4RkFMTDsK LQotICAgICAgICAgICAgYXAtPnVuaXRzX25lZWRlZCB8PSBVTklUX0NPTlRFTlRfTElHSFRfTEVW RUw7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBp bml0X3Byb2ZpbGUoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LAotICAgICAgICAgICAgICAgICAgICAg ICAgVmtWaWRlb1Byb2ZpbGVJbmZvS0hSICpwcm9maWxlLCB2b2lkICpwbmV4dCkKLXsKLSAgICBW a1Jlc3VsdCByZXQ7Ci0gICAgVnVsa2FuRW5jb2RlQVYxQ29udGV4dCAqZW5jID0gYXZjdHgtPnBy aXZfZGF0YTsKLSAgICBGRlZ1bGthbkVuY29kZUNvbnRleHQgKmN0eCA9ICZlbmMtPmNvbW1vbjsK LSAgICBGRlZ1bGthbkNvbnRleHQgKnMgPSAmY3R4LT5zOwotICAgIEZGVnVsa2FuRnVuY3Rpb25z ICp2ayA9ICZjdHgtPnMudmtmbjsKLSAgICBGRkhXQmFzZUVuY29kZUNvbnRleHQgKmJhc2VfY3R4 ID0gJmN0eC0+YmFzZTsKLQotICAgIFZrVmlkZW9FbmNvZGVBVjFDYXBhYmlsaXRpZXNLSFIgYXYx X2NhcHMgPSB7Ci0gICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX1ZJREVPX0VOQ09E RV9BVjFfQ0FQQUJJTElUSUVTX0tIUiwKLSAgICB9OwotICAgIFZrVmlkZW9FbmNvZGVDYXBhYmls aXRpZXNLSFIgZW5jX2NhcHMgPSB7Ci0gICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBF X1ZJREVPX0VOQ09ERV9DQVBBQklMSVRJRVNfS0hSLAotICAgICAgICAucE5leHQgPSAmYXYxX2Nh cHMsCi0gICAgfTsKLSAgICBWa1ZpZGVvQ2FwYWJpbGl0aWVzS0hSIGNhcHMgPSB7Ci0gICAgICAg IC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX1ZJREVPX0NBUEFCSUxJVElFU19LSFIsCi0gICAg ICAgIC5wTmV4dCA9ICZlbmNfY2FwcywKLSAgICB9OwotCi0gICAgLyogSW4gb3JkZXIgb2YgcHJl ZmVyZW5jZSAqLwotICAgIGludCBsYXN0X3N1cHBvcnRlZCA9IEFWX1BST0ZJTEVfVU5LTk9XTjsK LSAgICBzdGF0aWMgY29uc3QgaW50IGtub3duX3Byb2ZpbGVzW10gPSB7Ci0gICAgICAgIEFWX1BS T0ZJTEVfQVYxX01BSU4sCi0gICAgICAgIEFWX1BST0ZJTEVfQVYxX0hJR0gsCi0gICAgICAgIEFW X1BST0ZJTEVfQVYxX1BST0ZFU1NJT05BTCwKLSAgICB9OwotICAgIGludCBuYl9wcm9maWxlcyA9 IEZGX0FSUkFZX0VMRU1TKGtub3duX3Byb2ZpbGVzKTsKLQotICAgIGNvbnN0IEFWUGl4Rm10RGVz Y3JpcHRvciAqZGVzYyA9IGF2X3BpeF9mbXRfZGVzY19nZXQocy0+ZnJhbWVzLT5zd19mb3JtYXQp OwotICAgIGlmICghZGVzYykKLSAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKLQotICAg IGlmIChzLT5mcmFtZXMtPnN3X2Zvcm1hdCA9PSBBVl9QSVhfRk1UX05WMTIgfHwKLSAgICAgICAg cy0+ZnJhbWVzLT5zd19mb3JtYXQgPT0gQVZfUElYX0ZNVF9QMDEwKQotICAgICAgICBuYl9wcm9m aWxlcyA9IDE7Ci0KLSAgICBlbmMtPnByb2ZpbGUgPSAoVmtWaWRlb0VuY29kZUFWMVByb2ZpbGVJ bmZvS0hSKSB7Ci0gICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX1ZJREVPX0VOQ09E RV9BVjFfUFJPRklMRV9JTkZPX0tIUiwKLSAgICAgICAgLnBOZXh0ID0gcG5leHQsCi0gICAgICAg IC5zdGRQcm9maWxlID0gZmZfdmtfYXYxX3Byb2ZpbGVfdG9fdmsoYXZjdHgtPnByb2ZpbGUpLAot ICAgIH07Ci0gICAgcHJvZmlsZS0+cE5leHQgPSAmZW5jLT5wcm9maWxlOwotCi0gICAgLyogU2V0 IGxldmVsICovCi0gICAgaWYgKGF2Y3R4LT5sZXZlbCA9PSBBVl9MRVZFTF9VTktOT1dOKSB7Ci0g ICAgICAgIGNvbnN0IEFWMUxldmVsRGVzY3JpcHRvciAqbGV2ZWw7Ci0gICAgICAgIGZsb2F0IGZy YW1lcmF0ZSA9IDAuMDsKLQotICAgICAgICBpZiAoYXZjdHgtPmZyYW1lcmF0ZS5udW0gPiAwICYm IGF2Y3R4LT5mcmFtZXJhdGUuZGVuID4gMCkKLSAgICAgICAgICAgIGZyYW1lcmF0ZSA9IGF2X3Ey ZChhdmN0eC0+ZnJhbWVyYXRlKTsKLQotICAgICAgICBsZXZlbCA9IGZmX2F2MV9ndWVzc19sZXZl bChhdmN0eC0+Yml0X3JhdGUsIGVuYy0+c2VxX3RpZXIsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGJhc2VfY3R4LT5zdXJmYWNlX3dpZHRoLCBiYXNlX2N0eC0+c3VyZmFjZV9o ZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuYy0+dGlsZV9yb3dz ICogZW5jLT50aWxlX2NvbHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVu Yy0+dGlsZV9jb2xzLCBmcmFtZXJhdGUpOwotICAgICAgICBpZiAobGV2ZWwpIHsKLSAgICAgICAg ICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX1ZFUkJPU0UsICJVc2luZyBsZXZlbCAlcy5cbiIsIGxl dmVsLT5uYW1lKTsKLSAgICAgICAgICAgIGVuYy0+c2VxX2xldmVsX2lkeCA9IGZmX3ZrX2F2MV9s ZXZlbF90b192ayhsZXZlbC0+bGV2ZWxfaWR4KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg ICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX1ZFUkJPU0UsICJTdHJlYW0gd2lsbCBub3QgY29uZm9y bSB0byAiCi0gICAgICAgICAgICAgICAgICAgImFueSBub3JtYWwgbGV2ZWwsIHVzaW5nIGxldmVs IDcuMyBieSBkZWZhdWx0LlxuIik7Ci0gICAgICAgICAgICBlbmMtPnNlcV9sZXZlbF9pZHggPSBT VERfVklERU9fQVYxX0xFVkVMXzdfMzsKLSAgICAgICAgICAgIGVuYy0+c2VxX3RpZXIgPSAxOwot ICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZW5jLT5zZXFfbGV2ZWxfaWR4ID0gZmZf dmtfYXYxX2xldmVsX3RvX3ZrKGF2Y3R4LT5sZXZlbCk7Ci0gICAgfQotCi0gICAgLyogVXNlciBo YXMgZXhwbGljaXRseSBzcGVjaWZpZWQgYSBwcm9maWxlLiAqLwotICAgIGlmIChhdmN0eC0+cHJv ZmlsZSAhPSBBVl9QUk9GSUxFX1VOS05PV04pCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgYXZf bG9nKGF2Y3R4LCBBVl9MT0dfREVCVUcsICJTdXBwb3J0ZWQgcHJvZmlsZXM6XG4iKTsKLSAgICBm b3IgKGludCBpID0gMDsgaSA8IG5iX3Byb2ZpbGVzOyBpKyspIHsKLSAgICAgICAgZW5jLT5wcm9m aWxlLnN0ZFByb2ZpbGUgPSBmZl92a19hdjFfcHJvZmlsZV90b192ayhrbm93bl9wcm9maWxlc1tp XSk7Ci0gICAgICAgIHJldCA9IHZrLT5HZXRQaHlzaWNhbERldmljZVZpZGVvQ2FwYWJpbGl0aWVz S0hSKHMtPmh3Y3R4LT5waHlzX2RldiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcHJvZmlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNhcHMpOwotICAgICAgICBpZiAocmV0 ID09IFZLX1NVQ0NFU1MpIHsKLSAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0RFQlVH LCAiICAgICVzXG4iLAotICAgICAgICAgICAgICAgICAgIGF2Y29kZWNfcHJvZmlsZV9uYW1lKGF2 Y3R4LT5jb2RlY19pZCwga25vd25fcHJvZmlsZXNbaV0pKTsKLSAgICAgICAgICAgIGxhc3Rfc3Vw cG9ydGVkID0ga25vd25fcHJvZmlsZXNbaV07Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAo bGFzdF9zdXBwb3J0ZWQgPT0gQVZfUFJPRklMRV9VTktOT1dOKSB7Ci0gICAgICAgIGF2X2xvZyhh dmN0eCwgQVZfTE9HX0VSUk9SLCAiTm8gc3VwcG9ydGVkIHByb2ZpbGVzIGZvciBnaXZlbiBmb3Jt YXRcbiIpOwotICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9UU1VQKTsKLSAgICB9Ci0KLSAgICBl bmMtPnByb2ZpbGUuc3RkUHJvZmlsZSA9IGZmX3ZrX2F2MV9wcm9maWxlX3RvX3ZrKGxhc3Rfc3Vw cG9ydGVkKTsKLSAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19WRVJCT1NFLCAiVXNpbmcgcHJvZmls ZSAlc1xuIiwKLSAgICAgICAgICAgYXZjb2RlY19wcm9maWxlX25hbWUoYXZjdHgtPmNvZGVjX2lk LCBsYXN0X3N1cHBvcnRlZCkpOwotICAgIGF2Y3R4LT5wcm9maWxlID0gbGFzdF9zdXBwb3J0ZWQ7 Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBpbml0X2VuY19vcHRpb25zKEFWQ29k ZWNDb250ZXh0ICphdmN0eCkKLXsKLSAgICBWdWxrYW5FbmNvZGVBVjFDb250ZXh0ICplbmMgPSBh dmN0eC0+cHJpdl9kYXRhOwotCi0gICAgaWYgKGF2Y3R4LT5yY19idWZmZXJfc2l6ZSkKLSAgICAg ICAgZW5jLT5ocmRfYnVmZmVyX3NpemUgPSBhdmN0eC0+cmNfYnVmZmVyX3NpemU7Ci0gICAgZWxz ZSBpZiAoYXZjdHgtPnJjX21heF9yYXRlID4gMCkKLSAgICAgICAgZW5jLT5ocmRfYnVmZmVyX3Np emUgPSBhdmN0eC0+cmNfbWF4X3JhdGU7Ci0gICAgZWxzZQotICAgICAgICBlbmMtPmhyZF9idWZm ZXJfc2l6ZSA9IGF2Y3R4LT5iaXRfcmF0ZTsKLQotICAgIGlmIChhdmN0eC0+cmNfaW5pdGlhbF9i dWZmZXJfb2NjdXBhbmN5KSB7Ci0gICAgICAgIGlmIChhdmN0eC0+cmNfaW5pdGlhbF9idWZmZXJf b2NjdXBhbmN5ID4gZW5jLT5ocmRfYnVmZmVyX3NpemUpIHsKLSAgICAgICAgICAgIGF2X2xvZyhh dmN0eCwgQVZfTE9HX0VSUk9SLCAiSW52YWxpZCBSQyBidWZmZXIgc2V0dGluZ3M6ICIKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibXVzdCBoYXZlIGluaXRpYWwgYnVm ZmVyIHNpemUgKCVkKSA8PSAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgImJ1ZmZlciBzaXplICglIlBSSWQ2NCIpLlxuIiwKLSAgICAgICAgICAgICAgICAgICBhdmN0 eC0+cmNfaW5pdGlhbF9idWZmZXJfb2NjdXBhbmN5LCBlbmMtPmhyZF9idWZmZXJfc2l6ZSk7Ci0g ICAgICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOwotICAgICAgICB9Ci0gICAgICAgIGVu Yy0+aW5pdGlhbF9idWZmZXJfZnVsbG5lc3MgPSBhdmN0eC0+cmNfaW5pdGlhbF9idWZmZXJfb2Nj dXBhbmN5OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGVuYy0+aW5pdGlhbF9idWZmZXJfZnVsbG5l c3MgPSBlbmMtPmhyZF9idWZmZXJfc2l6ZSAqIDMgLyA0OwotICAgIH0KLQotICAgIGlmIChlbmMt PmNvbW1vbi5vcHRzLnJjX21vZGUgPT0gVktfVklERU9fRU5DT0RFX1JBVEVfQ09OVFJPTF9NT0RF X0RJU0FCTEVEX0JJVF9LSFIpIHsKLSAgICAgICAgZW5jLT5xX2lkeF9wID0gYXZfY2xpcChlbmMt PmNvbW1vbi5vcHRzLnFwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuYy0+Y2Fw cy5taW5RSW5kZXgsIGVuYy0+Y2Fwcy5tYXhRSW5kZXgpOwotICAgICAgICBpZiAoZmFicyhhdmN0 eC0+aV9xdWFudF9mYWN0b3IpID4gMC4wKQotICAgICAgICAgICAgZW5jLT5xX2lkeF9pZHIgPQot ICAgICAgICAgICAgICAgIGF2X2NsaXAoKGZhYnMoYXZjdHgtPmlfcXVhbnRfZmFjdG9yKSAqIGVu Yy0+cV9pZHhfcCAgKwotICAgICAgICAgICAgICAgICAgICAgICAgIGF2Y3R4LT5pX3F1YW50X29m ZnNldCkgKyAwLjUsCi0gICAgICAgICAgICAgICAgICAgICAgICAwLCAyNTUpOwotICAgICAgICBl bHNlCi0gICAgICAgICAgICBlbmMtPnFfaWR4X2lkciA9IGVuYy0+cV9pZHhfcDsKLQotICAgICAg ICBpZiAoZmFicyhhdmN0eC0+Yl9xdWFudF9mYWN0b3IpID4gMC4wKQotICAgICAgICAgICAgZW5j LT5xX2lkeF9iID0KLSAgICAgICAgICAgICAgICBhdl9jbGlwKChmYWJzKGF2Y3R4LT5iX3F1YW50 X2ZhY3RvcikgKiBlbmMtPnFfaWR4X3AgICsKLSAgICAgICAgICAgICAgICAgICAgICAgICBhdmN0 eC0+Yl9xdWFudF9vZmZzZXQpICsgMC41LAotICAgICAgICAgICAgICAgICAgICAgICAgMCwgMjU1 KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZW5jLT5xX2lkeF9iID0gZW5jLT5xX2lkeF9w OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8qKiBBcmJpdHJhcnkgdmFsdWUgKi8KLSAgICAgICAg ZW5jLT5xX2lkeF9pZHIgPSBlbmMtPnFfaWR4X3AgPSBlbmMtPnFfaWR4X2IgPSAxMjg7Ci0gICAg fQotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBhdl9jb2xkIGludCBpbml0X3NlcXVlbmNl X2hlYWRlcnMoQVZDb2RlY0NvbnRleHQgKmF2Y3R4KQotewotICAgIFZ1bGthbkVuY29kZUFWMUNv bnRleHQgKmVuYyA9IGF2Y3R4LT5wcml2X2RhdGE7Ci0gICAgRkZWdWxrYW5FbmNvZGVDb250ZXh0 ICpjdHggPSAmZW5jLT5jb21tb247Ci0gICAgRkZWdWxrYW5Db250ZXh0ICpzID0gJmN0eC0+czsK LSAgICBGRkhXQmFzZUVuY29kZUNvbnRleHQgKmJhc2VfY3R4ID0gJmN0eC0+YmFzZTsKLQotICAg IEFWMVJhd09CVSAqc2VxX29idSA9ICZlbmMtPnNlcV9oZHJfb2J1OwotICAgIEFWMVJhd1NlcXVl bmNlSGVhZGVyICpzZXEgPSAmc2VxX29idS0+b2J1LnNlcXVlbmNlX2hlYWRlcjsKLQotICAgIGNv bnN0IEFWUGl4Rm10RGVzY3JpcHRvciAqZGVzYyA9IGF2X3BpeF9mbXRfZGVzY19nZXQocy0+ZnJh bWVzLT5zd19mb3JtYXQpOwotICAgIGlmICghZGVzYykKLSAgICAgICAgcmV0dXJuIEFWRVJST1Io RUlOVkFMKTsKLQotICAgIHNlcV9vYnUtPmhlYWRlci5vYnVfdHlwZSA9IEFWMV9PQlVfU0VRVUVO Q0VfSEVBREVSOwotICAgICpzZXEgPSAoQVYxUmF3U2VxdWVuY2VIZWFkZXIpIHsKLSAgICAgICAg LnNlcV9wcm9maWxlID0gYXZjdHgtPnByb2ZpbGUsCi0gICAgICAgIC5zZXFfZm9yY2VfaW50ZWdl cl9tdiA9IHNlcS0+c2VxX2ZvcmNlX3NjcmVlbl9jb250ZW50X3Rvb2xzID8KLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgQVYxX1NFTEVDVF9TQ1JFRU5fQ09OVEVOVF9UT09MUyA6Ci0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFWMV9TRUxFQ1RfSU5URUdFUl9NViwKLSAg ICAgICAgLmZyYW1lX3dpZHRoX2JpdHNfbWludXNfMSA9IGF2X2xvZzIoYmFzZV9jdHgtPnN1cmZh Y2Vfd2lkdGgpLAotICAgICAgICAuZnJhbWVfaGVpZ2h0X2JpdHNfbWludXNfMSA9IGF2X2xvZzIo YmFzZV9jdHgtPnN1cmZhY2VfaGVpZ2h0KSwKLSAgICAgICAgLm1heF9mcmFtZV93aWR0aF9taW51 c18xID0gYmFzZV9jdHgtPnN1cmZhY2Vfd2lkdGggLSAxLAotICAgICAgICAubWF4X2ZyYW1lX2hl aWdodF9taW51c18xID0gYmFzZV9jdHgtPnN1cmZhY2VfaGVpZ2h0IC0gMSwKLSAgICAgICAgLmVu YWJsZV9vcmRlcl9oaW50ID0gMSwKLSAgICAgICAgLm9yZGVyX2hpbnRfYml0c19taW51c18xID0g YXZfY2xpcF9pbnRwMihhdl9sb2cyKGN0eC0+YmFzZS5nb3Bfc2l6ZSksIDMpLAotICAgICAgICAu dXNlXzEyOHgxMjhfc3VwZXJibG9jayA9ICEhKGVuYy0+Y2Fwcy5zdXBlcmJsb2NrU2l6ZXMgJiBW S19WSURFT19FTkNPREVfQVYxX1NVUEVSQkxPQ0tfU0laRV8xMjhfQklUX0tIUiksCi0gICAgICAg IC5jb2xvcl9jb25maWcgPSAoQVYxUmF3Q29sb3JDb25maWcpIHsKLSAgICAgICAgICAgIC5oaWdo X2JpdGRlcHRoID0gZGVzYy0+Y29tcFswXS5kZXB0aCA+IDgsCi0gICAgICAgICAgICAuY29sb3Jf cHJpbWFyaWVzICAgICAgICAgICAgICAgID0gYXZjdHgtPmNvbG9yX3ByaW1hcmllcywKLSAgICAg ICAgICAgIC50cmFuc2Zlcl9jaGFyYWN0ZXJpc3RpY3MgICAgICAgPSBhdmN0eC0+Y29sb3JfdHJj LAotICAgICAgICAgICAgLm1hdHJpeF9jb2VmZmljaWVudHMgICAgICAgICAgICA9IGF2Y3R4LT5j b2xvcnNwYWNlLAotICAgICAgICAgICAgLmNvbG9yX2Rlc2NyaXB0aW9uX3ByZXNlbnRfZmxhZyA9 IChhdmN0eC0+Y29sb3JfcHJpbWFyaWVzICE9IEFWQ09MX1BSSV9VTlNQRUNJRklFRCB8fAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdmN0eC0+Y29sb3Jf dHJjICAgICAgICE9IEFWQ09MX1RSQ19VTlNQRUNJRklFRCB8fAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdmN0eC0+Y29sb3JzcGFjZSAgICAgICE9IEFW Q09MX1NQQ19VTlNQRUNJRklFRCksCi0gICAgICAgICAgICAuc3Vic2FtcGxpbmdfeCAgICAgICAg ICAgICAgICAgID0gZGVzYy0+bG9nMl9jaHJvbWFfdywKLSAgICAgICAgICAgIC5zdWJzYW1wbGlu Z195ICAgICAgICAgICAgICAgICAgPSBkZXNjLT5sb2cyX2Nocm9tYV9oLAotICAgICAgICAgICAg LmNocm9tYV9zYW1wbGVfcG9zaXRpb24gICAgICAgICA9IGF2Y3R4LT5jaHJvbWFfc2FtcGxlX2xv Y2F0aW9uID09IEFWQ0hST01BX0xPQ19MRUZUID8KLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBBVjFfQ1NQX1ZFUlRJQ0FMIDoKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdmN0eC0+Y2hyb21hX3NhbXBsZV9sb2NhdGlv biA9PSBBVkNIUk9NQV9MT0NfVE9QTEVGVCA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgQVYxX0NTUF9DT0xPQ0FURUQgOgotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFWMV9DU1BfVU5LTk9XTiwKLSAgICAgICAgfSwK LQotICAgICAgICAvKiBPcGVyYXRpbmcgcG9pbnQgKi8KLSAgICAgICAgLnNlcV90aWVyID0geyBl bmMtPnNlcV90aWVyIH0sCi0gICAgICAgIC5zZXFfbGV2ZWxfaWR4ID0geyBlbmMtPnNlcV9sZXZl bF9pZHggfSwKLSAgICAgICAgLmRlY29kZXJfYnVmZmVyX2RlbGF5ID0geyBiYXNlX2N0eC0+ZGVj b2RlX2RlbGF5IH0sCi0gICAgICAgIC5lbmNvZGVyX2J1ZmZlcl9kZWxheSA9IHsgYmFzZV9jdHgt Pm91dHB1dF9kZWxheSB9LAotICAgICAgICAub3BlcmF0aW5nX3BvaW50c19jbnRfbWludXNfMSA9 IDEgLSAxLAotICAgIH07Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotdHlwZWRlZiBzdHJ1Y3QgVnVs a2FuQVYxVW5pdHMgewotICAgIFN0ZFZpZGVvQVYxU2VxdWVuY2VIZWFkZXIgc2VxX2hkcjsKLSAg ICBTdGRWaWRlb0FWMVRpbWluZ0luZm8gdGltaW5nX2luZm87Ci0gICAgU3RkVmlkZW9BVjFDb2xv ckNvbmZpZyBjb2xvcl9jb25maWc7Ci0KLSAgICBTdGRWaWRlb0VuY29kZUFWMURlY29kZXJNb2Rl bEluZm8gZGVjb2Rlcl9tb2RlbDsKLSAgICBTdGRWaWRlb0VuY29kZUFWMU9wZXJhdGluZ1BvaW50 SW5mbyBvcGVyYXRpbmdfcG9pbnRzW0FWMV9NQVhfT1BFUkFUSU5HX1BPSU5UU107Ci0gICAgaW50 IG5iX29wZXJhdGluZ19wb2ludHM7Ci19IFZ1bGthbkFWMVVuaXRzOwotCi1zdGF0aWMgYXZfY29s ZCBpbnQgYmFzZV91bml0X3RvX3ZrKEFWQ29kZWNDb250ZXh0ICphdmN0eCwgVnVsa2FuQVYxVW5p dHMgKnZrX3VuaXRzKQotewotICAgIFZ1bGthbkVuY29kZUFWMUNvbnRleHQgKmVuYyA9IGF2Y3R4 LT5wcml2X2RhdGE7Ci0KLSAgICBBVjFSYXdPQlUgKnNlcV9vYnUgPSAmZW5jLT5zZXFfaGRyX29i dTsKLSAgICBBVjFSYXdTZXF1ZW5jZUhlYWRlciAqc2VxID0gJnNlcV9vYnUtPm9idS5zZXF1ZW5j ZV9oZWFkZXI7Ci0KLSAgICBTdGRWaWRlb0FWMVNlcXVlbmNlSGVhZGVyICpzZXFfaGRyID0gJnZr X3VuaXRzLT5zZXFfaGRyOwotICAgIFN0ZFZpZGVvQVYxVGltaW5nSW5mbyAqdGltaW5nX2luZm8g PSAmdmtfdW5pdHMtPnRpbWluZ19pbmZvOwotICAgIFN0ZFZpZGVvQVYxQ29sb3JDb25maWcgKmNv bG9yX2NvbmZpZyA9ICZ2a191bml0cy0+Y29sb3JfY29uZmlnOwotCi0gICAgU3RkVmlkZW9FbmNv ZGVBVjFPcGVyYXRpbmdQb2ludEluZm8gKm9wZXJhdGluZ19wb2ludHMgPSB2a191bml0cy0+b3Bl cmF0aW5nX3BvaW50czsKLQotICAgICp0aW1pbmdfaW5mbyA9IChTdGRWaWRlb0FWMVRpbWluZ0lu Zm8pIHsKLSAgICAgICAgLmZsYWdzID0gKFN0ZFZpZGVvQVYxVGltaW5nSW5mb0ZsYWdzKSB7Ci0g ICAgICAgICAgICAuZXF1YWxfcGljdHVyZV9pbnRlcnZhbCA9IHNlcS0+dGltaW5nX2luZm8uZXF1 YWxfcGljdHVyZV9pbnRlcnZhbCwKLSAgICAgICAgfSwKLSAgICAgICAgLm51bV91bml0c19pbl9k aXNwbGF5X3RpY2sgPSBzZXEtPnRpbWluZ19pbmZvLm51bV91bml0c19pbl9kaXNwbGF5X3RpY2ss Ci0gICAgICAgIC50aW1lX3NjYWxlID0gc2VxLT50aW1pbmdfaW5mby50aW1lX3NjYWxlLAotICAg ICAgICAubnVtX3RpY2tzX3Blcl9waWN0dXJlX21pbnVzXzEgPSBzZXEtPnRpbWluZ19pbmZvLm51 bV90aWNrc19wZXJfcGljdHVyZV9taW51c18xLAotICAgIH07Ci0KLSAgICAqY29sb3JfY29uZmln ID0gKFN0ZFZpZGVvQVYxQ29sb3JDb25maWcpIHsKLSAgICAgICAgLmZsYWdzID0gKFN0ZFZpZGVv QVYxQ29sb3JDb25maWdGbGFncykgewotICAgICAgICAgICAgLm1vbm9fY2hyb21lID0gc2VxLT5j b2xvcl9jb25maWcubW9ub19jaHJvbWUsCi0gICAgICAgICAgICAuY29sb3JfcmFuZ2UgPSBzZXEt PmNvbG9yX2NvbmZpZy5jb2xvcl9yYW5nZSwKLSAgICAgICAgICAgIC5zZXBhcmF0ZV91dl9kZWx0 YV9xID0gc2VxLT5jb2xvcl9jb25maWcuc2VwYXJhdGVfdXZfZGVsdGFfcSwKLSAgICAgICAgfSwK LSAgICAgICAgLkJpdERlcHRoID0gc2VxLT5jb2xvcl9jb25maWcudHdlbHZlX2JpdCAgICA/IDEy IDoKLSAgICAgICAgICAgICAgICAgICAgc2VxLT5jb2xvcl9jb25maWcuaGlnaF9iaXRkZXB0aCA/ IDEwIDogOCwKLSAgICAgICAgLnN1YnNhbXBsaW5nX3ggPSBzZXEtPmNvbG9yX2NvbmZpZy5zdWJz YW1wbGluZ194LAotICAgICAgICAuc3Vic2FtcGxpbmdfeSA9IHNlcS0+Y29sb3JfY29uZmlnLnN1 YnNhbXBsaW5nX3ksCi0gICAgICAgIC5jb2xvcl9wcmltYXJpZXMgPSBzZXEtPmNvbG9yX2NvbmZp Zy5jb2xvcl9wcmltYXJpZXMsCi0gICAgICAgIC50cmFuc2Zlcl9jaGFyYWN0ZXJpc3RpY3MgPSBz ZXEtPmNvbG9yX2NvbmZpZy50cmFuc2Zlcl9jaGFyYWN0ZXJpc3RpY3MsCi0gICAgICAgIC5tYXRy aXhfY29lZmZpY2llbnRzID0gc2VxLT5jb2xvcl9jb25maWcubWF0cml4X2NvZWZmaWNpZW50cywK LSAgICB9OwotCi0gICAgKnNlcV9oZHIgPSAoU3RkVmlkZW9BVjFTZXF1ZW5jZUhlYWRlcikgewot ICAgICAgICAuZmxhZ3MgPSAoU3RkVmlkZW9BVjFTZXF1ZW5jZUhlYWRlckZsYWdzKSB7Ci0gICAg ICAgICAgICAuc3RpbGxfcGljdHVyZSA9IHNlcS0+c3RpbGxfcGljdHVyZSwKLSAgICAgICAgICAg IC5yZWR1Y2VkX3N0aWxsX3BpY3R1cmVfaGVhZGVyID0gc2VxLT5yZWR1Y2VkX3N0aWxsX3BpY3R1 cmVfaGVhZGVyLAotICAgICAgICAgICAgLnVzZV8xMjh4MTI4X3N1cGVyYmxvY2sgPSBzZXEtPnVz ZV8xMjh4MTI4X3N1cGVyYmxvY2ssCi0gICAgICAgICAgICAuZW5hYmxlX2ZpbHRlcl9pbnRyYSA9 IHNlcS0+ZW5hYmxlX2ZpbHRlcl9pbnRyYSwKLSAgICAgICAgICAgIC5lbmFibGVfaW50cmFfZWRn ZV9maWx0ZXIgPSBzZXEtPmVuYWJsZV9pbnRyYV9lZGdlX2ZpbHRlciwKLSAgICAgICAgICAgIC5l bmFibGVfaW50ZXJpbnRyYV9jb21wb3VuZCA9IHNlcS0+ZW5hYmxlX2ludGVyaW50cmFfY29tcG91 bmQsCi0gICAgICAgICAgICAuZW5hYmxlX21hc2tlZF9jb21wb3VuZCA9IHNlcS0+ZW5hYmxlX21h c2tlZF9jb21wb3VuZCwKLSAgICAgICAgICAgIC5lbmFibGVfd2FycGVkX21vdGlvbiA9IHNlcS0+ ZW5hYmxlX3dhcnBlZF9tb3Rpb24sCi0gICAgICAgICAgICAuZW5hYmxlX2R1YWxfZmlsdGVyID0g c2VxLT5lbmFibGVfZHVhbF9maWx0ZXIsCi0gICAgICAgICAgICAuZW5hYmxlX29yZGVyX2hpbnQg PSBzZXEtPmVuYWJsZV9vcmRlcl9oaW50LAotICAgICAgICAgICAgLmVuYWJsZV9qbnRfY29tcCA9 IHNlcS0+ZW5hYmxlX2pudF9jb21wLAotICAgICAgICAgICAgLmVuYWJsZV9yZWZfZnJhbWVfbXZz ID0gc2VxLT5lbmFibGVfcmVmX2ZyYW1lX212cywKLSAgICAgICAgICAgIC5mcmFtZV9pZF9udW1i ZXJzX3ByZXNlbnRfZmxhZyA9IHNlcS0+ZnJhbWVfaWRfbnVtYmVyc19wcmVzZW50X2ZsYWcsCi0g ICAgICAgICAgICAuZW5hYmxlX3N1cGVycmVzID0gc2VxLT5lbmFibGVfc3VwZXJyZXMsCi0gICAg ICAgICAgICAuZW5hYmxlX2NkZWYgPSBzZXEtPmVuYWJsZV9jZGVmLAotICAgICAgICAgICAgLmVu YWJsZV9yZXN0b3JhdGlvbiA9IHNlcS0+ZW5hYmxlX3Jlc3RvcmF0aW9uLAotICAgICAgICAgICAg LmZpbG1fZ3JhaW5fcGFyYW1zX3ByZXNlbnQgPSBzZXEtPmZpbG1fZ3JhaW5fcGFyYW1zX3ByZXNl bnQsCi0gICAgICAgICAgICAudGltaW5nX2luZm9fcHJlc2VudF9mbGFnID0gc2VxLT50aW1pbmdf aW5mb19wcmVzZW50X2ZsYWcsCi0gICAgICAgICAgICAuaW5pdGlhbF9kaXNwbGF5X2RlbGF5X3By ZXNlbnRfZmxhZyA9IHNlcS0+aW5pdGlhbF9kaXNwbGF5X2RlbGF5X3ByZXNlbnRfZmxhZywKLSAg ICAgICAgfSwKLSAgICAgICAgLnNlcV9wcm9maWxlID0gc2VxLT5zZXFfcHJvZmlsZSwKLSAgICAg ICAgLmZyYW1lX3dpZHRoX2JpdHNfbWludXNfMSA9IHNlcS0+ZnJhbWVfd2lkdGhfYml0c19taW51 c18xLAotICAgICAgICAuZnJhbWVfaGVpZ2h0X2JpdHNfbWludXNfMSA9IHNlcS0+ZnJhbWVfaGVp Z2h0X2JpdHNfbWludXNfMSwKLSAgICAgICAgLm1heF9mcmFtZV93aWR0aF9taW51c18xID0gc2Vx LT5tYXhfZnJhbWVfd2lkdGhfbWludXNfMSwKLSAgICAgICAgLm1heF9mcmFtZV9oZWlnaHRfbWlu dXNfMSA9IHNlcS0+bWF4X2ZyYW1lX2hlaWdodF9taW51c18xLAotICAgICAgICAuZGVsdGFfZnJh bWVfaWRfbGVuZ3RoX21pbnVzXzIgPSBzZXEtPmRlbHRhX2ZyYW1lX2lkX2xlbmd0aF9taW51c18y LAotICAgICAgICAuYWRkaXRpb25hbF9mcmFtZV9pZF9sZW5ndGhfbWludXNfMSA9IHNlcS0+YWRk aXRpb25hbF9mcmFtZV9pZF9sZW5ndGhfbWludXNfMSwKLSAgICAgICAgLm9yZGVyX2hpbnRfYml0 c19taW51c18xID0gc2VxLT5vcmRlcl9oaW50X2JpdHNfbWludXNfMSwKLSAgICAgICAgLnNlcV9m b3JjZV9pbnRlZ2VyX212ID0gc2VxLT5zZXFfZm9yY2VfaW50ZWdlcl9tdiwKLSAgICAgICAgLnNl cV9mb3JjZV9zY3JlZW5fY29udGVudF90b29scyA9IHNlcS0+c2VxX2ZvcmNlX3NjcmVlbl9jb250 ZW50X3Rvb2xzLAotICAgICAgICAucFRpbWluZ0luZm8gPSB0aW1pbmdfaW5mbywKLSAgICAgICAg LnBDb2xvckNvbmZpZyA9IGNvbG9yX2NvbmZpZywKLSAgICB9OwotCi0gICAgZm9yIChpbnQgaSA9 IDA7IGkgPD0gc2VxLT5vcGVyYXRpbmdfcG9pbnRzX2NudF9taW51c18xOyBpKyspIHsKLSAgICAg ICAgb3BlcmF0aW5nX3BvaW50c1tpXSA9IChTdGRWaWRlb0VuY29kZUFWMU9wZXJhdGluZ1BvaW50 SW5mbykgewotICAgICAgICAgICAgLmZsYWdzID0gKFN0ZFZpZGVvRW5jb2RlQVYxT3BlcmF0aW5n UG9pbnRJbmZvRmxhZ3MpIHsKLSAgICAgICAgICAgICAgICAuZGVjb2Rlcl9tb2RlbF9wcmVzZW50 X2Zvcl90aGlzX29wID0gc2VxLT5kZWNvZGVyX21vZGVsX3ByZXNlbnRfZm9yX3RoaXNfb3BbaV0s Ci0gICAgICAgICAgICAgICAgLmxvd19kZWxheV9tb2RlX2ZsYWcgPSBzZXEtPmxvd19kZWxheV9t b2RlX2ZsYWdbaV0sCi0gICAgICAgICAgICAgICAgLmluaXRpYWxfZGlzcGxheV9kZWxheV9wcmVz ZW50X2Zvcl90aGlzX29wID0gc2VxLT5pbml0aWFsX2Rpc3BsYXlfZGVsYXlfcHJlc2VudF9mb3Jf dGhpc19vcFtpXSwKLSAgICAgICAgICAgICAgICAvKiBSZXNlcnZlZCAqLwotICAgICAgICAgICAg fSwKLSAgICAgICAgICAgIC5vcGVyYXRpbmdfcG9pbnRfaWRjID0gc2VxLT5vcGVyYXRpbmdfcG9p bnRfaWRjW2ldLAotICAgICAgICAgICAgLnNlcV9sZXZlbF9pZHggPSBzZXEtPnNlcV9sZXZlbF9p ZHhbaV0sCi0gICAgICAgICAgICAuc2VxX3RpZXIgPSBzZXEtPnNlcV90aWVyW2ldLAotICAgICAg ICAgICAgLmRlY29kZXJfYnVmZmVyX2RlbGF5ID0gc2VxLT5kZWNvZGVyX2J1ZmZlcl9kZWxheVtp XSwKLSAgICAgICAgICAgIC5lbmNvZGVyX2J1ZmZlcl9kZWxheSA9IHNlcS0+ZW5jb2Rlcl9idWZm ZXJfZGVsYXlbaV0sCi0gICAgICAgICAgICAuaW5pdGlhbF9kaXNwbGF5X2RlbGF5X21pbnVzXzEg PSBzZXEtPmluaXRpYWxfZGlzcGxheV9kZWxheV9taW51c18xW2ldLAotICAgICAgICB9OwotICAg IH0KLSAgICB2a191bml0cy0+bmJfb3BlcmF0aW5nX3BvaW50cyA9IHNlcS0+b3BlcmF0aW5nX3Bv aW50c19jbnRfbWludXNfMSArIDE7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBj cmVhdGVfc2Vzc2lvbl9wYXJhbXMoQVZDb2RlY0NvbnRleHQgKmF2Y3R4KQotewotICAgIGludCBl cnI7Ci0gICAgVnVsa2FuRW5jb2RlQVYxQ29udGV4dCAqZW5jID0gYXZjdHgtPnByaXZfZGF0YTsK LSAgICBGRlZ1bGthbkVuY29kZUNvbnRleHQgKmN0eCA9ICZlbmMtPmNvbW1vbjsKLSAgICBGRlZ1 bGthbkNvbnRleHQgKnMgPSAmY3R4LT5zOwotICAgIEZGVnVsa2FuRnVuY3Rpb25zICp2ayA9ICZj dHgtPnMudmtmbjsKLQotICAgIFZ1bGthbkFWMVVuaXRzIHZrX3VuaXRzID0geyAwIH07Ci0KLSAg ICBWa1ZpZGVvRW5jb2RlQVYxU2Vzc2lvblBhcmFtZXRlcnNDcmVhdGVJbmZvS0hSIGF2MV9wYXJh bXM7Ci0KLSAgICAvKiBDb252ZXJ0IGl0IHRvIFZ1bGthbiAqLwotICAgIGVyciA9IGJhc2VfdW5p dF90b192ayhhdmN0eCwgJnZrX3VuaXRzKTsKLSAgICBpZiAoZXJyIDwgMCkgewotICAgICAgICBh dl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIlVuYWJsZSB0byBjb252ZXJ0IHNlcXVlbmNlIGhl YWRlciB0byBWdWxrYW46ICVzXG4iLAotICAgICAgICAgICAgICAgYXZfZXJyMnN0cihlcnIpKTsK LSAgICAgICAgcmV0dXJuIGVycjsKLSAgICB9Ci0KLSAgICAvKiBEZXN0cm95IHRoZSBzZXNzaW9u IHBhcmFtcyAqLwotICAgIGlmIChjdHgtPnNlc3Npb25fcGFyYW1zKQotICAgICAgICB2ay0+RGVz dHJveVZpZGVvU2Vzc2lvblBhcmFtZXRlcnNLSFIocy0+aHdjdHgtPmFjdF9kZXYsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgtPnNlc3Npb25fcGFyYW1z LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy0+aHdjdHgt PmFsbG9jKTsKLQotICAgIGF2MV9wYXJhbXMgPSAoVmtWaWRlb0VuY29kZUFWMVNlc3Npb25QYXJh bWV0ZXJzQ3JlYXRlSW5mb0tIUikgewotICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQ RV9WSURFT19FTkNPREVfQVYxX1NFU1NJT05fUEFSQU1FVEVSU19DUkVBVEVfSU5GT19LSFIsCi0g ICAgICAgIC5wU3RkU2VxdWVuY2VIZWFkZXIgPSAmdmtfdW5pdHMuc2VxX2hkciwKLSAgICAgICAg LnBTdGREZWNvZGVyTW9kZWxJbmZvID0gJnZrX3VuaXRzLmRlY29kZXJfbW9kZWwsCi0gICAgICAg IC5wU3RkT3BlcmF0aW5nUG9pbnRzID0gdmtfdW5pdHMub3BlcmF0aW5nX3BvaW50cywKLSAgICAg ICAgLnN0ZE9wZXJhdGluZ1BvaW50Q291bnQgPSB2a191bml0cy5uYl9vcGVyYXRpbmdfcG9pbnRz LAotICAgIH07Ci0KLSAgICByZXR1cm4gZmZfdnVsa2FuX2VuY29kZV9jcmVhdGVfc2Vzc2lvbl9w YXJhbXMoYXZjdHgsIGN0eCwgJmF2MV9wYXJhbXMpOwotfQotCi1zdGF0aWMgaW50IHBhcnNlX2Zl ZWRiYWNrX3VuaXRzKEFWQ29kZWNDb250ZXh0ICphdmN0eCwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgdWludDhfdCAqZGF0YSwgc2l6ZV90IHNpemUpCi17Ci0gICAgaW50 IGVycjsKLSAgICBWdWxrYW5FbmNvZGVBVjFDb250ZXh0ICplbmMgPSBhdmN0eC0+cHJpdl9kYXRh OwotICAgIEFWMVJhd09CVSAqc2VxX29idSA9ICZlbmMtPnNlcV9oZHJfb2J1OwotICAgIEFWMVJh d1NlcXVlbmNlSGVhZGVyICpzZXEgPSAmc2VxX29idS0+b2J1LnNlcXVlbmNlX2hlYWRlcjsKLQot ICAgIENvZGVkQml0c3RyZWFtQ29udGV4dCAqY2JzOwotICAgIENvZGVkQml0c3RyZWFtRnJhZ21l bnQgb2J1ID0geyAwIH07Ci0KLSAgICBlcnIgPSBmZl9jYnNfaW5pdCgmY2JzLCBBVl9DT0RFQ19J RF9BVjEsIGF2Y3R4KTsKLSAgICBpZiAoZXJyIDwgMCkKLSAgICAgICAgcmV0dXJuIGVycjsKLQot ICAgIGVyciA9IGZmX2Nic19yZWFkKGNicywgJm9idSwgTlVMTCwgZGF0YSwgc2l6ZSk7Ci0gICAg aWYgKGVyciA8IDApIHsKLSAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJVbmFi bGUgdG8gcGFyc2UgZmVlZGJhY2sgdW5pdHMsIGJhZCBkcml2ZXJzOiAlc1xuIiwKLSAgICAgICAg ICAgICAgIGF2X2VycjJzdHIoZXJyKSk7Ci0gICAgICAgIHJldHVybiBlcnI7Ci0gICAgfQotCi0g ICAgLyogSWYgUFBTIGhhcyBhbiBvdmVycmlkZSwganVzdCBjb3B5IGl0IGVudGlyZWx5LiAqLwot ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgb2J1Lm5iX3VuaXRzOyBpKyspIHsKLSAgICAgICAgaWYg KG9idS51bml0c1tpXS50eXBlID09IEFWMV9PQlVfU0VRVUVOQ0VfSEVBREVSKSB7Ci0gICAgICAg ICAgICBBVjFSYXdPQlUgKmZfc2VxX29idSA9IG9idS51bml0c1tpXS5jb250ZW50OwotICAgICAg ICAgICAgQVYxUmF3U2VxdWVuY2VIZWFkZXIgKmZfc2VxID0gJmZfc2VxX29idS0+b2J1LnNlcXVl bmNlX2hlYWRlcjsKLSAgICAgICAgICAgIHNlcS0+ZnJhbWVfd2lkdGhfYml0c19taW51c18xID0g Zl9zZXEtPmZyYW1lX3dpZHRoX2JpdHNfbWludXNfMTsKLSAgICAgICAgICAgIHNlcS0+ZnJhbWVf aGVpZ2h0X2JpdHNfbWludXNfMSA9IGZfc2VxLT5mcmFtZV9oZWlnaHRfYml0c19taW51c18xOwot ICAgICAgICAgICAgc2VxLT5tYXhfZnJhbWVfd2lkdGhfbWludXNfMSA9IGZfc2VxLT5tYXhfZnJh bWVfd2lkdGhfbWludXNfMTsKLSAgICAgICAgICAgIHNlcS0+bWF4X2ZyYW1lX2hlaWdodF9taW51 c18xID0gZl9zZXEtPm1heF9mcmFtZV9oZWlnaHRfbWludXNfMTsKLSAgICAgICAgICAgIHNlcS0+ c2VxX2Nob29zZV9zY3JlZW5fY29udGVudF90b29scyA9IGZfc2VxLT5zZXFfY2hvb3NlX3NjcmVl bl9jb250ZW50X3Rvb2xzOwotICAgICAgICAgICAgc2VxLT5zZXFfZm9yY2Vfc2NyZWVuX2NvbnRl bnRfdG9vbHMgPSBmX3NlcS0+c2VxX2ZvcmNlX3NjcmVlbl9jb250ZW50X3Rvb2xzOwotICAgICAg ICAgICAgc2VxLT5zZXFfY2hvb3NlX2ludGVnZXJfbXYgPSBmX3NlcS0+c2VxX2Nob29zZV9pbnRl Z2VyX212OwotICAgICAgICAgICAgc2VxLT5zZXFfZm9yY2VfaW50ZWdlcl9tdiA9IGZfc2VxLT5z ZXFfZm9yY2VfaW50ZWdlcl9tdjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGZmX2Nic19mcmFn bWVudF9mcmVlKCZvYnUpOwotICAgIGZmX2Nic19jbG9zZSgmY2JzKTsKLQotICAgIHJldHVybiAw OwotfQotCi1zdGF0aWMgaW50IGluaXRfYmFzZV91bml0cyhBVkNvZGVjQ29udGV4dCAqYXZjdHgp Ci17Ci0gICAgaW50IGVycjsKLSAgICBWa1Jlc3VsdCByZXQ7Ci0gICAgVnVsa2FuRW5jb2RlQVYx Q29udGV4dCAqZW5jID0gYXZjdHgtPnByaXZfZGF0YTsKLSAgICBGRlZ1bGthbkVuY29kZUNvbnRl eHQgKmN0eCA9ICZlbmMtPmNvbW1vbjsKLSAgICBGRlZ1bGthbkNvbnRleHQgKnMgPSAmY3R4LT5z OwotICAgIEZGVnVsa2FuRnVuY3Rpb25zICp2ayA9ICZjdHgtPnMudmtmbjsKLQotICAgIFZrVmlk ZW9FbmNvZGVTZXNzaW9uUGFyYW1ldGVyc0dldEluZm9LSFIgcGFyYW1zX2luZm87Ci0gICAgVmtW aWRlb0VuY29kZVNlc3Npb25QYXJhbWV0ZXJzRmVlZGJhY2tJbmZvS0hSIHBhcmFtc19mZWVkYmFj azsKLQotICAgIHZvaWQgKmRhdGEgPSBOVUxMOwotICAgIHNpemVfdCBkYXRhX3NpemUgPSAwOwot Ci0gICAgLyogR2VuZXJhdGUgU1BTL1BQUyB1bml0IGluZm8gKi8KLSAgICBlcnIgPSBpbml0X3Nl cXVlbmNlX2hlYWRlcnMoYXZjdHgpOwotICAgIGlmIChlcnIgPCAwKSB7Ci0gICAgICAgIGF2X2xv ZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiVW5hYmxlIHRvIGluaXRpYWxpemUgc2VxdWVuY2UgaGVh ZGVyOiAlc1xuIiwKLSAgICAgICAgICAgICAgIGF2X2VycjJzdHIoZXJyKSk7Ci0gICAgICAgIHJl dHVybiBlcnI7Ci0gICAgfQotCi0gICAgLyogQ3JlYXRlIHNlc3Npb24gcGFyYW1ldGVycyBmcm9t IHRoZW0gKi8KLSAgICBlcnIgPSBjcmVhdGVfc2Vzc2lvbl9wYXJhbXMoYXZjdHgpOwotICAgIGlm IChlcnIgPCAwKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgcGFyYW1zX2luZm8gPSAoVmtW aWRlb0VuY29kZVNlc3Npb25QYXJhbWV0ZXJzR2V0SW5mb0tIUikgewotICAgICAgICAuc1R5cGUg PSBWS19TVFJVQ1RVUkVfVFlQRV9WSURFT19FTkNPREVfU0VTU0lPTl9QQVJBTUVURVJTX0dFVF9J TkZPX0tIUiwKLSAgICAgICAgLnZpZGVvU2Vzc2lvblBhcmFtZXRlcnMgPSBjdHgtPnNlc3Npb25f cGFyYW1zLAotICAgIH07Ci0gICAgcGFyYW1zX2ZlZWRiYWNrID0gKFZrVmlkZW9FbmNvZGVTZXNz aW9uUGFyYW1ldGVyc0ZlZWRiYWNrSW5mb0tIUikgewotICAgICAgICAuc1R5cGUgPSBWS19TVFJV Q1RVUkVfVFlQRV9WSURFT19FTkNPREVfU0VTU0lPTl9QQVJBTUVURVJTX0ZFRURCQUNLX0lORk9f S0hSLAotICAgIH07Ci0KLSAgICByZXQgPSB2ay0+R2V0RW5jb2RlZFZpZGVvU2Vzc2lvblBhcmFt ZXRlcnNLSFIocy0+aHdjdHgtPmFjdF9kZXYsICZwYXJhbXNfaW5mbywKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBhcmFtc19mZWVkYmFjaywKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRhdGFfc2l6 ZSwgZGF0YSk7Ci0gICAgaWYgKHJldCA9PSBWS19JTkNPTVBMRVRFIHx8Ci0gICAgICAgIChyZXQg PT0gVktfU1VDQ0VTUykgJiYgKGRhdGFfc2l6ZSA+IDApKSB7Ci0gICAgICAgIGRhdGEgPSBhdl9t YWxsb2N6KGRhdGFfc2l6ZSk7Ci0gICAgICAgIGlmICghZGF0YSkKLSAgICAgICAgICAgIHJldHVy biBBVkVSUk9SKEVOT01FTSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgYXZfbG9nKGF2Y3R4LCBB Vl9MT0dfRVJST1IsICJVbmFibGUgdG8gZ2V0IGZlZWRiYWNrIGZvciBBVjEgc2VxdWVuY2UgaGVh ZGVyID0gJSJTSVpFX1NQRUNJRklFUiJcbiIsCi0gICAgICAgICAgICAgICBkYXRhX3NpemUpOwot ICAgICAgICByZXR1cm4gZXJyOwotICAgIH0KLQotICAgIHJldCA9IHZrLT5HZXRFbmNvZGVkVmlk ZW9TZXNzaW9uUGFyYW1ldGVyc0tIUihzLT5od2N0eC0+YWN0X2RldiwgJnBhcmFtc19pbmZvLAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcGFyYW1z X2ZlZWRiYWNrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAmZGF0YV9zaXplLCBkYXRhKTsKLSAgICBpZiAocmV0ICE9IFZLX1NVQ0NFU1MpIHsKLSAg ICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJFcnJvciB3cml0aW5nIGZlZWRiYWNr IHVuaXRzXG4iKTsKLSAgICAgICAgcmV0dXJuIGVycjsKLSAgICB9Ci0KLSAgICBhdl9sb2coYXZj dHgsIEFWX0xPR19WRVJCT1NFLCAiRmVlZGJhY2sgdW5pdHMgd3JpdHRlbiwgb3ZlcnJpZGVzOiAl aVxuIiwKLSAgICAgICAgICAgcGFyYW1zX2ZlZWRiYWNrLmhhc092ZXJyaWRlcyk7Ci0KLSAgICBw YXJhbXNfZmVlZGJhY2suaGFzT3ZlcnJpZGVzID0gMTsKLQotICAgIC8qIE5vIG5lZWQgdG8gc3lu YyBhbnkgb3ZlcnJpZGVzICovCi0gICAgaWYgKCFwYXJhbXNfZmVlZGJhY2suaGFzT3ZlcnJpZGVz KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIC8qIFBhcnNlIGJhY2sgdG5lIHVuaXRzIGFuZCBv dmVycmlkZSAqLwotICAgIGVyciA9IHBhcnNlX2ZlZWRiYWNrX3VuaXRzKGF2Y3R4LCBkYXRhLCBk YXRhX3NpemUpOwotICAgIGlmIChlcnIgPCAwKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAg LyogQ3JlYXRlIGZpbmFsIHNlc3Npb24gcGFyYW1ldGVycyAqLwotICAgIGVyciA9IGNyZWF0ZV9z ZXNzaW9uX3BhcmFtcyhhdmN0eCk7Ci0gICAgaWYgKGVyciA8IDApCi0gICAgICAgIHJldHVybiBl cnI7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB2dWxrYW5fZW5jb2RlX2F2MV9h ZGRfb2J1KEFWQ29kZWNDb250ZXh0ICphdmN0eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBDb2RlZEJpdHN0cmVhbUZyYWdtZW50ICphdSwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB1aW50OF90IHR5cGUsIHZvaWQgKm9idV91bml0KQotewotICAg IGludCBlcnI7Ci0KLSAgICBlcnIgPSBmZl9jYnNfaW5zZXJ0X3VuaXRfY29udGVudChhdSwgLTEs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSwgb2J1X3VuaXQsIE5V TEwpOwotICAgIGlmIChlcnIgPCAwKSB7Ci0gICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VS Uk9SLCAiRmFpbGVkIHRvIGFkZCBPQlUgdW5pdDogIgotICAgICAgICAgICAgICAgInR5cGUgPSAl ZC5cbiIsIHR5cGUpOwotICAgICAgICByZXR1cm4gZXJyOwotICAgIH0KLQotICAgIHJldHVybiBl cnI7Ci19Ci0KLXN0YXRpYyBpbnQgdnVsa2FuX2VuY29kZV9hdjFfd3JpdGVfb2J1KEFWQ29kZWND b250ZXh0ICphdmN0eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVp bnQ4X3QgKmRhdGEsIHNpemVfdCAqZGF0YV9sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBDb2RlZEJpdHN0cmVhbUZyYWdtZW50ICpvYnUpCi17Ci0gICAgVnVsa2Fu RW5jb2RlQVYxQ29udGV4dCAqZW5jID0gYXZjdHgtPnByaXZfZGF0YTsKLSAgICBpbnQgcmV0Owot Ci0gICAgcmV0ID0gZmZfY2JzX3dyaXRlX2ZyYWdtZW50X2RhdGEoZW5jLT5jYnMsIG9idSk7Ci0g ICAgaWYgKHJldCA8IDApIHsKLSAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJG YWlsZWQgdG8gd3JpdGUgcGFja2VkIGhlYWRlci5cbiIpOwotICAgICAgICByZXR1cm4gcmV0Owot ICAgIH0KLQotICAgIG1lbWNweShkYXRhLCBvYnUtPmRhdGEsIG9idS0+ZGF0YV9zaXplKTsKLSAg ICAqZGF0YV9sZW4gPSBvYnUtPmRhdGFfc2l6ZTsKLQotICAgIHJldHVybiAwOwotfQotCi1zdGF0 aWMgaW50IHdyaXRlX3NlcXVlbmNlX2hlYWRlcihBVkNvZGVjQ29udGV4dCAqYXZjdHgsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGRkhXQmFzZUVuY29kZVBpY3R1cmUgKmJhc2Vf cGljLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqZGF0YSwgc2l6 ZV90ICpkYXRhX2xlbikKLXsKLSAgICBpbnQgZXJyOwotICAgIFZ1bGthbkVuY29kZUFWMUNvbnRl eHQgKmVuYyA9IGF2Y3R4LT5wcml2X2RhdGE7Ci0gICAgQ29kZWRCaXRzdHJlYW1GcmFnbWVudCAq b2J1ID0gJmVuYy0+Y3VycmVudF9hY2Nlc3NfdW5pdDsKLQotICAgIGVyciA9IHZ1bGthbl9lbmNv ZGVfYXYxX2FkZF9vYnUoYXZjdHgsIG9idSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEFWMV9PQlVfU0VRVUVOQ0VfSEVBREVSLCAmZW5jLT5zZXFfaGRyX29idSk7Ci0gICAg aWYgKGVyciA8IDApCi0gICAgICAgIGdvdG8gZmFpbDsKLQotICAgIGVyciA9IHZ1bGthbl9lbmNv ZGVfYXYxX3dyaXRlX29idShhdmN0eCwgZGF0YSwgZGF0YV9sZW4sIG9idSk7Ci0KLWZhaWw6Ci0g ICAgZmZfY2JzX2ZyYWdtZW50X3Jlc2V0KG9idSk7Ci0gICAgcmV0dXJuIGVycjsKLX0KLQotc3Rh dGljIGludCB3cml0ZV9leHRyYV9oZWFkZXJzKEFWQ29kZWNDb250ZXh0ICphdmN0eCwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBGRkhXQmFzZUVuY29kZVBpY3R1cmUgKmJhc2VfcGlj LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKmRhdGEsIHNpemVfdCAq ZGF0YV9sZW4pCi17Ci0gICAgaW50IGVycjsKLSAgICBWdWxrYW5FbmNvZGVBVjFDb250ZXh0ICpl bmMgPSBhdmN0eC0+cHJpdl9kYXRhOwotICAgIFZ1bGthbkVuY29kZUFWMVBpY3R1cmUgICphcCA9 IGJhc2VfcGljLT5jb2RlY19wcml2OwotICAgIENvZGVkQml0c3RyZWFtRnJhZ21lbnQgKm9idSA9 ICZlbmMtPmN1cnJlbnRfYWNjZXNzX3VuaXQ7Ci0KLSAgICBpZiAoYXAtPnVuaXRzX25lZWRlZCAm IEFWX0ZSQU1FX0RBVEFfTUFTVEVSSU5HX0RJU1BMQVlfTUVUQURBVEEpIHsKLSAgICAgICAgZXJy ID0gdnVsa2FuX2VuY29kZV9hdjFfYWRkX29idShhdmN0eCwgb2J1LAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEFWMV9PQlVfTUVUQURBVEEsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJmVuYy0+bWV0YV9tYXN0ZXJpbmdfb2J1KTsKLSAg ICAgICAgaWYgKGVyciA8IDApCi0gICAgICAgICAgICBnb3RvIGZhaWw7Ci0gICAgfQotCi0gICAg aWYgKGFwLT51bml0c19uZWVkZWQgJiBVTklUX0NPTlRFTlRfTElHSFRfTEVWRUwpIHsKLSAgICAg ICAgZXJyID0gdnVsa2FuX2VuY29kZV9hdjFfYWRkX29idShhdmN0eCwgb2J1LAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFWMV9PQlVfTUVUQURBVEEsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmVuYy0+bWV0YV9jbGxfb2J1KTsKLSAg ICAgICAgaWYgKGVyciA8IDApCi0gICAgICAgICAgICBnb3RvIGZhaWw7Ci0gICAgfQotCi0gICAg aWYgKGFwLT51bml0c19uZWVkZWQpIHsKLSAgICAgICAgZXJyID0gdnVsa2FuX2VuY29kZV9hdjFf d3JpdGVfb2J1KGF2Y3R4LCBkYXRhLCBkYXRhX2xlbiwgb2J1KTsKLSAgICAgICAgaWYgKGVyciA8 IDApCi0gICAgICAgICAgICBnb3RvIGZhaWw7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZXJyID0g MDsKLSAgICAgICAgKmRhdGFfbGVuID0gMDsKLSAgICB9Ci0KLWZhaWw6Ci0gICAgZmZfY2JzX2Zy YWdtZW50X3Jlc2V0KG9idSk7Ci0gICAgcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCB3cml0 ZV9wYWRkaW5nKEFWQ29kZWNDb250ZXh0ICphdmN0eCwgdWludDMyX3QgcGFkZGluZywKLSAgICAg ICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpkYXRhLCBzaXplX3QgKmRhdGFfbGVuKQotewot ICAgIGludCBlcnI7Ci0gICAgVnVsa2FuRW5jb2RlQVYxQ29udGV4dCAqZW5jID0gYXZjdHgtPnBy aXZfZGF0YTsKLSAgICBDb2RlZEJpdHN0cmVhbUZyYWdtZW50ICpvYnUgPSAmZW5jLT5jdXJyZW50 X2FjY2Vzc191bml0OwotCi0gICAgQVYxUmF3T0JVIHBhZGRpbmdfb2J1ID0geyAwIH07Ci0gICAg QVYxUmF3UGFkZGluZyAqcmF3X3BhZGRpbmcgPSAmcGFkZGluZ19vYnUub2J1LnBhZGRpbmc7Ci0K LSAgICBpZiAoIXBhZGRpbmcpCi0gICAgICAgIHBhZGRpbmcgPSAxNjsKLQotICAgIC8qIDIgYnl0 ZSBoZWFkZXIgKyAxIGJ5dGUgdHJhaWxpbmcgYml0cyAqLwotICAgIHBhZGRpbmdfb2J1LmhlYWRl ci5vYnVfdHlwZSA9IEFWMV9PQlVfUEFERElORzsKLSAgICAqcmF3X3BhZGRpbmcgPSAoQVYxUmF3 UGFkZGluZykgewotICAgICAgICAucGF5bG9hZCA9IGVuYy0+cGFkZGluZ19wYXlsb2FkLAotICAg ICAgICAucGF5bG9hZF9zaXplID0gcGFkZGluZywKLSAgICB9OwotCi0gICAgZXJyID0gdnVsa2Fu X2VuY29kZV9hdjFfYWRkX29idShhdmN0eCwgb2J1LCBBVjFfT0JVX1BBRERJTkcsICZwYWRkaW5n X29idSk7Ci0gICAgaWYgKGVyciA8IDApCi0gICAgICAgIGdvdG8gZmFpbDsKLQotICAgIGVyciA9 IHZ1bGthbl9lbmNvZGVfYXYxX3dyaXRlX29idShhdmN0eCwgZGF0YSwgZGF0YV9sZW4sIG9idSk7 Ci1mYWlsOgotICAgIGZmX2Nic19mcmFnbWVudF9yZXNldChvYnUpOwotICAgIHJldHVybiBlcnI7 Ci19Ci0KLXN0YXRpYyBjb25zdCBGRlZ1bGthbkNvZGVjIGVuY19jYiA9IHsKLSAgICAuZmxhZ3Mg PSBGRl9IV19GTEFHX0JfUElDVFVSRVMgfAotICAgICAgICAgICAgIEZGX0hXX0ZMQUdfQl9QSUNU VVJFX1JFRkVSRU5DRVMgfAotICAgICAgICAgICAgIFZLX0VOQ19GTEFHX05PX0RFTEFZIHwKLSAg ICAgICAgICAgICBGRl9IV19GTEFHX1NMSUNFX0NPTlRST0wsCi0gICAgLnBpY3R1cmVfcHJpdl9k YXRhX3NpemUgPSBzaXplb2YoVnVsa2FuRW5jb2RlQVYxUGljdHVyZSksCi0gICAgLmZpbGxlcl9o ZWFkZXJfc2l6ZSA9IDQsCi0gICAgLmluaXRfcHJvZmlsZSA9IGluaXRfcHJvZmlsZSwKLSAgICAu aW5pdF9waWNfcmMgPSBpbml0X3BpY19yYywKLSAgICAuaW5pdF9waWNfcGFyYW1zID0gaW5pdF9w aWNfcGFyYW1zLAotICAgIC53cml0ZV9zZXF1ZW5jZV9oZWFkZXJzID0gd3JpdGVfc2VxdWVuY2Vf aGVhZGVyLAotICAgIC53cml0ZV9leHRyYV9oZWFkZXJzID0gd3JpdGVfZXh0cmFfaGVhZGVycywK LSAgICAud3JpdGVfZmlsbGVyID0gd3JpdGVfcGFkZGluZywKLX07Ci0KLXN0YXRpYyBhdl9jb2xk IGludCB2dWxrYW5fZW5jb2RlX2F2MV9pbml0KEFWQ29kZWNDb250ZXh0ICphdmN0eCkKLXsKLSAg ICBpbnQgZXJyOwotICAgIFZ1bGthbkVuY29kZUFWMUNvbnRleHQgKmVuYyA9IGF2Y3R4LT5wcml2 X2RhdGE7Ci0gICAgRkZWdWxrYW5FbmNvZGVDb250ZXh0ICpjdHggPSAmZW5jLT5jb21tb247Ci0g ICAgRkZIV0Jhc2VFbmNvZGVDb250ZXh0ICpiYXNlX2N0eCA9ICZjdHgtPmJhc2U7Ci0gICAgaW50 IGZsYWdzOwotCi0gICAgaWYgKGF2Y3R4LT5wcm9maWxlID09IEFWX1BST0ZJTEVfVU5LTk9XTikK LSAgICAgICAgYXZjdHgtPnByb2ZpbGUgPSBlbmMtPmNvbW1vbi5vcHRzLnByb2ZpbGU7Ci0KLSAg ICBlbmMtPmNhcHMgPSAoVmtWaWRlb0VuY29kZUFWMUNhcGFiaWxpdGllc0tIUikgewotICAgICAg ICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9WSURFT19FTkNPREVfQVYxX0NBUEFCSUxJVElF U19LSFIsCi0gICAgfTsKLQotICAgIGVuYy0+cXVhbGl0eV9wcm9wcyA9IChWa1ZpZGVvRW5jb2Rl QVYxUXVhbGl0eUxldmVsUHJvcGVydGllc0tIUikgewotICAgICAgICAuc1R5cGUgPSBWS19TVFJV Q1RVUkVfVFlQRV9WSURFT19FTkNPREVfQVYxX1FVQUxJVFlfTEVWRUxfUFJPUEVSVElFU19LSFIs Ci0gICAgfTsKLQotICAgIGVyciA9IGZmX3Z1bGthbl9lbmNvZGVfaW5pdChhdmN0eCwgJmVuYy0+ Y29tbW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZmZfdmtfZW5jX2F2MV9k ZXNjLCAmZW5jX2NiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZW5jLT5jYXBz LCAmZW5jLT5xdWFsaXR5X3Byb3BzKTsKLSAgICBpZiAoZXJyIDwgMCkKLSAgICAgICAgcmV0dXJu IGVycjsKLQotICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX1ZFUkJPU0UsICJBVjEgZW5jb2RlciBj YXBhYmlsaXRpZXM6XG4iKTsKLSAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19WRVJCT1NFLCAiICAg IFN0YW5kYXJkIGNhcGFiaWxpdHkgZmxhZ3M6XG4iKTsKLSAgICBhdl9sb2coYXZjdHgsIEFWX0xP R19WRVJCT1NFLCAiICAgICAgICBwZXJfcmF0ZV9jb250cm9sX2dyb3VwX21pbl9tYXhfcV9pbmRl eDogJWlcbiIsCi0gICAgICAgICAgICEhKGVuYy0+Y2Fwcy5mbGFncyAmIFZLX1ZJREVPX0VOQ09E RV9BVjFfQ0FQQUJJTElUWV9QRVJfUkFURV9DT05UUk9MX0dST1VQX01JTl9NQVhfUV9JTkRFWF9C SVRfS0hSKSk7Ci0gICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfVkVSQk9TRSwgIiAgICAgICAgZ2Vu ZXJhdGVfb2J1X2V4dGVuc2lvbl9oZWFkZXI6ICVpXG4iLAotICAgICAgICAgICAhIShlbmMtPmNh cHMuZmxhZ3MgJiBWS19WSURFT19FTkNPREVfQVYxX0NBUEFCSUxJVFlfR0VORVJBVEVfT0JVX0VY VEVOU0lPTl9IRUFERVJfQklUX0tIUikpOwotICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX1ZFUkJP U0UsICIgICAgICAgIHByaW1hcnlfcmVmZXJlbmNlX2NkZl9vbmx5OiAlaVxuIiwKLSAgICAgICAg ICAgISEoZW5jLT5jYXBzLmZsYWdzICYgVktfVklERU9fRU5DT0RFX0FWMV9DQVBBQklMSVRZX1BS SU1BUllfUkVGRVJFTkNFX0NERl9PTkxZX0JJVF9LSFIpKTsKLSAgICBhdl9sb2coYXZjdHgsIEFW X0xPR19WRVJCT1NFLCAiICAgICAgICBmcmFtZV9zaXplX292ZXJyaWRlOiAlaVxuIiwKLSAgICAg ICAgICAgISEoZW5jLT5jYXBzLmZsYWdzICYgVktfVklERU9fRU5DT0RFX0FWMV9DQVBBQklMSVRZ X0ZSQU1FX1NJWkVfT1ZFUlJJREVfQklUX0tIUikpOwotICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9H X1ZFUkJPU0UsICIgICAgICAgIG1vdGlvbl92ZWN0b3Jfc2NhbGluZzogJWlcbiIsCi0gICAgICAg ICAgICEhKGVuYy0+Y2Fwcy5mbGFncyAmIFZLX1ZJREVPX0VOQ09ERV9BVjFfQ0FQQUJJTElUWV9N T1RJT05fVkVDVE9SX1NDQUxJTkdfQklUX0tIUikpOwotICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9H X1ZFUkJPU0UsICIgICAgQ2FwYWJpbGl0aWVzOlxuIik7Ci0gICAgYXZfbG9nKGF2Y3R4LCBBVl9M T0dfVkVSQk9TRSwgIiAgICAgICAgNjR4NjQgc3VwZXJibG9ja3M6ICVpXG4iLAotICAgICAgICAg ICAhIShlbmMtPmNhcHMuc3VwZXJibG9ja1NpemVzICYgVktfVklERU9fRU5DT0RFX0FWMV9TVVBF UkJMT0NLX1NJWkVfNjRfQklUX0tIUikpOwotICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX1ZFUkJP U0UsICIgICAgICAgIDEyOHgxMjggc3VwZXJibG9ja3M6ICVpXG4iLAotICAgICAgICAgICAhIShl bmMtPmNhcHMuc3VwZXJibG9ja1NpemVzICYgVktfVklERU9fRU5DT0RFX0FWMV9TVVBFUkJMT0NL X1NJWkVfMTI4X0JJVF9LSFIpKTsKLSAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19WRVJCT1NFLCAi ICAgICAgICBtYXhTaW5nbGVSZWZlcmVuY2VDb3VudDogJWlcbiIsCi0gICAgICAgICAgIGVuYy0+ Y2Fwcy5tYXhTaW5nbGVSZWZlcmVuY2VDb3VudCk7Ci0gICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0df VkVSQk9TRSwgIiAgICAgICAgc2luZ2xlUmVmZXJlbmNlTmFtZU1hc2s6IDB4JXhcbiIsCi0gICAg ICAgICAgIGVuYy0+Y2Fwcy5zaW5nbGVSZWZlcmVuY2VOYW1lTWFzayk7Ci0gICAgYXZfbG9nKGF2 Y3R4LCBBVl9MT0dfVkVSQk9TRSwgIiAgICAgICAgbWF4VW5pZGlyZWN0aW9uYWxDb21wb3VuZFJl ZmVyZW5jZUNvdW50OiAlaVxuIiwKLSAgICAgICAgICAgZW5jLT5jYXBzLm1heFVuaWRpcmVjdGlv bmFsQ29tcG91bmRSZWZlcmVuY2VDb3VudCk7Ci0gICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfVkVS Qk9TRSwgIiAgICAgICAgbWF4VW5pZGlyZWN0aW9uYWxDb21wb3VuZEdyb3VwMVJlZmVyZW5jZUNv dW50OiAlaVxuIiwKLSAgICAgICAgICAgZW5jLT5jYXBzLm1heFVuaWRpcmVjdGlvbmFsQ29tcG91 bmRHcm91cDFSZWZlcmVuY2VDb3VudCk7Ci0gICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfVkVSQk9T RSwgIiAgICAgICAgdW5pZGlyZWN0aW9uYWxDb21wb3VuZFJlZmVyZW5jZU5hbWVNYXNrOiAweCV4 XG4iLAotICAgICAgICAgICBlbmMtPmNhcHMudW5pZGlyZWN0aW9uYWxDb21wb3VuZFJlZmVyZW5j ZU5hbWVNYXNrKTsKLSAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19WRVJCT1NFLCAiICAgICAgICBt YXhCaWRpcmVjdGlvbmFsQ29tcG91bmRSZWZlcmVuY2VDb3VudDogJWlcbiIsCi0gICAgICAgICAg IGVuYy0+Y2Fwcy5tYXhCaWRpcmVjdGlvbmFsQ29tcG91bmRSZWZlcmVuY2VDb3VudCk7Ci0gICAg YXZfbG9nKGF2Y3R4LCBBVl9MT0dfVkVSQk9TRSwgIiAgICAgICAgbWF4QmlkaXJlY3Rpb25hbENv bXBvdW5kR3JvdXAxUmVmZXJlbmNlQ291bnQ6ICVpXG4iLAotICAgICAgICAgICBlbmMtPmNhcHMu bWF4QmlkaXJlY3Rpb25hbENvbXBvdW5kR3JvdXAxUmVmZXJlbmNlQ291bnQpOwotICAgIGF2X2xv ZyhhdmN0eCwgQVZfTE9HX1ZFUkJPU0UsICIgICAgICAgIG1heEJpZGlyZWN0aW9uYWxDb21wb3Vu ZEdyb3VwMlJlZmVyZW5jZUNvdW50OiAlaVxuIiwKLSAgICAgICAgICAgZW5jLT5jYXBzLm1heEJp ZGlyZWN0aW9uYWxDb21wb3VuZEdyb3VwMlJlZmVyZW5jZUNvdW50KTsKLSAgICBhdl9sb2coYXZj dHgsIEFWX0xPR19WRVJCT1NFLCAiICAgICAgICBiaWRpcmVjdGlvbmFsQ29tcG91bmRSZWZlcmVu Y2VOYW1lTWFzazogMHgleFxuIiwKLSAgICAgICAgICAgZW5jLT5jYXBzLmJpZGlyZWN0aW9uYWxD b21wb3VuZFJlZmVyZW5jZU5hbWVNYXNrKTsKLSAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19WRVJC T1NFLCAiICAgICAgICBtYXhUZW1wb3JhbExheWVyQ291bnQ6ICVpXG4iLAotICAgICAgICAgICBl bmMtPmNhcHMubWF4VGVtcG9yYWxMYXllckNvdW50KTsKLSAgICBhdl9sb2coYXZjdHgsIEFWX0xP R19WRVJCT1NFLCAiICAgICAgICBtYXhTcGF0aWFsTGF5ZXJDb3VudDogJWlcbiIsCi0gICAgICAg ICAgIGVuYy0+Y2Fwcy5tYXhTcGF0aWFsTGF5ZXJDb3VudCk7Ci0gICAgYXZfbG9nKGF2Y3R4LCBB Vl9MT0dfVkVSQk9TRSwgIiAgICAgICAgbWF4T3BlcmF0aW5nUG9pbnRzOiAlaVxuIiwKLSAgICAg ICAgICAgZW5jLT5jYXBzLm1heE9wZXJhdGluZ1BvaW50cyk7Ci0gICAgYXZfbG9nKGF2Y3R4LCBB Vl9MT0dfVkVSQk9TRSwgIiAgICAgICAgbWluL21heCBRaW5kZXg6IFslaSwgJWldXG4iLAotICAg ICAgICAgICBlbmMtPmNhcHMubWluUUluZGV4LCBlbmMtPmNhcHMubWF4UUluZGV4KTsKLSAgICBh dl9sb2coYXZjdHgsIEFWX0xPR19WRVJCT1NFLCAiICAgICAgICBwcmVmZXJzR29wUmVtYWluaW5n RnJhbWVzOiAlaVxuIiwKLSAgICAgICAgICAgZW5jLT5jYXBzLnByZWZlcnNHb3BSZW1haW5pbmdG cmFtZXMpOwotICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX1ZFUkJPU0UsICIgICAgICAgIHJlcXVp cmVzR29wUmVtYWluaW5nRnJhbWVzOiAlaVxuIiwKLSAgICAgICAgICAgZW5jLT5jYXBzLnJlcXVp cmVzR29wUmVtYWluaW5nRnJhbWVzKTsKLSAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19WRVJCT1NF LCAiICAgICAgICBtYXhMZXZlbDogJWlcbiIsCi0gICAgICAgICAgIGVuYy0+Y2Fwcy5tYXhMZXZl bCk7Ci0gICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfVkVSQk9TRSwgIiAgICAgICAgY29kZWRQaWN0 dXJlQWxpZ25tZW50OiAlaXglaVxuIiwKLSAgICAgICAgICAgZW5jLT5jYXBzLmNvZGVkUGljdHVy ZUFsaWdubWVudC53aWR0aCwgZW5jLT5jYXBzLmNvZGVkUGljdHVyZUFsaWdubWVudC5oZWlnaHQp OwotICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX1ZFUkJPU0UsICIgICAgICAgIG1heFRpbGVzOiAl aXglaVxuIiwKLSAgICAgICAgICAgZW5jLT5jYXBzLm1heFRpbGVzLndpZHRoLCBlbmMtPmNhcHMu bWF4VGlsZXMuaGVpZ2h0KTsKLSAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19WRVJCT1NFLCAiICAg ICAgICBUaWxlIHNpemU6ICVpeCVpIHRvICVpeCVpXG4iLAotICAgICAgICAgICBlbmMtPmNhcHMu bWluVGlsZVNpemUud2lkdGgsIGVuYy0+Y2Fwcy5taW5UaWxlU2l6ZS5oZWlnaHQsCi0gICAgICAg ICAgIGVuYy0+Y2Fwcy5tYXhUaWxlU2l6ZS53aWR0aCwgZW5jLT5jYXBzLm1heFRpbGVTaXplLmhl aWdodCk7Ci0KLSAgICBlcnIgPSBpbml0X2VuY19vcHRpb25zKGF2Y3R4KTsKLSAgICBpZiAoZXJy IDwgMCkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIGZsYWdzID0gY3R4LT5jb2RlYy0+Zmxh Z3M7Ci0gICAgZXJyID0gZmZfaHdfYmFzZV9pbml0X2dvcF9zdHJ1Y3R1cmUoYmFzZV9jdHgsIGF2 Y3R4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+Y2Fwcy5t YXhEcGJTbG90cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmMt PmNhcHMubWF4QmlkaXJlY3Rpb25hbENvbXBvdW5kUmVmZXJlbmNlQ291bnQsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MsIDApOwotICAgIGlmIChlcnIgPCAw KQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgYmFzZV9jdHgtPm91dHB1dF9kZWxheSA9IGJh c2VfY3R4LT5iX3Blcl9wOwotICAgIGJhc2VfY3R4LT5kZWNvZGVfZGVsYXkgPSBiYXNlX2N0eC0+ bWF4X2JfZGVwdGg7Ci0KLSAgICAvKiBDcmVhdGUgdW5pdHMgYW5kIHNlc3Npb24gcGFyYW1ldGVy cyAqLwotICAgIGVyciA9IGluaXRfYmFzZV91bml0cyhhdmN0eCk7Ci0gICAgaWYgKGVyciA8IDAp Ci0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICAvKiBJbml0IENCUyAqLwotICAgIGVyciA9IGZm X2Nic19pbml0KCZlbmMtPmNicywgQVZfQ09ERUNfSURfQVYxLCBhdmN0eCk7Ci0gICAgaWYgKGVy ciA8IDApCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICBpZiAoYXZjdHgtPmZsYWdzICYgQVZf Q09ERUNfRkxBR19HTE9CQUxfSEVBREVSKSB7Ci0gICAgICAgIHVpbnQ4X3QgZGF0YVs0MDk2XTsK LSAgICAgICAgc2l6ZV90IGRhdGFfbGVuID0gc2l6ZW9mKGRhdGEpOwotCi0gICAgICAgIGVyciA9 IHdyaXRlX3NlcXVlbmNlX2hlYWRlcihhdmN0eCwgTlVMTCwgZGF0YSwgJmRhdGFfbGVuKTsKLSAg ICAgICAgaWYgKGVyciA8IDApIHsKLSAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VS Uk9SLCAiRmFpbGVkIHRvIHdyaXRlIHNlcXVlbmNlIGhlYWRlciAiCi0gICAgICAgICAgICAgICAg ICAgImZvciBleHRyYWRhdGE6ICVkLlxuIiwgZXJyKTsKLSAgICAgICAgICAgIHJldHVybiBlcnI7 Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBhdmN0eC0+ZXh0cmFkYXRhX3NpemUgPSBk YXRhX2xlbjsKLSAgICAgICAgICAgIGF2Y3R4LT5leHRyYWRhdGEgPSBhdl9tYWxsb2N6KGF2Y3R4 LT5leHRyYWRhdGFfc2l6ZSArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBBVl9JTlBVVF9CVUZGRVJfUEFERElOR19TSVpFKTsKLSAgICAgICAgICAgIGlmICghYXZj dHgtPmV4dHJhZGF0YSkgewotICAgICAgICAgICAgICAgIGVyciA9IEFWRVJST1IoRU5PTUVNKTsK LSAgICAgICAgICAgICAgICByZXR1cm4gZXJyOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg bWVtY3B5KGF2Y3R4LT5leHRyYWRhdGEsIGRhdGEsIGF2Y3R4LT5leHRyYWRhdGFfc2l6ZSk7Ci0g ICAgICAgIH0KLSAgICB9Ci0KLSAgICBlbmMtPnBhZGRpbmdfcGF5bG9hZCA9IGF2X21hbGxvY3oo MipjdHgtPmNhcHMubWluQml0c3RyZWFtQnVmZmVyT2Zmc2V0QWxpZ25tZW50KTsKLSAgICBpZiAo IWVuYy0+cGFkZGluZ19wYXlsb2FkKQotICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOwot Ci0gICAgbWVtc2V0KGVuYy0+cGFkZGluZ19wYXlsb2FkLCAweGFhLCAyKmN0eC0+Y2Fwcy5taW5C aXRzdHJlYW1CdWZmZXJPZmZzZXRBbGlnbm1lbnQpOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0 YXRpYyBhdl9jb2xkIGludCB2dWxrYW5fZW5jb2RlX2F2MV9jbG9zZShBVkNvZGVjQ29udGV4dCAq YXZjdHgpCi17Ci0gICAgVnVsa2FuRW5jb2RlQVYxQ29udGV4dCAqZW5jID0gYXZjdHgtPnByaXZf ZGF0YTsKLSAgICBhdl9mcmVlKGVuYy0+cGFkZGluZ19wYXlsb2FkKTsKLSAgICBmZl92dWxrYW5f ZW5jb2RlX3VuaW5pdCgmZW5jLT5jb21tb24pOwotICAgIHJldHVybiAwOwotfQotCi0jZGVmaW5l IE9GRlNFVCh4KSBvZmZzZXRvZihWdWxrYW5FbmNvZGVBVjFDb250ZXh0LCB4KQotI2RlZmluZSBG TEFHUyAoQVZfT1BUX0ZMQUdfVklERU9fUEFSQU0gfCBBVl9PUFRfRkxBR19FTkNPRElOR19QQVJB TSkKLXN0YXRpYyBjb25zdCBBVk9wdGlvbiB2dWxrYW5fZW5jb2RlX2F2MV9vcHRpb25zW10gPSB7 Ci0gICAgSFdfQkFTRV9FTkNPREVfQ09NTU9OX09QVElPTlMsCi0gICAgVlVMS0FOX0VOQ09ERV9D T01NT05fT1BUSU9OUywKLQotICAgIHsgInByb2ZpbGUiLCAiU2V0IHByb2ZpbGUiLAotICAgICAg T0ZGU0VUKGNvbW1vbi5vcHRzLnByb2ZpbGUpLCBBVl9PUFRfVFlQRV9JTlQsCi0gICAgICB7IC5p NjQgPSBBVl9QUk9GSUxFX1VOS05PV04gfSwgQVZfUFJPRklMRV9VTktOT1dOLCAweGZmZmYsIEZM QUdTLCAudW5pdCA9ICJwcm9maWxlIiB9LAotCi0jZGVmaW5lIFBST0ZJTEUobmFtZSwgdmFsdWUp ICBuYW1lLCBOVUxMLCAwLCBBVl9PUFRfVFlQRV9DT05TVCwgXAotICAgICAgeyAuaTY0ID0gdmFs dWUgfSwgMCwgMCwgRkxBR1MsIC51bml0ID0gInByb2ZpbGUiCi0gICAgeyBQUk9GSUxFKCJtYWlu IiwgICAgICAgICAgICAgICAgIEFWX1BST0ZJTEVfQVYxX01BSU4pIH0sCi0gICAgeyBQUk9GSUxF KCJoaWdoIiwgICAgICAgICAgICAgICAgIEFWX1BST0ZJTEVfQVYxX0hJR0gpIH0sCi0gICAgeyBQ Uk9GSUxFKCJwcm9mZXNzaW9uYWwiLCAgICAgICAgIEFWX1BST0ZJTEVfQVYxX1BST0ZFU1NJT05B TCkgfSwKLSN1bmRlZiBQUk9GSUxFCi0KLSAgICB7ICJ0aWVyIiwgIlNldCB0aWVyIChzZXFfdGll cikiLAotICAgICAgT0ZGU0VUKGNvbW1vbi5vcHRzLnRpZXIpLCBBVl9PUFRfVFlQRV9JTlQsIHsg Lmk2NCA9IDAgfSwgMCwgMSwgRkxBR1MsIC51bml0ID0gInRpZXIiIH0sCi0gICAgICAgIHsgIm1h aW4iLCBOVUxMLCAwLCBBVl9PUFRfVFlQRV9DT05TVCwgeyAuaTY0ID0gMCB9LCAwLCAwLCBGTEFH UywgLnVuaXQgPSAidGllciIgfSwKLSAgICAgICAgeyAiaGlnaCIsIE5VTEwsIDAsIEFWX09QVF9U WVBFX0NPTlNULCB7IC5pNjQgPSAxIH0sIDAsIDAsIEZMQUdTLCAudW5pdCA9ICJ0aWVyIiB9LAot Ci0gICAgeyAibGV2ZWwiLCAiU2V0IGxldmVsIChsZXZlbF9pZGMpIiwKLSAgICAgIE9GRlNFVChj b21tb24ub3B0cy5sZXZlbCksIEFWX09QVF9UWVBFX0lOVCwKLSAgICAgIHsgLmk2NCA9IEFWX0xF VkVMX1VOS05PV04gfSwgQVZfTEVWRUxfVU5LTk9XTiwgMHhmZiwgRkxBR1MsIC51bml0ID0gImxl dmVsIiB9LAotCi0jZGVmaW5lIExFVkVMKG5hbWUsIHZhbHVlKSBuYW1lLCBOVUxMLCAwLCBBVl9P UFRfVFlQRV9DT05TVCwgXAotICAgICAgeyAuaTY0ID0gdmFsdWUgfSwgMCwgMCwgRkxBR1MsIC51 bml0ID0gImxldmVsIgotICAgIHsgTEVWRUwoIjIwIiwgMCkgfSwKLSAgICB7IExFVkVMKCIyMSIs IDEpIH0sCi0gICAgeyBMRVZFTCgiMjIiLCAyKSB9LAotICAgIHsgTEVWRUwoIjIzIiwgMykgfSwK LSAgICB7IExFVkVMKCIzMCIsIDQpIH0sCi0gICAgeyBMRVZFTCgiMzEiLCA1KSB9LAotICAgIHsg TEVWRUwoIjMyIiwgNikgfSwKLSAgICB7IExFVkVMKCIzMyIsIDcpIH0sCi0gICAgeyBMRVZFTCgi NDAiLCA4KSB9LAotICAgIHsgTEVWRUwoIjQxIiwgOSkgfSwKLSAgICB7IExFVkVMKCI0MiIsIDEw KSB9LAotICAgIHsgTEVWRUwoIjQzIiwgMTEpIH0sCi0gICAgeyBMRVZFTCgiNTAiLCAxMikgfSwK LSAgICB7IExFVkVMKCI1MSIsIDEzKSB9LAotICAgIHsgTEVWRUwoIjUyIiwgMTQpIH0sCi0gICAg eyBMRVZFTCgiNTMiLCAxNSkgfSwKLSAgICB7IExFVkVMKCI2MCIsIDE2KSB9LAotICAgIHsgTEVW RUwoIjYxIiwgMTcpIH0sCi0gICAgeyBMRVZFTCgiNjIiLCAxOCkgfSwKLSAgICB7IExFVkVMKCI2 MyIsIDE5KSB9LAotICAgIHsgTEVWRUwoIjcwIiwgMjApIH0sCi0gICAgeyBMRVZFTCgiNzEiLCAy MSkgfSwKLSAgICB7IExFVkVMKCI3MiIsIDIyKSB9LAotICAgIHsgTEVWRUwoIjczIiwgMjMpIH0s Ci0jdW5kZWYgTEVWRUwKLQotICAgIHsgInVuaXRzIiwgIlNldCB1bml0cyB0byBpbmNsdWRlIiwg T0ZGU0VUKHVuaXRfZWxlbXMpLCBBVl9PUFRfVFlQRV9GTEFHUywgeyAuaTY0ID0gVU5JVF9NQVNU RVJJTkdfRElTUExBWSB8IFVOSVRfQ09OVEVOVF9MSUdIVF9MRVZFTCB9LCAwLCBJTlRfTUFYLCBG TEFHUywgInVuaXRzIiB9LAotICAgICAgICB7ICJoZHIiLCAgICAgICAgIkluY2x1ZGUgSERSIG1l dGFkYXRhIGZvciBtYXN0ZXJpbmcgZGlzcGxheSBjb2xvdXIgdm9sdW1lIGFuZCBjb250ZW50IGxp Z2h0IGxldmVsIGluZm9ybWF0aW9uIiwgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsgLmk2NCA9IFVO SVRfTUFTVEVSSU5HX0RJU1BMQVkgfCBVTklUX0NPTlRFTlRfTElHSFRfTEVWRUwgfSwgSU5UX01J TiwgSU5UX01BWCwgRkxBR1MsICJ1bml0cyIgfSwKLQotICAgIHsgTlVMTCB9LAotfTsKLQotc3Rh dGljIGNvbnN0IEZGQ29kZWNEZWZhdWx0IHZ1bGthbl9lbmNvZGVfYXYxX2RlZmF1bHRzW10gPSB7 Ci0gICAgeyAiYiIsICAgICAgICAgICAgICAiMCIgICB9LAotICAgIHsgImJmIiwgICAgICAgICAg ICAgIjIiICAgfSwKLSAgICB7ICJnIiwgICAgICAgICAgICAgICIzMDAiIH0sCi0gICAgeyAicW1p biIsICAgICAgICAgICAiMSIgICB9LAotICAgIHsgInFtYXgiLCAgICAgICAgICAgIjI1NSIgfSwK LSAgICB7ICJyZWZzIiwgICAgICAgICAgICIwIiAgIH0sCi0gICAgeyBOVUxMIH0sCi19OwotCi1z dGF0aWMgY29uc3QgQVZDbGFzcyB2dWxrYW5fZW5jb2RlX2F2MV9jbGFzcyA9IHsKLSAgICAuY2xh c3NfbmFtZSA9ICJhdjFfdnVsa2FuIiwKLSAgICAuaXRlbV9uYW1lICA9IGF2X2RlZmF1bHRfaXRl bV9uYW1lLAotICAgIC5vcHRpb24gICAgID0gdnVsa2FuX2VuY29kZV9hdjFfb3B0aW9ucywKLSAg ICAudmVyc2lvbiAgICA9IExJQkFWVVRJTF9WRVJTSU9OX0lOVCwKLX07Ci0KLWNvbnN0IEZGQ29k ZWMgZmZfYXYxX3Z1bGthbl9lbmNvZGVyID0gewotICAgIC5wLm5hbWUgICAgICAgICA9ICJhdjFf dnVsa2FuIiwKLSAgICBDT0RFQ19MT05HX05BTUUoIkFWMSAoVnVsa2FuKSIpLAotICAgIC5wLnR5 cGUgICAgICAgICA9IEFWTUVESUFfVFlQRV9WSURFTywKLSAgICAucC5pZCAgICAgICAgICAgPSBB Vl9DT0RFQ19JRF9BVjEsCi0gICAgLnByaXZfZGF0YV9zaXplID0gc2l6ZW9mKFZ1bGthbkVuY29k ZUFWMUNvbnRleHQpLAotICAgIC5pbml0ICAgICAgICAgICA9ICZ2dWxrYW5fZW5jb2RlX2F2MV9p bml0LAotICAgIEZGX0NPREVDX1JFQ0VJVkVfUEFDS0VUX0NCKCZmZl92dWxrYW5fZW5jb2RlX3Jl Y2VpdmVfcGFja2V0KSwKLSAgICAuY2xvc2UgICAgICAgICAgPSAmdnVsa2FuX2VuY29kZV9hdjFf Y2xvc2UsCi0gICAgLnAucHJpdl9jbGFzcyAgID0gJnZ1bGthbl9lbmNvZGVfYXYxX2NsYXNzLAot ICAgIC5wLmNhcGFiaWxpdGllcyA9IEFWX0NPREVDX0NBUF9ERUxBWSB8Ci0gICAgICAgICAgICAg ICAgICAgICAgQVZfQ09ERUNfQ0FQX0hBUkRXQVJFIHwKLSAgICAgICAgICAgICAgICAgICAgICBB Vl9DT0RFQ19DQVBfRFIxIHwKLSAgICAgICAgICAgICAgICAgICAgICBBVl9DT0RFQ19DQVBfRU5D T0RFUl9GTFVTSCB8Ci0gICAgICAgICAgICAgICAgICAgICAgQVZfQ09ERUNfQ0FQX0VOQ09ERVJf UkVPUkRFUkVEX09QQVFVRSwKLSAgICAuY2Fwc19pbnRlcm5hbCAgPSBGRl9DT0RFQ19DQVBfSU5J VF9DTEVBTlVQLAotICAgIC5kZWZhdWx0cyAgICAgICA9IHZ1bGthbl9lbmNvZGVfYXYxX2RlZmF1 bHRzLAotICAgIENPREVDX1BJWEZNVFMoQVZfUElYX0ZNVF9WVUxLQU4pLAotICAgIC5od19jb25m aWdzICAgICA9IGZmX3Z1bGthbl9lbmNvZGVfaHdfY29uZmlncywKLSAgICAucC53cmFwcGVyX25h bWUgPSAidnVsa2FuIiwKLX07Ci0tIAoyLjQ5LjEKCgpGcm9tIDk3MTFhOTFiM2I5ZjdiMzY5M2Ew ZmFhNjJlMjJkOThiYTNkMmE3MTcgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCkZyb206IEphbWFp a2ExIDxsdWthc3pjejE4QHdwLnBsPgpEYXRlOiBXZWQsIDMgU2VwIDIwMjUgMTM6MzM6MDcgKzAw MDAKU3ViamVjdDogW1BBVENIIDA3NC8xMThdIENoYW5naW5nIHZ1bGthbiBmaWxlIGRpcmVjdG9y eQoKLS0tCiBsaWJhdmNvZGVjL3Z1bGthbi92dWxrYW5fZW5jb2RlX2F2MS5jIHwgMTQwMSArKysr KysrKysrKysrKysrKysrKysrKysrCiAxIGZpbGUgY2hhbmdlZCwgMTQwMSBpbnNlcnRpb25zKCsp CiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliYXZjb2RlYy92dWxrYW4vdnVsa2FuX2VuY29kZV9hdjEu YwoKZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvdnVsa2FuL3Z1bGthbl9lbmNvZGVfYXYxLmMgYi9s aWJhdmNvZGVjL3Z1bGthbi92dWxrYW5fZW5jb2RlX2F2MS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAuLmEyZTRiNTc1YmIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJhdmNv ZGVjL3Z1bGthbi92dWxrYW5fZW5jb2RlX2F2MS5jCkBAIC0wLDAgKzEsMTQwMSBAQAorLyoKKyAq IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KKyAqCisgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0 d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl cnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2 ZXJzaW9uLgorICoKKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0 IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2 ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2 ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExp Y2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdh cmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKyAqLworCisjaW5jbHVkZSAibGliYXZ1dGlsL29w dC5oIgorI2luY2x1ZGUgImxpYmF2dXRpbC9tZW0uaCIKKworI2luY2x1ZGUgImxpYmF2Y29kZWMv Y2JzLmgiCisjaW5jbHVkZSAibGliYXZjb2RlYy9jYnNfYXYxLmgiCisjaW5jbHVkZSAibGliYXZj b2RlYy9hdjFfbGV2ZWxzLmgiCisjaW5jbHVkZSAibGliYXZ1dGlsL21hc3RlcmluZ19kaXNwbGF5 X21ldGFkYXRhLmgiCisKKyNpbmNsdWRlICJsaWJhdmNvZGVjL2NvZGVjX2ludGVybmFsLmgiCisj aW5jbHVkZSAidnVsa2FuX2VuY29kZS5oIgorCisjaW5jbHVkZSAibGliYXZ1dGlsL2F2YXNzZXJ0 LmgiCisKK2NvbnN0IEZGVnVsa2FuRW5jb2RlRGVzY3JpcHRvciBmZl92a19lbmNfYXYxX2Rlc2Mg PSB7CisgICAgLmNvZGVjX2lkICAgICAgICAgPSBBVl9DT0RFQ19JRF9BVjEsCisgICAgLmVuY29k ZV9leHRlbnNpb24gPSBGRl9WS19FWFRfVklERU9fRU5DT0RFX0FWMSwKKyAgICAuZW5jb2RlX29w ICAgICAgICA9IFZLX1ZJREVPX0NPREVDX09QRVJBVElPTl9FTkNPREVfQVYxX0JJVF9LSFIsCisg ICAgLmV4dF9wcm9wcyA9IHsKKyAgICAgICAgLmV4dGVuc2lvbk5hbWUgPSBWS19TVERfVlVMS0FO X1ZJREVPX0NPREVDX0FWMV9FTkNPREVfRVhURU5TSU9OX05BTUUsCisgICAgICAgIC5zcGVjVmVy c2lvbiAgID0gVktfU1REX1ZVTEtBTl9WSURFT19DT0RFQ19BVjFfRU5DT0RFX1NQRUNfVkVSU0lP TiwKKyAgICB9LAorfTsKKworZW51bSBVbml0RWxlbXMgeworICAgIFVOSVRfTUFTVEVSSU5HX0RJ U1BMQVkgICA9IDEgPDwgMCwKKyAgICBVTklUX0NPTlRFTlRfTElHSFRfTEVWRUwgPSAxIDw8IDEs Cit9OworCit0eXBlZGVmIHN0cnVjdCBWdWxrYW5FbmNvZGVBVjFQaWN0dXJlIHsKKyAgICBpbnQg c2xvdDsKKyAgICBpbnQ2NF90IGxhc3RfaWRyX2ZyYW1lOworCisgICAgZW51bSBVbml0RWxlbXMg dW5pdHNfbmVlZGVkOworCisgICAgU3RkVmlkZW9BVjFUaWxlSW5mbyB0aWxlX2luZm87CisgICAg U3RkVmlkZW9BVjFRdWFudGl6YXRpb24gcXVhbnRpemF0aW9uOworICAgIFN0ZFZpZGVvQVYxU2Vn bWVudGF0aW9uIHNlZ21lbnRhdGlvbjsKKyAgICBTdGRWaWRlb0FWMUxvb3BGaWx0ZXIgbG9vcF9m aWx0ZXI7CisgICAgU3RkVmlkZW9BVjFDREVGIGNkZWY7CisgICAgU3RkVmlkZW9BVjFMb29wUmVz dG9yYXRpb24gbG9vcF9yZXN0b3JhdGlvbjsKKyAgICBTdGRWaWRlb0FWMUdsb2JhbE1vdGlvbiBn bG9iYWxfbW90aW9uOworCisgICAgU3RkVmlkZW9FbmNvZGVBVjFQaWN0dXJlSW5mbyBhdjFwaWNf aW5mbzsKKyAgICBWa1ZpZGVvRW5jb2RlQVYxUGljdHVyZUluZm9LSFIgdmthdjFwaWNfaW5mbzsK KworICAgIFN0ZFZpZGVvRW5jb2RlQVYxRXh0ZW5zaW9uSGVhZGVyIGV4dF9oZWFkZXI7CisgICAg U3RkVmlkZW9FbmNvZGVBVjFSZWZlcmVuY2VJbmZvIGF2MWRwYl9pbmZvOworICAgIFZrVmlkZW9F bmNvZGVBVjFEcGJTbG90SW5mb0tIUiB2a2F2MWRwYl9pbmZvOworCisgICAgVmtWaWRlb0VuY29k ZUFWMVJhdGVDb250cm9sSW5mb0tIUiB2a3JjX2luZm87CisgICAgVmtWaWRlb0VuY29kZUFWMVJh dGVDb250cm9sTGF5ZXJJbmZvS0hSIHZrcmNfbGF5ZXJfaW5mbzsKKyAgICBWa1ZpZGVvRW5jb2Rl QVYxR29wUmVtYWluaW5nRnJhbWVJbmZvS0hSIHZrcmNfcmVtYWluaW5nOworfSBWdWxrYW5FbmNv ZGVBVjFQaWN0dXJlOworCit0eXBlZGVmIHN0cnVjdCBWdWxrYW5FbmNvZGVBVjFDb250ZXh0IHsK KyAgICBGRlZ1bGthbkVuY29kZUNvbnRleHQgY29tbW9uOworCisgICAgQ29kZWRCaXRzdHJlYW1D b250ZXh0ICpjYnM7CisgICAgQ29kZWRCaXRzdHJlYW1GcmFnbWVudCBjdXJyZW50X2FjY2Vzc191 bml0OworCisgICAgZW51bSBVbml0RWxlbXMgdW5pdF9lbGVtczsKKyAgICBBVjFSYXdPQlUgc2Vx X2hkcl9vYnU7CisgICAgQVYxUmF3T0JVIG1ldGFfY2xsX29idTsKKyAgICBBVjFSYXdPQlUgbWV0 YV9tYXN0ZXJpbmdfb2J1OworCisgICAgVmtWaWRlb0VuY29kZUFWMVByb2ZpbGVJbmZvS0hSIHBy b2ZpbGU7CisKKyAgICBWa1ZpZGVvRW5jb2RlQVYxQ2FwYWJpbGl0aWVzS0hSIGNhcHM7CisgICAg VmtWaWRlb0VuY29kZUFWMVF1YWxpdHlMZXZlbFByb3BlcnRpZXNLSFIgcXVhbGl0eV9wcm9wczsK KworICAgIHVpbnQ2NF90IGhyZF9idWZmZXJfc2l6ZTsKKyAgICB1aW50NjRfdCBpbml0aWFsX2J1 ZmZlcl9mdWxsbmVzczsKKworICAgIGludCB1bmlmb3JtX3RpbGU7CisgICAgaW50IHRpbGVfY29s czsKKyAgICBpbnQgdGlsZV9yb3dzOworCisgICAgaW50IHNlcV90aWVyOworICAgIGludCBzZXFf bGV2ZWxfaWR4OworCisgICAgaW50IHFfaWR4X2lkcjsKKyAgICBpbnQgcV9pZHhfcDsKKyAgICBp bnQgcV9pZHhfYjsKKworICAgIHVpbnQ4X3QgKnBhZGRpbmdfcGF5bG9hZDsKK30gVnVsa2FuRW5j b2RlQVYxQ29udGV4dDsKKworc3RhdGljIGludCBpbml0X3BpY19yYyhBVkNvZGVjQ29udGV4dCAq YXZjdHgsIEZGSFdCYXNlRW5jb2RlUGljdHVyZSAqcGljLAorICAgICAgICAgICAgICAgICAgICAg ICBWa1ZpZGVvRW5jb2RlUmF0ZUNvbnRyb2xJbmZvS0hSICpyY19pbmZvLAorICAgICAgICAgICAg ICAgICAgICAgICBWa1ZpZGVvRW5jb2RlUmF0ZUNvbnRyb2xMYXllckluZm9LSFIgKnJjX2xheWVy KQoreworICAgIFZ1bGthbkVuY29kZUFWMUNvbnRleHQgKmVuYyA9IGF2Y3R4LT5wcml2X2RhdGE7 CisgICAgRkZWdWxrYW5FbmNvZGVDb250ZXh0ICAqY3R4ID0gJmVuYy0+Y29tbW9uOworICAgIFZ1 bGthbkVuY29kZUFWMVBpY3R1cmUgICphcCA9IHBpYy0+Y29kZWNfcHJpdjsKKworICAgIC8qIFRo aXMgY2FuIGJlIGVhc3kgdG8gY2FsY3VsYXRlICovCisgICAgYXAtPnZrcmNfcmVtYWluaW5nID0g KFZrVmlkZW9FbmNvZGVBVjFHb3BSZW1haW5pbmdGcmFtZUluZm9LSFIpIHsKKyAgICAgICAgLnNU eXBlID0gVktfU1RSVUNUVVJFX1RZUEVfVklERU9fRU5DT0RFX0FWMV9HT1BfUkVNQUlOSU5HX0ZS QU1FX0lORk9fS0hSLAorICAgICAgICAudXNlR29wUmVtYWluaW5nRnJhbWVzID0gMCwKKyAgICAg ICAgLmdvcFJlbWFpbmluZ0ludHJhID0gMCwKKyAgICAgICAgLmdvcFJlbWFpbmluZ1ByZWRpY3Rp dmUgPSAwLAorICAgICAgICAuZ29wUmVtYWluaW5nQmlwcmVkaWN0aXZlID0gMCwKKyAgICB9Owor CisgICAgYXAtPnZrcmNfaW5mbyA9IChWa1ZpZGVvRW5jb2RlQVYxUmF0ZUNvbnRyb2xJbmZvS0hS KSB7CisgICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX1ZJREVPX0VOQ09ERV9BVjFf UkFURV9DT05UUk9MX0lORk9fS0hSLAorICAgICAgICAuZmxhZ3MgPSBWS19WSURFT19FTkNPREVf QVYxX1JBVEVfQ09OVFJPTF9SRUZFUkVOQ0VfUEFUVEVSTl9GTEFUX0JJVF9LSFIgfAorICAgICAg ICAgICAgICAgICBWS19WSURFT19FTkNPREVfQVYxX1JBVEVfQ09OVFJPTF9SRUdVTEFSX0dPUF9C SVRfS0hSLAorICAgICAgICAuZ29wRnJhbWVDb3VudCA9IGN0eC0+YmFzZS5nb3Bfc2l6ZSwKKyAg ICAgICAgLmtleUZyYW1lUGVyaW9kID0gY3R4LT5iYXNlLmdvcF9zaXplLAorICAgICAgICAuY29u c2VjdXRpdmVCaXByZWRpY3RpdmVGcmFtZUNvdW50ID0gRkZNQVgoY3R4LT5iYXNlLmJfcGVyX3Ag LSAxLCAwKSwKKyAgICAgICAgLnRlbXBvcmFsTGF5ZXJDb3VudCA9IDAsCisgICAgfTsKKyAgICBy Y19pbmZvLT5wTmV4dCA9ICZhcC0+dmtyY19pbmZvOworCisgICAgaWYgKHJjX2luZm8tPnJhdGVD b250cm9sTW9kZSA+IFZLX1ZJREVPX0VOQ09ERV9SQVRFX0NPTlRST0xfTU9ERV9ESVNBQkxFRF9C SVRfS0hSKSB7CisgICAgICAgIHJjX2luZm8tPnZpcnR1YWxCdWZmZXJTaXplSW5NcyA9IChlbmMt PmhyZF9idWZmZXJfc2l6ZSAqIDEwMDBMTCkgLyBhdmN0eC0+Yml0X3JhdGU7CisgICAgICAgIHJj X2luZm8tPmluaXRpYWxWaXJ0dWFsQnVmZmVyU2l6ZUluTXMgPSAoZW5jLT5pbml0aWFsX2J1ZmZl cl9mdWxsbmVzcyAqIDEwMDBMTCkgLyBhdmN0eC0+Yml0X3JhdGU7CisKKyAgICAgICAgYXAtPnZr cmNfbGF5ZXJfaW5mbyA9IChWa1ZpZGVvRW5jb2RlQVYxUmF0ZUNvbnRyb2xMYXllckluZm9LSFIp IHsKKyAgICAgICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX1ZJREVPX0VOQ09ERV9B VjFfUkFURV9DT05UUk9MX0xBWUVSX0lORk9fS0hSLAorCisgICAgICAgICAgICAudXNlTWluUUlu ZGV4ICA9IGF2Y3R4LT5xbWluID4gMCwKKyAgICAgICAgICAgIC5taW5RSW5kZXguaW50cmFRSW5k ZXggPSBhdmN0eC0+cW1pbiA+IDAgPyBhdmN0eC0+cW1pbiA6IDAsCisgICAgICAgICAgICAubWlu UUluZGV4LnByZWRpY3RpdmVRSW5kZXggPSBhdmN0eC0+cW1pbiA+IDAgPyBhdmN0eC0+cW1pbiA6 IDAsCisgICAgICAgICAgICAubWluUUluZGV4LmJpcHJlZGljdGl2ZVFJbmRleCA9IGF2Y3R4LT5x bWluID4gMCA/IGF2Y3R4LT5xbWluIDogMCwKKworICAgICAgICAgICAgLnVzZU1heFFJbmRleCAg PSBhdmN0eC0+cW1heCA+IDAsCisgICAgICAgICAgICAubWF4UUluZGV4LmludHJhUUluZGV4ID0g YXZjdHgtPnFtYXggPiAwID8gYXZjdHgtPnFtYXggOiAwLAorICAgICAgICAgICAgLm1heFFJbmRl eC5wcmVkaWN0aXZlUUluZGV4ID0gYXZjdHgtPnFtYXggPiAwID8gYXZjdHgtPnFtYXggOiAwLAor ICAgICAgICAgICAgLm1heFFJbmRleC5iaXByZWRpY3RpdmVRSW5kZXggPSBhdmN0eC0+cW1heCA+ IDAgPyBhdmN0eC0+cW1heCA6IDAsCisKKyAgICAgICAgICAgIC51c2VNYXhGcmFtZVNpemUgPSAw LAorICAgICAgICB9OworICAgICAgICByY19sYXllci0+cE5leHQgPSAmYXAtPnZrcmNfbGF5ZXJf aW5mbzsKKyAgICAgICAgYXAtPnZrcmNfaW5mby50ZW1wb3JhbExheWVyQ291bnQgPSAxOworICAg IH0KKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzZXRfbmFtZV9zbG90KGludCBz bG90LCBpbnQgKnNsb3RfaW5kaWNlcywgdWludDMyX3QgYWxsb3dlZF9pZHgsIGludCBncm91cCkK K3sKKyAgICBpbnQgZnJvbSA9IGdyb3VwID8gQVYxX1JFRl9GUkFNRV9HT0xERU4gOiAwOworICAg IGludCB0byA9IGdyb3VwID8gQVYxX1JFRlNfUEVSX0ZSQU1FIDogQVYxX1JFRl9GUkFNRV9HT0xE RU47CisKKyAgICBmb3IgKGludCBpID0gZnJvbTsgaSA8IHRvOyBpKyspIHsKKyAgICAgICAgaWYg KChzbG90X2luZGljZXNbaV0gPT0gLTEpICYmIChhbGxvd2VkX2lkeCAmICgxIDw8IGkpKSkgewor ICAgICAgICAgICAgc2xvdF9pbmRpY2VzW2ldID0gc2xvdDsKKyAgICAgICAgICAgIHJldHVybjsK KyAgICAgICAgfQorICAgIH0KKworICAgIGF2X2Fzc2VydDAoMCk7Cit9CisKKworc3RhdGljIGlu dCBpbml0X3BpY19wYXJhbXMoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LCBGRkhXQmFzZUVuY29kZVBp Y3R1cmUgKnBpYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFZrVmlkZW9FbmNvZGVJbmZv S0hSICplbmNvZGVfaW5mbykKK3sKKyAgICBWdWxrYW5FbmNvZGVBVjFDb250ZXh0ICplbmMgPSBh dmN0eC0+cHJpdl9kYXRhOworICAgIEZGVnVsa2FuRW5jb2RlQ29udGV4dCAqY3R4ID0gJmVuYy0+ Y29tbW9uOworICAgIEZGSFdCYXNlRW5jb2RlQ29udGV4dCAqYmFzZV9jdHggPSAmY3R4LT5iYXNl OworCisgICAgVnVsa2FuRW5jb2RlQVYxUGljdHVyZSAqYXAgPSBwaWMtPmNvZGVjX3ByaXY7Cisg ICAgRkZIV0Jhc2VFbmNvZGVQaWN0dXJlICpyZWY7CisgICAgVnVsa2FuRW5jb2RlQVYxUGljdHVy ZSAqYXBfcmVmOworICAgIFZrVmlkZW9SZWZlcmVuY2VTbG90SW5mb0tIUiAqcmVmX3Nsb3Q7CisK KyAgICB1aW50MzJfdCByZWZfbmFtZV9tYXNrID0gMHgwOworICAgIGludCBuYW1lX3Nsb3RzW1NU RF9WSURFT19BVjFfUkVGU19QRVJfRlJBTUVdOworCisgICAgU3RkVmlkZW9BVjFTZWdtZW50YXRp b24gKnNlZ21lbnRhdGlvbiA9ICZhcC0+c2VnbWVudGF0aW9uOworICAgIFN0ZFZpZGVvQVYxTG9v cEZpbHRlciAgKmxvb3BfZmlsdGVyID0gJmFwLT5sb29wX2ZpbHRlcjsKKyAgICBTdGRWaWRlb0FW MVF1YW50aXphdGlvbiAqcXVhbnRpemF0aW9uID0gJmFwLT5xdWFudGl6YXRpb247CisgICAgU3Rk VmlkZW9BVjFDREVGICpjZGVmID0gJmFwLT5jZGVmOworICAgIFN0ZFZpZGVvQVYxTG9vcFJlc3Rv cmF0aW9uICpsb29wX3Jlc3RvcmF0aW9uID0gJmFwLT5sb29wX3Jlc3RvcmF0aW9uOworICAgIFN0 ZFZpZGVvQVYxR2xvYmFsTW90aW9uICpnbG9iYWxfbW90aW9uID0gJmFwLT5nbG9iYWxfbW90aW9u OworICAgIFN0ZFZpZGVvQVYxVGlsZUluZm8gKnRpbGVfaW5mbyA9ICZhcC0+dGlsZV9pbmZvOwor ICAgIHN0YXRpYyBjb25zdCBpbnQ4X3QgZGVmYXVsdF9sb29wX2ZpbHRlcl9yZWZfZGVsdGFzW1NU RF9WSURFT19BVjFfVE9UQUxfUkVGU19QRVJfRlJBTUVdID0KKyAgICAgICAgeyAxLCAwLCAwLCAw LCAtMSwgMCwgLTEsIC0xIH07CisKKyAgICBWa1ZpZGVvRW5jb2RlQVYxUHJlZGljdGlvbk1vZGVL SFIgcHJlZF9tb2RlOworICAgIFZrVmlkZW9FbmNvZGVBVjFSYXRlQ29udHJvbEdyb3VwS0hSIHJj X2dyb3VwOworICAgIGludCBscl91bml0X3NoaWZ0ID0gMDsKKyAgICBpbnQgbHJfdXZfc2hpZnQg PSAwOworCisgICAgYXAtPmV4dF9oZWFkZXIgPSAoU3RkVmlkZW9FbmNvZGVBVjFFeHRlbnNpb25I ZWFkZXIpIHsKKyAgICAgICAgLnRlbXBvcmFsX2lkID0gMCwKKyAgICAgICAgLnNwYXRpYWxfaWQg PSAwLAorICAgIH07CisKKyAgICAqdGlsZV9pbmZvID0gKFN0ZFZpZGVvQVYxVGlsZUluZm8pIHsK KyAgICAgICAgLmZsYWdzID0gKFN0ZFZpZGVvQVYxVGlsZUluZm9GbGFncykgeworICAgICAgICAg ICAgLnVuaWZvcm1fdGlsZV9zcGFjaW5nX2ZsYWcgPSBlbmMtPnVuaWZvcm1fdGlsZSwKKyAgICAg ICAgfSwKKyAgICAgICAgLlRpbGVDb2xzID0gZW5jLT50aWxlX2NvbHMsCisgICAgICAgIC5UaWxl Um93cyA9IGVuYy0+dGlsZV9yb3dzLAorICAgICAgICAuY29udGV4dF91cGRhdGVfdGlsZV9pZCA9 IDAsCisgICAgICAgIC50aWxlX3NpemVfYnl0ZXNfbWludXNfMSA9IDAsCisgICAgfTsKKworICAg IGZvciAoaW50IGkgPSAwOyBpIDwgU1REX1ZJREVPX0FWMV9UT1RBTF9SRUZTX1BFUl9GUkFNRTsg aSsrKSB7CisgICAgICAgIGdsb2JhbF9tb3Rpb24tPkdtVHlwZVtpXSA9IDA7CisgICAgICAgIGZv ciAoaW50IGogPSAwOyBqIDwgU1REX1ZJREVPX0FWMV9HTE9CQUxfTU9USU9OX1BBUkFNUzsgaisr KSB7CisgICAgICAgICAgICBnbG9iYWxfbW90aW9uLT5nbV9wYXJhbXNbaV1bal0gPSAwOworICAg ICAgICB9CisgICAgfQorCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBTVERfVklERU9fQVYxX1JF RlNfUEVSX0ZSQU1FOyBpKyspCisgICAgICAgIG5hbWVfc2xvdHNbaV0gPSAtMTsKKworICAgICps b29wX3Jlc3RvcmF0aW9uID0gKFN0ZFZpZGVvQVYxTG9vcFJlc3RvcmF0aW9uKSB7CisgICAgICAg IC5GcmFtZVJlc3RvcmF0aW9uVHlwZVswXSA9IFNURF9WSURFT19BVjFfRlJBTUVfUkVTVE9SQVRJ T05fVFlQRV9OT05FLAorICAgICAgICAuRnJhbWVSZXN0b3JhdGlvblR5cGVbMV0gPSBTVERfVklE RU9fQVYxX0ZSQU1FX1JFU1RPUkFUSU9OX1RZUEVfTk9ORSwKKyAgICAgICAgLkZyYW1lUmVzdG9y YXRpb25UeXBlWzJdID0gU1REX1ZJREVPX0FWMV9GUkFNRV9SRVNUT1JBVElPTl9UWVBFX05PTkUs CisgICAgICAgIC5Mb29wUmVzdG9yYXRpb25TaXplWzBdID0gMSArIGxyX3VuaXRfc2hpZnQsCisg ICAgICAgIC5Mb29wUmVzdG9yYXRpb25TaXplWzFdID0gMSArIGxyX3VuaXRfc2hpZnQgLSBscl91 dl9zaGlmdCwKKyAgICAgICAgLkxvb3BSZXN0b3JhdGlvblNpemVbMl0gPSAxICsgbHJfdW5pdF9z aGlmdCAtIGxyX3V2X3NoaWZ0LAorICAgIH07CisKKyAgICAqY2RlZiA9IChTdGRWaWRlb0FWMUNE RUYpIHsKKyAgICAgICAgLmNkZWZfZGFtcGluZ19taW51c18zID0gMCwKKyAgICAgICAgLmNkZWZf Yml0cyA9IDAsCisgICAgfTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgU1REX1ZJREVPX0FW MV9NQVhfU0VHTUVOVFM7IGkrKykgeworICAgICAgICBzZWdtZW50YXRpb24tPkZlYXR1cmVFbmFi bGVkW2ldID0gMHgwOworICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IFNURF9WSURFT19BVjFf U0VHX0xWTF9NQVg7IGorKykgeworICAgICAgICAgICAgc2VnbWVudGF0aW9uLT5GZWF0dXJlRW5h YmxlZFtpXSB8PSAweDA7CisgICAgICAgICAgICBzZWdtZW50YXRpb24tPkZlYXR1cmVEYXRhW2ld W2pdID0gMDsKKyAgICAgICAgfQorICAgIH0KKworICAgICpsb29wX2ZpbHRlciA9IChTdGRWaWRl b0FWMUxvb3BGaWx0ZXIpIHsKKyAgICAgICAgLmZsYWdzID0gKFN0ZFZpZGVvQVYxTG9vcEZpbHRl ckZsYWdzKSB7CisgICAgICAgICAgICAubG9vcF9maWx0ZXJfZGVsdGFfZW5hYmxlZCA9IDAsCisg ICAgICAgICAgICAubG9vcF9maWx0ZXJfZGVsdGFfdXBkYXRlID0gMCwKKyAgICAgICAgfSwKKyAg ICAgICAgLmxvb3BfZmlsdGVyX2xldmVsID0geyAwIH0sCisgICAgICAgIC5sb29wX2ZpbHRlcl9z aGFycG5lc3MgPSAwLAorICAgICAgICAudXBkYXRlX3JlZl9kZWx0YSA9IDAsCisgICAgICAgIC5s b29wX2ZpbHRlcl9yZWZfZGVsdGFzID0geyAwIH0sCisgICAgICAgIC51cGRhdGVfbW9kZV9kZWx0 YSA9IDAsCisgICAgICAgIC5sb29wX2ZpbHRlcl9tb2RlX2RlbHRhcyA9IHsgMCB9LAorICAgIH07 CisgICAgbG9vcF9maWx0ZXItPnVwZGF0ZV9tb2RlX2RlbHRhID0gMTsKKyAgICBtZW1jcHkobG9v cF9maWx0ZXItPmxvb3BfZmlsdGVyX3JlZl9kZWx0YXMsIGRlZmF1bHRfbG9vcF9maWx0ZXJfcmVm X2RlbHRhcywKKyAgICAgICAgICAgU1REX1ZJREVPX0FWMV9UT1RBTF9SRUZTX1BFUl9GUkFNRSAq IHNpemVvZihpbnQ4X3QpKTsKKworICAgICpxdWFudGl6YXRpb24gPSAoU3RkVmlkZW9BVjFRdWFu dGl6YXRpb24pIHsKKyAgICAgICAgLmZsYWdzID0gKFN0ZFZpZGVvQVYxUXVhbnRpemF0aW9uRmxh Z3MpIHsKKyAgICAgICAgICAgIC51c2luZ19xbWF0cml4ID0gMCwKKyAgICAgICAgICAgIC5kaWZm X3V2X2RlbHRhID0gMCwKKyAgICAgICAgICAgIC8qIFJlc2VydmVkICovCisgICAgICAgIH0sCisg ICAgICAgIC5iYXNlX3FfaWR4ID0gMCwgLyogU2V0IGxhdGVyICovCisgICAgICAgIC5EZWx0YVFZ RGMgPSAwLAorICAgICAgICAuRGVsdGFRVURjID0gMCwKKyAgICAgICAgLkRlbHRhUVVBYyA9IDAs CisgICAgICAgIC5EZWx0YVFWRGMgPSAwLAorICAgICAgICAuRGVsdGFRVkFjID0gMCwKKyAgICAg ICAgLnFtX3kgPSAwLAorICAgICAgICAucW1fdSA9IDAsCisgICAgICAgIC5xbV92ID0gMCwKKyAg ICB9OworCisgICAgcmVmX3Nsb3QgPSAoVmtWaWRlb1JlZmVyZW5jZVNsb3RJbmZvS0hSICopZW5j b2RlX2luZm8tPnBTZXR1cFJlZmVyZW5jZVNsb3Q7CisgICAgYXAtPmF2MXBpY19pbmZvID0gKFN0 ZFZpZGVvRW5jb2RlQVYxUGljdHVyZUluZm8pIHsKKyAgICAgICAgLmZsYWdzID0gKFN0ZFZpZGVv RW5jb2RlQVYxUGljdHVyZUluZm9GbGFncykgeworICAgICAgICAgICAgLmVycm9yX3Jlc2lsaWVu dF9tb2RlID0gKHBpYy0+dHlwZSA9PSBGRl9IV19QSUNUVVJFX1RZUEVfSSB8fAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpYy0+dHlwZSA9PSBGRl9IV19QSUNUVVJFX1RZ UEVfSURSKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBpYy0+ZGlz cGxheV9vcmRlciA8PSBwaWMtPmVuY29kZV9vcmRlciksCisgICAgICAgICAgICAuZGlzYWJsZV9j ZGZfdXBkYXRlID0gMCwKKyAgICAgICAgICAgIC51c2Vfc3VwZXJyZXMgPSAwLAorICAgICAgICAg ICAgLnJlbmRlcl9hbmRfZnJhbWVfc2l6ZV9kaWZmZXJlbnQgPSAwLAorICAgICAgICAgICAgLmFs bG93X3NjcmVlbl9jb250ZW50X3Rvb2xzID0gMCwKKyAgICAgICAgICAgIC5pc19maWx0ZXJfc3dp dGNoYWJsZSA9IDAsCisgICAgICAgICAgICAuZm9yY2VfaW50ZWdlcl9tdiA9IDAsCisgICAgICAg ICAgICAuZnJhbWVfc2l6ZV9vdmVycmlkZV9mbGFnID0gMCwKKyAgICAgICAgICAgIC5idWZmZXJf cmVtb3ZhbF90aW1lX3ByZXNlbnRfZmxhZyA9IDAsCisgICAgICAgICAgICAuYWxsb3dfaW50cmFi YyA9IDAsCisgICAgICAgICAgICAuZnJhbWVfcmVmc19zaG9ydF9zaWduYWxpbmcgPSAwLAorICAg ICAgICAgICAgLmFsbG93X2hpZ2hfcHJlY2lzaW9uX212ID0gMCwKKyAgICAgICAgICAgIC5pc19t b3Rpb25fbW9kZV9zd2l0Y2hhYmxlID0gMCwKKyAgICAgICAgICAgIC51c2VfcmVmX2ZyYW1lX212 cyA9IDAsCisgICAgICAgICAgICAuZGlzYWJsZV9mcmFtZV9lbmRfdXBkYXRlX2NkZiA9IDAsCisg ICAgICAgICAgICAuYWxsb3dfd2FycGVkX21vdGlvbiA9IDAsCisgICAgICAgICAgICAucmVkdWNl ZF90eF9zZXQgPSAwLAorICAgICAgICAgICAgLnNraXBfbW9kZV9wcmVzZW50ID0gMCwKKyAgICAg ICAgICAgIC5kZWx0YV9xX3ByZXNlbnQgPSAwLAorICAgICAgICAgICAgLmRlbHRhX2xmX3ByZXNl bnQgPSAwLAorICAgICAgICAgICAgLmRlbHRhX2xmX211bHRpID0gMCwKKyAgICAgICAgICAgIC5z ZWdtZW50YXRpb25fZW5hYmxlZCA9IDAsCisgICAgICAgICAgICAuc2VnbWVudGF0aW9uX3VwZGF0 ZV9tYXAgPSAwLAorICAgICAgICAgICAgLnNlZ21lbnRhdGlvbl90ZW1wb3JhbF91cGRhdGUgPSAw LAorICAgICAgICAgICAgLnNlZ21lbnRhdGlvbl91cGRhdGVfZGF0YSA9IDAsCisgICAgICAgICAg ICAuVXNlc0xyID0gMCwKKyAgICAgICAgICAgIC51c2VzQ2hyb21hTHIgPSAwLAorICAgICAgICAg ICAgLnNob3dfZnJhbWUgPSBwaWMtPmRpc3BsYXlfb3JkZXIgPD0gcGljLT5lbmNvZGVfb3JkZXIs CisgICAgICAgICAgICAuc2hvd2FibGVfZnJhbWUgPSAwLAorICAgICAgICAgICAgLyogUmVzZXJ2 ZWQgKi8KKyAgICAgICAgfSwKKyAgICAgICAgLmZyYW1lX3R5cGUgPSAwLCAvLyBzZXQgbGF0ZXIK KyAgICAgICAgLmZyYW1lX3ByZXNlbnRhdGlvbl90aW1lID0gMCwKKyAgICAgICAgLmN1cnJlbnRf ZnJhbWVfaWQgPSByZWZfc2xvdC0+c2xvdEluZGV4LAorICAgICAgICAub3JkZXJfaGludCA9IDAs IC8vIHNldCBsYXRlcgorICAgICAgICAucHJpbWFyeV9yZWZfZnJhbWUgPSAwLCAvLyBzZXQgbGF0 ZXIKKyAgICAgICAgLnJlZnJlc2hfZnJhbWVfZmxhZ3MgPSAweDAsIC8vIHNldCBsYXRlcgorICAg ICAgICAuY29kZWRfZGVub20gPSAwLAorICAgICAgICAucmVuZGVyX3dpZHRoX21pbnVzXzEgPSBi YXNlX2N0eC0+c3VyZmFjZV93aWR0aCAtIDEsCisgICAgICAgIC5yZW5kZXJfaGVpZ2h0X21pbnVz XzEgPSBiYXNlX2N0eC0+c3VyZmFjZV9oZWlnaHQgLSAxLAorICAgICAgICAuaW50ZXJwb2xhdGlv bl9maWx0ZXIgPSAwLAorICAgICAgICAuVHhNb2RlID0gU1REX1ZJREVPX0FWMV9UWF9NT0RFX1NF TEVDVCwKKyAgICAgICAgLmRlbHRhX3FfcmVzID0gMCwKKyAgICAgICAgLmRlbHRhX2xmX3JlcyA9 IDAsCisgICAgICAgIC5yZWZfb3JkZXJfaGludCA9IHsgMCB9LCAvLyBzZXQgbGF0ZXIKKyAgICAg ICAgLnJlZl9mcmFtZV9pZHggPSB7IDAgfSwgLy8gc2V0IGxhdGVyCisgICAgICAgIC8qIFJlc2Vy dmVkICovCisgICAgICAgIC5kZWx0YV9mcmFtZV9pZF9taW51c18xID0geyAwIH0sCisKKy8vICAg ICAgICAucFRpbGVJbmZvID0gdGlsZV9pbmZvLCBUT0RPIEZJWAorICAgICAgICAucFF1YW50aXph dGlvbiA9IHF1YW50aXphdGlvbiwKKyAgICAgICAgLnBTZWdtZW50YXRpb24gPSBzZWdtZW50YXRp b24sCisgICAgICAgIC5wTG9vcEZpbHRlciA9IGxvb3BfZmlsdGVyLAorICAgICAgICAucENERUYg PSBjZGVmLAorICAgICAgICAucExvb3BSZXN0b3JhdGlvbiA9IGxvb3BfcmVzdG9yYXRpb24sCisg ICAgICAgIC5wR2xvYmFsTW90aW9uID0gZ2xvYmFsX21vdGlvbiwKKyAgICAgICAgLnBFeHRlbnNp b25IZWFkZXIgPSAmYXAtPmV4dF9oZWFkZXIsCisgICAgICAgIC5wQnVmZmVyUmVtb3ZhbFRpbWVz ID0gTlVMTCwKKyAgICB9OworCisgICAgc3dpdGNoIChwaWMtPnR5cGUpIHsKKyAgICBjYXNlIEZG X0hXX1BJQ1RVUkVfVFlQRV9JOgorICAgIGNhc2UgRkZfSFdfUElDVFVSRV9UWVBFX0lEUjoKKyAg ICAgICAgYXZfYXNzZXJ0MChwaWMtPm5iX3JlZnNbMF0gPT0gMCB8fCBwaWMtPm5iX3JlZnNbMV0p OworICAgICAgICBhcC0+YXYxcGljX2luZm8uZnJhbWVfdHlwZSA9IFNURF9WSURFT19BVjFfRlJB TUVfVFlQRV9LRVk7CisgICAgICAgIGFwLT5hdjFwaWNfaW5mby5yZWZyZXNoX2ZyYW1lX2ZsYWdz ID0gMHhGRjsKKyAgICAgICAgcXVhbnRpemF0aW9uLT5iYXNlX3FfaWR4ID0gZW5jLT5xX2lkeF9p ZHI7CisgICAgICAgIGFwLT5zbG90ID0gMDsKKyAgICAgICAgYXAtPmxhc3RfaWRyX2ZyYW1lID0g cGljLT5kaXNwbGF5X29yZGVyOworICAgICAgICBwcmVkX21vZGUgPSBWS19WSURFT19FTkNPREVf QVYxX1BSRURJQ1RJT05fTU9ERV9JTlRSQV9PTkxZX0tIUjsKKyAgICAgICAgcmNfZ3JvdXAgPSBW S19WSURFT19FTkNPREVfQVYxX1JBVEVfQ09OVFJPTF9HUk9VUF9JTlRSQV9LSFI7CisgICAgICAg IGJyZWFrOworICAgIGNhc2UgRkZfSFdfUElDVFVSRV9UWVBFX1A6CisgICAgICAgIHJlZiA9IHBp Yy0+cmVmc1swXVtwaWMtPm5iX3JlZnNbMF0gLSAxXTsKKyAgICAgICAgYXBfcmVmID0gcmVmLT5j b2RlY19wcml2OworCisgICAgICAgIGFwLT5hdjFwaWNfaW5mby5mcmFtZV90eXBlID0gU1REX1ZJ REVPX0FWMV9GUkFNRV9UWVBFX0lOVEVSOworICAgICAgICBxdWFudGl6YXRpb24tPmJhc2VfcV9p ZHggPSBlbmMtPnFfaWR4X3A7CisKKyAgICAgICAgYXAtPmxhc3RfaWRyX2ZyYW1lID0gYXBfcmVm LT5sYXN0X2lkcl9mcmFtZTsKKyAgICAgICAgYXAtPnNsb3QgPSAhYXBfcmVmLT5zbG90OworCisg ICAgICAgIGFwLT5hdjFwaWNfaW5mby5yZWZyZXNoX2ZyYW1lX2ZsYWdzID0gMSA8PCBhcC0+c2xv dDsKKworICAgICAgICAvKiogc2V0IHRoZSBuZWFyZXN0IGZyYW1lIGluIEwwIGFzIGFsbCByZWZl cmVuY2UgZnJhbWUuICovCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgQVYxX1JFRlNfUEVS X0ZSQU1FOyBpKyspCisgICAgICAgICAgICBhcC0+YXYxcGljX2luZm8ucmVmX2ZyYW1lX2lkeFtp XSA9IGFwX3JlZi0+c2xvdDsKKworICAgICAgICBhcC0+YXYxcGljX2luZm8ucHJpbWFyeV9yZWZf ZnJhbWUgPSBhcF9yZWYtPnNsb3Q7CisgICAgICAgIGFwLT5hdjFwaWNfaW5mby5yZWZfb3JkZXJf aGludFthcF9yZWYtPnNsb3RdID0gcmVmLT5kaXNwbGF5X29yZGVyIC0gYXBfcmVmLT5sYXN0X2lk cl9mcmFtZTsKKyAgICAgICAgcmNfZ3JvdXAgPSBWS19WSURFT19FTkNPREVfQVYxX1JBVEVfQ09O VFJPTF9HUk9VUF9QUkVESUNUSVZFX0tIUjsKKyAgICAgICAgcHJlZF9tb2RlID0gVktfVklERU9f RU5DT0RFX0FWMV9QUkVESUNUSU9OX01PREVfU0lOR0xFX1JFRkVSRU5DRV9LSFI7CisgICAgICAg IHJlZl9uYW1lX21hc2sgPSBlbmMtPmNhcHMuc2luZ2xlUmVmZXJlbmNlTmFtZU1hc2s7CisgICAg ICAgIHNldF9uYW1lX3Nsb3QoYXBfcmVmLT5hdjFwaWNfaW5mby5jdXJyZW50X2ZyYW1lX2lkLCBu YW1lX3Nsb3RzLCByZWZfbmFtZV9tYXNrLCAwKTsKKworLy8gICAgICAgIHZwaWMtPnJlZl9mcmFt ZV9jdHJsX2wwLmZpZWxkcy5zZWFyY2hfaWR4MCA9IEFWMV9SRUZfRlJBTUVfTEFTVDsKKworICAg ICAgICAvKiogc2V0IHRoZSAybmQgbmVhcmVzdCBmcmFtZSBpbiBMMCBhcyBHb2xkZW4gZnJhbWUu ICovCisgICAgICAgIGlmICgocGljLT5uYl9yZWZzWzBdID4gMSkgJiYKKyAgICAgICAgICAgICgo ZW5jLT5jYXBzLm1heFNpbmdsZVJlZmVyZW5jZUNvdW50ID4gMSkgfHwKKyAgICAgICAgICAgICAo ZW5jLT5jYXBzLm1heFVuaWRpcmVjdGlvbmFsQ29tcG91bmRSZWZlcmVuY2VDb3VudCA+IDApKSkg eworICAgICAgICAgICAgaWYgKGVuYy0+Y2Fwcy5tYXhVbmlkaXJlY3Rpb25hbENvbXBvdW5kUmVm ZXJlbmNlQ291bnQpIHsKKyAgICAgICAgICAgICAgICBwcmVkX21vZGUgPSBWS19WSURFT19FTkNP REVfQVYxX1BSRURJQ1RJT05fTU9ERV9VTklESVJFQ1RJT05BTF9DT01QT1VORF9LSFI7CisgICAg ICAgICAgICAgICAgcmVmX25hbWVfbWFzayA9IGVuYy0+Y2Fwcy51bmlkaXJlY3Rpb25hbENvbXBv dW5kUmVmZXJlbmNlTmFtZU1hc2s7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZWYgPSBw aWMtPnJlZnNbMF1bcGljLT5uYl9yZWZzWzBdIC0gMl07CisgICAgICAgICAgICBhcF9yZWYgPSBy ZWYtPmNvZGVjX3ByaXY7CisgICAgICAgICAgICBhcC0+YXYxcGljX2luZm8ucmVmX2ZyYW1lX2lk eFszXSA9IGFwX3JlZi0+c2xvdDsKKyAgICAgICAgICAgIGFwLT5hdjFwaWNfaW5mby5yZWZfb3Jk ZXJfaGludFthcF9yZWYtPnNsb3RdID0gcmVmLT5kaXNwbGF5X29yZGVyIC0gYXBfcmVmLT5sYXN0 X2lkcl9mcmFtZTsKKy8vICAgICAgICAgICAgdnBpYy0+cmVmX2ZyYW1lX2N0cmxfbDAuZmllbGRz LnNlYXJjaF9pZHgxID0gQVYxX1JFRl9GUkFNRV9HT0xERU47CisgICAgICAgICAgICBzZXRfbmFt ZV9zbG90KGFwX3JlZi0+YXYxcGljX2luZm8uY3VycmVudF9mcmFtZV9pZCwgbmFtZV9zbG90cywg cmVmX25hbWVfbWFzaywgMCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBG Rl9IV19QSUNUVVJFX1RZUEVfQjoKKyAgICAgICAgYXAtPmF2MXBpY19pbmZvLmZyYW1lX3R5cGUg PSBTVERfVklERU9fQVYxX0ZSQU1FX1RZUEVfSU5URVI7CisgICAgICAgIHF1YW50aXphdGlvbi0+ YmFzZV9xX2lkeCA9IGVuYy0+cV9pZHhfYjsKKyAgICAgICAgYXAtPmF2MXBpY19pbmZvLnJlZnJl c2hfZnJhbWVfZmxhZ3MgPSAweDA7CisKKyAgICAgICAgcmNfZ3JvdXAgPSBWS19WSURFT19FTkNP REVfQVYxX1JBVEVfQ09OVFJPTF9HUk9VUF9CSVBSRURJQ1RJVkVfS0hSOworICAgICAgICBwcmVk X21vZGUgPSBWS19WSURFT19FTkNPREVfQVYxX1BSRURJQ1RJT05fTU9ERV9CSURJUkVDVElPTkFM X0NPTVBPVU5EX0tIUjsKKyAgICAgICAgcmVmX25hbWVfbWFzayA9IGVuYy0+Y2Fwcy5iaWRpcmVj dGlvbmFsQ29tcG91bmRSZWZlcmVuY2VOYW1lTWFzazsKKworLy8gICAgICAgIGZoLT5yZWZlcmVu Y2Vfc2VsZWN0ID0gMTsKKyAgICAgICAgLyoqIEIgZnJhbWUgd2lsbCBub3QgYmUgcmVmZXJlbmNl ZCwgZGlzYWJsZSBpdHMgcmVjb24gZnJhbWUuICovCisvLyAgICAgICAgdnBpYy0+cGljdHVyZV9m bGFncy5iaXRzLmRpc2FibGVfZnJhbWVfcmVjb24gPSAxOworCisgICAgICAgIC8qKiBVc2UgTEFT VF9GUkFNRSBhbmQgQldEUkVGX0ZSQU1FIGZvciByZWZlcmVuY2UuICovCisvLyAgICAgICAgdnBp Yy0+cmVmX2ZyYW1lX2N0cmxfbDAuZmllbGRzLnNlYXJjaF9pZHgwID0gQVYxX1JFRl9GUkFNRV9M QVNUOworLy8gICAgICAgIHZwaWMtPnJlZl9mcmFtZV9jdHJsX2wxLmZpZWxkcy5zZWFyY2hfaWR4 MCA9IEFWMV9SRUZfRlJBTUVfQldEUkVGOworCisgICAgICAgIHJlZiA9IHBpYy0+cmVmc1swXVtw aWMtPm5iX3JlZnNbMF0gLSAxXTsKKyAgICAgICAgYXBfcmVmID0gcmVmLT5jb2RlY19wcml2Owor ICAgICAgICBhcC0+bGFzdF9pZHJfZnJhbWUgPSBhcF9yZWYtPmxhc3RfaWRyX2ZyYW1lOworICAg ICAgICBhcC0+YXYxcGljX2luZm8ucHJpbWFyeV9yZWZfZnJhbWUgPSBhcF9yZWYtPnNsb3Q7Cisg ICAgICAgIGFwLT5hdjFwaWNfaW5mby5yZWZfb3JkZXJfaGludFthcF9yZWYtPnNsb3RdID0gcmVm LT5kaXNwbGF5X29yZGVyIC0gYXBfcmVmLT5sYXN0X2lkcl9mcmFtZTsKKyAgICAgICAgZm9yIChp bnQgaSA9IDA7IGkgPCBBVjFfUkVGX0ZSQU1FX0dPTERFTjsgaSsrKQorICAgICAgICAgICAgYXAt PmF2MXBpY19pbmZvLnJlZl9mcmFtZV9pZHhbaV0gPSBhcF9yZWYtPnNsb3Q7CisgICAgICAgIHNl dF9uYW1lX3Nsb3QoYXBfcmVmLT5hdjFwaWNfaW5mby5jdXJyZW50X2ZyYW1lX2lkLCBuYW1lX3Ns b3RzLCByZWZfbmFtZV9tYXNrLCAwKTsKKworICAgICAgICByZWYgPSBwaWMtPnJlZnNbMV1bcGlj LT5uYl9yZWZzWzFdIC0gMV07CisgICAgICAgIGFwX3JlZiA9IHJlZi0+Y29kZWNfcHJpdjsKKyAg ICAgICAgYXAtPmF2MXBpY19pbmZvLnJlZl9vcmRlcl9oaW50W2FwX3JlZi0+c2xvdF0gPSByZWYt PmRpc3BsYXlfb3JkZXIgLSBhcF9yZWYtPmxhc3RfaWRyX2ZyYW1lOworICAgICAgICBmb3IgKGlu dCBpID0gQVYxX1JFRl9GUkFNRV9HT0xERU47IGkgPCBBVjFfUkVGU19QRVJfRlJBTUU7IGkrKykK KyAgICAgICAgICAgIGFwLT5hdjFwaWNfaW5mby5yZWZfZnJhbWVfaWR4W2ldID0gYXBfcmVmLT5z bG90OworICAgICAgICBzZXRfbmFtZV9zbG90KGFwX3JlZi0+YXYxcGljX2luZm8uY3VycmVudF9m cmFtZV9pZCwgbmFtZV9zbG90cywgcmVmX25hbWVfbWFzaywgMSk7CisgICAgICAgIGJyZWFrOwor ICAgIH0KKworICAgIGFwLT5hdjFwaWNfaW5mby5mbGFncy5zaG93YWJsZV9mcmFtZSA9IGFwLT5h djFwaWNfaW5mby5mcmFtZV90eXBlICE9IFNURF9WSURFT19BVjFfRlJBTUVfVFlQRV9LRVk7Cisg ICAgYXAtPmF2MXBpY19pbmZvLm9yZGVyX2hpbnQgPSBwaWMtPmRpc3BsYXlfb3JkZXIgLSBhcC0+ bGFzdF9pZHJfZnJhbWU7CisKKyAgICBhcC0+dmthdjFwaWNfaW5mbyA9IChWa1ZpZGVvRW5jb2Rl QVYxUGljdHVyZUluZm9LSFIpIHsKKyAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVf VklERU9fRU5DT0RFX0FWMV9QSUNUVVJFX0lORk9fS0hSLAorICAgICAgICAucE5leHQgPSBOVUxM LAorICAgICAgICAucHJlZGljdGlvbk1vZGUgPSBwcmVkX21vZGUsCisgICAgICAgIC5yYXRlQ29u dHJvbEdyb3VwID0gcmNfZ3JvdXAsCisgICAgICAgIC5jb25zdGFudFFJbmRleCA9IHF1YW50aXph dGlvbi0+YmFzZV9xX2lkeCwKKyAgICAgICAgLnBTdGRQaWN0dXJlSW5mbyA9ICZhcC0+YXYxcGlj X2luZm8sCisgICAgICAgIC8vIC5yZWZlcmVuY2VOYW1lU2xvdEluZGljZXMgaXMgc2V0IGJlbG93 CisgICAgICAgIC5wcmltYXJ5UmVmZXJlbmNlQ2RmT25seSA9IDAsCisgICAgICAgIC5nZW5lcmF0 ZU9idUV4dGVuc2lvbkhlYWRlciA9IDAsCisgICAgfTsKKyAgICBlbmNvZGVfaW5mby0+cE5leHQg PSAmYXAtPnZrYXYxcGljX2luZm87CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IEZGX0FSUkFZ X0VMRU1TKGFwLT52a2F2MXBpY19pbmZvLnJlZmVyZW5jZU5hbWVTbG90SW5kaWNlcyk7IGkrKykK KyAgICAgICAgYXAtPnZrYXYxcGljX2luZm8ucmVmZXJlbmNlTmFtZVNsb3RJbmRpY2VzW2ldID0g bmFtZV9zbG90c1tpXTsKKworICAgIHJlZl9zbG90ID0gKFZrVmlkZW9SZWZlcmVuY2VTbG90SW5m b0tIUiAqKWVuY29kZV9pbmZvLT5wU2V0dXBSZWZlcmVuY2VTbG90OworICAgIHJlZl9zbG90LT5w TmV4dCA9ICZhcC0+dmthdjFkcGJfaW5mbzsKKworICAgIGFwLT5hdjFkcGJfaW5mbyA9IChTdGRW aWRlb0VuY29kZUFWMVJlZmVyZW5jZUluZm8pIHsKKyAgICAgICAgLmZsYWdzID0gKFN0ZFZpZGVv RW5jb2RlQVYxUmVmZXJlbmNlSW5mb0ZsYWdzKSB7CisgICAgICAgICAgICAuZGlzYWJsZV9mcmFt ZV9lbmRfdXBkYXRlX2NkZiA9IDAsCisgICAgICAgICAgICAuc2VnbWVudGF0aW9uX2VuYWJsZWQg PSAwLAorICAgICAgICAgICAgLyogUmVzZXJ2ZWQgKi8KKyAgICAgICAgfSwKKyAgICAgICAgLlJl ZkZyYW1lSWQgPSByZWZfc2xvdC0+c2xvdEluZGV4LAorICAgICAgICAuZnJhbWVfdHlwZSA9IGFw LT5hdjFwaWNfaW5mby5mcmFtZV90eXBlLAorICAgICAgICAuT3JkZXJIaW50ID0gcGljLT5kaXNw bGF5X29yZGVyIC0gYXAtPmxhc3RfaWRyX2ZyYW1lLAorICAgICAgICAvKiBSZXNlcnZlZCAqLwor ICAgICAgICAucEV4dGVuc2lvbkhlYWRlciA9ICZhcC0+ZXh0X2hlYWRlciwKKyAgICB9OworCisg ICAgYXAtPnZrYXYxZHBiX2luZm8gPSAoVmtWaWRlb0VuY29kZUFWMURwYlNsb3RJbmZvS0hSKSB7 CisgICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX1ZJREVPX0VOQ09ERV9BVjFfRFBC X1NMT1RfSU5GT19LSFIsCisgICAgICAgIC5wU3RkUmVmZXJlbmNlSW5mbyA9ICZhcC0+YXYxZHBi X2luZm8sCisgICAgfTsKKworICAgIGFwLT51bml0c19uZWVkZWQgPSAwOworICAgIGlmIChwaWMt PnR5cGUgPT0gRkZfSFdfUElDVFVSRV9UWVBFX0lEUikgeworICAgICAgICBBVkZyYW1lU2lkZURh dGEgKnNkID0gTlVMTDsKKyAgICAgICAgaWYgKGVuYy0+dW5pdF9lbGVtcyAmIFVOSVRfTUFTVEVS SU5HX0RJU1BMQVkpCisgICAgICAgICAgICBzZCA9IGF2X2ZyYW1lX2dldF9zaWRlX2RhdGEocGlj LT5pbnB1dF9pbWFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBB Vl9GUkFNRV9EQVRBX01BU1RFUklOR19ESVNQTEFZX01FVEFEQVRBKTsKKyAgICAgICAgaWYgKHNk KSB7CisgICAgICAgICAgICBBVk1hc3RlcmluZ0Rpc3BsYXlNZXRhZGF0YSAqbWRtID0KKyAgICAg ICAgICAgICAgICAoQVZNYXN0ZXJpbmdEaXNwbGF5TWV0YWRhdGEgKilzZC0+ZGF0YTsKKyAgICAg ICAgICAgIGlmIChtZG0tPmhhc19wcmltYXJpZXMgJiYgbWRtLT5oYXNfbHVtaW5hbmNlKSB7Cisg ICAgICAgICAgICAgICAgQVYxUmF3T0JVICAgICAgICAgICAgICAqb2J1ID0gJmVuYy0+bWV0YV9t YXN0ZXJpbmdfb2J1OworICAgICAgICAgICAgICAgIEFWMVJhd01ldGFkYXRhICAgICAgICAgICpt ZCA9ICZvYnUtPm9idS5tZXRhZGF0YTsKKyAgICAgICAgICAgICAgICBBVjFSYXdNZXRhZGF0YUhE Uk1EQ1YgKm1kY3YgPSAmbWQtPm1ldGFkYXRhLmhkcl9tZGN2OworICAgICAgICAgICAgICAgIGNv bnN0IGludCAgICAgICAgY2hyb21hX2RlbiA9IDEgPDwgMTY7CisgICAgICAgICAgICAgICAgY29u c3QgaW50ICAgICAgbWF4X2x1bWFfZGVuID0gMSA8PCA4OworICAgICAgICAgICAgICAgIGNvbnN0 IGludCAgICAgIG1pbl9sdW1hX2RlbiA9IDEgPDwgMTQ7CisKKyAgICAgICAgICAgICAgICBtZW1z ZXQob2J1LCAwLCBzaXplb2YoKm9idSkpOworICAgICAgICAgICAgICAgIG9idS0+aGVhZGVyLm9i dV90eXBlID0gQVYxX09CVV9NRVRBREFUQTsKKyAgICAgICAgICAgICAgICBtZC0+bWV0YWRhdGFf dHlwZSA9IEFWMV9NRVRBREFUQV9UWVBFX0hEUl9NRENWOworCisgICAgICAgICAgICAgICAgZm9y IChpbnQgaSA9IDA7IGkgPCAzOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgbWRjdi0+cHJp bWFyeV9jaHJvbWF0aWNpdHlfeFtpXSA9CisgICAgICAgICAgICAgICAgICAgICAgICBhdl9yZXNj YWxlKG1kbS0+ZGlzcGxheV9wcmltYXJpZXNbaV1bMF0ubnVtLCBjaHJvbWFfZGVuLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZG0tPmRpc3BsYXlfcHJpbWFyaWVzW2ldWzBd LmRlbik7CisgICAgICAgICAgICAgICAgICAgIG1kY3YtPnByaW1hcnlfY2hyb21hdGljaXR5X3lb aV0gPQorICAgICAgICAgICAgICAgICAgICAgICAgYXZfcmVzY2FsZShtZG0tPmRpc3BsYXlfcHJp bWFyaWVzW2ldWzFdLm51bSwgY2hyb21hX2RlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbWRtLT5kaXNwbGF5X3ByaW1hcmllc1tpXVsxXS5kZW4pOworICAgICAgICAgICAg ICAgIH0KKworICAgICAgICAgICAgICAgIG1kY3YtPndoaXRlX3BvaW50X2Nocm9tYXRpY2l0eV94 ID0KKyAgICAgICAgICAgICAgICAgICAgYXZfcmVzY2FsZShtZG0tPndoaXRlX3BvaW50WzBdLm51 bSwgY2hyb21hX2RlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZG0tPndoaXRl X3BvaW50WzBdLmRlbik7CisgICAgICAgICAgICAgICAgbWRjdi0+d2hpdGVfcG9pbnRfY2hyb21h dGljaXR5X3kgPQorICAgICAgICAgICAgICAgICAgICBhdl9yZXNjYWxlKG1kbS0+d2hpdGVfcG9p bnRbMV0ubnVtLCBjaHJvbWFfZGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1k bS0+d2hpdGVfcG9pbnRbMV0uZGVuKTsKKworICAgICAgICAgICAgICAgIG1kY3YtPmx1bWluYW5j ZV9tYXggPQorICAgICAgICAgICAgICAgICAgICBhdl9yZXNjYWxlKG1kbS0+bWF4X2x1bWluYW5j ZS5udW0sIG1heF9sdW1hX2RlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZG0t Pm1heF9sdW1pbmFuY2UuZGVuKTsKKyAgICAgICAgICAgICAgICBtZGN2LT5sdW1pbmFuY2VfbWlu ID0KKyAgICAgICAgICAgICAgICAgICAgYXZfcmVzY2FsZShtZG0tPm1pbl9sdW1pbmFuY2UubnVt LCBtaW5fbHVtYV9kZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWRtLT5taW5f bHVtaW5hbmNlLmRlbik7CisgICAgICAgICAgICAgICAgYXAtPnVuaXRzX25lZWRlZCB8PSBVTklU X01BU1RFUklOR19ESVNQTEFZOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAg aWYgKGVuYy0+dW5pdF9lbGVtcyAmIFVOSVRfQ09OVEVOVF9MSUdIVF9MRVZFTCkKKyAgICAgICAg ICAgIHNkID0gYXZfZnJhbWVfZ2V0X3NpZGVfZGF0YShwaWMtPmlucHV0X2ltYWdlLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFWX0ZSQU1FX0RBVEFfQ09OVEVOVF9M SUdIVF9MRVZFTCk7CisgICAgICAgIGlmIChzZCkgeworICAgICAgICAgICAgQVZDb250ZW50TGln aHRNZXRhZGF0YSAqY2xsbSA9IChBVkNvbnRlbnRMaWdodE1ldGFkYXRhICopc2QtPmRhdGE7Cisg ICAgICAgICAgICBBVjFSYXdPQlUgICAgICAgICAgICAgICAqb2J1ID0gJmVuYy0+bWV0YV9jbGxf b2J1OworICAgICAgICAgICAgQVYxUmF3TWV0YWRhdGEgICAgICAgICAgICptZCA9ICZvYnUtPm9i dS5tZXRhZGF0YTsKKyAgICAgICAgICAgIEFWMVJhd01ldGFkYXRhSERSQ0xMICAgICpjbGwgPSAm bWQtPm1ldGFkYXRhLmhkcl9jbGw7CisKKyAgICAgICAgICAgIG1lbXNldChvYnUsIDAsIHNpemVv Zigqb2J1KSk7CisgICAgICAgICAgICBvYnUtPmhlYWRlci5vYnVfdHlwZSA9IEFWMV9PQlVfTUVU QURBVEE7CisgICAgICAgICAgICBtZC0+bWV0YWRhdGFfdHlwZSAgICA9IEFWMV9NRVRBREFUQV9U WVBFX0hEUl9DTEw7CisgICAgICAgICAgICBjbGwtPm1heF9jbGwgICAgICAgICA9IGNsbG0tPk1h eENMTDsKKyAgICAgICAgICAgIGNsbC0+bWF4X2ZhbGwgICAgICAgID0gY2xsbS0+TWF4RkFMTDsK KworICAgICAgICAgICAgYXAtPnVuaXRzX25lZWRlZCB8PSBVTklUX0NPTlRFTlRfTElHSFRfTEVW RUw7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBp bml0X3Byb2ZpbGUoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LAorICAgICAgICAgICAgICAgICAgICAg ICAgVmtWaWRlb1Byb2ZpbGVJbmZvS0hSICpwcm9maWxlLCB2b2lkICpwbmV4dCkKK3sKKyAgICBW a1Jlc3VsdCByZXQ7CisgICAgVnVsa2FuRW5jb2RlQVYxQ29udGV4dCAqZW5jID0gYXZjdHgtPnBy aXZfZGF0YTsKKyAgICBGRlZ1bGthbkVuY29kZUNvbnRleHQgKmN0eCA9ICZlbmMtPmNvbW1vbjsK KyAgICBGRlZ1bGthbkNvbnRleHQgKnMgPSAmY3R4LT5zOworICAgIEZGVnVsa2FuRnVuY3Rpb25z ICp2ayA9ICZjdHgtPnMudmtmbjsKKyAgICBGRkhXQmFzZUVuY29kZUNvbnRleHQgKmJhc2VfY3R4 ID0gJmN0eC0+YmFzZTsKKworICAgIFZrVmlkZW9FbmNvZGVBVjFDYXBhYmlsaXRpZXNLSFIgYXYx X2NhcHMgPSB7CisgICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX1ZJREVPX0VOQ09E RV9BVjFfQ0FQQUJJTElUSUVTX0tIUiwKKyAgICB9OworICAgIFZrVmlkZW9FbmNvZGVDYXBhYmls aXRpZXNLSFIgZW5jX2NhcHMgPSB7CisgICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBF X1ZJREVPX0VOQ09ERV9DQVBBQklMSVRJRVNfS0hSLAorICAgICAgICAucE5leHQgPSAmYXYxX2Nh cHMsCisgICAgfTsKKyAgICBWa1ZpZGVvQ2FwYWJpbGl0aWVzS0hSIGNhcHMgPSB7CisgICAgICAg IC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX1ZJREVPX0NBUEFCSUxJVElFU19LSFIsCisgICAg ICAgIC5wTmV4dCA9ICZlbmNfY2FwcywKKyAgICB9OworCisgICAgLyogSW4gb3JkZXIgb2YgcHJl ZmVyZW5jZSAqLworICAgIGludCBsYXN0X3N1cHBvcnRlZCA9IEFWX1BST0ZJTEVfVU5LTk9XTjsK KyAgICBzdGF0aWMgY29uc3QgaW50IGtub3duX3Byb2ZpbGVzW10gPSB7CisgICAgICAgIEFWX1BS T0ZJTEVfQVYxX01BSU4sCisgICAgICAgIEFWX1BST0ZJTEVfQVYxX0hJR0gsCisgICAgICAgIEFW X1BST0ZJTEVfQVYxX1BST0ZFU1NJT05BTCwKKyAgICB9OworICAgIGludCBuYl9wcm9maWxlcyA9 IEZGX0FSUkFZX0VMRU1TKGtub3duX3Byb2ZpbGVzKTsKKworICAgIGNvbnN0IEFWUGl4Rm10RGVz Y3JpcHRvciAqZGVzYyA9IGF2X3BpeF9mbXRfZGVzY19nZXQocy0+ZnJhbWVzLT5zd19mb3JtYXQp OworICAgIGlmICghZGVzYykKKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKKworICAg IGlmIChzLT5mcmFtZXMtPnN3X2Zvcm1hdCA9PSBBVl9QSVhfRk1UX05WMTIgfHwKKyAgICAgICAg cy0+ZnJhbWVzLT5zd19mb3JtYXQgPT0gQVZfUElYX0ZNVF9QMDEwKQorICAgICAgICBuYl9wcm9m aWxlcyA9IDE7CisKKyAgICBlbmMtPnByb2ZpbGUgPSAoVmtWaWRlb0VuY29kZUFWMVByb2ZpbGVJ bmZvS0hSKSB7CisgICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX1ZJREVPX0VOQ09E RV9BVjFfUFJPRklMRV9JTkZPX0tIUiwKKyAgICAgICAgLnBOZXh0ID0gcG5leHQsCisgICAgICAg IC5zdGRQcm9maWxlID0gZmZfdmtfYXYxX3Byb2ZpbGVfdG9fdmsoYXZjdHgtPnByb2ZpbGUpLAor ICAgIH07CisgICAgcHJvZmlsZS0+cE5leHQgPSAmZW5jLT5wcm9maWxlOworCisgICAgLyogU2V0 IGxldmVsICovCisgICAgaWYgKGF2Y3R4LT5sZXZlbCA9PSBBVl9MRVZFTF9VTktOT1dOKSB7Cisg ICAgICAgIGNvbnN0IEFWMUxldmVsRGVzY3JpcHRvciAqbGV2ZWw7CisgICAgICAgIGZsb2F0IGZy YW1lcmF0ZSA9IDAuMDsKKworICAgICAgICBpZiAoYXZjdHgtPmZyYW1lcmF0ZS5udW0gPiAwICYm IGF2Y3R4LT5mcmFtZXJhdGUuZGVuID4gMCkKKyAgICAgICAgICAgIGZyYW1lcmF0ZSA9IGF2X3Ey ZChhdmN0eC0+ZnJhbWVyYXRlKTsKKworICAgICAgICBsZXZlbCA9IGZmX2F2MV9ndWVzc19sZXZl bChhdmN0eC0+Yml0X3JhdGUsIGVuYy0+c2VxX3RpZXIsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGJhc2VfY3R4LT5zdXJmYWNlX3dpZHRoLCBiYXNlX2N0eC0+c3VyZmFjZV9o ZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuYy0+dGlsZV9yb3dz ICogZW5jLT50aWxlX2NvbHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVu Yy0+dGlsZV9jb2xzLCBmcmFtZXJhdGUpOworICAgICAgICBpZiAobGV2ZWwpIHsKKyAgICAgICAg ICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX1ZFUkJPU0UsICJVc2luZyBsZXZlbCAlcy5cbiIsIGxl dmVsLT5uYW1lKTsKKyAgICAgICAgICAgIGVuYy0+c2VxX2xldmVsX2lkeCA9IGZmX3ZrX2F2MV9s ZXZlbF90b192ayhsZXZlbC0+bGV2ZWxfaWR4KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg ICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX1ZFUkJPU0UsICJTdHJlYW0gd2lsbCBub3QgY29uZm9y bSB0byAiCisgICAgICAgICAgICAgICAgICAgImFueSBub3JtYWwgbGV2ZWwsIHVzaW5nIGxldmVs IDcuMyBieSBkZWZhdWx0LlxuIik7CisgICAgICAgICAgICBlbmMtPnNlcV9sZXZlbF9pZHggPSBT VERfVklERU9fQVYxX0xFVkVMXzdfMzsKKyAgICAgICAgICAgIGVuYy0+c2VxX3RpZXIgPSAxOwor ICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW5jLT5zZXFfbGV2ZWxfaWR4ID0gZmZf dmtfYXYxX2xldmVsX3RvX3ZrKGF2Y3R4LT5sZXZlbCk7CisgICAgfQorCisgICAgLyogVXNlciBo YXMgZXhwbGljaXRseSBzcGVjaWZpZWQgYSBwcm9maWxlLiAqLworICAgIGlmIChhdmN0eC0+cHJv ZmlsZSAhPSBBVl9QUk9GSUxFX1VOS05PV04pCisgICAgICAgIHJldHVybiAwOworCisgICAgYXZf bG9nKGF2Y3R4LCBBVl9MT0dfREVCVUcsICJTdXBwb3J0ZWQgcHJvZmlsZXM6XG4iKTsKKyAgICBm b3IgKGludCBpID0gMDsgaSA8IG5iX3Byb2ZpbGVzOyBpKyspIHsKKyAgICAgICAgZW5jLT5wcm9m aWxlLnN0ZFByb2ZpbGUgPSBmZl92a19hdjFfcHJvZmlsZV90b192ayhrbm93bl9wcm9maWxlc1tp XSk7CisgICAgICAgIHJldCA9IHZrLT5HZXRQaHlzaWNhbERldmljZVZpZGVvQ2FwYWJpbGl0aWVz S0hSKHMtPmh3Y3R4LT5waHlzX2RldiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcHJvZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNhcHMpOworICAgICAgICBpZiAocmV0 ID09IFZLX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0RFQlVH LCAiICAgICVzXG4iLAorICAgICAgICAgICAgICAgICAgIGF2Y29kZWNfcHJvZmlsZV9uYW1lKGF2 Y3R4LT5jb2RlY19pZCwga25vd25fcHJvZmlsZXNbaV0pKTsKKyAgICAgICAgICAgIGxhc3Rfc3Vw cG9ydGVkID0ga25vd25fcHJvZmlsZXNbaV07CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAo bGFzdF9zdXBwb3J0ZWQgPT0gQVZfUFJPRklMRV9VTktOT1dOKSB7CisgICAgICAgIGF2X2xvZyhh dmN0eCwgQVZfTE9HX0VSUk9SLCAiTm8gc3VwcG9ydGVkIHByb2ZpbGVzIGZvciBnaXZlbiBmb3Jt YXRcbiIpOworICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9UU1VQKTsKKyAgICB9CisKKyAgICBl bmMtPnByb2ZpbGUuc3RkUHJvZmlsZSA9IGZmX3ZrX2F2MV9wcm9maWxlX3RvX3ZrKGxhc3Rfc3Vw cG9ydGVkKTsKKyAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19WRVJCT1NFLCAiVXNpbmcgcHJvZmls ZSAlc1xuIiwKKyAgICAgICAgICAgYXZjb2RlY19wcm9maWxlX25hbWUoYXZjdHgtPmNvZGVjX2lk LCBsYXN0X3N1cHBvcnRlZCkpOworICAgIGF2Y3R4LT5wcm9maWxlID0gbGFzdF9zdXBwb3J0ZWQ7 CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpbml0X2VuY19vcHRpb25zKEFWQ29k ZWNDb250ZXh0ICphdmN0eCkKK3sKKyAgICBWdWxrYW5FbmNvZGVBVjFDb250ZXh0ICplbmMgPSBh dmN0eC0+cHJpdl9kYXRhOworCisgICAgaWYgKGF2Y3R4LT5yY19idWZmZXJfc2l6ZSkKKyAgICAg ICAgZW5jLT5ocmRfYnVmZmVyX3NpemUgPSBhdmN0eC0+cmNfYnVmZmVyX3NpemU7CisgICAgZWxz ZSBpZiAoYXZjdHgtPnJjX21heF9yYXRlID4gMCkKKyAgICAgICAgZW5jLT5ocmRfYnVmZmVyX3Np emUgPSBhdmN0eC0+cmNfbWF4X3JhdGU7CisgICAgZWxzZQorICAgICAgICBlbmMtPmhyZF9idWZm ZXJfc2l6ZSA9IGF2Y3R4LT5iaXRfcmF0ZTsKKworICAgIGlmIChhdmN0eC0+cmNfaW5pdGlhbF9i dWZmZXJfb2NjdXBhbmN5KSB7CisgICAgICAgIGlmIChhdmN0eC0+cmNfaW5pdGlhbF9idWZmZXJf b2NjdXBhbmN5ID4gZW5jLT5ocmRfYnVmZmVyX3NpemUpIHsKKyAgICAgICAgICAgIGF2X2xvZyhh dmN0eCwgQVZfTE9HX0VSUk9SLCAiSW52YWxpZCBSQyBidWZmZXIgc2V0dGluZ3M6ICIKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibXVzdCBoYXZlIGluaXRpYWwgYnVm ZmVyIHNpemUgKCVkKSA8PSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgImJ1ZmZlciBzaXplICglIlBSSWQ2NCIpLlxuIiwKKyAgICAgICAgICAgICAgICAgICBhdmN0 eC0+cmNfaW5pdGlhbF9idWZmZXJfb2NjdXBhbmN5LCBlbmMtPmhyZF9idWZmZXJfc2l6ZSk7Cisg ICAgICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOworICAgICAgICB9CisgICAgICAgIGVu Yy0+aW5pdGlhbF9idWZmZXJfZnVsbG5lc3MgPSBhdmN0eC0+cmNfaW5pdGlhbF9idWZmZXJfb2Nj dXBhbmN5OworICAgIH0gZWxzZSB7CisgICAgICAgIGVuYy0+aW5pdGlhbF9idWZmZXJfZnVsbG5l c3MgPSBlbmMtPmhyZF9idWZmZXJfc2l6ZSAqIDMgLyA0OworICAgIH0KKworICAgIGlmIChlbmMt PmNvbW1vbi5vcHRzLnJjX21vZGUgPT0gVktfVklERU9fRU5DT0RFX1JBVEVfQ09OVFJPTF9NT0RF X0RJU0FCTEVEX0JJVF9LSFIpIHsKKyAgICAgICAgZW5jLT5xX2lkeF9wID0gYXZfY2xpcChlbmMt PmNvbW1vbi5vcHRzLnFwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuYy0+Y2Fw cy5taW5RSW5kZXgsIGVuYy0+Y2Fwcy5tYXhRSW5kZXgpOworICAgICAgICBpZiAoZmFicyhhdmN0 eC0+aV9xdWFudF9mYWN0b3IpID4gMC4wKQorICAgICAgICAgICAgZW5jLT5xX2lkeF9pZHIgPQor ICAgICAgICAgICAgICAgIGF2X2NsaXAoKGZhYnMoYXZjdHgtPmlfcXVhbnRfZmFjdG9yKSAqIGVu Yy0+cV9pZHhfcCAgKworICAgICAgICAgICAgICAgICAgICAgICAgIGF2Y3R4LT5pX3F1YW50X29m ZnNldCkgKyAwLjUsCisgICAgICAgICAgICAgICAgICAgICAgICAwLCAyNTUpOworICAgICAgICBl bHNlCisgICAgICAgICAgICBlbmMtPnFfaWR4X2lkciA9IGVuYy0+cV9pZHhfcDsKKworICAgICAg ICBpZiAoZmFicyhhdmN0eC0+Yl9xdWFudF9mYWN0b3IpID4gMC4wKQorICAgICAgICAgICAgZW5j LT5xX2lkeF9iID0KKyAgICAgICAgICAgICAgICBhdl9jbGlwKChmYWJzKGF2Y3R4LT5iX3F1YW50 X2ZhY3RvcikgKiBlbmMtPnFfaWR4X3AgICsKKyAgICAgICAgICAgICAgICAgICAgICAgICBhdmN0 eC0+Yl9xdWFudF9vZmZzZXQpICsgMC41LAorICAgICAgICAgICAgICAgICAgICAgICAgMCwgMjU1 KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW5jLT5xX2lkeF9iID0gZW5jLT5xX2lkeF9w OworICAgIH0gZWxzZSB7CisgICAgICAgIC8qKiBBcmJpdHJhcnkgdmFsdWUgKi8KKyAgICAgICAg ZW5jLT5xX2lkeF9pZHIgPSBlbmMtPnFfaWR4X3AgPSBlbmMtPnFfaWR4X2IgPSAxMjg7CisgICAg fQorCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBhdl9jb2xkIGludCBpbml0X3NlcXVlbmNl X2hlYWRlcnMoQVZDb2RlY0NvbnRleHQgKmF2Y3R4KQoreworICAgIFZ1bGthbkVuY29kZUFWMUNv bnRleHQgKmVuYyA9IGF2Y3R4LT5wcml2X2RhdGE7CisgICAgRkZWdWxrYW5FbmNvZGVDb250ZXh0 ICpjdHggPSAmZW5jLT5jb21tb247CisgICAgRkZWdWxrYW5Db250ZXh0ICpzID0gJmN0eC0+czsK KyAgICBGRkhXQmFzZUVuY29kZUNvbnRleHQgKmJhc2VfY3R4ID0gJmN0eC0+YmFzZTsKKworICAg IEFWMVJhd09CVSAqc2VxX29idSA9ICZlbmMtPnNlcV9oZHJfb2J1OworICAgIEFWMVJhd1NlcXVl bmNlSGVhZGVyICpzZXEgPSAmc2VxX29idS0+b2J1LnNlcXVlbmNlX2hlYWRlcjsKKworICAgIGNv bnN0IEFWUGl4Rm10RGVzY3JpcHRvciAqZGVzYyA9IGF2X3BpeF9mbXRfZGVzY19nZXQocy0+ZnJh bWVzLT5zd19mb3JtYXQpOworICAgIGlmICghZGVzYykKKyAgICAgICAgcmV0dXJuIEFWRVJST1Io RUlOVkFMKTsKKworICAgIHNlcV9vYnUtPmhlYWRlci5vYnVfdHlwZSA9IEFWMV9PQlVfU0VRVUVO Q0VfSEVBREVSOworICAgICpzZXEgPSAoQVYxUmF3U2VxdWVuY2VIZWFkZXIpIHsKKyAgICAgICAg LnNlcV9wcm9maWxlID0gYXZjdHgtPnByb2ZpbGUsCisgICAgICAgIC5zZXFfZm9yY2VfaW50ZWdl cl9tdiA9IHNlcS0+c2VxX2ZvcmNlX3NjcmVlbl9jb250ZW50X3Rvb2xzID8KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgQVYxX1NFTEVDVF9TQ1JFRU5fQ09OVEVOVF9UT09MUyA6Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFWMV9TRUxFQ1RfSU5URUdFUl9NViwKKyAg ICAgICAgLmZyYW1lX3dpZHRoX2JpdHNfbWludXNfMSA9IGF2X2xvZzIoYmFzZV9jdHgtPnN1cmZh Y2Vfd2lkdGgpLAorICAgICAgICAuZnJhbWVfaGVpZ2h0X2JpdHNfbWludXNfMSA9IGF2X2xvZzIo YmFzZV9jdHgtPnN1cmZhY2VfaGVpZ2h0KSwKKyAgICAgICAgLm1heF9mcmFtZV93aWR0aF9taW51 c18xID0gYmFzZV9jdHgtPnN1cmZhY2Vfd2lkdGggLSAxLAorICAgICAgICAubWF4X2ZyYW1lX2hl aWdodF9taW51c18xID0gYmFzZV9jdHgtPnN1cmZhY2VfaGVpZ2h0IC0gMSwKKyAgICAgICAgLmVu YWJsZV9vcmRlcl9oaW50ID0gMSwKKyAgICAgICAgLm9yZGVyX2hpbnRfYml0c19taW51c18xID0g YXZfY2xpcF9pbnRwMihhdl9sb2cyKGN0eC0+YmFzZS5nb3Bfc2l6ZSksIDMpLAorICAgICAgICAu dXNlXzEyOHgxMjhfc3VwZXJibG9jayA9ICEhKGVuYy0+Y2Fwcy5zdXBlcmJsb2NrU2l6ZXMgJiBW S19WSURFT19FTkNPREVfQVYxX1NVUEVSQkxPQ0tfU0laRV8xMjhfQklUX0tIUiksCisgICAgICAg IC5jb2xvcl9jb25maWcgPSAoQVYxUmF3Q29sb3JDb25maWcpIHsKKyAgICAgICAgICAgIC5oaWdo X2JpdGRlcHRoID0gZGVzYy0+Y29tcFswXS5kZXB0aCA+IDgsCisgICAgICAgICAgICAuY29sb3Jf cHJpbWFyaWVzICAgICAgICAgICAgICAgID0gYXZjdHgtPmNvbG9yX3ByaW1hcmllcywKKyAgICAg ICAgICAgIC50cmFuc2Zlcl9jaGFyYWN0ZXJpc3RpY3MgICAgICAgPSBhdmN0eC0+Y29sb3JfdHJj LAorICAgICAgICAgICAgLm1hdHJpeF9jb2VmZmljaWVudHMgICAgICAgICAgICA9IGF2Y3R4LT5j b2xvcnNwYWNlLAorICAgICAgICAgICAgLmNvbG9yX2Rlc2NyaXB0aW9uX3ByZXNlbnRfZmxhZyA9 IChhdmN0eC0+Y29sb3JfcHJpbWFyaWVzICE9IEFWQ09MX1BSSV9VTlNQRUNJRklFRCB8fAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdmN0eC0+Y29sb3Jf dHJjICAgICAgICE9IEFWQ09MX1RSQ19VTlNQRUNJRklFRCB8fAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdmN0eC0+Y29sb3JzcGFjZSAgICAgICE9IEFW Q09MX1NQQ19VTlNQRUNJRklFRCksCisgICAgICAgICAgICAuc3Vic2FtcGxpbmdfeCAgICAgICAg ICAgICAgICAgID0gZGVzYy0+bG9nMl9jaHJvbWFfdywKKyAgICAgICAgICAgIC5zdWJzYW1wbGlu Z195ICAgICAgICAgICAgICAgICAgPSBkZXNjLT5sb2cyX2Nocm9tYV9oLAorICAgICAgICAgICAg LmNocm9tYV9zYW1wbGVfcG9zaXRpb24gICAgICAgICA9IGF2Y3R4LT5jaHJvbWFfc2FtcGxlX2xv Y2F0aW9uID09IEFWQ0hST01BX0xPQ19MRUZUID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBBVjFfQ1NQX1ZFUlRJQ0FMIDoKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdmN0eC0+Y2hyb21hX3NhbXBsZV9sb2NhdGlv biA9PSBBVkNIUk9NQV9MT0NfVE9QTEVGVCA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgQVYxX0NTUF9DT0xPQ0FURUQgOgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFWMV9DU1BfVU5LTk9XTiwKKyAgICAgICAgfSwK KworICAgICAgICAvKiBPcGVyYXRpbmcgcG9pbnQgKi8KKyAgICAgICAgLnNlcV90aWVyID0geyBl bmMtPnNlcV90aWVyIH0sCisgICAgICAgIC5zZXFfbGV2ZWxfaWR4ID0geyBlbmMtPnNlcV9sZXZl bF9pZHggfSwKKyAgICAgICAgLmRlY29kZXJfYnVmZmVyX2RlbGF5ID0geyBiYXNlX2N0eC0+ZGVj b2RlX2RlbGF5IH0sCisgICAgICAgIC5lbmNvZGVyX2J1ZmZlcl9kZWxheSA9IHsgYmFzZV9jdHgt Pm91dHB1dF9kZWxheSB9LAorICAgICAgICAub3BlcmF0aW5nX3BvaW50c19jbnRfbWludXNfMSA9 IDEgLSAxLAorICAgIH07CisKKyAgICByZXR1cm4gMDsKK30KKwordHlwZWRlZiBzdHJ1Y3QgVnVs a2FuQVYxVW5pdHMgeworICAgIFN0ZFZpZGVvQVYxU2VxdWVuY2VIZWFkZXIgc2VxX2hkcjsKKyAg ICBTdGRWaWRlb0FWMVRpbWluZ0luZm8gdGltaW5nX2luZm87CisgICAgU3RkVmlkZW9BVjFDb2xv ckNvbmZpZyBjb2xvcl9jb25maWc7CisKKyAgICBTdGRWaWRlb0VuY29kZUFWMURlY29kZXJNb2Rl bEluZm8gZGVjb2Rlcl9tb2RlbDsKKyAgICBTdGRWaWRlb0VuY29kZUFWMU9wZXJhdGluZ1BvaW50 SW5mbyBvcGVyYXRpbmdfcG9pbnRzW0FWMV9NQVhfT1BFUkFUSU5HX1BPSU5UU107CisgICAgaW50 IG5iX29wZXJhdGluZ19wb2ludHM7Cit9IFZ1bGthbkFWMVVuaXRzOworCitzdGF0aWMgYXZfY29s ZCBpbnQgYmFzZV91bml0X3RvX3ZrKEFWQ29kZWNDb250ZXh0ICphdmN0eCwgVnVsa2FuQVYxVW5p dHMgKnZrX3VuaXRzKQoreworICAgIFZ1bGthbkVuY29kZUFWMUNvbnRleHQgKmVuYyA9IGF2Y3R4 LT5wcml2X2RhdGE7CisKKyAgICBBVjFSYXdPQlUgKnNlcV9vYnUgPSAmZW5jLT5zZXFfaGRyX29i dTsKKyAgICBBVjFSYXdTZXF1ZW5jZUhlYWRlciAqc2VxID0gJnNlcV9vYnUtPm9idS5zZXF1ZW5j ZV9oZWFkZXI7CisKKyAgICBTdGRWaWRlb0FWMVNlcXVlbmNlSGVhZGVyICpzZXFfaGRyID0gJnZr X3VuaXRzLT5zZXFfaGRyOworICAgIFN0ZFZpZGVvQVYxVGltaW5nSW5mbyAqdGltaW5nX2luZm8g PSAmdmtfdW5pdHMtPnRpbWluZ19pbmZvOworICAgIFN0ZFZpZGVvQVYxQ29sb3JDb25maWcgKmNv bG9yX2NvbmZpZyA9ICZ2a191bml0cy0+Y29sb3JfY29uZmlnOworCisgICAgU3RkVmlkZW9FbmNv ZGVBVjFPcGVyYXRpbmdQb2ludEluZm8gKm9wZXJhdGluZ19wb2ludHMgPSB2a191bml0cy0+b3Bl cmF0aW5nX3BvaW50czsKKworICAgICp0aW1pbmdfaW5mbyA9IChTdGRWaWRlb0FWMVRpbWluZ0lu Zm8pIHsKKyAgICAgICAgLmZsYWdzID0gKFN0ZFZpZGVvQVYxVGltaW5nSW5mb0ZsYWdzKSB7Cisg ICAgICAgICAgICAuZXF1YWxfcGljdHVyZV9pbnRlcnZhbCA9IHNlcS0+dGltaW5nX2luZm8uZXF1 YWxfcGljdHVyZV9pbnRlcnZhbCwKKyAgICAgICAgfSwKKyAgICAgICAgLm51bV91bml0c19pbl9k aXNwbGF5X3RpY2sgPSBzZXEtPnRpbWluZ19pbmZvLm51bV91bml0c19pbl9kaXNwbGF5X3RpY2ss CisgICAgICAgIC50aW1lX3NjYWxlID0gc2VxLT50aW1pbmdfaW5mby50aW1lX3NjYWxlLAorICAg ICAgICAubnVtX3RpY2tzX3Blcl9waWN0dXJlX21pbnVzXzEgPSBzZXEtPnRpbWluZ19pbmZvLm51 bV90aWNrc19wZXJfcGljdHVyZV9taW51c18xLAorICAgIH07CisKKyAgICAqY29sb3JfY29uZmln ID0gKFN0ZFZpZGVvQVYxQ29sb3JDb25maWcpIHsKKyAgICAgICAgLmZsYWdzID0gKFN0ZFZpZGVv QVYxQ29sb3JDb25maWdGbGFncykgeworICAgICAgICAgICAgLm1vbm9fY2hyb21lID0gc2VxLT5j b2xvcl9jb25maWcubW9ub19jaHJvbWUsCisgICAgICAgICAgICAuY29sb3JfcmFuZ2UgPSBzZXEt PmNvbG9yX2NvbmZpZy5jb2xvcl9yYW5nZSwKKyAgICAgICAgICAgIC5zZXBhcmF0ZV91dl9kZWx0 YV9xID0gc2VxLT5jb2xvcl9jb25maWcuc2VwYXJhdGVfdXZfZGVsdGFfcSwKKyAgICAgICAgfSwK KyAgICAgICAgLkJpdERlcHRoID0gc2VxLT5jb2xvcl9jb25maWcudHdlbHZlX2JpdCAgICA/IDEy IDoKKyAgICAgICAgICAgICAgICAgICAgc2VxLT5jb2xvcl9jb25maWcuaGlnaF9iaXRkZXB0aCA/ IDEwIDogOCwKKyAgICAgICAgLnN1YnNhbXBsaW5nX3ggPSBzZXEtPmNvbG9yX2NvbmZpZy5zdWJz YW1wbGluZ194LAorICAgICAgICAuc3Vic2FtcGxpbmdfeSA9IHNlcS0+Y29sb3JfY29uZmlnLnN1 YnNhbXBsaW5nX3ksCisgICAgICAgIC5jb2xvcl9wcmltYXJpZXMgPSBzZXEtPmNvbG9yX2NvbmZp Zy5jb2xvcl9wcmltYXJpZXMsCisgICAgICAgIC50cmFuc2Zlcl9jaGFyYWN0ZXJpc3RpY3MgPSBz ZXEtPmNvbG9yX2NvbmZpZy50cmFuc2Zlcl9jaGFyYWN0ZXJpc3RpY3MsCisgICAgICAgIC5tYXRy aXhfY29lZmZpY2llbnRzID0gc2VxLT5jb2xvcl9jb25maWcubWF0cml4X2NvZWZmaWNpZW50cywK KyAgICB9OworCisgICAgKnNlcV9oZHIgPSAoU3RkVmlkZW9BVjFTZXF1ZW5jZUhlYWRlcikgewor ICAgICAgICAuZmxhZ3MgPSAoU3RkVmlkZW9BVjFTZXF1ZW5jZUhlYWRlckZsYWdzKSB7CisgICAg ICAgICAgICAuc3RpbGxfcGljdHVyZSA9IHNlcS0+c3RpbGxfcGljdHVyZSwKKyAgICAgICAgICAg IC5yZWR1Y2VkX3N0aWxsX3BpY3R1cmVfaGVhZGVyID0gc2VxLT5yZWR1Y2VkX3N0aWxsX3BpY3R1 cmVfaGVhZGVyLAorICAgICAgICAgICAgLnVzZV8xMjh4MTI4X3N1cGVyYmxvY2sgPSBzZXEtPnVz ZV8xMjh4MTI4X3N1cGVyYmxvY2ssCisgICAgICAgICAgICAuZW5hYmxlX2ZpbHRlcl9pbnRyYSA9 IHNlcS0+ZW5hYmxlX2ZpbHRlcl9pbnRyYSwKKyAgICAgICAgICAgIC5lbmFibGVfaW50cmFfZWRn ZV9maWx0ZXIgPSBzZXEtPmVuYWJsZV9pbnRyYV9lZGdlX2ZpbHRlciwKKyAgICAgICAgICAgIC5l bmFibGVfaW50ZXJpbnRyYV9jb21wb3VuZCA9IHNlcS0+ZW5hYmxlX2ludGVyaW50cmFfY29tcG91 bmQsCisgICAgICAgICAgICAuZW5hYmxlX21hc2tlZF9jb21wb3VuZCA9IHNlcS0+ZW5hYmxlX21h c2tlZF9jb21wb3VuZCwKKyAgICAgICAgICAgIC5lbmFibGVfd2FycGVkX21vdGlvbiA9IHNlcS0+ ZW5hYmxlX3dhcnBlZF9tb3Rpb24sCisgICAgICAgICAgICAuZW5hYmxlX2R1YWxfZmlsdGVyID0g c2VxLT5lbmFibGVfZHVhbF9maWx0ZXIsCisgICAgICAgICAgICAuZW5hYmxlX29yZGVyX2hpbnQg PSBzZXEtPmVuYWJsZV9vcmRlcl9oaW50LAorICAgICAgICAgICAgLmVuYWJsZV9qbnRfY29tcCA9 IHNlcS0+ZW5hYmxlX2pudF9jb21wLAorICAgICAgICAgICAgLmVuYWJsZV9yZWZfZnJhbWVfbXZz ID0gc2VxLT5lbmFibGVfcmVmX2ZyYW1lX212cywKKyAgICAgICAgICAgIC5mcmFtZV9pZF9udW1i ZXJzX3ByZXNlbnRfZmxhZyA9IHNlcS0+ZnJhbWVfaWRfbnVtYmVyc19wcmVzZW50X2ZsYWcsCisg ICAgICAgICAgICAuZW5hYmxlX3N1cGVycmVzID0gc2VxLT5lbmFibGVfc3VwZXJyZXMsCisgICAg ICAgICAgICAuZW5hYmxlX2NkZWYgPSBzZXEtPmVuYWJsZV9jZGVmLAorICAgICAgICAgICAgLmVu YWJsZV9yZXN0b3JhdGlvbiA9IHNlcS0+ZW5hYmxlX3Jlc3RvcmF0aW9uLAorICAgICAgICAgICAg LmZpbG1fZ3JhaW5fcGFyYW1zX3ByZXNlbnQgPSBzZXEtPmZpbG1fZ3JhaW5fcGFyYW1zX3ByZXNl bnQsCisgICAgICAgICAgICAudGltaW5nX2luZm9fcHJlc2VudF9mbGFnID0gc2VxLT50aW1pbmdf aW5mb19wcmVzZW50X2ZsYWcsCisgICAgICAgICAgICAuaW5pdGlhbF9kaXNwbGF5X2RlbGF5X3By ZXNlbnRfZmxhZyA9IHNlcS0+aW5pdGlhbF9kaXNwbGF5X2RlbGF5X3ByZXNlbnRfZmxhZywKKyAg ICAgICAgfSwKKyAgICAgICAgLnNlcV9wcm9maWxlID0gc2VxLT5zZXFfcHJvZmlsZSwKKyAgICAg ICAgLmZyYW1lX3dpZHRoX2JpdHNfbWludXNfMSA9IHNlcS0+ZnJhbWVfd2lkdGhfYml0c19taW51 c18xLAorICAgICAgICAuZnJhbWVfaGVpZ2h0X2JpdHNfbWludXNfMSA9IHNlcS0+ZnJhbWVfaGVp Z2h0X2JpdHNfbWludXNfMSwKKyAgICAgICAgLm1heF9mcmFtZV93aWR0aF9taW51c18xID0gc2Vx LT5tYXhfZnJhbWVfd2lkdGhfbWludXNfMSwKKyAgICAgICAgLm1heF9mcmFtZV9oZWlnaHRfbWlu dXNfMSA9IHNlcS0+bWF4X2ZyYW1lX2hlaWdodF9taW51c18xLAorICAgICAgICAuZGVsdGFfZnJh bWVfaWRfbGVuZ3RoX21pbnVzXzIgPSBzZXEtPmRlbHRhX2ZyYW1lX2lkX2xlbmd0aF9taW51c18y LAorICAgICAgICAuYWRkaXRpb25hbF9mcmFtZV9pZF9sZW5ndGhfbWludXNfMSA9IHNlcS0+YWRk aXRpb25hbF9mcmFtZV9pZF9sZW5ndGhfbWludXNfMSwKKyAgICAgICAgLm9yZGVyX2hpbnRfYml0 c19taW51c18xID0gc2VxLT5vcmRlcl9oaW50X2JpdHNfbWludXNfMSwKKyAgICAgICAgLnNlcV9m b3JjZV9pbnRlZ2VyX212ID0gc2VxLT5zZXFfZm9yY2VfaW50ZWdlcl9tdiwKKyAgICAgICAgLnNl cV9mb3JjZV9zY3JlZW5fY29udGVudF90b29scyA9IHNlcS0+c2VxX2ZvcmNlX3NjcmVlbl9jb250 ZW50X3Rvb2xzLAorICAgICAgICAucFRpbWluZ0luZm8gPSB0aW1pbmdfaW5mbywKKyAgICAgICAg LnBDb2xvckNvbmZpZyA9IGNvbG9yX2NvbmZpZywKKyAgICB9OworCisgICAgZm9yIChpbnQgaSA9 IDA7IGkgPD0gc2VxLT5vcGVyYXRpbmdfcG9pbnRzX2NudF9taW51c18xOyBpKyspIHsKKyAgICAg ICAgb3BlcmF0aW5nX3BvaW50c1tpXSA9IChTdGRWaWRlb0VuY29kZUFWMU9wZXJhdGluZ1BvaW50 SW5mbykgeworICAgICAgICAgICAgLmZsYWdzID0gKFN0ZFZpZGVvRW5jb2RlQVYxT3BlcmF0aW5n UG9pbnRJbmZvRmxhZ3MpIHsKKyAgICAgICAgICAgICAgICAuZGVjb2Rlcl9tb2RlbF9wcmVzZW50 X2Zvcl90aGlzX29wID0gc2VxLT5kZWNvZGVyX21vZGVsX3ByZXNlbnRfZm9yX3RoaXNfb3BbaV0s CisgICAgICAgICAgICAgICAgLmxvd19kZWxheV9tb2RlX2ZsYWcgPSBzZXEtPmxvd19kZWxheV9t b2RlX2ZsYWdbaV0sCisgICAgICAgICAgICAgICAgLmluaXRpYWxfZGlzcGxheV9kZWxheV9wcmVz ZW50X2Zvcl90aGlzX29wID0gc2VxLT5pbml0aWFsX2Rpc3BsYXlfZGVsYXlfcHJlc2VudF9mb3Jf dGhpc19vcFtpXSwKKyAgICAgICAgICAgICAgICAvKiBSZXNlcnZlZCAqLworICAgICAgICAgICAg fSwKKyAgICAgICAgICAgIC5vcGVyYXRpbmdfcG9pbnRfaWRjID0gc2VxLT5vcGVyYXRpbmdfcG9p bnRfaWRjW2ldLAorICAgICAgICAgICAgLnNlcV9sZXZlbF9pZHggPSBzZXEtPnNlcV9sZXZlbF9p ZHhbaV0sCisgICAgICAgICAgICAuc2VxX3RpZXIgPSBzZXEtPnNlcV90aWVyW2ldLAorICAgICAg ICAgICAgLmRlY29kZXJfYnVmZmVyX2RlbGF5ID0gc2VxLT5kZWNvZGVyX2J1ZmZlcl9kZWxheVtp XSwKKyAgICAgICAgICAgIC5lbmNvZGVyX2J1ZmZlcl9kZWxheSA9IHNlcS0+ZW5jb2Rlcl9idWZm ZXJfZGVsYXlbaV0sCisgICAgICAgICAgICAuaW5pdGlhbF9kaXNwbGF5X2RlbGF5X21pbnVzXzEg PSBzZXEtPmluaXRpYWxfZGlzcGxheV9kZWxheV9taW51c18xW2ldLAorICAgICAgICB9OworICAg IH0KKyAgICB2a191bml0cy0+bmJfb3BlcmF0aW5nX3BvaW50cyA9IHNlcS0+b3BlcmF0aW5nX3Bv aW50c19jbnRfbWludXNfMSArIDE7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBj cmVhdGVfc2Vzc2lvbl9wYXJhbXMoQVZDb2RlY0NvbnRleHQgKmF2Y3R4KQoreworICAgIGludCBl cnI7CisgICAgVnVsa2FuRW5jb2RlQVYxQ29udGV4dCAqZW5jID0gYXZjdHgtPnByaXZfZGF0YTsK KyAgICBGRlZ1bGthbkVuY29kZUNvbnRleHQgKmN0eCA9ICZlbmMtPmNvbW1vbjsKKyAgICBGRlZ1 bGthbkNvbnRleHQgKnMgPSAmY3R4LT5zOworICAgIEZGVnVsa2FuRnVuY3Rpb25zICp2ayA9ICZj dHgtPnMudmtmbjsKKworICAgIFZ1bGthbkFWMVVuaXRzIHZrX3VuaXRzID0geyAwIH07CisKKyAg ICBWa1ZpZGVvRW5jb2RlQVYxU2Vzc2lvblBhcmFtZXRlcnNDcmVhdGVJbmZvS0hSIGF2MV9wYXJh bXM7CisKKyAgICAvKiBDb252ZXJ0IGl0IHRvIFZ1bGthbiAqLworICAgIGVyciA9IGJhc2VfdW5p dF90b192ayhhdmN0eCwgJnZrX3VuaXRzKTsKKyAgICBpZiAoZXJyIDwgMCkgeworICAgICAgICBh dl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIlVuYWJsZSB0byBjb252ZXJ0IHNlcXVlbmNlIGhl YWRlciB0byBWdWxrYW46ICVzXG4iLAorICAgICAgICAgICAgICAgYXZfZXJyMnN0cihlcnIpKTsK KyAgICAgICAgcmV0dXJuIGVycjsKKyAgICB9CisKKyAgICAvKiBEZXN0cm95IHRoZSBzZXNzaW9u IHBhcmFtcyAqLworICAgIGlmIChjdHgtPnNlc3Npb25fcGFyYW1zKQorICAgICAgICB2ay0+RGVz dHJveVZpZGVvU2Vzc2lvblBhcmFtZXRlcnNLSFIocy0+aHdjdHgtPmFjdF9kZXYsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgtPnNlc3Npb25fcGFyYW1z LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy0+aHdjdHgt PmFsbG9jKTsKKworICAgIGF2MV9wYXJhbXMgPSAoVmtWaWRlb0VuY29kZUFWMVNlc3Npb25QYXJh bWV0ZXJzQ3JlYXRlSW5mb0tIUikgeworICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQ RV9WSURFT19FTkNPREVfQVYxX1NFU1NJT05fUEFSQU1FVEVSU19DUkVBVEVfSU5GT19LSFIsCisg ICAgICAgIC5wU3RkU2VxdWVuY2VIZWFkZXIgPSAmdmtfdW5pdHMuc2VxX2hkciwKKyAgICAgICAg LnBTdGREZWNvZGVyTW9kZWxJbmZvID0gJnZrX3VuaXRzLmRlY29kZXJfbW9kZWwsCisgICAgICAg IC5wU3RkT3BlcmF0aW5nUG9pbnRzID0gdmtfdW5pdHMub3BlcmF0aW5nX3BvaW50cywKKyAgICAg ICAgLnN0ZE9wZXJhdGluZ1BvaW50Q291bnQgPSB2a191bml0cy5uYl9vcGVyYXRpbmdfcG9pbnRz LAorICAgIH07CisKKyAgICByZXR1cm4gZmZfdnVsa2FuX2VuY29kZV9jcmVhdGVfc2Vzc2lvbl9w YXJhbXMoYXZjdHgsIGN0eCwgJmF2MV9wYXJhbXMpOworfQorCitzdGF0aWMgaW50IHBhcnNlX2Zl ZWRiYWNrX3VuaXRzKEFWQ29kZWNDb250ZXh0ICphdmN0eCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgdWludDhfdCAqZGF0YSwgc2l6ZV90IHNpemUpCit7CisgICAgaW50 IGVycjsKKyAgICBWdWxrYW5FbmNvZGVBVjFDb250ZXh0ICplbmMgPSBhdmN0eC0+cHJpdl9kYXRh OworICAgIEFWMVJhd09CVSAqc2VxX29idSA9ICZlbmMtPnNlcV9oZHJfb2J1OworICAgIEFWMVJh d1NlcXVlbmNlSGVhZGVyICpzZXEgPSAmc2VxX29idS0+b2J1LnNlcXVlbmNlX2hlYWRlcjsKKwor ICAgIENvZGVkQml0c3RyZWFtQ29udGV4dCAqY2JzOworICAgIENvZGVkQml0c3RyZWFtRnJhZ21l bnQgb2J1ID0geyAwIH07CisKKyAgICBlcnIgPSBmZl9jYnNfaW5pdCgmY2JzLCBBVl9DT0RFQ19J RF9BVjEsIGF2Y3R4KTsKKyAgICBpZiAoZXJyIDwgMCkKKyAgICAgICAgcmV0dXJuIGVycjsKKwor ICAgIGVyciA9IGZmX2Nic19yZWFkKGNicywgJm9idSwgTlVMTCwgZGF0YSwgc2l6ZSk7CisgICAg aWYgKGVyciA8IDApIHsKKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJVbmFi bGUgdG8gcGFyc2UgZmVlZGJhY2sgdW5pdHMsIGJhZCBkcml2ZXJzOiAlc1xuIiwKKyAgICAgICAg ICAgICAgIGF2X2VycjJzdHIoZXJyKSk7CisgICAgICAgIHJldHVybiBlcnI7CisgICAgfQorCisg ICAgLyogSWYgUFBTIGhhcyBhbiBvdmVycmlkZSwganVzdCBjb3B5IGl0IGVudGlyZWx5LiAqLwor ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgb2J1Lm5iX3VuaXRzOyBpKyspIHsKKyAgICAgICAgaWYg KG9idS51bml0c1tpXS50eXBlID09IEFWMV9PQlVfU0VRVUVOQ0VfSEVBREVSKSB7CisgICAgICAg ICAgICBBVjFSYXdPQlUgKmZfc2VxX29idSA9IG9idS51bml0c1tpXS5jb250ZW50OworICAgICAg ICAgICAgQVYxUmF3U2VxdWVuY2VIZWFkZXIgKmZfc2VxID0gJmZfc2VxX29idS0+b2J1LnNlcXVl bmNlX2hlYWRlcjsKKyAgICAgICAgICAgIHNlcS0+ZnJhbWVfd2lkdGhfYml0c19taW51c18xID0g Zl9zZXEtPmZyYW1lX3dpZHRoX2JpdHNfbWludXNfMTsKKyAgICAgICAgICAgIHNlcS0+ZnJhbWVf aGVpZ2h0X2JpdHNfbWludXNfMSA9IGZfc2VxLT5mcmFtZV9oZWlnaHRfYml0c19taW51c18xOwor ICAgICAgICAgICAgc2VxLT5tYXhfZnJhbWVfd2lkdGhfbWludXNfMSA9IGZfc2VxLT5tYXhfZnJh bWVfd2lkdGhfbWludXNfMTsKKyAgICAgICAgICAgIHNlcS0+bWF4X2ZyYW1lX2hlaWdodF9taW51 c18xID0gZl9zZXEtPm1heF9mcmFtZV9oZWlnaHRfbWludXNfMTsKKyAgICAgICAgICAgIHNlcS0+ c2VxX2Nob29zZV9zY3JlZW5fY29udGVudF90b29scyA9IGZfc2VxLT5zZXFfY2hvb3NlX3NjcmVl bl9jb250ZW50X3Rvb2xzOworICAgICAgICAgICAgc2VxLT5zZXFfZm9yY2Vfc2NyZWVuX2NvbnRl bnRfdG9vbHMgPSBmX3NlcS0+c2VxX2ZvcmNlX3NjcmVlbl9jb250ZW50X3Rvb2xzOworICAgICAg ICAgICAgc2VxLT5zZXFfY2hvb3NlX2ludGVnZXJfbXYgPSBmX3NlcS0+c2VxX2Nob29zZV9pbnRl Z2VyX212OworICAgICAgICAgICAgc2VxLT5zZXFfZm9yY2VfaW50ZWdlcl9tdiA9IGZfc2VxLT5z ZXFfZm9yY2VfaW50ZWdlcl9tdjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZmX2Nic19mcmFn bWVudF9mcmVlKCZvYnUpOworICAgIGZmX2Nic19jbG9zZSgmY2JzKTsKKworICAgIHJldHVybiAw OworfQorCitzdGF0aWMgaW50IGluaXRfYmFzZV91bml0cyhBVkNvZGVjQ29udGV4dCAqYXZjdHgp Cit7CisgICAgaW50IGVycjsKKyAgICBWa1Jlc3VsdCByZXQ7CisgICAgVnVsa2FuRW5jb2RlQVYx Q29udGV4dCAqZW5jID0gYXZjdHgtPnByaXZfZGF0YTsKKyAgICBGRlZ1bGthbkVuY29kZUNvbnRl eHQgKmN0eCA9ICZlbmMtPmNvbW1vbjsKKyAgICBGRlZ1bGthbkNvbnRleHQgKnMgPSAmY3R4LT5z OworICAgIEZGVnVsa2FuRnVuY3Rpb25zICp2ayA9ICZjdHgtPnMudmtmbjsKKworICAgIFZrVmlk ZW9FbmNvZGVTZXNzaW9uUGFyYW1ldGVyc0dldEluZm9LSFIgcGFyYW1zX2luZm87CisgICAgVmtW aWRlb0VuY29kZVNlc3Npb25QYXJhbWV0ZXJzRmVlZGJhY2tJbmZvS0hSIHBhcmFtc19mZWVkYmFj azsKKworICAgIHZvaWQgKmRhdGEgPSBOVUxMOworICAgIHNpemVfdCBkYXRhX3NpemUgPSAwOwor CisgICAgLyogR2VuZXJhdGUgU1BTL1BQUyB1bml0IGluZm8gKi8KKyAgICBlcnIgPSBpbml0X3Nl cXVlbmNlX2hlYWRlcnMoYXZjdHgpOworICAgIGlmIChlcnIgPCAwKSB7CisgICAgICAgIGF2X2xv ZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiVW5hYmxlIHRvIGluaXRpYWxpemUgc2VxdWVuY2UgaGVh ZGVyOiAlc1xuIiwKKyAgICAgICAgICAgICAgIGF2X2VycjJzdHIoZXJyKSk7CisgICAgICAgIHJl dHVybiBlcnI7CisgICAgfQorCisgICAgLyogQ3JlYXRlIHNlc3Npb24gcGFyYW1ldGVycyBmcm9t IHRoZW0gKi8KKyAgICBlcnIgPSBjcmVhdGVfc2Vzc2lvbl9wYXJhbXMoYXZjdHgpOworICAgIGlm IChlcnIgPCAwKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgcGFyYW1zX2luZm8gPSAoVmtW aWRlb0VuY29kZVNlc3Npb25QYXJhbWV0ZXJzR2V0SW5mb0tIUikgeworICAgICAgICAuc1R5cGUg PSBWS19TVFJVQ1RVUkVfVFlQRV9WSURFT19FTkNPREVfU0VTU0lPTl9QQVJBTUVURVJTX0dFVF9J TkZPX0tIUiwKKyAgICAgICAgLnZpZGVvU2Vzc2lvblBhcmFtZXRlcnMgPSBjdHgtPnNlc3Npb25f cGFyYW1zLAorICAgIH07CisgICAgcGFyYW1zX2ZlZWRiYWNrID0gKFZrVmlkZW9FbmNvZGVTZXNz aW9uUGFyYW1ldGVyc0ZlZWRiYWNrSW5mb0tIUikgeworICAgICAgICAuc1R5cGUgPSBWS19TVFJV Q1RVUkVfVFlQRV9WSURFT19FTkNPREVfU0VTU0lPTl9QQVJBTUVURVJTX0ZFRURCQUNLX0lORk9f S0hSLAorICAgIH07CisKKyAgICByZXQgPSB2ay0+R2V0RW5jb2RlZFZpZGVvU2Vzc2lvblBhcmFt ZXRlcnNLSFIocy0+aHdjdHgtPmFjdF9kZXYsICZwYXJhbXNfaW5mbywKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBhcmFtc19mZWVkYmFjaywKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRhdGFfc2l6 ZSwgZGF0YSk7CisgICAgaWYgKHJldCA9PSBWS19JTkNPTVBMRVRFIHx8CisgICAgICAgIChyZXQg PT0gVktfU1VDQ0VTUykgJiYgKGRhdGFfc2l6ZSA+IDApKSB7CisgICAgICAgIGRhdGEgPSBhdl9t YWxsb2N6KGRhdGFfc2l6ZSk7CisgICAgICAgIGlmICghZGF0YSkKKyAgICAgICAgICAgIHJldHVy biBBVkVSUk9SKEVOT01FTSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBB Vl9MT0dfRVJST1IsICJVbmFibGUgdG8gZ2V0IGZlZWRiYWNrIGZvciBBVjEgc2VxdWVuY2UgaGVh ZGVyID0gJSJTSVpFX1NQRUNJRklFUiJcbiIsCisgICAgICAgICAgICAgICBkYXRhX3NpemUpOwor ICAgICAgICByZXR1cm4gZXJyOworICAgIH0KKworICAgIHJldCA9IHZrLT5HZXRFbmNvZGVkVmlk ZW9TZXNzaW9uUGFyYW1ldGVyc0tIUihzLT5od2N0eC0+YWN0X2RldiwgJnBhcmFtc19pbmZvLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcGFyYW1z X2ZlZWRiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAmZGF0YV9zaXplLCBkYXRhKTsKKyAgICBpZiAocmV0ICE9IFZLX1NVQ0NFU1MpIHsKKyAg ICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJFcnJvciB3cml0aW5nIGZlZWRiYWNr IHVuaXRzXG4iKTsKKyAgICAgICAgcmV0dXJuIGVycjsKKyAgICB9CisKKyAgICBhdl9sb2coYXZj dHgsIEFWX0xPR19WRVJCT1NFLCAiRmVlZGJhY2sgdW5pdHMgd3JpdHRlbiwgb3ZlcnJpZGVzOiAl aVxuIiwKKyAgICAgICAgICAgcGFyYW1zX2ZlZWRiYWNrLmhhc092ZXJyaWRlcyk7CisKKyAgICBw YXJhbXNfZmVlZGJhY2suaGFzT3ZlcnJpZGVzID0gMTsKKworICAgIC8qIE5vIG5lZWQgdG8gc3lu YyBhbnkgb3ZlcnJpZGVzICovCisgICAgaWYgKCFwYXJhbXNfZmVlZGJhY2suaGFzT3ZlcnJpZGVz KQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8qIFBhcnNlIGJhY2sgdG5lIHVuaXRzIGFuZCBv dmVycmlkZSAqLworICAgIGVyciA9IHBhcnNlX2ZlZWRiYWNrX3VuaXRzKGF2Y3R4LCBkYXRhLCBk YXRhX3NpemUpOworICAgIGlmIChlcnIgPCAwKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAg LyogQ3JlYXRlIGZpbmFsIHNlc3Npb24gcGFyYW1ldGVycyAqLworICAgIGVyciA9IGNyZWF0ZV9z ZXNzaW9uX3BhcmFtcyhhdmN0eCk7CisgICAgaWYgKGVyciA8IDApCisgICAgICAgIHJldHVybiBl cnI7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2dWxrYW5fZW5jb2RlX2F2MV9h ZGRfb2J1KEFWQ29kZWNDb250ZXh0ICphdmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBDb2RlZEJpdHN0cmVhbUZyYWdtZW50ICphdSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB1aW50OF90IHR5cGUsIHZvaWQgKm9idV91bml0KQoreworICAg IGludCBlcnI7CisKKyAgICBlcnIgPSBmZl9jYnNfaW5zZXJ0X3VuaXRfY29udGVudChhdSwgLTEs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSwgb2J1X3VuaXQsIE5V TEwpOworICAgIGlmIChlcnIgPCAwKSB7CisgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VS Uk9SLCAiRmFpbGVkIHRvIGFkZCBPQlUgdW5pdDogIgorICAgICAgICAgICAgICAgInR5cGUgPSAl ZC5cbiIsIHR5cGUpOworICAgICAgICByZXR1cm4gZXJyOworICAgIH0KKworICAgIHJldHVybiBl cnI7Cit9CisKK3N0YXRpYyBpbnQgdnVsa2FuX2VuY29kZV9hdjFfd3JpdGVfb2J1KEFWQ29kZWND b250ZXh0ICphdmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVp bnQ4X3QgKmRhdGEsIHNpemVfdCAqZGF0YV9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBDb2RlZEJpdHN0cmVhbUZyYWdtZW50ICpvYnUpCit7CisgICAgVnVsa2Fu RW5jb2RlQVYxQ29udGV4dCAqZW5jID0gYXZjdHgtPnByaXZfZGF0YTsKKyAgICBpbnQgcmV0Owor CisgICAgcmV0ID0gZmZfY2JzX3dyaXRlX2ZyYWdtZW50X2RhdGEoZW5jLT5jYnMsIG9idSk7Cisg ICAgaWYgKHJldCA8IDApIHsKKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJG YWlsZWQgdG8gd3JpdGUgcGFja2VkIGhlYWRlci5cbiIpOworICAgICAgICByZXR1cm4gcmV0Owor ICAgIH0KKworICAgIG1lbWNweShkYXRhLCBvYnUtPmRhdGEsIG9idS0+ZGF0YV9zaXplKTsKKyAg ICAqZGF0YV9sZW4gPSBvYnUtPmRhdGFfc2l6ZTsKKworICAgIHJldHVybiAwOworfQorCitzdGF0 aWMgaW50IHdyaXRlX3NlcXVlbmNlX2hlYWRlcihBVkNvZGVjQ29udGV4dCAqYXZjdHgsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGRkhXQmFzZUVuY29kZVBpY3R1cmUgKmJhc2Vf cGljLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqZGF0YSwgc2l6 ZV90ICpkYXRhX2xlbikKK3sKKyAgICBpbnQgZXJyOworICAgIFZ1bGthbkVuY29kZUFWMUNvbnRl eHQgKmVuYyA9IGF2Y3R4LT5wcml2X2RhdGE7CisgICAgQ29kZWRCaXRzdHJlYW1GcmFnbWVudCAq b2J1ID0gJmVuYy0+Y3VycmVudF9hY2Nlc3NfdW5pdDsKKworICAgIGVyciA9IHZ1bGthbl9lbmNv ZGVfYXYxX2FkZF9vYnUoYXZjdHgsIG9idSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEFWMV9PQlVfU0VRVUVOQ0VfSEVBREVSLCAmZW5jLT5zZXFfaGRyX29idSk7CisgICAg aWYgKGVyciA8IDApCisgICAgICAgIGdvdG8gZmFpbDsKKworICAgIGVyciA9IHZ1bGthbl9lbmNv ZGVfYXYxX3dyaXRlX29idShhdmN0eCwgZGF0YSwgZGF0YV9sZW4sIG9idSk7CisKK2ZhaWw6Cisg ICAgZmZfY2JzX2ZyYWdtZW50X3Jlc2V0KG9idSk7CisgICAgcmV0dXJuIGVycjsKK30KKworc3Rh dGljIGludCB3cml0ZV9leHRyYV9oZWFkZXJzKEFWQ29kZWNDb250ZXh0ICphdmN0eCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBGRkhXQmFzZUVuY29kZVBpY3R1cmUgKmJhc2VfcGlj LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKmRhdGEsIHNpemVfdCAq ZGF0YV9sZW4pCit7CisgICAgaW50IGVycjsKKyAgICBWdWxrYW5FbmNvZGVBVjFDb250ZXh0ICpl bmMgPSBhdmN0eC0+cHJpdl9kYXRhOworICAgIFZ1bGthbkVuY29kZUFWMVBpY3R1cmUgICphcCA9 IGJhc2VfcGljLT5jb2RlY19wcml2OworICAgIENvZGVkQml0c3RyZWFtRnJhZ21lbnQgKm9idSA9 ICZlbmMtPmN1cnJlbnRfYWNjZXNzX3VuaXQ7CisKKyAgICBpZiAoYXAtPnVuaXRzX25lZWRlZCAm IEFWX0ZSQU1FX0RBVEFfTUFTVEVSSU5HX0RJU1BMQVlfTUVUQURBVEEpIHsKKyAgICAgICAgZXJy ID0gdnVsa2FuX2VuY29kZV9hdjFfYWRkX29idShhdmN0eCwgb2J1LAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEFWMV9PQlVfTUVUQURBVEEsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJmVuYy0+bWV0YV9tYXN0ZXJpbmdfb2J1KTsKKyAg ICAgICAgaWYgKGVyciA8IDApCisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAg aWYgKGFwLT51bml0c19uZWVkZWQgJiBVTklUX0NPTlRFTlRfTElHSFRfTEVWRUwpIHsKKyAgICAg ICAgZXJyID0gdnVsa2FuX2VuY29kZV9hdjFfYWRkX29idShhdmN0eCwgb2J1LAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFWMV9PQlVfTUVUQURBVEEsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmVuYy0+bWV0YV9jbGxfb2J1KTsKKyAg ICAgICAgaWYgKGVyciA8IDApCisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAg aWYgKGFwLT51bml0c19uZWVkZWQpIHsKKyAgICAgICAgZXJyID0gdnVsa2FuX2VuY29kZV9hdjFf d3JpdGVfb2J1KGF2Y3R4LCBkYXRhLCBkYXRhX2xlbiwgb2J1KTsKKyAgICAgICAgaWYgKGVyciA8 IDApCisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZXJyID0g MDsKKyAgICAgICAgKmRhdGFfbGVuID0gMDsKKyAgICB9CisKK2ZhaWw6CisgICAgZmZfY2JzX2Zy YWdtZW50X3Jlc2V0KG9idSk7CisgICAgcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCB3cml0 ZV9wYWRkaW5nKEFWQ29kZWNDb250ZXh0ICphdmN0eCwgdWludDMyX3QgcGFkZGluZywKKyAgICAg ICAgICAgICAgICAgICAgICAgICB1aW50OF90ICpkYXRhLCBzaXplX3QgKmRhdGFfbGVuKQorewor ICAgIGludCBlcnI7CisgICAgVnVsa2FuRW5jb2RlQVYxQ29udGV4dCAqZW5jID0gYXZjdHgtPnBy aXZfZGF0YTsKKyAgICBDb2RlZEJpdHN0cmVhbUZyYWdtZW50ICpvYnUgPSAmZW5jLT5jdXJyZW50 X2FjY2Vzc191bml0OworCisgICAgQVYxUmF3T0JVIHBhZGRpbmdfb2J1ID0geyAwIH07CisgICAg QVYxUmF3UGFkZGluZyAqcmF3X3BhZGRpbmcgPSAmcGFkZGluZ19vYnUub2J1LnBhZGRpbmc7CisK KyAgICBpZiAoIXBhZGRpbmcpCisgICAgICAgIHBhZGRpbmcgPSAxNjsKKworICAgIC8qIDIgYnl0 ZSBoZWFkZXIgKyAxIGJ5dGUgdHJhaWxpbmcgYml0cyAqLworICAgIHBhZGRpbmdfb2J1LmhlYWRl ci5vYnVfdHlwZSA9IEFWMV9PQlVfUEFERElORzsKKyAgICAqcmF3X3BhZGRpbmcgPSAoQVYxUmF3 UGFkZGluZykgeworICAgICAgICAucGF5bG9hZCA9IGVuYy0+cGFkZGluZ19wYXlsb2FkLAorICAg ICAgICAucGF5bG9hZF9zaXplID0gcGFkZGluZywKKyAgICB9OworCisgICAgZXJyID0gdnVsa2Fu X2VuY29kZV9hdjFfYWRkX29idShhdmN0eCwgb2J1LCBBVjFfT0JVX1BBRERJTkcsICZwYWRkaW5n X29idSk7CisgICAgaWYgKGVyciA8IDApCisgICAgICAgIGdvdG8gZmFpbDsKKworICAgIGVyciA9 IHZ1bGthbl9lbmNvZGVfYXYxX3dyaXRlX29idShhdmN0eCwgZGF0YSwgZGF0YV9sZW4sIG9idSk7 CitmYWlsOgorICAgIGZmX2Nic19mcmFnbWVudF9yZXNldChvYnUpOworICAgIHJldHVybiBlcnI7 Cit9CisKK3N0YXRpYyBjb25zdCBGRlZ1bGthbkNvZGVjIGVuY19jYiA9IHsKKyAgICAuZmxhZ3Mg PSBGRl9IV19GTEFHX0JfUElDVFVSRVMgfAorICAgICAgICAgICAgIEZGX0hXX0ZMQUdfQl9QSUNU VVJFX1JFRkVSRU5DRVMgfAorICAgICAgICAgICAgIFZLX0VOQ19GTEFHX05PX0RFTEFZIHwKKyAg ICAgICAgICAgICBGRl9IV19GTEFHX1NMSUNFX0NPTlRST0wsCisgICAgLnBpY3R1cmVfcHJpdl9k YXRhX3NpemUgPSBzaXplb2YoVnVsa2FuRW5jb2RlQVYxUGljdHVyZSksCisgICAgLmZpbGxlcl9o ZWFkZXJfc2l6ZSA9IDQsCisgICAgLmluaXRfcHJvZmlsZSA9IGluaXRfcHJvZmlsZSwKKyAgICAu aW5pdF9waWNfcmMgPSBpbml0X3BpY19yYywKKyAgICAuaW5pdF9waWNfcGFyYW1zID0gaW5pdF9w aWNfcGFyYW1zLAorICAgIC53cml0ZV9zZXF1ZW5jZV9oZWFkZXJzID0gd3JpdGVfc2VxdWVuY2Vf aGVhZGVyLAorICAgIC53cml0ZV9leHRyYV9oZWFkZXJzID0gd3JpdGVfZXh0cmFfaGVhZGVycywK KyAgICAud3JpdGVfZmlsbGVyID0gd3JpdGVfcGFkZGluZywKK307CisKK3N0YXRpYyBhdl9jb2xk IGludCB2dWxrYW5fZW5jb2RlX2F2MV9pbml0KEFWQ29kZWNDb250ZXh0ICphdmN0eCkKK3sKKyAg ICBpbnQgZXJyOworICAgIFZ1bGthbkVuY29kZUFWMUNvbnRleHQgKmVuYyA9IGF2Y3R4LT5wcml2 X2RhdGE7CisgICAgRkZWdWxrYW5FbmNvZGVDb250ZXh0ICpjdHggPSAmZW5jLT5jb21tb247Cisg ICAgRkZIV0Jhc2VFbmNvZGVDb250ZXh0ICpiYXNlX2N0eCA9ICZjdHgtPmJhc2U7CisgICAgaW50 IGZsYWdzOworCisgICAgaWYgKGF2Y3R4LT5wcm9maWxlID09IEFWX1BST0ZJTEVfVU5LTk9XTikK KyAgICAgICAgYXZjdHgtPnByb2ZpbGUgPSBlbmMtPmNvbW1vbi5vcHRzLnByb2ZpbGU7CisKKyAg ICBlbmMtPmNhcHMgPSAoVmtWaWRlb0VuY29kZUFWMUNhcGFiaWxpdGllc0tIUikgeworICAgICAg ICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9WSURFT19FTkNPREVfQVYxX0NBUEFCSUxJVElF U19LSFIsCisgICAgfTsKKworICAgIGVuYy0+cXVhbGl0eV9wcm9wcyA9IChWa1ZpZGVvRW5jb2Rl QVYxUXVhbGl0eUxldmVsUHJvcGVydGllc0tIUikgeworICAgICAgICAuc1R5cGUgPSBWS19TVFJV Q1RVUkVfVFlQRV9WSURFT19FTkNPREVfQVYxX1FVQUxJVFlfTEVWRUxfUFJPUEVSVElFU19LSFIs CisgICAgfTsKKworICAgIGVyciA9IGZmX3Z1bGthbl9lbmNvZGVfaW5pdChhdmN0eCwgJmVuYy0+ Y29tbW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZmZfdmtfZW5jX2F2MV9k ZXNjLCAmZW5jX2NiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZW5jLT5jYXBz LCAmZW5jLT5xdWFsaXR5X3Byb3BzKTsKKyAgICBpZiAoZXJyIDwgMCkKKyAgICAgICAgcmV0dXJu IGVycjsKKworICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX1ZFUkJPU0UsICJBVjEgZW5jb2RlciBj YXBhYmlsaXRpZXM6XG4iKTsKKyAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19WRVJCT1NFLCAiICAg IFN0YW5kYXJkIGNhcGFiaWxpdHkgZmxhZ3M6XG4iKTsKKyAgICBhdl9sb2coYXZjdHgsIEFWX0xP R19WRVJCT1NFLCAiICAgICAgICBwZXJfcmF0ZV9jb250cm9sX2dyb3VwX21pbl9tYXhfcV9pbmRl eDogJWlcbiIsCisgICAgICAgICAgICEhKGVuYy0+Y2Fwcy5mbGFncyAmIFZLX1ZJREVPX0VOQ09E RV9BVjFfQ0FQQUJJTElUWV9QRVJfUkFURV9DT05UUk9MX0dST1VQX01JTl9NQVhfUV9JTkRFWF9C SVRfS0hSKSk7CisgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfVkVSQk9TRSwgIiAgICAgICAgZ2Vu ZXJhdGVfb2J1X2V4dGVuc2lvbl9oZWFkZXI6ICVpXG4iLAorICAgICAgICAgICAhIShlbmMtPmNh cHMuZmxhZ3MgJiBWS19WSURFT19FTkNPREVfQVYxX0NBUEFCSUxJVFlfR0VORVJBVEVfT0JVX0VY VEVOU0lPTl9IRUFERVJfQklUX0tIUikpOworICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX1ZFUkJP U0UsICIgICAgICAgIHByaW1hcnlfcmVmZXJlbmNlX2NkZl9vbmx5OiAlaVxuIiwKKyAgICAgICAg ICAgISEoZW5jLT5jYXBzLmZsYWdzICYgVktfVklERU9fRU5DT0RFX0FWMV9DQVBBQklMSVRZX1BS SU1BUllfUkVGRVJFTkNFX0NERl9PTkxZX0JJVF9LSFIpKTsKKyAgICBhdl9sb2coYXZjdHgsIEFW X0xPR19WRVJCT1NFLCAiICAgICAgICBmcmFtZV9zaXplX292ZXJyaWRlOiAlaVxuIiwKKyAgICAg ICAgICAgISEoZW5jLT5jYXBzLmZsYWdzICYgVktfVklERU9fRU5DT0RFX0FWMV9DQVBBQklMSVRZ X0ZSQU1FX1NJWkVfT1ZFUlJJREVfQklUX0tIUikpOworICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9H X1ZFUkJPU0UsICIgICAgICAgIG1vdGlvbl92ZWN0b3Jfc2NhbGluZzogJWlcbiIsCisgICAgICAg ICAgICEhKGVuYy0+Y2Fwcy5mbGFncyAmIFZLX1ZJREVPX0VOQ09ERV9BVjFfQ0FQQUJJTElUWV9N T1RJT05fVkVDVE9SX1NDQUxJTkdfQklUX0tIUikpOworICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9H X1ZFUkJPU0UsICIgICAgQ2FwYWJpbGl0aWVzOlxuIik7CisgICAgYXZfbG9nKGF2Y3R4LCBBVl9M T0dfVkVSQk9TRSwgIiAgICAgICAgNjR4NjQgc3VwZXJibG9ja3M6ICVpXG4iLAorICAgICAgICAg ICAhIShlbmMtPmNhcHMuc3VwZXJibG9ja1NpemVzICYgVktfVklERU9fRU5DT0RFX0FWMV9TVVBF UkJMT0NLX1NJWkVfNjRfQklUX0tIUikpOworICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX1ZFUkJP U0UsICIgICAgICAgIDEyOHgxMjggc3VwZXJibG9ja3M6ICVpXG4iLAorICAgICAgICAgICAhIShl bmMtPmNhcHMuc3VwZXJibG9ja1NpemVzICYgVktfVklERU9fRU5DT0RFX0FWMV9TVVBFUkJMT0NL X1NJWkVfMTI4X0JJVF9LSFIpKTsKKyAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19WRVJCT1NFLCAi ICAgICAgICBtYXhTaW5nbGVSZWZlcmVuY2VDb3VudDogJWlcbiIsCisgICAgICAgICAgIGVuYy0+ Y2Fwcy5tYXhTaW5nbGVSZWZlcmVuY2VDb3VudCk7CisgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0df VkVSQk9TRSwgIiAgICAgICAgc2luZ2xlUmVmZXJlbmNlTmFtZU1hc2s6IDB4JXhcbiIsCisgICAg ICAgICAgIGVuYy0+Y2Fwcy5zaW5nbGVSZWZlcmVuY2VOYW1lTWFzayk7CisgICAgYXZfbG9nKGF2 Y3R4LCBBVl9MT0dfVkVSQk9TRSwgIiAgICAgICAgbWF4VW5pZGlyZWN0aW9uYWxDb21wb3VuZFJl ZmVyZW5jZUNvdW50OiAlaVxuIiwKKyAgICAgICAgICAgZW5jLT5jYXBzLm1heFVuaWRpcmVjdGlv bmFsQ29tcG91bmRSZWZlcmVuY2VDb3VudCk7CisgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfVkVS Qk9TRSwgIiAgICAgICAgbWF4VW5pZGlyZWN0aW9uYWxDb21wb3VuZEdyb3VwMVJlZmVyZW5jZUNv dW50OiAlaVxuIiwKKyAgICAgICAgICAgZW5jLT5jYXBzLm1heFVuaWRpcmVjdGlvbmFsQ29tcG91 bmRHcm91cDFSZWZlcmVuY2VDb3VudCk7CisgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfVkVSQk9T RSwgIiAgICAgICAgdW5pZGlyZWN0aW9uYWxDb21wb3VuZFJlZmVyZW5jZU5hbWVNYXNrOiAweCV4 XG4iLAorICAgICAgICAgICBlbmMtPmNhcHMudW5pZGlyZWN0aW9uYWxDb21wb3VuZFJlZmVyZW5j ZU5hbWVNYXNrKTsKKyAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19WRVJCT1NFLCAiICAgICAgICBt YXhCaWRpcmVjdGlvbmFsQ29tcG91bmRSZWZlcmVuY2VDb3VudDogJWlcbiIsCisgICAgICAgICAg IGVuYy0+Y2Fwcy5tYXhCaWRpcmVjdGlvbmFsQ29tcG91bmRSZWZlcmVuY2VDb3VudCk7CisgICAg YXZfbG9nKGF2Y3R4LCBBVl9MT0dfVkVSQk9TRSwgIiAgICAgICAgbWF4QmlkaXJlY3Rpb25hbENv bXBvdW5kR3JvdXAxUmVmZXJlbmNlQ291bnQ6ICVpXG4iLAorICAgICAgICAgICBlbmMtPmNhcHMu bWF4QmlkaXJlY3Rpb25hbENvbXBvdW5kR3JvdXAxUmVmZXJlbmNlQ291bnQpOworICAgIGF2X2xv ZyhhdmN0eCwgQVZfTE9HX1ZFUkJPU0UsICIgICAgICAgIG1heEJpZGlyZWN0aW9uYWxDb21wb3Vu ZEdyb3VwMlJlZmVyZW5jZUNvdW50OiAlaVxuIiwKKyAgICAgICAgICAgZW5jLT5jYXBzLm1heEJp ZGlyZWN0aW9uYWxDb21wb3VuZEdyb3VwMlJlZmVyZW5jZUNvdW50KTsKKyAgICBhdl9sb2coYXZj dHgsIEFWX0xPR19WRVJCT1NFLCAiICAgICAgICBiaWRpcmVjdGlvbmFsQ29tcG91bmRSZWZlcmVu Y2VOYW1lTWFzazogMHgleFxuIiwKKyAgICAgICAgICAgZW5jLT5jYXBzLmJpZGlyZWN0aW9uYWxD b21wb3VuZFJlZmVyZW5jZU5hbWVNYXNrKTsKKyAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19WRVJC T1NFLCAiICAgICAgICBtYXhUZW1wb3JhbExheWVyQ291bnQ6ICVpXG4iLAorICAgICAgICAgICBl bmMtPmNhcHMubWF4VGVtcG9yYWxMYXllckNvdW50KTsKKyAgICBhdl9sb2coYXZjdHgsIEFWX0xP R19WRVJCT1NFLCAiICAgICAgICBtYXhTcGF0aWFsTGF5ZXJDb3VudDogJWlcbiIsCisgICAgICAg ICAgIGVuYy0+Y2Fwcy5tYXhTcGF0aWFsTGF5ZXJDb3VudCk7CisgICAgYXZfbG9nKGF2Y3R4LCBB Vl9MT0dfVkVSQk9TRSwgIiAgICAgICAgbWF4T3BlcmF0aW5nUG9pbnRzOiAlaVxuIiwKKyAgICAg ICAgICAgZW5jLT5jYXBzLm1heE9wZXJhdGluZ1BvaW50cyk7CisgICAgYXZfbG9nKGF2Y3R4LCBB Vl9MT0dfVkVSQk9TRSwgIiAgICAgICAgbWluL21heCBRaW5kZXg6IFslaSwgJWldXG4iLAorICAg ICAgICAgICBlbmMtPmNhcHMubWluUUluZGV4LCBlbmMtPmNhcHMubWF4UUluZGV4KTsKKyAgICBh dl9sb2coYXZjdHgsIEFWX0xPR19WRVJCT1NFLCAiICAgICAgICBwcmVmZXJzR29wUmVtYWluaW5n RnJhbWVzOiAlaVxuIiwKKyAgICAgICAgICAgZW5jLT5jYXBzLnByZWZlcnNHb3BSZW1haW5pbmdG cmFtZXMpOworICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX1ZFUkJPU0UsICIgICAgICAgIHJlcXVp cmVzR29wUmVtYWluaW5nRnJhbWVzOiAlaVxuIiwKKyAgICAgICAgICAgZW5jLT5jYXBzLnJlcXVp cmVzR29wUmVtYWluaW5nRnJhbWVzKTsKKyAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19WRVJCT1NF LCAiICAgICAgICBtYXhMZXZlbDogJWlcbiIsCisgICAgICAgICAgIGVuYy0+Y2Fwcy5tYXhMZXZl bCk7CisgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfVkVSQk9TRSwgIiAgICAgICAgY29kZWRQaWN0 dXJlQWxpZ25tZW50OiAlaXglaVxuIiwKKyAgICAgICAgICAgZW5jLT5jYXBzLmNvZGVkUGljdHVy ZUFsaWdubWVudC53aWR0aCwgZW5jLT5jYXBzLmNvZGVkUGljdHVyZUFsaWdubWVudC5oZWlnaHQp OworICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX1ZFUkJPU0UsICIgICAgICAgIG1heFRpbGVzOiAl aXglaVxuIiwKKyAgICAgICAgICAgZW5jLT5jYXBzLm1heFRpbGVzLndpZHRoLCBlbmMtPmNhcHMu bWF4VGlsZXMuaGVpZ2h0KTsKKyAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19WRVJCT1NFLCAiICAg ICAgICBUaWxlIHNpemU6ICVpeCVpIHRvICVpeCVpXG4iLAorICAgICAgICAgICBlbmMtPmNhcHMu bWluVGlsZVNpemUud2lkdGgsIGVuYy0+Y2Fwcy5taW5UaWxlU2l6ZS5oZWlnaHQsCisgICAgICAg ICAgIGVuYy0+Y2Fwcy5tYXhUaWxlU2l6ZS53aWR0aCwgZW5jLT5jYXBzLm1heFRpbGVTaXplLmhl aWdodCk7CisKKyAgICBlcnIgPSBpbml0X2VuY19vcHRpb25zKGF2Y3R4KTsKKyAgICBpZiAoZXJy IDwgMCkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIGZsYWdzID0gY3R4LT5jb2RlYy0+Zmxh Z3M7CisgICAgZXJyID0gZmZfaHdfYmFzZV9pbml0X2dvcF9zdHJ1Y3R1cmUoYmFzZV9jdHgsIGF2 Y3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+Y2Fwcy5t YXhEcGJTbG90cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmMt PmNhcHMubWF4QmlkaXJlY3Rpb25hbENvbXBvdW5kUmVmZXJlbmNlQ291bnQsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MsIDApOworICAgIGlmIChlcnIgPCAw KQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgYmFzZV9jdHgtPm91dHB1dF9kZWxheSA9IGJh c2VfY3R4LT5iX3Blcl9wOworICAgIGJhc2VfY3R4LT5kZWNvZGVfZGVsYXkgPSBiYXNlX2N0eC0+ bWF4X2JfZGVwdGg7CisKKyAgICAvKiBDcmVhdGUgdW5pdHMgYW5kIHNlc3Npb24gcGFyYW1ldGVy cyAqLworICAgIGVyciA9IGluaXRfYmFzZV91bml0cyhhdmN0eCk7CisgICAgaWYgKGVyciA8IDAp CisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICAvKiBJbml0IENCUyAqLworICAgIGVyciA9IGZm X2Nic19pbml0KCZlbmMtPmNicywgQVZfQ09ERUNfSURfQVYxLCBhdmN0eCk7CisgICAgaWYgKGVy ciA8IDApCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICBpZiAoYXZjdHgtPmZsYWdzICYgQVZf Q09ERUNfRkxBR19HTE9CQUxfSEVBREVSKSB7CisgICAgICAgIHVpbnQ4X3QgZGF0YVs0MDk2XTsK KyAgICAgICAgc2l6ZV90IGRhdGFfbGVuID0gc2l6ZW9mKGRhdGEpOworCisgICAgICAgIGVyciA9 IHdyaXRlX3NlcXVlbmNlX2hlYWRlcihhdmN0eCwgTlVMTCwgZGF0YSwgJmRhdGFfbGVuKTsKKyAg ICAgICAgaWYgKGVyciA8IDApIHsKKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VS Uk9SLCAiRmFpbGVkIHRvIHdyaXRlIHNlcXVlbmNlIGhlYWRlciAiCisgICAgICAgICAgICAgICAg ICAgImZvciBleHRyYWRhdGE6ICVkLlxuIiwgZXJyKTsKKyAgICAgICAgICAgIHJldHVybiBlcnI7 CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhdmN0eC0+ZXh0cmFkYXRhX3NpemUgPSBk YXRhX2xlbjsKKyAgICAgICAgICAgIGF2Y3R4LT5leHRyYWRhdGEgPSBhdl9tYWxsb2N6KGF2Y3R4 LT5leHRyYWRhdGFfc2l6ZSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBBVl9JTlBVVF9CVUZGRVJfUEFERElOR19TSVpFKTsKKyAgICAgICAgICAgIGlmICghYXZj dHgtPmV4dHJhZGF0YSkgeworICAgICAgICAgICAgICAgIGVyciA9IEFWRVJST1IoRU5PTUVNKTsK KyAgICAgICAgICAgICAgICByZXR1cm4gZXJyOworICAgICAgICAgICAgfQorICAgICAgICAgICAg bWVtY3B5KGF2Y3R4LT5leHRyYWRhdGEsIGRhdGEsIGF2Y3R4LT5leHRyYWRhdGFfc2l6ZSk7Cisg ICAgICAgIH0KKyAgICB9CisKKyAgICBlbmMtPnBhZGRpbmdfcGF5bG9hZCA9IGF2X21hbGxvY3oo MipjdHgtPmNhcHMubWluQml0c3RyZWFtQnVmZmVyT2Zmc2V0QWxpZ25tZW50KTsKKyAgICBpZiAo IWVuYy0+cGFkZGluZ19wYXlsb2FkKQorICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOwor CisgICAgbWVtc2V0KGVuYy0+cGFkZGluZ19wYXlsb2FkLCAweGFhLCAyKmN0eC0+Y2Fwcy5taW5C aXRzdHJlYW1CdWZmZXJPZmZzZXRBbGlnbm1lbnQpOworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0 YXRpYyBhdl9jb2xkIGludCB2dWxrYW5fZW5jb2RlX2F2MV9jbG9zZShBVkNvZGVjQ29udGV4dCAq YXZjdHgpCit7CisgICAgVnVsa2FuRW5jb2RlQVYxQ29udGV4dCAqZW5jID0gYXZjdHgtPnByaXZf ZGF0YTsKKyAgICBhdl9mcmVlKGVuYy0+cGFkZGluZ19wYXlsb2FkKTsKKyAgICBmZl92dWxrYW5f ZW5jb2RlX3VuaW5pdCgmZW5jLT5jb21tb24pOworICAgIHJldHVybiAwOworfQorCisjZGVmaW5l IE9GRlNFVCh4KSBvZmZzZXRvZihWdWxrYW5FbmNvZGVBVjFDb250ZXh0LCB4KQorI2RlZmluZSBG TEFHUyAoQVZfT1BUX0ZMQUdfVklERU9fUEFSQU0gfCBBVl9PUFRfRkxBR19FTkNPRElOR19QQVJB TSkKK3N0YXRpYyBjb25zdCBBVk9wdGlvbiB2dWxrYW5fZW5jb2RlX2F2MV9vcHRpb25zW10gPSB7 CisgICAgSFdfQkFTRV9FTkNPREVfQ09NTU9OX09QVElPTlMsCisgICAgVlVMS0FOX0VOQ09ERV9D T01NT05fT1BUSU9OUywKKworICAgIHsgInByb2ZpbGUiLCAiU2V0IHByb2ZpbGUiLAorICAgICAg T0ZGU0VUKGNvbW1vbi5vcHRzLnByb2ZpbGUpLCBBVl9PUFRfVFlQRV9JTlQsCisgICAgICB7IC5p NjQgPSBBVl9QUk9GSUxFX1VOS05PV04gfSwgQVZfUFJPRklMRV9VTktOT1dOLCAweGZmZmYsIEZM QUdTLCAudW5pdCA9ICJwcm9maWxlIiB9LAorCisjZGVmaW5lIFBST0ZJTEUobmFtZSwgdmFsdWUp ICBuYW1lLCBOVUxMLCAwLCBBVl9PUFRfVFlQRV9DT05TVCwgXAorICAgICAgeyAuaTY0ID0gdmFs dWUgfSwgMCwgMCwgRkxBR1MsIC51bml0ID0gInByb2ZpbGUiCisgICAgeyBQUk9GSUxFKCJtYWlu IiwgICAgICAgICAgICAgICAgIEFWX1BST0ZJTEVfQVYxX01BSU4pIH0sCisgICAgeyBQUk9GSUxF KCJoaWdoIiwgICAgICAgICAgICAgICAgIEFWX1BST0ZJTEVfQVYxX0hJR0gpIH0sCisgICAgeyBQ Uk9GSUxFKCJwcm9mZXNzaW9uYWwiLCAgICAgICAgIEFWX1BST0ZJTEVfQVYxX1BST0ZFU1NJT05B TCkgfSwKKyN1bmRlZiBQUk9GSUxFCisKKyAgICB7ICJ0aWVyIiwgIlNldCB0aWVyIChzZXFfdGll cikiLAorICAgICAgT0ZGU0VUKGNvbW1vbi5vcHRzLnRpZXIpLCBBVl9PUFRfVFlQRV9JTlQsIHsg Lmk2NCA9IDAgfSwgMCwgMSwgRkxBR1MsIC51bml0ID0gInRpZXIiIH0sCisgICAgICAgIHsgIm1h aW4iLCBOVUxMLCAwLCBBVl9PUFRfVFlQRV9DT05TVCwgeyAuaTY0ID0gMCB9LCAwLCAwLCBGTEFH UywgLnVuaXQgPSAidGllciIgfSwKKyAgICAgICAgeyAiaGlnaCIsIE5VTEwsIDAsIEFWX09QVF9U WVBFX0NPTlNULCB7IC5pNjQgPSAxIH0sIDAsIDAsIEZMQUdTLCAudW5pdCA9ICJ0aWVyIiB9LAor CisgICAgeyAibGV2ZWwiLCAiU2V0IGxldmVsIChsZXZlbF9pZGMpIiwKKyAgICAgIE9GRlNFVChj b21tb24ub3B0cy5sZXZlbCksIEFWX09QVF9UWVBFX0lOVCwKKyAgICAgIHsgLmk2NCA9IEFWX0xF VkVMX1VOS05PV04gfSwgQVZfTEVWRUxfVU5LTk9XTiwgMHhmZiwgRkxBR1MsIC51bml0ID0gImxl dmVsIiB9LAorCisjZGVmaW5lIExFVkVMKG5hbWUsIHZhbHVlKSBuYW1lLCBOVUxMLCAwLCBBVl9P UFRfVFlQRV9DT05TVCwgXAorICAgICAgeyAuaTY0ID0gdmFsdWUgfSwgMCwgMCwgRkxBR1MsIC51 bml0ID0gImxldmVsIgorICAgIHsgTEVWRUwoIjIwIiwgMCkgfSwKKyAgICB7IExFVkVMKCIyMSIs IDEpIH0sCisgICAgeyBMRVZFTCgiMjIiLCAyKSB9LAorICAgIHsgTEVWRUwoIjIzIiwgMykgfSwK KyAgICB7IExFVkVMKCIzMCIsIDQpIH0sCisgICAgeyBMRVZFTCgiMzEiLCA1KSB9LAorICAgIHsg TEVWRUwoIjMyIiwgNikgfSwKKyAgICB7IExFVkVMKCIzMyIsIDcpIH0sCisgICAgeyBMRVZFTCgi NDAiLCA4KSB9LAorICAgIHsgTEVWRUwoIjQxIiwgOSkgfSwKKyAgICB7IExFVkVMKCI0MiIsIDEw KSB9LAorICAgIHsgTEVWRUwoIjQzIiwgMTEpIH0sCisgICAgeyBMRVZFTCgiNTAiLCAxMikgfSwK KyAgICB7IExFVkVMKCI1MSIsIDEzKSB9LAorICAgIHsgTEVWRUwoIjUyIiwgMTQpIH0sCisgICAg eyBMRVZFTCgiNTMiLCAxNSkgfSwKKyAgICB7IExFVkVMKCI2MCIsIDE2KSB9LAorICAgIHsgTEVW RUwoIjYxIiwgMTcpIH0sCisgICAgeyBMRVZFTCgiNjIiLCAxOCkgfSwKKyAgICB7IExFVkVMKCI2 MyIsIDE5KSB9LAorICAgIHsgTEVWRUwoIjcwIiwgMjApIH0sCisgICAgeyBMRVZFTCgiNzEiLCAy MSkgfSwKKyAgICB7IExFVkVMKCI3MiIsIDIyKSB9LAorICAgIHsgTEVWRUwoIjczIiwgMjMpIH0s CisjdW5kZWYgTEVWRUwKKworICAgIHsgInVuaXRzIiwgIlNldCB1bml0cyB0byBpbmNsdWRlIiwg T0ZGU0VUKHVuaXRfZWxlbXMpLCBBVl9PUFRfVFlQRV9GTEFHUywgeyAuaTY0ID0gVU5JVF9NQVNU RVJJTkdfRElTUExBWSB8IFVOSVRfQ09OVEVOVF9MSUdIVF9MRVZFTCB9LCAwLCBJTlRfTUFYLCBG TEFHUywgInVuaXRzIiB9LAorICAgICAgICB7ICJoZHIiLCAgICAgICAgIkluY2x1ZGUgSERSIG1l dGFkYXRhIGZvciBtYXN0ZXJpbmcgZGlzcGxheSBjb2xvdXIgdm9sdW1lIGFuZCBjb250ZW50IGxp Z2h0IGxldmVsIGluZm9ybWF0aW9uIiwgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsgLmk2NCA9IFVO SVRfTUFTVEVSSU5HX0RJU1BMQVkgfCBVTklUX0NPTlRFTlRfTElHSFRfTEVWRUwgfSwgSU5UX01J TiwgSU5UX01BWCwgRkxBR1MsICJ1bml0cyIgfSwKKworICAgIHsgTlVMTCB9LAorfTsKKworc3Rh dGljIGNvbnN0IEZGQ29kZWNEZWZhdWx0IHZ1bGthbl9lbmNvZGVfYXYxX2RlZmF1bHRzW10gPSB7 CisgICAgeyAiYiIsICAgICAgICAgICAgICAiMCIgICB9LAorICAgIHsgImJmIiwgICAgICAgICAg ICAgIjIiICAgfSwKKyAgICB7ICJnIiwgICAgICAgICAgICAgICIzMDAiIH0sCisgICAgeyAicW1p biIsICAgICAgICAgICAiMSIgICB9LAorICAgIHsgInFtYXgiLCAgICAgICAgICAgIjI1NSIgfSwK KyAgICB7ICJyZWZzIiwgICAgICAgICAgICIwIiAgIH0sCisgICAgeyBOVUxMIH0sCit9OworCitz dGF0aWMgY29uc3QgQVZDbGFzcyB2dWxrYW5fZW5jb2RlX2F2MV9jbGFzcyA9IHsKKyAgICAuY2xh c3NfbmFtZSA9ICJhdjFfdnVsa2FuIiwKKyAgICAuaXRlbV9uYW1lICA9IGF2X2RlZmF1bHRfaXRl bV9uYW1lLAorICAgIC5vcHRpb24gICAgID0gdnVsa2FuX2VuY29kZV9hdjFfb3B0aW9ucywKKyAg ICAudmVyc2lvbiAgICA9IExJQkFWVVRJTF9WRVJTSU9OX0lOVCwKK307CisKK2NvbnN0IEZGQ29k ZWMgZmZfYXYxX3Z1bGthbl9lbmNvZGVyID0geworICAgIC5wLm5hbWUgICAgICAgICA9ICJhdjFf dnVsa2FuIiwKKyAgICBDT0RFQ19MT05HX05BTUUoIkFWMSAoVnVsa2FuKSIpLAorICAgIC5wLnR5 cGUgICAgICAgICA9IEFWTUVESUFfVFlQRV9WSURFTywKKyAgICAucC5pZCAgICAgICAgICAgPSBB Vl9DT0RFQ19JRF9BVjEsCisgICAgLnByaXZfZGF0YV9zaXplID0gc2l6ZW9mKFZ1bGthbkVuY29k ZUFWMUNvbnRleHQpLAorICAgIC5pbml0ICAgICAgICAgICA9ICZ2dWxrYW5fZW5jb2RlX2F2MV9p bml0LAorICAgIEZGX0NPREVDX1JFQ0VJVkVfUEFDS0VUX0NCKCZmZl92dWxrYW5fZW5jb2RlX3Jl Y2VpdmVfcGFja2V0KSwKKyAgICAuY2xvc2UgICAgICAgICAgPSAmdnVsa2FuX2VuY29kZV9hdjFf Y2xvc2UsCisgICAgLnAucHJpdl9jbGFzcyAgID0gJnZ1bGthbl9lbmNvZGVfYXYxX2NsYXNzLAor ICAgIC5wLmNhcGFiaWxpdGllcyA9IEFWX0NPREVDX0NBUF9ERUxBWSB8CisgICAgICAgICAgICAg ICAgICAgICAgQVZfQ09ERUNfQ0FQX0hBUkRXQVJFIHwKKyAgICAgICAgICAgICAgICAgICAgICBB Vl9DT0RFQ19DQVBfRFIxIHwKKyAgICAgICAgICAgICAgICAgICAgICBBVl9DT0RFQ19DQVBfRU5D T0RFUl9GTFVTSCB8CisgICAgICAgICAgICAgICAgICAgICAgQVZfQ09ERUNfQ0FQX0VOQ09ERVJf UkVPUkRFUkVEX09QQVFVRSwKKyAgICAuY2Fwc19pbnRlcm5hbCAgPSBGRl9DT0RFQ19DQVBfSU5J VF9DTEVBTlVQLAorICAgIC5kZWZhdWx0cyAgICAgICA9IHZ1bGthbl9lbmNvZGVfYXYxX2RlZmF1 bHRzLAorICAgIENPREVDX1BJWEZNVFMoQVZfUElYX0ZNVF9WVUxLQU4pLAorICAgIC5od19jb25m aWdzICAgICA9IGZmX3Z1bGthbl9lbmNvZGVfaHdfY29uZmlncywKKyAgICAucC53cmFwcGVyX25h bWUgPSAidnVsa2FuIiwKK307Ci0tIAoyLjQ5LjEKCgpGcm9tIGJhNTVhM2VlYTA3ZDczMDBlZGI1 ZDhkZTAyYmEwODU2YTRhMGI2MjkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCkZyb206IEphbWFp a2ExIDxsdWthc3pjejE4QHdwLnBsPgpEYXRlOiBXZWQsIDMgU2VwIDIwMjUgMTM6MzM6MjYgKzAw MDAKU3ViamVjdDogW1BBVENIIDA3NS8xMThdIENoYW5naW5nIHZ1bGthbiBmaWxlIGRpcmVjdG9y eQoKLS0tCiBsaWJhdmNvZGVjL3Z1bGthbl9lbmNvZGVfaDI2NC5jIHwgMTY2OCAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgMTY2OCBkZWxldGlvbnMoLSkK IGRlbGV0ZSBtb2RlIDEwMDY0NCBsaWJhdmNvZGVjL3Z1bGthbl9lbmNvZGVfaDI2NC5jCgpkaWZm IC0tZ2l0IGEvbGliYXZjb2RlYy92dWxrYW5fZW5jb2RlX2gyNjQuYyBiL2xpYmF2Y29kZWMvdnVs a2FuX2VuY29kZV9oMjY0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0MmU5MTFm YjcuLjAwMDAwMDAwMDAKLS0tIGEvbGliYXZjb2RlYy92dWxrYW5fZW5jb2RlX2gyNjQuYworKysg L2Rldi9udWxsCkBAIC0xLDE2NjggKzAsMCBAQAotLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9m IEZGbXBlZy4KLSAqCi0gKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry aWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg TGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNl bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIEZGbXBl ZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICog YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu dHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig bW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1w ZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIElu Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMw MSBVU0EKLSAqLwotCi0jaW5jbHVkZSAibGliYXZ1dGlsL2ludGVybmFsLmgiCi0jaW5jbHVkZSAi bGliYXZ1dGlsL29wdC5oIgotI2luY2x1ZGUgImxpYmF2dXRpbC9tZW0uaCIKLQotI2luY2x1ZGUg ImNicy5oIgotI2luY2x1ZGUgImNic19oMjY0LmgiCi0jaW5jbHVkZSAiYXRzY19hNTMuaCIKLQot I2luY2x1ZGUgImgyNjRfbGV2ZWxzLmgiCi0jaW5jbHVkZSAiaDI2NDVkYXRhLmgiCi0jaW5jbHVk ZSAiY29kZWNfaW50ZXJuYWwuaCIKLSNpbmNsdWRlICJ2ZXJzaW9uLmgiCi0jaW5jbHVkZSAiaHdf YmFzZV9lbmNvZGVfaDI2NC5oIgotCi0jaW5jbHVkZSAidnVsa2FuX2VuY29kZS5oIgotCi1lbnVt IFVuaXRFbGVtcyB7Ci0gICAgVU5JVF9BVUQgICAgICAgICAgICA9IDEgPDwgMCwKLSAgICBVTklU X1NFSV9USU1JTkcgICAgID0gMSA8PCAxLAotICAgIFVOSVRfU0VJX0lERU5USUZJRVIgPSAxIDw8 IDIsCi0gICAgVU5JVF9TRUlfUkVDT1ZFUlkgICA9IDEgPDwgMywKLSAgICBVTklUX1NFSV9BNTNf Q0MgICAgID0gMSA8PCA0LAotfTsKLQotY29uc3QgRkZWdWxrYW5FbmNvZGVEZXNjcmlwdG9yIGZm X3ZrX2VuY19oMjY0X2Rlc2MgPSB7Ci0gICAgLmNvZGVjX2lkICAgICAgICAgPSBBVl9DT0RFQ19J RF9IMjY0LAotICAgIC5lbmNvZGVfZXh0ZW5zaW9uID0gRkZfVktfRVhUX1ZJREVPX0VOQ09ERV9I MjY0LAotICAgIC5lbmNvZGVfb3AgICAgICAgID0gVktfVklERU9fQ09ERUNfT1BFUkFUSU9OX0VO Q09ERV9IMjY0X0JJVF9LSFIsCi0gICAgLmV4dF9wcm9wcyA9IHsKLSAgICAgICAgLmV4dGVuc2lv bk5hbWUgPSBWS19TVERfVlVMS0FOX1ZJREVPX0NPREVDX0gyNjRfRU5DT0RFX0VYVEVOU0lPTl9O QU1FLAotICAgICAgICAuc3BlY1ZlcnNpb24gICA9IFZLX1NURF9WVUxLQU5fVklERU9fQ09ERUNf SDI2NF9FTkNPREVfU1BFQ19WRVJTSU9OLAotICAgIH0sCi19OwotCi0vKiBSYW5kb20gKHZlcnNp b24gNCkgSVNPIDExNTc4IFVVSUQuICovCi1zdGF0aWMgY29uc3QgdWludDhfdCB2dWxrYW5fZW5j b2RlX2gyNjRfc2VpX2lkZW50aWZpZXJfdXVpZFsxNl0gPSB7Ci0gICAgMHgwMywgMHhmZCwgMHhm MiwgMHgwYSwgMHg1ZCwgMHg0YywgMHgwNSwgMHg0OCwKLSAgICAweDIwLCAweDk4LCAweGNhLCAw eDZiLCAweDBjLCAweDk1LCAweDMwLCAweDFjLAotfTsKLQotdHlwZWRlZiBzdHJ1Y3QgVnVsa2Fu RW5jb2RlSDI2NFBpY3R1cmUgewotICAgIGludCBmcmFtZV9udW07Ci0gICAgaW50NjRfdCBsYXN0 X2lkcl9mcmFtZTsKLSAgICB1aW50MTZfdCBpZHJfcGljX2lkOwotICAgIGludCBwcmltYXJ5X3Bp Y190eXBlOwotICAgIGludCBzbGljZV90eXBlOwotICAgIGludCBwaWNfb3JkZXJfY250OwotCi0g ICAgZW51bSBVbml0RWxlbXMgdW5pdHNfbmVlZGVkOwotCi0gICAgVmtWaWRlb0VuY29kZUgyNjRS YXRlQ29udHJvbEluZm9LSFIgdmtyY19pbmZvOwotICAgIFZrVmlkZW9FbmNvZGVIMjY0UmF0ZUNv bnRyb2xMYXllckluZm9LSFIgdmtyY19sYXllcl9pbmZvOwotICAgIFZrVmlkZW9FbmNvZGVIMjY0 R29wUmVtYWluaW5nRnJhbWVJbmZvS0hSIHZrcmNfcmVtYWluaW5nOwotCi0gICAgU3RkVmlkZW9F bmNvZGVIMjY0V2VpZ2h0VGFibGUgc2xpY2Vfd3Q7Ci0gICAgU3RkVmlkZW9FbmNvZGVIMjY0U2xp Y2VIZWFkZXIgc2xpY2VfaGRyOwotICAgIFZrVmlkZW9FbmNvZGVIMjY0TmFsdVNsaWNlSW5mb0tI UiB2a3NsaWNlOwotCi0gICAgU3RkVmlkZW9FbmNvZGVIMjY0UGljdHVyZUluZm8gICBoMjY0cGlj X2luZm87Ci0gICAgVmtWaWRlb0VuY29kZUgyNjRQaWN0dXJlSW5mb0tIUiB2a2gyNjRwaWNfaW5m bzsKLQotICAgIFN0ZFZpZGVvRW5jb2RlSDI2NFJlZmVyZW5jZUluZm8gaDI2NGRwYl9pbmZvOwot ICAgIFZrVmlkZW9FbmNvZGVIMjY0RHBiU2xvdEluZm9LSFIgdmtoMjY0ZHBiX2luZm87Ci0KLSAg ICBTdGRWaWRlb0VuY29kZUgyNjRSZWZMaXN0TW9kRW50cnkgbW9kc1tNQVhfUkVGRVJFTkNFX0xJ U1RfTlVNXVtIMjY0X01BWF9SUExNX0NPVU5UXTsKLSAgICBTdGRWaWRlb0VuY29kZUgyNjRSZWZQ aWNNYXJraW5nRW50cnkgbW1jb1tIMjY0X01BWF9SUExNX0NPVU5UXTsKLSAgICBTdGRWaWRlb0Vu Y29kZUgyNjRSZWZlcmVuY2VMaXN0c0luZm8gcmVmX2xpc3RfaW5mbzsKLX0gVnVsa2FuRW5jb2Rl SDI2NFBpY3R1cmU7Ci0KLXR5cGVkZWYgc3RydWN0IFZ1bGthbkVuY29kZUgyNjRDb250ZXh0IHsK LSAgICBGRlZ1bGthbkVuY29kZUNvbnRleHQgY29tbW9uOwotCi0gICAgRkZIV0Jhc2VFbmNvZGVI MjY0IHVuaXRzOwotICAgIEZGSFdCYXNlRW5jb2RlSDI2NE9wdHMgdW5pdF9vcHRzOwotCi0gICAg ZW51bSBVbml0RWxlbXMgdW5pdF9lbGVtczsKLQotICAgIHVpbnQ4X3QgZml4ZWRfcXBfcDsKLSAg ICB1aW50OF90IGZpeGVkX3FwX2I7Ci0KLSAgICBWa1ZpZGVvRW5jb2RlSDI2NFByb2ZpbGVJbmZv S0hSIHByb2ZpbGU7Ci0KLSAgICBWa1ZpZGVvRW5jb2RlSDI2NENhcGFiaWxpdGllc0tIUiBjYXBz OwotICAgIFZrVmlkZW9FbmNvZGVIMjY0UXVhbGl0eUxldmVsUHJvcGVydGllc0tIUiBxdWFsaXR5 X3Byb3BzOwotCi0gICAgQ29kZWRCaXRzdHJlYW1Db250ZXh0ICpjYnM7Ci0gICAgQ29kZWRCaXRz dHJlYW1GcmFnbWVudCBjdXJyZW50X2FjY2Vzc191bml0OwotCi0gICAgSDI2NFJhd0FVRCAgICAg ICAgICAgICAgICAgIHJhd19hdWQ7Ci0KLSAgICBTRUlSYXdVc2VyRGF0YVVucmVnaXN0ZXJlZCAg c2VpX2lkZW50aWZpZXI7Ci0gICAgSDI2NFJhd1NFSVBpY1RpbWluZyAgICAgICAgIHNlaV9waWNf dGltaW5nOwotICAgIEgyNjRSYXdTRUlSZWNvdmVyeVBvaW50ICAgICBzZWlfcmVjb3ZlcnlfcG9p bnQ7Ci0gICAgU0VJUmF3VXNlckRhdGFSZWdpc3RlcmVkICAgIHNlaV9hNTNjYzsKLSAgICB2b2lk ICAgICAgICAgICAgICAgICAgICAgICAqc2VpX2E1M2NjX2RhdGE7Ci0gICAgY2hhciAgICAgICAg ICAgICAgICAgICAgICAgKnNlaV9pZGVudGlmaWVyX3N0cmluZzsKLX0gVnVsa2FuRW5jb2RlSDI2 NENvbnRleHQ7Ci0KLXN0YXRpYyBpbnQgaW5pdF9waWNfcmMoQVZDb2RlY0NvbnRleHQgKmF2Y3R4 LCBGRkhXQmFzZUVuY29kZVBpY3R1cmUgKnBpYywKLSAgICAgICAgICAgICAgICAgICAgICAgVmtW aWRlb0VuY29kZVJhdGVDb250cm9sSW5mb0tIUiAqcmNfaW5mbywKLSAgICAgICAgICAgICAgICAg ICAgICAgVmtWaWRlb0VuY29kZVJhdGVDb250cm9sTGF5ZXJJbmZvS0hSICpyY19sYXllcikKLXsK LSAgICBWdWxrYW5FbmNvZGVIMjY0Q29udGV4dCAqZW5jID0gYXZjdHgtPnByaXZfZGF0YTsKLSAg ICBGRlZ1bGthbkVuY29kZUNvbnRleHQgICAqY3R4ID0gJmVuYy0+Y29tbW9uOwotICAgIFZ1bGth bkVuY29kZUgyNjRQaWN0dXJlICAqaHAgPSBwaWMtPmNvZGVjX3ByaXY7Ci0KLSAgICBocC0+dmty Y19pbmZvID0gKFZrVmlkZW9FbmNvZGVIMjY0UmF0ZUNvbnRyb2xJbmZvS0hSKSB7Ci0gICAgICAg IC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX1ZJREVPX0VOQ09ERV9IMjY0X1JBVEVfQ09OVFJP TF9JTkZPX0tIUiwKLSAgICAgICAgLmZsYWdzID0gVktfVklERU9fRU5DT0RFX0gyNjRfUkFURV9D T05UUk9MX1JFRkVSRU5DRV9QQVRURVJOX0ZMQVRfQklUX0tIUiB8Ci0gICAgICAgICAgICAgICAg IFZLX1ZJREVPX0VOQ09ERV9IMjY0X1JBVEVfQ09OVFJPTF9SRUdVTEFSX0dPUF9CSVRfS0hSLAot ICAgICAgICAuaWRyUGVyaW9kID0gY3R4LT5iYXNlLmdvcF9zaXplLAotICAgICAgICAuZ29wRnJh bWVDb3VudCA9IGN0eC0+YmFzZS5nb3Bfc2l6ZSwKLSAgICAgICAgLmNvbnNlY3V0aXZlQkZyYW1l Q291bnQgPSBGRk1BWChjdHgtPmJhc2UuYl9wZXJfcCAtIDEsIDApLAotICAgICAgICAudGVtcG9y YWxMYXllckNvdW50ID0gMCwKLSAgICB9OwotICAgIHJjX2luZm8tPnBOZXh0ID0gJmhwLT52a3Jj X2luZm87Ci0KLSAgICBpZiAocmNfaW5mby0+cmF0ZUNvbnRyb2xNb2RlID4gVktfVklERU9fRU5D T0RFX1JBVEVfQ09OVFJPTF9NT0RFX0RJU0FCTEVEX0JJVF9LSFIpIHsKLSAgICAgICAgcmNfaW5m by0+dmlydHVhbEJ1ZmZlclNpemVJbk1zID0gKGVuYy0+dW5pdF9vcHRzLmhyZF9idWZmZXJfc2l6 ZSAqIDEwMDBMTCkgLyBhdmN0eC0+Yml0X3JhdGU7Ci0gICAgICAgIHJjX2luZm8tPmluaXRpYWxW aXJ0dWFsQnVmZmVyU2l6ZUluTXMgPSAoZW5jLT51bml0X29wdHMuaW5pdGlhbF9idWZmZXJfZnVs bG5lc3MgKiAxMDAwTEwpIC8gYXZjdHgtPmJpdF9yYXRlOwotCi0gICAgICAgIGhwLT52a3JjX2xh eWVyX2luZm8gPSAoVmtWaWRlb0VuY29kZUgyNjRSYXRlQ29udHJvbExheWVySW5mb0tIUikgewot ICAgICAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfVklERU9fRU5DT0RFX0gyNjRf UkFURV9DT05UUk9MX0xBWUVSX0lORk9fS0hSLAotCi0gICAgICAgICAgICAudXNlTWluUXAgID0g YXZjdHgtPnFtaW4gPiAwLAotICAgICAgICAgICAgLm1pblFwLnFwSSA9IGF2Y3R4LT5xbWluID4g MCA/IGF2Y3R4LT5xbWluIDogMCwKLSAgICAgICAgICAgIC5taW5RcC5xcFAgPSBhdmN0eC0+cW1p biA+IDAgPyBhdmN0eC0+cW1pbiA6IDAsCi0gICAgICAgICAgICAubWluUXAucXBCID0gYXZjdHgt PnFtaW4gPiAwID8gYXZjdHgtPnFtaW4gOiAwLAotCi0gICAgICAgICAgICAudXNlTWF4UXAgID0g YXZjdHgtPnFtYXggPiAwLAotICAgICAgICAgICAgLm1heFFwLnFwSSA9IGF2Y3R4LT5xbWF4ID4g MCA/IGF2Y3R4LT5xbWF4IDogMCwKLSAgICAgICAgICAgIC5tYXhRcC5xcFAgPSBhdmN0eC0+cW1h eCA+IDAgPyBhdmN0eC0+cW1heCA6IDAsCi0gICAgICAgICAgICAubWF4UXAucXBCID0gYXZjdHgt PnFtYXggPiAwID8gYXZjdHgtPnFtYXggOiAwLAotCi0gICAgICAgICAgICAudXNlTWF4RnJhbWVT aXplID0gMCwKLSAgICAgICAgfTsKLSAgICAgICAgcmNfbGF5ZXItPnBOZXh0ID0gJmhwLT52a3Jj X2xheWVyX2luZm87Ci0gICAgICAgIGhwLT52a3JjX2luZm8udGVtcG9yYWxMYXllckNvdW50ID0g MTsKLSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB2a19lbmNfaDI2NF91 cGRhdGVfcGljX2luZm8oQVZDb2RlY0NvbnRleHQgKmF2Y3R4LAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgRkZIV0Jhc2VFbmNvZGVQaWN0dXJlICpwaWMpCi17Ci0gICAg VnVsa2FuRW5jb2RlSDI2NENvbnRleHQgICAqZW5jID0gYXZjdHgtPnByaXZfZGF0YTsKLSAgICBG RlZ1bGthbkVuY29kZUNvbnRleHQgICAgICpjdHggPSAmZW5jLT5jb21tb247Ci0gICAgVnVsa2Fu RW5jb2RlSDI2NFBpY3R1cmUgICAgKmhwID0gcGljLT5jb2RlY19wcml2OwotICAgIEZGSFdCYXNl RW5jb2RlUGljdHVyZSAgICAqcHJldiA9IHBpYy0+cHJldjsKLSAgICBWdWxrYW5FbmNvZGVIMjY0 UGljdHVyZSAqaHByZXYgPSBwcmV2ID8gcHJldi0+Y29kZWNfcHJpdiA6IE5VTEw7Ci0KLSAgICBp ZiAocGljLT50eXBlID09IEZGX0hXX1BJQ1RVUkVfVFlQRV9JRFIpIHsKLSAgICAgICAgYXZfYXNz ZXJ0MChwaWMtPmRpc3BsYXlfb3JkZXIgPT0gcGljLT5lbmNvZGVfb3JkZXIpOwotCi0gICAgICAg IGhwLT5mcmFtZV9udW0gICAgICA9IDA7Ci0gICAgICAgIGhwLT5sYXN0X2lkcl9mcmFtZSA9IHBp Yy0+ZGlzcGxheV9vcmRlcjsKLSAgICAgICAgaHAtPmlkcl9waWNfaWQgICAgID0gaHByZXYgPyBo cHJldi0+aWRyX3BpY19pZCArIDEgOiAwOwotCi0gICAgICAgIGhwLT5wcmltYXJ5X3BpY190eXBl ID0gMDsKLSAgICAgICAgaHAtPnNsaWNlX3R5cGUgICAgICAgPSBTVERfVklERU9fSDI2NF9TTElD RV9UWVBFX0k7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgYXZfYXNzZXJ0MChwcmV2KTsKLQotICAg ICAgICBocC0+ZnJhbWVfbnVtID0gaHByZXYtPmZyYW1lX251bSArIHByZXYtPmlzX3JlZmVyZW5j ZTsKLQotICAgICAgICBocC0+bGFzdF9pZHJfZnJhbWUgPSBocHJldi0+bGFzdF9pZHJfZnJhbWU7 Ci0gICAgICAgIGhwLT5pZHJfcGljX2lkICAgICA9IGhwcmV2LT5pZHJfcGljX2lkOwotCi0gICAg ICAgIGlmIChwaWMtPnR5cGUgPT0gRkZfSFdfUElDVFVSRV9UWVBFX0kpIHsKLSAgICAgICAgICAg IGhwLT5zbGljZV90eXBlICAgICAgID0gU1REX1ZJREVPX0gyNjRfU0xJQ0VfVFlQRV9JOwotICAg ICAgICAgICAgaHAtPnByaW1hcnlfcGljX3R5cGUgPSAwOwotICAgICAgICB9IGVsc2UgaWYgKHBp Yy0+dHlwZSA9PSBGRl9IV19QSUNUVVJFX1RZUEVfUCkgewotICAgICAgICAgICAgaHAtPnNsaWNl X3R5cGUgICAgICAgPSBTVERfVklERU9fSDI2NF9TTElDRV9UWVBFX1A7Ci0gICAgICAgICAgICBo cC0+cHJpbWFyeV9waWNfdHlwZSA9IDE7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBo cC0+c2xpY2VfdHlwZSAgICAgICA9IFNURF9WSURFT19IMjY0X1NMSUNFX1RZUEVfQjsKLSAgICAg ICAgICAgIGhwLT5wcmltYXJ5X3BpY190eXBlID0gMjsKLSAgICAgICAgfQotICAgIH0KLQotICAg IGhwLT5waWNfb3JkZXJfY250ID0gcGljLT5kaXNwbGF5X29yZGVyIC0gaHAtPmxhc3RfaWRyX2Zy YW1lOwotICAgIGlmIChlbmMtPnVuaXRzLnJhd19zcHMucGljX29yZGVyX2NudF90eXBlID09IDIp Ci0gICAgICAgIGhwLT5waWNfb3JkZXJfY250ICo9IDI7Ci0KLSAgICBocC0+dW5pdHNfbmVlZGVk ID0gMDsKLQotICAgIGlmIChlbmMtPnVuaXRfZWxlbXMgJiBVTklUX1NFSV9JREVOVElGSUVSICYm IHBpYy0+ZW5jb2RlX29yZGVyID09IDApCi0gICAgICAgIGhwLT51bml0c19uZWVkZWQgfD0gVU5J VF9TRUlfSURFTlRJRklFUjsKLQotICAgIGlmIChlbmMtPnVuaXRfZWxlbXMgJiBVTklUX1NFSV9U SU1JTkcpIHsKLSAgICAgICAgZW5jLT5zZWlfcGljX3RpbWluZyA9IChIMjY0UmF3U0VJUGljVGlt aW5nKSB7Ci0gICAgICAgICAgICAuY3BiX3JlbW92YWxfZGVsYXkgPSAyICogKHBpYy0+ZW5jb2Rl X29yZGVyIC0gaHAtPmxhc3RfaWRyX2ZyYW1lKSwKLSAgICAgICAgICAgIC5kcGJfb3V0cHV0X2Rl bGF5ICA9IDIgKiAocGljLT5kaXNwbGF5X29yZGVyIC0gcGljLT5lbmNvZGVfb3JkZXIgKyBjdHgt PmJhc2UubWF4X2JfZGVwdGgpLAotICAgICAgICB9OwotCi0gICAgICAgIGhwLT51bml0c19uZWVk ZWQgfD0gVU5JVF9TRUlfVElNSU5HOwotICAgIH0KLQotICAgIGlmIChlbmMtPnVuaXRfZWxlbXMg JiBVTklUX1NFSV9SRUNPVkVSWSAmJiBwaWMtPnR5cGUgPT0gRkZfSFdfUElDVFVSRV9UWVBFX0kp IHsKLSAgICAgICAgZW5jLT5zZWlfcmVjb3ZlcnlfcG9pbnQgPSAoSDI2NFJhd1NFSVJlY292ZXJ5 UG9pbnQpIHsKLSAgICAgICAgICAgIC5yZWNvdmVyeV9mcmFtZV9jbnQgPSAwLAotICAgICAgICAg ICAgLmV4YWN0X21hdGNoX2ZsYWcgICA9IDEsCi0gICAgICAgICAgICAuYnJva2VuX2xpbmtfZmxh ZyAgID0gY3R4LT5iYXNlLmJfcGVyX3AgPiAwLAotICAgICAgICB9OwotCi0gICAgICAgIGhwLT51 bml0c19uZWVkZWQgfD0gVU5JVF9TRUlfUkVDT1ZFUlk7Ci0gICAgfQotCi0gICAgaWYgKGVuYy0+ dW5pdF9lbGVtcyAmIFVOSVRfU0VJX0E1M19DQykgewotICAgICAgICBpbnQgZXJyOwotICAgICAg ICBzaXplX3Qgc2VpX2E1M2NjX2xlbjsKLSAgICAgICAgYXZfZnJlZXAoJmVuYy0+c2VpX2E1M2Nj X2RhdGEpOwotICAgICAgICBlcnIgPSBmZl9hbGxvY19hNTNfc2VpKHBpYy0+aW5wdXRfaW1hZ2Us IDAsICZlbmMtPnNlaV9hNTNjY19kYXRhLCAmc2VpX2E1M2NjX2xlbik7Ci0gICAgICAgIGlmIChl cnIgPCAwKQotICAgICAgICAgICAgcmV0dXJuIGVycjsKLSAgICAgICAgaWYgKGVuYy0+c2VpX2E1 M2NjX2RhdGEgIT0gTlVMTCkgewotICAgICAgICAgICAgZW5jLT5zZWlfYTUzY2MuaXR1X3RfdDM1 X2NvdW50cnlfY29kZSA9IDE4MTsKLSAgICAgICAgICAgIGVuYy0+c2VpX2E1M2NjLmRhdGEgPSAo dWludDhfdCAqKWVuYy0+c2VpX2E1M2NjX2RhdGEgKyAxOwotICAgICAgICAgICAgZW5jLT5zZWlf YTUzY2MuZGF0YV9sZW5ndGggPSBzZWlfYTUzY2NfbGVuIC0gMTsKLQotICAgICAgICAgICAgaHAt PnVuaXRzX25lZWRlZCB8PSBVTklUX1NFSV9BNTNfQ0M7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg ICByZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgc2V0dXBfc2xpY2VzKEFWQ29kZWNDb250ZXh0 ICphdmN0eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBGRkhXQmFzZUVuY29kZVBpY3R1cmUg KnBpYykKLXsKLSAgICBWdWxrYW5FbmNvZGVIMjY0Q29udGV4dCAqZW5jID0gYXZjdHgtPnByaXZf ZGF0YTsKLSAgICBWdWxrYW5FbmNvZGVIMjY0UGljdHVyZSAqaHAgPSBwaWMtPmNvZGVjX3ByaXY7 Ci0KLSAgICBocC0+c2xpY2Vfd3QgPSAoU3RkVmlkZW9FbmNvZGVIMjY0V2VpZ2h0VGFibGUpIHsK LSAgICAgICAgLmZsYWdzID0gKFN0ZFZpZGVvRW5jb2RlSDI2NFdlaWdodFRhYmxlRmxhZ3MpIHsK LSAgICAgICAgICAgIC5sdW1hX3dlaWdodF9sMF9mbGFnID0gMCwKLSAgICAgICAgICAgIC5jaHJv bWFfd2VpZ2h0X2wwX2ZsYWcgPSAwLAotICAgICAgICAgICAgLmx1bWFfd2VpZ2h0X2wxX2ZsYWcg PSAwLAotICAgICAgICAgICAgLmNocm9tYV93ZWlnaHRfbDFfZmxhZyA9IDAsCi0gICAgICAgIH0s Ci0gICAgICAgIC5sdW1hX2xvZzJfd2VpZ2h0X2Rlbm9tID0gMCwKLSAgICAgICAgLmNocm9tYV9s b2cyX3dlaWdodF9kZW5vbSA9IDAsCi0gICAgICAgIC5sdW1hX3dlaWdodF9sMCA9IHsgMCB9LAot ICAgICAgICAubHVtYV9vZmZzZXRfbDAgPSB7IDAgfSwKLSAgICAgICAgLmNocm9tYV93ZWlnaHRf bDAgPSB7IHsgMCB9IH0sCi0gICAgICAgIC5jaHJvbWFfb2Zmc2V0X2wwID0geyB7IDAgfSB9LAot ICAgICAgICAubHVtYV93ZWlnaHRfbDEgPSB7IDAgfSwKLSAgICAgICAgLmx1bWFfb2Zmc2V0X2wx ID0geyAwIH0sCi0gICAgICAgIC5jaHJvbWFfd2VpZ2h0X2wxID0geyB7IDAgfSB9LAotICAgICAg ICAuY2hyb21hX29mZnNldF9sMSA9IHsgeyAwIH0gfSwKLSAgICB9OwotCi0gICAgaHAtPnNsaWNl X2hkciA9IChTdGRWaWRlb0VuY29kZUgyNjRTbGljZUhlYWRlcikgewotICAgICAgICAuZmxhZ3Mg PSAoU3RkVmlkZW9FbmNvZGVIMjY0U2xpY2VIZWFkZXJGbGFncykgewotICAgICAgICAgICAgLmRp cmVjdF9zcGF0aWFsX212X3ByZWRfZmxhZyA9IDEsCi0gICAgICAgICAgICAvKiBUaGUgdmtfc2Ft cGxlcyBjb2RlIGRvZXMgdGhpcyAqLwotICAgICAgICAgICAgLm51bV9yZWZfaWR4X2FjdGl2ZV9v dmVycmlkZV9mbGFnID0KLSAgICAgICAgICAgICAgICAoKGVuYy0+dW5pdHMucmF3X3Bwcy5udW1f cmVmX2lkeF9sMF9kZWZhdWx0X2FjdGl2ZV9taW51czEpICYmCi0gICAgICAgICAgICAgICAgIChw aWMtPnR5cGUgPT0gRkZfSFdfUElDVFVSRV9UWVBFX0IpKSA/IDEgOiAwLAotICAgICAgICB9LAot ICAgICAgICAuZmlyc3RfbWJfaW5fc2xpY2UgPSAxLAotICAgICAgICAuc2xpY2VfdHlwZSA9IGhw LT5zbGljZV90eXBlLAotICAgICAgICAuc2xpY2VfYWxwaGFfYzBfb2Zmc2V0X2RpdjIgPSAwLAot ICAgICAgICAuc2xpY2VfYmV0YV9vZmZzZXRfZGl2MiA9IDAsCi0gICAgICAgIC5zbGljZV9xcF9k ZWx0YSA9IDAsIC8qIEZpbGxlZCBpbiBiZWxvdyAqLwotICAgICAgICAvKiBSZXNlcnZlZCAqLwot ICAgICAgICAuY2FiYWNfaW5pdF9pZGMgPSAwLAotICAgICAgICAuZGlzYWJsZV9kZWJsb2NraW5n X2ZpbHRlcl9pZGMgPSAwLAotICAgICAgICAucFdlaWdodFRhYmxlID0gTlVMTCwgLy8gJmhwLT5z bGljZV93dCwKLSAgICB9OwotCi0gICAgaHAtPnZrc2xpY2UgPSAoVmtWaWRlb0VuY29kZUgyNjRO YWx1U2xpY2VJbmZvS0hSKSB7Ci0gICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX1ZJ REVPX0VOQ09ERV9IMjY0X05BTFVfU0xJQ0VfSU5GT19LSFIsCi0gICAgICAgIC5wTmV4dCA9IE5V TEwsCi0gICAgICAgIC5jb25zdGFudFFwID0gcGljLT50eXBlID09IEZGX0hXX1BJQ1RVUkVfVFlQ RV9CID8gZW5jLT5maXhlZF9xcF9iIDoKLSAgICAgICAgICAgICAgICAgICAgICBwaWMtPnR5cGUg PT0gRkZfSFdfUElDVFVSRV9UWVBFX1AgPyBlbmMtPmZpeGVkX3FwX3AgOgotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuYy0+dW5pdF9v cHRzLmZpeGVkX3FwX2lkciwKLSAgICAgICAgLnBTdGRTbGljZUhlYWRlciA9ICZocC0+c2xpY2Vf aGRyLAotICAgIH07Ci0KLSAgICBpZiAoZW5jLT5jb21tb24ub3B0cy5yY19tb2RlICE9IFZLX1ZJ REVPX0VOQ09ERV9SQVRFX0NPTlRST0xfTU9ERV9ESVNBQkxFRF9CSVRfS0hSKQotICAgICAgICBo cC0+dmtzbGljZS5jb25zdGFudFFwID0gMDsKLQotICAgIGhwLT5zbGljZV9oZHIuc2xpY2VfcXBf ZGVsdGEgPSBocC0+dmtzbGljZS5jb25zdGFudFFwIC0KLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKGVuYy0+dW5pdHMucmF3X3Bwcy5waWNfaW5pdF9xcF9taW51czI2ICsgMjYp OwotCi0gICAgaHAtPnZraDI2NHBpY19pbmZvLnBOYWx1U2xpY2VFbnRyaWVzID0gJmhwLT52a3Ns aWNlOwotICAgIGhwLT52a2gyNjRwaWNfaW5mby5uYWx1U2xpY2VFbnRyeUNvdW50ID0gMTsKLX0K LQotc3RhdGljIHZvaWQgdmtfZW5jX2gyNjRfZGVmYXVsdF9yZWZfcGljX2xpc3QoQVZDb2RlY0Nv bnRleHQgKmF2Y3R4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgRkZIV0Jhc2VFbmNvZGVQaWN0dXJlICpwaWMsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBGRkhXQmFzZUVuY29kZVBpY3R1cmUgKipycGwwLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkZIV0Jhc2VFbmNvZGVQaWN0 dXJlICoqcnBsMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGludCAqcnBsX3NpemUpCi17Ci0gICAgRkZIV0Jhc2VFbmNvZGVQaWN0dXJlICpwcmV2OwotICAg IFZ1bGthbkVuY29kZUgyNjRQaWN0dXJlICpocCwgKmhuLCAqaGM7Ci0gICAgaW50IGksIGosIG4g PSAwOwotCi0gICAgcHJldiA9IHBpYy0+cHJldjsKLSAgICBhdl9hc3NlcnQwKHByZXYpOwotICAg IGhwID0gcGljLT5jb2RlY19wcml2OwotCi0gICAgZm9yIChpID0gMDsgaSA8IHBpYy0+cHJldi0+ bmJfZHBiX3BpY3M7IGkrKykgewotICAgICAgICBobiA9IHByZXYtPmRwYltpXS0+Y29kZWNfcHJp djsKLSAgICAgICAgYXZfYXNzZXJ0MChobi0+ZnJhbWVfbnVtIDwgaHAtPmZyYW1lX251bSk7Ci0K LSAgICAgICAgaWYgKHBpYy0+dHlwZSA9PSBGRl9IV19QSUNUVVJFX1RZUEVfUCkgewotICAgICAg ICAgICAgZm9yIChqID0gbjsgaiA+IDA7IGotLSkgewotICAgICAgICAgICAgICAgIGhjID0gcnBs MFtqIC0gMV0tPmNvZGVjX3ByaXY7Ci0gICAgICAgICAgICAgICAgYXZfYXNzZXJ0MChoYy0+ZnJh bWVfbnVtICE9IGhuLT5mcmFtZV9udW0pOwotICAgICAgICAgICAgICAgIGlmIChoYy0+ZnJhbWVf bnVtID4gaG4tPmZyYW1lX251bSkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg ICAgICAgICAgcnBsMFtqXSA9IHJwbDBbaiAtIDFdOwotICAgICAgICAgICAgfQotICAgICAgICAg ICAgcnBsMFtqXSA9IHByZXYtPmRwYltpXTsKLQotICAgICAgICB9IGVsc2UgaWYgKHBpYy0+dHlw ZSA9PSBGRl9IV19QSUNUVVJFX1RZUEVfQikgewotICAgICAgICAgICAgZm9yIChqID0gbjsgaiA+ IDA7IGotLSkgewotICAgICAgICAgICAgICAgIGhjID0gcnBsMFtqIC0gMV0tPmNvZGVjX3ByaXY7 Ci0gICAgICAgICAgICAgICAgYXZfYXNzZXJ0MChoYy0+cGljX29yZGVyX2NudCAhPSBocC0+cGlj X29yZGVyX2NudCk7Ci0gICAgICAgICAgICAgICAgaWYgKGhjLT5waWNfb3JkZXJfY250IDwgaHAt PnBpY19vcmRlcl9jbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGhuLT5waWNfb3JkZXJf Y250ID4gaHAtPnBpY19vcmRlcl9jbnQgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgIGhuLT5w aWNfb3JkZXJfY250IDwgaGMtPnBpY19vcmRlcl9jbnQpCi0gICAgICAgICAgICAgICAgICAgICAg ICBicmVhazsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBp ZiAoaG4tPnBpY19vcmRlcl9jbnQgPiBoYy0+cGljX29yZGVyX2NudCkKLSAgICAgICAgICAgICAg ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBycGww W2pdID0gcnBsMFtqIC0gMV07Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBycGwwW2pdID0g cHJldi0+ZHBiW2ldOwotCi0gICAgICAgICAgICBmb3IgKGogPSBuOyBqID4gMDsgai0tKSB7Ci0g ICAgICAgICAgICAgICAgaGMgPSBycGwxW2ogLSAxXS0+Y29kZWNfcHJpdjsKLSAgICAgICAgICAg ICAgICBhdl9hc3NlcnQwKGhjLT5waWNfb3JkZXJfY250ICE9IGhwLT5waWNfb3JkZXJfY250KTsK LSAgICAgICAgICAgICAgICBpZiAoaGMtPnBpY19vcmRlcl9jbnQgPiBocC0+cGljX29yZGVyX2Nu dCkgewotICAgICAgICAgICAgICAgICAgICBpZiAoaG4tPnBpY19vcmRlcl9jbnQgPCBocC0+cGlj X29yZGVyX2NudCB8fAotICAgICAgICAgICAgICAgICAgICAgICAgaG4tPnBpY19vcmRlcl9jbnQg PiBoYy0+cGljX29yZGVyX2NudCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg ICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChobi0+cGljX29y ZGVyX2NudCA8IGhjLT5waWNfb3JkZXJfY250KQotICAgICAgICAgICAgICAgICAgICAgICAgYnJl YWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJwbDFbal0gPSBycGwxW2og LSAxXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJwbDFbal0gPSBwcmV2LT5kcGJbaV07 Ci0gICAgICAgIH0KLQotICAgICAgICArK247Ci0gICAgfQotCi0gICAgaWYgKHBpYy0+dHlwZSA9 PSBGRl9IV19QSUNUVVJFX1RZUEVfQikgewotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsr KSB7Ci0gICAgICAgICAgICBpZiAocnBsMFtpXSAhPSBycGwxW2ldKQotICAgICAgICAgICAgICAg IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmIChpID09IG4pCi0gICAgICAgICAgICBGRlNX QVAoRkZIV0Jhc2VFbmNvZGVQaWN0dXJlICosIHJwbDFbMF0sIHJwbDFbMV0pOwotICAgIH0KLQot ICAgIGlmIChwaWMtPnR5cGUgPT0gRkZfSFdfUElDVFVSRV9UWVBFX1AgfHwKLSAgICAgICAgcGlj LT50eXBlID09IEZGX0hXX1BJQ1RVUkVfVFlQRV9CKSB7Ci0gICAgICAgIGF2X2xvZyhhdmN0eCwg QVZfTE9HX0RFQlVHLCAiRGVmYXVsdCBSZWZQaWNMaXN0MCBmb3IgZm49JWQvcG9jPSVkOiIsCi0g ICAgICAgICAgICAgICBocC0+ZnJhbWVfbnVtLCBocC0+cGljX29yZGVyX2NudCk7Ci0gICAgICAg IGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLSAgICAgICAgICAgIGhuID0gcnBsMFtpXS0+Y29k ZWNfcHJpdjsKLSAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0RFQlVHLCAiICBmbj0l ZC9wb2M9JWQiLAotICAgICAgICAgICAgICAgICAgIGhuLT5mcmFtZV9udW0sIGhuLT5waWNfb3Jk ZXJfY250KTsKLSAgICAgICAgfQotICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19ERUJVRywg IlxuIik7Ci0gICAgfQotICAgIGlmIChwaWMtPnR5cGUgPT0gRkZfSFdfUElDVFVSRV9UWVBFX0Ip IHsKLSAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfREVCVUcsICJEZWZhdWx0IFJlZlBpY0xp c3QxIGZvciBmbj0lZC9wb2M9JWQ6IiwKLSAgICAgICAgICAgICAgIGhwLT5mcmFtZV9udW0sIGhw LT5waWNfb3JkZXJfY250KTsKLSAgICAgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotICAg ICAgICAgICAgaG4gPSBycGwxW2ldLT5jb2RlY19wcml2OwotICAgICAgICAgICAgYXZfbG9nKGF2 Y3R4LCBBVl9MT0dfREVCVUcsICIgIGZuPSVkL3BvYz0lZCIsCi0gICAgICAgICAgICAgICAgICAg aG4tPmZyYW1lX251bSwgaG4tPnBpY19vcmRlcl9jbnQpOwotICAgICAgICB9Ci0gICAgICAgIGF2 X2xvZyhhdmN0eCwgQVZfTE9HX0RFQlVHLCAiXG4iKTsKLSAgICB9Ci0KLSAgICAqcnBsX3NpemUg PSBuOwotfQotCi1zdGF0aWMgdm9pZCBzZXR1cF9yZWZzKEFWQ29kZWNDb250ZXh0ICphdmN0eCwK LSAgICAgICAgICAgICAgICAgICAgICAgRkZIV0Jhc2VFbmNvZGVQaWN0dXJlICpwaWMsCi0gICAg ICAgICAgICAgICAgICAgICAgIFZrVmlkZW9FbmNvZGVJbmZvS0hSICplbmNvZGVfaW5mbykKLXsK LSAgICBpbnQgbiwgaSwgajsKLSAgICBWdWxrYW5FbmNvZGVIMjY0Q29udGV4dCAqZW5jID0gYXZj dHgtPnByaXZfZGF0YTsKLSAgICBWdWxrYW5FbmNvZGVIMjY0UGljdHVyZSAqaHAgPSBwaWMtPmNv ZGVjX3ByaXY7Ci0gICAgRkZIV0Jhc2VFbmNvZGVQaWN0dXJlICpwcmV2ID0gcGljLT5wcmV2Owot ICAgIEZGSFdCYXNlRW5jb2RlUGljdHVyZSAqZGVmX2wwW01BWF9EUEJfU0laRV0sICpkZWZfbDFb TUFYX0RQQl9TSVpFXTsKLSAgICBWdWxrYW5FbmNvZGVIMjY0UGljdHVyZSAqaHJlZjsKLQotICAg IGhwLT5yZWZfbGlzdF9pbmZvID0gKFN0ZFZpZGVvRW5jb2RlSDI2NFJlZmVyZW5jZUxpc3RzSW5m bykgewotICAgICAgICAuZmxhZ3MgPSAoU3RkVmlkZW9FbmNvZGVIMjY0UmVmZXJlbmNlTGlzdHNJ bmZvRmxhZ3MpIHsKLSAgICAgICAgICAgIC5yZWZfcGljX2xpc3RfbW9kaWZpY2F0aW9uX2ZsYWdf bDAgPSAwLAotICAgICAgICAgICAgLnJlZl9waWNfbGlzdF9tb2RpZmljYXRpb25fZmxhZ19sMSA9 IDAsCi0gICAgICAgICAgICAvKiBSZXNlcnZlZCAqLwotICAgICAgICB9LAotICAgICAgICAvKiBN YXkgYmUgb3ZlcnJpZGRlbiBkdXJpbmcgc2V0dXBfc2xpY2VzKCkgKi8KLSAgICAgICAgLm51bV9y ZWZfaWR4X2wwX2FjdGl2ZV9taW51czEgPSBwaWMtPm5iX3JlZnNbMF0gLSAxLAotICAgICAgICAu bnVtX3JlZl9pZHhfbDFfYWN0aXZlX21pbnVzMSA9IHBpYy0+bmJfcmVmc1sxXSAtIDEsCi0gICAg ICAgIC8qIC5SZWZQaWNMaXN0MCBpcyBzZXQgaW4gdmtfZW5jX2gyNjRfZGVmYXVsdF9yZWZfcGlj X2xpc3QoKSAqLwotICAgICAgICAvKiAuUmVmUGljTGlzdDEgaXMgc2V0IGluIHZrX2VuY19oMjY0 X2RlZmF1bHRfcmVmX3BpY19saXN0KCkgKi8KLSAgICAgICAgLyogUmVzZXJ2ZWQgKi8KLSAgICAg ICAgLnBSZWZMaXN0ME1vZE9wZXJhdGlvbnMgPSBOVUxMLCAvKiBBbGwgc2V0IGJlbG93ICovCi0g ICAgICAgIC5yZWZMaXN0ME1vZE9wQ291bnQgPSAwLAotICAgICAgICAucFJlZkxpc3QxTW9kT3Bl cmF0aW9ucyA9IE5VTEwsCi0gICAgICAgIC5yZWZMaXN0MU1vZE9wQ291bnQgPSAwLAotICAgICAg ICAucFJlZlBpY01hcmtpbmdPcGVyYXRpb25zID0gTlVMTCwKLSAgICAgICAgLnJlZlBpY01hcmtp bmdPcENvdW50ID0gMCwKLSAgICB9OwotCi0gICAgZm9yIChpID0gMDsgaSA8IFNURF9WSURFT19I MjY0X01BWF9OVU1fTElTVF9SRUY7IGkrKykKLSAgICAgICAgaHAtPnJlZl9saXN0X2luZm8uUmVm UGljTGlzdDBbaV0gPSBocC0+cmVmX2xpc3RfaW5mby5SZWZQaWNMaXN0MVtpXSA9IC0xOwotCi0g ICAgLyogTm90ZTogcmVhbGx5IG5vdCBzdXJlICovCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBw aWMtPm5iX3JlZnNbMF07IGkrKykgewotICAgICAgICBWa1ZpZGVvUmVmZXJlbmNlU2xvdEluZm9L SFIgKnNsb3RfaW5mbzsKLSAgICAgICAgc2xvdF9pbmZvID0gKFZrVmlkZW9SZWZlcmVuY2VTbG90 SW5mb0tIUiAqKSZlbmNvZGVfaW5mby0+cFJlZmVyZW5jZVNsb3RzW2ldOwotICAgICAgICBocC0+ cmVmX2xpc3RfaW5mby5SZWZQaWNMaXN0MFtpXSA9IHNsb3RfaW5mby0+c2xvdEluZGV4OwotICAg IH0KLQotICAgIC8qIE5vdGU6IHJlYWxseSBub3Qgc3VyZSAqLwotICAgIGZvciAoaW50IGkgPSAw OyBpIDwgcGljLT5uYl9yZWZzWzFdOyBpKyspIHsKLSAgICAgICAgVmtWaWRlb1JlZmVyZW5jZVNs b3RJbmZvS0hSICpzbG90X2luZm87Ci0gICAgICAgIHNsb3RfaW5mbyA9IChWa1ZpZGVvUmVmZXJl bmNlU2xvdEluZm9LSFIgKikmZW5jb2RlX2luZm8tPnBSZWZlcmVuY2VTbG90c1twaWMtPm5iX3Jl ZnNbMF0gKyBpXTsKLSAgICAgICAgaHAtPnJlZl9saXN0X2luZm8uUmVmUGljTGlzdDFbaV0gPSBz bG90X2luZm8tPnNsb3RJbmRleDsKLSAgICB9Ci0KLSAgICBocC0+aDI2NHBpY19pbmZvLnBSZWZM aXN0cyA9ICZocC0+cmVmX2xpc3RfaW5mbzsKLQotICAgIGlmIChwaWMtPmlzX3JlZmVyZW5jZSAm JiBwaWMtPnR5cGUgIT0gRkZfSFdfUElDVFVSRV9UWVBFX0lEUikgewotICAgICAgICBGRkhXQmFz ZUVuY29kZVBpY3R1cmUgKmRpc2NhcmRfbGlzdFtNQVhfRFBCX1NJWkVdOwotICAgICAgICBpbnQg ZGlzY2FyZCA9IDAsIGtlZXAgPSAwOwotCi0gICAgICAgIC8vIERpc2NhcmQgZXZlcnl0aGluZyB3 aGljaCBpcyBpbiB0aGUgRFBCIG9mIHRoZSBwcmV2aW91cyBmcmFtZSBidXQKLSAgICAgICAgLy8g bm90IGluIHRoZSBEUEIgb2YgdGhpcyBvbmUuCi0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBwcmV2 LT5uYl9kcGJfcGljczsgaSsrKSB7Ci0gICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgcGljLT5u Yl9kcGJfcGljczsgaisrKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHByZXYtPmRwYltpXSA9PSBw aWMtPmRwYltqXSkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0g ICAgICAgICAgICBpZiAoaiA9PSBwaWMtPm5iX2RwYl9waWNzKSB7Ci0gICAgICAgICAgICAgICAg ZGlzY2FyZF9saXN0W2Rpc2NhcmRdID0gcHJldi0+ZHBiW2ldOwotICAgICAgICAgICAgICAgICsr ZGlzY2FyZDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgKytrZWVwOwot ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGF2X2Fzc2VydDAoa2VlcCA8PSBlbmMt PnVuaXRzLmRwYl9mcmFtZXMpOwotCi0gICAgICAgIGlmIChkaXNjYXJkID09IDApIHsKLSAgICAg ICAgICAgIGhwLT5oMjY0cGljX2luZm8uZmxhZ3MuYWRhcHRpdmVfcmVmX3BpY19tYXJraW5nX21v ZGVfZmxhZyA9IDA7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBocC0+aDI2NHBpY19p bmZvLmZsYWdzLmFkYXB0aXZlX3JlZl9waWNfbWFya2luZ19tb2RlX2ZsYWcgPSAxOwotICAgICAg ICAgICAgZm9yIChpID0gMDsgaSA8IGRpc2NhcmQ7IGkrKykgewotICAgICAgICAgICAgICAgIFZ1 bGthbkVuY29kZUgyNjRQaWN0dXJlICpvbGQgPSBkaXNjYXJkX2xpc3RbaV0tPmNvZGVjX3ByaXY7 Ci0gICAgICAgICAgICAgICAgYXZfYXNzZXJ0MChvbGQtPmZyYW1lX251bSA8IGhwLT5mcmFtZV9u dW0pOwotICAgICAgICAgICAgICAgIGhwLT5tbWNvW2ldID0gKFN0ZFZpZGVvRW5jb2RlSDI2NFJl ZlBpY01hcmtpbmdFbnRyeSkgewotICAgICAgICAgICAgICAgICAgICAubWVtb3J5X21hbmFnZW1l bnRfY29udHJvbF9vcGVyYXRpb24gPSAxLAotICAgICAgICAgICAgICAgICAgICAuZGlmZmVyZW5j ZV9vZl9waWNfbnVtc19taW51czEgPSBocC0+ZnJhbWVfbnVtIC0gb2xkLT5mcmFtZV9udW0gLSAx LAotICAgICAgICAgICAgICAgIH07Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBocC0+bW1j b1tpXSA9IChTdGRWaWRlb0VuY29kZUgyNjRSZWZQaWNNYXJraW5nRW50cnkpIHsKLSAgICAgICAg ICAgICAgICAubWVtb3J5X21hbmFnZW1lbnRfY29udHJvbF9vcGVyYXRpb24gPSAwLAotICAgICAg ICAgICAgfTsKLSAgICAgICAgICAgIGhwLT5yZWZfbGlzdF9pbmZvLnBSZWZQaWNNYXJraW5nT3Bl cmF0aW9ucyA9IGhwLT5tbWNvOwotICAgICAgICAgICAgaHAtPnJlZl9saXN0X2luZm8ucmVmUGlj TWFya2luZ09wQ291bnQgPSBpICsgMTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChwaWMt PnR5cGUgPT0gRkZfSFdfUElDVFVSRV9UWVBFX0kgfHwgcGljLT50eXBlID09IEZGX0hXX1BJQ1RV UkVfVFlQRV9JRFIpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIElmIHRoZSBpbnRlbmRlZCBy ZWZlcmVuY2VzIGFyZSBub3QgdGhlIGZpcnN0IGVudHJpZXMgb2YgUmVmUGljTGlzdE4KLSAgICAv LyBieSBkZWZhdWx0LCB1c2UgcmVmLXBpYy1saXN0LW1vZGlmaWNhdGlvbiB0byBtb3ZlIHRoZW0g dGhlcmUuCi0gICAgdmtfZW5jX2gyNjRfZGVmYXVsdF9yZWZfcGljX2xpc3QoYXZjdHgsIHBpYywK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZfbDAsIGRlZl9sMSwgJm4p OwotCi0gICAgaWYgKHBpYy0+dHlwZSA9PSBGRl9IV19QSUNUVVJFX1RZUEVfUCkgewotICAgICAg ICBpbnQgbmVlZF9ycGxtID0gMDsKLSAgICAgICAgZm9yIChpID0gMDsgaSA8IHBpYy0+bmJfcmVm c1swXTsgaSsrKSB7Ci0gICAgICAgICAgICBhdl9hc3NlcnQwKHBpYy0+cmVmc1swXVtpXSk7Ci0g ICAgICAgICAgICBpZiAocGljLT5yZWZzWzBdW2ldICE9IChGRkhXQmFzZUVuY29kZVBpY3R1cmUg KilkZWZfbDBbaV0pCi0gICAgICAgICAgICAgICAgbmVlZF9ycGxtID0gMTsKLSAgICAgICAgfQot Ci0gICAgICAgIGhwLT5yZWZfbGlzdF9pbmZvLmZsYWdzLnJlZl9waWNfbGlzdF9tb2RpZmljYXRp b25fZmxhZ19sMCA9IG5lZWRfcnBsbTsKLSAgICAgICAgaWYgKG5lZWRfcnBsbSkgewotICAgICAg ICAgICAgaW50IHBpY19udW0gPSBocC0+ZnJhbWVfbnVtOwotICAgICAgICAgICAgZm9yIChpID0g MDsgaSA8IHBpYy0+bmJfcmVmc1swXTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgaHJlZiA9IHBp Yy0+cmVmc1swXVtpXS0+Y29kZWNfcHJpdjsKLSAgICAgICAgICAgICAgICBhdl9hc3NlcnQwKGhy ZWYtPmZyYW1lX251bSAhPSBwaWNfbnVtKTsKLSAgICAgICAgICAgICAgICBpZiAoaHJlZi0+ZnJh bWVfbnVtIDwgcGljX251bSkgewotICAgICAgICAgICAgICAgICAgICBocC0+bW9kc1swXVtpXSA9 IChTdGRWaWRlb0VuY29kZUgyNjRSZWZMaXN0TW9kRW50cnkpIHsKLSAgICAgICAgICAgICAgICAg ICAgICAgIC5tb2RpZmljYXRpb25fb2ZfcGljX251bXNfaWRjID0gMCwKLSAgICAgICAgICAgICAg ICAgICAgICAgIC5hYnNfZGlmZl9waWNfbnVtX21pbnVzMSA9IHBpY19udW0gLSBocmVmLT5mcmFt ZV9udW0gLSAxLAotICAgICAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgICAgIH0gZWxz ZSB7Ci0gICAgICAgICAgICAgICAgICAgIGhwLT5tb2RzWzBdW2ldID0gKFN0ZFZpZGVvRW5jb2Rl SDI2NFJlZkxpc3RNb2RFbnRyeSkgewotICAgICAgICAgICAgICAgICAgICAgICAgLm1vZGlmaWNh dGlvbl9vZl9waWNfbnVtc19pZGMgPSAxLAotICAgICAgICAgICAgICAgICAgICAgICAgLmFic19k aWZmX3BpY19udW1fbWludXMxID0gaHJlZi0+ZnJhbWVfbnVtIC0gcGljX251bSAtIDEsCi0gICAg ICAgICAgICAgICAgICAgIH07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHBp Y19udW0gPSBocmVmLT5mcmFtZV9udW07Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBocC0+ cmVmX2xpc3RfaW5mby5wUmVmTGlzdDBNb2RPcGVyYXRpb25zID0gaHAtPm1vZHNbMF07Ci0gICAg ICAgICAgICBocC0+cmVmX2xpc3RfaW5mby5yZWZMaXN0ME1vZE9wQ291bnQgPSBpIC0gMTsKLSAg ICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGludCBuZWVkX3JwbG1fbDAgPSAwLCBuZWVk X3JwbG1fbDEgPSAwOwotICAgICAgICBpbnQgbjAgPSAwLCBuMSA9IDA7Ci0gICAgICAgIGZvciAo aSA9IDA7IGkgPCBwaWMtPm5iX3JlZnNbMF07IGkrKykgewotICAgICAgICAgICAgYXZfYXNzZXJ0 MChwaWMtPnJlZnNbMF1baV0pOwotICAgICAgICAgICAgaHJlZiA9IHBpYy0+cmVmc1swXVtpXS0+ Y29kZWNfcHJpdjsKLSAgICAgICAgICAgIGF2X2Fzc2VydDAoaHJlZi0+cGljX29yZGVyX2NudCA8 IGhwLT5waWNfb3JkZXJfY250KTsKLSAgICAgICAgICAgIGlmIChwaWMtPnJlZnNbMF1baV0gIT0g KEZGSFdCYXNlRW5jb2RlUGljdHVyZSAqKWRlZl9sMFtuMF0pCi0gICAgICAgICAgICAgICAgbmVl ZF9ycGxtX2wwID0gMTsKLSAgICAgICAgICAgICsrbjA7Ci0gICAgICAgIH0KLQotICAgICAgICBm b3IgKGludCBpID0gMDsgaSA8IHBpYy0+bmJfcmVmc1sxXTsgaSsrKSB7Ci0gICAgICAgICAgICBh dl9hc3NlcnQwKHBpYy0+cmVmc1sxXVtpXSk7Ci0gICAgICAgICAgICBocmVmID0gcGljLT5yZWZz WzFdW2ldLT5jb2RlY19wcml2OwotICAgICAgICAgICAgYXZfYXNzZXJ0MChocmVmLT5waWNfb3Jk ZXJfY250ID4gaHAtPnBpY19vcmRlcl9jbnQpOwotICAgICAgICAgICAgaWYgKHBpYy0+cmVmc1sx XVtpXSAhPSAoRkZIV0Jhc2VFbmNvZGVQaWN0dXJlICopZGVmX2wxW24xXSkKLSAgICAgICAgICAg ICAgICBuZWVkX3JwbG1fbDEgPSAxOwotICAgICAgICAgICAgKytuMTsKLSAgICAgICAgfQotCi0g ICAgICAgIGhwLT5yZWZfbGlzdF9pbmZvLmZsYWdzLnJlZl9waWNfbGlzdF9tb2RpZmljYXRpb25f ZmxhZ19sMCA9IG5lZWRfcnBsbV9sMDsKLSAgICAgICAgaWYgKG5lZWRfcnBsbV9sMCkgewotICAg ICAgICAgICAgaW50IHBpY19udW0gPSBocC0+ZnJhbWVfbnVtOwotICAgICAgICAgICAgZm9yIChp ID0gaiA9IDA7IGkgPCBwaWMtPm5iX3JlZnNbMF07IGkrKykgewotICAgICAgICAgICAgICAgIGhy ZWYgPSBwaWMtPnJlZnNbMF1baV0tPmNvZGVjX3ByaXY7Ci0gICAgICAgICAgICAgICAgYXZfYXNz ZXJ0MChocmVmLT5mcmFtZV9udW0gIT0gcGljX251bSk7Ci0gICAgICAgICAgICAgICAgaWYgKGhy ZWYtPmZyYW1lX251bSA8IHBpY19udW0pIHsKLSAgICAgICAgICAgICAgICAgICAgaHAtPm1vZHNb MF1bal0gPSAoU3RkVmlkZW9FbmNvZGVIMjY0UmVmTGlzdE1vZEVudHJ5KSB7Ci0gICAgICAgICAg ICAgICAgICAgICAgICAubW9kaWZpY2F0aW9uX29mX3BpY19udW1zX2lkYyA9IDAsCi0gICAgICAg ICAgICAgICAgICAgICAgICAuYWJzX2RpZmZfcGljX251bV9taW51czEgPSBwaWNfbnVtIC0gaHJl Zi0+ZnJhbWVfbnVtIC0gMSwKLSAgICAgICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgICAg ICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBocC0+bW9kc1swXVtqXSA9IChTdGRWaWRl b0VuY29kZUgyNjRSZWZMaXN0TW9kRW50cnkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC5t b2RpZmljYXRpb25fb2ZfcGljX251bXNfaWRjID0gMSwKLSAgICAgICAgICAgICAgICAgICAgICAg IC5hYnNfZGlmZl9waWNfbnVtX21pbnVzMSA9IGhyZWYtPmZyYW1lX251bSAtIHBpY19udW0gLSAx LAotICAgICAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg ICAgICBwaWNfbnVtID0gaHJlZi0+ZnJhbWVfbnVtOwotICAgICAgICAgICAgICAgICsrajsKLSAg ICAgICAgICAgIH0KLSAgICAgICAgICAgIGhwLT5yZWZfbGlzdF9pbmZvLnBSZWZMaXN0ME1vZE9w ZXJhdGlvbnMgPSBocC0+bW9kc1swXTsKLSAgICAgICAgICAgIGhwLT5yZWZfbGlzdF9pbmZvLnJl Zkxpc3QwTW9kT3BDb3VudCA9IGogLSAxOwotICAgICAgICB9Ci0KLSAgICAgICAgaHAtPnJlZl9s aXN0X2luZm8uZmxhZ3MucmVmX3BpY19saXN0X21vZGlmaWNhdGlvbl9mbGFnX2wxID0gbmVlZF9y cGxtX2wxOwotICAgICAgICBpZiAobmVlZF9ycGxtX2wxKSB7Ci0gICAgICAgICAgICBpbnQgcGlj X251bSA9IGhwLT5mcmFtZV9udW07Ci0gICAgICAgICAgICBmb3IgKGkgPSBqID0gMDsgaSA8IHBp Yy0+bmJfcmVmc1sxXTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgaHJlZiA9IHBpYy0+cmVmc1sx XVtpXS0+Y29kZWNfcHJpdjsKLSAgICAgICAgICAgICAgICBhdl9hc3NlcnQwKGhyZWYtPmZyYW1l X251bSAhPSBwaWNfbnVtKTsKLSAgICAgICAgICAgICAgICBpZiAoaHJlZi0+ZnJhbWVfbnVtIDwg cGljX251bSkgewotICAgICAgICAgICAgICAgICAgICBocC0+bW9kc1sxXVtqXSA9IChTdGRWaWRl b0VuY29kZUgyNjRSZWZMaXN0TW9kRW50cnkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC5t b2RpZmljYXRpb25fb2ZfcGljX251bXNfaWRjID0gMCwKLSAgICAgICAgICAgICAgICAgICAgICAg IC5hYnNfZGlmZl9waWNfbnVtX21pbnVzMSA9IHBpY19udW0gLSBocmVmLT5mcmFtZV9udW0gLSAx LAotICAgICAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg ICAgICAgICAgICAgICAgIGhwLT5tb2RzWzFdW2pdID0gKFN0ZFZpZGVvRW5jb2RlSDI2NFJlZkxp c3RNb2RFbnRyeSkgewotICAgICAgICAgICAgICAgICAgICAgICAgLm1vZGlmaWNhdGlvbl9vZl9w aWNfbnVtc19pZGMgPSAxLAotICAgICAgICAgICAgICAgICAgICAgICAgLmFic19kaWZmX3BpY19u dW1fbWludXMxID0gaHJlZi0+ZnJhbWVfbnVtIC0gcGljX251bSAtIDEsCi0gICAgICAgICAgICAg ICAgICAgIH07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHBpY19udW0gPSBo cmVmLT5mcmFtZV9udW07Ci0gICAgICAgICAgICAgICAgKytqOwotICAgICAgICAgICAgfQotICAg ICAgICAgICAgaHAtPnJlZl9saXN0X2luZm8ucFJlZkxpc3QxTW9kT3BlcmF0aW9ucyA9IGhwLT5t b2RzWzFdOwotICAgICAgICAgICAgaHAtPnJlZl9saXN0X2luZm8ucmVmTGlzdDFNb2RPcENvdW50 ID0gaiAtIDE7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXN0YXRpYyBpbnQgaW5pdF9waWNfcGFy YW1zKEFWQ29kZWNDb250ZXh0ICphdmN0eCwgRkZIV0Jhc2VFbmNvZGVQaWN0dXJlICpwaWMsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICBWa1ZpZGVvRW5jb2RlSW5mb0tIUiAqZW5jb2RlX2lu Zm8pCi17Ci0gICAgaW50IGVycjsKLSAgICBGRlZ1bGthbkVuY29kZVBpY3R1cmUgKnZwID0gcGlj LT5wcml2OwotICAgIFZ1bGthbkVuY29kZUgyNjRQaWN0dXJlICpocCA9IHBpYy0+Y29kZWNfcHJp djsKLSAgICBWa1ZpZGVvUmVmZXJlbmNlU2xvdEluZm9LSFIgKnJlZl9zbG90OwotCi0gICAgZXJy ID0gdmtfZW5jX2gyNjRfdXBkYXRlX3BpY19pbmZvKGF2Y3R4LCBwaWMpOwotICAgIGlmIChlcnIg PCAwKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgaHAtPnZraDI2NHBpY19pbmZvID0gKFZr VmlkZW9FbmNvZGVIMjY0UGljdHVyZUluZm9LSFIpIHsKLSAgICAgICAgLnNUeXBlID0gVktfU1RS VUNUVVJFX1RZUEVfVklERU9fRU5DT0RFX0gyNjRfUElDVFVSRV9JTkZPX0tIUiwKLSAgICAgICAg LnBOZXh0ID0gTlVMTCwKLSAgICAgICAgLnBOYWx1U2xpY2VFbnRyaWVzID0gTlVMTCwgLy8gRmls bGVkIGluIGR1cmluZyBzZXR1cF9zbGljZXMoKQotICAgICAgICAubmFsdVNsaWNlRW50cnlDb3Vu dCA9IDAsIC8vIEZpbGxlZCBpbiBkdXJpbmcgc2V0dXBfc2xpY2VzKCkKLSAgICAgICAgLnBTdGRQ aWN0dXJlSW5mbyA9ICZocC0+aDI2NHBpY19pbmZvLAotICAgIH07Ci0KLSAgICBocC0+aDI2NHBp Y19pbmZvID0gKFN0ZFZpZGVvRW5jb2RlSDI2NFBpY3R1cmVJbmZvKSB7Ci0gICAgICAgIC5mbGFn cyA9IChTdGRWaWRlb0VuY29kZUgyNjRQaWN0dXJlSW5mb0ZsYWdzKSB7Ci0gICAgICAgICAgICAu SWRyUGljRmxhZyA9IHBpYy0+dHlwZSA9PSBGRl9IV19QSUNUVVJFX1RZUEVfSURSLAotICAgICAg ICAgICAgLmlzX3JlZmVyZW5jZSA9IHBpYy0+aXNfcmVmZXJlbmNlLAotICAgICAgICAgICAgLm5v X291dHB1dF9vZl9wcmlvcl9waWNzX2ZsYWcgPSAwLAotICAgICAgICAgICAgLmxvbmdfdGVybV9y ZWZlcmVuY2VfZmxhZyA9IDAsCi0gICAgICAgICAgICAuYWRhcHRpdmVfcmVmX3BpY19tYXJraW5n X21vZGVfZmxhZyA9IDAsIC8vIEZpbGxlZCBpbiBkdXJpbmcgc2V0dXBfcmVmcygpCi0gICAgICAg ICAgICAvKiBSZXNlcnZlZCAqLwotICAgICAgICB9LAotICAgICAgICAuc2VxX3BhcmFtZXRlcl9z ZXRfaWQgPSAwLAotICAgICAgICAucGljX3BhcmFtZXRlcl9zZXRfaWQgPSAwLAotICAgICAgICAu aWRyX3BpY19pZCA9IGhwLT5pZHJfcGljX2lkLAotICAgICAgICAucHJpbWFyeV9waWNfdHlwZSA9 IHBpYy0+dHlwZSA9PSBGRl9IV19QSUNUVVJFX1RZUEVfUCA/IFNURF9WSURFT19IMjY0X1BJQ1RV UkVfVFlQRV9QIDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaWMtPnR5cGUgPT0gRkZf SFdfUElDVFVSRV9UWVBFX0IgPyBTVERfVklERU9fSDI2NF9QSUNUVVJFX1RZUEVfQiA6Ci0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgcGljLT50eXBlID09IEZGX0hXX1BJQ1RVUkVfVFlQRV9J ID8gU1REX1ZJREVPX0gyNjRfUElDVFVSRV9UWVBFX0kgOgotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNURF9WSURFT19IMjY0 X1BJQ1RVUkVfVFlQRV9JRFIsCi0gICAgICAgIC5mcmFtZV9udW0gPSBocC0+ZnJhbWVfbnVtLAot ICAgICAgICAuUGljT3JkZXJDbnQgPSBocC0+cGljX29yZGVyX2NudCwKLSAgICAgICAgLnRlbXBv cmFsX2lkID0gMCwgLyogPyAqLwotICAgICAgICAvKiBSZXNlcnZlZCAqLwotICAgICAgICAucFJl Zkxpc3RzID0gTlVMTCwgLy8gRmlsbGVkIGluIGR1cmluZyBzZXR1cF9yZWZzCi0gICAgfTsKLSAg ICBlbmNvZGVfaW5mby0+cE5leHQgPSAmaHAtPnZraDI2NHBpY19pbmZvOwotCi0gICAgaHAtPmgy NjRkcGJfaW5mbyA9IChTdGRWaWRlb0VuY29kZUgyNjRSZWZlcmVuY2VJbmZvKSB7Ci0gICAgICAg IC5mbGFncyA9IChTdGRWaWRlb0VuY29kZUgyNjRSZWZlcmVuY2VJbmZvRmxhZ3MpIHsKLSAgICAg ICAgICAgIC51c2VkX2Zvcl9sb25nX3Rlcm1fcmVmZXJlbmNlID0gMCwKLSAgICAgICAgICAgIC8q IFJlc2VydmVkICovCi0gICAgICAgIH0sCi0gICAgICAgIC5wcmltYXJ5X3BpY190eXBlID0gaHAt PmgyNjRwaWNfaW5mby5wcmltYXJ5X3BpY190eXBlLAotICAgICAgICAuRnJhbWVOdW0gPSBocC0+ aDI2NHBpY19pbmZvLmZyYW1lX251bSwKLSAgICAgICAgLlBpY09yZGVyQ250ID0gaHAtPmgyNjRw aWNfaW5mby5QaWNPcmRlckNudCwKLSAgICAgICAgLmxvbmdfdGVybV9waWNfbnVtID0gMCwKLSAg ICAgICAgLmxvbmdfdGVybV9mcmFtZV9pZHggPSAwLAotICAgICAgICAudGVtcG9yYWxfaWQgPSBo cC0+aDI2NHBpY19pbmZvLnRlbXBvcmFsX2lkLAotICAgIH07Ci0gICAgaHAtPnZraDI2NGRwYl9p bmZvID0gKFZrVmlkZW9FbmNvZGVIMjY0RHBiU2xvdEluZm9LSFIpIHsKLSAgICAgICAgLnNUeXBl ID0gVktfU1RSVUNUVVJFX1RZUEVfVklERU9fRU5DT0RFX0gyNjRfRFBCX1NMT1RfSU5GT19LSFIs Ci0gICAgICAgIC5wU3RkUmVmZXJlbmNlSW5mbyA9ICZocC0+aDI2NGRwYl9pbmZvLAotICAgIH07 Ci0KLSAgICB2cC0+ZHBiX3Nsb3QucE5leHQgPSAmaHAtPnZraDI2NGRwYl9pbmZvOwotCi0gICAg cmVmX3Nsb3QgPSAoVmtWaWRlb1JlZmVyZW5jZVNsb3RJbmZvS0hSICopZW5jb2RlX2luZm8tPnBT ZXR1cFJlZmVyZW5jZVNsb3Q7Ci0gICAgcmVmX3Nsb3QtPnBOZXh0ID0gJmhwLT52a2gyNjRkcGJf aW5mbzsKLQotICAgIHNldHVwX3JlZnMoYXZjdHgsIHBpYywgZW5jb2RlX2luZm8pOwotCi0gICAg c2V0dXBfc2xpY2VzKGF2Y3R4LCBwaWMpOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBp bnQgaW5pdF9wcm9maWxlKEFWQ29kZWNDb250ZXh0ICphdmN0eCwKLSAgICAgICAgICAgICAgICAg ICAgICAgIFZrVmlkZW9Qcm9maWxlSW5mb0tIUiAqcHJvZmlsZSwgdm9pZCAqcG5leHQpCi17Ci0g ICAgVmtSZXN1bHQgcmV0OwotICAgIFZ1bGthbkVuY29kZUgyNjRDb250ZXh0ICplbmMgPSBhdmN0 eC0+cHJpdl9kYXRhOwotICAgIEZGVnVsa2FuRW5jb2RlQ29udGV4dCAqY3R4ID0gJmVuYy0+Y29t bW9uOwotICAgIEZGVnVsa2FuQ29udGV4dCAqcyA9ICZjdHgtPnM7Ci0gICAgRkZWdWxrYW5GdW5j dGlvbnMgKnZrID0gJmN0eC0+cy52a2ZuOwotICAgIFZrVmlkZW9FbmNvZGVIMjY0Q2FwYWJpbGl0 aWVzS0hSIGgyNjRfY2FwcyA9IHsKLSAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVf VklERU9fRU5DT0RFX0gyNjRfQ0FQQUJJTElUSUVTX0tIUiwKLSAgICB9OwotICAgIFZrVmlkZW9F bmNvZGVDYXBhYmlsaXRpZXNLSFIgZW5jX2NhcHMgPSB7Ci0gICAgICAgIC5zVHlwZSA9IFZLX1NU UlVDVFVSRV9UWVBFX1ZJREVPX0VOQ09ERV9DQVBBQklMSVRJRVNfS0hSLAotICAgICAgICAucE5l eHQgPSAmaDI2NF9jYXBzLAotICAgIH07Ci0gICAgVmtWaWRlb0NhcGFiaWxpdGllc0tIUiBjYXBz ID0gewotICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9WSURFT19DQVBBQklMSVRJ RVNfS0hSLAotICAgICAgICAucE5leHQgPSAmZW5jX2NhcHMsCi0gICAgfTsKLQotICAgIC8qIElu IG9yZGVyIG9mIHByZWZlcmVuY2UgKi8KLSAgICBpbnQgbGFzdF9zdXBwb3J0ZWQgPSBBVl9QUk9G SUxFX1VOS05PV047Ci0gICAgc3RhdGljIGNvbnN0IGludCBrbm93bl9wcm9maWxlc1tdID0gewot ICAgICAgICBBVl9QUk9GSUxFX0gyNjRfQ09OU1RSQUlORURfQkFTRUxJTkUsCi0gICAgICAgIEFW X1BST0ZJTEVfSDI2NF9NQUlOLAotICAgICAgICBBVl9QUk9GSUxFX0gyNjRfSElHSCwKLSAgICAg ICAgQVZfUFJPRklMRV9IMjY0X0hJR0hfMTAsCi0gICAgfTsKLSAgICBpbnQgbmJfcHJvZmlsZXMg PSBGRl9BUlJBWV9FTEVNUyhrbm93bl9wcm9maWxlcyk7Ci0KLSAgICBjb25zdCBBVlBpeEZtdERl c2NyaXB0b3IgKmRlc2MgPSBhdl9waXhfZm10X2Rlc2NfZ2V0KHMtPmZyYW1lcy0+c3dfZm9ybWF0 KTsKLSAgICBpZiAoIWRlc2MpCi0gICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7Ci0KLSAg ICBpZiAoZGVzYy0+Y29tcFswXS5kZXB0aCA9PSA4KQotICAgICAgICBuYl9wcm9maWxlcyA9IDM7 Ci0KLSAgICBlbmMtPnByb2ZpbGUgPSAoVmtWaWRlb0VuY29kZUgyNjRQcm9maWxlSW5mb0tIUikg ewotICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9WSURFT19FTkNPREVfSDI2NF9Q Uk9GSUxFX0lORk9fS0hSLAotICAgICAgICAucE5leHQgPSBwbmV4dCwKLSAgICAgICAgLnN0ZFBy b2ZpbGVJZGMgPSBmZl92a19oMjY0X3Byb2ZpbGVfdG9fdmsoYXZjdHgtPnByb2ZpbGUpLAotICAg IH07Ci0gICAgcHJvZmlsZS0+cE5leHQgPSAmZW5jLT5wcm9maWxlOwotCi0gICAgLyogU2V0IGxl dmVsICovCi0gICAgaWYgKGF2Y3R4LT5sZXZlbCA9PSBBVl9MRVZFTF9VTktOT1dOKQotICAgICAg ICBhdmN0eC0+bGV2ZWwgPSBlbmMtPmNvbW1vbi5vcHRzLmxldmVsOwotCi0gICAgLyogVXNlciBo YXMgZXhwbGljaXRseSBzcGVjaWZpZWQgYSBwcm9maWxlLiAqLwotICAgIGlmIChhdmN0eC0+cHJv ZmlsZSAhPSBBVl9QUk9GSUxFX1VOS05PV04pCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgYXZf bG9nKGF2Y3R4LCBBVl9MT0dfREVCVUcsICJTdXBwb3J0ZWQgcHJvZmlsZXM6XG4iKTsKLSAgICBm b3IgKGludCBpID0gMDsgaSA8IG5iX3Byb2ZpbGVzOyBpKyspIHsKLSAgICAgICAgZW5jLT5wcm9m aWxlLnN0ZFByb2ZpbGVJZGMgPSBmZl92a19oMjY0X3Byb2ZpbGVfdG9fdmsoa25vd25fcHJvZmls ZXNbaV0pOwotICAgICAgICByZXQgPSB2ay0+R2V0UGh5c2ljYWxEZXZpY2VWaWRlb0NhcGFiaWxp dGllc0tIUihzLT5od2N0eC0+cGh5c19kZXYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2ZpbGUsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjYXBzKTsKLSAgICAgICAgaWYg KHJldCA9PSBWS19TVUNDRVNTKSB7Ci0gICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19E RUJVRywgIiAgICAlc1xuIiwKLSAgICAgICAgICAgICAgICAgICBhdmNvZGVjX3Byb2ZpbGVfbmFt ZShhdmN0eC0+Y29kZWNfaWQsIGtub3duX3Byb2ZpbGVzW2ldKSk7Ci0gICAgICAgICAgICBsYXN0 X3N1cHBvcnRlZCA9IGtub3duX3Byb2ZpbGVzW2ldOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg aWYgKGxhc3Rfc3VwcG9ydGVkID09IEFWX1BST0ZJTEVfVU5LTk9XTikgewotICAgICAgICBhdl9s b2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIk5vIHN1cHBvcnRlZCBwcm9maWxlcyBmb3IgZ2l2ZW4g Zm9ybWF0XG4iKTsKLSAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PVFNVUCk7Ci0gICAgfQotCi0g ICAgZW5jLT5wcm9maWxlLnN0ZFByb2ZpbGVJZGMgPSBmZl92a19oMjY0X3Byb2ZpbGVfdG9fdmso bGFzdF9zdXBwb3J0ZWQpOwotICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX1ZFUkJPU0UsICJVc2lu ZyBwcm9maWxlICVzXG4iLAotICAgICAgICAgICBhdmNvZGVjX3Byb2ZpbGVfbmFtZShhdmN0eC0+ Y29kZWNfaWQsIGxhc3Rfc3VwcG9ydGVkKSk7Ci0gICAgYXZjdHgtPnByb2ZpbGUgPSBsYXN0X3N1 cHBvcnRlZDsKLQotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGluaXRfZW5jX29wdGlv bnMoQVZDb2RlY0NvbnRleHQgKmF2Y3R4KQotewotICAgIFZ1bGthbkVuY29kZUgyNjRDb250ZXh0 ICplbmMgPSBhdmN0eC0+cHJpdl9kYXRhOwotICAgIEZGSFdCYXNlRW5jb2RlSDI2NE9wdHMgKnVu aXRfb3B0cyA9ICZlbmMtPnVuaXRfb3B0czsKLQotICAgIGlmIChhdmN0eC0+cmNfYnVmZmVyX3Np emUpCi0gICAgICAgIHVuaXRfb3B0cy0+aHJkX2J1ZmZlcl9zaXplID0gYXZjdHgtPnJjX2J1ZmZl cl9zaXplOwotICAgIGVsc2UgaWYgKGF2Y3R4LT5yY19tYXhfcmF0ZSA+IDApCi0gICAgICAgIHVu aXRfb3B0cy0+aHJkX2J1ZmZlcl9zaXplID0gYXZjdHgtPnJjX21heF9yYXRlOwotICAgIGVsc2UK LSAgICAgICAgdW5pdF9vcHRzLT5ocmRfYnVmZmVyX3NpemUgPSBhdmN0eC0+Yml0X3JhdGU7Ci0K LSAgICBpZiAoYXZjdHgtPnJjX2luaXRpYWxfYnVmZmVyX29jY3VwYW5jeSkgewotICAgICAgICBp ZiAoYXZjdHgtPnJjX2luaXRpYWxfYnVmZmVyX29jY3VwYW5jeSA+IHVuaXRfb3B0cy0+aHJkX2J1 ZmZlcl9zaXplKSB7Ci0gICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIklu dmFsaWQgUkMgYnVmZmVyIHNldHRpbmdzOiAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIm11c3QgaGF2ZSBpbml0aWFsIGJ1ZmZlciBzaXplICglZCkgPD0gIgotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJidWZmZXIgc2l6ZSAoJSJQUklk NjQiKS5cbiIsCi0gICAgICAgICAgICAgICAgICAgYXZjdHgtPnJjX2luaXRpYWxfYnVmZmVyX29j Y3VwYW5jeSwgdW5pdF9vcHRzLT5ocmRfYnVmZmVyX3NpemUpOwotICAgICAgICAgICAgcmV0dXJu IEFWRVJST1IoRUlOVkFMKTsKLSAgICAgICAgfQotICAgICAgICB1bml0X29wdHMtPmluaXRpYWxf YnVmZmVyX2Z1bGxuZXNzID0gYXZjdHgtPnJjX2luaXRpYWxfYnVmZmVyX29jY3VwYW5jeTsKLSAg ICB9IGVsc2UgewotICAgICAgICB1bml0X29wdHMtPmluaXRpYWxfYnVmZmVyX2Z1bGxuZXNzID0g dW5pdF9vcHRzLT5ocmRfYnVmZmVyX3NpemUgKiAzIC8gNDsKLSAgICB9Ci0KLSAgICBpZiAoZW5j LT5jb21tb24ub3B0cy5yY19tb2RlID09IFZLX1ZJREVPX0VOQ09ERV9SQVRFX0NPTlRST0xfTU9E RV9ESVNBQkxFRF9CSVRfS0hSKSB7Ci0gICAgICAgIC8qIEhSRCBpbmZvIGlzIHJlcXVpcmVkIGZv ciB0aW1pbmcgKi8KLSAgICAgICAgZW5jLT51bml0X2VsZW1zICY9IH5VTklUX1NFSV9USU1JTkc7 Ci0KLSAgICAgICAgZW5jLT5maXhlZF9xcF9wID0gYXZfY2xpcChlbmMtPmNvbW1vbi5leHBsaWNp dF9xcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmMtPmNhcHMubWluUXAs IGVuYy0+Y2Fwcy5tYXhRcCk7Ci0gICAgICAgIGlmIChhdmN0eC0+aV9xdWFudF9mYWN0b3IgPiAw LjApCi0gICAgICAgICAgICB1bml0X29wdHMtPmZpeGVkX3FwX2lkciA9IGF2X2NsaXAoKGF2Y3R4 LT5pX3F1YW50X2ZhY3RvciAqIGVuYy0+Zml4ZWRfcXBfcCArCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2Y3R4LT5pX3F1YW50X29mZnNldCkgKyAwLjUs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jLT5jYXBz Lm1pblFwLCBlbmMtPmNhcHMubWF4UXApOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB1bml0 X29wdHMtPmZpeGVkX3FwX2lkciA9IGVuYy0+Zml4ZWRfcXBfcDsKLQotICAgICAgICBpZiAoYXZj dHgtPmJfcXVhbnRfZmFjdG9yID4gMC4wKQotICAgICAgICAgICAgZW5jLT5maXhlZF9xcF9iID0g YXZfY2xpcCgoYXZjdHgtPmJfcXVhbnRfZmFjdG9yICogZW5jLT5maXhlZF9xcF9wICsKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2Y3R4LT5iX3F1YW50X29mZnNldCkg KyAwLjUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuYy0+Y2Fwcy5t aW5RcCwgZW5jLT5jYXBzLm1heFFwKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZW5jLT5m aXhlZF9xcF9iID0gZW5jLT5maXhlZF9xcF9wOwotCi0gICAgICAgIGF2X2xvZyhhdmN0eCwgQVZf TE9HX0RFQlVHLCAiVXNpbmcgZml4ZWQgUVAgPSAiCi0gICAgICAgICAgICAgICAiJWQgLyAlZCAv ICVkIGZvciBJRFItIC8gUC0gLyBCLWZyYW1lcy5cbiIsCi0gICAgICAgICAgICAgICB1bml0X29w dHMtPmZpeGVkX3FwX2lkciwgZW5jLT5maXhlZF9xcF9wLCBlbmMtPmZpeGVkX3FwX2IpOwotICAg IH0gZWxzZSB7Ci0gICAgICAgIHVuaXRfb3B0cy0+Zml4ZWRfcXBfaWRyID0gMjY7Ci0gICAgICAg IGVuYy0+Zml4ZWRfcXBfcCA9IDI2OwotICAgICAgICBlbmMtPmZpeGVkX3FwX2IgPSAyNjsKLSAg ICB9Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIGF2X2NvbGQgaW50IGluaXRfc2VxdWVu Y2VfaGVhZGVycyhBVkNvZGVjQ29udGV4dCAqYXZjdHgpCi17Ci0gICAgaW50IGVycjsKLSAgICBW dWxrYW5FbmNvZGVIMjY0Q29udGV4dCAqZW5jID0gYXZjdHgtPnByaXZfZGF0YTsKLQotICAgIEZG SFdCYXNlRW5jb2RlSDI2NCAqdW5pdHMgPSAmZW5jLT51bml0czsKLSAgICBGRkhXQmFzZUVuY29k ZUgyNjRPcHRzICp1bml0X29wdHMgPSAmZW5jLT51bml0X29wdHM7Ci0KLSAgICB1bml0X29wdHMt PmJpdF9yYXRlICA9IGF2Y3R4LT5iaXRfcmF0ZTsKLSAgICB1bml0X29wdHMtPm1iX3dpZHRoICA9 IEZGQUxJR04oYXZjdHgtPndpZHRoLCAgMTYpIC8gMTY7Ci0gICAgdW5pdF9vcHRzLT5tYl9oZWln aHQgPSBGRkFMSUdOKGF2Y3R4LT5oZWlnaHQsIDE2KSAvIDE2OwotICAgIHVuaXRfb3B0cy0+Zmxh Z3MgICAgID0gZW5jLT51bml0X2VsZW1zICYgVU5JVF9TRUlfVElNSU5HID8gRkZfSFdfSDI2NF9T RUlfVElNSU5HIDogMDsKLQotICAgIC8qIGNhYmFjIGFscmVhZHkgc2V0IHZpYSBhbiBvcHRpb24g Ki8KLSAgICAvKiBmaXhlZF9xcF9pZHIgaW5pdGlhbGl6ZWQgaW4gaW5pdF9lbmNfb3B0aW9ucygp ICovCi0gICAgLyogaHJkX2J1ZmZlcl9zaXplIGluaXRpYWxpemVkIGluIGluaXRfZW5jX29wdGlv bnMoKSAqLwotICAgIC8qIGluaXRpYWxfYnVmZmVyX2Z1bGxuZXNzIGluaXRpYWxpemVkIGluIGlu aXRfZW5jX29wdGlvbnMoKSAqLwotCi0gICAgZXJyID0gZmZfaHdfYmFzZV9lbmNvZGVfaW5pdF9w YXJhbXNfaDI2NCgmZW5jLT5jb21tb24uYmFzZSwgYXZjdHgsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB1bml0cywgdW5pdF9vcHRzKTsKLSAgICBpZiAoZXJy IDwgMCkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIHVuaXRzLT5yYXdfc3BzLnNlcV9zY2Fs aW5nX21hdHJpeF9wcmVzZW50X2ZsYWcgPQotICAgICAgICAhIShlbmMtPmNhcHMuc3RkU3ludGF4 RmxhZ3MgJiBWS19WSURFT19FTkNPREVfSDI2NF9TVERfU0NBTElOR19NQVRSSVhfUFJFU0VOVF9G TEFHX1NFVF9CSVRfS0hSKTsKLSAgICB1bml0cy0+cmF3X3Bwcy5waWNfc2NhbGluZ19tYXRyaXhf cHJlc2VudF9mbGFnID0KLSAgICAgICAgISEoZW5jLT5jYXBzLnN0ZFN5bnRheEZsYWdzICYgVktf VklERU9fRU5DT0RFX0gyNjRfU1REX1NDQUxJTkdfTUFUUklYX1BSRVNFTlRfRkxBR19TRVRfQklU X0tIUik7Ci0gICAgdW5pdHMtPnJhd19wcHMudHJhbnNmb3JtXzh4OF9tb2RlX2ZsYWcgPQotICAg ICAgICAhIShlbmMtPmNhcHMuc3RkU3ludGF4RmxhZ3MgJiBWS19WSURFT19FTkNPREVfSDI2NF9T VERfVFJBTlNGT1JNXzhYOF9NT0RFX0ZMQUdfU0VUX0JJVF9LSFIpOwotCi0gICAgcmV0dXJuIDA7 Ci19Ci0KLXR5cGVkZWYgc3RydWN0IFZ1bGthbkgyNjRVbml0cyB7Ci0gICAgU3RkVmlkZW9IMjY0 U2VxdWVuY2VQYXJhbWV0ZXJTZXQgICAgdmtzcHM7Ci0gICAgU3RkVmlkZW9IMjY0U2NhbGluZ0xp c3RzICAgICAgICAgICAgdmtzcHNfc2NhbGluZzsKLSAgICBTdGRWaWRlb0gyNjRIcmRQYXJhbWV0 ZXJzICAgICAgICAgICB2a3Nwc192dWlfaGVhZGVyOwotICAgIFN0ZFZpZGVvSDI2NFNlcXVlbmNl UGFyYW1ldGVyU2V0VnVpIHZrc3BzX3Z1aTsKLQotICAgIFN0ZFZpZGVvSDI2NFBpY3R1cmVQYXJh bWV0ZXJTZXQgICAgIHZrcHBzOwotICAgIFN0ZFZpZGVvSDI2NFNjYWxpbmdMaXN0cyAgICAgICAg ICAgIHZrcHBzX3NjYWxpbmc7Ci19IFZ1bGthbkgyNjRVbml0czsKLQotc3RhdGljIGF2X2NvbGQg aW50IGJhc2VfdW5pdF90b192ayhBVkNvZGVjQ29udGV4dCAqYXZjdHgsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFZ1bGthbkgyNjRVbml0cyAqdmtfdW5pdHMpCi17Ci0gICAg VnVsa2FuRW5jb2RlSDI2NENvbnRleHQgKmVuYyA9IGF2Y3R4LT5wcml2X2RhdGE7Ci0KLSAgICBG RkhXQmFzZUVuY29kZUgyNjQgKnVuaXRzID0gJmVuYy0+dW5pdHM7Ci0KLSAgICBIMjY0UmF3U1BT ICAgICAgICAgICAgICAgICAgICAgICAgICAqc3BzID0gJnVuaXRzLT5yYXdfc3BzOwotICAgIEgy NjRSYXdIUkQgICAgICAgICAgICAgICAgICAgICAgICAgICpocmQgPSAmc3BzLT52dWkubmFsX2hy ZF9wYXJhbWV0ZXJzOwotICAgIFN0ZFZpZGVvSDI2NFNjYWxpbmdMaXN0cyAgICAgICAgICAgICp2 a3Nwc19zY2FsaW5nID0gJnZrX3VuaXRzLT52a3Nwc19zY2FsaW5nOwotICAgIFN0ZFZpZGVvSDI2 NEhyZFBhcmFtZXRlcnMgICAgICAgICAgICp2a3Nwc192dWlfaGVhZGVyID0gJnZrX3VuaXRzLT52 a3Nwc192dWlfaGVhZGVyOwotICAgIFN0ZFZpZGVvSDI2NFNlcXVlbmNlUGFyYW1ldGVyU2V0VnVp ICp2a3Nwc192dWkgPSAmdmtfdW5pdHMtPnZrc3BzX3Z1aTsKLSAgICBTdGRWaWRlb0gyNjRTZXF1 ZW5jZVBhcmFtZXRlclNldCAgICAqdmtzcHMgPSAmdmtfdW5pdHMtPnZrc3BzOwotCi0gICAgSDI2 NFJhd1BQUyAgICAgICAgICAgICAgICAgICAgICAgICAgKnBwcyA9ICZ1bml0cy0+cmF3X3BwczsK LSAgICBTdGRWaWRlb0gyNjRTY2FsaW5nTGlzdHMgICAgICAgICAgICAqdmtwcHNfc2NhbGluZyA9 ICZ2a191bml0cy0+dmtwcHNfc2NhbGluZzsKLSAgICBTdGRWaWRlb0gyNjRQaWN0dXJlUGFyYW1l dGVyU2V0ICAgICAqdmtwcHMgPSAmdmtfdW5pdHMtPnZrcHBzOwotCi0gICAgKnZrc3BzX3NjYWxp bmcgPSAoU3RkVmlkZW9IMjY0U2NhbGluZ0xpc3RzKSB7Ci0gICAgICAgIC5zY2FsaW5nX2xpc3Rf cHJlc2VudF9tYXNrID0gMHgwLCAvLyBtYXNrCi0gICAgICAgIC51c2VfZGVmYXVsdF9zY2FsaW5n X21hdHJpeF9tYXNrID0gMSwKLSAgICB9OwotCi0gICAgKnZrc3BzX3Z1aV9oZWFkZXIgPSAoU3Rk VmlkZW9IMjY0SHJkUGFyYW1ldGVycykgewotICAgICAgICAuY3BiX2NudF9taW51czEgPSBocmQt PmNwYl9jbnRfbWludXMxLAotICAgICAgICAuYml0X3JhdGVfc2NhbGUgPSBocmQtPmJpdF9yYXRl X3NjYWxlLAotICAgICAgICAuY3BiX3NpemVfc2NhbGUgPSBocmQtPmNwYl9zaXplX3NjYWxlLAot ICAgICAgICAvKiBSZXNlcnZlZCAqLwotICAgICAgICAvKiBiaXRfcmF0ZS9jcGJfc2l6ZS9jYnJf ZmxhZyBzZXQgYmVsb3cgKi8KLSAgICAgICAgLmluaXRpYWxfY3BiX3JlbW92YWxfZGVsYXlfbGVu Z3RoX21pbnVzMSA9IGhyZC0+aW5pdGlhbF9jcGJfcmVtb3ZhbF9kZWxheV9sZW5ndGhfbWludXMx LAotICAgICAgICAuY3BiX3JlbW92YWxfZGVsYXlfbGVuZ3RoX21pbnVzMSA9IGhyZC0+Y3BiX3Jl bW92YWxfZGVsYXlfbGVuZ3RoX21pbnVzMSwKLSAgICAgICAgLmRwYl9vdXRwdXRfZGVsYXlfbGVu Z3RoX21pbnVzMSA9IGhyZC0+ZHBiX291dHB1dF9kZWxheV9sZW5ndGhfbWludXMxLAotICAgICAg ICAudGltZV9vZmZzZXRfbGVuZ3RoID0gaHJkLT50aW1lX29mZnNldF9sZW5ndGgsCi0gICAgfTsK LQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgSDI2NF9NQVhfQ1BCX0NOVDsgaSsrKSB7Ci0gICAg ICAgIHZrc3BzX3Z1aV9oZWFkZXItPmJpdF9yYXRlX3ZhbHVlX21pbnVzMVtpXSA9IGhyZC0+Yml0 X3JhdGVfdmFsdWVfbWludXMxW2ldOwotICAgICAgICB2a3Nwc192dWlfaGVhZGVyLT5jcGJfc2l6 ZV92YWx1ZV9taW51czFbaV0gPSBocmQtPmNwYl9zaXplX3ZhbHVlX21pbnVzMVtpXTsKLSAgICAg ICAgdmtzcHNfdnVpX2hlYWRlci0+Y2JyX2ZsYWdbaV0gPSBocmQtPmNicl9mbGFnW2ldOwotICAg IH0KLQotICAgICp2a3Nwc192dWkgPSAoU3RkVmlkZW9IMjY0U2VxdWVuY2VQYXJhbWV0ZXJTZXRW dWkpIHsKLSAgICAgICAgLmZsYWdzID0gKFN0ZFZpZGVvSDI2NFNwc1Z1aUZsYWdzKSB7Ci0gICAg ICAgICAgICAuYXNwZWN0X3JhdGlvX2luZm9fcHJlc2VudF9mbGFnID0gc3BzLT52dWkuYXNwZWN0 X3JhdGlvX2luZm9fcHJlc2VudF9mbGFnLAotICAgICAgICAgICAgLm92ZXJzY2FuX2luZm9fcHJl c2VudF9mbGFnID0gc3BzLT52dWkub3ZlcnNjYW5faW5mb19wcmVzZW50X2ZsYWcsCi0gICAgICAg ICAgICAub3ZlcnNjYW5fYXBwcm9wcmlhdGVfZmxhZyA9IHNwcy0+dnVpLm92ZXJzY2FuX2FwcHJv cHJpYXRlX2ZsYWcsCi0gICAgICAgICAgICAudmlkZW9fc2lnbmFsX3R5cGVfcHJlc2VudF9mbGFn ID0gc3BzLT52dWkudmlkZW9fc2lnbmFsX3R5cGVfcHJlc2VudF9mbGFnLAotICAgICAgICAgICAg LnZpZGVvX2Z1bGxfcmFuZ2VfZmxhZyA9IHNwcy0+dnVpLnZpZGVvX2Z1bGxfcmFuZ2VfZmxhZywK LSAgICAgICAgICAgIC5jb2xvcl9kZXNjcmlwdGlvbl9wcmVzZW50X2ZsYWcgPSBzcHMtPnZ1aS5j b2xvdXJfZGVzY3JpcHRpb25fcHJlc2VudF9mbGFnLAotICAgICAgICAgICAgLmNocm9tYV9sb2Nf aW5mb19wcmVzZW50X2ZsYWcgPSBzcHMtPnZ1aS5jaHJvbWFfbG9jX2luZm9fcHJlc2VudF9mbGFn LAotICAgICAgICAgICAgLnRpbWluZ19pbmZvX3ByZXNlbnRfZmxhZyA9IHNwcy0+dnVpLnRpbWlu Z19pbmZvX3ByZXNlbnRfZmxhZywKLSAgICAgICAgICAgIC5maXhlZF9mcmFtZV9yYXRlX2ZsYWcg PSBzcHMtPnZ1aS5maXhlZF9mcmFtZV9yYXRlX2ZsYWcsCi0gICAgICAgICAgICAuYml0c3RyZWFt X3Jlc3RyaWN0aW9uX2ZsYWcgPSBzcHMtPnZ1aS5iaXRzdHJlYW1fcmVzdHJpY3Rpb25fZmxhZywK LSAgICAgICAgICAgIC5uYWxfaHJkX3BhcmFtZXRlcnNfcHJlc2VudF9mbGFnID0gc3BzLT52dWku bmFsX2hyZF9wYXJhbWV0ZXJzX3ByZXNlbnRfZmxhZywKLSAgICAgICAgICAgIC52Y2xfaHJkX3Bh cmFtZXRlcnNfcHJlc2VudF9mbGFnID0gc3BzLT52dWkudmNsX2hyZF9wYXJhbWV0ZXJzX3ByZXNl bnRfZmxhZywKLSAgICAgICAgfSwKLSAgICAgICAgLmFzcGVjdF9yYXRpb19pZGMgPSBzcHMtPnZ1 aS5hc3BlY3RfcmF0aW9faWRjLAotICAgICAgICAuc2FyX3dpZHRoID0gc3BzLT52dWkuc2FyX3dp ZHRoLAotICAgICAgICAuc2FyX2hlaWdodCA9IHNwcy0+dnVpLnNhcl9oZWlnaHQsCi0gICAgICAg IC52aWRlb19mb3JtYXQgPSBzcHMtPnZ1aS52aWRlb19mb3JtYXQsCi0gICAgICAgIC5jb2xvdXJf cHJpbWFyaWVzID0gc3BzLT52dWkuY29sb3VyX3ByaW1hcmllcywKLSAgICAgICAgLnRyYW5zZmVy X2NoYXJhY3RlcmlzdGljcyA9IHNwcy0+dnVpLnRyYW5zZmVyX2NoYXJhY3RlcmlzdGljcywKLSAg ICAgICAgLm1hdHJpeF9jb2VmZmljaWVudHMgPSBzcHMtPnZ1aS5tYXRyaXhfY29lZmZpY2llbnRz LAotICAgICAgICAubnVtX3VuaXRzX2luX3RpY2sgPSBzcHMtPnZ1aS5udW1fdW5pdHNfaW5fdGlj aywKLSAgICAgICAgLnRpbWVfc2NhbGUgPSBzcHMtPnZ1aS50aW1lX3NjYWxlLAotICAgICAgICAu bWF4X251bV9yZW9yZGVyX2ZyYW1lcyA9IHNwcy0+dnVpLm1heF9udW1fcmVvcmRlcl9mcmFtZXMs Ci0gICAgICAgIC5tYXhfZGVjX2ZyYW1lX2J1ZmZlcmluZyA9IHNwcy0+dnVpLm1heF9kZWNfZnJh bWVfYnVmZmVyaW5nLAotICAgICAgICAuY2hyb21hX3NhbXBsZV9sb2NfdHlwZV90b3BfZmllbGQg PSBzcHMtPnZ1aS5jaHJvbWFfc2FtcGxlX2xvY190eXBlX3RvcF9maWVsZCwKLSAgICAgICAgLmNo cm9tYV9zYW1wbGVfbG9jX3R5cGVfYm90dG9tX2ZpZWxkID0gc3BzLT52dWkuY2hyb21hX3NhbXBs ZV9sb2NfdHlwZV9ib3R0b21fZmllbGQsCi0gICAgICAgIC8qIFJlc2VydmVkICovCi0gICAgICAg IC5wSHJkUGFyYW1ldGVycyA9IHZrc3BzX3Z1aV9oZWFkZXIsCi0gICAgfTsKLQotICAgICp2a3Nw cyA9IChTdGRWaWRlb0gyNjRTZXF1ZW5jZVBhcmFtZXRlclNldCkgewotICAgICAgICAuZmxhZ3Mg PSAoU3RkVmlkZW9IMjY0U3BzRmxhZ3MpIHsKLSAgICAgICAgICAgIC5jb25zdHJhaW50X3NldDBf ZmxhZyA9IHNwcy0+Y29uc3RyYWludF9zZXQwX2ZsYWcsCi0gICAgICAgICAgICAuY29uc3RyYWlu dF9zZXQxX2ZsYWcgPSBzcHMtPmNvbnN0cmFpbnRfc2V0MV9mbGFnLAotICAgICAgICAgICAgLmNv bnN0cmFpbnRfc2V0Ml9mbGFnID0gc3BzLT5jb25zdHJhaW50X3NldDJfZmxhZywKLSAgICAgICAg ICAgIC5jb25zdHJhaW50X3NldDNfZmxhZyA9IHNwcy0+Y29uc3RyYWludF9zZXQzX2ZsYWcsCi0g ICAgICAgICAgICAuY29uc3RyYWludF9zZXQ0X2ZsYWcgPSBzcHMtPmNvbnN0cmFpbnRfc2V0NF9m bGFnLAotICAgICAgICAgICAgLmNvbnN0cmFpbnRfc2V0NV9mbGFnID0gc3BzLT5jb25zdHJhaW50 X3NldDVfZmxhZywKLSAgICAgICAgICAgIC5kaXJlY3RfOHg4X2luZmVyZW5jZV9mbGFnID0gc3Bz LT5kaXJlY3RfOHg4X2luZmVyZW5jZV9mbGFnLAotICAgICAgICAgICAgLm1iX2FkYXB0aXZlX2Zy YW1lX2ZpZWxkX2ZsYWcgPSBzcHMtPm1iX2FkYXB0aXZlX2ZyYW1lX2ZpZWxkX2ZsYWcsCi0gICAg ICAgICAgICAuZnJhbWVfbWJzX29ubHlfZmxhZyA9IHNwcy0+ZnJhbWVfbWJzX29ubHlfZmxhZywK LSAgICAgICAgICAgIC5kZWx0YV9waWNfb3JkZXJfYWx3YXlzX3plcm9fZmxhZyA9IHNwcy0+ZGVs dGFfcGljX29yZGVyX2Fsd2F5c196ZXJvX2ZsYWcsCi0gICAgICAgICAgICAuc2VwYXJhdGVfY29s b3VyX3BsYW5lX2ZsYWcgPSBzcHMtPnNlcGFyYXRlX2NvbG91cl9wbGFuZV9mbGFnLAotICAgICAg ICAgICAgLmdhcHNfaW5fZnJhbWVfbnVtX3ZhbHVlX2FsbG93ZWRfZmxhZyA9IHNwcy0+Z2Fwc19p bl9mcmFtZV9udW1fYWxsb3dlZF9mbGFnLAotICAgICAgICAgICAgLnFwcHJpbWVfeV96ZXJvX3Ry YW5zZm9ybV9ieXBhc3NfZmxhZyA9IHNwcy0+cXBwcmltZV95X3plcm9fdHJhbnNmb3JtX2J5cGFz c19mbGFnLAotICAgICAgICAgICAgLmZyYW1lX2Nyb3BwaW5nX2ZsYWcgPSBzcHMtPmZyYW1lX2Ny b3BwaW5nX2ZsYWcsCi0gICAgICAgICAgICAuc2VxX3NjYWxpbmdfbWF0cml4X3ByZXNlbnRfZmxh ZyA9IHNwcy0+c2VxX3NjYWxpbmdfbWF0cml4X3ByZXNlbnRfZmxhZywKLSAgICAgICAgICAgIC52 dWlfcGFyYW1ldGVyc19wcmVzZW50X2ZsYWcgPSBzcHMtPnZ1aV9wYXJhbWV0ZXJzX3ByZXNlbnRf ZmxhZywKLSAgICAgICAgfSwKLSAgICAgICAgLnByb2ZpbGVfaWRjID0gZmZfdmtfaDI2NF9wcm9m aWxlX3RvX3ZrKHNwcy0+cHJvZmlsZV9pZGMpLAotICAgICAgICAubGV2ZWxfaWRjID0gZmZfdmtf aDI2NF9sZXZlbF90b192ayhzcHMtPmxldmVsX2lkYyksCi0gICAgICAgIC5jaHJvbWFfZm9ybWF0 X2lkYyA9IHNwcy0+Y2hyb21hX2Zvcm1hdF9pZGMsCi0gICAgICAgIC5zZXFfcGFyYW1ldGVyX3Nl dF9pZCA9IHNwcy0+c2VxX3BhcmFtZXRlcl9zZXRfaWQsCi0gICAgICAgIC5iaXRfZGVwdGhfbHVt YV9taW51czggPSBzcHMtPmJpdF9kZXB0aF9sdW1hX21pbnVzOCwKLSAgICAgICAgLmJpdF9kZXB0 aF9jaHJvbWFfbWludXM4ID0gc3BzLT5iaXRfZGVwdGhfY2hyb21hX21pbnVzOCwKLSAgICAgICAg LmxvZzJfbWF4X2ZyYW1lX251bV9taW51czQgPSBzcHMtPmxvZzJfbWF4X2ZyYW1lX251bV9taW51 czQsCi0gICAgICAgIC5waWNfb3JkZXJfY250X3R5cGUgPSBzcHMtPnBpY19vcmRlcl9jbnRfdHlw ZSwKLSAgICAgICAgLm9mZnNldF9mb3Jfbm9uX3JlZl9waWMgPSBzcHMtPm9mZnNldF9mb3Jfbm9u X3JlZl9waWMsCi0gICAgICAgIC5vZmZzZXRfZm9yX3RvcF90b19ib3R0b21fZmllbGQgPSBzcHMt Pm9mZnNldF9mb3JfdG9wX3RvX2JvdHRvbV9maWVsZCwKLSAgICAgICAgLmxvZzJfbWF4X3BpY19v cmRlcl9jbnRfbHNiX21pbnVzNCA9IHNwcy0+bG9nMl9tYXhfcGljX29yZGVyX2NudF9sc2JfbWlu dXM0LAotICAgICAgICAubnVtX3JlZl9mcmFtZXNfaW5fcGljX29yZGVyX2NudF9jeWNsZSA9IHNw cy0+bnVtX3JlZl9mcmFtZXNfaW5fcGljX29yZGVyX2NudF9jeWNsZSwKLSAgICAgICAgLm1heF9u dW1fcmVmX2ZyYW1lcyA9IHNwcy0+bWF4X251bV9yZWZfZnJhbWVzLAotICAgICAgICAvKiBSZXNl cnZlZCAqLwotICAgICAgICAucGljX3dpZHRoX2luX21ic19taW51czEgPSBzcHMtPnBpY193aWR0 aF9pbl9tYnNfbWludXMxLAotICAgICAgICAucGljX2hlaWdodF9pbl9tYXBfdW5pdHNfbWludXMx ID0gc3BzLT5waWNfaGVpZ2h0X2luX21hcF91bml0c19taW51czEsCi0gICAgICAgIC5mcmFtZV9j cm9wX2xlZnRfb2Zmc2V0ID0gc3BzLT5mcmFtZV9jcm9wX2xlZnRfb2Zmc2V0LAotICAgICAgICAu ZnJhbWVfY3JvcF9yaWdodF9vZmZzZXQgPSBzcHMtPmZyYW1lX2Nyb3BfcmlnaHRfb2Zmc2V0LAot ICAgICAgICAuZnJhbWVfY3JvcF90b3Bfb2Zmc2V0ID0gc3BzLT5mcmFtZV9jcm9wX3RvcF9vZmZz ZXQsCi0gICAgICAgIC5mcmFtZV9jcm9wX2JvdHRvbV9vZmZzZXQgPSBzcHMtPmZyYW1lX2Nyb3Bf Ym90dG9tX29mZnNldCwKLSAgICAgICAgLyogUmVzZXJ2ZWQgKi8KLSAgICAgICAgLnBPZmZzZXRG b3JSZWZGcmFtZSA9IHNwcy0+b2Zmc2V0X2Zvcl9yZWZfZnJhbWUsCi0gICAgICAgIC5wU2NhbGlu Z0xpc3RzID0gdmtzcHNfc2NhbGluZywKLSAgICAgICAgLnBTZXF1ZW5jZVBhcmFtZXRlclNldFZ1 aSA9IHZrc3BzX3Z1aSwKLSAgICB9OwotCi0gICAgKnZrcHBzX3NjYWxpbmcgPSAoU3RkVmlkZW9I MjY0U2NhbGluZ0xpc3RzKSB7Ci0gICAgICAgIC5zY2FsaW5nX2xpc3RfcHJlc2VudF9tYXNrID0g MHgwLCAvLyBtYXNrCi0gICAgICAgIC51c2VfZGVmYXVsdF9zY2FsaW5nX21hdHJpeF9tYXNrID0g MSwKLSAgICB9OwotCi0gICAgKnZrcHBzID0gKFN0ZFZpZGVvSDI2NFBpY3R1cmVQYXJhbWV0ZXJT ZXQpIHsKLSAgICAgICAgLmZsYWdzID0gKFN0ZFZpZGVvSDI2NFBwc0ZsYWdzKSB7Ci0gICAgICAg ICAgICAudHJhbnNmb3JtXzh4OF9tb2RlX2ZsYWcgPSBwcHMtPnRyYW5zZm9ybV84eDhfbW9kZV9m bGFnLAotICAgICAgICAgICAgLnJlZHVuZGFudF9waWNfY250X3ByZXNlbnRfZmxhZyA9IHBwcy0+ cmVkdW5kYW50X3BpY19jbnRfcHJlc2VudF9mbGFnLAotICAgICAgICAgICAgLmNvbnN0cmFpbmVk X2ludHJhX3ByZWRfZmxhZyA9IHBwcy0+Y29uc3RyYWluZWRfaW50cmFfcHJlZF9mbGFnLAotICAg ICAgICAgICAgLmRlYmxvY2tpbmdfZmlsdGVyX2NvbnRyb2xfcHJlc2VudF9mbGFnID0gcHBzLT5k ZWJsb2NraW5nX2ZpbHRlcl9jb250cm9sX3ByZXNlbnRfZmxhZywKLSAgICAgICAgICAgIC53ZWln aHRlZF9wcmVkX2ZsYWcgPSBwcHMtPndlaWdodGVkX3ByZWRfZmxhZywKLSAgICAgICAgICAgIC5i b3R0b21fZmllbGRfcGljX29yZGVyX2luX2ZyYW1lX3ByZXNlbnRfZmxhZyA9IHBwcy0+Ym90dG9t X2ZpZWxkX3BpY19vcmRlcl9pbl9mcmFtZV9wcmVzZW50X2ZsYWcsCi0gICAgICAgICAgICAuZW50 cm9weV9jb2RpbmdfbW9kZV9mbGFnID0gcHBzLT5lbnRyb3B5X2NvZGluZ19tb2RlX2ZsYWcsCi0g ICAgICAgICAgICAucGljX3NjYWxpbmdfbWF0cml4X3ByZXNlbnRfZmxhZyA9IHBwcy0+cGljX3Nj YWxpbmdfbWF0cml4X3ByZXNlbnRfZmxhZywKLSAgICAgICAgfSwKLSAgICAgICAgLnNlcV9wYXJh bWV0ZXJfc2V0X2lkID0gcHBzLT5zZXFfcGFyYW1ldGVyX3NldF9pZCwKLSAgICAgICAgLnBpY19w YXJhbWV0ZXJfc2V0X2lkID0gcHBzLT5waWNfcGFyYW1ldGVyX3NldF9pZCwKLSAgICAgICAgLm51 bV9yZWZfaWR4X2wwX2RlZmF1bHRfYWN0aXZlX21pbnVzMSA9IHBwcy0+bnVtX3JlZl9pZHhfbDBf ZGVmYXVsdF9hY3RpdmVfbWludXMxLAotICAgICAgICAubnVtX3JlZl9pZHhfbDFfZGVmYXVsdF9h Y3RpdmVfbWludXMxID0gcHBzLT5udW1fcmVmX2lkeF9sMV9kZWZhdWx0X2FjdGl2ZV9taW51czEs Ci0gICAgICAgIC53ZWlnaHRlZF9iaXByZWRfaWRjID0gcHBzLT53ZWlnaHRlZF9iaXByZWRfaWRj LAotICAgICAgICAucGljX2luaXRfcXBfbWludXMyNiA9IHBwcy0+cGljX2luaXRfcXBfbWludXMy NiwKLSAgICAgICAgLnBpY19pbml0X3FzX21pbnVzMjYgPSBwcHMtPnBpY19pbml0X3FzX21pbnVz MjYsCi0gICAgICAgIC5jaHJvbWFfcXBfaW5kZXhfb2Zmc2V0ID0gcHBzLT5jaHJvbWFfcXBfaW5k ZXhfb2Zmc2V0LAotICAgICAgICAuc2Vjb25kX2Nocm9tYV9xcF9pbmRleF9vZmZzZXQgPSBwcHMt PnNlY29uZF9jaHJvbWFfcXBfaW5kZXhfb2Zmc2V0LAotICAgICAgICAucFNjYWxpbmdMaXN0cyA9 IHZrcHBzX3NjYWxpbmcsCi0gICAgfTsKLQotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgaW50 IGNyZWF0ZV9zZXNzaW9uX3BhcmFtcyhBVkNvZGVjQ29udGV4dCAqYXZjdHgpCi17Ci0gICAgaW50 IGVycjsKLSAgICBWdWxrYW5FbmNvZGVIMjY0Q29udGV4dCAqZW5jID0gYXZjdHgtPnByaXZfZGF0 YTsKLSAgICBGRlZ1bGthbkVuY29kZUNvbnRleHQgKmN0eCA9ICZlbmMtPmNvbW1vbjsKLSAgICBG RlZ1bGthbkNvbnRleHQgKnMgPSAmY3R4LT5zOwotICAgIEZGVnVsa2FuRnVuY3Rpb25zICp2ayA9 ICZjdHgtPnMudmtmbjsKLQotICAgIFZ1bGthbkgyNjRVbml0cyB2a191bml0cyA9IHsgMCB9Owot Ci0gICAgVmtWaWRlb0VuY29kZUgyNjRTZXNzaW9uUGFyYW1ldGVyc0FkZEluZm9LSFIgaDI2NF9w YXJhbXNfaW5mbzsKLSAgICBWa1ZpZGVvRW5jb2RlSDI2NFNlc3Npb25QYXJhbWV0ZXJzQ3JlYXRl SW5mb0tIUiBoMjY0X3BhcmFtczsKLQotICAgIC8qIENvbnZlcnQgaXQgdG8gVnVsa2FuICovCi0g ICAgZXJyID0gYmFzZV91bml0X3RvX3ZrKGF2Y3R4LCAmdmtfdW5pdHMpOwotICAgIGlmIChlcnIg PCAwKSB7Ci0gICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiVW5hYmxlIHRvIGNv bnZlcnQgU1BTL1BQUyB1bml0cyB0byBWdWxrYW46ICVzXG4iLAotICAgICAgICAgICAgICAgYXZf ZXJyMnN0cihlcnIpKTsKLSAgICAgICAgcmV0dXJuIGVycjsKLSAgICB9Ci0KLSAgICAvKiBEZXN0 cm95IHRoZSBzZXNzaW9uIHBhcmFtcyAqLwotICAgIGlmIChjdHgtPnNlc3Npb25fcGFyYW1zKQot ICAgICAgICB2ay0+RGVzdHJveVZpZGVvU2Vzc2lvblBhcmFtZXRlcnNLSFIocy0+aHdjdHgtPmFj dF9kZXYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgt PnNlc3Npb25fcGFyYW1zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcy0+aHdjdHgtPmFsbG9jKTsKLQotICAgIGgyNjRfcGFyYW1zX2luZm8gPSAoVmtWaWRl b0VuY29kZUgyNjRTZXNzaW9uUGFyYW1ldGVyc0FkZEluZm9LSFIpIHsKLSAgICAgICAgLnNUeXBl ID0gVktfU1RSVUNUVVJFX1RZUEVfVklERU9fRU5DT0RFX0gyNjRfU0VTU0lPTl9QQVJBTUVURVJT X0FERF9JTkZPX0tIUiwKLSAgICAgICAgLnBTdGRTUFNzID0gJnZrX3VuaXRzLnZrc3BzLAotICAg ICAgICAuc3RkU1BTQ291bnQgPSAxLAotICAgICAgICAucFN0ZFBQU3MgPSAmdmtfdW5pdHMudmtw cHMsCi0gICAgICAgIC5zdGRQUFNDb3VudCA9IDEsCi0gICAgfTsKLSAgICBoMjY0X3BhcmFtcyA9 IChWa1ZpZGVvRW5jb2RlSDI2NFNlc3Npb25QYXJhbWV0ZXJzQ3JlYXRlSW5mb0tIUikgewotICAg ICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9WSURFT19FTkNPREVfSDI2NF9TRVNTSU9O X1BBUkFNRVRFUlNfQ1JFQVRFX0lORk9fS0hSLAotICAgICAgICAubWF4U3RkU1BTQ291bnQgPSAx LAotICAgICAgICAubWF4U3RkUFBTQ291bnQgPSAxLAotICAgICAgICAucFBhcmFtZXRlcnNBZGRJ bmZvID0gJmgyNjRfcGFyYW1zX2luZm8sCi0gICAgfTsKLQotICAgIHJldHVybiBmZl92dWxrYW5f ZW5jb2RlX2NyZWF0ZV9zZXNzaW9uX3BhcmFtcyhhdmN0eCwgY3R4LCAmaDI2NF9wYXJhbXMpOwot fQotCi1zdGF0aWMgaW50IHBhcnNlX2ZlZWRiYWNrX3VuaXRzKEFWQ29kZWNDb250ZXh0ICphdmN0 eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqZGF0YSwg c2l6ZV90IHNpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzcHNfb3Zl cnJpZGUsIGludCBwcHNfb3ZlcnJpZGUpCi17Ci0gICAgaW50IGVycjsKLSAgICBWdWxrYW5FbmNv ZGVIMjY0Q29udGV4dCAqZW5jID0gYXZjdHgtPnByaXZfZGF0YTsKLQotICAgIENvZGVkQml0c3Ry ZWFtQ29udGV4dCAqY2JzOwotICAgIENvZGVkQml0c3RyZWFtRnJhZ21lbnQgYXUgPSB7IDAgfTsK LQotICAgIGVyciA9IGZmX2Nic19pbml0KCZjYnMsIEFWX0NPREVDX0lEX0gyNjQsIGF2Y3R4KTsK LSAgICBpZiAoZXJyIDwgMCkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIGVyciA9IGZmX2Ni c19yZWFkKGNicywgJmF1LCBOVUxMLCBkYXRhLCBzaXplKTsKLSAgICBpZiAoZXJyIDwgMCkgewot ICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIlVuYWJsZSB0byBwYXJzZSBmZWVk YmFjayB1bml0cywgYmFkIGRyaXZlcnM6ICVzXG4iLAotICAgICAgICAgICAgICAgYXZfZXJyMnN0 cihlcnIpKTsKLSAgICAgICAgZ290byBmYWlsOwotICAgIH0KLQotICAgIC8qIElmIFBQUyBoYXMg YW4gb3ZlcnJpZGUsIGp1c3QgY29weSBpdCBlbnRpcmVseS4gKi8KLSAgICBpZiAocHBzX292ZXJy aWRlKSB7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXUubmJfdW5pdHM7IGkrKykgewot ICAgICAgICAgICAgaWYgKGF1LnVuaXRzW2ldLnR5cGUgPT0gSDI2NF9OQUxfUFBTKSB7Ci0gICAg ICAgICAgICAgICAgSDI2NFJhd1BQUyAqcHBzID0gYXUudW5pdHNbaV0uY29udGVudDsKLSAgICAg ICAgICAgICAgICBtZW1jcHkoJmVuYy0+dW5pdHMucmF3X3BwcywgcHBzLCBzaXplb2YoKnBwcykp OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg fQotCi0gICAgZXJyID0gMDsKLWZhaWw6Ci0gICAgZmZfY2JzX2ZyYWdtZW50X2ZyZWUoJmF1KTsK LSAgICBmZl9jYnNfY2xvc2UoJmNicyk7Ci0KLSAgICByZXR1cm4gZXJyOwotfQotCi1zdGF0aWMg aW50IGluaXRfYmFzZV91bml0cyhBVkNvZGVjQ29udGV4dCAqYXZjdHgpCi17Ci0gICAgaW50IGVy cjsKLSAgICBWa1Jlc3VsdCByZXQ7Ci0gICAgVnVsa2FuRW5jb2RlSDI2NENvbnRleHQgKmVuYyA9 IGF2Y3R4LT5wcml2X2RhdGE7Ci0gICAgRkZWdWxrYW5FbmNvZGVDb250ZXh0ICpjdHggPSAmZW5j LT5jb21tb247Ci0gICAgRkZWdWxrYW5Db250ZXh0ICpzID0gJmN0eC0+czsKLSAgICBGRlZ1bGth bkZ1bmN0aW9ucyAqdmsgPSAmY3R4LT5zLnZrZm47Ci0KLSAgICBWa1ZpZGVvRW5jb2RlSDI2NFNl c3Npb25QYXJhbWV0ZXJzR2V0SW5mb0tIUiBoMjY0X3BhcmFtc19pbmZvOwotICAgIFZrVmlkZW9F bmNvZGVTZXNzaW9uUGFyYW1ldGVyc0dldEluZm9LSFIgcGFyYW1zX2luZm87Ci0gICAgVmtWaWRl b0VuY29kZUgyNjRTZXNzaW9uUGFyYW1ldGVyc0ZlZWRiYWNrSW5mb0tIUiBoMjY0X3BhcmFtc19m ZWVkYmFjazsKLSAgICBWa1ZpZGVvRW5jb2RlU2Vzc2lvblBhcmFtZXRlcnNGZWVkYmFja0luZm9L SFIgcGFyYW1zX2ZlZWRiYWNrOwotCi0gICAgdm9pZCAqZGF0YSA9IE5VTEw7Ci0gICAgc2l6ZV90 IGRhdGFfc2l6ZSA9IDA7Ci0KLSAgICAvKiBHZW5lcmF0ZSBTUFMvUFBTIHVuaXQgaW5mbyAqLwot ICAgIGVyciA9IGluaXRfc2VxdWVuY2VfaGVhZGVycyhhdmN0eCk7Ci0gICAgaWYgKGVyciA8IDAp IHsKLSAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJVbmFibGUgdG8gaW5pdGlh bGl6ZSBTUFMvUFBTIHVuaXRzOiAlc1xuIiwKLSAgICAgICAgICAgICAgIGF2X2VycjJzdHIoZXJy KSk7Ci0gICAgICAgIHJldHVybiBlcnI7Ci0gICAgfQotCi0gICAgLyogQ3JlYXRlIHNlc3Npb24g cGFyYW1ldGVycyBmcm9tIHRoZW0gKi8KLSAgICBlcnIgPSBjcmVhdGVfc2Vzc2lvbl9wYXJhbXMo YXZjdHgpOwotICAgIGlmIChlcnIgPCAwKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgaDI2 NF9wYXJhbXNfaW5mbyA9IChWa1ZpZGVvRW5jb2RlSDI2NFNlc3Npb25QYXJhbWV0ZXJzR2V0SW5m b0tIUikgewotICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9WSURFT19FTkNPREVf SDI2NF9TRVNTSU9OX1BBUkFNRVRFUlNfR0VUX0lORk9fS0hSLAotICAgICAgICAud3JpdGVTdGRT UFMgPSAxLAotICAgICAgICAud3JpdGVTdGRQUFMgPSAxLAotICAgICAgICAuc3RkU1BTSWQgPSBl bmMtPnVuaXRzLnJhd19zcHMuc2VxX3BhcmFtZXRlcl9zZXRfaWQsCi0gICAgICAgIC5zdGRQUFNJ ZCA9IGVuYy0+dW5pdHMucmF3X3Bwcy5waWNfcGFyYW1ldGVyX3NldF9pZCwKLSAgICB9OwotICAg IHBhcmFtc19pbmZvID0gKFZrVmlkZW9FbmNvZGVTZXNzaW9uUGFyYW1ldGVyc0dldEluZm9LSFIp IHsKLSAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfVklERU9fRU5DT0RFX1NFU1NJ T05fUEFSQU1FVEVSU19HRVRfSU5GT19LSFIsCi0gICAgICAgIC5wTmV4dCA9ICZoMjY0X3BhcmFt c19pbmZvLAotICAgICAgICAudmlkZW9TZXNzaW9uUGFyYW1ldGVycyA9IGN0eC0+c2Vzc2lvbl9w YXJhbXMsCi0gICAgfTsKLQotICAgIGgyNjRfcGFyYW1zX2ZlZWRiYWNrID0gKFZrVmlkZW9FbmNv ZGVIMjY0U2Vzc2lvblBhcmFtZXRlcnNGZWVkYmFja0luZm9LSFIpIHsKLSAgICAgICAgLnNUeXBl ID0gVktfU1RSVUNUVVJFX1RZUEVfVklERU9fRU5DT0RFX0gyNjRfU0VTU0lPTl9QQVJBTUVURVJT X0ZFRURCQUNLX0lORk9fS0hSLAotICAgIH07Ci0gICAgcGFyYW1zX2ZlZWRiYWNrID0gKFZrVmlk ZW9FbmNvZGVTZXNzaW9uUGFyYW1ldGVyc0ZlZWRiYWNrSW5mb0tIUikgewotICAgICAgICAuc1R5 cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9WSURFT19FTkNPREVfU0VTU0lPTl9QQVJBTUVURVJTX0ZF RURCQUNLX0lORk9fS0hSLAotICAgICAgICAucE5leHQgPSAmaDI2NF9wYXJhbXNfZmVlZGJhY2ss Ci0gICAgfTsKLQotICAgIHJldCA9IHZrLT5HZXRFbmNvZGVkVmlkZW9TZXNzaW9uUGFyYW1ldGVy c0tIUihzLT5od2N0eC0+YWN0X2RldiwgJnBhcmFtc19pbmZvLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcGFyYW1zX2ZlZWRiYWNrLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZGF0YV9zaXplLCBk YXRhKTsKLSAgICBpZiAocmV0ID09IFZLX0lOQ09NUExFVEUgfHwKLSAgICAgICAgKHJldCA9PSBW S19TVUNDRVNTKSAmJiAoZGF0YV9zaXplID4gMCkpIHsKLSAgICAgICAgZGF0YSA9IGF2X21hbGxv Y3ooZGF0YV9zaXplKTsKLSAgICAgICAgaWYgKCFkYXRhKQotICAgICAgICAgICAgcmV0dXJuIEFW RVJST1IoRU5PTUVNKTsKLSAgICB9IGVsc2UgewotICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xP R19FUlJPUiwgIlVuYWJsZSB0byBnZXQgZmVlZGJhY2sgZm9yIEguMjY0IHVuaXRzID0gJSJTSVpF X1NQRUNJRklFUiJcbiIsIGRhdGFfc2l6ZSk7Ci0gICAgICAgIHJldHVybiBlcnI7Ci0gICAgfQot Ci0gICAgcmV0ID0gdmstPkdldEVuY29kZWRWaWRlb1Nlc3Npb25QYXJhbWV0ZXJzS0hSKHMtPmh3 Y3R4LT5hY3RfZGV2LCAmcGFyYW1zX2luZm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICZwYXJhbXNfZmVlZGJhY2ssCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkYXRhX3NpemUsIGRhdGEpOwotICAg IGlmIChyZXQgIT0gVktfU1VDQ0VTUykgewotICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19F UlJPUiwgIkVycm9yIHdyaXRpbmcgZmVlZGJhY2sgdW5pdHNcbiIpOwotICAgICAgICByZXR1cm4g ZXJyOwotICAgIH0KLQotICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX1ZFUkJPU0UsICJGZWVkYmFj ayB1bml0cyB3cml0dGVuLCBvdmVycmlkZXM6ICVpIChTUFM6ICVpIFBQUzogJWkpXG4iLAotICAg ICAgICAgICBwYXJhbXNfZmVlZGJhY2suaGFzT3ZlcnJpZGVzLAotICAgICAgICAgICBoMjY0X3Bh cmFtc19mZWVkYmFjay5oYXNTdGRTUFNPdmVycmlkZXMsCi0gICAgICAgICAgIGgyNjRfcGFyYW1z X2ZlZWRiYWNrLmhhc1N0ZFBQU092ZXJyaWRlcyk7Ci0KLSAgICBwYXJhbXNfZmVlZGJhY2suaGFz T3ZlcnJpZGVzID0gMTsKLSAgICBoMjY0X3BhcmFtc19mZWVkYmFjay5oYXNTdGRQUFNPdmVycmlk ZXMgPSAxOwotCi0gICAgLyogTm8gbmVlZCB0byBzeW5jIGFueSBvdmVycmlkZXMgKi8KLSAgICBp ZiAoIXBhcmFtc19mZWVkYmFjay5oYXNPdmVycmlkZXMpCi0gICAgICAgIHJldHVybiAwOwotCi0g ICAgLyogUGFyc2UgYmFjayB0bmUgdW5pdHMgYW5kIG92ZXJyaWRlICovCi0gICAgZXJyID0gcGFy c2VfZmVlZGJhY2tfdW5pdHMoYXZjdHgsIGRhdGEsIGRhdGFfc2l6ZSwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBoMjY0X3BhcmFtc19mZWVkYmFjay5oYXNTdGRTUFNPdmVycmlkZXMs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaDI2NF9wYXJhbXNfZmVlZGJhY2suaGFz U3RkUFBTT3ZlcnJpZGVzKTsKLSAgICBpZiAoZXJyIDwgMCkKLSAgICAgICAgcmV0dXJuIGVycjsK LQotICAgIC8qIENyZWF0ZSBmaW5hbCBzZXNzaW9uIHBhcmFtZXRlcnMgKi8KLSAgICBlcnIgPSBj cmVhdGVfc2Vzc2lvbl9wYXJhbXMoYXZjdHgpOwotICAgIGlmIChlcnIgPCAwKQotICAgICAgICBy ZXR1cm4gZXJyOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgdnVsa2FuX2VuY29k ZV9oMjY0X2FkZF9uYWwoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBDb2RlZEJpdHN0cmVhbUZyYWdtZW50ICphdSwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqbmFsX3VuaXQpCi17Ci0gICAgSDI2 NFJhd05BTFVuaXRIZWFkZXIgKmhlYWRlciA9IG5hbF91bml0OwotCi0gICAgaW50IGVyciA9IGZm X2Nic19pbnNlcnRfdW5pdF9jb250ZW50KGF1LCAtMSwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaGVhZGVyLT5uYWxfdW5pdF90eXBlLCBuYWxfdW5pdCwgTlVMTCk7 Ci0gICAgaWYgKGVyciA8IDApCi0gICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAi RmFpbGVkIHRvIGFkZCBOQUwgdW5pdDogIgotICAgICAgICAgICAgICAgInR5cGUgPSAlZC5cbiIs IGhlYWRlci0+bmFsX3VuaXRfdHlwZSk7Ci0KLSAgICByZXR1cm4gZXJyOwotfQotCi1zdGF0aWMg aW50IHdyaXRlX2FjY2Vzc191bml0KEFWQ29kZWNDb250ZXh0ICphdmN0eCwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdWludDhfdCAqZGF0YSwgc2l6ZV90ICpkYXRhX2xlbiwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgQ29kZWRCaXRzdHJlYW1GcmFnbWVudCAqYXUpCi17Ci0g ICAgVnVsa2FuRW5jb2RlSDI2NENvbnRleHQgKmVuYyA9IGF2Y3R4LT5wcml2X2RhdGE7Ci0KLSAg ICBpbnQgZXJyID0gZmZfY2JzX3dyaXRlX2ZyYWdtZW50X2RhdGEoZW5jLT5jYnMsIGF1KTsKLSAg ICBpZiAoZXJyIDwgMCkgewotICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkZh aWxlZCB0byB3cml0ZSBwYWNrZWQgaGVhZGVyLlxuIik7Ci0gICAgICAgIHJldHVybiBlcnI7Ci0g ICAgfQotCi0gICAgaWYgKCpkYXRhX2xlbiA8IGF1LT5kYXRhX3NpemUpIHsKLSAgICAgICAgYXZf bG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJBY2Nlc3MgdW5pdCB0b28gbGFyZ2U6ICV6dSA8ICV6 dS5cbiIsCi0gICAgICAgICAgICAgICAqZGF0YV9sZW4sIGF1LT5kYXRhX3NpemUpOwotICAgICAg ICByZXR1cm4gQVZFUlJPUihFTk9TUEMpOwotICAgIH0KLQotICAgIG1lbWNweShkYXRhLCBhdS0+ ZGF0YSwgYXUtPmRhdGFfc2l6ZSk7Ci0gICAgKmRhdGFfbGVuID0gYXUtPmRhdGFfc2l6ZTsKLQot ICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHdyaXRlX3NlcXVlbmNlX2hlYWRlcnMoQVZD b2RlY0NvbnRleHQgKmF2Y3R4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZG SFdCYXNlRW5jb2RlUGljdHVyZSAqYmFzZV9waWMsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdWludDhfdCAqZGF0YSwgc2l6ZV90ICpkYXRhX2xlbikKLXsKLSAgICBpbnQgZXJy OwotICAgIFZ1bGthbkVuY29kZUgyNjRDb250ZXh0ICplbmMgPSBhdmN0eC0+cHJpdl9kYXRhOwot ICAgIFZ1bGthbkVuY29kZUgyNjRQaWN0dXJlICAqaHAgPSBiYXNlX3BpYyA/IGJhc2VfcGljLT5j b2RlY19wcml2IDogTlVMTDsKLSAgICBDb2RlZEJpdHN0cmVhbUZyYWdtZW50ICAgKmF1ID0gJmVu Yy0+Y3VycmVudF9hY2Nlc3NfdW5pdDsKLQotICAgIGlmIChocCAmJiBocC0+dW5pdHNfbmVlZGVk ICYgVU5JVF9BVUQpIHsKLSAgICAgICAgZXJyID0gdnVsa2FuX2VuY29kZV9oMjY0X2FkZF9uYWwo YXZjdHgsIGF1LCAmZW5jLT5yYXdfYXVkKTsKLSAgICAgICAgaWYgKGVyciA8IDApCi0gICAgICAg ICAgICBnb3RvIGZhaWw7Ci0gICAgfQotCi0gICAgZXJyID0gdnVsa2FuX2VuY29kZV9oMjY0X2Fk ZF9uYWwoYXZjdHgsIGF1LCAmZW5jLT51bml0cy5yYXdfc3BzKTsKLSAgICBpZiAoZXJyIDwgMCkK LSAgICAgICAgZ290byBmYWlsOwotCi0gICAgZXJyID0gdnVsa2FuX2VuY29kZV9oMjY0X2FkZF9u YWwoYXZjdHgsIGF1LCAmZW5jLT51bml0cy5yYXdfcHBzKTsKLSAgICBpZiAoZXJyIDwgMCkKLSAg ICAgICAgZ290byBmYWlsOwotCi0gICAgZXJyID0gd3JpdGVfYWNjZXNzX3VuaXQoYXZjdHgsIGRh dGEsIGRhdGFfbGVuLCBhdSk7Ci1mYWlsOgotICAgIGZmX2Nic19mcmFnbWVudF9yZXNldChhdSk7 Ci0gICAgcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCB3cml0ZV9leHRyYV9oZWFkZXJzKEFW Q29kZWNDb250ZXh0ICphdmN0eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGRkhX QmFzZUVuY29kZVBpY3R1cmUgKmJhc2VfcGljLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHVpbnQ4X3QgKmRhdGEsIHNpemVfdCAqZGF0YV9sZW4pCi17Ci0gICAgaW50IGVycjsKLSAg ICBWdWxrYW5FbmNvZGVIMjY0Q29udGV4dCAqZW5jID0gYXZjdHgtPnByaXZfZGF0YTsKLSAgICBW dWxrYW5FbmNvZGVIMjY0UGljdHVyZSAgKmhwID0gYmFzZV9waWMtPmNvZGVjX3ByaXY7Ci0gICAg Q29kZWRCaXRzdHJlYW1GcmFnbWVudCAgICphdSA9ICZlbmMtPmN1cnJlbnRfYWNjZXNzX3VuaXQ7 Ci0KLSAgICBpZiAoaHAtPnVuaXRzX25lZWRlZCAmIFVOSVRfQVVEKSB7Ci0gICAgICAgIGVyciA9 IHZ1bGthbl9lbmNvZGVfaDI2NF9hZGRfbmFsKGF2Y3R4LCBhdSwgJmVuYy0+cmF3X2F1ZCk7Ci0g ICAgICAgIGlmIChlcnIgPCAwKQotICAgICAgICAgICAgZ290byBmYWlsOwotICAgIH0KLQotICAg IGlmIChocC0+dW5pdHNfbmVlZGVkICYgVU5JVF9TRUlfSURFTlRJRklFUikgewotICAgICAgICBl cnIgPSBmZl9jYnNfc2VpX2FkZF9tZXNzYWdlKGVuYy0+Y2JzLCBhdSwgMSwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBTRUlfVFlQRV9VU0VSX0RBVEFfVU5SRUdJU1RFUkVE LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZlbmMtPnNlaV9pZGVudGlm aWVyLCBOVUxMKTsKLSAgICAgICAgaWYgKGVyciA8IDApCi0gICAgICAgICAgICBnb3RvIGZhaWw7 Ci0gICAgfQotCi0gICAgaWYgKGhwLT51bml0c19uZWVkZWQgJiBVTklUX1NFSV9USU1JTkcpIHsK LSAgICAgICAgaWYgKGJhc2VfcGljLT50eXBlID09IEZGX0hXX1BJQ1RVUkVfVFlQRV9JRFIpIHsK LSAgICAgICAgICAgIGVyciA9IGZmX2Nic19zZWlfYWRkX21lc3NhZ2UoZW5jLT5jYnMsIGF1LCAx LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRUlfVFlQRV9CVUZG RVJJTkdfUEVSSU9ELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm ZW5jLT51bml0cy5zZWlfYnVmZmVyaW5nX3BlcmlvZCwgTlVMTCk7Ci0gICAgICAgICAgICBpZiAo ZXJyIDwgMCkKLSAgICAgICAgICAgICAgICBnb3RvIGZhaWw7Ci0gICAgICAgIH0KLSAgICAgICAg ZXJyID0gZmZfY2JzX3NlaV9hZGRfbWVzc2FnZShlbmMtPmNicywgYXUsIDEsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VJX1RZUEVfUElDX1RJTUlORywKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZW5jLT5zZWlfcGljX3RpbWluZywgTlVMTCk7 Ci0gICAgICAgIGlmIChlcnIgPCAwKQotICAgICAgICAgICAgZ290byBmYWlsOwotICAgIH0KLQot ICAgIGlmIChocC0+dW5pdHNfbmVlZGVkICYgVU5JVF9TRUlfUkVDT1ZFUlkpIHsKLSAgICAgICAg ZXJyID0gZmZfY2JzX3NlaV9hZGRfbWVzc2FnZShlbmMtPmNicywgYXUsIDEsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VJX1RZUEVfUkVDT1ZFUllfUE9JTlQsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmVuYy0+c2VpX3JlY292ZXJ5X3BvaW50 LCBOVUxMKTsKLSAgICAgICAgaWYgKGVyciA8IDApCi0gICAgICAgICAgICBnb3RvIGZhaWw7Ci0g ICAgfQotCi0gICAgaWYgKGhwLT51bml0c19uZWVkZWQgJiBVTklUX1NFSV9BNTNfQ0MpIHsKLSAg ICAgICAgZXJyID0gZmZfY2JzX3NlaV9hZGRfbWVzc2FnZShlbmMtPmNicywgYXUsIDEsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VJX1RZUEVfVVNFUl9EQVRBX1JFR0lT VEVSRURfSVRVX1RfVDM1LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZl bmMtPnNlaV9hNTNjYywgTlVMTCk7Ci0gICAgICAgIGlmIChlcnIgPCAwKQotICAgICAgICAgICAg Z290byBmYWlsOwotICAgIH0KLQotICAgIGlmIChocC0+dW5pdHNfbmVlZGVkKSB7Ci0gICAgICAg IGVyciA9IHdyaXRlX2FjY2Vzc191bml0KGF2Y3R4LCBkYXRhLCBkYXRhX2xlbiwgYXUpOwotICAg ICAgICBpZiAoZXJyIDwgMCkKLSAgICAgICAgICAgIGdvdG8gZmFpbDsKLSAgICB9IGVsc2Ugewot ICAgICAgICBlcnIgPSAwOwotICAgICAgICAqZGF0YV9sZW4gPSAwOwotICAgIH0KLQotZmFpbDoK LSAgICBmZl9jYnNfZnJhZ21lbnRfcmVzZXQoYXUpOwotICAgIHJldHVybiBlcnI7Ci19Ci0KLXN0 YXRpYyBpbnQgd3JpdGVfZmlsbGVyKEFWQ29kZWNDb250ZXh0ICphdmN0eCwgdWludDMyX3QgZmls bGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqZGF0YSwgc2l6ZV90ICpkYXRh X2xlbikKLXsKLSAgICBpbnQgZXJyOwotICAgIFZ1bGthbkVuY29kZUgyNjRDb250ZXh0ICplbmMg PSBhdmN0eC0+cHJpdl9kYXRhOwotICAgIENvZGVkQml0c3RyZWFtRnJhZ21lbnQgICAqYXUgPSAm ZW5jLT5jdXJyZW50X2FjY2Vzc191bml0OwotCi0gICAgSDI2NFJhd0ZpbGxlciByYXdfZmlsbGVy ID0gewotICAgICAgICAubmFsX3VuaXRfaGVhZGVyID0gewotICAgICAgICAgICAgLm5hbF91bml0 X3R5cGUgPSBIMjY0X05BTF9GSUxMRVJfREFUQSwKLSAgICAgICAgfSwKLSAgICAgICAgLmZpbGxl cl9zaXplID0gZmlsbGVyLAotICAgIH07Ci0KLSAgICBlcnIgPSB2dWxrYW5fZW5jb2RlX2gyNjRf YWRkX25hbChhdmN0eCwgYXUsICZyYXdfZmlsbGVyKTsKLSAgICBpZiAoZXJyIDwgMCkKLSAgICAg ICAgZ290byBmYWlsOwotCi0gICAgZXJyID0gd3JpdGVfYWNjZXNzX3VuaXQoYXZjdHgsIGRhdGEs IGRhdGFfbGVuLCBhdSk7Ci1mYWlsOgotICAgIGZmX2Nic19mcmFnbWVudF9yZXNldChhdSk7Ci0g ICAgcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGNvbnN0IEZGVnVsa2FuQ29kZWMgZW5jX2NiID0g ewotICAgIC5mbGFncyA9IEZGX0hXX0ZMQUdfQl9QSUNUVVJFUyB8Ci0gICAgICAgICAgICAgRkZf SFdfRkxBR19CX1BJQ1RVUkVfUkVGRVJFTkNFUyB8Ci0gICAgICAgICAgICAgRkZfSFdfRkxBR19O T05fSURSX0tFWV9QSUNUVVJFUywKLSAgICAucGljdHVyZV9wcml2X2RhdGFfc2l6ZSA9IHNpemVv ZihWdWxrYW5FbmNvZGVIMjY0UGljdHVyZSksCi0gICAgLmZpbGxlcl9oZWFkZXJfc2l6ZSA9IDYs Ci0gICAgLmluaXRfcHJvZmlsZSA9IGluaXRfcHJvZmlsZSwKLSAgICAuaW5pdF9waWNfcmMgPSBp bml0X3BpY19yYywKLSAgICAuaW5pdF9waWNfcGFyYW1zID0gaW5pdF9waWNfcGFyYW1zLAotICAg IC53cml0ZV9zZXF1ZW5jZV9oZWFkZXJzID0gd3JpdGVfc2VxdWVuY2VfaGVhZGVycywKLSAgICAu d3JpdGVfZXh0cmFfaGVhZGVycyA9IHdyaXRlX2V4dHJhX2hlYWRlcnMsCi0gICAgLndyaXRlX2Zp bGxlciA9IHdyaXRlX2ZpbGxlciwKLX07Ci0KLXN0YXRpYyBhdl9jb2xkIGludCB2dWxrYW5fZW5j b2RlX2gyNjRfaW5pdChBVkNvZGVjQ29udGV4dCAqYXZjdHgpCi17Ci0gICAgaW50IGVyciwgcmVm X2wwLCByZWZfbDE7Ci0gICAgVnVsa2FuRW5jb2RlSDI2NENvbnRleHQgKmVuYyA9IGF2Y3R4LT5w cml2X2RhdGE7Ci0gICAgRkZWdWxrYW5FbmNvZGVDb250ZXh0ICpjdHggPSAmZW5jLT5jb21tb247 Ci0gICAgRkZWdWxrYW5Db250ZXh0ICpzID0gJmN0eC0+czsKLSAgICBGRkhXQmFzZUVuY29kZUNv bnRleHQgKmJhc2VfY3R4ID0gJmN0eC0+YmFzZTsKLSAgICBpbnQgZmxhZ3M7Ci0KLSAgICBpZiAo YXZjdHgtPnByb2ZpbGUgPT0gQVZfUFJPRklMRV9VTktOT1dOKQotICAgICAgICBhdmN0eC0+cHJv ZmlsZSA9IGVuYy0+Y29tbW9uLm9wdHMucHJvZmlsZTsKLQotICAgIGVuYy0+Y2FwcyA9IChWa1Zp ZGVvRW5jb2RlSDI2NENhcGFiaWxpdGllc0tIUikgewotICAgICAgICAuc1R5cGUgPSBWS19TVFJV Q1RVUkVfVFlQRV9WSURFT19FTkNPREVfSDI2NF9DQVBBQklMSVRJRVNfS0hSLAotICAgIH07Ci0K LSAgICBlbmMtPnF1YWxpdHlfcHJvcHMgPSAoVmtWaWRlb0VuY29kZUgyNjRRdWFsaXR5TGV2ZWxQ cm9wZXJ0aWVzS0hSKSB7Ci0gICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX1ZJREVP X0VOQ09ERV9IMjY0X1FVQUxJVFlfTEVWRUxfUFJPUEVSVElFU19LSFIsCi0gICAgfTsKLQotICAg IGVyciA9IGZmX3Z1bGthbl9lbmNvZGVfaW5pdChhdmN0eCwgJmVuYy0+Y29tbW9uLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAmZmZfdmtfZW5jX2gyNjRfZGVzYywgJmVuY19jYiwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmVuYy0+Y2FwcywgJmVuYy0+cXVhbGl0 eV9wcm9wcyk7Ci0gICAgaWYgKGVyciA8IDApCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICBh dl9sb2coYXZjdHgsIEFWX0xPR19WRVJCT1NFLCAiSDI2NCBlbmNvZGVyIGNhcGFiaWxpdGllczpc biIpOwotICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX1ZFUkJPU0UsICIgICAgU3RhbmRhcmQgY2Fw YWJpbGl0eSBmbGFnczpcbiIpOwotICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX1ZFUkJPU0UsICIg ICAgICAgIHNlcGFyYXRlX2NvbG9yX3BsYW5lOiAlaVxuIiwKLSAgICAgICAgICAgISEoZW5jLT5j YXBzLnN0ZFN5bnRheEZsYWdzICYgVktfVklERU9fRU5DT0RFX0gyNjRfU1REX1NFUEFSQVRFX0NP TE9SX1BMQU5FX0ZMQUdfU0VUX0JJVF9LSFIpKTsKLSAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19W RVJCT1NFLCAiICAgICAgICBxcHJpbWVfeV96ZXJvX3RyYW5zZm9ybV9ieXBhc3M6ICVpXG4iLAot ICAgICAgICAgICAhIShlbmMtPmNhcHMuc3RkU3ludGF4RmxhZ3MgJiBWS19WSURFT19FTkNPREVf SDI2NF9TVERfUVBQUklNRV9ZX1pFUk9fVFJBTlNGT1JNX0JZUEFTU19GTEFHX1NFVF9CSVRfS0hS KSk7Ci0gICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfVkVSQk9TRSwgIiAgICAgICAgc2NhbGluZ19s aXN0czogJWlcbiIsCi0gICAgICAgICAgICEhKGVuYy0+Y2Fwcy5zdGRTeW50YXhGbGFncyAmIFZL X1ZJREVPX0VOQ09ERV9IMjY0X1NURF9TQ0FMSU5HX01BVFJJWF9QUkVTRU5UX0ZMQUdfU0VUX0JJ VF9LSFIpKTsKLSAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19WRVJCT1NFLCAiICAgICAgICBjaHJv bWFfcXBfaW5kZXhfb2Zmc2V0OiAlaVxuIiwKLSAgICAgICAgICAgISEoZW5jLT5jYXBzLnN0ZFN5 bnRheEZsYWdzICYgVktfVklERU9fRU5DT0RFX0gyNjRfU1REX0NIUk9NQV9RUF9JTkRFWF9PRkZT RVRfQklUX0tIUikpOwotICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX1ZFUkJPU0UsICIgICAgICAg IHNlY29uZF9jaHJvbWFfcXBfaW5kZXhfb2Zmc2V0OiAlaVxuIiwKLSAgICAgICAgICAgISEoZW5j LT5jYXBzLnN0ZFN5bnRheEZsYWdzICYgVktfVklERU9fRU5DT0RFX0gyNjRfU1REX1NFQ09ORF9D SFJPTUFfUVBfSU5ERVhfT0ZGU0VUX0JJVF9LSFIpKTsKLSAgICBhdl9sb2coYXZjdHgsIEFWX0xP R19WRVJCT1NFLCAiICAgICAgICBwaWNfaW5pdF9xcDogJWlcbiIsCi0gICAgICAgICAgICEhKGVu Yy0+Y2Fwcy5zdGRTeW50YXhGbGFncyAmIFZLX1ZJREVPX0VOQ09ERV9IMjY0X1NURF9QSUNfSU5J VF9RUF9NSU5VUzI2X0JJVF9LSFIpKTsKLSAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19WRVJCT1NF LCAiICAgICAgICB3ZWlnaHRlZDolcyVzJXNcbiIsCi0gICAgICAgICAgIGVuYy0+Y2Fwcy5zdGRT eW50YXhGbGFncyAmIFZLX1ZJREVPX0VOQ09ERV9IMjY0X1NURF9XRUlHSFRFRF9QUkVEX0ZMQUdf U0VUX0JJVF9LSFIgPwotICAgICAgICAgICAgICAgIiBwcmVkIiA6ICIiLAotICAgICAgICAgICBl bmMtPmNhcHMuc3RkU3ludGF4RmxhZ3MgJiBWS19WSURFT19FTkNPREVfSDI2NF9TVERfV0VJR0hU RURfQklQUkVEX0lEQ19FWFBMSUNJVF9CSVRfS0hSID8KLSAgICAgICAgICAgICAgICIgYmlwcmVk X2V4cGxpY2l0IiA6ICIiLAotICAgICAgICAgICBlbmMtPmNhcHMuc3RkU3ludGF4RmxhZ3MgJiBW S19WSURFT19FTkNPREVfSDI2NF9TVERfV0VJR0hURURfQklQUkVEX0lEQ19JTVBMSUNJVF9CSVRf S0hSID8KLSAgICAgICAgICAgICAgICIgYmlwcmVkX2ltcGxpY2l0IiA6ICIiKTsKLSAgICBhdl9s b2coYXZjdHgsIEFWX0xPR19WRVJCT1NFLCAiICAgICAgICA4eDhfdHJhbnNmb3JtczogJWlcbiIs Ci0gICAgICAgICAgICEhKGVuYy0+Y2Fwcy5zdGRTeW50YXhGbGFncyAmIFZLX1ZJREVPX0VOQ09E RV9IMjY0X1NURF9UUkFOU0ZPUk1fOFg4X01PREVfRkxBR19TRVRfQklUX0tIUikpOwotICAgIGF2 X2xvZyhhdmN0eCwgQVZfTE9HX1ZFUkJPU0UsICIgICAgICAgIGRpc2FibGVfZGlyZWN0X3NwYXRp YWxfbXZfcHJlZDogJWlcbiIsCi0gICAgICAgICAgICEhKGVuYy0+Y2Fwcy5zdGRTeW50YXhGbGFn cyAmIFZLX1ZJREVPX0VOQ09ERV9IMjY0X1NURF9ESVJFQ1RfU1BBVElBTF9NVl9QUkVEX0ZMQUdf VU5TRVRfQklUX0tIUikpOwotICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX1ZFUkJPU0UsICIgICAg ICAgIGNvZGVyOiVzJXNcbiIsCi0gICAgICAgICAgIGVuYy0+Y2Fwcy5zdGRTeW50YXhGbGFncyAm IFZLX1ZJREVPX0VOQ09ERV9IMjY0X1NURF9FTlRST1BZX0NPRElOR19NT0RFX0ZMQUdfVU5TRVRf QklUX0tIUiA/Ci0gICAgICAgICAgICAgICAiIGNhYmFjIiA6ICIiLAotICAgICAgICAgICBlbmMt PmNhcHMuc3RkU3ludGF4RmxhZ3MgJiBWS19WSURFT19FTkNPREVfSDI2NF9TVERfRU5UUk9QWV9D T0RJTkdfTU9ERV9GTEFHX1NFVF9CSVRfS0hSID8KLSAgICAgICAgICAgICAgICIgY2F2bGMiIDog IiIpOwotICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX1ZFUkJPU0UsICIgICAgICAgIGRpcmVjdF84 eDhfaW5mZXJlbmNlOiAlaVxuIiwKLSAgICAgICAgICAgISEoZW5jLT5jYXBzLnN0ZFN5bnRheEZs YWdzICYgVktfVklERU9fRU5DT0RFX0gyNjRfU1REX0RJUkVDVF84WDhfSU5GRVJFTkNFX0ZMQUdf VU5TRVRfQklUX0tIUikpOwotICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX1ZFUkJPU0UsICIgICAg ICAgIGNvbnN0cmFpbmVkX2ludHJhX3ByZWQ6ICVpXG4iLAotICAgICAgICAgICAhIShlbmMtPmNh cHMuc3RkU3ludGF4RmxhZ3MgJiBWS19WSURFT19FTkNPREVfSDI2NF9TVERfQ09OU1RSQUlORURf SU5UUkFfUFJFRF9GTEFHX1NFVF9CSVRfS0hSKSk7Ci0gICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0df VkVSQk9TRSwgIiAgICAgICAgZGVibG9jazolcyVzJXNcbiIsCi0gICAgICAgICAgIGVuYy0+Y2Fw cy5zdGRTeW50YXhGbGFncyAmIFZLX1ZJREVPX0VOQ09ERV9IMjY0X1NURF9ERUJMT0NLSU5HX0ZJ TFRFUl9ESVNBQkxFRF9CSVRfS0hSID8KLSAgICAgICAgICAgICAgICIgZmlsdGVyX2Rpc2FibGlu ZyIgOiAiIiwKLSAgICAgICAgICAgZW5jLT5jYXBzLnN0ZFN5bnRheEZsYWdzICYgVktfVklERU9f RU5DT0RFX0gyNjRfU1REX0RFQkxPQ0tJTkdfRklMVEVSX0VOQUJMRURfQklUX0tIUiA/Ci0gICAg ICAgICAgICAgICAiIGZpbHRlcl9lbmFibGluZyIgOiAiIiwKLSAgICAgICAgICAgZW5jLT5jYXBz LnN0ZFN5bnRheEZsYWdzICYgVktfVklERU9fRU5DT0RFX0gyNjRfU1REX0RFQkxPQ0tJTkdfRklM VEVSX1BBUlRJQUxfQklUX0tIUiA/Ci0gICAgICAgICAgICAgICAiIGZpbHRlcl9wYXJ0aWFsIiA6 ICIiKTsKLQotICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX1ZFUkJPU0UsICIgICAgQ2FwYWJpbGl0 eSBmbGFnczpcbiIpOwotICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX1ZFUkJPU0UsICIgICAgICAg IGhkcl9jb21wbGlhbmNlOiAlaVxuIiwKLSAgICAgICAgICAgISEoZW5jLT5jYXBzLmZsYWdzICYg VktfVklERU9fRU5DT0RFX0gyNjRfQ0FQQUJJTElUWV9IUkRfQ09NUExJQU5DRV9CSVRfS0hSKSk7 Ci0gICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfVkVSQk9TRSwgIiAgICAgICAgcHJlZF93ZWlnaHRf dGFibGVfZ2VuZXJhdGVkOiAlaVxuIiwKLSAgICAgICAgICAgISEoZW5jLT5jYXBzLmZsYWdzICYg VktfVklERU9fRU5DT0RFX0gyNjRfQ0FQQUJJTElUWV9QUkVESUNUSU9OX1dFSUdIVF9UQUJMRV9H RU5FUkFURURfQklUX0tIUikpOwotICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX1ZFUkJPU0UsICIg ICAgICAgIHJvd191bmFsaWduZWRfc2xpY2U6ICVpXG4iLAotICAgICAgICAgICAhIShlbmMtPmNh cHMuZmxhZ3MgJiBWS19WSURFT19FTkNPREVfSDI2NF9DQVBBQklMSVRZX1JPV19VTkFMSUdORURf U0xJQ0VfQklUX0tIUikpOwotICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX1ZFUkJPU0UsICIgICAg ICAgIGRpZmZlcmVudF9zbGljZV90eXBlOiAlaVxuIiwKLSAgICAgICAgICAgISEoZW5jLT5jYXBz LmZsYWdzICYgVktfVklERU9fRU5DT0RFX0gyNjRfQ0FQQUJJTElUWV9ESUZGRVJFTlRfU0xJQ0Vf VFlQRV9CSVRfS0hSKSk7Ci0gICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfVkVSQk9TRSwgIiAgICAg ICAgYl9mcmFtZV9pbl9sMF9saXN0OiAlaVxuIiwKLSAgICAgICAgICAgISEoZW5jLT5jYXBzLmZs YWdzICYgVktfVklERU9fRU5DT0RFX0gyNjRfQ0FQQUJJTElUWV9CX0ZSQU1FX0lOX0wwX0xJU1Rf QklUX0tIUikpOwotICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX1ZFUkJPU0UsICIgICAgICAgIGJf ZnJhbWVfaW5fbDFfbGlzdDogJWlcbiIsCi0gICAgICAgICAgICEhKGVuYy0+Y2Fwcy5mbGFncyAm IFZLX1ZJREVPX0VOQ09ERV9IMjY0X0NBUEFCSUxJVFlfQl9GUkFNRV9JTl9MMV9MSVNUX0JJVF9L SFIpKTsKLSAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19WRVJCT1NFLCAiICAgICAgICBwZXJfcGlj dF90eXBlX21pbl9tYXhfcXA6ICVpXG4iLAotICAgICAgICAgICAhIShlbmMtPmNhcHMuZmxhZ3Mg JiBWS19WSURFT19FTkNPREVfSDI2NF9DQVBBQklMSVRZX1BFUl9QSUNUVVJFX1RZUEVfTUlOX01B WF9RUF9CSVRfS0hSKSk7Ci0gICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfVkVSQk9TRSwgIiAgICAg ICAgcGVyX3NsaWNlX2NvbnN0YW50X3FwOiAlaVxuIiwKLSAgICAgICAgICAgISEoZW5jLT5jYXBz LmZsYWdzICYgVktfVklERU9fRU5DT0RFX0gyNjRfQ0FQQUJJTElUWV9QRVJfU0xJQ0VfQ09OU1RB TlRfUVBfQklUX0tIUikpOwotICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX1ZFUkJPU0UsICIgICAg ICAgIGdlbmVyYXRlX3ByZWZpeF9uYWx1OiAlaVxuIiwKLSAgICAgICAgICAgISEoZW5jLT5jYXBz LmZsYWdzICYgVktfVklERU9fRU5DT0RFX0gyNjRfQ0FQQUJJTElUWV9HRU5FUkFURV9QUkVGSVhf TkFMVV9CSVRfS0hSKSk7Ci0KLSAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19WRVJCT1NFLCAiICAg IENhcGFiaWxpdGllczpcbiIpOwotICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX1ZFUkJPU0UsICIg ICAgICAgIG1heExldmVsSWRjOiAlaVxuIiwKLSAgICAgICAgICAgZW5jLT5jYXBzLm1heExldmVs SWRjKTsKLSAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19WRVJCT1NFLCAiICAgICAgICBtYXhTbGlj ZUNvdW50OiAlaVxuIiwKLSAgICAgICAgICAgZW5jLT5jYXBzLm1heFNsaWNlQ291bnQpOwotICAg IGF2X2xvZyhhdmN0eCwgQVZfTE9HX1ZFUkJPU0UsICIgICAgICAgIG1heChQL0IpUGljdHVyZUww UmVmZXJlbmNlQ291bnQ6ICVpIFAnczsgJWkgQidzXG4iLAotICAgICAgICAgICBlbmMtPmNhcHMu bWF4UFBpY3R1cmVMMFJlZmVyZW5jZUNvdW50LAotICAgICAgICAgICBlbmMtPmNhcHMubWF4QlBp Y3R1cmVMMFJlZmVyZW5jZUNvdW50KTsKLSAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19WRVJCT1NF LCAiICAgICAgICBtYXhMMVJlZmVyZW5jZUNvdW50OiAlaVxuIiwKLSAgICAgICAgICAgZW5jLT5j YXBzLm1heEwxUmVmZXJlbmNlQ291bnQpOwotICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX1ZFUkJP U0UsICIgICAgICAgIG1heFRlbXBvcmFsTGF5ZXJDb3VudDogJWlcbiIsCi0gICAgICAgICAgIGVu Yy0+Y2Fwcy5tYXhUZW1wb3JhbExheWVyQ291bnQpOwotICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9H X1ZFUkJPU0UsICIgICAgICAgIGV4cGVjdER5YWRpY1RlbXBvcmFsTGF5ZXJQYXR0ZXJuOiAlaVxu IiwKLSAgICAgICAgICAgZW5jLT5jYXBzLmV4cGVjdER5YWRpY1RlbXBvcmFsTGF5ZXJQYXR0ZXJu KTsKLSAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19WRVJCT1NFLCAiICAgICAgICBtaW4vbWF4IFFw OiBbJWksICVpXVxuIiwKLSAgICAgICAgICAgZW5jLT5jYXBzLm1pblFwLCBlbmMtPmNhcHMubWF4 UXApOwotICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX1ZFUkJPU0UsICIgICAgICAgIHByZWZlcnNH b3BSZW1haW5pbmdGcmFtZXM6ICVpXG4iLAotICAgICAgICAgICBlbmMtPmNhcHMucHJlZmVyc0dv cFJlbWFpbmluZ0ZyYW1lcyk7Ci0gICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfVkVSQk9TRSwgIiAg ICAgICAgcmVxdWlyZXNHb3BSZW1haW5pbmdGcmFtZXM6ICVpXG4iLAotICAgICAgICAgICBlbmMt PmNhcHMucmVxdWlyZXNHb3BSZW1haW5pbmdGcmFtZXMpOwotCi0gICAgZXJyID0gaW5pdF9lbmNf b3B0aW9ucyhhdmN0eCk7Ci0gICAgaWYgKGVyciA8IDApCi0gICAgICAgIHJldHVybiBlcnI7Ci0K LSAgICBmbGFncyA9IGN0eC0+Y29kZWMtPmZsYWdzOwotICAgIGlmICghZW5jLT5jYXBzLm1heFBQ aWN0dXJlTDBSZWZlcmVuY2VDb3VudCAmJgotICAgICAgICAhZW5jLT5jYXBzLm1heEJQaWN0dXJl TDBSZWZlcmVuY2VDb3VudCAmJgotICAgICAgICAhZW5jLT5jYXBzLm1heEwxUmVmZXJlbmNlQ291 bnQpIHsKLSAgICAgICAgLyogSW50cmEtb25seSAqLwotICAgICAgICBmbGFncyB8PSBGRl9IV19G TEFHX0lOVFJBX09OTFk7Ci0gICAgICAgIHJlZl9sMCA9IHJlZl9sMSA9IDA7Ci0gICAgfSBlbHNl IGlmICghZW5jLT5jYXBzLm1heFBQaWN0dXJlTDBSZWZlcmVuY2VDb3VudCkgewotICAgICAgICAv KiBObyBQLWZyYW1lcz8gSG93LiAqLwotICAgICAgICBiYXNlX2N0eC0+cF90b19ncGIgPSAxOwot ICAgICAgICByZWZfbDAgPSBlbmMtPmNhcHMubWF4QlBpY3R1cmVMMFJlZmVyZW5jZUNvdW50Owot ICAgICAgICByZWZfbDEgPSBlbmMtPmNhcHMubWF4TDFSZWZlcmVuY2VDb3VudDsKLSAgICB9IGVs c2UgaWYgKCFlbmMtPmNhcHMubWF4QlBpY3R1cmVMMFJlZmVyZW5jZUNvdW50ICYmCi0gICAgICAg ICAgICAgICAhZW5jLT5jYXBzLm1heEwxUmVmZXJlbmNlQ291bnQpIHsKLSAgICAgICAgLyogTm8g Qi1mcmFtZXMgKi8KLSAgICAgICAgZmxhZ3MgJj0gfihGRl9IV19GTEFHX0JfUElDVFVSRVMgfCBG Rl9IV19GTEFHX0JfUElDVFVSRV9SRUZFUkVOQ0VTKTsKLSAgICAgICAgcmVmX2wwID0gZW5jLT5j YXBzLm1heFBQaWN0dXJlTDBSZWZlcmVuY2VDb3VudDsKLSAgICAgICAgcmVmX2wxID0gMDsKLSAg ICB9IGVsc2UgewotICAgICAgICAvKiBQIGFuZCBCIGZyYW1lcyAqLwotICAgICAgICByZWZfbDAg PSBGRk1JTihlbmMtPmNhcHMubWF4UFBpY3R1cmVMMFJlZmVyZW5jZUNvdW50LAotICAgICAgICAg ICAgICAgICAgICAgICBlbmMtPmNhcHMubWF4QlBpY3R1cmVMMFJlZmVyZW5jZUNvdW50KTsKLSAg ICAgICAgcmVmX2wxID0gZW5jLT5jYXBzLm1heEwxUmVmZXJlbmNlQ291bnQ7Ci0gICAgfQotCi0g ICAgZXJyID0gZmZfaHdfYmFzZV9pbml0X2dvcF9zdHJ1Y3R1cmUoYmFzZV9jdHgsIGF2Y3R4LCBy ZWZfbDAsIHJlZl9sMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm bGFncywgMCk7Ci0gICAgaWYgKGVyciA8IDApCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICBi YXNlX2N0eC0+b3V0cHV0X2RlbGF5ID0gYmFzZV9jdHgtPmJfcGVyX3A7Ci0gICAgYmFzZV9jdHgt PmRlY29kZV9kZWxheSA9IGJhc2VfY3R4LT5tYXhfYl9kZXB0aDsKLQotICAgIC8qIFByZXBhcmUg U0VJICovCi0gICAgaWYgKGVuYy0+dW5pdF9lbGVtcyAmIFVOSVRfU0VJX0lERU5USUZJRVIpIHsK LSAgICAgICAgaW50IGxlbjsKLQotICAgICAgICBtZW1jcHkoZW5jLT5zZWlfaWRlbnRpZmllci51 dWlkX2lzb19pZWNfMTE1NzgsCi0gICAgICAgICAgICAgICB2dWxrYW5fZW5jb2RlX2gyNjRfc2Vp X2lkZW50aWZpZXJfdXVpZCwKLSAgICAgICAgICAgICAgIHNpemVvZihlbmMtPnNlaV9pZGVudGlm aWVyLnV1aWRfaXNvX2llY18xMTU3OCkpOwotCi0gICAgICAgIGxlbiA9IHNucHJpbnRmKE5VTEws IDAsCi0gICAgICAgICAgICAgICAgICAgICAgICIlcyAvIFZ1bGthbiB2aWRlbyAlaS4laS4laSAv ICVzICVpLiVpLiVpIC8gJXMiLAotICAgICAgICAgICAgICAgICAgICAgICBMSUJBVkNPREVDX0lE RU5ULAotICAgICAgICAgICAgICAgICAgICAgICBDT0RFQ19WRVIoZmZfdmtfZW5jX2gyNjRfZGVz Yy5leHRfcHJvcHMuc3BlY1ZlcnNpb24pLAotICAgICAgICAgICAgICAgICAgICAgICBzLT5kcml2 ZXJfcHJvcHMuZHJpdmVyTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgQ09ERUNfVkVSKHMt PnByb3BzLnByb3BlcnRpZXMuZHJpdmVyVmVyc2lvbiksCi0gICAgICAgICAgICAgICAgICAgICAg IHMtPnByb3BzLnByb3BlcnRpZXMuZGV2aWNlTmFtZSk7Ci0KLSAgICAgICAgaWYgKGxlbiA+PSAw KSB7Ci0gICAgICAgICAgICBlbmMtPnNlaV9pZGVudGlmaWVyX3N0cmluZyA9IGF2X21hbGxvYyhs ZW4gKyAxKTsKLSAgICAgICAgICAgIGlmICghZW5jLT5zZWlfaWRlbnRpZmllcl9zdHJpbmcpCi0g ICAgICAgICAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKLQotICAgICAgICAgICAgbGVu ID0gc25wcmludGYoZW5jLT5zZWlfaWRlbnRpZmllcl9zdHJpbmcsIGxlbiArIDEsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAiJXMgLyBWdWxrYW4gdmlkZW8gJWkuJWkuJWkgLyAlcyAlaS4l aS4laSAvICVzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQkFWQ09ERUNfSURFTlQs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBDT0RFQ19WRVIoZmZfdmtfZW5jX2gyNjRfZGVz Yy5leHRfcHJvcHMuc3BlY1ZlcnNpb24pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgcy0+ ZHJpdmVyX3Byb3BzLmRyaXZlck5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBDT0RF Q19WRVIocy0+cHJvcHMucHJvcGVydGllcy5kcml2ZXJWZXJzaW9uKSwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgIHMtPnByb3BzLnByb3BlcnRpZXMuZGV2aWNlTmFtZSk7Ci0KLSAgICAgICAg ICAgIGVuYy0+c2VpX2lkZW50aWZpZXIuZGF0YSAgICAgICAgPSBlbmMtPnNlaV9pZGVudGlmaWVy X3N0cmluZzsKLSAgICAgICAgICAgIGVuYy0+c2VpX2lkZW50aWZpZXIuZGF0YV9sZW5ndGggPSBs ZW4gKyAxOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyogSW5pdCBDQlMgKi8KLSAgICBlcnIg PSBmZl9jYnNfaW5pdCgmZW5jLT5jYnMsIEFWX0NPREVDX0lEX0gyNjQsIGF2Y3R4KTsKLSAgICBp ZiAoZXJyIDwgMCkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIC8qIENyZWF0ZSB1bml0cyBh bmQgc2Vzc2lvbiBwYXJhbWV0ZXJzICovCi0gICAgZXJyID0gaW5pdF9iYXNlX3VuaXRzKGF2Y3R4 KTsKLSAgICBpZiAoZXJyIDwgMCkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIC8qIFdyaXRl IG91dCBleHRyYWRhdGEgKi8KLSAgICBlcnIgPSBmZl92dWxrYW5fd3JpdGVfZ2xvYmFsX2hlYWRl cihhdmN0eCwgJmVuYy0+Y29tbW9uKTsKLSAgICBpZiAoZXJyIDwgMCkKLSAgICAgICAgcmV0dXJu IGVycjsKLQotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgYXZfY29sZCBpbnQgdnVsa2FuX2Vu Y29kZV9oMjY0X2Nsb3NlKEFWQ29kZWNDb250ZXh0ICphdmN0eCkKLXsKLSAgICBWdWxrYW5FbmNv ZGVIMjY0Q29udGV4dCAqZW5jID0gYXZjdHgtPnByaXZfZGF0YTsKLSAgICBmZl92dWxrYW5fZW5j b2RlX3VuaW5pdCgmZW5jLT5jb21tb24pOwotICAgIHJldHVybiAwOwotfQotCi0jZGVmaW5lIE9G RlNFVCh4KSBvZmZzZXRvZihWdWxrYW5FbmNvZGVIMjY0Q29udGV4dCwgeCkKLSNkZWZpbmUgRkxB R1MgKEFWX09QVF9GTEFHX1ZJREVPX1BBUkFNIHwgQVZfT1BUX0ZMQUdfRU5DT0RJTkdfUEFSQU0p Ci1zdGF0aWMgY29uc3QgQVZPcHRpb24gdnVsa2FuX2VuY29kZV9oMjY0X29wdGlvbnNbXSA9IHsK LSAgICBIV19CQVNFX0VOQ09ERV9DT01NT05fT1BUSU9OUywKLSAgICBWVUxLQU5fRU5DT0RFX0NP TU1PTl9PUFRJT05TLAotCi0gICAgeyAicHJvZmlsZSIsICJTZXQgcHJvZmlsZSAocHJvZmlsZV9p ZGMgYW5kIGNvbnN0cmFpbnRfc2V0Kl9mbGFnKSIsCi0gICAgICBPRkZTRVQoY29tbW9uLm9wdHMu cHJvZmlsZSksIEFWX09QVF9UWVBFX0lOVCwKLSAgICAgIHsgLmk2NCA9IEFWX1BST0ZJTEVfVU5L Tk9XTiB9LCBBVl9QUk9GSUxFX1VOS05PV04sIDB4ZmZmZiwgRkxBR1MsIC51bml0ID0gInByb2Zp bGUiIH0sCi0KLSNkZWZpbmUgUFJPRklMRShuYW1lLCB2YWx1ZSkgIG5hbWUsIE5VTEwsIDAsIEFW X09QVF9UWVBFX0NPTlNULCBcCi0gICAgICB7IC5pNjQgPSB2YWx1ZSB9LCAwLCAwLCBGTEFHUywg LnVuaXQgPSAicHJvZmlsZSIKLSAgICB7IFBST0ZJTEUoImNvbnN0cmFpbmVkX2Jhc2VsaW5lIiwg QVZfUFJPRklMRV9IMjY0X0NPTlNUUkFJTkVEX0JBU0VMSU5FKSB9LAotICAgIHsgUFJPRklMRSgi bWFpbiIsICAgICAgICAgICAgICAgICBBVl9QUk9GSUxFX0gyNjRfTUFJTikgfSwKLSAgICB7IFBS T0ZJTEUoImhpZ2giLCAgICAgICAgICAgICAgICAgQVZfUFJPRklMRV9IMjY0X0hJR0gpIH0sCi0g ICAgeyBQUk9GSUxFKCJoaWdoNDQ0cCIsICAgICAgICAgICAgIEFWX1BST0ZJTEVfSDI2NF9ISUdI XzEwKSB9LAotI3VuZGVmIFBST0ZJTEUKLQotICAgIHsgImxldmVsIiwgIlNldCBsZXZlbCAobGV2 ZWxfaWRjKSIsCi0gICAgICBPRkZTRVQoY29tbW9uLm9wdHMubGV2ZWwpLCBBVl9PUFRfVFlQRV9J TlQsCi0gICAgICB7IC5pNjQgPSBBVl9MRVZFTF9VTktOT1dOIH0sIEFWX0xFVkVMX1VOS05PV04s IDB4ZmYsIEZMQUdTLCAudW5pdCA9ICJsZXZlbCIgfSwKLQotI2RlZmluZSBMRVZFTChuYW1lLCB2 YWx1ZSkgbmFtZSwgTlVMTCwgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIFwKLSAgICAgIHsgLmk2NCA9 IHZhbHVlIH0sIDAsIDAsIEZMQUdTLCAudW5pdCA9ICJsZXZlbCIKLSAgICB7IExFVkVMKCIxIiwg ICAxMCkgfSwKLSAgICB7IExFVkVMKCIxLjEiLCAxMSkgfSwKLSAgICB7IExFVkVMKCIxLjIiLCAx MikgfSwKLSAgICB7IExFVkVMKCIxLjMiLCAxMykgfSwKLSAgICB7IExFVkVMKCIyIiwgICAyMCkg fSwKLSAgICB7IExFVkVMKCIyLjEiLCAyMSkgfSwKLSAgICB7IExFVkVMKCIyLjIiLCAyMikgfSwK LSAgICB7IExFVkVMKCIzIiwgICAzMCkgfSwKLSAgICB7IExFVkVMKCIzLjEiLCAzMSkgfSwKLSAg ICB7IExFVkVMKCIzLjIiLCAzMikgfSwKLSAgICB7IExFVkVMKCI0IiwgICA0MCkgfSwKLSAgICB7 IExFVkVMKCI0LjEiLCA0MSkgfSwKLSAgICB7IExFVkVMKCI0LjIiLCA0MikgfSwKLSAgICB7IExF VkVMKCI1IiwgICA1MCkgfSwKLSAgICB7IExFVkVMKCI1LjEiLCA1MSkgfSwKLSAgICB7IExFVkVM KCI1LjIiLCA1MikgfSwKLSAgICB7IExFVkVMKCI2IiwgICA2MCkgfSwKLSAgICB7IExFVkVMKCI2 LjEiLCA2MSkgfSwKLSAgICB7IExFVkVMKCI2LjIiLCA2MikgfSwKLSN1bmRlZiBMRVZFTAotCi0g ICAgeyAiY29kZXIiLCAiRW50cm9weSBjb2RlciB0eXBlIiwgT0ZGU0VUKHVuaXRfb3B0cy5jYWJh YyksIEFWX09QVF9UWVBFX0lOVCwgeyAuaTY0ID0gMSB9LCAwLCAxLCBGTEFHUywgImNvZGVyIiB9 LAotICAgICAgICB7ICJjYWJhYyIsIE5VTEwsIDAsIEFWX09QVF9UWVBFX0NPTlNULCB7IC5pNjQg PSAxIH0sIElOVF9NSU4sIElOVF9NQVgsIEZMQUdTLCAiY29kZXIiIH0sCi0gICAgICAgIHsgInZs YyIsICAgTlVMTCwgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsgLmk2NCA9IDAgfSwgSU5UX01JTiwg SU5UX01BWCwgRkxBR1MsICJjb2RlciIgfSwKLQotICAgIHsgInVuaXRzIiwgIlNldCB1bml0cyB0 byBpbmNsdWRlIiwgT0ZGU0VUKHVuaXRfZWxlbXMpLCBBVl9PUFRfVFlQRV9GTEFHUywgeyAuaTY0 ID0gVU5JVF9BVUQgfCBVTklUX1NFSV9JREVOVElGSUVSIHwgVU5JVF9TRUlfUkVDT1ZFUlkgfCBV TklUX1NFSV9USU1JTkcgfCBVTklUX1NFSV9BNTNfQ0MgfSwgMCwgSU5UX01BWCwgRkxBR1MsICJ1 bml0cyIgfSwKLSAgICAgICAgeyAiYXVkIiwgICAgICAgICJJbmNsdWRlIEFVRCB1bml0cyIsIDAs IEFWX09QVF9UWVBFX0NPTlNULCB7IC5pNjQgPSBVTklUX0FVRCB9LCBJTlRfTUlOLCBJTlRfTUFY LCBGTEFHUywgInVuaXRzIiB9LAotICAgICAgICB7ICJpZGVudGlmaWVyIiwgIkluY2x1ZGUgZW5j b2RlciB2ZXJzaW9uIGlkZW50aWZpZXIiLCAwLCBBVl9PUFRfVFlQRV9DT05TVCwgeyAuaTY0ID0g VU5JVF9TRUlfSURFTlRJRklFUiB9LCBJTlRfTUlOLCBJTlRfTUFYLCBGTEFHUywgInVuaXRzIiB9 LAotICAgICAgICB7ICJ0aW1pbmciLCAgICAgIkluY2x1ZGUgdGltaW5nIHBhcmFtZXRlcnMgKGJ1 ZmZlcmluZ19wZXJpb2QgYW5kIHBpY190aW1pbmcpIiwgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsg Lmk2NCA9IFVOSVRfU0VJX1RJTUlORyB9LCBJTlRfTUlOLCBJTlRfTUFYLCBGTEFHUywgInVuaXRz IiB9LAotICAgICAgICB7ICJyZWNvdmVyeSIsICAgIkluY2x1ZGUgcmVjb3ZlcnkgcG9pbnRzIHdo ZXJlIGFwcHJvcHJpYXRlIiwgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsgLmk2NCA9IFVOSVRfU0VJ X1JFQ09WRVJZIH0sIElOVF9NSU4sIElOVF9NQVgsIEZMQUdTLCAidW5pdHMiIH0sCi0gICAgICAg IHsgImE1M19jYyIsICAgICAiSW5jbHVkZSBBLzUzIGNhcHRpb24gZGF0YSIsIDAsIEFWX09QVF9U WVBFX0NPTlNULCB7IC5pNjQgPSBVTklUX1NFSV9BNTNfQ0MgfSwgSU5UX01JTiwgSU5UX01BWCwg RkxBR1MsICJ1bml0cyIgfSwKLQotICAgIHsgTlVMTCB9LAotfTsKLQotc3RhdGljIGNvbnN0IEZG Q29kZWNEZWZhdWx0IHZ1bGthbl9lbmNvZGVfaDI2NF9kZWZhdWx0c1tdID0gewotICAgIHsgImIi LCAgICAgICAgICAgICAgIjAiICAgfSwKLSAgICB7ICJiZiIsICAgICAgICAgICAgICIyIiAgIH0s Ci0gICAgeyAiZyIsICAgICAgICAgICAgICAiMzAwIiB9LAotICAgIHsgImlfcWZhY3RvciIsICAg ICAgIjEiICAgfSwKLSAgICB7ICJpX3FvZmZzZXQiLCAgICAgICIwIiAgIH0sCi0gICAgeyAiYl9x ZmFjdG9yIiwgICAgICAiMSIgICB9LAotICAgIHsgImJfcW9mZnNldCIsICAgICAgIjAiICAgfSwK LSAgICB7ICJxbWluIiwgICAgICAgICAgICItMSIgIH0sCi0gICAgeyAicW1heCIsICAgICAgICAg ICAiLTEiICB9LAotICAgIHsgInJlZnMiLCAgICAgICAgICAgIjAiICAgfSwKLSAgICB7IE5VTEwg fSwKLX07Ci0KLXN0YXRpYyBjb25zdCBBVkNsYXNzIHZ1bGthbl9lbmNvZGVfaDI2NF9jbGFzcyA9 IHsKLSAgICAuY2xhc3NfbmFtZSA9ICJoMjY0X3Z1bGthbiIsCi0gICAgLml0ZW1fbmFtZSAgPSBh dl9kZWZhdWx0X2l0ZW1fbmFtZSwKLSAgICAub3B0aW9uICAgICA9IHZ1bGthbl9lbmNvZGVfaDI2 NF9vcHRpb25zLAotICAgIC52ZXJzaW9uICAgID0gTElCQVZVVElMX1ZFUlNJT05fSU5ULAotfTsK LQotY29uc3QgRkZDb2RlYyBmZl9oMjY0X3Z1bGthbl9lbmNvZGVyID0gewotICAgIC5wLm5hbWUg ICAgICAgICA9ICJoMjY0X3Z1bGthbiIsCi0gICAgQ09ERUNfTE9OR19OQU1FKCJILjI2NC9BVkMg KFZ1bGthbikiKSwKLSAgICAucC50eXBlICAgICAgICAgPSBBVk1FRElBX1RZUEVfVklERU8sCi0g ICAgLnAuaWQgICAgICAgICAgID0gQVZfQ09ERUNfSURfSDI2NCwKLSAgICAucHJpdl9kYXRhX3Np emUgPSBzaXplb2YoVnVsa2FuRW5jb2RlSDI2NENvbnRleHQpLAotICAgIC5pbml0ICAgICAgICAg ICA9ICZ2dWxrYW5fZW5jb2RlX2gyNjRfaW5pdCwKLSAgICBGRl9DT0RFQ19SRUNFSVZFX1BBQ0tF VF9DQigmZmZfdnVsa2FuX2VuY29kZV9yZWNlaXZlX3BhY2tldCksCi0gICAgLmNsb3NlICAgICAg ICAgID0gJnZ1bGthbl9lbmNvZGVfaDI2NF9jbG9zZSwKLSAgICAucC5wcml2X2NsYXNzICAgPSAm dnVsa2FuX2VuY29kZV9oMjY0X2NsYXNzLAotICAgIC5wLmNhcGFiaWxpdGllcyA9IEFWX0NPREVD X0NBUF9ERUxBWSB8Ci0gICAgICAgICAgICAgICAgICAgICAgQVZfQ09ERUNfQ0FQX0hBUkRXQVJF IHwKLSAgICAgICAgICAgICAgICAgICAgICBBVl9DT0RFQ19DQVBfRFIxIHwKLSAgICAgICAgICAg ICAgICAgICAgICBBVl9DT0RFQ19DQVBfRU5DT0RFUl9GTFVTSCB8Ci0gICAgICAgICAgICAgICAg ICAgICAgQVZfQ09ERUNfQ0FQX0VOQ09ERVJfUkVPUkRFUkVEX09QQVFVRSwKLSAgICAuY2Fwc19p bnRlcm5hbCAgPSBGRl9DT0RFQ19DQVBfSU5JVF9DTEVBTlVQLAotICAgIC5kZWZhdWx0cyAgICAg ICA9IHZ1bGthbl9lbmNvZGVfaDI2NF9kZWZhdWx0cywKLSAgICBDT0RFQ19QSVhGTVRTKEFWX1BJ WF9GTVRfVlVMS0FOKSwKLSAgICAuaHdfY29uZmlncyAgICAgPSBmZl92dWxrYW5fZW5jb2RlX2h3 X2NvbmZpZ3MsCi0gICAgLnAud3JhcHBlcl9uYW1lID0gInZ1bGthbiIsCi19OwotLSAKMi40OS4x CgoKRnJvbSBjMTI0MjYwNDAwODFjNGQ5MjIyM2Y3YjRmYzYxMjA5YmYxZmIzN2U0IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBKYW1haWthMSA8bHVrYXN6Y3oxOEB3cC5wbD4KRGF0ZTog V2VkLCAzIFNlcCAyMDI1IDEzOjMzOjU0ICswMDAwClN1YmplY3Q6IFtQQVRDSCAwNzYvMTE4XSBD aGFuZ2luZyB2dWxrYW4gZmlsZSBkaXJlY3RvcnkKCi0tLQogbGliYXZjb2RlYy92dWxrYW4vdnVs a2FuX2VuY29kZV9oMjY0LmMgfCAxNjY4ICsrKysrKysrKysrKysrKysrKysrKysrKwogMSBmaWxl IGNoYW5nZWQsIDE2NjggaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2Y29k ZWMvdnVsa2FuL3Z1bGthbl9lbmNvZGVfaDI2NC5jCgpkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy92 dWxrYW4vdnVsa2FuX2VuY29kZV9oMjY0LmMgYi9saWJhdmNvZGVjL3Z1bGthbi92dWxrYW5fZW5j b2RlX2gyNjQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi4zM2YzMTlj YmNjCi0tLSAvZGV2L251bGwKKysrIGIvbGliYXZjb2RlYy92dWxrYW4vdnVsa2FuX2VuY29kZV9o MjY0LmMKQEAgLTAsMCArMSwxNjY4IEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZt cGVnLgorICoKKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNz ZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2Us IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogRkZtcGVnIGlz IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF LiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl IGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsg aWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwg NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVT QQorICovCisKKyNpbmNsdWRlICJsaWJhdnV0aWwvaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJsaWJh dnV0aWwvb3B0LmgiCisjaW5jbHVkZSAibGliYXZ1dGlsL21lbS5oIgorCisjaW5jbHVkZSAibGli YXZjb2RlYy9jYnMuaCIKKyNpbmNsdWRlICJsaWJhdmNvZGVjL2Nic19oMjY0LmgiCisjaW5jbHVk ZSAibGliYXZjb2RlYy9hdHNjX2E1My5oIgorCisjaW5jbHVkZSAibGliYXZjb2RlYy9oMjY0X2xl dmVscy5oIgorI2luY2x1ZGUgImxpYmF2Y29kZWMvaDI2NDVkYXRhLmgiCisjaW5jbHVkZSAibGli YXZjb2RlYy9jb2RlY19pbnRlcm5hbC5oIgorI2luY2x1ZGUgImxpYmF2Y29kZWMvdmVyc2lvbi5o IgorI2luY2x1ZGUgImxpYmF2Y29kZWMvaHdfYmFzZV9lbmNvZGVfaDI2NC5oIgorCisjaW5jbHVk ZSAidnVsa2FuX2VuY29kZS5oIgorCitlbnVtIFVuaXRFbGVtcyB7CisgICAgVU5JVF9BVUQgICAg ICAgICAgICA9IDEgPDwgMCwKKyAgICBVTklUX1NFSV9USU1JTkcgICAgID0gMSA8PCAxLAorICAg IFVOSVRfU0VJX0lERU5USUZJRVIgPSAxIDw8IDIsCisgICAgVU5JVF9TRUlfUkVDT1ZFUlkgICA9 IDEgPDwgMywKKyAgICBVTklUX1NFSV9BNTNfQ0MgICAgID0gMSA8PCA0LAorfTsKKworY29uc3Qg RkZWdWxrYW5FbmNvZGVEZXNjcmlwdG9yIGZmX3ZrX2VuY19oMjY0X2Rlc2MgPSB7CisgICAgLmNv ZGVjX2lkICAgICAgICAgPSBBVl9DT0RFQ19JRF9IMjY0LAorICAgIC5lbmNvZGVfZXh0ZW5zaW9u ID0gRkZfVktfRVhUX1ZJREVPX0VOQ09ERV9IMjY0LAorICAgIC5lbmNvZGVfb3AgICAgICAgID0g VktfVklERU9fQ09ERUNfT1BFUkFUSU9OX0VOQ09ERV9IMjY0X0JJVF9LSFIsCisgICAgLmV4dF9w cm9wcyA9IHsKKyAgICAgICAgLmV4dGVuc2lvbk5hbWUgPSBWS19TVERfVlVMS0FOX1ZJREVPX0NP REVDX0gyNjRfRU5DT0RFX0VYVEVOU0lPTl9OQU1FLAorICAgICAgICAuc3BlY1ZlcnNpb24gICA9 IFZLX1NURF9WVUxLQU5fVklERU9fQ09ERUNfSDI2NF9FTkNPREVfU1BFQ19WRVJTSU9OLAorICAg IH0sCit9OworCisvKiBSYW5kb20gKHZlcnNpb24gNCkgSVNPIDExNTc4IFVVSUQuICovCitzdGF0 aWMgY29uc3QgdWludDhfdCB2dWxrYW5fZW5jb2RlX2gyNjRfc2VpX2lkZW50aWZpZXJfdXVpZFsx Nl0gPSB7CisgICAgMHgwMywgMHhmZCwgMHhmMiwgMHgwYSwgMHg1ZCwgMHg0YywgMHgwNSwgMHg0 OCwKKyAgICAweDIwLCAweDk4LCAweGNhLCAweDZiLCAweDBjLCAweDk1LCAweDMwLCAweDFjLAor fTsKKwordHlwZWRlZiBzdHJ1Y3QgVnVsa2FuRW5jb2RlSDI2NFBpY3R1cmUgeworICAgIGludCBm cmFtZV9udW07CisgICAgaW50NjRfdCBsYXN0X2lkcl9mcmFtZTsKKyAgICB1aW50MTZfdCBpZHJf cGljX2lkOworICAgIGludCBwcmltYXJ5X3BpY190eXBlOworICAgIGludCBzbGljZV90eXBlOwor ICAgIGludCBwaWNfb3JkZXJfY250OworCisgICAgZW51bSBVbml0RWxlbXMgdW5pdHNfbmVlZGVk OworCisgICAgVmtWaWRlb0VuY29kZUgyNjRSYXRlQ29udHJvbEluZm9LSFIgdmtyY19pbmZvOwor ICAgIFZrVmlkZW9FbmNvZGVIMjY0UmF0ZUNvbnRyb2xMYXllckluZm9LSFIgdmtyY19sYXllcl9p bmZvOworICAgIFZrVmlkZW9FbmNvZGVIMjY0R29wUmVtYWluaW5nRnJhbWVJbmZvS0hSIHZrcmNf cmVtYWluaW5nOworCisgICAgU3RkVmlkZW9FbmNvZGVIMjY0V2VpZ2h0VGFibGUgc2xpY2Vfd3Q7 CisgICAgU3RkVmlkZW9FbmNvZGVIMjY0U2xpY2VIZWFkZXIgc2xpY2VfaGRyOworICAgIFZrVmlk ZW9FbmNvZGVIMjY0TmFsdVNsaWNlSW5mb0tIUiB2a3NsaWNlOworCisgICAgU3RkVmlkZW9FbmNv ZGVIMjY0UGljdHVyZUluZm8gICBoMjY0cGljX2luZm87CisgICAgVmtWaWRlb0VuY29kZUgyNjRQ aWN0dXJlSW5mb0tIUiB2a2gyNjRwaWNfaW5mbzsKKworICAgIFN0ZFZpZGVvRW5jb2RlSDI2NFJl ZmVyZW5jZUluZm8gaDI2NGRwYl9pbmZvOworICAgIFZrVmlkZW9FbmNvZGVIMjY0RHBiU2xvdElu Zm9LSFIgdmtoMjY0ZHBiX2luZm87CisKKyAgICBTdGRWaWRlb0VuY29kZUgyNjRSZWZMaXN0TW9k RW50cnkgbW9kc1tNQVhfUkVGRVJFTkNFX0xJU1RfTlVNXVtIMjY0X01BWF9SUExNX0NPVU5UXTsK KyAgICBTdGRWaWRlb0VuY29kZUgyNjRSZWZQaWNNYXJraW5nRW50cnkgbW1jb1tIMjY0X01BWF9S UExNX0NPVU5UXTsKKyAgICBTdGRWaWRlb0VuY29kZUgyNjRSZWZlcmVuY2VMaXN0c0luZm8gcmVm X2xpc3RfaW5mbzsKK30gVnVsa2FuRW5jb2RlSDI2NFBpY3R1cmU7CisKK3R5cGVkZWYgc3RydWN0 IFZ1bGthbkVuY29kZUgyNjRDb250ZXh0IHsKKyAgICBGRlZ1bGthbkVuY29kZUNvbnRleHQgY29t bW9uOworCisgICAgRkZIV0Jhc2VFbmNvZGVIMjY0IHVuaXRzOworICAgIEZGSFdCYXNlRW5jb2Rl SDI2NE9wdHMgdW5pdF9vcHRzOworCisgICAgZW51bSBVbml0RWxlbXMgdW5pdF9lbGVtczsKKwor ICAgIHVpbnQ4X3QgZml4ZWRfcXBfcDsKKyAgICB1aW50OF90IGZpeGVkX3FwX2I7CisKKyAgICBW a1ZpZGVvRW5jb2RlSDI2NFByb2ZpbGVJbmZvS0hSIHByb2ZpbGU7CisKKyAgICBWa1ZpZGVvRW5j b2RlSDI2NENhcGFiaWxpdGllc0tIUiBjYXBzOworICAgIFZrVmlkZW9FbmNvZGVIMjY0UXVhbGl0 eUxldmVsUHJvcGVydGllc0tIUiBxdWFsaXR5X3Byb3BzOworCisgICAgQ29kZWRCaXRzdHJlYW1D b250ZXh0ICpjYnM7CisgICAgQ29kZWRCaXRzdHJlYW1GcmFnbWVudCBjdXJyZW50X2FjY2Vzc191 bml0OworCisgICAgSDI2NFJhd0FVRCAgICAgICAgICAgICAgICAgIHJhd19hdWQ7CisKKyAgICBT RUlSYXdVc2VyRGF0YVVucmVnaXN0ZXJlZCAgc2VpX2lkZW50aWZpZXI7CisgICAgSDI2NFJhd1NF SVBpY1RpbWluZyAgICAgICAgIHNlaV9waWNfdGltaW5nOworICAgIEgyNjRSYXdTRUlSZWNvdmVy eVBvaW50ICAgICBzZWlfcmVjb3ZlcnlfcG9pbnQ7CisgICAgU0VJUmF3VXNlckRhdGFSZWdpc3Rl cmVkICAgIHNlaV9hNTNjYzsKKyAgICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAqc2VpX2E1 M2NjX2RhdGE7CisgICAgY2hhciAgICAgICAgICAgICAgICAgICAgICAgKnNlaV9pZGVudGlmaWVy X3N0cmluZzsKK30gVnVsa2FuRW5jb2RlSDI2NENvbnRleHQ7CisKK3N0YXRpYyBpbnQgaW5pdF9w aWNfcmMoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LCBGRkhXQmFzZUVuY29kZVBpY3R1cmUgKnBpYywK KyAgICAgICAgICAgICAgICAgICAgICAgVmtWaWRlb0VuY29kZVJhdGVDb250cm9sSW5mb0tIUiAq cmNfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgVmtWaWRlb0VuY29kZVJhdGVDb250cm9s TGF5ZXJJbmZvS0hSICpyY19sYXllcikKK3sKKyAgICBWdWxrYW5FbmNvZGVIMjY0Q29udGV4dCAq ZW5jID0gYXZjdHgtPnByaXZfZGF0YTsKKyAgICBGRlZ1bGthbkVuY29kZUNvbnRleHQgICAqY3R4 ID0gJmVuYy0+Y29tbW9uOworICAgIFZ1bGthbkVuY29kZUgyNjRQaWN0dXJlICAqaHAgPSBwaWMt PmNvZGVjX3ByaXY7CisKKyAgICBocC0+dmtyY19pbmZvID0gKFZrVmlkZW9FbmNvZGVIMjY0UmF0 ZUNvbnRyb2xJbmZvS0hSKSB7CisgICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX1ZJ REVPX0VOQ09ERV9IMjY0X1JBVEVfQ09OVFJPTF9JTkZPX0tIUiwKKyAgICAgICAgLmZsYWdzID0g VktfVklERU9fRU5DT0RFX0gyNjRfUkFURV9DT05UUk9MX1JFRkVSRU5DRV9QQVRURVJOX0ZMQVRf QklUX0tIUiB8CisgICAgICAgICAgICAgICAgIFZLX1ZJREVPX0VOQ09ERV9IMjY0X1JBVEVfQ09O VFJPTF9SRUdVTEFSX0dPUF9CSVRfS0hSLAorICAgICAgICAuaWRyUGVyaW9kID0gY3R4LT5iYXNl LmdvcF9zaXplLAorICAgICAgICAuZ29wRnJhbWVDb3VudCA9IGN0eC0+YmFzZS5nb3Bfc2l6ZSwK KyAgICAgICAgLmNvbnNlY3V0aXZlQkZyYW1lQ291bnQgPSBGRk1BWChjdHgtPmJhc2UuYl9wZXJf cCAtIDEsIDApLAorICAgICAgICAudGVtcG9yYWxMYXllckNvdW50ID0gMCwKKyAgICB9OworICAg IHJjX2luZm8tPnBOZXh0ID0gJmhwLT52a3JjX2luZm87CisKKyAgICBpZiAocmNfaW5mby0+cmF0 ZUNvbnRyb2xNb2RlID4gVktfVklERU9fRU5DT0RFX1JBVEVfQ09OVFJPTF9NT0RFX0RJU0FCTEVE X0JJVF9LSFIpIHsKKyAgICAgICAgcmNfaW5mby0+dmlydHVhbEJ1ZmZlclNpemVJbk1zID0gKGVu Yy0+dW5pdF9vcHRzLmhyZF9idWZmZXJfc2l6ZSAqIDEwMDBMTCkgLyBhdmN0eC0+Yml0X3JhdGU7 CisgICAgICAgIHJjX2luZm8tPmluaXRpYWxWaXJ0dWFsQnVmZmVyU2l6ZUluTXMgPSAoZW5jLT51 bml0X29wdHMuaW5pdGlhbF9idWZmZXJfZnVsbG5lc3MgKiAxMDAwTEwpIC8gYXZjdHgtPmJpdF9y YXRlOworCisgICAgICAgIGhwLT52a3JjX2xheWVyX2luZm8gPSAoVmtWaWRlb0VuY29kZUgyNjRS YXRlQ29udHJvbExheWVySW5mb0tIUikgeworICAgICAgICAgICAgLnNUeXBlID0gVktfU1RSVUNU VVJFX1RZUEVfVklERU9fRU5DT0RFX0gyNjRfUkFURV9DT05UUk9MX0xBWUVSX0lORk9fS0hSLAor CisgICAgICAgICAgICAudXNlTWluUXAgID0gYXZjdHgtPnFtaW4gPiAwLAorICAgICAgICAgICAg Lm1pblFwLnFwSSA9IGF2Y3R4LT5xbWluID4gMCA/IGF2Y3R4LT5xbWluIDogMCwKKyAgICAgICAg ICAgIC5taW5RcC5xcFAgPSBhdmN0eC0+cW1pbiA+IDAgPyBhdmN0eC0+cW1pbiA6IDAsCisgICAg ICAgICAgICAubWluUXAucXBCID0gYXZjdHgtPnFtaW4gPiAwID8gYXZjdHgtPnFtaW4gOiAwLAor CisgICAgICAgICAgICAudXNlTWF4UXAgID0gYXZjdHgtPnFtYXggPiAwLAorICAgICAgICAgICAg Lm1heFFwLnFwSSA9IGF2Y3R4LT5xbWF4ID4gMCA/IGF2Y3R4LT5xbWF4IDogMCwKKyAgICAgICAg ICAgIC5tYXhRcC5xcFAgPSBhdmN0eC0+cW1heCA+IDAgPyBhdmN0eC0+cW1heCA6IDAsCisgICAg ICAgICAgICAubWF4UXAucXBCID0gYXZjdHgtPnFtYXggPiAwID8gYXZjdHgtPnFtYXggOiAwLAor CisgICAgICAgICAgICAudXNlTWF4RnJhbWVTaXplID0gMCwKKyAgICAgICAgfTsKKyAgICAgICAg cmNfbGF5ZXItPnBOZXh0ID0gJmhwLT52a3JjX2xheWVyX2luZm87CisgICAgICAgIGhwLT52a3Jj X2luZm8udGVtcG9yYWxMYXllckNvdW50ID0gMTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30K Kworc3RhdGljIGludCB2a19lbmNfaDI2NF91cGRhdGVfcGljX2luZm8oQVZDb2RlY0NvbnRleHQg KmF2Y3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkZIV0Jhc2VF bmNvZGVQaWN0dXJlICpwaWMpCit7CisgICAgVnVsa2FuRW5jb2RlSDI2NENvbnRleHQgICAqZW5j ID0gYXZjdHgtPnByaXZfZGF0YTsKKyAgICBGRlZ1bGthbkVuY29kZUNvbnRleHQgICAgICpjdHgg PSAmZW5jLT5jb21tb247CisgICAgVnVsa2FuRW5jb2RlSDI2NFBpY3R1cmUgICAgKmhwID0gcGlj LT5jb2RlY19wcml2OworICAgIEZGSFdCYXNlRW5jb2RlUGljdHVyZSAgICAqcHJldiA9IHBpYy0+ cHJldjsKKyAgICBWdWxrYW5FbmNvZGVIMjY0UGljdHVyZSAqaHByZXYgPSBwcmV2ID8gcHJldi0+ Y29kZWNfcHJpdiA6IE5VTEw7CisKKyAgICBpZiAocGljLT50eXBlID09IEZGX0hXX1BJQ1RVUkVf VFlQRV9JRFIpIHsKKyAgICAgICAgYXZfYXNzZXJ0MChwaWMtPmRpc3BsYXlfb3JkZXIgPT0gcGlj LT5lbmNvZGVfb3JkZXIpOworCisgICAgICAgIGhwLT5mcmFtZV9udW0gICAgICA9IDA7CisgICAg ICAgIGhwLT5sYXN0X2lkcl9mcmFtZSA9IHBpYy0+ZGlzcGxheV9vcmRlcjsKKyAgICAgICAgaHAt Pmlkcl9waWNfaWQgICAgID0gaHByZXYgPyBocHJldi0+aWRyX3BpY19pZCArIDEgOiAwOworCisg ICAgICAgIGhwLT5wcmltYXJ5X3BpY190eXBlID0gMDsKKyAgICAgICAgaHAtPnNsaWNlX3R5cGUg ICAgICAgPSBTVERfVklERU9fSDI2NF9TTElDRV9UWVBFX0k7CisgICAgfSBlbHNlIHsKKyAgICAg ICAgYXZfYXNzZXJ0MChwcmV2KTsKKworICAgICAgICBocC0+ZnJhbWVfbnVtID0gaHByZXYtPmZy YW1lX251bSArIHByZXYtPmlzX3JlZmVyZW5jZTsKKworICAgICAgICBocC0+bGFzdF9pZHJfZnJh bWUgPSBocHJldi0+bGFzdF9pZHJfZnJhbWU7CisgICAgICAgIGhwLT5pZHJfcGljX2lkICAgICA9 IGhwcmV2LT5pZHJfcGljX2lkOworCisgICAgICAgIGlmIChwaWMtPnR5cGUgPT0gRkZfSFdfUElD VFVSRV9UWVBFX0kpIHsKKyAgICAgICAgICAgIGhwLT5zbGljZV90eXBlICAgICAgID0gU1REX1ZJ REVPX0gyNjRfU0xJQ0VfVFlQRV9JOworICAgICAgICAgICAgaHAtPnByaW1hcnlfcGljX3R5cGUg PSAwOworICAgICAgICB9IGVsc2UgaWYgKHBpYy0+dHlwZSA9PSBGRl9IV19QSUNUVVJFX1RZUEVf UCkgeworICAgICAgICAgICAgaHAtPnNsaWNlX3R5cGUgICAgICAgPSBTVERfVklERU9fSDI2NF9T TElDRV9UWVBFX1A7CisgICAgICAgICAgICBocC0+cHJpbWFyeV9waWNfdHlwZSA9IDE7CisgICAg ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBocC0+c2xpY2VfdHlwZSAgICAgICA9IFNURF9WSURF T19IMjY0X1NMSUNFX1RZUEVfQjsKKyAgICAgICAgICAgIGhwLT5wcmltYXJ5X3BpY190eXBlID0g MjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGhwLT5waWNfb3JkZXJfY250ID0gcGljLT5kaXNw bGF5X29yZGVyIC0gaHAtPmxhc3RfaWRyX2ZyYW1lOworICAgIGlmIChlbmMtPnVuaXRzLnJhd19z cHMucGljX29yZGVyX2NudF90eXBlID09IDIpCisgICAgICAgIGhwLT5waWNfb3JkZXJfY250ICo9 IDI7CisKKyAgICBocC0+dW5pdHNfbmVlZGVkID0gMDsKKworICAgIGlmIChlbmMtPnVuaXRfZWxl bXMgJiBVTklUX1NFSV9JREVOVElGSUVSICYmIHBpYy0+ZW5jb2RlX29yZGVyID09IDApCisgICAg ICAgIGhwLT51bml0c19uZWVkZWQgfD0gVU5JVF9TRUlfSURFTlRJRklFUjsKKworICAgIGlmIChl bmMtPnVuaXRfZWxlbXMgJiBVTklUX1NFSV9USU1JTkcpIHsKKyAgICAgICAgZW5jLT5zZWlfcGlj X3RpbWluZyA9IChIMjY0UmF3U0VJUGljVGltaW5nKSB7CisgICAgICAgICAgICAuY3BiX3JlbW92 YWxfZGVsYXkgPSAyICogKHBpYy0+ZW5jb2RlX29yZGVyIC0gaHAtPmxhc3RfaWRyX2ZyYW1lKSwK KyAgICAgICAgICAgIC5kcGJfb3V0cHV0X2RlbGF5ICA9IDIgKiAocGljLT5kaXNwbGF5X29yZGVy IC0gcGljLT5lbmNvZGVfb3JkZXIgKyBjdHgtPmJhc2UubWF4X2JfZGVwdGgpLAorICAgICAgICB9 OworCisgICAgICAgIGhwLT51bml0c19uZWVkZWQgfD0gVU5JVF9TRUlfVElNSU5HOworICAgIH0K KworICAgIGlmIChlbmMtPnVuaXRfZWxlbXMgJiBVTklUX1NFSV9SRUNPVkVSWSAmJiBwaWMtPnR5 cGUgPT0gRkZfSFdfUElDVFVSRV9UWVBFX0kpIHsKKyAgICAgICAgZW5jLT5zZWlfcmVjb3Zlcnlf cG9pbnQgPSAoSDI2NFJhd1NFSVJlY292ZXJ5UG9pbnQpIHsKKyAgICAgICAgICAgIC5yZWNvdmVy eV9mcmFtZV9jbnQgPSAwLAorICAgICAgICAgICAgLmV4YWN0X21hdGNoX2ZsYWcgICA9IDEsCisg ICAgICAgICAgICAuYnJva2VuX2xpbmtfZmxhZyAgID0gY3R4LT5iYXNlLmJfcGVyX3AgPiAwLAor ICAgICAgICB9OworCisgICAgICAgIGhwLT51bml0c19uZWVkZWQgfD0gVU5JVF9TRUlfUkVDT1ZF Ulk7CisgICAgfQorCisgICAgaWYgKGVuYy0+dW5pdF9lbGVtcyAmIFVOSVRfU0VJX0E1M19DQykg eworICAgICAgICBpbnQgZXJyOworICAgICAgICBzaXplX3Qgc2VpX2E1M2NjX2xlbjsKKyAgICAg ICAgYXZfZnJlZXAoJmVuYy0+c2VpX2E1M2NjX2RhdGEpOworICAgICAgICBlcnIgPSBmZl9hbGxv Y19hNTNfc2VpKHBpYy0+aW5wdXRfaW1hZ2UsIDAsICZlbmMtPnNlaV9hNTNjY19kYXRhLCAmc2Vp X2E1M2NjX2xlbik7CisgICAgICAgIGlmIChlcnIgPCAwKQorICAgICAgICAgICAgcmV0dXJuIGVy cjsKKyAgICAgICAgaWYgKGVuYy0+c2VpX2E1M2NjX2RhdGEgIT0gTlVMTCkgeworICAgICAgICAg ICAgZW5jLT5zZWlfYTUzY2MuaXR1X3RfdDM1X2NvdW50cnlfY29kZSA9IDE4MTsKKyAgICAgICAg ICAgIGVuYy0+c2VpX2E1M2NjLmRhdGEgPSAodWludDhfdCAqKWVuYy0+c2VpX2E1M2NjX2RhdGEg KyAxOworICAgICAgICAgICAgZW5jLT5zZWlfYTUzY2MuZGF0YV9sZW5ndGggPSBzZWlfYTUzY2Nf bGVuIC0gMTsKKworICAgICAgICAgICAgaHAtPnVuaXRzX25lZWRlZCB8PSBVTklUX1NFSV9BNTNf Q0M7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQg c2V0dXBfc2xpY2VzKEFWQ29kZWNDb250ZXh0ICphdmN0eCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICBGRkhXQmFzZUVuY29kZVBpY3R1cmUgKnBpYykKK3sKKyAgICBWdWxrYW5FbmNvZGVIMjY0 Q29udGV4dCAqZW5jID0gYXZjdHgtPnByaXZfZGF0YTsKKyAgICBWdWxrYW5FbmNvZGVIMjY0UGlj dHVyZSAqaHAgPSBwaWMtPmNvZGVjX3ByaXY7CisKKyAgICBocC0+c2xpY2Vfd3QgPSAoU3RkVmlk ZW9FbmNvZGVIMjY0V2VpZ2h0VGFibGUpIHsKKyAgICAgICAgLmZsYWdzID0gKFN0ZFZpZGVvRW5j b2RlSDI2NFdlaWdodFRhYmxlRmxhZ3MpIHsKKyAgICAgICAgICAgIC5sdW1hX3dlaWdodF9sMF9m bGFnID0gMCwKKyAgICAgICAgICAgIC5jaHJvbWFfd2VpZ2h0X2wwX2ZsYWcgPSAwLAorICAgICAg ICAgICAgLmx1bWFfd2VpZ2h0X2wxX2ZsYWcgPSAwLAorICAgICAgICAgICAgLmNocm9tYV93ZWln aHRfbDFfZmxhZyA9IDAsCisgICAgICAgIH0sCisgICAgICAgIC5sdW1hX2xvZzJfd2VpZ2h0X2Rl bm9tID0gMCwKKyAgICAgICAgLmNocm9tYV9sb2cyX3dlaWdodF9kZW5vbSA9IDAsCisgICAgICAg IC5sdW1hX3dlaWdodF9sMCA9IHsgMCB9LAorICAgICAgICAubHVtYV9vZmZzZXRfbDAgPSB7IDAg fSwKKyAgICAgICAgLmNocm9tYV93ZWlnaHRfbDAgPSB7IHsgMCB9IH0sCisgICAgICAgIC5jaHJv bWFfb2Zmc2V0X2wwID0geyB7IDAgfSB9LAorICAgICAgICAubHVtYV93ZWlnaHRfbDEgPSB7IDAg fSwKKyAgICAgICAgLmx1bWFfb2Zmc2V0X2wxID0geyAwIH0sCisgICAgICAgIC5jaHJvbWFfd2Vp Z2h0X2wxID0geyB7IDAgfSB9LAorICAgICAgICAuY2hyb21hX29mZnNldF9sMSA9IHsgeyAwIH0g fSwKKyAgICB9OworCisgICAgaHAtPnNsaWNlX2hkciA9IChTdGRWaWRlb0VuY29kZUgyNjRTbGlj ZUhlYWRlcikgeworICAgICAgICAuZmxhZ3MgPSAoU3RkVmlkZW9FbmNvZGVIMjY0U2xpY2VIZWFk ZXJGbGFncykgeworICAgICAgICAgICAgLmRpcmVjdF9zcGF0aWFsX212X3ByZWRfZmxhZyA9IDEs CisgICAgICAgICAgICAvKiBUaGUgdmtfc2FtcGxlcyBjb2RlIGRvZXMgdGhpcyAqLworICAgICAg ICAgICAgLm51bV9yZWZfaWR4X2FjdGl2ZV9vdmVycmlkZV9mbGFnID0KKyAgICAgICAgICAgICAg ICAoKGVuYy0+dW5pdHMucmF3X3Bwcy5udW1fcmVmX2lkeF9sMF9kZWZhdWx0X2FjdGl2ZV9taW51 czEpICYmCisgICAgICAgICAgICAgICAgIChwaWMtPnR5cGUgPT0gRkZfSFdfUElDVFVSRV9UWVBF X0IpKSA/IDEgOiAwLAorICAgICAgICB9LAorICAgICAgICAuZmlyc3RfbWJfaW5fc2xpY2UgPSAx LAorICAgICAgICAuc2xpY2VfdHlwZSA9IGhwLT5zbGljZV90eXBlLAorICAgICAgICAuc2xpY2Vf YWxwaGFfYzBfb2Zmc2V0X2RpdjIgPSAwLAorICAgICAgICAuc2xpY2VfYmV0YV9vZmZzZXRfZGl2 MiA9IDAsCisgICAgICAgIC5zbGljZV9xcF9kZWx0YSA9IDAsIC8qIEZpbGxlZCBpbiBiZWxvdyAq LworICAgICAgICAvKiBSZXNlcnZlZCAqLworICAgICAgICAuY2FiYWNfaW5pdF9pZGMgPSAwLAor ICAgICAgICAuZGlzYWJsZV9kZWJsb2NraW5nX2ZpbHRlcl9pZGMgPSAwLAorICAgICAgICAucFdl aWdodFRhYmxlID0gTlVMTCwgLy8gJmhwLT5zbGljZV93dCwKKyAgICB9OworCisgICAgaHAtPnZr c2xpY2UgPSAoVmtWaWRlb0VuY29kZUgyNjROYWx1U2xpY2VJbmZvS0hSKSB7CisgICAgICAgIC5z VHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX1ZJREVPX0VOQ09ERV9IMjY0X05BTFVfU0xJQ0VfSU5G T19LSFIsCisgICAgICAgIC5wTmV4dCA9IE5VTEwsCisgICAgICAgIC5jb25zdGFudFFwID0gcGlj LT50eXBlID09IEZGX0hXX1BJQ1RVUkVfVFlQRV9CID8gZW5jLT5maXhlZF9xcF9iIDoKKyAgICAg ICAgICAgICAgICAgICAgICBwaWMtPnR5cGUgPT0gRkZfSFdfUElDVFVSRV9UWVBFX1AgPyBlbmMt PmZpeGVkX3FwX3AgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGVuYy0+dW5pdF9vcHRzLmZpeGVkX3FwX2lkciwKKyAgICAgICAgLnBT dGRTbGljZUhlYWRlciA9ICZocC0+c2xpY2VfaGRyLAorICAgIH07CisKKyAgICBpZiAoZW5jLT5j b21tb24ub3B0cy5yY19tb2RlICE9IFZLX1ZJREVPX0VOQ09ERV9SQVRFX0NPTlRST0xfTU9ERV9E SVNBQkxFRF9CSVRfS0hSKQorICAgICAgICBocC0+dmtzbGljZS5jb25zdGFudFFwID0gMDsKKwor ICAgIGhwLT5zbGljZV9oZHIuc2xpY2VfcXBfZGVsdGEgPSBocC0+dmtzbGljZS5jb25zdGFudFFw IC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVuYy0+dW5pdHMucmF3X3Bw cy5waWNfaW5pdF9xcF9taW51czI2ICsgMjYpOworCisgICAgaHAtPnZraDI2NHBpY19pbmZvLnBO YWx1U2xpY2VFbnRyaWVzID0gJmhwLT52a3NsaWNlOworICAgIGhwLT52a2gyNjRwaWNfaW5mby5u YWx1U2xpY2VFbnRyeUNvdW50ID0gMTsKK30KKworc3RhdGljIHZvaWQgdmtfZW5jX2gyNjRfZGVm YXVsdF9yZWZfcGljX2xpc3QoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkZIV0Jhc2VFbmNvZGVQaWN0dXJlICpwaWMs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGRkhXQmFzZUVu Y29kZVBpY3R1cmUgKipycGwwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgRkZIV0Jhc2VFbmNvZGVQaWN0dXJlICoqcnBsMSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqcnBsX3NpemUpCit7CisgICAgRkZIV0Jh c2VFbmNvZGVQaWN0dXJlICpwcmV2OworICAgIFZ1bGthbkVuY29kZUgyNjRQaWN0dXJlICpocCwg KmhuLCAqaGM7CisgICAgaW50IGksIGosIG4gPSAwOworCisgICAgcHJldiA9IHBpYy0+cHJldjsK KyAgICBhdl9hc3NlcnQwKHByZXYpOworICAgIGhwID0gcGljLT5jb2RlY19wcml2OworCisgICAg Zm9yIChpID0gMDsgaSA8IHBpYy0+cHJldi0+bmJfZHBiX3BpY3M7IGkrKykgeworICAgICAgICBo biA9IHByZXYtPmRwYltpXS0+Y29kZWNfcHJpdjsKKyAgICAgICAgYXZfYXNzZXJ0MChobi0+ZnJh bWVfbnVtIDwgaHAtPmZyYW1lX251bSk7CisKKyAgICAgICAgaWYgKHBpYy0+dHlwZSA9PSBGRl9I V19QSUNUVVJFX1RZUEVfUCkgeworICAgICAgICAgICAgZm9yIChqID0gbjsgaiA+IDA7IGotLSkg eworICAgICAgICAgICAgICAgIGhjID0gcnBsMFtqIC0gMV0tPmNvZGVjX3ByaXY7CisgICAgICAg ICAgICAgICAgYXZfYXNzZXJ0MChoYy0+ZnJhbWVfbnVtICE9IGhuLT5mcmFtZV9udW0pOworICAg ICAgICAgICAgICAgIGlmIChoYy0+ZnJhbWVfbnVtID4gaG4tPmZyYW1lX251bSkKKyAgICAgICAg ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgcnBsMFtqXSA9IHJwbDBbaiAtIDFd OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcnBsMFtqXSA9IHByZXYtPmRwYltpXTsKKwor ICAgICAgICB9IGVsc2UgaWYgKHBpYy0+dHlwZSA9PSBGRl9IV19QSUNUVVJFX1RZUEVfQikgewor ICAgICAgICAgICAgZm9yIChqID0gbjsgaiA+IDA7IGotLSkgeworICAgICAgICAgICAgICAgIGhj ID0gcnBsMFtqIC0gMV0tPmNvZGVjX3ByaXY7CisgICAgICAgICAgICAgICAgYXZfYXNzZXJ0MCho Yy0+cGljX29yZGVyX2NudCAhPSBocC0+cGljX29yZGVyX2NudCk7CisgICAgICAgICAgICAgICAg aWYgKGhjLT5waWNfb3JkZXJfY250IDwgaHAtPnBpY19vcmRlcl9jbnQpIHsKKyAgICAgICAgICAg ICAgICAgICAgaWYgKGhuLT5waWNfb3JkZXJfY250ID4gaHAtPnBpY19vcmRlcl9jbnQgfHwKKyAg ICAgICAgICAgICAgICAgICAgICAgIGhuLT5waWNfb3JkZXJfY250IDwgaGMtPnBpY19vcmRlcl9j bnQpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9IGVs c2UgeworICAgICAgICAgICAgICAgICAgICBpZiAoaG4tPnBpY19vcmRlcl9jbnQgPiBoYy0+cGlj X29yZGVyX2NudCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICAgICBycGwwW2pdID0gcnBsMFtqIC0gMV07CisgICAgICAgICAg ICB9CisgICAgICAgICAgICBycGwwW2pdID0gcHJldi0+ZHBiW2ldOworCisgICAgICAgICAgICBm b3IgKGogPSBuOyBqID4gMDsgai0tKSB7CisgICAgICAgICAgICAgICAgaGMgPSBycGwxW2ogLSAx XS0+Y29kZWNfcHJpdjsKKyAgICAgICAgICAgICAgICBhdl9hc3NlcnQwKGhjLT5waWNfb3JkZXJf Y250ICE9IGhwLT5waWNfb3JkZXJfY250KTsKKyAgICAgICAgICAgICAgICBpZiAoaGMtPnBpY19v cmRlcl9jbnQgPiBocC0+cGljX29yZGVyX2NudCkgeworICAgICAgICAgICAgICAgICAgICBpZiAo aG4tPnBpY19vcmRlcl9jbnQgPCBocC0+cGljX29yZGVyX2NudCB8fAorICAgICAgICAgICAgICAg ICAgICAgICAgaG4tPnBpY19vcmRlcl9jbnQgPiBoYy0+cGljX29yZGVyX2NudCkKKyAgICAgICAg ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg ICAgICAgICAgICAgIGlmIChobi0+cGljX29yZGVyX2NudCA8IGhjLT5waWNfb3JkZXJfY250KQor ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgICAgIHJwbDFbal0gPSBycGwxW2ogLSAxXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg ICAgIHJwbDFbal0gPSBwcmV2LT5kcGJbaV07CisgICAgICAgIH0KKworICAgICAgICArK247Cisg ICAgfQorCisgICAgaWYgKHBpYy0+dHlwZSA9PSBGRl9IV19QSUNUVVJFX1RZUEVfQikgeworICAg ICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisgICAgICAgICAgICBpZiAocnBsMFtpXSAh PSBycGwxW2ldKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlm IChpID09IG4pCisgICAgICAgICAgICBGRlNXQVAoRkZIV0Jhc2VFbmNvZGVQaWN0dXJlICosIHJw bDFbMF0sIHJwbDFbMV0pOworICAgIH0KKworICAgIGlmIChwaWMtPnR5cGUgPT0gRkZfSFdfUElD VFVSRV9UWVBFX1AgfHwKKyAgICAgICAgcGljLT50eXBlID09IEZGX0hXX1BJQ1RVUkVfVFlQRV9C KSB7CisgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0RFQlVHLCAiRGVmYXVsdCBSZWZQaWNM aXN0MCBmb3IgZm49JWQvcG9jPSVkOiIsCisgICAgICAgICAgICAgICBocC0+ZnJhbWVfbnVtLCBo cC0+cGljX29yZGVyX2NudCk7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKyAg ICAgICAgICAgIGhuID0gcnBsMFtpXS0+Y29kZWNfcHJpdjsKKyAgICAgICAgICAgIGF2X2xvZyhh dmN0eCwgQVZfTE9HX0RFQlVHLCAiICBmbj0lZC9wb2M9JWQiLAorICAgICAgICAgICAgICAgICAg IGhuLT5mcmFtZV9udW0sIGhuLT5waWNfb3JkZXJfY250KTsKKyAgICAgICAgfQorICAgICAgICBh dl9sb2coYXZjdHgsIEFWX0xPR19ERUJVRywgIlxuIik7CisgICAgfQorICAgIGlmIChwaWMtPnR5 cGUgPT0gRkZfSFdfUElDVFVSRV9UWVBFX0IpIHsKKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9M T0dfREVCVUcsICJEZWZhdWx0IFJlZlBpY0xpc3QxIGZvciBmbj0lZC9wb2M9JWQ6IiwKKyAgICAg ICAgICAgICAgIGhwLT5mcmFtZV9udW0sIGhwLT5waWNfb3JkZXJfY250KTsKKyAgICAgICAgZm9y IChpID0gMDsgaSA8IG47IGkrKykgeworICAgICAgICAgICAgaG4gPSBycGwxW2ldLT5jb2RlY19w cml2OworICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfREVCVUcsICIgIGZuPSVkL3Bv Yz0lZCIsCisgICAgICAgICAgICAgICAgICAgaG4tPmZyYW1lX251bSwgaG4tPnBpY19vcmRlcl9j bnQpOworICAgICAgICB9CisgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0RFQlVHLCAiXG4i KTsKKyAgICB9CisKKyAgICAqcnBsX3NpemUgPSBuOworfQorCitzdGF0aWMgdm9pZCBzZXR1cF9y ZWZzKEFWQ29kZWNDb250ZXh0ICphdmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgRkZIV0Jh c2VFbmNvZGVQaWN0dXJlICpwaWMsCisgICAgICAgICAgICAgICAgICAgICAgIFZrVmlkZW9FbmNv ZGVJbmZvS0hSICplbmNvZGVfaW5mbykKK3sKKyAgICBpbnQgbiwgaSwgajsKKyAgICBWdWxrYW5F bmNvZGVIMjY0Q29udGV4dCAqZW5jID0gYXZjdHgtPnByaXZfZGF0YTsKKyAgICBWdWxrYW5FbmNv ZGVIMjY0UGljdHVyZSAqaHAgPSBwaWMtPmNvZGVjX3ByaXY7CisgICAgRkZIV0Jhc2VFbmNvZGVQ aWN0dXJlICpwcmV2ID0gcGljLT5wcmV2OworICAgIEZGSFdCYXNlRW5jb2RlUGljdHVyZSAqZGVm X2wwW01BWF9EUEJfU0laRV0sICpkZWZfbDFbTUFYX0RQQl9TSVpFXTsKKyAgICBWdWxrYW5FbmNv ZGVIMjY0UGljdHVyZSAqaHJlZjsKKworICAgIGhwLT5yZWZfbGlzdF9pbmZvID0gKFN0ZFZpZGVv RW5jb2RlSDI2NFJlZmVyZW5jZUxpc3RzSW5mbykgeworICAgICAgICAuZmxhZ3MgPSAoU3RkVmlk ZW9FbmNvZGVIMjY0UmVmZXJlbmNlTGlzdHNJbmZvRmxhZ3MpIHsKKyAgICAgICAgICAgIC5yZWZf cGljX2xpc3RfbW9kaWZpY2F0aW9uX2ZsYWdfbDAgPSAwLAorICAgICAgICAgICAgLnJlZl9waWNf bGlzdF9tb2RpZmljYXRpb25fZmxhZ19sMSA9IDAsCisgICAgICAgICAgICAvKiBSZXNlcnZlZCAq LworICAgICAgICB9LAorICAgICAgICAvKiBNYXkgYmUgb3ZlcnJpZGRlbiBkdXJpbmcgc2V0dXBf c2xpY2VzKCkgKi8KKyAgICAgICAgLm51bV9yZWZfaWR4X2wwX2FjdGl2ZV9taW51czEgPSBwaWMt Pm5iX3JlZnNbMF0gLSAxLAorICAgICAgICAubnVtX3JlZl9pZHhfbDFfYWN0aXZlX21pbnVzMSA9 IHBpYy0+bmJfcmVmc1sxXSAtIDEsCisgICAgICAgIC8qIC5SZWZQaWNMaXN0MCBpcyBzZXQgaW4g dmtfZW5jX2gyNjRfZGVmYXVsdF9yZWZfcGljX2xpc3QoKSAqLworICAgICAgICAvKiAuUmVmUGlj TGlzdDEgaXMgc2V0IGluIHZrX2VuY19oMjY0X2RlZmF1bHRfcmVmX3BpY19saXN0KCkgKi8KKyAg ICAgICAgLyogUmVzZXJ2ZWQgKi8KKyAgICAgICAgLnBSZWZMaXN0ME1vZE9wZXJhdGlvbnMgPSBO VUxMLCAvKiBBbGwgc2V0IGJlbG93ICovCisgICAgICAgIC5yZWZMaXN0ME1vZE9wQ291bnQgPSAw LAorICAgICAgICAucFJlZkxpc3QxTW9kT3BlcmF0aW9ucyA9IE5VTEwsCisgICAgICAgIC5yZWZM aXN0MU1vZE9wQ291bnQgPSAwLAorICAgICAgICAucFJlZlBpY01hcmtpbmdPcGVyYXRpb25zID0g TlVMTCwKKyAgICAgICAgLnJlZlBpY01hcmtpbmdPcENvdW50ID0gMCwKKyAgICB9OworCisgICAg Zm9yIChpID0gMDsgaSA8IFNURF9WSURFT19IMjY0X01BWF9OVU1fTElTVF9SRUY7IGkrKykKKyAg ICAgICAgaHAtPnJlZl9saXN0X2luZm8uUmVmUGljTGlzdDBbaV0gPSBocC0+cmVmX2xpc3RfaW5m by5SZWZQaWNMaXN0MVtpXSA9IC0xOworCisgICAgLyogTm90ZTogcmVhbGx5IG5vdCBzdXJlICov CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwaWMtPm5iX3JlZnNbMF07IGkrKykgeworICAgICAg ICBWa1ZpZGVvUmVmZXJlbmNlU2xvdEluZm9LSFIgKnNsb3RfaW5mbzsKKyAgICAgICAgc2xvdF9p bmZvID0gKFZrVmlkZW9SZWZlcmVuY2VTbG90SW5mb0tIUiAqKSZlbmNvZGVfaW5mby0+cFJlZmVy ZW5jZVNsb3RzW2ldOworICAgICAgICBocC0+cmVmX2xpc3RfaW5mby5SZWZQaWNMaXN0MFtpXSA9 IHNsb3RfaW5mby0+c2xvdEluZGV4OworICAgIH0KKworICAgIC8qIE5vdGU6IHJlYWxseSBub3Qg c3VyZSAqLworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcGljLT5uYl9yZWZzWzFdOyBpKyspIHsK KyAgICAgICAgVmtWaWRlb1JlZmVyZW5jZVNsb3RJbmZvS0hSICpzbG90X2luZm87CisgICAgICAg IHNsb3RfaW5mbyA9IChWa1ZpZGVvUmVmZXJlbmNlU2xvdEluZm9LSFIgKikmZW5jb2RlX2luZm8t PnBSZWZlcmVuY2VTbG90c1twaWMtPm5iX3JlZnNbMF0gKyBpXTsKKyAgICAgICAgaHAtPnJlZl9s aXN0X2luZm8uUmVmUGljTGlzdDFbaV0gPSBzbG90X2luZm8tPnNsb3RJbmRleDsKKyAgICB9CisK KyAgICBocC0+aDI2NHBpY19pbmZvLnBSZWZMaXN0cyA9ICZocC0+cmVmX2xpc3RfaW5mbzsKKwor ICAgIGlmIChwaWMtPmlzX3JlZmVyZW5jZSAmJiBwaWMtPnR5cGUgIT0gRkZfSFdfUElDVFVSRV9U WVBFX0lEUikgeworICAgICAgICBGRkhXQmFzZUVuY29kZVBpY3R1cmUgKmRpc2NhcmRfbGlzdFtN QVhfRFBCX1NJWkVdOworICAgICAgICBpbnQgZGlzY2FyZCA9IDAsIGtlZXAgPSAwOworCisgICAg ICAgIC8vIERpc2NhcmQgZXZlcnl0aGluZyB3aGljaCBpcyBpbiB0aGUgRFBCIG9mIHRoZSBwcmV2 aW91cyBmcmFtZSBidXQKKyAgICAgICAgLy8gbm90IGluIHRoZSBEUEIgb2YgdGhpcyBvbmUuCisg ICAgICAgIGZvciAoaSA9IDA7IGkgPCBwcmV2LT5uYl9kcGJfcGljczsgaSsrKSB7CisgICAgICAg ICAgICBmb3IgKGogPSAwOyBqIDwgcGljLT5uYl9kcGJfcGljczsgaisrKSB7CisgICAgICAgICAg ICAgICAgaWYgKHByZXYtPmRwYltpXSA9PSBwaWMtPmRwYltqXSkKKyAgICAgICAgICAgICAgICAg ICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoaiA9PSBwaWMtPm5iX2Rw Yl9waWNzKSB7CisgICAgICAgICAgICAgICAgZGlzY2FyZF9saXN0W2Rpc2NhcmRdID0gcHJldi0+ ZHBiW2ldOworICAgICAgICAgICAgICAgICsrZGlzY2FyZDsKKyAgICAgICAgICAgIH0gZWxzZSB7 CisgICAgICAgICAgICAgICAgKytrZWVwOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg ICAgIGF2X2Fzc2VydDAoa2VlcCA8PSBlbmMtPnVuaXRzLmRwYl9mcmFtZXMpOworCisgICAgICAg IGlmIChkaXNjYXJkID09IDApIHsKKyAgICAgICAgICAgIGhwLT5oMjY0cGljX2luZm8uZmxhZ3Mu YWRhcHRpdmVfcmVmX3BpY19tYXJraW5nX21vZGVfZmxhZyA9IDA7CisgICAgICAgIH0gZWxzZSB7 CisgICAgICAgICAgICBocC0+aDI2NHBpY19pbmZvLmZsYWdzLmFkYXB0aXZlX3JlZl9waWNfbWFy a2luZ19tb2RlX2ZsYWcgPSAxOworICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGRpc2NhcmQ7 IGkrKykgeworICAgICAgICAgICAgICAgIFZ1bGthbkVuY29kZUgyNjRQaWN0dXJlICpvbGQgPSBk aXNjYXJkX2xpc3RbaV0tPmNvZGVjX3ByaXY7CisgICAgICAgICAgICAgICAgYXZfYXNzZXJ0MChv bGQtPmZyYW1lX251bSA8IGhwLT5mcmFtZV9udW0pOworICAgICAgICAgICAgICAgIGhwLT5tbWNv W2ldID0gKFN0ZFZpZGVvRW5jb2RlSDI2NFJlZlBpY01hcmtpbmdFbnRyeSkgeworICAgICAgICAg ICAgICAgICAgICAubWVtb3J5X21hbmFnZW1lbnRfY29udHJvbF9vcGVyYXRpb24gPSAxLAorICAg ICAgICAgICAgICAgICAgICAuZGlmZmVyZW5jZV9vZl9waWNfbnVtc19taW51czEgPSBocC0+ZnJh bWVfbnVtIC0gb2xkLT5mcmFtZV9udW0gLSAxLAorICAgICAgICAgICAgICAgIH07CisgICAgICAg ICAgICB9CisgICAgICAgICAgICBocC0+bW1jb1tpXSA9IChTdGRWaWRlb0VuY29kZUgyNjRSZWZQ aWNNYXJraW5nRW50cnkpIHsKKyAgICAgICAgICAgICAgICAubWVtb3J5X21hbmFnZW1lbnRfY29u dHJvbF9vcGVyYXRpb24gPSAwLAorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGhwLT5yZWZf bGlzdF9pbmZvLnBSZWZQaWNNYXJraW5nT3BlcmF0aW9ucyA9IGhwLT5tbWNvOworICAgICAgICAg ICAgaHAtPnJlZl9saXN0X2luZm8ucmVmUGljTWFya2luZ09wQ291bnQgPSBpICsgMTsKKyAgICAg ICAgfQorICAgIH0KKworICAgIGlmIChwaWMtPnR5cGUgPT0gRkZfSFdfUElDVFVSRV9UWVBFX0kg fHwgcGljLT50eXBlID09IEZGX0hXX1BJQ1RVUkVfVFlQRV9JRFIpCisgICAgICAgIHJldHVybjsK KworICAgIC8vIElmIHRoZSBpbnRlbmRlZCByZWZlcmVuY2VzIGFyZSBub3QgdGhlIGZpcnN0IGVu dHJpZXMgb2YgUmVmUGljTGlzdE4KKyAgICAvLyBieSBkZWZhdWx0LCB1c2UgcmVmLXBpYy1saXN0 LW1vZGlmaWNhdGlvbiB0byBtb3ZlIHRoZW0gdGhlcmUuCisgICAgdmtfZW5jX2gyNjRfZGVmYXVs dF9yZWZfcGljX2xpc3QoYXZjdHgsIHBpYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBkZWZfbDAsIGRlZl9sMSwgJm4pOworCisgICAgaWYgKHBpYy0+dHlwZSA9PSBGRl9I V19QSUNUVVJFX1RZUEVfUCkgeworICAgICAgICBpbnQgbmVlZF9ycGxtID0gMDsKKyAgICAgICAg Zm9yIChpID0gMDsgaSA8IHBpYy0+bmJfcmVmc1swXTsgaSsrKSB7CisgICAgICAgICAgICBhdl9h c3NlcnQwKHBpYy0+cmVmc1swXVtpXSk7CisgICAgICAgICAgICBpZiAocGljLT5yZWZzWzBdW2ld ICE9IChGRkhXQmFzZUVuY29kZVBpY3R1cmUgKilkZWZfbDBbaV0pCisgICAgICAgICAgICAgICAg bmVlZF9ycGxtID0gMTsKKyAgICAgICAgfQorCisgICAgICAgIGhwLT5yZWZfbGlzdF9pbmZvLmZs YWdzLnJlZl9waWNfbGlzdF9tb2RpZmljYXRpb25fZmxhZ19sMCA9IG5lZWRfcnBsbTsKKyAgICAg ICAgaWYgKG5lZWRfcnBsbSkgeworICAgICAgICAgICAgaW50IHBpY19udW0gPSBocC0+ZnJhbWVf bnVtOworICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHBpYy0+bmJfcmVmc1swXTsgaSsrKSB7 CisgICAgICAgICAgICAgICAgaHJlZiA9IHBpYy0+cmVmc1swXVtpXS0+Y29kZWNfcHJpdjsKKyAg ICAgICAgICAgICAgICBhdl9hc3NlcnQwKGhyZWYtPmZyYW1lX251bSAhPSBwaWNfbnVtKTsKKyAg ICAgICAgICAgICAgICBpZiAoaHJlZi0+ZnJhbWVfbnVtIDwgcGljX251bSkgeworICAgICAgICAg ICAgICAgICAgICBocC0+bW9kc1swXVtpXSA9IChTdGRWaWRlb0VuY29kZUgyNjRSZWZMaXN0TW9k RW50cnkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC5tb2RpZmljYXRpb25fb2ZfcGljX251 bXNfaWRjID0gMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIC5hYnNfZGlmZl9waWNfbnVtX21p bnVzMSA9IHBpY19udW0gLSBocmVmLT5mcmFtZV9udW0gLSAxLAorICAgICAgICAgICAgICAgICAg ICB9OworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGhwLT5t b2RzWzBdW2ldID0gKFN0ZFZpZGVvRW5jb2RlSDI2NFJlZkxpc3RNb2RFbnRyeSkgeworICAgICAg ICAgICAgICAgICAgICAgICAgLm1vZGlmaWNhdGlvbl9vZl9waWNfbnVtc19pZGMgPSAxLAorICAg ICAgICAgICAgICAgICAgICAgICAgLmFic19kaWZmX3BpY19udW1fbWludXMxID0gaHJlZi0+ZnJh bWVfbnVtIC0gcGljX251bSAtIDEsCisgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgICAgIHBpY19udW0gPSBocmVmLT5mcmFtZV9udW07CisgICAg ICAgICAgICB9CisgICAgICAgICAgICBocC0+cmVmX2xpc3RfaW5mby5wUmVmTGlzdDBNb2RPcGVy YXRpb25zID0gaHAtPm1vZHNbMF07CisgICAgICAgICAgICBocC0+cmVmX2xpc3RfaW5mby5yZWZM aXN0ME1vZE9wQ291bnQgPSBpIC0gMTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAg IGludCBuZWVkX3JwbG1fbDAgPSAwLCBuZWVkX3JwbG1fbDEgPSAwOworICAgICAgICBpbnQgbjAg PSAwLCBuMSA9IDA7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBwaWMtPm5iX3JlZnNbMF07IGkr KykgeworICAgICAgICAgICAgYXZfYXNzZXJ0MChwaWMtPnJlZnNbMF1baV0pOworICAgICAgICAg ICAgaHJlZiA9IHBpYy0+cmVmc1swXVtpXS0+Y29kZWNfcHJpdjsKKyAgICAgICAgICAgIGF2X2Fz c2VydDAoaHJlZi0+cGljX29yZGVyX2NudCA8IGhwLT5waWNfb3JkZXJfY250KTsKKyAgICAgICAg ICAgIGlmIChwaWMtPnJlZnNbMF1baV0gIT0gKEZGSFdCYXNlRW5jb2RlUGljdHVyZSAqKWRlZl9s MFtuMF0pCisgICAgICAgICAgICAgICAgbmVlZF9ycGxtX2wwID0gMTsKKyAgICAgICAgICAgICsr bjA7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHBpYy0+bmJfcmVm c1sxXTsgaSsrKSB7CisgICAgICAgICAgICBhdl9hc3NlcnQwKHBpYy0+cmVmc1sxXVtpXSk7Cisg ICAgICAgICAgICBocmVmID0gcGljLT5yZWZzWzFdW2ldLT5jb2RlY19wcml2OworICAgICAgICAg ICAgYXZfYXNzZXJ0MChocmVmLT5waWNfb3JkZXJfY250ID4gaHAtPnBpY19vcmRlcl9jbnQpOwor ICAgICAgICAgICAgaWYgKHBpYy0+cmVmc1sxXVtpXSAhPSAoRkZIV0Jhc2VFbmNvZGVQaWN0dXJl ICopZGVmX2wxW24xXSkKKyAgICAgICAgICAgICAgICBuZWVkX3JwbG1fbDEgPSAxOworICAgICAg ICAgICAgKytuMTsKKyAgICAgICAgfQorCisgICAgICAgIGhwLT5yZWZfbGlzdF9pbmZvLmZsYWdz LnJlZl9waWNfbGlzdF9tb2RpZmljYXRpb25fZmxhZ19sMCA9IG5lZWRfcnBsbV9sMDsKKyAgICAg ICAgaWYgKG5lZWRfcnBsbV9sMCkgeworICAgICAgICAgICAgaW50IHBpY19udW0gPSBocC0+ZnJh bWVfbnVtOworICAgICAgICAgICAgZm9yIChpID0gaiA9IDA7IGkgPCBwaWMtPm5iX3JlZnNbMF07 IGkrKykgeworICAgICAgICAgICAgICAgIGhyZWYgPSBwaWMtPnJlZnNbMF1baV0tPmNvZGVjX3By aXY7CisgICAgICAgICAgICAgICAgYXZfYXNzZXJ0MChocmVmLT5mcmFtZV9udW0gIT0gcGljX251 bSk7CisgICAgICAgICAgICAgICAgaWYgKGhyZWYtPmZyYW1lX251bSA8IHBpY19udW0pIHsKKyAg ICAgICAgICAgICAgICAgICAgaHAtPm1vZHNbMF1bal0gPSAoU3RkVmlkZW9FbmNvZGVIMjY0UmVm TGlzdE1vZEVudHJ5KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAubW9kaWZpY2F0aW9uX29m X3BpY19udW1zX2lkYyA9IDAsCisgICAgICAgICAgICAgICAgICAgICAgICAuYWJzX2RpZmZfcGlj X251bV9taW51czEgPSBwaWNfbnVtIC0gaHJlZi0+ZnJhbWVfbnVtIC0gMSwKKyAgICAgICAgICAg ICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAg ICBocC0+bW9kc1swXVtqXSA9IChTdGRWaWRlb0VuY29kZUgyNjRSZWZMaXN0TW9kRW50cnkpIHsK KyAgICAgICAgICAgICAgICAgICAgICAgIC5tb2RpZmljYXRpb25fb2ZfcGljX251bXNfaWRjID0g MSwKKyAgICAgICAgICAgICAgICAgICAgICAgIC5hYnNfZGlmZl9waWNfbnVtX21pbnVzMSA9IGhy ZWYtPmZyYW1lX251bSAtIHBpY19udW0gLSAxLAorICAgICAgICAgICAgICAgICAgICB9OworICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwaWNfbnVtID0gaHJlZi0+ZnJhbWVfbnVt OworICAgICAgICAgICAgICAgICsrajsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGhwLT5y ZWZfbGlzdF9pbmZvLnBSZWZMaXN0ME1vZE9wZXJhdGlvbnMgPSBocC0+bW9kc1swXTsKKyAgICAg ICAgICAgIGhwLT5yZWZfbGlzdF9pbmZvLnJlZkxpc3QwTW9kT3BDb3VudCA9IGogLSAxOworICAg ICAgICB9CisKKyAgICAgICAgaHAtPnJlZl9saXN0X2luZm8uZmxhZ3MucmVmX3BpY19saXN0X21v ZGlmaWNhdGlvbl9mbGFnX2wxID0gbmVlZF9ycGxtX2wxOworICAgICAgICBpZiAobmVlZF9ycGxt X2wxKSB7CisgICAgICAgICAgICBpbnQgcGljX251bSA9IGhwLT5mcmFtZV9udW07CisgICAgICAg ICAgICBmb3IgKGkgPSBqID0gMDsgaSA8IHBpYy0+bmJfcmVmc1sxXTsgaSsrKSB7CisgICAgICAg ICAgICAgICAgaHJlZiA9IHBpYy0+cmVmc1sxXVtpXS0+Y29kZWNfcHJpdjsKKyAgICAgICAgICAg ICAgICBhdl9hc3NlcnQwKGhyZWYtPmZyYW1lX251bSAhPSBwaWNfbnVtKTsKKyAgICAgICAgICAg ICAgICBpZiAoaHJlZi0+ZnJhbWVfbnVtIDwgcGljX251bSkgeworICAgICAgICAgICAgICAgICAg ICBocC0+bW9kc1sxXVtqXSA9IChTdGRWaWRlb0VuY29kZUgyNjRSZWZMaXN0TW9kRW50cnkpIHsK KyAgICAgICAgICAgICAgICAgICAgICAgIC5tb2RpZmljYXRpb25fb2ZfcGljX251bXNfaWRjID0g MCwKKyAgICAgICAgICAgICAgICAgICAgICAgIC5hYnNfZGlmZl9waWNfbnVtX21pbnVzMSA9IHBp Y19udW0gLSBocmVmLT5mcmFtZV9udW0gLSAxLAorICAgICAgICAgICAgICAgICAgICB9OworICAg ICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGhwLT5tb2RzWzFdW2pd ID0gKFN0ZFZpZGVvRW5jb2RlSDI2NFJlZkxpc3RNb2RFbnRyeSkgeworICAgICAgICAgICAgICAg ICAgICAgICAgLm1vZGlmaWNhdGlvbl9vZl9waWNfbnVtc19pZGMgPSAxLAorICAgICAgICAgICAg ICAgICAgICAgICAgLmFic19kaWZmX3BpY19udW1fbWludXMxID0gaHJlZi0+ZnJhbWVfbnVtIC0g cGljX251bSAtIDEsCisgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgICAgIHBpY19udW0gPSBocmVmLT5mcmFtZV9udW07CisgICAgICAgICAgICAg ICAgKytqOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaHAtPnJlZl9saXN0X2luZm8ucFJl Zkxpc3QxTW9kT3BlcmF0aW9ucyA9IGhwLT5tb2RzWzFdOworICAgICAgICAgICAgaHAtPnJlZl9s aXN0X2luZm8ucmVmTGlzdDFNb2RPcENvdW50ID0gaiAtIDE7CisgICAgICAgIH0KKyAgICB9Cit9 CisKK3N0YXRpYyBpbnQgaW5pdF9waWNfcGFyYW1zKEFWQ29kZWNDb250ZXh0ICphdmN0eCwgRkZI V0Jhc2VFbmNvZGVQaWN0dXJlICpwaWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBWa1Zp ZGVvRW5jb2RlSW5mb0tIUiAqZW5jb2RlX2luZm8pCit7CisgICAgaW50IGVycjsKKyAgICBGRlZ1 bGthbkVuY29kZVBpY3R1cmUgKnZwID0gcGljLT5wcml2OworICAgIFZ1bGthbkVuY29kZUgyNjRQ aWN0dXJlICpocCA9IHBpYy0+Y29kZWNfcHJpdjsKKyAgICBWa1ZpZGVvUmVmZXJlbmNlU2xvdElu Zm9LSFIgKnJlZl9zbG90OworCisgICAgZXJyID0gdmtfZW5jX2gyNjRfdXBkYXRlX3BpY19pbmZv KGF2Y3R4LCBwaWMpOworICAgIGlmIChlcnIgPCAwKQorICAgICAgICByZXR1cm4gZXJyOworCisg ICAgaHAtPnZraDI2NHBpY19pbmZvID0gKFZrVmlkZW9FbmNvZGVIMjY0UGljdHVyZUluZm9LSFIp IHsKKyAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfVklERU9fRU5DT0RFX0gyNjRf UElDVFVSRV9JTkZPX0tIUiwKKyAgICAgICAgLnBOZXh0ID0gTlVMTCwKKyAgICAgICAgLnBOYWx1 U2xpY2VFbnRyaWVzID0gTlVMTCwgLy8gRmlsbGVkIGluIGR1cmluZyBzZXR1cF9zbGljZXMoKQor ICAgICAgICAubmFsdVNsaWNlRW50cnlDb3VudCA9IDAsIC8vIEZpbGxlZCBpbiBkdXJpbmcgc2V0 dXBfc2xpY2VzKCkKKyAgICAgICAgLnBTdGRQaWN0dXJlSW5mbyA9ICZocC0+aDI2NHBpY19pbmZv LAorICAgIH07CisKKyAgICBocC0+aDI2NHBpY19pbmZvID0gKFN0ZFZpZGVvRW5jb2RlSDI2NFBp Y3R1cmVJbmZvKSB7CisgICAgICAgIC5mbGFncyA9IChTdGRWaWRlb0VuY29kZUgyNjRQaWN0dXJl SW5mb0ZsYWdzKSB7CisgICAgICAgICAgICAuSWRyUGljRmxhZyA9IHBpYy0+dHlwZSA9PSBGRl9I V19QSUNUVVJFX1RZUEVfSURSLAorICAgICAgICAgICAgLmlzX3JlZmVyZW5jZSA9IHBpYy0+aXNf cmVmZXJlbmNlLAorICAgICAgICAgICAgLm5vX291dHB1dF9vZl9wcmlvcl9waWNzX2ZsYWcgPSAw LAorICAgICAgICAgICAgLmxvbmdfdGVybV9yZWZlcmVuY2VfZmxhZyA9IDAsCisgICAgICAgICAg ICAuYWRhcHRpdmVfcmVmX3BpY19tYXJraW5nX21vZGVfZmxhZyA9IDAsIC8vIEZpbGxlZCBpbiBk dXJpbmcgc2V0dXBfcmVmcygpCisgICAgICAgICAgICAvKiBSZXNlcnZlZCAqLworICAgICAgICB9 LAorICAgICAgICAuc2VxX3BhcmFtZXRlcl9zZXRfaWQgPSAwLAorICAgICAgICAucGljX3BhcmFt ZXRlcl9zZXRfaWQgPSAwLAorICAgICAgICAuaWRyX3BpY19pZCA9IGhwLT5pZHJfcGljX2lkLAor ICAgICAgICAucHJpbWFyeV9waWNfdHlwZSA9IHBpYy0+dHlwZSA9PSBGRl9IV19QSUNUVVJFX1RZ UEVfUCA/IFNURF9WSURFT19IMjY0X1BJQ1RVUkVfVFlQRV9QIDoKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICBwaWMtPnR5cGUgPT0gRkZfSFdfUElDVFVSRV9UWVBFX0IgPyBTVERfVklERU9f SDI2NF9QSUNUVVJFX1RZUEVfQiA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGljLT50 eXBlID09IEZGX0hXX1BJQ1RVUkVfVFlQRV9JID8gU1REX1ZJREVPX0gyNjRfUElDVFVSRV9UWVBF X0kgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFNURF9WSURFT19IMjY0X1BJQ1RVUkVfVFlQRV9JRFIsCisgICAgICAgIC5m cmFtZV9udW0gPSBocC0+ZnJhbWVfbnVtLAorICAgICAgICAuUGljT3JkZXJDbnQgPSBocC0+cGlj X29yZGVyX2NudCwKKyAgICAgICAgLnRlbXBvcmFsX2lkID0gMCwgLyogPyAqLworICAgICAgICAv KiBSZXNlcnZlZCAqLworICAgICAgICAucFJlZkxpc3RzID0gTlVMTCwgLy8gRmlsbGVkIGluIGR1 cmluZyBzZXR1cF9yZWZzCisgICAgfTsKKyAgICBlbmNvZGVfaW5mby0+cE5leHQgPSAmaHAtPnZr aDI2NHBpY19pbmZvOworCisgICAgaHAtPmgyNjRkcGJfaW5mbyA9IChTdGRWaWRlb0VuY29kZUgy NjRSZWZlcmVuY2VJbmZvKSB7CisgICAgICAgIC5mbGFncyA9IChTdGRWaWRlb0VuY29kZUgyNjRS ZWZlcmVuY2VJbmZvRmxhZ3MpIHsKKyAgICAgICAgICAgIC51c2VkX2Zvcl9sb25nX3Rlcm1fcmVm ZXJlbmNlID0gMCwKKyAgICAgICAgICAgIC8qIFJlc2VydmVkICovCisgICAgICAgIH0sCisgICAg ICAgIC5wcmltYXJ5X3BpY190eXBlID0gaHAtPmgyNjRwaWNfaW5mby5wcmltYXJ5X3BpY190eXBl LAorICAgICAgICAuRnJhbWVOdW0gPSBocC0+aDI2NHBpY19pbmZvLmZyYW1lX251bSwKKyAgICAg ICAgLlBpY09yZGVyQ250ID0gaHAtPmgyNjRwaWNfaW5mby5QaWNPcmRlckNudCwKKyAgICAgICAg LmxvbmdfdGVybV9waWNfbnVtID0gMCwKKyAgICAgICAgLmxvbmdfdGVybV9mcmFtZV9pZHggPSAw LAorICAgICAgICAudGVtcG9yYWxfaWQgPSBocC0+aDI2NHBpY19pbmZvLnRlbXBvcmFsX2lkLAor ICAgIH07CisgICAgaHAtPnZraDI2NGRwYl9pbmZvID0gKFZrVmlkZW9FbmNvZGVIMjY0RHBiU2xv dEluZm9LSFIpIHsKKyAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfVklERU9fRU5D T0RFX0gyNjRfRFBCX1NMT1RfSU5GT19LSFIsCisgICAgICAgIC5wU3RkUmVmZXJlbmNlSW5mbyA9 ICZocC0+aDI2NGRwYl9pbmZvLAorICAgIH07CisKKyAgICB2cC0+ZHBiX3Nsb3QucE5leHQgPSAm aHAtPnZraDI2NGRwYl9pbmZvOworCisgICAgcmVmX3Nsb3QgPSAoVmtWaWRlb1JlZmVyZW5jZVNs b3RJbmZvS0hSICopZW5jb2RlX2luZm8tPnBTZXR1cFJlZmVyZW5jZVNsb3Q7CisgICAgcmVmX3Ns b3QtPnBOZXh0ID0gJmhwLT52a2gyNjRkcGJfaW5mbzsKKworICAgIHNldHVwX3JlZnMoYXZjdHgs IHBpYywgZW5jb2RlX2luZm8pOworCisgICAgc2V0dXBfc2xpY2VzKGF2Y3R4LCBwaWMpOworCisg ICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaW5pdF9wcm9maWxlKEFWQ29kZWNDb250ZXh0 ICphdmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFZrVmlkZW9Qcm9maWxlSW5mb0tIUiAq cHJvZmlsZSwgdm9pZCAqcG5leHQpCit7CisgICAgVmtSZXN1bHQgcmV0OworICAgIFZ1bGthbkVu Y29kZUgyNjRDb250ZXh0ICplbmMgPSBhdmN0eC0+cHJpdl9kYXRhOworICAgIEZGVnVsa2FuRW5j b2RlQ29udGV4dCAqY3R4ID0gJmVuYy0+Y29tbW9uOworICAgIEZGVnVsa2FuQ29udGV4dCAqcyA9 ICZjdHgtPnM7CisgICAgRkZWdWxrYW5GdW5jdGlvbnMgKnZrID0gJmN0eC0+cy52a2ZuOworICAg IFZrVmlkZW9FbmNvZGVIMjY0Q2FwYWJpbGl0aWVzS0hSIGgyNjRfY2FwcyA9IHsKKyAgICAgICAg LnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfVklERU9fRU5DT0RFX0gyNjRfQ0FQQUJJTElUSUVT X0tIUiwKKyAgICB9OworICAgIFZrVmlkZW9FbmNvZGVDYXBhYmlsaXRpZXNLSFIgZW5jX2NhcHMg PSB7CisgICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX1ZJREVPX0VOQ09ERV9DQVBB QklMSVRJRVNfS0hSLAorICAgICAgICAucE5leHQgPSAmaDI2NF9jYXBzLAorICAgIH07CisgICAg VmtWaWRlb0NhcGFiaWxpdGllc0tIUiBjYXBzID0geworICAgICAgICAuc1R5cGUgPSBWS19TVFJV Q1RVUkVfVFlQRV9WSURFT19DQVBBQklMSVRJRVNfS0hSLAorICAgICAgICAucE5leHQgPSAmZW5j X2NhcHMsCisgICAgfTsKKworICAgIC8qIEluIG9yZGVyIG9mIHByZWZlcmVuY2UgKi8KKyAgICBp bnQgbGFzdF9zdXBwb3J0ZWQgPSBBVl9QUk9GSUxFX1VOS05PV047CisgICAgc3RhdGljIGNvbnN0 IGludCBrbm93bl9wcm9maWxlc1tdID0geworICAgICAgICBBVl9QUk9GSUxFX0gyNjRfQ09OU1RS QUlORURfQkFTRUxJTkUsCisgICAgICAgIEFWX1BST0ZJTEVfSDI2NF9NQUlOLAorICAgICAgICBB Vl9QUk9GSUxFX0gyNjRfSElHSCwKKyAgICAgICAgQVZfUFJPRklMRV9IMjY0X0hJR0hfMTAsCisg ICAgfTsKKyAgICBpbnQgbmJfcHJvZmlsZXMgPSBGRl9BUlJBWV9FTEVNUyhrbm93bl9wcm9maWxl cyk7CisKKyAgICBjb25zdCBBVlBpeEZtdERlc2NyaXB0b3IgKmRlc2MgPSBhdl9waXhfZm10X2Rl c2NfZ2V0KHMtPmZyYW1lcy0+c3dfZm9ybWF0KTsKKyAgICBpZiAoIWRlc2MpCisgICAgICAgIHJl dHVybiBBVkVSUk9SKEVJTlZBTCk7CisKKyAgICBpZiAoZGVzYy0+Y29tcFswXS5kZXB0aCA9PSA4 KQorICAgICAgICBuYl9wcm9maWxlcyA9IDM7CisKKyAgICBlbmMtPnByb2ZpbGUgPSAoVmtWaWRl b0VuY29kZUgyNjRQcm9maWxlSW5mb0tIUikgeworICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RV UkVfVFlQRV9WSURFT19FTkNPREVfSDI2NF9QUk9GSUxFX0lORk9fS0hSLAorICAgICAgICAucE5l eHQgPSBwbmV4dCwKKyAgICAgICAgLnN0ZFByb2ZpbGVJZGMgPSBmZl92a19oMjY0X3Byb2ZpbGVf dG9fdmsoYXZjdHgtPnByb2ZpbGUpLAorICAgIH07CisgICAgcHJvZmlsZS0+cE5leHQgPSAmZW5j LT5wcm9maWxlOworCisgICAgLyogU2V0IGxldmVsICovCisgICAgaWYgKGF2Y3R4LT5sZXZlbCA9 PSBBVl9MRVZFTF9VTktOT1dOKQorICAgICAgICBhdmN0eC0+bGV2ZWwgPSBlbmMtPmNvbW1vbi5v cHRzLmxldmVsOworCisgICAgLyogVXNlciBoYXMgZXhwbGljaXRseSBzcGVjaWZpZWQgYSBwcm9m aWxlLiAqLworICAgIGlmIChhdmN0eC0+cHJvZmlsZSAhPSBBVl9QUk9GSUxFX1VOS05PV04pCisg ICAgICAgIHJldHVybiAwOworCisgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfREVCVUcsICJTdXBw b3J0ZWQgcHJvZmlsZXM6XG4iKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG5iX3Byb2ZpbGVz OyBpKyspIHsKKyAgICAgICAgZW5jLT5wcm9maWxlLnN0ZFByb2ZpbGVJZGMgPSBmZl92a19oMjY0 X3Byb2ZpbGVfdG9fdmsoa25vd25fcHJvZmlsZXNbaV0pOworICAgICAgICByZXQgPSB2ay0+R2V0 UGh5c2ljYWxEZXZpY2VWaWRlb0NhcGFiaWxpdGllc0tIUihzLT5od2N0eC0+cGh5c19kZXYsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBy b2ZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICZjYXBzKTsKKyAgICAgICAgaWYgKHJldCA9PSBWS19TVUNDRVNTKSB7CisgICAgICAg ICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19ERUJVRywgIiAgICAlc1xuIiwKKyAgICAgICAgICAg ICAgICAgICBhdmNvZGVjX3Byb2ZpbGVfbmFtZShhdmN0eC0+Y29kZWNfaWQsIGtub3duX3Byb2Zp bGVzW2ldKSk7CisgICAgICAgICAgICBsYXN0X3N1cHBvcnRlZCA9IGtub3duX3Byb2ZpbGVzW2ld OworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGxhc3Rfc3VwcG9ydGVkID09IEFWX1BST0ZJ TEVfVU5LTk9XTikgeworICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIk5vIHN1 cHBvcnRlZCBwcm9maWxlcyBmb3IgZ2l2ZW4gZm9ybWF0XG4iKTsKKyAgICAgICAgcmV0dXJuIEFW RVJST1IoRU5PVFNVUCk7CisgICAgfQorCisgICAgZW5jLT5wcm9maWxlLnN0ZFByb2ZpbGVJZGMg PSBmZl92a19oMjY0X3Byb2ZpbGVfdG9fdmsobGFzdF9zdXBwb3J0ZWQpOworICAgIGF2X2xvZyhh dmN0eCwgQVZfTE9HX1ZFUkJPU0UsICJVc2luZyBwcm9maWxlICVzXG4iLAorICAgICAgICAgICBh dmNvZGVjX3Byb2ZpbGVfbmFtZShhdmN0eC0+Y29kZWNfaWQsIGxhc3Rfc3VwcG9ydGVkKSk7Cisg ICAgYXZjdHgtPnByb2ZpbGUgPSBsYXN0X3N1cHBvcnRlZDsKKworICAgIHJldHVybiAwOworfQor CitzdGF0aWMgaW50IGluaXRfZW5jX29wdGlvbnMoQVZDb2RlY0NvbnRleHQgKmF2Y3R4KQorewor ICAgIFZ1bGthbkVuY29kZUgyNjRDb250ZXh0ICplbmMgPSBhdmN0eC0+cHJpdl9kYXRhOworICAg IEZGSFdCYXNlRW5jb2RlSDI2NE9wdHMgKnVuaXRfb3B0cyA9ICZlbmMtPnVuaXRfb3B0czsKKwor ICAgIGlmIChhdmN0eC0+cmNfYnVmZmVyX3NpemUpCisgICAgICAgIHVuaXRfb3B0cy0+aHJkX2J1 ZmZlcl9zaXplID0gYXZjdHgtPnJjX2J1ZmZlcl9zaXplOworICAgIGVsc2UgaWYgKGF2Y3R4LT5y Y19tYXhfcmF0ZSA+IDApCisgICAgICAgIHVuaXRfb3B0cy0+aHJkX2J1ZmZlcl9zaXplID0gYXZj dHgtPnJjX21heF9yYXRlOworICAgIGVsc2UKKyAgICAgICAgdW5pdF9vcHRzLT5ocmRfYnVmZmVy X3NpemUgPSBhdmN0eC0+Yml0X3JhdGU7CisKKyAgICBpZiAoYXZjdHgtPnJjX2luaXRpYWxfYnVm ZmVyX29jY3VwYW5jeSkgeworICAgICAgICBpZiAoYXZjdHgtPnJjX2luaXRpYWxfYnVmZmVyX29j Y3VwYW5jeSA+IHVuaXRfb3B0cy0+aHJkX2J1ZmZlcl9zaXplKSB7CisgICAgICAgICAgICBhdl9s b2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkludmFsaWQgUkMgYnVmZmVyIHNldHRpbmdzOiAiCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm11c3QgaGF2ZSBpbml0aWFs IGJ1ZmZlciBzaXplICglZCkgPD0gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICJidWZmZXIgc2l6ZSAoJSJQUklkNjQiKS5cbiIsCisgICAgICAgICAgICAgICAgICAg YXZjdHgtPnJjX2luaXRpYWxfYnVmZmVyX29jY3VwYW5jeSwgdW5pdF9vcHRzLT5ocmRfYnVmZmVy X3NpemUpOworICAgICAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKKyAgICAgICAgfQor ICAgICAgICB1bml0X29wdHMtPmluaXRpYWxfYnVmZmVyX2Z1bGxuZXNzID0gYXZjdHgtPnJjX2lu aXRpYWxfYnVmZmVyX29jY3VwYW5jeTsKKyAgICB9IGVsc2UgeworICAgICAgICB1bml0X29wdHMt PmluaXRpYWxfYnVmZmVyX2Z1bGxuZXNzID0gdW5pdF9vcHRzLT5ocmRfYnVmZmVyX3NpemUgKiAz IC8gNDsKKyAgICB9CisKKyAgICBpZiAoZW5jLT5jb21tb24ub3B0cy5yY19tb2RlID09IFZLX1ZJ REVPX0VOQ09ERV9SQVRFX0NPTlRST0xfTU9ERV9ESVNBQkxFRF9CSVRfS0hSKSB7CisgICAgICAg IC8qIEhSRCBpbmZvIGlzIHJlcXVpcmVkIGZvciB0aW1pbmcgKi8KKyAgICAgICAgZW5jLT51bml0 X2VsZW1zICY9IH5VTklUX1NFSV9USU1JTkc7CisKKyAgICAgICAgZW5jLT5maXhlZF9xcF9wID0g YXZfY2xpcChlbmMtPmNvbW1vbi5leHBsaWNpdF9xcCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBlbmMtPmNhcHMubWluUXAsIGVuYy0+Y2Fwcy5tYXhRcCk7CisgICAgICAgIGlm IChhdmN0eC0+aV9xdWFudF9mYWN0b3IgPiAwLjApCisgICAgICAgICAgICB1bml0X29wdHMtPmZp eGVkX3FwX2lkciA9IGF2X2NsaXAoKGF2Y3R4LT5pX3F1YW50X2ZhY3RvciAqIGVuYy0+Zml4ZWRf cXBfcCArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2 Y3R4LT5pX3F1YW50X29mZnNldCkgKyAwLjUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZW5jLT5jYXBzLm1pblFwLCBlbmMtPmNhcHMubWF4UXApOworICAg ICAgICBlbHNlCisgICAgICAgICAgICB1bml0X29wdHMtPmZpeGVkX3FwX2lkciA9IGVuYy0+Zml4 ZWRfcXBfcDsKKworICAgICAgICBpZiAoYXZjdHgtPmJfcXVhbnRfZmFjdG9yID4gMC4wKQorICAg ICAgICAgICAgZW5jLT5maXhlZF9xcF9iID0gYXZfY2xpcCgoYXZjdHgtPmJfcXVhbnRfZmFjdG9y ICogZW5jLT5maXhlZF9xcF9wICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGF2Y3R4LT5iX3F1YW50X29mZnNldCkgKyAwLjUsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGVuYy0+Y2Fwcy5taW5RcCwgZW5jLT5jYXBzLm1heFFwKTsKKyAgICAg ICAgZWxzZQorICAgICAgICAgICAgZW5jLT5maXhlZF9xcF9iID0gZW5jLT5maXhlZF9xcF9wOwor CisgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0RFQlVHLCAiVXNpbmcgZml4ZWQgUVAgPSAi CisgICAgICAgICAgICAgICAiJWQgLyAlZCAvICVkIGZvciBJRFItIC8gUC0gLyBCLWZyYW1lcy5c biIsCisgICAgICAgICAgICAgICB1bml0X29wdHMtPmZpeGVkX3FwX2lkciwgZW5jLT5maXhlZF9x cF9wLCBlbmMtPmZpeGVkX3FwX2IpOworICAgIH0gZWxzZSB7CisgICAgICAgIHVuaXRfb3B0cy0+ Zml4ZWRfcXBfaWRyID0gMjY7CisgICAgICAgIGVuYy0+Zml4ZWRfcXBfcCA9IDI2OworICAgICAg ICBlbmMtPmZpeGVkX3FwX2IgPSAyNjsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworc3Rh dGljIGF2X2NvbGQgaW50IGluaXRfc2VxdWVuY2VfaGVhZGVycyhBVkNvZGVjQ29udGV4dCAqYXZj dHgpCit7CisgICAgaW50IGVycjsKKyAgICBWdWxrYW5FbmNvZGVIMjY0Q29udGV4dCAqZW5jID0g YXZjdHgtPnByaXZfZGF0YTsKKworICAgIEZGSFdCYXNlRW5jb2RlSDI2NCAqdW5pdHMgPSAmZW5j LT51bml0czsKKyAgICBGRkhXQmFzZUVuY29kZUgyNjRPcHRzICp1bml0X29wdHMgPSAmZW5jLT51 bml0X29wdHM7CisKKyAgICB1bml0X29wdHMtPmJpdF9yYXRlICA9IGF2Y3R4LT5iaXRfcmF0ZTsK KyAgICB1bml0X29wdHMtPm1iX3dpZHRoICA9IEZGQUxJR04oYXZjdHgtPndpZHRoLCAgMTYpIC8g MTY7CisgICAgdW5pdF9vcHRzLT5tYl9oZWlnaHQgPSBGRkFMSUdOKGF2Y3R4LT5oZWlnaHQsIDE2 KSAvIDE2OworICAgIHVuaXRfb3B0cy0+ZmxhZ3MgICAgID0gZW5jLT51bml0X2VsZW1zICYgVU5J VF9TRUlfVElNSU5HID8gRkZfSFdfSDI2NF9TRUlfVElNSU5HIDogMDsKKworICAgIC8qIGNhYmFj IGFscmVhZHkgc2V0IHZpYSBhbiBvcHRpb24gKi8KKyAgICAvKiBmaXhlZF9xcF9pZHIgaW5pdGlh bGl6ZWQgaW4gaW5pdF9lbmNfb3B0aW9ucygpICovCisgICAgLyogaHJkX2J1ZmZlcl9zaXplIGlu aXRpYWxpemVkIGluIGluaXRfZW5jX29wdGlvbnMoKSAqLworICAgIC8qIGluaXRpYWxfYnVmZmVy X2Z1bGxuZXNzIGluaXRpYWxpemVkIGluIGluaXRfZW5jX29wdGlvbnMoKSAqLworCisgICAgZXJy ID0gZmZfaHdfYmFzZV9lbmNvZGVfaW5pdF9wYXJhbXNfaDI2NCgmZW5jLT5jb21tb24uYmFzZSwg YXZjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bml0 cywgdW5pdF9vcHRzKTsKKyAgICBpZiAoZXJyIDwgMCkKKyAgICAgICAgcmV0dXJuIGVycjsKKwor ICAgIHVuaXRzLT5yYXdfc3BzLnNlcV9zY2FsaW5nX21hdHJpeF9wcmVzZW50X2ZsYWcgPQorICAg ICAgICAhIShlbmMtPmNhcHMuc3RkU3ludGF4RmxhZ3MgJiBWS19WSURFT19FTkNPREVfSDI2NF9T VERfU0NBTElOR19NQVRSSVhfUFJFU0VOVF9GTEFHX1NFVF9CSVRfS0hSKTsKKyAgICB1bml0cy0+ cmF3X3Bwcy5waWNfc2NhbGluZ19tYXRyaXhfcHJlc2VudF9mbGFnID0KKyAgICAgICAgISEoZW5j LT5jYXBzLnN0ZFN5bnRheEZsYWdzICYgVktfVklERU9fRU5DT0RFX0gyNjRfU1REX1NDQUxJTkdf TUFUUklYX1BSRVNFTlRfRkxBR19TRVRfQklUX0tIUik7CisgICAgdW5pdHMtPnJhd19wcHMudHJh bnNmb3JtXzh4OF9tb2RlX2ZsYWcgPQorICAgICAgICAhIShlbmMtPmNhcHMuc3RkU3ludGF4Rmxh Z3MgJiBWS19WSURFT19FTkNPREVfSDI2NF9TVERfVFJBTlNGT1JNXzhYOF9NT0RFX0ZMQUdfU0VU X0JJVF9LSFIpOworCisgICAgcmV0dXJuIDA7Cit9CisKK3R5cGVkZWYgc3RydWN0IFZ1bGthbkgy NjRVbml0cyB7CisgICAgU3RkVmlkZW9IMjY0U2VxdWVuY2VQYXJhbWV0ZXJTZXQgICAgdmtzcHM7 CisgICAgU3RkVmlkZW9IMjY0U2NhbGluZ0xpc3RzICAgICAgICAgICAgdmtzcHNfc2NhbGluZzsK KyAgICBTdGRWaWRlb0gyNjRIcmRQYXJhbWV0ZXJzICAgICAgICAgICB2a3Nwc192dWlfaGVhZGVy OworICAgIFN0ZFZpZGVvSDI2NFNlcXVlbmNlUGFyYW1ldGVyU2V0VnVpIHZrc3BzX3Z1aTsKKwor ICAgIFN0ZFZpZGVvSDI2NFBpY3R1cmVQYXJhbWV0ZXJTZXQgICAgIHZrcHBzOworICAgIFN0ZFZp ZGVvSDI2NFNjYWxpbmdMaXN0cyAgICAgICAgICAgIHZrcHBzX3NjYWxpbmc7Cit9IFZ1bGthbkgy NjRVbml0czsKKworc3RhdGljIGF2X2NvbGQgaW50IGJhc2VfdW5pdF90b192ayhBVkNvZGVjQ29u dGV4dCAqYXZjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZ1bGthbkgy NjRVbml0cyAqdmtfdW5pdHMpCit7CisgICAgVnVsa2FuRW5jb2RlSDI2NENvbnRleHQgKmVuYyA9 IGF2Y3R4LT5wcml2X2RhdGE7CisKKyAgICBGRkhXQmFzZUVuY29kZUgyNjQgKnVuaXRzID0gJmVu Yy0+dW5pdHM7CisKKyAgICBIMjY0UmF3U1BTICAgICAgICAgICAgICAgICAgICAgICAgICAqc3Bz ID0gJnVuaXRzLT5yYXdfc3BzOworICAgIEgyNjRSYXdIUkQgICAgICAgICAgICAgICAgICAgICAg ICAgICpocmQgPSAmc3BzLT52dWkubmFsX2hyZF9wYXJhbWV0ZXJzOworICAgIFN0ZFZpZGVvSDI2 NFNjYWxpbmdMaXN0cyAgICAgICAgICAgICp2a3Nwc19zY2FsaW5nID0gJnZrX3VuaXRzLT52a3Nw c19zY2FsaW5nOworICAgIFN0ZFZpZGVvSDI2NEhyZFBhcmFtZXRlcnMgICAgICAgICAgICp2a3Nw c192dWlfaGVhZGVyID0gJnZrX3VuaXRzLT52a3Nwc192dWlfaGVhZGVyOworICAgIFN0ZFZpZGVv SDI2NFNlcXVlbmNlUGFyYW1ldGVyU2V0VnVpICp2a3Nwc192dWkgPSAmdmtfdW5pdHMtPnZrc3Bz X3Z1aTsKKyAgICBTdGRWaWRlb0gyNjRTZXF1ZW5jZVBhcmFtZXRlclNldCAgICAqdmtzcHMgPSAm dmtfdW5pdHMtPnZrc3BzOworCisgICAgSDI2NFJhd1BQUyAgICAgICAgICAgICAgICAgICAgICAg ICAgKnBwcyA9ICZ1bml0cy0+cmF3X3BwczsKKyAgICBTdGRWaWRlb0gyNjRTY2FsaW5nTGlzdHMg ICAgICAgICAgICAqdmtwcHNfc2NhbGluZyA9ICZ2a191bml0cy0+dmtwcHNfc2NhbGluZzsKKyAg ICBTdGRWaWRlb0gyNjRQaWN0dXJlUGFyYW1ldGVyU2V0ICAgICAqdmtwcHMgPSAmdmtfdW5pdHMt PnZrcHBzOworCisgICAgKnZrc3BzX3NjYWxpbmcgPSAoU3RkVmlkZW9IMjY0U2NhbGluZ0xpc3Rz KSB7CisgICAgICAgIC5zY2FsaW5nX2xpc3RfcHJlc2VudF9tYXNrID0gMHgwLCAvLyBtYXNrCisg ICAgICAgIC51c2VfZGVmYXVsdF9zY2FsaW5nX21hdHJpeF9tYXNrID0gMSwKKyAgICB9OworCisg ICAgKnZrc3BzX3Z1aV9oZWFkZXIgPSAoU3RkVmlkZW9IMjY0SHJkUGFyYW1ldGVycykgeworICAg ICAgICAuY3BiX2NudF9taW51czEgPSBocmQtPmNwYl9jbnRfbWludXMxLAorICAgICAgICAuYml0 X3JhdGVfc2NhbGUgPSBocmQtPmJpdF9yYXRlX3NjYWxlLAorICAgICAgICAuY3BiX3NpemVfc2Nh bGUgPSBocmQtPmNwYl9zaXplX3NjYWxlLAorICAgICAgICAvKiBSZXNlcnZlZCAqLworICAgICAg ICAvKiBiaXRfcmF0ZS9jcGJfc2l6ZS9jYnJfZmxhZyBzZXQgYmVsb3cgKi8KKyAgICAgICAgLmlu aXRpYWxfY3BiX3JlbW92YWxfZGVsYXlfbGVuZ3RoX21pbnVzMSA9IGhyZC0+aW5pdGlhbF9jcGJf cmVtb3ZhbF9kZWxheV9sZW5ndGhfbWludXMxLAorICAgICAgICAuY3BiX3JlbW92YWxfZGVsYXlf bGVuZ3RoX21pbnVzMSA9IGhyZC0+Y3BiX3JlbW92YWxfZGVsYXlfbGVuZ3RoX21pbnVzMSwKKyAg ICAgICAgLmRwYl9vdXRwdXRfZGVsYXlfbGVuZ3RoX21pbnVzMSA9IGhyZC0+ZHBiX291dHB1dF9k ZWxheV9sZW5ndGhfbWludXMxLAorICAgICAgICAudGltZV9vZmZzZXRfbGVuZ3RoID0gaHJkLT50 aW1lX29mZnNldF9sZW5ndGgsCisgICAgfTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgSDI2 NF9NQVhfQ1BCX0NOVDsgaSsrKSB7CisgICAgICAgIHZrc3BzX3Z1aV9oZWFkZXItPmJpdF9yYXRl X3ZhbHVlX21pbnVzMVtpXSA9IGhyZC0+Yml0X3JhdGVfdmFsdWVfbWludXMxW2ldOworICAgICAg ICB2a3Nwc192dWlfaGVhZGVyLT5jcGJfc2l6ZV92YWx1ZV9taW51czFbaV0gPSBocmQtPmNwYl9z aXplX3ZhbHVlX21pbnVzMVtpXTsKKyAgICAgICAgdmtzcHNfdnVpX2hlYWRlci0+Y2JyX2ZsYWdb aV0gPSBocmQtPmNicl9mbGFnW2ldOworICAgIH0KKworICAgICp2a3Nwc192dWkgPSAoU3RkVmlk ZW9IMjY0U2VxdWVuY2VQYXJhbWV0ZXJTZXRWdWkpIHsKKyAgICAgICAgLmZsYWdzID0gKFN0ZFZp ZGVvSDI2NFNwc1Z1aUZsYWdzKSB7CisgICAgICAgICAgICAuYXNwZWN0X3JhdGlvX2luZm9fcHJl c2VudF9mbGFnID0gc3BzLT52dWkuYXNwZWN0X3JhdGlvX2luZm9fcHJlc2VudF9mbGFnLAorICAg ICAgICAgICAgLm92ZXJzY2FuX2luZm9fcHJlc2VudF9mbGFnID0gc3BzLT52dWkub3ZlcnNjYW5f aW5mb19wcmVzZW50X2ZsYWcsCisgICAgICAgICAgICAub3ZlcnNjYW5fYXBwcm9wcmlhdGVfZmxh ZyA9IHNwcy0+dnVpLm92ZXJzY2FuX2FwcHJvcHJpYXRlX2ZsYWcsCisgICAgICAgICAgICAudmlk ZW9fc2lnbmFsX3R5cGVfcHJlc2VudF9mbGFnID0gc3BzLT52dWkudmlkZW9fc2lnbmFsX3R5cGVf cHJlc2VudF9mbGFnLAorICAgICAgICAgICAgLnZpZGVvX2Z1bGxfcmFuZ2VfZmxhZyA9IHNwcy0+ dnVpLnZpZGVvX2Z1bGxfcmFuZ2VfZmxhZywKKyAgICAgICAgICAgIC5jb2xvcl9kZXNjcmlwdGlv bl9wcmVzZW50X2ZsYWcgPSBzcHMtPnZ1aS5jb2xvdXJfZGVzY3JpcHRpb25fcHJlc2VudF9mbGFn LAorICAgICAgICAgICAgLmNocm9tYV9sb2NfaW5mb19wcmVzZW50X2ZsYWcgPSBzcHMtPnZ1aS5j aHJvbWFfbG9jX2luZm9fcHJlc2VudF9mbGFnLAorICAgICAgICAgICAgLnRpbWluZ19pbmZvX3By ZXNlbnRfZmxhZyA9IHNwcy0+dnVpLnRpbWluZ19pbmZvX3ByZXNlbnRfZmxhZywKKyAgICAgICAg ICAgIC5maXhlZF9mcmFtZV9yYXRlX2ZsYWcgPSBzcHMtPnZ1aS5maXhlZF9mcmFtZV9yYXRlX2Zs YWcsCisgICAgICAgICAgICAuYml0c3RyZWFtX3Jlc3RyaWN0aW9uX2ZsYWcgPSBzcHMtPnZ1aS5i aXRzdHJlYW1fcmVzdHJpY3Rpb25fZmxhZywKKyAgICAgICAgICAgIC5uYWxfaHJkX3BhcmFtZXRl cnNfcHJlc2VudF9mbGFnID0gc3BzLT52dWkubmFsX2hyZF9wYXJhbWV0ZXJzX3ByZXNlbnRfZmxh ZywKKyAgICAgICAgICAgIC52Y2xfaHJkX3BhcmFtZXRlcnNfcHJlc2VudF9mbGFnID0gc3BzLT52 dWkudmNsX2hyZF9wYXJhbWV0ZXJzX3ByZXNlbnRfZmxhZywKKyAgICAgICAgfSwKKyAgICAgICAg LmFzcGVjdF9yYXRpb19pZGMgPSBzcHMtPnZ1aS5hc3BlY3RfcmF0aW9faWRjLAorICAgICAgICAu c2FyX3dpZHRoID0gc3BzLT52dWkuc2FyX3dpZHRoLAorICAgICAgICAuc2FyX2hlaWdodCA9IHNw cy0+dnVpLnNhcl9oZWlnaHQsCisgICAgICAgIC52aWRlb19mb3JtYXQgPSBzcHMtPnZ1aS52aWRl b19mb3JtYXQsCisgICAgICAgIC5jb2xvdXJfcHJpbWFyaWVzID0gc3BzLT52dWkuY29sb3VyX3By aW1hcmllcywKKyAgICAgICAgLnRyYW5zZmVyX2NoYXJhY3RlcmlzdGljcyA9IHNwcy0+dnVpLnRy YW5zZmVyX2NoYXJhY3RlcmlzdGljcywKKyAgICAgICAgLm1hdHJpeF9jb2VmZmljaWVudHMgPSBz cHMtPnZ1aS5tYXRyaXhfY29lZmZpY2llbnRzLAorICAgICAgICAubnVtX3VuaXRzX2luX3RpY2sg PSBzcHMtPnZ1aS5udW1fdW5pdHNfaW5fdGljaywKKyAgICAgICAgLnRpbWVfc2NhbGUgPSBzcHMt PnZ1aS50aW1lX3NjYWxlLAorICAgICAgICAubWF4X251bV9yZW9yZGVyX2ZyYW1lcyA9IHNwcy0+ dnVpLm1heF9udW1fcmVvcmRlcl9mcmFtZXMsCisgICAgICAgIC5tYXhfZGVjX2ZyYW1lX2J1ZmZl cmluZyA9IHNwcy0+dnVpLm1heF9kZWNfZnJhbWVfYnVmZmVyaW5nLAorICAgICAgICAuY2hyb21h X3NhbXBsZV9sb2NfdHlwZV90b3BfZmllbGQgPSBzcHMtPnZ1aS5jaHJvbWFfc2FtcGxlX2xvY190 eXBlX3RvcF9maWVsZCwKKyAgICAgICAgLmNocm9tYV9zYW1wbGVfbG9jX3R5cGVfYm90dG9tX2Zp ZWxkID0gc3BzLT52dWkuY2hyb21hX3NhbXBsZV9sb2NfdHlwZV9ib3R0b21fZmllbGQsCisgICAg ICAgIC8qIFJlc2VydmVkICovCisgICAgICAgIC5wSHJkUGFyYW1ldGVycyA9IHZrc3BzX3Z1aV9o ZWFkZXIsCisgICAgfTsKKworICAgICp2a3NwcyA9IChTdGRWaWRlb0gyNjRTZXF1ZW5jZVBhcmFt ZXRlclNldCkgeworICAgICAgICAuZmxhZ3MgPSAoU3RkVmlkZW9IMjY0U3BzRmxhZ3MpIHsKKyAg ICAgICAgICAgIC5jb25zdHJhaW50X3NldDBfZmxhZyA9IHNwcy0+Y29uc3RyYWludF9zZXQwX2Zs YWcsCisgICAgICAgICAgICAuY29uc3RyYWludF9zZXQxX2ZsYWcgPSBzcHMtPmNvbnN0cmFpbnRf c2V0MV9mbGFnLAorICAgICAgICAgICAgLmNvbnN0cmFpbnRfc2V0Ml9mbGFnID0gc3BzLT5jb25z dHJhaW50X3NldDJfZmxhZywKKyAgICAgICAgICAgIC5jb25zdHJhaW50X3NldDNfZmxhZyA9IHNw cy0+Y29uc3RyYWludF9zZXQzX2ZsYWcsCisgICAgICAgICAgICAuY29uc3RyYWludF9zZXQ0X2Zs YWcgPSBzcHMtPmNvbnN0cmFpbnRfc2V0NF9mbGFnLAorICAgICAgICAgICAgLmNvbnN0cmFpbnRf c2V0NV9mbGFnID0gc3BzLT5jb25zdHJhaW50X3NldDVfZmxhZywKKyAgICAgICAgICAgIC5kaXJl Y3RfOHg4X2luZmVyZW5jZV9mbGFnID0gc3BzLT5kaXJlY3RfOHg4X2luZmVyZW5jZV9mbGFnLAor ICAgICAgICAgICAgLm1iX2FkYXB0aXZlX2ZyYW1lX2ZpZWxkX2ZsYWcgPSBzcHMtPm1iX2FkYXB0 aXZlX2ZyYW1lX2ZpZWxkX2ZsYWcsCisgICAgICAgICAgICAuZnJhbWVfbWJzX29ubHlfZmxhZyA9 IHNwcy0+ZnJhbWVfbWJzX29ubHlfZmxhZywKKyAgICAgICAgICAgIC5kZWx0YV9waWNfb3JkZXJf YWx3YXlzX3plcm9fZmxhZyA9IHNwcy0+ZGVsdGFfcGljX29yZGVyX2Fsd2F5c196ZXJvX2ZsYWcs CisgICAgICAgICAgICAuc2VwYXJhdGVfY29sb3VyX3BsYW5lX2ZsYWcgPSBzcHMtPnNlcGFyYXRl X2NvbG91cl9wbGFuZV9mbGFnLAorICAgICAgICAgICAgLmdhcHNfaW5fZnJhbWVfbnVtX3ZhbHVl X2FsbG93ZWRfZmxhZyA9IHNwcy0+Z2Fwc19pbl9mcmFtZV9udW1fYWxsb3dlZF9mbGFnLAorICAg ICAgICAgICAgLnFwcHJpbWVfeV96ZXJvX3RyYW5zZm9ybV9ieXBhc3NfZmxhZyA9IHNwcy0+cXBw cmltZV95X3plcm9fdHJhbnNmb3JtX2J5cGFzc19mbGFnLAorICAgICAgICAgICAgLmZyYW1lX2Ny b3BwaW5nX2ZsYWcgPSBzcHMtPmZyYW1lX2Nyb3BwaW5nX2ZsYWcsCisgICAgICAgICAgICAuc2Vx X3NjYWxpbmdfbWF0cml4X3ByZXNlbnRfZmxhZyA9IHNwcy0+c2VxX3NjYWxpbmdfbWF0cml4X3By ZXNlbnRfZmxhZywKKyAgICAgICAgICAgIC52dWlfcGFyYW1ldGVyc19wcmVzZW50X2ZsYWcgPSBz cHMtPnZ1aV9wYXJhbWV0ZXJzX3ByZXNlbnRfZmxhZywKKyAgICAgICAgfSwKKyAgICAgICAgLnBy b2ZpbGVfaWRjID0gZmZfdmtfaDI2NF9wcm9maWxlX3RvX3ZrKHNwcy0+cHJvZmlsZV9pZGMpLAor ICAgICAgICAubGV2ZWxfaWRjID0gZmZfdmtfaDI2NF9sZXZlbF90b192ayhzcHMtPmxldmVsX2lk YyksCisgICAgICAgIC5jaHJvbWFfZm9ybWF0X2lkYyA9IHNwcy0+Y2hyb21hX2Zvcm1hdF9pZGMs CisgICAgICAgIC5zZXFfcGFyYW1ldGVyX3NldF9pZCA9IHNwcy0+c2VxX3BhcmFtZXRlcl9zZXRf aWQsCisgICAgICAgIC5iaXRfZGVwdGhfbHVtYV9taW51czggPSBzcHMtPmJpdF9kZXB0aF9sdW1h X21pbnVzOCwKKyAgICAgICAgLmJpdF9kZXB0aF9jaHJvbWFfbWludXM4ID0gc3BzLT5iaXRfZGVw dGhfY2hyb21hX21pbnVzOCwKKyAgICAgICAgLmxvZzJfbWF4X2ZyYW1lX251bV9taW51czQgPSBz cHMtPmxvZzJfbWF4X2ZyYW1lX251bV9taW51czQsCisgICAgICAgIC5waWNfb3JkZXJfY250X3R5 cGUgPSBzcHMtPnBpY19vcmRlcl9jbnRfdHlwZSwKKyAgICAgICAgLm9mZnNldF9mb3Jfbm9uX3Jl Zl9waWMgPSBzcHMtPm9mZnNldF9mb3Jfbm9uX3JlZl9waWMsCisgICAgICAgIC5vZmZzZXRfZm9y X3RvcF90b19ib3R0b21fZmllbGQgPSBzcHMtPm9mZnNldF9mb3JfdG9wX3RvX2JvdHRvbV9maWVs ZCwKKyAgICAgICAgLmxvZzJfbWF4X3BpY19vcmRlcl9jbnRfbHNiX21pbnVzNCA9IHNwcy0+bG9n Ml9tYXhfcGljX29yZGVyX2NudF9sc2JfbWludXM0LAorICAgICAgICAubnVtX3JlZl9mcmFtZXNf aW5fcGljX29yZGVyX2NudF9jeWNsZSA9IHNwcy0+bnVtX3JlZl9mcmFtZXNfaW5fcGljX29yZGVy X2NudF9jeWNsZSwKKyAgICAgICAgLm1heF9udW1fcmVmX2ZyYW1lcyA9IHNwcy0+bWF4X251bV9y ZWZfZnJhbWVzLAorICAgICAgICAvKiBSZXNlcnZlZCAqLworICAgICAgICAucGljX3dpZHRoX2lu X21ic19taW51czEgPSBzcHMtPnBpY193aWR0aF9pbl9tYnNfbWludXMxLAorICAgICAgICAucGlj X2hlaWdodF9pbl9tYXBfdW5pdHNfbWludXMxID0gc3BzLT5waWNfaGVpZ2h0X2luX21hcF91bml0 c19taW51czEsCisgICAgICAgIC5mcmFtZV9jcm9wX2xlZnRfb2Zmc2V0ID0gc3BzLT5mcmFtZV9j cm9wX2xlZnRfb2Zmc2V0LAorICAgICAgICAuZnJhbWVfY3JvcF9yaWdodF9vZmZzZXQgPSBzcHMt PmZyYW1lX2Nyb3BfcmlnaHRfb2Zmc2V0LAorICAgICAgICAuZnJhbWVfY3JvcF90b3Bfb2Zmc2V0 ID0gc3BzLT5mcmFtZV9jcm9wX3RvcF9vZmZzZXQsCisgICAgICAgIC5mcmFtZV9jcm9wX2JvdHRv bV9vZmZzZXQgPSBzcHMtPmZyYW1lX2Nyb3BfYm90dG9tX29mZnNldCwKKyAgICAgICAgLyogUmVz ZXJ2ZWQgKi8KKyAgICAgICAgLnBPZmZzZXRGb3JSZWZGcmFtZSA9IHNwcy0+b2Zmc2V0X2Zvcl9y ZWZfZnJhbWUsCisgICAgICAgIC5wU2NhbGluZ0xpc3RzID0gdmtzcHNfc2NhbGluZywKKyAgICAg ICAgLnBTZXF1ZW5jZVBhcmFtZXRlclNldFZ1aSA9IHZrc3BzX3Z1aSwKKyAgICB9OworCisgICAg KnZrcHBzX3NjYWxpbmcgPSAoU3RkVmlkZW9IMjY0U2NhbGluZ0xpc3RzKSB7CisgICAgICAgIC5z Y2FsaW5nX2xpc3RfcHJlc2VudF9tYXNrID0gMHgwLCAvLyBtYXNrCisgICAgICAgIC51c2VfZGVm YXVsdF9zY2FsaW5nX21hdHJpeF9tYXNrID0gMSwKKyAgICB9OworCisgICAgKnZrcHBzID0gKFN0 ZFZpZGVvSDI2NFBpY3R1cmVQYXJhbWV0ZXJTZXQpIHsKKyAgICAgICAgLmZsYWdzID0gKFN0ZFZp ZGVvSDI2NFBwc0ZsYWdzKSB7CisgICAgICAgICAgICAudHJhbnNmb3JtXzh4OF9tb2RlX2ZsYWcg PSBwcHMtPnRyYW5zZm9ybV84eDhfbW9kZV9mbGFnLAorICAgICAgICAgICAgLnJlZHVuZGFudF9w aWNfY250X3ByZXNlbnRfZmxhZyA9IHBwcy0+cmVkdW5kYW50X3BpY19jbnRfcHJlc2VudF9mbGFn LAorICAgICAgICAgICAgLmNvbnN0cmFpbmVkX2ludHJhX3ByZWRfZmxhZyA9IHBwcy0+Y29uc3Ry YWluZWRfaW50cmFfcHJlZF9mbGFnLAorICAgICAgICAgICAgLmRlYmxvY2tpbmdfZmlsdGVyX2Nv bnRyb2xfcHJlc2VudF9mbGFnID0gcHBzLT5kZWJsb2NraW5nX2ZpbHRlcl9jb250cm9sX3ByZXNl bnRfZmxhZywKKyAgICAgICAgICAgIC53ZWlnaHRlZF9wcmVkX2ZsYWcgPSBwcHMtPndlaWdodGVk X3ByZWRfZmxhZywKKyAgICAgICAgICAgIC5ib3R0b21fZmllbGRfcGljX29yZGVyX2luX2ZyYW1l X3ByZXNlbnRfZmxhZyA9IHBwcy0+Ym90dG9tX2ZpZWxkX3BpY19vcmRlcl9pbl9mcmFtZV9wcmVz ZW50X2ZsYWcsCisgICAgICAgICAgICAuZW50cm9weV9jb2RpbmdfbW9kZV9mbGFnID0gcHBzLT5l bnRyb3B5X2NvZGluZ19tb2RlX2ZsYWcsCisgICAgICAgICAgICAucGljX3NjYWxpbmdfbWF0cml4 X3ByZXNlbnRfZmxhZyA9IHBwcy0+cGljX3NjYWxpbmdfbWF0cml4X3ByZXNlbnRfZmxhZywKKyAg ICAgICAgfSwKKyAgICAgICAgLnNlcV9wYXJhbWV0ZXJfc2V0X2lkID0gcHBzLT5zZXFfcGFyYW1l dGVyX3NldF9pZCwKKyAgICAgICAgLnBpY19wYXJhbWV0ZXJfc2V0X2lkID0gcHBzLT5waWNfcGFy YW1ldGVyX3NldF9pZCwKKyAgICAgICAgLm51bV9yZWZfaWR4X2wwX2RlZmF1bHRfYWN0aXZlX21p bnVzMSA9IHBwcy0+bnVtX3JlZl9pZHhfbDBfZGVmYXVsdF9hY3RpdmVfbWludXMxLAorICAgICAg ICAubnVtX3JlZl9pZHhfbDFfZGVmYXVsdF9hY3RpdmVfbWludXMxID0gcHBzLT5udW1fcmVmX2lk eF9sMV9kZWZhdWx0X2FjdGl2ZV9taW51czEsCisgICAgICAgIC53ZWlnaHRlZF9iaXByZWRfaWRj ID0gcHBzLT53ZWlnaHRlZF9iaXByZWRfaWRjLAorICAgICAgICAucGljX2luaXRfcXBfbWludXMy NiA9IHBwcy0+cGljX2luaXRfcXBfbWludXMyNiwKKyAgICAgICAgLnBpY19pbml0X3FzX21pbnVz MjYgPSBwcHMtPnBpY19pbml0X3FzX21pbnVzMjYsCisgICAgICAgIC5jaHJvbWFfcXBfaW5kZXhf b2Zmc2V0ID0gcHBzLT5jaHJvbWFfcXBfaW5kZXhfb2Zmc2V0LAorICAgICAgICAuc2Vjb25kX2No cm9tYV9xcF9pbmRleF9vZmZzZXQgPSBwcHMtPnNlY29uZF9jaHJvbWFfcXBfaW5kZXhfb2Zmc2V0 LAorICAgICAgICAucFNjYWxpbmdMaXN0cyA9IHZrcHBzX3NjYWxpbmcsCisgICAgfTsKKworICAg IHJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNyZWF0ZV9zZXNzaW9uX3BhcmFtcyhBVkNvZGVj Q29udGV4dCAqYXZjdHgpCit7CisgICAgaW50IGVycjsKKyAgICBWdWxrYW5FbmNvZGVIMjY0Q29u dGV4dCAqZW5jID0gYXZjdHgtPnByaXZfZGF0YTsKKyAgICBGRlZ1bGthbkVuY29kZUNvbnRleHQg KmN0eCA9ICZlbmMtPmNvbW1vbjsKKyAgICBGRlZ1bGthbkNvbnRleHQgKnMgPSAmY3R4LT5zOwor ICAgIEZGVnVsa2FuRnVuY3Rpb25zICp2ayA9ICZjdHgtPnMudmtmbjsKKworICAgIFZ1bGthbkgy NjRVbml0cyB2a191bml0cyA9IHsgMCB9OworCisgICAgVmtWaWRlb0VuY29kZUgyNjRTZXNzaW9u UGFyYW1ldGVyc0FkZEluZm9LSFIgaDI2NF9wYXJhbXNfaW5mbzsKKyAgICBWa1ZpZGVvRW5jb2Rl SDI2NFNlc3Npb25QYXJhbWV0ZXJzQ3JlYXRlSW5mb0tIUiBoMjY0X3BhcmFtczsKKworICAgIC8q IENvbnZlcnQgaXQgdG8gVnVsa2FuICovCisgICAgZXJyID0gYmFzZV91bml0X3RvX3ZrKGF2Y3R4 LCAmdmtfdW5pdHMpOworICAgIGlmIChlcnIgPCAwKSB7CisgICAgICAgIGF2X2xvZyhhdmN0eCwg QVZfTE9HX0VSUk9SLCAiVW5hYmxlIHRvIGNvbnZlcnQgU1BTL1BQUyB1bml0cyB0byBWdWxrYW46 ICVzXG4iLAorICAgICAgICAgICAgICAgYXZfZXJyMnN0cihlcnIpKTsKKyAgICAgICAgcmV0dXJu IGVycjsKKyAgICB9CisKKyAgICAvKiBEZXN0cm95IHRoZSBzZXNzaW9uIHBhcmFtcyAqLworICAg IGlmIChjdHgtPnNlc3Npb25fcGFyYW1zKQorICAgICAgICB2ay0+RGVzdHJveVZpZGVvU2Vzc2lv blBhcmFtZXRlcnNLSFIocy0+aHdjdHgtPmFjdF9kZXYsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjdHgtPnNlc3Npb25fcGFyYW1zLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy0+aHdjdHgtPmFsbG9jKTsKKworICAg IGgyNjRfcGFyYW1zX2luZm8gPSAoVmtWaWRlb0VuY29kZUgyNjRTZXNzaW9uUGFyYW1ldGVyc0Fk ZEluZm9LSFIpIHsKKyAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfVklERU9fRU5D T0RFX0gyNjRfU0VTU0lPTl9QQVJBTUVURVJTX0FERF9JTkZPX0tIUiwKKyAgICAgICAgLnBTdGRT UFNzID0gJnZrX3VuaXRzLnZrc3BzLAorICAgICAgICAuc3RkU1BTQ291bnQgPSAxLAorICAgICAg ICAucFN0ZFBQU3MgPSAmdmtfdW5pdHMudmtwcHMsCisgICAgICAgIC5zdGRQUFNDb3VudCA9IDEs CisgICAgfTsKKyAgICBoMjY0X3BhcmFtcyA9IChWa1ZpZGVvRW5jb2RlSDI2NFNlc3Npb25QYXJh bWV0ZXJzQ3JlYXRlSW5mb0tIUikgeworICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQ RV9WSURFT19FTkNPREVfSDI2NF9TRVNTSU9OX1BBUkFNRVRFUlNfQ1JFQVRFX0lORk9fS0hSLAor ICAgICAgICAubWF4U3RkU1BTQ291bnQgPSAxLAorICAgICAgICAubWF4U3RkUFBTQ291bnQgPSAx LAorICAgICAgICAucFBhcmFtZXRlcnNBZGRJbmZvID0gJmgyNjRfcGFyYW1zX2luZm8sCisgICAg fTsKKworICAgIHJldHVybiBmZl92dWxrYW5fZW5jb2RlX2NyZWF0ZV9zZXNzaW9uX3BhcmFtcyhh dmN0eCwgY3R4LCAmaDI2NF9wYXJhbXMpOworfQorCitzdGF0aWMgaW50IHBhcnNlX2ZlZWRiYWNr X3VuaXRzKEFWQ29kZWNDb250ZXh0ICphdmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgdWludDhfdCAqZGF0YSwgc2l6ZV90IHNpemUsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGludCBzcHNfb3ZlcnJpZGUsIGludCBwcHNfb3ZlcnJpZGUpCit7Cisg ICAgaW50IGVycjsKKyAgICBWdWxrYW5FbmNvZGVIMjY0Q29udGV4dCAqZW5jID0gYXZjdHgtPnBy aXZfZGF0YTsKKworICAgIENvZGVkQml0c3RyZWFtQ29udGV4dCAqY2JzOworICAgIENvZGVkQml0 c3RyZWFtRnJhZ21lbnQgYXUgPSB7IDAgfTsKKworICAgIGVyciA9IGZmX2Nic19pbml0KCZjYnMs IEFWX0NPREVDX0lEX0gyNjQsIGF2Y3R4KTsKKyAgICBpZiAoZXJyIDwgMCkKKyAgICAgICAgcmV0 dXJuIGVycjsKKworICAgIGVyciA9IGZmX2Nic19yZWFkKGNicywgJmF1LCBOVUxMLCBkYXRhLCBz aXplKTsKKyAgICBpZiAoZXJyIDwgMCkgeworICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19F UlJPUiwgIlVuYWJsZSB0byBwYXJzZSBmZWVkYmFjayB1bml0cywgYmFkIGRyaXZlcnM6ICVzXG4i LAorICAgICAgICAgICAgICAgYXZfZXJyMnN0cihlcnIpKTsKKyAgICAgICAgZ290byBmYWlsOwor ICAgIH0KKworICAgIC8qIElmIFBQUyBoYXMgYW4gb3ZlcnJpZGUsIGp1c3QgY29weSBpdCBlbnRp cmVseS4gKi8KKyAgICBpZiAocHBzX292ZXJyaWRlKSB7CisgICAgICAgIGZvciAoaW50IGkgPSAw OyBpIDwgYXUubmJfdW5pdHM7IGkrKykgeworICAgICAgICAgICAgaWYgKGF1LnVuaXRzW2ldLnR5 cGUgPT0gSDI2NF9OQUxfUFBTKSB7CisgICAgICAgICAgICAgICAgSDI2NFJhd1BQUyAqcHBzID0g YXUudW5pdHNbaV0uY29udGVudDsKKyAgICAgICAgICAgICAgICBtZW1jcHkoJmVuYy0+dW5pdHMu cmF3X3BwcywgcHBzLCBzaXplb2YoKnBwcykpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgZXJyID0gMDsKK2ZhaWw6CisgICAg ZmZfY2JzX2ZyYWdtZW50X2ZyZWUoJmF1KTsKKyAgICBmZl9jYnNfY2xvc2UoJmNicyk7CisKKyAg ICByZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGluaXRfYmFzZV91bml0cyhBVkNvZGVjQ29u dGV4dCAqYXZjdHgpCit7CisgICAgaW50IGVycjsKKyAgICBWa1Jlc3VsdCByZXQ7CisgICAgVnVs a2FuRW5jb2RlSDI2NENvbnRleHQgKmVuYyA9IGF2Y3R4LT5wcml2X2RhdGE7CisgICAgRkZWdWxr YW5FbmNvZGVDb250ZXh0ICpjdHggPSAmZW5jLT5jb21tb247CisgICAgRkZWdWxrYW5Db250ZXh0 ICpzID0gJmN0eC0+czsKKyAgICBGRlZ1bGthbkZ1bmN0aW9ucyAqdmsgPSAmY3R4LT5zLnZrZm47 CisKKyAgICBWa1ZpZGVvRW5jb2RlSDI2NFNlc3Npb25QYXJhbWV0ZXJzR2V0SW5mb0tIUiBoMjY0 X3BhcmFtc19pbmZvOworICAgIFZrVmlkZW9FbmNvZGVTZXNzaW9uUGFyYW1ldGVyc0dldEluZm9L SFIgcGFyYW1zX2luZm87CisgICAgVmtWaWRlb0VuY29kZUgyNjRTZXNzaW9uUGFyYW1ldGVyc0Zl ZWRiYWNrSW5mb0tIUiBoMjY0X3BhcmFtc19mZWVkYmFjazsKKyAgICBWa1ZpZGVvRW5jb2RlU2Vz c2lvblBhcmFtZXRlcnNGZWVkYmFja0luZm9LSFIgcGFyYW1zX2ZlZWRiYWNrOworCisgICAgdm9p ZCAqZGF0YSA9IE5VTEw7CisgICAgc2l6ZV90IGRhdGFfc2l6ZSA9IDA7CisKKyAgICAvKiBHZW5l cmF0ZSBTUFMvUFBTIHVuaXQgaW5mbyAqLworICAgIGVyciA9IGluaXRfc2VxdWVuY2VfaGVhZGVy cyhhdmN0eCk7CisgICAgaWYgKGVyciA8IDApIHsKKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9M T0dfRVJST1IsICJVbmFibGUgdG8gaW5pdGlhbGl6ZSBTUFMvUFBTIHVuaXRzOiAlc1xuIiwKKyAg ICAgICAgICAgICAgIGF2X2VycjJzdHIoZXJyKSk7CisgICAgICAgIHJldHVybiBlcnI7CisgICAg fQorCisgICAgLyogQ3JlYXRlIHNlc3Npb24gcGFyYW1ldGVycyBmcm9tIHRoZW0gKi8KKyAgICBl cnIgPSBjcmVhdGVfc2Vzc2lvbl9wYXJhbXMoYXZjdHgpOworICAgIGlmIChlcnIgPCAwKQorICAg ICAgICByZXR1cm4gZXJyOworCisgICAgaDI2NF9wYXJhbXNfaW5mbyA9IChWa1ZpZGVvRW5jb2Rl SDI2NFNlc3Npb25QYXJhbWV0ZXJzR2V0SW5mb0tIUikgeworICAgICAgICAuc1R5cGUgPSBWS19T VFJVQ1RVUkVfVFlQRV9WSURFT19FTkNPREVfSDI2NF9TRVNTSU9OX1BBUkFNRVRFUlNfR0VUX0lO Rk9fS0hSLAorICAgICAgICAud3JpdGVTdGRTUFMgPSAxLAorICAgICAgICAud3JpdGVTdGRQUFMg PSAxLAorICAgICAgICAuc3RkU1BTSWQgPSBlbmMtPnVuaXRzLnJhd19zcHMuc2VxX3BhcmFtZXRl cl9zZXRfaWQsCisgICAgICAgIC5zdGRQUFNJZCA9IGVuYy0+dW5pdHMucmF3X3Bwcy5waWNfcGFy YW1ldGVyX3NldF9pZCwKKyAgICB9OworICAgIHBhcmFtc19pbmZvID0gKFZrVmlkZW9FbmNvZGVT ZXNzaW9uUGFyYW1ldGVyc0dldEluZm9LSFIpIHsKKyAgICAgICAgLnNUeXBlID0gVktfU1RSVUNU VVJFX1RZUEVfVklERU9fRU5DT0RFX1NFU1NJT05fUEFSQU1FVEVSU19HRVRfSU5GT19LSFIsCisg ICAgICAgIC5wTmV4dCA9ICZoMjY0X3BhcmFtc19pbmZvLAorICAgICAgICAudmlkZW9TZXNzaW9u UGFyYW1ldGVycyA9IGN0eC0+c2Vzc2lvbl9wYXJhbXMsCisgICAgfTsKKworICAgIGgyNjRfcGFy YW1zX2ZlZWRiYWNrID0gKFZrVmlkZW9FbmNvZGVIMjY0U2Vzc2lvblBhcmFtZXRlcnNGZWVkYmFj a0luZm9LSFIpIHsKKyAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfVklERU9fRU5D T0RFX0gyNjRfU0VTU0lPTl9QQVJBTUVURVJTX0ZFRURCQUNLX0lORk9fS0hSLAorICAgIH07Cisg ICAgcGFyYW1zX2ZlZWRiYWNrID0gKFZrVmlkZW9FbmNvZGVTZXNzaW9uUGFyYW1ldGVyc0ZlZWRi YWNrSW5mb0tIUikgeworICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9WSURFT19F TkNPREVfU0VTU0lPTl9QQVJBTUVURVJTX0ZFRURCQUNLX0lORk9fS0hSLAorICAgICAgICAucE5l eHQgPSAmaDI2NF9wYXJhbXNfZmVlZGJhY2ssCisgICAgfTsKKworICAgIHJldCA9IHZrLT5HZXRF bmNvZGVkVmlkZW9TZXNzaW9uUGFyYW1ldGVyc0tIUihzLT5od2N0eC0+YWN0X2RldiwgJnBhcmFt c19pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAmcGFyYW1zX2ZlZWRiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAmZGF0YV9zaXplLCBkYXRhKTsKKyAgICBpZiAocmV0ID09IFZLX0lOQ09N UExFVEUgfHwKKyAgICAgICAgKHJldCA9PSBWS19TVUNDRVNTKSAmJiAoZGF0YV9zaXplID4gMCkp IHsKKyAgICAgICAgZGF0YSA9IGF2X21hbGxvY3ooZGF0YV9zaXplKTsKKyAgICAgICAgaWYgKCFk YXRhKQorICAgICAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKKyAgICB9IGVsc2Ugewor ICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIlVuYWJsZSB0byBnZXQgZmVlZGJh Y2sgZm9yIEguMjY0IHVuaXRzID0gJSJTSVpFX1NQRUNJRklFUiJcbiIsIGRhdGFfc2l6ZSk7Cisg ICAgICAgIHJldHVybiBlcnI7CisgICAgfQorCisgICAgcmV0ID0gdmstPkdldEVuY29kZWRWaWRl b1Nlc3Npb25QYXJhbWV0ZXJzS0hSKHMtPmh3Y3R4LT5hY3RfZGV2LCAmcGFyYW1zX2luZm8sCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwYXJhbXNf ZmVlZGJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICZkYXRhX3NpemUsIGRhdGEpOworICAgIGlmIChyZXQgIT0gVktfU1VDQ0VTUykgeworICAg ICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkVycm9yIHdyaXRpbmcgZmVlZGJhY2sg dW5pdHNcbiIpOworICAgICAgICByZXR1cm4gZXJyOworICAgIH0KKworICAgIGF2X2xvZyhhdmN0 eCwgQVZfTE9HX1ZFUkJPU0UsICJGZWVkYmFjayB1bml0cyB3cml0dGVuLCBvdmVycmlkZXM6ICVp IChTUFM6ICVpIFBQUzogJWkpXG4iLAorICAgICAgICAgICBwYXJhbXNfZmVlZGJhY2suaGFzT3Zl cnJpZGVzLAorICAgICAgICAgICBoMjY0X3BhcmFtc19mZWVkYmFjay5oYXNTdGRTUFNPdmVycmlk ZXMsCisgICAgICAgICAgIGgyNjRfcGFyYW1zX2ZlZWRiYWNrLmhhc1N0ZFBQU092ZXJyaWRlcyk7 CisKKyAgICBwYXJhbXNfZmVlZGJhY2suaGFzT3ZlcnJpZGVzID0gMTsKKyAgICBoMjY0X3BhcmFt c19mZWVkYmFjay5oYXNTdGRQUFNPdmVycmlkZXMgPSAxOworCisgICAgLyogTm8gbmVlZCB0byBz eW5jIGFueSBvdmVycmlkZXMgKi8KKyAgICBpZiAoIXBhcmFtc19mZWVkYmFjay5oYXNPdmVycmlk ZXMpCisgICAgICAgIHJldHVybiAwOworCisgICAgLyogUGFyc2UgYmFjayB0bmUgdW5pdHMgYW5k IG92ZXJyaWRlICovCisgICAgZXJyID0gcGFyc2VfZmVlZGJhY2tfdW5pdHMoYXZjdHgsIGRhdGEs IGRhdGFfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoMjY0X3BhcmFtc19m ZWVkYmFjay5oYXNTdGRTUFNPdmVycmlkZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaDI2NF9wYXJhbXNfZmVlZGJhY2suaGFzU3RkUFBTT3ZlcnJpZGVzKTsKKyAgICBpZiAoZXJy IDwgMCkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIC8qIENyZWF0ZSBmaW5hbCBzZXNzaW9u IHBhcmFtZXRlcnMgKi8KKyAgICBlcnIgPSBjcmVhdGVfc2Vzc2lvbl9wYXJhbXMoYXZjdHgpOwor ICAgIGlmIChlcnIgPCAwKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgcmV0dXJuIDA7Cit9 CisKK3N0YXRpYyBpbnQgdnVsa2FuX2VuY29kZV9oMjY0X2FkZF9uYWwoQVZDb2RlY0NvbnRleHQg KmF2Y3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlZEJpdHN0 cmVhbUZyYWdtZW50ICphdSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dm9pZCAqbmFsX3VuaXQpCit7CisgICAgSDI2NFJhd05BTFVuaXRIZWFkZXIgKmhlYWRlciA9IG5h bF91bml0OworCisgICAgaW50IGVyciA9IGZmX2Nic19pbnNlcnRfdW5pdF9jb250ZW50KGF1LCAt MSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyLT5uYWxf dW5pdF90eXBlLCBuYWxfdW5pdCwgTlVMTCk7CisgICAgaWYgKGVyciA8IDApCisgICAgICAgIGF2 X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiRmFpbGVkIHRvIGFkZCBOQUwgdW5pdDogIgorICAg ICAgICAgICAgICAgInR5cGUgPSAlZC5cbiIsIGhlYWRlci0+bmFsX3VuaXRfdHlwZSk7CisKKyAg ICByZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHdyaXRlX2FjY2Vzc191bml0KEFWQ29kZWND b250ZXh0ICphdmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqZGF0 YSwgc2l6ZV90ICpkYXRhX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kZWRC aXRzdHJlYW1GcmFnbWVudCAqYXUpCit7CisgICAgVnVsa2FuRW5jb2RlSDI2NENvbnRleHQgKmVu YyA9IGF2Y3R4LT5wcml2X2RhdGE7CisKKyAgICBpbnQgZXJyID0gZmZfY2JzX3dyaXRlX2ZyYWdt ZW50X2RhdGEoZW5jLT5jYnMsIGF1KTsKKyAgICBpZiAoZXJyIDwgMCkgeworICAgICAgICBhdl9s b2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkZhaWxlZCB0byB3cml0ZSBwYWNrZWQgaGVhZGVyLlxu Iik7CisgICAgICAgIHJldHVybiBlcnI7CisgICAgfQorCisgICAgaWYgKCpkYXRhX2xlbiA8IGF1 LT5kYXRhX3NpemUpIHsKKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJBY2Nl c3MgdW5pdCB0b28gbGFyZ2U6ICUiU0laRV9TUEVDSUZJRVIiIDwgJSJTSVpFX1NQRUNJRklFUiIu XG4iLAorICAgICAgICAgICAgICAgKmRhdGFfbGVuLCBhdS0+ZGF0YV9zaXplKTsKKyAgICAgICAg cmV0dXJuIEFWRVJST1IoRU5PU1BDKTsKKyAgICB9CisKKyAgICBtZW1jcHkoZGF0YSwgYXUtPmRh dGEsIGF1LT5kYXRhX3NpemUpOworICAgICpkYXRhX2xlbiA9IGF1LT5kYXRhX3NpemU7CisKKyAg ICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3cml0ZV9zZXF1ZW5jZV9oZWFkZXJzKEFWQ29k ZWNDb250ZXh0ICphdmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGRkhX QmFzZUVuY29kZVBpY3R1cmUgKmJhc2VfcGljLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHVpbnQ4X3QgKmRhdGEsIHNpemVfdCAqZGF0YV9sZW4pCit7CisgICAgaW50IGVycjsK KyAgICBWdWxrYW5FbmNvZGVIMjY0Q29udGV4dCAqZW5jID0gYXZjdHgtPnByaXZfZGF0YTsKKyAg ICBWdWxrYW5FbmNvZGVIMjY0UGljdHVyZSAgKmhwID0gYmFzZV9waWMgPyBiYXNlX3BpYy0+Y29k ZWNfcHJpdiA6IE5VTEw7CisgICAgQ29kZWRCaXRzdHJlYW1GcmFnbWVudCAgICphdSA9ICZlbmMt PmN1cnJlbnRfYWNjZXNzX3VuaXQ7CisKKyAgICBpZiAoaHAgJiYgaHAtPnVuaXRzX25lZWRlZCAm IFVOSVRfQVVEKSB7CisgICAgICAgIGVyciA9IHZ1bGthbl9lbmNvZGVfaDI2NF9hZGRfbmFsKGF2 Y3R4LCBhdSwgJmVuYy0+cmF3X2F1ZCk7CisgICAgICAgIGlmIChlcnIgPCAwKQorICAgICAgICAg ICAgZ290byBmYWlsOworICAgIH0KKworICAgIGVyciA9IHZ1bGthbl9lbmNvZGVfaDI2NF9hZGRf bmFsKGF2Y3R4LCBhdSwgJmVuYy0+dW5pdHMucmF3X3Nwcyk7CisgICAgaWYgKGVyciA8IDApCisg ICAgICAgIGdvdG8gZmFpbDsKKworICAgIGVyciA9IHZ1bGthbl9lbmNvZGVfaDI2NF9hZGRfbmFs KGF2Y3R4LCBhdSwgJmVuYy0+dW5pdHMucmF3X3Bwcyk7CisgICAgaWYgKGVyciA8IDApCisgICAg ICAgIGdvdG8gZmFpbDsKKworICAgIGVyciA9IHdyaXRlX2FjY2Vzc191bml0KGF2Y3R4LCBkYXRh LCBkYXRhX2xlbiwgYXUpOworZmFpbDoKKyAgICBmZl9jYnNfZnJhZ21lbnRfcmVzZXQoYXUpOwor ICAgIHJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgd3JpdGVfZXh0cmFfaGVhZGVycyhBVkNv ZGVjQ29udGV4dCAqYXZjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkZIV0Jh c2VFbmNvZGVQaWN0dXJlICpiYXNlX3BpYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB1aW50OF90ICpkYXRhLCBzaXplX3QgKmRhdGFfbGVuKQoreworICAgIGludCBlcnI7CisgICAg VnVsa2FuRW5jb2RlSDI2NENvbnRleHQgKmVuYyA9IGF2Y3R4LT5wcml2X2RhdGE7CisgICAgVnVs a2FuRW5jb2RlSDI2NFBpY3R1cmUgICpocCA9IGJhc2VfcGljLT5jb2RlY19wcml2OworICAgIENv ZGVkQml0c3RyZWFtRnJhZ21lbnQgICAqYXUgPSAmZW5jLT5jdXJyZW50X2FjY2Vzc191bml0Owor CisgICAgaWYgKGhwLT51bml0c19uZWVkZWQgJiBVTklUX0FVRCkgeworICAgICAgICBlcnIgPSB2 dWxrYW5fZW5jb2RlX2gyNjRfYWRkX25hbChhdmN0eCwgYXUsICZlbmMtPnJhd19hdWQpOworICAg ICAgICBpZiAoZXJyIDwgMCkKKyAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICBp ZiAoaHAtPnVuaXRzX25lZWRlZCAmIFVOSVRfU0VJX0lERU5USUZJRVIpIHsKKyAgICAgICAgZXJy ID0gZmZfY2JzX3NlaV9hZGRfbWVzc2FnZShlbmMtPmNicywgYXUsIDEsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgU0VJX1RZUEVfVVNFUl9EQVRBX1VOUkVHSVNURVJFRCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZW5jLT5zZWlfaWRlbnRpZmll ciwgTlVMTCk7CisgICAgICAgIGlmIChlcnIgPCAwKQorICAgICAgICAgICAgZ290byBmYWlsOwor ICAgIH0KKworICAgIGlmIChocC0+dW5pdHNfbmVlZGVkICYgVU5JVF9TRUlfVElNSU5HKSB7Cisg ICAgICAgIGlmIChiYXNlX3BpYy0+dHlwZSA9PSBGRl9IV19QSUNUVVJFX1RZUEVfSURSKSB7Cisg ICAgICAgICAgICBlcnIgPSBmZl9jYnNfc2VpX2FkZF9tZXNzYWdlKGVuYy0+Y2JzLCBhdSwgMSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VJX1RZUEVfQlVGRkVS SU5HX1BFUklPRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmVu Yy0+dW5pdHMuc2VpX2J1ZmZlcmluZ19wZXJpb2QsIE5VTEwpOworICAgICAgICAgICAgaWYgKGVy ciA8IDApCisgICAgICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICB9CisgICAgICAgIGVy ciA9IGZmX2Nic19zZWlfYWRkX21lc3NhZ2UoZW5jLT5jYnMsIGF1LCAxLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFNFSV9UWVBFX1BJQ19USU1JTkcsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJmVuYy0+c2VpX3BpY190aW1pbmcsIE5VTEwpOwor ICAgICAgICBpZiAoZXJyIDwgMCkKKyAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAg ICBpZiAoaHAtPnVuaXRzX25lZWRlZCAmIFVOSVRfU0VJX1JFQ09WRVJZKSB7CisgICAgICAgIGVy ciA9IGZmX2Nic19zZWlfYWRkX21lc3NhZ2UoZW5jLT5jYnMsIGF1LCAxLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFNFSV9UWVBFX1JFQ09WRVJZX1BPSU5ULAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZlbmMtPnNlaV9yZWNvdmVyeV9wb2ludCwg TlVMTCk7CisgICAgICAgIGlmIChlcnIgPCAwKQorICAgICAgICAgICAgZ290byBmYWlsOworICAg IH0KKworICAgIGlmIChocC0+dW5pdHNfbmVlZGVkICYgVU5JVF9TRUlfQTUzX0NDKSB7CisgICAg ICAgIGVyciA9IGZmX2Nic19zZWlfYWRkX21lc3NhZ2UoZW5jLT5jYnMsIGF1LCAxLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFSV9UWVBFX1VTRVJfREFUQV9SRUdJU1RF UkVEX0lUVV9UX1QzNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZW5j LT5zZWlfYTUzY2MsIE5VTEwpOworICAgICAgICBpZiAoZXJyIDwgMCkKKyAgICAgICAgICAgIGdv dG8gZmFpbDsKKyAgICB9CisKKyAgICBpZiAoaHAtPnVuaXRzX25lZWRlZCkgeworICAgICAgICBl cnIgPSB3cml0ZV9hY2Nlc3NfdW5pdChhdmN0eCwgZGF0YSwgZGF0YV9sZW4sIGF1KTsKKyAgICAg ICAgaWYgKGVyciA8IDApCisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgfSBlbHNlIHsKKyAg ICAgICAgZXJyID0gMDsKKyAgICAgICAgKmRhdGFfbGVuID0gMDsKKyAgICB9CisKK2ZhaWw6Cisg ICAgZmZfY2JzX2ZyYWdtZW50X3Jlc2V0KGF1KTsKKyAgICByZXR1cm4gZXJyOworfQorCitzdGF0 aWMgaW50IHdyaXRlX2ZpbGxlcihBVkNvZGVjQ29udGV4dCAqYXZjdHgsIHVpbnQzMl90IGZpbGxl ciwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKmRhdGEsIHNpemVfdCAqZGF0YV9s ZW4pCit7CisgICAgaW50IGVycjsKKyAgICBWdWxrYW5FbmNvZGVIMjY0Q29udGV4dCAqZW5jID0g YXZjdHgtPnByaXZfZGF0YTsKKyAgICBDb2RlZEJpdHN0cmVhbUZyYWdtZW50ICAgKmF1ID0gJmVu Yy0+Y3VycmVudF9hY2Nlc3NfdW5pdDsKKworICAgIEgyNjRSYXdGaWxsZXIgcmF3X2ZpbGxlciA9 IHsKKyAgICAgICAgLm5hbF91bml0X2hlYWRlciA9IHsKKyAgICAgICAgICAgIC5uYWxfdW5pdF90 eXBlID0gSDI2NF9OQUxfRklMTEVSX0RBVEEsCisgICAgICAgIH0sCisgICAgICAgIC5maWxsZXJf c2l6ZSA9IGZpbGxlciwKKyAgICB9OworCisgICAgZXJyID0gdnVsa2FuX2VuY29kZV9oMjY0X2Fk ZF9uYWwoYXZjdHgsIGF1LCAmcmF3X2ZpbGxlcik7CisgICAgaWYgKGVyciA8IDApCisgICAgICAg IGdvdG8gZmFpbDsKKworICAgIGVyciA9IHdyaXRlX2FjY2Vzc191bml0KGF2Y3R4LCBkYXRhLCBk YXRhX2xlbiwgYXUpOworZmFpbDoKKyAgICBmZl9jYnNfZnJhZ21lbnRfcmVzZXQoYXUpOworICAg IHJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBjb25zdCBGRlZ1bGthbkNvZGVjIGVuY19jYiA9IHsK KyAgICAuZmxhZ3MgPSBGRl9IV19GTEFHX0JfUElDVFVSRVMgfAorICAgICAgICAgICAgIEZGX0hX X0ZMQUdfQl9QSUNUVVJFX1JFRkVSRU5DRVMgfAorICAgICAgICAgICAgIEZGX0hXX0ZMQUdfTk9O X0lEUl9LRVlfUElDVFVSRVMsCisgICAgLnBpY3R1cmVfcHJpdl9kYXRhX3NpemUgPSBzaXplb2Yo VnVsa2FuRW5jb2RlSDI2NFBpY3R1cmUpLAorICAgIC5maWxsZXJfaGVhZGVyX3NpemUgPSA2LAor ICAgIC5pbml0X3Byb2ZpbGUgPSBpbml0X3Byb2ZpbGUsCisgICAgLmluaXRfcGljX3JjID0gaW5p dF9waWNfcmMsCisgICAgLmluaXRfcGljX3BhcmFtcyA9IGluaXRfcGljX3BhcmFtcywKKyAgICAu d3JpdGVfc2VxdWVuY2VfaGVhZGVycyA9IHdyaXRlX3NlcXVlbmNlX2hlYWRlcnMsCisgICAgLndy aXRlX2V4dHJhX2hlYWRlcnMgPSB3cml0ZV9leHRyYV9oZWFkZXJzLAorICAgIC53cml0ZV9maWxs ZXIgPSB3cml0ZV9maWxsZXIsCit9OworCitzdGF0aWMgYXZfY29sZCBpbnQgdnVsa2FuX2VuY29k ZV9oMjY0X2luaXQoQVZDb2RlY0NvbnRleHQgKmF2Y3R4KQoreworICAgIGludCBlcnIsIHJlZl9s MCwgcmVmX2wxOworICAgIFZ1bGthbkVuY29kZUgyNjRDb250ZXh0ICplbmMgPSBhdmN0eC0+cHJp dl9kYXRhOworICAgIEZGVnVsa2FuRW5jb2RlQ29udGV4dCAqY3R4ID0gJmVuYy0+Y29tbW9uOwor ICAgIEZGVnVsa2FuQ29udGV4dCAqcyA9ICZjdHgtPnM7CisgICAgRkZIV0Jhc2VFbmNvZGVDb250 ZXh0ICpiYXNlX2N0eCA9ICZjdHgtPmJhc2U7CisgICAgaW50IGZsYWdzOworCisgICAgaWYgKGF2 Y3R4LT5wcm9maWxlID09IEFWX1BST0ZJTEVfVU5LTk9XTikKKyAgICAgICAgYXZjdHgtPnByb2Zp bGUgPSBlbmMtPmNvbW1vbi5vcHRzLnByb2ZpbGU7CisKKyAgICBlbmMtPmNhcHMgPSAoVmtWaWRl b0VuY29kZUgyNjRDYXBhYmlsaXRpZXNLSFIpIHsKKyAgICAgICAgLnNUeXBlID0gVktfU1RSVUNU VVJFX1RZUEVfVklERU9fRU5DT0RFX0gyNjRfQ0FQQUJJTElUSUVTX0tIUiwKKyAgICB9OworCisg ICAgZW5jLT5xdWFsaXR5X3Byb3BzID0gKFZrVmlkZW9FbmNvZGVIMjY0UXVhbGl0eUxldmVsUHJv cGVydGllc0tIUikgeworICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9WSURFT19F TkNPREVfSDI2NF9RVUFMSVRZX0xFVkVMX1BST1BFUlRJRVNfS0hSLAorICAgIH07CisKKyAgICBl cnIgPSBmZl92dWxrYW5fZW5jb2RlX2luaXQoYXZjdHgsICZlbmMtPmNvbW1vbiwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJmZmX3ZrX2VuY19oMjY0X2Rlc2MsICZlbmNfY2IsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZlbmMtPmNhcHMsICZlbmMtPnF1YWxpdHlf cHJvcHMpOworICAgIGlmIChlcnIgPCAwKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgYXZf bG9nKGF2Y3R4LCBBVl9MT0dfVkVSQk9TRSwgIkgyNjQgZW5jb2RlciBjYXBhYmlsaXRpZXM6XG4i KTsKKyAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19WRVJCT1NFLCAiICAgIFN0YW5kYXJkIGNhcGFi aWxpdHkgZmxhZ3M6XG4iKTsKKyAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19WRVJCT1NFLCAiICAg ICAgICBzZXBhcmF0ZV9jb2xvcl9wbGFuZTogJWlcbiIsCisgICAgICAgICAgICEhKGVuYy0+Y2Fw cy5zdGRTeW50YXhGbGFncyAmIFZLX1ZJREVPX0VOQ09ERV9IMjY0X1NURF9TRVBBUkFURV9DT0xP Ul9QTEFORV9GTEFHX1NFVF9CSVRfS0hSKSk7CisgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfVkVS Qk9TRSwgIiAgICAgICAgcXByaW1lX3lfemVyb190cmFuc2Zvcm1fYnlwYXNzOiAlaVxuIiwKKyAg ICAgICAgICAgISEoZW5jLT5jYXBzLnN0ZFN5bnRheEZsYWdzICYgVktfVklERU9fRU5DT0RFX0gy NjRfU1REX1FQUFJJTUVfWV9aRVJPX1RSQU5TRk9STV9CWVBBU1NfRkxBR19TRVRfQklUX0tIUikp OworICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX1ZFUkJPU0UsICIgICAgICAgIHNjYWxpbmdfbGlz dHM6ICVpXG4iLAorICAgICAgICAgICAhIShlbmMtPmNhcHMuc3RkU3ludGF4RmxhZ3MgJiBWS19W SURFT19FTkNPREVfSDI2NF9TVERfU0NBTElOR19NQVRSSVhfUFJFU0VOVF9GTEFHX1NFVF9CSVRf S0hSKSk7CisgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfVkVSQk9TRSwgIiAgICAgICAgY2hyb21h X3FwX2luZGV4X29mZnNldDogJWlcbiIsCisgICAgICAgICAgICEhKGVuYy0+Y2Fwcy5zdGRTeW50 YXhGbGFncyAmIFZLX1ZJREVPX0VOQ09ERV9IMjY0X1NURF9DSFJPTUFfUVBfSU5ERVhfT0ZGU0VU X0JJVF9LSFIpKTsKKyAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19WRVJCT1NFLCAiICAgICAgICBz ZWNvbmRfY2hyb21hX3FwX2luZGV4X29mZnNldDogJWlcbiIsCisgICAgICAgICAgICEhKGVuYy0+ Y2Fwcy5zdGRTeW50YXhGbGFncyAmIFZLX1ZJREVPX0VOQ09ERV9IMjY0X1NURF9TRUNPTkRfQ0hS T01BX1FQX0lOREVYX09GRlNFVF9CSVRfS0hSKSk7CisgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0df VkVSQk9TRSwgIiAgICAgICAgcGljX2luaXRfcXA6ICVpXG4iLAorICAgICAgICAgICAhIShlbmMt PmNhcHMuc3RkU3ludGF4RmxhZ3MgJiBWS19WSURFT19FTkNPREVfSDI2NF9TVERfUElDX0lOSVRf UVBfTUlOVVMyNl9CSVRfS0hSKSk7CisgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfVkVSQk9TRSwg IiAgICAgICAgd2VpZ2h0ZWQ6JXMlcyVzXG4iLAorICAgICAgICAgICBlbmMtPmNhcHMuc3RkU3lu dGF4RmxhZ3MgJiBWS19WSURFT19FTkNPREVfSDI2NF9TVERfV0VJR0hURURfUFJFRF9GTEFHX1NF VF9CSVRfS0hSID8KKyAgICAgICAgICAgICAgICIgcHJlZCIgOiAiIiwKKyAgICAgICAgICAgZW5j LT5jYXBzLnN0ZFN5bnRheEZsYWdzICYgVktfVklERU9fRU5DT0RFX0gyNjRfU1REX1dFSUdIVEVE X0JJUFJFRF9JRENfRVhQTElDSVRfQklUX0tIUiA/CisgICAgICAgICAgICAgICAiIGJpcHJlZF9l eHBsaWNpdCIgOiAiIiwKKyAgICAgICAgICAgZW5jLT5jYXBzLnN0ZFN5bnRheEZsYWdzICYgVktf VklERU9fRU5DT0RFX0gyNjRfU1REX1dFSUdIVEVEX0JJUFJFRF9JRENfSU1QTElDSVRfQklUX0tI UiA/CisgICAgICAgICAgICAgICAiIGJpcHJlZF9pbXBsaWNpdCIgOiAiIik7CisgICAgYXZfbG9n KGF2Y3R4LCBBVl9MT0dfVkVSQk9TRSwgIiAgICAgICAgOHg4X3RyYW5zZm9ybXM6ICVpXG4iLAor ICAgICAgICAgICAhIShlbmMtPmNhcHMuc3RkU3ludGF4RmxhZ3MgJiBWS19WSURFT19FTkNPREVf SDI2NF9TVERfVFJBTlNGT1JNXzhYOF9NT0RFX0ZMQUdfU0VUX0JJVF9LSFIpKTsKKyAgICBhdl9s b2coYXZjdHgsIEFWX0xPR19WRVJCT1NFLCAiICAgICAgICBkaXNhYmxlX2RpcmVjdF9zcGF0aWFs X212X3ByZWQ6ICVpXG4iLAorICAgICAgICAgICAhIShlbmMtPmNhcHMuc3RkU3ludGF4RmxhZ3Mg JiBWS19WSURFT19FTkNPREVfSDI2NF9TVERfRElSRUNUX1NQQVRJQUxfTVZfUFJFRF9GTEFHX1VO U0VUX0JJVF9LSFIpKTsKKyAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19WRVJCT1NFLCAiICAgICAg ICBjb2RlcjolcyVzXG4iLAorICAgICAgICAgICBlbmMtPmNhcHMuc3RkU3ludGF4RmxhZ3MgJiBW S19WSURFT19FTkNPREVfSDI2NF9TVERfRU5UUk9QWV9DT0RJTkdfTU9ERV9GTEFHX1VOU0VUX0JJ VF9LSFIgPworICAgICAgICAgICAgICAgIiBjYWJhYyIgOiAiIiwKKyAgICAgICAgICAgZW5jLT5j YXBzLnN0ZFN5bnRheEZsYWdzICYgVktfVklERU9fRU5DT0RFX0gyNjRfU1REX0VOVFJPUFlfQ09E SU5HX01PREVfRkxBR19TRVRfQklUX0tIUiA/CisgICAgICAgICAgICAgICAiIGNhdmxjIiA6ICIi KTsKKyAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19WRVJCT1NFLCAiICAgICAgICBkaXJlY3RfOHg4 X2luZmVyZW5jZTogJWlcbiIsCisgICAgICAgICAgICEhKGVuYy0+Y2Fwcy5zdGRTeW50YXhGbGFn cyAmIFZLX1ZJREVPX0VOQ09ERV9IMjY0X1NURF9ESVJFQ1RfOFg4X0lORkVSRU5DRV9GTEFHX1VO U0VUX0JJVF9LSFIpKTsKKyAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19WRVJCT1NFLCAiICAgICAg ICBjb25zdHJhaW5lZF9pbnRyYV9wcmVkOiAlaVxuIiwKKyAgICAgICAgICAgISEoZW5jLT5jYXBz LnN0ZFN5bnRheEZsYWdzICYgVktfVklERU9fRU5DT0RFX0gyNjRfU1REX0NPTlNUUkFJTkVEX0lO VFJBX1BSRURfRkxBR19TRVRfQklUX0tIUikpOworICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX1ZF UkJPU0UsICIgICAgICAgIGRlYmxvY2s6JXMlcyVzXG4iLAorICAgICAgICAgICBlbmMtPmNhcHMu c3RkU3ludGF4RmxhZ3MgJiBWS19WSURFT19FTkNPREVfSDI2NF9TVERfREVCTE9DS0lOR19GSUxU RVJfRElTQUJMRURfQklUX0tIUiA/CisgICAgICAgICAgICAgICAiIGZpbHRlcl9kaXNhYmxpbmci IDogIiIsCisgICAgICAgICAgIGVuYy0+Y2Fwcy5zdGRTeW50YXhGbGFncyAmIFZLX1ZJREVPX0VO Q09ERV9IMjY0X1NURF9ERUJMT0NLSU5HX0ZJTFRFUl9FTkFCTEVEX0JJVF9LSFIgPworICAgICAg ICAgICAgICAgIiBmaWx0ZXJfZW5hYmxpbmciIDogIiIsCisgICAgICAgICAgIGVuYy0+Y2Fwcy5z dGRTeW50YXhGbGFncyAmIFZLX1ZJREVPX0VOQ09ERV9IMjY0X1NURF9ERUJMT0NLSU5HX0ZJTFRF Ul9QQVJUSUFMX0JJVF9LSFIgPworICAgICAgICAgICAgICAgIiBmaWx0ZXJfcGFydGlhbCIgOiAi Iik7CisKKyAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19WRVJCT1NFLCAiICAgIENhcGFiaWxpdHkg ZmxhZ3M6XG4iKTsKKyAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19WRVJCT1NFLCAiICAgICAgICBo ZHJfY29tcGxpYW5jZTogJWlcbiIsCisgICAgICAgICAgICEhKGVuYy0+Y2Fwcy5mbGFncyAmIFZL X1ZJREVPX0VOQ09ERV9IMjY0X0NBUEFCSUxJVFlfSFJEX0NPTVBMSUFOQ0VfQklUX0tIUikpOwor ICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX1ZFUkJPU0UsICIgICAgICAgIHByZWRfd2VpZ2h0X3Rh YmxlX2dlbmVyYXRlZDogJWlcbiIsCisgICAgICAgICAgICEhKGVuYy0+Y2Fwcy5mbGFncyAmIFZL X1ZJREVPX0VOQ09ERV9IMjY0X0NBUEFCSUxJVFlfUFJFRElDVElPTl9XRUlHSFRfVEFCTEVfR0VO RVJBVEVEX0JJVF9LSFIpKTsKKyAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19WRVJCT1NFLCAiICAg ICAgICByb3dfdW5hbGlnbmVkX3NsaWNlOiAlaVxuIiwKKyAgICAgICAgICAgISEoZW5jLT5jYXBz LmZsYWdzICYgVktfVklERU9fRU5DT0RFX0gyNjRfQ0FQQUJJTElUWV9ST1dfVU5BTElHTkVEX1NM SUNFX0JJVF9LSFIpKTsKKyAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19WRVJCT1NFLCAiICAgICAg ICBkaWZmZXJlbnRfc2xpY2VfdHlwZTogJWlcbiIsCisgICAgICAgICAgICEhKGVuYy0+Y2Fwcy5m bGFncyAmIFZLX1ZJREVPX0VOQ09ERV9IMjY0X0NBUEFCSUxJVFlfRElGRkVSRU5UX1NMSUNFX1RZ UEVfQklUX0tIUikpOworICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX1ZFUkJPU0UsICIgICAgICAg IGJfZnJhbWVfaW5fbDBfbGlzdDogJWlcbiIsCisgICAgICAgICAgICEhKGVuYy0+Y2Fwcy5mbGFn cyAmIFZLX1ZJREVPX0VOQ09ERV9IMjY0X0NBUEFCSUxJVFlfQl9GUkFNRV9JTl9MMF9MSVNUX0JJ VF9LSFIpKTsKKyAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19WRVJCT1NFLCAiICAgICAgICBiX2Zy YW1lX2luX2wxX2xpc3Q6ICVpXG4iLAorICAgICAgICAgICAhIShlbmMtPmNhcHMuZmxhZ3MgJiBW S19WSURFT19FTkNPREVfSDI2NF9DQVBBQklMSVRZX0JfRlJBTUVfSU5fTDFfTElTVF9CSVRfS0hS KSk7CisgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfVkVSQk9TRSwgIiAgICAgICAgcGVyX3BpY3Rf dHlwZV9taW5fbWF4X3FwOiAlaVxuIiwKKyAgICAgICAgICAgISEoZW5jLT5jYXBzLmZsYWdzICYg VktfVklERU9fRU5DT0RFX0gyNjRfQ0FQQUJJTElUWV9QRVJfUElDVFVSRV9UWVBFX01JTl9NQVhf UVBfQklUX0tIUikpOworICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX1ZFUkJPU0UsICIgICAgICAg IHBlcl9zbGljZV9jb25zdGFudF9xcDogJWlcbiIsCisgICAgICAgICAgICEhKGVuYy0+Y2Fwcy5m bGFncyAmIFZLX1ZJREVPX0VOQ09ERV9IMjY0X0NBUEFCSUxJVFlfUEVSX1NMSUNFX0NPTlNUQU5U X1FQX0JJVF9LSFIpKTsKKyAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19WRVJCT1NFLCAiICAgICAg ICBnZW5lcmF0ZV9wcmVmaXhfbmFsdTogJWlcbiIsCisgICAgICAgICAgICEhKGVuYy0+Y2Fwcy5m bGFncyAmIFZLX1ZJREVPX0VOQ09ERV9IMjY0X0NBUEFCSUxJVFlfR0VORVJBVEVfUFJFRklYX05B TFVfQklUX0tIUikpOworCisgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfVkVSQk9TRSwgIiAgICBD YXBhYmlsaXRpZXM6XG4iKTsKKyAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19WRVJCT1NFLCAiICAg ICAgICBtYXhMZXZlbElkYzogJWlcbiIsCisgICAgICAgICAgIGVuYy0+Y2Fwcy5tYXhMZXZlbElk Yyk7CisgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfVkVSQk9TRSwgIiAgICAgICAgbWF4U2xpY2VD b3VudDogJWlcbiIsCisgICAgICAgICAgIGVuYy0+Y2Fwcy5tYXhTbGljZUNvdW50KTsKKyAgICBh dl9sb2coYXZjdHgsIEFWX0xPR19WRVJCT1NFLCAiICAgICAgICBtYXgoUC9CKVBpY3R1cmVMMFJl ZmVyZW5jZUNvdW50OiAlaSBQJ3M7ICVpIEInc1xuIiwKKyAgICAgICAgICAgZW5jLT5jYXBzLm1h eFBQaWN0dXJlTDBSZWZlcmVuY2VDb3VudCwKKyAgICAgICAgICAgZW5jLT5jYXBzLm1heEJQaWN0 dXJlTDBSZWZlcmVuY2VDb3VudCk7CisgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfVkVSQk9TRSwg IiAgICAgICAgbWF4TDFSZWZlcmVuY2VDb3VudDogJWlcbiIsCisgICAgICAgICAgIGVuYy0+Y2Fw cy5tYXhMMVJlZmVyZW5jZUNvdW50KTsKKyAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19WRVJCT1NF LCAiICAgICAgICBtYXhUZW1wb3JhbExheWVyQ291bnQ6ICVpXG4iLAorICAgICAgICAgICBlbmMt PmNhcHMubWF4VGVtcG9yYWxMYXllckNvdW50KTsKKyAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19W RVJCT1NFLCAiICAgICAgICBleHBlY3REeWFkaWNUZW1wb3JhbExheWVyUGF0dGVybjogJWlcbiIs CisgICAgICAgICAgIGVuYy0+Y2Fwcy5leHBlY3REeWFkaWNUZW1wb3JhbExheWVyUGF0dGVybik7 CisgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfVkVSQk9TRSwgIiAgICAgICAgbWluL21heCBRcDog WyVpLCAlaV1cbiIsCisgICAgICAgICAgIGVuYy0+Y2Fwcy5taW5RcCwgZW5jLT5jYXBzLm1heFFw KTsKKyAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19WRVJCT1NFLCAiICAgICAgICBwcmVmZXJzR29w UmVtYWluaW5nRnJhbWVzOiAlaVxuIiwKKyAgICAgICAgICAgZW5jLT5jYXBzLnByZWZlcnNHb3BS ZW1haW5pbmdGcmFtZXMpOworICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX1ZFUkJPU0UsICIgICAg ICAgIHJlcXVpcmVzR29wUmVtYWluaW5nRnJhbWVzOiAlaVxuIiwKKyAgICAgICAgICAgZW5jLT5j YXBzLnJlcXVpcmVzR29wUmVtYWluaW5nRnJhbWVzKTsKKworICAgIGVyciA9IGluaXRfZW5jX29w dGlvbnMoYXZjdHgpOworICAgIGlmIChlcnIgPCAwKQorICAgICAgICByZXR1cm4gZXJyOworCisg ICAgZmxhZ3MgPSBjdHgtPmNvZGVjLT5mbGFnczsKKyAgICBpZiAoIWVuYy0+Y2Fwcy5tYXhQUGlj dHVyZUwwUmVmZXJlbmNlQ291bnQgJiYKKyAgICAgICAgIWVuYy0+Y2Fwcy5tYXhCUGljdHVyZUww UmVmZXJlbmNlQ291bnQgJiYKKyAgICAgICAgIWVuYy0+Y2Fwcy5tYXhMMVJlZmVyZW5jZUNvdW50 KSB7CisgICAgICAgIC8qIEludHJhLW9ubHkgKi8KKyAgICAgICAgZmxhZ3MgfD0gRkZfSFdfRkxB R19JTlRSQV9PTkxZOworICAgICAgICByZWZfbDAgPSByZWZfbDEgPSAwOworICAgIH0gZWxzZSBp ZiAoIWVuYy0+Y2Fwcy5tYXhQUGljdHVyZUwwUmVmZXJlbmNlQ291bnQpIHsKKyAgICAgICAgLyog Tm8gUC1mcmFtZXM/IEhvdy4gKi8KKyAgICAgICAgYmFzZV9jdHgtPnBfdG9fZ3BiID0gMTsKKyAg ICAgICAgcmVmX2wwID0gZW5jLT5jYXBzLm1heEJQaWN0dXJlTDBSZWZlcmVuY2VDb3VudDsKKyAg ICAgICAgcmVmX2wxID0gZW5jLT5jYXBzLm1heEwxUmVmZXJlbmNlQ291bnQ7CisgICAgfSBlbHNl IGlmICghZW5jLT5jYXBzLm1heEJQaWN0dXJlTDBSZWZlcmVuY2VDb3VudCAmJgorICAgICAgICAg ICAgICAgIWVuYy0+Y2Fwcy5tYXhMMVJlZmVyZW5jZUNvdW50KSB7CisgICAgICAgIC8qIE5vIEIt ZnJhbWVzICovCisgICAgICAgIGZsYWdzICY9IH4oRkZfSFdfRkxBR19CX1BJQ1RVUkVTIHwgRkZf SFdfRkxBR19CX1BJQ1RVUkVfUkVGRVJFTkNFUyk7CisgICAgICAgIHJlZl9sMCA9IGVuYy0+Y2Fw cy5tYXhQUGljdHVyZUwwUmVmZXJlbmNlQ291bnQ7CisgICAgICAgIHJlZl9sMSA9IDA7CisgICAg fSBlbHNlIHsKKyAgICAgICAgLyogUCBhbmQgQiBmcmFtZXMgKi8KKyAgICAgICAgcmVmX2wwID0g RkZNSU4oZW5jLT5jYXBzLm1heFBQaWN0dXJlTDBSZWZlcmVuY2VDb3VudCwKKyAgICAgICAgICAg ICAgICAgICAgICAgZW5jLT5jYXBzLm1heEJQaWN0dXJlTDBSZWZlcmVuY2VDb3VudCk7CisgICAg ICAgIHJlZl9sMSA9IGVuYy0+Y2Fwcy5tYXhMMVJlZmVyZW5jZUNvdW50OworICAgIH0KKworICAg IGVyciA9IGZmX2h3X2Jhc2VfaW5pdF9nb3Bfc3RydWN0dXJlKGJhc2VfY3R4LCBhdmN0eCwgcmVm X2wwLCByZWZfbDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxh Z3MsIDApOworICAgIGlmIChlcnIgPCAwKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgYmFz ZV9jdHgtPm91dHB1dF9kZWxheSA9IGJhc2VfY3R4LT5iX3Blcl9wOworICAgIGJhc2VfY3R4LT5k ZWNvZGVfZGVsYXkgPSBiYXNlX2N0eC0+bWF4X2JfZGVwdGg7CisKKyAgICAvKiBQcmVwYXJlIFNF SSAqLworICAgIGlmIChlbmMtPnVuaXRfZWxlbXMgJiBVTklUX1NFSV9JREVOVElGSUVSKSB7Cisg ICAgICAgIGludCBsZW47CisKKyAgICAgICAgbWVtY3B5KGVuYy0+c2VpX2lkZW50aWZpZXIudXVp ZF9pc29faWVjXzExNTc4LAorICAgICAgICAgICAgICAgdnVsa2FuX2VuY29kZV9oMjY0X3NlaV9p ZGVudGlmaWVyX3V1aWQsCisgICAgICAgICAgICAgICBzaXplb2YoZW5jLT5zZWlfaWRlbnRpZmll ci51dWlkX2lzb19pZWNfMTE1NzgpKTsKKworICAgICAgICBsZW4gPSBzbnByaW50ZihOVUxMLCAw LAorICAgICAgICAgICAgICAgICAgICAgICAiJXMgLyBWdWxrYW4gdmlkZW8gJWkuJWkuJWkgLyAl cyAlaS4laS4laSAvICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgTElCQVZDT0RFQ19JREVO VCwKKyAgICAgICAgICAgICAgICAgICAgICAgQ09ERUNfVkVSKGZmX3ZrX2VuY19oMjY0X2Rlc2Mu ZXh0X3Byb3BzLnNwZWNWZXJzaW9uKSwKKyAgICAgICAgICAgICAgICAgICAgICAgcy0+ZHJpdmVy X3Byb3BzLmRyaXZlck5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgIENPREVDX1ZFUihzLT5w cm9wcy5wcm9wZXJ0aWVzLmRyaXZlclZlcnNpb24pLAorICAgICAgICAgICAgICAgICAgICAgICBz LT5wcm9wcy5wcm9wZXJ0aWVzLmRldmljZU5hbWUpOworCisgICAgICAgIGlmIChsZW4gPj0gMCkg eworICAgICAgICAgICAgZW5jLT5zZWlfaWRlbnRpZmllcl9zdHJpbmcgPSBhdl9tYWxsb2MobGVu ICsgMSk7CisgICAgICAgICAgICBpZiAoIWVuYy0+c2VpX2lkZW50aWZpZXJfc3RyaW5nKQorICAg ICAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7CisKKyAgICAgICAgICAgIGxlbiA9 IHNucHJpbnRmKGVuYy0+c2VpX2lkZW50aWZpZXJfc3RyaW5nLCBsZW4gKyAxLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgIiVzIC8gVnVsa2FuIHZpZGVvICVpLiVpLiVpIC8gJXMgJWkuJWku JWkgLyAlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJBVkNPREVDX0lERU5ULAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09ERUNfVkVSKGZmX3ZrX2VuY19oMjY0X2Rlc2Mu ZXh0X3Byb3BzLnNwZWNWZXJzaW9uKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHMtPmRy aXZlcl9wcm9wcy5kcml2ZXJOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09ERUNf VkVSKHMtPnByb3BzLnByb3BlcnRpZXMuZHJpdmVyVmVyc2lvbiksCisgICAgICAgICAgICAgICAg ICAgICAgICAgICBzLT5wcm9wcy5wcm9wZXJ0aWVzLmRldmljZU5hbWUpOworCisgICAgICAgICAg ICBlbmMtPnNlaV9pZGVudGlmaWVyLmRhdGEgICAgICAgID0gZW5jLT5zZWlfaWRlbnRpZmllcl9z dHJpbmc7CisgICAgICAgICAgICBlbmMtPnNlaV9pZGVudGlmaWVyLmRhdGFfbGVuZ3RoID0gbGVu ICsgMTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIEluaXQgQ0JTICovCisgICAgZXJyID0g ZmZfY2JzX2luaXQoJmVuYy0+Y2JzLCBBVl9DT0RFQ19JRF9IMjY0LCBhdmN0eCk7CisgICAgaWYg KGVyciA8IDApCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICAvKiBDcmVhdGUgdW5pdHMgYW5k IHNlc3Npb24gcGFyYW1ldGVycyAqLworICAgIGVyciA9IGluaXRfYmFzZV91bml0cyhhdmN0eCk7 CisgICAgaWYgKGVyciA8IDApCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICAvKiBXcml0ZSBv dXQgZXh0cmFkYXRhICovCisgICAgZXJyID0gZmZfdnVsa2FuX3dyaXRlX2dsb2JhbF9oZWFkZXIo YXZjdHgsICZlbmMtPmNvbW1vbik7CisgICAgaWYgKGVyciA8IDApCisgICAgICAgIHJldHVybiBl cnI7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGF2X2NvbGQgaW50IHZ1bGthbl9lbmNv ZGVfaDI2NF9jbG9zZShBVkNvZGVjQ29udGV4dCAqYXZjdHgpCit7CisgICAgVnVsa2FuRW5jb2Rl SDI2NENvbnRleHQgKmVuYyA9IGF2Y3R4LT5wcml2X2RhdGE7CisgICAgZmZfdnVsa2FuX2VuY29k ZV91bmluaXQoJmVuYy0+Y29tbW9uKTsKKyAgICByZXR1cm4gMDsKK30KKworI2RlZmluZSBPRkZT RVQoeCkgb2Zmc2V0b2YoVnVsa2FuRW5jb2RlSDI2NENvbnRleHQsIHgpCisjZGVmaW5lIEZMQUdT IChBVl9PUFRfRkxBR19WSURFT19QQVJBTSB8IEFWX09QVF9GTEFHX0VOQ09ESU5HX1BBUkFNKQor c3RhdGljIGNvbnN0IEFWT3B0aW9uIHZ1bGthbl9lbmNvZGVfaDI2NF9vcHRpb25zW10gPSB7Cisg ICAgSFdfQkFTRV9FTkNPREVfQ09NTU9OX09QVElPTlMsCisgICAgVlVMS0FOX0VOQ09ERV9DT01N T05fT1BUSU9OUywKKworICAgIHsgInByb2ZpbGUiLCAiU2V0IHByb2ZpbGUgKHByb2ZpbGVfaWRj IGFuZCBjb25zdHJhaW50X3NldCpfZmxhZykiLAorICAgICAgT0ZGU0VUKGNvbW1vbi5vcHRzLnBy b2ZpbGUpLCBBVl9PUFRfVFlQRV9JTlQsCisgICAgICB7IC5pNjQgPSBBVl9QUk9GSUxFX1VOS05P V04gfSwgQVZfUFJPRklMRV9VTktOT1dOLCAweGZmZmYsIEZMQUdTLCAudW5pdCA9ICJwcm9maWxl IiB9LAorCisjZGVmaW5lIFBST0ZJTEUobmFtZSwgdmFsdWUpICBuYW1lLCBOVUxMLCAwLCBBVl9P UFRfVFlQRV9DT05TVCwgXAorICAgICAgeyAuaTY0ID0gdmFsdWUgfSwgMCwgMCwgRkxBR1MsIC51 bml0ID0gInByb2ZpbGUiCisgICAgeyBQUk9GSUxFKCJjb25zdHJhaW5lZF9iYXNlbGluZSIsIEFW X1BST0ZJTEVfSDI2NF9DT05TVFJBSU5FRF9CQVNFTElORSkgfSwKKyAgICB7IFBST0ZJTEUoIm1h aW4iLCAgICAgICAgICAgICAgICAgQVZfUFJPRklMRV9IMjY0X01BSU4pIH0sCisgICAgeyBQUk9G SUxFKCJoaWdoIiwgICAgICAgICAgICAgICAgIEFWX1BST0ZJTEVfSDI2NF9ISUdIKSB9LAorICAg IHsgUFJPRklMRSgiaGlnaDQ0NHAiLCAgICAgICAgICAgICBBVl9QUk9GSUxFX0gyNjRfSElHSF8x MCkgfSwKKyN1bmRlZiBQUk9GSUxFCisKKyAgICB7ICJsZXZlbCIsICJTZXQgbGV2ZWwgKGxldmVs X2lkYykiLAorICAgICAgT0ZGU0VUKGNvbW1vbi5vcHRzLmxldmVsKSwgQVZfT1BUX1RZUEVfSU5U LAorICAgICAgeyAuaTY0ID0gQVZfTEVWRUxfVU5LTk9XTiB9LCBBVl9MRVZFTF9VTktOT1dOLCAw eGZmLCBGTEFHUywgLnVuaXQgPSAibGV2ZWwiIH0sCisKKyNkZWZpbmUgTEVWRUwobmFtZSwgdmFs dWUpIG5hbWUsIE5VTEwsIDAsIEFWX09QVF9UWVBFX0NPTlNULCBcCisgICAgICB7IC5pNjQgPSB2 YWx1ZSB9LCAwLCAwLCBGTEFHUywgLnVuaXQgPSAibGV2ZWwiCisgICAgeyBMRVZFTCgiMSIsICAg MTApIH0sCisgICAgeyBMRVZFTCgiMS4xIiwgMTEpIH0sCisgICAgeyBMRVZFTCgiMS4yIiwgMTIp IH0sCisgICAgeyBMRVZFTCgiMS4zIiwgMTMpIH0sCisgICAgeyBMRVZFTCgiMiIsICAgMjApIH0s CisgICAgeyBMRVZFTCgiMi4xIiwgMjEpIH0sCisgICAgeyBMRVZFTCgiMi4yIiwgMjIpIH0sCisg ICAgeyBMRVZFTCgiMyIsICAgMzApIH0sCisgICAgeyBMRVZFTCgiMy4xIiwgMzEpIH0sCisgICAg eyBMRVZFTCgiMy4yIiwgMzIpIH0sCisgICAgeyBMRVZFTCgiNCIsICAgNDApIH0sCisgICAgeyBM RVZFTCgiNC4xIiwgNDEpIH0sCisgICAgeyBMRVZFTCgiNC4yIiwgNDIpIH0sCisgICAgeyBMRVZF TCgiNSIsICAgNTApIH0sCisgICAgeyBMRVZFTCgiNS4xIiwgNTEpIH0sCisgICAgeyBMRVZFTCgi NS4yIiwgNTIpIH0sCisgICAgeyBMRVZFTCgiNiIsICAgNjApIH0sCisgICAgeyBMRVZFTCgiNi4x IiwgNjEpIH0sCisgICAgeyBMRVZFTCgiNi4yIiwgNjIpIH0sCisjdW5kZWYgTEVWRUwKKworICAg IHsgImNvZGVyIiwgIkVudHJvcHkgY29kZXIgdHlwZSIsIE9GRlNFVCh1bml0X29wdHMuY2FiYWMp LCBBVl9PUFRfVFlQRV9JTlQsIHsgLmk2NCA9IDEgfSwgMCwgMSwgRkxBR1MsICJjb2RlciIgfSwK KyAgICAgICAgeyAiY2FiYWMiLCBOVUxMLCAwLCBBVl9PUFRfVFlQRV9DT05TVCwgeyAuaTY0ID0g MSB9LCBJTlRfTUlOLCBJTlRfTUFYLCBGTEFHUywgImNvZGVyIiB9LAorICAgICAgICB7ICJ2bGMi LCAgIE5VTEwsIDAsIEFWX09QVF9UWVBFX0NPTlNULCB7IC5pNjQgPSAwIH0sIElOVF9NSU4sIElO VF9NQVgsIEZMQUdTLCAiY29kZXIiIH0sCisKKyAgICB7ICJ1bml0cyIsICJTZXQgdW5pdHMgdG8g aW5jbHVkZSIsIE9GRlNFVCh1bml0X2VsZW1zKSwgQVZfT1BUX1RZUEVfRkxBR1MsIHsgLmk2NCA9 IFVOSVRfQVVEIHwgVU5JVF9TRUlfSURFTlRJRklFUiB8IFVOSVRfU0VJX1JFQ09WRVJZIHwgVU5J VF9TRUlfVElNSU5HIHwgVU5JVF9TRUlfQTUzX0NDIH0sIDAsIElOVF9NQVgsIEZMQUdTLCAidW5p dHMiIH0sCisgICAgICAgIHsgImF1ZCIsICAgICAgICAiSW5jbHVkZSBBVUQgdW5pdHMiLCAwLCBB Vl9PUFRfVFlQRV9DT05TVCwgeyAuaTY0ID0gVU5JVF9BVUQgfSwgSU5UX01JTiwgSU5UX01BWCwg RkxBR1MsICJ1bml0cyIgfSwKKyAgICAgICAgeyAiaWRlbnRpZmllciIsICJJbmNsdWRlIGVuY29k ZXIgdmVyc2lvbiBpZGVudGlmaWVyIiwgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsgLmk2NCA9IFVO SVRfU0VJX0lERU5USUZJRVIgfSwgSU5UX01JTiwgSU5UX01BWCwgRkxBR1MsICJ1bml0cyIgfSwK KyAgICAgICAgeyAidGltaW5nIiwgICAgICJJbmNsdWRlIHRpbWluZyBwYXJhbWV0ZXJzIChidWZm ZXJpbmdfcGVyaW9kIGFuZCBwaWNfdGltaW5nKSIsIDAsIEFWX09QVF9UWVBFX0NPTlNULCB7IC5p NjQgPSBVTklUX1NFSV9USU1JTkcgfSwgSU5UX01JTiwgSU5UX01BWCwgRkxBR1MsICJ1bml0cyIg fSwKKyAgICAgICAgeyAicmVjb3ZlcnkiLCAgICJJbmNsdWRlIHJlY292ZXJ5IHBvaW50cyB3aGVy ZSBhcHByb3ByaWF0ZSIsIDAsIEFWX09QVF9UWVBFX0NPTlNULCB7IC5pNjQgPSBVTklUX1NFSV9S RUNPVkVSWSB9LCBJTlRfTUlOLCBJTlRfTUFYLCBGTEFHUywgInVuaXRzIiB9LAorICAgICAgICB7 ICJhNTNfY2MiLCAgICAgIkluY2x1ZGUgQS81MyBjYXB0aW9uIGRhdGEiLCAwLCBBVl9PUFRfVFlQ RV9DT05TVCwgeyAuaTY0ID0gVU5JVF9TRUlfQTUzX0NDIH0sIElOVF9NSU4sIElOVF9NQVgsIEZM QUdTLCAidW5pdHMiIH0sCisKKyAgICB7IE5VTEwgfSwKK307CisKK3N0YXRpYyBjb25zdCBGRkNv ZGVjRGVmYXVsdCB2dWxrYW5fZW5jb2RlX2gyNjRfZGVmYXVsdHNbXSA9IHsKKyAgICB7ICJiIiwg ICAgICAgICAgICAgICIwIiAgIH0sCisgICAgeyAiYmYiLCAgICAgICAgICAgICAiMiIgICB9LAor ICAgIHsgImciLCAgICAgICAgICAgICAgIjMwMCIgfSwKKyAgICB7ICJpX3FmYWN0b3IiLCAgICAg ICIxIiAgIH0sCisgICAgeyAiaV9xb2Zmc2V0IiwgICAgICAiMCIgICB9LAorICAgIHsgImJfcWZh Y3RvciIsICAgICAgIjEiICAgfSwKKyAgICB7ICJiX3FvZmZzZXQiLCAgICAgICIwIiAgIH0sCisg ICAgeyAicW1pbiIsICAgICAgICAgICAiLTEiICB9LAorICAgIHsgInFtYXgiLCAgICAgICAgICAg Ii0xIiAgfSwKKyAgICB7ICJyZWZzIiwgICAgICAgICAgICIwIiAgIH0sCisgICAgeyBOVUxMIH0s Cit9OworCitzdGF0aWMgY29uc3QgQVZDbGFzcyB2dWxrYW5fZW5jb2RlX2gyNjRfY2xhc3MgPSB7 CisgICAgLmNsYXNzX25hbWUgPSAiaDI2NF92dWxrYW4iLAorICAgIC5pdGVtX25hbWUgID0gYXZf ZGVmYXVsdF9pdGVtX25hbWUsCisgICAgLm9wdGlvbiAgICAgPSB2dWxrYW5fZW5jb2RlX2gyNjRf b3B0aW9ucywKKyAgICAudmVyc2lvbiAgICA9IExJQkFWVVRJTF9WRVJTSU9OX0lOVCwKK307CisK K2NvbnN0IEZGQ29kZWMgZmZfaDI2NF92dWxrYW5fZW5jb2RlciA9IHsKKyAgICAucC5uYW1lICAg ICAgICAgPSAiaDI2NF92dWxrYW4iLAorICAgIENPREVDX0xPTkdfTkFNRSgiSC4yNjQvQVZDIChW dWxrYW4pIiksCisgICAgLnAudHlwZSAgICAgICAgID0gQVZNRURJQV9UWVBFX1ZJREVPLAorICAg IC5wLmlkICAgICAgICAgICA9IEFWX0NPREVDX0lEX0gyNjQsCisgICAgLnByaXZfZGF0YV9zaXpl ID0gc2l6ZW9mKFZ1bGthbkVuY29kZUgyNjRDb250ZXh0KSwKKyAgICAuaW5pdCAgICAgICAgICAg PSAmdnVsa2FuX2VuY29kZV9oMjY0X2luaXQsCisgICAgRkZfQ09ERUNfUkVDRUlWRV9QQUNLRVRf Q0IoJmZmX3Z1bGthbl9lbmNvZGVfcmVjZWl2ZV9wYWNrZXQpLAorICAgIC5jbG9zZSAgICAgICAg ICA9ICZ2dWxrYW5fZW5jb2RlX2gyNjRfY2xvc2UsCisgICAgLnAucHJpdl9jbGFzcyAgID0gJnZ1 bGthbl9lbmNvZGVfaDI2NF9jbGFzcywKKyAgICAucC5jYXBhYmlsaXRpZXMgPSBBVl9DT0RFQ19D QVBfREVMQVkgfAorICAgICAgICAgICAgICAgICAgICAgIEFWX0NPREVDX0NBUF9IQVJEV0FSRSB8 CisgICAgICAgICAgICAgICAgICAgICAgQVZfQ09ERUNfQ0FQX0RSMSB8CisgICAgICAgICAgICAg ICAgICAgICAgQVZfQ09ERUNfQ0FQX0VOQ09ERVJfRkxVU0ggfAorICAgICAgICAgICAgICAgICAg ICAgIEFWX0NPREVDX0NBUF9FTkNPREVSX1JFT1JERVJFRF9PUEFRVUUsCisgICAgLmNhcHNfaW50 ZXJuYWwgID0gRkZfQ09ERUNfQ0FQX0lOSVRfQ0xFQU5VUCwKKyAgICAuZGVmYXVsdHMgICAgICAg PSB2dWxrYW5fZW5jb2RlX2gyNjRfZGVmYXVsdHMsCisgICAgQ09ERUNfUElYRk1UUyhBVl9QSVhf Rk1UX1ZVTEtBTiksCisgICAgLmh3X2NvbmZpZ3MgICAgID0gZmZfdnVsa2FuX2VuY29kZV9od19j b25maWdzLAorICAgIC5wLndyYXBwZXJfbmFtZSA9ICJ2dWxrYW4iLAorfTsKLS0gCjIuNDkuMQoK CkZyb20gMWY0NDk1YjEwYTI4ODk5Y2IyNWNlMzMwMzFhNWQ5YWYyYjJmOTU4YyBNb24gU2VwIDE3 IDAwOjAwOjAwIDIwMDEKRnJvbTogSmFtYWlrYTEgPGx1a2FzemN6MThAd3AucGw+CkRhdGU6IFdl ZCwgMyBTZXAgMjAyNSAxMzozNDoxNiArMDAwMApTdWJqZWN0OiBbUEFUQ0ggMDc3LzExOF0gQ2hh bmdpbmcgdnVsa2FuIGZpbGUgZGlyZWN0b3J5CgotLS0KIGxpYmF2Y29kZWMvdnVsa2FuX2VuY29k ZV9oMjY1LmMgfCAxNzk1IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIDEgZmlsZSBj aGFuZ2VkLCAxNzk1IGRlbGV0aW9ucygtKQogZGVsZXRlIG1vZGUgMTAwNjQ0IGxpYmF2Y29kZWMv dnVsa2FuX2VuY29kZV9oMjY1LmMKCmRpZmYgLS1naXQgYS9saWJhdmNvZGVjL3Z1bGthbl9lbmNv ZGVfaDI2NS5jIGIvbGliYXZjb2RlYy92dWxrYW5fZW5jb2RlX2gyNjUuYwpkZWxldGVkIGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggYzMwYjdlOGY5My4uMDAwMDAwMDAwMAotLS0gYS9saWJhdmNvZGVj L3Z1bGthbl9lbmNvZGVfaDI2NS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTc5NSArMCwwIEBACi0v KgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgotICoKLSAqIEZGbXBlZyBpcyBmcmVl IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1 bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vu c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgot ICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh dGVyIHZlcnNpb24uCi0gKgotICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo YXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3Vs ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwot ICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBT b2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG bG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQotICovCi0KLSNpbmNsdWRlICJsaWJhdnV0 aWwvaW50ZXJuYWwuaCIKLSNpbmNsdWRlICJsaWJhdnV0aWwvb3B0LmgiCi0jaW5jbHVkZSAibGli YXZ1dGlsL21lbS5oIgotCi0jaW5jbHVkZSAiY2JzLmgiCi0jaW5jbHVkZSAiY2JzX2gyNjUuaCIK LSNpbmNsdWRlICJhdHNjX2E1My5oIgotI2luY2x1ZGUgImxpYmF2dXRpbC9tYXN0ZXJpbmdfZGlz cGxheV9tZXRhZGF0YS5oIgotCi0jaW5jbHVkZSAiY29kZWNfaW50ZXJuYWwuaCIKLSNpbmNsdWRl ICJ2ZXJzaW9uLmgiCi0jaW5jbHVkZSAiaHdfYmFzZV9lbmNvZGVfaDI2NS5oIgotCi0jaW5jbHVk ZSAidnVsa2FuX2VuY29kZS5oIgotCi1lbnVtIFVuaXRFbGVtcyB7Ci0gICAgVU5JVF9BVUQgICAg ICAgICAgICAgICAgICAgICA9IDEgPDwgMCwKLSAgICBVTklUX1NFSV9NQVNURVJJTkdfRElTUExB WSAgID0gMSA8PCAxLAotICAgIFVOSVRfU0VJX0NPTlRFTlRfTElHSFRfTEVWRUwgPSAxIDw8IDIs Ci0gICAgVU5JVF9TRUlfQTUzX0NDICAgICAgICAgICAgICA9IDEgPDwgMywKLX07Ci0KLWNvbnN0 IEZGVnVsa2FuRW5jb2RlRGVzY3JpcHRvciBmZl92a19lbmNfaDI2NV9kZXNjID0gewotICAgIC5j b2RlY19pZCAgICAgICAgID0gQVZfQ09ERUNfSURfSDI2NSwKLSAgICAuZW5jb2RlX2V4dGVuc2lv biA9IEZGX1ZLX0VYVF9WSURFT19FTkNPREVfSDI2NSwKLSAgICAuZW5jb2RlX29wICAgICAgICA9 IFZLX1ZJREVPX0NPREVDX09QRVJBVElPTl9FTkNPREVfSDI2NV9CSVRfS0hSLAotICAgIC5leHRf cHJvcHMgPSB7Ci0gICAgICAgIC5leHRlbnNpb25OYW1lID0gVktfU1REX1ZVTEtBTl9WSURFT19D T0RFQ19IMjY1X0VOQ09ERV9FWFRFTlNJT05fTkFNRSwKLSAgICAgICAgLnNwZWNWZXJzaW9uICAg PSBWS19TVERfVlVMS0FOX1ZJREVPX0NPREVDX0gyNjVfRU5DT0RFX1NQRUNfVkVSU0lPTiwKLSAg ICB9LAotfTsKLQotdHlwZWRlZiBzdHJ1Y3QgVnVsa2FuRW5jb2RlSDI2NVBpY3R1cmUgewotICAg IGludCBmcmFtZV9udW07Ci0gICAgaW50NjRfdCBsYXN0X2lkcl9mcmFtZTsKLSAgICB1aW50MTZf dCBpZHJfcGljX2lkOwotICAgIGludCBwcmltYXJ5X3BpY190eXBlOwotICAgIGludCBzbGljZV90 eXBlOwotICAgIGludCBwaWNfb3JkZXJfY250OwotICAgIGludCBwaWNfdHlwZTsKLQotICAgIGVu dW0gVW5pdEVsZW1zIHVuaXRzX25lZWRlZDsKLQotICAgIFZrVmlkZW9FbmNvZGVIMjY1UmF0ZUNv bnRyb2xJbmZvS0hSIHZrcmNfaW5mbzsKLSAgICBWa1ZpZGVvRW5jb2RlSDI2NVJhdGVDb250cm9s TGF5ZXJJbmZvS0hSIHZrcmNfbGF5ZXJfaW5mbzsKLQotICAgIFN0ZFZpZGVvRW5jb2RlSDI2NVBp Y3R1cmVJbmZvICAgaDI2NXBpY19pbmZvOwotICAgIFZrVmlkZW9FbmNvZGVIMjY1UGljdHVyZUlu Zm9LSFIgdmtoMjY1cGljX2luZm87Ci0KLSAgICBTdGRWaWRlb0VuY29kZUgyNjVXZWlnaHRUYWJs ZSBzbGljZV93dDsKLSAgICBTdGRWaWRlb0VuY29kZUgyNjVTbGljZVNlZ21lbnRIZWFkZXIgc2xp Y2VfaGRyOwotICAgIFZrVmlkZW9FbmNvZGVIMjY1TmFsdVNsaWNlU2VnbWVudEluZm9LSFIgdmtz bGljZTsKLQotICAgIFN0ZFZpZGVvRW5jb2RlSDI2NVJlZmVyZW5jZUluZm8gaDI2NWRwYl9pbmZv OwotICAgIFZrVmlkZW9FbmNvZGVIMjY1RHBiU2xvdEluZm9LSFIgdmtoMjY1ZHBiX2luZm87Ci0K LSAgICBTdGRWaWRlb0VuY29kZUgyNjVSZWZlcmVuY2VMaXN0c0luZm8gcmVmX2xpc3RfaW5mbzsK LSAgICBTdGRWaWRlb0VuY29kZUgyNjVMb25nVGVybVJlZlBpY3MgbF9ycHM7Ci0gICAgU3RkVmlk ZW9IMjY1U2hvcnRUZXJtUmVmUGljU2V0IHNfcnBzOwotfSBWdWxrYW5FbmNvZGVIMjY1UGljdHVy ZTsKLQotdHlwZWRlZiBzdHJ1Y3QgVnVsa2FuRW5jb2RlSDI2NUNvbnRleHQgewotICAgIEZGVnVs a2FuRW5jb2RlQ29udGV4dCBjb21tb247Ci0KLSAgICBGRkhXQmFzZUVuY29kZUgyNjUgdW5pdHM7 Ci0gICAgRkZIV0Jhc2VFbmNvZGVIMjY1T3B0cyB1bml0X29wdHM7Ci0KLSAgICBlbnVtIFVuaXRF bGVtcyB1bml0X2VsZW1zOwotCi0gICAgdWludDhfdCBmaXhlZF9xcF9pZHI7Ci0gICAgdWludDhf dCBmaXhlZF9xcF9wOwotICAgIHVpbnQ4X3QgZml4ZWRfcXBfYjsKLQotICAgIHVpbnQ2NF90IGhy ZF9idWZmZXJfc2l6ZTsKLSAgICB1aW50NjRfdCBpbml0aWFsX2J1ZmZlcl9mdWxsbmVzczsKLQot ICAgIFZrVmlkZW9FbmNvZGVIMjY1UHJvZmlsZUluZm9LSFIgcHJvZmlsZTsKLQotICAgIFZrVmlk ZW9FbmNvZGVIMjY1Q2FwYWJpbGl0aWVzS0hSIGNhcHM7Ci0gICAgVmtWaWRlb0VuY29kZUgyNjVR dWFsaXR5TGV2ZWxQcm9wZXJ0aWVzS0hSIHF1YWxpdHlfcHJvcHM7Ci0KLSAgICBDb2RlZEJpdHN0 cmVhbUNvbnRleHQgKmNiczsKLSAgICBDb2RlZEJpdHN0cmVhbUZyYWdtZW50IGN1cnJlbnRfYWNj ZXNzX3VuaXQ7Ci0KLSAgICBIMjY1UmF3QVVEICAgICAgICAgICAgICAgICAgICAgICAgIHJhd19h dWQ7Ci0KLSAgICBTRUlSYXdNYXN0ZXJpbmdEaXNwbGF5Q29sb3VyVm9sdW1lIHNlaV9tYXN0ZXJp bmdfZGlzcGxheTsKLSAgICBTRUlSYXdDb250ZW50TGlnaHRMZXZlbEluZm8gICAgICAgIHNlaV9j b250ZW50X2xpZ2h0X2xldmVsOwotICAgIFNFSVJhd1VzZXJEYXRhUmVnaXN0ZXJlZCAgICAgICAg ICAgc2VpX2E1M2NjOwotICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqc2Vp X2E1M2NjX2RhdGE7Ci19IFZ1bGthbkVuY29kZUgyNjVDb250ZXh0OwotCi1zdGF0aWMgaW50IGlu aXRfcGljX3JjKEFWQ29kZWNDb250ZXh0ICphdmN0eCwgRkZIV0Jhc2VFbmNvZGVQaWN0dXJlICpw aWMsCi0gICAgICAgICAgICAgICAgICAgICAgIFZrVmlkZW9FbmNvZGVSYXRlQ29udHJvbEluZm9L SFIgKnJjX2luZm8sCi0gICAgICAgICAgICAgICAgICAgICAgIFZrVmlkZW9FbmNvZGVSYXRlQ29u dHJvbExheWVySW5mb0tIUiAqcmNfbGF5ZXIpCi17Ci0gICAgVnVsa2FuRW5jb2RlSDI2NUNvbnRl eHQgKmVuYyA9IGF2Y3R4LT5wcml2X2RhdGE7Ci0gICAgRkZWdWxrYW5FbmNvZGVDb250ZXh0ICAg KmN0eCA9ICZlbmMtPmNvbW1vbjsKLSAgICBWdWxrYW5FbmNvZGVIMjY1UGljdHVyZSAgKmhwID0g cGljLT5jb2RlY19wcml2OwotCi0gICAgaHAtPnZrcmNfaW5mbyA9IChWa1ZpZGVvRW5jb2RlSDI2 NVJhdGVDb250cm9sSW5mb0tIUikgewotICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQ RV9WSURFT19FTkNPREVfSDI2NV9SQVRFX0NPTlRST0xfSU5GT19LSFIsCi0gICAgICAgIC5mbGFn cyA9IFZLX1ZJREVPX0VOQ09ERV9IMjY1X1JBVEVfQ09OVFJPTF9SRUZFUkVOQ0VfUEFUVEVSTl9G TEFUX0JJVF9LSFIgfAotICAgICAgICAgICAgICAgICBWS19WSURFT19FTkNPREVfSDI2NV9SQVRF X0NPTlRST0xfUkVHVUxBUl9HT1BfQklUX0tIUiwKLSAgICAgICAgLmlkclBlcmlvZCA9IGN0eC0+ YmFzZS5nb3Bfc2l6ZSwKLSAgICAgICAgLmdvcEZyYW1lQ291bnQgPSBjdHgtPmJhc2UuZ29wX3Np emUsCi0gICAgICAgIC5jb25zZWN1dGl2ZUJGcmFtZUNvdW50ID0gRkZNQVgoY3R4LT5iYXNlLmJf cGVyX3AgLSAxLCAwKSwKLSAgICAgICAgLnN1YkxheWVyQ291bnQgPSAwLAotICAgIH07Ci0gICAg cmNfaW5mby0+cE5leHQgPSAmaHAtPnZrcmNfaW5mbzsKLQotICAgIGlmIChyY19pbmZvLT5yYXRl Q29udHJvbE1vZGUgPiBWS19WSURFT19FTkNPREVfUkFURV9DT05UUk9MX01PREVfRElTQUJMRURf QklUX0tIUikgewotICAgICAgICByY19pbmZvLT52aXJ0dWFsQnVmZmVyU2l6ZUluTXMgPSAoZW5j LT5ocmRfYnVmZmVyX3NpemUgKiAxMDAwTEwpIC8gYXZjdHgtPmJpdF9yYXRlOwotICAgICAgICBy Y19pbmZvLT5pbml0aWFsVmlydHVhbEJ1ZmZlclNpemVJbk1zID0gKGVuYy0+aW5pdGlhbF9idWZm ZXJfZnVsbG5lc3MgKiAxMDAwTEwpIC8gYXZjdHgtPmJpdF9yYXRlOwotCi0gICAgICAgIGhwLT52 a3JjX2xheWVyX2luZm8gPSAoVmtWaWRlb0VuY29kZUgyNjVSYXRlQ29udHJvbExheWVySW5mb0tI UikgewotICAgICAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfVklERU9fRU5DT0RF X0gyNjVfUkFURV9DT05UUk9MX0xBWUVSX0lORk9fS0hSLAotCi0gICAgICAgICAgICAudXNlTWlu UXAgID0gYXZjdHgtPnFtaW4gPiAwLAotICAgICAgICAgICAgLm1pblFwLnFwSSA9IGF2Y3R4LT5x bWluID4gMCA/IGF2Y3R4LT5xbWluIDogMCwKLSAgICAgICAgICAgIC5taW5RcC5xcFAgPSBhdmN0 eC0+cW1pbiA+IDAgPyBhdmN0eC0+cW1pbiA6IDAsCi0gICAgICAgICAgICAubWluUXAucXBCID0g YXZjdHgtPnFtaW4gPiAwID8gYXZjdHgtPnFtaW4gOiAwLAotCi0gICAgICAgICAgICAudXNlTWF4 UXAgID0gYXZjdHgtPnFtYXggPiAwLAotICAgICAgICAgICAgLm1heFFwLnFwSSA9IGF2Y3R4LT5x bWF4ID4gMCA/IGF2Y3R4LT5xbWF4IDogMCwKLSAgICAgICAgICAgIC5tYXhRcC5xcFAgPSBhdmN0 eC0+cW1heCA+IDAgPyBhdmN0eC0+cW1heCA6IDAsCi0gICAgICAgICAgICAubWF4UXAucXBCID0g YXZjdHgtPnFtYXggPiAwID8gYXZjdHgtPnFtYXggOiAwLAotCi0gICAgICAgICAgICAudXNlTWF4 RnJhbWVTaXplID0gMCwKLSAgICAgICAgfTsKLSAgICAgICAgcmNfbGF5ZXItPnBOZXh0ID0gJmhw LT52a3JjX2xheWVyX2luZm87Ci0gICAgICAgIGhwLT52a3JjX2luZm8uc3ViTGF5ZXJDb3VudCA9 IDE7Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgdmtfZW5jX2gyNjVf dXBkYXRlX3BpY19pbmZvKEFWQ29kZWNDb250ZXh0ICphdmN0eCwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEZGSFdCYXNlRW5jb2RlUGljdHVyZSAqcGljKQotewotICAg IFZ1bGthbkVuY29kZUgyNjVDb250ZXh0ICAgKmVuYyA9IGF2Y3R4LT5wcml2X2RhdGE7Ci0gICAg VnVsa2FuRW5jb2RlSDI2NVBpY3R1cmUgICAgKmhwID0gcGljLT5jb2RlY19wcml2OwotICAgIEZG SFdCYXNlRW5jb2RlUGljdHVyZSAgICAqcHJldiA9IHBpYy0+cHJldjsKLSAgICBWdWxrYW5FbmNv ZGVIMjY1UGljdHVyZSAqaHByZXYgPSBwcmV2ID8gcHJldi0+Y29kZWNfcHJpdiA6IE5VTEw7Ci0K LSAgICBpZiAocGljLT50eXBlID09IEZGX0hXX1BJQ1RVUkVfVFlQRV9JRFIpIHsKLSAgICAgICAg YXZfYXNzZXJ0MChwaWMtPmRpc3BsYXlfb3JkZXIgPT0gcGljLT5lbmNvZGVfb3JkZXIpOwotCi0g ICAgICAgIGhwLT5sYXN0X2lkcl9mcmFtZSA9IHBpYy0+ZGlzcGxheV9vcmRlcjsKLQotICAgICAg ICBocC0+c2xpY2VfdHlwZSAgICAgPSBTVERfVklERU9fSDI2NV9TTElDRV9UWVBFX0k7Ci0gICAg ICAgIGhwLT5waWNfdHlwZSAgICAgICA9IFNURF9WSURFT19IMjY1X1BJQ1RVUkVfVFlQRV9JRFI7 Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgYXZfYXNzZXJ0MChwcmV2KTsKLSAgICAgICAgaHAtPmxh c3RfaWRyX2ZyYW1lID0gaHByZXYtPmxhc3RfaWRyX2ZyYW1lOwotCi0gICAgICAgIGlmIChwaWMt PnR5cGUgPT0gRkZfSFdfUElDVFVSRV9UWVBFX0kpIHsKLSAgICAgICAgICAgIGhwLT5zbGljZV90 eXBlICAgICA9IFNURF9WSURFT19IMjY1X1NMSUNFX1RZUEVfSTsKLSAgICAgICAgICAgIGhwLT5w aWNfdHlwZSAgICAgICA9IFNURF9WSURFT19IMjY1X1BJQ1RVUkVfVFlQRV9JOwotICAgICAgICB9 IGVsc2UgaWYgKHBpYy0+dHlwZSA9PSBGRl9IV19QSUNUVVJFX1RZUEVfUCkgewotICAgICAgICAg ICAgYXZfYXNzZXJ0MChwaWMtPnJlZnNbMF0pOwotICAgICAgICAgICAgaHAtPnNsaWNlX3R5cGUg ICAgID0gU1REX1ZJREVPX0gyNjVfU0xJQ0VfVFlQRV9QOwotICAgICAgICAgICAgaHAtPnBpY190 eXBlICAgICAgID0gU1REX1ZJREVPX0gyNjVfUElDVFVSRV9UWVBFX1A7Ci0gICAgICAgIH0gZWxz ZSB7Ci0gICAgICAgICAgICBGRkhXQmFzZUVuY29kZVBpY3R1cmUgKmlyYXBfcmVmOwotICAgICAg ICAgICAgYXZfYXNzZXJ0MChwaWMtPnJlZnNbMF1bMF0gJiYgcGljLT5yZWZzWzFdWzBdKTsKLSAg ICAgICAgICAgIGZvciAoaXJhcF9yZWYgPSBwaWM7IGlyYXBfcmVmOyBpcmFwX3JlZiA9IGlyYXBf cmVmLT5yZWZzWzFdWzBdKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGlyYXBfcmVmLT50eXBlID09 IEZGX0hXX1BJQ1RVUkVfVFlQRV9JKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg ICAgICAgIH0KLSAgICAgICAgICAgIGhwLT5zbGljZV90eXBlID0gU1REX1ZJREVPX0gyNjVfU0xJ Q0VfVFlQRV9COwotICAgICAgICAgICAgaHAtPnBpY190eXBlICAgPSBTVERfVklERU9fSDI2NV9Q SUNUVVJFX1RZUEVfQjsKLSAgICAgICAgfQotICAgIH0KLSAgICBocC0+cGljX29yZGVyX2NudCA9 IHBpYy0+ZGlzcGxheV9vcmRlciAtIGhwLT5sYXN0X2lkcl9mcmFtZTsKLQotICAgIGhwLT51bml0 c19uZWVkZWQgPSAwOwotCi0gICAgaWYgKGVuYy0+dW5pdF9lbGVtcyAmIFVOSVRfQVVEKSB7Ci0g ICAgICAgIGhwLT51bml0c19uZWVkZWQgfD0gVU5JVF9BVUQ7Ci0gICAgICAgIGVuYy0+cmF3X2F1 ZCA9IChIMjY1UmF3QVVEKSB7Ci0gICAgICAgICAgICAubmFsX3VuaXRfaGVhZGVyID0gewotICAg ICAgICAgICAgICAgIC5uYWxfdW5pdF90eXBlICAgICAgICAgPSBIRVZDX05BTF9BVUQsCi0gICAg ICAgICAgICAgICAgLm51aF9sYXllcl9pZCAgICAgICAgICA9IDAsCi0gICAgICAgICAgICAgICAg Lm51aF90ZW1wb3JhbF9pZF9wbHVzMSA9IDEsCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAg LnBpY190eXBlID0gaHAtPnBpY190eXBlLAotICAgICAgICB9OwotICAgIH0KLQotICAgIC8vIE9u bHkgbG9vayBmb3IgdGhlIG1ldGFkYXRhIG9uIEkvSURSIGZyYW1lIG9uIHRoZSBvdXRwdXQuIFdl Ci0gICAgLy8gbWF5IGZvcmNlIGFuIElEUiBmcmFtZSBvbiB0aGUgb3V0cHV0IHdoZXJlIHRoZSBt ZXRhZGF0YSBnZXRzCi0gICAgLy8gY2hhbmdlZCBvbiB0aGUgaW5wdXQgZnJhbWUuCi0gICAgaWYg KChlbmMtPnVuaXRfZWxlbXMgJiBVTklUX1NFSV9NQVNURVJJTkdfRElTUExBWSkgJiYKLSAgICAg ICAgKHBpYy0+dHlwZSA9PSBGRl9IV19QSUNUVVJFX1RZUEVfSSB8fCBwaWMtPnR5cGUgPT0gRkZf SFdfUElDVFVSRV9UWVBFX0lEUikpIHsKLSAgICAgICAgQVZGcmFtZVNpZGVEYXRhICpzZCA9Ci0g ICAgICAgICAgICBhdl9mcmFtZV9nZXRfc2lkZV9kYXRhKHBpYy0+aW5wdXRfaW1hZ2UsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFWX0ZSQU1FX0RBVEFfTUFTVEVSSU5HX0RJ U1BMQVlfTUVUQURBVEEpOwotCi0gICAgICAgIGlmIChzZCkgewotICAgICAgICAgICAgQVZNYXN0 ZXJpbmdEaXNwbGF5TWV0YWRhdGEgKm1kbSA9IChBVk1hc3RlcmluZ0Rpc3BsYXlNZXRhZGF0YSAq KXNkLT5kYXRhOwotCi0gICAgICAgICAgICAvLyBTRUkgaXMgbmVlZGVkIHdoZW4gYm90aCB0aGUg cHJpbWFyaWVzIGFuZCBsdW1pbmFuY2UgYXJlIHNldAotICAgICAgICAgICAgaWYgKG1kbS0+aGFz X3ByaW1hcmllcyAmJiBtZG0tPmhhc19sdW1pbmFuY2UpIHsKLSAgICAgICAgICAgICAgICBTRUlS YXdNYXN0ZXJpbmdEaXNwbGF5Q29sb3VyVm9sdW1lICptZGN2ID0KLSAgICAgICAgICAgICAgICAg ICAgJmVuYy0+c2VpX21hc3RlcmluZ19kaXNwbGF5OwotICAgICAgICAgICAgICAgIGNvbnN0IGlu dCBtYXBwaW5nWzNdID0gezEsIDIsIDB9OwotICAgICAgICAgICAgICAgIGNvbnN0IGludCBjaHJv bWFfZGVuID0gNTAwMDA7Ci0gICAgICAgICAgICAgICAgY29uc3QgaW50IGx1bWFfZGVuICAgPSAx MDAwMDsKLQotICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMzsgaSsrKSB7Ci0g ICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCBqID0gbWFwcGluZ1tpXTsKLSAgICAgICAgICAg ICAgICAgICAgbWRjdi0+ZGlzcGxheV9wcmltYXJpZXNfeFtpXSA9Ci0gICAgICAgICAgICAgICAg ICAgICAgICBGRk1JTihscmludChjaHJvbWFfZGVuICoKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGF2X3EyZChtZG0tPmRpc3BsYXlfcHJpbWFyaWVzW2pdWzBdKSksCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjaHJvbWFfZGVuKTsKLSAgICAgICAgICAgICAgICAg ICAgbWRjdi0+ZGlzcGxheV9wcmltYXJpZXNfeVtpXSA9Ci0gICAgICAgICAgICAgICAgICAgICAg ICBGRk1JTihscmludChjaHJvbWFfZGVuICoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGF2X3EyZChtZG0tPmRpc3BsYXlfcHJpbWFyaWVzW2pdWzFdKSksCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjaHJvbWFfZGVuKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAg ICAgICAgICAgICAgICBtZGN2LT53aGl0ZV9wb2ludF94ID0KLSAgICAgICAgICAgICAgICAgICAg RkZNSU4obHJpbnQoY2hyb21hX2RlbiAqIGF2X3EyZChtZG0tPndoaXRlX3BvaW50WzBdKSksCi0g ICAgICAgICAgICAgICAgICAgICAgICAgIGNocm9tYV9kZW4pOwotICAgICAgICAgICAgICAgIG1k Y3YtPndoaXRlX3BvaW50X3kgPQotICAgICAgICAgICAgICAgICAgICBGRk1JTihscmludChjaHJv bWFfZGVuICogYXZfcTJkKG1kbS0+d2hpdGVfcG9pbnRbMV0pKSwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgY2hyb21hX2Rlbik7Ci0KLSAgICAgICAgICAgICAgICBtZGN2LT5tYXhfZGlzcGxh eV9tYXN0ZXJpbmdfbHVtaW5hbmNlID0KLSAgICAgICAgICAgICAgICAgICAgbHJpbnQobHVtYV9k ZW4gKiBhdl9xMmQobWRtLT5tYXhfbHVtaW5hbmNlKSk7Ci0gICAgICAgICAgICAgICAgbWRjdi0+ bWluX2Rpc3BsYXlfbWFzdGVyaW5nX2x1bWluYW5jZSA9Ci0gICAgICAgICAgICAgICAgICAgIEZG TUlOKGxyaW50KGx1bWFfZGVuICogYXZfcTJkKG1kbS0+bWluX2x1bWluYW5jZSkpLAotICAgICAg ICAgICAgICAgICAgICAgICAgICBtZGN2LT5tYXhfZGlzcGxheV9tYXN0ZXJpbmdfbHVtaW5hbmNl KTsKLQotICAgICAgICAgICAgICAgIGhwLT51bml0c19uZWVkZWQgfD0gVU5JVF9TRUlfTUFTVEVS SU5HX0RJU1BMQVk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAo KGVuYy0+dW5pdF9lbGVtcyAmIFVOSVRfU0VJX0NPTlRFTlRfTElHSFRfTEVWRUwpICYmCi0gICAg ICAgIChwaWMtPnR5cGUgPT0gRkZfSFdfUElDVFVSRV9UWVBFX0kgfHwgcGljLT50eXBlID09IEZG X0hXX1BJQ1RVUkVfVFlQRV9JRFIpKSB7Ci0gICAgICAgIEFWRnJhbWVTaWRlRGF0YSAqc2QgPSBh dl9mcmFtZV9nZXRfc2lkZV9kYXRhKHBpYy0+aW5wdXRfaW1hZ2UsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFWX0ZSQU1FX0RBVEFfQ09OVEVO VF9MSUdIVF9MRVZFTCk7Ci0KLSAgICAgICAgaWYgKHNkKSB7Ci0gICAgICAgICAgICBBVkNvbnRl bnRMaWdodE1ldGFkYXRhICpjbG0gPSAoQVZDb250ZW50TGlnaHRNZXRhZGF0YSAqKXNkLT5kYXRh OwotICAgICAgICAgICAgU0VJUmF3Q29udGVudExpZ2h0TGV2ZWxJbmZvICpjbGxpID0gJmVuYy0+ c2VpX2NvbnRlbnRfbGlnaHRfbGV2ZWw7Ci0KLSAgICAgICAgICAgIGNsbGktPm1heF9jb250ZW50 X2xpZ2h0X2xldmVsICAgICA9IEZGTUlOKGNsbS0+TWF4Q0xMLCAgNjU1MzUpOwotICAgICAgICAg ICAgY2xsaS0+bWF4X3BpY19hdmVyYWdlX2xpZ2h0X2xldmVsID0gRkZNSU4oY2xtLT5NYXhGQUxM LCA2NTUzNSk7Ci0KLSAgICAgICAgICAgIGhwLT51bml0c19uZWVkZWQgfD0gVU5JVF9TRUlfQ09O VEVOVF9MSUdIVF9MRVZFTDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChlbmMtPnVuaXRf ZWxlbXMgJiBVTklUX1NFSV9BNTNfQ0MpIHsKLSAgICAgICAgaW50IGVycjsKLSAgICAgICAgc2l6 ZV90IHNlaV9hNTNjY19sZW47Ci0gICAgICAgIGF2X2ZyZWVwKCZlbmMtPnNlaV9hNTNjY19kYXRh KTsKLSAgICAgICAgZXJyID0gZmZfYWxsb2NfYTUzX3NlaShwaWMtPmlucHV0X2ltYWdlLCAwLCAm ZW5jLT5zZWlfYTUzY2NfZGF0YSwgJnNlaV9hNTNjY19sZW4pOwotICAgICAgICBpZiAoZXJyIDwg MCkKLSAgICAgICAgICAgIHJldHVybiBlcnI7Ci0gICAgICAgIGlmIChlbmMtPnNlaV9hNTNjY19k YXRhICE9IE5VTEwpIHsKLSAgICAgICAgICAgIGVuYy0+c2VpX2E1M2NjLml0dV90X3QzNV9jb3Vu dHJ5X2NvZGUgPSAxODE7Ci0gICAgICAgICAgICBlbmMtPnNlaV9hNTNjYy5kYXRhID0gKHVpbnQ4 X3QgKillbmMtPnNlaV9hNTNjY19kYXRhICsgMTsKLSAgICAgICAgICAgIGVuYy0+c2VpX2E1M2Nj LmRhdGFfbGVuZ3RoID0gc2VpX2E1M2NjX2xlbiAtIDE7Ci0KLSAgICAgICAgICAgIGhwLT51bml0 c19uZWVkZWQgfD0gVU5JVF9TRUlfQTUzX0NDOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0 dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHNldHVwX3NsaWNlcyhBVkNvZGVjQ29udGV4dCAqYXZj dHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgRkZIV0Jhc2VFbmNvZGVQaWN0dXJlICpwaWMp Ci17Ci0gICAgVnVsa2FuRW5jb2RlSDI2NUNvbnRleHQgKmVuYyA9IGF2Y3R4LT5wcml2X2RhdGE7 Ci0gICAgVnVsa2FuRW5jb2RlSDI2NVBpY3R1cmUgKmhwID0gcGljLT5jb2RlY19wcml2OwotCi0g ICAgaHAtPnNsaWNlX3d0ID0gKFN0ZFZpZGVvRW5jb2RlSDI2NVdlaWdodFRhYmxlKSB7Ci0gICAg ICAgIC5mbGFncyA9IChTdGRWaWRlb0VuY29kZUgyNjVXZWlnaHRUYWJsZUZsYWdzKSB7Ci0gICAg ICAgICAgICAubHVtYV93ZWlnaHRfbDBfZmxhZyA9IDAsCi0gICAgICAgICAgICAuY2hyb21hX3dl aWdodF9sMF9mbGFnID0gMCwKLSAgICAgICAgICAgIC5sdW1hX3dlaWdodF9sMV9mbGFnID0gMCwK LSAgICAgICAgICAgIC5jaHJvbWFfd2VpZ2h0X2wxX2ZsYWcgPSAwLAotICAgICAgICB9LAotICAg ICAgICAubHVtYV9sb2cyX3dlaWdodF9kZW5vbSA9IDAsCi0gICAgICAgIC5kZWx0YV9jaHJvbWFf bG9nMl93ZWlnaHRfZGVub20gPSAwLAotICAgICAgICAuZGVsdGFfbHVtYV93ZWlnaHRfbDAgPSB7 IDAgfSwKLSAgICAgICAgLmx1bWFfb2Zmc2V0X2wwID0geyAwIH0sCi0gICAgICAgIC5kZWx0YV9j aHJvbWFfd2VpZ2h0X2wwID0geyB7IDAgfSB9LAotICAgICAgICAuZGVsdGFfY2hyb21hX29mZnNl dF9sMCA9IHsgeyAwIH0gfSwKLSAgICAgICAgLmRlbHRhX2x1bWFfd2VpZ2h0X2wxID0geyAwIH0s Ci0gICAgICAgIC5sdW1hX29mZnNldF9sMSA9IHsgMCB9LAotICAgICAgICAuZGVsdGFfY2hyb21h X3dlaWdodF9sMSA9IHsgeyAwIH0gfSwKLSAgICAgICAgLmRlbHRhX2Nocm9tYV9vZmZzZXRfbDEg PSB7IHsgMCB9IH0sCi0gICAgfTsKLQotICAgIGhwLT5zbGljZV9oZHIgPSAoU3RkVmlkZW9FbmNv ZGVIMjY1U2xpY2VTZWdtZW50SGVhZGVyKSB7Ci0gICAgICAgIC5mbGFncyA9IChTdGRWaWRlb0Vu Y29kZUgyNjVTbGljZVNlZ21lbnRIZWFkZXJGbGFncykgewotICAgICAgICAgICAgLmZpcnN0X3Ns aWNlX3NlZ21lbnRfaW5fcGljX2ZsYWcgPSAxLAotICAgICAgICAgICAgLmRlcGVuZGVudF9zbGlj ZV9zZWdtZW50X2ZsYWcgPSAwLAotICAgICAgICAgICAgLnNsaWNlX3Nhb19sdW1hX2ZsYWcgPSBl bmMtPnVuaXRzLnJhd19zcHMuc2FtcGxlX2FkYXB0aXZlX29mZnNldF9lbmFibGVkX2ZsYWcsCi0g ICAgICAgICAgICAuc2xpY2Vfc2FvX2Nocm9tYV9mbGFnID0gZW5jLT51bml0cy5yYXdfc3BzLnNh bXBsZV9hZGFwdGl2ZV9vZmZzZXRfZW5hYmxlZF9mbGFnLAotICAgICAgICAgICAgLm51bV9yZWZf aWR4X2FjdGl2ZV9vdmVycmlkZV9mbGFnID0gMCwKLSAgICAgICAgICAgIC5tdmRfbDFfemVyb19m bGFnID0gMCwKLSAgICAgICAgICAgIC5jYWJhY19pbml0X2ZsYWcgPSAwLAotICAgICAgICAgICAg LmN1X2Nocm9tYV9xcF9vZmZzZXRfZW5hYmxlZF9mbGFnID0gMCwKLSAgICAgICAgICAgIC5kZWJs b2NraW5nX2ZpbHRlcl9vdmVycmlkZV9mbGFnID0gMCwKLSAgICAgICAgICAgIC5zbGljZV9kZWJs b2NraW5nX2ZpbHRlcl9kaXNhYmxlZF9mbGFnID0gMCwKLSAgICAgICAgICAgIC5jb2xsb2NhdGVk X2Zyb21fbDBfZmxhZyA9IDEsCi0gICAgICAgICAgICAuc2xpY2VfbG9vcF9maWx0ZXJfYWNyb3Nz X3NsaWNlc19lbmFibGVkX2ZsYWcgPSAwLAotICAgICAgICAgICAgLyogUmVzZXJ2ZWQgKi8KLSAg ICAgICAgfSwKLSAgICAgICAgLnNsaWNlX3R5cGUgPSBocC0+c2xpY2VfdHlwZSwKLSAgICAgICAg LnNsaWNlX3NlZ21lbnRfYWRkcmVzcyA9IDAsCi0gICAgICAgIC5jb2xsb2NhdGVkX3JlZl9pZHgg PSAwLAotICAgICAgICAuTWF4TnVtTWVyZ2VDYW5kID0gNSwKLSAgICAgICAgLnNsaWNlX2NiX3Fw X29mZnNldCA9IDAsCi0gICAgICAgIC5zbGljZV9jcl9xcF9vZmZzZXQgPSAwLAotICAgICAgICAu c2xpY2VfYmV0YV9vZmZzZXRfZGl2MiA9IDAsCi0gICAgICAgIC5zbGljZV90Y19vZmZzZXRfZGl2 MiA9IDAsCi0gICAgICAgIC5zbGljZV9hY3RfeV9xcF9vZmZzZXQgPSAwLAotICAgICAgICAuc2xp Y2VfYWN0X2NiX3FwX29mZnNldCA9IDAsCi0gICAgICAgIC5zbGljZV9hY3RfY3JfcXBfb2Zmc2V0 ID0gMCwKLSAgICAgICAgLnNsaWNlX3FwX2RlbHRhID0gMCwgLyogRmlsbGVkIGluIGJlbG93ICov Ci0gICAgICAgIC8qIFJlc2VydmVkICovCi0gICAgICAgIC5wV2VpZ2h0VGFibGUgPSBOVUxMLCAv LyAmaHAtPnNsaWNlX3d0LAotICAgIH07Ci0KLSAgICBocC0+dmtzbGljZSA9IChWa1ZpZGVvRW5j b2RlSDI2NU5hbHVTbGljZVNlZ21lbnRJbmZvS0hSKSB7Ci0gICAgICAgIC5zVHlwZSA9IFZLX1NU UlVDVFVSRV9UWVBFX1ZJREVPX0VOQ09ERV9IMjY1X05BTFVfU0xJQ0VfU0VHTUVOVF9JTkZPX0tI UiwKLSAgICAgICAgLnBOZXh0ID0gTlVMTCwKLSAgICAgICAgLmNvbnN0YW50UXAgPSBwaWMtPnR5 cGUgPT0gRkZfSFdfUElDVFVSRV9UWVBFX0IgPyBlbmMtPmZpeGVkX3FwX2IgOgotICAgICAgICAg ICAgICAgICAgICAgIHBpYy0+dHlwZSA9PSBGRl9IV19QSUNUVVJFX1RZUEVfUCA/IGVuYy0+Zml4 ZWRfcXBfcCA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZW5jLT5maXhlZF9xcF9pZHIsCi0gICAgICAgIC5wU3RkU2xpY2VTZWdtZW50 SGVhZGVyID0gJmhwLT5zbGljZV9oZHIsCi0gICAgfTsKLQotICAgIGlmIChlbmMtPmNvbW1vbi5v cHRzLnJjX21vZGUgIT0gVktfVklERU9fRU5DT0RFX1JBVEVfQ09OVFJPTF9NT0RFX0RJU0FCTEVE X0JJVF9LSFIpCi0gICAgICAgIGhwLT52a3NsaWNlLmNvbnN0YW50UXAgPSAwOwotCi0gICAgaHAt PnNsaWNlX2hkci5zbGljZV9xcF9kZWx0YSA9IGhwLT52a3NsaWNlLmNvbnN0YW50UXAgLQotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZW5jLT51bml0cy5yYXdfcHBzLmluaXRf cXBfbWludXMyNiArIDI2KTsKLQotICAgIGhwLT52a2gyNjVwaWNfaW5mby5wTmFsdVNsaWNlU2Vn bWVudEVudHJpZXMgPSAmaHAtPnZrc2xpY2U7Ci0gICAgaHAtPnZraDI2NXBpY19pbmZvLm5hbHVT bGljZVNlZ21lbnRFbnRyeUNvdW50ID0gMTsKLX0KLQotc3RhdGljIHZvaWQgc2V0dXBfcmVmcyhB VkNvZGVjQ29udGV4dCAqYXZjdHgsCi0gICAgICAgICAgICAgICAgICAgICAgIEZGSFdCYXNlRW5j b2RlUGljdHVyZSAqcGljLAotICAgICAgICAgICAgICAgICAgICAgICBWa1ZpZGVvRW5jb2RlSW5m b0tIUiAqZW5jb2RlX2luZm8pCi17Ci0gICAgaW50IGksIGo7Ci0gICAgVnVsa2FuRW5jb2RlSDI2 NUNvbnRleHQgKmVuYyA9IGF2Y3R4LT5wcml2X2RhdGE7Ci0gICAgVnVsa2FuRW5jb2RlSDI2NVBp Y3R1cmUgKmhwID0gcGljLT5jb2RlY19wcml2OwotCi0gICAgaHAtPnJlZl9saXN0X2luZm8gPSAo U3RkVmlkZW9FbmNvZGVIMjY1UmVmZXJlbmNlTGlzdHNJbmZvKSB7Ci0gICAgICAgIC5mbGFncyA9 IChTdGRWaWRlb0VuY29kZUgyNjVSZWZlcmVuY2VMaXN0c0luZm9GbGFncykgewotICAgICAgICAg ICAgLnJlZl9waWNfbGlzdF9tb2RpZmljYXRpb25fZmxhZ19sMCA9IDAsCi0gICAgICAgICAgICAu cmVmX3BpY19saXN0X21vZGlmaWNhdGlvbl9mbGFnX2wxID0gMCwKLSAgICAgICAgICAgIC8qIFJl c2VydmVkICovCi0gICAgICAgIH0sCi0gICAgICAgIC8qIE1heSBiZSBvdmVycmlkZGVuIGR1cmlu ZyBzZXR1cF9zbGljZXMoKSAqLwotICAgICAgICAubnVtX3JlZl9pZHhfbDBfYWN0aXZlX21pbnVz MSA9IHBpYy0+bmJfcmVmc1swXSAtIDEsCi0gICAgICAgIC5udW1fcmVmX2lkeF9sMV9hY3RpdmVf bWludXMxID0gcGljLT5uYl9yZWZzWzFdIC0gMSwKLSAgICAgICAgLyogUmVzZXJ2ZWQgKi8KLSAg ICAgICAgLmxpc3RfZW50cnlfbDAgPSB7IDAgfSwKLSAgICAgICAgLmxpc3RfZW50cnlfbDEgPSB7 IDAgfSwKLSAgICB9OwotCi0gICAgZm9yIChpID0gMDsgaSA8IFNURF9WSURFT19IMjY1X01BWF9O VU1fTElTVF9SRUY7IGkrKykKLSAgICAgICAgaHAtPnJlZl9saXN0X2luZm8uUmVmUGljTGlzdDBb aV0gPSBocC0+cmVmX2xpc3RfaW5mby5SZWZQaWNMaXN0MVtpXSA9IC0xOwotCi0gICAgLyogTm90 ZTogcmVhbGx5IG5vdCBzdXJlICovCi0gICAgZm9yIChpID0gMDsgaSA8IHBpYy0+bmJfcmVmc1sw XTsgaSsrKSB7Ci0gICAgICAgIFZrVmlkZW9SZWZlcmVuY2VTbG90SW5mb0tIUiAqc2xvdF9pbmZv OwotICAgICAgICBzbG90X2luZm8gPSAoVmtWaWRlb1JlZmVyZW5jZVNsb3RJbmZvS0hSICopJmVu Y29kZV9pbmZvLT5wUmVmZXJlbmNlU2xvdHNbaV07Ci0gICAgICAgIGhwLT5yZWZfbGlzdF9pbmZv LlJlZlBpY0xpc3QwW2ldID0gc2xvdF9pbmZvLT5zbG90SW5kZXg7Ci0gICAgfQotCi0gICAgLyog Tm90ZTogcmVhbGx5IG5vdCBzdXJlICovCi0gICAgZm9yIChpID0gMDsgaSA8IHBpYy0+bmJfcmVm c1sxXTsgaSsrKSB7Ci0gICAgICAgIFZrVmlkZW9SZWZlcmVuY2VTbG90SW5mb0tIUiAqc2xvdF9p bmZvOwotICAgICAgICBzbG90X2luZm8gPSAoVmtWaWRlb1JlZmVyZW5jZVNsb3RJbmZvS0hSICop JmVuY29kZV9pbmZvLT5wUmVmZXJlbmNlU2xvdHNbcGljLT5uYl9yZWZzWzBdICsgaV07Ci0gICAg ICAgIGhwLT5yZWZfbGlzdF9pbmZvLlJlZlBpY0xpc3QxW2ldID0gc2xvdF9pbmZvLT5zbG90SW5k ZXg7Ci0gICAgfQotCi0gICAgaHAtPmgyNjVwaWNfaW5mby5wUmVmTGlzdHMgPSAmaHAtPnJlZl9s aXN0X2luZm87Ci0KLSAgICBpZiAocGljLT50eXBlICE9IEZGX0hXX1BJQ1RVUkVfVFlQRV9JRFIp IHsKLSAgICAgICAgU3RkVmlkZW9IMjY1U2hvcnRUZXJtUmVmUGljU2V0ICpycHM7Ci0gICAgICAg IFZ1bGthbkVuY29kZUgyNjVQaWN0dXJlICpzdHJwOwotICAgICAgICBpbnQgcnBzX3BvY1tNQVhf RFBCX1NJWkVdOwotICAgICAgICBpbnQgcnBzX3VzZWRbTUFYX0RQQl9TSVpFXTsKLSAgICAgICAg aW50IHBvYywgcnBzX3BpY3M7Ci0KLSAgICAgICAgaHAtPmgyNjVwaWNfaW5mby5mbGFncy5zaG9y dF90ZXJtX3JlZl9waWNfc2V0X3Nwc19mbGFnID0gMDsKLQotICAgICAgICBycHMgPSAmaHAtPnNf cnBzOwotICAgICAgICBtZW1zZXQocnBzLCAwLCBzaXplb2YoKnJwcykpOwotCi0gICAgICAgIHJw c19waWNzID0gMDsKLSAgICAgICAgZm9yIChpID0gMDsgaSA8IE1BWF9SRUZFUkVOQ0VfTElTVF9O VU07IGkrKykgewotICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IHBpYy0+bmJfcmVmc1tpXTsg aisrKSB7Ci0gICAgICAgICAgICAgICAgc3RycCA9IHBpYy0+cmVmc1tpXVtqXS0+Y29kZWNfcHJp djsKLSAgICAgICAgICAgICAgICBycHNfcG9jW3Jwc19waWNzXSAgPSBzdHJwLT5waWNfb3JkZXJf Y250OwotICAgICAgICAgICAgICAgIHJwc191c2VkW3Jwc19waWNzXSA9IDE7Ci0gICAgICAgICAg ICAgICAgKytycHNfcGljczsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGZv ciAoaSA9IDA7IGkgPCBwaWMtPm5iX2RwYl9waWNzOyBpKyspIHsKLSAgICAgICAgICAgIGlmIChw aWMtPmRwYltpXSA9PSBwaWMpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAg ICAgIGZvciAoaiA9IDA7IGogPCBwaWMtPm5iX3JlZnNbMF07IGorKykgewotICAgICAgICAgICAg ICAgIGlmIChwaWMtPmRwYltpXSA9PSBwaWMtPnJlZnNbMF1bal0pCi0gICAgICAgICAgICAgICAg ICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGogPCBwaWMtPm5iX3Jl ZnNbMF0pCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIGZvciAoaiA9 IDA7IGogPCBwaWMtPm5iX3JlZnNbMV07IGorKykgewotICAgICAgICAgICAgICAgIGlmIChwaWMt PmRwYltpXSA9PSBwaWMtPnJlZnNbMV1bal0pCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwot ICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGogPCBwaWMtPm5iX3JlZnNbMV0pCi0gICAg ICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIHN0cnAgPSBwaWMtPmRwYltpXS0+ Y29kZWNfcHJpdjsKLSAgICAgICAgICAgIHJwc19wb2NbcnBzX3BpY3NdICA9IHN0cnAtPnBpY19v cmRlcl9jbnQ7Ci0gICAgICAgICAgICBycHNfdXNlZFtycHNfcGljc10gPSAwOwotICAgICAgICAg ICAgKytycHNfcGljczsKLSAgICAgICAgfQotCi0gICAgICAgIGZvciAoaSA9IDE7IGkgPCBycHNf cGljczsgaSsrKSB7Ci0gICAgICAgICAgICBmb3IgKGogPSBpOyBqID4gMDsgai0tKSB7Ci0gICAg ICAgICAgICAgICAgaWYgKHJwc19wb2Nbal0gPiBycHNfcG9jW2ogLSAxXSkKLSAgICAgICAgICAg ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgYXZfYXNzZXJ0MChycHNfcG9jW2pdICE9 IHJwc19wb2NbaiAtIDFdKTsKLSAgICAgICAgICAgICAgICBGRlNXQVAoaW50LCBycHNfcG9jW2pd LCAgcnBzX3BvY1tqIC0gMV0pOwotICAgICAgICAgICAgICAgIEZGU1dBUChpbnQsIHJwc191c2Vk W2pdLCBycHNfdXNlZFtqIC0gMV0pOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAg ICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfREVCVUcsICJSUFMgZm9yIFBPQyAlZDoiLCBocC0+cGlj X29yZGVyX2NudCk7Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBycHNfcGljczsgaSsrKQotICAg ICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfREVCVUcsICIgKCVkLCVkKSIsIHJwc19wb2Nb aV0sIHJwc191c2VkW2ldKTsKLQotICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19ERUJVRywg IlxuIik7Ci0KLSAgICAgICAgZm9yIChpID0gMDsgaSA8IHJwc19waWNzOyBpKyspIHsKLSAgICAg ICAgICAgIGF2X2Fzc2VydDAocnBzX3BvY1tpXSAhPSBocC0+cGljX29yZGVyX2NudCk7Ci0gICAg ICAgICAgICBpZiAocnBzX3BvY1tpXSA+IGhwLT5waWNfb3JkZXJfY250KQotICAgICAgICAgICAg ICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgcnBzLT5udW1fbmVnYXRpdmVfcGljcyA9 IGk7Ci0gICAgICAgIHJwcy0+dXNlZF9ieV9jdXJyX3BpY19zMF9mbGFnID0gMHgwOwotICAgICAg ICBwb2MgPSBocC0+cGljX29yZGVyX2NudDsKLSAgICAgICAgZm9yIChqID0gaSAtIDE7IGogPj0g MDsgai0tKSB7Ci0gICAgICAgICAgICBycHMtPmRlbHRhX3BvY19zMF9taW51czFbaSAtIDEgLSBq XSA9IHBvYyAtIHJwc19wb2Nbal0gLSAxOwotICAgICAgICAgICAgcnBzLT51c2VkX2J5X2N1cnJf cGljX3MwX2ZsYWcgfD0gcnBzX3VzZWRbal0gPDwgKGkgLSAxIC0gaik7Ci0gICAgICAgICAgICBw b2MgPSBycHNfcG9jW2pdOwotICAgICAgICB9Ci0KLSAgICAgICAgcnBzLT5udW1fcG9zaXRpdmVf cGljcyA9IHJwc19waWNzIC0gaTsKLSAgICAgICAgcnBzLT51c2VkX2J5X2N1cnJfcGljX3MxX2Zs YWcgPSAweDA7Ci0gICAgICAgIHBvYyA9IGhwLT5waWNfb3JkZXJfY250OwotICAgICAgICBmb3Ig KGogPSBpOyBqIDwgcnBzX3BpY3M7IGorKykgewotICAgICAgICAgICAgcnBzLT5kZWx0YV9wb2Nf czFfbWludXMxW2ogLSBpXSA9IHJwc19wb2Nbal0gLSBwb2MgLSAxOwotICAgICAgICAgICAgcnBz LT51c2VkX2J5X2N1cnJfcGljX3MxX2ZsYWcgfD0gcnBzX3VzZWRbal0gPDwgKGogLSBpKTsKLSAg ICAgICAgICAgIHBvYyA9IHJwc19wb2Nbal07Ci0gICAgICAgIH0KLQotICAgICAgICBocC0+bF9y cHMubnVtX2xvbmdfdGVybV9zcHMgID0gMDsKLSAgICAgICAgaHAtPmxfcnBzLm51bV9sb25nX3Rl cm1fcGljcyA9IDA7Ci0KLSAgICAgICAgLy8gd2hlbiB0aGlzIGZsYWcgaXMgbm90IHByZXNlbnQs IGl0IGlzIGluZXJyZWQgdG8gMS4KLSAgICAgICAgaHAtPnNsaWNlX2hkci5mbGFncy5jb2xsb2Nh dGVkX2Zyb21fbDBfZmxhZyA9IDE7Ci0gICAgICAgIGhwLT5oMjY1cGljX2luZm8uZmxhZ3Muc2xp Y2VfdGVtcG9yYWxfbXZwX2VuYWJsZWRfZmxhZyA9Ci0gICAgICAgICAgICBlbmMtPnVuaXRzLnJh d19zcHMuc3BzX3RlbXBvcmFsX212cF9lbmFibGVkX2ZsYWc7Ci0gICAgICAgIGlmIChocC0+aDI2 NXBpY19pbmZvLmZsYWdzLnNsaWNlX3RlbXBvcmFsX212cF9lbmFibGVkX2ZsYWcpIHsKLSAgICAg ICAgICAgIGlmIChocC0+c2xpY2VfaGRyLnNsaWNlX3R5cGUgPT0gU1REX1ZJREVPX0gyNjVfU0xJ Q0VfVFlQRV9CKQotICAgICAgICAgICAgICAgIGhwLT5zbGljZV9oZHIuZmxhZ3MuY29sbG9jYXRl ZF9mcm9tX2wwX2ZsYWcgPSAxOwotICAgICAgICAgICAgaHAtPnNsaWNlX2hkci5jb2xsb2NhdGVk X3JlZl9pZHggPSAwOwotICAgICAgICB9Ci0KLSAgICAgICAgaHAtPnNsaWNlX2hkci5mbGFncy5u dW1fcmVmX2lkeF9hY3RpdmVfb3ZlcnJpZGVfZmxhZyA9IDA7Ci0gICAgICAgIGhwLT5yZWZfbGlz dF9pbmZvLm51bV9yZWZfaWR4X2wwX2FjdGl2ZV9taW51czEgPSBlbmMtPnVuaXRzLnJhd19wcHMu bnVtX3JlZl9pZHhfbDBfZGVmYXVsdF9hY3RpdmVfbWludXMxOwotICAgICAgICBocC0+cmVmX2xp c3RfaW5mby5udW1fcmVmX2lkeF9sMV9hY3RpdmVfbWludXMxID0gZW5jLT51bml0cy5yYXdfcHBz Lm51bV9yZWZfaWR4X2wxX2RlZmF1bHRfYWN0aXZlX21pbnVzMTsKLSAgICB9Ci0KLSAgICBocC0+ aDI2NXBpY19pbmZvLnBTaG9ydFRlcm1SZWZQaWNTZXQgPSAmaHAtPnNfcnBzOwotICAgIGhwLT5o MjY1cGljX2luZm8ucExvbmdUZXJtUmVmUGljcyA9ICZocC0+bF9ycHM7Ci19Ci0KLXN0YXRpYyBp bnQgaW5pdF9waWNfcGFyYW1zKEFWQ29kZWNDb250ZXh0ICphdmN0eCwgRkZIV0Jhc2VFbmNvZGVQ aWN0dXJlICpwaWMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBWa1ZpZGVvRW5jb2RlSW5m b0tIUiAqZW5jb2RlX2luZm8pCi17Ci0gICAgaW50IGVycjsKLSAgICBWdWxrYW5FbmNvZGVIMjY1 Q29udGV4dCAqZW5jID0gYXZjdHgtPnByaXZfZGF0YTsKLSAgICBGRlZ1bGthbkVuY29kZVBpY3R1 cmUgKnZwID0gcGljLT5wcml2OwotICAgIFZ1bGthbkVuY29kZUgyNjVQaWN0dXJlICpocCA9IHBp Yy0+Y29kZWNfcHJpdjsKLSAgICBWa1ZpZGVvUmVmZXJlbmNlU2xvdEluZm9LSFIgKnJlZl9zbG90 OwotCi0gICAgZXJyID0gdmtfZW5jX2gyNjVfdXBkYXRlX3BpY19pbmZvKGF2Y3R4LCBwaWMpOwot ICAgIGlmIChlcnIgPCAwKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgaHAtPnZraDI2NXBp Y19pbmZvID0gKFZrVmlkZW9FbmNvZGVIMjY1UGljdHVyZUluZm9LSFIpIHsKLSAgICAgICAgLnNU eXBlID0gVktfU1RSVUNUVVJFX1RZUEVfVklERU9fRU5DT0RFX0gyNjVfUElDVFVSRV9JTkZPX0tI UiwKLSAgICAgICAgLnBOZXh0ID0gTlVMTCwKLSAgICAgICAgLnBOYWx1U2xpY2VTZWdtZW50RW50 cmllcyA9IE5VTEwsIC8vIEZpbGxlZCBpbiBkdXJpbmcgc2V0dXBfc2xpY2VzKCkKLSAgICAgICAg Lm5hbHVTbGljZVNlZ21lbnRFbnRyeUNvdW50ID0gMCwgLy8gRmlsbGVkIGluIGR1cmluZyBzZXR1 cF9zbGljZXMoKQotICAgICAgICAucFN0ZFBpY3R1cmVJbmZvID0gJmhwLT5oMjY1cGljX2luZm8s Ci0gICAgfTsKLQotICAgIGhwLT5oMjY1cGljX2luZm8gPSAoU3RkVmlkZW9FbmNvZGVIMjY1UGlj dHVyZUluZm8pIHsKLSAgICAgICAgLmZsYWdzID0gKFN0ZFZpZGVvRW5jb2RlSDI2NVBpY3R1cmVJ bmZvRmxhZ3MpIHsKLSAgICAgICAgICAgIC5pc19yZWZlcmVuY2UgPSBwaWMtPmlzX3JlZmVyZW5j ZSwKLSAgICAgICAgICAgIC5JcmFwUGljRmxhZyA9IHBpYy0+dHlwZSA9PSBGRl9IV19QSUNUVVJF X1RZUEVfSURSLAotICAgICAgICAgICAgLnVzZWRfZm9yX2xvbmdfdGVybV9yZWZlcmVuY2UgPSAw LAotICAgICAgICAgICAgLmRpc2NhcmRhYmxlX2ZsYWcgPSAwLAotICAgICAgICAgICAgLmNyb3Nz X2xheWVyX2JsYV9mbGFnID0gMCwKLSAgICAgICAgICAgIC5waWNfb3V0cHV0X2ZsYWcgPSAxLAot ICAgICAgICAgICAgLm5vX291dHB1dF9vZl9wcmlvcl9waWNzX2ZsYWcgPSAwLAotICAgICAgICAg ICAgLnNob3J0X3Rlcm1fcmVmX3BpY19zZXRfc3BzX2ZsYWcgPSAwLAotICAgICAgICAgICAgLnNs aWNlX3RlbXBvcmFsX212cF9lbmFibGVkX2ZsYWcgPSBlbmMtPnVuaXRzLnJhd19zcHMuc3BzX3Rl bXBvcmFsX212cF9lbmFibGVkX2ZsYWcsCi0gICAgICAgICAgICAvKiBSZXNlcnZlZCAqLwotICAg ICAgICB9LAotICAgICAgICAucGljX3R5cGUgPSBocC0+cGljX3R5cGUsCi0gICAgICAgIC5zcHNf dmlkZW9fcGFyYW1ldGVyX3NldF9pZCA9IDAsCi0gICAgICAgIC5wcHNfc2VxX3BhcmFtZXRlcl9z ZXRfaWQgPSAwLAotICAgICAgICAucHBzX3BpY19wYXJhbWV0ZXJfc2V0X2lkID0gMCwKLSAgICAg ICAgLnNob3J0X3Rlcm1fcmVmX3BpY19zZXRfaWR4ID0gMCwKLSAgICAgICAgLlBpY09yZGVyQ250 VmFsID0gaHAtPnBpY19vcmRlcl9jbnQsCi0gICAgICAgIC5UZW1wb3JhbElkID0gMCwKLSAgICAg ICAgLyogUmVzZXJ2ZWQgKi8KLSAgICAgICAgLnBSZWZMaXN0cyA9IE5VTEwsIC8vIEZpbGxlZCBp biBkdXJpbmcgc2V0dXBfcmVmcwotICAgICAgICAucFNob3J0VGVybVJlZlBpY1NldCA9IE5VTEws Ci0gICAgICAgIC5wTG9uZ1Rlcm1SZWZQaWNzID0gTlVMTCwKLSAgICB9OwotICAgIGVuY29kZV9p bmZvLT5wTmV4dCA9ICZocC0+dmtoMjY1cGljX2luZm87Ci0KLSAgICBocC0+aDI2NWRwYl9pbmZv ID0gKFN0ZFZpZGVvRW5jb2RlSDI2NVJlZmVyZW5jZUluZm8pIHsKLSAgICAgICAgLmZsYWdzID0g KFN0ZFZpZGVvRW5jb2RlSDI2NVJlZmVyZW5jZUluZm9GbGFncykgewotICAgICAgICAgICAgLnVz ZWRfZm9yX2xvbmdfdGVybV9yZWZlcmVuY2UgPSAwLAotICAgICAgICAgICAgLnVudXNlZF9mb3Jf cmVmZXJlbmNlID0gMCwKLSAgICAgICAgICAgIC8qIFJlc2VydmVkICovCi0gICAgICAgIH0sCi0g ICAgICAgIC5waWNfdHlwZSA9IGhwLT5oMjY1cGljX2luZm8ucGljX3R5cGUsCi0gICAgICAgIC5Q aWNPcmRlckNudFZhbCA9IGhwLT5oMjY1cGljX2luZm8uUGljT3JkZXJDbnRWYWwsCi0gICAgICAg IC5UZW1wb3JhbElkID0gaHAtPmgyNjVwaWNfaW5mby5UZW1wb3JhbElkLAotICAgIH07Ci0gICAg aHAtPnZraDI2NWRwYl9pbmZvID0gKFZrVmlkZW9FbmNvZGVIMjY1RHBiU2xvdEluZm9LSFIpIHsK LSAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfVklERU9fRU5DT0RFX0gyNjVfRFBC X1NMT1RfSU5GT19LSFIsCi0gICAgICAgIC5wU3RkUmVmZXJlbmNlSW5mbyA9ICZocC0+aDI2NWRw Yl9pbmZvLAotICAgIH07Ci0KLSAgICB2cC0+ZHBiX3Nsb3QucE5leHQgPSAmaHAtPnZraDI2NWRw Yl9pbmZvOwotCi0gICAgcmVmX3Nsb3QgPSAoVmtWaWRlb1JlZmVyZW5jZVNsb3RJbmZvS0hSICop ZW5jb2RlX2luZm8tPnBTZXR1cFJlZmVyZW5jZVNsb3Q7Ci0gICAgcmVmX3Nsb3QtPnBOZXh0ID0g JmhwLT52a2gyNjVkcGJfaW5mbzsKLQotICAgIHNldHVwX3JlZnMoYXZjdHgsIHBpYywgZW5jb2Rl X2luZm8pOwotCi0gICAgc2V0dXBfc2xpY2VzKGF2Y3R4LCBwaWMpOwotCi0gICAgcmV0dXJuIDA7 Ci19Ci0KLXN0YXRpYyBpbnQgaW5pdF9wcm9maWxlKEFWQ29kZWNDb250ZXh0ICphdmN0eCwKLSAg ICAgICAgICAgICAgICAgICAgICAgIFZrVmlkZW9Qcm9maWxlSW5mb0tIUiAqcHJvZmlsZSwgdm9p ZCAqcG5leHQpCi17Ci0gICAgVmtSZXN1bHQgcmV0OwotICAgIFZ1bGthbkVuY29kZUgyNjVDb250 ZXh0ICplbmMgPSBhdmN0eC0+cHJpdl9kYXRhOwotICAgIEZGVnVsa2FuRW5jb2RlQ29udGV4dCAq Y3R4ID0gJmVuYy0+Y29tbW9uOwotICAgIEZGVnVsa2FuQ29udGV4dCAqcyA9ICZjdHgtPnM7Ci0g ICAgRkZWdWxrYW5GdW5jdGlvbnMgKnZrID0gJmN0eC0+cy52a2ZuOwotICAgIFZrVmlkZW9FbmNv ZGVIMjY1Q2FwYWJpbGl0aWVzS0hSIGgyNjVfY2FwcyA9IHsKLSAgICAgICAgLnNUeXBlID0gVktf U1RSVUNUVVJFX1RZUEVfVklERU9fRU5DT0RFX0gyNjVfQ0FQQUJJTElUSUVTX0tIUiwKLSAgICB9 OwotICAgIFZrVmlkZW9FbmNvZGVDYXBhYmlsaXRpZXNLSFIgZW5jX2NhcHMgPSB7Ci0gICAgICAg IC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX1ZJREVPX0VOQ09ERV9DQVBBQklMSVRJRVNfS0hS LAotICAgICAgICAucE5leHQgPSAmaDI2NV9jYXBzLAotICAgIH07Ci0gICAgVmtWaWRlb0NhcGFi aWxpdGllc0tIUiBjYXBzID0gewotICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9W SURFT19DQVBBQklMSVRJRVNfS0hSLAotICAgICAgICAucE5leHQgPSAmZW5jX2NhcHMsCi0gICAg fTsKLQotICAgIC8qIEluIG9yZGVyIG9mIHByZWZlcmVuY2UgKi8KLSAgICBpbnQgbGFzdF9zdXBw b3J0ZWQgPSBBVl9QUk9GSUxFX1VOS05PV047Ci0gICAgc3RhdGljIGNvbnN0IGludCBrbm93bl9w cm9maWxlc1tdID0gewotICAgICAgICBBVl9QUk9GSUxFX0hFVkNfTUFJTiwKLSAgICAgICAgQVZf UFJPRklMRV9IRVZDX01BSU5fMTAsCi0gICAgICAgIEFWX1BST0ZJTEVfSEVWQ19SRVhULAotICAg IH07Ci0gICAgaW50IG5iX3Byb2ZpbGVzID0gRkZfQVJSQVlfRUxFTVMoa25vd25fcHJvZmlsZXMp OwotCi0gICAgY29uc3QgQVZQaXhGbXREZXNjcmlwdG9yICpkZXNjID0gYXZfcGl4X2ZtdF9kZXNj X2dldChzLT5mcmFtZXMtPnN3X2Zvcm1hdCk7Ci0gICAgaWYgKCFkZXNjKQotICAgICAgICByZXR1 cm4gQVZFUlJPUihFSU5WQUwpOwotCi0gICAgaWYgKHMtPmZyYW1lcy0+c3dfZm9ybWF0ID09IEFW X1BJWF9GTVRfTlYxMikKLSAgICAgICAgbmJfcHJvZmlsZXMgPSAxOwotICAgIGVsc2UgaWYgKHMt PmZyYW1lcy0+c3dfZm9ybWF0ID09IEFWX1BJWF9GTVRfUDAxMCkKLSAgICAgICAgbmJfcHJvZmls ZXMgPSAyOwotCi0gICAgZW5jLT5wcm9maWxlID0gKFZrVmlkZW9FbmNvZGVIMjY1UHJvZmlsZUlu Zm9LSFIpIHsKLSAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfVklERU9fRU5DT0RF X0gyNjVfUFJPRklMRV9JTkZPX0tIUiwKLSAgICAgICAgLnBOZXh0ID0gcG5leHQsCi0gICAgICAg IC5zdGRQcm9maWxlSWRjID0gZmZfdmtfaDI2NV9wcm9maWxlX3RvX3ZrKGF2Y3R4LT5wcm9maWxl KSwKLSAgICB9OwotICAgIHByb2ZpbGUtPnBOZXh0ID0gJmVuYy0+cHJvZmlsZTsKLQotICAgIC8q IFNldCBsZXZlbCAqLwotICAgIGlmIChhdmN0eC0+bGV2ZWwgPT0gQVZfTEVWRUxfVU5LTk9XTikK LSAgICAgICAgYXZjdHgtPmxldmVsID0gZW5jLT5jb21tb24ub3B0cy5sZXZlbDsKLQotICAgIC8q IFVzZXIgaGFzIGV4cGxpY2l0bHkgc3BlY2lmaWVkIGEgcHJvZmlsZS4gKi8KLSAgICBpZiAoYXZj dHgtPnByb2ZpbGUgIT0gQVZfUFJPRklMRV9VTktOT1dOKQotICAgICAgICByZXR1cm4gMDsKLQot ICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0RFQlVHLCAiU3VwcG9ydGVkIHByb2ZpbGVzOlxuIik7 Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuYl9wcm9maWxlczsgaSsrKSB7Ci0gICAgICAgIGVu Yy0+cHJvZmlsZS5zdGRQcm9maWxlSWRjID0gZmZfdmtfaDI2NV9wcm9maWxlX3RvX3ZrKGtub3du X3Byb2ZpbGVzW2ldKTsKLSAgICAgICAgcmV0ID0gdmstPkdldFBoeXNpY2FsRGV2aWNlVmlkZW9D YXBhYmlsaXRpZXNLSFIocy0+aHdjdHgtPnBoeXNfZGV2LAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9maWxlLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY2Fwcyk7Ci0gICAg ICAgIGlmIChyZXQgPT0gVktfU1VDQ0VTUykgewotICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBB Vl9MT0dfREVCVUcsICIgICAgJXNcbiIsCi0gICAgICAgICAgICAgICAgICAgYXZjb2RlY19wcm9m aWxlX25hbWUoYXZjdHgtPmNvZGVjX2lkLCBrbm93bl9wcm9maWxlc1tpXSkpOwotICAgICAgICAg ICAgbGFzdF9zdXBwb3J0ZWQgPSBrbm93bl9wcm9maWxlc1tpXTsKLSAgICAgICAgfQotICAgIH0K LQotICAgIGlmIChsYXN0X3N1cHBvcnRlZCA9PSBBVl9QUk9GSUxFX1VOS05PV04pIHsKLSAgICAg ICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJObyBzdXBwb3J0ZWQgcHJvZmlsZXMgZm9y IGdpdmVuIGZvcm1hdFxuIik7Ci0gICAgICAgIHJldHVybiBBVkVSUk9SKEVOT1RTVVApOwotICAg IH0KLQotICAgIGVuYy0+cHJvZmlsZS5zdGRQcm9maWxlSWRjID0gZmZfdmtfaDI2NV9wcm9maWxl X3RvX3ZrKGxhc3Rfc3VwcG9ydGVkKTsKLSAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19WRVJCT1NF LCAiVXNpbmcgcHJvZmlsZSAlc1xuIiwKLSAgICAgICAgICAgYXZjb2RlY19wcm9maWxlX25hbWUo YXZjdHgtPmNvZGVjX2lkLCBsYXN0X3N1cHBvcnRlZCkpOwotICAgIGF2Y3R4LT5wcm9maWxlID0g bGFzdF9zdXBwb3J0ZWQ7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBpbml0X2Vu Y19vcHRpb25zKEFWQ29kZWNDb250ZXh0ICphdmN0eCkKLXsKLSAgICBWdWxrYW5FbmNvZGVIMjY1 Q29udGV4dCAqZW5jID0gYXZjdHgtPnByaXZfZGF0YTsKLQotICAgIGlmIChhdmN0eC0+cmNfYnVm ZmVyX3NpemUpCi0gICAgICAgIGVuYy0+aHJkX2J1ZmZlcl9zaXplID0gYXZjdHgtPnJjX2J1ZmZl cl9zaXplOwotICAgIGVsc2UgaWYgKGF2Y3R4LT5yY19tYXhfcmF0ZSA+IDApCi0gICAgICAgIGVu Yy0+aHJkX2J1ZmZlcl9zaXplID0gYXZjdHgtPnJjX21heF9yYXRlOwotICAgIGVsc2UKLSAgICAg ICAgZW5jLT5ocmRfYnVmZmVyX3NpemUgPSBhdmN0eC0+Yml0X3JhdGU7Ci0KLSAgICBpZiAoYXZj dHgtPnJjX2luaXRpYWxfYnVmZmVyX29jY3VwYW5jeSkgewotICAgICAgICBpZiAoYXZjdHgtPnJj X2luaXRpYWxfYnVmZmVyX29jY3VwYW5jeSA+IGVuYy0+aHJkX2J1ZmZlcl9zaXplKSB7Ci0gICAg ICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkludmFsaWQgUkMgYnVmZmVyIHNl dHRpbmdzOiAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm11c3Qg aGF2ZSBpbml0aWFsIGJ1ZmZlciBzaXplICglZCkgPD0gIgotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICJidWZmZXIgc2l6ZSAoJSJQUklkNjQiKS5cbiIsCi0gICAgICAg ICAgICAgICAgICAgYXZjdHgtPnJjX2luaXRpYWxfYnVmZmVyX29jY3VwYW5jeSwgZW5jLT5ocmRf YnVmZmVyX3NpemUpOwotICAgICAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKLSAgICAg ICAgfQotICAgICAgICBlbmMtPmluaXRpYWxfYnVmZmVyX2Z1bGxuZXNzID0gYXZjdHgtPnJjX2lu aXRpYWxfYnVmZmVyX29jY3VwYW5jeTsKLSAgICB9IGVsc2UgewotICAgICAgICBlbmMtPmluaXRp YWxfYnVmZmVyX2Z1bGxuZXNzID0gZW5jLT5ocmRfYnVmZmVyX3NpemUgKiAzIC8gNDsKLSAgICB9 Ci0KLSAgICBpZiAoZW5jLT5jb21tb24ub3B0cy5yY19tb2RlID09IFZLX1ZJREVPX0VOQ09ERV9S QVRFX0NPTlRST0xfTU9ERV9ESVNBQkxFRF9CSVRfS0hSKSB7Ci0gICAgICAgIGVuYy0+Zml4ZWRf cXBfcCA9IGF2X2NsaXAoZW5jLT5jb21tb24ub3B0cy5xcCwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBlbmMtPmNhcHMubWluUXAsIGVuYy0+Y2Fwcy5tYXhRcCk7Ci0KLSAgICAg ICAgaWYgKGF2Y3R4LT5pX3F1YW50X2ZhY3RvciA+IDAuMCkKLSAgICAgICAgICAgIGVuYy0+Zml4 ZWRfcXBfaWRyID0gYXZfY2xpcCgoYXZjdHgtPmlfcXVhbnRfZmFjdG9yICogZW5jLT5maXhlZF9x cF9wICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZjdHgtPmlf cXVhbnRfb2Zmc2V0KSArIDAuNSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBlbmMtPmNhcHMubWluUXAsIGVuYy0+Y2Fwcy5tYXhRcCk7Ci0gICAgICAgIGVsc2UKLSAg ICAgICAgICAgIGVuYy0+Zml4ZWRfcXBfaWRyID0gZW5jLT5maXhlZF9xcF9wOwotCi0gICAgICAg IGlmIChhdmN0eC0+Yl9xdWFudF9mYWN0b3IgPiAwLjApCi0gICAgICAgICAgICBlbmMtPmZpeGVk X3FwX2IgPSBhdl9jbGlwKChhdmN0eC0+Yl9xdWFudF9mYWN0b3IgKiBlbmMtPmZpeGVkX3FwX3Ag KwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZjdHgtPmJfcXVhbnRf b2Zmc2V0KSArIDAuNSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5j LT5jYXBzLm1pblFwLCBlbmMtPmNhcHMubWF4UXApOwotICAgICAgICBlbHNlCi0gICAgICAgICAg ICBlbmMtPmZpeGVkX3FwX2IgPSBlbmMtPmZpeGVkX3FwX3A7Ci0KLSAgICAgICAgYXZfbG9nKGF2 Y3R4LCBBVl9MT0dfREVCVUcsICJVc2luZyBmaXhlZCBRUCA9ICIKLSAgICAgICAgICAgICAgICIl ZCAvICVkIC8gJWQgZm9yIElEUi0gLyBQLSAvIEItZnJhbWVzLlxuIiwKLSAgICAgICAgICAgICAg IGVuYy0+Zml4ZWRfcXBfaWRyLCBlbmMtPmZpeGVkX3FwX3AsIGVuYy0+Zml4ZWRfcXBfYik7Ci0g ICAgfSBlbHNlIHsKLSAgICAgICAgZW5jLT5maXhlZF9xcF9pZHIgPSAyNjsKLSAgICAgICAgZW5j LT5maXhlZF9xcF9wID0gMjY7Ci0gICAgICAgIGVuYy0+Zml4ZWRfcXBfYiA9IDI2OwotICAgIH0K LQotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgYXZfY29sZCBpbnQgaW5pdF9zZXF1ZW5jZV9o ZWFkZXJzKEFWQ29kZWNDb250ZXh0ICphdmN0eCkKLXsKLSAgICBpbnQgZXJyOwotICAgIFZ1bGth bkVuY29kZUgyNjVDb250ZXh0ICplbmMgPSBhdmN0eC0+cHJpdl9kYXRhOwotICAgIEZGVnVsa2Fu RW5jb2RlQ29udGV4dCAqY3R4ID0gJmVuYy0+Y29tbW9uOwotICAgIEZGSFdCYXNlRW5jb2RlQ29u dGV4dCAqYmFzZV9jdHggPSAmY3R4LT5iYXNlOwotCi0gICAgRkZIV0Jhc2VFbmNvZGVIMjY1ICp1 bml0cyA9ICZlbmMtPnVuaXRzOwotICAgIEZGSFdCYXNlRW5jb2RlSDI2NU9wdHMgKnVuaXRfb3B0 cyA9ICZlbmMtPnVuaXRfb3B0czsKLQotICAgIGludCBtYXhfY3RiX3NpemU7Ci0gICAgdW5zaWdu ZWQgbWluX3RiX3NpemU7Ci0gICAgdW5zaWduZWQgbWF4X3RiX3NpemU7Ci0gICAgdW5zaWduZWQg bWF4X3RyYW5zZm9ybV9oaWVyYXJjaHk7Ci0KLSAgICB1bml0X29wdHMtPnRpZXIgPSBlbmMtPmNv bW1vbi5vcHRzLnRpZXI7Ci0gICAgdW5pdF9vcHRzLT5maXhlZF9xcF9pZHIgPSBlbmMtPmZpeGVk X3FwX2lkcjsKLSAgICB1bml0X29wdHMtPmN1X3FwX2RlbHRhX2VuYWJsZWRfZmxhZyA9IGVuYy0+ Y29tbW9uLm9wdHMucmNfbW9kZSAhPSBWS19WSURFT19FTkNPREVfUkFURV9DT05UUk9MX01PREVf RElTQUJMRURfQklUX0tIUjsKLQotICAgIHVuaXRfb3B0cy0+bmJfc2xpY2VzID0gMTsKLQotICAg IHVuaXRfb3B0cy0+c2xpY2VfYmxvY2tfcm93cyA9IChhdmN0eC0+aGVpZ2h0ICsgYmFzZV9jdHgt PnNsaWNlX2Jsb2NrX2hlaWdodCAtIDEpIC8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBiYXNlX2N0eC0+c2xpY2VfYmxvY2tfaGVpZ2h0OwotICAgIHVuaXRfb3B0cy0+c2xpY2Vf YmxvY2tfY29scyA9IChhdmN0eC0+d2lkdGggICsgYmFzZV9jdHgtPnNsaWNlX2Jsb2NrX3dpZHRo ICAtIDEpIC8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlX2N0eC0+c2xp Y2VfYmxvY2tfd2lkdGg7Ci0KLSAgICAvKiBjYWJhYyBhbHJlYWR5IHNldCB2aWEgYW4gb3B0aW9u ICovCi0gICAgLyogZml4ZWRfcXBfaWRyIGluaXRpYWxpemVkIGluIGluaXRfZW5jX29wdGlvbnMo KSAqLwotICAgIC8qIGhyZF9idWZmZXJfc2l6ZSBpbml0aWFsaXplZCBpbiBpbml0X2VuY19vcHRp b25zKCkgKi8KLSAgICAvKiBpbml0aWFsX2J1ZmZlcl9mdWxsbmVzcyBpbml0aWFsaXplZCBpbiBp bml0X2VuY19vcHRpb25zKCkgKi8KLQotICAgIGVyciA9IGZmX2h3X2Jhc2VfZW5jb2RlX2luaXRf cGFyYW1zX2gyNjUoJmVuYy0+Y29tbW9uLmJhc2UsIGF2Y3R4LAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pdHMsIHVuaXRfb3B0cyk7Ci0gICAgaWYgKGVy ciA8IDApCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICB1bml0cy0+cmF3X3Nwcy5zYW1wbGVf YWRhcHRpdmVfb2Zmc2V0X2VuYWJsZWRfZmxhZyA9Ci0gICAgICAhIShlbmMtPmNhcHMuc3RkU3lu dGF4RmxhZ3MgJiBWS19WSURFT19FTkNPREVfSDI2NV9TVERfU0FNUExFX0FEQVBUSVZFX09GRlNF VF9FTkFCTEVEX0ZMQUdfU0VUX0JJVF9LSFIpOwotICAgIHVuaXRzLT5yYXdfcHBzLnRyYW5zZm9y bV9za2lwX2VuYWJsZWRfZmxhZyA9Ci0gICAgICAhIShlbmMtPmNhcHMuc3RkU3ludGF4RmxhZ3Mg JiBWS19WSURFT19FTkNPREVfSDI2NV9TVERfVFJBTlNGT1JNX1NLSVBfRU5BQkxFRF9GTEFHX1NF VF9CSVRfS0hSKTsKLQotICAgIG1heF9jdGJfc2l6ZSA9IDE2OwotCi0gICAgLyogY29kaW5nIGJs b2NrcyBmcm9tIDh4OCB0byBtYXggQ1RCIHNpemUuICovCi0gICAgaWYgKGVuYy0+Y2Fwcy5jdGJT aXplcyAmIFZLX1ZJREVPX0VOQ09ERV9IMjY1X0NUQl9TSVpFXzY0X0JJVF9LSFIpCi0gICAgICAg IG1heF9jdGJfc2l6ZSA9IDY0OwotICAgIGVsc2UgaWYgKGVuYy0+Y2Fwcy5jdGJTaXplcyAmIFZL X1ZJREVPX0VOQ09ERV9IMjY1X0NUQl9TSVpFXzMyX0JJVF9LSFIpCi0gICAgICAgIG1heF9jdGJf c2l6ZSA9IDMyOwotCi0gICAgbWluX3RiX3NpemUgPSAwOwotICAgIG1heF90Yl9zaXplID0gMDsK LSAgICBpZiAoZW5jLT5jYXBzLnRyYW5zZm9ybUJsb2NrU2l6ZXMgJiBWS19WSURFT19FTkNPREVf SDI2NV9UUkFOU0ZPUk1fQkxPQ0tfU0laRV80X0JJVF9LSFIpCi0gICAgICAgIG1pbl90Yl9zaXpl ID0gNDsKLSAgICBlbHNlIGlmIChlbmMtPmNhcHMudHJhbnNmb3JtQmxvY2tTaXplcyAmIFZLX1ZJ REVPX0VOQ09ERV9IMjY1X1RSQU5TRk9STV9CTE9DS19TSVpFXzhfQklUX0tIUikKLSAgICAgICAg bWluX3RiX3NpemUgPSA4OwotICAgIGVsc2UgaWYgKGVuYy0+Y2Fwcy50cmFuc2Zvcm1CbG9ja1Np emVzICYgVktfVklERU9fRU5DT0RFX0gyNjVfVFJBTlNGT1JNX0JMT0NLX1NJWkVfMTZfQklUX0tI UikKLSAgICAgICAgbWluX3RiX3NpemUgPSAxNjsKLSAgICBlbHNlIGlmIChlbmMtPmNhcHMudHJh bnNmb3JtQmxvY2tTaXplcyAmIFZLX1ZJREVPX0VOQ09ERV9IMjY1X1RSQU5TRk9STV9CTE9DS19T SVpFXzMyX0JJVF9LSFIpCi0gICAgICAgIG1pbl90Yl9zaXplID0gMzI7Ci0KLSAgICBpZiAoZW5j LT5jYXBzLnRyYW5zZm9ybUJsb2NrU2l6ZXMgJiBWS19WSURFT19FTkNPREVfSDI2NV9UUkFOU0ZP Uk1fQkxPQ0tfU0laRV8zMl9CSVRfS0hSKQotICAgICAgICBtYXhfdGJfc2l6ZSA9IDMyOwotICAg IGVsc2UgaWYgKGVuYy0+Y2Fwcy50cmFuc2Zvcm1CbG9ja1NpemVzICYgVktfVklERU9fRU5DT0RF X0gyNjVfVFJBTlNGT1JNX0JMT0NLX1NJWkVfMTZfQklUX0tIUikKLSAgICAgICAgbWF4X3RiX3Np emUgPSAxNjsKLSAgICBlbHNlIGlmIChlbmMtPmNhcHMudHJhbnNmb3JtQmxvY2tTaXplcyAmIFZL X1ZJREVPX0VOQ09ERV9IMjY1X1RSQU5TRk9STV9CTE9DS19TSVpFXzhfQklUX0tIUikKLSAgICAg ICAgbWF4X3RiX3NpemUgPSA4OwotICAgIGVsc2UgaWYgKGVuYy0+Y2Fwcy50cmFuc2Zvcm1CbG9j a1NpemVzICYgVktfVklERU9fRU5DT0RFX0gyNjVfVFJBTlNGT1JNX0JMT0NLX1NJWkVfNF9CSVRf S0hSKQotICAgICAgICBtYXhfdGJfc2l6ZSA9IDQ7Ci0KLSAgICB1bml0cy0+cmF3X3Nwcy5sb2cy X21pbl9sdW1hX2NvZGluZ19ibG9ja19zaXplX21pbnVzMyA9IDA7Ci0gICAgdW5pdHMtPnJhd19z cHMubG9nMl9kaWZmX21heF9taW5fbHVtYV9jb2RpbmdfYmxvY2tfc2l6ZSA9IGF2X2xvZzIobWF4 X2N0Yl9zaXplKSAtIDM7Ci0gICAgdW5pdHMtPnJhd19zcHMubG9nMl9taW5fbHVtYV90cmFuc2Zv cm1fYmxvY2tfc2l6ZV9taW51czIgPSBhdl9sb2cyKG1pbl90Yl9zaXplKSAtIDI7Ci0gICAgdW5p dHMtPnJhd19zcHMubG9nMl9kaWZmX21heF9taW5fbHVtYV90cmFuc2Zvcm1fYmxvY2tfc2l6ZSA9 IGF2X2xvZzIobWF4X3RiX3NpemUpIC0gYXZfbG9nMihtaW5fdGJfc2l6ZSk7Ci0KLSAgICBtYXhf dHJhbnNmb3JtX2hpZXJhcmNoeSA9IGF2X2xvZzIobWF4X2N0Yl9zaXplKSAtIGF2X2xvZzIobWlu X3RiX3NpemUpOwotICAgIHVuaXRzLT5yYXdfc3BzLm1heF90cmFuc2Zvcm1faGllcmFyY2h5X2Rl cHRoX2ludHJhID0gbWF4X3RyYW5zZm9ybV9oaWVyYXJjaHk7Ci0gICAgdW5pdHMtPnJhd19zcHMu bWF4X3RyYW5zZm9ybV9oaWVyYXJjaHlfZGVwdGhfaW50cmEgPSBtYXhfdHJhbnNmb3JtX2hpZXJh cmNoeTsKLQotICAgIHVuaXRzLT5yYXdfc3BzLnZ1aS5iaXRzdHJlYW1fcmVzdHJpY3Rpb25fZmxh ZyA9IDA7Ci0gICAgdW5pdHMtPnJhd19zcHMudnVpLm1heF9ieXRlc19wZXJfcGljX2Rlbm9tID0g MjsKLSAgICB1bml0cy0+cmF3X3Nwcy52dWkubWF4X2JpdHNfcGVyX21pbl9jdV9kZW5vbSA9IDE7 Ci0KLSAgICB1bml0cy0+cmF3X3Nwcy5zcHNfdGVtcG9yYWxfbXZwX2VuYWJsZWRfZmxhZyA9IDA7 Ci0KLSAgICBpZiAoYmFzZV9jdHgtPmdvcF9zaXplICYgYmFzZV9jdHgtPmdvcF9zaXplIC0gMSA9 PSAwKQotICAgICAgICB1bml0cy0+cmF3X3Nwcy5sb2cyX21heF9waWNfb3JkZXJfY250X2xzYl9t aW51czQgPSBGRk1BWChhdl9sb2cyKGJhc2VfY3R4LT5nb3Bfc2l6ZSkgLSA0LCAwKTsKLSAgICBl bHNlCi0gICAgICAgIHVuaXRzLT5yYXdfc3BzLmxvZzJfbWF4X3BpY19vcmRlcl9jbnRfbHNiX21p bnVzNCA9IEZGTUFYKGF2X2xvZzIoYmFzZV9jdHgtPmdvcF9zaXplKSAtIDMsIDApOwotCi0gICAg cmV0dXJuIDA7Ci19Ci0KLXR5cGVkZWYgc3RydWN0IFZ1bGthbkgyNjVVbml0cyB7Ci0gICAgU3Rk VmlkZW9IMjY1U2VxdWVuY2VQYXJhbWV0ZXJTZXQgICAgc3BzOwotICAgIFN0ZFZpZGVvSDI2NVNo b3J0VGVybVJlZlBpY1NldCAgICAgIHN0cltTVERfVklERU9fSDI2NV9TVUJMQVlFUlNfTElTVF9T SVpFXTsKLSAgICBTdGRWaWRlb0gyNjVMb25nVGVybVJlZlBpY3NTcHMgICAgICBsdHI7Ci0gICAg U3RkVmlkZW9IMjY1UHJvZmlsZVRpZXJMZXZlbCAgICAgICAgcHRsX3NwczsKLSAgICBTdGRWaWRl b0gyNjVEZWNQaWNCdWZNZ3IgICAgICAgICAgICBkcGJtX3NwczsKLQotICAgIFN0ZFZpZGVvSDI2 NUhyZFBhcmFtZXRlcnMgICAgICAgICAgIHZ1aV9oZWFkZXJfc3BzOwotICAgIFN0ZFZpZGVvSDI2 NVNlcXVlbmNlUGFyYW1ldGVyU2V0VnVpIHZ1aV9zcHM7Ci0KLSAgICBTdGRWaWRlb0gyNjVTdWJM YXllckhyZFBhcmFtZXRlcnMgICBzbGhkcm5hbFtIRVZDX01BWF9TVUJfTEFZRVJTXTsKLSAgICBT dGRWaWRlb0gyNjVTdWJMYXllckhyZFBhcmFtZXRlcnMgICBzbGhkcnZjbFtIRVZDX01BWF9TVUJf TEFZRVJTXTsKLQotICAgIFN0ZFZpZGVvSDI2NVBpY3R1cmVQYXJhbWV0ZXJTZXQgICAgIHBwczsK LSAgICBTdGRWaWRlb0gyNjVTY2FsaW5nTGlzdHMgICAgICAgICAgICBwcHNfc2NhbGluZzsKLQot ICAgIFN0ZFZpZGVvSDI2NVZpZGVvUGFyYW1ldGVyU2V0ICAgICAgIHZwczsKLSAgICBTdGRWaWRl b0gyNjVQcm9maWxlVGllckxldmVsICAgICAgICBwdGxfdnBzOwotICAgIFN0ZFZpZGVvSDI2NURl Y1BpY0J1Zk1nciAgICAgICAgICAgIGRwYm1fdnBzOwotICAgIFN0ZFZpZGVvSDI2NUhyZFBhcmFt ZXRlcnMgICAgICAgICAgIHZ1aV9oZWFkZXJfdnBzOwotfSBWdWxrYW5IMjY1VW5pdHM7Ci0KLXN0 YXRpYyBhdl9jb2xkIGludCBiYXNlX3VuaXRfdG9fdmsoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWdWxrYW5IMjY1VW5pdHMgKnZrX3Vu aXRzKQotewotICAgIFZ1bGthbkVuY29kZUgyNjVDb250ZXh0ICplbmMgPSBhdmN0eC0+cHJpdl9k YXRhOwotCi0gICAgSDI2NVJhd1NQUyAgICAgICAgICAgICAgICAgICAgICAgICAgICpzcHMgPSAm ZW5jLT51bml0cy5yYXdfc3BzOwotICAgIFN0ZFZpZGVvSDI2NVNlcXVlbmNlUGFyYW1ldGVyU2V0 ICAgKnZrc3BzID0gJnZrX3VuaXRzLT5zcHM7Ci0gICAgU3RkVmlkZW9IMjY1U2hvcnRUZXJtUmVm UGljU2V0ICAgICAgICpzdHIgPSAgdmtfdW5pdHMtPnN0cjsKLSAgICBTdGRWaWRlb0gyNjVMb25n VGVybVJlZlBpY3NTcHMgICAgICAgKmx0ciA9ICZ2a191bml0cy0+bHRyOwotICAgIFN0ZFZpZGVv SDI2NVByb2ZpbGVUaWVyTGV2ZWwgICAgICAgICAqcHRsX3NwcyA9ICZ2a191bml0cy0+cHRsX3Nw czsKLSAgICBTdGRWaWRlb0gyNjVEZWNQaWNCdWZNZ3IgICAgICAgICAgICAqZHBibV9zcHMgPSAm dmtfdW5pdHMtPmRwYm1fc3BzOwotCi0gICAgU3RkVmlkZW9IMjY1SHJkUGFyYW1ldGVycyAgICAg ICAgICAgKnZ1aV9oZWFkZXJfc3BzID0gJnZrX3VuaXRzLT52dWlfaGVhZGVyX3NwczsKLSAgICBT dGRWaWRlb0gyNjVTZXF1ZW5jZVBhcmFtZXRlclNldFZ1aSAqdnVpX3NwcyA9ICZ2a191bml0cy0+ dnVpX3NwczsKLQotICAgIFN0ZFZpZGVvSDI2NVN1YkxheWVySHJkUGFyYW1ldGVycyAqc2xoZHJu YWwgPSB2a191bml0cy0+c2xoZHJuYWw7Ci0gICAgU3RkVmlkZW9IMjY1U3ViTGF5ZXJIcmRQYXJh bWV0ZXJzICpzbGhkcnZjbCA9IHZrX3VuaXRzLT5zbGhkcnZjbDsKLQotICAgIEgyNjVSYXdQUFMg ICAgICAgICAgICAgICAgICAgICAgICAgICpwcHMgPSAmZW5jLT51bml0cy5yYXdfcHBzOwotICAg IFN0ZFZpZGVvSDI2NVBpY3R1cmVQYXJhbWV0ZXJTZXQgICAqdmtwcHMgPSAmdmtfdW5pdHMtPnBw czsKLQotICAgIEgyNjVSYXdWUFMgICAgICAgICAgICAgICAgICAgICAgICAgICAqdnBzID0gJmVu Yy0+dW5pdHMucmF3X3ZwczsKLSAgICBTdGRWaWRlb0gyNjVWaWRlb1BhcmFtZXRlclNldCAgICAg ICp2a3ZwcyA9ICZ2a191bml0cy0+dnBzOwotICAgIFN0ZFZpZGVvSDI2NVByb2ZpbGVUaWVyTGV2 ZWwgICAgICpwdGxfdnBzID0gJnZrX3VuaXRzLT5wdGxfdnBzOwotICAgIFN0ZFZpZGVvSDI2NURl Y1BpY0J1Zk1nciAgICAgICAgKmRwYm1fdnBzID0gJnZrX3VuaXRzLT5kcGJtX3ZwczsKLSAgICBT dGRWaWRlb0gyNjVIcmRQYXJhbWV0ZXJzICp2dWlfaGVhZGVyX3ZwcyA9ICZ2a191bml0cy0+dnVp X2hlYWRlcl92cHM7Ci0KLSAgICAvKiBTUFMgKi8KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IEhF VkNfTUFYX1NVQl9MQVlFUlM7IGkrKykgewotICAgICAgICBtZW1jcHkoJnNsaGRybmFsW2ldLCAm c3BzLT52dWkuaHJkX3BhcmFtZXRlcnMubmFsX3N1Yl9sYXllcl9ocmRfcGFyYW1ldGVyc1tpXSwg c2l6ZW9mKCpzbGhkcm5hbCkpOwotICAgICAgICBtZW1jcHkoJnNsaGRydmNsW2ldLCAmc3BzLT52 dWkuaHJkX3BhcmFtZXRlcnMudmNsX3N1Yl9sYXllcl9ocmRfcGFyYW1ldGVyc1tpXSwgc2l6ZW9m KCpzbGhkcnZjbCkpOwotICAgICAgICBzbGhkcm5hbFtpXS5jYnJfZmxhZyA9IDB4MDsKLSAgICAg ICAgc2xoZHJ2Y2xbaV0uY2JyX2ZsYWcgPSAweDA7Ci0gICAgICAgIGZvciAoaW50IGogPSAwOyBq IDwgSEVWQ19NQVhfQ1BCX0NOVDsgaisrKSB7Ci0gICAgICAgICAgICBzbGhkcm5hbFtpXS5jYnJf ZmxhZyB8PSBzcHMtPnZ1aS5ocmRfcGFyYW1ldGVycy5uYWxfc3ViX2xheWVyX2hyZF9wYXJhbWV0 ZXJzW2ldLmNicl9mbGFnW2pdIDw8IGk7Ci0gICAgICAgICAgICBzbGhkcnZjbFtpXS5jYnJfZmxh ZyB8PSBzcHMtPnZ1aS5ocmRfcGFyYW1ldGVycy52Y2xfc3ViX2xheWVyX2hyZF9wYXJhbWV0ZXJz W2ldLmNicl9mbGFnW2pdIDw8IGk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAqdnVpX2hlYWRl cl9zcHMgPSAoU3RkVmlkZW9IMjY1SHJkUGFyYW1ldGVycykgewotICAgICAgICAuZmxhZ3MgPSAo U3RkVmlkZW9IMjY1SHJkRmxhZ3MpIHsKLSAgICAgICAgICAgIC5uYWxfaHJkX3BhcmFtZXRlcnNf cHJlc2VudF9mbGFnID0gc3BzLT52dWkuaHJkX3BhcmFtZXRlcnMubmFsX2hyZF9wYXJhbWV0ZXJz X3ByZXNlbnRfZmxhZywKLSAgICAgICAgICAgIC52Y2xfaHJkX3BhcmFtZXRlcnNfcHJlc2VudF9m bGFnID0gc3BzLT52dWkuaHJkX3BhcmFtZXRlcnMudmNsX2hyZF9wYXJhbWV0ZXJzX3ByZXNlbnRf ZmxhZywKLSAgICAgICAgICAgIC5zdWJfcGljX2hyZF9wYXJhbXNfcHJlc2VudF9mbGFnID0gc3Bz LT52dWkuaHJkX3BhcmFtZXRlcnMuc3ViX3BpY19ocmRfcGFyYW1zX3ByZXNlbnRfZmxhZywKLSAg ICAgICAgICAgIC5zdWJfcGljX2NwYl9wYXJhbXNfaW5fcGljX3RpbWluZ19zZWlfZmxhZyA9IHNw cy0+dnVpLmhyZF9wYXJhbWV0ZXJzLnN1Yl9waWNfY3BiX3BhcmFtc19pbl9waWNfdGltaW5nX3Nl aV9mbGFnLAotICAgICAgICAgICAgLmZpeGVkX3BpY19yYXRlX2dlbmVyYWxfZmxhZyA9IDB4MCwK LSAgICAgICAgICAgIC5maXhlZF9waWNfcmF0ZV93aXRoaW5fY3ZzX2ZsYWcgPSAweDAsCi0gICAg ICAgICAgICAubG93X2RlbGF5X2hyZF9mbGFnID0gMHgwLAotICAgICAgICB9LAotICAgICAgICAu dGlja19kaXZpc29yX21pbnVzMiA9IHNwcy0+dnVpLmhyZF9wYXJhbWV0ZXJzLnRpY2tfZGl2aXNv cl9taW51czIsCi0gICAgICAgIC5kdV9jcGJfcmVtb3ZhbF9kZWxheV9pbmNyZW1lbnRfbGVuZ3Ro X21pbnVzMSA9IHNwcy0+dnVpLmhyZF9wYXJhbWV0ZXJzLmR1X2NwYl9yZW1vdmFsX2RlbGF5X2lu Y3JlbWVudF9sZW5ndGhfbWludXMxLAotICAgICAgICAuZHBiX291dHB1dF9kZWxheV9kdV9sZW5n dGhfbWludXMxID0gc3BzLT52dWkuaHJkX3BhcmFtZXRlcnMuZHBiX291dHB1dF9kZWxheV9kdV9s ZW5ndGhfbWludXMxLAotICAgICAgICAuYml0X3JhdGVfc2NhbGUgPSBzcHMtPnZ1aS5ocmRfcGFy YW1ldGVycy5iaXRfcmF0ZV9zY2FsZSwKLSAgICAgICAgLmNwYl9zaXplX3NjYWxlID0gc3BzLT52 dWkuaHJkX3BhcmFtZXRlcnMuY3BiX3NpemVfc2NhbGUsCi0gICAgICAgIC5jcGJfc2l6ZV9kdV9z Y2FsZSA9IHNwcy0+dnVpLmhyZF9wYXJhbWV0ZXJzLmNwYl9zaXplX2R1X3NjYWxlLAotICAgICAg ICAuaW5pdGlhbF9jcGJfcmVtb3ZhbF9kZWxheV9sZW5ndGhfbWludXMxID0gc3BzLT52dWkuaHJk X3BhcmFtZXRlcnMuaW5pdGlhbF9jcGJfcmVtb3ZhbF9kZWxheV9sZW5ndGhfbWludXMxLAotICAg ICAgICAuYXVfY3BiX3JlbW92YWxfZGVsYXlfbGVuZ3RoX21pbnVzMSA9IHNwcy0+dnVpLmhyZF9w YXJhbWV0ZXJzLmF1X2NwYl9yZW1vdmFsX2RlbGF5X2xlbmd0aF9taW51czEsCi0gICAgICAgIC5k cGJfb3V0cHV0X2RlbGF5X2xlbmd0aF9taW51czEgPSBzcHMtPnZ1aS5ocmRfcGFyYW1ldGVycy5k cGJfb3V0cHV0X2RlbGF5X2xlbmd0aF9taW51czEsCi0gICAgICAgIC8qIFJlc2VydmVkIC0gMyox NiBiaXRzICovCi0gICAgICAgIC5wU3ViTGF5ZXJIcmRQYXJhbWV0ZXJzTmFsID0gc2xoZHJuYWws Ci0gICAgICAgIC5wU3ViTGF5ZXJIcmRQYXJhbWV0ZXJzVmNsID0gc2xoZHJ2Y2wsCi0gICAgfTsK LQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgSEVWQ19NQVhfU1VCX0xBWUVSUzsgaSsrKSB7Ci0g ICAgICAgIHZ1aV9oZWFkZXJfc3BzLT5mbGFncy5maXhlZF9waWNfcmF0ZV9nZW5lcmFsX2ZsYWcg fD0gc3BzLT52dWkuaHJkX3BhcmFtZXRlcnMuZml4ZWRfcGljX3JhdGVfZ2VuZXJhbF9mbGFnW2ld IDw8IGk7Ci0gICAgICAgIHZ1aV9oZWFkZXJfc3BzLT5mbGFncy5maXhlZF9waWNfcmF0ZV93aXRo aW5fY3ZzX2ZsYWcgfD0gc3BzLT52dWkuaHJkX3BhcmFtZXRlcnMuZml4ZWRfcGljX3JhdGVfd2l0 aGluX2N2c19mbGFnW2ldIDw8IGk7Ci0gICAgICAgIHZ1aV9oZWFkZXJfc3BzLT5mbGFncy5sb3df ZGVsYXlfaHJkX2ZsYWcgfD0gc3BzLT52dWkuaHJkX3BhcmFtZXRlcnMubG93X2RlbGF5X2hyZF9m bGFnW2ldIDw8IGk7Ci0gICAgfQotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBTVERfVklERU9f SDI2NV9TVUJMQVlFUlNfTElTVF9TSVpFOyBpKyspIHsKLSAgICAgICAgZHBibV9zcHMtPm1heF9s YXRlbmN5X2luY3JlYXNlX3BsdXMxW2ldID0gc3BzLT5zcHNfbWF4X2xhdGVuY3lfaW5jcmVhc2Vf cGx1czFbaV07Ci0gICAgICAgIGRwYm1fc3BzLT5tYXhfZGVjX3BpY19idWZmZXJpbmdfbWludXMx W2ldID0gc3BzLT5zcHNfbWF4X2RlY19waWNfYnVmZmVyaW5nX21pbnVzMVtpXTsKLSAgICAgICAg ZHBibV9zcHMtPm1heF9udW1fcmVvcmRlcl9waWNzW2ldID0gc3BzLT5zcHNfbWF4X251bV9yZW9y ZGVyX3BpY3NbaV07Ci0gICAgfQotCi0gICAgKnB0bF9zcHMgPSAoU3RkVmlkZW9IMjY1UHJvZmls ZVRpZXJMZXZlbCkgewotICAgICAgICAuZmxhZ3MgPSAoU3RkVmlkZW9IMjY1UHJvZmlsZVRpZXJM ZXZlbEZsYWdzKSB7Ci0gICAgICAgICAgICAuZ2VuZXJhbF90aWVyX2ZsYWcgPSBzcHMtPnByb2Zp bGVfdGllcl9sZXZlbC5nZW5lcmFsX3RpZXJfZmxhZywKLSAgICAgICAgICAgIC5nZW5lcmFsX3By b2dyZXNzaXZlX3NvdXJjZV9mbGFnID0gc3BzLT5wcm9maWxlX3RpZXJfbGV2ZWwuZ2VuZXJhbF9w cm9ncmVzc2l2ZV9zb3VyY2VfZmxhZywKLSAgICAgICAgICAgIC5nZW5lcmFsX2ludGVybGFjZWRf c291cmNlX2ZsYWcgPSBzcHMtPnByb2ZpbGVfdGllcl9sZXZlbC5nZW5lcmFsX2ludGVybGFjZWRf c291cmNlX2ZsYWcsCi0gICAgICAgICAgICAuZ2VuZXJhbF9ub25fcGFja2VkX2NvbnN0cmFpbnRf ZmxhZyA9IHNwcy0+cHJvZmlsZV90aWVyX2xldmVsLmdlbmVyYWxfbm9uX3BhY2tlZF9jb25zdHJh aW50X2ZsYWcsCi0gICAgICAgICAgICAuZ2VuZXJhbF9mcmFtZV9vbmx5X2NvbnN0cmFpbnRfZmxh ZyA9IHNwcy0+cHJvZmlsZV90aWVyX2xldmVsLmdlbmVyYWxfZnJhbWVfb25seV9jb25zdHJhaW50 X2ZsYWcsCi0gICAgICAgIH0sCi0gICAgICAgIC5nZW5lcmFsX3Byb2ZpbGVfaWRjID0gZmZfdmtf aDI2NV9wcm9maWxlX3RvX3ZrKHNwcy0+cHJvZmlsZV90aWVyX2xldmVsLmdlbmVyYWxfcHJvZmls ZV9pZGMpLAotICAgICAgICAuZ2VuZXJhbF9sZXZlbF9pZGMgPSBmZl92a19oMjY1X2xldmVsX3Rv X3ZrKHNwcy0+cHJvZmlsZV90aWVyX2xldmVsLmdlbmVyYWxfbGV2ZWxfaWRjKSwKLSAgICB9Owot Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBTVERfVklERU9fSDI2NV9NQVhfU0hPUlRfVEVSTV9S RUZfUElDX1NFVFM7IGkrKykgewotICAgICAgICBjb25zdCBIMjY1UmF3U1RSZWZQaWNTZXQgKnN0 X3JwcyA9ICZzcHMtPnN0X3JlZl9waWNfc2V0W2ldOwotCi0gICAgICAgIHN0cltpXSA9IChTdGRW aWRlb0gyNjVTaG9ydFRlcm1SZWZQaWNTZXQpIHsKLSAgICAgICAgICAgIC5mbGFncyA9IChTdGRW aWRlb0gyNjVTaG9ydFRlcm1SZWZQaWNTZXRGbGFncykgewotICAgICAgICAgICAgICAgIC5pbnRl cl9yZWZfcGljX3NldF9wcmVkaWN0aW9uX2ZsYWcgPSBzdF9ycHMtPmludGVyX3JlZl9waWNfc2V0 X3ByZWRpY3Rpb25fZmxhZywKLSAgICAgICAgICAgICAgICAuZGVsdGFfcnBzX3NpZ24gPSBzdF9y cHMtPmRlbHRhX3Jwc19zaWduLAotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIC5kZWx0YV9p ZHhfbWludXMxID0gc3RfcnBzLT5kZWx0YV9pZHhfbWludXMxLAotICAgICAgICAgICAgLnVzZV9k ZWx0YV9mbGFnID0gMHgwLAotICAgICAgICAgICAgLmFic19kZWx0YV9ycHNfbWludXMxID0gc3Rf cnBzLT5hYnNfZGVsdGFfcnBzX21pbnVzMSwKLSAgICAgICAgICAgIC51c2VkX2J5X2N1cnJfcGlj X2ZsYWcgICAgPSAweDAsCi0gICAgICAgICAgICAudXNlZF9ieV9jdXJyX3BpY19zMF9mbGFnID0g MHgwLAotICAgICAgICAgICAgLnVzZWRfYnlfY3Vycl9waWNfczFfZmxhZyA9IDB4MCwKLSAgICAg ICAgICAgIC8qIFJlc2VydmVkICovCi0gICAgICAgICAgICAvKiBSZXNlcnZlZCAqLwotICAgICAg ICAgICAgLyogUmVzZXJ2ZWQgKi8KLSAgICAgICAgICAgIC5udW1fbmVnYXRpdmVfcGljcyA9IHN0 X3Jwcy0+bnVtX25lZ2F0aXZlX3BpY3MsCi0gICAgICAgICAgICAubnVtX3Bvc2l0aXZlX3BpY3Mg PSBzdF9ycHMtPm51bV9wb3NpdGl2ZV9waWNzLAotICAgICAgICB9OwotCi0gICAgICAgIGZvciAo aW50IGogPSAwOyBqIDwgSEVWQ19NQVhfUkVGUzsgaisrKSB7Ci0gICAgICAgICAgICBzdHJbaV0u dXNlX2RlbHRhX2ZsYWcgfD0gc3RfcnBzLT51c2VfZGVsdGFfZmxhZ1tqXSA8PCBpOwotICAgICAg ICAgICAgc3RyW2ldLnVzZWRfYnlfY3Vycl9waWNfZmxhZyB8PSBzdF9ycHMtPnVzZWRfYnlfY3Vy cl9waWNfZmxhZ1tqXSA8PCBpOwotICAgICAgICAgICAgc3RyW2ldLnVzZWRfYnlfY3Vycl9waWNf czBfZmxhZyB8PSBzdF9ycHMtPnVzZWRfYnlfY3Vycl9waWNfczBfZmxhZ1tqXSA8PCBpOwotICAg ICAgICAgICAgc3RyW2ldLnVzZWRfYnlfY3Vycl9waWNfczFfZmxhZyB8PSBzdF9ycHMtPnVzZWRf YnlfY3Vycl9waWNfczFfZmxhZ1tqXSA8PCBpOwotICAgICAgICAgICAgc3RyW2ldLmRlbHRhX3Bv Y19zMF9taW51czFbal0gPSBzdF9ycHMtPmRlbHRhX3BvY19zMF9taW51czFbal07Ci0gICAgICAg ICAgICBzdHJbaV0uZGVsdGFfcG9jX3MxX21pbnVzMVtqXSA9IHN0X3Jwcy0+ZGVsdGFfcG9jX3Mx X21pbnVzMVtqXTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGx0ci0+dXNlZF9ieV9jdXJyX3Bp Y19sdF9zcHNfZmxhZyA9IDA7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBTVERfVklERU9fSDI2 NV9NQVhfTE9OR19URVJNX1JFRl9QSUNTX1NQUzsgaSsrKSB7Ci0gICAgICAgIGx0ci0+dXNlZF9i eV9jdXJyX3BpY19sdF9zcHNfZmxhZyB8PSBzcHMtPmx0X3JlZl9waWNfcG9jX2xzYl9zcHNbaV0g PDwgaTsKLSAgICAgICAgbHRyLT5sdF9yZWZfcGljX3BvY19sc2Jfc3BzW2ldID0gc3BzLT5sdF9y ZWZfcGljX3BvY19sc2Jfc3BzW2ldOwotICAgIH0KLQotICAgICp2a3NwcyA9IChTdGRWaWRlb0gy NjVTZXF1ZW5jZVBhcmFtZXRlclNldCkgewotICAgICAgICAuZmxhZ3MgPSAoU3RkVmlkZW9IMjY1 U3BzRmxhZ3MpIHsKLSAgICAgICAgICAgIC5zcHNfdGVtcG9yYWxfaWRfbmVzdGluZ19mbGFnID0g c3BzLT5zcHNfdGVtcG9yYWxfaWRfbmVzdGluZ19mbGFnLAotICAgICAgICAgICAgLnNlcGFyYXRl X2NvbG91cl9wbGFuZV9mbGFnID0gc3BzLT5zZXBhcmF0ZV9jb2xvdXJfcGxhbmVfZmxhZywKLSAg ICAgICAgICAgIC5jb25mb3JtYW5jZV93aW5kb3dfZmxhZyA9IHNwcy0+Y29uZm9ybWFuY2Vfd2lu ZG93X2ZsYWcsCi0gICAgICAgICAgICAuc3BzX3N1Yl9sYXllcl9vcmRlcmluZ19pbmZvX3ByZXNl bnRfZmxhZyA9IHNwcy0+c3BzX3N1Yl9sYXllcl9vcmRlcmluZ19pbmZvX3ByZXNlbnRfZmxhZywK LSAgICAgICAgICAgIC5zY2FsaW5nX2xpc3RfZW5hYmxlZF9mbGFnID0gc3BzLT5zY2FsaW5nX2xp c3RfZW5hYmxlZF9mbGFnLAotICAgICAgICAgICAgLnNwc19zY2FsaW5nX2xpc3RfZGF0YV9wcmVz ZW50X2ZsYWcgPSBzcHMtPnNwc19zY2FsaW5nX2xpc3RfZGF0YV9wcmVzZW50X2ZsYWcsCi0gICAg ICAgICAgICAuYW1wX2VuYWJsZWRfZmxhZyA9IHNwcy0+YW1wX2VuYWJsZWRfZmxhZywKLSAgICAg ICAgICAgIC5zYW1wbGVfYWRhcHRpdmVfb2Zmc2V0X2VuYWJsZWRfZmxhZyA9IHNwcy0+c2FtcGxl X2FkYXB0aXZlX29mZnNldF9lbmFibGVkX2ZsYWcsCi0gICAgICAgICAgICAucGNtX2VuYWJsZWRf ZmxhZyA9IHNwcy0+cGNtX2VuYWJsZWRfZmxhZywKLSAgICAgICAgICAgIC5wY21fbG9vcF9maWx0 ZXJfZGlzYWJsZWRfZmxhZyA9IHNwcy0+cGNtX2xvb3BfZmlsdGVyX2Rpc2FibGVkX2ZsYWcsCi0g ICAgICAgICAgICAubG9uZ190ZXJtX3JlZl9waWNzX3ByZXNlbnRfZmxhZyA9IHNwcy0+bG9uZ190 ZXJtX3JlZl9waWNzX3ByZXNlbnRfZmxhZywKLSAgICAgICAgICAgIC5zcHNfdGVtcG9yYWxfbXZw X2VuYWJsZWRfZmxhZyA9IHNwcy0+c3BzX3RlbXBvcmFsX212cF9lbmFibGVkX2ZsYWcsCi0gICAg ICAgICAgICAuc3Ryb25nX2ludHJhX3Ntb290aGluZ19lbmFibGVkX2ZsYWcgPSBzcHMtPnN0cm9u Z19pbnRyYV9zbW9vdGhpbmdfZW5hYmxlZF9mbGFnLAotICAgICAgICAgICAgLnZ1aV9wYXJhbWV0 ZXJzX3ByZXNlbnRfZmxhZyA9IHNwcy0+dnVpX3BhcmFtZXRlcnNfcHJlc2VudF9mbGFnLAotICAg ICAgICAgICAgLnNwc19leHRlbnNpb25fcHJlc2VudF9mbGFnID0gc3BzLT5zcHNfZXh0ZW5zaW9u X3ByZXNlbnRfZmxhZywKLSAgICAgICAgICAgIC5zcHNfcmFuZ2VfZXh0ZW5zaW9uX2ZsYWcgPSBz cHMtPnNwc19yYW5nZV9leHRlbnNpb25fZmxhZywKLSAgICAgICAgICAgIC50cmFuc2Zvcm1fc2tp cF9yb3RhdGlvbl9lbmFibGVkX2ZsYWcgPSBzcHMtPnRyYW5zZm9ybV9za2lwX3JvdGF0aW9uX2Vu YWJsZWRfZmxhZywKLSAgICAgICAgICAgIC50cmFuc2Zvcm1fc2tpcF9jb250ZXh0X2VuYWJsZWRf ZmxhZyA9IHNwcy0+dHJhbnNmb3JtX3NraXBfY29udGV4dF9lbmFibGVkX2ZsYWcsCi0gICAgICAg ICAgICAuaW1wbGljaXRfcmRwY21fZW5hYmxlZF9mbGFnID0gc3BzLT5pbXBsaWNpdF9yZHBjbV9l bmFibGVkX2ZsYWcsCi0gICAgICAgICAgICAuZXhwbGljaXRfcmRwY21fZW5hYmxlZF9mbGFnID0g c3BzLT5leHBsaWNpdF9yZHBjbV9lbmFibGVkX2ZsYWcsCi0gICAgICAgICAgICAuZXh0ZW5kZWRf cHJlY2lzaW9uX3Byb2Nlc3NpbmdfZmxhZyA9IHNwcy0+ZXh0ZW5kZWRfcHJlY2lzaW9uX3Byb2Nl c3NpbmdfZmxhZywKLSAgICAgICAgICAgIC5pbnRyYV9zbW9vdGhpbmdfZGlzYWJsZWRfZmxhZyA9 IHNwcy0+aW50cmFfc21vb3RoaW5nX2Rpc2FibGVkX2ZsYWcsCi0gICAgICAgICAgICAuaGlnaF9w cmVjaXNpb25fb2Zmc2V0c19lbmFibGVkX2ZsYWcgPSBzcHMtPmhpZ2hfcHJlY2lzaW9uX29mZnNl dHNfZW5hYmxlZF9mbGFnLAotICAgICAgICAgICAgLnBlcnNpc3RlbnRfcmljZV9hZGFwdGF0aW9u X2VuYWJsZWRfZmxhZyA9IHNwcy0+cGVyc2lzdGVudF9yaWNlX2FkYXB0YXRpb25fZW5hYmxlZF9m bGFnLAotICAgICAgICAgICAgLmNhYmFjX2J5cGFzc19hbGlnbm1lbnRfZW5hYmxlZF9mbGFnID0g c3BzLT5jYWJhY19ieXBhc3NfYWxpZ25tZW50X2VuYWJsZWRfZmxhZywKLSAgICAgICAgICAgIC5z cHNfc2NjX2V4dGVuc2lvbl9mbGFnID0gc3BzLT5zcHNfc2NjX2V4dGVuc2lvbl9mbGFnLAotICAg ICAgICAgICAgLnNwc19jdXJyX3BpY19yZWZfZW5hYmxlZF9mbGFnID0gc3BzLT5zcHNfY3Vycl9w aWNfcmVmX2VuYWJsZWRfZmxhZywKLSAgICAgICAgICAgIC5wYWxldHRlX21vZGVfZW5hYmxlZF9m bGFnID0gc3BzLT5wYWxldHRlX21vZGVfZW5hYmxlZF9mbGFnLAotICAgICAgICAgICAgLnNwc19w YWxldHRlX3ByZWRpY3Rvcl9pbml0aWFsaXplcnNfcHJlc2VudF9mbGFnID0gc3BzLT5zcHNfcGFs ZXR0ZV9wcmVkaWN0b3JfaW5pdGlhbGl6ZXJfcHJlc2VudF9mbGFnLAotICAgICAgICAgICAgLmlu dHJhX2JvdW5kYXJ5X2ZpbHRlcmluZ19kaXNhYmxlZF9mbGFnID0gc3BzLT5pbnRyYV9ib3VuZGFy eV9maWx0ZXJpbmdfZGlzYWJsZV9mbGFnLAotICAgICAgICB9LAotICAgICAgICAuY2hyb21hX2Zv cm1hdF9pZGMgPSBzcHMtPmNocm9tYV9mb3JtYXRfaWRjLAotICAgICAgICAucGljX3dpZHRoX2lu X2x1bWFfc2FtcGxlcyA9IHNwcy0+cGljX3dpZHRoX2luX2x1bWFfc2FtcGxlcywKLSAgICAgICAg LnBpY19oZWlnaHRfaW5fbHVtYV9zYW1wbGVzID0gc3BzLT5waWNfaGVpZ2h0X2luX2x1bWFfc2Ft cGxlcywKLSAgICAgICAgLnNwc192aWRlb19wYXJhbWV0ZXJfc2V0X2lkID0gc3BzLT5zcHNfdmlk ZW9fcGFyYW1ldGVyX3NldF9pZCwKLSAgICAgICAgLnNwc19tYXhfc3ViX2xheWVyc19taW51czEg PSBzcHMtPnNwc19tYXhfc3ViX2xheWVyc19taW51czEsCi0gICAgICAgIC5zcHNfc2VxX3BhcmFt ZXRlcl9zZXRfaWQgPSBzcHMtPnNwc19zZXFfcGFyYW1ldGVyX3NldF9pZCwKLSAgICAgICAgLmJp dF9kZXB0aF9sdW1hX21pbnVzOCA9IHNwcy0+Yml0X2RlcHRoX2x1bWFfbWludXM4LAotICAgICAg ICAuYml0X2RlcHRoX2Nocm9tYV9taW51czggPSBzcHMtPmJpdF9kZXB0aF9jaHJvbWFfbWludXM4 LAotICAgICAgICAubG9nMl9tYXhfcGljX29yZGVyX2NudF9sc2JfbWludXM0ID0gc3BzLT5sb2cy X21heF9waWNfb3JkZXJfY250X2xzYl9taW51czQsCi0gICAgICAgIC5sb2cyX21pbl9sdW1hX2Nv ZGluZ19ibG9ja19zaXplX21pbnVzMyA9IHNwcy0+bG9nMl9taW5fbHVtYV9jb2RpbmdfYmxvY2tf c2l6ZV9taW51czMsCi0gICAgICAgIC5sb2cyX2RpZmZfbWF4X21pbl9sdW1hX2NvZGluZ19ibG9j a19zaXplID0gc3BzLT5sb2cyX2RpZmZfbWF4X21pbl9sdW1hX2NvZGluZ19ibG9ja19zaXplLAot ICAgICAgICAubG9nMl9taW5fbHVtYV90cmFuc2Zvcm1fYmxvY2tfc2l6ZV9taW51czIgPSBzcHMt PmxvZzJfbWluX2x1bWFfdHJhbnNmb3JtX2Jsb2NrX3NpemVfbWludXMyLAotICAgICAgICAubG9n Ml9kaWZmX21heF9taW5fbHVtYV90cmFuc2Zvcm1fYmxvY2tfc2l6ZSA9IHNwcy0+bG9nMl9kaWZm X21heF9taW5fbHVtYV90cmFuc2Zvcm1fYmxvY2tfc2l6ZSwKLSAgICAgICAgLm1heF90cmFuc2Zv cm1faGllcmFyY2h5X2RlcHRoX2ludGVyID0gc3BzLT5tYXhfdHJhbnNmb3JtX2hpZXJhcmNoeV9k ZXB0aF9pbnRlciwKLSAgICAgICAgLm1heF90cmFuc2Zvcm1faGllcmFyY2h5X2RlcHRoX2ludHJh ID0gc3BzLT5tYXhfdHJhbnNmb3JtX2hpZXJhcmNoeV9kZXB0aF9pbnRyYSwKLSAgICAgICAgLm51 bV9zaG9ydF90ZXJtX3JlZl9waWNfc2V0cyA9IHNwcy0+bnVtX3Nob3J0X3Rlcm1fcmVmX3BpY19z ZXRzLAotICAgICAgICAubnVtX2xvbmdfdGVybV9yZWZfcGljc19zcHMgPSBzcHMtPm51bV9sb25n X3Rlcm1fcmVmX3BpY3Nfc3BzLAotICAgICAgICAucGNtX3NhbXBsZV9iaXRfZGVwdGhfbHVtYV9t aW51czEgPSBzcHMtPnBjbV9zYW1wbGVfYml0X2RlcHRoX2x1bWFfbWludXMxLAotICAgICAgICAu cGNtX3NhbXBsZV9iaXRfZGVwdGhfY2hyb21hX21pbnVzMSA9IHNwcy0+cGNtX3NhbXBsZV9iaXRf ZGVwdGhfY2hyb21hX21pbnVzMSwKLSAgICAgICAgLmxvZzJfbWluX3BjbV9sdW1hX2NvZGluZ19i bG9ja19zaXplX21pbnVzMyA9IHNwcy0+bG9nMl9taW5fcGNtX2x1bWFfY29kaW5nX2Jsb2NrX3Np emVfbWludXMzLAotICAgICAgICAubG9nMl9kaWZmX21heF9taW5fcGNtX2x1bWFfY29kaW5nX2Js b2NrX3NpemUgPSBzcHMtPmxvZzJfZGlmZl9tYXhfbWluX3BjbV9sdW1hX2NvZGluZ19ibG9ja19z aXplLAotICAgICAgICAvKiBSZXNlcnZlZCAqLwotICAgICAgICAvKiBSZXNlcnZlZCAqLwotICAg ICAgICAucGFsZXR0ZV9tYXhfc2l6ZSA9IHNwcy0+cGFsZXR0ZV9tYXhfc2l6ZSwKLSAgICAgICAg LmRlbHRhX3BhbGV0dGVfbWF4X3ByZWRpY3Rvcl9zaXplID0gc3BzLT5kZWx0YV9wYWxldHRlX21h eF9wcmVkaWN0b3Jfc2l6ZSwKLSAgICAgICAgLm1vdGlvbl92ZWN0b3JfcmVzb2x1dGlvbl9jb250 cm9sX2lkYyA9IHNwcy0+bW90aW9uX3ZlY3Rvcl9yZXNvbHV0aW9uX2NvbnRyb2xfaWRjLAotICAg ICAgICAuc3BzX251bV9wYWxldHRlX3ByZWRpY3Rvcl9pbml0aWFsaXplcnNfbWludXMxID0gc3Bz LT5zcHNfbnVtX3BhbGV0dGVfcHJlZGljdG9yX2luaXRpYWxpemVyX21pbnVzMSwKLSAgICAgICAg LmNvbmZfd2luX2xlZnRfb2Zmc2V0ID0gc3BzLT5jb25mX3dpbl9sZWZ0X29mZnNldCwKLSAgICAg ICAgLmNvbmZfd2luX3JpZ2h0X29mZnNldCA9IHNwcy0+Y29uZl93aW5fcmlnaHRfb2Zmc2V0LAot ICAgICAgICAuY29uZl93aW5fdG9wX29mZnNldCA9IHNwcy0+Y29uZl93aW5fdG9wX29mZnNldCwK LSAgICAgICAgLmNvbmZfd2luX2JvdHRvbV9vZmZzZXQgPSBzcHMtPmNvbmZfd2luX2JvdHRvbV9v ZmZzZXQsCi0gICAgICAgIC5wUHJvZmlsZVRpZXJMZXZlbCA9IHB0bF9zcHMsCi0gICAgICAgIC5w RGVjUGljQnVmTWdyID0gZHBibV9zcHMsCi0gICAgICAgIC5wU2NhbGluZ0xpc3RzID0gTlVMTCwK LSAgICAgICAgLnBTaG9ydFRlcm1SZWZQaWNTZXQgPSBzdHIsCi0gICAgICAgIC5wTG9uZ1Rlcm1S ZWZQaWNzU3BzID0gbHRyLAotICAgICAgICAucFNlcXVlbmNlUGFyYW1ldGVyU2V0VnVpID0gdnVp X3NwcywKLSAgICAgICAgLnBQcmVkaWN0b3JQYWxldHRlRW50cmllcyA9IE5VTEwsCi0gICAgfTsK LQotICAgIC8qIFBQUyAqLwotICAgICp2a3BwcyA9IChTdGRWaWRlb0gyNjVQaWN0dXJlUGFyYW1l dGVyU2V0KSB7Ci0gICAgICAgIC5mbGFncyA9IChTdGRWaWRlb0gyNjVQcHNGbGFncykgewotICAg ICAgICAgICAgLmRlcGVuZGVudF9zbGljZV9zZWdtZW50c19lbmFibGVkX2ZsYWcgPSBwcHMtPmRl cGVuZGVudF9zbGljZV9zZWdtZW50c19lbmFibGVkX2ZsYWcsCi0gICAgICAgICAgICAub3V0cHV0 X2ZsYWdfcHJlc2VudF9mbGFnID0gcHBzLT5vdXRwdXRfZmxhZ19wcmVzZW50X2ZsYWcsCi0gICAg ICAgICAgICAuc2lnbl9kYXRhX2hpZGluZ19lbmFibGVkX2ZsYWcgPSBwcHMtPnNpZ25fZGF0YV9o aWRpbmdfZW5hYmxlZF9mbGFnLAotICAgICAgICAgICAgLmNhYmFjX2luaXRfcHJlc2VudF9mbGFn ID0gcHBzLT5jYWJhY19pbml0X3ByZXNlbnRfZmxhZywKLSAgICAgICAgICAgIC5jb25zdHJhaW5l ZF9pbnRyYV9wcmVkX2ZsYWcgPSBwcHMtPmNvbnN0cmFpbmVkX2ludHJhX3ByZWRfZmxhZywKLSAg ICAgICAgICAgIC50cmFuc2Zvcm1fc2tpcF9lbmFibGVkX2ZsYWcgPSBwcHMtPnRyYW5zZm9ybV9z a2lwX2VuYWJsZWRfZmxhZywKLSAgICAgICAgICAgIC5jdV9xcF9kZWx0YV9lbmFibGVkX2ZsYWcg PSBwcHMtPmN1X3FwX2RlbHRhX2VuYWJsZWRfZmxhZywKLSAgICAgICAgICAgIC5wcHNfc2xpY2Vf Y2hyb21hX3FwX29mZnNldHNfcHJlc2VudF9mbGFnID0gcHBzLT5wcHNfc2xpY2VfY2hyb21hX3Fw X29mZnNldHNfcHJlc2VudF9mbGFnLAotICAgICAgICAgICAgLndlaWdodGVkX3ByZWRfZmxhZyA9 IHBwcy0+d2VpZ2h0ZWRfcHJlZF9mbGFnLAotICAgICAgICAgICAgLndlaWdodGVkX2JpcHJlZF9m bGFnID0gcHBzLT53ZWlnaHRlZF9iaXByZWRfZmxhZywKLSAgICAgICAgICAgIC50cmFuc3F1YW50 X2J5cGFzc19lbmFibGVkX2ZsYWcgPSBwcHMtPnRyYW5zcXVhbnRfYnlwYXNzX2VuYWJsZWRfZmxh ZywKLSAgICAgICAgICAgIC50aWxlc19lbmFibGVkX2ZsYWcgPSBwcHMtPnRpbGVzX2VuYWJsZWRf ZmxhZywKLSAgICAgICAgICAgIC5lbnRyb3B5X2NvZGluZ19zeW5jX2VuYWJsZWRfZmxhZyA9IHBw cy0+ZW50cm9weV9jb2Rpbmdfc3luY19lbmFibGVkX2ZsYWcsCi0gICAgICAgICAgICAudW5pZm9y bV9zcGFjaW5nX2ZsYWcgPSBwcHMtPnVuaWZvcm1fc3BhY2luZ19mbGFnLAotICAgICAgICAgICAg Lmxvb3BfZmlsdGVyX2Fjcm9zc190aWxlc19lbmFibGVkX2ZsYWcgPSBwcHMtPmxvb3BfZmlsdGVy X2Fjcm9zc190aWxlc19lbmFibGVkX2ZsYWcsCi0gICAgICAgICAgICAucHBzX2xvb3BfZmlsdGVy X2Fjcm9zc19zbGljZXNfZW5hYmxlZF9mbGFnID0gcHBzLT5wcHNfbG9vcF9maWx0ZXJfYWNyb3Nz X3NsaWNlc19lbmFibGVkX2ZsYWcsCi0gICAgICAgICAgICAuZGVibG9ja2luZ19maWx0ZXJfY29u dHJvbF9wcmVzZW50X2ZsYWcgPSBwcHMtPmRlYmxvY2tpbmdfZmlsdGVyX2NvbnRyb2xfcHJlc2Vu dF9mbGFnLAotICAgICAgICAgICAgLmRlYmxvY2tpbmdfZmlsdGVyX292ZXJyaWRlX2VuYWJsZWRf ZmxhZyA9IHBwcy0+ZGVibG9ja2luZ19maWx0ZXJfb3ZlcnJpZGVfZW5hYmxlZF9mbGFnLAotICAg ICAgICAgICAgLnBwc19kZWJsb2NraW5nX2ZpbHRlcl9kaXNhYmxlZF9mbGFnID0gcHBzLT5wcHNf ZGVibG9ja2luZ19maWx0ZXJfZGlzYWJsZWRfZmxhZywKLSAgICAgICAgICAgIC5wcHNfc2NhbGlu Z19saXN0X2RhdGFfcHJlc2VudF9mbGFnID0gcHBzLT5wcHNfc2NhbGluZ19saXN0X2RhdGFfcHJl c2VudF9mbGFnLAotICAgICAgICAgICAgLmxpc3RzX21vZGlmaWNhdGlvbl9wcmVzZW50X2ZsYWcg PSBwcHMtPmxpc3RzX21vZGlmaWNhdGlvbl9wcmVzZW50X2ZsYWcsCi0gICAgICAgICAgICAuc2xp Y2Vfc2VnbWVudF9oZWFkZXJfZXh0ZW5zaW9uX3ByZXNlbnRfZmxhZyA9IHBwcy0+c2xpY2Vfc2Vn bWVudF9oZWFkZXJfZXh0ZW5zaW9uX3ByZXNlbnRfZmxhZywKLSAgICAgICAgICAgIC5wcHNfZXh0 ZW5zaW9uX3ByZXNlbnRfZmxhZyA9IHBwcy0+cHBzX2V4dGVuc2lvbl9wcmVzZW50X2ZsYWcsCi0g ICAgICAgICAgICAuY3Jvc3NfY29tcG9uZW50X3ByZWRpY3Rpb25fZW5hYmxlZF9mbGFnID0gcHBz LT5jcm9zc19jb21wb25lbnRfcHJlZGljdGlvbl9lbmFibGVkX2ZsYWcsCi0gICAgICAgICAgICAu Y2hyb21hX3FwX29mZnNldF9saXN0X2VuYWJsZWRfZmxhZyA9IHBwcy0+Y2hyb21hX3FwX29mZnNl dF9saXN0X2VuYWJsZWRfZmxhZywKLSAgICAgICAgICAgIC5wcHNfY3Vycl9waWNfcmVmX2VuYWJs ZWRfZmxhZyA9IHBwcy0+cHBzX2N1cnJfcGljX3JlZl9lbmFibGVkX2ZsYWcsCi0gICAgICAgICAg ICAucmVzaWR1YWxfYWRhcHRpdmVfY29sb3VyX3RyYW5zZm9ybV9lbmFibGVkX2ZsYWcgPSBwcHMt PnJlc2lkdWFsX2FkYXB0aXZlX2NvbG91cl90cmFuc2Zvcm1fZW5hYmxlZF9mbGFnLAotICAgICAg ICAgICAgLnBwc19zbGljZV9hY3RfcXBfb2Zmc2V0c19wcmVzZW50X2ZsYWcgPSBwcHMtPnBwc19z bGljZV9hY3RfcXBfb2Zmc2V0c19wcmVzZW50X2ZsYWcsCi0gICAgICAgICAgICAucHBzX3BhbGV0 dGVfcHJlZGljdG9yX2luaXRpYWxpemVyc19wcmVzZW50X2ZsYWcgPSBwcHMtPnBwc19wYWxldHRl X3ByZWRpY3Rvcl9pbml0aWFsaXplcl9wcmVzZW50X2ZsYWcsCi0gICAgICAgICAgICAubW9ub2No cm9tZV9wYWxldHRlX2ZsYWcgPSBwcHMtPm1vbm9jaHJvbWVfcGFsZXR0ZV9mbGFnLAotICAgICAg ICAgICAgLnBwc19yYW5nZV9leHRlbnNpb25fZmxhZyA9IHBwcy0+cHBzX3JhbmdlX2V4dGVuc2lv bl9mbGFnLAotICAgICAgICB9LAotICAgICAgICAucHBzX3BpY19wYXJhbWV0ZXJfc2V0X2lkID0g cHBzLT5wcHNfcGljX3BhcmFtZXRlcl9zZXRfaWQsCi0gICAgICAgIC5wcHNfc2VxX3BhcmFtZXRl cl9zZXRfaWQgPSBwcHMtPnBwc19zZXFfcGFyYW1ldGVyX3NldF9pZCwKLSAgICAgICAgLnNwc192 aWRlb19wYXJhbWV0ZXJfc2V0X2lkID0gc3BzLT5zcHNfdmlkZW9fcGFyYW1ldGVyX3NldF9pZCwK LSAgICAgICAgLm51bV9leHRyYV9zbGljZV9oZWFkZXJfYml0cyA9IHBwcy0+bnVtX2V4dHJhX3Ns aWNlX2hlYWRlcl9iaXRzLAotICAgICAgICAubnVtX3JlZl9pZHhfbDBfZGVmYXVsdF9hY3RpdmVf bWludXMxID0gcHBzLT5udW1fcmVmX2lkeF9sMF9kZWZhdWx0X2FjdGl2ZV9taW51czEsCi0gICAg ICAgIC5udW1fcmVmX2lkeF9sMV9kZWZhdWx0X2FjdGl2ZV9taW51czEgPSBwcHMtPm51bV9yZWZf aWR4X2wxX2RlZmF1bHRfYWN0aXZlX21pbnVzMSwKLSAgICAgICAgLmluaXRfcXBfbWludXMyNiA9 IHBwcy0+aW5pdF9xcF9taW51czI2LAotICAgICAgICAuZGlmZl9jdV9xcF9kZWx0YV9kZXB0aCA9 IHBwcy0+ZGlmZl9jdV9xcF9kZWx0YV9kZXB0aCwKLSAgICAgICAgLnBwc19jYl9xcF9vZmZzZXQg PSBwcHMtPnBwc19jYl9xcF9vZmZzZXQsCi0gICAgICAgIC5wcHNfY3JfcXBfb2Zmc2V0ID0gcHBz LT5wcHNfY3JfcXBfb2Zmc2V0LAotICAgICAgICAucHBzX2JldGFfb2Zmc2V0X2RpdjIgPSBwcHMt PnBwc19iZXRhX29mZnNldF9kaXYyLAotICAgICAgICAucHBzX3RjX29mZnNldF9kaXYyID0gcHBz LT5wcHNfdGNfb2Zmc2V0X2RpdjIsCi0gICAgICAgIC5sb2cyX3BhcmFsbGVsX21lcmdlX2xldmVs X21pbnVzMiA9IHBwcy0+bG9nMl9wYXJhbGxlbF9tZXJnZV9sZXZlbF9taW51czIsCi0gICAgICAg IC5sb2cyX21heF90cmFuc2Zvcm1fc2tpcF9ibG9ja19zaXplX21pbnVzMiA9IHBwcy0+bG9nMl9t YXhfdHJhbnNmb3JtX3NraXBfYmxvY2tfc2l6ZV9taW51czIsCi0gICAgICAgIC5kaWZmX2N1X2No cm9tYV9xcF9vZmZzZXRfZGVwdGggPSBwcHMtPmRpZmZfY3VfY2hyb21hX3FwX29mZnNldF9kZXB0 aCwKLSAgICAgICAgLmNocm9tYV9xcF9vZmZzZXRfbGlzdF9sZW5fbWludXMxID0gcHBzLT5jaHJv bWFfcXBfb2Zmc2V0X2xpc3RfbGVuX21pbnVzMSwKLSAgICAgICAgLmxvZzJfc2FvX29mZnNldF9z Y2FsZV9sdW1hID0gcHBzLT5sb2cyX3Nhb19vZmZzZXRfc2NhbGVfbHVtYSwKLSAgICAgICAgLmxv ZzJfc2FvX29mZnNldF9zY2FsZV9jaHJvbWEgPSBwcHMtPmxvZzJfc2FvX29mZnNldF9zY2FsZV9j aHJvbWEsCi0gICAgICAgIC5wcHNfYWN0X3lfcXBfb2Zmc2V0X3BsdXM1ID0gcHBzLT5wcHNfYWN0 X3lfcXBfb2Zmc2V0X3BsdXM1LAotICAgICAgICAucHBzX2FjdF9jYl9xcF9vZmZzZXRfcGx1czUg PSBwcHMtPnBwc19hY3RfY2JfcXBfb2Zmc2V0X3BsdXM1LAotICAgICAgICAucHBzX2FjdF9jcl9x cF9vZmZzZXRfcGx1czMgPSBwcHMtPnBwc19hY3RfY3JfcXBfb2Zmc2V0X3BsdXMzLAotICAgICAg ICAucHBzX251bV9wYWxldHRlX3ByZWRpY3Rvcl9pbml0aWFsaXplcnMgPSBwcHMtPnBwc19udW1f cGFsZXR0ZV9wcmVkaWN0b3JfaW5pdGlhbGl6ZXIsCi0gICAgICAgIC5sdW1hX2JpdF9kZXB0aF9l bnRyeV9taW51czggPSBwcHMtPmx1bWFfYml0X2RlcHRoX2VudHJ5X21pbnVzOCwKLSAgICAgICAg LmNocm9tYV9iaXRfZGVwdGhfZW50cnlfbWludXM4ID0gcHBzLT5jaHJvbWFfYml0X2RlcHRoX2Vu dHJ5X21pbnVzOCwKLSAgICAgICAgLm51bV90aWxlX2NvbHVtbnNfbWludXMxID0gcHBzLT5udW1f dGlsZV9jb2x1bW5zX21pbnVzMSwKLSAgICAgICAgLm51bV90aWxlX3Jvd3NfbWludXMxID0gcHBz LT5udW1fdGlsZV9yb3dzX21pbnVzMSwKLSAgICAgICAgLnBTY2FsaW5nTGlzdHMgPSBOVUxMLAot ICAgICAgICAucFByZWRpY3RvclBhbGV0dGVFbnRyaWVzID0gTlVMTCwKLSAgICB9OwotCi0gICAg Zm9yIChpbnQgaSA9IDA7IGkgPCBwcHMtPm51bV90aWxlX2NvbHVtbnNfbWludXMxOyBpKyspCi0g ICAgICAgIHZrcHBzLT5jb2x1bW5fd2lkdGhfbWludXMxW2ldID0gcHBzLT5jb2x1bW5fd2lkdGhf bWludXMxW2ldOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwcHMtPm51bV90aWxlX3Jvd3Nf bWludXMxOyBpKyspCi0gICAgICAgIHZrcHBzLT5yb3dfaGVpZ2h0X21pbnVzMVtpXSA9IHBwcy0+ cm93X2hlaWdodF9taW51czFbaV07Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8PSBwcHMtPmNo cm9tYV9xcF9vZmZzZXRfbGlzdF9sZW5fbWludXMxOyBpKyspIHsKLSAgICAgICAgdmtwcHMtPmNi X3FwX29mZnNldF9saXN0W2ldID0gcHBzLT5jYl9xcF9vZmZzZXRfbGlzdFtpXTsKLSAgICAgICAg dmtwcHMtPmNyX3FwX29mZnNldF9saXN0W2ldID0gcHBzLT5jcl9xcF9vZmZzZXRfbGlzdFtpXTsK LSAgICB9Ci0KLSAgICAvKiBWUFMgKi8KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IFNURF9WSURF T19IMjY1X1NVQkxBWUVSU19MSVNUX1NJWkU7IGkrKykgewotICAgICAgICBkcGJtX3Zwcy0+bWF4 X2xhdGVuY3lfaW5jcmVhc2VfcGx1czFbaV0gPSB2cHMtPnZwc19tYXhfbGF0ZW5jeV9pbmNyZWFz ZV9wbHVzMVtpXTsKLSAgICAgICAgZHBibV92cHMtPm1heF9kZWNfcGljX2J1ZmZlcmluZ19taW51 czFbaV0gPSB2cHMtPnZwc19tYXhfZGVjX3BpY19idWZmZXJpbmdfbWludXMxW2ldOwotICAgICAg ICBkcGJtX3Zwcy0+bWF4X251bV9yZW9yZGVyX3BpY3NbaV0gPSB2cHMtPnZwc19tYXhfbnVtX3Jl b3JkZXJfcGljc1tpXTsKLSAgICB9Ci0KLSAgICAqcHRsX3ZwcyA9IChTdGRWaWRlb0gyNjVQcm9m aWxlVGllckxldmVsKSB7Ci0gICAgICAgIC5mbGFncyA9IChTdGRWaWRlb0gyNjVQcm9maWxlVGll ckxldmVsRmxhZ3MpIHsKLSAgICAgICAgICAgIC5nZW5lcmFsX3RpZXJfZmxhZyA9IHZwcy0+cHJv ZmlsZV90aWVyX2xldmVsLmdlbmVyYWxfdGllcl9mbGFnLAotICAgICAgICAgICAgLmdlbmVyYWxf cHJvZ3Jlc3NpdmVfc291cmNlX2ZsYWcgPSB2cHMtPnByb2ZpbGVfdGllcl9sZXZlbC5nZW5lcmFs X3Byb2dyZXNzaXZlX3NvdXJjZV9mbGFnLAotICAgICAgICAgICAgLmdlbmVyYWxfaW50ZXJsYWNl ZF9zb3VyY2VfZmxhZyA9IHZwcy0+cHJvZmlsZV90aWVyX2xldmVsLmdlbmVyYWxfaW50ZXJsYWNl ZF9zb3VyY2VfZmxhZywKLSAgICAgICAgICAgIC5nZW5lcmFsX25vbl9wYWNrZWRfY29uc3RyYWlu dF9mbGFnID0gdnBzLT5wcm9maWxlX3RpZXJfbGV2ZWwuZ2VuZXJhbF9ub25fcGFja2VkX2NvbnN0 cmFpbnRfZmxhZywKLSAgICAgICAgICAgIC5nZW5lcmFsX2ZyYW1lX29ubHlfY29uc3RyYWludF9m bGFnID0gdnBzLT5wcm9maWxlX3RpZXJfbGV2ZWwuZ2VuZXJhbF9mcmFtZV9vbmx5X2NvbnN0cmFp bnRfZmxhZywKLSAgICAgICAgfSwKLSAgICAgICAgLmdlbmVyYWxfcHJvZmlsZV9pZGMgPSBmZl92 a19oMjY1X3Byb2ZpbGVfdG9fdmsodnBzLT5wcm9maWxlX3RpZXJfbGV2ZWwuZ2VuZXJhbF9wcm9m aWxlX2lkYyksCi0gICAgICAgIC5nZW5lcmFsX2xldmVsX2lkYyA9IGZmX3ZrX2gyNjVfbGV2ZWxf dG9fdmsodnBzLT5wcm9maWxlX3RpZXJfbGV2ZWwuZ2VuZXJhbF9sZXZlbF9pZGMpLAotICAgIH07 Ci0KLSAgICAqdmt2cHMgPSAoU3RkVmlkZW9IMjY1VmlkZW9QYXJhbWV0ZXJTZXQpIHsKLSAgICAg ICAgLmZsYWdzID0gKFN0ZFZpZGVvSDI2NVZwc0ZsYWdzKSB7Ci0gICAgICAgICAgICAudnBzX3Rl bXBvcmFsX2lkX25lc3RpbmdfZmxhZyA9IHZwcy0+dnBzX3RlbXBvcmFsX2lkX25lc3RpbmdfZmxh ZywKLSAgICAgICAgICAgIC52cHNfc3ViX2xheWVyX29yZGVyaW5nX2luZm9fcHJlc2VudF9mbGFn ID0gdnBzLT52cHNfc3ViX2xheWVyX29yZGVyaW5nX2luZm9fcHJlc2VudF9mbGFnLAotICAgICAg ICAgICAgLnZwc190aW1pbmdfaW5mb19wcmVzZW50X2ZsYWcgPSB2cHMtPnZwc190aW1pbmdfaW5m b19wcmVzZW50X2ZsYWcsCi0gICAgICAgICAgICAudnBzX3BvY19wcm9wb3J0aW9uYWxfdG9fdGlt aW5nX2ZsYWcgPSB2cHMtPnZwc19wb2NfcHJvcG9ydGlvbmFsX3RvX3RpbWluZ19mbGFnLAotICAg ICAgICB9LAotICAgICAgICAudnBzX3ZpZGVvX3BhcmFtZXRlcl9zZXRfaWQgPSB2cHMtPnZwc192 aWRlb19wYXJhbWV0ZXJfc2V0X2lkLAotICAgICAgICAudnBzX21heF9zdWJfbGF5ZXJzX21pbnVz MSA9IHZwcy0+dnBzX21heF9zdWJfbGF5ZXJzX21pbnVzMSwKLSAgICAgICAgLyogUmVzZXJ2ZWQg Ki8KLSAgICAgICAgLyogUmVzZXJ2ZWQgKi8KLSAgICAgICAgLnZwc19udW1fdW5pdHNfaW5fdGlj ayA9IHZwcy0+dnBzX251bV91bml0c19pbl90aWNrLAotICAgICAgICAudnBzX3RpbWVfc2NhbGUg PSB2cHMtPnZwc190aW1lX3NjYWxlLAotICAgICAgICAudnBzX251bV90aWNrc19wb2NfZGlmZl9v bmVfbWludXMxID0gdnBzLT52cHNfbnVtX3RpY2tzX3BvY19kaWZmX29uZV9taW51czEsCi0gICAg ICAgIC8qIFJlc2VydmVkICovCi0gICAgICAgIC5wRGVjUGljQnVmTWdyID0gZHBibV92cHMsCi0g ICAgICAgIC5wSHJkUGFyYW1ldGVycyA9IHZ1aV9oZWFkZXJfdnBzLAotICAgICAgICAucFByb2Zp bGVUaWVyTGV2ZWwgPSBwdGxfdnBzLAotICAgIH07Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotc3Rh dGljIGludCBjcmVhdGVfc2Vzc2lvbl9wYXJhbXMoQVZDb2RlY0NvbnRleHQgKmF2Y3R4KQotewot ICAgIGludCBlcnI7Ci0gICAgVnVsa2FuRW5jb2RlSDI2NUNvbnRleHQgKmVuYyA9IGF2Y3R4LT5w cml2X2RhdGE7Ci0gICAgRkZWdWxrYW5FbmNvZGVDb250ZXh0ICpjdHggPSAmZW5jLT5jb21tb247 Ci0gICAgRkZWdWxrYW5Db250ZXh0ICpzID0gJmN0eC0+czsKLSAgICBGRlZ1bGthbkZ1bmN0aW9u cyAqdmsgPSAmY3R4LT5zLnZrZm47Ci0KLSAgICBWdWxrYW5IMjY1VW5pdHMgdmtfdW5pdHMgPSB7 IDAgfTsKLQotICAgIFZrVmlkZW9FbmNvZGVIMjY1U2Vzc2lvblBhcmFtZXRlcnNBZGRJbmZvS0hS IGgyNjVfcGFyYW1zX2luZm87Ci0gICAgVmtWaWRlb0VuY29kZUgyNjVTZXNzaW9uUGFyYW1ldGVy c0NyZWF0ZUluZm9LSFIgaDI2NV9wYXJhbXM7Ci0KLSAgICAvKiBDb252ZXJ0IGl0IHRvIFZ1bGth biAqLwotICAgIGVyciA9IGJhc2VfdW5pdF90b192ayhhdmN0eCwgJnZrX3VuaXRzKTsKLSAgICBp ZiAoZXJyIDwgMCkgewotICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIlVuYWJs ZSB0byBjb252ZXJ0IFNQUy9QUFMgdW5pdHMgdG8gVnVsa2FuOiAlc1xuIiwKLSAgICAgICAgICAg ICAgIGF2X2VycjJzdHIoZXJyKSk7Ci0gICAgICAgIHJldHVybiBlcnI7Ci0gICAgfQotCi0gICAg LyogRGVzdHJveSB0aGUgc2Vzc2lvbiBwYXJhbXMgKi8KLSAgICBpZiAoY3R4LT5zZXNzaW9uX3Bh cmFtcykKLSAgICAgICAgdmstPkRlc3Ryb3lWaWRlb1Nlc3Npb25QYXJhbWV0ZXJzS0hSKHMtPmh3 Y3R4LT5hY3RfZGV2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY3R4LT5zZXNzaW9uX3BhcmFtcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHMtPmh3Y3R4LT5hbGxvYyk7Ci0KLSAgICBoMjY1X3BhcmFtc19pbmZvID0g KFZrVmlkZW9FbmNvZGVIMjY1U2Vzc2lvblBhcmFtZXRlcnNBZGRJbmZvS0hSKSB7Ci0gICAgICAg IC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX1ZJREVPX0VOQ09ERV9IMjY1X1NFU1NJT05fUEFS QU1FVEVSU19BRERfSU5GT19LSFIsCi0gICAgICAgIC5wU3RkU1BTcyA9ICZ2a191bml0cy5zcHMs Ci0gICAgICAgIC5zdGRTUFNDb3VudCA9IDEsCi0gICAgICAgIC5wU3RkUFBTcyA9ICZ2a191bml0 cy5wcHMsCi0gICAgICAgIC5zdGRQUFNDb3VudCA9IDEsCi0gICAgICAgIC5wU3RkVlBTcyA9ICZ2 a191bml0cy52cHMsCi0gICAgICAgIC5zdGRWUFNDb3VudCA9IDEsCi0gICAgfTsKLSAgICBoMjY1 X3BhcmFtcyA9IChWa1ZpZGVvRW5jb2RlSDI2NVNlc3Npb25QYXJhbWV0ZXJzQ3JlYXRlSW5mb0tI UikgewotICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9WSURFT19FTkNPREVfSDI2 NV9TRVNTSU9OX1BBUkFNRVRFUlNfQ1JFQVRFX0lORk9fS0hSLAotICAgICAgICAubWF4U3RkU1BT Q291bnQgPSAxLAotICAgICAgICAubWF4U3RkUFBTQ291bnQgPSAxLAotICAgICAgICAubWF4U3Rk VlBTQ291bnQgPSAxLAotICAgICAgICAucFBhcmFtZXRlcnNBZGRJbmZvID0gJmgyNjVfcGFyYW1z X2luZm8sCi0gICAgfTsKLQotICAgIHJldHVybiBmZl92dWxrYW5fZW5jb2RlX2NyZWF0ZV9zZXNz aW9uX3BhcmFtcyhhdmN0eCwgY3R4LCAmaDI2NV9wYXJhbXMpOwotfQotCi1zdGF0aWMgaW50IHBh cnNlX2ZlZWRiYWNrX3VuaXRzKEFWQ29kZWNDb250ZXh0ICphdmN0eCwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqZGF0YSwgc2l6ZV90IHNpemUsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzcHNfb3ZlcnJpZGUsIGludCBwcHNfb3Zl cnJpZGUpCi17Ci0gICAgaW50IGVycjsKLSAgICBWdWxrYW5FbmNvZGVIMjY1Q29udGV4dCAqZW5j ID0gYXZjdHgtPnByaXZfZGF0YTsKLQotICAgIENvZGVkQml0c3RyZWFtQ29udGV4dCAqY2JzOwot ICAgIENvZGVkQml0c3RyZWFtRnJhZ21lbnQgYXUgPSB7IDAgfTsKLQotICAgIGVyciA9IGZmX2Ni c19pbml0KCZjYnMsIEFWX0NPREVDX0lEX0hFVkMsIGF2Y3R4KTsKLSAgICBpZiAoZXJyIDwgMCkK LSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIGVyciA9IGZmX2Nic19yZWFkKGNicywgJmF1LCBO VUxMLCBkYXRhLCBzaXplKTsKLSAgICBpZiAoZXJyIDwgMCkgewotICAgICAgICBhdl9sb2coYXZj dHgsIEFWX0xPR19FUlJPUiwgIlVuYWJsZSB0byBwYXJzZSBmZWVkYmFjayB1bml0cywgYmFkIGRy aXZlcnM6ICVzXG4iLAotICAgICAgICAgICAgICAgYXZfZXJyMnN0cihlcnIpKTsKLSAgICAgICAg Z290byBmYWlsOwotICAgIH0KLQotICAgIGlmIChzcHNfb3ZlcnJpZGUpIHsKLSAgICAgICAgZm9y IChpbnQgaSA9IDA7IGkgPCBhdS5uYl91bml0czsgaSsrKSB7Ci0gICAgICAgICAgICBpZiAoYXUu dW5pdHNbaV0udHlwZSA9PSBIRVZDX05BTF9TUFMpIHsKLSAgICAgICAgICAgICAgICBIMjY1UmF3 U1BTICpzcHMgPSBhdS51bml0c1tpXS5jb250ZW50OwotICAgICAgICAgICAgICAgIGVuYy0+dW5p dHMucmF3X3Nwcy5waWNfd2lkdGhfaW5fbHVtYV9zYW1wbGVzID0gc3BzLT5waWNfd2lkdGhfaW5f bHVtYV9zYW1wbGVzOwotICAgICAgICAgICAgICAgIGVuYy0+dW5pdHMucmF3X3Nwcy5waWNfaGVp Z2h0X2luX2x1bWFfc2FtcGxlcyA9IHNwcy0+cGljX2hlaWdodF9pbl9sdW1hX3NhbXBsZXM7Ci0g ICAgICAgICAgICAgICAgZW5jLT51bml0cy5yYXdfc3BzLmxvZzJfZGlmZl9tYXhfbWluX2x1bWFf Y29kaW5nX2Jsb2NrX3NpemUgPSBzcHMtPmxvZzJfZGlmZl9tYXhfbWluX2x1bWFfY29kaW5nX2Js b2NrX3NpemU7Ci0gICAgICAgICAgICAgICAgZW5jLT51bml0cy5yYXdfc3BzLm1heF90cmFuc2Zv cm1faGllcmFyY2h5X2RlcHRoX2ludGVyID0gc3BzLT5tYXhfdHJhbnNmb3JtX2hpZXJhcmNoeV9k ZXB0aF9pbnRlcjsKLSAgICAgICAgICAgICAgICBlbmMtPnVuaXRzLnJhd19zcHMubWF4X3RyYW5z Zm9ybV9oaWVyYXJjaHlfZGVwdGhfaW50cmEgPSBzcHMtPm1heF90cmFuc2Zvcm1faGllcmFyY2h5 X2RlcHRoX2ludHJhOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyog SWYgUFBTIGhhcyBhbiBvdmVycmlkZSwganVzdCBjb3B5IGl0IGVudGlyZWx5LiAqLwotICAgIGlm IChwcHNfb3ZlcnJpZGUpIHsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhdS5uYl91bml0 czsgaSsrKSB7Ci0gICAgICAgICAgICBpZiAoYXUudW5pdHNbaV0udHlwZSA9PSBIRVZDX05BTF9Q UFMpIHsKLSAgICAgICAgICAgICAgICBIMjY1UmF3UFBTICpwcHMgPSBhdS51bml0c1tpXS5jb250 ZW50OwotICAgICAgICAgICAgICAgIG1lbWNweSgmZW5jLT51bml0cy5yYXdfcHBzLCBwcHMsIHNp emVvZigqcHBzKSk7Ci0gICAgICAgICAgICAgICAgZW5jLT5maXhlZF9xcF9pZHIgPSBwcHMtPmlu aXRfcXBfbWludXMyNiArIDI2OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg fQotICAgICAgICB9Ci0gICAgfQotCi0gICAgZXJyID0gMDsKLWZhaWw6Ci0gICAgZmZfY2JzX2Zy YWdtZW50X2ZyZWUoJmF1KTsKLSAgICBmZl9jYnNfY2xvc2UoJmNicyk7Ci0KLSAgICByZXR1cm4g ZXJyOwotfQotCi1zdGF0aWMgaW50IGluaXRfYmFzZV91bml0cyhBVkNvZGVjQ29udGV4dCAqYXZj dHgpCi17Ci0gICAgaW50IGVycjsKLSAgICBWa1Jlc3VsdCByZXQ7Ci0gICAgVnVsa2FuRW5jb2Rl SDI2NUNvbnRleHQgKmVuYyA9IGF2Y3R4LT5wcml2X2RhdGE7Ci0gICAgRkZWdWxrYW5FbmNvZGVD b250ZXh0ICpjdHggPSAmZW5jLT5jb21tb247Ci0gICAgRkZWdWxrYW5Db250ZXh0ICpzID0gJmN0 eC0+czsKLSAgICBGRlZ1bGthbkZ1bmN0aW9ucyAqdmsgPSAmY3R4LT5zLnZrZm47Ci0KLSAgICBW a1ZpZGVvRW5jb2RlSDI2NVNlc3Npb25QYXJhbWV0ZXJzR2V0SW5mb0tIUiBoMjY1X3BhcmFtc19p bmZvOwotICAgIFZrVmlkZW9FbmNvZGVTZXNzaW9uUGFyYW1ldGVyc0dldEluZm9LSFIgcGFyYW1z X2luZm87Ci0gICAgVmtWaWRlb0VuY29kZUgyNjVTZXNzaW9uUGFyYW1ldGVyc0ZlZWRiYWNrSW5m b0tIUiBoMjY1X3BhcmFtc19mZWVkYmFjazsKLSAgICBWa1ZpZGVvRW5jb2RlU2Vzc2lvblBhcmFt ZXRlcnNGZWVkYmFja0luZm9LSFIgcGFyYW1zX2ZlZWRiYWNrOwotCi0gICAgdm9pZCAqZGF0YSA9 IE5VTEw7Ci0gICAgc2l6ZV90IGRhdGFfc2l6ZSA9IDA7Ci0KLSAgICAvKiBHZW5lcmF0ZSBTUFMv UFBTIHVuaXQgaW5mbyAqLwotICAgIGVyciA9IGluaXRfc2VxdWVuY2VfaGVhZGVycyhhdmN0eCk7 Ci0gICAgaWYgKGVyciA8IDApIHsKLSAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1Is ICJVbmFibGUgdG8gaW5pdGlhbGl6ZSBTUFMvUFBTIHVuaXRzOiAlc1xuIiwKLSAgICAgICAgICAg ICAgIGF2X2VycjJzdHIoZXJyKSk7Ci0gICAgICAgIHJldHVybiBlcnI7Ci0gICAgfQotCi0gICAg LyogQ3JlYXRlIHNlc3Npb24gcGFyYW1ldGVycyBmcm9tIHRoZW0gKi8KLSAgICBlcnIgPSBjcmVh dGVfc2Vzc2lvbl9wYXJhbXMoYXZjdHgpOwotICAgIGlmIChlcnIgPCAwKQotICAgICAgICByZXR1 cm4gZXJyOwotCi0gICAgaDI2NV9wYXJhbXNfaW5mbyA9IChWa1ZpZGVvRW5jb2RlSDI2NVNlc3Np b25QYXJhbWV0ZXJzR2V0SW5mb0tIUikgewotICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVf VFlQRV9WSURFT19FTkNPREVfSDI2NV9TRVNTSU9OX1BBUkFNRVRFUlNfR0VUX0lORk9fS0hSLAot ICAgICAgICAud3JpdGVTdGRTUFMgPSAxLAotICAgICAgICAud3JpdGVTdGRQUFMgPSAxLAotICAg ICAgICAud3JpdGVTdGRWUFMgPSAxLAotICAgICAgICAuc3RkU1BTSWQgPSBlbmMtPnVuaXRzLnJh d19zcHMuc3BzX3NlcV9wYXJhbWV0ZXJfc2V0X2lkLAotICAgICAgICAuc3RkUFBTSWQgPSBlbmMt PnVuaXRzLnJhd19wcHMucHBzX3BpY19wYXJhbWV0ZXJfc2V0X2lkLAotICAgICAgICAuc3RkVlBT SWQgPSBlbmMtPnVuaXRzLnJhd192cHMudnBzX3ZpZGVvX3BhcmFtZXRlcl9zZXRfaWQsCi0gICAg fTsKLSAgICBwYXJhbXNfaW5mbyA9IChWa1ZpZGVvRW5jb2RlU2Vzc2lvblBhcmFtZXRlcnNHZXRJ bmZvS0hSKSB7Ci0gICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX1ZJREVPX0VOQ09E RV9TRVNTSU9OX1BBUkFNRVRFUlNfR0VUX0lORk9fS0hSLAotICAgICAgICAucE5leHQgPSAmaDI2 NV9wYXJhbXNfaW5mbywKLSAgICAgICAgLnZpZGVvU2Vzc2lvblBhcmFtZXRlcnMgPSBjdHgtPnNl c3Npb25fcGFyYW1zLAotICAgIH07Ci0KLSAgICBoMjY1X3BhcmFtc19mZWVkYmFjayA9IChWa1Zp ZGVvRW5jb2RlSDI2NVNlc3Npb25QYXJhbWV0ZXJzRmVlZGJhY2tJbmZvS0hSKSB7Ci0gICAgICAg IC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX1ZJREVPX0VOQ09ERV9IMjY1X1NFU1NJT05fUEFS QU1FVEVSU19GRUVEQkFDS19JTkZPX0tIUiwKLSAgICB9OwotICAgIHBhcmFtc19mZWVkYmFjayA9 IChWa1ZpZGVvRW5jb2RlU2Vzc2lvblBhcmFtZXRlcnNGZWVkYmFja0luZm9LSFIpIHsKLSAgICAg ICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfVklERU9fRU5DT0RFX1NFU1NJT05fUEFSQU1F VEVSU19GRUVEQkFDS19JTkZPX0tIUiwKLSAgICAgICAgLnBOZXh0ID0gJmgyNjVfcGFyYW1zX2Zl ZWRiYWNrLAotICAgIH07Ci0KLSAgICByZXQgPSB2ay0+R2V0RW5jb2RlZFZpZGVvU2Vzc2lvblBh cmFtZXRlcnNLSFIocy0+aHdjdHgtPmFjdF9kZXYsICZwYXJhbXNfaW5mbywKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBhcmFtc19mZWVkYmFjaywK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRhdGFf c2l6ZSwgZGF0YSk7Ci0gICAgaWYgKHJldCA9PSBWS19JTkNPTVBMRVRFIHx8Ci0gICAgICAgIChy ZXQgPT0gVktfU1VDQ0VTUykgJiYgKGRhdGFfc2l6ZSA+IDApKSB7Ci0gICAgICAgIGRhdGEgPSBh dl9tYWxsb2N6KGRhdGFfc2l6ZSk7Ci0gICAgICAgIGlmICghZGF0YSkKLSAgICAgICAgICAgIHJl dHVybiBBVkVSUk9SKEVOT01FTSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgYXZfbG9nKGF2Y3R4 LCBBVl9MT0dfRVJST1IsICJVbmFibGUgdG8gZ2V0IGZlZWRiYWNrIGZvciBILjI2NSB1bml0cyA9 ICUiU0laRV9TUEVDSUZJRVIiXG4iLCBkYXRhX3NpemUpOwotICAgICAgICByZXR1cm4gZXJyOwot ICAgIH0KLQotICAgIHJldCA9IHZrLT5HZXRFbmNvZGVkVmlkZW9TZXNzaW9uUGFyYW1ldGVyc0tI UihzLT5od2N0eC0+YWN0X2RldiwgJnBhcmFtc19pbmZvLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcGFyYW1zX2ZlZWRiYWNrLAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZGF0YV9zaXplLCBkYXRh KTsKLSAgICBpZiAocmV0ICE9IFZLX1NVQ0NFU1MpIHsKLSAgICAgICAgYXZfbG9nKGF2Y3R4LCBB Vl9MT0dfRVJST1IsICJFcnJvciB3cml0aW5nIGZlZWRiYWNrIHVuaXRzXG4iKTsKLSAgICAgICAg cmV0dXJuIGVycjsKLSAgICB9Ci0KLSAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19WRVJCT1NFLCAi RmVlZGJhY2sgdW5pdHMgd3JpdHRlbiwgb3ZlcnJpZGVzOiAlaSAoU1BTOiAlaSBQUFM6ICVpIFZQ UzogJWkpXG4iLAotICAgICAgICAgICBwYXJhbXNfZmVlZGJhY2suaGFzT3ZlcnJpZGVzLAotICAg ICAgICAgICBoMjY1X3BhcmFtc19mZWVkYmFjay5oYXNTdGRTUFNPdmVycmlkZXMsCi0gICAgICAg ICAgIGgyNjVfcGFyYW1zX2ZlZWRiYWNrLmhhc1N0ZFBQU092ZXJyaWRlcywKLSAgICAgICAgICAg aDI2NV9wYXJhbXNfZmVlZGJhY2suaGFzU3RkVlBTT3ZlcnJpZGVzKTsKLQotICAgIHBhcmFtc19m ZWVkYmFjay5oYXNPdmVycmlkZXMgPSAxOwotICAgIGgyNjVfcGFyYW1zX2ZlZWRiYWNrLmhhc1N0 ZFNQU092ZXJyaWRlcyA9IDE7Ci0gICAgaDI2NV9wYXJhbXNfZmVlZGJhY2suaGFzU3RkUFBTT3Zl cnJpZGVzID0gMTsKLQotICAgIC8qIE5vIG5lZWQgdG8gc3luYyBhbnkgb3ZlcnJpZGVzICovCi0g ICAgaWYgKCFwYXJhbXNfZmVlZGJhY2suaGFzT3ZlcnJpZGVzKQotICAgICAgICByZXR1cm4gMDsK LQotICAgIC8qIFBhcnNlIGJhY2sgdG5lIHVuaXRzIGFuZCBvdmVycmlkZSAqLwotICAgIGVyciA9 IHBhcnNlX2ZlZWRiYWNrX3VuaXRzKGF2Y3R4LCBkYXRhLCBkYXRhX3NpemUsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaDI2NV9wYXJhbXNfZmVlZGJhY2suaGFzU3RkU1BTT3ZlcnJp ZGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGgyNjVfcGFyYW1zX2ZlZWRiYWNr Lmhhc1N0ZFBQU092ZXJyaWRlcyk7Ci0gICAgaWYgKGVyciA8IDApCi0gICAgICAgIHJldHVybiBl cnI7Ci0KLSAgICAvKiBDcmVhdGUgZmluYWwgc2Vzc2lvbiBwYXJhbWV0ZXJzICovCi0gICAgZXJy ID0gY3JlYXRlX3Nlc3Npb25fcGFyYW1zKGF2Y3R4KTsKLSAgICBpZiAoZXJyIDwgMCkKLSAgICAg ICAgcmV0dXJuIGVycjsKLQotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHZ1bGthbl9l bmNvZGVfaDI2NV9hZGRfbmFsKEFWQ29kZWNDb250ZXh0ICphdmN0eCwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgQ29kZWRCaXRzdHJlYW1GcmFnbWVudCAqYXUsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKm5hbF91bml0KQotewotICAg IEgyNjVSYXdOQUxVbml0SGVhZGVyICpoZWFkZXIgPSBuYWxfdW5pdDsKLQotICAgIGludCBlcnIg PSBmZl9jYnNfaW5zZXJ0X3VuaXRfY29udGVudChhdSwgLTEsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGhlYWRlci0+bmFsX3VuaXRfdHlwZSwgbmFsX3VuaXQsIE5V TEwpOwotICAgIGlmIChlcnIgPCAwKQotICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJP UiwgIkZhaWxlZCB0byBhZGQgTkFMIHVuaXQ6ICIKLSAgICAgICAgICAgICAgICJ0eXBlID0gJWQu XG4iLCBoZWFkZXItPm5hbF91bml0X3R5cGUpOwotCi0gICAgcmV0dXJuIGVycjsKLX0KLQotc3Rh dGljIGludCB3cml0ZV9hY2Nlc3NfdW5pdChBVkNvZGVjQ29udGV4dCAqYXZjdHgsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKmRhdGEsIHNpemVfdCAqZGF0YV9sZW4sCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVkQml0c3RyZWFtRnJhZ21lbnQgKmF1KQot ewotICAgIFZ1bGthbkVuY29kZUgyNjVDb250ZXh0ICplbmMgPSBhdmN0eC0+cHJpdl9kYXRhOwot Ci0gICAgaW50IGVyciA9IGZmX2Nic193cml0ZV9mcmFnbWVudF9kYXRhKGVuYy0+Y2JzLCBhdSk7 Ci0gICAgaWYgKGVyciA8IDApIHsKLSAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1Is ICJGYWlsZWQgdG8gd3JpdGUgcGFja2VkIGhlYWRlci5cbiIpOwotICAgICAgICByZXR1cm4gZXJy OwotICAgIH0KLQotICAgIGlmICgqZGF0YV9sZW4gPCBhdS0+ZGF0YV9zaXplKSB7Ci0gICAgICAg IGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiQWNjZXNzIHVuaXQgdG9vIGxhcmdlOiAlenUg PCAlenUuXG4iLAotICAgICAgICAgICAgICAgKmRhdGFfbGVuLCBhdS0+ZGF0YV9zaXplKTsKLSAg ICAgICAgcmV0dXJuIEFWRVJST1IoRU5PU1BDKTsKLSAgICB9Ci0KLSAgICBtZW1jcHkoZGF0YSwg YXUtPmRhdGEsIGF1LT5kYXRhX3NpemUpOwotICAgICpkYXRhX2xlbiA9IGF1LT5kYXRhX3NpemU7 Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB3cml0ZV9zZXF1ZW5jZV9oZWFkZXJz KEFWQ29kZWNDb250ZXh0ICphdmN0eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBGRkhXQmFzZUVuY29kZVBpY3R1cmUgKmJhc2VfcGljLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHVpbnQ4X3QgKmRhdGEsIHNpemVfdCAqZGF0YV9sZW4pCi17Ci0gICAgaW50 IGVycjsKLSAgICBWdWxrYW5FbmNvZGVIMjY1Q29udGV4dCAqZW5jID0gYXZjdHgtPnByaXZfZGF0 YTsKLSAgICBWdWxrYW5FbmNvZGVIMjY1UGljdHVyZSAgKmhwID0gYmFzZV9waWMgPyBiYXNlX3Bp Yy0+Y29kZWNfcHJpdiA6IE5VTEw7Ci0gICAgQ29kZWRCaXRzdHJlYW1GcmFnbWVudCAgICphdSA9 ICZlbmMtPmN1cnJlbnRfYWNjZXNzX3VuaXQ7Ci0KLSAgICBpZiAoaHAgJiYgaHAtPnVuaXRzX25l ZWRlZCAmIFVOSVRfQVVEKSB7Ci0gICAgICAgIGVyciA9IHZ1bGthbl9lbmNvZGVfaDI2NV9hZGRf bmFsKGF2Y3R4LCBhdSwgJmVuYy0+cmF3X2F1ZCk7Ci0gICAgICAgIGlmIChlcnIgPCAwKQotICAg ICAgICAgICAgZ290byBmYWlsOwotICAgICAgICBocC0+dW5pdHNfbmVlZGVkICY9IH5VTklUX0FV RDsKLSAgICB9Ci0KLSAgICBlcnIgPSB2dWxrYW5fZW5jb2RlX2gyNjVfYWRkX25hbChhdmN0eCwg YXUsICZlbmMtPnVuaXRzLnJhd192cHMpOwotICAgIGlmIChlcnIgPCAwKQotICAgICAgICBnb3Rv IGZhaWw7Ci0KLSAgICBlcnIgPSB2dWxrYW5fZW5jb2RlX2gyNjVfYWRkX25hbChhdmN0eCwgYXUs ICZlbmMtPnVuaXRzLnJhd19zcHMpOwotICAgIGlmIChlcnIgPCAwKQotICAgICAgICBnb3RvIGZh aWw7Ci0KLSAgICBlcnIgPSB2dWxrYW5fZW5jb2RlX2gyNjVfYWRkX25hbChhdmN0eCwgYXUsICZl bmMtPnVuaXRzLnJhd19wcHMpOwotICAgIGlmIChlcnIgPCAwKQotICAgICAgICBnb3RvIGZhaWw7 Ci0KLSAgICBlcnIgPSB3cml0ZV9hY2Nlc3NfdW5pdChhdmN0eCwgZGF0YSwgZGF0YV9sZW4sIGF1 KTsKLWZhaWw6Ci0gICAgZmZfY2JzX2ZyYWdtZW50X3Jlc2V0KGF1KTsKLSAgICByZXR1cm4gZXJy OwotfQotCi1zdGF0aWMgaW50IHdyaXRlX2V4dHJhX2hlYWRlcnMoQVZDb2RlY0NvbnRleHQgKmF2 Y3R4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZGSFdCYXNlRW5jb2RlUGljdHVy ZSAqYmFzZV9waWMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqZGF0 YSwgc2l6ZV90ICpkYXRhX2xlbikKLXsKLSAgICBpbnQgZXJyOwotICAgIFZ1bGthbkVuY29kZUgy NjVDb250ZXh0ICplbmMgPSBhdmN0eC0+cHJpdl9kYXRhOwotICAgIFZ1bGthbkVuY29kZUgyNjVQ aWN0dXJlICAqaHAgPSBiYXNlX3BpYy0+Y29kZWNfcHJpdjsKLSAgICBDb2RlZEJpdHN0cmVhbUZy YWdtZW50ICAgKmF1ID0gJmVuYy0+Y3VycmVudF9hY2Nlc3NfdW5pdDsKLQotICAgIGlmIChocC0+ dW5pdHNfbmVlZGVkICYgVU5JVF9BVUQpIHsKLSAgICAgICAgZXJyID0gdnVsa2FuX2VuY29kZV9o MjY1X2FkZF9uYWwoYXZjdHgsIGF1LCAmZW5jLT5yYXdfYXVkKTsKLSAgICAgICAgaWYgKGVyciA8 IDApCi0gICAgICAgICAgICBnb3RvIGZhaWw7Ci0gICAgfQotCi0gICAgaWYgKGhwLT51bml0c19u ZWVkZWQgJiBVTklUX1NFSV9NQVNURVJJTkdfRElTUExBWSkgewotICAgICAgICBlcnIgPSBmZl9j YnNfc2VpX2FkZF9tZXNzYWdlKGVuYy0+Y2JzLCBhdSwgMSwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBTRUlfVFlQRV9NQVNURVJJTkdfRElTUExBWV9DT0xPVVJfVk9MVU1F LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZlbmMtPnNlaV9tYXN0ZXJp bmdfZGlzcGxheSwgTlVMTCk7Ci0gICAgICAgIGlmIChlcnIgPCAwKQotICAgICAgICAgICAgZ290 byBmYWlsOwotICAgIH0KLQotICAgIGlmIChocC0+dW5pdHNfbmVlZGVkICYgVU5JVF9TRUlfQ09O VEVOVF9MSUdIVF9MRVZFTCkgewotICAgICAgICBlcnIgPSBmZl9jYnNfc2VpX2FkZF9tZXNzYWdl KGVuYy0+Y2JzLCBhdSwgMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBT RUlfVFlQRV9DT05URU5UX0xJR0hUX0xFVkVMX0lORk8sCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJmVuYy0+c2VpX2NvbnRlbnRfbGlnaHRfbGV2ZWwsIE5VTEwpOwotICAg ICAgICBpZiAoZXJyIDwgMCkKLSAgICAgICAgICAgIGdvdG8gZmFpbDsKLSAgICB9Ci0gICAgaWYg KGhwLT51bml0c19uZWVkZWQgJiBVTklUX1NFSV9BNTNfQ0MpIHsKLSAgICAgICAgZXJyID0gZmZf Y2JzX3NlaV9hZGRfbWVzc2FnZShlbmMtPmNicywgYXUsIDEsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgU0VJX1RZUEVfVVNFUl9EQVRBX1JFR0lTVEVSRURfSVRVX1RfVDM1 LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZlbmMtPnNlaV9hNTNjYywg TlVMTCk7Ci0gICAgICAgIGlmIChlcnIgPCAwKQotICAgICAgICAgICAgZ290byBmYWlsOwotICAg IH0KLQotICAgIGlmIChocC0+dW5pdHNfbmVlZGVkKSB7Ci0gICAgICAgIGVyciA9IHdyaXRlX2Fj Y2Vzc191bml0KGF2Y3R4LCBkYXRhLCBkYXRhX2xlbiwgYXUpOwotICAgICAgICBpZiAoZXJyIDwg MCkKLSAgICAgICAgICAgIGdvdG8gZmFpbDsKLSAgICB9IGVsc2UgewotICAgICAgICBlcnIgPSAw OwotICAgICAgICAqZGF0YV9sZW4gPSAwOwotICAgIH0KLQotZmFpbDoKLSAgICBmZl9jYnNfZnJh Z21lbnRfcmVzZXQoYXUpOwotICAgIHJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgd3JpdGVf ZmlsbGVyKEFWQ29kZWNDb250ZXh0ICphdmN0eCwgdWludDMyX3QgZmlsbGVyLAotICAgICAgICAg ICAgICAgICAgICAgICAgdWludDhfdCAqZGF0YSwgc2l6ZV90ICpkYXRhX2xlbikKLXsKLSAgICBp bnQgZXJyOwotICAgIFZ1bGthbkVuY29kZUgyNjVDb250ZXh0ICplbmMgPSBhdmN0eC0+cHJpdl9k YXRhOwotICAgIENvZGVkQml0c3RyZWFtRnJhZ21lbnQgICAqYXUgPSAmZW5jLT5jdXJyZW50X2Fj Y2Vzc191bml0OwotCi0gICAgSDI2NVJhd0ZpbGxlciByYXdfZmlsbGVyID0gewotICAgICAgICAu bmFsX3VuaXRfaGVhZGVyID0KLSAgICAgICAgewotICAgICAgICAgICAgLm5hbF91bml0X3R5cGUg PSBIRVZDX05BTF9GRF9OVVQsCi0gICAgICAgICAgICAubnVoX3RlbXBvcmFsX2lkX3BsdXMxID0g MSwKLSAgICAgICAgfSwKLSAgICAgICAgLmZpbGxlcl9zaXplID0gZmlsbGVyLAotICAgIH07Ci0K LSAgICBlcnIgPSB2dWxrYW5fZW5jb2RlX2gyNjVfYWRkX25hbChhdmN0eCwgYXUsICZyYXdfZmls bGVyKTsKLSAgICBpZiAoZXJyIDwgMCkKLSAgICAgICAgZ290byBmYWlsOwotCi0gICAgZXJyID0g d3JpdGVfYWNjZXNzX3VuaXQoYXZjdHgsIGRhdGEsIGRhdGFfbGVuLCBhdSk7Ci1mYWlsOgotICAg IGZmX2Nic19mcmFnbWVudF9yZXNldChhdSk7Ci0gICAgcmV0dXJuIGVycjsKLX0KLQotc3RhdGlj IGNvbnN0IEZGVnVsa2FuQ29kZWMgZW5jX2NiID0gewotICAgIC5mbGFncyA9IEZGX0hXX0ZMQUdf Ql9QSUNUVVJFUyB8Ci0gICAgICAgICAgICAgRkZfSFdfRkxBR19CX1BJQ1RVUkVfUkVGRVJFTkNF UyB8Ci0gICAgICAgICAgICAgRkZfSFdfRkxBR19OT05fSURSX0tFWV9QSUNUVVJFUywKLSAgICAu cGljdHVyZV9wcml2X2RhdGFfc2l6ZSA9IHNpemVvZihWdWxrYW5FbmNvZGVIMjY1UGljdHVyZSks Ci0gICAgLmZpbGxlcl9oZWFkZXJfc2l6ZSA9IDcsCi0gICAgLmluaXRfcHJvZmlsZSA9IGluaXRf cHJvZmlsZSwKLSAgICAuaW5pdF9waWNfcmMgPSBpbml0X3BpY19yYywKLSAgICAuaW5pdF9waWNf cGFyYW1zID0gaW5pdF9waWNfcGFyYW1zLAotICAgIC53cml0ZV9zZXF1ZW5jZV9oZWFkZXJzID0g d3JpdGVfc2VxdWVuY2VfaGVhZGVycywKLSAgICAud3JpdGVfZXh0cmFfaGVhZGVycyA9IHdyaXRl X2V4dHJhX2hlYWRlcnMsCi0gICAgLndyaXRlX2ZpbGxlciA9IHdyaXRlX2ZpbGxlciwKLX07Ci0K LXN0YXRpYyBhdl9jb2xkIGludCB2dWxrYW5fZW5jb2RlX2gyNjVfaW5pdChBVkNvZGVjQ29udGV4 dCAqYXZjdHgpCi17Ci0gICAgaW50IGVyciwgcmVmX2wwLCByZWZfbDE7Ci0gICAgVnVsa2FuRW5j b2RlSDI2NUNvbnRleHQgKmVuYyA9IGF2Y3R4LT5wcml2X2RhdGE7Ci0gICAgRkZWdWxrYW5FbmNv ZGVDb250ZXh0ICpjdHggPSAmZW5jLT5jb21tb247Ci0gICAgRkZIV0Jhc2VFbmNvZGVDb250ZXh0 ICpiYXNlX2N0eCA9ICZjdHgtPmJhc2U7Ci0gICAgaW50IGZsYWdzOwotCi0gICAgaWYgKGF2Y3R4 LT5wcm9maWxlID09IEFWX1BST0ZJTEVfVU5LTk9XTikKLSAgICAgICAgYXZjdHgtPnByb2ZpbGUg PSBlbmMtPmNvbW1vbi5vcHRzLnByb2ZpbGU7Ci0KLSAgICBlbmMtPmNhcHMgPSAoVmtWaWRlb0Vu Y29kZUgyNjVDYXBhYmlsaXRpZXNLSFIpIHsKLSAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJF X1RZUEVfVklERU9fRU5DT0RFX0gyNjVfQ0FQQUJJTElUSUVTX0tIUiwKLSAgICB9OwotCi0gICAg ZW5jLT5xdWFsaXR5X3Byb3BzID0gKFZrVmlkZW9FbmNvZGVIMjY1UXVhbGl0eUxldmVsUHJvcGVy dGllc0tIUikgewotICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9WSURFT19FTkNP REVfSDI2NV9RVUFMSVRZX0xFVkVMX1BST1BFUlRJRVNfS0hSLAotICAgIH07Ci0KLSAgICBlcnIg PSBmZl92dWxrYW5fZW5jb2RlX2luaXQoYXZjdHgsICZlbmMtPmNvbW1vbiwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJmZmX3ZrX2VuY19oMjY1X2Rlc2MsICZlbmNfY2IsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZlbmMtPmNhcHMsICZlbmMtPnF1YWxpdHlfcHJv cHMpOwotICAgIGlmIChlcnIgPCAwKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgYXZfbG9n KGF2Y3R4LCBBVl9MT0dfVkVSQk9TRSwgIkgyNjUgZW5jb2RlciBjYXBhYmlsaXRpZXM6XG4iKTsK LSAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19WRVJCT1NFLCAiICAgIFN0YW5kYXJkIGNhcGFiaWxp dHkgZmxhZ3M6XG4iKTsKLSAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19WRVJCT1NFLCAiICAgICAg ICBzZXBhcmF0ZV9jb2xvcl9wbGFuZTogJWlcbiIsCi0gICAgICAgICAgICEhKGVuYy0+Y2Fwcy5z dGRTeW50YXhGbGFncyAmIFZLX1ZJREVPX0VOQ09ERV9IMjY1X1NURF9TRVBBUkFURV9DT0xPUl9Q TEFORV9GTEFHX1NFVF9CSVRfS0hSKSk7Ci0gICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfVkVSQk9T RSwgIiAgICAgICAgc2FtcGxlX2FkYXB0aXZlX29mZnNldDogJWlcbiIsCi0gICAgICAgICAgICEh KGVuYy0+Y2Fwcy5zdGRTeW50YXhGbGFncyAmIFZLX1ZJREVPX0VOQ09ERV9IMjY1X1NURF9TQU1Q TEVfQURBUFRJVkVfT0ZGU0VUX0VOQUJMRURfRkxBR19TRVRfQklUX0tIUikpOwotICAgIGF2X2xv ZyhhdmN0eCwgQVZfTE9HX1ZFUkJPU0UsICIgICAgICAgIHNjYWxpbmdfbGlzdHM6ICVpXG4iLAot ICAgICAgICAgICAhIShlbmMtPmNhcHMuc3RkU3ludGF4RmxhZ3MgJiBWS19WSURFT19FTkNPREVf SDI2NV9TVERfU0NBTElOR19MSVNUX0RBVEFfUFJFU0VOVF9GTEFHX1NFVF9CSVRfS0hSKSk7Ci0g ICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfVkVSQk9TRSwgIiAgICAgICAgcGNtOiAlaVxuIiwKLSAg ICAgICAgICAgISEoZW5jLT5jYXBzLnN0ZFN5bnRheEZsYWdzICYgVktfVklERU9fRU5DT0RFX0gy NjVfU1REX1BDTV9FTkFCTEVEX0ZMQUdfU0VUX0JJVF9LSFIpKTsKLSAgICBhdl9sb2coYXZjdHgs IEFWX0xPR19WRVJCT1NFLCAiICAgICAgICB0ZW1wb3JhbF9tdnA6ICVpXG4iLAotICAgICAgICAg ICAhIShlbmMtPmNhcHMuc3RkU3ludGF4RmxhZ3MgJiBWS19WSURFT19FTkNPREVfSDI2NV9TVERf U1BTX1RFTVBPUkFMX01WUF9FTkFCTEVEX0ZMQUdfU0VUX0JJVF9LSFIpKTsKLSAgICBhdl9sb2co YXZjdHgsIEFWX0xPR19WRVJCT1NFLCAiICAgICAgICBpbml0X3FwOiAlaVxuIiwKLSAgICAgICAg ICAgISEoZW5jLT5jYXBzLnN0ZFN5bnRheEZsYWdzICYgVktfVklERU9fRU5DT0RFX0gyNjVfU1RE X0lOSVRfUVBfTUlOVVMyNl9CSVRfS0hSKSk7Ci0gICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfVkVS Qk9TRSwgIiAgICAgICAgd2VpZ2h0ZWQ6JXMlc1xuIiwKLSAgICAgICAgICAgZW5jLT5jYXBzLnN0 ZFN5bnRheEZsYWdzICYgVktfVklERU9fRU5DT0RFX0gyNjVfU1REX1dFSUdIVEVEX1BSRURfRkxB R19TRVRfQklUX0tIUiA/Ci0gICAgICAgICAgICAgICAiIHByZWQiIDogIiIsCi0gICAgICAgICAg IGVuYy0+Y2Fwcy5zdGRTeW50YXhGbGFncyAmIFZLX1ZJREVPX0VOQ09ERV9IMjY1X1NURF9XRUlH SFRFRF9CSVBSRURfRkxBR19TRVRfQklUX0tIUiA/Ci0gICAgICAgICAgICAgICAiIGJpcHJlZCIg OiAiIik7Ci0gICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfVkVSQk9TRSwgIiAgICAgICAgcGFyYWxs ZWxfbWVyZ2VfbGV2ZWw6ICVpXG4iLAotICAgICAgICAgICAhIShlbmMtPmNhcHMuc3RkU3ludGF4 RmxhZ3MgJiBWS19WSURFT19FTkNPREVfSDI2NV9TVERfTE9HMl9QQVJBTExFTF9NRVJHRV9MRVZF TF9NSU5VUzJfQklUX0tIUikpOwotICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX1ZFUkJPU0UsICIg ICAgICAgIHNpZ25fZGF0YV9oaWRpbmc6ICVpXG4iLAotICAgICAgICAgICAhIShlbmMtPmNhcHMu c3RkU3ludGF4RmxhZ3MgJiBWS19WSURFT19FTkNPREVfSDI2NV9TVERfU0lHTl9EQVRBX0hJRElO R19FTkFCTEVEX0ZMQUdfU0VUX0JJVF9LSFIpKTsKLSAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19W RVJCT1NFLCAiICAgICAgICB0cmFuc2Zvcm1fc2tpcDolcyVzXG4iLAotICAgICAgICAgICBlbmMt PmNhcHMuc3RkU3ludGF4RmxhZ3MgJiBWS19WSURFT19FTkNPREVfSDI2NV9TVERfVFJBTlNGT1JN X1NLSVBfRU5BQkxFRF9GTEFHX1NFVF9CSVRfS0hSID8KLSAgICAgICAgICAgIiBzZXQiIDogIiIs Ci0gICAgICAgICAgIGVuYy0+Y2Fwcy5zdGRTeW50YXhGbGFncyAmIFZLX1ZJREVPX0VOQ09ERV9I MjY1X1NURF9UUkFOU0ZPUk1fU0tJUF9FTkFCTEVEX0ZMQUdfVU5TRVRfQklUX0tIUiA/Ci0gICAg ICAgICAgICIgdW5zZXQiIDogIiIpOwotICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX1ZFUkJPU0Us ICIgICAgICAgIHNsaWNlX2Nocm9tYV9xcF9vZmZzZXRzOiAlaVxuIiwKLSAgICAgICAgICAgISEo ZW5jLT5jYXBzLnN0ZFN5bnRheEZsYWdzICYgVktfVklERU9fRU5DT0RFX0gyNjVfU1REX1BQU19T TElDRV9DSFJPTUFfUVBfT0ZGU0VUU19QUkVTRU5UX0ZMQUdfU0VUX0JJVF9LSFIpKTsKLSAgICBh dl9sb2coYXZjdHgsIEFWX0xPR19WRVJCT1NFLCAiICAgICAgICB0cmFuc3F1YW50X2J5cGFzczog JWlcbiIsCi0gICAgICAgICAgICEhKGVuYy0+Y2Fwcy5zdGRTeW50YXhGbGFncyAmIFZLX1ZJREVP X0VOQ09ERV9IMjY1X1NURF9UUkFOU1FVQU5UX0JZUEFTU19FTkFCTEVEX0ZMQUdfU0VUX0JJVF9L SFIpKTsKLSAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19WRVJCT1NFLCAiICAgICAgICBjb25zdHJh aW5lZF9pbnRyYV9wcmVkOiAlaVxuIiwKLSAgICAgICAgICAgISEoZW5jLT5jYXBzLnN0ZFN5bnRh eEZsYWdzICYgVktfVklERU9fRU5DT0RFX0gyNjVfU1REX0NPTlNUUkFJTkVEX0lOVFJBX1BSRURf RkxBR19TRVRfQklUX0tIUikpOwotICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX1ZFUkJPU0UsICIg ICAgICAgIGVudHJ5cHlfY29kaW5nX3N5bmM6ICVpXG4iLAotICAgICAgICAgICAhIShlbmMtPmNh cHMuc3RkU3ludGF4RmxhZ3MgJiBWS19WSURFT19FTkNPREVfSDI2NV9TVERfRU5UUk9QWV9DT0RJ TkdfU1lOQ19FTkFCTEVEX0ZMQUdfU0VUX0JJVF9LSFIpKTsKLSAgICBhdl9sb2coYXZjdHgsIEFW X0xPR19WRVJCT1NFLCAiICAgICAgICBkZXBlbmRlbnRfc2xpY2Vfc2VnbWVudDolcyVzXG4iLAot ICAgICAgICAgICBlbmMtPmNhcHMuc3RkU3ludGF4RmxhZ3MgJiBWS19WSURFT19FTkNPREVfSDI2 NV9TVERfREVQRU5ERU5UX1NMSUNFX1NFR01FTlRTX0VOQUJMRURfRkxBR19TRVRfQklUX0tIUiA/ Ci0gICAgICAgICAgICAgICAiIGVuYWJsZWQiIDogIiIsCi0gICAgICAgICAgIGVuYy0+Y2Fwcy5z dGRTeW50YXhGbGFncyAmIFZLX1ZJREVPX0VOQ09ERV9IMjY1X1NURF9ERVBFTkRFTlRfU0xJQ0Vf U0VHTUVOVF9GTEFHX1NFVF9CSVRfS0hSID8KLSAgICAgICAgICAgICAgICIgc2V0IiA6ICIiKTsK LSAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19WRVJCT1NFLCAiICAgICAgICBzbGljZV9xcF9kZWx0 YTogJWlcbiIsCi0gICAgICAgICAgICEhKGVuYy0+Y2Fwcy5zdGRTeW50YXhGbGFncyAmIFZLX1ZJ REVPX0VOQ09ERV9IMjY1X1NURF9TTElDRV9RUF9ERUxUQV9CSVRfS0hSKSk7Ci0gICAgYXZfbG9n KGF2Y3R4LCBBVl9MT0dfVkVSQk9TRSwgIiAgICAgICAgZGlmZmVyZW50X3NsaWNlX3FwX2RlbHRh OiAlaVxuIiwKLSAgICAgICAgICAgISEoZW5jLT5jYXBzLnN0ZFN5bnRheEZsYWdzICYgVktfVklE RU9fRU5DT0RFX0gyNjVfU1REX0RJRkZFUkVOVF9TTElDRV9RUF9ERUxUQV9CSVRfS0hSKSk7Ci0K LSAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19WRVJCT1NFLCAiICAgIENhcGFiaWxpdHkgZmxhZ3M6 XG4iKTsKLSAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19WRVJCT1NFLCAiICAgICAgICBoZHJfY29t cGxpYW5jZTogJWlcbiIsCi0gICAgICAgICAgICEhKGVuYy0+Y2Fwcy5mbGFncyAmIFZLX1ZJREVP X0VOQ09ERV9IMjY0X0NBUEFCSUxJVFlfSFJEX0NPTVBMSUFOQ0VfQklUX0tIUikpOwotICAgIGF2 X2xvZyhhdmN0eCwgQVZfTE9HX1ZFUkJPU0UsICIgICAgICAgIHByZWRfd2VpZ2h0X3RhYmxlX2dl bmVyYXRlZDogJWlcbiIsCi0gICAgICAgICAgICEhKGVuYy0+Y2Fwcy5mbGFncyAmIFZLX1ZJREVP X0VOQ09ERV9IMjY0X0NBUEFCSUxJVFlfUFJFRElDVElPTl9XRUlHSFRfVEFCTEVfR0VORVJBVEVE X0JJVF9LSFIpKTsKLSAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19WRVJCT1NFLCAiICAgICAgICBy b3dfdW5hbGlnbmVkX3NsaWNlOiAlaVxuIiwKLSAgICAgICAgICAgISEoZW5jLT5jYXBzLmZsYWdz ICYgVktfVklERU9fRU5DT0RFX0gyNjRfQ0FQQUJJTElUWV9ST1dfVU5BTElHTkVEX1NMSUNFX0JJ VF9LSFIpKTsKLSAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19WRVJCT1NFLCAiICAgICAgICBkaWZm ZXJlbnRfc2xpY2VfdHlwZTogJWlcbiIsCi0gICAgICAgICAgICEhKGVuYy0+Y2Fwcy5mbGFncyAm IFZLX1ZJREVPX0VOQ09ERV9IMjY0X0NBUEFCSUxJVFlfRElGRkVSRU5UX1NMSUNFX1RZUEVfQklU X0tIUikpOwotICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX1ZFUkJPU0UsICIgICAgICAgIGJfZnJh bWVfaW5fbDBfbGlzdDogJWlcbiIsCi0gICAgICAgICAgICEhKGVuYy0+Y2Fwcy5mbGFncyAmIFZL X1ZJREVPX0VOQ09ERV9IMjY0X0NBUEFCSUxJVFlfQl9GUkFNRV9JTl9MMF9MSVNUX0JJVF9LSFIp KTsKLSAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19WRVJCT1NFLCAiICAgICAgICBiX2ZyYW1lX2lu X2wxX2xpc3Q6ICVpXG4iLAotICAgICAgICAgICAhIShlbmMtPmNhcHMuZmxhZ3MgJiBWS19WSURF T19FTkNPREVfSDI2NF9DQVBBQklMSVRZX0JfRlJBTUVfSU5fTDFfTElTVF9CSVRfS0hSKSk7Ci0g ICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfVkVSQk9TRSwgIiAgICAgICAgcGVyX3BpY3RfdHlwZV9t aW5fbWF4X3FwOiAlaVxuIiwKLSAgICAgICAgICAgISEoZW5jLT5jYXBzLmZsYWdzICYgVktfVklE RU9fRU5DT0RFX0gyNjRfQ0FQQUJJTElUWV9QRVJfUElDVFVSRV9UWVBFX01JTl9NQVhfUVBfQklU X0tIUikpOwotICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX1ZFUkJPU0UsICIgICAgICAgIHBlcl9z bGljZV9jb25zdGFudF9xcDogJWlcbiIsCi0gICAgICAgICAgICEhKGVuYy0+Y2Fwcy5mbGFncyAm IFZLX1ZJREVPX0VOQ09ERV9IMjY0X0NBUEFCSUxJVFlfUEVSX1NMSUNFX0NPTlNUQU5UX1FQX0JJ VF9LSFIpKTsKLSAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19WRVJCT1NFLCAiICAgICAgICBnZW5l cmF0ZV9wcmVmaXhfbmFsdTogJWlcbiIsCi0gICAgICAgICAgICEhKGVuYy0+Y2Fwcy5mbGFncyAm IFZLX1ZJREVPX0VOQ09ERV9IMjY0X0NBUEFCSUxJVFlfR0VORVJBVEVfUFJFRklYX05BTFVfQklU X0tIUikpOwotCi0gICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfVkVSQk9TRSwgIiAgICBDYXBhYmls aXRpZXM6XG4iKTsKLSAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19WRVJCT1NFLCAiICAgICAgICBt YXhMZXZlbElkYzogJWlcbiIsCi0gICAgICAgICAgIGVuYy0+Y2Fwcy5tYXhMZXZlbElkYyk7Ci0g ICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfVkVSQk9TRSwgIiAgICAgICAgbWF4U2xpY2VDb3VudDog JWlcbiIsCi0gICAgICAgICAgIGVuYy0+Y2Fwcy5tYXhTbGljZVNlZ21lbnRDb3VudCk7Ci0gICAg YXZfbG9nKGF2Y3R4LCBBVl9MT0dfVkVSQk9TRSwgIiAgICAgICAgbWF4VGlsZXM6ICVpeCVpXG4i LAotICAgICAgICAgICBlbmMtPmNhcHMubWF4VGlsZXMud2lkdGgsIGVuYy0+Y2Fwcy5tYXhUaWxl cy5oZWlnaHQpOwotICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX1ZFUkJPU0UsICIgICAgICAgIGNi dFNpemVzOiAweCV4XG4iLAotICAgICAgICAgICBlbmMtPmNhcHMuY3RiU2l6ZXMpOwotICAgIGF2 X2xvZyhhdmN0eCwgQVZfTE9HX1ZFUkJPU0UsICIgICAgICAgIHRyYW5zZm9ybUJsb2NrU2l6ZXM6 IDB4JXhcbiIsCi0gICAgICAgICAgIGVuYy0+Y2Fwcy50cmFuc2Zvcm1CbG9ja1NpemVzKTsKLSAg ICBhdl9sb2coYXZjdHgsIEFWX0xPR19WRVJCT1NFLCAiICAgICAgICBtYXgoUC9CKVBpY3R1cmVM MFJlZmVyZW5jZUNvdW50OiAlaSBQJ3M7ICVpIEInc1xuIiwKLSAgICAgICAgICAgZW5jLT5jYXBz Lm1heFBQaWN0dXJlTDBSZWZlcmVuY2VDb3VudCwKLSAgICAgICAgICAgZW5jLT5jYXBzLm1heEJQ aWN0dXJlTDBSZWZlcmVuY2VDb3VudCk7Ci0gICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfVkVSQk9T RSwgIiAgICAgICAgbWF4TDFSZWZlcmVuY2VDb3VudDogJWlcbiIsCi0gICAgICAgICAgIGVuYy0+ Y2Fwcy5tYXhMMVJlZmVyZW5jZUNvdW50KTsKLSAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19WRVJC T1NFLCAiICAgICAgICBtYXhTdWJMYXllckNvdW50OiAlaVxuIiwKLSAgICAgICAgICAgZW5jLT5j YXBzLm1heFN1YkxheWVyQ291bnQpOwotICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX1ZFUkJPU0Us ICIgICAgICAgIGV4cGVjdER5YWRpY1RlbXBvcmFsTGF5ZXJQYXR0ZXJuOiAlaVxuIiwKLSAgICAg ICAgICAgZW5jLT5jYXBzLmV4cGVjdER5YWRpY1RlbXBvcmFsU3ViTGF5ZXJQYXR0ZXJuKTsKLSAg ICBhdl9sb2coYXZjdHgsIEFWX0xPR19WRVJCT1NFLCAiICAgICAgICBtaW4vbWF4IFFwOiBbJWks ICVpXVxuIiwKLSAgICAgICAgICAgZW5jLT5jYXBzLm1pblFwLCBlbmMtPmNhcHMubWF4UXApOwot ICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX1ZFUkJPU0UsICIgICAgICAgIHByZWZlcnNHb3BSZW1h aW5pbmdGcmFtZXM6ICVpXG4iLAotICAgICAgICAgICBlbmMtPmNhcHMucHJlZmVyc0dvcFJlbWFp bmluZ0ZyYW1lcyk7Ci0gICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfVkVSQk9TRSwgIiAgICAgICAg cmVxdWlyZXNHb3BSZW1haW5pbmdGcmFtZXM6ICVpXG4iLAotICAgICAgICAgICBlbmMtPmNhcHMu cmVxdWlyZXNHb3BSZW1haW5pbmdGcmFtZXMpOwotCi0gICAgZXJyID0gaW5pdF9lbmNfb3B0aW9u cyhhdmN0eCk7Ci0gICAgaWYgKGVyciA8IDApCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICBm bGFncyA9IGN0eC0+Y29kZWMtPmZsYWdzOwotICAgIGlmICghZW5jLT5jYXBzLm1heFBQaWN0dXJl TDBSZWZlcmVuY2VDb3VudCAmJgotICAgICAgICAhZW5jLT5jYXBzLm1heEJQaWN0dXJlTDBSZWZl cmVuY2VDb3VudCAmJgotICAgICAgICAhZW5jLT5jYXBzLm1heEwxUmVmZXJlbmNlQ291bnQpIHsK LSAgICAgICAgLyogSW50cmEtb25seSAqLwotICAgICAgICBmbGFncyB8PSBGRl9IV19GTEFHX0lO VFJBX09OTFk7Ci0gICAgICAgIHJlZl9sMCA9IHJlZl9sMSA9IDA7Ci0gICAgfSBlbHNlIGlmICgh ZW5jLT5jYXBzLm1heFBQaWN0dXJlTDBSZWZlcmVuY2VDb3VudCkgewotICAgICAgICAvKiBObyBQ LWZyYW1lcz8gSG93LiAqLwotICAgICAgICBiYXNlX2N0eC0+cF90b19ncGIgPSAxOwotICAgICAg ICByZWZfbDAgPSBlbmMtPmNhcHMubWF4QlBpY3R1cmVMMFJlZmVyZW5jZUNvdW50OwotICAgICAg ICByZWZfbDEgPSBlbmMtPmNhcHMubWF4TDFSZWZlcmVuY2VDb3VudDsKLSAgICB9IGVsc2UgaWYg KCFlbmMtPmNhcHMubWF4QlBpY3R1cmVMMFJlZmVyZW5jZUNvdW50ICYmCi0gICAgICAgICAgICAg ICAhZW5jLT5jYXBzLm1heEwxUmVmZXJlbmNlQ291bnQpIHsKLSAgICAgICAgLyogTm8gQi1mcmFt ZXMgKi8KLSAgICAgICAgZmxhZ3MgJj0gfihGRl9IV19GTEFHX0JfUElDVFVSRVMgfCBGRl9IV19G TEFHX0JfUElDVFVSRV9SRUZFUkVOQ0VTKTsKLSAgICAgICAgcmVmX2wwID0gZW5jLT5jYXBzLm1h eFBQaWN0dXJlTDBSZWZlcmVuY2VDb3VudDsKLSAgICAgICAgcmVmX2wxID0gMDsKLSAgICB9IGVs c2UgewotICAgICAgICAvKiBQIGFuZCBCIGZyYW1lcyAqLwotICAgICAgICByZWZfbDAgPSBGRk1J TihlbmMtPmNhcHMubWF4UFBpY3R1cmVMMFJlZmVyZW5jZUNvdW50LAotICAgICAgICAgICAgICAg ICAgICAgICBlbmMtPmNhcHMubWF4QlBpY3R1cmVMMFJlZmVyZW5jZUNvdW50KTsKLSAgICAgICAg cmVmX2wxID0gZW5jLT5jYXBzLm1heEwxUmVmZXJlbmNlQ291bnQ7Ci0gICAgfQotCi0gICAgZXJy ID0gZmZfaHdfYmFzZV9pbml0X2dvcF9zdHJ1Y3R1cmUoYmFzZV9jdHgsIGF2Y3R4LCByZWZfbDAs IHJlZl9sMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncywg MCk7Ci0gICAgaWYgKGVyciA8IDApCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICBiYXNlX2N0 eC0+b3V0cHV0X2RlbGF5ID0gYmFzZV9jdHgtPmJfcGVyX3A7Ci0gICAgYmFzZV9jdHgtPmRlY29k ZV9kZWxheSA9IGJhc2VfY3R4LT5tYXhfYl9kZXB0aDsKLQotICAgIC8qIEluaXQgQ0JTICovCi0g ICAgZXJyID0gZmZfY2JzX2luaXQoJmVuYy0+Y2JzLCBBVl9DT0RFQ19JRF9IRVZDLCBhdmN0eCk7 Ci0gICAgaWYgKGVyciA8IDApCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICAvKiBDcmVhdGUg dW5pdHMgYW5kIHNlc3Npb24gcGFyYW1ldGVycyAqLwotICAgIGVyciA9IGluaXRfYmFzZV91bml0 cyhhdmN0eCk7Ci0gICAgaWYgKGVyciA8IDApCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICAv KiBXcml0ZSBvdXQgZXh0cmFkYXRhICovCi0gICAgZXJyID0gZmZfdnVsa2FuX3dyaXRlX2dsb2Jh bF9oZWFkZXIoYXZjdHgsICZlbmMtPmNvbW1vbik7Ci0gICAgaWYgKGVyciA8IDApCi0gICAgICAg IHJldHVybiBlcnI7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIGF2X2NvbGQgaW50IHZ1 bGthbl9lbmNvZGVfaDI2NV9jbG9zZShBVkNvZGVjQ29udGV4dCAqYXZjdHgpCi17Ci0gICAgVnVs a2FuRW5jb2RlSDI2NUNvbnRleHQgKmVuYyA9IGF2Y3R4LT5wcml2X2RhdGE7Ci0gICAgZmZfdnVs a2FuX2VuY29kZV91bmluaXQoJmVuYy0+Y29tbW9uKTsKLSAgICByZXR1cm4gMDsKLX0KLQotI2Rl ZmluZSBPRkZTRVQoeCkgb2Zmc2V0b2YoVnVsa2FuRW5jb2RlSDI2NUNvbnRleHQsIHgpCi0jZGVm aW5lIEZMQUdTIChBVl9PUFRfRkxBR19WSURFT19QQVJBTSB8IEFWX09QVF9GTEFHX0VOQ09ESU5H X1BBUkFNKQotc3RhdGljIGNvbnN0IEFWT3B0aW9uIHZ1bGthbl9lbmNvZGVfaDI2NV9vcHRpb25z W10gPSB7Ci0gICAgSFdfQkFTRV9FTkNPREVfQ09NTU9OX09QVElPTlMsCi0gICAgVlVMS0FOX0VO Q09ERV9DT01NT05fT1BUSU9OUywKLQotICAgIHsgInByb2ZpbGUiLCAiU2V0IHByb2ZpbGUgKHBy b2ZpbGVfaWRjIGFuZCBjb25zdHJhaW50X3NldCpfZmxhZykiLAotICAgICAgT0ZGU0VUKGNvbW1v bi5vcHRzLnByb2ZpbGUpLCBBVl9PUFRfVFlQRV9JTlQsCi0gICAgICB7IC5pNjQgPSBBVl9QUk9G SUxFX1VOS05PV04gfSwgQVZfUFJPRklMRV9VTktOT1dOLCAweGZmZmYsIEZMQUdTLCAudW5pdCA9 ICJwcm9maWxlIiB9LAotCi0jZGVmaW5lIFBST0ZJTEUobmFtZSwgdmFsdWUpICBuYW1lLCBOVUxM LCAwLCBBVl9PUFRfVFlQRV9DT05TVCwgXAotICAgICAgeyAuaTY0ID0gdmFsdWUgfSwgMCwgMCwg RkxBR1MsIC51bml0ID0gInByb2ZpbGUiCi0gICAgeyBQUk9GSUxFKCJtYWluIiwgICAgICAgICAg ICAgICBBVl9QUk9GSUxFX0hFVkNfTUFJTikgfSwKLSAgICB7IFBST0ZJTEUoIm1haW4xMCIsICAg ICAgICAgICAgIEFWX1BST0ZJTEVfSEVWQ19NQUlOXzEwKSB9LAotICAgIHsgUFJPRklMRSgicmV4 dCIsICAgICAgICAgICAgICAgQVZfUFJPRklMRV9IRVZDX1JFWFQpIH0sCi0jdW5kZWYgUFJPRklM RQotCi0gICAgeyAidGllciIsICJTZXQgdGllciAoZ2VuZXJhbF90aWVyX2ZsYWcpIiwgT0ZGU0VU KGNvbW1vbi5vcHRzLnRpZXIpLCBBVl9PUFRfVFlQRV9JTlQsIHsgLmk2NCA9IDAgfSwgMCwgMSwg RkxBR1MsIC51bml0ID0gInRpZXIiIH0sCi0gICAgICAgIHsgIm1haW4iLCBOVUxMLCAwLCBBVl9P UFRfVFlQRV9DT05TVCwgeyAuaTY0ID0gMCB9LCAwLCAwLCBGTEFHUywgLnVuaXQgPSAidGllciIg fSwKLSAgICAgICAgeyAiaGlnaCIsIE5VTEwsIDAsIEFWX09QVF9UWVBFX0NPTlNULCB7IC5pNjQg PSAxIH0sIDAsIDAsIEZMQUdTLCAudW5pdCA9ICJ0aWVyIiB9LAotCi0gICAgeyAibGV2ZWwiLCAi U2V0IGxldmVsIChnZW5lcmFsX2xldmVsX2lkYykiLAotICAgICAgT0ZGU0VUKGNvbW1vbi5vcHRz LmxldmVsKSwgQVZfT1BUX1RZUEVfSU5ULAotICAgICAgeyAuaTY0ID0gQVZfTEVWRUxfVU5LTk9X TiB9LCBBVl9MRVZFTF9VTktOT1dOLCAweGZmLCBGTEFHUywgLnVuaXQgPSAibGV2ZWwiIH0sCi0K LSNkZWZpbmUgTEVWRUwobmFtZSwgdmFsdWUpIG5hbWUsIE5VTEwsIDAsIEFWX09QVF9UWVBFX0NP TlNULCBcCi0gICAgICB7IC5pNjQgPSB2YWx1ZSB9LCAwLCAwLCBGTEFHUywgLnVuaXQgPSAibGV2 ZWwiCi0gICAgeyBMRVZFTCgiMSIsICAgIDMwKSB9LAotICAgIHsgTEVWRUwoIjIiLCAgICA2MCkg fSwKLSAgICB7IExFVkVMKCIyLjEiLCAgNjMpIH0sCi0gICAgeyBMRVZFTCgiMyIsICAgIDkwKSB9 LAotICAgIHsgTEVWRUwoIjMuMSIsICA5MykgfSwKLSAgICB7IExFVkVMKCI0IiwgICAxMjApIH0s Ci0gICAgeyBMRVZFTCgiNC4xIiwgMTIzKSB9LAotICAgIHsgTEVWRUwoIjUiLCAgIDE1MCkgfSwK LSAgICB7IExFVkVMKCI1LjEiLCAxNTMpIH0sCi0gICAgeyBMRVZFTCgiNS4yIiwgMTU2KSB9LAot ICAgIHsgTEVWRUwoIjYiLCAgIDE4MCkgfSwKLSAgICB7IExFVkVMKCI2LjEiLCAxODMpIH0sCi0g ICAgeyBMRVZFTCgiNi4yIiwgMTg2KSB9LAotI3VuZGVmIExFVkVMCi0KLSAgICB7ICJ1bml0cyIs ICJTZXQgdW5pdHMgdG8gaW5jbHVkZSIsIE9GRlNFVCh1bml0X2VsZW1zKSwgQVZfT1BUX1RZUEVf RkxBR1MsIHsgLmk2NCA9IFVOSVRfU0VJX01BU1RFUklOR19ESVNQTEFZIHwgVU5JVF9TRUlfQ09O VEVOVF9MSUdIVF9MRVZFTCB8IFVOSVRfU0VJX0E1M19DQyB9LCAwLCBJTlRfTUFYLCBGTEFHUywg InVuaXRzIiB9LAotICAgICAgICB7ICJoZHIiLCAgICAgICAgIkluY2x1ZGUgSERSIG1ldGFkYXRh IGZvciBtYXN0ZXJpbmcgZGlzcGxheSBjb2xvdXIgdm9sdW1lIGFuZCBjb250ZW50IGxpZ2h0IGxl dmVsIGluZm9ybWF0aW9uIiwgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsgLmk2NCA9IFVOSVRfU0VJ X01BU1RFUklOR19ESVNQTEFZIHwgVU5JVF9TRUlfQ09OVEVOVF9MSUdIVF9MRVZFTCB9LCBJTlRf TUlOLCBJTlRfTUFYLCBGTEFHUywgInVuaXRzIiB9LAotICAgICAgICB7ICJhNTNfY2MiLCAgICAg IkluY2x1ZGUgQS81MyBjYXB0aW9uIGRhdGEiLCAwLCBBVl9PUFRfVFlQRV9DT05TVCwgeyAuaTY0 ID0gVU5JVF9TRUlfQTUzX0NDIH0sIElOVF9NSU4sIElOVF9NQVgsIEZMQUdTLCAidW5pdHMiIH0s Ci0KLSAgICB7IE5VTEwgfSwKLX07Ci0KLXN0YXRpYyBjb25zdCBGRkNvZGVjRGVmYXVsdCB2dWxr YW5fZW5jb2RlX2gyNjVfZGVmYXVsdHNbXSA9IHsKLSAgICB7ICJiIiwgICAgICAgICAgICAgICIw IiAgIH0sCi0gICAgeyAiYmYiLCAgICAgICAgICAgICAiMiIgICB9LAotICAgIHsgImciLCAgICAg ICAgICAgICAgIjMwMCIgfSwKLSAgICB7ICJpX3FmYWN0b3IiLCAgICAgICIxIiAgIH0sCi0gICAg eyAiaV9xb2Zmc2V0IiwgICAgICAiMCIgICB9LAotICAgIHsgImJfcWZhY3RvciIsICAgICAgIjYv NSIgfSwKLSAgICB7ICJiX3FvZmZzZXQiLCAgICAgICIwIiAgIH0sCi0gICAgeyAicW1pbiIsICAg ICAgICAgICAiLTEiICB9LAotICAgIHsgInFtYXgiLCAgICAgICAgICAgIi0xIiAgfSwKLSAgICB7 ICJyZWZzIiwgICAgICAgICAgICIwIiAgIH0sCi0gICAgeyBOVUxMIH0sCi19OwotCi1zdGF0aWMg Y29uc3QgQVZDbGFzcyB2dWxrYW5fZW5jb2RlX2gyNjVfY2xhc3MgPSB7Ci0gICAgLmNsYXNzX25h bWUgPSAiaGV2Y192dWxrYW4iLAotICAgIC5pdGVtX25hbWUgID0gYXZfZGVmYXVsdF9pdGVtX25h bWUsCi0gICAgLm9wdGlvbiAgICAgPSB2dWxrYW5fZW5jb2RlX2gyNjVfb3B0aW9ucywKLSAgICAu dmVyc2lvbiAgICA9IExJQkFWVVRJTF9WRVJTSU9OX0lOVCwKLX07Ci0KLWNvbnN0IEZGQ29kZWMg ZmZfaGV2Y192dWxrYW5fZW5jb2RlciA9IHsKLSAgICAucC5uYW1lICAgICAgICAgPSAiaGV2Y192 dWxrYW4iLAotICAgIENPREVDX0xPTkdfTkFNRSgiSC4yNjUvSEVWQyAoVnVsa2FuKSIpLAotICAg IC5wLnR5cGUgICAgICAgICA9IEFWTUVESUFfVFlQRV9WSURFTywKLSAgICAucC5pZCAgICAgICAg ICAgPSBBVl9DT0RFQ19JRF9IRVZDLAotICAgIC5wcml2X2RhdGFfc2l6ZSA9IHNpemVvZihWdWxr YW5FbmNvZGVIMjY1Q29udGV4dCksCi0gICAgLmluaXQgICAgICAgICAgID0gJnZ1bGthbl9lbmNv ZGVfaDI2NV9pbml0LAotICAgIEZGX0NPREVDX1JFQ0VJVkVfUEFDS0VUX0NCKCZmZl92dWxrYW5f ZW5jb2RlX3JlY2VpdmVfcGFja2V0KSwKLSAgICAuY2xvc2UgICAgICAgICAgPSAmdnVsa2FuX2Vu Y29kZV9oMjY1X2Nsb3NlLAotICAgIC5wLnByaXZfY2xhc3MgICA9ICZ2dWxrYW5fZW5jb2RlX2gy NjVfY2xhc3MsCi0gICAgLnAuY2FwYWJpbGl0aWVzID0gQVZfQ09ERUNfQ0FQX0RFTEFZIHwKLSAg ICAgICAgICAgICAgICAgICAgICBBVl9DT0RFQ19DQVBfSEFSRFdBUkUgfAotICAgICAgICAgICAg ICAgICAgICAgIEFWX0NPREVDX0NBUF9EUjEgfAotICAgICAgICAgICAgICAgICAgICAgIEFWX0NP REVDX0NBUF9FTkNPREVSX0ZMVVNIIHwKLSAgICAgICAgICAgICAgICAgICAgICBBVl9DT0RFQ19D QVBfRU5DT0RFUl9SRU9SREVSRURfT1BBUVVFLAotICAgIC5jYXBzX2ludGVybmFsICA9IEZGX0NP REVDX0NBUF9JTklUX0NMRUFOVVAsCi0gICAgLmRlZmF1bHRzICAgICAgID0gdnVsa2FuX2VuY29k ZV9oMjY1X2RlZmF1bHRzLAotICAgIENPREVDX1BJWEZNVFMoQVZfUElYX0ZNVF9WVUxLQU4pLAot ICAgIC5od19jb25maWdzICAgICA9IGZmX3Z1bGthbl9lbmNvZGVfaHdfY29uZmlncywKLSAgICAu cC53cmFwcGVyX25hbWUgPSAidnVsa2FuIiwKLX07Ci0tIAoyLjQ5LjEKCgpGcm9tIDExYjBlN2Nk NmFiYzUzNjA4N2IyZTRjNjNiZGRjZTU5NDliZWViMzggTW9uIFNlcCAxNyAwMDowMDowMCAyMDAx CkZyb206IEphbWFpa2ExIDxsdWthc3pjejE4QHdwLnBsPgpEYXRlOiBXZWQsIDMgU2VwIDIwMjUg MTM6MzU6NTEgKzAwMDAKU3ViamVjdDogW1BBVENIIDA3OC8xMThdIENoYW5naW5nIHZ1bGthbiBm aWxlIGRpcmVjdG9yeQoKLS0tCiBsaWJhdmNvZGVjL3Z1bGthbi92dWxrYW5fZW5jb2RlX2gyNjUu YyB8IDE3OTUgKysrKysrKysrKysrKysrKysrKysrKysrCiAxIGZpbGUgY2hhbmdlZCwgMTc5NSBp bnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliYXZjb2RlYy92dWxrYW4vdnVsa2Fu X2VuY29kZV9oMjY1LmMKCmRpZmYgLS1naXQgYS9saWJhdmNvZGVjL3Z1bGthbi92dWxrYW5fZW5j b2RlX2gyNjUuYyBiL2xpYmF2Y29kZWMvdnVsa2FuL3Z1bGthbl9lbmNvZGVfaDI2NS5jCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLmQxYjZhZjI1ZmIKLS0tIC9kZXYvbnVs bAorKysgYi9saWJhdmNvZGVjL3Z1bGthbi92dWxrYW5fZW5jb2RlX2gyNjUuYwpAQCAtMCwwICsx LDE3OTUgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCisgKgorICogRkZt cGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0 aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor ICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy YWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRv IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl ZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisgKi8KKworI2luY2x1 ZGUgImxpYmF2dXRpbC9pbnRlcm5hbC5oIgorI2luY2x1ZGUgImxpYmF2dXRpbC9vcHQuaCIKKyNp bmNsdWRlICJsaWJhdnV0aWwvbWVtLmgiCisKKyNpbmNsdWRlICJsaWJhdmNvZGVjL2Nicy5oIgor I2luY2x1ZGUgImxpYmF2Y29kZWMvY2JzX2gyNjUuaCIKKyNpbmNsdWRlICJsaWJhdmNvZGVjL2F0 c2NfYTUzLmgiCisjaW5jbHVkZSAibGliYXZ1dGlsL21hc3RlcmluZ19kaXNwbGF5X21ldGFkYXRh LmgiCisKKyNpbmNsdWRlICJsaWJhdmNvZGVjL2NvZGVjX2ludGVybmFsLmgiCisjaW5jbHVkZSAi bGliYXZjb2RlYy92ZXJzaW9uLmgiCisjaW5jbHVkZSAibGliYXZjb2RlYy9od19iYXNlX2VuY29k ZV9oMjY1LmgiCisKKyNpbmNsdWRlICJ2dWxrYW5fZW5jb2RlLmgiCisKK2VudW0gVW5pdEVsZW1z IHsKKyAgICBVTklUX0FVRCAgICAgICAgICAgICAgICAgICAgID0gMSA8PCAwLAorICAgIFVOSVRf U0VJX01BU1RFUklOR19ESVNQTEFZICAgPSAxIDw8IDEsCisgICAgVU5JVF9TRUlfQ09OVEVOVF9M SUdIVF9MRVZFTCA9IDEgPDwgMiwKKyAgICBVTklUX1NFSV9BNTNfQ0MgICAgICAgICAgICAgID0g MSA8PCAzLAorfTsKKworY29uc3QgRkZWdWxrYW5FbmNvZGVEZXNjcmlwdG9yIGZmX3ZrX2VuY19o MjY1X2Rlc2MgPSB7CisgICAgLmNvZGVjX2lkICAgICAgICAgPSBBVl9DT0RFQ19JRF9IMjY1LAor ICAgIC5lbmNvZGVfZXh0ZW5zaW9uID0gRkZfVktfRVhUX1ZJREVPX0VOQ09ERV9IMjY1LAorICAg IC5lbmNvZGVfb3AgICAgICAgID0gVktfVklERU9fQ09ERUNfT1BFUkFUSU9OX0VOQ09ERV9IMjY1 X0JJVF9LSFIsCisgICAgLmV4dF9wcm9wcyA9IHsKKyAgICAgICAgLmV4dGVuc2lvbk5hbWUgPSBW S19TVERfVlVMS0FOX1ZJREVPX0NPREVDX0gyNjVfRU5DT0RFX0VYVEVOU0lPTl9OQU1FLAorICAg ICAgICAuc3BlY1ZlcnNpb24gICA9IFZLX1NURF9WVUxLQU5fVklERU9fQ09ERUNfSDI2NV9FTkNP REVfU1BFQ19WRVJTSU9OLAorICAgIH0sCit9OworCit0eXBlZGVmIHN0cnVjdCBWdWxrYW5FbmNv ZGVIMjY1UGljdHVyZSB7CisgICAgaW50IGZyYW1lX251bTsKKyAgICBpbnQ2NF90IGxhc3RfaWRy X2ZyYW1lOworICAgIHVpbnQxNl90IGlkcl9waWNfaWQ7CisgICAgaW50IHByaW1hcnlfcGljX3R5 cGU7CisgICAgaW50IHNsaWNlX3R5cGU7CisgICAgaW50IHBpY19vcmRlcl9jbnQ7CisgICAgaW50 IHBpY190eXBlOworCisgICAgZW51bSBVbml0RWxlbXMgdW5pdHNfbmVlZGVkOworCisgICAgVmtW aWRlb0VuY29kZUgyNjVSYXRlQ29udHJvbEluZm9LSFIgdmtyY19pbmZvOworICAgIFZrVmlkZW9F bmNvZGVIMjY1UmF0ZUNvbnRyb2xMYXllckluZm9LSFIgdmtyY19sYXllcl9pbmZvOworCisgICAg U3RkVmlkZW9FbmNvZGVIMjY1UGljdHVyZUluZm8gICBoMjY1cGljX2luZm87CisgICAgVmtWaWRl b0VuY29kZUgyNjVQaWN0dXJlSW5mb0tIUiB2a2gyNjVwaWNfaW5mbzsKKworICAgIFN0ZFZpZGVv RW5jb2RlSDI2NVdlaWdodFRhYmxlIHNsaWNlX3d0OworICAgIFN0ZFZpZGVvRW5jb2RlSDI2NVNs aWNlU2VnbWVudEhlYWRlciBzbGljZV9oZHI7CisgICAgVmtWaWRlb0VuY29kZUgyNjVOYWx1U2xp Y2VTZWdtZW50SW5mb0tIUiB2a3NsaWNlOworCisgICAgU3RkVmlkZW9FbmNvZGVIMjY1UmVmZXJl bmNlSW5mbyBoMjY1ZHBiX2luZm87CisgICAgVmtWaWRlb0VuY29kZUgyNjVEcGJTbG90SW5mb0tI UiB2a2gyNjVkcGJfaW5mbzsKKworICAgIFN0ZFZpZGVvRW5jb2RlSDI2NVJlZmVyZW5jZUxpc3Rz SW5mbyByZWZfbGlzdF9pbmZvOworICAgIFN0ZFZpZGVvRW5jb2RlSDI2NUxvbmdUZXJtUmVmUGlj cyBsX3JwczsKKyAgICBTdGRWaWRlb0gyNjVTaG9ydFRlcm1SZWZQaWNTZXQgc19ycHM7Cit9IFZ1 bGthbkVuY29kZUgyNjVQaWN0dXJlOworCit0eXBlZGVmIHN0cnVjdCBWdWxrYW5FbmNvZGVIMjY1 Q29udGV4dCB7CisgICAgRkZWdWxrYW5FbmNvZGVDb250ZXh0IGNvbW1vbjsKKworICAgIEZGSFdC YXNlRW5jb2RlSDI2NSB1bml0czsKKyAgICBGRkhXQmFzZUVuY29kZUgyNjVPcHRzIHVuaXRfb3B0 czsKKworICAgIGVudW0gVW5pdEVsZW1zIHVuaXRfZWxlbXM7CisKKyAgICB1aW50OF90IGZpeGVk X3FwX2lkcjsKKyAgICB1aW50OF90IGZpeGVkX3FwX3A7CisgICAgdWludDhfdCBmaXhlZF9xcF9i OworCisgICAgdWludDY0X3QgaHJkX2J1ZmZlcl9zaXplOworICAgIHVpbnQ2NF90IGluaXRpYWxf YnVmZmVyX2Z1bGxuZXNzOworCisgICAgVmtWaWRlb0VuY29kZUgyNjVQcm9maWxlSW5mb0tIUiBw cm9maWxlOworCisgICAgVmtWaWRlb0VuY29kZUgyNjVDYXBhYmlsaXRpZXNLSFIgY2FwczsKKyAg ICBWa1ZpZGVvRW5jb2RlSDI2NVF1YWxpdHlMZXZlbFByb3BlcnRpZXNLSFIgcXVhbGl0eV9wcm9w czsKKworICAgIENvZGVkQml0c3RyZWFtQ29udGV4dCAqY2JzOworICAgIENvZGVkQml0c3RyZWFt RnJhZ21lbnQgY3VycmVudF9hY2Nlc3NfdW5pdDsKKworICAgIEgyNjVSYXdBVUQgICAgICAgICAg ICAgICAgICAgICAgICAgcmF3X2F1ZDsKKworICAgIFNFSVJhd01hc3RlcmluZ0Rpc3BsYXlDb2xv dXJWb2x1bWUgc2VpX21hc3RlcmluZ19kaXNwbGF5OworICAgIFNFSVJhd0NvbnRlbnRMaWdodExl dmVsSW5mbyAgICAgICAgc2VpX2NvbnRlbnRfbGlnaHRfbGV2ZWw7CisgICAgU0VJUmF3VXNlckRh dGFSZWdpc3RlcmVkICAgICAgICAgICBzZWlfYTUzY2M7CisgICAgdm9pZCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICpzZWlfYTUzY2NfZGF0YTsKK30gVnVsa2FuRW5jb2RlSDI2NUNvbnRl eHQ7CisKK3N0YXRpYyBpbnQgaW5pdF9waWNfcmMoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LCBGRkhX QmFzZUVuY29kZVBpY3R1cmUgKnBpYywKKyAgICAgICAgICAgICAgICAgICAgICAgVmtWaWRlb0Vu Y29kZVJhdGVDb250cm9sSW5mb0tIUiAqcmNfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAg VmtWaWRlb0VuY29kZVJhdGVDb250cm9sTGF5ZXJJbmZvS0hSICpyY19sYXllcikKK3sKKyAgICBW dWxrYW5FbmNvZGVIMjY1Q29udGV4dCAqZW5jID0gYXZjdHgtPnByaXZfZGF0YTsKKyAgICBGRlZ1 bGthbkVuY29kZUNvbnRleHQgICAqY3R4ID0gJmVuYy0+Y29tbW9uOworICAgIFZ1bGthbkVuY29k ZUgyNjVQaWN0dXJlICAqaHAgPSBwaWMtPmNvZGVjX3ByaXY7CisKKyAgICBocC0+dmtyY19pbmZv ID0gKFZrVmlkZW9FbmNvZGVIMjY1UmF0ZUNvbnRyb2xJbmZvS0hSKSB7CisgICAgICAgIC5zVHlw ZSA9IFZLX1NUUlVDVFVSRV9UWVBFX1ZJREVPX0VOQ09ERV9IMjY1X1JBVEVfQ09OVFJPTF9JTkZP X0tIUiwKKyAgICAgICAgLmZsYWdzID0gVktfVklERU9fRU5DT0RFX0gyNjVfUkFURV9DT05UUk9M X1JFRkVSRU5DRV9QQVRURVJOX0ZMQVRfQklUX0tIUiB8CisgICAgICAgICAgICAgICAgIFZLX1ZJ REVPX0VOQ09ERV9IMjY1X1JBVEVfQ09OVFJPTF9SRUdVTEFSX0dPUF9CSVRfS0hSLAorICAgICAg ICAuaWRyUGVyaW9kID0gY3R4LT5iYXNlLmdvcF9zaXplLAorICAgICAgICAuZ29wRnJhbWVDb3Vu dCA9IGN0eC0+YmFzZS5nb3Bfc2l6ZSwKKyAgICAgICAgLmNvbnNlY3V0aXZlQkZyYW1lQ291bnQg PSBGRk1BWChjdHgtPmJhc2UuYl9wZXJfcCAtIDEsIDApLAorICAgICAgICAuc3ViTGF5ZXJDb3Vu dCA9IDAsCisgICAgfTsKKyAgICByY19pbmZvLT5wTmV4dCA9ICZocC0+dmtyY19pbmZvOworCisg ICAgaWYgKHJjX2luZm8tPnJhdGVDb250cm9sTW9kZSA+IFZLX1ZJREVPX0VOQ09ERV9SQVRFX0NP TlRST0xfTU9ERV9ESVNBQkxFRF9CSVRfS0hSKSB7CisgICAgICAgIHJjX2luZm8tPnZpcnR1YWxC dWZmZXJTaXplSW5NcyA9IChlbmMtPmhyZF9idWZmZXJfc2l6ZSAqIDEwMDBMTCkgLyBhdmN0eC0+ Yml0X3JhdGU7CisgICAgICAgIHJjX2luZm8tPmluaXRpYWxWaXJ0dWFsQnVmZmVyU2l6ZUluTXMg PSAoZW5jLT5pbml0aWFsX2J1ZmZlcl9mdWxsbmVzcyAqIDEwMDBMTCkgLyBhdmN0eC0+Yml0X3Jh dGU7CisKKyAgICAgICAgaHAtPnZrcmNfbGF5ZXJfaW5mbyA9IChWa1ZpZGVvRW5jb2RlSDI2NVJh dGVDb250cm9sTGF5ZXJJbmZvS0hSKSB7CisgICAgICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RV UkVfVFlQRV9WSURFT19FTkNPREVfSDI2NV9SQVRFX0NPTlRST0xfTEFZRVJfSU5GT19LSFIsCisK KyAgICAgICAgICAgIC51c2VNaW5RcCAgPSBhdmN0eC0+cW1pbiA+IDAsCisgICAgICAgICAgICAu bWluUXAucXBJID0gYXZjdHgtPnFtaW4gPiAwID8gYXZjdHgtPnFtaW4gOiAwLAorICAgICAgICAg ICAgLm1pblFwLnFwUCA9IGF2Y3R4LT5xbWluID4gMCA/IGF2Y3R4LT5xbWluIDogMCwKKyAgICAg ICAgICAgIC5taW5RcC5xcEIgPSBhdmN0eC0+cW1pbiA+IDAgPyBhdmN0eC0+cW1pbiA6IDAsCisK KyAgICAgICAgICAgIC51c2VNYXhRcCAgPSBhdmN0eC0+cW1heCA+IDAsCisgICAgICAgICAgICAu bWF4UXAucXBJID0gYXZjdHgtPnFtYXggPiAwID8gYXZjdHgtPnFtYXggOiAwLAorICAgICAgICAg ICAgLm1heFFwLnFwUCA9IGF2Y3R4LT5xbWF4ID4gMCA/IGF2Y3R4LT5xbWF4IDogMCwKKyAgICAg ICAgICAgIC5tYXhRcC5xcEIgPSBhdmN0eC0+cW1heCA+IDAgPyBhdmN0eC0+cW1heCA6IDAsCisK KyAgICAgICAgICAgIC51c2VNYXhGcmFtZVNpemUgPSAwLAorICAgICAgICB9OworICAgICAgICBy Y19sYXllci0+cE5leHQgPSAmaHAtPnZrcmNfbGF5ZXJfaW5mbzsKKyAgICAgICAgaHAtPnZrcmNf aW5mby5zdWJMYXllckNvdW50ID0gMTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworc3Rh dGljIGludCB2a19lbmNfaDI2NV91cGRhdGVfcGljX2luZm8oQVZDb2RlY0NvbnRleHQgKmF2Y3R4 LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkZIV0Jhc2VFbmNvZGVQ aWN0dXJlICpwaWMpCit7CisgICAgVnVsa2FuRW5jb2RlSDI2NUNvbnRleHQgICAqZW5jID0gYXZj dHgtPnByaXZfZGF0YTsKKyAgICBWdWxrYW5FbmNvZGVIMjY1UGljdHVyZSAgICAqaHAgPSBwaWMt PmNvZGVjX3ByaXY7CisgICAgRkZIV0Jhc2VFbmNvZGVQaWN0dXJlICAgICpwcmV2ID0gcGljLT5w cmV2OworICAgIFZ1bGthbkVuY29kZUgyNjVQaWN0dXJlICpocHJldiA9IHByZXYgPyBwcmV2LT5j b2RlY19wcml2IDogTlVMTDsKKworICAgIGlmIChwaWMtPnR5cGUgPT0gRkZfSFdfUElDVFVSRV9U WVBFX0lEUikgeworICAgICAgICBhdl9hc3NlcnQwKHBpYy0+ZGlzcGxheV9vcmRlciA9PSBwaWMt PmVuY29kZV9vcmRlcik7CisKKyAgICAgICAgaHAtPmxhc3RfaWRyX2ZyYW1lID0gcGljLT5kaXNw bGF5X29yZGVyOworCisgICAgICAgIGhwLT5zbGljZV90eXBlICAgICA9IFNURF9WSURFT19IMjY1 X1NMSUNFX1RZUEVfSTsKKyAgICAgICAgaHAtPnBpY190eXBlICAgICAgID0gU1REX1ZJREVPX0gy NjVfUElDVFVSRV9UWVBFX0lEUjsKKyAgICB9IGVsc2UgeworICAgICAgICBhdl9hc3NlcnQwKHBy ZXYpOworICAgICAgICBocC0+bGFzdF9pZHJfZnJhbWUgPSBocHJldi0+bGFzdF9pZHJfZnJhbWU7 CisKKyAgICAgICAgaWYgKHBpYy0+dHlwZSA9PSBGRl9IV19QSUNUVVJFX1RZUEVfSSkgeworICAg ICAgICAgICAgaHAtPnNsaWNlX3R5cGUgICAgID0gU1REX1ZJREVPX0gyNjVfU0xJQ0VfVFlQRV9J OworICAgICAgICAgICAgaHAtPnBpY190eXBlICAgICAgID0gU1REX1ZJREVPX0gyNjVfUElDVFVS RV9UWVBFX0k7CisgICAgICAgIH0gZWxzZSBpZiAocGljLT50eXBlID09IEZGX0hXX1BJQ1RVUkVf VFlQRV9QKSB7CisgICAgICAgICAgICBhdl9hc3NlcnQwKHBpYy0+cmVmc1swXSk7CisgICAgICAg ICAgICBocC0+c2xpY2VfdHlwZSAgICAgPSBTVERfVklERU9fSDI2NV9TTElDRV9UWVBFX1A7Cisg ICAgICAgICAgICBocC0+cGljX3R5cGUgICAgICAgPSBTVERfVklERU9fSDI2NV9QSUNUVVJFX1RZ UEVfUDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEZGSFdCYXNlRW5jb2RlUGljdHVy ZSAqaXJhcF9yZWY7CisgICAgICAgICAgICBhdl9hc3NlcnQwKHBpYy0+cmVmc1swXVswXSAmJiBw aWMtPnJlZnNbMV1bMF0pOworICAgICAgICAgICAgZm9yIChpcmFwX3JlZiA9IHBpYzsgaXJhcF9y ZWY7IGlyYXBfcmVmID0gaXJhcF9yZWYtPnJlZnNbMV1bMF0pIHsKKyAgICAgICAgICAgICAgICBp ZiAoaXJhcF9yZWYtPnR5cGUgPT0gRkZfSFdfUElDVFVSRV9UWVBFX0kpCisgICAgICAgICAgICAg ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaHAtPnNsaWNlX3R5cGUg PSBTVERfVklERU9fSDI2NV9TTElDRV9UWVBFX0I7CisgICAgICAgICAgICBocC0+cGljX3R5cGUg ICA9IFNURF9WSURFT19IMjY1X1BJQ1RVUkVfVFlQRV9COworICAgICAgICB9CisgICAgfQorICAg IGhwLT5waWNfb3JkZXJfY250ID0gcGljLT5kaXNwbGF5X29yZGVyIC0gaHAtPmxhc3RfaWRyX2Zy YW1lOworCisgICAgaHAtPnVuaXRzX25lZWRlZCA9IDA7CisKKyAgICBpZiAoZW5jLT51bml0X2Vs ZW1zICYgVU5JVF9BVUQpIHsKKyAgICAgICAgaHAtPnVuaXRzX25lZWRlZCB8PSBVTklUX0FVRDsK KyAgICAgICAgZW5jLT5yYXdfYXVkID0gKEgyNjVSYXdBVUQpIHsKKyAgICAgICAgICAgIC5uYWxf dW5pdF9oZWFkZXIgPSB7CisgICAgICAgICAgICAgICAgLm5hbF91bml0X3R5cGUgICAgICAgICA9 IEhFVkNfTkFMX0FVRCwKKyAgICAgICAgICAgICAgICAubnVoX2xheWVyX2lkICAgICAgICAgID0g MCwKKyAgICAgICAgICAgICAgICAubnVoX3RlbXBvcmFsX2lkX3BsdXMxID0gMSwKKyAgICAgICAg ICAgIH0sCisgICAgICAgICAgICAucGljX3R5cGUgPSBocC0+cGljX3R5cGUsCisgICAgICAgIH07 CisgICAgfQorCisgICAgLy8gT25seSBsb29rIGZvciB0aGUgbWV0YWRhdGEgb24gSS9JRFIgZnJh bWUgb24gdGhlIG91dHB1dC4gV2UKKyAgICAvLyBtYXkgZm9yY2UgYW4gSURSIGZyYW1lIG9uIHRo ZSBvdXRwdXQgd2hlcmUgdGhlIG1ldGFkYXRhIGdldHMKKyAgICAvLyBjaGFuZ2VkIG9uIHRoZSBp bnB1dCBmcmFtZS4KKyAgICBpZiAoKGVuYy0+dW5pdF9lbGVtcyAmIFVOSVRfU0VJX01BU1RFUklO R19ESVNQTEFZKSAmJgorICAgICAgICAocGljLT50eXBlID09IEZGX0hXX1BJQ1RVUkVfVFlQRV9J IHx8IHBpYy0+dHlwZSA9PSBGRl9IV19QSUNUVVJFX1RZUEVfSURSKSkgeworICAgICAgICBBVkZy YW1lU2lkZURhdGEgKnNkID0KKyAgICAgICAgICAgIGF2X2ZyYW1lX2dldF9zaWRlX2RhdGEocGlj LT5pbnB1dF9pbWFnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVZfRlJB TUVfREFUQV9NQVNURVJJTkdfRElTUExBWV9NRVRBREFUQSk7CisKKyAgICAgICAgaWYgKHNkKSB7 CisgICAgICAgICAgICBBVk1hc3RlcmluZ0Rpc3BsYXlNZXRhZGF0YSAqbWRtID0gKEFWTWFzdGVy aW5nRGlzcGxheU1ldGFkYXRhICopc2QtPmRhdGE7CisKKyAgICAgICAgICAgIC8vIFNFSSBpcyBu ZWVkZWQgd2hlbiBib3RoIHRoZSBwcmltYXJpZXMgYW5kIGx1bWluYW5jZSBhcmUgc2V0CisgICAg ICAgICAgICBpZiAobWRtLT5oYXNfcHJpbWFyaWVzICYmIG1kbS0+aGFzX2x1bWluYW5jZSkgewor ICAgICAgICAgICAgICAgIFNFSVJhd01hc3RlcmluZ0Rpc3BsYXlDb2xvdXJWb2x1bWUgKm1kY3Yg PQorICAgICAgICAgICAgICAgICAgICAmZW5jLT5zZWlfbWFzdGVyaW5nX2Rpc3BsYXk7CisgICAg ICAgICAgICAgICAgY29uc3QgaW50IG1hcHBpbmdbM10gPSB7MSwgMiwgMH07CisgICAgICAgICAg ICAgICAgY29uc3QgaW50IGNocm9tYV9kZW4gPSA1MDAwMDsKKyAgICAgICAgICAgICAgICBjb25z dCBpbnQgbHVtYV9kZW4gICA9IDEwMDAwOworCisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9 IDA7IGkgPCAzOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50IGogPSBtYXBw aW5nW2ldOworICAgICAgICAgICAgICAgICAgICBtZGN2LT5kaXNwbGF5X3ByaW1hcmllc194W2ld ID0KKyAgICAgICAgICAgICAgICAgICAgICAgIEZGTUlOKGxyaW50KGNocm9tYV9kZW4gKgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZfcTJkKG1kbS0+ZGlzcGxheV9wcmlt YXJpZXNbal1bMF0pKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNocm9tYV9kZW4p OworICAgICAgICAgICAgICAgICAgICBtZGN2LT5kaXNwbGF5X3ByaW1hcmllc195W2ldID0KKyAg ICAgICAgICAgICAgICAgICAgICAgIEZGTUlOKGxyaW50KGNocm9tYV9kZW4gKgorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZfcTJkKG1kbS0+ZGlzcGxheV9wcmltYXJpZXNb al1bMV0pKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNocm9tYV9kZW4pOworICAg ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIG1kY3YtPndoaXRlX3BvaW50X3ggPQor ICAgICAgICAgICAgICAgICAgICBGRk1JTihscmludChjaHJvbWFfZGVuICogYXZfcTJkKG1kbS0+ d2hpdGVfcG9pbnRbMF0pKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2hyb21hX2Rlbik7 CisgICAgICAgICAgICAgICAgbWRjdi0+d2hpdGVfcG9pbnRfeSA9CisgICAgICAgICAgICAgICAg ICAgIEZGTUlOKGxyaW50KGNocm9tYV9kZW4gKiBhdl9xMmQobWRtLT53aGl0ZV9wb2ludFsxXSkp LAorICAgICAgICAgICAgICAgICAgICAgICAgICBjaHJvbWFfZGVuKTsKKworICAgICAgICAgICAg ICAgIG1kY3YtPm1heF9kaXNwbGF5X21hc3RlcmluZ19sdW1pbmFuY2UgPQorICAgICAgICAgICAg ICAgICAgICBscmludChsdW1hX2RlbiAqIGF2X3EyZChtZG0tPm1heF9sdW1pbmFuY2UpKTsKKyAg ICAgICAgICAgICAgICBtZGN2LT5taW5fZGlzcGxheV9tYXN0ZXJpbmdfbHVtaW5hbmNlID0KKyAg ICAgICAgICAgICAgICAgICAgRkZNSU4obHJpbnQobHVtYV9kZW4gKiBhdl9xMmQobWRtLT5taW5f bHVtaW5hbmNlKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgIG1kY3YtPm1heF9kaXNwbGF5 X21hc3RlcmluZ19sdW1pbmFuY2UpOworCisgICAgICAgICAgICAgICAgaHAtPnVuaXRzX25lZWRl ZCB8PSBVTklUX1NFSV9NQVNURVJJTkdfRElTUExBWTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg fQorICAgIH0KKworICAgIGlmICgoZW5jLT51bml0X2VsZW1zICYgVU5JVF9TRUlfQ09OVEVOVF9M SUdIVF9MRVZFTCkgJiYKKyAgICAgICAgKHBpYy0+dHlwZSA9PSBGRl9IV19QSUNUVVJFX1RZUEVf SSB8fCBwaWMtPnR5cGUgPT0gRkZfSFdfUElDVFVSRV9UWVBFX0lEUikpIHsKKyAgICAgICAgQVZG cmFtZVNpZGVEYXRhICpzZCA9IGF2X2ZyYW1lX2dldF9zaWRlX2RhdGEocGljLT5pbnB1dF9pbWFn ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg QVZfRlJBTUVfREFUQV9DT05URU5UX0xJR0hUX0xFVkVMKTsKKworICAgICAgICBpZiAoc2QpIHsK KyAgICAgICAgICAgIEFWQ29udGVudExpZ2h0TWV0YWRhdGEgKmNsbSA9IChBVkNvbnRlbnRMaWdo dE1ldGFkYXRhICopc2QtPmRhdGE7CisgICAgICAgICAgICBTRUlSYXdDb250ZW50TGlnaHRMZXZl bEluZm8gKmNsbGkgPSAmZW5jLT5zZWlfY29udGVudF9saWdodF9sZXZlbDsKKworICAgICAgICAg ICAgY2xsaS0+bWF4X2NvbnRlbnRfbGlnaHRfbGV2ZWwgICAgID0gRkZNSU4oY2xtLT5NYXhDTEws ICA2NTUzNSk7CisgICAgICAgICAgICBjbGxpLT5tYXhfcGljX2F2ZXJhZ2VfbGlnaHRfbGV2ZWwg PSBGRk1JTihjbG0tPk1heEZBTEwsIDY1NTM1KTsKKworICAgICAgICAgICAgaHAtPnVuaXRzX25l ZWRlZCB8PSBVTklUX1NFSV9DT05URU5UX0xJR0hUX0xFVkVMOworICAgICAgICB9CisgICAgfQor CisgICAgaWYgKGVuYy0+dW5pdF9lbGVtcyAmIFVOSVRfU0VJX0E1M19DQykgeworICAgICAgICBp bnQgZXJyOworICAgICAgICBzaXplX3Qgc2VpX2E1M2NjX2xlbjsKKyAgICAgICAgYXZfZnJlZXAo JmVuYy0+c2VpX2E1M2NjX2RhdGEpOworICAgICAgICBlcnIgPSBmZl9hbGxvY19hNTNfc2VpKHBp Yy0+aW5wdXRfaW1hZ2UsIDAsICZlbmMtPnNlaV9hNTNjY19kYXRhLCAmc2VpX2E1M2NjX2xlbik7 CisgICAgICAgIGlmIChlcnIgPCAwKQorICAgICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgICAg aWYgKGVuYy0+c2VpX2E1M2NjX2RhdGEgIT0gTlVMTCkgeworICAgICAgICAgICAgZW5jLT5zZWlf YTUzY2MuaXR1X3RfdDM1X2NvdW50cnlfY29kZSA9IDE4MTsKKyAgICAgICAgICAgIGVuYy0+c2Vp X2E1M2NjLmRhdGEgPSAodWludDhfdCAqKWVuYy0+c2VpX2E1M2NjX2RhdGEgKyAxOworICAgICAg ICAgICAgZW5jLT5zZWlfYTUzY2MuZGF0YV9sZW5ndGggPSBzZWlfYTUzY2NfbGVuIC0gMTsKKwor ICAgICAgICAgICAgaHAtPnVuaXRzX25lZWRlZCB8PSBVTklUX1NFSV9BNTNfQ0M7CisgICAgICAg IH0KKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2V0dXBfc2xpY2Vz KEFWQ29kZWNDb250ZXh0ICphdmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBGRkhXQmFz ZUVuY29kZVBpY3R1cmUgKnBpYykKK3sKKyAgICBWdWxrYW5FbmNvZGVIMjY1Q29udGV4dCAqZW5j ID0gYXZjdHgtPnByaXZfZGF0YTsKKyAgICBWdWxrYW5FbmNvZGVIMjY1UGljdHVyZSAqaHAgPSBw aWMtPmNvZGVjX3ByaXY7CisKKyAgICBocC0+c2xpY2Vfd3QgPSAoU3RkVmlkZW9FbmNvZGVIMjY1 V2VpZ2h0VGFibGUpIHsKKyAgICAgICAgLmZsYWdzID0gKFN0ZFZpZGVvRW5jb2RlSDI2NVdlaWdo dFRhYmxlRmxhZ3MpIHsKKyAgICAgICAgICAgIC5sdW1hX3dlaWdodF9sMF9mbGFnID0gMCwKKyAg ICAgICAgICAgIC5jaHJvbWFfd2VpZ2h0X2wwX2ZsYWcgPSAwLAorICAgICAgICAgICAgLmx1bWFf d2VpZ2h0X2wxX2ZsYWcgPSAwLAorICAgICAgICAgICAgLmNocm9tYV93ZWlnaHRfbDFfZmxhZyA9 IDAsCisgICAgICAgIH0sCisgICAgICAgIC5sdW1hX2xvZzJfd2VpZ2h0X2Rlbm9tID0gMCwKKyAg ICAgICAgLmRlbHRhX2Nocm9tYV9sb2cyX3dlaWdodF9kZW5vbSA9IDAsCisgICAgICAgIC5kZWx0 YV9sdW1hX3dlaWdodF9sMCA9IHsgMCB9LAorICAgICAgICAubHVtYV9vZmZzZXRfbDAgPSB7IDAg fSwKKyAgICAgICAgLmRlbHRhX2Nocm9tYV93ZWlnaHRfbDAgPSB7IHsgMCB9IH0sCisgICAgICAg IC5kZWx0YV9jaHJvbWFfb2Zmc2V0X2wwID0geyB7IDAgfSB9LAorICAgICAgICAuZGVsdGFfbHVt YV93ZWlnaHRfbDEgPSB7IDAgfSwKKyAgICAgICAgLmx1bWFfb2Zmc2V0X2wxID0geyAwIH0sCisg ICAgICAgIC5kZWx0YV9jaHJvbWFfd2VpZ2h0X2wxID0geyB7IDAgfSB9LAorICAgICAgICAuZGVs dGFfY2hyb21hX29mZnNldF9sMSA9IHsgeyAwIH0gfSwKKyAgICB9OworCisgICAgaHAtPnNsaWNl X2hkciA9IChTdGRWaWRlb0VuY29kZUgyNjVTbGljZVNlZ21lbnRIZWFkZXIpIHsKKyAgICAgICAg LmZsYWdzID0gKFN0ZFZpZGVvRW5jb2RlSDI2NVNsaWNlU2VnbWVudEhlYWRlckZsYWdzKSB7Cisg ICAgICAgICAgICAuZmlyc3Rfc2xpY2Vfc2VnbWVudF9pbl9waWNfZmxhZyA9IDEsCisgICAgICAg ICAgICAuZGVwZW5kZW50X3NsaWNlX3NlZ21lbnRfZmxhZyA9IDAsCisgICAgICAgICAgICAuc2xp Y2Vfc2FvX2x1bWFfZmxhZyA9IGVuYy0+dW5pdHMucmF3X3Nwcy5zYW1wbGVfYWRhcHRpdmVfb2Zm c2V0X2VuYWJsZWRfZmxhZywKKyAgICAgICAgICAgIC5zbGljZV9zYW9fY2hyb21hX2ZsYWcgPSBl bmMtPnVuaXRzLnJhd19zcHMuc2FtcGxlX2FkYXB0aXZlX29mZnNldF9lbmFibGVkX2ZsYWcsCisg ICAgICAgICAgICAubnVtX3JlZl9pZHhfYWN0aXZlX292ZXJyaWRlX2ZsYWcgPSAwLAorICAgICAg ICAgICAgLm12ZF9sMV96ZXJvX2ZsYWcgPSAwLAorICAgICAgICAgICAgLmNhYmFjX2luaXRfZmxh ZyA9IDAsCisgICAgICAgICAgICAuY3VfY2hyb21hX3FwX29mZnNldF9lbmFibGVkX2ZsYWcgPSAw LAorICAgICAgICAgICAgLmRlYmxvY2tpbmdfZmlsdGVyX292ZXJyaWRlX2ZsYWcgPSAwLAorICAg ICAgICAgICAgLnNsaWNlX2RlYmxvY2tpbmdfZmlsdGVyX2Rpc2FibGVkX2ZsYWcgPSAwLAorICAg ICAgICAgICAgLmNvbGxvY2F0ZWRfZnJvbV9sMF9mbGFnID0gMSwKKyAgICAgICAgICAgIC5zbGlj ZV9sb29wX2ZpbHRlcl9hY3Jvc3Nfc2xpY2VzX2VuYWJsZWRfZmxhZyA9IDAsCisgICAgICAgICAg ICAvKiBSZXNlcnZlZCAqLworICAgICAgICB9LAorICAgICAgICAuc2xpY2VfdHlwZSA9IGhwLT5z bGljZV90eXBlLAorICAgICAgICAuc2xpY2Vfc2VnbWVudF9hZGRyZXNzID0gMCwKKyAgICAgICAg LmNvbGxvY2F0ZWRfcmVmX2lkeCA9IDAsCisgICAgICAgIC5NYXhOdW1NZXJnZUNhbmQgPSA1LAor ICAgICAgICAuc2xpY2VfY2JfcXBfb2Zmc2V0ID0gMCwKKyAgICAgICAgLnNsaWNlX2NyX3FwX29m ZnNldCA9IDAsCisgICAgICAgIC5zbGljZV9iZXRhX29mZnNldF9kaXYyID0gMCwKKyAgICAgICAg LnNsaWNlX3RjX29mZnNldF9kaXYyID0gMCwKKyAgICAgICAgLnNsaWNlX2FjdF95X3FwX29mZnNl dCA9IDAsCisgICAgICAgIC5zbGljZV9hY3RfY2JfcXBfb2Zmc2V0ID0gMCwKKyAgICAgICAgLnNs aWNlX2FjdF9jcl9xcF9vZmZzZXQgPSAwLAorICAgICAgICAuc2xpY2VfcXBfZGVsdGEgPSAwLCAv KiBGaWxsZWQgaW4gYmVsb3cgKi8KKyAgICAgICAgLyogUmVzZXJ2ZWQgKi8KKyAgICAgICAgLnBX ZWlnaHRUYWJsZSA9IE5VTEwsIC8vICZocC0+c2xpY2Vfd3QsCisgICAgfTsKKworICAgIGhwLT52 a3NsaWNlID0gKFZrVmlkZW9FbmNvZGVIMjY1TmFsdVNsaWNlU2VnbWVudEluZm9LSFIpIHsKKyAg ICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfVklERU9fRU5DT0RFX0gyNjVfTkFMVV9T TElDRV9TRUdNRU5UX0lORk9fS0hSLAorICAgICAgICAucE5leHQgPSBOVUxMLAorICAgICAgICAu Y29uc3RhbnRRcCA9IHBpYy0+dHlwZSA9PSBGRl9IV19QSUNUVVJFX1RZUEVfQiA/IGVuYy0+Zml4 ZWRfcXBfYiA6CisgICAgICAgICAgICAgICAgICAgICAgcGljLT50eXBlID09IEZGX0hXX1BJQ1RV UkVfVFlQRV9QID8gZW5jLT5maXhlZF9xcF9wIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmMtPmZpeGVkX3FwX2lkciwKKyAgICAg ICAgLnBTdGRTbGljZVNlZ21lbnRIZWFkZXIgPSAmaHAtPnNsaWNlX2hkciwKKyAgICB9OworCisg ICAgaWYgKGVuYy0+Y29tbW9uLm9wdHMucmNfbW9kZSAhPSBWS19WSURFT19FTkNPREVfUkFURV9D T05UUk9MX01PREVfRElTQUJMRURfQklUX0tIUikKKyAgICAgICAgaHAtPnZrc2xpY2UuY29uc3Rh bnRRcCA9IDA7CisKKyAgICBocC0+c2xpY2VfaGRyLnNsaWNlX3FwX2RlbHRhID0gaHAtPnZrc2xp Y2UuY29uc3RhbnRRcCAtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlbmMt PnVuaXRzLnJhd19wcHMuaW5pdF9xcF9taW51czI2ICsgMjYpOworCisgICAgaHAtPnZraDI2NXBp Y19pbmZvLnBOYWx1U2xpY2VTZWdtZW50RW50cmllcyA9ICZocC0+dmtzbGljZTsKKyAgICBocC0+ dmtoMjY1cGljX2luZm8ubmFsdVNsaWNlU2VnbWVudEVudHJ5Q291bnQgPSAxOworfQorCitzdGF0 aWMgdm9pZCBzZXR1cF9yZWZzKEFWQ29kZWNDb250ZXh0ICphdmN0eCwKKyAgICAgICAgICAgICAg ICAgICAgICAgRkZIV0Jhc2VFbmNvZGVQaWN0dXJlICpwaWMsCisgICAgICAgICAgICAgICAgICAg ICAgIFZrVmlkZW9FbmNvZGVJbmZvS0hSICplbmNvZGVfaW5mbykKK3sKKyAgICBpbnQgaSwgajsK KyAgICBWdWxrYW5FbmNvZGVIMjY1Q29udGV4dCAqZW5jID0gYXZjdHgtPnByaXZfZGF0YTsKKyAg ICBWdWxrYW5FbmNvZGVIMjY1UGljdHVyZSAqaHAgPSBwaWMtPmNvZGVjX3ByaXY7CisKKyAgICBo cC0+cmVmX2xpc3RfaW5mbyA9IChTdGRWaWRlb0VuY29kZUgyNjVSZWZlcmVuY2VMaXN0c0luZm8p IHsKKyAgICAgICAgLmZsYWdzID0gKFN0ZFZpZGVvRW5jb2RlSDI2NVJlZmVyZW5jZUxpc3RzSW5m b0ZsYWdzKSB7CisgICAgICAgICAgICAucmVmX3BpY19saXN0X21vZGlmaWNhdGlvbl9mbGFnX2ww ID0gMCwKKyAgICAgICAgICAgIC5yZWZfcGljX2xpc3RfbW9kaWZpY2F0aW9uX2ZsYWdfbDEgPSAw LAorICAgICAgICAgICAgLyogUmVzZXJ2ZWQgKi8KKyAgICAgICAgfSwKKyAgICAgICAgLyogTWF5 IGJlIG92ZXJyaWRkZW4gZHVyaW5nIHNldHVwX3NsaWNlcygpICovCisgICAgICAgIC5udW1fcmVm X2lkeF9sMF9hY3RpdmVfbWludXMxID0gcGljLT5uYl9yZWZzWzBdIC0gMSwKKyAgICAgICAgLm51 bV9yZWZfaWR4X2wxX2FjdGl2ZV9taW51czEgPSBwaWMtPm5iX3JlZnNbMV0gLSAxLAorICAgICAg ICAvKiBSZXNlcnZlZCAqLworICAgICAgICAubGlzdF9lbnRyeV9sMCA9IHsgMCB9LAorICAgICAg ICAubGlzdF9lbnRyeV9sMSA9IHsgMCB9LAorICAgIH07CisKKyAgICBmb3IgKGkgPSAwOyBpIDwg U1REX1ZJREVPX0gyNjVfTUFYX05VTV9MSVNUX1JFRjsgaSsrKQorICAgICAgICBocC0+cmVmX2xp c3RfaW5mby5SZWZQaWNMaXN0MFtpXSA9IGhwLT5yZWZfbGlzdF9pbmZvLlJlZlBpY0xpc3QxW2ld ID0gLTE7CisKKyAgICAvKiBOb3RlOiByZWFsbHkgbm90IHN1cmUgKi8KKyAgICBmb3IgKGkgPSAw OyBpIDwgcGljLT5uYl9yZWZzWzBdOyBpKyspIHsKKyAgICAgICAgVmtWaWRlb1JlZmVyZW5jZVNs b3RJbmZvS0hSICpzbG90X2luZm87CisgICAgICAgIHNsb3RfaW5mbyA9IChWa1ZpZGVvUmVmZXJl bmNlU2xvdEluZm9LSFIgKikmZW5jb2RlX2luZm8tPnBSZWZlcmVuY2VTbG90c1tpXTsKKyAgICAg ICAgaHAtPnJlZl9saXN0X2luZm8uUmVmUGljTGlzdDBbaV0gPSBzbG90X2luZm8tPnNsb3RJbmRl eDsKKyAgICB9CisKKyAgICAvKiBOb3RlOiByZWFsbHkgbm90IHN1cmUgKi8KKyAgICBmb3IgKGkg PSAwOyBpIDwgcGljLT5uYl9yZWZzWzFdOyBpKyspIHsKKyAgICAgICAgVmtWaWRlb1JlZmVyZW5j ZVNsb3RJbmZvS0hSICpzbG90X2luZm87CisgICAgICAgIHNsb3RfaW5mbyA9IChWa1ZpZGVvUmVm ZXJlbmNlU2xvdEluZm9LSFIgKikmZW5jb2RlX2luZm8tPnBSZWZlcmVuY2VTbG90c1twaWMtPm5i X3JlZnNbMF0gKyBpXTsKKyAgICAgICAgaHAtPnJlZl9saXN0X2luZm8uUmVmUGljTGlzdDFbaV0g PSBzbG90X2luZm8tPnNsb3RJbmRleDsKKyAgICB9CisKKyAgICBocC0+aDI2NXBpY19pbmZvLnBS ZWZMaXN0cyA9ICZocC0+cmVmX2xpc3RfaW5mbzsKKworICAgIGlmIChwaWMtPnR5cGUgIT0gRkZf SFdfUElDVFVSRV9UWVBFX0lEUikgeworICAgICAgICBTdGRWaWRlb0gyNjVTaG9ydFRlcm1SZWZQ aWNTZXQgKnJwczsKKyAgICAgICAgVnVsa2FuRW5jb2RlSDI2NVBpY3R1cmUgKnN0cnA7CisgICAg ICAgIGludCBycHNfcG9jW01BWF9EUEJfU0laRV07CisgICAgICAgIGludCBycHNfdXNlZFtNQVhf RFBCX1NJWkVdOworICAgICAgICBpbnQgcG9jLCBycHNfcGljczsKKworICAgICAgICBocC0+aDI2 NXBpY19pbmZvLmZsYWdzLnNob3J0X3Rlcm1fcmVmX3BpY19zZXRfc3BzX2ZsYWcgPSAwOworCisg ICAgICAgIHJwcyA9ICZocC0+c19ycHM7CisgICAgICAgIG1lbXNldChycHMsIDAsIHNpemVvZigq cnBzKSk7CisKKyAgICAgICAgcnBzX3BpY3MgPSAwOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwg TUFYX1JFRkVSRU5DRV9MSVNUX05VTTsgaSsrKSB7CisgICAgICAgICAgICBmb3IgKGogPSAwOyBq IDwgcGljLT5uYl9yZWZzW2ldOyBqKyspIHsKKyAgICAgICAgICAgICAgICBzdHJwID0gcGljLT5y ZWZzW2ldW2pdLT5jb2RlY19wcml2OworICAgICAgICAgICAgICAgIHJwc19wb2NbcnBzX3BpY3Nd ICA9IHN0cnAtPnBpY19vcmRlcl9jbnQ7CisgICAgICAgICAgICAgICAgcnBzX3VzZWRbcnBzX3Bp Y3NdID0gMTsKKyAgICAgICAgICAgICAgICArK3Jwc19waWNzOworICAgICAgICAgICAgfQorICAg ICAgICB9CisKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IHBpYy0+bmJfZHBiX3BpY3M7IGkrKykg eworICAgICAgICAgICAgaWYgKHBpYy0+ZHBiW2ldID09IHBpYykKKyAgICAgICAgICAgICAgICBj b250aW51ZTsKKworICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IHBpYy0+bmJfcmVmc1swXTsg aisrKSB7CisgICAgICAgICAgICAgICAgaWYgKHBpYy0+ZHBiW2ldID09IHBpYy0+cmVmc1swXVtq XSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAg ICBpZiAoaiA8IHBpYy0+bmJfcmVmc1swXSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKwor ICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IHBpYy0+bmJfcmVmc1sxXTsgaisrKSB7CisgICAg ICAgICAgICAgICAgaWYgKHBpYy0+ZHBiW2ldID09IHBpYy0+cmVmc1sxXVtqXSkKKyAgICAgICAg ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoaiA8IHBp Yy0+bmJfcmVmc1sxXSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAg c3RycCA9IHBpYy0+ZHBiW2ldLT5jb2RlY19wcml2OworICAgICAgICAgICAgcnBzX3BvY1tycHNf cGljc10gID0gc3RycC0+cGljX29yZGVyX2NudDsKKyAgICAgICAgICAgIHJwc191c2VkW3Jwc19w aWNzXSA9IDA7CisgICAgICAgICAgICArK3Jwc19waWNzOworICAgICAgICB9CisKKyAgICAgICAg Zm9yIChpID0gMTsgaSA8IHJwc19waWNzOyBpKyspIHsKKyAgICAgICAgICAgIGZvciAoaiA9IGk7 IGogPiAwOyBqLS0pIHsKKyAgICAgICAgICAgICAgICBpZiAocnBzX3BvY1tqXSA+IHJwc19wb2Nb aiAtIDFdKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBhdl9h c3NlcnQwKHJwc19wb2Nbal0gIT0gcnBzX3BvY1tqIC0gMV0pOworICAgICAgICAgICAgICAgIEZG U1dBUChpbnQsIHJwc19wb2Nbal0sICBycHNfcG9jW2ogLSAxXSk7CisgICAgICAgICAgICAgICAg RkZTV0FQKGludCwgcnBzX3VzZWRbal0sIHJwc191c2VkW2ogLSAxXSk7CisgICAgICAgICAgICB9 CisgICAgICAgIH0KKworICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19ERUJVRywgIlJQUyBm b3IgUE9DICVkOiIsIGhwLT5waWNfb3JkZXJfY250KTsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8 IHJwc19waWNzOyBpKyspCisgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19ERUJVRywg IiAoJWQsJWQpIiwgcnBzX3BvY1tpXSwgcnBzX3VzZWRbaV0pOworCisgICAgICAgIGF2X2xvZyhh dmN0eCwgQVZfTE9HX0RFQlVHLCAiXG4iKTsKKworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcnBz X3BpY3M7IGkrKykgeworICAgICAgICAgICAgYXZfYXNzZXJ0MChycHNfcG9jW2ldICE9IGhwLT5w aWNfb3JkZXJfY250KTsKKyAgICAgICAgICAgIGlmIChycHNfcG9jW2ldID4gaHAtPnBpY19vcmRl cl9jbnQpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBycHMt Pm51bV9uZWdhdGl2ZV9waWNzID0gaTsKKyAgICAgICAgcnBzLT51c2VkX2J5X2N1cnJfcGljX3Mw X2ZsYWcgPSAweDA7CisgICAgICAgIHBvYyA9IGhwLT5waWNfb3JkZXJfY250OworICAgICAgICBm b3IgKGogPSBpIC0gMTsgaiA+PSAwOyBqLS0pIHsKKyAgICAgICAgICAgIHJwcy0+ZGVsdGFfcG9j X3MwX21pbnVzMVtpIC0gMSAtIGpdID0gcG9jIC0gcnBzX3BvY1tqXSAtIDE7CisgICAgICAgICAg ICBycHMtPnVzZWRfYnlfY3Vycl9waWNfczBfZmxhZyB8PSBycHNfdXNlZFtqXSA8PCAoaSAtIDEg LSBqKTsKKyAgICAgICAgICAgIHBvYyA9IHJwc19wb2Nbal07CisgICAgICAgIH0KKworICAgICAg ICBycHMtPm51bV9wb3NpdGl2ZV9waWNzID0gcnBzX3BpY3MgLSBpOworICAgICAgICBycHMtPnVz ZWRfYnlfY3Vycl9waWNfczFfZmxhZyA9IDB4MDsKKyAgICAgICAgcG9jID0gaHAtPnBpY19vcmRl cl9jbnQ7CisgICAgICAgIGZvciAoaiA9IGk7IGogPCBycHNfcGljczsgaisrKSB7CisgICAgICAg ICAgICBycHMtPmRlbHRhX3BvY19zMV9taW51czFbaiAtIGldID0gcnBzX3BvY1tqXSAtIHBvYyAt IDE7CisgICAgICAgICAgICBycHMtPnVzZWRfYnlfY3Vycl9waWNfczFfZmxhZyB8PSBycHNfdXNl ZFtqXSA8PCAoaiAtIGkpOworICAgICAgICAgICAgcG9jID0gcnBzX3BvY1tqXTsKKyAgICAgICAg fQorCisgICAgICAgIGhwLT5sX3Jwcy5udW1fbG9uZ190ZXJtX3NwcyAgPSAwOworICAgICAgICBo cC0+bF9ycHMubnVtX2xvbmdfdGVybV9waWNzID0gMDsKKworICAgICAgICAvLyB3aGVuIHRoaXMg ZmxhZyBpcyBub3QgcHJlc2VudCwgaXQgaXMgaW5lcnJlZCB0byAxLgorICAgICAgICBocC0+c2xp Y2VfaGRyLmZsYWdzLmNvbGxvY2F0ZWRfZnJvbV9sMF9mbGFnID0gMTsKKyAgICAgICAgaHAtPmgy NjVwaWNfaW5mby5mbGFncy5zbGljZV90ZW1wb3JhbF9tdnBfZW5hYmxlZF9mbGFnID0KKyAgICAg ICAgICAgIGVuYy0+dW5pdHMucmF3X3Nwcy5zcHNfdGVtcG9yYWxfbXZwX2VuYWJsZWRfZmxhZzsK KyAgICAgICAgaWYgKGhwLT5oMjY1cGljX2luZm8uZmxhZ3Muc2xpY2VfdGVtcG9yYWxfbXZwX2Vu YWJsZWRfZmxhZykgeworICAgICAgICAgICAgaWYgKGhwLT5zbGljZV9oZHIuc2xpY2VfdHlwZSA9 PSBTVERfVklERU9fSDI2NV9TTElDRV9UWVBFX0IpCisgICAgICAgICAgICAgICAgaHAtPnNsaWNl X2hkci5mbGFncy5jb2xsb2NhdGVkX2Zyb21fbDBfZmxhZyA9IDE7CisgICAgICAgICAgICBocC0+ c2xpY2VfaGRyLmNvbGxvY2F0ZWRfcmVmX2lkeCA9IDA7CisgICAgICAgIH0KKworICAgICAgICBo cC0+c2xpY2VfaGRyLmZsYWdzLm51bV9yZWZfaWR4X2FjdGl2ZV9vdmVycmlkZV9mbGFnID0gMDsK KyAgICAgICAgaHAtPnJlZl9saXN0X2luZm8ubnVtX3JlZl9pZHhfbDBfYWN0aXZlX21pbnVzMSA9 IGVuYy0+dW5pdHMucmF3X3Bwcy5udW1fcmVmX2lkeF9sMF9kZWZhdWx0X2FjdGl2ZV9taW51czE7 CisgICAgICAgIGhwLT5yZWZfbGlzdF9pbmZvLm51bV9yZWZfaWR4X2wxX2FjdGl2ZV9taW51czEg PSBlbmMtPnVuaXRzLnJhd19wcHMubnVtX3JlZl9pZHhfbDFfZGVmYXVsdF9hY3RpdmVfbWludXMx OworICAgIH0KKworICAgIGhwLT5oMjY1cGljX2luZm8ucFNob3J0VGVybVJlZlBpY1NldCA9ICZo cC0+c19ycHM7CisgICAgaHAtPmgyNjVwaWNfaW5mby5wTG9uZ1Rlcm1SZWZQaWNzID0gJmhwLT5s X3JwczsKK30KKworc3RhdGljIGludCBpbml0X3BpY19wYXJhbXMoQVZDb2RlY0NvbnRleHQgKmF2 Y3R4LCBGRkhXQmFzZUVuY29kZVBpY3R1cmUgKnBpYywKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgIFZrVmlkZW9FbmNvZGVJbmZvS0hSICplbmNvZGVfaW5mbykKK3sKKyAgICBpbnQgZXJyOwor ICAgIFZ1bGthbkVuY29kZUgyNjVDb250ZXh0ICplbmMgPSBhdmN0eC0+cHJpdl9kYXRhOworICAg IEZGVnVsa2FuRW5jb2RlUGljdHVyZSAqdnAgPSBwaWMtPnByaXY7CisgICAgVnVsa2FuRW5jb2Rl SDI2NVBpY3R1cmUgKmhwID0gcGljLT5jb2RlY19wcml2OworICAgIFZrVmlkZW9SZWZlcmVuY2VT bG90SW5mb0tIUiAqcmVmX3Nsb3Q7CisKKyAgICBlcnIgPSB2a19lbmNfaDI2NV91cGRhdGVfcGlj X2luZm8oYXZjdHgsIHBpYyk7CisgICAgaWYgKGVyciA8IDApCisgICAgICAgIHJldHVybiBlcnI7 CisKKyAgICBocC0+dmtoMjY1cGljX2luZm8gPSAoVmtWaWRlb0VuY29kZUgyNjVQaWN0dXJlSW5m b0tIUikgeworICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9WSURFT19FTkNPREVf SDI2NV9QSUNUVVJFX0lORk9fS0hSLAorICAgICAgICAucE5leHQgPSBOVUxMLAorICAgICAgICAu cE5hbHVTbGljZVNlZ21lbnRFbnRyaWVzID0gTlVMTCwgLy8gRmlsbGVkIGluIGR1cmluZyBzZXR1 cF9zbGljZXMoKQorICAgICAgICAubmFsdVNsaWNlU2VnbWVudEVudHJ5Q291bnQgPSAwLCAvLyBG aWxsZWQgaW4gZHVyaW5nIHNldHVwX3NsaWNlcygpCisgICAgICAgIC5wU3RkUGljdHVyZUluZm8g PSAmaHAtPmgyNjVwaWNfaW5mbywKKyAgICB9OworCisgICAgaHAtPmgyNjVwaWNfaW5mbyA9IChT dGRWaWRlb0VuY29kZUgyNjVQaWN0dXJlSW5mbykgeworICAgICAgICAuZmxhZ3MgPSAoU3RkVmlk ZW9FbmNvZGVIMjY1UGljdHVyZUluZm9GbGFncykgeworICAgICAgICAgICAgLmlzX3JlZmVyZW5j ZSA9IHBpYy0+aXNfcmVmZXJlbmNlLAorICAgICAgICAgICAgLklyYXBQaWNGbGFnID0gcGljLT50 eXBlID09IEZGX0hXX1BJQ1RVUkVfVFlQRV9JRFIsCisgICAgICAgICAgICAudXNlZF9mb3JfbG9u Z190ZXJtX3JlZmVyZW5jZSA9IDAsCisgICAgICAgICAgICAuZGlzY2FyZGFibGVfZmxhZyA9IDAs CisgICAgICAgICAgICAuY3Jvc3NfbGF5ZXJfYmxhX2ZsYWcgPSAwLAorICAgICAgICAgICAgLnBp Y19vdXRwdXRfZmxhZyA9IDEsCisgICAgICAgICAgICAubm9fb3V0cHV0X29mX3ByaW9yX3BpY3Nf ZmxhZyA9IDAsCisgICAgICAgICAgICAuc2hvcnRfdGVybV9yZWZfcGljX3NldF9zcHNfZmxhZyA9 IDAsCisgICAgICAgICAgICAuc2xpY2VfdGVtcG9yYWxfbXZwX2VuYWJsZWRfZmxhZyA9IGVuYy0+ dW5pdHMucmF3X3Nwcy5zcHNfdGVtcG9yYWxfbXZwX2VuYWJsZWRfZmxhZywKKyAgICAgICAgICAg IC8qIFJlc2VydmVkICovCisgICAgICAgIH0sCisgICAgICAgIC5waWNfdHlwZSA9IGhwLT5waWNf dHlwZSwKKyAgICAgICAgLnNwc192aWRlb19wYXJhbWV0ZXJfc2V0X2lkID0gMCwKKyAgICAgICAg LnBwc19zZXFfcGFyYW1ldGVyX3NldF9pZCA9IDAsCisgICAgICAgIC5wcHNfcGljX3BhcmFtZXRl cl9zZXRfaWQgPSAwLAorICAgICAgICAuc2hvcnRfdGVybV9yZWZfcGljX3NldF9pZHggPSAwLAor ICAgICAgICAuUGljT3JkZXJDbnRWYWwgPSBocC0+cGljX29yZGVyX2NudCwKKyAgICAgICAgLlRl bXBvcmFsSWQgPSAwLAorICAgICAgICAvKiBSZXNlcnZlZCAqLworICAgICAgICAucFJlZkxpc3Rz ID0gTlVMTCwgLy8gRmlsbGVkIGluIGR1cmluZyBzZXR1cF9yZWZzCisgICAgICAgIC5wU2hvcnRU ZXJtUmVmUGljU2V0ID0gTlVMTCwKKyAgICAgICAgLnBMb25nVGVybVJlZlBpY3MgPSBOVUxMLAor ICAgIH07CisgICAgZW5jb2RlX2luZm8tPnBOZXh0ID0gJmhwLT52a2gyNjVwaWNfaW5mbzsKKwor ICAgIGhwLT5oMjY1ZHBiX2luZm8gPSAoU3RkVmlkZW9FbmNvZGVIMjY1UmVmZXJlbmNlSW5mbykg eworICAgICAgICAuZmxhZ3MgPSAoU3RkVmlkZW9FbmNvZGVIMjY1UmVmZXJlbmNlSW5mb0ZsYWdz KSB7CisgICAgICAgICAgICAudXNlZF9mb3JfbG9uZ190ZXJtX3JlZmVyZW5jZSA9IDAsCisgICAg ICAgICAgICAudW51c2VkX2Zvcl9yZWZlcmVuY2UgPSAwLAorICAgICAgICAgICAgLyogUmVzZXJ2 ZWQgKi8KKyAgICAgICAgfSwKKyAgICAgICAgLnBpY190eXBlID0gaHAtPmgyNjVwaWNfaW5mby5w aWNfdHlwZSwKKyAgICAgICAgLlBpY09yZGVyQ250VmFsID0gaHAtPmgyNjVwaWNfaW5mby5QaWNP cmRlckNudFZhbCwKKyAgICAgICAgLlRlbXBvcmFsSWQgPSBocC0+aDI2NXBpY19pbmZvLlRlbXBv cmFsSWQsCisgICAgfTsKKyAgICBocC0+dmtoMjY1ZHBiX2luZm8gPSAoVmtWaWRlb0VuY29kZUgy NjVEcGJTbG90SW5mb0tIUikgeworICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9W SURFT19FTkNPREVfSDI2NV9EUEJfU0xPVF9JTkZPX0tIUiwKKyAgICAgICAgLnBTdGRSZWZlcmVu Y2VJbmZvID0gJmhwLT5oMjY1ZHBiX2luZm8sCisgICAgfTsKKworICAgIHZwLT5kcGJfc2xvdC5w TmV4dCA9ICZocC0+dmtoMjY1ZHBiX2luZm87CisKKyAgICByZWZfc2xvdCA9IChWa1ZpZGVvUmVm ZXJlbmNlU2xvdEluZm9LSFIgKillbmNvZGVfaW5mby0+cFNldHVwUmVmZXJlbmNlU2xvdDsKKyAg ICByZWZfc2xvdC0+cE5leHQgPSAmaHAtPnZraDI2NWRwYl9pbmZvOworCisgICAgc2V0dXBfcmVm cyhhdmN0eCwgcGljLCBlbmNvZGVfaW5mbyk7CisKKyAgICBzZXR1cF9zbGljZXMoYXZjdHgsIHBp Yyk7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpbml0X3Byb2ZpbGUoQVZDb2Rl Y0NvbnRleHQgKmF2Y3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgVmtWaWRlb1Byb2ZpbGVJ bmZvS0hSICpwcm9maWxlLCB2b2lkICpwbmV4dCkKK3sKKyAgICBWa1Jlc3VsdCByZXQ7CisgICAg VnVsa2FuRW5jb2RlSDI2NUNvbnRleHQgKmVuYyA9IGF2Y3R4LT5wcml2X2RhdGE7CisgICAgRkZW dWxrYW5FbmNvZGVDb250ZXh0ICpjdHggPSAmZW5jLT5jb21tb247CisgICAgRkZWdWxrYW5Db250 ZXh0ICpzID0gJmN0eC0+czsKKyAgICBGRlZ1bGthbkZ1bmN0aW9ucyAqdmsgPSAmY3R4LT5zLnZr Zm47CisgICAgVmtWaWRlb0VuY29kZUgyNjVDYXBhYmlsaXRpZXNLSFIgaDI2NV9jYXBzID0gewor ICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9WSURFT19FTkNPREVfSDI2NV9DQVBB QklMSVRJRVNfS0hSLAorICAgIH07CisgICAgVmtWaWRlb0VuY29kZUNhcGFiaWxpdGllc0tIUiBl bmNfY2FwcyA9IHsKKyAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfVklERU9fRU5D T0RFX0NBUEFCSUxJVElFU19LSFIsCisgICAgICAgIC5wTmV4dCA9ICZoMjY1X2NhcHMsCisgICAg fTsKKyAgICBWa1ZpZGVvQ2FwYWJpbGl0aWVzS0hSIGNhcHMgPSB7CisgICAgICAgIC5zVHlwZSA9 IFZLX1NUUlVDVFVSRV9UWVBFX1ZJREVPX0NBUEFCSUxJVElFU19LSFIsCisgICAgICAgIC5wTmV4 dCA9ICZlbmNfY2FwcywKKyAgICB9OworCisgICAgLyogSW4gb3JkZXIgb2YgcHJlZmVyZW5jZSAq LworICAgIGludCBsYXN0X3N1cHBvcnRlZCA9IEFWX1BST0ZJTEVfVU5LTk9XTjsKKyAgICBzdGF0 aWMgY29uc3QgaW50IGtub3duX3Byb2ZpbGVzW10gPSB7CisgICAgICAgIEFWX1BST0ZJTEVfSEVW Q19NQUlOLAorICAgICAgICBBVl9QUk9GSUxFX0hFVkNfTUFJTl8xMCwKKyAgICAgICAgQVZfUFJP RklMRV9IRVZDX1JFWFQsCisgICAgfTsKKyAgICBpbnQgbmJfcHJvZmlsZXMgPSBGRl9BUlJBWV9F TEVNUyhrbm93bl9wcm9maWxlcyk7CisKKyAgICBjb25zdCBBVlBpeEZtdERlc2NyaXB0b3IgKmRl c2MgPSBhdl9waXhfZm10X2Rlc2NfZ2V0KHMtPmZyYW1lcy0+c3dfZm9ybWF0KTsKKyAgICBpZiAo IWRlc2MpCisgICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZBTCk7CisKKyAgICBpZiAocy0+ZnJh bWVzLT5zd19mb3JtYXQgPT0gQVZfUElYX0ZNVF9OVjEyKQorICAgICAgICBuYl9wcm9maWxlcyA9 IDE7CisgICAgZWxzZSBpZiAocy0+ZnJhbWVzLT5zd19mb3JtYXQgPT0gQVZfUElYX0ZNVF9QMDEw KQorICAgICAgICBuYl9wcm9maWxlcyA9IDI7CisKKyAgICBlbmMtPnByb2ZpbGUgPSAoVmtWaWRl b0VuY29kZUgyNjVQcm9maWxlSW5mb0tIUikgeworICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RV UkVfVFlQRV9WSURFT19FTkNPREVfSDI2NV9QUk9GSUxFX0lORk9fS0hSLAorICAgICAgICAucE5l eHQgPSBwbmV4dCwKKyAgICAgICAgLnN0ZFByb2ZpbGVJZGMgPSBmZl92a19oMjY1X3Byb2ZpbGVf dG9fdmsoYXZjdHgtPnByb2ZpbGUpLAorICAgIH07CisgICAgcHJvZmlsZS0+cE5leHQgPSAmZW5j LT5wcm9maWxlOworCisgICAgLyogU2V0IGxldmVsICovCisgICAgaWYgKGF2Y3R4LT5sZXZlbCA9 PSBBVl9MRVZFTF9VTktOT1dOKQorICAgICAgICBhdmN0eC0+bGV2ZWwgPSBlbmMtPmNvbW1vbi5v cHRzLmxldmVsOworCisgICAgLyogVXNlciBoYXMgZXhwbGljaXRseSBzcGVjaWZpZWQgYSBwcm9m aWxlLiAqLworICAgIGlmIChhdmN0eC0+cHJvZmlsZSAhPSBBVl9QUk9GSUxFX1VOS05PV04pCisg ICAgICAgIHJldHVybiAwOworCisgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfREVCVUcsICJTdXBw b3J0ZWQgcHJvZmlsZXM6XG4iKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG5iX3Byb2ZpbGVz OyBpKyspIHsKKyAgICAgICAgZW5jLT5wcm9maWxlLnN0ZFByb2ZpbGVJZGMgPSBmZl92a19oMjY1 X3Byb2ZpbGVfdG9fdmsoa25vd25fcHJvZmlsZXNbaV0pOworICAgICAgICByZXQgPSB2ay0+R2V0 UGh5c2ljYWxEZXZpY2VWaWRlb0NhcGFiaWxpdGllc0tIUihzLT5od2N0eC0+cGh5c19kZXYsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBy b2ZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICZjYXBzKTsKKyAgICAgICAgaWYgKHJldCA9PSBWS19TVUNDRVNTKSB7CisgICAgICAg ICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19ERUJVRywgIiAgICAlc1xuIiwKKyAgICAgICAgICAg ICAgICAgICBhdmNvZGVjX3Byb2ZpbGVfbmFtZShhdmN0eC0+Y29kZWNfaWQsIGtub3duX3Byb2Zp bGVzW2ldKSk7CisgICAgICAgICAgICBsYXN0X3N1cHBvcnRlZCA9IGtub3duX3Byb2ZpbGVzW2ld OworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGxhc3Rfc3VwcG9ydGVkID09IEFWX1BST0ZJ TEVfVU5LTk9XTikgeworICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIk5vIHN1 cHBvcnRlZCBwcm9maWxlcyBmb3IgZ2l2ZW4gZm9ybWF0XG4iKTsKKyAgICAgICAgcmV0dXJuIEFW RVJST1IoRU5PVFNVUCk7CisgICAgfQorCisgICAgZW5jLT5wcm9maWxlLnN0ZFByb2ZpbGVJZGMg PSBmZl92a19oMjY1X3Byb2ZpbGVfdG9fdmsobGFzdF9zdXBwb3J0ZWQpOworICAgIGF2X2xvZyhh dmN0eCwgQVZfTE9HX1ZFUkJPU0UsICJVc2luZyBwcm9maWxlICVzXG4iLAorICAgICAgICAgICBh dmNvZGVjX3Byb2ZpbGVfbmFtZShhdmN0eC0+Y29kZWNfaWQsIGxhc3Rfc3VwcG9ydGVkKSk7Cisg ICAgYXZjdHgtPnByb2ZpbGUgPSBsYXN0X3N1cHBvcnRlZDsKKworICAgIHJldHVybiAwOworfQor CitzdGF0aWMgaW50IGluaXRfZW5jX29wdGlvbnMoQVZDb2RlY0NvbnRleHQgKmF2Y3R4KQorewor ICAgIFZ1bGthbkVuY29kZUgyNjVDb250ZXh0ICplbmMgPSBhdmN0eC0+cHJpdl9kYXRhOworCisg ICAgaWYgKGF2Y3R4LT5yY19idWZmZXJfc2l6ZSkKKyAgICAgICAgZW5jLT5ocmRfYnVmZmVyX3Np emUgPSBhdmN0eC0+cmNfYnVmZmVyX3NpemU7CisgICAgZWxzZSBpZiAoYXZjdHgtPnJjX21heF9y YXRlID4gMCkKKyAgICAgICAgZW5jLT5ocmRfYnVmZmVyX3NpemUgPSBhdmN0eC0+cmNfbWF4X3Jh dGU7CisgICAgZWxzZQorICAgICAgICBlbmMtPmhyZF9idWZmZXJfc2l6ZSA9IGF2Y3R4LT5iaXRf cmF0ZTsKKworICAgIGlmIChhdmN0eC0+cmNfaW5pdGlhbF9idWZmZXJfb2NjdXBhbmN5KSB7Cisg ICAgICAgIGlmIChhdmN0eC0+cmNfaW5pdGlhbF9idWZmZXJfb2NjdXBhbmN5ID4gZW5jLT5ocmRf YnVmZmVyX3NpemUpIHsKKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAi SW52YWxpZCBSQyBidWZmZXIgc2V0dGluZ3M6ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAibXVzdCBoYXZlIGluaXRpYWwgYnVmZmVyIHNpemUgKCVkKSA8PSAiCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJ1ZmZlciBzaXplICglIlBS SWQ2NCIpLlxuIiwKKyAgICAgICAgICAgICAgICAgICBhdmN0eC0+cmNfaW5pdGlhbF9idWZmZXJf b2NjdXBhbmN5LCBlbmMtPmhyZF9idWZmZXJfc2l6ZSk7CisgICAgICAgICAgICByZXR1cm4gQVZF UlJPUihFSU5WQUwpOworICAgICAgICB9CisgICAgICAgIGVuYy0+aW5pdGlhbF9idWZmZXJfZnVs bG5lc3MgPSBhdmN0eC0+cmNfaW5pdGlhbF9idWZmZXJfb2NjdXBhbmN5OworICAgIH0gZWxzZSB7 CisgICAgICAgIGVuYy0+aW5pdGlhbF9idWZmZXJfZnVsbG5lc3MgPSBlbmMtPmhyZF9idWZmZXJf c2l6ZSAqIDMgLyA0OworICAgIH0KKworICAgIGlmIChlbmMtPmNvbW1vbi5vcHRzLnJjX21vZGUg PT0gVktfVklERU9fRU5DT0RFX1JBVEVfQ09OVFJPTF9NT0RFX0RJU0FCTEVEX0JJVF9LSFIpIHsK KyAgICAgICAgZW5jLT5maXhlZF9xcF9wID0gYXZfY2xpcChlbmMtPmNvbW1vbi5vcHRzLnFwLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuYy0+Y2Fwcy5taW5RcCwgZW5jLT5j YXBzLm1heFFwKTsKKworICAgICAgICBpZiAoYXZjdHgtPmlfcXVhbnRfZmFjdG9yID4gMC4wKQor ICAgICAgICAgICAgZW5jLT5maXhlZF9xcF9pZHIgPSBhdl9jbGlwKChhdmN0eC0+aV9xdWFudF9m YWN0b3IgKiBlbmMtPmZpeGVkX3FwX3AgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBhdmN0eC0+aV9xdWFudF9vZmZzZXQpICsgMC41LAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGVuYy0+Y2Fwcy5taW5RcCwgZW5jLT5jYXBzLm1heFFw KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW5jLT5maXhlZF9xcF9pZHIgPSBlbmMtPmZp eGVkX3FwX3A7CisKKyAgICAgICAgaWYgKGF2Y3R4LT5iX3F1YW50X2ZhY3RvciA+IDAuMCkKKyAg ICAgICAgICAgIGVuYy0+Zml4ZWRfcXBfYiA9IGF2X2NsaXAoKGF2Y3R4LT5iX3F1YW50X2ZhY3Rv ciAqIGVuYy0+Zml4ZWRfcXBfcCArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBhdmN0eC0+Yl9xdWFudF9vZmZzZXQpICsgMC41LAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBlbmMtPmNhcHMubWluUXAsIGVuYy0+Y2Fwcy5tYXhRcCk7CisgICAg ICAgIGVsc2UKKyAgICAgICAgICAgIGVuYy0+Zml4ZWRfcXBfYiA9IGVuYy0+Zml4ZWRfcXBfcDsK KworICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19ERUJVRywgIlVzaW5nIGZpeGVkIFFQID0g IgorICAgICAgICAgICAgICAgIiVkIC8gJWQgLyAlZCBmb3IgSURSLSAvIFAtIC8gQi1mcmFtZXMu XG4iLAorICAgICAgICAgICAgICAgZW5jLT5maXhlZF9xcF9pZHIsIGVuYy0+Zml4ZWRfcXBfcCwg ZW5jLT5maXhlZF9xcF9iKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbmMtPmZpeGVkX3FwX2lk ciA9IDI2OworICAgICAgICBlbmMtPmZpeGVkX3FwX3AgPSAyNjsKKyAgICAgICAgZW5jLT5maXhl ZF9xcF9iID0gMjY7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBhdl9jb2xk IGludCBpbml0X3NlcXVlbmNlX2hlYWRlcnMoQVZDb2RlY0NvbnRleHQgKmF2Y3R4KQoreworICAg IGludCBlcnI7CisgICAgVnVsa2FuRW5jb2RlSDI2NUNvbnRleHQgKmVuYyA9IGF2Y3R4LT5wcml2 X2RhdGE7CisgICAgRkZWdWxrYW5FbmNvZGVDb250ZXh0ICpjdHggPSAmZW5jLT5jb21tb247Cisg ICAgRkZIV0Jhc2VFbmNvZGVDb250ZXh0ICpiYXNlX2N0eCA9ICZjdHgtPmJhc2U7CisKKyAgICBG RkhXQmFzZUVuY29kZUgyNjUgKnVuaXRzID0gJmVuYy0+dW5pdHM7CisgICAgRkZIV0Jhc2VFbmNv ZGVIMjY1T3B0cyAqdW5pdF9vcHRzID0gJmVuYy0+dW5pdF9vcHRzOworCisgICAgaW50IG1heF9j dGJfc2l6ZTsKKyAgICB1bnNpZ25lZCBtaW5fdGJfc2l6ZTsKKyAgICB1bnNpZ25lZCBtYXhfdGJf c2l6ZTsKKyAgICB1bnNpZ25lZCBtYXhfdHJhbnNmb3JtX2hpZXJhcmNoeTsKKworICAgIHVuaXRf b3B0cy0+dGllciA9IGVuYy0+Y29tbW9uLm9wdHMudGllcjsKKyAgICB1bml0X29wdHMtPmZpeGVk X3FwX2lkciA9IGVuYy0+Zml4ZWRfcXBfaWRyOworICAgIHVuaXRfb3B0cy0+Y3VfcXBfZGVsdGFf ZW5hYmxlZF9mbGFnID0gZW5jLT5jb21tb24ub3B0cy5yY19tb2RlICE9IFZLX1ZJREVPX0VOQ09E RV9SQVRFX0NPTlRST0xfTU9ERV9ESVNBQkxFRF9CSVRfS0hSOworCisgICAgdW5pdF9vcHRzLT5u Yl9zbGljZXMgPSAxOworCisgICAgdW5pdF9vcHRzLT5zbGljZV9ibG9ja19yb3dzID0gKGF2Y3R4 LT5oZWlnaHQgKyBiYXNlX2N0eC0+c2xpY2VfYmxvY2tfaGVpZ2h0IC0gMSkgLworICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VfY3R4LT5zbGljZV9ibG9ja19oZWlnaHQ7Cisg ICAgdW5pdF9vcHRzLT5zbGljZV9ibG9ja19jb2xzID0gKGF2Y3R4LT53aWR0aCAgKyBiYXNlX2N0 eC0+c2xpY2VfYmxvY2tfd2lkdGggIC0gMSkgLworICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGJhc2VfY3R4LT5zbGljZV9ibG9ja193aWR0aDsKKworICAgIC8qIGNhYmFjIGFscmVh ZHkgc2V0IHZpYSBhbiBvcHRpb24gKi8KKyAgICAvKiBmaXhlZF9xcF9pZHIgaW5pdGlhbGl6ZWQg aW4gaW5pdF9lbmNfb3B0aW9ucygpICovCisgICAgLyogaHJkX2J1ZmZlcl9zaXplIGluaXRpYWxp emVkIGluIGluaXRfZW5jX29wdGlvbnMoKSAqLworICAgIC8qIGluaXRpYWxfYnVmZmVyX2Z1bGxu ZXNzIGluaXRpYWxpemVkIGluIGluaXRfZW5jX29wdGlvbnMoKSAqLworCisgICAgZXJyID0gZmZf aHdfYmFzZV9lbmNvZGVfaW5pdF9wYXJhbXNfaDI2NSgmZW5jLT5jb21tb24uYmFzZSwgYXZjdHgs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bml0cywgdW5p dF9vcHRzKTsKKyAgICBpZiAoZXJyIDwgMCkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHVu aXRzLT5yYXdfc3BzLnNhbXBsZV9hZGFwdGl2ZV9vZmZzZXRfZW5hYmxlZF9mbGFnID0KKyAgICAg ICEhKGVuYy0+Y2Fwcy5zdGRTeW50YXhGbGFncyAmIFZLX1ZJREVPX0VOQ09ERV9IMjY1X1NURF9T QU1QTEVfQURBUFRJVkVfT0ZGU0VUX0VOQUJMRURfRkxBR19TRVRfQklUX0tIUik7CisgICAgdW5p dHMtPnJhd19wcHMudHJhbnNmb3JtX3NraXBfZW5hYmxlZF9mbGFnID0KKyAgICAgICEhKGVuYy0+ Y2Fwcy5zdGRTeW50YXhGbGFncyAmIFZLX1ZJREVPX0VOQ09ERV9IMjY1X1NURF9UUkFOU0ZPUk1f U0tJUF9FTkFCTEVEX0ZMQUdfU0VUX0JJVF9LSFIpOworCisgICAgbWF4X2N0Yl9zaXplID0gMTY7 CisKKyAgICAvKiBjb2RpbmcgYmxvY2tzIGZyb20gOHg4IHRvIG1heCBDVEIgc2l6ZS4gKi8KKyAg ICBpZiAoZW5jLT5jYXBzLmN0YlNpemVzICYgVktfVklERU9fRU5DT0RFX0gyNjVfQ1RCX1NJWkVf NjRfQklUX0tIUikKKyAgICAgICAgbWF4X2N0Yl9zaXplID0gNjQ7CisgICAgZWxzZSBpZiAoZW5j LT5jYXBzLmN0YlNpemVzICYgVktfVklERU9fRU5DT0RFX0gyNjVfQ1RCX1NJWkVfMzJfQklUX0tI UikKKyAgICAgICAgbWF4X2N0Yl9zaXplID0gMzI7CisKKyAgICBtaW5fdGJfc2l6ZSA9IDA7Cisg ICAgbWF4X3RiX3NpemUgPSAwOworICAgIGlmIChlbmMtPmNhcHMudHJhbnNmb3JtQmxvY2tTaXpl cyAmIFZLX1ZJREVPX0VOQ09ERV9IMjY1X1RSQU5TRk9STV9CTE9DS19TSVpFXzRfQklUX0tIUikK KyAgICAgICAgbWluX3RiX3NpemUgPSA0OworICAgIGVsc2UgaWYgKGVuYy0+Y2Fwcy50cmFuc2Zv cm1CbG9ja1NpemVzICYgVktfVklERU9fRU5DT0RFX0gyNjVfVFJBTlNGT1JNX0JMT0NLX1NJWkVf OF9CSVRfS0hSKQorICAgICAgICBtaW5fdGJfc2l6ZSA9IDg7CisgICAgZWxzZSBpZiAoZW5jLT5j YXBzLnRyYW5zZm9ybUJsb2NrU2l6ZXMgJiBWS19WSURFT19FTkNPREVfSDI2NV9UUkFOU0ZPUk1f QkxPQ0tfU0laRV8xNl9CSVRfS0hSKQorICAgICAgICBtaW5fdGJfc2l6ZSA9IDE2OworICAgIGVs c2UgaWYgKGVuYy0+Y2Fwcy50cmFuc2Zvcm1CbG9ja1NpemVzICYgVktfVklERU9fRU5DT0RFX0gy NjVfVFJBTlNGT1JNX0JMT0NLX1NJWkVfMzJfQklUX0tIUikKKyAgICAgICAgbWluX3RiX3NpemUg PSAzMjsKKworICAgIGlmIChlbmMtPmNhcHMudHJhbnNmb3JtQmxvY2tTaXplcyAmIFZLX1ZJREVP X0VOQ09ERV9IMjY1X1RSQU5TRk9STV9CTE9DS19TSVpFXzMyX0JJVF9LSFIpCisgICAgICAgIG1h eF90Yl9zaXplID0gMzI7CisgICAgZWxzZSBpZiAoZW5jLT5jYXBzLnRyYW5zZm9ybUJsb2NrU2l6 ZXMgJiBWS19WSURFT19FTkNPREVfSDI2NV9UUkFOU0ZPUk1fQkxPQ0tfU0laRV8xNl9CSVRfS0hS KQorICAgICAgICBtYXhfdGJfc2l6ZSA9IDE2OworICAgIGVsc2UgaWYgKGVuYy0+Y2Fwcy50cmFu c2Zvcm1CbG9ja1NpemVzICYgVktfVklERU9fRU5DT0RFX0gyNjVfVFJBTlNGT1JNX0JMT0NLX1NJ WkVfOF9CSVRfS0hSKQorICAgICAgICBtYXhfdGJfc2l6ZSA9IDg7CisgICAgZWxzZSBpZiAoZW5j LT5jYXBzLnRyYW5zZm9ybUJsb2NrU2l6ZXMgJiBWS19WSURFT19FTkNPREVfSDI2NV9UUkFOU0ZP Uk1fQkxPQ0tfU0laRV80X0JJVF9LSFIpCisgICAgICAgIG1heF90Yl9zaXplID0gNDsKKworICAg IHVuaXRzLT5yYXdfc3BzLmxvZzJfbWluX2x1bWFfY29kaW5nX2Jsb2NrX3NpemVfbWludXMzID0g MDsKKyAgICB1bml0cy0+cmF3X3Nwcy5sb2cyX2RpZmZfbWF4X21pbl9sdW1hX2NvZGluZ19ibG9j a19zaXplID0gYXZfbG9nMihtYXhfY3RiX3NpemUpIC0gMzsKKyAgICB1bml0cy0+cmF3X3Nwcy5s b2cyX21pbl9sdW1hX3RyYW5zZm9ybV9ibG9ja19zaXplX21pbnVzMiA9IGF2X2xvZzIobWluX3Ri X3NpemUpIC0gMjsKKyAgICB1bml0cy0+cmF3X3Nwcy5sb2cyX2RpZmZfbWF4X21pbl9sdW1hX3Ry YW5zZm9ybV9ibG9ja19zaXplID0gYXZfbG9nMihtYXhfdGJfc2l6ZSkgLSBhdl9sb2cyKG1pbl90 Yl9zaXplKTsKKworICAgIG1heF90cmFuc2Zvcm1faGllcmFyY2h5ID0gYXZfbG9nMihtYXhfY3Ri X3NpemUpIC0gYXZfbG9nMihtaW5fdGJfc2l6ZSk7CisgICAgdW5pdHMtPnJhd19zcHMubWF4X3Ry YW5zZm9ybV9oaWVyYXJjaHlfZGVwdGhfaW50cmEgPSBtYXhfdHJhbnNmb3JtX2hpZXJhcmNoeTsK KyAgICB1bml0cy0+cmF3X3Nwcy5tYXhfdHJhbnNmb3JtX2hpZXJhcmNoeV9kZXB0aF9pbnRyYSA9 IG1heF90cmFuc2Zvcm1faGllcmFyY2h5OworCisgICAgdW5pdHMtPnJhd19zcHMudnVpLmJpdHN0 cmVhbV9yZXN0cmljdGlvbl9mbGFnID0gMDsKKyAgICB1bml0cy0+cmF3X3Nwcy52dWkubWF4X2J5 dGVzX3Blcl9waWNfZGVub20gPSAyOworICAgIHVuaXRzLT5yYXdfc3BzLnZ1aS5tYXhfYml0c19w ZXJfbWluX2N1X2Rlbm9tID0gMTsKKworICAgIHVuaXRzLT5yYXdfc3BzLnNwc190ZW1wb3JhbF9t dnBfZW5hYmxlZF9mbGFnID0gMDsKKworICAgIGlmIChiYXNlX2N0eC0+Z29wX3NpemUgJiBiYXNl X2N0eC0+Z29wX3NpemUgLSAxID09IDApCisgICAgICAgIHVuaXRzLT5yYXdfc3BzLmxvZzJfbWF4 X3BpY19vcmRlcl9jbnRfbHNiX21pbnVzNCA9IEZGTUFYKGF2X2xvZzIoYmFzZV9jdHgtPmdvcF9z aXplKSAtIDQsIDApOworICAgIGVsc2UKKyAgICAgICAgdW5pdHMtPnJhd19zcHMubG9nMl9tYXhf cGljX29yZGVyX2NudF9sc2JfbWludXM0ID0gRkZNQVgoYXZfbG9nMihiYXNlX2N0eC0+Z29wX3Np emUpIC0gMywgMCk7CisKKyAgICByZXR1cm4gMDsKK30KKwordHlwZWRlZiBzdHJ1Y3QgVnVsa2Fu SDI2NVVuaXRzIHsKKyAgICBTdGRWaWRlb0gyNjVTZXF1ZW5jZVBhcmFtZXRlclNldCAgICBzcHM7 CisgICAgU3RkVmlkZW9IMjY1U2hvcnRUZXJtUmVmUGljU2V0ICAgICAgc3RyW1NURF9WSURFT19I MjY1X1NVQkxBWUVSU19MSVNUX1NJWkVdOworICAgIFN0ZFZpZGVvSDI2NUxvbmdUZXJtUmVmUGlj c1NwcyAgICAgIGx0cjsKKyAgICBTdGRWaWRlb0gyNjVQcm9maWxlVGllckxldmVsICAgICAgICBw dGxfc3BzOworICAgIFN0ZFZpZGVvSDI2NURlY1BpY0J1Zk1nciAgICAgICAgICAgIGRwYm1fc3Bz OworCisgICAgU3RkVmlkZW9IMjY1SHJkUGFyYW1ldGVycyAgICAgICAgICAgdnVpX2hlYWRlcl9z cHM7CisgICAgU3RkVmlkZW9IMjY1U2VxdWVuY2VQYXJhbWV0ZXJTZXRWdWkgdnVpX3NwczsKKwor ICAgIFN0ZFZpZGVvSDI2NVN1YkxheWVySHJkUGFyYW1ldGVycyAgIHNsaGRybmFsW0hFVkNfTUFY X1NVQl9MQVlFUlNdOworICAgIFN0ZFZpZGVvSDI2NVN1YkxheWVySHJkUGFyYW1ldGVycyAgIHNs aGRydmNsW0hFVkNfTUFYX1NVQl9MQVlFUlNdOworCisgICAgU3RkVmlkZW9IMjY1UGljdHVyZVBh cmFtZXRlclNldCAgICAgcHBzOworICAgIFN0ZFZpZGVvSDI2NVNjYWxpbmdMaXN0cyAgICAgICAg ICAgIHBwc19zY2FsaW5nOworCisgICAgU3RkVmlkZW9IMjY1VmlkZW9QYXJhbWV0ZXJTZXQgICAg ICAgdnBzOworICAgIFN0ZFZpZGVvSDI2NVByb2ZpbGVUaWVyTGV2ZWwgICAgICAgIHB0bF92cHM7 CisgICAgU3RkVmlkZW9IMjY1RGVjUGljQnVmTWdyICAgICAgICAgICAgZHBibV92cHM7CisgICAg U3RkVmlkZW9IMjY1SHJkUGFyYW1ldGVycyAgICAgICAgICAgdnVpX2hlYWRlcl92cHM7Cit9IFZ1 bGthbkgyNjVVbml0czsKKworc3RhdGljIGF2X2NvbGQgaW50IGJhc2VfdW5pdF90b192ayhBVkNv ZGVjQ29udGV4dCAqYXZjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZ1 bGthbkgyNjVVbml0cyAqdmtfdW5pdHMpCit7CisgICAgVnVsa2FuRW5jb2RlSDI2NUNvbnRleHQg KmVuYyA9IGF2Y3R4LT5wcml2X2RhdGE7CisKKyAgICBIMjY1UmF3U1BTICAgICAgICAgICAgICAg ICAgICAgICAgICAgKnNwcyA9ICZlbmMtPnVuaXRzLnJhd19zcHM7CisgICAgU3RkVmlkZW9IMjY1 U2VxdWVuY2VQYXJhbWV0ZXJTZXQgICAqdmtzcHMgPSAmdmtfdW5pdHMtPnNwczsKKyAgICBTdGRW aWRlb0gyNjVTaG9ydFRlcm1SZWZQaWNTZXQgICAgICAgKnN0ciA9ICB2a191bml0cy0+c3RyOwor ICAgIFN0ZFZpZGVvSDI2NUxvbmdUZXJtUmVmUGljc1NwcyAgICAgICAqbHRyID0gJnZrX3VuaXRz LT5sdHI7CisgICAgU3RkVmlkZW9IMjY1UHJvZmlsZVRpZXJMZXZlbCAgICAgICAgICpwdGxfc3Bz ID0gJnZrX3VuaXRzLT5wdGxfc3BzOworICAgIFN0ZFZpZGVvSDI2NURlY1BpY0J1Zk1nciAgICAg ICAgICAgICpkcGJtX3NwcyA9ICZ2a191bml0cy0+ZHBibV9zcHM7CisKKyAgICBTdGRWaWRlb0gy NjVIcmRQYXJhbWV0ZXJzICAgICAgICAgICAqdnVpX2hlYWRlcl9zcHMgPSAmdmtfdW5pdHMtPnZ1 aV9oZWFkZXJfc3BzOworICAgIFN0ZFZpZGVvSDI2NVNlcXVlbmNlUGFyYW1ldGVyU2V0VnVpICp2 dWlfc3BzID0gJnZrX3VuaXRzLT52dWlfc3BzOworCisgICAgU3RkVmlkZW9IMjY1U3ViTGF5ZXJI cmRQYXJhbWV0ZXJzICpzbGhkcm5hbCA9IHZrX3VuaXRzLT5zbGhkcm5hbDsKKyAgICBTdGRWaWRl b0gyNjVTdWJMYXllckhyZFBhcmFtZXRlcnMgKnNsaGRydmNsID0gdmtfdW5pdHMtPnNsaGRydmNs OworCisgICAgSDI2NVJhd1BQUyAgICAgICAgICAgICAgICAgICAgICAgICAgKnBwcyA9ICZlbmMt PnVuaXRzLnJhd19wcHM7CisgICAgU3RkVmlkZW9IMjY1UGljdHVyZVBhcmFtZXRlclNldCAgICp2 a3BwcyA9ICZ2a191bml0cy0+cHBzOworCisgICAgSDI2NVJhd1ZQUyAgICAgICAgICAgICAgICAg ICAgICAgICAgICp2cHMgPSAmZW5jLT51bml0cy5yYXdfdnBzOworICAgIFN0ZFZpZGVvSDI2NVZp ZGVvUGFyYW1ldGVyU2V0ICAgICAgKnZrdnBzID0gJnZrX3VuaXRzLT52cHM7CisgICAgU3RkVmlk ZW9IMjY1UHJvZmlsZVRpZXJMZXZlbCAgICAgKnB0bF92cHMgPSAmdmtfdW5pdHMtPnB0bF92cHM7 CisgICAgU3RkVmlkZW9IMjY1RGVjUGljQnVmTWdyICAgICAgICAqZHBibV92cHMgPSAmdmtfdW5p dHMtPmRwYm1fdnBzOworICAgIFN0ZFZpZGVvSDI2NUhyZFBhcmFtZXRlcnMgKnZ1aV9oZWFkZXJf dnBzID0gJnZrX3VuaXRzLT52dWlfaGVhZGVyX3ZwczsKKworICAgIC8qIFNQUyAqLworICAgIGZv ciAoaW50IGkgPSAwOyBpIDwgSEVWQ19NQVhfU1VCX0xBWUVSUzsgaSsrKSB7CisgICAgICAgIG1l bWNweSgmc2xoZHJuYWxbaV0sICZzcHMtPnZ1aS5ocmRfcGFyYW1ldGVycy5uYWxfc3ViX2xheWVy X2hyZF9wYXJhbWV0ZXJzW2ldLCBzaXplb2YoKnNsaGRybmFsKSk7CisgICAgICAgIG1lbWNweSgm c2xoZHJ2Y2xbaV0sICZzcHMtPnZ1aS5ocmRfcGFyYW1ldGVycy52Y2xfc3ViX2xheWVyX2hyZF9w YXJhbWV0ZXJzW2ldLCBzaXplb2YoKnNsaGRydmNsKSk7CisgICAgICAgIHNsaGRybmFsW2ldLmNi cl9mbGFnID0gMHgwOworICAgICAgICBzbGhkcnZjbFtpXS5jYnJfZmxhZyA9IDB4MDsKKyAgICAg ICAgZm9yIChpbnQgaiA9IDA7IGogPCBIRVZDX01BWF9DUEJfQ05UOyBqKyspIHsKKyAgICAgICAg ICAgIHNsaGRybmFsW2ldLmNicl9mbGFnIHw9IHNwcy0+dnVpLmhyZF9wYXJhbWV0ZXJzLm5hbF9z dWJfbGF5ZXJfaHJkX3BhcmFtZXRlcnNbaV0uY2JyX2ZsYWdbal0gPDwgaTsKKyAgICAgICAgICAg IHNsaGRydmNsW2ldLmNicl9mbGFnIHw9IHNwcy0+dnVpLmhyZF9wYXJhbWV0ZXJzLnZjbF9zdWJf bGF5ZXJfaHJkX3BhcmFtZXRlcnNbaV0uY2JyX2ZsYWdbal0gPDwgaTsKKyAgICAgICAgfQorICAg IH0KKworICAgICp2dWlfaGVhZGVyX3NwcyA9IChTdGRWaWRlb0gyNjVIcmRQYXJhbWV0ZXJzKSB7 CisgICAgICAgIC5mbGFncyA9IChTdGRWaWRlb0gyNjVIcmRGbGFncykgeworICAgICAgICAgICAg Lm5hbF9ocmRfcGFyYW1ldGVyc19wcmVzZW50X2ZsYWcgPSBzcHMtPnZ1aS5ocmRfcGFyYW1ldGVy cy5uYWxfaHJkX3BhcmFtZXRlcnNfcHJlc2VudF9mbGFnLAorICAgICAgICAgICAgLnZjbF9ocmRf cGFyYW1ldGVyc19wcmVzZW50X2ZsYWcgPSBzcHMtPnZ1aS5ocmRfcGFyYW1ldGVycy52Y2xfaHJk X3BhcmFtZXRlcnNfcHJlc2VudF9mbGFnLAorICAgICAgICAgICAgLnN1Yl9waWNfaHJkX3BhcmFt c19wcmVzZW50X2ZsYWcgPSBzcHMtPnZ1aS5ocmRfcGFyYW1ldGVycy5zdWJfcGljX2hyZF9wYXJh bXNfcHJlc2VudF9mbGFnLAorICAgICAgICAgICAgLnN1Yl9waWNfY3BiX3BhcmFtc19pbl9waWNf dGltaW5nX3NlaV9mbGFnID0gc3BzLT52dWkuaHJkX3BhcmFtZXRlcnMuc3ViX3BpY19jcGJfcGFy YW1zX2luX3BpY190aW1pbmdfc2VpX2ZsYWcsCisgICAgICAgICAgICAuZml4ZWRfcGljX3JhdGVf Z2VuZXJhbF9mbGFnID0gMHgwLAorICAgICAgICAgICAgLmZpeGVkX3BpY19yYXRlX3dpdGhpbl9j dnNfZmxhZyA9IDB4MCwKKyAgICAgICAgICAgIC5sb3dfZGVsYXlfaHJkX2ZsYWcgPSAweDAsCisg ICAgICAgIH0sCisgICAgICAgIC50aWNrX2Rpdmlzb3JfbWludXMyID0gc3BzLT52dWkuaHJkX3Bh cmFtZXRlcnMudGlja19kaXZpc29yX21pbnVzMiwKKyAgICAgICAgLmR1X2NwYl9yZW1vdmFsX2Rl bGF5X2luY3JlbWVudF9sZW5ndGhfbWludXMxID0gc3BzLT52dWkuaHJkX3BhcmFtZXRlcnMuZHVf Y3BiX3JlbW92YWxfZGVsYXlfaW5jcmVtZW50X2xlbmd0aF9taW51czEsCisgICAgICAgIC5kcGJf b3V0cHV0X2RlbGF5X2R1X2xlbmd0aF9taW51czEgPSBzcHMtPnZ1aS5ocmRfcGFyYW1ldGVycy5k cGJfb3V0cHV0X2RlbGF5X2R1X2xlbmd0aF9taW51czEsCisgICAgICAgIC5iaXRfcmF0ZV9zY2Fs ZSA9IHNwcy0+dnVpLmhyZF9wYXJhbWV0ZXJzLmJpdF9yYXRlX3NjYWxlLAorICAgICAgICAuY3Bi X3NpemVfc2NhbGUgPSBzcHMtPnZ1aS5ocmRfcGFyYW1ldGVycy5jcGJfc2l6ZV9zY2FsZSwKKyAg ICAgICAgLmNwYl9zaXplX2R1X3NjYWxlID0gc3BzLT52dWkuaHJkX3BhcmFtZXRlcnMuY3BiX3Np emVfZHVfc2NhbGUsCisgICAgICAgIC5pbml0aWFsX2NwYl9yZW1vdmFsX2RlbGF5X2xlbmd0aF9t aW51czEgPSBzcHMtPnZ1aS5ocmRfcGFyYW1ldGVycy5pbml0aWFsX2NwYl9yZW1vdmFsX2RlbGF5 X2xlbmd0aF9taW51czEsCisgICAgICAgIC5hdV9jcGJfcmVtb3ZhbF9kZWxheV9sZW5ndGhfbWlu dXMxID0gc3BzLT52dWkuaHJkX3BhcmFtZXRlcnMuYXVfY3BiX3JlbW92YWxfZGVsYXlfbGVuZ3Ro X21pbnVzMSwKKyAgICAgICAgLmRwYl9vdXRwdXRfZGVsYXlfbGVuZ3RoX21pbnVzMSA9IHNwcy0+ dnVpLmhyZF9wYXJhbWV0ZXJzLmRwYl9vdXRwdXRfZGVsYXlfbGVuZ3RoX21pbnVzMSwKKyAgICAg ICAgLyogUmVzZXJ2ZWQgLSAzKjE2IGJpdHMgKi8KKyAgICAgICAgLnBTdWJMYXllckhyZFBhcmFt ZXRlcnNOYWwgPSBzbGhkcm5hbCwKKyAgICAgICAgLnBTdWJMYXllckhyZFBhcmFtZXRlcnNWY2wg PSBzbGhkcnZjbCwKKyAgICB9OworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBIRVZDX01BWF9T VUJfTEFZRVJTOyBpKyspIHsKKyAgICAgICAgdnVpX2hlYWRlcl9zcHMtPmZsYWdzLmZpeGVkX3Bp Y19yYXRlX2dlbmVyYWxfZmxhZyB8PSBzcHMtPnZ1aS5ocmRfcGFyYW1ldGVycy5maXhlZF9waWNf cmF0ZV9nZW5lcmFsX2ZsYWdbaV0gPDwgaTsKKyAgICAgICAgdnVpX2hlYWRlcl9zcHMtPmZsYWdz LmZpeGVkX3BpY19yYXRlX3dpdGhpbl9jdnNfZmxhZyB8PSBzcHMtPnZ1aS5ocmRfcGFyYW1ldGVy cy5maXhlZF9waWNfcmF0ZV93aXRoaW5fY3ZzX2ZsYWdbaV0gPDwgaTsKKyAgICAgICAgdnVpX2hl YWRlcl9zcHMtPmZsYWdzLmxvd19kZWxheV9ocmRfZmxhZyB8PSBzcHMtPnZ1aS5ocmRfcGFyYW1l dGVycy5sb3dfZGVsYXlfaHJkX2ZsYWdbaV0gPDwgaTsKKyAgICB9CisKKyAgICBmb3IgKGludCBp ID0gMDsgaSA8IFNURF9WSURFT19IMjY1X1NVQkxBWUVSU19MSVNUX1NJWkU7IGkrKykgeworICAg ICAgICBkcGJtX3Nwcy0+bWF4X2xhdGVuY3lfaW5jcmVhc2VfcGx1czFbaV0gPSBzcHMtPnNwc19t YXhfbGF0ZW5jeV9pbmNyZWFzZV9wbHVzMVtpXTsKKyAgICAgICAgZHBibV9zcHMtPm1heF9kZWNf cGljX2J1ZmZlcmluZ19taW51czFbaV0gPSBzcHMtPnNwc19tYXhfZGVjX3BpY19idWZmZXJpbmdf bWludXMxW2ldOworICAgICAgICBkcGJtX3Nwcy0+bWF4X251bV9yZW9yZGVyX3BpY3NbaV0gPSBz cHMtPnNwc19tYXhfbnVtX3Jlb3JkZXJfcGljc1tpXTsKKyAgICB9CisKKyAgICAqcHRsX3NwcyA9 IChTdGRWaWRlb0gyNjVQcm9maWxlVGllckxldmVsKSB7CisgICAgICAgIC5mbGFncyA9IChTdGRW aWRlb0gyNjVQcm9maWxlVGllckxldmVsRmxhZ3MpIHsKKyAgICAgICAgICAgIC5nZW5lcmFsX3Rp ZXJfZmxhZyA9IHNwcy0+cHJvZmlsZV90aWVyX2xldmVsLmdlbmVyYWxfdGllcl9mbGFnLAorICAg ICAgICAgICAgLmdlbmVyYWxfcHJvZ3Jlc3NpdmVfc291cmNlX2ZsYWcgPSBzcHMtPnByb2ZpbGVf dGllcl9sZXZlbC5nZW5lcmFsX3Byb2dyZXNzaXZlX3NvdXJjZV9mbGFnLAorICAgICAgICAgICAg LmdlbmVyYWxfaW50ZXJsYWNlZF9zb3VyY2VfZmxhZyA9IHNwcy0+cHJvZmlsZV90aWVyX2xldmVs LmdlbmVyYWxfaW50ZXJsYWNlZF9zb3VyY2VfZmxhZywKKyAgICAgICAgICAgIC5nZW5lcmFsX25v bl9wYWNrZWRfY29uc3RyYWludF9mbGFnID0gc3BzLT5wcm9maWxlX3RpZXJfbGV2ZWwuZ2VuZXJh bF9ub25fcGFja2VkX2NvbnN0cmFpbnRfZmxhZywKKyAgICAgICAgICAgIC5nZW5lcmFsX2ZyYW1l X29ubHlfY29uc3RyYWludF9mbGFnID0gc3BzLT5wcm9maWxlX3RpZXJfbGV2ZWwuZ2VuZXJhbF9m cmFtZV9vbmx5X2NvbnN0cmFpbnRfZmxhZywKKyAgICAgICAgfSwKKyAgICAgICAgLmdlbmVyYWxf cHJvZmlsZV9pZGMgPSBmZl92a19oMjY1X3Byb2ZpbGVfdG9fdmsoc3BzLT5wcm9maWxlX3RpZXJf bGV2ZWwuZ2VuZXJhbF9wcm9maWxlX2lkYyksCisgICAgICAgIC5nZW5lcmFsX2xldmVsX2lkYyA9 IGZmX3ZrX2gyNjVfbGV2ZWxfdG9fdmsoc3BzLT5wcm9maWxlX3RpZXJfbGV2ZWwuZ2VuZXJhbF9s ZXZlbF9pZGMpLAorICAgIH07CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IFNURF9WSURFT19I MjY1X01BWF9TSE9SVF9URVJNX1JFRl9QSUNfU0VUUzsgaSsrKSB7CisgICAgICAgIGNvbnN0IEgy NjVSYXdTVFJlZlBpY1NldCAqc3RfcnBzID0gJnNwcy0+c3RfcmVmX3BpY19zZXRbaV07CisKKyAg ICAgICAgc3RyW2ldID0gKFN0ZFZpZGVvSDI2NVNob3J0VGVybVJlZlBpY1NldCkgeworICAgICAg ICAgICAgLmZsYWdzID0gKFN0ZFZpZGVvSDI2NVNob3J0VGVybVJlZlBpY1NldEZsYWdzKSB7Cisg ICAgICAgICAgICAgICAgLmludGVyX3JlZl9waWNfc2V0X3ByZWRpY3Rpb25fZmxhZyA9IHN0X3Jw cy0+aW50ZXJfcmVmX3BpY19zZXRfcHJlZGljdGlvbl9mbGFnLAorICAgICAgICAgICAgICAgIC5k ZWx0YV9ycHNfc2lnbiA9IHN0X3Jwcy0+ZGVsdGFfcnBzX3NpZ24sCisgICAgICAgICAgICB9LAor ICAgICAgICAgICAgLmRlbHRhX2lkeF9taW51czEgPSBzdF9ycHMtPmRlbHRhX2lkeF9taW51czEs CisgICAgICAgICAgICAudXNlX2RlbHRhX2ZsYWcgPSAweDAsCisgICAgICAgICAgICAuYWJzX2Rl bHRhX3Jwc19taW51czEgPSBzdF9ycHMtPmFic19kZWx0YV9ycHNfbWludXMxLAorICAgICAgICAg ICAgLnVzZWRfYnlfY3Vycl9waWNfZmxhZyAgICA9IDB4MCwKKyAgICAgICAgICAgIC51c2VkX2J5 X2N1cnJfcGljX3MwX2ZsYWcgPSAweDAsCisgICAgICAgICAgICAudXNlZF9ieV9jdXJyX3BpY19z MV9mbGFnID0gMHgwLAorICAgICAgICAgICAgLyogUmVzZXJ2ZWQgKi8KKyAgICAgICAgICAgIC8q IFJlc2VydmVkICovCisgICAgICAgICAgICAvKiBSZXNlcnZlZCAqLworICAgICAgICAgICAgLm51 bV9uZWdhdGl2ZV9waWNzID0gc3RfcnBzLT5udW1fbmVnYXRpdmVfcGljcywKKyAgICAgICAgICAg IC5udW1fcG9zaXRpdmVfcGljcyA9IHN0X3Jwcy0+bnVtX3Bvc2l0aXZlX3BpY3MsCisgICAgICAg IH07CisKKyAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBIRVZDX01BWF9SRUZTOyBqKyspIHsK KyAgICAgICAgICAgIHN0cltpXS51c2VfZGVsdGFfZmxhZyB8PSBzdF9ycHMtPnVzZV9kZWx0YV9m bGFnW2pdIDw8IGk7CisgICAgICAgICAgICBzdHJbaV0udXNlZF9ieV9jdXJyX3BpY19mbGFnIHw9 IHN0X3Jwcy0+dXNlZF9ieV9jdXJyX3BpY19mbGFnW2pdIDw8IGk7CisgICAgICAgICAgICBzdHJb aV0udXNlZF9ieV9jdXJyX3BpY19zMF9mbGFnIHw9IHN0X3Jwcy0+dXNlZF9ieV9jdXJyX3BpY19z MF9mbGFnW2pdIDw8IGk7CisgICAgICAgICAgICBzdHJbaV0udXNlZF9ieV9jdXJyX3BpY19zMV9m bGFnIHw9IHN0X3Jwcy0+dXNlZF9ieV9jdXJyX3BpY19zMV9mbGFnW2pdIDw8IGk7CisgICAgICAg ICAgICBzdHJbaV0uZGVsdGFfcG9jX3MwX21pbnVzMVtqXSA9IHN0X3Jwcy0+ZGVsdGFfcG9jX3Mw X21pbnVzMVtqXTsKKyAgICAgICAgICAgIHN0cltpXS5kZWx0YV9wb2NfczFfbWludXMxW2pdID0g c3RfcnBzLT5kZWx0YV9wb2NfczFfbWludXMxW2pdOworICAgICAgICB9CisgICAgfQorCisgICAg bHRyLT51c2VkX2J5X2N1cnJfcGljX2x0X3Nwc19mbGFnID0gMDsKKyAgICBmb3IgKGludCBpID0g MDsgaSA8IFNURF9WSURFT19IMjY1X01BWF9MT05HX1RFUk1fUkVGX1BJQ1NfU1BTOyBpKyspIHsK KyAgICAgICAgbHRyLT51c2VkX2J5X2N1cnJfcGljX2x0X3Nwc19mbGFnIHw9IHNwcy0+bHRfcmVm X3BpY19wb2NfbHNiX3Nwc1tpXSA8PCBpOworICAgICAgICBsdHItPmx0X3JlZl9waWNfcG9jX2xz Yl9zcHNbaV0gPSBzcHMtPmx0X3JlZl9waWNfcG9jX2xzYl9zcHNbaV07CisgICAgfQorCisgICAg KnZrc3BzID0gKFN0ZFZpZGVvSDI2NVNlcXVlbmNlUGFyYW1ldGVyU2V0KSB7CisgICAgICAgIC5m bGFncyA9IChTdGRWaWRlb0gyNjVTcHNGbGFncykgeworICAgICAgICAgICAgLnNwc190ZW1wb3Jh bF9pZF9uZXN0aW5nX2ZsYWcgPSBzcHMtPnNwc190ZW1wb3JhbF9pZF9uZXN0aW5nX2ZsYWcsCisg ICAgICAgICAgICAuc2VwYXJhdGVfY29sb3VyX3BsYW5lX2ZsYWcgPSBzcHMtPnNlcGFyYXRlX2Nv bG91cl9wbGFuZV9mbGFnLAorICAgICAgICAgICAgLmNvbmZvcm1hbmNlX3dpbmRvd19mbGFnID0g c3BzLT5jb25mb3JtYW5jZV93aW5kb3dfZmxhZywKKyAgICAgICAgICAgIC5zcHNfc3ViX2xheWVy X29yZGVyaW5nX2luZm9fcHJlc2VudF9mbGFnID0gc3BzLT5zcHNfc3ViX2xheWVyX29yZGVyaW5n X2luZm9fcHJlc2VudF9mbGFnLAorICAgICAgICAgICAgLnNjYWxpbmdfbGlzdF9lbmFibGVkX2Zs YWcgPSBzcHMtPnNjYWxpbmdfbGlzdF9lbmFibGVkX2ZsYWcsCisgICAgICAgICAgICAuc3BzX3Nj YWxpbmdfbGlzdF9kYXRhX3ByZXNlbnRfZmxhZyA9IHNwcy0+c3BzX3NjYWxpbmdfbGlzdF9kYXRh X3ByZXNlbnRfZmxhZywKKyAgICAgICAgICAgIC5hbXBfZW5hYmxlZF9mbGFnID0gc3BzLT5hbXBf ZW5hYmxlZF9mbGFnLAorICAgICAgICAgICAgLnNhbXBsZV9hZGFwdGl2ZV9vZmZzZXRfZW5hYmxl ZF9mbGFnID0gc3BzLT5zYW1wbGVfYWRhcHRpdmVfb2Zmc2V0X2VuYWJsZWRfZmxhZywKKyAgICAg ICAgICAgIC5wY21fZW5hYmxlZF9mbGFnID0gc3BzLT5wY21fZW5hYmxlZF9mbGFnLAorICAgICAg ICAgICAgLnBjbV9sb29wX2ZpbHRlcl9kaXNhYmxlZF9mbGFnID0gc3BzLT5wY21fbG9vcF9maWx0 ZXJfZGlzYWJsZWRfZmxhZywKKyAgICAgICAgICAgIC5sb25nX3Rlcm1fcmVmX3BpY3NfcHJlc2Vu dF9mbGFnID0gc3BzLT5sb25nX3Rlcm1fcmVmX3BpY3NfcHJlc2VudF9mbGFnLAorICAgICAgICAg ICAgLnNwc190ZW1wb3JhbF9tdnBfZW5hYmxlZF9mbGFnID0gc3BzLT5zcHNfdGVtcG9yYWxfbXZw X2VuYWJsZWRfZmxhZywKKyAgICAgICAgICAgIC5zdHJvbmdfaW50cmFfc21vb3RoaW5nX2VuYWJs ZWRfZmxhZyA9IHNwcy0+c3Ryb25nX2ludHJhX3Ntb290aGluZ19lbmFibGVkX2ZsYWcsCisgICAg ICAgICAgICAudnVpX3BhcmFtZXRlcnNfcHJlc2VudF9mbGFnID0gc3BzLT52dWlfcGFyYW1ldGVy c19wcmVzZW50X2ZsYWcsCisgICAgICAgICAgICAuc3BzX2V4dGVuc2lvbl9wcmVzZW50X2ZsYWcg PSBzcHMtPnNwc19leHRlbnNpb25fcHJlc2VudF9mbGFnLAorICAgICAgICAgICAgLnNwc19yYW5n ZV9leHRlbnNpb25fZmxhZyA9IHNwcy0+c3BzX3JhbmdlX2V4dGVuc2lvbl9mbGFnLAorICAgICAg ICAgICAgLnRyYW5zZm9ybV9za2lwX3JvdGF0aW9uX2VuYWJsZWRfZmxhZyA9IHNwcy0+dHJhbnNm b3JtX3NraXBfcm90YXRpb25fZW5hYmxlZF9mbGFnLAorICAgICAgICAgICAgLnRyYW5zZm9ybV9z a2lwX2NvbnRleHRfZW5hYmxlZF9mbGFnID0gc3BzLT50cmFuc2Zvcm1fc2tpcF9jb250ZXh0X2Vu YWJsZWRfZmxhZywKKyAgICAgICAgICAgIC5pbXBsaWNpdF9yZHBjbV9lbmFibGVkX2ZsYWcgPSBz cHMtPmltcGxpY2l0X3JkcGNtX2VuYWJsZWRfZmxhZywKKyAgICAgICAgICAgIC5leHBsaWNpdF9y ZHBjbV9lbmFibGVkX2ZsYWcgPSBzcHMtPmV4cGxpY2l0X3JkcGNtX2VuYWJsZWRfZmxhZywKKyAg ICAgICAgICAgIC5leHRlbmRlZF9wcmVjaXNpb25fcHJvY2Vzc2luZ19mbGFnID0gc3BzLT5leHRl bmRlZF9wcmVjaXNpb25fcHJvY2Vzc2luZ19mbGFnLAorICAgICAgICAgICAgLmludHJhX3Ntb290 aGluZ19kaXNhYmxlZF9mbGFnID0gc3BzLT5pbnRyYV9zbW9vdGhpbmdfZGlzYWJsZWRfZmxhZywK KyAgICAgICAgICAgIC5oaWdoX3ByZWNpc2lvbl9vZmZzZXRzX2VuYWJsZWRfZmxhZyA9IHNwcy0+ aGlnaF9wcmVjaXNpb25fb2Zmc2V0c19lbmFibGVkX2ZsYWcsCisgICAgICAgICAgICAucGVyc2lz dGVudF9yaWNlX2FkYXB0YXRpb25fZW5hYmxlZF9mbGFnID0gc3BzLT5wZXJzaXN0ZW50X3JpY2Vf YWRhcHRhdGlvbl9lbmFibGVkX2ZsYWcsCisgICAgICAgICAgICAuY2FiYWNfYnlwYXNzX2FsaWdu bWVudF9lbmFibGVkX2ZsYWcgPSBzcHMtPmNhYmFjX2J5cGFzc19hbGlnbm1lbnRfZW5hYmxlZF9m bGFnLAorICAgICAgICAgICAgLnNwc19zY2NfZXh0ZW5zaW9uX2ZsYWcgPSBzcHMtPnNwc19zY2Nf ZXh0ZW5zaW9uX2ZsYWcsCisgICAgICAgICAgICAuc3BzX2N1cnJfcGljX3JlZl9lbmFibGVkX2Zs YWcgPSBzcHMtPnNwc19jdXJyX3BpY19yZWZfZW5hYmxlZF9mbGFnLAorICAgICAgICAgICAgLnBh bGV0dGVfbW9kZV9lbmFibGVkX2ZsYWcgPSBzcHMtPnBhbGV0dGVfbW9kZV9lbmFibGVkX2ZsYWcs CisgICAgICAgICAgICAuc3BzX3BhbGV0dGVfcHJlZGljdG9yX2luaXRpYWxpemVyc19wcmVzZW50 X2ZsYWcgPSBzcHMtPnNwc19wYWxldHRlX3ByZWRpY3Rvcl9pbml0aWFsaXplcl9wcmVzZW50X2Zs YWcsCisgICAgICAgICAgICAuaW50cmFfYm91bmRhcnlfZmlsdGVyaW5nX2Rpc2FibGVkX2ZsYWcg PSBzcHMtPmludHJhX2JvdW5kYXJ5X2ZpbHRlcmluZ19kaXNhYmxlX2ZsYWcsCisgICAgICAgIH0s CisgICAgICAgIC5jaHJvbWFfZm9ybWF0X2lkYyA9IHNwcy0+Y2hyb21hX2Zvcm1hdF9pZGMsCisg ICAgICAgIC5waWNfd2lkdGhfaW5fbHVtYV9zYW1wbGVzID0gc3BzLT5waWNfd2lkdGhfaW5fbHVt YV9zYW1wbGVzLAorICAgICAgICAucGljX2hlaWdodF9pbl9sdW1hX3NhbXBsZXMgPSBzcHMtPnBp Y19oZWlnaHRfaW5fbHVtYV9zYW1wbGVzLAorICAgICAgICAuc3BzX3ZpZGVvX3BhcmFtZXRlcl9z ZXRfaWQgPSBzcHMtPnNwc192aWRlb19wYXJhbWV0ZXJfc2V0X2lkLAorICAgICAgICAuc3BzX21h eF9zdWJfbGF5ZXJzX21pbnVzMSA9IHNwcy0+c3BzX21heF9zdWJfbGF5ZXJzX21pbnVzMSwKKyAg ICAgICAgLnNwc19zZXFfcGFyYW1ldGVyX3NldF9pZCA9IHNwcy0+c3BzX3NlcV9wYXJhbWV0ZXJf c2V0X2lkLAorICAgICAgICAuYml0X2RlcHRoX2x1bWFfbWludXM4ID0gc3BzLT5iaXRfZGVwdGhf bHVtYV9taW51czgsCisgICAgICAgIC5iaXRfZGVwdGhfY2hyb21hX21pbnVzOCA9IHNwcy0+Yml0 X2RlcHRoX2Nocm9tYV9taW51czgsCisgICAgICAgIC5sb2cyX21heF9waWNfb3JkZXJfY250X2xz Yl9taW51czQgPSBzcHMtPmxvZzJfbWF4X3BpY19vcmRlcl9jbnRfbHNiX21pbnVzNCwKKyAgICAg ICAgLmxvZzJfbWluX2x1bWFfY29kaW5nX2Jsb2NrX3NpemVfbWludXMzID0gc3BzLT5sb2cyX21p bl9sdW1hX2NvZGluZ19ibG9ja19zaXplX21pbnVzMywKKyAgICAgICAgLmxvZzJfZGlmZl9tYXhf bWluX2x1bWFfY29kaW5nX2Jsb2NrX3NpemUgPSBzcHMtPmxvZzJfZGlmZl9tYXhfbWluX2x1bWFf Y29kaW5nX2Jsb2NrX3NpemUsCisgICAgICAgIC5sb2cyX21pbl9sdW1hX3RyYW5zZm9ybV9ibG9j a19zaXplX21pbnVzMiA9IHNwcy0+bG9nMl9taW5fbHVtYV90cmFuc2Zvcm1fYmxvY2tfc2l6ZV9t aW51czIsCisgICAgICAgIC5sb2cyX2RpZmZfbWF4X21pbl9sdW1hX3RyYW5zZm9ybV9ibG9ja19z aXplID0gc3BzLT5sb2cyX2RpZmZfbWF4X21pbl9sdW1hX3RyYW5zZm9ybV9ibG9ja19zaXplLAor ICAgICAgICAubWF4X3RyYW5zZm9ybV9oaWVyYXJjaHlfZGVwdGhfaW50ZXIgPSBzcHMtPm1heF90 cmFuc2Zvcm1faGllcmFyY2h5X2RlcHRoX2ludGVyLAorICAgICAgICAubWF4X3RyYW5zZm9ybV9o aWVyYXJjaHlfZGVwdGhfaW50cmEgPSBzcHMtPm1heF90cmFuc2Zvcm1faGllcmFyY2h5X2RlcHRo X2ludHJhLAorICAgICAgICAubnVtX3Nob3J0X3Rlcm1fcmVmX3BpY19zZXRzID0gc3BzLT5udW1f c2hvcnRfdGVybV9yZWZfcGljX3NldHMsCisgICAgICAgIC5udW1fbG9uZ190ZXJtX3JlZl9waWNz X3NwcyA9IHNwcy0+bnVtX2xvbmdfdGVybV9yZWZfcGljc19zcHMsCisgICAgICAgIC5wY21fc2Ft cGxlX2JpdF9kZXB0aF9sdW1hX21pbnVzMSA9IHNwcy0+cGNtX3NhbXBsZV9iaXRfZGVwdGhfbHVt YV9taW51czEsCisgICAgICAgIC5wY21fc2FtcGxlX2JpdF9kZXB0aF9jaHJvbWFfbWludXMxID0g c3BzLT5wY21fc2FtcGxlX2JpdF9kZXB0aF9jaHJvbWFfbWludXMxLAorICAgICAgICAubG9nMl9t aW5fcGNtX2x1bWFfY29kaW5nX2Jsb2NrX3NpemVfbWludXMzID0gc3BzLT5sb2cyX21pbl9wY21f bHVtYV9jb2RpbmdfYmxvY2tfc2l6ZV9taW51czMsCisgICAgICAgIC5sb2cyX2RpZmZfbWF4X21p bl9wY21fbHVtYV9jb2RpbmdfYmxvY2tfc2l6ZSA9IHNwcy0+bG9nMl9kaWZmX21heF9taW5fcGNt X2x1bWFfY29kaW5nX2Jsb2NrX3NpemUsCisgICAgICAgIC8qIFJlc2VydmVkICovCisgICAgICAg IC8qIFJlc2VydmVkICovCisgICAgICAgIC5wYWxldHRlX21heF9zaXplID0gc3BzLT5wYWxldHRl X21heF9zaXplLAorICAgICAgICAuZGVsdGFfcGFsZXR0ZV9tYXhfcHJlZGljdG9yX3NpemUgPSBz cHMtPmRlbHRhX3BhbGV0dGVfbWF4X3ByZWRpY3Rvcl9zaXplLAorICAgICAgICAubW90aW9uX3Zl Y3Rvcl9yZXNvbHV0aW9uX2NvbnRyb2xfaWRjID0gc3BzLT5tb3Rpb25fdmVjdG9yX3Jlc29sdXRp b25fY29udHJvbF9pZGMsCisgICAgICAgIC5zcHNfbnVtX3BhbGV0dGVfcHJlZGljdG9yX2luaXRp YWxpemVyc19taW51czEgPSBzcHMtPnNwc19udW1fcGFsZXR0ZV9wcmVkaWN0b3JfaW5pdGlhbGl6 ZXJfbWludXMxLAorICAgICAgICAuY29uZl93aW5fbGVmdF9vZmZzZXQgPSBzcHMtPmNvbmZfd2lu X2xlZnRfb2Zmc2V0LAorICAgICAgICAuY29uZl93aW5fcmlnaHRfb2Zmc2V0ID0gc3BzLT5jb25m X3dpbl9yaWdodF9vZmZzZXQsCisgICAgICAgIC5jb25mX3dpbl90b3Bfb2Zmc2V0ID0gc3BzLT5j b25mX3dpbl90b3Bfb2Zmc2V0LAorICAgICAgICAuY29uZl93aW5fYm90dG9tX29mZnNldCA9IHNw cy0+Y29uZl93aW5fYm90dG9tX29mZnNldCwKKyAgICAgICAgLnBQcm9maWxlVGllckxldmVsID0g cHRsX3NwcywKKyAgICAgICAgLnBEZWNQaWNCdWZNZ3IgPSBkcGJtX3NwcywKKyAgICAgICAgLnBT Y2FsaW5nTGlzdHMgPSBOVUxMLAorICAgICAgICAucFNob3J0VGVybVJlZlBpY1NldCA9IHN0ciwK KyAgICAgICAgLnBMb25nVGVybVJlZlBpY3NTcHMgPSBsdHIsCisgICAgICAgIC5wU2VxdWVuY2VQ YXJhbWV0ZXJTZXRWdWkgPSB2dWlfc3BzLAorICAgICAgICAucFByZWRpY3RvclBhbGV0dGVFbnRy aWVzID0gTlVMTCwKKyAgICB9OworCisgICAgLyogUFBTICovCisgICAgKnZrcHBzID0gKFN0ZFZp ZGVvSDI2NVBpY3R1cmVQYXJhbWV0ZXJTZXQpIHsKKyAgICAgICAgLmZsYWdzID0gKFN0ZFZpZGVv SDI2NVBwc0ZsYWdzKSB7CisgICAgICAgICAgICAuZGVwZW5kZW50X3NsaWNlX3NlZ21lbnRzX2Vu YWJsZWRfZmxhZyA9IHBwcy0+ZGVwZW5kZW50X3NsaWNlX3NlZ21lbnRzX2VuYWJsZWRfZmxhZywK KyAgICAgICAgICAgIC5vdXRwdXRfZmxhZ19wcmVzZW50X2ZsYWcgPSBwcHMtPm91dHB1dF9mbGFn X3ByZXNlbnRfZmxhZywKKyAgICAgICAgICAgIC5zaWduX2RhdGFfaGlkaW5nX2VuYWJsZWRfZmxh ZyA9IHBwcy0+c2lnbl9kYXRhX2hpZGluZ19lbmFibGVkX2ZsYWcsCisgICAgICAgICAgICAuY2Fi YWNfaW5pdF9wcmVzZW50X2ZsYWcgPSBwcHMtPmNhYmFjX2luaXRfcHJlc2VudF9mbGFnLAorICAg ICAgICAgICAgLmNvbnN0cmFpbmVkX2ludHJhX3ByZWRfZmxhZyA9IHBwcy0+Y29uc3RyYWluZWRf aW50cmFfcHJlZF9mbGFnLAorICAgICAgICAgICAgLnRyYW5zZm9ybV9za2lwX2VuYWJsZWRfZmxh ZyA9IHBwcy0+dHJhbnNmb3JtX3NraXBfZW5hYmxlZF9mbGFnLAorICAgICAgICAgICAgLmN1X3Fw X2RlbHRhX2VuYWJsZWRfZmxhZyA9IHBwcy0+Y3VfcXBfZGVsdGFfZW5hYmxlZF9mbGFnLAorICAg ICAgICAgICAgLnBwc19zbGljZV9jaHJvbWFfcXBfb2Zmc2V0c19wcmVzZW50X2ZsYWcgPSBwcHMt PnBwc19zbGljZV9jaHJvbWFfcXBfb2Zmc2V0c19wcmVzZW50X2ZsYWcsCisgICAgICAgICAgICAu d2VpZ2h0ZWRfcHJlZF9mbGFnID0gcHBzLT53ZWlnaHRlZF9wcmVkX2ZsYWcsCisgICAgICAgICAg ICAud2VpZ2h0ZWRfYmlwcmVkX2ZsYWcgPSBwcHMtPndlaWdodGVkX2JpcHJlZF9mbGFnLAorICAg ICAgICAgICAgLnRyYW5zcXVhbnRfYnlwYXNzX2VuYWJsZWRfZmxhZyA9IHBwcy0+dHJhbnNxdWFu dF9ieXBhc3NfZW5hYmxlZF9mbGFnLAorICAgICAgICAgICAgLnRpbGVzX2VuYWJsZWRfZmxhZyA9 IHBwcy0+dGlsZXNfZW5hYmxlZF9mbGFnLAorICAgICAgICAgICAgLmVudHJvcHlfY29kaW5nX3N5 bmNfZW5hYmxlZF9mbGFnID0gcHBzLT5lbnRyb3B5X2NvZGluZ19zeW5jX2VuYWJsZWRfZmxhZywK KyAgICAgICAgICAgIC51bmlmb3JtX3NwYWNpbmdfZmxhZyA9IHBwcy0+dW5pZm9ybV9zcGFjaW5n X2ZsYWcsCisgICAgICAgICAgICAubG9vcF9maWx0ZXJfYWNyb3NzX3RpbGVzX2VuYWJsZWRfZmxh ZyA9IHBwcy0+bG9vcF9maWx0ZXJfYWNyb3NzX3RpbGVzX2VuYWJsZWRfZmxhZywKKyAgICAgICAg ICAgIC5wcHNfbG9vcF9maWx0ZXJfYWNyb3NzX3NsaWNlc19lbmFibGVkX2ZsYWcgPSBwcHMtPnBw c19sb29wX2ZpbHRlcl9hY3Jvc3Nfc2xpY2VzX2VuYWJsZWRfZmxhZywKKyAgICAgICAgICAgIC5k ZWJsb2NraW5nX2ZpbHRlcl9jb250cm9sX3ByZXNlbnRfZmxhZyA9IHBwcy0+ZGVibG9ja2luZ19m aWx0ZXJfY29udHJvbF9wcmVzZW50X2ZsYWcsCisgICAgICAgICAgICAuZGVibG9ja2luZ19maWx0 ZXJfb3ZlcnJpZGVfZW5hYmxlZF9mbGFnID0gcHBzLT5kZWJsb2NraW5nX2ZpbHRlcl9vdmVycmlk ZV9lbmFibGVkX2ZsYWcsCisgICAgICAgICAgICAucHBzX2RlYmxvY2tpbmdfZmlsdGVyX2Rpc2Fi bGVkX2ZsYWcgPSBwcHMtPnBwc19kZWJsb2NraW5nX2ZpbHRlcl9kaXNhYmxlZF9mbGFnLAorICAg ICAgICAgICAgLnBwc19zY2FsaW5nX2xpc3RfZGF0YV9wcmVzZW50X2ZsYWcgPSBwcHMtPnBwc19z Y2FsaW5nX2xpc3RfZGF0YV9wcmVzZW50X2ZsYWcsCisgICAgICAgICAgICAubGlzdHNfbW9kaWZp Y2F0aW9uX3ByZXNlbnRfZmxhZyA9IHBwcy0+bGlzdHNfbW9kaWZpY2F0aW9uX3ByZXNlbnRfZmxh ZywKKyAgICAgICAgICAgIC5zbGljZV9zZWdtZW50X2hlYWRlcl9leHRlbnNpb25fcHJlc2VudF9m bGFnID0gcHBzLT5zbGljZV9zZWdtZW50X2hlYWRlcl9leHRlbnNpb25fcHJlc2VudF9mbGFnLAor ICAgICAgICAgICAgLnBwc19leHRlbnNpb25fcHJlc2VudF9mbGFnID0gcHBzLT5wcHNfZXh0ZW5z aW9uX3ByZXNlbnRfZmxhZywKKyAgICAgICAgICAgIC5jcm9zc19jb21wb25lbnRfcHJlZGljdGlv bl9lbmFibGVkX2ZsYWcgPSBwcHMtPmNyb3NzX2NvbXBvbmVudF9wcmVkaWN0aW9uX2VuYWJsZWRf ZmxhZywKKyAgICAgICAgICAgIC5jaHJvbWFfcXBfb2Zmc2V0X2xpc3RfZW5hYmxlZF9mbGFnID0g cHBzLT5jaHJvbWFfcXBfb2Zmc2V0X2xpc3RfZW5hYmxlZF9mbGFnLAorICAgICAgICAgICAgLnBw c19jdXJyX3BpY19yZWZfZW5hYmxlZF9mbGFnID0gcHBzLT5wcHNfY3Vycl9waWNfcmVmX2VuYWJs ZWRfZmxhZywKKyAgICAgICAgICAgIC5yZXNpZHVhbF9hZGFwdGl2ZV9jb2xvdXJfdHJhbnNmb3Jt X2VuYWJsZWRfZmxhZyA9IHBwcy0+cmVzaWR1YWxfYWRhcHRpdmVfY29sb3VyX3RyYW5zZm9ybV9l bmFibGVkX2ZsYWcsCisgICAgICAgICAgICAucHBzX3NsaWNlX2FjdF9xcF9vZmZzZXRzX3ByZXNl bnRfZmxhZyA9IHBwcy0+cHBzX3NsaWNlX2FjdF9xcF9vZmZzZXRzX3ByZXNlbnRfZmxhZywKKyAg ICAgICAgICAgIC5wcHNfcGFsZXR0ZV9wcmVkaWN0b3JfaW5pdGlhbGl6ZXJzX3ByZXNlbnRfZmxh ZyA9IHBwcy0+cHBzX3BhbGV0dGVfcHJlZGljdG9yX2luaXRpYWxpemVyX3ByZXNlbnRfZmxhZywK KyAgICAgICAgICAgIC5tb25vY2hyb21lX3BhbGV0dGVfZmxhZyA9IHBwcy0+bW9ub2Nocm9tZV9w YWxldHRlX2ZsYWcsCisgICAgICAgICAgICAucHBzX3JhbmdlX2V4dGVuc2lvbl9mbGFnID0gcHBz LT5wcHNfcmFuZ2VfZXh0ZW5zaW9uX2ZsYWcsCisgICAgICAgIH0sCisgICAgICAgIC5wcHNfcGlj X3BhcmFtZXRlcl9zZXRfaWQgPSBwcHMtPnBwc19waWNfcGFyYW1ldGVyX3NldF9pZCwKKyAgICAg ICAgLnBwc19zZXFfcGFyYW1ldGVyX3NldF9pZCA9IHBwcy0+cHBzX3NlcV9wYXJhbWV0ZXJfc2V0 X2lkLAorICAgICAgICAuc3BzX3ZpZGVvX3BhcmFtZXRlcl9zZXRfaWQgPSBzcHMtPnNwc192aWRl b19wYXJhbWV0ZXJfc2V0X2lkLAorICAgICAgICAubnVtX2V4dHJhX3NsaWNlX2hlYWRlcl9iaXRz ID0gcHBzLT5udW1fZXh0cmFfc2xpY2VfaGVhZGVyX2JpdHMsCisgICAgICAgIC5udW1fcmVmX2lk eF9sMF9kZWZhdWx0X2FjdGl2ZV9taW51czEgPSBwcHMtPm51bV9yZWZfaWR4X2wwX2RlZmF1bHRf YWN0aXZlX21pbnVzMSwKKyAgICAgICAgLm51bV9yZWZfaWR4X2wxX2RlZmF1bHRfYWN0aXZlX21p bnVzMSA9IHBwcy0+bnVtX3JlZl9pZHhfbDFfZGVmYXVsdF9hY3RpdmVfbWludXMxLAorICAgICAg ICAuaW5pdF9xcF9taW51czI2ID0gcHBzLT5pbml0X3FwX21pbnVzMjYsCisgICAgICAgIC5kaWZm X2N1X3FwX2RlbHRhX2RlcHRoID0gcHBzLT5kaWZmX2N1X3FwX2RlbHRhX2RlcHRoLAorICAgICAg ICAucHBzX2NiX3FwX29mZnNldCA9IHBwcy0+cHBzX2NiX3FwX29mZnNldCwKKyAgICAgICAgLnBw c19jcl9xcF9vZmZzZXQgPSBwcHMtPnBwc19jcl9xcF9vZmZzZXQsCisgICAgICAgIC5wcHNfYmV0 YV9vZmZzZXRfZGl2MiA9IHBwcy0+cHBzX2JldGFfb2Zmc2V0X2RpdjIsCisgICAgICAgIC5wcHNf dGNfb2Zmc2V0X2RpdjIgPSBwcHMtPnBwc190Y19vZmZzZXRfZGl2MiwKKyAgICAgICAgLmxvZzJf cGFyYWxsZWxfbWVyZ2VfbGV2ZWxfbWludXMyID0gcHBzLT5sb2cyX3BhcmFsbGVsX21lcmdlX2xl dmVsX21pbnVzMiwKKyAgICAgICAgLmxvZzJfbWF4X3RyYW5zZm9ybV9za2lwX2Jsb2NrX3NpemVf bWludXMyID0gcHBzLT5sb2cyX21heF90cmFuc2Zvcm1fc2tpcF9ibG9ja19zaXplX21pbnVzMiwK KyAgICAgICAgLmRpZmZfY3VfY2hyb21hX3FwX29mZnNldF9kZXB0aCA9IHBwcy0+ZGlmZl9jdV9j aHJvbWFfcXBfb2Zmc2V0X2RlcHRoLAorICAgICAgICAuY2hyb21hX3FwX29mZnNldF9saXN0X2xl bl9taW51czEgPSBwcHMtPmNocm9tYV9xcF9vZmZzZXRfbGlzdF9sZW5fbWludXMxLAorICAgICAg ICAubG9nMl9zYW9fb2Zmc2V0X3NjYWxlX2x1bWEgPSBwcHMtPmxvZzJfc2FvX29mZnNldF9zY2Fs ZV9sdW1hLAorICAgICAgICAubG9nMl9zYW9fb2Zmc2V0X3NjYWxlX2Nocm9tYSA9IHBwcy0+bG9n Ml9zYW9fb2Zmc2V0X3NjYWxlX2Nocm9tYSwKKyAgICAgICAgLnBwc19hY3RfeV9xcF9vZmZzZXRf cGx1czUgPSBwcHMtPnBwc19hY3RfeV9xcF9vZmZzZXRfcGx1czUsCisgICAgICAgIC5wcHNfYWN0 X2NiX3FwX29mZnNldF9wbHVzNSA9IHBwcy0+cHBzX2FjdF9jYl9xcF9vZmZzZXRfcGx1czUsCisg ICAgICAgIC5wcHNfYWN0X2NyX3FwX29mZnNldF9wbHVzMyA9IHBwcy0+cHBzX2FjdF9jcl9xcF9v ZmZzZXRfcGx1czMsCisgICAgICAgIC5wcHNfbnVtX3BhbGV0dGVfcHJlZGljdG9yX2luaXRpYWxp emVycyA9IHBwcy0+cHBzX251bV9wYWxldHRlX3ByZWRpY3Rvcl9pbml0aWFsaXplciwKKyAgICAg ICAgLmx1bWFfYml0X2RlcHRoX2VudHJ5X21pbnVzOCA9IHBwcy0+bHVtYV9iaXRfZGVwdGhfZW50 cnlfbWludXM4LAorICAgICAgICAuY2hyb21hX2JpdF9kZXB0aF9lbnRyeV9taW51czggPSBwcHMt PmNocm9tYV9iaXRfZGVwdGhfZW50cnlfbWludXM4LAorICAgICAgICAubnVtX3RpbGVfY29sdW1u c19taW51czEgPSBwcHMtPm51bV90aWxlX2NvbHVtbnNfbWludXMxLAorICAgICAgICAubnVtX3Rp bGVfcm93c19taW51czEgPSBwcHMtPm51bV90aWxlX3Jvd3NfbWludXMxLAorICAgICAgICAucFNj YWxpbmdMaXN0cyA9IE5VTEwsCisgICAgICAgIC5wUHJlZGljdG9yUGFsZXR0ZUVudHJpZXMgPSBO VUxMLAorICAgIH07CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHBwcy0+bnVtX3RpbGVfY29s dW1uc19taW51czE7IGkrKykKKyAgICAgICAgdmtwcHMtPmNvbHVtbl93aWR0aF9taW51czFbaV0g PSBwcHMtPmNvbHVtbl93aWR0aF9taW51czFbaV07CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8 IHBwcy0+bnVtX3RpbGVfcm93c19taW51czE7IGkrKykKKyAgICAgICAgdmtwcHMtPnJvd19oZWln aHRfbWludXMxW2ldID0gcHBzLT5yb3dfaGVpZ2h0X21pbnVzMVtpXTsKKworICAgIGZvciAoaW50 IGkgPSAwOyBpIDw9IHBwcy0+Y2hyb21hX3FwX29mZnNldF9saXN0X2xlbl9taW51czE7IGkrKykg eworICAgICAgICB2a3Bwcy0+Y2JfcXBfb2Zmc2V0X2xpc3RbaV0gPSBwcHMtPmNiX3FwX29mZnNl dF9saXN0W2ldOworICAgICAgICB2a3Bwcy0+Y3JfcXBfb2Zmc2V0X2xpc3RbaV0gPSBwcHMtPmNy X3FwX29mZnNldF9saXN0W2ldOworICAgIH0KKworICAgIC8qIFZQUyAqLworICAgIGZvciAoaW50 IGkgPSAwOyBpIDwgU1REX1ZJREVPX0gyNjVfU1VCTEFZRVJTX0xJU1RfU0laRTsgaSsrKSB7Cisg ICAgICAgIGRwYm1fdnBzLT5tYXhfbGF0ZW5jeV9pbmNyZWFzZV9wbHVzMVtpXSA9IHZwcy0+dnBz X21heF9sYXRlbmN5X2luY3JlYXNlX3BsdXMxW2ldOworICAgICAgICBkcGJtX3Zwcy0+bWF4X2Rl Y19waWNfYnVmZmVyaW5nX21pbnVzMVtpXSA9IHZwcy0+dnBzX21heF9kZWNfcGljX2J1ZmZlcmlu Z19taW51czFbaV07CisgICAgICAgIGRwYm1fdnBzLT5tYXhfbnVtX3Jlb3JkZXJfcGljc1tpXSA9 IHZwcy0+dnBzX21heF9udW1fcmVvcmRlcl9waWNzW2ldOworICAgIH0KKworICAgICpwdGxfdnBz ID0gKFN0ZFZpZGVvSDI2NVByb2ZpbGVUaWVyTGV2ZWwpIHsKKyAgICAgICAgLmZsYWdzID0gKFN0 ZFZpZGVvSDI2NVByb2ZpbGVUaWVyTGV2ZWxGbGFncykgeworICAgICAgICAgICAgLmdlbmVyYWxf dGllcl9mbGFnID0gdnBzLT5wcm9maWxlX3RpZXJfbGV2ZWwuZ2VuZXJhbF90aWVyX2ZsYWcsCisg ICAgICAgICAgICAuZ2VuZXJhbF9wcm9ncmVzc2l2ZV9zb3VyY2VfZmxhZyA9IHZwcy0+cHJvZmls ZV90aWVyX2xldmVsLmdlbmVyYWxfcHJvZ3Jlc3NpdmVfc291cmNlX2ZsYWcsCisgICAgICAgICAg ICAuZ2VuZXJhbF9pbnRlcmxhY2VkX3NvdXJjZV9mbGFnID0gdnBzLT5wcm9maWxlX3RpZXJfbGV2 ZWwuZ2VuZXJhbF9pbnRlcmxhY2VkX3NvdXJjZV9mbGFnLAorICAgICAgICAgICAgLmdlbmVyYWxf bm9uX3BhY2tlZF9jb25zdHJhaW50X2ZsYWcgPSB2cHMtPnByb2ZpbGVfdGllcl9sZXZlbC5nZW5l cmFsX25vbl9wYWNrZWRfY29uc3RyYWludF9mbGFnLAorICAgICAgICAgICAgLmdlbmVyYWxfZnJh bWVfb25seV9jb25zdHJhaW50X2ZsYWcgPSB2cHMtPnByb2ZpbGVfdGllcl9sZXZlbC5nZW5lcmFs X2ZyYW1lX29ubHlfY29uc3RyYWludF9mbGFnLAorICAgICAgICB9LAorICAgICAgICAuZ2VuZXJh bF9wcm9maWxlX2lkYyA9IGZmX3ZrX2gyNjVfcHJvZmlsZV90b192ayh2cHMtPnByb2ZpbGVfdGll cl9sZXZlbC5nZW5lcmFsX3Byb2ZpbGVfaWRjKSwKKyAgICAgICAgLmdlbmVyYWxfbGV2ZWxfaWRj ID0gZmZfdmtfaDI2NV9sZXZlbF90b192ayh2cHMtPnByb2ZpbGVfdGllcl9sZXZlbC5nZW5lcmFs X2xldmVsX2lkYyksCisgICAgfTsKKworICAgICp2a3ZwcyA9IChTdGRWaWRlb0gyNjVWaWRlb1Bh cmFtZXRlclNldCkgeworICAgICAgICAuZmxhZ3MgPSAoU3RkVmlkZW9IMjY1VnBzRmxhZ3MpIHsK KyAgICAgICAgICAgIC52cHNfdGVtcG9yYWxfaWRfbmVzdGluZ19mbGFnID0gdnBzLT52cHNfdGVt cG9yYWxfaWRfbmVzdGluZ19mbGFnLAorICAgICAgICAgICAgLnZwc19zdWJfbGF5ZXJfb3JkZXJp bmdfaW5mb19wcmVzZW50X2ZsYWcgPSB2cHMtPnZwc19zdWJfbGF5ZXJfb3JkZXJpbmdfaW5mb19w cmVzZW50X2ZsYWcsCisgICAgICAgICAgICAudnBzX3RpbWluZ19pbmZvX3ByZXNlbnRfZmxhZyA9 IHZwcy0+dnBzX3RpbWluZ19pbmZvX3ByZXNlbnRfZmxhZywKKyAgICAgICAgICAgIC52cHNfcG9j X3Byb3BvcnRpb25hbF90b190aW1pbmdfZmxhZyA9IHZwcy0+dnBzX3BvY19wcm9wb3J0aW9uYWxf dG9fdGltaW5nX2ZsYWcsCisgICAgICAgIH0sCisgICAgICAgIC52cHNfdmlkZW9fcGFyYW1ldGVy X3NldF9pZCA9IHZwcy0+dnBzX3ZpZGVvX3BhcmFtZXRlcl9zZXRfaWQsCisgICAgICAgIC52cHNf bWF4X3N1Yl9sYXllcnNfbWludXMxID0gdnBzLT52cHNfbWF4X3N1Yl9sYXllcnNfbWludXMxLAor ICAgICAgICAvKiBSZXNlcnZlZCAqLworICAgICAgICAvKiBSZXNlcnZlZCAqLworICAgICAgICAu dnBzX251bV91bml0c19pbl90aWNrID0gdnBzLT52cHNfbnVtX3VuaXRzX2luX3RpY2ssCisgICAg ICAgIC52cHNfdGltZV9zY2FsZSA9IHZwcy0+dnBzX3RpbWVfc2NhbGUsCisgICAgICAgIC52cHNf bnVtX3RpY2tzX3BvY19kaWZmX29uZV9taW51czEgPSB2cHMtPnZwc19udW1fdGlja3NfcG9jX2Rp ZmZfb25lX21pbnVzMSwKKyAgICAgICAgLyogUmVzZXJ2ZWQgKi8KKyAgICAgICAgLnBEZWNQaWNC dWZNZ3IgPSBkcGJtX3ZwcywKKyAgICAgICAgLnBIcmRQYXJhbWV0ZXJzID0gdnVpX2hlYWRlcl92 cHMsCisgICAgICAgIC5wUHJvZmlsZVRpZXJMZXZlbCA9IHB0bF92cHMsCisgICAgfTsKKworICAg IHJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNyZWF0ZV9zZXNzaW9uX3BhcmFtcyhBVkNvZGVj Q29udGV4dCAqYXZjdHgpCit7CisgICAgaW50IGVycjsKKyAgICBWdWxrYW5FbmNvZGVIMjY1Q29u dGV4dCAqZW5jID0gYXZjdHgtPnByaXZfZGF0YTsKKyAgICBGRlZ1bGthbkVuY29kZUNvbnRleHQg KmN0eCA9ICZlbmMtPmNvbW1vbjsKKyAgICBGRlZ1bGthbkNvbnRleHQgKnMgPSAmY3R4LT5zOwor ICAgIEZGVnVsa2FuRnVuY3Rpb25zICp2ayA9ICZjdHgtPnMudmtmbjsKKworICAgIFZ1bGthbkgy NjVVbml0cyB2a191bml0cyA9IHsgMCB9OworCisgICAgVmtWaWRlb0VuY29kZUgyNjVTZXNzaW9u UGFyYW1ldGVyc0FkZEluZm9LSFIgaDI2NV9wYXJhbXNfaW5mbzsKKyAgICBWa1ZpZGVvRW5jb2Rl SDI2NVNlc3Npb25QYXJhbWV0ZXJzQ3JlYXRlSW5mb0tIUiBoMjY1X3BhcmFtczsKKworICAgIC8q IENvbnZlcnQgaXQgdG8gVnVsa2FuICovCisgICAgZXJyID0gYmFzZV91bml0X3RvX3ZrKGF2Y3R4 LCAmdmtfdW5pdHMpOworICAgIGlmIChlcnIgPCAwKSB7CisgICAgICAgIGF2X2xvZyhhdmN0eCwg QVZfTE9HX0VSUk9SLCAiVW5hYmxlIHRvIGNvbnZlcnQgU1BTL1BQUyB1bml0cyB0byBWdWxrYW46 ICVzXG4iLAorICAgICAgICAgICAgICAgYXZfZXJyMnN0cihlcnIpKTsKKyAgICAgICAgcmV0dXJu IGVycjsKKyAgICB9CisKKyAgICAvKiBEZXN0cm95IHRoZSBzZXNzaW9uIHBhcmFtcyAqLworICAg IGlmIChjdHgtPnNlc3Npb25fcGFyYW1zKQorICAgICAgICB2ay0+RGVzdHJveVZpZGVvU2Vzc2lv blBhcmFtZXRlcnNLSFIocy0+aHdjdHgtPmFjdF9kZXYsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjdHgtPnNlc3Npb25fcGFyYW1zLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy0+aHdjdHgtPmFsbG9jKTsKKworICAg IGgyNjVfcGFyYW1zX2luZm8gPSAoVmtWaWRlb0VuY29kZUgyNjVTZXNzaW9uUGFyYW1ldGVyc0Fk ZEluZm9LSFIpIHsKKyAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfVklERU9fRU5D T0RFX0gyNjVfU0VTU0lPTl9QQVJBTUVURVJTX0FERF9JTkZPX0tIUiwKKyAgICAgICAgLnBTdGRT UFNzID0gJnZrX3VuaXRzLnNwcywKKyAgICAgICAgLnN0ZFNQU0NvdW50ID0gMSwKKyAgICAgICAg LnBTdGRQUFNzID0gJnZrX3VuaXRzLnBwcywKKyAgICAgICAgLnN0ZFBQU0NvdW50ID0gMSwKKyAg ICAgICAgLnBTdGRWUFNzID0gJnZrX3VuaXRzLnZwcywKKyAgICAgICAgLnN0ZFZQU0NvdW50ID0g MSwKKyAgICB9OworICAgIGgyNjVfcGFyYW1zID0gKFZrVmlkZW9FbmNvZGVIMjY1U2Vzc2lvblBh cmFtZXRlcnNDcmVhdGVJbmZvS0hSKSB7CisgICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9U WVBFX1ZJREVPX0VOQ09ERV9IMjY1X1NFU1NJT05fUEFSQU1FVEVSU19DUkVBVEVfSU5GT19LSFIs CisgICAgICAgIC5tYXhTdGRTUFNDb3VudCA9IDEsCisgICAgICAgIC5tYXhTdGRQUFNDb3VudCA9 IDEsCisgICAgICAgIC5tYXhTdGRWUFNDb3VudCA9IDEsCisgICAgICAgIC5wUGFyYW1ldGVyc0Fk ZEluZm8gPSAmaDI2NV9wYXJhbXNfaW5mbywKKyAgICB9OworCisgICAgcmV0dXJuIGZmX3Z1bGth bl9lbmNvZGVfY3JlYXRlX3Nlc3Npb25fcGFyYW1zKGF2Y3R4LCBjdHgsICZoMjY1X3BhcmFtcyk7 Cit9CisKK3N0YXRpYyBpbnQgcGFyc2VfZmVlZGJhY2tfdW5pdHMoQVZDb2RlY0NvbnRleHQgKmF2 Y3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICpkYXRh LCBzaXplX3Qgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNwc19v dmVycmlkZSwgaW50IHBwc19vdmVycmlkZSkKK3sKKyAgICBpbnQgZXJyOworICAgIFZ1bGthbkVu Y29kZUgyNjVDb250ZXh0ICplbmMgPSBhdmN0eC0+cHJpdl9kYXRhOworCisgICAgQ29kZWRCaXRz dHJlYW1Db250ZXh0ICpjYnM7CisgICAgQ29kZWRCaXRzdHJlYW1GcmFnbWVudCBhdSA9IHsgMCB9 OworCisgICAgZXJyID0gZmZfY2JzX2luaXQoJmNicywgQVZfQ09ERUNfSURfSEVWQywgYXZjdHgp OworICAgIGlmIChlcnIgPCAwKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgZXJyID0gZmZf Y2JzX3JlYWQoY2JzLCAmYXUsIE5VTEwsIGRhdGEsIHNpemUpOworICAgIGlmIChlcnIgPCAwKSB7 CisgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiVW5hYmxlIHRvIHBhcnNlIGZl ZWRiYWNrIHVuaXRzLCBiYWQgZHJpdmVyczogJXNcbiIsCisgICAgICAgICAgICAgICBhdl9lcnIy c3RyKGVycikpOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgaWYgKHNwc19vdmVy cmlkZSkgeworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGF1Lm5iX3VuaXRzOyBpKyspIHsK KyAgICAgICAgICAgIGlmIChhdS51bml0c1tpXS50eXBlID09IEhFVkNfTkFMX1NQUykgeworICAg ICAgICAgICAgICAgIEgyNjVSYXdTUFMgKnNwcyA9IGF1LnVuaXRzW2ldLmNvbnRlbnQ7CisgICAg ICAgICAgICAgICAgZW5jLT51bml0cy5yYXdfc3BzLnBpY193aWR0aF9pbl9sdW1hX3NhbXBsZXMg PSBzcHMtPnBpY193aWR0aF9pbl9sdW1hX3NhbXBsZXM7CisgICAgICAgICAgICAgICAgZW5jLT51 bml0cy5yYXdfc3BzLnBpY19oZWlnaHRfaW5fbHVtYV9zYW1wbGVzID0gc3BzLT5waWNfaGVpZ2h0 X2luX2x1bWFfc2FtcGxlczsKKyAgICAgICAgICAgICAgICBlbmMtPnVuaXRzLnJhd19zcHMubG9n Ml9kaWZmX21heF9taW5fbHVtYV9jb2RpbmdfYmxvY2tfc2l6ZSA9IHNwcy0+bG9nMl9kaWZmX21h eF9taW5fbHVtYV9jb2RpbmdfYmxvY2tfc2l6ZTsKKyAgICAgICAgICAgICAgICBlbmMtPnVuaXRz LnJhd19zcHMubWF4X3RyYW5zZm9ybV9oaWVyYXJjaHlfZGVwdGhfaW50ZXIgPSBzcHMtPm1heF90 cmFuc2Zvcm1faGllcmFyY2h5X2RlcHRoX2ludGVyOworICAgICAgICAgICAgICAgIGVuYy0+dW5p dHMucmF3X3Nwcy5tYXhfdHJhbnNmb3JtX2hpZXJhcmNoeV9kZXB0aF9pbnRyYSA9IHNwcy0+bWF4 X3RyYW5zZm9ybV9oaWVyYXJjaHlfZGVwdGhfaW50cmE7CisgICAgICAgICAgICB9CisgICAgICAg IH0KKyAgICB9CisKKyAgICAvKiBJZiBQUFMgaGFzIGFuIG92ZXJyaWRlLCBqdXN0IGNvcHkgaXQg ZW50aXJlbHkuICovCisgICAgaWYgKHBwc19vdmVycmlkZSkgeworICAgICAgICBmb3IgKGludCBp ID0gMDsgaSA8IGF1Lm5iX3VuaXRzOyBpKyspIHsKKyAgICAgICAgICAgIGlmIChhdS51bml0c1tp XS50eXBlID09IEhFVkNfTkFMX1BQUykgeworICAgICAgICAgICAgICAgIEgyNjVSYXdQUFMgKnBw cyA9IGF1LnVuaXRzW2ldLmNvbnRlbnQ7CisgICAgICAgICAgICAgICAgbWVtY3B5KCZlbmMtPnVu aXRzLnJhd19wcHMsIHBwcywgc2l6ZW9mKCpwcHMpKTsKKyAgICAgICAgICAgICAgICBlbmMtPmZp eGVkX3FwX2lkciA9IHBwcy0+aW5pdF9xcF9taW51czI2ICsgMjY7CisgICAgICAgICAgICAgICAg YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBlcnIgPSAwOwor ZmFpbDoKKyAgICBmZl9jYnNfZnJhZ21lbnRfZnJlZSgmYXUpOworICAgIGZmX2Nic19jbG9zZSgm Y2JzKTsKKworICAgIHJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgaW5pdF9iYXNlX3VuaXRz KEFWQ29kZWNDb250ZXh0ICphdmN0eCkKK3sKKyAgICBpbnQgZXJyOworICAgIFZrUmVzdWx0IHJl dDsKKyAgICBWdWxrYW5FbmNvZGVIMjY1Q29udGV4dCAqZW5jID0gYXZjdHgtPnByaXZfZGF0YTsK KyAgICBGRlZ1bGthbkVuY29kZUNvbnRleHQgKmN0eCA9ICZlbmMtPmNvbW1vbjsKKyAgICBGRlZ1 bGthbkNvbnRleHQgKnMgPSAmY3R4LT5zOworICAgIEZGVnVsa2FuRnVuY3Rpb25zICp2ayA9ICZj dHgtPnMudmtmbjsKKworICAgIFZrVmlkZW9FbmNvZGVIMjY1U2Vzc2lvblBhcmFtZXRlcnNHZXRJ bmZvS0hSIGgyNjVfcGFyYW1zX2luZm87CisgICAgVmtWaWRlb0VuY29kZVNlc3Npb25QYXJhbWV0 ZXJzR2V0SW5mb0tIUiBwYXJhbXNfaW5mbzsKKyAgICBWa1ZpZGVvRW5jb2RlSDI2NVNlc3Npb25Q YXJhbWV0ZXJzRmVlZGJhY2tJbmZvS0hSIGgyNjVfcGFyYW1zX2ZlZWRiYWNrOworICAgIFZrVmlk ZW9FbmNvZGVTZXNzaW9uUGFyYW1ldGVyc0ZlZWRiYWNrSW5mb0tIUiBwYXJhbXNfZmVlZGJhY2s7 CisKKyAgICB2b2lkICpkYXRhID0gTlVMTDsKKyAgICBzaXplX3QgZGF0YV9zaXplID0gMDsKKwor ICAgIC8qIEdlbmVyYXRlIFNQUy9QUFMgdW5pdCBpbmZvICovCisgICAgZXJyID0gaW5pdF9zZXF1 ZW5jZV9oZWFkZXJzKGF2Y3R4KTsKKyAgICBpZiAoZXJyIDwgMCkgeworICAgICAgICBhdl9sb2co YXZjdHgsIEFWX0xPR19FUlJPUiwgIlVuYWJsZSB0byBpbml0aWFsaXplIFNQUy9QUFMgdW5pdHM6 ICVzXG4iLAorICAgICAgICAgICAgICAgYXZfZXJyMnN0cihlcnIpKTsKKyAgICAgICAgcmV0dXJu IGVycjsKKyAgICB9CisKKyAgICAvKiBDcmVhdGUgc2Vzc2lvbiBwYXJhbWV0ZXJzIGZyb20gdGhl bSAqLworICAgIGVyciA9IGNyZWF0ZV9zZXNzaW9uX3BhcmFtcyhhdmN0eCk7CisgICAgaWYgKGVy ciA8IDApCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICBoMjY1X3BhcmFtc19pbmZvID0gKFZr VmlkZW9FbmNvZGVIMjY1U2Vzc2lvblBhcmFtZXRlcnNHZXRJbmZvS0hSKSB7CisgICAgICAgIC5z VHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX1ZJREVPX0VOQ09ERV9IMjY1X1NFU1NJT05fUEFSQU1F VEVSU19HRVRfSU5GT19LSFIsCisgICAgICAgIC53cml0ZVN0ZFNQUyA9IDEsCisgICAgICAgIC53 cml0ZVN0ZFBQUyA9IDEsCisgICAgICAgIC53cml0ZVN0ZFZQUyA9IDEsCisgICAgICAgIC5zdGRT UFNJZCA9IGVuYy0+dW5pdHMucmF3X3Nwcy5zcHNfc2VxX3BhcmFtZXRlcl9zZXRfaWQsCisgICAg ICAgIC5zdGRQUFNJZCA9IGVuYy0+dW5pdHMucmF3X3Bwcy5wcHNfcGljX3BhcmFtZXRlcl9zZXRf aWQsCisgICAgICAgIC5zdGRWUFNJZCA9IGVuYy0+dW5pdHMucmF3X3Zwcy52cHNfdmlkZW9fcGFy YW1ldGVyX3NldF9pZCwKKyAgICB9OworICAgIHBhcmFtc19pbmZvID0gKFZrVmlkZW9FbmNvZGVT ZXNzaW9uUGFyYW1ldGVyc0dldEluZm9LSFIpIHsKKyAgICAgICAgLnNUeXBlID0gVktfU1RSVUNU VVJFX1RZUEVfVklERU9fRU5DT0RFX1NFU1NJT05fUEFSQU1FVEVSU19HRVRfSU5GT19LSFIsCisg ICAgICAgIC5wTmV4dCA9ICZoMjY1X3BhcmFtc19pbmZvLAorICAgICAgICAudmlkZW9TZXNzaW9u UGFyYW1ldGVycyA9IGN0eC0+c2Vzc2lvbl9wYXJhbXMsCisgICAgfTsKKworICAgIGgyNjVfcGFy YW1zX2ZlZWRiYWNrID0gKFZrVmlkZW9FbmNvZGVIMjY1U2Vzc2lvblBhcmFtZXRlcnNGZWVkYmFj a0luZm9LSFIpIHsKKyAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfVklERU9fRU5D T0RFX0gyNjVfU0VTU0lPTl9QQVJBTUVURVJTX0ZFRURCQUNLX0lORk9fS0hSLAorICAgIH07Cisg ICAgcGFyYW1zX2ZlZWRiYWNrID0gKFZrVmlkZW9FbmNvZGVTZXNzaW9uUGFyYW1ldGVyc0ZlZWRi YWNrSW5mb0tIUikgeworICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9WSURFT19F TkNPREVfU0VTU0lPTl9QQVJBTUVURVJTX0ZFRURCQUNLX0lORk9fS0hSLAorICAgICAgICAucE5l eHQgPSAmaDI2NV9wYXJhbXNfZmVlZGJhY2ssCisgICAgfTsKKworICAgIHJldCA9IHZrLT5HZXRF bmNvZGVkVmlkZW9TZXNzaW9uUGFyYW1ldGVyc0tIUihzLT5od2N0eC0+YWN0X2RldiwgJnBhcmFt c19pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAmcGFyYW1zX2ZlZWRiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAmZGF0YV9zaXplLCBkYXRhKTsKKyAgICBpZiAocmV0ID09IFZLX0lOQ09N UExFVEUgfHwKKyAgICAgICAgKHJldCA9PSBWS19TVUNDRVNTKSAmJiAoZGF0YV9zaXplID4gMCkp IHsKKyAgICAgICAgZGF0YSA9IGF2X21hbGxvY3ooZGF0YV9zaXplKTsKKyAgICAgICAgaWYgKCFk YXRhKQorICAgICAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKKyAgICB9IGVsc2Ugewor ICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIlVuYWJsZSB0byBnZXQgZmVlZGJh Y2sgZm9yIEguMjY1IHVuaXRzID0gJSJTSVpFX1NQRUNJRklFUiJcbiIsIGRhdGFfc2l6ZSk7Cisg ICAgICAgIHJldHVybiBlcnI7CisgICAgfQorCisgICAgcmV0ID0gdmstPkdldEVuY29kZWRWaWRl b1Nlc3Npb25QYXJhbWV0ZXJzS0hSKHMtPmh3Y3R4LT5hY3RfZGV2LCAmcGFyYW1zX2luZm8sCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwYXJhbXNf ZmVlZGJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICZkYXRhX3NpemUsIGRhdGEpOworICAgIGlmIChyZXQgIT0gVktfU1VDQ0VTUykgeworICAg ICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkVycm9yIHdyaXRpbmcgZmVlZGJhY2sg dW5pdHNcbiIpOworICAgICAgICByZXR1cm4gZXJyOworICAgIH0KKworICAgIGF2X2xvZyhhdmN0 eCwgQVZfTE9HX1ZFUkJPU0UsICJGZWVkYmFjayB1bml0cyB3cml0dGVuLCBvdmVycmlkZXM6ICVp IChTUFM6ICVpIFBQUzogJWkgVlBTOiAlaSlcbiIsCisgICAgICAgICAgIHBhcmFtc19mZWVkYmFj ay5oYXNPdmVycmlkZXMsCisgICAgICAgICAgIGgyNjVfcGFyYW1zX2ZlZWRiYWNrLmhhc1N0ZFNQ U092ZXJyaWRlcywKKyAgICAgICAgICAgaDI2NV9wYXJhbXNfZmVlZGJhY2suaGFzU3RkUFBTT3Zl cnJpZGVzLAorICAgICAgICAgICBoMjY1X3BhcmFtc19mZWVkYmFjay5oYXNTdGRWUFNPdmVycmlk ZXMpOworCisgICAgcGFyYW1zX2ZlZWRiYWNrLmhhc092ZXJyaWRlcyA9IDE7CisgICAgaDI2NV9w YXJhbXNfZmVlZGJhY2suaGFzU3RkU1BTT3ZlcnJpZGVzID0gMTsKKyAgICBoMjY1X3BhcmFtc19m ZWVkYmFjay5oYXNTdGRQUFNPdmVycmlkZXMgPSAxOworCisgICAgLyogTm8gbmVlZCB0byBzeW5j IGFueSBvdmVycmlkZXMgKi8KKyAgICBpZiAoIXBhcmFtc19mZWVkYmFjay5oYXNPdmVycmlkZXMp CisgICAgICAgIHJldHVybiAwOworCisgICAgLyogUGFyc2UgYmFjayB0bmUgdW5pdHMgYW5kIG92 ZXJyaWRlICovCisgICAgZXJyID0gcGFyc2VfZmVlZGJhY2tfdW5pdHMoYXZjdHgsIGRhdGEsIGRh dGFfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoMjY1X3BhcmFtc19mZWVk YmFjay5oYXNTdGRTUFNPdmVycmlkZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aDI2NV9wYXJhbXNfZmVlZGJhY2suaGFzU3RkUFBTT3ZlcnJpZGVzKTsKKyAgICBpZiAoZXJyIDwg MCkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIC8qIENyZWF0ZSBmaW5hbCBzZXNzaW9uIHBh cmFtZXRlcnMgKi8KKyAgICBlcnIgPSBjcmVhdGVfc2Vzc2lvbl9wYXJhbXMoYXZjdHgpOworICAg IGlmIChlcnIgPCAwKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgcmV0dXJuIDA7Cit9CisK K3N0YXRpYyBpbnQgdnVsa2FuX2VuY29kZV9oMjY1X2FkZF9uYWwoQVZDb2RlY0NvbnRleHQgKmF2 Y3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlZEJpdHN0cmVh bUZyYWdtZW50ICphdSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9p ZCAqbmFsX3VuaXQpCit7CisgICAgSDI2NVJhd05BTFVuaXRIZWFkZXIgKmhlYWRlciA9IG5hbF91 bml0OworCisgICAgaW50IGVyciA9IGZmX2Nic19pbnNlcnRfdW5pdF9jb250ZW50KGF1LCAtMSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyLT5uYWxfdW5p dF90eXBlLCBuYWxfdW5pdCwgTlVMTCk7CisgICAgaWYgKGVyciA8IDApCisgICAgICAgIGF2X2xv ZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiRmFpbGVkIHRvIGFkZCBOQUwgdW5pdDogIgorICAgICAg ICAgICAgICAgInR5cGUgPSAlZC5cbiIsIGhlYWRlci0+bmFsX3VuaXRfdHlwZSk7CisKKyAgICBy ZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHdyaXRlX2FjY2Vzc191bml0KEFWQ29kZWNDb250 ZXh0ICphdmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqZGF0YSwg c2l6ZV90ICpkYXRhX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kZWRCaXRz dHJlYW1GcmFnbWVudCAqYXUpCit7CisgICAgVnVsa2FuRW5jb2RlSDI2NUNvbnRleHQgKmVuYyA9 IGF2Y3R4LT5wcml2X2RhdGE7CisKKyAgICBpbnQgZXJyID0gZmZfY2JzX3dyaXRlX2ZyYWdtZW50 X2RhdGEoZW5jLT5jYnMsIGF1KTsKKyAgICBpZiAoZXJyIDwgMCkgeworICAgICAgICBhdl9sb2co YXZjdHgsIEFWX0xPR19FUlJPUiwgIkZhaWxlZCB0byB3cml0ZSBwYWNrZWQgaGVhZGVyLlxuIik7 CisgICAgICAgIHJldHVybiBlcnI7CisgICAgfQorCisgICAgaWYgKCpkYXRhX2xlbiA8IGF1LT5k YXRhX3NpemUpIHsKKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJBY2Nlc3Mg dW5pdCB0b28gbGFyZ2U6ICUiU0laRV9TUEVDSUZJRVIiIDwgJSJTSVpFX1NQRUNJRklFUiIuXG4i LAorICAgICAgICAgICAgICAgKmRhdGFfbGVuLCBhdS0+ZGF0YV9zaXplKTsKKyAgICAgICAgcmV0 dXJuIEFWRVJST1IoRU5PU1BDKTsKKyAgICB9CisKKyAgICBtZW1jcHkoZGF0YSwgYXUtPmRhdGEs IGF1LT5kYXRhX3NpemUpOworICAgICpkYXRhX2xlbiA9IGF1LT5kYXRhX3NpemU7CisKKyAgICBy ZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3cml0ZV9zZXF1ZW5jZV9oZWFkZXJzKEFWQ29kZWND b250ZXh0ICphdmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGRkhXQmFz ZUVuY29kZVBpY3R1cmUgKmJhc2VfcGljLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHVpbnQ4X3QgKmRhdGEsIHNpemVfdCAqZGF0YV9sZW4pCit7CisgICAgaW50IGVycjsKKyAg ICBWdWxrYW5FbmNvZGVIMjY1Q29udGV4dCAqZW5jID0gYXZjdHgtPnByaXZfZGF0YTsKKyAgICBW dWxrYW5FbmNvZGVIMjY1UGljdHVyZSAgKmhwID0gYmFzZV9waWMgPyBiYXNlX3BpYy0+Y29kZWNf cHJpdiA6IE5VTEw7CisgICAgQ29kZWRCaXRzdHJlYW1GcmFnbWVudCAgICphdSA9ICZlbmMtPmN1 cnJlbnRfYWNjZXNzX3VuaXQ7CisKKyAgICBpZiAoaHAgJiYgaHAtPnVuaXRzX25lZWRlZCAmIFVO SVRfQVVEKSB7CisgICAgICAgIGVyciA9IHZ1bGthbl9lbmNvZGVfaDI2NV9hZGRfbmFsKGF2Y3R4 LCBhdSwgJmVuYy0+cmF3X2F1ZCk7CisgICAgICAgIGlmIChlcnIgPCAwKQorICAgICAgICAgICAg Z290byBmYWlsOworICAgICAgICBocC0+dW5pdHNfbmVlZGVkICY9IH5VTklUX0FVRDsKKyAgICB9 CisKKyAgICBlcnIgPSB2dWxrYW5fZW5jb2RlX2gyNjVfYWRkX25hbChhdmN0eCwgYXUsICZlbmMt PnVuaXRzLnJhd192cHMpOworICAgIGlmIChlcnIgPCAwKQorICAgICAgICBnb3RvIGZhaWw7CisK KyAgICBlcnIgPSB2dWxrYW5fZW5jb2RlX2gyNjVfYWRkX25hbChhdmN0eCwgYXUsICZlbmMtPnVu aXRzLnJhd19zcHMpOworICAgIGlmIChlcnIgPCAwKQorICAgICAgICBnb3RvIGZhaWw7CisKKyAg ICBlcnIgPSB2dWxrYW5fZW5jb2RlX2gyNjVfYWRkX25hbChhdmN0eCwgYXUsICZlbmMtPnVuaXRz LnJhd19wcHMpOworICAgIGlmIChlcnIgPCAwKQorICAgICAgICBnb3RvIGZhaWw7CisKKyAgICBl cnIgPSB3cml0ZV9hY2Nlc3NfdW5pdChhdmN0eCwgZGF0YSwgZGF0YV9sZW4sIGF1KTsKK2ZhaWw6 CisgICAgZmZfY2JzX2ZyYWdtZW50X3Jlc2V0KGF1KTsKKyAgICByZXR1cm4gZXJyOworfQorCitz dGF0aWMgaW50IHdyaXRlX2V4dHJhX2hlYWRlcnMoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZGSFdCYXNlRW5jb2RlUGljdHVyZSAqYmFzZV9w aWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqZGF0YSwgc2l6ZV90 ICpkYXRhX2xlbikKK3sKKyAgICBpbnQgZXJyOworICAgIFZ1bGthbkVuY29kZUgyNjVDb250ZXh0 ICplbmMgPSBhdmN0eC0+cHJpdl9kYXRhOworICAgIFZ1bGthbkVuY29kZUgyNjVQaWN0dXJlICAq aHAgPSBiYXNlX3BpYy0+Y29kZWNfcHJpdjsKKyAgICBDb2RlZEJpdHN0cmVhbUZyYWdtZW50ICAg KmF1ID0gJmVuYy0+Y3VycmVudF9hY2Nlc3NfdW5pdDsKKworICAgIGlmIChocC0+dW5pdHNfbmVl ZGVkICYgVU5JVF9BVUQpIHsKKyAgICAgICAgZXJyID0gdnVsa2FuX2VuY29kZV9oMjY1X2FkZF9u YWwoYXZjdHgsIGF1LCAmZW5jLT5yYXdfYXVkKTsKKyAgICAgICAgaWYgKGVyciA8IDApCisgICAg ICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgaWYgKGhwLT51bml0c19uZWVkZWQgJiBV TklUX1NFSV9NQVNURVJJTkdfRElTUExBWSkgeworICAgICAgICBlcnIgPSBmZl9jYnNfc2VpX2Fk ZF9tZXNzYWdlKGVuYy0+Y2JzLCBhdSwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBTRUlfVFlQRV9NQVNURVJJTkdfRElTUExBWV9DT0xPVVJfVk9MVU1FLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZlbmMtPnNlaV9tYXN0ZXJpbmdfZGlzcGxh eSwgTlVMTCk7CisgICAgICAgIGlmIChlcnIgPCAwKQorICAgICAgICAgICAgZ290byBmYWlsOwor ICAgIH0KKworICAgIGlmIChocC0+dW5pdHNfbmVlZGVkICYgVU5JVF9TRUlfQ09OVEVOVF9MSUdI VF9MRVZFTCkgeworICAgICAgICBlcnIgPSBmZl9jYnNfc2VpX2FkZF9tZXNzYWdlKGVuYy0+Y2Jz LCBhdSwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRUlfVFlQRV9D T05URU5UX0xJR0hUX0xFVkVMX0lORk8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJmVuYy0+c2VpX2NvbnRlbnRfbGlnaHRfbGV2ZWwsIE5VTEwpOworICAgICAgICBpZiAo ZXJyIDwgMCkKKyAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisgICAgaWYgKGhwLT51bml0 c19uZWVkZWQgJiBVTklUX1NFSV9BNTNfQ0MpIHsKKyAgICAgICAgZXJyID0gZmZfY2JzX3NlaV9h ZGRfbWVzc2FnZShlbmMtPmNicywgYXUsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgU0VJX1RZUEVfVVNFUl9EQVRBX1JFR0lTVEVSRURfSVRVX1RfVDM1LAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZlbmMtPnNlaV9hNTNjYywgTlVMTCk7Cisg ICAgICAgIGlmIChlcnIgPCAwKQorICAgICAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAg IGlmIChocC0+dW5pdHNfbmVlZGVkKSB7CisgICAgICAgIGVyciA9IHdyaXRlX2FjY2Vzc191bml0 KGF2Y3R4LCBkYXRhLCBkYXRhX2xlbiwgYXUpOworICAgICAgICBpZiAoZXJyIDwgMCkKKyAgICAg ICAgICAgIGdvdG8gZmFpbDsKKyAgICB9IGVsc2UgeworICAgICAgICBlcnIgPSAwOworICAgICAg ICAqZGF0YV9sZW4gPSAwOworICAgIH0KKworZmFpbDoKKyAgICBmZl9jYnNfZnJhZ21lbnRfcmVz ZXQoYXUpOworICAgIHJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgd3JpdGVfZmlsbGVyKEFW Q29kZWNDb250ZXh0ICphdmN0eCwgdWludDMyX3QgZmlsbGVyLAorICAgICAgICAgICAgICAgICAg ICAgICAgdWludDhfdCAqZGF0YSwgc2l6ZV90ICpkYXRhX2xlbikKK3sKKyAgICBpbnQgZXJyOwor ICAgIFZ1bGthbkVuY29kZUgyNjVDb250ZXh0ICplbmMgPSBhdmN0eC0+cHJpdl9kYXRhOworICAg IENvZGVkQml0c3RyZWFtRnJhZ21lbnQgICAqYXUgPSAmZW5jLT5jdXJyZW50X2FjY2Vzc191bml0 OworCisgICAgSDI2NVJhd0ZpbGxlciByYXdfZmlsbGVyID0geworICAgICAgICAubmFsX3VuaXRf aGVhZGVyID0KKyAgICAgICAgeworICAgICAgICAgICAgLm5hbF91bml0X3R5cGUgPSBIRVZDX05B TF9GRF9OVVQsCisgICAgICAgICAgICAubnVoX3RlbXBvcmFsX2lkX3BsdXMxID0gMSwKKyAgICAg ICAgfSwKKyAgICAgICAgLmZpbGxlcl9zaXplID0gZmlsbGVyLAorICAgIH07CisKKyAgICBlcnIg PSB2dWxrYW5fZW5jb2RlX2gyNjVfYWRkX25hbChhdmN0eCwgYXUsICZyYXdfZmlsbGVyKTsKKyAg ICBpZiAoZXJyIDwgMCkKKyAgICAgICAgZ290byBmYWlsOworCisgICAgZXJyID0gd3JpdGVfYWNj ZXNzX3VuaXQoYXZjdHgsIGRhdGEsIGRhdGFfbGVuLCBhdSk7CitmYWlsOgorICAgIGZmX2Nic19m cmFnbWVudF9yZXNldChhdSk7CisgICAgcmV0dXJuIGVycjsKK30KKworc3RhdGljIGNvbnN0IEZG VnVsa2FuQ29kZWMgZW5jX2NiID0geworICAgIC5mbGFncyA9IEZGX0hXX0ZMQUdfQl9QSUNUVVJF UyB8CisgICAgICAgICAgICAgRkZfSFdfRkxBR19CX1BJQ1RVUkVfUkVGRVJFTkNFUyB8CisgICAg ICAgICAgICAgRkZfSFdfRkxBR19OT05fSURSX0tFWV9QSUNUVVJFUywKKyAgICAucGljdHVyZV9w cml2X2RhdGFfc2l6ZSA9IHNpemVvZihWdWxrYW5FbmNvZGVIMjY1UGljdHVyZSksCisgICAgLmZp bGxlcl9oZWFkZXJfc2l6ZSA9IDcsCisgICAgLmluaXRfcHJvZmlsZSA9IGluaXRfcHJvZmlsZSwK KyAgICAuaW5pdF9waWNfcmMgPSBpbml0X3BpY19yYywKKyAgICAuaW5pdF9waWNfcGFyYW1zID0g aW5pdF9waWNfcGFyYW1zLAorICAgIC53cml0ZV9zZXF1ZW5jZV9oZWFkZXJzID0gd3JpdGVfc2Vx dWVuY2VfaGVhZGVycywKKyAgICAud3JpdGVfZXh0cmFfaGVhZGVycyA9IHdyaXRlX2V4dHJhX2hl YWRlcnMsCisgICAgLndyaXRlX2ZpbGxlciA9IHdyaXRlX2ZpbGxlciwKK307CisKK3N0YXRpYyBh dl9jb2xkIGludCB2dWxrYW5fZW5jb2RlX2gyNjVfaW5pdChBVkNvZGVjQ29udGV4dCAqYXZjdHgp Cit7CisgICAgaW50IGVyciwgcmVmX2wwLCByZWZfbDE7CisgICAgVnVsa2FuRW5jb2RlSDI2NUNv bnRleHQgKmVuYyA9IGF2Y3R4LT5wcml2X2RhdGE7CisgICAgRkZWdWxrYW5FbmNvZGVDb250ZXh0 ICpjdHggPSAmZW5jLT5jb21tb247CisgICAgRkZIV0Jhc2VFbmNvZGVDb250ZXh0ICpiYXNlX2N0 eCA9ICZjdHgtPmJhc2U7CisgICAgaW50IGZsYWdzOworCisgICAgaWYgKGF2Y3R4LT5wcm9maWxl ID09IEFWX1BST0ZJTEVfVU5LTk9XTikKKyAgICAgICAgYXZjdHgtPnByb2ZpbGUgPSBlbmMtPmNv bW1vbi5vcHRzLnByb2ZpbGU7CisKKyAgICBlbmMtPmNhcHMgPSAoVmtWaWRlb0VuY29kZUgyNjVD YXBhYmlsaXRpZXNLSFIpIHsKKyAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfVklE RU9fRU5DT0RFX0gyNjVfQ0FQQUJJTElUSUVTX0tIUiwKKyAgICB9OworCisgICAgZW5jLT5xdWFs aXR5X3Byb3BzID0gKFZrVmlkZW9FbmNvZGVIMjY1UXVhbGl0eUxldmVsUHJvcGVydGllc0tIUikg eworICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9WSURFT19FTkNPREVfSDI2NV9R VUFMSVRZX0xFVkVMX1BST1BFUlRJRVNfS0hSLAorICAgIH07CisKKyAgICBlcnIgPSBmZl92dWxr YW5fZW5jb2RlX2luaXQoYXZjdHgsICZlbmMtPmNvbW1vbiwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJmZmX3ZrX2VuY19oMjY1X2Rlc2MsICZlbmNfY2IsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICZlbmMtPmNhcHMsICZlbmMtPnF1YWxpdHlfcHJvcHMpOworICAg IGlmIChlcnIgPCAwKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgYXZfbG9nKGF2Y3R4LCBB Vl9MT0dfVkVSQk9TRSwgIkgyNjUgZW5jb2RlciBjYXBhYmlsaXRpZXM6XG4iKTsKKyAgICBhdl9s b2coYXZjdHgsIEFWX0xPR19WRVJCT1NFLCAiICAgIFN0YW5kYXJkIGNhcGFiaWxpdHkgZmxhZ3M6 XG4iKTsKKyAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19WRVJCT1NFLCAiICAgICAgICBzZXBhcmF0 ZV9jb2xvcl9wbGFuZTogJWlcbiIsCisgICAgICAgICAgICEhKGVuYy0+Y2Fwcy5zdGRTeW50YXhG bGFncyAmIFZLX1ZJREVPX0VOQ09ERV9IMjY1X1NURF9TRVBBUkFURV9DT0xPUl9QTEFORV9GTEFH X1NFVF9CSVRfS0hSKSk7CisgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfVkVSQk9TRSwgIiAgICAg ICAgc2FtcGxlX2FkYXB0aXZlX29mZnNldDogJWlcbiIsCisgICAgICAgICAgICEhKGVuYy0+Y2Fw cy5zdGRTeW50YXhGbGFncyAmIFZLX1ZJREVPX0VOQ09ERV9IMjY1X1NURF9TQU1QTEVfQURBUFRJ VkVfT0ZGU0VUX0VOQUJMRURfRkxBR19TRVRfQklUX0tIUikpOworICAgIGF2X2xvZyhhdmN0eCwg QVZfTE9HX1ZFUkJPU0UsICIgICAgICAgIHNjYWxpbmdfbGlzdHM6ICVpXG4iLAorICAgICAgICAg ICAhIShlbmMtPmNhcHMuc3RkU3ludGF4RmxhZ3MgJiBWS19WSURFT19FTkNPREVfSDI2NV9TVERf U0NBTElOR19MSVNUX0RBVEFfUFJFU0VOVF9GTEFHX1NFVF9CSVRfS0hSKSk7CisgICAgYXZfbG9n KGF2Y3R4LCBBVl9MT0dfVkVSQk9TRSwgIiAgICAgICAgcGNtOiAlaVxuIiwKKyAgICAgICAgICAg ISEoZW5jLT5jYXBzLnN0ZFN5bnRheEZsYWdzICYgVktfVklERU9fRU5DT0RFX0gyNjVfU1REX1BD TV9FTkFCTEVEX0ZMQUdfU0VUX0JJVF9LSFIpKTsKKyAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19W RVJCT1NFLCAiICAgICAgICB0ZW1wb3JhbF9tdnA6ICVpXG4iLAorICAgICAgICAgICAhIShlbmMt PmNhcHMuc3RkU3ludGF4RmxhZ3MgJiBWS19WSURFT19FTkNPREVfSDI2NV9TVERfU1BTX1RFTVBP UkFMX01WUF9FTkFCTEVEX0ZMQUdfU0VUX0JJVF9LSFIpKTsKKyAgICBhdl9sb2coYXZjdHgsIEFW X0xPR19WRVJCT1NFLCAiICAgICAgICBpbml0X3FwOiAlaVxuIiwKKyAgICAgICAgICAgISEoZW5j LT5jYXBzLnN0ZFN5bnRheEZsYWdzICYgVktfVklERU9fRU5DT0RFX0gyNjVfU1REX0lOSVRfUVBf TUlOVVMyNl9CSVRfS0hSKSk7CisgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfVkVSQk9TRSwgIiAg ICAgICAgd2VpZ2h0ZWQ6JXMlc1xuIiwKKyAgICAgICAgICAgZW5jLT5jYXBzLnN0ZFN5bnRheEZs YWdzICYgVktfVklERU9fRU5DT0RFX0gyNjVfU1REX1dFSUdIVEVEX1BSRURfRkxBR19TRVRfQklU X0tIUiA/CisgICAgICAgICAgICAgICAiIHByZWQiIDogIiIsCisgICAgICAgICAgIGVuYy0+Y2Fw cy5zdGRTeW50YXhGbGFncyAmIFZLX1ZJREVPX0VOQ09ERV9IMjY1X1NURF9XRUlHSFRFRF9CSVBS RURfRkxBR19TRVRfQklUX0tIUiA/CisgICAgICAgICAgICAgICAiIGJpcHJlZCIgOiAiIik7Cisg ICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfVkVSQk9TRSwgIiAgICAgICAgcGFyYWxsZWxfbWVyZ2Vf bGV2ZWw6ICVpXG4iLAorICAgICAgICAgICAhIShlbmMtPmNhcHMuc3RkU3ludGF4RmxhZ3MgJiBW S19WSURFT19FTkNPREVfSDI2NV9TVERfTE9HMl9QQVJBTExFTF9NRVJHRV9MRVZFTF9NSU5VUzJf QklUX0tIUikpOworICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX1ZFUkJPU0UsICIgICAgICAgIHNp Z25fZGF0YV9oaWRpbmc6ICVpXG4iLAorICAgICAgICAgICAhIShlbmMtPmNhcHMuc3RkU3ludGF4 RmxhZ3MgJiBWS19WSURFT19FTkNPREVfSDI2NV9TVERfU0lHTl9EQVRBX0hJRElOR19FTkFCTEVE X0ZMQUdfU0VUX0JJVF9LSFIpKTsKKyAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19WRVJCT1NFLCAi ICAgICAgICB0cmFuc2Zvcm1fc2tpcDolcyVzXG4iLAorICAgICAgICAgICBlbmMtPmNhcHMuc3Rk U3ludGF4RmxhZ3MgJiBWS19WSURFT19FTkNPREVfSDI2NV9TVERfVFJBTlNGT1JNX1NLSVBfRU5B QkxFRF9GTEFHX1NFVF9CSVRfS0hSID8KKyAgICAgICAgICAgIiBzZXQiIDogIiIsCisgICAgICAg ICAgIGVuYy0+Y2Fwcy5zdGRTeW50YXhGbGFncyAmIFZLX1ZJREVPX0VOQ09ERV9IMjY1X1NURF9U UkFOU0ZPUk1fU0tJUF9FTkFCTEVEX0ZMQUdfVU5TRVRfQklUX0tIUiA/CisgICAgICAgICAgICIg dW5zZXQiIDogIiIpOworICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX1ZFUkJPU0UsICIgICAgICAg IHNsaWNlX2Nocm9tYV9xcF9vZmZzZXRzOiAlaVxuIiwKKyAgICAgICAgICAgISEoZW5jLT5jYXBz LnN0ZFN5bnRheEZsYWdzICYgVktfVklERU9fRU5DT0RFX0gyNjVfU1REX1BQU19TTElDRV9DSFJP TUFfUVBfT0ZGU0VUU19QUkVTRU5UX0ZMQUdfU0VUX0JJVF9LSFIpKTsKKyAgICBhdl9sb2coYXZj dHgsIEFWX0xPR19WRVJCT1NFLCAiICAgICAgICB0cmFuc3F1YW50X2J5cGFzczogJWlcbiIsCisg ICAgICAgICAgICEhKGVuYy0+Y2Fwcy5zdGRTeW50YXhGbGFncyAmIFZLX1ZJREVPX0VOQ09ERV9I MjY1X1NURF9UUkFOU1FVQU5UX0JZUEFTU19FTkFCTEVEX0ZMQUdfU0VUX0JJVF9LSFIpKTsKKyAg ICBhdl9sb2coYXZjdHgsIEFWX0xPR19WRVJCT1NFLCAiICAgICAgICBjb25zdHJhaW5lZF9pbnRy YV9wcmVkOiAlaVxuIiwKKyAgICAgICAgICAgISEoZW5jLT5jYXBzLnN0ZFN5bnRheEZsYWdzICYg VktfVklERU9fRU5DT0RFX0gyNjVfU1REX0NPTlNUUkFJTkVEX0lOVFJBX1BSRURfRkxBR19TRVRf QklUX0tIUikpOworICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX1ZFUkJPU0UsICIgICAgICAgIGVu dHJ5cHlfY29kaW5nX3N5bmM6ICVpXG4iLAorICAgICAgICAgICAhIShlbmMtPmNhcHMuc3RkU3lu dGF4RmxhZ3MgJiBWS19WSURFT19FTkNPREVfSDI2NV9TVERfRU5UUk9QWV9DT0RJTkdfU1lOQ19F TkFCTEVEX0ZMQUdfU0VUX0JJVF9LSFIpKTsKKyAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19WRVJC T1NFLCAiICAgICAgICBkZXBlbmRlbnRfc2xpY2Vfc2VnbWVudDolcyVzXG4iLAorICAgICAgICAg ICBlbmMtPmNhcHMuc3RkU3ludGF4RmxhZ3MgJiBWS19WSURFT19FTkNPREVfSDI2NV9TVERfREVQ RU5ERU5UX1NMSUNFX1NFR01FTlRTX0VOQUJMRURfRkxBR19TRVRfQklUX0tIUiA/CisgICAgICAg ICAgICAgICAiIGVuYWJsZWQiIDogIiIsCisgICAgICAgICAgIGVuYy0+Y2Fwcy5zdGRTeW50YXhG bGFncyAmIFZLX1ZJREVPX0VOQ09ERV9IMjY1X1NURF9ERVBFTkRFTlRfU0xJQ0VfU0VHTUVOVF9G TEFHX1NFVF9CSVRfS0hSID8KKyAgICAgICAgICAgICAgICIgc2V0IiA6ICIiKTsKKyAgICBhdl9s b2coYXZjdHgsIEFWX0xPR19WRVJCT1NFLCAiICAgICAgICBzbGljZV9xcF9kZWx0YTogJWlcbiIs CisgICAgICAgICAgICEhKGVuYy0+Y2Fwcy5zdGRTeW50YXhGbGFncyAmIFZLX1ZJREVPX0VOQ09E RV9IMjY1X1NURF9TTElDRV9RUF9ERUxUQV9CSVRfS0hSKSk7CisgICAgYXZfbG9nKGF2Y3R4LCBB Vl9MT0dfVkVSQk9TRSwgIiAgICAgICAgZGlmZmVyZW50X3NsaWNlX3FwX2RlbHRhOiAlaVxuIiwK KyAgICAgICAgICAgISEoZW5jLT5jYXBzLnN0ZFN5bnRheEZsYWdzICYgVktfVklERU9fRU5DT0RF X0gyNjVfU1REX0RJRkZFUkVOVF9TTElDRV9RUF9ERUxUQV9CSVRfS0hSKSk7CisKKyAgICBhdl9s b2coYXZjdHgsIEFWX0xPR19WRVJCT1NFLCAiICAgIENhcGFiaWxpdHkgZmxhZ3M6XG4iKTsKKyAg ICBhdl9sb2coYXZjdHgsIEFWX0xPR19WRVJCT1NFLCAiICAgICAgICBoZHJfY29tcGxpYW5jZTog JWlcbiIsCisgICAgICAgICAgICEhKGVuYy0+Y2Fwcy5mbGFncyAmIFZLX1ZJREVPX0VOQ09ERV9I MjY0X0NBUEFCSUxJVFlfSFJEX0NPTVBMSUFOQ0VfQklUX0tIUikpOworICAgIGF2X2xvZyhhdmN0 eCwgQVZfTE9HX1ZFUkJPU0UsICIgICAgICAgIHByZWRfd2VpZ2h0X3RhYmxlX2dlbmVyYXRlZDog JWlcbiIsCisgICAgICAgICAgICEhKGVuYy0+Y2Fwcy5mbGFncyAmIFZLX1ZJREVPX0VOQ09ERV9I MjY0X0NBUEFCSUxJVFlfUFJFRElDVElPTl9XRUlHSFRfVEFCTEVfR0VORVJBVEVEX0JJVF9LSFIp KTsKKyAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19WRVJCT1NFLCAiICAgICAgICByb3dfdW5hbGln bmVkX3NsaWNlOiAlaVxuIiwKKyAgICAgICAgICAgISEoZW5jLT5jYXBzLmZsYWdzICYgVktfVklE RU9fRU5DT0RFX0gyNjRfQ0FQQUJJTElUWV9ST1dfVU5BTElHTkVEX1NMSUNFX0JJVF9LSFIpKTsK KyAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19WRVJCT1NFLCAiICAgICAgICBkaWZmZXJlbnRfc2xp Y2VfdHlwZTogJWlcbiIsCisgICAgICAgICAgICEhKGVuYy0+Y2Fwcy5mbGFncyAmIFZLX1ZJREVP X0VOQ09ERV9IMjY0X0NBUEFCSUxJVFlfRElGRkVSRU5UX1NMSUNFX1RZUEVfQklUX0tIUikpOwor ICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX1ZFUkJPU0UsICIgICAgICAgIGJfZnJhbWVfaW5fbDBf bGlzdDogJWlcbiIsCisgICAgICAgICAgICEhKGVuYy0+Y2Fwcy5mbGFncyAmIFZLX1ZJREVPX0VO Q09ERV9IMjY0X0NBUEFCSUxJVFlfQl9GUkFNRV9JTl9MMF9MSVNUX0JJVF9LSFIpKTsKKyAgICBh dl9sb2coYXZjdHgsIEFWX0xPR19WRVJCT1NFLCAiICAgICAgICBiX2ZyYW1lX2luX2wxX2xpc3Q6 ICVpXG4iLAorICAgICAgICAgICAhIShlbmMtPmNhcHMuZmxhZ3MgJiBWS19WSURFT19FTkNPREVf SDI2NF9DQVBBQklMSVRZX0JfRlJBTUVfSU5fTDFfTElTVF9CSVRfS0hSKSk7CisgICAgYXZfbG9n KGF2Y3R4LCBBVl9MT0dfVkVSQk9TRSwgIiAgICAgICAgcGVyX3BpY3RfdHlwZV9taW5fbWF4X3Fw OiAlaVxuIiwKKyAgICAgICAgICAgISEoZW5jLT5jYXBzLmZsYWdzICYgVktfVklERU9fRU5DT0RF X0gyNjRfQ0FQQUJJTElUWV9QRVJfUElDVFVSRV9UWVBFX01JTl9NQVhfUVBfQklUX0tIUikpOwor ICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX1ZFUkJPU0UsICIgICAgICAgIHBlcl9zbGljZV9jb25z dGFudF9xcDogJWlcbiIsCisgICAgICAgICAgICEhKGVuYy0+Y2Fwcy5mbGFncyAmIFZLX1ZJREVP X0VOQ09ERV9IMjY0X0NBUEFCSUxJVFlfUEVSX1NMSUNFX0NPTlNUQU5UX1FQX0JJVF9LSFIpKTsK KyAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19WRVJCT1NFLCAiICAgICAgICBnZW5lcmF0ZV9wcmVm aXhfbmFsdTogJWlcbiIsCisgICAgICAgICAgICEhKGVuYy0+Y2Fwcy5mbGFncyAmIFZLX1ZJREVP X0VOQ09ERV9IMjY0X0NBUEFCSUxJVFlfR0VORVJBVEVfUFJFRklYX05BTFVfQklUX0tIUikpOwor CisgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfVkVSQk9TRSwgIiAgICBDYXBhYmlsaXRpZXM6XG4i KTsKKyAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19WRVJCT1NFLCAiICAgICAgICBtYXhMZXZlbElk YzogJWlcbiIsCisgICAgICAgICAgIGVuYy0+Y2Fwcy5tYXhMZXZlbElkYyk7CisgICAgYXZfbG9n KGF2Y3R4LCBBVl9MT0dfVkVSQk9TRSwgIiAgICAgICAgbWF4U2xpY2VDb3VudDogJWlcbiIsCisg ICAgICAgICAgIGVuYy0+Y2Fwcy5tYXhTbGljZVNlZ21lbnRDb3VudCk7CisgICAgYXZfbG9nKGF2 Y3R4LCBBVl9MT0dfVkVSQk9TRSwgIiAgICAgICAgbWF4VGlsZXM6ICVpeCVpXG4iLAorICAgICAg ICAgICBlbmMtPmNhcHMubWF4VGlsZXMud2lkdGgsIGVuYy0+Y2Fwcy5tYXhUaWxlcy5oZWlnaHQp OworICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX1ZFUkJPU0UsICIgICAgICAgIGNidFNpemVzOiAw eCV4XG4iLAorICAgICAgICAgICBlbmMtPmNhcHMuY3RiU2l6ZXMpOworICAgIGF2X2xvZyhhdmN0 eCwgQVZfTE9HX1ZFUkJPU0UsICIgICAgICAgIHRyYW5zZm9ybUJsb2NrU2l6ZXM6IDB4JXhcbiIs CisgICAgICAgICAgIGVuYy0+Y2Fwcy50cmFuc2Zvcm1CbG9ja1NpemVzKTsKKyAgICBhdl9sb2co YXZjdHgsIEFWX0xPR19WRVJCT1NFLCAiICAgICAgICBtYXgoUC9CKVBpY3R1cmVMMFJlZmVyZW5j ZUNvdW50OiAlaSBQJ3M7ICVpIEInc1xuIiwKKyAgICAgICAgICAgZW5jLT5jYXBzLm1heFBQaWN0 dXJlTDBSZWZlcmVuY2VDb3VudCwKKyAgICAgICAgICAgZW5jLT5jYXBzLm1heEJQaWN0dXJlTDBS ZWZlcmVuY2VDb3VudCk7CisgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfVkVSQk9TRSwgIiAgICAg ICAgbWF4TDFSZWZlcmVuY2VDb3VudDogJWlcbiIsCisgICAgICAgICAgIGVuYy0+Y2Fwcy5tYXhM MVJlZmVyZW5jZUNvdW50KTsKKyAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19WRVJCT1NFLCAiICAg ICAgICBtYXhTdWJMYXllckNvdW50OiAlaVxuIiwKKyAgICAgICAgICAgZW5jLT5jYXBzLm1heFN1 YkxheWVyQ291bnQpOworICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX1ZFUkJPU0UsICIgICAgICAg IGV4cGVjdER5YWRpY1RlbXBvcmFsTGF5ZXJQYXR0ZXJuOiAlaVxuIiwKKyAgICAgICAgICAgZW5j LT5jYXBzLmV4cGVjdER5YWRpY1RlbXBvcmFsU3ViTGF5ZXJQYXR0ZXJuKTsKKyAgICBhdl9sb2co YXZjdHgsIEFWX0xPR19WRVJCT1NFLCAiICAgICAgICBtaW4vbWF4IFFwOiBbJWksICVpXVxuIiwK KyAgICAgICAgICAgZW5jLT5jYXBzLm1pblFwLCBlbmMtPmNhcHMubWF4UXApOworICAgIGF2X2xv ZyhhdmN0eCwgQVZfTE9HX1ZFUkJPU0UsICIgICAgICAgIHByZWZlcnNHb3BSZW1haW5pbmdGcmFt ZXM6ICVpXG4iLAorICAgICAgICAgICBlbmMtPmNhcHMucHJlZmVyc0dvcFJlbWFpbmluZ0ZyYW1l cyk7CisgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfVkVSQk9TRSwgIiAgICAgICAgcmVxdWlyZXNH b3BSZW1haW5pbmdGcmFtZXM6ICVpXG4iLAorICAgICAgICAgICBlbmMtPmNhcHMucmVxdWlyZXNH b3BSZW1haW5pbmdGcmFtZXMpOworCisgICAgZXJyID0gaW5pdF9lbmNfb3B0aW9ucyhhdmN0eCk7 CisgICAgaWYgKGVyciA8IDApCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICBmbGFncyA9IGN0 eC0+Y29kZWMtPmZsYWdzOworICAgIGlmICghZW5jLT5jYXBzLm1heFBQaWN0dXJlTDBSZWZlcmVu Y2VDb3VudCAmJgorICAgICAgICAhZW5jLT5jYXBzLm1heEJQaWN0dXJlTDBSZWZlcmVuY2VDb3Vu dCAmJgorICAgICAgICAhZW5jLT5jYXBzLm1heEwxUmVmZXJlbmNlQ291bnQpIHsKKyAgICAgICAg LyogSW50cmEtb25seSAqLworICAgICAgICBmbGFncyB8PSBGRl9IV19GTEFHX0lOVFJBX09OTFk7 CisgICAgICAgIHJlZl9sMCA9IHJlZl9sMSA9IDA7CisgICAgfSBlbHNlIGlmICghZW5jLT5jYXBz Lm1heFBQaWN0dXJlTDBSZWZlcmVuY2VDb3VudCkgeworICAgICAgICAvKiBObyBQLWZyYW1lcz8g SG93LiAqLworICAgICAgICBiYXNlX2N0eC0+cF90b19ncGIgPSAxOworICAgICAgICByZWZfbDAg PSBlbmMtPmNhcHMubWF4QlBpY3R1cmVMMFJlZmVyZW5jZUNvdW50OworICAgICAgICByZWZfbDEg PSBlbmMtPmNhcHMubWF4TDFSZWZlcmVuY2VDb3VudDsKKyAgICB9IGVsc2UgaWYgKCFlbmMtPmNh cHMubWF4QlBpY3R1cmVMMFJlZmVyZW5jZUNvdW50ICYmCisgICAgICAgICAgICAgICAhZW5jLT5j YXBzLm1heEwxUmVmZXJlbmNlQ291bnQpIHsKKyAgICAgICAgLyogTm8gQi1mcmFtZXMgKi8KKyAg ICAgICAgZmxhZ3MgJj0gfihGRl9IV19GTEFHX0JfUElDVFVSRVMgfCBGRl9IV19GTEFHX0JfUElD VFVSRV9SRUZFUkVOQ0VTKTsKKyAgICAgICAgcmVmX2wwID0gZW5jLT5jYXBzLm1heFBQaWN0dXJl TDBSZWZlcmVuY2VDb3VudDsKKyAgICAgICAgcmVmX2wxID0gMDsKKyAgICB9IGVsc2UgeworICAg ICAgICAvKiBQIGFuZCBCIGZyYW1lcyAqLworICAgICAgICByZWZfbDAgPSBGRk1JTihlbmMtPmNh cHMubWF4UFBpY3R1cmVMMFJlZmVyZW5jZUNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICBl bmMtPmNhcHMubWF4QlBpY3R1cmVMMFJlZmVyZW5jZUNvdW50KTsKKyAgICAgICAgcmVmX2wxID0g ZW5jLT5jYXBzLm1heEwxUmVmZXJlbmNlQ291bnQ7CisgICAgfQorCisgICAgZXJyID0gZmZfaHdf YmFzZV9pbml0X2dvcF9zdHJ1Y3R1cmUoYmFzZV9jdHgsIGF2Y3R4LCByZWZfbDAsIHJlZl9sMSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncywgMCk7CisgICAg aWYgKGVyciA8IDApCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICBiYXNlX2N0eC0+b3V0cHV0 X2RlbGF5ID0gYmFzZV9jdHgtPmJfcGVyX3A7CisgICAgYmFzZV9jdHgtPmRlY29kZV9kZWxheSA9 IGJhc2VfY3R4LT5tYXhfYl9kZXB0aDsKKworICAgIC8qIEluaXQgQ0JTICovCisgICAgZXJyID0g ZmZfY2JzX2luaXQoJmVuYy0+Y2JzLCBBVl9DT0RFQ19JRF9IRVZDLCBhdmN0eCk7CisgICAgaWYg KGVyciA8IDApCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICAvKiBDcmVhdGUgdW5pdHMgYW5k IHNlc3Npb24gcGFyYW1ldGVycyAqLworICAgIGVyciA9IGluaXRfYmFzZV91bml0cyhhdmN0eCk7 CisgICAgaWYgKGVyciA8IDApCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICAvKiBXcml0ZSBv dXQgZXh0cmFkYXRhICovCisgICAgZXJyID0gZmZfdnVsa2FuX3dyaXRlX2dsb2JhbF9oZWFkZXIo YXZjdHgsICZlbmMtPmNvbW1vbik7CisgICAgaWYgKGVyciA8IDApCisgICAgICAgIHJldHVybiBl cnI7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGF2X2NvbGQgaW50IHZ1bGthbl9lbmNv ZGVfaDI2NV9jbG9zZShBVkNvZGVjQ29udGV4dCAqYXZjdHgpCit7CisgICAgVnVsa2FuRW5jb2Rl SDI2NUNvbnRleHQgKmVuYyA9IGF2Y3R4LT5wcml2X2RhdGE7CisgICAgZmZfdnVsa2FuX2VuY29k ZV91bmluaXQoJmVuYy0+Y29tbW9uKTsKKyAgICByZXR1cm4gMDsKK30KKworI2RlZmluZSBPRkZT RVQoeCkgb2Zmc2V0b2YoVnVsa2FuRW5jb2RlSDI2NUNvbnRleHQsIHgpCisjZGVmaW5lIEZMQUdT IChBVl9PUFRfRkxBR19WSURFT19QQVJBTSB8IEFWX09QVF9GTEFHX0VOQ09ESU5HX1BBUkFNKQor c3RhdGljIGNvbnN0IEFWT3B0aW9uIHZ1bGthbl9lbmNvZGVfaDI2NV9vcHRpb25zW10gPSB7Cisg ICAgSFdfQkFTRV9FTkNPREVfQ09NTU9OX09QVElPTlMsCisgICAgVlVMS0FOX0VOQ09ERV9DT01N T05fT1BUSU9OUywKKworICAgIHsgInByb2ZpbGUiLCAiU2V0IHByb2ZpbGUgKHByb2ZpbGVfaWRj IGFuZCBjb25zdHJhaW50X3NldCpfZmxhZykiLAorICAgICAgT0ZGU0VUKGNvbW1vbi5vcHRzLnBy b2ZpbGUpLCBBVl9PUFRfVFlQRV9JTlQsCisgICAgICB7IC5pNjQgPSBBVl9QUk9GSUxFX1VOS05P V04gfSwgQVZfUFJPRklMRV9VTktOT1dOLCAweGZmZmYsIEZMQUdTLCAudW5pdCA9ICJwcm9maWxl IiB9LAorCisjZGVmaW5lIFBST0ZJTEUobmFtZSwgdmFsdWUpICBuYW1lLCBOVUxMLCAwLCBBVl9P UFRfVFlQRV9DT05TVCwgXAorICAgICAgeyAuaTY0ID0gdmFsdWUgfSwgMCwgMCwgRkxBR1MsIC51 bml0ID0gInByb2ZpbGUiCisgICAgeyBQUk9GSUxFKCJtYWluIiwgICAgICAgICAgICAgICBBVl9Q Uk9GSUxFX0hFVkNfTUFJTikgfSwKKyAgICB7IFBST0ZJTEUoIm1haW4xMCIsICAgICAgICAgICAg IEFWX1BST0ZJTEVfSEVWQ19NQUlOXzEwKSB9LAorICAgIHsgUFJPRklMRSgicmV4dCIsICAgICAg ICAgICAgICAgQVZfUFJPRklMRV9IRVZDX1JFWFQpIH0sCisjdW5kZWYgUFJPRklMRQorCisgICAg eyAidGllciIsICJTZXQgdGllciAoZ2VuZXJhbF90aWVyX2ZsYWcpIiwgT0ZGU0VUKGNvbW1vbi5v cHRzLnRpZXIpLCBBVl9PUFRfVFlQRV9JTlQsIHsgLmk2NCA9IDAgfSwgMCwgMSwgRkxBR1MsIC51 bml0ID0gInRpZXIiIH0sCisgICAgICAgIHsgIm1haW4iLCBOVUxMLCAwLCBBVl9PUFRfVFlQRV9D T05TVCwgeyAuaTY0ID0gMCB9LCAwLCAwLCBGTEFHUywgLnVuaXQgPSAidGllciIgfSwKKyAgICAg ICAgeyAiaGlnaCIsIE5VTEwsIDAsIEFWX09QVF9UWVBFX0NPTlNULCB7IC5pNjQgPSAxIH0sIDAs IDAsIEZMQUdTLCAudW5pdCA9ICJ0aWVyIiB9LAorCisgICAgeyAibGV2ZWwiLCAiU2V0IGxldmVs IChnZW5lcmFsX2xldmVsX2lkYykiLAorICAgICAgT0ZGU0VUKGNvbW1vbi5vcHRzLmxldmVsKSwg QVZfT1BUX1RZUEVfSU5ULAorICAgICAgeyAuaTY0ID0gQVZfTEVWRUxfVU5LTk9XTiB9LCBBVl9M RVZFTF9VTktOT1dOLCAweGZmLCBGTEFHUywgLnVuaXQgPSAibGV2ZWwiIH0sCisKKyNkZWZpbmUg TEVWRUwobmFtZSwgdmFsdWUpIG5hbWUsIE5VTEwsIDAsIEFWX09QVF9UWVBFX0NPTlNULCBcCisg ICAgICB7IC5pNjQgPSB2YWx1ZSB9LCAwLCAwLCBGTEFHUywgLnVuaXQgPSAibGV2ZWwiCisgICAg eyBMRVZFTCgiMSIsICAgIDMwKSB9LAorICAgIHsgTEVWRUwoIjIiLCAgICA2MCkgfSwKKyAgICB7 IExFVkVMKCIyLjEiLCAgNjMpIH0sCisgICAgeyBMRVZFTCgiMyIsICAgIDkwKSB9LAorICAgIHsg TEVWRUwoIjMuMSIsICA5MykgfSwKKyAgICB7IExFVkVMKCI0IiwgICAxMjApIH0sCisgICAgeyBM RVZFTCgiNC4xIiwgMTIzKSB9LAorICAgIHsgTEVWRUwoIjUiLCAgIDE1MCkgfSwKKyAgICB7IExF VkVMKCI1LjEiLCAxNTMpIH0sCisgICAgeyBMRVZFTCgiNS4yIiwgMTU2KSB9LAorICAgIHsgTEVW RUwoIjYiLCAgIDE4MCkgfSwKKyAgICB7IExFVkVMKCI2LjEiLCAxODMpIH0sCisgICAgeyBMRVZF TCgiNi4yIiwgMTg2KSB9LAorI3VuZGVmIExFVkVMCisKKyAgICB7ICJ1bml0cyIsICJTZXQgdW5p dHMgdG8gaW5jbHVkZSIsIE9GRlNFVCh1bml0X2VsZW1zKSwgQVZfT1BUX1RZUEVfRkxBR1MsIHsg Lmk2NCA9IFVOSVRfU0VJX01BU1RFUklOR19ESVNQTEFZIHwgVU5JVF9TRUlfQ09OVEVOVF9MSUdI VF9MRVZFTCB8IFVOSVRfU0VJX0E1M19DQyB9LCAwLCBJTlRfTUFYLCBGTEFHUywgInVuaXRzIiB9 LAorICAgICAgICB7ICJoZHIiLCAgICAgICAgIkluY2x1ZGUgSERSIG1ldGFkYXRhIGZvciBtYXN0 ZXJpbmcgZGlzcGxheSBjb2xvdXIgdm9sdW1lIGFuZCBjb250ZW50IGxpZ2h0IGxldmVsIGluZm9y bWF0aW9uIiwgMCwgQVZfT1BUX1RZUEVfQ09OU1QsIHsgLmk2NCA9IFVOSVRfU0VJX01BU1RFUklO R19ESVNQTEFZIHwgVU5JVF9TRUlfQ09OVEVOVF9MSUdIVF9MRVZFTCB9LCBJTlRfTUlOLCBJTlRf TUFYLCBGTEFHUywgInVuaXRzIiB9LAorICAgICAgICB7ICJhNTNfY2MiLCAgICAgIkluY2x1ZGUg QS81MyBjYXB0aW9uIGRhdGEiLCAwLCBBVl9PUFRfVFlQRV9DT05TVCwgeyAuaTY0ID0gVU5JVF9T RUlfQTUzX0NDIH0sIElOVF9NSU4sIElOVF9NQVgsIEZMQUdTLCAidW5pdHMiIH0sCisKKyAgICB7 IE5VTEwgfSwKK307CisKK3N0YXRpYyBjb25zdCBGRkNvZGVjRGVmYXVsdCB2dWxrYW5fZW5jb2Rl X2gyNjVfZGVmYXVsdHNbXSA9IHsKKyAgICB7ICJiIiwgICAgICAgICAgICAgICIwIiAgIH0sCisg ICAgeyAiYmYiLCAgICAgICAgICAgICAiMiIgICB9LAorICAgIHsgImciLCAgICAgICAgICAgICAg IjMwMCIgfSwKKyAgICB7ICJpX3FmYWN0b3IiLCAgICAgICIxIiAgIH0sCisgICAgeyAiaV9xb2Zm c2V0IiwgICAgICAiMCIgICB9LAorICAgIHsgImJfcWZhY3RvciIsICAgICAgIjYvNSIgfSwKKyAg ICB7ICJiX3FvZmZzZXQiLCAgICAgICIwIiAgIH0sCisgICAgeyAicW1pbiIsICAgICAgICAgICAi LTEiICB9LAorICAgIHsgInFtYXgiLCAgICAgICAgICAgIi0xIiAgfSwKKyAgICB7ICJyZWZzIiwg ICAgICAgICAgICIwIiAgIH0sCisgICAgeyBOVUxMIH0sCit9OworCitzdGF0aWMgY29uc3QgQVZD bGFzcyB2dWxrYW5fZW5jb2RlX2gyNjVfY2xhc3MgPSB7CisgICAgLmNsYXNzX25hbWUgPSAiaGV2 Y192dWxrYW4iLAorICAgIC5pdGVtX25hbWUgID0gYXZfZGVmYXVsdF9pdGVtX25hbWUsCisgICAg Lm9wdGlvbiAgICAgPSB2dWxrYW5fZW5jb2RlX2gyNjVfb3B0aW9ucywKKyAgICAudmVyc2lvbiAg ICA9IExJQkFWVVRJTF9WRVJTSU9OX0lOVCwKK307CisKK2NvbnN0IEZGQ29kZWMgZmZfaGV2Y192 dWxrYW5fZW5jb2RlciA9IHsKKyAgICAucC5uYW1lICAgICAgICAgPSAiaGV2Y192dWxrYW4iLAor ICAgIENPREVDX0xPTkdfTkFNRSgiSC4yNjUvSEVWQyAoVnVsa2FuKSIpLAorICAgIC5wLnR5cGUg ICAgICAgICA9IEFWTUVESUFfVFlQRV9WSURFTywKKyAgICAucC5pZCAgICAgICAgICAgPSBBVl9D T0RFQ19JRF9IRVZDLAorICAgIC5wcml2X2RhdGFfc2l6ZSA9IHNpemVvZihWdWxrYW5FbmNvZGVI MjY1Q29udGV4dCksCisgICAgLmluaXQgICAgICAgICAgID0gJnZ1bGthbl9lbmNvZGVfaDI2NV9p bml0LAorICAgIEZGX0NPREVDX1JFQ0VJVkVfUEFDS0VUX0NCKCZmZl92dWxrYW5fZW5jb2RlX3Jl Y2VpdmVfcGFja2V0KSwKKyAgICAuY2xvc2UgICAgICAgICAgPSAmdnVsa2FuX2VuY29kZV9oMjY1 X2Nsb3NlLAorICAgIC5wLnByaXZfY2xhc3MgICA9ICZ2dWxrYW5fZW5jb2RlX2gyNjVfY2xhc3Ms CisgICAgLnAuY2FwYWJpbGl0aWVzID0gQVZfQ09ERUNfQ0FQX0RFTEFZIHwKKyAgICAgICAgICAg ICAgICAgICAgICBBVl9DT0RFQ19DQVBfSEFSRFdBUkUgfAorICAgICAgICAgICAgICAgICAgICAg IEFWX0NPREVDX0NBUF9EUjEgfAorICAgICAgICAgICAgICAgICAgICAgIEFWX0NPREVDX0NBUF9F TkNPREVSX0ZMVVNIIHwKKyAgICAgICAgICAgICAgICAgICAgICBBVl9DT0RFQ19DQVBfRU5DT0RF Ul9SRU9SREVSRURfT1BBUVVFLAorICAgIC5jYXBzX2ludGVybmFsICA9IEZGX0NPREVDX0NBUF9J TklUX0NMRUFOVVAsCisgICAgLmRlZmF1bHRzICAgICAgID0gdnVsa2FuX2VuY29kZV9oMjY1X2Rl ZmF1bHRzLAorICAgIENPREVDX1BJWEZNVFMoQVZfUElYX0ZNVF9WVUxLQU4pLAorICAgIC5od19j b25maWdzICAgICA9IGZmX3Z1bGthbl9lbmNvZGVfaHdfY29uZmlncywKKyAgICAucC53cmFwcGVy X25hbWUgPSAidnVsa2FuIiwKK307Ci0tIAoyLjQ5LjEKCgpGcm9tIGVlYWZjNGY5NzdiZTJkNTJl NmI3MDE1MDczZDE0M2U2NGZiYjVjODQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCkZyb206IEph bWFpa2ExIDxsdWthc3pjejE4QHdwLnBsPgpEYXRlOiBXZWQsIDMgU2VwIDIwMjUgMTM6MzY6MTUg KzAwMDAKU3ViamVjdDogW1BBVENIIDA3OS8xMThdIENoYW5naW5nIHZ1bGthbiBmaWxlIGRpcmVj dG9yeQoKLS0tCiBsaWJhdmNvZGVjL3Z1bGthbl9mZnYxLmMgfCAxMTc1IC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgMTE3NSBkZWxldGlvbnMo LSkKIGRlbGV0ZSBtb2RlIDEwMDY0NCBsaWJhdmNvZGVjL3Z1bGthbl9mZnYxLmMKCmRpZmYgLS1n aXQgYS9saWJhdmNvZGVjL3Z1bGthbl9mZnYxLmMgYi9saWJhdmNvZGVjL3Z1bGthbl9mZnYxLmMK ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwMmJjNzE2ODMuLjAwMDAwMDAwMDAKLS0t IGEvbGliYXZjb2RlYy92dWxrYW5fZmZ2MS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTE3NSArMCww IEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDI0IEx5bm5lIDxkZXZAbHlubmUuZWU+Ci0gKgot ICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgotICoKLSAqIEZGbXBlZyBpcyBmcmVlIHNv ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRl ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2Ug YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICog dmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy IHZlcnNpb24uCi0gKgotICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg aXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBo YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICog TGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0 d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v ciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQotICovCi0KLSNpbmNsdWRlICJ2dWxrYW5fZGVj b2RlLmgiCi0jaW5jbHVkZSAiaHdhY2NlbF9pbnRlcm5hbC5oIgotCi0jaW5jbHVkZSAiZmZ2MS5o IgotI2luY2x1ZGUgImZmdjFfdnVsa2FuLmgiCi0jaW5jbHVkZSAibGliYXZ1dGlsL3Z1bGthbl9z cGlydi5oIgotI2luY2x1ZGUgImxpYmF2dXRpbC9tZW0uaCIKLQotI2RlZmluZSBSR0JfTElORUNB Q0hFIDIKLQotZXh0ZXJuIGNvbnN0IGNoYXIgKmZmX3NvdXJjZV9jb21tb25fY29tcDsKLWV4dGVy biBjb25zdCBjaGFyICpmZl9zb3VyY2VfcmFuZ2Vjb2Rlcl9jb21wOwotZXh0ZXJuIGNvbnN0IGNo YXIgKmZmX3NvdXJjZV9mZnYxX3ZsY19jb21wOwotZXh0ZXJuIGNvbnN0IGNoYXIgKmZmX3NvdXJj ZV9mZnYxX2NvbW1vbl9jb21wOwotZXh0ZXJuIGNvbnN0IGNoYXIgKmZmX3NvdXJjZV9mZnYxX2Rl Y19zZXR1cF9jb21wOwotZXh0ZXJuIGNvbnN0IGNoYXIgKmZmX3NvdXJjZV9mZnYxX3Jlc2V0X2Nv bXA7Ci1leHRlcm4gY29uc3QgY2hhciAqZmZfc291cmNlX2ZmdjFfZGVjX2NvbXA7Ci0KLWNvbnN0 IEZGVnVsa2FuRGVjb2RlRGVzY3JpcHRvciBmZl92a19kZWNfZmZ2MV9kZXNjID0gewotICAgIC5j b2RlY19pZCAgICAgICAgID0gQVZfQ09ERUNfSURfRkZWMSwKLSAgICAuZGVjb2RlX2V4dGVuc2lv biA9IEZGX1ZLX0VYVF9QVVNIX0RFU0NSSVBUT1IsCi0gICAgLnF1ZXVlX2ZsYWdzICAgICAgPSBW S19RVUVVRV9DT01QVVRFX0JJVCwKLX07Ci0KLXR5cGVkZWYgc3RydWN0IEZGdjFWdWxrYW5EZWNv ZGVQaWN0dXJlIHsKLSAgICBGRlZ1bGthbkRlY29kZVBpY3R1cmUgdnA7Ci0KLSAgICBBVkJ1ZmZl clJlZiAqc2xpY2Vfc3RhdGU7Ci0gICAgdWludDMyX3QgcGxhbmVfc3RhdGVfc2l6ZTsKLSAgICB1 aW50MzJfdCBzbGljZV9zdGF0ZV9zaXplOwotICAgIHVpbnQzMl90IHNsaWNlX2RhdGFfc2l6ZTsK LQotICAgIEFWQnVmZmVyUmVmICpzbGljZV9vZmZzZXRfYnVmOwotICAgIHVpbnQzMl90ICAgICpz bGljZV9vZmZzZXQ7Ci0gICAgaW50ICAgICAgICAgIHNsaWNlX251bTsKLQotICAgIEFWQnVmZmVy UmVmICpzbGljZV9zdGF0dXNfYnVmOwotICAgIGludCBjcmNfY2hlY2tlZDsKLX0gRkZ2MVZ1bGth bkRlY29kZVBpY3R1cmU7Ci0KLXR5cGVkZWYgc3RydWN0IEZGdjFWdWxrYW5EZWNvZGVDb250ZXh0 IHsKLSAgICBBVkJ1ZmZlclJlZiAqaW50ZXJtZWRpYXRlX2ZyYW1lc19yZWZbMl07IC8qIDE2LzMy IGJpdCAqLwotCi0gICAgRkZWdWxrYW5TaGFkZXIgc2V0dXA7Ci0gICAgRkZWdWxrYW5TaGFkZXIg cmVzZXRbMl07IC8qIEFDL0dvbG9tYiAqLwotICAgIEZGVnVsa2FuU2hhZGVyIGRlY29kZVsyXVsy XVsyXTsgLyogMTYvMzIgYml0LCBBQy9Hb2xvbWIsIE5vcm1hbC9SR0IgKi8KLQotICAgIEZGVmtC dWZmZXIgcmFuZ2Vjb2Rlcl9zdGF0aWNfYnVmOwotICAgIEZGVmtCdWZmZXIgcXVhbnRfYnVmOwot ICAgIEZGVmtCdWZmZXIgY3JjX3RhYl9idWY7Ci0KLSAgICBBVkJ1ZmZlclBvb2wgKnNsaWNlX3N0 YXRlX3Bvb2w7Ci0gICAgQVZCdWZmZXJQb29sICpzbGljZV9vZmZzZXRfcG9vbDsKLSAgICBBVkJ1 ZmZlclBvb2wgKnNsaWNlX3N0YXR1c19wb29sOwotfSBGRnYxVnVsa2FuRGVjb2RlQ29udGV4dDsK LQotdHlwZWRlZiBzdHJ1Y3QgRkZ2MVZrUGFyYW1ldGVycyB7Ci0gICAgVmtEZXZpY2VBZGRyZXNz IHNsaWNlX2RhdGE7Ci0gICAgVmtEZXZpY2VBZGRyZXNzIHNsaWNlX3N0YXRlOwotCi0gICAgaW50 IGZtdF9sdXRbNF07Ci0gICAgdWludDMyX3QgaW1nX3NpemVbMl07Ci0gICAgdWludDMyX3QgY2hy b21hX3NoaWZ0WzJdOwotCi0gICAgdWludDMyX3QgcGxhbmVfc3RhdGVfc2l6ZTsKLSAgICB1aW50 MzJfdCBjcmNyZWY7Ci0gICAgaW50IHJjdF9vZmZzZXQ7Ci0KLSAgICB1aW50OF90IGV4dGVuZF9s b29rdXBbOF07Ci0gICAgdWludDhfdCBiaXRzX3Blcl9yYXdfc2FtcGxlOwotICAgIHVpbnQ4X3Qg cXVhbnRfdGFibGVfY291bnQ7Ci0gICAgdWludDhfdCB2ZXJzaW9uOwotICAgIHVpbnQ4X3QgbWlj cm9fdmVyc2lvbjsKLSAgICB1aW50OF90IGtleV9mcmFtZTsKLSAgICB1aW50OF90IHBsYW5lczsK LSAgICB1aW50OF90IGNvZGVjX3BsYW5lczsKLSAgICB1aW50OF90IGNvbG9yX3BsYW5lczsKLSAg ICB1aW50OF90IHRyYW5zcGFyZW5jeTsKLSAgICB1aW50OF90IHBsYW5hcl9yZ2I7Ci0gICAgdWlu dDhfdCBjb2xvcnNwYWNlOwotICAgIHVpbnQ4X3QgZWM7Ci0gICAgdWludDhfdCBnb2xvbWI7Ci0g ICAgdWludDhfdCBjaGVja19jcmM7Ci0gICAgdWludDhfdCBwYWRkaW5nWzNdOwotfSBGRnYxVmtQ YXJhbWV0ZXJzOwotCi1zdGF0aWMgdm9pZCBhZGRfcHVzaF9kYXRhKEZGVnVsa2FuU2hhZGVyICpz aGQpCi17Ci0gICAgR0xTTEMoMCwgbGF5b3V0KHB1c2hfY29uc3RhbnQsIHNjYWxhcikgdW5pZm9y bSBwdXNoQ29uc3RhbnRzIHsgICk7Ci0gICAgR0xTTEMoMSwgICAgdThidWYgc2xpY2VfZGF0YTsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgR0xTTEMoMSwgICAgdThi dWYgc2xpY2Vfc3RhdGU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAg R0xTTEMoMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICk7Ci0gICAgR0xTTEMoMSwgICAgaXZlYzQgZm10X2x1dDsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgR0xTTEMoMSwgICAgdXZlYzIgaW1nX3NpemU7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgR0xTTEMoMSwgICAg dXZlYzIgY2hyb21hX3NoaWZ0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0g ICAgR0xTTEMoMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICk7Ci0gICAgR0xTTEMoMSwgICAgdWludCBwbGFuZV9zdGF0ZV9zaXplOyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgR0xTTEMoMSwgICAgdWludDMyX3QgY3Jj cmVmOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgR0xTTEMoMSwg ICAgaW50IHJjdF9vZmZzZXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7 Ci0gICAgR0xTTEMoMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICk7Ci0gICAgR0xTTEMoMSwgICAgdWludDhfdCBleHRlbmRfbG9va3VwWzhd OyAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgR0xTTEMoMSwgICAgdWludDhfdCBi aXRzX3Blcl9yYXdfc2FtcGxlOyAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgR0xTTEMo MSwgICAgdWludDhfdCBxdWFudF90YWJsZV9jb3VudDsgICAgICAgICAgICAgICAgICAgICAgICAg ICk7Ci0gICAgR0xTTEMoMSwgICAgdWludDhfdCB2ZXJzaW9uOyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICk7Ci0gICAgR0xTTEMoMSwgICAgdWludDhfdCBtaWNyb192ZXJzaW9u OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgR0xTTEMoMSwgICAgdWludDhf dCBrZXlfZnJhbWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgR0xT TEMoMSwgICAgdWludDhfdCBwbGFuZXM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICk7Ci0gICAgR0xTTEMoMSwgICAgdWludDhfdCBjb2RlY19wbGFuZXM7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICk7Ci0gICAgR0xTTEMoMSwgICAgdWludDhfdCBjb2xvcl9wbGFu ZXM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgR0xTTEMoMSwgICAgdWlu dDhfdCB0cmFuc3BhcmVuY3k7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAg R0xTTEMoMSwgICAgdWludDhfdCBwbGFuYXJfcmdiOyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICk7Ci0gICAgR0xTTEMoMSwgICAgdWludDhfdCBjb2xvcnNwYWNlOyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgR0xTTEMoMSwgICAgdWludDhfdCBlYzsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgR0xTTEMoMSwgICAg dWludDhfdCBnb2xvbWI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0g ICAgR0xTTEMoMSwgICAgdWludDhfdCBjaGVja19jcmM7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICk7Ci0gICAgR0xTTEMoMSwgICAgdWludDhfdCBwYWRkaW5nWzNdOyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgR0xTTEMoMCwgfTsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgZmZfdmtfc2hh ZGVyX2FkZF9wdXNoX2NvbnN0KHNoZCwgMCwgc2l6ZW9mKEZGdjFWa1BhcmFtZXRlcnMpLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19TSEFERVJfU1RBR0VfQ09NUFVURV9CSVQp OwotfQotCi1zdGF0aWMgaW50IHZrX2ZmdjFfc3RhcnRfZnJhbWUoQVZDb2RlY0NvbnRleHQgICAg ICAgICAgKmF2Y3R4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFWQnVm ZmVyUmVmICAgICAgICpidWZmZXJfcmVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGF2X3VudXNlZCBjb25zdCB1aW50OF90ICpidWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgYXZfdW51c2VkIHVpbnQzMl90ICAgICAgIHNpemUpCi17Ci0gICAgaW50IGVycjsK LSAgICBGRlZ1bGthbkRlY29kZUNvbnRleHQgKmRlYyA9IGF2Y3R4LT5pbnRlcm5hbC0+aHdhY2Nl bF9wcml2X2RhdGE7Ci0gICAgRkZWdWxrYW5EZWNvZGVTaGFyZWQgKmN0eCA9IGRlYy0+c2hhcmVk X2N0eDsKLSAgICBGRnYxVnVsa2FuRGVjb2RlQ29udGV4dCAqZnYgPSBjdHgtPnNkX2N0eDsKLSAg ICBGRlYxQ29udGV4dCAqZiA9IGF2Y3R4LT5wcml2X2RhdGE7Ci0KLSAgICBGRnYxVnVsa2FuRGVj b2RlUGljdHVyZSAqZnAgPSBmLT5od2FjY2VsX3BpY3R1cmVfcHJpdmF0ZTsKLSAgICBGRlZ1bGth bkRlY29kZVBpY3R1cmUgKnZwID0gJmZwLT52cDsKLQotICAgIEFWSFdGcmFtZXNDb250ZXh0ICpo d2ZjID0gKEFWSFdGcmFtZXNDb250ZXh0ICopYXZjdHgtPmh3X2ZyYW1lc19jdHgtPmRhdGE7Ci0g ICAgZW51bSBBVlBpeGVsRm9ybWF0IHN3X2Zvcm1hdCA9IGh3ZmMtPnN3X2Zvcm1hdDsKLQotICAg IGludCBtYXhfY29udGV4dHM7Ci0gICAgaW50IGlzX3JnYiA9ICEoZi0+Y29sb3JzcGFjZSA9PSAw ICYmIHN3X2Zvcm1hdCAhPSBBVl9QSVhfRk1UX1lBOCkgJiYKLSAgICAgICAgICAgICAgICAgIShz d19mb3JtYXQgPT0gQVZfUElYX0ZNVF9ZQTgpOwotCi0gICAgZnAtPnNsaWNlX251bSA9IDA7Ci0K LSAgICBtYXhfY29udGV4dHMgPSAwOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZi0+cXVhbnRf dGFibGVfY291bnQ7IGkrKykKLSAgICAgICAgbWF4X2NvbnRleHRzID0gRkZNQVgoZi0+Y29udGV4 dF9jb3VudFtpXSwgbWF4X2NvbnRleHRzKTsKLQotICAgIC8qIEFsbG9jYXRlIHNsaWNlIGJ1ZmZl ciBkYXRhICovCi0gICAgaWYgKGYtPmFjID09IEFDX0dPTE9NQl9SSUNFKQotICAgICAgICBmcC0+ cGxhbmVfc3RhdGVfc2l6ZSA9IDg7Ci0gICAgZWxzZQotICAgICAgICBmcC0+cGxhbmVfc3RhdGVf c2l6ZSA9IENPTlRFWFRfU0laRTsKLQotICAgIGZwLT5wbGFuZV9zdGF0ZV9zaXplICo9IG1heF9j b250ZXh0czsKLSAgICBmcC0+c2xpY2Vfc3RhdGVfc2l6ZSA9IGZwLT5wbGFuZV9zdGF0ZV9zaXpl KmYtPnBsYW5lX2NvdW50OwotCi0gICAgZnAtPnNsaWNlX2RhdGFfc2l6ZSA9IDI1NjsgLyogT3Zl cmVzdGltYXRpb24gZm9yIHRoZSBTbGljZUNvbnRleHQgc3RydWN0ICovCi0gICAgZnAtPnNsaWNl X3N0YXRlX3NpemUgKz0gZnAtPnNsaWNlX2RhdGFfc2l6ZTsKLSAgICBmcC0+c2xpY2Vfc3RhdGVf c2l6ZSA9IEZGQUxJR04oZnAtPnNsaWNlX3N0YXRlX3NpemUsIDgpOwotCi0gICAgZnAtPmNyY19j aGVja2VkID0gZi0+ZWMgJiYgKGF2Y3R4LT5lcnJfcmVjb2duaXRpb24gJiBBVl9FRl9DUkNDSEVD Syk7Ci0KLSAgICAvKiBIb3N0IG1hcCB0aGUgaW5wdXQgc2xpY2VzIGRhdGEgaWYgc3VwcG9ydGVk ICovCi0gICAgaWYgKGN0eC0+cy5leHRlbnNpb25zICYgRkZfVktfRVhUX0VYVEVSTkFMX0hPU1Rf TUVNT1JZKQotICAgICAgICBmZl92a19ob3N0X21hcF9idWZmZXIoJmN0eC0+cywgJnZwLT5zbGlj ZXNfYnVmLCBidWZmZXJfcmVmLT5kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg YnVmZmVyX3JlZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZLX0JVRkZFUl9VU0FH RV9TVE9SQUdFX0JVRkZFUl9CSVQgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktf QlVGRkVSX1VTQUdFX1NIQURFUl9ERVZJQ0VfQUREUkVTU19CSVQpOwotCi0gICAgLyogQWxsb2Nh dGUgc2xpY2Ugc3RhdGUgZGF0YSAqLwotICAgIGlmIChmLT5waWN0dXJlLmYtPmZsYWdzICYgQVZf RlJBTUVfRkxBR19LRVkpIHsKLSAgICAgICAgZXJyID0gZmZfdmtfZ2V0X3Bvb2xlZF9idWZmZXIo JmN0eC0+cywgJmZ2LT5zbGljZV9zdGF0ZV9wb29sLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAmZnAtPnNsaWNlX3N0YXRlLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBWS19CVUZGRVJfVVNBR0VfU1RPUkFHRV9CVUZGRVJfQklUIHwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfQlVGRkVSX1VTQUdFX1NIQURFUl9E RVZJQ0VfQUREUkVTU19CSVQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IE5VTEwsIGYtPnNsaWNlX2NvdW50KmZwLT5zbGljZV9zdGF0ZV9zaXplLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBWS19NRU1PUllfUFJPUEVSVFlfREVWSUNFX0xPQ0FM X0JJVCk7Ci0gICAgICAgIGlmIChlcnIgPCAwKQotICAgICAgICAgICAgcmV0dXJuIGVycjsKLSAg ICB9IGVsc2UgewotICAgICAgICBGRnYxVnVsa2FuRGVjb2RlUGljdHVyZSAqZnBsID0gZi0+aHdh Y2NlbF9sYXN0X3BpY3R1cmVfcHJpdmF0ZTsKLSAgICAgICAgZnAtPnNsaWNlX3N0YXRlID0gYXZf YnVmZmVyX3JlZihmcGwtPnNsaWNlX3N0YXRlKTsKLSAgICAgICAgaWYgKCFmcC0+c2xpY2Vfc3Rh dGUpCi0gICAgICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOwotICAgIH0KLQotICAgIC8q IEFsbG9jYXRlIHNsaWNlIG9mZnNldHMgYnVmZmVyICovCi0gICAgZXJyID0gZmZfdmtfZ2V0X3Bv b2xlZF9idWZmZXIoJmN0eC0+cywgJmZ2LT5zbGljZV9vZmZzZXRfcG9vbCwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAmZnAtPnNsaWNlX29mZnNldF9idWYsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgVktfQlVGRkVSX1VTQUdFX1NUT1JBR0VfQlVGRkVSX0JJ VCB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfQlVGRkVSX1VTQUdFX1NI QURFUl9ERVZJQ0VfQUREUkVTU19CSVQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgTlVMTCwgMipmLT5zbGljZV9jb3VudCpzaXplb2YodWludDMyX3QpLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFZLX01FTU9SWV9QUk9QRVJUWV9ERVZJQ0VfTE9DQUxfQklU IHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19NRU1PUllfUFJPUEVSVFlf SE9TVF9WSVNJQkxFX0JJVCk7Ci0gICAgaWYgKGVyciA8IDApCi0gICAgICAgIHJldHVybiBlcnI7 Ci0KLSAgICAvKiBBbGxvY2F0ZSBzbGljZSBzdGF0dXMgYnVmZmVyICovCi0gICAgZXJyID0gZmZf dmtfZ2V0X3Bvb2xlZF9idWZmZXIoJmN0eC0+cywgJmZ2LT5zbGljZV9zdGF0dXNfcG9vbCwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZnAtPnNsaWNlX3N0YXR1c19idWYsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfQlVGRkVSX1VTQUdFX1NUT1JBR0Vf QlVGRkVSX0JJVCB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfQlVGRkVS X1VTQUdFX1NIQURFUl9ERVZJQ0VfQUREUkVTU19CSVQsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgTlVMTCwgMipmLT5zbGljZV9jb3VudCpzaXplb2YodWludDMyX3QpLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZLX01FTU9SWV9QUk9QRVJUWV9ERVZJQ0Vf TE9DQUxfQklUIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19NRU1PUllf UFJPUEVSVFlfSE9TVF9WSVNJQkxFX0JJVCk7Ci0gICAgaWYgKGVyciA8IDApCi0gICAgICAgIHJl dHVybiBlcnI7Ci0KLSAgICAvKiBQcmVwYXJlIGZyYW1lIHRvIGJlIHVzZWQgKi8KLSAgICBlcnIg PSBmZl92a19kZWNvZGVfcHJlcGFyZV9mcmFtZV9zZHIoZGVjLCBmLT5waWN0dXJlLmYsIHZwLCAx LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGRl9WS19SRVBfTkFU SVZFLCAwKTsKLSAgICBpZiAoZXJyIDwgMCkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIC8q IENyZWF0ZSBhIHRlbXBvcmF0eSBmcmFtZSBmb3IgUkdCICovCi0gICAgaWYgKGlzX3JnYikgewot ICAgICAgICB2cC0+ZHBiX2ZyYW1lID0gYXZfZnJhbWVfYWxsb2MoKTsKLSAgICAgICAgaWYgKCF2 cC0+ZHBiX2ZyYW1lKQotICAgICAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKLQotICAg ICAgICBlcnIgPSBhdl9od2ZyYW1lX2dldF9idWZmZXIoZnYtPmludGVybWVkaWF0ZV9mcmFtZXNf cmVmW2YtPnVzZTMyYml0XSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZw LT5kcGJfZnJhbWUsIDApOwotICAgICAgICBpZiAoZXJyIDwgMCkKLSAgICAgICAgICAgIHJldHVy biBlcnI7Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgdmtfZmZ2MV9k ZWNvZGVfc2xpY2UoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCB1aW50OF90ICAqZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdWludDMyX3QgICAgICAgIHNpemUpCi17Ci0gICAgRkZWMUNvbnRleHQgKmYgPSBh dmN0eC0+cHJpdl9kYXRhOwotCi0gICAgRkZ2MVZ1bGthbkRlY29kZVBpY3R1cmUgKmZwID0gZi0+ aHdhY2NlbF9waWN0dXJlX3ByaXZhdGU7Ci0gICAgRkZWdWxrYW5EZWNvZGVQaWN0dXJlICp2cCA9 ICZmcC0+dnA7Ci0KLSAgICBGRlZrQnVmZmVyICpzbGljZV9vZmZzZXQgPSAoRkZWa0J1ZmZlciAq KWZwLT5zbGljZV9vZmZzZXRfYnVmLT5kYXRhOwotICAgIEZGVmtCdWZmZXIgKnNsaWNlc19idWYg PSB2cC0+c2xpY2VzX2J1ZiA/IChGRlZrQnVmZmVyICopdnAtPnNsaWNlc19idWYtPmRhdGEgOiBO VUxMOwotCi0gICAgaWYgKHNsaWNlc19idWYgJiYgc2xpY2VzX2J1Zi0+aG9zdF9yZWYpIHsKLSAg ICAgICAgQVZfV04zMihzbGljZV9vZmZzZXQtPm1hcHBlZF9tZW0gKyAoMipmcC0+c2xpY2VfbnVt ICsgMCkqc2l6ZW9mKHVpbnQzMl90KSwKLSAgICAgICAgICAgICAgICBkYXRhIC0gc2xpY2VzX2J1 Zi0+bWFwcGVkX21lbSk7Ci0gICAgICAgIEFWX1dOMzIoc2xpY2Vfb2Zmc2V0LT5tYXBwZWRfbWVt ICsgKDIqZnAtPnNsaWNlX251bSArIDEpKnNpemVvZih1aW50MzJfdCksCi0gICAgICAgICAgICAg ICAgc2l6ZSk7Ci0KLSAgICAgICAgZnAtPnNsaWNlX251bSsrOwotICAgIH0gZWxzZSB7Ci0gICAg ICAgIGludCBlcnIgPSBmZl92a19kZWNvZGVfYWRkX3NsaWNlKGF2Y3R4LCB2cCwgZGF0YSwgc2l6 ZSwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZwLT5zbGlj ZV9udW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCB1 aW50MzJfdCAqKikmZnAtPnNsaWNlX29mZnNldCk7Ci0gICAgICAgIGlmIChlcnIgPCAwKQotICAg ICAgICAgICAgcmV0dXJuIGVycjsKLQotICAgICAgICBBVl9XTjMyKHNsaWNlX29mZnNldC0+bWFw cGVkX21lbSArICgyKihmcC0+c2xpY2VfbnVtIC0gMSkgKyAwKSpzaXplb2YodWludDMyX3QpLAot ICAgICAgICAgICAgICAgIGZwLT5zbGljZV9vZmZzZXRbZnAtPnNsaWNlX251bSAtIDFdKTsKLSAg ICAgICAgQVZfV04zMihzbGljZV9vZmZzZXQtPm1hcHBlZF9tZW0gKyAoMiooZnAtPnNsaWNlX251 bSAtIDEpICsgMSkqc2l6ZW9mKHVpbnQzMl90KSwKLSAgICAgICAgICAgICAgICBzaXplKTsKLSAg ICB9Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB2a19mZnYxX2VuZF9mcmFtZShB VkNvZGVjQ29udGV4dCAqYXZjdHgpCi17Ci0gICAgaW50IGVycjsKLSAgICBGRlZ1bGthbkRlY29k ZUNvbnRleHQgKmRlYyA9IGF2Y3R4LT5pbnRlcm5hbC0+aHdhY2NlbF9wcml2X2RhdGE7Ci0gICAg RkZWdWxrYW5EZWNvZGVTaGFyZWQgKmN0eCA9IGRlYy0+c2hhcmVkX2N0eDsKLSAgICBGRlZ1bGth bkZ1bmN0aW9ucyAqdmsgPSAmY3R4LT5zLnZrZm47Ci0KLSAgICBGRlYxQ29udGV4dCAqZiA9IGF2 Y3R4LT5wcml2X2RhdGE7Ci0gICAgRkZ2MVZ1bGthbkRlY29kZUNvbnRleHQgKmZ2ID0gY3R4LT5z ZF9jdHg7Ci0gICAgRkZ2MVZrUGFyYW1ldGVycyBwZDsKLSAgICBGRnYxVmtSZXNldFBhcmFtZXRl cnMgcGRfcmVzZXQ7Ci0KLSAgICBBVkhXRnJhbWVzQ29udGV4dCAqaHdmYyA9IChBVkhXRnJhbWVz Q29udGV4dCAqKWF2Y3R4LT5od19mcmFtZXNfY3R4LT5kYXRhOwotICAgIGVudW0gQVZQaXhlbEZv cm1hdCBzd19mb3JtYXQgPSBod2ZjLT5zd19mb3JtYXQ7Ci0KLSAgICBpbnQgYml0cyA9IGYtPmF2 Y3R4LT5iaXRzX3Blcl9yYXdfc2FtcGxlID4gMCA/IGYtPmF2Y3R4LT5iaXRzX3Blcl9yYXdfc2Ft cGxlIDogODsKLSAgICBpbnQgaXNfcmdiID0gIShmLT5jb2xvcnNwYWNlID09IDAgJiYgc3dfZm9y bWF0ICE9IEFWX1BJWF9GTVRfWUE4KSAmJgotICAgICAgICAgICAgICAgICAhKHN3X2Zvcm1hdCA9 PSBBVl9QSVhfRk1UX1lBOCk7Ci0gICAgaW50IGNvbG9yX3BsYW5lcyA9IGF2X3BpeF9mbXRfZGVz Y19nZXQoYXZjdHgtPnN3X3BpeF9mbXQpLT5uYl9jb21wb25lbnRzOwotCi0gICAgRkZWdWxrYW5T aGFkZXIgKnJlc2V0X3NoYWRlcjsKLSAgICBGRlZ1bGthblNoYWRlciAqZGVjb2RlX3NoYWRlcjsK LQotICAgIEZGdjFWdWxrYW5EZWNvZGVQaWN0dXJlICpmcCA9IGYtPmh3YWNjZWxfcGljdHVyZV9w cml2YXRlOwotICAgIEZGVnVsa2FuRGVjb2RlUGljdHVyZSAqdnAgPSAmZnAtPnZwOwotCi0gICAg RkZWa0J1ZmZlciAqc2xpY2VzX2J1ZiA9IChGRlZrQnVmZmVyICopdnAtPnNsaWNlc19idWYtPmRh dGE7Ci0gICAgRkZWa0J1ZmZlciAqc2xpY2Vfc3RhdGUgPSAoRkZWa0J1ZmZlciAqKWZwLT5zbGlj ZV9zdGF0ZS0+ZGF0YTsKLSAgICBGRlZrQnVmZmVyICpzbGljZV9vZmZzZXQgPSAoRkZWa0J1ZmZl ciAqKWZwLT5zbGljZV9vZmZzZXRfYnVmLT5kYXRhOwotICAgIEZGVmtCdWZmZXIgKnNsaWNlX3N0 YXR1cyA9IChGRlZrQnVmZmVyICopZnAtPnNsaWNlX3N0YXR1c19idWYtPmRhdGE7Ci0KLSAgICBW a0ltYWdlVmlldyByY3RfaW1hZ2Vfdmlld3NbQVZfTlVNX0RBVEFfUE9JTlRFUlNdOwotCi0gICAg QVZGcmFtZSAqZGVjb2RlX2RzdCA9IGlzX3JnYiA/IHZwLT5kcGJfZnJhbWUgOiBmLT5waWN0dXJl LmY7Ci0gICAgVmtJbWFnZVZpZXcgKmRlY29kZV9kc3RfdmlldyA9IGlzX3JnYiA/IHJjdF9pbWFn ZV92aWV3cyA6IHZwLT52aWV3Lm91dDsKLQotICAgIFZrSW1hZ2VNZW1vcnlCYXJyaWVyMiBpbWdf YmFyWzM3XTsKLSAgICBpbnQgbmJfaW1nX2JhciA9IDA7Ci0gICAgVmtCdWZmZXJNZW1vcnlCYXJy aWVyMiBidWZfYmFyWzhdOwotICAgIGludCBuYl9idWZfYmFyID0gMDsKLQotICAgIEZGVmtFeGVj Q29udGV4dCAqZXhlYyA9IGZmX3ZrX2V4ZWNfZ2V0KCZjdHgtPnMsICZjdHgtPmV4ZWNfcG9vbCk7 Ci0gICAgZmZfdmtfZXhlY19zdGFydCgmY3R4LT5zLCBleGVjKTsKLQotICAgIC8qIFByZXBhcmUg ZGVwcyAqLwotICAgIFJFVChmZl92a19leGVjX2FkZF9kZXBfZnJhbWUoJmN0eC0+cywgZXhlYywg Zi0+cGljdHVyZS5mLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfUElQRUxJ TkVfU1RBR0VfMl9BTExfQ09NTUFORFNfQklULAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgVktfUElQRUxJTkVfU1RBR0VfMl9DT01QVVRFX1NIQURFUl9CSVQpKTsKLQotICAgIGVy ciA9IGZmX3ZrX2V4ZWNfbWlycm9yX3NlbV92YWx1ZSgmY3R4LT5zLCBleGVjLCAmdnAtPnNlbSwg JnZwLT5zZW1fdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYt PnBpY3R1cmUuZik7Ci0gICAgaWYgKGVyciA8IDApCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAg ICBpZiAoaXNfcmdiKSB7Ci0gICAgICAgIFJFVChmZl92a19jcmVhdGVfaW1hZ2V2aWV3cygmY3R4 LT5zLCBleGVjLCByY3RfaW1hZ2Vfdmlld3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB2cC0+ZHBiX2ZyYW1lLCBGRl9WS19SRVBfTkFUSVZFKSk7Ci0gICAgICAgIFJFVChm Zl92a19leGVjX2FkZF9kZXBfZnJhbWUoJmN0eC0+cywgZXhlYywgdnAtPmRwYl9mcmFtZSwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19QSVBFTElORV9TVEFHRV8yX0FM TF9DT01NQU5EU19CSVQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktf UElQRUxJTkVfU1RBR0VfMl9DTEVBUl9CSVQpKTsKLSAgICAgICAgZmZfdmtfZnJhbWVfYmFycmll cigmY3R4LT5zLCBleGVjLCBkZWNvZGVfZHN0LCBpbWdfYmFyLCAmbmJfaW1nX2JhciwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICBWS19QSVBFTElORV9TVEFHRV8yX0FMTF9DT01NQU5EU19C SVQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfUElQRUxJTkVfU1RBR0VfMl9BTExf Q09NTUFORFNfQklULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZLX0FDQ0VTU18yX1RS QU5TRkVSX1dSSVRFX0JJVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19JTUFHRV9M QVlPVVRfR0VORVJBTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19RVUVVRV9GQU1J TFlfSUdOT1JFRCk7Ci0gICAgfQotCi0gICAgaWYgKCEoZi0+cGljdHVyZS5mLT5mbGFncyAmIEFW X0ZSQU1FX0ZMQUdfS0VZKSkgewotICAgICAgICBGRnYxVnVsa2FuRGVjb2RlUGljdHVyZSAqZnBs ID0gZi0+aHdhY2NlbF9sYXN0X3BpY3R1cmVfcHJpdmF0ZTsKLSAgICAgICAgRkZWdWxrYW5EZWNv ZGVQaWN0dXJlICp2cGwgPSAmZnBsLT52cDsKLQotICAgICAgICAvKiBXYWl0IG9uIHRoZSBwcmV2 aW91cyBmcmFtZSAqLwotICAgICAgICBSRVQoZmZfdmtfZXhlY19hZGRfZGVwX3dhaXRfc2VtKCZj dHgtPnMsIGV4ZWMsIHZwbC0+c2VtLCB2cGwtPnNlbV92YWx1ZSwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBWS19QSVBFTElORV9TVEFHRV8yX0FMTF9DT01NQU5EU19C SVQpKTsKLSAgICB9Ci0KLSAgICBSRVQoZmZfdmtfZXhlY19hZGRfZGVwX2J1ZigmY3R4LT5zLCBl eGVjLCAmZnAtPnNsaWNlX3N0YXRlLCAxLCAxKSk7Ci0gICAgUkVUKGZmX3ZrX2V4ZWNfYWRkX2Rl cF9idWYoJmN0eC0+cywgZXhlYywgJmZwLT5zbGljZV9zdGF0dXNfYnVmLCAxLCAxKSk7Ci0gICAg UkVUKGZmX3ZrX2V4ZWNfYWRkX2RlcF9idWYoJmN0eC0+cywgZXhlYywgJnZwLT5zbGljZXNfYnVm LCAxLCAwKSk7Ci0gICAgdnAtPnNsaWNlc19idWYgPSBOVUxMOwotICAgIFJFVChmZl92a19leGVj X2FkZF9kZXBfYnVmKCZjdHgtPnMsIGV4ZWMsICZmcC0+c2xpY2Vfb2Zmc2V0X2J1ZiwgMSwgMCkp OwotICAgIGZwLT5zbGljZV9vZmZzZXRfYnVmID0gTlVMTDsKLQotICAgIC8qIEVudHJ5IGJhcnJp ZXIgZm9yIHRoZSBzbGljZSBzdGF0ZSAqLwotICAgIGJ1Zl9iYXJbbmJfYnVmX2JhcisrXSA9IChW a0J1ZmZlck1lbW9yeUJhcnJpZXIyKSB7Ci0gICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9U WVBFX0JVRkZFUl9NRU1PUllfQkFSUklFUl8yLAotICAgICAgICAuc3JjU3RhZ2VNYXNrID0gc2xp Y2Vfc3RhdGUtPnN0YWdlLAotICAgICAgICAuZHN0U3RhZ2VNYXNrID0gVktfUElQRUxJTkVfU1RB R0VfMl9DT01QVVRFX1NIQURFUl9CSVQsCi0gICAgICAgIC5zcmNBY2Nlc3NNYXNrID0gc2xpY2Vf c3RhdGUtPmFjY2VzcywKLSAgICAgICAgLmRzdEFjY2Vzc01hc2sgPSBWS19BQ0NFU1NfMl9TSEFE RVJfU1RPUkFHRV9SRUFEX0JJVCB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgVktfQUNDRVNT XzJfU0hBREVSX1NUT1JBR0VfV1JJVEVfQklULAotICAgICAgICAuc3JjUXVldWVGYW1pbHlJbmRl eCA9IFZLX1FVRVVFX0ZBTUlMWV9JR05PUkVELAotICAgICAgICAuZHN0UXVldWVGYW1pbHlJbmRl eCA9IFZLX1FVRVVFX0ZBTUlMWV9JR05PUkVELAotICAgICAgICAuYnVmZmVyID0gc2xpY2Vfc3Rh dGUtPmJ1ZiwKLSAgICAgICAgLm9mZnNldCA9IDAsCi0gICAgICAgIC5zaXplID0gZnAtPnNsaWNl X2RhdGFfc2l6ZSpmLT5zbGljZV9jb3VudCwKLSAgICB9OwotCi0gICAgdmstPkNtZFBpcGVsaW5l QmFycmllcjIoZXhlYy0+YnVmLCAmKFZrRGVwZW5kZW5jeUluZm8pIHsKLSAgICAgICAgLnNUeXBl ID0gVktfU1RSVUNUVVJFX1RZUEVfREVQRU5ERU5DWV9JTkZPLAotICAgICAgICAucEltYWdlTWVt b3J5QmFycmllcnMgPSBpbWdfYmFyLAotICAgICAgICAuaW1hZ2VNZW1vcnlCYXJyaWVyQ291bnQg PSBuYl9pbWdfYmFyLAotICAgICAgICAucEJ1ZmZlck1lbW9yeUJhcnJpZXJzID0gYnVmX2JhciwK LSAgICAgICAgLmJ1ZmZlck1lbW9yeUJhcnJpZXJDb3VudCA9IG5iX2J1Zl9iYXIsCi0gICAgfSk7 Ci0gICAgc2xpY2Vfc3RhdGUtPnN0YWdlID0gYnVmX2JhclswXS5kc3RTdGFnZU1hc2s7Ci0gICAg c2xpY2Vfc3RhdGUtPmFjY2VzcyA9IGJ1Zl9iYXJbMF0uZHN0QWNjZXNzTWFzazsKLSAgICBuYl9i dWZfYmFyID0gMDsKLSAgICBuYl9pbWdfYmFyID0gMDsKLQotICAgIC8qIFNldHVwIHNoYWRlciAq LwotICAgIGZmX3ZrX3NoYWRlcl91cGRhdGVfZGVzY19idWZmZXIoJmN0eC0+cywgZXhlYywgJmZ2 LT5zZXR1cCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIDAsIDAsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGljZV9zdGF0ZSwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIGZwLT5zbGljZV9kYXRhX3NpemUqZi0+c2xp Y2VfY291bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19GT1JNQVRf VU5ERUZJTkVEKTsKLSAgICBmZl92a19zaGFkZXJfdXBkYXRlX2Rlc2NfYnVmZmVyKCZjdHgtPnMs IGV4ZWMsICZmdi0+c2V0dXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAx LCAxLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xpY2Vfb2Zmc2V0 LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMipmLT5zbGljZV9jb3Vu dCpzaXplb2YodWludDMyX3QpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg VktfRk9STUFUX1VOREVGSU5FRCk7Ci0gICAgZmZfdmtfc2hhZGVyX3VwZGF0ZV9kZXNjX2J1ZmZl cigmY3R4LT5zLCBleGVjLCAmZnYtPnNldHVwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgMSwgMiwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNs aWNlX3N0YXR1cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDIqZi0+ c2xpY2VfY291bnQqc2l6ZW9mKHVpbnQzMl90KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFZLX0ZPUk1BVF9VTkRFRklORUQpOwotCi0gICAgZmZfdmtfZXhlY19iaW5kX3No YWRlcigmY3R4LT5zLCBleGVjLCAmZnYtPnNldHVwKTsKLSAgICBwZCA9IChGRnYxVmtQYXJhbWV0 ZXJzKSB7Ci0gICAgICAgIC5zbGljZV9kYXRhID0gc2xpY2VzX2J1Zi0+YWRkcmVzcywKLSAgICAg ICAgLnNsaWNlX3N0YXRlICA9IHNsaWNlX3N0YXRlLT5hZGRyZXNzICsgZi0+c2xpY2VfY291bnQq ZnAtPnNsaWNlX2RhdGFfc2l6ZSwKLQotICAgICAgICAuaW1nX3NpemVbMF0gPSBmLT5waWN0dXJl LmYtPndpZHRoLAotICAgICAgICAuaW1nX3NpemVbMV0gPSBmLT5waWN0dXJlLmYtPmhlaWdodCwK LSAgICAgICAgLmNocm9tYV9zaGlmdFswXSA9IGYtPmNocm9tYV9oX3NoaWZ0LAotICAgICAgICAu Y2hyb21hX3NoaWZ0WzFdID0gZi0+Y2hyb21hX3Zfc2hpZnQsCi0KLSAgICAgICAgLnBsYW5lX3N0 YXRlX3NpemUgPSBmcC0+cGxhbmVfc3RhdGVfc2l6ZSwKLSAgICAgICAgLmNyY3JlZiA9IGYtPmNy Y3JlZiwKLSAgICAgICAgLnJjdF9vZmZzZXQgPSAxIDw8IGJpdHMsCi0KLSAgICAgICAgLmJpdHNf cGVyX3Jhd19zYW1wbGUgPSBiaXRzLAotICAgICAgICAucXVhbnRfdGFibGVfY291bnQgPSBmLT5x dWFudF90YWJsZV9jb3VudCwKLSAgICAgICAgLnZlcnNpb24gPSBmLT52ZXJzaW9uLAotICAgICAg ICAubWljcm9fdmVyc2lvbiA9IGYtPm1pY3JvX3ZlcnNpb24sCi0gICAgICAgIC5rZXlfZnJhbWUg PSBmLT5waWN0dXJlLmYtPmZsYWdzICYgQVZfRlJBTUVfRkxBR19LRVksCi0gICAgICAgIC5wbGFu ZXMgPSBhdl9waXhfZm10X2NvdW50X3BsYW5lcyhzd19mb3JtYXQpLAotICAgICAgICAuY29kZWNf cGxhbmVzID0gZi0+cGxhbmVfY291bnQsCi0gICAgICAgIC5jb2xvcl9wbGFuZXMgPSBjb2xvcl9w bGFuZXMsCi0gICAgICAgIC50cmFuc3BhcmVuY3kgPSBmLT50cmFuc3BhcmVuY3ksCi0gICAgICAg IC5wbGFuYXJfcmdiID0gZmZfdmtfbXRfaXNfbnBfcmdiKHN3X2Zvcm1hdCkgJiYKLSAgICAgICAg ICAgICAgICAgICAgICAoZmZfdmtfY291bnRfaW1hZ2VzKChBVlZrRnJhbWUgKilmLT5waWN0dXJl LmYtPmRhdGFbMF0pID4gMSksCi0gICAgICAgIC5jb2xvcnNwYWNlID0gZi0+Y29sb3JzcGFjZSwK LSAgICAgICAgLmVjID0gZi0+ZWMsCi0gICAgICAgIC5nb2xvbWIgPSBmLT5hYyA9PSBBQ19HT0xP TUJfUklDRSwKLSAgICAgICAgLmNoZWNrX2NyYyA9ICEhKGF2Y3R4LT5lcnJfcmVjb2duaXRpb24g JiBBVl9FRl9DUkNDSEVDSyksCi0gICAgfTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGYtPnF1 YW50X3RhYmxlX2NvdW50OyBpKyspCi0gICAgICAgIHBkLmV4dGVuZF9sb29rdXBbaV0gPSAoZi0+ cXVhbnRfdGFibGVzW2ldWzNdWzEyN10gIT0gMCkgfHwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChmLT5xdWFudF90YWJsZXNbaV1bNF1bMTI3XSAhPSAwKTsKLQotCi0gICAgLyogRm9y IHNvbWUgcmVhc29uIHRoZSBDIEZGdjEgZW5jb2Rlci9kZWNvZGVyIHRyZWF0cyB0aGVzZSBkaWZm ZXJlbnRseSAqLwotICAgIGlmIChzd19mb3JtYXQgPT0gQVZfUElYX0ZNVF9HQlJQMTAgfHwgc3df Zm9ybWF0ID09IEFWX1BJWF9GTVRfR0JSUDEyIHx8Ci0gICAgICAgIHN3X2Zvcm1hdCA9PSBBVl9Q SVhfRk1UX0dCUlAxNCkKLSAgICAgICAgbWVtY3B5KHBkLmZtdF9sdXQsIChpbnQgWzRdKSB7IDIs IDEsIDAsIDMgfSwgNCpzaXplb2YoaW50KSk7Ci0gICAgZWxzZSBpZiAoc3dfZm9ybWF0ID09IEFW X1BJWF9GTVRfWDJCR1IxMCkKLSAgICAgICAgbWVtY3B5KHBkLmZtdF9sdXQsIChpbnQgWzRdKSB7 IDAsIDIsIDEsIDMgfSwgNCpzaXplb2YoaW50KSk7Ci0gICAgZWxzZQotICAgICAgICBmZl92a19z ZXRfcGVybShzd19mb3JtYXQsIHBkLmZtdF9sdXQsIDApOwotCi0gICAgZmZfdmtfc2hhZGVyX3Vw ZGF0ZV9wdXNoX2NvbnN0KCZjdHgtPnMsIGV4ZWMsICZmdi0+c2V0dXAsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFZLX1NIQURFUl9TVEFHRV9DT01QVVRFX0JJVCwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgc2l6ZW9mKHBkKSwgJnBkKTsKLQotICAg IHZrLT5DbWREaXNwYXRjaChleGVjLT5idWYsIGYtPm51bV9oX3NsaWNlcywgZi0+bnVtX3Zfc2xp Y2VzLCAxKTsKLQotICAgIGlmIChpc19yZ2IpIHsKLSAgICAgICAgQVZWa0ZyYW1lICp2a2YgPSAo QVZWa0ZyYW1lICopdnAtPmRwYl9mcmFtZS0+ZGF0YVswXTsKLSAgICAgICAgZm9yIChpbnQgaSA9 IDA7IGkgPCBjb2xvcl9wbGFuZXM7IGkrKykKLSAgICAgICAgICAgIHZrLT5DbWRDbGVhckNvbG9y SW1hZ2UoZXhlYy0+YnVmLCB2a2YtPmltZ1tpXSwgVktfSU1BR0VfTEFZT1VUX0dFTkVSQUwsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYoKFZrQ2xlYXJDb2xvclZhbHVlKSB7 IDAgfSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsICYoKFZrSW1hZ2VT dWJyZXNvdXJjZVJhbmdlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAuYXNwZWN0TWFzayA9IFZLX0lNQUdFX0FTUEVDVF9DT0xPUl9CSVQsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAubGV2ZWxDb3VudCA9IDEsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAubGF5ZXJDb3VudCA9IDEsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIH0pKTsKLSAgICB9Ci0KLSAgICAvKiBSZXNldCBzaGFkZXIg Ki8KLSAgICByZXNldF9zaGFkZXIgPSAmZnYtPnJlc2V0W2YtPmFjID09IEFDX0dPTE9NQl9SSUNF XTsKLSAgICBmZl92a19zaGFkZXJfdXBkYXRlX2Rlc2NfYnVmZmVyKCZjdHgtPnMsIGV4ZWMsIHJl c2V0X3NoYWRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIDAsIDAs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGljZV9zdGF0ZSwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIGZwLT5zbGljZV9kYXRhX3NpemUqZi0+ c2xpY2VfY291bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19GT1JN QVRfVU5ERUZJTkVEKTsKLQotICAgIGZmX3ZrX2V4ZWNfYmluZF9zaGFkZXIoJmN0eC0+cywgZXhl YywgcmVzZXRfc2hhZGVyKTsKLQotICAgIHBkX3Jlc2V0ID0gKEZGdjFWa1Jlc2V0UGFyYW1ldGVy cykgewotICAgICAgICAuc2xpY2Vfc3RhdGUgPSBzbGljZV9zdGF0ZS0+YWRkcmVzcyArIGYtPnNs aWNlX2NvdW50KmZwLT5zbGljZV9kYXRhX3NpemUsCi0gICAgICAgIC5wbGFuZV9zdGF0ZV9zaXpl ID0gZnAtPnBsYW5lX3N0YXRlX3NpemUsCi0gICAgICAgIC5jb2RlY19wbGFuZXMgPSBmLT5wbGFu ZV9jb3VudCwKLSAgICAgICAgLmtleV9mcmFtZSA9IGYtPnBpY3R1cmUuZi0+ZmxhZ3MgJiBBVl9G UkFNRV9GTEFHX0tFWSwKLSAgICAgICAgLnZlcnNpb24gPSBmLT52ZXJzaW9uLAotICAgICAgICAu bWljcm9fdmVyc2lvbiA9IGYtPm1pY3JvX3ZlcnNpb24sCi0gICAgfTsKLSAgICBmb3IgKGludCBp ID0gMDsgaSA8IGYtPnF1YW50X3RhYmxlX2NvdW50OyBpKyspCi0gICAgICAgIHBkX3Jlc2V0LmNv bnRleHRfY291bnRbaV0gPSBmLT5jb250ZXh0X2NvdW50W2ldOwotCi0gICAgZmZfdmtfc2hhZGVy X3VwZGF0ZV9wdXNoX2NvbnN0KCZjdHgtPnMsIGV4ZWMsIHJlc2V0X3NoYWRlciwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfU0hBREVSX1NUQUdFX0NPTVBVVEVfQklULAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBzaXplb2YocGRfcmVzZXQpLCAm cGRfcmVzZXQpOwotCi0gICAgLyogU3luYyBiZXR3ZWVuIHNldHVwIGFuZCByZXNldCBzaGFkZXJz ICovCi0gICAgYnVmX2JhcltuYl9idWZfYmFyKytdID0gKFZrQnVmZmVyTWVtb3J5QmFycmllcjIp IHsKLSAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfQlVGRkVSX01FTU9SWV9CQVJS SUVSXzIsCi0gICAgICAgIC5zcmNTdGFnZU1hc2sgPSBzbGljZV9zdGF0ZS0+c3RhZ2UsCi0gICAg ICAgIC5kc3RTdGFnZU1hc2sgPSBWS19QSVBFTElORV9TVEFHRV8yX0NPTVBVVEVfU0hBREVSX0JJ VCwKLSAgICAgICAgLnNyY0FjY2Vzc01hc2sgPSBzbGljZV9zdGF0ZS0+YWNjZXNzLAotICAgICAg ICAuZHN0QWNjZXNzTWFzayA9IFZLX0FDQ0VTU18yX1NIQURFUl9TVE9SQUdFX1JFQURfQklULAot ICAgICAgICAuc3JjUXVldWVGYW1pbHlJbmRleCA9IFZLX1FVRVVFX0ZBTUlMWV9JR05PUkVELAot ICAgICAgICAuZHN0UXVldWVGYW1pbHlJbmRleCA9IFZLX1FVRVVFX0ZBTUlMWV9JR05PUkVELAot ICAgICAgICAuYnVmZmVyID0gc2xpY2Vfc3RhdGUtPmJ1ZiwKLSAgICAgICAgLm9mZnNldCA9IDAs Ci0gICAgICAgIC5zaXplID0gZnAtPnNsaWNlX2RhdGFfc2l6ZSpmLT5zbGljZV9jb3VudCwKLSAg ICB9OwotICAgIHZrLT5DbWRQaXBlbGluZUJhcnJpZXIyKGV4ZWMtPmJ1ZiwgJihWa0RlcGVuZGVu Y3lJbmZvKSB7Ci0gICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX0RFUEVOREVOQ1lf SU5GTywKLSAgICAgICAgLnBJbWFnZU1lbW9yeUJhcnJpZXJzID0gaW1nX2JhciwKLSAgICAgICAg LmltYWdlTWVtb3J5QmFycmllckNvdW50ID0gbmJfaW1nX2JhciwKLSAgICAgICAgLnBCdWZmZXJN ZW1vcnlCYXJyaWVycyA9IGJ1Zl9iYXIsCi0gICAgICAgIC5idWZmZXJNZW1vcnlCYXJyaWVyQ291 bnQgPSBuYl9idWZfYmFyLAotICAgIH0pOwotICAgIHNsaWNlX3N0YXRlLT5zdGFnZSA9IGJ1Zl9i YXJbMF0uZHN0U3RhZ2VNYXNrOwotICAgIHNsaWNlX3N0YXRlLT5hY2Nlc3MgPSBidWZfYmFyWzBd LmRzdEFjY2Vzc01hc2s7Ci0gICAgbmJfYnVmX2JhciA9IDA7Ci0gICAgbmJfaW1nX2JhciA9IDA7 Ci0KLSAgICB2ay0+Q21kRGlzcGF0Y2goZXhlYy0+YnVmLCBmLT5udW1faF9zbGljZXMsIGYtPm51 bV92X3NsaWNlcywKLSAgICAgICAgICAgICAgICAgICAgZi0+cGxhbmVfY291bnQpOwotCi0gICAg LyogRGVjb2RlICovCi0gICAgZGVjb2RlX3NoYWRlciA9ICZmdi0+ZGVjb2RlW2YtPnVzZTMyYml0 XVtmLT5hYyA9PSBBQ19HT0xPTUJfUklDRV1baXNfcmdiXTsKLSAgICBmZl92a19zaGFkZXJfdXBk YXRlX2Rlc2NfYnVmZmVyKCZjdHgtPnMsIGV4ZWMsIGRlY29kZV9zaGFkZXIsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAxLCAwLCAwLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc2xpY2Vfc3RhdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAwLCBmcC0+c2xpY2VfZGF0YV9zaXplKmYtPnNsaWNlX2NvdW50LAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfRk9STUFUX1VOREVGSU5FRCk7Ci0gICAgZmZf dmtfc2hhZGVyX3VwZGF0ZV9pbWdfYXJyYXkoJmN0eC0+cywgZXhlYywgZGVjb2RlX3NoYWRlciwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNvZGVfZHN0LCBkZWNvZGVfZHN0 X3ZpZXcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgMSwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBWS19JTUFHRV9MQVlPVVRfR0VORVJBTCwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19OVUxMX0hBTkRMRSk7Ci0gICAgZmZfdmtf c2hhZGVyX3VwZGF0ZV9kZXNjX2J1ZmZlcigmY3R4LT5zLCBleGVjLCBkZWNvZGVfc2hhZGVyLAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgMiwgMCwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHNsaWNlX3N0YXR1cywKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDAsIDIqZi0+c2xpY2VfY291bnQqc2l6ZW9mKHVpbnQzMl90KSwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZLX0ZPUk1BVF9VTkRFRklORUQp OwotICAgIGlmIChpc19yZ2IpCi0gICAgICAgIGZmX3ZrX3NoYWRlcl91cGRhdGVfaW1nX2FycmF5 KCZjdHgtPnMsIGV4ZWMsIGRlY29kZV9zaGFkZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGYtPnBpY3R1cmUuZiwgdnAtPnZpZXcub3V0LAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAxLCAzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBWS19JTUFHRV9MQVlPVVRfR0VORVJBTCwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgVktfTlVMTF9IQU5ETEUpOwotCi0gICAgZmZfdmtfZXhlY19iaW5k X3NoYWRlcigmY3R4LT5zLCBleGVjLCBkZWNvZGVfc2hhZGVyKTsKLSAgICBmZl92a19zaGFkZXJf dXBkYXRlX3B1c2hfY29uc3QoJmN0eC0+cywgZXhlYywgZGVjb2RlX3NoYWRlciwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfU0hBREVSX1NUQUdFX0NPTVBVVEVfQklULAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBzaXplb2YocGQpLCAmcGQpOwot Ci0gICAgLyogU3luYyBiZXR3ZWVuIHJlc2V0IGFuZCBkZWNvZGUgc2hhZGVycyAqLwotICAgIGJ1 Zl9iYXJbbmJfYnVmX2JhcisrXSA9IChWa0J1ZmZlck1lbW9yeUJhcnJpZXIyKSB7Ci0gICAgICAg IC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX0JVRkZFUl9NRU1PUllfQkFSUklFUl8yLAotICAg ICAgICAuc3JjU3RhZ2VNYXNrID0gc2xpY2Vfc3RhdGUtPnN0YWdlLAotICAgICAgICAuZHN0U3Rh Z2VNYXNrID0gVktfUElQRUxJTkVfU1RBR0VfMl9DT01QVVRFX1NIQURFUl9CSVQsCi0gICAgICAg IC5zcmNBY2Nlc3NNYXNrID0gc2xpY2Vfc3RhdGUtPmFjY2VzcywKLSAgICAgICAgLmRzdEFjY2Vz c01hc2sgPSBWS19BQ0NFU1NfMl9TSEFERVJfU1RPUkFHRV9SRUFEX0JJVCB8Ci0gICAgICAgICAg ICAgICAgICAgICAgICAgVktfQUNDRVNTXzJfU0hBREVSX1NUT1JBR0VfV1JJVEVfQklULAotICAg ICAgICAuc3JjUXVldWVGYW1pbHlJbmRleCA9IFZLX1FVRVVFX0ZBTUlMWV9JR05PUkVELAotICAg ICAgICAuZHN0UXVldWVGYW1pbHlJbmRleCA9IFZLX1FVRVVFX0ZBTUlMWV9JR05PUkVELAotICAg ICAgICAuYnVmZmVyID0gc2xpY2Vfc3RhdGUtPmJ1ZiwKLSAgICAgICAgLm9mZnNldCA9IGZwLT5z bGljZV9kYXRhX3NpemUqZi0+c2xpY2VfY291bnQsCi0gICAgICAgIC5zaXplID0gZi0+c2xpY2Vf Y291bnQqKGZwLT5zbGljZV9zdGF0ZV9zaXplIC0gZnAtPnNsaWNlX2RhdGFfc2l6ZSksCi0gICAg fTsKLQotICAgIC8qIElucHV0IGZyYW1lIGJhcnJpZXIgKi8KLSAgICBmZl92a19mcmFtZV9iYXJy aWVyKCZjdHgtPnMsIGV4ZWMsIGYtPnBpY3R1cmUuZiwgaW1nX2JhciwgJm5iX2ltZ19iYXIsCi0g ICAgICAgICAgICAgICAgICAgICAgICBWS19QSVBFTElORV9TVEFHRV8yX0FMTF9DT01NQU5EU19C SVQsCi0gICAgICAgICAgICAgICAgICAgICAgICBWS19QSVBFTElORV9TVEFHRV8yX0NPTVBVVEVf U0hBREVSX0JJVCwKLSAgICAgICAgICAgICAgICAgICAgICAgIFZLX0FDQ0VTU19TSEFERVJfV1JJ VEVfQklUIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICghaXNfcmdiID8gVktfQUNDRVNTX1NI QURFUl9SRUFEX0JJVCA6IDApLAotICAgICAgICAgICAgICAgICAgICAgICAgVktfSU1BR0VfTEFZ T1VUX0dFTkVSQUwsCi0gICAgICAgICAgICAgICAgICAgICAgICBWS19RVUVVRV9GQU1JTFlfSUdO T1JFRCk7Ci0gICAgaWYgKGlzX3JnYikKLSAgICAgICAgZmZfdmtfZnJhbWVfYmFycmllcigmY3R4 LT5zLCBleGVjLCB2cC0+ZHBiX2ZyYW1lLCBpbWdfYmFyLCAmbmJfaW1nX2JhciwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICBWS19QSVBFTElORV9TVEFHRV8yX0FMTF9DT01NQU5EU19CSVQs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfUElQRUxJTkVfU1RBR0VfMl9DT01QVVRF X1NIQURFUl9CSVQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfQUNDRVNTX1NIQURF Ul9SRUFEX0JJVCB8IFZLX0FDQ0VTU19TSEFERVJfV1JJVEVfQklULAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFZLX0lNQUdFX0xBWU9VVF9HRU5FUkFMLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFZLX1FVRVVFX0ZBTUlMWV9JR05PUkVEKTsKLQotICAgIHZrLT5DbWRQaXBlbGlu ZUJhcnJpZXIyKGV4ZWMtPmJ1ZiwgJihWa0RlcGVuZGVuY3lJbmZvKSB7Ci0gICAgICAgIC5zVHlw ZSA9IFZLX1NUUlVDVFVSRV9UWVBFX0RFUEVOREVOQ1lfSU5GTywKLSAgICAgICAgLnBJbWFnZU1l bW9yeUJhcnJpZXJzID0gaW1nX2JhciwKLSAgICAgICAgLmltYWdlTWVtb3J5QmFycmllckNvdW50 ID0gbmJfaW1nX2JhciwKLSAgICAgICAgLnBCdWZmZXJNZW1vcnlCYXJyaWVycyA9IGJ1Zl9iYXIs Ci0gICAgICAgIC5idWZmZXJNZW1vcnlCYXJyaWVyQ291bnQgPSBuYl9idWZfYmFyLAotICAgIH0p OwotICAgIHNsaWNlX3N0YXRlLT5zdGFnZSA9IGJ1Zl9iYXJbMF0uZHN0U3RhZ2VNYXNrOwotICAg IHNsaWNlX3N0YXRlLT5hY2Nlc3MgPSBidWZfYmFyWzBdLmRzdEFjY2Vzc01hc2s7Ci0gICAgbmJf aW1nX2JhciA9IDA7Ci0gICAgbmJfYnVmX2JhciA9IDA7Ci0KLSAgICB2ay0+Q21kRGlzcGF0Y2go ZXhlYy0+YnVmLCBmLT5udW1faF9zbGljZXMsIGYtPm51bV92X3NsaWNlcywgMSk7Ci0KLSAgICBl cnIgPSBmZl92a19leGVjX3N1Ym1pdCgmY3R4LT5zLCBleGVjKTsKLSAgICBpZiAoZXJyIDwgMCkK LSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIC8qIFdlIGRvbid0IG5lZWQgdGhlIHRlbXBvcmFy eSBmcmFtZSBhZnRlciBkZWNvZGluZyAqLwotICAgIGF2X2ZyYW1lX2ZyZWUoJnZwLT5kcGJfZnJh bWUpOwotCi1mYWlsOgotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBkZWZpbmVfc2hh cmVkX2NvZGUoRkZWdWxrYW5TaGFkZXIgKnNoZCwgaW50IHVzZTMyYml0KQotewotICAgIGludCBz bXBfYml0cyA9IHVzZTMyYml0ID8gMzIgOiAxNjsKLQotICAgIEdMU0xDKDAsICNkZWZpbmUgREVD T0RFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0KLSAg ICBhdl9icHJpbnRmKCZzaGQtPnNyYywgIiNkZWZpbmUgUkdCX0xJTkVDQUNIRSAlaVxuIiAgICAg ICAgICAgICAgICAgICAsUkdCX0xJTkVDQUNIRSk7Ci0gICAgYXZfYnByaW50Zigmc2hkLT5zcmMs ICIjZGVmaW5lIENPTlRFWFRfU0laRSAlaVxuIiAgICAgICAgICAgICAgICAgICAgLENPTlRFWFRf U0laRSk7Ci0gICAgYXZfYnByaW50Zigmc2hkLT5zcmMsICIjZGVmaW5lIE1BWF9RVUFOVF9UQUJM RV9NQVNLIDB4JXhcbiIgICAgICAgICAgLE1BWF9RVUFOVF9UQUJMRV9NQVNLKTsKLQotICAgIEdM U0xGKDAsICNkZWZpbmUgVFlQRSBpbnQlaV90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICxzbXBfYml0cyk7Ci0gICAgR0xTTEYoMCwgI2RlZmluZSBWVFlQRTIgaSVpdmVj MiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLHNtcF9iaXRzKTsKLSAgICBH TFNMRigwLCAjZGVmaW5lIFZUWVBFMyBpJWl2ZWMzICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAsc21wX2JpdHMpOwotICAgIEdMU0xEKGZmX3NvdXJjZV9yYW5nZWNvZGVyX2Nv bXApOwotICAgIEdMU0xEKGZmX3NvdXJjZV9mZnYxX2NvbW1vbl9jb21wKTsKLX0KLQotc3RhdGlj IGludCBpbml0X3NldHVwX3NoYWRlcihGRlYxQ29udGV4dCAqZiwgRkZWdWxrYW5Db250ZXh0ICpz LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGRlZrRXhlY1Bvb2wgKnBvb2wsIEZGVmtT UElSVkNvbXBpbGVyICpzcHYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZGVnVsa2Fu U2hhZGVyICpzaGQpCi17Ci0gICAgaW50IGVycjsKLSAgICBGRlZ1bGthbkRlc2NyaXB0b3JTZXRC aW5kaW5nICpkZXNjX3NldDsKLQotICAgIHVpbnQ4X3QgKnNwdl9kYXRhOwotICAgIHNpemVfdCBz cHZfbGVuOwotICAgIHZvaWQgKnNwdl9vcGFxdWUgPSBOVUxMOwotCi0gICAgUkVUKGZmX3ZrX3No YWRlcl9pbml0KHMsIHNoZCwgImZmdjFfZGVjX3NldHVwIiwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgVktfU0hBREVSX1NUQUdFX0NPTVBVVEVfQklULAotICAgICAgICAgICAgICAgICAgICAg ICAgICAoY29uc3QgY2hhciAqW10pIHsgIkdMX0VYVF9idWZmZXJfcmVmZXJlbmNlIiwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJHTF9FWFRfYnVmZmVyX3Jl ZmVyZW5jZTIiIH0sIDIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDEsIDEsIDEsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgIDApKTsKLQotICAgIC8qIENvbW1vbiBjb2RlYyBoZWFkZXIg Ki8KLSAgICBHTFNMRChmZl9zb3VyY2VfY29tbW9uX2NvbXApOwotCi0gICAgYWRkX3B1c2hfZGF0 YShzaGQpOwotCi0gICAgYXZfYnByaW50Zigmc2hkLT5zcmMsICIjZGVmaW5lIE1BWF9RVUFOVF9U QUJMRVMgJWlcbiIsIE1BWF9RVUFOVF9UQUJMRVMpOwotICAgIGF2X2JwcmludGYoJnNoZC0+c3Jj LCAiI2RlZmluZSBNQVhfQ09OVEVYVF9JTlBVVFMgJWlcbiIsIE1BWF9DT05URVhUX0lOUFVUUyk7 Ci0gICAgYXZfYnByaW50Zigmc2hkLT5zcmMsICIjZGVmaW5lIE1BWF9RVUFOVF9UQUJMRV9TSVpF ICVpXG4iLCBNQVhfUVVBTlRfVEFCTEVfU0laRSk7Ci0KLSAgICBkZXNjX3NldCA9IChGRlZ1bGth bkRlc2NyaXB0b3JTZXRCaW5kaW5nIFtdKSB7Ci0gICAgICAgIHsKLSAgICAgICAgICAgIC5uYW1l ICAgICAgICA9ICJyYW5nZWNvZGVyX3N0YXRpY19idWYiLAotICAgICAgICAgICAgLnR5cGUgICAg ICAgID0gVktfREVTQ1JJUFRPUl9UWVBFX1VOSUZPUk1fQlVGRkVSLAotICAgICAgICAgICAgLnN0 YWdlcyAgICAgID0gVktfU0hBREVSX1NUQUdFX0NPTVBVVEVfQklULAotICAgICAgICAgICAgLm1l bV9sYXlvdXQgID0gInNjYWxhciIsCi0gICAgICAgICAgICAuYnVmX2NvbnRlbnQgPSAidWludDhf dCB6ZXJvX29uZV9zdGF0ZVs1MTJdOyIsCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAg ICAgIC5uYW1lICAgICAgICA9ICJjcmNfaWVlZV9idWYiLAotICAgICAgICAgICAgLnR5cGUgICAg ICAgID0gVktfREVTQ1JJUFRPUl9UWVBFX1VOSUZPUk1fQlVGRkVSLAotICAgICAgICAgICAgLnN0 YWdlcyAgICAgID0gVktfU0hBREVSX1NUQUdFX0NPTVBVVEVfQklULAotICAgICAgICAgICAgLm1l bV9sYXlvdXQgID0gInNjYWxhciIsCi0gICAgICAgICAgICAuYnVmX2NvbnRlbnQgPSAidWludDMy X3QgY3JjX2llZWVbMjU2XTsiLAotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAu bmFtZSAgICAgICAgPSAicXVhbnRfYnVmIiwKLSAgICAgICAgICAgIC50eXBlICAgICAgICA9IFZL X0RFU0NSSVBUT1JfVFlQRV9VTklGT1JNX0JVRkZFUiwKLSAgICAgICAgICAgIC5zdGFnZXMgICAg ICA9IFZLX1NIQURFUl9TVEFHRV9DT01QVVRFX0JJVCwKLSAgICAgICAgICAgIC5tZW1fbGF5b3V0 ICA9ICJzY2FsYXIiLAotICAgICAgICAgICAgLmJ1Zl9jb250ZW50ID0gImludDE2X3QgcXVhbnRf dGFibGVbTUFYX1FVQU5UX1RBQkxFU10iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAiW01B WF9DT05URVhUX0lOUFVUU11bTUFYX1FVQU5UX1RBQkxFX1NJWkVdOyIsCi0gICAgICAgIH0sCi0g ICAgfTsKLQotICAgIFJFVChmZl92a19zaGFkZXJfYWRkX2Rlc2NyaXB0b3Jfc2V0KHMsIHNoZCwg ZGVzY19zZXQsIDMsIDEsIDApKTsKLQotICAgIGRlZmluZV9zaGFyZWRfY29kZShzaGQsIDAgLyog SXJyZWxldmFudCAqLyk7Ci0KLSAgICBkZXNjX3NldCA9IChGRlZ1bGthbkRlc2NyaXB0b3JTZXRC aW5kaW5nIFtdKSB7Ci0gICAgICAgIHsKLSAgICAgICAgICAgIC5uYW1lICAgICAgICA9ICJzbGlj ZV9kYXRhX2J1ZiIsCi0gICAgICAgICAgICAudHlwZSAgICAgICAgPSBWS19ERVNDUklQVE9SX1RZ UEVfU1RPUkFHRV9CVUZGRVIsCi0gICAgICAgICAgICAuc3RhZ2VzICAgICAgPSBWS19TSEFERVJf U1RBR0VfQ09NUFVURV9CSVQsCi0gICAgICAgICAgICAuYnVmX2NvbnRlbnQgPSAiU2xpY2VDb250 ZXh0IHNsaWNlX2N0eCIsCi0gICAgICAgICAgICAuYnVmX2VsZW1zICAgPSBmLT5tYXhfc2xpY2Vf Y291bnQsCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgIC5uYW1lICAgICAgICA9 ICJzbGljZV9vZmZzZXRzX2J1ZiIsCi0gICAgICAgICAgICAudHlwZSAgICAgICAgPSBWS19ERVND UklQVE9SX1RZUEVfU1RPUkFHRV9CVUZGRVIsCi0gICAgICAgICAgICAuc3RhZ2VzICAgICAgPSBW S19TSEFERVJfU1RBR0VfQ09NUFVURV9CSVQsCi0gICAgICAgICAgICAubWVtX3F1YWxpICAgPSAi cmVhZG9ubHkiLAotICAgICAgICAgICAgLmJ1Zl9jb250ZW50ID0gInVpbnQzMl90IHNsaWNlX29m ZnNldHMiLAotICAgICAgICAgICAgLmJ1Zl9lbGVtcyAgID0gMipmLT5tYXhfc2xpY2VfY291bnQs Ci0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgIC5uYW1lICAgICAgICA9ICJzbGlj ZV9zdGF0dXNfYnVmIiwKLSAgICAgICAgICAgIC50eXBlICAgICAgICA9IFZLX0RFU0NSSVBUT1Jf VFlQRV9TVE9SQUdFX0JVRkZFUiwKLSAgICAgICAgICAgIC5zdGFnZXMgICAgICA9IFZLX1NIQURF Ul9TVEFHRV9DT01QVVRFX0JJVCwKLSAgICAgICAgICAgIC5tZW1fcXVhbGkgICA9ICJ3cml0ZW9u bHkiLAotICAgICAgICAgICAgLmJ1Zl9jb250ZW50ID0gInVpbnQzMl90IHNsaWNlX3N0YXR1cyIs Ci0gICAgICAgICAgICAuYnVmX2VsZW1zICAgPSAyKmYtPm1heF9zbGljZV9jb3VudCwKLSAgICAg ICAgfSwKLSAgICB9OwotICAgIFJFVChmZl92a19zaGFkZXJfYWRkX2Rlc2NyaXB0b3Jfc2V0KHMs IHNoZCwgZGVzY19zZXQsIDMsIDAsIDApKTsKLQotICAgIEdMU0xEKGZmX3NvdXJjZV9mZnYxX2Rl Y19zZXR1cF9jb21wKTsKLQotICAgIFJFVChzcHYtPmNvbXBpbGVfc2hhZGVyKHMsIHNwdiwgc2hk LCAmc3B2X2RhdGEsICZzcHZfbGVuLCAibWFpbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgJnNwdl9vcGFxdWUpKTsKLSAgICBSRVQoZmZfdmtfc2hhZGVyX2xpbmsocywgc2hkLCBzcHZf ZGF0YSwgc3B2X2xlbiwgIm1haW4iKSk7Ci0KLSAgICBSRVQoZmZfdmtfc2hhZGVyX3JlZ2lzdGVy X2V4ZWMocywgcG9vbCwgc2hkKSk7Ci0KLWZhaWw6Ci0gICAgaWYgKHNwdl9vcGFxdWUpCi0gICAg ICAgIHNwdi0+ZnJlZV9zaGFkZXIoc3B2LCAmc3B2X29wYXF1ZSk7Ci0KLSAgICByZXR1cm4gZXJy OwotfQotCi1zdGF0aWMgaW50IGluaXRfcmVzZXRfc2hhZGVyKEZGVjFDb250ZXh0ICpmLCBGRlZ1 bGthbkNvbnRleHQgKnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZGVmtFeGVjUG9v bCAqcG9vbCwgRkZWa1NQSVJWQ29tcGlsZXIgKnNwdiwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgRkZWdWxrYW5TaGFkZXIgKnNoZCwgaW50IGFjKQotewotICAgIGludCBlcnI7Ci0gICAg RkZWdWxrYW5EZXNjcmlwdG9yU2V0QmluZGluZyAqZGVzY19zZXQ7Ci0KLSAgICB1aW50OF90ICpz cHZfZGF0YTsKLSAgICBzaXplX3Qgc3B2X2xlbjsKLSAgICB2b2lkICpzcHZfb3BhcXVlID0gTlVM TDsKLSAgICBpbnQgd2dfZGltID0gRkZNSU4ocy0+cHJvcHMucHJvcGVydGllcy5saW1pdHMubWF4 Q29tcHV0ZVdvcmtHcm91cFNpemVbMF0sIDEwMjQpOwotCi0gICAgUkVUKGZmX3ZrX3NoYWRlcl9p bml0KHMsIHNoZCwgImZmdjFfZGVjX3Jlc2V0IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg VktfU0hBREVSX1NUQUdFX0NPTVBVVEVfQklULAotICAgICAgICAgICAgICAgICAgICAgICAgICAo Y29uc3QgY2hhciAqW10pIHsgIkdMX0VYVF9idWZmZXJfcmVmZXJlbmNlIiwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJHTF9FWFRfYnVmZmVyX3JlZmVyZW5j ZTIiIH0sIDIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHdnX2RpbSwgMSwgMSwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgMCkpOwotCi0gICAgaWYgKGFjID09IEFDX0dPTE9NQl9SSUNF KQotICAgICAgICBhdl9icHJpbnRmKCZzaGQtPnNyYywgIiNkZWZpbmUgR09MT01CXG4iKTsKLQot ICAgIC8qIENvbW1vbiBjb2RlYyBoZWFkZXIgKi8KLSAgICBHTFNMRChmZl9zb3VyY2VfY29tbW9u X2NvbXApOwotCi0gICAgR0xTTEMoMCwgbGF5b3V0KHB1c2hfY29uc3RhbnQsIHNjYWxhcikgdW5p Zm9ybSBwdXNoQ29uc3RhbnRzIHsgICAgICAgICAgICAgKTsKLSAgICBHTFNMRigxLCAgICB1aW50 IGNvbnRleHRfY291bnRbJWldOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAsTUFYX1FVQU5UX1RBQkxFUyk7Ci0gICAgR0xTTEMoMSwgICAgdThidWYgc2xpY2Vfc3RhdGU7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBHTFNM QygxLCAgICB1aW50IHBsYW5lX3N0YXRlX3NpemU7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICApOwotICAgIEdMU0xDKDEsICAgIHVpbnQ4X3QgY29kZWNfcGxhbmVzOyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAgR0xTTEMoMSwg ICAgdWludDhfdCBrZXlfZnJhbWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKTsKLSAgICBHTFNMQygxLCAgICB1aW50OF90IHZlcnNpb247ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIEdMU0xDKDEsICAgIHVp bnQ4X3QgbWljcm9fdmVyc2lvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICk7Ci0gICAgR0xTTEMoMSwgICAgdWludDhfdCBwYWRkaW5nWzFdOyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBHTFNMQygwLCB9OyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAp OwotICAgIGZmX3ZrX3NoYWRlcl9hZGRfcHVzaF9jb25zdChzaGQsIDAsIHNpemVvZihGRnYxVmtS ZXNldFBhcmFtZXRlcnMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19TSEFE RVJfU1RBR0VfQ09NUFVURV9CSVQpOwotCi0gICAgYXZfYnByaW50Zigmc2hkLT5zcmMsICIjZGVm aW5lIE1BWF9RVUFOVF9UQUJMRVMgJWlcbiIsIE1BWF9RVUFOVF9UQUJMRVMpOwotICAgIGF2X2Jw cmludGYoJnNoZC0+c3JjLCAiI2RlZmluZSBNQVhfQ09OVEVYVF9JTlBVVFMgJWlcbiIsIE1BWF9D T05URVhUX0lOUFVUUyk7Ci0gICAgYXZfYnByaW50Zigmc2hkLT5zcmMsICIjZGVmaW5lIE1BWF9R VUFOVF9UQUJMRV9TSVpFICVpXG4iLCBNQVhfUVVBTlRfVEFCTEVfU0laRSk7Ci0KLSAgICBkZXNj X3NldCA9IChGRlZ1bGthbkRlc2NyaXB0b3JTZXRCaW5kaW5nIFtdKSB7Ci0gICAgICAgIHsKLSAg ICAgICAgICAgIC5uYW1lICAgICAgICA9ICJyYW5nZWNvZGVyX3N0YXRpY19idWYiLAotICAgICAg ICAgICAgLnR5cGUgICAgICAgID0gVktfREVTQ1JJUFRPUl9UWVBFX1VOSUZPUk1fQlVGRkVSLAot ICAgICAgICAgICAgLnN0YWdlcyAgICAgID0gVktfU0hBREVSX1NUQUdFX0NPTVBVVEVfQklULAot ICAgICAgICAgICAgLm1lbV9sYXlvdXQgID0gInNjYWxhciIsCi0gICAgICAgICAgICAuYnVmX2Nv bnRlbnQgPSAidWludDhfdCB6ZXJvX29uZV9zdGF0ZVs1MTJdOyIsCi0gICAgICAgIH0sCi0gICAg ICAgIHsKLSAgICAgICAgICAgIC5uYW1lICAgICAgICA9ICJxdWFudF9idWYiLAotICAgICAgICAg ICAgLnR5cGUgICAgICAgID0gVktfREVTQ1JJUFRPUl9UWVBFX1VOSUZPUk1fQlVGRkVSLAotICAg ICAgICAgICAgLnN0YWdlcyAgICAgID0gVktfU0hBREVSX1NUQUdFX0NPTVBVVEVfQklULAotICAg ICAgICAgICAgLm1lbV9sYXlvdXQgID0gInNjYWxhciIsCi0gICAgICAgICAgICAuYnVmX2NvbnRl bnQgPSAiaW50MTZfdCBxdWFudF90YWJsZVtNQVhfUVVBTlRfVEFCTEVTXSIKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICJbTUFYX0NPTlRFWFRfSU5QVVRTXVtNQVhfUVVBTlRfVEFCTEVfU0la RV07IiwKLSAgICAgICAgfSwKLSAgICB9OwotICAgIFJFVChmZl92a19zaGFkZXJfYWRkX2Rlc2Ny aXB0b3Jfc2V0KHMsIHNoZCwgZGVzY19zZXQsIDIsIDEsIDApKTsKLQotICAgIGRlZmluZV9zaGFy ZWRfY29kZShzaGQsIDAgLyogQml0IGRlcHRoIGlycmVsZXZhbnQgZm9yIHRoZSByZXNldCBzaGFk ZXIgKi8pOwotICAgIGlmIChhYyA9PSBBQ19HT0xPTUJfUklDRSkKLSAgICAgICAgR0xTTEQoZmZf c291cmNlX2ZmdjFfdmxjX2NvbXApOwotCi0gICAgZGVzY19zZXQgPSAoRkZWdWxrYW5EZXNjcmlw dG9yU2V0QmluZGluZyBbXSkgewotICAgICAgICB7Ci0gICAgICAgICAgICAubmFtZSAgICAgICAg PSAic2xpY2VfZGF0YV9idWYiLAotICAgICAgICAgICAgLnR5cGUgICAgICAgID0gVktfREVTQ1JJ UFRPUl9UWVBFX1NUT1JBR0VfQlVGRkVSLAotICAgICAgICAgICAgLm1lbV9xdWFsaSAgID0gInJl YWRvbmx5IiwKLSAgICAgICAgICAgIC5zdGFnZXMgICAgICA9IFZLX1NIQURFUl9TVEFHRV9DT01Q VVRFX0JJVCwKLSAgICAgICAgICAgIC5idWZfY29udGVudCA9ICJTbGljZUNvbnRleHQgc2xpY2Vf Y3R4IiwKLSAgICAgICAgICAgIC5idWZfZWxlbXMgICA9IGYtPm1heF9zbGljZV9jb3VudCwKLSAg ICAgICAgfSwKLSAgICB9OwotICAgIFJFVChmZl92a19zaGFkZXJfYWRkX2Rlc2NyaXB0b3Jfc2V0 KHMsIHNoZCwgZGVzY19zZXQsIDEsIDAsIDApKTsKLQotICAgIEdMU0xEKGZmX3NvdXJjZV9mZnYx X3Jlc2V0X2NvbXApOwotCi0gICAgUkVUKHNwdi0+Y29tcGlsZV9zaGFkZXIocywgc3B2LCBzaGQs ICZzcHZfZGF0YSwgJnNwdl9sZW4sICJtYWluIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAmc3B2X29wYXF1ZSkpOwotICAgIFJFVChmZl92a19zaGFkZXJfbGluayhzLCBzaGQsIHNwdl9k YXRhLCBzcHZfbGVuLCAibWFpbiIpKTsKLQotICAgIFJFVChmZl92a19zaGFkZXJfcmVnaXN0ZXJf ZXhlYyhzLCBwb29sLCBzaGQpKTsKLQotZmFpbDoKLSAgICBpZiAoc3B2X29wYXF1ZSkKLSAgICAg ICAgc3B2LT5mcmVlX3NoYWRlcihzcHYsICZzcHZfb3BhcXVlKTsKLQotICAgIHJldHVybiBlcnI7 Ci19Ci0KLXN0YXRpYyBpbnQgaW5pdF9kZWNvZGVfc2hhZGVyKEZGVjFDb250ZXh0ICpmLCBGRlZ1 bGthbkNvbnRleHQgKnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGRlZrRXhlY1Bv b2wgKnBvb2wsIEZGVmtTUElSVkNvbXBpbGVyICpzcHYsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBGRlZ1bGthblNoYWRlciAqc2hkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgQVZIV0ZyYW1lc0NvbnRleHQgKmRlY19mcmFtZXNfY3R4LAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgQVZIV0ZyYW1lc0NvbnRleHQgKm91dF9mcmFtZXNfY3R4LAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaW50IHVzZTMyYml0LCBpbnQgYWMsIGludCByZ2IpCi17Ci0g ICAgaW50IGVycjsKLSAgICBGRlZ1bGthbkRlc2NyaXB0b3JTZXRCaW5kaW5nICpkZXNjX3NldDsK LQotICAgIHVpbnQ4X3QgKnNwdl9kYXRhOwotICAgIHNpemVfdCBzcHZfbGVuOwotICAgIHZvaWQg KnNwdl9vcGFxdWUgPSBOVUxMOwotICAgIGludCB1c2VfY2FjaGVkX3JlYWRlciA9IGFjICE9IEFD X0dPTE9NQl9SSUNFICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcy0+ZHJpdmVyX3By b3BzLmRyaXZlcklEID09IFZLX0RSSVZFUl9JRF9NRVNBX1JBRFY7Ci0KLSAgICBSRVQoZmZfdmtf c2hhZGVyX2luaXQocywgc2hkLCAiZmZ2MV9kZWMiLAotICAgICAgICAgICAgICAgICAgICAgICAg ICBWS19TSEFERVJfU1RBR0VfQ09NUFVURV9CSVQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg IChjb25zdCBjaGFyICpbXSkgeyAiR0xfRVhUX2J1ZmZlcl9yZWZlcmVuY2UiLAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkdMX0VYVF9idWZmZXJfcmVmZXJl bmNlMiIgfSwgMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlX2NhY2hlZF9yZWFkZXIg PyBDT05URVhUX1NJWkUgOiAxLCAxLCAxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAwKSk7 Ci0KLSAgICBpZiAoYWMgPT0gQUNfR09MT01CX1JJQ0UpCi0gICAgICAgIGF2X2JwcmludGYoJnNo ZC0+c3JjLCAiI2RlZmluZSBHT0xPTUJcbiIpOwotCi0gICAgaWYgKHJnYikKLSAgICAgICAgYXZf YnByaW50Zigmc2hkLT5zcmMsICIjZGVmaW5lIFJHQlxuIik7Ci0KLSAgICBpZiAodXNlX2NhY2hl ZF9yZWFkZXIpCi0gICAgICAgIGF2X2JwcmludGYoJnNoZC0+c3JjLCAiI2RlZmluZSBDQUNIRURf U1lNQk9MX1JFQURFUiAxXG4iKTsKLQotICAgIC8qIENvbW1vbiBjb2RlYyBoZWFkZXIgKi8KLSAg ICBHTFNMRChmZl9zb3VyY2VfY29tbW9uX2NvbXApOwotCi0gICAgYWRkX3B1c2hfZGF0YShzaGQp OwotCi0gICAgYXZfYnByaW50Zigmc2hkLT5zcmMsICIjZGVmaW5lIE1BWF9RVUFOVF9UQUJMRVMg JWlcbiIsIE1BWF9RVUFOVF9UQUJMRVMpOwotICAgIGF2X2JwcmludGYoJnNoZC0+c3JjLCAiI2Rl ZmluZSBNQVhfQ09OVEVYVF9JTlBVVFMgJWlcbiIsIE1BWF9DT05URVhUX0lOUFVUUyk7Ci0gICAg YXZfYnByaW50Zigmc2hkLT5zcmMsICIjZGVmaW5lIE1BWF9RVUFOVF9UQUJMRV9TSVpFICVpXG4i LCBNQVhfUVVBTlRfVEFCTEVfU0laRSk7Ci0KLSAgICBkZXNjX3NldCA9IChGRlZ1bGthbkRlc2Ny aXB0b3JTZXRCaW5kaW5nIFtdKSB7Ci0gICAgICAgIHsKLSAgICAgICAgICAgIC5uYW1lICAgICAg ICA9ICJyYW5nZWNvZGVyX3N0YXRpY19idWYiLAotICAgICAgICAgICAgLnR5cGUgICAgICAgID0g VktfREVTQ1JJUFRPUl9UWVBFX1VOSUZPUk1fQlVGRkVSLAotICAgICAgICAgICAgLnN0YWdlcyAg ICAgID0gVktfU0hBREVSX1NUQUdFX0NPTVBVVEVfQklULAotICAgICAgICAgICAgLm1lbV9sYXlv dXQgID0gInNjYWxhciIsCi0gICAgICAgICAgICAuYnVmX2NvbnRlbnQgPSAidWludDhfdCB6ZXJv X29uZV9zdGF0ZVs1MTJdOyIsCi0gICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgIC5u YW1lICAgICAgICA9ICJxdWFudF9idWYiLAotICAgICAgICAgICAgLnR5cGUgICAgICAgID0gVktf REVTQ1JJUFRPUl9UWVBFX1VOSUZPUk1fQlVGRkVSLAotICAgICAgICAgICAgLnN0YWdlcyAgICAg ID0gVktfU0hBREVSX1NUQUdFX0NPTVBVVEVfQklULAotICAgICAgICAgICAgLm1lbV9sYXlvdXQg ID0gInNjYWxhciIsCi0gICAgICAgICAgICAuYnVmX2NvbnRlbnQgPSAiaW50MTZfdCBxdWFudF90 YWJsZVtNQVhfUVVBTlRfVEFCTEVTXSIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJbTUFY X0NPTlRFWFRfSU5QVVRTXVtNQVhfUVVBTlRfVEFCTEVfU0laRV07IiwKLSAgICAgICAgfSwKLSAg ICB9OwotCi0gICAgUkVUKGZmX3ZrX3NoYWRlcl9hZGRfZGVzY3JpcHRvcl9zZXQocywgc2hkLCBk ZXNjX3NldCwgMiwgMSwgMCkpOwotCi0gICAgZGVmaW5lX3NoYXJlZF9jb2RlKHNoZCwgdXNlMzJi aXQpOwotICAgIGlmIChhYyA9PSBBQ19HT0xPTUJfUklDRSkKLSAgICAgICAgR0xTTEQoZmZfc291 cmNlX2ZmdjFfdmxjX2NvbXApOwotCi0gICAgZGVzY19zZXQgPSAoRkZWdWxrYW5EZXNjcmlwdG9y U2V0QmluZGluZyBbXSkgewotICAgICAgICB7Ci0gICAgICAgICAgICAubmFtZSAgICAgICAgPSAi c2xpY2VfZGF0YV9idWYiLAotICAgICAgICAgICAgLnR5cGUgICAgICAgID0gVktfREVTQ1JJUFRP Ul9UWVBFX1NUT1JBR0VfQlVGRkVSLAotICAgICAgICAgICAgLnN0YWdlcyAgICAgID0gVktfU0hB REVSX1NUQUdFX0NPTVBVVEVfQklULAotICAgICAgICAgICAgLmJ1Zl9jb250ZW50ID0gIlNsaWNl Q29udGV4dCBzbGljZV9jdHgiLAotICAgICAgICAgICAgLmJ1Zl9lbGVtcyAgID0gZi0+bWF4X3Ns aWNlX2NvdW50LAotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAubmFtZSAgICAg ICA9ICJkZWMiLAotICAgICAgICAgICAgLnR5cGUgICAgICAgPSBWS19ERVNDUklQVE9SX1RZUEVf U1RPUkFHRV9JTUFHRSwKLSAgICAgICAgICAgIC5kaW1lbnNpb25zID0gMiwKLSAgICAgICAgICAg IC5tZW1fbGF5b3V0ID0gZmZfdmtfc2hhZGVyX3JlcF9mbXQoZGVjX2ZyYW1lc19jdHgtPnN3X2Zv cm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkZf VktfUkVQX05BVElWRSksCi0gICAgICAgICAgICAuZWxlbXMgICAgICA9IGF2X3BpeF9mbXRfY291 bnRfcGxhbmVzKGRlY19mcmFtZXNfY3R4LT5zd19mb3JtYXQpLAotICAgICAgICAgICAgLnN0YWdl cyAgICAgPSBWS19TSEFERVJfU1RBR0VfQ09NUFVURV9CSVQsCi0gICAgICAgIH0sCi0gICAgICAg IHsKLSAgICAgICAgICAgIC5uYW1lICAgICAgICA9ICJzbGljZV9zdGF0dXNfYnVmIiwKLSAgICAg ICAgICAgIC50eXBlICAgICAgICA9IFZLX0RFU0NSSVBUT1JfVFlQRV9TVE9SQUdFX0JVRkZFUiwK LSAgICAgICAgICAgIC5zdGFnZXMgICAgICA9IFZLX1NIQURFUl9TVEFHRV9DT01QVVRFX0JJVCwK LSAgICAgICAgICAgIC5tZW1fcXVhbGkgICA9ICJ3cml0ZW9ubHkiLAotICAgICAgICAgICAgLmJ1 Zl9jb250ZW50ID0gInVpbnQzMl90IHNsaWNlX3N0YXR1cyIsCi0gICAgICAgICAgICAuYnVmX2Vs ZW1zICAgPSAyKmYtPm1heF9zbGljZV9jb3VudCwKLSAgICAgICAgfSwKLSAgICAgICAgewotICAg ICAgICAgICAgLm5hbWUgICAgICAgPSAiZHN0IiwKLSAgICAgICAgICAgIC50eXBlICAgICAgID0g VktfREVTQ1JJUFRPUl9UWVBFX1NUT1JBR0VfSU1BR0UsCi0gICAgICAgICAgICAuZGltZW5zaW9u cyA9IDIsCi0gICAgICAgICAgICAubWVtX2xheW91dCA9IGZmX3ZrX3NoYWRlcl9yZXBfZm10KG91 dF9mcmFtZXNfY3R4LT5zd19mb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEZGX1ZLX1JFUF9OQVRJVkUpLAotICAgICAgICAgICAgLm1lbV9xdWFs aSAgPSAid3JpdGVvbmx5IiwKLSAgICAgICAgICAgIC5lbGVtcyAgICAgID0gYXZfcGl4X2ZtdF9j b3VudF9wbGFuZXMob3V0X2ZyYW1lc19jdHgtPnN3X2Zvcm1hdCksCi0gICAgICAgICAgICAuc3Rh Z2VzICAgICA9IFZLX1NIQURFUl9TVEFHRV9DT01QVVRFX0JJVCwKLSAgICAgICAgfSwKLSAgICB9 OwotICAgIFJFVChmZl92a19zaGFkZXJfYWRkX2Rlc2NyaXB0b3Jfc2V0KHMsIHNoZCwgZGVzY19z ZXQsIDMgKyByZ2IsIDAsIDApKTsKLQotICAgIEdMU0xEKGZmX3NvdXJjZV9mZnYxX2RlY19jb21w KTsKLQotICAgIFJFVChzcHYtPmNvbXBpbGVfc2hhZGVyKHMsIHNwdiwgc2hkLCAmc3B2X2RhdGEs ICZzcHZfbGVuLCAibWFpbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNwdl9vcGFx dWUpKTsKLSAgICBSRVQoZmZfdmtfc2hhZGVyX2xpbmsocywgc2hkLCBzcHZfZGF0YSwgc3B2X2xl biwgIm1haW4iKSk7Ci0KLSAgICBSRVQoZmZfdmtfc2hhZGVyX3JlZ2lzdGVyX2V4ZWMocywgcG9v bCwgc2hkKSk7Ci0KLWZhaWw6Ci0gICAgaWYgKHNwdl9vcGFxdWUpCi0gICAgICAgIHNwdi0+ZnJl ZV9zaGFkZXIoc3B2LCAmc3B2X29wYXF1ZSk7Ci0KLSAgICByZXR1cm4gZXJyOwotfQotCi1zdGF0 aWMgaW50IGluaXRfaW5kaXJlY3QoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LCBGRlZ1bGthbkNvbnRl eHQgKnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgQVZCdWZmZXJSZWYgKipkc3QsIGVudW0g QVZQaXhlbEZvcm1hdCBzd19mb3JtYXQpCi17Ci0gICAgaW50IGVycjsKLSAgICBBVkhXRnJhbWVz Q29udGV4dCAqZnJhbWVzX2N0eDsKLSAgICBBVlZ1bGthbkZyYW1lc0NvbnRleHQgKnZrX2ZyYW1l czsKLSAgICBGRlYxQ29udGV4dCAqZiA9IGF2Y3R4LT5wcml2X2RhdGE7Ci0KLSAgICAqZHN0ID0g YXZfaHdmcmFtZV9jdHhfYWxsb2Mocy0+ZGV2aWNlX3JlZik7Ci0gICAgaWYgKCEoKmRzdCkpCi0g ICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7Ci0KLSAgICBmcmFtZXNfY3R4ID0gKEFWSFdG cmFtZXNDb250ZXh0ICopKCgqZHN0KS0+ZGF0YSk7Ci0gICAgZnJhbWVzX2N0eC0+Zm9ybWF0ICAg ID0gQVZfUElYX0ZNVF9WVUxLQU47Ci0gICAgZnJhbWVzX2N0eC0+c3dfZm9ybWF0ID0gc3dfZm9y bWF0OwotICAgIGZyYW1lc19jdHgtPndpZHRoICAgICA9IHMtPmZyYW1lcy0+d2lkdGg7Ci0gICAg ZnJhbWVzX2N0eC0+aGVpZ2h0ICAgID0gZi0+bnVtX3Zfc2xpY2VzKlJHQl9MSU5FQ0FDSEU7Ci0K LSAgICB2a19mcmFtZXMgPSBmcmFtZXNfY3R4LT5od2N0eDsKLSAgICB2a19mcmFtZXMtPnRpbGlu ZyAgICA9IFZLX0lNQUdFX1RJTElOR19PUFRJTUFMOwotICAgIHZrX2ZyYW1lcy0+aW1nX2ZsYWdz ID0gVktfSU1BR0VfQ1JFQVRFX01VVEFCTEVfRk9STUFUX0JJVDsKLSAgICB2a19mcmFtZXMtPnVz YWdlICAgICA9IFZLX0lNQUdFX1VTQUdFX1NUT1JBR0VfQklUIHwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgIFZLX0lNQUdFX1VTQUdFX1RSQU5TRkVSX0RTVF9CSVQ7Ci0KLSAgICBlcnIgPSBh dl9od2ZyYW1lX2N0eF9pbml0KCpkc3QpOwotICAgIGlmIChlcnIgPCAwKSB7Ci0gICAgICAgIGF2 X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiVW5hYmxlIHRvIGluaXRpYWxpemUgZnJhbWUgcG9v bCB3aXRoIGZvcm1hdCAlczogJXNcbiIsCi0gICAgICAgICAgICAgICBhdl9nZXRfcGl4X2ZtdF9u YW1lKHN3X2Zvcm1hdCksIGF2X2VycjJzdHIoZXJyKSk7Ci0gICAgICAgIGF2X2J1ZmZlcl91bnJl Zihkc3QpOwotICAgICAgICByZXR1cm4gZXJyOwotICAgIH0KLQotICAgIHJldHVybiAwOwotfQot Ci1zdGF0aWMgdm9pZCB2a19kZWNvZGVfZmZ2MV91bmluaXQoRkZWdWxrYW5EZWNvZGVTaGFyZWQg KmN0eCkKLXsKLSAgICBGRnYxVnVsa2FuRGVjb2RlQ29udGV4dCAqZnYgPSBjdHgtPnNkX2N0eDsK LQotICAgIGZmX3ZrX3NoYWRlcl9mcmVlKCZjdHgtPnMsICZmdi0+c2V0dXApOwotCi0gICAgZm9y IChpbnQgaSA9IDA7IGkgPCAyOyBpKyspIC8qIDE2LzMyIGJpdCAqLwotICAgICAgICBhdl9idWZm ZXJfdW5yZWYoJmZ2LT5pbnRlcm1lZGlhdGVfZnJhbWVzX3JlZltpXSk7Ci0KLSAgICBmb3IgKGlu dCBpID0gMDsgaSA8IDI7IGkrKykgLyogQUMvR29sb21iICovCi0gICAgICAgIGZmX3ZrX3NoYWRl cl9mcmVlKCZjdHgtPnMsICZmdi0+cmVzZXRbaV0pOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkg PCAyOyBpKyspIC8qIDE2LzMyIGJpdCAqLwotICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IDI7 IGorKykgLyogQUMvR29sb21iICovCi0gICAgICAgICAgICBmb3IgKGludCBrID0gMDsgayA8IDI7 IGsrKykgLyogTm9ybWFsL1JHQiAqLwotICAgICAgICAgICAgICAgIGZmX3ZrX3NoYWRlcl9mcmVl KCZjdHgtPnMsICZmdi0+ZGVjb2RlW2ldW2pdW2tdKTsKLQotICAgIGZmX3ZrX2ZyZWVfYnVmKCZj dHgtPnMsICZmdi0+cXVhbnRfYnVmKTsKLSAgICBmZl92a19mcmVlX2J1ZigmY3R4LT5zLCAmZnYt PnJhbmdlY29kZXJfc3RhdGljX2J1Zik7Ci0gICAgZmZfdmtfZnJlZV9idWYoJmN0eC0+cywgJmZ2 LT5jcmNfdGFiX2J1Zik7Ci0KLSAgICBhdl9idWZmZXJfcG9vbF91bmluaXQoJmZ2LT5zbGljZV9z dGF0ZV9wb29sKTsKLSAgICBhdl9idWZmZXJfcG9vbF91bmluaXQoJmZ2LT5zbGljZV9vZmZzZXRf cG9vbCk7Ci0gICAgYXZfYnVmZmVyX3Bvb2xfdW5pbml0KCZmdi0+c2xpY2Vfc3RhdHVzX3Bvb2wp OwotCi0gICAgYXZfZnJlZXAoJmZ2KTsKLX0KLQotc3RhdGljIGludCB2a19kZWNvZGVfZmZ2MV9p bml0KEFWQ29kZWNDb250ZXh0ICphdmN0eCkKLXsKLSAgICBpbnQgZXJyOwotICAgIEZGVjFDb250 ZXh0ICpmID0gYXZjdHgtPnByaXZfZGF0YTsKLSAgICBGRlZ1bGthbkRlY29kZUNvbnRleHQgKmRl YyA9IGF2Y3R4LT5pbnRlcm5hbC0+aHdhY2NlbF9wcml2X2RhdGE7Ci0gICAgRkZWdWxrYW5EZWNv ZGVTaGFyZWQgKmN0eCA9IE5VTEw7Ci0gICAgRkZ2MVZ1bGthbkRlY29kZUNvbnRleHQgKmZ2Owot ICAgIEZGVmtTUElSVkNvbXBpbGVyICpzcHY7Ci0KLSAgICBpZiAoZi0+dmVyc2lvbiA8IDMgfHwK LSAgICAgICAgKGYtPnZlcnNpb24gPT0gNCAmJiBmLT5taWNyb192ZXJzaW9uID4gMykpCi0gICAg ICAgIHJldHVybiBBVkVSUk9SKEVOT1RTVVApOwotCi0gICAgc3B2ID0gZmZfdmtfc3BpcnZfaW5p dCgpOwotICAgIGlmICghc3B2KSB7Ci0gICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9S LCAiVW5hYmxlIHRvIGluaXRpYWxpemUgU1BJUi1WIGNvbXBpbGVyIVxuIik7Ci0gICAgICAgIHJl dHVybiBBVkVSUk9SX0VYVEVSTkFMOwotICAgIH0KLQotICAgIGVyciA9IGZmX3ZrX2RlY29kZV9p bml0KGF2Y3R4KTsKLSAgICBpZiAoZXJyIDwgMCkKLSAgICAgICAgcmV0dXJuIGVycjsKLSAgICBj dHggPSBkZWMtPnNoYXJlZF9jdHg7Ci0KLSAgICBmdiA9IGN0eC0+c2RfY3R4ID0gYXZfbWFsbG9j eihzaXplb2YoKmZ2KSk7Ci0gICAgaWYgKCFmdikgewotICAgICAgICBlcnIgPSBBVkVSUk9SKEVO T01FTSk7Ci0gICAgICAgIGdvdG8gZmFpbDsKLSAgICB9Ci0KLSAgICBjdHgtPnNkX2N0eF9mcmVl ID0gJnZrX2RlY29kZV9mZnYxX3VuaW5pdDsKLQotICAgIC8qIEludGVybWVkaWF0ZSBmcmFtZSBw b29sIGZvciBSQ1QgKi8KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IDI7IGkrKykgeyAvKiAxNi8z MiBiaXQgKi8KLSAgICAgICAgUkVUKGluaXRfaW5kaXJlY3QoYXZjdHgsICZjdHgtPnMsICZmdi0+ aW50ZXJtZWRpYXRlX2ZyYW1lc19yZWZbaV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGkg PyBBVl9QSVhfRk1UX0dCUkFQMzIgOiBBVl9QSVhfRk1UX0dCUkFQMTYpKTsKLSAgICB9Ci0KLSAg ICAvKiBTZXR1cCBzaGFkZXIgKi8KLSAgICBSRVQoaW5pdF9zZXR1cF9zaGFkZXIoZiwgJmN0eC0+ cywgJmN0eC0+ZXhlY19wb29sLCBzcHYsICZmdi0+c2V0dXApKTsKLQotICAgIC8qIFJlc2V0IHNo YWRlcnMgKi8KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IDI7IGkrKykgeyAvKiBBQy9Hb2xvbWIg Ki8KLSAgICAgICAgUkVUKGluaXRfcmVzZXRfc2hhZGVyKGYsICZjdHgtPnMsICZjdHgtPmV4ZWNf cG9vbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwdiwgJmZ2LT5yZXNldFtpXSwg IWkgPyBBQ19SQU5HRV9DVVNUT01fVEFCIDogMCkpOwotICAgIH0KLQotICAgIC8qIERlY29kZSBz aGFkZXJzICovCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyOyBpKyspIHsgLyogMTYvMzIgYml0 ICovCi0gICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgMjsgaisrKSB7IC8qIEFDL0dvbG9tYiAq LwotICAgICAgICAgICAgZm9yIChpbnQgayA9IDA7IGsgPCAyOyBrKyspIHsgLyogTm9ybWFsL1JH QiAqLwotICAgICAgICAgICAgICAgIEFWSFdGcmFtZXNDb250ZXh0ICpkZWNfZnJhbWVzX2N0eDsK LSAgICAgICAgICAgICAgICBkZWNfZnJhbWVzX2N0eCA9IGsgPyAoQVZIV0ZyYW1lc0NvbnRleHQg Kilmdi0+aW50ZXJtZWRpYXRlX2ZyYW1lc19yZWZbaV0tPmRhdGEgOgotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChBVkhXRnJhbWVzQ29udGV4dCAqKWF2Y3R4LT5od19mcmFt ZXNfY3R4LT5kYXRhOwotICAgICAgICAgICAgICAgIFJFVChpbml0X2RlY29kZV9zaGFkZXIoZiwg JmN0eC0+cywgJmN0eC0+ZXhlY19wb29sLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc3B2LCAmZnYtPmRlY29kZVtpXVtqXVtrXSwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGRlY19mcmFtZXNfY3R4LAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKEFWSFdGcmFtZXNDb250ZXh0ICopYXZjdHgtPmh3X2ZyYW1lc19j dHgtPmRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIWogPyBBQ19SQU5HRV9DVVNUT01f VEFCIDogQUNfR09MT01CX1JJQ0UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBrKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKiBSYW5n ZSBjb2RlciBkYXRhICovCi0gICAgUkVUKGZmX2ZmdjFfdmtfaW5pdF9zdGF0ZV90cmFuc2l0aW9u X2RhdGEoJmN0eC0+cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAmZnYtPnJhbmdlY29kZXJfc3RhdGljX2J1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBmKSk7Ci0KLSAgICAvKiBRdWFudGl6YXRpb24gdGFibGUg ZGF0YSAqLwotICAgIFJFVChmZl9mZnYxX3ZrX2luaXRfcXVhbnRfdGFibGVfZGF0YSgmY3R4LT5z LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZnYtPnF1YW50X2J1 ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZikpOwotCi0gICAg LyogQ1JDIHRhYmxlIGJ1ZmZlciAqLwotICAgIFJFVChmZl9mZnYxX3ZrX2luaXRfY3JjX3RhYmxl X2RhdGEoJmN0eC0+cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZm di0+Y3JjX3RhYl9idWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm KSk7Ci0KLSAgICAvKiBVcGRhdGUgc2V0dXAgZ2xvYmFsIGRlc2NyaXB0b3JzICovCi0gICAgUkVU KGZmX3ZrX3NoYWRlcl91cGRhdGVfZGVzY19idWZmZXIoJmN0eC0+cywgJmN0eC0+ZXhlY19wb29s LmNvbnRleHRzWzBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZm di0+c2V0dXAsIDAsIDAsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJmZ2LT5yYW5nZWNvZGVyX3N0YXRpY19idWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgMCwgZnYtPnJhbmdlY29kZXJfc3RhdGljX2J1Zi5zaXplLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZLX0ZPUk1BVF9VTkRFRklORUQpKTsK LSAgICBSRVQoZmZfdmtfc2hhZGVyX3VwZGF0ZV9kZXNjX2J1ZmZlcigmY3R4LT5zLCAmY3R4LT5l eGVjX3Bvb2wuY29udGV4dHNbMF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJmZ2LT5zZXR1cCwgMCwgMSwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAmZnYtPmNyY190YWJfYnVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDAsIGZ2LT5jcmNfdGFiX2J1Zi5zaXplLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFZLX0ZPUk1BVF9VTkRFRklORUQpKTsKLQotICAgIC8qIFVw ZGF0ZSBkZWNvZGUgZ2xvYmFsIGRlc2NyaXB0b3JzICovCi0gICAgZm9yIChpbnQgaSA9IDA7IGkg PCAyOyBpKyspIHsgLyogMTYvMzIgYml0ICovCi0gICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwg MjsgaisrKSB7IC8qIEFDL0dvbG9tYiAqLwotICAgICAgICAgICAgZm9yIChpbnQgayA9IDA7IGsg PCAyOyBrKyspIHsgLyogTm9ybWFsL1JHQiAqLwotICAgICAgICAgICAgICAgIFJFVChmZl92a19z aGFkZXJfdXBkYXRlX2Rlc2NfYnVmZmVyKCZjdHgtPnMsICZjdHgtPmV4ZWNfcG9vbC5jb250ZXh0 c1swXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAmZnYtPmRlY29kZVtpXVtqXVtrXSwgMCwgMCwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZnYtPnJhbmdlY29kZXJfc3RhdGljX2J1ZiwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBm di0+cmFuZ2Vjb2Rlcl9zdGF0aWNfYnVmLnNpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfRk9STUFUX1VOREVGSU5FRCkpOwotICAgICAg ICAgICAgICAgIFJFVChmZl92a19zaGFkZXJfdXBkYXRlX2Rlc2NfYnVmZmVyKCZjdHgtPnMsICZj dHgtPmV4ZWNfcG9vbC5jb250ZXh0c1swXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAmZnYtPmRlY29kZVtpXVtqXVtrXSwgMCwgMSwgMCwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZnYtPnF1 YW50X2J1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAwLCBmdi0+cXVhbnRfYnVmLnNpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgVktfRk9STUFUX1VOREVGSU5FRCkpOwotICAgICAgICAg ICAgfQotICAgICAgICB9Ci0gICAgfQotCi1mYWlsOgotICAgIHNwdi0+dW5pbml0KCZzcHYpOwot Ci0gICAgcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIHZvaWQgdmtfZmZ2MV9mcmVlX2ZyYW1lX3By aXYoQVZSZWZTdHJ1Y3RPcGFxdWUgX2h3Y3R4LCB2b2lkICpkYXRhKQotewotICAgIEFWSFdEZXZp Y2VDb250ZXh0ICpkZXZfY3R4ID0gX2h3Y3R4Lm5jOwotICAgIEFWVnVsa2FuRGV2aWNlQ29udGV4 dCAqaHdjdHggPSBkZXZfY3R4LT5od2N0eDsKLQotICAgIEZGdjFWdWxrYW5EZWNvZGVQaWN0dXJl ICpmcCA9IGRhdGE7Ci0gICAgRkZWdWxrYW5EZWNvZGVQaWN0dXJlICp2cCA9ICZmcC0+dnA7Ci0g ICAgRkZWa0J1ZmZlciAqc2xpY2Vfc3RhdHVzID0gKEZGVmtCdWZmZXIgKilmcC0+c2xpY2Vfc3Rh dHVzX2J1Zi0+ZGF0YTsKLQotICAgIGZmX3ZrX2RlY29kZV9mcmVlX2ZyYW1lKGRldl9jdHgsIHZw KTsKLQotICAgIC8qIEludmFsaWRhdGUgc2xpY2Uvb3V0cHV0IGRhdGEgaWYgbmVlZGVkICovCi0g ICAgaWYgKCEoc2xpY2Vfc3RhdHVzLT5mbGFncyAmIFZLX01FTU9SWV9QUk9QRVJUWV9IT1NUX0NP SEVSRU5UX0JJVCkpIHsKLSAgICAgICAgVmtNYXBwZWRNZW1vcnlSYW5nZSBpbnZhbGlkYXRlX2Rh dGEgPSB7Ci0gICAgICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9NQVBQRURfTUVN T1JZX1JBTkdFLAotICAgICAgICAgICAgLm1lbW9yeSA9IHNsaWNlX3N0YXR1cy0+bWVtLAotICAg ICAgICAgICAgLm9mZnNldCA9IDAsCi0gICAgICAgICAgICAuc2l6ZSA9IDIqZnAtPnNsaWNlX251 bSpzaXplb2YodWludDMyX3QpLAotICAgICAgICB9OwotICAgICAgICB2cC0+aW52YWxpZGF0ZV9t ZW1vcnlfcmFuZ2VzKGh3Y3R4LT5hY3RfZGV2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDEsICZpbnZhbGlkYXRlX2RhdGEpOwotICAgIH0KLQotICAgIGZvciAoaW50IGkg PSAwOyBpIDwgZnAtPnNsaWNlX251bTsgaSsrKSB7Ci0gICAgICAgIHVpbnQzMl90IGNyY19yZXMg PSAwOwotICAgICAgICBpZiAoZnAtPmNyY19jaGVja2VkKQotICAgICAgICAgICAgY3JjX3JlcyA9 IEFWX1JOMzIoc2xpY2Vfc3RhdHVzLT5tYXBwZWRfbWVtICsgMippKnNpemVvZih1aW50MzJfdCkg KyAwKTsKLSAgICAgICAgdWludDMyX3Qgc3RhdHVzID0gQVZfUk4zMihzbGljZV9zdGF0dXMtPm1h cHBlZF9tZW0gKyAyKmkqc2l6ZW9mKHVpbnQzMl90KSArIDQpOwotICAgICAgICBpZiAoc3RhdHVz IHx8IGNyY19yZXMpCi0gICAgICAgICAgICBhdl9sb2coZGV2X2N0eCwgQVZfTE9HX0VSUk9SLCAi U2xpY2UgJWkgc3RhdHVzOiAweCV4LCBDUkMgMHgleFxuIiwKLSAgICAgICAgICAgICAgICAgICBp LCBzdGF0dXMsIGNyY19yZXMpOwotICAgIH0KLQotICAgIGF2X2J1ZmZlcl91bnJlZigmdnAtPnNs aWNlc19idWYpOwotICAgIGF2X2J1ZmZlcl91bnJlZigmZnAtPnNsaWNlX3N0YXRlKTsKLSAgICBh dl9idWZmZXJfdW5yZWYoJmZwLT5zbGljZV9vZmZzZXRfYnVmKTsKLSAgICBhdl9idWZmZXJfdW5y ZWYoJmZwLT5zbGljZV9zdGF0dXNfYnVmKTsKLX0KLQotY29uc3QgRkZIV0FjY2VsIGZmX2ZmdjFf dnVsa2FuX2h3YWNjZWwgPSB7Ci0gICAgLnAubmFtZSAgICAgICAgICAgICAgICA9ICJmZnYxX3Z1 bGthbiIsCi0gICAgLnAudHlwZSAgICAgICAgICAgICAgICA9IEFWTUVESUFfVFlQRV9WSURFTywK LSAgICAucC5pZCAgICAgICAgICAgICAgICAgID0gQVZfQ09ERUNfSURfRkZWMSwKLSAgICAucC5w aXhfZm10ICAgICAgICAgICAgID0gQVZfUElYX0ZNVF9WVUxLQU4sCi0gICAgLnN0YXJ0X2ZyYW1l ICAgICAgICAgICA9ICZ2a19mZnYxX3N0YXJ0X2ZyYW1lLAotICAgIC5kZWNvZGVfc2xpY2UgICAg ICAgICAgPSAmdmtfZmZ2MV9kZWNvZGVfc2xpY2UsCi0gICAgLmVuZF9mcmFtZSAgICAgICAgICAg ICA9ICZ2a19mZnYxX2VuZF9mcmFtZSwKLSAgICAuZnJlZV9mcmFtZV9wcml2ICAgICAgID0gJnZr X2ZmdjFfZnJlZV9mcmFtZV9wcml2LAotICAgIC5mcmFtZV9wcml2X2RhdGFfc2l6ZSAgPSBzaXpl b2YoRkZ2MVZ1bGthbkRlY29kZVBpY3R1cmUpLAotICAgIC5pbml0ICAgICAgICAgICAgICAgICAg PSAmdmtfZGVjb2RlX2ZmdjFfaW5pdCwKLSAgICAudXBkYXRlX3RocmVhZF9jb250ZXh0ID0gJmZm X3ZrX3VwZGF0ZV90aHJlYWRfY29udGV4dCwKLSAgICAuZGVjb2RlX3BhcmFtcyAgICAgICAgID0g JmZmX3ZrX3BhcmFtc19pbnZhbGlkYXRlLAotICAgIC5mbHVzaCAgICAgICAgICAgICAgICAgPSAm ZmZfdmtfZGVjb2RlX2ZsdXNoLAotICAgIC51bmluaXQgICAgICAgICAgICAgICAgPSAmZmZfdmtf ZGVjb2RlX3VuaW5pdCwKLSAgICAuZnJhbWVfcGFyYW1zICAgICAgICAgID0gJmZmX3ZrX2ZyYW1l X3BhcmFtcywKLSAgICAucHJpdl9kYXRhX3NpemUgICAgICAgID0gc2l6ZW9mKEZGVnVsa2FuRGVj b2RlQ29udGV4dCksCi0gICAgLmNhcHNfaW50ZXJuYWwgICAgICAgICA9IEhXQUNDRUxfQ0FQX0FT WU5DX1NBRkUgfCBIV0FDQ0VMX0NBUF9USFJFQURfU0FGRSwKLX07Ci0tIAoyLjQ5LjEKCgpGcm9t IDg0MWE0ZWIxZTFmNDg2NTEwYTcxNjUxNjhmNTZhY2JlMWU3M2IwZjEgTW9uIFNlcCAxNyAwMDow MDowMCAyMDAxCkZyb206IEphbWFpa2ExIDxsdWthc3pjejE4QHdwLnBsPgpEYXRlOiBXZWQsIDMg U2VwIDIwMjUgMTM6MzY6NDggKzAwMDAKU3ViamVjdDogW1BBVENIIDA4MC8xMThdIENoYW5naW5n IHZ1bGthbiBmaWxlIGRpcmVjdG9yeQoKLS0tCiBsaWJhdmNvZGVjL3Z1bGthbi92dWxrYW5fZmZ2 MS5jIHwgMTE3NSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiAxIGZpbGUgY2hhbmdl ZCwgMTE3NSBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliYXZjb2RlYy92dWxr YW4vdnVsa2FuX2ZmdjEuYwoKZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvdnVsa2FuL3Z1bGthbl9m ZnYxLmMgYi9saWJhdmNvZGVjL3Z1bGthbi92dWxrYW5fZmZ2MS5jCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAuLjViYzVjODRhNTcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJh dmNvZGVjL3Z1bGthbi92dWxrYW5fZmZ2MS5jCkBAIC0wLDAgKzEsMTE3NSBAQAorLyoKKyAqIENv cHlyaWdodCAoYykgMjAyNCBMeW5uZSA8ZGV2QGx5bm5lLmVlPgorICoKKyAqIFRoaXMgZmlsZSBp cyBwYXJ0IG9mIEZGbXBlZy4KKyAqCisgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMi4xIG9m IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK KyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh IGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcg d2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5k YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEg MDIxMTAtMTMwMSBVU0EKKyAqLworCisjaW5jbHVkZSAidnVsa2FuX2RlY29kZS5oIgorI2luY2x1 ZGUgImxpYmF2Y29kZWMvaHdhY2NlbF9pbnRlcm5hbC5oIgorCisjaW5jbHVkZSAibGliYXZjb2Rl Yy9mZnYxLmgiCisjaW5jbHVkZSAiZmZ2MV92dWxrYW4uaCIKKyNpbmNsdWRlICIuLi8uLi9saWJh dnV0aWwvdnVsa2FuL3Z1bGthbl9zcGlydi5oIgorI2luY2x1ZGUgImxpYmF2dXRpbC9tZW0uaCIK KworI2RlZmluZSBSR0JfTElORUNBQ0hFIDIKKworZXh0ZXJuIGNvbnN0IGNoYXIgKmZmX3NvdXJj ZV9jb21tb25fY29tcDsKK2V4dGVybiBjb25zdCBjaGFyICpmZl9zb3VyY2VfcmFuZ2Vjb2Rlcl9j b21wOworZXh0ZXJuIGNvbnN0IGNoYXIgKmZmX3NvdXJjZV9mZnYxX3ZsY19jb21wOworZXh0ZXJu IGNvbnN0IGNoYXIgKmZmX3NvdXJjZV9mZnYxX2NvbW1vbl9jb21wOworZXh0ZXJuIGNvbnN0IGNo YXIgKmZmX3NvdXJjZV9mZnYxX2RlY19zZXR1cF9jb21wOworZXh0ZXJuIGNvbnN0IGNoYXIgKmZm X3NvdXJjZV9mZnYxX3Jlc2V0X2NvbXA7CitleHRlcm4gY29uc3QgY2hhciAqZmZfc291cmNlX2Zm djFfZGVjX2NvbXA7CisKK2NvbnN0IEZGVnVsa2FuRGVjb2RlRGVzY3JpcHRvciBmZl92a19kZWNf ZmZ2MV9kZXNjID0geworICAgIC5jb2RlY19pZCAgICAgICAgID0gQVZfQ09ERUNfSURfRkZWMSwK KyAgICAuZGVjb2RlX2V4dGVuc2lvbiA9IEZGX1ZLX0VYVF9QVVNIX0RFU0NSSVBUT1IsCisgICAg LnF1ZXVlX2ZsYWdzICAgICAgPSBWS19RVUVVRV9DT01QVVRFX0JJVCwKK307CisKK3R5cGVkZWYg c3RydWN0IEZGdjFWdWxrYW5EZWNvZGVQaWN0dXJlIHsKKyAgICBGRlZ1bGthbkRlY29kZVBpY3R1 cmUgdnA7CisKKyAgICBBVkJ1ZmZlclJlZiAqc2xpY2Vfc3RhdGU7CisgICAgdWludDMyX3QgcGxh bmVfc3RhdGVfc2l6ZTsKKyAgICB1aW50MzJfdCBzbGljZV9zdGF0ZV9zaXplOworICAgIHVpbnQz Ml90IHNsaWNlX2RhdGFfc2l6ZTsKKworICAgIEFWQnVmZmVyUmVmICpzbGljZV9vZmZzZXRfYnVm OworICAgIHVpbnQzMl90ICAgICpzbGljZV9vZmZzZXQ7CisgICAgaW50ICAgICAgICAgIHNsaWNl X251bTsKKworICAgIEFWQnVmZmVyUmVmICpzbGljZV9zdGF0dXNfYnVmOworICAgIGludCBjcmNf Y2hlY2tlZDsKK30gRkZ2MVZ1bGthbkRlY29kZVBpY3R1cmU7CisKK3R5cGVkZWYgc3RydWN0IEZG djFWdWxrYW5EZWNvZGVDb250ZXh0IHsKKyAgICBBVkJ1ZmZlclJlZiAqaW50ZXJtZWRpYXRlX2Zy YW1lc19yZWZbMl07IC8qIDE2LzMyIGJpdCAqLworCisgICAgRkZWdWxrYW5TaGFkZXIgc2V0dXA7 CisgICAgRkZWdWxrYW5TaGFkZXIgcmVzZXRbMl07IC8qIEFDL0dvbG9tYiAqLworICAgIEZGVnVs a2FuU2hhZGVyIGRlY29kZVsyXVsyXVsyXTsgLyogMTYvMzIgYml0LCBBQy9Hb2xvbWIsIE5vcm1h bC9SR0IgKi8KKworICAgIEZGVmtCdWZmZXIgcmFuZ2Vjb2Rlcl9zdGF0aWNfYnVmOworICAgIEZG VmtCdWZmZXIgcXVhbnRfYnVmOworICAgIEZGVmtCdWZmZXIgY3JjX3RhYl9idWY7CisKKyAgICBB VkJ1ZmZlclBvb2wgKnNsaWNlX3N0YXRlX3Bvb2w7CisgICAgQVZCdWZmZXJQb29sICpzbGljZV9v ZmZzZXRfcG9vbDsKKyAgICBBVkJ1ZmZlclBvb2wgKnNsaWNlX3N0YXR1c19wb29sOworfSBGRnYx VnVsa2FuRGVjb2RlQ29udGV4dDsKKwordHlwZWRlZiBzdHJ1Y3QgRkZ2MVZrUGFyYW1ldGVycyB7 CisgICAgVmtEZXZpY2VBZGRyZXNzIHNsaWNlX2RhdGE7CisgICAgVmtEZXZpY2VBZGRyZXNzIHNs aWNlX3N0YXRlOworCisgICAgaW50IGZtdF9sdXRbNF07CisgICAgdWludDMyX3QgaW1nX3NpemVb Ml07CisgICAgdWludDMyX3QgY2hyb21hX3NoaWZ0WzJdOworCisgICAgdWludDMyX3QgcGxhbmVf c3RhdGVfc2l6ZTsKKyAgICB1aW50MzJfdCBjcmNyZWY7CisgICAgaW50IHJjdF9vZmZzZXQ7CisK KyAgICB1aW50OF90IGV4dGVuZF9sb29rdXBbOF07CisgICAgdWludDhfdCBiaXRzX3Blcl9yYXdf c2FtcGxlOworICAgIHVpbnQ4X3QgcXVhbnRfdGFibGVfY291bnQ7CisgICAgdWludDhfdCB2ZXJz aW9uOworICAgIHVpbnQ4X3QgbWljcm9fdmVyc2lvbjsKKyAgICB1aW50OF90IGtleV9mcmFtZTsK KyAgICB1aW50OF90IHBsYW5lczsKKyAgICB1aW50OF90IGNvZGVjX3BsYW5lczsKKyAgICB1aW50 OF90IGNvbG9yX3BsYW5lczsKKyAgICB1aW50OF90IHRyYW5zcGFyZW5jeTsKKyAgICB1aW50OF90 IHBsYW5hcl9yZ2I7CisgICAgdWludDhfdCBjb2xvcnNwYWNlOworICAgIHVpbnQ4X3QgZWM7Cisg ICAgdWludDhfdCBnb2xvbWI7CisgICAgdWludDhfdCBjaGVja19jcmM7CisgICAgdWludDhfdCBw YWRkaW5nWzNdOworfSBGRnYxVmtQYXJhbWV0ZXJzOworCitzdGF0aWMgdm9pZCBhZGRfcHVzaF9k YXRhKEZGVnVsa2FuU2hhZGVyICpzaGQpCit7CisgICAgR0xTTEMoMCwgbGF5b3V0KHB1c2hfY29u c3RhbnQsIHNjYWxhcikgdW5pZm9ybSBwdXNoQ29uc3RhbnRzIHsgICk7CisgICAgR0xTTEMoMSwg ICAgdThidWYgc2xpY2VfZGF0YTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7 CisgICAgR0xTTEMoMSwgICAgdThidWYgc2xpY2Vfc3RhdGU7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICk7CisgICAgR0xTTEMoMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgR0xTTEMoMSwgICAgaXZlYzQgZm10 X2x1dDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgR0xTTEMo MSwgICAgdXZlYzIgaW1nX3NpemU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICk7CisgICAgR0xTTEMoMSwgICAgdXZlYzIgY2hyb21hX3NoaWZ0OyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICk7CisgICAgR0xTTEMoMCwgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgR0xTTEMoMSwgICAgdWludCBw bGFuZV9zdGF0ZV9zaXplOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgR0xT TEMoMSwgICAgdWludDMyX3QgY3JjcmVmOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICk7CisgICAgR0xTTEMoMSwgICAgaW50IHJjdF9vZmZzZXQ7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICk7CisgICAgR0xTTEMoMCwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgR0xTTEMoMSwgICAgdWlu dDhfdCBleHRlbmRfbG9va3VwWzhdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAg R0xTTEMoMSwgICAgdWludDhfdCBiaXRzX3Blcl9yYXdfc2FtcGxlOyAgICAgICAgICAgICAgICAg ICAgICAgICk7CisgICAgR0xTTEMoMSwgICAgdWludDhfdCBxdWFudF90YWJsZV9jb3VudDsgICAg ICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgR0xTTEMoMSwgICAgdWludDhfdCB2ZXJzaW9u OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgR0xTTEMoMSwgICAg dWludDhfdCBtaWNyb192ZXJzaW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Cisg ICAgR0xTTEMoMSwgICAgdWludDhfdCBrZXlfZnJhbWU7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICk7CisgICAgR0xTTEMoMSwgICAgdWludDhfdCBwbGFuZXM7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgR0xTTEMoMSwgICAgdWludDhfdCBjb2Rl Y19wbGFuZXM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgR0xTTEMoMSwg ICAgdWludDhfdCBjb2xvcl9wbGFuZXM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7 CisgICAgR0xTTEMoMSwgICAgdWludDhfdCB0cmFuc3BhcmVuY3k7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICk7CisgICAgR0xTTEMoMSwgICAgdWludDhfdCBwbGFuYXJfcmdiOyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgR0xTTEMoMSwgICAgdWludDhfdCBj b2xvcnNwYWNlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgR0xTTEMo MSwgICAgdWludDhfdCBlYzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICk7CisgICAgR0xTTEMoMSwgICAgdWludDhfdCBnb2xvbWI7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICk7CisgICAgR0xTTEMoMSwgICAgdWludDhfdCBjaGVja19jcmM7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgR0xTTEMoMSwgICAgdWludDhf dCBwYWRkaW5nWzNdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgR0xT TEMoMCwgfTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICk7CisgICAgZmZfdmtfc2hhZGVyX2FkZF9wdXNoX2NvbnN0KHNoZCwgMCwgc2l6ZW9mKEZG djFWa1BhcmFtZXRlcnMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19TSEFE RVJfU1RBR0VfQ09NUFVURV9CSVQpOworfQorCitzdGF0aWMgaW50IHZrX2ZmdjFfc3RhcnRfZnJh bWUoQVZDb2RlY0NvbnRleHQgICAgICAgICAgKmF2Y3R4LAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IEFWQnVmZmVyUmVmICAgICAgICpidWZmZXJfcmVmLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGF2X3VudXNlZCBjb25zdCB1aW50OF90ICpidWZmZXIsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZfdW51c2VkIHVpbnQzMl90ICAgICAgIHNp emUpCit7CisgICAgaW50IGVycjsKKyAgICBGRlZ1bGthbkRlY29kZUNvbnRleHQgKmRlYyA9IGF2 Y3R4LT5pbnRlcm5hbC0+aHdhY2NlbF9wcml2X2RhdGE7CisgICAgRkZWdWxrYW5EZWNvZGVTaGFy ZWQgKmN0eCA9IGRlYy0+c2hhcmVkX2N0eDsKKyAgICBGRnYxVnVsa2FuRGVjb2RlQ29udGV4dCAq ZnYgPSBjdHgtPnNkX2N0eDsKKyAgICBGRlYxQ29udGV4dCAqZiA9IGF2Y3R4LT5wcml2X2RhdGE7 CisKKyAgICBGRnYxVnVsa2FuRGVjb2RlUGljdHVyZSAqZnAgPSBmLT5od2FjY2VsX3BpY3R1cmVf cHJpdmF0ZTsKKyAgICBGRlZ1bGthbkRlY29kZVBpY3R1cmUgKnZwID0gJmZwLT52cDsKKworICAg IEFWSFdGcmFtZXNDb250ZXh0ICpod2ZjID0gKEFWSFdGcmFtZXNDb250ZXh0ICopYXZjdHgtPmh3 X2ZyYW1lc19jdHgtPmRhdGE7CisgICAgZW51bSBBVlBpeGVsRm9ybWF0IHN3X2Zvcm1hdCA9IGh3 ZmMtPnN3X2Zvcm1hdDsKKworICAgIGludCBtYXhfY29udGV4dHM7CisgICAgaW50IGlzX3JnYiA9 ICEoZi0+Y29sb3JzcGFjZSA9PSAwICYmIHN3X2Zvcm1hdCAhPSBBVl9QSVhfRk1UX1lBOCkgJiYK KyAgICAgICAgICAgICAgICAgIShzd19mb3JtYXQgPT0gQVZfUElYX0ZNVF9ZQTgpOworCisgICAg ZnAtPnNsaWNlX251bSA9IDA7CisKKyAgICBtYXhfY29udGV4dHMgPSAwOworICAgIGZvciAoaW50 IGkgPSAwOyBpIDwgZi0+cXVhbnRfdGFibGVfY291bnQ7IGkrKykKKyAgICAgICAgbWF4X2NvbnRl eHRzID0gRkZNQVgoZi0+Y29udGV4dF9jb3VudFtpXSwgbWF4X2NvbnRleHRzKTsKKworICAgIC8q IEFsbG9jYXRlIHNsaWNlIGJ1ZmZlciBkYXRhICovCisgICAgaWYgKGYtPmFjID09IEFDX0dPTE9N Ql9SSUNFKQorICAgICAgICBmcC0+cGxhbmVfc3RhdGVfc2l6ZSA9IDg7CisgICAgZWxzZQorICAg ICAgICBmcC0+cGxhbmVfc3RhdGVfc2l6ZSA9IENPTlRFWFRfU0laRTsKKworICAgIGZwLT5wbGFu ZV9zdGF0ZV9zaXplICo9IG1heF9jb250ZXh0czsKKyAgICBmcC0+c2xpY2Vfc3RhdGVfc2l6ZSA9 IGZwLT5wbGFuZV9zdGF0ZV9zaXplKmYtPnBsYW5lX2NvdW50OworCisgICAgZnAtPnNsaWNlX2Rh dGFfc2l6ZSA9IDI1NjsgLyogT3ZlcmVzdGltYXRpb24gZm9yIHRoZSBTbGljZUNvbnRleHQgc3Ry dWN0ICovCisgICAgZnAtPnNsaWNlX3N0YXRlX3NpemUgKz0gZnAtPnNsaWNlX2RhdGFfc2l6ZTsK KyAgICBmcC0+c2xpY2Vfc3RhdGVfc2l6ZSA9IEZGQUxJR04oZnAtPnNsaWNlX3N0YXRlX3NpemUs IDgpOworCisgICAgZnAtPmNyY19jaGVja2VkID0gZi0+ZWMgJiYgKGF2Y3R4LT5lcnJfcmVjb2du aXRpb24gJiBBVl9FRl9DUkNDSEVDSyk7CisKKyAgICAvKiBIb3N0IG1hcCB0aGUgaW5wdXQgc2xp Y2VzIGRhdGEgaWYgc3VwcG9ydGVkICovCisgICAgaWYgKGN0eC0+cy5leHRlbnNpb25zICYgRkZf VktfRVhUX0VYVEVSTkFMX0hPU1RfTUVNT1JZKQorICAgICAgICBmZl92a19ob3N0X21hcF9idWZm ZXIoJmN0eC0+cywgJnZwLT5zbGljZXNfYnVmLCBidWZmZXJfcmVmLT5kYXRhLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgYnVmZmVyX3JlZiwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFZLX0JVRkZFUl9VU0FHRV9TVE9SQUdFX0JVRkZFUl9CSVQgfAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgVktfQlVGRkVSX1VTQUdFX1NIQURFUl9ERVZJQ0VfQUREUkVTU19C SVQpOworCisgICAgLyogQWxsb2NhdGUgc2xpY2Ugc3RhdGUgZGF0YSAqLworICAgIGlmIChmLT5w aWN0dXJlLmYtPmZsYWdzICYgQVZfRlJBTUVfRkxBR19LRVkpIHsKKyAgICAgICAgZXJyID0gZmZf dmtfZ2V0X3Bvb2xlZF9idWZmZXIoJmN0eC0+cywgJmZ2LT5zbGljZV9zdGF0ZV9wb29sLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZnAtPnNsaWNlX3N0YXRlLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19CVUZGRVJfVVNBR0VfU1RPUkFH RV9CVUZGRVJfQklUIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktf QlVGRkVSX1VTQUdFX1NIQURFUl9ERVZJQ0VfQUREUkVTU19CSVQsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIGYtPnNsaWNlX2NvdW50KmZwLT5zbGljZV9zdGF0 ZV9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19NRU1PUllf UFJPUEVSVFlfREVWSUNFX0xPQ0FMX0JJVCk7CisgICAgICAgIGlmIChlcnIgPCAwKQorICAgICAg ICAgICAgcmV0dXJuIGVycjsKKyAgICB9IGVsc2UgeworICAgICAgICBGRnYxVnVsa2FuRGVjb2Rl UGljdHVyZSAqZnBsID0gZi0+aHdhY2NlbF9sYXN0X3BpY3R1cmVfcHJpdmF0ZTsKKyAgICAgICAg ZnAtPnNsaWNlX3N0YXRlID0gYXZfYnVmZmVyX3JlZihmcGwtPnNsaWNlX3N0YXRlKTsKKyAgICAg ICAgaWYgKCFmcC0+c2xpY2Vfc3RhdGUpCisgICAgICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9N RU0pOworICAgIH0KKworICAgIC8qIEFsbG9jYXRlIHNsaWNlIG9mZnNldHMgYnVmZmVyICovCisg ICAgZXJyID0gZmZfdmtfZ2V0X3Bvb2xlZF9idWZmZXIoJmN0eC0+cywgJmZ2LT5zbGljZV9vZmZz ZXRfcG9vbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZnAtPnNsaWNlX29m ZnNldF9idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfQlVGRkVSX1VT QUdFX1NUT1JBR0VfQlVGRkVSX0JJVCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgVktfQlVGRkVSX1VTQUdFX1NIQURFUl9ERVZJQ0VfQUREUkVTU19CSVQsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgMipmLT5zbGljZV9jb3VudCpzaXplb2YodWlu dDMyX3QpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZLX01FTU9SWV9QUk9Q RVJUWV9ERVZJQ0VfTE9DQUxfQklUIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBWS19NRU1PUllfUFJPUEVSVFlfSE9TVF9WSVNJQkxFX0JJVCk7CisgICAgaWYgKGVyciA8IDAp CisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICAvKiBBbGxvY2F0ZSBzbGljZSBzdGF0dXMgYnVm ZmVyICovCisgICAgZXJyID0gZmZfdmtfZ2V0X3Bvb2xlZF9idWZmZXIoJmN0eC0+cywgJmZ2LT5z bGljZV9zdGF0dXNfcG9vbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZnAt PnNsaWNlX3N0YXR1c19idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktf QlVGRkVSX1VTQUdFX1NUT1JBR0VfQlVGRkVSX0JJVCB8CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgVktfQlVGRkVSX1VTQUdFX1NIQURFUl9ERVZJQ0VfQUREUkVTU19CSVQsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgMipmLT5zbGljZV9jb3VudCpz aXplb2YodWludDMyX3QpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZLX01F TU9SWV9QUk9QRVJUWV9ERVZJQ0VfTE9DQUxfQklUIHwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBWS19NRU1PUllfUFJPUEVSVFlfSE9TVF9WSVNJQkxFX0JJVCk7CisgICAgaWYg KGVyciA8IDApCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICAvKiBQcmVwYXJlIGZyYW1lIHRv IGJlIHVzZWQgKi8KKyAgICBlcnIgPSBmZl92a19kZWNvZGVfcHJlcGFyZV9mcmFtZV9zZHIoZGVj LCBmLT5waWN0dXJlLmYsIHZwLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBGRl9WS19SRVBfTkFUSVZFLCAwKTsKKyAgICBpZiAoZXJyIDwgMCkKKyAgICAgICAg cmV0dXJuIGVycjsKKworICAgIC8qIENyZWF0ZSBhIHRlbXBvcmF0eSBmcmFtZSBmb3IgUkdCICov CisgICAgaWYgKGlzX3JnYikgeworICAgICAgICB2cC0+ZHBiX2ZyYW1lID0gYXZfZnJhbWVfYWxs b2MoKTsKKyAgICAgICAgaWYgKCF2cC0+ZHBiX2ZyYW1lKQorICAgICAgICAgICAgcmV0dXJuIEFW RVJST1IoRU5PTUVNKTsKKworICAgICAgICBlcnIgPSBhdl9od2ZyYW1lX2dldF9idWZmZXIoZnYt PmludGVybWVkaWF0ZV9mcmFtZXNfcmVmW2YtPnVzZTMyYml0XSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHZwLT5kcGJfZnJhbWUsIDApOworICAgICAgICBpZiAoZXJyIDwg MCkKKyAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisK K3N0YXRpYyBpbnQgdmtfZmZ2MV9kZWNvZGVfc2xpY2UoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICAqZGF0YSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgICAgICAgIHNpemUpCit7Cisg ICAgRkZWMUNvbnRleHQgKmYgPSBhdmN0eC0+cHJpdl9kYXRhOworCisgICAgRkZ2MVZ1bGthbkRl Y29kZVBpY3R1cmUgKmZwID0gZi0+aHdhY2NlbF9waWN0dXJlX3ByaXZhdGU7CisgICAgRkZWdWxr YW5EZWNvZGVQaWN0dXJlICp2cCA9ICZmcC0+dnA7CisKKyAgICBGRlZrQnVmZmVyICpzbGljZV9v ZmZzZXQgPSAoRkZWa0J1ZmZlciAqKWZwLT5zbGljZV9vZmZzZXRfYnVmLT5kYXRhOworICAgIEZG VmtCdWZmZXIgKnNsaWNlc19idWYgPSB2cC0+c2xpY2VzX2J1ZiA/IChGRlZrQnVmZmVyICopdnAt PnNsaWNlc19idWYtPmRhdGEgOiBOVUxMOworCisgICAgaWYgKHNsaWNlc19idWYgJiYgc2xpY2Vz X2J1Zi0+aG9zdF9yZWYpIHsKKyAgICAgICAgQVZfV04zMihzbGljZV9vZmZzZXQtPm1hcHBlZF9t ZW0gKyAoMipmcC0+c2xpY2VfbnVtICsgMCkqc2l6ZW9mKHVpbnQzMl90KSwKKyAgICAgICAgICAg ICAgICBkYXRhIC0gc2xpY2VzX2J1Zi0+bWFwcGVkX21lbSk7CisgICAgICAgIEFWX1dOMzIoc2xp Y2Vfb2Zmc2V0LT5tYXBwZWRfbWVtICsgKDIqZnAtPnNsaWNlX251bSArIDEpKnNpemVvZih1aW50 MzJfdCksCisgICAgICAgICAgICAgICAgc2l6ZSk7CisKKyAgICAgICAgZnAtPnNsaWNlX251bSsr OworICAgIH0gZWxzZSB7CisgICAgICAgIGludCBlcnIgPSBmZl92a19kZWNvZGVfYWRkX3NsaWNl KGF2Y3R4LCB2cCwgZGF0YSwgc2l6ZSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJmZwLT5zbGljZV9udW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIChjb25zdCB1aW50MzJfdCAqKikmZnAtPnNsaWNlX29mZnNldCk7CisgICAg ICAgIGlmIChlcnIgPCAwKQorICAgICAgICAgICAgcmV0dXJuIGVycjsKKworICAgICAgICBBVl9X TjMyKHNsaWNlX29mZnNldC0+bWFwcGVkX21lbSArICgyKihmcC0+c2xpY2VfbnVtIC0gMSkgKyAw KSpzaXplb2YodWludDMyX3QpLAorICAgICAgICAgICAgICAgIGZwLT5zbGljZV9vZmZzZXRbZnAt PnNsaWNlX251bSAtIDFdKTsKKyAgICAgICAgQVZfV04zMihzbGljZV9vZmZzZXQtPm1hcHBlZF9t ZW0gKyAoMiooZnAtPnNsaWNlX251bSAtIDEpICsgMSkqc2l6ZW9mKHVpbnQzMl90KSwKKyAgICAg ICAgICAgICAgICBzaXplKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGlu dCB2a19mZnYxX2VuZF9mcmFtZShBVkNvZGVjQ29udGV4dCAqYXZjdHgpCit7CisgICAgaW50IGVy cjsKKyAgICBGRlZ1bGthbkRlY29kZUNvbnRleHQgKmRlYyA9IGF2Y3R4LT5pbnRlcm5hbC0+aHdh Y2NlbF9wcml2X2RhdGE7CisgICAgRkZWdWxrYW5EZWNvZGVTaGFyZWQgKmN0eCA9IGRlYy0+c2hh cmVkX2N0eDsKKyAgICBGRlZ1bGthbkZ1bmN0aW9ucyAqdmsgPSAmY3R4LT5zLnZrZm47CisKKyAg ICBGRlYxQ29udGV4dCAqZiA9IGF2Y3R4LT5wcml2X2RhdGE7CisgICAgRkZ2MVZ1bGthbkRlY29k ZUNvbnRleHQgKmZ2ID0gY3R4LT5zZF9jdHg7CisgICAgRkZ2MVZrUGFyYW1ldGVycyBwZDsKKyAg ICBGRnYxVmtSZXNldFBhcmFtZXRlcnMgcGRfcmVzZXQ7CisKKyAgICBBVkhXRnJhbWVzQ29udGV4 dCAqaHdmYyA9IChBVkhXRnJhbWVzQ29udGV4dCAqKWF2Y3R4LT5od19mcmFtZXNfY3R4LT5kYXRh OworICAgIGVudW0gQVZQaXhlbEZvcm1hdCBzd19mb3JtYXQgPSBod2ZjLT5zd19mb3JtYXQ7CisK KyAgICBpbnQgYml0cyA9IGYtPmF2Y3R4LT5iaXRzX3Blcl9yYXdfc2FtcGxlID4gMCA/IGYtPmF2 Y3R4LT5iaXRzX3Blcl9yYXdfc2FtcGxlIDogODsKKyAgICBpbnQgaXNfcmdiID0gIShmLT5jb2xv cnNwYWNlID09IDAgJiYgc3dfZm9ybWF0ICE9IEFWX1BJWF9GTVRfWUE4KSAmJgorICAgICAgICAg ICAgICAgICAhKHN3X2Zvcm1hdCA9PSBBVl9QSVhfRk1UX1lBOCk7CisgICAgaW50IGNvbG9yX3Bs YW5lcyA9IGF2X3BpeF9mbXRfZGVzY19nZXQoYXZjdHgtPnN3X3BpeF9mbXQpLT5uYl9jb21wb25l bnRzOworCisgICAgRkZWdWxrYW5TaGFkZXIgKnJlc2V0X3NoYWRlcjsKKyAgICBGRlZ1bGthblNo YWRlciAqZGVjb2RlX3NoYWRlcjsKKworICAgIEZGdjFWdWxrYW5EZWNvZGVQaWN0dXJlICpmcCA9 IGYtPmh3YWNjZWxfcGljdHVyZV9wcml2YXRlOworICAgIEZGVnVsa2FuRGVjb2RlUGljdHVyZSAq dnAgPSAmZnAtPnZwOworCisgICAgRkZWa0J1ZmZlciAqc2xpY2VzX2J1ZiA9IChGRlZrQnVmZmVy ICopdnAtPnNsaWNlc19idWYtPmRhdGE7CisgICAgRkZWa0J1ZmZlciAqc2xpY2Vfc3RhdGUgPSAo RkZWa0J1ZmZlciAqKWZwLT5zbGljZV9zdGF0ZS0+ZGF0YTsKKyAgICBGRlZrQnVmZmVyICpzbGlj ZV9vZmZzZXQgPSAoRkZWa0J1ZmZlciAqKWZwLT5zbGljZV9vZmZzZXRfYnVmLT5kYXRhOworICAg IEZGVmtCdWZmZXIgKnNsaWNlX3N0YXR1cyA9IChGRlZrQnVmZmVyICopZnAtPnNsaWNlX3N0YXR1 c19idWYtPmRhdGE7CisKKyAgICBWa0ltYWdlVmlldyByY3RfaW1hZ2Vfdmlld3NbQVZfTlVNX0RB VEFfUE9JTlRFUlNdOworCisgICAgQVZGcmFtZSAqZGVjb2RlX2RzdCA9IGlzX3JnYiA/IHZwLT5k cGJfZnJhbWUgOiBmLT5waWN0dXJlLmY7CisgICAgVmtJbWFnZVZpZXcgKmRlY29kZV9kc3Rfdmll dyA9IGlzX3JnYiA/IHJjdF9pbWFnZV92aWV3cyA6IHZwLT52aWV3Lm91dDsKKworICAgIFZrSW1h Z2VNZW1vcnlCYXJyaWVyMiBpbWdfYmFyWzM3XTsKKyAgICBpbnQgbmJfaW1nX2JhciA9IDA7Cisg ICAgVmtCdWZmZXJNZW1vcnlCYXJyaWVyMiBidWZfYmFyWzhdOworICAgIGludCBuYl9idWZfYmFy ID0gMDsKKworICAgIEZGVmtFeGVjQ29udGV4dCAqZXhlYyA9IGZmX3ZrX2V4ZWNfZ2V0KCZjdHgt PnMsICZjdHgtPmV4ZWNfcG9vbCk7CisgICAgZmZfdmtfZXhlY19zdGFydCgmY3R4LT5zLCBleGVj KTsKKworICAgIC8qIFByZXBhcmUgZGVwcyAqLworICAgIFJFVChmZl92a19leGVjX2FkZF9kZXBf ZnJhbWUoJmN0eC0+cywgZXhlYywgZi0+cGljdHVyZS5mLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgVktfUElQRUxJTkVfU1RBR0VfMl9BTExfQ09NTUFORFNfQklULAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfUElQRUxJTkVfU1RBR0VfMl9DT01QVVRFX1NI QURFUl9CSVQpKTsKKworICAgIGVyciA9IGZmX3ZrX2V4ZWNfbWlycm9yX3NlbV92YWx1ZSgmY3R4 LT5zLCBleGVjLCAmdnAtPnNlbSwgJnZwLT5zZW1fdmFsdWUsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGYtPnBpY3R1cmUuZik7CisgICAgaWYgKGVyciA8IDApCisgICAg ICAgIHJldHVybiBlcnI7CisKKyAgICBpZiAoaXNfcmdiKSB7CisgICAgICAgIFJFVChmZl92a19j cmVhdGVfaW1hZ2V2aWV3cygmY3R4LT5zLCBleGVjLCByY3RfaW1hZ2Vfdmlld3MsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2cC0+ZHBiX2ZyYW1lLCBGRl9WS19SRVBfTkFU SVZFKSk7CisgICAgICAgIFJFVChmZl92a19leGVjX2FkZF9kZXBfZnJhbWUoJmN0eC0+cywgZXhl YywgdnAtPmRwYl9mcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBW S19QSVBFTElORV9TVEFHRV8yX0FMTF9DT01NQU5EU19CSVQsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgVktfUElQRUxJTkVfU1RBR0VfMl9DTEVBUl9CSVQpKTsKKyAgICAg ICAgZmZfdmtfZnJhbWVfYmFycmllcigmY3R4LT5zLCBleGVjLCBkZWNvZGVfZHN0LCBpbWdfYmFy LCAmbmJfaW1nX2JhciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19QSVBFTElORV9T VEFHRV8yX0FMTF9DT01NQU5EU19CSVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktf UElQRUxJTkVfU1RBR0VfMl9BTExfQ09NTUFORFNfQklULAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFZLX0FDQ0VTU18yX1RSQU5TRkVSX1dSSVRFX0JJVCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICBWS19JTUFHRV9MQVlPVVRfR0VORVJBTCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICBWS19RVUVVRV9GQU1JTFlfSUdOT1JFRCk7CisgICAgfQorCisgICAgaWYgKCEoZi0+ cGljdHVyZS5mLT5mbGFncyAmIEFWX0ZSQU1FX0ZMQUdfS0VZKSkgeworICAgICAgICBGRnYxVnVs a2FuRGVjb2RlUGljdHVyZSAqZnBsID0gZi0+aHdhY2NlbF9sYXN0X3BpY3R1cmVfcHJpdmF0ZTsK KyAgICAgICAgRkZWdWxrYW5EZWNvZGVQaWN0dXJlICp2cGwgPSAmZnBsLT52cDsKKworICAgICAg ICAvKiBXYWl0IG9uIHRoZSBwcmV2aW91cyBmcmFtZSAqLworICAgICAgICBSRVQoZmZfdmtfZXhl Y19hZGRfZGVwX3dhaXRfc2VtKCZjdHgtPnMsIGV4ZWMsIHZwbC0+c2VtLCB2cGwtPnNlbV92YWx1 ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19QSVBFTElORV9T VEFHRV8yX0FMTF9DT01NQU5EU19CSVQpKTsKKyAgICB9CisKKyAgICBSRVQoZmZfdmtfZXhlY19h ZGRfZGVwX2J1ZigmY3R4LT5zLCBleGVjLCAmZnAtPnNsaWNlX3N0YXRlLCAxLCAxKSk7CisgICAg UkVUKGZmX3ZrX2V4ZWNfYWRkX2RlcF9idWYoJmN0eC0+cywgZXhlYywgJmZwLT5zbGljZV9zdGF0 dXNfYnVmLCAxLCAxKSk7CisgICAgUkVUKGZmX3ZrX2V4ZWNfYWRkX2RlcF9idWYoJmN0eC0+cywg ZXhlYywgJnZwLT5zbGljZXNfYnVmLCAxLCAwKSk7CisgICAgdnAtPnNsaWNlc19idWYgPSBOVUxM OworICAgIFJFVChmZl92a19leGVjX2FkZF9kZXBfYnVmKCZjdHgtPnMsIGV4ZWMsICZmcC0+c2xp Y2Vfb2Zmc2V0X2J1ZiwgMSwgMCkpOworICAgIGZwLT5zbGljZV9vZmZzZXRfYnVmID0gTlVMTDsK KworICAgIC8qIEVudHJ5IGJhcnJpZXIgZm9yIHRoZSBzbGljZSBzdGF0ZSAqLworICAgIGJ1Zl9i YXJbbmJfYnVmX2JhcisrXSA9IChWa0J1ZmZlck1lbW9yeUJhcnJpZXIyKSB7CisgICAgICAgIC5z VHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX0JVRkZFUl9NRU1PUllfQkFSUklFUl8yLAorICAgICAg ICAuc3JjU3RhZ2VNYXNrID0gc2xpY2Vfc3RhdGUtPnN0YWdlLAorICAgICAgICAuZHN0U3RhZ2VN YXNrID0gVktfUElQRUxJTkVfU1RBR0VfMl9DT01QVVRFX1NIQURFUl9CSVQsCisgICAgICAgIC5z cmNBY2Nlc3NNYXNrID0gc2xpY2Vfc3RhdGUtPmFjY2VzcywKKyAgICAgICAgLmRzdEFjY2Vzc01h c2sgPSBWS19BQ0NFU1NfMl9TSEFERVJfU1RPUkFHRV9SRUFEX0JJVCB8CisgICAgICAgICAgICAg ICAgICAgICAgICAgVktfQUNDRVNTXzJfU0hBREVSX1NUT1JBR0VfV1JJVEVfQklULAorICAgICAg ICAuc3JjUXVldWVGYW1pbHlJbmRleCA9IFZLX1FVRVVFX0ZBTUlMWV9JR05PUkVELAorICAgICAg ICAuZHN0UXVldWVGYW1pbHlJbmRleCA9IFZLX1FVRVVFX0ZBTUlMWV9JR05PUkVELAorICAgICAg ICAuYnVmZmVyID0gc2xpY2Vfc3RhdGUtPmJ1ZiwKKyAgICAgICAgLm9mZnNldCA9IDAsCisgICAg ICAgIC5zaXplID0gZnAtPnNsaWNlX2RhdGFfc2l6ZSpmLT5zbGljZV9jb3VudCwKKyAgICB9Owor CisgICAgdmstPkNtZFBpcGVsaW5lQmFycmllcjIoZXhlYy0+YnVmLCAmKFZrRGVwZW5kZW5jeUlu Zm8pIHsKKyAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfREVQRU5ERU5DWV9JTkZP LAorICAgICAgICAucEltYWdlTWVtb3J5QmFycmllcnMgPSBpbWdfYmFyLAorICAgICAgICAuaW1h Z2VNZW1vcnlCYXJyaWVyQ291bnQgPSBuYl9pbWdfYmFyLAorICAgICAgICAucEJ1ZmZlck1lbW9y eUJhcnJpZXJzID0gYnVmX2JhciwKKyAgICAgICAgLmJ1ZmZlck1lbW9yeUJhcnJpZXJDb3VudCA9 IG5iX2J1Zl9iYXIsCisgICAgfSk7CisgICAgc2xpY2Vfc3RhdGUtPnN0YWdlID0gYnVmX2Jhclsw XS5kc3RTdGFnZU1hc2s7CisgICAgc2xpY2Vfc3RhdGUtPmFjY2VzcyA9IGJ1Zl9iYXJbMF0uZHN0 QWNjZXNzTWFzazsKKyAgICBuYl9idWZfYmFyID0gMDsKKyAgICBuYl9pbWdfYmFyID0gMDsKKwor ICAgIC8qIFNldHVwIHNoYWRlciAqLworICAgIGZmX3ZrX3NoYWRlcl91cGRhdGVfZGVzY19idWZm ZXIoJmN0eC0+cywgZXhlYywgJmZ2LT5zZXR1cCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDEsIDAsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz bGljZV9zdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIGZwLT5z bGljZV9kYXRhX3NpemUqZi0+c2xpY2VfY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBWS19GT1JNQVRfVU5ERUZJTkVEKTsKKyAgICBmZl92a19zaGFkZXJfdXBkYXRl X2Rlc2NfYnVmZmVyKCZjdHgtPnMsIGV4ZWMsICZmdi0+c2V0dXAsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAxLCAxLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc2xpY2Vfb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgMCwgMipmLT5zbGljZV9jb3VudCpzaXplb2YodWludDMyX3QpLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgVktfRk9STUFUX1VOREVGSU5FRCk7CisgICAgZmZfdmtfc2hh ZGVyX3VwZGF0ZV9kZXNjX2J1ZmZlcigmY3R4LT5zLCBleGVjLCAmZnYtPnNldHVwLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgMiwgMCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHNsaWNlX3N0YXR1cywKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDAsIDIqZi0+c2xpY2VfY291bnQqc2l6ZW9mKHVpbnQzMl90KSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZLX0ZPUk1BVF9VTkRFRklORUQpOworCisg ICAgZmZfdmtfZXhlY19iaW5kX3NoYWRlcigmY3R4LT5zLCBleGVjLCAmZnYtPnNldHVwKTsKKyAg ICBwZCA9IChGRnYxVmtQYXJhbWV0ZXJzKSB7CisgICAgICAgIC5zbGljZV9kYXRhID0gc2xpY2Vz X2J1Zi0+YWRkcmVzcywKKyAgICAgICAgLnNsaWNlX3N0YXRlICA9IHNsaWNlX3N0YXRlLT5hZGRy ZXNzICsgZi0+c2xpY2VfY291bnQqZnAtPnNsaWNlX2RhdGFfc2l6ZSwKKworICAgICAgICAuaW1n X3NpemVbMF0gPSBmLT5waWN0dXJlLmYtPndpZHRoLAorICAgICAgICAuaW1nX3NpemVbMV0gPSBm LT5waWN0dXJlLmYtPmhlaWdodCwKKyAgICAgICAgLmNocm9tYV9zaGlmdFswXSA9IGYtPmNocm9t YV9oX3NoaWZ0LAorICAgICAgICAuY2hyb21hX3NoaWZ0WzFdID0gZi0+Y2hyb21hX3Zfc2hpZnQs CisKKyAgICAgICAgLnBsYW5lX3N0YXRlX3NpemUgPSBmcC0+cGxhbmVfc3RhdGVfc2l6ZSwKKyAg ICAgICAgLmNyY3JlZiA9IGYtPmNyY3JlZiwKKyAgICAgICAgLnJjdF9vZmZzZXQgPSAxIDw8IGJp dHMsCisKKyAgICAgICAgLmJpdHNfcGVyX3Jhd19zYW1wbGUgPSBiaXRzLAorICAgICAgICAucXVh bnRfdGFibGVfY291bnQgPSBmLT5xdWFudF90YWJsZV9jb3VudCwKKyAgICAgICAgLnZlcnNpb24g PSBmLT52ZXJzaW9uLAorICAgICAgICAubWljcm9fdmVyc2lvbiA9IGYtPm1pY3JvX3ZlcnNpb24s CisgICAgICAgIC5rZXlfZnJhbWUgPSBmLT5waWN0dXJlLmYtPmZsYWdzICYgQVZfRlJBTUVfRkxB R19LRVksCisgICAgICAgIC5wbGFuZXMgPSBhdl9waXhfZm10X2NvdW50X3BsYW5lcyhzd19mb3Jt YXQpLAorICAgICAgICAuY29kZWNfcGxhbmVzID0gZi0+cGxhbmVfY291bnQsCisgICAgICAgIC5j b2xvcl9wbGFuZXMgPSBjb2xvcl9wbGFuZXMsCisgICAgICAgIC50cmFuc3BhcmVuY3kgPSBmLT50 cmFuc3BhcmVuY3ksCisgICAgICAgIC5wbGFuYXJfcmdiID0gZmZfdmtfbXRfaXNfbnBfcmdiKHN3 X2Zvcm1hdCkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAoZmZfdmtfY291bnRfaW1hZ2VzKChB VlZrRnJhbWUgKilmLT5waWN0dXJlLmYtPmRhdGFbMF0pID4gMSksCisgICAgICAgIC5jb2xvcnNw YWNlID0gZi0+Y29sb3JzcGFjZSwKKyAgICAgICAgLmVjID0gZi0+ZWMsCisgICAgICAgIC5nb2xv bWIgPSBmLT5hYyA9PSBBQ19HT0xPTUJfUklDRSwKKyAgICAgICAgLmNoZWNrX2NyYyA9ICEhKGF2 Y3R4LT5lcnJfcmVjb2duaXRpb24gJiBBVl9FRl9DUkNDSEVDSyksCisgICAgfTsKKyAgICBmb3Ig KGludCBpID0gMDsgaSA8IGYtPnF1YW50X3RhYmxlX2NvdW50OyBpKyspCisgICAgICAgIHBkLmV4 dGVuZF9sb29rdXBbaV0gPSAoZi0+cXVhbnRfdGFibGVzW2ldWzNdWzEyN10gIT0gMCkgfHwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmLT5xdWFudF90YWJsZXNbaV1bNF1bMTI3XSAh PSAwKTsKKworCisgICAgLyogRm9yIHNvbWUgcmVhc29uIHRoZSBDIEZGdjEgZW5jb2Rlci9kZWNv ZGVyIHRyZWF0cyB0aGVzZSBkaWZmZXJlbnRseSAqLworICAgIGlmIChzd19mb3JtYXQgPT0gQVZf UElYX0ZNVF9HQlJQMTAgfHwgc3dfZm9ybWF0ID09IEFWX1BJWF9GTVRfR0JSUDEyIHx8CisgICAg ICAgIHN3X2Zvcm1hdCA9PSBBVl9QSVhfRk1UX0dCUlAxNCkKKyAgICAgICAgbWVtY3B5KHBkLmZt dF9sdXQsIChpbnQgWzRdKSB7IDIsIDEsIDAsIDMgfSwgNCpzaXplb2YoaW50KSk7CisgICAgZWxz ZSBpZiAoc3dfZm9ybWF0ID09IEFWX1BJWF9GTVRfWDJCR1IxMCkKKyAgICAgICAgbWVtY3B5KHBk LmZtdF9sdXQsIChpbnQgWzRdKSB7IDAsIDIsIDEsIDMgfSwgNCpzaXplb2YoaW50KSk7CisgICAg ZWxzZQorICAgICAgICBmZl92a19zZXRfcGVybShzd19mb3JtYXQsIHBkLmZtdF9sdXQsIDApOwor CisgICAgZmZfdmtfc2hhZGVyX3VwZGF0ZV9wdXNoX2NvbnN0KCZjdHgtPnMsIGV4ZWMsICZmdi0+ c2V0dXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZLX1NIQURFUl9TVEFH RV9DT01QVVRFX0JJVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgc2l6 ZW9mKHBkKSwgJnBkKTsKKworICAgIHZrLT5DbWREaXNwYXRjaChleGVjLT5idWYsIGYtPm51bV9o X3NsaWNlcywgZi0+bnVtX3Zfc2xpY2VzLCAxKTsKKworICAgIGlmIChpc19yZ2IpIHsKKyAgICAg ICAgQVZWa0ZyYW1lICp2a2YgPSAoQVZWa0ZyYW1lICopdnAtPmRwYl9mcmFtZS0+ZGF0YVswXTsK KyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb2xvcl9wbGFuZXM7IGkrKykKKyAgICAgICAg ICAgIHZrLT5DbWRDbGVhckNvbG9ySW1hZ2UoZXhlYy0+YnVmLCB2a2YtPmltZ1tpXSwgVktfSU1B R0VfTEFZT1VUX0dFTkVSQUwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYo KFZrQ2xlYXJDb2xvclZhbHVlKSB7IDAgfSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDEsICYoKFZrSW1hZ2VTdWJyZXNvdXJjZVJhbmdlKSB7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAuYXNwZWN0TWFzayA9IFZLX0lNQUdFX0FTUEVDVF9DT0xP Ul9CSVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAubGV2ZWxDb3Vu dCA9IDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAubGF5ZXJDb3Vu dCA9IDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKTsKKyAgICB9CisK KyAgICAvKiBSZXNldCBzaGFkZXIgKi8KKyAgICByZXNldF9zaGFkZXIgPSAmZnYtPnJlc2V0W2Yt PmFjID09IEFDX0dPTE9NQl9SSUNFXTsKKyAgICBmZl92a19zaGFkZXJfdXBkYXRlX2Rlc2NfYnVm ZmVyKCZjdHgtPnMsIGV4ZWMsIHJlc2V0X3NoYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDEsIDAsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzbGljZV9zdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIGZw LT5zbGljZV9kYXRhX3NpemUqZi0+c2xpY2VfY291bnQsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBWS19GT1JNQVRfVU5ERUZJTkVEKTsKKworICAgIGZmX3ZrX2V4ZWNfYmlu ZF9zaGFkZXIoJmN0eC0+cywgZXhlYywgcmVzZXRfc2hhZGVyKTsKKworICAgIHBkX3Jlc2V0ID0g KEZGdjFWa1Jlc2V0UGFyYW1ldGVycykgeworICAgICAgICAuc2xpY2Vfc3RhdGUgPSBzbGljZV9z dGF0ZS0+YWRkcmVzcyArIGYtPnNsaWNlX2NvdW50KmZwLT5zbGljZV9kYXRhX3NpemUsCisgICAg ICAgIC5wbGFuZV9zdGF0ZV9zaXplID0gZnAtPnBsYW5lX3N0YXRlX3NpemUsCisgICAgICAgIC5j b2RlY19wbGFuZXMgPSBmLT5wbGFuZV9jb3VudCwKKyAgICAgICAgLmtleV9mcmFtZSA9IGYtPnBp Y3R1cmUuZi0+ZmxhZ3MgJiBBVl9GUkFNRV9GTEFHX0tFWSwKKyAgICAgICAgLnZlcnNpb24gPSBm LT52ZXJzaW9uLAorICAgICAgICAubWljcm9fdmVyc2lvbiA9IGYtPm1pY3JvX3ZlcnNpb24sCisg ICAgfTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGYtPnF1YW50X3RhYmxlX2NvdW50OyBpKysp CisgICAgICAgIHBkX3Jlc2V0LmNvbnRleHRfY291bnRbaV0gPSBmLT5jb250ZXh0X2NvdW50W2ld OworCisgICAgZmZfdmtfc2hhZGVyX3VwZGF0ZV9wdXNoX2NvbnN0KCZjdHgtPnMsIGV4ZWMsIHJl c2V0X3NoYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfU0hBREVS X1NUQUdFX0NPTVBVVEVfQklULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw LCBzaXplb2YocGRfcmVzZXQpLCAmcGRfcmVzZXQpOworCisgICAgLyogU3luYyBiZXR3ZWVuIHNl dHVwIGFuZCByZXNldCBzaGFkZXJzICovCisgICAgYnVmX2JhcltuYl9idWZfYmFyKytdID0gKFZr QnVmZmVyTWVtb3J5QmFycmllcjIpIHsKKyAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZ UEVfQlVGRkVSX01FTU9SWV9CQVJSSUVSXzIsCisgICAgICAgIC5zcmNTdGFnZU1hc2sgPSBzbGlj ZV9zdGF0ZS0+c3RhZ2UsCisgICAgICAgIC5kc3RTdGFnZU1hc2sgPSBWS19QSVBFTElORV9TVEFH RV8yX0NPTVBVVEVfU0hBREVSX0JJVCwKKyAgICAgICAgLnNyY0FjY2Vzc01hc2sgPSBzbGljZV9z dGF0ZS0+YWNjZXNzLAorICAgICAgICAuZHN0QWNjZXNzTWFzayA9IFZLX0FDQ0VTU18yX1NIQURF Ul9TVE9SQUdFX1JFQURfQklULAorICAgICAgICAuc3JjUXVldWVGYW1pbHlJbmRleCA9IFZLX1FV RVVFX0ZBTUlMWV9JR05PUkVELAorICAgICAgICAuZHN0UXVldWVGYW1pbHlJbmRleCA9IFZLX1FV RVVFX0ZBTUlMWV9JR05PUkVELAorICAgICAgICAuYnVmZmVyID0gc2xpY2Vfc3RhdGUtPmJ1ZiwK KyAgICAgICAgLm9mZnNldCA9IDAsCisgICAgICAgIC5zaXplID0gZnAtPnNsaWNlX2RhdGFfc2l6 ZSpmLT5zbGljZV9jb3VudCwKKyAgICB9OworICAgIHZrLT5DbWRQaXBlbGluZUJhcnJpZXIyKGV4 ZWMtPmJ1ZiwgJihWa0RlcGVuZGVuY3lJbmZvKSB7CisgICAgICAgIC5zVHlwZSA9IFZLX1NUUlVD VFVSRV9UWVBFX0RFUEVOREVOQ1lfSU5GTywKKyAgICAgICAgLnBJbWFnZU1lbW9yeUJhcnJpZXJz ID0gaW1nX2JhciwKKyAgICAgICAgLmltYWdlTWVtb3J5QmFycmllckNvdW50ID0gbmJfaW1nX2Jh ciwKKyAgICAgICAgLnBCdWZmZXJNZW1vcnlCYXJyaWVycyA9IGJ1Zl9iYXIsCisgICAgICAgIC5i dWZmZXJNZW1vcnlCYXJyaWVyQ291bnQgPSBuYl9idWZfYmFyLAorICAgIH0pOworICAgIHNsaWNl X3N0YXRlLT5zdGFnZSA9IGJ1Zl9iYXJbMF0uZHN0U3RhZ2VNYXNrOworICAgIHNsaWNlX3N0YXRl LT5hY2Nlc3MgPSBidWZfYmFyWzBdLmRzdEFjY2Vzc01hc2s7CisgICAgbmJfYnVmX2JhciA9IDA7 CisgICAgbmJfaW1nX2JhciA9IDA7CisKKyAgICB2ay0+Q21kRGlzcGF0Y2goZXhlYy0+YnVmLCBm LT5udW1faF9zbGljZXMsIGYtPm51bV92X3NsaWNlcywKKyAgICAgICAgICAgICAgICAgICAgZi0+ cGxhbmVfY291bnQpOworCisgICAgLyogRGVjb2RlICovCisgICAgZGVjb2RlX3NoYWRlciA9ICZm di0+ZGVjb2RlW2YtPnVzZTMyYml0XVtmLT5hYyA9PSBBQ19HT0xPTUJfUklDRV1baXNfcmdiXTsK KyAgICBmZl92a19zaGFkZXJfdXBkYXRlX2Rlc2NfYnVmZmVyKCZjdHgtPnMsIGV4ZWMsIGRlY29k ZV9zaGFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCAwLCAwLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xpY2Vfc3RhdGUsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBmcC0+c2xpY2VfZGF0YV9zaXplKmYtPnNs aWNlX2NvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfRk9STUFU X1VOREVGSU5FRCk7CisgICAgZmZfdmtfc2hhZGVyX3VwZGF0ZV9pbWdfYXJyYXkoJmN0eC0+cywg ZXhlYywgZGVjb2RlX3NoYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk ZWNvZGVfZHN0LCBkZWNvZGVfZHN0X3ZpZXcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgMSwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19JTUFHRV9M QVlPVVRfR0VORVJBTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19OVUxM X0hBTkRMRSk7CisgICAgZmZfdmtfc2hhZGVyX3VwZGF0ZV9kZXNjX2J1ZmZlcigmY3R4LT5zLCBl eGVjLCBkZWNvZGVfc2hhZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg MSwgMiwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsaWNlX3N0YXR1 cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDIqZi0+c2xpY2VfY291 bnQqc2l6ZW9mKHVpbnQzMl90KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFZLX0ZPUk1BVF9VTkRFRklORUQpOworICAgIGlmIChpc19yZ2IpCisgICAgICAgIGZmX3ZrX3No YWRlcl91cGRhdGVfaW1nX2FycmF5KCZjdHgtPnMsIGV4ZWMsIGRlY29kZV9zaGFkZXIsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYtPnBpY3R1cmUuZiwgdnAtPnZpZXcu b3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCAzLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19JTUFHRV9MQVlPVVRfR0VORVJBTCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfTlVMTF9IQU5ETEUpOwor CisgICAgZmZfdmtfZXhlY19iaW5kX3NoYWRlcigmY3R4LT5zLCBleGVjLCBkZWNvZGVfc2hhZGVy KTsKKyAgICBmZl92a19zaGFkZXJfdXBkYXRlX3B1c2hfY29uc3QoJmN0eC0+cywgZXhlYywgZGVj b2RlX3NoYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfU0hBREVS X1NUQUdFX0NPTVBVVEVfQklULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw LCBzaXplb2YocGQpLCAmcGQpOworCisgICAgLyogU3luYyBiZXR3ZWVuIHJlc2V0IGFuZCBkZWNv ZGUgc2hhZGVycyAqLworICAgIGJ1Zl9iYXJbbmJfYnVmX2JhcisrXSA9IChWa0J1ZmZlck1lbW9y eUJhcnJpZXIyKSB7CisgICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX0JVRkZFUl9N RU1PUllfQkFSUklFUl8yLAorICAgICAgICAuc3JjU3RhZ2VNYXNrID0gc2xpY2Vfc3RhdGUtPnN0 YWdlLAorICAgICAgICAuZHN0U3RhZ2VNYXNrID0gVktfUElQRUxJTkVfU1RBR0VfMl9DT01QVVRF X1NIQURFUl9CSVQsCisgICAgICAgIC5zcmNBY2Nlc3NNYXNrID0gc2xpY2Vfc3RhdGUtPmFjY2Vz cywKKyAgICAgICAgLmRzdEFjY2Vzc01hc2sgPSBWS19BQ0NFU1NfMl9TSEFERVJfU1RPUkFHRV9S RUFEX0JJVCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgVktfQUNDRVNTXzJfU0hBREVSX1NU T1JBR0VfV1JJVEVfQklULAorICAgICAgICAuc3JjUXVldWVGYW1pbHlJbmRleCA9IFZLX1FVRVVF X0ZBTUlMWV9JR05PUkVELAorICAgICAgICAuZHN0UXVldWVGYW1pbHlJbmRleCA9IFZLX1FVRVVF X0ZBTUlMWV9JR05PUkVELAorICAgICAgICAuYnVmZmVyID0gc2xpY2Vfc3RhdGUtPmJ1ZiwKKyAg ICAgICAgLm9mZnNldCA9IGZwLT5zbGljZV9kYXRhX3NpemUqZi0+c2xpY2VfY291bnQsCisgICAg ICAgIC5zaXplID0gZi0+c2xpY2VfY291bnQqKGZwLT5zbGljZV9zdGF0ZV9zaXplIC0gZnAtPnNs aWNlX2RhdGFfc2l6ZSksCisgICAgfTsKKworICAgIC8qIElucHV0IGZyYW1lIGJhcnJpZXIgKi8K KyAgICBmZl92a19mcmFtZV9iYXJyaWVyKCZjdHgtPnMsIGV4ZWMsIGYtPnBpY3R1cmUuZiwgaW1n X2JhciwgJm5iX2ltZ19iYXIsCisgICAgICAgICAgICAgICAgICAgICAgICBWS19QSVBFTElORV9T VEFHRV8yX0FMTF9DT01NQU5EU19CSVQsCisgICAgICAgICAgICAgICAgICAgICAgICBWS19QSVBF TElORV9TVEFHRV8yX0NPTVBVVEVfU0hBREVSX0JJVCwKKyAgICAgICAgICAgICAgICAgICAgICAg IFZLX0FDQ0VTU19TSEFERVJfV1JJVEVfQklUIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICgh aXNfcmdiID8gVktfQUNDRVNTX1NIQURFUl9SRUFEX0JJVCA6IDApLAorICAgICAgICAgICAgICAg ICAgICAgICAgVktfSU1BR0VfTEFZT1VUX0dFTkVSQUwsCisgICAgICAgICAgICAgICAgICAgICAg ICBWS19RVUVVRV9GQU1JTFlfSUdOT1JFRCk7CisgICAgaWYgKGlzX3JnYikKKyAgICAgICAgZmZf dmtfZnJhbWVfYmFycmllcigmY3R4LT5zLCBleGVjLCB2cC0+ZHBiX2ZyYW1lLCBpbWdfYmFyLCAm bmJfaW1nX2JhciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19QSVBFTElORV9TVEFH RV8yX0FMTF9DT01NQU5EU19CSVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfUElQ RUxJTkVfU1RBR0VfMl9DT01QVVRFX1NIQURFUl9CSVQsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgVktfQUNDRVNTX1NIQURFUl9SRUFEX0JJVCB8IFZLX0FDQ0VTU19TSEFERVJfV1JJVEVf QklULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZLX0lNQUdFX0xBWU9VVF9HRU5FUkFM LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZLX1FVRVVFX0ZBTUlMWV9JR05PUkVEKTsK KworICAgIHZrLT5DbWRQaXBlbGluZUJhcnJpZXIyKGV4ZWMtPmJ1ZiwgJihWa0RlcGVuZGVuY3lJ bmZvKSB7CisgICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX0RFUEVOREVOQ1lfSU5G TywKKyAgICAgICAgLnBJbWFnZU1lbW9yeUJhcnJpZXJzID0gaW1nX2JhciwKKyAgICAgICAgLmlt YWdlTWVtb3J5QmFycmllckNvdW50ID0gbmJfaW1nX2JhciwKKyAgICAgICAgLnBCdWZmZXJNZW1v cnlCYXJyaWVycyA9IGJ1Zl9iYXIsCisgICAgICAgIC5idWZmZXJNZW1vcnlCYXJyaWVyQ291bnQg PSBuYl9idWZfYmFyLAorICAgIH0pOworICAgIHNsaWNlX3N0YXRlLT5zdGFnZSA9IGJ1Zl9iYXJb MF0uZHN0U3RhZ2VNYXNrOworICAgIHNsaWNlX3N0YXRlLT5hY2Nlc3MgPSBidWZfYmFyWzBdLmRz dEFjY2Vzc01hc2s7CisgICAgbmJfaW1nX2JhciA9IDA7CisgICAgbmJfYnVmX2JhciA9IDA7CisK KyAgICB2ay0+Q21kRGlzcGF0Y2goZXhlYy0+YnVmLCBmLT5udW1faF9zbGljZXMsIGYtPm51bV92 X3NsaWNlcywgMSk7CisKKyAgICBlcnIgPSBmZl92a19leGVjX3N1Ym1pdCgmY3R4LT5zLCBleGVj KTsKKyAgICBpZiAoZXJyIDwgMCkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIC8qIFdlIGRv bid0IG5lZWQgdGhlIHRlbXBvcmFyeSBmcmFtZSBhZnRlciBkZWNvZGluZyAqLworICAgIGF2X2Zy YW1lX2ZyZWUoJnZwLT5kcGJfZnJhbWUpOworCitmYWlsOgorICAgIHJldHVybiAwOworfQorCitz dGF0aWMgdm9pZCBkZWZpbmVfc2hhcmVkX2NvZGUoRkZWdWxrYW5TaGFkZXIgKnNoZCwgaW50IHVz ZTMyYml0KQoreworICAgIGludCBzbXBfYml0cyA9IHVzZTMyYml0ID8gMzIgOiAxNjsKKworICAg IEdMU0xDKDAsICNkZWZpbmUgREVDT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICk7CisKKyAgICBhdl9icHJpbnRmKCZzaGQtPnNyYywgIiNkZWZpbmUgUkdC X0xJTkVDQUNIRSAlaVxuIiAgICAgICAgICAgICAgICAgICAsUkdCX0xJTkVDQUNIRSk7CisgICAg YXZfYnByaW50Zigmc2hkLT5zcmMsICIjZGVmaW5lIENPTlRFWFRfU0laRSAlaVxuIiAgICAgICAg ICAgICAgICAgICAgLENPTlRFWFRfU0laRSk7CisgICAgYXZfYnByaW50Zigmc2hkLT5zcmMsICIj ZGVmaW5lIE1BWF9RVUFOVF9UQUJMRV9NQVNLIDB4JXhcbiIgICAgICAgICAgLE1BWF9RVUFOVF9U QUJMRV9NQVNLKTsKKworICAgIEdMU0xGKDAsICNkZWZpbmUgVFlQRSBpbnQlaV90ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICxzbXBfYml0cyk7CisgICAgR0xTTEYoMCwg I2RlZmluZSBWVFlQRTIgaSVpdmVjMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLHNtcF9iaXRzKTsKKyAgICBHTFNMRigwLCAjZGVmaW5lIFZUWVBFMyBpJWl2ZWMzICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsc21wX2JpdHMpOworICAgIEdMU0xEKGZm X3NvdXJjZV9yYW5nZWNvZGVyX2NvbXApOworICAgIEdMU0xEKGZmX3NvdXJjZV9mZnYxX2NvbW1v bl9jb21wKTsKK30KKworc3RhdGljIGludCBpbml0X3NldHVwX3NoYWRlcihGRlYxQ29udGV4dCAq ZiwgRkZWdWxrYW5Db250ZXh0ICpzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGRlZr RXhlY1Bvb2wgKnBvb2wsIEZGVmtTUElSVkNvbXBpbGVyICpzcHYsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEZGVnVsa2FuU2hhZGVyICpzaGQpCit7CisgICAgaW50IGVycjsKKyAgICBG RlZ1bGthbkRlc2NyaXB0b3JTZXRCaW5kaW5nICpkZXNjX3NldDsKKworICAgIHVpbnQ4X3QgKnNw dl9kYXRhOworICAgIHNpemVfdCBzcHZfbGVuOworICAgIHZvaWQgKnNwdl9vcGFxdWUgPSBOVUxM OworCisgICAgUkVUKGZmX3ZrX3NoYWRlcl9pbml0KHMsIHNoZCwgImZmdjFfZGVjX3NldHVwIiwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgVktfU0hBREVSX1NUQUdFX0NPTVBVVEVfQklULAor ICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAqW10pIHsgIkdMX0VYVF9idWZm ZXJfcmVmZXJlbmNlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICJHTF9FWFRfYnVmZmVyX3JlZmVyZW5jZTIiIH0sIDIsCisgICAgICAgICAgICAgICAgICAg ICAgICAgIDEsIDEsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDApKTsKKworICAgIC8q IENvbW1vbiBjb2RlYyBoZWFkZXIgKi8KKyAgICBHTFNMRChmZl9zb3VyY2VfY29tbW9uX2NvbXAp OworCisgICAgYWRkX3B1c2hfZGF0YShzaGQpOworCisgICAgYXZfYnByaW50Zigmc2hkLT5zcmMs ICIjZGVmaW5lIE1BWF9RVUFOVF9UQUJMRVMgJWlcbiIsIE1BWF9RVUFOVF9UQUJMRVMpOworICAg IGF2X2JwcmludGYoJnNoZC0+c3JjLCAiI2RlZmluZSBNQVhfQ09OVEVYVF9JTlBVVFMgJWlcbiIs IE1BWF9DT05URVhUX0lOUFVUUyk7CisgICAgYXZfYnByaW50Zigmc2hkLT5zcmMsICIjZGVmaW5l IE1BWF9RVUFOVF9UQUJMRV9TSVpFICVpXG4iLCBNQVhfUVVBTlRfVEFCTEVfU0laRSk7CisKKyAg ICBkZXNjX3NldCA9IChGRlZ1bGthbkRlc2NyaXB0b3JTZXRCaW5kaW5nIFtdKSB7CisgICAgICAg IHsKKyAgICAgICAgICAgIC5uYW1lICAgICAgICA9ICJyYW5nZWNvZGVyX3N0YXRpY19idWYiLAor ICAgICAgICAgICAgLnR5cGUgICAgICAgID0gVktfREVTQ1JJUFRPUl9UWVBFX1VOSUZPUk1fQlVG RkVSLAorICAgICAgICAgICAgLnN0YWdlcyAgICAgID0gVktfU0hBREVSX1NUQUdFX0NPTVBVVEVf QklULAorICAgICAgICAgICAgLm1lbV9sYXlvdXQgID0gInNjYWxhciIsCisgICAgICAgICAgICAu YnVmX2NvbnRlbnQgPSAidWludDhfdCB6ZXJvX29uZV9zdGF0ZVs1MTJdOyIsCisgICAgICAgIH0s CisgICAgICAgIHsKKyAgICAgICAgICAgIC5uYW1lICAgICAgICA9ICJjcmNfaWVlZV9idWYiLAor ICAgICAgICAgICAgLnR5cGUgICAgICAgID0gVktfREVTQ1JJUFRPUl9UWVBFX1VOSUZPUk1fQlVG RkVSLAorICAgICAgICAgICAgLnN0YWdlcyAgICAgID0gVktfU0hBREVSX1NUQUdFX0NPTVBVVEVf QklULAorICAgICAgICAgICAgLm1lbV9sYXlvdXQgID0gInNjYWxhciIsCisgICAgICAgICAgICAu YnVmX2NvbnRlbnQgPSAidWludDMyX3QgY3JjX2llZWVbMjU2XTsiLAorICAgICAgICB9LAorICAg ICAgICB7CisgICAgICAgICAgICAubmFtZSAgICAgICAgPSAicXVhbnRfYnVmIiwKKyAgICAgICAg ICAgIC50eXBlICAgICAgICA9IFZLX0RFU0NSSVBUT1JfVFlQRV9VTklGT1JNX0JVRkZFUiwKKyAg ICAgICAgICAgIC5zdGFnZXMgICAgICA9IFZLX1NIQURFUl9TVEFHRV9DT01QVVRFX0JJVCwKKyAg ICAgICAgICAgIC5tZW1fbGF5b3V0ICA9ICJzY2FsYXIiLAorICAgICAgICAgICAgLmJ1Zl9jb250 ZW50ID0gImludDE2X3QgcXVhbnRfdGFibGVbTUFYX1FVQU5UX1RBQkxFU10iCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAiW01BWF9DT05URVhUX0lOUFVUU11bTUFYX1FVQU5UX1RBQkxFX1NJ WkVdOyIsCisgICAgICAgIH0sCisgICAgfTsKKworICAgIFJFVChmZl92a19zaGFkZXJfYWRkX2Rl c2NyaXB0b3Jfc2V0KHMsIHNoZCwgZGVzY19zZXQsIDMsIDEsIDApKTsKKworICAgIGRlZmluZV9z aGFyZWRfY29kZShzaGQsIDAgLyogSXJyZWxldmFudCAqLyk7CisKKyAgICBkZXNjX3NldCA9IChG RlZ1bGthbkRlc2NyaXB0b3JTZXRCaW5kaW5nIFtdKSB7CisgICAgICAgIHsKKyAgICAgICAgICAg IC5uYW1lICAgICAgICA9ICJzbGljZV9kYXRhX2J1ZiIsCisgICAgICAgICAgICAudHlwZSAgICAg ICAgPSBWS19ERVNDUklQVE9SX1RZUEVfU1RPUkFHRV9CVUZGRVIsCisgICAgICAgICAgICAuc3Rh Z2VzICAgICAgPSBWS19TSEFERVJfU1RBR0VfQ09NUFVURV9CSVQsCisgICAgICAgICAgICAuYnVm X2NvbnRlbnQgPSAiU2xpY2VDb250ZXh0IHNsaWNlX2N0eCIsCisgICAgICAgICAgICAuYnVmX2Vs ZW1zICAgPSBmLT5tYXhfc2xpY2VfY291bnQsCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAg ICAgICAgIC5uYW1lICAgICAgICA9ICJzbGljZV9vZmZzZXRzX2J1ZiIsCisgICAgICAgICAgICAu dHlwZSAgICAgICAgPSBWS19ERVNDUklQVE9SX1RZUEVfU1RPUkFHRV9CVUZGRVIsCisgICAgICAg ICAgICAuc3RhZ2VzICAgICAgPSBWS19TSEFERVJfU1RBR0VfQ09NUFVURV9CSVQsCisgICAgICAg ICAgICAubWVtX3F1YWxpICAgPSAicmVhZG9ubHkiLAorICAgICAgICAgICAgLmJ1Zl9jb250ZW50 ID0gInVpbnQzMl90IHNsaWNlX29mZnNldHMiLAorICAgICAgICAgICAgLmJ1Zl9lbGVtcyAgID0g MipmLT5tYXhfc2xpY2VfY291bnQsCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAg IC5uYW1lICAgICAgICA9ICJzbGljZV9zdGF0dXNfYnVmIiwKKyAgICAgICAgICAgIC50eXBlICAg ICAgICA9IFZLX0RFU0NSSVBUT1JfVFlQRV9TVE9SQUdFX0JVRkZFUiwKKyAgICAgICAgICAgIC5z dGFnZXMgICAgICA9IFZLX1NIQURFUl9TVEFHRV9DT01QVVRFX0JJVCwKKyAgICAgICAgICAgIC5t ZW1fcXVhbGkgICA9ICJ3cml0ZW9ubHkiLAorICAgICAgICAgICAgLmJ1Zl9jb250ZW50ID0gInVp bnQzMl90IHNsaWNlX3N0YXR1cyIsCisgICAgICAgICAgICAuYnVmX2VsZW1zICAgPSAyKmYtPm1h eF9zbGljZV9jb3VudCwKKyAgICAgICAgfSwKKyAgICB9OworICAgIFJFVChmZl92a19zaGFkZXJf YWRkX2Rlc2NyaXB0b3Jfc2V0KHMsIHNoZCwgZGVzY19zZXQsIDMsIDAsIDApKTsKKworICAgIEdM U0xEKGZmX3NvdXJjZV9mZnYxX2RlY19zZXR1cF9jb21wKTsKKworICAgIFJFVChzcHYtPmNvbXBp bGVfc2hhZGVyKHMsIHNwdiwgc2hkLCAmc3B2X2RhdGEsICZzcHZfbGVuLCAibWFpbiIsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJnNwdl9vcGFxdWUpKTsKKyAgICBSRVQoZmZfdmtfc2hh ZGVyX2xpbmsocywgc2hkLCBzcHZfZGF0YSwgc3B2X2xlbiwgIm1haW4iKSk7CisKKyAgICBSRVQo ZmZfdmtfc2hhZGVyX3JlZ2lzdGVyX2V4ZWMocywgcG9vbCwgc2hkKSk7CisKK2ZhaWw6CisgICAg aWYgKHNwdl9vcGFxdWUpCisgICAgICAgIHNwdi0+ZnJlZV9zaGFkZXIoc3B2LCAmc3B2X29wYXF1 ZSk7CisKKyAgICByZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGluaXRfcmVzZXRfc2hhZGVy KEZGVjFDb250ZXh0ICpmLCBGRlZ1bGthbkNvbnRleHQgKnMsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEZGVmtFeGVjUG9vbCAqcG9vbCwgRkZWa1NQSVJWQ29tcGlsZXIgKnNwdiwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgRkZWdWxrYW5TaGFkZXIgKnNoZCwgaW50IGFjKQor eworICAgIGludCBlcnI7CisgICAgRkZWdWxrYW5EZXNjcmlwdG9yU2V0QmluZGluZyAqZGVzY19z ZXQ7CisKKyAgICB1aW50OF90ICpzcHZfZGF0YTsKKyAgICBzaXplX3Qgc3B2X2xlbjsKKyAgICB2 b2lkICpzcHZfb3BhcXVlID0gTlVMTDsKKyAgICBpbnQgd2dfZGltID0gRkZNSU4ocy0+cHJvcHMu cHJvcGVydGllcy5saW1pdHMubWF4Q29tcHV0ZVdvcmtHcm91cFNpemVbMF0sIDEwMjQpOworCisg ICAgUkVUKGZmX3ZrX3NoYWRlcl9pbml0KHMsIHNoZCwgImZmdjFfZGVjX3Jlc2V0IiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgVktfU0hBREVSX1NUQUdFX0NPTVBVVEVfQklULAorICAgICAg ICAgICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAqW10pIHsgIkdMX0VYVF9idWZmZXJfcmVm ZXJlbmNlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJH TF9FWFRfYnVmZmVyX3JlZmVyZW5jZTIiIH0sIDIsCisgICAgICAgICAgICAgICAgICAgICAgICAg IHdnX2RpbSwgMSwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMCkpOworCisgICAgaWYg KGFjID09IEFDX0dPTE9NQl9SSUNFKQorICAgICAgICBhdl9icHJpbnRmKCZzaGQtPnNyYywgIiNk ZWZpbmUgR09MT01CXG4iKTsKKworICAgIC8qIENvbW1vbiBjb2RlYyBoZWFkZXIgKi8KKyAgICBH TFNMRChmZl9zb3VyY2VfY29tbW9uX2NvbXApOworCisgICAgR0xTTEMoMCwgbGF5b3V0KHB1c2hf Y29uc3RhbnQsIHNjYWxhcikgdW5pZm9ybSBwdXNoQ29uc3RhbnRzIHsgICAgICAgICAgICAgKTsK KyAgICBHTFNMRigxLCAgICB1aW50IGNvbnRleHRfY291bnRbJWldOyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAsTUFYX1FVQU5UX1RBQkxFUyk7CisgICAgR0xTTEMoMSwg ICAgdThidWYgc2xpY2Vfc3RhdGU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKTsKKyAgICBHTFNMQygxLCAgICB1aW50IHBsYW5lX3N0YXRlX3NpemU7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgIEdMU0xDKDEsICAgIHVp bnQ4X3QgY29kZWNfcGxhbmVzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICk7CisgICAgR0xTTEMoMSwgICAgdWludDhfdCBrZXlfZnJhbWU7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBHTFNMQygxLCAgICB1aW50OF90 IHZlcnNpb247ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAp OworICAgIEdMU0xDKDEsICAgIHVpbnQ4X3QgbWljcm9fdmVyc2lvbjsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgR0xTTEMoMSwgICAgdWludDhfdCBwYWRk aW5nWzFdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAg ICBHTFNMQygwLCB9OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICApOworICAgIGZmX3ZrX3NoYWRlcl9hZGRfcHVzaF9jb25zdChz aGQsIDAsIHNpemVvZihGRnYxVmtSZXNldFBhcmFtZXRlcnMpLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBWS19TSEFERVJfU1RBR0VfQ09NUFVURV9CSVQpOworCisgICAgYXZfYnBy aW50Zigmc2hkLT5zcmMsICIjZGVmaW5lIE1BWF9RVUFOVF9UQUJMRVMgJWlcbiIsIE1BWF9RVUFO VF9UQUJMRVMpOworICAgIGF2X2JwcmludGYoJnNoZC0+c3JjLCAiI2RlZmluZSBNQVhfQ09OVEVY VF9JTlBVVFMgJWlcbiIsIE1BWF9DT05URVhUX0lOUFVUUyk7CisgICAgYXZfYnByaW50Zigmc2hk LT5zcmMsICIjZGVmaW5lIE1BWF9RVUFOVF9UQUJMRV9TSVpFICVpXG4iLCBNQVhfUVVBTlRfVEFC TEVfU0laRSk7CisKKyAgICBkZXNjX3NldCA9IChGRlZ1bGthbkRlc2NyaXB0b3JTZXRCaW5kaW5n IFtdKSB7CisgICAgICAgIHsKKyAgICAgICAgICAgIC5uYW1lICAgICAgICA9ICJyYW5nZWNvZGVy X3N0YXRpY19idWYiLAorICAgICAgICAgICAgLnR5cGUgICAgICAgID0gVktfREVTQ1JJUFRPUl9U WVBFX1VOSUZPUk1fQlVGRkVSLAorICAgICAgICAgICAgLnN0YWdlcyAgICAgID0gVktfU0hBREVS X1NUQUdFX0NPTVBVVEVfQklULAorICAgICAgICAgICAgLm1lbV9sYXlvdXQgID0gInNjYWxhciIs CisgICAgICAgICAgICAuYnVmX2NvbnRlbnQgPSAidWludDhfdCB6ZXJvX29uZV9zdGF0ZVs1MTJd OyIsCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgIC5uYW1lICAgICAgICA9ICJx dWFudF9idWYiLAorICAgICAgICAgICAgLnR5cGUgICAgICAgID0gVktfREVTQ1JJUFRPUl9UWVBF X1VOSUZPUk1fQlVGRkVSLAorICAgICAgICAgICAgLnN0YWdlcyAgICAgID0gVktfU0hBREVSX1NU QUdFX0NPTVBVVEVfQklULAorICAgICAgICAgICAgLm1lbV9sYXlvdXQgID0gInNjYWxhciIsCisg ICAgICAgICAgICAuYnVmX2NvbnRlbnQgPSAiaW50MTZfdCBxdWFudF90YWJsZVtNQVhfUVVBTlRf VEFCTEVTXSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJbTUFYX0NPTlRFWFRfSU5QVVRT XVtNQVhfUVVBTlRfVEFCTEVfU0laRV07IiwKKyAgICAgICAgfSwKKyAgICB9OworICAgIFJFVChm Zl92a19zaGFkZXJfYWRkX2Rlc2NyaXB0b3Jfc2V0KHMsIHNoZCwgZGVzY19zZXQsIDIsIDEsIDAp KTsKKworICAgIGRlZmluZV9zaGFyZWRfY29kZShzaGQsIDAgLyogQml0IGRlcHRoIGlycmVsZXZh bnQgZm9yIHRoZSByZXNldCBzaGFkZXIgKi8pOworICAgIGlmIChhYyA9PSBBQ19HT0xPTUJfUklD RSkKKyAgICAgICAgR0xTTEQoZmZfc291cmNlX2ZmdjFfdmxjX2NvbXApOworCisgICAgZGVzY19z ZXQgPSAoRkZWdWxrYW5EZXNjcmlwdG9yU2V0QmluZGluZyBbXSkgeworICAgICAgICB7CisgICAg ICAgICAgICAubmFtZSAgICAgICAgPSAic2xpY2VfZGF0YV9idWYiLAorICAgICAgICAgICAgLnR5 cGUgICAgICAgID0gVktfREVTQ1JJUFRPUl9UWVBFX1NUT1JBR0VfQlVGRkVSLAorICAgICAgICAg ICAgLm1lbV9xdWFsaSAgID0gInJlYWRvbmx5IiwKKyAgICAgICAgICAgIC5zdGFnZXMgICAgICA9 IFZLX1NIQURFUl9TVEFHRV9DT01QVVRFX0JJVCwKKyAgICAgICAgICAgIC5idWZfY29udGVudCA9 ICJTbGljZUNvbnRleHQgc2xpY2VfY3R4IiwKKyAgICAgICAgICAgIC5idWZfZWxlbXMgICA9IGYt Pm1heF9zbGljZV9jb3VudCwKKyAgICAgICAgfSwKKyAgICB9OworICAgIFJFVChmZl92a19zaGFk ZXJfYWRkX2Rlc2NyaXB0b3Jfc2V0KHMsIHNoZCwgZGVzY19zZXQsIDEsIDAsIDApKTsKKworICAg IEdMU0xEKGZmX3NvdXJjZV9mZnYxX3Jlc2V0X2NvbXApOworCisgICAgUkVUKHNwdi0+Y29tcGls ZV9zaGFkZXIocywgc3B2LCBzaGQsICZzcHZfZGF0YSwgJnNwdl9sZW4sICJtYWluIiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAmc3B2X29wYXF1ZSkpOworICAgIFJFVChmZl92a19zaGFk ZXJfbGluayhzLCBzaGQsIHNwdl9kYXRhLCBzcHZfbGVuLCAibWFpbiIpKTsKKworICAgIFJFVChm Zl92a19zaGFkZXJfcmVnaXN0ZXJfZXhlYyhzLCBwb29sLCBzaGQpKTsKKworZmFpbDoKKyAgICBp ZiAoc3B2X29wYXF1ZSkKKyAgICAgICAgc3B2LT5mcmVlX3NoYWRlcihzcHYsICZzcHZfb3BhcXVl KTsKKworICAgIHJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgaW5pdF9kZWNvZGVfc2hhZGVy KEZGVjFDb250ZXh0ICpmLCBGRlZ1bGthbkNvbnRleHQgKnMsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBGRlZrRXhlY1Bvb2wgKnBvb2wsIEZGVmtTUElSVkNvbXBpbGVyICpzcHYsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGRlZ1bGthblNoYWRlciAqc2hkLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgQVZIV0ZyYW1lc0NvbnRleHQgKmRlY19mcmFtZXNfY3R4 LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVZIV0ZyYW1lc0NvbnRleHQgKm91dF9m cmFtZXNfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHVzZTMyYml0LCBp bnQgYWMsIGludCByZ2IpCit7CisgICAgaW50IGVycjsKKyAgICBGRlZ1bGthbkRlc2NyaXB0b3JT ZXRCaW5kaW5nICpkZXNjX3NldDsKKworICAgIHVpbnQ4X3QgKnNwdl9kYXRhOworICAgIHNpemVf dCBzcHZfbGVuOworICAgIHZvaWQgKnNwdl9vcGFxdWUgPSBOVUxMOworICAgIGludCB1c2VfY2Fj aGVkX3JlYWRlciA9IGFjICE9IEFDX0dPTE9NQl9SSUNFICYmCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcy0+ZHJpdmVyX3Byb3BzLmRyaXZlcklEID09IFZLX0RSSVZFUl9JRF9NRVNBX1JB RFY7CisKKyAgICBSRVQoZmZfdmtfc2hhZGVyX2luaXQocywgc2hkLCAiZmZ2MV9kZWMiLAorICAg ICAgICAgICAgICAgICAgICAgICAgICBWS19TSEFERVJfU1RBR0VfQ09NUFVURV9CSVQsCisgICAg ICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBjaGFyICpbXSkgeyAiR0xfRVhUX2J1ZmZlcl9y ZWZlcmVuY2UiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IkdMX0VYVF9idWZmZXJfcmVmZXJlbmNlMiIgfSwgMiwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgdXNlX2NhY2hlZF9yZWFkZXIgPyBDT05URVhUX1NJWkUgOiAxLCAxLCAxLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAwKSk7CisKKyAgICBpZiAoYWMgPT0gQUNfR09MT01CX1JJQ0UpCisg ICAgICAgIGF2X2JwcmludGYoJnNoZC0+c3JjLCAiI2RlZmluZSBHT0xPTUJcbiIpOworCisgICAg aWYgKHJnYikKKyAgICAgICAgYXZfYnByaW50Zigmc2hkLT5zcmMsICIjZGVmaW5lIFJHQlxuIik7 CisKKyAgICBpZiAodXNlX2NhY2hlZF9yZWFkZXIpCisgICAgICAgIGF2X2JwcmludGYoJnNoZC0+ c3JjLCAiI2RlZmluZSBDQUNIRURfU1lNQk9MX1JFQURFUiAxXG4iKTsKKworICAgIC8qIENvbW1v biBjb2RlYyBoZWFkZXIgKi8KKyAgICBHTFNMRChmZl9zb3VyY2VfY29tbW9uX2NvbXApOworCisg ICAgYWRkX3B1c2hfZGF0YShzaGQpOworCisgICAgYXZfYnByaW50Zigmc2hkLT5zcmMsICIjZGVm aW5lIE1BWF9RVUFOVF9UQUJMRVMgJWlcbiIsIE1BWF9RVUFOVF9UQUJMRVMpOworICAgIGF2X2Jw cmludGYoJnNoZC0+c3JjLCAiI2RlZmluZSBNQVhfQ09OVEVYVF9JTlBVVFMgJWlcbiIsIE1BWF9D T05URVhUX0lOUFVUUyk7CisgICAgYXZfYnByaW50Zigmc2hkLT5zcmMsICIjZGVmaW5lIE1BWF9R VUFOVF9UQUJMRV9TSVpFICVpXG4iLCBNQVhfUVVBTlRfVEFCTEVfU0laRSk7CisKKyAgICBkZXNj X3NldCA9IChGRlZ1bGthbkRlc2NyaXB0b3JTZXRCaW5kaW5nIFtdKSB7CisgICAgICAgIHsKKyAg ICAgICAgICAgIC5uYW1lICAgICAgICA9ICJyYW5nZWNvZGVyX3N0YXRpY19idWYiLAorICAgICAg ICAgICAgLnR5cGUgICAgICAgID0gVktfREVTQ1JJUFRPUl9UWVBFX1VOSUZPUk1fQlVGRkVSLAor ICAgICAgICAgICAgLnN0YWdlcyAgICAgID0gVktfU0hBREVSX1NUQUdFX0NPTVBVVEVfQklULAor ICAgICAgICAgICAgLm1lbV9sYXlvdXQgID0gInNjYWxhciIsCisgICAgICAgICAgICAuYnVmX2Nv bnRlbnQgPSAidWludDhfdCB6ZXJvX29uZV9zdGF0ZVs1MTJdOyIsCisgICAgICAgIH0sCisgICAg ICAgIHsKKyAgICAgICAgICAgIC5uYW1lICAgICAgICA9ICJxdWFudF9idWYiLAorICAgICAgICAg ICAgLnR5cGUgICAgICAgID0gVktfREVTQ1JJUFRPUl9UWVBFX1VOSUZPUk1fQlVGRkVSLAorICAg ICAgICAgICAgLnN0YWdlcyAgICAgID0gVktfU0hBREVSX1NUQUdFX0NPTVBVVEVfQklULAorICAg ICAgICAgICAgLm1lbV9sYXlvdXQgID0gInNjYWxhciIsCisgICAgICAgICAgICAuYnVmX2NvbnRl bnQgPSAiaW50MTZfdCBxdWFudF90YWJsZVtNQVhfUVVBTlRfVEFCTEVTXSIKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICJbTUFYX0NPTlRFWFRfSU5QVVRTXVtNQVhfUVVBTlRfVEFCTEVfU0la RV07IiwKKyAgICAgICAgfSwKKyAgICB9OworCisgICAgUkVUKGZmX3ZrX3NoYWRlcl9hZGRfZGVz Y3JpcHRvcl9zZXQocywgc2hkLCBkZXNjX3NldCwgMiwgMSwgMCkpOworCisgICAgZGVmaW5lX3No YXJlZF9jb2RlKHNoZCwgdXNlMzJiaXQpOworICAgIGlmIChhYyA9PSBBQ19HT0xPTUJfUklDRSkK KyAgICAgICAgR0xTTEQoZmZfc291cmNlX2ZmdjFfdmxjX2NvbXApOworCisgICAgZGVzY19zZXQg PSAoRkZWdWxrYW5EZXNjcmlwdG9yU2V0QmluZGluZyBbXSkgeworICAgICAgICB7CisgICAgICAg ICAgICAubmFtZSAgICAgICAgPSAic2xpY2VfZGF0YV9idWYiLAorICAgICAgICAgICAgLnR5cGUg ICAgICAgID0gVktfREVTQ1JJUFRPUl9UWVBFX1NUT1JBR0VfQlVGRkVSLAorICAgICAgICAgICAg LnN0YWdlcyAgICAgID0gVktfU0hBREVSX1NUQUdFX0NPTVBVVEVfQklULAorICAgICAgICAgICAg LmJ1Zl9jb250ZW50ID0gIlNsaWNlQ29udGV4dCBzbGljZV9jdHgiLAorICAgICAgICAgICAgLmJ1 Zl9lbGVtcyAgID0gZi0+bWF4X3NsaWNlX2NvdW50LAorICAgICAgICB9LAorICAgICAgICB7Cisg ICAgICAgICAgICAubmFtZSAgICAgICA9ICJkZWMiLAorICAgICAgICAgICAgLnR5cGUgICAgICAg PSBWS19ERVNDUklQVE9SX1RZUEVfU1RPUkFHRV9JTUFHRSwKKyAgICAgICAgICAgIC5kaW1lbnNp b25zID0gMiwKKyAgICAgICAgICAgIC5tZW1fbGF5b3V0ID0gZmZfdmtfc2hhZGVyX3JlcF9mbXQo ZGVjX2ZyYW1lc19jdHgtPnN3X2Zvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgRkZfVktfUkVQX05BVElWRSksCisgICAgICAgICAgICAuZWxlbXMg ICAgICA9IGF2X3BpeF9mbXRfY291bnRfcGxhbmVzKGRlY19mcmFtZXNfY3R4LT5zd19mb3JtYXQp LAorICAgICAgICAgICAgLnN0YWdlcyAgICAgPSBWS19TSEFERVJfU1RBR0VfQ09NUFVURV9CSVQs CisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgIC5uYW1lICAgICAgICA9ICJzbGlj ZV9zdGF0dXNfYnVmIiwKKyAgICAgICAgICAgIC50eXBlICAgICAgICA9IFZLX0RFU0NSSVBUT1Jf VFlQRV9TVE9SQUdFX0JVRkZFUiwKKyAgICAgICAgICAgIC5zdGFnZXMgICAgICA9IFZLX1NIQURF Ul9TVEFHRV9DT01QVVRFX0JJVCwKKyAgICAgICAgICAgIC5tZW1fcXVhbGkgICA9ICJ3cml0ZW9u bHkiLAorICAgICAgICAgICAgLmJ1Zl9jb250ZW50ID0gInVpbnQzMl90IHNsaWNlX3N0YXR1cyIs CisgICAgICAgICAgICAuYnVmX2VsZW1zICAgPSAyKmYtPm1heF9zbGljZV9jb3VudCwKKyAgICAg ICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgLm5hbWUgICAgICAgPSAiZHN0IiwKKyAgICAg ICAgICAgIC50eXBlICAgICAgID0gVktfREVTQ1JJUFRPUl9UWVBFX1NUT1JBR0VfSU1BR0UsCisg ICAgICAgICAgICAuZGltZW5zaW9ucyA9IDIsCisgICAgICAgICAgICAubWVtX2xheW91dCA9IGZm X3ZrX3NoYWRlcl9yZXBfZm10KG91dF9mcmFtZXNfY3R4LT5zd19mb3JtYXQsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZGX1ZLX1JFUF9OQVRJVkUpLAor ICAgICAgICAgICAgLm1lbV9xdWFsaSAgPSAid3JpdGVvbmx5IiwKKyAgICAgICAgICAgIC5lbGVt cyAgICAgID0gYXZfcGl4X2ZtdF9jb3VudF9wbGFuZXMob3V0X2ZyYW1lc19jdHgtPnN3X2Zvcm1h dCksCisgICAgICAgICAgICAuc3RhZ2VzICAgICA9IFZLX1NIQURFUl9TVEFHRV9DT01QVVRFX0JJ VCwKKyAgICAgICAgfSwKKyAgICB9OworICAgIFJFVChmZl92a19zaGFkZXJfYWRkX2Rlc2NyaXB0 b3Jfc2V0KHMsIHNoZCwgZGVzY19zZXQsIDMgKyByZ2IsIDAsIDApKTsKKworICAgIEdMU0xEKGZm X3NvdXJjZV9mZnYxX2RlY19jb21wKTsKKworICAgIFJFVChzcHYtPmNvbXBpbGVfc2hhZGVyKHMs IHNwdiwgc2hkLCAmc3B2X2RhdGEsICZzcHZfbGVuLCAibWFpbiIsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJnNwdl9vcGFxdWUpKTsKKyAgICBSRVQoZmZfdmtfc2hhZGVyX2xpbmsocywg c2hkLCBzcHZfZGF0YSwgc3B2X2xlbiwgIm1haW4iKSk7CisKKyAgICBSRVQoZmZfdmtfc2hhZGVy X3JlZ2lzdGVyX2V4ZWMocywgcG9vbCwgc2hkKSk7CisKK2ZhaWw6CisgICAgaWYgKHNwdl9vcGFx dWUpCisgICAgICAgIHNwdi0+ZnJlZV9zaGFkZXIoc3B2LCAmc3B2X29wYXF1ZSk7CisKKyAgICBy ZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGluaXRfaW5kaXJlY3QoQVZDb2RlY0NvbnRleHQg KmF2Y3R4LCBGRlZ1bGthbkNvbnRleHQgKnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgQVZC dWZmZXJSZWYgKipkc3QsIGVudW0gQVZQaXhlbEZvcm1hdCBzd19mb3JtYXQpCit7CisgICAgaW50 IGVycjsKKyAgICBBVkhXRnJhbWVzQ29udGV4dCAqZnJhbWVzX2N0eDsKKyAgICBBVlZ1bGthbkZy YW1lc0NvbnRleHQgKnZrX2ZyYW1lczsKKyAgICBGRlYxQ29udGV4dCAqZiA9IGF2Y3R4LT5wcml2 X2RhdGE7CisKKyAgICAqZHN0ID0gYXZfaHdmcmFtZV9jdHhfYWxsb2Mocy0+ZGV2aWNlX3JlZik7 CisgICAgaWYgKCEoKmRzdCkpCisgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7CisKKyAg ICBmcmFtZXNfY3R4ID0gKEFWSFdGcmFtZXNDb250ZXh0ICopKCgqZHN0KS0+ZGF0YSk7CisgICAg ZnJhbWVzX2N0eC0+Zm9ybWF0ICAgID0gQVZfUElYX0ZNVF9WVUxLQU47CisgICAgZnJhbWVzX2N0 eC0+c3dfZm9ybWF0ID0gc3dfZm9ybWF0OworICAgIGZyYW1lc19jdHgtPndpZHRoICAgICA9IHMt PmZyYW1lcy0+d2lkdGg7CisgICAgZnJhbWVzX2N0eC0+aGVpZ2h0ICAgID0gZi0+bnVtX3Zfc2xp Y2VzKlJHQl9MSU5FQ0FDSEU7CisKKyAgICB2a19mcmFtZXMgPSBmcmFtZXNfY3R4LT5od2N0eDsK KyAgICB2a19mcmFtZXMtPnRpbGluZyAgICA9IFZLX0lNQUdFX1RJTElOR19PUFRJTUFMOworICAg IHZrX2ZyYW1lcy0+aW1nX2ZsYWdzID0gVktfSU1BR0VfQ1JFQVRFX01VVEFCTEVfRk9STUFUX0JJ VDsKKyAgICB2a19mcmFtZXMtPnVzYWdlICAgICA9IFZLX0lNQUdFX1VTQUdFX1NUT1JBR0VfQklU IHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFZLX0lNQUdFX1VTQUdFX1RSQU5TRkVSX0RT VF9CSVQ7CisKKyAgICBlcnIgPSBhdl9od2ZyYW1lX2N0eF9pbml0KCpkc3QpOworICAgIGlmIChl cnIgPCAwKSB7CisgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiVW5hYmxlIHRv IGluaXRpYWxpemUgZnJhbWUgcG9vbCB3aXRoIGZvcm1hdCAlczogJXNcbiIsCisgICAgICAgICAg ICAgICBhdl9nZXRfcGl4X2ZtdF9uYW1lKHN3X2Zvcm1hdCksIGF2X2VycjJzdHIoZXJyKSk7Cisg ICAgICAgIGF2X2J1ZmZlcl91bnJlZihkc3QpOworICAgICAgICByZXR1cm4gZXJyOworICAgIH0K KworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB2a19kZWNvZGVfZmZ2MV91bmluaXQo RkZWdWxrYW5EZWNvZGVTaGFyZWQgKmN0eCkKK3sKKyAgICBGRnYxVnVsa2FuRGVjb2RlQ29udGV4 dCAqZnYgPSBjdHgtPnNkX2N0eDsKKworICAgIGZmX3ZrX3NoYWRlcl9mcmVlKCZjdHgtPnMsICZm di0+c2V0dXApOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyOyBpKyspIC8qIDE2LzMyIGJp dCAqLworICAgICAgICBhdl9idWZmZXJfdW5yZWYoJmZ2LT5pbnRlcm1lZGlhdGVfZnJhbWVzX3Jl ZltpXSk7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDI7IGkrKykgLyogQUMvR29sb21iICov CisgICAgICAgIGZmX3ZrX3NoYWRlcl9mcmVlKCZjdHgtPnMsICZmdi0+cmVzZXRbaV0pOworCisg ICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyOyBpKyspIC8qIDE2LzMyIGJpdCAqLworICAgICAgICBm b3IgKGludCBqID0gMDsgaiA8IDI7IGorKykgLyogQUMvR29sb21iICovCisgICAgICAgICAgICBm b3IgKGludCBrID0gMDsgayA8IDI7IGsrKykgLyogTm9ybWFsL1JHQiAqLworICAgICAgICAgICAg ICAgIGZmX3ZrX3NoYWRlcl9mcmVlKCZjdHgtPnMsICZmdi0+ZGVjb2RlW2ldW2pdW2tdKTsKKwor ICAgIGZmX3ZrX2ZyZWVfYnVmKCZjdHgtPnMsICZmdi0+cXVhbnRfYnVmKTsKKyAgICBmZl92a19m cmVlX2J1ZigmY3R4LT5zLCAmZnYtPnJhbmdlY29kZXJfc3RhdGljX2J1Zik7CisgICAgZmZfdmtf ZnJlZV9idWYoJmN0eC0+cywgJmZ2LT5jcmNfdGFiX2J1Zik7CisKKyAgICBhdl9idWZmZXJfcG9v bF91bmluaXQoJmZ2LT5zbGljZV9zdGF0ZV9wb29sKTsKKyAgICBhdl9idWZmZXJfcG9vbF91bmlu aXQoJmZ2LT5zbGljZV9vZmZzZXRfcG9vbCk7CisgICAgYXZfYnVmZmVyX3Bvb2xfdW5pbml0KCZm di0+c2xpY2Vfc3RhdHVzX3Bvb2wpOworCisgICAgYXZfZnJlZXAoJmZ2KTsKK30KKworc3RhdGlj IGludCB2a19kZWNvZGVfZmZ2MV9pbml0KEFWQ29kZWNDb250ZXh0ICphdmN0eCkKK3sKKyAgICBp bnQgZXJyOworICAgIEZGVjFDb250ZXh0ICpmID0gYXZjdHgtPnByaXZfZGF0YTsKKyAgICBGRlZ1 bGthbkRlY29kZUNvbnRleHQgKmRlYyA9IGF2Y3R4LT5pbnRlcm5hbC0+aHdhY2NlbF9wcml2X2Rh dGE7CisgICAgRkZWdWxrYW5EZWNvZGVTaGFyZWQgKmN0eCA9IE5VTEw7CisgICAgRkZ2MVZ1bGth bkRlY29kZUNvbnRleHQgKmZ2OworICAgIEZGVmtTUElSVkNvbXBpbGVyICpzcHY7CisKKyAgICBp ZiAoZi0+dmVyc2lvbiA8IDMgfHwKKyAgICAgICAgKGYtPnZlcnNpb24gPT0gNCAmJiBmLT5taWNy b192ZXJzaW9uID4gMykpCisgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT1RTVVApOworCisgICAg c3B2ID0gZmZfdmtfc3BpcnZfaW5pdCgpOworICAgIGlmICghc3B2KSB7CisgICAgICAgIGF2X2xv ZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiVW5hYmxlIHRvIGluaXRpYWxpemUgU1BJUi1WIGNvbXBp bGVyIVxuIik7CisgICAgICAgIHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOworICAgIH0KKworICAg IGVyciA9IGZmX3ZrX2RlY29kZV9pbml0KGF2Y3R4KTsKKyAgICBpZiAoZXJyIDwgMCkKKyAgICAg ICAgcmV0dXJuIGVycjsKKyAgICBjdHggPSBkZWMtPnNoYXJlZF9jdHg7CisKKyAgICBmdiA9IGN0 eC0+c2RfY3R4ID0gYXZfbWFsbG9jeihzaXplb2YoKmZ2KSk7CisgICAgaWYgKCFmdikgeworICAg ICAgICBlcnIgPSBBVkVSUk9SKEVOT01FTSk7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisK KyAgICBjdHgtPnNkX2N0eF9mcmVlID0gJnZrX2RlY29kZV9mZnYxX3VuaW5pdDsKKworICAgIC8q IEludGVybWVkaWF0ZSBmcmFtZSBwb29sIGZvciBSQ1QgKi8KKyAgICBmb3IgKGludCBpID0gMDsg aSA8IDI7IGkrKykgeyAvKiAxNi8zMiBiaXQgKi8KKyAgICAgICAgUkVUKGluaXRfaW5kaXJlY3Qo YXZjdHgsICZjdHgtPnMsICZmdi0+aW50ZXJtZWRpYXRlX2ZyYW1lc19yZWZbaV0sCisgICAgICAg ICAgICAgICAgICAgICAgICAgIGkgPyBBVl9QSVhfRk1UX0dCUkFQMzIgOiBBVl9QSVhfRk1UX0dC UkFQMTYpKTsKKyAgICB9CisKKyAgICAvKiBTZXR1cCBzaGFkZXIgKi8KKyAgICBSRVQoaW5pdF9z ZXR1cF9zaGFkZXIoZiwgJmN0eC0+cywgJmN0eC0+ZXhlY19wb29sLCBzcHYsICZmdi0+c2V0dXAp KTsKKworICAgIC8qIFJlc2V0IHNoYWRlcnMgKi8KKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDI7 IGkrKykgeyAvKiBBQy9Hb2xvbWIgKi8KKyAgICAgICAgUkVUKGluaXRfcmVzZXRfc2hhZGVyKGYs ICZjdHgtPnMsICZjdHgtPmV4ZWNfcG9vbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHNwdiwgJmZ2LT5yZXNldFtpXSwgIWkgPyBBQ19SQU5HRV9DVVNUT01fVEFCIDogMCkpOworICAg IH0KKworICAgIC8qIERlY29kZSBzaGFkZXJzICovCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAy OyBpKyspIHsgLyogMTYvMzIgYml0ICovCisgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgMjsg aisrKSB7IC8qIEFDL0dvbG9tYiAqLworICAgICAgICAgICAgZm9yIChpbnQgayA9IDA7IGsgPCAy OyBrKyspIHsgLyogTm9ybWFsL1JHQiAqLworICAgICAgICAgICAgICAgIEFWSFdGcmFtZXNDb250 ZXh0ICpkZWNfZnJhbWVzX2N0eDsKKyAgICAgICAgICAgICAgICBkZWNfZnJhbWVzX2N0eCA9IGsg PyAoQVZIV0ZyYW1lc0NvbnRleHQgKilmdi0+aW50ZXJtZWRpYXRlX2ZyYW1lc19yZWZbaV0tPmRh dGEgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChBVkhXRnJhbWVzQ29u dGV4dCAqKWF2Y3R4LT5od19mcmFtZXNfY3R4LT5kYXRhOworICAgICAgICAgICAgICAgIFJFVChp bml0X2RlY29kZV9zaGFkZXIoZiwgJmN0eC0+cywgJmN0eC0+ZXhlY19wb29sLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3B2LCAmZnYtPmRlY29kZVtpXVtqXVtrXSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY19mcmFtZXNfY3R4LAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEFWSFdGcmFtZXNDb250ZXh0 ICopYXZjdHgtPmh3X2ZyYW1lc19jdHgtPmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IWogPyBBQ19SQU5HRV9DVVNUT01fVEFCIDogQUNfR09MT01CX1JJQ0UsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBrKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K KyAgICB9CisKKyAgICAvKiBSYW5nZSBjb2RlciBkYXRhICovCisgICAgUkVUKGZmX2ZmdjFfdmtf aW5pdF9zdGF0ZV90cmFuc2l0aW9uX2RhdGEoJmN0eC0+cywKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAmZnYtPnJhbmdlY29kZXJfc3RhdGljX2J1ZiwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmKSk7CisKKyAgICAv KiBRdWFudGl6YXRpb24gdGFibGUgZGF0YSAqLworICAgIFJFVChmZl9mZnYxX3ZrX2luaXRfcXVh bnRfdGFibGVfZGF0YSgmY3R4LT5zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAmZnYtPnF1YW50X2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZikpOworCisgICAgLyogQ1JDIHRhYmxlIGJ1ZmZlciAqLworICAgIFJFVChmZl9m ZnYxX3ZrX2luaXRfY3JjX3RhYmxlX2RhdGEoJmN0eC0+cywKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICZmdi0+Y3JjX3RhYl9idWYsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBmKSk7CisKKyAgICAvKiBVcGRhdGUgc2V0dXAgZ2xvYmFsIGRl c2NyaXB0b3JzICovCisgICAgUkVUKGZmX3ZrX3NoYWRlcl91cGRhdGVfZGVzY19idWZmZXIoJmN0 eC0+cywgJmN0eC0+ZXhlY19wb29sLmNvbnRleHRzWzBdLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICZmdi0+c2V0dXAsIDAsIDAsIDAsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJmZ2LT5yYW5nZWNvZGVyX3N0YXRpY19idWYsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgZnYtPnJhbmdlY29kZXJfc3Rh dGljX2J1Zi5zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZL X0ZPUk1BVF9VTkRFRklORUQpKTsKKyAgICBSRVQoZmZfdmtfc2hhZGVyX3VwZGF0ZV9kZXNjX2J1 ZmZlcigmY3R4LT5zLCAmY3R4LT5leGVjX3Bvb2wuY29udGV4dHNbMF0sCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZ2LT5zZXR1cCwgMCwgMSwgMCwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZnYtPmNyY190YWJfYnVmLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIGZ2LT5jcmNfdGFiX2J1Zi5zaXpl LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZLX0ZPUk1BVF9VTkRF RklORUQpKTsKKworICAgIC8qIFVwZGF0ZSBkZWNvZGUgZ2xvYmFsIGRlc2NyaXB0b3JzICovCisg ICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyOyBpKyspIHsgLyogMTYvMzIgYml0ICovCisgICAgICAg IGZvciAoaW50IGogPSAwOyBqIDwgMjsgaisrKSB7IC8qIEFDL0dvbG9tYiAqLworICAgICAgICAg ICAgZm9yIChpbnQgayA9IDA7IGsgPCAyOyBrKyspIHsgLyogTm9ybWFsL1JHQiAqLworICAgICAg ICAgICAgICAgIFJFVChmZl92a19zaGFkZXJfdXBkYXRlX2Rlc2NfYnVmZmVyKCZjdHgtPnMsICZj dHgtPmV4ZWNfcG9vbC5jb250ZXh0c1swXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAmZnYtPmRlY29kZVtpXVtqXVtrXSwgMCwgMCwgMCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZnYtPnJh bmdlY29kZXJfc3RhdGljX2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAwLCBmdi0+cmFuZ2Vjb2Rlcl9zdGF0aWNfYnVmLnNpemUsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfRk9STUFU X1VOREVGSU5FRCkpOworICAgICAgICAgICAgICAgIFJFVChmZl92a19zaGFkZXJfdXBkYXRlX2Rl c2NfYnVmZmVyKCZjdHgtPnMsICZjdHgtPmV4ZWNfcG9vbC5jb250ZXh0c1swXSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZnYtPmRlY29kZVtp XVtqXVtrXSwgMCwgMSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAmZnYtPnF1YW50X2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBmdi0+cXVhbnRfYnVmLnNpemUsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfRk9STUFUX1VO REVGSU5FRCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCitmYWlsOgorICAg IHNwdi0+dW5pbml0KCZzcHYpOworCisgICAgcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQg dmtfZmZ2MV9mcmVlX2ZyYW1lX3ByaXYoQVZSZWZTdHJ1Y3RPcGFxdWUgX2h3Y3R4LCB2b2lkICpk YXRhKQoreworICAgIEFWSFdEZXZpY2VDb250ZXh0ICpkZXZfY3R4ID0gX2h3Y3R4Lm5jOworICAg IEFWVnVsa2FuRGV2aWNlQ29udGV4dCAqaHdjdHggPSBkZXZfY3R4LT5od2N0eDsKKworICAgIEZG djFWdWxrYW5EZWNvZGVQaWN0dXJlICpmcCA9IGRhdGE7CisgICAgRkZWdWxrYW5EZWNvZGVQaWN0 dXJlICp2cCA9ICZmcC0+dnA7CisgICAgRkZWa0J1ZmZlciAqc2xpY2Vfc3RhdHVzID0gKEZGVmtC dWZmZXIgKilmcC0+c2xpY2Vfc3RhdHVzX2J1Zi0+ZGF0YTsKKworICAgIGZmX3ZrX2RlY29kZV9m cmVlX2ZyYW1lKGRldl9jdHgsIHZwKTsKKworICAgIC8qIEludmFsaWRhdGUgc2xpY2Uvb3V0cHV0 IGRhdGEgaWYgbmVlZGVkICovCisgICAgaWYgKCEoc2xpY2Vfc3RhdHVzLT5mbGFncyAmIFZLX01F TU9SWV9QUk9QRVJUWV9IT1NUX0NPSEVSRU5UX0JJVCkpIHsKKyAgICAgICAgVmtNYXBwZWRNZW1v cnlSYW5nZSBpbnZhbGlkYXRlX2RhdGEgPSB7CisgICAgICAgICAgICAuc1R5cGUgPSBWS19TVFJV Q1RVUkVfVFlQRV9NQVBQRURfTUVNT1JZX1JBTkdFLAorICAgICAgICAgICAgLm1lbW9yeSA9IHNs aWNlX3N0YXR1cy0+bWVtLAorICAgICAgICAgICAgLm9mZnNldCA9IDAsCisgICAgICAgICAgICAu c2l6ZSA9IDIqZnAtPnNsaWNlX251bSpzaXplb2YodWludDMyX3QpLAorICAgICAgICB9OworICAg ICAgICB2cC0+aW52YWxpZGF0ZV9tZW1vcnlfcmFuZ2VzKGh3Y3R4LT5hY3RfZGV2LAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsICZpbnZhbGlkYXRlX2RhdGEpOworICAg IH0KKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZnAtPnNsaWNlX251bTsgaSsrKSB7CisgICAg ICAgIHVpbnQzMl90IGNyY19yZXMgPSAwOworICAgICAgICBpZiAoZnAtPmNyY19jaGVja2VkKQor ICAgICAgICAgICAgY3JjX3JlcyA9IEFWX1JOMzIoc2xpY2Vfc3RhdHVzLT5tYXBwZWRfbWVtICsg MippKnNpemVvZih1aW50MzJfdCkgKyAwKTsKKyAgICAgICAgdWludDMyX3Qgc3RhdHVzID0gQVZf Uk4zMihzbGljZV9zdGF0dXMtPm1hcHBlZF9tZW0gKyAyKmkqc2l6ZW9mKHVpbnQzMl90KSArIDQp OworICAgICAgICBpZiAoc3RhdHVzIHx8IGNyY19yZXMpCisgICAgICAgICAgICBhdl9sb2coZGV2 X2N0eCwgQVZfTE9HX0VSUk9SLCAiU2xpY2UgJWkgc3RhdHVzOiAweCV4LCBDUkMgMHgleFxuIiwK KyAgICAgICAgICAgICAgICAgICBpLCBzdGF0dXMsIGNyY19yZXMpOworICAgIH0KKworICAgIGF2 X2J1ZmZlcl91bnJlZigmdnAtPnNsaWNlc19idWYpOworICAgIGF2X2J1ZmZlcl91bnJlZigmZnAt PnNsaWNlX3N0YXRlKTsKKyAgICBhdl9idWZmZXJfdW5yZWYoJmZwLT5zbGljZV9vZmZzZXRfYnVm KTsKKyAgICBhdl9idWZmZXJfdW5yZWYoJmZwLT5zbGljZV9zdGF0dXNfYnVmKTsKK30KKworY29u c3QgRkZIV0FjY2VsIGZmX2ZmdjFfdnVsa2FuX2h3YWNjZWwgPSB7CisgICAgLnAubmFtZSAgICAg ICAgICAgICAgICA9ICJmZnYxX3Z1bGthbiIsCisgICAgLnAudHlwZSAgICAgICAgICAgICAgICA9 IEFWTUVESUFfVFlQRV9WSURFTywKKyAgICAucC5pZCAgICAgICAgICAgICAgICAgID0gQVZfQ09E RUNfSURfRkZWMSwKKyAgICAucC5waXhfZm10ICAgICAgICAgICAgID0gQVZfUElYX0ZNVF9WVUxL QU4sCisgICAgLnN0YXJ0X2ZyYW1lICAgICAgICAgICA9ICZ2a19mZnYxX3N0YXJ0X2ZyYW1lLAor ICAgIC5kZWNvZGVfc2xpY2UgICAgICAgICAgPSAmdmtfZmZ2MV9kZWNvZGVfc2xpY2UsCisgICAg LmVuZF9mcmFtZSAgICAgICAgICAgICA9ICZ2a19mZnYxX2VuZF9mcmFtZSwKKyAgICAuZnJlZV9m cmFtZV9wcml2ICAgICAgID0gJnZrX2ZmdjFfZnJlZV9mcmFtZV9wcml2LAorICAgIC5mcmFtZV9w cml2X2RhdGFfc2l6ZSAgPSBzaXplb2YoRkZ2MVZ1bGthbkRlY29kZVBpY3R1cmUpLAorICAgIC5p bml0ICAgICAgICAgICAgICAgICAgPSAmdmtfZGVjb2RlX2ZmdjFfaW5pdCwKKyAgICAudXBkYXRl X3RocmVhZF9jb250ZXh0ID0gJmZmX3ZrX3VwZGF0ZV90aHJlYWRfY29udGV4dCwKKyAgICAuZGVj b2RlX3BhcmFtcyAgICAgICAgID0gJmZmX3ZrX3BhcmFtc19pbnZhbGlkYXRlLAorICAgIC5mbHVz aCAgICAgICAgICAgICAgICAgPSAmZmZfdmtfZGVjb2RlX2ZsdXNoLAorICAgIC51bmluaXQgICAg ICAgICAgICAgICAgPSAmZmZfdmtfZGVjb2RlX3VuaW5pdCwKKyAgICAuZnJhbWVfcGFyYW1zICAg ICAgICAgID0gJmZmX3ZrX2ZyYW1lX3BhcmFtcywKKyAgICAucHJpdl9kYXRhX3NpemUgICAgICAg ID0gc2l6ZW9mKEZGVnVsa2FuRGVjb2RlQ29udGV4dCksCisgICAgLmNhcHNfaW50ZXJuYWwgICAg ICAgICA9IEhXQUNDRUxfQ0FQX0FTWU5DX1NBRkUgfCBIV0FDQ0VMX0NBUF9USFJFQURfU0FGRSwK K307Ci0tIAoyLjQ5LjEKCgpGcm9tIGE3YzRlMDdkMzQ0MmY5YjAzMTNlNGQzN2JlZmFmMzRhZmY4 MjJmOTMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCkZyb206IEphbWFpa2ExIDxsdWthc3pjejE4 QHdwLnBsPgpEYXRlOiBXZWQsIDMgU2VwIDIwMjUgMTM6Mzc6MTEgKzAwMDAKU3ViamVjdDogW1BB VENIIDA4MS8xMThdIENoYW5naW5nIHZ1bGthbiBmaWxlIGRpcmVjdG9yeQoKLS0tCiBsaWJhdmNv ZGVjL3Z1bGthbl9oMjY0LmMgfCA1OTIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgNTkyIGRlbGV0aW9ucygtKQogZGVsZXRlIG1vZGUgMTAw NjQ0IGxpYmF2Y29kZWMvdnVsa2FuX2gyNjQuYwoKZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvdnVs a2FuX2gyNjQuYyBiL2xpYmF2Y29kZWMvdnVsa2FuX2gyNjQuYwpkZWxldGVkIGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggZWJlMzA1ZTdiNS4uMDAwMDAwMDAwMAotLS0gYS9saWJhdmNvZGVjL3Z1bGth bl9oMjY0LmMKKysrIC9kZXYvbnVsbApAQCAtMSw1OTIgKzAsMCBAQAotLyoKLSAqIFRoaXMgZmls ZSBpcyBwYXJ0IG9mIEZGbXBlZy4KLSAqCi0gKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91 IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hl ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMi4x IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgot ICoKLSAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg dXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt cGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl ZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxv bmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZv dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rvbiwg TUEgMDIxMTAtMTMwMSBVU0EKLSAqLwotCi0jaW5jbHVkZSAiaDI2NGRlYy5oIgotI2luY2x1ZGUg ImgyNjRfcHMuaCIKLQotI2luY2x1ZGUgInZ1bGthbl9kZWNvZGUuaCIKLQotY29uc3QgRkZWdWxr YW5EZWNvZGVEZXNjcmlwdG9yIGZmX3ZrX2RlY19oMjY0X2Rlc2MgPSB7Ci0gICAgLmNvZGVjX2lk ICAgICAgICAgPSBBVl9DT0RFQ19JRF9IMjY0LAotICAgIC5kZWNvZGVfZXh0ZW5zaW9uID0gRkZf VktfRVhUX1ZJREVPX0RFQ09ERV9IMjY0LAotICAgIC5xdWV1ZV9mbGFncyAgICAgID0gVktfUVVF VUVfVklERU9fREVDT0RFX0JJVF9LSFIsCi0gICAgLmRlY29kZV9vcCAgICAgICAgPSBWS19WSURF T19DT0RFQ19PUEVSQVRJT05fREVDT0RFX0gyNjRfQklUX0tIUiwKLSAgICAuZXh0X3Byb3BzID0g ewotICAgICAgICAuZXh0ZW5zaW9uTmFtZSA9IFZLX1NURF9WVUxLQU5fVklERU9fQ09ERUNfSDI2 NF9ERUNPREVfRVhURU5TSU9OX05BTUUsCi0gICAgICAgIC5zcGVjVmVyc2lvbiAgID0gVktfU1RE X1ZVTEtBTl9WSURFT19DT0RFQ19IMjY0X0RFQ09ERV9TUEVDX1ZFUlNJT04sCi0gICAgfSwKLX07 Ci0KLXR5cGVkZWYgc3RydWN0IEgyNjRWdWxrYW5EZWNvZGVQaWN0dXJlIHsKLSAgICBGRlZ1bGth bkRlY29kZVBpY3R1cmUgICAgICAgICAgIHZwOwotCi0gICAgLyogQ3VycmVudCBwaWN0dXJlICov Ci0gICAgU3RkVmlkZW9EZWNvZGVIMjY0UmVmZXJlbmNlSW5mbyBoMjY0X3JlZjsKLSAgICBWa1Zp ZGVvRGVjb2RlSDI2NERwYlNsb3RJbmZvS0hSIHZraDI2NF9yZWY7Ci0KLSAgICAvKiBQaWN0dXJl IHJlZnMgKi8KLSAgICBIMjY0UGljdHVyZSAgICAgICAgICAgICAgICAgICAgKnJlZl9zcmMgICAg W0gyNjRfTUFYX1BJQ1RVUkVfQ09VTlRdOwotICAgIFN0ZFZpZGVvRGVjb2RlSDI2NFJlZmVyZW5j ZUluZm8gaDI2NF9yZWZzICBbSDI2NF9NQVhfUElDVFVSRV9DT1VOVF07Ci0gICAgVmtWaWRlb0Rl Y29kZUgyNjREcGJTbG90SW5mb0tIUiB2a2gyNjRfcmVmc1tIMjY0X01BWF9QSUNUVVJFX0NPVU5U XTsKLQotICAgIC8qIEN1cnJlbnQgcGljdHVyZSAoY29udGQuKSAqLwotICAgIFN0ZFZpZGVvRGVj b2RlSDI2NFBpY3R1cmVJbmZvICAgaDI2NHBpYzsKLSAgICBWa1ZpZGVvRGVjb2RlSDI2NFBpY3R1 cmVJbmZvS0hSIGgyNjRfcGljX2luZm87Ci19IEgyNjRWdWxrYW5EZWNvZGVQaWN0dXJlOwotCi1j b25zdCBzdGF0aWMgaW50IGgyNjRfc2NhbGluZ19saXN0OF9vcmRlcltdID0geyAwLCAzLCAxLCA0 LCAyLCA1IH07Ci0KLXN0YXRpYyBpbnQgdmtfaDI2NF9maWxsX3BpY3QoQVZDb2RlY0NvbnRleHQg KmF2Y3R4LCBIMjY0UGljdHVyZSAqKnJlZl9zcmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFZrVmlkZW9SZWZlcmVuY2VTbG90SW5mb0tIUiAqcmVmX3Nsb3QsICAgICAgIC8qIE1haW4g c3RydWN0dXJlICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZrVmlkZW9QaWN0dXJl UmVzb3VyY2VJbmZvS0hSICpyZWYsICAgICAgICAgIC8qIEdvZXMgaW4gXiAqLwotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBWa1ZpZGVvRGVjb2RlSDI2NERwYlNsb3RJbmZvS0hSICp2a2gy NjRfcmVmLCAvKiBHb2VzIGluIF4gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3Rk VmlkZW9EZWNvZGVIMjY0UmVmZXJlbmNlSW5mbyAqaDI2NF9yZWYsICAgLyogR29lcyBpbiBeICov Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEgyNjRQaWN0dXJlICpwaWMsIGludCBpc19j dXJyZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaXNfZmllbGQsIGludCBw aWN0dXJlX3N0cnVjdHVyZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRwYl9z bG90X2luZGV4KQotewotICAgIEZGVnVsa2FuRGVjb2RlQ29udGV4dCAqZGVjID0gYXZjdHgtPmlu dGVybmFsLT5od2FjY2VsX3ByaXZfZGF0YTsKLSAgICBGRlZ1bGthbkRlY29kZVNoYXJlZCAqY3R4 ID0gZGVjLT5zaGFyZWRfY3R4OwotICAgIEgyNjRWdWxrYW5EZWNvZGVQaWN0dXJlICpocCA9IHBp Yy0+aHdhY2NlbF9waWN0dXJlX3ByaXZhdGU7Ci0gICAgRkZWdWxrYW5EZWNvZGVQaWN0dXJlICp2 a3BpYyA9ICZocC0+dnA7Ci0KLSAgICBpbnQgZXJyID0gZmZfdmtfZGVjb2RlX3ByZXBhcmVfZnJh bWUoZGVjLCBwaWMtPmYsIHZrcGljLCBpc19jdXJyZW50LAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBkZWMtPmRlZGljYXRlZF9kcGIpOwotICAgIGlmIChlcnIgPCAw KQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgKmgyNjRfcmVmID0gKFN0ZFZpZGVvRGVjb2Rl SDI2NFJlZmVyZW5jZUluZm8pIHsKLSAgICAgICAgLkZyYW1lTnVtID0gcGljLT5sb25nX3JlZiA/ IHBpYy0+cGljX2lkIDogcGljLT5mcmFtZV9udW0sCi0gICAgICAgIC5QaWNPcmRlckNudCA9IHsg cGljLT5maWVsZF9wb2NbMF0sIHBpYy0+ZmllbGRfcG9jWzFdIH0sCi0gICAgICAgIC5mbGFncyA9 IChTdGRWaWRlb0RlY29kZUgyNjRSZWZlcmVuY2VJbmZvRmxhZ3MpIHsKLSAgICAgICAgICAgIC50 b3BfZmllbGRfZmxhZyAgICA9IGlzX2ZpZWxkID8gISEocGljdHVyZV9zdHJ1Y3R1cmUgJiBQSUNU X1RPUF9GSUVMRCkgICAgOiAwLAotICAgICAgICAgICAgLmJvdHRvbV9maWVsZF9mbGFnID0gaXNf ZmllbGQgPyAhIShwaWN0dXJlX3N0cnVjdHVyZSAmIFBJQ1RfQk9UVE9NX0ZJRUxEKSA6IDAsCi0g ICAgICAgICAgICAudXNlZF9mb3JfbG9uZ190ZXJtX3JlZmVyZW5jZSA9IHBpYy0+cmVmZXJlbmNl ICYmIHBpYy0+bG9uZ19yZWYsCi0gICAgICAgICAgICAvKgotICAgICAgICAgICAgICogZmxhZ3Mu aXNfbm9uX2V4aXN0aW5nIGlzIHVzZWQgdG8gaW5kaWNhdGUgd2hldGhlciB0aGUgcGljdHVyZSBp cyBtYXJrZWQgYXMKLSAgICAgICAgICAgICAqIOKAnG5vbi1leGlzdGluZ+KAnSBhcyBkZWZpbmVk IGluIHNlY3Rpb24gOC4yLjUuMiBvZiB0aGUgSVRVLVQgSC4yNjQgU3BlY2lmaWNhdGlvbjsKLSAg ICAgICAgICAgICAqIDguMi41LjIgRGVjb2RpbmcgcHJvY2VzcyBmb3IgZ2FwcyBpbiBmcmFtZV9u dW0KLSAgICAgICAgICAgICAqIGNvcnJlc3BvbmRzIHRvIHRoZSBjb2RlIGluIGgyNjRfc2xpY2Uu YzpoMjY0X2ZpZWxkX3N0YXJ0LAotICAgICAgICAgICAgICogd2hpY2ggc2V0cyB0aGUgaW52YWxp ZF9nYXAgZmxhZyB3aGVuIGRlY29kaW5nLgotICAgICAgICAgICAgICovCi0gICAgICAgICAgICAu aXNfbm9uX2V4aXN0aW5nID0gcGljLT5pbnZhbGlkX2dhcCwKLSAgICAgICAgfSwKLSAgICB9Owot Ci0gICAgKnZraDI2NF9yZWYgPSAoVmtWaWRlb0RlY29kZUgyNjREcGJTbG90SW5mb0tIUikgewot ICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9WSURFT19ERUNPREVfSDI2NF9EUEJf U0xPVF9JTkZPX0tIUiwKLSAgICAgICAgLnBTdGRSZWZlcmVuY2VJbmZvID0gaDI2NF9yZWYsCi0g ICAgfTsKLQotICAgICpyZWYgPSAoVmtWaWRlb1BpY3R1cmVSZXNvdXJjZUluZm9LSFIpIHsKLSAg ICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfVklERU9fUElDVFVSRV9SRVNPVVJDRV9J TkZPX0tIUiwKLSAgICAgICAgLmNvZGVkT2Zmc2V0ID0gKFZrT2Zmc2V0MkQpeyAwLCAwIH0sCi0g ICAgICAgIC5jb2RlZEV4dGVudCA9IChWa0V4dGVudDJEKXsgcGljLT5mLT53aWR0aCwgcGljLT5m LT5oZWlnaHQgfSwKLSAgICAgICAgLmJhc2VBcnJheUxheWVyID0gY3R4LT5jb21tb24ubGF5ZXJl ZF9kcGIgPyBkcGJfc2xvdF9pbmRleCA6IDAsCi0gICAgICAgIC5pbWFnZVZpZXdCaW5kaW5nID0g dmtwaWMtPnZpZXcucmVmWzBdLAotICAgIH07Ci0KLSAgICAqcmVmX3Nsb3QgPSAoVmtWaWRlb1Jl ZmVyZW5jZVNsb3RJbmZvS0hSKSB7Ci0gICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBF X1ZJREVPX1JFRkVSRU5DRV9TTE9UX0lORk9fS0hSLAotICAgICAgICAucE5leHQgPSB2a2gyNjRf cmVmLAotICAgICAgICAuc2xvdEluZGV4ID0gZHBiX3Nsb3RfaW5kZXgsCi0gICAgICAgIC5wUGlj dHVyZVJlc291cmNlID0gcmVmLAotICAgIH07Ci0KLSAgICBpZiAocmVmX3NyYykKLSAgICAgICAg KnJlZl9zcmMgPSBwaWM7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIFN0ZFZpZGVvSDI2 NExldmVsSWRjIGNvbnZlcnRfdG9fdmtfbGV2ZWxfaWRjKGludCBsZXZlbF9pZGMpCi17Ci0gICAg c3dpdGNoIChsZXZlbF9pZGMpIHsKLSAgICBjYXNlIDEwOiByZXR1cm4gU1REX1ZJREVPX0gyNjRf TEVWRUxfSURDXzFfMDsKLSAgICBjYXNlIDExOiByZXR1cm4gU1REX1ZJREVPX0gyNjRfTEVWRUxf SURDXzFfMTsKLSAgICBjYXNlIDEyOiByZXR1cm4gU1REX1ZJREVPX0gyNjRfTEVWRUxfSURDXzFf MjsKLSAgICBjYXNlIDEzOiByZXR1cm4gU1REX1ZJREVPX0gyNjRfTEVWRUxfSURDXzFfMzsKLSAg ICBjYXNlIDIwOiByZXR1cm4gU1REX1ZJREVPX0gyNjRfTEVWRUxfSURDXzJfMDsKLSAgICBjYXNl IDIxOiByZXR1cm4gU1REX1ZJREVPX0gyNjRfTEVWRUxfSURDXzJfMTsKLSAgICBjYXNlIDIyOiBy ZXR1cm4gU1REX1ZJREVPX0gyNjRfTEVWRUxfSURDXzJfMjsKLSAgICBjYXNlIDMwOiByZXR1cm4g U1REX1ZJREVPX0gyNjRfTEVWRUxfSURDXzNfMDsKLSAgICBjYXNlIDMxOiByZXR1cm4gU1REX1ZJ REVPX0gyNjRfTEVWRUxfSURDXzNfMTsKLSAgICBjYXNlIDMyOiByZXR1cm4gU1REX1ZJREVPX0gy NjRfTEVWRUxfSURDXzNfMjsKLSAgICBjYXNlIDQwOiByZXR1cm4gU1REX1ZJREVPX0gyNjRfTEVW RUxfSURDXzRfMDsKLSAgICBjYXNlIDQxOiByZXR1cm4gU1REX1ZJREVPX0gyNjRfTEVWRUxfSURD XzRfMTsKLSAgICBjYXNlIDQyOiByZXR1cm4gU1REX1ZJREVPX0gyNjRfTEVWRUxfSURDXzRfMjsK LSAgICBjYXNlIDUwOiByZXR1cm4gU1REX1ZJREVPX0gyNjRfTEVWRUxfSURDXzVfMDsKLSAgICBj YXNlIDUxOiByZXR1cm4gU1REX1ZJREVPX0gyNjRfTEVWRUxfSURDXzVfMTsKLSAgICBjYXNlIDUy OiByZXR1cm4gU1REX1ZJREVPX0gyNjRfTEVWRUxfSURDXzVfMjsKLSAgICBjYXNlIDYwOiByZXR1 cm4gU1REX1ZJREVPX0gyNjRfTEVWRUxfSURDXzZfMDsKLSAgICBjYXNlIDYxOiByZXR1cm4gU1RE X1ZJREVPX0gyNjRfTEVWRUxfSURDXzZfMTsKLSAgICBkZWZhdWx0OgotICAgIGNhc2UgNjI6IHJl dHVybiBTVERfVklERU9fSDI2NF9MRVZFTF9JRENfNl8yOwotICAgIH0KLX0KLQotc3RhdGljIHZv aWQgc2V0X3Nwcyhjb25zdCBTUFMgKnNwcywKLSAgICAgICAgICAgICAgICAgICAgU3RkVmlkZW9I MjY0U2NhbGluZ0xpc3RzICp2a3Nwc19zY2FsaW5nLAotICAgICAgICAgICAgICAgICAgICBTdGRW aWRlb0gyNjRIcmRQYXJhbWV0ZXJzICp2a3Nwc192dWlfaGVhZGVyLAotICAgICAgICAgICAgICAg ICAgICBTdGRWaWRlb0gyNjRTZXF1ZW5jZVBhcmFtZXRlclNldFZ1aSAqdmtzcHNfdnVpLAotICAg ICAgICAgICAgICAgICAgICBTdGRWaWRlb0gyNjRTZXF1ZW5jZVBhcmFtZXRlclNldCAqdmtzcHMp Ci17Ci0gICAgKnZrc3BzX3NjYWxpbmcgPSAoU3RkVmlkZW9IMjY0U2NhbGluZ0xpc3RzKSB7Ci0g ICAgICAgIC5zY2FsaW5nX2xpc3RfcHJlc2VudF9tYXNrID0gc3BzLT5zY2FsaW5nX21hdHJpeF9w cmVzZW50X21hc2ssCi0gICAgICAgIC51c2VfZGVmYXVsdF9zY2FsaW5nX21hdHJpeF9tYXNrID0g MCwgLyogV2UgYWxyZWFkeSBmaWxsIGluIHRoZSBkZWZhdWx0IG1hdHJpeCAqLwotICAgIH07Ci0K LSAgICBmb3IgKGludCBpID0gMDsgaSA8IFNURF9WSURFT19IMjY0X1NDQUxJTkdfTElTVF80WDRf TlVNX0xJU1RTOyBpKyspCi0gICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgU1REX1ZJREVPX0gy NjRfU0NBTElOR19MSVNUXzRYNF9OVU1fRUxFTUVOVFM7IGorKykKLSAgICAgICAgICAgIHZrc3Bz X3NjYWxpbmctPlNjYWxpbmdMaXN0NHg0W2ldW2pdID0gc3BzLT5zY2FsaW5nX21hdHJpeDRbaV1b ZmZfemlnemFnX3NjYW5bal1dOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBTVERfVklERU9f SDI2NF9TQ0FMSU5HX0xJU1RfOFg4X05VTV9MSVNUUzsgaSsrKQotICAgICAgICBmb3IgKGludCBq ID0gMDsgaiA8IFNURF9WSURFT19IMjY0X1NDQUxJTkdfTElTVF84WDhfTlVNX0VMRU1FTlRTOyBq KyspCi0gICAgICAgICAgICB2a3Nwc19zY2FsaW5nLT5TY2FsaW5nTGlzdDh4OFtpXVtqXSA9Ci0g ICAgICAgICAgICAgICAgc3BzLT5zY2FsaW5nX21hdHJpeDhbaDI2NF9zY2FsaW5nX2xpc3Q4X29y ZGVyW2ldXVtmZl96aWd6YWdfZGlyZWN0W2pdXTsKLQotICAgICp2a3Nwc192dWlfaGVhZGVyID0g KFN0ZFZpZGVvSDI2NEhyZFBhcmFtZXRlcnMpIHsKLSAgICAgICAgLmNwYl9jbnRfbWludXMxID0g c3BzLT5jcGJfY250IC0gMSwKLSAgICAgICAgLmJpdF9yYXRlX3NjYWxlID0gc3BzLT5iaXRfcmF0 ZV9zY2FsZSwKLSAgICAgICAgLmluaXRpYWxfY3BiX3JlbW92YWxfZGVsYXlfbGVuZ3RoX21pbnVz MSA9IHNwcy0+aW5pdGlhbF9jcGJfcmVtb3ZhbF9kZWxheV9sZW5ndGggLSAxLAotICAgICAgICAu Y3BiX3JlbW92YWxfZGVsYXlfbGVuZ3RoX21pbnVzMSA9IHNwcy0+Y3BiX3JlbW92YWxfZGVsYXlf bGVuZ3RoIC0gMSwKLSAgICAgICAgLmRwYl9vdXRwdXRfZGVsYXlfbGVuZ3RoX21pbnVzMSA9IHNw cy0+ZHBiX291dHB1dF9kZWxheV9sZW5ndGggLSAxLAotICAgICAgICAudGltZV9vZmZzZXRfbGVu Z3RoID0gc3BzLT50aW1lX29mZnNldF9sZW5ndGgsCi0gICAgfTsKLQotICAgIGZvciAoaW50IGkg PSAwOyBpIDwgc3BzLT5jcGJfY250OyBpKyspIHsKLSAgICAgICAgdmtzcHNfdnVpX2hlYWRlci0+ Yml0X3JhdGVfdmFsdWVfbWludXMxW2ldID0gc3BzLT5iaXRfcmF0ZV92YWx1ZVtpXSAtIDE7Ci0g ICAgICAgIHZrc3BzX3Z1aV9oZWFkZXItPmNwYl9zaXplX3ZhbHVlX21pbnVzMVtpXSA9IHNwcy0+ Y3BiX3NpemVfdmFsdWVbaV0gLSAxOwotICAgICAgICB2a3Nwc192dWlfaGVhZGVyLT5jYnJfZmxh Z1tpXSA9IChzcHMtPmNwcl9mbGFnID4+IGkpICYgMHgxOwotICAgIH0KLQotICAgICp2a3Nwc192 dWkgPSAoU3RkVmlkZW9IMjY0U2VxdWVuY2VQYXJhbWV0ZXJTZXRWdWkpIHsKLSAgICAgICAgLmFz cGVjdF9yYXRpb19pZGMgPSBzcHMtPnZ1aS5hc3BlY3RfcmF0aW9faWRjLAotICAgICAgICAuc2Fy X3dpZHRoID0gc3BzLT52dWkuc2FyLm51bSwKLSAgICAgICAgLnNhcl9oZWlnaHQgPSBzcHMtPnZ1 aS5zYXIuZGVuLAotICAgICAgICAudmlkZW9fZm9ybWF0ID0gc3BzLT52dWkudmlkZW9fZm9ybWF0 LAotICAgICAgICAuY29sb3VyX3ByaW1hcmllcyA9IHNwcy0+dnVpLmNvbG91cl9wcmltYXJpZXMs Ci0gICAgICAgIC50cmFuc2Zlcl9jaGFyYWN0ZXJpc3RpY3MgPSBzcHMtPnZ1aS50cmFuc2Zlcl9j aGFyYWN0ZXJpc3RpY3MsCi0gICAgICAgIC5tYXRyaXhfY29lZmZpY2llbnRzID0gc3BzLT52dWku bWF0cml4X2NvZWZmcywKLSAgICAgICAgLm51bV91bml0c19pbl90aWNrID0gc3BzLT5udW1fdW5p dHNfaW5fdGljaywKLSAgICAgICAgLnRpbWVfc2NhbGUgPSBzcHMtPnRpbWVfc2NhbGUsCi0gICAg ICAgIC5wSHJkUGFyYW1ldGVycyA9IHZrc3BzX3Z1aV9oZWFkZXIsCi0gICAgICAgIC5tYXhfbnVt X3Jlb3JkZXJfZnJhbWVzID0gc3BzLT5udW1fcmVvcmRlcl9mcmFtZXMsCi0gICAgICAgIC5tYXhf ZGVjX2ZyYW1lX2J1ZmZlcmluZyA9IHNwcy0+bWF4X2RlY19mcmFtZV9idWZmZXJpbmcsCi0gICAg ICAgIC5mbGFncyA9IChTdGRWaWRlb0gyNjRTcHNWdWlGbGFncykgewotICAgICAgICAgICAgLmFz cGVjdF9yYXRpb19pbmZvX3ByZXNlbnRfZmxhZyA9IHNwcy0+dnVpLmFzcGVjdF9yYXRpb19pbmZv X3ByZXNlbnRfZmxhZywKLSAgICAgICAgICAgIC5vdmVyc2Nhbl9pbmZvX3ByZXNlbnRfZmxhZyA9 IHNwcy0+dnVpLm92ZXJzY2FuX2luZm9fcHJlc2VudF9mbGFnLAotICAgICAgICAgICAgLm92ZXJz Y2FuX2FwcHJvcHJpYXRlX2ZsYWcgPSBzcHMtPnZ1aS5vdmVyc2Nhbl9hcHByb3ByaWF0ZV9mbGFn LAotICAgICAgICAgICAgLnZpZGVvX3NpZ25hbF90eXBlX3ByZXNlbnRfZmxhZyA9IHNwcy0+dnVp LnZpZGVvX3NpZ25hbF90eXBlX3ByZXNlbnRfZmxhZywKLSAgICAgICAgICAgIC52aWRlb19mdWxs X3JhbmdlX2ZsYWcgPSBzcHMtPnZ1aS52aWRlb19mdWxsX3JhbmdlX2ZsYWcsCi0gICAgICAgICAg ICAuY29sb3JfZGVzY3JpcHRpb25fcHJlc2VudF9mbGFnID0gc3BzLT52dWkuY29sb3VyX2Rlc2Ny aXB0aW9uX3ByZXNlbnRfZmxhZywKLSAgICAgICAgICAgIC5jaHJvbWFfbG9jX2luZm9fcHJlc2Vu dF9mbGFnID0gc3BzLT52dWkuY2hyb21hX2xvY2F0aW9uLAotICAgICAgICAgICAgLnRpbWluZ19p bmZvX3ByZXNlbnRfZmxhZyA9IHNwcy0+dGltaW5nX2luZm9fcHJlc2VudF9mbGFnLAotICAgICAg ICAgICAgLmZpeGVkX2ZyYW1lX3JhdGVfZmxhZyA9IHNwcy0+Zml4ZWRfZnJhbWVfcmF0ZV9mbGFn LAotICAgICAgICAgICAgLmJpdHN0cmVhbV9yZXN0cmljdGlvbl9mbGFnID0gc3BzLT5iaXRzdHJl YW1fcmVzdHJpY3Rpb25fZmxhZywKLSAgICAgICAgICAgIC5uYWxfaHJkX3BhcmFtZXRlcnNfcHJl c2VudF9mbGFnID0gc3BzLT5uYWxfaHJkX3BhcmFtZXRlcnNfcHJlc2VudF9mbGFnLAotICAgICAg ICAgICAgLnZjbF9ocmRfcGFyYW1ldGVyc19wcmVzZW50X2ZsYWcgPSBzcHMtPnZjbF9ocmRfcGFy YW1ldGVyc19wcmVzZW50X2ZsYWcsCi0gICAgICAgIH0sCi0gICAgfTsKLQotICAgICp2a3NwcyA9 IChTdGRWaWRlb0gyNjRTZXF1ZW5jZVBhcmFtZXRlclNldCkgewotICAgICAgICAucHJvZmlsZV9p ZGMgPSBzcHMtPnByb2ZpbGVfaWRjLAotICAgICAgICAubGV2ZWxfaWRjID0gY29udmVydF90b192 a19sZXZlbF9pZGMoc3BzLT5sZXZlbF9pZGMpLAotICAgICAgICAuc2VxX3BhcmFtZXRlcl9zZXRf aWQgPSBzcHMtPnNwc19pZCwKLSAgICAgICAgLmNocm9tYV9mb3JtYXRfaWRjID0gc3BzLT5jaHJv bWFfZm9ybWF0X2lkYywKLSAgICAgICAgLmJpdF9kZXB0aF9sdW1hX21pbnVzOCA9IHNwcy0+Yml0 X2RlcHRoX2x1bWEgLSA4LAotICAgICAgICAuYml0X2RlcHRoX2Nocm9tYV9taW51czggPSBzcHMt PmJpdF9kZXB0aF9jaHJvbWEgLSA4LAotICAgICAgICAubG9nMl9tYXhfZnJhbWVfbnVtX21pbnVz NCA9IHNwcy0+bG9nMl9tYXhfZnJhbWVfbnVtIC0gNCwKLSAgICAgICAgLnBpY19vcmRlcl9jbnRf dHlwZSA9IHNwcy0+cG9jX3R5cGUsCi0gICAgICAgIC5sb2cyX21heF9waWNfb3JkZXJfY250X2xz Yl9taW51czQgPSBzcHMtPnBvY190eXBlID8gMCA6IHNwcy0+bG9nMl9tYXhfcG9jX2xzYiAtIDQs Ci0gICAgICAgIC5vZmZzZXRfZm9yX25vbl9yZWZfcGljID0gc3BzLT5vZmZzZXRfZm9yX25vbl9y ZWZfcGljLAotICAgICAgICAub2Zmc2V0X2Zvcl90b3BfdG9fYm90dG9tX2ZpZWxkID0gc3BzLT5v ZmZzZXRfZm9yX3RvcF90b19ib3R0b21fZmllbGQsCi0gICAgICAgIC5udW1fcmVmX2ZyYW1lc19p bl9waWNfb3JkZXJfY250X2N5Y2xlID0gc3BzLT5wb2NfY3ljbGVfbGVuZ3RoLAotICAgICAgICAu bWF4X251bV9yZWZfZnJhbWVzID0gc3BzLT5yZWZfZnJhbWVfY291bnQsCi0gICAgICAgIC5waWNf d2lkdGhfaW5fbWJzX21pbnVzMSA9IHNwcy0+bWJfd2lkdGggLSAxLAotICAgICAgICAucGljX2hl aWdodF9pbl9tYXBfdW5pdHNfbWludXMxID0gKHNwcy0+bWJfaGVpZ2h0LygyIC0gc3BzLT5mcmFt ZV9tYnNfb25seV9mbGFnKSkgLSAxLAotICAgICAgICAuZnJhbWVfY3JvcF9sZWZ0X29mZnNldCA9 IHNwcy0+Y3JvcF9sZWZ0LAotICAgICAgICAuZnJhbWVfY3JvcF9yaWdodF9vZmZzZXQgPSBzcHMt PmNyb3BfcmlnaHQsCi0gICAgICAgIC5mcmFtZV9jcm9wX3RvcF9vZmZzZXQgPSBzcHMtPmNyb3Bf dG9wLAotICAgICAgICAuZnJhbWVfY3JvcF9ib3R0b21fb2Zmc2V0ID0gc3BzLT5jcm9wX2JvdHRv bSwKLSAgICAgICAgLmZsYWdzID0gKFN0ZFZpZGVvSDI2NFNwc0ZsYWdzKSB7Ci0gICAgICAgICAg ICAuY29uc3RyYWludF9zZXQwX2ZsYWcgPSAoc3BzLT5jb25zdHJhaW50X3NldF9mbGFncyA+PiAw KSAmIDB4MSwKLSAgICAgICAgICAgIC5jb25zdHJhaW50X3NldDFfZmxhZyA9IChzcHMtPmNvbnN0 cmFpbnRfc2V0X2ZsYWdzID4+IDEpICYgMHgxLAotICAgICAgICAgICAgLmNvbnN0cmFpbnRfc2V0 Ml9mbGFnID0gKHNwcy0+Y29uc3RyYWludF9zZXRfZmxhZ3MgPj4gMikgJiAweDEsCi0gICAgICAg ICAgICAuY29uc3RyYWludF9zZXQzX2ZsYWcgPSAoc3BzLT5jb25zdHJhaW50X3NldF9mbGFncyA+ PiAzKSAmIDB4MSwKLSAgICAgICAgICAgIC5jb25zdHJhaW50X3NldDRfZmxhZyA9IChzcHMtPmNv bnN0cmFpbnRfc2V0X2ZsYWdzID4+IDQpICYgMHgxLAotICAgICAgICAgICAgLmNvbnN0cmFpbnRf c2V0NV9mbGFnID0gKHNwcy0+Y29uc3RyYWludF9zZXRfZmxhZ3MgPj4gNSkgJiAweDEsCi0gICAg ICAgICAgICAuZGlyZWN0Xzh4OF9pbmZlcmVuY2VfZmxhZyA9IHNwcy0+ZGlyZWN0Xzh4OF9pbmZl cmVuY2VfZmxhZywKLSAgICAgICAgICAgIC5tYl9hZGFwdGl2ZV9mcmFtZV9maWVsZF9mbGFnID0g c3BzLT5tYl9hZmYsCi0gICAgICAgICAgICAuZnJhbWVfbWJzX29ubHlfZmxhZyA9IHNwcy0+ZnJh bWVfbWJzX29ubHlfZmxhZywKLSAgICAgICAgICAgIC5kZWx0YV9waWNfb3JkZXJfYWx3YXlzX3pl cm9fZmxhZyA9IHNwcy0+ZGVsdGFfcGljX29yZGVyX2Fsd2F5c196ZXJvX2ZsYWcsCi0gICAgICAg ICAgICAuc2VwYXJhdGVfY29sb3VyX3BsYW5lX2ZsYWcgPSBzcHMtPnJlc2lkdWFsX2NvbG9yX3Ry YW5zZm9ybV9mbGFnLAotICAgICAgICAgICAgLmdhcHNfaW5fZnJhbWVfbnVtX3ZhbHVlX2FsbG93 ZWRfZmxhZyA9IHNwcy0+Z2Fwc19pbl9mcmFtZV9udW1fYWxsb3dlZF9mbGFnLAotICAgICAgICAg ICAgLnFwcHJpbWVfeV96ZXJvX3RyYW5zZm9ybV9ieXBhc3NfZmxhZyA9IHNwcy0+dHJhbnNmb3Jt X2J5cGFzcywKLSAgICAgICAgICAgIC5mcmFtZV9jcm9wcGluZ19mbGFnID0gc3BzLT5jcm9wLAot ICAgICAgICAgICAgLnNlcV9zY2FsaW5nX21hdHJpeF9wcmVzZW50X2ZsYWcgPSBzcHMtPnNjYWxp bmdfbWF0cml4X3ByZXNlbnQsCi0gICAgICAgICAgICAudnVpX3BhcmFtZXRlcnNfcHJlc2VudF9m bGFnID0gc3BzLT52dWlfcGFyYW1ldGVyc19wcmVzZW50X2ZsYWcsCi0gICAgICAgIH0sCi0gICAg ICAgIC5wT2Zmc2V0Rm9yUmVmRnJhbWUgPSBzcHMtPm9mZnNldF9mb3JfcmVmX2ZyYW1lLAotICAg ICAgICAucFNjYWxpbmdMaXN0cyA9IHZrc3BzX3NjYWxpbmcsCi0gICAgICAgIC5wU2VxdWVuY2VQ YXJhbWV0ZXJTZXRWdWkgPSB2a3Nwc192dWksCi0gICAgfTsKLX0KLQotc3RhdGljIHZvaWQgc2V0 X3Bwcyhjb25zdCBQUFMgKnBwcywgY29uc3QgU1BTICpzcHMsCi0gICAgICAgICAgICAgICAgICAg IFN0ZFZpZGVvSDI2NFNjYWxpbmdMaXN0cyAqdmtwcHNfc2NhbGluZywKLSAgICAgICAgICAgICAg ICAgICAgU3RkVmlkZW9IMjY0UGljdHVyZVBhcmFtZXRlclNldCAqdmtwcHMpCi17Ci0gICAgKnZr cHBzX3NjYWxpbmcgPSAoU3RkVmlkZW9IMjY0U2NhbGluZ0xpc3RzKSB7Ci0gICAgICAgIC5zY2Fs aW5nX2xpc3RfcHJlc2VudF9tYXNrID0gcHBzLT5waWNfc2NhbGluZ19tYXRyaXhfcHJlc2VudF9t YXNrLAotICAgICAgICAudXNlX2RlZmF1bHRfc2NhbGluZ19tYXRyaXhfbWFzayA9IDAsIC8qIFdl IGFscmVhZHkgZmlsbCBpbiB0aGUgZGVmYXVsdCBtYXRyaXggKi8KLSAgICB9OwotCi0gICAgZm9y IChpbnQgaSA9IDA7IGkgPCBTVERfVklERU9fSDI2NF9TQ0FMSU5HX0xJU1RfNFg0X05VTV9MSVNU UzsgaSsrKQotICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IFNURF9WSURFT19IMjY0X1NDQUxJ TkdfTElTVF80WDRfTlVNX0VMRU1FTlRTOyBqKyspCi0gICAgICAgICAgICB2a3Bwc19zY2FsaW5n LT5TY2FsaW5nTGlzdDR4NFtpXVtqXSA9IHBwcy0+c2NhbGluZ19tYXRyaXg0W2ldW2ZmX3ppZ3ph Z19zY2FuW2pdXTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgU1REX1ZJREVPX0gyNjRfU0NB TElOR19MSVNUXzhYOF9OVU1fTElTVFM7IGkrKykKLSAgICAgICAgZm9yIChpbnQgaiA9IDA7IGog PCBTVERfVklERU9fSDI2NF9TQ0FMSU5HX0xJU1RfOFg4X05VTV9FTEVNRU5UUzsgaisrKQotICAg ICAgICAgICAgdmtwcHNfc2NhbGluZy0+U2NhbGluZ0xpc3Q4eDhbaV1bal0gPQotICAgICAgICAg ICAgICAgIHBwcy0+c2NhbGluZ19tYXRyaXg4W2gyNjRfc2NhbGluZ19saXN0OF9vcmRlcltpXV1b ZmZfemlnemFnX2RpcmVjdFtqXV07Ci0KLSAgICAqdmtwcHMgPSAoU3RkVmlkZW9IMjY0UGljdHVy ZVBhcmFtZXRlclNldCkgewotICAgICAgICAuc2VxX3BhcmFtZXRlcl9zZXRfaWQgPSBwcHMtPnNw c19pZCwKLSAgICAgICAgLnBpY19wYXJhbWV0ZXJfc2V0X2lkID0gcHBzLT5wcHNfaWQsCi0gICAg ICAgIC5udW1fcmVmX2lkeF9sMF9kZWZhdWx0X2FjdGl2ZV9taW51czEgPSBwcHMtPnJlZl9jb3Vu dFswXSAtIDEsCi0gICAgICAgIC5udW1fcmVmX2lkeF9sMV9kZWZhdWx0X2FjdGl2ZV9taW51czEg PSBwcHMtPnJlZl9jb3VudFsxXSAtIDEsCi0gICAgICAgIC53ZWlnaHRlZF9iaXByZWRfaWRjID0g cHBzLT53ZWlnaHRlZF9iaXByZWRfaWRjLAotICAgICAgICAucGljX2luaXRfcXBfbWludXMyNiA9 IHBwcy0+aW5pdF9xcCAtIDI2LAotICAgICAgICAucGljX2luaXRfcXNfbWludXMyNiA9IHBwcy0+ aW5pdF9xcyAtIDI2LAotICAgICAgICAuY2hyb21hX3FwX2luZGV4X29mZnNldCA9IHBwcy0+Y2hy b21hX3FwX2luZGV4X29mZnNldFswXSwKLSAgICAgICAgLnNlY29uZF9jaHJvbWFfcXBfaW5kZXhf b2Zmc2V0ID0gcHBzLT5jaHJvbWFfcXBfaW5kZXhfb2Zmc2V0WzFdLAotICAgICAgICAuZmxhZ3Mg PSAoU3RkVmlkZW9IMjY0UHBzRmxhZ3MpIHsKLSAgICAgICAgICAgIC50cmFuc2Zvcm1fOHg4X21v ZGVfZmxhZyA9IHBwcy0+dHJhbnNmb3JtXzh4OF9tb2RlLAotICAgICAgICAgICAgLnJlZHVuZGFu dF9waWNfY250X3ByZXNlbnRfZmxhZyA9IHBwcy0+cmVkdW5kYW50X3BpY19jbnRfcHJlc2VudCwK LSAgICAgICAgICAgIC5jb25zdHJhaW5lZF9pbnRyYV9wcmVkX2ZsYWcgPSBwcHMtPmNvbnN0cmFp bmVkX2ludHJhX3ByZWQsCi0gICAgICAgICAgICAuZGVibG9ja2luZ19maWx0ZXJfY29udHJvbF9w cmVzZW50X2ZsYWcgPSBwcHMtPmRlYmxvY2tpbmdfZmlsdGVyX3BhcmFtZXRlcnNfcHJlc2VudCwK LSAgICAgICAgICAgIC53ZWlnaHRlZF9wcmVkX2ZsYWcgPSBwcHMtPndlaWdodGVkX3ByZWQsCi0g ICAgICAgICAgICAuYm90dG9tX2ZpZWxkX3BpY19vcmRlcl9pbl9mcmFtZV9wcmVzZW50X2ZsYWcg PSBwcHMtPnBpY19vcmRlcl9wcmVzZW50LAotICAgICAgICAgICAgLmVudHJvcHlfY29kaW5nX21v ZGVfZmxhZyA9IHBwcy0+Y2FiYWMsCi0gICAgICAgICAgICAucGljX3NjYWxpbmdfbWF0cml4X3By ZXNlbnRfZmxhZyA9IHBwcy0+cGljX3NjYWxpbmdfbWF0cml4X3ByZXNlbnRfZmxhZywKLSAgICAg ICAgfSwKLSAgICAgICAgLnBTY2FsaW5nTGlzdHMgPSB2a3Bwc19zY2FsaW5nLAotICAgIH07Ci19 Ci0KLXN0YXRpYyBpbnQgdmtfaDI2NF9jcmVhdGVfcGFyYW1zKEFWQ29kZWNDb250ZXh0ICphdmN0 eCwgQVZCdWZmZXJSZWYgKipidWYpCi17Ci0gICAgaW50IGVycjsKLSAgICBGRlZ1bGthbkRlY29k ZUNvbnRleHQgKmRlYyA9IGF2Y3R4LT5pbnRlcm5hbC0+aHdhY2NlbF9wcml2X2RhdGE7Ci0gICAg RkZWdWxrYW5EZWNvZGVTaGFyZWQgKmN0eCA9IGRlYy0+c2hhcmVkX2N0eDsKLSAgICBjb25zdCBI MjY0Q29udGV4dCAqaCA9IGF2Y3R4LT5wcml2X2RhdGE7Ci0KLSAgICAvKiBTUFMgKi8KLSAgICBT dGRWaWRlb0gyNjRTY2FsaW5nTGlzdHMgdmtzcHNfc2NhbGluZ1tNQVhfU1BTX0NPVU5UXTsKLSAg ICBTdGRWaWRlb0gyNjRIcmRQYXJhbWV0ZXJzIHZrc3BzX3Z1aV9oZWFkZXJbTUFYX1NQU19DT1VO VF07Ci0gICAgU3RkVmlkZW9IMjY0U2VxdWVuY2VQYXJhbWV0ZXJTZXRWdWkgdmtzcHNfdnVpW01B WF9TUFNfQ09VTlRdOwotICAgIFN0ZFZpZGVvSDI2NFNlcXVlbmNlUGFyYW1ldGVyU2V0IHZrc3Bz W01BWF9TUFNfQ09VTlRdOwotCi0gICAgLyogUFBTICovCi0gICAgU3RkVmlkZW9IMjY0U2NhbGlu Z0xpc3RzIHZrcHBzX3NjYWxpbmdbTUFYX1BQU19DT1VOVF07Ci0gICAgU3RkVmlkZW9IMjY0UGlj dHVyZVBhcmFtZXRlclNldCB2a3Bwc1tNQVhfUFBTX0NPVU5UXTsKLQotICAgIFZrVmlkZW9EZWNv ZGVIMjY0U2Vzc2lvblBhcmFtZXRlcnNBZGRJbmZvS0hSIGgyNjRfcGFyYW1zX2luZm8gPSB7Ci0g ICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX1ZJREVPX0RFQ09ERV9IMjY0X1NFU1NJ T05fUEFSQU1FVEVSU19BRERfSU5GT19LSFIsCi0gICAgICAgIC5wU3RkU1BTcyA9IHZrc3BzLAot ICAgICAgICAuc3RkU1BTQ291bnQgPSAwLAotICAgICAgICAucFN0ZFBQU3MgPSB2a3BwcywKLSAg ICAgICAgLnN0ZFBQU0NvdW50ID0gMCwKLSAgICB9OwotICAgIFZrVmlkZW9EZWNvZGVIMjY0U2Vz c2lvblBhcmFtZXRlcnNDcmVhdGVJbmZvS0hSIGgyNjRfcGFyYW1zID0gewotICAgICAgICAuc1R5 cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9WSURFT19ERUNPREVfSDI2NF9TRVNTSU9OX1BBUkFNRVRF UlNfQ1JFQVRFX0lORk9fS0hSLAotICAgICAgICAucFBhcmFtZXRlcnNBZGRJbmZvID0gJmgyNjRf cGFyYW1zX2luZm8sCi0gICAgfTsKLSAgICBWa1ZpZGVvU2Vzc2lvblBhcmFtZXRlcnNDcmVhdGVJ bmZvS0hSIHNlc3Npb25fcGFyYW1zX2NyZWF0ZSA9IHsKLSAgICAgICAgLnNUeXBlID0gVktfU1RS VUNUVVJFX1RZUEVfVklERU9fU0VTU0lPTl9QQVJBTUVURVJTX0NSRUFURV9JTkZPX0tIUiwKLSAg ICAgICAgLnBOZXh0ID0gJmgyNjRfcGFyYW1zLAotICAgICAgICAudmlkZW9TZXNzaW9uID0gY3R4 LT5jb21tb24uc2Vzc2lvbiwKLSAgICAgICAgLnZpZGVvU2Vzc2lvblBhcmFtZXRlcnNUZW1wbGF0 ZSA9IFZLX05VTExfSEFORExFLAotICAgIH07Ci0KLSAgICAvKiBTUFMgbGlzdCAqLwotICAgIGZv ciAoaW50IGkgPSAwOyBpIDwgRkZfQVJSQVlfRUxFTVMoaC0+cHMuc3BzX2xpc3QpOyBpKyspIHsK LSAgICAgICAgaWYgKGgtPnBzLnNwc19saXN0W2ldKSB7Ci0gICAgICAgICAgICBjb25zdCBTUFMg KnNwc19sID0gaC0+cHMuc3BzX2xpc3RbaV07Ci0gICAgICAgICAgICBpbnQgaWR4ID0gaDI2NF9w YXJhbXNfaW5mby5zdGRTUFNDb3VudDsKLSAgICAgICAgICAgIHNldF9zcHMoc3BzX2wsICZ2a3Nw c19zY2FsaW5nW2lkeF0sICZ2a3Nwc192dWlfaGVhZGVyW2lkeF0sICZ2a3Nwc192dWlbaWR4XSwg JnZrc3BzW2lkeF0pOwotICAgICAgICAgICAgaDI2NF9wYXJhbXNfaW5mby5zdGRTUFNDb3VudCsr OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyogUFBTIGxpc3QgKi8KLSAgICBmb3IgKGludCBp ID0gMDsgaSA8IEZGX0FSUkFZX0VMRU1TKGgtPnBzLnBwc19saXN0KTsgaSsrKSB7Ci0gICAgICAg IGlmIChoLT5wcy5wcHNfbGlzdFtpXSkgewotICAgICAgICAgICAgY29uc3QgUFBTICpwcHNfbCA9 IGgtPnBzLnBwc19saXN0W2ldOwotICAgICAgICAgICAgaW50IGlkeCA9IGgyNjRfcGFyYW1zX2lu Zm8uc3RkUFBTQ291bnQ7Ci0gICAgICAgICAgICBzZXRfcHBzKHBwc19sLCBwcHNfbC0+c3BzLCAm dmtwcHNfc2NhbGluZ1tpZHhdLCAmdmtwcHNbaWR4XSk7Ci0gICAgICAgICAgICBoMjY0X3BhcmFt c19pbmZvLnN0ZFBQU0NvdW50Kys7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBoMjY0X3BhcmFt cy5tYXhTdGRTUFNDb3VudCA9IGgyNjRfcGFyYW1zX2luZm8uc3RkU1BTQ291bnQ7Ci0gICAgaDI2 NF9wYXJhbXMubWF4U3RkUFBTQ291bnQgPSBoMjY0X3BhcmFtc19pbmZvLnN0ZFBQU0NvdW50Owot Ci0gICAgZXJyID0gZmZfdmtfZGVjb2RlX2NyZWF0ZV9wYXJhbXMoYnVmLCBhdmN0eCwgY3R4LCAm c2Vzc2lvbl9wYXJhbXNfY3JlYXRlKTsKLSAgICBpZiAoZXJyIDwgMCkKLSAgICAgICAgcmV0dXJu IGVycjsKLQotICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0RFQlVHLCAiQ3JlYXRlZCBmcmFtZSBw YXJhbWV0ZXJzOiAlaSBTUFMgJWkgUFBTXG4iLAotICAgICAgICAgICBoMjY0X3BhcmFtc19pbmZv LnN0ZFNQU0NvdW50LCBoMjY0X3BhcmFtc19pbmZvLnN0ZFBQU0NvdW50KTsKLQotICAgIHJldHVy biAwOwotfQotCi1zdGF0aWMgaW50IHZrX2gyNjRfc3RhcnRfZnJhbWUoQVZDb2RlY0NvbnRleHQg ICAgICAgICAgKmF2Y3R4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2X3VudXNl ZCBjb25zdCBBVkJ1ZmZlclJlZiAqYnVmZmVyX3JlZiwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBhdl91bnVzZWQgY29uc3QgdWludDhfdCAqYnVmZmVyLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGF2X3VudXNlZCB1aW50MzJfdCAgICAgICBzaXplKQotewotICAgIGlu dCBlcnI7Ci0gICAgaW50IGRwYl9zbG90X2luZGV4ID0gMDsKLSAgICBIMjY0Q29udGV4dCAqaCA9 IGF2Y3R4LT5wcml2X2RhdGE7Ci0KLSAgICBIMjY0UGljdHVyZSAqcGljID0gaC0+Y3VyX3BpY19w dHI7Ci0gICAgSDI2NFZ1bGthbkRlY29kZVBpY3R1cmUgKmhwID0gcGljLT5od2FjY2VsX3BpY3R1 cmVfcHJpdmF0ZTsKLSAgICBGRlZ1bGthbkRlY29kZVBpY3R1cmUgKnZwID0gJmhwLT52cDsKLQot ICAgIC8qIEZpbGwgaW4gbWFpbiBzbG90ICovCi0gICAgZHBiX3Nsb3RfaW5kZXggPSAwOwotICAg IGZvciAodW5zaWduZWQgc2xvdCA9IDA7IHNsb3QgPCBIMjY0X01BWF9QSUNUVVJFX0NPVU5UOyBz bG90KyspIHsKLSAgICAgICAgaWYgKHBpYyA9PSAmaC0+RFBCW3Nsb3RdKSB7Ci0gICAgICAgICAg ICBkcGJfc2xvdF9pbmRleCA9IHNsb3Q7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot ICAgIH0KLQotICAgIGVyciA9IHZrX2gyNjRfZmlsbF9waWN0KGF2Y3R4LCBOVUxMLCAmdnAtPnJl Zl9zbG90LCAmdnAtPnJlZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaHAtPnZraDI2 NF9yZWYsICZocC0+aDI2NF9yZWYsIHBpYywgMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICBoLT5EUEJbZHBiX3Nsb3RfaW5kZXhdLmZpZWxkX3BpY3R1cmUsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgaC0+RFBCW2RwYl9zbG90X2luZGV4XS5yZWZlcmVuY2UsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgZHBiX3Nsb3RfaW5kZXgpOwotICAgIGlmIChlcnIgPCAwKQotICAg ICAgICByZXR1cm4gZXJyOwotCi0gICAgLyogRmlsbCBpbiBzaG9ydC10ZXJtIHJlZmVyZW5jZXMg Ki8KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGgtPnNob3J0X3JlZl9jb3VudDsgaSsrKSB7Ci0g ICAgICAgIGRwYl9zbG90X2luZGV4ID0gMDsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBzbG90ID0g MDsgc2xvdCA8IEgyNjRfTUFYX1BJQ1RVUkVfQ09VTlQ7IHNsb3QrKykgewotICAgICAgICAgICAg aWYgKGgtPnNob3J0X3JlZltpXSA9PSAmaC0+RFBCW3Nsb3RdKSB7Ci0gICAgICAgICAgICAgICAg ZHBiX3Nsb3RfaW5kZXggPSBzbG90OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg ICAgfQotICAgICAgICB9Ci0gICAgICAgIGVyciA9IHZrX2gyNjRfZmlsbF9waWN0KGF2Y3R4LCAm aHAtPnJlZl9zcmNbaV0sICZ2cC0+cmVmX3Nsb3RzW2ldLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAmdnAtPnJlZnNbaV0sICZocC0+dmtoMjY0X3JlZnNbaV0sCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICZocC0+aDI2NF9yZWZzW2ldLCBoLT5zaG9ydF9yZWZbaV0s IDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGgtPkRQQltkcGJfc2xvdF9pbmRl eF0uZmllbGRfcGljdHVyZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaC0+RFBC W2RwYl9zbG90X2luZGV4XS5yZWZlcmVuY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGRwYl9zbG90X2luZGV4KTsKLSAgICAgICAgaWYgKGVyciA8IDApCi0gICAgICAgICAgICBy ZXR1cm4gZXJyOwotICAgIH0KLQotICAgIC8qIEZpbGwgaW4gbG9uZy10ZXJtIHJlZnMgKi8KLSAg ICBmb3IgKGludCByID0gMCwgaSA9IGgtPnNob3J0X3JlZl9jb3VudDsgciA8IEgyNjRfTUFYX0RQ Ql9GUkFNRVMgJiYKLSAgICAgICAgIGkgPCBoLT5zaG9ydF9yZWZfY291bnQgKyBoLT5sb25nX3Jl Zl9jb3VudDsgcisrKSB7Ci0gICAgICAgIGlmICghaC0+bG9uZ19yZWZbcl0pCi0gICAgICAgICAg ICBjb250aW51ZTsKLQotICAgICAgICBkcGJfc2xvdF9pbmRleCA9IDA7Ci0gICAgICAgIGZvciAo dW5zaWduZWQgc2xvdCA9IDA7IHNsb3QgPCAxNjsgc2xvdCsrKSB7Ci0gICAgICAgICAgICBpZiAo aC0+bG9uZ19yZWZbcl0gPT0gJmgtPkRQQltzbG90XSkgewotICAgICAgICAgICAgICAgIGRwYl9z bG90X2luZGV4ID0gc2xvdDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0K LSAgICAgICAgfQotICAgICAgICBlcnIgPSB2a19oMjY0X2ZpbGxfcGljdChhdmN0eCwgJmhwLT5y ZWZfc3JjW2ldLCAmdnAtPnJlZl9zbG90c1tpXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJnZwLT5yZWZzW2ldLCAmaHAtPnZraDI2NF9yZWZzW2ldLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAmaHAtPmgyNjRfcmVmc1tpXSwgaC0+bG9uZ19yZWZbcl0sIDAsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGgtPkRQQltkcGJfc2xvdF9pbmRleF0uZmll bGRfcGljdHVyZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaC0+RFBCW2RwYl9z bG90X2luZGV4XS5yZWZlcmVuY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRw Yl9zbG90X2luZGV4KTsKLSAgICAgICAgaWYgKGVyciA8IDApCi0gICAgICAgICAgICByZXR1cm4g ZXJyOwotICAgICAgICBpKys7Ci0gICAgfQotCi0gICAgaHAtPmgyNjRwaWMgPSAoU3RkVmlkZW9E ZWNvZGVIMjY0UGljdHVyZUluZm8pIHsKLSAgICAgICAgLnNlcV9wYXJhbWV0ZXJfc2V0X2lkID0g cGljLT5wcHMtPnNwc19pZCwKLSAgICAgICAgLnBpY19wYXJhbWV0ZXJfc2V0X2lkID0gcGljLT5w cHMtPnBwc19pZCwKLSAgICAgICAgLmZyYW1lX251bSA9IDAsICAvKiBTZXQgbGF0ZXIgKi8KLSAg ICAgICAgLmlkcl9waWNfaWQgPSAwLCAvKiBTZXQgbGF0ZXIgKi8KLSAgICAgICAgLlBpY09yZGVy Q250WzBdID0gcGljLT5maWVsZF9wb2NbMF0sCi0gICAgICAgIC5QaWNPcmRlckNudFsxXSA9IHBp Yy0+ZmllbGRfcG9jWzFdLAotICAgICAgICAuZmxhZ3MgPSAoU3RkVmlkZW9EZWNvZGVIMjY0UGlj dHVyZUluZm9GbGFncykgewotICAgICAgICAgICAgLmZpZWxkX3BpY19mbGFnID0gRklFTERfUElD VFVSRShoKSwKLSAgICAgICAgICAgIC5pc19pbnRyYSA9IDEsIC8qIFNldCBsYXRlciAqLwotICAg ICAgICAgICAgLklkclBpY0ZsYWcgPSBoLT5waWN0dXJlX2lkciwKLSAgICAgICAgICAgIC5ib3R0 b21fZmllbGRfZmxhZyA9IGgtPnBpY3R1cmVfc3RydWN0dXJlICE9IFBJQ1RfRlJBTUUgJiYKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGgtPnBpY3R1cmVfc3RydWN0dXJlICYgUElD VF9CT1RUT01fRklFTEQsCi0gICAgICAgICAgICAuaXNfcmVmZXJlbmNlID0gaC0+bmFsX3JlZl9p ZGMgIT0gMCwKLSAgICAgICAgICAgIC5jb21wbGVtZW50YXJ5X2ZpZWxkX3BhaXIgPSBoLT5maXJz dF9maWVsZCAmJiBGSUVMRF9QSUNUVVJFKGgpLAotICAgICAgICB9LAotICAgIH07Ci0KLSAgICBo cC0+aDI2NF9waWNfaW5mbyA9IChWa1ZpZGVvRGVjb2RlSDI2NFBpY3R1cmVJbmZvS0hSKSB7Ci0g ICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX1ZJREVPX0RFQ09ERV9IMjY0X1BJQ1RV UkVfSU5GT19LSFIsCi0gICAgICAgIC5wU3RkUGljdHVyZUluZm8gPSAmaHAtPmgyNjRwaWMsCi0g ICAgfTsKLQotICAgIHZwLT5kZWNvZGVfaW5mbyA9IChWa1ZpZGVvRGVjb2RlSW5mb0tIUikgewot ICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9WSURFT19ERUNPREVfSU5GT19LSFIs Ci0gICAgICAgIC5wTmV4dCA9ICZocC0+aDI2NF9waWNfaW5mbywKLSAgICAgICAgLmZsYWdzID0g MHgwLAotICAgICAgICAucFNldHVwUmVmZXJlbmNlU2xvdCA9ICZ2cC0+cmVmX3Nsb3QsCi0gICAg ICAgIC5yZWZlcmVuY2VTbG90Q291bnQgPSBoLT5zaG9ydF9yZWZfY291bnQgKyBoLT5sb25nX3Jl Zl9jb3VudCwKLSAgICAgICAgLnBSZWZlcmVuY2VTbG90cyA9IHZwLT5yZWZfc2xvdHMsCi0gICAg ICAgIC5kc3RQaWN0dXJlUmVzb3VyY2UgPSAoVmtWaWRlb1BpY3R1cmVSZXNvdXJjZUluZm9LSFIp IHsKLSAgICAgICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX1ZJREVPX1BJQ1RVUkVf UkVTT1VSQ0VfSU5GT19LSFIsCi0gICAgICAgICAgICAuY29kZWRPZmZzZXQgPSAoVmtPZmZzZXQy RCl7IDAsIDAgfSwKLSAgICAgICAgICAgIC5jb2RlZEV4dGVudCA9IChWa0V4dGVudDJEKXsgcGlj LT5mLT53aWR0aCwgcGljLT5mLT5oZWlnaHQgfSwKLSAgICAgICAgICAgIC5iYXNlQXJyYXlMYXll ciA9IDAsCi0gICAgICAgICAgICAuaW1hZ2VWaWV3QmluZGluZyA9IHZwLT52aWV3Lm91dFswXSwK LSAgICAgICAgfSwKLSAgICB9OwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgdmtf aDI2NF9kZWNvZGVfc2xpY2UoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICAqZGF0YSwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdWludDMyX3QgICAgICAgIHNpemUpCi17Ci0gICAgY29uc3QgSDI2NENv bnRleHQgKmggPSBhdmN0eC0+cHJpdl9kYXRhOwotICAgIGNvbnN0IEgyNjRTbGljZUNvbnRleHQg KnNsICA9ICZoLT5zbGljZV9jdHhbMF07Ci0gICAgSDI2NFZ1bGthbkRlY29kZVBpY3R1cmUgKmhw ID0gaC0+Y3VyX3BpY19wdHItPmh3YWNjZWxfcGljdHVyZV9wcml2YXRlOwotICAgIEZGVnVsa2Fu RGVjb2RlUGljdHVyZSAqdnAgPSAmaHAtPnZwOwotCi0gICAgaW50IGVyciA9IGZmX3ZrX2RlY29k ZV9hZGRfc2xpY2UoYXZjdHgsIHZwLCBkYXRhLCBzaXplLCAxLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICZocC0+aDI2NF9waWNfaW5mby5zbGljZUNvdW50LAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZocC0+aDI2NF9waWNfaW5mby5wU2xpY2VP ZmZzZXRzKTsKLSAgICBpZiAoZXJyIDwgMCkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotICAgIGhw LT5oMjY0cGljLmZyYW1lX251bSA9IHNsLT5mcmFtZV9udW07Ci0gICAgaHAtPmgyNjRwaWMuaWRy X3BpY19pZCA9IHNsLT5pZHJfcGljX2lkOwotCi0gICAgLyogRnJhbWUgaXMgb25seSBpbnRyYSBv ZiBhbGwgc2xpY2VzIGFyZSBtYXJrZWQgYXMgaW50cmEgKi8KLSAgICBpZiAoc2wtPnNsaWNlX3R5 cGUgIT0gQVZfUElDVFVSRV9UWVBFX0kgJiYgc2wtPnNsaWNlX3R5cGUgIT0gQVZfUElDVFVSRV9U WVBFX1NJKQotICAgICAgICBocC0+aDI2NHBpYy5mbGFncy5pc19pbnRyYSA9IDA7Ci0KLSAgICBy ZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB2a19oMjY0X2VuZF9mcmFtZShBVkNvZGVjQ29udGV4 dCAqYXZjdHgpCi17Ci0gICAgY29uc3QgSDI2NENvbnRleHQgKmggPSBhdmN0eC0+cHJpdl9kYXRh OwotICAgIEZGVnVsa2FuRGVjb2RlQ29udGV4dCAqZGVjID0gYXZjdHgtPmludGVybmFsLT5od2Fj Y2VsX3ByaXZfZGF0YTsKLSAgICBGRlZ1bGthbkRlY29kZVNoYXJlZCAqY3R4ID0gZGVjLT5zaGFy ZWRfY3R4OwotCi0gICAgSDI2NFBpY3R1cmUgKnBpYyA9IGgtPmN1cl9waWNfcHRyOwotICAgIEgy NjRWdWxrYW5EZWNvZGVQaWN0dXJlICpocCA9IHBpYy0+aHdhY2NlbF9waWN0dXJlX3ByaXZhdGU7 Ci0gICAgRkZWdWxrYW5EZWNvZGVQaWN0dXJlICp2cCA9ICZocC0+dnA7Ci0gICAgRkZWdWxrYW5E ZWNvZGVQaWN0dXJlICpydnBbSDI2NF9NQVhfUElDVFVSRV9DT1VOVF0gPSB7IDAgfTsKLSAgICBB VkZyYW1lICpyYXZbSDI2NF9NQVhfUElDVFVSRV9DT1VOVF0gPSB7IDAgfTsKLQotI2lmZGVmIFZL X0tIUl92aWRlb19tYWludGVuYW5jZTIKLSAgICBTdGRWaWRlb0gyNjRTY2FsaW5nTGlzdHMgdmtz cHNfc2NhbGluZzsKLSAgICBTdGRWaWRlb0gyNjRIcmRQYXJhbWV0ZXJzIHZrc3BzX3Z1aV9oZWFk ZXI7Ci0gICAgU3RkVmlkZW9IMjY0U2VxdWVuY2VQYXJhbWV0ZXJTZXRWdWkgdmtzcHNfdnVpOwot ICAgIFN0ZFZpZGVvSDI2NFNlcXVlbmNlUGFyYW1ldGVyU2V0IHZrc3BzOwotICAgIFN0ZFZpZGVv SDI2NFNjYWxpbmdMaXN0cyB2a3Bwc19zY2FsaW5nOwotICAgIFN0ZFZpZGVvSDI2NFBpY3R1cmVQ YXJhbWV0ZXJTZXQgdmtwcHM7Ci0gICAgVmtWaWRlb0RlY29kZUgyNjRJbmxpbmVTZXNzaW9uUGFy YW1ldGVyc0luZm9LSFIgaDI2NF9wYXJhbXM7Ci0KLSAgICBpZiAoY3R4LT5zLmV4dGVuc2lvbnMg JiBGRl9WS19FWFRfVklERU9fTUFJTlRFTkFOQ0VfMikgewotICAgICAgICBzZXRfc3BzKGgtPnBz LnNwcywgJnZrc3BzX3NjYWxpbmcsCi0gICAgICAgICAgICAgICAgJnZrc3BzX3Z1aV9oZWFkZXIs ICZ2a3Nwc192dWksICZ2a3Nwcyk7Ci0gICAgICAgIHNldF9wcHMoaC0+cHMucHBzLCBoLT5wcy5z cHMsICZ2a3Bwc19zY2FsaW5nLCAmdmtwcHMpOwotICAgICAgICBoMjY0X3BhcmFtcyA9IChWa1Zp ZGVvRGVjb2RlSDI2NElubGluZVNlc3Npb25QYXJhbWV0ZXJzSW5mb0tIUikgewotICAgICAgICAg ICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfVklERU9fREVDT0RFX0gyNjRfSU5MSU5FX1NF U1NJT05fUEFSQU1FVEVSU19JTkZPX0tIUiwKLSAgICAgICAgICAgIC5wU3RkU1BTID0gJnZrc3Bz LAotICAgICAgICAgICAgLnBTdGRQUFMgPSAmdmtwcHMsCi0gICAgICAgIH07Ci0gICAgICAgIGhw LT5oMjY0X3BpY19pbmZvLnBOZXh0ID0gJmgyNjRfcGFyYW1zOwotICAgIH0KLSNlbmRpZgotCi0g ICAgaWYgKCFocC0+aDI2NF9waWNfaW5mby5zbGljZUNvdW50KQotICAgICAgICByZXR1cm4gMDsK LQotICAgIGlmICghdnAtPnNsaWNlc19idWYpCi0gICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZB TCk7Ci0KLSAgICBpZiAoIWRlYy0+c2Vzc2lvbl9wYXJhbXMgJiYKLSAgICAgICAgIShjdHgtPnMu ZXh0ZW5zaW9ucyAmIEZGX1ZLX0VYVF9WSURFT19NQUlOVEVOQU5DRV8yKSkgewotICAgICAgICBp bnQgZXJyID0gdmtfaDI2NF9jcmVhdGVfcGFyYW1zKGF2Y3R4LCAmZGVjLT5zZXNzaW9uX3BhcmFt cyk7Ci0gICAgICAgIGlmIChlcnIgPCAwKQotICAgICAgICAgICAgcmV0dXJuIGVycjsKLQotICAg ICAgICBocC0+aDI2NHBpYy5zZXFfcGFyYW1ldGVyX3NldF9pZCA9IHBpYy0+cHBzLT5zcHNfaWQ7 Ci0gICAgICAgIGhwLT5oMjY0cGljLnBpY19wYXJhbWV0ZXJfc2V0X2lkID0gcGljLT5wcHMtPnBw c19pZDsKLSAgICB9Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHZwLT5kZWNvZGVfaW5mby5y ZWZlcmVuY2VTbG90Q291bnQ7IGkrKykgewotICAgICAgICBIMjY0UGljdHVyZSAqcnAgPSBocC0+ cmVmX3NyY1tpXTsKLSAgICAgICAgSDI2NFZ1bGthbkRlY29kZVBpY3R1cmUgKnJocCA9IHJwLT5o d2FjY2VsX3BpY3R1cmVfcHJpdmF0ZTsKLQotICAgICAgICBydnBbaV0gPSAmcmhwLT52cDsKLSAg ICAgICAgcmF2W2ldID0gaHAtPnJlZl9zcmNbaV0tPmY7Ci0gICAgfQotCi0gICAgYXZfbG9nKGF2 Y3R4LCBBVl9MT0dfREVCVUcsICJEZWNvZGluZyBmcmFtZSwgJSJTSVpFX1NQRUNJRklFUiIgYnl0 ZXMsICVpIHNsaWNlc1xuIiwKLSAgICAgICAgICAgdnAtPnNsaWNlc19zaXplLCBocC0+aDI2NF9w aWNfaW5mby5zbGljZUNvdW50KTsKLQotICAgIHJldHVybiBmZl92a19kZWNvZGVfZnJhbWUoYXZj dHgsIHBpYy0+ZiwgdnAsIHJhdiwgcnZwKTsKLX0KLQotc3RhdGljIHZvaWQgdmtfaDI2NF9mcmVl X2ZyYW1lX3ByaXYoQVZSZWZTdHJ1Y3RPcGFxdWUgX2h3Y3R4LCB2b2lkICpkYXRhKQotewotICAg IEFWSFdEZXZpY2VDb250ZXh0ICpod2N0eCA9IF9od2N0eC5uYzsKLSAgICBIMjY0VnVsa2FuRGVj b2RlUGljdHVyZSAqaHAgPSBkYXRhOwotCi0gICAgLyogRnJlZSBmcmFtZSByZXNvdXJjZXMsIHRo aXMgYWxzbyBkZXN0cm95cyB0aGUgc2Vzc2lvbiBwYXJhbWV0ZXJzLiAqLwotICAgIGZmX3ZrX2Rl Y29kZV9mcmVlX2ZyYW1lKGh3Y3R4LCAmaHAtPnZwKTsKLX0KLQotY29uc3QgRkZIV0FjY2VsIGZm X2gyNjRfdnVsa2FuX2h3YWNjZWwgPSB7Ci0gICAgLnAubmFtZSAgICAgICAgICAgICAgICA9ICJo MjY0X3Z1bGthbiIsCi0gICAgLnAudHlwZSAgICAgICAgICAgICAgICA9IEFWTUVESUFfVFlQRV9W SURFTywKLSAgICAucC5pZCAgICAgICAgICAgICAgICAgID0gQVZfQ09ERUNfSURfSDI2NCwKLSAg ICAucC5waXhfZm10ICAgICAgICAgICAgID0gQVZfUElYX0ZNVF9WVUxLQU4sCi0gICAgLnN0YXJ0 X2ZyYW1lICAgICAgICAgICA9ICZ2a19oMjY0X3N0YXJ0X2ZyYW1lLAotICAgIC5kZWNvZGVfc2xp Y2UgICAgICAgICAgPSAmdmtfaDI2NF9kZWNvZGVfc2xpY2UsCi0gICAgLmVuZF9mcmFtZSAgICAg ICAgICAgICA9ICZ2a19oMjY0X2VuZF9mcmFtZSwKLSAgICAuZnJlZV9mcmFtZV9wcml2ICAgICAg ID0gJnZrX2gyNjRfZnJlZV9mcmFtZV9wcml2LAotICAgIC5mcmFtZV9wcml2X2RhdGFfc2l6ZSAg PSBzaXplb2YoSDI2NFZ1bGthbkRlY29kZVBpY3R1cmUpLAotICAgIC5pbml0ICAgICAgICAgICAg ICAgICAgPSAmZmZfdmtfZGVjb2RlX2luaXQsCi0gICAgLnVwZGF0ZV90aHJlYWRfY29udGV4dCA9 ICZmZl92a191cGRhdGVfdGhyZWFkX2NvbnRleHQsCi0gICAgLmRlY29kZV9wYXJhbXMgICAgICAg ICA9ICZmZl92a19wYXJhbXNfaW52YWxpZGF0ZSwKLSAgICAuZmx1c2ggICAgICAgICAgICAgICAg ID0gJmZmX3ZrX2RlY29kZV9mbHVzaCwKLSAgICAudW5pbml0ICAgICAgICAgICAgICAgID0gJmZm X3ZrX2RlY29kZV91bmluaXQsCi0gICAgLmZyYW1lX3BhcmFtcyAgICAgICAgICA9ICZmZl92a19m cmFtZV9wYXJhbXMsCi0gICAgLnByaXZfZGF0YV9zaXplICAgICAgICA9IHNpemVvZihGRlZ1bGth bkRlY29kZUNvbnRleHQpLAotICAgIC5jYXBzX2ludGVybmFsICAgICAgICAgPSBIV0FDQ0VMX0NB UF9BU1lOQ19TQUZFLAotfTsKLS0gCjIuNDkuMQoKCkZyb20gODRmZDI1MDI3NWQ2NDFhZDc1N2Zj ZjZhM2UwYTM2MmE3MmY4MTRhMiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKRnJvbTogSmFtYWlr YTEgPGx1a2FzemN6MThAd3AucGw+CkRhdGU6IFdlZCwgMyBTZXAgMjAyNSAxMzozODowMCArMDAw MApTdWJqZWN0OiBbUEFUQ0ggMDgyLzExOF0gQ2hhbmdpbmcgdnVsa2FuIGZpbGUgZGlyZWN0b3J5 CgotLS0KIGxpYmF2Y29kZWMvdnVsa2FuL3Z1bGthbl9oMjY0LmMgfCA1OTIgKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysKIDEgZmlsZSBjaGFuZ2VkLCA1OTIgaW5zZXJ0aW9ucygrKQog Y3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2Y29kZWMvdnVsa2FuL3Z1bGthbl9oMjY0LmMKCmRpZmYg LS1naXQgYS9saWJhdmNvZGVjL3Z1bGthbi92dWxrYW5faDI2NC5jIGIvbGliYXZjb2RlYy92dWxr YW4vdnVsa2FuX2gyNjQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5h ZWJmZDRiNzM4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYXZjb2RlYy92dWxrYW4vdnVsa2FuX2gy NjQuYwpAQCAtMCwwICsxLDU5MiBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBl Zy4KKyAqCisgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2Vy IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBv ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIEZGbXBlZyBpcyBk aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g IFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlm IG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUx IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EK KyAqLworCisjaW5jbHVkZSAibGliYXZjb2RlYy9oMjY0ZGVjLmgiCisjaW5jbHVkZSAibGliYXZj b2RlYy9oMjY0X3BzLmgiCisKKyNpbmNsdWRlICJ2dWxrYW5fZGVjb2RlLmgiCisKK2NvbnN0IEZG VnVsa2FuRGVjb2RlRGVzY3JpcHRvciBmZl92a19kZWNfaDI2NF9kZXNjID0geworICAgIC5jb2Rl Y19pZCAgICAgICAgID0gQVZfQ09ERUNfSURfSDI2NCwKKyAgICAuZGVjb2RlX2V4dGVuc2lvbiA9 IEZGX1ZLX0VYVF9WSURFT19ERUNPREVfSDI2NCwKKyAgICAucXVldWVfZmxhZ3MgICAgICA9IFZL X1FVRVVFX1ZJREVPX0RFQ09ERV9CSVRfS0hSLAorICAgIC5kZWNvZGVfb3AgICAgICAgID0gVktf VklERU9fQ09ERUNfT1BFUkFUSU9OX0RFQ09ERV9IMjY0X0JJVF9LSFIsCisgICAgLmV4dF9wcm9w cyA9IHsKKyAgICAgICAgLmV4dGVuc2lvbk5hbWUgPSBWS19TVERfVlVMS0FOX1ZJREVPX0NPREVD X0gyNjRfREVDT0RFX0VYVEVOU0lPTl9OQU1FLAorICAgICAgICAuc3BlY1ZlcnNpb24gICA9IFZL X1NURF9WVUxLQU5fVklERU9fQ09ERUNfSDI2NF9ERUNPREVfU1BFQ19WRVJTSU9OLAorICAgIH0s Cit9OworCit0eXBlZGVmIHN0cnVjdCBIMjY0VnVsa2FuRGVjb2RlUGljdHVyZSB7CisgICAgRkZW dWxrYW5EZWNvZGVQaWN0dXJlICAgICAgICAgICB2cDsKKworICAgIC8qIEN1cnJlbnQgcGljdHVy ZSAqLworICAgIFN0ZFZpZGVvRGVjb2RlSDI2NFJlZmVyZW5jZUluZm8gaDI2NF9yZWY7CisgICAg VmtWaWRlb0RlY29kZUgyNjREcGJTbG90SW5mb0tIUiB2a2gyNjRfcmVmOworCisgICAgLyogUGlj dHVyZSByZWZzICovCisgICAgSDI2NFBpY3R1cmUgICAgICAgICAgICAgICAgICAgICpyZWZfc3Jj ICAgIFtIMjY0X01BWF9QSUNUVVJFX0NPVU5UXTsKKyAgICBTdGRWaWRlb0RlY29kZUgyNjRSZWZl cmVuY2VJbmZvIGgyNjRfcmVmcyAgW0gyNjRfTUFYX1BJQ1RVUkVfQ09VTlRdOworICAgIFZrVmlk ZW9EZWNvZGVIMjY0RHBiU2xvdEluZm9LSFIgdmtoMjY0X3JlZnNbSDI2NF9NQVhfUElDVFVSRV9D T1VOVF07CisKKyAgICAvKiBDdXJyZW50IHBpY3R1cmUgKGNvbnRkLikgKi8KKyAgICBTdGRWaWRl b0RlY29kZUgyNjRQaWN0dXJlSW5mbyAgIGgyNjRwaWM7CisgICAgVmtWaWRlb0RlY29kZUgyNjRQ aWN0dXJlSW5mb0tIUiBoMjY0X3BpY19pbmZvOworfSBIMjY0VnVsa2FuRGVjb2RlUGljdHVyZTsK KworY29uc3Qgc3RhdGljIGludCBoMjY0X3NjYWxpbmdfbGlzdDhfb3JkZXJbXSA9IHsgMCwgMywg MSwgNCwgMiwgNSB9OworCitzdGF0aWMgaW50IHZrX2gyNjRfZmlsbF9waWN0KEFWQ29kZWNDb250 ZXh0ICphdmN0eCwgSDI2NFBpY3R1cmUgKipyZWZfc3JjLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBWa1ZpZGVvUmVmZXJlbmNlU2xvdEluZm9LSFIgKnJlZl9zbG90LCAgICAgICAvKiBN YWluIHN0cnVjdHVyZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWa1ZpZGVvUGlj dHVyZVJlc291cmNlSW5mb0tIUiAqcmVmLCAgICAgICAgICAvKiBHb2VzIGluIF4gKi8KKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgVmtWaWRlb0RlY29kZUgyNjREcGJTbG90SW5mb0tIUiAq dmtoMjY0X3JlZiwgLyogR29lcyBpbiBeICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFN0ZFZpZGVvRGVjb2RlSDI2NFJlZmVyZW5jZUluZm8gKmgyNjRfcmVmLCAgIC8qIEdvZXMgaW4g XiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIMjY0UGljdHVyZSAqcGljLCBpbnQg aXNfY3VycmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlzX2ZpZWxkLCBp bnQgcGljdHVyZV9zdHJ1Y3R1cmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBk cGJfc2xvdF9pbmRleCkKK3sKKyAgICBGRlZ1bGthbkRlY29kZUNvbnRleHQgKmRlYyA9IGF2Y3R4 LT5pbnRlcm5hbC0+aHdhY2NlbF9wcml2X2RhdGE7CisgICAgRkZWdWxrYW5EZWNvZGVTaGFyZWQg KmN0eCA9IGRlYy0+c2hhcmVkX2N0eDsKKyAgICBIMjY0VnVsa2FuRGVjb2RlUGljdHVyZSAqaHAg PSBwaWMtPmh3YWNjZWxfcGljdHVyZV9wcml2YXRlOworICAgIEZGVnVsa2FuRGVjb2RlUGljdHVy ZSAqdmtwaWMgPSAmaHAtPnZwOworCisgICAgaW50IGVyciA9IGZmX3ZrX2RlY29kZV9wcmVwYXJl X2ZyYW1lKGRlYywgcGljLT5mLCB2a3BpYywgaXNfY3VycmVudCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZGVjLT5kZWRpY2F0ZWRfZHBiKTsKKyAgICBpZiAoZXJy IDwgMCkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgICpoMjY0X3JlZiA9IChTdGRWaWRlb0Rl Y29kZUgyNjRSZWZlcmVuY2VJbmZvKSB7CisgICAgICAgIC5GcmFtZU51bSA9IHBpYy0+bG9uZ19y ZWYgPyBwaWMtPnBpY19pZCA6IHBpYy0+ZnJhbWVfbnVtLAorICAgICAgICAuUGljT3JkZXJDbnQg PSB7IHBpYy0+ZmllbGRfcG9jWzBdLCBwaWMtPmZpZWxkX3BvY1sxXSB9LAorICAgICAgICAuZmxh Z3MgPSAoU3RkVmlkZW9EZWNvZGVIMjY0UmVmZXJlbmNlSW5mb0ZsYWdzKSB7CisgICAgICAgICAg ICAudG9wX2ZpZWxkX2ZsYWcgICAgPSBpc19maWVsZCA/ICEhKHBpY3R1cmVfc3RydWN0dXJlICYg UElDVF9UT1BfRklFTEQpICAgIDogMCwKKyAgICAgICAgICAgIC5ib3R0b21fZmllbGRfZmxhZyA9 IGlzX2ZpZWxkID8gISEocGljdHVyZV9zdHJ1Y3R1cmUgJiBQSUNUX0JPVFRPTV9GSUVMRCkgOiAw LAorICAgICAgICAgICAgLnVzZWRfZm9yX2xvbmdfdGVybV9yZWZlcmVuY2UgPSBwaWMtPnJlZmVy ZW5jZSAmJiBwaWMtPmxvbmdfcmVmLAorICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIGZs YWdzLmlzX25vbl9leGlzdGluZyBpcyB1c2VkIHRvIGluZGljYXRlIHdoZXRoZXIgdGhlIHBpY3R1 cmUgaXMgbWFya2VkIGFzCisgICAgICAgICAgICAgKiDigJxub24tZXhpc3RpbmfigJ0gYXMgZGVm aW5lZCBpbiBzZWN0aW9uIDguMi41LjIgb2YgdGhlIElUVS1UIEguMjY0IFNwZWNpZmljYXRpb247 CisgICAgICAgICAgICAgKiA4LjIuNS4yIERlY29kaW5nIHByb2Nlc3MgZm9yIGdhcHMgaW4gZnJh bWVfbnVtCisgICAgICAgICAgICAgKiBjb3JyZXNwb25kcyB0byB0aGUgY29kZSBpbiBoMjY0X3Ns aWNlLmM6aDI2NF9maWVsZF9zdGFydCwKKyAgICAgICAgICAgICAqIHdoaWNoIHNldHMgdGhlIGlu dmFsaWRfZ2FwIGZsYWcgd2hlbiBkZWNvZGluZy4KKyAgICAgICAgICAgICAqLworICAgICAgICAg ICAgLmlzX25vbl9leGlzdGluZyA9IHBpYy0+aW52YWxpZF9nYXAsCisgICAgICAgIH0sCisgICAg fTsKKworICAgICp2a2gyNjRfcmVmID0gKFZrVmlkZW9EZWNvZGVIMjY0RHBiU2xvdEluZm9LSFIp IHsKKyAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfVklERU9fREVDT0RFX0gyNjRf RFBCX1NMT1RfSU5GT19LSFIsCisgICAgICAgIC5wU3RkUmVmZXJlbmNlSW5mbyA9IGgyNjRfcmVm LAorICAgIH07CisKKyAgICAqcmVmID0gKFZrVmlkZW9QaWN0dXJlUmVzb3VyY2VJbmZvS0hSKSB7 CisgICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX1ZJREVPX1BJQ1RVUkVfUkVTT1VS Q0VfSU5GT19LSFIsCisgICAgICAgIC5jb2RlZE9mZnNldCA9IChWa09mZnNldDJEKXsgMCwgMCB9 LAorICAgICAgICAuY29kZWRFeHRlbnQgPSAoVmtFeHRlbnQyRCl7IHBpYy0+Zi0+d2lkdGgsIHBp Yy0+Zi0+aGVpZ2h0IH0sCisgICAgICAgIC5iYXNlQXJyYXlMYXllciA9IGN0eC0+Y29tbW9uLmxh eWVyZWRfZHBiID8gZHBiX3Nsb3RfaW5kZXggOiAwLAorICAgICAgICAuaW1hZ2VWaWV3QmluZGlu ZyA9IHZrcGljLT52aWV3LnJlZlswXSwKKyAgICB9OworCisgICAgKnJlZl9zbG90ID0gKFZrVmlk ZW9SZWZlcmVuY2VTbG90SW5mb0tIUikgeworICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVf VFlQRV9WSURFT19SRUZFUkVOQ0VfU0xPVF9JTkZPX0tIUiwKKyAgICAgICAgLnBOZXh0ID0gdmto MjY0X3JlZiwKKyAgICAgICAgLnNsb3RJbmRleCA9IGRwYl9zbG90X2luZGV4LAorICAgICAgICAu cFBpY3R1cmVSZXNvdXJjZSA9IHJlZiwKKyAgICB9OworCisgICAgaWYgKHJlZl9zcmMpCisgICAg ICAgICpyZWZfc3JjID0gcGljOworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBTdGRWaWRl b0gyNjRMZXZlbElkYyBjb252ZXJ0X3RvX3ZrX2xldmVsX2lkYyhpbnQgbGV2ZWxfaWRjKQorewor ICAgIHN3aXRjaCAobGV2ZWxfaWRjKSB7CisgICAgY2FzZSAxMDogcmV0dXJuIFNURF9WSURFT19I MjY0X0xFVkVMX0lEQ18xXzA7CisgICAgY2FzZSAxMTogcmV0dXJuIFNURF9WSURFT19IMjY0X0xF VkVMX0lEQ18xXzE7CisgICAgY2FzZSAxMjogcmV0dXJuIFNURF9WSURFT19IMjY0X0xFVkVMX0lE Q18xXzI7CisgICAgY2FzZSAxMzogcmV0dXJuIFNURF9WSURFT19IMjY0X0xFVkVMX0lEQ18xXzM7 CisgICAgY2FzZSAyMDogcmV0dXJuIFNURF9WSURFT19IMjY0X0xFVkVMX0lEQ18yXzA7CisgICAg Y2FzZSAyMTogcmV0dXJuIFNURF9WSURFT19IMjY0X0xFVkVMX0lEQ18yXzE7CisgICAgY2FzZSAy MjogcmV0dXJuIFNURF9WSURFT19IMjY0X0xFVkVMX0lEQ18yXzI7CisgICAgY2FzZSAzMDogcmV0 dXJuIFNURF9WSURFT19IMjY0X0xFVkVMX0lEQ18zXzA7CisgICAgY2FzZSAzMTogcmV0dXJuIFNU RF9WSURFT19IMjY0X0xFVkVMX0lEQ18zXzE7CisgICAgY2FzZSAzMjogcmV0dXJuIFNURF9WSURF T19IMjY0X0xFVkVMX0lEQ18zXzI7CisgICAgY2FzZSA0MDogcmV0dXJuIFNURF9WSURFT19IMjY0 X0xFVkVMX0lEQ180XzA7CisgICAgY2FzZSA0MTogcmV0dXJuIFNURF9WSURFT19IMjY0X0xFVkVM X0lEQ180XzE7CisgICAgY2FzZSA0MjogcmV0dXJuIFNURF9WSURFT19IMjY0X0xFVkVMX0lEQ180 XzI7CisgICAgY2FzZSA1MDogcmV0dXJuIFNURF9WSURFT19IMjY0X0xFVkVMX0lEQ181XzA7Cisg ICAgY2FzZSA1MTogcmV0dXJuIFNURF9WSURFT19IMjY0X0xFVkVMX0lEQ181XzE7CisgICAgY2Fz ZSA1MjogcmV0dXJuIFNURF9WSURFT19IMjY0X0xFVkVMX0lEQ181XzI7CisgICAgY2FzZSA2MDog cmV0dXJuIFNURF9WSURFT19IMjY0X0xFVkVMX0lEQ182XzA7CisgICAgY2FzZSA2MTogcmV0dXJu IFNURF9WSURFT19IMjY0X0xFVkVMX0lEQ182XzE7CisgICAgZGVmYXVsdDoKKyAgICBjYXNlIDYy OiByZXR1cm4gU1REX1ZJREVPX0gyNjRfTEVWRUxfSURDXzZfMjsKKyAgICB9Cit9CisKK3N0YXRp YyB2b2lkIHNldF9zcHMoY29uc3QgU1BTICpzcHMsCisgICAgICAgICAgICAgICAgICAgIFN0ZFZp ZGVvSDI2NFNjYWxpbmdMaXN0cyAqdmtzcHNfc2NhbGluZywKKyAgICAgICAgICAgICAgICAgICAg U3RkVmlkZW9IMjY0SHJkUGFyYW1ldGVycyAqdmtzcHNfdnVpX2hlYWRlciwKKyAgICAgICAgICAg ICAgICAgICAgU3RkVmlkZW9IMjY0U2VxdWVuY2VQYXJhbWV0ZXJTZXRWdWkgKnZrc3BzX3Z1aSwK KyAgICAgICAgICAgICAgICAgICAgU3RkVmlkZW9IMjY0U2VxdWVuY2VQYXJhbWV0ZXJTZXQgKnZr c3BzKQoreworICAgICp2a3Nwc19zY2FsaW5nID0gKFN0ZFZpZGVvSDI2NFNjYWxpbmdMaXN0cykg eworICAgICAgICAuc2NhbGluZ19saXN0X3ByZXNlbnRfbWFzayA9IHNwcy0+c2NhbGluZ19tYXRy aXhfcHJlc2VudF9tYXNrLAorICAgICAgICAudXNlX2RlZmF1bHRfc2NhbGluZ19tYXRyaXhfbWFz ayA9IDAsIC8qIFdlIGFscmVhZHkgZmlsbCBpbiB0aGUgZGVmYXVsdCBtYXRyaXggKi8KKyAgICB9 OworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBTVERfVklERU9fSDI2NF9TQ0FMSU5HX0xJU1Rf NFg0X05VTV9MSVNUUzsgaSsrKQorICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IFNURF9WSURF T19IMjY0X1NDQUxJTkdfTElTVF80WDRfTlVNX0VMRU1FTlRTOyBqKyspCisgICAgICAgICAgICB2 a3Nwc19zY2FsaW5nLT5TY2FsaW5nTGlzdDR4NFtpXVtqXSA9IHNwcy0+c2NhbGluZ19tYXRyaXg0 W2ldW2ZmX3ppZ3phZ19zY2FuW2pdXTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgU1REX1ZJ REVPX0gyNjRfU0NBTElOR19MSVNUXzhYOF9OVU1fTElTVFM7IGkrKykKKyAgICAgICAgZm9yIChp bnQgaiA9IDA7IGogPCBTVERfVklERU9fSDI2NF9TQ0FMSU5HX0xJU1RfOFg4X05VTV9FTEVNRU5U UzsgaisrKQorICAgICAgICAgICAgdmtzcHNfc2NhbGluZy0+U2NhbGluZ0xpc3Q4eDhbaV1bal0g PQorICAgICAgICAgICAgICAgIHNwcy0+c2NhbGluZ19tYXRyaXg4W2gyNjRfc2NhbGluZ19saXN0 OF9vcmRlcltpXV1bZmZfemlnemFnX2RpcmVjdFtqXV07CisKKyAgICAqdmtzcHNfdnVpX2hlYWRl ciA9IChTdGRWaWRlb0gyNjRIcmRQYXJhbWV0ZXJzKSB7CisgICAgICAgIC5jcGJfY250X21pbnVz MSA9IHNwcy0+Y3BiX2NudCAtIDEsCisgICAgICAgIC5iaXRfcmF0ZV9zY2FsZSA9IHNwcy0+Yml0 X3JhdGVfc2NhbGUsCisgICAgICAgIC5pbml0aWFsX2NwYl9yZW1vdmFsX2RlbGF5X2xlbmd0aF9t aW51czEgPSBzcHMtPmluaXRpYWxfY3BiX3JlbW92YWxfZGVsYXlfbGVuZ3RoIC0gMSwKKyAgICAg ICAgLmNwYl9yZW1vdmFsX2RlbGF5X2xlbmd0aF9taW51czEgPSBzcHMtPmNwYl9yZW1vdmFsX2Rl bGF5X2xlbmd0aCAtIDEsCisgICAgICAgIC5kcGJfb3V0cHV0X2RlbGF5X2xlbmd0aF9taW51czEg PSBzcHMtPmRwYl9vdXRwdXRfZGVsYXlfbGVuZ3RoIC0gMSwKKyAgICAgICAgLnRpbWVfb2Zmc2V0 X2xlbmd0aCA9IHNwcy0+dGltZV9vZmZzZXRfbGVuZ3RoLAorICAgIH07CisKKyAgICBmb3IgKGlu dCBpID0gMDsgaSA8IHNwcy0+Y3BiX2NudDsgaSsrKSB7CisgICAgICAgIHZrc3BzX3Z1aV9oZWFk ZXItPmJpdF9yYXRlX3ZhbHVlX21pbnVzMVtpXSA9IHNwcy0+Yml0X3JhdGVfdmFsdWVbaV0gLSAx OworICAgICAgICB2a3Nwc192dWlfaGVhZGVyLT5jcGJfc2l6ZV92YWx1ZV9taW51czFbaV0gPSBz cHMtPmNwYl9zaXplX3ZhbHVlW2ldIC0gMTsKKyAgICAgICAgdmtzcHNfdnVpX2hlYWRlci0+Y2Jy X2ZsYWdbaV0gPSAoc3BzLT5jcHJfZmxhZyA+PiBpKSAmIDB4MTsKKyAgICB9CisKKyAgICAqdmtz cHNfdnVpID0gKFN0ZFZpZGVvSDI2NFNlcXVlbmNlUGFyYW1ldGVyU2V0VnVpKSB7CisgICAgICAg IC5hc3BlY3RfcmF0aW9faWRjID0gc3BzLT52dWkuYXNwZWN0X3JhdGlvX2lkYywKKyAgICAgICAg LnNhcl93aWR0aCA9IHNwcy0+dnVpLnNhci5udW0sCisgICAgICAgIC5zYXJfaGVpZ2h0ID0gc3Bz LT52dWkuc2FyLmRlbiwKKyAgICAgICAgLnZpZGVvX2Zvcm1hdCA9IHNwcy0+dnVpLnZpZGVvX2Zv cm1hdCwKKyAgICAgICAgLmNvbG91cl9wcmltYXJpZXMgPSBzcHMtPnZ1aS5jb2xvdXJfcHJpbWFy aWVzLAorICAgICAgICAudHJhbnNmZXJfY2hhcmFjdGVyaXN0aWNzID0gc3BzLT52dWkudHJhbnNm ZXJfY2hhcmFjdGVyaXN0aWNzLAorICAgICAgICAubWF0cml4X2NvZWZmaWNpZW50cyA9IHNwcy0+ dnVpLm1hdHJpeF9jb2VmZnMsCisgICAgICAgIC5udW1fdW5pdHNfaW5fdGljayA9IHNwcy0+bnVt X3VuaXRzX2luX3RpY2ssCisgICAgICAgIC50aW1lX3NjYWxlID0gc3BzLT50aW1lX3NjYWxlLAor ICAgICAgICAucEhyZFBhcmFtZXRlcnMgPSB2a3Nwc192dWlfaGVhZGVyLAorICAgICAgICAubWF4 X251bV9yZW9yZGVyX2ZyYW1lcyA9IHNwcy0+bnVtX3Jlb3JkZXJfZnJhbWVzLAorICAgICAgICAu bWF4X2RlY19mcmFtZV9idWZmZXJpbmcgPSBzcHMtPm1heF9kZWNfZnJhbWVfYnVmZmVyaW5nLAor ICAgICAgICAuZmxhZ3MgPSAoU3RkVmlkZW9IMjY0U3BzVnVpRmxhZ3MpIHsKKyAgICAgICAgICAg IC5hc3BlY3RfcmF0aW9faW5mb19wcmVzZW50X2ZsYWcgPSBzcHMtPnZ1aS5hc3BlY3RfcmF0aW9f aW5mb19wcmVzZW50X2ZsYWcsCisgICAgICAgICAgICAub3ZlcnNjYW5faW5mb19wcmVzZW50X2Zs YWcgPSBzcHMtPnZ1aS5vdmVyc2Nhbl9pbmZvX3ByZXNlbnRfZmxhZywKKyAgICAgICAgICAgIC5v dmVyc2Nhbl9hcHByb3ByaWF0ZV9mbGFnID0gc3BzLT52dWkub3ZlcnNjYW5fYXBwcm9wcmlhdGVf ZmxhZywKKyAgICAgICAgICAgIC52aWRlb19zaWduYWxfdHlwZV9wcmVzZW50X2ZsYWcgPSBzcHMt PnZ1aS52aWRlb19zaWduYWxfdHlwZV9wcmVzZW50X2ZsYWcsCisgICAgICAgICAgICAudmlkZW9f ZnVsbF9yYW5nZV9mbGFnID0gc3BzLT52dWkudmlkZW9fZnVsbF9yYW5nZV9mbGFnLAorICAgICAg ICAgICAgLmNvbG9yX2Rlc2NyaXB0aW9uX3ByZXNlbnRfZmxhZyA9IHNwcy0+dnVpLmNvbG91cl9k ZXNjcmlwdGlvbl9wcmVzZW50X2ZsYWcsCisgICAgICAgICAgICAuY2hyb21hX2xvY19pbmZvX3By ZXNlbnRfZmxhZyA9IHNwcy0+dnVpLmNocm9tYV9sb2NhdGlvbiwKKyAgICAgICAgICAgIC50aW1p bmdfaW5mb19wcmVzZW50X2ZsYWcgPSBzcHMtPnRpbWluZ19pbmZvX3ByZXNlbnRfZmxhZywKKyAg ICAgICAgICAgIC5maXhlZF9mcmFtZV9yYXRlX2ZsYWcgPSBzcHMtPmZpeGVkX2ZyYW1lX3JhdGVf ZmxhZywKKyAgICAgICAgICAgIC5iaXRzdHJlYW1fcmVzdHJpY3Rpb25fZmxhZyA9IHNwcy0+Yml0 c3RyZWFtX3Jlc3RyaWN0aW9uX2ZsYWcsCisgICAgICAgICAgICAubmFsX2hyZF9wYXJhbWV0ZXJz X3ByZXNlbnRfZmxhZyA9IHNwcy0+bmFsX2hyZF9wYXJhbWV0ZXJzX3ByZXNlbnRfZmxhZywKKyAg ICAgICAgICAgIC52Y2xfaHJkX3BhcmFtZXRlcnNfcHJlc2VudF9mbGFnID0gc3BzLT52Y2xfaHJk X3BhcmFtZXRlcnNfcHJlc2VudF9mbGFnLAorICAgICAgICB9LAorICAgIH07CisKKyAgICAqdmtz cHMgPSAoU3RkVmlkZW9IMjY0U2VxdWVuY2VQYXJhbWV0ZXJTZXQpIHsKKyAgICAgICAgLnByb2Zp bGVfaWRjID0gc3BzLT5wcm9maWxlX2lkYywKKyAgICAgICAgLmxldmVsX2lkYyA9IGNvbnZlcnRf dG9fdmtfbGV2ZWxfaWRjKHNwcy0+bGV2ZWxfaWRjKSwKKyAgICAgICAgLnNlcV9wYXJhbWV0ZXJf c2V0X2lkID0gc3BzLT5zcHNfaWQsCisgICAgICAgIC5jaHJvbWFfZm9ybWF0X2lkYyA9IHNwcy0+ Y2hyb21hX2Zvcm1hdF9pZGMsCisgICAgICAgIC5iaXRfZGVwdGhfbHVtYV9taW51czggPSBzcHMt PmJpdF9kZXB0aF9sdW1hIC0gOCwKKyAgICAgICAgLmJpdF9kZXB0aF9jaHJvbWFfbWludXM4ID0g c3BzLT5iaXRfZGVwdGhfY2hyb21hIC0gOCwKKyAgICAgICAgLmxvZzJfbWF4X2ZyYW1lX251bV9t aW51czQgPSBzcHMtPmxvZzJfbWF4X2ZyYW1lX251bSAtIDQsCisgICAgICAgIC5waWNfb3JkZXJf Y250X3R5cGUgPSBzcHMtPnBvY190eXBlLAorICAgICAgICAubG9nMl9tYXhfcGljX29yZGVyX2Nu dF9sc2JfbWludXM0ID0gc3BzLT5wb2NfdHlwZSA/IDAgOiBzcHMtPmxvZzJfbWF4X3BvY19sc2Ig LSA0LAorICAgICAgICAub2Zmc2V0X2Zvcl9ub25fcmVmX3BpYyA9IHNwcy0+b2Zmc2V0X2Zvcl9u b25fcmVmX3BpYywKKyAgICAgICAgLm9mZnNldF9mb3JfdG9wX3RvX2JvdHRvbV9maWVsZCA9IHNw cy0+b2Zmc2V0X2Zvcl90b3BfdG9fYm90dG9tX2ZpZWxkLAorICAgICAgICAubnVtX3JlZl9mcmFt ZXNfaW5fcGljX29yZGVyX2NudF9jeWNsZSA9IHNwcy0+cG9jX2N5Y2xlX2xlbmd0aCwKKyAgICAg ICAgLm1heF9udW1fcmVmX2ZyYW1lcyA9IHNwcy0+cmVmX2ZyYW1lX2NvdW50LAorICAgICAgICAu cGljX3dpZHRoX2luX21ic19taW51czEgPSBzcHMtPm1iX3dpZHRoIC0gMSwKKyAgICAgICAgLnBp Y19oZWlnaHRfaW5fbWFwX3VuaXRzX21pbnVzMSA9IChzcHMtPm1iX2hlaWdodC8oMiAtIHNwcy0+ ZnJhbWVfbWJzX29ubHlfZmxhZykpIC0gMSwKKyAgICAgICAgLmZyYW1lX2Nyb3BfbGVmdF9vZmZz ZXQgPSBzcHMtPmNyb3BfbGVmdCwKKyAgICAgICAgLmZyYW1lX2Nyb3BfcmlnaHRfb2Zmc2V0ID0g c3BzLT5jcm9wX3JpZ2h0LAorICAgICAgICAuZnJhbWVfY3JvcF90b3Bfb2Zmc2V0ID0gc3BzLT5j cm9wX3RvcCwKKyAgICAgICAgLmZyYW1lX2Nyb3BfYm90dG9tX29mZnNldCA9IHNwcy0+Y3JvcF9i b3R0b20sCisgICAgICAgIC5mbGFncyA9IChTdGRWaWRlb0gyNjRTcHNGbGFncykgeworICAgICAg ICAgICAgLmNvbnN0cmFpbnRfc2V0MF9mbGFnID0gKHNwcy0+Y29uc3RyYWludF9zZXRfZmxhZ3Mg Pj4gMCkgJiAweDEsCisgICAgICAgICAgICAuY29uc3RyYWludF9zZXQxX2ZsYWcgPSAoc3BzLT5j b25zdHJhaW50X3NldF9mbGFncyA+PiAxKSAmIDB4MSwKKyAgICAgICAgICAgIC5jb25zdHJhaW50 X3NldDJfZmxhZyA9IChzcHMtPmNvbnN0cmFpbnRfc2V0X2ZsYWdzID4+IDIpICYgMHgxLAorICAg ICAgICAgICAgLmNvbnN0cmFpbnRfc2V0M19mbGFnID0gKHNwcy0+Y29uc3RyYWludF9zZXRfZmxh Z3MgPj4gMykgJiAweDEsCisgICAgICAgICAgICAuY29uc3RyYWludF9zZXQ0X2ZsYWcgPSAoc3Bz LT5jb25zdHJhaW50X3NldF9mbGFncyA+PiA0KSAmIDB4MSwKKyAgICAgICAgICAgIC5jb25zdHJh aW50X3NldDVfZmxhZyA9IChzcHMtPmNvbnN0cmFpbnRfc2V0X2ZsYWdzID4+IDUpICYgMHgxLAor ICAgICAgICAgICAgLmRpcmVjdF84eDhfaW5mZXJlbmNlX2ZsYWcgPSBzcHMtPmRpcmVjdF84eDhf aW5mZXJlbmNlX2ZsYWcsCisgICAgICAgICAgICAubWJfYWRhcHRpdmVfZnJhbWVfZmllbGRfZmxh ZyA9IHNwcy0+bWJfYWZmLAorICAgICAgICAgICAgLmZyYW1lX21ic19vbmx5X2ZsYWcgPSBzcHMt PmZyYW1lX21ic19vbmx5X2ZsYWcsCisgICAgICAgICAgICAuZGVsdGFfcGljX29yZGVyX2Fsd2F5 c196ZXJvX2ZsYWcgPSBzcHMtPmRlbHRhX3BpY19vcmRlcl9hbHdheXNfemVyb19mbGFnLAorICAg ICAgICAgICAgLnNlcGFyYXRlX2NvbG91cl9wbGFuZV9mbGFnID0gc3BzLT5yZXNpZHVhbF9jb2xv cl90cmFuc2Zvcm1fZmxhZywKKyAgICAgICAgICAgIC5nYXBzX2luX2ZyYW1lX251bV92YWx1ZV9h bGxvd2VkX2ZsYWcgPSBzcHMtPmdhcHNfaW5fZnJhbWVfbnVtX2FsbG93ZWRfZmxhZywKKyAgICAg ICAgICAgIC5xcHByaW1lX3lfemVyb190cmFuc2Zvcm1fYnlwYXNzX2ZsYWcgPSBzcHMtPnRyYW5z Zm9ybV9ieXBhc3MsCisgICAgICAgICAgICAuZnJhbWVfY3JvcHBpbmdfZmxhZyA9IHNwcy0+Y3Jv cCwKKyAgICAgICAgICAgIC5zZXFfc2NhbGluZ19tYXRyaXhfcHJlc2VudF9mbGFnID0gc3BzLT5z Y2FsaW5nX21hdHJpeF9wcmVzZW50LAorICAgICAgICAgICAgLnZ1aV9wYXJhbWV0ZXJzX3ByZXNl bnRfZmxhZyA9IHNwcy0+dnVpX3BhcmFtZXRlcnNfcHJlc2VudF9mbGFnLAorICAgICAgICB9LAor ICAgICAgICAucE9mZnNldEZvclJlZkZyYW1lID0gc3BzLT5vZmZzZXRfZm9yX3JlZl9mcmFtZSwK KyAgICAgICAgLnBTY2FsaW5nTGlzdHMgPSB2a3Nwc19zY2FsaW5nLAorICAgICAgICAucFNlcXVl bmNlUGFyYW1ldGVyU2V0VnVpID0gdmtzcHNfdnVpLAorICAgIH07Cit9CisKK3N0YXRpYyB2b2lk IHNldF9wcHMoY29uc3QgUFBTICpwcHMsIGNvbnN0IFNQUyAqc3BzLAorICAgICAgICAgICAgICAg ICAgICBTdGRWaWRlb0gyNjRTY2FsaW5nTGlzdHMgKnZrcHBzX3NjYWxpbmcsCisgICAgICAgICAg ICAgICAgICAgIFN0ZFZpZGVvSDI2NFBpY3R1cmVQYXJhbWV0ZXJTZXQgKnZrcHBzKQoreworICAg ICp2a3Bwc19zY2FsaW5nID0gKFN0ZFZpZGVvSDI2NFNjYWxpbmdMaXN0cykgeworICAgICAgICAu c2NhbGluZ19saXN0X3ByZXNlbnRfbWFzayA9IHBwcy0+cGljX3NjYWxpbmdfbWF0cml4X3ByZXNl bnRfbWFzaywKKyAgICAgICAgLnVzZV9kZWZhdWx0X3NjYWxpbmdfbWF0cml4X21hc2sgPSAwLCAv KiBXZSBhbHJlYWR5IGZpbGwgaW4gdGhlIGRlZmF1bHQgbWF0cml4ICovCisgICAgfTsKKworICAg IGZvciAoaW50IGkgPSAwOyBpIDwgU1REX1ZJREVPX0gyNjRfU0NBTElOR19MSVNUXzRYNF9OVU1f TElTVFM7IGkrKykKKyAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBTVERfVklERU9fSDI2NF9T Q0FMSU5HX0xJU1RfNFg0X05VTV9FTEVNRU5UUzsgaisrKQorICAgICAgICAgICAgdmtwcHNfc2Nh bGluZy0+U2NhbGluZ0xpc3Q0eDRbaV1bal0gPSBwcHMtPnNjYWxpbmdfbWF0cml4NFtpXVtmZl96 aWd6YWdfc2NhbltqXV07CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IFNURF9WSURFT19IMjY0 X1NDQUxJTkdfTElTVF84WDhfTlVNX0xJU1RTOyBpKyspCisgICAgICAgIGZvciAoaW50IGogPSAw OyBqIDwgU1REX1ZJREVPX0gyNjRfU0NBTElOR19MSVNUXzhYOF9OVU1fRUxFTUVOVFM7IGorKykK KyAgICAgICAgICAgIHZrcHBzX3NjYWxpbmctPlNjYWxpbmdMaXN0OHg4W2ldW2pdID0KKyAgICAg ICAgICAgICAgICBwcHMtPnNjYWxpbmdfbWF0cml4OFtoMjY0X3NjYWxpbmdfbGlzdDhfb3JkZXJb aV1dW2ZmX3ppZ3phZ19kaXJlY3Rbal1dOworCisgICAgKnZrcHBzID0gKFN0ZFZpZGVvSDI2NFBp Y3R1cmVQYXJhbWV0ZXJTZXQpIHsKKyAgICAgICAgLnNlcV9wYXJhbWV0ZXJfc2V0X2lkID0gcHBz LT5zcHNfaWQsCisgICAgICAgIC5waWNfcGFyYW1ldGVyX3NldF9pZCA9IHBwcy0+cHBzX2lkLAor ICAgICAgICAubnVtX3JlZl9pZHhfbDBfZGVmYXVsdF9hY3RpdmVfbWludXMxID0gcHBzLT5yZWZf Y291bnRbMF0gLSAxLAorICAgICAgICAubnVtX3JlZl9pZHhfbDFfZGVmYXVsdF9hY3RpdmVfbWlu dXMxID0gcHBzLT5yZWZfY291bnRbMV0gLSAxLAorICAgICAgICAud2VpZ2h0ZWRfYmlwcmVkX2lk YyA9IHBwcy0+d2VpZ2h0ZWRfYmlwcmVkX2lkYywKKyAgICAgICAgLnBpY19pbml0X3FwX21pbnVz MjYgPSBwcHMtPmluaXRfcXAgLSAyNiwKKyAgICAgICAgLnBpY19pbml0X3FzX21pbnVzMjYgPSBw cHMtPmluaXRfcXMgLSAyNiwKKyAgICAgICAgLmNocm9tYV9xcF9pbmRleF9vZmZzZXQgPSBwcHMt PmNocm9tYV9xcF9pbmRleF9vZmZzZXRbMF0sCisgICAgICAgIC5zZWNvbmRfY2hyb21hX3FwX2lu ZGV4X29mZnNldCA9IHBwcy0+Y2hyb21hX3FwX2luZGV4X29mZnNldFsxXSwKKyAgICAgICAgLmZs YWdzID0gKFN0ZFZpZGVvSDI2NFBwc0ZsYWdzKSB7CisgICAgICAgICAgICAudHJhbnNmb3JtXzh4 OF9tb2RlX2ZsYWcgPSBwcHMtPnRyYW5zZm9ybV84eDhfbW9kZSwKKyAgICAgICAgICAgIC5yZWR1 bmRhbnRfcGljX2NudF9wcmVzZW50X2ZsYWcgPSBwcHMtPnJlZHVuZGFudF9waWNfY250X3ByZXNl bnQsCisgICAgICAgICAgICAuY29uc3RyYWluZWRfaW50cmFfcHJlZF9mbGFnID0gcHBzLT5jb25z dHJhaW5lZF9pbnRyYV9wcmVkLAorICAgICAgICAgICAgLmRlYmxvY2tpbmdfZmlsdGVyX2NvbnRy b2xfcHJlc2VudF9mbGFnID0gcHBzLT5kZWJsb2NraW5nX2ZpbHRlcl9wYXJhbWV0ZXJzX3ByZXNl bnQsCisgICAgICAgICAgICAud2VpZ2h0ZWRfcHJlZF9mbGFnID0gcHBzLT53ZWlnaHRlZF9wcmVk LAorICAgICAgICAgICAgLmJvdHRvbV9maWVsZF9waWNfb3JkZXJfaW5fZnJhbWVfcHJlc2VudF9m bGFnID0gcHBzLT5waWNfb3JkZXJfcHJlc2VudCwKKyAgICAgICAgICAgIC5lbnRyb3B5X2NvZGlu Z19tb2RlX2ZsYWcgPSBwcHMtPmNhYmFjLAorICAgICAgICAgICAgLnBpY19zY2FsaW5nX21hdHJp eF9wcmVzZW50X2ZsYWcgPSBwcHMtPnBpY19zY2FsaW5nX21hdHJpeF9wcmVzZW50X2ZsYWcsCisg ICAgICAgIH0sCisgICAgICAgIC5wU2NhbGluZ0xpc3RzID0gdmtwcHNfc2NhbGluZywKKyAgICB9 OworfQorCitzdGF0aWMgaW50IHZrX2gyNjRfY3JlYXRlX3BhcmFtcyhBVkNvZGVjQ29udGV4dCAq YXZjdHgsIEFWQnVmZmVyUmVmICoqYnVmKQoreworICAgIGludCBlcnI7CisgICAgRkZWdWxrYW5E ZWNvZGVDb250ZXh0ICpkZWMgPSBhdmN0eC0+aW50ZXJuYWwtPmh3YWNjZWxfcHJpdl9kYXRhOwor ICAgIEZGVnVsa2FuRGVjb2RlU2hhcmVkICpjdHggPSBkZWMtPnNoYXJlZF9jdHg7CisgICAgY29u c3QgSDI2NENvbnRleHQgKmggPSBhdmN0eC0+cHJpdl9kYXRhOworCisgICAgLyogU1BTICovCisg ICAgU3RkVmlkZW9IMjY0U2NhbGluZ0xpc3RzIHZrc3BzX3NjYWxpbmdbTUFYX1NQU19DT1VOVF07 CisgICAgU3RkVmlkZW9IMjY0SHJkUGFyYW1ldGVycyB2a3Nwc192dWlfaGVhZGVyW01BWF9TUFNf Q09VTlRdOworICAgIFN0ZFZpZGVvSDI2NFNlcXVlbmNlUGFyYW1ldGVyU2V0VnVpIHZrc3BzX3Z1 aVtNQVhfU1BTX0NPVU5UXTsKKyAgICBTdGRWaWRlb0gyNjRTZXF1ZW5jZVBhcmFtZXRlclNldCB2 a3Nwc1tNQVhfU1BTX0NPVU5UXTsKKworICAgIC8qIFBQUyAqLworICAgIFN0ZFZpZGVvSDI2NFNj YWxpbmdMaXN0cyB2a3Bwc19zY2FsaW5nW01BWF9QUFNfQ09VTlRdOworICAgIFN0ZFZpZGVvSDI2 NFBpY3R1cmVQYXJhbWV0ZXJTZXQgdmtwcHNbTUFYX1BQU19DT1VOVF07CisKKyAgICBWa1ZpZGVv RGVjb2RlSDI2NFNlc3Npb25QYXJhbWV0ZXJzQWRkSW5mb0tIUiBoMjY0X3BhcmFtc19pbmZvID0g eworICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9WSURFT19ERUNPREVfSDI2NF9T RVNTSU9OX1BBUkFNRVRFUlNfQUREX0lORk9fS0hSLAorICAgICAgICAucFN0ZFNQU3MgPSB2a3Nw cywKKyAgICAgICAgLnN0ZFNQU0NvdW50ID0gMCwKKyAgICAgICAgLnBTdGRQUFNzID0gdmtwcHMs CisgICAgICAgIC5zdGRQUFNDb3VudCA9IDAsCisgICAgfTsKKyAgICBWa1ZpZGVvRGVjb2RlSDI2 NFNlc3Npb25QYXJhbWV0ZXJzQ3JlYXRlSW5mb0tIUiBoMjY0X3BhcmFtcyA9IHsKKyAgICAgICAg LnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfVklERU9fREVDT0RFX0gyNjRfU0VTU0lPTl9QQVJB TUVURVJTX0NSRUFURV9JTkZPX0tIUiwKKyAgICAgICAgLnBQYXJhbWV0ZXJzQWRkSW5mbyA9ICZo MjY0X3BhcmFtc19pbmZvLAorICAgIH07CisgICAgVmtWaWRlb1Nlc3Npb25QYXJhbWV0ZXJzQ3Jl YXRlSW5mb0tIUiBzZXNzaW9uX3BhcmFtc19jcmVhdGUgPSB7CisgICAgICAgIC5zVHlwZSA9IFZL X1NUUlVDVFVSRV9UWVBFX1ZJREVPX1NFU1NJT05fUEFSQU1FVEVSU19DUkVBVEVfSU5GT19LSFIs CisgICAgICAgIC5wTmV4dCA9ICZoMjY0X3BhcmFtcywKKyAgICAgICAgLnZpZGVvU2Vzc2lvbiA9 IGN0eC0+Y29tbW9uLnNlc3Npb24sCisgICAgICAgIC52aWRlb1Nlc3Npb25QYXJhbWV0ZXJzVGVt cGxhdGUgPSBWS19OVUxMX0hBTkRMRSwKKyAgICB9OworCisgICAgLyogU1BTIGxpc3QgKi8KKyAg ICBmb3IgKGludCBpID0gMDsgaSA8IEZGX0FSUkFZX0VMRU1TKGgtPnBzLnNwc19saXN0KTsgaSsr KSB7CisgICAgICAgIGlmIChoLT5wcy5zcHNfbGlzdFtpXSkgeworICAgICAgICAgICAgY29uc3Qg U1BTICpzcHNfbCA9IGgtPnBzLnNwc19saXN0W2ldOworICAgICAgICAgICAgaW50IGlkeCA9IGgy NjRfcGFyYW1zX2luZm8uc3RkU1BTQ291bnQ7CisgICAgICAgICAgICBzZXRfc3BzKHNwc19sLCAm dmtzcHNfc2NhbGluZ1tpZHhdLCAmdmtzcHNfdnVpX2hlYWRlcltpZHhdLCAmdmtzcHNfdnVpW2lk eF0sICZ2a3Nwc1tpZHhdKTsKKyAgICAgICAgICAgIGgyNjRfcGFyYW1zX2luZm8uc3RkU1BTQ291 bnQrKzsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIFBQUyBsaXN0ICovCisgICAgZm9yIChp bnQgaSA9IDA7IGkgPCBGRl9BUlJBWV9FTEVNUyhoLT5wcy5wcHNfbGlzdCk7IGkrKykgeworICAg ICAgICBpZiAoaC0+cHMucHBzX2xpc3RbaV0pIHsKKyAgICAgICAgICAgIGNvbnN0IFBQUyAqcHBz X2wgPSBoLT5wcy5wcHNfbGlzdFtpXTsKKyAgICAgICAgICAgIGludCBpZHggPSBoMjY0X3BhcmFt c19pbmZvLnN0ZFBQU0NvdW50OworICAgICAgICAgICAgc2V0X3BwcyhwcHNfbCwgcHBzX2wtPnNw cywgJnZrcHBzX3NjYWxpbmdbaWR4XSwgJnZrcHBzW2lkeF0pOworICAgICAgICAgICAgaDI2NF9w YXJhbXNfaW5mby5zdGRQUFNDb3VudCsrOworICAgICAgICB9CisgICAgfQorCisgICAgaDI2NF9w YXJhbXMubWF4U3RkU1BTQ291bnQgPSBoMjY0X3BhcmFtc19pbmZvLnN0ZFNQU0NvdW50OworICAg IGgyNjRfcGFyYW1zLm1heFN0ZFBQU0NvdW50ID0gaDI2NF9wYXJhbXNfaW5mby5zdGRQUFNDb3Vu dDsKKworICAgIGVyciA9IGZmX3ZrX2RlY29kZV9jcmVhdGVfcGFyYW1zKGJ1ZiwgYXZjdHgsIGN0 eCwgJnNlc3Npb25fcGFyYW1zX2NyZWF0ZSk7CisgICAgaWYgKGVyciA8IDApCisgICAgICAgIHJl dHVybiBlcnI7CisKKyAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19ERUJVRywgIkNyZWF0ZWQgZnJh bWUgcGFyYW1ldGVyczogJWkgU1BTICVpIFBQU1xuIiwKKyAgICAgICAgICAgaDI2NF9wYXJhbXNf aW5mby5zdGRTUFNDb3VudCwgaDI2NF9wYXJhbXNfaW5mby5zdGRQUFNDb3VudCk7CisKKyAgICBy ZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2a19oMjY0X3N0YXJ0X2ZyYW1lKEFWQ29kZWNDb250 ZXh0ICAgICAgICAgICphdmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdl91 bnVzZWQgY29uc3QgQVZCdWZmZXJSZWYgKmJ1ZmZlcl9yZWYsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgYXZfdW51c2VkIGNvbnN0IHVpbnQ4X3QgKmJ1ZmZlciwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBhdl91bnVzZWQgdWludDMyX3QgICAgICAgc2l6ZSkKK3sKKyAg ICBpbnQgZXJyOworICAgIGludCBkcGJfc2xvdF9pbmRleCA9IDA7CisgICAgSDI2NENvbnRleHQg KmggPSBhdmN0eC0+cHJpdl9kYXRhOworCisgICAgSDI2NFBpY3R1cmUgKnBpYyA9IGgtPmN1cl9w aWNfcHRyOworICAgIEgyNjRWdWxrYW5EZWNvZGVQaWN0dXJlICpocCA9IHBpYy0+aHdhY2NlbF9w aWN0dXJlX3ByaXZhdGU7CisgICAgRkZWdWxrYW5EZWNvZGVQaWN0dXJlICp2cCA9ICZocC0+dnA7 CisKKyAgICAvKiBGaWxsIGluIG1haW4gc2xvdCAqLworICAgIGRwYl9zbG90X2luZGV4ID0gMDsK KyAgICBmb3IgKHVuc2lnbmVkIHNsb3QgPSAwOyBzbG90IDwgSDI2NF9NQVhfUElDVFVSRV9DT1VO VDsgc2xvdCsrKSB7CisgICAgICAgIGlmIChwaWMgPT0gJmgtPkRQQltzbG90XSkgeworICAgICAg ICAgICAgZHBiX3Nsb3RfaW5kZXggPSBzbG90OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg IH0KKyAgICB9CisKKyAgICBlcnIgPSB2a19oMjY0X2ZpbGxfcGljdChhdmN0eCwgTlVMTCwgJnZw LT5yZWZfc2xvdCwgJnZwLT5yZWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmhwLT52 a2gyNjRfcmVmLCAmaHAtPmgyNjRfcmVmLCBwaWMsIDEsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaC0+RFBCW2RwYl9zbG90X2luZGV4XS5maWVsZF9waWN0dXJlLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGgtPkRQQltkcGJfc2xvdF9pbmRleF0ucmVmZXJlbmNlLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGRwYl9zbG90X2luZGV4KTsKKyAgICBpZiAoZXJyIDwgMCkK KyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIC8qIEZpbGwgaW4gc2hvcnQtdGVybSByZWZlcmVu Y2VzICovCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBoLT5zaG9ydF9yZWZfY291bnQ7IGkrKykg eworICAgICAgICBkcGJfc2xvdF9pbmRleCA9IDA7CisgICAgICAgIGZvciAodW5zaWduZWQgc2xv dCA9IDA7IHNsb3QgPCBIMjY0X01BWF9QSUNUVVJFX0NPVU5UOyBzbG90KyspIHsKKyAgICAgICAg ICAgIGlmIChoLT5zaG9ydF9yZWZbaV0gPT0gJmgtPkRQQltzbG90XSkgeworICAgICAgICAgICAg ICAgIGRwYl9zbG90X2luZGV4ID0gc2xvdDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlcnIgPSB2a19oMjY0X2ZpbGxfcGljdChhdmN0 eCwgJmhwLT5yZWZfc3JjW2ldLCAmdnAtPnJlZl9zbG90c1tpXSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJnZwLT5yZWZzW2ldLCAmaHAtPnZraDI2NF9yZWZzW2ldLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAmaHAtPmgyNjRfcmVmc1tpXSwgaC0+c2hvcnRfcmVm W2ldLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoLT5EUEJbZHBiX3Nsb3Rf aW5kZXhdLmZpZWxkX3BpY3R1cmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGgt PkRQQltkcGJfc2xvdF9pbmRleF0ucmVmZXJlbmNlLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBkcGJfc2xvdF9pbmRleCk7CisgICAgICAgIGlmIChlcnIgPCAwKQorICAgICAgICAg ICAgcmV0dXJuIGVycjsKKyAgICB9CisKKyAgICAvKiBGaWxsIGluIGxvbmctdGVybSByZWZzICov CisgICAgZm9yIChpbnQgciA9IDAsIGkgPSBoLT5zaG9ydF9yZWZfY291bnQ7IHIgPCBIMjY0X01B WF9EUEJfRlJBTUVTICYmCisgICAgICAgICBpIDwgaC0+c2hvcnRfcmVmX2NvdW50ICsgaC0+bG9u Z19yZWZfY291bnQ7IHIrKykgeworICAgICAgICBpZiAoIWgtPmxvbmdfcmVmW3JdKQorICAgICAg ICAgICAgY29udGludWU7CisKKyAgICAgICAgZHBiX3Nsb3RfaW5kZXggPSAwOworICAgICAgICBm b3IgKHVuc2lnbmVkIHNsb3QgPSAwOyBzbG90IDwgMTY7IHNsb3QrKykgeworICAgICAgICAgICAg aWYgKGgtPmxvbmdfcmVmW3JdID09ICZoLT5EUEJbc2xvdF0pIHsKKyAgICAgICAgICAgICAgICBk cGJfc2xvdF9pbmRleCA9IHNsb3Q7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg ICB9CisgICAgICAgIH0KKyAgICAgICAgZXJyID0gdmtfaDI2NF9maWxsX3BpY3QoYXZjdHgsICZo cC0+cmVmX3NyY1tpXSwgJnZwLT5yZWZfc2xvdHNbaV0sCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICZ2cC0+cmVmc1tpXSwgJmhwLT52a2gyNjRfcmVmc1tpXSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJmhwLT5oMjY0X3JlZnNbaV0sIGgtPmxvbmdfcmVmW3JdLCAw LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoLT5EUEJbZHBiX3Nsb3RfaW5kZXhd LmZpZWxkX3BpY3R1cmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGgtPkRQQltk cGJfc2xvdF9pbmRleF0ucmVmZXJlbmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBkcGJfc2xvdF9pbmRleCk7CisgICAgICAgIGlmIChlcnIgPCAwKQorICAgICAgICAgICAgcmV0 dXJuIGVycjsKKyAgICAgICAgaSsrOworICAgIH0KKworICAgIGhwLT5oMjY0cGljID0gKFN0ZFZp ZGVvRGVjb2RlSDI2NFBpY3R1cmVJbmZvKSB7CisgICAgICAgIC5zZXFfcGFyYW1ldGVyX3NldF9p ZCA9IHBpYy0+cHBzLT5zcHNfaWQsCisgICAgICAgIC5waWNfcGFyYW1ldGVyX3NldF9pZCA9IHBp Yy0+cHBzLT5wcHNfaWQsCisgICAgICAgIC5mcmFtZV9udW0gPSAwLCAgLyogU2V0IGxhdGVyICov CisgICAgICAgIC5pZHJfcGljX2lkID0gMCwgLyogU2V0IGxhdGVyICovCisgICAgICAgIC5QaWNP cmRlckNudFswXSA9IHBpYy0+ZmllbGRfcG9jWzBdLAorICAgICAgICAuUGljT3JkZXJDbnRbMV0g PSBwaWMtPmZpZWxkX3BvY1sxXSwKKyAgICAgICAgLmZsYWdzID0gKFN0ZFZpZGVvRGVjb2RlSDI2 NFBpY3R1cmVJbmZvRmxhZ3MpIHsKKyAgICAgICAgICAgIC5maWVsZF9waWNfZmxhZyA9IEZJRUxE X1BJQ1RVUkUoaCksCisgICAgICAgICAgICAuaXNfaW50cmEgPSAxLCAvKiBTZXQgbGF0ZXIgKi8K KyAgICAgICAgICAgIC5JZHJQaWNGbGFnID0gaC0+cGljdHVyZV9pZHIsCisgICAgICAgICAgICAu Ym90dG9tX2ZpZWxkX2ZsYWcgPSBoLT5waWN0dXJlX3N0cnVjdHVyZSAhPSBQSUNUX0ZSQU1FICYm CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoLT5waWN0dXJlX3N0cnVjdHVyZSAm IFBJQ1RfQk9UVE9NX0ZJRUxELAorICAgICAgICAgICAgLmlzX3JlZmVyZW5jZSA9IGgtPm5hbF9y ZWZfaWRjICE9IDAsCisgICAgICAgICAgICAuY29tcGxlbWVudGFyeV9maWVsZF9wYWlyID0gaC0+ Zmlyc3RfZmllbGQgJiYgRklFTERfUElDVFVSRShoKSwKKyAgICAgICAgfSwKKyAgICB9OworCisg ICAgaHAtPmgyNjRfcGljX2luZm8gPSAoVmtWaWRlb0RlY29kZUgyNjRQaWN0dXJlSW5mb0tIUikg eworICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9WSURFT19ERUNPREVfSDI2NF9Q SUNUVVJFX0lORk9fS0hSLAorICAgICAgICAucFN0ZFBpY3R1cmVJbmZvID0gJmhwLT5oMjY0cGlj LAorICAgIH07CisKKyAgICB2cC0+ZGVjb2RlX2luZm8gPSAoVmtWaWRlb0RlY29kZUluZm9LSFIp IHsKKyAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfVklERU9fREVDT0RFX0lORk9f S0hSLAorICAgICAgICAucE5leHQgPSAmaHAtPmgyNjRfcGljX2luZm8sCisgICAgICAgIC5mbGFn cyA9IDB4MCwKKyAgICAgICAgLnBTZXR1cFJlZmVyZW5jZVNsb3QgPSAmdnAtPnJlZl9zbG90LAor ICAgICAgICAucmVmZXJlbmNlU2xvdENvdW50ID0gaC0+c2hvcnRfcmVmX2NvdW50ICsgaC0+bG9u Z19yZWZfY291bnQsCisgICAgICAgIC5wUmVmZXJlbmNlU2xvdHMgPSB2cC0+cmVmX3Nsb3RzLAor ICAgICAgICAuZHN0UGljdHVyZVJlc291cmNlID0gKFZrVmlkZW9QaWN0dXJlUmVzb3VyY2VJbmZv S0hSKSB7CisgICAgICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9WSURFT19QSUNU VVJFX1JFU09VUkNFX0lORk9fS0hSLAorICAgICAgICAgICAgLmNvZGVkT2Zmc2V0ID0gKFZrT2Zm c2V0MkQpeyAwLCAwIH0sCisgICAgICAgICAgICAuY29kZWRFeHRlbnQgPSAoVmtFeHRlbnQyRCl7 IHBpYy0+Zi0+d2lkdGgsIHBpYy0+Zi0+aGVpZ2h0IH0sCisgICAgICAgICAgICAuYmFzZUFycmF5 TGF5ZXIgPSAwLAorICAgICAgICAgICAgLmltYWdlVmlld0JpbmRpbmcgPSB2cC0+dmlldy5vdXRb MF0sCisgICAgICAgIH0sCisgICAgfTsKKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50 IHZrX2gyNjRfZGVjb2RlX3NsaWNlKEFWQ29kZWNDb250ZXh0ICphdmN0eCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAgKmRhdGEsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICAgICAgICBzaXplKQoreworICAgIGNvbnN0IEgy NjRDb250ZXh0ICpoID0gYXZjdHgtPnByaXZfZGF0YTsKKyAgICBjb25zdCBIMjY0U2xpY2VDb250 ZXh0ICpzbCAgPSAmaC0+c2xpY2VfY3R4WzBdOworICAgIEgyNjRWdWxrYW5EZWNvZGVQaWN0dXJl ICpocCA9IGgtPmN1cl9waWNfcHRyLT5od2FjY2VsX3BpY3R1cmVfcHJpdmF0ZTsKKyAgICBGRlZ1 bGthbkRlY29kZVBpY3R1cmUgKnZwID0gJmhwLT52cDsKKworICAgIGludCBlcnIgPSBmZl92a19k ZWNvZGVfYWRkX3NsaWNlKGF2Y3R4LCB2cCwgZGF0YSwgc2l6ZSwgMSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAmaHAtPmgyNjRfcGljX2luZm8uc2xpY2VDb3VudCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaHAtPmgyNjRfcGljX2luZm8ucFNs aWNlT2Zmc2V0cyk7CisgICAgaWYgKGVyciA8IDApCisgICAgICAgIHJldHVybiBlcnI7CisKKyAg ICBocC0+aDI2NHBpYy5mcmFtZV9udW0gPSBzbC0+ZnJhbWVfbnVtOworICAgIGhwLT5oMjY0cGlj Lmlkcl9waWNfaWQgPSBzbC0+aWRyX3BpY19pZDsKKworICAgIC8qIEZyYW1lIGlzIG9ubHkgaW50 cmEgb2YgYWxsIHNsaWNlcyBhcmUgbWFya2VkIGFzIGludHJhICovCisgICAgaWYgKHNsLT5zbGlj ZV90eXBlICE9IEFWX1BJQ1RVUkVfVFlQRV9JICYmIHNsLT5zbGljZV90eXBlICE9IEFWX1BJQ1RV UkVfVFlQRV9TSSkKKyAgICAgICAgaHAtPmgyNjRwaWMuZmxhZ3MuaXNfaW50cmEgPSAwOworCisg ICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmtfaDI2NF9lbmRfZnJhbWUoQVZDb2RlY0Nv bnRleHQgKmF2Y3R4KQoreworICAgIGNvbnN0IEgyNjRDb250ZXh0ICpoID0gYXZjdHgtPnByaXZf ZGF0YTsKKyAgICBGRlZ1bGthbkRlY29kZUNvbnRleHQgKmRlYyA9IGF2Y3R4LT5pbnRlcm5hbC0+ aHdhY2NlbF9wcml2X2RhdGE7CisgICAgRkZWdWxrYW5EZWNvZGVTaGFyZWQgKmN0eCA9IGRlYy0+ c2hhcmVkX2N0eDsKKworICAgIEgyNjRQaWN0dXJlICpwaWMgPSBoLT5jdXJfcGljX3B0cjsKKyAg ICBIMjY0VnVsa2FuRGVjb2RlUGljdHVyZSAqaHAgPSBwaWMtPmh3YWNjZWxfcGljdHVyZV9wcml2 YXRlOworICAgIEZGVnVsa2FuRGVjb2RlUGljdHVyZSAqdnAgPSAmaHAtPnZwOworICAgIEZGVnVs a2FuRGVjb2RlUGljdHVyZSAqcnZwW0gyNjRfTUFYX1BJQ1RVUkVfQ09VTlRdID0geyAwIH07Cisg ICAgQVZGcmFtZSAqcmF2W0gyNjRfTUFYX1BJQ1RVUkVfQ09VTlRdID0geyAwIH07CisKKyNpZmRl ZiBWS19LSFJfdmlkZW9fbWFpbnRlbmFuY2UyCisgICAgU3RkVmlkZW9IMjY0U2NhbGluZ0xpc3Rz IHZrc3BzX3NjYWxpbmc7CisgICAgU3RkVmlkZW9IMjY0SHJkUGFyYW1ldGVycyB2a3Nwc192dWlf aGVhZGVyOworICAgIFN0ZFZpZGVvSDI2NFNlcXVlbmNlUGFyYW1ldGVyU2V0VnVpIHZrc3BzX3Z1 aTsKKyAgICBTdGRWaWRlb0gyNjRTZXF1ZW5jZVBhcmFtZXRlclNldCB2a3NwczsKKyAgICBTdGRW aWRlb0gyNjRTY2FsaW5nTGlzdHMgdmtwcHNfc2NhbGluZzsKKyAgICBTdGRWaWRlb0gyNjRQaWN0 dXJlUGFyYW1ldGVyU2V0IHZrcHBzOworICAgIFZrVmlkZW9EZWNvZGVIMjY0SW5saW5lU2Vzc2lv blBhcmFtZXRlcnNJbmZvS0hSIGgyNjRfcGFyYW1zOworCisgICAgaWYgKGN0eC0+cy5leHRlbnNp b25zICYgRkZfVktfRVhUX1ZJREVPX01BSU5URU5BTkNFXzIpIHsKKyAgICAgICAgc2V0X3Nwcyho LT5wcy5zcHMsICZ2a3Nwc19zY2FsaW5nLAorICAgICAgICAgICAgICAgICZ2a3Nwc192dWlfaGVh ZGVyLCAmdmtzcHNfdnVpLCAmdmtzcHMpOworICAgICAgICBzZXRfcHBzKGgtPnBzLnBwcywgaC0+ cHMuc3BzLCAmdmtwcHNfc2NhbGluZywgJnZrcHBzKTsKKyAgICAgICAgaDI2NF9wYXJhbXMgPSAo VmtWaWRlb0RlY29kZUgyNjRJbmxpbmVTZXNzaW9uUGFyYW1ldGVyc0luZm9LSFIpIHsKKyAgICAg ICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX1ZJREVPX0RFQ09ERV9IMjY0X0lOTElO RV9TRVNTSU9OX1BBUkFNRVRFUlNfSU5GT19LSFIsCisgICAgICAgICAgICAucFN0ZFNQUyA9ICZ2 a3NwcywKKyAgICAgICAgICAgIC5wU3RkUFBTID0gJnZrcHBzLAorICAgICAgICB9OworICAgICAg ICBocC0+aDI2NF9waWNfaW5mby5wTmV4dCA9ICZoMjY0X3BhcmFtczsKKyAgICB9CisjZW5kaWYK KworICAgIGlmICghaHAtPmgyNjRfcGljX2luZm8uc2xpY2VDb3VudCkKKyAgICAgICAgcmV0dXJu IDA7CisKKyAgICBpZiAoIXZwLT5zbGljZXNfYnVmKQorICAgICAgICByZXR1cm4gQVZFUlJPUihF SU5WQUwpOworCisgICAgaWYgKCFkZWMtPnNlc3Npb25fcGFyYW1zICYmCisgICAgICAgICEoY3R4 LT5zLmV4dGVuc2lvbnMgJiBGRl9WS19FWFRfVklERU9fTUFJTlRFTkFOQ0VfMikpIHsKKyAgICAg ICAgaW50IGVyciA9IHZrX2gyNjRfY3JlYXRlX3BhcmFtcyhhdmN0eCwgJmRlYy0+c2Vzc2lvbl9w YXJhbXMpOworICAgICAgICBpZiAoZXJyIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBlcnI7CisK KyAgICAgICAgaHAtPmgyNjRwaWMuc2VxX3BhcmFtZXRlcl9zZXRfaWQgPSBwaWMtPnBwcy0+c3Bz X2lkOworICAgICAgICBocC0+aDI2NHBpYy5waWNfcGFyYW1ldGVyX3NldF9pZCA9IHBpYy0+cHBz LT5wcHNfaWQ7CisgICAgfQorCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2cC0+ZGVjb2RlX2lu Zm8ucmVmZXJlbmNlU2xvdENvdW50OyBpKyspIHsKKyAgICAgICAgSDI2NFBpY3R1cmUgKnJwID0g aHAtPnJlZl9zcmNbaV07CisgICAgICAgIEgyNjRWdWxrYW5EZWNvZGVQaWN0dXJlICpyaHAgPSBy cC0+aHdhY2NlbF9waWN0dXJlX3ByaXZhdGU7CisKKyAgICAgICAgcnZwW2ldID0gJnJocC0+dnA7 CisgICAgICAgIHJhdltpXSA9IGhwLT5yZWZfc3JjW2ldLT5mOworICAgIH0KKworICAgIGF2X2xv ZyhhdmN0eCwgQVZfTE9HX0RFQlVHLCAiRGVjb2RpbmcgZnJhbWUsICUiU0laRV9TUEVDSUZJRVIi IGJ5dGVzLCAlaSBzbGljZXNcbiIsCisgICAgICAgICAgIHZwLT5zbGljZXNfc2l6ZSwgaHAtPmgy NjRfcGljX2luZm8uc2xpY2VDb3VudCk7CisKKyAgICByZXR1cm4gZmZfdmtfZGVjb2RlX2ZyYW1l KGF2Y3R4LCBwaWMtPmYsIHZwLCByYXYsIHJ2cCk7Cit9CisKK3N0YXRpYyB2b2lkIHZrX2gyNjRf ZnJlZV9mcmFtZV9wcml2KEFWUmVmU3RydWN0T3BhcXVlIF9od2N0eCwgdm9pZCAqZGF0YSkKK3sK KyAgICBBVkhXRGV2aWNlQ29udGV4dCAqaHdjdHggPSBfaHdjdHgubmM7CisgICAgSDI2NFZ1bGth bkRlY29kZVBpY3R1cmUgKmhwID0gZGF0YTsKKworICAgIC8qIEZyZWUgZnJhbWUgcmVzb3VyY2Vz LCB0aGlzIGFsc28gZGVzdHJveXMgdGhlIHNlc3Npb24gcGFyYW1ldGVycy4gKi8KKyAgICBmZl92 a19kZWNvZGVfZnJlZV9mcmFtZShod2N0eCwgJmhwLT52cCk7Cit9CisKK2NvbnN0IEZGSFdBY2Nl bCBmZl9oMjY0X3Z1bGthbl9od2FjY2VsID0geworICAgIC5wLm5hbWUgICAgICAgICAgICAgICAg PSAiaDI2NF92dWxrYW4iLAorICAgIC5wLnR5cGUgICAgICAgICAgICAgICAgPSBBVk1FRElBX1RZ UEVfVklERU8sCisgICAgLnAuaWQgICAgICAgICAgICAgICAgICA9IEFWX0NPREVDX0lEX0gyNjQs CisgICAgLnAucGl4X2ZtdCAgICAgICAgICAgICA9IEFWX1BJWF9GTVRfVlVMS0FOLAorICAgIC5z dGFydF9mcmFtZSAgICAgICAgICAgPSAmdmtfaDI2NF9zdGFydF9mcmFtZSwKKyAgICAuZGVjb2Rl X3NsaWNlICAgICAgICAgID0gJnZrX2gyNjRfZGVjb2RlX3NsaWNlLAorICAgIC5lbmRfZnJhbWUg ICAgICAgICAgICAgPSAmdmtfaDI2NF9lbmRfZnJhbWUsCisgICAgLmZyZWVfZnJhbWVfcHJpdiAg ICAgICA9ICZ2a19oMjY0X2ZyZWVfZnJhbWVfcHJpdiwKKyAgICAuZnJhbWVfcHJpdl9kYXRhX3Np emUgID0gc2l6ZW9mKEgyNjRWdWxrYW5EZWNvZGVQaWN0dXJlKSwKKyAgICAuaW5pdCAgICAgICAg ICAgICAgICAgID0gJmZmX3ZrX2RlY29kZV9pbml0LAorICAgIC51cGRhdGVfdGhyZWFkX2NvbnRl eHQgPSAmZmZfdmtfdXBkYXRlX3RocmVhZF9jb250ZXh0LAorICAgIC5kZWNvZGVfcGFyYW1zICAg ICAgICAgPSAmZmZfdmtfcGFyYW1zX2ludmFsaWRhdGUsCisgICAgLmZsdXNoICAgICAgICAgICAg ICAgICA9ICZmZl92a19kZWNvZGVfZmx1c2gsCisgICAgLnVuaW5pdCAgICAgICAgICAgICAgICA9 ICZmZl92a19kZWNvZGVfdW5pbml0LAorICAgIC5mcmFtZV9wYXJhbXMgICAgICAgICAgPSAmZmZf dmtfZnJhbWVfcGFyYW1zLAorICAgIC5wcml2X2RhdGFfc2l6ZSAgICAgICAgPSBzaXplb2YoRkZW dWxrYW5EZWNvZGVDb250ZXh0KSwKKyAgICAuY2Fwc19pbnRlcm5hbCAgICAgICAgID0gSFdBQ0NF TF9DQVBfQVNZTkNfU0FGRSwKK307Ci0tIAoyLjQ5LjEKCgpGcm9tIDc4YjZhZDZjZTkxYWYzYmE1 NWNiODFhNTM4YjRmYmM0YzhkY2U3MDMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCkZyb206IEph bWFpa2ExIDxsdWthc3pjejE4QHdwLnBsPgpEYXRlOiBXZWQsIDMgU2VwIDIwMjUgMTM6Mzg6MjYg KzAwMDAKU3ViamVjdDogW1BBVENIIDA4My8xMThdIENoYW5naW5nIHZ1bGthbiBmaWxlIGRpcmVj dG9yeQoKLS0tCiBsaWJhdmNvZGVjL3Z1bGthbl9oZXZjLmMgfCA5NTcgLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgOTU3IGRlbGV0aW9ucygt KQogZGVsZXRlIG1vZGUgMTAwNjQ0IGxpYmF2Y29kZWMvdnVsa2FuX2hldmMuYwoKZGlmZiAtLWdp dCBhL2xpYmF2Y29kZWMvdnVsa2FuX2hldmMuYyBiL2xpYmF2Y29kZWMvdnVsa2FuX2hldmMuYwpk ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWUxNWM2YjkzMS4uMDAwMDAwMDAwMAotLS0g YS9saWJhdmNvZGVjL3Z1bGthbl9oZXZjLmMKKysrIC9kZXYvbnVsbApAQCAtMSw5NTcgKzAsMCBA QAotLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KLSAqCi0gKiBGRm1wZWcgaXMg ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkg aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBM aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo ZXIKLSAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu eSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3 aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBv ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNz ZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBz aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs aWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZy ZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm dGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKLSAqLwotCi0jaW5jbHVkZSAibGli YXZ1dGlsL21lbS5oIgotI2luY2x1ZGUgImhldmMvaGV2Y2RlYy5oIgotI2luY2x1ZGUgImhldmMv ZGF0YS5oIgotI2luY2x1ZGUgImhldmMvcHMuaCIKLQotI2luY2x1ZGUgInZ1bGthbl9kZWNvZGUu aCIKLQotY29uc3QgRkZWdWxrYW5EZWNvZGVEZXNjcmlwdG9yIGZmX3ZrX2RlY19oZXZjX2Rlc2Mg PSB7Ci0gICAgLmNvZGVjX2lkICAgICAgICAgPSBBVl9DT0RFQ19JRF9IRVZDLAotICAgIC5kZWNv ZGVfZXh0ZW5zaW9uID0gRkZfVktfRVhUX1ZJREVPX0RFQ09ERV9IMjY1LAotICAgIC5xdWV1ZV9m bGFncyAgICAgID0gVktfUVVFVUVfVklERU9fREVDT0RFX0JJVF9LSFIsCi0gICAgLmRlY29kZV9v cCAgICAgICAgPSBWS19WSURFT19DT0RFQ19PUEVSQVRJT05fREVDT0RFX0gyNjVfQklUX0tIUiwK LSAgICAuZXh0X3Byb3BzID0gewotICAgICAgICAuZXh0ZW5zaW9uTmFtZSA9IFZLX1NURF9WVUxL QU5fVklERU9fQ09ERUNfSDI2NV9ERUNPREVfRVhURU5TSU9OX05BTUUsCi0gICAgICAgIC5zcGVj VmVyc2lvbiAgID0gVktfU1REX1ZVTEtBTl9WSURFT19DT0RFQ19IMjY1X0RFQ09ERV9TUEVDX1ZF UlNJT04sCi0gICAgfSwKLX07Ci0KLXR5cGVkZWYgc3RydWN0IEhFVkNIZWFkZXJTUFMgewotICAg IFN0ZFZpZGVvSDI2NVNjYWxpbmdMaXN0cyBzY2FsaW5nOwotICAgIFN0ZFZpZGVvSDI2NUhyZFBh cmFtZXRlcnMgdnVpX2hlYWRlcjsKLSAgICBTdGRWaWRlb0gyNjVTZXF1ZW5jZVBhcmFtZXRlclNl dFZ1aSB2dWk7Ci0gICAgU3RkVmlkZW9IMjY1UHJvZmlsZVRpZXJMZXZlbCBwdGw7Ci0gICAgU3Rk VmlkZW9IMjY1RGVjUGljQnVmTWdyIGRwYm07Ci0gICAgU3RkVmlkZW9IMjY1UHJlZGljdG9yUGFs ZXR0ZUVudHJpZXMgcGFsOwotICAgIFN0ZFZpZGVvSDI2NVN1YkxheWVySHJkUGFyYW1ldGVycyBu YWxfaGRyW0hFVkNfTUFYX1NVQl9MQVlFUlNdOwotICAgIFN0ZFZpZGVvSDI2NVN1YkxheWVySHJk UGFyYW1ldGVycyB2Y2xfaGRyW0hFVkNfTUFYX1NVQl9MQVlFUlNdOwotICAgIFN0ZFZpZGVvSDI2 NVNob3J0VGVybVJlZlBpY1NldCBzdHJbSEVWQ19NQVhfU0hPUlRfVEVSTV9SRUZfUElDX1NFVFNd OwotICAgIFN0ZFZpZGVvSDI2NUxvbmdUZXJtUmVmUGljc1NwcyBsdHI7Ci19IEhFVkNIZWFkZXJT UFM7Ci0KLXR5cGVkZWYgc3RydWN0IEhFVkNIZWFkZXJQUFMgewotICAgIFN0ZFZpZGVvSDI2NVNj YWxpbmdMaXN0cyBzY2FsaW5nOwotICAgIFN0ZFZpZGVvSDI2NVByZWRpY3RvclBhbGV0dGVFbnRy aWVzIHBhbDsKLX0gSEVWQ0hlYWRlclBQUzsKLQotdHlwZWRlZiBzdHJ1Y3QgSEVWQ0hlYWRlclZQ U1NldCB7Ci0gICAgU3RkVmlkZW9IMjY1U3ViTGF5ZXJIcmRQYXJhbWV0ZXJzIG5hbF9oZHJbSEVW Q19NQVhfU1VCX0xBWUVSU107Ci0gICAgU3RkVmlkZW9IMjY1U3ViTGF5ZXJIcmRQYXJhbWV0ZXJz IHZjbF9oZHJbSEVWQ19NQVhfU1VCX0xBWUVSU107Ci19IEhFVkNIZWFkZXJWUFNTZXQ7Ci0KLXR5 cGVkZWYgc3RydWN0IEhFVkNIZWFkZXJWUFMgewotICAgIFN0ZFZpZGVvSDI2NVByb2ZpbGVUaWVy TGV2ZWwgcHRsOwotICAgIFN0ZFZpZGVvSDI2NURlY1BpY0J1Zk1nciBkcGJtOwotICAgIFN0ZFZp ZGVvSDI2NUhyZFBhcmFtZXRlcnMgaGRyW0hFVkNfTUFYX0xBWUVSX1NFVFNdOwotICAgIEhFVkNI ZWFkZXJWUFNTZXQgKnNsczsKLX0gSEVWQ0hlYWRlclZQUzsKLQotdHlwZWRlZiBzdHJ1Y3QgSEVW Q0hlYWRlclNldCB7Ci0gICAgU3RkVmlkZW9IMjY1U2VxdWVuY2VQYXJhbWV0ZXJTZXQgc3BzW0hF VkNfTUFYX1NQU19DT1VOVF07Ci0gICAgSEVWQ0hlYWRlclNQUyBoc3BzW0hFVkNfTUFYX1NQU19D T1VOVF07Ci0KLSAgICBTdGRWaWRlb0gyNjVQaWN0dXJlUGFyYW1ldGVyU2V0IHBwc1tIRVZDX01B WF9QUFNfQ09VTlRdOwotICAgIEhFVkNIZWFkZXJQUFMgaHBwc1tIRVZDX01BWF9QUFNfQ09VTlRd OwotCi0gICAgU3RkVmlkZW9IMjY1VmlkZW9QYXJhbWV0ZXJTZXQgdnBzW0hFVkNfTUFYX1BQU19D T1VOVF07Ci0gICAgSEVWQ0hlYWRlclZQUyAqaHZwczsKLX0gSEVWQ0hlYWRlclNldDsKLQotc3Rh dGljIGludCBhbGxvY19oZXZjX2hlYWRlcl9zdHJ1Y3RzKEZGVnVsa2FuRGVjb2RlQ29udGV4dCAq cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbmJfdnBzLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCB2cHNfbGlzdF9pZHhb SEVWQ19NQVhfVlBTX0NPVU5UXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBIRVZDVlBTICogY29uc3QgdnBzX2xpc3RbSEVWQ19NQVhfVlBTX0NPVU5UXSkKLXsK LSAgICB1aW50OF90ICpkYXRhX3B0cjsKLSAgICBIRVZDSGVhZGVyU2V0ICpoZHI7Ci0KLSAgICBz aXplX3QgYnVmX3NpemUgPSBzaXplb2YoSEVWQ0hlYWRlclNldCkgKyBuYl92cHMqc2l6ZW9mKEhF VkNIZWFkZXJWUFMpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmJfdnBzOyBpKyspIHsKLSAg ICAgICAgY29uc3QgSEVWQ1ZQUyAqdnBzID0gdnBzX2xpc3RbdnBzX2xpc3RfaWR4W2ldXTsKLSAg ICAgICAgYnVmX3NpemUgKz0gc2l6ZW9mKEhFVkNIZWFkZXJWUFNTZXQpKnZwcy0+dnBzX251bV9o cmRfcGFyYW1ldGVyczsKLSAgICB9Ci0KLSAgICBpZiAoYnVmX3NpemUgPiBzLT5oZXZjX2hlYWRl cnNfc2l6ZSkgewotICAgICAgICBhdl9mcmVlcCgmcy0+aGV2Y19oZWFkZXJzKTsKLSAgICAgICAg cy0+aGV2Y19oZWFkZXJzX3NpemUgPSAwOwotICAgICAgICBzLT5oZXZjX2hlYWRlcnMgPSBhdl9t YWxsb2N6KGJ1Zl9zaXplKTsKLSAgICAgICAgaWYgKCFzLT5oZXZjX2hlYWRlcnMpCi0gICAgICAg ICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOwotICAgICAgICBzLT5oZXZjX2hlYWRlcnNfc2l6 ZSA9IGJ1Zl9zaXplOwotICAgIH0KLQotICAgIC8qIFNldHVwIHN0cnVjdCBwb2ludGVycyAqLwot ICAgIGhkciA9IHMtPmhldmNfaGVhZGVyczsKLSAgICBkYXRhX3B0ciA9ICh1aW50OF90ICopaGRy OwotICAgIGhkci0+aHZwcyA9IChIRVZDSGVhZGVyVlBTICopKGRhdGFfcHRyICsgc2l6ZW9mKEhF VkNIZWFkZXJTZXQpKTsKLSAgICBkYXRhX3B0ciArPSBzaXplb2YoSEVWQ0hlYWRlclNldCkgKyBu Yl92cHMqc2l6ZW9mKEhFVkNIZWFkZXJWUFMpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmJf dnBzOyBpKyspIHsKLSAgICAgICAgY29uc3QgSEVWQ1ZQUyAqdnBzID0gdnBzX2xpc3RbdnBzX2xp c3RfaWR4W2ldXTsKLSAgICAgICAgaGRyLT5odnBzW2ldLnNscyA9IChIRVZDSGVhZGVyVlBTU2V0 ICopZGF0YV9wdHI7Ci0gICAgICAgIGRhdGFfcHRyICs9IHNpemVvZihIRVZDSGVhZGVyVlBTU2V0 KSp2cHMtPnZwc19udW1faHJkX3BhcmFtZXRlcnM7Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7Ci19 Ci0KLXR5cGVkZWYgc3RydWN0IEhFVkNWdWxrYW5EZWNvZGVQaWN0dXJlIHsKLSAgICBGRlZ1bGth bkRlY29kZVBpY3R1cmUgICAgICAgICAgIHZwOwotCi0gICAgLyogQ3VycmVudCBwaWN0dXJlICov Ci0gICAgU3RkVmlkZW9EZWNvZGVIMjY1UmVmZXJlbmNlSW5mbyBoMjY1X3JlZjsKLSAgICBWa1Zp ZGVvRGVjb2RlSDI2NURwYlNsb3RJbmZvS0hSIHZraDI2NV9yZWY7Ci0KLSAgICAvKiBQaWN0dXJl IHJlZnMgKi8KLSAgICBIRVZDRnJhbWUgICAgICAgICAgICAgICAgICAgICAgKnJlZl9zcmMgICAg W0hFVkNfTUFYX1JFRlNdOwotICAgIFN0ZFZpZGVvRGVjb2RlSDI2NVJlZmVyZW5jZUluZm8gaDI2 NV9yZWZzICBbSEVWQ19NQVhfUkVGU107Ci0gICAgVmtWaWRlb0RlY29kZUgyNjVEcGJTbG90SW5m b0tIUiB2a2gyNjVfcmVmc1tIRVZDX01BWF9SRUZTXTsKLQotICAgIC8qIEN1cnJlbnQgcGljdHVy ZSAoY29udGQuKSAqLwotICAgIFN0ZFZpZGVvRGVjb2RlSDI2NVBpY3R1cmVJbmZvICAgaDI2NXBp YzsKLSAgICBWa1ZpZGVvRGVjb2RlSDI2NVBpY3R1cmVJbmZvS0hSIGgyNjVfcGljX2luZm87Ci19 IEhFVkNWdWxrYW5EZWNvZGVQaWN0dXJlOwotCi1zdGF0aWMgaW50IHZrX2hldmNfZmlsbF9waWN0 KEFWQ29kZWNDb250ZXh0ICphdmN0eCwgSEVWQ0ZyYW1lICoqcmVmX3NyYywKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgVmtWaWRlb1JlZmVyZW5jZVNsb3RJbmZvS0hSICpyZWZfc2xvdCwg ICAgICAgLyogTWFpbiBzdHJ1Y3R1cmUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg VmtWaWRlb1BpY3R1cmVSZXNvdXJjZUluZm9LSFIgKnJlZiwgICAgICAgICAgLyogR29lcyBpbiBe ICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZrVmlkZW9EZWNvZGVIMjY1RHBiU2xv dEluZm9LSFIgKnZraDI2NV9yZWYsIC8qIEdvZXMgaW4gXiAqLwotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBTdGRWaWRlb0RlY29kZUgyNjVSZWZlcmVuY2VJbmZvICpoMjY1X3JlZiwgICAv KiBHb2VzIGluIF4gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEVWQ0ZyYW1lICpw aWMsIGludCBpc19jdXJyZW50LCBpbnQgcGljX2lkKQotewotICAgIEZGVnVsa2FuRGVjb2RlQ29u dGV4dCAqZGVjID0gYXZjdHgtPmludGVybmFsLT5od2FjY2VsX3ByaXZfZGF0YTsKLSAgICBGRlZ1 bGthbkRlY29kZVNoYXJlZCAqY3R4ID0gZGVjLT5zaGFyZWRfY3R4OwotICAgIEhFVkNWdWxrYW5E ZWNvZGVQaWN0dXJlICpocCA9IHBpYy0+aHdhY2NlbF9waWN0dXJlX3ByaXZhdGU7Ci0gICAgRkZW dWxrYW5EZWNvZGVQaWN0dXJlICp2a3BpYyA9ICZocC0+dnA7Ci0KLSAgICBpbnQgZXJyID0gZmZf dmtfZGVjb2RlX3ByZXBhcmVfZnJhbWUoZGVjLCBwaWMtPmYsIHZrcGljLCBpc19jdXJyZW50LAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWMtPmRlZGljYXRlZF9k cGIpOwotICAgIGlmIChlcnIgPCAwKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgKmgyNjVf cmVmID0gKFN0ZFZpZGVvRGVjb2RlSDI2NVJlZmVyZW5jZUluZm8pIHsKLSAgICAgICAgLmZsYWdz ID0gKFN0ZFZpZGVvRGVjb2RlSDI2NVJlZmVyZW5jZUluZm9GbGFncykgewotICAgICAgICAgICAg LnVzZWRfZm9yX2xvbmdfdGVybV9yZWZlcmVuY2UgPSBwaWMtPmZsYWdzICYgSEVWQ19GUkFNRV9G TEFHX0xPTkdfUkVGLAotICAgICAgICAgICAgLnVudXNlZF9mb3JfcmVmZXJlbmNlID0gMCwKLSAg ICAgICAgfSwKLSAgICAgICAgLlBpY09yZGVyQ250VmFsID0gcGljLT5wb2MsCi0gICAgfTsKLQot ICAgICp2a2gyNjVfcmVmID0gKFZrVmlkZW9EZWNvZGVIMjY1RHBiU2xvdEluZm9LSFIpIHsKLSAg ICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfVklERU9fREVDT0RFX0gyNjVfRFBCX1NM T1RfSU5GT19LSFIsCi0gICAgICAgIC5wU3RkUmVmZXJlbmNlSW5mbyA9IGgyNjVfcmVmLAotICAg IH07Ci0KLSAgICAqcmVmID0gKFZrVmlkZW9QaWN0dXJlUmVzb3VyY2VJbmZvS0hSKSB7Ci0gICAg ICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX1ZJREVPX1BJQ1RVUkVfUkVTT1VSQ0VfSU5G T19LSFIsCi0gICAgICAgIC5jb2RlZE9mZnNldCA9IChWa09mZnNldDJEKXsgMCwgMCB9LAotICAg ICAgICAuY29kZWRFeHRlbnQgPSAoVmtFeHRlbnQyRCl7IHBpYy0+Zi0+d2lkdGgsIHBpYy0+Zi0+ aGVpZ2h0IH0sCi0gICAgICAgIC5iYXNlQXJyYXlMYXllciA9IGN0eC0+Y29tbW9uLmxheWVyZWRf ZHBiID8gcGljX2lkIDogMCwKLSAgICAgICAgLmltYWdlVmlld0JpbmRpbmcgPSB2a3BpYy0+dmll dy5yZWZbMF0sCi0gICAgfTsKLQotICAgICpyZWZfc2xvdCA9IChWa1ZpZGVvUmVmZXJlbmNlU2xv dEluZm9LSFIpIHsKLSAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfVklERU9fUkVG RVJFTkNFX1NMT1RfSU5GT19LSFIsCi0gICAgICAgIC5wTmV4dCA9IHZraDI2NV9yZWYsCi0gICAg ICAgIC5zbG90SW5kZXggPSBwaWNfaWQsCi0gICAgICAgIC5wUGljdHVyZVJlc291cmNlID0gcmVm LAotICAgIH07Ci0KLSAgICBpZiAocmVmX3NyYykKLSAgICAgICAgKnJlZl9zcmMgPSBwaWM7Ci0K LSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgY29weV9zY2FsaW5nX2xpc3QoY29uc3Qg U2NhbGluZ0xpc3QgKnNsLCBTdGRWaWRlb0gyNjVTY2FsaW5nTGlzdHMgKnZrc2wpCi17Ci0gICAg Zm9yIChpbnQgaSA9IDA7IGkgPCBTVERfVklERU9fSDI2NV9TQ0FMSU5HX0xJU1RfNFg0X05VTV9M SVNUUzsgaSsrKSB7Ci0gICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgU1REX1ZJREVPX0gyNjVf U0NBTElOR19MSVNUXzRYNF9OVU1fRUxFTUVOVFM7IGorKykgewotICAgICAgICAgICAgdWludDhf dCBwb3MgPSA0ICogZmZfaGV2Y19kaWFnX3NjYW40eDRfeVtqXSArIGZmX2hldmNfZGlhZ19zY2Fu NHg0X3hbal07Ci0gICAgICAgICAgICB2a3NsLT5TY2FsaW5nTGlzdDR4NFtpXVtqXSA9IHNsLT5z bFswXVtpXVtwb3NdOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkg PCBTVERfVklERU9fSDI2NV9TQ0FMSU5HX0xJU1RfOFg4X05VTV9MSVNUUzsgaSsrKSB7Ci0gICAg ICAgIGZvciAoaW50IGogPSAwOyBqIDwgU1REX1ZJREVPX0gyNjVfU0NBTElOR19MSVNUXzhYOF9O VU1fRUxFTUVOVFM7IGorKykgewotICAgICAgICAgICAgdWludDhfdCBwb3MgPSA4ICogZmZfaGV2 Y19kaWFnX3NjYW44eDhfeVtqXSArIGZmX2hldmNfZGlhZ19zY2FuOHg4X3hbal07Ci0gICAgICAg ICAgICB2a3NsLT5TY2FsaW5nTGlzdDh4OFtpXVtqXSA9IHNsLT5zbFsxXVtpXVtwb3NdOwotICAg ICAgICB9Ci0gICAgfQotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBTVERfVklERU9fSDI2NV9T Q0FMSU5HX0xJU1RfMTZYMTZfTlVNX0xJU1RTOyBpKyspIHsKLSAgICAgICAgZm9yIChpbnQgaiA9 IDA7IGogPCBTVERfVklERU9fSDI2NV9TQ0FMSU5HX0xJU1RfMTZYMTZfTlVNX0VMRU1FTlRTOyBq KyspIHsKLSAgICAgICAgICAgIHVpbnQ4X3QgcG9zID0gOCAqIGZmX2hldmNfZGlhZ19zY2FuOHg4 X3lbal0gKyBmZl9oZXZjX2RpYWdfc2Nhbjh4OF94W2pdOwotICAgICAgICAgICAgdmtzbC0+U2Nh bGluZ0xpc3QxNngxNltpXVtqXSA9IHNsLT5zbFsyXVtpXVtwb3NdOwotICAgICAgICB9Ci0gICAg fQotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBTVERfVklERU9fSDI2NV9TQ0FMSU5HX0xJU1Rf MzJYMzJfTlVNX0xJU1RTOyBpKyspIHsKLSAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBTVERf VklERU9fSDI2NV9TQ0FMSU5HX0xJU1RfMzJYMzJfTlVNX0VMRU1FTlRTOyBqKyspIHsKLSAgICAg ICAgICAgIHVpbnQ4X3QgcG9zID0gOCAqIGZmX2hldmNfZGlhZ19zY2FuOHg4X3lbal0gKyBmZl9o ZXZjX2RpYWdfc2Nhbjh4OF94W2pdOwotICAgICAgICAgICAgdmtzbC0+U2NhbGluZ0xpc3QzMngz MltpXVtqXSA9IHNsLT5zbFszXVtpICogM11bcG9zXTsKLSAgICAgICAgfQotICAgIH0KLQotICAg IG1lbWNweSh2a3NsLT5TY2FsaW5nTGlzdERDQ29lZjE2eDE2LCBzbC0+c2xfZGNbMF0sCi0gICAg ICAgICAgIFNURF9WSURFT19IMjY1X1NDQUxJTkdfTElTVF8xNlgxNl9OVU1fTElTVFMgKiBzaXpl b2YoKnZrc2wtPlNjYWxpbmdMaXN0RENDb2VmMTZ4MTYpKTsKLQotICAgIGZvciAoaW50IGkgPSAw OyBpIDwgIFNURF9WSURFT19IMjY1X1NDQUxJTkdfTElTVF8zMlgzMl9OVU1fTElTVFM7IGkrKykK LSAgICAgICAgdmtzbC0+U2NhbGluZ0xpc3REQ0NvZWYzMngzMltpXSA9IHNsLT5zbF9kY1sxXVtp ICogM107Ci19Ci0KLXN0YXRpYyB2b2lkIHNldF9zcHMoY29uc3QgSEVWQ1NQUyAqc3BzLCBpbnQg c3BzX2lkeCwKLSAgICAgICAgICAgICAgICAgICAgU3RkVmlkZW9IMjY1U2NhbGluZ0xpc3RzICp2 a3Nwc19zY2FsaW5nLAotICAgICAgICAgICAgICAgICAgICBTdGRWaWRlb0gyNjVIcmRQYXJhbWV0 ZXJzICp2a3Nwc192dWlfaGVhZGVyLAotICAgICAgICAgICAgICAgICAgICBTdGRWaWRlb0gyNjVT ZXF1ZW5jZVBhcmFtZXRlclNldFZ1aSAqdmtzcHNfdnVpLAotICAgICAgICAgICAgICAgICAgICBT dGRWaWRlb0gyNjVTZXF1ZW5jZVBhcmFtZXRlclNldCAqdmtzcHMsCi0gICAgICAgICAgICAgICAg ICAgIFN0ZFZpZGVvSDI2NVN1YkxheWVySHJkUGFyYW1ldGVycyAqc2xoZHJuYWwsCi0gICAgICAg ICAgICAgICAgICAgIFN0ZFZpZGVvSDI2NVN1YkxheWVySHJkUGFyYW1ldGVycyAqc2xoZHJ2Y2ws Ci0gICAgICAgICAgICAgICAgICAgIFN0ZFZpZGVvSDI2NVByb2ZpbGVUaWVyTGV2ZWwgKnB0bCwK LSAgICAgICAgICAgICAgICAgICAgU3RkVmlkZW9IMjY1RGVjUGljQnVmTWdyICpkcGJtLAotICAg ICAgICAgICAgICAgICAgICBTdGRWaWRlb0gyNjVQcmVkaWN0b3JQYWxldHRlRW50cmllcyAqcGFs LAotICAgICAgICAgICAgICAgICAgICBTdGRWaWRlb0gyNjVTaG9ydFRlcm1SZWZQaWNTZXQgKnN0 ciwKLSAgICAgICAgICAgICAgICAgICAgU3RkVmlkZW9IMjY1TG9uZ1Rlcm1SZWZQaWNzU3BzICps dHIpCi17Ci0gICAgY29weV9zY2FsaW5nX2xpc3QoJnNwcy0+c2NhbGluZ19saXN0LCB2a3Nwc19z Y2FsaW5nKTsKLQotICAgICp2a3Nwc192dWlfaGVhZGVyID0gKFN0ZFZpZGVvSDI2NUhyZFBhcmFt ZXRlcnMpIHsKLSAgICAgICAgLmZsYWdzID0gKFN0ZFZpZGVvSDI2NUhyZEZsYWdzKSB7Ci0gICAg ICAgICAgICAubmFsX2hyZF9wYXJhbWV0ZXJzX3ByZXNlbnRfZmxhZyA9IHNwcy0+aGRyLm5hbF9o cmRfcGFyYW1ldGVyc19wcmVzZW50X2ZsYWcsCi0gICAgICAgICAgICAudmNsX2hyZF9wYXJhbWV0 ZXJzX3ByZXNlbnRfZmxhZyA9IHNwcy0+aGRyLnZjbF9ocmRfcGFyYW1ldGVyc19wcmVzZW50X2Zs YWcsCi0gICAgICAgICAgICAuc3ViX3BpY19ocmRfcGFyYW1zX3ByZXNlbnRfZmxhZyA9IHNwcy0+ aGRyLnN1Yl9waWNfaHJkX3BhcmFtc19wcmVzZW50X2ZsYWcsCi0gICAgICAgICAgICAuc3ViX3Bp Y19jcGJfcGFyYW1zX2luX3BpY190aW1pbmdfc2VpX2ZsYWcgPSBzcHMtPmhkci5zdWJfcGljX2Nw Yl9wYXJhbXNfaW5fcGljX3RpbWluZ19zZWlfZmxhZywKLSAgICAgICAgICAgIC5maXhlZF9waWNf cmF0ZV9nZW5lcmFsX2ZsYWcgPSBzcHMtPmhkci5mbGFncy5maXhlZF9waWNfcmF0ZV9nZW5lcmFs X2ZsYWcsCi0gICAgICAgICAgICAuZml4ZWRfcGljX3JhdGVfd2l0aGluX2N2c19mbGFnID0gc3Bz LT5oZHIuZmxhZ3MuZml4ZWRfcGljX3JhdGVfd2l0aGluX2N2c19mbGFnLAotICAgICAgICAgICAg Lmxvd19kZWxheV9ocmRfZmxhZyA9IHNwcy0+aGRyLmZsYWdzLmxvd19kZWxheV9ocmRfZmxhZywK LSAgICAgICAgfSwKLSAgICAgICAgLnRpY2tfZGl2aXNvcl9taW51czIgPSBzcHMtPmhkci50aWNr X2Rpdmlzb3JfbWludXMyLAotICAgICAgICAuZHVfY3BiX3JlbW92YWxfZGVsYXlfaW5jcmVtZW50 X2xlbmd0aF9taW51czEgPSBzcHMtPmhkci5kdV9jcGJfcmVtb3ZhbF9kZWxheV9pbmNyZW1lbnRf bGVuZ3RoX21pbnVzMSwKLSAgICAgICAgLmRwYl9vdXRwdXRfZGVsYXlfZHVfbGVuZ3RoX21pbnVz MSA9IHNwcy0+aGRyLmRwYl9vdXRwdXRfZGVsYXlfZHVfbGVuZ3RoX21pbnVzMSwKLSAgICAgICAg LmJpdF9yYXRlX3NjYWxlID0gc3BzLT5oZHIuYml0X3JhdGVfc2NhbGUsCi0gICAgICAgIC5jcGJf c2l6ZV9zY2FsZSA9IHNwcy0+aGRyLmNwYl9zaXplX3NjYWxlLAotICAgICAgICAuY3BiX3NpemVf ZHVfc2NhbGUgPSBzcHMtPmhkci5jcGJfc2l6ZV9kdV9zY2FsZSwKLSAgICAgICAgLmluaXRpYWxf Y3BiX3JlbW92YWxfZGVsYXlfbGVuZ3RoX21pbnVzMSA9IHNwcy0+aGRyLmluaXRpYWxfY3BiX3Jl bW92YWxfZGVsYXlfbGVuZ3RoX21pbnVzMSwKLSAgICAgICAgLmF1X2NwYl9yZW1vdmFsX2RlbGF5 X2xlbmd0aF9taW51czEgPSBzcHMtPmhkci5hdV9jcGJfcmVtb3ZhbF9kZWxheV9sZW5ndGhfbWlu dXMxLAotICAgICAgICAuZHBiX291dHB1dF9kZWxheV9sZW5ndGhfbWludXMxID0gc3BzLT5oZHIu ZHBiX291dHB1dF9kZWxheV9sZW5ndGhfbWludXMxLAotICAgICAgICAvKiBSZXNlcnZlZCAtIDMq MTYgYml0cyAqLwotICAgICAgICAucFN1YkxheWVySHJkUGFyYW1ldGVyc05hbCA9IHNsaGRybmFs LAotICAgICAgICAucFN1YkxheWVySHJkUGFyYW1ldGVyc1ZjbCA9IHNsaGRydmNsLAotICAgIH07 Ci0KLSAgICBtZW1jcHkodmtzcHNfdnVpX2hlYWRlci0+Y3BiX2NudF9taW51czEsIHNwcy0+aGRy LmNwYl9jbnRfbWludXMxLAotICAgICAgICAgICBTVERfVklERU9fSDI2NV9TVUJMQVlFUlNfTElT VF9TSVpFKnNpemVvZigqdmtzcHNfdnVpX2hlYWRlci0+Y3BiX2NudF9taW51czEpKTsKLSAgICBt ZW1jcHkodmtzcHNfdnVpX2hlYWRlci0+ZWxlbWVudGFsX2R1cmF0aW9uX2luX3RjX21pbnVzMSwg c3BzLT5oZHIuZWxlbWVudGFsX2R1cmF0aW9uX2luX3RjX21pbnVzMSwKLSAgICAgICAgICAgU1RE X1ZJREVPX0gyNjVfU1VCTEFZRVJTX0xJU1RfU0laRSpzaXplb2YoKnZrc3BzX3Z1aV9oZWFkZXIt PmVsZW1lbnRhbF9kdXJhdGlvbl9pbl90Y19taW51czEpKTsKLQotICAgIG1lbWNweShzbGhkcm5h bCwgc3BzLT5oZHIubmFsX3BhcmFtcywgSEVWQ19NQVhfU1VCX0xBWUVSUypzaXplb2YoKnNsaGRy bmFsKSk7Ci0gICAgbWVtY3B5KHNsaGRydmNsLCBzcHMtPmhkci52Y2xfcGFyYW1zLCBIRVZDX01B WF9TVUJfTEFZRVJTKnNpemVvZigqc2xoZHJ2Y2wpKTsKLQotICAgICp2a3Nwc192dWkgPSAoU3Rk VmlkZW9IMjY1U2VxdWVuY2VQYXJhbWV0ZXJTZXRWdWkpIHsKLSAgICAgICAgLmZsYWdzID0gKFN0 ZFZpZGVvSDI2NVNwc1Z1aUZsYWdzKSB7Ci0gICAgICAgICAgICAuYXNwZWN0X3JhdGlvX2luZm9f cHJlc2VudF9mbGFnID0gc3BzLT52dWkuY29tbW9uLmFzcGVjdF9yYXRpb19pbmZvX3ByZXNlbnRf ZmxhZywKLSAgICAgICAgICAgIC5vdmVyc2Nhbl9pbmZvX3ByZXNlbnRfZmxhZyA9IHNwcy0+dnVp LmNvbW1vbi5vdmVyc2Nhbl9pbmZvX3ByZXNlbnRfZmxhZywKLSAgICAgICAgICAgIC5vdmVyc2Nh bl9hcHByb3ByaWF0ZV9mbGFnID0gc3BzLT52dWkuY29tbW9uLm92ZXJzY2FuX2FwcHJvcHJpYXRl X2ZsYWcsCi0gICAgICAgICAgICAudmlkZW9fc2lnbmFsX3R5cGVfcHJlc2VudF9mbGFnID0gc3Bz LT52dWkuY29tbW9uLnZpZGVvX3NpZ25hbF90eXBlX3ByZXNlbnRfZmxhZywKLSAgICAgICAgICAg IC52aWRlb19mdWxsX3JhbmdlX2ZsYWcgPSBzcHMtPnZ1aS5jb21tb24udmlkZW9fZnVsbF9yYW5n ZV9mbGFnLAotICAgICAgICAgICAgLmNvbG91cl9kZXNjcmlwdGlvbl9wcmVzZW50X2ZsYWcgPSBz cHMtPnZ1aS5jb21tb24uY29sb3VyX2Rlc2NyaXB0aW9uX3ByZXNlbnRfZmxhZywKLSAgICAgICAg ICAgIC5jaHJvbWFfbG9jX2luZm9fcHJlc2VudF9mbGFnID0gc3BzLT52dWkuY29tbW9uLmNocm9t YV9sb2NfaW5mb19wcmVzZW50X2ZsYWcsCi0gICAgICAgICAgICAubmV1dHJhbF9jaHJvbWFfaW5k aWNhdGlvbl9mbGFnID0gc3BzLT52dWkubmV1dHJhX2Nocm9tYV9pbmRpY2F0aW9uX2ZsYWcsCi0g ICAgICAgICAgICAuZmllbGRfc2VxX2ZsYWcgPSBzcHMtPnZ1aS5maWVsZF9zZXFfZmxhZywKLSAg ICAgICAgICAgIC5mcmFtZV9maWVsZF9pbmZvX3ByZXNlbnRfZmxhZyA9IHNwcy0+dnVpLmZyYW1l X2ZpZWxkX2luZm9fcHJlc2VudF9mbGFnLAotICAgICAgICAgICAgLmRlZmF1bHRfZGlzcGxheV93 aW5kb3dfZmxhZyA9IHNwcy0+dnVpLmRlZmF1bHRfZGlzcGxheV93aW5kb3dfZmxhZywKLSAgICAg ICAgICAgIC52dWlfdGltaW5nX2luZm9fcHJlc2VudF9mbGFnID0gc3BzLT52dWkudnVpX3RpbWlu Z19pbmZvX3ByZXNlbnRfZmxhZywKLSAgICAgICAgICAgIC52dWlfcG9jX3Byb3BvcnRpb25hbF90 b190aW1pbmdfZmxhZyA9IHNwcy0+dnVpLnZ1aV9wb2NfcHJvcG9ydGlvbmFsX3RvX3RpbWluZ19m bGFnLAotICAgICAgICAgICAgLnZ1aV9ocmRfcGFyYW1ldGVyc19wcmVzZW50X2ZsYWcgPSBzcHMt PnZ1aS52dWlfaHJkX3BhcmFtZXRlcnNfcHJlc2VudF9mbGFnLAotICAgICAgICAgICAgLmJpdHN0 cmVhbV9yZXN0cmljdGlvbl9mbGFnID0gc3BzLT52dWkuYml0c3RyZWFtX3Jlc3RyaWN0aW9uX2Zs YWcsCi0gICAgICAgICAgICAudGlsZXNfZml4ZWRfc3RydWN0dXJlX2ZsYWcgPSBzcHMtPnZ1aS50 aWxlc19maXhlZF9zdHJ1Y3R1cmVfZmxhZywKLSAgICAgICAgICAgIC5tb3Rpb25fdmVjdG9yc19v dmVyX3BpY19ib3VuZGFyaWVzX2ZsYWcgPSBzcHMtPnZ1aS5tb3Rpb25fdmVjdG9yc19vdmVyX3Bp Y19ib3VuZGFyaWVzX2ZsYWcsCi0gICAgICAgICAgICAucmVzdHJpY3RlZF9yZWZfcGljX2xpc3Rz X2ZsYWcgPSBzcHMtPnZ1aS5yZXN0cmljdGVkX3JlZl9waWNfbGlzdHNfZmxhZywKLSAgICAgICAg fSwKLSAgICAgICAgLmFzcGVjdF9yYXRpb19pZGMgPSBzcHMtPnZ1aS5jb21tb24uYXNwZWN0X3Jh dGlvX2lkYywKLSAgICAgICAgLnNhcl93aWR0aCA9IHNwcy0+dnVpLmNvbW1vbi5zYXIubnVtLAot ICAgICAgICAuc2FyX2hlaWdodCA9IHNwcy0+dnVpLmNvbW1vbi5zYXIuZGVuLAotICAgICAgICAu dmlkZW9fZm9ybWF0ID0gc3BzLT52dWkuY29tbW9uLnZpZGVvX2Zvcm1hdCwKLSAgICAgICAgLmNv bG91cl9wcmltYXJpZXMgPSBzcHMtPnZ1aS5jb21tb24uY29sb3VyX3ByaW1hcmllcywKLSAgICAg ICAgLnRyYW5zZmVyX2NoYXJhY3RlcmlzdGljcyA9IHNwcy0+dnVpLmNvbW1vbi50cmFuc2Zlcl9j aGFyYWN0ZXJpc3RpY3MsCi0gICAgICAgIC5tYXRyaXhfY29lZmZzID0gc3BzLT52dWkuY29tbW9u Lm1hdHJpeF9jb2VmZnMsCi0gICAgICAgIC5jaHJvbWFfc2FtcGxlX2xvY190eXBlX3RvcF9maWVs ZCA9IHNwcy0+dnVpLmNvbW1vbi5jaHJvbWFfc2FtcGxlX2xvY190eXBlX3RvcF9maWVsZCwKLSAg ICAgICAgLmNocm9tYV9zYW1wbGVfbG9jX3R5cGVfYm90dG9tX2ZpZWxkID0gc3BzLT52dWkuY29t bW9uLmNocm9tYV9zYW1wbGVfbG9jX3R5cGVfYm90dG9tX2ZpZWxkLAotICAgICAgICAvKiBSZXNl cnZlZCAqLwotICAgICAgICAvKiBSZXNlcnZlZCAqLwotICAgICAgICAuZGVmX2Rpc3Bfd2luX2xl ZnRfb2Zmc2V0ID0gc3BzLT52dWkuZGVmX2Rpc3Bfd2luLmxlZnRfb2Zmc2V0LAotICAgICAgICAu ZGVmX2Rpc3Bfd2luX3JpZ2h0X29mZnNldCA9IHNwcy0+dnVpLmRlZl9kaXNwX3dpbi5yaWdodF9v ZmZzZXQsCi0gICAgICAgIC5kZWZfZGlzcF93aW5fdG9wX29mZnNldCA9IHNwcy0+dnVpLmRlZl9k aXNwX3dpbi50b3Bfb2Zmc2V0LAotICAgICAgICAuZGVmX2Rpc3Bfd2luX2JvdHRvbV9vZmZzZXQg PSBzcHMtPnZ1aS5kZWZfZGlzcF93aW4uYm90dG9tX29mZnNldCwKLSAgICAgICAgLnZ1aV9udW1f dW5pdHNfaW5fdGljayA9IHNwcy0+dnVpLnZ1aV9udW1fdW5pdHNfaW5fdGljaywKLSAgICAgICAg LnZ1aV90aW1lX3NjYWxlID0gc3BzLT52dWkudnVpX3RpbWVfc2NhbGUsCi0gICAgICAgIC52dWlf bnVtX3RpY2tzX3BvY19kaWZmX29uZV9taW51czEgPSBzcHMtPnZ1aS52dWlfbnVtX3RpY2tzX3Bv Y19kaWZmX29uZV9taW51czEsCi0gICAgICAgIC5taW5fc3BhdGlhbF9zZWdtZW50YXRpb25faWRj ID0gc3BzLT52dWkubWluX3NwYXRpYWxfc2VnbWVudGF0aW9uX2lkYywKLSAgICAgICAgLm1heF9i eXRlc19wZXJfcGljX2Rlbm9tID0gc3BzLT52dWkubWF4X2J5dGVzX3Blcl9waWNfZGVub20sCi0g ICAgICAgIC5tYXhfYml0c19wZXJfbWluX2N1X2Rlbm9tID0gc3BzLT52dWkubWF4X2JpdHNfcGVy X21pbl9jdV9kZW5vbSwKLSAgICAgICAgLmxvZzJfbWF4X212X2xlbmd0aF9ob3Jpem9udGFsID0g c3BzLT52dWkubG9nMl9tYXhfbXZfbGVuZ3RoX2hvcml6b250YWwsCi0gICAgICAgIC5sb2cyX21h eF9tdl9sZW5ndGhfdmVydGljYWwgPSBzcHMtPnZ1aS5sb2cyX21heF9tdl9sZW5ndGhfdmVydGlj YWwsCi0gICAgICAgIC5wSHJkUGFyYW1ldGVycyA9IHZrc3BzX3Z1aV9oZWFkZXIsCi0gICAgfTsK LQotICAgICpwdGwgPSAoU3RkVmlkZW9IMjY1UHJvZmlsZVRpZXJMZXZlbCkgewotICAgICAgICAu ZmxhZ3MgPSAoU3RkVmlkZW9IMjY1UHJvZmlsZVRpZXJMZXZlbEZsYWdzKSB7Ci0gICAgICAgICAg ICAuZ2VuZXJhbF90aWVyX2ZsYWcgPSBzcHMtPnB0bC5nZW5lcmFsX3B0bC50aWVyX2ZsYWcsCi0g ICAgICAgICAgICAuZ2VuZXJhbF9wcm9ncmVzc2l2ZV9zb3VyY2VfZmxhZyA9IHNwcy0+cHRsLmdl bmVyYWxfcHRsLnByb2dyZXNzaXZlX3NvdXJjZV9mbGFnLAotICAgICAgICAgICAgLmdlbmVyYWxf aW50ZXJsYWNlZF9zb3VyY2VfZmxhZyA9IHNwcy0+cHRsLmdlbmVyYWxfcHRsLmludGVybGFjZWRf c291cmNlX2ZsYWcsCi0gICAgICAgICAgICAuZ2VuZXJhbF9ub25fcGFja2VkX2NvbnN0cmFpbnRf ZmxhZyA9IHNwcy0+cHRsLmdlbmVyYWxfcHRsLm5vbl9wYWNrZWRfY29uc3RyYWludF9mbGFnLAot ICAgICAgICAgICAgLmdlbmVyYWxfZnJhbWVfb25seV9jb25zdHJhaW50X2ZsYWcgPSBzcHMtPnB0 bC5nZW5lcmFsX3B0bC5mcmFtZV9vbmx5X2NvbnN0cmFpbnRfZmxhZywKLSAgICAgICAgfSwKLSAg ICAgICAgLmdlbmVyYWxfcHJvZmlsZV9pZGMgPSBzcHMtPnB0bC5nZW5lcmFsX3B0bC5wcm9maWxl X2lkYywKLSAgICAgICAgLmdlbmVyYWxfbGV2ZWxfaWRjID0gZmZfdmtfaDI2NV9sZXZlbF90b192 ayhzcHMtPnB0bC5nZW5lcmFsX3B0bC5sZXZlbF9pZGMpLAotICAgIH07Ci0KLSAgICBmb3IgKGlu dCBpID0gMDsgaSA8IHNwcy0+bWF4X3N1Yl9sYXllcnM7IGkrKykgewotICAgICAgICBkcGJtLT5t YXhfbGF0ZW5jeV9pbmNyZWFzZV9wbHVzMVtpXSA9IHNwcy0+dGVtcG9yYWxfbGF5ZXJbaV0ubWF4 X2xhdGVuY3lfaW5jcmVhc2UgKyAxOwotICAgICAgICBkcGJtLT5tYXhfZGVjX3BpY19idWZmZXJp bmdfbWludXMxW2ldID0gc3BzLT50ZW1wb3JhbF9sYXllcltpXS5tYXhfZGVjX3BpY19idWZmZXJp bmcgLSAxOwotICAgICAgICBkcGJtLT5tYXhfbnVtX3Jlb3JkZXJfcGljc1tpXSA9IHNwcy0+dGVt cG9yYWxfbGF5ZXJbaV0ubnVtX3Jlb3JkZXJfcGljczsKLSAgICB9Ci0KLSAgICBmb3IgKGludCBp ID0gMDsgaSA8IChzcHMtPmNocm9tYV9mb3JtYXRfaWRjID8gMyA6IDEpOyBpKyspCi0gICAgICAg IGZvciAoaW50IGogPSAwOyBqIDwgc3BzLT5zcHNfbnVtX3BhbGV0dGVfcHJlZGljdG9yX2luaXRp YWxpemVyczsgaisrKQotICAgICAgICAgICAgcGFsLT5QcmVkaWN0b3JQYWxldHRlRW50cmllc1tp XVtqXSA9IHNwcy0+c3BzX3BhbGV0dGVfcHJlZGljdG9yX2luaXRpYWxpemVyW2ldW2pdOwotCi0g ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzcHMtPm5iX3N0X3JwczsgaSsrKSB7Ci0gICAgICAgIGNv bnN0IFNob3J0VGVybVJQUyAqc3RfcnBzID0gJnNwcy0+c3RfcnBzW2ldOwotCi0gICAgICAgIHN0 cltpXSA9IChTdGRWaWRlb0gyNjVTaG9ydFRlcm1SZWZQaWNTZXQpIHsKLSAgICAgICAgICAgIC5m bGFncyA9IChTdGRWaWRlb0gyNjVTaG9ydFRlcm1SZWZQaWNTZXRGbGFncykgewotICAgICAgICAg ICAgICAgIC5pbnRlcl9yZWZfcGljX3NldF9wcmVkaWN0aW9uX2ZsYWcgPSBzcHMtPnN0X3Jwc1tp XS5ycHNfcHJlZGljdCwKLSAgICAgICAgICAgICAgICAuZGVsdGFfcnBzX3NpZ24gPSBzcHMtPnN0 X3Jwc1tpXS5kZWx0YV9ycHNfc2lnbiwKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAuZGVs dGFfaWR4X21pbnVzMSA9IHNwcy0+c3RfcnBzW2ldLmRlbHRhX2lkeCAtIDEsCi0gICAgICAgICAg ICAudXNlX2RlbHRhX2ZsYWcgPSBzcHMtPnN0X3Jwc1tpXS51c2VfZGVsdGEsCi0gICAgICAgICAg ICAuYWJzX2RlbHRhX3Jwc19taW51czEgPSBzcHMtPnN0X3Jwc1tpXS5hYnNfZGVsdGFfcnBzIC0g MSwKLSAgICAgICAgICAgIC51c2VkX2J5X2N1cnJfcGljX2ZsYWcgICAgPSAweDAsCi0gICAgICAg ICAgICAudXNlZF9ieV9jdXJyX3BpY19zMF9mbGFnID0gMHgwLAotICAgICAgICAgICAgLnVzZWRf YnlfY3Vycl9waWNfczFfZmxhZyA9IDB4MCwKLSAgICAgICAgICAgIC8qIFJlc2VydmVkICovCi0g ICAgICAgICAgICAvKiBSZXNlcnZlZCAqLwotICAgICAgICAgICAgLyogUmVzZXJ2ZWQgKi8KLSAg ICAgICAgICAgIC5udW1fbmVnYXRpdmVfcGljcyA9IHNwcy0+c3RfcnBzW2ldLm51bV9uZWdhdGl2 ZV9waWNzLAotICAgICAgICAgICAgLm51bV9wb3NpdGl2ZV9waWNzID0gc3BzLT5zdF9ycHNbaV0u bnVtX2RlbHRhX3BvY3MgLSBzcHMtPnN0X3Jwc1tpXS5udW1fbmVnYXRpdmVfcGljcywKLSAgICAg ICAgfTsKLQotICAgICAgICAvKiBOT1RFOiBUaGlzIGlzIHRoZSBwcmVkaWN0ZWQsIGFuZCAqcmVv cmRlcmVkKiB2ZXJzaW9uLgotICAgICAgICAgKiBQcm9iYWJseSBpbmNvcnJlY3QsIGJ1dCB0aGUg c3BlYyBkb2Vzbid0IHNheSB3aGljaCB2ZXJzaW9uIHRvIHVzZS4gKi8KLSAgICAgICAgc3RyW2ld LnVzZWRfYnlfY3Vycl9waWNfZmxhZyA9IHN0X3Jwcy0+dXNlZDsKLSAgICAgICAgc3RyW2ldLnVz ZWRfYnlfY3Vycl9waWNfczBfZmxhZyA9IGF2X3plcm9fZXh0ZW5kKHN0X3Jwcy0+dXNlZCwgc3Ry W2ldLm51bV9uZWdhdGl2ZV9waWNzKTsKLSAgICAgICAgc3RyW2ldLnVzZWRfYnlfY3Vycl9waWNf czFfZmxhZyA9IHN0X3Jwcy0+dXNlZCA+PiBzdHJbaV0ubnVtX25lZ2F0aXZlX3BpY3M7Ci0KLSAg ICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBzdHJbaV0ubnVtX25lZ2F0aXZlX3BpY3M7IGorKykK LSAgICAgICAgICAgIHN0cltpXS5kZWx0YV9wb2NfczBfbWludXMxW2pdID0gc3RfcnBzLT5kZWx0 YV9wb2Nbal0gLSAoaiA/IHN0X3Jwcy0+ZGVsdGFfcG9jW2ogLSAxXSA6IDApIC0gMTsKLQotICAg ICAgICBmb3IgKGludCBqID0gMDsgaiA8IHN0cltpXS5udW1fcG9zaXRpdmVfcGljczsgaisrKQot ICAgICAgICAgICAgc3RyW2ldLmRlbHRhX3BvY19zMV9taW51czFbal0gPSBzdF9ycHMtPmRlbHRh X3BvY1tzdF9ycHMtPm51bV9uZWdhdGl2ZV9waWNzICsgal0gLQotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAoaiA/IHN0X3Jwcy0+ZGVsdGFfcG9jW3N0X3Jwcy0+ bnVtX25lZ2F0aXZlX3BpY3MgKyBqIC0gMV0gOiAwKSAtIDE7Ci0gICAgfQotCi0gICAgKmx0ciA9 IChTdGRWaWRlb0gyNjVMb25nVGVybVJlZlBpY3NTcHMpIHsKLSAgICAgICAgLnVzZWRfYnlfY3Vy cl9waWNfbHRfc3BzX2ZsYWcgPSBzcHMtPnVzZWRfYnlfY3Vycl9waWNfbHQsCi0gICAgfTsKLQot ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3BzLT5udW1fbG9uZ190ZXJtX3JlZl9waWNzX3Nwczsg aSsrKSB7Ci0gICAgICAgIGx0ci0+bHRfcmVmX3BpY19wb2NfbHNiX3Nwc1tpXSAgICAgPSBzcHMt Pmx0X3JlZl9waWNfcG9jX2xzYl9zcHNbaV07Ci0gICAgfQotCi0gICAgKnZrc3BzID0gKFN0ZFZp ZGVvSDI2NVNlcXVlbmNlUGFyYW1ldGVyU2V0KSB7Ci0gICAgICAgIC5mbGFncyA9IChTdGRWaWRl b0gyNjVTcHNGbGFncykgewotICAgICAgICAgICAgLnNwc190ZW1wb3JhbF9pZF9uZXN0aW5nX2Zs YWcgPSBzcHMtPnRlbXBvcmFsX2lkX25lc3RpbmcsCi0gICAgICAgICAgICAuc2VwYXJhdGVfY29s b3VyX3BsYW5lX2ZsYWcgPSBzcHMtPnNlcGFyYXRlX2NvbG91cl9wbGFuZSwKLSAgICAgICAgICAg IC5jb25mb3JtYW5jZV93aW5kb3dfZmxhZyA9IHNwcy0+Y29uZm9ybWFuY2Vfd2luZG93LAotICAg ICAgICAgICAgLnNwc19zdWJfbGF5ZXJfb3JkZXJpbmdfaW5mb19wcmVzZW50X2ZsYWcgPSBzcHMt PnN1YmxheWVyX29yZGVyaW5nX2luZm8sCi0gICAgICAgICAgICAuc2NhbGluZ19saXN0X2VuYWJs ZWRfZmxhZyA9IHNwcy0+c2NhbGluZ19saXN0X2VuYWJsZWQsCi0gICAgICAgICAgICAuc3BzX3Nj YWxpbmdfbGlzdF9kYXRhX3ByZXNlbnRfZmxhZyA9IHNwcy0+c2NhbGluZ19saXN0X2VuYWJsZWQs Ci0gICAgICAgICAgICAuYW1wX2VuYWJsZWRfZmxhZyA9IHNwcy0+YW1wX2VuYWJsZWQsCi0gICAg ICAgICAgICAuc2FtcGxlX2FkYXB0aXZlX29mZnNldF9lbmFibGVkX2ZsYWcgPSBzcHMtPnNhb19l bmFibGVkLAotICAgICAgICAgICAgLnBjbV9lbmFibGVkX2ZsYWcgPSBzcHMtPnBjbV9lbmFibGVk LAotICAgICAgICAgICAgLnBjbV9sb29wX2ZpbHRlcl9kaXNhYmxlZF9mbGFnID0gc3BzLT5wY21f bG9vcF9maWx0ZXJfZGlzYWJsZWQsCi0gICAgICAgICAgICAubG9uZ190ZXJtX3JlZl9waWNzX3By ZXNlbnRfZmxhZyA9IHNwcy0+bG9uZ190ZXJtX3JlZl9waWNzX3ByZXNlbnQsCi0gICAgICAgICAg ICAuc3BzX3RlbXBvcmFsX212cF9lbmFibGVkX2ZsYWcgPSBzcHMtPnRlbXBvcmFsX212cF9lbmFi bGVkLAotICAgICAgICAgICAgLnN0cm9uZ19pbnRyYV9zbW9vdGhpbmdfZW5hYmxlZF9mbGFnID0g c3BzLT5zdHJvbmdfaW50cmFfc21vb3RoaW5nX2VuYWJsZWQsCi0gICAgICAgICAgICAudnVpX3Bh cmFtZXRlcnNfcHJlc2VudF9mbGFnID0gc3BzLT52dWlfcHJlc2VudCwKLSAgICAgICAgICAgIC5z cHNfZXh0ZW5zaW9uX3ByZXNlbnRfZmxhZyA9IHNwcy0+ZXh0ZW5zaW9uX3ByZXNlbnQsCi0gICAg ICAgICAgICAuc3BzX3JhbmdlX2V4dGVuc2lvbl9mbGFnID0gc3BzLT5yYW5nZV9leHRlbnNpb24s Ci0gICAgICAgICAgICAudHJhbnNmb3JtX3NraXBfcm90YXRpb25fZW5hYmxlZF9mbGFnID0gc3Bz LT50cmFuc2Zvcm1fc2tpcF9yb3RhdGlvbl9lbmFibGVkLAotICAgICAgICAgICAgLnRyYW5zZm9y bV9za2lwX2NvbnRleHRfZW5hYmxlZF9mbGFnID0gc3BzLT50cmFuc2Zvcm1fc2tpcF9jb250ZXh0 X2VuYWJsZWQsCi0gICAgICAgICAgICAuaW1wbGljaXRfcmRwY21fZW5hYmxlZF9mbGFnID0gc3Bz LT5pbXBsaWNpdF9yZHBjbV9lbmFibGVkLAotICAgICAgICAgICAgLmV4cGxpY2l0X3JkcGNtX2Vu YWJsZWRfZmxhZyA9IHNwcy0+ZXhwbGljaXRfcmRwY21fZW5hYmxlZCwKLSAgICAgICAgICAgIC5l eHRlbmRlZF9wcmVjaXNpb25fcHJvY2Vzc2luZ19mbGFnID0gc3BzLT5leHRlbmRlZF9wcmVjaXNp b25fcHJvY2Vzc2luZywKLSAgICAgICAgICAgIC5pbnRyYV9zbW9vdGhpbmdfZGlzYWJsZWRfZmxh ZyA9IHNwcy0+aW50cmFfc21vb3RoaW5nX2Rpc2FibGVkLAotICAgICAgICAgICAgLmhpZ2hfcHJl Y2lzaW9uX29mZnNldHNfZW5hYmxlZF9mbGFnID0gc3BzLT5oaWdoX3ByZWNpc2lvbl9vZmZzZXRz X2VuYWJsZWQsCi0gICAgICAgICAgICAucGVyc2lzdGVudF9yaWNlX2FkYXB0YXRpb25fZW5hYmxl ZF9mbGFnID0gc3BzLT5wZXJzaXN0ZW50X3JpY2VfYWRhcHRhdGlvbl9lbmFibGVkLAotICAgICAg ICAgICAgLmNhYmFjX2J5cGFzc19hbGlnbm1lbnRfZW5hYmxlZF9mbGFnID0gc3BzLT5jYWJhY19i eXBhc3NfYWxpZ25tZW50X2VuYWJsZWQsCi0gICAgICAgICAgICAuc3BzX3NjY19leHRlbnNpb25f ZmxhZyA9IHNwcy0+c2NjX2V4dGVuc2lvbiwKLSAgICAgICAgICAgIC5zcHNfY3Vycl9waWNfcmVm X2VuYWJsZWRfZmxhZyA9IHNwcy0+Y3Vycl9waWNfcmVmX2VuYWJsZWQsCi0gICAgICAgICAgICAu cGFsZXR0ZV9tb2RlX2VuYWJsZWRfZmxhZyA9IHNwcy0+cGFsZXR0ZV9tb2RlX2VuYWJsZWQsCi0g ICAgICAgICAgICAuc3BzX3BhbGV0dGVfcHJlZGljdG9yX2luaXRpYWxpemVyc19wcmVzZW50X2Zs YWcgPSBzcHMtPnBhbGV0dGVfcHJlZGljdG9yX2luaXRpYWxpemVyc19wcmVzZW50LAotICAgICAg ICAgICAgLmludHJhX2JvdW5kYXJ5X2ZpbHRlcmluZ19kaXNhYmxlZF9mbGFnID0gc3BzLT5pbnRy YV9ib3VuZGFyeV9maWx0ZXJpbmdfZGlzYWJsZWQsCi0gICAgICAgIH0sCi0gICAgICAgIC5jaHJv bWFfZm9ybWF0X2lkYyA9IHNwcy0+Y2hyb21hX2Zvcm1hdF9pZGMsCi0gICAgICAgIC5waWNfd2lk dGhfaW5fbHVtYV9zYW1wbGVzID0gc3BzLT53aWR0aCwKLSAgICAgICAgLnBpY19oZWlnaHRfaW5f bHVtYV9zYW1wbGVzID0gc3BzLT5oZWlnaHQsCi0gICAgICAgIC5zcHNfdmlkZW9fcGFyYW1ldGVy X3NldF9pZCA9IHNwcy0+dnBzX2lkLAotICAgICAgICAuc3BzX21heF9zdWJfbGF5ZXJzX21pbnVz MSA9IHNwcy0+bWF4X3N1Yl9sYXllcnMgLSAxLAotICAgICAgICAuc3BzX3NlcV9wYXJhbWV0ZXJf c2V0X2lkID0gc3BzX2lkeCwKLSAgICAgICAgLmJpdF9kZXB0aF9sdW1hX21pbnVzOCA9IHNwcy0+ Yml0X2RlcHRoIC0gOCwKLSAgICAgICAgLmJpdF9kZXB0aF9jaHJvbWFfbWludXM4ID0gc3BzLT5i aXRfZGVwdGhfY2hyb21hIC0gOCwKLSAgICAgICAgLmxvZzJfbWF4X3BpY19vcmRlcl9jbnRfbHNi X21pbnVzNCA9IHNwcy0+bG9nMl9tYXhfcG9jX2xzYiAtIDQsCi0gICAgICAgIC5sb2cyX21pbl9s dW1hX2NvZGluZ19ibG9ja19zaXplX21pbnVzMyA9IHNwcy0+bG9nMl9taW5fY2Jfc2l6ZSAtIDMs Ci0gICAgICAgIC5sb2cyX2RpZmZfbWF4X21pbl9sdW1hX2NvZGluZ19ibG9ja19zaXplID0gc3Bz LT5sb2cyX2RpZmZfbWF4X21pbl9jb2RpbmdfYmxvY2tfc2l6ZSwKLSAgICAgICAgLmxvZzJfbWlu X2x1bWFfdHJhbnNmb3JtX2Jsb2NrX3NpemVfbWludXMyID0gc3BzLT5sb2cyX21pbl90Yl9zaXpl IC0gMiwKLSAgICAgICAgLmxvZzJfZGlmZl9tYXhfbWluX2x1bWFfdHJhbnNmb3JtX2Jsb2NrX3Np emUgPSBzcHMtPmxvZzJfZGlmZl9tYXhfbWluX3RyYW5zZm9ybV9ibG9ja19zaXplLAotICAgICAg ICAubWF4X3RyYW5zZm9ybV9oaWVyYXJjaHlfZGVwdGhfaW50ZXIgPSBzcHMtPm1heF90cmFuc2Zv cm1faGllcmFyY2h5X2RlcHRoX2ludGVyLAotICAgICAgICAubWF4X3RyYW5zZm9ybV9oaWVyYXJj aHlfZGVwdGhfaW50cmEgPSBzcHMtPm1heF90cmFuc2Zvcm1faGllcmFyY2h5X2RlcHRoX2ludHJh LAotICAgICAgICAubnVtX3Nob3J0X3Rlcm1fcmVmX3BpY19zZXRzID0gc3BzLT5uYl9zdF9ycHMs Ci0gICAgICAgIC5udW1fbG9uZ190ZXJtX3JlZl9waWNzX3NwcyA9IHNwcy0+bnVtX2xvbmdfdGVy bV9yZWZfcGljc19zcHMsCi0gICAgICAgIC5wY21fc2FtcGxlX2JpdF9kZXB0aF9sdW1hX21pbnVz MSA9IHNwcy0+cGNtLmJpdF9kZXB0aCAtIDEsCi0gICAgICAgIC5wY21fc2FtcGxlX2JpdF9kZXB0 aF9jaHJvbWFfbWludXMxID0gc3BzLT5wY20uYml0X2RlcHRoX2Nocm9tYSAtIDEsCi0gICAgICAg IC5sb2cyX21pbl9wY21fbHVtYV9jb2RpbmdfYmxvY2tfc2l6ZV9taW51czMgPSBzcHMtPnBjbS5s b2cyX21pbl9wY21fY2Jfc2l6ZSAtIDMsCi0gICAgICAgIC5sb2cyX2RpZmZfbWF4X21pbl9wY21f bHVtYV9jb2RpbmdfYmxvY2tfc2l6ZSA9IHNwcy0+cGNtLmxvZzJfbWF4X3BjbV9jYl9zaXplIC0g c3BzLT5wY20ubG9nMl9taW5fcGNtX2NiX3NpemUsCi0gICAgICAgIC8qIFJlc2VydmVkICovCi0g ICAgICAgIC8qIFJlc2VydmVkICovCi0gICAgICAgIC5wYWxldHRlX21heF9zaXplID0gc3BzLT5w YWxldHRlX21heF9zaXplLAotICAgICAgICAuZGVsdGFfcGFsZXR0ZV9tYXhfcHJlZGljdG9yX3Np emUgPSBzcHMtPmRlbHRhX3BhbGV0dGVfbWF4X3ByZWRpY3Rvcl9zaXplLAotICAgICAgICAubW90 aW9uX3ZlY3Rvcl9yZXNvbHV0aW9uX2NvbnRyb2xfaWRjID0gc3BzLT5tb3Rpb25fdmVjdG9yX3Jl c29sdXRpb25fY29udHJvbF9pZGMsCi0gICAgICAgIC5zcHNfbnVtX3BhbGV0dGVfcHJlZGljdG9y X2luaXRpYWxpemVyc19taW51czEgPSBzcHMtPnNwc19udW1fcGFsZXR0ZV9wcmVkaWN0b3JfaW5p dGlhbGl6ZXJzIC0gMSwKLSAgICAgICAgLmNvbmZfd2luX2xlZnRfb2Zmc2V0ID0gc3BzLT5waWNf Y29uZl93aW4ubGVmdF9vZmZzZXQsCi0gICAgICAgIC5jb25mX3dpbl9yaWdodF9vZmZzZXQgPSBz cHMtPnBpY19jb25mX3dpbi5yaWdodF9vZmZzZXQsCi0gICAgICAgIC5jb25mX3dpbl90b3Bfb2Zm c2V0ID0gc3BzLT5waWNfY29uZl93aW4udG9wX29mZnNldCwKLSAgICAgICAgLmNvbmZfd2luX2Jv dHRvbV9vZmZzZXQgPSBzcHMtPnBpY19jb25mX3dpbi5ib3R0b21fb2Zmc2V0LAotICAgICAgICAu cFByb2ZpbGVUaWVyTGV2ZWwgPSBwdGwsCi0gICAgICAgIC5wRGVjUGljQnVmTWdyID0gZHBibSwK LSAgICAgICAgLnBTY2FsaW5nTGlzdHMgPSB2a3Nwc19zY2FsaW5nLAotICAgICAgICAucFNob3J0 VGVybVJlZlBpY1NldCA9IHN0ciwKLSAgICAgICAgLnBMb25nVGVybVJlZlBpY3NTcHMgPSBsdHIs Ci0gICAgICAgIC5wU2VxdWVuY2VQYXJhbWV0ZXJTZXRWdWkgPSB2a3Nwc192dWksCi0gICAgICAg IC5wUHJlZGljdG9yUGFsZXR0ZUVudHJpZXMgPSBwYWwsCi0gICAgfTsKLX0KLQotc3RhdGljIHZv aWQgc2V0X3Bwcyhjb25zdCBIRVZDUFBTICpwcHMsIGNvbnN0IEhFVkNTUFMgKnNwcywKLSAgICAg ICAgICAgICAgICAgICAgU3RkVmlkZW9IMjY1U2NhbGluZ0xpc3RzICp2a3Bwc19zY2FsaW5nLAot ICAgICAgICAgICAgICAgICAgICBTdGRWaWRlb0gyNjVQaWN0dXJlUGFyYW1ldGVyU2V0ICp2a3Bw cywKLSAgICAgICAgICAgICAgICAgICAgU3RkVmlkZW9IMjY1UHJlZGljdG9yUGFsZXR0ZUVudHJp ZXMgKnBhbCkKLXsKLSAgICBjb3B5X3NjYWxpbmdfbGlzdCgmcHBzLT5zY2FsaW5nX2xpc3QsIHZr cHBzX3NjYWxpbmcpOwotCi0gICAgKnZrcHBzID0gKFN0ZFZpZGVvSDI2NVBpY3R1cmVQYXJhbWV0 ZXJTZXQpIHsKLSAgICAgICAgLmZsYWdzID0gKFN0ZFZpZGVvSDI2NVBwc0ZsYWdzKSB7Ci0gICAg ICAgICAgICAuZGVwZW5kZW50X3NsaWNlX3NlZ21lbnRzX2VuYWJsZWRfZmxhZyA9IHBwcy0+ZGVw ZW5kZW50X3NsaWNlX3NlZ21lbnRzX2VuYWJsZWRfZmxhZywKLSAgICAgICAgICAgIC5vdXRwdXRf ZmxhZ19wcmVzZW50X2ZsYWcgPSBwcHMtPm91dHB1dF9mbGFnX3ByZXNlbnRfZmxhZywKLSAgICAg ICAgICAgIC5zaWduX2RhdGFfaGlkaW5nX2VuYWJsZWRfZmxhZyA9IHBwcy0+c2lnbl9kYXRhX2hp ZGluZ19mbGFnLAotICAgICAgICAgICAgLmNhYmFjX2luaXRfcHJlc2VudF9mbGFnID0gcHBzLT5j YWJhY19pbml0X3ByZXNlbnRfZmxhZywKLSAgICAgICAgICAgIC5jb25zdHJhaW5lZF9pbnRyYV9w cmVkX2ZsYWcgPSBwcHMtPmNvbnN0cmFpbmVkX2ludHJhX3ByZWRfZmxhZywKLSAgICAgICAgICAg IC50cmFuc2Zvcm1fc2tpcF9lbmFibGVkX2ZsYWcgPSBwcHMtPnRyYW5zZm9ybV9za2lwX2VuYWJs ZWRfZmxhZywKLSAgICAgICAgICAgIC5jdV9xcF9kZWx0YV9lbmFibGVkX2ZsYWcgPSBwcHMtPmN1 X3FwX2RlbHRhX2VuYWJsZWRfZmxhZywKLSAgICAgICAgICAgIC5wcHNfc2xpY2VfY2hyb21hX3Fw X29mZnNldHNfcHJlc2VudF9mbGFnID0gcHBzLT5waWNfc2xpY2VfbGV2ZWxfY2hyb21hX3FwX29m ZnNldHNfcHJlc2VudF9mbGFnLAotICAgICAgICAgICAgLndlaWdodGVkX3ByZWRfZmxhZyA9IHBw cy0+d2VpZ2h0ZWRfcHJlZF9mbGFnLAotICAgICAgICAgICAgLndlaWdodGVkX2JpcHJlZF9mbGFn ID0gcHBzLT53ZWlnaHRlZF9iaXByZWRfZmxhZywKLSAgICAgICAgICAgIC50cmFuc3F1YW50X2J5 cGFzc19lbmFibGVkX2ZsYWcgPSBwcHMtPnRyYW5zcXVhbnRfYnlwYXNzX2VuYWJsZV9mbGFnLAot ICAgICAgICAgICAgLnRpbGVzX2VuYWJsZWRfZmxhZyA9IHBwcy0+dGlsZXNfZW5hYmxlZF9mbGFn LAotICAgICAgICAgICAgLmVudHJvcHlfY29kaW5nX3N5bmNfZW5hYmxlZF9mbGFnID0gcHBzLT5l bnRyb3B5X2NvZGluZ19zeW5jX2VuYWJsZWRfZmxhZywKLSAgICAgICAgICAgIC51bmlmb3JtX3Nw YWNpbmdfZmxhZyA9IHBwcy0+dW5pZm9ybV9zcGFjaW5nX2ZsYWcsCi0gICAgICAgICAgICAubG9v cF9maWx0ZXJfYWNyb3NzX3RpbGVzX2VuYWJsZWRfZmxhZyA9IHBwcy0+bG9vcF9maWx0ZXJfYWNy b3NzX3RpbGVzX2VuYWJsZWRfZmxhZywKLSAgICAgICAgICAgIC5wcHNfbG9vcF9maWx0ZXJfYWNy b3NzX3NsaWNlc19lbmFibGVkX2ZsYWcgPSBwcHMtPnNlcV9sb29wX2ZpbHRlcl9hY3Jvc3Nfc2xp Y2VzX2VuYWJsZWRfZmxhZywKLSAgICAgICAgICAgIC5kZWJsb2NraW5nX2ZpbHRlcl9jb250cm9s X3ByZXNlbnRfZmxhZyA9IHBwcy0+ZGVibG9ja2luZ19maWx0ZXJfY29udHJvbF9wcmVzZW50X2Zs YWcsCi0gICAgICAgICAgICAuZGVibG9ja2luZ19maWx0ZXJfb3ZlcnJpZGVfZW5hYmxlZF9mbGFn ID0gcHBzLT5kZWJsb2NraW5nX2ZpbHRlcl9vdmVycmlkZV9lbmFibGVkX2ZsYWcsCi0gICAgICAg ICAgICAucHBzX2RlYmxvY2tpbmdfZmlsdGVyX2Rpc2FibGVkX2ZsYWcgPSBwcHMtPmRpc2FibGVf ZGJmLAotICAgICAgICAgICAgLnBwc19zY2FsaW5nX2xpc3RfZGF0YV9wcmVzZW50X2ZsYWcgPSBw cHMtPnNjYWxpbmdfbGlzdF9kYXRhX3ByZXNlbnRfZmxhZywKLSAgICAgICAgICAgIC5saXN0c19t b2RpZmljYXRpb25fcHJlc2VudF9mbGFnID0gcHBzLT5saXN0c19tb2RpZmljYXRpb25fcHJlc2Vu dF9mbGFnLAotICAgICAgICAgICAgLnNsaWNlX3NlZ21lbnRfaGVhZGVyX2V4dGVuc2lvbl9wcmVz ZW50X2ZsYWcgPSBwcHMtPnNsaWNlX2hlYWRlcl9leHRlbnNpb25fcHJlc2VudF9mbGFnLAotICAg ICAgICAgICAgLnBwc19leHRlbnNpb25fcHJlc2VudF9mbGFnID0gcHBzLT5wcHNfZXh0ZW5zaW9u X3ByZXNlbnRfZmxhZywKLSAgICAgICAgICAgIC5jcm9zc19jb21wb25lbnRfcHJlZGljdGlvbl9l bmFibGVkX2ZsYWcgPSBwcHMtPmNyb3NzX2NvbXBvbmVudF9wcmVkaWN0aW9uX2VuYWJsZWRfZmxh ZywKLSAgICAgICAgICAgIC5jaHJvbWFfcXBfb2Zmc2V0X2xpc3RfZW5hYmxlZF9mbGFnID0gcHBz LT5jaHJvbWFfcXBfb2Zmc2V0X2xpc3RfZW5hYmxlZF9mbGFnLAotICAgICAgICAgICAgLnBwc19j dXJyX3BpY19yZWZfZW5hYmxlZF9mbGFnID0gcHBzLT5wcHNfY3Vycl9waWNfcmVmX2VuYWJsZWRf ZmxhZywKLSAgICAgICAgICAgIC5yZXNpZHVhbF9hZGFwdGl2ZV9jb2xvdXJfdHJhbnNmb3JtX2Vu YWJsZWRfZmxhZyA9IHBwcy0+cmVzaWR1YWxfYWRhcHRpdmVfY29sb3VyX3RyYW5zZm9ybV9lbmFi bGVkX2ZsYWcsCi0gICAgICAgICAgICAucHBzX3NsaWNlX2FjdF9xcF9vZmZzZXRzX3ByZXNlbnRf ZmxhZyA9IHBwcy0+cHBzX3NsaWNlX2FjdF9xcF9vZmZzZXRzX3ByZXNlbnRfZmxhZywKLSAgICAg ICAgICAgIC5wcHNfcGFsZXR0ZV9wcmVkaWN0b3JfaW5pdGlhbGl6ZXJzX3ByZXNlbnRfZmxhZyA9 IHBwcy0+cHBzX3BhbGV0dGVfcHJlZGljdG9yX2luaXRpYWxpemVyc19wcmVzZW50X2ZsYWcsCi0g ICAgICAgICAgICAubW9ub2Nocm9tZV9wYWxldHRlX2ZsYWcgPSBwcHMtPm1vbm9jaHJvbWVfcGFs ZXR0ZV9mbGFnLAotICAgICAgICAgICAgLnBwc19yYW5nZV9leHRlbnNpb25fZmxhZyA9IHBwcy0+ cHBzX3JhbmdlX2V4dGVuc2lvbnNfZmxhZywKLSAgICAgICAgfSwKLSAgICAgICAgLnBwc19waWNf cGFyYW1ldGVyX3NldF9pZCA9IHBwcy0+cHBzX2lkLAotICAgICAgICAucHBzX3NlcV9wYXJhbWV0 ZXJfc2V0X2lkID0gcHBzLT5zcHNfaWQsCi0gICAgICAgIC5zcHNfdmlkZW9fcGFyYW1ldGVyX3Nl dF9pZCA9IHNwcy0+dnBzX2lkLAotICAgICAgICAubnVtX2V4dHJhX3NsaWNlX2hlYWRlcl9iaXRz ID0gcHBzLT5udW1fZXh0cmFfc2xpY2VfaGVhZGVyX2JpdHMsCi0gICAgICAgIC5udW1fcmVmX2lk eF9sMF9kZWZhdWx0X2FjdGl2ZV9taW51czEgPSBwcHMtPm51bV9yZWZfaWR4X2wwX2RlZmF1bHRf YWN0aXZlIC0gMSwKLSAgICAgICAgLm51bV9yZWZfaWR4X2wxX2RlZmF1bHRfYWN0aXZlX21pbnVz MSA9IHBwcy0+bnVtX3JlZl9pZHhfbDFfZGVmYXVsdF9hY3RpdmUgLSAxLAotICAgICAgICAuaW5p dF9xcF9taW51czI2ID0gcHBzLT5waWNfaW5pdF9xcF9taW51czI2LAotICAgICAgICAuZGlmZl9j dV9xcF9kZWx0YV9kZXB0aCA9IHBwcy0+ZGlmZl9jdV9xcF9kZWx0YV9kZXB0aCwKLSAgICAgICAg LnBwc19jYl9xcF9vZmZzZXQgPSBwcHMtPmNiX3FwX29mZnNldCwKLSAgICAgICAgLnBwc19jcl9x cF9vZmZzZXQgPSBwcHMtPmNyX3FwX29mZnNldCwKLSAgICAgICAgLnBwc19iZXRhX29mZnNldF9k aXYyID0gcHBzLT5iZXRhX29mZnNldCA+PiAxLAotICAgICAgICAucHBzX3RjX29mZnNldF9kaXYy ID0gcHBzLT50Y19vZmZzZXQgPj4gMSwKLSAgICAgICAgLmxvZzJfcGFyYWxsZWxfbWVyZ2VfbGV2 ZWxfbWludXMyID0gcHBzLT5sb2cyX3BhcmFsbGVsX21lcmdlX2xldmVsIC0gMiwKLSAgICAgICAg LmxvZzJfbWF4X3RyYW5zZm9ybV9za2lwX2Jsb2NrX3NpemVfbWludXMyID0gcHBzLT5sb2cyX21h eF90cmFuc2Zvcm1fc2tpcF9ibG9ja19zaXplIC0gMiwKLSAgICAgICAgLmRpZmZfY3VfY2hyb21h X3FwX29mZnNldF9kZXB0aCA9IHBwcy0+ZGlmZl9jdV9jaHJvbWFfcXBfb2Zmc2V0X2RlcHRoLAot ICAgICAgICAuY2hyb21hX3FwX29mZnNldF9saXN0X2xlbl9taW51czEgPSBwcHMtPmNocm9tYV9x cF9vZmZzZXRfbGlzdF9sZW5fbWludXMxLAotICAgICAgICAubG9nMl9zYW9fb2Zmc2V0X3NjYWxl X2x1bWEgPSBwcHMtPmxvZzJfc2FvX29mZnNldF9zY2FsZV9sdW1hLAotICAgICAgICAubG9nMl9z YW9fb2Zmc2V0X3NjYWxlX2Nocm9tYSA9IHBwcy0+bG9nMl9zYW9fb2Zmc2V0X3NjYWxlX2Nocm9t YSwKLSAgICAgICAgLnBwc19hY3RfeV9xcF9vZmZzZXRfcGx1czUgPSBwcHMtPnBwc19hY3RfeV9x cF9vZmZzZXQgKyA1LAotICAgICAgICAucHBzX2FjdF9jYl9xcF9vZmZzZXRfcGx1czUgPSBwcHMt PnBwc19hY3RfY2JfcXBfb2Zmc2V0ICsgNSwKLSAgICAgICAgLnBwc19hY3RfY3JfcXBfb2Zmc2V0 X3BsdXMzID0gcHBzLT5wcHNfYWN0X2NyX3FwX29mZnNldCArIDMsCi0gICAgICAgIC5wcHNfbnVt X3BhbGV0dGVfcHJlZGljdG9yX2luaXRpYWxpemVycyA9IHBwcy0+cHBzX251bV9wYWxldHRlX3By ZWRpY3Rvcl9pbml0aWFsaXplcnMsCi0gICAgICAgIC5sdW1hX2JpdF9kZXB0aF9lbnRyeV9taW51 czggPSBwcHMtPmx1bWFfYml0X2RlcHRoX2VudHJ5IC0gOCwKLSAgICAgICAgLmNocm9tYV9iaXRf ZGVwdGhfZW50cnlfbWludXM4ID0gcHBzLT5jaHJvbWFfYml0X2RlcHRoX2VudHJ5IC0gOCwKLSAg ICAgICAgLm51bV90aWxlX2NvbHVtbnNfbWludXMxID0gcHBzLT5udW1fdGlsZV9jb2x1bW5zIC0g MSwKLSAgICAgICAgLm51bV90aWxlX3Jvd3NfbWludXMxID0gcHBzLT5udW1fdGlsZV9yb3dzIC0g MSwKLSAgICAgICAgLnBTY2FsaW5nTGlzdHMgPSB2a3Bwc19zY2FsaW5nLAotICAgICAgICAucFBy ZWRpY3RvclBhbGV0dGVFbnRyaWVzID0gcGFsLAotICAgIH07Ci0KLSAgICBmb3IgKGludCBpID0g MDsgaSA8IChwcHMtPm1vbm9jaHJvbWVfcGFsZXR0ZV9mbGFnID8gMSA6IDMpOyBpKyspIHsKLSAg ICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBwcHMtPnBwc19udW1fcGFsZXR0ZV9wcmVkaWN0b3Jf aW5pdGlhbGl6ZXJzOyBqKyspCi0gICAgICAgICAgICBwYWwtPlByZWRpY3RvclBhbGV0dGVFbnRy aWVzW2ldW2pdID0gcHBzLT5wcHNfcGFsZXR0ZV9wcmVkaWN0b3JfaW5pdGlhbGl6ZXJbaV1bal07 Ci0gICAgfQotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwcHMtPm51bV90aWxlX2NvbHVtbnMg LSAxOyBpKyspCi0gICAgICAgIHZrcHBzLT5jb2x1bW5fd2lkdGhfbWludXMxW2ldID0gcHBzLT5j b2x1bW5fd2lkdGhbaV0gLSAxOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwcHMtPm51bV90 aWxlX3Jvd3MgLSAxOyBpKyspCi0gICAgICAgIHZrcHBzLT5yb3dfaGVpZ2h0X21pbnVzMVtpXSA9 IHBwcy0+cm93X2hlaWdodFtpXSAtIDE7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8PSBwcHMt PmNocm9tYV9xcF9vZmZzZXRfbGlzdF9sZW5fbWludXMxOyBpKyspIHsKLSAgICAgICAgdmtwcHMt PmNiX3FwX29mZnNldF9saXN0W2ldID0gcHBzLT5jYl9xcF9vZmZzZXRfbGlzdFtpXTsKLSAgICAg ICAgdmtwcHMtPmNyX3FwX29mZnNldF9saXN0W2ldID0gcHBzLT5jcl9xcF9vZmZzZXRfbGlzdFtp XTsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIHNldF92cHMoY29uc3QgSEVWQ1ZQUyAqdnBzLAot ICAgICAgICAgICAgICAgICAgICBTdGRWaWRlb0gyNjVWaWRlb1BhcmFtZXRlclNldCAqdmt2cHMs Ci0gICAgICAgICAgICAgICAgICAgIFN0ZFZpZGVvSDI2NVByb2ZpbGVUaWVyTGV2ZWwgKnB0bCwK LSAgICAgICAgICAgICAgICAgICAgU3RkVmlkZW9IMjY1RGVjUGljQnVmTWdyICpkcGJtLAotICAg ICAgICAgICAgICAgICAgICBTdGRWaWRlb0gyNjVIcmRQYXJhbWV0ZXJzICpzbHNfaGRyLAotICAg ICAgICAgICAgICAgICAgICBIRVZDSGVhZGVyVlBTU2V0IHNsc1tdKQotewotICAgIGZvciAoaW50 IGkgPSAwOyBpIDwgdnBzLT52cHNfbnVtX2hyZF9wYXJhbWV0ZXJzOyBpKyspIHsKLSAgICAgICAg Y29uc3QgSEVWQ0hkclBhcmFtcyAqc3JjID0gJnZwcy0+aGRyW2ldOwotCi0gICAgICAgIHNsc19o ZHJbaV0gPSAoU3RkVmlkZW9IMjY1SHJkUGFyYW1ldGVycykgewotICAgICAgICAgICAgLmZsYWdz ID0gKFN0ZFZpZGVvSDI2NUhyZEZsYWdzKSB7Ci0gICAgICAgICAgICAgICAgLm5hbF9ocmRfcGFy YW1ldGVyc19wcmVzZW50X2ZsYWcgPSBzcmMtPm5hbF9ocmRfcGFyYW1ldGVyc19wcmVzZW50X2Zs YWcsCi0gICAgICAgICAgICAgICAgLnZjbF9ocmRfcGFyYW1ldGVyc19wcmVzZW50X2ZsYWcgPSBz cmMtPnZjbF9ocmRfcGFyYW1ldGVyc19wcmVzZW50X2ZsYWcsCi0gICAgICAgICAgICAgICAgLnN1 Yl9waWNfaHJkX3BhcmFtc19wcmVzZW50X2ZsYWcgPSBzcmMtPnN1Yl9waWNfaHJkX3BhcmFtc19w cmVzZW50X2ZsYWcsCi0gICAgICAgICAgICAgICAgLnN1Yl9waWNfY3BiX3BhcmFtc19pbl9waWNf dGltaW5nX3NlaV9mbGFnID0gc3JjLT5zdWJfcGljX2NwYl9wYXJhbXNfaW5fcGljX3RpbWluZ19z ZWlfZmxhZywKLSAgICAgICAgICAgICAgICAuZml4ZWRfcGljX3JhdGVfZ2VuZXJhbF9mbGFnID0g c3JjLT5mbGFncy5maXhlZF9waWNfcmF0ZV9nZW5lcmFsX2ZsYWcsCi0gICAgICAgICAgICAgICAg LmZpeGVkX3BpY19yYXRlX3dpdGhpbl9jdnNfZmxhZyA9IHNyYy0+ZmxhZ3MuZml4ZWRfcGljX3Jh dGVfd2l0aGluX2N2c19mbGFnLAotICAgICAgICAgICAgICAgIC5sb3dfZGVsYXlfaHJkX2ZsYWcg PSBzcmMtPmZsYWdzLmxvd19kZWxheV9ocmRfZmxhZywKLSAgICAgICAgICAgIH0sCi0gICAgICAg ICAgICAudGlja19kaXZpc29yX21pbnVzMiA9IHNyYy0+dGlja19kaXZpc29yX21pbnVzMiwKLSAg ICAgICAgICAgIC5kdV9jcGJfcmVtb3ZhbF9kZWxheV9pbmNyZW1lbnRfbGVuZ3RoX21pbnVzMSA9 IHNyYy0+ZHVfY3BiX3JlbW92YWxfZGVsYXlfaW5jcmVtZW50X2xlbmd0aF9taW51czEsCi0gICAg ICAgICAgICAuZHBiX291dHB1dF9kZWxheV9kdV9sZW5ndGhfbWludXMxID0gc3JjLT5kcGJfb3V0 cHV0X2RlbGF5X2R1X2xlbmd0aF9taW51czEsCi0gICAgICAgICAgICAuYml0X3JhdGVfc2NhbGUg PSBzcmMtPmJpdF9yYXRlX3NjYWxlLAotICAgICAgICAgICAgLmNwYl9zaXplX3NjYWxlID0gc3Jj LT5jcGJfc2l6ZV9zY2FsZSwKLSAgICAgICAgICAgIC5jcGJfc2l6ZV9kdV9zY2FsZSA9IHNyYy0+ Y3BiX3NpemVfZHVfc2NhbGUsCi0gICAgICAgICAgICAuaW5pdGlhbF9jcGJfcmVtb3ZhbF9kZWxh eV9sZW5ndGhfbWludXMxID0gc3JjLT5pbml0aWFsX2NwYl9yZW1vdmFsX2RlbGF5X2xlbmd0aF9t aW51czEsCi0gICAgICAgICAgICAuYXVfY3BiX3JlbW92YWxfZGVsYXlfbGVuZ3RoX21pbnVzMSA9 IHNyYy0+YXVfY3BiX3JlbW92YWxfZGVsYXlfbGVuZ3RoX21pbnVzMSwKLSAgICAgICAgICAgIC5k cGJfb3V0cHV0X2RlbGF5X2xlbmd0aF9taW51czEgPSBzcmMtPmRwYl9vdXRwdXRfZGVsYXlfbGVu Z3RoX21pbnVzMSwKLSAgICAgICAgICAgIC8qIFJlc2VydmVkIC0gMyoxNiBiaXRzICovCi0gICAg ICAgICAgICAucFN1YkxheWVySHJkUGFyYW1ldGVyc05hbCA9IHNsc1tpXS5uYWxfaGRyLAotICAg ICAgICAgICAgLnBTdWJMYXllckhyZFBhcmFtZXRlcnNWY2wgPSBzbHNbaV0udmNsX2hkciwKLSAg ICAgICAgfTsKLQotICAgICAgICBtZW1jcHkoc2xzX2hkcltpXS5jcGJfY250X21pbnVzMSwgc3Jj LT5jcGJfY250X21pbnVzMSwKLSAgICAgICAgICAgICAgIFNURF9WSURFT19IMjY1X1NVQkxBWUVS U19MSVNUX1NJWkUqc2l6ZW9mKCpzbHNfaGRyW2ldLmNwYl9jbnRfbWludXMxKSk7Ci0gICAgICAg IG1lbWNweShzbHNfaGRyW2ldLmVsZW1lbnRhbF9kdXJhdGlvbl9pbl90Y19taW51czEsIHNyYy0+ ZWxlbWVudGFsX2R1cmF0aW9uX2luX3RjX21pbnVzMSwKLSAgICAgICAgICAgICAgIFNURF9WSURF T19IMjY1X1NVQkxBWUVSU19MSVNUX1NJWkUqc2l6ZW9mKCpzbHNfaGRyW2ldLmVsZW1lbnRhbF9k dXJhdGlvbl9pbl90Y19taW51czEpKTsKLQotICAgICAgICBtZW1jcHkoc2xzW2ldLm5hbF9oZHIs IHNyYy0+bmFsX3BhcmFtcywgSEVWQ19NQVhfU1VCX0xBWUVSUypzaXplb2YoKnNsc1tpXS5uYWxf aGRyKSk7Ci0gICAgICAgIG1lbWNweShzbHNbaV0udmNsX2hkciwgc3JjLT52Y2xfcGFyYW1zLCBI RVZDX01BWF9TVUJfTEFZRVJTKnNpemVvZigqc2xzW2ldLnZjbF9oZHIpKTsKLSAgICB9Ci0KLSAg ICAqcHRsID0gKFN0ZFZpZGVvSDI2NVByb2ZpbGVUaWVyTGV2ZWwpIHsKLSAgICAgICAgLmZsYWdz ID0gKFN0ZFZpZGVvSDI2NVByb2ZpbGVUaWVyTGV2ZWxGbGFncykgewotICAgICAgICAgICAgLmdl bmVyYWxfdGllcl9mbGFnID0gdnBzLT5wdGwuZ2VuZXJhbF9wdGwudGllcl9mbGFnLAotICAgICAg ICAgICAgLmdlbmVyYWxfcHJvZ3Jlc3NpdmVfc291cmNlX2ZsYWcgPSB2cHMtPnB0bC5nZW5lcmFs X3B0bC5wcm9ncmVzc2l2ZV9zb3VyY2VfZmxhZywKLSAgICAgICAgICAgIC5nZW5lcmFsX2ludGVy bGFjZWRfc291cmNlX2ZsYWcgPSB2cHMtPnB0bC5nZW5lcmFsX3B0bC5pbnRlcmxhY2VkX3NvdXJj ZV9mbGFnLAotICAgICAgICAgICAgLmdlbmVyYWxfbm9uX3BhY2tlZF9jb25zdHJhaW50X2ZsYWcg PSB2cHMtPnB0bC5nZW5lcmFsX3B0bC5ub25fcGFja2VkX2NvbnN0cmFpbnRfZmxhZywKLSAgICAg ICAgICAgIC5nZW5lcmFsX2ZyYW1lX29ubHlfY29uc3RyYWludF9mbGFnID0gdnBzLT5wdGwuZ2Vu ZXJhbF9wdGwuZnJhbWVfb25seV9jb25zdHJhaW50X2ZsYWcsCi0gICAgICAgIH0sCi0gICAgICAg IC5nZW5lcmFsX3Byb2ZpbGVfaWRjID0gZmZfdmtfaDI2NV9wcm9maWxlX3RvX3ZrKHZwcy0+cHRs LmdlbmVyYWxfcHRsLnByb2ZpbGVfaWRjKSwKLSAgICAgICAgLmdlbmVyYWxfbGV2ZWxfaWRjID0g ZmZfdmtfaDI2NV9sZXZlbF90b192ayh2cHMtPnB0bC5nZW5lcmFsX3B0bC5sZXZlbF9pZGMpLAot ICAgIH07Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHZwcy0+dnBzX21heF9zdWJfbGF5ZXJz OyBpKyspIHsKLSAgICAgICAgZHBibS0+bWF4X2xhdGVuY3lfaW5jcmVhc2VfcGx1czFbaV0gPSB2 cHMtPnZwc19tYXhfbGF0ZW5jeV9pbmNyZWFzZVtpXSArIDE7Ci0gICAgICAgIGRwYm0tPm1heF9k ZWNfcGljX2J1ZmZlcmluZ19taW51czFbaV0gPSB2cHMtPnZwc19tYXhfZGVjX3BpY19idWZmZXJp bmdbaV0gLSAxOwotICAgICAgICBkcGJtLT5tYXhfbnVtX3Jlb3JkZXJfcGljc1tpXSA9IHZwcy0+ dnBzX251bV9yZW9yZGVyX3BpY3NbaV07Ci0gICAgfQotCi0gICAgKnZrdnBzID0gKFN0ZFZpZGVv SDI2NVZpZGVvUGFyYW1ldGVyU2V0KSB7Ci0gICAgICAgIC5mbGFncyA9IChTdGRWaWRlb0gyNjVW cHNGbGFncykgewotICAgICAgICAgICAgLnZwc190ZW1wb3JhbF9pZF9uZXN0aW5nX2ZsYWcgPSB2 cHMtPnZwc190ZW1wb3JhbF9pZF9uZXN0aW5nX2ZsYWcsCi0gICAgICAgICAgICAudnBzX3N1Yl9s YXllcl9vcmRlcmluZ19pbmZvX3ByZXNlbnRfZmxhZyA9IHZwcy0+dnBzX3N1Yl9sYXllcl9vcmRl cmluZ19pbmZvX3ByZXNlbnRfZmxhZywKLSAgICAgICAgICAgIC52cHNfdGltaW5nX2luZm9fcHJl c2VudF9mbGFnID0gdnBzLT52cHNfdGltaW5nX2luZm9fcHJlc2VudF9mbGFnLAotICAgICAgICAg ICAgLnZwc19wb2NfcHJvcG9ydGlvbmFsX3RvX3RpbWluZ19mbGFnID0gdnBzLT52cHNfcG9jX3By b3BvcnRpb25hbF90b190aW1pbmdfZmxhZywKLSAgICAgICAgfSwKLSAgICAgICAgLnZwc192aWRl b19wYXJhbWV0ZXJfc2V0X2lkID0gdnBzLT52cHNfaWQsCi0gICAgICAgIC52cHNfbWF4X3N1Yl9s YXllcnNfbWludXMxID0gdnBzLT52cHNfbWF4X3N1Yl9sYXllcnMgLSAxLAotICAgICAgICAvKiBS ZXNlcnZlZCAqLwotICAgICAgICAvKiBSZXNlcnZlZCAqLwotICAgICAgICAudnBzX251bV91bml0 c19pbl90aWNrID0gdnBzLT52cHNfbnVtX3VuaXRzX2luX3RpY2ssCi0gICAgICAgIC52cHNfdGlt ZV9zY2FsZSA9IHZwcy0+dnBzX3RpbWVfc2NhbGUsCi0gICAgICAgIC52cHNfbnVtX3RpY2tzX3Bv Y19kaWZmX29uZV9taW51czEgPSB2cHMtPnZwc19udW1fdGlja3NfcG9jX2RpZmZfb25lIC0gMSwK LSAgICAgICAgLyogUmVzZXJ2ZWQgKi8KLSAgICAgICAgLnBEZWNQaWNCdWZNZ3IgPSBkcGJtLAot ICAgICAgICAucEhyZFBhcmFtZXRlcnMgPSBzbHNfaGRyLAotICAgICAgICAucFByb2ZpbGVUaWVy TGV2ZWwgPSBwdGwsCi0gICAgfTsKLX0KLQotc3RhdGljIGludCB2a19oZXZjX2NyZWF0ZV9wYXJh bXMoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LCBBVkJ1ZmZlclJlZiAqKmJ1ZikKLXsKLSAgICBpbnQg ZXJyOwotICAgIGNvbnN0IEhFVkNDb250ZXh0ICpoID0gYXZjdHgtPnByaXZfZGF0YTsKLSAgICBG RlZ1bGthbkRlY29kZUNvbnRleHQgKmRlYyA9IGF2Y3R4LT5pbnRlcm5hbC0+aHdhY2NlbF9wcml2 X2RhdGE7Ci0gICAgRkZWdWxrYW5EZWNvZGVTaGFyZWQgKmN0eCA9IGRlYy0+c2hhcmVkX2N0eDsK LQotICAgIFZrVmlkZW9EZWNvZGVIMjY1U2Vzc2lvblBhcmFtZXRlcnNBZGRJbmZvS0hSIGgyNjVf cGFyYW1zX2luZm8gPSB7Ci0gICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX1ZJREVP X0RFQ09ERV9IMjY1X1NFU1NJT05fUEFSQU1FVEVSU19BRERfSU5GT19LSFIsCi0gICAgICAgIC5z dGRTUFNDb3VudCA9IDAsCi0gICAgICAgIC5zdGRQUFNDb3VudCA9IDAsCi0gICAgICAgIC5zdGRW UFNDb3VudCA9IDAsCi0gICAgfTsKLSAgICBWa1ZpZGVvRGVjb2RlSDI2NVNlc3Npb25QYXJhbWV0 ZXJzQ3JlYXRlSW5mb0tIUiBoMjY1X3BhcmFtcyA9IHsKLSAgICAgICAgLnNUeXBlID0gVktfU1RS VUNUVVJFX1RZUEVfVklERU9fREVDT0RFX0gyNjVfU0VTU0lPTl9QQVJBTUVURVJTX0NSRUFURV9J TkZPX0tIUiwKLSAgICAgICAgLnBQYXJhbWV0ZXJzQWRkSW5mbyA9ICZoMjY1X3BhcmFtc19pbmZv LAotICAgIH07Ci0gICAgVmtWaWRlb1Nlc3Npb25QYXJhbWV0ZXJzQ3JlYXRlSW5mb0tIUiBzZXNz aW9uX3BhcmFtc19jcmVhdGUgPSB7Ci0gICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBF X1ZJREVPX1NFU1NJT05fUEFSQU1FVEVSU19DUkVBVEVfSU5GT19LSFIsCi0gICAgICAgIC5wTmV4 dCA9ICZoMjY1X3BhcmFtcywKLSAgICAgICAgLnZpZGVvU2Vzc2lvbiA9IGN0eC0+Y29tbW9uLnNl c3Npb24sCi0gICAgICAgIC52aWRlb1Nlc3Npb25QYXJhbWV0ZXJzVGVtcGxhdGUgPSBWS19OVUxM X0hBTkRMRSwKLSAgICB9OwotCi0gICAgSEVWQ0hlYWRlclNldCAqaGRyOwotICAgIGludCBuYl92 cHMgPSAwOwotICAgIGludCB2cHNfbGlzdF9pZHhbSEVWQ19NQVhfVlBTX0NPVU5UXTsKLQotICAg IGZvciAoaW50IGkgPSAwOyBpIDwgSEVWQ19NQVhfVlBTX0NPVU5UOyBpKyspCi0gICAgICAgIGlm IChoLT5wcy52cHNfbGlzdFtpXSkKLSAgICAgICAgICAgIHZwc19saXN0X2lkeFtuYl92cHMrK10g PSBpOwotCi0gICAgZXJyID0gYWxsb2NfaGV2Y19oZWFkZXJfc3RydWN0cyhkZWMsIG5iX3Zwcywg dnBzX2xpc3RfaWR4LCBoLT5wcy52cHNfbGlzdCk7Ci0gICAgaWYgKGVyciA8IDApCi0gICAgICAg IHJldHVybiBlcnI7Ci0KLSAgICBoZHIgPSBkZWMtPmhldmNfaGVhZGVyczsKLQotICAgIGgyNjVf cGFyYW1zX2luZm8ucFN0ZFNQU3MgPSBoZHItPnNwczsKLSAgICBoMjY1X3BhcmFtc19pbmZvLnBT dGRQUFNzID0gaGRyLT5wcHM7Ci0gICAgaDI2NV9wYXJhbXNfaW5mby5wU3RkVlBTcyA9IGhkci0+ dnBzOwotCi0gICAgLyogU1BTIGxpc3QgKi8KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IEhFVkNf TUFYX1NQU19DT1VOVDsgaSsrKSB7Ci0gICAgICAgIGlmIChoLT5wcy5zcHNfbGlzdFtpXSkgewot ICAgICAgICAgICAgY29uc3QgSEVWQ1NQUyAqc3BzX2wgPSBoLT5wcy5zcHNfbGlzdFtpXTsKLSAg ICAgICAgICAgIGludCBpZHggPSBoMjY1X3BhcmFtc19pbmZvLnN0ZFNQU0NvdW50Kys7Ci0gICAg ICAgICAgICBzZXRfc3BzKHNwc19sLCBpLCAmaGRyLT5oc3BzW2lkeF0uc2NhbGluZywgJmhkci0+ aHNwc1tpZHhdLnZ1aV9oZWFkZXIsCi0gICAgICAgICAgICAgICAgICAgICZoZHItPmhzcHNbaWR4 XS52dWksICZoZHItPnNwc1tpZHhdLCBoZHItPmhzcHNbaWR4XS5uYWxfaGRyLAotICAgICAgICAg ICAgICAgICAgICBoZHItPmhzcHNbaWR4XS52Y2xfaGRyLCAmaGRyLT5oc3BzW2lkeF0ucHRsLCAm aGRyLT5oc3BzW2lkeF0uZHBibSwKLSAgICAgICAgICAgICAgICAgICAgJmhkci0+aHNwc1tpZHhd LnBhbCwgaGRyLT5oc3BzW2lkeF0uc3RyLCAmaGRyLT5oc3BzW2lkeF0ubHRyKTsKLSAgICAgICAg fQotICAgIH0KLQotICAgIC8qIFBQUyBsaXN0ICovCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBI RVZDX01BWF9QUFNfQ09VTlQ7IGkrKykgewotICAgICAgICBpZiAoaC0+cHMucHBzX2xpc3RbaV0p IHsKLSAgICAgICAgICAgIGNvbnN0IEhFVkNQUFMgKnBwc19sID0gaC0+cHMucHBzX2xpc3RbaV07 Ci0gICAgICAgICAgICBjb25zdCBIRVZDU1BTICpzcHNfbCA9IGgtPnBzLnNwc19saXN0W3Bwc19s LT5zcHNfaWRdOwotICAgICAgICAgICAgaW50IGlkeCA9IGgyNjVfcGFyYW1zX2luZm8uc3RkUFBT Q291bnQrKzsKLSAgICAgICAgICAgIHNldF9wcHMocHBzX2wsIHNwc19sLCAmaGRyLT5ocHBzW2lk eF0uc2NhbGluZywKLSAgICAgICAgICAgICAgICAgICAgJmhkci0+cHBzW2lkeF0sICZoZHItPmhw cHNbaWR4XS5wYWwpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyogVlBTIGxpc3QgKi8KLSAg ICBmb3IgKGludCBpID0gMDsgaSA8IG5iX3ZwczsgaSsrKSB7Ci0gICAgICAgIGNvbnN0IEhFVkNW UFMgKnZwc19sID0gaC0+cHMudnBzX2xpc3RbdnBzX2xpc3RfaWR4W2ldXTsKLSAgICAgICAgc2V0 X3Zwcyh2cHNfbCwgJmhkci0+dnBzW2ldLCAmaGRyLT5odnBzW2ldLnB0bCwgJmhkci0+aHZwc1tp XS5kcGJtLAotICAgICAgICAgICAgICAgIGhkci0+aHZwc1tpXS5oZHIsIGhkci0+aHZwc1tpXS5z bHMpOwotICAgICAgICBoMjY1X3BhcmFtc19pbmZvLnN0ZFZQU0NvdW50Kys7Ci0gICAgfQotCi0g ICAgaDI2NV9wYXJhbXMubWF4U3RkU1BTQ291bnQgPSBoMjY1X3BhcmFtc19pbmZvLnN0ZFNQU0Nv dW50OwotICAgIGgyNjVfcGFyYW1zLm1heFN0ZFBQU0NvdW50ID0gaDI2NV9wYXJhbXNfaW5mby5z dGRQUFNDb3VudDsKLSAgICBoMjY1X3BhcmFtcy5tYXhTdGRWUFNDb3VudCA9IGgyNjVfcGFyYW1z X2luZm8uc3RkVlBTQ291bnQ7Ci0KLSAgICBlcnIgPSBmZl92a19kZWNvZGVfY3JlYXRlX3BhcmFt cyhidWYsIGF2Y3R4LCBjdHgsICZzZXNzaW9uX3BhcmFtc19jcmVhdGUpOwotICAgIGlmIChlcnIg PCAwKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfREVC VUcsICJDcmVhdGVkIGZyYW1lIHBhcmFtZXRlcnM6ICVpIFNQUyAlaSBQUFMgJWkgVlBTXG4iLAot ICAgICAgICAgICBoMjY1X3BhcmFtc19pbmZvLnN0ZFNQU0NvdW50LCBoMjY1X3BhcmFtc19pbmZv LnN0ZFBQU0NvdW50LAotICAgICAgICAgICBoMjY1X3BhcmFtc19pbmZvLnN0ZFZQU0NvdW50KTsK LQotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHZrX2hldmNfc3RhcnRfZnJhbWUoQVZD b2RlY0NvbnRleHQgICAgICAgICAgKmF2Y3R4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGF2X3VudXNlZCBjb25zdCBBVkJ1ZmZlclJlZiAqYnVmZmVyX3JlZiwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBhdl91bnVzZWQgY29uc3QgdWludDhfdCAqYnVmZmVyLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2X3VudXNlZCB1aW50MzJfdCAgICAgICBzaXpl KQotewotICAgIGludCBlcnI7Ci0gICAgSEVWQ0NvbnRleHQgKmggPSBhdmN0eC0+cHJpdl9kYXRh OwotICAgIEhFVkNMYXllckNvbnRleHQgKmwgPSAmaC0+bGF5ZXJzW2gtPmN1cl9sYXllcl07Ci0K LSAgICBIRVZDRnJhbWUgKnBpYyA9IGgtPmN1cl9mcmFtZTsKLSAgICBIRVZDVnVsa2FuRGVjb2Rl UGljdHVyZSAqaHAgPSBwaWMtPmh3YWNjZWxfcGljdHVyZV9wcml2YXRlOwotICAgIEZGVnVsa2Fu RGVjb2RlUGljdHVyZSAqdnAgPSAmaHAtPnZwOwotICAgIGNvbnN0IEhFVkNQUFMgKnBwcyA9IGgt PnBwczsKLSAgICBjb25zdCBIRVZDU1BTICpzcHMgPSBwcHMtPnNwczsKLSAgICBpbnQgbmJfcmVm cyA9IDA7Ci0KLSAgICBocC0+aDI2NXBpYyA9IChTdGRWaWRlb0RlY29kZUgyNjVQaWN0dXJlSW5m bykgewotICAgICAgICAuZmxhZ3MgPSAoU3RkVmlkZW9EZWNvZGVIMjY1UGljdHVyZUluZm9GbGFn cykgewotICAgICAgICAgICAgLklyYXBQaWNGbGFnID0gSVNfSVJBUChoKSwKLSAgICAgICAgICAg IC5JZHJQaWNGbGFnID0gSVNfSURSKGgpLAotICAgICAgICAgICAgLklzUmVmZXJlbmNlID0gaC0+ bmFsX3VuaXRfdHlwZSA8IDE2ID8gaC0+bmFsX3VuaXRfdHlwZSAmIDEgOiAxLAotICAgICAgICAg ICAgLnNob3J0X3Rlcm1fcmVmX3BpY19zZXRfc3BzX2ZsYWcgPSBoLT5zaC5zaG9ydF90ZXJtX3Jl Zl9waWNfc2V0X3Nwc19mbGFnLAotICAgICAgICB9LAotICAgICAgICAuc3BzX3ZpZGVvX3BhcmFt ZXRlcl9zZXRfaWQgPSBzcHMtPnZwc19pZCwKLSAgICAgICAgLnBwc19zZXFfcGFyYW1ldGVyX3Nl dF9pZCA9IHBwcy0+c3BzX2lkLAotICAgICAgICAucHBzX3BpY19wYXJhbWV0ZXJfc2V0X2lkID0g cHBzLT5wcHNfaWQsCi0gICAgICAgIC5OdW1EZWx0YVBvY3NPZlJlZlJwc0lkeCA9IGgtPnNoLnNo b3J0X3Rlcm1fcnBzID8gaC0+c2guc2hvcnRfdGVybV9ycHMtPnJwc19pZHhfbnVtX2RlbHRhX3Bv Y3MgOiAwLAotICAgICAgICAuUGljT3JkZXJDbnRWYWwgPSBoLT5wb2MsCi0gICAgICAgIC5OdW1C aXRzRm9yU1RSZWZQaWNTZXRJblNsaWNlID0gIWgtPnNoLnNob3J0X3Rlcm1fcmVmX3BpY19zZXRf c3BzX2ZsYWcgPwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoLT5z aC5zaG9ydF90ZXJtX3JlZl9waWNfc2V0X3NpemUgOiAwLAotICAgIH07Ci0KLSAgICAvKiBGaWxs IGluIHJlZmVyZW5jZXMgKi8KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IEZGX0FSUkFZX0VMRU1T KGwtPkRQQik7IGkrKykgewotICAgICAgICBjb25zdCBIRVZDRnJhbWUgKnJlZiA9ICZsLT5EUEJb aV07Ci0gICAgICAgIGludCBpZHggPSBuYl9yZWZzOwotCi0gICAgICAgIGlmICghKHJlZi0+Zmxh Z3MgJiAoSEVWQ19GUkFNRV9GTEFHX1NIT1JUX1JFRiB8IEhFVkNfRlJBTUVfRkxBR19MT05HX1JF RikpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgaWYgKHJlZiA9PSBwaWMpIHsK LSAgICAgICAgICAgIGVyciA9IHZrX2hldmNfZmlsbF9waWN0KGF2Y3R4LCBOVUxMLCAmdnAtPnJl Zl9zbG90LCAmdnAtPnJlZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZo cC0+dmtoMjY1X3JlZiwgJmhwLT5oMjY1X3JlZiwgcGljLCAxLCBpKTsKLSAgICAgICAgICAgIGlm IChlcnIgPCAwKQotICAgICAgICAgICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICAgICAgICAgIGNv bnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgZXJyID0gdmtfaGV2Y19maWxsX3BpY3QoYXZj dHgsICZocC0+cmVmX3NyY1tpZHhdLCAmdnAtPnJlZl9zbG90c1tpZHhdLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAmdnAtPnJlZnNbaWR4XSwgJmhwLT52a2gyNjVfcmVmc1tpZHhd LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaHAtPmgyNjVfcmVmc1tpZHhdLCAo SEVWQ0ZyYW1lICopcmVmLCAwLCBpKTsKLSAgICAgICAgaWYgKGVyciA8IDApCi0gICAgICAgICAg ICByZXR1cm4gZXJyOwotCi0gICAgICAgIG5iX3JlZnMrKzsKLSAgICB9Ci0KLSAgICBtZW1zZXQo aHAtPmgyNjVwaWMuUmVmUGljU2V0U3RDdXJyQmVmb3JlLCAweGZmLCA4KTsKLSAgICBmb3IgKGlu dCBpID0gMDsgaSA8IGgtPnJwc1tTVF9DVVJSX0JFRl0ubmJfcmVmczsgaSsrKSB7Ci0gICAgICAg IEhFVkNGcmFtZSAqZnJhbWUgPSBoLT5ycHNbU1RfQ1VSUl9CRUZdLnJlZltpXTsKLSAgICAgICAg Zm9yIChpbnQgaiA9IDA7IGogPCBGRl9BUlJBWV9FTEVNUyhsLT5EUEIpOyBqKyspIHsKLSAgICAg ICAgICAgIGNvbnN0IEhFVkNGcmFtZSAqcmVmID0gJmwtPkRQQltqXTsKLSAgICAgICAgICAgIGlm IChyZWYgPT0gZnJhbWUpIHsKLSAgICAgICAgICAgICAgICBocC0+aDI2NXBpYy5SZWZQaWNTZXRT dEN1cnJCZWZvcmVbaV0gPSBqOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg fQotICAgICAgICB9Ci0gICAgfQotICAgIG1lbXNldChocC0+aDI2NXBpYy5SZWZQaWNTZXRTdEN1 cnJBZnRlciwgMHhmZiwgOCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBoLT5ycHNbU1RfQ1VS Ul9BRlRdLm5iX3JlZnM7IGkrKykgewotICAgICAgICBIRVZDRnJhbWUgKmZyYW1lID0gaC0+cnBz W1NUX0NVUlJfQUZUXS5yZWZbaV07Ci0gICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgRkZfQVJS QVlfRUxFTVMobC0+RFBCKTsgaisrKSB7Ci0gICAgICAgICAgICBjb25zdCBIRVZDRnJhbWUgKnJl ZiA9ICZsLT5EUEJbal07Ci0gICAgICAgICAgICBpZiAocmVmID09IGZyYW1lKSB7Ci0gICAgICAg ICAgICAgICAgaHAtPmgyNjVwaWMuUmVmUGljU2V0U3RDdXJyQWZ0ZXJbaV0gPSBqOwotICAgICAg ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIG1l bXNldChocC0+aDI2NXBpYy5SZWZQaWNTZXRMdEN1cnIsIDB4ZmYsIDgpOwotICAgIGZvciAoaW50 IGkgPSAwOyBpIDwgaC0+cnBzW0xUX0NVUlJdLm5iX3JlZnM7IGkrKykgewotICAgICAgICBIRVZD RnJhbWUgKmZyYW1lID0gaC0+cnBzW0xUX0NVUlJdLnJlZltpXTsKLSAgICAgICAgZm9yIChpbnQg aiA9IDA7IGogPCBGRl9BUlJBWV9FTEVNUyhsLT5EUEIpOyBqKyspIHsKLSAgICAgICAgICAgIGNv bnN0IEhFVkNGcmFtZSAqcmVmID0gJmwtPkRQQltqXTsKLSAgICAgICAgICAgIGlmIChyZWYgPT0g ZnJhbWUpIHsKLSAgICAgICAgICAgICAgICBocC0+aDI2NXBpYy5SZWZQaWNTZXRMdEN1cnJbaV0g PSBqOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g ICAgfQotCi0gICAgaHAtPmgyNjVfcGljX2luZm8gPSAoVmtWaWRlb0RlY29kZUgyNjVQaWN0dXJl SW5mb0tIUikgewotICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9WSURFT19ERUNP REVfSDI2NV9QSUNUVVJFX0lORk9fS0hSLAotICAgICAgICAucFN0ZFBpY3R1cmVJbmZvID0gJmhw LT5oMjY1cGljLAotICAgICAgICAuc2xpY2VTZWdtZW50Q291bnQgPSAwLAotICAgIH07Ci0KLSAg ICB2cC0+ZGVjb2RlX2luZm8gPSAoVmtWaWRlb0RlY29kZUluZm9LSFIpIHsKLSAgICAgICAgLnNU eXBlID0gVktfU1RSVUNUVVJFX1RZUEVfVklERU9fREVDT0RFX0lORk9fS0hSLAotICAgICAgICAu cE5leHQgPSAmaHAtPmgyNjVfcGljX2luZm8sCi0gICAgICAgIC5mbGFncyA9IDB4MCwKLSAgICAg ICAgLnBTZXR1cFJlZmVyZW5jZVNsb3QgPSAmdnAtPnJlZl9zbG90LAotICAgICAgICAucmVmZXJl bmNlU2xvdENvdW50ID0gbmJfcmVmcywKLSAgICAgICAgLnBSZWZlcmVuY2VTbG90cyA9IHZwLT5y ZWZfc2xvdHMsCi0gICAgICAgIC5kc3RQaWN0dXJlUmVzb3VyY2UgPSAoVmtWaWRlb1BpY3R1cmVS ZXNvdXJjZUluZm9LSFIpIHsKLSAgICAgICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBF X1ZJREVPX1BJQ1RVUkVfUkVTT1VSQ0VfSU5GT19LSFIsCi0gICAgICAgICAgICAuY29kZWRPZmZz ZXQgPSAoVmtPZmZzZXQyRCl7IDAsIDAgfSwKLSAgICAgICAgICAgIC5jb2RlZEV4dGVudCA9IChW a0V4dGVudDJEKXsgcGljLT5mLT53aWR0aCwgcGljLT5mLT5oZWlnaHQgfSwKLSAgICAgICAgICAg IC5iYXNlQXJyYXlMYXllciA9IDAsCi0gICAgICAgICAgICAuaW1hZ2VWaWV3QmluZGluZyA9IHZw LT52aWV3Lm91dFswXSwKLSAgICAgICAgfSwKLSAgICB9OwotCi0gICAgcmV0dXJuIDA7Ci19Ci0K LXN0YXRpYyBpbnQgdmtfaGV2Y19kZWNvZGVfc2xpY2UoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICAqZGF0YSwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgICAgICAgIHNpemUpCi17Ci0g ICAgY29uc3QgSEVWQ0NvbnRleHQgKmggPSBhdmN0eC0+cHJpdl9kYXRhOwotICAgIEhFVkNWdWxr YW5EZWNvZGVQaWN0dXJlICpocCA9IGgtPmN1cl9mcmFtZS0+aHdhY2NlbF9waWN0dXJlX3ByaXZh dGU7Ci0gICAgRkZWdWxrYW5EZWNvZGVQaWN0dXJlICp2cCA9ICZocC0+dnA7Ci0KLSAgICBpbnQg ZXJyID0gZmZfdmtfZGVjb2RlX2FkZF9zbGljZShhdmN0eCwgdnAsIGRhdGEsIHNpemUsIDEsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmhwLT5oMjY1X3BpY19pbmZvLnNs aWNlU2VnbWVudENvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZo cC0+aDI2NV9waWNfaW5mby5wU2xpY2VTZWdtZW50T2Zmc2V0cyk7Ci0gICAgaWYgKGVyciA8IDAp Ci0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB2 a19oZXZjX2VuZF9mcmFtZShBVkNvZGVjQ29udGV4dCAqYXZjdHgpCi17Ci0gICAgY29uc3QgSEVW Q0NvbnRleHQgKmggPSBhdmN0eC0+cHJpdl9kYXRhOwotICAgIEZGVnVsa2FuRGVjb2RlQ29udGV4 dCAqZGVjID0gYXZjdHgtPmludGVybmFsLT5od2FjY2VsX3ByaXZfZGF0YTsKLSAgICBGRlZ1bGth bkRlY29kZVNoYXJlZCAqY3R4ID0gZGVjLT5zaGFyZWRfY3R4OwotCi0gICAgSEVWQ0ZyYW1lICpw aWMgPSBoLT5jdXJfZnJhbWU7Ci0gICAgSEVWQ1Z1bGthbkRlY29kZVBpY3R1cmUgKmhwID0gcGlj LT5od2FjY2VsX3BpY3R1cmVfcHJpdmF0ZTsKLSAgICBGRlZ1bGthbkRlY29kZVBpY3R1cmUgKnZw ID0gJmhwLT52cDsKLSAgICBGRlZ1bGthbkRlY29kZVBpY3R1cmUgKnJ2cFtIRVZDX01BWF9SRUZT XSA9IHsgMCB9OwotICAgIEFWRnJhbWUgKnJhdltIRVZDX01BWF9SRUZTXSA9IHsgMCB9OwotICAg IGludCBlcnI7Ci0KLSAgICBjb25zdCBIRVZDUFBTICpwcHMgPSBoLT5wcHM7Ci0gICAgY29uc3Qg SEVWQ1NQUyAqc3BzID0gcHBzLT5zcHM7Ci0KLSNpZmRlZiBWS19LSFJfdmlkZW9fbWFpbnRlbmFu Y2UyCi0gICAgSEVWQ0hlYWRlclBQUyB2a3Bwc19wOwotICAgIFN0ZFZpZGVvSDI2NVBpY3R1cmVQ YXJhbWV0ZXJTZXQgdmtwcHM7Ci0gICAgSEVWQ0hlYWRlclNQUyB2a3Nwc19wOwotICAgIFN0ZFZp ZGVvSDI2NVNlcXVlbmNlUGFyYW1ldGVyU2V0IHZrc3BzOwotICAgIEhFVkNIZWFkZXJWUFNTZXQg dmt2cHNfcHNbSEVWQ19NQVhfU1VCX0xBWUVSU107Ci0gICAgSEVWQ0hlYWRlclZQUyB2a3Zwc19w OwotICAgIFN0ZFZpZGVvSDI2NVZpZGVvUGFyYW1ldGVyU2V0IHZrdnBzOwotICAgIFZrVmlkZW9E ZWNvZGVIMjY1SW5saW5lU2Vzc2lvblBhcmFtZXRlcnNJbmZvS0hSIGgyNjVfcGFyYW1zOwotCi0g ICAgaWYgKGN0eC0+cy5leHRlbnNpb25zICYgRkZfVktfRVhUX1ZJREVPX01BSU5URU5BTkNFXzIp IHsKLSAgICAgICAgc2V0X3BwcyhwcHMsIHNwcywgJnZrcHBzX3Auc2NhbGluZywgJnZrcHBzLCAm dmtwcHNfcC5wYWwpOwotICAgICAgICBzZXRfc3BzKHNwcywgcHBzLT5zcHNfaWQsICZ2a3Nwc19w LnNjYWxpbmcsICZ2a3Nwc19wLnZ1aV9oZWFkZXIsCi0gICAgICAgICAgICAgICAgJnZrc3BzX3Au dnVpLCAmdmtzcHMsIHZrc3BzX3AubmFsX2hkciwKLSAgICAgICAgICAgICAgICB2a3Nwc19wLnZj bF9oZHIsICZ2a3Nwc19wLnB0bCwgJnZrc3BzX3AuZHBibSwKLSAgICAgICAgICAgICAgICAmdmtz cHNfcC5wYWwsIHZrc3BzX3Auc3RyLCAmdmtzcHNfcC5sdHIpOwotCi0gICAgICAgIHZrdnBzX3Au c2xzID0gdmt2cHNfcHM7Ci0gICAgICAgIHNldF92cHMoc3BzLT52cHMsICZ2a3ZwcywgJnZrdnBz X3AucHRsLCAmdmt2cHNfcC5kcGJtLAotICAgICAgICAgICAgICAgIHZrdnBzX3AuaGRyLCB2a3Zw c19wLnNscyk7Ci0KLSAgICAgICAgaDI2NV9wYXJhbXMgPSAoVmtWaWRlb0RlY29kZUgyNjVJbmxp bmVTZXNzaW9uUGFyYW1ldGVyc0luZm9LSFIpIHsKLSAgICAgICAgICAgIC5zVHlwZSA9IFZLX1NU UlVDVFVSRV9UWVBFX1ZJREVPX0RFQ09ERV9IMjY1X0lOTElORV9TRVNTSU9OX1BBUkFNRVRFUlNf SU5GT19LSFIsCi0gICAgICAgICAgICAucFN0ZFNQUyA9ICZ2a3NwcywKLSAgICAgICAgICAgIC5w U3RkUFBTID0gJnZrcHBzLAotICAgICAgICAgICAgLnBTdGRWUFMgPSAmdmt2cHMsCi0gICAgICAg IH07Ci0gICAgICAgIGhwLT5oMjY1X3BpY19pbmZvLnBOZXh0ID0gJmgyNjVfcGFyYW1zOwotICAg IH0KLSNlbmRpZgotCi0gICAgaWYgKCFocC0+aDI2NV9waWNfaW5mby5zbGljZVNlZ21lbnRDb3Vu dCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoIWRlYy0+c2Vzc2lvbl9wYXJhbXMgJiYK LSAgICAgICAgIShjdHgtPnMuZXh0ZW5zaW9ucyAmIEZGX1ZLX0VYVF9WSURFT19NQUlOVEVOQU5D RV8yKSkgewotICAgICAgICBpZiAoIXBwcykgewotICAgICAgICAgICAgdW5zaWduZWQgaW50IHBw c19pZCA9IGgtPnNoLnBwc19pZDsKLSAgICAgICAgICAgIGlmIChwcHNfaWQgPCBIRVZDX01BWF9Q UFNfQ09VTlQgJiYgaC0+cHMucHBzX2xpc3RbcHBzX2lkXSAhPSBOVUxMKQotICAgICAgICAgICAg ICAgIHBwcyA9IGgtPnBzLnBwc19saXN0W3Bwc19pZF07Ci0gICAgICAgIH0KLQotICAgICAgICBp ZiAoIXBwcykgewotICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsCi0gICAg ICAgICAgICAgICAgICAgIkVuY291bnRlcmVkIGZyYW1lIHdpdGhvdXQgYSB2YWxpZCBhY3RpdmUg UFBTIHJlZmVyZW5jZS5cbiIpOwotICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERB VEE7Ci0gICAgICAgIH0KLQotICAgICAgICBlcnIgPSB2a19oZXZjX2NyZWF0ZV9wYXJhbXMoYXZj dHgsICZkZWMtPnNlc3Npb25fcGFyYW1zKTsKLSAgICAgICAgaWYgKGVyciA8IDApCi0gICAgICAg ICAgICByZXR1cm4gZXJyOwotCi0gICAgICAgIGhwLT5oMjY1cGljLnNwc192aWRlb19wYXJhbWV0 ZXJfc2V0X2lkID0gc3BzLT52cHNfaWQ7Ci0gICAgICAgIGhwLT5oMjY1cGljLnBwc19zZXFfcGFy YW1ldGVyX3NldF9pZCA9IHBwcy0+c3BzX2lkOwotICAgICAgICBocC0+aDI2NXBpYy5wcHNfcGlj X3BhcmFtZXRlcl9zZXRfaWQgPSBwcHMtPnBwc19pZDsKLSAgICB9Ci0KLSAgICBmb3IgKGludCBp ID0gMDsgaSA8IHZwLT5kZWNvZGVfaW5mby5yZWZlcmVuY2VTbG90Q291bnQ7IGkrKykgewotICAg ICAgICBIRVZDVnVsa2FuRGVjb2RlUGljdHVyZSAqcmZocCA9IGhwLT5yZWZfc3JjW2ldLT5od2Fj Y2VsX3BpY3R1cmVfcHJpdmF0ZTsKLSAgICAgICAgcmF2W2ldID0gaHAtPnJlZl9zcmNbaV0tPmY7 Ci0gICAgICAgIHJ2cFtpXSA9ICZyZmhwLT52cDsKLSAgICB9Ci0KLSAgICBhdl9sb2coYXZjdHgs IEFWX0xPR19ERUJVRywgIkRlY29kaW5nIGZyYW1lLCAlIlNJWkVfU1BFQ0lGSUVSIiBieXRlcywg JWkgc2xpY2VzXG4iLAotICAgICAgICAgICB2cC0+c2xpY2VzX3NpemUsIGhwLT5oMjY1X3BpY19p bmZvLnNsaWNlU2VnbWVudENvdW50KTsKLQotICAgIHJldHVybiBmZl92a19kZWNvZGVfZnJhbWUo YXZjdHgsIHBpYy0+ZiwgdnAsIHJhdiwgcnZwKTsKLX0KLQotc3RhdGljIHZvaWQgdmtfaGV2Y19m cmVlX2ZyYW1lX3ByaXYoQVZSZWZTdHJ1Y3RPcGFxdWUgX2h3Y3R4LCB2b2lkICpkYXRhKQotewot ICAgIEFWSFdEZXZpY2VDb250ZXh0ICpod2N0eCA9IF9od2N0eC5uYzsKLSAgICBIRVZDVnVsa2Fu RGVjb2RlUGljdHVyZSAqaHAgPSBkYXRhOwotCi0gICAgLyogRnJlZSBmcmFtZSByZXNvdXJjZXMg Ki8KLSAgICBmZl92a19kZWNvZGVfZnJlZV9mcmFtZShod2N0eCwgJmhwLT52cCk7Ci19Ci0KLWNv bnN0IEZGSFdBY2NlbCBmZl9oZXZjX3Z1bGthbl9od2FjY2VsID0gewotICAgIC5wLm5hbWUgICAg ICAgICAgICAgICAgPSAiaGV2Y192dWxrYW4iLAotICAgIC5wLnR5cGUgICAgICAgICAgICAgICAg PSBBVk1FRElBX1RZUEVfVklERU8sCi0gICAgLnAuaWQgICAgICAgICAgICAgICAgICA9IEFWX0NP REVDX0lEX0hFVkMsCi0gICAgLnAucGl4X2ZtdCAgICAgICAgICAgICA9IEFWX1BJWF9GTVRfVlVM S0FOLAotICAgIC5zdGFydF9mcmFtZSAgICAgICAgICAgPSAmdmtfaGV2Y19zdGFydF9mcmFtZSwK LSAgICAuZGVjb2RlX3NsaWNlICAgICAgICAgID0gJnZrX2hldmNfZGVjb2RlX3NsaWNlLAotICAg IC5lbmRfZnJhbWUgICAgICAgICAgICAgPSAmdmtfaGV2Y19lbmRfZnJhbWUsCi0gICAgLmZyZWVf ZnJhbWVfcHJpdiAgICAgICA9ICZ2a19oZXZjX2ZyZWVfZnJhbWVfcHJpdiwKLSAgICAuZnJhbWVf cHJpdl9kYXRhX3NpemUgID0gc2l6ZW9mKEhFVkNWdWxrYW5EZWNvZGVQaWN0dXJlKSwKLSAgICAu aW5pdCAgICAgICAgICAgICAgICAgID0gJmZmX3ZrX2RlY29kZV9pbml0LAotICAgIC51cGRhdGVf dGhyZWFkX2NvbnRleHQgPSAmZmZfdmtfdXBkYXRlX3RocmVhZF9jb250ZXh0LAotICAgIC5kZWNv ZGVfcGFyYW1zICAgICAgICAgPSAmZmZfdmtfcGFyYW1zX2ludmFsaWRhdGUsCi0gICAgLmZsdXNo ICAgICAgICAgICAgICAgICA9ICZmZl92a19kZWNvZGVfZmx1c2gsCi0gICAgLnVuaW5pdCAgICAg ICAgICAgICAgICA9ICZmZl92a19kZWNvZGVfdW5pbml0LAotICAgIC5mcmFtZV9wYXJhbXMgICAg ICAgICAgPSAmZmZfdmtfZnJhbWVfcGFyYW1zLAotICAgIC5wcml2X2RhdGFfc2l6ZSAgICAgICAg PSBzaXplb2YoRkZWdWxrYW5EZWNvZGVDb250ZXh0KSwKLSAgICAuY2Fwc19pbnRlcm5hbCAgICAg ICAgID0gSFdBQ0NFTF9DQVBfQVNZTkNfU0FGRSwKLX07Ci0tIAoyLjQ5LjEKCgpGcm9tIDgxOTg1 MDQ1MTdmYTgwOWFkNjY2MmIyM2JkODJhYzdiMzhiN2Q1MDkgTW9uIFNlcCAxNyAwMDowMDowMCAy MDAxCkZyb206IEphbWFpa2ExIDxsdWthc3pjejE4QHdwLnBsPgpEYXRlOiBXZWQsIDMgU2VwIDIw MjUgMTM6Mzg6NTMgKzAwMDAKU3ViamVjdDogW1BBVENIIDA4NC8xMThdIENoYW5naW5nIHZ1bGth biBmaWxlIGRpcmVjdG9yeQoKLS0tCiBsaWJhdmNvZGVjL3Z1bGthbi92dWxrYW5faGV2Yy5jIHwg OTU3ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiAxIGZpbGUgY2hhbmdlZCwgOTU3 IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJhdmNvZGVjL3Z1bGthbi92dWxr YW5faGV2Yy5jCgpkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy92dWxrYW4vdnVsa2FuX2hldmMuYyBi L2xpYmF2Y29kZWMvdnVsa2FuL3Z1bGthbl9oZXZjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMC4uMTVmN2U3Yzk1MAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmF2Y29kZWMv dnVsa2FuL3Z1bGthbl9oZXZjLmMKQEAgLTAsMCArMSw5NTcgQEAKKy8qCisgKiBUaGlzIGZpbGUg aXMgcGFydCBvZiBGRm1wZWcuCisgKgorICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBv ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq CisgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg YSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25n IHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3Vu ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1B IDAyMTEwLTEzMDEgVVNBCisgKi8KKworI2luY2x1ZGUgImxpYmF2dXRpbC9tZW0uaCIKKyNpbmNs dWRlICJsaWJhdmNvZGVjL2hldmNkZWMuaCIKKyNpbmNsdWRlICJsaWJhdmNvZGVjL2hldmNfZGF0 YS5oIgorI2luY2x1ZGUgImxpYmF2Y29kZWMvaGV2Y19wcy5oIgorCisjaW5jbHVkZSAidnVsa2Fu X2RlY29kZS5oIgorCitjb25zdCBGRlZ1bGthbkRlY29kZURlc2NyaXB0b3IgZmZfdmtfZGVjX2hl dmNfZGVzYyA9IHsKKyAgICAuY29kZWNfaWQgICAgICAgICA9IEFWX0NPREVDX0lEX0hFVkMsCisg ICAgLmRlY29kZV9leHRlbnNpb24gPSBGRl9WS19FWFRfVklERU9fREVDT0RFX0gyNjUsCisgICAg LnF1ZXVlX2ZsYWdzICAgICAgPSBWS19RVUVVRV9WSURFT19ERUNPREVfQklUX0tIUiwKKyAgICAu ZGVjb2RlX29wICAgICAgICA9IFZLX1ZJREVPX0NPREVDX09QRVJBVElPTl9ERUNPREVfSDI2NV9C SVRfS0hSLAorICAgIC5leHRfcHJvcHMgPSB7CisgICAgICAgIC5leHRlbnNpb25OYW1lID0gVktf U1REX1ZVTEtBTl9WSURFT19DT0RFQ19IMjY1X0RFQ09ERV9FWFRFTlNJT05fTkFNRSwKKyAgICAg ICAgLnNwZWNWZXJzaW9uICAgPSBWS19TVERfVlVMS0FOX1ZJREVPX0NPREVDX0gyNjVfREVDT0RF X1NQRUNfVkVSU0lPTiwKKyAgICB9LAorfTsKKwordHlwZWRlZiBzdHJ1Y3QgSEVWQ0hlYWRlclNQ UyB7CisgICAgU3RkVmlkZW9IMjY1U2NhbGluZ0xpc3RzIHNjYWxpbmc7CisgICAgU3RkVmlkZW9I MjY1SHJkUGFyYW1ldGVycyB2dWlfaGVhZGVyOworICAgIFN0ZFZpZGVvSDI2NVNlcXVlbmNlUGFy YW1ldGVyU2V0VnVpIHZ1aTsKKyAgICBTdGRWaWRlb0gyNjVQcm9maWxlVGllckxldmVsIHB0bDsK KyAgICBTdGRWaWRlb0gyNjVEZWNQaWNCdWZNZ3IgZHBibTsKKyAgICBTdGRWaWRlb0gyNjVQcmVk aWN0b3JQYWxldHRlRW50cmllcyBwYWw7CisgICAgU3RkVmlkZW9IMjY1U3ViTGF5ZXJIcmRQYXJh bWV0ZXJzIG5hbF9oZHJbSEVWQ19NQVhfU1VCX0xBWUVSU107CisgICAgU3RkVmlkZW9IMjY1U3Vi TGF5ZXJIcmRQYXJhbWV0ZXJzIHZjbF9oZHJbSEVWQ19NQVhfU1VCX0xBWUVSU107CisgICAgU3Rk VmlkZW9IMjY1U2hvcnRUZXJtUmVmUGljU2V0IHN0cltIRVZDX01BWF9TSE9SVF9URVJNX1JFRl9Q SUNfU0VUU107CisgICAgU3RkVmlkZW9IMjY1TG9uZ1Rlcm1SZWZQaWNzU3BzIGx0cjsKK30gSEVW Q0hlYWRlclNQUzsKKwordHlwZWRlZiBzdHJ1Y3QgSEVWQ0hlYWRlclBQUyB7CisgICAgU3RkVmlk ZW9IMjY1U2NhbGluZ0xpc3RzIHNjYWxpbmc7CisgICAgU3RkVmlkZW9IMjY1UHJlZGljdG9yUGFs ZXR0ZUVudHJpZXMgcGFsOworfSBIRVZDSGVhZGVyUFBTOworCit0eXBlZGVmIHN0cnVjdCBIRVZD SGVhZGVyVlBTU2V0IHsKKyAgICBTdGRWaWRlb0gyNjVTdWJMYXllckhyZFBhcmFtZXRlcnMgbmFs X2hkcltIRVZDX01BWF9TVUJfTEFZRVJTXTsKKyAgICBTdGRWaWRlb0gyNjVTdWJMYXllckhyZFBh cmFtZXRlcnMgdmNsX2hkcltIRVZDX01BWF9TVUJfTEFZRVJTXTsKK30gSEVWQ0hlYWRlclZQU1Nl dDsKKwordHlwZWRlZiBzdHJ1Y3QgSEVWQ0hlYWRlclZQUyB7CisgICAgU3RkVmlkZW9IMjY1UHJv ZmlsZVRpZXJMZXZlbCBwdGw7CisgICAgU3RkVmlkZW9IMjY1RGVjUGljQnVmTWdyIGRwYm07Cisg ICAgU3RkVmlkZW9IMjY1SHJkUGFyYW1ldGVycyBoZHJbSEVWQ19NQVhfTEFZRVJfU0VUU107Cisg ICAgSEVWQ0hlYWRlclZQU1NldCAqc2xzOworfSBIRVZDSGVhZGVyVlBTOworCit0eXBlZGVmIHN0 cnVjdCBIRVZDSGVhZGVyU2V0IHsKKyAgICBTdGRWaWRlb0gyNjVTZXF1ZW5jZVBhcmFtZXRlclNl dCBzcHNbSEVWQ19NQVhfU1BTX0NPVU5UXTsKKyAgICBIRVZDSGVhZGVyU1BTIGhzcHNbSEVWQ19N QVhfU1BTX0NPVU5UXTsKKworICAgIFN0ZFZpZGVvSDI2NVBpY3R1cmVQYXJhbWV0ZXJTZXQgcHBz W0hFVkNfTUFYX1BQU19DT1VOVF07CisgICAgSEVWQ0hlYWRlclBQUyBocHBzW0hFVkNfTUFYX1BQ U19DT1VOVF07CisKKyAgICBTdGRWaWRlb0gyNjVWaWRlb1BhcmFtZXRlclNldCB2cHNbSEVWQ19N QVhfUFBTX0NPVU5UXTsKKyAgICBIRVZDSGVhZGVyVlBTICpodnBzOworfSBIRVZDSGVhZGVyU2V0 OworCitzdGF0aWMgaW50IGFsbG9jX2hldmNfaGVhZGVyX3N0cnVjdHMoRkZWdWxrYW5EZWNvZGVD b250ZXh0ICpzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBuYl92 cHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50IHZwc19s aXN0X2lkeFtIRVZDX01BWF9WUFNfQ09VTlRdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IEhFVkNWUFMgKiBjb25zdCB2cHNfbGlzdFtIRVZDX01BWF9WUFNfQ09V TlRdKQoreworICAgIHVpbnQ4X3QgKmRhdGFfcHRyOworICAgIEhFVkNIZWFkZXJTZXQgKmhkcjsK KworICAgIHNpemVfdCBidWZfc2l6ZSA9IHNpemVvZihIRVZDSGVhZGVyU2V0KSArIG5iX3Zwcypz aXplb2YoSEVWQ0hlYWRlclZQUyk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuYl92cHM7IGkr KykgeworICAgICAgICBjb25zdCBIRVZDVlBTICp2cHMgPSB2cHNfbGlzdFt2cHNfbGlzdF9pZHhb aV1dOworICAgICAgICBidWZfc2l6ZSArPSBzaXplb2YoSEVWQ0hlYWRlclZQU1NldCkqdnBzLT52 cHNfbnVtX2hyZF9wYXJhbWV0ZXJzOworICAgIH0KKworICAgIGlmIChidWZfc2l6ZSA+IHMtPmhl dmNfaGVhZGVyc19zaXplKSB7CisgICAgICAgIGF2X2ZyZWVwKCZzLT5oZXZjX2hlYWRlcnMpOwor ICAgICAgICBzLT5oZXZjX2hlYWRlcnNfc2l6ZSA9IDA7CisgICAgICAgIHMtPmhldmNfaGVhZGVy cyA9IGF2X21hbGxvY3ooYnVmX3NpemUpOworICAgICAgICBpZiAoIXMtPmhldmNfaGVhZGVycykK KyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7CisgICAgICAgIHMtPmhldmNfaGVh ZGVyc19zaXplID0gYnVmX3NpemU7CisgICAgfQorCisgICAgLyogU2V0dXAgc3RydWN0IHBvaW50 ZXJzICovCisgICAgaGRyID0gcy0+aGV2Y19oZWFkZXJzOworICAgIGRhdGFfcHRyID0gKHVpbnQ4 X3QgKiloZHI7CisgICAgaGRyLT5odnBzID0gKEhFVkNIZWFkZXJWUFMgKikoZGF0YV9wdHIgKyBz aXplb2YoSEVWQ0hlYWRlclNldCkpOworICAgIGRhdGFfcHRyICs9IHNpemVvZihIRVZDSGVhZGVy U2V0KSArIG5iX3ZwcypzaXplb2YoSEVWQ0hlYWRlclZQUyk7CisgICAgZm9yIChpbnQgaSA9IDA7 IGkgPCBuYl92cHM7IGkrKykgeworICAgICAgICBjb25zdCBIRVZDVlBTICp2cHMgPSB2cHNfbGlz dFt2cHNfbGlzdF9pZHhbaV1dOworICAgICAgICBoZHItPmh2cHNbaV0uc2xzID0gKEhFVkNIZWFk ZXJWUFNTZXQgKilkYXRhX3B0cjsKKyAgICAgICAgZGF0YV9wdHIgKz0gc2l6ZW9mKEhFVkNIZWFk ZXJWUFNTZXQpKnZwcy0+dnBzX251bV9ocmRfcGFyYW1ldGVyczsKKyAgICB9CisKKyAgICByZXR1 cm4gMDsKK30KKwordHlwZWRlZiBzdHJ1Y3QgSEVWQ1Z1bGthbkRlY29kZVBpY3R1cmUgeworICAg IEZGVnVsa2FuRGVjb2RlUGljdHVyZSAgICAgICAgICAgdnA7CisKKyAgICAvKiBDdXJyZW50IHBp Y3R1cmUgKi8KKyAgICBTdGRWaWRlb0RlY29kZUgyNjVSZWZlcmVuY2VJbmZvIGgyNjVfcmVmOwor ICAgIFZrVmlkZW9EZWNvZGVIMjY1RHBiU2xvdEluZm9LSFIgdmtoMjY1X3JlZjsKKworICAgIC8q IFBpY3R1cmUgcmVmcyAqLworICAgIEhFVkNGcmFtZSAgICAgICAgICAgICAgICAgICAgICAqcmVm X3NyYyAgICBbSEVWQ19NQVhfUkVGU107CisgICAgU3RkVmlkZW9EZWNvZGVIMjY1UmVmZXJlbmNl SW5mbyBoMjY1X3JlZnMgIFtIRVZDX01BWF9SRUZTXTsKKyAgICBWa1ZpZGVvRGVjb2RlSDI2NURw YlNsb3RJbmZvS0hSIHZraDI2NV9yZWZzW0hFVkNfTUFYX1JFRlNdOworCisgICAgLyogQ3VycmVu dCBwaWN0dXJlIChjb250ZC4pICovCisgICAgU3RkVmlkZW9EZWNvZGVIMjY1UGljdHVyZUluZm8g ICBoMjY1cGljOworICAgIFZrVmlkZW9EZWNvZGVIMjY1UGljdHVyZUluZm9LSFIgaDI2NV9waWNf aW5mbzsKK30gSEVWQ1Z1bGthbkRlY29kZVBpY3R1cmU7CisKK3N0YXRpYyBpbnQgdmtfaGV2Y19m aWxsX3BpY3QoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LCBIRVZDRnJhbWUgKipyZWZfc3JjLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBWa1ZpZGVvUmVmZXJlbmNlU2xvdEluZm9LSFIgKnJl Zl9zbG90LCAgICAgICAvKiBNYWluIHN0cnVjdHVyZSAqLworICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBWa1ZpZGVvUGljdHVyZVJlc291cmNlSW5mb0tIUiAqcmVmLCAgICAgICAgICAvKiBH b2VzIGluIF4gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmtWaWRlb0RlY29kZUgy NjVEcGJTbG90SW5mb0tIUiAqdmtoMjY1X3JlZiwgLyogR29lcyBpbiBeICovCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFN0ZFZpZGVvRGVjb2RlSDI2NVJlZmVyZW5jZUluZm8gKmgyNjVf cmVmLCAgIC8qIEdvZXMgaW4gXiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIRVZD RnJhbWUgKnBpYywgaW50IGlzX2N1cnJlbnQsIGludCBwaWNfaWQpCit7CisgICAgRkZWdWxrYW5E ZWNvZGVDb250ZXh0ICpkZWMgPSBhdmN0eC0+aW50ZXJuYWwtPmh3YWNjZWxfcHJpdl9kYXRhOwor ICAgIEZGVnVsa2FuRGVjb2RlU2hhcmVkICpjdHggPSBkZWMtPnNoYXJlZF9jdHg7CisgICAgSEVW Q1Z1bGthbkRlY29kZVBpY3R1cmUgKmhwID0gcGljLT5od2FjY2VsX3BpY3R1cmVfcHJpdmF0ZTsK KyAgICBGRlZ1bGthbkRlY29kZVBpY3R1cmUgKnZrcGljID0gJmhwLT52cDsKKworICAgIGludCBl cnIgPSBmZl92a19kZWNvZGVfcHJlcGFyZV9mcmFtZShkZWMsIHBpYy0+ZiwgdmtwaWMsIGlzX2N1 cnJlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYy0+ZGVk aWNhdGVkX2RwYik7CisgICAgaWYgKGVyciA8IDApCisgICAgICAgIHJldHVybiBlcnI7CisKKyAg ICAqaDI2NV9yZWYgPSAoU3RkVmlkZW9EZWNvZGVIMjY1UmVmZXJlbmNlSW5mbykgeworICAgICAg ICAuZmxhZ3MgPSAoU3RkVmlkZW9EZWNvZGVIMjY1UmVmZXJlbmNlSW5mb0ZsYWdzKSB7CisgICAg ICAgICAgICAudXNlZF9mb3JfbG9uZ190ZXJtX3JlZmVyZW5jZSA9IHBpYy0+ZmxhZ3MgJiBIRVZD X0ZSQU1FX0ZMQUdfTE9OR19SRUYsCisgICAgICAgICAgICAudW51c2VkX2Zvcl9yZWZlcmVuY2Ug PSAwLAorICAgICAgICB9LAorICAgICAgICAuUGljT3JkZXJDbnRWYWwgPSBwaWMtPnBvYywKKyAg ICB9OworCisgICAgKnZraDI2NV9yZWYgPSAoVmtWaWRlb0RlY29kZUgyNjVEcGJTbG90SW5mb0tI UikgeworICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9WSURFT19ERUNPREVfSDI2 NV9EUEJfU0xPVF9JTkZPX0tIUiwKKyAgICAgICAgLnBTdGRSZWZlcmVuY2VJbmZvID0gaDI2NV9y ZWYsCisgICAgfTsKKworICAgICpyZWYgPSAoVmtWaWRlb1BpY3R1cmVSZXNvdXJjZUluZm9LSFIp IHsKKyAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfVklERU9fUElDVFVSRV9SRVNP VVJDRV9JTkZPX0tIUiwKKyAgICAgICAgLmNvZGVkT2Zmc2V0ID0gKFZrT2Zmc2V0MkQpeyAwLCAw IH0sCisgICAgICAgIC5jb2RlZEV4dGVudCA9IChWa0V4dGVudDJEKXsgcGljLT5mLT53aWR0aCwg cGljLT5mLT5oZWlnaHQgfSwKKyAgICAgICAgLmJhc2VBcnJheUxheWVyID0gY3R4LT5jb21tb24u bGF5ZXJlZF9kcGIgPyBwaWNfaWQgOiAwLAorICAgICAgICAuaW1hZ2VWaWV3QmluZGluZyA9IHZr cGljLT52aWV3LnJlZlswXSwKKyAgICB9OworCisgICAgKnJlZl9zbG90ID0gKFZrVmlkZW9SZWZl cmVuY2VTbG90SW5mb0tIUikgeworICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9W SURFT19SRUZFUkVOQ0VfU0xPVF9JTkZPX0tIUiwKKyAgICAgICAgLnBOZXh0ID0gdmtoMjY1X3Jl ZiwKKyAgICAgICAgLnNsb3RJbmRleCA9IHBpY19pZCwKKyAgICAgICAgLnBQaWN0dXJlUmVzb3Vy Y2UgPSByZWYsCisgICAgfTsKKworICAgIGlmIChyZWZfc3JjKQorICAgICAgICAqcmVmX3NyYyA9 IHBpYzsKKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBjb3B5X3NjYWxpbmdfbGlz dChjb25zdCBTY2FsaW5nTGlzdCAqc2wsIFN0ZFZpZGVvSDI2NVNjYWxpbmdMaXN0cyAqdmtzbCkK K3sKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IFNURF9WSURFT19IMjY1X1NDQUxJTkdfTElTVF80 WDRfTlVNX0xJU1RTOyBpKyspIHsKKyAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBTVERfVklE RU9fSDI2NV9TQ0FMSU5HX0xJU1RfNFg0X05VTV9FTEVNRU5UUzsgaisrKSB7CisgICAgICAgICAg ICB1aW50OF90IHBvcyA9IDQgKiBmZl9oZXZjX2RpYWdfc2NhbjR4NF95W2pdICsgZmZfaGV2Y19k aWFnX3NjYW40eDRfeFtqXTsKKyAgICAgICAgICAgIHZrc2wtPlNjYWxpbmdMaXN0NHg0W2ldW2pd ID0gc2wtPnNsWzBdW2ldW3Bvc107CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKGludCBp ID0gMDsgaSA8IFNURF9WSURFT19IMjY1X1NDQUxJTkdfTElTVF84WDhfTlVNX0xJU1RTOyBpKysp IHsKKyAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBTVERfVklERU9fSDI2NV9TQ0FMSU5HX0xJ U1RfOFg4X05VTV9FTEVNRU5UUzsgaisrKSB7CisgICAgICAgICAgICB1aW50OF90IHBvcyA9IDgg KiBmZl9oZXZjX2RpYWdfc2Nhbjh4OF95W2pdICsgZmZfaGV2Y19kaWFnX3NjYW44eDhfeFtqXTsK KyAgICAgICAgICAgIHZrc2wtPlNjYWxpbmdMaXN0OHg4W2ldW2pdID0gc2wtPnNsWzFdW2ldW3Bv c107CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IFNURF9WSURF T19IMjY1X1NDQUxJTkdfTElTVF8xNlgxNl9OVU1fTElTVFM7IGkrKykgeworICAgICAgICBmb3Ig KGludCBqID0gMDsgaiA8IFNURF9WSURFT19IMjY1X1NDQUxJTkdfTElTVF8xNlgxNl9OVU1fRUxF TUVOVFM7IGorKykgeworICAgICAgICAgICAgdWludDhfdCBwb3MgPSA4ICogZmZfaGV2Y19kaWFn X3NjYW44eDhfeVtqXSArIGZmX2hldmNfZGlhZ19zY2FuOHg4X3hbal07CisgICAgICAgICAgICB2 a3NsLT5TY2FsaW5nTGlzdDE2eDE2W2ldW2pdID0gc2wtPnNsWzJdW2ldW3Bvc107CisgICAgICAg IH0KKyAgICB9CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IFNURF9WSURFT19IMjY1X1NDQUxJ TkdfTElTVF8zMlgzMl9OVU1fTElTVFM7IGkrKykgeworICAgICAgICBmb3IgKGludCBqID0gMDsg aiA8IFNURF9WSURFT19IMjY1X1NDQUxJTkdfTElTVF8zMlgzMl9OVU1fRUxFTUVOVFM7IGorKykg eworICAgICAgICAgICAgdWludDhfdCBwb3MgPSA4ICogZmZfaGV2Y19kaWFnX3NjYW44eDhfeVtq XSArIGZmX2hldmNfZGlhZ19zY2FuOHg4X3hbal07CisgICAgICAgICAgICB2a3NsLT5TY2FsaW5n TGlzdDMyeDMyW2ldW2pdID0gc2wtPnNsWzNdW2kgKiAzXVtwb3NdOworICAgICAgICB9CisgICAg fQorCisgICAgbWVtY3B5KHZrc2wtPlNjYWxpbmdMaXN0RENDb2VmMTZ4MTYsIHNsLT5zbF9kY1sw XSwKKyAgICAgICAgICAgU1REX1ZJREVPX0gyNjVfU0NBTElOR19MSVNUXzE2WDE2X05VTV9MSVNU UyAqIHNpemVvZigqdmtzbC0+U2NhbGluZ0xpc3REQ0NvZWYxNngxNikpOworCisgICAgZm9yIChp bnQgaSA9IDA7IGkgPCAgU1REX1ZJREVPX0gyNjVfU0NBTElOR19MSVNUXzMyWDMyX05VTV9MSVNU UzsgaSsrKQorICAgICAgICB2a3NsLT5TY2FsaW5nTGlzdERDQ29lZjMyeDMyW2ldID0gc2wtPnNs X2RjWzFdW2kgKiAzXTsKK30KKworc3RhdGljIHZvaWQgc2V0X3Nwcyhjb25zdCBIRVZDU1BTICpz cHMsIGludCBzcHNfaWR4LAorICAgICAgICAgICAgICAgICAgICBTdGRWaWRlb0gyNjVTY2FsaW5n TGlzdHMgKnZrc3BzX3NjYWxpbmcsCisgICAgICAgICAgICAgICAgICAgIFN0ZFZpZGVvSDI2NUhy ZFBhcmFtZXRlcnMgKnZrc3BzX3Z1aV9oZWFkZXIsCisgICAgICAgICAgICAgICAgICAgIFN0ZFZp ZGVvSDI2NVNlcXVlbmNlUGFyYW1ldGVyU2V0VnVpICp2a3Nwc192dWksCisgICAgICAgICAgICAg ICAgICAgIFN0ZFZpZGVvSDI2NVNlcXVlbmNlUGFyYW1ldGVyU2V0ICp2a3NwcywKKyAgICAgICAg ICAgICAgICAgICAgU3RkVmlkZW9IMjY1U3ViTGF5ZXJIcmRQYXJhbWV0ZXJzICpzbGhkcm5hbCwK KyAgICAgICAgICAgICAgICAgICAgU3RkVmlkZW9IMjY1U3ViTGF5ZXJIcmRQYXJhbWV0ZXJzICpz bGhkcnZjbCwKKyAgICAgICAgICAgICAgICAgICAgU3RkVmlkZW9IMjY1UHJvZmlsZVRpZXJMZXZl bCAqcHRsLAorICAgICAgICAgICAgICAgICAgICBTdGRWaWRlb0gyNjVEZWNQaWNCdWZNZ3IgKmRw Ym0sCisgICAgICAgICAgICAgICAgICAgIFN0ZFZpZGVvSDI2NVByZWRpY3RvclBhbGV0dGVFbnRy aWVzICpwYWwsCisgICAgICAgICAgICAgICAgICAgIFN0ZFZpZGVvSDI2NVNob3J0VGVybVJlZlBp Y1NldCAqc3RyLAorICAgICAgICAgICAgICAgICAgICBTdGRWaWRlb0gyNjVMb25nVGVybVJlZlBp Y3NTcHMgKmx0cikKK3sKKyAgICBjb3B5X3NjYWxpbmdfbGlzdCgmc3BzLT5zY2FsaW5nX2xpc3Qs IHZrc3BzX3NjYWxpbmcpOworCisgICAgKnZrc3BzX3Z1aV9oZWFkZXIgPSAoU3RkVmlkZW9IMjY1 SHJkUGFyYW1ldGVycykgeworICAgICAgICAuZmxhZ3MgPSAoU3RkVmlkZW9IMjY1SHJkRmxhZ3Mp IHsKKyAgICAgICAgICAgIC5uYWxfaHJkX3BhcmFtZXRlcnNfcHJlc2VudF9mbGFnID0gc3BzLT5o ZHIubmFsX2hyZF9wYXJhbWV0ZXJzX3ByZXNlbnRfZmxhZywKKyAgICAgICAgICAgIC52Y2xfaHJk X3BhcmFtZXRlcnNfcHJlc2VudF9mbGFnID0gc3BzLT5oZHIudmNsX2hyZF9wYXJhbWV0ZXJzX3By ZXNlbnRfZmxhZywKKyAgICAgICAgICAgIC5zdWJfcGljX2hyZF9wYXJhbXNfcHJlc2VudF9mbGFn ID0gc3BzLT5oZHIuc3ViX3BpY19ocmRfcGFyYW1zX3ByZXNlbnRfZmxhZywKKyAgICAgICAgICAg IC5zdWJfcGljX2NwYl9wYXJhbXNfaW5fcGljX3RpbWluZ19zZWlfZmxhZyA9IHNwcy0+aGRyLnN1 Yl9waWNfY3BiX3BhcmFtc19pbl9waWNfdGltaW5nX3NlaV9mbGFnLAorICAgICAgICAgICAgLmZp eGVkX3BpY19yYXRlX2dlbmVyYWxfZmxhZyA9IHNwcy0+aGRyLmZsYWdzLmZpeGVkX3BpY19yYXRl X2dlbmVyYWxfZmxhZywKKyAgICAgICAgICAgIC5maXhlZF9waWNfcmF0ZV93aXRoaW5fY3ZzX2Zs YWcgPSBzcHMtPmhkci5mbGFncy5maXhlZF9waWNfcmF0ZV93aXRoaW5fY3ZzX2ZsYWcsCisgICAg ICAgICAgICAubG93X2RlbGF5X2hyZF9mbGFnID0gc3BzLT5oZHIuZmxhZ3MubG93X2RlbGF5X2hy ZF9mbGFnLAorICAgICAgICB9LAorICAgICAgICAudGlja19kaXZpc29yX21pbnVzMiA9IHNwcy0+ aGRyLnRpY2tfZGl2aXNvcl9taW51czIsCisgICAgICAgIC5kdV9jcGJfcmVtb3ZhbF9kZWxheV9p bmNyZW1lbnRfbGVuZ3RoX21pbnVzMSA9IHNwcy0+aGRyLmR1X2NwYl9yZW1vdmFsX2RlbGF5X2lu Y3JlbWVudF9sZW5ndGhfbWludXMxLAorICAgICAgICAuZHBiX291dHB1dF9kZWxheV9kdV9sZW5n dGhfbWludXMxID0gc3BzLT5oZHIuZHBiX291dHB1dF9kZWxheV9kdV9sZW5ndGhfbWludXMxLAor ICAgICAgICAuYml0X3JhdGVfc2NhbGUgPSBzcHMtPmhkci5iaXRfcmF0ZV9zY2FsZSwKKyAgICAg ICAgLmNwYl9zaXplX3NjYWxlID0gc3BzLT5oZHIuY3BiX3NpemVfc2NhbGUsCisgICAgICAgIC5j cGJfc2l6ZV9kdV9zY2FsZSA9IHNwcy0+aGRyLmNwYl9zaXplX2R1X3NjYWxlLAorICAgICAgICAu aW5pdGlhbF9jcGJfcmVtb3ZhbF9kZWxheV9sZW5ndGhfbWludXMxID0gc3BzLT5oZHIuaW5pdGlh bF9jcGJfcmVtb3ZhbF9kZWxheV9sZW5ndGhfbWludXMxLAorICAgICAgICAuYXVfY3BiX3JlbW92 YWxfZGVsYXlfbGVuZ3RoX21pbnVzMSA9IHNwcy0+aGRyLmF1X2NwYl9yZW1vdmFsX2RlbGF5X2xl bmd0aF9taW51czEsCisgICAgICAgIC5kcGJfb3V0cHV0X2RlbGF5X2xlbmd0aF9taW51czEgPSBz cHMtPmhkci5kcGJfb3V0cHV0X2RlbGF5X2xlbmd0aF9taW51czEsCisgICAgICAgIC8qIFJlc2Vy dmVkIC0gMyoxNiBiaXRzICovCisgICAgICAgIC5wU3ViTGF5ZXJIcmRQYXJhbWV0ZXJzTmFsID0g c2xoZHJuYWwsCisgICAgICAgIC5wU3ViTGF5ZXJIcmRQYXJhbWV0ZXJzVmNsID0gc2xoZHJ2Y2ws CisgICAgfTsKKworICAgIG1lbWNweSh2a3Nwc192dWlfaGVhZGVyLT5jcGJfY250X21pbnVzMSwg c3BzLT5oZHIuY3BiX2NudF9taW51czEsCisgICAgICAgICAgIFNURF9WSURFT19IMjY1X1NVQkxB WUVSU19MSVNUX1NJWkUqc2l6ZW9mKCp2a3Nwc192dWlfaGVhZGVyLT5jcGJfY250X21pbnVzMSkp OworICAgIG1lbWNweSh2a3Nwc192dWlfaGVhZGVyLT5lbGVtZW50YWxfZHVyYXRpb25faW5fdGNf bWludXMxLCBzcHMtPmhkci5lbGVtZW50YWxfZHVyYXRpb25faW5fdGNfbWludXMxLAorICAgICAg ICAgICBTVERfVklERU9fSDI2NV9TVUJMQVlFUlNfTElTVF9TSVpFKnNpemVvZigqdmtzcHNfdnVp X2hlYWRlci0+ZWxlbWVudGFsX2R1cmF0aW9uX2luX3RjX21pbnVzMSkpOworCisgICAgbWVtY3B5 KHNsaGRybmFsLCBzcHMtPmhkci5uYWxfcGFyYW1zLCBIRVZDX01BWF9TVUJfTEFZRVJTKnNpemVv Zigqc2xoZHJuYWwpKTsKKyAgICBtZW1jcHkoc2xoZHJ2Y2wsIHNwcy0+aGRyLnZjbF9wYXJhbXMs IEhFVkNfTUFYX1NVQl9MQVlFUlMqc2l6ZW9mKCpzbGhkcnZjbCkpOworCisgICAgKnZrc3BzX3Z1 aSA9IChTdGRWaWRlb0gyNjVTZXF1ZW5jZVBhcmFtZXRlclNldFZ1aSkgeworICAgICAgICAuZmxh Z3MgPSAoU3RkVmlkZW9IMjY1U3BzVnVpRmxhZ3MpIHsKKyAgICAgICAgICAgIC5hc3BlY3RfcmF0 aW9faW5mb19wcmVzZW50X2ZsYWcgPSBzcHMtPnZ1aS5jb21tb24uYXNwZWN0X3JhdGlvX2luZm9f cHJlc2VudF9mbGFnLAorICAgICAgICAgICAgLm92ZXJzY2FuX2luZm9fcHJlc2VudF9mbGFnID0g c3BzLT52dWkuY29tbW9uLm92ZXJzY2FuX2luZm9fcHJlc2VudF9mbGFnLAorICAgICAgICAgICAg Lm92ZXJzY2FuX2FwcHJvcHJpYXRlX2ZsYWcgPSBzcHMtPnZ1aS5jb21tb24ub3ZlcnNjYW5fYXBw cm9wcmlhdGVfZmxhZywKKyAgICAgICAgICAgIC52aWRlb19zaWduYWxfdHlwZV9wcmVzZW50X2Zs YWcgPSBzcHMtPnZ1aS5jb21tb24udmlkZW9fc2lnbmFsX3R5cGVfcHJlc2VudF9mbGFnLAorICAg ICAgICAgICAgLnZpZGVvX2Z1bGxfcmFuZ2VfZmxhZyA9IHNwcy0+dnVpLmNvbW1vbi52aWRlb19m dWxsX3JhbmdlX2ZsYWcsCisgICAgICAgICAgICAuY29sb3VyX2Rlc2NyaXB0aW9uX3ByZXNlbnRf ZmxhZyA9IHNwcy0+dnVpLmNvbW1vbi5jb2xvdXJfZGVzY3JpcHRpb25fcHJlc2VudF9mbGFnLAor ICAgICAgICAgICAgLmNocm9tYV9sb2NfaW5mb19wcmVzZW50X2ZsYWcgPSBzcHMtPnZ1aS5jb21t b24uY2hyb21hX2xvY19pbmZvX3ByZXNlbnRfZmxhZywKKyAgICAgICAgICAgIC5uZXV0cmFsX2No cm9tYV9pbmRpY2F0aW9uX2ZsYWcgPSBzcHMtPnZ1aS5uZXV0cmFfY2hyb21hX2luZGljYXRpb25f ZmxhZywKKyAgICAgICAgICAgIC5maWVsZF9zZXFfZmxhZyA9IHNwcy0+dnVpLmZpZWxkX3NlcV9m bGFnLAorICAgICAgICAgICAgLmZyYW1lX2ZpZWxkX2luZm9fcHJlc2VudF9mbGFnID0gc3BzLT52 dWkuZnJhbWVfZmllbGRfaW5mb19wcmVzZW50X2ZsYWcsCisgICAgICAgICAgICAuZGVmYXVsdF9k aXNwbGF5X3dpbmRvd19mbGFnID0gc3BzLT52dWkuZGVmYXVsdF9kaXNwbGF5X3dpbmRvd19mbGFn LAorICAgICAgICAgICAgLnZ1aV90aW1pbmdfaW5mb19wcmVzZW50X2ZsYWcgPSBzcHMtPnZ1aS52 dWlfdGltaW5nX2luZm9fcHJlc2VudF9mbGFnLAorICAgICAgICAgICAgLnZ1aV9wb2NfcHJvcG9y dGlvbmFsX3RvX3RpbWluZ19mbGFnID0gc3BzLT52dWkudnVpX3BvY19wcm9wb3J0aW9uYWxfdG9f dGltaW5nX2ZsYWcsCisgICAgICAgICAgICAudnVpX2hyZF9wYXJhbWV0ZXJzX3ByZXNlbnRfZmxh ZyA9IHNwcy0+dnVpLnZ1aV9ocmRfcGFyYW1ldGVyc19wcmVzZW50X2ZsYWcsCisgICAgICAgICAg ICAuYml0c3RyZWFtX3Jlc3RyaWN0aW9uX2ZsYWcgPSBzcHMtPnZ1aS5iaXRzdHJlYW1fcmVzdHJp Y3Rpb25fZmxhZywKKyAgICAgICAgICAgIC50aWxlc19maXhlZF9zdHJ1Y3R1cmVfZmxhZyA9IHNw cy0+dnVpLnRpbGVzX2ZpeGVkX3N0cnVjdHVyZV9mbGFnLAorICAgICAgICAgICAgLm1vdGlvbl92 ZWN0b3JzX292ZXJfcGljX2JvdW5kYXJpZXNfZmxhZyA9IHNwcy0+dnVpLm1vdGlvbl92ZWN0b3Jz X292ZXJfcGljX2JvdW5kYXJpZXNfZmxhZywKKyAgICAgICAgICAgIC5yZXN0cmljdGVkX3JlZl9w aWNfbGlzdHNfZmxhZyA9IHNwcy0+dnVpLnJlc3RyaWN0ZWRfcmVmX3BpY19saXN0c19mbGFnLAor ICAgICAgICB9LAorICAgICAgICAuYXNwZWN0X3JhdGlvX2lkYyA9IHNwcy0+dnVpLmNvbW1vbi5h c3BlY3RfcmF0aW9faWRjLAorICAgICAgICAuc2FyX3dpZHRoID0gc3BzLT52dWkuY29tbW9uLnNh ci5udW0sCisgICAgICAgIC5zYXJfaGVpZ2h0ID0gc3BzLT52dWkuY29tbW9uLnNhci5kZW4sCisg ICAgICAgIC52aWRlb19mb3JtYXQgPSBzcHMtPnZ1aS5jb21tb24udmlkZW9fZm9ybWF0LAorICAg ICAgICAuY29sb3VyX3ByaW1hcmllcyA9IHNwcy0+dnVpLmNvbW1vbi5jb2xvdXJfcHJpbWFyaWVz LAorICAgICAgICAudHJhbnNmZXJfY2hhcmFjdGVyaXN0aWNzID0gc3BzLT52dWkuY29tbW9uLnRy YW5zZmVyX2NoYXJhY3RlcmlzdGljcywKKyAgICAgICAgLm1hdHJpeF9jb2VmZnMgPSBzcHMtPnZ1 aS5jb21tb24ubWF0cml4X2NvZWZmcywKKyAgICAgICAgLmNocm9tYV9zYW1wbGVfbG9jX3R5cGVf dG9wX2ZpZWxkID0gc3BzLT52dWkuY29tbW9uLmNocm9tYV9zYW1wbGVfbG9jX3R5cGVfdG9wX2Zp ZWxkLAorICAgICAgICAuY2hyb21hX3NhbXBsZV9sb2NfdHlwZV9ib3R0b21fZmllbGQgPSBzcHMt PnZ1aS5jb21tb24uY2hyb21hX3NhbXBsZV9sb2NfdHlwZV9ib3R0b21fZmllbGQsCisgICAgICAg IC8qIFJlc2VydmVkICovCisgICAgICAgIC8qIFJlc2VydmVkICovCisgICAgICAgIC5kZWZfZGlz cF93aW5fbGVmdF9vZmZzZXQgPSBzcHMtPnZ1aS5kZWZfZGlzcF93aW4ubGVmdF9vZmZzZXQsCisg ICAgICAgIC5kZWZfZGlzcF93aW5fcmlnaHRfb2Zmc2V0ID0gc3BzLT52dWkuZGVmX2Rpc3Bfd2lu LnJpZ2h0X29mZnNldCwKKyAgICAgICAgLmRlZl9kaXNwX3dpbl90b3Bfb2Zmc2V0ID0gc3BzLT52 dWkuZGVmX2Rpc3Bfd2luLnRvcF9vZmZzZXQsCisgICAgICAgIC5kZWZfZGlzcF93aW5fYm90dG9t X29mZnNldCA9IHNwcy0+dnVpLmRlZl9kaXNwX3dpbi5ib3R0b21fb2Zmc2V0LAorICAgICAgICAu dnVpX251bV91bml0c19pbl90aWNrID0gc3BzLT52dWkudnVpX251bV91bml0c19pbl90aWNrLAor ICAgICAgICAudnVpX3RpbWVfc2NhbGUgPSBzcHMtPnZ1aS52dWlfdGltZV9zY2FsZSwKKyAgICAg ICAgLnZ1aV9udW1fdGlja3NfcG9jX2RpZmZfb25lX21pbnVzMSA9IHNwcy0+dnVpLnZ1aV9udW1f dGlja3NfcG9jX2RpZmZfb25lX21pbnVzMSwKKyAgICAgICAgLm1pbl9zcGF0aWFsX3NlZ21lbnRh dGlvbl9pZGMgPSBzcHMtPnZ1aS5taW5fc3BhdGlhbF9zZWdtZW50YXRpb25faWRjLAorICAgICAg ICAubWF4X2J5dGVzX3Blcl9waWNfZGVub20gPSBzcHMtPnZ1aS5tYXhfYnl0ZXNfcGVyX3BpY19k ZW5vbSwKKyAgICAgICAgLm1heF9iaXRzX3Blcl9taW5fY3VfZGVub20gPSBzcHMtPnZ1aS5tYXhf Yml0c19wZXJfbWluX2N1X2Rlbm9tLAorICAgICAgICAubG9nMl9tYXhfbXZfbGVuZ3RoX2hvcml6 b250YWwgPSBzcHMtPnZ1aS5sb2cyX21heF9tdl9sZW5ndGhfaG9yaXpvbnRhbCwKKyAgICAgICAg LmxvZzJfbWF4X212X2xlbmd0aF92ZXJ0aWNhbCA9IHNwcy0+dnVpLmxvZzJfbWF4X212X2xlbmd0 aF92ZXJ0aWNhbCwKKyAgICAgICAgLnBIcmRQYXJhbWV0ZXJzID0gdmtzcHNfdnVpX2hlYWRlciwK KyAgICB9OworCisgICAgKnB0bCA9IChTdGRWaWRlb0gyNjVQcm9maWxlVGllckxldmVsKSB7Cisg ICAgICAgIC5mbGFncyA9IChTdGRWaWRlb0gyNjVQcm9maWxlVGllckxldmVsRmxhZ3MpIHsKKyAg ICAgICAgICAgIC5nZW5lcmFsX3RpZXJfZmxhZyA9IHNwcy0+cHRsLmdlbmVyYWxfcHRsLnRpZXJf ZmxhZywKKyAgICAgICAgICAgIC5nZW5lcmFsX3Byb2dyZXNzaXZlX3NvdXJjZV9mbGFnID0gc3Bz LT5wdGwuZ2VuZXJhbF9wdGwucHJvZ3Jlc3NpdmVfc291cmNlX2ZsYWcsCisgICAgICAgICAgICAu Z2VuZXJhbF9pbnRlcmxhY2VkX3NvdXJjZV9mbGFnID0gc3BzLT5wdGwuZ2VuZXJhbF9wdGwuaW50 ZXJsYWNlZF9zb3VyY2VfZmxhZywKKyAgICAgICAgICAgIC5nZW5lcmFsX25vbl9wYWNrZWRfY29u c3RyYWludF9mbGFnID0gc3BzLT5wdGwuZ2VuZXJhbF9wdGwubm9uX3BhY2tlZF9jb25zdHJhaW50 X2ZsYWcsCisgICAgICAgICAgICAuZ2VuZXJhbF9mcmFtZV9vbmx5X2NvbnN0cmFpbnRfZmxhZyA9 IHNwcy0+cHRsLmdlbmVyYWxfcHRsLmZyYW1lX29ubHlfY29uc3RyYWludF9mbGFnLAorICAgICAg ICB9LAorICAgICAgICAuZ2VuZXJhbF9wcm9maWxlX2lkYyA9IHNwcy0+cHRsLmdlbmVyYWxfcHRs LnByb2ZpbGVfaWRjLAorICAgICAgICAuZ2VuZXJhbF9sZXZlbF9pZGMgPSBmZl92a19oMjY1X2xl dmVsX3RvX3ZrKHNwcy0+cHRsLmdlbmVyYWxfcHRsLmxldmVsX2lkYyksCisgICAgfTsKKworICAg IGZvciAoaW50IGkgPSAwOyBpIDwgc3BzLT5tYXhfc3ViX2xheWVyczsgaSsrKSB7CisgICAgICAg IGRwYm0tPm1heF9sYXRlbmN5X2luY3JlYXNlX3BsdXMxW2ldID0gc3BzLT50ZW1wb3JhbF9sYXll cltpXS5tYXhfbGF0ZW5jeV9pbmNyZWFzZSArIDE7CisgICAgICAgIGRwYm0tPm1heF9kZWNfcGlj X2J1ZmZlcmluZ19taW51czFbaV0gPSBzcHMtPnRlbXBvcmFsX2xheWVyW2ldLm1heF9kZWNfcGlj X2J1ZmZlcmluZyAtIDE7CisgICAgICAgIGRwYm0tPm1heF9udW1fcmVvcmRlcl9waWNzW2ldID0g c3BzLT50ZW1wb3JhbF9sYXllcltpXS5udW1fcmVvcmRlcl9waWNzOworICAgIH0KKworICAgIGZv ciAoaW50IGkgPSAwOyBpIDwgKHNwcy0+Y2hyb21hX2Zvcm1hdF9pZGMgPyAzIDogMSk7IGkrKykK KyAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBzcHMtPnNwc19udW1fcGFsZXR0ZV9wcmVkaWN0 b3JfaW5pdGlhbGl6ZXJzOyBqKyspCisgICAgICAgICAgICBwYWwtPlByZWRpY3RvclBhbGV0dGVF bnRyaWVzW2ldW2pdID0gc3BzLT5zcHNfcGFsZXR0ZV9wcmVkaWN0b3JfaW5pdGlhbGl6ZXJbaV1b al07CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHNwcy0+bmJfc3RfcnBzOyBpKyspIHsKKyAg ICAgICAgY29uc3QgU2hvcnRUZXJtUlBTICpzdF9ycHMgPSAmc3BzLT5zdF9ycHNbaV07CisKKyAg ICAgICAgc3RyW2ldID0gKFN0ZFZpZGVvSDI2NVNob3J0VGVybVJlZlBpY1NldCkgeworICAgICAg ICAgICAgLmZsYWdzID0gKFN0ZFZpZGVvSDI2NVNob3J0VGVybVJlZlBpY1NldEZsYWdzKSB7Cisg ICAgICAgICAgICAgICAgLmludGVyX3JlZl9waWNfc2V0X3ByZWRpY3Rpb25fZmxhZyA9IHNwcy0+ c3RfcnBzW2ldLnJwc19wcmVkaWN0LAorICAgICAgICAgICAgICAgIC5kZWx0YV9ycHNfc2lnbiA9 IHNwcy0+c3RfcnBzW2ldLmRlbHRhX3Jwc19zaWduLAorICAgICAgICAgICAgfSwKKyAgICAgICAg ICAgIC5kZWx0YV9pZHhfbWludXMxID0gc3BzLT5zdF9ycHNbaV0uZGVsdGFfaWR4IC0gMSwKKyAg ICAgICAgICAgIC51c2VfZGVsdGFfZmxhZyA9IHNwcy0+c3RfcnBzW2ldLnVzZV9kZWx0YSwKKyAg ICAgICAgICAgIC5hYnNfZGVsdGFfcnBzX21pbnVzMSA9IHNwcy0+c3RfcnBzW2ldLmFic19kZWx0 YV9ycHMgLSAxLAorICAgICAgICAgICAgLnVzZWRfYnlfY3Vycl9waWNfZmxhZyAgICA9IDB4MCwK KyAgICAgICAgICAgIC51c2VkX2J5X2N1cnJfcGljX3MwX2ZsYWcgPSAweDAsCisgICAgICAgICAg ICAudXNlZF9ieV9jdXJyX3BpY19zMV9mbGFnID0gMHgwLAorICAgICAgICAgICAgLyogUmVzZXJ2 ZWQgKi8KKyAgICAgICAgICAgIC8qIFJlc2VydmVkICovCisgICAgICAgICAgICAvKiBSZXNlcnZl ZCAqLworICAgICAgICAgICAgLm51bV9uZWdhdGl2ZV9waWNzID0gc3BzLT5zdF9ycHNbaV0ubnVt X25lZ2F0aXZlX3BpY3MsCisgICAgICAgICAgICAubnVtX3Bvc2l0aXZlX3BpY3MgPSBzcHMtPnN0 X3Jwc1tpXS5udW1fZGVsdGFfcG9jcyAtIHNwcy0+c3RfcnBzW2ldLm51bV9uZWdhdGl2ZV9waWNz LAorICAgICAgICB9OworCisgICAgICAgIC8qIE5PVEU6IFRoaXMgaXMgdGhlIHByZWRpY3RlZCwg YW5kICpyZW9yZGVyZWQqIHZlcnNpb24uCisgICAgICAgICAqIFByb2JhYmx5IGluY29ycmVjdCwg YnV0IHRoZSBzcGVjIGRvZXNuJ3Qgc2F5IHdoaWNoIHZlcnNpb24gdG8gdXNlLiAqLworICAgICAg ICBzdHJbaV0udXNlZF9ieV9jdXJyX3BpY19mbGFnID0gc3RfcnBzLT51c2VkOworICAgICAgICBz dHJbaV0udXNlZF9ieV9jdXJyX3BpY19zMF9mbGFnID0gYXZfemVyb19leHRlbmQoc3RfcnBzLT51 c2VkLCBzdHJbaV0ubnVtX25lZ2F0aXZlX3BpY3MpOworICAgICAgICBzdHJbaV0udXNlZF9ieV9j dXJyX3BpY19zMV9mbGFnID0gc3RfcnBzLT51c2VkID4+IHN0cltpXS5udW1fbmVnYXRpdmVfcGlj czsKKworICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHN0cltpXS5udW1fbmVnYXRpdmVfcGlj czsgaisrKQorICAgICAgICAgICAgc3RyW2ldLmRlbHRhX3BvY19zMF9taW51czFbal0gPSBzdF9y cHMtPmRlbHRhX3BvY1tqXSAtIChqID8gc3RfcnBzLT5kZWx0YV9wb2NbaiAtIDFdIDogMCkgLSAx OworCisgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgc3RyW2ldLm51bV9wb3NpdGl2ZV9waWNz OyBqKyspCisgICAgICAgICAgICBzdHJbaV0uZGVsdGFfcG9jX3MxX21pbnVzMVtqXSA9IHN0X3Jw cy0+ZGVsdGFfcG9jW3N0X3Jwcy0+bnVtX25lZ2F0aXZlX3BpY3MgKyBqXSAtCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChqID8gc3RfcnBzLT5kZWx0YV9wb2Nb c3RfcnBzLT5udW1fbmVnYXRpdmVfcGljcyArIGogLSAxXSA6IDApIC0gMTsKKyAgICB9CisKKyAg ICAqbHRyID0gKFN0ZFZpZGVvSDI2NUxvbmdUZXJtUmVmUGljc1NwcykgeworICAgICAgICAudXNl ZF9ieV9jdXJyX3BpY19sdF9zcHNfZmxhZyA9IHNwcy0+dXNlZF9ieV9jdXJyX3BpY19sdCwKKyAg ICB9OworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzcHMtPm51bV9sb25nX3Rlcm1fcmVmX3Bp Y3Nfc3BzOyBpKyspIHsKKyAgICAgICAgbHRyLT5sdF9yZWZfcGljX3BvY19sc2Jfc3BzW2ldICAg ICA9IHNwcy0+bHRfcmVmX3BpY19wb2NfbHNiX3Nwc1tpXTsKKyAgICB9CisKKyAgICAqdmtzcHMg PSAoU3RkVmlkZW9IMjY1U2VxdWVuY2VQYXJhbWV0ZXJTZXQpIHsKKyAgICAgICAgLmZsYWdzID0g KFN0ZFZpZGVvSDI2NVNwc0ZsYWdzKSB7CisgICAgICAgICAgICAuc3BzX3RlbXBvcmFsX2lkX25l c3RpbmdfZmxhZyA9IHNwcy0+dGVtcG9yYWxfaWRfbmVzdGluZywKKyAgICAgICAgICAgIC5zZXBh cmF0ZV9jb2xvdXJfcGxhbmVfZmxhZyA9IHNwcy0+c2VwYXJhdGVfY29sb3VyX3BsYW5lLAorICAg ICAgICAgICAgLmNvbmZvcm1hbmNlX3dpbmRvd19mbGFnID0gc3BzLT5jb25mb3JtYW5jZV93aW5k b3csCisgICAgICAgICAgICAuc3BzX3N1Yl9sYXllcl9vcmRlcmluZ19pbmZvX3ByZXNlbnRfZmxh ZyA9IHNwcy0+c3VibGF5ZXJfb3JkZXJpbmdfaW5mbywKKyAgICAgICAgICAgIC5zY2FsaW5nX2xp c3RfZW5hYmxlZF9mbGFnID0gc3BzLT5zY2FsaW5nX2xpc3RfZW5hYmxlZCwKKyAgICAgICAgICAg IC5zcHNfc2NhbGluZ19saXN0X2RhdGFfcHJlc2VudF9mbGFnID0gc3BzLT5zY2FsaW5nX2xpc3Rf ZW5hYmxlZCwKKyAgICAgICAgICAgIC5hbXBfZW5hYmxlZF9mbGFnID0gc3BzLT5hbXBfZW5hYmxl ZCwKKyAgICAgICAgICAgIC5zYW1wbGVfYWRhcHRpdmVfb2Zmc2V0X2VuYWJsZWRfZmxhZyA9IHNw cy0+c2FvX2VuYWJsZWQsCisgICAgICAgICAgICAucGNtX2VuYWJsZWRfZmxhZyA9IHNwcy0+cGNt X2VuYWJsZWQsCisgICAgICAgICAgICAucGNtX2xvb3BfZmlsdGVyX2Rpc2FibGVkX2ZsYWcgPSBz cHMtPnBjbV9sb29wX2ZpbHRlcl9kaXNhYmxlZCwKKyAgICAgICAgICAgIC5sb25nX3Rlcm1fcmVm X3BpY3NfcHJlc2VudF9mbGFnID0gc3BzLT5sb25nX3Rlcm1fcmVmX3BpY3NfcHJlc2VudCwKKyAg ICAgICAgICAgIC5zcHNfdGVtcG9yYWxfbXZwX2VuYWJsZWRfZmxhZyA9IHNwcy0+dGVtcG9yYWxf bXZwX2VuYWJsZWQsCisgICAgICAgICAgICAuc3Ryb25nX2ludHJhX3Ntb290aGluZ19lbmFibGVk X2ZsYWcgPSBzcHMtPnN0cm9uZ19pbnRyYV9zbW9vdGhpbmdfZW5hYmxlZCwKKyAgICAgICAgICAg IC52dWlfcGFyYW1ldGVyc19wcmVzZW50X2ZsYWcgPSBzcHMtPnZ1aV9wcmVzZW50LAorICAgICAg ICAgICAgLnNwc19leHRlbnNpb25fcHJlc2VudF9mbGFnID0gc3BzLT5leHRlbnNpb25fcHJlc2Vu dCwKKyAgICAgICAgICAgIC5zcHNfcmFuZ2VfZXh0ZW5zaW9uX2ZsYWcgPSBzcHMtPnJhbmdlX2V4 dGVuc2lvbiwKKyAgICAgICAgICAgIC50cmFuc2Zvcm1fc2tpcF9yb3RhdGlvbl9lbmFibGVkX2Zs YWcgPSBzcHMtPnRyYW5zZm9ybV9za2lwX3JvdGF0aW9uX2VuYWJsZWQsCisgICAgICAgICAgICAu dHJhbnNmb3JtX3NraXBfY29udGV4dF9lbmFibGVkX2ZsYWcgPSBzcHMtPnRyYW5zZm9ybV9za2lw X2NvbnRleHRfZW5hYmxlZCwKKyAgICAgICAgICAgIC5pbXBsaWNpdF9yZHBjbV9lbmFibGVkX2Zs YWcgPSBzcHMtPmltcGxpY2l0X3JkcGNtX2VuYWJsZWQsCisgICAgICAgICAgICAuZXhwbGljaXRf cmRwY21fZW5hYmxlZF9mbGFnID0gc3BzLT5leHBsaWNpdF9yZHBjbV9lbmFibGVkLAorICAgICAg ICAgICAgLmV4dGVuZGVkX3ByZWNpc2lvbl9wcm9jZXNzaW5nX2ZsYWcgPSBzcHMtPmV4dGVuZGVk X3ByZWNpc2lvbl9wcm9jZXNzaW5nLAorICAgICAgICAgICAgLmludHJhX3Ntb290aGluZ19kaXNh YmxlZF9mbGFnID0gc3BzLT5pbnRyYV9zbW9vdGhpbmdfZGlzYWJsZWQsCisgICAgICAgICAgICAu aGlnaF9wcmVjaXNpb25fb2Zmc2V0c19lbmFibGVkX2ZsYWcgPSBzcHMtPmhpZ2hfcHJlY2lzaW9u X29mZnNldHNfZW5hYmxlZCwKKyAgICAgICAgICAgIC5wZXJzaXN0ZW50X3JpY2VfYWRhcHRhdGlv bl9lbmFibGVkX2ZsYWcgPSBzcHMtPnBlcnNpc3RlbnRfcmljZV9hZGFwdGF0aW9uX2VuYWJsZWQs CisgICAgICAgICAgICAuY2FiYWNfYnlwYXNzX2FsaWdubWVudF9lbmFibGVkX2ZsYWcgPSBzcHMt PmNhYmFjX2J5cGFzc19hbGlnbm1lbnRfZW5hYmxlZCwKKyAgICAgICAgICAgIC5zcHNfc2NjX2V4 dGVuc2lvbl9mbGFnID0gc3BzLT5zY2NfZXh0ZW5zaW9uLAorICAgICAgICAgICAgLnNwc19jdXJy X3BpY19yZWZfZW5hYmxlZF9mbGFnID0gc3BzLT5jdXJyX3BpY19yZWZfZW5hYmxlZCwKKyAgICAg ICAgICAgIC5wYWxldHRlX21vZGVfZW5hYmxlZF9mbGFnID0gc3BzLT5wYWxldHRlX21vZGVfZW5h YmxlZCwKKyAgICAgICAgICAgIC5zcHNfcGFsZXR0ZV9wcmVkaWN0b3JfaW5pdGlhbGl6ZXJzX3By ZXNlbnRfZmxhZyA9IHNwcy0+cGFsZXR0ZV9wcmVkaWN0b3JfaW5pdGlhbGl6ZXJzX3ByZXNlbnQs CisgICAgICAgICAgICAuaW50cmFfYm91bmRhcnlfZmlsdGVyaW5nX2Rpc2FibGVkX2ZsYWcgPSBz cHMtPmludHJhX2JvdW5kYXJ5X2ZpbHRlcmluZ19kaXNhYmxlZCwKKyAgICAgICAgfSwKKyAgICAg ICAgLmNocm9tYV9mb3JtYXRfaWRjID0gc3BzLT5jaHJvbWFfZm9ybWF0X2lkYywKKyAgICAgICAg LnBpY193aWR0aF9pbl9sdW1hX3NhbXBsZXMgPSBzcHMtPndpZHRoLAorICAgICAgICAucGljX2hl aWdodF9pbl9sdW1hX3NhbXBsZXMgPSBzcHMtPmhlaWdodCwKKyAgICAgICAgLnNwc192aWRlb19w YXJhbWV0ZXJfc2V0X2lkID0gc3BzLT52cHNfaWQsCisgICAgICAgIC5zcHNfbWF4X3N1Yl9sYXll cnNfbWludXMxID0gc3BzLT5tYXhfc3ViX2xheWVycyAtIDEsCisgICAgICAgIC5zcHNfc2VxX3Bh cmFtZXRlcl9zZXRfaWQgPSBzcHNfaWR4LAorICAgICAgICAuYml0X2RlcHRoX2x1bWFfbWludXM4 ID0gc3BzLT5iaXRfZGVwdGggLSA4LAorICAgICAgICAuYml0X2RlcHRoX2Nocm9tYV9taW51czgg PSBzcHMtPmJpdF9kZXB0aF9jaHJvbWEgLSA4LAorICAgICAgICAubG9nMl9tYXhfcGljX29yZGVy X2NudF9sc2JfbWludXM0ID0gc3BzLT5sb2cyX21heF9wb2NfbHNiIC0gNCwKKyAgICAgICAgLmxv ZzJfbWluX2x1bWFfY29kaW5nX2Jsb2NrX3NpemVfbWludXMzID0gc3BzLT5sb2cyX21pbl9jYl9z aXplIC0gMywKKyAgICAgICAgLmxvZzJfZGlmZl9tYXhfbWluX2x1bWFfY29kaW5nX2Jsb2NrX3Np emUgPSBzcHMtPmxvZzJfZGlmZl9tYXhfbWluX2NvZGluZ19ibG9ja19zaXplLAorICAgICAgICAu bG9nMl9taW5fbHVtYV90cmFuc2Zvcm1fYmxvY2tfc2l6ZV9taW51czIgPSBzcHMtPmxvZzJfbWlu X3RiX3NpemUgLSAyLAorICAgICAgICAubG9nMl9kaWZmX21heF9taW5fbHVtYV90cmFuc2Zvcm1f YmxvY2tfc2l6ZSA9IHNwcy0+bG9nMl9kaWZmX21heF9taW5fdHJhbnNmb3JtX2Jsb2NrX3NpemUs CisgICAgICAgIC5tYXhfdHJhbnNmb3JtX2hpZXJhcmNoeV9kZXB0aF9pbnRlciA9IHNwcy0+bWF4 X3RyYW5zZm9ybV9oaWVyYXJjaHlfZGVwdGhfaW50ZXIsCisgICAgICAgIC5tYXhfdHJhbnNmb3Jt X2hpZXJhcmNoeV9kZXB0aF9pbnRyYSA9IHNwcy0+bWF4X3RyYW5zZm9ybV9oaWVyYXJjaHlfZGVw dGhfaW50cmEsCisgICAgICAgIC5udW1fc2hvcnRfdGVybV9yZWZfcGljX3NldHMgPSBzcHMtPm5i X3N0X3JwcywKKyAgICAgICAgLm51bV9sb25nX3Rlcm1fcmVmX3BpY3Nfc3BzID0gc3BzLT5udW1f bG9uZ190ZXJtX3JlZl9waWNzX3NwcywKKyAgICAgICAgLnBjbV9zYW1wbGVfYml0X2RlcHRoX2x1 bWFfbWludXMxID0gc3BzLT5wY20uYml0X2RlcHRoIC0gMSwKKyAgICAgICAgLnBjbV9zYW1wbGVf Yml0X2RlcHRoX2Nocm9tYV9taW51czEgPSBzcHMtPnBjbS5iaXRfZGVwdGhfY2hyb21hIC0gMSwK KyAgICAgICAgLmxvZzJfbWluX3BjbV9sdW1hX2NvZGluZ19ibG9ja19zaXplX21pbnVzMyA9IHNw cy0+cGNtLmxvZzJfbWluX3BjbV9jYl9zaXplIC0gMywKKyAgICAgICAgLmxvZzJfZGlmZl9tYXhf bWluX3BjbV9sdW1hX2NvZGluZ19ibG9ja19zaXplID0gc3BzLT5wY20ubG9nMl9tYXhfcGNtX2Ni X3NpemUgLSBzcHMtPnBjbS5sb2cyX21pbl9wY21fY2Jfc2l6ZSwKKyAgICAgICAgLyogUmVzZXJ2 ZWQgKi8KKyAgICAgICAgLyogUmVzZXJ2ZWQgKi8KKyAgICAgICAgLnBhbGV0dGVfbWF4X3NpemUg PSBzcHMtPnBhbGV0dGVfbWF4X3NpemUsCisgICAgICAgIC5kZWx0YV9wYWxldHRlX21heF9wcmVk aWN0b3Jfc2l6ZSA9IHNwcy0+ZGVsdGFfcGFsZXR0ZV9tYXhfcHJlZGljdG9yX3NpemUsCisgICAg ICAgIC5tb3Rpb25fdmVjdG9yX3Jlc29sdXRpb25fY29udHJvbF9pZGMgPSBzcHMtPm1vdGlvbl92 ZWN0b3JfcmVzb2x1dGlvbl9jb250cm9sX2lkYywKKyAgICAgICAgLnNwc19udW1fcGFsZXR0ZV9w cmVkaWN0b3JfaW5pdGlhbGl6ZXJzX21pbnVzMSA9IHNwcy0+c3BzX251bV9wYWxldHRlX3ByZWRp Y3Rvcl9pbml0aWFsaXplcnMgLSAxLAorICAgICAgICAuY29uZl93aW5fbGVmdF9vZmZzZXQgPSBz cHMtPnBpY19jb25mX3dpbi5sZWZ0X29mZnNldCwKKyAgICAgICAgLmNvbmZfd2luX3JpZ2h0X29m ZnNldCA9IHNwcy0+cGljX2NvbmZfd2luLnJpZ2h0X29mZnNldCwKKyAgICAgICAgLmNvbmZfd2lu X3RvcF9vZmZzZXQgPSBzcHMtPnBpY19jb25mX3dpbi50b3Bfb2Zmc2V0LAorICAgICAgICAuY29u Zl93aW5fYm90dG9tX29mZnNldCA9IHNwcy0+cGljX2NvbmZfd2luLmJvdHRvbV9vZmZzZXQsCisg ICAgICAgIC5wUHJvZmlsZVRpZXJMZXZlbCA9IHB0bCwKKyAgICAgICAgLnBEZWNQaWNCdWZNZ3Ig PSBkcGJtLAorICAgICAgICAucFNjYWxpbmdMaXN0cyA9IHZrc3BzX3NjYWxpbmcsCisgICAgICAg IC5wU2hvcnRUZXJtUmVmUGljU2V0ID0gc3RyLAorICAgICAgICAucExvbmdUZXJtUmVmUGljc1Nw cyA9IGx0ciwKKyAgICAgICAgLnBTZXF1ZW5jZVBhcmFtZXRlclNldFZ1aSA9IHZrc3BzX3Z1aSwK KyAgICAgICAgLnBQcmVkaWN0b3JQYWxldHRlRW50cmllcyA9IHBhbCwKKyAgICB9OworfQorCitz dGF0aWMgdm9pZCBzZXRfcHBzKGNvbnN0IEhFVkNQUFMgKnBwcywgY29uc3QgSEVWQ1NQUyAqc3Bz LAorICAgICAgICAgICAgICAgICAgICBTdGRWaWRlb0gyNjVTY2FsaW5nTGlzdHMgKnZrcHBzX3Nj YWxpbmcsCisgICAgICAgICAgICAgICAgICAgIFN0ZFZpZGVvSDI2NVBpY3R1cmVQYXJhbWV0ZXJT ZXQgKnZrcHBzLAorICAgICAgICAgICAgICAgICAgICBTdGRWaWRlb0gyNjVQcmVkaWN0b3JQYWxl dHRlRW50cmllcyAqcGFsKQoreworICAgIGNvcHlfc2NhbGluZ19saXN0KCZwcHMtPnNjYWxpbmdf bGlzdCwgdmtwcHNfc2NhbGluZyk7CisKKyAgICAqdmtwcHMgPSAoU3RkVmlkZW9IMjY1UGljdHVy ZVBhcmFtZXRlclNldCkgeworICAgICAgICAuZmxhZ3MgPSAoU3RkVmlkZW9IMjY1UHBzRmxhZ3Mp IHsKKyAgICAgICAgICAgIC5kZXBlbmRlbnRfc2xpY2Vfc2VnbWVudHNfZW5hYmxlZF9mbGFnID0g cHBzLT5kZXBlbmRlbnRfc2xpY2Vfc2VnbWVudHNfZW5hYmxlZF9mbGFnLAorICAgICAgICAgICAg Lm91dHB1dF9mbGFnX3ByZXNlbnRfZmxhZyA9IHBwcy0+b3V0cHV0X2ZsYWdfcHJlc2VudF9mbGFn LAorICAgICAgICAgICAgLnNpZ25fZGF0YV9oaWRpbmdfZW5hYmxlZF9mbGFnID0gcHBzLT5zaWdu X2RhdGFfaGlkaW5nX2ZsYWcsCisgICAgICAgICAgICAuY2FiYWNfaW5pdF9wcmVzZW50X2ZsYWcg PSBwcHMtPmNhYmFjX2luaXRfcHJlc2VudF9mbGFnLAorICAgICAgICAgICAgLmNvbnN0cmFpbmVk X2ludHJhX3ByZWRfZmxhZyA9IHBwcy0+Y29uc3RyYWluZWRfaW50cmFfcHJlZF9mbGFnLAorICAg ICAgICAgICAgLnRyYW5zZm9ybV9za2lwX2VuYWJsZWRfZmxhZyA9IHBwcy0+dHJhbnNmb3JtX3Nr aXBfZW5hYmxlZF9mbGFnLAorICAgICAgICAgICAgLmN1X3FwX2RlbHRhX2VuYWJsZWRfZmxhZyA9 IHBwcy0+Y3VfcXBfZGVsdGFfZW5hYmxlZF9mbGFnLAorICAgICAgICAgICAgLnBwc19zbGljZV9j aHJvbWFfcXBfb2Zmc2V0c19wcmVzZW50X2ZsYWcgPSBwcHMtPnBpY19zbGljZV9sZXZlbF9jaHJv bWFfcXBfb2Zmc2V0c19wcmVzZW50X2ZsYWcsCisgICAgICAgICAgICAud2VpZ2h0ZWRfcHJlZF9m bGFnID0gcHBzLT53ZWlnaHRlZF9wcmVkX2ZsYWcsCisgICAgICAgICAgICAud2VpZ2h0ZWRfYmlw cmVkX2ZsYWcgPSBwcHMtPndlaWdodGVkX2JpcHJlZF9mbGFnLAorICAgICAgICAgICAgLnRyYW5z cXVhbnRfYnlwYXNzX2VuYWJsZWRfZmxhZyA9IHBwcy0+dHJhbnNxdWFudF9ieXBhc3NfZW5hYmxl X2ZsYWcsCisgICAgICAgICAgICAudGlsZXNfZW5hYmxlZF9mbGFnID0gcHBzLT50aWxlc19lbmFi bGVkX2ZsYWcsCisgICAgICAgICAgICAuZW50cm9weV9jb2Rpbmdfc3luY19lbmFibGVkX2ZsYWcg PSBwcHMtPmVudHJvcHlfY29kaW5nX3N5bmNfZW5hYmxlZF9mbGFnLAorICAgICAgICAgICAgLnVu aWZvcm1fc3BhY2luZ19mbGFnID0gcHBzLT51bmlmb3JtX3NwYWNpbmdfZmxhZywKKyAgICAgICAg ICAgIC5sb29wX2ZpbHRlcl9hY3Jvc3NfdGlsZXNfZW5hYmxlZF9mbGFnID0gcHBzLT5sb29wX2Zp bHRlcl9hY3Jvc3NfdGlsZXNfZW5hYmxlZF9mbGFnLAorICAgICAgICAgICAgLnBwc19sb29wX2Zp bHRlcl9hY3Jvc3Nfc2xpY2VzX2VuYWJsZWRfZmxhZyA9IHBwcy0+c2VxX2xvb3BfZmlsdGVyX2Fj cm9zc19zbGljZXNfZW5hYmxlZF9mbGFnLAorICAgICAgICAgICAgLmRlYmxvY2tpbmdfZmlsdGVy X2NvbnRyb2xfcHJlc2VudF9mbGFnID0gcHBzLT5kZWJsb2NraW5nX2ZpbHRlcl9jb250cm9sX3By ZXNlbnRfZmxhZywKKyAgICAgICAgICAgIC5kZWJsb2NraW5nX2ZpbHRlcl9vdmVycmlkZV9lbmFi bGVkX2ZsYWcgPSBwcHMtPmRlYmxvY2tpbmdfZmlsdGVyX292ZXJyaWRlX2VuYWJsZWRfZmxhZywK KyAgICAgICAgICAgIC5wcHNfZGVibG9ja2luZ19maWx0ZXJfZGlzYWJsZWRfZmxhZyA9IHBwcy0+ ZGlzYWJsZV9kYmYsCisgICAgICAgICAgICAucHBzX3NjYWxpbmdfbGlzdF9kYXRhX3ByZXNlbnRf ZmxhZyA9IHBwcy0+c2NhbGluZ19saXN0X2RhdGFfcHJlc2VudF9mbGFnLAorICAgICAgICAgICAg Lmxpc3RzX21vZGlmaWNhdGlvbl9wcmVzZW50X2ZsYWcgPSBwcHMtPmxpc3RzX21vZGlmaWNhdGlv bl9wcmVzZW50X2ZsYWcsCisgICAgICAgICAgICAuc2xpY2Vfc2VnbWVudF9oZWFkZXJfZXh0ZW5z aW9uX3ByZXNlbnRfZmxhZyA9IHBwcy0+c2xpY2VfaGVhZGVyX2V4dGVuc2lvbl9wcmVzZW50X2Zs YWcsCisgICAgICAgICAgICAucHBzX2V4dGVuc2lvbl9wcmVzZW50X2ZsYWcgPSBwcHMtPnBwc19l eHRlbnNpb25fcHJlc2VudF9mbGFnLAorICAgICAgICAgICAgLmNyb3NzX2NvbXBvbmVudF9wcmVk aWN0aW9uX2VuYWJsZWRfZmxhZyA9IHBwcy0+Y3Jvc3NfY29tcG9uZW50X3ByZWRpY3Rpb25fZW5h YmxlZF9mbGFnLAorICAgICAgICAgICAgLmNocm9tYV9xcF9vZmZzZXRfbGlzdF9lbmFibGVkX2Zs YWcgPSBwcHMtPmNocm9tYV9xcF9vZmZzZXRfbGlzdF9lbmFibGVkX2ZsYWcsCisgICAgICAgICAg ICAucHBzX2N1cnJfcGljX3JlZl9lbmFibGVkX2ZsYWcgPSBwcHMtPnBwc19jdXJyX3BpY19yZWZf ZW5hYmxlZF9mbGFnLAorICAgICAgICAgICAgLnJlc2lkdWFsX2FkYXB0aXZlX2NvbG91cl90cmFu c2Zvcm1fZW5hYmxlZF9mbGFnID0gcHBzLT5yZXNpZHVhbF9hZGFwdGl2ZV9jb2xvdXJfdHJhbnNm b3JtX2VuYWJsZWRfZmxhZywKKyAgICAgICAgICAgIC5wcHNfc2xpY2VfYWN0X3FwX29mZnNldHNf cHJlc2VudF9mbGFnID0gcHBzLT5wcHNfc2xpY2VfYWN0X3FwX29mZnNldHNfcHJlc2VudF9mbGFn LAorICAgICAgICAgICAgLnBwc19wYWxldHRlX3ByZWRpY3Rvcl9pbml0aWFsaXplcnNfcHJlc2Vu dF9mbGFnID0gcHBzLT5wcHNfcGFsZXR0ZV9wcmVkaWN0b3JfaW5pdGlhbGl6ZXJzX3ByZXNlbnRf ZmxhZywKKyAgICAgICAgICAgIC5tb25vY2hyb21lX3BhbGV0dGVfZmxhZyA9IHBwcy0+bW9ub2No cm9tZV9wYWxldHRlX2ZsYWcsCisgICAgICAgICAgICAucHBzX3JhbmdlX2V4dGVuc2lvbl9mbGFn ID0gcHBzLT5wcHNfcmFuZ2VfZXh0ZW5zaW9uc19mbGFnLAorICAgICAgICB9LAorICAgICAgICAu cHBzX3BpY19wYXJhbWV0ZXJfc2V0X2lkID0gcHBzLT5wcHNfaWQsCisgICAgICAgIC5wcHNfc2Vx X3BhcmFtZXRlcl9zZXRfaWQgPSBwcHMtPnNwc19pZCwKKyAgICAgICAgLnNwc192aWRlb19wYXJh bWV0ZXJfc2V0X2lkID0gc3BzLT52cHNfaWQsCisgICAgICAgIC5udW1fZXh0cmFfc2xpY2VfaGVh ZGVyX2JpdHMgPSBwcHMtPm51bV9leHRyYV9zbGljZV9oZWFkZXJfYml0cywKKyAgICAgICAgLm51 bV9yZWZfaWR4X2wwX2RlZmF1bHRfYWN0aXZlX21pbnVzMSA9IHBwcy0+bnVtX3JlZl9pZHhfbDBf ZGVmYXVsdF9hY3RpdmUgLSAxLAorICAgICAgICAubnVtX3JlZl9pZHhfbDFfZGVmYXVsdF9hY3Rp dmVfbWludXMxID0gcHBzLT5udW1fcmVmX2lkeF9sMV9kZWZhdWx0X2FjdGl2ZSAtIDEsCisgICAg ICAgIC5pbml0X3FwX21pbnVzMjYgPSBwcHMtPnBpY19pbml0X3FwX21pbnVzMjYsCisgICAgICAg IC5kaWZmX2N1X3FwX2RlbHRhX2RlcHRoID0gcHBzLT5kaWZmX2N1X3FwX2RlbHRhX2RlcHRoLAor ICAgICAgICAucHBzX2NiX3FwX29mZnNldCA9IHBwcy0+Y2JfcXBfb2Zmc2V0LAorICAgICAgICAu cHBzX2NyX3FwX29mZnNldCA9IHBwcy0+Y3JfcXBfb2Zmc2V0LAorICAgICAgICAucHBzX2JldGFf b2Zmc2V0X2RpdjIgPSBwcHMtPmJldGFfb2Zmc2V0ID4+IDEsCisgICAgICAgIC5wcHNfdGNfb2Zm c2V0X2RpdjIgPSBwcHMtPnRjX29mZnNldCA+PiAxLAorICAgICAgICAubG9nMl9wYXJhbGxlbF9t ZXJnZV9sZXZlbF9taW51czIgPSBwcHMtPmxvZzJfcGFyYWxsZWxfbWVyZ2VfbGV2ZWwgLSAyLAor ICAgICAgICAubG9nMl9tYXhfdHJhbnNmb3JtX3NraXBfYmxvY2tfc2l6ZV9taW51czIgPSBwcHMt PmxvZzJfbWF4X3RyYW5zZm9ybV9za2lwX2Jsb2NrX3NpemUgLSAyLAorICAgICAgICAuZGlmZl9j dV9jaHJvbWFfcXBfb2Zmc2V0X2RlcHRoID0gcHBzLT5kaWZmX2N1X2Nocm9tYV9xcF9vZmZzZXRf ZGVwdGgsCisgICAgICAgIC5jaHJvbWFfcXBfb2Zmc2V0X2xpc3RfbGVuX21pbnVzMSA9IHBwcy0+ Y2hyb21hX3FwX29mZnNldF9saXN0X2xlbl9taW51czEsCisgICAgICAgIC5sb2cyX3Nhb19vZmZz ZXRfc2NhbGVfbHVtYSA9IHBwcy0+bG9nMl9zYW9fb2Zmc2V0X3NjYWxlX2x1bWEsCisgICAgICAg IC5sb2cyX3Nhb19vZmZzZXRfc2NhbGVfY2hyb21hID0gcHBzLT5sb2cyX3Nhb19vZmZzZXRfc2Nh bGVfY2hyb21hLAorICAgICAgICAucHBzX2FjdF95X3FwX29mZnNldF9wbHVzNSA9IHBwcy0+cHBz X2FjdF95X3FwX29mZnNldCArIDUsCisgICAgICAgIC5wcHNfYWN0X2NiX3FwX29mZnNldF9wbHVz NSA9IHBwcy0+cHBzX2FjdF9jYl9xcF9vZmZzZXQgKyA1LAorICAgICAgICAucHBzX2FjdF9jcl9x cF9vZmZzZXRfcGx1czMgPSBwcHMtPnBwc19hY3RfY3JfcXBfb2Zmc2V0ICsgMywKKyAgICAgICAg LnBwc19udW1fcGFsZXR0ZV9wcmVkaWN0b3JfaW5pdGlhbGl6ZXJzID0gcHBzLT5wcHNfbnVtX3Bh bGV0dGVfcHJlZGljdG9yX2luaXRpYWxpemVycywKKyAgICAgICAgLmx1bWFfYml0X2RlcHRoX2Vu dHJ5X21pbnVzOCA9IHBwcy0+bHVtYV9iaXRfZGVwdGhfZW50cnkgLSA4LAorICAgICAgICAuY2hy b21hX2JpdF9kZXB0aF9lbnRyeV9taW51czggPSBwcHMtPmNocm9tYV9iaXRfZGVwdGhfZW50cnkg LSA4LAorICAgICAgICAubnVtX3RpbGVfY29sdW1uc19taW51czEgPSBwcHMtPm51bV90aWxlX2Nv bHVtbnMgLSAxLAorICAgICAgICAubnVtX3RpbGVfcm93c19taW51czEgPSBwcHMtPm51bV90aWxl X3Jvd3MgLSAxLAorICAgICAgICAucFNjYWxpbmdMaXN0cyA9IHZrcHBzX3NjYWxpbmcsCisgICAg ICAgIC5wUHJlZGljdG9yUGFsZXR0ZUVudHJpZXMgPSBwYWwsCisgICAgfTsKKworICAgIGZvciAo aW50IGkgPSAwOyBpIDwgKHBwcy0+bW9ub2Nocm9tZV9wYWxldHRlX2ZsYWcgPyAxIDogMyk7IGkr KykgeworICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHBwcy0+cHBzX251bV9wYWxldHRlX3By ZWRpY3Rvcl9pbml0aWFsaXplcnM7IGorKykKKyAgICAgICAgICAgIHBhbC0+UHJlZGljdG9yUGFs ZXR0ZUVudHJpZXNbaV1bal0gPSBwcHMtPnBwc19wYWxldHRlX3ByZWRpY3Rvcl9pbml0aWFsaXpl cltpXVtqXTsKKyAgICB9CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHBwcy0+bnVtX3RpbGVf Y29sdW1ucyAtIDE7IGkrKykKKyAgICAgICAgdmtwcHMtPmNvbHVtbl93aWR0aF9taW51czFbaV0g PSBwcHMtPmNvbHVtbl93aWR0aFtpXSAtIDE7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHBw cy0+bnVtX3RpbGVfcm93cyAtIDE7IGkrKykKKyAgICAgICAgdmtwcHMtPnJvd19oZWlnaHRfbWlu dXMxW2ldID0gcHBzLT5yb3dfaGVpZ2h0W2ldIC0gMTsKKworICAgIGZvciAoaW50IGkgPSAwOyBp IDw9IHBwcy0+Y2hyb21hX3FwX29mZnNldF9saXN0X2xlbl9taW51czE7IGkrKykgeworICAgICAg ICB2a3Bwcy0+Y2JfcXBfb2Zmc2V0X2xpc3RbaV0gPSBwcHMtPmNiX3FwX29mZnNldF9saXN0W2ld OworICAgICAgICB2a3Bwcy0+Y3JfcXBfb2Zmc2V0X2xpc3RbaV0gPSBwcHMtPmNyX3FwX29mZnNl dF9saXN0W2ldOworICAgIH0KK30KKworc3RhdGljIHZvaWQgc2V0X3Zwcyhjb25zdCBIRVZDVlBT ICp2cHMsCisgICAgICAgICAgICAgICAgICAgIFN0ZFZpZGVvSDI2NVZpZGVvUGFyYW1ldGVyU2V0 ICp2a3ZwcywKKyAgICAgICAgICAgICAgICAgICAgU3RkVmlkZW9IMjY1UHJvZmlsZVRpZXJMZXZl bCAqcHRsLAorICAgICAgICAgICAgICAgICAgICBTdGRWaWRlb0gyNjVEZWNQaWNCdWZNZ3IgKmRw Ym0sCisgICAgICAgICAgICAgICAgICAgIFN0ZFZpZGVvSDI2NUhyZFBhcmFtZXRlcnMgKnNsc19o ZHIsCisgICAgICAgICAgICAgICAgICAgIEhFVkNIZWFkZXJWUFNTZXQgc2xzW10pCit7CisgICAg Zm9yIChpbnQgaSA9IDA7IGkgPCB2cHMtPnZwc19udW1faHJkX3BhcmFtZXRlcnM7IGkrKykgewor ICAgICAgICBjb25zdCBIRVZDSGRyUGFyYW1zICpzcmMgPSAmdnBzLT5oZHJbaV07CisKKyAgICAg ICAgc2xzX2hkcltpXSA9IChTdGRWaWRlb0gyNjVIcmRQYXJhbWV0ZXJzKSB7CisgICAgICAgICAg ICAuZmxhZ3MgPSAoU3RkVmlkZW9IMjY1SHJkRmxhZ3MpIHsKKyAgICAgICAgICAgICAgICAubmFs X2hyZF9wYXJhbWV0ZXJzX3ByZXNlbnRfZmxhZyA9IHNyYy0+bmFsX2hyZF9wYXJhbWV0ZXJzX3By ZXNlbnRfZmxhZywKKyAgICAgICAgICAgICAgICAudmNsX2hyZF9wYXJhbWV0ZXJzX3ByZXNlbnRf ZmxhZyA9IHNyYy0+dmNsX2hyZF9wYXJhbWV0ZXJzX3ByZXNlbnRfZmxhZywKKyAgICAgICAgICAg ICAgICAuc3ViX3BpY19ocmRfcGFyYW1zX3ByZXNlbnRfZmxhZyA9IHNyYy0+c3ViX3BpY19ocmRf cGFyYW1zX3ByZXNlbnRfZmxhZywKKyAgICAgICAgICAgICAgICAuc3ViX3BpY19jcGJfcGFyYW1z X2luX3BpY190aW1pbmdfc2VpX2ZsYWcgPSBzcmMtPnN1Yl9waWNfY3BiX3BhcmFtc19pbl9waWNf dGltaW5nX3NlaV9mbGFnLAorICAgICAgICAgICAgICAgIC5maXhlZF9waWNfcmF0ZV9nZW5lcmFs X2ZsYWcgPSBzcmMtPmZsYWdzLmZpeGVkX3BpY19yYXRlX2dlbmVyYWxfZmxhZywKKyAgICAgICAg ICAgICAgICAuZml4ZWRfcGljX3JhdGVfd2l0aGluX2N2c19mbGFnID0gc3JjLT5mbGFncy5maXhl ZF9waWNfcmF0ZV93aXRoaW5fY3ZzX2ZsYWcsCisgICAgICAgICAgICAgICAgLmxvd19kZWxheV9o cmRfZmxhZyA9IHNyYy0+ZmxhZ3MubG93X2RlbGF5X2hyZF9mbGFnLAorICAgICAgICAgICAgfSwK KyAgICAgICAgICAgIC50aWNrX2Rpdmlzb3JfbWludXMyID0gc3JjLT50aWNrX2Rpdmlzb3JfbWlu dXMyLAorICAgICAgICAgICAgLmR1X2NwYl9yZW1vdmFsX2RlbGF5X2luY3JlbWVudF9sZW5ndGhf bWludXMxID0gc3JjLT5kdV9jcGJfcmVtb3ZhbF9kZWxheV9pbmNyZW1lbnRfbGVuZ3RoX21pbnVz MSwKKyAgICAgICAgICAgIC5kcGJfb3V0cHV0X2RlbGF5X2R1X2xlbmd0aF9taW51czEgPSBzcmMt PmRwYl9vdXRwdXRfZGVsYXlfZHVfbGVuZ3RoX21pbnVzMSwKKyAgICAgICAgICAgIC5iaXRfcmF0 ZV9zY2FsZSA9IHNyYy0+Yml0X3JhdGVfc2NhbGUsCisgICAgICAgICAgICAuY3BiX3NpemVfc2Nh bGUgPSBzcmMtPmNwYl9zaXplX3NjYWxlLAorICAgICAgICAgICAgLmNwYl9zaXplX2R1X3NjYWxl ID0gc3JjLT5jcGJfc2l6ZV9kdV9zY2FsZSwKKyAgICAgICAgICAgIC5pbml0aWFsX2NwYl9yZW1v dmFsX2RlbGF5X2xlbmd0aF9taW51czEgPSBzcmMtPmluaXRpYWxfY3BiX3JlbW92YWxfZGVsYXlf bGVuZ3RoX21pbnVzMSwKKyAgICAgICAgICAgIC5hdV9jcGJfcmVtb3ZhbF9kZWxheV9sZW5ndGhf bWludXMxID0gc3JjLT5hdV9jcGJfcmVtb3ZhbF9kZWxheV9sZW5ndGhfbWludXMxLAorICAgICAg ICAgICAgLmRwYl9vdXRwdXRfZGVsYXlfbGVuZ3RoX21pbnVzMSA9IHNyYy0+ZHBiX291dHB1dF9k ZWxheV9sZW5ndGhfbWludXMxLAorICAgICAgICAgICAgLyogUmVzZXJ2ZWQgLSAzKjE2IGJpdHMg Ki8KKyAgICAgICAgICAgIC5wU3ViTGF5ZXJIcmRQYXJhbWV0ZXJzTmFsID0gc2xzW2ldLm5hbF9o ZHIsCisgICAgICAgICAgICAucFN1YkxheWVySHJkUGFyYW1ldGVyc1ZjbCA9IHNsc1tpXS52Y2xf aGRyLAorICAgICAgICB9OworCisgICAgICAgIG1lbWNweShzbHNfaGRyW2ldLmNwYl9jbnRfbWlu dXMxLCBzcmMtPmNwYl9jbnRfbWludXMxLAorICAgICAgICAgICAgICAgU1REX1ZJREVPX0gyNjVf U1VCTEFZRVJTX0xJU1RfU0laRSpzaXplb2YoKnNsc19oZHJbaV0uY3BiX2NudF9taW51czEpKTsK KyAgICAgICAgbWVtY3B5KHNsc19oZHJbaV0uZWxlbWVudGFsX2R1cmF0aW9uX2luX3RjX21pbnVz MSwgc3JjLT5lbGVtZW50YWxfZHVyYXRpb25faW5fdGNfbWludXMxLAorICAgICAgICAgICAgICAg U1REX1ZJREVPX0gyNjVfU1VCTEFZRVJTX0xJU1RfU0laRSpzaXplb2YoKnNsc19oZHJbaV0uZWxl bWVudGFsX2R1cmF0aW9uX2luX3RjX21pbnVzMSkpOworCisgICAgICAgIG1lbWNweShzbHNbaV0u bmFsX2hkciwgc3JjLT5uYWxfcGFyYW1zLCBIRVZDX01BWF9TVUJfTEFZRVJTKnNpemVvZigqc2xz W2ldLm5hbF9oZHIpKTsKKyAgICAgICAgbWVtY3B5KHNsc1tpXS52Y2xfaGRyLCBzcmMtPnZjbF9w YXJhbXMsIEhFVkNfTUFYX1NVQl9MQVlFUlMqc2l6ZW9mKCpzbHNbaV0udmNsX2hkcikpOworICAg IH0KKworICAgICpwdGwgPSAoU3RkVmlkZW9IMjY1UHJvZmlsZVRpZXJMZXZlbCkgeworICAgICAg ICAuZmxhZ3MgPSAoU3RkVmlkZW9IMjY1UHJvZmlsZVRpZXJMZXZlbEZsYWdzKSB7CisgICAgICAg ICAgICAuZ2VuZXJhbF90aWVyX2ZsYWcgPSB2cHMtPnB0bC5nZW5lcmFsX3B0bC50aWVyX2ZsYWcs CisgICAgICAgICAgICAuZ2VuZXJhbF9wcm9ncmVzc2l2ZV9zb3VyY2VfZmxhZyA9IHZwcy0+cHRs LmdlbmVyYWxfcHRsLnByb2dyZXNzaXZlX3NvdXJjZV9mbGFnLAorICAgICAgICAgICAgLmdlbmVy YWxfaW50ZXJsYWNlZF9zb3VyY2VfZmxhZyA9IHZwcy0+cHRsLmdlbmVyYWxfcHRsLmludGVybGFj ZWRfc291cmNlX2ZsYWcsCisgICAgICAgICAgICAuZ2VuZXJhbF9ub25fcGFja2VkX2NvbnN0cmFp bnRfZmxhZyA9IHZwcy0+cHRsLmdlbmVyYWxfcHRsLm5vbl9wYWNrZWRfY29uc3RyYWludF9mbGFn LAorICAgICAgICAgICAgLmdlbmVyYWxfZnJhbWVfb25seV9jb25zdHJhaW50X2ZsYWcgPSB2cHMt PnB0bC5nZW5lcmFsX3B0bC5mcmFtZV9vbmx5X2NvbnN0cmFpbnRfZmxhZywKKyAgICAgICAgfSwK KyAgICAgICAgLmdlbmVyYWxfcHJvZmlsZV9pZGMgPSBmZl92a19oMjY1X3Byb2ZpbGVfdG9fdmso dnBzLT5wdGwuZ2VuZXJhbF9wdGwucHJvZmlsZV9pZGMpLAorICAgICAgICAuZ2VuZXJhbF9sZXZl bF9pZGMgPSBmZl92a19oMjY1X2xldmVsX3RvX3ZrKHZwcy0+cHRsLmdlbmVyYWxfcHRsLmxldmVs X2lkYyksCisgICAgfTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdnBzLT52cHNfbWF4X3N1 Yl9sYXllcnM7IGkrKykgeworICAgICAgICBkcGJtLT5tYXhfbGF0ZW5jeV9pbmNyZWFzZV9wbHVz MVtpXSA9IHZwcy0+dnBzX21heF9sYXRlbmN5X2luY3JlYXNlW2ldICsgMTsKKyAgICAgICAgZHBi bS0+bWF4X2RlY19waWNfYnVmZmVyaW5nX21pbnVzMVtpXSA9IHZwcy0+dnBzX21heF9kZWNfcGlj X2J1ZmZlcmluZ1tpXSAtIDE7CisgICAgICAgIGRwYm0tPm1heF9udW1fcmVvcmRlcl9waWNzW2ld ID0gdnBzLT52cHNfbnVtX3Jlb3JkZXJfcGljc1tpXTsKKyAgICB9CisKKyAgICAqdmt2cHMgPSAo U3RkVmlkZW9IMjY1VmlkZW9QYXJhbWV0ZXJTZXQpIHsKKyAgICAgICAgLmZsYWdzID0gKFN0ZFZp ZGVvSDI2NVZwc0ZsYWdzKSB7CisgICAgICAgICAgICAudnBzX3RlbXBvcmFsX2lkX25lc3Rpbmdf ZmxhZyA9IHZwcy0+dnBzX3RlbXBvcmFsX2lkX25lc3RpbmdfZmxhZywKKyAgICAgICAgICAgIC52 cHNfc3ViX2xheWVyX29yZGVyaW5nX2luZm9fcHJlc2VudF9mbGFnID0gdnBzLT52cHNfc3ViX2xh eWVyX29yZGVyaW5nX2luZm9fcHJlc2VudF9mbGFnLAorICAgICAgICAgICAgLnZwc190aW1pbmdf aW5mb19wcmVzZW50X2ZsYWcgPSB2cHMtPnZwc190aW1pbmdfaW5mb19wcmVzZW50X2ZsYWcsCisg ICAgICAgICAgICAudnBzX3BvY19wcm9wb3J0aW9uYWxfdG9fdGltaW5nX2ZsYWcgPSB2cHMtPnZw c19wb2NfcHJvcG9ydGlvbmFsX3RvX3RpbWluZ19mbGFnLAorICAgICAgICB9LAorICAgICAgICAu dnBzX3ZpZGVvX3BhcmFtZXRlcl9zZXRfaWQgPSB2cHMtPnZwc19pZCwKKyAgICAgICAgLnZwc19t YXhfc3ViX2xheWVyc19taW51czEgPSB2cHMtPnZwc19tYXhfc3ViX2xheWVycyAtIDEsCisgICAg ICAgIC8qIFJlc2VydmVkICovCisgICAgICAgIC8qIFJlc2VydmVkICovCisgICAgICAgIC52cHNf bnVtX3VuaXRzX2luX3RpY2sgPSB2cHMtPnZwc19udW1fdW5pdHNfaW5fdGljaywKKyAgICAgICAg LnZwc190aW1lX3NjYWxlID0gdnBzLT52cHNfdGltZV9zY2FsZSwKKyAgICAgICAgLnZwc19udW1f dGlja3NfcG9jX2RpZmZfb25lX21pbnVzMSA9IHZwcy0+dnBzX251bV90aWNrc19wb2NfZGlmZl9v bmUgLSAxLAorICAgICAgICAvKiBSZXNlcnZlZCAqLworICAgICAgICAucERlY1BpY0J1Zk1nciA9 IGRwYm0sCisgICAgICAgIC5wSHJkUGFyYW1ldGVycyA9IHNsc19oZHIsCisgICAgICAgIC5wUHJv ZmlsZVRpZXJMZXZlbCA9IHB0bCwKKyAgICB9OworfQorCitzdGF0aWMgaW50IHZrX2hldmNfY3Jl YXRlX3BhcmFtcyhBVkNvZGVjQ29udGV4dCAqYXZjdHgsIEFWQnVmZmVyUmVmICoqYnVmKQorewor ICAgIGludCBlcnI7CisgICAgY29uc3QgSEVWQ0NvbnRleHQgKmggPSBhdmN0eC0+cHJpdl9kYXRh OworICAgIEZGVnVsa2FuRGVjb2RlQ29udGV4dCAqZGVjID0gYXZjdHgtPmludGVybmFsLT5od2Fj Y2VsX3ByaXZfZGF0YTsKKyAgICBGRlZ1bGthbkRlY29kZVNoYXJlZCAqY3R4ID0gZGVjLT5zaGFy ZWRfY3R4OworCisgICAgVmtWaWRlb0RlY29kZUgyNjVTZXNzaW9uUGFyYW1ldGVyc0FkZEluZm9L SFIgaDI2NV9wYXJhbXNfaW5mbyA9IHsKKyAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZ UEVfVklERU9fREVDT0RFX0gyNjVfU0VTU0lPTl9QQVJBTUVURVJTX0FERF9JTkZPX0tIUiwKKyAg ICAgICAgLnN0ZFNQU0NvdW50ID0gMCwKKyAgICAgICAgLnN0ZFBQU0NvdW50ID0gMCwKKyAgICAg ICAgLnN0ZFZQU0NvdW50ID0gMCwKKyAgICB9OworICAgIFZrVmlkZW9EZWNvZGVIMjY1U2Vzc2lv blBhcmFtZXRlcnNDcmVhdGVJbmZvS0hSIGgyNjVfcGFyYW1zID0geworICAgICAgICAuc1R5cGUg PSBWS19TVFJVQ1RVUkVfVFlQRV9WSURFT19ERUNPREVfSDI2NV9TRVNTSU9OX1BBUkFNRVRFUlNf Q1JFQVRFX0lORk9fS0hSLAorICAgICAgICAucFBhcmFtZXRlcnNBZGRJbmZvID0gJmgyNjVfcGFy YW1zX2luZm8sCisgICAgfTsKKyAgICBWa1ZpZGVvU2Vzc2lvblBhcmFtZXRlcnNDcmVhdGVJbmZv S0hSIHNlc3Npb25fcGFyYW1zX2NyZWF0ZSA9IHsKKyAgICAgICAgLnNUeXBlID0gVktfU1RSVUNU VVJFX1RZUEVfVklERU9fU0VTU0lPTl9QQVJBTUVURVJTX0NSRUFURV9JTkZPX0tIUiwKKyAgICAg ICAgLnBOZXh0ID0gJmgyNjVfcGFyYW1zLAorICAgICAgICAudmlkZW9TZXNzaW9uID0gY3R4LT5j b21tb24uc2Vzc2lvbiwKKyAgICAgICAgLnZpZGVvU2Vzc2lvblBhcmFtZXRlcnNUZW1wbGF0ZSA9 IFZLX05VTExfSEFORExFLAorICAgIH07CisKKyAgICBIRVZDSGVhZGVyU2V0ICpoZHI7CisgICAg aW50IG5iX3ZwcyA9IDA7CisgICAgaW50IHZwc19saXN0X2lkeFtIRVZDX01BWF9WUFNfQ09VTlRd OworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBIRVZDX01BWF9WUFNfQ09VTlQ7IGkrKykKKyAg ICAgICAgaWYgKGgtPnBzLnZwc19saXN0W2ldKQorICAgICAgICAgICAgdnBzX2xpc3RfaWR4W25i X3ZwcysrXSA9IGk7CisKKyAgICBlcnIgPSBhbGxvY19oZXZjX2hlYWRlcl9zdHJ1Y3RzKGRlYywg bmJfdnBzLCB2cHNfbGlzdF9pZHgsIGgtPnBzLnZwc19saXN0KTsKKyAgICBpZiAoZXJyIDwgMCkK KyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIGhkciA9IGRlYy0+aGV2Y19oZWFkZXJzOworCisg ICAgaDI2NV9wYXJhbXNfaW5mby5wU3RkU1BTcyA9IGhkci0+c3BzOworICAgIGgyNjVfcGFyYW1z X2luZm8ucFN0ZFBQU3MgPSBoZHItPnBwczsKKyAgICBoMjY1X3BhcmFtc19pbmZvLnBTdGRWUFNz ID0gaGRyLT52cHM7CisKKyAgICAvKiBTUFMgbGlzdCAqLworICAgIGZvciAoaW50IGkgPSAwOyBp IDwgSEVWQ19NQVhfU1BTX0NPVU5UOyBpKyspIHsKKyAgICAgICAgaWYgKGgtPnBzLnNwc19saXN0 W2ldKSB7CisgICAgICAgICAgICBjb25zdCBIRVZDU1BTICpzcHNfbCA9IGgtPnBzLnNwc19saXN0 W2ldOworICAgICAgICAgICAgaW50IGlkeCA9IGgyNjVfcGFyYW1zX2luZm8uc3RkU1BTQ291bnQr KzsKKyAgICAgICAgICAgIHNldF9zcHMoc3BzX2wsIGksICZoZHItPmhzcHNbaWR4XS5zY2FsaW5n LCAmaGRyLT5oc3BzW2lkeF0udnVpX2hlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgJmhkci0+ aHNwc1tpZHhdLnZ1aSwgJmhkci0+c3BzW2lkeF0sIGhkci0+aHNwc1tpZHhdLm5hbF9oZHIsCisg ICAgICAgICAgICAgICAgICAgIGhkci0+aHNwc1tpZHhdLnZjbF9oZHIsICZoZHItPmhzcHNbaWR4 XS5wdGwsICZoZHItPmhzcHNbaWR4XS5kcGJtLAorICAgICAgICAgICAgICAgICAgICAmaGRyLT5o c3BzW2lkeF0ucGFsLCBoZHItPmhzcHNbaWR4XS5zdHIsICZoZHItPmhzcHNbaWR4XS5sdHIpOwor ICAgICAgICB9CisgICAgfQorCisgICAgLyogUFBTIGxpc3QgKi8KKyAgICBmb3IgKGludCBpID0g MDsgaSA8IEhFVkNfTUFYX1BQU19DT1VOVDsgaSsrKSB7CisgICAgICAgIGlmIChoLT5wcy5wcHNf bGlzdFtpXSkgeworICAgICAgICAgICAgY29uc3QgSEVWQ1BQUyAqcHBzX2wgPSBoLT5wcy5wcHNf bGlzdFtpXTsKKyAgICAgICAgICAgIGNvbnN0IEhFVkNTUFMgKnNwc19sID0gaC0+cHMuc3BzX2xp c3RbcHBzX2wtPnNwc19pZF07CisgICAgICAgICAgICBpbnQgaWR4ID0gaDI2NV9wYXJhbXNfaW5m by5zdGRQUFNDb3VudCsrOworICAgICAgICAgICAgc2V0X3BwcyhwcHNfbCwgc3BzX2wsICZoZHIt PmhwcHNbaWR4XS5zY2FsaW5nLAorICAgICAgICAgICAgICAgICAgICAmaGRyLT5wcHNbaWR4XSwg Jmhkci0+aHBwc1tpZHhdLnBhbCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBWUFMgbGlz dCAqLworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmJfdnBzOyBpKyspIHsKKyAgICAgICAgY29u c3QgSEVWQ1ZQUyAqdnBzX2wgPSBoLT5wcy52cHNfbGlzdFt2cHNfbGlzdF9pZHhbaV1dOworICAg ICAgICBzZXRfdnBzKHZwc19sLCAmaGRyLT52cHNbaV0sICZoZHItPmh2cHNbaV0ucHRsLCAmaGRy LT5odnBzW2ldLmRwYm0sCisgICAgICAgICAgICAgICAgaGRyLT5odnBzW2ldLmhkciwgaGRyLT5o dnBzW2ldLnNscyk7CisgICAgICAgIGgyNjVfcGFyYW1zX2luZm8uc3RkVlBTQ291bnQrKzsKKyAg ICB9CisKKyAgICBoMjY1X3BhcmFtcy5tYXhTdGRTUFNDb3VudCA9IGgyNjVfcGFyYW1zX2luZm8u c3RkU1BTQ291bnQ7CisgICAgaDI2NV9wYXJhbXMubWF4U3RkUFBTQ291bnQgPSBoMjY1X3BhcmFt c19pbmZvLnN0ZFBQU0NvdW50OworICAgIGgyNjVfcGFyYW1zLm1heFN0ZFZQU0NvdW50ID0gaDI2 NV9wYXJhbXNfaW5mby5zdGRWUFNDb3VudDsKKworICAgIGVyciA9IGZmX3ZrX2RlY29kZV9jcmVh dGVfcGFyYW1zKGJ1ZiwgYXZjdHgsIGN0eCwgJnNlc3Npb25fcGFyYW1zX2NyZWF0ZSk7CisgICAg aWYgKGVyciA8IDApCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICBhdl9sb2coYXZjdHgsIEFW X0xPR19ERUJVRywgIkNyZWF0ZWQgZnJhbWUgcGFyYW1ldGVyczogJWkgU1BTICVpIFBQUyAlaSBW UFNcbiIsCisgICAgICAgICAgIGgyNjVfcGFyYW1zX2luZm8uc3RkU1BTQ291bnQsIGgyNjVfcGFy YW1zX2luZm8uc3RkUFBTQ291bnQsCisgICAgICAgICAgIGgyNjVfcGFyYW1zX2luZm8uc3RkVlBT Q291bnQpOworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmtfaGV2Y19zdGFydF9m cmFtZShBVkNvZGVjQ29udGV4dCAgICAgICAgICAqYXZjdHgsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgYXZfdW51c2VkIGNvbnN0IEFWQnVmZmVyUmVmICpidWZmZXJfcmVmLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2X3VudXNlZCBjb25zdCB1aW50OF90ICpidWZm ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZfdW51c2VkIHVpbnQzMl90ICAg ICAgIHNpemUpCit7CisgICAgaW50IGVycjsKKyAgICBIRVZDQ29udGV4dCAqaCA9IGF2Y3R4LT5w cml2X2RhdGE7CisgICAgSEVWQ0xheWVyQ29udGV4dCAqbCA9ICZoLT5sYXllcnNbaC0+Y3VyX2xh eWVyXTsKKworICAgIEhFVkNGcmFtZSAqcGljID0gaC0+Y3VyX2ZyYW1lOworICAgIEhFVkNWdWxr YW5EZWNvZGVQaWN0dXJlICpocCA9IHBpYy0+aHdhY2NlbF9waWN0dXJlX3ByaXZhdGU7CisgICAg RkZWdWxrYW5EZWNvZGVQaWN0dXJlICp2cCA9ICZocC0+dnA7CisgICAgY29uc3QgSEVWQ1BQUyAq cHBzID0gaC0+cHBzOworICAgIGNvbnN0IEhFVkNTUFMgKnNwcyA9IHBwcy0+c3BzOworICAgIGlu dCBuYl9yZWZzID0gMDsKKworICAgIGhwLT5oMjY1cGljID0gKFN0ZFZpZGVvRGVjb2RlSDI2NVBp Y3R1cmVJbmZvKSB7CisgICAgICAgIC5mbGFncyA9IChTdGRWaWRlb0RlY29kZUgyNjVQaWN0dXJl SW5mb0ZsYWdzKSB7CisgICAgICAgICAgICAuSXJhcFBpY0ZsYWcgPSBJU19JUkFQKGgpLAorICAg ICAgICAgICAgLklkclBpY0ZsYWcgPSBJU19JRFIoaCksCisgICAgICAgICAgICAuSXNSZWZlcmVu Y2UgPSBoLT5uYWxfdW5pdF90eXBlIDwgMTYgPyBoLT5uYWxfdW5pdF90eXBlICYgMSA6IDEsCisg ICAgICAgICAgICAuc2hvcnRfdGVybV9yZWZfcGljX3NldF9zcHNfZmxhZyA9IGgtPnNoLnNob3J0 X3Rlcm1fcmVmX3BpY19zZXRfc3BzX2ZsYWcsCisgICAgICAgIH0sCisgICAgICAgIC5zcHNfdmlk ZW9fcGFyYW1ldGVyX3NldF9pZCA9IHNwcy0+dnBzX2lkLAorICAgICAgICAucHBzX3NlcV9wYXJh bWV0ZXJfc2V0X2lkID0gcHBzLT5zcHNfaWQsCisgICAgICAgIC5wcHNfcGljX3BhcmFtZXRlcl9z ZXRfaWQgPSBwcHMtPnBwc19pZCwKKyAgICAgICAgLk51bURlbHRhUG9jc09mUmVmUnBzSWR4ID0g aC0+c2guc2hvcnRfdGVybV9ycHMgPyBoLT5zaC5zaG9ydF90ZXJtX3Jwcy0+cnBzX2lkeF9udW1f ZGVsdGFfcG9jcyA6IDAsCisgICAgICAgIC5QaWNPcmRlckNudFZhbCA9IGgtPnBvYywKKyAgICAg ICAgLk51bUJpdHNGb3JTVFJlZlBpY1NldEluU2xpY2UgPSAhaC0+c2guc2hvcnRfdGVybV9yZWZf cGljX3NldF9zcHNfZmxhZyA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGgtPnNoLnNob3J0X3Rlcm1fcmVmX3BpY19zZXRfc2l6ZSA6IDAsCisgICAgfTsKKworICAg IC8qIEZpbGwgaW4gcmVmZXJlbmNlcyAqLworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgRkZfQVJS QVlfRUxFTVMobC0+RFBCKTsgaSsrKSB7CisgICAgICAgIGNvbnN0IEhFVkNGcmFtZSAqcmVmID0g JmwtPkRQQltpXTsKKyAgICAgICAgaW50IGlkeCA9IG5iX3JlZnM7CisKKyAgICAgICAgaWYgKCEo cmVmLT5mbGFncyAmIChIRVZDX0ZSQU1FX0ZMQUdfU0hPUlRfUkVGIHwgSEVWQ19GUkFNRV9GTEFH X0xPTkdfUkVGKSkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAocmVmID09 IHBpYykgeworICAgICAgICAgICAgZXJyID0gdmtfaGV2Y19maWxsX3BpY3QoYXZjdHgsIE5VTEws ICZ2cC0+cmVmX3Nsb3QsICZ2cC0+cmVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJmhwLT52a2gyNjVfcmVmLCAmaHAtPmgyNjVfcmVmLCBwaWMsIDEsIGkpOworICAgICAg ICAgICAgaWYgKGVyciA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKKworICAgICAg ICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBlcnIgPSB2a19oZXZjX2ZpbGxf cGljdChhdmN0eCwgJmhwLT5yZWZfc3JjW2lkeF0sICZ2cC0+cmVmX3Nsb3RzW2lkeF0sCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ2cC0+cmVmc1tpZHhdLCAmaHAtPnZraDI2NV9y ZWZzW2lkeF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZocC0+aDI2NV9yZWZz W2lkeF0sIChIRVZDRnJhbWUgKilyZWYsIDAsIGkpOworICAgICAgICBpZiAoZXJyIDwgMCkKKyAg ICAgICAgICAgIHJldHVybiBlcnI7CisKKyAgICAgICAgbmJfcmVmcysrOworICAgIH0KKworICAg IG1lbXNldChocC0+aDI2NXBpYy5SZWZQaWNTZXRTdEN1cnJCZWZvcmUsIDB4ZmYsIDgpOworICAg IGZvciAoaW50IGkgPSAwOyBpIDwgaC0+cnBzW1NUX0NVUlJfQkVGXS5uYl9yZWZzOyBpKyspIHsK KyAgICAgICAgSEVWQ0ZyYW1lICpmcmFtZSA9IGgtPnJwc1tTVF9DVVJSX0JFRl0ucmVmW2ldOwor ICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IEZGX0FSUkFZX0VMRU1TKGwtPkRQQik7IGorKykg eworICAgICAgICAgICAgY29uc3QgSEVWQ0ZyYW1lICpyZWYgPSAmbC0+RFBCW2pdOworICAgICAg ICAgICAgaWYgKHJlZiA9PSBmcmFtZSkgeworICAgICAgICAgICAgICAgIGhwLT5oMjY1cGljLlJl ZlBpY1NldFN0Q3VyckJlZm9yZVtpXSA9IGo7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgbWVtc2V0KGhwLT5oMjY1cGljLlJlZlBp Y1NldFN0Q3VyckFmdGVyLCAweGZmLCA4KTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGgtPnJw c1tTVF9DVVJSX0FGVF0ubmJfcmVmczsgaSsrKSB7CisgICAgICAgIEhFVkNGcmFtZSAqZnJhbWUg PSBoLT5ycHNbU1RfQ1VSUl9BRlRdLnJlZltpXTsKKyAgICAgICAgZm9yIChpbnQgaiA9IDA7IGog PCBGRl9BUlJBWV9FTEVNUyhsLT5EUEIpOyBqKyspIHsKKyAgICAgICAgICAgIGNvbnN0IEhFVkNG cmFtZSAqcmVmID0gJmwtPkRQQltqXTsKKyAgICAgICAgICAgIGlmIChyZWYgPT0gZnJhbWUpIHsK KyAgICAgICAgICAgICAgICBocC0+aDI2NXBpYy5SZWZQaWNTZXRTdEN1cnJBZnRlcltpXSA9IGo7 CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9 CisgICAgbWVtc2V0KGhwLT5oMjY1cGljLlJlZlBpY1NldEx0Q3VyciwgMHhmZiwgOCk7CisgICAg Zm9yIChpbnQgaSA9IDA7IGkgPCBoLT5ycHNbTFRfQ1VSUl0ubmJfcmVmczsgaSsrKSB7CisgICAg ICAgIEhFVkNGcmFtZSAqZnJhbWUgPSBoLT5ycHNbTFRfQ1VSUl0ucmVmW2ldOworICAgICAgICBm b3IgKGludCBqID0gMDsgaiA8IEZGX0FSUkFZX0VMRU1TKGwtPkRQQik7IGorKykgeworICAgICAg ICAgICAgY29uc3QgSEVWQ0ZyYW1lICpyZWYgPSAmbC0+RFBCW2pdOworICAgICAgICAgICAgaWYg KHJlZiA9PSBmcmFtZSkgeworICAgICAgICAgICAgICAgIGhwLT5oMjY1cGljLlJlZlBpY1NldEx0 Q3VycltpXSA9IGo7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg ICAgIH0KKyAgICB9CisKKyAgICBocC0+aDI2NV9waWNfaW5mbyA9IChWa1ZpZGVvRGVjb2RlSDI2 NVBpY3R1cmVJbmZvS0hSKSB7CisgICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX1ZJ REVPX0RFQ09ERV9IMjY1X1BJQ1RVUkVfSU5GT19LSFIsCisgICAgICAgIC5wU3RkUGljdHVyZUlu Zm8gPSAmaHAtPmgyNjVwaWMsCisgICAgICAgIC5zbGljZVNlZ21lbnRDb3VudCA9IDAsCisgICAg fTsKKworICAgIHZwLT5kZWNvZGVfaW5mbyA9IChWa1ZpZGVvRGVjb2RlSW5mb0tIUikgeworICAg ICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9WSURFT19ERUNPREVfSU5GT19LSFIsCisg ICAgICAgIC5wTmV4dCA9ICZocC0+aDI2NV9waWNfaW5mbywKKyAgICAgICAgLmZsYWdzID0gMHgw LAorICAgICAgICAucFNldHVwUmVmZXJlbmNlU2xvdCA9ICZ2cC0+cmVmX3Nsb3QsCisgICAgICAg IC5yZWZlcmVuY2VTbG90Q291bnQgPSBuYl9yZWZzLAorICAgICAgICAucFJlZmVyZW5jZVNsb3Rz ID0gdnAtPnJlZl9zbG90cywKKyAgICAgICAgLmRzdFBpY3R1cmVSZXNvdXJjZSA9IChWa1ZpZGVv UGljdHVyZVJlc291cmNlSW5mb0tIUikgeworICAgICAgICAgICAgLnNUeXBlID0gVktfU1RSVUNU VVJFX1RZUEVfVklERU9fUElDVFVSRV9SRVNPVVJDRV9JTkZPX0tIUiwKKyAgICAgICAgICAgIC5j b2RlZE9mZnNldCA9IChWa09mZnNldDJEKXsgMCwgMCB9LAorICAgICAgICAgICAgLmNvZGVkRXh0 ZW50ID0gKFZrRXh0ZW50MkQpeyBwaWMtPmYtPndpZHRoLCBwaWMtPmYtPmhlaWdodCB9LAorICAg ICAgICAgICAgLmJhc2VBcnJheUxheWVyID0gMCwKKyAgICAgICAgICAgIC5pbWFnZVZpZXdCaW5k aW5nID0gdnAtPnZpZXcub3V0WzBdLAorICAgICAgICB9LAorICAgIH07CisKKyAgICByZXR1cm4g MDsKK30KKworc3RhdGljIGludCB2a19oZXZjX2RlY29kZV9zbGljZShBVkNvZGVjQ29udGV4dCAq YXZjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgICpk YXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAgICAgICAgc2l6 ZSkKK3sKKyAgICBjb25zdCBIRVZDQ29udGV4dCAqaCA9IGF2Y3R4LT5wcml2X2RhdGE7CisgICAg SEVWQ1Z1bGthbkRlY29kZVBpY3R1cmUgKmhwID0gaC0+Y3VyX2ZyYW1lLT5od2FjY2VsX3BpY3R1 cmVfcHJpdmF0ZTsKKyAgICBGRlZ1bGthbkRlY29kZVBpY3R1cmUgKnZwID0gJmhwLT52cDsKKwor ICAgIGludCBlcnIgPSBmZl92a19kZWNvZGVfYWRkX3NsaWNlKGF2Y3R4LCB2cCwgZGF0YSwgc2l6 ZSwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaHAtPmgyNjVfcGlj X2luZm8uc2xpY2VTZWdtZW50Q291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJmhwLT5oMjY1X3BpY19pbmZvLnBTbGljZVNlZ21lbnRPZmZzZXRzKTsKKyAgICBpZiAo ZXJyIDwgMCkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIHJldHVybiAwOworfQorCitzdGF0 aWMgaW50IHZrX2hldmNfZW5kX2ZyYW1lKEFWQ29kZWNDb250ZXh0ICphdmN0eCkKK3sKKyAgICBj b25zdCBIRVZDQ29udGV4dCAqaCA9IGF2Y3R4LT5wcml2X2RhdGE7CisgICAgRkZWdWxrYW5EZWNv ZGVDb250ZXh0ICpkZWMgPSBhdmN0eC0+aW50ZXJuYWwtPmh3YWNjZWxfcHJpdl9kYXRhOworICAg IEZGVnVsa2FuRGVjb2RlU2hhcmVkICpjdHggPSBkZWMtPnNoYXJlZF9jdHg7CisKKyAgICBIRVZD RnJhbWUgKnBpYyA9IGgtPmN1cl9mcmFtZTsKKyAgICBIRVZDVnVsa2FuRGVjb2RlUGljdHVyZSAq aHAgPSBwaWMtPmh3YWNjZWxfcGljdHVyZV9wcml2YXRlOworICAgIEZGVnVsa2FuRGVjb2RlUGlj dHVyZSAqdnAgPSAmaHAtPnZwOworICAgIEZGVnVsa2FuRGVjb2RlUGljdHVyZSAqcnZwW0hFVkNf TUFYX1JFRlNdID0geyAwIH07CisgICAgQVZGcmFtZSAqcmF2W0hFVkNfTUFYX1JFRlNdID0geyAw IH07CisgICAgaW50IGVycjsKKworICAgIGNvbnN0IEhFVkNQUFMgKnBwcyA9IGgtPnBwczsKKyAg ICBjb25zdCBIRVZDU1BTICpzcHMgPSBwcHMtPnNwczsKKworI2lmZGVmIFZLX0tIUl92aWRlb19t YWludGVuYW5jZTIKKyAgICBIRVZDSGVhZGVyUFBTIHZrcHBzX3A7CisgICAgU3RkVmlkZW9IMjY1 UGljdHVyZVBhcmFtZXRlclNldCB2a3BwczsKKyAgICBIRVZDSGVhZGVyU1BTIHZrc3BzX3A7Cisg ICAgU3RkVmlkZW9IMjY1U2VxdWVuY2VQYXJhbWV0ZXJTZXQgdmtzcHM7CisgICAgSEVWQ0hlYWRl clZQU1NldCB2a3Zwc19wc1tIRVZDX01BWF9TVUJfTEFZRVJTXTsKKyAgICBIRVZDSGVhZGVyVlBT IHZrdnBzX3A7CisgICAgU3RkVmlkZW9IMjY1VmlkZW9QYXJhbWV0ZXJTZXQgdmt2cHM7CisgICAg VmtWaWRlb0RlY29kZUgyNjVJbmxpbmVTZXNzaW9uUGFyYW1ldGVyc0luZm9LSFIgaDI2NV9wYXJh bXM7CisKKyAgICBpZiAoY3R4LT5zLmV4dGVuc2lvbnMgJiBGRl9WS19FWFRfVklERU9fTUFJTlRF TkFOQ0VfMikgeworICAgICAgICBzZXRfcHBzKHBwcywgc3BzLCAmdmtwcHNfcC5zY2FsaW5nLCAm dmtwcHMsICZ2a3Bwc19wLnBhbCk7CisgICAgICAgIHNldF9zcHMoc3BzLCBwcHMtPnNwc19pZCwg JnZrc3BzX3Auc2NhbGluZywgJnZrc3BzX3AudnVpX2hlYWRlciwKKyAgICAgICAgICAgICAgICAm dmtzcHNfcC52dWksICZ2a3NwcywgdmtzcHNfcC5uYWxfaGRyLAorICAgICAgICAgICAgICAgIHZr c3BzX3AudmNsX2hkciwgJnZrc3BzX3AucHRsLCAmdmtzcHNfcC5kcGJtLAorICAgICAgICAgICAg ICAgICZ2a3Nwc19wLnBhbCwgdmtzcHNfcC5zdHIsICZ2a3Nwc19wLmx0cik7CisKKyAgICAgICAg dmt2cHNfcC5zbHMgPSB2a3Zwc19wczsKKyAgICAgICAgc2V0X3ZwcyhzcHMtPnZwcywgJnZrdnBz LCAmdmt2cHNfcC5wdGwsICZ2a3Zwc19wLmRwYm0sCisgICAgICAgICAgICAgICAgdmt2cHNfcC5o ZHIsIHZrdnBzX3Auc2xzKTsKKworICAgICAgICBoMjY1X3BhcmFtcyA9IChWa1ZpZGVvRGVjb2Rl SDI2NUlubGluZVNlc3Npb25QYXJhbWV0ZXJzSW5mb0tIUikgeworICAgICAgICAgICAgLnNUeXBl ID0gVktfU1RSVUNUVVJFX1RZUEVfVklERU9fREVDT0RFX0gyNjVfSU5MSU5FX1NFU1NJT05fUEFS QU1FVEVSU19JTkZPX0tIUiwKKyAgICAgICAgICAgIC5wU3RkU1BTID0gJnZrc3BzLAorICAgICAg ICAgICAgLnBTdGRQUFMgPSAmdmtwcHMsCisgICAgICAgICAgICAucFN0ZFZQUyA9ICZ2a3ZwcywK KyAgICAgICAgfTsKKyAgICAgICAgaHAtPmgyNjVfcGljX2luZm8ucE5leHQgPSAmaDI2NV9wYXJh bXM7CisgICAgfQorI2VuZGlmCisKKyAgICBpZiAoIWhwLT5oMjY1X3BpY19pbmZvLnNsaWNlU2Vn bWVudENvdW50KQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmICghZGVjLT5zZXNzaW9uX3Bh cmFtcyAmJgorICAgICAgICAhKGN0eC0+cy5leHRlbnNpb25zICYgRkZfVktfRVhUX1ZJREVPX01B SU5URU5BTkNFXzIpKSB7CisgICAgICAgIGlmICghcHBzKSB7CisgICAgICAgICAgICB1bnNpZ25l ZCBpbnQgcHBzX2lkID0gaC0+c2gucHBzX2lkOworICAgICAgICAgICAgaWYgKHBwc19pZCA8IEhF VkNfTUFYX1BQU19DT1VOVCAmJiBoLT5wcy5wcHNfbGlzdFtwcHNfaWRdICE9IE5VTEwpCisgICAg ICAgICAgICAgICAgcHBzID0gaC0+cHMucHBzX2xpc3RbcHBzX2lkXTsKKyAgICAgICAgfQorCisg ICAgICAgIGlmICghcHBzKSB7CisgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJP UiwKKyAgICAgICAgICAgICAgICAgICAiRW5jb3VudGVyZWQgZnJhbWUgd2l0aG91dCBhIHZhbGlk IGFjdGl2ZSBQUFMgcmVmZXJlbmNlLlxuIik7CisgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9J TlZBTElEREFUQTsKKyAgICAgICAgfQorCisgICAgICAgIGVyciA9IHZrX2hldmNfY3JlYXRlX3Bh cmFtcyhhdmN0eCwgJmRlYy0+c2Vzc2lvbl9wYXJhbXMpOworICAgICAgICBpZiAoZXJyIDwgMCkK KyAgICAgICAgICAgIHJldHVybiBlcnI7CisKKyAgICAgICAgaHAtPmgyNjVwaWMuc3BzX3ZpZGVv X3BhcmFtZXRlcl9zZXRfaWQgPSBzcHMtPnZwc19pZDsKKyAgICAgICAgaHAtPmgyNjVwaWMucHBz X3NlcV9wYXJhbWV0ZXJfc2V0X2lkID0gcHBzLT5zcHNfaWQ7CisgICAgICAgIGhwLT5oMjY1cGlj LnBwc19waWNfcGFyYW1ldGVyX3NldF9pZCA9IHBwcy0+cHBzX2lkOworICAgIH0KKworICAgIGZv ciAoaW50IGkgPSAwOyBpIDwgdnAtPmRlY29kZV9pbmZvLnJlZmVyZW5jZVNsb3RDb3VudDsgaSsr KSB7CisgICAgICAgIEhFVkNWdWxrYW5EZWNvZGVQaWN0dXJlICpyZmhwID0gaHAtPnJlZl9zcmNb aV0tPmh3YWNjZWxfcGljdHVyZV9wcml2YXRlOworICAgICAgICByYXZbaV0gPSBocC0+cmVmX3Ny Y1tpXS0+ZjsKKyAgICAgICAgcnZwW2ldID0gJnJmaHAtPnZwOworICAgIH0KKworICAgIGF2X2xv ZyhhdmN0eCwgQVZfTE9HX0RFQlVHLCAiRGVjb2RpbmcgZnJhbWUsICUiU0laRV9TUEVDSUZJRVIi IGJ5dGVzLCAlaSBzbGljZXNcbiIsCisgICAgICAgICAgIHZwLT5zbGljZXNfc2l6ZSwgaHAtPmgy NjVfcGljX2luZm8uc2xpY2VTZWdtZW50Q291bnQpOworCisgICAgcmV0dXJuIGZmX3ZrX2RlY29k ZV9mcmFtZShhdmN0eCwgcGljLT5mLCB2cCwgcmF2LCBydnApOworfQorCitzdGF0aWMgdm9pZCB2 a19oZXZjX2ZyZWVfZnJhbWVfcHJpdihBVlJlZlN0cnVjdE9wYXF1ZSBfaHdjdHgsIHZvaWQgKmRh dGEpCit7CisgICAgQVZIV0RldmljZUNvbnRleHQgKmh3Y3R4ID0gX2h3Y3R4Lm5jOworICAgIEhF VkNWdWxrYW5EZWNvZGVQaWN0dXJlICpocCA9IGRhdGE7CisKKyAgICAvKiBGcmVlIGZyYW1lIHJl c291cmNlcyAqLworICAgIGZmX3ZrX2RlY29kZV9mcmVlX2ZyYW1lKGh3Y3R4LCAmaHAtPnZwKTsK K30KKworY29uc3QgRkZIV0FjY2VsIGZmX2hldmNfdnVsa2FuX2h3YWNjZWwgPSB7CisgICAgLnAu bmFtZSAgICAgICAgICAgICAgICA9ICJoZXZjX3Z1bGthbiIsCisgICAgLnAudHlwZSAgICAgICAg ICAgICAgICA9IEFWTUVESUFfVFlQRV9WSURFTywKKyAgICAucC5pZCAgICAgICAgICAgICAgICAg ID0gQVZfQ09ERUNfSURfSEVWQywKKyAgICAucC5waXhfZm10ICAgICAgICAgICAgID0gQVZfUElY X0ZNVF9WVUxLQU4sCisgICAgLnN0YXJ0X2ZyYW1lICAgICAgICAgICA9ICZ2a19oZXZjX3N0YXJ0 X2ZyYW1lLAorICAgIC5kZWNvZGVfc2xpY2UgICAgICAgICAgPSAmdmtfaGV2Y19kZWNvZGVfc2xp Y2UsCisgICAgLmVuZF9mcmFtZSAgICAgICAgICAgICA9ICZ2a19oZXZjX2VuZF9mcmFtZSwKKyAg ICAuZnJlZV9mcmFtZV9wcml2ICAgICAgID0gJnZrX2hldmNfZnJlZV9mcmFtZV9wcml2LAorICAg IC5mcmFtZV9wcml2X2RhdGFfc2l6ZSAgPSBzaXplb2YoSEVWQ1Z1bGthbkRlY29kZVBpY3R1cmUp LAorICAgIC5pbml0ICAgICAgICAgICAgICAgICAgPSAmZmZfdmtfZGVjb2RlX2luaXQsCisgICAg LnVwZGF0ZV90aHJlYWRfY29udGV4dCA9ICZmZl92a191cGRhdGVfdGhyZWFkX2NvbnRleHQsCisg ICAgLmRlY29kZV9wYXJhbXMgICAgICAgICA9ICZmZl92a19wYXJhbXNfaW52YWxpZGF0ZSwKKyAg ICAuZmx1c2ggICAgICAgICAgICAgICAgID0gJmZmX3ZrX2RlY29kZV9mbHVzaCwKKyAgICAudW5p bml0ICAgICAgICAgICAgICAgID0gJmZmX3ZrX2RlY29kZV91bmluaXQsCisgICAgLmZyYW1lX3Bh cmFtcyAgICAgICAgICA9ICZmZl92a19mcmFtZV9wYXJhbXMsCisgICAgLnByaXZfZGF0YV9zaXpl ICAgICAgICA9IHNpemVvZihGRlZ1bGthbkRlY29kZUNvbnRleHQpLAorICAgIC5jYXBzX2ludGVy bmFsICAgICAgICAgPSBIV0FDQ0VMX0NBUF9BU1lOQ19TQUZFLAorfTsKLS0gCjIuNDkuMQoKCkZy b20gZjg0YjEwODA2NWZmMTk2YTM1OWJkYTIzODUyNmE5OWZjOTM4YTk2NyBNb24gU2VwIDE3IDAw OjAwOjAwIDIwMDEKRnJvbTogSmFtYWlrYTEgPGx1a2FzemN6MThAd3AucGw+CkRhdGU6IFdlZCwg MyBTZXAgMjAyNSAxMzozOToxNiArMDAwMApTdWJqZWN0OiBbUEFUQ0ggMDg1LzExOF0gQ2hhbmdp bmcgdnVsa2FuIGZpbGUgZGlyZWN0b3J5CgotLS0KIGxpYmF2Y29kZWMvdnVsa2FuX3Byb3Jlc19y YXcuYyB8IDUwMyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIDEgZmlsZSBjaGFu Z2VkLCA1MDMgZGVsZXRpb25zKC0pCiBkZWxldGUgbW9kZSAxMDA2NDQgbGliYXZjb2RlYy92dWxr YW5fcHJvcmVzX3Jhdy5jCgpkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy92dWxrYW5fcHJvcmVzX3Jh dy5jIGIvbGliYXZjb2RlYy92dWxrYW5fcHJvcmVzX3Jhdy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEw MDY0NAppbmRleCA3YTFmOTdhNjQwLi4wMDAwMDAwMDAwCi0tLSBhL2xpYmF2Y29kZWMvdnVsa2Fu X3Byb3Jlc19yYXcuYworKysgL2Rldi9udWxsCkBAIC0xLDUwMyArMCwwIEBACi0vKgotICogQ29w eXJpZ2h0IChjKSAyMDI1IEx5bm5lIDxkZXZAbHlubmUuZWU+Ci0gKgotICogVGhpcyBmaWxlIGlz IHBhcnQgb2YgRkZtcGVnLgotICoKLSAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5 IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyLjEgb2Yg dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgot ICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm dWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll ZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg Y29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3 aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRh dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAw MjExMC0xMzAxIFVTQQotICovCi0KLSNpbmNsdWRlICJ2dWxrYW5fZGVjb2RlLmgiCi0jaW5jbHVk ZSAiaHdhY2NlbF9pbnRlcm5hbC5oIgotCi0jaW5jbHVkZSAicHJvcmVzX3Jhdy5oIgotI2luY2x1 ZGUgImxpYmF2dXRpbC92dWxrYW5fc3BpcnYuaCIKLSNpbmNsdWRlICJsaWJhdnV0aWwvbWVtLmgi Ci0KLWV4dGVybiBjb25zdCBjaGFyICpmZl9zb3VyY2VfY29tbW9uX2NvbXA7Ci1leHRlcm4gY29u c3QgY2hhciAqZmZfc291cmNlX3Byb3Jlc19yYXdfY29tcDsKLQotY29uc3QgRkZWdWxrYW5EZWNv ZGVEZXNjcmlwdG9yIGZmX3ZrX2RlY19wcm9yZXNfcmF3X2Rlc2MgPSB7Ci0gICAgLmNvZGVjX2lk ICAgICAgICAgPSBBVl9DT0RFQ19JRF9QUk9SRVNfUkFXLAotICAgIC5kZWNvZGVfZXh0ZW5zaW9u ID0gRkZfVktfRVhUX1BVU0hfREVTQ1JJUFRPUiwKLSAgICAucXVldWVfZmxhZ3MgICAgICA9IFZL X1FVRVVFX0NPTVBVVEVfQklULAotfTsKLQotdHlwZWRlZiBzdHJ1Y3QgUHJvUmVzUkFXVnVsa2Fu RGVjb2RlUGljdHVyZSB7Ci0gICAgRkZWdWxrYW5EZWNvZGVQaWN0dXJlIHZwOwotCi0gICAgQVZC dWZmZXJSZWYgKnRpbGVfZGF0YTsKLSAgICB1aW50MzJfdCBuYl90aWxlczsKLX0gUHJvUmVzUkFX VnVsa2FuRGVjb2RlUGljdHVyZTsKLQotdHlwZWRlZiBzdHJ1Y3QgUHJvUmVzUkFXVnVsa2FuRGVj b2RlQ29udGV4dCB7Ci0gICAgRkZWdWxrYW5TaGFkZXIgZGVjb2RlWzJdOwotCi0gICAgQVZCdWZm ZXJQb29sICp0aWxlX2RhdGFfcG9vbDsKLQotICAgIEZGVmtCdWZmZXIgdW5pZm9ybV9idWY7Ci19 IFByb1Jlc1JBV1Z1bGthbkRlY29kZUNvbnRleHQ7Ci0KLXR5cGVkZWYgc3RydWN0IERlY29kZVB1 c2hEYXRhIHsKLSAgICBWa0RldmljZUFkZHJlc3MgdGlsZV9kYXRhOwotICAgIFZrRGV2aWNlQWRk cmVzcyBwa3RfZGF0YTsKLSAgICB1aW50MzJfdCBmcmFtZV9zaXplWzJdOwotICAgIHVpbnQzMl90 IHRpbGVfc2l6ZVsyXTsKLSAgICB1aW50OF90ICBxbWF0WzY0XTsKLX0gRGVjb2RlUHVzaERhdGE7 Ci0KLXR5cGVkZWYgc3RydWN0IFRpbGVEYXRhIHsKLSAgICBpbnQzMl90IHBvc1syXTsKLSAgICB1 aW50MzJfdCBvZmZzZXQ7Ci0gICAgdWludDMyX3Qgc2l6ZTsKLX0gVGlsZURhdGE7Ci0KLXN0YXRp YyBpbnQgdmtfcHJvcmVzX3Jhd19zdGFydF9mcmFtZShBVkNvZGVjQ29udGV4dCAgICAgICAgICAq YXZjdHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQVZCdWZm ZXJSZWYgICAgICAgKmJ1ZmZlcl9yZWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgYXZfdW51c2VkIGNvbnN0IHVpbnQ4X3QgKmJ1ZmZlciwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBhdl91bnVzZWQgdWludDMyX3QgICAgICAgc2l6ZSkKLXsKLSAg ICBpbnQgZXJyOwotICAgIEZGVnVsa2FuRGVjb2RlQ29udGV4dCAqZGVjID0gYXZjdHgtPmludGVy bmFsLT5od2FjY2VsX3ByaXZfZGF0YTsKLSAgICBGRlZ1bGthbkRlY29kZVNoYXJlZCAqY3R4ID0g ZGVjLT5zaGFyZWRfY3R4OwotICAgIFByb1Jlc1JBV1Z1bGthbkRlY29kZUNvbnRleHQgKnBydiA9 IGN0eC0+c2RfY3R4OwotICAgIFByb1Jlc1JBV0NvbnRleHQgKnByciA9IGF2Y3R4LT5wcml2X2Rh dGE7Ci0KLSAgICBQcm9SZXNSQVdWdWxrYW5EZWNvZGVQaWN0dXJlICpwcCA9IHByci0+aHdhY2Nl bF9waWN0dXJlX3ByaXZhdGU7Ci0gICAgRkZWdWxrYW5EZWNvZGVQaWN0dXJlICp2cCA9ICZwcC0+ dnA7Ci0KLSAgICAvKiBIb3N0IG1hcCB0aGUgaW5wdXQgdGlsZSBkYXRhIGlmIHN1cHBvcnRlZCAq LwotICAgIGlmIChjdHgtPnMuZXh0ZW5zaW9ucyAmIEZGX1ZLX0VYVF9FWFRFUk5BTF9IT1NUX01F TU9SWSkKLSAgICAgICAgZmZfdmtfaG9zdF9tYXBfYnVmZmVyKCZjdHgtPnMsICZ2cC0+c2xpY2Vz X2J1ZiwgYnVmZmVyX3JlZi0+ZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1 ZmZlcl9yZWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19CVUZGRVJfVVNBR0Vf U1RPUkFHRV9CVUZGRVJfQklUIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZLX0JV RkZFUl9VU0FHRV9TSEFERVJfREVWSUNFX0FERFJFU1NfQklUKTsKLQotICAgIC8qIEFsbG9jYXRl IHRpbGUgZGF0YSAqLwotICAgIGVyciA9IGZmX3ZrX2dldF9wb29sZWRfYnVmZmVyKCZjdHgtPnMs ICZwcnYtPnRpbGVfZGF0YV9wb29sLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICZwcC0+dGlsZV9kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZLX0JV RkZFUl9VU0FHRV9TVE9SQUdFX0JVRkZFUl9CSVQgfAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFZLX0JVRkZFUl9VU0FHRV9TSEFERVJfREVWSUNFX0FERFJFU1NfQklULAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIHByci0+bmJfdGlsZXMqc2l6ZW9m KFRpbGVEYXRhKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19NRU1PUllf UFJPUEVSVFlfREVWSUNFX0xPQ0FMX0JJVCB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgVktfTUVNT1JZX1BST1BFUlRZX0hPU1RfVklTSUJMRV9CSVQpOwotICAgIGlmIChlcnIg PCAwKQotICAgICAgICByZXR1cm4gZXJyOwotCi0gICAgLyogUHJlcGFyZSBmcmFtZSB0byBiZSB1 c2VkICovCi0gICAgZXJyID0gZmZfdmtfZGVjb2RlX3ByZXBhcmVfZnJhbWVfc2RyKGRlYywgcHJy LT5mcmFtZSwgdnAsIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEZGX1ZLX1JFUF9GTE9BVCwgMCk7Ci0gICAgaWYgKGVyciA8IDApCi0gICAgICAgIHJldHVybiBl cnI7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB2a19wcm9yZXNfcmF3X2RlY29k ZV9zbGljZShBVkNvZGVjQ29udGV4dCAqYXZjdHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgICpkYXRhLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB1aW50MzJfdCAgICAgICAgc2l6ZSkKLXsKLSAgICBQcm9SZXNSQVdD b250ZXh0ICpwcnIgPSBhdmN0eC0+cHJpdl9kYXRhOwotCi0gICAgUHJvUmVzUkFXVnVsa2FuRGVj b2RlUGljdHVyZSAqcHAgPSBwcnItPmh3YWNjZWxfcGljdHVyZV9wcml2YXRlOwotICAgIEZGVnVs a2FuRGVjb2RlUGljdHVyZSAqdnAgPSAmcHAtPnZwOwotCi0gICAgRkZWa0J1ZmZlciAqdGlsZV9k YXRhX2J1ZiA9IChGRlZrQnVmZmVyICopcHAtPnRpbGVfZGF0YS0+ZGF0YTsKLSAgICBUaWxlRGF0 YSAqdGQgPSAoVGlsZURhdGEgKil0aWxlX2RhdGFfYnVmLT5tYXBwZWRfbWVtOwotICAgIEZGVmtC dWZmZXIgKnNsaWNlc19idWYgPSB2cC0+c2xpY2VzX2J1ZiA/IChGRlZrQnVmZmVyICopdnAtPnNs aWNlc19idWYtPmRhdGEgOiBOVUxMOwotCi0gICAgdGRbcHAtPm5iX3RpbGVzXS5wb3NbMF0gPSBw cnItPnRpbGVzW3BwLT5uYl90aWxlc10ueDsKLSAgICB0ZFtwcC0+bmJfdGlsZXNdLnBvc1sxXSA9 IHByci0+dGlsZXNbcHAtPm5iX3RpbGVzXS55OwotICAgIHRkW3BwLT5uYl90aWxlc10uc2l6ZSA9 IHNpemU7Ci0KLSAgICBpZiAodnAtPnNsaWNlc19idWYgJiYgc2xpY2VzX2J1Zi0+aG9zdF9yZWYp IHsKLSAgICAgICAgdGRbcHAtPm5iX3RpbGVzXS5vZmZzZXQgPSBkYXRhIC0gc2xpY2VzX2J1Zi0+ bWFwcGVkX21lbTsKLSAgICAgICAgcHAtPm5iX3RpbGVzKys7Ci0gICAgfSBlbHNlIHsKLSAgICAg ICAgaW50IGVycjsKLSAgICAgICAgdGRbcHAtPm5iX3RpbGVzXS5vZmZzZXQgPSB2cC0+c2xpY2Vz X3NpemU7Ci0gICAgICAgIGVyciA9IGZmX3ZrX2RlY29kZV9hZGRfc2xpY2UoYXZjdHgsIHZwLCBk YXRhLCBzaXplLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwcC0+ bmJfdGlsZXMsIE5VTEwpOwotICAgICAgICBpZiAoZXJyIDwgMCkKLSAgICAgICAgICAgIHJldHVy biBlcnI7Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgdmtfcHJvcmVz X3Jhd19lbmRfZnJhbWUoQVZDb2RlY0NvbnRleHQgKmF2Y3R4KQotewotICAgIGludCBlcnI7Ci0g ICAgRkZWdWxrYW5EZWNvZGVDb250ZXh0ICpkZWMgPSBhdmN0eC0+aW50ZXJuYWwtPmh3YWNjZWxf cHJpdl9kYXRhOwotICAgIEZGVnVsa2FuRGVjb2RlU2hhcmVkICpjdHggPSBkZWMtPnNoYXJlZF9j dHg7Ci0gICAgRkZWdWxrYW5GdW5jdGlvbnMgKnZrID0gJmN0eC0+cy52a2ZuOwotCi0gICAgUHJv UmVzUkFXQ29udGV4dCAqcHJyID0gYXZjdHgtPnByaXZfZGF0YTsKLSAgICBQcm9SZXNSQVdWdWxr YW5EZWNvZGVDb250ZXh0ICpwcnYgPSBjdHgtPnNkX2N0eDsKLQotICAgIFByb1Jlc1JBV1Z1bGth bkRlY29kZVBpY3R1cmUgKnBwID0gcHJyLT5od2FjY2VsX3BpY3R1cmVfcHJpdmF0ZTsKLSAgICBG RlZ1bGthbkRlY29kZVBpY3R1cmUgKnZwID0gJnBwLT52cDsKLQotICAgIEZGVmtCdWZmZXIgKnNs aWNlc19idWYgPSAoRkZWa0J1ZmZlciAqKXZwLT5zbGljZXNfYnVmLT5kYXRhOwotICAgIEZGVmtC dWZmZXIgKnRpbGVfZGF0YSA9IChGRlZrQnVmZmVyICopcHAtPnRpbGVfZGF0YS0+ZGF0YTsKLQot ICAgIFZrSW1hZ2VNZW1vcnlCYXJyaWVyMiBpbWdfYmFyWzhdOwotICAgIGludCBuYl9pbWdfYmFy ID0gMDsKLQotICAgIEZGVmtFeGVjQ29udGV4dCAqZXhlYyA9IGZmX3ZrX2V4ZWNfZ2V0KCZjdHgt PnMsICZjdHgtPmV4ZWNfcG9vbCk7Ci0gICAgZmZfdmtfZXhlY19zdGFydCgmY3R4LT5zLCBleGVj KTsKLQotICAgIC8qIFByZXBhcmUgZGVwcyAqLwotICAgIFJFVChmZl92a19leGVjX2FkZF9kZXBf ZnJhbWUoJmN0eC0+cywgZXhlYywgcHJyLT5mcmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFZLX1BJUEVMSU5FX1NUQUdFXzJfQUxMX0NPTU1BTkRTX0JJVCwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFZLX1BJUEVMSU5FX1NUQUdFXzJfQ09NUFVURV9TSEFE RVJfQklUKSk7Ci0KLSAgICBlcnIgPSBmZl92a19leGVjX21pcnJvcl9zZW1fdmFsdWUoJmN0eC0+ cywgZXhlYywgJnZwLT5zZW0sICZ2cC0+c2VtX3ZhbHVlLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBwcnItPmZyYW1lKTsKLSAgICBpZiAoZXJyIDwgMCkKLSAgICAgICAg cmV0dXJuIGVycjsKLQotICAgIFJFVChmZl92a19leGVjX2FkZF9kZXBfYnVmKCZjdHgtPnMsIGV4 ZWMsICZwcC0+dGlsZV9kYXRhLCAxLCAwKSk7Ci0gICAgcHAtPnRpbGVfZGF0YSA9IE5VTEw7Ci0g ICAgUkVUKGZmX3ZrX2V4ZWNfYWRkX2RlcF9idWYoJmN0eC0+cywgZXhlYywgJnZwLT5zbGljZXNf YnVmLCAxLCAwKSk7Ci0gICAgdnAtPnNsaWNlc19idWYgPSBOVUxMOwotCi0gICAgZmZfdmtfZnJh bWVfYmFycmllcigmY3R4LT5zLCBleGVjLCBwcnItPmZyYW1lLCBpbWdfYmFyLCAmbmJfaW1nX2Jh ciwKLSAgICAgICAgICAgICAgICAgICAgICAgIFZLX1BJUEVMSU5FX1NUQUdFXzJfQUxMX0NPTU1B TkRTX0JJVCwKLSAgICAgICAgICAgICAgICAgICAgICAgIFZLX1BJUEVMSU5FX1NUQUdFXzJfQUxM X0NPTU1BTkRTX0JJVCwKLSAgICAgICAgICAgICAgICAgICAgICAgIFZLX0FDQ0VTU18yX1RSQU5T RkVSX1dSSVRFX0JJVCwKLSAgICAgICAgICAgICAgICAgICAgICAgIFZLX0lNQUdFX0xBWU9VVF9H RU5FUkFMLAotICAgICAgICAgICAgICAgICAgICAgICAgVktfUVVFVUVfRkFNSUxZX0lHTk9SRUQp OwotCi0gICAgdmstPkNtZFBpcGVsaW5lQmFycmllcjIoZXhlYy0+YnVmLCAmKFZrRGVwZW5kZW5j eUluZm8pIHsKLSAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfREVQRU5ERU5DWV9J TkZPLAotICAgICAgICAucEltYWdlTWVtb3J5QmFycmllcnMgPSBpbWdfYmFyLAotICAgICAgICAu aW1hZ2VNZW1vcnlCYXJyaWVyQ291bnQgPSBuYl9pbWdfYmFyLAotICAgIH0pOwotICAgIG5iX2lt Z19iYXIgPSAwOwotCi0gICAgRkZWdWxrYW5TaGFkZXIgKmRlY29kZV9zaGFkZXIgPSAmcHJ2LT5k ZWNvZGVbcHJyLT52ZXJzaW9uXTsKLSAgICBmZl92a19zaGFkZXJfdXBkYXRlX2ltZ19hcnJheSgm Y3R4LT5zLCBleGVjLCBkZWNvZGVfc2hhZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHByci0+ZnJhbWUsIHZwLT52aWV3Lm91dCwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAwLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZLX0lN QUdFX0xBWU9VVF9HRU5FUkFMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZL X05VTExfSEFORExFKTsKLQotICAgIGZmX3ZrX2V4ZWNfYmluZF9zaGFkZXIoJmN0eC0+cywgZXhl YywgZGVjb2RlX3NoYWRlcik7Ci0KLSAgICAvKiBVcGRhdGUgcHVzaCBkYXRhICovCi0gICAgRGVj b2RlUHVzaERhdGEgcGRfZGVjb2RlID0gKERlY29kZVB1c2hEYXRhKSB7Ci0gICAgICAgIC50aWxl X2RhdGEgPSB0aWxlX2RhdGEtPmFkZHJlc3MsCi0gICAgICAgIC5wa3RfZGF0YSA9IHNsaWNlc19i dWYtPmFkZHJlc3MsCi0gICAgICAgIC5mcmFtZV9zaXplWzBdID0gYXZjdHgtPndpZHRoLAotICAg ICAgICAuZnJhbWVfc2l6ZVsxXSA9IGF2Y3R4LT5oZWlnaHQsCi0gICAgICAgIC50aWxlX3NpemVb MF0gPSBwcnItPnR3LAotICAgICAgICAudGlsZV9zaXplWzFdID0gcHJyLT50aCwKLSAgICB9Owot ICAgIG1lbWNweShwZF9kZWNvZGUucW1hdCwgcHJyLT5xbWF0LCA2NCk7Ci0gICAgZmZfdmtfc2hh ZGVyX3VwZGF0ZV9wdXNoX2NvbnN0KCZjdHgtPnMsIGV4ZWMsIGRlY29kZV9zaGFkZXIsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZLX1NIQURFUl9TVEFHRV9DT01QVVRFX0JJ VCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgc2l6ZW9mKHBkX2RlY29k ZSksICZwZF9kZWNvZGUpOwotCi0gICAgdmstPkNtZERpc3BhdGNoKGV4ZWMtPmJ1ZiwgcHJyLT5u Yl90dywgcHJyLT5uYl90aCwgMSk7Ci0KLSAgICBlcnIgPSBmZl92a19leGVjX3N1Ym1pdCgmY3R4 LT5zLCBleGVjKTsKLSAgICBpZiAoZXJyIDwgMCkKLSAgICAgICAgcmV0dXJuIGVycjsKLQotZmFp bDoKLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBpbml0X2RlY29kZV9zaGFkZXIoUHJv UmVzUkFXQ29udGV4dCAqcHJyLCBGRlZ1bGthbkNvbnRleHQgKnMsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBGRlZrRXhlY1Bvb2wgKnBvb2wsIEZGVmtTUElSVkNvbXBpbGVyICpzcHYs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGRlZ1bGthblNoYWRlciAqc2hkLCBpbnQg dmVyc2lvbikKLXsKLSAgICBpbnQgZXJyOwotICAgIEZGVnVsa2FuRGVzY3JpcHRvclNldEJpbmRp bmcgKmRlc2Nfc2V0OwotICAgIGludCBwYXJhbGxlbF9yb3dzID0gMTsKLQotICAgIHVpbnQ4X3Qg KnNwdl9kYXRhOwotICAgIHNpemVfdCBzcHZfbGVuOwotICAgIHZvaWQgKnNwdl9vcGFxdWUgPSBO VUxMOwotCi0gICAgaWYgKHMtPnByb3BzLnByb3BlcnRpZXMubGltaXRzLm1heENvbXB1dGVXb3Jr R3JvdXBJbnZvY2F0aW9ucyA8IDUxMiB8fAotICAgICAgICBzLT5wcm9wcy5wcm9wZXJ0aWVzLmRl dmljZVR5cGUgPT0gVktfUEhZU0lDQUxfREVWSUNFX1RZUEVfSU5URUdSQVRFRF9HUFUpCi0gICAg ICAgIHBhcmFsbGVsX3Jvd3MgPSAwOwotCi0gICAgUkVUKGZmX3ZrX3NoYWRlcl9pbml0KHMsIHNo ZCwgInByb3Jlc19yYXciLAotICAgICAgICAgICAgICAgICAgICAgICAgICBWS19TSEFERVJfU1RB R0VfQ09NUFVURV9CSVQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBjaGFyICpb XSkgeyAiR0xfRVhUX2J1ZmZlcl9yZWZlcmVuY2UiLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIkdMX0VYVF9idWZmZXJfcmVmZXJlbmNlMiIsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiR0xfRVhUX251bGxfaW5pdGlh bGl6ZXIiIH0sIDMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFsbGVsX3Jvd3MgPyA4 IDogMSAvKiA4eDggdHJhbnNmb3JtcywgOC1wb2ludCB3aWR0aCAqLywKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgdmVyc2lvbiA9PSAwID8gOCA6IDE2IC8qIEhvcml6b250YWwgYmxvY2tzICov LAotICAgICAgICAgICAgICAgICAgICAgICAgICA0IC8qIENvbXBvbmVudHMgKi8sCi0gICAgICAg ICAgICAgICAgICAgICAgICAgIDApKTsKLQotICAgIGlmIChwYXJhbGxlbF9yb3dzKQotICAgICAg ICBHTFNMQygwLCAjZGVmaW5lIFBBUkFMTEVMX1JPV1MgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICk7Ci0KLSAgICAvKiBDb21tb24gY29kZWMgaGVhZGVyICov Ci0gICAgR0xTTEQoZmZfc291cmNlX2NvbW1vbl9jb21wKTsKLQotICAgIEdMU0xDKDAsIGxheW91 dChidWZmZXJfcmVmZXJlbmNlLCBidWZmZXJfcmVmZXJlbmNlX2FsaWduID0gMTYpIGJ1ZmZlciBU aWxlRGF0YSB7ICk7Ci0gICAgR0xTTEMoMSwgICAgaXZlYzIgcG9zOyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBHTFNMQygx LCAgICB1aW50IG9mZnNldDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICApOwotICAgIEdMU0xDKDEsICAgIHVpbnQgc2l6ZTsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0gICAg R0xTTEMoMCwgfTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBHTFNMQygwLCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAp OwotICAgIEdMU0xDKDAsIGxheW91dChwdXNoX2NvbnN0YW50LCBzY2FsYXIpIHVuaWZvcm0gcHVz aENvbnN0YW50cyB7ICAgICAgICAgICAgICAgICAgICk7Ci0gICAgR0xTTEMoMSwgICAgVGlsZURh dGEgdGlsZV9kYXRhOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKTsKLSAgICBHTFNMQygxLCAgICB1OGJ1ZiBwa3RfZGF0YTsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgIEdMU0xDKDEsICAg IHV2ZWMyIGZyYW1lX3NpemU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICk7Ci0gICAgR0xTTEMoMSwgICAgdXZlYzIgdGlsZV9zaXplOyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBHTFNM QygxLCAgICB1aW50OF90IHFtYXRbNjRdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICApOwotICAgIEdMU0xDKDAsIH07ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0g ICAgR0xTTEMoMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICBmZl92a19zaGFkZXJfYWRkX3B1c2hf Y29uc3Qoc2hkLCAwLCBzaXplb2YoRGVjb2RlUHVzaERhdGEpLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBWS19TSEFERVJfU1RBR0VfQ09NUFVURV9CSVQpOwotCi0gICAgZGVzY19z ZXQgPSAoRkZWdWxrYW5EZXNjcmlwdG9yU2V0QmluZGluZyBbXSkgewotICAgICAgICB7Ci0gICAg ICAgICAgICAubmFtZSAgICAgICA9ICJkc3QiLAotICAgICAgICAgICAgLnR5cGUgICAgICAgPSBW S19ERVNDUklQVE9SX1RZUEVfU1RPUkFHRV9JTUFHRSwKLSAgICAgICAgICAgIC5tZW1fbGF5b3V0 ID0gInIxNiIsCi0gICAgICAgICAgICAubWVtX3F1YWxpICA9ICJ3cml0ZW9ubHkiLAotICAgICAg ICAgICAgLmRpbWVuc2lvbnMgPSAyLAotICAgICAgICAgICAgLnN0YWdlcyAgICAgPSBWS19TSEFE RVJfU1RBR0VfQ09NUFVURV9CSVQsCi0gICAgICAgIH0sCi0gICAgfTsKLSAgICBSRVQoZmZfdmtf c2hhZGVyX2FkZF9kZXNjcmlwdG9yX3NldChzLCBzaGQsIGRlc2Nfc2V0LCAxLCAwLCAwKSk7Ci0K LSAgICBkZXNjX3NldCA9IChGRlZ1bGthbkRlc2NyaXB0b3JTZXRCaW5kaW5nIFtdKSB7Ci0gICAg ICAgIHsKLSAgICAgICAgICAgIC5uYW1lICAgICAgICA9ICJkY3Rfc2NhbGVfYnVmIiwKLSAgICAg ICAgICAgIC50eXBlICAgICAgICA9IFZLX0RFU0NSSVBUT1JfVFlQRV9VTklGT1JNX0JVRkZFUiwK LSAgICAgICAgICAgIC5zdGFnZXMgICAgICA9IFZLX1NIQURFUl9TVEFHRV9DT01QVVRFX0JJVCwK LSAgICAgICAgICAgIC5tZW1fbGF5b3V0ICA9ICJzY2FsYXIiLAotICAgICAgICAgICAgLmJ1Zl9j b250ZW50ID0gImZsb2F0IGlkY3RfOHg4X3NjYWxlc1s2NF07IiwKLSAgICAgICAgfSwKLSAgICAg ICAgewotICAgICAgICAgICAgLm5hbWUgICAgICAgID0gInNjYW5fYnVmIiwKLSAgICAgICAgICAg IC50eXBlICAgICAgICA9IFZLX0RFU0NSSVBUT1JfVFlQRV9VTklGT1JNX0JVRkZFUiwKLSAgICAg ICAgICAgIC5zdGFnZXMgICAgICA9IFZLX1NIQURFUl9TVEFHRV9DT01QVVRFX0JJVCwKLSAgICAg ICAgICAgIC5tZW1fbGF5b3V0ICA9ICJzY2FsYXIiLAotICAgICAgICAgICAgLmJ1Zl9jb250ZW50 ID0gInVpbnQ4X3Qgc2Nhbls2NF07IiwKLSAgICAgICAgfSwKLSAgICAgICAgewotICAgICAgICAg ICAgLm5hbWUgICAgICAgID0gImRjX2NiX2J1ZiIsCi0gICAgICAgICAgICAudHlwZSAgICAgICAg PSBWS19ERVNDUklQVE9SX1RZUEVfVU5JRk9STV9CVUZGRVIsCi0gICAgICAgICAgICAuc3RhZ2Vz ICAgICAgPSBWS19TSEFERVJfU1RBR0VfQ09NUFVURV9CSVQsCi0gICAgICAgICAgICAubWVtX2xh eW91dCAgPSAic2NhbGFyIiwKLSAgICAgICAgICAgIC5idWZfY29udGVudCA9ICJ1aW50OF90IGRj X2NiWzEzXTsiLAotICAgICAgICB9LAotICAgICAgICB7Ci0gICAgICAgICAgICAubmFtZSAgICAg ICAgPSAiYWNfY2JfYnVmIiwKLSAgICAgICAgICAgIC50eXBlICAgICAgICA9IFZLX0RFU0NSSVBU T1JfVFlQRV9VTklGT1JNX0JVRkZFUiwKLSAgICAgICAgICAgIC5zdGFnZXMgICAgICA9IFZLX1NI QURFUl9TVEFHRV9DT01QVVRFX0JJVCwKLSAgICAgICAgICAgIC5tZW1fbGF5b3V0ICA9ICJzY2Fs YXIiLAotICAgICAgICAgICAgLmJ1Zl9jb250ZW50ID0gImludDE2X3QgYWNfY2JbOTVdOyIsCi0g ICAgICAgIH0sCi0gICAgICAgIHsKLSAgICAgICAgICAgIC5uYW1lICAgICAgICA9ICJybl9jYl9i dWYiLAotICAgICAgICAgICAgLnR5cGUgICAgICAgID0gVktfREVTQ1JJUFRPUl9UWVBFX1VOSUZP Uk1fQlVGRkVSLAotICAgICAgICAgICAgLnN0YWdlcyAgICAgID0gVktfU0hBREVSX1NUQUdFX0NP TVBVVEVfQklULAotICAgICAgICAgICAgLm1lbV9sYXlvdXQgID0gInNjYWxhciIsCi0gICAgICAg ICAgICAuYnVmX2NvbnRlbnQgPSAiaW50MTZfdCBybl9jYlsyOF07IiwKLSAgICAgICAgfSwKLSAg ICAgICAgewotICAgICAgICAgICAgLm5hbWUgICAgICAgID0gImxuX2NiX2J1ZiIsCi0gICAgICAg ICAgICAudHlwZSAgICAgICAgPSBWS19ERVNDUklQVE9SX1RZUEVfVU5JRk9STV9CVUZGRVIsCi0g ICAgICAgICAgICAuc3RhZ2VzICAgICAgPSBWS19TSEFERVJfU1RBR0VfQ09NUFVURV9CSVQsCi0g ICAgICAgICAgICAubWVtX2xheW91dCAgPSAic2NhbGFyIiwKLSAgICAgICAgICAgIC5idWZfY29u dGVudCA9ICJpbnQxNl90IGxuX2NiWzE1XTsiLAotICAgICAgICB9LAotICAgIH07Ci0gICAgUkVU KGZmX3ZrX3NoYWRlcl9hZGRfZGVzY3JpcHRvcl9zZXQocywgc2hkLCBkZXNjX3NldCwgNiwgMSwg MCkpOwotCi0gICAgR0xTTEQoZmZfc291cmNlX3Byb3Jlc19yYXdfY29tcCk7Ci0KLSAgICBSRVQo c3B2LT5jb21waWxlX3NoYWRlcihzLCBzcHYsIHNoZCwgJnNwdl9kYXRhLCAmc3B2X2xlbiwgIm1h aW4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzcHZfb3BhcXVlKSk7Ci0gICAgUkVU KGZmX3ZrX3NoYWRlcl9saW5rKHMsIHNoZCwgc3B2X2RhdGEsIHNwdl9sZW4sICJtYWluIikpOwot Ci0gICAgUkVUKGZmX3ZrX3NoYWRlcl9yZWdpc3Rlcl9leGVjKHMsIHBvb2wsIHNoZCkpOwotCi1m YWlsOgotICAgIGlmIChzcHZfb3BhcXVlKQotICAgICAgICBzcHYtPmZyZWVfc2hhZGVyKHNwdiwg JnNwdl9vcGFxdWUpOwotCi0gICAgcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIHZvaWQgdmtfZGVj b2RlX3Byb3Jlc19yYXdfdW5pbml0KEZGVnVsa2FuRGVjb2RlU2hhcmVkICpjdHgpCi17Ci0gICAg UHJvUmVzUkFXVnVsa2FuRGVjb2RlQ29udGV4dCAqZnYgPSBjdHgtPnNkX2N0eDsKLQotICAgIGZm X3ZrX3NoYWRlcl9mcmVlKCZjdHgtPnMsICZmdi0+ZGVjb2RlWzBdKTsKLSAgICBmZl92a19zaGFk ZXJfZnJlZSgmY3R4LT5zLCAmZnYtPmRlY29kZVsxXSk7Ci0KLSAgICBmZl92a19mcmVlX2J1Zigm Y3R4LT5zLCAmZnYtPnVuaWZvcm1fYnVmKTsKLQotICAgIGF2X2J1ZmZlcl9wb29sX3VuaW5pdCgm ZnYtPnRpbGVfZGF0YV9wb29sKTsKLQotICAgIGF2X2ZyZWVwKCZmdik7Ci19Ci0KLXN0YXRpYyBp bnQgdmtfZGVjb2RlX3Byb3Jlc19yYXdfaW5pdChBVkNvZGVjQ29udGV4dCAqYXZjdHgpCi17Ci0g ICAgaW50IGVycjsKLSAgICBQcm9SZXNSQVdDb250ZXh0ICpwcnIgPSBhdmN0eC0+cHJpdl9kYXRh OwotICAgIEZGVnVsa2FuRGVjb2RlQ29udGV4dCAqZGVjID0gYXZjdHgtPmludGVybmFsLT5od2Fj Y2VsX3ByaXZfZGF0YTsKLQotICAgIEZGVmtTUElSVkNvbXBpbGVyICpzcHYgPSBmZl92a19zcGly dl9pbml0KCk7Ci0gICAgaWYgKCFzcHYpIHsKLSAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0df RVJST1IsICJVbmFibGUgdG8gaW5pdGlhbGl6ZSBTUElSLVYgY29tcGlsZXIhXG4iKTsKLSAgICAg ICAgcmV0dXJuIEFWRVJST1JfRVhURVJOQUw7Ci0gICAgfQotCi0gICAgZXJyID0gZmZfdmtfZGVj b2RlX2luaXQoYXZjdHgpOwotICAgIGlmIChlcnIgPCAwKQotICAgICAgICByZXR1cm4gZXJyOwot Ci0gICAgRkZWdWxrYW5EZWNvZGVTaGFyZWQgKmN0eCA9IGRlYy0+c2hhcmVkX2N0eDsKLSAgICBQ cm9SZXNSQVdWdWxrYW5EZWNvZGVDb250ZXh0ICpwcnYgPSBjdHgtPnNkX2N0eCA9IGF2X21hbGxv Y3ooc2l6ZW9mKCpwcnYpKTsKLSAgICBpZiAoIXBydikgewotICAgICAgICBlcnIgPSBBVkVSUk9S KEVOT01FTSk7Ci0gICAgICAgIGdvdG8gZmFpbDsKLSAgICB9Ci0KLSAgICBjdHgtPnNkX2N0eF9m cmVlID0gJnZrX2RlY29kZV9wcm9yZXNfcmF3X3VuaW5pdDsKLQotICAgIC8qIFNldHVwIGRlY29k ZSBzaGFkZXIgKi8KLSAgICBSRVQoaW5pdF9kZWNvZGVfc2hhZGVyKHByciwgJmN0eC0+cywgJmN0 eC0+ZXhlY19wb29sLCBzcHYsICZwcnYtPmRlY29kZVswXSwgMCkpOwotICAgIFJFVChpbml0X2Rl Y29kZV9zaGFkZXIocHJyLCAmY3R4LT5zLCAmY3R4LT5leGVjX3Bvb2wsIHNwdiwgJnBydi0+ZGVj b2RlWzFdLCAxKSk7Ci0KLSAgICAvKiBTaXplIGluIGJ5dGVzIG9mIGVhY2ggY29kZWJvb2sgdGFi bGUgKi8KLSAgICBzaXplX3QgY2Jfc2l6ZVs1XSA9IHsKLSAgICAgICAgMTMqc2l6ZW9mKHVpbnQ4 X3QpLAotICAgICAgICA5NSpzaXplb2YoaW50MTZfdCksCi0gICAgICAgIDI4KnNpemVvZihpbnQx Nl90KSwKLSAgICAgICAgMTUqc2l6ZW9mKGludDE2X3QpLAotICAgIH07Ci0KLSAgICAvKiBPZmZz ZXQgb2YgZWFjaCBjb2RlYm9vayB0YWJsZSAqLwotICAgIHNpemVfdCBjYl9vZmZzZXRbNV07Ci0g ICAgc2l6ZV90IHVhID0gY3R4LT5zLnByb3BzLnByb3BlcnRpZXMubGltaXRzLm1pblVuaWZvcm1C dWZmZXJPZmZzZXRBbGlnbm1lbnQ7Ci0gICAgY2Jfb2Zmc2V0WzBdID0gNjQqc2l6ZW9mKGZsb2F0 KSArIDY0KnNpemVvZih1aW50OF90KTsKLSAgICBjYl9vZmZzZXRbMV0gPSBjYl9vZmZzZXRbMF0g KyBGRkFMSUdOKGNiX3NpemVbMF0sIHVhKTsKLSAgICBjYl9vZmZzZXRbMl0gPSBjYl9vZmZzZXRb MV0gKyBGRkFMSUdOKGNiX3NpemVbMV0sIHVhKTsKLSAgICBjYl9vZmZzZXRbM10gPSBjYl9vZmZz ZXRbMl0gKyBGRkFMSUdOKGNiX3NpemVbMl0sIHVhKTsKLSAgICBjYl9vZmZzZXRbNF0gPSBjYl9v ZmZzZXRbM10gKyBGRkFMSUdOKGNiX3NpemVbM10sIHVhKTsKLQotICAgIFJFVChmZl92a19jcmVh dGVfYnVmKCZjdHgtPnMsICZwcnYtPnVuaWZvcm1fYnVmLAotICAgICAgICAgICAgICAgICAgICAg ICAgIDY0KnNpemVvZihmbG9hdCkgKyA2NCpzaXplb2YodWludDhfdCkgKyBjYl9vZmZzZXRbNF0g KyAyNTYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCwKLSAgICAgICAgICAg ICAgICAgICAgICAgICBWS19CVUZGRVJfVVNBR0VfU0hBREVSX0RFVklDRV9BRERSRVNTX0JJVCB8 Ci0gICAgICAgICAgICAgICAgICAgICAgICAgVktfQlVGRkVSX1VTQUdFX1VOSUZPUk1fQlVGRkVS X0JJVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBWS19NRU1PUllfUFJPUEVSVFlfREVWSUNF X0xPQ0FMX0JJVCB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgVktfTUVNT1JZX1BST1BFUlRZ X0hPU1RfVklTSUJMRV9CSVQpKTsKLQotICAgIHVpbnQ4X3QgKnVuaWZvcm1fYnVmOwotICAgIFJF VChmZl92a19tYXBfYnVmZmVyKCZjdHgtPnMsICZwcnYtPnVuaWZvcm1fYnVmLCAmdW5pZm9ybV9i dWYsIDApKTsKLQotICAgIC8qIERDVCBzY2FsZXMgKi8KLSAgICBmbG9hdCAqZGN0X3NjYWxlX2J1 ZiA9IChmbG9hdCAqKXVuaWZvcm1fYnVmOwotICAgIGRvdWJsZSBpZGN0Xzhfc2NhbGVzWzhdID0g ewotICAgICAgICBjb3MoNC4wKk1fUEkvMTYuMCkgLyAyLjAsCi0gICAgICAgIGNvcygxLjAqTV9Q SS8xNi4wKSAvIDIuMCwKLSAgICAgICAgY29zKDIuMCpNX1BJLzE2LjApIC8gMi4wLAotICAgICAg ICBjb3MoMy4wKk1fUEkvMTYuMCkgLyAyLjAsCi0gICAgICAgIGNvcyg0LjAqTV9QSS8xNi4wKSAv IDIuMCwKLSAgICAgICAgY29zKDUuMCpNX1BJLzE2LjApIC8gMi4wLAotICAgICAgICBjb3MoNi4w Kk1fUEkvMTYuMCkgLyAyLjAsCi0gICAgICAgIGNvcyg3LjAqTV9QSS8xNi4wKSAvIDIuMCwKLSAg ICB9OwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNjQ7IGkrKykKLSAgICAgICAgZGN0X3NjYWxl X2J1ZltpXSA9IChmbG9hdCkoaWRjdF84X3NjYWxlc1tpID4+IDNdICoKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaWRjdF84X3NjYWxlc1tpICAmIDddKTsKLQotICAgIC8qIFNj YW4gdGFibGUgKi8KLSAgICB1aW50OF90ICpzY2FuX2J1ZiA9IHVuaWZvcm1fYnVmICsgNjQqc2l6 ZW9mKGZsb2F0KTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IDY0OyBpKyspCi0gICAgICAgIHNj YW5fYnVmW3Byci0+c2NhbltpXV0gPSBpOwotCi0gICAgLyogQ29kZWJvb2tzICovCi0gICAgbWVt Y3B5KHVuaWZvcm1fYnVmICsgY2Jfb2Zmc2V0WzBdLCBmZl9wcm9yZXNfcmF3X2RjX2NiLAotICAg ICAgICAgICBzaXplb2YoZmZfcHJvcmVzX3Jhd19kY19jYikpOwotICAgIG1lbWNweSh1bmlmb3Jt X2J1ZiArIGNiX29mZnNldFsxXSwgZmZfcHJvcmVzX3Jhd19hY19jYiwKLSAgICAgICAgICAgc2l6 ZW9mKGZmX3Byb3Jlc19yYXdfYWNfY2IpKTsKLSAgICBtZW1jcHkodW5pZm9ybV9idWYgKyBjYl9v ZmZzZXRbMl0sIGZmX3Byb3Jlc19yYXdfcm5fY2IsCi0gICAgICAgICAgIHNpemVvZihmZl9wcm9y ZXNfcmF3X3JuX2NiKSk7Ci0gICAgbWVtY3B5KHVuaWZvcm1fYnVmICsgY2Jfb2Zmc2V0WzNdLCBm Zl9wcm9yZXNfcmF3X2xuX2NiLAotICAgICAgICAgICBzaXplb2YoZmZfcHJvcmVzX3Jhd19sbl9j YikpOwotCi0gICAgUkVUKGZmX3ZrX3VubWFwX2J1ZmZlcigmY3R4LT5zLCAmcHJ2LT51bmlmb3Jt X2J1ZiwgMSkpOwotCi0gICAgLyogRG9uZTsgdXBkYXRlIGRlc2NyaXB0b3JzICovCi0gICAgZm9y IChpbnQgaSA9IDA7IGkgPCAyOyBpKyspIHsKLSAgICAgICAgUkVUKGZmX3ZrX3NoYWRlcl91cGRh dGVfZGVzY19idWZmZXIoJmN0eC0+cywgJmN0eC0+ZXhlY19wb29sLmNvbnRleHRzWzBdLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJ2LT5kZWNvZGVbaV0s IDEsIDAsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZw cnYtPnVuaWZvcm1fYnVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAwLCA2NCpzaXplb2YoZmxvYXQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBWS19GT1JNQVRfVU5ERUZJTkVEKSk7Ci0gICAgICAgIFJFVChmZl92a19z aGFkZXJfdXBkYXRlX2Rlc2NfYnVmZmVyKCZjdHgtPnMsICZjdHgtPmV4ZWNfcG9vbC5jb250ZXh0 c1swXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBydi0+ ZGVjb2RlW2ldLCAxLCAxLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAmcHJ2LT51bmlmb3JtX2J1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgNjQqc2l6ZW9mKGZsb2F0KSwgNjQqc2l6ZW9mKHVpbnQ4X3QpLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19GT1JNQVRfVU5ERUZJ TkVEKSk7Ci0gICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgNDsgaisrKQotICAgICAgICAgICAg UkVUKGZmX3ZrX3NoYWRlcl91cGRhdGVfZGVzY19idWZmZXIoJmN0eC0+cywgJmN0eC0+ZXhlY19w b29sLmNvbnRleHRzWzBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJnBydi0+ZGVjb2RlW2ldLCAxLCAyICsgaiwgMCwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwcnYtPnVuaWZvcm1fYnVmLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Jfb2Zmc2V0W2pdLCBj Yl9zaXplW2pdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgVktfRk9STUFUX1VOREVGSU5FRCkpOwotICAgIH0KLQotZmFpbDoKLSAgICBzcHYtPnVuaW5p dCgmc3B2KTsKLQotICAgIHJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyB2b2lkIHZrX3Byb3Jlc19y YXdfZnJlZV9mcmFtZV9wcml2KEFWUmVmU3RydWN0T3BhcXVlIF9od2N0eCwgdm9pZCAqZGF0YSkK LXsKLSAgICBBVkhXRGV2aWNlQ29udGV4dCAqZGV2X2N0eCA9IF9od2N0eC5uYzsKLQotICAgIFBy b1Jlc1JBV1Z1bGthbkRlY29kZVBpY3R1cmUgKnBwID0gZGF0YTsKLSAgICBGRlZ1bGthbkRlY29k ZVBpY3R1cmUgKnZwID0gJnBwLT52cDsKLQotICAgIGZmX3ZrX2RlY29kZV9mcmVlX2ZyYW1lKGRl dl9jdHgsIHZwKTsKLX0KLQotY29uc3QgRkZIV0FjY2VsIGZmX3Byb3Jlc19yYXdfdnVsa2FuX2h3 YWNjZWwgPSB7Ci0gICAgLnAubmFtZSAgICAgICAgICAgICAgICA9ICJwcm9yZXNfcmF3X3Z1bGth biIsCi0gICAgLnAudHlwZSAgICAgICAgICAgICAgICA9IEFWTUVESUFfVFlQRV9WSURFTywKLSAg ICAucC5pZCAgICAgICAgICAgICAgICAgID0gQVZfQ09ERUNfSURfUFJPUkVTX1JBVywKLSAgICAu cC5waXhfZm10ICAgICAgICAgICAgID0gQVZfUElYX0ZNVF9WVUxLQU4sCi0gICAgLnN0YXJ0X2Zy YW1lICAgICAgICAgICA9ICZ2a19wcm9yZXNfcmF3X3N0YXJ0X2ZyYW1lLAotICAgIC5kZWNvZGVf c2xpY2UgICAgICAgICAgPSAmdmtfcHJvcmVzX3Jhd19kZWNvZGVfc2xpY2UsCi0gICAgLmVuZF9m cmFtZSAgICAgICAgICAgICA9ICZ2a19wcm9yZXNfcmF3X2VuZF9mcmFtZSwKLSAgICAuZnJlZV9m cmFtZV9wcml2ICAgICAgID0gJnZrX3Byb3Jlc19yYXdfZnJlZV9mcmFtZV9wcml2LAotICAgIC5m cmFtZV9wcml2X2RhdGFfc2l6ZSAgPSBzaXplb2YoUHJvUmVzUkFXVnVsa2FuRGVjb2RlUGljdHVy ZSksCi0gICAgLmluaXQgICAgICAgICAgICAgICAgICA9ICZ2a19kZWNvZGVfcHJvcmVzX3Jhd19p bml0LAotICAgIC51cGRhdGVfdGhyZWFkX2NvbnRleHQgPSAmZmZfdmtfdXBkYXRlX3RocmVhZF9j b250ZXh0LAotICAgIC5kZWNvZGVfcGFyYW1zICAgICAgICAgPSAmZmZfdmtfcGFyYW1zX2ludmFs aWRhdGUsCi0gICAgLmZsdXNoICAgICAgICAgICAgICAgICA9ICZmZl92a19kZWNvZGVfZmx1c2gs Ci0gICAgLnVuaW5pdCAgICAgICAgICAgICAgICA9ICZmZl92a19kZWNvZGVfdW5pbml0LAotICAg IC5mcmFtZV9wYXJhbXMgICAgICAgICAgPSAmZmZfdmtfZnJhbWVfcGFyYW1zLAotICAgIC5wcml2 X2RhdGFfc2l6ZSAgICAgICAgPSBzaXplb2YoRkZWdWxrYW5EZWNvZGVDb250ZXh0KSwKLSAgICAu Y2Fwc19pbnRlcm5hbCAgICAgICAgID0gSFdBQ0NFTF9DQVBfQVNZTkNfU0FGRSB8IEhXQUNDRUxf Q0FQX1RIUkVBRF9TQUZFLAotfTsKLS0gCjIuNDkuMQoKCkZyb20gOWNlMjZlZGM5NjdiZjFiMjdh ZDA0Njk4NDBhYzQyODBhYTA2OGQ5YSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKRnJvbTogSmFt YWlrYTEgPGx1a2FzemN6MThAd3AucGw+CkRhdGU6IFdlZCwgMyBTZXAgMjAyNSAxMzozOTo0NCAr MDAwMApTdWJqZWN0OiBbUEFUQ0ggMDg2LzExOF0gQ2hhbmdpbmcgdnVsa2FuIGZpbGUgZGlyZWN0 b3J5CgotLS0KIGxpYmF2Y29kZWMvdnVsa2FuL3Z1bGthbl9wcm9yZXNfcmF3LmMgfCA1MDMgKysr KysrKysrKysrKysrKysrKysrKysrKysKIDEgZmlsZSBjaGFuZ2VkLCA1MDMgaW5zZXJ0aW9ucygr KQogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2Y29kZWMvdnVsa2FuL3Z1bGthbl9wcm9yZXNfcmF3 LmMKCmRpZmYgLS1naXQgYS9saWJhdmNvZGVjL3Z1bGthbi92dWxrYW5fcHJvcmVzX3Jhdy5jIGIv bGliYXZjb2RlYy92dWxrYW4vdnVsa2FuX3Byb3Jlc19yYXcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwLi5hMzg4MzVlZmNjCi0tLSAvZGV2L251bGwKKysrIGIvbGliYXZj b2RlYy92dWxrYW4vdnVsa2FuX3Byb3Jlc19yYXcuYwpAQCAtMCwwICsxLDUwMyBAQAorLyoKKyAq IENvcHlyaWdodCAoYykgMjAyNSBMeW5uZSA8ZGV2QGx5bm5lLmVlPgorICoKKyAqIFRoaXMgZmls ZSBpcyBwYXJ0IG9mIEZGbXBlZy4KKyAqCisgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91 IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMi4x IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor ICoKKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl ZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxv bmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZv dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rvbiwg TUEgMDIxMTAtMTMwMSBVU0EKKyAqLworCisjaW5jbHVkZSAidnVsa2FuX2RlY29kZS5oIgorI2lu Y2x1ZGUgImxpYmF2Y29kZWMvaHdhY2NlbF9pbnRlcm5hbC5oIgorCisjaW5jbHVkZSAibGliYXZj b2RlYy9wcm9yZXNfcmF3LmgiCisjaW5jbHVkZSAiLi4vLi4vbGliYXZ1dGlsL3Z1bGthbi92dWxr YW5fc3BpcnYuaCIKKyNpbmNsdWRlICJsaWJhdnV0aWwvbWVtLmgiCisKK2V4dGVybiBjb25zdCBj aGFyICpmZl9zb3VyY2VfY29tbW9uX2NvbXA7CitleHRlcm4gY29uc3QgY2hhciAqZmZfc291cmNl X3Byb3Jlc19yYXdfY29tcDsKKworY29uc3QgRkZWdWxrYW5EZWNvZGVEZXNjcmlwdG9yIGZmX3Zr X2RlY19wcm9yZXNfcmF3X2Rlc2MgPSB7CisgICAgLmNvZGVjX2lkICAgICAgICAgPSBBVl9DT0RF Q19JRF9QUk9SRVNfUkFXLAorICAgIC5kZWNvZGVfZXh0ZW5zaW9uID0gRkZfVktfRVhUX1BVU0hf REVTQ1JJUFRPUiwKKyAgICAucXVldWVfZmxhZ3MgICAgICA9IFZLX1FVRVVFX0NPTVBVVEVfQklU LAorfTsKKwordHlwZWRlZiBzdHJ1Y3QgUHJvUmVzUkFXVnVsa2FuRGVjb2RlUGljdHVyZSB7Cisg ICAgRkZWdWxrYW5EZWNvZGVQaWN0dXJlIHZwOworCisgICAgQVZCdWZmZXJSZWYgKnRpbGVfZGF0 YTsKKyAgICB1aW50MzJfdCBuYl90aWxlczsKK30gUHJvUmVzUkFXVnVsa2FuRGVjb2RlUGljdHVy ZTsKKwordHlwZWRlZiBzdHJ1Y3QgUHJvUmVzUkFXVnVsa2FuRGVjb2RlQ29udGV4dCB7CisgICAg RkZWdWxrYW5TaGFkZXIgZGVjb2RlWzJdOworCisgICAgQVZCdWZmZXJQb29sICp0aWxlX2RhdGFf cG9vbDsKKworICAgIEZGVmtCdWZmZXIgdW5pZm9ybV9idWY7Cit9IFByb1Jlc1JBV1Z1bGthbkRl Y29kZUNvbnRleHQ7CisKK3R5cGVkZWYgc3RydWN0IERlY29kZVB1c2hEYXRhIHsKKyAgICBWa0Rl dmljZUFkZHJlc3MgdGlsZV9kYXRhOworICAgIFZrRGV2aWNlQWRkcmVzcyBwa3RfZGF0YTsKKyAg ICB1aW50MzJfdCBmcmFtZV9zaXplWzJdOworICAgIHVpbnQzMl90IHRpbGVfc2l6ZVsyXTsKKyAg ICB1aW50OF90ICBxbWF0WzY0XTsKK30gRGVjb2RlUHVzaERhdGE7CisKK3R5cGVkZWYgc3RydWN0 IFRpbGVEYXRhIHsKKyAgICBpbnQzMl90IHBvc1syXTsKKyAgICB1aW50MzJfdCBvZmZzZXQ7Cisg ICAgdWludDMyX3Qgc2l6ZTsKK30gVGlsZURhdGE7CisKK3N0YXRpYyBpbnQgdmtfcHJvcmVzX3Jh d19zdGFydF9mcmFtZShBVkNvZGVjQ29udGV4dCAgICAgICAgICAqYXZjdHgsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQVZCdWZmZXJSZWYgICAgICAgKmJ1ZmZl cl9yZWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZfdW51c2VkIGNv bnN0IHVpbnQ4X3QgKmJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBhdl91bnVzZWQgdWludDMyX3QgICAgICAgc2l6ZSkKK3sKKyAgICBpbnQgZXJyOworICAgIEZG VnVsa2FuRGVjb2RlQ29udGV4dCAqZGVjID0gYXZjdHgtPmludGVybmFsLT5od2FjY2VsX3ByaXZf ZGF0YTsKKyAgICBGRlZ1bGthbkRlY29kZVNoYXJlZCAqY3R4ID0gZGVjLT5zaGFyZWRfY3R4Owor ICAgIFByb1Jlc1JBV1Z1bGthbkRlY29kZUNvbnRleHQgKnBydiA9IGN0eC0+c2RfY3R4OworICAg IFByb1Jlc1JBV0NvbnRleHQgKnByciA9IGF2Y3R4LT5wcml2X2RhdGE7CisKKyAgICBQcm9SZXNS QVdWdWxrYW5EZWNvZGVQaWN0dXJlICpwcCA9IHByci0+aHdhY2NlbF9waWN0dXJlX3ByaXZhdGU7 CisgICAgRkZWdWxrYW5EZWNvZGVQaWN0dXJlICp2cCA9ICZwcC0+dnA7CisKKyAgICAvKiBIb3N0 IG1hcCB0aGUgaW5wdXQgdGlsZSBkYXRhIGlmIHN1cHBvcnRlZCAqLworICAgIGlmIChjdHgtPnMu ZXh0ZW5zaW9ucyAmIEZGX1ZLX0VYVF9FWFRFUk5BTF9IT1NUX01FTU9SWSkKKyAgICAgICAgZmZf dmtfaG9zdF9tYXBfYnVmZmVyKCZjdHgtPnMsICZ2cC0+c2xpY2VzX2J1ZiwgYnVmZmVyX3JlZi0+ ZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcl9yZWYsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBWS19CVUZGRVJfVVNBR0VfU1RPUkFHRV9CVUZGRVJfQklU IHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZLX0JVRkZFUl9VU0FHRV9TSEFERVJf REVWSUNFX0FERFJFU1NfQklUKTsKKworICAgIC8qIEFsbG9jYXRlIHRpbGUgZGF0YSAqLworICAg IGVyciA9IGZmX3ZrX2dldF9wb29sZWRfYnVmZmVyKCZjdHgtPnMsICZwcnYtPnRpbGVfZGF0YV9w b29sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwcC0+dGlsZV9kYXRhLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZLX0JVRkZFUl9VU0FHRV9TVE9SQUdF X0JVRkZFUl9CSVQgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZLX0JVRkZF Ul9VU0FHRV9TSEFERVJfREVWSUNFX0FERFJFU1NfQklULAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIE5VTEwsIHByci0+bmJfdGlsZXMqc2l6ZW9mKFRpbGVEYXRhKSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19NRU1PUllfUFJPUEVSVFlfREVWSUNFX0xP Q0FMX0JJVCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfTUVNT1JZX1BS T1BFUlRZX0hPU1RfVklTSUJMRV9CSVQpOworICAgIGlmIChlcnIgPCAwKQorICAgICAgICByZXR1 cm4gZXJyOworCisgICAgLyogUHJlcGFyZSBmcmFtZSB0byBiZSB1c2VkICovCisgICAgZXJyID0g ZmZfdmtfZGVjb2RlX3ByZXBhcmVfZnJhbWVfc2RyKGRlYywgcHJyLT5mcmFtZSwgdnAsIDEsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZGX1ZLX1JFUF9GTE9BVCwg MCk7CisgICAgaWYgKGVyciA8IDApCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICByZXR1cm4g MDsKK30KKworc3RhdGljIGludCB2a19wcm9yZXNfcmF3X2RlY29kZV9zbGljZShBVkNvZGVjQ29u dGV4dCAqYXZjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IHVpbnQ4X3QgICpkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1 aW50MzJfdCAgICAgICAgc2l6ZSkKK3sKKyAgICBQcm9SZXNSQVdDb250ZXh0ICpwcnIgPSBhdmN0 eC0+cHJpdl9kYXRhOworCisgICAgUHJvUmVzUkFXVnVsa2FuRGVjb2RlUGljdHVyZSAqcHAgPSBw cnItPmh3YWNjZWxfcGljdHVyZV9wcml2YXRlOworICAgIEZGVnVsa2FuRGVjb2RlUGljdHVyZSAq dnAgPSAmcHAtPnZwOworCisgICAgRkZWa0J1ZmZlciAqdGlsZV9kYXRhX2J1ZiA9IChGRlZrQnVm ZmVyICopcHAtPnRpbGVfZGF0YS0+ZGF0YTsKKyAgICBUaWxlRGF0YSAqdGQgPSAoVGlsZURhdGEg Kil0aWxlX2RhdGFfYnVmLT5tYXBwZWRfbWVtOworICAgIEZGVmtCdWZmZXIgKnNsaWNlc19idWYg PSB2cC0+c2xpY2VzX2J1ZiA/IChGRlZrQnVmZmVyICopdnAtPnNsaWNlc19idWYtPmRhdGEgOiBO VUxMOworCisgICAgdGRbcHAtPm5iX3RpbGVzXS5wb3NbMF0gPSBwcnItPnRpbGVzW3BwLT5uYl90 aWxlc10ueDsKKyAgICB0ZFtwcC0+bmJfdGlsZXNdLnBvc1sxXSA9IHByci0+dGlsZXNbcHAtPm5i X3RpbGVzXS55OworICAgIHRkW3BwLT5uYl90aWxlc10uc2l6ZSA9IHNpemU7CisKKyAgICBpZiAo dnAtPnNsaWNlc19idWYgJiYgc2xpY2VzX2J1Zi0+aG9zdF9yZWYpIHsKKyAgICAgICAgdGRbcHAt Pm5iX3RpbGVzXS5vZmZzZXQgPSBkYXRhIC0gc2xpY2VzX2J1Zi0+bWFwcGVkX21lbTsKKyAgICAg ICAgcHAtPm5iX3RpbGVzKys7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaW50IGVycjsKKyAgICAg ICAgdGRbcHAtPm5iX3RpbGVzXS5vZmZzZXQgPSB2cC0+c2xpY2VzX3NpemU7CisgICAgICAgIGVy ciA9IGZmX3ZrX2RlY29kZV9hZGRfc2xpY2UoYXZjdHgsIHZwLCBkYXRhLCBzaXplLCAwLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwcC0+bmJfdGlsZXMsIE5VTEwpOwor ICAgICAgICBpZiAoZXJyIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgfQorCisg ICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmtfcHJvcmVzX3Jhd19lbmRfZnJhbWUoQVZD b2RlY0NvbnRleHQgKmF2Y3R4KQoreworICAgIGludCBlcnI7CisgICAgRkZWdWxrYW5EZWNvZGVD b250ZXh0ICpkZWMgPSBhdmN0eC0+aW50ZXJuYWwtPmh3YWNjZWxfcHJpdl9kYXRhOworICAgIEZG VnVsa2FuRGVjb2RlU2hhcmVkICpjdHggPSBkZWMtPnNoYXJlZF9jdHg7CisgICAgRkZWdWxrYW5G dW5jdGlvbnMgKnZrID0gJmN0eC0+cy52a2ZuOworCisgICAgUHJvUmVzUkFXQ29udGV4dCAqcHJy ID0gYXZjdHgtPnByaXZfZGF0YTsKKyAgICBQcm9SZXNSQVdWdWxrYW5EZWNvZGVDb250ZXh0ICpw cnYgPSBjdHgtPnNkX2N0eDsKKworICAgIFByb1Jlc1JBV1Z1bGthbkRlY29kZVBpY3R1cmUgKnBw ID0gcHJyLT5od2FjY2VsX3BpY3R1cmVfcHJpdmF0ZTsKKyAgICBGRlZ1bGthbkRlY29kZVBpY3R1 cmUgKnZwID0gJnBwLT52cDsKKworICAgIEZGVmtCdWZmZXIgKnNsaWNlc19idWYgPSAoRkZWa0J1 ZmZlciAqKXZwLT5zbGljZXNfYnVmLT5kYXRhOworICAgIEZGVmtCdWZmZXIgKnRpbGVfZGF0YSA9 IChGRlZrQnVmZmVyICopcHAtPnRpbGVfZGF0YS0+ZGF0YTsKKworICAgIFZrSW1hZ2VNZW1vcnlC YXJyaWVyMiBpbWdfYmFyWzhdOworICAgIGludCBuYl9pbWdfYmFyID0gMDsKKworICAgIEZGVmtF eGVjQ29udGV4dCAqZXhlYyA9IGZmX3ZrX2V4ZWNfZ2V0KCZjdHgtPnMsICZjdHgtPmV4ZWNfcG9v bCk7CisgICAgZmZfdmtfZXhlY19zdGFydCgmY3R4LT5zLCBleGVjKTsKKworICAgIC8qIFByZXBh cmUgZGVwcyAqLworICAgIFJFVChmZl92a19leGVjX2FkZF9kZXBfZnJhbWUoJmN0eC0+cywgZXhl YywgcHJyLT5mcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZLX1BJUEVM SU5FX1NUQUdFXzJfQUxMX0NPTU1BTkRTX0JJVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFZLX1BJUEVMSU5FX1NUQUdFXzJfQ09NUFVURV9TSEFERVJfQklUKSk7CisKKyAgICBl cnIgPSBmZl92a19leGVjX21pcnJvcl9zZW1fdmFsdWUoJmN0eC0+cywgZXhlYywgJnZwLT5zZW0s ICZ2cC0+c2VtX3ZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw cnItPmZyYW1lKTsKKyAgICBpZiAoZXJyIDwgMCkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAg IFJFVChmZl92a19leGVjX2FkZF9kZXBfYnVmKCZjdHgtPnMsIGV4ZWMsICZwcC0+dGlsZV9kYXRh LCAxLCAwKSk7CisgICAgcHAtPnRpbGVfZGF0YSA9IE5VTEw7CisgICAgUkVUKGZmX3ZrX2V4ZWNf YWRkX2RlcF9idWYoJmN0eC0+cywgZXhlYywgJnZwLT5zbGljZXNfYnVmLCAxLCAwKSk7CisgICAg dnAtPnNsaWNlc19idWYgPSBOVUxMOworCisgICAgZmZfdmtfZnJhbWVfYmFycmllcigmY3R4LT5z LCBleGVjLCBwcnItPmZyYW1lLCBpbWdfYmFyLCAmbmJfaW1nX2JhciwKKyAgICAgICAgICAgICAg ICAgICAgICAgIFZLX1BJUEVMSU5FX1NUQUdFXzJfQUxMX0NPTU1BTkRTX0JJVCwKKyAgICAgICAg ICAgICAgICAgICAgICAgIFZLX1BJUEVMSU5FX1NUQUdFXzJfQUxMX0NPTU1BTkRTX0JJVCwKKyAg ICAgICAgICAgICAgICAgICAgICAgIFZLX0FDQ0VTU18yX1RSQU5TRkVSX1dSSVRFX0JJVCwKKyAg ICAgICAgICAgICAgICAgICAgICAgIFZLX0lNQUdFX0xBWU9VVF9HRU5FUkFMLAorICAgICAgICAg ICAgICAgICAgICAgICAgVktfUVVFVUVfRkFNSUxZX0lHTk9SRUQpOworCisgICAgdmstPkNtZFBp cGVsaW5lQmFycmllcjIoZXhlYy0+YnVmLCAmKFZrRGVwZW5kZW5jeUluZm8pIHsKKyAgICAgICAg LnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfREVQRU5ERU5DWV9JTkZPLAorICAgICAgICAucElt YWdlTWVtb3J5QmFycmllcnMgPSBpbWdfYmFyLAorICAgICAgICAuaW1hZ2VNZW1vcnlCYXJyaWVy Q291bnQgPSBuYl9pbWdfYmFyLAorICAgIH0pOworICAgIG5iX2ltZ19iYXIgPSAwOworCisgICAg RkZWdWxrYW5TaGFkZXIgKmRlY29kZV9zaGFkZXIgPSAmcHJ2LT5kZWNvZGVbcHJyLT52ZXJzaW9u XTsKKyAgICBmZl92a19zaGFkZXJfdXBkYXRlX2ltZ19hcnJheSgmY3R4LT5zLCBleGVjLCBkZWNv ZGVfc2hhZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByci0+ZnJhbWUs IHZwLT52aWV3Lm91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZLX0lNQUdFX0xBWU9VVF9HRU5FUkFM LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZLX05VTExfSEFORExFKTsKKwor ICAgIGZmX3ZrX2V4ZWNfYmluZF9zaGFkZXIoJmN0eC0+cywgZXhlYywgZGVjb2RlX3NoYWRlcik7 CisKKyAgICAvKiBVcGRhdGUgcHVzaCBkYXRhICovCisgICAgRGVjb2RlUHVzaERhdGEgcGRfZGVj b2RlID0gKERlY29kZVB1c2hEYXRhKSB7CisgICAgICAgIC50aWxlX2RhdGEgPSB0aWxlX2RhdGEt PmFkZHJlc3MsCisgICAgICAgIC5wa3RfZGF0YSA9IHNsaWNlc19idWYtPmFkZHJlc3MsCisgICAg ICAgIC5mcmFtZV9zaXplWzBdID0gYXZjdHgtPndpZHRoLAorICAgICAgICAuZnJhbWVfc2l6ZVsx XSA9IGF2Y3R4LT5oZWlnaHQsCisgICAgICAgIC50aWxlX3NpemVbMF0gPSBwcnItPnR3LAorICAg ICAgICAudGlsZV9zaXplWzFdID0gcHJyLT50aCwKKyAgICB9OworICAgIG1lbWNweShwZF9kZWNv ZGUucW1hdCwgcHJyLT5xbWF0LCA2NCk7CisgICAgZmZfdmtfc2hhZGVyX3VwZGF0ZV9wdXNoX2Nv bnN0KCZjdHgtPnMsIGV4ZWMsIGRlY29kZV9zaGFkZXIsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFZLX1NIQURFUl9TVEFHRV9DT01QVVRFX0JJVCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgMCwgc2l6ZW9mKHBkX2RlY29kZSksICZwZF9kZWNvZGUpOwor CisgICAgdmstPkNtZERpc3BhdGNoKGV4ZWMtPmJ1ZiwgcHJyLT5uYl90dywgcHJyLT5uYl90aCwg MSk7CisKKyAgICBlcnIgPSBmZl92a19leGVjX3N1Ym1pdCgmY3R4LT5zLCBleGVjKTsKKyAgICBp ZiAoZXJyIDwgMCkKKyAgICAgICAgcmV0dXJuIGVycjsKKworZmFpbDoKKyAgICByZXR1cm4gMDsK K30KKworc3RhdGljIGludCBpbml0X2RlY29kZV9zaGFkZXIoUHJvUmVzUkFXQ29udGV4dCAqcHJy LCBGRlZ1bGthbkNvbnRleHQgKnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGRlZr RXhlY1Bvb2wgKnBvb2wsIEZGVmtTUElSVkNvbXBpbGVyICpzcHYsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBGRlZ1bGthblNoYWRlciAqc2hkLCBpbnQgdmVyc2lvbikKK3sKKyAgICBp bnQgZXJyOworICAgIEZGVnVsa2FuRGVzY3JpcHRvclNldEJpbmRpbmcgKmRlc2Nfc2V0OworICAg IGludCBwYXJhbGxlbF9yb3dzID0gMTsKKworICAgIHVpbnQ4X3QgKnNwdl9kYXRhOworICAgIHNp emVfdCBzcHZfbGVuOworICAgIHZvaWQgKnNwdl9vcGFxdWUgPSBOVUxMOworCisgICAgaWYgKHMt PnByb3BzLnByb3BlcnRpZXMubGltaXRzLm1heENvbXB1dGVXb3JrR3JvdXBJbnZvY2F0aW9ucyA8 IDUxMiB8fAorICAgICAgICBzLT5wcm9wcy5wcm9wZXJ0aWVzLmRldmljZVR5cGUgPT0gVktfUEhZ U0lDQUxfREVWSUNFX1RZUEVfSU5URUdSQVRFRF9HUFUpCisgICAgICAgIHBhcmFsbGVsX3Jvd3Mg PSAwOworCisgICAgUkVUKGZmX3ZrX3NoYWRlcl9pbml0KHMsIHNoZCwgInByb3Jlc19yYXciLAor ICAgICAgICAgICAgICAgICAgICAgICAgICBWS19TSEFERVJfU1RBR0VfQ09NUFVURV9CSVQsCisg ICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBjaGFyICpbXSkgeyAiR0xfRVhUX2J1ZmZl cl9yZWZlcmVuY2UiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIkdMX0VYVF9idWZmZXJfcmVmZXJlbmNlMiIsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAiR0xfRVhUX251bGxfaW5pdGlhbGl6ZXIiIH0sIDMsCisgICAg ICAgICAgICAgICAgICAgICAgICAgIHBhcmFsbGVsX3Jvd3MgPyA4IDogMSAvKiA4eDggdHJhbnNm b3JtcywgOC1wb2ludCB3aWR0aCAqLywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdmVyc2lv biA9PSAwID8gOCA6IDE2IC8qIEhvcml6b250YWwgYmxvY2tzICovLAorICAgICAgICAgICAgICAg ICAgICAgICAgICA0IC8qIENvbXBvbmVudHMgKi8sCisgICAgICAgICAgICAgICAgICAgICAgICAg IDApKTsKKworICAgIGlmIChwYXJhbGxlbF9yb3dzKQorICAgICAgICBHTFNMQygwLCAjZGVmaW5l IFBBUkFMTEVMX1JPV1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICk7CisKKyAgICAvKiBDb21tb24gY29kZWMgaGVhZGVyICovCisgICAgR0xTTEQoZmZfc291 cmNlX2NvbW1vbl9jb21wKTsKKworICAgIEdMU0xDKDAsIGxheW91dChidWZmZXJfcmVmZXJlbmNl LCBidWZmZXJfcmVmZXJlbmNlX2FsaWduID0gMTYpIGJ1ZmZlciBUaWxlRGF0YSB7ICk7CisgICAg R0xTTEMoMSwgICAgaXZlYzIgcG9zOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBHTFNMQygxLCAgICB1aW50IG9mZnNldDsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAp OworICAgIEdMU0xDKDEsICAgIHVpbnQgc2l6ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgR0xTTEMoMCwgfTsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKTsKKyAgICBHTFNMQygwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgIEdMU0xDKDAsIGxh eW91dChwdXNoX2NvbnN0YW50LCBzY2FsYXIpIHVuaWZvcm0gcHVzaENvbnN0YW50cyB7ICAgICAg ICAgICAgICAgICAgICk7CisgICAgR0xTTEMoMSwgICAgVGlsZURhdGEgdGlsZV9kYXRhOyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBHTFNM QygxLCAgICB1OGJ1ZiBwa3RfZGF0YTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICApOworICAgIEdMU0xDKDEsICAgIHV2ZWMyIGZyYW1lX3NpemU7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Cisg ICAgR0xTTEMoMSwgICAgdXZlYzIgdGlsZV9zaXplOyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICBHTFNMQygxLCAgICB1aW50OF90IHFt YXRbNjRdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICApOworICAgIEdMU0xDKDAsIH07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgR0xTTEMoMCwgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKTsKKyAgICBmZl92a19zaGFkZXJfYWRkX3B1c2hfY29uc3Qoc2hkLCAwLCBzaXpl b2YoRGVjb2RlUHVzaERhdGEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19T SEFERVJfU1RBR0VfQ09NUFVURV9CSVQpOworCisgICAgZGVzY19zZXQgPSAoRkZWdWxrYW5EZXNj cmlwdG9yU2V0QmluZGluZyBbXSkgeworICAgICAgICB7CisgICAgICAgICAgICAubmFtZSAgICAg ICA9ICJkc3QiLAorICAgICAgICAgICAgLnR5cGUgICAgICAgPSBWS19ERVNDUklQVE9SX1RZUEVf U1RPUkFHRV9JTUFHRSwKKyAgICAgICAgICAgIC5tZW1fbGF5b3V0ID0gInIxNiIsCisgICAgICAg ICAgICAubWVtX3F1YWxpICA9ICJ3cml0ZW9ubHkiLAorICAgICAgICAgICAgLmRpbWVuc2lvbnMg PSAyLAorICAgICAgICAgICAgLnN0YWdlcyAgICAgPSBWS19TSEFERVJfU1RBR0VfQ09NUFVURV9C SVQsCisgICAgICAgIH0sCisgICAgfTsKKyAgICBSRVQoZmZfdmtfc2hhZGVyX2FkZF9kZXNjcmlw dG9yX3NldChzLCBzaGQsIGRlc2Nfc2V0LCAxLCAwLCAwKSk7CisKKyAgICBkZXNjX3NldCA9IChG RlZ1bGthbkRlc2NyaXB0b3JTZXRCaW5kaW5nIFtdKSB7CisgICAgICAgIHsKKyAgICAgICAgICAg IC5uYW1lICAgICAgICA9ICJkY3Rfc2NhbGVfYnVmIiwKKyAgICAgICAgICAgIC50eXBlICAgICAg ICA9IFZLX0RFU0NSSVBUT1JfVFlQRV9VTklGT1JNX0JVRkZFUiwKKyAgICAgICAgICAgIC5zdGFn ZXMgICAgICA9IFZLX1NIQURFUl9TVEFHRV9DT01QVVRFX0JJVCwKKyAgICAgICAgICAgIC5tZW1f bGF5b3V0ICA9ICJzY2FsYXIiLAorICAgICAgICAgICAgLmJ1Zl9jb250ZW50ID0gImZsb2F0IGlk Y3RfOHg4X3NjYWxlc1s2NF07IiwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAg Lm5hbWUgICAgICAgID0gInNjYW5fYnVmIiwKKyAgICAgICAgICAgIC50eXBlICAgICAgICA9IFZL X0RFU0NSSVBUT1JfVFlQRV9VTklGT1JNX0JVRkZFUiwKKyAgICAgICAgICAgIC5zdGFnZXMgICAg ICA9IFZLX1NIQURFUl9TVEFHRV9DT01QVVRFX0JJVCwKKyAgICAgICAgICAgIC5tZW1fbGF5b3V0 ICA9ICJzY2FsYXIiLAorICAgICAgICAgICAgLmJ1Zl9jb250ZW50ID0gInVpbnQ4X3Qgc2Nhbls2 NF07IiwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAgICAgLm5hbWUgICAgICAgID0g ImRjX2NiX2J1ZiIsCisgICAgICAgICAgICAudHlwZSAgICAgICAgPSBWS19ERVNDUklQVE9SX1RZ UEVfVU5JRk9STV9CVUZGRVIsCisgICAgICAgICAgICAuc3RhZ2VzICAgICAgPSBWS19TSEFERVJf U1RBR0VfQ09NUFVURV9CSVQsCisgICAgICAgICAgICAubWVtX2xheW91dCAgPSAic2NhbGFyIiwK KyAgICAgICAgICAgIC5idWZfY29udGVudCA9ICJ1aW50OF90IGRjX2NiWzEzXTsiLAorICAgICAg ICB9LAorICAgICAgICB7CisgICAgICAgICAgICAubmFtZSAgICAgICAgPSAiYWNfY2JfYnVmIiwK KyAgICAgICAgICAgIC50eXBlICAgICAgICA9IFZLX0RFU0NSSVBUT1JfVFlQRV9VTklGT1JNX0JV RkZFUiwKKyAgICAgICAgICAgIC5zdGFnZXMgICAgICA9IFZLX1NIQURFUl9TVEFHRV9DT01QVVRF X0JJVCwKKyAgICAgICAgICAgIC5tZW1fbGF5b3V0ICA9ICJzY2FsYXIiLAorICAgICAgICAgICAg LmJ1Zl9jb250ZW50ID0gImludDE2X3QgYWNfY2JbOTVdOyIsCisgICAgICAgIH0sCisgICAgICAg IHsKKyAgICAgICAgICAgIC5uYW1lICAgICAgICA9ICJybl9jYl9idWYiLAorICAgICAgICAgICAg LnR5cGUgICAgICAgID0gVktfREVTQ1JJUFRPUl9UWVBFX1VOSUZPUk1fQlVGRkVSLAorICAgICAg ICAgICAgLnN0YWdlcyAgICAgID0gVktfU0hBREVSX1NUQUdFX0NPTVBVVEVfQklULAorICAgICAg ICAgICAgLm1lbV9sYXlvdXQgID0gInNjYWxhciIsCisgICAgICAgICAgICAuYnVmX2NvbnRlbnQg PSAiaW50MTZfdCBybl9jYlsyOF07IiwKKyAgICAgICAgfSwKKyAgICAgICAgeworICAgICAgICAg ICAgLm5hbWUgICAgICAgID0gImxuX2NiX2J1ZiIsCisgICAgICAgICAgICAudHlwZSAgICAgICAg PSBWS19ERVNDUklQVE9SX1RZUEVfVU5JRk9STV9CVUZGRVIsCisgICAgICAgICAgICAuc3RhZ2Vz ICAgICAgPSBWS19TSEFERVJfU1RBR0VfQ09NUFVURV9CSVQsCisgICAgICAgICAgICAubWVtX2xh eW91dCAgPSAic2NhbGFyIiwKKyAgICAgICAgICAgIC5idWZfY29udGVudCA9ICJpbnQxNl90IGxu X2NiWzE1XTsiLAorICAgICAgICB9LAorICAgIH07CisgICAgUkVUKGZmX3ZrX3NoYWRlcl9hZGRf ZGVzY3JpcHRvcl9zZXQocywgc2hkLCBkZXNjX3NldCwgNiwgMSwgMCkpOworCisgICAgR0xTTEQo ZmZfc291cmNlX3Byb3Jlc19yYXdfY29tcCk7CisKKyAgICBSRVQoc3B2LT5jb21waWxlX3NoYWRl cihzLCBzcHYsIHNoZCwgJnNwdl9kYXRhLCAmc3B2X2xlbiwgIm1haW4iLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICZzcHZfb3BhcXVlKSk7CisgICAgUkVUKGZmX3ZrX3NoYWRlcl9saW5r KHMsIHNoZCwgc3B2X2RhdGEsIHNwdl9sZW4sICJtYWluIikpOworCisgICAgUkVUKGZmX3ZrX3No YWRlcl9yZWdpc3Rlcl9leGVjKHMsIHBvb2wsIHNoZCkpOworCitmYWlsOgorICAgIGlmIChzcHZf b3BhcXVlKQorICAgICAgICBzcHYtPmZyZWVfc2hhZGVyKHNwdiwgJnNwdl9vcGFxdWUpOworCisg ICAgcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgdmtfZGVjb2RlX3Byb3Jlc19yYXdfdW5p bml0KEZGVnVsa2FuRGVjb2RlU2hhcmVkICpjdHgpCit7CisgICAgUHJvUmVzUkFXVnVsa2FuRGVj b2RlQ29udGV4dCAqZnYgPSBjdHgtPnNkX2N0eDsKKworICAgIGZmX3ZrX3NoYWRlcl9mcmVlKCZj dHgtPnMsICZmdi0+ZGVjb2RlWzBdKTsKKyAgICBmZl92a19zaGFkZXJfZnJlZSgmY3R4LT5zLCAm ZnYtPmRlY29kZVsxXSk7CisKKyAgICBmZl92a19mcmVlX2J1ZigmY3R4LT5zLCAmZnYtPnVuaWZv cm1fYnVmKTsKKworICAgIGF2X2J1ZmZlcl9wb29sX3VuaW5pdCgmZnYtPnRpbGVfZGF0YV9wb29s KTsKKworICAgIGF2X2ZyZWVwKCZmdik7Cit9CisKK3N0YXRpYyBpbnQgdmtfZGVjb2RlX3Byb3Jl c19yYXdfaW5pdChBVkNvZGVjQ29udGV4dCAqYXZjdHgpCit7CisgICAgaW50IGVycjsKKyAgICBQ cm9SZXNSQVdDb250ZXh0ICpwcnIgPSBhdmN0eC0+cHJpdl9kYXRhOworICAgIEZGVnVsa2FuRGVj b2RlQ29udGV4dCAqZGVjID0gYXZjdHgtPmludGVybmFsLT5od2FjY2VsX3ByaXZfZGF0YTsKKwor ICAgIEZGVmtTUElSVkNvbXBpbGVyICpzcHYgPSBmZl92a19zcGlydl9pbml0KCk7CisgICAgaWYg KCFzcHYpIHsKKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJVbmFibGUgdG8g aW5pdGlhbGl6ZSBTUElSLVYgY29tcGlsZXIhXG4iKTsKKyAgICAgICAgcmV0dXJuIEFWRVJST1Jf RVhURVJOQUw7CisgICAgfQorCisgICAgZXJyID0gZmZfdmtfZGVjb2RlX2luaXQoYXZjdHgpOwor ICAgIGlmIChlcnIgPCAwKQorICAgICAgICByZXR1cm4gZXJyOworCisgICAgRkZWdWxrYW5EZWNv ZGVTaGFyZWQgKmN0eCA9IGRlYy0+c2hhcmVkX2N0eDsKKyAgICBQcm9SZXNSQVdWdWxrYW5EZWNv ZGVDb250ZXh0ICpwcnYgPSBjdHgtPnNkX2N0eCA9IGF2X21hbGxvY3ooc2l6ZW9mKCpwcnYpKTsK KyAgICBpZiAoIXBydikgeworICAgICAgICBlcnIgPSBBVkVSUk9SKEVOT01FTSk7CisgICAgICAg IGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICBjdHgtPnNkX2N0eF9mcmVlID0gJnZrX2RlY29kZV9w cm9yZXNfcmF3X3VuaW5pdDsKKworICAgIC8qIFNldHVwIGRlY29kZSBzaGFkZXIgKi8KKyAgICBS RVQoaW5pdF9kZWNvZGVfc2hhZGVyKHByciwgJmN0eC0+cywgJmN0eC0+ZXhlY19wb29sLCBzcHYs ICZwcnYtPmRlY29kZVswXSwgMCkpOworICAgIFJFVChpbml0X2RlY29kZV9zaGFkZXIocHJyLCAm Y3R4LT5zLCAmY3R4LT5leGVjX3Bvb2wsIHNwdiwgJnBydi0+ZGVjb2RlWzFdLCAxKSk7CisKKyAg ICAvKiBTaXplIGluIGJ5dGVzIG9mIGVhY2ggY29kZWJvb2sgdGFibGUgKi8KKyAgICBzaXplX3Qg Y2Jfc2l6ZVs1XSA9IHsKKyAgICAgICAgMTMqc2l6ZW9mKHVpbnQ4X3QpLAorICAgICAgICA5NSpz aXplb2YoaW50MTZfdCksCisgICAgICAgIDI4KnNpemVvZihpbnQxNl90KSwKKyAgICAgICAgMTUq c2l6ZW9mKGludDE2X3QpLAorICAgIH07CisKKyAgICAvKiBPZmZzZXQgb2YgZWFjaCBjb2RlYm9v ayB0YWJsZSAqLworICAgIHNpemVfdCBjYl9vZmZzZXRbNV07CisgICAgc2l6ZV90IHVhID0gY3R4 LT5zLnByb3BzLnByb3BlcnRpZXMubGltaXRzLm1pblVuaWZvcm1CdWZmZXJPZmZzZXRBbGlnbm1l bnQ7CisgICAgY2Jfb2Zmc2V0WzBdID0gNjQqc2l6ZW9mKGZsb2F0KSArIDY0KnNpemVvZih1aW50 OF90KTsKKyAgICBjYl9vZmZzZXRbMV0gPSBjYl9vZmZzZXRbMF0gKyBGRkFMSUdOKGNiX3NpemVb MF0sIHVhKTsKKyAgICBjYl9vZmZzZXRbMl0gPSBjYl9vZmZzZXRbMV0gKyBGRkFMSUdOKGNiX3Np emVbMV0sIHVhKTsKKyAgICBjYl9vZmZzZXRbM10gPSBjYl9vZmZzZXRbMl0gKyBGRkFMSUdOKGNi X3NpemVbMl0sIHVhKTsKKyAgICBjYl9vZmZzZXRbNF0gPSBjYl9vZmZzZXRbM10gKyBGRkFMSUdO KGNiX3NpemVbM10sIHVhKTsKKworICAgIFJFVChmZl92a19jcmVhdGVfYnVmKCZjdHgtPnMsICZw cnYtPnVuaWZvcm1fYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgIDY0KnNpemVvZihmbG9h dCkgKyA2NCpzaXplb2YodWludDhfdCkgKyBjYl9vZmZzZXRbNF0gKyAyNTYsCisgICAgICAgICAg ICAgICAgICAgICAgICAgTlVMTCwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBWS19C VUZGRVJfVVNBR0VfU0hBREVSX0RFVklDRV9BRERSRVNTX0JJVCB8CisgICAgICAgICAgICAgICAg ICAgICAgICAgVktfQlVGRkVSX1VTQUdFX1VOSUZPUk1fQlVGRkVSX0JJVCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICBWS19NRU1PUllfUFJPUEVSVFlfREVWSUNFX0xPQ0FMX0JJVCB8CisgICAg ICAgICAgICAgICAgICAgICAgICAgVktfTUVNT1JZX1BST1BFUlRZX0hPU1RfVklTSUJMRV9CSVQp KTsKKworICAgIHVpbnQ4X3QgKnVuaWZvcm1fYnVmOworICAgIFJFVChmZl92a19tYXBfYnVmZmVy KCZjdHgtPnMsICZwcnYtPnVuaWZvcm1fYnVmLCAmdW5pZm9ybV9idWYsIDApKTsKKworICAgIC8q IERDVCBzY2FsZXMgKi8KKyAgICBmbG9hdCAqZGN0X3NjYWxlX2J1ZiA9IChmbG9hdCAqKXVuaWZv cm1fYnVmOworICAgIGRvdWJsZSBpZGN0Xzhfc2NhbGVzWzhdID0geworICAgICAgICBjb3MoNC4w Kk1fUEkvMTYuMCkgLyAyLjAsCisgICAgICAgIGNvcygxLjAqTV9QSS8xNi4wKSAvIDIuMCwKKyAg ICAgICAgY29zKDIuMCpNX1BJLzE2LjApIC8gMi4wLAorICAgICAgICBjb3MoMy4wKk1fUEkvMTYu MCkgLyAyLjAsCisgICAgICAgIGNvcyg0LjAqTV9QSS8xNi4wKSAvIDIuMCwKKyAgICAgICAgY29z KDUuMCpNX1BJLzE2LjApIC8gMi4wLAorICAgICAgICBjb3MoNi4wKk1fUEkvMTYuMCkgLyAyLjAs CisgICAgICAgIGNvcyg3LjAqTV9QSS8xNi4wKSAvIDIuMCwKKyAgICB9OworICAgIGZvciAoaW50 IGkgPSAwOyBpIDwgNjQ7IGkrKykKKyAgICAgICAgZGN0X3NjYWxlX2J1ZltpXSA9IChmbG9hdCko aWRjdF84X3NjYWxlc1tpID4+IDNdICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaWRjdF84X3NjYWxlc1tpICAmIDddKTsKKworICAgIC8qIFNjYW4gdGFibGUgKi8KKyAgICB1 aW50OF90ICpzY2FuX2J1ZiA9IHVuaWZvcm1fYnVmICsgNjQqc2l6ZW9mKGZsb2F0KTsKKyAgICBm b3IgKGludCBpID0gMDsgaSA8IDY0OyBpKyspCisgICAgICAgIHNjYW5fYnVmW3Byci0+c2Nhbltp XV0gPSBpOworCisgICAgLyogQ29kZWJvb2tzICovCisgICAgbWVtY3B5KHVuaWZvcm1fYnVmICsg Y2Jfb2Zmc2V0WzBdLCBmZl9wcm9yZXNfcmF3X2RjX2NiLAorICAgICAgICAgICBzaXplb2YoZmZf cHJvcmVzX3Jhd19kY19jYikpOworICAgIG1lbWNweSh1bmlmb3JtX2J1ZiArIGNiX29mZnNldFsx XSwgZmZfcHJvcmVzX3Jhd19hY19jYiwKKyAgICAgICAgICAgc2l6ZW9mKGZmX3Byb3Jlc19yYXdf YWNfY2IpKTsKKyAgICBtZW1jcHkodW5pZm9ybV9idWYgKyBjYl9vZmZzZXRbMl0sIGZmX3Byb3Jl c19yYXdfcm5fY2IsCisgICAgICAgICAgIHNpemVvZihmZl9wcm9yZXNfcmF3X3JuX2NiKSk7Cisg ICAgbWVtY3B5KHVuaWZvcm1fYnVmICsgY2Jfb2Zmc2V0WzNdLCBmZl9wcm9yZXNfcmF3X2xuX2Ni LAorICAgICAgICAgICBzaXplb2YoZmZfcHJvcmVzX3Jhd19sbl9jYikpOworCisgICAgUkVUKGZm X3ZrX3VubWFwX2J1ZmZlcigmY3R4LT5zLCAmcHJ2LT51bmlmb3JtX2J1ZiwgMSkpOworCisgICAg LyogRG9uZTsgdXBkYXRlIGRlc2NyaXB0b3JzICovCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAy OyBpKyspIHsKKyAgICAgICAgUkVUKGZmX3ZrX3NoYWRlcl91cGRhdGVfZGVzY19idWZmZXIoJmN0 eC0+cywgJmN0eC0+ZXhlY19wb29sLmNvbnRleHRzWzBdLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAmcHJ2LT5kZWNvZGVbaV0sIDEsIDAsIDAsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwcnYtPnVuaWZvcm1fYnVmLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCA2NCpzaXplb2Yo ZmxvYXQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWS19G T1JNQVRfVU5ERUZJTkVEKSk7CisgICAgICAgIFJFVChmZl92a19zaGFkZXJfdXBkYXRlX2Rlc2Nf YnVmZmVyKCZjdHgtPnMsICZjdHgtPmV4ZWNfcG9vbC5jb250ZXh0c1swXSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBydi0+ZGVjb2RlW2ldLCAxLCAxLCAw LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJ2LT51bmlm b3JtX2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjQq c2l6ZW9mKGZsb2F0KSwgNjQqc2l6ZW9mKHVpbnQ4X3QpLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBWS19GT1JNQVRfVU5ERUZJTkVEKSk7CisgICAgICAgIGZv ciAoaW50IGogPSAwOyBqIDwgNDsgaisrKQorICAgICAgICAgICAgUkVUKGZmX3ZrX3NoYWRlcl91 cGRhdGVfZGVzY19idWZmZXIoJmN0eC0+cywgJmN0eC0+ZXhlY19wb29sLmNvbnRleHRzWzBdLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBydi0+ZGVj b2RlW2ldLCAxLCAyICsgaiwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICZwcnYtPnVuaWZvcm1fYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY2Jfb2Zmc2V0W2pdLCBjYl9zaXplW2pdLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVktfRk9STUFUX1VOREVG SU5FRCkpOworICAgIH0KKworZmFpbDoKKyAgICBzcHYtPnVuaW5pdCgmc3B2KTsKKworICAgIHJl dHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIHZrX3Byb3Jlc19yYXdfZnJlZV9mcmFtZV9wcml2 KEFWUmVmU3RydWN0T3BhcXVlIF9od2N0eCwgdm9pZCAqZGF0YSkKK3sKKyAgICBBVkhXRGV2aWNl Q29udGV4dCAqZGV2X2N0eCA9IF9od2N0eC5uYzsKKworICAgIFByb1Jlc1JBV1Z1bGthbkRlY29k ZVBpY3R1cmUgKnBwID0gZGF0YTsKKyAgICBGRlZ1bGthbkRlY29kZVBpY3R1cmUgKnZwID0gJnBw LT52cDsKKworICAgIGZmX3ZrX2RlY29kZV9mcmVlX2ZyYW1lKGRldl9jdHgsIHZwKTsKK30KKwor Y29uc3QgRkZIV0FjY2VsIGZmX3Byb3Jlc19yYXdfdnVsa2FuX2h3YWNjZWwgPSB7CisgICAgLnAu bmFtZSAgICAgICAgICAgICAgICA9ICJwcm9yZXNfcmF3X3Z1bGthbiIsCisgICAgLnAudHlwZSAg ICAgICAgICAgICAgICA9IEFWTUVESUFfVFlQRV9WSURFTywKKyAgICAucC5pZCAgICAgICAgICAg ICAgICAgID0gQVZfQ09ERUNfSURfUFJPUkVTX1JBVywKKyAgICAucC5waXhfZm10ICAgICAgICAg ICAgID0gQVZfUElYX0ZNVF9WVUxLQU4sCisgICAgLnN0YXJ0X2ZyYW1lICAgICAgICAgICA9ICZ2 a19wcm9yZXNfcmF3X3N0YXJ0X2ZyYW1lLAorICAgIC5kZWNvZGVfc2xpY2UgICAgICAgICAgPSAm dmtfcHJvcmVzX3Jhd19kZWNvZGVfc2xpY2UsCisgICAgLmVuZF9mcmFtZSAgICAgICAgICAgICA9 ICZ2a19wcm9yZXNfcmF3X2VuZF9mcmFtZSwKKyAgICAuZnJlZV9mcmFtZV9wcml2ICAgICAgID0g JnZrX3Byb3Jlc19yYXdfZnJlZV9mcmFtZV9wcml2LAorICAgIC5mcmFtZV9wcml2X2RhdGFfc2l6 ZSAgPSBzaXplb2YoUHJvUmVzUkFXVnVsa2FuRGVjb2RlUGljdHVyZSksCisgICAgLmluaXQgICAg ICAgICAgICAgICAgICA9ICZ2a19kZWNvZGVfcHJvcmVzX3Jhd19pbml0LAorICAgIC51cGRhdGVf dGhyZWFkX2NvbnRleHQgPSAmZmZfdmtfdXBkYXRlX3RocmVhZF9jb250ZXh0LAorICAgIC5kZWNv ZGVfcGFyYW1zICAgICAgICAgPSAmZmZfdmtfcGFyYW1zX2ludmFsaWRhdGUsCisgICAgLmZsdXNo ICAgICAgICAgICAgICAgICA9ICZmZl92a19kZWNvZGVfZmx1c2gsCisgICAgLnVuaW5pdCAgICAg ICAgICAgICAgICA9ICZmZl92a19kZWNvZGVfdW5pbml0LAorICAgIC5mcmFtZV9wYXJhbXMgICAg ICAgICAgPSAmZmZfdmtfZnJhbWVfcGFyYW1zLAorICAgIC5wcml2X2RhdGFfc2l6ZSAgICAgICAg PSBzaXplb2YoRkZWdWxrYW5EZWNvZGVDb250ZXh0KSwKKyAgICAuY2Fwc19pbnRlcm5hbCAgICAg ICAgID0gSFdBQ0NFTF9DQVBfQVNZTkNfU0FGRSB8IEhXQUNDRUxfQ0FQX1RIUkVBRF9TQUZFLAor fTsKLS0gCjIuNDkuMQoKCkZyb20gNjQ5N2YzNWIyYmE0OTdiMDg4ZDE3NjZlOTVkZDBkZTYxYTAx ODM1YSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKRnJvbTogSmFtYWlrYTEgPGx1a2FzemN6MThA d3AucGw+CkRhdGU6IFdlZCwgMyBTZXAgMjAyNSAxMzo0MDoyMSArMDAwMApTdWJqZWN0OiBbUEFU Q0ggMDg3LzExOF0gQ2hhbmdpbmcgdnVsa2FuIGZpbGUgZGlyZWN0b3J5CgotLS0KIGxpYmF2Y29k ZWMvdnVsa2FuL3Z1bGthbl9zb3VyY2UuYyB8IDIyNDIgKysrKysrKysrKysrKysrKysrKysrKysr KysrKysKIDEgZmlsZSBjaGFuZ2VkLCAyMjQyIGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEw MDY0NCBsaWJhdmNvZGVjL3Z1bGthbi92dWxrYW5fc291cmNlLmMKCmRpZmYgLS1naXQgYS9saWJh dmNvZGVjL3Z1bGthbi92dWxrYW5fc291cmNlLmMgYi9saWJhdmNvZGVjL3Z1bGthbi92dWxrYW5f c291cmNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uMTdhNjBlNGIw ZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmF2Y29kZWMvdnVsa2FuL3Z1bGthbl9zb3VyY2UuYwpA QCAtMCwwICsxLDIyNDIgQEAKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlICJ2dWxrYW5f c291cmNlLmgiCisKK2NvbnN0IGNoYXIgKmZmX3NvdXJjZV9jb21tb25fY29tcCA9ICJcCitsYXlv dXQoYnVmZmVyX3JlZmVyZW5jZSwgYnVmZmVyX3JlZmVyZW5jZV9hbGlnbiA9IDEpIGJ1ZmZlciB1 OGJ1ZiB7XG5cCisgICAgdWludDhfdCB2O1xuXAorfTtcblwKK1xuXAorbGF5b3V0KGJ1ZmZlcl9y ZWZlcmVuY2UsIGJ1ZmZlcl9yZWZlcmVuY2VfYWxpZ24gPSAxKSBidWZmZXIgdTh2ZWMyYnVmIHtc blwKKyAgICB1OHZlYzIgdjtcblwKK307XG5cCitcblwKK2xheW91dChidWZmZXJfcmVmZXJlbmNl LCBidWZmZXJfcmVmZXJlbmNlX2FsaWduID0gMSkgYnVmZmVyIHU4dmVjNGJ1ZiB7XG5cCisgICAg dTh2ZWM0IHY7XG5cCit9O1xuXAorXG5cCitsYXlvdXQoYnVmZmVyX3JlZmVyZW5jZSwgYnVmZmVy X3JlZmVyZW5jZV9hbGlnbiA9IDIpIGJ1ZmZlciB1MTZidWYge1xuXAorICAgIHVpbnQxNl90IHY7 XG5cCit9O1xuXAorXG5cCitsYXlvdXQoYnVmZmVyX3JlZmVyZW5jZSwgYnVmZmVyX3JlZmVyZW5j ZV9hbGlnbiA9IDQpIGJ1ZmZlciB1MzJidWYge1xuXAorICAgIHVpbnQzMl90IHY7XG5cCit9O1xu XAorXG5cCitsYXlvdXQoYnVmZmVyX3JlZmVyZW5jZSwgYnVmZmVyX3JlZmVyZW5jZV9hbGlnbiA9 IDQpIGJ1ZmZlciB1MzJ2ZWMyYnVmIHtcblwKKyAgICB1MzJ2ZWMyIHY7XG5cCit9O1xuXAorXG5c CitsYXlvdXQoYnVmZmVyX3JlZmVyZW5jZSwgYnVmZmVyX3JlZmVyZW5jZV9hbGlnbiA9IDgpIGJ1 ZmZlciB1NjRidWYge1xuXAorICAgIHVpbnQ2NF90IHY7XG5cCit9O1xuXAorXG5cCisjZGVmaW5l IE9GRkJVRih0eXBlLCBiLCBsKSBcXFxuXAorICAgIHR5cGUodWludDY0X3QoYikgKyB1aW50NjRf dChsKSlcblwKK1xuXAorI2RlZmluZSB6ZXJvX2V4dGVuZChhLCBwKSBcXFxuXAorICAgICgoYSkg JiAoKDEgPDwgKHApKSAtIDEpKVxuXAorXG5cCisjZGVmaW5lIHNpZ25fZXh0ZW5kKHZhbCwgYml0 cykgXFxcblwKKyAgICBiaXRmaWVsZEV4dHJhY3QodmFsLCAwLCBiaXRzKVxuXAorXG5cCisjZGVm aW5lIGZvbGQoZGlmZiwgYml0cykgXFxcblwKKyAgICBzaWduX2V4dGVuZChkaWZmLCBiaXRzKVxu XAorXG5cCisjZGVmaW5lIG1pZF9wcmVkKGEsIGIsIGMpIFxcXG5cCisgICAgbWF4KG1pbigoYSks IChiKSksIG1pbihtYXgoKGEpLCAoYikpLCAoYykpKVxuXAorXG5cCisvKiBUT0RPOiBvcHRpbWl6 ZSAqL1xuXAordWludCBhbGlnbih1aW50IHNyYywgdWludCBhKVxuXAore1xuXAorICAgIHVpbnQg cmVzID0gc3JjICUgYTtcblwKKyAgICBpZiAocmVzID09IDApXG5cCisgICAgICAgIHJldHVybiBz cmM7XG5cCisgICAgcmV0dXJuIHNyYyArIGEgLSByZXM7XG5cCit9XG5cCitcblwKKy8qIFRPRE86 IG9wdGltaXplICovXG5cCit1aW50NjRfdCBhbGlnbjY0KHVpbnQ2NF90IHNyYywgdWludDY0X3Qg YSlcblwKK3tcblwKKyAgICB1aW50NjRfdCByZXMgPSBzcmMgJSBhO1xuXAorICAgIGlmIChyZXMg PT0gMClcblwKKyAgICAgICAgcmV0dXJuIHNyYztcblwKKyAgICByZXR1cm4gc3JjICsgYSAtIHJl cztcblwKK31cblwKK1xuXAorI2RlZmluZSByZXZlcnNlNChzcmMpIFxcXG5cCisgICAgKHBhY2sz Mih1bnBhY2s4KHVpbnQzMl90KHNyYykpLnd6eXgpKVxuXAorXG5cCit1MzJ2ZWMyIHJldmVyc2U4 KHVpbnQ2NF90IHNyYylcblwKK3tcblwKKyAgICB1MzJ2ZWMyIHRtcCA9IHVucGFjazMyKHNyYyk7 XG5cCisgICAgdG1wLnggPSByZXZlcnNlNCh0bXAueCk7XG5cCisgICAgdG1wLnkgPSByZXZlcnNl NCh0bXAueSk7XG5cCisgICAgcmV0dXJuIHRtcC55eDtcblwKK31cblwKK1xuXAorI2lmZGVmIFBC XzMyXG5cCisjZGVmaW5lIEJJVF9CVUZfVFlQRSB1aW50MzJfdFxuXAorI2RlZmluZSBCVUZfVFlQ RSB1MzJidWZcblwKKyNkZWZpbmUgQlVGX1JFVkVSU0Uoc3JjKSByZXZlcnNlNChzcmMpXG5cCisj ZGVmaW5lIEJVRl9CSVRTIHVpbnQ4X3QoMzIpXG5cCisjZGVmaW5lIEJVRl9CWVRFUyB1aW50OF90 KDQpXG5cCisjZGVmaW5lIEJZVEVfRVhUUkFDVChzcmMsIGJ5dGVfb2ZmKSBcXFxuXAorICAgICh1 aW50OF90KGJpdGZpZWxkRXh0cmFjdCgoc3JjKSwgKChieXRlX29mZikgPDwgMyksIDgpKSlcblwK KyNlbHNlXG5cCisjZGVmaW5lIEJJVF9CVUZfVFlQRSB1aW50NjRfdFxuXAorI2RlZmluZSBCVUZf VFlQRSB1MzJ2ZWMyYnVmXG5cCisjZGVmaW5lIEJVRl9SRVZFUlNFKHNyYykgcmV2ZXJzZTgoc3Jj KVxuXAorI2RlZmluZSBCVUZfQklUUyB1aW50OF90KDY0KVxuXAorI2RlZmluZSBCVUZfQllURVMg dWludDhfdCg4KVxuXAorI2RlZmluZSBCWVRFX0VYVFJBQ1Qoc3JjLCBieXRlX29mZikgXFxcblwK KyAgICAodWludDhfdCgoKHNyYykgPj4gKChieXRlX29mZikgPDwgMykpICYgMHhGRikpXG5cCisj ZW5kaWZcblwKK1xuXAorc3RydWN0IFB1dEJpdENvbnRleHQge1xuXAorICAgIHVpbnQ2NF90IGJ1 Zl9zdGFydDtcblwKKyAgICB1aW50NjRfdCBidWY7XG5cCitcblwKKyAgICBCSVRfQlVGX1RZUEUg Yml0X2J1ZjtcblwKKyAgICB1aW50OF90IGJpdF9sZWZ0O1xuXAorfTtcblwKK1xuXAordm9pZCBw dXRfYml0cyhpbm91dCBQdXRCaXRDb250ZXh0IHBiLCBjb25zdCB1aW50MzJfdCBuLCB1aW50MzJf dCB2YWx1ZSlcblwKK3tcblwKKyAgICBpZiAobiA8IHBiLmJpdF9sZWZ0KSB7XG5cCisgICAgICAg IHBiLmJpdF9idWYgPSAocGIuYml0X2J1ZiA8PCBuKSB8IHZhbHVlO1xuXAorICAgICAgICBwYi5i aXRfbGVmdCAtPSB1aW50OF90KG4pO1xuXAorICAgIH0gZWxzZSB7XG5cCisgICAgICAgIHBiLmJp dF9idWYgPDw9IHBiLmJpdF9sZWZ0O1xuXAorICAgICAgICBwYi5iaXRfYnVmIHw9ICh2YWx1ZSA+ PiAobiAtIHBiLmJpdF9sZWZ0KSk7XG5cCitcblwKKyNpZmRlZiBQQl9VTkFMSUdORURcblwKKyAg ICAgICAgdThidWYgYnMgPSB1OGJ1ZihwYi5idWYpO1xuXAorICAgICAgICBbW3Vucm9sbF1dXG5c CisgICAgICAgIGZvciAodWludDhfdCBpID0gdWludDhfdCgwKTsgaSA8IEJVRl9CWVRFUzsgaSsr KVxuXAorICAgICAgICAgICAgYnNbaV0udiA9IEJZVEVfRVhUUkFDVChwYi5iaXRfYnVmLCBCVUZf QllURVMgLSB1aW50OF90KDEpIC0gaSk7XG5cCisjZWxzZVxuXAorI2lmZGVmIERFQlVHXG5cCisg ICAgICAgIGlmICgocGIuYnVmICUgQlVGX0JZVEVTKSAhPSAwKVxuXAorICAgICAgICAgICAgZGVi dWdQcmludGZFWFQoXCJwdXRfYml0cyBidWZmZXIgaXMgbm90IGFsaWduZWQhXCIpO1xuXAorI2Vu ZGlmXG5cCitcblwKKyAgICAgICAgQlVGX1RZUEUgYnMgPSBCVUZfVFlQRShwYi5idWYpO1xuXAor ICAgICAgICBicy52ID0gQlVGX1JFVkVSU0UocGIuYml0X2J1Zik7XG5cCisjZW5kaWZcblwKKyAg ICAgICAgcGIuYnVmID0gdWludDY0X3QoYnMpICsgQlVGX0JZVEVTO1xuXAorXG5cCisgICAgICAg IHBiLmJpdF9sZWZ0ICs9IEJVRl9CSVRTIC0gdWludDhfdChuKTtcblwKKyAgICAgICAgcGIuYml0 X2J1ZiA9IHZhbHVlO1xuXAorICAgIH1cblwKK31cblwKK1xuXAordWludDMyX3QgZmx1c2hfcHV0 X2JpdHMoaW5vdXQgUHV0Qml0Q29udGV4dCBwYilcblwKK3tcblwKKyAgICAvKiBBbGlnbiBiaXRz IHRvIE1TQnMgKi9cblwKKyAgICBpZiAocGIuYml0X2xlZnQgPCBCVUZfQklUUylcblwKKyAgICAg ICAgcGIuYml0X2J1ZiA8PD0gcGIuYml0X2xlZnQ7XG5cCitcblwKKyAgICBpZiAocGIuYml0X2xl ZnQgPCBCVUZfQklUUykge1xuXAorICAgICAgICB1aW50IHRvX3dyaXRlID0gKChCVUZfQklUUyAt IHBiLmJpdF9sZWZ0IC0gMSkgPj4gMykgKyAxO1xuXAorXG5cCisgICAgICAgIHU4YnVmIGJzID0g dThidWYocGIuYnVmKTtcblwKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0b193cml0ZTsg aSsrKVxuXAorICAgICAgICAgICAgYnNbaV0udiA9IEJZVEVfRVhUUkFDVChwYi5iaXRfYnVmLCBC VUZfQllURVMgLSB1aW50OF90KDEpIC0gaSk7XG5cCisgICAgICAgIHBiLmJ1ZiA9IHVpbnQ2NF90 KGJzKSArIHRvX3dyaXRlO1xuXAorICAgIH1cblwKK1xuXAorICAgIHBiLmJpdF9sZWZ0ID0gQlVG X0JJVFM7XG5cCisgICAgcGIuYml0X2J1ZiA9IDB4MDtcblwKK1xuXAorICAgIHJldHVybiB1aW50 MzJfdChwYi5idWYgLSBwYi5idWZfc3RhcnQpO1xuXAorfVxuXAorXG5cCit2b2lkIGluaXRfcHV0 X2JpdHMob3V0IFB1dEJpdENvbnRleHQgcGIsIHU4YnVmIGRhdGEsIHVpbnQ2NF90IGxlbilcblwK K3tcblwKKyAgICBwYi5idWZfc3RhcnQgPSB1aW50NjRfdChkYXRhKTtcblwKKyAgICBwYi5idWYg PSB1aW50NjRfdChkYXRhKTtcblwKK1xuXAorICAgIHBiLmJpdF9idWYgPSAwO1xuXAorICAgIHBi LmJpdF9sZWZ0ID0gQlVGX0JJVFM7XG5cCit9XG5cCitcblwKK3VpbnQ2NF90IHB1dF9iaXRzX2Nv dW50KGluIFB1dEJpdENvbnRleHQgcGIpXG5cCit7XG5cCisgICAgcmV0dXJuIChwYi5idWYgLSBw Yi5idWZfc3RhcnQpKjggKyBCVUZfQklUUyAtIHBiLmJpdF9sZWZ0O1xuXAorfVxuXAorXG5cCit1 aW50MzJfdCBwdXRfYnl0ZXNfY291bnQoaW4gUHV0Qml0Q29udGV4dCBwYilcblwKK3tcblwKKyAg ICB1aW50NjRfdCBudW1fYnl0ZXMgPSAocGIuYnVmIC0gcGIuYnVmX3N0YXJ0KSArICgoQlVGX0JJ VFMgLSBwYi5iaXRfbGVmdCkgPj4gMyk7XG5cCisgICAgcmV0dXJuIHVpbnQzMl90KG51bV9ieXRl cyk7XG5cCit9XG5cCitcblwKK3N0cnVjdCBHZXRCaXRDb250ZXh0IHtcblwKKyAgICB1aW50NjRf dCBidWZfc3RhcnQ7XG5cCisgICAgdWludDY0X3QgYnVmO1xuXAorICAgIHVpbnQ2NF90IGJ1Zl9l bmQ7XG5cCitcblwKKyAgICB1aW50NjRfdCBiaXRzO1xuXAorICAgIGludCBiaXRzX3ZhbGlkO1xu XAorICAgIGludCBzaXplX2luX2JpdHM7XG5cCit9O1xuXAorXG5cCisjZGVmaW5lIExPQUQ2NCgp ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcblwKKyAgICB7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuXAorICAgICAg ICB1OHZlYzRidWYgcHRyID0gdTh2ZWM0YnVmKGdiLmJ1Zik7ICAgICAgICAgICAgIFxcXG5cCisg ICAgICAgIHVpbnQzMl90IHJmMSA9IHBhY2szMigocHRyWzBdLnYpLnd6eXgpOyAgICAgICAgXFxc blwKKyAgICAgICAgdWludDMyX3QgcmYyID0gcGFjazMyKChwdHJbMV0udikud3p5eCk7ICAgICAg ICBcXFxuXAorICAgICAgICBnYi5idWYgKz0gODsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFxcXG5cCisgICAgICAgIGdiLmJpdHMgPSB1aW50NjRfdChyZjEpIDw8IDMyIHwgdWlu dDY0X3QocmYyKTsgXFxcblwKKyAgICAgICAgZ2IuYml0c192YWxpZCA9IDY0OyAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcXFxuXAorICAgIH1cblwKK1xuXAorI2RlZmluZSBSRUxPQUQzMigp ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcblwKKyAg ICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFxcXG5cCisgICAgICAgIHU4dmVjNGJ1ZiBwdHIgPSB1OHZlYzRidWYoZ2IuYnVmKTsg ICAgICAgICAgICAgICAgICAgICAgICBcXFxuXAorICAgICAgICB1aW50MzJfdCByZiA9IHBhY2sz MigocHRyWzBdLnYpLnd6eXgpOyAgICAgICAgICAgICAgICAgICAgXFxcblwKKyAgICAgICAgZ2Iu YnVmICs9IDQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxc XG5cCisgICAgICAgIGdiLmJpdHMgPSB1aW50NjRfdChyZikgPDwgKDMyIC0gZ2IuYml0c192YWxp ZCkgfCBnYi5iaXRzOyBcXFxuXAorICAgICAgICBnYi5iaXRzX3ZhbGlkICs9IDMyOyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcblwKKyAgICB9XG5cCitcblwKK3ZvaWQg aW5pdF9nZXRfYml0cyhpbm91dCBHZXRCaXRDb250ZXh0IGdiLCB1OGJ1ZiBkYXRhLCBpbnQgbGVu KVxuXAore1xuXAorICAgIGdiLmJ1ZiA9IGdiLmJ1Zl9zdGFydCA9IHVpbnQ2NF90KGRhdGEpO1xu XAorICAgIGdiLmJ1Zl9lbmQgPSB1aW50NjRfdChkYXRhKSArIGxlbjtcblwKKyAgICBnYi5zaXpl X2luX2JpdHMgPSBsZW4gKiA4O1xuXAorXG5cCisgICAgLyogUHJlbG9hZCAqL1xuXAorICAgIExP QUQ2NCgpXG5cCit9XG5cCitcblwKK2Jvb2wgZ2V0X2JpdChpbm91dCBHZXRCaXRDb250ZXh0IGdi KVxuXAore1xuXAorICAgIGlmIChnYi5iaXRzX3ZhbGlkID09IDApXG5cCisgICAgICAgIExPQUQ2 NCgpXG5cCitcblwKKyAgICBib29sIHZhbCA9IGJvb2woZ2IuYml0cyA+PiAoNjQgLSAxKSk7XG5c CisgICAgZ2IuYml0cyA8PD0gMTtcblwKKyAgICBnYi5iaXRzX3ZhbGlkLS07XG5cCisgICAgcmV0 dXJuIHZhbDtcblwKK31cblwKK1xuXAordWludCBnZXRfYml0cyhpbm91dCBHZXRCaXRDb250ZXh0 IGdiLCBpbnQgbilcblwKK3tcblwKKyAgICBpZiAobiA9PSAwKVxuXAorICAgICAgICByZXR1cm4g MDtcblwKK1xuXAorICAgIGlmIChuID4gZ2IuYml0c192YWxpZClcblwKKyAgICAgICAgUkVMT0FE MzIoKVxuXAorXG5cCisgICAgdWludCB2YWwgPSB1aW50KGdiLmJpdHMgPj4gKDY0IC0gbikpO1xu XAorICAgIGdiLmJpdHMgPDw9IG47XG5cCisgICAgZ2IuYml0c192YWxpZCAtPSBuO1xuXAorICAg IHJldHVybiB2YWw7XG5cCit9XG5cCitcblwKK3VpbnQgc2hvd19iaXRzKGlub3V0IEdldEJpdENv bnRleHQgZ2IsIGludCBuKVxuXAore1xuXAorICAgIGlmIChuID4gZ2IuYml0c192YWxpZClcblwK KyAgICAgICAgUkVMT0FEMzIoKVxuXAorXG5cCisgICAgcmV0dXJuIHVpbnQoZ2IuYml0cyA+PiAo NjQgLSBuKSk7XG5cCit9XG5cCitcblwKK3ZvaWQgc2tpcF9iaXRzKGlub3V0IEdldEJpdENvbnRl eHQgZ2IsIGludCBuKVxuXAore1xuXAorICAgIGlmIChuID4gZ2IuYml0c192YWxpZClcblwKKyAg ICAgICAgUkVMT0FEMzIoKVxuXAorXG5cCisgICAgZ2IuYml0cyA8PD0gbjtcblwKKyAgICBnYi5i aXRzX3ZhbGlkIC09IG47XG5cCit9XG5cCitcblwKK2ludCB0ZWxsX2JpdHMoaW4gR2V0Qml0Q29u dGV4dCBnYilcblwKK3tcblwKKyAgICByZXR1cm4gaW50KGdiLmJ1ZiAtIGdiLmJ1Zl9zdGFydCkg KiA4IC0gZ2IuYml0c192YWxpZDtcblwKK31cblwKK1xuXAoraW50IGxlZnRfYml0cyhpbiBHZXRC aXRDb250ZXh0IGdiKVxuXAore1xuXAorICAgIHJldHVybiBnYi5zaXplX2luX2JpdHMgLSBpbnQo Z2IuYnVmIC0gZ2IuYnVmX3N0YXJ0KSAqIDggKyBnYi5iaXRzX3ZhbGlkO1xuXAorfSI7CisKK2Nv bnN0IGNoYXIgKmZmX3NvdXJjZV9yYW5nZWNvZGVyX2NvbXAgPSAiXAorc3RydWN0IFJhbmdlQ29k ZXIge1xuXAorICAgIHVpbnQ2NF90IGJ5dGVzdHJlYW1fc3RhcnQ7XG5cCisgICAgdWludDY0X3Qg Ynl0ZXN0cmVhbTtcblwKKyAgICB1aW50NjRfdCBieXRlc3RyZWFtX2VuZDtcblwKK1xuXAorICAg IGludCBsb3c7XG5cCisgICAgaW50IHJhbmdlO1xuXAorICAgIHVpbnQxNl90IG91dHN0YW5kaW5n X2NvdW50O1xuXAorICAgIHVpbnQ4X3Qgb3V0c3RhbmRpbmdfYnl0ZTtcblwKK307XG5cCitcblwK KyNpZmRlZiBGVUxMX1JFTk9STVxuXAorLyogRnVsbCByZW5vcm0gdmVyc2lvbiB0aGF0IGNhbiBo YW5kbGUgb3V0c3RhbmRpbmdfYnl0ZSA9PSAweEZGICovXG5cCit2b2lkIHJlbm9ybV9lbmNvZGVy KGlub3V0IFJhbmdlQ29kZXIgYylcblwKK3tcblwKKyAgICBpbnQgYnNfY250ID0gMDtcblwKKyAg ICB1OGJ1ZiBieXRlc3RyZWFtID0gdThidWYoYy5ieXRlc3RyZWFtKTtcblwKK1xuXAorICAgIGlm IChjLm91dHN0YW5kaW5nX2J5dGUgPT0gMHhGRikge1xuXAorICAgICAgICBjLm91dHN0YW5kaW5n X2J5dGUgPSB1aW50OF90KGMubG93ID4+IDgpO1xuXAorICAgIH0gZWxzZSBpZiAoYy5sb3cgPD0g MHhGRjAwKSB7XG5cCisgICAgICAgIGJ5dGVzdHJlYW1bYnNfY250KytdLnYgPSBjLm91dHN0YW5k aW5nX2J5dGU7XG5cCisgICAgICAgIHVpbnQxNl90IGNudCA9IGMub3V0c3RhbmRpbmdfY291bnQ7 XG5cCisgICAgICAgIGZvciAoOyBjbnQgPiAwOyBjbnQtLSlcblwKKyAgICAgICAgICAgIGJ5dGVz dHJlYW1bYnNfY250KytdLnYgPSB1aW50OF90KDB4RkYpO1xuXAorICAgICAgICBjLm91dHN0YW5k aW5nX2NvdW50ID0gdWludDE2X3QoMCk7XG5cCisgICAgICAgIGMub3V0c3RhbmRpbmdfYnl0ZSA9 IHVpbnQ4X3QoYy5sb3cgPj4gOCk7XG5cCisgICAgfSBlbHNlIGlmIChjLmxvdyA+PSAweDEwMDAw KSB7XG5cCisgICAgICAgIGJ5dGVzdHJlYW1bYnNfY250KytdLnYgPSBjLm91dHN0YW5kaW5nX2J5 dGUgKyB1aW50OF90KDEpO1xuXAorICAgICAgICB1aW50MTZfdCBjbnQgPSBjLm91dHN0YW5kaW5n X2NvdW50O1xuXAorICAgICAgICBmb3IgKDsgY250ID4gMDsgY250LS0pXG5cCisgICAgICAgICAg ICBieXRlc3RyZWFtW2JzX2NudCsrXS52ID0gdWludDhfdCgweDAwKTtcblwKKyAgICAgICAgYy5v dXRzdGFuZGluZ19jb3VudCA9IHVpbnQxNl90KDApO1xuXAorICAgICAgICBjLm91dHN0YW5kaW5n X2J5dGUgPSB1aW50OF90KGJpdGZpZWxkRXh0cmFjdChjLmxvdywgOCwgOCkpO1xuXAorICAgIH0g ZWxzZSB7XG5cCisgICAgICAgIGMub3V0c3RhbmRpbmdfY291bnQrKztcblwKKyAgICB9XG5cCitc blwKKyAgICBjLmJ5dGVzdHJlYW0gKz0gYnNfY250O1xuXAorICAgIGMucmFuZ2UgPDw9IDg7XG5c CisgICAgYy5sb3cgPSBiaXRmaWVsZEluc2VydCgwLCBjLmxvdywgOCwgOCk7XG5cCit9XG5cCitc blwKKyNlbHNlXG5cCitcblwKKy8qIENhbm5vdCBkZWFsIHdpdGggb3V0c3RhbmRpbmdfYnl0ZSA9 PSAtMSBpbiB0aGUgbmFtZSBvZiBzcGVlZCAqL1xuXAordm9pZCByZW5vcm1fZW5jb2Rlcihpbm91 dCBSYW5nZUNvZGVyIGMpXG5cCit7XG5cCisgICAgdWludDE2X3Qgb2MgPSBjLm91dHN0YW5kaW5n X2NvdW50ICsgdWludDE2X3QoMSk7XG5cCisgICAgaW50IGxvdyA9IGMubG93O1xuXAorXG5cCisg ICAgYy5yYW5nZSA8PD0gODtcblwKKyAgICBjLmxvdyA9IGJpdGZpZWxkSW5zZXJ0KDAsIGxvdywg OCwgOCk7XG5cCitcblwKKyAgICBpZiAobG93ID4gMHhGRjAwICYmIGxvdyA8IDB4MTAwMDApIHtc blwKKyAgICAgICAgYy5vdXRzdGFuZGluZ19jb3VudCA9IG9jO1xuXAorICAgICAgICByZXR1cm47 XG5cCisgICAgfVxuXAorXG5cCisgICAgdThidWYgYnMgPSB1OGJ1ZihjLmJ5dGVzdHJlYW0pO1xu XAorICAgIHVpbnQ4X3Qgb3V0c3RhbmRpbmdfYnl0ZSA9IGMub3V0c3RhbmRpbmdfYnl0ZTtcblwK K1xuXAorICAgIGMuYnl0ZXN0cmVhbSAgICAgICAgPSB1aW50NjRfdChicykgKyBvYztcblwKKyAg ICBjLm91dHN0YW5kaW5nX2NvdW50ID0gdWludDE2X3QoMCk7XG5cCisgICAgYy5vdXRzdGFuZGlu Z19ieXRlICA9IHVpbnQ4X3QobG93ID4+IDgpO1xuXAorXG5cCisgICAgdWludDhfdCBvYnMgPSB1 aW50OF90KGxvdyA+IDB4RkYwMCk7XG5cCisgICAgdWludDhfdCBmaWxsID0gb2JzIC0gdWludDhf dCgxKTsgLyogdW5zaWduZWQgdW5kZXJmbG93ICovXG5cCitcblwKKyAgICBic1swXS52ID0gb3V0 c3RhbmRpbmdfYnl0ZSArIG9icztcblwKKyAgICBmb3IgKGludCBpID0gMTsgaSA8IG9jOyBpKysp XG5cCisgICAgICAgIGJzW2ldLnYgPSBmaWxsO1xuXAorfVxuXAorI2VuZGlmXG5cCitcblwKK3Zv aWQgcHV0X3JhY19pbnRlcm5hbChpbm91dCBSYW5nZUNvZGVyIGMsIGNvbnN0IGludCByYW5nZTEs IGJvb2wgYml0KVxuXAore1xuXAorI2lmZGVmIERFQlVHXG5cCisgICAgaWYgKHJhbmdlMSA+PSBj LnJhbmdlKVxuXAorICAgICAgICBkZWJ1Z1ByaW50ZkVYVChcIkVycm9yOiByYW5nZTEgPj0gYy5y YW5nZVwiKTtcblwKKyAgICBpZiAocmFuZ2UxIDw9IDApXG5cCisgICAgICAgIGRlYnVnUHJpbnRm RVhUKFwiRXJyb3I6IHJhbmdlMSA8PSAwXCIpO1xuXAorI2VuZGlmXG5cCitcblwKKyAgICBpbnQg cmFuZ2VkID0gYy5yYW5nZSAtIHJhbmdlMTtcblwKKyAgICBjLmxvdyArPSBiaXQgPyByYW5nZWQg OiAwO1xuXAorICAgIGMucmFuZ2UgPSBiaXQgPyByYW5nZTEgOiByYW5nZWQ7XG5cCitcblwKKyAg ICBpZiAoZXhwZWN0RVhUKGMucmFuZ2UgPCAweDEwMCwgZmFsc2UpKVxuXAorICAgICAgICByZW5v cm1fZW5jb2RlcihjKTtcblwKK31cblwKK1xuXAordm9pZCBwdXRfcmFjX2RpcmVjdChpbm91dCBS YW5nZUNvZGVyIGMsIGlub3V0IHVpbnQ4X3Qgc3RhdGUsIGJvb2wgYml0KVxuXAore1xuXAorICAg IHB1dF9yYWNfaW50ZXJuYWwoYywgKGMucmFuZ2UgKiBzdGF0ZSkgPj4gOCwgYml0KTtcblwKKyAg ICBzdGF0ZSA9IHplcm9fb25lX3N0YXRlWyh1aW50KGJpdCkgPDwgOCkgKyBzdGF0ZV07XG5cCit9 XG5cCitcblwKK3ZvaWQgcHV0X3JhYyhpbm91dCBSYW5nZUNvZGVyIGMsIHVpbnQ2NF90IHN0YXRl LCBib29sIGJpdClcblwKK3tcblwKKyAgICBwdXRfcmFjX2RpcmVjdChjLCB1OGJ1ZihzdGF0ZSku diwgYml0KTtcblwKK31cblwKK1xuXAorLyogRXF1aXByb2JhYmxlIGJpdCAqL1xuXAordm9pZCBw dXRfcmFjX2VxdWkoaW5vdXQgUmFuZ2VDb2RlciBjLCBib29sIGJpdClcblwKK3tcblwKKyAgICBw dXRfcmFjX2ludGVybmFsKGMsIGMucmFuZ2UgPj4gMSwgYml0KTtcblwKK31cblwKK1xuXAordm9p ZCBwdXRfcmFjX3Rlcm1pbmF0ZShpbm91dCBSYW5nZUNvZGVyIGMpXG5cCit7XG5cCisgICAgaW50 IHJhbmdlMSA9IChjLnJhbmdlICogMTI5KSA+PiA4O1xuXAorXG5cCisjaWZkZWYgREVCVUdcblwK KyAgICBpZiAocmFuZ2UxID49IGMucmFuZ2UpXG5cCisgICAgICAgIGRlYnVnUHJpbnRmRVhUKFwi RXJyb3I6IHJhbmdlMSA+PSBjLnJhbmdlXCIpO1xuXAorICAgIGlmIChyYW5nZTEgPD0gMClcblwK KyAgICAgICAgZGVidWdQcmludGZFWFQoXCJFcnJvcjogcmFuZ2UxIDw9IDBcIik7XG5cCisjZW5k aWZcblwKK1xuXAorICAgIGMucmFuZ2UgLT0gcmFuZ2UxO1xuXAorICAgIGlmIChleHBlY3RFWFQo Yy5yYW5nZSA8IDB4MTAwLCBmYWxzZSkpXG5cCisgICAgICAgIHJlbm9ybV9lbmNvZGVyKGMpO1xu XAorfVxuXAorXG5cCisvKiBSZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyB3cml0dGVuLiAqL1xu XAordWludDMyX3QgcmFjX3Rlcm1pbmF0ZShpbm91dCBSYW5nZUNvZGVyIGMpXG5cCit7XG5cCisg ICAgcHV0X3JhY190ZXJtaW5hdGUoYyk7XG5cCisgICAgYy5yYW5nZSA9IHVpbnQxNl90KDB4RkYp O1xuXAorICAgIGMubG93ICArPSAweEZGO1xuXAorICAgIHJlbm9ybV9lbmNvZGVyKGMpO1xuXAor ICAgIGMucmFuZ2UgPSB1aW50MTZfdCgweEZGKTtcblwKKyAgICByZW5vcm1fZW5jb2RlcihjKTtc blwKK1xuXAorI2lmZGVmIERFQlVHXG5cCisgICAgaWYgKGMubG93ICE9IDApXG5cCisgICAgICAg IGRlYnVnUHJpbnRmRVhUKFwiRXJyb3I6IGMubG93ICE9IDBcIik7XG5cCisgICAgaWYgKGMucmFu Z2UgPCAweDEwMClcblwKKyAgICAgICAgZGVidWdQcmludGZFWFQoXCJFcnJvcjogcmFuZ2UgPCAw eDEwMFwiKTtcblwKKyNlbmRpZlxuXAorXG5cCisgICAgcmV0dXJuIHVpbnQzMl90KHVpbnQ2NF90 KGMuYnl0ZXN0cmVhbSkgLSB1aW50NjRfdChjLmJ5dGVzdHJlYW1fc3RhcnQpKTtcblwKK31cblwK K1xuXAordm9pZCByYWNfaW5pdChvdXQgUmFuZ2VDb2RlciByLCB1OGJ1ZiBkYXRhLCB1aW50IGJ1 Zl9zaXplKVxuXAore1xuXAorICAgIHIuYnl0ZXN0cmVhbV9zdGFydCA9IHVpbnQ2NF90KGRhdGEp O1xuXAorICAgIHIuYnl0ZXN0cmVhbSA9IHVpbnQ2NF90KGRhdGEpO1xuXAorICAgIHIuYnl0ZXN0 cmVhbV9lbmQgPSB1aW50NjRfdChkYXRhKSArIGJ1Zl9zaXplO1xuXAorICAgIHIubG93ID0gMDtc blwKKyAgICByLnJhbmdlID0gMHhGRjAwO1xuXAorICAgIHIub3V0c3RhbmRpbmdfY291bnQgPSB1 aW50MTZfdCgwKTtcblwKKyAgICByLm91dHN0YW5kaW5nX2J5dGUgPSB1aW50OF90KDB4RkYpO1xu XAorfVxuXAorXG5cCisvKiBEZWNvZGVyICovXG5cCit1aW50IG92ZXJyZWFkID0gMDtcblwKK2Jv b2wgY29ycnVwdCA9IGZhbHNlO1xuXAorXG5cCit2b2lkIHJhY19pbml0X2RlYyhvdXQgUmFuZ2VD b2RlciByLCB1OGJ1ZiBkYXRhLCB1aW50IGJ1Zl9zaXplKVxuXAore1xuXAorICAgIG92ZXJyZWFk ID0gMDtcblwKKyAgICBjb3JydXB0ID0gZmFsc2U7XG5cCitcblwKKyAgICAvKiBTa2lwIHByaW1p bmcgYnl0ZXMgKi9cblwKKyAgICByYWNfaW5pdChyLCBPRkZCVUYodThidWYsIGRhdGEsIDIpLCBi dWZfc2l6ZSAtIDIpO1xuXAorXG5cCisgICAgdTh2ZWMyIHByaW1lID0gdTh2ZWMyYnVmKGRhdGEp LnY7XG5cCisgICAgLyogU3dpdGNoIGVuZGlhbm5lc3Mgb2YgdGhlIHByaW1pbmcgYnl0ZXMgKi9c blwKKyAgICByLmxvdyA9IHBhY2sxNihwcmltZS55eCk7XG5cCitcblwKKyAgICBpZiAoci5sb3cg Pj0gMHhGRjAwKSB7XG5cCisgICAgICAgIHIubG93ID0gMHhGRjAwO1xuXAorICAgICAgICByLmJ5 dGVzdHJlYW1fZW5kID0gdWludDY0X3QoZGF0YSkgKyAyO1xuXAorICAgIH1cblwKK31cblwKK1xu XAordm9pZCByZWZpbGwoaW5vdXQgUmFuZ2VDb2RlciBjKVxuXAore1xuXAorICAgIGMucmFuZ2Ug PDw9IDg7XG5cCisgICAgYy5sb3cgICA8PD0gODtcblwKKyAgICBpZiAoZXhwZWN0RVhUKGMuYnl0 ZXN0cmVhbSA8IGMuYnl0ZXN0cmVhbV9lbmQsIGZhbHNlKSkge1xuXAorICAgICAgICBjLmxvdyB8 PSB1OGJ1ZihjLmJ5dGVzdHJlYW0pLnY7XG5cCisgICAgICAgIGMuYnl0ZXN0cmVhbSsrO1xuXAor ICAgIH0gZWxzZSB7XG5cCisgICAgICAgIG92ZXJyZWFkKys7XG5cCisgICAgfVxuXAorfVxuXAor XG5cCitib29sIGdldF9yYWNfaW50ZXJuYWwoaW5vdXQgUmFuZ2VDb2RlciBjLCBjb25zdCBpbnQg cmFuZ2UxKVxuXAore1xuXAorICAgIGludCByYW5nZWQgPSBjLnJhbmdlIC0gcmFuZ2UxO1xuXAor ICAgIGJvb2wgYml0ID0gYy5sb3cgPj0gcmFuZ2VkO1xuXAorICAgIGMubG93IC09IGJpdCA/IHJh bmdlZCA6IDA7XG5cCisgICAgYy5yYW5nZSA9IChiaXQgPyAwIDogcmFuZ2VkKSArIChiaXQgPyBy YW5nZTEgOiAwKTtcblwKK1xuXAorICAgIGlmIChleHBlY3RFWFQoYy5yYW5nZSA8IDB4MTAwLCBm YWxzZSkpXG5cCisgICAgICAgIHJlZmlsbChjKTtcblwKK1xuXAorICAgIHJldHVybiBiaXQ7XG5c Cit9XG5cCitcblwKK2Jvb2wgZ2V0X3JhY19kaXJlY3QoaW5vdXQgUmFuZ2VDb2RlciBjLCBpbm91 dCB1aW50OF90IHN0YXRlKVxuXAore1xuXAorICAgIGJvb2wgYml0ID0gZ2V0X3JhY19pbnRlcm5h bChjLCBjLnJhbmdlICogc3RhdGUgPj4gOCk7XG5cCisgICAgc3RhdGUgPSB6ZXJvX29uZV9zdGF0 ZVtzdGF0ZSArIChiaXQgPyAyNTYgOiAwKV07XG5cCisgICAgcmV0dXJuIGJpdDtcblwKK31cblwK K1xuXAorYm9vbCBnZXRfcmFjKGlub3V0IFJhbmdlQ29kZXIgYywgdWludDY0X3Qgc3RhdGUpXG5c Cit7XG5cCisgICAgcmV0dXJuIGdldF9yYWNfZGlyZWN0KGMsIHU4YnVmKHN0YXRlKS52KTtcblwK K31cblwKK1xuXAorYm9vbCBnZXRfcmFjX2VxdWkoaW5vdXQgUmFuZ2VDb2RlciBjKVxuXAore1xu XAorICAgIHJldHVybiBnZXRfcmFjX2ludGVybmFsKGMsIGMucmFuZ2UgPj4gMSk7XG5cCit9IjsK KworY29uc3QgY2hhciAqZmZfc291cmNlX2ZmdjFfdmxjX2NvbXAgPSAiXAorI2RlZmluZSBWTENf U1RBVEVfU0laRSA4XG5cCitsYXlvdXQoYnVmZmVyX3JlZmVyZW5jZSwgYnVmZmVyX3JlZmVyZW5j ZV9hbGlnbiA9IFZMQ19TVEFURV9TSVpFKSBidWZmZXIgVmxjU3RhdGUge1xuXAorICAgIHVpbnQz Ml90IGVycm9yX3N1bTtcblwKKyAgICBpbnQxNl90ICBkcmlmdDtcblwKKyAgICBpbnQ4X3QgICBi aWFzO1xuXAorICAgIHVpbnQ4X3QgIGNvdW50O1xuXAorfTtcblwKK1xuXAordm9pZCB1cGRhdGVf dmxjX3N0YXRlKGlub3V0IFZsY1N0YXRlIHN0YXRlLCBjb25zdCBpbnQgdilcblwKK3tcblwKKyAg ICBpbnQgZHJpZnQgPSBzdGF0ZS5kcmlmdDtcblwKKyAgICBpbnQgY291bnQgPSBzdGF0ZS5jb3Vu dDtcblwKKyAgICBpbnQgYmlhcyA9IHN0YXRlLmJpYXM7XG5cCisgICAgc3RhdGUuZXJyb3Jfc3Vt ICs9IHVpbnQxNl90KGFicyh2KSk7XG5cCisgICAgZHJpZnQgICAgICAgICAgICs9IHY7XG5cCitc blwKKyAgICBpZiAoY291bnQgPT0gMTI4KSB7IC8vIEZJWE1FOiB2YXJpYWJsZVxuXAorICAgICAg ICBjb3VudCAgICAgICAgICAgPj49IDE7XG5cCisgICAgICAgIGRyaWZ0ICAgICAgICAgICA+Pj0g MTtcblwKKyAgICAgICAgc3RhdGUuZXJyb3Jfc3VtID4+PSAxO1xuXAorICAgIH1cblwKKyAgICBj b3VudCsrO1xuXAorXG5cCisgICAgaWYgKGRyaWZ0IDw9IC1jb3VudCkge1xuXAorICAgICAgICBi aWFzID0gbWF4KGJpYXMgLSAxLCAtMTI4KTtcblwKKyAgICAgICAgZHJpZnQgPSBtYXgoZHJpZnQg KyBjb3VudCwgLWNvdW50ICsgMSk7XG5cCisgICAgfSBlbHNlIGlmIChkcmlmdCA+IDApIHtcblwK KyAgICAgICAgYmlhcyA9IG1pbihiaWFzICsgMSwgMTI3KTtcblwKKyAgICAgICAgZHJpZnQgPSBt aW4oZHJpZnQgLSBjb3VudCwgMCk7XG5cCisgICAgfVxuXAorXG5cCisgICAgc3RhdGUuYmlhcyA9 IGludDhfdChiaWFzKTtcblwKKyAgICBzdGF0ZS5kcmlmdCA9IGludDE2X3QoZHJpZnQpO1xuXAor ICAgIHN0YXRlLmNvdW50ID0gdWludDhfdChjb3VudCk7XG5cCit9XG5cCitcblwKK3N0cnVjdCBT eW1ib2wge1xuXAorICAgIHVpbnQzMl90IGJpdHM7XG5cCisgICAgdWludDMyX3QgdmFsO1xuXAor fTtcblwKK1xuXAorU3ltYm9sIHNldF91cl9nb2xvbWIoaW50IGksIGludCBrLCBpbnQgbGltaXQs IGludCBlc2NfbGVuKVxuXAore1xuXAorICAgIGludCBlO1xuXAorICAgIFN5bWJvbCBzeW07XG5c CitcblwKKyNpZmRlZiBERUJVR1xuXAorICAgIGlmIChpIDwgMClcblwKKyAgICAgICAgZGVidWdQ cmludGZFWFQoXCJFcnJvcjogaSBpcyB6ZXJvIVwiKTtcblwKKyNlbmRpZlxuXAorXG5cCisgICAg ZSA9IGkgPj4gaztcblwKKyAgICBpZiAoZSA8IGxpbWl0KSB7XG5cCisgICAgICAgIHN5bS5iaXRz ID0gZSArIGsgKyAxO1xuXAorICAgICAgICBzeW0udmFsID0gKDEgPDwgaykgKyB6ZXJvX2V4dGVu ZChpLCBrKTtcblwKKyAgICB9IGVsc2Uge1xuXAorICAgICAgICBzeW0uYml0cyA9IGxpbWl0ICsg ZXNjX2xlbjtcblwKKyAgICAgICAgc3ltLnZhbCA9IGkgLSBsaW1pdCArIDE7XG5cCisgICAgfVxu XAorXG5cCisgICAgcmV0dXJuIHN5bTtcblwKK31cblwKK1xuXAorLyoqXG5cCisgKiB3cml0ZSBz aWduZWQgZ29sb21iIHJpY2UgY29kZSAoZmZ2MSkuXG5cCisgKi9cblwKK1N5bWJvbCBzZXRfc3Jf Z29sb21iKGludCBpLCBpbnQgaywgaW50IGxpbWl0LCBpbnQgZXNjX2xlbilcblwKK3tcblwKKyAg ICBpbnQgdjtcblwKK1xuXAorICAgIHYgID0gLTIgKiBpIC0gMTtcblwKKyAgICB2IF49ICh2ID4+ IDMxKTtcblwKK1xuXAorICAgIHJldHVybiBzZXRfdXJfZ29sb21iKHYsIGssIGxpbWl0LCBlc2Nf bGVuKTtcblwKK31cblwKK1xuXAorU3ltYm9sIGdldF92bGNfc3ltYm9sKGlub3V0IFZsY1N0YXRl IHN0YXRlLCBpbnQgdiwgaW50IGJpdHMpXG5cCit7XG5cCisgICAgaW50IGksIGssIGNvZGU7XG5c CisgICAgU3ltYm9sIHN5bTtcblwKKyAgICB2ID0gZm9sZCh2IC0gaW50KHN0YXRlLmJpYXMpLCBi aXRzKTtcblwKK1xuXAorICAgIGkgPSBzdGF0ZS5jb3VudDtcblwKKyAgICBrID0gMDtcblwKKyAg ICB3aGlsZSAoaSA8IHN0YXRlLmVycm9yX3N1bSkgeyAvLyBGSVhNRTogb3B0aW1pemVcblwKKyAg ICAgICAgaysrO1xuXAorICAgICAgICBpICs9IGk7XG5cCisgICAgfVxuXAorXG5cCisjaWZkZWYg REVCVUdcblwKKyAgICBpZiAoayA+IDE2KVxuXAorICAgICAgICBkZWJ1Z1ByaW50ZkVYVChcIkVy cm9yOiBrID4gMTYhXCIpO1xuXAorI2VuZGlmXG5cCitcblwKKyAgICBjb2RlID0gdiBeICgoMiAq IHN0YXRlLmRyaWZ0ICsgc3RhdGUuY291bnQpID4+IDMxKTtcblwKK1xuXAorICAgIHVwZGF0ZV92 bGNfc3RhdGUoc3RhdGUsIHYpO1xuXAorXG5cCisgICAgcmV0dXJuIHNldF9zcl9nb2xvbWIoY29k ZSwgaywgMTIsIGJpdHMpO1xuXAorfVxuXAorXG5cCit1aW50IGdldF91cl9nb2xvbWIoaW5vdXQg R2V0Qml0Q29udGV4dCBnYiwgaW50IGssIGludCBsaW1pdCwgaW50IGVzY19sZW4pXG5cCit7XG5c CisgICAgZm9yICh1aW50IGkgPSAwOyBpIDwgMTI7IGkrKylcblwKKyAgICAgICAgaWYgKGdldF9i aXQoZ2IpKVxuXAorICAgICAgICAgICAgcmV0dXJuIGdldF9iaXRzKGdiLCBrKSArIChpIDw8IGsp O1xuXAorXG5cCisgICAgcmV0dXJuIGdldF9iaXRzKGdiLCBlc2NfbGVuKSArIDExO1xuXAorfVxu XAorXG5cCitpbnQgZ2V0X3NyX2dvbG9tYihpbm91dCBHZXRCaXRDb250ZXh0IGdiLCBpbnQgaywg aW50IGxpbWl0LCBpbnQgZXNjX2xlbilcblwKK3tcblwKKyAgICBpbnQgdiA9IGludChnZXRfdXJf Z29sb21iKGdiLCBrLCBsaW1pdCwgZXNjX2xlbikpO1xuXAorICAgIHJldHVybiAodiA+PiAxKSBe IC0odiAmIDEpO1xuXAorfVxuXAorXG5cCitpbnQgcmVhZF92bGNfc3ltYm9sKGlub3V0IEdldEJp dENvbnRleHQgZ2IsIGlub3V0IFZsY1N0YXRlIHN0YXRlLCBpbnQgYml0cylcblwKK3tcblwKKyAg ICBpbnQgaywgaSwgdiwgcmV0O1xuXAorXG5cCisgICAgaSA9IHN0YXRlLmNvdW50O1xuXAorICAg IGsgPSAwO1xuXAorICAgIHdoaWxlIChpIDwgc3RhdGUuZXJyb3Jfc3VtKSB7IC8vIEZJWE1FOiBv cHRpbWl6ZVxuXAorICAgICAgICBrKys7XG5cCisgICAgICAgIGkgKz0gaTtcblwKKyAgICB9XG5c CitcblwKKyAgICB2ID0gZ2V0X3NyX2dvbG9tYihnYiwgaywgMTIsIGJpdHMpO1xuXAorXG5cCisg ICAgdiBePSAoKDIgKiBzdGF0ZS5kcmlmdCArIHN0YXRlLmNvdW50KSA+PiAzMSk7XG5cCitcblwK KyAgICByZXQgPSBmb2xkKHYgKyBzdGF0ZS5iaWFzLCBiaXRzKTtcblwKK1xuXAorICAgIHVwZGF0 ZV92bGNfc3RhdGUoc3RhdGUsIHYpO1xuXAorXG5cCisgICAgcmV0dXJuIHJldDtcblwKK30iOwor Citjb25zdCBjaGFyICpmZl9zb3VyY2VfZmZ2MV9jb21tb25fY29tcCA9ICJcCitzdHJ1Y3QgU2xp Y2VDb250ZXh0IHtcblwKKyAgICBSYW5nZUNvZGVyIGM7XG5cCitcblwKKyNpZiAhZGVmaW5lZChE RUNPREUpXG5cCisgICAgUHV0Qml0Q29udGV4dCBwYjsgLyogOCo4IGJ5dGVzICovXG5cCisjZWxz ZVxuXAorICAgIEdldEJpdENvbnRleHQgZ2I7XG5cCisjZW5kaWZcblwKK1xuXAorICAgIGl2ZWMy IHNsaWNlX2RpbTtcblwKKyAgICBpdmVjMiBzbGljZV9wb3M7XG5cCisgICAgaXZlYzIgc2xpY2Vf cmN0X2NvZWY7XG5cCisgICAgdTh2ZWMzIHF1YW50X3RhYmxlX2lkeDtcblwKK1xuXAorICAgIHVp bnQgaGRyX2xlbjsgLy8gb25seSB1c2VkIGZvciBnb2xvbWJcblwKK1xuXAorICAgIHVpbnQgc2xp Y2VfY29kaW5nX21vZGU7XG5cCisgICAgYm9vbCBzbGljZV9yZXNldF9jb250ZXh0cztcblwKK307 XG5cCitcblwKKy8qIC0xLCB7IC0xLCAwIH0gKi9cblwKK2ludCBwcmVkaWN0KGludCBMLCBpdmVj MiB0b3ApXG5cCit7XG5cCisgICAgcmV0dXJuIG1pZF9wcmVkKEwsIEwgKyB0b3BbMV0gLSB0b3Bb MF0sIHRvcFsxXSk7XG5cCit9XG5cCitcblwKKy8qIHsgLTIsIC0xIH0sIHsgLTEsIDAsIDEgfSwg MCAqL1xuXAoraW50IGdldF9jb250ZXh0KFZUWVBFMiBjdXJfbCwgVlRZUEUzIHRvcF9sLCBUWVBF IHRvcDIsIHVpbnQ4X3QgcXVhbnRfdGFibGVfaWR4KVxuXAore1xuXAorICAgIGNvbnN0IGludCBM VCA9IHRvcF9sWzBdOyAvKiAtMSAqL1xuXAorICAgIGNvbnN0IGludCBUICA9IHRvcF9sWzFdOyAv KiAgMCAqL1xuXAorICAgIGNvbnN0IGludCBSVCA9IHRvcF9sWzJdOyAvKiAgMSAqL1xuXAorICAg IGNvbnN0IGludCBMICA9IGN1cl9sWzFdOyAvKiAtMSAqL1xuXAorXG5cCisgICAgaW50IGJhc2Ug PSBxdWFudF90YWJsZVtxdWFudF90YWJsZV9pZHhdWzBdWyhMIC0gTFQpICYgTUFYX1FVQU5UX1RB QkxFX01BU0tdICtcblwKKyAgICAgICAgICAgICAgIHF1YW50X3RhYmxlW3F1YW50X3RhYmxlX2lk eF1bMV1bKExUIC0gVCkgJiBNQVhfUVVBTlRfVEFCTEVfTUFTS10gK1xuXAorICAgICAgICAgICAg ICAgcXVhbnRfdGFibGVbcXVhbnRfdGFibGVfaWR4XVsyXVsoVCAtIFJUKSAmIE1BWF9RVUFOVF9U QUJMRV9NQVNLXTtcblwKK1xuXAorICAgIGlmICgocXVhbnRfdGFibGVbcXVhbnRfdGFibGVfaWR4 XVszXVsxMjddID09IDApICYmXG5cCisgICAgICAgIChxdWFudF90YWJsZVtxdWFudF90YWJsZV9p ZHhdWzRdWzEyN10gPT0gMCkpXG5cCisgICAgICAgIHJldHVybiBiYXNlO1xuXAorXG5cCisgICAg Y29uc3QgaW50IFRUID0gdG9wMjsgICAgIC8qIC0yICovXG5cCisgICAgY29uc3QgaW50IExMID0g Y3VyX2xbMF07IC8qIC0yICovXG5cCisgICAgcmV0dXJuIGJhc2UgK1xuXAorICAgICAgICAgICBx dWFudF90YWJsZVtxdWFudF90YWJsZV9pZHhdWzNdWyhMTCAtIEwpICYgTUFYX1FVQU5UX1RBQkxF X01BU0tdICtcblwKKyAgICAgICAgICAgcXVhbnRfdGFibGVbcXVhbnRfdGFibGVfaWR4XVs0XVso VFQgLSBUKSAmIE1BWF9RVUFOVF9UQUJMRV9NQVNLXTtcblwKK31cblwKK1xuXAorY29uc3QgdWlu dDMyX3QgbG9nMl9ydW5bNDFdID0ge1xuXAorICAgICAwLCAgMCwgIDAsICAwLCAgMSwgIDEsICAx LCAgMSxcblwKKyAgICAgMiwgIDIsICAyLCAgMiwgIDMsICAzLCAgMywgIDMsXG5cCisgICAgIDQs ICA0LCAgNSwgIDUsICA2LCAgNiwgIDcsICA3LFxuXAorICAgICA4LCAgOSwgMTAsIDExLCAxMiwg MTMsIDE0LCAxNSxcblwKKyAgICAxNiwgMTcsIDE4LCAxOSwgMjAsIDIxLCAyMiwgMjMsXG5cCisg ICAgMjQsXG5cCit9O1xuXAorXG5cCit1aW50IHNsaWNlX2Nvb3JkKHVpbnQgd2lkdGgsIHVpbnQg c3gsIHVpbnQgbnVtX2hfc2xpY2VzLCB1aW50IGNocm9tYV9zaGlmdClcblwKK3tcblwKKyAgICB1 aW50IG1wdyA9IDEgPDwgY2hyb21hX3NoaWZ0O1xuXAorICAgIHVpbnQgYXdpZHRoID0gYWxpZ24o d2lkdGgsIG1wdyk7XG5cCitcblwKKyAgICBpZiAoKHZlcnNpb24gPCA0KSB8fCAoKHZlcnNpb24g PT0gNCkgJiYgKG1pY3JvX3ZlcnNpb24gPCAzKSkpXG5cCisgICAgICAgIHJldHVybiB3aWR0aCAq IHN4IC8gbnVtX2hfc2xpY2VzO1xuXAorXG5cCisgICAgc3ggPSAoMiAqIGF3aWR0aCAqIHN4ICsg bnVtX2hfc2xpY2VzICogbXB3KSAvICgyICogbnVtX2hfc2xpY2VzICogbXB3KSAqIG1wdztcblwK KyAgICBpZiAoc3ggPT0gYXdpZHRoKVxuXAorICAgICAgICBzeCA9IHdpZHRoO1xuXAorXG5cCisg ICAgcmV0dXJuIHN4O1xuXAorfVxuXAorXG5cCisjaWZkZWYgUkdCXG5cCisjZGVmaW5lIFJHQl9M QlVGIChSR0JfTElORUNBQ0hFIC0gMSlcblwKKyNkZWZpbmUgTEFERFIocCkgKGl2ZWMyKChwKS54 LCAoKHApLnkgJiBSR0JfTEJVRikpKVxuXAorXG5cCitpdmVjMiBnZXRfcHJlZChyZWFkb25seSB1 aW1hZ2UyRCBwcmVkLCBpdmVjMiBzcCwgaXZlYzIgb2ZmLFxuXAorICAgICAgICAgICAgICAgaW50 IGNvbXAsIGludCBzdywgdWludDhfdCBxdWFudF90YWJsZV9pZHgsIGJvb2wgZXh0ZW5kX2xvb2t1 cClcblwKK3tcblwKKyAgICBjb25zdCBpdmVjMiB5b2ZmX2JvcmRlcjEgPSBleHBlY3RFWFQob2Zm LnggPT0gMCwgZmFsc2UpID8gb2ZmICsgaXZlYzIoMSwgLTEpIDogb2ZmO1xuXAorXG5cCisgICAg LyogVGhhbmtzIHRvIHRoZSBzYW1lIGNvaW5jaWRlbmNlIGFzIGJlbG93LCB3ZSBjYW4gc2tpcCBj aGVja2luZyBpZiBvZmYgPT0gMCwgMSAqL1xuXAorICAgIFZUWVBFMyB0b3AgID0gVlRZUEUzKFRZ UEUoaW1hZ2VMb2FkKHByZWQsIHNwICsgTEFERFIoeW9mZl9ib3JkZXIxICsgaXZlYzIoLTEsIC0x KSkpW2NvbXBdKSxcblwKKyAgICAgICAgICAgICAgICAgICAgICAgICBUWVBFKGltYWdlTG9hZChw cmVkLCBzcCArIExBRERSKG9mZiArIGl2ZWMyKDAsIC0xKSkpW2NvbXBdKSxcblwKKyAgICAgICAg ICAgICAgICAgICAgICAgICBUWVBFKGltYWdlTG9hZChwcmVkLCBzcCArIExBRERSKG9mZiArIGl2 ZWMyKG1pbigxLCBzdyAtIG9mZi54IC0gMSksIC0xKSkpW2NvbXBdKSk7XG5cCitcblwKKyAgICAv KiBOb3JtYWxseSwgd2UnZCBuZWVkIHRvIGNoZWNrIGlmIG9mZiAhPSBpdmVjMigwLCAwKSBoZXJl LCBzaW5jZSBvdGhlcndpc2UsIHdlIG11c3RcblwKKyAgICAgKiByZXR1cm4gemVyby4gSG93ZXZl ciwgaXZlYzIoLTEsICAwKSArIGl2ZWMyKDEsIC0xKSA9PSBpdmVjMigwLCAtMSksIGUuZy4gcHJl dmlvdXNcblwKKyAgICAgKiByb3csIDAgb2Zmc2V0LCBzYW1lIHNsaWNlLCB3aGljaCBpcyB6ZXJv IHNpbmNlIHdlIHplcm8gb3V0IHRoZSBidWZmZXIgZm9yIFJHQiAqL1xuXAorICAgIFRZUEUgY3Vy ID0gVFlQRShpbWFnZUxvYWQocHJlZCwgc3AgKyBMQUREUih5b2ZmX2JvcmRlcjEgKyBpdmVjMigt MSwgIDApKSlbY29tcF0pO1xuXAorXG5cCisgICAgaW50IGJhc2UgPSBxdWFudF90YWJsZVtxdWFu dF90YWJsZV9pZHhdWzBdWyhjdXIgICAgLSB0b3BbMF0pICYgTUFYX1FVQU5UX1RBQkxFX01BU0td ICtcblwKKyAgICAgICAgICAgICAgIHF1YW50X3RhYmxlW3F1YW50X3RhYmxlX2lkeF1bMV1bKHRv cFswXSAtIHRvcFsxXSkgJiBNQVhfUVVBTlRfVEFCTEVfTUFTS10gK1xuXAorICAgICAgICAgICAg ICAgcXVhbnRfdGFibGVbcXVhbnRfdGFibGVfaWR4XVsyXVsodG9wWzFdIC0gdG9wWzJdKSAmIE1B WF9RVUFOVF9UQUJMRV9NQVNLXTtcblwKK1xuXAorICAgIGlmIChleHBlY3RFWFQoZXh0ZW5kX2xv b2t1cCwgZmFsc2UpKSB7XG5cCisgICAgICAgIFRZUEUgY3VyMiA9IFRZUEUoMCk7XG5cCisgICAg ICAgIGlmIChleHBlY3RFWFQob2ZmLnggPiAwLCB0cnVlKSkge1xuXAorICAgICAgICAgICAgY29u c3QgaXZlYzIgeW9mZl9ib3JkZXIyID0gZXhwZWN0RVhUKG9mZi54ID09IDEsIGZhbHNlKSA/IGl2 ZWMyKC0xLCAtMSkgOiBpdmVjMigtMiwgMCk7XG5cCisgICAgICAgICAgICBjdXIyID0gVFlQRShp bWFnZUxvYWQocHJlZCwgc3AgKyBMQUREUihvZmYgKyB5b2ZmX2JvcmRlcjIpKVtjb21wXSk7XG5c CisgICAgICAgIH1cblwKKyAgICAgICAgYmFzZSArPSBxdWFudF90YWJsZVtxdWFudF90YWJsZV9p ZHhdWzNdWyhjdXIyIC0gY3VyKSAmIE1BWF9RVUFOVF9UQUJMRV9NQVNLXTtcblwKK1xuXAorICAg ICAgICAvKiB0b3AtMiBiZWNhbWUgY3VycmVudCB1cG9uIHN3YXAgKi9cblwKKyAgICAgICAgVFlQ RSB0b3AyID0gVFlQRShpbWFnZUxvYWQocHJlZCwgc3AgKyBMQUREUihvZmYpKVtjb21wXSk7XG5c CisgICAgICAgIGJhc2UgKz0gcXVhbnRfdGFibGVbcXVhbnRfdGFibGVfaWR4XVs0XVsodG9wMiAt IHRvcFsxXSkgJiBNQVhfUVVBTlRfVEFCTEVfTUFTS107XG5cCisgICAgfVxuXAorXG5cCisgICAg LyogY29udGV4dCwgcHJlZGljdGlvbiAqL1xuXAorICAgIHJldHVybiBpdmVjMihiYXNlLCBwcmVk aWN0KGN1ciwgVlRZUEUyKHRvcCkpKTtcblwKK31cblwKK1xuXAorI2Vsc2UgLyogUkdCICovXG5c CitcblwKKyNkZWZpbmUgTEFERFIocCkgKHApXG5cCitcblwKK2l2ZWMyIGdldF9wcmVkKHJlYWRv bmx5IHVpbWFnZTJEIHByZWQsIGl2ZWMyIHNwLCBpdmVjMiBvZmYsXG5cCisgICAgICAgICAgICAg ICBpbnQgY29tcCwgaW50IHN3LCB1aW50OF90IHF1YW50X3RhYmxlX2lkeCwgYm9vbCBleHRlbmRf bG9va3VwKVxuXAore1xuXAorICAgIGNvbnN0IGl2ZWMyIHlvZmZfYm9yZGVyMSA9IG9mZi54ID09 IDAgPyBpdmVjMigxLCAtMSkgOiBpdmVjMigwLCAwKTtcblwKKyAgICBzcCArPSBvZmY7XG5cCitc blwKKyAgICBWVFlQRTMgdG9wICA9IFZUWVBFMyhUWVBFKDApLFxuXAorICAgICAgICAgICAgICAg ICAgICAgICAgIFRZUEUoMCksXG5cCisgICAgICAgICAgICAgICAgICAgICAgICAgVFlQRSgwKSk7 XG5cCisgICAgaWYgKG9mZi55ID4gMCAmJiBvZmYgIT0gaXZlYzIoMCwgMSkpXG5cCisgICAgICAg IHRvcFswXSA9IFRZUEUoaW1hZ2VMb2FkKHByZWQsIHNwICsgaXZlYzIoLTEsIC0xKSArIHlvZmZf Ym9yZGVyMSlbY29tcF0pO1xuXAorICAgIGlmIChvZmYueSA+IDApIHtcblwKKyAgICAgICAgdG9w WzFdID0gVFlQRShpbWFnZUxvYWQocHJlZCwgc3AgKyBpdmVjMigwLCAtMSkpW2NvbXBdKTtcblwK KyAgICAgICAgdG9wWzJdID0gVFlQRShpbWFnZUxvYWQocHJlZCwgc3AgKyBpdmVjMihtaW4oMSwg c3cgLSBvZmYueCAtIDEpLCAtMSkpW2NvbXBdKTtcblwKKyAgICB9XG5cCitcblwKKyAgICBUWVBF IGN1ciA9IFRZUEUoMCk7XG5cCisgICAgaWYgKG9mZiAhPSBpdmVjMigwLCAwKSlcblwKKyAgICAg ICAgY3VyID0gVFlQRShpbWFnZUxvYWQocHJlZCwgc3AgKyBpdmVjMigtMSwgIDApICsgeW9mZl9i b3JkZXIxKVtjb21wXSk7XG5cCitcblwKKyAgICBpbnQgYmFzZSA9IHF1YW50X3RhYmxlW3F1YW50 X3RhYmxlX2lkeF1bMF1bKGN1ciAtIHRvcFswXSkgJiBNQVhfUVVBTlRfVEFCTEVfTUFTS10gK1xu XAorICAgICAgICAgICAgICAgcXVhbnRfdGFibGVbcXVhbnRfdGFibGVfaWR4XVsxXVsodG9wWzBd IC0gdG9wWzFdKSAmIE1BWF9RVUFOVF9UQUJMRV9NQVNLXSArXG5cCisgICAgICAgICAgICAgICBx dWFudF90YWJsZVtxdWFudF90YWJsZV9pZHhdWzJdWyh0b3BbMV0gLSB0b3BbMl0pICYgTUFYX1FV QU5UX1RBQkxFX01BU0tdO1xuXAorXG5cCisgICAgaWYgKGV4cGVjdEVYVChleHRlbmRfbG9va3Vw LCBmYWxzZSkpIHtcblwKKyAgICAgICAgVFlQRSBjdXIyID0gVFlQRSgwKTtcblwKKyAgICAgICAg aWYgKG9mZi54ID4gMCAmJiBvZmYgIT0gaXZlYzIoMSwgMCkpIHtcblwKKyAgICAgICAgICAgIGNv bnN0IGl2ZWMyIHlvZmZfYm9yZGVyMiA9IG9mZi54ID09IDEgPyBpdmVjMigxLCAtMSkgOiBpdmVj MigwLCAwKTtcblwKKyAgICAgICAgICAgIGN1cjIgPSBUWVBFKGltYWdlTG9hZChwcmVkLCBzcCAr IGl2ZWMyKC0yLCAgMCkgKyB5b2ZmX2JvcmRlcjIpW2NvbXBdKTtcblwKKyAgICAgICAgfVxuXAor ICAgICAgICBiYXNlICs9IHF1YW50X3RhYmxlW3F1YW50X3RhYmxlX2lkeF1bM11bKGN1cjIgLSBj dXIpICYgTUFYX1FVQU5UX1RBQkxFX01BU0tdO1xuXAorXG5cCisgICAgICAgIFRZUEUgdG9wMiA9 IFRZUEUoMCk7XG5cCisgICAgICAgIGlmIChvZmYueSA+IDEpXG5cCisgICAgICAgICAgICB0b3Ay ID0gVFlQRShpbWFnZUxvYWQocHJlZCwgc3AgKyBpdmVjMigwLCAtMikpW2NvbXBdKTtcblwKKyAg ICAgICAgYmFzZSArPSBxdWFudF90YWJsZVtxdWFudF90YWJsZV9pZHhdWzRdWyh0b3AyIC0gdG9w WzFdKSAmIE1BWF9RVUFOVF9UQUJMRV9NQVNLXTtcblwKKyAgICB9XG5cCitcblwKKyAgICAvKiBj b250ZXh0LCBwcmVkaWN0aW9uICovXG5cCisgICAgcmV0dXJuIGl2ZWMyKGJhc2UsIHByZWRpY3Qo Y3VyLCBWVFlQRTIodG9wKSkpO1xuXAorfVxuXAorI2VuZGlmIjsKKworY29uc3QgY2hhciAqZmZf c291cmNlX2ZmdjFfcmVzZXRfY29tcCA9ICJcCit2b2lkIG1haW4odm9pZClcblwKK3tcblwKKyAg ICBjb25zdCB1aW50IHNsaWNlX2lkeCA9IGdsX1dvcmtHcm91cElELnkqZ2xfTnVtV29ya0dyb3Vw cy54ICsgZ2xfV29ya0dyb3VwSUQueDtcblwKK1xuXAorICAgIGlmIChrZXlfZnJhbWUgPT0gMCAm JlxuXAorICAgICAgICBzbGljZV9jdHhbc2xpY2VfaWR4XS5zbGljZV9yZXNldF9jb250ZXh0cyA9 PSBmYWxzZSlcblwKKyAgICAgICAgcmV0dXJuO1xuXAorXG5cCisgICAgY29uc3QgdWludDhfdCBx aWR4ID0gc2xpY2VfY3R4W3NsaWNlX2lkeF0ucXVhbnRfdGFibGVfaWR4W2dsX1dvcmtHcm91cElE LnpdO1xuXAorICAgIHVpbnQgY29udGV4dHMgPSBjb250ZXh0X2NvdW50W3FpZHhdO1xuXAorICAg IHVpbnQ2NF90IHNsaWNlX3N0YXRlX29mZiA9IHVpbnQ2NF90KHNsaWNlX3N0YXRlKSArXG5cCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xpY2VfaWR4KnBsYW5lX3N0YXRlX3NpemUq Y29kZWNfcGxhbmVzO1xuXAorXG5cCisjaWZkZWYgR09MT01CXG5cCisgICAgdWludDY0X3Qgc3Rh cnQgPSBzbGljZV9zdGF0ZV9vZmYgK1xuXAorICAgICAgICAgICAgICAgICAgICAgKGdsX1dvcmtH cm91cElELnoqKHBsYW5lX3N0YXRlX3NpemUvVkxDX1NUQVRFX1NJWkUpICsgZ2xfTG9jYWxJbnZv Y2F0aW9uSUQueCkqVkxDX1NUQVRFX1NJWkU7XG5cCisgICAgZm9yICh1aW50IHggPSBnbF9Mb2Nh bEludm9jYXRpb25JRC54OyB4IDwgY29udGV4dHM7IHggKz0gZ2xfV29ya0dyb3VwU2l6ZS54KSB7 XG5cCisgICAgICAgIFZsY1N0YXRlIHNiID0gVmxjU3RhdGUoc3RhcnQpO1xuXAorICAgICAgICBz Yi5kcmlmdCAgICAgPSAgaW50MTZfdCgwKTtcblwKKyAgICAgICAgc2IuZXJyb3Jfc3VtID0gdWlu dDE2X3QoNCk7XG5cCisgICAgICAgIHNiLmJpYXMgICAgICA9ICAgaW50OF90KDApO1xuXAorICAg ICAgICBzYi5jb3VudCAgICAgPSAgdWludDhfdCgxKTtcblwKKyAgICAgICAgc3RhcnQgKz0gZ2xf V29ya0dyb3VwU2l6ZS54KlZMQ19TVEFURV9TSVpFO1xuXAorICAgIH1cblwKKyNlbHNlXG5cCisg ICAgdWludDY0X3Qgc3RhcnQgPSBzbGljZV9zdGF0ZV9vZmYgK1xuXAorICAgICAgICAgICAgICAg ICAgICAgZ2xfV29ya0dyb3VwSUQueipwbGFuZV9zdGF0ZV9zaXplICtcblwKKyAgICAgICAgICAg ICAgICAgICAgIChnbF9Mb2NhbEludm9jYXRpb25JRC54IDw8IDIgLyogZHdvcmRzICovKTsgLyog Qnl0ZXMgKi9cblwKKyAgICB1aW50IGNvdW50X3RvdGFsID0gY29udGV4dHMqKENPTlRFWFRfU0la RSAvKiBieXRlcyAqLyA+PiAyIC8qIGR3b3JkcyAqLyk7XG5cCisgICAgZm9yICh1aW50IHggPSBn bF9Mb2NhbEludm9jYXRpb25JRC54OyB4IDwgY291bnRfdG90YWw7IHggKz0gZ2xfV29ya0dyb3Vw U2l6ZS54KSB7XG5cCisgICAgICAgIHUzMmJ1ZihzdGFydCkudiA9IDB4ODA4MDgwODA7XG5cCisg ICAgICAgIHN0YXJ0ICs9IGdsX1dvcmtHcm91cFNpemUueCooQ09OVEVYVF9TSVpFID4+IDMgLyog MS84dGggb2YgY29udGV4dCAqLyk7XG5cCisgICAgfVxuXAorI2VuZGlmXG5cCit9IjsKKworY29u c3QgY2hhciAqZmZfc291cmNlX2ZmdjFfcmN0X3NlYXJjaF9jb21wID0gIlwKK2l2ZWMzIGxvYWRf Y29tcG9uZW50cyhpdmVjMiBwb3MpXG5cCit7XG5cCisgICAgaXZlYzMgcGl4ID0gaXZlYzMoaW1h Z2VMb2FkKHNyY1swXSwgcG9zKSk7XG5cCisgICAgaWYgKHBsYW5hcl9yZ2IgIT0gMCkge1xuXAor ICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8IDM7IGkrKylcblwKKyAgICAgICAgICAgIHBpeFtp XSA9IGludChpbWFnZUxvYWQoc3JjW2ldLCBwb3MpWzBdKTtcblwKKyAgICB9XG5cCitcblwKKyAg ICByZXR1cm4gaXZlYzMocGl4W2ZtdF9sdXRbMF1dLCBwaXhbZm10X2x1dFsxXV0sIHBpeFtmbXRf bHV0WzJdXSk7XG5cCit9XG5cCitcblwKKyNkZWZpbmUgTlVNX0NIRUNLUyAxNVxuXAorY29uc3Qg aXZlYzIgcmN0X3lfY29lZmZbTlVNX0NIRUNLU10gPSB7XG5cCisgICAgaXZlYzIoMCwgMCksIC8v ICAgICAgNEdcblwKK1xuXAorICAgIGl2ZWMyKDAsIDEpLCAvLyAgICAgIDNHICsgIEJcblwKKyAg ICBpdmVjMigxLCAwKSwgLy8gIFIgKyAzR1xuXAorICAgIGl2ZWMyKDEsIDEpLCAvLyAgUiArIDJH ICsgQlxuXAorXG5cCisgICAgaXZlYzIoMCwgMiksIC8vICAgICAgMkcgKyAyQlxuXAorICAgIGl2 ZWMyKDIsIDApLCAvLyAyUiArIDJHXG5cCisgICAgaXZlYzIoMiwgMiksIC8vIDJSICAgICAgKyAy QlxuXAorXG5cCisgICAgaXZlYzIoMCwgMyksIC8vICAgICAgMUcgKyAzQlxuXAorICAgIGl2ZWMy KDMsIDApLCAvLyAzUiArIDFHXG5cCitcblwKKyAgICBpdmVjMigwLCA0KSwgLy8gICAgICAgICAg IDRCXG5cCisgICAgaXZlYzIoNCwgMCksIC8vIDRSXG5cCitcblwKKyAgICBpdmVjMigxLCAyKSwg Ly8gIFIgKyAgRyArIDJCXG5cCisgICAgaXZlYzIoMiwgMSksIC8vIDJSICsgIEcgKyAgQlxuXAor XG5cCisgICAgaXZlYzIoMywgMSksIC8vIDNSICAgICAgKyAgQlxuXAorICAgIGl2ZWMyKDEsIDMp LCAvLyAgUiAgICAgICsgM0JcblwKK307XG5cCitcblwKK3NoYXJlZCBpdmVjMyBwaXhfYnVmW2ds X1dvcmtHcm91cFNpemUueCArIDFdW2dsX1dvcmtHcm91cFNpemUueSArIDFdID0geyB9O1xuXAor XG5cCitpdmVjMyB0cmFuc2Zvcm1fc2FtcGxlKGl2ZWMzIHBpeCwgaXZlYzIgcmN0X2NvZWYpXG5c Cit7XG5cCisgICAgcGl4LmIgLT0gcGl4Lmc7XG5cCisgICAgcGl4LnIgLT0gcGl4Lmc7XG5cCisg ICAgcGl4LmcgKz0gKHBpeC5yKnJjdF9jb2VmLnggKyBwaXguYipyY3RfY29lZi55KSA+PiAyO1xu XAorICAgIHBpeC5iICs9IHJjdF9vZmZzZXQ7XG5cCisgICAgcGl4LnIgKz0gcmN0X29mZnNldDtc blwKKyAgICByZXR1cm4gcGl4O1xuXAorfVxuXAorXG5cCit1aW50IGdldF9kaXN0KGl2ZWMzIGN1 cilcblwKK3tcblwKKyAgICBpdmVjMyBMTCA9IHBpeF9idWZbZ2xfTG9jYWxJbnZvY2F0aW9uSUQu eCArIDBdW2dsX0xvY2FsSW52b2NhdGlvbklELnkgKyAxXTtcblwKKyAgICBpdmVjMyBUTCA9IHBp eF9idWZbZ2xfTG9jYWxJbnZvY2F0aW9uSUQueCArIDBdW2dsX0xvY2FsSW52b2NhdGlvbklELnkg KyAwXTtcblwKKyAgICBpdmVjMyBUVCA9IHBpeF9idWZbZ2xfTG9jYWxJbnZvY2F0aW9uSUQueCAr IDFdW2dsX0xvY2FsSW52b2NhdGlvbklELnkgKyAwXTtcblwKK1xuXAorICAgIGl2ZWMzIHByZWQg PSBpdmVjMyhwcmVkaWN0KExMLnIsIGl2ZWMyKFRMLnIsIFRULnIpKSxcblwKKyAgICAgICAgICAg ICAgICAgICAgICAgcHJlZGljdChMTC5nLCBpdmVjMihUTC5nLCBUVC5nKSksXG5cCisgICAgICAg ICAgICAgICAgICAgICAgIHByZWRpY3QoTEwuYiwgaXZlYzIoVEwuYiwgVFQuYikpKTtcblwKK1xu XAorICAgIHV2ZWMzIGMgPSBhYnMocHJlZCAtIGN1cik7XG5cCisgICAgcmV0dXJuIG1pZF9wcmVk KGMuciwgYy5nLCBjLmIpO1xuXAorfVxuXAorXG5cCitzaGFyZWQgdWludCBzY29yZV9jb2xzW2ds X1dvcmtHcm91cFNpemUueV0gPSB7IH07XG5cCitzaGFyZWQgdWludCBzY29yZV9tb2RlWzE2XSA9 IHsgfTtcblwKK1xuXAordm9pZCBwcm9jZXNzKGl2ZWMyIHBvcylcblwKK3tcblwKKyAgICBpdmVj MyBwaXggPSBsb2FkX2NvbXBvbmVudHMocG9zKTtcblwKK1xuXAorICAgIGZvciAoaW50IGkgPSAw OyBpIDwgTlVNX0NIRUNLUzsgaSsrKSB7XG5cCisgICAgICAgIGl2ZWMzIHR4X3BpeCA9IHRyYW5z Zm9ybV9zYW1wbGUocGl4LCByY3RfeV9jb2VmZltpXSk7XG5cCisgICAgICAgIHBpeF9idWZbZ2xf TG9jYWxJbnZvY2F0aW9uSUQueCArIDFdW2dsX0xvY2FsSW52b2NhdGlvbklELnkgKyAxXSA9IHR4 X3BpeDtcblwKKyAgICAgICAgbWVtb3J5QmFycmllclNoYXJlZCgpO1xuXAorXG5cCisgICAgICAg IHVpbnQgZGlzdCA9IGdldF9kaXN0KHR4X3BpeCk7XG5cCisgICAgICAgIGF0b21pY0FkZChzY29y ZV9tb2RlW2ldLCBkaXN0KTtcblwKKyAgICB9XG5cCit9XG5cCitcblwKK3ZvaWQgY29lZmZfc2Vh cmNoKGlub3V0IFNsaWNlQ29udGV4dCBzYylcblwKK3tcblwKKyAgICB1dmVjMiBpbWdfc2l6ZSA9 IGltYWdlU2l6ZShzcmNbMF0pO1xuXAorICAgIHVpbnQgc3hzID0gc2xpY2VfY29vcmQoaW1nX3Np emUueCwgZ2xfV29ya0dyb3VwSUQueCArIDAsXG5cCisgICAgICAgICAgICAgICAgICAgICAgICAg ICBnbF9OdW1Xb3JrR3JvdXBzLngsIDApO1xuXAorICAgIHVpbnQgc3hlID0gc2xpY2VfY29vcmQo aW1nX3NpemUueCwgZ2xfV29ya0dyb3VwSUQueCArIDEsXG5cCisgICAgICAgICAgICAgICAgICAg ICAgICAgICBnbF9OdW1Xb3JrR3JvdXBzLngsIDApO1xuXAorICAgIHVpbnQgc3lzID0gc2xpY2Vf Y29vcmQoaW1nX3NpemUueSwgZ2xfV29ya0dyb3VwSUQueSArIDAsXG5cCisgICAgICAgICAgICAg ICAgICAgICAgICAgICBnbF9OdW1Xb3JrR3JvdXBzLnksIDApO1xuXAorICAgIHVpbnQgc3llID0g c2xpY2VfY29vcmQoaW1nX3NpemUueSwgZ2xfV29ya0dyb3VwSUQueSArIDEsXG5cCisgICAgICAg ICAgICAgICAgICAgICAgICAgICBnbF9OdW1Xb3JrR3JvdXBzLnksIDApO1xuXAorXG5cCisgICAg Zm9yICh1aW50IHkgPSBzeXMgKyBnbF9Mb2NhbEludm9jYXRpb25JRC55OyB5IDwgc3llOyB5ICs9 IGdsX1dvcmtHcm91cFNpemUueSkge1xuXAorICAgICAgICBmb3IgKHVpbnQgeCA9IHN4cyArIGds X0xvY2FsSW52b2NhdGlvbklELng7IHggPCBzeGU7IHggKz0gZ2xfV29ya0dyb3VwU2l6ZS54KSB7 XG5cCisgICAgICAgICAgICBwcm9jZXNzKGl2ZWMyKHgsIHkpKTtcblwKKyAgICAgICAgfVxuXAor ICAgIH1cblwKK1xuXAorICAgIGlmIChnbF9Mb2NhbEludm9jYXRpb25JRC54ID09IDAgJiYgZ2xf TG9jYWxJbnZvY2F0aW9uSUQueSA9PSAwKSB7XG5cCisgICAgICAgIHVpbnQgbWluX3Njb3JlID0g MHhGRkZGRkZGRjtcblwKKyAgICAgICAgdWludCBtaW5faWR4ID0gMztcblwKKyAgICAgICAgZm9y IChpbnQgaSA9IDA7IGkgPCBOVU1fQ0hFQ0tTOyBpKyspIHtcblwKKyAgICAgICAgICAgIGlmIChz Y29yZV9tb2RlW2ldIDwgbWluX3Njb3JlKSB7XG5cCisgICAgICAgICAgICAgICAgbWluX3Njb3Jl ID0gc2NvcmVfbW9kZVtpXTtcblwKKyAgICAgICAgICAgICAgICBtaW5faWR4ID0gaTtcblwKKyAg ICAgICAgICAgIH1cblwKKyAgICAgICAgfVxuXAorICAgICAgICBzYy5zbGljZV9yY3RfY29lZiA9 IHJjdF95X2NvZWZmW21pbl9pZHhdO1xuXAorICAgIH1cblwKK31cblwKK1xuXAordm9pZCBtYWlu KHZvaWQpXG5cCit7XG5cCisgICAgaWYgKGZvcmNlX3BjbSA9PSAxKVxuXAorICAgICAgICByZXR1 cm47XG5cCisgICAgY29uc3QgdWludCBzbGljZV9pZHggPSBnbF9Xb3JrR3JvdXBJRC55KmdsX051 bVdvcmtHcm91cHMueCArIGdsX1dvcmtHcm91cElELng7XG5cCisgICAgY29lZmZfc2VhcmNoKHNs aWNlX2N0eFtzbGljZV9pZHhdKTtcblwKK30iOworCitjb25zdCBjaGFyICpmZl9zb3VyY2VfZmZ2 MV9lbmNfc2V0dXBfY29tcCA9ICJcCit1aW50OF90IHN0YXRlW0NPTlRFWFRfU0laRV07XG5cCitc blwKK3ZvaWQgaW5pdF9zbGljZShpbm91dCBTbGljZUNvbnRleHQgc2MsIGNvbnN0IHVpbnQgc2xp Y2VfaWR4KVxuXAore1xuXAorICAgIC8qIFNldCBjb29yZGluYXRlcyAqL1xuXAorICAgIHV2ZWMy IGltZ19zaXplID0gaW1hZ2VTaXplKHNyY1swXSk7XG5cCisgICAgdWludCBzeHMgPSBzbGljZV9j b29yZChpbWdfc2l6ZS54LCBnbF9Xb3JrR3JvdXBJRC54ICsgMCxcblwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgIGdsX051bVdvcmtHcm91cHMueCwgY2hyb21hX3NoaWZ0LngpO1xuXAorICAg IHVpbnQgc3hlID0gc2xpY2VfY29vcmQoaW1nX3NpemUueCwgZ2xfV29ya0dyb3VwSUQueCArIDEs XG5cCisgICAgICAgICAgICAgICAgICAgICAgICAgICBnbF9OdW1Xb3JrR3JvdXBzLngsIGNocm9t YV9zaGlmdC54KTtcblwKKyAgICB1aW50IHN5cyA9IHNsaWNlX2Nvb3JkKGltZ19zaXplLnksIGds X1dvcmtHcm91cElELnkgKyAwLFxuXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xfTnVt V29ya0dyb3Vwcy55LCBjaHJvbWFfc2hpZnQueSk7XG5cCisgICAgdWludCBzeWUgPSBzbGljZV9j b29yZChpbWdfc2l6ZS55LCBnbF9Xb3JrR3JvdXBJRC55ICsgMSxcblwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgIGdsX051bVdvcmtHcm91cHMueSwgY2hyb21hX3NoaWZ0LnkpO1xuXAorXG5c CisgICAgc2Muc2xpY2VfcG9zID0gaXZlYzIoc3hzLCBzeXMpO1xuXAorICAgIHNjLnNsaWNlX2Rp bSA9IGl2ZWMyKHN4ZSAtIHN4cywgc3llIC0gc3lzKTtcblwKKyAgICBzYy5zbGljZV9jb2Rpbmdf bW9kZSA9IGludChmb3JjZV9wY20gPT0gMSk7XG5cCisgICAgc2Muc2xpY2VfcmVzZXRfY29udGV4 dHMgPSBzYy5zbGljZV9jb2RpbmdfbW9kZSA9PSAxO1xuXAorICAgIHNjLnF1YW50X3RhYmxlX2lk eCA9IHU4dmVjMyhjb250ZXh0X21vZGVsKTtcblwKK1xuXAorICAgIGlmICgocmN0X3NlYXJjaCA9 PSAwKSB8fCAoc2Muc2xpY2VfY29kaW5nX21vZGUgPT0gMSkpXG5cCisgICAgICAgIHNjLnNsaWNl X3JjdF9jb2VmID0gaXZlYzIoMSwgMSk7XG5cCitcblwKKyAgICByYWNfaW5pdChzYy5jLFxuXAor ICAgICAgICAgICAgIE9GRkJVRih1OGJ1Ziwgb3V0X2RhdGEsIHNsaWNlX2lkeCAqIHNsaWNlX3Np emVfbWF4KSxcblwKKyAgICAgICAgICAgICBzbGljZV9zaXplX21heCk7XG5cCit9XG5cCitcblwK K3ZvaWQgcHV0X3VzeW1ib2woaW5vdXQgUmFuZ2VDb2RlciBjLCB1aW50IHYpXG5cCit7XG5cCisg ICAgYm9vbCBpc19uaWwgPSAodiA9PSAwKTtcblwKKyAgICBwdXRfcmFjX2RpcmVjdChjLCBzdGF0 ZVswXSwgaXNfbmlsKTtcblwKKyAgICBpZiAoaXNfbmlsKVxuXAorICAgICAgICByZXR1cm47XG5c CitcblwKKyAgICBjb25zdCBpbnQgZSA9IGZpbmRNU0Iodik7XG5cCitcblwKKyAgICBmb3IgKGlu dCBpID0gMDsgaSA8IGU7IGkrKylcblwKKyAgICAgICAgcHV0X3JhY19kaXJlY3QoYywgc3RhdGVb MSArIG1pbihpLCA5KV0sIHRydWUpO1xuXAorICAgIHB1dF9yYWNfZGlyZWN0KGMsIHN0YXRlWzEg KyBtaW4oZSwgOSldLCBmYWxzZSk7XG5cCitcblwKKyAgICBmb3IgKGludCBpID0gZSAtIDE7IGkg Pj0gMDsgaS0tKVxuXAorICAgICAgICBwdXRfcmFjX2RpcmVjdChjLCBzdGF0ZVsyMiArIG1pbihp LCA5KV0sIGJvb2woYml0ZmllbGRFeHRyYWN0KHYsIGksIDEpKSk7XG5cCit9XG5cCitcblwKK3Zv aWQgd3JpdGVfc2xpY2VfaGVhZGVyKGlub3V0IFNsaWNlQ29udGV4dCBzYylcblwKK3tcblwKKyAg ICBbW3Vucm9sbF1dXG5cCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBDT05URVhUX1NJWkU7IGkr KylcblwKKyAgICAgICAgc3RhdGVbaV0gPSB1aW50OF90KDEyOCk7XG5cCitcblwKKyAgICBwdXRf dXN5bWJvbChzYy5jLCBnbF9Xb3JrR3JvdXBJRC54KTtcblwKKyAgICBwdXRfdXN5bWJvbChzYy5j LCBnbF9Xb3JrR3JvdXBJRC55KTtcblwKKyAgICBwdXRfdXN5bWJvbChzYy5jLCAwKTtcblwKKyAg ICBwdXRfdXN5bWJvbChzYy5jLCAwKTtcblwKK1xuXAorICAgIGZvciAoaW50IGkgPSAwOyBpIDwg Y29kZWNfcGxhbmVzOyBpKyspXG5cCisgICAgICAgIHB1dF91c3ltYm9sKHNjLmMsIHNjLnF1YW50 X3RhYmxlX2lkeFtpXSk7XG5cCitcblwKKyAgICBwdXRfdXN5bWJvbChzYy5jLCBwaWNfbW9kZSk7 XG5cCisgICAgcHV0X3VzeW1ib2woc2MuYywgc2FyLngpO1xuXAorICAgIHB1dF91c3ltYm9sKHNj LmMsIHNhci55KTtcblwKK1xuXAorICAgIGlmICh2ZXJzaW9uID49IDQpIHtcblwKKyAgICAgICAg cHV0X3JhY19kaXJlY3Qoc2MuYywgc3RhdGVbMF0sIHNjLnNsaWNlX3Jlc2V0X2NvbnRleHRzKTtc blwKKyAgICAgICAgcHV0X3VzeW1ib2woc2MuYywgc2Muc2xpY2VfY29kaW5nX21vZGUpO1xuXAor ICAgICAgICBpZiAoc2Muc2xpY2VfY29kaW5nX21vZGUgIT0gMSAmJiBjb2xvcnNwYWNlID09IDEp IHtcblwKKyAgICAgICAgICAgIHB1dF91c3ltYm9sKHNjLmMsIHNjLnNsaWNlX3JjdF9jb2VmLnkp O1xuXAorICAgICAgICAgICAgcHV0X3VzeW1ib2woc2MuYywgc2Muc2xpY2VfcmN0X2NvZWYueCk7 XG5cCisgICAgICAgIH1cblwKKyAgICB9XG5cCit9XG5cCitcblwKK3ZvaWQgd3JpdGVfZnJhbWVf aGVhZGVyKGlub3V0IFNsaWNlQ29udGV4dCBzYylcblwKK3tcblwKKyAgICBwdXRfcmFjX2VxdWko c2MuYywgYm9vbChrZXlfZnJhbWUpKTtcblwKK31cblwKK1xuXAorI2lmZGVmIEdPTE9NQlxuXAor dm9pZCBpbml0X2dvbG9tYihpbm91dCBTbGljZUNvbnRleHQgc2MpXG5cCit7XG5cCisgICAgc2Mu aGRyX2xlbiA9IHJhY190ZXJtaW5hdGUoc2MuYyk7XG5cCisgICAgaW5pdF9wdXRfYml0cyhzYy5w YixcblwKKyAgICAgICAgICAgICAgICAgIE9GRkJVRih1OGJ1Ziwgc2MuYy5ieXRlc3RyZWFtX3N0 YXJ0LCBzYy5oZHJfbGVuKSxcblwKKyAgICAgICAgICAgICAgICAgIHNsaWNlX3NpemVfbWF4IC0g c2MuaGRyX2xlbik7XG5cCit9XG5cCisjZW5kaWZcblwKK1xuXAordm9pZCBtYWluKHZvaWQpXG5c Cit7XG5cCisgICAgY29uc3QgdWludCBzbGljZV9pZHggPSBnbF9Xb3JrR3JvdXBJRC55KmdsX051 bVdvcmtHcm91cHMueCArIGdsX1dvcmtHcm91cElELng7XG5cCitcblwKKyAgICBpbml0X3NsaWNl KHNsaWNlX2N0eFtzbGljZV9pZHhdLCBzbGljZV9pZHgpO1xuXAorXG5cCisgICAgaWYgKHNsaWNl X2lkeCA9PSAwKVxuXAorICAgICAgICB3cml0ZV9mcmFtZV9oZWFkZXIoc2xpY2VfY3R4W3NsaWNl X2lkeF0pO1xuXAorXG5cCisgICAgd3JpdGVfc2xpY2VfaGVhZGVyKHNsaWNlX2N0eFtzbGljZV9p ZHhdKTtcblwKK1xuXAorI2lmZGVmIEdPTE9NQlxuXAorICAgIGluaXRfZ29sb21iKHNsaWNlX2N0 eFtzbGljZV9pZHhdKTtcblwKKyNlbmRpZlxuXAorfSI7CisKK2NvbnN0IGNoYXIgKmZmX3NvdXJj ZV9mZnYxX2VuY19jb21wID0gIlwKKyNpZm5kZWYgR09MT01CXG5cCisjaWZkZWYgQ0FDSEVEX1NZ TUJPTF9SRUFERVJcblwKK3NoYXJlZCB1aW50OF90IHN0YXRlW0NPTlRFWFRfU0laRV07XG5cCisj ZGVmaW5lIFdSSVRFKGMsIG9mZiwgdmFsKSBwdXRfcmFjX2RpcmVjdChjLCBzdGF0ZVtvZmZdLCB2 YWwpXG5cCisjZWxzZVxuXAorI2RlZmluZSBXUklURShjLCBvZmYsIHZhbCkgcHV0X3JhYyhjLCB1 aW50NjRfdChzbGljZV9zdGF0ZSkgKyAoc3RhdGVfb2ZmICsgb2ZmKSwgdmFsKVxuXAorI2VuZGlm XG5cCitcblwKKy8qIE5vdGUgLSBvbmx5IGhhbmRsZXMgc2lnbmVkIHZhbHVlcyAqL1xuXAordm9p ZCBwdXRfc3ltYm9sKGlub3V0IFJhbmdlQ29kZXIgYywgdWludCBzdGF0ZV9vZmYsIGludCB2KVxu XAore1xuXAorICAgIGJvb2wgaXNfbmlsID0gKHYgPT0gMCk7XG5cCisgICAgV1JJVEUoYywgMCwg aXNfbmlsKTtcblwKKyAgICBpZiAoaXNfbmlsKVxuXAorICAgICAgICByZXR1cm47XG5cCitcblwK KyAgICBjb25zdCBpbnQgYSA9IGFicyh2KTtcblwKKyAgICBjb25zdCBpbnQgZSA9IGZpbmRNU0Io YSk7XG5cCitcblwKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGU7IGkrKylcblwKKyAgICAgICAg V1JJVEUoYywgMSArIG1pbihpLCA5KSwgdHJ1ZSk7XG5cCisgICAgV1JJVEUoYywgMSArIG1pbihl LCA5KSwgZmFsc2UpO1xuXAorXG5cCisgICAgZm9yIChpbnQgaSA9IGUgLSAxOyBpID49IDA7IGkt LSlcblwKKyAgICAgICAgV1JJVEUoYywgMjIgKyBtaW4oaSwgOSksIGJvb2woYml0ZmllbGRFeHRy YWN0KGEsIGksIDEpKSk7XG5cCitcblwKKyAgICBXUklURShjLCAyMiAtIDExICsgbWluKGUsIDEw KSwgdiA8IDApO1xuXAorfVxuXAorXG5cCit2b2lkIGVuY29kZV9saW5lX3BjbShpbm91dCBTbGlj ZUNvbnRleHQgc2MsIHJlYWRvbmx5IHVpbWFnZTJEIGltZyxcblwKKyAgICAgICAgICAgICAgICAg ICAgIGl2ZWMyIHNwLCBpbnQgeSwgaW50IHAsIGludCBjb21wLCBpbnQgYml0cylcblwKK3tcblwK KyAgICBpbnQgdyA9IHNjLnNsaWNlX2RpbS54O1xuXAorXG5cCisjaWZkZWYgQ0FDSEVEX1NZTUJP TF9SRUFERVJcblwKKyAgICBpZiAoZ2xfTG9jYWxJbnZvY2F0aW9uSUQueCA+IDApXG5cCisgICAg ICAgIHJldHVybjtcblwKKyNlbmRpZlxuXAorXG5cCisjaWZuZGVmIFJHQlxuXAorICAgIGlmIChw ID4gMCAmJiBwIDwgMykge1xuXAorICAgICAgICB3ID4+PSBjaHJvbWFfc2hpZnQueDtcblwKKyAg ICAgICAgc3AgPj49IGNocm9tYV9zaGlmdDtcblwKKyAgICB9XG5cCisjZW5kaWZcblwKK1xuXAor ICAgIGZvciAoaW50IHggPSAwOyB4IDwgdzsgeCsrKSB7XG5cCisgICAgICAgIHVpbnQgdiA9IGlt YWdlTG9hZChpbWcsIHNwICsgTEFERFIoaXZlYzIoeCwgeSkpKVtjb21wXTtcblwKKyAgICAgICAg Zm9yIChpbnQgaSA9IChiaXRzIC0gMSk7IGkgPj0gMDsgaS0tKVxuXAorICAgICAgICAgICAgcHV0 X3JhY19lcXVpKHNjLmMsIGJvb2woYml0ZmllbGRFeHRyYWN0KHYsIGksIDEpKSk7XG5cCisgICAg fVxuXAorfVxuXAorXG5cCit2b2lkIGVuY29kZV9saW5lKGlub3V0IFNsaWNlQ29udGV4dCBzYywg cmVhZG9ubHkgdWltYWdlMkQgaW1nLCB1aW50IHN0YXRlX29mZixcblwKKyAgICAgICAgICAgICAg ICAgaXZlYzIgc3AsIGludCB5LCBpbnQgcCwgaW50IGNvbXAsIGludCBiaXRzLFxuXAorICAgICAg ICAgICAgICAgICB1aW50OF90IHF1YW50X3RhYmxlX2lkeCwgY29uc3QgaW50IHJ1bl9pbmRleClc blwKK3tcblwKKyAgICBpbnQgdyA9IHNjLnNsaWNlX2RpbS54O1xuXAorXG5cCisjaWZuZGVmIFJH QlxuXAorICAgIGlmIChwID4gMCAmJiBwIDwgMykge1xuXAorICAgICAgICB3ID4+PSBjaHJvbWFf c2hpZnQueDtcblwKKyAgICAgICAgc3AgPj49IGNocm9tYV9zaGlmdDtcblwKKyAgICB9XG5cCisj ZW5kaWZcblwKK1xuXAorICAgIGZvciAoaW50IHggPSAwOyB4IDwgdzsgeCsrKSB7XG5cCisgICAg ICAgIGl2ZWMyIGQgPSBnZXRfcHJlZChpbWcsIHNwLCBpdmVjMih4LCB5KSwgY29tcCwgdyxcblwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1YW50X3RhYmxlX2lkeCwgZXh0ZW5kX2xvb2t1 cFtxdWFudF90YWJsZV9pZHhdID4gMCk7XG5cCisgICAgICAgIGRbMV0gPSBpbnQoaW1hZ2VMb2Fk KGltZywgc3AgKyBMQUREUihpdmVjMih4LCB5KSkpW2NvbXBdKSAtIGRbMV07XG5cCitcblwKKyAg ICAgICAgaWYgKGRbMF0gPCAwKVxuXAorICAgICAgICAgICAgZCA9IC1kO1xuXAorXG5cCisgICAg ICAgIGRbMV0gPSBmb2xkKGRbMV0sIGJpdHMpO1xuXAorXG5cCisgICAgICAgIHVpbnQgY29udGV4 dF9vZmYgPSBzdGF0ZV9vZmYgKyBDT05URVhUX1NJWkUqZFswXTtcblwKKyNpZmRlZiBDQUNIRURf U1lNQk9MX1JFQURFUlxuXAorICAgICAgICB1OGJ1ZiBzYiA9IHU4YnVmKHVpbnQ2NF90KHNsaWNl X3N0YXRlKSArIGNvbnRleHRfb2ZmICsgZ2xfTG9jYWxJbnZvY2F0aW9uSUQueCk7XG5cCisgICAg ICAgIHN0YXRlW2dsX0xvY2FsSW52b2NhdGlvbklELnhdID0gc2IudjtcblwKKyAgICAgICAgYmFy cmllcigpO1xuXAorICAgICAgICBpZiAoZ2xfTG9jYWxJbnZvY2F0aW9uSUQueCA9PSAwKVxuXAor I2VuZGlmXG5cCitcblwKKyAgICAgICAgICAgIHB1dF9zeW1ib2woc2MuYywgY29udGV4dF9vZmYs IGRbMV0pO1xuXAorXG5cCisjaWZkZWYgQ0FDSEVEX1NZTUJPTF9SRUFERVJcblwKKyAgICAgICAg YmFycmllcigpO1xuXAorICAgICAgICBzYi52ID0gc3RhdGVbZ2xfTG9jYWxJbnZvY2F0aW9uSUQu eF07XG5cCisjZW5kaWZcblwKKyAgICB9XG5cCit9XG5cCitcblwKKyNlbHNlIC8qIEdPTE9NQiAq L1xuXAorXG5cCit2b2lkIGVuY29kZV9saW5lKGlub3V0IFNsaWNlQ29udGV4dCBzYywgcmVhZG9u bHkgdWltYWdlMkQgaW1nLCB1aW50IHN0YXRlX29mZixcblwKKyAgICAgICAgICAgICAgICAgaXZl YzIgc3AsIGludCB5LCBpbnQgcCwgaW50IGNvbXAsIGludCBiaXRzLFxuXAorICAgICAgICAgICAg ICAgICB1aW50OF90IHF1YW50X3RhYmxlX2lkeCwgaW5vdXQgaW50IHJ1bl9pbmRleClcblwKK3tc blwKKyAgICBpbnQgdyA9IHNjLnNsaWNlX2RpbS54O1xuXAorXG5cCisjaWZuZGVmIFJHQlxuXAor ICAgIGlmIChwID4gMCAmJiBwIDwgMykge1xuXAorICAgICAgICB3ID4+PSBjaHJvbWFfc2hpZnQu eDtcblwKKyAgICAgICAgc3AgPj49IGNocm9tYV9zaGlmdDtcblwKKyAgICB9XG5cCisjZW5kaWZc blwKK1xuXAorICAgIGludCBydW5fY291bnQgPSAwO1xuXAorICAgIGJvb2wgcnVuX21vZGUgPSBm YWxzZTtcblwKK1xuXAorICAgIGZvciAoaW50IHggPSAwOyB4IDwgdzsgeCsrKSB7XG5cCisgICAg ICAgIGl2ZWMyIGQgPSBnZXRfcHJlZChpbWcsIHNwLCBpdmVjMih4LCB5KSwgY29tcCwgdyxcblwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1YW50X3RhYmxlX2lkeCwgZXh0ZW5kX2xvb2t1 cFtxdWFudF90YWJsZV9pZHhdID4gMCk7XG5cCisgICAgICAgIGRbMV0gPSBpbnQoaW1hZ2VMb2Fk KGltZywgc3AgKyBMQUREUihpdmVjMih4LCB5KSkpW2NvbXBdKSAtIGRbMV07XG5cCitcblwKKyAg ICAgICAgaWYgKGRbMF0gPCAwKVxuXAorICAgICAgICAgICAgZCA9IC1kO1xuXAorXG5cCisgICAg ICAgIGRbMV0gPSBmb2xkKGRbMV0sIGJpdHMpO1xuXAorXG5cCisgICAgICAgIGlmIChkWzBdID09 IDApXG5cCisgICAgICAgICAgICBydW5fbW9kZSA9IHRydWU7XG5cCitcblwKKyAgICAgICAgaWYg KHJ1bl9tb2RlKSB7XG5cCisgICAgICAgICAgICBpZiAoZFsxXSAhPSAwKSB7XG5cCisgICAgICAg ICAgICAgICAgLyogQSB2ZXJ5IHVubGlrZWx5IGxvb3AgKi9cblwKKyAgICAgICAgICAgICAgICB3 aGlsZSAocnVuX2NvdW50ID49IDEgPDwgbG9nMl9ydW5bcnVuX2luZGV4XSkge1xuXAorICAgICAg ICAgICAgICAgICAgICBydW5fY291bnQgLT0gMSA8PCBsb2cyX3J1bltydW5faW5kZXhdO1xuXAor ICAgICAgICAgICAgICAgICAgICBydW5faW5kZXgrKztcblwKKyAgICAgICAgICAgICAgICAgICAg cHV0X2JpdHMoc2MucGIsIDEsIDEpO1xuXAorICAgICAgICAgICAgICAgIH1cblwKK1xuXAorICAg ICAgICAgICAgICAgIHB1dF9iaXRzKHNjLnBiLCAxICsgbG9nMl9ydW5bcnVuX2luZGV4XSwgcnVu X2NvdW50KTtcblwKKyAgICAgICAgICAgICAgICBpZiAocnVuX2luZGV4ICE9IDApXG5cCisgICAg ICAgICAgICAgICAgICAgIHJ1bl9pbmRleC0tO1xuXAorICAgICAgICAgICAgICAgIHJ1bl9jb3Vu dCA9IDA7XG5cCisgICAgICAgICAgICAgICAgcnVuX21vZGUgID0gZmFsc2U7XG5cCisgICAgICAg ICAgICAgICAgaWYgKGRbMV0gPiAwKVxuXAorICAgICAgICAgICAgICAgICAgICBkWzFdLS07XG5c CisgICAgICAgICAgICB9IGVsc2Uge1xuXAorICAgICAgICAgICAgICAgIHJ1bl9jb3VudCsrO1xu XAorICAgICAgICAgICAgfVxuXAorICAgICAgICB9XG5cCitcblwKKyAgICAgICAgaWYgKCFydW5f bW9kZSkge1xuXAorICAgICAgICAgICAgVmxjU3RhdGUgc2IgPSBWbGNTdGF0ZSh1aW50NjRfdChz bGljZV9zdGF0ZSkgKyBzdGF0ZV9vZmYgKyBWTENfU1RBVEVfU0laRSpkWzBdKTtcblwKKyAgICAg ICAgICAgIFN5bWJvbCBzeW0gPSBnZXRfdmxjX3N5bWJvbChzYiwgZFsxXSwgYml0cyk7XG5cCisg ICAgICAgICAgICBwdXRfYml0cyhzYy5wYiwgc3ltLmJpdHMsIHN5bS52YWwpO1xuXAorICAgICAg ICB9XG5cCisgICAgfVxuXAorXG5cCisgICAgaWYgKHJ1bl9tb2RlKSB7XG5cCisgICAgICAgIHdo aWxlIChydW5fY291bnQgPj0gKDEgPDwgbG9nMl9ydW5bcnVuX2luZGV4XSkpIHtcblwKKyAgICAg ICAgICAgIHJ1bl9jb3VudCAtPSAxIDw8IGxvZzJfcnVuW3J1bl9pbmRleF07XG5cCisgICAgICAg ICAgICBydW5faW5kZXgrKztcblwKKyAgICAgICAgICAgIHB1dF9iaXRzKHNjLnBiLCAxLCAxKTtc blwKKyAgICAgICAgfVxuXAorXG5cCisgICAgICAgIGlmIChydW5fY291bnQgPiAwKVxuXAorICAg ICAgICAgICAgcHV0X2JpdHMoc2MucGIsIDEsIDEpO1xuXAorICAgIH1cblwKK31cblwKKyNlbmRp ZlxuXAorXG5cCisjaWZkZWYgUkdCXG5cCitpdmVjNCBsb2FkX2NvbXBvbmVudHMoaXZlYzIgcG9z KVxuXAore1xuXAorICAgIGl2ZWM0IHBpeCA9IGl2ZWM0KGltYWdlTG9hZChzcmNbMF0sIHBvcykp O1xuXAorICAgIGlmIChwbGFuYXJfcmdiICE9IDApIHtcblwKKyAgICAgICAgZm9yIChpbnQgaSA9 IDE7IGkgPCAoMyArIHRyYW5zcGFyZW5jeSk7IGkrKylcblwKKyAgICAgICAgICAgIHBpeFtpXSA9 IGludChpbWFnZUxvYWQoc3JjW2ldLCBwb3MpWzBdKTtcblwKKyAgICB9XG5cCitcblwKKyAgICBy ZXR1cm4gaXZlYzQocGl4W2ZtdF9sdXRbMF1dLCBwaXhbZm10X2x1dFsxXV0sXG5cCisgICAgICAg ICAgICAgICAgIHBpeFtmbXRfbHV0WzJdXSwgcGl4W2ZtdF9sdXRbM11dKTtcblwKK31cblwKK1xu XAordm9pZCB0cmFuc2Zvcm1fc2FtcGxlKGlub3V0IGl2ZWM0IHBpeCwgaXZlYzIgcmN0X2NvZWYp XG5cCit7XG5cCisgICAgcGl4LmIgLT0gcGl4Lmc7XG5cCisgICAgcGl4LnIgLT0gcGl4Lmc7XG5c CisgICAgcGl4LmcgKz0gKHBpeC5yKnJjdF9jb2VmLnggKyBwaXguYipyY3RfY29lZi55KSA+PiAy O1xuXAorICAgIHBpeC5iICs9IHJjdF9vZmZzZXQ7XG5cCisgICAgcGl4LnIgKz0gcmN0X29mZnNl dDtcblwKK31cblwKK1xuXAordm9pZCBwcmVsb2FkX3JnYihpbiBTbGljZUNvbnRleHQgc2MsIGl2 ZWMyIHNwLCBpbnQgdywgaW50IHksIGJvb2wgYXBwbHlfcmN0KVxuXAore1xuXAorICAgIGZvciAo dWludCB4ID0gZ2xfTG9jYWxJbnZvY2F0aW9uSUQueDsgeCA8IHc7IHggKz0gZ2xfV29ya0dyb3Vw U2l6ZS54KSB7XG5cCisgICAgICAgIGl2ZWMyIGxwb3MgPSBzcCArIExBRERSKGl2ZWMyKHgsIHkp KTtcblwKKyAgICAgICAgaXZlYzIgcG9zID0gc2Muc2xpY2VfcG9zICsgaXZlYzIoeCwgeSk7XG5c CitcblwKKyAgICAgICAgaXZlYzQgcGl4ID0gbG9hZF9jb21wb25lbnRzKHBvcyk7XG5cCitcblwK KyAgICAgICAgaWYgKGV4cGVjdEVYVChhcHBseV9yY3QsIHRydWUpKVxuXAorICAgICAgICAgICAg dHJhbnNmb3JtX3NhbXBsZShwaXgsIHNjLnNsaWNlX3JjdF9jb2VmKTtcblwKK1xuXAorICAgICAg ICBpbWFnZVN0b3JlKHRtcCwgbHBvcywgcGl4KTtcblwKKyAgICB9XG5cCit9XG5cCisjZW5kaWZc blwKK1xuXAordm9pZCBlbmNvZGVfc2xpY2UoaW5vdXQgU2xpY2VDb250ZXh0IHNjLCBjb25zdCB1 aW50IHNsaWNlX2lkeClcblwKK3tcblwKKyAgICBpdmVjMiBzcCA9IHNjLnNsaWNlX3BvcztcblwK K1xuXAorI2lmbmRlZiBSR0JcblwKKyAgICBpbnQgYml0cyA9IGJpdHNfcGVyX3Jhd19zYW1wbGU7 XG5cCisjZWxzZVxuXAorICAgIGludCBiaXRzID0gOTtcblwKKyAgICBpZiAoYml0cyAhPSA4IHx8 IHNjLnNsaWNlX2NvZGluZ19tb2RlICE9IDApXG5cCisgICAgICAgIGJpdHMgPSBiaXRzX3Blcl9y YXdfc2FtcGxlICsgaW50KHNjLnNsaWNlX2NvZGluZ19tb2RlICE9IDEpO1xuXAorXG5cCisgICAg c3AueSA9IGludChnbF9Xb3JrR3JvdXBJRC55KSpSR0JfTElORUNBQ0hFO1xuXAorI2VuZGlmXG5c CitcblwKKyNpZm5kZWYgR09MT01CXG5cCisgICAgaWYgKHNjLnNsaWNlX2NvZGluZ19tb2RlID09 IDEpIHtcblwKKyNpZm5kZWYgUkdCXG5cCisgICAgICAgIGZvciAoaW50IGMgPSAwOyBjIDwgY29t cG9uZW50czsgYysrKSB7XG5cCitcblwKKyAgICAgICAgICAgIGludCBoID0gc2Muc2xpY2VfZGlt Lnk7XG5cCisgICAgICAgICAgICBpZiAoYyA+IDAgJiYgYyA8IDMpXG5cCisgICAgICAgICAgICAg ICAgaCA+Pj0gY2hyb21hX3NoaWZ0Lnk7XG5cCitcblwKKyAgICAgICAgICAgIC8qIFRha2VzIGlu dG8gYWNjb3VudCBkdWFsLXBsYW5lIFlVViBmb3JtYXRzICovXG5cCisgICAgICAgICAgICBpbnQg cCA9IG1pbihjLCBwbGFuZXMgLSAxKTtcblwKKyAgICAgICAgICAgIGludCBjb21wID0gYyAtIHA7 XG5cCitcblwKKyAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaDsgeSsrKVxuXAorICAg ICAgICAgICAgICAgIGVuY29kZV9saW5lX3BjbShzYywgc3JjW3BdLCBzcCwgeSwgcCwgY29tcCwg Yml0cyk7XG5cCisgICAgICAgIH1cblwKKyNlbHNlXG5cCisgICAgICAgIGZvciAoaW50IHkgPSAw OyB5IDwgc2Muc2xpY2VfZGltLnk7IHkrKykge1xuXAorICAgICAgICAgICAgcHJlbG9hZF9yZ2Io c2MsIHNwLCBzYy5zbGljZV9kaW0ueCwgeSwgZmFsc2UpO1xuXAorXG5cCisgICAgICAgICAgICBl bmNvZGVfbGluZV9wY20oc2MsIHRtcCwgc3AsIHksIDAsIDEsIGJpdHMpO1xuXAorICAgICAgICAg ICAgZW5jb2RlX2xpbmVfcGNtKHNjLCB0bXAsIHNwLCB5LCAwLCAyLCBiaXRzKTtcblwKKyAgICAg ICAgICAgIGVuY29kZV9saW5lX3BjbShzYywgdG1wLCBzcCwgeSwgMCwgMCwgYml0cyk7XG5cCisg ICAgICAgICAgICBpZiAodHJhbnNwYXJlbmN5ID09IDEpXG5cCisgICAgICAgICAgICAgICAgZW5j b2RlX2xpbmVfcGNtKHNjLCB0bXAsIHNwLCB5LCAwLCAzLCBiaXRzKTtcblwKKyAgICAgICAgfVxu XAorI2VuZGlmXG5cCisgICAgfSBlbHNlXG5cCisjZW5kaWZcblwKKyAgICB7XG5cCisgICAgICAg IHU4dmVjNCBxdWFudF90YWJsZV9pZHggPSBzYy5xdWFudF90YWJsZV9pZHgueHl5ejtcblwKKyAg ICAgICAgdTMydmVjNCBzbGljZV9zdGF0ZV9vZmYgPSAoc2xpY2VfaWR4KmNvZGVjX3BsYW5lcyAr IHV2ZWM0KDAsIDEsIDEsIDIpKSpwbGFuZV9zdGF0ZV9zaXplO1xuXAorXG5cCisjaWZuZGVmIFJH QlxuXAorICAgICAgICBmb3IgKGludCBjID0gMDsgYyA8IGNvbXBvbmVudHM7IGMrKykge1xuXAor ICAgICAgICAgICAgaW50IHJ1bl9pbmRleCA9IDA7XG5cCitcblwKKyAgICAgICAgICAgIGludCBo ID0gc2Muc2xpY2VfZGltLnk7XG5cCisgICAgICAgICAgICBpZiAoYyA+IDAgJiYgYyA8IDMpXG5c CisgICAgICAgICAgICAgICAgaCA+Pj0gY2hyb21hX3NoaWZ0Lnk7XG5cCitcblwKKyAgICAgICAg ICAgIGludCBwID0gbWluKGMsIHBsYW5lcyAtIDEpO1xuXAorICAgICAgICAgICAgaW50IGNvbXAg PSBjIC0gcDtcblwKK1xuXAorICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoOyB5Kysp XG5cCisgICAgICAgICAgICAgICAgZW5jb2RlX2xpbmUoc2MsIHNyY1twXSwgc2xpY2Vfc3RhdGVf b2ZmW2NdLCBzcCwgeSwgcCxcblwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wLCBi aXRzLCBxdWFudF90YWJsZV9pZHhbY10sIHJ1bl9pbmRleCk7XG5cCisgICAgICAgIH1cblwKKyNl bHNlXG5cCisgICAgICAgIGludCBydW5faW5kZXggPSAwO1xuXAorICAgICAgICBmb3IgKGludCB5 ID0gMDsgeSA8IHNjLnNsaWNlX2RpbS55OyB5KyspIHtcblwKKyAgICAgICAgICAgIHByZWxvYWRf cmdiKHNjLCBzcCwgc2Muc2xpY2VfZGltLngsIHksIHRydWUpO1xuXAorXG5cCisgICAgICAgICAg ICBlbmNvZGVfbGluZShzYywgdG1wLCBzbGljZV9zdGF0ZV9vZmZbMF0sXG5cCisgICAgICAgICAg ICAgICAgICAgICAgICBzcCwgeSwgMCwgMSwgYml0cywgcXVhbnRfdGFibGVfaWR4WzBdLCBydW5f aW5kZXgpO1xuXAorICAgICAgICAgICAgZW5jb2RlX2xpbmUoc2MsIHRtcCwgc2xpY2Vfc3RhdGVf b2ZmWzFdLFxuXAorICAgICAgICAgICAgICAgICAgICAgICAgc3AsIHksIDAsIDIsIGJpdHMsIHF1 YW50X3RhYmxlX2lkeFsxXSwgcnVuX2luZGV4KTtcblwKKyAgICAgICAgICAgIGVuY29kZV9saW5l KHNjLCB0bXAsIHNsaWNlX3N0YXRlX29mZlsyXSxcblwKKyAgICAgICAgICAgICAgICAgICAgICAg IHNwLCB5LCAwLCAwLCBiaXRzLCBxdWFudF90YWJsZV9pZHhbMl0sIHJ1bl9pbmRleCk7XG5cCisg ICAgICAgICAgICBpZiAodHJhbnNwYXJlbmN5ID09IDEpXG5cCisgICAgICAgICAgICAgICAgZW5j b2RlX2xpbmUoc2MsIHRtcCwgc2xpY2Vfc3RhdGVfb2ZmWzNdLFxuXAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHNwLCB5LCAwLCAzLCBiaXRzLCBxdWFudF90YWJsZV9pZHhbM10sIHJ1bl9p bmRleCk7XG5cCisgICAgICAgIH1cblwKKyNlbmRpZlxuXAorICAgIH1cblwKK31cblwKK1xuXAor dm9pZCBmaW5hbGl6ZV9zbGljZShpbm91dCBTbGljZUNvbnRleHQgc2MsIGNvbnN0IHVpbnQgc2xp Y2VfaWR4KVxuXAore1xuXAorI2lmZGVmIENBQ0hFRF9TWU1CT0xfUkVBREVSXG5cCisgICAgaWYg KGdsX0xvY2FsSW52b2NhdGlvbklELnggPiAwKVxuXAorICAgICAgICByZXR1cm47XG5cCisjZW5k aWZcblwKK1xuXAorI2lmZGVmIEdPTE9NQlxuXAorICAgIHVpbnQzMl90IGVuY19sZW4gPSBzYy5o ZHJfbGVuICsgZmx1c2hfcHV0X2JpdHMoc2MucGIpO1xuXAorI2Vsc2VcblwKKyAgICB1aW50MzJf dCBlbmNfbGVuID0gcmFjX3Rlcm1pbmF0ZShzYy5jKTtcblwKKyNlbmRpZlxuXAorXG5cCisgICAg dThidWYgYnMgPSB1OGJ1ZihzYy5jLmJ5dGVzdHJlYW1fc3RhcnQpO1xuXAorXG5cCisgICAgLyog QXBwZW5kIHNsaWNlIGxlbmd0aCAqL1xuXAorICAgIHU4dmVjNCBlbmNfbGVuX3AgPSB1bnBhY2s4 KGVuY19sZW4pO1xuXAorICAgIGJzW2VuY19sZW4gKyAwXS52ID0gZW5jX2xlbl9wLno7XG5cCisg ICAgYnNbZW5jX2xlbiArIDFdLnYgPSBlbmNfbGVuX3AueTtcblwKKyAgICBic1tlbmNfbGVuICsg Ml0udiA9IGVuY19sZW5fcC54O1xuXAorICAgIGVuY19sZW4gKz0gMztcblwKK1xuXAorICAgIC8q IENhbGN1bGF0ZSBhbmQgd3JpdGUgQ1JDICovXG5cCisgICAgaWYgKGVjICE9IDApIHtcblwKKyAg ICAgICAgYnNbZW5jX2xlbl0udiA9IHVpbnQ4X3QoMCk7XG5cCisgICAgICAgIGVuY19sZW4rKztc blwKK1xuXAorICAgICAgICB1aW50MzJfdCBjcmMgPSBjcmNyZWY7XG5cCisgICAgICAgIGZvciAo aW50IGkgPSAwOyBpIDwgZW5jX2xlbjsgaSsrKVxuXAorICAgICAgICAgICAgY3JjID0gY3JjX2ll ZWVbKGNyYyAmIDB4RkYpIF4gdWludDMyX3QoYnNbaV0udildIF4gKGNyYyA+PiA4KTtcblwKK1xu XAorICAgICAgICBpZiAoY3JjcmVmICE9IDB4MDAwMDAwMDApXG5cCisgICAgICAgICAgICBjcmMg Xj0gMHg4Q0Q4ODE5NjtcblwKK1xuXAorICAgICAgICB1OHZlYzQgY3JjX3AgPSB1bnBhY2s4KGNy Yyk7XG5cCisgICAgICAgIGJzW2VuY19sZW4gKyAwXS52ID0gY3JjX3AueDtcblwKKyAgICAgICAg YnNbZW5jX2xlbiArIDFdLnYgPSBjcmNfcC55O1xuXAorICAgICAgICBic1tlbmNfbGVuICsgMl0u diA9IGNyY19wLno7XG5cCisgICAgICAgIGJzW2VuY19sZW4gKyAzXS52ID0gY3JjX3AudztcblwK KyAgICAgICAgZW5jX2xlbiArPSA0O1xuXAorICAgIH1cblwKK1xuXAorICAgIHNsaWNlX3Jlc3Vs dHNbc2xpY2VfaWR4KjIgKyAwXSA9IGVuY19sZW47XG5cCisgICAgc2xpY2VfcmVzdWx0c1tzbGlj ZV9pZHgqMiArIDFdID0gdWludDY0X3QoYnMpIC0gdWludDY0X3Qob3V0X2RhdGEpO1xuXAorfVxu XAorXG5cCit2b2lkIG1haW4odm9pZClcblwKK3tcblwKKyAgICBjb25zdCB1aW50IHNsaWNlX2lk eCA9IGdsX1dvcmtHcm91cElELnkqZ2xfTnVtV29ya0dyb3Vwcy54ICsgZ2xfV29ya0dyb3VwSUQu eDtcblwKKyAgICBlbmNvZGVfc2xpY2Uoc2xpY2VfY3R4W3NsaWNlX2lkeF0sIHNsaWNlX2lkeCk7 XG5cCisgICAgZmluYWxpemVfc2xpY2Uoc2xpY2VfY3R4W3NsaWNlX2lkeF0sIHNsaWNlX2lkeCk7 XG5cCit9IjsKKworY29uc3QgY2hhciAqZmZfc291cmNlX2ZmdjFfcmN0X2NvbXAgPSAiXAoraXZl YzQgbG9hZF9jb21wb25lbnRzKGl2ZWMyIHBvcylcblwKK3tcblwKKyAgICBpdmVjNCBwaXggPSBp dmVjNChpbWFnZUxvYWQoc3JjWzBdLCBwb3MpKTtcblwKKyAgICBpZiAocGxhbmFyX3JnYiAhPSAw KSB7XG5cCisgICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgKDMgKyB0cmFuc3BhcmVuY3kpOyBp KyspXG5cCisgICAgICAgICAgICBwaXhbaV0gPSBpbnQoaW1hZ2VMb2FkKHNyY1tpXSwgcG9zKVsw XSk7XG5cCisgICAgfVxuXAorXG5cCisgICAgcmV0dXJuIGl2ZWM0KHBpeFtmbXRfbHV0WzBdXSwg cGl4W2ZtdF9sdXRbMV1dLFxuXAorICAgICAgICAgICAgICAgICBwaXhbZm10X2x1dFsyXV0sIHBp eFtmbXRfbHV0WzNdXSk7XG5cCit9XG5cCitcblwKK3ZvaWQgYnlwYXNzX3NhbXBsZShpdmVjMiBw b3MpXG5cCit7XG5cCisgICAgaW1hZ2VTdG9yZShkc3RbMF0sIHBvcywgbG9hZF9jb21wb25lbnRz KHBvcykpO1xuXAorfVxuXAorXG5cCit2b2lkIGJ5cGFzc19ibG9jayhpbiBTbGljZUNvbnRleHQg c2MpXG5cCit7XG5cCisgICAgaXZlYzIgc3RhcnQgPSBpdmVjMihnbF9Mb2NhbEludm9jYXRpb25J RCkgKyBzYy5zbGljZV9wb3M7XG5cCisgICAgaXZlYzIgZW5kID0gc2Muc2xpY2VfcG9zICsgc2Mu c2xpY2VfZGltO1xuXAorICAgIGZvciAodWludCB5ID0gc3RhcnQueTsgeSA8IGVuZC55OyB5ICs9 IGdsX1dvcmtHcm91cFNpemUueSlcblwKKyAgICAgICAgZm9yICh1aW50IHggPSBzdGFydC54OyB4 IDwgZW5kLng7IHggKz0gZ2xfV29ya0dyb3VwU2l6ZS54KVxuXAorICAgICAgICAgICAgYnlwYXNz X3NhbXBsZShpdmVjMih4LCB5KSk7XG5cCit9XG5cCitcblwKK3ZvaWQgdHJhbnNmb3JtX3NhbXBs ZShpdmVjMiBwb3MsIGl2ZWMyIHJjdF9jb2VmKVxuXAore1xuXAorICAgIGl2ZWM0IHBpeCA9IGxv YWRfY29tcG9uZW50cyhwb3MpO1xuXAorICAgIHBpeC5iIC09IG9mZnNldDtcblwKKyAgICBwaXgu ciAtPSBvZmZzZXQ7XG5cCisgICAgcGl4LmcgLT0gKHBpeC5yKnJjdF9jb2VmLnggKyBwaXguYipy Y3RfY29lZi55KSA+PiAyO1xuXAorICAgIHBpeC5iICs9IHBpeC5nO1xuXAorICAgIHBpeC5yICs9 IHBpeC5nO1xuXAorICAgIGltYWdlU3RvcmUoZHN0WzBdLCBwb3MsIHBpeCk7XG5cCit9XG5cCitc blwKK3ZvaWQgdHJhbnNmb3JtX3NhbXBsZShpdmVjMiBwb3MsIGl2ZWMyIHJjdF9jb2VmKVxuXAor e1xuXAorICAgIGl2ZWM0IHBpeCA9IGxvYWRfY29tcG9uZW50cyhwb3MpO1xuXAorICAgIHBpeC5i IC09IHBpeC5nO1xuXAorICAgIHBpeC5yIC09IHBpeC5nO1xuXAorICAgIHBpeC5nICs9IChwaXgu cipyY3RfY29lZi54ICsgcGl4LmIqcmN0X2NvZWYueSkgPj4gMjtcblwKKyAgICBwaXguYiArPSBv ZmZzZXQ7XG5cCisgICAgcGl4LnIgKz0gb2Zmc2V0O1xuXAorICAgIGltYWdlU3RvcmUoZHN0WzBd LCBwb3MsIHBpeCk7XG5cCit9XG5cCitcblwKK3ZvaWQgdHJhbnNmb3JtX2Jsb2NrKGluIFNsaWNl Q29udGV4dCBzYylcblwKK3tcblwKKyAgICBjb25zdCBpdmVjMiByY3RfY29lZiA9IHNjLnNsaWNl X3JjdF9jb2VmO1xuXAorICAgIGNvbnN0IGl2ZWMyIHN0YXJ0ID0gaXZlYzIoZ2xfTG9jYWxJbnZv Y2F0aW9uSUQpICsgc2Muc2xpY2VfcG9zO1xuXAorICAgIGNvbnN0IGl2ZWMyIGVuZCA9IHNjLnNs aWNlX3BvcyArIHNjLnNsaWNlX2RpbTtcblwKK1xuXAorICAgIGZvciAodWludCB5ID0gc3RhcnQu eTsgeSA8IGVuZC55OyB5ICs9IGdsX1dvcmtHcm91cFNpemUueSlcblwKKyAgICAgICAgZm9yICh1 aW50IHggPSBzdGFydC54OyB4IDwgZW5kLng7IHggKz0gZ2xfV29ya0dyb3VwU2l6ZS54KVxuXAor ICAgICAgICAgICAgdHJhbnNmb3JtX3NhbXBsZShpdmVjMih4LCB5KSwgcmN0X2NvZWYpO1xuXAor fVxuXAorXG5cCit2b2lkIG1haW4oKVxuXAore1xuXAorICAgIGNvbnN0IHVpbnQgc2xpY2VfaWR4 ID0gZ2xfV29ya0dyb3VwSUQueSpnbF9OdW1Xb3JrR3JvdXBzLnggKyBnbF9Xb3JrR3JvdXBJRC54 O1xuXAorXG5cCisgICAgaWYgKHNsaWNlX2N0eFtzbGljZV9pZHhdLnNsaWNlX2NvZGluZ19tb2Rl ID09IDEpXG5cCisgICAgICAgIGJ5cGFzc19ibG9jayhzbGljZV9jdHhbc2xpY2VfaWR4XSk7XG5c CisgICAgZWxzZVxuXAorICAgICAgICB0cmFuc2Zvcm1fYmxvY2soc2xpY2VfY3R4W3NsaWNlX2lk eF0pO1xuXAorfSI7CisKK2NvbnN0IGNoYXIgKmZmX3NvdXJjZV9mZnYxX2VuY19yY3RfY29tcCA9 ICJcCitpdmVjNCBsb2FkX2NvbXBvbmVudHMoaXZlYzIgcG9zKVxuXAore1xuXAorICAgIGl2ZWM0 IHBpeCA9IGl2ZWM0KGltYWdlTG9hZChzcmNbMF0sIHBvcykpO1xuXAorICAgIGlmIChwbGFuYXJf cmdiICE9IDApIHtcblwKKyAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCAoMyArIHRyYW5zcGFy ZW5jeSk7IGkrKylcblwKKyAgICAgICAgICAgIHBpeFtpXSA9IGludChpbWFnZUxvYWQoc3JjW2ld LCBwb3MpWzBdKTtcblwKKyAgICB9XG5cCitcblwKKyAgICByZXR1cm4gaXZlYzQocGl4W2ZtdF9s dXRbMF1dLCBwaXhbZm10X2x1dFsxXV0sXG5cCisgICAgICAgICAgICAgICAgIHBpeFtmbXRfbHV0 WzJdXSwgcGl4W2ZtdF9sdXRbM11dKTtcblwKK31cblwKK1xuXAordm9pZCBieXBhc3Nfc2FtcGxl KGl2ZWMyIHBvcylcblwKK3tcblwKKyAgICBpbWFnZVN0b3JlKGRzdFswXSwgcG9zLCBsb2FkX2Nv bXBvbmVudHMocG9zKSk7XG5cCit9XG5cCitcblwKK3ZvaWQgYnlwYXNzX2Jsb2NrKGluIFNsaWNl Q29udGV4dCBzYylcblwKK3tcblwKKyAgICBpdmVjMiBzdGFydCA9IGl2ZWMyKGdsX0xvY2FsSW52 b2NhdGlvbklEKSArIHNjLnNsaWNlX3BvcztcblwKKyAgICBpdmVjMiBlbmQgPSBzYy5zbGljZV9w b3MgKyBzYy5zbGljZV9kaW07XG5cCisgICAgZm9yICh1aW50IHkgPSBzdGFydC55OyB5IDwgZW5k Lnk7IHkgKz0gZ2xfV29ya0dyb3VwU2l6ZS55KVxuXAorICAgICAgICBmb3IgKHVpbnQgeCA9IHN0 YXJ0Lng7IHggPCBlbmQueDsgeCArPSBnbF9Xb3JrR3JvdXBTaXplLngpXG5cCisgICAgICAgICAg ICBieXBhc3Nfc2FtcGxlKGl2ZWMyKHgsIHkpKTtcblwKK31cblwKK1xuXAordm9pZCB0cmFuc2Zv cm1fc2FtcGxlKGl2ZWMyIHBvcywgaXZlYzIgcmN0X2NvZWYpXG5cCit7XG5cCisgICAgaXZlYzQg cGl4ID0gbG9hZF9jb21wb25lbnRzKHBvcyk7XG5cCisgICAgcGl4LmIgLT0gcGl4Lmc7XG5cCisg ICAgcGl4LnIgLT0gcGl4Lmc7XG5cCisgICAgcGl4LmcgKz0gKHBpeC5yKnJjdF9jb2VmLnggKyBw aXguYipyY3RfY29lZi55KSA+PiAyO1xuXAorICAgIHBpeC5iICs9IG9mZnNldDtcblwKKyAgICBw aXguciArPSBvZmZzZXQ7XG5cCisgICAgaW1hZ2VTdG9yZShkc3RbMF0sIHBvcywgcGl4KTtcblwK K31cblwKK1xuXAordm9pZCB0cmFuc2Zvcm1fYmxvY2soaW4gU2xpY2VDb250ZXh0IHNjKVxuXAor e1xuXAorICAgIGNvbnN0IGl2ZWMyIHJjdF9jb2VmID0gc2Muc2xpY2VfcmN0X2NvZWY7XG5cCisg ICAgY29uc3QgaXZlYzIgc3RhcnQgPSBpdmVjMihnbF9Mb2NhbEludm9jYXRpb25JRCkgKyBzYy5z bGljZV9wb3M7XG5cCisgICAgY29uc3QgaXZlYzIgZW5kID0gc2Muc2xpY2VfcG9zICsgc2Muc2xp Y2VfZGltO1xuXAorXG5cCisgICAgZm9yICh1aW50IHkgPSBzdGFydC55OyB5IDwgZW5kLnk7IHkg Kz0gZ2xfV29ya0dyb3VwU2l6ZS55KVxuXAorICAgICAgICBmb3IgKHVpbnQgeCA9IHN0YXJ0Lng7 IHggPCBlbmQueDsgeCArPSBnbF9Xb3JrR3JvdXBTaXplLngpXG5cCisgICAgICAgICAgICB0cmFu c2Zvcm1fc2FtcGxlKGl2ZWMyKHgsIHkpLCByY3RfY29lZik7XG5cCit9XG5cCitcblwKK3ZvaWQg bWFpbigpXG5cCit7XG5cCisgICAgY29uc3QgdWludCBzbGljZV9pZHggPSBnbF9Xb3JrR3JvdXBJ RC55KmdsX051bVdvcmtHcm91cHMueCArIGdsX1dvcmtHcm91cElELng7XG5cCitcblwKKyAgICBp ZiAoc2xpY2VfY3R4W3NsaWNlX2lkeF0uc2xpY2VfY29kaW5nX21vZGUgPT0gMSlcblwKKyAgICAg ICAgYnlwYXNzX2Jsb2NrKHNsaWNlX2N0eFtzbGljZV9pZHhdKTtcblwKKyAgICBlbHNlXG5cCisg ICAgICAgIHRyYW5zZm9ybV9ibG9jayhzbGljZV9jdHhbc2xpY2VfaWR4XSk7XG5cCit9IjsKKwor Y29uc3QgY2hhciAqZmZfc291cmNlX2ZmdjFfZGVjX3NldHVwX2NvbXAgPSAiXAordWludDhfdCBz ZXR1cF9zdGF0ZVtDT05URVhUX1NJWkVdO1xuXAorXG5cCit1aW50IGdldF91c3ltYm9sKGlub3V0 IFJhbmdlQ29kZXIgYylcblwKK3tcblwKKyAgICBpZiAoZ2V0X3JhY19kaXJlY3QoYywgc2V0dXBf c3RhdGVbMF0pKVxuXAorICAgICAgICByZXR1cm4gMDtcblwKK1xuXAorICAgIGludCBlID0gMDtc blwKKyAgICB3aGlsZSAoZ2V0X3JhY19kaXJlY3QoYywgc2V0dXBfc3RhdGVbMSArIG1pbihlLCA5 KV0pKSB7IC8vIDEuLjEwXG5cCisgICAgICAgIGUrKztcblwKKyAgICAgICAgaWYgKGUgPiAzMSkg e1xuXAorICAgICAgICAgICAgY29ycnVwdCA9IHRydWU7XG5cCisgICAgICAgICAgICByZXR1cm4g MDtcblwKKyAgICAgICAgfVxuXAorICAgIH1cblwKK1xuXAorICAgIHVpbnQgYSA9IDE7XG5cCisg ICAgZm9yIChpbnQgaSA9IGUgLSAxOyBpID49IDA7IGktLSkge1xuXAorICAgICAgICBhIDw8PSAx O1xuXAorICAgICAgICBhIHw9IHVpbnQoZ2V0X3JhY19kaXJlY3QoYywgc2V0dXBfc3RhdGVbMjIg KyBtaW4oaSwgOSldKSk7ICAvLyAyMi4uMzFcblwKKyAgICB9XG5cCitcblwKKyAgICByZXR1cm4g YTtcblwKK31cblwKK1xuXAorYm9vbCBkZWNvZGVfc2xpY2VfaGVhZGVyKGlub3V0IFNsaWNlQ29u dGV4dCBzYylcblwKK3tcblwKKyAgICBbW3Vucm9sbF1dXG5cCisgICAgZm9yIChpbnQgaSA9IDA7 IGkgPCBDT05URVhUX1NJWkU7IGkrKylcblwKKyAgICAgICAgc2V0dXBfc3RhdGVbaV0gPSB1aW50 OF90KDEyOCk7XG5cCitcblwKKyAgICB1aW50IHN4ID0gZ2V0X3VzeW1ib2woc2MuYyk7XG5cCisg ICAgdWludCBzeSA9IGdldF91c3ltYm9sKHNjLmMpO1xuXAorICAgIHVpbnQgc3cgPSBnZXRfdXN5 bWJvbChzYy5jKSArIDE7XG5cCisgICAgdWludCBzaCA9IGdldF91c3ltYm9sKHNjLmMpICsgMTtc blwKK1xuXAorICAgIGlmIChzeCA8IDAgfHwgc3kgPCAwIHx8IHN3IDw9IDAgfHwgc2ggPD0gMCB8 fFxuXAorICAgICAgICBzeCA+IChnbF9OdW1Xb3JrR3JvdXBzLnggLSBzdykgfHwgc3kgPiAoZ2xf TnVtV29ya0dyb3Vwcy55IC0gc2gpIHx8XG5cCisgICAgICAgIGNvcnJ1cHQpIHtcblwKKyAgICAg ICAgcmV0dXJuIHRydWU7XG5cCisgICAgfVxuXAorXG5cCisgICAgLyogU2V0IGNvb3JkaW5hdGVz ICovXG5cCisgICAgdWludCBzeHMgPSBzbGljZV9jb29yZChpbWdfc2l6ZS54LCBzeCAgICAgLCBn bF9OdW1Xb3JrR3JvdXBzLngsIGNocm9tYV9zaGlmdC54KTtcblwKKyAgICB1aW50IHN4ZSA9IHNs aWNlX2Nvb3JkKGltZ19zaXplLngsIHN4ICsgc3csIGdsX051bVdvcmtHcm91cHMueCwgY2hyb21h X3NoaWZ0LngpO1xuXAorICAgIHVpbnQgc3lzID0gc2xpY2VfY29vcmQoaW1nX3NpemUueSwgc3kg ICAgICwgZ2xfTnVtV29ya0dyb3Vwcy55LCBjaHJvbWFfc2hpZnQueSk7XG5cCisgICAgdWludCBz eWUgPSBzbGljZV9jb29yZChpbWdfc2l6ZS55LCBzeSArIHNoLCBnbF9OdW1Xb3JrR3JvdXBzLnks IGNocm9tYV9zaGlmdC55KTtcblwKK1xuXAorICAgIHNjLnNsaWNlX3BvcyA9IGl2ZWMyKHN4cywg c3lzKTtcblwKKyAgICBzYy5zbGljZV9kaW0gPSBpdmVjMihzeGUgLSBzeHMsIHN5ZSAtIHN5cyk7 XG5cCisgICAgc2Muc2xpY2VfcmN0X2NvZWYgPSBpdmVjMigxLCAxKTtcblwKKyAgICBzYy5zbGlj ZV9jb2RpbmdfbW9kZSA9IGludCgwKTtcblwKK1xuXAorICAgIGZvciAodWludCBpID0gMDsgaSA8 IGNvZGVjX3BsYW5lczsgaSsrKSB7XG5cCisgICAgICAgIHVpbnQgaWR4ID0gZ2V0X3VzeW1ib2wo c2MuYyk7XG5cCisgICAgICAgIGlmIChpZHggPj0gcXVhbnRfdGFibGVfY291bnQpXG5cCisgICAg ICAgICAgICByZXR1cm4gdHJ1ZTtcblwKKyAgICAgICAgc2MucXVhbnRfdGFibGVfaWR4W2ldID0g dWludDhfdChpZHgpO1xuXAorICAgIH1cblwKK1xuXAorICAgIGdldF91c3ltYm9sKHNjLmMpO1xu XAorICAgIGdldF91c3ltYm9sKHNjLmMpO1xuXAorICAgIGdldF91c3ltYm9sKHNjLmMpO1xuXAor XG5cCisgICAgaWYgKHZlcnNpb24gPj0gNCkge1xuXAorICAgICAgICBzYy5zbGljZV9yZXNldF9j b250ZXh0cyA9IGdldF9yYWNfZGlyZWN0KHNjLmMsIHNldHVwX3N0YXRlWzBdKTtcblwKKyAgICAg ICAgc2Muc2xpY2VfY29kaW5nX21vZGUgPSBnZXRfdXN5bWJvbChzYy5jKTtcblwKKyAgICAgICAg aWYgKHNjLnNsaWNlX2NvZGluZ19tb2RlICE9IDEgJiYgY29sb3JzcGFjZSA9PSAxKSB7XG5cCisg ICAgICAgICAgICBzYy5zbGljZV9yY3RfY29lZi54ID0gaW50KGdldF91c3ltYm9sKHNjLmMpKTtc blwKKyAgICAgICAgICAgIHNjLnNsaWNlX3JjdF9jb2VmLnkgPSBpbnQoZ2V0X3VzeW1ib2woc2Mu YykpO1xuXAorICAgICAgICAgICAgaWYgKHNjLnNsaWNlX3JjdF9jb2VmLnggKyBzYy5zbGljZV9y Y3RfY29lZi55ID4gNClcblwKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcblwKKyAgICAg ICAgfVxuXAorICAgIH1cblwKK1xuXAorICAgIHJldHVybiBmYWxzZTtcblwKK31cblwKK1xuXAor dm9pZCBnb2xvbWJfaW5pdChpbm91dCBTbGljZUNvbnRleHQgc2MpXG5cCit7XG5cCisgICAgaWYg KHZlcnNpb24gPT0gMyAmJiBtaWNyb192ZXJzaW9uID4gMSB8fCB2ZXJzaW9uID4gMykge1xuXAor ICAgICAgICBzZXR1cF9zdGF0ZVswXSA9IHVpbnQ4X3QoMTI5KTtcblwKKyAgICAgICAgZ2V0X3Jh Y19kaXJlY3Qoc2MuYywgc2V0dXBfc3RhdGVbMF0pO1xuXAorICAgIH1cblwKK1xuXAorICAgIHVp bnQ2NF90IGFjX2J5dGVfY291bnQgPSBzYy5jLmJ5dGVzdHJlYW0gLSBzYy5jLmJ5dGVzdHJlYW1f c3RhcnQgLSAxO1xuXAorICAgIGluaXRfZ2V0X2JpdHMoc2MuZ2IsIHU4YnVmKHNjLmMuYnl0ZXN0 cmVhbV9zdGFydCArIGFjX2J5dGVfY291bnQpLFxuXAorICAgICAgICAgICAgICAgICAgaW50KHNj LmMuYnl0ZXN0cmVhbV9lbmQgLSBzYy5jLmJ5dGVzdHJlYW1fc3RhcnQgLSBhY19ieXRlX2NvdW50 KSk7XG5cCit9XG5cCitcblwKK3ZvaWQgbWFpbih2b2lkKVxuXAore1xuXAorICAgIGNvbnN0IHVp bnQgc2xpY2VfaWR4ID0gZ2xfV29ya0dyb3VwSUQueSpnbF9OdW1Xb3JrR3JvdXBzLnggKyBnbF9X b3JrR3JvdXBJRC54O1xuXAorXG5cCisgICAgdThidWYgYnMgPSB1OGJ1ZihzbGljZV9kYXRhICsg c2xpY2Vfb2Zmc2V0c1syKnNsaWNlX2lkeCArIDBdKTtcblwKKyAgICB1aW50MzJfdCBzbGljZV9z aXplID0gc2xpY2Vfb2Zmc2V0c1syKnNsaWNlX2lkeCArIDFdO1xuXAorXG5cCisgICAgcmFjX2lu aXRfZGVjKHNsaWNlX2N0eFtzbGljZV9pZHhdLmMsXG5cCisgICAgICAgICAgICAgICAgIGJzLCBz bGljZV9zaXplKTtcblwKK1xuXAorICAgIGlmIChzbGljZV9pZHggPT0gKGdsX051bVdvcmtHcm91 cHMueCpnbF9OdW1Xb3JrR3JvdXBzLnkgLSAxKSlcblwKKyAgICAgICAgZ2V0X3JhY19lcXVpKHNs aWNlX2N0eFtzbGljZV9pZHhdLmMpO1xuXAorXG5cCisgICAgZGVjb2RlX3NsaWNlX2hlYWRlcihz bGljZV9jdHhbc2xpY2VfaWR4XSk7XG5cCitcblwKKyAgICBpZiAoZ29sb21iID09IDEpXG5cCisg ICAgICAgIGdvbG9tYl9pbml0KHNsaWNlX2N0eFtzbGljZV9pZHhdKTtcblwKK1xuXAorICAgIGlm IChlYyAhPSAwICYmIGNoZWNrX2NyYyAhPSAwKSB7XG5cCisgICAgICAgIHVpbnQzMl90IGNyYyA9 IGNyY3JlZjtcblwKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzbGljZV9zaXplOyBpKysp XG5cCisgICAgICAgICAgICBjcmMgPSBjcmNfaWVlZVsoY3JjICYgMHhGRikgXiB1aW50MzJfdChi c1tpXS52KV0gXiAoY3JjID4+IDgpO1xuXAorXG5cCisgICAgICAgIHNsaWNlX3N0YXR1c1syKnNs aWNlX2lkeCArIDBdID0gY3JjO1xuXAorICAgIH1cblwKK1xuXAorICAgIHNsaWNlX3N0YXR1c1sy KnNsaWNlX2lkeCArIDFdID0gY29ycnVwdCA/IHVpbnQzMl90KGNvcnJ1cHQpIDogb3ZlcnJlYWQ7 XG5cCit9IjsKKworY29uc3QgY2hhciAqZmZfc291cmNlX2ZmdjFfZGVjX2NvbXAgPSAiXAorI2lm bmRlZiBHT0xPTUJcblwKKyNpZmRlZiBDQUNIRURfU1lNQk9MX1JFQURFUlxuXAorc2hhcmVkIHVp bnQ4X3Qgc3RhdGVbQ09OVEVYVF9TSVpFXTtcblwKKyNkZWZpbmUgUkVBRChjLCBvZmYpIGdldF9y YWNfZGlyZWN0KGMsIHN0YXRlW29mZl0pXG5cCisjZWxzZVxuXAorI2RlZmluZSBSRUFEKGMsIG9m ZikgZ2V0X3JhYyhjLCB1aW50NjRfdChzbGljZV9zdGF0ZSkgKyAoc3RhdGVfb2ZmICsgb2ZmKSlc blwKKyNlbmRpZlxuXAorXG5cCitpbnQgZ2V0X2lzeW1ib2woaW5vdXQgUmFuZ2VDb2RlciBjLCB1 aW50IHN0YXRlX29mZilcblwKK3tcblwKKyAgICBpZiAoUkVBRChjLCAwKSlcblwKKyAgICAgICAg cmV0dXJuIDA7XG5cCitcblwKKyAgICB1aW50IGUgPSAxO1xuXAorICAgIGZvciAoOyBlIDwgMzM7 IGUrKylcblwKKyAgICAgICAgaWYgKCFSRUFEKGMsIG1pbihlLCAxMCkpKVxuXAorICAgICAgICAg ICAgYnJlYWs7XG5cCitcblwKKyAgICBpZiAoZXhwZWN0RVhUKGUgPT0gMSwgZmFsc2UpKSB7XG5c CisgICAgICAgIHJldHVybiBSRUFEKGMsIDExKSA/IC0xIDogMTtcblwKKyAgICB9IGVsc2UgaWYg KGV4cGVjdEVYVChlID09IDMzLCBmYWxzZSkpIHtcblwKKyAgICAgICAgY29ycnVwdCA9IHRydWU7 XG5cCisgICAgICAgIHJldHVybiAwO1xuXAorICAgIH1cblwKK1xuXAorICAgIGludCBhID0gMTtc blwKKyAgICBmb3IgKHVpbnQgaSA9IGUgKyAyMDsgaSA+PSAyMjsgaS0tKSB7XG5cCisgICAgICAg IGEgPDw9IDE7XG5cCisgICAgICAgIGEgfD0gaW50KFJFQUQoYywgbWluKGksIDMxKSkpO1xuXAor ICAgIH1cblwKK1xuXAorICAgIHJldHVybiBSRUFEKGMsIG1pbihlICsgMTAsIDIxKSkgPyAtYSA6 IGE7XG5cCit9XG5cCitcblwKK3ZvaWQgZGVjb2RlX2xpbmVfcGNtKGlub3V0IFNsaWNlQ29udGV4 dCBzYywgaXZlYzIgc3AsIGludCB3LCBpbnQgeSwgaW50IHAsIGludCBiaXRzKVxuXAore1xuXAor I2lmZGVmIENBQ0hFRF9TWU1CT0xfUkVBREVSXG5cCisgICAgaWYgKGdsX0xvY2FsSW52b2NhdGlv bklELnggPiAwKVxuXAorICAgICAgICByZXR1cm47XG5cCisjZW5kaWZcblwKK1xuXAorI2lmbmRl ZiBSR0JcblwKKyAgICBpZiAocCA+IDAgJiYgcCA8IDMpIHtcblwKKyAgICAgICAgdyA+Pj0gY2hy b21hX3NoaWZ0Lng7XG5cCisgICAgICAgIHNwID4+PSBjaHJvbWFfc2hpZnQ7XG5cCisgICAgfVxu XAorI2VuZGlmXG5cCitcblwKKyAgICBmb3IgKGludCB4ID0gMDsgeCA8IHc7IHgrKykge1xuXAor ICAgICAgICB1aW50IHYgPSAwO1xuXAorICAgICAgICBmb3IgKGludCBpID0gKGJpdHMgLSAxKTsg aSA+PSAwOyBpLS0pXG5cCisgICAgICAgICAgICB2IHw9IHVpbnQoZ2V0X3JhY19lcXVpKHNjLmMp KSA8PCBpO1xuXAorXG5cCisgICAgICAgIGltYWdlU3RvcmUoZGVjW3BdLCBzcCArIExBRERSKGl2 ZWMyKHgsIHkpKSwgdXZlYzQodikpO1xuXAorICAgIH1cblwKK31cblwKK1xuXAordm9pZCBkZWNv ZGVfbGluZShpbm91dCBTbGljZUNvbnRleHQgc2MsIGl2ZWMyIHNwLCBpbnQgdyxcblwKKyAgICAg ICAgICAgICAgICAgaW50IHksIGludCBwLCBpbnQgYml0cywgdWludCBzdGF0ZV9vZmYsXG5cCisg ICAgICAgICAgICAgICAgIHVpbnQ4X3QgcXVhbnRfdGFibGVfaWR4LCBjb25zdCBpbnQgcnVuX2lu ZGV4KVxuXAore1xuXAorI2lmbmRlZiBSR0JcblwKKyAgICBpZiAocCA+IDAgJiYgcCA8IDMpIHtc blwKKyAgICAgICAgdyA+Pj0gY2hyb21hX3NoaWZ0Lng7XG5cCisgICAgICAgIHNwID4+PSBjaHJv bWFfc2hpZnQ7XG5cCisgICAgfVxuXAorI2VuZGlmXG5cCitcblwKKyAgICBmb3IgKGludCB4ID0g MDsgeCA8IHc7IHgrKykge1xuXAorICAgICAgICBpdmVjMiBwciA9IGdldF9wcmVkKGRlY1twXSwg c3AsIGl2ZWMyKHgsIHkpLCAwLCB3LFxuXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1 YW50X3RhYmxlX2lkeCwgZXh0ZW5kX2xvb2t1cFtxdWFudF90YWJsZV9pZHhdID4gMCk7XG5cCitc blwKKyAgICAgICAgdWludCBjb250ZXh0X29mZiA9IHN0YXRlX29mZiArIENPTlRFWFRfU0laRSph YnMocHJbMF0pO1xuXAorI2lmZGVmIENBQ0hFRF9TWU1CT0xfUkVBREVSXG5cCisgICAgICAgIHU4 YnVmIHNiID0gdThidWYodWludDY0X3Qoc2xpY2Vfc3RhdGUpICsgY29udGV4dF9vZmYgKyBnbF9M b2NhbEludm9jYXRpb25JRC54KTtcblwKKyAgICAgICAgc3RhdGVbZ2xfTG9jYWxJbnZvY2F0aW9u SUQueF0gPSBzYi52O1xuXAorICAgICAgICBiYXJyaWVyKCk7XG5cCisgICAgICAgIGlmIChnbF9M b2NhbEludm9jYXRpb25JRC54ID09IDApIHtcblwKK1xuXAorI2VuZGlmXG5cCitcblwKKyAgICAg ICAgICAgIGludCBkaWZmID0gZ2V0X2lzeW1ib2woc2MuYywgY29udGV4dF9vZmYpO1xuXAorICAg ICAgICAgICAgaWYgKHByWzBdIDwgMClcblwKKyAgICAgICAgICAgICAgICBkaWZmID0gLWRpZmY7 XG5cCitcblwKKyAgICAgICAgICAgIHVpbnQgdiA9IHplcm9fZXh0ZW5kKHByWzFdICsgZGlmZiwg Yml0cyk7XG5cCisgICAgICAgICAgICBpbWFnZVN0b3JlKGRlY1twXSwgc3AgKyBMQUREUihpdmVj Mih4LCB5KSksIHV2ZWM0KHYpKTtcblwKK1xuXAorI2lmZGVmIENBQ0hFRF9TWU1CT0xfUkVBREVS XG5cCisgICAgICAgIH1cblwKK1xuXAorICAgICAgICBiYXJyaWVyKCk7XG5cCisgICAgICAgIHNi LnYgPSBzdGF0ZVtnbF9Mb2NhbEludm9jYXRpb25JRC54XTtcblwKKyNlbmRpZlxuXAorICAgIH1c blwKK31cblwKK1xuXAorI2Vsc2UgLyogR09MT01CICovXG5cCitcblwKK3ZvaWQgZGVjb2RlX2xp bmUoaW5vdXQgU2xpY2VDb250ZXh0IHNjLCBpdmVjMiBzcCwgaW50IHcsXG5cCisgICAgICAgICAg ICAgICAgIGludCB5LCBpbnQgcCwgaW50IGJpdHMsIHVpbnQgc3RhdGVfb2ZmLFxuXAorICAgICAg ICAgICAgICAgICB1aW50OF90IHF1YW50X3RhYmxlX2lkeCwgaW5vdXQgaW50IHJ1bl9pbmRleClc blwKK3tcblwKKyNpZm5kZWYgUkdCXG5cCisgICAgaWYgKHAgPiAwICYmIHAgPCAzKSB7XG5cCisg ICAgICAgIHcgPj49IGNocm9tYV9zaGlmdC54O1xuXAorICAgICAgICBzcCA+Pj0gY2hyb21hX3No aWZ0O1xuXAorICAgIH1cblwKKyNlbmRpZlxuXAorXG5cCisgICAgaW50IHJ1bl9jb3VudCA9IDA7 XG5cCisgICAgaW50IHJ1bl9tb2RlICA9IDA7XG5cCitcblwKKyAgICBmb3IgKGludCB4ID0gMDsg eCA8IHc7IHgrKykge1xuXAorICAgICAgICBpdmVjMiBwb3MgPSBzcCArIGl2ZWMyKHgsIHkpO1xu XAorICAgICAgICBpbnQgZGlmZjtcblwKKyAgICAgICAgaXZlYzIgcHIgPSBnZXRfcHJlZChkZWNb cF0sIHNwLCBpdmVjMih4LCB5KSwgMCwgdyxcblwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICBxdWFudF90YWJsZV9pZHgsIGV4dGVuZF9sb29rdXBbcXVhbnRfdGFibGVfaWR4XSA+IDApO1xu XAorXG5cCisgICAgICAgIHVpbnQgY29udGV4dF9vZmYgPSBzdGF0ZV9vZmYgKyBWTENfU1RBVEVf U0laRSphYnMocHJbMF0pO1xuXAorICAgICAgICBWbGNTdGF0ZSBzYiA9IFZsY1N0YXRlKHVpbnQ2 NF90KHNsaWNlX3N0YXRlKSArIGNvbnRleHRfb2ZmKTtcblwKK1xuXAorICAgICAgICBpZiAocHJb MF0gPT0gMCAmJiBydW5fbW9kZSA9PSAwKVxuXAorICAgICAgICAgICAgcnVuX21vZGUgPSAxO1xu XAorXG5cCisgICAgICAgIGlmIChydW5fbW9kZSAhPSAwKSB7XG5cCisgICAgICAgICAgICBpZiAo cnVuX2NvdW50ID09IDAgJiYgcnVuX21vZGUgPT0gMSkge1xuXAorICAgICAgICAgICAgICAgIGlu dCB0bXBfaWR4ID0gaW50KGxvZzJfcnVuW3J1bl9pbmRleF0pO1xuXAorICAgICAgICAgICAgICAg IGlmIChnZXRfYml0KHNjLmdiKSkge1xuXAorICAgICAgICAgICAgICAgICAgICBydW5fY291bnQg PSAxIDw8IHRtcF9pZHg7XG5cCisgICAgICAgICAgICAgICAgICAgIGlmICh4ICsgcnVuX2NvdW50 IDw9IHcpXG5cCisgICAgICAgICAgICAgICAgICAgICAgICBydW5faW5kZXgrKztcblwKKyAgICAg ICAgICAgICAgICB9IGVsc2Uge1xuXAorICAgICAgICAgICAgICAgICAgICBpZiAodG1wX2lkeCAh PSAwKSB7XG5cCisgICAgICAgICAgICAgICAgICAgICAgICBydW5fY291bnQgPSBpbnQoZ2V0X2Jp dHMoc2MuZ2IsIHRtcF9pZHgpKTtcblwKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlXG5cCisg ICAgICAgICAgICAgICAgICAgICAgICBydW5fY291bnQgPSAwO1xuXAorXG5cCisgICAgICAgICAg ICAgICAgICAgIGlmIChydW5faW5kZXggIT0gMClcblwKKyAgICAgICAgICAgICAgICAgICAgICAg IHJ1bl9pbmRleC0tO1xuXAorICAgICAgICAgICAgICAgICAgICBydW5fbW9kZSA9IDI7XG5cCisg ICAgICAgICAgICAgICAgfVxuXAorICAgICAgICAgICAgfVxuXAorXG5cCisgICAgICAgICAgICBy dW5fY291bnQtLTtcblwKKyAgICAgICAgICAgIGlmIChydW5fY291bnQgPCAwKSB7XG5cCisgICAg ICAgICAgICAgICAgcnVuX21vZGUgID0gMDtcblwKKyAgICAgICAgICAgICAgICBydW5fY291bnQg PSAwO1xuXAorICAgICAgICAgICAgICAgIGRpZmYgPSByZWFkX3ZsY19zeW1ib2woc2MuZ2IsIHNi LCBiaXRzKTtcblwKKyAgICAgICAgICAgICAgICBpZiAoZGlmZiA+PSAwKVxuXAorICAgICAgICAg ICAgICAgICAgICBkaWZmKys7XG5cCisgICAgICAgICAgICB9IGVsc2Uge1xuXAorICAgICAgICAg ICAgICAgIGRpZmYgPSAwO1xuXAorICAgICAgICAgICAgfVxuXAorICAgICAgICB9IGVsc2Uge1xu XAorICAgICAgICAgICAgZGlmZiA9IHJlYWRfdmxjX3N5bWJvbChzYy5nYiwgc2IsIGJpdHMpO1xu XAorICAgICAgICB9XG5cCitcblwKKyAgICAgICAgaWYgKHByWzBdIDwgMClcblwKKyAgICAgICAg ICAgIGRpZmYgPSAtZGlmZjtcblwKK1xuXAorICAgICAgICB1aW50IHYgPSB6ZXJvX2V4dGVuZChw clsxXSArIGRpZmYsIGJpdHMpO1xuXAorICAgICAgICBpbWFnZVN0b3JlKGRlY1twXSwgc3AgKyBM QUREUihpdmVjMih4LCB5KSksIHV2ZWM0KHYpKTtcblwKKyAgICB9XG5cCit9XG5cCisjZW5kaWZc blwKK1xuXAorI2lmZGVmIFJHQlxuXAoraXZlYzQgdHJhbnNmb3JtX3NhbXBsZShpdmVjNCBwaXgs IGl2ZWMyIHJjdF9jb2VmKVxuXAore1xuXAorICAgIHBpeC5iIC09IHJjdF9vZmZzZXQ7XG5cCisg ICAgcGl4LnIgLT0gcmN0X29mZnNldDtcblwKKyAgICBwaXguZyAtPSAocGl4LmIqcmN0X2NvZWYu eSArIHBpeC5yKnJjdF9jb2VmLngpID4+IDI7XG5cCisgICAgcGl4LmIgKz0gcGl4Lmc7XG5cCisg ICAgcGl4LnIgKz0gcGl4Lmc7XG5cCisgICAgcmV0dXJuIGl2ZWM0KHBpeFtmbXRfbHV0WzBdXSwg cGl4W2ZtdF9sdXRbMV1dLFxuXAorICAgICAgICAgICAgICAgICBwaXhbZm10X2x1dFsyXV0sIHBp eFtmbXRfbHV0WzNdXSk7XG5cCit9XG5cCitcblwKK3ZvaWQgd3JpdGVvdXRfcmdiKGluIFNsaWNl Q29udGV4dCBzYywgaXZlYzIgc3AsIGludCB3LCBpbnQgeSwgYm9vbCBhcHBseV9yY3QpXG5cCit7 XG5cCisgICAgZm9yICh1aW50IHggPSBnbF9Mb2NhbEludm9jYXRpb25JRC54OyB4IDwgdzsgeCAr PSBnbF9Xb3JrR3JvdXBTaXplLngpIHtcblwKKyAgICAgICAgaXZlYzIgbHBvcyA9IHNwICsgTEFE RFIoaXZlYzIoeCwgeSkpO1xuXAorICAgICAgICBpdmVjMiBwb3MgPSBzYy5zbGljZV9wb3MgKyBp dmVjMih4LCB5KTtcblwKK1xuXAorICAgICAgICBpdmVjNCBwaXg7XG5cCisgICAgICAgIHBpeC5y ID0gaW50KGltYWdlTG9hZChkZWNbMl0sIGxwb3MpWzBdKTtcblwKKyAgICAgICAgcGl4LmcgPSBp bnQoaW1hZ2VMb2FkKGRlY1swXSwgbHBvcylbMF0pO1xuXAorICAgICAgICBwaXguYiA9IGludChp bWFnZUxvYWQoZGVjWzFdLCBscG9zKVswXSk7XG5cCisgICAgICAgIGlmICh0cmFuc3BhcmVuY3kg IT0gMClcblwKKyAgICAgICAgICAgIHBpeC5hID0gaW50KGltYWdlTG9hZChkZWNbM10sIGxwb3Mp WzBdKTtcblwKK1xuXAorICAgICAgICBpZiAoZXhwZWN0RVhUKGFwcGx5X3JjdCwgdHJ1ZSkpXG5c CisgICAgICAgICAgICBwaXggPSB0cmFuc2Zvcm1fc2FtcGxlKHBpeCwgc2Muc2xpY2VfcmN0X2Nv ZWYpO1xuXAorXG5cCisgICAgICAgIGltYWdlU3RvcmUoZHN0WzBdLCBwb3MsIHBpeCk7XG5cCisg ICAgICAgIGlmIChwbGFuYXJfcmdiICE9IDApIHtcblwKKyAgICAgICAgICAgIGZvciAoaW50IGkg PSAxOyBpIDwgY29sb3JfcGxhbmVzOyBpKyspXG5cCisgICAgICAgICAgICAgICAgaW1hZ2VTdG9y ZShkc3RbaV0sIHBvcywgaXZlYzQocGl4W2ldKSk7XG5cCisgICAgICAgIH1cblwKKyAgICB9XG5c Cit9XG5cCisjZW5kaWZcblwKK1xuXAordm9pZCBkZWNvZGVfc2xpY2UoaW5vdXQgU2xpY2VDb250 ZXh0IHNjLCBjb25zdCB1aW50IHNsaWNlX2lkeClcblwKK3tcblwKKyAgICBpbnQgdyA9IHNjLnNs aWNlX2RpbS54O1xuXAorICAgIGl2ZWMyIHNwID0gc2Muc2xpY2VfcG9zO1xuXAorXG5cCisjaWZu ZGVmIFJHQlxuXAorICAgIGludCBiaXRzID0gYml0c19wZXJfcmF3X3NhbXBsZTtcblwKKyNlbHNl XG5cCisgICAgaW50IGJpdHMgPSA5O1xuXAorICAgIGlmIChiaXRzICE9IDggfHwgc2Muc2xpY2Vf Y29kaW5nX21vZGUgIT0gMClcblwKKyAgICAgICAgYml0cyA9IGJpdHNfcGVyX3Jhd19zYW1wbGUg KyBpbnQoc2Muc2xpY2VfY29kaW5nX21vZGUgIT0gMSk7XG5cCitcblwKKyAgICBzcC55ID0gaW50 KGdsX1dvcmtHcm91cElELnkpKlJHQl9MSU5FQ0FDSEU7XG5cCisjZW5kaWZcblwKK1xuXAorICAg IC8qIFBDTSBjb2RpbmcgKi9cblwKKyNpZm5kZWYgR09MT01CXG5cCisgICAgaWYgKHNjLnNsaWNl X2NvZGluZ19tb2RlID09IDEpIHtcblwKKyNpZm5kZWYgUkdCXG5cCisgICAgICAgIGZvciAoaW50 IHAgPSAwOyBwIDwgcGxhbmVzOyBwKyspIHtcblwKKyAgICAgICAgICAgIGludCBoID0gc2Muc2xp Y2VfZGltLnk7XG5cCisgICAgICAgICAgICBpZiAocCA+IDAgJiYgcCA8IDMpXG5cCisgICAgICAg ICAgICAgICAgaCA+Pj0gY2hyb21hX3NoaWZ0Lnk7XG5cCitcblwKKyAgICAgICAgICAgIGZvciAo aW50IHkgPSAwOyB5IDwgaDsgeSsrKVxuXAorICAgICAgICAgICAgICAgIGRlY29kZV9saW5lX3Bj bShzYywgc3AsIHcsIHksIHAsIGJpdHMpO1xuXAorICAgICAgICB9XG5cCisjZWxzZVxuXAorICAg ICAgICBmb3IgKGludCB5ID0gMDsgeSA8IHNjLnNsaWNlX2RpbS55OyB5KyspIHtcblwKKyAgICAg ICAgICAgIGZvciAoaW50IHAgPSAwOyBwIDwgY29sb3JfcGxhbmVzOyBwKyspXG5cCisgICAgICAg ICAgICAgICAgZGVjb2RlX2xpbmVfcGNtKHNjLCBzcCwgdywgeSwgcCwgYml0cyk7XG5cCitcblwK KyAgICAgICAgICAgIHdyaXRlb3V0X3JnYihzYywgc3AsIHcsIHksIGZhbHNlKTtcblwKKyAgICAg ICAgfVxuXAorI2VuZGlmXG5cCisgICAgfSBlbHNlXG5cCitcblwKKyAgICAvKiBBcml0aG1ldGlj IGNvZGluZyAqL1xuXAorI2VuZGlmXG5cCisgICAge1xuXAorICAgICAgICB1OHZlYzQgcXVhbnRf dGFibGVfaWR4ID0gc2MucXVhbnRfdGFibGVfaWR4Lnh5eXo7XG5cCisgICAgICAgIHUzMnZlYzQg c2xpY2Vfc3RhdGVfb2ZmID0gKHNsaWNlX2lkeCpjb2RlY19wbGFuZXMgKyB1dmVjNCgwLCAxLCAx LCAyKSkqcGxhbmVfc3RhdGVfc2l6ZTtcblwKK1xuXAorI2lmbmRlZiBSR0JcblwKKyAgICAgICAg Zm9yIChpbnQgcCA9IDA7IHAgPCBwbGFuZXM7IHArKykge1xuXAorICAgICAgICAgICAgaW50IGgg PSBzYy5zbGljZV9kaW0ueTtcblwKKyAgICAgICAgICAgIGlmIChwID4gMCAmJiBwIDwgMylcblwK KyAgICAgICAgICAgICAgICBoID4+PSBjaHJvbWFfc2hpZnQueTtcblwKK1xuXAorICAgICAgICAg ICAgaW50IHJ1bl9pbmRleCA9IDA7XG5cCisgICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8 IGg7IHkrKylcblwKKyAgICAgICAgICAgICAgICBkZWNvZGVfbGluZShzYywgc3AsIHcsIHksIHAs IGJpdHMsXG5cCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xpY2Vfc3RhdGVfb2ZmW3Bd LCBxdWFudF90YWJsZV9pZHhbcF0sIHJ1bl9pbmRleCk7XG5cCisgICAgICAgIH1cblwKKyNlbHNl XG5cCisgICAgICAgIGludCBydW5faW5kZXggPSAwO1xuXAorICAgICAgICBmb3IgKGludCB5ID0g MDsgeSA8IHNjLnNsaWNlX2RpbS55OyB5KyspIHtcblwKKyAgICAgICAgICAgIGZvciAoaW50IHAg PSAwOyBwIDwgY29sb3JfcGxhbmVzOyBwKyspXG5cCisgICAgICAgICAgICAgICAgZGVjb2RlX2xp bmUoc2MsIHNwLCB3LCB5LCBwLCBiaXRzLFxuXAorICAgICAgICAgICAgICAgICAgICAgICAgICAg IHNsaWNlX3N0YXRlX29mZltwXSwgcXVhbnRfdGFibGVfaWR4W3BdLCBydW5faW5kZXgpO1xuXAor XG5cCisgICAgICAgICAgICB3cml0ZW91dF9yZ2Ioc2MsIHNwLCB3LCB5LCB0cnVlKTtcblwKKyAg ICAgICAgfVxuXAorI2VuZGlmXG5cCisgICAgfVxuXAorfVxuXAorXG5cCit2b2lkIG1haW4odm9p ZClcblwKK3tcblwKKyAgICBjb25zdCB1aW50IHNsaWNlX2lkeCA9IGdsX1dvcmtHcm91cElELnkq Z2xfTnVtV29ya0dyb3Vwcy54ICsgZ2xfV29ya0dyb3VwSUQueDtcblwKKyAgICBkZWNvZGVfc2xp Y2Uoc2xpY2VfY3R4W3NsaWNlX2lkeF0sIHNsaWNlX2lkeCk7XG5cCitcblwKKyAgICB1aW50MzJf dCBzdGF0dXMgPSBjb3JydXB0ID8gdWludDMyX3QoY29ycnVwdCkgOiBvdmVycmVhZDtcblwKKyAg ICBpZiAoc3RhdHVzICE9IDApXG5cCisgICAgICAgIHNsaWNlX3N0YXR1c1syKnNsaWNlX2lkeCAr IDFdID0gc3RhdHVzO1xuXAorfSI7CisKK2NvbnN0IGNoYXIgKmZmX3NvdXJjZV9wcm9yZXNfcmF3 X2NvbXAgID0gIlwKKyNkZWZpbmUgSTE2KHgpIChpbnQxNl90KHgpKVxuXAorXG5cCisjZGVmaW5l IENPTVBfSUQgKGdsX0xvY2FsSW52b2NhdGlvbklELnopXG5cCisjZGVmaW5lIEJMT0NLX0lEIChn bF9Mb2NhbEludm9jYXRpb25JRC55KVxuXAorI2RlZmluZSBST1dfSUQgKGdsX0xvY2FsSW52b2Nh dGlvbklELngpXG5cCitcblwKK0dldEJpdENvbnRleHQgZ2I7XG5cCitzaGFyZWQgZmxvYXQgYnRl bXBbZ2xfV29ya0dyb3VwU2l6ZS56XVsxNl1bNjRdID0geyB9O1xuXAorc2hhcmVkIGZsb2F0IGJs b2NrW2dsX1dvcmtHcm91cFNpemUuel1bMTZdWzY0XTtcblwKK1xuXAordm9pZCBpZGN0OF9ob3Jp eihjb25zdCB1aW50IHJvd19pZClcblwKK3tcblwKKyAgICBmbG9hdCB0MCwgdDEsIHQyLCB0Mywg dDQsIHQ1LCB0NiwgdDcsIHU4O1xuXAorICAgIGZsb2F0IHUwLCB1MSwgdTIsIHUzLCB1NCwgdTUs IHU2LCB1NztcblwKK1xuXAorICAgIC8qIElucHV0ICovXG5cCisgICAgdDAgPSBibG9ja1tDT01Q X0lEXVtCTE9DS19JRF1bOCpyb3dfaWQgKyAwXTtcblwKKyAgICB1NCA9IGJsb2NrW0NPTVBfSURd W0JMT0NLX0lEXVs4KnJvd19pZCArIDFdO1xuXAorICAgIHQyID0gYmxvY2tbQ09NUF9JRF1bQkxP Q0tfSURdWzgqcm93X2lkICsgMl07XG5cCisgICAgdTYgPSBibG9ja1tDT01QX0lEXVtCTE9DS19J RF1bOCpyb3dfaWQgKyAzXTtcblwKKyAgICB0MSA9IGJsb2NrW0NPTVBfSURdW0JMT0NLX0lEXVs4 KnJvd19pZCArIDRdO1xuXAorICAgIHU1ID0gYmxvY2tbQ09NUF9JRF1bQkxPQ0tfSURdWzgqcm93 X2lkICsgNV07XG5cCisgICAgdDMgPSBibG9ja1tDT01QX0lEXVtCTE9DS19JRF1bOCpyb3dfaWQg KyA2XTtcblwKKyAgICB1NyA9IGJsb2NrW0NPTVBfSURdW0JMT0NLX0lEXVs4KnJvd19pZCArIDdd O1xuXAorXG5cCisgICAgLyogRW1iZWRkZWQgc2NhbGVkIGludmVyc2UgNC1wb2ludCBUeXBlLUlJ IERDVCAqL1xuXAorICAgIHUwID0gdDAgKyB0MTtcblwKKyAgICB1MSA9IHQwIC0gdDE7XG5cCisg ICAgdTMgPSB0MiArIHQzO1xuXAorICAgIHUyID0gKHQyIC0gdDMpKigxLjQxNDIxMzU2MjM3MzA5 NTA0ODgwMTY4ODcyNDIwOTdmKSAtIHUzO1xuXAorICAgIHQwID0gdTAgKyB1MztcblwKKyAgICB0 MyA9IHUwIC0gdTM7XG5cCisgICAgdDEgPSB1MSArIHUyO1xuXAorICAgIHQyID0gdTEgLSB1Mjtc blwKK1xuXAorICAgIC8qIEVtYmVkZGVkIHNjYWxlZCBpbnZlcnNlIDQtcG9pbnQgVHlwZS1JViBE U1QgKi9cblwKKyAgICB0NSA9IHU1ICsgdTY7XG5cCisgICAgdDYgPSB1NSAtIHU2O1xuXAorICAg IHQ3ID0gdTQgKyB1NztcblwKKyAgICB0NCA9IHU0IC0gdTc7XG5cCisgICAgdTcgPSB0NyArIHQ1 O1xuXAorICAgIHU1ID0gKHQ3IC0gdDUpKigxLjQxNDIxMzU2MjM3MzA5NTA0ODgwMTY4ODcyNDIw OTdmKTtcblwKKyAgICB1OCA9ICh0NCArIHQ2KSooMS44NDc3NTkwNjUwMjI1NzM1MTIyNTYzNjYz Nzg3OTM2Zik7XG5cCisgICAgdTQgPSB1OCAtIHQ0KigxLjA4MjM5MjIwMDI5MjM5Mzk2ODc5OTQ0 NjQxMDczMjhmKTtcblwKKyAgICB1NiA9IHU4IC0gdDYqKDIuNjEzMTI1OTI5NzUyNzUzMDU1NzEz Mjg2MzQ2ODU0NGYpO1xuXAorICAgIHQ3ID0gdTc7XG5cCisgICAgdDYgPSB0NyAtIHU2O1xuXAor ICAgIHQ1ID0gdDYgKyB1NTtcblwKKyAgICB0NCA9IHQ1IC0gdTQ7XG5cCitcblwKKyAgICAvKiBC dXR0ZXJmbGllcyAqL1xuXAorICAgIHUwID0gdDAgKyB0NztcblwKKyAgICB1NyA9IHQwIC0gdDc7 XG5cCisgICAgdTYgPSB0MSArIHQ2O1xuXAorICAgIHUxID0gdDEgLSB0NjtcblwKKyAgICB1MiA9 IHQyICsgdDU7XG5cCisgICAgdTUgPSB0MiAtIHQ1O1xuXAorICAgIHU0ID0gdDMgKyB0NDtcblwK KyAgICB1MyA9IHQzIC0gdDQ7XG5cCitcblwKKyAgICAvKiBPdXRwdXQgKi9cblwKKyAgICBidGVt cFtDT01QX0lEXVtCTE9DS19JRF1bMCo4ICsgcm93X2lkXSA9IHUwO1xuXAorICAgIGJ0ZW1wW0NP TVBfSURdW0JMT0NLX0lEXVsxKjggKyByb3dfaWRdID0gdTE7XG5cCisgICAgYnRlbXBbQ09NUF9J RF1bQkxPQ0tfSURdWzIqOCArIHJvd19pZF0gPSB1MjtcblwKKyAgICBidGVtcFtDT01QX0lEXVtC TE9DS19JRF1bMyo4ICsgcm93X2lkXSA9IHUzO1xuXAorICAgIGJ0ZW1wW0NPTVBfSURdW0JMT0NL X0lEXVs0KjggKyByb3dfaWRdID0gdTQ7XG5cCisgICAgYnRlbXBbQ09NUF9JRF1bQkxPQ0tfSURd WzUqOCArIHJvd19pZF0gPSB1NTtcblwKKyAgICBidGVtcFtDT01QX0lEXVtCTE9DS19JRF1bNio4 ICsgcm93X2lkXSA9IHU2O1xuXAorICAgIGJ0ZW1wW0NPTVBfSURdW0JMT0NLX0lEXVs3KjggKyBy b3dfaWRdID0gdTc7XG5cCit9XG5cCitcblwKK3ZvaWQgaWRjdDhfdmVydChjb25zdCB1aW50IHJv d19pZClcblwKK3tcblwKKyAgICBmbG9hdCB0MCwgdDEsIHQyLCB0MywgdDQsIHQ1LCB0NiwgdDcs IHU4O1xuXAorICAgIGZsb2F0IHUwLCB1MSwgdTIsIHUzLCB1NCwgdTUsIHU2LCB1NztcblwKK1xu XAorICAgIC8qIElucHV0ICovXG5cCisgICAgdDAgPSBidGVtcFtDT01QX0lEXVtCTE9DS19JRF1b OCpyb3dfaWQgKyAwXSArIDAuNWY7IC8vIE5PVEVcblwKKyAgICB1NCA9IGJ0ZW1wW0NPTVBfSURd W0JMT0NLX0lEXVs4KnJvd19pZCArIDFdO1xuXAorICAgIHQyID0gYnRlbXBbQ09NUF9JRF1bQkxP Q0tfSURdWzgqcm93X2lkICsgMl07XG5cCisgICAgdTYgPSBidGVtcFtDT01QX0lEXVtCTE9DS19J RF1bOCpyb3dfaWQgKyAzXTtcblwKKyAgICB0MSA9IGJ0ZW1wW0NPTVBfSURdW0JMT0NLX0lEXVs4 KnJvd19pZCArIDRdO1xuXAorICAgIHU1ID0gYnRlbXBbQ09NUF9JRF1bQkxPQ0tfSURdWzgqcm93 X2lkICsgNV07XG5cCisgICAgdDMgPSBidGVtcFtDT01QX0lEXVtCTE9DS19JRF1bOCpyb3dfaWQg KyA2XTtcblwKKyAgICB1NyA9IGJ0ZW1wW0NPTVBfSURdW0JMT0NLX0lEXVs4KnJvd19pZCArIDdd O1xuXAorXG5cCisgICAgLyogRW1iZWRkZWQgc2NhbGVkIGludmVyc2UgNC1wb2ludCBUeXBlLUlJ IERDVCAqL1xuXAorICAgIHUwID0gdDAgKyB0MTtcblwKKyAgICB1MSA9IHQwIC0gdDE7XG5cCisg ICAgdTMgPSB0MiArIHQzO1xuXAorICAgIHUyID0gKHQyIC0gdDMpKigxLjQxNDIxMzU2MjM3MzA5 NTA0ODgwMTY4ODcyNDIwOTdmKSAtIHUzO1xuXAorICAgIHQwID0gdTAgKyB1MztcblwKKyAgICB0 MyA9IHUwIC0gdTM7XG5cCisgICAgdDEgPSB1MSArIHUyO1xuXAorICAgIHQyID0gdTEgLSB1Mjtc blwKK1xuXAorICAgIC8qIEVtYmVkZGVkIHNjYWxlZCBpbnZlcnNlIDQtcG9pbnQgVHlwZS1JViBE U1QgKi9cblwKKyAgICB0NSA9IHU1ICsgdTY7XG5cCisgICAgdDYgPSB1NSAtIHU2O1xuXAorICAg IHQ3ID0gdTQgKyB1NztcblwKKyAgICB0NCA9IHU0IC0gdTc7XG5cCisgICAgdTcgPSB0NyArIHQ1 O1xuXAorICAgIHU1ID0gKHQ3IC0gdDUpKigxLjQxNDIxMzU2MjM3MzA5NTA0ODgwMTY4ODcyNDIw OTdmKTtcblwKKyAgICB1OCA9ICh0NCArIHQ2KSooMS44NDc3NTkwNjUwMjI1NzM1MTIyNTYzNjYz Nzg3OTM2Zik7XG5cCisgICAgdTQgPSB1OCAtIHQ0KigxLjA4MjM5MjIwMDI5MjM5Mzk2ODc5OTQ0 NjQxMDczMjhmKTtcblwKKyAgICB1NiA9IHU4IC0gdDYqKDIuNjEzMTI1OTI5NzUyNzUzMDU1NzEz Mjg2MzQ2ODU0NGYpO1xuXAorICAgIHQ3ID0gdTc7XG5cCisgICAgdDYgPSB0NyAtIHU2O1xuXAor ICAgIHQ1ID0gdDYgKyB1NTtcblwKKyAgICB0NCA9IHQ1IC0gdTQ7XG5cCitcblwKKyAgICAvKiBC dXR0ZXJmbGllcyAqL1xuXAorICAgIHUwID0gdDAgKyB0NztcblwKKyAgICB1NyA9IHQwIC0gdDc7 XG5cCisgICAgdTYgPSB0MSArIHQ2O1xuXAorICAgIHUxID0gdDEgLSB0NjtcblwKKyAgICB1MiA9 IHQyICsgdDU7XG5cCisgICAgdTUgPSB0MiAtIHQ1O1xuXAorICAgIHU0ID0gdDMgKyB0NDtcblwK KyAgICB1MyA9IHQzIC0gdDQ7XG5cCitcblwKKyAgICAvKiBPdXRwdXQgKi9cblwKKyAgICBibG9j a1tDT01QX0lEXVtCTE9DS19JRF1bMCo4ICsgcm93X2lkXSA9IHUwO1xuXAorICAgIGJsb2NrW0NP TVBfSURdW0JMT0NLX0lEXVsxKjggKyByb3dfaWRdID0gdTE7XG5cCisgICAgYmxvY2tbQ09NUF9J RF1bQkxPQ0tfSURdWzIqOCArIHJvd19pZF0gPSB1MjtcblwKKyAgICBibG9ja1tDT01QX0lEXVtC TE9DS19JRF1bMyo4ICsgcm93X2lkXSA9IHUzO1xuXAorICAgIGJsb2NrW0NPTVBfSURdW0JMT0NL X0lEXVs0KjggKyByb3dfaWRdID0gdTQ7XG5cCisgICAgYmxvY2tbQ09NUF9JRF1bQkxPQ0tfSURd WzUqOCArIHJvd19pZF0gPSB1NTtcblwKKyAgICBibG9ja1tDT01QX0lEXVtCTE9DS19JRF1bNio4 ICsgcm93X2lkXSA9IHU2O1xuXAorICAgIGJsb2NrW0NPTVBfSURdW0JMT0NLX0lEXVs3KjggKyBy b3dfaWRdID0gdTc7XG5cCit9XG5cCitcblwKK2ludDE2X3QgZ2V0X3ZhbHVlKGludDE2X3QgY29k ZWJvb2spXG5cCit7XG5cCisgICAgY29uc3QgaW50MTZfdCBzd2l0Y2hfYml0cyA9IGNvZGVib29r ID4+IDg7XG5cCisgICAgY29uc3QgaW50MTZfdCByaWNlX29yZGVyICA9IGNvZGVib29rICYgSTE2 KDB4Zik7XG5cCisgICAgY29uc3QgaW50MTZfdCBleHBfb3JkZXIgICA9IChjb2RlYm9vayA+PiA0 KSAmIEkxNigweGYpO1xuXAorXG5cCisgICAgdWludDMyX3QgYiA9IHNob3dfYml0cyhnYiwgMzIp O1xuXAorICAgIGlmIChleHBlY3RFWFQoYiA9PSAwLCBmYWxzZSkpXG5cCisgICAgICAgIHJldHVy biBJMTYoMCk7XG5cCisgICAgaW50MTZfdCBxID0gSTE2KDMxKSAtIEkxNihmaW5kTVNCKGIpKTtc blwKK1xuXAorICAgIGlmICgoYiAmIDB4ODAwMDAwMDApICE9IDApIHtcblwKKyAgICAgICAgc2tp cF9iaXRzKGdiLCAxICsgcmljZV9vcmRlcik7XG5cCisgICAgICAgIHJldHVybiBJMTYoKGIgJiAw eDdGRkZGRkZGKSA+PiAoMzEgLSByaWNlX29yZGVyKSk7XG5cCisgICAgfVxuXAorXG5cCisgICAg aWYgKHEgPD0gc3dpdGNoX2JpdHMpIHtcblwKKyAgICAgICAgc2tpcF9iaXRzKGdiLCBxICsgcmlj ZV9vcmRlciArIDEpO1xuXAorICAgICAgICByZXR1cm4gSTE2KChxIDw8IHJpY2Vfb3JkZXIpICtc blwKKyAgICAgICAgICAgICAgICAgICAoKChiIDw8IChxICsgMSkpID4+IDEpID4+ICgzMSAtIHJp Y2Vfb3JkZXIpKSk7XG5cCisgICAgfVxuXAorXG5cCisgICAgaW50MTZfdCBiaXRzID0gZXhwX29y ZGVyICsgKHEgPDwgMSkgLSBzd2l0Y2hfYml0cztcblwKKyAgICBza2lwX2JpdHMoZ2IsIGJpdHMp O1xuXAorICAgIHJldHVybiBJMTYoKGIgPj4gKDMyIC0gYml0cykpICtcblwKKyAgICAgICAgICAg ICAgICgoc3dpdGNoX2JpdHMgKyAxKSA8PCByaWNlX29yZGVyKSAtXG5cCisgICAgICAgICAgICAg ICAoMSA8PCBleHBfb3JkZXIpKTtcblwKK31cblwKK1xuXAorI2RlZmluZSBUT0RDQ09ERUJPT0so eCkgKCh4ICsgMSkgPj4gMSlcblwKK1xuXAordm9pZCByZWFkX2RjX3ZhbHMoY29uc3QgdWludCBu Yl9ibG9ja3MpXG5cCit7XG5cCisgICAgaW50MTZfdCBkYywgZGNfYWRkO1xuXAorICAgIGludDE2 X3QgcHJldl9kYyA9IEkxNigwKSwgc2lnbiA9IEkxNigwKTtcblwKK1xuXAorICAgIC8qIFNwZWNp YWwgaGFuZGxpbmcgZm9yIGZpcnN0IGJsb2NrICovXG5cCisgICAgZGMgPSBnZXRfdmFsdWUoSTE2 KDcwMCkpO1xuXAorICAgIHByZXZfZGMgPSAoZGMgPj4gMSkgXiAtKGRjICYgSTE2KDEpKTtcblwK KyAgICBidGVtcFtDT01QX0lEXVswXVswXSA9IHByZXZfZGM7XG5cCitcblwKKyAgICBmb3IgKHVp bnQgbiA9IDE7IG4gPCBuYl9ibG9ja3M7IG4rKykge1xuXAorICAgICAgICBpZiAoZXhwZWN0RVhU KGxlZnRfYml0cyhnYikgPD0gMCwgZmFsc2UpKVxuXAorICAgICAgICAgICAgYnJlYWs7XG5cCitc blwKKyAgICAgICAgdWludDhfdCBkY19jb2RlYm9vaztcblwKKyAgICAgICAgaWYgKChuICYgMTUp ID09IDEpXG5cCisgICAgICAgICAgICBkY19jb2RlYm9vayA9IHVpbnQ4X3QoMTAwKTtcblwKKyAg ICAgICAgZWxzZVxuXAorICAgICAgICAgICAgZGNfY29kZWJvb2sgPSBkY19jYlttaW4oVE9EQ0NP REVCT09LKGRjKSwgMTMgLSAxKV07XG5cCitcblwKKyAgICAgICAgZGMgPSBnZXRfdmFsdWUoZGNf Y29kZWJvb2spO1xuXAorXG5cCisgICAgICAgIHNpZ24gPSBzaWduIF4gZGMgJiBpbnQxNl90KDEp O1xuXAorICAgICAgICBkY19hZGQgPSAoLXNpZ24gXiBJMTYoVE9EQ0NPREVCT09LKGRjKSkpICsg c2lnbjtcblwKKyAgICAgICAgc2lnbiA9IEkxNihkY19hZGQgPCAwKTtcblwKKyAgICAgICAgcHJl dl9kYyArPSBkY19hZGQ7XG5cCitcblwKKyAgICAgICAgYnRlbXBbQ09NUF9JRF1bbl1bMF0gPSBw cmV2X2RjO1xuXAorICAgIH1cblwKK31cblwKK1xuXAordm9pZCByZWFkX2FjX3ZhbHMoY29uc3Qg dWludCBuYl9ibG9ja3MpXG5cCit7XG5cCisgICAgY29uc3QgdWludCBuYl9jb2RlcyA9IG5iX2Js b2NrcyA8PCA2O1xuXAorICAgIGNvbnN0IHVpbnQgbG9nMl9uYl9ibG9ja3MgPSBmaW5kTVNCKG5i X2Jsb2Nrcyk7XG5cCisgICAgY29uc3QgdWludCBibG9ja19tYXNrID0gKDEgPDwgbG9nMl9uYl9i bG9ja3MpIC0gMTtcblwKK1xuXAorICAgIGludDE2X3QgYWMsIHJuLCBsbjtcblwKKyAgICBpbnQx Nl90IGFjX2NvZGVib29rID0gSTE2KDQ5KTtcblwKKyAgICBpbnQxNl90IHJuX2NvZGVib29rID0g STE2KCAwKTtcblwKKyAgICBpbnQxNl90IGxuX2NvZGVib29rID0gSTE2KDY2KTtcblwKKyAgICBp bnQxNl90IHNpZ247XG5cCisgICAgaW50MTZfdCB2YWw7XG5cCitcblwKKyAgICBmb3IgKHVpbnQg biA9IG5iX2Jsb2NrczsgbiA8PSBuYl9jb2RlczspIHtcblwKKyAgICAgICAgaWYgKGV4cGVjdEVY VChsZWZ0X2JpdHMoZ2IpIDw9IDAsIGZhbHNlKSlcblwKKyAgICAgICAgICAgIGJyZWFrO1xuXAor XG5cCisgICAgICAgIGxuID0gZ2V0X3ZhbHVlKGxuX2NvZGVib29rKTtcblwKKyAgICAgICAgZm9y ICh1aW50IGkgPSAwOyBpIDwgbG47IGkrKykge1xuXAorICAgICAgICAgICAgaWYgKGV4cGVjdEVY VChsZWZ0X2JpdHMoZ2IpIDw9IDAsIGZhbHNlKSlcblwKKyAgICAgICAgICAgICAgICBicmVhaztc blwKK1xuXAorICAgICAgICAgICAgaWYgKGV4cGVjdEVYVChuID49IG5iX2NvZGVzLCBmYWxzZSkp XG5cCisgICAgICAgICAgICAgICAgYnJlYWs7XG5cCitcblwKKyAgICAgICAgICAgIGFjID0gZ2V0 X3ZhbHVlKGFjX2NvZGVib29rKTtcblwKKyAgICAgICAgICAgIGFjX2NvZGVib29rID0gYWNfY2Jb bWluKGFjLCA5NSAtIDEpXTtcblwKKyAgICAgICAgICAgIHNpZ24gPSAtaW50MTZfdChnZXRfYml0 KGdiKSk7XG5cCitcblwKKyAgICAgICAgICAgIHZhbCA9ICgoYWMgKyBJMTYoMSkpIF4gc2lnbikg LSBzaWduO1xuXAorICAgICAgICAgICAgYnRlbXBbQ09NUF9JRF1bbiAmIGJsb2NrX21hc2tdW24g Pj4gbG9nMl9uYl9ibG9ja3NdID0gdmFsO1xuXAorXG5cCisgICAgICAgICAgICBuKys7XG5cCisg ICAgICAgIH1cblwKK1xuXAorICAgICAgICBpZiAoZXhwZWN0RVhUKG4gPj0gbmJfY29kZXMsIGZh bHNlKSlcblwKKyAgICAgICAgICAgIGJyZWFrO1xuXAorXG5cCisgICAgICAgIHJuID0gZ2V0X3Zh bHVlKHJuX2NvZGVib29rKTtcblwKKyAgICAgICAgcm5fY29kZWJvb2sgPSBybl9jYlttaW4ocm4s IDI4IC0gMSldO1xuXAorXG5cCisgICAgICAgIG4gKz0gcm4gKyAxO1xuXAorICAgICAgICBpZiAo ZXhwZWN0RVhUKG4gPj0gbmJfY29kZXMsIGZhbHNlKSlcblwKKyAgICAgICAgICAgIGJyZWFrO1xu XAorXG5cCisgICAgICAgIGlmIChleHBlY3RFWFQobGVmdF9iaXRzKGdiKSA8PSAwLCBmYWxzZSkp XG5cCisgICAgICAgICAgICBicmVhaztcblwKK1xuXAorICAgICAgICBhYyA9IGdldF92YWx1ZShh Y19jb2RlYm9vayk7XG5cCisgICAgICAgIHNpZ24gPSAtaW50MTZfdChnZXRfYml0KGdiKSk7XG5c CitcblwKKyAgICAgICAgdmFsID0gKChhYyArIEkxNigxKSkgXiBzaWduKSAtIHNpZ247XG5cCisg ICAgICAgIGJ0ZW1wW0NPTVBfSURdW24gJiBibG9ja19tYXNrXVtuID4+IGxvZzJfbmJfYmxvY2tz XSA9IHZhbDtcblwKK1xuXAorICAgICAgICBhY19jb2RlYm9vayA9IGFjX2NiW21pbihhYywgOTUg LSAxKV07XG5cCisgICAgICAgIGxuX2NvZGVib29rID0gbG5fY2JbbWluKGFjLCAxNSAtIDEpXTtc blwKK1xuXAorICAgICAgICBuKys7XG5cCisgICAgfVxuXAorfVxuXAorXG5cCit2b2lkIG1haW4o dm9pZClcblwKK3tcblwKKyAgICBjb25zdCB1aW50IHRpbGVfaWR4ID0gZ2xfV29ya0dyb3VwSUQu eSpnbF9OdW1Xb3JrR3JvdXBzLnggKyBnbF9Xb3JrR3JvdXBJRC54O1xuXAorICAgIFRpbGVEYXRh IHRkID0gdGlsZV9kYXRhW3RpbGVfaWR4XTtcblwKK1xuXAorICAgIGlmIChleHBlY3RFWFQodGQu cG9zLnggPj0gZnJhbWVfc2l6ZS54LCBmYWxzZSkpXG5cCisgICAgICAgIHJldHVybjtcblwKK1xu XAorICAgIHVpbnQ2NF90IHBrdF9vZmZzZXQgPSB1aW50NjRfdChwa3RfZGF0YSkgKyB0ZC5vZmZz ZXQ7XG5cCisgICAgdTh2ZWMyYnVmIGhkcl9kYXRhID0gdTh2ZWMyYnVmKHBrdF9vZmZzZXQpO1xu XAorICAgIGZsb2F0IHFzY2FsZSA9IGZsb2F0KHBhY2sxNihoZHJfZGF0YVswXS52Lnl4KSkgLyAy LjBmO1xuXAorXG5cCisgICAgaXZlYzQgc2l6ZSA9IGl2ZWM0KHRkLnNpemUsXG5cCisgICAgICAg ICAgICAgICAgICAgICAgIHBhY2sxNihoZHJfZGF0YVsyXS52Lnl4KSxcblwKKyAgICAgICAgICAg ICAgICAgICAgICAgcGFjazE2KGhkcl9kYXRhWzFdLnYueXgpLFxuXAorICAgICAgICAgICAgICAg ICAgICAgICBwYWNrMTYoaGRyX2RhdGFbM10udi55eCkpO1xuXAorICAgIHNpemVbMF0gPSBzaXpl WzBdIC0gc2l6ZVsxXSAtIHNpemVbMl0gLSBzaXplWzNdIC0gODtcblwKKyAgICBpZiAoZXhwZWN0 RVhUKHNpemVbMF0gPCAwLCBmYWxzZSkpXG5cCisgICAgICAgIHJldHVybjtcblwKK1xuXAorICAg IGNvbnN0IGl2ZWMyIG9mZnMgPSB0ZC5wb3MgKyBpdmVjMihDT01QX0lEICYgMSwgQ09NUF9JRCA+ PiAxKTtcblwKKyAgICBjb25zdCB1aW50IHcgPSBtaW4odGlsZV9zaXplLngsIGZyYW1lX3NpemUu eCAtIHRkLnBvcy54KSAvIDI7XG5cCisgICAgY29uc3QgdWludCBuYl9ibG9ja3MgPSB3IC8gODtc blwKK1xuXAorICAgIGNvbnN0IGl2ZWM0IGNvbXBfb2Zmc2V0ID0gaXZlYzQoc2l6ZVsyXSArIHNp emVbMV0gKyBzaXplWzNdLFxuXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c2l6ZVsyXSxcblwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsXG5cCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplWzJdICsgc2l6ZVsxXSk7XG5c CitcblwKKyAgICBpZiAoQkxPQ0tfSUQgPT0gMCAmJiBST1dfSUQgPT0gMCkge1xuXAorICAgICAg ICBpbml0X2dldF9iaXRzKGdiLCB1OGJ1Zihwa3Rfb2Zmc2V0ICsgOCArIGNvbXBfb2Zmc2V0W0NP TVBfSURdKSxcblwKKyAgICAgICAgICAgICAgICAgICAgICBzaXplW0NPTVBfSURdKTtcblwKKyAg ICAgICAgcmVhZF9kY192YWxzKG5iX2Jsb2Nrcyk7XG5cCisgICAgICAgIHJlYWRfYWNfdmFscyhu Yl9ibG9ja3MpO1xuXAorICAgIH1cblwKK1xuXAorICAgIGJhcnJpZXIoKTtcblwKK1xuXAorICAg IFtbdW5yb2xsXV1cblwKKyAgICBmb3IgKHVpbnQgaSA9IGdsX0xvY2FsSW52b2NhdGlvbklELng7 IGkgPCA2NDsgaSArPSBnbF9Xb3JrR3JvdXBTaXplLngpXG5cCisgICAgICAgIGJsb2NrW0NPTVBf SURdW0JMT0NLX0lEXVtpXSA9IChidGVtcFtDT01QX0lEXVtCTE9DS19JRF1bc2NhbltpXV0gLyAx NjM4NC4wKSAqXG5cCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmbG9h dChxbWF0W2ldKSAvIDI5NS4wKSAqXG5cCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGlkY3RfOHg4X3NjYWxlc1tpXSAqIHFzY2FsZTtcblwKK1xuXAorICAgIGJhcnJpZXIo KTtcblwKK1xuXAorI2lmZGVmIFBBUkFMTEVMX1JPV1NcblwKKyAgICBpZGN0OF9ob3JpeihST1df SUQpO1xuXAorXG5cCisgICAgYmFycmllcigpO1xuXAorXG5cCisgICAgaWRjdDhfdmVydChST1df SUQpO1xuXAorI2Vsc2VcblwKKyAgICBmb3IgKHVpbnQgaiA9IDA7IGogPCA4OyBqKyspXG5cCisg ICAgICAgIGlkY3Q4X2hvcml6KGopO1xuXAorXG5cCisgICAgYmFycmllcigpO1xuXAorXG5cCisg ICAgZm9yICh1aW50IGogPSAwOyBqIDwgODsgaisrKVxuXAorICAgICAgICBpZGN0OF92ZXJ0KGop O1xuXAorI2VuZGlmXG5cCitcblwKKyAgICBiYXJyaWVyKCk7XG5cCitcblwKKyAgICBbW3Vucm9s bF1dXG5cCisgICAgZm9yICh1aW50IGkgPSBnbF9Mb2NhbEludm9jYXRpb25JRC54OyBpIDwgNjQ7 IGkgKz0gZ2xfV29ya0dyb3VwU2l6ZS54KVxuXAorICAgICAgICAgaW1hZ2VTdG9yZShkc3QsXG5c CisgICAgICAgICAgICAgICAgICAgIG9mZnMgKyAyKml2ZWMyKEJMT0NLX0lEKjggKyAoaSAmIDcp LCBpID4+IDMpLFxuXAorICAgICAgICAgICAgICAgICAgICB2ZWM0KGJsb2NrW0NPTVBfSURdW0JM T0NLX0lEXVtpXSkpO1xuXAorfSI7Ci0tIAoyLjQ5LjEKCgpGcm9tIGM0YTIzZGNhNmNiYTk5OTZl ZjBiZTIxNDZiZjg2NjgyMmUwYTNhNmYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCkZyb206IEph bWFpa2ExIDxsdWthc3pjejE4QHdwLnBsPgpEYXRlOiBXZWQsIDMgU2VwIDIwMjUgMTM6NDA6NTEg KzAwMDAKU3ViamVjdDogW1BBVENIIDA4OC8xMThdIENoYW5naW5nIHZ1bGthbiBmaWxlIGRpcmVj dG9yeQoKLS0tCiBsaWJhdmNvZGVjL3Z1bGthbi92dWxrYW5fc291cmNlLmggfCAzNSArKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrCiAxIGZpbGUgY2hhbmdlZCwgMzUgaW5zZXJ0aW9ucygr KQogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2Y29kZWMvdnVsa2FuL3Z1bGthbl9zb3VyY2UuaAoK ZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvdnVsa2FuL3Z1bGthbl9zb3VyY2UuaCBiL2xpYmF2Y29k ZWMvdnVsa2FuL3Z1bGthbl9zb3VyY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwLi4zNTU0M2I2ZDYyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYXZjb2RlYy92dWxrYW4v dnVsa2FuX3NvdXJjZS5oCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFy dCBvZiBGRm1wZWcuCisgKgorICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUg TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBG Rm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5 IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGgg RkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9u LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEw LTEzMDEgVVNBCisgKi8KKworI2lmbmRlZiBBVkNPREVDX1ZVTEtBTl9TT1VSQ0VfSAorI2RlZmlu ZSBBVkNPREVDX1ZVTEtBTl9TT1VSQ0VfSAorCitleHRlcm4gY29uc3QgY2hhciAqZmZfc291cmNl X2NvbW1vbl9jb21wOworZXh0ZXJuIGNvbnN0IGNoYXIgKmZmX3NvdXJjZV9mZnYxX2NvbW1vbl9j b21wOworZXh0ZXJuIGNvbnN0IGNoYXIgKmZmX3NvdXJjZV9mZnYxX2RlY19jb21wOworZXh0ZXJu IGNvbnN0IGNoYXIgKmZmX3NvdXJjZV9mZnYxX2RlY19zZXR1cF9jb21wOworZXh0ZXJuIGNvbnN0 IGNoYXIgKmZmX3NvdXJjZV9mZnYxX2VuY19jb21wOworZXh0ZXJuIGNvbnN0IGNoYXIgKmZmX3Nv dXJjZV9mZnYxX2VuY19yY3RfY29tcDsKK2V4dGVybiBjb25zdCBjaGFyICpmZl9zb3VyY2VfZmZ2 MV9lbmNfc2V0dXBfY29tcDsKK2V4dGVybiBjb25zdCBjaGFyICpmZl9zb3VyY2VfZmZ2MV9yY3Rf Y29tcDsKK2V4dGVybiBjb25zdCBjaGFyICpmZl9zb3VyY2VfZmZ2MV9yY3Rfc2VhcmNoX2NvbXA7 CitleHRlcm4gY29uc3QgY2hhciAqZmZfc291cmNlX2ZmdjFfcmVzZXRfY29tcDsKK2V4dGVybiBj b25zdCBjaGFyICpmZl9zb3VyY2VfZmZ2MV92bGNfY29tcDsKK2V4dGVybiBjb25zdCBjaGFyICpm Zl9zb3VyY2VfcmFuZ2Vjb2Rlcl9jb21wOworCisjZW5kaWYgLyogQVZDT0RFQ19WVUxLQU5fU09V UkNFX0ggKi8KLS0gCjIuNDkuMQoKCkZyb20gM2M1MGQwMWM3MTgzNjc1NGQ0Zjg2MmZmOWJkMGFm MjQ0NTE3NTcwNSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKRnJvbTogSmFtYWlrYTEgPGx1a2Fz emN6MThAd3AucGw+CkRhdGU6IFdlZCwgMyBTZXAgMjAyNSAxMzo0MTozMyArMDAwMApTdWJqZWN0 OiBbUEFUQ0ggMDg5LzExOF0gQ2hhbmdpbmcgdnVsa2FuIGZpbGUgZGlyZWN0b3J5CgotLS0KIGxp YmF2Y29kZWMvdnVsa2FuX3ZpZGVvLmMgfCA0ODIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCA0ODIgZGVsZXRpb25zKC0pCiBkZWxldGUgbW9k ZSAxMDA2NDQgbGliYXZjb2RlYy92dWxrYW5fdmlkZW8uYwoKZGlmZiAtLWdpdCBhL2xpYmF2Y29k ZWMvdnVsa2FuX3ZpZGVvLmMgYi9saWJhdmNvZGVjL3Z1bGthbl92aWRlby5jCmRlbGV0ZWQgZmls ZSBtb2RlIDEwMDY0NAppbmRleCA4MTk5NDA0NjBmLi4wMDAwMDAwMDAwCi0tLSBhL2xpYmF2Y29k ZWMvdnVsa2FuX3ZpZGVvLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0ODIgKzAsMCBAQAotLyoKLSAq IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KLSAqCi0gKiBGRm1wZWcgaXMgZnJlZSBzb2Z0 d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIg dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFz IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZl cnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2 ZXJzaW9uLgotICoKLSAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0 IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2 ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2 ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExp Y2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdh cmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKLSAqLwotCi0jaW5jbHVkZSAibGliYXZ1dGlsL21l bS5oIgotI2luY2x1ZGUgInZ1bGthbl92aWRlby5oIgotCi0jZGVmaW5lIEFTUEVDVF8yUExBTkUg KFZLX0lNQUdFX0FTUEVDVF9QTEFORV8wX0JJVCB8IFZLX0lNQUdFX0FTUEVDVF9QTEFORV8xX0JJ VCkKLSNkZWZpbmUgQVNQRUNUXzNQTEFORSAoVktfSU1BR0VfQVNQRUNUX1BMQU5FXzBfQklUIHwg VktfSU1BR0VfQVNQRUNUX1BMQU5FXzFfQklUIHwgVktfSU1BR0VfQVNQRUNUX1BMQU5FXzJfQklU KQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IEZGVmtGb3JtYXRNYXBFbnRyeSB7Ci0gICAgVmtGb3Jt YXQgdmtmOwotICAgIGVudW0gQVZQaXhlbEZvcm1hdCBwaXhmbXQ7Ci0gICAgVmtJbWFnZUFzcGVj dEZsYWdzIGFzcGVjdDsKLX0gdmtfZm9ybWF0X21hcFtdID0gewotICAgIC8qIEdyYXkgZm9ybWF0 cyAqLwotICAgIHsgVktfRk9STUFUX1I4X1VOT1JNLCAgIEFWX1BJWF9GTVRfR1JBWTgsICAgVktf SU1BR0VfQVNQRUNUX0NPTE9SX0JJVCB9LAotICAgIHsgVktfRk9STUFUX1IxNl9VTk9STSwgIEFW X1BJWF9GTVRfR1JBWTE2LCAgVktfSU1BR0VfQVNQRUNUX0NPTE9SX0JJVCB9LAotICAgIHsgVktf Rk9STUFUX1IzMl9TRkxPQVQsIEFWX1BJWF9GTVRfR1JBWUYzMiwgVktfSU1BR0VfQVNQRUNUX0NP TE9SX0JJVCB9LAotCi0gICAgLyogUkdCIGZvcm1hdHMgKi8KLSAgICB7IFZLX0ZPUk1BVF9COEc4 UjhBOF9VTk9STSwgICAgICAgICAgIEFWX1BJWF9GTVRfQkdSQSwgICAgVktfSU1BR0VfQVNQRUNU X0NPTE9SX0JJVCB9LAotICAgIHsgVktfRk9STUFUX1I4RzhCOEE4X1VOT1JNLCAgICAgICAgICAg QVZfUElYX0ZNVF9SR0JBLCAgICBWS19JTUFHRV9BU1BFQ1RfQ09MT1JfQklUIH0sCi0gICAgeyBW S19GT1JNQVRfUjhHOEI4X1VOT1JNLCAgICAgICAgICAgICBBVl9QSVhfRk1UX1JHQjI0LCAgIFZL X0lNQUdFX0FTUEVDVF9DT0xPUl9CSVQgfSwKLSAgICB7IFZLX0ZPUk1BVF9COEc4UjhfVU5PUk0s ICAgICAgICAgICAgIEFWX1BJWF9GTVRfQkdSMjQsICAgVktfSU1BR0VfQVNQRUNUX0NPTE9SX0JJ VCB9LAotICAgIHsgVktfRk9STUFUX1IxNkcxNkIxNl9VTk9STSwgICAgICAgICAgQVZfUElYX0ZN VF9SR0I0OCwgICBWS19JTUFHRV9BU1BFQ1RfQ09MT1JfQklUIH0sCi0gICAgeyBWS19GT1JNQVRf UjE2RzE2QjE2QTE2X1VOT1JNLCAgICAgICBBVl9QSVhfRk1UX1JHQkE2NCwgIFZLX0lNQUdFX0FT UEVDVF9DT0xPUl9CSVQgfSwKLSAgICB7IFZLX0ZPUk1BVF9SNUc2QjVfVU5PUk1fUEFDSzE2LCAg ICAgIEFWX1BJWF9GTVRfUkdCNTY1LCAgVktfSU1BR0VfQVNQRUNUX0NPTE9SX0JJVCB9LAotICAg IHsgVktfRk9STUFUX0I1RzZSNV9VTk9STV9QQUNLMTYsICAgICAgQVZfUElYX0ZNVF9CR1I1NjUs ICBWS19JTUFHRV9BU1BFQ1RfQ09MT1JfQklUIH0sCi0gICAgeyBWS19GT1JNQVRfQjhHOFI4QThf VU5PUk0sICAgICAgICAgICBBVl9QSVhfRk1UX0JHUjAsICAgIFZLX0lNQUdFX0FTUEVDVF9DT0xP Ul9CSVQgfSwKLSAgICB7IFZLX0ZPUk1BVF9SOEc4QjhBOF9VTk9STSwgICAgICAgICAgIEFWX1BJ WF9GTVRfUkdCMCwgICAgVktfSU1BR0VfQVNQRUNUX0NPTE9SX0JJVCB9LAotICAgIHsgVktfRk9S TUFUX0EyUjEwRzEwQjEwX1VOT1JNX1BBQ0szMiwgQVZfUElYX0ZNVF9YMlJHQjEwLCBWS19JTUFH RV9BU1BFQ1RfQ09MT1JfQklUIH0sCi0KLSAgICAvKiBQbGFuYXIgUkdCICovCi0gICAgeyBWS19G T1JNQVRfUjhfVU5PUk0sICAgQVZfUElYX0ZNVF9HQlJBUCwgICAgVktfSU1BR0VfQVNQRUNUX0NP TE9SX0JJVCB9LAotICAgIHsgVktfRk9STUFUX1IxNl9VTk9STSwgIEFWX1BJWF9GTVRfR0JSQVAx NiwgIFZLX0lNQUdFX0FTUEVDVF9DT0xPUl9CSVQgfSwKLSAgICB7IFZLX0ZPUk1BVF9SMzJfU0ZM T0FULCBBVl9QSVhfRk1UX0dCUlBGMzIsICBWS19JTUFHRV9BU1BFQ1RfQ09MT1JfQklUIH0sCi0g ICAgeyBWS19GT1JNQVRfUjMyX1NGTE9BVCwgQVZfUElYX0ZNVF9HQlJBUEYzMiwgVktfSU1BR0Vf QVNQRUNUX0NPTE9SX0JJVCB9LAotCi0gICAgLyogVHdvLXBsYW5lIDQyMCBZVVYgYXQgOCwgMTAs IDEyIGFuZCAxNiBiaXRzICovCi0gICAgeyBWS19GT1JNQVRfRzhfQjhSOF8yUExBTkVfNDIwX1VO T1JNLCAgICAgICAgICAgICAgICAgIEFWX1BJWF9GTVRfTlYxMiwgQVNQRUNUXzJQTEFORSB9LAot ICAgIHsgVktfRk9STUFUX0cxMFg2X0IxMFg2UjEwWDZfMlBMQU5FXzQyMF9VTk9STV8zUEFDSzE2 LCBBVl9QSVhfRk1UX1AwMTAsIEFTUEVDVF8yUExBTkUgfSwKLSAgICB7IFZLX0ZPUk1BVF9HMTJY NF9CMTJYNFIxMlg0XzJQTEFORV80MjBfVU5PUk1fM1BBQ0sxNiwgQVZfUElYX0ZNVF9QMDEyLCBB U1BFQ1RfMlBMQU5FIH0sCi0gICAgeyBWS19GT1JNQVRfRzE2X0IxNlIxNl8yUExBTkVfNDIwX1VO T1JNLCAgICAgICAgICAgICAgIEFWX1BJWF9GTVRfUDAxNiwgQVNQRUNUXzJQTEFORSB9LAotCi0g ICAgLyogVHdvLXBsYW5lIDQyMiBZVVYgYXQgOCwgMTAgYW5kIDE2IGJpdHMgKi8KLSAgICB7IFZL X0ZPUk1BVF9HOF9COFI4XzJQTEFORV80MjJfVU5PUk0sICAgICAgICAgICAgICAgICAgQVZfUElY X0ZNVF9OVjE2LCBBU1BFQ1RfMlBMQU5FIH0sCi0gICAgeyBWS19GT1JNQVRfRzEwWDZfQjEwWDZS MTBYNl8yUExBTkVfNDIyX1VOT1JNXzNQQUNLMTYsIEFWX1BJWF9GTVRfUDIxMCwgQVNQRUNUXzJQ TEFORSB9LAotICAgIHsgVktfRk9STUFUX0cxMlg0X0IxMlg0UjEyWDRfMlBMQU5FXzQyMl9VTk9S TV8zUEFDSzE2LCBBVl9QSVhfRk1UX1AyMTIsIEFTUEVDVF8yUExBTkUgfSwKLSAgICB7IFZLX0ZP Uk1BVF9HMTZfQjE2UjE2XzJQTEFORV80MjJfVU5PUk0sICAgICAgICAgICAgICAgQVZfUElYX0ZN VF9QMjE2LCBBU1BFQ1RfMlBMQU5FIH0sCi0KLSAgICAvKiBUd28tcGxhbmUgNDQ0IFlVViBhdCA4 LCAxMCBhbmQgMTYgYml0cyAqLwotICAgIHsgVktfRk9STUFUX0c4X0I4UjhfMlBMQU5FXzQ0NF9V Tk9STSwgICAgICAgICAgICAgICAgICBBVl9QSVhfRk1UX05WMjQsIEFTUEVDVF8yUExBTkUgfSwK LSAgICB7IFZLX0ZPUk1BVF9HMTBYNl9CMTBYNlIxMFg2XzJQTEFORV80NDRfVU5PUk1fM1BBQ0sx NiwgQVZfUElYX0ZNVF9QNDEwLCBBU1BFQ1RfMlBMQU5FIH0sCi0gICAgeyBWS19GT1JNQVRfRzEy WDRfQjEyWDRSMTJYNF8yUExBTkVfNDQ0X1VOT1JNXzNQQUNLMTYsIEFWX1BJWF9GTVRfUDQxMiwg QVNQRUNUXzJQTEFORSB9LAotICAgIHsgVktfRk9STUFUX0cxNl9CMTZSMTZfMlBMQU5FXzQ0NF9V Tk9STSwgICAgICAgICAgICAgICBBVl9QSVhfRk1UX1A0MTYsIEFTUEVDVF8yUExBTkUgfSwKLQot ICAgIC8qIFRocmVlLXBsYW5lIDQyMCwgNDIyLCA0NDQgYXQgOCwgMTAsIDEyIGFuZCAxNiBiaXRz ICovCi0gICAgeyBWS19GT1JNQVRfRzhfQjhfUjhfM1BMQU5FXzQyMF9VTk9STSwgICAgQVZfUElY X0ZNVF9ZVVY0MjBQLCAgIEFTUEVDVF8zUExBTkUgfSwKLSAgICB7IFZLX0ZPUk1BVF9HMTZfQjE2 X1IxNl8zUExBTkVfNDIwX1VOT1JNLCBBVl9QSVhfRk1UX1lVVjQyMFAxMCwgQVNQRUNUXzNQTEFO RSB9LAotICAgIHsgVktfRk9STUFUX0cxNl9CMTZfUjE2XzNQTEFORV80MjBfVU5PUk0sIEFWX1BJ WF9GTVRfWVVWNDIwUDEyLCBBU1BFQ1RfM1BMQU5FIH0sCi0gICAgeyBWS19GT1JNQVRfRzE2X0Ix Nl9SMTZfM1BMQU5FXzQyMF9VTk9STSwgQVZfUElYX0ZNVF9ZVVY0MjBQMTYsIEFTUEVDVF8zUExB TkUgfSwKLSAgICB7IFZLX0ZPUk1BVF9HOF9COF9SOF8zUExBTkVfNDIyX1VOT1JNLCAgICBBVl9Q SVhfRk1UX1lVVjQyMlAsICAgQVNQRUNUXzNQTEFORSB9LAotICAgIHsgVktfRk9STUFUX0cxNl9C MTZfUjE2XzNQTEFORV80MjJfVU5PUk0sIEFWX1BJWF9GTVRfWVVWNDIyUDEwLCBBU1BFQ1RfM1BM QU5FIH0sCi0gICAgeyBWS19GT1JNQVRfRzE2X0IxNl9SMTZfM1BMQU5FXzQyMl9VTk9STSwgQVZf UElYX0ZNVF9ZVVY0MjJQMTIsIEFTUEVDVF8zUExBTkUgfSwKLSAgICB7IFZLX0ZPUk1BVF9HMTZf QjE2X1IxNl8zUExBTkVfNDIyX1VOT1JNLCBBVl9QSVhfRk1UX1lVVjQyMlAxNiwgQVNQRUNUXzNQ TEFORSB9LAotICAgIHsgVktfRk9STUFUX0c4X0I4X1I4XzNQTEFORV80NDRfVU5PUk0sICAgIEFW X1BJWF9GTVRfWVVWNDQ0UCwgICBBU1BFQ1RfM1BMQU5FIH0sCi0gICAgeyBWS19GT1JNQVRfRzE2 X0IxNl9SMTZfM1BMQU5FXzQ0NF9VTk9STSwgQVZfUElYX0ZNVF9ZVVY0NDRQMTAsIEFTUEVDVF8z UExBTkUgfSwKLSAgICB7IFZLX0ZPUk1BVF9HMTZfQjE2X1IxNl8zUExBTkVfNDQ0X1VOT1JNLCBB Vl9QSVhfRk1UX1lVVjQ0NFAxMiwgQVNQRUNUXzNQTEFORSB9LAotICAgIHsgVktfRk9STUFUX0cx Nl9CMTZfUjE2XzNQTEFORV80NDRfVU5PUk0sIEFWX1BJWF9GTVRfWVVWNDQ0UDE2LCBBU1BFQ1Rf M1BMQU5FIH0sCi0KLSAgICAvKiBTaW5nbGUgcGxhbmUgNDIyIGF0IDgsIDEwLCAxMiBhbmQgMTYg Yml0cyAqLwotICAgIHsgVktfRk9STUFUX0c4QjhHOFI4XzQyMl9VTk9STSwgICAgICAgICAgICAg ICAgICAgICBBVl9QSVhfRk1UX1lVWVY0MjIsIFZLX0lNQUdFX0FTUEVDVF9DT0xPUl9CSVQgfSwK LSAgICB7IFZLX0ZPUk1BVF9COEc4UjhHOF80MjJfVU5PUk0sICAgICAgICAgICAgICAgICAgICAg QVZfUElYX0ZNVF9VWVZZNDIyLCBWS19JTUFHRV9BU1BFQ1RfQ09MT1JfQklUIH0sCi0gICAgeyBW S19GT1JNQVRfRzEwWDZCMTBYNkcxMFg2UjEwWDZfNDIyX1VOT1JNXzRQQUNLMTYsIEFWX1BJWF9G TVRfWTIxMCwgICAgVktfSU1BR0VfQVNQRUNUX0NPTE9SX0JJVCB9LAotICAgIHsgVktfRk9STUFU X0cxMlg0QjEyWDRHMTJYNFIxMlg0XzQyMl9VTk9STV80UEFDSzE2LCBBVl9QSVhfRk1UX1kyMTIs ICAgIFZLX0lNQUdFX0FTUEVDVF9DT0xPUl9CSVQgfSwKLSAgICB7IFZLX0ZPUk1BVF9HMTZCMTZH MTZSMTZfNDIyX1VOT1JNLCAgICAgICAgICAgICAgICAgQVZfUElYX0ZNVF9ZMjE2LCAgICBWS19J TUFHRV9BU1BFQ1RfQ09MT1JfQklUIH0sCi0KLSAgICAvKiBTaW5nbGUgcGxhbmUgNDQ0IGF0IDEw IGFuZCAxMiBiaXRzICovCi0gICAgeyBWS19GT1JNQVRfQTJSMTBHMTBCMTBfVU5PUk1fUEFDSzMy LCAgICAgICAgICAgICAgIEFWX1BJWF9GTVRfWFYzMCwgICAgVktfSU1BR0VfQVNQRUNUX0NPTE9S X0JJVCB9LAotICAgIHsgVktfRk9STUFUX1IxMlg0RzEyWDRCMTJYNEExMlg0X1VOT1JNXzRQQUNL MTYsICAgICBBVl9QSVhfRk1UX1hWMzYsICAgIFZLX0lNQUdFX0FTUEVDVF9DT0xPUl9CSVQgfSwK LX07Ci1zdGF0aWMgY29uc3QgaW50IG5iX3ZrX2Zvcm1hdF9tYXAgPSBGRl9BUlJBWV9FTEVNUyh2 a19mb3JtYXRfbWFwKTsKLQotZW51bSBBVlBpeGVsRm9ybWF0IGZmX3ZrX3BpeF9mbXRfZnJvbV92 a2ZtdChWa0Zvcm1hdCB2a2YpCi17Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuYl92a19mb3Jt YXRfbWFwOyBpKyspCi0gICAgICAgIGlmICh2a19mb3JtYXRfbWFwW2ldLnZrZiA9PSB2a2YpCi0g ICAgICAgICAgICByZXR1cm4gdmtfZm9ybWF0X21hcFtpXS5waXhmbXQ7Ci0gICAgcmV0dXJuIEFW X1BJWF9GTVRfTk9ORTsKLX0KLQotVmtJbWFnZUFzcGVjdEZsYWdzIGZmX3ZrX2FzcGVjdF9iaXRz X2Zyb21fdmtmbXQoVmtGb3JtYXQgdmtmKQotewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmJf dmtfZm9ybWF0X21hcDsgaSsrKQotICAgICAgICBpZiAodmtfZm9ybWF0X21hcFtpXS52a2YgPT0g dmtmKQotICAgICAgICAgICAgcmV0dXJuIHZrX2Zvcm1hdF9tYXBbaV0uYXNwZWN0OwotICAgIHJl dHVybiBWS19JTUFHRV9BU1BFQ1RfTk9ORTsKLX0KLQotVmtWaWRlb0Nocm9tYVN1YnNhbXBsaW5n RmxhZ0JpdHNLSFIgZmZfdmtfc3Vic2FtcGxpbmdfZnJvbV9hdl9kZXNjKGNvbnN0IEFWUGl4Rm10 RGVzY3JpcHRvciAqZGVzYykKLXsKLSAgICBpZiAoZGVzYy0+bmJfY29tcG9uZW50cyA9PSAxKQot ICAgICAgICByZXR1cm4gVktfVklERU9fQ0hST01BX1NVQlNBTVBMSU5HX01PTk9DSFJPTUVfQklU X0tIUjsKLSAgICBlbHNlIGlmICghZGVzYy0+bG9nMl9jaHJvbWFfdyAmJiAhZGVzYy0+bG9nMl9j aHJvbWFfaCkKLSAgICAgICAgcmV0dXJuIFZLX1ZJREVPX0NIUk9NQV9TVUJTQU1QTElOR180NDRf QklUX0tIUjsKLSAgICBlbHNlIGlmICghZGVzYy0+bG9nMl9jaHJvbWFfdyAmJiBkZXNjLT5sb2cy X2Nocm9tYV9oID09IDEpCi0gICAgICAgIHJldHVybiBWS19WSURFT19DSFJPTUFfU1VCU0FNUExJ TkdfNDIyX0JJVF9LSFI7Ci0gICAgZWxzZSBpZiAoZGVzYy0+bG9nMl9jaHJvbWFfdyA9PSAxICYm IGRlc2MtPmxvZzJfY2hyb21hX2ggPT0gMSkKLSAgICAgICAgcmV0dXJuIFZLX1ZJREVPX0NIUk9N QV9TVUJTQU1QTElOR180MjBfQklUX0tIUjsKLSAgICByZXR1cm4gVktfVklERU9fQ0hST01BX1NV QlNBTVBMSU5HX0lOVkFMSURfS0hSOwotfQotCi1Wa1ZpZGVvQ29tcG9uZW50Qml0RGVwdGhGbGFn Qml0c0tIUiBmZl92a19kZXB0aF9mcm9tX2F2X2RlcHRoKGludCBkZXB0aCkKLXsKLSAgICBzd2l0 Y2ggKGRlcHRoKSB7Ci0gICAgY2FzZSAgODogcmV0dXJuIFZLX1ZJREVPX0NPTVBPTkVOVF9CSVRf REVQVEhfOF9CSVRfS0hSOwotICAgIGNhc2UgMTA6IHJldHVybiBWS19WSURFT19DT01QT05FTlRf QklUX0RFUFRIXzEwX0JJVF9LSFI7Ci0gICAgY2FzZSAxMjogcmV0dXJuIFZLX1ZJREVPX0NPTVBP TkVOVF9CSVRfREVQVEhfMTJfQklUX0tIUjsKLSAgICBkZWZhdWx0OiBicmVhazsKLSAgICB9Ci0g ICAgcmV0dXJuIFZLX1ZJREVPX0NPTVBPTkVOVF9CSVRfREVQVEhfSU5WQUxJRF9LSFI7Ci19Ci0K LWludCBmZl92a19oMjY0X2xldmVsX3RvX2F2KFN0ZFZpZGVvSDI2NExldmVsSWRjIGxldmVsKQot ewotICAgIHN3aXRjaCAobGV2ZWwpIHsKLSAgICBjYXNlIFNURF9WSURFT19IMjY0X0xFVkVMX0lE Q18xXzA6IHJldHVybiAxMDsKLSAgICBjYXNlIFNURF9WSURFT19IMjY0X0xFVkVMX0lEQ18xXzE6 IHJldHVybiAxMTsKLSAgICBjYXNlIFNURF9WSURFT19IMjY0X0xFVkVMX0lEQ18xXzI6IHJldHVy biAxMjsKLSAgICBjYXNlIFNURF9WSURFT19IMjY0X0xFVkVMX0lEQ18xXzM6IHJldHVybiAxMzsK LSAgICBjYXNlIFNURF9WSURFT19IMjY0X0xFVkVMX0lEQ18yXzA6IHJldHVybiAyMDsKLSAgICBj YXNlIFNURF9WSURFT19IMjY0X0xFVkVMX0lEQ18yXzE6IHJldHVybiAyMTsKLSAgICBjYXNlIFNU RF9WSURFT19IMjY0X0xFVkVMX0lEQ18yXzI6IHJldHVybiAyMjsKLSAgICBjYXNlIFNURF9WSURF T19IMjY0X0xFVkVMX0lEQ18zXzA6IHJldHVybiAzMDsKLSAgICBjYXNlIFNURF9WSURFT19IMjY0 X0xFVkVMX0lEQ18zXzE6IHJldHVybiAzMTsKLSAgICBjYXNlIFNURF9WSURFT19IMjY0X0xFVkVM X0lEQ18zXzI6IHJldHVybiAzMjsKLSAgICBjYXNlIFNURF9WSURFT19IMjY0X0xFVkVMX0lEQ180 XzA6IHJldHVybiA0MDsKLSAgICBjYXNlIFNURF9WSURFT19IMjY0X0xFVkVMX0lEQ180XzE6IHJl dHVybiA0MTsKLSAgICBjYXNlIFNURF9WSURFT19IMjY0X0xFVkVMX0lEQ180XzI6IHJldHVybiA0 MjsKLSAgICBjYXNlIFNURF9WSURFT19IMjY0X0xFVkVMX0lEQ181XzA6IHJldHVybiA1MDsKLSAg ICBjYXNlIFNURF9WSURFT19IMjY0X0xFVkVMX0lEQ181XzE6IHJldHVybiA1MTsKLSAgICBjYXNl IFNURF9WSURFT19IMjY0X0xFVkVMX0lEQ181XzI6IHJldHVybiA1MjsKLSAgICBjYXNlIFNURF9W SURFT19IMjY0X0xFVkVMX0lEQ182XzA6IHJldHVybiA2MDsKLSAgICBjYXNlIFNURF9WSURFT19I MjY0X0xFVkVMX0lEQ182XzE6IHJldHVybiA2MTsKLSAgICBkZWZhdWx0OgotICAgIGNhc2UgU1RE X1ZJREVPX0gyNjRfTEVWRUxfSURDXzZfMjogcmV0dXJuIDYyOwotICAgIH0KLX0KLQotU3RkVmlk ZW9IMjY0TGV2ZWxJZGMgZmZfdmtfaDI2NF9sZXZlbF90b192ayhpbnQgbGV2ZWxfaWRjKQotewot ICAgIHN3aXRjaCAobGV2ZWxfaWRjKSB7Ci0gICAgY2FzZSAxMDogcmV0dXJuIFNURF9WSURFT19I MjY0X0xFVkVMX0lEQ18xXzA7Ci0gICAgY2FzZSAxMTogcmV0dXJuIFNURF9WSURFT19IMjY0X0xF VkVMX0lEQ18xXzE7Ci0gICAgY2FzZSAxMjogcmV0dXJuIFNURF9WSURFT19IMjY0X0xFVkVMX0lE Q18xXzI7Ci0gICAgY2FzZSAxMzogcmV0dXJuIFNURF9WSURFT19IMjY0X0xFVkVMX0lEQ18xXzM7 Ci0gICAgY2FzZSAyMDogcmV0dXJuIFNURF9WSURFT19IMjY0X0xFVkVMX0lEQ18yXzA7Ci0gICAg Y2FzZSAyMTogcmV0dXJuIFNURF9WSURFT19IMjY0X0xFVkVMX0lEQ18yXzE7Ci0gICAgY2FzZSAy MjogcmV0dXJuIFNURF9WSURFT19IMjY0X0xFVkVMX0lEQ18yXzI7Ci0gICAgY2FzZSAzMDogcmV0 dXJuIFNURF9WSURFT19IMjY0X0xFVkVMX0lEQ18zXzA7Ci0gICAgY2FzZSAzMTogcmV0dXJuIFNU RF9WSURFT19IMjY0X0xFVkVMX0lEQ18zXzE7Ci0gICAgY2FzZSAzMjogcmV0dXJuIFNURF9WSURF T19IMjY0X0xFVkVMX0lEQ18zXzI7Ci0gICAgY2FzZSA0MDogcmV0dXJuIFNURF9WSURFT19IMjY0 X0xFVkVMX0lEQ180XzA7Ci0gICAgY2FzZSA0MTogcmV0dXJuIFNURF9WSURFT19IMjY0X0xFVkVM X0lEQ180XzE7Ci0gICAgY2FzZSA0MjogcmV0dXJuIFNURF9WSURFT19IMjY0X0xFVkVMX0lEQ180 XzI7Ci0gICAgY2FzZSA1MDogcmV0dXJuIFNURF9WSURFT19IMjY0X0xFVkVMX0lEQ181XzA7Ci0g ICAgY2FzZSA1MTogcmV0dXJuIFNURF9WSURFT19IMjY0X0xFVkVMX0lEQ181XzE7Ci0gICAgY2Fz ZSA1MjogcmV0dXJuIFNURF9WSURFT19IMjY0X0xFVkVMX0lEQ181XzI7Ci0gICAgY2FzZSA2MDog cmV0dXJuIFNURF9WSURFT19IMjY0X0xFVkVMX0lEQ182XzA7Ci0gICAgY2FzZSA2MTogcmV0dXJu IFNURF9WSURFT19IMjY0X0xFVkVMX0lEQ182XzE7Ci0gICAgZGVmYXVsdDoKLSAgICBjYXNlIDYy OiByZXR1cm4gU1REX1ZJREVPX0gyNjRfTEVWRUxfSURDXzZfMjsKLSAgICB9Ci19Ci0KLWludCBm Zl92a19oMjY1X2xldmVsX3RvX2F2KFN0ZFZpZGVvSDI2NUxldmVsSWRjIGxldmVsKQotewotICAg IHN3aXRjaCAobGV2ZWwpIHsKLSAgICBjYXNlIFNURF9WSURFT19IMjY1X0xFVkVMX0lEQ18xXzA6 IHJldHVybiAxMDsKLSAgICBjYXNlIFNURF9WSURFT19IMjY1X0xFVkVMX0lEQ18yXzA6IHJldHVy biAyMDsKLSAgICBjYXNlIFNURF9WSURFT19IMjY1X0xFVkVMX0lEQ18yXzE6IHJldHVybiAyMTsK LSAgICBjYXNlIFNURF9WSURFT19IMjY1X0xFVkVMX0lEQ18zXzA6IHJldHVybiAzMDsKLSAgICBj YXNlIFNURF9WSURFT19IMjY1X0xFVkVMX0lEQ18zXzE6IHJldHVybiAzMTsKLSAgICBjYXNlIFNU RF9WSURFT19IMjY1X0xFVkVMX0lEQ180XzA6IHJldHVybiA0MDsKLSAgICBjYXNlIFNURF9WSURF T19IMjY1X0xFVkVMX0lEQ180XzE6IHJldHVybiA0MTsKLSAgICBjYXNlIFNURF9WSURFT19IMjY1 X0xFVkVMX0lEQ181XzA6IHJldHVybiA1MDsKLSAgICBjYXNlIFNURF9WSURFT19IMjY1X0xFVkVM X0lEQ181XzE6IHJldHVybiA1MTsKLSAgICBjYXNlIFNURF9WSURFT19IMjY1X0xFVkVMX0lEQ182 XzA6IHJldHVybiA2MDsKLSAgICBjYXNlIFNURF9WSURFT19IMjY1X0xFVkVMX0lEQ182XzE6IHJl dHVybiA2MTsKLSAgICBkZWZhdWx0OgotICAgIGNhc2UgU1REX1ZJREVPX0gyNjVfTEVWRUxfSURD XzZfMjogcmV0dXJuIDYyOwotICAgIH0KLX0KLQotU3RkVmlkZW9IMjY1TGV2ZWxJZGMgZmZfdmtf aDI2NV9sZXZlbF90b192ayhpbnQgbGV2ZWxfaWRjKQotewotICAgIHN3aXRjaCAobGV2ZWxfaWRj KSB7Ci0gICAgY2FzZSAxMDogcmV0dXJuIFNURF9WSURFT19IMjY1X0xFVkVMX0lEQ18xXzA7Ci0g ICAgY2FzZSAyMDogcmV0dXJuIFNURF9WSURFT19IMjY1X0xFVkVMX0lEQ18yXzA7Ci0gICAgY2Fz ZSAyMTogcmV0dXJuIFNURF9WSURFT19IMjY1X0xFVkVMX0lEQ18yXzE7Ci0gICAgY2FzZSAzMDog cmV0dXJuIFNURF9WSURFT19IMjY1X0xFVkVMX0lEQ18zXzA7Ci0gICAgY2FzZSAzMTogcmV0dXJu IFNURF9WSURFT19IMjY1X0xFVkVMX0lEQ18zXzE7Ci0gICAgY2FzZSA0MDogcmV0dXJuIFNURF9W SURFT19IMjY1X0xFVkVMX0lEQ180XzA7Ci0gICAgY2FzZSA0MTogcmV0dXJuIFNURF9WSURFT19I MjY1X0xFVkVMX0lEQ180XzE7Ci0gICAgY2FzZSA1MDogcmV0dXJuIFNURF9WSURFT19IMjY1X0xF VkVMX0lEQ181XzA7Ci0gICAgY2FzZSA1MTogcmV0dXJuIFNURF9WSURFT19IMjY1X0xFVkVMX0lE Q181XzE7Ci0gICAgY2FzZSA2MDogcmV0dXJuIFNURF9WSURFT19IMjY1X0xFVkVMX0lEQ182XzA7 Ci0gICAgY2FzZSA2MTogcmV0dXJuIFNURF9WSURFT19IMjY1X0xFVkVMX0lEQ182XzE7Ci0gICAg ZGVmYXVsdDoKLSAgICBjYXNlIDYyOiByZXR1cm4gU1REX1ZJREVPX0gyNjVfTEVWRUxfSURDXzZf MjsKLSAgICB9Ci19Ci0KLVN0ZFZpZGVvQVYxTGV2ZWwgZmZfdmtfYXYxX2xldmVsX3RvX3ZrKGlu dCBsZXZlbCkKLXsKLSAgICBzd2l0Y2ggKGxldmVsKSB7Ci0gICAgY2FzZSAyMDogcmV0dXJuIFNU RF9WSURFT19BVjFfTEVWRUxfMl8wOwotICAgIGNhc2UgMjE6IHJldHVybiBTVERfVklERU9fQVYx X0xFVkVMXzJfMTsKLSAgICBjYXNlIDIyOiByZXR1cm4gU1REX1ZJREVPX0FWMV9MRVZFTF8yXzI7 Ci0gICAgY2FzZSAyMzogcmV0dXJuIFNURF9WSURFT19BVjFfTEVWRUxfMl8zOwotICAgIGNhc2Ug MzA6IHJldHVybiBTVERfVklERU9fQVYxX0xFVkVMXzNfMDsKLSAgICBjYXNlIDMxOiByZXR1cm4g U1REX1ZJREVPX0FWMV9MRVZFTF8zXzE7Ci0gICAgY2FzZSAzMjogcmV0dXJuIFNURF9WSURFT19B VjFfTEVWRUxfM18yOwotICAgIGNhc2UgMzM6IHJldHVybiBTVERfVklERU9fQVYxX0xFVkVMXzNf MzsKLSAgICBjYXNlIDQwOiByZXR1cm4gU1REX1ZJREVPX0FWMV9MRVZFTF80XzA7Ci0gICAgY2Fz ZSA0MTogcmV0dXJuIFNURF9WSURFT19BVjFfTEVWRUxfNF8xOwotICAgIGNhc2UgNDI6IHJldHVy biBTVERfVklERU9fQVYxX0xFVkVMXzRfMjsKLSAgICBjYXNlIDQzOiByZXR1cm4gU1REX1ZJREVP X0FWMV9MRVZFTF80XzM7Ci0gICAgY2FzZSA1MDogcmV0dXJuIFNURF9WSURFT19BVjFfTEVWRUxf NV8wOwotICAgIGNhc2UgNTE6IHJldHVybiBTVERfVklERU9fQVYxX0xFVkVMXzVfMTsKLSAgICBj YXNlIDUyOiByZXR1cm4gU1REX1ZJREVPX0FWMV9MRVZFTF81XzI7Ci0gICAgY2FzZSA1MzogcmV0 dXJuIFNURF9WSURFT19BVjFfTEVWRUxfNV8zOwotICAgIGNhc2UgNjA6IHJldHVybiBTVERfVklE RU9fQVYxX0xFVkVMXzZfMDsKLSAgICBjYXNlIDYxOiByZXR1cm4gU1REX1ZJREVPX0FWMV9MRVZF TF82XzE7Ci0gICAgY2FzZSA2MjogcmV0dXJuIFNURF9WSURFT19BVjFfTEVWRUxfNl8yOwotICAg IGNhc2UgNjM6IHJldHVybiBTVERfVklERU9fQVYxX0xFVkVMXzZfMzsKLSAgICBjYXNlIDcwOiBy ZXR1cm4gU1REX1ZJREVPX0FWMV9MRVZFTF83XzA7Ci0gICAgY2FzZSA3MTogcmV0dXJuIFNURF9W SURFT19BVjFfTEVWRUxfN18xOwotICAgIGNhc2UgNzI6IHJldHVybiBTVERfVklERU9fQVYxX0xF VkVMXzdfMjsKLSAgICBkZWZhdWx0OgotICAgIGNhc2UgNzM6IHJldHVybiBTVERfVklERU9fQVYx X0xFVkVMXzdfMzsKLSAgICB9Ci19Ci0KLVN0ZFZpZGVvSDI2NFByb2ZpbGVJZGMgZmZfdmtfaDI2 NF9wcm9maWxlX3RvX3ZrKGludCBwcm9maWxlKQotewotICAgIHN3aXRjaCAocHJvZmlsZSkgewot ICAgIGNhc2UgQVZfUFJPRklMRV9IMjY0X0NPTlNUUkFJTkVEX0JBU0VMSU5FOiByZXR1cm4gU1RE X1ZJREVPX0gyNjRfUFJPRklMRV9JRENfQkFTRUxJTkU7Ci0gICAgY2FzZSBBVl9QUk9GSUxFX0gy NjRfTUFJTjogcmV0dXJuIFNURF9WSURFT19IMjY0X1BST0ZJTEVfSURDX01BSU47Ci0gICAgY2Fz ZSBBVl9QUk9GSUxFX0gyNjRfSElHSDogcmV0dXJuIFNURF9WSURFT19IMjY0X1BST0ZJTEVfSURD X0hJR0g7Ci0gICAgY2FzZSBBVl9QUk9GSUxFX0gyNjRfSElHSF80NDRfUFJFRElDVElWRTogcmV0 dXJuIFNURF9WSURFT19IMjY0X1BST0ZJTEVfSURDX0hJR0hfNDQ0X1BSRURJQ1RJVkU7Ci0gICAg ZGVmYXVsdDogcmV0dXJuIFNURF9WSURFT19IMjY0X1BST0ZJTEVfSURDX0lOVkFMSUQ7Ci0gICAg fQotfQotCi1TdGRWaWRlb0gyNjVQcm9maWxlSWRjIGZmX3ZrX2gyNjVfcHJvZmlsZV90b192ayhp bnQgcHJvZmlsZSkKLXsKLSAgICBzd2l0Y2ggKHByb2ZpbGUpIHsKLSAgICBjYXNlIEFWX1BST0ZJ TEVfSEVWQ19NQUlOOiAgICByZXR1cm4gU1REX1ZJREVPX0gyNjVfUFJPRklMRV9JRENfTUFJTjsK LSAgICBjYXNlIEFWX1BST0ZJTEVfSEVWQ19NQUlOXzEwOiByZXR1cm4gU1REX1ZJREVPX0gyNjVf UFJPRklMRV9JRENfTUFJTl8xMDsKLSAgICBjYXNlIEFWX1BST0ZJTEVfSEVWQ19SRVhUOiAgICBy ZXR1cm4gU1REX1ZJREVPX0gyNjVfUFJPRklMRV9JRENfRk9STUFUX1JBTkdFX0VYVEVOU0lPTlM7 Ci0gICAgZGVmYXVsdDogcmV0dXJuIFNURF9WSURFT19IMjY1X1BST0ZJTEVfSURDX0lOVkFMSUQ7 Ci0gICAgfQotfQotCi1TdGRWaWRlb0FWMVByb2ZpbGUgZmZfdmtfYXYxX3Byb2ZpbGVfdG9fdmso aW50IHByb2ZpbGUpCi17Ci0gICAgc3dpdGNoIChwcm9maWxlKSB7Ci0gICAgY2FzZSBBVl9QUk9G SUxFX0FWMV9NQUlOOiByZXR1cm4gU1REX1ZJREVPX0FWMV9QUk9GSUxFX01BSU47Ci0gICAgY2Fz ZSBBVl9QUk9GSUxFX0FWMV9ISUdIOiByZXR1cm4gU1REX1ZJREVPX0FWMV9QUk9GSUxFX0hJR0g7 Ci0gICAgY2FzZSBBVl9QUk9GSUxFX0FWMV9QUk9GRVNTSU9OQUw6IHJldHVybiBTVERfVklERU9f QVYxX1BST0ZJTEVfUFJPRkVTU0lPTkFMOwotICAgIGRlZmF1bHQ6IHJldHVybiBTVERfVklERU9f QVYxX1BST0ZJTEVfSU5WQUxJRDsKLSAgICB9Ci19Ci0KLWludCBmZl92a19jcmVhdGVfdmlldyhG RlZ1bGthbkNvbnRleHQgKnMsIEZGVmtWaWRlb0NvbW1vbiAqY29tbW9uLAotICAgICAgICAgICAg ICAgICAgICAgIFZrSW1hZ2VWaWV3ICp2aWV3LCBWa0ltYWdlQXNwZWN0RmxhZ3MgKmFzcGVjdCwK LSAgICAgICAgICAgICAgICAgICAgICBBVlZrRnJhbWUgKnNyYywgVmtGb3JtYXQgdmtmLCBpbnQg aXNfZHBiKQotewotICAgIFZrUmVzdWx0IHJldDsKLSAgICBGRlZ1bGthbkZ1bmN0aW9ucyAqdmsg PSAmcy0+dmtmbjsKLSAgICBWa0ltYWdlQXNwZWN0RmxhZ3MgYXNwZWN0X21hc2sgPSBmZl92a19h c3BlY3RfYml0c19mcm9tX3ZrZm10KHZrZik7Ci0KLSAgICBWa1NhbXBsZXJZY2JjckNvbnZlcnNp b25JbmZvIHl1dl9zYW1wbGVyX2luZm8gPSB7Ci0gICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVS RV9UWVBFX1NBTVBMRVJfWUNCQ1JfQ09OVkVSU0lPTl9JTkZPLAotICAgICAgICAuY29udmVyc2lv biA9IGNvbW1vbi0+eXV2X3NhbXBsZXIsCi0gICAgfTsKLSAgICBWa0ltYWdlVmlld0NyZWF0ZUlu Zm8gaW1nX3ZpZXdfY3JlYXRlX2luZm8gPSB7Ci0gICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVS RV9UWVBFX0lNQUdFX1ZJRVdfQ1JFQVRFX0lORk8sCi0gICAgICAgIC5wTmV4dCA9ICZ5dXZfc2Ft cGxlcl9pbmZvLAotICAgICAgICAudmlld1R5cGUgPSBjb21tb24tPmxheWVyZWRfZHBiICYmIGlz X2RwYiA/Ci0gICAgICAgICAgICAgICAgICAgIFZLX0lNQUdFX1ZJRVdfVFlQRV8yRF9BUlJBWSA6 IFZLX0lNQUdFX1ZJRVdfVFlQRV8yRCwKLSAgICAgICAgLmZvcm1hdCA9IHZrZiwKLSAgICAgICAg LmltYWdlID0gc3JjLT5pbWdbMF0sCi0gICAgICAgIC5jb21wb25lbnRzID0gKFZrQ29tcG9uZW50 TWFwcGluZykgewotICAgICAgICAgICAgLnIgPSBWS19DT01QT05FTlRfU1dJWlpMRV9JREVOVElU WSwKLSAgICAgICAgICAgIC5nID0gVktfQ09NUE9ORU5UX1NXSVpaTEVfSURFTlRJVFksCi0gICAg ICAgICAgICAuYiA9IFZLX0NPTVBPTkVOVF9TV0laWkxFX0lERU5USVRZLAotICAgICAgICAgICAg LmEgPSBWS19DT01QT05FTlRfU1dJWlpMRV9JREVOVElUWSwKLSAgICAgICAgfSwKLSAgICAgICAg LnN1YnJlc291cmNlUmFuZ2UgPSAoVmtJbWFnZVN1YnJlc291cmNlUmFuZ2UpIHsKLSAgICAgICAg ICAgIC5hc3BlY3RNYXNrICAgICA9IFZLX0lNQUdFX0FTUEVDVF9DT0xPUl9CSVQsCi0gICAgICAg ICAgICAuYmFzZUFycmF5TGF5ZXIgPSAwLAotICAgICAgICAgICAgLmxheWVyQ291bnQgICAgID0g Y29tbW9uLT5sYXllcmVkX2RwYiAmJiBpc19kcGIgPwotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgVktfUkVNQUlOSU5HX0FSUkFZX0xBWUVSUyA6IDEsCi0gICAgICAgICAgICAubGV2ZWxD b3VudCAgICAgPSAxLAotICAgICAgICB9LAotICAgIH07Ci0KLSAgICByZXQgPSB2ay0+Q3JlYXRl SW1hZ2VWaWV3KHMtPmh3Y3R4LT5hY3RfZGV2LCAmaW1nX3ZpZXdfY3JlYXRlX2luZm8sCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzLT5od2N0eC0+YWxsb2MsIHZpZXcpOwotICAgIGlm IChyZXQgIT0gVktfU1VDQ0VTUykKLSAgICAgICAgcmV0dXJuIEFWRVJST1JfRVhURVJOQUw7Ci0K LSAgICAqYXNwZWN0ID0gYXNwZWN0X21hc2s7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotYXZfY29s ZCB2b2lkIGZmX3ZrX3ZpZGVvX2NvbW1vbl91bmluaXQoRkZWdWxrYW5Db250ZXh0ICpzLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkZWa1ZpZGVvQ29tbW9uICpjb21t b24pCi17Ci0gICAgRkZWdWxrYW5GdW5jdGlvbnMgKnZrID0gJnMtPnZrZm47Ci0KLSAgICBpZiAo Y29tbW9uLT5zZXNzaW9uKSB7Ci0gICAgICAgIHZrLT5EZXN0cm95VmlkZW9TZXNzaW9uS0hSKHMt Pmh3Y3R4LT5hY3RfZGV2LCBjb21tb24tPnNlc3Npb24sCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHMtPmh3Y3R4LT5hbGxvYyk7Ci0gICAgICAgIGNvbW1vbi0+c2Vzc2lvbiA9 IFZLX05VTExfSEFORExFOwotICAgIH0KLQotICAgIGlmIChjb21tb24tPm5iX21lbSAmJiBjb21t b24tPm1lbSkKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb21tb24tPm5iX21lbTsgaSsr KQotICAgICAgICAgICAgdmstPkZyZWVNZW1vcnkocy0+aHdjdHgtPmFjdF9kZXYsIGNvbW1vbi0+ bWVtW2ldLCBzLT5od2N0eC0+YWxsb2MpOwotCi0gICAgYXZfZnJlZXAoJmNvbW1vbi0+bWVtKTsK LQotICAgIGlmIChjb21tb24tPmxheWVyZWRfdmlldykKLSAgICAgICAgdmstPkRlc3Ryb3lJbWFn ZVZpZXcocy0+aHdjdHgtPmFjdF9kZXYsIGNvbW1vbi0+bGF5ZXJlZF92aWV3LAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzLT5od2N0eC0+YWxsb2MpOwotCi0gICAgYXZfZnJhbWVfZnJl ZSgmY29tbW9uLT5sYXllcmVkX2ZyYW1lKTsKLQotICAgIGF2X2J1ZmZlcl91bnJlZigmY29tbW9u LT5kcGJfaHdmY19yZWYpOwotCi0gICAgaWYgKGNvbW1vbi0+eXV2X3NhbXBsZXIpCi0gICAgICAg IHZrLT5EZXN0cm95U2FtcGxlclljYmNyQ29udmVyc2lvbihzLT5od2N0eC0+YWN0X2RldiwgY29t bW9uLT55dXZfc2FtcGxlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHMtPmh3Y3R4LT5hbGxvYyk7Ci19Ci0KLWF2X2NvbGQgaW50IGZmX3ZrX3ZpZGVvX2NvbW1v bl9pbml0KEFWQ29kZWNDb250ZXh0ICphdmN0eCwgRkZWdWxrYW5Db250ZXh0ICpzLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkZWa1ZpZGVvQ29tbW9uICpjb21tb24sCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWa1ZpZGVvU2Vzc2lvbkNyZWF0ZUlu Zm9LSFIgKnNlc3Npb25fY3JlYXRlKQotewotICAgIGludCBlcnI7Ci0gICAgVmtSZXN1bHQgcmV0 OwotICAgIEZGVnVsa2FuRnVuY3Rpb25zICp2ayA9ICZzLT52a2ZuOwotICAgIFZrVmlkZW9TZXNz aW9uTWVtb3J5UmVxdWlyZW1lbnRzS0hSICptZW0gPSBOVUxMOwotICAgIFZrQmluZFZpZGVvU2Vz c2lvbk1lbW9yeUluZm9LSFIgKmJpbmRfbWVtID0gTlVMTDsKLQotICAgIGludCBjeHBvcyA9IDAs IGN5cG9zID0gMDsKLSAgICBWa1NhbXBsZXJZY2JjckNvbnZlcnNpb25DcmVhdGVJbmZvIHl1dl9z YW1wbGVyX2luZm8gPSB7Ci0gICAgICAgIC5zVHlwZSAgICAgID0gVktfU1RSVUNUVVJFX1RZUEVf U0FNUExFUl9ZQ0JDUl9DT05WRVJTSU9OX0NSRUFURV9JTkZPLAotICAgICAgICAuY29tcG9uZW50 cyA9IGZmX2NvbXBfaWRlbnRpdHlfbWFwLAotICAgICAgICAueWNiY3JNb2RlbCA9IFZLX1NBTVBM RVJfWUNCQ1JfTU9ERUxfQ09OVkVSU0lPTl9SR0JfSURFTlRJVFksCi0gICAgICAgIC55Y2JjclJh bmdlID0gYXZjdHgtPmNvbG9yX3JhbmdlID09IEFWQ09MX1JBTkdFX01QRUcsIC8qIElnbm9yZWQg Ki8KLSAgICAgICAgLmZvcm1hdCAgICAgPSBzZXNzaW9uX2NyZWF0ZS0+cGljdHVyZUZvcm1hdCwK LSAgICB9OwotCi0gICAgLyogQ3JlYXRlIGlkZW50aXR5IFlVViBzYW1wbGVyCi0gICAgICogKFZr SW1hZ2VWaWV3cyBvZiBZVVYgaW1hZ2UgZm9ybWF0cyByZXF1aXJlIGl0LCBldmVuIGlmIGl0IGRv ZXMgbm90aGluZykgKi8KLSAgICBhdl9jaHJvbWFfbG9jYXRpb25fZW51bV90b19wb3MoJmN4cG9z LCAmY3lwb3MsIGF2Y3R4LT5jaHJvbWFfc2FtcGxlX2xvY2F0aW9uKTsKLSAgICB5dXZfc2FtcGxl cl9pbmZvLnhDaHJvbWFPZmZzZXQgPSBjeHBvcyA+PiA3OwotICAgIHl1dl9zYW1wbGVyX2luZm8u eUNocm9tYU9mZnNldCA9IGN5cG9zID4+IDc7Ci0gICAgcmV0ID0gdmstPkNyZWF0ZVNhbXBsZXJZ Y2JjckNvbnZlcnNpb24ocy0+aHdjdHgtPmFjdF9kZXYsICZ5dXZfc2FtcGxlcl9pbmZvLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMtPmh3Y3R4LT5hbGxvYywg JmNvbW1vbi0+eXV2X3NhbXBsZXIpOwotICAgIGlmIChyZXQgIT0gVktfU1VDQ0VTUykKLSAgICAg ICAgcmV0dXJuIEFWRVJST1JfRVhURVJOQUw7Ci0KLSAgICAvKiBDcmVhdGUgc2Vzc2lvbiAqLwot ICAgIHJldCA9IHZrLT5DcmVhdGVWaWRlb1Nlc3Npb25LSFIocy0+aHdjdHgtPmFjdF9kZXYsIHNl c3Npb25fY3JlYXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy0+aHdj dHgtPmFsbG9jLCAmY29tbW9uLT5zZXNzaW9uKTsKLSAgICBpZiAocmV0ICE9IFZLX1NVQ0NFU1Mp Ci0gICAgICAgIHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOwotCi0gICAgLyogR2V0IG1lbW9yeSBy ZXF1aXJlbWVudHMgKi8KLSAgICByZXQgPSB2ay0+R2V0VmlkZW9TZXNzaW9uTWVtb3J5UmVxdWly ZW1lbnRzS0hSKHMtPmh3Y3R4LT5hY3RfZGV2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29tbW9uLT5zZXNzaW9uLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNvbW1vbi0+bmJfbWVtLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7Ci0g ICAgaWYgKHJldCAhPSBWS19TVUNDRVNTKSB7Ci0gICAgICAgIGVyciA9IEFWRVJST1JfRVhURVJO QUw7Ci0gICAgICAgIGdvdG8gZmFpbDsKLSAgICB9Ci0KLSAgICAvKiBBbGxvY2F0ZSBhbGwgbWVt b3J5IG5lZWRlZCB0byBhY3R1YWxseSBhbGxvY2F0ZSBtZW1vcnkgKi8KLSAgICBjb21tb24tPm1l bSA9IGF2X21hbGxvY3ooc2l6ZW9mKCpjb21tb24tPm1lbSkqY29tbW9uLT5uYl9tZW0pOwotICAg IGlmICghY29tbW9uLT5tZW0pIHsKLSAgICAgICAgZXJyID0gQVZFUlJPUihFTk9NRU0pOwotICAg ICAgICBnb3RvIGZhaWw7Ci0gICAgfQotICAgIG1lbSA9IGF2X21hbGxvY3ooc2l6ZW9mKCptZW0p KmNvbW1vbi0+bmJfbWVtKTsKLSAgICBpZiAoIW1lbSkgewotICAgICAgICBlcnIgPSBBVkVSUk9S KEVOT01FTSk7Ci0gICAgICAgIGdvdG8gZmFpbDsKLSAgICB9Ci0gICAgYmluZF9tZW0gPSBhdl9t YWxsb2N6KHNpemVvZigqYmluZF9tZW0pKmNvbW1vbi0+bmJfbWVtKTsKLSAgICBpZiAoIWJpbmRf bWVtKSB7Ci0gICAgICAgIGVyciA9IEFWRVJST1IoRU5PTUVNKTsKLSAgICAgICAgZ290byBmYWls OwotICAgIH0KLQotICAgIC8qIFNldCB0aGUgbmVlZGVkIGZpZWxkcyB0byBnZXQgdGhlIG1lbW9y eSByZXF1aXJlbWVudHMgKi8KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvbW1vbi0+bmJfbWVt OyBpKyspIHsKLSAgICAgICAgbWVtW2ldID0gKFZrVmlkZW9TZXNzaW9uTWVtb3J5UmVxdWlyZW1l bnRzS0hSKSB7Ci0gICAgICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9WSURFT19T RVNTSU9OX01FTU9SWV9SRVFVSVJFTUVOVFNfS0hSLAotICAgICAgICB9OwotICAgIH0KLQotICAg IC8qIEZpbmFsbHkgZ2V0IHRoZSBtZW1vcnkgcmVxdWlyZW1lbnRzICovCi0gICAgcmV0ID0gdmst PkdldFZpZGVvU2Vzc2lvbk1lbW9yeVJlcXVpcmVtZW50c0tIUihzLT5od2N0eC0+YWN0X2RldiwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1v bi0+c2Vzc2lvbiwgJmNvbW1vbi0+bmJfbWVtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbWVtKTsKLSAgICBpZiAocmV0ICE9IFZLX1NVQ0NFU1Mp IHsKLSAgICAgICAgZXJyID0gQVZFUlJPUl9FWFRFUk5BTDsKLSAgICAgICAgZ290byBmYWlsOwot ICAgIH0KLQotICAgIC8qIE5vdyBhbGxvY2F0ZSBlYWNoIHJlcXVlc3RlZCBtZW1vcnkuCi0gICAg ICogRm9yIHJpY2luZywgY291bGQgcG9vbCB0b2dldGhlciBtZW1vcnkgdGhhdCBlbmRzIHVwIGlu IHRoZSBzYW1lIGluZGV4LiAqLwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY29tbW9uLT5uYl9t ZW07IGkrKykgewotICAgICAgICBlcnIgPSBmZl92a19hbGxvY19tZW0ocywgJm1lbVtpXS5tZW1v cnlSZXF1aXJlbWVudHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVSU5UMzJfTUFY LCBOVUxMLCBOVUxMLCAmY29tbW9uLT5tZW1baV0pOwotICAgICAgICBpZiAoZXJyIDwgMCkKLSAg ICAgICAgICAgIGdvdG8gZmFpbDsKLQotICAgICAgICBiaW5kX21lbVtpXSA9IChWa0JpbmRWaWRl b1Nlc3Npb25NZW1vcnlJbmZvS0hSKSB7Ci0gICAgICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RV UkVfVFlQRV9CSU5EX1ZJREVPX1NFU1NJT05fTUVNT1JZX0lORk9fS0hSLAotICAgICAgICAgICAg Lm1lbW9yeSA9IGNvbW1vbi0+bWVtW2ldLAotICAgICAgICAgICAgLm1lbW9yeUJpbmRJbmRleCA9 IG1lbVtpXS5tZW1vcnlCaW5kSW5kZXgsCi0gICAgICAgICAgICAubWVtb3J5T2Zmc2V0ID0gMCwK LSAgICAgICAgICAgIC5tZW1vcnlTaXplID0gbWVtW2ldLm1lbW9yeVJlcXVpcmVtZW50cy5zaXpl LAotICAgICAgICB9OwotCi0gICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX1ZFUkJPU0UsICJB bGxvY2F0aW5nICUiUFJJdTY0IiBieXRlcyBpbiBiaW5kIGluZGV4ICVpIGZvciB2aWRlbyBzZXNz aW9uXG4iLAotICAgICAgICAgICAgICAgYmluZF9tZW1baV0ubWVtb3J5U2l6ZSwgYmluZF9tZW1b aV0ubWVtb3J5QmluZEluZGV4KTsKLSAgICB9Ci0KLSAgICAvKiBCaW5kIHRoZSBhbGxvY2F0ZWQg bWVtb3J5ICovCi0gICAgcmV0ID0gdmstPkJpbmRWaWRlb1Nlc3Npb25NZW1vcnlLSFIocy0+aHdj dHgtPmFjdF9kZXYsIGNvbW1vbi0+c2Vzc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb21tb24tPm5iX21lbSwgYmluZF9tZW0pOwotICAgIGlmIChyZXQgIT0g VktfU1VDQ0VTUykgewotICAgICAgICBlcnIgPSBBVkVSUk9SX0VYVEVSTkFMOwotICAgICAgICBn b3RvIGZhaWw7Ci0gICAgfQotCi0gICAgYXZfZnJlZXAoJm1lbSk7Ci0gICAgYXZfZnJlZXAoJmJp bmRfbWVtKTsKLQotICAgIHJldHVybiAwOwotCi1mYWlsOgotICAgIGF2X2ZyZWVwKCZtZW0pOwot ICAgIGF2X2ZyZWVwKCZiaW5kX21lbSk7Ci0KLSAgICBmZl92a192aWRlb19jb21tb25fdW5pbml0 KHMsIGNvbW1vbik7Ci0gICAgcmV0dXJuIGVycjsKLX0KLS0gCjIuNDkuMQoKCkZyb20gMTI5MTQ0 ZmM2NWVjMWI3ZWMzYzAyODI2NWViMmVmYTAzYjNlMGVhOCBNb24gU2VwIDE3IDAwOjAwOjAwIDIw MDEKRnJvbTogSmFtYWlrYTEgPGx1a2FzemN6MThAd3AucGw+CkRhdGU6IFdlZCwgMyBTZXAgMjAy NSAxMzo0MjowMyArMDAwMApTdWJqZWN0OiBbUEFUQ0ggMDkwLzExOF0gQ2hhbmdpbmcgdnVsa2Fu IGZpbGUgZGlyZWN0b3J5CgotLS0KIGxpYmF2Y29kZWMvdnVsa2FuL3Z1bGthbl92aWRlby5jIHwg NDgyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDEgZmlsZSBjaGFuZ2VkLCA0ODIg aW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2Y29kZWMvdnVsa2FuL3Z1bGth bl92aWRlby5jCgpkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy92dWxrYW4vdnVsa2FuX3ZpZGVvLmMg Yi9saWJhdmNvZGVjL3Z1bGthbi92dWxrYW5fdmlkZW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwLi44MTk5NDA0NjBmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYXZjb2Rl Yy92dWxrYW4vdnVsa2FuX3ZpZGVvLmMKQEAgLTAsMCArMSw0ODIgQEAKKy8qCisgKiBUaGlzIGZp bGUgaXMgcGFydCBvZiBGRm1wZWcuCisgKgorICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlv dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt cyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIu MSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K KyAqCisgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2 ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFs b25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBG b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24s IE1BIDAyMTEwLTEzMDEgVVNBCisgKi8KKworI2luY2x1ZGUgImxpYmF2dXRpbC9tZW0uaCIKKyNp bmNsdWRlICJ2dWxrYW5fdmlkZW8uaCIKKworI2RlZmluZSBBU1BFQ1RfMlBMQU5FIChWS19JTUFH RV9BU1BFQ1RfUExBTkVfMF9CSVQgfCBWS19JTUFHRV9BU1BFQ1RfUExBTkVfMV9CSVQpCisjZGVm aW5lIEFTUEVDVF8zUExBTkUgKFZLX0lNQUdFX0FTUEVDVF9QTEFORV8wX0JJVCB8IFZLX0lNQUdF X0FTUEVDVF9QTEFORV8xX0JJVCB8IFZLX0lNQUdFX0FTUEVDVF9QTEFORV8yX0JJVCkKKworc3Rh dGljIGNvbnN0IHN0cnVjdCBGRlZrRm9ybWF0TWFwRW50cnkgeworICAgIFZrRm9ybWF0IHZrZjsK KyAgICBlbnVtIEFWUGl4ZWxGb3JtYXQgcGl4Zm10OworICAgIFZrSW1hZ2VBc3BlY3RGbGFncyBh c3BlY3Q7Cit9IHZrX2Zvcm1hdF9tYXBbXSA9IHsKKyAgICAvKiBHcmF5IGZvcm1hdHMgKi8KKyAg ICB7IFZLX0ZPUk1BVF9SOF9VTk9STSwgICBBVl9QSVhfRk1UX0dSQVk4LCAgIFZLX0lNQUdFX0FT UEVDVF9DT0xPUl9CSVQgfSwKKyAgICB7IFZLX0ZPUk1BVF9SMTZfVU5PUk0sICBBVl9QSVhfRk1U X0dSQVkxNiwgIFZLX0lNQUdFX0FTUEVDVF9DT0xPUl9CSVQgfSwKKyAgICB7IFZLX0ZPUk1BVF9S MzJfU0ZMT0FULCBBVl9QSVhfRk1UX0dSQVlGMzIsIFZLX0lNQUdFX0FTUEVDVF9DT0xPUl9CSVQg fSwKKworICAgIC8qIFJHQiBmb3JtYXRzICovCisgICAgeyBWS19GT1JNQVRfQjhHOFI4QThfVU5P Uk0sICAgICAgICAgICBBVl9QSVhfRk1UX0JHUkEsICAgIFZLX0lNQUdFX0FTUEVDVF9DT0xPUl9C SVQgfSwKKyAgICB7IFZLX0ZPUk1BVF9SOEc4QjhBOF9VTk9STSwgICAgICAgICAgIEFWX1BJWF9G TVRfUkdCQSwgICAgVktfSU1BR0VfQVNQRUNUX0NPTE9SX0JJVCB9LAorICAgIHsgVktfRk9STUFU X1I4RzhCOF9VTk9STSwgICAgICAgICAgICAgQVZfUElYX0ZNVF9SR0IyNCwgICBWS19JTUFHRV9B U1BFQ1RfQ09MT1JfQklUIH0sCisgICAgeyBWS19GT1JNQVRfQjhHOFI4X1VOT1JNLCAgICAgICAg ICAgICBBVl9QSVhfRk1UX0JHUjI0LCAgIFZLX0lNQUdFX0FTUEVDVF9DT0xPUl9CSVQgfSwKKyAg ICB7IFZLX0ZPUk1BVF9SMTZHMTZCMTZfVU5PUk0sICAgICAgICAgIEFWX1BJWF9GTVRfUkdCNDgs ICAgVktfSU1BR0VfQVNQRUNUX0NPTE9SX0JJVCB9LAorICAgIHsgVktfRk9STUFUX1IxNkcxNkIx NkExNl9VTk9STSwgICAgICAgQVZfUElYX0ZNVF9SR0JBNjQsICBWS19JTUFHRV9BU1BFQ1RfQ09M T1JfQklUIH0sCisgICAgeyBWS19GT1JNQVRfUjVHNkI1X1VOT1JNX1BBQ0sxNiwgICAgICBBVl9Q SVhfRk1UX1JHQjU2NSwgIFZLX0lNQUdFX0FTUEVDVF9DT0xPUl9CSVQgfSwKKyAgICB7IFZLX0ZP Uk1BVF9CNUc2UjVfVU5PUk1fUEFDSzE2LCAgICAgIEFWX1BJWF9GTVRfQkdSNTY1LCAgVktfSU1B R0VfQVNQRUNUX0NPTE9SX0JJVCB9LAorICAgIHsgVktfRk9STUFUX0I4RzhSOEE4X1VOT1JNLCAg ICAgICAgICAgQVZfUElYX0ZNVF9CR1IwLCAgICBWS19JTUFHRV9BU1BFQ1RfQ09MT1JfQklUIH0s CisgICAgeyBWS19GT1JNQVRfUjhHOEI4QThfVU5PUk0sICAgICAgICAgICBBVl9QSVhfRk1UX1JH QjAsICAgIFZLX0lNQUdFX0FTUEVDVF9DT0xPUl9CSVQgfSwKKyAgICB7IFZLX0ZPUk1BVF9BMlIx MEcxMEIxMF9VTk9STV9QQUNLMzIsIEFWX1BJWF9GTVRfWDJSR0IxMCwgVktfSU1BR0VfQVNQRUNU X0NPTE9SX0JJVCB9LAorCisgICAgLyogUGxhbmFyIFJHQiAqLworICAgIHsgVktfRk9STUFUX1I4 X1VOT1JNLCAgIEFWX1BJWF9GTVRfR0JSQVAsICAgIFZLX0lNQUdFX0FTUEVDVF9DT0xPUl9CSVQg fSwKKyAgICB7IFZLX0ZPUk1BVF9SMTZfVU5PUk0sICBBVl9QSVhfRk1UX0dCUkFQMTYsICBWS19J TUFHRV9BU1BFQ1RfQ09MT1JfQklUIH0sCisgICAgeyBWS19GT1JNQVRfUjMyX1NGTE9BVCwgQVZf UElYX0ZNVF9HQlJQRjMyLCAgVktfSU1BR0VfQVNQRUNUX0NPTE9SX0JJVCB9LAorICAgIHsgVktf Rk9STUFUX1IzMl9TRkxPQVQsIEFWX1BJWF9GTVRfR0JSQVBGMzIsIFZLX0lNQUdFX0FTUEVDVF9D T0xPUl9CSVQgfSwKKworICAgIC8qIFR3by1wbGFuZSA0MjAgWVVWIGF0IDgsIDEwLCAxMiBhbmQg MTYgYml0cyAqLworICAgIHsgVktfRk9STUFUX0c4X0I4UjhfMlBMQU5FXzQyMF9VTk9STSwgICAg ICAgICAgICAgICAgICBBVl9QSVhfRk1UX05WMTIsIEFTUEVDVF8yUExBTkUgfSwKKyAgICB7IFZL X0ZPUk1BVF9HMTBYNl9CMTBYNlIxMFg2XzJQTEFORV80MjBfVU5PUk1fM1BBQ0sxNiwgQVZfUElY X0ZNVF9QMDEwLCBBU1BFQ1RfMlBMQU5FIH0sCisgICAgeyBWS19GT1JNQVRfRzEyWDRfQjEyWDRS MTJYNF8yUExBTkVfNDIwX1VOT1JNXzNQQUNLMTYsIEFWX1BJWF9GTVRfUDAxMiwgQVNQRUNUXzJQ TEFORSB9LAorICAgIHsgVktfRk9STUFUX0cxNl9CMTZSMTZfMlBMQU5FXzQyMF9VTk9STSwgICAg ICAgICAgICAgICBBVl9QSVhfRk1UX1AwMTYsIEFTUEVDVF8yUExBTkUgfSwKKworICAgIC8qIFR3 by1wbGFuZSA0MjIgWVVWIGF0IDgsIDEwIGFuZCAxNiBiaXRzICovCisgICAgeyBWS19GT1JNQVRf RzhfQjhSOF8yUExBTkVfNDIyX1VOT1JNLCAgICAgICAgICAgICAgICAgIEFWX1BJWF9GTVRfTlYx NiwgQVNQRUNUXzJQTEFORSB9LAorICAgIHsgVktfRk9STUFUX0cxMFg2X0IxMFg2UjEwWDZfMlBM QU5FXzQyMl9VTk9STV8zUEFDSzE2LCBBVl9QSVhfRk1UX1AyMTAsIEFTUEVDVF8yUExBTkUgfSwK KyAgICB7IFZLX0ZPUk1BVF9HMTJYNF9CMTJYNFIxMlg0XzJQTEFORV80MjJfVU5PUk1fM1BBQ0sx NiwgQVZfUElYX0ZNVF9QMjEyLCBBU1BFQ1RfMlBMQU5FIH0sCisgICAgeyBWS19GT1JNQVRfRzE2 X0IxNlIxNl8yUExBTkVfNDIyX1VOT1JNLCAgICAgICAgICAgICAgIEFWX1BJWF9GTVRfUDIxNiwg QVNQRUNUXzJQTEFORSB9LAorCisgICAgLyogVHdvLXBsYW5lIDQ0NCBZVVYgYXQgOCwgMTAgYW5k IDE2IGJpdHMgKi8KKyAgICB7IFZLX0ZPUk1BVF9HOF9COFI4XzJQTEFORV80NDRfVU5PUk0sICAg ICAgICAgICAgICAgICAgQVZfUElYX0ZNVF9OVjI0LCBBU1BFQ1RfMlBMQU5FIH0sCisgICAgeyBW S19GT1JNQVRfRzEwWDZfQjEwWDZSMTBYNl8yUExBTkVfNDQ0X1VOT1JNXzNQQUNLMTYsIEFWX1BJ WF9GTVRfUDQxMCwgQVNQRUNUXzJQTEFORSB9LAorICAgIHsgVktfRk9STUFUX0cxMlg0X0IxMlg0 UjEyWDRfMlBMQU5FXzQ0NF9VTk9STV8zUEFDSzE2LCBBVl9QSVhfRk1UX1A0MTIsIEFTUEVDVF8y UExBTkUgfSwKKyAgICB7IFZLX0ZPUk1BVF9HMTZfQjE2UjE2XzJQTEFORV80NDRfVU5PUk0sICAg ICAgICAgICAgICAgQVZfUElYX0ZNVF9QNDE2LCBBU1BFQ1RfMlBMQU5FIH0sCisKKyAgICAvKiBU aHJlZS1wbGFuZSA0MjAsIDQyMiwgNDQ0IGF0IDgsIDEwLCAxMiBhbmQgMTYgYml0cyAqLworICAg IHsgVktfRk9STUFUX0c4X0I4X1I4XzNQTEFORV80MjBfVU5PUk0sICAgIEFWX1BJWF9GTVRfWVVW NDIwUCwgICBBU1BFQ1RfM1BMQU5FIH0sCisgICAgeyBWS19GT1JNQVRfRzE2X0IxNl9SMTZfM1BM QU5FXzQyMF9VTk9STSwgQVZfUElYX0ZNVF9ZVVY0MjBQMTAsIEFTUEVDVF8zUExBTkUgfSwKKyAg ICB7IFZLX0ZPUk1BVF9HMTZfQjE2X1IxNl8zUExBTkVfNDIwX1VOT1JNLCBBVl9QSVhfRk1UX1lV VjQyMFAxMiwgQVNQRUNUXzNQTEFORSB9LAorICAgIHsgVktfRk9STUFUX0cxNl9CMTZfUjE2XzNQ TEFORV80MjBfVU5PUk0sIEFWX1BJWF9GTVRfWVVWNDIwUDE2LCBBU1BFQ1RfM1BMQU5FIH0sCisg ICAgeyBWS19GT1JNQVRfRzhfQjhfUjhfM1BMQU5FXzQyMl9VTk9STSwgICAgQVZfUElYX0ZNVF9Z VVY0MjJQLCAgIEFTUEVDVF8zUExBTkUgfSwKKyAgICB7IFZLX0ZPUk1BVF9HMTZfQjE2X1IxNl8z UExBTkVfNDIyX1VOT1JNLCBBVl9QSVhfRk1UX1lVVjQyMlAxMCwgQVNQRUNUXzNQTEFORSB9LAor ICAgIHsgVktfRk9STUFUX0cxNl9CMTZfUjE2XzNQTEFORV80MjJfVU5PUk0sIEFWX1BJWF9GTVRf WVVWNDIyUDEyLCBBU1BFQ1RfM1BMQU5FIH0sCisgICAgeyBWS19GT1JNQVRfRzE2X0IxNl9SMTZf M1BMQU5FXzQyMl9VTk9STSwgQVZfUElYX0ZNVF9ZVVY0MjJQMTYsIEFTUEVDVF8zUExBTkUgfSwK KyAgICB7IFZLX0ZPUk1BVF9HOF9COF9SOF8zUExBTkVfNDQ0X1VOT1JNLCAgICBBVl9QSVhfRk1U X1lVVjQ0NFAsICAgQVNQRUNUXzNQTEFORSB9LAorICAgIHsgVktfRk9STUFUX0cxNl9CMTZfUjE2 XzNQTEFORV80NDRfVU5PUk0sIEFWX1BJWF9GTVRfWVVWNDQ0UDEwLCBBU1BFQ1RfM1BMQU5FIH0s CisgICAgeyBWS19GT1JNQVRfRzE2X0IxNl9SMTZfM1BMQU5FXzQ0NF9VTk9STSwgQVZfUElYX0ZN VF9ZVVY0NDRQMTIsIEFTUEVDVF8zUExBTkUgfSwKKyAgICB7IFZLX0ZPUk1BVF9HMTZfQjE2X1Ix Nl8zUExBTkVfNDQ0X1VOT1JNLCBBVl9QSVhfRk1UX1lVVjQ0NFAxNiwgQVNQRUNUXzNQTEFORSB9 LAorCisgICAgLyogU2luZ2xlIHBsYW5lIDQyMiBhdCA4LCAxMCwgMTIgYW5kIDE2IGJpdHMgKi8K KyAgICB7IFZLX0ZPUk1BVF9HOEI4RzhSOF80MjJfVU5PUk0sICAgICAgICAgICAgICAgICAgICAg QVZfUElYX0ZNVF9ZVVlWNDIyLCBWS19JTUFHRV9BU1BFQ1RfQ09MT1JfQklUIH0sCisgICAgeyBW S19GT1JNQVRfQjhHOFI4RzhfNDIyX1VOT1JNLCAgICAgICAgICAgICAgICAgICAgIEFWX1BJWF9G TVRfVVlWWTQyMiwgVktfSU1BR0VfQVNQRUNUX0NPTE9SX0JJVCB9LAorICAgIHsgVktfRk9STUFU X0cxMFg2QjEwWDZHMTBYNlIxMFg2XzQyMl9VTk9STV80UEFDSzE2LCBBVl9QSVhfRk1UX1kyMTAs ICAgIFZLX0lNQUdFX0FTUEVDVF9DT0xPUl9CSVQgfSwKKyAgICB7IFZLX0ZPUk1BVF9HMTJYNEIx Mlg0RzEyWDRSMTJYNF80MjJfVU5PUk1fNFBBQ0sxNiwgQVZfUElYX0ZNVF9ZMjEyLCAgICBWS19J TUFHRV9BU1BFQ1RfQ09MT1JfQklUIH0sCisgICAgeyBWS19GT1JNQVRfRzE2QjE2RzE2UjE2XzQy Ml9VTk9STSwgICAgICAgICAgICAgICAgIEFWX1BJWF9GTVRfWTIxNiwgICAgVktfSU1BR0VfQVNQ RUNUX0NPTE9SX0JJVCB9LAorCisgICAgLyogU2luZ2xlIHBsYW5lIDQ0NCBhdCAxMCBhbmQgMTIg Yml0cyAqLworICAgIHsgVktfRk9STUFUX0EyUjEwRzEwQjEwX1VOT1JNX1BBQ0szMiwgICAgICAg ICAgICAgICBBVl9QSVhfRk1UX1hWMzAsICAgIFZLX0lNQUdFX0FTUEVDVF9DT0xPUl9CSVQgfSwK KyAgICB7IFZLX0ZPUk1BVF9SMTJYNEcxMlg0QjEyWDRBMTJYNF9VTk9STV80UEFDSzE2LCAgICAg QVZfUElYX0ZNVF9YVjM2LCAgICBWS19JTUFHRV9BU1BFQ1RfQ09MT1JfQklUIH0sCit9Oworc3Rh dGljIGNvbnN0IGludCBuYl92a19mb3JtYXRfbWFwID0gRkZfQVJSQVlfRUxFTVModmtfZm9ybWF0 X21hcCk7CisKK2VudW0gQVZQaXhlbEZvcm1hdCBmZl92a19waXhfZm10X2Zyb21fdmtmbXQoVmtG b3JtYXQgdmtmKQoreworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmJfdmtfZm9ybWF0X21hcDsg aSsrKQorICAgICAgICBpZiAodmtfZm9ybWF0X21hcFtpXS52a2YgPT0gdmtmKQorICAgICAgICAg ICAgcmV0dXJuIHZrX2Zvcm1hdF9tYXBbaV0ucGl4Zm10OworICAgIHJldHVybiBBVl9QSVhfRk1U X05PTkU7Cit9CisKK1ZrSW1hZ2VBc3BlY3RGbGFncyBmZl92a19hc3BlY3RfYml0c19mcm9tX3Zr Zm10KFZrRm9ybWF0IHZrZikKK3sKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG5iX3ZrX2Zvcm1h dF9tYXA7IGkrKykKKyAgICAgICAgaWYgKHZrX2Zvcm1hdF9tYXBbaV0udmtmID09IHZrZikKKyAg ICAgICAgICAgIHJldHVybiB2a19mb3JtYXRfbWFwW2ldLmFzcGVjdDsKKyAgICByZXR1cm4gVktf SU1BR0VfQVNQRUNUX05PTkU7Cit9CisKK1ZrVmlkZW9DaHJvbWFTdWJzYW1wbGluZ0ZsYWdCaXRz S0hSIGZmX3ZrX3N1YnNhbXBsaW5nX2Zyb21fYXZfZGVzYyhjb25zdCBBVlBpeEZtdERlc2NyaXB0 b3IgKmRlc2MpCit7CisgICAgaWYgKGRlc2MtPm5iX2NvbXBvbmVudHMgPT0gMSkKKyAgICAgICAg cmV0dXJuIFZLX1ZJREVPX0NIUk9NQV9TVUJTQU1QTElOR19NT05PQ0hST01FX0JJVF9LSFI7Cisg ICAgZWxzZSBpZiAoIWRlc2MtPmxvZzJfY2hyb21hX3cgJiYgIWRlc2MtPmxvZzJfY2hyb21hX2gp CisgICAgICAgIHJldHVybiBWS19WSURFT19DSFJPTUFfU1VCU0FNUExJTkdfNDQ0X0JJVF9LSFI7 CisgICAgZWxzZSBpZiAoIWRlc2MtPmxvZzJfY2hyb21hX3cgJiYgZGVzYy0+bG9nMl9jaHJvbWFf aCA9PSAxKQorICAgICAgICByZXR1cm4gVktfVklERU9fQ0hST01BX1NVQlNBTVBMSU5HXzQyMl9C SVRfS0hSOworICAgIGVsc2UgaWYgKGRlc2MtPmxvZzJfY2hyb21hX3cgPT0gMSAmJiBkZXNjLT5s b2cyX2Nocm9tYV9oID09IDEpCisgICAgICAgIHJldHVybiBWS19WSURFT19DSFJPTUFfU1VCU0FN UExJTkdfNDIwX0JJVF9LSFI7CisgICAgcmV0dXJuIFZLX1ZJREVPX0NIUk9NQV9TVUJTQU1QTElO R19JTlZBTElEX0tIUjsKK30KKworVmtWaWRlb0NvbXBvbmVudEJpdERlcHRoRmxhZ0JpdHNLSFIg ZmZfdmtfZGVwdGhfZnJvbV9hdl9kZXB0aChpbnQgZGVwdGgpCit7CisgICAgc3dpdGNoIChkZXB0 aCkgeworICAgIGNhc2UgIDg6IHJldHVybiBWS19WSURFT19DT01QT05FTlRfQklUX0RFUFRIXzhf QklUX0tIUjsKKyAgICBjYXNlIDEwOiByZXR1cm4gVktfVklERU9fQ09NUE9ORU5UX0JJVF9ERVBU SF8xMF9CSVRfS0hSOworICAgIGNhc2UgMTI6IHJldHVybiBWS19WSURFT19DT01QT05FTlRfQklU X0RFUFRIXzEyX0JJVF9LSFI7CisgICAgZGVmYXVsdDogYnJlYWs7CisgICAgfQorICAgIHJldHVy biBWS19WSURFT19DT01QT05FTlRfQklUX0RFUFRIX0lOVkFMSURfS0hSOworfQorCitpbnQgZmZf dmtfaDI2NF9sZXZlbF90b19hdihTdGRWaWRlb0gyNjRMZXZlbElkYyBsZXZlbCkKK3sKKyAgICBz d2l0Y2ggKGxldmVsKSB7CisgICAgY2FzZSBTVERfVklERU9fSDI2NF9MRVZFTF9JRENfMV8wOiBy ZXR1cm4gMTA7CisgICAgY2FzZSBTVERfVklERU9fSDI2NF9MRVZFTF9JRENfMV8xOiByZXR1cm4g MTE7CisgICAgY2FzZSBTVERfVklERU9fSDI2NF9MRVZFTF9JRENfMV8yOiByZXR1cm4gMTI7Cisg ICAgY2FzZSBTVERfVklERU9fSDI2NF9MRVZFTF9JRENfMV8zOiByZXR1cm4gMTM7CisgICAgY2Fz ZSBTVERfVklERU9fSDI2NF9MRVZFTF9JRENfMl8wOiByZXR1cm4gMjA7CisgICAgY2FzZSBTVERf VklERU9fSDI2NF9MRVZFTF9JRENfMl8xOiByZXR1cm4gMjE7CisgICAgY2FzZSBTVERfVklERU9f SDI2NF9MRVZFTF9JRENfMl8yOiByZXR1cm4gMjI7CisgICAgY2FzZSBTVERfVklERU9fSDI2NF9M RVZFTF9JRENfM18wOiByZXR1cm4gMzA7CisgICAgY2FzZSBTVERfVklERU9fSDI2NF9MRVZFTF9J RENfM18xOiByZXR1cm4gMzE7CisgICAgY2FzZSBTVERfVklERU9fSDI2NF9MRVZFTF9JRENfM18y OiByZXR1cm4gMzI7CisgICAgY2FzZSBTVERfVklERU9fSDI2NF9MRVZFTF9JRENfNF8wOiByZXR1 cm4gNDA7CisgICAgY2FzZSBTVERfVklERU9fSDI2NF9MRVZFTF9JRENfNF8xOiByZXR1cm4gNDE7 CisgICAgY2FzZSBTVERfVklERU9fSDI2NF9MRVZFTF9JRENfNF8yOiByZXR1cm4gNDI7CisgICAg Y2FzZSBTVERfVklERU9fSDI2NF9MRVZFTF9JRENfNV8wOiByZXR1cm4gNTA7CisgICAgY2FzZSBT VERfVklERU9fSDI2NF9MRVZFTF9JRENfNV8xOiByZXR1cm4gNTE7CisgICAgY2FzZSBTVERfVklE RU9fSDI2NF9MRVZFTF9JRENfNV8yOiByZXR1cm4gNTI7CisgICAgY2FzZSBTVERfVklERU9fSDI2 NF9MRVZFTF9JRENfNl8wOiByZXR1cm4gNjA7CisgICAgY2FzZSBTVERfVklERU9fSDI2NF9MRVZF TF9JRENfNl8xOiByZXR1cm4gNjE7CisgICAgZGVmYXVsdDoKKyAgICBjYXNlIFNURF9WSURFT19I MjY0X0xFVkVMX0lEQ182XzI6IHJldHVybiA2MjsKKyAgICB9Cit9CisKK1N0ZFZpZGVvSDI2NExl dmVsSWRjIGZmX3ZrX2gyNjRfbGV2ZWxfdG9fdmsoaW50IGxldmVsX2lkYykKK3sKKyAgICBzd2l0 Y2ggKGxldmVsX2lkYykgeworICAgIGNhc2UgMTA6IHJldHVybiBTVERfVklERU9fSDI2NF9MRVZF TF9JRENfMV8wOworICAgIGNhc2UgMTE6IHJldHVybiBTVERfVklERU9fSDI2NF9MRVZFTF9JRENf MV8xOworICAgIGNhc2UgMTI6IHJldHVybiBTVERfVklERU9fSDI2NF9MRVZFTF9JRENfMV8yOwor ICAgIGNhc2UgMTM6IHJldHVybiBTVERfVklERU9fSDI2NF9MRVZFTF9JRENfMV8zOworICAgIGNh c2UgMjA6IHJldHVybiBTVERfVklERU9fSDI2NF9MRVZFTF9JRENfMl8wOworICAgIGNhc2UgMjE6 IHJldHVybiBTVERfVklERU9fSDI2NF9MRVZFTF9JRENfMl8xOworICAgIGNhc2UgMjI6IHJldHVy biBTVERfVklERU9fSDI2NF9MRVZFTF9JRENfMl8yOworICAgIGNhc2UgMzA6IHJldHVybiBTVERf VklERU9fSDI2NF9MRVZFTF9JRENfM18wOworICAgIGNhc2UgMzE6IHJldHVybiBTVERfVklERU9f SDI2NF9MRVZFTF9JRENfM18xOworICAgIGNhc2UgMzI6IHJldHVybiBTVERfVklERU9fSDI2NF9M RVZFTF9JRENfM18yOworICAgIGNhc2UgNDA6IHJldHVybiBTVERfVklERU9fSDI2NF9MRVZFTF9J RENfNF8wOworICAgIGNhc2UgNDE6IHJldHVybiBTVERfVklERU9fSDI2NF9MRVZFTF9JRENfNF8x OworICAgIGNhc2UgNDI6IHJldHVybiBTVERfVklERU9fSDI2NF9MRVZFTF9JRENfNF8yOworICAg IGNhc2UgNTA6IHJldHVybiBTVERfVklERU9fSDI2NF9MRVZFTF9JRENfNV8wOworICAgIGNhc2Ug NTE6IHJldHVybiBTVERfVklERU9fSDI2NF9MRVZFTF9JRENfNV8xOworICAgIGNhc2UgNTI6IHJl dHVybiBTVERfVklERU9fSDI2NF9MRVZFTF9JRENfNV8yOworICAgIGNhc2UgNjA6IHJldHVybiBT VERfVklERU9fSDI2NF9MRVZFTF9JRENfNl8wOworICAgIGNhc2UgNjE6IHJldHVybiBTVERfVklE RU9fSDI2NF9MRVZFTF9JRENfNl8xOworICAgIGRlZmF1bHQ6CisgICAgY2FzZSA2MjogcmV0dXJu IFNURF9WSURFT19IMjY0X0xFVkVMX0lEQ182XzI7CisgICAgfQorfQorCitpbnQgZmZfdmtfaDI2 NV9sZXZlbF90b19hdihTdGRWaWRlb0gyNjVMZXZlbElkYyBsZXZlbCkKK3sKKyAgICBzd2l0Y2gg KGxldmVsKSB7CisgICAgY2FzZSBTVERfVklERU9fSDI2NV9MRVZFTF9JRENfMV8wOiByZXR1cm4g MTA7CisgICAgY2FzZSBTVERfVklERU9fSDI2NV9MRVZFTF9JRENfMl8wOiByZXR1cm4gMjA7Cisg ICAgY2FzZSBTVERfVklERU9fSDI2NV9MRVZFTF9JRENfMl8xOiByZXR1cm4gMjE7CisgICAgY2Fz ZSBTVERfVklERU9fSDI2NV9MRVZFTF9JRENfM18wOiByZXR1cm4gMzA7CisgICAgY2FzZSBTVERf VklERU9fSDI2NV9MRVZFTF9JRENfM18xOiByZXR1cm4gMzE7CisgICAgY2FzZSBTVERfVklERU9f SDI2NV9MRVZFTF9JRENfNF8wOiByZXR1cm4gNDA7CisgICAgY2FzZSBTVERfVklERU9fSDI2NV9M RVZFTF9JRENfNF8xOiByZXR1cm4gNDE7CisgICAgY2FzZSBTVERfVklERU9fSDI2NV9MRVZFTF9J RENfNV8wOiByZXR1cm4gNTA7CisgICAgY2FzZSBTVERfVklERU9fSDI2NV9MRVZFTF9JRENfNV8x OiByZXR1cm4gNTE7CisgICAgY2FzZSBTVERfVklERU9fSDI2NV9MRVZFTF9JRENfNl8wOiByZXR1 cm4gNjA7CisgICAgY2FzZSBTVERfVklERU9fSDI2NV9MRVZFTF9JRENfNl8xOiByZXR1cm4gNjE7 CisgICAgZGVmYXVsdDoKKyAgICBjYXNlIFNURF9WSURFT19IMjY1X0xFVkVMX0lEQ182XzI6IHJl dHVybiA2MjsKKyAgICB9Cit9CisKK1N0ZFZpZGVvSDI2NUxldmVsSWRjIGZmX3ZrX2gyNjVfbGV2 ZWxfdG9fdmsoaW50IGxldmVsX2lkYykKK3sKKyAgICBzd2l0Y2ggKGxldmVsX2lkYykgeworICAg IGNhc2UgMTA6IHJldHVybiBTVERfVklERU9fSDI2NV9MRVZFTF9JRENfMV8wOworICAgIGNhc2Ug MjA6IHJldHVybiBTVERfVklERU9fSDI2NV9MRVZFTF9JRENfMl8wOworICAgIGNhc2UgMjE6IHJl dHVybiBTVERfVklERU9fSDI2NV9MRVZFTF9JRENfMl8xOworICAgIGNhc2UgMzA6IHJldHVybiBT VERfVklERU9fSDI2NV9MRVZFTF9JRENfM18wOworICAgIGNhc2UgMzE6IHJldHVybiBTVERfVklE RU9fSDI2NV9MRVZFTF9JRENfM18xOworICAgIGNhc2UgNDA6IHJldHVybiBTVERfVklERU9fSDI2 NV9MRVZFTF9JRENfNF8wOworICAgIGNhc2UgNDE6IHJldHVybiBTVERfVklERU9fSDI2NV9MRVZF TF9JRENfNF8xOworICAgIGNhc2UgNTA6IHJldHVybiBTVERfVklERU9fSDI2NV9MRVZFTF9JRENf NV8wOworICAgIGNhc2UgNTE6IHJldHVybiBTVERfVklERU9fSDI2NV9MRVZFTF9JRENfNV8xOwor ICAgIGNhc2UgNjA6IHJldHVybiBTVERfVklERU9fSDI2NV9MRVZFTF9JRENfNl8wOworICAgIGNh c2UgNjE6IHJldHVybiBTVERfVklERU9fSDI2NV9MRVZFTF9JRENfNl8xOworICAgIGRlZmF1bHQ6 CisgICAgY2FzZSA2MjogcmV0dXJuIFNURF9WSURFT19IMjY1X0xFVkVMX0lEQ182XzI7CisgICAg fQorfQorCitTdGRWaWRlb0FWMUxldmVsIGZmX3ZrX2F2MV9sZXZlbF90b192ayhpbnQgbGV2ZWwp Cit7CisgICAgc3dpdGNoIChsZXZlbCkgeworICAgIGNhc2UgMjA6IHJldHVybiBTVERfVklERU9f QVYxX0xFVkVMXzJfMDsKKyAgICBjYXNlIDIxOiByZXR1cm4gU1REX1ZJREVPX0FWMV9MRVZFTF8y XzE7CisgICAgY2FzZSAyMjogcmV0dXJuIFNURF9WSURFT19BVjFfTEVWRUxfMl8yOworICAgIGNh c2UgMjM6IHJldHVybiBTVERfVklERU9fQVYxX0xFVkVMXzJfMzsKKyAgICBjYXNlIDMwOiByZXR1 cm4gU1REX1ZJREVPX0FWMV9MRVZFTF8zXzA7CisgICAgY2FzZSAzMTogcmV0dXJuIFNURF9WSURF T19BVjFfTEVWRUxfM18xOworICAgIGNhc2UgMzI6IHJldHVybiBTVERfVklERU9fQVYxX0xFVkVM XzNfMjsKKyAgICBjYXNlIDMzOiByZXR1cm4gU1REX1ZJREVPX0FWMV9MRVZFTF8zXzM7CisgICAg Y2FzZSA0MDogcmV0dXJuIFNURF9WSURFT19BVjFfTEVWRUxfNF8wOworICAgIGNhc2UgNDE6IHJl dHVybiBTVERfVklERU9fQVYxX0xFVkVMXzRfMTsKKyAgICBjYXNlIDQyOiByZXR1cm4gU1REX1ZJ REVPX0FWMV9MRVZFTF80XzI7CisgICAgY2FzZSA0MzogcmV0dXJuIFNURF9WSURFT19BVjFfTEVW RUxfNF8zOworICAgIGNhc2UgNTA6IHJldHVybiBTVERfVklERU9fQVYxX0xFVkVMXzVfMDsKKyAg ICBjYXNlIDUxOiByZXR1cm4gU1REX1ZJREVPX0FWMV9MRVZFTF81XzE7CisgICAgY2FzZSA1Mjog cmV0dXJuIFNURF9WSURFT19BVjFfTEVWRUxfNV8yOworICAgIGNhc2UgNTM6IHJldHVybiBTVERf VklERU9fQVYxX0xFVkVMXzVfMzsKKyAgICBjYXNlIDYwOiByZXR1cm4gU1REX1ZJREVPX0FWMV9M RVZFTF82XzA7CisgICAgY2FzZSA2MTogcmV0dXJuIFNURF9WSURFT19BVjFfTEVWRUxfNl8xOwor ICAgIGNhc2UgNjI6IHJldHVybiBTVERfVklERU9fQVYxX0xFVkVMXzZfMjsKKyAgICBjYXNlIDYz OiByZXR1cm4gU1REX1ZJREVPX0FWMV9MRVZFTF82XzM7CisgICAgY2FzZSA3MDogcmV0dXJuIFNU RF9WSURFT19BVjFfTEVWRUxfN18wOworICAgIGNhc2UgNzE6IHJldHVybiBTVERfVklERU9fQVYx X0xFVkVMXzdfMTsKKyAgICBjYXNlIDcyOiByZXR1cm4gU1REX1ZJREVPX0FWMV9MRVZFTF83XzI7 CisgICAgZGVmYXVsdDoKKyAgICBjYXNlIDczOiByZXR1cm4gU1REX1ZJREVPX0FWMV9MRVZFTF83 XzM7CisgICAgfQorfQorCitTdGRWaWRlb0gyNjRQcm9maWxlSWRjIGZmX3ZrX2gyNjRfcHJvZmls ZV90b192ayhpbnQgcHJvZmlsZSkKK3sKKyAgICBzd2l0Y2ggKHByb2ZpbGUpIHsKKyAgICBjYXNl IEFWX1BST0ZJTEVfSDI2NF9DT05TVFJBSU5FRF9CQVNFTElORTogcmV0dXJuIFNURF9WSURFT19I MjY0X1BST0ZJTEVfSURDX0JBU0VMSU5FOworICAgIGNhc2UgQVZfUFJPRklMRV9IMjY0X01BSU46 IHJldHVybiBTVERfVklERU9fSDI2NF9QUk9GSUxFX0lEQ19NQUlOOworICAgIGNhc2UgQVZfUFJP RklMRV9IMjY0X0hJR0g6IHJldHVybiBTVERfVklERU9fSDI2NF9QUk9GSUxFX0lEQ19ISUdIOwor ICAgIGNhc2UgQVZfUFJPRklMRV9IMjY0X0hJR0hfNDQ0X1BSRURJQ1RJVkU6IHJldHVybiBTVERf VklERU9fSDI2NF9QUk9GSUxFX0lEQ19ISUdIXzQ0NF9QUkVESUNUSVZFOworICAgIGRlZmF1bHQ6 IHJldHVybiBTVERfVklERU9fSDI2NF9QUk9GSUxFX0lEQ19JTlZBTElEOworICAgIH0KK30KKwor U3RkVmlkZW9IMjY1UHJvZmlsZUlkYyBmZl92a19oMjY1X3Byb2ZpbGVfdG9fdmsoaW50IHByb2Zp bGUpCit7CisgICAgc3dpdGNoIChwcm9maWxlKSB7CisgICAgY2FzZSBBVl9QUk9GSUxFX0hFVkNf TUFJTjogICAgcmV0dXJuIFNURF9WSURFT19IMjY1X1BST0ZJTEVfSURDX01BSU47CisgICAgY2Fz ZSBBVl9QUk9GSUxFX0hFVkNfTUFJTl8xMDogcmV0dXJuIFNURF9WSURFT19IMjY1X1BST0ZJTEVf SURDX01BSU5fMTA7CisgICAgY2FzZSBBVl9QUk9GSUxFX0hFVkNfUkVYVDogICAgcmV0dXJuIFNU RF9WSURFT19IMjY1X1BST0ZJTEVfSURDX0ZPUk1BVF9SQU5HRV9FWFRFTlNJT05TOworICAgIGRl ZmF1bHQ6IHJldHVybiBTVERfVklERU9fSDI2NV9QUk9GSUxFX0lEQ19JTlZBTElEOworICAgIH0K K30KKworU3RkVmlkZW9BVjFQcm9maWxlIGZmX3ZrX2F2MV9wcm9maWxlX3RvX3ZrKGludCBwcm9m aWxlKQoreworICAgIHN3aXRjaCAocHJvZmlsZSkgeworICAgIGNhc2UgQVZfUFJPRklMRV9BVjFf TUFJTjogcmV0dXJuIFNURF9WSURFT19BVjFfUFJPRklMRV9NQUlOOworICAgIGNhc2UgQVZfUFJP RklMRV9BVjFfSElHSDogcmV0dXJuIFNURF9WSURFT19BVjFfUFJPRklMRV9ISUdIOworICAgIGNh c2UgQVZfUFJPRklMRV9BVjFfUFJPRkVTU0lPTkFMOiByZXR1cm4gU1REX1ZJREVPX0FWMV9QUk9G SUxFX1BST0ZFU1NJT05BTDsKKyAgICBkZWZhdWx0OiByZXR1cm4gU1REX1ZJREVPX0FWMV9QUk9G SUxFX0lOVkFMSUQ7CisgICAgfQorfQorCitpbnQgZmZfdmtfY3JlYXRlX3ZpZXcoRkZWdWxrYW5D b250ZXh0ICpzLCBGRlZrVmlkZW9Db21tb24gKmNvbW1vbiwKKyAgICAgICAgICAgICAgICAgICAg ICBWa0ltYWdlVmlldyAqdmlldywgVmtJbWFnZUFzcGVjdEZsYWdzICphc3BlY3QsCisgICAgICAg ICAgICAgICAgICAgICAgQVZWa0ZyYW1lICpzcmMsIFZrRm9ybWF0IHZrZiwgaW50IGlzX2RwYikK K3sKKyAgICBWa1Jlc3VsdCByZXQ7CisgICAgRkZWdWxrYW5GdW5jdGlvbnMgKnZrID0gJnMtPnZr Zm47CisgICAgVmtJbWFnZUFzcGVjdEZsYWdzIGFzcGVjdF9tYXNrID0gZmZfdmtfYXNwZWN0X2Jp dHNfZnJvbV92a2ZtdCh2a2YpOworCisgICAgVmtTYW1wbGVyWWNiY3JDb252ZXJzaW9uSW5mbyB5 dXZfc2FtcGxlcl9pbmZvID0geworICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9T QU1QTEVSX1lDQkNSX0NPTlZFUlNJT05fSU5GTywKKyAgICAgICAgLmNvbnZlcnNpb24gPSBjb21t b24tPnl1dl9zYW1wbGVyLAorICAgIH07CisgICAgVmtJbWFnZVZpZXdDcmVhdGVJbmZvIGltZ192 aWV3X2NyZWF0ZV9pbmZvID0geworICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9J TUFHRV9WSUVXX0NSRUFURV9JTkZPLAorICAgICAgICAucE5leHQgPSAmeXV2X3NhbXBsZXJfaW5m bywKKyAgICAgICAgLnZpZXdUeXBlID0gY29tbW9uLT5sYXllcmVkX2RwYiAmJiBpc19kcGIgPwor ICAgICAgICAgICAgICAgICAgICBWS19JTUFHRV9WSUVXX1RZUEVfMkRfQVJSQVkgOiBWS19JTUFH RV9WSUVXX1RZUEVfMkQsCisgICAgICAgIC5mb3JtYXQgPSB2a2YsCisgICAgICAgIC5pbWFnZSA9 IHNyYy0+aW1nWzBdLAorICAgICAgICAuY29tcG9uZW50cyA9IChWa0NvbXBvbmVudE1hcHBpbmcp IHsKKyAgICAgICAgICAgIC5yID0gVktfQ09NUE9ORU5UX1NXSVpaTEVfSURFTlRJVFksCisgICAg ICAgICAgICAuZyA9IFZLX0NPTVBPTkVOVF9TV0laWkxFX0lERU5USVRZLAorICAgICAgICAgICAg LmIgPSBWS19DT01QT05FTlRfU1dJWlpMRV9JREVOVElUWSwKKyAgICAgICAgICAgIC5hID0gVktf Q09NUE9ORU5UX1NXSVpaTEVfSURFTlRJVFksCisgICAgICAgIH0sCisgICAgICAgIC5zdWJyZXNv dXJjZVJhbmdlID0gKFZrSW1hZ2VTdWJyZXNvdXJjZVJhbmdlKSB7CisgICAgICAgICAgICAuYXNw ZWN0TWFzayAgICAgPSBWS19JTUFHRV9BU1BFQ1RfQ09MT1JfQklULAorICAgICAgICAgICAgLmJh c2VBcnJheUxheWVyID0gMCwKKyAgICAgICAgICAgIC5sYXllckNvdW50ICAgICA9IGNvbW1vbi0+ bGF5ZXJlZF9kcGIgJiYgaXNfZHBiID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZL X1JFTUFJTklOR19BUlJBWV9MQVlFUlMgOiAxLAorICAgICAgICAgICAgLmxldmVsQ291bnQgICAg ID0gMSwKKyAgICAgICAgfSwKKyAgICB9OworCisgICAgcmV0ID0gdmstPkNyZWF0ZUltYWdlVmll dyhzLT5od2N0eC0+YWN0X2RldiwgJmltZ192aWV3X2NyZWF0ZV9pbmZvLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcy0+aHdjdHgtPmFsbG9jLCB2aWV3KTsKKyAgICBpZiAocmV0ICE9 IFZLX1NVQ0NFU1MpCisgICAgICAgIHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOworCisgICAgKmFz cGVjdCA9IGFzcGVjdF9tYXNrOworCisgICAgcmV0dXJuIDA7Cit9CisKK2F2X2NvbGQgdm9pZCBm Zl92a192aWRlb19jb21tb25fdW5pbml0KEZGVnVsa2FuQ29udGV4dCAqcywKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZGVmtWaWRlb0NvbW1vbiAqY29tbW9uKQorewor ICAgIEZGVnVsa2FuRnVuY3Rpb25zICp2ayA9ICZzLT52a2ZuOworCisgICAgaWYgKGNvbW1vbi0+ c2Vzc2lvbikgeworICAgICAgICB2ay0+RGVzdHJveVZpZGVvU2Vzc2lvbktIUihzLT5od2N0eC0+ YWN0X2RldiwgY29tbW9uLT5zZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzLT5od2N0eC0+YWxsb2MpOworICAgICAgICBjb21tb24tPnNlc3Npb24gPSBWS19OVUxM X0hBTkRMRTsKKyAgICB9CisKKyAgICBpZiAoY29tbW9uLT5uYl9tZW0gJiYgY29tbW9uLT5tZW0p CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY29tbW9uLT5uYl9tZW07IGkrKykKKyAgICAg ICAgICAgIHZrLT5GcmVlTWVtb3J5KHMtPmh3Y3R4LT5hY3RfZGV2LCBjb21tb24tPm1lbVtpXSwg cy0+aHdjdHgtPmFsbG9jKTsKKworICAgIGF2X2ZyZWVwKCZjb21tb24tPm1lbSk7CisKKyAgICBp ZiAoY29tbW9uLT5sYXllcmVkX3ZpZXcpCisgICAgICAgIHZrLT5EZXN0cm95SW1hZ2VWaWV3KHMt Pmh3Y3R4LT5hY3RfZGV2LCBjb21tb24tPmxheWVyZWRfdmlldywKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcy0+aHdjdHgtPmFsbG9jKTsKKworICAgIGF2X2ZyYW1lX2ZyZWUoJmNvbW1v bi0+bGF5ZXJlZF9mcmFtZSk7CisKKyAgICBhdl9idWZmZXJfdW5yZWYoJmNvbW1vbi0+ZHBiX2h3 ZmNfcmVmKTsKKworICAgIGlmIChjb21tb24tPnl1dl9zYW1wbGVyKQorICAgICAgICB2ay0+RGVz dHJveVNhbXBsZXJZY2JjckNvbnZlcnNpb24ocy0+aHdjdHgtPmFjdF9kZXYsIGNvbW1vbi0+eXV2 X3NhbXBsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLT5o d2N0eC0+YWxsb2MpOworfQorCithdl9jb2xkIGludCBmZl92a192aWRlb19jb21tb25faW5pdChB VkNvZGVjQ29udGV4dCAqYXZjdHgsIEZGVnVsa2FuQ29udGV4dCAqcywKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEZGVmtWaWRlb0NvbW1vbiAqY29tbW9uLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgVmtWaWRlb1Nlc3Npb25DcmVhdGVJbmZvS0hSICpz ZXNzaW9uX2NyZWF0ZSkKK3sKKyAgICBpbnQgZXJyOworICAgIFZrUmVzdWx0IHJldDsKKyAgICBG RlZ1bGthbkZ1bmN0aW9ucyAqdmsgPSAmcy0+dmtmbjsKKyAgICBWa1ZpZGVvU2Vzc2lvbk1lbW9y eVJlcXVpcmVtZW50c0tIUiAqbWVtID0gTlVMTDsKKyAgICBWa0JpbmRWaWRlb1Nlc3Npb25NZW1v cnlJbmZvS0hSICpiaW5kX21lbSA9IE5VTEw7CisKKyAgICBpbnQgY3hwb3MgPSAwLCBjeXBvcyA9 IDA7CisgICAgVmtTYW1wbGVyWWNiY3JDb252ZXJzaW9uQ3JlYXRlSW5mbyB5dXZfc2FtcGxlcl9p bmZvID0geworICAgICAgICAuc1R5cGUgICAgICA9IFZLX1NUUlVDVFVSRV9UWVBFX1NBTVBMRVJf WUNCQ1JfQ09OVkVSU0lPTl9DUkVBVEVfSU5GTywKKyAgICAgICAgLmNvbXBvbmVudHMgPSBmZl9j b21wX2lkZW50aXR5X21hcCwKKyAgICAgICAgLnljYmNyTW9kZWwgPSBWS19TQU1QTEVSX1lDQkNS X01PREVMX0NPTlZFUlNJT05fUkdCX0lERU5USVRZLAorICAgICAgICAueWNiY3JSYW5nZSA9IGF2 Y3R4LT5jb2xvcl9yYW5nZSA9PSBBVkNPTF9SQU5HRV9NUEVHLCAvKiBJZ25vcmVkICovCisgICAg ICAgIC5mb3JtYXQgICAgID0gc2Vzc2lvbl9jcmVhdGUtPnBpY3R1cmVGb3JtYXQsCisgICAgfTsK KworICAgIC8qIENyZWF0ZSBpZGVudGl0eSBZVVYgc2FtcGxlcgorICAgICAqIChWa0ltYWdlVmll d3Mgb2YgWVVWIGltYWdlIGZvcm1hdHMgcmVxdWlyZSBpdCwgZXZlbiBpZiBpdCBkb2VzIG5vdGhp bmcpICovCisgICAgYXZfY2hyb21hX2xvY2F0aW9uX2VudW1fdG9fcG9zKCZjeHBvcywgJmN5cG9z LCBhdmN0eC0+Y2hyb21hX3NhbXBsZV9sb2NhdGlvbik7CisgICAgeXV2X3NhbXBsZXJfaW5mby54 Q2hyb21hT2Zmc2V0ID0gY3hwb3MgPj4gNzsKKyAgICB5dXZfc2FtcGxlcl9pbmZvLnlDaHJvbWFP ZmZzZXQgPSBjeXBvcyA+PiA3OworICAgIHJldCA9IHZrLT5DcmVhdGVTYW1wbGVyWWNiY3JDb252 ZXJzaW9uKHMtPmh3Y3R4LT5hY3RfZGV2LCAmeXV2X3NhbXBsZXJfaW5mbywKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLT5od2N0eC0+YWxsb2MsICZjb21tb24t Pnl1dl9zYW1wbGVyKTsKKyAgICBpZiAocmV0ICE9IFZLX1NVQ0NFU1MpCisgICAgICAgIHJldHVy biBBVkVSUk9SX0VYVEVSTkFMOworCisgICAgLyogQ3JlYXRlIHNlc3Npb24gKi8KKyAgICByZXQg PSB2ay0+Q3JlYXRlVmlkZW9TZXNzaW9uS0hSKHMtPmh3Y3R4LT5hY3RfZGV2LCBzZXNzaW9uX2Ny ZWF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMtPmh3Y3R4LT5hbGxv YywgJmNvbW1vbi0+c2Vzc2lvbik7CisgICAgaWYgKHJldCAhPSBWS19TVUNDRVNTKQorICAgICAg ICByZXR1cm4gQVZFUlJPUl9FWFRFUk5BTDsKKworICAgIC8qIEdldCBtZW1vcnkgcmVxdWlyZW1l bnRzICovCisgICAgcmV0ID0gdmstPkdldFZpZGVvU2Vzc2lvbk1lbW9yeVJlcXVpcmVtZW50c0tI UihzLT5od2N0eC0+YWN0X2RldiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbW1vbi0+c2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjb21tb24tPm5iX21lbSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworICAgIGlmIChy ZXQgIT0gVktfU1VDQ0VTUykgeworICAgICAgICBlcnIgPSBBVkVSUk9SX0VYVEVSTkFMOworICAg ICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgLyogQWxsb2NhdGUgYWxsIG1lbW9yeSBuZWVk ZWQgdG8gYWN0dWFsbHkgYWxsb2NhdGUgbWVtb3J5ICovCisgICAgY29tbW9uLT5tZW0gPSBhdl9t YWxsb2N6KHNpemVvZigqY29tbW9uLT5tZW0pKmNvbW1vbi0+bmJfbWVtKTsKKyAgICBpZiAoIWNv bW1vbi0+bWVtKSB7CisgICAgICAgIGVyciA9IEFWRVJST1IoRU5PTUVNKTsKKyAgICAgICAgZ290 byBmYWlsOworICAgIH0KKyAgICBtZW0gPSBhdl9tYWxsb2N6KHNpemVvZigqbWVtKSpjb21tb24t Pm5iX21lbSk7CisgICAgaWYgKCFtZW0pIHsKKyAgICAgICAgZXJyID0gQVZFUlJPUihFTk9NRU0p OworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorICAgIGJpbmRfbWVtID0gYXZfbWFsbG9jeihz aXplb2YoKmJpbmRfbWVtKSpjb21tb24tPm5iX21lbSk7CisgICAgaWYgKCFiaW5kX21lbSkgewor ICAgICAgICBlcnIgPSBBVkVSUk9SKEVOT01FTSk7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9 CisKKyAgICAvKiBTZXQgdGhlIG5lZWRlZCBmaWVsZHMgdG8gZ2V0IHRoZSBtZW1vcnkgcmVxdWly ZW1lbnRzICovCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb21tb24tPm5iX21lbTsgaSsrKSB7 CisgICAgICAgIG1lbVtpXSA9IChWa1ZpZGVvU2Vzc2lvbk1lbW9yeVJlcXVpcmVtZW50c0tIUikg eworICAgICAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfVklERU9fU0VTU0lPTl9N RU1PUllfUkVRVUlSRU1FTlRTX0tIUiwKKyAgICAgICAgfTsKKyAgICB9CisKKyAgICAvKiBGaW5h bGx5IGdldCB0aGUgbWVtb3J5IHJlcXVpcmVtZW50cyAqLworICAgIHJldCA9IHZrLT5HZXRWaWRl b1Nlc3Npb25NZW1vcnlSZXF1aXJlbWVudHNLSFIocy0+aHdjdHgtPmFjdF9kZXYsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tb24tPnNlc3Np b24sICZjb21tb24tPm5iX21lbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIG1lbSk7CisgICAgaWYgKHJldCAhPSBWS19TVUNDRVNTKSB7CisgICAg ICAgIGVyciA9IEFWRVJST1JfRVhURVJOQUw7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisK KyAgICAvKiBOb3cgYWxsb2NhdGUgZWFjaCByZXF1ZXN0ZWQgbWVtb3J5LgorICAgICAqIEZvciBy aWNpbmcsIGNvdWxkIHBvb2wgdG9nZXRoZXIgbWVtb3J5IHRoYXQgZW5kcyB1cCBpbiB0aGUgc2Ft ZSBpbmRleC4gKi8KKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvbW1vbi0+bmJfbWVtOyBpKysp IHsKKyAgICAgICAgZXJyID0gZmZfdmtfYWxsb2NfbWVtKHMsICZtZW1baV0ubWVtb3J5UmVxdWly ZW1lbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVUlOVDMyX01BWCwgTlVMTCwg TlVMTCwgJmNvbW1vbi0+bWVtW2ldKTsKKyAgICAgICAgaWYgKGVyciA8IDApCisgICAgICAgICAg ICBnb3RvIGZhaWw7CisKKyAgICAgICAgYmluZF9tZW1baV0gPSAoVmtCaW5kVmlkZW9TZXNzaW9u TWVtb3J5SW5mb0tIUikgeworICAgICAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVf QklORF9WSURFT19TRVNTSU9OX01FTU9SWV9JTkZPX0tIUiwKKyAgICAgICAgICAgIC5tZW1vcnkg PSBjb21tb24tPm1lbVtpXSwKKyAgICAgICAgICAgIC5tZW1vcnlCaW5kSW5kZXggPSBtZW1baV0u bWVtb3J5QmluZEluZGV4LAorICAgICAgICAgICAgLm1lbW9yeU9mZnNldCA9IDAsCisgICAgICAg ICAgICAubWVtb3J5U2l6ZSA9IG1lbVtpXS5tZW1vcnlSZXF1aXJlbWVudHMuc2l6ZSwKKyAgICAg ICAgfTsKKworICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19WRVJCT1NFLCAiQWxsb2NhdGlu ZyAlIlBSSXU2NCIgYnl0ZXMgaW4gYmluZCBpbmRleCAlaSBmb3IgdmlkZW8gc2Vzc2lvblxuIiwK KyAgICAgICAgICAgICAgIGJpbmRfbWVtW2ldLm1lbW9yeVNpemUsIGJpbmRfbWVtW2ldLm1lbW9y eUJpbmRJbmRleCk7CisgICAgfQorCisgICAgLyogQmluZCB0aGUgYWxsb2NhdGVkIG1lbW9yeSAq LworICAgIHJldCA9IHZrLT5CaW5kVmlkZW9TZXNzaW9uTWVtb3J5S0hSKHMtPmh3Y3R4LT5hY3Rf ZGV2LCBjb21tb24tPnNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29tbW9uLT5uYl9tZW0sIGJpbmRfbWVtKTsKKyAgICBpZiAocmV0ICE9IFZLX1NVQ0NF U1MpIHsKKyAgICAgICAgZXJyID0gQVZFUlJPUl9FWFRFUk5BTDsKKyAgICAgICAgZ290byBmYWls OworICAgIH0KKworICAgIGF2X2ZyZWVwKCZtZW0pOworICAgIGF2X2ZyZWVwKCZiaW5kX21lbSk7 CisKKyAgICByZXR1cm4gMDsKKworZmFpbDoKKyAgICBhdl9mcmVlcCgmbWVtKTsKKyAgICBhdl9m cmVlcCgmYmluZF9tZW0pOworCisgICAgZmZfdmtfdmlkZW9fY29tbW9uX3VuaW5pdChzLCBjb21t b24pOworICAgIHJldHVybiBlcnI7Cit9Ci0tIAoyLjQ5LjEKCgpGcm9tIDNlNGRhOTNkYWFlOTYx YmE2YjllODUzYzJlOGY0M2I1YTlmOWMxMDkgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCkZyb206 IEphbWFpa2ExIDxsdWthc3pjejE4QHdwLnBsPgpEYXRlOiBXZWQsIDMgU2VwIDIwMjUgMTM6NDI6 MjUgKzAwMDAKU3ViamVjdDogW1BBVENIIDA5MS8xMThdIENoYW5naW5nIHZ1bGthbiBmaWxlIGRp cmVjdG9yeQoKLS0tCiBsaWJhdmNvZGVjL3Z1bGthbl92cDkuYyB8IDM3MSAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgMzcxIGRlbGV0aW9u cygtKQogZGVsZXRlIG1vZGUgMTAwNjQ0IGxpYmF2Y29kZWMvdnVsa2FuX3ZwOS5jCgpkaWZmIC0t Z2l0IGEvbGliYXZjb2RlYy92dWxrYW5fdnA5LmMgYi9saWJhdmNvZGVjL3Z1bGthbl92cDkuYwpk ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2I4NTJhMjlhNS4uMDAwMDAwMDAwMAotLS0g YS9saWJhdmNvZGVjL3Z1bGthbl92cDkuYworKysgL2Rldi9udWxsCkBAIC0xLDM3MSArMCwwIEBA Ci0vKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgotICoKLSAqIEZGbXBlZyBpcyBm cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBp dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExp Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl cgotICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55 IGxhdGVyIHZlcnNpb24uCi0gKgotICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9y IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3Nl ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNo b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp YwotICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJl ZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0 aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQotICovCi0KLSNpbmNsdWRlICJ2cDlk ZWMuaCIKLQotI2luY2x1ZGUgInZ1bGthbl9kZWNvZGUuaCIKLQotY29uc3QgRkZWdWxrYW5EZWNv ZGVEZXNjcmlwdG9yIGZmX3ZrX2RlY192cDlfZGVzYyA9IHsKLSAgICAuY29kZWNfaWQgICAgICAg ICA9IEFWX0NPREVDX0lEX1ZQOSwKLSAgICAuZGVjb2RlX2V4dGVuc2lvbiA9IEZGX1ZLX0VYVF9W SURFT19ERUNPREVfVlA5LAotICAgIC5xdWV1ZV9mbGFncyAgICAgID0gVktfUVVFVUVfVklERU9f REVDT0RFX0JJVF9LSFIsCi0gICAgLmRlY29kZV9vcCAgICAgICAgPSBWS19WSURFT19DT0RFQ19P UEVSQVRJT05fREVDT0RFX1ZQOV9CSVRfS0hSLAotICAgIC5leHRfcHJvcHMgPSB7Ci0gICAgICAg IC5leHRlbnNpb25OYW1lID0gVktfU1REX1ZVTEtBTl9WSURFT19DT0RFQ19WUDlfREVDT0RFX0VY VEVOU0lPTl9OQU1FLAotICAgICAgICAuc3BlY1ZlcnNpb24gICA9IFZLX1NURF9WVUxLQU5fVklE RU9fQ09ERUNfVlA5X0RFQ09ERV9TUEVDX1ZFUlNJT04sCi0gICAgfSwKLX07Ci0KLXR5cGVkZWYg c3RydWN0IFZQOVZ1bGthbkRlY29kZVBpY3R1cmUgewotICAgIEZGVnVsa2FuRGVjb2RlUGljdHVy ZSAgICAgICAgICAgdnA7Ci0KLSAgICAvKiBUT0RPOiBpbnZlc3RpZ2F0ZSBpZiB0aGlzIGNhbiBi ZSByZW1vdmVkIHRvIG1ha2UgZGVjb2RpbmcgY29tcGxldGVseQotICAgICAqIGluZGVwZW5kZW50 LiAqLwotICAgIEZGVnVsa2FuRGVjb2RlQ29udGV4dCAgICAgICAgICAqZGVjOwotCi0gICAgLyog Q3VycmVudCBwaWN0dXJlICovCi0gICAgU3RkVmlkZW9WUDlDb2xvckNvbmZpZyBjb2xvcl9jb25m aWc7Ci0gICAgU3RkVmlkZW9WUDlTZWdtZW50YXRpb24gc2VnbWVudGF0aW9uOwotICAgIFN0ZFZp ZGVvVlA5TG9vcEZpbHRlciBsb29wX2ZpbHRlcjsKLSAgICBTdGRWaWRlb0RlY29kZVZQOVBpY3R1 cmVJbmZvIHN0ZF9waWNfaW5mbzsKLSAgICBWa1ZpZGVvRGVjb2RlVlA5UGljdHVyZUluZm9LSFIg dnA5X3BpY19pbmZvOwotCi0gICAgY29uc3QgVlA5RnJhbWUgKnJlZl9zcmNbOF07Ci0KLSAgICB1 aW50OF90IGZyYW1lX2lkX3NldDsKLSAgICB1aW50OF90IGZyYW1lX2lkOwotICAgIHVpbnQ4X3Qg cmVmX2ZyYW1lX3NpZ25fYmlhc19tYXNrOwotfSBWUDlWdWxrYW5EZWNvZGVQaWN0dXJlOwotCi1z dGF0aWMgaW50IHZrX3ZwOV9maWxsX3BpY3QoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LCBjb25zdCBW UDlGcmFtZSAqKnJlZl9zcmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVmtWaWRlb1Jl ZmVyZW5jZVNsb3RJbmZvS0hSICpyZWZfc2xvdCwgICAgICAvKiBNYWluIHN0cnVjdHVyZSAqLwot ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZrVmlkZW9QaWN0dXJlUmVzb3VyY2VJbmZvS0hS ICpyZWYsICAgICAgICAgLyogR29lcyBpbiBeICovCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3QgVlA5RnJhbWUgKnBpYywgaW50IGlzX2N1cnJlbnQpCi17Ci0gICAgRkZWdWxrYW5E ZWNvZGVDb250ZXh0ICpkZWMgPSBhdmN0eC0+aW50ZXJuYWwtPmh3YWNjZWxfcHJpdl9kYXRhOwot ICAgIEZGVnVsa2FuRGVjb2RlU2hhcmVkICpjdHggPSBkZWMtPnNoYXJlZF9jdHg7Ci0gICAgVlA5 VnVsa2FuRGVjb2RlUGljdHVyZSAqaHAgPSBwaWMtPmh3YWNjZWxfcGljdHVyZV9wcml2YXRlOwot ICAgIEZGVnVsa2FuRGVjb2RlUGljdHVyZSAqdmtwaWMgPSAmaHAtPnZwOwotCi0gICAgaW50IGVy ciA9IGZmX3ZrX2RlY29kZV9wcmVwYXJlX2ZyYW1lKGRlYywgcGljLT50Zi5mLCB2a3BpYywgaXNf Y3VycmVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjLT5k ZWRpY2F0ZWRfZHBiKTsKLSAgICBpZiAoZXJyIDwgMCkKLSAgICAgICAgcmV0dXJuIGVycjsKLQot ICAgICpyZWYgPSAoVmtWaWRlb1BpY3R1cmVSZXNvdXJjZUluZm9LSFIpIHsKLSAgICAgICAgLnNU eXBlID0gVktfU1RSVUNUVVJFX1RZUEVfVklERU9fUElDVFVSRV9SRVNPVVJDRV9JTkZPX0tIUiwK LSAgICAgICAgLmNvZGVkT2Zmc2V0ID0gKFZrT2Zmc2V0MkQpeyAwLCAwIH0sCi0gICAgICAgIC5j b2RlZEV4dGVudCA9IChWa0V4dGVudDJEKXsgcGljLT50Zi5mLT53aWR0aCwgcGljLT50Zi5mLT5o ZWlnaHQgfSwKLSAgICAgICAgLmJhc2VBcnJheUxheWVyID0gKGRlYy0+ZGVkaWNhdGVkX2RwYiAm JiBjdHgtPmNvbW1vbi5sYXllcmVkX2RwYikgPwotICAgICAgICAgICAgICAgICAgICAgICAgICBo cC0+ZnJhbWVfaWQgOiAwLAotICAgICAgICAuaW1hZ2VWaWV3QmluZGluZyA9IHZrcGljLT52aWV3 LnJlZlswXSwKLSAgICB9OwotCi0gICAgKnJlZl9zbG90ID0gKFZrVmlkZW9SZWZlcmVuY2VTbG90 SW5mb0tIUikgewotICAgICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9WSURFT19SRUZF UkVOQ0VfU0xPVF9JTkZPX0tIUiwKLSAgICAgICAgLnNsb3RJbmRleCA9IGhwLT5mcmFtZV9pZCwK LSAgICAgICAgLnBQaWN0dXJlUmVzb3VyY2UgPSByZWYsCi0gICAgfTsKLQotICAgIGlmIChyZWZf c3JjKQotICAgICAgICAqcmVmX3NyYyA9IHBpYzsKLQotICAgIHJldHVybiAwOwotfQotCi1zdGF0 aWMgZW51bSBTdGRWaWRlb1ZQOUludGVycG9sYXRpb25GaWx0ZXIgcmVtYXBfaW50ZXJwKHVpbnQ4 X3QgaXNfZmlsdGVyX3N3aXRjaGFibGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgcmF3X2ludGVycG9sYXRpb25fZmlsdGVy X3R5cGUpCi17Ci0gICAgc3RhdGljIGNvbnN0IGVudW0gU3RkVmlkZW9WUDlJbnRlcnBvbGF0aW9u RmlsdGVyIHJlbWFwW10gPSB7Ci0gICAgICAgIFNURF9WSURFT19WUDlfSU5URVJQT0xBVElPTl9G SUxURVJfRUlHSFRUQVBfU01PT1RILAotICAgICAgICBTVERfVklERU9fVlA5X0lOVEVSUE9MQVRJ T05fRklMVEVSX0VJR0hUVEFQLAotICAgICAgICBTVERfVklERU9fVlA5X0lOVEVSUE9MQVRJT05f RklMVEVSX0VJR0hUVEFQX1NIQVJQLAotICAgICAgICBTVERfVklERU9fVlA5X0lOVEVSUE9MQVRJ T05fRklMVEVSX0JJTElORUFSLAotICAgIH07Ci0gICAgaWYgKGlzX2ZpbHRlcl9zd2l0Y2hhYmxl KQotICAgICAgICByZXR1cm4gU1REX1ZJREVPX1ZQOV9JTlRFUlBPTEFUSU9OX0ZJTFRFUl9TV0lU Q0hBQkxFOwotICAgIHJldHVybiByZW1hcFtyYXdfaW50ZXJwb2xhdGlvbl9maWx0ZXJfdHlwZV07 Ci19Ci0KLXN0YXRpYyBpbnQgdmtfdnA5X3N0YXJ0X2ZyYW1lKEFWQ29kZWNDb250ZXh0ICAgICAg ICAgICphdmN0eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2X3VudXNlZCBjb25z dCBBVkJ1ZmZlclJlZiAqYnVmZmVyX3JlZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGF2X3VudXNlZCBjb25zdCB1aW50OF90ICpidWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBhdl91bnVzZWQgdWludDMyX3QgICAgICAgc2l6ZSkKLXsKLSAgICBpbnQgZXJyOwot ICAgIGludCByZWZfY291bnQgPSAwOwotICAgIGNvbnN0IFZQOUNvbnRleHQgKnByaXYgPSBhdmN0 eC0+cHJpdl9kYXRhOwotICAgIGNvbnN0IENvZGVkQml0c3RyZWFtVlA5Q29udGV4dCAqdnA5ID0g cHJpdi0+Y2JjLT5wcml2X2RhdGE7Ci0gICAgY29uc3QgVlA5U2hhcmVkQ29udGV4dCAqcyA9ICZw cml2LT5zOwotICAgIHVpbnQzMl90IGZyYW1lX2lkX2FsbG9jX21hc2sgPSAwOwotCi0gICAgY29u c3QgVlA5RnJhbWUgKnBpYyA9ICZzLT5mcmFtZXNbQ1VSX0ZSQU1FXTsKLSAgICBGRlZ1bGthbkRl Y29kZUNvbnRleHQgKmRlYyA9IGF2Y3R4LT5pbnRlcm5hbC0+aHdhY2NlbF9wcml2X2RhdGE7Ci0g ICAgdWludDhfdCBwcm9maWxlID0gKHBpYy0+ZnJhbWVfaGVhZGVyLT5wcm9maWxlX2hpZ2hfYml0 IDw8IDEpIHwgcGljLT5mcmFtZV9oZWFkZXItPnByb2ZpbGVfbG93X2JpdDsKLQotICAgIFZQOVZ1 bGthbkRlY29kZVBpY3R1cmUgKmFwID0gcGljLT5od2FjY2VsX3BpY3R1cmVfcHJpdmF0ZTsKLSAg ICBGRlZ1bGthbkRlY29kZVBpY3R1cmUgKnZwID0gJmFwLT52cDsKLQotICAgIC8qIFVzZSB0aGUg Y3VycmVudCBmcmFtZV9pZHMgaW4gcmVmX2ZyYW1lc1tdIHRvIGRlY2lkZSBvY2N1cGllZCBmcmFt ZV9pZHMgKi8KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IFNURF9WSURFT19WUDlfTlVNX1JFRl9G UkFNRVM7IGkrKykgewotICAgICAgICBjb25zdCBWUDlWdWxrYW5EZWNvZGVQaWN0dXJlKiBycCA9 IHMtPnJlZl9mcmFtZXNbaV0uaHdhY2NlbF9waWN0dXJlX3ByaXZhdGU7Ci0gICAgICAgIGlmIChy cCkKLSAgICAgICAgICAgIGZyYW1lX2lkX2FsbG9jX21hc2sgfD0gMSA8PCBycC0+ZnJhbWVfaWQ7 Ci0gICAgfQotCi0gICAgaWYgKCFhcC0+ZnJhbWVfaWRfc2V0KSB7Ci0gICAgICAgIHVuc2lnbmVk IHNsb3RfaWR4ID0gMDsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDMyOyBpKysp IHsKLSAgICAgICAgICAgIGlmICghKGZyYW1lX2lkX2FsbG9jX21hc2sgJiAoMSA8PCBpKSkpIHsK LSAgICAgICAgICAgICAgICBzbG90X2lkeCA9IGk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgYXAtPmZyYW1lX2lkID0gc2xvdF9pZHg7 Ci0gICAgICAgIGFwLT5mcmFtZV9pZF9zZXQgPSAxOwotICAgICAgICBmcmFtZV9pZF9hbGxvY19t YXNrIHw9ICgxIDw8IHNsb3RfaWR4KTsKLSAgICB9Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8 IFNURF9WSURFT19WUDlfUkVGU19QRVJfRlJBTUU7IGkrKykgewotICAgICAgICBjb25zdCBpbnQg aWR4ID0gcGljLT5mcmFtZV9oZWFkZXItPnJlZl9mcmFtZV9pZHhbaV07Ci0gICAgICAgIGNvbnN0 IFZQOUZyYW1lICpyZWZfZnJhbWUgPSAmcy0+cmVmX2ZyYW1lc1tpZHhdOwotICAgICAgICBWUDlW dWxrYW5EZWNvZGVQaWN0dXJlICpocCA9IHJlZl9mcmFtZS0+aHdhY2NlbF9waWN0dXJlX3ByaXZh dGU7Ci0gICAgICAgIGludCBmb3VuZCA9IDA7Ci0KLSAgICAgICAgaWYgKCFyZWZfZnJhbWUtPnRm LmYpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8 IHJlZl9jb3VudDsgaisrKSB7Ci0gICAgICAgICAgICBpZiAodnAtPnJlZl9zbG90c1tqXS5zbG90 SW5kZXggPT0gaHAtPmZyYW1lX2lkKSB7Ci0gICAgICAgICAgICAgICAgZm91bmQgPSAxOwotICAg ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlm IChmb3VuZCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGVyciA9IHZrX3ZwOV9m aWxsX3BpY3QoYXZjdHgsICZhcC0+cmVmX3NyY1tyZWZfY291bnRdLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICZ2cC0+cmVmX3Nsb3RzW3JlZl9jb3VudF0sICZ2cC0+cmVmc1tyZWZf Y291bnRdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZl9mcmFtZSwgMCk7Ci0g ICAgICAgIGlmIChlcnIgPCAwKQotICAgICAgICAgICAgcmV0dXJuIGVycjsKLQotICAgICAgICBy ZWZfY291bnQrKzsKLSAgICB9Ci0KLSAgICBlcnIgPSB2a192cDlfZmlsbF9waWN0KGF2Y3R4LCBO VUxMLCAmdnAtPnJlZl9zbG90LCAmdnAtPnJlZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg IHBpYywgMSk7Ci0gICAgaWYgKGVyciA8IDApCi0gICAgICAgIHJldHVybiBlcnI7Ci0KLSAgICBh cC0+bG9vcF9maWx0ZXIgPSAoU3RkVmlkZW9WUDlMb29wRmlsdGVyKSB7Ci0gICAgICAgIC5mbGFn cyA9IChTdGRWaWRlb1ZQOUxvb3BGaWx0ZXJGbGFncykgewotICAgICAgICAgICAgLmxvb3BfZmls dGVyX2RlbHRhX2VuYWJsZWQgPSBwaWMtPmZyYW1lX2hlYWRlci0+bG9vcF9maWx0ZXJfZGVsdGFf ZW5hYmxlZCwKLSAgICAgICAgICAgIC5sb29wX2ZpbHRlcl9kZWx0YV91cGRhdGUgPSBwaWMtPmZy YW1lX2hlYWRlci0+bG9vcF9maWx0ZXJfZGVsdGFfdXBkYXRlLAotICAgICAgICB9LAotICAgICAg ICAubG9vcF9maWx0ZXJfbGV2ZWwgPSBwaWMtPmZyYW1lX2hlYWRlci0+bG9vcF9maWx0ZXJfbGV2 ZWwsCi0gICAgICAgIC5sb29wX2ZpbHRlcl9zaGFycG5lc3MgPSBwaWMtPmZyYW1lX2hlYWRlci0+ bG9vcF9maWx0ZXJfc2hhcnBuZXNzLAotICAgICAgICAudXBkYXRlX3JlZl9kZWx0YSA9IDB4MCwK LSAgICAgICAgLnVwZGF0ZV9tb2RlX2RlbHRhID0gMHgwLAotICAgIH07Ci0KLSAgICBmb3IgKGlu dCBpID0gMDsgaSA8IFNURF9WSURFT19WUDlfTUFYX1JFRl9GUkFNRVM7IGkrKykgewotICAgICAg ICBhcC0+bG9vcF9maWx0ZXIubG9vcF9maWx0ZXJfcmVmX2RlbHRhc1tpXSA9IHZwOS0+bG9vcF9m aWx0ZXJfcmVmX2RlbHRhc1tpXTsKLSAgICAgICAgYXAtPmxvb3BfZmlsdGVyLnVwZGF0ZV9yZWZf ZGVsdGEgfD0gcGljLT5mcmFtZV9oZWFkZXItPnVwZGF0ZV9yZWZfZGVsdGFbaV07Ci0gICAgfQot ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgU1REX1ZJREVPX1ZQOV9MT09QX0ZJTFRFUl9BREpVU1RN RU5UUzsgaSsrKSB7Ci0gICAgICAgIGFwLT5sb29wX2ZpbHRlci5sb29wX2ZpbHRlcl9tb2RlX2Rl bHRhc1tpXSA9IHZwOS0+bG9vcF9maWx0ZXJfbW9kZV9kZWx0YXNbaV07Ci0gICAgICAgIGFwLT5s b29wX2ZpbHRlci51cGRhdGVfbW9kZV9kZWx0YSB8PSBwaWMtPmZyYW1lX2hlYWRlci0+dXBkYXRl X21vZGVfZGVsdGFbaV07Ci0gICAgfQotCi0gICAgYXAtPnNlZ21lbnRhdGlvbiA9IChTdGRWaWRl b1ZQOVNlZ21lbnRhdGlvbikgewotICAgICAgICAuZmxhZ3MgPSAoU3RkVmlkZW9WUDlTZWdtZW50 YXRpb25GbGFncykgewotICAgICAgICAgICAgLnNlZ21lbnRhdGlvbl91cGRhdGVfbWFwID0gcGlj LT5mcmFtZV9oZWFkZXItPnNlZ21lbnRhdGlvbl91cGRhdGVfbWFwLAotICAgICAgICAgICAgLnNl Z21lbnRhdGlvbl90ZW1wb3JhbF91cGRhdGUgPSBwaWMtPmZyYW1lX2hlYWRlci0+c2VnbWVudGF0 aW9uX3RlbXBvcmFsX3VwZGF0ZSwKLSAgICAgICAgICAgIC5zZWdtZW50YXRpb25fdXBkYXRlX2Rh dGEgPSBwaWMtPmZyYW1lX2hlYWRlci0+c2VnbWVudGF0aW9uX3VwZGF0ZV9kYXRhLAotICAgICAg ICAgICAgLnNlZ21lbnRhdGlvbl9hYnNfb3JfZGVsdGFfdXBkYXRlID0gcGljLT5mcmFtZV9oZWFk ZXItPnNlZ21lbnRhdGlvbl9hYnNfb3JfZGVsdGFfdXBkYXRlLAotICAgICAgICB9LAotICAgIH07 Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IFNURF9WSURFT19WUDlfTUFYX1NFR01FTlRBVElP Tl9UUkVFX1BST0JTOyBpKyspCi0gICAgICAgIGFwLT5zZWdtZW50YXRpb24uc2VnbWVudGF0aW9u X3RyZWVfcHJvYnNbaV0gPSB2cDktPnNlZ21lbnRhdGlvbl90cmVlX3Byb2JzW2ldOwotICAgIGZv ciAoaW50IGkgPSAwOyBpIDwgU1REX1ZJREVPX1ZQOV9NQVhfU0VHTUVOVEFUSU9OX1BSRURfUFJP QjsgaSsrKQotICAgICAgICBhcC0+c2VnbWVudGF0aW9uLnNlZ21lbnRhdGlvbl9wcmVkX3Byb2Jb aV0gPSB2cDktPnNlZ21lbnRhdGlvbl9wcmVkX3Byb2JbaV07Ci0gICAgZm9yIChpbnQgaSA9IDA7 IGkgPCBTVERfVklERU9fVlA5X01BWF9TRUdNRU5UUzsgaSsrKSB7Ci0gICAgICAgIGFwLT5zZWdt ZW50YXRpb24uRmVhdHVyZUVuYWJsZWRbaV0gPSAweDA7Ci0gICAgICAgIGZvciAoaW50IGogPSAw OyBqIDwgU1REX1ZJREVPX1ZQOV9TRUdfTFZMX01BWDsgaisrKSB7Ci0gICAgICAgICAgICBhcC0+ c2VnbWVudGF0aW9uLkZlYXR1cmVFbmFibGVkW2ldIHw9IHZwOS0+ZmVhdHVyZV9lbmFibGVkW2ld W2pdIDw8IGo7Ci0gICAgICAgICAgICBhcC0+c2VnbWVudGF0aW9uLkZlYXR1cmVEYXRhW2ldW2pd ID0gdnA5LT5mZWF0dXJlX3NpZ25baV1bal0gPwotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC12cDktPmZlYXR1cmVfdmFsdWVbaV1bal0gOgotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICt2cDktPmZlYXR1cmVf dmFsdWVbaV1bal07Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBhcC0+Y29sb3JfY29uZmlnID0g KFN0ZFZpZGVvVlA5Q29sb3JDb25maWcpIHsKLSAgICAgICAgLmZsYWdzID0gKFN0ZFZpZGVvVlA5 Q29sb3JDb25maWdGbGFncykgewotICAgICAgICAgICAgLmNvbG9yX3JhbmdlID0gcGljLT5mcmFt ZV9oZWFkZXItPmNvbG9yX3JhbmdlLAotICAgICAgICB9LAotICAgICAgICAuQml0RGVwdGggPSBw cm9maWxlIDwgMiA/IDggOgotICAgICAgICAgICAgICAgICAgICBwaWMtPmZyYW1lX2hlYWRlci0+ dGVuX29yX3R3ZWx2ZV9iaXQgPyAxMiA6IDEwLAotICAgICAgICAuc3Vic2FtcGxpbmdfeCA9IHBp Yy0+ZnJhbWVfaGVhZGVyLT5zdWJzYW1wbGluZ194LAotICAgICAgICAuc3Vic2FtcGxpbmdfeSA9 IHBpYy0+ZnJhbWVfaGVhZGVyLT5zdWJzYW1wbGluZ195LAotICAgICAgICAuY29sb3Jfc3BhY2Ug PSBwaWMtPmZyYW1lX2hlYWRlci0+Y29sb3Jfc3BhY2UsCi0gICAgfTsKLQotICAgIGFwLT5zdGRf cGljX2luZm8gPSAoU3RkVmlkZW9EZWNvZGVWUDlQaWN0dXJlSW5mbykgewotICAgICAgICAuZmxh Z3MgPSAoU3RkVmlkZW9EZWNvZGVWUDlQaWN0dXJlSW5mb0ZsYWdzKSB7Ci0gICAgICAgICAgIC5l cnJvcl9yZXNpbGllbnRfbW9kZSA9IHBpYy0+ZnJhbWVfaGVhZGVyLT5lcnJvcl9yZXNpbGllbnRf bW9kZSwKLSAgICAgICAgICAgLmludHJhX29ubHkgPSBwaWMtPmZyYW1lX2hlYWRlci0+aW50cmFf b25seSwKLSAgICAgICAgICAgLmFsbG93X2hpZ2hfcHJlY2lzaW9uX212ID0gcGljLT5mcmFtZV9o ZWFkZXItPmFsbG93X2hpZ2hfcHJlY2lzaW9uX212LAotICAgICAgICAgICAucmVmcmVzaF9mcmFt ZV9jb250ZXh0ID0gcGljLT5mcmFtZV9oZWFkZXItPnJlZnJlc2hfZnJhbWVfY29udGV4dCwKLSAg ICAgICAgICAgLmZyYW1lX3BhcmFsbGVsX2RlY29kaW5nX21vZGUgPSBwaWMtPmZyYW1lX2hlYWRl ci0+ZnJhbWVfcGFyYWxsZWxfZGVjb2RpbmdfbW9kZSwKLSAgICAgICAgICAgLnNlZ21lbnRhdGlv bl9lbmFibGVkID0gcGljLT5mcmFtZV9oZWFkZXItPnNlZ21lbnRhdGlvbl9lbmFibGVkLAotICAg ICAgICAgICAuc2hvd19mcmFtZSA9IHBpYy0+ZnJhbWVfaGVhZGVyLT5zZWdtZW50YXRpb25fZW5h YmxlZCwKLSAgICAgICAgICAgLlVzZVByZXZGcmFtZU12cyA9IHMtPmgudXNlX2xhc3RfZnJhbWVf bXZzLAotICAgICAgICB9LAotICAgICAgICAucHJvZmlsZSA9IHByb2ZpbGUsCi0gICAgICAgIC5m cmFtZV90eXBlID0gcGljLT5mcmFtZV9oZWFkZXItPmZyYW1lX3R5cGUsCi0gICAgICAgIC5mcmFt ZV9jb250ZXh0X2lkeCA9IHBpYy0+ZnJhbWVfaGVhZGVyLT5mcmFtZV9jb250ZXh0X2lkeCwKLSAg ICAgICAgLnJlc2V0X2ZyYW1lX2NvbnRleHQgPSBwaWMtPmZyYW1lX2hlYWRlci0+cmVzZXRfZnJh bWVfY29udGV4dCwKLSAgICAgICAgLnJlZnJlc2hfZnJhbWVfZmxhZ3MgPSBwaWMtPmZyYW1lX2hl YWRlci0+cmVmcmVzaF9mcmFtZV9mbGFncywKLSAgICAgICAgLnJlZl9mcmFtZV9zaWduX2JpYXNf bWFzayA9IDB4MCwKLSAgICAgICAgLmludGVycG9sYXRpb25fZmlsdGVyID0gcmVtYXBfaW50ZXJw KHBpYy0+ZnJhbWVfaGVhZGVyLT5pc19maWx0ZXJfc3dpdGNoYWJsZSwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpYy0+ZnJhbWVfaGVhZGVyLT5yYXdfaW50 ZXJwb2xhdGlvbl9maWx0ZXJfdHlwZSksCi0gICAgICAgIC5iYXNlX3FfaWR4ID0gcGljLT5mcmFt ZV9oZWFkZXItPmJhc2VfcV9pZHgsCi0gICAgICAgIC5kZWx0YV9xX3lfZGMgPSBwaWMtPmZyYW1l X2hlYWRlci0+ZGVsdGFfcV95X2RjLAotICAgICAgICAuZGVsdGFfcV91dl9kYyA9IHBpYy0+ZnJh bWVfaGVhZGVyLT5kZWx0YV9xX3V2X2RjLAotICAgICAgICAuZGVsdGFfcV91dl9hYyA9IHBpYy0+ ZnJhbWVfaGVhZGVyLT5kZWx0YV9xX3V2X2FjLAotICAgICAgICAudGlsZV9jb2xzX2xvZzIgPSBw aWMtPmZyYW1lX2hlYWRlci0+dGlsZV9jb2xzX2xvZzIsCi0gICAgICAgIC50aWxlX3Jvd3NfbG9n MiA9IHBpYy0+ZnJhbWVfaGVhZGVyLT50aWxlX3Jvd3NfbG9nMiwKLSAgICAgICAgLyogUmVzZXJ2 ZWQgKi8KLSAgICAgICAgLnBDb2xvckNvbmZpZyA9ICZhcC0+Y29sb3JfY29uZmlnLAotICAgICAg ICAucExvb3BGaWx0ZXIgPSAmYXAtPmxvb3BfZmlsdGVyLAotICAgICAgICAucFNlZ21lbnRhdGlv biA9ICZhcC0+c2VnbWVudGF0aW9uLAotICAgIH07Ci0KLSAgICBmb3IgKGludCBpID0gVlA5X0xB U1RfRlJBTUU7IGkgPD0gVlA5X0FMVFJFRl9GUkFNRTsgaSsrKQotICAgICAgICBhcC0+c3RkX3Bp Y19pbmZvLnJlZl9mcmFtZV9zaWduX2JpYXNfbWFzayB8PSBwaWMtPmZyYW1lX2hlYWRlci0+cmVm X2ZyYW1lX3NpZ25fYmlhc1tpXSA8PCBpOwotCi0gICAgYXAtPnZwOV9waWNfaW5mbyA9IChWa1Zp ZGVvRGVjb2RlVlA5UGljdHVyZUluZm9LSFIpIHsKLSAgICAgICAgLnNUeXBlID0gVktfU1RSVUNU VVJFX1RZUEVfVklERU9fREVDT0RFX1ZQOV9QSUNUVVJFX0lORk9fS0hSLAotICAgICAgICAucFN0 ZFBpY3R1cmVJbmZvID0gJmFwLT5zdGRfcGljX2luZm8sCi0gICAgICAgIC51bmNvbXByZXNzZWRI ZWFkZXJPZmZzZXQgPSAwLAotICAgICAgICAuY29tcHJlc3NlZEhlYWRlck9mZnNldCA9IHMtPmgu dW5jb21wcmVzc2VkX2hlYWRlcl9zaXplLAotICAgICAgICAudGlsZXNPZmZzZXQgPSBzLT5oLnVu Y29tcHJlc3NlZF9oZWFkZXJfc2l6ZSArCi0gICAgICAgICAgICAgICAgICAgICAgIHMtPmguY29t cHJlc3NlZF9oZWFkZXJfc2l6ZSwKLSAgICB9OwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBT VERfVklERU9fVlA5X1JFRlNfUEVSX0ZSQU1FOyBpKyspIHsKLSAgICAgICAgY29uc3QgaW50IGlk eCA9IHBpYy0+ZnJhbWVfaGVhZGVyLT5yZWZfZnJhbWVfaWR4W2ldOwotICAgICAgICBjb25zdCBW UDlGcmFtZSAqcmVmX2ZyYW1lID0gJnMtPnJlZl9mcmFtZXNbaWR4XTsKLSAgICAgICAgVlA5VnVs a2FuRGVjb2RlUGljdHVyZSAqaHAgPSByZWZfZnJhbWUtPmh3YWNjZWxfcGljdHVyZV9wcml2YXRl OwotCi0gICAgICAgIGlmICghcmVmX2ZyYW1lLT50Zi5mKQotICAgICAgICAgICAgYXAtPnZwOV9w aWNfaW5mby5yZWZlcmVuY2VOYW1lU2xvdEluZGljZXNbaV0gPSAtMTsKLSAgICAgICAgZWxzZQot ICAgICAgICAgICAgYXAtPnZwOV9waWNfaW5mby5yZWZlcmVuY2VOYW1lU2xvdEluZGljZXNbaV0g PSBocC0+ZnJhbWVfaWQ7Ci0gICAgfQotCi0gICAgdnAtPmRlY29kZV9pbmZvID0gKFZrVmlkZW9E ZWNvZGVJbmZvS0hSKSB7Ci0gICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX1ZJREVP X0RFQ09ERV9JTkZPX0tIUiwKLSAgICAgICAgLnBOZXh0ID0gJmFwLT52cDlfcGljX2luZm8sCi0g ICAgICAgIC5mbGFncyA9IDB4MCwKLSAgICAgICAgLnBTZXR1cFJlZmVyZW5jZVNsb3QgPSAmdnAt PnJlZl9zbG90LAotICAgICAgICAucmVmZXJlbmNlU2xvdENvdW50ID0gcmVmX2NvdW50LAotICAg ICAgICAucFJlZmVyZW5jZVNsb3RzID0gdnAtPnJlZl9zbG90cywKLSAgICAgICAgLmRzdFBpY3R1 cmVSZXNvdXJjZSA9IChWa1ZpZGVvUGljdHVyZVJlc291cmNlSW5mb0tIUikgewotICAgICAgICAg ICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfVklERU9fUElDVFVSRV9SRVNPVVJDRV9JTkZP X0tIUiwKLSAgICAgICAgICAgIC5jb2RlZE9mZnNldCA9IChWa09mZnNldDJEKXsgMCwgMCB9LAot ICAgICAgICAgICAgLmNvZGVkRXh0ZW50ID0gKFZrRXh0ZW50MkQpeyBwaWMtPnRmLmYtPndpZHRo LCBwaWMtPnRmLmYtPmhlaWdodCB9LAotICAgICAgICAgICAgLmJhc2VBcnJheUxheWVyID0gMCwK LSAgICAgICAgICAgIC5pbWFnZVZpZXdCaW5kaW5nID0gdnAtPnZpZXcub3V0WzBdLAotICAgICAg ICB9LAotICAgIH07Ci0KLSAgICBhcC0+ZGVjID0gZGVjOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0K LXN0YXRpYyBpbnQgdmtfdnA5X2RlY29kZV9zbGljZShBVkNvZGVjQ29udGV4dCAqYXZjdHgsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAgKmRhdGEsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgICAgICAgIHNpemUpCi17Ci0gICAg aW50IGVycjsKLSAgICBjb25zdCBWUDlTaGFyZWRDb250ZXh0ICpzID0gYXZjdHgtPnByaXZfZGF0 YTsKLSAgICBWUDlWdWxrYW5EZWNvZGVQaWN0dXJlICphcCA9IHMtPmZyYW1lc1tDVVJfRlJBTUVd Lmh3YWNjZWxfcGljdHVyZV9wcml2YXRlOwotICAgIEZGVnVsa2FuRGVjb2RlUGljdHVyZSAqdnAg PSAmYXAtPnZwOwotCi0gICAgZXJyID0gZmZfdmtfZGVjb2RlX2FkZF9zbGljZShhdmN0eCwgdnAs IGRhdGEsIHNpemUsIDAsIE5VTEwsIE5VTEwpOwotICAgIGlmIChlcnIgPCAwKQotICAgICAgICBy ZXR1cm4gZXJyOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgdmtfdnA5X2VuZF9m cmFtZShBVkNvZGVjQ29udGV4dCAqYXZjdHgpCi17Ci0gICAgY29uc3QgVlA5U2hhcmVkQ29udGV4 dCAqcyA9IGF2Y3R4LT5wcml2X2RhdGE7Ci0KLSAgICBjb25zdCBWUDlGcmFtZSAqcGljID0gJnMt PmZyYW1lc1tDVVJfRlJBTUVdOwotICAgIFZQOVZ1bGthbkRlY29kZVBpY3R1cmUgKmFwID0gcGlj LT5od2FjY2VsX3BpY3R1cmVfcHJpdmF0ZTsKLSAgICBGRlZ1bGthbkRlY29kZVBpY3R1cmUgKnZw ID0gJmFwLT52cDsKLSAgICBGRlZ1bGthbkRlY29kZVBpY3R1cmUgKnJ2cFtTVERfVklERU9fVlA5 X1JFRlNfUEVSX0ZSQU1FXSA9IHsgMCB9OwotICAgIEFWRnJhbWUgKnJhdltTVERfVklERU9fVlA5 X1JFRlNfUEVSX0ZSQU1FXSA9IHsgMCB9OwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2cC0+ ZGVjb2RlX2luZm8ucmVmZXJlbmNlU2xvdENvdW50OyBpKyspIHsKLSAgICAgICAgY29uc3QgVlA5 RnJhbWUgKnJwID0gYXAtPnJlZl9zcmNbaV07Ci0gICAgICAgIFZQOVZ1bGthbkRlY29kZVBpY3R1 cmUgKnJocCA9IHJwLT5od2FjY2VsX3BpY3R1cmVfcHJpdmF0ZTsKLQotICAgICAgICBydnBbaV0g PSAmcmhwLT52cDsKLSAgICAgICAgcmF2W2ldID0gYXAtPnJlZl9zcmNbaV0tPnRmLmY7Ci0gICAg fQotCi0gICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfVkVSQk9TRSwgIkRlY29kaW5nIGZyYW1lLCAl IlNJWkVfU1BFQ0lGSUVSIiBieXRlc1xuIiwKLSAgICAgICAgICAgdnAtPnNsaWNlc19zaXplKTsK LQotICAgIHJldHVybiBmZl92a19kZWNvZGVfZnJhbWUoYXZjdHgsIHBpYy0+dGYuZiwgdnAsIHJh diwgcnZwKTsKLX0KLQotc3RhdGljIHZvaWQgdmtfdnA5X2ZyZWVfZnJhbWVfcHJpdihBVlJlZlN0 cnVjdE9wYXF1ZSBfaHdjdHgsIHZvaWQgKmRhdGEpCi17Ci0gICAgQVZIV0RldmljZUNvbnRleHQg Kmh3Y3R4ID0gX2h3Y3R4Lm5jOwotICAgIFZQOVZ1bGthbkRlY29kZVBpY3R1cmUgKmFwID0gZGF0 YTsKLQotICAgIC8qIEZyZWUgZnJhbWUgcmVzb3VyY2VzLCB0aGlzIGFsc28gZGVzdHJveXMgdGhl IHNlc3Npb24gcGFyYW1ldGVycy4gKi8KLSAgICBmZl92a19kZWNvZGVfZnJlZV9mcmFtZShod2N0 eCwgJmFwLT52cCk7Ci19Ci0KLWNvbnN0IEZGSFdBY2NlbCBmZl92cDlfdnVsa2FuX2h3YWNjZWwg PSB7Ci0gICAgLnAubmFtZSAgICAgICAgICAgICAgICA9ICJ2cDlfdnVsa2FuIiwKLSAgICAucC50 eXBlICAgICAgICAgICAgICAgID0gQVZNRURJQV9UWVBFX1ZJREVPLAotICAgIC5wLmlkICAgICAg ICAgICAgICAgICAgPSBBVl9DT0RFQ19JRF9WUDksCi0gICAgLnAucGl4X2ZtdCAgICAgICAgICAg ICA9IEFWX1BJWF9GTVRfVlVMS0FOLAotICAgIC5zdGFydF9mcmFtZSAgICAgICAgICAgPSAmdmtf dnA5X3N0YXJ0X2ZyYW1lLAotICAgIC5kZWNvZGVfc2xpY2UgICAgICAgICAgPSAmdmtfdnA5X2Rl Y29kZV9zbGljZSwKLSAgICAuZW5kX2ZyYW1lICAgICAgICAgICAgID0gJnZrX3ZwOV9lbmRfZnJh bWUsCi0gICAgLmZyZWVfZnJhbWVfcHJpdiAgICAgICA9ICZ2a192cDlfZnJlZV9mcmFtZV9wcml2 LAotICAgIC5mcmFtZV9wcml2X2RhdGFfc2l6ZSAgPSBzaXplb2YoVlA5VnVsa2FuRGVjb2RlUGlj dHVyZSksCi0gICAgLmluaXQgICAgICAgICAgICAgICAgICA9ICZmZl92a19kZWNvZGVfaW5pdCwK LSAgICAudXBkYXRlX3RocmVhZF9jb250ZXh0ID0gJmZmX3ZrX3VwZGF0ZV90aHJlYWRfY29udGV4 dCwKLSAgICAuZmx1c2ggICAgICAgICAgICAgICAgID0gJmZmX3ZrX2RlY29kZV9mbHVzaCwKLSAg ICAudW5pbml0ICAgICAgICAgICAgICAgID0gJmZmX3ZrX2RlY29kZV91bmluaXQsCi0gICAgLmZy YW1lX3BhcmFtcyAgICAgICAgICA9ICZmZl92a19mcmFtZV9wYXJhbXMsCi0gICAgLnByaXZfZGF0 YV9zaXplICAgICAgICA9IHNpemVvZihGRlZ1bGthbkRlY29kZUNvbnRleHQpLAotICAgIC5jYXBz X2ludGVybmFsICAgICAgICAgPSBIV0FDQ0VMX0NBUF9BU1lOQ19TQUZFLAotfTsKLS0gCjIuNDku MQoKCkZyb20gMzViMDY5Yzg4ZWYzNDYzOTg1ZjMzMjczODhjNTc3Y2I1NGNkZmI3OCBNb24gU2Vw IDE3IDAwOjAwOjAwIDIwMDEKRnJvbTogSmFtYWlrYTEgPGx1a2FzemN6MThAd3AucGw+CkRhdGU6 IFdlZCwgMyBTZXAgMjAyNSAxMzo0Mjo1NyArMDAwMApTdWJqZWN0OiBbUEFUQ0ggMDkyLzExOF0g Q2hhbmdpbmcgdnVsa2FuIGZpbGUgZGlyZWN0b3J5CgotLS0KIGxpYmF2Y29kZWMvdnVsa2FuL3Z1 bGthbl92cDkuYyB8IDM3MSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDEgZmls ZSBjaGFuZ2VkLCAzNzEgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2Y29k ZWMvdnVsa2FuL3Z1bGthbl92cDkuYwoKZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvdnVsa2FuL3Z1 bGthbl92cDkuYyBiL2xpYmF2Y29kZWMvdnVsa2FuL3Z1bGthbl92cDkuYwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5iMTUwZDI1MTYwCi0tLSAvZGV2L251bGwKKysrIGIv bGliYXZjb2RlYy92dWxrYW4vdnVsa2FuX3ZwOS5jCkBAIC0wLDAgKzEsMzcxIEBACisvKgorICog VGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgorICoKKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3 YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0 aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy c2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl cnNpb24uCisgKgorICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGlj ZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2Fy ZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwg Qm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorICovCisKKyNpbmNsdWRlICJsaWJhdmNvZGVjL3Zw OWRlYy5oIgorCisjaW5jbHVkZSAidnVsa2FuX2RlY29kZS5oIgorCitjb25zdCBGRlZ1bGthbkRl Y29kZURlc2NyaXB0b3IgZmZfdmtfZGVjX3ZwOV9kZXNjID0geworICAgIC5jb2RlY19pZCAgICAg ICAgID0gQVZfQ09ERUNfSURfVlA5LAorICAgIC5kZWNvZGVfZXh0ZW5zaW9uID0gRkZfVktfRVhU X1ZJREVPX0RFQ09ERV9WUDksCisgICAgLnF1ZXVlX2ZsYWdzICAgICAgPSBWS19RVUVVRV9WSURF T19ERUNPREVfQklUX0tIUiwKKyAgICAuZGVjb2RlX29wICAgICAgICA9IFZLX1ZJREVPX0NPREVD X09QRVJBVElPTl9ERUNPREVfVlA5X0JJVF9LSFIsCisgICAgLmV4dF9wcm9wcyA9IHsKKyAgICAg ICAgLmV4dGVuc2lvbk5hbWUgPSBWS19TVERfVlVMS0FOX1ZJREVPX0NPREVDX1ZQOV9ERUNPREVf RVhURU5TSU9OX05BTUUsCisgICAgICAgIC5zcGVjVmVyc2lvbiAgID0gVktfU1REX1ZVTEtBTl9W SURFT19DT0RFQ19WUDlfREVDT0RFX1NQRUNfVkVSU0lPTiwKKyAgICB9LAorfTsKKwordHlwZWRl ZiBzdHJ1Y3QgVlA5VnVsa2FuRGVjb2RlUGljdHVyZSB7CisgICAgRkZWdWxrYW5EZWNvZGVQaWN0 dXJlICAgICAgICAgICB2cDsKKworICAgIC8qIFRPRE86IGludmVzdGlnYXRlIGlmIHRoaXMgY2Fu IGJlIHJlbW92ZWQgdG8gbWFrZSBkZWNvZGluZyBjb21wbGV0ZWx5CisgICAgICogaW5kZXBlbmRl bnQuICovCisgICAgRkZWdWxrYW5EZWNvZGVDb250ZXh0ICAgICAgICAgICpkZWM7CisKKyAgICAv KiBDdXJyZW50IHBpY3R1cmUgKi8KKyAgICBTdGRWaWRlb1ZQOUNvbG9yQ29uZmlnIGNvbG9yX2Nv bmZpZzsKKyAgICBTdGRWaWRlb1ZQOVNlZ21lbnRhdGlvbiBzZWdtZW50YXRpb247CisgICAgU3Rk VmlkZW9WUDlMb29wRmlsdGVyIGxvb3BfZmlsdGVyOworICAgIFN0ZFZpZGVvRGVjb2RlVlA5UGlj dHVyZUluZm8gc3RkX3BpY19pbmZvOworICAgIFZrVmlkZW9EZWNvZGVWUDlQaWN0dXJlSW5mb0tI UiB2cDlfcGljX2luZm87CisKKyAgICBjb25zdCBWUDlGcmFtZSAqcmVmX3NyY1s4XTsKKworICAg IHVpbnQ4X3QgZnJhbWVfaWRfc2V0OworICAgIHVpbnQ4X3QgZnJhbWVfaWQ7CisgICAgdWludDhf dCByZWZfZnJhbWVfc2lnbl9iaWFzX21hc2s7Cit9IFZQOVZ1bGthbkRlY29kZVBpY3R1cmU7CisK K3N0YXRpYyBpbnQgdmtfdnA5X2ZpbGxfcGljdChBVkNvZGVjQ29udGV4dCAqYXZjdHgsIGNvbnN0 IFZQOUZyYW1lICoqcmVmX3NyYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBWa1ZpZGVv UmVmZXJlbmNlU2xvdEluZm9LSFIgKnJlZl9zbG90LCAgICAgIC8qIE1haW4gc3RydWN0dXJlICov CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmtWaWRlb1BpY3R1cmVSZXNvdXJjZUluZm9L SFIgKnJlZiwgICAgICAgICAvKiBHb2VzIGluIF4gKi8KKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBWUDlGcmFtZSAqcGljLCBpbnQgaXNfY3VycmVudCkKK3sKKyAgICBGRlZ1bGth bkRlY29kZUNvbnRleHQgKmRlYyA9IGF2Y3R4LT5pbnRlcm5hbC0+aHdhY2NlbF9wcml2X2RhdGE7 CisgICAgRkZWdWxrYW5EZWNvZGVTaGFyZWQgKmN0eCA9IGRlYy0+c2hhcmVkX2N0eDsKKyAgICBW UDlWdWxrYW5EZWNvZGVQaWN0dXJlICpocCA9IHBpYy0+aHdhY2NlbF9waWN0dXJlX3ByaXZhdGU7 CisgICAgRkZWdWxrYW5EZWNvZGVQaWN0dXJlICp2a3BpYyA9ICZocC0+dnA7CisKKyAgICBpbnQg ZXJyID0gZmZfdmtfZGVjb2RlX3ByZXBhcmVfZnJhbWUoZGVjLCBwaWMtPnRmLmYsIHZrcGljLCBp c19jdXJyZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWMt PmRlZGljYXRlZF9kcGIpOworICAgIGlmIChlcnIgPCAwKQorICAgICAgICByZXR1cm4gZXJyOwor CisgICAgKnJlZiA9IChWa1ZpZGVvUGljdHVyZVJlc291cmNlSW5mb0tIUikgeworICAgICAgICAu c1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9WSURFT19QSUNUVVJFX1JFU09VUkNFX0lORk9fS0hS LAorICAgICAgICAuY29kZWRPZmZzZXQgPSAoVmtPZmZzZXQyRCl7IDAsIDAgfSwKKyAgICAgICAg LmNvZGVkRXh0ZW50ID0gKFZrRXh0ZW50MkQpeyBwaWMtPnRmLmYtPndpZHRoLCBwaWMtPnRmLmYt PmhlaWdodCB9LAorICAgICAgICAuYmFzZUFycmF5TGF5ZXIgPSAoZGVjLT5kZWRpY2F0ZWRfZHBi ICYmIGN0eC0+Y29tbW9uLmxheWVyZWRfZHBiKSA/CisgICAgICAgICAgICAgICAgICAgICAgICAg IGhwLT5mcmFtZV9pZCA6IDAsCisgICAgICAgIC5pbWFnZVZpZXdCaW5kaW5nID0gdmtwaWMtPnZp ZXcucmVmWzBdLAorICAgIH07CisKKyAgICAqcmVmX3Nsb3QgPSAoVmtWaWRlb1JlZmVyZW5jZVNs b3RJbmZvS0hSKSB7CisgICAgICAgIC5zVHlwZSA9IFZLX1NUUlVDVFVSRV9UWVBFX1ZJREVPX1JF RkVSRU5DRV9TTE9UX0lORk9fS0hSLAorICAgICAgICAuc2xvdEluZGV4ID0gaHAtPmZyYW1lX2lk LAorICAgICAgICAucFBpY3R1cmVSZXNvdXJjZSA9IHJlZiwKKyAgICB9OworCisgICAgaWYgKHJl Zl9zcmMpCisgICAgICAgICpyZWZfc3JjID0gcGljOworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0 YXRpYyBlbnVtIFN0ZFZpZGVvVlA5SW50ZXJwb2xhdGlvbkZpbHRlciByZW1hcF9pbnRlcnAodWlu dDhfdCBpc19maWx0ZXJfc3dpdGNoYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCByYXdfaW50ZXJwb2xhdGlvbl9maWx0 ZXJfdHlwZSkKK3sKKyAgICBzdGF0aWMgY29uc3QgZW51bSBTdGRWaWRlb1ZQOUludGVycG9sYXRp b25GaWx0ZXIgcmVtYXBbXSA9IHsKKyAgICAgICAgU1REX1ZJREVPX1ZQOV9JTlRFUlBPTEFUSU9O X0ZJTFRFUl9FSUdIVFRBUF9TTU9PVEgsCisgICAgICAgIFNURF9WSURFT19WUDlfSU5URVJQT0xB VElPTl9GSUxURVJfRUlHSFRUQVAsCisgICAgICAgIFNURF9WSURFT19WUDlfSU5URVJQT0xBVElP Tl9GSUxURVJfRUlHSFRUQVBfU0hBUlAsCisgICAgICAgIFNURF9WSURFT19WUDlfSU5URVJQT0xB VElPTl9GSUxURVJfQklMSU5FQVIsCisgICAgfTsKKyAgICBpZiAoaXNfZmlsdGVyX3N3aXRjaGFi bGUpCisgICAgICAgIHJldHVybiBTVERfVklERU9fVlA5X0lOVEVSUE9MQVRJT05fRklMVEVSX1NX SVRDSEFCTEU7CisgICAgcmV0dXJuIHJlbWFwW3Jhd19pbnRlcnBvbGF0aW9uX2ZpbHRlcl90eXBl XTsKK30KKworc3RhdGljIGludCB2a192cDlfc3RhcnRfZnJhbWUoQVZDb2RlY0NvbnRleHQgICAg ICAgICAgKmF2Y3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZfdW51c2VkIGNv bnN0IEFWQnVmZmVyUmVmICpidWZmZXJfcmVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgYXZfdW51c2VkIGNvbnN0IHVpbnQ4X3QgKmJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGF2X3VudXNlZCB1aW50MzJfdCAgICAgICBzaXplKQoreworICAgIGludCBlcnI7 CisgICAgaW50IHJlZl9jb3VudCA9IDA7CisgICAgY29uc3QgVlA5Q29udGV4dCAqcHJpdiA9IGF2 Y3R4LT5wcml2X2RhdGE7CisgICAgY29uc3QgQ29kZWRCaXRzdHJlYW1WUDlDb250ZXh0ICp2cDkg PSBwcml2LT5jYmMtPnByaXZfZGF0YTsKKyAgICBjb25zdCBWUDlTaGFyZWRDb250ZXh0ICpzID0g JnByaXYtPnM7CisgICAgdWludDMyX3QgZnJhbWVfaWRfYWxsb2NfbWFzayA9IDA7CisKKyAgICBj b25zdCBWUDlGcmFtZSAqcGljID0gJnMtPmZyYW1lc1tDVVJfRlJBTUVdOworICAgIEZGVnVsa2Fu RGVjb2RlQ29udGV4dCAqZGVjID0gYXZjdHgtPmludGVybmFsLT5od2FjY2VsX3ByaXZfZGF0YTsK KyAgICB1aW50OF90IHByb2ZpbGUgPSAocGljLT5mcmFtZV9oZWFkZXItPnByb2ZpbGVfaGlnaF9i aXQgPDwgMSkgfCBwaWMtPmZyYW1lX2hlYWRlci0+cHJvZmlsZV9sb3dfYml0OworCisgICAgVlA5 VnVsa2FuRGVjb2RlUGljdHVyZSAqYXAgPSBwaWMtPmh3YWNjZWxfcGljdHVyZV9wcml2YXRlOwor ICAgIEZGVnVsa2FuRGVjb2RlUGljdHVyZSAqdnAgPSAmYXAtPnZwOworCisgICAgLyogVXNlIHRo ZSBjdXJyZW50IGZyYW1lX2lkcyBpbiByZWZfZnJhbWVzW10gdG8gZGVjaWRlIG9jY3VwaWVkIGZy YW1lX2lkcyAqLworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgU1REX1ZJREVPX1ZQOV9OVU1fUkVG X0ZSQU1FUzsgaSsrKSB7CisgICAgICAgIGNvbnN0IFZQOVZ1bGthbkRlY29kZVBpY3R1cmUqIHJw ID0gcy0+cmVmX2ZyYW1lc1tpXS5od2FjY2VsX3BpY3R1cmVfcHJpdmF0ZTsKKyAgICAgICAgaWYg KHJwKQorICAgICAgICAgICAgZnJhbWVfaWRfYWxsb2NfbWFzayB8PSAxIDw8IHJwLT5mcmFtZV9p ZDsKKyAgICB9CisKKyAgICBpZiAoIWFwLT5mcmFtZV9pZF9zZXQpIHsKKyAgICAgICAgdW5zaWdu ZWQgc2xvdF9pZHggPSAwOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMzI7IGkr KykgeworICAgICAgICAgICAgaWYgKCEoZnJhbWVfaWRfYWxsb2NfbWFzayAmICgxIDw8IGkpKSkg eworICAgICAgICAgICAgICAgIHNsb3RfaWR4ID0gaTsKKyAgICAgICAgICAgICAgICBicmVhazsK KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBhcC0+ZnJhbWVfaWQgPSBzbG90X2lk eDsKKyAgICAgICAgYXAtPmZyYW1lX2lkX3NldCA9IDE7CisgICAgICAgIGZyYW1lX2lkX2FsbG9j X21hc2sgfD0gKDEgPDwgc2xvdF9pZHgpOworICAgIH0KKworICAgIGZvciAoaW50IGkgPSAwOyBp IDwgU1REX1ZJREVPX1ZQOV9SRUZTX1BFUl9GUkFNRTsgaSsrKSB7CisgICAgICAgIGNvbnN0IGlu dCBpZHggPSBwaWMtPmZyYW1lX2hlYWRlci0+cmVmX2ZyYW1lX2lkeFtpXTsKKyAgICAgICAgY29u c3QgVlA5RnJhbWUgKnJlZl9mcmFtZSA9ICZzLT5yZWZfZnJhbWVzW2lkeF07CisgICAgICAgIFZQ OVZ1bGthbkRlY29kZVBpY3R1cmUgKmhwID0gcmVmX2ZyYW1lLT5od2FjY2VsX3BpY3R1cmVfcHJp dmF0ZTsKKyAgICAgICAgaW50IGZvdW5kID0gMDsKKworICAgICAgICBpZiAoIXJlZl9mcmFtZS0+ dGYuZikKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGZvciAoaW50IGogPSAwOyBq IDwgcmVmX2NvdW50OyBqKyspIHsKKyAgICAgICAgICAgIGlmICh2cC0+cmVmX3Nsb3RzW2pdLnNs b3RJbmRleCA9PSBocC0+ZnJhbWVfaWQpIHsKKyAgICAgICAgICAgICAgICBmb3VuZCA9IDE7Cisg ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg aWYgKGZvdW5kKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgZXJyID0gdmtfdnA5 X2ZpbGxfcGljdChhdmN0eCwgJmFwLT5yZWZfc3JjW3JlZl9jb3VudF0sCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJnZwLT5yZWZfc2xvdHNbcmVmX2NvdW50XSwgJnZwLT5yZWZzW3Jl Zl9jb3VudF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmX2ZyYW1lLCAwKTsK KyAgICAgICAgaWYgKGVyciA8IDApCisgICAgICAgICAgICByZXR1cm4gZXJyOworCisgICAgICAg IHJlZl9jb3VudCsrOworICAgIH0KKworICAgIGVyciA9IHZrX3ZwOV9maWxsX3BpY3QoYXZjdHgs IE5VTEwsICZ2cC0+cmVmX3Nsb3QsICZ2cC0+cmVmLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgcGljLCAxKTsKKyAgICBpZiAoZXJyIDwgMCkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAg IGFwLT5sb29wX2ZpbHRlciA9IChTdGRWaWRlb1ZQOUxvb3BGaWx0ZXIpIHsKKyAgICAgICAgLmZs YWdzID0gKFN0ZFZpZGVvVlA5TG9vcEZpbHRlckZsYWdzKSB7CisgICAgICAgICAgICAubG9vcF9m aWx0ZXJfZGVsdGFfZW5hYmxlZCA9IHBpYy0+ZnJhbWVfaGVhZGVyLT5sb29wX2ZpbHRlcl9kZWx0 YV9lbmFibGVkLAorICAgICAgICAgICAgLmxvb3BfZmlsdGVyX2RlbHRhX3VwZGF0ZSA9IHBpYy0+ ZnJhbWVfaGVhZGVyLT5sb29wX2ZpbHRlcl9kZWx0YV91cGRhdGUsCisgICAgICAgIH0sCisgICAg ICAgIC5sb29wX2ZpbHRlcl9sZXZlbCA9IHBpYy0+ZnJhbWVfaGVhZGVyLT5sb29wX2ZpbHRlcl9s ZXZlbCwKKyAgICAgICAgLmxvb3BfZmlsdGVyX3NoYXJwbmVzcyA9IHBpYy0+ZnJhbWVfaGVhZGVy LT5sb29wX2ZpbHRlcl9zaGFycG5lc3MsCisgICAgICAgIC51cGRhdGVfcmVmX2RlbHRhID0gMHgw LAorICAgICAgICAudXBkYXRlX21vZGVfZGVsdGEgPSAweDAsCisgICAgfTsKKworICAgIGZvciAo aW50IGkgPSAwOyBpIDwgU1REX1ZJREVPX1ZQOV9NQVhfUkVGX0ZSQU1FUzsgaSsrKSB7CisgICAg ICAgIGFwLT5sb29wX2ZpbHRlci5sb29wX2ZpbHRlcl9yZWZfZGVsdGFzW2ldID0gdnA5LT5sb29w X2ZpbHRlcl9yZWZfZGVsdGFzW2ldOworICAgICAgICBhcC0+bG9vcF9maWx0ZXIudXBkYXRlX3Jl Zl9kZWx0YSB8PSBwaWMtPmZyYW1lX2hlYWRlci0+dXBkYXRlX3JlZl9kZWx0YVtpXTsKKyAgICB9 CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBTVERfVklERU9fVlA5X0xPT1BfRklMVEVSX0FESlVT VE1FTlRTOyBpKyspIHsKKyAgICAgICAgYXAtPmxvb3BfZmlsdGVyLmxvb3BfZmlsdGVyX21vZGVf ZGVsdGFzW2ldID0gdnA5LT5sb29wX2ZpbHRlcl9tb2RlX2RlbHRhc1tpXTsKKyAgICAgICAgYXAt Pmxvb3BfZmlsdGVyLnVwZGF0ZV9tb2RlX2RlbHRhIHw9IHBpYy0+ZnJhbWVfaGVhZGVyLT51cGRh dGVfbW9kZV9kZWx0YVtpXTsKKyAgICB9CisKKyAgICBhcC0+c2VnbWVudGF0aW9uID0gKFN0ZFZp ZGVvVlA5U2VnbWVudGF0aW9uKSB7CisgICAgICAgIC5mbGFncyA9IChTdGRWaWRlb1ZQOVNlZ21l bnRhdGlvbkZsYWdzKSB7CisgICAgICAgICAgICAuc2VnbWVudGF0aW9uX3VwZGF0ZV9tYXAgPSBw aWMtPmZyYW1lX2hlYWRlci0+c2VnbWVudGF0aW9uX3VwZGF0ZV9tYXAsCisgICAgICAgICAgICAu c2VnbWVudGF0aW9uX3RlbXBvcmFsX3VwZGF0ZSA9IHBpYy0+ZnJhbWVfaGVhZGVyLT5zZWdtZW50 YXRpb25fdGVtcG9yYWxfdXBkYXRlLAorICAgICAgICAgICAgLnNlZ21lbnRhdGlvbl91cGRhdGVf ZGF0YSA9IHBpYy0+ZnJhbWVfaGVhZGVyLT5zZWdtZW50YXRpb25fdXBkYXRlX2RhdGEsCisgICAg ICAgICAgICAuc2VnbWVudGF0aW9uX2Fic19vcl9kZWx0YV91cGRhdGUgPSBwaWMtPmZyYW1lX2hl YWRlci0+c2VnbWVudGF0aW9uX2Fic19vcl9kZWx0YV91cGRhdGUsCisgICAgICAgIH0sCisgICAg fTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgU1REX1ZJREVPX1ZQOV9NQVhfU0VHTUVOVEFU SU9OX1RSRUVfUFJPQlM7IGkrKykKKyAgICAgICAgYXAtPnNlZ21lbnRhdGlvbi5zZWdtZW50YXRp b25fdHJlZV9wcm9ic1tpXSA9IHZwOS0+c2VnbWVudGF0aW9uX3RyZWVfcHJvYnNbaV07CisgICAg Zm9yIChpbnQgaSA9IDA7IGkgPCBTVERfVklERU9fVlA5X01BWF9TRUdNRU5UQVRJT05fUFJFRF9Q Uk9COyBpKyspCisgICAgICAgIGFwLT5zZWdtZW50YXRpb24uc2VnbWVudGF0aW9uX3ByZWRfcHJv YltpXSA9IHZwOS0+c2VnbWVudGF0aW9uX3ByZWRfcHJvYltpXTsKKyAgICBmb3IgKGludCBpID0g MDsgaSA8IFNURF9WSURFT19WUDlfTUFYX1NFR01FTlRTOyBpKyspIHsKKyAgICAgICAgYXAtPnNl Z21lbnRhdGlvbi5GZWF0dXJlRW5hYmxlZFtpXSA9IDB4MDsKKyAgICAgICAgZm9yIChpbnQgaiA9 IDA7IGogPCBTVERfVklERU9fVlA5X1NFR19MVkxfTUFYOyBqKyspIHsKKyAgICAgICAgICAgIGFw LT5zZWdtZW50YXRpb24uRmVhdHVyZUVuYWJsZWRbaV0gfD0gdnA5LT5mZWF0dXJlX2VuYWJsZWRb aV1bal0gPDwgajsKKyAgICAgICAgICAgIGFwLT5zZWdtZW50YXRpb24uRmVhdHVyZURhdGFbaV1b al0gPSB2cDktPmZlYXR1cmVfc2lnbltpXVtqXSA/CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLXZwOS0+ZmVhdHVyZV92YWx1ZVtpXVtqXSA6CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgK3ZwOS0+ZmVhdHVy ZV92YWx1ZVtpXVtqXTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGFwLT5jb2xvcl9jb25maWcg PSAoU3RkVmlkZW9WUDlDb2xvckNvbmZpZykgeworICAgICAgICAuZmxhZ3MgPSAoU3RkVmlkZW9W UDlDb2xvckNvbmZpZ0ZsYWdzKSB7CisgICAgICAgICAgICAuY29sb3JfcmFuZ2UgPSBwaWMtPmZy YW1lX2hlYWRlci0+Y29sb3JfcmFuZ2UsCisgICAgICAgIH0sCisgICAgICAgIC5CaXREZXB0aCA9 IHByb2ZpbGUgPCAyID8gOCA6CisgICAgICAgICAgICAgICAgICAgIHBpYy0+ZnJhbWVfaGVhZGVy LT50ZW5fb3JfdHdlbHZlX2JpdCA/IDEyIDogMTAsCisgICAgICAgIC5zdWJzYW1wbGluZ194ID0g cGljLT5mcmFtZV9oZWFkZXItPnN1YnNhbXBsaW5nX3gsCisgICAgICAgIC5zdWJzYW1wbGluZ195 ID0gcGljLT5mcmFtZV9oZWFkZXItPnN1YnNhbXBsaW5nX3ksCisgICAgICAgIC5jb2xvcl9zcGFj ZSA9IHBpYy0+ZnJhbWVfaGVhZGVyLT5jb2xvcl9zcGFjZSwKKyAgICB9OworCisgICAgYXAtPnN0 ZF9waWNfaW5mbyA9IChTdGRWaWRlb0RlY29kZVZQOVBpY3R1cmVJbmZvKSB7CisgICAgICAgIC5m bGFncyA9IChTdGRWaWRlb0RlY29kZVZQOVBpY3R1cmVJbmZvRmxhZ3MpIHsKKyAgICAgICAgICAg LmVycm9yX3Jlc2lsaWVudF9tb2RlID0gcGljLT5mcmFtZV9oZWFkZXItPmVycm9yX3Jlc2lsaWVu dF9tb2RlLAorICAgICAgICAgICAuaW50cmFfb25seSA9IHBpYy0+ZnJhbWVfaGVhZGVyLT5pbnRy YV9vbmx5LAorICAgICAgICAgICAuYWxsb3dfaGlnaF9wcmVjaXNpb25fbXYgPSBwaWMtPmZyYW1l X2hlYWRlci0+YWxsb3dfaGlnaF9wcmVjaXNpb25fbXYsCisgICAgICAgICAgIC5yZWZyZXNoX2Zy YW1lX2NvbnRleHQgPSBwaWMtPmZyYW1lX2hlYWRlci0+cmVmcmVzaF9mcmFtZV9jb250ZXh0LAor ICAgICAgICAgICAuZnJhbWVfcGFyYWxsZWxfZGVjb2RpbmdfbW9kZSA9IHBpYy0+ZnJhbWVfaGVh ZGVyLT5mcmFtZV9wYXJhbGxlbF9kZWNvZGluZ19tb2RlLAorICAgICAgICAgICAuc2VnbWVudGF0 aW9uX2VuYWJsZWQgPSBwaWMtPmZyYW1lX2hlYWRlci0+c2VnbWVudGF0aW9uX2VuYWJsZWQsCisg ICAgICAgICAgIC5zaG93X2ZyYW1lID0gcGljLT5mcmFtZV9oZWFkZXItPnNlZ21lbnRhdGlvbl9l bmFibGVkLAorICAgICAgICAgICAuVXNlUHJldkZyYW1lTXZzID0gcy0+aC51c2VfbGFzdF9mcmFt ZV9tdnMsCisgICAgICAgIH0sCisgICAgICAgIC5wcm9maWxlID0gcHJvZmlsZSwKKyAgICAgICAg LmZyYW1lX3R5cGUgPSBwaWMtPmZyYW1lX2hlYWRlci0+ZnJhbWVfdHlwZSwKKyAgICAgICAgLmZy YW1lX2NvbnRleHRfaWR4ID0gcGljLT5mcmFtZV9oZWFkZXItPmZyYW1lX2NvbnRleHRfaWR4LAor ICAgICAgICAucmVzZXRfZnJhbWVfY29udGV4dCA9IHBpYy0+ZnJhbWVfaGVhZGVyLT5yZXNldF9m cmFtZV9jb250ZXh0LAorICAgICAgICAucmVmcmVzaF9mcmFtZV9mbGFncyA9IHBpYy0+ZnJhbWVf aGVhZGVyLT5yZWZyZXNoX2ZyYW1lX2ZsYWdzLAorICAgICAgICAucmVmX2ZyYW1lX3NpZ25fYmlh c19tYXNrID0gMHgwLAorICAgICAgICAuaW50ZXJwb2xhdGlvbl9maWx0ZXIgPSByZW1hcF9pbnRl cnAocGljLT5mcmFtZV9oZWFkZXItPmlzX2ZpbHRlcl9zd2l0Y2hhYmxlLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGljLT5mcmFtZV9oZWFkZXItPnJhd19p bnRlcnBvbGF0aW9uX2ZpbHRlcl90eXBlKSwKKyAgICAgICAgLmJhc2VfcV9pZHggPSBwaWMtPmZy YW1lX2hlYWRlci0+YmFzZV9xX2lkeCwKKyAgICAgICAgLmRlbHRhX3FfeV9kYyA9IHBpYy0+ZnJh bWVfaGVhZGVyLT5kZWx0YV9xX3lfZGMsCisgICAgICAgIC5kZWx0YV9xX3V2X2RjID0gcGljLT5m cmFtZV9oZWFkZXItPmRlbHRhX3FfdXZfZGMsCisgICAgICAgIC5kZWx0YV9xX3V2X2FjID0gcGlj LT5mcmFtZV9oZWFkZXItPmRlbHRhX3FfdXZfYWMsCisgICAgICAgIC50aWxlX2NvbHNfbG9nMiA9 IHBpYy0+ZnJhbWVfaGVhZGVyLT50aWxlX2NvbHNfbG9nMiwKKyAgICAgICAgLnRpbGVfcm93c19s b2cyID0gcGljLT5mcmFtZV9oZWFkZXItPnRpbGVfcm93c19sb2cyLAorICAgICAgICAvKiBSZXNl cnZlZCAqLworICAgICAgICAucENvbG9yQ29uZmlnID0gJmFwLT5jb2xvcl9jb25maWcsCisgICAg ICAgIC5wTG9vcEZpbHRlciA9ICZhcC0+bG9vcF9maWx0ZXIsCisgICAgICAgIC5wU2VnbWVudGF0 aW9uID0gJmFwLT5zZWdtZW50YXRpb24sCisgICAgfTsKKworICAgIGZvciAoaW50IGkgPSBWUDlf TEFTVF9GUkFNRTsgaSA8PSBWUDlfQUxUUkVGX0ZSQU1FOyBpKyspCisgICAgICAgIGFwLT5zdGRf cGljX2luZm8ucmVmX2ZyYW1lX3NpZ25fYmlhc19tYXNrIHw9IHBpYy0+ZnJhbWVfaGVhZGVyLT5y ZWZfZnJhbWVfc2lnbl9iaWFzW2ldIDw8IGk7CisKKyAgICBhcC0+dnA5X3BpY19pbmZvID0gKFZr VmlkZW9EZWNvZGVWUDlQaWN0dXJlSW5mb0tIUikgeworICAgICAgICAuc1R5cGUgPSBWS19TVFJV Q1RVUkVfVFlQRV9WSURFT19ERUNPREVfVlA5X1BJQ1RVUkVfSU5GT19LSFIsCisgICAgICAgIC5w U3RkUGljdHVyZUluZm8gPSAmYXAtPnN0ZF9waWNfaW5mbywKKyAgICAgICAgLnVuY29tcHJlc3Nl ZEhlYWRlck9mZnNldCA9IDAsCisgICAgICAgIC5jb21wcmVzc2VkSGVhZGVyT2Zmc2V0ID0gcy0+ aC51bmNvbXByZXNzZWRfaGVhZGVyX3NpemUsCisgICAgICAgIC50aWxlc09mZnNldCA9IHMtPmgu dW5jb21wcmVzc2VkX2hlYWRlcl9zaXplICsKKyAgICAgICAgICAgICAgICAgICAgICAgcy0+aC5j b21wcmVzc2VkX2hlYWRlcl9zaXplLAorICAgIH07CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8 IFNURF9WSURFT19WUDlfUkVGU19QRVJfRlJBTUU7IGkrKykgeworICAgICAgICBjb25zdCBpbnQg aWR4ID0gcGljLT5mcmFtZV9oZWFkZXItPnJlZl9mcmFtZV9pZHhbaV07CisgICAgICAgIGNvbnN0 IFZQOUZyYW1lICpyZWZfZnJhbWUgPSAmcy0+cmVmX2ZyYW1lc1tpZHhdOworICAgICAgICBWUDlW dWxrYW5EZWNvZGVQaWN0dXJlICpocCA9IHJlZl9mcmFtZS0+aHdhY2NlbF9waWN0dXJlX3ByaXZh dGU7CisKKyAgICAgICAgaWYgKCFyZWZfZnJhbWUtPnRmLmYpCisgICAgICAgICAgICBhcC0+dnA5 X3BpY19pbmZvLnJlZmVyZW5jZU5hbWVTbG90SW5kaWNlc1tpXSA9IC0xOworICAgICAgICBlbHNl CisgICAgICAgICAgICBhcC0+dnA5X3BpY19pbmZvLnJlZmVyZW5jZU5hbWVTbG90SW5kaWNlc1tp XSA9IGhwLT5mcmFtZV9pZDsKKyAgICB9CisKKyAgICB2cC0+ZGVjb2RlX2luZm8gPSAoVmtWaWRl b0RlY29kZUluZm9LSFIpIHsKKyAgICAgICAgLnNUeXBlID0gVktfU1RSVUNUVVJFX1RZUEVfVklE RU9fREVDT0RFX0lORk9fS0hSLAorICAgICAgICAucE5leHQgPSAmYXAtPnZwOV9waWNfaW5mbywK KyAgICAgICAgLmZsYWdzID0gMHgwLAorICAgICAgICAucFNldHVwUmVmZXJlbmNlU2xvdCA9ICZ2 cC0+cmVmX3Nsb3QsCisgICAgICAgIC5yZWZlcmVuY2VTbG90Q291bnQgPSByZWZfY291bnQsCisg ICAgICAgIC5wUmVmZXJlbmNlU2xvdHMgPSB2cC0+cmVmX3Nsb3RzLAorICAgICAgICAuZHN0UGlj dHVyZVJlc291cmNlID0gKFZrVmlkZW9QaWN0dXJlUmVzb3VyY2VJbmZvS0hSKSB7CisgICAgICAg ICAgICAuc1R5cGUgPSBWS19TVFJVQ1RVUkVfVFlQRV9WSURFT19QSUNUVVJFX1JFU09VUkNFX0lO Rk9fS0hSLAorICAgICAgICAgICAgLmNvZGVkT2Zmc2V0ID0gKFZrT2Zmc2V0MkQpeyAwLCAwIH0s CisgICAgICAgICAgICAuY29kZWRFeHRlbnQgPSAoVmtFeHRlbnQyRCl7IHBpYy0+dGYuZi0+d2lk dGgsIHBpYy0+dGYuZi0+aGVpZ2h0IH0sCisgICAgICAgICAgICAuYmFzZUFycmF5TGF5ZXIgPSAw LAorICAgICAgICAgICAgLmltYWdlVmlld0JpbmRpbmcgPSB2cC0+dmlldy5vdXRbMF0sCisgICAg ICAgIH0sCisgICAgfTsKKworICAgIGFwLT5kZWMgPSBkZWM7CisKKyAgICByZXR1cm4gMDsKK30K Kworc3RhdGljIGludCB2a192cDlfZGVjb2RlX3NsaWNlKEFWQ29kZWNDb250ZXh0ICphdmN0eCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICAqZGF0YSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAgICAgICAgc2l6ZSkKK3sKKyAg ICBpbnQgZXJyOworICAgIGNvbnN0IFZQOVNoYXJlZENvbnRleHQgKnMgPSBhdmN0eC0+cHJpdl9k YXRhOworICAgIFZQOVZ1bGthbkRlY29kZVBpY3R1cmUgKmFwID0gcy0+ZnJhbWVzW0NVUl9GUkFN RV0uaHdhY2NlbF9waWN0dXJlX3ByaXZhdGU7CisgICAgRkZWdWxrYW5EZWNvZGVQaWN0dXJlICp2 cCA9ICZhcC0+dnA7CisKKyAgICBlcnIgPSBmZl92a19kZWNvZGVfYWRkX3NsaWNlKGF2Y3R4LCB2 cCwgZGF0YSwgc2l6ZSwgMCwgTlVMTCwgTlVMTCk7CisgICAgaWYgKGVyciA8IDApCisgICAgICAg IHJldHVybiBlcnI7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2a192cDlfZW5k X2ZyYW1lKEFWQ29kZWNDb250ZXh0ICphdmN0eCkKK3sKKyAgICBjb25zdCBWUDlTaGFyZWRDb250 ZXh0ICpzID0gYXZjdHgtPnByaXZfZGF0YTsKKworICAgIGNvbnN0IFZQOUZyYW1lICpwaWMgPSAm cy0+ZnJhbWVzW0NVUl9GUkFNRV07CisgICAgVlA5VnVsa2FuRGVjb2RlUGljdHVyZSAqYXAgPSBw aWMtPmh3YWNjZWxfcGljdHVyZV9wcml2YXRlOworICAgIEZGVnVsa2FuRGVjb2RlUGljdHVyZSAq dnAgPSAmYXAtPnZwOworICAgIEZGVnVsa2FuRGVjb2RlUGljdHVyZSAqcnZwW1NURF9WSURFT19W UDlfUkVGU19QRVJfRlJBTUVdID0geyAwIH07CisgICAgQVZGcmFtZSAqcmF2W1NURF9WSURFT19W UDlfUkVGU19QRVJfRlJBTUVdID0geyAwIH07CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHZw LT5kZWNvZGVfaW5mby5yZWZlcmVuY2VTbG90Q291bnQ7IGkrKykgeworICAgICAgICBjb25zdCBW UDlGcmFtZSAqcnAgPSBhcC0+cmVmX3NyY1tpXTsKKyAgICAgICAgVlA5VnVsa2FuRGVjb2RlUGlj dHVyZSAqcmhwID0gcnAtPmh3YWNjZWxfcGljdHVyZV9wcml2YXRlOworCisgICAgICAgIHJ2cFtp XSA9ICZyaHAtPnZwOworICAgICAgICByYXZbaV0gPSBhcC0+cmVmX3NyY1tpXS0+dGYuZjsKKyAg ICB9CisKKyAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19WRVJCT1NFLCAiRGVjb2RpbmcgZnJhbWUs ICUiU0laRV9TUEVDSUZJRVIiIGJ5dGVzXG4iLAorICAgICAgICAgICB2cC0+c2xpY2VzX3NpemUp OworCisgICAgcmV0dXJuIGZmX3ZrX2RlY29kZV9mcmFtZShhdmN0eCwgcGljLT50Zi5mLCB2cCwg cmF2LCBydnApOworfQorCitzdGF0aWMgdm9pZCB2a192cDlfZnJlZV9mcmFtZV9wcml2KEFWUmVm U3RydWN0T3BhcXVlIF9od2N0eCwgdm9pZCAqZGF0YSkKK3sKKyAgICBBVkhXRGV2aWNlQ29udGV4 dCAqaHdjdHggPSBfaHdjdHgubmM7CisgICAgVlA5VnVsa2FuRGVjb2RlUGljdHVyZSAqYXAgPSBk YXRhOworCisgICAgLyogRnJlZSBmcmFtZSByZXNvdXJjZXMsIHRoaXMgYWxzbyBkZXN0cm95cyB0 aGUgc2Vzc2lvbiBwYXJhbWV0ZXJzLiAqLworICAgIGZmX3ZrX2RlY29kZV9mcmVlX2ZyYW1lKGh3 Y3R4LCAmYXAtPnZwKTsKK30KKworY29uc3QgRkZIV0FjY2VsIGZmX3ZwOV92dWxrYW5faHdhY2Nl bCA9IHsKKyAgICAucC5uYW1lICAgICAgICAgICAgICAgID0gInZwOV92dWxrYW4iLAorICAgIC5w LnR5cGUgICAgICAgICAgICAgICAgPSBBVk1FRElBX1RZUEVfVklERU8sCisgICAgLnAuaWQgICAg ICAgICAgICAgICAgICA9IEFWX0NPREVDX0lEX1ZQOSwKKyAgICAucC5waXhfZm10ICAgICAgICAg ICAgID0gQVZfUElYX0ZNVF9WVUxLQU4sCisgICAgLnN0YXJ0X2ZyYW1lICAgICAgICAgICA9ICZ2 a192cDlfc3RhcnRfZnJhbWUsCisgICAgLmRlY29kZV9zbGljZSAgICAgICAgICA9ICZ2a192cDlf ZGVjb2RlX3NsaWNlLAorICAgIC5lbmRfZnJhbWUgICAgICAgICAgICAgPSAmdmtfdnA5X2VuZF9m cmFtZSwKKyAgICAuZnJlZV9mcmFtZV9wcml2ICAgICAgID0gJnZrX3ZwOV9mcmVlX2ZyYW1lX3By aXYsCisgICAgLmZyYW1lX3ByaXZfZGF0YV9zaXplICA9IHNpemVvZihWUDlWdWxrYW5EZWNvZGVQ aWN0dXJlKSwKKyAgICAuaW5pdCAgICAgICAgICAgICAgICAgID0gJmZmX3ZrX2RlY29kZV9pbml0 LAorICAgIC51cGRhdGVfdGhyZWFkX2NvbnRleHQgPSAmZmZfdmtfdXBkYXRlX3RocmVhZF9jb250 ZXh0LAorICAgIC5mbHVzaCAgICAgICAgICAgICAgICAgPSAmZmZfdmtfZGVjb2RlX2ZsdXNoLAor ICAgIC51bmluaXQgICAgICAgICAgICAgICAgPSAmZmZfdmtfZGVjb2RlX3VuaW5pdCwKKyAgICAu ZnJhbWVfcGFyYW1zICAgICAgICAgID0gJmZmX3ZrX2ZyYW1lX3BhcmFtcywKKyAgICAucHJpdl9k YXRhX3NpemUgICAgICAgID0gc2l6ZW9mKEZGVnVsa2FuRGVjb2RlQ29udGV4dCksCisgICAgLmNh cHNfaW50ZXJuYWwgICAgICAgICA9IEhXQUNDRUxfQ0FQX0FTWU5DX1NBRkUsCit9OwotLSAKMi40 OS4xCgoKRnJvbSA1OWE3NDVlZDBlYjFhZTExNzFiMGU4YWEwNmFhZmQyNzZjYjc2MDk3IE1vbiBT ZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBKYW1haWthMSA8bHVrYXN6Y3oxOEB3cC5wbD4KRGF0 ZTogV2VkLCAzIFNlcCAyMDI1IDEzOjQzOjQ5ICswMDAwClN1YmplY3Q6IFtQQVRDSCAwOTMvMTE4 XSBDaGFuZ2luZyB2dWxrYW4gZmlsZSBkaXJlY3RvcnkKCi0tLQogbGliYXZjb2RlYy92dWxrYW5f dmlkZW8uaCB8IDEwMiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogMSBm aWxlIGNoYW5nZWQsIDEwMiBkZWxldGlvbnMoLSkKIGRlbGV0ZSBtb2RlIDEwMDY0NCBsaWJhdmNv ZGVjL3Z1bGthbl92aWRlby5oCgpkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy92dWxrYW5fdmlkZW8u aCBiL2xpYmF2Y29kZWMvdnVsa2FuX3ZpZGVvLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDFiMjlmN2FkYzcuLjAwMDAwMDAwMDAKLS0tIGEvbGliYXZjb2RlYy92dWxrYW5fdmlkZW8u aAorKysgL2Rldi9udWxsCkBAIC0xLDEwMiArMCwwIEBACi0vKgotICogVGhpcyBmaWxlIGlzIHBh cnQgb2YgRkZtcGVnLgotICoKLSAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyLjEgb2YgdGhl IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICog RkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws Ci0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3 YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w eSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRo IEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlv biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjEx MC0xMzAxIFVTQQotICovCi0KLSNpZm5kZWYgQVZDT0RFQ19WVUxLQU5fVklERU9fSAotI2RlZmlu ZSBBVkNPREVDX1ZVTEtBTl9WSURFT19ICi0KLSNpbmNsdWRlICJhdmNvZGVjLmgiCi0jaW5jbHVk ZSAibGliYXZ1dGlsL3Z1bGthbi5oIgotCi0jaW5jbHVkZSA8dmtfdmlkZW8vdnVsa2FuX3ZpZGVv X2NvZGVjc19jb21tb24uaD4KLQotI2RlZmluZSBDT0RFQ19WRVJfTUFKKHZlcikgKHZlciA+PiAy MikKLSNkZWZpbmUgQ09ERUNfVkVSX01JTih2ZXIpICgodmVyID4+IDEyKSAmICgoMSA8PCAxMCkg LSAxKSkKLSNkZWZpbmUgQ09ERUNfVkVSX1BBVCh2ZXIpICh2ZXIgJiAoKDEgPDwgMTIpIC0gMSkp Ci0jZGVmaW5lIENPREVDX1ZFUih2ZXIpIENPREVDX1ZFUl9NQUoodmVyKSwgQ09ERUNfVkVSX01J Tih2ZXIpLCBDT0RFQ19WRVJfUEFUKHZlcikKLQotdHlwZWRlZiBzdHJ1Y3QgRkZWa1ZpZGVvU2Vz c2lvbiB7Ci0gICAgVmtWaWRlb1Nlc3Npb25LSFIgc2Vzc2lvbjsKLSAgICBWa0RldmljZU1lbW9y eSAqbWVtOwotICAgIHVpbnQzMl90IG5iX21lbTsKLQotICAgIFZrU2FtcGxlclljYmNyQ29udmVy c2lvbiB5dXZfc2FtcGxlcjsKLQotICAgIEFWQnVmZmVyUmVmICpkcGJfaHdmY19yZWY7Ci0gICAg aW50IGxheWVyZWRfZHBiOwotICAgIEFWRnJhbWUgKmxheWVyZWRfZnJhbWU7Ci0gICAgVmtJbWFn ZVZpZXcgbGF5ZXJlZF92aWV3OwotICAgIFZrSW1hZ2VBc3BlY3RGbGFncyBsYXllcmVkX2FzcGVj dDsKLX0gRkZWa1ZpZGVvQ29tbW9uOwotCi0vKioKLSAqIEdldCBwaXhmbXQgZnJvbSBhIFZ1bGth biBmb3JtYXQuCi0gKi8KLWVudW0gQVZQaXhlbEZvcm1hdCBmZl92a19waXhfZm10X2Zyb21fdmtm bXQoVmtGb3JtYXQgdmtmKTsKLQotLyoqCi0gKiBHZXQgYXNwZWN0IGJpdHMgd2hpY2ggaW5jbHVk ZSBhbGwgcGxhbmVzIGZyb20gYSBWa0Zvcm1hdC4KLSAqLwotVmtJbWFnZUFzcGVjdEZsYWdzIGZm X3ZrX2FzcGVjdF9iaXRzX2Zyb21fdmtmbXQoVmtGb3JtYXQgdmtmKTsKLQotLyoqCi0gKiBHZXQg VnVsa2FuJ3MgY2hyb21hIHN1YnNhbXBsaW5nIGZyb20gYSBwaXhmbXQgZGVzY3JpcHRvci4KLSAq LwotVmtWaWRlb0Nocm9tYVN1YnNhbXBsaW5nRmxhZ0JpdHNLSFIgZmZfdmtfc3Vic2FtcGxpbmdf ZnJvbV9hdl9kZXNjKGNvbnN0IEFWUGl4Rm10RGVzY3JpcHRvciAqZGVzYyk7Ci0KLS8qKgotICog R2V0IFZ1bGthbidzIGJpdCBkZXB0aCBmcm9tIGFuIFs4OjEyXSBpbnRlZ2VyLgotICovCi1Wa1Zp ZGVvQ29tcG9uZW50Qml0RGVwdGhGbGFnQml0c0tIUiBmZl92a19kZXB0aF9mcm9tX2F2X2RlcHRo KGludCBkZXB0aCk7Ci0KLS8qKgotICogQ29udmVydCBsZXZlbCBmcm9tIFZ1bGthbiB0byBBVi4K LSAqLwotaW50IGZmX3ZrX2gyNjRfbGV2ZWxfdG9fYXYoU3RkVmlkZW9IMjY0TGV2ZWxJZGMgbGV2 ZWwpOwotaW50IGZmX3ZrX2gyNjVfbGV2ZWxfdG9fYXYoU3RkVmlkZW9IMjY1TGV2ZWxJZGMgbGV2 ZWwpOwotCi1TdGRWaWRlb0gyNjRMZXZlbElkYyBmZl92a19oMjY0X2xldmVsX3RvX3ZrKGludCBs ZXZlbF9pZGMpOwotU3RkVmlkZW9IMjY1TGV2ZWxJZGMgZmZfdmtfaDI2NV9sZXZlbF90b192ayhp bnQgbGV2ZWxfaWRjKTsKLVN0ZFZpZGVvQVYxTGV2ZWwgICAgIGZmX3ZrX2F2MV9sZXZlbF90b192 ayhpbnQgbGV2ZWwpOwotCi0vKioKLSAqIENvbnZlcnQgcHJvZmlsZSBmcm9tL3RvIEFWIHRvIFZ1 bGthbgotICovCi1TdGRWaWRlb0gyNjRQcm9maWxlSWRjIGZmX3ZrX2gyNjRfcHJvZmlsZV90b192 ayhpbnQgcHJvZmlsZSk7Ci1TdGRWaWRlb0gyNjVQcm9maWxlSWRjIGZmX3ZrX2gyNjVfcHJvZmls ZV90b192ayhpbnQgcHJvZmlsZSk7Ci1TdGRWaWRlb0FWMVByb2ZpbGUgICAgIGZmX3ZrX2F2MV9w cm9maWxlX3RvX3ZrKGludCBwcm9maWxlKTsKLQotLyoqCi0gKiBDcmVhdGVzIGltYWdlIHZpZXdz IGZvciB2aWRlbyBmcmFtZXMuCi0gKi8KLWludCBmZl92a19jcmVhdGVfdmlldyhGRlZ1bGthbkNv bnRleHQgKnMsIEZGVmtWaWRlb0NvbW1vbiAqY29tbW9uLAotICAgICAgICAgICAgICAgICAgICAg IFZrSW1hZ2VWaWV3ICp2aWV3LCBWa0ltYWdlQXNwZWN0RmxhZ3MgKmFzcGVjdCwKLSAgICAgICAg ICAgICAgICAgICAgICBBVlZrRnJhbWUgKnNyYywgVmtGb3JtYXQgdmtmLCBpbnQgaXNfZHBiKTsK LQotLyoqCi0gKiBJbml0aWFsaXplIHZpZGVvIHNlc3Npb24sIGFsbG9jYXRpbmcgYW5kIGJpbmRp bmcgbmVjZXNzYXJ5IG1lbW9yeS4KLSAqLwotaW50IGZmX3ZrX3ZpZGVvX2NvbW1vbl9pbml0KEFW Q29kZWNDb250ZXh0ICphdmN0eCwgRkZWdWxrYW5Db250ZXh0ICpzLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEZGVmtWaWRlb0NvbW1vbiAqY29tbW9uLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFZrVmlkZW9TZXNzaW9uQ3JlYXRlSW5mb0tIUiAqc2Vzc2lvbl9jcmVhdGUpOwot Ci0vKioKLSAqIEZyZWUgdmlkZW8gc2Vzc2lvbiBhbmQgcmVxdWlyZWQgcmVzb3VyY2VzLgotICov Ci12b2lkIGZmX3ZrX3ZpZGVvX2NvbW1vbl91bmluaXQoRkZWdWxrYW5Db250ZXh0ICpzLCBGRlZr VmlkZW9Db21tb24gKmNvbW1vbik7Ci0KLSNlbmRpZiAvKiBBVkNPREVDX1ZVTEtBTl9WSURFT19I ICovCi0tIAoyLjQ5LjEKCgpGcm9tIDgwMzViNTc2YzI4ODcwNWRmOTJlNmM3MWE0YzM1ZGM0YjA4 YjE2MzAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCkZyb206IEphbWFpa2ExIDxsdWthc3pjejE4 QHdwLnBsPgpEYXRlOiBXZWQsIDMgU2VwIDIwMjUgMTM6NDQ6MTEgKzAwMDAKU3ViamVjdDogW1BB VENIIDA5NC8xMThdIENoYW5naW5nIHZ1bGthbiBmaWxlIGRpcmVjdG9yeQoKLS0tCiBsaWJhdmNv ZGVjL3Z1bGthbi92dWxrYW5fdmlkZW8uaCB8IDEwMiArKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrCiAxIGZpbGUgY2hhbmdlZCwgMTAyIGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEw MDY0NCBsaWJhdmNvZGVjL3Z1bGthbi92dWxrYW5fdmlkZW8uaAoKZGlmZiAtLWdpdCBhL2xpYmF2 Y29kZWMvdnVsa2FuL3Z1bGthbl92aWRlby5oIGIvbGliYXZjb2RlYy92dWxrYW4vdnVsa2FuX3Zp ZGVvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uZTQ2MGZlNzhiMQot LS0gL2Rldi9udWxsCisrKyBiL2xpYmF2Y29kZWMvdnVsa2FuL3Z1bGthbl92aWRlby5oCkBAIC0w LDAgKzEsMTAyIEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgorICoKKyAq IEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVk IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH TlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBH ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0 ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g U3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorICovCisKKyNp Zm5kZWYgQVZDT0RFQ19WVUxLQU5fVklERU9fSAorI2RlZmluZSBBVkNPREVDX1ZVTEtBTl9WSURF T19ICisKKyNpbmNsdWRlICJsaWJhdmNvZGVjL2F2Y29kZWMuaCIKKyNpbmNsdWRlICIuLi8uLi9s aWJhdnV0aWwvdnVsa2FuL3Z1bGthbi5oIgorCisjaW5jbHVkZSA8dmtfdmlkZW8vdnVsa2FuX3Zp ZGVvX2NvZGVjc19jb21tb24uaD4KKworI2RlZmluZSBDT0RFQ19WRVJfTUFKKHZlcikgKHZlciA+ PiAyMikKKyNkZWZpbmUgQ09ERUNfVkVSX01JTih2ZXIpICgodmVyID4+IDEyKSAmICgoMSA8PCAx MCkgLSAxKSkKKyNkZWZpbmUgQ09ERUNfVkVSX1BBVCh2ZXIpICh2ZXIgJiAoKDEgPDwgMTIpIC0g MSkpCisjZGVmaW5lIENPREVDX1ZFUih2ZXIpIENPREVDX1ZFUl9NQUoodmVyKSwgQ09ERUNfVkVS X01JTih2ZXIpLCBDT0RFQ19WRVJfUEFUKHZlcikKKwordHlwZWRlZiBzdHJ1Y3QgRkZWa1ZpZGVv U2Vzc2lvbiB7CisgICAgVmtWaWRlb1Nlc3Npb25LSFIgc2Vzc2lvbjsKKyAgICBWa0RldmljZU1l bW9yeSAqbWVtOworICAgIHVpbnQzMl90IG5iX21lbTsKKworICAgIFZrU2FtcGxlclljYmNyQ29u dmVyc2lvbiB5dXZfc2FtcGxlcjsKKworICAgIEFWQnVmZmVyUmVmICpkcGJfaHdmY19yZWY7Cisg ICAgaW50IGxheWVyZWRfZHBiOworICAgIEFWRnJhbWUgKmxheWVyZWRfZnJhbWU7CisgICAgVmtJ bWFnZVZpZXcgbGF5ZXJlZF92aWV3OworICAgIFZrSW1hZ2VBc3BlY3RGbGFncyBsYXllcmVkX2Fz cGVjdDsKK30gRkZWa1ZpZGVvQ29tbW9uOworCisvKioKKyAqIEdldCBwaXhmbXQgZnJvbSBhIFZ1 bGthbiBmb3JtYXQuCisgKi8KK2VudW0gQVZQaXhlbEZvcm1hdCBmZl92a19waXhfZm10X2Zyb21f dmtmbXQoVmtGb3JtYXQgdmtmKTsKKworLyoqCisgKiBHZXQgYXNwZWN0IGJpdHMgd2hpY2ggaW5j bHVkZSBhbGwgcGxhbmVzIGZyb20gYSBWa0Zvcm1hdC4KKyAqLworVmtJbWFnZUFzcGVjdEZsYWdz IGZmX3ZrX2FzcGVjdF9iaXRzX2Zyb21fdmtmbXQoVmtGb3JtYXQgdmtmKTsKKworLyoqCisgKiBH ZXQgVnVsa2FuJ3MgY2hyb21hIHN1YnNhbXBsaW5nIGZyb20gYSBwaXhmbXQgZGVzY3JpcHRvci4K KyAqLworVmtWaWRlb0Nocm9tYVN1YnNhbXBsaW5nRmxhZ0JpdHNLSFIgZmZfdmtfc3Vic2FtcGxp bmdfZnJvbV9hdl9kZXNjKGNvbnN0IEFWUGl4Rm10RGVzY3JpcHRvciAqZGVzYyk7CisKKy8qKgor ICogR2V0IFZ1bGthbidzIGJpdCBkZXB0aCBmcm9tIGFuIFs4OjEyXSBpbnRlZ2VyLgorICovCitW a1ZpZGVvQ29tcG9uZW50Qml0RGVwdGhGbGFnQml0c0tIUiBmZl92a19kZXB0aF9mcm9tX2F2X2Rl cHRoKGludCBkZXB0aCk7CisKKy8qKgorICogQ29udmVydCBsZXZlbCBmcm9tIFZ1bGthbiB0byBB Vi4KKyAqLworaW50IGZmX3ZrX2gyNjRfbGV2ZWxfdG9fYXYoU3RkVmlkZW9IMjY0TGV2ZWxJZGMg bGV2ZWwpOworaW50IGZmX3ZrX2gyNjVfbGV2ZWxfdG9fYXYoU3RkVmlkZW9IMjY1TGV2ZWxJZGMg bGV2ZWwpOworCitTdGRWaWRlb0gyNjRMZXZlbElkYyBmZl92a19oMjY0X2xldmVsX3RvX3ZrKGlu dCBsZXZlbF9pZGMpOworU3RkVmlkZW9IMjY1TGV2ZWxJZGMgZmZfdmtfaDI2NV9sZXZlbF90b192 ayhpbnQgbGV2ZWxfaWRjKTsKK1N0ZFZpZGVvQVYxTGV2ZWwgICAgIGZmX3ZrX2F2MV9sZXZlbF90 b192ayhpbnQgbGV2ZWwpOworCisvKioKKyAqIENvbnZlcnQgcHJvZmlsZSBmcm9tL3RvIEFWIHRv IFZ1bGthbgorICovCitTdGRWaWRlb0gyNjRQcm9maWxlSWRjIGZmX3ZrX2gyNjRfcHJvZmlsZV90 b192ayhpbnQgcHJvZmlsZSk7CitTdGRWaWRlb0gyNjVQcm9maWxlSWRjIGZmX3ZrX2gyNjVfcHJv ZmlsZV90b192ayhpbnQgcHJvZmlsZSk7CitTdGRWaWRlb0FWMVByb2ZpbGUgICAgIGZmX3ZrX2F2 MV9wcm9maWxlX3RvX3ZrKGludCBwcm9maWxlKTsKKworLyoqCisgKiBDcmVhdGVzIGltYWdlIHZp ZXdzIGZvciB2aWRlbyBmcmFtZXMuCisgKi8KK2ludCBmZl92a19jcmVhdGVfdmlldyhGRlZ1bGth bkNvbnRleHQgKnMsIEZGVmtWaWRlb0NvbW1vbiAqY29tbW9uLAorICAgICAgICAgICAgICAgICAg ICAgIFZrSW1hZ2VWaWV3ICp2aWV3LCBWa0ltYWdlQXNwZWN0RmxhZ3MgKmFzcGVjdCwKKyAgICAg ICAgICAgICAgICAgICAgICBBVlZrRnJhbWUgKnNyYywgVmtGb3JtYXQgdmtmLCBpbnQgaXNfZHBi KTsKKworLyoqCisgKiBJbml0aWFsaXplIHZpZGVvIHNlc3Npb24sIGFsbG9jYXRpbmcgYW5kIGJp bmRpbmcgbmVjZXNzYXJ5IG1lbW9yeS4KKyAqLworaW50IGZmX3ZrX3ZpZGVvX2NvbW1vbl9pbml0 KEFWQ29kZWNDb250ZXh0ICphdmN0eCwgRkZWdWxrYW5Db250ZXh0ICpzLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEZGVmtWaWRlb0NvbW1vbiAqY29tbW9uLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFZrVmlkZW9TZXNzaW9uQ3JlYXRlSW5mb0tIUiAqc2Vzc2lvbl9jcmVhdGUp OworCisvKioKKyAqIEZyZWUgdmlkZW8gc2Vzc2lvbiBhbmQgcmVxdWlyZWQgcmVzb3VyY2VzLgor ICovCit2b2lkIGZmX3ZrX3ZpZGVvX2NvbW1vbl91bmluaXQoRkZWdWxrYW5Db250ZXh0ICpzLCBG RlZrVmlkZW9Db21tb24gKmNvbW1vbik7CisKKyNlbmRpZiAvKiBBVkNPREVDX1ZVTEtBTl9WSURF T19IICovCi0tIAoyLjQ5LjEKCgpGcm9tIGRkZTA2ODExZWVlZTI3MTE0MDVmODA5N2I3YzI4YWVh MzhhODA4NjAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCkZyb206IEphbWFpa2ExIDxsdWthc3pj ejE4QHdwLnBsPgpEYXRlOiBXZWQsIDMgU2VwIDIwMjUgMTM6NDQ6MzIgKzAwMDAKU3ViamVjdDog W1BBVENIIDA5NS8xMThdIENoYW5naW5nIHZ1bGthbiBmaWxlIGRpcmVjdG9yeQoKLS0tCiBsaWJh dmNvZGVjL3Z1bGthbi9jb21tb24uY29tcCB8IDI3OSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgMjc5IGRlbGV0aW9ucygtKQogZGVsZXRlIG1vZGUg MTAwNjQ0IGxpYmF2Y29kZWMvdnVsa2FuL2NvbW1vbi5jb21wCgpkaWZmIC0tZ2l0IGEvbGliYXZj b2RlYy92dWxrYW4vY29tbW9uLmNvbXAgYi9saWJhdmNvZGVjL3Z1bGthbi9jb21tb24uY29tcApk ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjgyNTY5M2ZhMy4uMDAwMDAwMDAwMAotLS0g YS9saWJhdmNvZGVjL3Z1bGthbi9jb21tb24uY29tcAorKysgL2Rldi9udWxsCkBAIC0xLDI3OSAr MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDI0IEx5bm5lIDxkZXZAbHlubmUuZWU+Ci0g KgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgotICoKLSAqIEZGbXBlZyBpcyBmcmVl IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1 bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vu c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgot ICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh dGVyIHZlcnNpb24uCi0gKgotICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo YXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3Vs ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwot ICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBT b2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG bG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQotICovCi0KLWxheW91dChidWZmZXJfcmVm ZXJlbmNlLCBidWZmZXJfcmVmZXJlbmNlX2FsaWduID0gMSkgYnVmZmVyIHU4YnVmIHsKLSAgICB1 aW50OF90IHY7Ci19OwotCi1sYXlvdXQoYnVmZmVyX3JlZmVyZW5jZSwgYnVmZmVyX3JlZmVyZW5j ZV9hbGlnbiA9IDEpIGJ1ZmZlciB1OHZlYzJidWYgewotICAgIHU4dmVjMiB2OwotfTsKLQotbGF5 b3V0KGJ1ZmZlcl9yZWZlcmVuY2UsIGJ1ZmZlcl9yZWZlcmVuY2VfYWxpZ24gPSAxKSBidWZmZXIg dTh2ZWM0YnVmIHsKLSAgICB1OHZlYzQgdjsKLX07Ci0KLWxheW91dChidWZmZXJfcmVmZXJlbmNl LCBidWZmZXJfcmVmZXJlbmNlX2FsaWduID0gMikgYnVmZmVyIHUxNmJ1ZiB7Ci0gICAgdWludDE2 X3QgdjsKLX07Ci0KLWxheW91dChidWZmZXJfcmVmZXJlbmNlLCBidWZmZXJfcmVmZXJlbmNlX2Fs aWduID0gNCkgYnVmZmVyIHUzMmJ1ZiB7Ci0gICAgdWludDMyX3QgdjsKLX07Ci0KLWxheW91dChi dWZmZXJfcmVmZXJlbmNlLCBidWZmZXJfcmVmZXJlbmNlX2FsaWduID0gNCkgYnVmZmVyIHUzMnZl YzJidWYgewotICAgIHUzMnZlYzIgdjsKLX07Ci0KLWxheW91dChidWZmZXJfcmVmZXJlbmNlLCBi dWZmZXJfcmVmZXJlbmNlX2FsaWduID0gOCkgYnVmZmVyIHU2NGJ1ZiB7Ci0gICAgdWludDY0X3Qg djsKLX07Ci0KLSNkZWZpbmUgT0ZGQlVGKHR5cGUsIGIsIGwpIFwKLSAgICB0eXBlKHVpbnQ2NF90 KGIpICsgdWludDY0X3QobCkpCi0KLSNkZWZpbmUgemVyb19leHRlbmQoYSwgcCkgXAotICAgICgo YSkgJiAoKDEgPDwgKHApKSAtIDEpKQotCi0jZGVmaW5lIHNpZ25fZXh0ZW5kKHZhbCwgYml0cykg XAotICAgIGJpdGZpZWxkRXh0cmFjdCh2YWwsIDAsIGJpdHMpCi0KLSNkZWZpbmUgZm9sZChkaWZm LCBiaXRzKSBcCi0gICAgc2lnbl9leHRlbmQoZGlmZiwgYml0cykKLQotI2RlZmluZSBtaWRfcHJl ZChhLCBiLCBjKSBcCi0gICAgbWF4KG1pbigoYSksIChiKSksIG1pbihtYXgoKGEpLCAoYikpLCAo YykpKQotCi0vKiBUT0RPOiBvcHRpbWl6ZSAqLwotdWludCBhbGlnbih1aW50IHNyYywgdWludCBh KQotewotICAgIHVpbnQgcmVzID0gc3JjICUgYTsKLSAgICBpZiAocmVzID09IDApCi0gICAgICAg IHJldHVybiBzcmM7Ci0gICAgcmV0dXJuIHNyYyArIGEgLSByZXM7Ci19Ci0KLS8qIFRPRE86IG9w dGltaXplICovCi11aW50NjRfdCBhbGlnbjY0KHVpbnQ2NF90IHNyYywgdWludDY0X3QgYSkKLXsK LSAgICB1aW50NjRfdCByZXMgPSBzcmMgJSBhOwotICAgIGlmIChyZXMgPT0gMCkKLSAgICAgICAg cmV0dXJuIHNyYzsKLSAgICByZXR1cm4gc3JjICsgYSAtIHJlczsKLX0KLQotI2RlZmluZSByZXZl cnNlNChzcmMpIFwKLSAgICAocGFjazMyKHVucGFjazgodWludDMyX3Qoc3JjKSkud3p5eCkpCi0K LXUzMnZlYzIgcmV2ZXJzZTgodWludDY0X3Qgc3JjKQotewotICAgIHUzMnZlYzIgdG1wID0gdW5w YWNrMzIoc3JjKTsKLSAgICB0bXAueCA9IHJldmVyc2U0KHRtcC54KTsKLSAgICB0bXAueSA9IHJl dmVyc2U0KHRtcC55KTsKLSAgICByZXR1cm4gdG1wLnl4OwotfQotCi0jaWZkZWYgUEJfMzIKLSNk ZWZpbmUgQklUX0JVRl9UWVBFIHVpbnQzMl90Ci0jZGVmaW5lIEJVRl9UWVBFIHUzMmJ1ZgotI2Rl ZmluZSBCVUZfUkVWRVJTRShzcmMpIHJldmVyc2U0KHNyYykKLSNkZWZpbmUgQlVGX0JJVFMgdWlu dDhfdCgzMikKLSNkZWZpbmUgQlVGX0JZVEVTIHVpbnQ4X3QoNCkKLSNkZWZpbmUgQllURV9FWFRS QUNUKHNyYywgYnl0ZV9vZmYpIFwKLSAgICAodWludDhfdChiaXRmaWVsZEV4dHJhY3QoKHNyYyks ICgoYnl0ZV9vZmYpIDw8IDMpLCA4KSkpCi0jZWxzZQotI2RlZmluZSBCSVRfQlVGX1RZUEUgdWlu dDY0X3QKLSNkZWZpbmUgQlVGX1RZUEUgdTMydmVjMmJ1ZgotI2RlZmluZSBCVUZfUkVWRVJTRShz cmMpIHJldmVyc2U4KHNyYykKLSNkZWZpbmUgQlVGX0JJVFMgdWludDhfdCg2NCkKLSNkZWZpbmUg QlVGX0JZVEVTIHVpbnQ4X3QoOCkKLSNkZWZpbmUgQllURV9FWFRSQUNUKHNyYywgYnl0ZV9vZmYp IFwKLSAgICAodWludDhfdCgoKHNyYykgPj4gKChieXRlX29mZikgPDwgMykpICYgMHhGRikpCi0j ZW5kaWYKLQotc3RydWN0IFB1dEJpdENvbnRleHQgewotICAgIHVpbnQ2NF90IGJ1Zl9zdGFydDsK LSAgICB1aW50NjRfdCBidWY7Ci0KLSAgICBCSVRfQlVGX1RZUEUgYml0X2J1ZjsKLSAgICB1aW50 OF90IGJpdF9sZWZ0OwotfTsKLQotdm9pZCBwdXRfYml0cyhpbm91dCBQdXRCaXRDb250ZXh0IHBi LCBjb25zdCB1aW50MzJfdCBuLCB1aW50MzJfdCB2YWx1ZSkKLXsKLSAgICBpZiAobiA8IHBiLmJp dF9sZWZ0KSB7Ci0gICAgICAgIHBiLmJpdF9idWYgPSAocGIuYml0X2J1ZiA8PCBuKSB8IHZhbHVl OwotICAgICAgICBwYi5iaXRfbGVmdCAtPSB1aW50OF90KG4pOwotICAgIH0gZWxzZSB7Ci0gICAg ICAgIHBiLmJpdF9idWYgPDw9IHBiLmJpdF9sZWZ0OwotICAgICAgICBwYi5iaXRfYnVmIHw9ICh2 YWx1ZSA+PiAobiAtIHBiLmJpdF9sZWZ0KSk7Ci0KLSNpZmRlZiBQQl9VTkFMSUdORUQKLSAgICAg ICAgdThidWYgYnMgPSB1OGJ1ZihwYi5idWYpOwotICAgICAgICBbW3Vucm9sbF1dCi0gICAgICAg IGZvciAodWludDhfdCBpID0gdWludDhfdCgwKTsgaSA8IEJVRl9CWVRFUzsgaSsrKQotICAgICAg ICAgICAgYnNbaV0udiA9IEJZVEVfRVhUUkFDVChwYi5iaXRfYnVmLCBCVUZfQllURVMgLSB1aW50 OF90KDEpIC0gaSk7Ci0jZWxzZQotI2lmZGVmIERFQlVHCi0gICAgICAgIGlmICgocGIuYnVmICUg QlVGX0JZVEVTKSAhPSAwKQotICAgICAgICAgICAgZGVidWdQcmludGZFWFQoInB1dF9iaXRzIGJ1 ZmZlciBpcyBub3QgYWxpZ25lZCEiKTsKLSNlbmRpZgotCi0gICAgICAgIEJVRl9UWVBFIGJzID0g QlVGX1RZUEUocGIuYnVmKTsKLSAgICAgICAgYnMudiA9IEJVRl9SRVZFUlNFKHBiLmJpdF9idWYp OwotI2VuZGlmCi0gICAgICAgIHBiLmJ1ZiA9IHVpbnQ2NF90KGJzKSArIEJVRl9CWVRFUzsKLQot ICAgICAgICBwYi5iaXRfbGVmdCArPSBCVUZfQklUUyAtIHVpbnQ4X3Qobik7Ci0gICAgICAgIHBi LmJpdF9idWYgPSB2YWx1ZTsKLSAgICB9Ci19Ci0KLXVpbnQzMl90IGZsdXNoX3B1dF9iaXRzKGlu b3V0IFB1dEJpdENvbnRleHQgcGIpCi17Ci0gICAgLyogQWxpZ24gYml0cyB0byBNU0JzICovCi0g ICAgaWYgKHBiLmJpdF9sZWZ0IDwgQlVGX0JJVFMpCi0gICAgICAgIHBiLmJpdF9idWYgPDw9IHBi LmJpdF9sZWZ0OwotCi0gICAgaWYgKHBiLmJpdF9sZWZ0IDwgQlVGX0JJVFMpIHsKLSAgICAgICAg dWludCB0b193cml0ZSA9ICgoQlVGX0JJVFMgLSBwYi5iaXRfbGVmdCAtIDEpID4+IDMpICsgMTsK LQotICAgICAgICB1OGJ1ZiBicyA9IHU4YnVmKHBiLmJ1Zik7Ci0gICAgICAgIGZvciAoaW50IGkg PSAwOyBpIDwgdG9fd3JpdGU7IGkrKykKLSAgICAgICAgICAgIGJzW2ldLnYgPSBCWVRFX0VYVFJB Q1QocGIuYml0X2J1ZiwgQlVGX0JZVEVTIC0gdWludDhfdCgxKSAtIGkpOwotICAgICAgICBwYi5i dWYgPSB1aW50NjRfdChicykgKyB0b193cml0ZTsKLSAgICB9Ci0KLSAgICBwYi5iaXRfbGVmdCA9 IEJVRl9CSVRTOwotICAgIHBiLmJpdF9idWYgPSAweDA7Ci0KLSAgICByZXR1cm4gdWludDMyX3Qo cGIuYnVmIC0gcGIuYnVmX3N0YXJ0KTsKLX0KLQotdm9pZCBpbml0X3B1dF9iaXRzKG91dCBQdXRC aXRDb250ZXh0IHBiLCB1OGJ1ZiBkYXRhLCB1aW50NjRfdCBsZW4pCi17Ci0gICAgcGIuYnVmX3N0 YXJ0ID0gdWludDY0X3QoZGF0YSk7Ci0gICAgcGIuYnVmID0gdWludDY0X3QoZGF0YSk7Ci0KLSAg ICBwYi5iaXRfYnVmID0gMDsKLSAgICBwYi5iaXRfbGVmdCA9IEJVRl9CSVRTOwotfQotCi11aW50 NjRfdCBwdXRfYml0c19jb3VudChpbiBQdXRCaXRDb250ZXh0IHBiKQotewotICAgIHJldHVybiAo cGIuYnVmIC0gcGIuYnVmX3N0YXJ0KSo4ICsgQlVGX0JJVFMgLSBwYi5iaXRfbGVmdDsKLX0KLQot dWludDMyX3QgcHV0X2J5dGVzX2NvdW50KGluIFB1dEJpdENvbnRleHQgcGIpCi17Ci0gICAgdWlu dDY0X3QgbnVtX2J5dGVzID0gKHBiLmJ1ZiAtIHBiLmJ1Zl9zdGFydCkgKyAoKEJVRl9CSVRTIC0g cGIuYml0X2xlZnQpID4+IDMpOwotICAgIHJldHVybiB1aW50MzJfdChudW1fYnl0ZXMpOwotfQot Ci1zdHJ1Y3QgR2V0Qml0Q29udGV4dCB7Ci0gICAgdWludDY0X3QgYnVmX3N0YXJ0OwotICAgIHVp bnQ2NF90IGJ1ZjsKLSAgICB1aW50NjRfdCBidWZfZW5kOwotCi0gICAgdWludDY0X3QgYml0czsK LSAgICBpbnQgYml0c192YWxpZDsKLSAgICBpbnQgc2l6ZV9pbl9iaXRzOwotfTsKLQotI2RlZmlu ZSBMT0FENjQoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg ICAgIHU4dmVjNGJ1ZiBwdHIgPSB1OHZlYzRidWYoZ2IuYnVmKTsgICAgICAgICAgICAgXAotICAg ICAgICB1aW50MzJfdCByZjEgPSBwYWNrMzIoKHB0clswXS52KS53enl4KTsgICAgICAgIFwKLSAg ICAgICAgdWludDMyX3QgcmYyID0gcGFjazMyKChwdHJbMV0udikud3p5eCk7ICAgICAgICBcCi0g ICAgICAgIGdiLmJ1ZiArPSA4OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot ICAgICAgICBnYi5iaXRzID0gdWludDY0X3QocmYxKSA8PCAzMiB8IHVpbnQ2NF90KHJmMik7IFwK LSAgICAgICAgZ2IuYml0c192YWxpZCA9IDY0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICBc Ci0gICAgfQotCi0jZGVmaW5lIFJFTE9BRDMyKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHU4dmVjNGJ1ZiBwdHIg PSB1OHZlYzRidWYoZ2IuYnVmKTsgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHVp bnQzMl90IHJmID0gcGFjazMyKChwdHJbMF0udikud3p5eCk7ICAgICAgICAgICAgICAgICAgICBc Ci0gICAgICAgIGdiLmJ1ZiArPSA0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCi0gICAgICAgIGdiLmJpdHMgPSB1aW50NjRfdChyZikgPDwgKDMyIC0gZ2Iu Yml0c192YWxpZCkgfCBnYi5iaXRzOyBcCi0gICAgICAgIGdiLmJpdHNfdmFsaWQgKz0gMzI7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfQotCi12b2lkIGluaXRf Z2V0X2JpdHMoaW5vdXQgR2V0Qml0Q29udGV4dCBnYiwgdThidWYgZGF0YSwgaW50IGxlbikKLXsK LSAgICBnYi5idWYgPSBnYi5idWZfc3RhcnQgPSB1aW50NjRfdChkYXRhKTsKLSAgICBnYi5idWZf ZW5kID0gdWludDY0X3QoZGF0YSkgKyBsZW47Ci0gICAgZ2Iuc2l6ZV9pbl9iaXRzID0gbGVuICog ODsKLQotICAgIC8qIFByZWxvYWQgKi8KLSAgICBMT0FENjQoKQotfQotCi1ib29sIGdldF9iaXQo aW5vdXQgR2V0Qml0Q29udGV4dCBnYikKLXsKLSAgICBpZiAoZ2IuYml0c192YWxpZCA9PSAwKQot ICAgICAgICBMT0FENjQoKQotCi0gICAgYm9vbCB2YWwgPSBib29sKGdiLmJpdHMgPj4gKDY0IC0g MSkpOwotICAgIGdiLmJpdHMgPDw9IDE7Ci0gICAgZ2IuYml0c192YWxpZC0tOwotICAgIHJldHVy biB2YWw7Ci19Ci0KLXVpbnQgZ2V0X2JpdHMoaW5vdXQgR2V0Qml0Q29udGV4dCBnYiwgaW50IG4p Ci17Ci0gICAgaWYgKG4gPT0gMCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAobiA+IGdi LmJpdHNfdmFsaWQpCi0gICAgICAgIFJFTE9BRDMyKCkKLQotICAgIHVpbnQgdmFsID0gdWludChn Yi5iaXRzID4+ICg2NCAtIG4pKTsKLSAgICBnYi5iaXRzIDw8PSBuOwotICAgIGdiLmJpdHNfdmFs aWQgLT0gbjsKLSAgICByZXR1cm4gdmFsOwotfQotCi11aW50IHNob3dfYml0cyhpbm91dCBHZXRC aXRDb250ZXh0IGdiLCBpbnQgbikKLXsKLSAgICBpZiAobiA+IGdiLmJpdHNfdmFsaWQpCi0gICAg ICAgIFJFTE9BRDMyKCkKLQotICAgIHJldHVybiB1aW50KGdiLmJpdHMgPj4gKDY0IC0gbikpOwot fQotCi12b2lkIHNraXBfYml0cyhpbm91dCBHZXRCaXRDb250ZXh0IGdiLCBpbnQgbikKLXsKLSAg ICBpZiAobiA+IGdiLmJpdHNfdmFsaWQpCi0gICAgICAgIFJFTE9BRDMyKCkKLQotICAgIGdiLmJp dHMgPDw9IG47Ci0gICAgZ2IuYml0c192YWxpZCAtPSBuOwotfQotCi1pbnQgdGVsbF9iaXRzKGlu IEdldEJpdENvbnRleHQgZ2IpCi17Ci0gICAgcmV0dXJuIGludChnYi5idWYgLSBnYi5idWZfc3Rh cnQpICogOCAtIGdiLmJpdHNfdmFsaWQ7Ci19Ci0KLWludCBsZWZ0X2JpdHMoaW4gR2V0Qml0Q29u dGV4dCBnYikKLXsKLSAgICByZXR1cm4gZ2Iuc2l6ZV9pbl9iaXRzIC0gaW50KGdiLmJ1ZiAtIGdi LmJ1Zl9zdGFydCkgKiA4ICsgZ2IuYml0c192YWxpZDsKLX0KLS0gCjIuNDkuMQoKCkZyb20gZjI0 MTk2ODg0MGY2M2M3OTY5NTVmNjVjNTc1OTEyMDExMDBiNmEzYiBNb24gU2VwIDE3IDAwOjAwOjAw IDIwMDEKRnJvbTogSmFtYWlrYTEgPGx1a2FzemN6MThAd3AucGw+CkRhdGU6IFdlZCwgMyBTZXAg MjAyNSAxMzo0NDo0MSArMDAwMApTdWJqZWN0OiBbUEFUQ0ggMDk2LzExOF0gQ2hhbmdpbmcgdnVs a2FuIGZpbGUgZGlyZWN0b3J5CgotLS0KIGxpYmF2Y29kZWMvdnVsa2FuL2ZmdjFfY29tbW9uLmNv bXAgfCAxODEgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAx ODEgZGVsZXRpb25zKC0pCiBkZWxldGUgbW9kZSAxMDA2NDQgbGliYXZjb2RlYy92dWxrYW4vZmZ2 MV9jb21tb24uY29tcAoKZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvdnVsa2FuL2ZmdjFfY29tbW9u LmNvbXAgYi9saWJhdmNvZGVjL3Z1bGthbi9mZnYxX2NvbW1vbi5jb21wCmRlbGV0ZWQgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAzZDQwNTkyNzM5Li4wMDAwMDAwMDAwCi0tLSBhL2xpYmF2Y29kZWMv dnVsa2FuL2ZmdjFfY29tbW9uLmNvbXAKKysrIC9kZXYvbnVsbApAQCAtMSwxODEgKzAsMCBAQAot LyoKLSAqIEZGdjEgY29kZWMKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMjQgTHlubmUgPGRldkBs eW5uZS5lZT4KLSAqCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCi0gKgotICogRkZt cGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICog bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp YwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv bjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0 aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFC SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQot ICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0g KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy YWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRv IHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl ZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCi0gKi8KLQotc3RydWN0 IFNsaWNlQ29udGV4dCB7Ci0gICAgUmFuZ2VDb2RlciBjOwotCi0jaWYgIWRlZmluZWQoREVDT0RF KQotICAgIFB1dEJpdENvbnRleHQgcGI7IC8qIDgqOCBieXRlcyAqLwotI2Vsc2UKLSAgICBHZXRC aXRDb250ZXh0IGdiOwotI2VuZGlmCi0KLSAgICBpdmVjMiBzbGljZV9kaW07Ci0gICAgaXZlYzIg c2xpY2VfcG9zOwotICAgIGl2ZWMyIHNsaWNlX3JjdF9jb2VmOwotICAgIHU4dmVjMyBxdWFudF90 YWJsZV9pZHg7Ci0KLSAgICB1aW50IGhkcl9sZW47IC8vIG9ubHkgdXNlZCBmb3IgZ29sb21iCi0K LSAgICB1aW50IHNsaWNlX2NvZGluZ19tb2RlOwotICAgIGJvb2wgc2xpY2VfcmVzZXRfY29udGV4 dHM7Ci19OwotCi0vKiAtMSwgeyAtMSwgMCB9ICovCi1pbnQgcHJlZGljdChpbnQgTCwgaXZlYzIg dG9wKQotewotICAgIHJldHVybiBtaWRfcHJlZChMLCBMICsgdG9wWzFdIC0gdG9wWzBdLCB0b3Bb MV0pOwotfQotCi0vKiB7IC0yLCAtMSB9LCB7IC0xLCAwLCAxIH0sIDAgKi8KLWludCBnZXRfY29u dGV4dChWVFlQRTIgY3VyX2wsIFZUWVBFMyB0b3BfbCwgVFlQRSB0b3AyLCB1aW50OF90IHF1YW50 X3RhYmxlX2lkeCkKLXsKLSAgICBjb25zdCBpbnQgTFQgPSB0b3BfbFswXTsgLyogLTEgKi8KLSAg ICBjb25zdCBpbnQgVCAgPSB0b3BfbFsxXTsgLyogIDAgKi8KLSAgICBjb25zdCBpbnQgUlQgPSB0 b3BfbFsyXTsgLyogIDEgKi8KLSAgICBjb25zdCBpbnQgTCAgPSBjdXJfbFsxXTsgLyogLTEgKi8K LQotICAgIGludCBiYXNlID0gcXVhbnRfdGFibGVbcXVhbnRfdGFibGVfaWR4XVswXVsoTCAtIExU KSAmIE1BWF9RVUFOVF9UQUJMRV9NQVNLXSArCi0gICAgICAgICAgICAgICBxdWFudF90YWJsZVtx dWFudF90YWJsZV9pZHhdWzFdWyhMVCAtIFQpICYgTUFYX1FVQU5UX1RBQkxFX01BU0tdICsKLSAg ICAgICAgICAgICAgIHF1YW50X3RhYmxlW3F1YW50X3RhYmxlX2lkeF1bMl1bKFQgLSBSVCkgJiBN QVhfUVVBTlRfVEFCTEVfTUFTS107Ci0KLSAgICBpZiAoKHF1YW50X3RhYmxlW3F1YW50X3RhYmxl X2lkeF1bM11bMTI3XSA9PSAwKSAmJgotICAgICAgICAocXVhbnRfdGFibGVbcXVhbnRfdGFibGVf aWR4XVs0XVsxMjddID09IDApKQotICAgICAgICByZXR1cm4gYmFzZTsKLQotICAgIGNvbnN0IGlu dCBUVCA9IHRvcDI7ICAgICAvKiAtMiAqLwotICAgIGNvbnN0IGludCBMTCA9IGN1cl9sWzBdOyAv KiAtMiAqLwotICAgIHJldHVybiBiYXNlICsKLSAgICAgICAgICAgcXVhbnRfdGFibGVbcXVhbnRf dGFibGVfaWR4XVszXVsoTEwgLSBMKSAmIE1BWF9RVUFOVF9UQUJMRV9NQVNLXSArCi0gICAgICAg ICAgIHF1YW50X3RhYmxlW3F1YW50X3RhYmxlX2lkeF1bNF1bKFRUIC0gVCkgJiBNQVhfUVVBTlRf VEFCTEVfTUFTS107Ci19Ci0KLWNvbnN0IHVpbnQzMl90IGxvZzJfcnVuWzQxXSA9IHsKLSAgICAg MCwgIDAsICAwLCAgMCwgIDEsICAxLCAgMSwgIDEsCi0gICAgIDIsICAyLCAgMiwgIDIsICAzLCAg MywgIDMsICAzLAotICAgICA0LCAgNCwgIDUsICA1LCAgNiwgIDYsICA3LCAgNywKLSAgICAgOCwg IDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsCi0gICAgMTYsIDE3LCAxOCwgMTksIDIwLCAyMSwg MjIsIDIzLAotICAgIDI0LAotfTsKLQotdWludCBzbGljZV9jb29yZCh1aW50IHdpZHRoLCB1aW50 IHN4LCB1aW50IG51bV9oX3NsaWNlcywgdWludCBjaHJvbWFfc2hpZnQpCi17Ci0gICAgdWludCBt cHcgPSAxIDw8IGNocm9tYV9zaGlmdDsKLSAgICB1aW50IGF3aWR0aCA9IGFsaWduKHdpZHRoLCBt cHcpOwotCi0gICAgaWYgKCh2ZXJzaW9uIDwgNCkgfHwgKCh2ZXJzaW9uID09IDQpICYmIChtaWNy b192ZXJzaW9uIDwgMykpKQotICAgICAgICByZXR1cm4gd2lkdGggKiBzeCAvIG51bV9oX3NsaWNl czsKLQotICAgIHN4ID0gKDIgKiBhd2lkdGggKiBzeCArIG51bV9oX3NsaWNlcyAqIG1wdykgLyAo MiAqIG51bV9oX3NsaWNlcyAqIG1wdykgKiBtcHc7Ci0gICAgaWYgKHN4ID09IGF3aWR0aCkKLSAg ICAgICAgc3ggPSB3aWR0aDsKLQotICAgIHJldHVybiBzeDsKLX0KLQotI2lmZGVmIFJHQgotI2Rl ZmluZSBSR0JfTEJVRiAoUkdCX0xJTkVDQUNIRSAtIDEpCi0jZGVmaW5lIExBRERSKHApIChpdmVj MigocCkueCwgKChwKS55ICYgUkdCX0xCVUYpKSkKLQotaXZlYzIgZ2V0X3ByZWQocmVhZG9ubHkg dWltYWdlMkQgcHJlZCwgaXZlYzIgc3AsIGl2ZWMyIG9mZiwKLSAgICAgICAgICAgICAgIGludCBj b21wLCBpbnQgc3csIHVpbnQ4X3QgcXVhbnRfdGFibGVfaWR4LCBib29sIGV4dGVuZF9sb29rdXAp Ci17Ci0gICAgY29uc3QgaXZlYzIgeW9mZl9ib3JkZXIxID0gZXhwZWN0RVhUKG9mZi54ID09IDAs IGZhbHNlKSA/IG9mZiArIGl2ZWMyKDEsIC0xKSA6IG9mZjsKLQotICAgIC8qIFRoYW5rcyB0byB0 aGUgc2FtZSBjb2luY2lkZW5jZSBhcyBiZWxvdywgd2UgY2FuIHNraXAgY2hlY2tpbmcgaWYgb2Zm ID09IDAsIDEgKi8KLSAgICBWVFlQRTMgdG9wICA9IFZUWVBFMyhUWVBFKGltYWdlTG9hZChwcmVk LCBzcCArIExBRERSKHlvZmZfYm9yZGVyMSArIGl2ZWMyKC0xLCAtMSkpKVtjb21wXSksCi0gICAg ICAgICAgICAgICAgICAgICAgICAgVFlQRShpbWFnZUxvYWQocHJlZCwgc3AgKyBMQUREUihvZmYg KyBpdmVjMigwLCAtMSkpKVtjb21wXSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgVFlQRShp bWFnZUxvYWQocHJlZCwgc3AgKyBMQUREUihvZmYgKyBpdmVjMihtaW4oMSwgc3cgLSBvZmYueCAt IDEpLCAtMSkpKVtjb21wXSkpOwotCi0gICAgLyogTm9ybWFsbHksIHdlJ2QgbmVlZCB0byBjaGVj ayBpZiBvZmYgIT0gaXZlYzIoMCwgMCkgaGVyZSwgc2luY2Ugb3RoZXJ3aXNlLCB3ZSBtdXN0Ci0g ICAgICogcmV0dXJuIHplcm8uIEhvd2V2ZXIsIGl2ZWMyKC0xLCAgMCkgKyBpdmVjMigxLCAtMSkg PT0gaXZlYzIoMCwgLTEpLCBlLmcuIHByZXZpb3VzCi0gICAgICogcm93LCAwIG9mZnNldCwgc2Ft ZSBzbGljZSwgd2hpY2ggaXMgemVybyBzaW5jZSB3ZSB6ZXJvIG91dCB0aGUgYnVmZmVyIGZvciBS R0IgKi8KLSAgICBUWVBFIGN1ciA9IFRZUEUoaW1hZ2VMb2FkKHByZWQsIHNwICsgTEFERFIoeW9m Zl9ib3JkZXIxICsgaXZlYzIoLTEsICAwKSkpW2NvbXBdKTsKLQotICAgIGludCBiYXNlID0gcXVh bnRfdGFibGVbcXVhbnRfdGFibGVfaWR4XVswXVsoY3VyICAgIC0gdG9wWzBdKSAmIE1BWF9RVUFO VF9UQUJMRV9NQVNLXSArCi0gICAgICAgICAgICAgICBxdWFudF90YWJsZVtxdWFudF90YWJsZV9p ZHhdWzFdWyh0b3BbMF0gLSB0b3BbMV0pICYgTUFYX1FVQU5UX1RBQkxFX01BU0tdICsKLSAgICAg ICAgICAgICAgIHF1YW50X3RhYmxlW3F1YW50X3RhYmxlX2lkeF1bMl1bKHRvcFsxXSAtIHRvcFsy XSkgJiBNQVhfUVVBTlRfVEFCTEVfTUFTS107Ci0KLSAgICBpZiAoZXhwZWN0RVhUKGV4dGVuZF9s b29rdXAsIGZhbHNlKSkgewotICAgICAgICBUWVBFIGN1cjIgPSBUWVBFKDApOwotICAgICAgICBp ZiAoZXhwZWN0RVhUKG9mZi54ID4gMCwgdHJ1ZSkpIHsKLSAgICAgICAgICAgIGNvbnN0IGl2ZWMy IHlvZmZfYm9yZGVyMiA9IGV4cGVjdEVYVChvZmYueCA9PSAxLCBmYWxzZSkgPyBpdmVjMigtMSwg LTEpIDogaXZlYzIoLTIsIDApOwotICAgICAgICAgICAgY3VyMiA9IFRZUEUoaW1hZ2VMb2FkKHBy ZWQsIHNwICsgTEFERFIob2ZmICsgeW9mZl9ib3JkZXIyKSlbY29tcF0pOwotICAgICAgICB9Ci0g ICAgICAgIGJhc2UgKz0gcXVhbnRfdGFibGVbcXVhbnRfdGFibGVfaWR4XVszXVsoY3VyMiAtIGN1 cikgJiBNQVhfUVVBTlRfVEFCTEVfTUFTS107Ci0KLSAgICAgICAgLyogdG9wLTIgYmVjYW1lIGN1 cnJlbnQgdXBvbiBzd2FwICovCi0gICAgICAgIFRZUEUgdG9wMiA9IFRZUEUoaW1hZ2VMb2FkKHBy ZWQsIHNwICsgTEFERFIob2ZmKSlbY29tcF0pOwotICAgICAgICBiYXNlICs9IHF1YW50X3RhYmxl W3F1YW50X3RhYmxlX2lkeF1bNF1bKHRvcDIgLSB0b3BbMV0pICYgTUFYX1FVQU5UX1RBQkxFX01B U0tdOwotICAgIH0KLQotICAgIC8qIGNvbnRleHQsIHByZWRpY3Rpb24gKi8KLSAgICByZXR1cm4g aXZlYzIoYmFzZSwgcHJlZGljdChjdXIsIFZUWVBFMih0b3ApKSk7Ci19Ci0KLSNlbHNlIC8qIFJH QiAqLwotCi0jZGVmaW5lIExBRERSKHApIChwKQotCi1pdmVjMiBnZXRfcHJlZChyZWFkb25seSB1 aW1hZ2UyRCBwcmVkLCBpdmVjMiBzcCwgaXZlYzIgb2ZmLAotICAgICAgICAgICAgICAgaW50IGNv bXAsIGludCBzdywgdWludDhfdCBxdWFudF90YWJsZV9pZHgsIGJvb2wgZXh0ZW5kX2xvb2t1cCkK LXsKLSAgICBjb25zdCBpdmVjMiB5b2ZmX2JvcmRlcjEgPSBvZmYueCA9PSAwID8gaXZlYzIoMSwg LTEpIDogaXZlYzIoMCwgMCk7Ci0gICAgc3AgKz0gb2ZmOwotCi0gICAgVlRZUEUzIHRvcCAgPSBW VFlQRTMoVFlQRSgwKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBUWVBFKDApLAotICAgICAg ICAgICAgICAgICAgICAgICAgIFRZUEUoMCkpOwotICAgIGlmIChvZmYueSA+IDAgJiYgb2ZmICE9 IGl2ZWMyKDAsIDEpKQotICAgICAgICB0b3BbMF0gPSBUWVBFKGltYWdlTG9hZChwcmVkLCBzcCAr IGl2ZWMyKC0xLCAtMSkgKyB5b2ZmX2JvcmRlcjEpW2NvbXBdKTsKLSAgICBpZiAob2ZmLnkgPiAw KSB7Ci0gICAgICAgIHRvcFsxXSA9IFRZUEUoaW1hZ2VMb2FkKHByZWQsIHNwICsgaXZlYzIoMCwg LTEpKVtjb21wXSk7Ci0gICAgICAgIHRvcFsyXSA9IFRZUEUoaW1hZ2VMb2FkKHByZWQsIHNwICsg aXZlYzIobWluKDEsIHN3IC0gb2ZmLnggLSAxKSwgLTEpKVtjb21wXSk7Ci0gICAgfQotCi0gICAg VFlQRSBjdXIgPSBUWVBFKDApOwotICAgIGlmIChvZmYgIT0gaXZlYzIoMCwgMCkpCi0gICAgICAg IGN1ciA9IFRZUEUoaW1hZ2VMb2FkKHByZWQsIHNwICsgaXZlYzIoLTEsICAwKSArIHlvZmZfYm9y ZGVyMSlbY29tcF0pOwotCi0gICAgaW50IGJhc2UgPSBxdWFudF90YWJsZVtxdWFudF90YWJsZV9p ZHhdWzBdWyhjdXIgLSB0b3BbMF0pICYgTUFYX1FVQU5UX1RBQkxFX01BU0tdICsKLSAgICAgICAg ICAgICAgIHF1YW50X3RhYmxlW3F1YW50X3RhYmxlX2lkeF1bMV1bKHRvcFswXSAtIHRvcFsxXSkg JiBNQVhfUVVBTlRfVEFCTEVfTUFTS10gKwotICAgICAgICAgICAgICAgcXVhbnRfdGFibGVbcXVh bnRfdGFibGVfaWR4XVsyXVsodG9wWzFdIC0gdG9wWzJdKSAmIE1BWF9RVUFOVF9UQUJMRV9NQVNL XTsKLQotICAgIGlmIChleHBlY3RFWFQoZXh0ZW5kX2xvb2t1cCwgZmFsc2UpKSB7Ci0gICAgICAg IFRZUEUgY3VyMiA9IFRZUEUoMCk7Ci0gICAgICAgIGlmIChvZmYueCA+IDAgJiYgb2ZmICE9IGl2 ZWMyKDEsIDApKSB7Ci0gICAgICAgICAgICBjb25zdCBpdmVjMiB5b2ZmX2JvcmRlcjIgPSBvZmYu eCA9PSAxID8gaXZlYzIoMSwgLTEpIDogaXZlYzIoMCwgMCk7Ci0gICAgICAgICAgICBjdXIyID0g VFlQRShpbWFnZUxvYWQocHJlZCwgc3AgKyBpdmVjMigtMiwgIDApICsgeW9mZl9ib3JkZXIyKVtj b21wXSk7Ci0gICAgICAgIH0KLSAgICAgICAgYmFzZSArPSBxdWFudF90YWJsZVtxdWFudF90YWJs ZV9pZHhdWzNdWyhjdXIyIC0gY3VyKSAmIE1BWF9RVUFOVF9UQUJMRV9NQVNLXTsKLQotICAgICAg ICBUWVBFIHRvcDIgPSBUWVBFKDApOwotICAgICAgICBpZiAob2ZmLnkgPiAxKQotICAgICAgICAg ICAgdG9wMiA9IFRZUEUoaW1hZ2VMb2FkKHByZWQsIHNwICsgaXZlYzIoMCwgLTIpKVtjb21wXSk7 Ci0gICAgICAgIGJhc2UgKz0gcXVhbnRfdGFibGVbcXVhbnRfdGFibGVfaWR4XVs0XVsodG9wMiAt IHRvcFsxXSkgJiBNQVhfUVVBTlRfVEFCTEVfTUFTS107Ci0gICAgfQotCi0gICAgLyogY29udGV4 dCwgcHJlZGljdGlvbiAqLwotICAgIHJldHVybiBpdmVjMihiYXNlLCBwcmVkaWN0KGN1ciwgVlRZ UEUyKHRvcCkpKTsKLX0KLSNlbmRpZgotLSAKMi40OS4xCgoKRnJvbSA1NjhhN2RiOTZjOGFiODAz NWI2MDgyYTQ3OTE2MTFiNzlmOWY2NDQzIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBK YW1haWthMSA8bHVrYXN6Y3oxOEB3cC5wbD4KRGF0ZTogV2VkLCAzIFNlcCAyMDI1IDEzOjQ0OjUw ICswMDAwClN1YmplY3Q6IFtQQVRDSCAwOTcvMTE4XSBDaGFuZ2luZyB2dWxrYW4gZmlsZSBkaXJl Y3RvcnkKCi0tLQogbGliYXZjb2RlYy92dWxrYW4vZmZ2MV9kZWMuY29tcCB8IDMwMiAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDMwMiBkZWxldGlvbnMo LSkKIGRlbGV0ZSBtb2RlIDEwMDY0NCBsaWJhdmNvZGVjL3Z1bGthbi9mZnYxX2RlYy5jb21wCgpk aWZmIC0tZ2l0IGEvbGliYXZjb2RlYy92dWxrYW4vZmZ2MV9kZWMuY29tcCBiL2xpYmF2Y29kZWMv dnVsa2FuL2ZmdjFfZGVjLmNvbXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViNzk1 ZGNiYTQuLjAwMDAwMDAwMDAKLS0tIGEvbGliYXZjb2RlYy92dWxrYW4vZmZ2MV9kZWMuY29tcAor KysgL2Rldi9udWxsCkBAIC0xLDMwMiArMCwwIEBACi0vKgotICogRkZ2MSBjb2RlYwotICoKLSAq IENvcHlyaWdodCAoYykgMjAyNCBMeW5uZSA8ZGV2QGx5bm5lLmVlPgotICoKLSAqIFRoaXMgZmls ZSBpcyBwYXJ0IG9mIEZGbXBlZy4KLSAqCi0gKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91 IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hl ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMi4x IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgot ICoKLSAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg dXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt cGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl ZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxv bmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZv dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rvbiwg TUEgMDIxMTAtMTMwMSBVU0EKLSAqLwotCi0jaWZuZGVmIEdPTE9NQgotI2lmZGVmIENBQ0hFRF9T WU1CT0xfUkVBREVSCi1zaGFyZWQgdWludDhfdCBzdGF0ZVtDT05URVhUX1NJWkVdOwotI2RlZmlu ZSBSRUFEKGMsIG9mZikgZ2V0X3JhY19kaXJlY3QoYywgc3RhdGVbb2ZmXSkKLSNlbHNlCi0jZGVm aW5lIFJFQUQoYywgb2ZmKSBnZXRfcmFjKGMsIHVpbnQ2NF90KHNsaWNlX3N0YXRlKSArIChzdGF0 ZV9vZmYgKyBvZmYpKQotI2VuZGlmCi0KLWludCBnZXRfaXN5bWJvbChpbm91dCBSYW5nZUNvZGVy IGMsIHVpbnQgc3RhdGVfb2ZmKQotewotICAgIGlmIChSRUFEKGMsIDApKQotICAgICAgICByZXR1 cm4gMDsKLQotICAgIHVpbnQgZSA9IDE7Ci0gICAgZm9yICg7IGUgPCAzMzsgZSsrKQotICAgICAg ICBpZiAoIVJFQUQoYywgbWluKGUsIDEwKSkpCi0gICAgICAgICAgICBicmVhazsKLQotICAgIGlm IChleHBlY3RFWFQoZSA9PSAxLCBmYWxzZSkpIHsKLSAgICAgICAgcmV0dXJuIFJFQUQoYywgMTEp ID8gLTEgOiAxOwotICAgIH0gZWxzZSBpZiAoZXhwZWN0RVhUKGUgPT0gMzMsIGZhbHNlKSkgewot ICAgICAgICBjb3JydXB0ID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAg aW50IGEgPSAxOwotICAgIGZvciAodWludCBpID0gZSArIDIwOyBpID49IDIyOyBpLS0pIHsKLSAg ICAgICAgYSA8PD0gMTsKLSAgICAgICAgYSB8PSBpbnQoUkVBRChjLCBtaW4oaSwgMzEpKSk7Ci0g ICAgfQotCi0gICAgcmV0dXJuIFJFQUQoYywgbWluKGUgKyAxMCwgMjEpKSA/IC1hIDogYTsKLX0K LQotdm9pZCBkZWNvZGVfbGluZV9wY20oaW5vdXQgU2xpY2VDb250ZXh0IHNjLCBpdmVjMiBzcCwg aW50IHcsIGludCB5LCBpbnQgcCwgaW50IGJpdHMpCi17Ci0jaWZkZWYgQ0FDSEVEX1NZTUJPTF9S RUFERVIKLSAgICBpZiAoZ2xfTG9jYWxJbnZvY2F0aW9uSUQueCA+IDApCi0gICAgICAgIHJldHVy bjsKLSNlbmRpZgotCi0jaWZuZGVmIFJHQgotICAgIGlmIChwID4gMCAmJiBwIDwgMykgewotICAg ICAgICB3ID4+PSBjaHJvbWFfc2hpZnQueDsKLSAgICAgICAgc3AgPj49IGNocm9tYV9zaGlmdDsK LSAgICB9Ci0jZW5kaWYKLQotICAgIGZvciAoaW50IHggPSAwOyB4IDwgdzsgeCsrKSB7Ci0gICAg ICAgIHVpbnQgdiA9IDA7Ci0gICAgICAgIGZvciAoaW50IGkgPSAoYml0cyAtIDEpOyBpID49IDA7 IGktLSkKLSAgICAgICAgICAgIHYgfD0gdWludChnZXRfcmFjX2VxdWkoc2MuYykpIDw8IGk7Ci0K LSAgICAgICAgaW1hZ2VTdG9yZShkZWNbcF0sIHNwICsgTEFERFIoaXZlYzIoeCwgeSkpLCB1dmVj NCh2KSk7Ci0gICAgfQotfQotCi12b2lkIGRlY29kZV9saW5lKGlub3V0IFNsaWNlQ29udGV4dCBz YywgaXZlYzIgc3AsIGludCB3LAotICAgICAgICAgICAgICAgICBpbnQgeSwgaW50IHAsIGludCBi aXRzLCB1aW50IHN0YXRlX29mZiwKLSAgICAgICAgICAgICAgICAgdWludDhfdCBxdWFudF90YWJs ZV9pZHgsIGNvbnN0IGludCBydW5faW5kZXgpCi17Ci0jaWZuZGVmIFJHQgotICAgIGlmIChwID4g MCAmJiBwIDwgMykgewotICAgICAgICB3ID4+PSBjaHJvbWFfc2hpZnQueDsKLSAgICAgICAgc3Ag Pj49IGNocm9tYV9zaGlmdDsKLSAgICB9Ci0jZW5kaWYKLQotICAgIGZvciAoaW50IHggPSAwOyB4 IDwgdzsgeCsrKSB7Ci0gICAgICAgIGl2ZWMyIHByID0gZ2V0X3ByZWQoZGVjW3BdLCBzcCwgaXZl YzIoeCwgeSksIDAsIHcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVhbnRfdGFibGVf aWR4LCBleHRlbmRfbG9va3VwW3F1YW50X3RhYmxlX2lkeF0gPiAwKTsKLQotICAgICAgICB1aW50 IGNvbnRleHRfb2ZmID0gc3RhdGVfb2ZmICsgQ09OVEVYVF9TSVpFKmFicyhwclswXSk7Ci0jaWZk ZWYgQ0FDSEVEX1NZTUJPTF9SRUFERVIKLSAgICAgICAgdThidWYgc2IgPSB1OGJ1Zih1aW50NjRf dChzbGljZV9zdGF0ZSkgKyBjb250ZXh0X29mZiArIGdsX0xvY2FsSW52b2NhdGlvbklELngpOwot ICAgICAgICBzdGF0ZVtnbF9Mb2NhbEludm9jYXRpb25JRC54XSA9IHNiLnY7Ci0gICAgICAgIGJh cnJpZXIoKTsKLSAgICAgICAgaWYgKGdsX0xvY2FsSW52b2NhdGlvbklELnggPT0gMCkgewotCi0j ZW5kaWYKLQotICAgICAgICAgICAgaW50IGRpZmYgPSBnZXRfaXN5bWJvbChzYy5jLCBjb250ZXh0 X29mZik7Ci0gICAgICAgICAgICBpZiAocHJbMF0gPCAwKQotICAgICAgICAgICAgICAgIGRpZmYg PSAtZGlmZjsKLQotICAgICAgICAgICAgdWludCB2ID0gemVyb19leHRlbmQocHJbMV0gKyBkaWZm LCBiaXRzKTsKLSAgICAgICAgICAgIGltYWdlU3RvcmUoZGVjW3BdLCBzcCArIExBRERSKGl2ZWMy KHgsIHkpKSwgdXZlYzQodikpOwotCi0jaWZkZWYgQ0FDSEVEX1NZTUJPTF9SRUFERVIKLSAgICAg ICAgfQotCi0gICAgICAgIGJhcnJpZXIoKTsKLSAgICAgICAgc2IudiA9IHN0YXRlW2dsX0xvY2Fs SW52b2NhdGlvbklELnhdOwotI2VuZGlmCi0gICAgfQotfQotCi0jZWxzZSAvKiBHT0xPTUIgKi8K LQotdm9pZCBkZWNvZGVfbGluZShpbm91dCBTbGljZUNvbnRleHQgc2MsIGl2ZWMyIHNwLCBpbnQg dywKLSAgICAgICAgICAgICAgICAgaW50IHksIGludCBwLCBpbnQgYml0cywgdWludCBzdGF0ZV9v ZmYsCi0gICAgICAgICAgICAgICAgIHVpbnQ4X3QgcXVhbnRfdGFibGVfaWR4LCBpbm91dCBpbnQg cnVuX2luZGV4KQotewotI2lmbmRlZiBSR0IKLSAgICBpZiAocCA+IDAgJiYgcCA8IDMpIHsKLSAg ICAgICAgdyA+Pj0gY2hyb21hX3NoaWZ0Lng7Ci0gICAgICAgIHNwID4+PSBjaHJvbWFfc2hpZnQ7 Ci0gICAgfQotI2VuZGlmCi0KLSAgICBpbnQgcnVuX2NvdW50ID0gMDsKLSAgICBpbnQgcnVuX21v ZGUgID0gMDsKLQotICAgIGZvciAoaW50IHggPSAwOyB4IDwgdzsgeCsrKSB7Ci0gICAgICAgIGl2 ZWMyIHBvcyA9IHNwICsgaXZlYzIoeCwgeSk7Ci0gICAgICAgIGludCBkaWZmOwotICAgICAgICBp dmVjMiBwciA9IGdldF9wcmVkKGRlY1twXSwgc3AsIGl2ZWMyKHgsIHkpLCAwLCB3LAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHF1YW50X3RhYmxlX2lkeCwgZXh0ZW5kX2xvb2t1cFtxdWFu dF90YWJsZV9pZHhdID4gMCk7Ci0KLSAgICAgICAgdWludCBjb250ZXh0X29mZiA9IHN0YXRlX29m ZiArIFZMQ19TVEFURV9TSVpFKmFicyhwclswXSk7Ci0gICAgICAgIFZsY1N0YXRlIHNiID0gVmxj U3RhdGUodWludDY0X3Qoc2xpY2Vfc3RhdGUpICsgY29udGV4dF9vZmYpOwotCi0gICAgICAgIGlm IChwclswXSA9PSAwICYmIHJ1bl9tb2RlID09IDApCi0gICAgICAgICAgICBydW5fbW9kZSA9IDE7 Ci0KLSAgICAgICAgaWYgKHJ1bl9tb2RlICE9IDApIHsKLSAgICAgICAgICAgIGlmIChydW5fY291 bnQgPT0gMCAmJiBydW5fbW9kZSA9PSAxKSB7Ci0gICAgICAgICAgICAgICAgaW50IHRtcF9pZHgg PSBpbnQobG9nMl9ydW5bcnVuX2luZGV4XSk7Ci0gICAgICAgICAgICAgICAgaWYgKGdldF9iaXQo c2MuZ2IpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJ1bl9jb3VudCA9IDEgPDwgdG1wX2lkeDsK LSAgICAgICAgICAgICAgICAgICAgaWYgKHggKyBydW5fY291bnQgPD0gdykKLSAgICAgICAgICAg ICAgICAgICAgICAgIHJ1bl9pbmRleCsrOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg ICAgICAgICAgICAgICAgIGlmICh0bXBfaWR4ICE9IDApIHsKLSAgICAgICAgICAgICAgICAgICAg ICAgIHJ1bl9jb3VudCA9IGludChnZXRfYml0cyhzYy5nYiwgdG1wX2lkeCkpOwotICAgICAgICAg ICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHJ1bl9jb3VudCA9IDA7 Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHJ1bl9pbmRleCAhPSAwKQotICAgICAgICAgICAg ICAgICAgICAgICAgcnVuX2luZGV4LS07Ci0gICAgICAgICAgICAgICAgICAgIHJ1bl9tb2RlID0g MjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJ1bl9j b3VudC0tOwotICAgICAgICAgICAgaWYgKHJ1bl9jb3VudCA8IDApIHsKLSAgICAgICAgICAgICAg ICBydW5fbW9kZSAgPSAwOwotICAgICAgICAgICAgICAgIHJ1bl9jb3VudCA9IDA7Ci0gICAgICAg ICAgICAgICAgZGlmZiA9IHJlYWRfdmxjX3N5bWJvbChzYy5nYiwgc2IsIGJpdHMpOwotICAgICAg ICAgICAgICAgIGlmIChkaWZmID49IDApCi0gICAgICAgICAgICAgICAgICAgIGRpZmYrKzsKLSAg ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgZGlmZiA9IDA7Ci0gICAgICAgICAg ICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBkaWZmID0gcmVhZF92bGNfc3ltYm9s KHNjLmdiLCBzYiwgYml0cyk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAocHJbMF0gPCAwKQot ICAgICAgICAgICAgZGlmZiA9IC1kaWZmOwotCi0gICAgICAgIHVpbnQgdiA9IHplcm9fZXh0ZW5k KHByWzFdICsgZGlmZiwgYml0cyk7Ci0gICAgICAgIGltYWdlU3RvcmUoZGVjW3BdLCBzcCArIExB RERSKGl2ZWMyKHgsIHkpKSwgdXZlYzQodikpOwotICAgIH0KLX0KLSNlbmRpZgotCi0jaWZkZWYg UkdCCi1pdmVjNCB0cmFuc2Zvcm1fc2FtcGxlKGl2ZWM0IHBpeCwgaXZlYzIgcmN0X2NvZWYpCi17 Ci0gICAgcGl4LmIgLT0gcmN0X29mZnNldDsKLSAgICBwaXguciAtPSByY3Rfb2Zmc2V0OwotICAg IHBpeC5nIC09IChwaXguYipyY3RfY29lZi55ICsgcGl4LnIqcmN0X2NvZWYueCkgPj4gMjsKLSAg ICBwaXguYiArPSBwaXguZzsKLSAgICBwaXguciArPSBwaXguZzsKLSAgICByZXR1cm4gaXZlYzQo cGl4W2ZtdF9sdXRbMF1dLCBwaXhbZm10X2x1dFsxXV0sCi0gICAgICAgICAgICAgICAgIHBpeFtm bXRfbHV0WzJdXSwgcGl4W2ZtdF9sdXRbM11dKTsKLX0KLQotdm9pZCB3cml0ZW91dF9yZ2IoaW4g U2xpY2VDb250ZXh0IHNjLCBpdmVjMiBzcCwgaW50IHcsIGludCB5LCBib29sIGFwcGx5X3JjdCkK LXsKLSAgICBmb3IgKHVpbnQgeCA9IGdsX0xvY2FsSW52b2NhdGlvbklELng7IHggPCB3OyB4ICs9 IGdsX1dvcmtHcm91cFNpemUueCkgewotICAgICAgICBpdmVjMiBscG9zID0gc3AgKyBMQUREUihp dmVjMih4LCB5KSk7Ci0gICAgICAgIGl2ZWMyIHBvcyA9IHNjLnNsaWNlX3BvcyArIGl2ZWMyKHgs IHkpOwotCi0gICAgICAgIGl2ZWM0IHBpeDsKLSAgICAgICAgcGl4LnIgPSBpbnQoaW1hZ2VMb2Fk KGRlY1syXSwgbHBvcylbMF0pOwotICAgICAgICBwaXguZyA9IGludChpbWFnZUxvYWQoZGVjWzBd LCBscG9zKVswXSk7Ci0gICAgICAgIHBpeC5iID0gaW50KGltYWdlTG9hZChkZWNbMV0sIGxwb3Mp WzBdKTsKLSAgICAgICAgaWYgKHRyYW5zcGFyZW5jeSAhPSAwKQotICAgICAgICAgICAgcGl4LmEg PSBpbnQoaW1hZ2VMb2FkKGRlY1szXSwgbHBvcylbMF0pOwotCi0gICAgICAgIGlmIChleHBlY3RF WFQoYXBwbHlfcmN0LCB0cnVlKSkKLSAgICAgICAgICAgIHBpeCA9IHRyYW5zZm9ybV9zYW1wbGUo cGl4LCBzYy5zbGljZV9yY3RfY29lZik7Ci0KLSAgICAgICAgaW1hZ2VTdG9yZShkc3RbMF0sIHBv cywgcGl4KTsKLSAgICAgICAgaWYgKHBsYW5hcl9yZ2IgIT0gMCkgewotICAgICAgICAgICAgZm9y IChpbnQgaSA9IDE7IGkgPCBjb2xvcl9wbGFuZXM7IGkrKykKLSAgICAgICAgICAgICAgICBpbWFn ZVN0b3JlKGRzdFtpXSwgcG9zLCBpdmVjNChwaXhbaV0pKTsKLSAgICAgICAgfQotICAgIH0KLX0K LSNlbmRpZgotCi12b2lkIGRlY29kZV9zbGljZShpbm91dCBTbGljZUNvbnRleHQgc2MsIGNvbnN0 IHVpbnQgc2xpY2VfaWR4KQotewotICAgIGludCB3ID0gc2Muc2xpY2VfZGltLng7Ci0gICAgaXZl YzIgc3AgPSBzYy5zbGljZV9wb3M7Ci0KLSNpZm5kZWYgUkdCCi0gICAgaW50IGJpdHMgPSBiaXRz X3Blcl9yYXdfc2FtcGxlOwotI2Vsc2UKLSAgICBpbnQgYml0cyA9IDk7Ci0gICAgaWYgKGJpdHMg IT0gOCB8fCBzYy5zbGljZV9jb2RpbmdfbW9kZSAhPSAwKQotICAgICAgICBiaXRzID0gYml0c19w ZXJfcmF3X3NhbXBsZSArIGludChzYy5zbGljZV9jb2RpbmdfbW9kZSAhPSAxKTsKLQotICAgIHNw LnkgPSBpbnQoZ2xfV29ya0dyb3VwSUQueSkqUkdCX0xJTkVDQUNIRTsKLSNlbmRpZgotCi0gICAg LyogUENNIGNvZGluZyAqLwotI2lmbmRlZiBHT0xPTUIKLSAgICBpZiAoc2Muc2xpY2VfY29kaW5n X21vZGUgPT0gMSkgewotI2lmbmRlZiBSR0IKLSAgICAgICAgZm9yIChpbnQgcCA9IDA7IHAgPCBw bGFuZXM7IHArKykgewotICAgICAgICAgICAgaW50IGggPSBzYy5zbGljZV9kaW0ueTsKLSAgICAg ICAgICAgIGlmIChwID4gMCAmJiBwIDwgMykKLSAgICAgICAgICAgICAgICBoID4+PSBjaHJvbWFf c2hpZnQueTsKLQotICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoOyB5KyspCi0gICAg ICAgICAgICAgICAgZGVjb2RlX2xpbmVfcGNtKHNjLCBzcCwgdywgeSwgcCwgYml0cyk7Ci0gICAg ICAgIH0KLSNlbHNlCi0gICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgc2Muc2xpY2VfZGltLnk7 IHkrKykgewotICAgICAgICAgICAgZm9yIChpbnQgcCA9IDA7IHAgPCBjb2xvcl9wbGFuZXM7IHAr KykKLSAgICAgICAgICAgICAgICBkZWNvZGVfbGluZV9wY20oc2MsIHNwLCB3LCB5LCBwLCBiaXRz KTsKLQotICAgICAgICAgICAgd3JpdGVvdXRfcmdiKHNjLCBzcCwgdywgeSwgZmFsc2UpOwotICAg ICAgICB9Ci0jZW5kaWYKLSAgICB9IGVsc2UKLQotICAgIC8qIEFyaXRobWV0aWMgY29kaW5nICov Ci0jZW5kaWYKLSAgICB7Ci0gICAgICAgIHU4dmVjNCBxdWFudF90YWJsZV9pZHggPSBzYy5xdWFu dF90YWJsZV9pZHgueHl5ejsKLSAgICAgICAgdTMydmVjNCBzbGljZV9zdGF0ZV9vZmYgPSAoc2xp Y2VfaWR4KmNvZGVjX3BsYW5lcyArIHV2ZWM0KDAsIDEsIDEsIDIpKSpwbGFuZV9zdGF0ZV9zaXpl OwotCi0jaWZuZGVmIFJHQgotICAgICAgICBmb3IgKGludCBwID0gMDsgcCA8IHBsYW5lczsgcCsr KSB7Ci0gICAgICAgICAgICBpbnQgaCA9IHNjLnNsaWNlX2RpbS55OwotICAgICAgICAgICAgaWYg KHAgPiAwICYmIHAgPCAzKQotICAgICAgICAgICAgICAgIGggPj49IGNocm9tYV9zaGlmdC55Owot Ci0gICAgICAgICAgICBpbnQgcnVuX2luZGV4ID0gMDsKLSAgICAgICAgICAgIGZvciAoaW50IHkg PSAwOyB5IDwgaDsgeSsrKQotICAgICAgICAgICAgICAgIGRlY29kZV9saW5lKHNjLCBzcCwgdywg eSwgcCwgYml0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGljZV9zdGF0ZV9vZmZb cF0sIHF1YW50X3RhYmxlX2lkeFtwXSwgcnVuX2luZGV4KTsKLSAgICAgICAgfQotI2Vsc2UKLSAg ICAgICAgaW50IHJ1bl9pbmRleCA9IDA7Ci0gICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgc2Mu c2xpY2VfZGltLnk7IHkrKykgewotICAgICAgICAgICAgZm9yIChpbnQgcCA9IDA7IHAgPCBjb2xv cl9wbGFuZXM7IHArKykKLSAgICAgICAgICAgICAgICBkZWNvZGVfbGluZShzYywgc3AsIHcsIHks IHAsIGJpdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xpY2Vfc3RhdGVfb2ZmW3Bd LCBxdWFudF90YWJsZV9pZHhbcF0sIHJ1bl9pbmRleCk7Ci0KLSAgICAgICAgICAgIHdyaXRlb3V0 X3JnYihzYywgc3AsIHcsIHksIHRydWUpOwotICAgICAgICB9Ci0jZW5kaWYKLSAgICB9Ci19Ci0K LXZvaWQgbWFpbih2b2lkKQotewotICAgIGNvbnN0IHVpbnQgc2xpY2VfaWR4ID0gZ2xfV29ya0dy b3VwSUQueSpnbF9OdW1Xb3JrR3JvdXBzLnggKyBnbF9Xb3JrR3JvdXBJRC54OwotICAgIGRlY29k ZV9zbGljZShzbGljZV9jdHhbc2xpY2VfaWR4XSwgc2xpY2VfaWR4KTsKLQotICAgIHVpbnQzMl90 IHN0YXR1cyA9IGNvcnJ1cHQgPyB1aW50MzJfdChjb3JydXB0KSA6IG92ZXJyZWFkOwotICAgIGlm IChzdGF0dXMgIT0gMCkKLSAgICAgICAgc2xpY2Vfc3RhdHVzWzIqc2xpY2VfaWR4ICsgMV0gPSBz dGF0dXM7Ci19Ci0tIAoyLjQ5LjEKCgpGcm9tIDlmYTQyYmMyYWEzOTgwNjA4NWNmNjA5M2EyODBm NGU4YjAzOGUwYWIgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCkZyb206IEphbWFpa2ExIDxsdWth c3pjejE4QHdwLnBsPgpEYXRlOiBXZWQsIDMgU2VwIDIwMjUgMTM6NDU6MDAgKzAwMDAKU3ViamVj dDogW1BBVENIIDA5OC8xMThdIENoYW5naW5nIHZ1bGthbiBmaWxlIGRpcmVjdG9yeQoKLS0tCiBs aWJhdmNvZGVjL3Z1bGthbi9mZnYxX2RlY19zZXR1cC5jb21wIHwgMTQwIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgMTQwIGRlbGV0aW9ucygtKQogZGVsZXRlIG1v ZGUgMTAwNjQ0IGxpYmF2Y29kZWMvdnVsa2FuL2ZmdjFfZGVjX3NldHVwLmNvbXAKCmRpZmYgLS1n aXQgYS9saWJhdmNvZGVjL3Z1bGthbi9mZnYxX2RlY19zZXR1cC5jb21wIGIvbGliYXZjb2RlYy92 dWxrYW4vZmZ2MV9kZWNfc2V0dXAuY29tcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg NWRhMDlkZjIxYy4uMDAwMDAwMDAwMAotLS0gYS9saWJhdmNvZGVjL3Z1bGthbi9mZnYxX2RlY19z ZXR1cC5jb21wCisrKyAvZGV2L251bGwKQEAgLTEsMTQwICswLDAgQEAKLS8qCi0gKiBGRnYxIGNv ZGVjCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDI0IEx5bm5lIDxkZXZAbHlubmUuZWU+Ci0gKgot ICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgotICoKLSAqIEZGbXBlZyBpcyBmcmVlIHNv ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRl ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2Ug YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICog dmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy IHZlcnNpb24uCi0gKgotICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg aXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBo YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICog TGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0 d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v ciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQotICovCi0KLXVpbnQ4X3Qgc2V0dXBfc3RhdGVb Q09OVEVYVF9TSVpFXTsKLQotdWludCBnZXRfdXN5bWJvbChpbm91dCBSYW5nZUNvZGVyIGMpCi17 Ci0gICAgaWYgKGdldF9yYWNfZGlyZWN0KGMsIHNldHVwX3N0YXRlWzBdKSkKLSAgICAgICAgcmV0 dXJuIDA7Ci0KLSAgICBpbnQgZSA9IDA7Ci0gICAgd2hpbGUgKGdldF9yYWNfZGlyZWN0KGMsIHNl dHVwX3N0YXRlWzEgKyBtaW4oZSwgOSldKSkgeyAvLyAxLi4xMAotICAgICAgICBlKys7Ci0gICAg ICAgIGlmIChlID4gMzEpIHsKLSAgICAgICAgICAgIGNvcnJ1cHQgPSB0cnVlOwotICAgICAgICAg ICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB1aW50IGEgPSAxOwotICAgIGZv ciAoaW50IGkgPSBlIC0gMTsgaSA+PSAwOyBpLS0pIHsKLSAgICAgICAgYSA8PD0gMTsKLSAgICAg ICAgYSB8PSB1aW50KGdldF9yYWNfZGlyZWN0KGMsIHNldHVwX3N0YXRlWzIyICsgbWluKGksIDkp XSkpOyAgLy8gMjIuLjMxCi0gICAgfQotCi0gICAgcmV0dXJuIGE7Ci19Ci0KLWJvb2wgZGVjb2Rl X3NsaWNlX2hlYWRlcihpbm91dCBTbGljZUNvbnRleHQgc2MpCi17Ci0gICAgW1t1bnJvbGxdXQot ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgQ09OVEVYVF9TSVpFOyBpKyspCi0gICAgICAgIHNldHVw X3N0YXRlW2ldID0gdWludDhfdCgxMjgpOwotCi0gICAgdWludCBzeCA9IGdldF91c3ltYm9sKHNj LmMpOwotICAgIHVpbnQgc3kgPSBnZXRfdXN5bWJvbChzYy5jKTsKLSAgICB1aW50IHN3ID0gZ2V0 X3VzeW1ib2woc2MuYykgKyAxOwotICAgIHVpbnQgc2ggPSBnZXRfdXN5bWJvbChzYy5jKSArIDE7 Ci0KLSAgICBpZiAoc3ggPCAwIHx8IHN5IDwgMCB8fCBzdyA8PSAwIHx8IHNoIDw9IDAgfHwKLSAg ICAgICAgc3ggPiAoZ2xfTnVtV29ya0dyb3Vwcy54IC0gc3cpIHx8IHN5ID4gKGdsX051bVdvcmtH cm91cHMueSAtIHNoKSB8fAotICAgICAgICBjb3JydXB0KSB7Ci0gICAgICAgIHJldHVybiB0cnVl OwotICAgIH0KLQotICAgIC8qIFNldCBjb29yZGluYXRlcyAqLwotICAgIHVpbnQgc3hzID0gc2xp Y2VfY29vcmQoaW1nX3NpemUueCwgc3ggICAgICwgZ2xfTnVtV29ya0dyb3Vwcy54LCBjaHJvbWFf c2hpZnQueCk7Ci0gICAgdWludCBzeGUgPSBzbGljZV9jb29yZChpbWdfc2l6ZS54LCBzeCArIHN3 LCBnbF9OdW1Xb3JrR3JvdXBzLngsIGNocm9tYV9zaGlmdC54KTsKLSAgICB1aW50IHN5cyA9IHNs aWNlX2Nvb3JkKGltZ19zaXplLnksIHN5ICAgICAsIGdsX051bVdvcmtHcm91cHMueSwgY2hyb21h X3NoaWZ0LnkpOwotICAgIHVpbnQgc3llID0gc2xpY2VfY29vcmQoaW1nX3NpemUueSwgc3kgKyBz aCwgZ2xfTnVtV29ya0dyb3Vwcy55LCBjaHJvbWFfc2hpZnQueSk7Ci0KLSAgICBzYy5zbGljZV9w b3MgPSBpdmVjMihzeHMsIHN5cyk7Ci0gICAgc2Muc2xpY2VfZGltID0gaXZlYzIoc3hlIC0gc3hz LCBzeWUgLSBzeXMpOwotICAgIHNjLnNsaWNlX3JjdF9jb2VmID0gaXZlYzIoMSwgMSk7Ci0gICAg c2Muc2xpY2VfY29kaW5nX21vZGUgPSBpbnQoMCk7Ci0KLSAgICBmb3IgKHVpbnQgaSA9IDA7IGkg PCBjb2RlY19wbGFuZXM7IGkrKykgewotICAgICAgICB1aW50IGlkeCA9IGdldF91c3ltYm9sKHNj LmMpOwotICAgICAgICBpZiAoaWR4ID49IHF1YW50X3RhYmxlX2NvdW50KQotICAgICAgICAgICAg cmV0dXJuIHRydWU7Ci0gICAgICAgIHNjLnF1YW50X3RhYmxlX2lkeFtpXSA9IHVpbnQ4X3QoaWR4 KTsKLSAgICB9Ci0KLSAgICBnZXRfdXN5bWJvbChzYy5jKTsKLSAgICBnZXRfdXN5bWJvbChzYy5j KTsKLSAgICBnZXRfdXN5bWJvbChzYy5jKTsKLQotICAgIGlmICh2ZXJzaW9uID49IDQpIHsKLSAg ICAgICAgc2Muc2xpY2VfcmVzZXRfY29udGV4dHMgPSBnZXRfcmFjX2RpcmVjdChzYy5jLCBzZXR1 cF9zdGF0ZVswXSk7Ci0gICAgICAgIHNjLnNsaWNlX2NvZGluZ19tb2RlID0gZ2V0X3VzeW1ib2wo c2MuYyk7Ci0gICAgICAgIGlmIChzYy5zbGljZV9jb2RpbmdfbW9kZSAhPSAxICYmIGNvbG9yc3Bh Y2UgPT0gMSkgewotICAgICAgICAgICAgc2Muc2xpY2VfcmN0X2NvZWYueCA9IGludChnZXRfdXN5 bWJvbChzYy5jKSk7Ci0gICAgICAgICAgICBzYy5zbGljZV9yY3RfY29lZi55ID0gaW50KGdldF91 c3ltYm9sKHNjLmMpKTsKLSAgICAgICAgICAgIGlmIChzYy5zbGljZV9yY3RfY29lZi54ICsgc2Mu c2xpY2VfcmN0X2NvZWYueSA+IDQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg ICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgZ29sb21iX2luaXQo aW5vdXQgU2xpY2VDb250ZXh0IHNjKQotewotICAgIGlmICh2ZXJzaW9uID09IDMgJiYgbWljcm9f dmVyc2lvbiA+IDEgfHwgdmVyc2lvbiA+IDMpIHsKLSAgICAgICAgc2V0dXBfc3RhdGVbMF0gPSB1 aW50OF90KDEyOSk7Ci0gICAgICAgIGdldF9yYWNfZGlyZWN0KHNjLmMsIHNldHVwX3N0YXRlWzBd KTsKLSAgICB9Ci0KLSAgICB1aW50NjRfdCBhY19ieXRlX2NvdW50ID0gc2MuYy5ieXRlc3RyZWFt IC0gc2MuYy5ieXRlc3RyZWFtX3N0YXJ0IC0gMTsKLSAgICBpbml0X2dldF9iaXRzKHNjLmdiLCB1 OGJ1ZihzYy5jLmJ5dGVzdHJlYW1fc3RhcnQgKyBhY19ieXRlX2NvdW50KSwKLSAgICAgICAgICAg ICAgICAgIGludChzYy5jLmJ5dGVzdHJlYW1fZW5kIC0gc2MuYy5ieXRlc3RyZWFtX3N0YXJ0IC0g YWNfYnl0ZV9jb3VudCkpOwotfQotCi12b2lkIG1haW4odm9pZCkKLXsKLSAgICBjb25zdCB1aW50 IHNsaWNlX2lkeCA9IGdsX1dvcmtHcm91cElELnkqZ2xfTnVtV29ya0dyb3Vwcy54ICsgZ2xfV29y a0dyb3VwSUQueDsKLQotICAgIHU4YnVmIGJzID0gdThidWYoc2xpY2VfZGF0YSArIHNsaWNlX29m ZnNldHNbMipzbGljZV9pZHggKyAwXSk7Ci0gICAgdWludDMyX3Qgc2xpY2Vfc2l6ZSA9IHNsaWNl X29mZnNldHNbMipzbGljZV9pZHggKyAxXTsKLQotICAgIHJhY19pbml0X2RlYyhzbGljZV9jdHhb c2xpY2VfaWR4XS5jLAotICAgICAgICAgICAgICAgICBicywgc2xpY2Vfc2l6ZSk7Ci0KLSAgICBp ZiAoc2xpY2VfaWR4ID09IChnbF9OdW1Xb3JrR3JvdXBzLngqZ2xfTnVtV29ya0dyb3Vwcy55IC0g MSkpCi0gICAgICAgIGdldF9yYWNfZXF1aShzbGljZV9jdHhbc2xpY2VfaWR4XS5jKTsKLQotICAg IGRlY29kZV9zbGljZV9oZWFkZXIoc2xpY2VfY3R4W3NsaWNlX2lkeF0pOwotCi0gICAgaWYgKGdv bG9tYiA9PSAxKQotICAgICAgICBnb2xvbWJfaW5pdChzbGljZV9jdHhbc2xpY2VfaWR4XSk7Ci0K LSAgICBpZiAoZWMgIT0gMCAmJiBjaGVja19jcmMgIT0gMCkgewotICAgICAgICB1aW50MzJfdCBj cmMgPSBjcmNyZWY7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2xpY2Vfc2l6ZTsgaSsr KQotICAgICAgICAgICAgY3JjID0gY3JjX2llZWVbKGNyYyAmIDB4RkYpIF4gdWludDMyX3QoYnNb aV0udildIF4gKGNyYyA+PiA4KTsKLQotICAgICAgICBzbGljZV9zdGF0dXNbMipzbGljZV9pZHgg KyAwXSA9IGNyYzsKLSAgICB9Ci0KLSAgICBzbGljZV9zdGF0dXNbMipzbGljZV9pZHggKyAxXSA9 IGNvcnJ1cHQgPyB1aW50MzJfdChjb3JydXB0KSA6IG92ZXJyZWFkOwotfQotLSAKMi40OS4xCgoK RnJvbSBlMDUzNDMzOTU3OTBhZDY5OGVhOGJjYWUwZmY5NWJlMWExMTk5NTY4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKYW1haWthMSA8bHVrYXN6Y3oxOEB3cC5wbD4KRGF0ZTogV2Vk LCAzIFNlcCAyMDI1IDEzOjQ1OjA5ICswMDAwClN1YmplY3Q6IFtQQVRDSCAwOTkvMTE4XSBDaGFu Z2luZyB2dWxrYW4gZmlsZSBkaXJlY3RvcnkKCi0tLQogbGliYXZjb2RlYy92dWxrYW4vZmZ2MV9l bmMuY29tcCB8IDM1OCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogMSBmaWxlIGNo YW5nZWQsIDM1OCBkZWxldGlvbnMoLSkKIGRlbGV0ZSBtb2RlIDEwMDY0NCBsaWJhdmNvZGVjL3Z1 bGthbi9mZnYxX2VuYy5jb21wCgpkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy92dWxrYW4vZmZ2MV9l bmMuY29tcCBiL2xpYmF2Y29kZWMvdnVsa2FuL2ZmdjFfZW5jLmNvbXAKZGVsZXRlZCBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDc4MzcyZjViM2EuLjAwMDAwMDAwMDAKLS0tIGEvbGliYXZjb2RlYy92 dWxrYW4vZmZ2MV9lbmMuY29tcAorKysgL2Rldi9udWxsCkBAIC0xLDM1OCArMCwwIEBACi0vKgot ICogRkZ2MSBjb2RlYwotICoKLSAqIENvcHlyaWdodCAoYykgMjAyNCBMeW5uZSA8ZGV2QGx5bm5l LmVlPgotICoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KLSAqCi0gKiBGRm1wZWcg aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2Rp ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0g KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl aXRoZXIKLSAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p IGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUg aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElU WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBM ZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlv dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ dWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhl IEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg RmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKLSAqLwotCi0jaWZuZGVmIEdP TE9NQgotI2lmZGVmIENBQ0hFRF9TWU1CT0xfUkVBREVSCi1zaGFyZWQgdWludDhfdCBzdGF0ZVtD T05URVhUX1NJWkVdOwotI2RlZmluZSBXUklURShjLCBvZmYsIHZhbCkgcHV0X3JhY19kaXJlY3Qo Yywgc3RhdGVbb2ZmXSwgdmFsKQotI2Vsc2UKLSNkZWZpbmUgV1JJVEUoYywgb2ZmLCB2YWwpIHB1 dF9yYWMoYywgdWludDY0X3Qoc2xpY2Vfc3RhdGUpICsgKHN0YXRlX29mZiArIG9mZiksIHZhbCkK LSNlbmRpZgotCi0vKiBOb3RlIC0gb25seSBoYW5kbGVzIHNpZ25lZCB2YWx1ZXMgKi8KLXZvaWQg cHV0X3N5bWJvbChpbm91dCBSYW5nZUNvZGVyIGMsIHVpbnQgc3RhdGVfb2ZmLCBpbnQgdikKLXsK LSAgICBib29sIGlzX25pbCA9ICh2ID09IDApOwotICAgIFdSSVRFKGMsIDAsIGlzX25pbCk7Ci0g ICAgaWYgKGlzX25pbCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY29uc3QgaW50IGEgPSBhYnMo dik7Ci0gICAgY29uc3QgaW50IGUgPSBmaW5kTVNCKGEpOwotCi0gICAgZm9yIChpbnQgaSA9IDA7 IGkgPCBlOyBpKyspCi0gICAgICAgIFdSSVRFKGMsIDEgKyBtaW4oaSwgOSksIHRydWUpOwotICAg IFdSSVRFKGMsIDEgKyBtaW4oZSwgOSksIGZhbHNlKTsKLQotICAgIGZvciAoaW50IGkgPSBlIC0g MTsgaSA+PSAwOyBpLS0pCi0gICAgICAgIFdSSVRFKGMsIDIyICsgbWluKGksIDkpLCBib29sKGJp dGZpZWxkRXh0cmFjdChhLCBpLCAxKSkpOwotCi0gICAgV1JJVEUoYywgMjIgLSAxMSArIG1pbihl LCAxMCksIHYgPCAwKTsKLX0KLQotdm9pZCBlbmNvZGVfbGluZV9wY20oaW5vdXQgU2xpY2VDb250 ZXh0IHNjLCByZWFkb25seSB1aW1hZ2UyRCBpbWcsCi0gICAgICAgICAgICAgICAgICAgICBpdmVj MiBzcCwgaW50IHksIGludCBwLCBpbnQgY29tcCwgaW50IGJpdHMpCi17Ci0gICAgaW50IHcgPSBz Yy5zbGljZV9kaW0ueDsKLQotI2lmZGVmIENBQ0hFRF9TWU1CT0xfUkVBREVSCi0gICAgaWYgKGds X0xvY2FsSW52b2NhdGlvbklELnggPiAwKQotICAgICAgICByZXR1cm47Ci0jZW5kaWYKLQotI2lm bmRlZiBSR0IKLSAgICBpZiAocCA+IDAgJiYgcCA8IDMpIHsKLSAgICAgICAgdyA+Pj0gY2hyb21h X3NoaWZ0Lng7Ci0gICAgICAgIHNwID4+PSBjaHJvbWFfc2hpZnQ7Ci0gICAgfQotI2VuZGlmCi0K LSAgICBmb3IgKGludCB4ID0gMDsgeCA8IHc7IHgrKykgewotICAgICAgICB1aW50IHYgPSBpbWFn ZUxvYWQoaW1nLCBzcCArIExBRERSKGl2ZWMyKHgsIHkpKSlbY29tcF07Ci0gICAgICAgIGZvciAo aW50IGkgPSAoYml0cyAtIDEpOyBpID49IDA7IGktLSkKLSAgICAgICAgICAgIHB1dF9yYWNfZXF1 aShzYy5jLCBib29sKGJpdGZpZWxkRXh0cmFjdCh2LCBpLCAxKSkpOwotICAgIH0KLX0KLQotdm9p ZCBlbmNvZGVfbGluZShpbm91dCBTbGljZUNvbnRleHQgc2MsIHJlYWRvbmx5IHVpbWFnZTJEIGlt ZywgdWludCBzdGF0ZV9vZmYsCi0gICAgICAgICAgICAgICAgIGl2ZWMyIHNwLCBpbnQgeSwgaW50 IHAsIGludCBjb21wLCBpbnQgYml0cywKLSAgICAgICAgICAgICAgICAgdWludDhfdCBxdWFudF90 YWJsZV9pZHgsIGNvbnN0IGludCBydW5faW5kZXgpCi17Ci0gICAgaW50IHcgPSBzYy5zbGljZV9k aW0ueDsKLQotI2lmbmRlZiBSR0IKLSAgICBpZiAocCA+IDAgJiYgcCA8IDMpIHsKLSAgICAgICAg dyA+Pj0gY2hyb21hX3NoaWZ0Lng7Ci0gICAgICAgIHNwID4+PSBjaHJvbWFfc2hpZnQ7Ci0gICAg fQotI2VuZGlmCi0KLSAgICBmb3IgKGludCB4ID0gMDsgeCA8IHc7IHgrKykgewotICAgICAgICBp dmVjMiBkID0gZ2V0X3ByZWQoaW1nLCBzcCwgaXZlYzIoeCwgeSksIGNvbXAsIHcsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICBxdWFudF90YWJsZV9pZHgsIGV4dGVuZF9sb29rdXBbcXVhbnRf dGFibGVfaWR4XSA+IDApOwotICAgICAgICBkWzFdID0gaW50KGltYWdlTG9hZChpbWcsIHNwICsg TEFERFIoaXZlYzIoeCwgeSkpKVtjb21wXSkgLSBkWzFdOwotCi0gICAgICAgIGlmIChkWzBdIDwg MCkKLSAgICAgICAgICAgIGQgPSAtZDsKLQotICAgICAgICBkWzFdID0gZm9sZChkWzFdLCBiaXRz KTsKLQotICAgICAgICB1aW50IGNvbnRleHRfb2ZmID0gc3RhdGVfb2ZmICsgQ09OVEVYVF9TSVpF KmRbMF07Ci0jaWZkZWYgQ0FDSEVEX1NZTUJPTF9SRUFERVIKLSAgICAgICAgdThidWYgc2IgPSB1 OGJ1Zih1aW50NjRfdChzbGljZV9zdGF0ZSkgKyBjb250ZXh0X29mZiArIGdsX0xvY2FsSW52b2Nh dGlvbklELngpOwotICAgICAgICBzdGF0ZVtnbF9Mb2NhbEludm9jYXRpb25JRC54XSA9IHNiLnY7 Ci0gICAgICAgIGJhcnJpZXIoKTsKLSAgICAgICAgaWYgKGdsX0xvY2FsSW52b2NhdGlvbklELngg PT0gMCkKLSNlbmRpZgotCi0gICAgICAgICAgICBwdXRfc3ltYm9sKHNjLmMsIGNvbnRleHRfb2Zm LCBkWzFdKTsKLQotI2lmZGVmIENBQ0hFRF9TWU1CT0xfUkVBREVSCi0gICAgICAgIGJhcnJpZXIo KTsKLSAgICAgICAgc2IudiA9IHN0YXRlW2dsX0xvY2FsSW52b2NhdGlvbklELnhdOwotI2VuZGlm Ci0gICAgfQotfQotCi0jZWxzZSAvKiBHT0xPTUIgKi8KLQotdm9pZCBlbmNvZGVfbGluZShpbm91 dCBTbGljZUNvbnRleHQgc2MsIHJlYWRvbmx5IHVpbWFnZTJEIGltZywgdWludCBzdGF0ZV9vZmYs Ci0gICAgICAgICAgICAgICAgIGl2ZWMyIHNwLCBpbnQgeSwgaW50IHAsIGludCBjb21wLCBpbnQg Yml0cywKLSAgICAgICAgICAgICAgICAgdWludDhfdCBxdWFudF90YWJsZV9pZHgsIGlub3V0IGlu dCBydW5faW5kZXgpCi17Ci0gICAgaW50IHcgPSBzYy5zbGljZV9kaW0ueDsKLQotI2lmbmRlZiBS R0IKLSAgICBpZiAocCA+IDAgJiYgcCA8IDMpIHsKLSAgICAgICAgdyA+Pj0gY2hyb21hX3NoaWZ0 Lng7Ci0gICAgICAgIHNwID4+PSBjaHJvbWFfc2hpZnQ7Ci0gICAgfQotI2VuZGlmCi0KLSAgICBp bnQgcnVuX2NvdW50ID0gMDsKLSAgICBib29sIHJ1bl9tb2RlID0gZmFsc2U7Ci0KLSAgICBmb3Ig KGludCB4ID0gMDsgeCA8IHc7IHgrKykgewotICAgICAgICBpdmVjMiBkID0gZ2V0X3ByZWQoaW1n LCBzcCwgaXZlYzIoeCwgeSksIGNvbXAsIHcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBx dWFudF90YWJsZV9pZHgsIGV4dGVuZF9sb29rdXBbcXVhbnRfdGFibGVfaWR4XSA+IDApOwotICAg ICAgICBkWzFdID0gaW50KGltYWdlTG9hZChpbWcsIHNwICsgTEFERFIoaXZlYzIoeCwgeSkpKVtj b21wXSkgLSBkWzFdOwotCi0gICAgICAgIGlmIChkWzBdIDwgMCkKLSAgICAgICAgICAgIGQgPSAt ZDsKLQotICAgICAgICBkWzFdID0gZm9sZChkWzFdLCBiaXRzKTsKLQotICAgICAgICBpZiAoZFsw XSA9PSAwKQotICAgICAgICAgICAgcnVuX21vZGUgPSB0cnVlOwotCi0gICAgICAgIGlmIChydW5f bW9kZSkgewotICAgICAgICAgICAgaWYgKGRbMV0gIT0gMCkgewotICAgICAgICAgICAgICAgIC8q IEEgdmVyeSB1bmxpa2VseSBsb29wICovCi0gICAgICAgICAgICAgICAgd2hpbGUgKHJ1bl9jb3Vu dCA+PSAxIDw8IGxvZzJfcnVuW3J1bl9pbmRleF0pIHsKLSAgICAgICAgICAgICAgICAgICAgcnVu X2NvdW50IC09IDEgPDwgbG9nMl9ydW5bcnVuX2luZGV4XTsKLSAgICAgICAgICAgICAgICAgICAg cnVuX2luZGV4Kys7Ci0gICAgICAgICAgICAgICAgICAgIHB1dF9iaXRzKHNjLnBiLCAxLCAxKTsK LSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBwdXRfYml0cyhzYy5wYiwgMSAr IGxvZzJfcnVuW3J1bl9pbmRleF0sIHJ1bl9jb3VudCk7Ci0gICAgICAgICAgICAgICAgaWYgKHJ1 bl9pbmRleCAhPSAwKQotICAgICAgICAgICAgICAgICAgICBydW5faW5kZXgtLTsKLSAgICAgICAg ICAgICAgICBydW5fY291bnQgPSAwOwotICAgICAgICAgICAgICAgIHJ1bl9tb2RlICA9IGZhbHNl OwotICAgICAgICAgICAgICAgIGlmIChkWzFdID4gMCkKLSAgICAgICAgICAgICAgICAgICAgZFsx XS0tOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBydW5fY291bnQrKzsK LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmICghcnVuX21vZGUpIHsKLSAg ICAgICAgICAgIFZsY1N0YXRlIHNiID0gVmxjU3RhdGUodWludDY0X3Qoc2xpY2Vfc3RhdGUpICsg c3RhdGVfb2ZmICsgVkxDX1NUQVRFX1NJWkUqZFswXSk7Ci0gICAgICAgICAgICBTeW1ib2wgc3lt ID0gZ2V0X3ZsY19zeW1ib2woc2IsIGRbMV0sIGJpdHMpOwotICAgICAgICAgICAgcHV0X2JpdHMo c2MucGIsIHN5bS5iaXRzLCBzeW0udmFsKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChy dW5fbW9kZSkgewotICAgICAgICB3aGlsZSAocnVuX2NvdW50ID49ICgxIDw8IGxvZzJfcnVuW3J1 bl9pbmRleF0pKSB7Ci0gICAgICAgICAgICBydW5fY291bnQgLT0gMSA8PCBsb2cyX3J1bltydW5f aW5kZXhdOwotICAgICAgICAgICAgcnVuX2luZGV4Kys7Ci0gICAgICAgICAgICBwdXRfYml0cyhz Yy5wYiwgMSwgMSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAocnVuX2NvdW50ID4gMCkKLSAg ICAgICAgICAgIHB1dF9iaXRzKHNjLnBiLCAxLCAxKTsKLSAgICB9Ci19Ci0jZW5kaWYKLQotI2lm ZGVmIFJHQgotaXZlYzQgbG9hZF9jb21wb25lbnRzKGl2ZWMyIHBvcykKLXsKLSAgICBpdmVjNCBw aXggPSBpdmVjNChpbWFnZUxvYWQoc3JjWzBdLCBwb3MpKTsKLSAgICBpZiAocGxhbmFyX3JnYiAh PSAwKSB7Ci0gICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgKDMgKyB0cmFuc3BhcmVuY3kpOyBp KyspCi0gICAgICAgICAgICBwaXhbaV0gPSBpbnQoaW1hZ2VMb2FkKHNyY1tpXSwgcG9zKVswXSk7 Ci0gICAgfQotCi0gICAgcmV0dXJuIGl2ZWM0KHBpeFtmbXRfbHV0WzBdXSwgcGl4W2ZtdF9sdXRb MV1dLAotICAgICAgICAgICAgICAgICBwaXhbZm10X2x1dFsyXV0sIHBpeFtmbXRfbHV0WzNdXSk7 Ci19Ci0KLXZvaWQgdHJhbnNmb3JtX3NhbXBsZShpbm91dCBpdmVjNCBwaXgsIGl2ZWMyIHJjdF9j b2VmKQotewotICAgIHBpeC5iIC09IHBpeC5nOwotICAgIHBpeC5yIC09IHBpeC5nOwotICAgIHBp eC5nICs9IChwaXgucipyY3RfY29lZi54ICsgcGl4LmIqcmN0X2NvZWYueSkgPj4gMjsKLSAgICBw aXguYiArPSByY3Rfb2Zmc2V0OwotICAgIHBpeC5yICs9IHJjdF9vZmZzZXQ7Ci19Ci0KLXZvaWQg cHJlbG9hZF9yZ2IoaW4gU2xpY2VDb250ZXh0IHNjLCBpdmVjMiBzcCwgaW50IHcsIGludCB5LCBi b29sIGFwcGx5X3JjdCkKLXsKLSAgICBmb3IgKHVpbnQgeCA9IGdsX0xvY2FsSW52b2NhdGlvbklE Lng7IHggPCB3OyB4ICs9IGdsX1dvcmtHcm91cFNpemUueCkgewotICAgICAgICBpdmVjMiBscG9z ID0gc3AgKyBMQUREUihpdmVjMih4LCB5KSk7Ci0gICAgICAgIGl2ZWMyIHBvcyA9IHNjLnNsaWNl X3BvcyArIGl2ZWMyKHgsIHkpOwotCi0gICAgICAgIGl2ZWM0IHBpeCA9IGxvYWRfY29tcG9uZW50 cyhwb3MpOwotCi0gICAgICAgIGlmIChleHBlY3RFWFQoYXBwbHlfcmN0LCB0cnVlKSkKLSAgICAg ICAgICAgIHRyYW5zZm9ybV9zYW1wbGUocGl4LCBzYy5zbGljZV9yY3RfY29lZik7Ci0KLSAgICAg ICAgaW1hZ2VTdG9yZSh0bXAsIGxwb3MsIHBpeCk7Ci0gICAgfQotfQotI2VuZGlmCi0KLXZvaWQg ZW5jb2RlX3NsaWNlKGlub3V0IFNsaWNlQ29udGV4dCBzYywgY29uc3QgdWludCBzbGljZV9pZHgp Ci17Ci0gICAgaXZlYzIgc3AgPSBzYy5zbGljZV9wb3M7Ci0KLSNpZm5kZWYgUkdCCi0gICAgaW50 IGJpdHMgPSBiaXRzX3Blcl9yYXdfc2FtcGxlOwotI2Vsc2UKLSAgICBpbnQgYml0cyA9IDk7Ci0g ICAgaWYgKGJpdHMgIT0gOCB8fCBzYy5zbGljZV9jb2RpbmdfbW9kZSAhPSAwKQotICAgICAgICBi aXRzID0gYml0c19wZXJfcmF3X3NhbXBsZSArIGludChzYy5zbGljZV9jb2RpbmdfbW9kZSAhPSAx KTsKLQotICAgIHNwLnkgPSBpbnQoZ2xfV29ya0dyb3VwSUQueSkqUkdCX0xJTkVDQUNIRTsKLSNl bmRpZgotCi0jaWZuZGVmIEdPTE9NQgotICAgIGlmIChzYy5zbGljZV9jb2RpbmdfbW9kZSA9PSAx KSB7Ci0jaWZuZGVmIFJHQgotICAgICAgICBmb3IgKGludCBjID0gMDsgYyA8IGNvbXBvbmVudHM7 IGMrKykgewotCi0gICAgICAgICAgICBpbnQgaCA9IHNjLnNsaWNlX2RpbS55OwotICAgICAgICAg ICAgaWYgKGMgPiAwICYmIGMgPCAzKQotICAgICAgICAgICAgICAgIGggPj49IGNocm9tYV9zaGlm dC55OwotCi0gICAgICAgICAgICAvKiBUYWtlcyBpbnRvIGFjY291bnQgZHVhbC1wbGFuZSBZVVYg Zm9ybWF0cyAqLwotICAgICAgICAgICAgaW50IHAgPSBtaW4oYywgcGxhbmVzIC0gMSk7Ci0gICAg ICAgICAgICBpbnQgY29tcCA9IGMgLSBwOwotCi0gICAgICAgICAgICBmb3IgKGludCB5ID0gMDsg eSA8IGg7IHkrKykKLSAgICAgICAgICAgICAgICBlbmNvZGVfbGluZV9wY20oc2MsIHNyY1twXSwg c3AsIHksIHAsIGNvbXAsIGJpdHMpOwotICAgICAgICB9Ci0jZWxzZQotICAgICAgICBmb3IgKGlu dCB5ID0gMDsgeSA8IHNjLnNsaWNlX2RpbS55OyB5KyspIHsKLSAgICAgICAgICAgIHByZWxvYWRf cmdiKHNjLCBzcCwgc2Muc2xpY2VfZGltLngsIHksIGZhbHNlKTsKLQotICAgICAgICAgICAgZW5j b2RlX2xpbmVfcGNtKHNjLCB0bXAsIHNwLCB5LCAwLCAxLCBiaXRzKTsKLSAgICAgICAgICAgIGVu Y29kZV9saW5lX3BjbShzYywgdG1wLCBzcCwgeSwgMCwgMiwgYml0cyk7Ci0gICAgICAgICAgICBl bmNvZGVfbGluZV9wY20oc2MsIHRtcCwgc3AsIHksIDAsIDAsIGJpdHMpOwotICAgICAgICAgICAg aWYgKHRyYW5zcGFyZW5jeSA9PSAxKQotICAgICAgICAgICAgICAgIGVuY29kZV9saW5lX3BjbShz YywgdG1wLCBzcCwgeSwgMCwgMywgYml0cyk7Ci0gICAgICAgIH0KLSNlbmRpZgotICAgIH0gZWxz ZQotI2VuZGlmCi0gICAgewotICAgICAgICB1OHZlYzQgcXVhbnRfdGFibGVfaWR4ID0gc2MucXVh bnRfdGFibGVfaWR4Lnh5eXo7Ci0gICAgICAgIHUzMnZlYzQgc2xpY2Vfc3RhdGVfb2ZmID0gKHNs aWNlX2lkeCpjb2RlY19wbGFuZXMgKyB1dmVjNCgwLCAxLCAxLCAyKSkqcGxhbmVfc3RhdGVfc2l6 ZTsKLQotI2lmbmRlZiBSR0IKLSAgICAgICAgZm9yIChpbnQgYyA9IDA7IGMgPCBjb21wb25lbnRz OyBjKyspIHsKLSAgICAgICAgICAgIGludCBydW5faW5kZXggPSAwOwotCi0gICAgICAgICAgICBp bnQgaCA9IHNjLnNsaWNlX2RpbS55OwotICAgICAgICAgICAgaWYgKGMgPiAwICYmIGMgPCAzKQot ICAgICAgICAgICAgICAgIGggPj49IGNocm9tYV9zaGlmdC55OwotCi0gICAgICAgICAgICBpbnQg cCA9IG1pbihjLCBwbGFuZXMgLSAxKTsKLSAgICAgICAgICAgIGludCBjb21wID0gYyAtIHA7Ci0K LSAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaDsgeSsrKQotICAgICAgICAgICAgICAg IGVuY29kZV9saW5lKHNjLCBzcmNbcF0sIHNsaWNlX3N0YXRlX29mZltjXSwgc3AsIHksIHAsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcCwgYml0cywgcXVhbnRfdGFibGVfaWR4W2Nd LCBydW5faW5kZXgpOwotICAgICAgICB9Ci0jZWxzZQotICAgICAgICBpbnQgcnVuX2luZGV4ID0g MDsKLSAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBzYy5zbGljZV9kaW0ueTsgeSsrKSB7Ci0g ICAgICAgICAgICBwcmVsb2FkX3JnYihzYywgc3AsIHNjLnNsaWNlX2RpbS54LCB5LCB0cnVlKTsK LQotICAgICAgICAgICAgZW5jb2RlX2xpbmUoc2MsIHRtcCwgc2xpY2Vfc3RhdGVfb2ZmWzBdLAot ICAgICAgICAgICAgICAgICAgICAgICAgc3AsIHksIDAsIDEsIGJpdHMsIHF1YW50X3RhYmxlX2lk eFswXSwgcnVuX2luZGV4KTsKLSAgICAgICAgICAgIGVuY29kZV9saW5lKHNjLCB0bXAsIHNsaWNl X3N0YXRlX29mZlsxXSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHNwLCB5LCAwLCAyLCBiaXRz LCBxdWFudF90YWJsZV9pZHhbMV0sIHJ1bl9pbmRleCk7Ci0gICAgICAgICAgICBlbmNvZGVfbGlu ZShzYywgdG1wLCBzbGljZV9zdGF0ZV9vZmZbMl0sCi0gICAgICAgICAgICAgICAgICAgICAgICBz cCwgeSwgMCwgMCwgYml0cywgcXVhbnRfdGFibGVfaWR4WzJdLCBydW5faW5kZXgpOwotICAgICAg ICAgICAgaWYgKHRyYW5zcGFyZW5jeSA9PSAxKQotICAgICAgICAgICAgICAgIGVuY29kZV9saW5l KHNjLCB0bXAsIHNsaWNlX3N0YXRlX29mZlszXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzcCwgeSwgMCwgMywgYml0cywgcXVhbnRfdGFibGVfaWR4WzNdLCBydW5faW5kZXgpOwotICAg ICAgICB9Ci0jZW5kaWYKLSAgICB9Ci19Ci0KLXZvaWQgZmluYWxpemVfc2xpY2UoaW5vdXQgU2xp Y2VDb250ZXh0IHNjLCBjb25zdCB1aW50IHNsaWNlX2lkeCkKLXsKLSNpZmRlZiBDQUNIRURfU1lN Qk9MX1JFQURFUgotICAgIGlmIChnbF9Mb2NhbEludm9jYXRpb25JRC54ID4gMCkKLSAgICAgICAg cmV0dXJuOwotI2VuZGlmCi0KLSNpZmRlZiBHT0xPTUIKLSAgICB1aW50MzJfdCBlbmNfbGVuID0g c2MuaGRyX2xlbiArIGZsdXNoX3B1dF9iaXRzKHNjLnBiKTsKLSNlbHNlCi0gICAgdWludDMyX3Qg ZW5jX2xlbiA9IHJhY190ZXJtaW5hdGUoc2MuYyk7Ci0jZW5kaWYKLQotICAgIHU4YnVmIGJzID0g dThidWYoc2MuYy5ieXRlc3RyZWFtX3N0YXJ0KTsKLQotICAgIC8qIEFwcGVuZCBzbGljZSBsZW5n dGggKi8KLSAgICB1OHZlYzQgZW5jX2xlbl9wID0gdW5wYWNrOChlbmNfbGVuKTsKLSAgICBic1tl bmNfbGVuICsgMF0udiA9IGVuY19sZW5fcC56OwotICAgIGJzW2VuY19sZW4gKyAxXS52ID0gZW5j X2xlbl9wLnk7Ci0gICAgYnNbZW5jX2xlbiArIDJdLnYgPSBlbmNfbGVuX3AueDsKLSAgICBlbmNf bGVuICs9IDM7Ci0KLSAgICAvKiBDYWxjdWxhdGUgYW5kIHdyaXRlIENSQyAqLwotICAgIGlmIChl YyAhPSAwKSB7Ci0gICAgICAgIGJzW2VuY19sZW5dLnYgPSB1aW50OF90KDApOwotICAgICAgICBl bmNfbGVuKys7Ci0KLSAgICAgICAgdWludDMyX3QgY3JjID0gY3JjcmVmOwotICAgICAgICBmb3Ig KGludCBpID0gMDsgaSA8IGVuY19sZW47IGkrKykKLSAgICAgICAgICAgIGNyYyA9IGNyY19pZWVl WyhjcmMgJiAweEZGKSBeIHVpbnQzMl90KGJzW2ldLnYpXSBeIChjcmMgPj4gOCk7Ci0KLSAgICAg ICAgaWYgKGNyY3JlZiAhPSAweDAwMDAwMDAwKQotICAgICAgICAgICAgY3JjIF49IDB4OENEODgx OTY7Ci0KLSAgICAgICAgdTh2ZWM0IGNyY19wID0gdW5wYWNrOChjcmMpOwotICAgICAgICBic1tl bmNfbGVuICsgMF0udiA9IGNyY19wLng7Ci0gICAgICAgIGJzW2VuY19sZW4gKyAxXS52ID0gY3Jj X3AueTsKLSAgICAgICAgYnNbZW5jX2xlbiArIDJdLnYgPSBjcmNfcC56OwotICAgICAgICBic1tl bmNfbGVuICsgM10udiA9IGNyY19wLnc7Ci0gICAgICAgIGVuY19sZW4gKz0gNDsKLSAgICB9Ci0K LSAgICBzbGljZV9yZXN1bHRzW3NsaWNlX2lkeCoyICsgMF0gPSBlbmNfbGVuOwotICAgIHNsaWNl X3Jlc3VsdHNbc2xpY2VfaWR4KjIgKyAxXSA9IHVpbnQ2NF90KGJzKSAtIHVpbnQ2NF90KG91dF9k YXRhKTsKLX0KLQotdm9pZCBtYWluKHZvaWQpCi17Ci0gICAgY29uc3QgdWludCBzbGljZV9pZHgg PSBnbF9Xb3JrR3JvdXBJRC55KmdsX051bVdvcmtHcm91cHMueCArIGdsX1dvcmtHcm91cElELng7 Ci0gICAgZW5jb2RlX3NsaWNlKHNsaWNlX2N0eFtzbGljZV9pZHhdLCBzbGljZV9pZHgpOwotICAg IGZpbmFsaXplX3NsaWNlKHNsaWNlX2N0eFtzbGljZV9pZHhdLCBzbGljZV9pZHgpOwotfQotLSAK Mi40OS4xCgoKRnJvbSBlZTcyMjk1ZTQ4ZTgxMmQ0MTZkMTg2NWI2MzM2MjkyZDdhNmY0MmIyIE1v biBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBKYW1haWthMSA8bHVrYXN6Y3oxOEB3cC5wbD4K RGF0ZTogV2VkLCAzIFNlcCAyMDI1IDEzOjQ1OjI2ICswMDAwClN1YmplY3Q6IFtQQVRDSCAxMDAv MTE4XSBDaGFuZ2luZyB2dWxrYW4gZmlsZSBkaXJlY3RvcnkKCi0tLQogbGliYXZjb2RlYy92dWxr YW4vZmZ2MV9lbmNfcmN0LmNvbXAgfCA3OSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQog MSBmaWxlIGNoYW5nZWQsIDc5IGRlbGV0aW9ucygtKQogZGVsZXRlIG1vZGUgMTAwNjQ0IGxpYmF2 Y29kZWMvdnVsa2FuL2ZmdjFfZW5jX3JjdC5jb21wCgpkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy92 dWxrYW4vZmZ2MV9lbmNfcmN0LmNvbXAgYi9saWJhdmNvZGVjL3Z1bGthbi9mZnYxX2VuY19yY3Qu Y29tcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjYxMWY0YmU5OC4uMDAwMDAwMDAw MAotLS0gYS9saWJhdmNvZGVjL3Z1bGthbi9mZnYxX2VuY19yY3QuY29tcAorKysgL2Rldi9udWxs CkBAIC0xLDc5ICswLDAgQEAKLS8qCi0gKiBGRnYxIGNvZGVjCi0gKgotICogQ29weXJpZ2h0IChj KSAyMDI0IEx5bm5lIDxkZXZAbHlubmUuZWU+Ci0gKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2Yg RkZtcGVnLgotICoKLSAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp YnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM ZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vu c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogRkZtcGVn IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBi dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50 eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt b3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0 aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBl ZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5j LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAx IFVTQQotICovCi0KLWl2ZWM0IGxvYWRfY29tcG9uZW50cyhpdmVjMiBwb3MpCi17Ci0gICAgaXZl YzQgcGl4ID0gaXZlYzQoaW1hZ2VMb2FkKHNyY1swXSwgcG9zKSk7Ci0gICAgaWYgKHBsYW5hcl9y Z2IgIT0gMCkgewotICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8ICgzICsgdHJhbnNwYXJlbmN5 KTsgaSsrKQotICAgICAgICAgICAgcGl4W2ldID0gaW50KGltYWdlTG9hZChzcmNbaV0sIHBvcylb MF0pOwotICAgIH0KLQotICAgIHJldHVybiBpdmVjNChwaXhbZm10X2x1dFswXV0sIHBpeFtmbXRf bHV0WzFdXSwKLSAgICAgICAgICAgICAgICAgcGl4W2ZtdF9sdXRbMl1dLCBwaXhbZm10X2x1dFsz XV0pOwotfQotCi12b2lkIGJ5cGFzc19zYW1wbGUoaXZlYzIgcG9zKQotewotICAgIGltYWdlU3Rv cmUoZHN0WzBdLCBwb3MsIGxvYWRfY29tcG9uZW50cyhwb3MpKTsKLX0KLQotdm9pZCBieXBhc3Nf YmxvY2soaW4gU2xpY2VDb250ZXh0IHNjKQotewotICAgIGl2ZWMyIHN0YXJ0ID0gaXZlYzIoZ2xf TG9jYWxJbnZvY2F0aW9uSUQpICsgc2Muc2xpY2VfcG9zOwotICAgIGl2ZWMyIGVuZCA9IHNjLnNs aWNlX3BvcyArIHNjLnNsaWNlX2RpbTsKLSAgICBmb3IgKHVpbnQgeSA9IHN0YXJ0Lnk7IHkgPCBl bmQueTsgeSArPSBnbF9Xb3JrR3JvdXBTaXplLnkpCi0gICAgICAgIGZvciAodWludCB4ID0gc3Rh cnQueDsgeCA8IGVuZC54OyB4ICs9IGdsX1dvcmtHcm91cFNpemUueCkKLSAgICAgICAgICAgIGJ5 cGFzc19zYW1wbGUoaXZlYzIoeCwgeSkpOwotfQotCi12b2lkIHRyYW5zZm9ybV9zYW1wbGUoaXZl YzIgcG9zLCBpdmVjMiByY3RfY29lZikKLXsKLSAgICBpdmVjNCBwaXggPSBsb2FkX2NvbXBvbmVu dHMocG9zKTsKLSAgICBwaXguYiAtPSBwaXguZzsKLSAgICBwaXguciAtPSBwaXguZzsKLSAgICBw aXguZyArPSAocGl4LnIqcmN0X2NvZWYueCArIHBpeC5iKnJjdF9jb2VmLnkpID4+IDI7Ci0gICAg cGl4LmIgKz0gb2Zmc2V0OwotICAgIHBpeC5yICs9IG9mZnNldDsKLSAgICBpbWFnZVN0b3JlKGRz dFswXSwgcG9zLCBwaXgpOwotfQotCi12b2lkIHRyYW5zZm9ybV9ibG9jayhpbiBTbGljZUNvbnRl eHQgc2MpCi17Ci0gICAgY29uc3QgaXZlYzIgcmN0X2NvZWYgPSBzYy5zbGljZV9yY3RfY29lZjsK LSAgICBjb25zdCBpdmVjMiBzdGFydCA9IGl2ZWMyKGdsX0xvY2FsSW52b2NhdGlvbklEKSArIHNj LnNsaWNlX3BvczsKLSAgICBjb25zdCBpdmVjMiBlbmQgPSBzYy5zbGljZV9wb3MgKyBzYy5zbGlj ZV9kaW07Ci0KLSAgICBmb3IgKHVpbnQgeSA9IHN0YXJ0Lnk7IHkgPCBlbmQueTsgeSArPSBnbF9X b3JrR3JvdXBTaXplLnkpCi0gICAgICAgIGZvciAodWludCB4ID0gc3RhcnQueDsgeCA8IGVuZC54 OyB4ICs9IGdsX1dvcmtHcm91cFNpemUueCkKLSAgICAgICAgICAgIHRyYW5zZm9ybV9zYW1wbGUo aXZlYzIoeCwgeSksIHJjdF9jb2VmKTsKLX0KLQotdm9pZCBtYWluKCkKLXsKLSAgICBjb25zdCB1 aW50IHNsaWNlX2lkeCA9IGdsX1dvcmtHcm91cElELnkqZ2xfTnVtV29ya0dyb3Vwcy54ICsgZ2xf V29ya0dyb3VwSUQueDsKLQotICAgIGlmIChzbGljZV9jdHhbc2xpY2VfaWR4XS5zbGljZV9jb2Rp bmdfbW9kZSA9PSAxKQotICAgICAgICBieXBhc3NfYmxvY2soc2xpY2VfY3R4W3NsaWNlX2lkeF0p OwotICAgIGVsc2UKLSAgICAgICAgdHJhbnNmb3JtX2Jsb2NrKHNsaWNlX2N0eFtzbGljZV9pZHhd KTsKLX0KLS0gCjIuNDkuMQoKCkZyb20gMjQzOTRlOTllZjVjZWYzZDUzZTY4NDk4MTQ5ZWE3ZWJj YTRlYTY0YSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKRnJvbTogSmFtYWlrYTEgPGx1a2FzemN6 MThAd3AucGw+CkRhdGU6IFdlZCwgMyBTZXAgMjAyNSAxMzo0NTo0MiArMDAwMApTdWJqZWN0OiBb UEFUQ0ggMTAxLzExOF0gQ2hhbmdpbmcgdnVsa2FuIGZpbGUgZGlyZWN0b3J5CgotLS0KIGxpYmF2 Y29kZWMvdnVsa2FuL2ZmdjFfZW5jX3NldHVwLmNvbXAgfCAxMjYgLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAxMjYgZGVsZXRpb25zKC0pCiBkZWxldGUgbW9kZSAx MDA2NDQgbGliYXZjb2RlYy92dWxrYW4vZmZ2MV9lbmNfc2V0dXAuY29tcAoKZGlmZiAtLWdpdCBh L2xpYmF2Y29kZWMvdnVsa2FuL2ZmdjFfZW5jX3NldHVwLmNvbXAgYi9saWJhdmNvZGVjL3Z1bGth bi9mZnYxX2VuY19zZXR1cC5jb21wCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1Zjhl NjcwNGIwLi4wMDAwMDAwMDAwCi0tLSBhL2xpYmF2Y29kZWMvdnVsa2FuL2ZmdjFfZW5jX3NldHVw LmNvbXAKKysrIC9kZXYvbnVsbApAQCAtMSwxMjYgKzAsMCBAQAotLyoKLSAqIEZGdjEgY29kZWMK LSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMjQgTHlubmUgPGRldkBseW5uZS5lZT4KLSAqCi0gKiBU aGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCi0gKgotICogRkZtcGVnIGlzIGZyZWUgc29mdHdh cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBw dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJz aW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy c2lvbi4KLSAqCi0gKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3 aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUg cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNl bnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJl Ci0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBC b3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCi0gKi8KLQotdWludDhfdCBzdGF0ZVtDT05URVhUX1NJ WkVdOwotCi12b2lkIGluaXRfc2xpY2UoaW5vdXQgU2xpY2VDb250ZXh0IHNjLCBjb25zdCB1aW50 IHNsaWNlX2lkeCkKLXsKLSAgICAvKiBTZXQgY29vcmRpbmF0ZXMgKi8KLSAgICB1dmVjMiBpbWdf c2l6ZSA9IGltYWdlU2l6ZShzcmNbMF0pOwotICAgIHVpbnQgc3hzID0gc2xpY2VfY29vcmQoaW1n X3NpemUueCwgZ2xfV29ya0dyb3VwSUQueCArIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICBnbF9OdW1Xb3JrR3JvdXBzLngsIGNocm9tYV9zaGlmdC54KTsKLSAgICB1aW50IHN4ZSA9IHNs aWNlX2Nvb3JkKGltZ19zaXplLngsIGdsX1dvcmtHcm91cElELnggKyAxLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgZ2xfTnVtV29ya0dyb3Vwcy54LCBjaHJvbWFfc2hpZnQueCk7Ci0gICAg dWludCBzeXMgPSBzbGljZV9jb29yZChpbWdfc2l6ZS55LCBnbF9Xb3JrR3JvdXBJRC55ICsgMCwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsX051bVdvcmtHcm91cHMueSwgY2hyb21hX3No aWZ0LnkpOwotICAgIHVpbnQgc3llID0gc2xpY2VfY29vcmQoaW1nX3NpemUueSwgZ2xfV29ya0dy b3VwSUQueSArIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBnbF9OdW1Xb3JrR3JvdXBz LnksIGNocm9tYV9zaGlmdC55KTsKLQotICAgIHNjLnNsaWNlX3BvcyA9IGl2ZWMyKHN4cywgc3lz KTsKLSAgICBzYy5zbGljZV9kaW0gPSBpdmVjMihzeGUgLSBzeHMsIHN5ZSAtIHN5cyk7Ci0gICAg c2Muc2xpY2VfY29kaW5nX21vZGUgPSBpbnQoZm9yY2VfcGNtID09IDEpOwotICAgIHNjLnNsaWNl X3Jlc2V0X2NvbnRleHRzID0gc2Muc2xpY2VfY29kaW5nX21vZGUgPT0gMTsKLSAgICBzYy5xdWFu dF90YWJsZV9pZHggPSB1OHZlYzMoY29udGV4dF9tb2RlbCk7Ci0KLSAgICBpZiAoKHJjdF9zZWFy Y2ggPT0gMCkgfHwgKHNjLnNsaWNlX2NvZGluZ19tb2RlID09IDEpKQotICAgICAgICBzYy5zbGlj ZV9yY3RfY29lZiA9IGl2ZWMyKDEsIDEpOwotCi0gICAgcmFjX2luaXQoc2MuYywKLSAgICAgICAg ICAgICBPRkZCVUYodThidWYsIG91dF9kYXRhLCBzbGljZV9pZHggKiBzbGljZV9zaXplX21heCks Ci0gICAgICAgICAgICAgc2xpY2Vfc2l6ZV9tYXgpOwotfQotCi12b2lkIHB1dF91c3ltYm9sKGlu b3V0IFJhbmdlQ29kZXIgYywgdWludCB2KQotewotICAgIGJvb2wgaXNfbmlsID0gKHYgPT0gMCk7 Ci0gICAgcHV0X3JhY19kaXJlY3QoYywgc3RhdGVbMF0sIGlzX25pbCk7Ci0gICAgaWYgKGlzX25p bCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY29uc3QgaW50IGUgPSBmaW5kTVNCKHYpOwotCi0g ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBlOyBpKyspCi0gICAgICAgIHB1dF9yYWNfZGlyZWN0KGMs IHN0YXRlWzEgKyBtaW4oaSwgOSldLCB0cnVlKTsKLSAgICBwdXRfcmFjX2RpcmVjdChjLCBzdGF0 ZVsxICsgbWluKGUsIDkpXSwgZmFsc2UpOwotCi0gICAgZm9yIChpbnQgaSA9IGUgLSAxOyBpID49 IDA7IGktLSkKLSAgICAgICAgcHV0X3JhY19kaXJlY3QoYywgc3RhdGVbMjIgKyBtaW4oaSwgOSld LCBib29sKGJpdGZpZWxkRXh0cmFjdCh2LCBpLCAxKSkpOwotfQotCi12b2lkIHdyaXRlX3NsaWNl X2hlYWRlcihpbm91dCBTbGljZUNvbnRleHQgc2MpCi17Ci0gICAgW1t1bnJvbGxdXQotICAgIGZv ciAoaW50IGkgPSAwOyBpIDwgQ09OVEVYVF9TSVpFOyBpKyspCi0gICAgICAgIHN0YXRlW2ldID0g dWludDhfdCgxMjgpOwotCi0gICAgcHV0X3VzeW1ib2woc2MuYywgZ2xfV29ya0dyb3VwSUQueCk7 Ci0gICAgcHV0X3VzeW1ib2woc2MuYywgZ2xfV29ya0dyb3VwSUQueSk7Ci0gICAgcHV0X3VzeW1i b2woc2MuYywgMCk7Ci0gICAgcHV0X3VzeW1ib2woc2MuYywgMCk7Ci0KLSAgICBmb3IgKGludCBp ID0gMDsgaSA8IGNvZGVjX3BsYW5lczsgaSsrKQotICAgICAgICBwdXRfdXN5bWJvbChzYy5jLCBz Yy5xdWFudF90YWJsZV9pZHhbaV0pOwotCi0gICAgcHV0X3VzeW1ib2woc2MuYywgcGljX21vZGUp OwotICAgIHB1dF91c3ltYm9sKHNjLmMsIHNhci54KTsKLSAgICBwdXRfdXN5bWJvbChzYy5jLCBz YXIueSk7Ci0KLSAgICBpZiAodmVyc2lvbiA+PSA0KSB7Ci0gICAgICAgIHB1dF9yYWNfZGlyZWN0 KHNjLmMsIHN0YXRlWzBdLCBzYy5zbGljZV9yZXNldF9jb250ZXh0cyk7Ci0gICAgICAgIHB1dF91 c3ltYm9sKHNjLmMsIHNjLnNsaWNlX2NvZGluZ19tb2RlKTsKLSAgICAgICAgaWYgKHNjLnNsaWNl X2NvZGluZ19tb2RlICE9IDEgJiYgY29sb3JzcGFjZSA9PSAxKSB7Ci0gICAgICAgICAgICBwdXRf dXN5bWJvbChzYy5jLCBzYy5zbGljZV9yY3RfY29lZi55KTsKLSAgICAgICAgICAgIHB1dF91c3lt Ym9sKHNjLmMsIHNjLnNsaWNlX3JjdF9jb2VmLngpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12 b2lkIHdyaXRlX2ZyYW1lX2hlYWRlcihpbm91dCBTbGljZUNvbnRleHQgc2MpCi17Ci0gICAgcHV0 X3JhY19lcXVpKHNjLmMsIGJvb2woa2V5X2ZyYW1lKSk7Ci19Ci0KLSNpZmRlZiBHT0xPTUIKLXZv aWQgaW5pdF9nb2xvbWIoaW5vdXQgU2xpY2VDb250ZXh0IHNjKQotewotICAgIHNjLmhkcl9sZW4g PSByYWNfdGVybWluYXRlKHNjLmMpOwotICAgIGluaXRfcHV0X2JpdHMoc2MucGIsCi0gICAgICAg ICAgICAgICAgICBPRkZCVUYodThidWYsIHNjLmMuYnl0ZXN0cmVhbV9zdGFydCwgc2MuaGRyX2xl biksCi0gICAgICAgICAgICAgICAgICBzbGljZV9zaXplX21heCAtIHNjLmhkcl9sZW4pOwotfQot I2VuZGlmCi0KLXZvaWQgbWFpbih2b2lkKQotewotICAgIGNvbnN0IHVpbnQgc2xpY2VfaWR4ID0g Z2xfV29ya0dyb3VwSUQueSpnbF9OdW1Xb3JrR3JvdXBzLnggKyBnbF9Xb3JrR3JvdXBJRC54Owot Ci0gICAgaW5pdF9zbGljZShzbGljZV9jdHhbc2xpY2VfaWR4XSwgc2xpY2VfaWR4KTsKLQotICAg IGlmIChzbGljZV9pZHggPT0gMCkKLSAgICAgICAgd3JpdGVfZnJhbWVfaGVhZGVyKHNsaWNlX2N0 eFtzbGljZV9pZHhdKTsKLQotICAgIHdyaXRlX3NsaWNlX2hlYWRlcihzbGljZV9jdHhbc2xpY2Vf aWR4XSk7Ci0KLSNpZmRlZiBHT0xPTUIKLSAgICBpbml0X2dvbG9tYihzbGljZV9jdHhbc2xpY2Vf aWR4XSk7Ci0jZW5kaWYKLX0KLS0gCjIuNDkuMQoKCkZyb20gZTAwNzE3NWI0Yjc4NjAwM2JlMTQ1 YzMwN2RlODFjNjY5MGEzYTdkMCBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKRnJvbTogSmFtYWlr YTEgPGx1a2FzemN6MThAd3AucGw+CkRhdGU6IFdlZCwgMyBTZXAgMjAyNSAxMzo0NTo1OCArMDAw MApTdWJqZWN0OiBbUEFUQ0ggMTAyLzExOF0gQ2hhbmdpbmcgdnVsa2FuIGZpbGUgZGlyZWN0b3J5 CgotLS0KIGxpYmF2Y29kZWMvdnVsa2FuL2ZmdjFfcmN0LmNvbXAgfCA5MCAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCA5MCBkZWxldGlvbnMoLSkKIGRl bGV0ZSBtb2RlIDEwMDY0NCBsaWJhdmNvZGVjL3Z1bGthbi9mZnYxX3JjdC5jb21wCgpkaWZmIC0t Z2l0IGEvbGliYXZjb2RlYy92dWxrYW4vZmZ2MV9yY3QuY29tcCBiL2xpYmF2Y29kZWMvdnVsa2Fu L2ZmdjFfcmN0LmNvbXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxMGJiNDcxMzIu LjAwMDAwMDAwMDAKLS0tIGEvbGliYXZjb2RlYy92dWxrYW4vZmZ2MV9yY3QuY29tcAorKysgL2Rl di9udWxsCkBAIC0xLDkwICswLDAgQEAKLS8qCi0gKiBGRnYxIGNvZGVjCi0gKgotICogQ29weXJp Z2h0IChjKSAyMDI0IEx5bm5lIDxkZXZAbHlubmUuZWU+Ci0gKgotICogVGhpcyBmaWxlIGlzIHBh cnQgb2YgRkZtcGVnLgotICoKLSAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyLjEgb2YgdGhl IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICog RkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws Ci0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3 YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w eSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRo IEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlv biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjEx MC0xMzAxIFVTQQotICovCi0KLWl2ZWM0IGxvYWRfY29tcG9uZW50cyhpdmVjMiBwb3MpCi17Ci0g ICAgaXZlYzQgcGl4ID0gaXZlYzQoaW1hZ2VMb2FkKHNyY1swXSwgcG9zKSk7Ci0gICAgaWYgKHBs YW5hcl9yZ2IgIT0gMCkgewotICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8ICgzICsgdHJhbnNw YXJlbmN5KTsgaSsrKQotICAgICAgICAgICAgcGl4W2ldID0gaW50KGltYWdlTG9hZChzcmNbaV0s IHBvcylbMF0pOwotICAgIH0KLQotICAgIHJldHVybiBpdmVjNChwaXhbZm10X2x1dFswXV0sIHBp eFtmbXRfbHV0WzFdXSwKLSAgICAgICAgICAgICAgICAgcGl4W2ZtdF9sdXRbMl1dLCBwaXhbZm10 X2x1dFszXV0pOwotfQotCi12b2lkIGJ5cGFzc19zYW1wbGUoaXZlYzIgcG9zKQotewotICAgIGlt YWdlU3RvcmUoZHN0WzBdLCBwb3MsIGxvYWRfY29tcG9uZW50cyhwb3MpKTsKLX0KLQotdm9pZCBi eXBhc3NfYmxvY2soaW4gU2xpY2VDb250ZXh0IHNjKQotewotICAgIGl2ZWMyIHN0YXJ0ID0gaXZl YzIoZ2xfTG9jYWxJbnZvY2F0aW9uSUQpICsgc2Muc2xpY2VfcG9zOwotICAgIGl2ZWMyIGVuZCA9 IHNjLnNsaWNlX3BvcyArIHNjLnNsaWNlX2RpbTsKLSAgICBmb3IgKHVpbnQgeSA9IHN0YXJ0Lnk7 IHkgPCBlbmQueTsgeSArPSBnbF9Xb3JrR3JvdXBTaXplLnkpCi0gICAgICAgIGZvciAodWludCB4 ID0gc3RhcnQueDsgeCA8IGVuZC54OyB4ICs9IGdsX1dvcmtHcm91cFNpemUueCkKLSAgICAgICAg ICAgIGJ5cGFzc19zYW1wbGUoaXZlYzIoeCwgeSkpOwotfQotCi12b2lkIHRyYW5zZm9ybV9zYW1w bGUoaXZlYzIgcG9zLCBpdmVjMiByY3RfY29lZikKLXsKLSAgICBpdmVjNCBwaXggPSBsb2FkX2Nv bXBvbmVudHMocG9zKTsKLSAgICBwaXguYiAtPSBvZmZzZXQ7Ci0gICAgcGl4LnIgLT0gb2Zmc2V0 OwotICAgIHBpeC5nIC09IChwaXgucipyY3RfY29lZi54ICsgcGl4LmIqcmN0X2NvZWYueSkgPj4g MjsKLSAgICBwaXguYiArPSBwaXguZzsKLSAgICBwaXguciArPSBwaXguZzsKLSAgICBpbWFnZVN0 b3JlKGRzdFswXSwgcG9zLCBwaXgpOwotfQotCi12b2lkIHRyYW5zZm9ybV9zYW1wbGUoaXZlYzIg cG9zLCBpdmVjMiByY3RfY29lZikKLXsKLSAgICBpdmVjNCBwaXggPSBsb2FkX2NvbXBvbmVudHMo cG9zKTsKLSAgICBwaXguYiAtPSBwaXguZzsKLSAgICBwaXguciAtPSBwaXguZzsKLSAgICBwaXgu ZyArPSAocGl4LnIqcmN0X2NvZWYueCArIHBpeC5iKnJjdF9jb2VmLnkpID4+IDI7Ci0gICAgcGl4 LmIgKz0gb2Zmc2V0OwotICAgIHBpeC5yICs9IG9mZnNldDsKLSAgICBpbWFnZVN0b3JlKGRzdFsw XSwgcG9zLCBwaXgpOwotfQotCi12b2lkIHRyYW5zZm9ybV9ibG9jayhpbiBTbGljZUNvbnRleHQg c2MpCi17Ci0gICAgY29uc3QgaXZlYzIgcmN0X2NvZWYgPSBzYy5zbGljZV9yY3RfY29lZjsKLSAg ICBjb25zdCBpdmVjMiBzdGFydCA9IGl2ZWMyKGdsX0xvY2FsSW52b2NhdGlvbklEKSArIHNjLnNs aWNlX3BvczsKLSAgICBjb25zdCBpdmVjMiBlbmQgPSBzYy5zbGljZV9wb3MgKyBzYy5zbGljZV9k aW07Ci0KLSAgICBmb3IgKHVpbnQgeSA9IHN0YXJ0Lnk7IHkgPCBlbmQueTsgeSArPSBnbF9Xb3Jr R3JvdXBTaXplLnkpCi0gICAgICAgIGZvciAodWludCB4ID0gc3RhcnQueDsgeCA8IGVuZC54OyB4 ICs9IGdsX1dvcmtHcm91cFNpemUueCkKLSAgICAgICAgICAgIHRyYW5zZm9ybV9zYW1wbGUoaXZl YzIoeCwgeSksIHJjdF9jb2VmKTsKLX0KLQotdm9pZCBtYWluKCkKLXsKLSAgICBjb25zdCB1aW50 IHNsaWNlX2lkeCA9IGdsX1dvcmtHcm91cElELnkqZ2xfTnVtV29ya0dyb3Vwcy54ICsgZ2xfV29y a0dyb3VwSUQueDsKLQotICAgIGlmIChzbGljZV9jdHhbc2xpY2VfaWR4XS5zbGljZV9jb2Rpbmdf bW9kZSA9PSAxKQotICAgICAgICBieXBhc3NfYmxvY2soc2xpY2VfY3R4W3NsaWNlX2lkeF0pOwot ICAgIGVsc2UKLSAgICAgICAgdHJhbnNmb3JtX2Jsb2NrKHNsaWNlX2N0eFtzbGljZV9pZHhdKTsK LX0KLS0gCjIuNDkuMQoKCkZyb20gMWI3YjE4YjY1OTVkNWNhNWQyN2FmMDViNGMyMDNlY2JlNTAz NDI1NSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKRnJvbTogSmFtYWlrYTEgPGx1a2FzemN6MThA d3AucGw+CkRhdGU6IFdlZCwgMyBTZXAgMjAyNSAxMzo0NjoxNCArMDAwMApTdWJqZWN0OiBbUEFU Q0ggMTAzLzExOF0gQ2hhbmdpbmcgdnVsa2FuIGZpbGUgZGlyZWN0b3J5CgotLS0KIGxpYmF2Y29k ZWMvdnVsa2FuL2ZmdjFfcmN0X3NlYXJjaC5jb21wIHwgMTM5IC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAxMzkgZGVsZXRpb25zKC0pCiBkZWxldGUgbW9kZSAxMDA2 NDQgbGliYXZjb2RlYy92dWxrYW4vZmZ2MV9yY3Rfc2VhcmNoLmNvbXAKCmRpZmYgLS1naXQgYS9s aWJhdmNvZGVjL3Z1bGthbi9mZnYxX3JjdF9zZWFyY2guY29tcCBiL2xpYmF2Y29kZWMvdnVsa2Fu L2ZmdjFfcmN0X3NlYXJjaC5jb21wCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNTVi ZGU0NmM0Li4wMDAwMDAwMDAwCi0tLSBhL2xpYmF2Y29kZWMvdnVsa2FuL2ZmdjFfcmN0X3NlYXJj aC5jb21wCisrKyAvZGV2L251bGwKQEAgLTEsMTM5ICswLDAgQEAKLS8qCi0gKiBGRnYxIGNvZGVj Ci0gKgotICogQ29weXJpZ2h0IChjKSAyMDI0IEx5bm5lIDxkZXZAbHlubmUuZWU+Ci0gKgotICog VGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgotICoKLSAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3 YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0 aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMg cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVy c2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl cnNpb24uCi0gKgotICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg d2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZl IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGlj ZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2Fy ZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwg Qm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQotICovCi0KLWl2ZWMzIGxvYWRfY29tcG9uZW50cyhp dmVjMiBwb3MpCi17Ci0gICAgaXZlYzMgcGl4ID0gaXZlYzMoaW1hZ2VMb2FkKHNyY1swXSwgcG9z KSk7Ci0gICAgaWYgKHBsYW5hcl9yZ2IgIT0gMCkgewotICAgICAgICBmb3IgKGludCBpID0gMTsg aSA8IDM7IGkrKykKLSAgICAgICAgICAgIHBpeFtpXSA9IGludChpbWFnZUxvYWQoc3JjW2ldLCBw b3MpWzBdKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gaXZlYzMocGl4W2ZtdF9sdXRbMF1dLCBwaXhb Zm10X2x1dFsxXV0sIHBpeFtmbXRfbHV0WzJdXSk7Ci19Ci0KLSNkZWZpbmUgTlVNX0NIRUNLUyAx NQotY29uc3QgaXZlYzIgcmN0X3lfY29lZmZbTlVNX0NIRUNLU10gPSB7Ci0gICAgaXZlYzIoMCwg MCksIC8vICAgICAgNEcKLQotICAgIGl2ZWMyKDAsIDEpLCAvLyAgICAgIDNHICsgIEIKLSAgICBp dmVjMigxLCAwKSwgLy8gIFIgKyAzRwotICAgIGl2ZWMyKDEsIDEpLCAvLyAgUiArIDJHICsgQgot Ci0gICAgaXZlYzIoMCwgMiksIC8vICAgICAgMkcgKyAyQgotICAgIGl2ZWMyKDIsIDApLCAvLyAy UiArIDJHCi0gICAgaXZlYzIoMiwgMiksIC8vIDJSICAgICAgKyAyQgotCi0gICAgaXZlYzIoMCwg MyksIC8vICAgICAgMUcgKyAzQgotICAgIGl2ZWMyKDMsIDApLCAvLyAzUiArIDFHCi0KLSAgICBp dmVjMigwLCA0KSwgLy8gICAgICAgICAgIDRCCi0gICAgaXZlYzIoNCwgMCksIC8vIDRSCi0KLSAg ICBpdmVjMigxLCAyKSwgLy8gIFIgKyAgRyArIDJCCi0gICAgaXZlYzIoMiwgMSksIC8vIDJSICsg IEcgKyAgQgotCi0gICAgaXZlYzIoMywgMSksIC8vIDNSICAgICAgKyAgQgotICAgIGl2ZWMyKDEs IDMpLCAvLyAgUiAgICAgICsgM0IKLX07Ci0KLXNoYXJlZCBpdmVjMyBwaXhfYnVmW2dsX1dvcmtH cm91cFNpemUueCArIDFdW2dsX1dvcmtHcm91cFNpemUueSArIDFdID0geyB9OwotCi1pdmVjMyB0 cmFuc2Zvcm1fc2FtcGxlKGl2ZWMzIHBpeCwgaXZlYzIgcmN0X2NvZWYpCi17Ci0gICAgcGl4LmIg LT0gcGl4Lmc7Ci0gICAgcGl4LnIgLT0gcGl4Lmc7Ci0gICAgcGl4LmcgKz0gKHBpeC5yKnJjdF9j b2VmLnggKyBwaXguYipyY3RfY29lZi55KSA+PiAyOwotICAgIHBpeC5iICs9IHJjdF9vZmZzZXQ7 Ci0gICAgcGl4LnIgKz0gcmN0X29mZnNldDsKLSAgICByZXR1cm4gcGl4OwotfQotCi11aW50IGdl dF9kaXN0KGl2ZWMzIGN1cikKLXsKLSAgICBpdmVjMyBMTCA9IHBpeF9idWZbZ2xfTG9jYWxJbnZv Y2F0aW9uSUQueCArIDBdW2dsX0xvY2FsSW52b2NhdGlvbklELnkgKyAxXTsKLSAgICBpdmVjMyBU TCA9IHBpeF9idWZbZ2xfTG9jYWxJbnZvY2F0aW9uSUQueCArIDBdW2dsX0xvY2FsSW52b2NhdGlv bklELnkgKyAwXTsKLSAgICBpdmVjMyBUVCA9IHBpeF9idWZbZ2xfTG9jYWxJbnZvY2F0aW9uSUQu eCArIDFdW2dsX0xvY2FsSW52b2NhdGlvbklELnkgKyAwXTsKLQotICAgIGl2ZWMzIHByZWQgPSBp dmVjMyhwcmVkaWN0KExMLnIsIGl2ZWMyKFRMLnIsIFRULnIpKSwKLSAgICAgICAgICAgICAgICAg ICAgICAgcHJlZGljdChMTC5nLCBpdmVjMihUTC5nLCBUVC5nKSksCi0gICAgICAgICAgICAgICAg ICAgICAgIHByZWRpY3QoTEwuYiwgaXZlYzIoVEwuYiwgVFQuYikpKTsKLQotICAgIHV2ZWMzIGMg PSBhYnMocHJlZCAtIGN1cik7Ci0gICAgcmV0dXJuIG1pZF9wcmVkKGMuciwgYy5nLCBjLmIpOwot fQotCi1zaGFyZWQgdWludCBzY29yZV9jb2xzW2dsX1dvcmtHcm91cFNpemUueV0gPSB7IH07Ci1z aGFyZWQgdWludCBzY29yZV9tb2RlWzE2XSA9IHsgfTsKLQotdm9pZCBwcm9jZXNzKGl2ZWMyIHBv cykKLXsKLSAgICBpdmVjMyBwaXggPSBsb2FkX2NvbXBvbmVudHMocG9zKTsKLQotICAgIGZvciAo aW50IGkgPSAwOyBpIDwgTlVNX0NIRUNLUzsgaSsrKSB7Ci0gICAgICAgIGl2ZWMzIHR4X3BpeCA9 IHRyYW5zZm9ybV9zYW1wbGUocGl4LCByY3RfeV9jb2VmZltpXSk7Ci0gICAgICAgIHBpeF9idWZb Z2xfTG9jYWxJbnZvY2F0aW9uSUQueCArIDFdW2dsX0xvY2FsSW52b2NhdGlvbklELnkgKyAxXSA9 IHR4X3BpeDsKLSAgICAgICAgbWVtb3J5QmFycmllclNoYXJlZCgpOwotCi0gICAgICAgIHVpbnQg ZGlzdCA9IGdldF9kaXN0KHR4X3BpeCk7Ci0gICAgICAgIGF0b21pY0FkZChzY29yZV9tb2RlW2ld LCBkaXN0KTsKLSAgICB9Ci19Ci0KLXZvaWQgY29lZmZfc2VhcmNoKGlub3V0IFNsaWNlQ29udGV4 dCBzYykKLXsKLSAgICB1dmVjMiBpbWdfc2l6ZSA9IGltYWdlU2l6ZShzcmNbMF0pOwotICAgIHVp bnQgc3hzID0gc2xpY2VfY29vcmQoaW1nX3NpemUueCwgZ2xfV29ya0dyb3VwSUQueCArIDAsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICBnbF9OdW1Xb3JrR3JvdXBzLngsIDApOwotICAgIHVp bnQgc3hlID0gc2xpY2VfY29vcmQoaW1nX3NpemUueCwgZ2xfV29ya0dyb3VwSUQueCArIDEsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICBnbF9OdW1Xb3JrR3JvdXBzLngsIDApOwotICAgIHVp bnQgc3lzID0gc2xpY2VfY29vcmQoaW1nX3NpemUueSwgZ2xfV29ya0dyb3VwSUQueSArIDAsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICBnbF9OdW1Xb3JrR3JvdXBzLnksIDApOwotICAgIHVp bnQgc3llID0gc2xpY2VfY29vcmQoaW1nX3NpemUueSwgZ2xfV29ya0dyb3VwSUQueSArIDEsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICBnbF9OdW1Xb3JrR3JvdXBzLnksIDApOwotCi0gICAg Zm9yICh1aW50IHkgPSBzeXMgKyBnbF9Mb2NhbEludm9jYXRpb25JRC55OyB5IDwgc3llOyB5ICs9 IGdsX1dvcmtHcm91cFNpemUueSkgewotICAgICAgICBmb3IgKHVpbnQgeCA9IHN4cyArIGdsX0xv Y2FsSW52b2NhdGlvbklELng7IHggPCBzeGU7IHggKz0gZ2xfV29ya0dyb3VwU2l6ZS54KSB7Ci0g ICAgICAgICAgICBwcm9jZXNzKGl2ZWMyKHgsIHkpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAg IGlmIChnbF9Mb2NhbEludm9jYXRpb25JRC54ID09IDAgJiYgZ2xfTG9jYWxJbnZvY2F0aW9uSUQu eSA9PSAwKSB7Ci0gICAgICAgIHVpbnQgbWluX3Njb3JlID0gMHhGRkZGRkZGRjsKLSAgICAgICAg dWludCBtaW5faWR4ID0gMzsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOVU1fQ0hFQ0tT OyBpKyspIHsKLSAgICAgICAgICAgIGlmIChzY29yZV9tb2RlW2ldIDwgbWluX3Njb3JlKSB7Ci0g ICAgICAgICAgICAgICAgbWluX3Njb3JlID0gc2NvcmVfbW9kZVtpXTsKLSAgICAgICAgICAgICAg ICBtaW5faWR4ID0gaTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBzYy5zbGlj ZV9yY3RfY29lZiA9IHJjdF95X2NvZWZmW21pbl9pZHhdOwotICAgIH0KLX0KLQotdm9pZCBtYWlu KHZvaWQpCi17Ci0gICAgaWYgKGZvcmNlX3BjbSA9PSAxKQotICAgICAgICByZXR1cm47Ci0gICAg Y29uc3QgdWludCBzbGljZV9pZHggPSBnbF9Xb3JrR3JvdXBJRC55KmdsX051bVdvcmtHcm91cHMu eCArIGdsX1dvcmtHcm91cElELng7Ci0gICAgY29lZmZfc2VhcmNoKHNsaWNlX2N0eFtzbGljZV9p ZHhdKTsKLX0KLS0gCjIuNDkuMQoKCkZyb20gMTA1NDUwODliZmFmM2E5N2YyNzBhZjFjMzM3ZjBm NWIxZTA4ZmM4YSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKRnJvbTogSmFtYWlrYTEgPGx1a2Fz emN6MThAd3AucGw+CkRhdGU6IFdlZCwgMyBTZXAgMjAyNSAxMzo0NjoyOSArMDAwMApTdWJqZWN0 OiBbUEFUQ0ggMTA0LzExOF0gQ2hhbmdpbmcgdnVsa2FuIGZpbGUgZGlyZWN0b3J5CgotLS0KIGxp YmF2Y29kZWMvdnVsa2FuL2ZmdjFfcmVzZXQuY29tcCB8IDU3IC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCA1NyBkZWxldGlvbnMoLSkKIGRlbGV0ZSBtb2Rl IDEwMDY0NCBsaWJhdmNvZGVjL3Z1bGthbi9mZnYxX3Jlc2V0LmNvbXAKCmRpZmYgLS1naXQgYS9s aWJhdmNvZGVjL3Z1bGthbi9mZnYxX3Jlc2V0LmNvbXAgYi9saWJhdmNvZGVjL3Z1bGthbi9mZnYx X3Jlc2V0LmNvbXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmYjdkY2M0NDQuLjAw MDAwMDAwMDAKLS0tIGEvbGliYXZjb2RlYy92dWxrYW4vZmZ2MV9yZXNldC5jb21wCisrKyAvZGV2 L251bGwKQEAgLTEsNTcgKzAsMCBAQAotLyoKLSAqIEZGdjEgY29kZWMKLSAqCi0gKiBDb3B5cmln aHQgKGMpIDIwMjQgTHlubmUgPGRldkBseW5uZS5lZT4KLSAqCi0gKiBUaGlzIGZpbGUgaXMgcGFy dCBvZiBGRm1wZWcuCi0gKgotICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk aXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIuMSBvZiB0aGUg TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBG Rm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK LSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh cnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug Zm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5 IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGgg RkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9u LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEw LTEzMDEgVVNBCi0gKi8KLQotdm9pZCBtYWluKHZvaWQpCi17Ci0gICAgY29uc3QgdWludCBzbGlj ZV9pZHggPSBnbF9Xb3JrR3JvdXBJRC55KmdsX051bVdvcmtHcm91cHMueCArIGdsX1dvcmtHcm91 cElELng7Ci0KLSAgICBpZiAoa2V5X2ZyYW1lID09IDAgJiYKLSAgICAgICAgc2xpY2VfY3R4W3Ns aWNlX2lkeF0uc2xpY2VfcmVzZXRfY29udGV4dHMgPT0gZmFsc2UpCi0gICAgICAgIHJldHVybjsK LQotICAgIGNvbnN0IHVpbnQ4X3QgcWlkeCA9IHNsaWNlX2N0eFtzbGljZV9pZHhdLnF1YW50X3Rh YmxlX2lkeFtnbF9Xb3JrR3JvdXBJRC56XTsKLSAgICB1aW50IGNvbnRleHRzID0gY29udGV4dF9j b3VudFtxaWR4XTsKLSAgICB1aW50NjRfdCBzbGljZV9zdGF0ZV9vZmYgPSB1aW50NjRfdChzbGlj ZV9zdGF0ZSkgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsaWNlX2lkeCpwbGFu ZV9zdGF0ZV9zaXplKmNvZGVjX3BsYW5lczsKLQotI2lmZGVmIEdPTE9NQgotICAgIHVpbnQ2NF90 IHN0YXJ0ID0gc2xpY2Vfc3RhdGVfb2ZmICsKLSAgICAgICAgICAgICAgICAgICAgIChnbF9Xb3Jr R3JvdXBJRC56KihwbGFuZV9zdGF0ZV9zaXplL1ZMQ19TVEFURV9TSVpFKSArIGdsX0xvY2FsSW52 b2NhdGlvbklELngpKlZMQ19TVEFURV9TSVpFOwotICAgIGZvciAodWludCB4ID0gZ2xfTG9jYWxJ bnZvY2F0aW9uSUQueDsgeCA8IGNvbnRleHRzOyB4ICs9IGdsX1dvcmtHcm91cFNpemUueCkgewot ICAgICAgICBWbGNTdGF0ZSBzYiA9IFZsY1N0YXRlKHN0YXJ0KTsKLSAgICAgICAgc2IuZHJpZnQg ICAgID0gIGludDE2X3QoMCk7Ci0gICAgICAgIHNiLmVycm9yX3N1bSA9IHVpbnQxNl90KDQpOwot ICAgICAgICBzYi5iaWFzICAgICAgPSAgIGludDhfdCgwKTsKLSAgICAgICAgc2IuY291bnQgICAg ID0gIHVpbnQ4X3QoMSk7Ci0gICAgICAgIHN0YXJ0ICs9IGdsX1dvcmtHcm91cFNpemUueCpWTENf U1RBVEVfU0laRTsKLSAgICB9Ci0jZWxzZQotICAgIHVpbnQ2NF90IHN0YXJ0ID0gc2xpY2Vfc3Rh dGVfb2ZmICsKLSAgICAgICAgICAgICAgICAgICAgIGdsX1dvcmtHcm91cElELnoqcGxhbmVfc3Rh dGVfc2l6ZSArCi0gICAgICAgICAgICAgICAgICAgICAoZ2xfTG9jYWxJbnZvY2F0aW9uSUQueCA8 PCAyIC8qIGR3b3JkcyAqLyk7IC8qIEJ5dGVzICovCi0gICAgdWludCBjb3VudF90b3RhbCA9IGNv bnRleHRzKihDT05URVhUX1NJWkUgLyogYnl0ZXMgKi8gPj4gMiAvKiBkd29yZHMgKi8pOwotICAg IGZvciAodWludCB4ID0gZ2xfTG9jYWxJbnZvY2F0aW9uSUQueDsgeCA8IGNvdW50X3RvdGFsOyB4 ICs9IGdsX1dvcmtHcm91cFNpemUueCkgewotICAgICAgICB1MzJidWYoc3RhcnQpLnYgPSAweDgw ODA4MDgwOwotICAgICAgICBzdGFydCArPSBnbF9Xb3JrR3JvdXBTaXplLngqKENPTlRFWFRfU0la RSA+PiAzIC8qIDEvOHRoIG9mIGNvbnRleHQgKi8pOwotICAgIH0KLSNlbmRpZgotfQotLSAKMi40 OS4xCgoKRnJvbSA5YWQyMzAzMTVjNTkxMWUwNjk2NmVjYWU3NTE3MGExMjY0ODlmYzViIE1vbiBT ZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBKYW1haWthMSA8bHVrYXN6Y3oxOEB3cC5wbD4KRGF0 ZTogV2VkLCAzIFNlcCAyMDI1IDEzOjQ2OjM5ICswMDAwClN1YmplY3Q6IFtQQVRDSCAxMDUvMTE4 XSBDaGFuZ2luZyB2dWxrYW4gZmlsZSBkaXJlY3RvcnkKCi0tLQogbGliYXZjb2RlYy92dWxrYW4v ZmZ2MV92bGMuY29tcCB8IDE1OSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogMSBm aWxlIGNoYW5nZWQsIDE1OSBkZWxldGlvbnMoLSkKIGRlbGV0ZSBtb2RlIDEwMDY0NCBsaWJhdmNv ZGVjL3Z1bGthbi9mZnYxX3ZsYy5jb21wCgpkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy92dWxrYW4v ZmZ2MV92bGMuY29tcCBiL2xpYmF2Y29kZWMvdnVsa2FuL2ZmdjFfdmxjLmNvbXAKZGVsZXRlZCBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyYTZjYTlmMzcuLjAwMDAwMDAwMDAKLS0tIGEvbGliYXZj b2RlYy92dWxrYW4vZmZ2MV92bGMuY29tcAorKysgL2Rldi9udWxsCkBAIC0xLDE1OSArMCwwIEBA Ci0vKgotICogRkZ2MSBjb2RlYwotICoKLSAqIENvcHlyaWdodCAoYykgMjAyNCBMeW5uZSA8ZGV2 QGx5bm5lLmVlPgotICoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KLSAqCi0gKiBG Rm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0g KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi bGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBp biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdB UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5U QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V Ci0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoK LSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu ZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUg dG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0 cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKLSAqLwotCi0jZGVm aW5lIFZMQ19TVEFURV9TSVpFIDgKLWxheW91dChidWZmZXJfcmVmZXJlbmNlLCBidWZmZXJfcmVm ZXJlbmNlX2FsaWduID0gVkxDX1NUQVRFX1NJWkUpIGJ1ZmZlciBWbGNTdGF0ZSB7Ci0gICAgdWlu dDMyX3QgZXJyb3Jfc3VtOwotICAgIGludDE2X3QgIGRyaWZ0OwotICAgIGludDhfdCAgIGJpYXM7 Ci0gICAgdWludDhfdCAgY291bnQ7Ci19OwotCi12b2lkIHVwZGF0ZV92bGNfc3RhdGUoaW5vdXQg VmxjU3RhdGUgc3RhdGUsIGNvbnN0IGludCB2KQotewotICAgIGludCBkcmlmdCA9IHN0YXRlLmRy aWZ0OwotICAgIGludCBjb3VudCA9IHN0YXRlLmNvdW50OwotICAgIGludCBiaWFzID0gc3RhdGUu YmlhczsKLSAgICBzdGF0ZS5lcnJvcl9zdW0gKz0gdWludDE2X3QoYWJzKHYpKTsKLSAgICBkcmlm dCAgICAgICAgICAgKz0gdjsKLQotICAgIGlmIChjb3VudCA9PSAxMjgpIHsgLy8gRklYTUU6IHZh cmlhYmxlCi0gICAgICAgIGNvdW50ICAgICAgICAgICA+Pj0gMTsKLSAgICAgICAgZHJpZnQgICAg ICAgICAgID4+PSAxOwotICAgICAgICBzdGF0ZS5lcnJvcl9zdW0gPj49IDE7Ci0gICAgfQotICAg IGNvdW50Kys7Ci0KLSAgICBpZiAoZHJpZnQgPD0gLWNvdW50KSB7Ci0gICAgICAgIGJpYXMgPSBt YXgoYmlhcyAtIDEsIC0xMjgpOwotICAgICAgICBkcmlmdCA9IG1heChkcmlmdCArIGNvdW50LCAt Y291bnQgKyAxKTsKLSAgICB9IGVsc2UgaWYgKGRyaWZ0ID4gMCkgewotICAgICAgICBiaWFzID0g bWluKGJpYXMgKyAxLCAxMjcpOwotICAgICAgICBkcmlmdCA9IG1pbihkcmlmdCAtIGNvdW50LCAw KTsKLSAgICB9Ci0KLSAgICBzdGF0ZS5iaWFzID0gaW50OF90KGJpYXMpOwotICAgIHN0YXRlLmRy aWZ0ID0gaW50MTZfdChkcmlmdCk7Ci0gICAgc3RhdGUuY291bnQgPSB1aW50OF90KGNvdW50KTsK LX0KLQotc3RydWN0IFN5bWJvbCB7Ci0gICAgdWludDMyX3QgYml0czsKLSAgICB1aW50MzJfdCB2 YWw7Ci19OwotCi1TeW1ib2wgc2V0X3VyX2dvbG9tYihpbnQgaSwgaW50IGssIGludCBsaW1pdCwg aW50IGVzY19sZW4pCi17Ci0gICAgaW50IGU7Ci0gICAgU3ltYm9sIHN5bTsKLQotI2lmZGVmIERF QlVHCi0gICAgaWYgKGkgPCAwKQotICAgICAgICBkZWJ1Z1ByaW50ZkVYVCgiRXJyb3I6IGkgaXMg emVybyEiKTsKLSNlbmRpZgotCi0gICAgZSA9IGkgPj4gazsKLSAgICBpZiAoZSA8IGxpbWl0KSB7 Ci0gICAgICAgIHN5bS5iaXRzID0gZSArIGsgKyAxOwotICAgICAgICBzeW0udmFsID0gKDEgPDwg aykgKyB6ZXJvX2V4dGVuZChpLCBrKTsKLSAgICB9IGVsc2UgewotICAgICAgICBzeW0uYml0cyA9 IGxpbWl0ICsgZXNjX2xlbjsKLSAgICAgICAgc3ltLnZhbCA9IGkgLSBsaW1pdCArIDE7Ci0gICAg fQotCi0gICAgcmV0dXJuIHN5bTsKLX0KLQotLyoqCi0gKiB3cml0ZSBzaWduZWQgZ29sb21iIHJp Y2UgY29kZSAoZmZ2MSkuCi0gKi8KLVN5bWJvbCBzZXRfc3JfZ29sb21iKGludCBpLCBpbnQgaywg aW50IGxpbWl0LCBpbnQgZXNjX2xlbikKLXsKLSAgICBpbnQgdjsKLQotICAgIHYgID0gLTIgKiBp IC0gMTsKLSAgICB2IF49ICh2ID4+IDMxKTsKLQotICAgIHJldHVybiBzZXRfdXJfZ29sb21iKHYs IGssIGxpbWl0LCBlc2NfbGVuKTsKLX0KLQotU3ltYm9sIGdldF92bGNfc3ltYm9sKGlub3V0IFZs Y1N0YXRlIHN0YXRlLCBpbnQgdiwgaW50IGJpdHMpCi17Ci0gICAgaW50IGksIGssIGNvZGU7Ci0g ICAgU3ltYm9sIHN5bTsKLSAgICB2ID0gZm9sZCh2IC0gaW50KHN0YXRlLmJpYXMpLCBiaXRzKTsK LQotICAgIGkgPSBzdGF0ZS5jb3VudDsKLSAgICBrID0gMDsKLSAgICB3aGlsZSAoaSA8IHN0YXRl LmVycm9yX3N1bSkgeyAvLyBGSVhNRTogb3B0aW1pemUKLSAgICAgICAgaysrOwotICAgICAgICBp ICs9IGk7Ci0gICAgfQotCi0jaWZkZWYgREVCVUcKLSAgICBpZiAoayA+IDE2KQotICAgICAgICBk ZWJ1Z1ByaW50ZkVYVCgiRXJyb3I6IGsgPiAxNiEiKTsKLSNlbmRpZgotCi0gICAgY29kZSA9IHYg XiAoKDIgKiBzdGF0ZS5kcmlmdCArIHN0YXRlLmNvdW50KSA+PiAzMSk7Ci0KLSAgICB1cGRhdGVf dmxjX3N0YXRlKHN0YXRlLCB2KTsKLQotICAgIHJldHVybiBzZXRfc3JfZ29sb21iKGNvZGUsIGss IDEyLCBiaXRzKTsKLX0KLQotdWludCBnZXRfdXJfZ29sb21iKGlub3V0IEdldEJpdENvbnRleHQg Z2IsIGludCBrLCBpbnQgbGltaXQsIGludCBlc2NfbGVuKQotewotICAgIGZvciAodWludCBpID0g MDsgaSA8IDEyOyBpKyspCi0gICAgICAgIGlmIChnZXRfYml0KGdiKSkKLSAgICAgICAgICAgIHJl dHVybiBnZXRfYml0cyhnYiwgaykgKyAoaSA8PCBrKTsKLQotICAgIHJldHVybiBnZXRfYml0cyhn YiwgZXNjX2xlbikgKyAxMTsKLX0KLQotaW50IGdldF9zcl9nb2xvbWIoaW5vdXQgR2V0Qml0Q29u dGV4dCBnYiwgaW50IGssIGludCBsaW1pdCwgaW50IGVzY19sZW4pCi17Ci0gICAgaW50IHYgPSBp bnQoZ2V0X3VyX2dvbG9tYihnYiwgaywgbGltaXQsIGVzY19sZW4pKTsKLSAgICByZXR1cm4gKHYg Pj4gMSkgXiAtKHYgJiAxKTsKLX0KLQotaW50IHJlYWRfdmxjX3N5bWJvbChpbm91dCBHZXRCaXRD b250ZXh0IGdiLCBpbm91dCBWbGNTdGF0ZSBzdGF0ZSwgaW50IGJpdHMpCi17Ci0gICAgaW50IGss IGksIHYsIHJldDsKLQotICAgIGkgPSBzdGF0ZS5jb3VudDsKLSAgICBrID0gMDsKLSAgICB3aGls ZSAoaSA8IHN0YXRlLmVycm9yX3N1bSkgeyAvLyBGSVhNRTogb3B0aW1pemUKLSAgICAgICAgaysr OwotICAgICAgICBpICs9IGk7Ci0gICAgfQotCi0gICAgdiA9IGdldF9zcl9nb2xvbWIoZ2IsIGss IDEyLCBiaXRzKTsKLQotICAgIHYgXj0gKCgyICogc3RhdGUuZHJpZnQgKyBzdGF0ZS5jb3VudCkg Pj4gMzEpOwotCi0gICAgcmV0ID0gZm9sZCh2ICsgc3RhdGUuYmlhcywgYml0cyk7Ci0KLSAgICB1 cGRhdGVfdmxjX3N0YXRlKHN0YXRlLCB2KTsKLQotICAgIHJldHVybiByZXQ7Ci19Ci0tIAoyLjQ5 LjEKCgpGcm9tIDhjNWZmMmRmZWEzNjFiZGE3ODU5YWMyMmEwYzM5YjEwOWNmMjllNjQgTW9uIFNl cCAxNyAwMDowMDowMCAyMDAxCkZyb206IEphbWFpa2ExIDxsdWthc3pjejE4QHdwLnBsPgpEYXRl OiBXZWQsIDMgU2VwIDIwMjUgMTM6NDY6NTcgKzAwMDAKU3ViamVjdDogW1BBVENIIDEwNi8xMThd IENoYW5naW5nIHZ1bGthbiBmaWxlIGRpcmVjdG9yeQoKLS0tCiBsaWJhdmNvZGVjL3Z1bGthbi9w cm9yZXNfcmF3LmNvbXAgfCAzNDcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAxIGZp bGUgY2hhbmdlZCwgMzQ3IGRlbGV0aW9ucygtKQogZGVsZXRlIG1vZGUgMTAwNjQ0IGxpYmF2Y29k ZWMvdnVsa2FuL3Byb3Jlc19yYXcuY29tcAoKZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvdnVsa2Fu L3Byb3Jlc19yYXcuY29tcCBiL2xpYmF2Y29kZWMvdnVsa2FuL3Byb3Jlc19yYXcuY29tcApkZWxl dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODllZWNlM2M3ZS4uMDAwMDAwMDAwMAotLS0gYS9s aWJhdmNvZGVjL3Z1bGthbi9wcm9yZXNfcmF3LmNvbXAKKysrIC9kZXYvbnVsbApAQCAtMSwzNDcg KzAsMCBAQAotLyoKLSAqIFByb1JlcyBSQVcgZGVjb2RlcgotICoKLSAqIENvcHlyaWdodCAoYykg MjAyNSBMeW5uZSA8ZGV2QGx5bm5lLmVlPgotICoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZG bXBlZy4KLSAqCi0gKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1 dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVz c2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNl LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIEZGbXBlZyBp cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0 IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg b2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T RS4gIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y ZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7 IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4s IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBV U0EKLSAqLwotCi0jZGVmaW5lIEkxNih4KSAoaW50MTZfdCh4KSkKLQotI2RlZmluZSBDT01QX0lE IChnbF9Mb2NhbEludm9jYXRpb25JRC56KQotI2RlZmluZSBCTE9DS19JRCAoZ2xfTG9jYWxJbnZv Y2F0aW9uSUQueSkKLSNkZWZpbmUgUk9XX0lEIChnbF9Mb2NhbEludm9jYXRpb25JRC54KQotCi1H ZXRCaXRDb250ZXh0IGdiOwotc2hhcmVkIGZsb2F0IGJ0ZW1wW2dsX1dvcmtHcm91cFNpemUuel1b MTZdWzY0XSA9IHsgfTsKLXNoYXJlZCBmbG9hdCBibG9ja1tnbF9Xb3JrR3JvdXBTaXplLnpdWzE2 XVs2NF07Ci0KLXZvaWQgaWRjdDhfaG9yaXooY29uc3QgdWludCByb3dfaWQpCi17Ci0gICAgZmxv YXQgdDAsIHQxLCB0MiwgdDMsIHQ0LCB0NSwgdDYsIHQ3LCB1ODsKLSAgICBmbG9hdCB1MCwgdTEs IHUyLCB1MywgdTQsIHU1LCB1NiwgdTc7Ci0KLSAgICAvKiBJbnB1dCAqLwotICAgIHQwID0gYmxv Y2tbQ09NUF9JRF1bQkxPQ0tfSURdWzgqcm93X2lkICsgMF07Ci0gICAgdTQgPSBibG9ja1tDT01Q X0lEXVtCTE9DS19JRF1bOCpyb3dfaWQgKyAxXTsKLSAgICB0MiA9IGJsb2NrW0NPTVBfSURdW0JM T0NLX0lEXVs4KnJvd19pZCArIDJdOwotICAgIHU2ID0gYmxvY2tbQ09NUF9JRF1bQkxPQ0tfSURd Wzgqcm93X2lkICsgM107Ci0gICAgdDEgPSBibG9ja1tDT01QX0lEXVtCTE9DS19JRF1bOCpyb3df aWQgKyA0XTsKLSAgICB1NSA9IGJsb2NrW0NPTVBfSURdW0JMT0NLX0lEXVs4KnJvd19pZCArIDVd OwotICAgIHQzID0gYmxvY2tbQ09NUF9JRF1bQkxPQ0tfSURdWzgqcm93X2lkICsgNl07Ci0gICAg dTcgPSBibG9ja1tDT01QX0lEXVtCTE9DS19JRF1bOCpyb3dfaWQgKyA3XTsKLQotICAgIC8qIEVt YmVkZGVkIHNjYWxlZCBpbnZlcnNlIDQtcG9pbnQgVHlwZS1JSSBEQ1QgKi8KLSAgICB1MCA9IHQw ICsgdDE7Ci0gICAgdTEgPSB0MCAtIHQxOwotICAgIHUzID0gdDIgKyB0MzsKLSAgICB1MiA9ICh0 MiAtIHQzKSooMS40MTQyMTM1NjIzNzMwOTUwNDg4MDE2ODg3MjQyMDk3ZikgLSB1MzsKLSAgICB0 MCA9IHUwICsgdTM7Ci0gICAgdDMgPSB1MCAtIHUzOwotICAgIHQxID0gdTEgKyB1MjsKLSAgICB0 MiA9IHUxIC0gdTI7Ci0KLSAgICAvKiBFbWJlZGRlZCBzY2FsZWQgaW52ZXJzZSA0LXBvaW50IFR5 cGUtSVYgRFNUICovCi0gICAgdDUgPSB1NSArIHU2OwotICAgIHQ2ID0gdTUgLSB1NjsKLSAgICB0 NyA9IHU0ICsgdTc7Ci0gICAgdDQgPSB1NCAtIHU3OwotICAgIHU3ID0gdDcgKyB0NTsKLSAgICB1 NSA9ICh0NyAtIHQ1KSooMS40MTQyMTM1NjIzNzMwOTUwNDg4MDE2ODg3MjQyMDk3Zik7Ci0gICAg dTggPSAodDQgKyB0NikqKDEuODQ3NzU5MDY1MDIyNTczNTEyMjU2MzY2Mzc4NzkzNmYpOwotICAg IHU0ID0gdTggLSB0NCooMS4wODIzOTIyMDAyOTIzOTM5Njg3OTk0NDY0MTA3MzI4Zik7Ci0gICAg dTYgPSB1OCAtIHQ2KigyLjYxMzEyNTkyOTc1Mjc1MzA1NTcxMzI4NjM0Njg1NDRmKTsKLSAgICB0 NyA9IHU3OwotICAgIHQ2ID0gdDcgLSB1NjsKLSAgICB0NSA9IHQ2ICsgdTU7Ci0gICAgdDQgPSB0 NSAtIHU0OwotCi0gICAgLyogQnV0dGVyZmxpZXMgKi8KLSAgICB1MCA9IHQwICsgdDc7Ci0gICAg dTcgPSB0MCAtIHQ3OwotICAgIHU2ID0gdDEgKyB0NjsKLSAgICB1MSA9IHQxIC0gdDY7Ci0gICAg dTIgPSB0MiArIHQ1OwotICAgIHU1ID0gdDIgLSB0NTsKLSAgICB1NCA9IHQzICsgdDQ7Ci0gICAg dTMgPSB0MyAtIHQ0OwotCi0gICAgLyogT3V0cHV0ICovCi0gICAgYnRlbXBbQ09NUF9JRF1bQkxP Q0tfSURdWzAqOCArIHJvd19pZF0gPSB1MDsKLSAgICBidGVtcFtDT01QX0lEXVtCTE9DS19JRF1b MSo4ICsgcm93X2lkXSA9IHUxOwotICAgIGJ0ZW1wW0NPTVBfSURdW0JMT0NLX0lEXVsyKjggKyBy b3dfaWRdID0gdTI7Ci0gICAgYnRlbXBbQ09NUF9JRF1bQkxPQ0tfSURdWzMqOCArIHJvd19pZF0g PSB1MzsKLSAgICBidGVtcFtDT01QX0lEXVtCTE9DS19JRF1bNCo4ICsgcm93X2lkXSA9IHU0Owot ICAgIGJ0ZW1wW0NPTVBfSURdW0JMT0NLX0lEXVs1KjggKyByb3dfaWRdID0gdTU7Ci0gICAgYnRl bXBbQ09NUF9JRF1bQkxPQ0tfSURdWzYqOCArIHJvd19pZF0gPSB1NjsKLSAgICBidGVtcFtDT01Q X0lEXVtCTE9DS19JRF1bNyo4ICsgcm93X2lkXSA9IHU3OwotfQotCi12b2lkIGlkY3Q4X3ZlcnQo Y29uc3QgdWludCByb3dfaWQpCi17Ci0gICAgZmxvYXQgdDAsIHQxLCB0MiwgdDMsIHQ0LCB0NSwg dDYsIHQ3LCB1ODsKLSAgICBmbG9hdCB1MCwgdTEsIHUyLCB1MywgdTQsIHU1LCB1NiwgdTc7Ci0K LSAgICAvKiBJbnB1dCAqLwotICAgIHQwID0gYnRlbXBbQ09NUF9JRF1bQkxPQ0tfSURdWzgqcm93 X2lkICsgMF0gKyAwLjVmOyAvLyBOT1RFCi0gICAgdTQgPSBidGVtcFtDT01QX0lEXVtCTE9DS19J RF1bOCpyb3dfaWQgKyAxXTsKLSAgICB0MiA9IGJ0ZW1wW0NPTVBfSURdW0JMT0NLX0lEXVs4KnJv d19pZCArIDJdOwotICAgIHU2ID0gYnRlbXBbQ09NUF9JRF1bQkxPQ0tfSURdWzgqcm93X2lkICsg M107Ci0gICAgdDEgPSBidGVtcFtDT01QX0lEXVtCTE9DS19JRF1bOCpyb3dfaWQgKyA0XTsKLSAg ICB1NSA9IGJ0ZW1wW0NPTVBfSURdW0JMT0NLX0lEXVs4KnJvd19pZCArIDVdOwotICAgIHQzID0g YnRlbXBbQ09NUF9JRF1bQkxPQ0tfSURdWzgqcm93X2lkICsgNl07Ci0gICAgdTcgPSBidGVtcFtD T01QX0lEXVtCTE9DS19JRF1bOCpyb3dfaWQgKyA3XTsKLQotICAgIC8qIEVtYmVkZGVkIHNjYWxl ZCBpbnZlcnNlIDQtcG9pbnQgVHlwZS1JSSBEQ1QgKi8KLSAgICB1MCA9IHQwICsgdDE7Ci0gICAg dTEgPSB0MCAtIHQxOwotICAgIHUzID0gdDIgKyB0MzsKLSAgICB1MiA9ICh0MiAtIHQzKSooMS40 MTQyMTM1NjIzNzMwOTUwNDg4MDE2ODg3MjQyMDk3ZikgLSB1MzsKLSAgICB0MCA9IHUwICsgdTM7 Ci0gICAgdDMgPSB1MCAtIHUzOwotICAgIHQxID0gdTEgKyB1MjsKLSAgICB0MiA9IHUxIC0gdTI7 Ci0KLSAgICAvKiBFbWJlZGRlZCBzY2FsZWQgaW52ZXJzZSA0LXBvaW50IFR5cGUtSVYgRFNUICov Ci0gICAgdDUgPSB1NSArIHU2OwotICAgIHQ2ID0gdTUgLSB1NjsKLSAgICB0NyA9IHU0ICsgdTc7 Ci0gICAgdDQgPSB1NCAtIHU3OwotICAgIHU3ID0gdDcgKyB0NTsKLSAgICB1NSA9ICh0NyAtIHQ1 KSooMS40MTQyMTM1NjIzNzMwOTUwNDg4MDE2ODg3MjQyMDk3Zik7Ci0gICAgdTggPSAodDQgKyB0 NikqKDEuODQ3NzU5MDY1MDIyNTczNTEyMjU2MzY2Mzc4NzkzNmYpOwotICAgIHU0ID0gdTggLSB0 NCooMS4wODIzOTIyMDAyOTIzOTM5Njg3OTk0NDY0MTA3MzI4Zik7Ci0gICAgdTYgPSB1OCAtIHQ2 KigyLjYxMzEyNTkyOTc1Mjc1MzA1NTcxMzI4NjM0Njg1NDRmKTsKLSAgICB0NyA9IHU3OwotICAg IHQ2ID0gdDcgLSB1NjsKLSAgICB0NSA9IHQ2ICsgdTU7Ci0gICAgdDQgPSB0NSAtIHU0OwotCi0g ICAgLyogQnV0dGVyZmxpZXMgKi8KLSAgICB1MCA9IHQwICsgdDc7Ci0gICAgdTcgPSB0MCAtIHQ3 OwotICAgIHU2ID0gdDEgKyB0NjsKLSAgICB1MSA9IHQxIC0gdDY7Ci0gICAgdTIgPSB0MiArIHQ1 OwotICAgIHU1ID0gdDIgLSB0NTsKLSAgICB1NCA9IHQzICsgdDQ7Ci0gICAgdTMgPSB0MyAtIHQ0 OwotCi0gICAgLyogT3V0cHV0ICovCi0gICAgYmxvY2tbQ09NUF9JRF1bQkxPQ0tfSURdWzAqOCAr IHJvd19pZF0gPSB1MDsKLSAgICBibG9ja1tDT01QX0lEXVtCTE9DS19JRF1bMSo4ICsgcm93X2lk XSA9IHUxOwotICAgIGJsb2NrW0NPTVBfSURdW0JMT0NLX0lEXVsyKjggKyByb3dfaWRdID0gdTI7 Ci0gICAgYmxvY2tbQ09NUF9JRF1bQkxPQ0tfSURdWzMqOCArIHJvd19pZF0gPSB1MzsKLSAgICBi bG9ja1tDT01QX0lEXVtCTE9DS19JRF1bNCo4ICsgcm93X2lkXSA9IHU0OwotICAgIGJsb2NrW0NP TVBfSURdW0JMT0NLX0lEXVs1KjggKyByb3dfaWRdID0gdTU7Ci0gICAgYmxvY2tbQ09NUF9JRF1b QkxPQ0tfSURdWzYqOCArIHJvd19pZF0gPSB1NjsKLSAgICBibG9ja1tDT01QX0lEXVtCTE9DS19J RF1bNyo4ICsgcm93X2lkXSA9IHU3OwotfQotCi1pbnQxNl90IGdldF92YWx1ZShpbnQxNl90IGNv ZGVib29rKQotewotICAgIGNvbnN0IGludDE2X3Qgc3dpdGNoX2JpdHMgPSBjb2RlYm9vayA+PiA4 OwotICAgIGNvbnN0IGludDE2X3QgcmljZV9vcmRlciAgPSBjb2RlYm9vayAmIEkxNigweGYpOwot ICAgIGNvbnN0IGludDE2X3QgZXhwX29yZGVyICAgPSAoY29kZWJvb2sgPj4gNCkgJiBJMTYoMHhm KTsKLQotICAgIHVpbnQzMl90IGIgPSBzaG93X2JpdHMoZ2IsIDMyKTsKLSAgICBpZiAoZXhwZWN0 RVhUKGIgPT0gMCwgZmFsc2UpKQotICAgICAgICByZXR1cm4gSTE2KDApOwotICAgIGludDE2X3Qg cSA9IEkxNigzMSkgLSBJMTYoZmluZE1TQihiKSk7Ci0KLSAgICBpZiAoKGIgJiAweDgwMDAwMDAw KSAhPSAwKSB7Ci0gICAgICAgIHNraXBfYml0cyhnYiwgMSArIHJpY2Vfb3JkZXIpOwotICAgICAg ICByZXR1cm4gSTE2KChiICYgMHg3RkZGRkZGRikgPj4gKDMxIC0gcmljZV9vcmRlcikpOwotICAg IH0KLQotICAgIGlmIChxIDw9IHN3aXRjaF9iaXRzKSB7Ci0gICAgICAgIHNraXBfYml0cyhnYiwg cSArIHJpY2Vfb3JkZXIgKyAxKTsKLSAgICAgICAgcmV0dXJuIEkxNigocSA8PCByaWNlX29yZGVy KSArCi0gICAgICAgICAgICAgICAgICAgKCgoYiA8PCAocSArIDEpKSA+PiAxKSA+PiAoMzEgLSBy aWNlX29yZGVyKSkpOwotICAgIH0KLQotICAgIGludDE2X3QgYml0cyA9IGV4cF9vcmRlciArIChx IDw8IDEpIC0gc3dpdGNoX2JpdHM7Ci0gICAgc2tpcF9iaXRzKGdiLCBiaXRzKTsKLSAgICByZXR1 cm4gSTE2KChiID4+ICgzMiAtIGJpdHMpKSArCi0gICAgICAgICAgICAgICAoKHN3aXRjaF9iaXRz ICsgMSkgPDwgcmljZV9vcmRlcikgLQotICAgICAgICAgICAgICAgKDEgPDwgZXhwX29yZGVyKSk7 Ci19Ci0KLSNkZWZpbmUgVE9EQ0NPREVCT09LKHgpICgoeCArIDEpID4+IDEpCi0KLXZvaWQgcmVh ZF9kY192YWxzKGNvbnN0IHVpbnQgbmJfYmxvY2tzKQotewotICAgIGludDE2X3QgZGMsIGRjX2Fk ZDsKLSAgICBpbnQxNl90IHByZXZfZGMgPSBJMTYoMCksIHNpZ24gPSBJMTYoMCk7Ci0KLSAgICAv KiBTcGVjaWFsIGhhbmRsaW5nIGZvciBmaXJzdCBibG9jayAqLwotICAgIGRjID0gZ2V0X3ZhbHVl KEkxNig3MDApKTsKLSAgICBwcmV2X2RjID0gKGRjID4+IDEpIF4gLShkYyAmIEkxNigxKSk7Ci0g ICAgYnRlbXBbQ09NUF9JRF1bMF1bMF0gPSBwcmV2X2RjOwotCi0gICAgZm9yICh1aW50IG4gPSAx OyBuIDwgbmJfYmxvY2tzOyBuKyspIHsKLSAgICAgICAgaWYgKGV4cGVjdEVYVChsZWZ0X2JpdHMo Z2IpIDw9IDAsIGZhbHNlKSkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIHVpbnQ4X3Qg ZGNfY29kZWJvb2s7Ci0gICAgICAgIGlmICgobiAmIDE1KSA9PSAxKQotICAgICAgICAgICAgZGNf Y29kZWJvb2sgPSB1aW50OF90KDEwMCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGRjX2Nv ZGVib29rID0gZGNfY2JbbWluKFRPRENDT0RFQk9PSyhkYyksIDEzIC0gMSldOwotCi0gICAgICAg IGRjID0gZ2V0X3ZhbHVlKGRjX2NvZGVib29rKTsKLQotICAgICAgICBzaWduID0gc2lnbiBeIGRj ICYgaW50MTZfdCgxKTsKLSAgICAgICAgZGNfYWRkID0gKC1zaWduIF4gSTE2KFRPRENDT0RFQk9P SyhkYykpKSArIHNpZ247Ci0gICAgICAgIHNpZ24gPSBJMTYoZGNfYWRkIDwgMCk7Ci0gICAgICAg IHByZXZfZGMgKz0gZGNfYWRkOwotCi0gICAgICAgIGJ0ZW1wW0NPTVBfSURdW25dWzBdID0gcHJl dl9kYzsKLSAgICB9Ci19Ci0KLXZvaWQgcmVhZF9hY192YWxzKGNvbnN0IHVpbnQgbmJfYmxvY2tz KQotewotICAgIGNvbnN0IHVpbnQgbmJfY29kZXMgPSBuYl9ibG9ja3MgPDwgNjsKLSAgICBjb25z dCB1aW50IGxvZzJfbmJfYmxvY2tzID0gZmluZE1TQihuYl9ibG9ja3MpOwotICAgIGNvbnN0IHVp bnQgYmxvY2tfbWFzayA9ICgxIDw8IGxvZzJfbmJfYmxvY2tzKSAtIDE7Ci0KLSAgICBpbnQxNl90 IGFjLCBybiwgbG47Ci0gICAgaW50MTZfdCBhY19jb2RlYm9vayA9IEkxNig0OSk7Ci0gICAgaW50 MTZfdCBybl9jb2RlYm9vayA9IEkxNiggMCk7Ci0gICAgaW50MTZfdCBsbl9jb2RlYm9vayA9IEkx Nig2Nik7Ci0gICAgaW50MTZfdCBzaWduOwotICAgIGludDE2X3QgdmFsOwotCi0gICAgZm9yICh1 aW50IG4gPSBuYl9ibG9ja3M7IG4gPD0gbmJfY29kZXM7KSB7Ci0gICAgICAgIGlmIChleHBlY3RF WFQobGVmdF9iaXRzKGdiKSA8PSAwLCBmYWxzZSkpCi0gICAgICAgICAgICBicmVhazsKLQotICAg ICAgICBsbiA9IGdldF92YWx1ZShsbl9jb2RlYm9vayk7Ci0gICAgICAgIGZvciAodWludCBpID0g MDsgaSA8IGxuOyBpKyspIHsKLSAgICAgICAgICAgIGlmIChleHBlY3RFWFQobGVmdF9iaXRzKGdi KSA8PSAwLCBmYWxzZSkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGlm IChleHBlY3RFWFQobiA+PSBuYl9jb2RlcywgZmFsc2UpKQotICAgICAgICAgICAgICAgIGJyZWFr OwotCi0gICAgICAgICAgICBhYyA9IGdldF92YWx1ZShhY19jb2RlYm9vayk7Ci0gICAgICAgICAg ICBhY19jb2RlYm9vayA9IGFjX2NiW21pbihhYywgOTUgLSAxKV07Ci0gICAgICAgICAgICBzaWdu ID0gLWludDE2X3QoZ2V0X2JpdChnYikpOwotCi0gICAgICAgICAgICB2YWwgPSAoKGFjICsgSTE2 KDEpKSBeIHNpZ24pIC0gc2lnbjsKLSAgICAgICAgICAgIGJ0ZW1wW0NPTVBfSURdW24gJiBibG9j a19tYXNrXVtuID4+IGxvZzJfbmJfYmxvY2tzXSA9IHZhbDsKLQotICAgICAgICAgICAgbisrOwot ICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGV4cGVjdEVYVChuID49IG5iX2NvZGVzLCBmYWxzZSkp Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBybiA9IGdldF92YWx1ZShybl9jb2RlYm9v ayk7Ci0gICAgICAgIHJuX2NvZGVib29rID0gcm5fY2JbbWluKHJuLCAyOCAtIDEpXTsKLQotICAg ICAgICBuICs9IHJuICsgMTsKLSAgICAgICAgaWYgKGV4cGVjdEVYVChuID49IG5iX2NvZGVzLCBm YWxzZSkpCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBpZiAoZXhwZWN0RVhUKGxlZnRf Yml0cyhnYikgPD0gMCwgZmFsc2UpKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgYWMg PSBnZXRfdmFsdWUoYWNfY29kZWJvb2spOwotICAgICAgICBzaWduID0gLWludDE2X3QoZ2V0X2Jp dChnYikpOwotCi0gICAgICAgIHZhbCA9ICgoYWMgKyBJMTYoMSkpIF4gc2lnbikgLSBzaWduOwot ICAgICAgICBidGVtcFtDT01QX0lEXVtuICYgYmxvY2tfbWFza11bbiA+PiBsb2cyX25iX2Jsb2Nr c10gPSB2YWw7Ci0KLSAgICAgICAgYWNfY29kZWJvb2sgPSBhY19jYlttaW4oYWMsIDk1IC0gMSld OwotICAgICAgICBsbl9jb2RlYm9vayA9IGxuX2NiW21pbihhYywgMTUgLSAxKV07Ci0KLSAgICAg ICAgbisrOwotICAgIH0KLX0KLQotdm9pZCBtYWluKHZvaWQpCi17Ci0gICAgY29uc3QgdWludCB0 aWxlX2lkeCA9IGdsX1dvcmtHcm91cElELnkqZ2xfTnVtV29ya0dyb3Vwcy54ICsgZ2xfV29ya0dy b3VwSUQueDsKLSAgICBUaWxlRGF0YSB0ZCA9IHRpbGVfZGF0YVt0aWxlX2lkeF07Ci0KLSAgICBp ZiAoZXhwZWN0RVhUKHRkLnBvcy54ID49IGZyYW1lX3NpemUueCwgZmFsc2UpKQotICAgICAgICBy ZXR1cm47Ci0KLSAgICB1aW50NjRfdCBwa3Rfb2Zmc2V0ID0gdWludDY0X3QocGt0X2RhdGEpICsg dGQub2Zmc2V0OwotICAgIHU4dmVjMmJ1ZiBoZHJfZGF0YSA9IHU4dmVjMmJ1Zihwa3Rfb2Zmc2V0 KTsKLSAgICBmbG9hdCBxc2NhbGUgPSBmbG9hdChwYWNrMTYoaGRyX2RhdGFbMF0udi55eCkpIC8g Mi4wZjsKLQotICAgIGl2ZWM0IHNpemUgPSBpdmVjNCh0ZC5zaXplLAotICAgICAgICAgICAgICAg ICAgICAgICBwYWNrMTYoaGRyX2RhdGFbMl0udi55eCksCi0gICAgICAgICAgICAgICAgICAgICAg IHBhY2sxNihoZHJfZGF0YVsxXS52Lnl4KSwKLSAgICAgICAgICAgICAgICAgICAgICAgcGFjazE2 KGhkcl9kYXRhWzNdLnYueXgpKTsKLSAgICBzaXplWzBdID0gc2l6ZVswXSAtIHNpemVbMV0gLSBz aXplWzJdIC0gc2l6ZVszXSAtIDg7Ci0gICAgaWYgKGV4cGVjdEVYVChzaXplWzBdIDwgMCwgZmFs c2UpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBjb25zdCBpdmVjMiBvZmZzID0gdGQucG9zICsg aXZlYzIoQ09NUF9JRCAmIDEsIENPTVBfSUQgPj4gMSk7Ci0gICAgY29uc3QgdWludCB3ID0gbWlu KHRpbGVfc2l6ZS54LCBmcmFtZV9zaXplLnggLSB0ZC5wb3MueCkgLyAyOwotICAgIGNvbnN0IHVp bnQgbmJfYmxvY2tzID0gdyAvIDg7Ci0KLSAgICBjb25zdCBpdmVjNCBjb21wX29mZnNldCA9IGl2 ZWM0KHNpemVbMl0gKyBzaXplWzFdICsgc2l6ZVszXSwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHNpemVbMl0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZVsyXSArIHNpemVb MV0pOwotCi0gICAgaWYgKEJMT0NLX0lEID09IDAgJiYgUk9XX0lEID09IDApIHsKLSAgICAgICAg aW5pdF9nZXRfYml0cyhnYiwgdThidWYocGt0X29mZnNldCArIDggKyBjb21wX29mZnNldFtDT01Q X0lEXSksCi0gICAgICAgICAgICAgICAgICAgICAgc2l6ZVtDT01QX0lEXSk7Ci0gICAgICAgIHJl YWRfZGNfdmFscyhuYl9ibG9ja3MpOwotICAgICAgICByZWFkX2FjX3ZhbHMobmJfYmxvY2tzKTsK LSAgICB9Ci0KLSAgICBiYXJyaWVyKCk7Ci0KLSAgICBbW3Vucm9sbF1dCi0gICAgZm9yICh1aW50 IGkgPSBnbF9Mb2NhbEludm9jYXRpb25JRC54OyBpIDwgNjQ7IGkgKz0gZ2xfV29ya0dyb3VwU2l6 ZS54KQotICAgICAgICBibG9ja1tDT01QX0lEXVtCTE9DS19JRF1baV0gPSAoYnRlbXBbQ09NUF9J RF1bQkxPQ0tfSURdW3NjYW5baV1dIC8gMTYzODQuMCkgKgotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoZmxvYXQocW1hdFtpXSkgLyAyOTUuMCkgKgotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpZGN0Xzh4OF9zY2FsZXNbaV0gKiBxc2NhbGU7Ci0K LSAgICBiYXJyaWVyKCk7Ci0KLSNpZmRlZiBQQVJBTExFTF9ST1dTCi0gICAgaWRjdDhfaG9yaXoo Uk9XX0lEKTsKLQotICAgIGJhcnJpZXIoKTsKLQotICAgIGlkY3Q4X3ZlcnQoUk9XX0lEKTsKLSNl bHNlCi0gICAgZm9yICh1aW50IGogPSAwOyBqIDwgODsgaisrKQotICAgICAgICBpZGN0OF9ob3Jp eihqKTsKLQotICAgIGJhcnJpZXIoKTsKLQotICAgIGZvciAodWludCBqID0gMDsgaiA8IDg7IGor KykKLSAgICAgICAgaWRjdDhfdmVydChqKTsKLSNlbmRpZgotCi0gICAgYmFycmllcigpOwotCi0g ICAgW1t1bnJvbGxdXQotICAgIGZvciAodWludCBpID0gZ2xfTG9jYWxJbnZvY2F0aW9uSUQueDsg aSA8IDY0OyBpICs9IGdsX1dvcmtHcm91cFNpemUueCkKLSAgICAgICAgIGltYWdlU3RvcmUoZHN0 LAotICAgICAgICAgICAgICAgICAgICBvZmZzICsgMippdmVjMihCTE9DS19JRCo4ICsgKGkgJiA3 KSwgaSA+PiAzKSwKLSAgICAgICAgICAgICAgICAgICAgdmVjNChibG9ja1tDT01QX0lEXVtCTE9D S19JRF1baV0pKTsKLX0KLS0gCjIuNDkuMQoKCkZyb20gMTk2OGFkMGNmY2NkM2MwOGVlOWVmNTkx ZWI2MGEwNGUyZWY4ZTUwMyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKRnJvbTogSmFtYWlrYTEg PGx1a2FzemN6MThAd3AucGw+CkRhdGU6IFdlZCwgMyBTZXAgMjAyNSAxMzo0NzowNyArMDAwMApT dWJqZWN0OiBbUEFUQ0ggMTA3LzExOF0gQ2hhbmdpbmcgdnVsa2FuIGZpbGUgZGlyZWN0b3J5Cgot LS0KIGxpYmF2Y29kZWMvdnVsa2FuL3JhbmdlY29kZXIuY29tcCB8IDI0MSAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAyNDEgZGVsZXRpb25zKC0pCiBkZWxl dGUgbW9kZSAxMDA2NDQgbGliYXZjb2RlYy92dWxrYW4vcmFuZ2Vjb2Rlci5jb21wCgpkaWZmIC0t Z2l0IGEvbGliYXZjb2RlYy92dWxrYW4vcmFuZ2Vjb2Rlci5jb21wIGIvbGliYXZjb2RlYy92dWxr YW4vcmFuZ2Vjb2Rlci5jb21wCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNmI2YzA0 OTBmLi4wMDAwMDAwMDAwCi0tLSBhL2xpYmF2Y29kZWMvdnVsa2FuL3JhbmdlY29kZXIuY29tcAor KysgL2Rldi9udWxsCkBAIC0xLDI0MSArMCwwIEBACi0vKgotICogRkZ2MSBjb2RlYwotICoKLSAq IENvcHlyaWdodCAoYykgMjAyNCBMeW5uZSA8ZGV2QGx5bm5lLmVlPgotICoKLSAqIFRoaXMgZmls ZSBpcyBwYXJ0IG9mIEZGbXBlZy4KLSAqCi0gKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91 IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hl ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMi4x IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgot ICoKLSAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg dXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt cGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl ZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxv bmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZv dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rvbiwg TUEgMDIxMTAtMTMwMSBVU0EKLSAqLwotCi1zdHJ1Y3QgUmFuZ2VDb2RlciB7Ci0gICAgdWludDY0 X3QgYnl0ZXN0cmVhbV9zdGFydDsKLSAgICB1aW50NjRfdCBieXRlc3RyZWFtOwotICAgIHVpbnQ2 NF90IGJ5dGVzdHJlYW1fZW5kOwotCi0gICAgaW50IGxvdzsKLSAgICBpbnQgcmFuZ2U7Ci0gICAg dWludDE2X3Qgb3V0c3RhbmRpbmdfY291bnQ7Ci0gICAgdWludDhfdCBvdXRzdGFuZGluZ19ieXRl OwotfTsKLQotI2lmZGVmIEZVTExfUkVOT1JNCi0vKiBGdWxsIHJlbm9ybSB2ZXJzaW9uIHRoYXQg Y2FuIGhhbmRsZSBvdXRzdGFuZGluZ19ieXRlID09IDB4RkYgKi8KLXZvaWQgcmVub3JtX2VuY29k ZXIoaW5vdXQgUmFuZ2VDb2RlciBjKQotewotICAgIGludCBic19jbnQgPSAwOwotICAgIHU4YnVm IGJ5dGVzdHJlYW0gPSB1OGJ1ZihjLmJ5dGVzdHJlYW0pOwotCi0gICAgaWYgKGMub3V0c3RhbmRp bmdfYnl0ZSA9PSAweEZGKSB7Ci0gICAgICAgIGMub3V0c3RhbmRpbmdfYnl0ZSA9IHVpbnQ4X3Qo Yy5sb3cgPj4gOCk7Ci0gICAgfSBlbHNlIGlmIChjLmxvdyA8PSAweEZGMDApIHsKLSAgICAgICAg Ynl0ZXN0cmVhbVtic19jbnQrK10udiA9IGMub3V0c3RhbmRpbmdfYnl0ZTsKLSAgICAgICAgdWlu dDE2X3QgY250ID0gYy5vdXRzdGFuZGluZ19jb3VudDsKLSAgICAgICAgZm9yICg7IGNudCA+IDA7 IGNudC0tKQotICAgICAgICAgICAgYnl0ZXN0cmVhbVtic19jbnQrK10udiA9IHVpbnQ4X3QoMHhG Rik7Ci0gICAgICAgIGMub3V0c3RhbmRpbmdfY291bnQgPSB1aW50MTZfdCgwKTsKLSAgICAgICAg Yy5vdXRzdGFuZGluZ19ieXRlID0gdWludDhfdChjLmxvdyA+PiA4KTsKLSAgICB9IGVsc2UgaWYg KGMubG93ID49IDB4MTAwMDApIHsKLSAgICAgICAgYnl0ZXN0cmVhbVtic19jbnQrK10udiA9IGMu b3V0c3RhbmRpbmdfYnl0ZSArIHVpbnQ4X3QoMSk7Ci0gICAgICAgIHVpbnQxNl90IGNudCA9IGMu b3V0c3RhbmRpbmdfY291bnQ7Ci0gICAgICAgIGZvciAoOyBjbnQgPiAwOyBjbnQtLSkKLSAgICAg ICAgICAgIGJ5dGVzdHJlYW1bYnNfY250KytdLnYgPSB1aW50OF90KDB4MDApOwotICAgICAgICBj Lm91dHN0YW5kaW5nX2NvdW50ID0gdWludDE2X3QoMCk7Ci0gICAgICAgIGMub3V0c3RhbmRpbmdf Ynl0ZSA9IHVpbnQ4X3QoYml0ZmllbGRFeHRyYWN0KGMubG93LCA4LCA4KSk7Ci0gICAgfSBlbHNl IHsKLSAgICAgICAgYy5vdXRzdGFuZGluZ19jb3VudCsrOwotICAgIH0KLQotICAgIGMuYnl0ZXN0 cmVhbSArPSBic19jbnQ7Ci0gICAgYy5yYW5nZSA8PD0gODsKLSAgICBjLmxvdyA9IGJpdGZpZWxk SW5zZXJ0KDAsIGMubG93LCA4LCA4KTsKLX0KLQotI2Vsc2UKLQotLyogQ2Fubm90IGRlYWwgd2l0 aCBvdXRzdGFuZGluZ19ieXRlID09IC0xIGluIHRoZSBuYW1lIG9mIHNwZWVkICovCi12b2lkIHJl bm9ybV9lbmNvZGVyKGlub3V0IFJhbmdlQ29kZXIgYykKLXsKLSAgICB1aW50MTZfdCBvYyA9IGMu b3V0c3RhbmRpbmdfY291bnQgKyB1aW50MTZfdCgxKTsKLSAgICBpbnQgbG93ID0gYy5sb3c7Ci0K LSAgICBjLnJhbmdlIDw8PSA4OwotICAgIGMubG93ID0gYml0ZmllbGRJbnNlcnQoMCwgbG93LCA4 LCA4KTsKLQotICAgIGlmIChsb3cgPiAweEZGMDAgJiYgbG93IDwgMHgxMDAwMCkgewotICAgICAg ICBjLm91dHN0YW5kaW5nX2NvdW50ID0gb2M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg ICB1OGJ1ZiBicyA9IHU4YnVmKGMuYnl0ZXN0cmVhbSk7Ci0gICAgdWludDhfdCBvdXRzdGFuZGlu Z19ieXRlID0gYy5vdXRzdGFuZGluZ19ieXRlOwotCi0gICAgYy5ieXRlc3RyZWFtICAgICAgICA9 IHVpbnQ2NF90KGJzKSArIG9jOwotICAgIGMub3V0c3RhbmRpbmdfY291bnQgPSB1aW50MTZfdCgw KTsKLSAgICBjLm91dHN0YW5kaW5nX2J5dGUgID0gdWludDhfdChsb3cgPj4gOCk7Ci0KLSAgICB1 aW50OF90IG9icyA9IHVpbnQ4X3QobG93ID4gMHhGRjAwKTsKLSAgICB1aW50OF90IGZpbGwgPSBv YnMgLSB1aW50OF90KDEpOyAvKiB1bnNpZ25lZCB1bmRlcmZsb3cgKi8KLQotICAgIGJzWzBdLnYg PSBvdXRzdGFuZGluZ19ieXRlICsgb2JzOwotICAgIGZvciAoaW50IGkgPSAxOyBpIDwgb2M7IGkr KykKLSAgICAgICAgYnNbaV0udiA9IGZpbGw7Ci19Ci0jZW5kaWYKLQotdm9pZCBwdXRfcmFjX2lu dGVybmFsKGlub3V0IFJhbmdlQ29kZXIgYywgY29uc3QgaW50IHJhbmdlMSwgYm9vbCBiaXQpCi17 Ci0jaWZkZWYgREVCVUcKLSAgICBpZiAocmFuZ2UxID49IGMucmFuZ2UpCi0gICAgICAgIGRlYnVn UHJpbnRmRVhUKCJFcnJvcjogcmFuZ2UxID49IGMucmFuZ2UiKTsKLSAgICBpZiAocmFuZ2UxIDw9 IDApCi0gICAgICAgIGRlYnVnUHJpbnRmRVhUKCJFcnJvcjogcmFuZ2UxIDw9IDAiKTsKLSNlbmRp ZgotCi0gICAgaW50IHJhbmdlZCA9IGMucmFuZ2UgLSByYW5nZTE7Ci0gICAgYy5sb3cgKz0gYml0 ID8gcmFuZ2VkIDogMDsKLSAgICBjLnJhbmdlID0gYml0ID8gcmFuZ2UxIDogcmFuZ2VkOwotCi0g ICAgaWYgKGV4cGVjdEVYVChjLnJhbmdlIDwgMHgxMDAsIGZhbHNlKSkKLSAgICAgICAgcmVub3Jt X2VuY29kZXIoYyk7Ci19Ci0KLXZvaWQgcHV0X3JhY19kaXJlY3QoaW5vdXQgUmFuZ2VDb2RlciBj LCBpbm91dCB1aW50OF90IHN0YXRlLCBib29sIGJpdCkKLXsKLSAgICBwdXRfcmFjX2ludGVybmFs KGMsIChjLnJhbmdlICogc3RhdGUpID4+IDgsIGJpdCk7Ci0gICAgc3RhdGUgPSB6ZXJvX29uZV9z dGF0ZVsodWludChiaXQpIDw8IDgpICsgc3RhdGVdOwotfQotCi12b2lkIHB1dF9yYWMoaW5vdXQg UmFuZ2VDb2RlciBjLCB1aW50NjRfdCBzdGF0ZSwgYm9vbCBiaXQpCi17Ci0gICAgcHV0X3JhY19k aXJlY3QoYywgdThidWYoc3RhdGUpLnYsIGJpdCk7Ci19Ci0KLS8qIEVxdWlwcm9iYWJsZSBiaXQg Ki8KLXZvaWQgcHV0X3JhY19lcXVpKGlub3V0IFJhbmdlQ29kZXIgYywgYm9vbCBiaXQpCi17Ci0g ICAgcHV0X3JhY19pbnRlcm5hbChjLCBjLnJhbmdlID4+IDEsIGJpdCk7Ci19Ci0KLXZvaWQgcHV0 X3JhY190ZXJtaW5hdGUoaW5vdXQgUmFuZ2VDb2RlciBjKQotewotICAgIGludCByYW5nZTEgPSAo Yy5yYW5nZSAqIDEyOSkgPj4gODsKLQotI2lmZGVmIERFQlVHCi0gICAgaWYgKHJhbmdlMSA+PSBj LnJhbmdlKQotICAgICAgICBkZWJ1Z1ByaW50ZkVYVCgiRXJyb3I6IHJhbmdlMSA+PSBjLnJhbmdl Iik7Ci0gICAgaWYgKHJhbmdlMSA8PSAwKQotICAgICAgICBkZWJ1Z1ByaW50ZkVYVCgiRXJyb3I6 IHJhbmdlMSA8PSAwIik7Ci0jZW5kaWYKLQotICAgIGMucmFuZ2UgLT0gcmFuZ2UxOwotICAgIGlm IChleHBlY3RFWFQoYy5yYW5nZSA8IDB4MTAwLCBmYWxzZSkpCi0gICAgICAgIHJlbm9ybV9lbmNv ZGVyKGMpOwotfQotCi0vKiBSZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyB3cml0dGVuLiAqLwot dWludDMyX3QgcmFjX3Rlcm1pbmF0ZShpbm91dCBSYW5nZUNvZGVyIGMpCi17Ci0gICAgcHV0X3Jh Y190ZXJtaW5hdGUoYyk7Ci0gICAgYy5yYW5nZSA9IHVpbnQxNl90KDB4RkYpOwotICAgIGMubG93 ICArPSAweEZGOwotICAgIHJlbm9ybV9lbmNvZGVyKGMpOwotICAgIGMucmFuZ2UgPSB1aW50MTZf dCgweEZGKTsKLSAgICByZW5vcm1fZW5jb2RlcihjKTsKLQotI2lmZGVmIERFQlVHCi0gICAgaWYg KGMubG93ICE9IDApCi0gICAgICAgIGRlYnVnUHJpbnRmRVhUKCJFcnJvcjogYy5sb3cgIT0gMCIp OwotICAgIGlmIChjLnJhbmdlIDwgMHgxMDApCi0gICAgICAgIGRlYnVnUHJpbnRmRVhUKCJFcnJv cjogcmFuZ2UgPCAweDEwMCIpOwotI2VuZGlmCi0KLSAgICByZXR1cm4gdWludDMyX3QodWludDY0 X3QoYy5ieXRlc3RyZWFtKSAtIHVpbnQ2NF90KGMuYnl0ZXN0cmVhbV9zdGFydCkpOwotfQotCi12 b2lkIHJhY19pbml0KG91dCBSYW5nZUNvZGVyIHIsIHU4YnVmIGRhdGEsIHVpbnQgYnVmX3NpemUp Ci17Ci0gICAgci5ieXRlc3RyZWFtX3N0YXJ0ID0gdWludDY0X3QoZGF0YSk7Ci0gICAgci5ieXRl c3RyZWFtID0gdWludDY0X3QoZGF0YSk7Ci0gICAgci5ieXRlc3RyZWFtX2VuZCA9IHVpbnQ2NF90 KGRhdGEpICsgYnVmX3NpemU7Ci0gICAgci5sb3cgPSAwOwotICAgIHIucmFuZ2UgPSAweEZGMDA7 Ci0gICAgci5vdXRzdGFuZGluZ19jb3VudCA9IHVpbnQxNl90KDApOwotICAgIHIub3V0c3RhbmRp bmdfYnl0ZSA9IHVpbnQ4X3QoMHhGRik7Ci19Ci0KLS8qIERlY29kZXIgKi8KLXVpbnQgb3ZlcnJl YWQgPSAwOwotYm9vbCBjb3JydXB0ID0gZmFsc2U7Ci0KLXZvaWQgcmFjX2luaXRfZGVjKG91dCBS YW5nZUNvZGVyIHIsIHU4YnVmIGRhdGEsIHVpbnQgYnVmX3NpemUpCi17Ci0gICAgb3ZlcnJlYWQg PSAwOwotICAgIGNvcnJ1cHQgPSBmYWxzZTsKLQotICAgIC8qIFNraXAgcHJpbWluZyBieXRlcyAq LwotICAgIHJhY19pbml0KHIsIE9GRkJVRih1OGJ1ZiwgZGF0YSwgMiksIGJ1Zl9zaXplIC0gMik7 Ci0KLSAgICB1OHZlYzIgcHJpbWUgPSB1OHZlYzJidWYoZGF0YSkudjsKLSAgICAvKiBTd2l0Y2gg ZW5kaWFubmVzcyBvZiB0aGUgcHJpbWluZyBieXRlcyAqLwotICAgIHIubG93ID0gcGFjazE2KHBy aW1lLnl4KTsKLQotICAgIGlmIChyLmxvdyA+PSAweEZGMDApIHsKLSAgICAgICAgci5sb3cgPSAw eEZGMDA7Ci0gICAgICAgIHIuYnl0ZXN0cmVhbV9lbmQgPSB1aW50NjRfdChkYXRhKSArIDI7Ci0g ICAgfQotfQotCi12b2lkIHJlZmlsbChpbm91dCBSYW5nZUNvZGVyIGMpCi17Ci0gICAgYy5yYW5n ZSA8PD0gODsKLSAgICBjLmxvdyAgIDw8PSA4OwotICAgIGlmIChleHBlY3RFWFQoYy5ieXRlc3Ry ZWFtIDwgYy5ieXRlc3RyZWFtX2VuZCwgZmFsc2UpKSB7Ci0gICAgICAgIGMubG93IHw9IHU4YnVm KGMuYnl0ZXN0cmVhbSkudjsKLSAgICAgICAgYy5ieXRlc3RyZWFtKys7Ci0gICAgfSBlbHNlIHsK LSAgICAgICAgb3ZlcnJlYWQrKzsKLSAgICB9Ci19Ci0KLWJvb2wgZ2V0X3JhY19pbnRlcm5hbChp bm91dCBSYW5nZUNvZGVyIGMsIGNvbnN0IGludCByYW5nZTEpCi17Ci0gICAgaW50IHJhbmdlZCA9 IGMucmFuZ2UgLSByYW5nZTE7Ci0gICAgYm9vbCBiaXQgPSBjLmxvdyA+PSByYW5nZWQ7Ci0gICAg Yy5sb3cgLT0gYml0ID8gcmFuZ2VkIDogMDsKLSAgICBjLnJhbmdlID0gKGJpdCA/IDAgOiByYW5n ZWQpICsgKGJpdCA/IHJhbmdlMSA6IDApOwotCi0gICAgaWYgKGV4cGVjdEVYVChjLnJhbmdlIDwg MHgxMDAsIGZhbHNlKSkKLSAgICAgICAgcmVmaWxsKGMpOwotCi0gICAgcmV0dXJuIGJpdDsKLX0K LQotYm9vbCBnZXRfcmFjX2RpcmVjdChpbm91dCBSYW5nZUNvZGVyIGMsIGlub3V0IHVpbnQ4X3Qg c3RhdGUpCi17Ci0gICAgYm9vbCBiaXQgPSBnZXRfcmFjX2ludGVybmFsKGMsIGMucmFuZ2UgKiBz dGF0ZSA+PiA4KTsKLSAgICBzdGF0ZSA9IHplcm9fb25lX3N0YXRlW3N0YXRlICsgKGJpdCA/IDI1 NiA6IDApXTsKLSAgICByZXR1cm4gYml0OwotfQotCi1ib29sIGdldF9yYWMoaW5vdXQgUmFuZ2VD b2RlciBjLCB1aW50NjRfdCBzdGF0ZSkKLXsKLSAgICByZXR1cm4gZ2V0X3JhY19kaXJlY3QoYywg dThidWYoc3RhdGUpLnYpOwotfQotCi1ib29sIGdldF9yYWNfZXF1aShpbm91dCBSYW5nZUNvZGVy IGMpCi17Ci0gICAgcmV0dXJuIGdldF9yYWNfaW50ZXJuYWwoYywgYy5yYW5nZSA+PiAxKTsKLX0K LS0gCjIuNDkuMQoKCkZyb20gMzFiMmFmOTAzN2JjMDc5MjJhOWZhOGY0YjEyMjQ5NmFkYjY3ODg2 MSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKRnJvbTogSmFtYWlrYTEgPGx1a2FzemN6MThAd3Au cGw+CkRhdGU6IFdlZCwgMyBTZXAgMjAyNSAxNDowNzowNyArMDAwMApTdWJqZWN0OiBbUEFUQ0gg MTA4LzExOF0gQ2hhbmdpbmcgdnVsa2FuIGZpbGUgZGlyZWN0b3J5CgotLS0KIGxpYmF2ZmlsdGVy L3Z1bGthbl9nbHNsYW5nLmMgfCAyICstCiAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyks IDEgZGVsZXRpb24oLSkKCmRpZmYgLS1naXQgYS9saWJhdmZpbHRlci92dWxrYW5fZ2xzbGFuZy5j IGIvbGliYXZmaWx0ZXIvdnVsa2FuX2dsc2xhbmcuYwppbmRleCA5YWE0MTU2N2EzLi4zMWU3NDE0 ZTkwIDEwMDY0NAotLS0gYS9saWJhdmZpbHRlci92dWxrYW5fZ2xzbGFuZy5jCisrKyBiL2xpYmF2 ZmlsdGVyL3Z1bGthbl9nbHNsYW5nLmMKQEAgLTE2LDQgKzE2LDQgQEAKICAqIEZvdW5kYXRpb24s IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAt MTMwMSBVU0EKICAqLwogCi0jaW5jbHVkZSAibGliYXZ1dGlsL3Z1bGthbl9nbHNsYW5nLmMiCisj aW5jbHVkZSAibGliYXZ1dGlsL3Z1bGthbi92dWxrYW5fZ2xzbGFuZy5jIgotLSAKMi40OS4xCgoK RnJvbSA3MzAxYzhlY2JiNDg5OTc0OTc0ZjE5NWIzM2Y0ZjVkZDdiMjhlYTk3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKYW1haWthMSA8bHVrYXN6Y3oxOEB3cC5wbD4KRGF0ZTogV2Vk LCAzIFNlcCAyMDI1IDE0OjA3OjU1ICswMDAwClN1YmplY3Q6IFtQQVRDSCAxMDkvMTE4XSBDaGFu Z2luZyB2dWxrYW4gZmlsZSBkaXJlY3RvcnkKCi0tLQogbGliYXZmaWx0ZXIvdnVsa2FuX3NoYWRl cmMuYyB8IDIgKy0KIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigt KQoKZGlmZiAtLWdpdCBhL2xpYmF2ZmlsdGVyL3Z1bGthbl9zaGFkZXJjLmMgYi9saWJhdmZpbHRl ci92dWxrYW5fc2hhZGVyYy5jCmluZGV4IDlmNjBiZjRkZmQuLjZiODBjZGIxMTEgMTAwNjQ0Ci0t LSBhL2xpYmF2ZmlsdGVyL3Z1bGthbl9zaGFkZXJjLmMKKysrIGIvbGliYXZmaWx0ZXIvdnVsa2Fu X3NoYWRlcmMuYwpAQCAtMTYsNCArMTYsNCBAQAogICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQogICov CiAKLSNpbmNsdWRlICJsaWJhdnV0aWwvdnVsa2FuX3NoYWRlcmMuYyIKKyNpbmNsdWRlICJsaWJh dnV0aWwvdnVsa2FuL3Z1bGthbl9zaGFkZXJjLmMiCi0tIAoyLjQ5LjEKCgpGcm9tIGE4YWRjYzU4 ZTI4ZmE4MWQxYWUzYjhmNWZlY2Y3MzUxNmI1MjRhZjYgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAx CkZyb206IEphbWFpa2ExIDxsdWthc3pjejE4QHdwLnBsPgpEYXRlOiBXZWQsIDMgU2VwIDIwMjUg MTQ6MDg6NDMgKzAwMDAKU3ViamVjdDogW1BBVENIIDExMC8xMThdIENoYW5naW5nIHZ1bGthbiBm aWxlIGRpcmVjdG9yeQoKLS0tCiBsaWJhdmZpbHRlci92dWxrYW4uYyB8IDIgKy0KIDEgZmlsZSBj aGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQoKZGlmZiAtLWdpdCBhL2xpYmF2 ZmlsdGVyL3Z1bGthbi5jIGIvbGliYXZmaWx0ZXIvdnVsa2FuLmMKaW5kZXggZmM4YTFmYTQ3Yi4u ZjEzYTU5ZTZkMyAxMDA2NDQKLS0tIGEvbGliYXZmaWx0ZXIvdnVsa2FuLmMKKysrIGIvbGliYXZm aWx0ZXIvdnVsa2FuLmMKQEAgLTE2LDQgKzE2LDQgQEAKICAqIEZvdW5kYXRpb24sIEluYy4sIDUx IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EK ICAqLwogCi0jaW5jbHVkZSAibGliYXZ1dGlsL3Z1bGthbi5jIgorI2luY2x1ZGUgImxpYmF2dXRp bC92dWxrYW4vdnVsa2FuLmMiCi0tIAoyLjQ5LjEKCgpGcm9tIGQ3ZTJlOTg3OTk4ZWFiZDBmNWIz N2Y4ZTZkNDhhY2JkNzIyY2ZjZTMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCkZyb206IEphbWFp a2ExIDxsdWthc3pjejE4QHdwLnBsPgpEYXRlOiBXZWQsIDMgU2VwIDIwMjUgMTQ6MDk6MjMgKzAw MDAKU3ViamVjdDogW1BBVENIIDExMS8xMThdIENoYW5naW5nIHZ1bGthbiBmaWxlIGRpcmVjdG9y eQoKLS0tCiBsaWJhdmNvZGVjL3Z1bGthbi5jIHwgMiArLQogMSBmaWxlIGNoYW5nZWQsIDEgaW5z ZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCgpkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy92dWxrYW4u YyBiL2xpYmF2Y29kZWMvdnVsa2FuLmMKaW5kZXggZmM4YTFmYTQ3Yi4uZjEzYTU5ZTZkMyAxMDA2 NDQKLS0tIGEvbGliYXZjb2RlYy92dWxrYW4uYworKysgYi9saWJhdmNvZGVjL3Z1bGthbi5jCkBA IC0xNiw0ICsxNiw0IEBACiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs IEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCiAgKi8KIAotI2luY2x1ZGUg ImxpYmF2dXRpbC92dWxrYW4uYyIKKyNpbmNsdWRlICJsaWJhdnV0aWwvdnVsa2FuL3Z1bGthbi5j IgotLSAKMi40OS4xCgoKRnJvbSBkZGQ2ZDM0ZDNmOGQzY2Y2ZTdiYTE1OGM5MTA4YmI3OWY5Y2Ji MGRkIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBKYW1haWthMSA8bHVrYXN6Y3oxOEB3 cC5wbD4KRGF0ZTogV2VkLCAzIFNlcCAyMDI1IDE0OjA5OjU1ICswMDAwClN1YmplY3Q6IFtQQVRD SCAxMTIvMTE4XSBDaGFuZ2luZyB2dWxrYW4gZmlsZSBkaXJlY3RvcnkKCi0tLQogbGliYXZjb2Rl Yy92dWxrYW5fZ2xzbGFuZy5jIHwgMiArLQogMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCsp LCAxIGRlbGV0aW9uKC0pCgpkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy92dWxrYW5fZ2xzbGFuZy5j IGIvbGliYXZjb2RlYy92dWxrYW5fZ2xzbGFuZy5jCmluZGV4IDlhYTQxNTY3YTMuLjMxZTc0MTRl OTAgMTAwNjQ0Ci0tLSBhL2xpYmF2Y29kZWMvdnVsa2FuX2dsc2xhbmcuYworKysgYi9saWJhdmNv ZGVjL3Z1bGthbl9nbHNsYW5nLmMKQEAgLTE2LDQgKzE2LDQgQEAKICAqIEZvdW5kYXRpb24sIElu Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMw MSBVU0EKICAqLwogCi0jaW5jbHVkZSAibGliYXZ1dGlsL3Z1bGthbl9nbHNsYW5nLmMiCisjaW5j bHVkZSAibGliYXZ1dGlsL3Z1bGthbi92dWxrYW5fZ2xzbGFuZy5jIgotLSAKMi40OS4xCgoKRnJv bSAxMWM2NjdkNjQ0YTI3MzQzOTIxMDYyNjgwOTgyMTUzMmYxODY3ZGVmIE1vbiBTZXAgMTcgMDA6 MDA6MDAgMjAwMQpGcm9tOiBKYW1haWthMSA8bHVrYXN6Y3oxOEB3cC5wbD4KRGF0ZTogV2VkLCAz IFNlcCAyMDI1IDE0OjEwOjQwICswMDAwClN1YmplY3Q6IFtQQVRDSCAxMTMvMTE4XSBDaGFuZ2lu ZyB2dWxrYW4gZmlsZSBkaXJlY3RvcnkKCi0tLQogbGliYXZjb2RlYy92dWxrYW5fc2hhZGVyYy5j IHwgMiArLQogMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCgpk aWZmIC0tZ2l0IGEvbGliYXZjb2RlYy92dWxrYW5fc2hhZGVyYy5jIGIvbGliYXZjb2RlYy92dWxr YW5fc2hhZGVyYy5jCmluZGV4IDlmNjBiZjRkZmQuLjZiODBjZGIxMTEgMTAwNjQ0Ci0tLSBhL2xp YmF2Y29kZWMvdnVsa2FuX3NoYWRlcmMuYworKysgYi9saWJhdmNvZGVjL3Z1bGthbl9zaGFkZXJj LmMKQEAgLTE2LDQgKzE2LDQgQEAKICAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0 cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKICAqLwogCi0jaW5j bHVkZSAibGliYXZ1dGlsL3Z1bGthbl9zaGFkZXJjLmMiCisjaW5jbHVkZSAibGliYXZ1dGlsL3Z1 bGthbi92dWxrYW5fc2hhZGVyYy5jIgotLSAKMi40OS4xCgoKRnJvbSBjMTljNGM4NTI5MzViY2Mx YTQ1NWIzNDM2OGQwZDBjMjFlNjFlNWU0IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBK YW1haWthMSA8bHVrYXN6Y3oxOEB3cC5wbD4KRGF0ZTogV2VkLCAzIFNlcCAyMDI1IDE0OjE2OjM2 ICswMDAwClN1YmplY3Q6IFtQQVRDSCAxMTQvMTE4XSBDaGFuZ2luZyB2dWxrYW4gZmlsZSBkaXJl Y3RvcnkKCi0tLQogbGliYXZjb2RlYy92dWxrYW4vTWFrZWZpbGUgfCAxNCArKystLS0tLS0tLS0t LQogMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwgMTEgZGVsZXRpb25zKC0pCgpkaWZm IC0tZ2l0IGEvbGliYXZjb2RlYy92dWxrYW4vTWFrZWZpbGUgYi9saWJhdmNvZGVjL3Z1bGthbi9N YWtlZmlsZQppbmRleCBkOGUxNDcxZmE2Li5iZjZjN2M4MWYzIDEwMDY0NAotLS0gYS9saWJhdmNv ZGVjL3Z1bGthbi9NYWtlZmlsZQorKysgYi9saWJhdmNvZGVjL3Z1bGthbi9NYWtlZmlsZQpAQCAt MywxOSArMywxMSBAQCBHRU5fQ0xFQU5TVUZGSVhFUyA9ICoubyAqLmMgKi5kCiBjbGVhbjo6CiAJ JChSTSkgJChHRU5fQ0xFQU5TVUZGSVhFUzolPWxpYmF2Y29kZWMvdnVsa2FuLyUpCiAKLU9CSlMt JChDT05GSUdfRkZWMV9WVUxLQU5fRU5DT0RFUikgICs9ICB2dWxrYW4vY29tbW9uLm8gXAotCQkJ CQl2dWxrYW4vcmFuZ2Vjb2Rlci5vIHZ1bGthbi9mZnYxX3ZsYy5vIFwKLQkJCQkJdnVsa2FuL2Zm djFfY29tbW9uLm8gdnVsa2FuL2ZmdjFfcmVzZXQubyBcCi0JCQkJCXZ1bGthbi9mZnYxX2VuY19y Y3QubyB2dWxrYW4vZmZ2MV9lbmNfc2V0dXAubyBcCi0JCQkJCXZ1bGthbi9mZnYxX3JjdF9zZWFy Y2gubyB2dWxrYW4vZmZ2MV9lbmMubworT0JKUy0kKENPTkZJR19GRlYxX1ZVTEtBTl9FTkNPREVS KSAgKz0gIHZ1bGthbi92dWxrYW5fc291cmNlLm8KIAotT0JKUy0kKENPTkZJR19GRlYxX1ZVTEtB Tl9IV0FDQ0VMKSAgKz0gIHZ1bGthbi9jb21tb24ubyBcCi0JCQkJCXZ1bGthbi9yYW5nZWNvZGVy Lm8gdnVsa2FuL2ZmdjFfdmxjLm8gXAotCQkJCQl2dWxrYW4vZmZ2MV9jb21tb24ubyB2dWxrYW4v ZmZ2MV9yZXNldC5vIFwKLQkJCQkJdnVsa2FuL2ZmdjFfZGVjX3NldHVwLm8gdnVsa2FuL2ZmdjFf ZGVjLm8KK09CSlMtJChDT05GSUdfRkZWMV9WVUxLQU5fSFdBQ0NFTCkgICs9ICB2dWxrYW4vdnVs a2FuX3NvdXJjZS5vCiAKLU9CSlMtJChDT05GSUdfUFJPUkVTX1JBV19WVUxLQU5fSFdBQ0NFTCkg Kz0gdnVsa2FuL2NvbW1vbi5vIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdnVsa2FuL3Byb3Jlc19yYXcubworT0JKUy0kKENPTkZJR19QUk9SRVNfUkFXX1ZV TEtBTl9IV0FDQ0VMKSArPSB2dWxrYW4vdnVsa2FuX3NvdXJjZS5vCiAKIFZVTEtBTiA9ICQoc3Vi c3QgJChTUkNfUEFUSCkvLCwkKHdpbGRjYXJkICQoU1JDX1BBVEgpL2xpYmF2Y29kZWMvdnVsa2Fu LyouY29tcCkpCiAuU0VDT05EQVJZOiAkKFZVTEtBTjouY29tcD0uYykKLS0gCjIuNDkuMQoKCkZy b20gMTI1NDhiMWU2MTY2NjMxZGRhZjE2YzU1ZmMxZmViYWE3ZjhjY2U1ZiBNb24gU2VwIDE3IDAw OjAwOjAwIDIwMDEKRnJvbTogSmFtYWlrYTEgPGx1a2FzemN6MThAd3AucGw+CkRhdGU6IFdlZCwg MyBTZXAgMjAyNSAxNDoyMDoxNyArMDAwMApTdWJqZWN0OiBbUEFUQ0ggMTE1LzExOF0gQ2hhbmdp bmcgdnVsa2FuIGZpbGUgZGlyZWN0b3J5CgotLS0KIGxpYmF2Y29kZWMvTWFrZWZpbGUgfCAyNiAr KysrKysrKysrKysrLS0tLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDEzIGluc2VydGlvbnMo KyksIDEzIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvTWFrZWZpbGUgYi9s aWJhdmNvZGVjL01ha2VmaWxlCmluZGV4IDNkMDM2ZGU0YjYuLjU0NjNkYzhiMWQgMTAwNjQ0Ci0t LSBhL2xpYmF2Y29kZWMvTWFrZWZpbGUKKysrIGIvbGliYXZjb2RlYy9NYWtlZmlsZQpAQCAtMjc2 LDcgKzI3Niw3IEBAIE9CSlMtJChDT05GSUdfQVYxX01FRElBQ09ERUNfRU5DT0RFUikgICs9IG1l ZGlhY29kZWNlbmMubwogT0JKUy0kKENPTkZJR19BVjFfTlZFTkNfRU5DT0RFUikgICAgICAgKz0g bnZlbmNfYXYxLm8gbnZlbmMubwogT0JKUy0kKENPTkZJR19BVjFfUVNWX0VOQ09ERVIpICAgICAg ICAgKz0gcXN2ZW5jX2F2MS5vCiBPQkpTLSQoQ09ORklHX0FWMV9WQUFQSV9FTkNPREVSKSAgICAg ICArPSB2YWFwaV9lbmNvZGVfYXYxLm8gYXYxX2xldmVscy5vCi1PQkpTLSQoQ09ORklHX0FWMV9W VUxLQU5fRU5DT0RFUikgICAgICArPSB2dWxrYW5fZW5jb2RlLm8gdnVsa2FuX2VuY29kZV9hdjEu byBcCitPQkpTLSQoQ09ORklHX0FWMV9WVUxLQU5fRU5DT0RFUikgICAgICArPSB2dWxrYW4vdnVs a2FuX2VuY29kZS5vIHZ1bGthbi92dWxrYW5fZW5jb2RlX2F2MS5vIFwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh3X2Jhc2VfZW5jb2RlLm8gYXYxX2xldmVscy5v CiBPQkpTLSQoQ09ORklHX0FWUk5fREVDT0RFUikgICAgICAgICAgICArPSBhdnJuZGVjLm8KIE9C SlMtJChDT05GSUdfQVZSUF9ERUNPREVSKSAgICAgICAgICAgICs9IHIyMTBkZWMubwpAQCAtMzc4 LDcgKzM3OCw3IEBAIE9CSlMtJChDT05GSUdfRVhSX0VOQ09ERVIpICAgICAgICAgICAgICs9IGV4 cmVuYy5vCiBPQkpTLSQoQ09ORklHX0ZBU1RBVURJT19ERUNPREVSKSAgICAgICArPSBmYXN0YXVk aW8ubwogT0JKUy0kKENPTkZJR19GRlYxX0RFQ09ERVIpICAgICAgICAgICAgKz0gZmZ2MWRlYy5v IGZmdjFfcGFyc2UubyBmZnYxLm8KIE9CSlMtJChDT05GSUdfRkZWMV9FTkNPREVSKSAgICAgICAg ICAgICs9IGZmdjFlbmMubyBmZnYxX3BhcnNlLm8gZmZ2MS5vCi1PQkpTLSQoQ09ORklHX0ZGVjFf VlVMS0FOX0VOQ09ERVIpICAgICArPSBmZnYxZW5jLm8gZmZ2MS5vIGZmdjFfdnVsa2FuLm8gZmZ2 MWVuY192dWxrYW4ubworT0JKUy0kKENPTkZJR19GRlYxX1ZVTEtBTl9FTkNPREVSKSAgICAgKz0g ZmZ2MWVuYy5vIGZmdjEubyB2dWxrYW4vZmZ2MV92dWxrYW4ubyB2dWxrYW4vZmZ2MWVuY192dWxr YW4ubwogT0JKUy0kKENPTkZJR19GRldBVkVTWU5USF9ERUNPREVSKSAgICAgKz0gZmZ3YXZlc3lu dGgubwogT0JKUy0kKENPTkZJR19GSUNfREVDT0RFUikgICAgICAgICAgICAgKz0gZmljLm8KIE9C SlMtJChDT05GSUdfRklUU19ERUNPREVSKSAgICAgICAgICAgICs9IGZpdHNkZWMubyBmaXRzLm8K QEAgLTQ0Miw3ICs0NDIsNyBAQCBPQkpTLSQoQ09ORklHX0gyNjRfUVNWX0VOQ09ERVIpICAgICAg ICArPSBxc3ZlbmNfaDI2NC5vCiBPQkpTLSQoQ09ORklHX0gyNjRfUktNUFBfREVDT0RFUikgICAg ICArPSBya21wcGRlYy5vCiBPQkpTLSQoQ09ORklHX0gyNjRfVkFBUElfRU5DT0RFUikgICAgICAr PSB2YWFwaV9lbmNvZGVfaDI2NC5vIGgyNjRfbGV2ZWxzLm8gXAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaDI2NDVkYXRhLm8gaHdfYmFzZV9lbmNvZGVfaDI2NC5v Ci1PQkpTLSQoQ09ORklHX0gyNjRfVlVMS0FOX0VOQ09ERVIpICAgICArPSB2dWxrYW5fZW5jb2Rl Lm8gdnVsa2FuX2VuY29kZV9oMjY0Lm8gXAorT0JKUy0kKENPTkZJR19IMjY0X1ZVTEtBTl9FTkNP REVSKSAgICAgKz0gdnVsa2FuL3Z1bGthbl9lbmNvZGUubyB2dWxrYW4vdnVsa2FuX2VuY29kZV9o MjY0Lm8gXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHdfYmFz ZV9lbmNvZGUubyBod19iYXNlX2VuY29kZV9oMjY0Lm8gXAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaDI2NF9sZXZlbHMubyBoMjY0NWRhdGEubwogT0JKUy0kKENP TkZJR19IMjY0X1ZJREVPVE9PTEJPWF9FTkNPREVSKSArPSB2aWRlb3Rvb2xib3hlbmMubwpAQCAt NDcxLDcgKzQ3MSw3IEBAIE9CSlMtJChDT05GSUdfSEVWQ19RU1ZfRU5DT0RFUikgICAgICAgICs9 IHFzdmVuY19oZXZjLm8gaGV2Yy9wc19lbmMubwogT0JKUy0kKENPTkZJR19IRVZDX1JLTVBQX0RF Q09ERVIpICAgICAgKz0gcmttcHBkZWMubwogT0JKUy0kKENPTkZJR19IRVZDX1ZBQVBJX0VOQ09E RVIpICAgICAgKz0gdmFhcGlfZW5jb2RlX2gyNjUubyBoMjY1X3Byb2ZpbGVfbGV2ZWwubyBcCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoMjY0NWRhdGEubyBod19i YXNlX2VuY29kZV9oMjY1Lm8KLU9CSlMtJChDT05GSUdfSEVWQ19WVUxLQU5fRU5DT0RFUikgICAg ICs9IHZ1bGthbl9lbmNvZGUubyB2dWxrYW5fZW5jb2RlX2gyNjUubyBcCitPQkpTLSQoQ09ORklH X0hFVkNfVlVMS0FOX0VOQ09ERVIpICAgICArPSB2dWxrYW4vdnVsa2FuX2VuY29kZS5vIHZ1bGth bi92dWxrYW5fZW5jb2RlX2gyNjUubyBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBod19iYXNlX2VuY29kZS5vIGh3X2Jhc2VfZW5jb2RlX2gyNjUubyBcCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoMjY1X3Byb2ZpbGVfbGV2ZWwu byBoMjY0NWRhdGEubwogT0JKUy0kKENPTkZJR19IRVZDX1Y0TDJNMk1fREVDT0RFUikgICAgKz0g djRsMl9tMm1fZGVjLm8KQEAgLTEwMjUsNyArMTAyNSw3IEBAIE9CSlMtJChDT05GSUdfTlZERUMp ICAgICAgICAgICAgICAgICAgICAgICs9IG52ZGVjLm8KIE9CSlMtJChDT05GSUdfVkFBUEkpICAg ICAgICAgICAgICAgICAgICAgICs9IHZhYXBpX2RlY29kZS5vCiBPQkpTLSQoQ09ORklHX1ZJREVP VE9PTEJPWCkgICAgICAgICAgICAgICArPSB2aWRlb3Rvb2xib3gubwogT0JKUy0kKENPTkZJR19W RFBBVSkgICAgICAgICAgICAgICAgICAgICAgKz0gdmRwYXUubwotT0JKUy0kKENPTkZJR19WVUxL QU4pICAgICAgICAgICAgICAgICAgICAgKz0gdnVsa2FuLm8gdnVsa2FuX3ZpZGVvLm8KK09CSlMt JChDT05GSUdfVlVMS0FOKSAgICAgICAgICAgICAgICAgICAgICs9IHZ1bGthbi5vIHZ1bGthbi92 dWxrYW5fdmlkZW8ubwogCiBPQkpTLSQoQ09ORklHX0FWMV9EM0QxMVZBX0hXQUNDRUwpICAgICAg ICArPSBkeHZhMl9hdjEubwogT0JKUy0kKENPTkZJR19BVjFfRFhWQTJfSFdBQ0NFTCkgICAgICAg ICAgKz0gZHh2YTJfYXYxLm8KQEAgLTEwMzQsOCArMTAzNCw4IEBAIE9CSlMtJChDT05GSUdfQVYx X05WREVDX0hXQUNDRUwpICAgICAgICAgICs9IG52ZGVjX2F2MS5vCiBPQkpTLSQoQ09ORklHX0FW MV9WQUFQSV9IV0FDQ0VMKSAgICAgICAgICArPSB2YWFwaV9hdjEubwogT0JKUy0kKENPTkZJR19B VjFfVkRQQVVfSFdBQ0NFTCkgICAgICAgICAgKz0gdmRwYXVfYXYxLm8KIE9CSlMtJChDT05GSUdf QVYxX1ZJREVPVE9PTEJPWF9IV0FDQ0VMKSAgICs9IHZpZGVvdG9vbGJveF9hdjEubwotT0JKUy0k KENPTkZJR19BVjFfVlVMS0FOX0hXQUNDRUwpICAgICAgICAgKz0gdnVsa2FuX2RlY29kZS5vIHZ1 bGthbl9hdjEubwotT0JKUy0kKENPTkZJR19GRlYxX1ZVTEtBTl9IV0FDQ0VMKSAgICAgICAgKz0g dnVsa2FuX2RlY29kZS5vIGZmdjFfdnVsa2FuLm8gdnVsa2FuX2ZmdjEubworT0JKUy0kKENPTkZJ R19BVjFfVlVMS0FOX0hXQUNDRUwpICAgICAgICAgKz0gdnVsa2FuL3Z1bGthbl9kZWNvZGUubyB2 dWxrYW4vdnVsa2FuX2F2MS5vCitPQkpTLSQoQ09ORklHX0ZGVjFfVlVMS0FOX0hXQUNDRUwpICAg ICAgICArPSB2dWxrYW4vdnVsa2FuX2RlY29kZS5vIHZ1bGthbi9mZnYxX3Z1bGthbi5vIHZ1bGth bi92dWxrYW5fZmZ2MS5vCiBPQkpTLSQoQ09ORklHX0gyNjNfVkFBUElfSFdBQ0NFTCkgICAgICAg ICArPSB2YWFwaV9tcGVnNC5vCiBPQkpTLSQoQ09ORklHX0gyNjNfVklERU9UT09MQk9YX0hXQUND RUwpICArPSB2aWRlb3Rvb2xib3gubwogT0JKUy0kKENPTkZJR19IMjY0X0QzRDExVkFfSFdBQ0NF TCkgICAgICAgKz0gZHh2YTJfaDI2NC5vCkBAIC0xMDQ2LDcgKzEwNDYsNyBAQCBPQkpTLSQoQ09O RklHX0gyNjRfUVNWX0hXQUNDRUwpICAgICAgICAgICArPSBxc3ZkZWMubwogT0JKUy0kKENPTkZJ R19IMjY0X1ZBQVBJX0hXQUNDRUwpICAgICAgICAgKz0gdmFhcGlfaDI2NC5vCiBPQkpTLSQoQ09O RklHX0gyNjRfVkRQQVVfSFdBQ0NFTCkgICAgICAgICArPSB2ZHBhdV9oMjY0Lm8KIE9CSlMtJChD T05GSUdfSDI2NF9WSURFT1RPT0xCT1hfSFdBQ0NFTCkgICs9IHZpZGVvdG9vbGJveC5vCi1PQkpT LSQoQ09ORklHX0gyNjRfVlVMS0FOX0hXQUNDRUwpICAgICAgICArPSB2dWxrYW5fZGVjb2RlLm8g dnVsa2FuX2gyNjQubworT0JKUy0kKENPTkZJR19IMjY0X1ZVTEtBTl9IV0FDQ0VMKSAgICAgICAg Kz0gdnVsa2FuL3Z1bGthbl9kZWNvZGUubyB2dWxrYW4vdnVsa2FuX2gyNjQubwogT0JKUy0kKENP TkZJR19IRVZDX0QzRDExVkFfSFdBQ0NFTCkgICAgICAgKz0gZHh2YTJfaGV2Yy5vCiBPQkpTLSQo Q09ORklHX0hFVkNfRFhWQTJfSFdBQ0NFTCkgICAgICAgICArPSBkeHZhMl9oZXZjLm8KIE9CSlMt JChDT05GSUdfSEVWQ19EM0QxMlZBX0hXQUNDRUwpICAgICAgICs9IGR4dmEyX2hldmMubyBkM2Qx MnZhX2hldmMubwpAQCAtMTA1NCw3ICsxMDU0LDcgQEAgT0JKUy0kKENPTkZJR19IRVZDX05WREVD X0hXQUNDRUwpICAgICAgICAgKz0gbnZkZWNfaGV2Yy5vCiBPQkpTLSQoQ09ORklHX0hFVkNfUVNW X0hXQUNDRUwpICAgICAgICAgICArPSBxc3ZkZWMubwogT0JKUy0kKENPTkZJR19IRVZDX1ZBQVBJ X0hXQUNDRUwpICAgICAgICAgKz0gdmFhcGlfaGV2Yy5vIGgyNjVfcHJvZmlsZV9sZXZlbC5vCiBP QkpTLSQoQ09ORklHX0hFVkNfVkRQQVVfSFdBQ0NFTCkgICAgICAgICArPSB2ZHBhdV9oZXZjLm8g aDI2NV9wcm9maWxlX2xldmVsLm8KLU9CSlMtJChDT05GSUdfSEVWQ19WVUxLQU5fSFdBQ0NFTCkg ICAgICAgICs9IHZ1bGthbl9kZWNvZGUubyB2dWxrYW5faGV2Yy5vCitPQkpTLSQoQ09ORklHX0hF VkNfVlVMS0FOX0hXQUNDRUwpICAgICAgICArPSB2dWxrYW4vdnVsa2FuX2RlY29kZS5vIHZ1bGth bi92dWxrYW5faGV2Yy5vCiBPQkpTLSQoQ09ORklHX01KUEVHX05WREVDX0hXQUNDRUwpICAgICAg ICArPSBudmRlY19tanBlZy5vCiBPQkpTLSQoQ09ORklHX01KUEVHX1ZBQVBJX0hXQUNDRUwpICAg ICAgICArPSB2YWFwaV9tanBlZy5vCiBPQkpTLSQoQ09ORklHX01QRUcxX05WREVDX0hXQUNDRUwp ICAgICAgICArPSBudmRlY19tcGVnMTIubwpAQCAtMTA4OCwxMCArMTA4OCwxMCBAQCBPQkpTLSQo Q09ORklHX1ZQOV9OVkRFQ19IV0FDQ0VMKSAgICAgICAgICArPSBudmRlY192cDkubwogT0JKUy0k KENPTkZJR19WUDlfVkFBUElfSFdBQ0NFTCkgICAgICAgICAgKz0gdmFhcGlfdnA5Lm8KIE9CSlMt JChDT05GSUdfVlA5X1ZEUEFVX0hXQUNDRUwpICAgICAgICAgICs9IHZkcGF1X3ZwOS5vCiBPQkpT LSQoQ09ORklHX1ZQOV9WSURFT1RPT0xCT1hfSFdBQ0NFTCkgICArPSB2aWRlb3Rvb2xib3hfdnA5 Lm8KLU9CSlMtJChDT05GSUdfVlA5X1ZVTEtBTl9IV0FDQ0VMKSAgICAgICAgICs9IHZ1bGthbl9k ZWNvZGUubyB2dWxrYW5fdnA5Lm8KK09CSlMtJChDT05GSUdfVlA5X1ZVTEtBTl9IV0FDQ0VMKSAg ICAgICAgICs9IHZ1bGthbi92dWxrYW5fZGVjb2RlLm8gdnVsa2FuL3Z1bGthbl92cDkubwogT0JK Uy0kKENPTkZJR19WUDhfUVNWX0hXQUNDRUwpICAgICAgICAgICAgKz0gcXN2ZGVjLm8KIE9CSlMt JChDT05GSUdfVlZDX1ZBQVBJX0hXQUNDRUwpICAgICAgICAgICs9IHZhYXBpX3Z2Yy5vCi1PQkpT LSQoQ09ORklHX1BST1JFU19SQVdfVlVMS0FOX0hXQUNDRUwpICArPSB2dWxrYW5fZGVjb2RlLm8g dnVsa2FuX3Byb3Jlc19yYXcubworT0JKUy0kKENPTkZJR19QUk9SRVNfUkFXX1ZVTEtBTl9IV0FD Q0VMKSAgKz0gdnVsa2FuL3Z1bGthbl9kZWNvZGUubyB2dWxrYW4vdnVsa2FuX3Byb3Jlc19yYXcu bwogCiAjIE9iamVjdHMgZHVwbGljYXRlZCBmcm9tIG90aGVyIGxpYnJhcmllcyBmb3Igc2hhcmVk IGJ1aWxkcwogU0hMSUJPQkpTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKz0gbG9nMl90 YWIubyByZXZlcnNlLm8KQEAgLTEzMzQsOCArMTMzNCw4IEBAIFNLSVBIRUFERVJTLSQoQ09ORklH X1FTVkVOQykgICAgICAgICAgICs9IHFzdmVuYy5oCiBTS0lQSEVBREVSUy0kKENPTkZJR19WQUFQ SSkgICAgICAgICAgICArPSB2YWFwaV9kZWNvZGUuaCB2YWFwaV9oZXZjLmggdmFhcGlfZW5jb2Rl LmgKIFNLSVBIRUFERVJTLSQoQ09ORklHX1ZEUEFVKSAgICAgICAgICAgICs9IHZkcGF1LmggdmRw YXVfaW50ZXJuYWwuaAogU0tJUEhFQURFUlMtJChDT05GSUdfVklERU9UT09MQk9YKSAgICAgKz0g dmlkZW90b29sYm94LmggdnRfaW50ZXJuYWwuaAotU0tJUEhFQURFUlMtJChDT05GSUdfVlVMS0FO KSAgICAgICAgICAgKz0gZmZ2MV92dWxrYW4uaCB2dWxrYW5fdmlkZW8uaCBcCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2dWxrYW5fZW5jb2RlLmggdnVsa2FuX2Rl Y29kZS5oCitTS0lQSEVBREVSUy0kKENPTkZJR19WVUxLQU4pICAgICAgICAgICArPSB2dWxrYW4v ZmZ2MV92dWxrYW4uaCB2dWxrYW4vdnVsa2FuX3ZpZGVvLmggXAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdnVsa2FuL3Z1bGthbl9lbmNvZGUuaCB2dWxrYW4vdnVs a2FuX2RlY29kZS5oCiBTS0lQSEVBREVSUy0kKENPTkZJR19WNEwyX00yTSkgICAgICAgICArPSB2 NGwyX2J1ZmZlcnMuaCB2NGwyX2NvbnRleHQuaCB2NGwyX20ybS5oCiBTS0lQSEVBREVSUy0kKENP TkZJR19aTElCKSAgICAgICAgICAgICArPSB6bGliX3dyYXBwZXIuaAogCi0tIAoyLjQ5LjEKCgpG cm9tIGFjNTBkN2JjNThkMWVmMDY3ZGRkNDA3ZmM1MjYyMTMwNmE2MDlhMmYgTW9uIFNlcCAxNyAw MDowMDowMCAyMDAxCkZyb206IEphbWFpa2ExIDxsdWthc3pjejE4QHdwLnBsPgpEYXRlOiBXZWQs IDMgU2VwIDIwMjUgMTQ6MjE6NDMgKzAwMDAKU3ViamVjdDogW1BBVENIIDExNi8xMThdIENoYW5n aW5nIHZ1bGthbiBmaWxlIGRpcmVjdG9yeQoKLS0tCiBsaWJhdmZpbHRlci92dWxrYW4vTWFrZWZp bGUgfCA0ICsrLS0KIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25z KC0pCgpkaWZmIC0tZ2l0IGEvbGliYXZmaWx0ZXIvdnVsa2FuL01ha2VmaWxlIGIvbGliYXZmaWx0 ZXIvdnVsa2FuL01ha2VmaWxlCmluZGV4IGM3N2FhZjRmNmIuLjYxNzA5ODJiZGEgMTAwNjQ0Ci0t LSBhL2xpYmF2ZmlsdGVyL3Z1bGthbi9NYWtlZmlsZQorKysgYi9saWJhdmZpbHRlci92dWxrYW4v TWFrZWZpbGUKQEAgLTMsOCArMyw4IEBAIEdFTl9DTEVBTlNVRkZJWEVTID0gKi5vICouYyAqLmQK IGNsZWFuOjoKIAkkKFJNKSAkKEdFTl9DTEVBTlNVRkZJWEVTOiU9bGliYXZmaWx0ZXIvdnVsa2Fu LyUpCiAKLU9CSlMtJChDT05GSUdfQldESUZfVlVMS0FOX0ZJTFRFUikgKz0gdnVsa2FuL2J3ZGlm Lm8KLU9CSlMtJChDT05GSUdfU0NBTEVfVlVMS0FOX0ZJTFRFUikgKz0gdnVsa2FuL2RlYmF5ZXIu bworT0JKUy0kKENPTkZJR19CV0RJRl9WVUxLQU5fRklMVEVSKSArPSB2dWxrYW4vdnVsa2FuX3Nv dXJjZS5vCitPQkpTLSQoQ09ORklHX1NDQUxFX1ZVTEtBTl9GSUxURVIpICs9IHZ1bGthbi92dWxr YW5fc291cmNlLm8KIAogVlVMS0FOID0gJChzdWJzdCAkKFNSQ19QQVRIKS8sLCQod2lsZGNhcmQg JChTUkNfUEFUSCkvbGliYXZmaWx0ZXIvdnVsa2FuLyouY29tcCkpCiAuU0VDT05EQVJZOiAkKFZV TEtBTjouY29tcD0uYykKLS0gCjIuNDkuMQoKCkZyb20gYmZkZDU2YWIzMjg5MjViZWQyZTdkZTBi MWRkMDBlYmY2ZjRjMzkwYSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKRnJvbTogSmFtYWlrYTEg PGx1a2FzemN6MThAd3AucGw+CkRhdGU6IFdlZCwgMyBTZXAgMjAyNSAxNDoyNzozMiArMDAwMApT dWJqZWN0OiBbUEFUQ0ggMTE3LzExOF0gQ2hhbmdpbmcgdnVsa2FuIGZpbGUgZGlyZWN0b3J5Cgot LS0KIGxpYmF2ZmlsdGVyL01ha2VmaWxlIHwgMzYgKysrKysrKysrKysrKysrKysrLS0tLS0tLS0t LS0tLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgMTggaW5zZXJ0aW9ucygrKSwgMTggZGVsZXRpb25z KC0pCgpkaWZmIC0tZ2l0IGEvbGliYXZmaWx0ZXIvTWFrZWZpbGUgYi9saWJhdmZpbHRlci9NYWtl ZmlsZQppbmRleCAwN2ZiNGMzZDZjLi43ZDU5ZmU5ZTU2IDEwMDY0NAotLS0gYS9saWJhdmZpbHRl ci9NYWtlZmlsZQorKysgYi9saWJhdmZpbHRlci9NYWtlZmlsZQpAQCAtMjAyLDcgKzIwMiw3IEBA IE9CSlMtJChDT05GSUdfQVRBREVOT0lTRV9GSUxURVIpICAgICAgICAgICAgICs9IHZmX2F0YWRl bm9pc2UubwogT0JKUy0kKENPTkZJR19BVkdCTFVSX0ZJTFRFUikgICAgICAgICAgICAgICAgKz0g dmZfYXZnYmx1ci5vCiBPQkpTLSQoQ09ORklHX0FWR0JMVVJfT1BFTkNMX0ZJTFRFUikgICAgICAg ICArPSB2Zl9hdmdibHVyX29wZW5jbC5vIG9wZW5jbC5vIFwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZW5jbC9hdmdibHVyLm8gYm94Ymx1ci5vCi1P QkpTLSQoQ09ORklHX0FWR0JMVVJfVlVMS0FOX0ZJTFRFUikgICAgICAgICArPSB2Zl9hdmdibHVy X3Z1bGthbi5vIHZ1bGthbi5vIHZ1bGthbl9maWx0ZXIubworT0JKUy0kKENPTkZJR19BVkdCTFVS X1ZVTEtBTl9GSUxURVIpICAgICAgICAgKz0gdnVsa2FuL3ZmX2F2Z2JsdXJfdnVsa2FuLm8gdnVs a2FuLm8gdnVsa2FuL3Z1bGthbl9maWx0ZXIubwogT0JKUy0kKENPTkZJR19CQUNLR1JPVU5ES0VZ X0ZJTFRFUikgICAgICAgICAgKz0gdmZfYmFja2dyb3VuZGtleS5vCiBPQkpTLSQoQ09ORklHX0JC T1hfRklMVEVSKSAgICAgICAgICAgICAgICAgICArPSBiYm94Lm8gdmZfYmJveC5vCiBPQkpTLSQo Q09ORklHX0JFTkNIX0ZJTFRFUikgICAgICAgICAgICAgICAgICArPSBmX2JlbmNoLm8KQEAgLTIx MCwxMCArMjEwLDEwIEBAIE9CSlMtJChDT05GSUdfQklMQVRFUkFMX0ZJTFRFUikgICAgICAgICAg ICAgICs9IHZmX2JpbGF0ZXJhbC5vCiBPQkpTLSQoQ09ORklHX0JJTEFURVJBTF9DVURBX0ZJTFRF UikgICAgICAgICArPSB2Zl9iaWxhdGVyYWxfY3VkYS5vIHZmX2JpbGF0ZXJhbF9jdWRhLnB0eC5v CiBPQkpTLSQoQ09ORklHX0JJVFBMQU5FTk9JU0VfRklMVEVSKSAgICAgICAgICArPSB2Zl9iaXRw bGFuZW5vaXNlLm8KIE9CSlMtJChDT05GSUdfQkxBQ0tERVRFQ1RfRklMVEVSKSAgICAgICAgICAg ICs9IHZmX2JsYWNrZGV0ZWN0Lm8KLU9CSlMtJChDT05GSUdfQkxBQ0tERVRFQ1RfVlVMS0FOX0ZJ TFRFUikgICAgICs9IHZmX2JsYWNrZGV0ZWN0X3Z1bGthbi5vCitPQkpTLSQoQ09ORklHX0JMQUNL REVURUNUX1ZVTEtBTl9GSUxURVIpICAgICArPSB2dWxrYW4vdmZfYmxhY2tkZXRlY3RfdnVsa2Fu Lm8KIE9CSlMtJChDT05GSUdfQkxBQ0tGUkFNRV9GSUxURVIpICAgICAgICAgICAgICs9IHZmX2Js YWNrZnJhbWUubwogT0JKUy0kKENPTkZJR19CTEVORF9GSUxURVIpICAgICAgICAgICAgICAgICAg Kz0gdmZfYmxlbmQubyBmcmFtZXN5bmMubwotT0JKUy0kKENPTkZJR19CTEVORF9WVUxLQU5fRklM VEVSKSAgICAgICAgICAgKz0gdmZfYmxlbmRfdnVsa2FuLm8gZnJhbWVzeW5jLm8gdnVsa2FuLm8g dnVsa2FuX2ZpbHRlci5vCitPQkpTLSQoQ09ORklHX0JMRU5EX1ZVTEtBTl9GSUxURVIpICAgICAg ICAgICArPSB2dWxrYW4vdmZfYmxlbmRfdnVsa2FuLm8gZnJhbWVzeW5jLm8gdnVsa2FuLm8gdnVs a2FuL3Z1bGthbl9maWx0ZXIubwogT0JKUy0kKENPTkZJR19CTE9DS0RFVEVDVF9GSUxURVIpICAg ICAgICAgICAgKz0gdmZfYmxvY2tkZXRlY3QubwogT0JKUy0kKENPTkZJR19CTFVSREVURUNUX0ZJ TFRFUikgICAgICAgICAgICAgKz0gdmZfYmx1cmRldGVjdC5vIGVkZ2VfY29tbW9uLm8KIE9CSlMt JChDT05GSUdfQk0zRF9GSUxURVIpICAgICAgICAgICAgICAgICAgICs9IHZmX2JtM2QubyBmcmFt ZXN5bmMubwpAQCAtMjIzLDEwICsyMjMsMTAgQEAgT0JKUy0kKENPTkZJR19CT1hCTFVSX09QRU5D TF9GSUxURVIpICAgICAgICAgKz0gdmZfYXZnYmx1cl9vcGVuY2wubyBvcGVuY2wubyBcCiBPQkpT LSQoQ09ORklHX0JXRElGX0ZJTFRFUikgICAgICAgICAgICAgICAgICArPSB2Zl9id2RpZi5vIGJ3 ZGlmZHNwLm8geWFkaWZfY29tbW9uLm8KIE9CSlMtJChDT05GSUdfQldESUZfQ1VEQV9GSUxURVIp ICAgICAgICAgICAgICs9IHZmX2J3ZGlmX2N1ZGEubyB2Zl9id2RpZl9jdWRhLnB0eC5vIFwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlhZGlmX2NvbW1v bi5vCi1PQkpTLSQoQ09ORklHX0JXRElGX1ZVTEtBTl9GSUxURVIpICAgICAgICAgICArPSB2Zl9i d2RpZl92dWxrYW4ubyB5YWRpZl9jb21tb24ubyB2dWxrYW4ubyB2dWxrYW5fZmlsdGVyLm8KK09C SlMtJChDT05GSUdfQldESUZfVlVMS0FOX0ZJTFRFUikgICAgICAgICAgICs9IHZ1bGthbi92Zl9i d2RpZl92dWxrYW4ubyB5YWRpZl9jb21tb24ubyB2dWxrYW4ubyB2dWxrYW4vdnVsa2FuX2ZpbHRl ci5vCiBPQkpTLSQoQ09ORklHX0NBU19GSUxURVIpICAgICAgICAgICAgICAgICAgICArPSB2Zl9j YXMubwogT0JKUy0kKENPTkZJR19DQ1JFUEFDS19GSUxURVIpICAgICAgICAgICAgICAgKz0gdmZf Y2NyZXBhY2subwotT0JKUy0kKENPTkZJR19DSFJPTUFCRVJfVlVMS0FOX0ZJTFRFUikgICAgICAg Kz0gdmZfY2hyb21hYmVyX3Z1bGthbi5vIHZ1bGthbi5vIHZ1bGthbl9maWx0ZXIubworT0JKUy0k KENPTkZJR19DSFJPTUFCRVJfVlVMS0FOX0ZJTFRFUikgICAgICAgKz0gdnVsa2FuL3ZmX2Nocm9t YWJlcl92dWxrYW4ubyB2dWxrYW4ubyB2dWxrYW4vdnVsa2FuX2ZpbHRlci5vCiBPQkpTLSQoQ09O RklHX0NIUk9NQUhPTERfRklMVEVSKSAgICAgICAgICAgICArPSB2Zl9jaHJvbWFrZXkubwogT0JK Uy0kKENPTkZJR19DSFJPTUFLRVlfRklMVEVSKSAgICAgICAgICAgICAgKz0gdmZfY2hyb21ha2V5 Lm8KIE9CSlMtJChDT05GSUdfQ0hST01BS0VZX0NVREFfRklMVEVSKSAgICAgICAgICs9IHZmX2No cm9tYWtleV9jdWRhLm8gdmZfY2hyb21ha2V5X2N1ZGEucHR4Lm8KQEAgLTMzMSw3ICszMzEsNyBA QCBPQkpTLSQoQ09ORklHX0ZSRUkwUl9GSUxURVIpICAgICAgICAgICAgICAgICArPSB2Zl9mcmVp MHIubwogT0JKUy0kKENPTkZJR19GU1BQX0ZJTFRFUikgICAgICAgICAgICAgICAgICAgKz0gdmZf ZnNwcC5vIHFwX3RhYmxlLm8KIE9CSlMtJChDT05GSUdfRlNZTkNfRklMVEVSKSAgICAgICAgICAg ICAgICAgICs9IHZmX2ZzeW5jLm8KIE9CSlMtJChDT05GSUdfR0JMVVJfRklMVEVSKSAgICAgICAg ICAgICAgICAgICs9IHZmX2dibHVyLm8KLU9CSlMtJChDT05GSUdfR0JMVVJfVlVMS0FOX0ZJTFRF UikgICAgICAgICAgICs9IHZmX2dibHVyX3Z1bGthbi5vIHZ1bGthbi5vIHZ1bGthbl9maWx0ZXIu bworT0JKUy0kKENPTkZJR19HQkxVUl9WVUxLQU5fRklMVEVSKSAgICAgICAgICAgKz0gdnVsa2Fu L3ZmX2dibHVyX3Z1bGthbi5vIHZ1bGthbi5vIHZ1bGthbi92dWxrYW5fZmlsdGVyLm8KIE9CSlMt JChDT05GSUdfR0VRX0ZJTFRFUikgICAgICAgICAgICAgICAgICAgICs9IHZmX2dlcS5vCiBPQkpT LSQoQ09ORklHX0dSQURGVU5fRklMVEVSKSAgICAgICAgICAgICAgICArPSB2Zl9ncmFkZnVuLm8K IE9CSlMtJChDT05GSUdfR1JBUEhNT05JVE9SX0ZJTFRFUikgICAgICAgICAgICs9IGZfZ3JhcGht b25pdG9yLm8KQEAgLTM0MCw3ICszNDAsNyBAQCBPQkpTLSQoQ09ORklHX0dSRVlFREdFX0ZJTFRF UikgICAgICAgICAgICAgICArPSB2Zl9jb2xvcmNvbnN0YW5jeS5vCiBPQkpTLSQoQ09ORklHX0dV SURFRF9GSUxURVIpICAgICAgICAgICAgICAgICArPSB2Zl9ndWlkZWQubyBmcmFtZXN5bmMubwog T0JKUy0kKENPTkZJR19IQUxEQ0xVVF9GSUxURVIpICAgICAgICAgICAgICAgKz0gdmZfbHV0M2Qu byBmcmFtZXN5bmMubwogT0JKUy0kKENPTkZJR19IRkxJUF9GSUxURVIpICAgICAgICAgICAgICAg ICAgKz0gdmZfaGZsaXAubwotT0JKUy0kKENPTkZJR19IRkxJUF9WVUxLQU5fRklMVEVSKSAgICAg ICAgICAgKz0gdmZfZmxpcF92dWxrYW4ubyB2dWxrYW4ubworT0JKUy0kKENPTkZJR19IRkxJUF9W VUxLQU5fRklMVEVSKSAgICAgICAgICAgKz0gdnVsa2FuL3ZmX2ZsaXBfdnVsa2FuLm8gdnVsa2Fu Lm8KIE9CSlMtJChDT05GSUdfSElTVEVRX0ZJTFRFUikgICAgICAgICAgICAgICAgICs9IHZmX2hp c3RlcS5vCiBPQkpTLSQoQ09ORklHX0hJU1RPR1JBTV9GSUxURVIpICAgICAgICAgICAgICArPSB2 Zl9oaXN0b2dyYW0ubwogT0JKUy0kKENPTkZJR19IUUROM0RfRklMVEVSKSAgICAgICAgICAgICAg ICAgKz0gdmZfaHFkbjNkLm8KQEAgLTM2Miw3ICszNjIsNyBAQCBPQkpTLSQoQ09ORklHX0lERVRf RklMVEVSKSAgICAgICAgICAgICAgICAgICArPSB2Zl9pZGV0Lm8KIE9CSlMtJChDT05GSUdfSUxf RklMVEVSKSAgICAgICAgICAgICAgICAgICAgICs9IHZmX2lsLm8KIE9CSlMtJChDT05GSUdfSU5G TEFURV9GSUxURVIpICAgICAgICAgICAgICAgICs9IHZmX25laWdoYm9yLm8KIE9CSlMtJChDT05G SUdfSU5URVJMQUNFX0ZJTFRFUikgICAgICAgICAgICAgICs9IHZmX3RpbnRlcmxhY2UubwotT0JK Uy0kKENPTkZJR19JTlRFUkxBQ0VfVlVMS0FOX0ZJTFRFUikgICAgICAgKz0gdmZfaW50ZXJsYWNl X3Z1bGthbi5vIHZ1bGthbi5vIHZ1bGthbl9maWx0ZXIubworT0JKUy0kKENPTkZJR19JTlRFUkxB Q0VfVlVMS0FOX0ZJTFRFUikgICAgICAgKz0gdnVsa2FuL3ZmX2ludGVybGFjZV92dWxrYW4ubyB2 dWxrYW4ubyB2dWxrYW4vdnVsa2FuX2ZpbHRlci5vCiBPQkpTLSQoQ09ORklHX0lOVEVSTEVBVkVf RklMVEVSKSAgICAgICAgICAgICArPSBmX2ludGVybGVhdmUubwogT0JKUy0kKENPTkZJR19LRVJO REVJTlRfRklMVEVSKSAgICAgICAgICAgICAgKz0gdmZfa2VybmRlaW50Lm8KIE9CSlMtJChDT05G SUdfS0lSU0NIX0ZJTFRFUikgICAgICAgICAgICAgICAgICs9IHZmX2NvbnZvbHV0aW9uLm8KQEAg LTM3MSw3ICszNzEsNyBAQCBPQkpTLSQoQ09ORklHX0xDRVZDX0ZJTFRFUikgICAgICAgICAgICAg ICAgICArPSB2Zl9sY2V2Yy5vCiBPQkpTLSQoQ09ORklHX0xBVEVOQ1lfRklMVEVSKSAgICAgICAg ICAgICAgICArPSBmX2xhdGVuY3kubwogT0JKUy0kKENPTkZJR19MRU5TQ09SUkVDVElPTl9GSUxU RVIpICAgICAgICAgKz0gdmZfbGVuc2NvcnJlY3Rpb24ubwogT0JKUy0kKENPTkZJR19MRU5TRlVO X0ZJTFRFUikgICAgICAgICAgICAgICAgKz0gdmZfbGVuc2Z1bi5vCi1PQkpTLSQoQ09ORklHX0xJ QlBMQUNFQk9fRklMVEVSKSAgICAgICAgICAgICArPSB2Zl9saWJwbGFjZWJvLm8gdnVsa2FuLm8g dnVsa2FuX2ZpbHRlci5vCitPQkpTLSQoQ09ORklHX0xJQlBMQUNFQk9fRklMVEVSKSAgICAgICAg ICAgICArPSB2Zl9saWJwbGFjZWJvLm8gdnVsa2FuLm8gdnVsa2FuL3Z1bGthbl9maWx0ZXIubwog T0JKUy0kKENPTkZJR19MSUJWTUFGX0ZJTFRFUikgICAgICAgICAgICAgICAgKz0gdmZfbGlidm1h Zi5vIGZyYW1lc3luYy5vCiBPQkpTLSQoQ09ORklHX0xJQlZNQUZfQ1VEQV9GSUxURVIpICAgICAg ICAgICArPSB2Zl9saWJ2bWFmLm8gZnJhbWVzeW5jLm8KIE9CSlMtJChDT05GSUdfTElNSVRESUZG X0ZJTFRFUikgICAgICAgICAgICAgICs9IHZmX2xpbWl0ZGlmZi5vIGZyYW1lc3luYy5vCkBAIC00 MDYsNyArNDA2LDcgQEAgT0JKUy0kKENPTkZJR19NVUxUSVBMWV9GSUxURVIpICAgICAgICAgICAg ICAgKz0gdmZfbXVsdGlwbHkubyBmcmFtZXN5bmMubwogT0JKUy0kKENPTkZJR19ORUdBVEVfRklM VEVSKSAgICAgICAgICAgICAgICAgKz0gdmZfbmVnYXRlLm8KIE9CSlMtJChDT05GSUdfTkxNRUFO U19GSUxURVIpICAgICAgICAgICAgICAgICs9IHZmX25sbWVhbnMubwogT0JKUy0kKENPTkZJR19O TE1FQU5TX09QRU5DTF9GSUxURVIpICAgICAgICAgKz0gdmZfbmxtZWFuc19vcGVuY2wubyBvcGVu Y2wubyBvcGVuY2wvbmxtZWFucy5vCi1PQkpTLSQoQ09ORklHX05MTUVBTlNfVlVMS0FOX0ZJTFRF UikgICAgICAgICArPSB2Zl9ubG1lYW5zX3Z1bGthbi5vIHZ1bGthbi5vIHZ1bGthbl9maWx0ZXIu bworT0JKUy0kKENPTkZJR19OTE1FQU5TX1ZVTEtBTl9GSUxURVIpICAgICAgICAgKz0gdnVsa2Fu L3ZmX25sbWVhbnNfdnVsa2FuLm8gdnVsa2FuLm8gdnVsa2FuL3Z1bGthbl9maWx0ZXIubwogT0JK Uy0kKENPTkZJR19OTkVESV9GSUxURVIpICAgICAgICAgICAgICAgICAgKz0gdmZfbm5lZGkubwog T0JKUy0kKENPTkZJR19OT0ZPUk1BVF9GSUxURVIpICAgICAgICAgICAgICAgKz0gdmZfZm9ybWF0 Lm8KIE9CSlMtJChDT05GSUdfTk9JU0VfRklMVEVSKSAgICAgICAgICAgICAgICAgICs9IHZmX25v aXNlLm8KQEAgLTQyMiw3ICs0MjIsNyBAQCBPQkpTLSQoQ09ORklHX09WRVJMQVlfT1BFTkNMX0ZJ TFRFUikgICAgICAgICArPSB2Zl9vdmVybGF5X29wZW5jbC5vIG9wZW5jbC5vIFwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZW5jbC9vdmVybGF5Lm8g ZnJhbWVzeW5jLm8KIE9CSlMtJChDT05GSUdfT1ZFUkxBWV9RU1ZfRklMVEVSKSAgICAgICAgICAg ICs9IHZmX292ZXJsYXlfcXN2Lm8gZnJhbWVzeW5jLm8KIE9CSlMtJChDT05GSUdfT1ZFUkxBWV9W QUFQSV9GSUxURVIpICAgICAgICAgICs9IHZmX292ZXJsYXlfdmFhcGkubyBmcmFtZXN5bmMubyB2 YWFwaV92cHAubwotT0JKUy0kKENPTkZJR19PVkVSTEFZX1ZVTEtBTl9GSUxURVIpICAgICAgICAg Kz0gdmZfb3ZlcmxheV92dWxrYW4ubyB2dWxrYW4ubyB2dWxrYW5fZmlsdGVyLm8KK09CSlMtJChD T05GSUdfT1ZFUkxBWV9WVUxLQU5fRklMVEVSKSAgICAgICAgICs9IHZ1bGthbi92Zl9vdmVybGF5 X3Z1bGthbi5vIHZ1bGthbi5vIHZ1bGthbi92dWxrYW5fZmlsdGVyLm8KIE9CSlMtJChDT05GSUdf T1dERU5PSVNFX0ZJTFRFUikgICAgICAgICAgICAgICs9IHZmX293ZGVub2lzZS5vCiBPQkpTLSQo Q09ORklHX1BBRF9GSUxURVIpICAgICAgICAgICAgICAgICAgICArPSB2Zl9wYWQubwogT0JKUy0k KENPTkZJR19QQURfQ1VEQV9GSUxURVIpICAgICAgICAgICAgICAgKz0gdmZfcGFkX2N1ZGEubyB2 Zl9wYWRfY3VkYS5wdHgubyBjdWRhL2xvYWRfaGVscGVyLm8KQEAgLTQ3MywxMSArNDczLDExIEBA IE9CSlMtJChDT05GSUdfU0NBTEVfTlBQX0ZJTFRFUikgICAgICAgICAgICAgICs9IHZmX3NjYWxl X25wcC5vIHNjYWxlX2V2YWwubwogT0JKUy0kKENPTkZJR19TQ0FMRV9RU1ZfRklMVEVSKSAgICAg ICAgICAgICAgKz0gdmZfdnBwX3Fzdi5vCiBPQkpTLSQoQ09ORklHX1NDQUxFX1ZBQVBJX0ZJTFRF UikgICAgICAgICAgICArPSB2Zl9zY2FsZV92YWFwaS5vIHNjYWxlX2V2YWwubyB2YWFwaV92cHAu bwogT0JKUy0kKENPTkZJR19TQ0FMRV9WVF9GSUxURVIpICAgICAgICAgICAgICAgKz0gdmZfc2Nh bGVfdnQubyBzY2FsZV9ldmFsLm8KLU9CSlMtJChDT05GSUdfU0NBTEVfVlVMS0FOX0ZJTFRFUikg ICAgICAgICAgICs9IHZmX3NjYWxlX3Z1bGthbi5vIHZ1bGthbi5vIHZ1bGthbl9maWx0ZXIubwor T0JKUy0kKENPTkZJR19TQ0FMRV9WVUxLQU5fRklMVEVSKSAgICAgICAgICAgKz0gdnVsa2FuL3Zm X3NjYWxlX3Z1bGthbi5vIHZ1bGthbi5vIHZ1bGthbi92dWxrYW5fZmlsdGVyLm8KIE9CSlMtJChD T05GSUdfU0NBTEUyUkVGX0ZJTFRFUikgICAgICAgICAgICAgICs9IHZmX3NjYWxlLm8gc2NhbGVf ZXZhbC5vIGZyYW1lc3luYy5vCiBPQkpTLSQoQ09ORklHX1NDQUxFMlJFRl9OUFBfRklMVEVSKSAg ICAgICAgICArPSB2Zl9zY2FsZV9ucHAubyBzY2FsZV9ldmFsLm8KIE9CSlMtJChDT05GSUdfU0NE RVRfRklMVEVSKSAgICAgICAgICAgICAgICAgICs9IHZmX3NjZGV0Lm8KLU9CSlMtJChDT05GSUdf U0NERVRfVlVMS0FOX0ZJTFRFUikgICAgICAgICAgICs9IHZmX3NjZGV0X3Z1bGthbi5vCitPQkpT LSQoQ09ORklHX1NDREVUX1ZVTEtBTl9GSUxURVIpICAgICAgICAgICArPSB2dWxrYW4vdmZfc2Nk ZXRfdnVsa2FuLm8KIE9CSlMtJChDT05GSUdfU0NIQVJSX0ZJTFRFUikgICAgICAgICAgICAgICAg ICs9IHZmX2NvbnZvbHV0aW9uLm8KIE9CSlMtJChDT05GSUdfU0NST0xMX0ZJTFRFUikgICAgICAg ICAgICAgICAgICs9IHZmX3Njcm9sbC5vCiBPQkpTLSQoQ09ORklHX1NFR01FTlRfRklMVEVSKSAg ICAgICAgICAgICAgICArPSBmX3NlZ21lbnQubwpAQCAtNTQ0LDcgKzU0NCw3IEBAIE9CSlMtJChD T05GSUdfVFJBTlNQT1NFX05QUF9GSUxURVIpICAgICAgICAgICs9IHZmX3RyYW5zcG9zZV9ucHAu bwogT0JKUy0kKENPTkZJR19UUkFOU1BPU0VfT1BFTkNMX0ZJTFRFUikgICAgICAgKz0gdmZfdHJh bnNwb3NlX29wZW5jbC5vIG9wZW5jbC5vIG9wZW5jbC90cmFuc3Bvc2UubwogT0JKUy0kKENPTkZJ R19UUkFOU1BPU0VfVkFBUElfRklMVEVSKSAgICAgICAgKz0gdmZfdHJhbnNwb3NlX3ZhYXBpLm8g dmFhcGlfdnBwLm8KIE9CSlMtJChDT05GSUdfVFJBTlNQT1NFX1ZUX0ZJTFRFUikgICAgICAgICAg ICs9IHZmX3RyYW5zcG9zZV92dC5vCi1PQkpTLSQoQ09ORklHX1RSQU5TUE9TRV9WVUxLQU5fRklM VEVSKSAgICAgICArPSB2Zl90cmFuc3Bvc2VfdnVsa2FuLm8gdnVsa2FuLm8gdnVsa2FuX2ZpbHRl ci5vCitPQkpTLSQoQ09ORklHX1RSQU5TUE9TRV9WVUxLQU5fRklMVEVSKSAgICAgICArPSB2dWxr YW4vdmZfdHJhbnNwb3NlX3Z1bGthbi5vIHZ1bGthbi5vIHZ1bGthbi92dWxrYW5fZmlsdGVyLm8K IE9CSlMtJChDT05GSUdfVFJJTV9GSUxURVIpICAgICAgICAgICAgICAgICAgICs9IHRyaW0ubwog T0JKUy0kKENPTkZJR19VTlBSRU1VTFRJUExZX0ZJTFRFUikgICAgICAgICAgKz0gdmZfcHJlbXVs dGlwbHkubyBmcmFtZXN5bmMubwogT0JKUy0kKENPTkZJR19VTlNIQVJQX0ZJTFRFUikgICAgICAg ICAgICAgICAgKz0gdmZfdW5zaGFycC5vCkBAIC01NTcsNyArNTU3LDcgQEAgT0JKUy0kKENPTkZJ R19WQUdVRURFTk9JU0VSX0ZJTFRFUikgICAgICAgICAgKz0gdmZfdmFndWVkZW5vaXNlci5vCiBP QkpTLSQoQ09ORklHX1ZBUkJMVVJfRklMVEVSKSAgICAgICAgICAgICAgICArPSB2Zl92YXJibHVy Lm8gZnJhbWVzeW5jLm8KIE9CSlMtJChDT05GSUdfVkVDVE9SU0NPUEVfRklMVEVSKSAgICAgICAg ICAgICs9IHZmX3ZlY3RvcnNjb3BlLm8KIE9CSlMtJChDT05GSUdfVkZMSVBfRklMVEVSKSAgICAg ICAgICAgICAgICAgICs9IHZmX3ZmbGlwLm8KLU9CSlMtJChDT05GSUdfVkZMSVBfVlVMS0FOX0ZJ TFRFUikgICAgICAgICAgICs9IHZmX2ZsaXBfdnVsa2FuLm8gdnVsa2FuLm8KK09CSlMtJChDT05G SUdfVkZMSVBfVlVMS0FOX0ZJTFRFUikgICAgICAgICAgICs9IHZ1bGthbi92Zl9mbGlwX3Z1bGth bi5vIHZ1bGthbi5vCiBPQkpTLSQoQ09ORklHX1ZGUkRFVF9GSUxURVIpICAgICAgICAgICAgICAg ICArPSB2Zl92ZnJkZXQubwogT0JKUy0kKENPTkZJR19WSUJSQU5DRV9GSUxURVIpICAgICAgICAg ICAgICAgKz0gdmZfdmlicmFuY2UubwogT0JKUy0kKENPTkZJR19WSURTVEFCREVURUNUX0ZJTFRF UikgICAgICAgICAgKz0gdmlkc3RhYnV0aWxzLm8gdmZfdmlkc3RhYmRldGVjdC5vCkBAIC01NzUs NyArNTc1LDcgQEAgT0JKUy0kKENPTkZJR19YQlJfRklMVEVSKSAgICAgICAgICAgICAgICAgICAg Kz0gdmZfeGJyLm8KIE9CSlMtJChDT05GSUdfWENPUlJFTEFURV9GSUxURVIpICAgICAgICAgICAg ICs9IHZmX2NvbnZvbHZlLm8gZnJhbWVzeW5jLm8KIE9CSlMtJChDT05GSUdfWEZBREVfRklMVEVS KSAgICAgICAgICAgICAgICAgICs9IHZmX3hmYWRlLm8KIE9CSlMtJChDT05GSUdfWEZBREVfT1BF TkNMX0ZJTFRFUikgICAgICAgICAgICs9IHZmX3hmYWRlX29wZW5jbC5vIG9wZW5jbC5vIG9wZW5j bC94ZmFkZS5vCi1PQkpTLSQoQ09ORklHX1hGQURFX1ZVTEtBTl9GSUxURVIpICAgICAgICAgICAr PSB2Zl94ZmFkZV92dWxrYW4ubyB2dWxrYW4ubyB2dWxrYW5fZmlsdGVyLm8KK09CSlMtJChDT05G SUdfWEZBREVfVlVMS0FOX0ZJTFRFUikgICAgICAgICAgICs9IHZ1bGthbi92Zl94ZmFkZV92dWxr YW4ubyB2dWxrYW4ubyB2dWxrYW4vdnVsa2FuX2ZpbHRlci5vCiBPQkpTLSQoQ09ORklHX1hNRURJ QU5fRklMVEVSKSAgICAgICAgICAgICAgICArPSB2Zl94bWVkaWFuLm8gZnJhbWVzeW5jLm8KIE9C SlMtJChDT05GSUdfWFBTTlJfRklMVEVSKSAgICAgICAgICAgICAgICAgICs9IHZmX3hwc25yLm8g ZnJhbWVzeW5jLm8gcHNuci5vCiBPQkpTLSQoQ09ORklHX1hTVEFDS19GSUxURVIpICAgICAgICAg ICAgICAgICArPSB2Zl9zdGFjay5vIGZyYW1lc3luYy5vCkBAIC02MjQsNyArNjI0LDcgQEAgT0JK Uy0kKENPTkZJR19SR0JURVNUU1JDX0ZJTFRFUikgICAgICAgICAgICAgKz0gdnNyY190ZXN0c3Jj Lm8KIE9CSlMtJChDT05GSUdfU0lFUlBJTlNLSV9GSUxURVIpICAgICAgICAgICAgICs9IHZzcmNf c2llcnBpbnNraS5vCiBPQkpTLSQoQ09ORklHX1NNUFRFQkFSU19GSUxURVIpICAgICAgICAgICAg ICArPSB2c3JjX3Rlc3RzcmMubwogT0JKUy0kKENPTkZJR19TTVBURUhEQkFSU19GSUxURVIpICAg ICAgICAgICAgKz0gdnNyY190ZXN0c3JjLm8KLU9CSlMtJChDT05GSUdfQ09MT1JfVlVMS0FOX0ZJ TFRFUikgICAgICAgICAgICs9IHZzcmNfdGVzdHNyY192dWxrYW4ubyB2dWxrYW4ubyB2dWxrYW5f ZmlsdGVyLm8KK09CSlMtJChDT05GSUdfQ09MT1JfVlVMS0FOX0ZJTFRFUikgICAgICAgICAgICs9 IHZ1bGthbi92c3JjX3Rlc3RzcmNfdnVsa2FuLm8gdnVsa2FuLm8gdnVsa2FuL3Z1bGthbl9maWx0 ZXIubwogT0JKUy0kKENPTkZJR19URVNUU1JDX0ZJTFRFUikgICAgICAgICAgICAgICAgKz0gdnNy Y190ZXN0c3JjLm8KIE9CSlMtJChDT05GSUdfVEVTVFNSQzJfRklMVEVSKSAgICAgICAgICAgICAg ICs9IHZzcmNfdGVzdHNyYy5vCiBPQkpTLSQoQ09ORklHX1lVVlRFU1RTUkNfRklMVEVSKSAgICAg ICAgICAgICArPSB2c3JjX3Rlc3RzcmMubwpAQCAtNjc0LDcgKzY3NCw3IEBAIFNLSVBIRUFERVJT LSQoQ09ORklHX0FNRikgICAgICAgICAgICAgICAgICAgICs9IHZmX2FtZl9jb21tb24uaAogU0tJ UEhFQURFUlMtJChDT05GSUdfUVNWVlBQKSAgICAgICAgICAgICAgICAgKz0gcXN2dnBwLmggc3Rh Y2tfaW50ZXJuYWwuaAogU0tJUEhFQURFUlMtJChDT05GSUdfT1BFTkNMKSAgICAgICAgICAgICAg ICAgKz0gb3BlbmNsLmgKIFNLSVBIRUFERVJTLSQoQ09ORklHX1ZBQVBJKSAgICAgICAgICAgICAg ICAgICs9IHZhYXBpX3ZwcC5oIHN0YWNrX2ludGVybmFsLmgKLVNLSVBIRUFERVJTLSQoQ09ORklH X1ZVTEtBTikgICAgICAgICAgICAgICAgICs9IHZ1bGthbl9maWx0ZXIuaAorU0tJUEhFQURFUlMt JChDT05GSUdfVlVMS0FOKSAgICAgICAgICAgICAgICAgKz0gdnVsa2FuL3Z1bGthbl9maWx0ZXIu aAogCiBUT09MUyAgICAgPSBncmFwaDJkb3QKIFRFU1RQUk9HUyA9IGRyYXd1dGlscyBmaWx0Zm10 cyBmb3JtYXRzIGludGVncmFsCi0tIAoyLjQ5LjEKCgpGcm9tIGNjMTAzYWM5MTljNzU5YzJkNzUx NGJmODExNTQ4ZTUyMGI3YjNiYWMgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCkZyb206IEphbWFp a2ExIDxsdWthc3pjejE4QHdwLnBsPgpEYXRlOiBXZWQsIDMgU2VwIDIwMjUgMTQ6MzA6MzggKzAw MDAKU3ViamVjdDogW1BBVENIIDExOC8xMThdIENoYW5naW5nIHZ1bGthbiBmaWxlIGRpcmVjdG9y eQoKLS0tCiBsaWJhdnV0aWwvTWFrZWZpbGUgfCAxMiArKysrKystLS0tLS0KIDEgZmlsZSBjaGFu Z2VkLCA2IGluc2VydGlvbnMoKyksIDYgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvbGliYXZ1 dGlsL01ha2VmaWxlIGIvbGliYXZ1dGlsL01ha2VmaWxlCmluZGV4IGVlNzdlNTFjMDguLjMzYjNj MmNjOWMgMTAwNjQ0Ci0tLSBhL2xpYmF2dXRpbC9NYWtlZmlsZQorKysgYi9saWJhdnV0aWwvTWFr ZWZpbGUKQEAgLTIxNyw3ICsyMTcsNyBAQCBPQkpTLSQoQ09ORklHX1FTVikgICAgICAgICAgICAg ICAgICAgICAgKz0gaHdjb250ZXh0X3Fzdi5vCiBPQkpTLSQoQ09ORklHX1ZBQVBJKSAgICAgICAg ICAgICAgICAgICAgKz0gaHdjb250ZXh0X3ZhYXBpLm8KIE9CSlMtJChDT05GSUdfVklERU9UT09M Qk9YKSAgICAgICAgICAgICArPSBod2NvbnRleHRfdmlkZW90b29sYm94Lm8KIE9CSlMtJChDT05G SUdfVkRQQVUpICAgICAgICAgICAgICAgICAgICArPSBod2NvbnRleHRfdmRwYXUubwotT0JKUy0k KENPTkZJR19WVUxLQU4pICAgICAgICAgICAgICAgICAgICs9IGh3Y29udGV4dF92dWxrYW4ubyB2 dWxrYW4ubworT0JKUy0kKENPTkZJR19WVUxLQU4pICAgICAgICAgICAgICAgICAgICs9IHZ1bGth bi9od2NvbnRleHRfdnVsa2FuLm8gdnVsa2FuL3Z1bGthbi5vCiAKIE9CSlMtJCghQ09ORklHX1ZV TEtBTikgICAgICAgICAgICAgICAgICArPSBod2NvbnRleHRfc3R1Yi5vCiAKQEAgLTI0NywxMSAr MjQ3LDExIEBAIFNLSVBIRUFERVJTLSQoQ09ORklHX09QRU5DTCkgICAgICAgICAgICs9IGh3Y29u dGV4dF9vcGVuY2wuaAogU0tJUEhFQURFUlMtJChDT05GSUdfVkFBUEkpICAgICAgICAgICAgKz0g aHdjb250ZXh0X3ZhYXBpLmgKIFNLSVBIRUFERVJTLSQoQ09ORklHX1ZJREVPVE9PTEJPWCkgICAg ICs9IGh3Y29udGV4dF92aWRlb3Rvb2xib3guaAogU0tJUEhFQURFUlMtJChDT05GSUdfVkRQQVUp ICAgICAgICAgICAgKz0gaHdjb250ZXh0X3ZkcGF1LmgKLVNLSVBIRUFERVJTLSQoQ09ORklHX1ZV TEtBTikgICAgICAgICAgICs9IGh3Y29udGV4dF92dWxrYW4uaCB2dWxrYW4uaCAgIFwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZ1bGthbl9mdW5jdGlvbnMuaCAg ICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZ1 bGthbl9sb2FkZXIuaAotU0tJUEhFQURFUlMtJChDT05GSUdfTElCU0hBREVSQykgICAgICAgKz0g dnVsa2FuX3NwaXJ2LmgKLVNLSVBIRUFERVJTLSQoQ09ORklHX0xJQkdMU0xBTkcpICAgICAgICs9 IHZ1bGthbl9zcGlydi5oCitTS0lQSEVBREVSUy0kKENPTkZJR19WVUxLQU4pICAgICAgICAgICAr PSB2dWxrYW4vaHdjb250ZXh0X3Z1bGthbi5oIHZ1bGthbi92dWxrYW4uaCAgIFwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZ1bGthbi92dWxrYW5fZnVuY3Rpb25z LmggICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB2dWxrYW4vdnVsa2FuX2xvYWRlci5oCitTS0lQSEVBREVSUy0kKENPTkZJR19MSUJTSEFERVJD KSAgICAgICArPSB2dWxrYW4vdnVsa2FuX3NwaXJ2LmgKK1NLSVBIRUFERVJTLSQoQ09ORklHX0xJ QkdMU0xBTkcpICAgICAgICs9IHZ1bGthbi92dWxrYW5fc3BpcnYuaAogCiBURVNUUFJPR1MgPSBh ZGxlcjMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCiAgICAgICAgICAgICBhZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCi0tIAoyLjQ5LjEKCl9fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fCmZmbXBlZy1kZXZlbCBtYWlsaW5nIGxpc3QgLS0gZmZt cGVnLWRldmVsQGZmbXBlZy5vcmcKVG8gdW5zdWJzY3JpYmUgc2VuZCBhbiBlbWFpbCB0byBmZm1w ZWctZGV2ZWwtbGVhdmVAZmZtcGVnLm9yZwo=