Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id ; Thu, 25 Jul 2002 08:12:16 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id ; Thu, 25 Jul 2002 08:12:16 -0400 Received: from astound-64-85-224-253.ca.astound.net ([64.85.224.253]:39946 "EHLO master.linux-ide.org") by vger.kernel.org with ESMTP id ; Thu, 25 Jul 2002 08:12:03 -0400 Date: Thu, 25 Jul 2002 05:05:38 -0700 (PDT) From: Andre Hedrick To: Alan Cox cc: martin@dalecki.de, Vojtech Pavlik , William Lee Irwin III , linux-kernel@vger.kernel.org Subject: Re: [RFC/CFT] cmd640 irqlocking fixes In-Reply-To: <1027601555.9489.57.camel@irongate.swansea.linux.org.uk> Message-ID: MIME-Version: 1.0 Content-Type: multipart/mixed; BOUNDARY="1430322656-1932894290-1027598738=:4719" Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 70908 Lines: 1197 This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. Send mail to mime@docserver.cac.washington.edu for more info. --1430322656-1932894290-1027598738=:4719 Content-Type: text/plain; charset=us-ascii Alan, You are partially correct; however, I can show earlier evolutions an fragments about the locking changes but that should not be needed. original AC cmd640.c.patch quickest I could find that pre-dates your changes to cmd640.c ide.2.4.19-p4.spin.03302002.patch This will fix about 80% of the mess in 2.5 too but the rest is a goat screw because it violates the NDA erratiums about the hardware. Cheers, Andre Hedrick LAD Storage Consulting Group On 25 Jul 2002, Alan Cox wrote: > On Thu, 2002-07-25 at 11:51, Andre Hedrick wrote: > > I am sorry Alan, but I fixed all of the locking code in 2.4 a long time > > ago, and you adopted it somewhere around this patch. > > Andre - the PCI probe fixes which this is about is something I wrote. > The other locking stuff which is unrelated to this discussion is your > code but thats not Im talking about - OK. > > > Again I have to call this patch and fix and take credit and full ownership > > of removing all the save/cli/sti/restore which littered the driver and > > were spread like cow patties through a chopper gun. > > That patch is wrong by the way because I made a mistake in 2.4. Your PCI > config locking should be using pci_config lock not io_request. I'll fix > the 2.4 tree in a bit now I've tidied up the 2.5 version. > > > @@ -748,10 +737,8 @@ > > bus_type = "VLB"; > > } else { > > cmd640_vlb = 0; > > - /* > > - * Don't leak I/O cycles on the PCI bus by blindly attempting > > - * a configuration cycle type that is not supported by the hardware. > > - */ > > + /* Find out what kind of PCI probing is supported otherwise > > + Justin Gibbs will sulk.. */ > > > Just ask Justin Gibbs. He didn't like my comment 8) Im sure he remembers > who wrote it 8) > > > --1430322656-1932894290-1027598738=:4719 Content-Type: text/plain; charset=us-ascii; name="cmd640.c.patch" Content-Transfer-Encoding: base64 Content-ID: Content-Description: Content-Disposition: attachment; filename="cmd640.c.patch" LS0tIGxpbnV4LTIuNC4xOS1wNS9kcml2ZXJzL2lkZS9jbWQ2NDAuYwlGcmkg RmViIDE2IDE2OjAyOjM2IDIwMDENCisrKyBsaW51eC0yLjQuMTktcDUtYWMy L2RyaXZlcnMvaWRlL2NtZDY0MC5jCVRodSBBcHIgIDQgMjM6MTU6NTIgMjAw Mg0KQEAgLTY5Miw2ICs2OTIsNDQgQEANCiANCiAjZW5kaWYgLyogQ09ORklH X0JMS19ERVZfQ01ENjQwX0VOSEFOQ0VEICovDQogDQorc3RhdGljIGludCBw Y2lfY29uZjEodm9pZCkNCit7DQorCXUzMiB0bXA7DQorCXVuc2lnbmVkIGxv bmcgZmxhZ3M7DQorDQorCXNhdmVfZmxhZ3MoZmxhZ3MpOw0KKwlfX2NsaSgp Ow0KKwlvdXRiKDB4MDEsIDB4Q0ZCKTsNCisJdG1wID0gaW5sKDB4Q0Y4KTsN CisJb3V0bCgweDgwMDAwMDAwLCAweENGOCk7DQorCWlmKGlubCgweENGOCkg PT0gMHg4MDAwMDAwMCkNCisJew0KKwkJb3V0bCh0bXAsIDB4Q0Y4KTsNCisJ CV9fcmVzdG9yZV9mbGFncyhmbGFncyk7DQorCQlyZXR1cm4gMTsNCisJfQ0K KwlvdXRsKHRtcCwgMHhDRjgpOw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3Rh dGljIGludCBwY2lfY29uZjIodm9pZCkNCit7DQorCXVuc2lnbmVkIGxvbmcg ZmxhZ3M7DQorDQorCXNhdmVfZmxhZ3MoZmxhZ3MpOw0KKwlfX2NsaSgpOw0K KwlvdXRiKDB4MDAsIDB4Q0ZCKTsNCisJb3V0YigweDAwLCAweENGOCk7DQor CW91dGIoMHgwMCwgMHhDRkEpOw0KKwlpZihpbmIoMHhDRjgpID09IDB4MDAg JiYgaW5iKDB4Q0Y4KSA9PSAweDAwKQ0KKwl7DQorCQlyZXN0b3JlX2ZsYWdz KGZsYWdzKTsNCisJCXJldHVybiAxOw0KKwl9DQorCXJlc3RvcmVfZmxhZ3Mo ZmxhZ3MpOw0KKwlyZXR1cm4gMDsNCit9DQorDQogLyoNCiAgKiBQcm9iZSBm b3IgYSBjbWQ2NDAgY2hpcHNldCwgYW5kIGluaXRpYWxpemUgaXQgaWYgZm91 bmQuICBDYWxsZWQgZnJvbSBpZGUuYw0KICAqLw0KQEAgLTcwOSw5ICs3NDcs MTEgQEANCiAJCWJ1c190eXBlID0gIlZMQiI7DQogCX0gZWxzZSB7DQogCQlj bWQ2NDBfdmxiID0gMDsNCi0JCWlmIChwcm9iZV9mb3JfY21kNjQwX3BjaTEo KSkNCisJCS8qIEZpbmQgb3V0IHdoYXQga2luZCBvZiBQQ0kgcHJvYmluZyBp cyBzdXBwb3J0ZWQgb3RoZXJ3aXNlDQorCQkgICBKdXN0aW4gR2liYnMgd2ls bCBzdWxrLi4gKi8NCisJCWlmIChwY2lfY29uZjEoKSAmJiBwcm9iZV9mb3Jf Y21kNjQwX3BjaTEoKSkNCiAJCQlidXNfdHlwZSA9ICJQQ0kgKHR5cGUxKSI7 DQotCQllbHNlIGlmIChwcm9iZV9mb3JfY21kNjQwX3BjaTIoKSkNCisJCWVs c2UgaWYgKHBjaV9jb25mMigpICYmIHByb2JlX2Zvcl9jbWQ2NDBfcGNpMigp KQ0KIAkJCWJ1c190eXBlID0gIlBDSSAodHlwZTIpIjsNCiAJCWVsc2UNCiAJ CQlyZXR1cm4gMDsNCg== --1430322656-1932894290-1027598738=:4719 Content-Type: text/plain; charset=us-ascii; name="ide.2.4.19-p4.spin.03302002.patch" Content-Transfer-Encoding: base64 Content-ID: Content-Description: Content-Disposition: attachment; filename="ide.2.4.19-p4.spin.03302002.patch" ZGlmZiAtdXJOIGxpbnV4LTIuNC4xOS1wNC9kcml2ZXJzL2lkZS9hbGkxNHh4 LmMgbGludXgtMi40LjE5LXA0LnNwaW4vZHJpdmVycy9pZGUvYWxpMTR4eC5j DQotLS0gbGludXgtMi40LjE5LXA0L2RyaXZlcnMvaWRlL2FsaTE0eHguYwlT dW4gSnVsIDE1IDE2OjIyOjIzIDIwMDENCisrKyBsaW51eC0yLjQuMTktcDQu c3Bpbi9kcml2ZXJzL2lkZS9hbGkxNHh4LmMJV2VkIE1hciAyNyAyMjowODo1 MyAyMDAyDQpAQCAtMTM3LDE1ICsxMzcsMTQgQEANCiANCiAJLyogc3R1ZmYg dGltaW5nIHBhcmFtZXRlcnMgaW50byBjb250cm9sbGVyIHJlZ2lzdGVycyAq Lw0KIAlkcml2ZU51bSA9IChIV0lGKGRyaXZlKS0+aW5kZXggPDwgMSkgKyBk cml2ZS0+c2VsZWN0LmIudW5pdDsNCi0Jc2F2ZV9mbGFncyhmbGFncyk7CS8q IGFsbCBDUFVzICovDQotCWNsaSgpOwkJCS8qIGFsbCBDUFVzICovDQorCXNw aW5fbG9ja19pcnFzYXZlKCZpb19yZXF1ZXN0X2xvY2ssIGZsYWdzKTsNCiAJ b3V0Yl9wKHJlZ09uLCBiYXNlUG9ydCk7DQogCW91dFJlZyhwYXJhbTEsIHJl Z1RhYltkcml2ZU51bV0ucmVnMSk7DQogCW91dFJlZyhwYXJhbTIsIHJlZ1Rh Yltkcml2ZU51bV0ucmVnMik7DQogCW91dFJlZyhwYXJhbTMsIHJlZ1RhYltk cml2ZU51bV0ucmVnMyk7DQogCW91dFJlZyhwYXJhbTQsIHJlZ1RhYltkcml2 ZU51bV0ucmVnNCk7DQogCW91dGJfcChyZWdPZmYsIGJhc2VQb3J0KTsNCi0J cmVzdG9yZV9mbGFncyhmbGFncyk7CS8qIGFsbCBDUFVzICovDQorCXNwaW5f dW5sb2NrX2lycXJlc3RvcmUoJmlvX3JlcXVlc3RfbG9jaywgZmxhZ3MpOw0K IH0NCiANCiAvKg0KQEAgLTE1Nyw4ICsxNTYsOCBAQA0KIAlieXRlIHQ7DQog CXVuc2lnbmVkIGxvbmcgZmxhZ3M7DQogDQotCV9fc2F2ZV9mbGFncyhmbGFn cyk7CS8qIGxvY2FsIENQVSBvbmx5ICovDQotCV9fY2xpKCk7CQkvKiBsb2Nh bCBDUFUgb25seSAqLw0KKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CS8qIGxv Y2FsIENQVSBvbmx5ICovDQorCWxvY2FsX2lycV9kaXNhYmxlKCk7CS8qIGxv Y2FsIENQVSBvbmx5ICovDQogCWZvciAoaSA9IDA7IGkgPCBBTElfTlVNX1BP UlRTOyArK2kpIHsNCiAJCWJhc2VQb3J0ID0gcG9ydHNbaV07DQogCQlyZWdP ZmYgPSBpbmIoYmFzZVBvcnQpOw0KQEAgLTE2OSw3ICsxNjgsNyBAQA0KIAkJ CQlkYXRhUG9ydCA9IGJhc2VQb3J0ICsgODsNCiAJCQkJdCA9IGluUmVnKDAp ICYgMHhmMDsNCiAJCQkJb3V0Yl9wKHJlZ09mZiwgYmFzZVBvcnQpOw0KLQkJ CQlfX3Jlc3RvcmVfZmxhZ3MoZmxhZ3MpOwkvKiBsb2NhbCBDUFUgb25seSAq Lw0KKwkJCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CS8qIGxvY2FsIENQ VSBvbmx5ICovDQogCQkJCWlmICh0ICE9IDB4NTApDQogCQkJCQlyZXR1cm4g MDsNCiAJCQkJcmV0dXJuIDE7ICAvKiBzdWNjZXNzICovDQpAQCAtMTc3LDcg KzE3Niw3IEBADQogCQl9DQogCQlvdXRiX3AocmVnT2ZmLCBiYXNlUG9ydCk7 DQogCX0NCi0JX19yZXN0b3JlX2ZsYWdzKGZsYWdzKTsJLyogbG9jYWwgQ1BV IG9ubHkgKi8NCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwkvKiBsb2Nh bCBDUFUgb25seSAqLw0KIAlyZXR1cm4gMDsNCiB9DQogDQpAQCAtMTg5LDE1 ICsxODgsMTUgQEANCiAJYnl0ZSB0Ow0KIAl1bnNpZ25lZCBsb25nIGZsYWdz Ow0KIA0KLQlfX3NhdmVfZmxhZ3MoZmxhZ3MpOwkvKiBsb2NhbCBDUFUgb25s eSAqLw0KLQlfX2NsaSgpOwkJLyogbG9jYWwgQ1BVIG9ubHkgKi8NCisJbG9j YWxfaXJxX3NhdmUoZmxhZ3MpOwkJLyogbG9jYWwgQ1BVIG9ubHkgKi8NCisJ bG9jYWxfaXJxX2Rpc2FibGUoKTsJCS8qIGxvY2FsIENQVSBvbmx5ICovDQog CW91dGJfcChyZWdPbiwgYmFzZVBvcnQpOw0KIAlmb3IgKHAgPSBpbml0RGF0 YTsgcC0+cmVnICE9IDA7ICsrcCkNCiAJCW91dFJlZyhwLT5kYXRhLCBwLT5y ZWcpOw0KIAlvdXRiX3AoMHgwMSwgcmVnUG9ydCk7DQogCXQgPSBpbmIocmVn UG9ydCkgJiAweDAxOw0KIAlvdXRiX3AocmVnT2ZmLCBiYXNlUG9ydCk7DQot CV9fcmVzdG9yZV9mbGFncyhmbGFncyk7CS8qIGxvY2FsIENQVSBvbmx5ICov DQorCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsJLyogbG9jYWwgQ1BVIG9u bHkgKi8NCiAJcmV0dXJuIHQ7DQogfQ0KIA0KZGlmZiAtdXJOIGxpbnV4LTIu NC4xOS1wNC9kcml2ZXJzL2lkZS9hbGltMTV4My5jIGxpbnV4LTIuNC4xOS1w NC5zcGluL2RyaXZlcnMvaWRlL2FsaW0xNXgzLmMNCi0tLSBsaW51eC0yLjQu MTktcDQvZHJpdmVycy9pZGUvYWxpbTE1eDMuYwlGcmkgTWFyIDI5IDE0OjQ3 OjA5IDIwMDINCisrKyBsaW51eC0yLjQuMTktcDQuc3Bpbi9kcml2ZXJzL2lk ZS9hbGltMTV4My5jCUZyaSBNYXIgMjkgMTQ6NDg6MzYgMjAwMg0KQEAgLTI3 Miw5ICsyNzIsOSBAQA0KIAkJaWYgKHJfY2xjID49IDE2KQ0KIAkJCXJfY2xj ID0gMDsNCiAJfQ0KLQlfX3NhdmVfZmxhZ3MoZmxhZ3MpOw0KLQlfX2NsaSgp Ow0KLQkNCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwkvKiBsb2NhbCBDUFUg b25seSAqLw0KKwlsb2NhbF9pcnFfZGlzYWJsZSgpOwkvKiBsb2NhbCBDUFUg b25seSAqLw0KKw0KIAkvKiANCiAJICogUElPIG1vZGUgPT4gQVRBIEZJRk8g b24sIEFUQVBJIEZJRk8gb2ZmDQogCSAqLw0KQEAgLTI5NSw3ICsyOTUsNyBA QA0KIAkNCiAJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgcG9ydCwgc19j bGMpOw0KIAlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCBwb3J0K2RyaXZl LT5zZWxlY3QuYi51bml0KzIsIChhX2NsYyA8PCA0KSB8IHJfY2xjKTsNCi0J X19yZXN0b3JlX2ZsYWdzKGZsYWdzKTsNCisJbG9jYWxfaXJxX3Jlc3RvcmUo ZmxhZ3MpOwkvKiBsb2NhbCBDUFUgb25seSAqLw0KIA0KIAkvKg0KIAkgKiBz ZXR1cCAgIGFjdGl2ZSAgcmVjDQpAQCAtNDQxLDcgKzQ0MSw3IEBADQogCWlk ZV9od2lmX3QgKmh3aWYJCT0gSFdJRihkcml2ZSk7DQogCWlkZV9kbWFfYWN0 aW9uX3QgZG1hX2Z1bmMJPSBpZGVfZG1hX29uOw0KIAlieXRlIGNhbl91bHRy YV9kbWEJCT0gYWxpMTV4M19jYW5fdWx0cmEoZHJpdmUpOw0KLQkNCisNCiAJ aWYgKChtNTIyOV9yZXZpc2lvbjw9MHgyMCkgJiYgKGRyaXZlLT5tZWRpYSE9 aWRlX2Rpc2spKQ0KIAkJcmV0dXJuIGh3aWYtPmRtYXByb2MoaWRlX2RtYV9v ZmZfcXVpZXRseSwgZHJpdmUpOw0KIA0KQEAgLTUwNywxNyArNTA3LDEwIEBA DQogfQ0KICNlbmRpZiAvKiBDT05GSUdfQkxLX0RFVl9JREVETUEgKi8NCiAN Ci0jZGVmaW5lIEFMSV9JTklUX0NPREVfVEVTVA0KLQ0KIHVuc2lnbmVkIGlu dCBfX2luaXQgcGNpX2luaXRfYWxpMTV4MyAoc3RydWN0IHBjaV9kZXYgKmRl diwgY29uc3QgY2hhciAqbmFtZSkNCiB7DQogCXVuc2lnbmVkIGxvbmcgZml4 ZG1hX2Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LCA0KTsNCiANCi0j aWZkZWYgQUxJX0lOSVRfQ09ERV9URVNUDQotCXVuc2lnbmVkIGxvbmcgZmxh Z3M7DQotCWJ5dGUgdG1wYnl0ZTsNCi0jZW5kaWYgLyogQUxJX0lOSVRfQ09E RV9URVNUICovDQotDQogCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgUENJ X1JFVklTSU9OX0lELCAmbTUyMjlfcmV2aXNpb24pOw0KIA0KIAlpc2FfZGV2 ID0gcGNpX2ZpbmRfZGV2aWNlKFBDSV9WRU5ET1JfSURfQUwsIFBDSV9ERVZJ Q0VfSURfQUxfTTE1MzMsIE5VTEwpOw0KQEAgLTU0NCw1NiArNTM3LDYgQEAN CiAJfQ0KICNlbmRpZiAgLyogZGVmaW5lZChESVNQTEFZX0FMSV9USU1JTkdT KSAmJiBkZWZpbmVkKENPTkZJR19QUk9DX0ZTKSAqLw0KIA0KLSNpZmRlZiBB TElfSU5JVF9DT0RFX1RFU1QNCi0JX19zYXZlX2ZsYWdzKGZsYWdzKTsNCi0J X19jbGkoKTsNCi0NCi0JaWYgKG01MjI5X3JldmlzaW9uID49IDB4QzIpIHsN Ci0JCS8qDQotCQkgKiAxNTQzQy1CPywgMTUzNSwgMTUzNUQsIDE1NTMNCi0J CSAqIE5vdGUgMTogbm90IGFsbCAibW90aGVyYm9hcmQiIHN1cHBvcnQgdGhp cyBkZXRlY3Rpb24NCi0JCSAqIE5vdGUgMjogaWYgbm8gdWRtYSA2NiBkZXZp Y2UsIHRoZSBkZXRlY3Rpb24gbWF5ICJlcnJvciIuDQotCQkgKiAgICAgICAg IGJ1dCBpbiB0aGlzIGNhc2UsIHdlIHdpbGwgbm90IHNldCB0aGUgZGV2aWNl IHRvDQotCQkgKiAgICAgICAgIHVsdHJhIDY2LCB0aGUgZGV0ZWN0aW9uIHJl c3VsdCBpcyBub3QgaW1wb3J0YW50DQotCQkgKi8NCi0NCi0JCS8qDQotCQkg KiBlbmFibGUgIkNhYmxlIERldGVjdGlvbiIsIG01MjI5LCAweDRiLCBiaXQz DQotCQkgKi8NCi0JCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgMHg0Yiwg JnRtcGJ5dGUpOw0KLQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgMHg0 YiwgdG1wYnl0ZSB8IDB4MDgpOw0KLQ0KLQkJLyoNCi0JCSAqIHNldCBzb3V0 aC1icmlkZ2UncyBlbmFibGUgYml0LCBtMTUzMywgMHg3OQ0KLQkJICovDQot CQlwY2lfcmVhZF9jb25maWdfYnl0ZShpc2FfZGV2LCAweDc5LCAmdG1wYnl0 ZSk7DQotCQlpZiAobTUyMjlfcmV2aXNpb24gPT0gMHhDMikgew0KLQkJCS8q DQotCQkJICogMTU0M0MtQjAgKG0xNTMzLCAweDc5LCBiaXQgMikNCi0JCQkg Ki8NCi0JCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoaXNhX2RldiwgMHg3OSwg dG1wYnl0ZSB8IDB4MDQpOw0KLQkJfSBlbHNlIGlmIChtNTIyOV9yZXZpc2lv biA+PSAweEMzKSB7DQotCQkJLyoNCi0JCQkgKiAxNTUzLzE1MzUgKG0xNTMz LCAweDc5LCBiaXQgMSkNCi0JCQkgKi8NCi0JCQlwY2lfd3JpdGVfY29uZmln X2J5dGUoaXNhX2RldiwgMHg3OSwgdG1wYnl0ZSB8IDB4MDIpOw0KLQkJfQ0K LQl9IGVsc2Ugew0KLQkJLyoNCi0JCSAqIHJldmlzaW9uIDB4MjAgKDE1NDMt RSwgMTU0My1GKQ0KLQkJICogcmV2aXNpb24gMHhDMCwgMHhDMSAoMTU0M0Mt QywgMTU0M0MtRCwgMTU0M0MtRSkNCi0JCSAqIGNsZWFyIENELVJPTSBETUEg d3JpdGUgYml0LCBtNTIyOSwgMHg0YiwgYml0IDcNCi0JCSAqLw0KLQkJcGNp X3JlYWRfY29uZmlnX2J5dGUoZGV2LCAweDRiLCAmdG1wYnl0ZSk7DQotCQkv Kg0KLQkJICogY2xlYXIgYml0IDcNCi0JCSAqLw0KLQkJcGNpX3dyaXRlX2Nv bmZpZ19ieXRlKGRldiwgMHg0YiwgdG1wYnl0ZSAmIDB4N0YpOw0KLQl9DQot DQotCV9fcmVzdG9yZV9mbGFncyhmbGFncyk7DQotI2VuZGlmIC8qIEFMSV9J TklUX0NPREVfVEVTVCAqLw0KLQ0KIAlyZXR1cm4gMDsNCiB9DQogDQpAQCAt NjExLDExICs1NTQsMTAgQEANCiAJdW5zaWduZWQgbG9uZyBmbGFnczsNCiAJ Ynl0ZSB0bXBieXRlOw0KIA0KLQlfX3NhdmVfZmxhZ3MoZmxhZ3MpOw0KLQlf X2NsaSgpOw0KKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CS8qIGxvY2FsIENQ VSBvbmx5ICovDQorCWxvY2FsX2lycV9kaXNhYmxlKCk7CS8qIGxvY2FsIENQ VSBvbmx5ICovDQogDQogCWlmIChtNTIyOV9yZXZpc2lvbiA+PSAweEMyKSB7 DQotI2lmbmRlZiBBTElfSU5JVF9DT0RFX1RFU1QNCiAJCS8qDQogCQkgKiAx NTQzQy1CPywgMTUzNSwgMTUzNUQsIDE1NTMNCiAJCSAqIE5vdGUgMTogbm90 IGFsbCAibW90aGVyYm9hcmQiIHN1cHBvcnQgdGhpcyBkZXRlY3Rpb24NCkBA IC02NDUsNyArNTg3LDYgQEANCiAJCQkgKi8NCiAJCQlwY2lfd3JpdGVfY29u ZmlnX2J5dGUoaXNhX2RldiwgMHg3OSwgdG1wYnl0ZSB8IDB4MDIpOw0KIAkJ fQ0KLSNlbmRpZiAvKiBBTElfSU5JVF9DT0RFX1RFU1QgKi8NCiAJCS8qDQog CQkgKiBVbHRyYTY2IGNhYmxlIGRldGVjdGlvbiAoZnJvbSBIb3N0IFZpZXcp DQogCQkgKiBtNTIyOSwgMHg0YSwgYml0MDogcHJpbWFyeSwgYml0MTogc2Vj b25kYXJ5IDgwIHBpbg0KQEAgLTY2Niw3ICs2MDcsNiBAQA0KIAkJICovDQog CQlhdGE2NiA9IChod2lmLT5jaGFubmVsKT9jYWJsZV84MF9waW5bMV06Y2Fi bGVfODBfcGluWzBdOw0KIAl9IGVsc2Ugew0KLSNpZm5kZWYgQUxJX0lOSVRf Q09ERV9URVNUDQogCQkvKg0KIAkJICogcmV2aXNpb24gMHgyMCAoMTU0My1F LCAxNTQzLUYpDQogCQkgKiByZXZpc2lvbiAweEMwLCAweEMxICgxNTQzQy1D LCAxNTQzQy1ELCAxNTQzQy1FKQ0KQEAgLTY3Nyw3ICs2MTcsNiBAQA0KIAkJ ICogY2xlYXIgYml0IDcNCiAJCSAqLw0KIAkJcGNpX3dyaXRlX2NvbmZpZ19i eXRlKGRldiwgMHg0YiwgdG1wYnl0ZSAmIDB4N0YpOw0KLSNlbmRpZiAvKiBB TElfSU5JVF9DT0RFX1RFU1QgKi8NCiAJCS8qDQogCQkgKiBjaGVjayBtMTUz MywgMHg1ZSwgYml0IDF+NCA9PSAxMDAxID0+ICYgMDAwMTExMTAgPSAwMDAx MDAxMA0KIAkJICovDQpAQCAtNjk2LDcgKzYzNSw3IEBADQogDQogCXBjaV93 cml0ZV9jb25maWdfYnl0ZShkZXYsIDB4NTMsIHRtcGJ5dGUpOw0KIA0KLQlf X3Jlc3RvcmVfZmxhZ3MoZmxhZ3MpOw0KKwlsb2NhbF9pcnFfcmVzdG9yZShm bGFncyk7CS8qIGxvY2FsIENQVSBvbmx5ICovDQogDQogCXJldHVybihhdGE2 Nik7DQogfQ0KZGlmZiAtdXJOIGxpbnV4LTIuNC4xOS1wNC9kcml2ZXJzL2lk ZS9jbWQ2NDAuYyBsaW51eC0yLjQuMTktcDQuc3Bpbi9kcml2ZXJzL2lkZS9j bWQ2NDAuYw0KLS0tIGxpbnV4LTIuNC4xOS1wNC9kcml2ZXJzL2lkZS9jbWQ2 NDAuYwlGcmkgRmViIDE2IDE2OjAyOjM2IDIwMDENCisrKyBsaW51eC0yLjQu MTktcDQuc3Bpbi9kcml2ZXJzL2lkZS9jbWQ2NDAuYwlXZWQgTWFyIDI3IDIy OjA2OjE0IDIwMDINCkBAIC0yMTcsMTEgKzIxNywxMCBAQA0KIHsNCiAJdW5z aWduZWQgbG9uZyBmbGFnczsNCiANCi0Jc2F2ZV9mbGFncyhmbGFncyk7DQot CWNsaSgpOw0KKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9fcmVxdWVzdF9sb2Nr LCBmbGFncyk7DQogCW91dGxfcCgocmVnICYgMHhmYykgfCBjbWQ2NDBfa2V5 LCAweGNmOCk7DQogCW91dGJfcCh2YWwsIChyZWcgJiAzKSB8IDB4Y2ZjKTsN Ci0JcmVzdG9yZV9mbGFncyhmbGFncyk7DQorCXNwaW5fdW5sb2NrX2lycXJl c3RvcmUoJmlvX3JlcXVlc3RfbG9jaywgZmxhZ3MpOw0KIH0NCiANCiBzdGF0 aWMgYnl0ZSBnZXRfY21kNjQwX3JlZ19wY2kxICh1bnNpZ25lZCBzaG9ydCBy ZWcpDQpAQCAtMjI5LDExICsyMjgsMTAgQEANCiAJYnl0ZSBiOw0KIAl1bnNp Z25lZCBsb25nIGZsYWdzOw0KIA0KLQlzYXZlX2ZsYWdzKGZsYWdzKTsNCi0J Y2xpKCk7DQorCXNwaW5fbG9ja19pcnFzYXZlKCZpb19yZXF1ZXN0X2xvY2ss IGZsYWdzKTsNCiAJb3V0bF9wKChyZWcgJiAweGZjKSB8IGNtZDY0MF9rZXks IDB4Y2Y4KTsNCiAJYiA9IGluYl9wKChyZWcgJiAzKSB8IDB4Y2ZjKTsNCi0J cmVzdG9yZV9mbGFncyhmbGFncyk7DQorCXNwaW5fdW5sb2NrX2lycXJlc3Rv cmUoJmlvX3JlcXVlc3RfbG9jaywgZmxhZ3MpOw0KIAlyZXR1cm4gYjsNCiB9 DQogDQpAQCAtMjQzLDEyICsyNDEsMTEgQEANCiB7DQogCXVuc2lnbmVkIGxv bmcgZmxhZ3M7DQogDQotCXNhdmVfZmxhZ3MoZmxhZ3MpOw0KLQljbGkoKTsN CisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvX3JlcXVlc3RfbG9jaywgZmxhZ3Mp Ow0KIAlvdXRiX3AoMHgxMCwgMHhjZjgpOw0KIAlvdXRiX3AodmFsLCBjbWQ2 NDBfa2V5ICsgcmVnKTsNCiAJb3V0Yl9wKDAsIDB4Y2Y4KTsNCi0JcmVzdG9y ZV9mbGFncyhmbGFncyk7DQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlv X3JlcXVlc3RfbG9jaywgZmxhZ3MpOw0KIH0NCiANCiBzdGF0aWMgYnl0ZSBn ZXRfY21kNjQwX3JlZ19wY2kyICh1bnNpZ25lZCBzaG9ydCByZWcpDQpAQCAt MjU2LDEyICsyNTMsMTEgQEANCiAJYnl0ZSBiOw0KIAl1bnNpZ25lZCBsb25n IGZsYWdzOw0KIA0KLQlzYXZlX2ZsYWdzKGZsYWdzKTsNCi0JY2xpKCk7DQor CXNwaW5fbG9ja19pcnFzYXZlKCZpb19yZXF1ZXN0X2xvY2ssIGZsYWdzKTsN CiAJb3V0Yl9wKDB4MTAsIDB4Y2Y4KTsNCiAJYiA9IGluYl9wKGNtZDY0MF9r ZXkgKyByZWcpOw0KIAlvdXRiX3AoMCwgMHhjZjgpOw0KLQlyZXN0b3JlX2Zs YWdzKGZsYWdzKTsNCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9fcmVx dWVzdF9sb2NrLCBmbGFncyk7DQogCXJldHVybiBiOw0KIH0NCiANCkBAIC0y NzEsMTEgKzI2NywxMCBAQA0KIHsNCiAJdW5zaWduZWQgbG9uZyBmbGFnczsN CiANCi0Jc2F2ZV9mbGFncyhmbGFncyk7DQotCWNsaSgpOw0KKwlzcGluX2xv Y2tfaXJxc2F2ZSgmaW9fcmVxdWVzdF9sb2NrLCBmbGFncyk7DQogCW91dGJf cChyZWcsIGNtZDY0MF9rZXkpOw0KIAlvdXRiX3AodmFsLCBjbWQ2NDBfa2V5 ICsgNCk7DQotCXJlc3RvcmVfZmxhZ3MoZmxhZ3MpOw0KKwlzcGluX3VubG9j a19pcnFyZXN0b3JlKCZpb19yZXF1ZXN0X2xvY2ssIGZsYWdzKTsNCiB9DQog DQogc3RhdGljIGJ5dGUgZ2V0X2NtZDY0MF9yZWdfdmxiICh1bnNpZ25lZCBz aG9ydCByZWcpDQpAQCAtMjgzLDExICsyNzgsMTAgQEANCiAJYnl0ZSBiOw0K IAl1bnNpZ25lZCBsb25nIGZsYWdzOw0KIA0KLQlzYXZlX2ZsYWdzKGZsYWdz KTsNCi0JY2xpKCk7DQorCXNwaW5fbG9ja19pcnFzYXZlKCZpb19yZXF1ZXN0 X2xvY2ssIGZsYWdzKTsNCiAJb3V0Yl9wKHJlZywgY21kNjQwX2tleSk7DQog CWIgPSBpbmJfcChjbWQ2NDBfa2V5ICsgNCk7DQotCXJlc3RvcmVfZmxhZ3Mo ZmxhZ3MpOw0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb19yZXF1ZXN0 X2xvY2ssIGZsYWdzKTsNCiAJcmV0dXJuIGI7DQogfQ0KIA0KQEAgLTM2NCwy MCArMzU4LDE4IEBADQogew0KIAl1bnNpZ25lZCBsb25nIGZsYWdzOw0KIA0K LQlzYXZlX2ZsYWdzKGZsYWdzKTsNCi0JY2xpKCk7DQotDQorCXNwaW5fbG9j a19pcnFzYXZlKCZpb19yZXF1ZXN0X2xvY2ssIGZsYWdzKTsNCiAJb3V0Yl9w KDB4MGEsIDB4MTcwICsgSURFX1NFTEVDVF9PRkZTRVQpOwkvKiBzZWxlY3Qg ZHJpdmUwICovDQogCXVkZWxheSgxMDApOw0KIAlpZiAoKGluYl9wKDB4MTcw ICsgSURFX1NFTEVDVF9PRkZTRVQpICYgMHgxZikgIT0gMHgwYSkgew0KIAkJ b3V0Yl9wKDB4MWEsIDB4MTcwICsgSURFX1NFTEVDVF9PRkZTRVQpOyAvKiBz ZWxlY3QgZHJpdmUxICovDQogCQl1ZGVsYXkoMTAwKTsNCiAJCWlmICgoaW5i X3AoMHgxNzAgKyBJREVfU0VMRUNUX09GRlNFVCkgJiAweDFmKSAhPSAweDFh KSB7DQotCQkJcmVzdG9yZV9mbGFncyhmbGFncyk7DQorCQkJc3Bpbl91bmxv Y2tfaXJxcmVzdG9yZSgmaW9fcmVxdWVzdF9sb2NrLCBmbGFncyk7DQogCQkJ cmV0dXJuIDA7IC8qIG5vdGhpbmcgcmVzcG9uZGVkICovDQogCQl9DQogCX0N Ci0JcmVzdG9yZV9mbGFncyhmbGFncyk7DQorCXNwaW5fdW5sb2NrX2lycXJl c3RvcmUoJmlvX3JlcXVlc3RfbG9jaywgZmxhZ3MpOw0KIAlyZXR1cm4gMTsg Lyogc3VjY2VzcyAqLw0KIH0NCiANCkBAIC00NTgsOCArNDUwLDcgQEANCiAJ Ynl0ZSBiOw0KIAl1bnNpZ25lZCBsb25nIGZsYWdzOw0KIA0KLQlzYXZlX2Zs YWdzKGZsYWdzKTsNCi0JY2xpKCk7DQorCXNwaW5fbG9ja19pcnFzYXZlKCZp b19yZXF1ZXN0X2xvY2ssIGZsYWdzKTsNCiAJYiA9IGdldF9jbWQ2NDBfcmVn KHJlZyk7DQogCWlmIChtb2RlKSB7CS8qIHdhbnQgcHJlZmV0Y2ggb24/ICov DQogI2lmIENNRDY0MF9QUkVGRVRDSF9NQVNLUw0KQEAgLTQ3NSw3ICs0NjYs NyBAQA0KIAkJYiB8PSBwcmVmZXRjaF9tYXNrc1tpbmRleF07CS8qIGRpc2Fi bGUgcHJlZmV0Y2ggKi8NCiAJfQ0KIAlwdXRfY21kNjQwX3JlZyhyZWcsIGIp Ow0KLQlyZXN0b3JlX2ZsYWdzKGZsYWdzKTsNCisJc3Bpbl91bmxvY2tfaXJx cmVzdG9yZSgmaW9fcmVxdWVzdF9sb2NrLCBmbGFncyk7DQogfQ0KIA0KIC8q DQpAQCAtNTc2LDggKzU2Nyw3IEBADQogCS8qDQogCSAqIE5vdyB0aGF0IGV2 ZXJ5dGhpbmcgaXMgcmVhZHksIHByb2dyYW0gdGhlIG5ldyB0aW1pbmdzDQog CSAqLw0KLQlzYXZlX2ZsYWdzIChmbGFncyk7DQotCWNsaSgpOw0KKwlzcGlu X2xvY2tfaXJxc2F2ZSgmaW9fcmVxdWVzdF9sb2NrLCBmbGFncyk7DQogCS8q DQogCSAqIFByb2dyYW0gdGhlIGFkZHJlc3Nfc2V0dXAgY2xvY2tzIGludG8g QVJUVElNIHJlZywNCiAJICogYW5kIHRoZW4gdGhlIGFjdGl2ZS9yZWNvdmVy eSBjb3VudHMgaW50byB0aGUgRFJXVElNIHJlZw0KQEAgLTU4Niw3ICs1NzYs NyBAQA0KIAlzZXR1cF9jb3VudCB8PSBnZXRfY21kNjQwX3JlZyhhcnR0aW1f cmVnc1tpbmRleF0pICYgMHgzZjsNCiAJcHV0X2NtZDY0MF9yZWcoYXJ0dGlt X3JlZ3NbaW5kZXhdLCBzZXR1cF9jb3VudCk7DQogCXB1dF9jbWQ2NDBfcmVn KGRyd3RpbV9yZWdzW2luZGV4XSwgcGFja19uaWJibGVzKGFjdGl2ZV9jb3Vu dCwgcmVjb3ZlcnlfY291bnQpKTsNCi0JcmVzdG9yZV9mbGFncyhmbGFncyk7 DQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvX3JlcXVlc3RfbG9jaywg ZmxhZ3MpOw0KIH0NCiANCiAvKg0KZGlmZiAtdXJOIGxpbnV4LTIuNC4xOS1w NC9kcml2ZXJzL2lkZS9jbWQ2NHguYyBsaW51eC0yLjQuMTktcDQuc3Bpbi9k cml2ZXJzL2lkZS9jbWQ2NHguYw0KLS0tIGxpbnV4LTIuNC4xOS1wNC9kcml2 ZXJzL2lkZS9jbWQ2NHguYwlTYXQgTWFyIDMwIDIzOjQ2OjAwIDIwMDINCisr KyBsaW51eC0yLjQuMTktcDQuc3Bpbi9kcml2ZXJzL2lkZS9jbWQ2NHguYwlT YXQgTWFyIDMwIDIzOjQ0OjA3IDIwMDINCkBAIC0yOTgsOCArMjk4LDkgQEAN CiAJLyoNCiAJICogTm93IHRoYXQgZXZlcnl0aGluZyBpcyByZWFkeSwgcHJv Z3JhbSB0aGUgbmV3IHRpbWluZ3MNCiAJICovDQotCV9fc2F2ZV9mbGFncyAo ZmxhZ3MpOw0KLQlfX2NsaSgpOw0KKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7 CQkvKiBsb2NhbCBDUFUgb25seSAqLw0KKwlsb2NhbF9pcnFfZGlzYWJsZSgp OwkJLyogbG9jYWwgQ1BVIG9ubHkgKi8NCisNCiAJLyoNCiAJICogUHJvZ3Jh bSB0aGUgYWRkcmVzc19zZXR1cCBjbG9ja3MgaW50byBBUlRUSU0gcmVnLA0K IAkgKiBhbmQgdGhlbiB0aGUgYWN0aXZlL3JlY292ZXJ5IGNvdW50cyBpbnRv IHRoZSBEUldUSU0gcmVnDQpAQCAtMzExLDcgKzMxMiw3IEBADQogCQkoYnl0 ZSkgKChhY3RpdmVfY291bnQgPDwgNCkgfCByZWNvdmVyeV9jb3VudCkpOw0K IAljbWRwcmludGsgKCJXcml0ZSAleCB0byAleFxuIiwgKChieXRlKSBzZXR1 cF9jb3VudCkgfCAodGVtcF9iICYgMHgzZiksIGFydHRpbV9yZWdzW2NoYW5u ZWxdW3NsYXZlXSk7DQogCWNtZHByaW50ayAoIldyaXRlICV4IHRvICV4XG4i LCAoYnl0ZSkgKChhY3RpdmVfY291bnQgPDwgNCkgfCByZWNvdmVyeV9jb3Vu dCksIGRyd3RpbV9yZWdzW2NoYW5uZWxdW3NsYXZlXSk7DQotCV9fcmVzdG9y ZV9mbGFncyhmbGFncyk7DQorCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsJ LyogbG9jYWwgQ1BVIG9ubHkgKi8NCiB9DQogDQogLyoNCmRpZmYgLXVyTiBs aW51eC0yLjQuMTktcDQvZHJpdmVycy9pZGUvY3M1NTMwLmMgbGludXgtMi40 LjE5LXA0LnNwaW4vZHJpdmVycy9pZGUvY3M1NTMwLmMNCi0tLSBsaW51eC0y LjQuMTktcDQvZHJpdmVycy9pZGUvY3M1NTMwLmMJVHVlIEphbiAgMiAxNjo1 ODo0NSAyMDAxDQorKysgbGludXgtMi40LjE5LXA0LnNwaW4vZHJpdmVycy9p ZGUvY3M1NTMwLmMJV2VkIE1hciAyNyAyMjoxMDoxMiAyMDAyDQpAQCAtMjg2 LDkgKzI4Niw4IEBADQogCQlyZXR1cm4gMDsNCiAJfQ0KIA0KLQlzYXZlX2Zs YWdzKGZsYWdzKTsNCi0JY2xpKCk7CS8qIGFsbCBDUFVzICh0aGVyZSBzaG91 bGQgb25seSBiZSBvbmUgQ1BVIHdpdGggdGhpcyBjaGlwc2V0KSAqLw0KLQ0K KwkvKiBhbGwgQ1BVcyAodGhlcmUgc2hvdWxkIG9ubHkgYmUgb25lIENQVSB3 aXRoIHRoaXMgY2hpcHNldCkgKi8NCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlv X3JlcXVlc3RfbG9jaywgZmxhZ3MpOw0KIAkvKg0KIAkgKiBFbmFibGUgQnVz TWFzdGVyIGFuZCBNZW1vcnlXcml0ZUFuZEludmFsaWRhdGUgZm9yIHRoZSBj czU1MzA6DQogCSAqIC0tPiAgT1IgMHgxNCBpbnRvIDE2LWJpdCBQQ0kgQ09N TUFORCByZWcgb2YgZnVuY3Rpb24gMCBvZiB0aGUgY3M1NTMwDQpAQCAtMzMz LDcgKzMzMiw3IEBADQogCXBjaV93cml0ZV9jb25maWdfYnl0ZShtYXN0ZXJf MCwgMHg0MiwgMHgwMCk7DQogCXBjaV93cml0ZV9jb25maWdfYnl0ZShtYXN0 ZXJfMCwgMHg0MywgMHhjMSk7DQogDQotCXJlc3RvcmVfZmxhZ3MoZmxhZ3Mp Ow0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb19yZXF1ZXN0X2xvY2ss IGZsYWdzKTsNCiANCiAJcmV0dXJuIDA7DQogfQ0KZGlmZiAtdXJOIGxpbnV4 LTIuNC4xOS1wNC9kcml2ZXJzL2lkZS9kdGMyMjc4LmMgbGludXgtMi40LjE5 LXA0LnNwaW4vZHJpdmVycy9pZGUvZHRjMjI3OC5jDQotLS0gbGludXgtMi40 LjE5LXA0L2RyaXZlcnMvaWRlL2R0YzIyNzguYwlUaHUgQXByIDEzIDIyOjU0 OjI2IDIwMDANCisrKyBsaW51eC0yLjQuMTktcDQuc3Bpbi9kcml2ZXJzL2lk ZS9kdGMyMjc4LmMJV2VkIE1hciAyNyAyMTo0Nzo1OSAyMDAyDQpAQCAtNzcs MTQgKzc3LDEzIEBADQogCXBpbyA9IGlkZV9nZXRfYmVzdF9waW9fbW9kZShk cml2ZSwgcGlvLCA0LCBOVUxMKTsNCiANCiAJaWYgKHBpbyA+PSAzKSB7DQot CQlzYXZlX2ZsYWdzKGZsYWdzKTsJLyogYWxsIENQVXMgKi8NCi0JCWNsaSgp OwkJCS8qIGFsbCBDUFVzICovDQorCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9f cmVxdWVzdF9sb2NrLCBmbGFncyk7DQogCQkvKg0KIAkJICogVGhpcyBlbmFi bGVzIFBJTyBtb2RlNCAoMz8pIG9uIHRoZSBmaXJzdCBpbnRlcmZhY2UNCiAJ CSAqLw0KIAkJc3ViMjIoMSwweGMzKTsNCiAJCXN1YjIyKDAsMHhhMCk7DQot CQlyZXN0b3JlX2ZsYWdzKGZsYWdzKTsJLyogYWxsIENQVXMgKi8NCisJCXNw aW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvX3JlcXVlc3RfbG9jaywgZmxhZ3Mp Ow0KIAl9IGVsc2Ugew0KIAkJLyogd2UgZG9uJ3Qga25vdyBob3cgdG8gc2V0 IGl0IGJhY2sgYWdhaW4uLiAqLw0KIAl9DQpAQCAtMTAwLDggKzk5LDggQEAN CiB7DQogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7DQogDQotCV9fc2F2ZV9mbGFn cyhmbGFncyk7CS8qIGxvY2FsIENQVSBvbmx5ICovDQotCV9fY2xpKCk7CQkv KiBsb2NhbCBDUFUgb25seSAqLw0KKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7 CQkvKiBsb2NhbCBDUFUgb25seSAqLw0KKwlsb2NhbF9pcnFfZGlzYWJsZSgp OwkJLyogbG9jYWwgQ1BVIG9ubHkgKi8NCiAJLyoNCiAJICogVGhpcyBlbmFi bGVzIHRoZSBzZWNvbmQgaW50ZXJmYWNlDQogCSAqLw0KQEAgLTExNyw3ICsx MTYsNyBAQA0KIAlzdWIyMigxLDB4YzMpOw0KIAlzdWIyMigwLDB4YTApOw0K ICNlbmRpZg0KLQlfX3Jlc3RvcmVfZmxhZ3MoZmxhZ3MpOwkvKiBsb2NhbCBD UFUgb25seSAqLw0KKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CS8qIGxv Y2FsIENQVSBvbmx5ICovDQogDQogCWlkZV9od2lmc1swXS5zZXJpYWxpemVk ID0gMTsNCiAJaWRlX2h3aWZzWzFdLnNlcmlhbGl6ZWQgPSAxOw0KZGlmZiAt dXJOIGxpbnV4LTIuNC4xOS1wNC9kcml2ZXJzL2lkZS9ocHQzNHguYyBsaW51 eC0yLjQuMTktcDQuc3Bpbi9kcml2ZXJzL2lkZS9ocHQzNHguYw0KLS0tIGxp bnV4LTIuNC4xOS1wNC9kcml2ZXJzL2lkZS9ocHQzNHguYwlUaHUgTWFyIDIx IDA3OjA1OjA1IDIwMDINCisrKyBsaW51eC0yLjQuMTktcDQuc3Bpbi9kcml2 ZXJzL2lkZS9ocHQzNHguYwlXZWQgTWFyIDI3IDE5OjUyOjI3IDIwMDINCkBA IC0zODUsOCArMzg1LDggQEANCiAJdW5zaWduZWQgc2hvcnQgY21kOw0KIAl1 bnNpZ25lZCBsb25nIGZsYWdzOw0KIA0KLQlfX3NhdmVfZmxhZ3MoZmxhZ3Mp OwkvKiBsb2NhbCBDUFUgb25seSAqLw0KLQlfX2NsaSgpOwkJLyogbG9jYWwg Q1BVIG9ubHkgKi8NCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwkJLyogbG9j YWwgQ1BVIG9ubHkgKi8NCisJbG9jYWxfaXJxX2Rpc2FibGUoKTsJCS8qIGxv Y2FsIENQVSBvbmx5ICovDQogDQogCXBjaV93cml0ZV9jb25maWdfYnl0ZShk ZXYsIEhQVDM0WF9QQ0lfSU5JVF9SRUcsIDB4MDApOw0KIAlwY2lfcmVhZF9j b25maWdfd29yZChkZXYsIFBDSV9DT01NQU5ELCAmY21kKTsNCkBAIC00MTcs NyArNDE3LDcgQEANCiAJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIFBD SV9CQVNFX0FERFJFU1NfMywgZGV2LT5yZXNvdXJjZVszXS5zdGFydCk7DQog CXBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIFBDSV9DT01NQU5ELCBjbWQp Ow0KIA0KLQlfX3Jlc3RvcmVfZmxhZ3MoZmxhZ3MpOwkvKiBsb2NhbCBDUFUg b25seSAqLw0KKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CS8qIGxvY2Fs IENQVSBvbmx5ICovDQogDQogI2lmIGRlZmluZWQoRElTUExBWV9IUFQzNFhf VElNSU5HUykgJiYgZGVmaW5lZChDT05GSUdfUFJPQ19GUykNCiAJaWYgKCFo cHQzNHhfcHJvYykgew0KZGlmZiAtdXJOIGxpbnV4LTIuNC4xOS1wNC9kcml2 ZXJzL2lkZS9ocHQzNjYuYyBsaW51eC0yLjQuMTktcDQuc3Bpbi9kcml2ZXJz L2lkZS9ocHQzNjYuYw0KLS0tIGxpbnV4LTIuNC4xOS1wNC9kcml2ZXJzL2lk ZS9ocHQzNjYuYwlTYXQgTWFyIDMwIDIxOjAyOjE0IDIwMDINCisrKyBsaW51 eC0yLjQuMTktcDQuc3Bpbi9kcml2ZXJzL2lkZS9ocHQzNjYuYwlTYXQgTWFy IDMwIDIxOjM5OjA0IDIwMDINCkBAIC0xNTI0LDggKzE1MjQsOCBAQA0KIAli eXRlIHNlY29uZGFyeQk9IGh3aWYtPmNoYW5uZWwgPyAweDRmIDogMHg0NzsN CiAJdW5zaWduZWQgbG9uZyBmbGFnczsNCiANCi0JX19zYXZlX2ZsYWdzKGZs YWdzKTsJLyogbG9jYWwgQ1BVIG9ubHkgKi8NCi0JX19jbGkoKTsJCS8qIGxv Y2FsIENQVSBvbmx5ICovDQorCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsJCS8q IGxvY2FsIENQVSBvbmx5ICovDQorCWxvY2FsX2lycV9kaXNhYmxlKCk7CQkv KiBsb2NhbCBDUFUgb25seSAqLw0KIA0KIAlkbWFfbmV3ID0gZG1hX29sZDsN CiAJcGNpX3JlYWRfY29uZmlnX2J5dGUoaHdpZi0+cGNpX2RldiwgcHJpbWFy eSwgJm1hc3RlcmRtYSk7DQpAQCAtMTUzNSw3ICsxNTM1LDcgQEANCiAJaWYg KHNsYXZlZG1hICYgMHgzMCkJZG1hX25ldyB8PSAweDQwOw0KIAlpZiAoZG1h X25ldyAhPSBkbWFfb2xkKSBvdXRiKGRtYV9uZXcsIGRtYWJhc2UrMik7DQog DQotCV9fcmVzdG9yZV9mbGFncyhmbGFncyk7CS8qIGxvY2FsIENQVSBvbmx5 ICovDQorCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsJLyogbG9jYWwgQ1BV IG9ubHkgKi8NCiANCiAJaWRlX3NldHVwX2RtYShod2lmLCBkbWFiYXNlLCA4 KTsNCiB9DQpkaWZmIC11ck4gbGludXgtMi40LjE5LXA0L2RyaXZlcnMvaWRl L2h0NjU2MGIuYyBsaW51eC0yLjQuMTktcDQuc3Bpbi9kcml2ZXJzL2lkZS9o dDY1NjBiLmMNCi0tLSBsaW51eC0yLjQuMTktcDQvZHJpdmVycy9pZGUvaHQ2 NTYwYi5jCVRodSBBcHIgMTMgMjI6NTQ6MjYgMjAwMA0KKysrIGxpbnV4LTIu NC4xOS1wNC5zcGluL2RyaXZlcnMvaWRlL2h0NjU2MGIuYwlXZWQgTWFyIDI3 IDIxOjUyOjIxIDIwMDINCkBAIC0xMzQsOSArMTM0LDkgQEANCiAJc3RhdGlj IGJ5dGUgY3VycmVudF90aW1pbmcgPSAwOw0KIAlieXRlIHNlbGVjdCwgdGlt aW5nOw0KIAkNCi0JX19zYXZlX2ZsYWdzIChmbGFncyk7CS8qIGxvY2FsIENQ VSBvbmx5ICovDQotCV9fY2xpKCk7CQkvKiBsb2NhbCBDUFUgb25seSAqLw0K LQkNCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwkJLyogbG9jYWwgQ1BVIG9u bHkgKi8NCisJbG9jYWxfaXJxX2Rpc2FibGUoKTsJCS8qIGxvY2FsIENQVSBv bmx5ICovCQ0KKw0KIAlzZWxlY3QgPSBIVF9DT05GSUcoZHJpdmUpOw0KIAl0 aW1pbmcgPSBIVF9USU1JTkcoZHJpdmUpOw0KIAkNCkBAIC0xNTksNyArMTU5 LDcgQEANCiAJCXByaW50aygiaHQ2NTYwYjogJXM6IHNlbGVjdD0lI3ggdGlt aW5nPSUjeFxuIiwgZHJpdmUtPm5hbWUsIHNlbGVjdCwgdGltaW5nKTsNCiAj ZW5kaWYNCiAJfQ0KLQlfX3Jlc3RvcmVfZmxhZ3MgKGZsYWdzKTsJLyogbG9j YWwgQ1BVIG9ubHkgKi8NCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwkv KiBsb2NhbCBDUFUgb25seSAqLw0KIH0NCiANCiAvKg0KQEAgLTI1Nyw5ICsy NTcsOCBAQA0KIAl1bnNpZ25lZCBsb25nIGZsYWdzOw0KIAlpbnQgdCA9IEhU X1BSRUZFVENIX01PREUgPDwgODsNCiAJDQotCXNhdmVfZmxhZ3MgKGZsYWdz KTsJLyogYWxsIENQVXMgKi8NCi0JY2xpKCk7CQkgICAgICAgIC8qIGFsbCBD UFVzICovDQotCQ0KKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9fcmVxdWVzdF9s b2NrLCBmbGFncyk7DQorDQogCS8qDQogCSAqICBQcmVmZXRjaCBtb2RlIGFu ZCB1bm1hc2sgaXJxIHNlZW1zIHRvIGNvbmZsaWN0DQogCSAqLw0KQEAgLTI3 Miw3ICsyNzEsNyBAQA0KIAkJZHJpdmUtPm5vX3VubWFzayA9IDA7DQogCX0N CiAJDQotCXJlc3RvcmVfZmxhZ3MgKGZsYWdzKTsJLyogYWxsIENQVXMgKi8N CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9fcmVxdWVzdF9sb2NrLCBm bGFncyk7DQogCQ0KICNpZmRlZiBERUJVRw0KIAlwcmludGsoImh0NjU2MGI6 IGRyaXZlICVzIHByZWZldGNoIG1vZGUgJXNhYmxlZFxuIiwgZHJpdmUtPm5h bWUsIChzdGF0ZSA/ICJlbiIgOiAiZGlzIikpOw0KQEAgLTI5MywxMyArMjky LDEwIEBADQogCQ0KIAl0aW1pbmcgPSBodF9waW8ydGltaW5ncyhkcml2ZSwg cGlvKTsNCiAJDQotCXNhdmVfZmxhZ3MgKGZsYWdzKTsJLyogYWxsIENQVXMg Ki8NCi0JY2xpKCk7CQkgICAgICAgIC8qIGFsbCBDUFVzICovDQotCQ0KKwlz cGluX2xvY2tfaXJxc2F2ZSgmaW9fcmVxdWVzdF9sb2NrLCBmbGFncyk7CQ0K IAlkcml2ZS0+ZHJpdmVfZGF0YSAmPSAweGZmMDA7DQogCWRyaXZlLT5kcml2 ZV9kYXRhIHw9IHRpbWluZzsNCi0JDQotCXJlc3RvcmVfZmxhZ3MgKGZsYWdz KTsJLyogYWxsIENQVXMgKi8NCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgm aW9fcmVxdWVzdF9sb2NrLCBmbGFncyk7DQogCQ0KICNpZmRlZiBERUJVRw0K IAlwcmludGsoImh0NjU2MGI6IGRyaXZlICVzIHR1bmVkIHRvIHBpbyBtb2Rl ICUjeCB0aW1pbmc9JSN4XG4iLCBkcml2ZS0+bmFtZSwgcGlvLCB0aW1pbmcp Ow0KZGlmZiAtdXJOIGxpbnV4LTIuNC4xOS1wNC9kcml2ZXJzL2lkZS9pZGUt ZGlzay5jIGxpbnV4LTIuNC4xOS1wNC5zcGluL2RyaXZlcnMvaWRlL2lkZS1k aXNrLmMNCi0tLSBsaW51eC0yLjQuMTktcDQvZHJpdmVycy9pZGUvaWRlLWRp c2suYwlUaHUgTWFyIDIxIDA3OjA1OjA1IDIwMDINCisrKyBsaW51eC0yLjQu MTktcDQuc3Bpbi9kcml2ZXJzL2lkZS9pZGUtZGlzay5jCVdlZCBNYXIgMjcg MTk6NTc6NDMgMjAwMg0KQEAgLTY0Niw3ICs2NDYsNyBAQA0KIAkJCXJldHVy biBzdGFydHN0b3A7DQogCQl9DQogCQlpZiAoIWRyaXZlLT51bm1hc2spDQot CQkJX19jbGkoKTsJLyogbG9jYWwgQ1BVIG9ubHkgKi8NCisJCQlsb2NhbF9p cnFfZGlzYWJsZSgpOwkvKiBsb2NhbCBDUFUgb25seSAqLw0KIAkJaWYgKGRy aXZlLT5tdWx0X2NvdW50KSB7DQogCQkJaWRlX2h3Z3JvdXBfdCAqaHdncm91 cCA9IEhXR1JPVVAoZHJpdmUpOw0KIAkvKg0KZGlmZiAtdXJOIGxpbnV4LTIu NC4xOS1wNC9kcml2ZXJzL2lkZS9pZGUtZmVhdHVyZXMuYyBsaW51eC0yLjQu MTktcDQuc3Bpbi9kcml2ZXJzL2lkZS9pZGUtZmVhdHVyZXMuYw0KLS0tIGxp bnV4LTIuNC4xOS1wNC9kcml2ZXJzL2lkZS9pZGUtZmVhdHVyZXMuYwlUaHUg TWFyIDIxIDA3OjA1OjA1IDIwMDINCisrKyBsaW51eC0yLjQuMTktcDQuc3Bp bi9kcml2ZXJzL2lkZS9pZGUtZmVhdHVyZXMuYwlXZWQgTWFyIDI3IDIxOjM3 OjI0IDIwMDINCkBAIC0xNjksMTggKzE2OSwxOCBAQA0KIAkJcHJpbnRrKCIl czogQ0hFQ0sgZm9yIGdvb2QgU1RBVFVTXG4iLCBkcml2ZS0+bmFtZSk7DQog CQlyZXR1cm4gMDsNCiAJfQ0KLQlfX3NhdmVfZmxhZ3MoZmxhZ3MpOwkvKiBs b2NhbCBDUFUgb25seSAqLw0KLQlfX2NsaSgpOwkJLyogbG9jYWwgQ1BVIG9u bHk7IHNvbWUgc3lzdGVtcyBuZWVkIHRoaXMgKi8NCisJbG9jYWxfaXJxX3Nh dmUoZmxhZ3MpOwkJLyogbG9jYWwgQ1BVIG9ubHkgKi8NCisJbG9jYWxfaXJx X2Rpc2FibGUoKTsJCS8qIGxvY2FsIENQVSBvbmx5ICovDQogCVNFTEVDVF9N QVNLKEhXSUYoZHJpdmUpLCBkcml2ZSwgMCk7DQogCWlkID0ga21hbGxvYyhT RUNUT1JfV09SRFMqNCwgR0ZQX0FUT01JQyk7DQogCWlmICghaWQpIHsNCi0J CV9fcmVzdG9yZV9mbGFncyhmbGFncyk7CS8qIGxvY2FsIENQVSBvbmx5ICov DQorCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CS8qIGxvY2FsIENQVSBv bmx5ICovDQogCQlyZXR1cm4gMDsNCiAJfQ0KIAlhdGFfaW5wdXRfZGF0YShk cml2ZSwgaWQsIFNFQ1RPUl9XT1JEUyk7DQotCSh2b2lkKSBHRVRfU1RBVCgp OwkvKiBjbGVhciBkcml2ZSBJUlEgKi8NCi0JaWRlX19zdGkoKTsJCS8qIGxv Y2FsIENQVSBvbmx5ICovDQotCV9fcmVzdG9yZV9mbGFncyhmbGFncyk7CS8q IGxvY2FsIENQVSBvbmx5ICovDQorCSh2b2lkKSBHRVRfU1RBVCgpOwkJLyog Y2xlYXIgZHJpdmUgSVJRICovDQorCWxvY2FsX2lycV9lbmFibGUoKTsJCS8q IGxvY2FsIENQVSBvbmx5ICovDQorCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdz KTsJLyogbG9jYWwgQ1BVIG9ubHkgKi8NCiAJaWRlX2ZpeF9kcml2ZWlkKGlk KTsNCiAJaWYgKGlkKSB7DQogCQlkcml2ZS0+aWQtPmRtYV91bHRyYSA9IGlk LT5kbWFfdWx0cmE7DQpAQCAtMzAxLDE0ICszMDEsMTQgQEANCiAJICovDQog CWlmICgoc3RhdCA9IEdFVF9TVEFUKCkpICYgQlVTWV9TVEFUKSB7DQogCQl1 bnNpZ25lZCBsb25nIGZsYWdzLCB0aW1lb3V0Ow0KLQkJX19zYXZlX2ZsYWdz KGZsYWdzKTsJLyogbG9jYWwgQ1BVIG9ubHkgKi8NCi0JCWlkZV9fc3RpKCk7 CQkvKiBsb2NhbCBDUFUgb25seSAtLSBmb3IgamlmZmllcyAqLw0KKwkJbG9j YWxfaXJxX3NhdmUoZmxhZ3MpOwkvKiBsb2NhbCBDUFUgb25seSAqLw0KKwkJ bG9jYWxfaXJxX2VuYWJsZSgpOwkvKiBsb2NhbCBDUFUgb25seSAtLSBmb3Ig amlmZmllcyAqLw0KIAkJdGltZW91dCA9IGppZmZpZXMgKyBXQUlUX0NNRDsN CiAJCXdoaWxlICgoc3RhdCA9IEdFVF9TVEFUKCkpICYgQlVTWV9TVEFUKSB7 DQogCQkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpDQogCQkJ CWJyZWFrOw0KIAkJfQ0KLQkJX19yZXN0b3JlX2ZsYWdzKGZsYWdzKTsgLyog bG9jYWwgQ1BVIG9ubHkgKi8NCisJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdz KTsJLyogbG9jYWwgQ1BVIG9ubHkgKi8NCiAJfQ0KIA0KIAkvKg0KZGlmZiAt dXJOIGxpbnV4LTIuNC4xOS1wNC9kcml2ZXJzL2lkZS9pZGUtZmxvcHB5LmMg bGludXgtMi40LjE5LXA0LnNwaW4vZHJpdmVycy9pZGUvaWRlLWZsb3BweS5j DQotLS0gbGludXgtMi40LjE5LXA0L2RyaXZlcnMvaWRlL2lkZS1mbG9wcHku YwlUaHUgTWFyIDIxIDA3OjA1OjA1IDIwMDINCisrKyBsaW51eC0yLjQuMTkt cDQuc3Bpbi9kcml2ZXJzL2lkZS9pZGUtZmxvcHB5LmMJV2VkIE1hciAyNyAy MTozNzo0OSAyMDAyDQpAQCAtOTM5LDcgKzkzOSw3IEBADQogI2VuZGlmIC8q IElERUZMT1BQWV9ERUJVR19MT0cgKi8NCiAJCWNsZWFyX2JpdCAoUENfRE1B X0lOX1BST0dSRVNTLCAmcGMtPmZsYWdzKTsNCiANCi0JCWlkZV9fc3RpKCk7 CS8qIGxvY2FsIENQVSBvbmx5ICovDQorCQlsb2NhbF9pcnFfZW5hYmxlKCk7 CS8qIGxvY2FsIENQVSBvbmx5ICovDQogDQogCQlpZiAoc3RhdHVzLmIuY2hl Y2sgfHwgdGVzdF9iaXQgKFBDX0RNQV9FUlJPUiwgJnBjLT5mbGFncykpIHsJ LyogRXJyb3IgZGV0ZWN0ZWQgKi8NCiAjaWYgSURFRkxPUFBZX0RFQlVHX0xP Rw0KQEAgLTE2NjksMTAgKzE2NjksMTAgQEANCiAJCWlkZWZsb3BweV9zdGF0 dXNfcmVnX3Qgc3RhdHVzOw0KIAkJdW5zaWduZWQgbG9uZyBmbGFnczsNCiAN Ci0JCV9fc2F2ZV9mbGFncyhmbGFncyk7DQotCQlfX2NsaSgpOw0KKwkJbG9j YWxfaXJxX3NhdmUoZmxhZ3MpOwkJLyogbG9jYWwgQ1BVIG9ubHkgKi8NCisJ CWxvY2FsX2lycV9kaXNhYmxlKCk7CQkvKiBsb2NhbCBDUFUgb25seSAqLw0K IAkJc3RhdHVzLmFsbD1HRVRfU1RBVCgpOw0KLQkJX19yZXN0b3JlX2ZsYWdz KGZsYWdzKTsNCisJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsJLyogbG9j YWwgQ1BVIG9ubHkgKi8NCiANCiAJCXByb2dyZXNzX2luZGljYXRpb249ICFz dGF0dXMuYi5kc2MgPyAwOjB4MTAwMDA7DQogCX0NCmRpZmYgLXVyTiBsaW51 eC0yLjQuMTktcDQvZHJpdmVycy9pZGUvaWRlLXBtYWMuYyBsaW51eC0yLjQu MTktcDQuc3Bpbi9kcml2ZXJzL2lkZS9pZGUtcG1hYy5jDQotLS0gbGludXgt Mi40LjE5LXA0L2RyaXZlcnMvaWRlL2lkZS1wbWFjLmMJRnJpIE1hciAyMiAw MDoxNjozNiAyMDAyDQorKysgbGludXgtMi40LjE5LXA0LnNwaW4vZHJpdmVy cy9pZGUvaWRlLXBtYWMuYwlXZWQgTWFyIDI3IDIxOjMyOjQ4IDIwMDINCkBA IC0zODUsMTAgKzM4NSwxMCBAQA0KIAlPVVRfQllURShTRVRGRUFUVVJFU19Y RkVSLCBJREVfRkVBVFVSRV9SRUcpOw0KIAlPVVRfQllURShXSU5fU0VURkVB VFVSRVMsIElERV9DT01NQU5EX1JFRyk7DQogCXVkZWxheSgxKTsNCi0JX19z YXZlX2ZsYWdzKGZsYWdzKTsJLyogbG9jYWwgQ1BVIG9ubHkgKi8NCi0JaWRl X19zdGkoKTsJCS8qIGxvY2FsIENQVSBvbmx5IC0tIGZvciBqaWZmaWVzICov DQorCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsJLyogbG9jYWwgQ1BVIG9ubHkg Ki8NCisJbG9jYWxfaXJxX2VuYWJsZSgpOwkvKiBsb2NhbCBDUFUgb25seSAt LSBmb3IgamlmZmllcyAqLw0KIAlyZXN1bHQgPSB3YWl0X2Zvcl9yZWFkeShk cml2ZSwgMjAwMCk7CS8qIFRpbWVvdXQgYnVtcGVkIGZvciBzb21lIHBvd2Vy Ym9va3MgKi8NCi0JX19yZXN0b3JlX2ZsYWdzKGZsYWdzKTsgLyogbG9jYWwg Q1BVIG9ubHkgKi8NCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwkvKiBs b2NhbCBDUFUgb25seSAqLw0KIAlPVVRfQllURShkcml2ZS0+Y3RsLCBJREVf Q09OVFJPTF9SRUcpOw0KIAlpZiAocmVzdWx0KQ0KIAkJcHJpbnRrKEtFUk5f RVJSICJwbWFjX2lkZV9kb19zZXRmZWF0dXJlIGRpc2sgbm90IHJlYWR5IGFm dGVyIFNFVF9GRUFUVVJFICFcbiIpOw0KZGlmZiAtdXJOIGxpbnV4LTIuNC4x OS1wNC9kcml2ZXJzL2lkZS9pZGUtcHJvYmUuYyBsaW51eC0yLjQuMTktcDQu c3Bpbi9kcml2ZXJzL2lkZS9pZGUtcHJvYmUuYw0KLS0tIGxpbnV4LTIuNC4x OS1wNC9kcml2ZXJzL2lkZS9pZGUtcHJvYmUuYwlUaHUgTWFyIDIxIDA3OjA1 OjA1IDIwMDINCisrKyBsaW51eC0yLjQuMTktcDQuc3Bpbi9kcml2ZXJzL2lk ZS9pZGUtcHJvYmUuYwlXZWQgTWFyIDI3IDIxOjQwOjUzIDIwMDINCkBAIC03 NCw3ICs3NCw3IEBADQogICAgICAgICAgICAgICAgICAgICAgICAgKnB0cisr ID0gaW5sKElERV9EQVRBX1JFRyk7DQogICAgICAgICB9DQogI2VuZGlmDQot CWlkZV9fc3RpKCk7CS8qIGxvY2FsIENQVSBvbmx5ICovDQorCWxvY2FsX2ly cV9lbmFibGUoKTsJLyogbG9jYWwgQ1BVIG9ubHkgKi8NCiAJaWRlX2ZpeF9k cml2ZWlkKGlkKTsNCiANCiAJaWYgKGlkLT53b3JkMTU2ID09IDB4NGQ0Mikg ew0KQEAgLTI1NCwxMiArMjU0LDEzIEBADQogCWlkZV9kZWxheV81MG1zKCk7 CQkvKiB3YWl0IGZvciBJUlEgYW5kIERSUV9TVEFUICovDQogCWlmIChPS19T VEFUKEdFVF9TVEFUKCksRFJRX1NUQVQsQkFEX1JfU1RBVCkpIHsNCiAJCXVu c2lnbmVkIGxvbmcgZmxhZ3M7DQotCQlfX3NhdmVfZmxhZ3MoZmxhZ3MpOwkv KiBsb2NhbCBDUFUgb25seSAqLw0KLQkJX19jbGkoKTsJCS8qIGxvY2FsIENQ VSBvbmx5OyBzb21lIHN5c3RlbXMgbmVlZCB0aGlzICovDQorCQlsb2NhbF9p cnFfc2F2ZShmbGFncyk7CQkvKiBsb2NhbCBDUFUgb25seSAqLw0KKwkJbG9j YWxfaXJxX2Rpc2FibGUoKTsJCS8qIGxvY2FsIENQVSBvbmx5ICovDQorCQkJ LyogbG9jYWwgQ1BVIG9ubHk7IHNvbWUgc3lzdGVtcyBuZWVkIHRoaXMgKi8N CiAJCWRvX2lkZW50aWZ5KGRyaXZlLCBjbWQpOyAvKiBkcml2ZSByZXR1cm5l ZCBJRCAqLw0KIAkJcmMgPSAwOwkJCS8qIGRyaXZlIHJlc3BvbmRlZCB3aXRo IElEICovDQogCQkodm9pZCkgR0VUX1NUQVQoKTsJLyogY2xlYXIgZHJpdmUg SVJRICovDQotCQlfX3Jlc3RvcmVfZmxhZ3MoZmxhZ3MpOwkvKiBsb2NhbCBD UFUgb25seSAqLw0KKwkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwkvKiBs b2NhbCBDUFUgb25seSAqLw0KIAl9IGVsc2UNCiAJCXJjID0gMjsJCQkvKiBk cml2ZSByZWZ1c2VkIElEICovDQogCXJldHVybiByYzsNCkBAIC01NDAsOCAr NTQxLDEwIEBADQogCQlyZXR1cm47CQ0KIAl9DQogDQotCV9fc2F2ZV9mbGFn cyhmbGFncyk7CS8qIGxvY2FsIENQVSBvbmx5ICovDQotCV9fc3RpKCk7CQkv KiBsb2NhbCBDUFUgb25seTsgbmVlZGVkIGZvciBqaWZmaWVzIGFuZCBpcnEg cHJvYmluZyAqLw0KKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CS8qIGxvY2Fs IENQVSBvbmx5ICovDQorCWxvY2FsX2lycV9lbmFibGUoKTsJLyogbG9jYWwg Q1BVIG9ubHkgKi8NCisJCS8qIG5lZWRlZCBmb3IgamlmZmllcyBhbmQgaXJx IHByb2JpbmcgKi8NCisNCiAJLyoNCiAJICogU2Vjb25kIGRyaXZlIHNob3Vs ZCBvbmx5IGV4aXN0IGlmIGZpcnN0IGRyaXZlIHdhcyBmb3VuZCwNCiAJICog YnV0IGEgbG90IG9mIGNkcm9tIGRyaXZlcyBhcmUgY29uZmlndXJlZCBhcyBz aW5nbGUgc2xhdmVzLg0KQEAgLTU3MCw3ICs1NzMsNyBAQA0KIAkJfSB3aGls ZSAoKHN0YXQgJiBCVVNZX1NUQVQpICYmIHRpbWVfYWZ0ZXIodGltZW91dCwg amlmZmllcykpOw0KIA0KIAl9DQotCV9fcmVzdG9yZV9mbGFncyhmbGFncyk7 CS8qIGxvY2FsIENQVSBvbmx5ICovDQorCWxvY2FsX2lycV9yZXN0b3JlKGZs YWdzKTsJLyogbG9jYWwgQ1BVIG9ubHkgKi8NCiAJZm9yICh1bml0ID0gMDsg dW5pdCA8IE1BWF9EUklWRVM7ICsrdW5pdCkgew0KIAkJaWRlX2RyaXZlX3Qg KmRyaXZlID0gJmh3aWYtPmRyaXZlc1t1bml0XTsNCiAJCWlmIChkcml2ZS0+ cHJlc2VudCkgew0KQEAgLTY0OCwxMCArNjUxLDggQEANCiAJLyogQWxsb2Nh dGUgdGhlIGJ1ZmZlciBhbmQgcG90ZW50aWFsbHkgc2xlZXAgZmlyc3QgKi8N CiAJDQogCW5ld19od2dyb3VwID0ga21hbGxvYyhzaXplb2YoaWRlX2h3Z3Jv dXBfdCksR0ZQX0tFUk5FTCk7DQotCQ0KLQlzYXZlX2ZsYWdzKGZsYWdzKTsJ LyogYWxsIENQVXMgKi8NCi0JY2xpKCk7CQkJLyogYWxsIENQVXMgKi8NCiAN CisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvX3JlcXVlc3RfbG9jaywgZmxhZ3Mp Ow0KIAlod2lmLT5od2dyb3VwID0gTlVMTDsNCiAjaWYgTUFYX0hXSUZTID4g MQ0KIAkvKg0KQEAgLTY4Nyw3ICs2ODgsNyBAQA0KIAl9IGVsc2Ugew0KIAkJ aHdncm91cCA9IG5ld19od2dyb3VwOw0KIAkJaWYgKCFod2dyb3VwKSB7DQot CQkJcmVzdG9yZV9mbGFncyhmbGFncyk7CS8qIGFsbCBDUFVzICovDQorCQkJ c3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9fcmVxdWVzdF9sb2NrLCBmbGFn cyk7DQogCQkJcmV0dXJuIDE7DQogCQl9DQogCQltZW1zZXQoaHdncm91cCwg MCwgc2l6ZW9mKGlkZV9od2dyb3VwX3QpKTsNCkBAIC03MTcsNyArNzE4LDcg QEANCiAJCWlmIChpZGVfcmVxdWVzdF9pcnEoaHdpZi0+aXJxLCAmaWRlX2lu dHIsIHNhLCBod2lmLT5uYW1lLCBod2dyb3VwKSkgew0KIAkJCWlmICghbWF0 Y2gpDQogCQkJCWtmcmVlKGh3Z3JvdXApOw0KLQkJCXJlc3RvcmVfZmxhZ3Mo ZmxhZ3MpOwkvKiBhbGwgQ1BVcyAqLw0KKwkJCXNwaW5fdW5sb2NrX2lycXJl c3RvcmUoJmlvX3JlcXVlc3RfbG9jaywgZmxhZ3MpOw0KIAkJCXJldHVybiAx Ow0KIAkJfQ0KIAl9DQpAQCAtNzQ1LDcgKzc0Niw4IEBADQogCQlwcmludGso IiVzIDogQWRkaW5nIG1pc3NlZCBod2lmIHRvIGh3Z3JvdXAhIVxuIiwgaHdp Zi0+bmFtZSk7DQogI2VuZGlmDQogCX0NCi0JcmVzdG9yZV9mbGFncyhmbGFn cyk7CS8qIGFsbCBDUFVzOyBzYWZlIG5vdyB0aGF0IGh3aWYtPmh3Z3JvdXAg aXMgc2V0IHVwICovDQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvX3Jl cXVlc3RfbG9jaywgZmxhZ3MpOw0KKwkJLyogYWxsIENQVXM7IHNhZmUgbm93 IHRoYXQgaHdpZi0+aHdncm91cCBpcyBzZXQgdXAgKi8NCiANCiAjaWYgIWRl ZmluZWQoX19tYzY4MDAwX18pICYmICFkZWZpbmVkKENPTkZJR19BUFVTKSAm JiAhZGVmaW5lZChfX3NwYXJjX18pDQogCXByaW50aygiJXMgYXQgMHglMDN4 LTB4JTAzeCwweCUwM3ggb24gaXJxICVkIiwgaHdpZi0+bmFtZSwNCmRpZmYg LXVyTiBsaW51eC0yLjQuMTktcDQvZHJpdmVycy9pZGUvaWRlLXByb2MuYyBs aW51eC0yLjQuMTktcDQuc3Bpbi9kcml2ZXJzL2lkZS9pZGUtcHJvYy5jDQot LS0gbGludXgtMi40LjE5LXA0L2RyaXZlcnMvaWRlL2lkZS1wcm9jLmMJVGh1 IE1hciAyMSAwNzowNTowNSAyMDAyDQorKysgbGludXgtMi40LjE5LXA0LnNw aW4vZHJpdmVycy9pZGUvaWRlLXByb2MuYwlXZWQgTWFyIDI3IDIxOjU4OjI2 IDIwMDINCkBAIC01OTcsNyArNTk3LDcgQEANCiAJaWYgKCFkcml2ZXIpDQog CQlsZW4gPSBzcHJpbnRmKHBhZ2UsICIobm9uZSlcbiIpOw0KICAgICAgICAg ZWxzZQ0KLQkJbGVuID0gc3ByaW50ZihwYWdlLCIlbGx1XG4iLCAoX191NjQp ICgoaWRlX2RyaXZlcl90ICopZHJpdmUtPmRyaXZlciktPmNhcGFjaXR5KGRy aXZlKSk7DQorCQlsZW4gPSBzcHJpbnRmKHBhZ2UsIiVsdVxuIiwgKHU2NCkg KChpZGVfZHJpdmVyX3QgKilkcml2ZS0+ZHJpdmVyKS0+Y2FwYWNpdHkoZHJp dmUpKTsNCiAJUFJPQ19JREVfUkVBRF9SRVRVUk4ocGFnZSxzdGFydCxvZmYs Y291bnQsZW9mLGxlbik7DQogfQ0KIA0KZGlmZiAtdXJOIGxpbnV4LTIuNC4x OS1wNC9kcml2ZXJzL2lkZS9pZGUtdGFwZS5jIGxpbnV4LTIuNC4xOS1wNC5z cGluL2RyaXZlcnMvaWRlL2lkZS10YXBlLmMNCi0tLSBsaW51eC0yLjQuMTkt cDQvZHJpdmVycy9pZGUvaWRlLXRhcGUuYwlUaHUgTWFyIDIxIDA3OjA1OjA1 IDIwMDINCisrKyBsaW51eC0yLjQuMTktcDQuc3Bpbi9kcml2ZXJzL2lkZS9p ZGUtdGFwZS5jCVdlZCBNYXIgMjcgMjI6MDE6MDkgMjAwMg0KQEAgLTIwOTAs NyArMjA5MCw3IEBADQogI2VuZGlmIC8qIElERVRBUEVfREVCVUdfTE9HICov DQogCQljbGVhcl9iaXQgKFBDX0RNQV9JTl9QUk9HUkVTUywgJnBjLT5mbGFn cyk7DQogDQotCQlpZGVfX3N0aSgpOwkvKiBsb2NhbCBDUFUgb25seSAqLw0K KwkJbG9jYWxfaXJxX2VuYWJsZSgpOwkvKiBsb2NhbCBDUFUgb25seSAqLw0K IA0KICNpZiBTSU1VTEFURV9FUlJPUlMNCiAJCWlmICgocGMtPmNbMF0gPT0g SURFVEFQRV9XUklURV9DTUQgfHwgcGMtPmNbMF0gPT0gSURFVEFQRV9SRUFE X0NNRCkgJiYgKCsrZXJyb3Jfc2ltX2NvdW50ICUgMTAwKSA9PSAwKSB7DQpA QCAtNjA4NSwxNCArNjA4NSwxNSBAQA0KIAlpbnQgbWlub3IgPSB0YXBlLT5t aW5vcjsNCiAJdW5zaWduZWQgbG9uZyBmbGFnczsNCiANCi0Jc2F2ZV9mbGFn cyAoZmxhZ3MpOwkvKiBhbGwgQ1BVcyAob3ZlcmtpbGw/KSAqLw0KLQljbGko KTsJCQkvKiBhbGwgQ1BVcyAob3ZlcmtpbGw/KSAqLw0KLQlpZiAodGVzdF9i aXQgKElERVRBUEVfQlVTWSwgJnRhcGUtPmZsYWdzKSB8fCB0YXBlLT5maXJz dF9zdGFnZSAhPSBOVUxMIHx8IHRhcGUtPm1lcmdlX3N0YWdlX3NpemUgfHwg ZHJpdmUtPnVzYWdlKSB7DQotCQlyZXN0b3JlX2ZsYWdzKGZsYWdzKTsJLyog YWxsIENQVXMgKG92ZXJraWxsPykgKi8NCisJc3Bpbl9sb2NrX2lycXNhdmUo JmlvX3JlcXVlc3RfbG9jaywgZmxhZ3MpOw0KKwlpZiAodGVzdF9iaXQgKElE RVRBUEVfQlVTWSwgJnRhcGUtPmZsYWdzKSB8fA0KKwkgICAgdGFwZS0+Zmly c3Rfc3RhZ2UgIT0gTlVMTCB8fA0KKwkgICAgdGFwZS0+bWVyZ2Vfc3RhZ2Vf c2l6ZSB8fCBkcml2ZS0+dXNhZ2UpIHsNCisJCXNwaW5fdW5sb2NrX2lycXJl c3RvcmUoJmlvX3JlcXVlc3RfbG9jaywgZmxhZ3MpOw0KIAkJcmV0dXJuIDE7 DQogCX0NCiAJaWRldGFwZV9jaHJkZXZzW21pbm9yXS5kcml2ZSA9IE5VTEw7 DQotCXJlc3RvcmVfZmxhZ3MgKGZsYWdzKTsJLyogYWxsIENQVXMgKG92ZXJr aWxsPykgKi8NCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9fcmVxdWVz dF9sb2NrLCBmbGFncyk7DQogCURSSVZFUihkcml2ZSktPmJ1c3kgPSAwOw0K IAkodm9pZCkgaWRlX3VucmVnaXN0ZXJfc3ViZHJpdmVyIChkcml2ZSk7DQog CWRyaXZlLT5kcml2ZXJfZGF0YSA9IE5VTEw7DQpkaWZmIC11ck4gbGludXgt Mi40LjE5LXA0L2RyaXZlcnMvaWRlL2lkZS10YXNrZmlsZS5jIGxpbnV4LTIu NC4xOS1wNC5zcGluL2RyaXZlcnMvaWRlL2lkZS10YXNrZmlsZS5jDQotLS0g bGludXgtMi40LjE5LXA0L2RyaXZlcnMvaWRlL2lkZS10YXNrZmlsZS5jCVRo dSBNYXIgMjEgMDc6MDU6MDUgMjAwMg0KKysrIGxpbnV4LTIuNC4xOS1wNC5z cGluL2RyaXZlcnMvaWRlL2lkZS10YXNrZmlsZS5jCVdlZCBNYXIgMjcgMjE6 Mzk6NTQgMjAwMg0KQEAgLTEyNywxMSArMTI3LDExIEBADQogI2lmIFNVUFBP UlRfVkxCX1NZTkMNCiAJCWlmIChpb18zMmJpdCAmIDIpIHsNCiAJCQl1bnNp Z25lZCBsb25nIGZsYWdzOw0KLQkJCV9fc2F2ZV9mbGFncyhmbGFncyk7CS8q IGxvY2FsIENQVSBvbmx5ICovDQotCQkJX19jbGkoKTsJCS8qIGxvY2FsIENQ VSBvbmx5ICovDQorCQkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwkJLyogbG9j YWwgQ1BVIG9ubHkgKi8NCisJCQlsb2NhbF9pcnFfZGlzYWJsZSgpOwkJLyog bG9jYWwgQ1BVIG9ubHkgKi8NCiAJCQl0YXNrX3ZsYl9zeW5jKElERV9OU0VD VE9SX1JFRyk7DQogCQkJaW5zbChJREVfREFUQV9SRUcsIGJ1ZmZlciwgd2Nv dW50KTsNCi0JCQlfX3Jlc3RvcmVfZmxhZ3MoZmxhZ3MpOwkvKiBsb2NhbCBD UFUgb25seSAqLw0KKwkJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsJLyog bG9jYWwgQ1BVIG9ubHkgKi8NCiAJCX0gZWxzZQ0KICNlbmRpZiAvKiBTVVBQ T1JUX1ZMQl9TWU5DICovDQogCQkJaW5zbChJREVfREFUQV9SRUcsIGJ1ZmZl ciwgd2NvdW50KTsNCkBAIC0xNjcsMTEgKzE2NywxMSBAQA0KICNpZiBTVVBQ T1JUX1ZMQl9TWU5DDQogCQlpZiAoaW9fMzJiaXQgJiAyKSB7DQogCQkJdW5z aWduZWQgbG9uZyBmbGFnczsNCi0JCQlfX3NhdmVfZmxhZ3MoZmxhZ3MpOwkv KiBsb2NhbCBDUFUgb25seSAqLw0KLQkJCV9fY2xpKCk7CQkvKiBsb2NhbCBD UFUgb25seSAqLw0KKwkJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsJCS8qIGxv Y2FsIENQVSBvbmx5ICovDQorCQkJbG9jYWxfaXJxX2Rpc2FibGUoKTsJCS8q IGxvY2FsIENQVSBvbmx5ICovDQogCQkJdGFza192bGJfc3luYyhJREVfTlNF Q1RPUl9SRUcpOw0KIAkJCW91dHNsKElERV9EQVRBX1JFRywgYnVmZmVyLCB3 Y291bnQpOw0KLQkJCV9fcmVzdG9yZV9mbGFncyhmbGFncyk7CS8qIGxvY2Fs IENQVSBvbmx5ICovDQorCQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwkv KiBsb2NhbCBDUFUgb25seSAqLw0KIAkJfSBlbHNlDQogI2VuZGlmIC8qIFNV UFBPUlRfVkxCX1NZTkMgKi8NCiAJCQlvdXRzbChJREVfREFUQV9SRUcsIGJ1 ZmZlciwgd2NvdW50KTsNCkBAIC00OTEsOCArNDkxLDggQEANCiAJdW5zaWdu ZWQgbG9uZyBmbGFnczsNCiAJYnl0ZSBlcnIgPSAwOw0KIA0KLQlfX3NhdmVf ZmxhZ3MgKGZsYWdzKTsJLyogbG9jYWwgQ1BVIG9ubHkgKi8NCi0JaWRlX19z dGkoKTsJCS8qIGxvY2FsIENQVSBvbmx5ICovDQorCWxvY2FsX2lycV9zYXZl KGZsYWdzKTsJLyogbG9jYWwgQ1BVIG9ubHkgKi8NCisJbG9jYWxfaXJxX2Vu YWJsZSgpOwkvKiBsb2NhbCBDUFUgb25seSAqLw0KIAlwcmludGsoIiVzOiAl czogc3RhdHVzPTB4JTAyeCIsIGRyaXZlLT5uYW1lLCBtc2csIHN0YXQpOw0K ICNpZiBGQU5DWV9TVEFUVVNfRFVNUFMNCiAJcHJpbnRrKCIgeyAiKTsNCkBA IC01NTcsNyArNTU3LDcgQEANCiAjZW5kaWYgIC8qIEZBTkNZX1NUQVRVU19E VU1QUyAqLw0KIAkJcHJpbnRrKCJcbiIpOw0KIAl9DQotCV9fcmVzdG9yZV9m bGFncyAoZmxhZ3MpOwkvKiBsb2NhbCBDUFUgb25seSAqLw0KKwlsb2NhbF9p cnFfcmVzdG9yZShmbGFncyk7CS8qIGxvY2FsIENQVSBvbmx5ICovDQogCXJl dHVybiBlcnI7DQogfQ0KIA0KQEAgLTc0Miw4ICs3NDIsNyBAQA0KIAlpZGVf dGFza190ICphcmdzCT0gSFdHUk9VUChkcml2ZSktPnJxLT5zcGVjaWFsOw0K IAlieXRlIHN0YXQJCT0gR0VUX1NUQVQoKTsNCiANCi0JaWRlX19zdGkoKTsJ LyogbG9jYWwgQ1BVIG9ubHkgKi8NCi0NCisJbG9jYWxfaXJxX2VuYWJsZSgp OwkvKiBsb2NhbCBDUFUgb25seSAqLw0KIAlpZiAoIU9LX1NUQVQoc3RhdCwg UkVBRFlfU1RBVCwgQkFEX1NUQVQpKQ0KIAkJcmV0dXJuIGlkZV9lcnJvcihk cml2ZSwgInRhc2tfbm9fZGF0YV9pbnRyIiwgc3RhdCk7DQogCQkvKiBjYWxs cyBpZGVfZW5kX2RyaXZlX2NtZCAqLw0KZGlmZiAtdXJOIGxpbnV4LTIuNC4x OS1wNC9kcml2ZXJzL2lkZS9pZGUuYyBsaW51eC0yLjQuMTktcDQuc3Bpbi9k cml2ZXJzL2lkZS9pZGUuYw0KLS0tIGxpbnV4LTIuNC4xOS1wNC9kcml2ZXJz L2lkZS9pZGUuYwlUaHUgTWFyIDIxIDA3OjA1OjA2IDIwMDINCisrKyBsaW51 eC0yLjQuMTktcDQuc3Bpbi9kcml2ZXJzL2lkZS9pZGUuYwlXZWQgTWFyIDI3 IDIxOjIzOjA2IDIwMDINCkBAIC0yMTcsMTMgKzIxNywxMyBAQA0KIAl1bnNp Z25lZCBsb25nIHQsIGZsYWdzOw0KIAlpbnQgaTsNCiANCi0JX19zYXZlX2Zs YWdzKGZsYWdzKTsJLyogbG9jYWwgQ1BVIG9ubHkgKi8NCi0JX19jbGkoKTsJ CS8qIGxvY2FsIENQVSBvbmx5ICovDQorCWxvY2FsX2lycV9zYXZlKGZsYWdz KTsJCS8qIGxvY2FsIENQVSBvbmx5ICovDQorCWxvY2FsX2lycV9kaXNhYmxl KCk7CQkvKiBsb2NhbCBDUFUgb25seSAqLw0KIAl0ID0gamlmZmllcyAqIDEx OTMyOw0KICAgICAJb3V0Yl9wKDAsIDB4NDMpOw0KIAlpID0gaW5iX3AoMHg0 MCk7DQogCWkgfD0gaW5iKDB4NDApIDw8IDg7DQotCV9fcmVzdG9yZV9mbGFn cyhmbGFncyk7CS8qIGxvY2FsIENQVSBvbmx5ICovDQorCWxvY2FsX2lycV9y ZXN0b3JlKGZsYWdzKTsJLyogbG9jYWwgQ1BVIG9ubHkgKi8NCiAJcmV0dXJu ICh0IC0gaSk7DQogfQ0KICNlbmRpZiAvKiBESVNLX1JFQ09WRVJZX1RJTUUg Ki8NCkBAIC02MDUsOCArNjA1LDggQEANCiAJaWRlX2h3aWZfdCAqaHdpZiA9 IEhXSUYoZHJpdmUpOw0KIAlpZGVfaHdncm91cF90ICpod2dyb3VwID0gSFdH Uk9VUChkcml2ZSk7DQogDQotCV9fc2F2ZV9mbGFncyhmbGFncyk7CS8qIGxv Y2FsIENQVSBvbmx5ICovDQotCV9fY2xpKCk7CQkvKiBsb2NhbCBDUFUgb25s eSAqLw0KKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CQkvKiBsb2NhbCBDUFUg b25seSAqLw0KKwlsb2NhbF9pcnFfZGlzYWJsZSgpOwkJLyogbG9jYWwgQ1BV IG9ubHkgKi8NCiANCiAJLyogRm9yIGFuIEFUQVBJIGRldmljZSwgZmlyc3Qg dHJ5IGFuIEFUQVBJIFNSU1QuICovDQogCWlmIChkcml2ZS0+bWVkaWEgIT0g aWRlX2Rpc2sgJiYgIWRvX25vdF90cnlfYXRhcGkpIHsNCkBAIC02MTYsNyAr NjE2LDcgQEANCiAJCU9VVF9CWVRFIChXSU5fU1JTVCwgSURFX0NPTU1BTkRf UkVHKTsNCiAJCWh3Z3JvdXAtPnBvbGxfdGltZW91dCA9IGppZmZpZXMgKyBX QUlUX1dPUlNUQ0FTRTsNCiAJCWlkZV9zZXRfaGFuZGxlciAoZHJpdmUsICZh dGFwaV9yZXNldF9wb2xsZnVuYywgSFovMjAsIE5VTEwpOw0KLQkJX19yZXN0 b3JlX2ZsYWdzIChmbGFncyk7CS8qIGxvY2FsIENQVSBvbmx5ICovDQorCQls b2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CS8qIGxvY2FsIENQVSBvbmx5ICov DQogCQlyZXR1cm4gaWRlX3N0YXJ0ZWQ7DQogCX0NCiANCkBAIC02MjksNyAr NjI5LDcgQEANCiANCiAjaWYgT0tfVE9fUkVTRVRfQ09OVFJPTExFUg0KIAlp ZiAoIUlERV9DT05UUk9MX1JFRykgew0KLQkJX19yZXN0b3JlX2ZsYWdzKGZs YWdzKTsNCisJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsJLyogbG9jYWwg Q1BVIG9ubHkgKi8NCiAJCXJldHVybiBpZGVfc3RvcHBlZDsNCiAJfQ0KIAkv Kg0KQEAgLTY2MSw3ICs2NjEsNyBAQA0KIA0KICNlbmRpZgkvKiBPS19UT19S RVNFVF9DT05UUk9MTEVSICovDQogDQotCV9fcmVzdG9yZV9mbGFncyAoZmxh Z3MpOwkvKiBsb2NhbCBDUFUgb25seSAqLw0KKwlsb2NhbF9pcnFfcmVzdG9y ZShmbGFncyk7CS8qIGxvY2FsIENQVSBvbmx5ICovDQogCXJldHVybiBpZGVf c3RhcnRlZDsNCiB9DQogDQpAQCAtNzY4LDggKzc2OCw4IEBADQogCXVuc2ln bmVkIGxvbmcgZmxhZ3M7DQogCWJ5dGUgZXJyID0gMDsNCiANCi0JX19zYXZl X2ZsYWdzIChmbGFncyk7CS8qIGxvY2FsIENQVSBvbmx5ICovDQotCWlkZV9f c3RpKCk7CQkvKiBsb2NhbCBDUFUgb25seSAqLw0KKwlsb2NhbF9pcnFfc2F2 ZShmbGFncyk7CS8qIGxvY2FsIENQVSBvbmx5ICovDQorCWxvY2FsX2lycV9l bmFibGUoKTsJLyogbG9jYWwgQ1BVIG9ubHkgKi8NCiAJcHJpbnRrKCIlczog JXM6IHN0YXR1cz0weCUwMngiLCBkcml2ZS0+bmFtZSwgbXNnLCBzdGF0KTsN CiAjaWYgRkFOQ1lfU1RBVFVTX0RVTVBTDQogCXByaW50aygiIHsgIik7DQpA QCAtODM1LDcgKzgzNSw3IEBADQogI2VuZGlmCS8qIEZBTkNZX1NUQVRVU19E VU1QUyAqLw0KIAkJcHJpbnRrKCJcbiIpOw0KIAl9DQotCV9fcmVzdG9yZV9m bGFncyAoZmxhZ3MpOwkvKiBsb2NhbCBDUFUgb25seSAqLw0KKwlsb2NhbF9p cnFfcmVzdG9yZShmbGFncyk7CS8qIGxvY2FsIENQVSBvbmx5ICovDQogCXJl dHVybiBlcnI7DQogfQ0KIA0KQEAgLTk0Niw3ICs5NDYsNyBAQA0KIAlieXRl IHN0YXQgPSBHRVRfU1RBVCgpOw0KIAlpbnQgcmV0cmllcyA9IDEwOw0KIA0K LQlpZGVfX3N0aSgpOwkvKiBsb2NhbCBDUFUgb25seSAqLw0KKwlsb2NhbF9p cnFfZW5hYmxlKCk7CS8qIGxvY2FsIENQVSBvbmx5ICovDQogCWlmICgoc3Rh dCAmIERSUV9TVEFUKSAmJiBhcmdzICYmIGFyZ3NbM10pIHsNCiAJCWJ5dGUg aW9fMzJiaXQgPSBkcml2ZS0+aW9fMzJiaXQ7DQogCQlkcml2ZS0+aW9fMzJi aXQgPSAwOw0KQEAgLTEwMTEsMTcgKzEwMTEsMTcgQEANCiANCiAJdWRlbGF5 KDEpOwkvKiBzcGVjIGFsbG93cyBkcml2ZSA0MDBucyB0byBhc3NlcnQgIkJV U1kiICovDQogCWlmICgoc3RhdCA9IEdFVF9TVEFUKCkpICYgQlVTWV9TVEFU KSB7DQotCQlfX3NhdmVfZmxhZ3MoZmxhZ3MpOwkvKiBsb2NhbCBDUFUgb25s eSAqLw0KLQkJaWRlX19zdGkoKTsJCS8qIGxvY2FsIENQVSBvbmx5ICovDQor CQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CS8qIGxvY2FsIENQVSBvbmx5ICov DQorCQlsb2NhbF9pcnFfZW5hYmxlKCk7CS8qIGxvY2FsIENQVSBvbmx5ICov DQogCQl0aW1lb3V0ICs9IGppZmZpZXM7DQogCQl3aGlsZSAoKHN0YXQgPSBH RVRfU1RBVCgpKSAmIEJVU1lfU1RBVCkgew0KIAkJCWlmICh0aW1lX2FmdGVy KGppZmZpZXMsIHRpbWVvdXQpKSB7DQotCQkJCV9fcmVzdG9yZV9mbGFncyhm bGFncyk7CS8qIGxvY2FsIENQVSBvbmx5ICovDQorCQkJCWxvY2FsX2lycV9y ZXN0b3JlKGZsYWdzKTsJLyogbG9jYWwgQ1BVIG9ubHkgKi8NCiAJCQkJKnN0 YXJ0c3RvcCA9IGlkZV9lcnJvcihkcml2ZSwgInN0YXR1cyB0aW1lb3V0Iiwg c3RhdCk7DQogCQkJCXJldHVybiAxOw0KIAkJCX0NCiAJCX0NCi0JCV9fcmVz dG9yZV9mbGFncyhmbGFncyk7CS8qIGxvY2FsIENQVSBvbmx5ICovDQorCQls b2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CS8qIGxvY2FsIENQVSBvbmx5ICov DQogCX0NCiAJLyoNCiAJICogQWxsb3cgc3RhdHVzIHRvIHNldHRsZSwgdGhl biByZWFkIGl0IGFnYWluLg0KQEAgLTEzNDQsNyArMTM0NCw4IEBADQogDQog CWlkZV9nZXRfbG9jaygmaWRlX2xvY2ssIGlkZV9pbnRyLCBod2dyb3VwKTsJ LyogZm9yIGF0YXJpIG9ubHk6IFBPU1NJQkxZIEJST0tFTiBIRVJFKD8pICov DQogDQotCV9fY2xpKCk7CS8qIG5lY2Vzc2FyeSBwYXJhbm9pYTogZW5zdXJl IElSUXMgYXJlIG1hc2tlZCBvbiBsb2NhbCBDUFUgKi8NCisJbG9jYWxfaXJx X2Rpc2FibGUoKTsJLyogbG9jYWwgQ1BVIG9ubHkgKi8NCisJCS8qIG5lY2Vz c2FyeSBwYXJhbm9pYTogZW5zdXJlIElSUXMgYXJlIG1hc2tlZCBvbiBsb2Nh bCBDUFUgKi8NCiANCiAJd2hpbGUgKCFod2dyb3VwLT5idXN5KSB7DQogCQlo d2dyb3VwLT5idXN5ID0gMTsNCkBAIC0xNDA1LDcgKzE0MDYsOCBAQA0KIAkJ aWYgKG1hc2tlZF9pcnEgJiYgaHdpZi0+aXJxICE9IG1hc2tlZF9pcnEpDQog CQkJZGlzYWJsZV9pcnFfbm9zeW5jKGh3aWYtPmlycSk7DQogCQlzcGluX3Vu bG9jaygmaW9fcmVxdWVzdF9sb2NrKTsNCi0JCWlkZV9fc3RpKCk7CS8qIGFs bG93IG90aGVyIElSUXMgd2hpbGUgd2Ugc3RhcnQgdGhpcyByZXF1ZXN0ICov DQorCQlsb2NhbF9pcnFfZW5hYmxlKCk7CS8qIGxvY2FsIENQVSBvbmx5ICov DQorCQkJLyogYWxsb3cgb3RoZXIgSVJRcyB3aGlsZSB3ZSBzdGFydCB0aGlz IHJlcXVlc3QgKi8NCiAJCXN0YXJ0c3RvcCA9IHN0YXJ0X3JlcXVlc3QoZHJp dmUsIHJxKTsNCiAJCXNwaW5fbG9ja19pcnEoJmlvX3JlcXVlc3RfbG9jayk7 DQogCQlpZiAobWFza2VkX2lycSAmJiBod2lmLT5pcnEgIT0gbWFza2VkX2ly cSkNCkBAIC0xNTQwLDcgKzE1NDIsOCBAQA0KICNlbHNlDQogCQkJZGlzYWJs ZV9pcnEoaHdpZi0+aXJxKTsJLyogZGlzYWJsZV9pcnFfbm9zeW5jID8/ICov DQogI2VuZGlmIC8qIERJU0FCTEVfSVJRX05PU1lOQyAqLw0KLQkJCV9fY2xp KCk7CS8qIGxvY2FsIENQVSBvbmx5LCBhcyBpZiB3ZSB3ZXJlIGhhbmRsaW5n IGFuIGludGVycnVwdCAqLw0KKwkJCWxvY2FsX2lycV9kaXNhYmxlKCk7CS8q IGxvY2FsIENQVSBvbmx5ICovDQorCQkJCS8qIGFzIGlmIHdlIHdlcmUgaGFu ZGxpbmcgYW4gaW50ZXJydXB0ICovDQogCQkJaWYgKGh3Z3JvdXAtPnBvbGxf dGltZW91dCAhPSAwKSB7DQogCQkJCXN0YXJ0c3RvcCA9IGhhbmRsZXIoZHJp dmUpOw0KIAkJCX0gZWxzZSBpZiAoZHJpdmVfaXNfcmVhZHkoZHJpdmUpKSB7 DQpAQCAtMTY0Miw3ICsxNjQ1LDggQEANCiAJCXJldHVybjsNCiAJfQ0KIA0K LQlpZiAoKGhhbmRsZXIgPSBod2dyb3VwLT5oYW5kbGVyKSA9PSBOVUxMIHx8 IGh3Z3JvdXAtPnBvbGxfdGltZW91dCAhPSAwKSB7DQorCWlmICgoaGFuZGxl ciA9IGh3Z3JvdXAtPmhhbmRsZXIpID09IE5VTEwgfHwNCisJICAgICBod2dy b3VwLT5wb2xsX3RpbWVvdXQgIT0gMCkgew0KIAkJLyoNCiAJCSAqIE5vdCBl eHBlY3RpbmcgYW4gaW50ZXJydXB0IGZyb20gdGhpcyBkcml2ZS4NCiAJCSAq IFRoYXQgbWVhbnMgdGhpcyBjb3VsZCBiZToNCkBAIC0xNjY3LDcgKzE2NzEs OCBAQA0KICNpZmRlZiBDT05GSUdfQkxLX0RFVl9JREVQQ0kNCiAJCX0gZWxz ZSB7DQogCQkJLyoNCi0JCQkgKiBXaGFjayB0aGUgc3RhdHVzIHJlZ2lzdGVy LCBqdXN0IGluIGNhc2Ugd2UgaGF2ZSBhIGxlZnRvdmVyIHBlbmRpbmcgSVJR Lg0KKwkJCSAqIFdoYWNrIHRoZSBzdGF0dXMgcmVnaXN0ZXIsDQorCQkJICog anVzdCBpbiBjYXNlIHdlIGhhdmUgYSBsZWZ0b3ZlciBwZW5kaW5nIElSUS4N CiAJCQkgKi8NCiAJCQkodm9pZCkgSU5fQllURShod2lmLT5pb19wb3J0c1tJ REVfU1RBVFVTX09GRlNFVF0pOw0KICNlbmRpZiAvKiBDT05GSUdfQkxLX0RF Vl9JREVQQ0kgKi8NCkBAIC0xNjc4LDE2ICsxNjgzLDE4IEBADQogCWRyaXZl ID0gaHdncm91cC0+ZHJpdmU7DQogCWlmICghZHJpdmUpIHsNCiAJCS8qDQot CQkgKiBUaGlzIHNob3VsZCBORVZFUiBoYXBwZW4sIGFuZCB0aGVyZSBpc24n dCBtdWNoIHdlIGNvdWxkIGRvIGFib3V0IGl0IGhlcmUuDQorCQkgKiBUaGlz IHNob3VsZCBORVZFUiBoYXBwZW4sDQorCQkgKiBhbmQgdGhlcmUgaXNuJ3Qg bXVjaCB3ZSBjb3VsZCBkbyBhYm91dCBpdCBoZXJlLg0KIAkJICovDQogCQlz cGluX3VubG9ja19pcnFyZXN0b3JlKCZpb19yZXF1ZXN0X2xvY2ssIGZsYWdz KTsNCiAJCXJldHVybjsNCiAJfQ0KIAlpZiAoIWRyaXZlX2lzX3JlYWR5KGRy aXZlKSkgew0KIAkJLyoNCi0JCSAqIFRoaXMgaGFwcGVucyByZWd1bGFybHkg d2hlbiB3ZSBzaGFyZSBhIFBDSSBJUlEgd2l0aCBhbm90aGVyIGRldmljZS4N Ci0JCSAqIFVuZm9ydHVuYXRlbHksIGl0IGNhbiBhbHNvIGhhcHBlbiB3aXRo IHNvbWUgYnVnZ3kgZHJpdmVzIHRoYXQgdHJpZ2dlcg0KLQkJICogdGhlIElS USBiZWZvcmUgdGhlaXIgc3RhdHVzIHJlZ2lzdGVyIGlzIHVwIHRvIGRhdGUu ICBIb3BlZnVsbHkgd2UgaGF2ZQ0KKwkJICogVGhpcyBoYXBwZW5zIHJlZ3Vs YXJseSB3aGVuIHdlIHNoYXJlIGEgUENJIElSUSB3aXRoDQorCQkgKiBhbm90 aGVyIGRldmljZS4gIFVuZm9ydHVuYXRlbHksIGl0IGNhbiBhbHNvIGhhcHBl bg0KKwkJICogd2l0aCBzb21lIGJ1Z2d5IGRyaXZlcyB0aGF0IHRyaWdnZXIg dGhlIElSUSBiZWZvcmUNCisJCSAqIHRoZWlyIHN0YXR1cyByZWdpc3RlciBp cyB1cCB0byBkYXRlLiAgSG9wZWZ1bGx5IHdlIGhhdmUNCiAJCSAqIGVub3Vn aCBhZHZhbmNlIG92ZXJoZWFkIHRoYXQgdGhlIGxhdHRlciBpc24ndCBhIHBy b2JsZW0uDQogCQkgKi8NCiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlv X3JlcXVlc3RfbG9jaywgZmxhZ3MpOw0KQEAgLTE3MDIsOCArMTcwOSw4IEBA DQogCXNwaW5fdW5sb2NrKCZpb19yZXF1ZXN0X2xvY2spOw0KIA0KIAlpZiAo ZHJpdmUtPnVubWFzaykNCi0JCWlkZV9fc3RpKCk7CS8qIGxvY2FsIENQVSBv bmx5ICovDQotCXN0YXJ0c3RvcCA9IGhhbmRsZXIoZHJpdmUpOwkJLyogc2Vy dmljZSB0aGlzIGludGVycnVwdCwgbWF5IHNldCBoYW5kbGVyIGZvciBuZXh0 IGludGVycnVwdCAqLw0KKwkJbG9jYWxfaXJxX2VuYWJsZSgpOwkvKiBsb2Nh bCBDUFUgb25seSAqLw0KKwlzdGFydHN0b3AgPSBoYW5kbGVyKGRyaXZlKTsJ Lyogc2VydmljZSB0aGlzIGludGVycnVwdCwgbWF5IHNldCBoYW5kbGVyIGZv ciBuZXh0IGludGVycnVwdCAqLw0KIAlzcGluX2xvY2tfaXJxKCZpb19yZXF1 ZXN0X2xvY2spOw0KIA0KIAkvKg0KQEAgLTIwNDYsOCArMjA1Myw3IEBADQog DQogCWlmIChpbmRleCA+PSBNQVhfSFdJRlMpDQogCQlyZXR1cm47DQotCXNh dmVfZmxhZ3MoZmxhZ3MpOwkvKiBhbGwgQ1BVcyAqLw0KLQljbGkoKTsJCQkv KiBhbGwgQ1BVcyAqLw0KKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9fcmVxdWVz dF9sb2NrLCBmbGFncyk7DQogCWh3aWYgPSAmaWRlX2h3aWZzW2luZGV4XTsN CiAJaWYgKCFod2lmLT5wcmVzZW50KQ0KIAkJZ290byBhYm9ydDsNCkBAIC0y MDY1LDcgKzIwNzEsNyBAQA0KIAkvKg0KIAkgKiBBbGwgY2xlYXI/ICBUaGVu IGJsb3cgYXdheSB0aGUgYnVmZmVyIGNhY2hlDQogCSAqLw0KLQlzdGkoKTsN CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9fcmVxdWVzdF9sb2NrLCBm bGFncyk7DQogCWZvciAodW5pdCA9IDA7IHVuaXQgPCBNQVhfRFJJVkVTOyAr K3VuaXQpIHsNCiAJCWRyaXZlID0gJmh3aWYtPmRyaXZlc1t1bml0XTsNCiAJ CWlmICghZHJpdmUtPnByZXNlbnQpDQpAQCAtMjA4MSw3ICsyMDg3LDcgQEAN CiAJCWRlc3Ryb3lfcHJvY19pZGVfZHJpdmVzKGh3aWYpOw0KICNlbmRpZg0K IAl9DQotCWNsaSgpOw0KKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9fcmVxdWVz dF9sb2NrLCBmbGFncyk7DQogCWh3Z3JvdXAgPSBod2lmLT5od2dyb3VwOw0K IA0KIAkvKg0KQEAgLTIyMDEsNyArMjIwNyw3IEBADQogCWh3aWYtPnN0cmFp Z2h0OAkJPSBvbGRfaHdpZi5zdHJhaWdodDg7DQogCWh3aWYtPmh3aWZfZGF0 YQkJPSBvbGRfaHdpZi5od2lmX2RhdGE7DQogYWJvcnQ6DQotCXJlc3RvcmVf ZmxhZ3MoZmxhZ3MpOwkvKiBhbGwgQ1BVcyAqLw0KKwlzcGluX3VubG9ja19p cnFyZXN0b3JlKCZpb19yZXF1ZXN0X2xvY2ssIGZsYWdzKTsNCiB9DQogDQog LyoNCkBAIC0yNDEzLDE0ICsyNDE5LDE0IEBADQogCXdoaWxlIChod2dyb3Vw LT5idXN5KSB7DQogCQl1bnNpZ25lZCBsb25nIGxmbGFnczsNCiAJCXNwaW5f dW5sb2NrX2lycSgmaW9fcmVxdWVzdF9sb2NrKTsNCi0JCV9fc2F2ZV9mbGFn cyhsZmxhZ3MpOwkvKiBsb2NhbCBDUFUgb25seSAqLw0KLQkJX19zdGkoKTsJ CS8qIGxvY2FsIENQVSBvbmx5OyBuZWVkZWQgZm9yIGppZmZpZXMgKi8NCisJ CWxvY2FsX2lycV9zYXZlKGxmbGFncyk7CS8qIGxvY2FsIENQVSBvbmx5ICov DQorCQlsb2NhbF9pcnFfZW5hYmxlKCk7CS8qIGxvY2FsIENQVSBvbmx5OyBu ZWVkZWQgZm9yIGppZmZpZXMgKi8NCiAJCWlmICh0aW1lX2FmdGVyKGppZmZp ZXMsIHRpbWVvdXQpKSB7DQotCQkJX19yZXN0b3JlX2ZsYWdzKGxmbGFncyk7 CS8qIGxvY2FsIENQVSBvbmx5ICovDQorCQkJbG9jYWxfaXJxX3Jlc3RvcmUo bGZsYWdzKTsJLyogbG9jYWwgQ1BVIG9ubHkgKi8NCiAJCQlwcmludGsoIiVz OiBjaGFubmVsIGJ1c3lcbiIsIGRyaXZlLT5uYW1lKTsNCiAJCQlyZXR1cm4g LUVCVVNZOw0KIAkJfQ0KLQkJX19yZXN0b3JlX2ZsYWdzKGxmbGFncyk7CS8q IGxvY2FsIENQVSBvbmx5ICovDQorCQlsb2NhbF9pcnFfcmVzdG9yZShsZmxh Z3MpOwkvKiBsb2NhbCBDUFUgb25seSAqLw0KIAkJc3Bpbl9sb2NrX2lycSgm aW9fcmVxdWVzdF9sb2NrKTsNCiAJfQ0KIAlyZXR1cm4gMDsNCkBAIC0zNTkz LDE2ICszNTk5LDE3IEBADQogaW50IGlkZV9yZWdpc3Rlcl9zdWJkcml2ZXIg KGlkZV9kcml2ZV90ICpkcml2ZSwgaWRlX2RyaXZlcl90ICpkcml2ZXIsIGlu dCB2ZXJzaW9uKQ0KIHsNCiAJdW5zaWduZWQgbG9uZyBmbGFnczsNCi0JDQot CXNhdmVfZmxhZ3MoZmxhZ3MpOwkJLyogYWxsIENQVXMgKi8NCi0JY2xpKCk7 CQkJCS8qIGFsbCBDUFVzICovDQotCWlmICh2ZXJzaW9uICE9IElERV9TVUJE UklWRVJfVkVSU0lPTiB8fCAhZHJpdmUtPnByZXNlbnQgfHwgZHJpdmUtPmRy aXZlciAhPSBOVUxMIHx8IGRyaXZlLT5idXN5IHx8IGRyaXZlLT51c2FnZSkg ew0KLQkJcmVzdG9yZV9mbGFncyhmbGFncyk7CS8qIGFsbCBDUFVzICovDQor DQorCXNwaW5fbG9ja19pcnFzYXZlKCZpb19yZXF1ZXN0X2xvY2ssIGZsYWdz KTsNCisJaWYgKHZlcnNpb24gIT0gSURFX1NVQkRSSVZFUl9WRVJTSU9OIHx8 DQorCQkJIWRyaXZlLT5wcmVzZW50IHx8IGRyaXZlLT5kcml2ZXIgIT0gTlVM TCB8fA0KKwkJCWRyaXZlLT5idXN5IHx8IGRyaXZlLT51c2FnZSkgew0KKwkJ c3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9fcmVxdWVzdF9sb2NrLCBmbGFn cyk7DQogCQlyZXR1cm4gMTsNCiAJfQ0KIAlkcml2ZS0+ZHJpdmVyID0gZHJp dmVyOw0KIAlzZXR1cF9kcml2ZXJfZGVmYXVsdHMoZHJpdmUpOw0KLQlyZXN0 b3JlX2ZsYWdzKGZsYWdzKTsJCS8qIGFsbCBDUFVzICovDQorCXNwaW5fdW5s b2NrX2lycXJlc3RvcmUoJmlvX3JlcXVlc3RfbG9jaywgZmxhZ3MpOw0KIAlp ZiAoZHJpdmUtPmF1dG90dW5lICE9IDIpIHsNCiAJCWlmIChkcml2ZXItPnN1 cHBvcnRzX2RtYSAmJiBIV0lGKGRyaXZlKS0+ZG1hcHJvYyAhPSBOVUxMKSB7 DQogCQkJLyoNCkBAIC0zNjI5LDExICszNjM2LDEwIEBADQogaW50IGlkZV91 bnJlZ2lzdGVyX3N1YmRyaXZlciAoaWRlX2RyaXZlX3QgKmRyaXZlKQ0KIHsN CiAJdW5zaWduZWQgbG9uZyBmbGFnczsNCi0JDQotCXNhdmVfZmxhZ3MoZmxh Z3MpOwkJLyogYWxsIENQVXMgKi8NCi0JY2xpKCk7CQkJCS8qIGFsbCBDUFVz ICovDQorDQorCXNwaW5fbG9ja19pcnFzYXZlKCZpb19yZXF1ZXN0X2xvY2ss IGZsYWdzKTsNCiAJaWYgKGRyaXZlLT51c2FnZSB8fCBkcml2ZS0+YnVzeSB8 fCBkcml2ZS0+ZHJpdmVyID09IE5VTEwgfHwgRFJJVkVSKGRyaXZlKS0+YnVz eSkgew0KLQkJcmVzdG9yZV9mbGFncyhmbGFncyk7CS8qIGFsbCBDUFVzICov DQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb19yZXF1ZXN0X2xvY2ss IGZsYWdzKTsNCiAJCXJldHVybiAxOw0KIAl9DQogI2lmIGRlZmluZWQoQ09O RklHX0JMS19ERVZfSVNBUE5QKSAmJiBkZWZpbmVkKENPTkZJR19JU0FQTlAp ICYmIGRlZmluZWQoTU9EVUxFKQ0KQEAgLTM2NDUsNyArMzY1MSw3IEBADQog I2VuZGlmDQogCWF1dG9fcmVtb3ZlX3NldHRpbmdzKGRyaXZlKTsNCiAJZHJp dmUtPmRyaXZlciA9IE5VTEw7DQotCXJlc3RvcmVfZmxhZ3MoZmxhZ3MpOwkJ LyogYWxsIENQVXMgKi8NCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9f cmVxdWVzdF9sb2NrLCBmbGFncyk7DQogCXJldHVybiAwOw0KIH0NCiANCmRp ZmYgLXVyTiBsaW51eC0yLjQuMTktcDQvZHJpdmVycy9pZGUvaXQ4MTcyLmMg bGludXgtMi40LjE5LXA0LnNwaW4vZHJpdmVycy9pZGUvaXQ4MTcyLmMNCi0t LSBsaW51eC0yLjQuMTktcDQvZHJpdmVycy9pZGUvaXQ4MTcyLmMJV2VkIE1h ciAyMCAxODoyNjozNiAyMDAyDQorKysgbGludXgtMi40LjE5LXA0LnNwaW4v ZHJpdmVycy9pZGUvaXQ4MTcyLmMJV2VkIE1hciAyNyAyMjowMjowMSAyMDAy DQpAQCAtOTUsMTAgKzk1LDkgQEANCiAJICAgIGRyaXZlX2VuYWJsZXMgfD0g MHgwMDA2Ow0KICAgICB9DQogDQotICAgIHNhdmVfZmxhZ3MoZmxhZ3MpOw0K LSAgICBjbGkoKTsNCisgICAgc3Bpbl9sb2NrX2lycXNhdmUoJmlvX3JlcXVl c3RfbG9jaywgZmxhZ3MpOw0KICAgICBwY2lfd3JpdGVfY29uZmlnX3dvcmQo SFdJRihkcml2ZSktPnBjaV9kZXYsIDB4NDAsIGRyaXZlX2VuYWJsZXMpOw0K LSAgICByZXN0b3JlX2ZsYWdzKGZsYWdzKTsNCisgICAgc3Bpbl91bmxvY2tf aXJxcmVzdG9yZSgmaW9fcmVxdWVzdF9sb2NrLCBmbGFncyk7DQogfQ0KIA0K ICNpZiBkZWZpbmVkKENPTkZJR19CTEtfREVWX0lERURNQSkgJiYgZGVmaW5l ZChDT05GSUdfSVQ4MTcyX1RVTklORykNCmRpZmYgLXVyTiBsaW51eC0yLjQu MTktcDQvZHJpdmVycy9pZGUvbnM4NzQxNS5jIGxpbnV4LTIuNC4xOS1wNC5z cGluL2RyaXZlcnMvaWRlL25zODc0MTUuYw0KLS0tIGxpbnV4LTIuNC4xOS1w NC9kcml2ZXJzL2lkZS9uczg3NDE1LmMJVHVlIEp1biAyMCAwNzo1MjozNiAy MDAwDQorKysgbGludXgtMi40LjE5LXA0LnNwaW4vZHJpdmVycy9pZGUvbnM4 NzQxNS5jCVdlZCBNYXIgMjcgMjE6MjQ6MDMgMjAwMg0KQEAgLTM4LDggKzM4 LDkgQEANCiAJc3RydWN0IHBjaV9kZXYgKmRldiA9IGh3aWYtPnBjaV9kZXY7 DQogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7DQogDQotCV9fc2F2ZV9mbGFncyhm bGFncyk7CS8qIGxvY2FsIENQVSBvbmx5ICovDQotCV9fY2xpKCk7CQkvKiBs b2NhbCBDUFUgb25seSAqLw0KKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CS8q IGxvY2FsIENQVSBvbmx5ICovDQorCWxvY2FsX2lycV9kaXNhYmxlKCk7CS8q IGxvY2FsIENQVSBvbmx5ICovDQorDQogCW5ldyA9ICpvbGQ7DQogDQogCS8q IEFkanVzdCBJUlEgZW5hYmxlIGJpdCAqLw0KQEAgLTcyLDggKzczLDcgQEAN CiAJCSAqLw0KIAkJdWRlbGF5KDEwKTsNCiAJfQ0KLQ0KLQlfX3Jlc3RvcmVf ZmxhZ3MoZmxhZ3MpOwkvKiBsb2NhbCBDUFUgb25seSAqLw0KKwlsb2NhbF9p cnFfcmVzdG9yZShmbGFncyk7CS8qIGxvY2FsIENQVSBvbmx5ICovDQogfQ0K IA0KIHN0YXRpYyB2b2lkIG5zODc0MTVfc2VsZWN0cHJvYyAoaWRlX2RyaXZl X3QgKmRyaXZlKQ0KZGlmZiAtdXJOIGxpbnV4LTIuNC4xOS1wNC9kcml2ZXJz L2lkZS9vcHRpNjIxLmMgbGludXgtMi40LjE5LXA0LnNwaW4vZHJpdmVycy9p ZGUvb3B0aTYyMS5jDQotLS0gbGludXgtMi40LjE5LXA0L2RyaXZlcnMvaWRl L29wdGk2MjEuYwlUdWUgTWF5ICAxIDE2OjA1OjAwIDIwMDENCisrKyBsaW51 eC0yLjQuMTktcDQuc3Bpbi9kcml2ZXJzL2lkZS9vcHRpNjIxLmMJV2VkIE1h ciAyNyAyMjowNzozNCAyMDAyDQpAQCAtMjc2LDkgKzI3Niw3IEBADQogCQlo d2lmLT5uYW1lLCBheCwgc2Vjb25kLmRhdGFfdGltZSwgc2Vjb25kLnJlY292 ZXJ5X3RpbWUsIGRyZHkpOw0KICNlbmRpZg0KIA0KLQlzYXZlX2ZsYWdzKGZs YWdzKTsJLyogYWxsIENQVXMgKi8NCi0JY2xpKCk7CQkJLyogYWxsIENQVXMg Ki8NCi0NCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvX3JlcXVlc3RfbG9jaywg ZmxhZ3MpOw0KICAgICAgCXJlZ19iYXNlID0gaHdpZi0+aW9fcG9ydHNbSURF X0RBVEFfT0ZGU0VUXTsNCiAJb3V0YigweGMwLCByZWdfYmFzZStDTlRSTF9S RUcpOwkvKiBhbGxvdyBSZWdpc3Rlci1CICovDQogCW91dGIoMHhmZiwgcmVn X2Jhc2UrNSk7CQkvKiBobW0sIHNldHVwdmljLmV4ZSBkb2VzIHRoaXMgOy0p ICovDQpAQCAtMzAyLDcgKzMwMCw3IEBADQogIAl3cml0ZV9yZWcobWlzYywg TUlTQ19SRUcpOwkvKiBzZXQgYWRkcmVzcyBzZXR1cCwgRFJEWSB0aW1pbmdz LCAgICovDQogIAkJCQkJLyogIGFuZCByZWFkIHByZWZldGNoIGZvciBib3Ro IGRyaXZlcyAqLw0KIA0KLQlyZXN0b3JlX2ZsYWdzKGZsYWdzKTsJLyogYWxs IENQVXMgKi8NCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9fcmVxdWVz dF9sb2NrLCBmbGFncyk7DQogfQ0KIA0KIC8qDQpkaWZmIC11ck4gbGludXgt Mi40LjE5LXA0L2RyaXZlcnMvaWRlL3BkYzQwMzAuYyBsaW51eC0yLjQuMTkt cDQuc3Bpbi9kcml2ZXJzL2lkZS9wZGM0MDMwLmMNCi0tLSBsaW51eC0yLjQu MTktcDQvZHJpdmVycy9pZGUvcGRjNDAzMC5jCVRodSBNYXIgMjEgMDc6MDU6 MDYgMjAwMg0KKysrIGxpbnV4LTIuNC4xOS1wNC5zcGluL2RyaXZlcnMvaWRl L3BkYzQwMzAuYwlXZWQgTWFyIDI3IDIxOjI1OjAwIDIwMDINCkBAIC02NTUs NyArNjU1LDcgQEANCiAJCQlyZXR1cm4gc3RhcnRzdG9wOw0KIAkgICAgCX0N CiAJCWlmICghZHJpdmUtPnVubWFzaykNCi0JCQlfX2NsaSgpOwkvKiBsb2Nh bCBDUFUgb25seSAqLw0KKwkJCWxvY2FsX2lycV9kaXNhYmxlKCk7CS8qIGxv Y2FsIENQVSBvbmx5ICovDQogCQlIV0dST1VQKGRyaXZlKS0+d3JxID0gKnJx OyAvKiBzY3JhdGNocGFkICovDQogCQlyZXR1cm4gcHJvbWlzZV93cml0ZShk cml2ZSk7DQogCWRlZmF1bHQ6DQpkaWZmIC11ck4gbGludXgtMi40LjE5LXA0 L2RyaXZlcnMvaWRlL3BpaXguYyBsaW51eC0yLjQuMTktcDQuc3Bpbi9kcml2 ZXJzL2lkZS9waWl4LmMNCi0tLSBsaW51eC0yLjQuMTktcDQvZHJpdmVycy9p ZGUvcGlpeC5jCVRodSBNYXIgMjEgMDc6MDU6MDYgMjAwMg0KKysrIGxpbnV4 LTIuNC4xOS1wNC5zcGluL2RyaXZlcnMvaWRlL3BpaXguYwlXZWQgTWFyIDI3 IDIyOjAyOjU2IDIwMDINCkBAIC0yNjgsMTIgKzI2OCwxMSBAQA0KIAkJbWFz dGVyX2RhdGEgPSBtYXN0ZXJfZGF0YSB8ICh0aW1pbmdzW3Bpb11bMF0gPDwg MTIpIHwNCiAJCQkgICAgICAodGltaW5nc1twaW9dWzFdIDw8IDgpOw0KIAl9 DQotCXNhdmVfZmxhZ3MoZmxhZ3MpOw0KLQljbGkoKTsNCisJc3Bpbl9sb2Nr X2lycXNhdmUoJmlvX3JlcXVlc3RfbG9jaywgZmxhZ3MpOw0KIAlwY2lfd3Jp dGVfY29uZmlnX3dvcmQoSFdJRihkcml2ZSktPnBjaV9kZXYsIG1hc3Rlcl9w b3J0LCBtYXN0ZXJfZGF0YSk7DQogCWlmIChpc19zbGF2ZSkNCiAJCXBjaV93 cml0ZV9jb25maWdfYnl0ZShIV0lGKGRyaXZlKS0+cGNpX2Rldiwgc2xhdmVf cG9ydCwgc2xhdmVfZGF0YSk7DQotCXJlc3RvcmVfZmxhZ3MoZmxhZ3MpOw0K KwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb19yZXF1ZXN0X2xvY2ssIGZs YWdzKTsNCiB9DQogDQogI2lmIGRlZmluZWQoQ09ORklHX0JMS19ERVZfSURF RE1BKSAmJiBkZWZpbmVkKENPTkZJR19QSUlYX1RVTklORykNCmRpZmYgLXVy TiBsaW51eC0yLjQuMTktcDQvZHJpdmVycy9pZGUvcWQ2NXh4LmMgbGludXgt Mi40LjE5LXA0LnNwaW4vZHJpdmVycy9pZGUvcWQ2NXh4LmMNCi0tLSBsaW51 eC0yLjQuMTktcDQvZHJpdmVycy9pZGUvcWQ2NXh4LmMJV2VkIE1hciAyMCAx ODoyNjozNiAyMDAyDQorKysgbGludXgtMi40LjE5LXA0LnNwaW4vZHJpdmVy cy9pZGUvcWQ2NXh4LmMJV2VkIE1hciAyNyAyMjowNTowMiAyMDAyDQpAQCAt OTQsMTAgKzk0LDkgQEANCiB7DQogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7DQog DQotCXNhdmVfZmxhZ3MoZmxhZ3MpOwkvKiBhbGwgQ1BVcyAqLw0KLQljbGko KTsJCQkvKiBhbGwgQ1BVcyAqLw0KKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9f cmVxdWVzdF9sb2NrLCBmbGFncyk7DQogCW91dGIoY29udGVudCxyZWcpOw0K LQlyZXN0b3JlX2ZsYWdzKGZsYWdzKTsJLyogYWxsIENQVXMgKi8NCisJc3Bp bl91bmxvY2tfaXJxcmVzdG9yZSgmaW9fcmVxdWVzdF9sb2NrLCBmbGFncyk7 DQogfQ0KIA0KIGJ5dGUgX19pbml0IHFkX3JlYWRfcmVnIChieXRlIHJlZykN CkBAIC0xMDUsMTAgKzEwNCw5IEBADQogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7 DQogCWJ5dGUgcmVhZDsNCiANCi0Jc2F2ZV9mbGFncyhmbGFncyk7CS8qIGFs bCBDUFVzICovDQotCWNsaSgpOwkJCS8qIGFsbCBDUFVzICovDQorCXNwaW5f bG9ja19pcnFzYXZlKCZpb19yZXF1ZXN0X2xvY2ssIGZsYWdzKTsNCiAJcmVh ZCA9IGluYihyZWcpOw0KLQlyZXN0b3JlX2ZsYWdzKGZsYWdzKTsJLyogYWxs IENQVXMgKi8NCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9fcmVxdWVz dF9sb2NrLCBmbGFncyk7DQogCXJldHVybiByZWFkOw0KIH0NCiANCkBAIC0z MTMsMTMgKzMxMSwxMiBAQA0KIAlieXRlIHJlYWRyZWc7DQogCXVuc2lnbmVk IGxvbmcgZmxhZ3M7DQogDQotCXNhdmVfZmxhZ3MoZmxhZ3MpOwkvKiBhbGwg Q1BVcyAqLw0KLQljbGkoKTsJCQkvKiBhbGwgQ1BVcyAqLw0KKwlzcGluX2xv Y2tfaXJxc2F2ZSgmaW9fcmVxdWVzdF9sb2NrLCBmbGFncyk7DQogCXNhdmVy ZWcgPSBpbmJfcChwb3J0KTsNCiAJb3V0Yl9wKFFEX1RFU1RWQUwscG9ydCk7 CS8qIHNhZmUgdmFsdWUgKi8NCiAJcmVhZHJlZyA9IGluYl9wKHBvcnQpOw0K IAlvdXRiKHNhdmVyZWcscG9ydCk7DQotCXJlc3RvcmVfZmxhZ3MoZmxhZ3Mp OwkvKiBhbGwgQ1BVcyAqLw0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZp b19yZXF1ZXN0X2xvY2ssIGZsYWdzKTsNCiANCiAJaWYgKHNhdmVyZWcgPT0g UURfVEVTVFZBTCkgew0KIAkJcHJpbnRrKEtFUk5fRVJSICJPdXRjaCAhIHRo ZSBwcm9iZSBmb3IgcWQ2NXh4IGlzbid0IHJlbGlhYmxlICFcbiIpOw0KZGlm ZiAtdXJOIGxpbnV4LTIuNC4xOS1wNC9kcml2ZXJzL2lkZS9zbGM5MGU2Ni5j IGxpbnV4LTIuNC4xOS1wNC5zcGluL2RyaXZlcnMvaWRlL3NsYzkwZTY2LmMN Ci0tLSBsaW51eC0yLjQuMTktcDQvZHJpdmVycy9pZGUvc2xjOTBlNjYuYwlX ZWQgTWFyIDIwIDE4OjI2OjM2IDIwMDINCisrKyBsaW51eC0yLjQuMTktcDQu c3Bpbi9kcml2ZXJzL2lkZS9zbGM5MGU2Ni5jCVdlZCBNYXIgMjcgMjI6MDU6 NDYgMjAwMg0KQEAgLTIyMiwxMiArMjIyLDExIEBADQogCQltYXN0ZXJfZGF0 YSA9IG1hc3Rlcl9kYXRhIHwgKHRpbWluZ3NbcGlvXVswXSA8PCAxMikgfA0K IAkJCSAgICAgICh0aW1pbmdzW3Bpb11bMV0gPDwgOCk7DQogCX0NCi0Jc2F2 ZV9mbGFncyhmbGFncyk7DQotCWNsaSgpOw0KKwlzcGluX2xvY2tfaXJxc2F2 ZSgmaW9fcmVxdWVzdF9sb2NrLCBmbGFncyk7DQogCXBjaV93cml0ZV9jb25m aWdfd29yZChIV0lGKGRyaXZlKS0+cGNpX2RldiwgbWFzdGVyX3BvcnQsIG1h c3Rlcl9kYXRhKTsNCiAJaWYgKGlzX3NsYXZlKQ0KIAkJcGNpX3dyaXRlX2Nv bmZpZ19ieXRlKEhXSUYoZHJpdmUpLT5wY2lfZGV2LCBzbGF2ZV9wb3J0LCBz bGF2ZV9kYXRhKTsNCi0JcmVzdG9yZV9mbGFncyhmbGFncyk7DQorCXNwaW5f dW5sb2NrX2lycXJlc3RvcmUoJmlvX3JlcXVlc3RfbG9jaywgZmxhZ3MpOw0K IH0NCiANCiAjaWZkZWYgQ09ORklHX0JMS19ERVZfSURFRE1BDQpkaWZmIC11 ck4gbGludXgtMi40LjE5LXA0L2RyaXZlcnMvaWRlL3RybTI5MC5jIGxpbnV4 LTIuNC4xOS1wNC5zcGluL2RyaXZlcnMvaWRlL3RybTI5MC5jDQotLS0gbGlu dXgtMi40LjE5LXA0L2RyaXZlcnMvaWRlL3RybTI5MC5jCVRodSBNYXIgMjEg MDc6MDU6MDYgMjAwMg0KKysrIGxpbnV4LTIuNC4xOS1wNC5zcGluL2RyaXZl cnMvaWRlL3RybTI5MC5jCVdlZCBNYXIgMjcgMjI6MTQ6MDcgMjAwMg0KQEAg LTE0OCwxMiArMTQ4LDEzIEBADQogCS8qIHNlbGVjdCBQSU8gb3IgRE1BICov DQogCXJlZyA9IHVzZV9kbWEgPyAoMHgyMSB8IDB4ODIpIDogKDB4MjEgJiB+ MHg4Mik7DQogDQotCV9fc2F2ZV9mbGFncyhmbGFncyk7CS8qIGxvY2FsIENQ VSBvbmx5ICovDQotCV9fY2xpKCk7CQkvKiBsb2NhbCBDUFUgb25seSAqLw0K Kwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CS8qIGxvY2FsIENQVSBvbmx5ICov DQorCWxvY2FsX2lycV9kaXNhYmxlKCk7CS8qIGxvY2FsIENQVSBvbmx5ICov DQogDQogCWlmIChyZWcgIT0gaHdpZi0+c2VsZWN0X2RhdGEpIHsNCiAJCWh3 aWYtPnNlbGVjdF9kYXRhID0gcmVnOw0KLQkJb3V0YigweDUxfChod2lmLT5j aGFubmVsPDwzKSwgaHdpZi0+Y29uZmlnX2RhdGErMSk7CS8qIHNldCBQSU8v RE1BICovDQorCQlvdXRiKDB4NTF8KGh3aWYtPmNoYW5uZWw8PDMpLCBod2lm LT5jb25maWdfZGF0YSsxKTsNCisJCQkvKiBzZXQgUElPL0RNQSAqLw0KIAkJ b3V0dyhyZWcgJiAweGZmLCBod2lmLT5jb25maWdfZGF0YSk7DQogCX0NCiAN CkBAIC0xNjMsOCArMTY0LDcgQEANCiAJCXJlZyAmPSB+KDEgPDwgaHdpZi0+ Y2hhbm5lbCk7DQogCQlvdXR3KHJlZywgaHdpZi0+Y29uZmlnX2RhdGErMyk7 DQogCX0NCi0NCi0JX19yZXN0b3JlX2ZsYWdzKGZsYWdzKTsJLyogbG9jYWwg Q1BVIG9ubHkgKi8NCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwkvKiBs b2NhbCBDUFUgb25seSAqLw0KIH0NCiANCiBzdGF0aWMgdm9pZCB0cm0yOTBf c2VsZWN0cHJvYyAoaWRlX2RyaXZlX3QgKmRyaXZlKQ0KQEAgLTI1MiwyMSAr MjUyLDIxIEBADQogCQlwcmludGsoIlRSTTI5MDogdXNpbmcgZGVmYXVsdCBj b25maWcgYmFzZSBhdCAweCUwNGx4XG4iLCBod2lmLT5jb25maWdfZGF0YSk7 DQogCX0NCiANCi0JX19zYXZlX2ZsYWdzKGZsYWdzKTsJLyogbG9jYWwgQ1BV IG9ubHkgKi8NCi0JX19jbGkoKTsJCS8qIGxvY2FsIENQVSBvbmx5ICovDQor CWxvY2FsX2lycV9zYXZlKGZsYWdzKTsJLyogbG9jYWwgQ1BVIG9ubHkgKi8N CisJbG9jYWxfaXJxX2Rpc2FibGUoKTsJLyogbG9jYWwgQ1BVIG9ubHkgKi8N CiAJLyogcHV0IGNvbmZpZyByZWcgaW50byBmaXJzdCBieXRlIG9mIGh3aWYt PnNlbGVjdF9kYXRhICovDQogCW91dGIoMHg1MXwoaHdpZi0+Y2hhbm5lbDw8 MyksIGh3aWYtPmNvbmZpZ19kYXRhKzEpOw0KLQlod2lmLT5zZWxlY3RfZGF0 YSA9IDB4MjE7CQkJLyogc2VsZWN0IFBJTyBhcyBkZWZhdWx0ICovDQorCWh3 aWYtPnNlbGVjdF9kYXRhID0gMHgyMTsJCS8qIHNlbGVjdCBQSU8gYXMgZGVm YXVsdCAqLw0KIAlvdXRiKGh3aWYtPnNlbGVjdF9kYXRhLCBod2lmLT5jb25m aWdfZGF0YSk7DQotCXJlZyA9IGluYihod2lmLT5jb25maWdfZGF0YSszKTsJ CQkvKiBnZXQgSVJRIGluZm8gKi8NCi0JcmVnID0gKHJlZyAmIDB4MTApIHwg MHgwMzsJCQkvKiBtYXNrIElSUXMgZm9yIGJvdGggcG9ydHMgKi8NCisJcmVn ID0gaW5iKGh3aWYtPmNvbmZpZ19kYXRhKzMpOwkJLyogZ2V0IElSUSBpbmZv ICovDQorCXJlZyA9IChyZWcgJiAweDEwKSB8IDB4MDM7CQkvKiBtYXNrIElS UXMgZm9yIGJvdGggcG9ydHMgKi8NCiAJb3V0YihyZWcsIGh3aWYtPmNvbmZp Z19kYXRhKzMpOw0KLQlfX3Jlc3RvcmVfZmxhZ3MoZmxhZ3MpOwkvKiBsb2Nh bCBDUFUgb25seSAqLw0KKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CS8q IGxvY2FsIENQVSBvbmx5ICovDQogDQogCWlmICgocmVnICYgMHgxMCkpDQog CQlod2lmLT5pcnEgPSBod2lmLT5jaGFubmVsID8gMTUgOiAxNDsJLyogbGVn YWN5IG1vZGUgKi8NCiAJZWxzZSBpZiAoIWh3aWYtPmlycSAmJiBod2lmLT5t YXRlICYmIGh3aWYtPm1hdGUtPmlycSkNCi0JCWh3aWYtPmlycSA9IGh3aWYt Pm1hdGUtPmlycTsJCS8qIHNoYXJpbmcgSVJRIHdpdGggbWF0ZSAqLw0KKwkJ aHdpZi0+aXJxID0gaHdpZi0+bWF0ZS0+aXJxOwkvKiBzaGFyaW5nIElSUSB3 aXRoIG1hdGUgKi8NCiAJaWRlX3NldHVwX2RtYShod2lmLCAoaHdpZi0+Y29u ZmlnX2RhdGEgKyA0KSBeIChod2lmLT5jaGFubmVsID8gMHgwMDgwIDogMHgw MDAwKSwgMyk7DQogDQogI2lmZGVmIENPTkZJR19CTEtfREVWX0lERURNQQ0K ZGlmZiAtdXJOIGxpbnV4LTIuNC4xOS1wNC9kcml2ZXJzL2lkZS91bWM4Njcy LmMgbGludXgtMi40LjE5LXA0LnNwaW4vZHJpdmVycy9pZGUvdW1jODY3Mi5j DQotLS0gbGludXgtMi40LjE5LXA0L2RyaXZlcnMvaWRlL3VtYzg2NzIuYwlU aHUgQXByIDEzIDIyOjU0OjI2IDIwMDANCisrKyBsaW51eC0yLjQuMTktcDQu c3Bpbi9kcml2ZXJzL2lkZS91bWM4NjcyLmMJV2VkIE1hciAyNyAyMToyOToz NiAyMDAyDQpAQCAtOTIsMTMgKzkyLDExIEBADQogCW91dF91bWMgKDB4ZDcs KHNwZWVkdGFiWzBdW3NwZWVkc1syXV0gfCAoc3BlZWR0YWJbMF1bc3BlZWRz WzNdXTw8NCkpKTsNCiAJb3V0X3VtYyAoMHhkNiwoc3BlZWR0YWJbMF1bc3Bl ZWRzWzBdXSB8IChzcGVlZHRhYlswXVtzcGVlZHNbMV1dPDw0KSkpOw0KIAl0 bXAgPSAwOw0KLQlmb3IgKGkgPSAzOyBpID49IDA7IGktLSkNCi0Jew0KKwlm b3IgKGkgPSAzOyBpID49IDA7IGktLSkgew0KIAkJdG1wID0gKHRtcCA8PCAy KSB8IHNwZWVkdGFiWzFdW3NwZWVkc1tpXV07DQogCX0NCiAJb3V0X3VtYyAo MHhkYyx0bXApOw0KLQlmb3IgKGkgPSAwO2kgPCA0OyBpKyspDQotCXsNCisJ Zm9yIChpID0gMDtpIDwgNDsgaSsrKSB7DQogCQlvdXRfdW1jICgweGQwK2ks c3BlZWR0YWJbMl1bc3BlZWRzW2ldXSk7DQogCQlvdXRfdW1jICgweGQ4K2ks c3BlZWR0YWJbMl1bc3BlZWRzW2ldXSk7DQogCX0NCkBAIC0xMTUsMzkgKzEx MywzNyBAQA0KIA0KIAlwaW8gPSBpZGVfZ2V0X2Jlc3RfcGlvX21vZGUoZHJp dmUsIHBpbywgNCwgTlVMTCk7DQogCXByaW50aygiJXM6IHNldHRpbmcgdW1j ODY3MiB0byBQSU8gbW9kZSVkIChzcGVlZCAlZClcbiIsIGRyaXZlLT5uYW1l LCBwaW8sIHBpb190b191bWNbcGlvXSk7DQotCXNhdmVfZmxhZ3MoZmxhZ3Mp OwkvKiBhbGwgQ1BVcyAqLw0KLQljbGkoKTsJCQkvKiBhbGwgQ1BVcyAqLw0K KwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9fcmVxdWVzdF9sb2NrLCBmbGFncyk7 DQogCWlmIChod2dyb3VwICYmIGh3Z3JvdXAtPmhhbmRsZXIgIT0gTlVMTCkg ew0KIAkJcHJpbnRrKCJ1bWM4NjcyOiBvdGhlciBpbnRlcmZhY2UgaXMgYnVz eTogZXhpdGluZyB0dW5lX3VtYygpXG4iKTsNCiAJfSBlbHNlIHsNCiAJCWN1 cnJlbnRfc3BlZWRzW2RyaXZlLT5uYW1lWzJdIC0gJ2EnXSA9IHBpb190b191 bWNbcGlvXTsNCiAJCXVtY19zZXRfc3BlZWRzIChjdXJyZW50X3NwZWVkcyk7 DQogCX0NCi0JcmVzdG9yZV9mbGFncyhmbGFncyk7CS8qIGFsbCBDUFVzICov DQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvX3JlcXVlc3RfbG9jaywg ZmxhZ3MpOw0KIH0NCiANCiB2b2lkIF9faW5pdCBpbml0X3VtYzg2NzIgKHZv aWQpCS8qIGNhbGxlZCBmcm9tIGlkZS5jICovDQogew0KIAl1bnNpZ25lZCBs b25nIGZsYWdzOw0KIA0KLQlfX3NhdmVfZmxhZ3MoZmxhZ3MpOwkvKiBsb2Nh bCBDUFUgb25seSAqLw0KLQlfX2NsaSgpOwkJLyogbG9jYWwgQ1BVIG9ubHkg Ki8NCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwkvKiBsb2NhbCBDUFUgb25s eSAqLw0KKwlsb2NhbF9pcnFfZGlzYWJsZSgpOwkvKiBsb2NhbCBDUFUgb25s eSAqLw0KIAlpZiAoY2hlY2tfcmVnaW9uKDB4MTA4LCAyKSkgew0KLQkJX19y ZXN0b3JlX2ZsYWdzKGZsYWdzKTsNCisJCWxvY2FsX2lycV9yZXN0b3JlKGZs YWdzKTsJLyogbG9jYWwgQ1BVIG9ubHkgKi8NCiAJCXByaW50aygiXG51bWM4 NjcyOiBQT1JUUyAweDEwOC0weDEwOSBBTFJFQURZIElOIFVTRVxuIik7DQog CQlyZXR1cm47DQogCX0NCiAJb3V0Yl9wICgweDVBLDB4MTA4KTsgLyogZW5h YmxlIHVtYyAqLw0KLQlpZiAoaW5fdW1jICgweGQ1KSAhPSAweGEwKQ0KLQl7 DQotCQlfX3Jlc3RvcmVfZmxhZ3MoZmxhZ3MpOwkvKiBsb2NhbCBDUFUgb25s eSAqLw0KKwlpZiAoaW5fdW1jICgweGQ1KSAhPSAweGEwKSB7DQorCQlsb2Nh bF9pcnFfcmVzdG9yZShmbGFncyk7CS8qIGxvY2FsIENQVSBvbmx5ICovDQog CQlwcmludGsgKCJ1bWM4NjcyOiBub3QgZm91bmRcbiIpOw0KIAkJcmV0dXJu OyAgDQogCX0NCiAJb3V0Yl9wICgweGE1LDB4MTA4KTsgLyogZGlzYWJsZSB1 bWMgKi8NCiANCiAJdW1jX3NldF9zcGVlZHMgKGN1cnJlbnRfc3BlZWRzKTsN Ci0JX19yZXN0b3JlX2ZsYWdzKGZsYWdzKTsJLyogbG9jYWwgQ1BVIG9ubHkg Ki8NCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwkJLyogbG9jYWwgQ1BV IG9ubHkgKi8NCiANCiAJcmVxdWVzdF9yZWdpb24oMHgxMDgsIDIsICJ1bWM4 NjcyIik7DQogCWlkZV9od2lmc1swXS5jaGlwc2V0ID0gaWRlX3VtYzg2NzI7 DQpkaWZmIC11ck4gbGludXgtMi40LjE5LXA0L2RyaXZlcnMvc2NzaS9pZGUt c2NzaS5jIGxpbnV4LTIuNC4xOS1wNC5zcGluL2RyaXZlcnMvc2NzaS9pZGUt c2NzaS5jDQotLS0gbGludXgtMi40LjE5LXA0L2RyaXZlcnMvc2NzaS9pZGUt c2NzaS5jCUZyaSBNYXIgMjkgMTU6MzE6MzggMjAwMg0KKysrIGxpbnV4LTIu NC4xOS1wNC5zcGluL2RyaXZlcnMvc2NzaS9pZGUtc2NzaS5jCUZyaSBNYXIg MjkgMTU6MzI6MTIgMjAwMg0KQEAgLTMzNCw3ICszMzQsNyBAQA0KIAlpZiAo KHN0YXR1cyAmIERSUV9TVEFUKSA9PSAwKSB7CQkJCQkvKiBObyBtb3JlIGlu dGVycnVwdHMgKi8NCiAJCWlmICh0ZXN0X2JpdChJREVTQ1NJX0xPR19DTUQs ICZzY3NpLT5sb2cpKQ0KIAkJCXByaW50ayAoS0VSTl9JTkZPICJQYWNrZXQg Y29tbWFuZCBjb21wbGV0ZWQsICVkIGJ5dGVzIHRyYW5zZmVycmVkXG4iLCBw Yy0+YWN0dWFsbHlfdHJhbnNmZXJyZWQpOw0KLQkJaWRlX19zdGkoKTsNCisJ CWxvY2FsX2lycV9lbmFibGUoKTsNCiAJCWlmIChzdGF0dXMgJiBFUlJfU1RB VCkNCiAJCQlycS0+ZXJyb3JzKys7DQogCQlpZGVzY3NpX2VuZF9yZXF1ZXN0 KGRyaXZlLCAxKTsNCg== --1430322656-1932894290-1027598738=:4719-- - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/