From mboxrd@z Thu Jan 1 00:00:00 1970 From: Manasi Navare Subject: [CI v15 04/17] drm/i915/dsc: Define & Compute VESA DSC params Date: Thu, 29 Nov 2018 11:38:27 -0800 Message-ID: <20181129193827.7914-1-manasi.d.navare@intel.com> References: <20181128202628.20238-4-manasi.d.navare@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by gabe.freedesktop.org (Postfix) with ESMTPS id 59C876E16E for ; Thu, 29 Nov 2018 19:35:24 +0000 (UTC) In-Reply-To: <20181128202628.20238-4-manasi.d.navare@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org RnJvbTogR2F1cmF2IEsgU2luZ2ggPGdhdXJhdi5rLnNpbmdoQGludGVsLmNvbT4KClRoaXMgcGF0 Y2hlcyBkb2VzIHRoZSBmb2xsb3dpbmc6CgoxLiBUaGlzIHBhdGNoIGRlZmluZXMgYWxsIHRoZSBE U0MgcGFyYW1ldGVycyBhcyBwZXIgdGhlIFZFU0EKRFNDIHNwZWNpZmljYXRpb24uIFRoZXNlIGFy ZSBzdG9yZWQgaW4gdGhlIGVuY29kZXIgYW5kIHVzZWQKdG8gY29tcHV0ZSB0aGUgUFBTIHBhcmFt ZXRlcnMgdG8gYmUgc2VudCB0byB0aGUgU2luay4KMi4gQ29tcHV0ZSBhbGwgdGhlIERTQyBwYXJh bWV0ZXJzIHdoaWNoIGFyZSBkZXJpdmVkIGZyb20gRFNDCnN0YXRlIG9mIGludGVsX2NydGNfc3Rh dGUuCjMuIENvbXB1dGUgYWxsIHBhcmFtZXRlcnMgdGhhdCBhcmUgVkVTQSBEU0Mgc3BlY2lmaWMK ClRoaXMgY29tcHV0YXRpb24gaGFwcGVucyBpbiB0aGUgYXRvbWljIGNoZWNrIHBoYXNlIGR1cmlu Zwpjb21wdXRlX2NvbmZpZygpIHRvIHZhbGlkYXRlIGlmIGRpc3BsYXkgc3RyZWFtIGNvbXByZXNz aW9uCmNhbiBiZSBlbmFibGVkIGZvciB0aGUgcmVxdWVzdGVkIG1vZGUuCgp2OCAoRnJvbSBNYW5h c2kpOgoqIERFQlVHX0tNUyBpbnN0ZWFkIG9mIERSTV9FUlJPUiBmb3IgdXNlciB0cmlnZ2VyYWJs ZQplcnJvcnMgKFZpbGxlKQp2NzogKEZyb20gTWFuYXNpKQoqIERvbnQgdXNlIHNpZ25lZCBpbnQg Zm9yIHJjX3JhbmdlX3BhcmFtcyAoTWFuYXNpKQoqIE1hc2sgdGhlIHJhbmdlX2JwZ19vZmZzZXQg dG8gdXNlIG9ubHkgNiBiaXRzCiogQWRkIFNQRFggaWRlbnRpZmllciAoQ2hyaXMgV2lsc29uKQp2 NiAoRnJvbSBNYW5hc2kpOgoqIEFkZCBhIGNoZWNrIGZvciBsaW5lX2J1Zl9kZXB0aCByZXR1cm4g dmFsdWUgKEFudXNoYSkKKiBSZW1vdmUgRFJNIERTQyBjb25zdGFudHMgdG8gZGlmZmVyZW50IHBh dGNoIChNYW5hc2kpCnY1IChGcm9tIE1hbmFzaSk6CiogQWRkIGxvZ2ljIHRvIGxpbWl0IHRoZSBt YXggbGluZSBidWYgZGVwdGggZm9yIERTQyAxLjEgdG8gMTMKYXMgcGVyIERTQyAxLjEgc3BlYwoq IEZpeCBkaW0gY2hlY2twYXRjaCB3YXJuaW5ncy9jaGVja3MKCnY0IChGcm9tIEdhdXJhdik6Ciog UmViYXNlIG9uIGxhdGVzdCBkcm0gdGlwCiogcmVuYW1lIHZhcmlhYmxlIG5hbWUoTWFuYXNpKQoq IFBvcHVsYXRlIGxpbmVidWZfZGVwdGggdmFyaWFibGUoTWFuYXNpKQoKdjMgKEZyb20gR2F1cmF2 KToKKiBSZWJhc2UgbXkgcHJldmlvdXMgcGF0Y2hlcyBvbiB0b3Agb2YgTWFuYXNpJ3MgbGF0ZXN0 IHBhdGNoCnNlcmllcwoqIFVzaW5nID4+biByYXRoZXIgdGhhbiAvMl5uIChNYW5hc2kpCiogQ2hh bmdlIHRoZSBjb21taXQgbWVzc2FnZSB0byBleHBsYWluIHdoYXQgdGhlIHBhdGNoIGlzIGRvaW5n KEdhdXJhdikKCkZpeGVkIHJldmlldyBjb21tZW50cyBmcm9tIFZpbGxlOgoqIERvbid0IHVzZSBt YWNybyBUV09TX0NPTVBMRU1FTlQKKiBNZW50aW9uIGluIGNvbW1lbnQgYWJvdXQgdGhlIHNvdXJj ZSBvZiBSQyBwYXJhbXMKKiBSZXR1cm4gZGlyZWN0bHkgZnJvbSBjYXNlIHN0YXRlbWVudHMKKiBV c2luZyBzaW5nbGUgYXNzc2lnbm1lbnQgZm9yIGFzc2lnbmluZyByY19yYW5nZV9wYXJhbXMKKiBV c2luZyA8PG4gcmF0aGVyIHRoYW4gKjJebiBhbmQgcmVtb3ZpbmcgdGhlIGNvbW1lbnRzCmFib3V0 IHRoZSBmaXhlZCBwb2ludCBudW1iZXJzCgp2MiAoRnJvbSBNYW5hc2kpOgoqIFVwZGF0ZSBsb2dp YyBmb3IgbWlub3IgdmVyc2lvbiB0byBjb25zaWRlciB0aGUgZHBjZCB2YWx1ZQphbmQgd2hhdCBz dXBwb3J0ZWQgYnkgdGhlIEhXIHBsYXRmb3JtCiogVXNlIERSTSBEU0MgY29uZmlnIHN0cnVjdCBp bnN0ZWFkIG9mIGludGVsX2RwIHN0cnVjdAoqIE1vdmUgdGhlIERTQyBjb25zdGFudHMgdG8gRFJN IERTQyBoZWFkZXIgZmlsZQoqIFVzZSB1MTYsIHU4IHdoZXJlIGJpZ2dlciBkYXRhIHR5cGVzIG5v dCBuZWVkZWQKKiAqIENvbXB1dGUgdGhlIERTQyBwYXJhbWV0ZXJzIGFzIHBhcnQgb2YgRFNDIGNv bXB1dGUgY29uZmlnCnNpbmNlIHRoZSBjb21wdXRhdGlvbiBjYW4gZmFpbCAoTWFuYXNpKQoKQ2M6 IEphbmkgTmlrdWxhIDxqYW5pLm5pa3VsYUBsaW51eC5pbnRlbC5jb20+CkNjOiBWaWxsZSBTeXJq YWxhIDx2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbT4KQ2M6IEFudXNoYSBTcml2YXRzYSA8 YW51c2hhLnNyaXZhdHNhQGludGVsLmNvbT4KQ2M6IEdhdXJhdiBLIFNpbmdoIDxnYXVyYXYuay5z aW5naEBpbnRlbC5jb20+ClNpZ25lZC1vZmYtYnk6IEdhdXJhdiBLIFNpbmdoIDxnYXVyYXYuay5z aW5naEBpbnRlbC5jb20+ClNpZ25lZC1vZmYtYnk6IE1hbmFzaSBOYXZhcmUgPG1hbmFzaS5kLm5h dmFyZUBpbnRlbC5jb20+CkNvLWRldmVsb3BlZC1ieTogTWFuYXNpIE5hdmFyZSA8bWFuYXNpLmQu bmF2YXJlQGludGVsLmNvbT4KUmV2aWV3ZWQtYnk6IEFudXNoYSBTcml2YXRzYSA8YW51c2hhLnNy aXZhdHNhQGludGVsLmNvbT4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZSAgICAg fCAgIDMgKy0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwLmMgICB8ICAgNyArCiBkcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaCAgfCAgIDQgKwogZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfdmRzYy5jIHwgNDU2ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogNCBm aWxlcyBjaGFuZ2VkLCA0NjkgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQogY3JlYXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Zkc2MuYwoKZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFr ZWZpbGUKaW5kZXggMGZmODc4Yzk5NGUyLi44MzcwYjlkZTZlNGYgMTAwNjQ0Ci0tLSBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2Vm aWxlCkBAIC0xNTcsNyArMTU3LDggQEAgaTkxNS15ICs9IGR2b19jaDcwMTcubyBcCiAJICBpbnRl bF9zZHZvLm8gXAogCSAgaW50ZWxfdHYubyBcCiAJICB2bHZfZHNpLm8gXAotCSAgdmx2X2RzaV9w bGwubworCSAgdmx2X2RzaV9wbGwubyBcCisJICBpbnRlbF92ZHNjLm8KIAogIyBQb3N0LW1vcnRl bSBkZWJ1ZyBhbmQgR1BVIGhhbmcgc3RhdGUgY2FwdHVyZQogaTkxNS0kKENPTkZJR19EUk1fSTkx NV9DQVBUVVJFX0VSUk9SKSArPSBpOTE1X2dwdV9lcnJvci5vCmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9kcC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHAu YwppbmRleCBhMjc4MDczMzc2OGEuLjNiNjEyZWIxMzRlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfZHAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9k cC5jCkBAIC0xOTUzLDYgKzE5NTMsMTMgQEAgc3RhdGljIGJvb2wgaW50ZWxfZHBfZHNjX2NvbXB1 dGVfY29uZmlnKHN0cnVjdCBpbnRlbF9kcCAqaW50ZWxfZHAsCiAJCQlyZXR1cm4gZmFsc2U7CiAJ CX0KIAl9CisJaWYgKGludGVsX2RwX2NvbXB1dGVfZHNjX3BhcmFtcyhpbnRlbF9kcCwgcGlwZV9j b25maWcpIDwgMCkgeworCQlEUk1fREVCVUdfS01TKCJDYW5ub3QgY29tcHV0ZSB2YWxpZCBEU0Mg cGFyYW1ldGVycyBmb3IgSW5wdXQgQnBwID0gJWQgIgorCQkJICAgICAgIkNvbXByZXNzZWQgQlBQ ID0gJWRcbiIsCisJCQkgICAgICBwaXBlX2NvbmZpZy0+cGlwZV9icHAsCisJCQkgICAgICBwaXBl X2NvbmZpZy0+ZHNjX3BhcmFtcy5jb21wcmVzc2VkX2JwcCk7CisJCXJldHVybiBmYWxzZTsKKwl9 CiAJcGlwZV9jb25maWctPmRzY19wYXJhbXMuY29tcHJlc3Npb25fZW5hYmxlID0gdHJ1ZTsKIAlE Uk1fREVCVUdfS01TKCJEUCBEU0MgY29tcHV0ZWQgd2l0aCBJbnB1dCBCcHAgPSAlZCAiCiAJCSAg ICAgICJDb21wcmVzc2VkIEJwcCA9ICVkIFNsaWNlIENvdW50ID0gJWRcbiIsCmRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX2Rydi5oCmluZGV4IDU1NzdmMGYzMWI5OS4uNDRhNWIyMTc5OWY1IDEwMDY0NAotLS0g YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9kcnYuaApAQCAtMTg1Nyw2ICsxODU3LDEwIEBAIHVpbnQxNl90IGludGVsX2Rw X2RzY19nZXRfb3V0cHV0X2JwcChpbnQgbGlua19jbG9jaywgdWludDhfdCBsYW5lX2NvdW50LAog dWludDhfdCBpbnRlbF9kcF9kc2NfZ2V0X3NsaWNlX2NvdW50KHN0cnVjdCBpbnRlbF9kcCAqaW50 ZWxfZHAsIGludCBtb2RlX2Nsb2NrLAogCQkJCSAgICAgaW50IG1vZGVfaGRpc3BsYXkpOwogCisv KiBpbnRlbF92ZHNjLmMgKi8KK2ludCBpbnRlbF9kcF9jb21wdXRlX2RzY19wYXJhbXMoc3RydWN0 IGludGVsX2RwICppbnRlbF9kcCwKKwkJCQlzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqcGlwZV9j b25maWcpOworCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpbnRlbF9kcF91bnVzZWRfbGFu ZV9tYXNrKGludCBsYW5lX2NvdW50KQogewogCXJldHVybiB+KCgxIDw8IGxhbmVfY291bnQpIC0g MSkgJiAweGY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF92ZHNjLmMg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF92ZHNjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMDAwLi41ZTBmOWFjNTY2N2IKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF92ZHNjLmMKQEAgLTAsMCArMSw0NTYgQEAKKy8vIFNQRFgt TGljZW5zZS1JZGVudGlmaWVyOiBNSVQKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAxOCBJbnRlbCBD b3Jwb3JhdGlvbgorICoKKyAqIEF1dGhvcjogR2F1cmF2IEsgU2luZ2ggPGdhdXJhdi5rLnNpbmdo QGludGVsLmNvbT4KKyAqICAgICAgICAgTWFuYXNpIE5hdmFyZSA8bWFuYXNpLmQubmF2YXJlQGlu dGVsLmNvbT4KKyAqLworCisjaW5jbHVkZSA8ZHJtL2RybVAuaD4KKyNpbmNsdWRlIDxkcm0vaTkx NV9kcm0uaD4KKyNpbmNsdWRlICJpOTE1X2Rydi5oIgorI2luY2x1ZGUgImludGVsX2Rydi5oIgor CitlbnVtIFJPV19JTkRFWF9CUFAgeworCVJPV19JTkRFWF82QlBQID0gMCwKKwlST1dfSU5ERVhf OEJQUCwKKwlST1dfSU5ERVhfMTBCUFAsCisJUk9XX0lOREVYXzEyQlBQLAorCVJPV19JTkRFWF8x NUJQUCwKKwlNQVhfUk9XX0lOREVYCit9OworCitlbnVtIENPTFVNTl9JTkRFWF9CUEMgeworCUNP TFVNTl9JTkRFWF84QlBDID0gMCwKKwlDT0xVTU5fSU5ERVhfMTBCUEMsCisJQ09MVU1OX0lOREVY XzEyQlBDLAorCUNPTFVNTl9JTkRFWF8xNEJQQywKKwlDT0xVTU5fSU5ERVhfMTZCUEMsCisJTUFY X0NPTFVNTl9JTkRFWAorfTsKKworI2RlZmluZSBEU0NfU1VQUE9SVEVEX1ZFUlNJT05fTUlOCQkx CisKKy8qIEZyb20gRFNDX3YxLjExIHNwZWMsIHJjX3BhcmFtZXRlcl9TZXQgc3ludGF4IGVsZW1l bnQgdHlwaWNhbGx5IGNvbnN0YW50ICovCitzdGF0aWMgdTE2IHJjX2J1Zl90aHJlc2hbXSA9IHsK Kwk4OTYsIDE3OTIsIDI2ODgsIDM1ODQsIDQ0ODAsIDUzNzYsIDYyNzIsIDY3MjAsIDcxNjgsIDc2 MTYsCisJNzc0NCwgNzg3MiwgODAwMCwgODA2NAorfTsKKworc3RydWN0IHJjX3BhcmFtZXRlcnMg eworCXUxNiBpbml0aWFsX3htaXRfZGVsYXk7CisJdTggZmlyc3RfbGluZV9icGdfb2Zmc2V0Owor CXUxNiBpbml0aWFsX29mZnNldDsKKwl1OCBmbGF0bmVzc19taW5fcXA7CisJdTggZmxhdG5lc3Nf bWF4X3FwOworCXU4IHJjX3F1YW50X2luY3JfbGltaXQwOworCXU4IHJjX3F1YW50X2luY3JfbGlt aXQxOworCXN0cnVjdCBkcm1fZHNjX3JjX3JhbmdlX3BhcmFtZXRlcnMgcmNfcmFuZ2VfcGFyYW1z W0RTQ19OVU1fQlVGX1JBTkdFU107Cit9OworCisvKgorICogU2VsZWN0ZWQgUmF0ZSBDb250cm9s IFJlbGF0ZWQgUGFyYW1ldGVyIFJlY29tbWVuZGVkIFZhbHVlcworICogZnJvbSBEU0NfdjEuMTEg c3BlYyAmIEMgTW9kZWwgcmVsZWFzZTogRFNDX21vZGVsXzIwMTYxMjEyCisgKi8KK3N0YXRpYyBz dHJ1Y3QgcmNfcGFyYW1ldGVycyByY19wYXJhbXNbXVtNQVhfQ09MVU1OX0lOREVYXSA9IHsKK3sK KwkvKiA2QlBQLzhCUEMgKi8KKwl7IDc2OCwgMTUsIDYxNDQsIDMsIDEzLCAxMSwgMTEsIHsKKwkJ eyAwLCA0LCAwIH0sIHsgMSwgNiwgLTIgfSwgeyAzLCA4LCAtMiB9LCB7IDQsIDgsIC00IH0sCisJ CXsgNSwgOSwgLTYgfSwgeyA1LCA5LCAtNiB9LCB7IDYsIDksIC02IH0sIHsgNiwgMTAsIC04IH0s CisJCXsgNywgMTEsIC04IH0sIHsgOCwgMTIsIC0xMCB9LCB7IDksIDEyLCAtMTAgfSwgeyAxMCwg MTIsIC0xMiB9LAorCQl7IDEwLCAxMiwgLTEyIH0sIHsgMTEsIDEyLCAtMTIgfSwgeyAxMywgMTQs IC0xMiB9CisJCX0KKwl9LAorCS8qIDZCUFAvMTBCUEMgKi8KKwl7IDc2OCwgMTUsIDYxNDQsIDcs IDE3LCAxNSwgMTUsIHsKKwkJeyAwLCA4LCAwIH0sIHsgMywgMTAsIC0yIH0sIHsgNywgMTIsIC0y IH0sIHsgOCwgMTIsIC00IH0sCisJCXsgOSwgMTMsIC02IH0sIHsgOSwgMTMsIC02IH0sIHsgMTAs IDEzLCAtNiB9LCB7IDEwLCAxNCwgLTggfSwKKwkJeyAxMSwgMTUsIC04IH0sIHsgMTIsIDE2LCAt MTAgfSwgeyAxMywgMTYsIC0xMCB9LAorCQl7IDE0LCAxNiwgLTEyIH0sIHsgMTQsIDE2LCAtMTIg fSwgeyAxNSwgMTYsIC0xMiB9LAorCQl7IDE3LCAxOCwgLTEyIH0KKwkJfQorCX0sCisJLyogNkJQ UC8xMkJQQyAqLworCXsgNzY4LCAxNSwgNjE0NCwgMTEsIDIxLCAxOSwgMTksIHsKKwkJeyAwLCAx MiwgMCB9LCB7IDUsIDE0LCAtMiB9LCB7IDExLCAxNiwgLTIgfSwgeyAxMiwgMTYsIC00IH0sCisJ CXsgMTMsIDE3LCAtNiB9LCB7IDEzLCAxNywgLTYgfSwgeyAxNCwgMTcsIC02IH0sIHsgMTQsIDE4 LCAtOCB9LAorCQl7IDE1LCAxOSwgLTggfSwgeyAxNiwgMjAsIC0xMCB9LCB7IDE3LCAyMCwgLTEw IH0sCisJCXsgMTgsIDIwLCAtMTIgfSwgeyAxOCwgMjAsIC0xMiB9LCB7IDE5LCAyMCwgLTEyIH0s CisJCXsgMjEsIDIyLCAtMTIgfQorCQl9CisJfSwKKwkvKiA2QlBQLzE0QlBDICovCisJeyA3Njgs IDE1LCA2MTQ0LCAxNSwgMjUsIDIzLCAyNywgeworCQl7IDAsIDE2LCAwIH0sIHsgNywgMTgsIC0y IH0sIHsgMTUsIDIwLCAtMiB9LCB7IDE2LCAyMCwgLTQgfSwKKwkJeyAxNywgMjEsIC02IH0sIHsg MTcsIDIxLCAtNiB9LCB7IDE4LCAyMSwgLTYgfSwgeyAxOCwgMjIsIC04IH0sCisJCXsgMTksIDIz LCAtOCB9LCB7IDIwLCAyNCwgLTEwIH0sIHsgMjEsIDI0LCAtMTAgfSwKKwkJeyAyMiwgMjQsIC0x MiB9LCB7IDIyLCAyNCwgLTEyIH0sIHsgMjMsIDI0LCAtMTIgfSwKKwkJeyAyNSwgMjYsIC0xMiB9 CisJCX0KKwl9LAorCS8qIDZCUFAvMTZCUEMgKi8KKwl7IDc2OCwgMTUsIDYxNDQsIDE5LCAyOSwg MjcsIDI3LCB7CisJCXsgMCwgMjAsIDAgfSwgeyA5LCAyMiwgLTIgfSwgeyAxOSwgMjQsIC0yIH0s IHsgMjAsIDI0LCAtNCB9LAorCQl7IDIxLCAyNSwgLTYgfSwgeyAyMSwgMjUsIC02IH0sIHsgMjIs IDI1LCAtNiB9LCB7IDIyLCAyNiwgLTggfSwKKwkJeyAyMywgMjcsIC04IH0sIHsgMjQsIDI4LCAt MTAgfSwgeyAyNSwgMjgsIC0xMCB9LAorCQl7IDI2LCAyOCwgLTEyIH0sIHsgMjYsIDI4LCAtMTIg fSwgeyAyNywgMjgsIC0xMiB9LAorCQl7IDI5LCAzMCwgLTEyIH0KKwkJfQorCX0sCit9LAorewor CS8qIDhCUFAvOEJQQyAqLworCXsgNTEyLCAxMiwgNjE0NCwgMywgMTIsIDExLCAxMSwgeworCQl7 IDAsIDQsIDIgfSwgeyAwLCA0LCAwIH0sIHsgMSwgNSwgMCB9LCB7IDEsIDYsIC0yIH0sCisJCXsg MywgNywgLTQgfSwgeyAzLCA3LCAtNiB9LCB7IDMsIDcsIC04IH0sIHsgMywgOCwgLTggfSwKKwkJ eyAzLCA5LCAtOCB9LCB7IDMsIDEwLCAtMTAgfSwgeyA1LCAxMSwgLTEwIH0sIHsgNSwgMTIsIC0x MiB9LAorCQl7IDUsIDEzLCAtMTIgfSwgeyA3LCAxMywgLTEyIH0sIHsgMTMsIDE1LCAtMTIgfQor CQl9CisJfSwKKwkvKiA4QlBQLzEwQlBDICovCisJeyA1MTIsIDEyLCA2MTQ0LCA3LCAxNiwgMTUs IDE1LCB7CisJCXsgMCwgNCwgMiB9LCB7IDQsIDgsIDAgfSwgeyA1LCA5LCAwIH0sIHsgNSwgMTAs IC0yIH0sCisJCXsgNywgMTEsIC00IH0sIHsgNywgMTEsIC02IH0sIHsgNywgMTEsIC04IH0sIHsg NywgMTIsIC04IH0sCisJCXsgNywgMTMsIC04IH0sIHsgNywgMTQsIC0xMCB9LCB7IDksIDE1LCAt MTAgfSwgeyA5LCAxNiwgLTEyIH0sCisJCXsgOSwgMTcsIC0xMiB9LCB7IDExLCAxNywgLTEyIH0s IHsgMTcsIDE5LCAtMTIgfQorCQl9CisJfSwKKwkvKiA4QlBQLzEyQlBDICovCisJeyA1MTIsIDEy LCA2MTQ0LCAxMSwgMjAsIDE5LCAxOSwgeworCQl7IDAsIDEyLCAyIH0sIHsgNCwgMTIsIDAgfSwg eyA5LCAxMywgMCB9LCB7IDksIDE0LCAtMiB9LAorCQl7IDExLCAxNSwgLTQgfSwgeyAxMSwgMTUs IC02IH0sIHsgMTEsIDE1LCAtOCB9LCB7IDExLCAxNiwgLTggfSwKKwkJeyAxMSwgMTcsIC04IH0s IHsgMTEsIDE4LCAtMTAgfSwgeyAxMywgMTksIC0xMCB9LAorCQl7IDEzLCAyMCwgLTEyIH0sIHsg MTMsIDIxLCAtMTIgfSwgeyAxNSwgMjEsIC0xMiB9LAorCQl7IDIxLCAyMywgLTEyIH0KKwkJfQor CX0sCisJLyogOEJQUC8xNEJQQyAqLworCXsgNTEyLCAxMiwgNjE0NCwgMTUsIDI0LCAyMywgMjMs IHsKKwkJeyAwLCAxMiwgMCB9LCB7IDUsIDEzLCAwIH0sIHsgMTEsIDE1LCAwIH0sIHsgMTIsIDE3 LCAtMiB9LAorCQl7IDE1LCAxOSwgLTQgfSwgeyAxNSwgMTksIC02IH0sIHsgMTUsIDE5LCAtOCB9 LCB7IDE1LCAyMCwgLTggfSwKKwkJeyAxNSwgMjEsIC04IH0sIHsgMTUsIDIyLCAtMTAgfSwgeyAx NywgMjIsIC0xMCB9LAorCQl7IDE3LCAyMywgLTEyIH0sIHsgMTcsIDIzLCAtMTIgfSwgeyAyMSwg MjQsIC0xMiB9LAorCQl7IDI0LCAyNSwgLTEyIH0KKwkJfQorCX0sCisJLyogOEJQUC8xNkJQQyAq LworCXsgNTEyLCAxMiwgNjE0NCwgMTksIDI4LCAyNywgMjcsIHsKKwkJeyAwLCAxMiwgMiB9LCB7 IDYsIDE0LCAwIH0sIHsgMTMsIDE3LCAwIH0sIHsgMTUsIDIwLCAtMiB9LAorCQl7IDE5LCAyMywg LTQgfSwgeyAxOSwgMjMsIC02IH0sIHsgMTksIDIzLCAtOCB9LCB7IDE5LCAyNCwgLTggfSwKKwkJ eyAxOSwgMjUsIC04IH0sIHsgMTksIDI2LCAtMTAgfSwgeyAyMSwgMjYsIC0xMCB9LAorCQl7IDIx LCAyNywgLTEyIH0sIHsgMjEsIDI3LCAtMTIgfSwgeyAyNSwgMjgsIC0xMiB9LAorCQl7IDI4LCAy OSwgLTEyIH0KKwkJfQorCX0sCit9LAoreworCS8qIDEwQlBQLzhCUEMgKi8KKwl7IDQxMCwgMTUs IDU2MzIsIDMsIDEyLCAxMSwgMTEsIHsKKwkJeyAwLCAzLCAyIH0sIHsgMCwgNCwgMCB9LCB7IDEs IDUsIDAgfSwgeyAyLCA2LCAtMiB9LAorCQl7IDMsIDcsIC00IH0sIHsgMywgNywgLTYgfSwgeyAz LCA3LCAtOCB9LCB7IDMsIDgsIC04IH0sCisJCXsgMywgOSwgLTggfSwgeyAzLCA5LCAtMTAgfSwg eyA1LCAxMCwgLTEwIH0sIHsgNSwgMTAsIC0xMCB9LAorCQl7IDUsIDExLCAtMTIgfSwgeyA3LCAx MSwgLTEyIH0sIHsgMTEsIDEyLCAtMTIgfQorCQl9CisJfSwKKwkvKiAxMEJQUC8xMEJQQyAqLwor CXsgNDEwLCAxNSwgNTYzMiwgNywgMTYsIDE1LCAxNSwgeworCQl7IDAsIDcsIDIgfSwgeyA0LCA4 LCAwIH0sIHsgNSwgOSwgMCB9LCB7IDYsIDEwLCAtMiB9LAorCQl7IDcsIDExLCAtNCB9LCB7IDcs IDExLCAtNiB9LCB7IDcsIDExLCAtOCB9LCB7IDcsIDEyLCAtOCB9LAorCQl7IDcsIDEzLCAtOCB9 LCB7IDcsIDEzLCAtMTAgfSwgeyA5LCAxNCwgLTEwIH0sIHsgOSwgMTQsIC0xMCB9LAorCQl7IDks IDE1LCAtMTIgfSwgeyAxMSwgMTUsIC0xMiB9LCB7IDE1LCAxNiwgLTEyIH0KKwkJfQorCX0sCisJ LyogMTBCUFAvMTJCUEMgKi8KKwl7IDQxMCwgMTUsIDU2MzIsIDExLCAyMCwgMTksIDE5LCB7CisJ CXsgMCwgMTEsIDIgfSwgeyA0LCAxMiwgMCB9LCB7IDksIDEzLCAwIH0sIHsgMTAsIDE0LCAtMiB9 LAorCQl7IDExLCAxNSwgLTQgfSwgeyAxMSwgMTUsIC02IH0sIHsgMTEsIDE1LCAtOCB9LCB7IDEx LCAxNiwgLTggfSwKKwkJeyAxMSwgMTcsIC04IH0sIHsgMTEsIDE3LCAtMTAgfSwgeyAxMywgMTgs IC0xMCB9LAorCQl7IDEzLCAxOCwgLTEwIH0sIHsgMTMsIDE5LCAtMTIgfSwgeyAxNSwgMTksIC0x MiB9LAorCQl7IDE5LCAyMCwgLTEyIH0KKwkJfQorCX0sCisJLyogMTBCUFAvMTRCUEMgKi8KKwl7 IDQxMCwgMTUsIDU2MzIsIDE1LCAyNCwgMjMsIDIzLCB7CisJCXsgMCwgMTEsIDIgfSwgeyA1LCAx MywgMCB9LCB7IDExLCAxNSwgMCB9LCB7IDEzLCAxOCwgLTIgfSwKKwkJeyAxNSwgMTksIC00IH0s IHsgMTUsIDE5LCAtNiB9LCB7IDE1LCAxOSwgLTggfSwgeyAxNSwgMjAsIC04IH0sCisJCXsgMTUs IDIxLCAtOCB9LCB7IDE1LCAyMSwgLTEwIH0sIHsgMTcsIDIyLCAtMTAgfSwKKwkJeyAxNywgMjIs IC0xMCB9LCB7IDE3LCAyMywgLTEyIH0sIHsgMTksIDIzLCAtMTIgfSwKKwkJeyAyMywgMjQsIC0x MiB9CisJCX0KKwl9LAorCS8qIDEwQlBQLzE2QlBDICovCisJeyA0MTAsIDE1LCA1NjMyLCAxOSwg MjgsIDI3LCAyNywgeworCQl7IDAsIDExLCAyIH0sIHsgNiwgMTQsIDAgfSwgeyAxMywgMTcsIDAg fSwgeyAxNiwgMjAsIC0yIH0sCisJCXsgMTksIDIzLCAtNCB9LCB7IDE5LCAyMywgLTYgfSwgeyAx OSwgMjMsIC04IH0sIHsgMTksIDI0LCAtOCB9LAorCQl7IDE5LCAyNSwgLTggfSwgeyAxOSwgMjUs IC0xMCB9LCB7IDIxLCAyNiwgLTEwIH0sCisJCXsgMjEsIDI2LCAtMTAgfSwgeyAyMSwgMjcsIC0x MiB9LCB7IDIzLCAyNywgLTEyIH0sCisJCXsgMjcsIDI4LCAtMTIgfQorCQl9CisJfSwKK30sCit7 CisJLyogMTJCUFAvOEJQQyAqLworCXsgMzQxLCAxNSwgMjA0OCwgMywgMTIsIDExLCAxMSwgewor CQl7IDAsIDIsIDIgfSwgeyAwLCA0LCAwIH0sIHsgMSwgNSwgMCB9LCB7IDEsIDYsIC0yIH0sCisJ CXsgMywgNywgLTQgfSwgeyAzLCA3LCAtNiB9LCB7IDMsIDcsIC04IH0sIHsgMywgOCwgLTggfSwK KwkJeyAzLCA5LCAtOCB9LCB7IDMsIDEwLCAtMTAgfSwgeyA1LCAxMSwgLTEwIH0sCisJCXsgNSwg MTIsIC0xMiB9LCB7IDUsIDEzLCAtMTIgfSwgeyA3LCAxMywgLTEyIH0sIHsgMTMsIDE1LCAtMTIg fQorCQl9CisJfSwKKwkvKiAxMkJQUC8xMEJQQyAqLworCXsgMzQxLCAxNSwgMjA0OCwgNywgMTYs IDE1LCAxNSwgeworCQl7IDAsIDIsIDIgfSwgeyAyLCA1LCAwIH0sIHsgMywgNywgMCB9LCB7IDQs IDgsIC0yIH0sCisJCXsgNiwgOSwgLTQgfSwgeyA3LCAxMCwgLTYgfSwgeyA3LCAxMSwgLTggfSwg eyA3LCAxMiwgLTggfSwKKwkJeyA3LCAxMywgLTggfSwgeyA3LCAxNCwgLTEwIH0sIHsgOSwgMTUs IC0xMCB9LCB7IDksIDE2LCAtMTIgfSwKKwkJeyA5LCAxNywgLTEyIH0sIHsgMTEsIDE3LCAtMTIg fSwgeyAxNywgMTksIC0xMiB9CisJCX0KKwl9LAorCS8qIDEyQlBQLzEyQlBDICovCisJeyAzNDEs IDE1LCAyMDQ4LCAxMSwgMjAsIDE5LCAxOSwgeworCQl7IDAsIDYsIDIgfSwgeyA0LCA5LCAwIH0s IHsgNywgMTEsIDAgfSwgeyA4LCAxMiwgLTIgfSwKKwkJeyAxMCwgMTMsIC00IH0sIHsgMTEsIDE0 LCAtNiB9LCB7IDExLCAxNSwgLTggfSwgeyAxMSwgMTYsIC04IH0sCisJCXsgMTEsIDE3LCAtOCB9 LCB7IDExLCAxOCwgLTEwIH0sIHsgMTMsIDE5LCAtMTAgfSwKKwkJeyAxMywgMjAsIC0xMiB9LCB7 IDEzLCAyMSwgLTEyIH0sIHsgMTUsIDIxLCAtMTIgfSwKKwkJeyAyMSwgMjMsIC0xMiB9CisJCX0K Kwl9LAorCS8qIDEyQlBQLzE0QlBDICovCisJeyAzNDEsIDE1LCAyMDQ4LCAxNSwgMjQsIDIzLCAy MywgeworCQl7IDAsIDYsIDIgfSwgeyA3LCAxMCwgMCB9LCB7IDksIDEzLCAwIH0sIHsgMTEsIDE2 LCAtMiB9LAorCQl7IDE0LCAxNywgLTQgfSwgeyAxNSwgMTgsIC02IH0sIHsgMTUsIDE5LCAtOCB9 LCB7IDE1LCAyMCwgLTggfSwKKwkJeyAxNSwgMjAsIC04IH0sIHsgMTUsIDIxLCAtMTAgfSwgeyAx NywgMjEsIC0xMCB9LAorCQl7IDE3LCAyMSwgLTEyIH0sIHsgMTcsIDIxLCAtMTIgfSwgeyAxOSwg MjIsIC0xMiB9LAorCQl7IDIyLCAyMywgLTEyIH0KKwkJfQorCX0sCisJLyogMTJCUFAvMTZCUEMg Ki8KKwl7IDM0MSwgMTUsIDIwNDgsIDE5LCAyOCwgMjcsIDI3LCB7CisJCXsgMCwgNiwgMiB9LCB7 IDYsIDExLCAwIH0sIHsgMTEsIDE1LCAwIH0sIHsgMTQsIDE4LCAtMiB9LAorCQl7IDE4LCAyMSwg LTQgfSwgeyAxOSwgMjIsIC02IH0sIHsgMTksIDIzLCAtOCB9LCB7IDE5LCAyNCwgLTggfSwKKwkJ eyAxOSwgMjQsIC04IH0sIHsgMTksIDI1LCAtMTAgfSwgeyAyMSwgMjUsIC0xMCB9LAorCQl7IDIx LCAyNSwgLTEyIH0sIHsgMjEsIDI1LCAtMTIgfSwgeyAyMywgMjYsIC0xMiB9LAorCQl7IDI2LCAy NywgLTEyIH0KKwkJfQorCX0sCit9LAoreworCS8qIDE1QlBQLzhCUEMgKi8KKwl7IDI3MywgMTUs IDIwNDgsIDMsIDEyLCAxMSwgMTEsIHsKKwkJeyAwLCAwLCAxMCB9LCB7IDAsIDEsIDggfSwgeyAw LCAxLCA2IH0sIHsgMCwgMiwgNCB9LAorCQl7IDEsIDIsIDIgfSwgeyAxLCAzLCAwIH0sIHsgMSwg MywgLTIgfSwgeyAyLCA0LCAtNCB9LAorCQl7IDIsIDUsIC02IH0sIHsgMywgNSwgLTggfSwgeyA0 LCA2LCAtMTAgfSwgeyA0LCA3LCAtMTAgfSwKKwkJeyA1LCA3LCAtMTIgfSwgeyA3LCA4LCAtMTIg fSwgeyA4LCA5LCAtMTIgfQorCQl9CisJfSwKKwkvKiAxNUJQUC8xMEJQQyAqLworCXsgMjczLCAx NSwgMjA0OCwgNywgMTYsIDE1LCAxNSwgeworCQl7IDAsIDIsIDEwIH0sIHsgMiwgNSwgOCB9LCB7 IDMsIDUsIDYgfSwgeyA0LCA2LCA0IH0sCisJCXsgNSwgNiwgMiB9LCB7IDUsIDcsIDAgfSwgeyA1 LCA3LCAtMiB9LCB7IDYsIDgsIC00IH0sCisJCXsgNiwgOSwgLTYgfSwgeyA3LCA5LCAtOCB9LCB7 IDgsIDEwLCAtMTAgfSwgeyA4LCAxMSwgLTEwIH0sCisJCXsgOSwgMTEsIC0xMiB9LCB7IDExLCAx MiwgLTEyIH0sIHsgMTIsIDEzLCAtMTIgfQorCQl9CisJfSwKKwkvKiAxNUJQUC8xMkJQQyAqLwor CXsgMjczLCAxNSwgMjA0OCwgMTEsIDIwLCAxOSwgMTksIHsKKwkJeyAwLCA0LCAxMCB9LCB7IDIs IDcsIDggfSwgeyA0LCA5LCA2IH0sIHsgNiwgMTEsIDQgfSwKKwkJeyA5LCAxMSwgMiB9LCB7IDks IDExLCAwIH0sIHsgOSwgMTIsIC0yIH0sIHsgMTAsIDEyLCAtNCB9LAorCQl7IDExLCAxMywgLTYg fSwgeyAxMSwgMTMsIC04IH0sIHsgMTIsIDE0LCAtMTAgfSwKKwkJeyAxMywgMTUsIC0xMCB9LCB7 IDEzLCAxNSwgLTEyIH0sIHsgMTUsIDE2LCAtMTIgfSwKKwkJeyAxNiwgMTcsIC0xMiB9CisJCX0K Kwl9LAorCS8qIDE1QlBQLzE0QlBDICovCisJeyAyNzMsIDE1LCAyMDQ4LCAxNSwgMjQsIDIzLCAy MywgeworCQl7IDAsIDQsIDEwIH0sIHsgMywgOCwgOCB9LCB7IDYsIDExLCA2IH0sIHsgOSwgMTQs IDQgfSwKKwkJeyAxMywgMTUsIDIgfSwgeyAxMywgMTUsIDAgfSwgeyAxMywgMTYsIC0yIH0sIHsg MTQsIDE2LCAtNCB9LAorCQl7IDE1LCAxNywgLTYgfSwgeyAxNSwgMTcsIC04IH0sIHsgMTYsIDE4 LCAtMTAgfSwKKwkJeyAxNywgMTksIC0xMCB9LCB7IDE3LCAxOSwgLTEyIH0sIHsgMTksIDIwLCAt MTIgfSwKKwkJeyAyMCwgMjEsIC0xMiB9CisJCX0KKwl9LAorCS8qIDE1QlBQLzE2QlBDICovCisJ eyAyNzMsIDE1LCAyMDQ4LCAxOSwgMjgsIDI3LCAyNywgeworCQl7IDAsIDQsIDEwIH0sIHsgNCwg OSwgOCB9LCB7IDgsIDEzLCA2IH0sIHsgMTIsIDE3LCA0IH0sCisJCXsgMTcsIDE5LCAyIH0sIHsg MTcsIDIwLCAwIH0sIHsgMTcsIDIwLCAtMiB9LCB7IDE4LCAyMCwgLTQgfSwKKwkJeyAxOSwgMjEs IC02IH0sIHsgMTksIDIxLCAtOCB9LCB7IDIwLCAyMiwgLTEwIH0sCisJCXsgMjEsIDIzLCAtMTAg fSwgeyAyMSwgMjMsIC0xMiB9LCB7IDIzLCAyNCwgLTEyIH0sCisJCXsgMjQsIDI1LCAtMTIgfQor CQl9CisJfQorfQorCit9OworCitzdGF0aWMgaW50IGdldF9yb3dfaW5kZXhfZm9yX3JjX3BhcmFt cyh1MTYgY29tcHJlc3NlZF9icHApCit7CisJc3dpdGNoIChjb21wcmVzc2VkX2JwcCkgeworCWNh c2UgNjoKKwkJcmV0dXJuIFJPV19JTkRFWF82QlBQOworCWNhc2UgODoKKwkJcmV0dXJuIFJPV19J TkRFWF84QlBQOworCWNhc2UgMTA6CisJCXJldHVybiBST1dfSU5ERVhfMTBCUFA7CisJY2FzZSAx MjoKKwkJcmV0dXJuIFJPV19JTkRFWF8xMkJQUDsKKwljYXNlIDE1OgorCQlyZXR1cm4gUk9XX0lO REVYXzE1QlBQOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KK30KKworc3RhdGlj IGludCBnZXRfY29sdW1uX2luZGV4X2Zvcl9yY19wYXJhbXModTggYml0c19wZXJfY29tcG9uZW50 KQoreworCXN3aXRjaCAoYml0c19wZXJfY29tcG9uZW50KSB7CisJY2FzZSA4OgorCQlyZXR1cm4g Q09MVU1OX0lOREVYXzhCUEM7CisJY2FzZSAxMDoKKwkJcmV0dXJuIENPTFVNTl9JTkRFWF8xMEJQ QzsKKwljYXNlIDEyOgorCQlyZXR1cm4gQ09MVU1OX0lOREVYXzEyQlBDOworCWNhc2UgMTQ6CisJ CXJldHVybiBDT0xVTU5fSU5ERVhfMTRCUEM7CisJY2FzZSAxNjoKKwkJcmV0dXJuIENPTFVNTl9J TkRFWF8xNkJQQzsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9Cit9CisKK2ludCBp bnRlbF9kcF9jb21wdXRlX2RzY19wYXJhbXMoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwKKwkJ CQlzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqcGlwZV9jb25maWcpCit7CisJc3RydWN0IGRybV9k c2NfY29uZmlnICp2ZHNjX2NmZyA9ICZwaXBlX2NvbmZpZy0+ZHBfZHNjX2NmZzsKKwl1MTYgY29t cHJlc3NlZF9icHAgPSBwaXBlX2NvbmZpZy0+ZHNjX3BhcmFtcy5jb21wcmVzc2VkX2JwcDsKKwl1 OCBpID0gMDsKKwlpbnQgcm93X2luZGV4ID0gMDsKKwlpbnQgY29sdW1uX2luZGV4ID0gMDsKKwl1 OCBsaW5lX2J1Zl9kZXB0aCA9IDA7CisKKwl2ZHNjX2NmZy0+cGljX3dpZHRoID0gcGlwZV9jb25m aWctPmJhc2UuYWRqdXN0ZWRfbW9kZS5jcnRjX2hkaXNwbGF5OworCXZkc2NfY2ZnLT5waWNfaGVp Z2h0ID0gcGlwZV9jb25maWctPmJhc2UuYWRqdXN0ZWRfbW9kZS5jcnRjX3ZkaXNwbGF5OworCXZk c2NfY2ZnLT5zbGljZV93aWR0aCA9IERJVl9ST1VORF9VUCh2ZHNjX2NmZy0+cGljX3dpZHRoLAor CQkJCQkgICAgIHBpcGVfY29uZmlnLT5kc2NfcGFyYW1zLnNsaWNlX2NvdW50KTsKKwkvKgorCSAq IFNsaWNlIEhlaWdodCBvZiA4IHdvcmtzIGZvciBhbGwgY3VycmVudGx5IGF2YWlsYWJsZSBwYW5l bHMuIFNvIHN0YXJ0CisJICogd2l0aCB0aGF0IGlmIHBpY19oZWlnaHQgaXMgYW4gaW50ZWdyYWwg bXVsdGlwbGUgb2YgOC4KKwkgKiBFdmVudHVhbGx5IGFkZCBsb2dpYyB0byB0cnkgbXVsdGlwbGUg c2xpY2UgaGVpZ2h0cy4KKwkgKi8KKwlpZiAodmRzY19jZmctPnBpY19oZWlnaHQgJSA4ID09IDAp CisJCXZkc2NfY2ZnLT5zbGljZV9oZWlnaHQgPSA4OworCWVsc2UgaWYgKHZkc2NfY2ZnLT5waWNf aGVpZ2h0ICUgNCA9PSAwKQorCQl2ZHNjX2NmZy0+c2xpY2VfaGVpZ2h0ID0gNDsKKwllbHNlCisJ CXZkc2NfY2ZnLT5zbGljZV9oZWlnaHQgPSAyOworCisJLyogVmFsdWVzIGZpbGxlZCBmcm9tIERT QyBTaW5rIERQQ0QgKi8KKwl2ZHNjX2NmZy0+ZHNjX3ZlcnNpb25fbWFqb3IgPQorCQkoaW50ZWxf ZHAtPmRzY19kcGNkW0RQX0RTQ19SRVYgLSBEUF9EU0NfU1VQUE9SVF0gJgorCQkgRFBfRFNDX01B Sk9SX01BU0spID4+IERQX0RTQ19NQUpPUl9TSElGVDsKKwl2ZHNjX2NmZy0+ZHNjX3ZlcnNpb25f bWlub3IgPQorCQltaW4oRFNDX1NVUFBPUlRFRF9WRVJTSU9OX01JTiwKKwkJICAgIChpbnRlbF9k cC0+ZHNjX2RwY2RbRFBfRFNDX1JFViAtIERQX0RTQ19TVVBQT1JUXSAmCisJCSAgICAgRFBfRFND X01JTk9SX01BU0spID4+IERQX0RTQ19NSU5PUl9TSElGVCk7CisKKwl2ZHNjX2NmZy0+Y29udmVy dF9yZ2IgPSBpbnRlbF9kcC0+ZHNjX2RwY2RbRFBfRFNDX0RFQ19DT0xPUl9GT1JNQVRfQ0FQIC0g RFBfRFNDX1NVUFBPUlRdICYKKwkJRFBfRFNDX1JHQjsKKworCWxpbmVfYnVmX2RlcHRoID0gZHJt X2RwX2RzY19zaW5rX2xpbmVfYnVmX2RlcHRoKGludGVsX2RwLT5kc2NfZHBjZCk7CisJaWYgKCFs aW5lX2J1Zl9kZXB0aCkgeworCQlEUk1fREVCVUdfS01TKCJEU0MgU2luayBMaW5lIEJ1ZmZlciBE ZXB0aCBpbnZhbGlkXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWlmICh2ZHNjX2NmZy0+ ZHNjX3ZlcnNpb25fbWlub3IgPT0gMikKKwkJdmRzY19jZmctPmxpbmVfYnVmX2RlcHRoID0gKGxp bmVfYnVmX2RlcHRoID09IERTQ18xXzJfTUFYX0xJTkVCVUZfREVQVEhfQklUUykgPworCQkJRFND XzFfMl9NQVhfTElORUJVRl9ERVBUSF9WQUwgOiBsaW5lX2J1Zl9kZXB0aDsKKwllbHNlCisJCXZk c2NfY2ZnLT5saW5lX2J1Zl9kZXB0aCA9IChsaW5lX2J1Zl9kZXB0aCA+IERTQ18xXzFfTUFYX0xJ TkVCVUZfREVQVEhfQklUUykgPworCQkJRFNDXzFfMV9NQVhfTElORUJVRl9ERVBUSF9CSVRTIDog bGluZV9idWZfZGVwdGg7CisKKwkvKiBHZW4gMTEgZG9lcyBub3Qgc3VwcG9ydCBZQ2JDciAqLwor CXZkc2NfY2ZnLT5lbmFibGU0MjIgPSBmYWxzZTsKKwkvKiBHZW4gMTEgZG9lcyBub3Qgc3VwcG9y dCBWQlIgKi8KKwl2ZHNjX2NmZy0+dmJyX2VuYWJsZSA9IGZhbHNlOworCXZkc2NfY2ZnLT5ibG9j a19wcmVkX2VuYWJsZSA9CisJCQlpbnRlbF9kcC0+ZHNjX2RwY2RbRFBfRFNDX0JMS19QUkVESUNU SU9OX1NVUFBPUlQgLSBEUF9EU0NfU1VQUE9SVF0gJgorCQlEUF9EU0NfQkxLX1BSRURJQ1RJT05f SVNfU1VQUE9SVEVEOworCisJLyogR2VuIDExIG9ubHkgc3VwcG9ydHMgaW50ZWdyYWwgdmFsdWVz IG9mIGJwcCAqLworCXZkc2NfY2ZnLT5iaXRzX3Blcl9waXhlbCA9IGNvbXByZXNzZWRfYnBwIDw8 IDQ7CisJdmRzY19jZmctPmJpdHNfcGVyX2NvbXBvbmVudCA9IHBpcGVfY29uZmlnLT5waXBlX2Jw cCAvIDM7CisKKwlmb3IgKGkgPSAwOyBpIDwgRFNDX05VTV9CVUZfUkFOR0VTIC0gMTsgaSsrKSB7 CisJCS8qCisJCSAqIHNpeCAwcyBhcmUgYXBwZW5kZWQgdG8gdGhlIGxzYiBvZiBlYWNoIHRocmVz aG9sZCB2YWx1ZQorCQkgKiBpbnRlcm5hbGx5IGluIGgvdy4KKwkJICogT25seSA4IGJpdHMgYXJl IGFsbG93ZWQgZm9yIHByb2dyYW1taW5nIFJjQnVmVGhyZXNob2xkCisJCSAqLworCQl2ZHNjX2Nm Zy0+cmNfYnVmX3RocmVzaFtpXSA9IHJjX2J1Zl90aHJlc2hbaV0gPj4gNjsKKwl9CisKKwkvKgor CSAqIEZvciA2YnBwLCBSQyBCdWZmZXIgdGhyZXNob2xkIDEyIGFuZCAxMyBuZWVkIGEgZGlmZmVy ZW50IHZhbHVlCisJICogYXMgcGVyIEMgTW9kZWwKKwkgKi8KKwlpZiAoY29tcHJlc3NlZF9icHAg PT0gNikgeworCQl2ZHNjX2NmZy0+cmNfYnVmX3RocmVzaFsxMl0gPSAweDdDOworCQl2ZHNjX2Nm Zy0+cmNfYnVmX3RocmVzaFsxM10gPSAweDdEOworCX0KKworCXJvd19pbmRleCA9IGdldF9yb3df aW5kZXhfZm9yX3JjX3BhcmFtcyhjb21wcmVzc2VkX2JwcCk7CisJY29sdW1uX2luZGV4ID0KKwkJ Z2V0X2NvbHVtbl9pbmRleF9mb3JfcmNfcGFyYW1zKHZkc2NfY2ZnLT5iaXRzX3Blcl9jb21wb25l bnQpOworCisJaWYgKHJvd19pbmRleCA8IDAgfHwgY29sdW1uX2luZGV4IDwgMCkKKwkJcmV0dXJu IC1FSU5WQUw7CisKKwl2ZHNjX2NmZy0+Zmlyc3RfbGluZV9icGdfb2Zmc2V0ID0KKwkJcmNfcGFy YW1zW3Jvd19pbmRleF1bY29sdW1uX2luZGV4XS5maXJzdF9saW5lX2JwZ19vZmZzZXQ7CisJdmRz Y19jZmctPmluaXRpYWxfeG1pdF9kZWxheSA9CisJCXJjX3BhcmFtc1tyb3dfaW5kZXhdW2NvbHVt bl9pbmRleF0uaW5pdGlhbF94bWl0X2RlbGF5OworCXZkc2NfY2ZnLT5pbml0aWFsX29mZnNldCA9 CisJCXJjX3BhcmFtc1tyb3dfaW5kZXhdW2NvbHVtbl9pbmRleF0uaW5pdGlhbF9vZmZzZXQ7CisJ dmRzY19jZmctPmZsYXRuZXNzX21pbl9xcCA9CisJCXJjX3BhcmFtc1tyb3dfaW5kZXhdW2NvbHVt bl9pbmRleF0uZmxhdG5lc3NfbWluX3FwOworCXZkc2NfY2ZnLT5mbGF0bmVzc19tYXhfcXAgPQor CQlyY19wYXJhbXNbcm93X2luZGV4XVtjb2x1bW5faW5kZXhdLmZsYXRuZXNzX21heF9xcDsKKwl2 ZHNjX2NmZy0+cmNfcXVhbnRfaW5jcl9saW1pdDAgPQorCQlyY19wYXJhbXNbcm93X2luZGV4XVtj b2x1bW5faW5kZXhdLnJjX3F1YW50X2luY3JfbGltaXQwOworCXZkc2NfY2ZnLT5yY19xdWFudF9p bmNyX2xpbWl0MSA9CisJCXJjX3BhcmFtc1tyb3dfaW5kZXhdW2NvbHVtbl9pbmRleF0ucmNfcXVh bnRfaW5jcl9saW1pdDE7CisKKwlmb3IgKGkgPSAwOyBpIDwgRFNDX05VTV9CVUZfUkFOR0VTOyBp KyspIHsKKwkJdmRzY19jZmctPnJjX3JhbmdlX3BhcmFtc1tpXS5yYW5nZV9taW5fcXAgPQorCQkJ cmNfcGFyYW1zW3Jvd19pbmRleF1bY29sdW1uX2luZGV4XS5yY19yYW5nZV9wYXJhbXNbaV0ucmFu Z2VfbWluX3FwOworCQl2ZHNjX2NmZy0+cmNfcmFuZ2VfcGFyYW1zW2ldLnJhbmdlX21heF9xcCA9 CisJCQlyY19wYXJhbXNbcm93X2luZGV4XVtjb2x1bW5faW5kZXhdLnJjX3JhbmdlX3BhcmFtc1tp XS5yYW5nZV9tYXhfcXA7CisJCS8qCisJCSAqIFJhbmdlIEJQRyBPZmZzZXQgdXNlcyAyJ3MgY29t cGxlbWVudCBhbmQgaXMgb25seSBhIDYgYml0cy4gU28KKwkJICogbWFzayBpdCB0byBnZXQgb25s eSA2IGJpdHMuCisJCSAqLworCQl2ZHNjX2NmZy0+cmNfcmFuZ2VfcGFyYW1zW2ldLnJhbmdlX2Jw Z19vZmZzZXQgPQorCQkJcmNfcGFyYW1zW3Jvd19pbmRleF1bY29sdW1uX2luZGV4XS5yY19yYW5n ZV9wYXJhbXNbaV0ucmFuZ2VfYnBnX29mZnNldCAmCisJCQlEU0NfUkFOR0VfQlBHX09GRlNFVF9N QVNLOworCX0KKworCS8qCisJICogQml0c1BlckNvbXBvbmVudCB2YWx1ZSBkZXRlcm1pbmVzIG11 eF93b3JkX3NpemU6CisJICogV2hlbiBCaXRzUGVyQ29tcG9uZW50IGlzIDEyYnBjLCBtdXhXb3Jk U2l6ZSB3aWxsIGJlIGVxdWFsIHRvIDY0IGJpdHMKKwkgKiBXaGVuIEJpdHNQZXJDb21wb25lbnQg aXMgOCBvciAxMGJwYywgbXV4V29yZFNpemUgd2lsbCBiZSBlcXVhbCB0bworCSAqIDQ4IGJpdHMK KwkgKi8KKwlpZiAodmRzY19jZmctPmJpdHNfcGVyX2NvbXBvbmVudCA9PSA4IHx8CisJICAgIHZk c2NfY2ZnLT5iaXRzX3Blcl9jb21wb25lbnQgPT0gMTApCisJCXZkc2NfY2ZnLT5tdXhfd29yZF9z aXplID0gRFNDX01VWF9XT1JEX1NJWkVfOF8xMF9CUEM7CisJZWxzZSBpZiAodmRzY19jZmctPmJp dHNfcGVyX2NvbXBvbmVudCA9PSAxMikKKwkJdmRzY19jZmctPm11eF93b3JkX3NpemUgPSBEU0Nf TVVYX1dPUkRfU0laRV8xMl9CUEM7CisKKwkvKiBSQ19NT0RFTF9TSVpFIGlzIGEgY29uc3RhbnQg YWNyb3NzIGFsbCBjb25maWd1cmF0aW9ucyAqLworCXZkc2NfY2ZnLT5yY19tb2RlbF9zaXplID0g RFNDX1JDX01PREVMX1NJWkVfQ09OU1Q7CisJLyogSW5pdGlhbFNjYWxlVmFsdWUgaXMgYSA2IGJp dCB2YWx1ZSB3aXRoIDMgZnJhY3Rpb25hbCBiaXRzIChVMy4zKSAqLworCXZkc2NfY2ZnLT5pbml0 aWFsX3NjYWxlX3ZhbHVlID0gKHZkc2NfY2ZnLT5yY19tb2RlbF9zaXplIDw8IDMpIC8KKwkJKHZk c2NfY2ZnLT5yY19tb2RlbF9zaXplIC0gdmRzY19jZmctPmluaXRpYWxfb2Zmc2V0KTsKKworCXJl dHVybiAwOworfQotLSAKMi4xOS4xCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVl ZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5m by9pbnRlbC1nZngK