From: hank peng Subject: Re: [PATCH v2 2/2] Crypto: Talitos: Support for Async_tx XOR offload Date: Wed, 14 Jul 2010 11:58:00 +0800 Message-ID: References: <1260977698-4076-1-git-send-email-Vishnu@freescale.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Cc: herbert@gondor.apana.org.au, B04825@freescale.com, linux-kernel@vger.kernel.org, linux-raid@vger.kernel.org, linuxppc-dev@ozlabs.org, linux-crypto@vger.kernel.org, dan.j.williams@intel.com, Maneesh Gupta , R58472@freescale.com To: Vishnu Suresh Return-path: In-Reply-To: <1260977698-4076-1-git-send-email-Vishnu@freescale.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: linuxppc-dev-bounces+glppe-linuxppc-embedded-2=m.gmane.org@lists.ozlabs.org Errors-To: linuxppc-dev-bounces+glppe-linuxppc-embedded-2=m.gmane.org@lists.ozlabs.org List-Id: linux-crypto.vger.kernel.org SGk6CkkgdXNlZCB5b3VyIHBhdGNoIGFuZCB0ZXN0IGl0IG9uIE1QQzg1NDggYm9hcmQuIFRvZGF5 LCBJIGZvdW5kIGEKcHJvYmxlbSB3aGVuIGRvaW5nIHJhaWQ1IHJlY292ZXJpbmcuCgp0YWxpdG9z IGUwMDMwMDAwLmNyeXB0bzogbWFzdGVyIGRhdGEgdHJhbnNmZXIgZXJyb3IKdGFsaXRvcyBlMDAz MDAwMC5jcnlwdG86IHhvciBvcGVyYXRpb246IHRhbGl0b3MgZXJyb3IgLTIyCi0tLS0tLS0tLS0t LVsgY3V0IGhlcmUgXS0tLS0tLS0tLS0tLQpLZXJuZWwgQlVHIGF0IGMwMmRjYjZjIFt2ZXJib3Nl IGRlYnVnIGluZm8gdW5hdmFpbGFibGVdCk9vcHM6IEV4Y2VwdGlvbiBpbiBrZXJuZWwgbW9kZSwg c2lnOiA1IFsjMV0KTVBDODV4eCBDRFMKTW9kdWxlcyBsaW5rZWQgaW46IGlzY3NpX3RyZ3QKTklQ OiBjMDJkY2I2YyBMUjogYzAyZGNiNmMgQ1RSOiBjMDIzZTdhOApSRUdTOiBlOGI4ZDgyMCBUUkFQ OiAwNzAwICAgTm90IHRhaW50ZWQgICgyLjYuMzEuNikKTVNSOiAwMDAyOTAwMCA8RUUsTUUsQ0U+ ICBDUjogMjIwMDgwMjIgIFhFUjogMjAwMDAwMDAKVEFTSyA9IGVmOGNiMmUwWzE4OTddICdtZDJf cmFpZDUnIFRIUkVBRDogZThiOGMwMDAKR1BSMDA6IGMwMmRjYjZjIGU4YjhkOGQwIGVmOGNiMmUw IDAwMDAwMDQwIDAwMDA3Yzk5IGZmZmZmZmZmIGMwMjNiY2NjIDAwMDA3YzVmCkdQUjA4OiBjMDRh NWM2MCBjMDQ5YjVmYyAwMDAwN2M5OSAwMDAwNDAwMCA4MDAwODAyMiAwMDAwMDAwMCAzZmZmNTcw MCBjMzM3NDc1NApHUFIxNjogYzMzNzQ3NGMgMDAwMDAwMDAgMDAwMDAwMDAgZmZmZmZmZWEgMDAw MDAwMDEgMDAwMDAwMDAgMDAwMTg2YTAgMDAwMDAwMDAKR1BSMjQ6IGZmZmZmZmVhIGZmZmZmZmVh IGVmODFmODUwIDAwMDAwMDBjIDAwMDI5MDAwIGZmZmZmZmVhIGVmODFmODUwIGVmYjFkNTgwCk5J UCBbYzAyZGNiNmNdIHRhbGl0b3NfcmVsZWFzZV94b3IrMHhmYy8weDEwNApMUiBbYzAyZGNiNmNd IHRhbGl0b3NfcmVsZWFzZV94b3IrMHhmYy8weDEwNApDYWxsIFRyYWNlOgpbZThiOGQ4ZDBdIFtj MDJkY2I2Y10gdGFsaXRvc19yZWxlYXNlX3hvcisweGZjLzB4MTA0ICh1bnJlbGlhYmxlKQpbZThi OGQ4ZjBdIFtjMDJkYjkyOF0gZmx1c2hfY2hhbm5lbCsweDExYy8weDE3OApbZThiOGQ5MjBdIFtj MDJkZDM0NF0gdGFsaXRvc19pbnRlcnJ1cHQrMHgzMjAvMHg5ZTgKW2U4YjhkOTcwXSBbYzAwNjBi M2NdIGhhbmRsZV9JUlFfZXZlbnQrMHg1Yy8weDE0MApbZThiOGQ5OTBdIFtjMDA2MjgwY10gaGFu ZGxlX2Zhc3Rlb2lfaXJxKzB4NjgvMHgxMTgKW2U4YjhkOWEwXSBbYzAwMDRmMDhdIGRvX0lSUSsw eDk0LzB4YjAKW2U4YjhkOWMwXSBbYzAwMGZlMDBdIHJldF9mcm9tX2V4Y2VwdCsweDAvMHgxOApb ZThiOGRhODBdIFtjMDJiNDdhMF0gcmVsZWFzZV9zdHJpcGUrMHgyNC8weDNjCltlOGI4ZGE5MF0g W2MwMmJhNGVjXSByYWlkNV9lbmRfcmVhZF9yZXF1ZXN0KzB4MTYwLzB4M2Y4CltlOGI4ZGFlMF0g W2MwMGJhMzZjXSBiaW9fZW5kaW8rMHg0OC8weDZjCltlOGI4ZGFmMF0gW2MwMWY4MGUwXSByZXFf YmlvX2VuZGlvKzB4YTQvMHgxMjgKW2U4YjhkYjEwXSBbYzAxZjgxZjBdIGJsa191cGRhdGVfcmVx dWVzdCsweDhjLzB4NDNjCltlOGI4ZGI0MF0gW2MwMWY4NWMwXSBibGtfdXBkYXRlX2JpZGlfcmVx dWVzdCsweDIwLzB4ODgKW2U4YjhkYjYwXSBbYzAxZjkyYzRdIGJsa19lbmRfYmlkaV9yZXF1ZXN0 KzB4MWMvMHg1OApbZThiOGRiODBdIFtjMDFmOTMxNF0gYmxrX2VuZF9yZXF1ZXN0KzB4MTQvMHgy NApbZThiOGRiOTBdIFtjMDI1ZWNlMF0gc2NzaV9pb19jb21wbGV0aW9uKzB4OGMvMHg0YWMKW2U4 YjhkYmQwXSBbYzAyNTdmZDBdIHNjc2lfZmluaXNoX2NvbW1hbmQrMHhkMC8weGY0CltlOGI4ZGJm MF0gW2MwMjVmMWM4XSBzY3NpX3NvZnRpcnFfZG9uZSsweGM4LzB4MTUwCltlOGI4ZGMxMF0gW2Mw MWZlMTE0XSBibGtfZG9uZV9zb2Z0aXJxKzB4ODAvMHhhMApbZThiOGRjMzBdIFtjMDAzYTBkOF0g X19kb19zb2Z0aXJxKzB4YTgvMHgxMjgKW2U4YjhkYzcwXSBbYzAwMDRlNzBdIGRvX3NvZnRpcnEr MHg1NC8weDU4CltlOGI4ZGM4MF0gW2MwMDM5ZjRjXSBpcnFfZXhpdCsweDk0LzB4OTgKW2U4Yjhk YzkwXSBbYzAwMDRmMGNdIGRvX0lSUSsweDk4LzB4YjAKW2U4YjhkY2IwXSBbYzAwMGZlMDBdIHJl dF9mcm9tX2V4Y2VwdCsweDAvMHgxOApbZThiOGRkNzBdIFtjMDA2NzljOF0gbWVtcG9vbF9hbGxv Y19zbGFiKzB4MWMvMHgyYwpbZThiOGRkYjBdIFtjMDJiNjgxNF0gb3BzX3J1bl9pbysweDFhYy8w eDJiOApbZThiOGRkZjBdIFtjMDJiOTNlNF0gaGFuZGxlX3N0cmlwZTUrMHhhODAvMHgxNWMwCltl OGI4ZGU3MF0gW2MwMmJiNDA4XSBoYW5kbGVfc3RyaXBlKzB4MzQvMHgxMmQ0CltlOGI4ZGYxMF0g W2MwMmJjOGVjXSByYWlkNWQrMHgyNDQvMHg0NTgKW2U4YjhkZjcwXSBbYzAyYzk2MjRdIG1kX3Ro cmVhZCsweDVjLzB4MTI0CltlOGI4ZGZjMF0gW2MwMDRhYjI0XSBrdGhyZWFkKzB4NzgvMHg3Ywpb ZThiOGRmZjBdIFtjMDAwZjUyY10ga2VybmVsX3RocmVhZCsweDRjLzB4NjgKSW5zdHJ1Y3Rpb24g ZHVtcDoKYmI2MTAwMGMgMzgyMTAwMjAgN2MwODAzYTYgNGJmZmVmYWMgNGJmNjNiYzkgODBiZTAw MDggN2M2NDFiNzggM2M2MGMwNDIKN2ZhNmViNzggMzg2MzFjY2MgNGNjNjMxODIgNGJkNThiOWQg PDBmZTAwMDAwPiA0ODAwMDAwMCA5NDIxZmZkMCA3YzA4MDJhNgpLZXJuZWwgcGFuaWMgLSBub3Qg c3luY2luZzogRmF0YWwgZXhjZXB0aW9uIGluIGludGVycnVwdApSZWJvb3RpbmcgaW4gMSBzZWNv bmRzLi4KLS0tLS0tLS0tLS0tWyBjdXQgaGVyZSBdLS0tLS0tLS0tLS0tCkJhZG5lc3MgYXQgYzAy MjMxMjQgW3ZlcmJvc2UgZGVidWcgaW5mbyB1bmF2YWlsYWJsZV0KTklQOiBjMDIyMzEyNCBMUjog YzAyMjMzMDggQ1RSOiAwMDAwMDAwMApSRUdTOiBlOGI4ZDU4MCBUUkFQOiAwNzAwICAgVGFpbnRl ZDogRyAgICAgIEQgICAgICgyLjYuMzEuNikKTVNSOiAwMDAyMTAwMCA8TUUsQ0U+ICBDUjogODIw MDgwODggIFhFUjogMjAwMDAwMDAKVEFTSyA9IGVmOGNiMmUwWzE4OTddICdtZDJfcmFpZDUnIFRI UkVBRDogZThiOGMwMDAKR1BSMDA6IDAwMDAwMDAxIGU4YjhkNjMwIGVmOGNiMmUwIGU4NGYxZDYw IDAwMDAwMDAwIGU4NGYxZDYwIGU4NGYxZDdjIGMwNGExMzY0CkdQUjA4OiBjMDRhNWM2MCBlOGI4 YzAwMCAwMDAwODczYiBlOGI4ZDY1MCA4MjAwODA4OCAwMDAwMDAwMCAzZmZmNTcwMCBjMzM3NDc1 NApHUFIxNjogYzMzNzQ3NGMgMDAwMDAwMDAgMDAwMDAwMDAgZmZmZmZmZWEgMDAwMDAwMDEgMDAw MDAwMDAgMDAwMTg2YTAgMDAwMDAwMDAKR1BSMjQ6IGZmZmZmZmVhIGZmZmZmZmVhIDAwMDAwMDAw IGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAxMTA2IGU4NGYxZDYwCk5JUCBbYzAyMjMx MjRdIHBjaV9nZXRfZGV2X2J5X2lkKzB4MzQvMHg5OApMUiBbYzAyMjMzMDhdIHBjaV9nZXRfc3Vi c3lzKzB4NjQvMHhhNApDYWxsIFRyYWNlOgpbZThiOGQ2MzBdIFtjMDIxZTM3OF0gbm9fcGNpX2Rl dmljZXMrMHgzNC8weDUwICh1bnJlbGlhYmxlKQpbZThiOGQ2NTBdIFtjMDIyMzMwOF0gcGNpX2dl dF9zdWJzeXMrMHg2NC8weGE0CltlOGI4ZDY3MF0gW2MwMDE3YmUwXSBtcGM4NXh4X2Nkc19yZXN0 YXJ0KzB4MjQvMHg5MApbZThiOGQ2OTBdIFtjMDAwZTdkMF0gbWFjaGluZV9yZXN0YXJ0KzB4MzQv MHg0YwpbZThiOGQ2YTBdIFtjMDA0NDdlMF0gZW1lcmdlbmN5X3Jlc3RhcnQrMHgxNC8weDI0Cltl OGI4ZDZiMF0gW2MwMDM0NzNjXSBwYW5pYysweDExOC8weDE1OApbZThiOGQ3MDBdIFtjMDAwY2Yy NF0gZGllKzB4MTYwLzB4MTZjCltlOGI4ZDcyMF0gW2MwMDBkMWIwXSBfZXhjZXB0aW9uKzB4MTJj LzB4MTU0CltlOGI4ZDgxMF0gW2MwMDBmZGI0XSByZXRfZnJvbV9leGNlcHRfZnVsbCsweDAvMHg0 YwpbZThiOGQ4ZDBdIFtjMDJkY2I2Y10gdGFsaXRvc19yZWxlYXNlX3hvcisweGZjLzB4MTA0Cltl OGI4ZDhmMF0gW2MwMmRiOTI4XSBmbHVzaF9jaGFubmVsKzB4MTFjLzB4MTc4CltlOGI4ZDkyMF0g W2MwMmRkMzQ0XSB0YWxpdG9zX2ludGVycnVwdCsweDMyMC8weDllOApbZThiOGQ5NzBdIFtjMDA2 MGIzY10gaGFuZGxlX0lSUV9ldmVudCsweDVjLzB4MTQwCltlOGI4ZDk5MF0gW2MwMDYyODBjXSBo YW5kbGVfZmFzdGVvaV9pcnErMHg2OC8weDExOApbZThiOGQ5YTBdIFtjMDAwNGYwOF0gZG9fSVJR KzB4OTQvMHhiMApbZThiOGQ5YzBdIFtjMDAwZmUwMF0gcmV0X2Zyb21fZXhjZXB0KzB4MC8weDE4 CltlOGI4ZGE4MF0gW2MwMmI0N2EwXSByZWxlYXNlX3N0cmlwZSsweDI0LzB4M2MKW2U4YjhkYTkw XSBbYzAyYmE0ZWNdIHJhaWQ1X2VuZF9yZWFkX3JlcXVlc3QrMHgxNjAvMHgzZjgKW2U4YjhkYWUw XSBbYzAwYmEzNmNdIGJpb19lbmRpbysweDQ4LzB4NmMKW2U4YjhkYWYwXSBbYzAxZjgwZTBdIHJl cV9iaW9fZW5kaW8rMHhhNC8weDEyOApbZThiOGRiMTBdIFtjMDFmODFmMF0gYmxrX3VwZGF0ZV9y ZXF1ZXN0KzB4OGMvMHg0M2MKW2U4YjhkYjQwXSBbYzAxZjg1YzBdIGJsa191cGRhdGVfYmlkaV9y ZXF1ZXN0KzB4MjAvMHg4OApbZThiOGRiNjBdIFtjMDFmOTJjNF0gYmxrX2VuZF9iaWRpX3JlcXVl c3QrMHgxYy8weDU4CltlOGI4ZGI4MF0gW2MwMWY5MzE0XSBibGtfZW5kX3JlcXVlc3QrMHgxNC8w eDI0CltlOGI4ZGI5MF0gW2MwMjVlY2UwXSBzY3NpX2lvX2NvbXBsZXRpb24rMHg4Yy8weDRhYwpb ZThiOGRiZDBdIFtjMDI1N2ZkMF0gc2NzaV9maW5pc2hfY29tbWFuZCsweGQwLzB4ZjQKW2U4Yjhk YmYwXSBbYzAyNWYxYzhdIHNjc2lfc29mdGlycV9kb25lKzB4YzgvMHgxNTAKW2U4YjhkYzEwXSBb YzAxZmUxMTRdIGJsa19kb25lX3NvZnRpcnErMHg4MC8weGEwCltlOGI4ZGMzMF0gW2MwMDNhMGQ4 XSBfX2RvX3NvZnRpcnErMHhhOC8weDEyOApbZThiOGRjNzBdIFtjMDAwNGU3MF0gZG9fc29mdGly cSsweDU0LzB4NTgKW2U4YjhkYzgwXSBbYzAwMzlmNGNdIGlycV9leGl0KzB4OTQvMHg5OApbZThi OGRjOTBdIFtjMDAwNGYwY10gZG9fSVJRKzB4OTgvMHhiMApbZThiOGRjYjBdIFtjMDAwZmUwMF0g cmV0X2Zyb21fZXhjZXB0KzB4MC8weDE4CltlOGI4ZGQ3MF0gW2MwMDY3OWM4XSBtZW1wb29sX2Fs bG9jX3NsYWIrMHgxYy8weDJjCltlOGI4ZGRiMF0gW2MwMmI2ODE0XSBvcHNfcnVuX2lvKzB4MWFj LzB4MmI4CltlOGI4ZGRmMF0gW2MwMmI5M2U0XSBoYW5kbGVfc3RyaXBlNSsweGE4MC8weDE1YzAK W2U4YjhkZTcwXSBbYzAyYmI0MDhdIGhhbmRsZV9zdHJpcGUrMHgzNC8weDEyZDQKW2U4YjhkZjEw XSBbYzAyYmM4ZWNdIHJhaWQ1ZCsweDI0NC8weDQ1OApbZThiOGRmNzBdIFtjMDJjOTYyNF0gbWRf dGhyZWFkKzB4NWMvMHgxMjQKW2U4YjhkZmMwXSBbYzAwNGFiMjRdIGt0aHJlYWQrMHg3OC8weDdj CltlOGI4ZGZmMF0gW2MwMDBmNTJjXSBrZXJuZWxfdGhyZWFkKzB4NGMvMHg2OApJbnN0cnVjdGlv biBkdW1wOgo3YzA4MDJhNiA3ZDgwMDAyNiA3YzY1MWI3OCBiZjgxMDAxMCA1NDI5MDAyNCA5MDAx MDAyNCA3YzlkMjM3OCA5MTgxMDAwYwo4MDA5MDAwYyA1NDAwMDE2ZSA3YzAwMDBkMCA1NDAwMGZm ZSA8MGYwMDAwMDA+IDNiODAwMDAwIDJlMDQwMDAwIDNjYzBjMDIyCgoKVGhpcyBvb3BzIGlzIGlu dm9rZWQgYnkgdGhlIGZvbGxvd2luZyBjb2RlOgoKc3RhdGljIHZvaWQgdGFsaXRvc19yZWxlYXNl X3hvcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCB0YWxpdG9zX2Rlc2MgKmh3ZGVzYywKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmNvbnRleHQsIGludCBlcnJvcikKewog ICAgICAgc3RydWN0IHRhbGl0b3NfeG9yX2Rlc2MgKmRlc2MgPSBjb250ZXh0OwogICAgICAgc3Ry dWN0IHRhbGl0b3NfeG9yX2NoYW4gKnhvcl9jaGFuOwogICAgICAgZG1hX2FzeW5jX3R4X2NhbGxi YWNrIGNhbGxiYWNrOwogICAgICAgdm9pZCAqY2FsbGJhY2tfcGFyYW07CgogICAgICAgaWYgKHVu bGlrZWx5KGVycm9yKSkgewogICAgICAgICAgICAgICBkZXZfZXJyKGRldiwgInhvciBvcGVyYXRp b246IHRhbGl0b3MgZXJyb3IgJWRcbiIsIGVycm9yKTsKICAgICAgICAgICAgICAgQlVHKCk7Cjwt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQpoZXJlCiAgICAgICB9CgpJIHdvbmRlciBoZXJlIHdoeSBhIHRhaWxpdG9zIGVycm9y IG9jY3VyZWQsIEJVRyBpcyBpbnZva2VkPyBJIHRoaW5rIHdlCmNhbiBkbyBzb21ldGhpbmcgdG8g ZXJyb3IgcmVjb3Zlcnkgb3RoZXIgdGhhbiBpbnZva2luZyBCVUcuCgoyMDA5LzEyLzE2IFZpc2hu dSBTdXJlc2ggPFZpc2hudUBmcmVlc2NhbGUuY29tPjoKPiBFeHBvc2UgVGFsaXRvcydzIFhPUiBm dW5jdGlvbmFsaXR5IHRvIGJlIHVzZWQgZm9yCj4gUkFJRCBQYXJpdHkgY2FsY3VsYXRpb24gdmlh IHRoZSBBc3luY190eCBsYXllci4KPgo+IEtub3duIElzc3VlOgo+IFdoZW4gdXNlZCB3aXRoIGZz bGRtYSwgcmFuZG9tIGNyYXNoZXMgYXJlIG9ic2VydmVkCj4gb24gc29tZSBwbGF0Zm9ybXMuIEhl bmNlLCBpbnRlci1vcGVyYWJpbGl0eSB3aXRoIGZzbGRtYQo+IGlzIGN1cnJlbnRseSBkaXNhYmxl ZAo+Cj4gVGhhbmtzIHRvIFN1cmVuZGVyIEt1bWFyIGFuZCBMZWUgTmlwcGVyIGZvciB0aGVpciBo ZWxwIGluCj4gcmVhbGlzaW5nIHRoaXMgZHJpdmVyCj4KPiBTaWduZWQtb2ZmLWJ5OiBLaW0gUGhp bGxpcHMgPGtpbS5waGlsbGlwc0BmcmVlc2NhbGUuY29tPgo+IFNpZ25lZC1vZmYtYnk6IERpcGVu IER1ZGhhdCA8RGlwZW4uRHVkaGF0QGZyZWVzY2FsZS5jb20+Cj4gU2lnbmVkLW9mZi1ieTogTWFu ZWVzaCBHdXB0YSA8TWFuZWVzaC5HdXB0YUBmcmVlc2NhbGUuY29tPgo+IFNpZ25lZC1vZmYtYnk6 IFZpc2hudSBTdXJlc2ggPFZpc2hudUBmcmVlc2NhbGUuY29tPgo+IC0tLQo+IENoYW5nZXMgd2l0 aCByZXNwZWN0IHRvIHYxIGFzIHBlciBjb21tZW50cyByZWNlaXZlZAo+IG8uIFJlYmFzZWQgdG8g bGludXgtbmV4dCBhcyBvZiAyMDA5MTIxNgo+IG8uIFRoZSBzZWxlY3Rpb24gaXMgYmFzZWQgZXhj bHVzaXZlIG9mIGZzbGRtYQo+IG8uIEludG9kdWNlZCBhIG5ldyBLZXJuZWwgQ29uZmlndXJhdGlv biB2YXJpYWJsZQo+IMKgICouIFRoaXMgZW5hYmxlcyBzZWxlY3RpbmcgdGhlIENyeXB0b2dyYXBo aWMgZnVuY3Rpb25hbGl0eQo+IMKgIMKgIMKgb2YgVGFsaXRvcyBhbG9uZyB3aXRoIGZzbGRtYS4K PiDCoCAqLiBEaXNhYmxlcyB0aGUgWE9SIHBhcml0eSBjYWxjdWxhdGlvbiBvZmZsb2FkLCBpZiBm c2xkbWEgZW5hYmxlZAo+IMKgIMKgIMKgZWl0aGVyIGFzIGtlcm5lbCBpbi1idWlsdCBvciBhcyBh IG1vZHVsZQo+IMKgICouIE9uY2UgdGhlIGludGVyLW9wZXJhYmlsaXR5IHdpdGggZnNsZG1hIGlz IHJlc29sdmVkLCB0aGlzIG9wdGlvbgo+IMKgIMKgIMKgY2FuIGJlIHJlbW92ZWQKPgo+IMKgZHJp dmVycy9jcnlwdG8vS2NvbmZpZyDCoCB8IMKgIMKgOSArCj4gwqBkcml2ZXJzL2NyeXB0by90YWxp dG9zLmMgfCDCoDQwMiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KystCj4gwqBkcml2ZXJzL2NyeXB0by90YWxpdG9zLmggfCDCoCDCoDIgKwo+IMKgMyBmaWxlcyBj aGFuZ2VkLCA0MTIgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbnMoLSkKPgo+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2NyeXB0by9LY29uZmlnIGIvZHJpdmVycy9jcnlwdG8vS2NvbmZpZwo+IGluZGV4 IGIwODQwM2QuLmY4YTYzNzYgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9jcnlwdG8vS2NvbmZpZwo+ ICsrKyBiL2RyaXZlcnMvY3J5cHRvL0tjb25maWcKPiBAQCAtMjAzLDYgKzIwMywxNSBAQCBjb25m aWcgQ1JZUFRPX0RFVl9UQUxJVE9TCj4gwqAgwqAgwqAgwqAgwqBUbyBjb21waWxlIHRoaXMgZHJp dmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCj4gwqAgwqAgwqAgwqAg wqB3aWxsIGJlIGNhbGxlZCB0YWxpdG9zLgo+Cj4gK2NvbmZpZyBDUllQVE9fREVWX1RBTElUT1Nf UkFJRFhPUgo+ICsgwqAgwqAgwqAgYm9vbCAiVGFsaXRvcyBSQUlENSBYT1IgQ2FsY3VsYXRpb24g T2ZmbG9hZCIKPiArIMKgIMKgIMKgIHNlbGVjdCBETUFfRU5HSU5FCj4gKyDCoCDCoCDCoCBkZXBl bmRzIG9uIENSWVBUT19ERVZfVEFMSVRPUwo+ICsgwqAgwqAgwqAgZGVwZW5kcyBvbiBGU0xfRE1B PW4KPiArIMKgIMKgIMKgIGhlbHAKPiArIMKgIMKgIMKgIMKgIFNheSAnWScgaGVyZSB0byB1c2Ug dGhlIEZyZWVzY2FsZSBTZWN1cml0eSBFbmdpbmUgKFNFQykgdG8KPiArIMKgIMKgIMKgIMKgIG9m ZmxvYWQgUkFJRCBYT1IgcGFyaXR5IENhbGN1bGF0aW9uCj4gKwo+IMKgY29uZmlnIENSWVBUT19E RVZfSVhQNFhYCj4gwqAgwqAgwqAgwqB0cmlzdGF0ZSAiRHJpdmVyIGZvciBJWFA0eHggY3J5cHRv IGhhcmR3YXJlIGFjY2VsZXJhdGlvbiIKPiDCoCDCoCDCoCDCoGRlcGVuZHMgb24gQVJDSF9JWFA0 WFgKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcnlwdG8vdGFsaXRvcy5jIGIvZHJpdmVycy9jcnlw dG8vdGFsaXRvcy5jCj4gaW5kZXggYzQ3ZmZlOC4uZTYzYjI1YSAxMDA2NDQKPiAtLS0gYS9kcml2 ZXJzL2NyeXB0by90YWxpdG9zLmMKPiArKysgYi9kcml2ZXJzL2NyeXB0by90YWxpdG9zLmMKPiBA QCAtMSw3ICsxLDcgQEAKPiDCoC8qCj4gwqAqIHRhbGl0b3MgLSBGcmVlc2NhbGUgSW50ZWdyYXRl ZCBTZWN1cml0eSBFbmdpbmUgKFNFQykgZGV2aWNlIGRyaXZlcgo+IMKgKgo+IC0gKiBDb3B5cmln aHQgKGMpIDIwMDggRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KPiArICogQ29weXJpZ2h0 IChjKSAyMDA4LTIwMDkgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KPiDCoCoKPiDCoCog U2NhdHRlcmxpc3QgQ3J5cHRvIEFQSSBnbHVlIGNvZGUgY29waWVkIGZyb20gZmlsZXMgd2l0aCB0 aGUgZm9sbG93aW5nOgo+IMKgKiBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwNyBIZXJiZXJ0IFh1IDxo ZXJiZXJ0QGdvbmRvci5hcGFuYS5vcmcuYXU+Cj4gQEAgLTM3LDYgKzM3LDggQEAKPiDCoCNpbmNs dWRlIDxsaW51eC9pby5oPgo+IMKgI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Cj4gwqAjaW5j bHVkZSA8bGludXgvcnRuZXRsaW5rLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9kbWFlbmdpbmUuaD4K PiArI2luY2x1ZGUgPGxpbnV4L3JhaWQveG9yLmg+Cj4KPiDCoCNpbmNsdWRlIDxjcnlwdG8vYWxn YXBpLmg+Cj4gwqAjaW5jbHVkZSA8Y3J5cHRvL2Flcy5oPgo+IEBAIC0xNDAsNiArMTQyLDEwIEBA IHN0cnVjdCB0YWxpdG9zX3ByaXZhdGUgewo+Cj4gwqAgwqAgwqAgwqAvKiBod3JuZyBkZXZpY2Ug Ki8KPiDCoCDCoCDCoCDCoHN0cnVjdCBod3JuZyBybmc7Cj4gKyNpZmRlZiBDT05GSUdfQ1JZUFRP X0RFVl9UQUxJVE9TX1JBSURYT1IKPiArIMKgIMKgIMKgIC8qIFhPUiBEZXZpY2UgKi8KPiArIMKg IMKgIMKgIHN0cnVjdCBkbWFfZGV2aWNlIGRtYV9kZXZfY29tbW9uOwo+ICsjZW5kaWYgLyogQ09O RklHX0NSWVBUT19ERVZfVEFMSVRPU19SQUlEWE9SICovCj4gwqB9Owo+Cj4gwqAvKiAuZmVhdHVy ZXMgZmxhZyAqLwo+IEBAIC02ODQsNiArNjkwLDM3NSBAQCBzdGF0aWMgdm9pZCB0YWxpdG9zX3Vu cmVnaXN0ZXJfcm5nKHN0cnVjdCBkZXZpY2UgKmRldikKPiDCoCDCoCDCoCDCoGh3cm5nX3VucmVn aXN0ZXIoJnByaXYtPnJuZyk7Cj4gwqB9Cj4KPiArI2lmZGVmIENPTkZJR19DUllQVE9fREVWX1RB TElUT1NfUkFJRFhPUgo+ICsvKgo+ICsgKiBhc3luY190eCBpbnRlcmZhY2UgZm9yIFhPUi1jYXBh YmxlIFNFQ3MKPiArICoKPiArICogRGlwZW4gRHVkaGF0IDxEaXBlbi5EdWRoYXRAZnJlZXNjYWxl LmNvbT4KPiArICogTWFuZWVzaCBHdXB0YSA8TWFuZWVzaC5HdXB0YUBmcmVlc2NhbGUuY29tPgo+ ICsgKiBWaXNobnUgU3VyZXNoIDxWaXNobnVAZnJlZXNjYWxlLmNvbT4KPiArICovCj4gKwo+ICsv KioKPiArICogdGFsaXRvc194b3JfY2hhbiAtIGNvbnRleHQgbWFuYWdlbWVudCBmb3IgdGhlIGFz eW5jX3R4IGNoYW5uZWwKPiArICogQGNvbXBsZXRlZF9jb29raWU6IHRoZSBsYXN0IGNvbXBsZXRl ZCBjb29raWUKPiArICogQGRlc2NfbG9jazogbG9jayBmb3IgdHggcXVldWUKPiArICogQHRvdGFs X2Rlc2M6IG51bWJlciBvZiBkZXNjcmlwdG9ycyBhbGxvY2F0ZWQKPiArICogQHN1Ym1pdF9xOiBx dWV1ZSBvZiBzdWJtaXR0ZWQgZGVzY3JpcHRvcnMKPiArICogQHBlbmRpbmdfcTogcXVldWUgb2Yg cGVuZGluZyBkZXNjcmlwdG9ycwo+ICsgKiBAaW5fcHJvZ3Jlc3NfcTogcXVldWUgb2YgZGVzY3Jp cHRvcnMgaW4gcHJvZ3Jlc3MKPiArICogQGZyZWVfZGVzYzogcXVldWUgb2YgdW51c2VkIGRlc2Ny aXB0b3JzCj4gKyAqIEBkZXY6IHRhbGl0b3MgZGV2aWNlIGltcGxlbWVudGluZyB0aGlzIGNoYW5u ZWwKPiArICogQGNvbW1vbjogdGhlIGNvcnJlc3BvbmRpbmcgeG9yIGNoYW5uZWwgaW4gYXN5bmNf dHgKPiArICovCj4gK3N0cnVjdCB0YWxpdG9zX3hvcl9jaGFuIHsKPiArIMKgIMKgIMKgIGRtYV9j b29raWVfdCBjb21wbGV0ZWRfY29va2llOwo+ICsgwqAgwqAgwqAgc3BpbmxvY2tfdCBkZXNjX2xv Y2s7Cj4gKyDCoCDCoCDCoCB1bnNpZ25lZCBpbnQgdG90YWxfZGVzYzsKPiArIMKgIMKgIMKgIHN0 cnVjdCBsaXN0X2hlYWQgc3VibWl0X3E7Cj4gKyDCoCDCoCDCoCBzdHJ1Y3QgbGlzdF9oZWFkIHBl bmRpbmdfcTsKPiArIMKgIMKgIMKgIHN0cnVjdCBsaXN0X2hlYWQgaW5fcHJvZ3Jlc3NfcTsKPiAr IMKgIMKgIMKgIHN0cnVjdCBsaXN0X2hlYWQgZnJlZV9kZXNjOwo+ICsgwqAgwqAgwqAgc3RydWN0 IGRldmljZSAqZGV2Owo+ICsgwqAgwqAgwqAgc3RydWN0IGRtYV9jaGFuIGNvbW1vbjsKPiArfTsK PiArCj4gKy8qKgo+ICsgKiB0YWxpdG9zX3hvcl9kZXNjIC0gc29mdHdhcmUgeG9yIGRlc2NyaXB0 b3IKPiArICogQGFzeW5jX3R4OiB0aGUgcmVmZXJyaW5nIGFzeW5jX3R4IGRlc2NyaXB0b3IKPiAr ICogQG5vZGU6Cj4gKyAqIEBod2Rlc2M6IGgvdyBkZXNjcmlwdG9yCj4gKyAqLwo+ICtzdHJ1Y3Qg dGFsaXRvc194b3JfZGVzYyB7Cj4gKyDCoCDCoCDCoCBzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2Ny aXB0b3IgYXN5bmNfdHg7Cj4gKyDCoCDCoCDCoCBzdHJ1Y3QgbGlzdF9oZWFkIHR4X2xpc3Q7Cj4g KyDCoCDCoCDCoCBzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7Cj4gKyDCoCDCoCDCoCBzdHJ1Y3QgdGFs aXRvc19kZXNjIGh3ZGVzYzsKPiArfTsKPiArCj4gK3N0YXRpYyBlbnVtIGRtYV9zdGF0dXMgdGFs aXRvc19pc190eF9jb21wbGV0ZShzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sCj4gKyDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBk bWFfY29va2llX3QgY29va2llLAo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgZG1hX2Nvb2tpZV90ICpkb25lLAo+ICsg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgZG1hX2Nvb2tpZV90ICp1c2VkKQo+ICt7Cj4gKyDCoCDCoCDCoCBzdHJ1Y3QgdGFs aXRvc194b3JfY2hhbiAqeG9yX2NoYW47Cj4gKyDCoCDCoCDCoCBkbWFfY29va2llX3QgbGFzdF91 c2VkOwo+ICsgwqAgwqAgwqAgZG1hX2Nvb2tpZV90IGxhc3RfY29tcGxldGU7Cj4gKwo+ICsgwqAg wqAgwqAgeG9yX2NoYW4gPSBjb250YWluZXJfb2YoY2hhbiwgc3RydWN0IHRhbGl0b3NfeG9yX2No YW4sIGNvbW1vbik7Cj4gKwo+ICsgwqAgwqAgwqAgbGFzdF91c2VkID0gY2hhbi0+Y29va2llOwo+ ICsgwqAgwqAgwqAgbGFzdF9jb21wbGV0ZSA9IHhvcl9jaGFuLT5jb21wbGV0ZWRfY29va2llOwo+ ICsKPiArIMKgIMKgIMKgIGlmIChkb25lKQo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgKmRvbmUg PSBsYXN0X2NvbXBsZXRlOwo+ICsKPiArIMKgIMKgIMKgIGlmICh1c2VkKQo+ICsgwqAgwqAgwqAg wqAgwqAgwqAgwqAgKnVzZWQgPSBsYXN0X3VzZWQ7Cj4gKwo+ICsgwqAgwqAgwqAgcmV0dXJuIGRt YV9hc3luY19pc19jb21wbGV0ZShjb29raWUsIGxhc3RfY29tcGxldGUsIGxhc3RfdXNlZCk7Cj4g K30KPiArCj4gK3N0YXRpYyB2b2lkIHRhbGl0b3NfcmVsZWFzZV94b3Ioc3RydWN0IGRldmljZSAq ZGV2LCBzdHJ1Y3QgdGFsaXRvc19kZXNjICpod2Rlc2MsCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCB2b2lkICpjb250ZXh0LCBpbnQgZXJyb3IpCj4gK3sK PiArIMKgIMKgIMKgIHN0cnVjdCB0YWxpdG9zX3hvcl9kZXNjICpkZXNjID0gY29udGV4dDsKPiAr IMKgIMKgIMKgIHN0cnVjdCB0YWxpdG9zX3hvcl9jaGFuICp4b3JfY2hhbjsKPiArIMKgIMKgIMKg IGRtYV9hc3luY190eF9jYWxsYmFjayBjYWxsYmFjazsKPiArIMKgIMKgIMKgIHZvaWQgKmNhbGxi YWNrX3BhcmFtOwo+ICsKPiArIMKgIMKgIMKgIGlmICh1bmxpa2VseShlcnJvcikpIHsKPiArIMKg IMKgIMKgIMKgIMKgIMKgIMKgIGRldl9lcnIoZGV2LCAieG9yIG9wZXJhdGlvbjogdGFsaXRvcyBl cnJvciAlZFxuIiwgZXJyb3IpOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgQlVHKCk7Cj4gKyDC oCDCoCDCoCB9Cj4gKwo+ICsgwqAgwqAgwqAgeG9yX2NoYW4gPSBjb250YWluZXJfb2YoZGVzYy0+ YXN5bmNfdHguY2hhbiwgc3RydWN0IHRhbGl0b3NfeG9yX2NoYW4sCj4gKyDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBjb21tb24pOwo+ICsgwqAgwqAgwqAgc3Bp bl9sb2NrX2JoKCZ4b3JfY2hhbi0+ZGVzY19sb2NrKTsKPiArIMKgIMKgIMKgIGlmICh4b3JfY2hh bi0+Y29tcGxldGVkX2Nvb2tpZSA8IGRlc2MtPmFzeW5jX3R4LmNvb2tpZSkKPiArIMKgIMKgIMKg IMKgIMKgIMKgIMKgIHhvcl9jaGFuLT5jb21wbGV0ZWRfY29va2llID0gZGVzYy0+YXN5bmNfdHgu Y29va2llOwo+ICsKPiArIMKgIMKgIMKgIGNhbGxiYWNrID0gZGVzYy0+YXN5bmNfdHguY2FsbGJh Y2s7Cj4gKyDCoCDCoCDCoCBjYWxsYmFja19wYXJhbSA9IGRlc2MtPmFzeW5jX3R4LmNhbGxiYWNr X3BhcmFtOwo+ICsgwqAgwqAgwqAgbGlzdF9kZWwoJmRlc2MtPm5vZGUpOwo+ICsgwqAgwqAgwqAg bGlzdF9hZGRfdGFpbCgmZGVzYy0+bm9kZSwgJnhvcl9jaGFuLT5mcmVlX2Rlc2MpOwo+ICsgwqAg wqAgwqAgc3Bpbl91bmxvY2tfYmgoJnhvcl9jaGFuLT5kZXNjX2xvY2spOwo+ICsKPiArIMKgIMKg IMKgIGlmIChjYWxsYmFjaykKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGNhbGxiYWNrKGNhbGxi YWNrX3BhcmFtKTsKPiArCj4gKyDCoCDCoCDCoCAvKiBydW4gZGVwZW5kZW50IG9wZXJhdGlvbnMg Ki8KPiArIMKgIMKgIMKgIGRtYV9ydW5fZGVwZW5kZW5jaWVzKCZkZXNjLT5hc3luY190eCk7Cj4g K30KPiArCj4gK3N0YXRpYyB2b2lkIHRhbGl0b3NfcHJvY2Vzc19wZW5kaW5nKHN0cnVjdCB0YWxp dG9zX3hvcl9jaGFuICp4b3JfY2hhbikKPiArewo+ICsgwqAgwqAgwqAgc3RydWN0IHRhbGl0b3Nf eG9yX2Rlc2MgKmRlc2MsICpfZGVzYzsKPiArCj4gKyDCoCDCoCDCoCBzcGluX2xvY2tfYmgoJnhv cl9jaGFuLT5kZXNjX2xvY2spOwo+ICsgwqAgwqAgwqAgbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZl KGRlc2MsIF9kZXNjLCAmeG9yX2NoYW4tPnBlbmRpbmdfcSwgbm9kZSkgewo+ICsgwqAgwqAgwqAg wqAgwqAgwqAgwqAgaWYgKHRhbGl0b3Nfc3VibWl0KHhvcl9jaGFuLT5kZXYsICZkZXNjLT5od2Rl c2MsCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oHRhbGl0b3NfcmVsZWFzZV94b3IsIGRlc2MpICE9IC1FSU5QUk9HUkVTUykKPiArIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGJyZWFrOwo+ICsKPiArIMKgIMKgIMKgIMKgIMKgIMKg IMKgIGxpc3RfZGVsKCZkZXNjLT5ub2RlKTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGxpc3Rf YWRkX3RhaWwoJmRlc2MtPm5vZGUsICZ4b3JfY2hhbi0+aW5fcHJvZ3Jlc3NfcSk7Cj4gKyDCoCDC oCDCoCB9Cj4gKyDCoCDCoCDCoCBzcGluX3VubG9ja19iaCgmeG9yX2NoYW4tPmRlc2NfbG9jayk7 Cj4gK30KPiArCj4gKy8qKgo+ICsgKiB0YWxpdG9zX2lzc3VlX3BlbmRpbmcgLSBtb3ZlIHRoZSBk ZXNjcmlwdG9ycyBpbiBzdWJtaXQKPiArICogcXVldWUgdG8gcGVuZGluZyBxdWV1ZSBhbmQgc3Vi bWl0IHRoZW0gZm9yIHByb2Nlc3NpbmcKPiArICogQGNoYW46IERNQSBjaGFubmVsCj4gKyAqLwo+ ICtzdGF0aWMgdm9pZCB0YWxpdG9zX2lzc3VlX3BlbmRpbmcoc3RydWN0IGRtYV9jaGFuICpjaGFu KQo+ICt7Cj4gKyDCoCDCoCDCoCBzdHJ1Y3QgdGFsaXRvc194b3JfY2hhbiAqeG9yX2NoYW47Cj4g Kwo+ICsgwqAgwqAgwqAgeG9yX2NoYW4gPSBjb250YWluZXJfb2YoY2hhbiwgc3RydWN0IHRhbGl0 b3NfeG9yX2NoYW4sIGNvbW1vbik7Cj4gKyDCoCDCoCDCoCBzcGluX2xvY2tfYmgoJnhvcl9jaGFu LT5kZXNjX2xvY2spOwo+ICsgwqAgwqAgwqAgbGlzdF9zcGxpY2VfdGFpbF9pbml0KCZ4b3JfY2hh bi0+c3VibWl0X3EsCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCZ4b3JfY2hhbi0+cGVuZGluZ19xKTsKPiArIMKgIMKgIMKgIHNwaW5fdW5sb2NrX2Jo KCZ4b3JfY2hhbi0+ZGVzY19sb2NrKTsKPiArIMKgIMKgIMKgIHRhbGl0b3NfcHJvY2Vzc19wZW5k aW5nKHhvcl9jaGFuKTsKPiArfQo+ICsKPiArc3RhdGljIGRtYV9jb29raWVfdCB0YWxpdG9zX2Fz eW5jX3R4X3N1Ym1pdChzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKnR4KQo+ICt7Cj4g KyDCoCDCoCDCoCBzdHJ1Y3QgdGFsaXRvc194b3JfZGVzYyAqZGVzYzsKPiArIMKgIMKgIMKgIHN0 cnVjdCB0YWxpdG9zX3hvcl9jaGFuICp4b3JfY2hhbjsKPiArIMKgIMKgIMKgIGRtYV9jb29raWVf dCBjb29raWU7Cj4gKwo+ICsgwqAgwqAgwqAgZGVzYyA9IGNvbnRhaW5lcl9vZih0eCwgc3RydWN0 IHRhbGl0b3NfeG9yX2Rlc2MsIGFzeW5jX3R4KTsKPiArIMKgIMKgIMKgIHhvcl9jaGFuID0gY29u dGFpbmVyX29mKHR4LT5jaGFuLCBzdHJ1Y3QgdGFsaXRvc194b3JfY2hhbiwgY29tbW9uKTsKPiAr Cj4gKyDCoCDCoCDCoCBjb29raWUgPSB4b3JfY2hhbi0+Y29tbW9uLmNvb2tpZSArIDE7Cj4gKyDC oCDCoCDCoCBpZiAoY29va2llIDwgMCkKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGNvb2tpZSA9 IDE7Cj4gKwo+ICsgwqAgwqAgwqAgZGVzYy0+YXN5bmNfdHguY29va2llID0gY29va2llOwo+ICsg wqAgwqAgwqAgeG9yX2NoYW4tPmNvbW1vbi5jb29raWUgPSBkZXNjLT5hc3luY190eC5jb29raWU7 Cj4gKwo+ICsgwqAgwqAgwqAgbGlzdF9zcGxpY2VfdGFpbF9pbml0KCZkZXNjLT50eF9saXN0LAo+ ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAmeG9yX2No YW4tPnN1Ym1pdF9xKTsKPiArCj4gKyDCoCDCoCDCoCByZXR1cm4gY29va2llOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgc3RydWN0IHRhbGl0b3NfeG9yX2Rlc2MgKnRhbGl0b3NfeG9yX2FsbG9jX2Rlc2Ny aXB0b3IoCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBz dHJ1Y3QgdGFsaXRvc194b3JfY2hhbiAqeG9yX2NoYW4sIGdmcF90IGZsYWdzKQo+ICt7Cj4gKyDC oCDCoCDCoCBzdHJ1Y3QgdGFsaXRvc194b3JfZGVzYyAqZGVzYzsKPiArCj4gKyDCoCDCoCDCoCBk ZXNjID0ga21hbGxvYyhzaXplb2YoKmRlc2MpLCBmbGFncyk7Cj4gKyDCoCDCoCDCoCBpZiAoZGVz Yykgewo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgeG9yX2NoYW4tPnRvdGFsX2Rlc2MrKzsKPiAr IMKgIMKgIMKgIMKgIMKgIMKgIMKgIG1lbXNldChkZXNjLCAwLCBzaXplb2YoKmRlc2MpKTsKPiAr IMKgIMKgIMKgIMKgIMKgIMKgIMKgIGRtYV9hc3luY190eF9kZXNjcmlwdG9yX2luaXQoJmRlc2Mt PmFzeW5jX3R4LCAmeG9yX2NoYW4tPmNvbW1vbik7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCBk ZXNjLT5hc3luY190eC50eF9zdWJtaXQgPSB0YWxpdG9zX2FzeW5jX3R4X3N1Ym1pdDsKPiArIMKg IMKgIMKgIMKgIMKgIMKgIMKgIElOSVRfTElTVF9IRUFEKCZkZXNjLT5ub2RlKTsKPiArIMKgIMKg IMKgIMKgIMKgIMKgIMKgIElOSVRfTElTVF9IRUFEKCZkZXNjLT50eF9saXN0KTsKPiArIMKgIMKg IMKgIH0KPiArCj4gKyDCoCDCoCDCoCByZXR1cm4gZGVzYzsKPiArfQo+ICsKPiArc3RhdGljIHZv aWQgdGFsaXRvc19mcmVlX2NoYW5fcmVzb3VyY2VzKHN0cnVjdCBkbWFfY2hhbiAqY2hhbikKPiAr ewo+ICsgwqAgwqAgwqAgc3RydWN0IHRhbGl0b3NfeG9yX2NoYW4gKnhvcl9jaGFuOwo+ICsgwqAg wqAgwqAgc3RydWN0IHRhbGl0b3NfeG9yX2Rlc2MgKmRlc2MsICpfZGVzYzsKPiArCj4gKyDCoCDC oCDCoCB4b3JfY2hhbiA9IGNvbnRhaW5lcl9vZihjaGFuLCBzdHJ1Y3QgdGFsaXRvc194b3JfY2hh biwgY29tbW9uKTsKPiArCj4gKyDCoCDCoCDCoCBsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZGVz YywgX2Rlc2MsICZ4b3JfY2hhbi0+c3VibWl0X3EsIG5vZGUpIHsKPiArIMKgIMKgIMKgIMKgIMKg IMKgIMKgIGxpc3RfZGVsKCZkZXNjLT5ub2RlKTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHhv cl9jaGFuLT50b3RhbF9kZXNjLS07Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCBrZnJlZShkZXNj KTsKPiArIMKgIMKgIMKgIH0KPiArIMKgIMKgIMKgIGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShk ZXNjLCBfZGVzYywgJnhvcl9jaGFuLT5wZW5kaW5nX3EsIG5vZGUpIHsKPiArIMKgIMKgIMKgIMKg IMKgIMKgIMKgIGxpc3RfZGVsKCZkZXNjLT5ub2RlKTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKg IHhvcl9jaGFuLT50b3RhbF9kZXNjLS07Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCBrZnJlZShk ZXNjKTsKPiArIMKgIMKgIMKgIH0KPiArIMKgIMKgIMKgIGxpc3RfZm9yX2VhY2hfZW50cnlfc2Fm ZShkZXNjLCBfZGVzYywgJnhvcl9jaGFuLT5pbl9wcm9ncmVzc19xLCBub2RlKSB7Cj4gKyDCoCDC oCDCoCDCoCDCoCDCoCDCoCBsaXN0X2RlbCgmZGVzYy0+bm9kZSk7Cj4gKyDCoCDCoCDCoCDCoCDC oCDCoCDCoCB4b3JfY2hhbi0+dG90YWxfZGVzYy0tOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAg a2ZyZWUoZGVzYyk7Cj4gKyDCoCDCoCDCoCB9Cj4gKyDCoCDCoCDCoCBsaXN0X2Zvcl9lYWNoX2Vu dHJ5X3NhZmUoZGVzYywgX2Rlc2MsICZ4b3JfY2hhbi0+ZnJlZV9kZXNjLCBub2RlKSB7Cj4gKyDC oCDCoCDCoCDCoCDCoCDCoCDCoCBsaXN0X2RlbCgmZGVzYy0+bm9kZSk7Cj4gKyDCoCDCoCDCoCDC oCDCoCDCoCDCoCB4b3JfY2hhbi0+dG90YWxfZGVzYy0tOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAg wqAga2ZyZWUoZGVzYyk7Cj4gKyDCoCDCoCDCoCB9Cj4gKyDCoCDCoCDCoCBCVUdfT04odW5saWtl bHkoeG9yX2NoYW4tPnRvdGFsX2Rlc2MpKTsgLyogU29tZSBkZXNjcmlwdG9yIG5vdCBmcmVlZD8g Ki8KPiArfQo+ICsKPiArc3RhdGljIGludCB0YWxpdG9zX2FsbG9jX2NoYW5fcmVzb3VyY2VzKHN0 cnVjdCBkbWFfY2hhbiAqY2hhbikKPiArewo+ICsgwqAgwqAgwqAgc3RydWN0IHRhbGl0b3NfeG9y X2NoYW4gKnhvcl9jaGFuOwo+ICsgwqAgwqAgwqAgc3RydWN0IHRhbGl0b3NfeG9yX2Rlc2MgKmRl c2M7Cj4gKyDCoCDCoCDCoCBMSVNUX0hFQUQodG1wX2xpc3QpOwo+ICsgwqAgwqAgwqAgaW50IGk7 Cj4gKwo+ICsgwqAgwqAgwqAgeG9yX2NoYW4gPSBjb250YWluZXJfb2YoY2hhbiwgc3RydWN0IHRh bGl0b3NfeG9yX2NoYW4sIGNvbW1vbik7Cj4gKwo+ICsgwqAgwqAgwqAgaWYgKCFsaXN0X2VtcHR5 KCZ4b3JfY2hhbi0+ZnJlZV9kZXNjKSkKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHJldHVybiB4 b3JfY2hhbi0+dG90YWxfZGVzYzsKPiArCj4gKyDCoCDCoCDCoCAvKiAyNTYgaW5pdGlhbCBkZXNj cmlwdG9ycyAqLwo+ICsgwqAgwqAgwqAgZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKSB7Cj4gKyDC oCDCoCDCoCDCoCDCoCDCoCDCoCBkZXNjID0gdGFsaXRvc194b3JfYWxsb2NfZGVzY3JpcHRvcih4 b3JfY2hhbiwgR0ZQX0tFUk5FTCk7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCBpZiAoIWRlc2Mp IHsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGRldl9lcnIoeG9yX2NoYW4t PmNvbW1vbi5kZXZpY2UtPmRldiwKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgICJPbmx5ICVkIGluaXRpYWwgZGVzY3JpcHRvcnNcbiIsIGkpOwo+ICsgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgYnJlYWs7Cj4gKyDCoCDCoCDCoCDCoCDCoCDC oCDCoCB9Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCBsaXN0X2FkZF90YWlsKCZkZXNjLT5ub2Rl LCAmdG1wX2xpc3QpOwo+ICsgwqAgwqAgwqAgfQo+ICsKPiArIMKgIMKgIMKgIGlmICghaSkKPiAr IMKgIMKgIMKgIMKgIMKgIMKgIMKgIHJldHVybiAtRU5PTUVNOwo+ICsKPiArIMKgIMKgIMKgIC8q IEF0IGxlYXN0IG9uZSBkZXNjIGlzIGFsbG9jYXRlZCAqLwo+ICsgwqAgwqAgwqAgbGlzdF9zcGxp Y2VfaW5pdCgmdG1wX2xpc3QsICZ4b3JfY2hhbi0+ZnJlZV9kZXNjKTsKPiArCj4gKyDCoCDCoCDC oCByZXR1cm4geG9yX2NoYW4tPnRvdGFsX2Rlc2M7Cj4gK30KPiArCj4gK3N0YXRpYyBzdHJ1Y3Qg ZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKiB0YWxpdG9zX3ByZXBfZG1hX3hvcigKPiArIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHN0cnVjdCBkbWFfY2hhbiAqY2hhbiwgZG1hX2Fk ZHJfdCBkZXN0LCBkbWFfYWRkcl90ICpzcmMsCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCB1bnNpZ25lZCBpbnQgc3JjX2NudCwgc2l6ZV90IGxlbiwgdW5zaWduZWQgbG9uZyBm bGFncykKPiArewo+ICsgwqAgwqAgwqAgc3RydWN0IHRhbGl0b3NfeG9yX2NoYW4gKnhvcl9jaGFu Owo+ICsgwqAgwqAgwqAgc3RydWN0IHRhbGl0b3NfeG9yX2Rlc2MgKm5ldzsKPiArIMKgIMKgIMKg IHN0cnVjdCB0YWxpdG9zX2Rlc2MgKmRlc2M7Cj4gKyDCoCDCoCDCoCBpbnQgaSwgajsKPiArCj4g KyDCoCDCoCDCoCBCVUdfT04odW5saWtlbHkobGVuID4gVEFMSVRPU19NQVhfREFUQV9MRU4pKTsK PiArCj4gKyDCoCDCoCDCoCB4b3JfY2hhbiA9IGNvbnRhaW5lcl9vZihjaGFuLCBzdHJ1Y3QgdGFs aXRvc194b3JfY2hhbiwgY29tbW9uKTsKPiArCj4gKyDCoCDCoCDCoCBpZiAoIWxpc3RfZW1wdHko Jnhvcl9jaGFuLT5mcmVlX2Rlc2MpKSB7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCBuZXcgPSBj b250YWluZXJfb2YoeG9yX2NoYW4tPmZyZWVfZGVzYy5uZXh0LAo+ICsgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBzdHJ1Y3QgdGFsaXRvc194b3JfZGVz Yywgbm9kZSk7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCBsaXN0X2RlbCgmbmV3LT5ub2RlKTsK PiArIMKgIMKgIMKgIH0gZWxzZSB7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCBuZXcgPSB0YWxp dG9zX3hvcl9hbGxvY19kZXNjcmlwdG9yKHhvcl9jaGFuLCBHRlBfS0VSTkVMKTsKPiArIMKgIMKg IMKgIH0KPiArCj4gKyDCoCDCoCDCoCBpZiAoIW5ldykgewo+ICsgwqAgwqAgwqAgwqAgwqAgwqAg wqAgZGV2X2Vycih4b3JfY2hhbi0+Y29tbW9uLmRldmljZS0+ZGV2LAo+ICsgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgIk5vIGZyZWUgbWVtb3J5IGZvciBYT1IgRE1BIGRlc2NyaXB0 b3JcbiIpOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgcmV0dXJuIE5VTEw7Cj4gKyDCoCDCoCDC oCB9Cj4gKwo+ICsgwqAgwqAgwqAgZGVzYyA9ICZuZXctPmh3ZGVzYzsKPiArIMKgIMKgIMKgIC8q IFNldCBkZXN0aW5hdGlvbjogTGFzdCBwb2ludGVyIHBhaXIgKi8KPiArIMKgIMKgIMKgIHRvX3Rh bGl0b3NfcHRyKCZkZXNjLT5wdHJbNl0sIGRlc3QpOwo+ICsgwqAgwqAgwqAgZGVzYy0+cHRyWzZd LmxlbiA9IGNwdV90b19iZTE2KGxlbik7Cj4gKyDCoCDCoCDCoCBkZXNjLT5wdHJbNl0ual9leHRl bnQgPSAwOwo+ICsKPiArIMKgIMKgIMKgIC8qIFNldCBTb3VyY2VzOiBFbmQgbG9hZGluZyBmcm9t IHNlY29uZC1sYXN0IHBvaW50ZXIgcGFpciAqLwo+ICsgwqAgwqAgwqAgZm9yIChpID0gNSwgaiA9 IDA7IChqIDwgc3JjX2NudCkgJiYgKGkgPiAwKTsgaS0tLCBqKyspIHsKPiArIMKgIMKgIMKgIMKg IMKgIMKgIMKgIHRvX3RhbGl0b3NfcHRyKCZkZXNjLT5wdHJbaV0sIHNyY1tqXSk7Cj4gKyDCoCDC oCDCoCDCoCDCoCDCoCDCoCBkZXNjLT5wdHJbaV0ubGVuID0gY3B1X3RvX2JlMTYobGVuKTsKPiAr IMKgIMKgIMKgIMKgIMKgIMKgIMKgIGRlc2MtPnB0cltpXS5qX2V4dGVudCA9IDA7Cj4gKyDCoCDC oCDCoCB9Cj4gKwo+ICsgwqAgwqAgwqAgLyoKPiArIMKgIMKgIMKgIMKgKiBkb2N1bWVudGF0aW9u IHN0YXRlcyBmaXJzdCAwIHB0ci9sZW4gY29tYm8gbWFya3MgZW5kIG9mIHNvdXJjZXMKPiArIMKg IMKgIMKgIMKgKiB5ZXQgZGV2aWNlIHByb2R1Y2VzIHNjYXR0ZXIgYm91bmRhcnkgZXJyb3IgdW5s ZXNzIGFsbCBzdWJzZXF1ZW50Cj4gKyDCoCDCoCDCoCDCoCogc291cmNlcyBhcmUgemVyb2VkIG91 dAo+ICsgwqAgwqAgwqAgwqAqLwo+ICsgwqAgwqAgwqAgZm9yICg7IGkgPj0gMDsgaS0tKSB7Cj4g KyDCoCDCoCDCoCDCoCDCoCDCoCDCoCB0b190YWxpdG9zX3B0cigmZGVzYy0+cHRyW2ldLCAwKTsK PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGRlc2MtPnB0cltpXS5sZW4gPSAwOwo+ICsgwqAgwqAg wqAgwqAgwqAgwqAgwqAgZGVzYy0+cHRyW2ldLmpfZXh0ZW50ID0gMDsKPiArIMKgIMKgIMKgIH0K PiArCj4gKyDCoCDCoCDCoCBkZXNjLT5oZHIgPSBERVNDX0hEUl9TRUwwX0FFU1UgfCBERVNDX0hE Ul9NT0RFMF9BRVNVX1hPUgo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgfCBERVNDX0hE Ul9UWVBFX1JBSURfWE9SOwo+ICsKPiArIMKgIMKgIMKgIGxpc3RfYWRkX3RhaWwoJm5ldy0+bm9k ZSwgJm5ldy0+dHhfbGlzdCk7Cj4gKwo+ICsgwqAgwqAgwqAgbmV3LT5hc3luY190eC5mbGFncyA9 IGZsYWdzOwo+ICsgwqAgwqAgwqAgbmV3LT5hc3luY190eC5jb29raWUgPSAtRUJVU1k7Cj4gKwo+ ICsgwqAgwqAgwqAgcmV0dXJuICZuZXctPmFzeW5jX3R4Owo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9p ZCB0YWxpdG9zX3VucmVnaXN0ZXJfYXN5bmNfeG9yKHN0cnVjdCBkZXZpY2UgKmRldikKPiArewo+ ICsgwqAgwqAgwqAgc3RydWN0IHRhbGl0b3NfcHJpdmF0ZSAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0 YShkZXYpOwo+ICsgwqAgwqAgwqAgc3RydWN0IHRhbGl0b3NfeG9yX2NoYW4gKnhvcl9jaGFuOwo+ ICsgwqAgwqAgwqAgc3RydWN0IGRtYV9jaGFuICpjaGFuOwo+ICsKPiArIMKgIMKgIMKgIGlmIChw cml2LT5kbWFfZGV2X2NvbW1vbi5jaGFuY250KQo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgZG1h X2FzeW5jX2RldmljZV91bnJlZ2lzdGVyKCZwcml2LT5kbWFfZGV2X2NvbW1vbik7Cj4gKwo+ICsg wqAgwqAgwqAgbGlzdF9mb3JfZWFjaF9lbnRyeShjaGFuLCAmcHJpdi0+ZG1hX2Rldl9jb21tb24u Y2hhbm5lbHMsIGRldmljZV9ub2RlKSB7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCB4b3JfY2hh biA9IGNvbnRhaW5lcl9vZihjaGFuLCBzdHJ1Y3QgdGFsaXRvc194b3JfY2hhbiwgY29tbW9uKTsK PiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGxpc3RfZGVsKCZjaGFuLT5kZXZpY2Vfbm9kZSk7Cj4g KyDCoCDCoCDCoCDCoCDCoCDCoCDCoCBwcml2LT5kbWFfZGV2X2NvbW1vbi5jaGFuY250LS07Cj4g KyDCoCDCoCDCoCDCoCDCoCDCoCDCoCBrZnJlZSh4b3JfY2hhbik7Cj4gKyDCoCDCoCDCoCB9Cj4g K30KPiArCj4gKy8qKgo+ICsgKiB0YWxpdG9zX3JlZ2lzdGVyX2RtYV9hc3luYyAtIEluaXRpYWxp emUgdGhlIEZyZWVzY2FsZSBYT1IgQURNQSBkZXZpY2UKPiArICogSXQgaXMgcmVnaXN0ZXJlZCBh cyBhIERNQSBkZXZpY2Ugd2l0aCB0aGUgY2FwYWJpbGl0eSB0byBwZXJmb3JtCj4gKyAqIFhPUiBv cGVyYXRpb24gd2l0aCB0aGUgQXN5bmNfdHggbGF5ZXIuCj4gKyAqIFRoZSB2YXJpb3VzIHF1ZXVl cyBhbmQgY2hhbm5lbCByZXNvdXJjZXMgYXJlIGFsc28gYWxsb2NhdGVkLgo+ICsgKi8KPiArc3Rh dGljIGludCB0YWxpdG9zX3JlZ2lzdGVyX2FzeW5jX3R4KHN0cnVjdCBkZXZpY2UgKmRldiwgaW50 IG1heF94b3Jfc3JjcykKPiArewo+ICsgwqAgwqAgwqAgc3RydWN0IHRhbGl0b3NfcHJpdmF0ZSAq cHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwo+ICsgwqAgwqAgwqAgc3RydWN0IGRtYV9kZXZp Y2UgKmRtYV9kZXYgPSAmcHJpdi0+ZG1hX2Rldl9jb21tb247Cj4gKyDCoCDCoCDCoCBzdHJ1Y3Qg dGFsaXRvc194b3JfY2hhbiAqeG9yX2NoYW47Cj4gKyDCoCDCoCDCoCBpbnQgZXJyOwo+ICsKPiAr IMKgIMKgIMKgIHhvcl9jaGFuID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHRhbGl0b3NfeG9yX2No YW4pLCBHRlBfS0VSTkVMKTsKPiArIMKgIMKgIMKgIGlmICgheG9yX2NoYW4pIHsKPiArIMKgIMKg IMKgIMKgIMKgIMKgIMKgIGRldl9lcnIoZGV2LCAidW5hYmxlIHRvIGFsbG9jYXRlIHhvciBjaGFu bmVsXG4iKTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHJldHVybiAtRU5PTUVNOwo+ICsgwqAg wqAgwqAgfQo+ICsKPiArIMKgIMKgIMKgIGRtYV9kZXYtPmRldiA9IGRldjsKPiArIMKgIMKgIMKg IGRtYV9kZXYtPmRldmljZV9hbGxvY19jaGFuX3Jlc291cmNlcyA9IHRhbGl0b3NfYWxsb2NfY2hh bl9yZXNvdXJjZXM7Cj4gKyDCoCDCoCDCoCBkbWFfZGV2LT5kZXZpY2VfZnJlZV9jaGFuX3Jlc291 cmNlcyA9IHRhbGl0b3NfZnJlZV9jaGFuX3Jlc291cmNlczsKPiArIMKgIMKgIMKgIGRtYV9kZXYt PmRldmljZV9wcmVwX2RtYV94b3IgPSB0YWxpdG9zX3ByZXBfZG1hX3hvcjsKPiArIMKgIMKgIMKg IGRtYV9kZXYtPm1heF94b3IgPSBtYXhfeG9yX3NyY3M7Cj4gKyDCoCDCoCDCoCBkbWFfZGV2LT5k ZXZpY2VfaXNfdHhfY29tcGxldGUgPSB0YWxpdG9zX2lzX3R4X2NvbXBsZXRlOwo+ICsgwqAgwqAg wqAgZG1hX2Rldi0+ZGV2aWNlX2lzc3VlX3BlbmRpbmcgPSB0YWxpdG9zX2lzc3VlX3BlbmRpbmc7 Cj4gKyDCoCDCoCDCoCBJTklUX0xJU1RfSEVBRCgmZG1hX2Rldi0+Y2hhbm5lbHMpOwo+ICsgwqAg wqAgwqAgZG1hX2NhcF9zZXQoRE1BX1hPUiwgZG1hX2Rldi0+Y2FwX21hc2spOwo+ICsKPiArIMKg IMKgIMKgIHhvcl9jaGFuLT5kZXYgPSBkZXY7Cj4gKyDCoCDCoCDCoCB4b3JfY2hhbi0+Y29tbW9u LmRldmljZSA9IGRtYV9kZXY7Cj4gKyDCoCDCoCDCoCB4b3JfY2hhbi0+dG90YWxfZGVzYyA9IDA7 Cj4gKyDCoCDCoCDCoCBJTklUX0xJU1RfSEVBRCgmeG9yX2NoYW4tPnN1Ym1pdF9xKTsKPiArIMKg IMKgIMKgIElOSVRfTElTVF9IRUFEKCZ4b3JfY2hhbi0+cGVuZGluZ19xKTsKPiArIMKgIMKgIMKg IElOSVRfTElTVF9IRUFEKCZ4b3JfY2hhbi0+aW5fcHJvZ3Jlc3NfcSk7Cj4gKyDCoCDCoCDCoCBJ TklUX0xJU1RfSEVBRCgmeG9yX2NoYW4tPmZyZWVfZGVzYyk7Cj4gKyDCoCDCoCDCoCBzcGluX2xv Y2tfaW5pdCgmeG9yX2NoYW4tPmRlc2NfbG9jayk7Cj4gKwo+ICsgwqAgwqAgwqAgbGlzdF9hZGRf dGFpbCgmeG9yX2NoYW4tPmNvbW1vbi5kZXZpY2Vfbm9kZSwgJmRtYV9kZXYtPmNoYW5uZWxzKTsK PiArIMKgIMKgIMKgIGRtYV9kZXYtPmNoYW5jbnQrKzsKPiArCj4gKyDCoCDCoCDCoCBlcnIgPSBk bWFfYXN5bmNfZGV2aWNlX3JlZ2lzdGVyKGRtYV9kZXYpOwo+ICsgwqAgwqAgwqAgaWYgKGVycikg ewo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgZGV2X2VycihkZXYsICJVbmFibGUgdG8gcmVnaXN0 ZXIgWE9SIHdpdGggQXN5bmNfdHhcbiIpOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgZ290byBl cnJfb3V0Owo+ICsgwqAgwqAgwqAgfQo+ICsKPiArIMKgIMKgIMKgIHJldHVybiBlcnI7Cj4gKwo+ ICtlcnJfb3V0Ogo+ICsgwqAgwqAgwqAgdGFsaXRvc191bnJlZ2lzdGVyX2FzeW5jX3hvcihkZXYp Owo+ICsgwqAgwqAgwqAgcmV0dXJuIGVycjsKPiArfQo+ICsjZW5kaWYgLyogQ09ORklHX0NSWVBU T19ERVZfVEFMSVRPU19SQUlEWE9SICovCj4gwqAvKgo+IMKgKiBjcnlwdG8gYWxnCj4gwqAqLwo+ IEBAIC0xNzY4LDYgKzIxNDMsMTAgQEAgc3RhdGljIGludCB0YWxpdG9zX3JlbW92ZShzdHJ1Y3Qg b2ZfZGV2aWNlICpvZmRldikKPiDCoCDCoCDCoCDCoHRhc2tsZXRfa2lsbCgmcHJpdi0+ZG9uZV90 YXNrKTsKPgo+IMKgIMKgIMKgIMKgaW91bm1hcChwcml2LT5yZWcpOwo+ICsjaWZkZWYgQ09ORklH X0NSWVBUT19ERVZfVEFMSVRPU19SQUlEWE9SCj4gKyDCoCDCoCDCoCBpZiAocHJpdi0+ZG1hX2Rl dl9jb21tb24uY2hhbmNudCkKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHRhbGl0b3NfdW5yZWdp c3Rlcl9hc3luY194b3IoZGV2KTsKPiArI2VuZGlmIC8qIENPTkZJR19DUllQVE9fREVWX1RBTElU T1NfUkFJRFhPUiAqLwo+Cj4gwqAgwqAgwqAgwqBkZXZfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsK Pgo+IEBAIC0xOTI2LDYgKzIzMDUsMjcgQEAgc3RhdGljIGludCB0YWxpdG9zX3Byb2JlKHN0cnVj dCBvZl9kZXZpY2UgKm9mZGV2LAo+IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg ZGV2X2luZm8oZGV2LCAiaHdybmdcbiIpOwo+IMKgIMKgIMKgIMKgfQo+Cj4gKyNpZmRlZiBDT05G SUdfQ1JZUFRPX0RFVl9UQUxJVE9TX1JBSURYT1IKPiArIMKgIMKgIMKgIC8qCj4gKyDCoCDCoCDC oCDCoCogcmVnaXN0ZXIgd2l0aCBhc3luY190eCB4b3IsIGlmIGNhcGFibGUKPiArIMKgIMKgIMKg IMKgKiBTRUMgMi54IHN1cHBvcnQgdXAgdG8gMyBSQUlEIHNvdXJjZXMsCj4gKyDCoCDCoCDCoCDC oCogU0VDIDMueCBzdXBwb3J0IHVwIHRvIDYKPiArIMKgIMKgIMKgIMKgKi8KPiArIMKgIMKgIMKg IGlmIChod19zdXBwb3J0cyhkZXYsIERFU0NfSERSX1NFTDBfQUVTVSB8IERFU0NfSERSX1RZUEVf UkFJRF9YT1IpKSB7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCBpbnQgbWF4X3hvcl9zcmNzID0g MzsKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShu cCwgImZzbCxzZWMzLjAiKSkKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIG1h eF94b3Jfc3JjcyA9IDY7Cj4gKwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgZXJyID0gdGFsaXRv c19yZWdpc3Rlcl9hc3luY190eChkZXYsIG1heF94b3Jfc3Jjcyk7Cj4gKyDCoCDCoCDCoCDCoCDC oCDCoCDCoCBpZiAoZXJyKSB7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBk ZXZfZXJyKGRldiwgImZhaWxlZCB0byByZWdpc3RlciBhc3luY190eCB4b3I6ICVkXG4iLAo+ICsg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgZXJyKTsKPiArIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGdvdG8gZXJyX291dDsKPiArIMKgIMKgIMKg IMKgIMKgIMKgIMKgIH0KPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGRldl9pbmZvKGRldiwgIm1h eF94b3Jfc3JjcyAlZFxuIiwgbWF4X3hvcl9zcmNzKTsKPiArIMKgIMKgIMKgIH0KPiArI2VuZGlm IC8qIENPTkZJR19DUllQVE9fREVWX1RBTElUT1NfUkFJRFhPUiAqLwo+ICsKPiDCoCDCoCDCoCDC oC8qIHJlZ2lzdGVyIGNyeXB0byBhbGdvcml0aG1zIHRoZSBkZXZpY2Ugc3VwcG9ydHMgKi8KPiDC oCDCoCDCoCDCoGZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRyaXZlcl9hbGdzKTsgaSsrKSB7 Cj4gwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBpZiAoaHdfc3VwcG9ydHMoZGV2LCBkcml2ZXJfYWxn c1tpXS5kZXNjX2hkcl90ZW1wbGF0ZSkpIHsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcnlwdG8v dGFsaXRvcy5oIGIvZHJpdmVycy9jcnlwdG8vdGFsaXRvcy5oCj4gaW5kZXggZmY1YTE0NS4uYjYx OTdiYyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2NyeXB0by90YWxpdG9zLmgKPiArKysgYi9kcml2 ZXJzL2NyeXB0by90YWxpdG9zLmgKPiBAQCAtMTU1LDYgKzE1NSw3IEBACj4gwqAvKiBwcmltYXJ5 IGV4ZWN1dGlvbiB1bml0IG1vZGUgKE1PREUwKSBhbmQgZGVyaXZhdGl2ZXMgKi8KPiDCoCNkZWZp bmUgwqAgwqAgwqAgwqBERVNDX0hEUl9NT0RFMF9FTkNSWVBUIMKgIMKgIMKgIMKgIMKgY3B1X3Rv X2JlMzIoMHgwMDEwMDAwMCkKPiDCoCNkZWZpbmUgwqAgwqAgwqAgwqBERVNDX0hEUl9NT0RFMF9B RVNVX0NCQyDCoCDCoCDCoCDCoCBjcHVfdG9fYmUzMigweDAwMjAwMDAwKQo+ICsjZGVmaW5lIMKg IMKgIMKgIMKgREVTQ19IRFJfTU9ERTBfQUVTVV9YT1IgwqAgwqAgwqAgwqAgY3B1X3RvX2JlMzIo MHgwYzYwMDAwMCkKPiDCoCNkZWZpbmUgwqAgwqAgwqAgwqBERVNDX0hEUl9NT0RFMF9ERVVfQ0JD IMKgIMKgIMKgIMKgIMKgY3B1X3RvX2JlMzIoMHgwMDQwMDAwMCkKPiDCoCNkZWZpbmUgwqAgwqAg wqAgwqBERVNDX0hEUl9NT0RFMF9ERVVfM0RFUyDCoCDCoCDCoCDCoCBjcHVfdG9fYmUzMigweDAw MjAwMDAwKQo+IMKgI2RlZmluZSDCoCDCoCDCoCDCoERFU0NfSERSX01PREUwX01ERVVfSU5JVCDC oCDCoCDCoCDCoGNwdV90b19iZTMyKDB4MDEwMDAwMDApCj4gQEAgLTIwMiw2ICsyMDMsNyBAQAo+ IMKgI2RlZmluZSBERVNDX0hEUl9UWVBFX0lQU0VDX0VTUCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoGNwdV90b19iZTMyKDEgPDwgMykKPiDCoCNkZWZpbmUgREVTQ19IRFJfVFlQ RV9DT01NT05fTk9OU05PT1BfTk9fQUZFVSDCoGNwdV90b19iZTMyKDIgPDwgMykKPiDCoCNkZWZp bmUgREVTQ19IRFJfVFlQRV9ITUFDX1NOT09QX05PX0FGRVUgwqAgwqAgwqAgY3B1X3RvX2JlMzIo NCA8PCAzKQo+ICsjZGVmaW5lIERFU0NfSERSX1RZUEVfUkFJRF9YT1IgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgY3B1X3RvX2JlMzIoMjEgPDwgMykKPgo+IMKgLyogbGluayB0YWJsZSBleHRlbnQg ZmllbGQgYml0cyAqLwo+IMKgI2RlZmluZSBERVNDX1BUUl9MTktUQkxfSlVNUCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCAweDgwCj4gLS0KPiAxLjYuNC4yCj4KPiAtLQo+IFRvIHVuc3Vic2Ny aWJlIGZyb20gdGhpcyBsaXN0OiBzZW5kIHRoZSBsaW5lICJ1bnN1YnNjcmliZSBsaW51eC1yYWlk IiBpbgo+IHRoZSBib2R5IG9mIGEgbWVzc2FnZSB0byBtYWpvcmRvbW9Admdlci5rZXJuZWwub3Jn Cj4gTW9yZSBtYWpvcmRvbW8gaW5mbyBhdCDCoGh0dHA6Ly92Z2VyLmtlcm5lbC5vcmcvbWFqb3Jk b21vLWluZm8uaHRtbAo+CgoKCi0tIApUaGUgc2ltcGxlc3QgaXMgbm90IGFsbCBiZXN0IGJ1dCB0 aGUgYmVzdCBpcyBzdXJlbHkgdGhlIHNpbXBsZXN0IQpfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwpMaW51eHBwYy1kZXYgbWFpbGluZyBsaXN0CkxpbnV4cHBj LWRldkBsaXN0cy5vemxhYnMub3JnCmh0dHBzOi8vbGlzdHMub3psYWJzLm9yZy9saXN0aW5mby9s aW51eHBwYy1kZXY=