Date: Fri, 22 Aug 2003 03:09:41 -0500 (CDT) From: Mike Silbersack <silby@silby.com> To: Mike Tancsa <mike@sentex.net> Cc: re@freebsd.org Subject: PAE removal patch for testing Message-ID: <20030822030729.A7877@odysseus.silby.com>
next in thread | raw e-mail | index | archive | help
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. --0-1454759381-1061539781=:7877 Content-Type: TEXT/PLAIN; charset=US-ASCII If you're one of the people who has cvsup'd to 4.8-stable since August 8th and you've since begun to experience panics on a previously stable system, please apply the attached patch and see if your previous stability has been restored. Please tell me your results. Thanks, Mike "Silby" Silbersack --0-1454759381-1061539781=:7877 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="pae-backout.patch" Content-Transfer-Encoding: BASE64 Content-ID: <20030822030941.I7877@odysseus.silby.com> Content-Description: Content-Disposition: attachment; filename="pae-backout.patch" ZGlmZiAtdSAtciAvdXNyL3NyYy9zeXMub2xkL2kzODYvaTM4Ni9iaW9zLmMg L3Vzci9zcmMvc3lzL2kzODYvaTM4Ni9iaW9zLmMNCi0tLSAvdXNyL3NyYy9z eXMub2xkL2kzODYvaTM4Ni9iaW9zLmMJVGh1IEF1ZyAyMSAxODozNTozMyAy MDAzDQorKysgL3Vzci9zcmMvc3lzL2kzODYvaTM4Ni9iaW9zLmMJRnJpIEF1 ZyAyMiAwMjoxNzowMyAyMDAzDQpAQCAtMzEyLDggKzMxMiw3IEBADQogICAg IHZhX2xpc3QgCWFwOw0KICAgICBpbnQgCWZsYWdzID0gQklPU0NPREVfRkxB RyB8IEJJT1NEQVRBX0ZMQUc7DQogICAgIHVfaW50IAlpLCBhcmdfc3RhcnQs IGFyZ19lbmQ7DQotICAgIHB0X2VudHJ5X3QgCSpwdGU7DQotICAgIHBkX2Vu dHJ5X3QJKnB0ZDsNCisgICAgdV9pbnQgCSpwdGUsICpwdGQ7DQogDQogICAg IGFyZ19zdGFydCA9IDB4ZmZmZmZmZmY7DQogICAgIGFyZ19lbmQgPSAwOw0K QEAgLTM3MiwyMiArMzcxLDE5IEBADQogICAgIGFyZ3MtPnNlZy5jb2RlMzIu YmFzZSA9ICh1X2ludCkmYmlvczE2X2ptcCAmIFBHX0ZSQU1FOw0KICAgICBh cmdzLT5zZWcuY29kZTMyLmxpbWl0ID0gMHhmZmZmOwkNCiANCi0gICAgcHRk ID0gKHBkX2VudHJ5X3QgKilyY3IzKCk7DQotI2lmZGVmIFBBRQ0KLSAgICBw dGQgPSAocGRfZW50cnlfdCAqKSgqcHRkICYgUEdfRlJBTUUpOw0KLSNlbmRp Zg0KKyAgICBwdGQgPSAodV9pbnQgKilyY3IzKCk7DQogICAgIGlmIChwdGQg PT0gSWRsZVBURCkgew0KIAkvKg0KIAkgKiBubyBwYWdlIHRhYmxlLCBzbyBj cmVhdGUgb25lIGFuZCBpbnN0YWxsIGl0Lg0KIAkgKi8NCi0JcHRlID0gKHB0 X2VudHJ5X3QgKiltYWxsb2MoUEFHRV9TSVpFLCBNX1RFTVAsIE1fV0FJVE9L KTsNCi0JcHRkID0gKHBkX2VudHJ5X3QgKikoS0VSTkJBU0UgKyBJZGxlUFRE KTsNCisJcHRlID0gKHVfaW50ICopbWFsbG9jKFBBR0VfU0laRSwgTV9URU1Q LCBNX1dBSVRPSyk7DQorCXB0ZCA9ICh1X2ludCAqKSgodV9pbnQpcHRkICsg S0VSTkJBU0UpOw0KIAkqcHRkID0gdnRvcGh5cyhwdGUpIHwgUEdfUlcgfCBQ R19WOw0KICAgICB9IGVsc2Ugew0KIAkvKg0KIAkgKiB0aGlzIGlzIGEgdXNl ci1sZXZlbCBwYWdlIHRhYmxlIA0KIAkgKi8NCi0JcHRlID0gUFRtYXA7DQor CXB0ZSA9ICh1X2ludCAqKSZQVG1hcDsNCiAgICAgfQ0KICAgICAvKg0KICAg ICAgKiBpbnN0YWxsIHBvaW50ZXIgdG8gcGFnZSAwLiAgd2UgZG9uJ3QgbmVl ZCB0byBmbHVzaCB0aGUgdGxiLA0KQEAgLTQ0NCw3ICs0NDAsNyBAQA0KIA0K ICAgICBpID0gYmlvczE2X2NhbGwoJmFyZ3MtPnIsIHN0YWNrX3RvcCk7DQog ICAgIA0KLSAgICBpZiAocHRlID09IFBUbWFwKSB7DQorICAgIGlmIChwdGUg PT0gKHVfaW50ICopJlBUbWFwKSB7DQogCSpwdGUgPSAwOwkJCS8qIHJlbW92 ZSBlbnRyeSAqLw0KICAgICB9IGVsc2Ugew0KIAkqcHRkID0gMDsJCQkvKiBy ZW1vdmUgcGFnZSB0YWJsZSAqLw0KT25seSBpbiAvdXNyL3NyYy9zeXMvaTM4 Ni9pMzg2OiBiaW9zLmMub3JpZw0KT25seSBpbiAvdXNyL3NyYy9zeXMvaTM4 Ni9pMzg2OiBiaW9zLmMucmVqDQpPbmx5IGluIC91c3Ivc3JjL3N5cy9pMzg2 L2kzODY6IGJsYWgucGF0Y2gNCmRpZmYgLXUgLXIgL3Vzci9zcmMvc3lzLm9s ZC9pMzg2L2kzODYvZGJfaW50ZXJmYWNlLmMgL3Vzci9zcmMvc3lzL2kzODYv aTM4Ni9kYl9pbnRlcmZhY2UuYw0KLS0tIC91c3Ivc3JjL3N5cy5vbGQvaTM4 Ni9pMzg2L2RiX2ludGVyZmFjZS5jCVRodSBBdWcgMjEgMTg6MzU6MzMgMjAw Mw0KKysrIC91c3Ivc3JjL3N5cy9pMzg2L2kzODYvZGJfaW50ZXJmYWNlLmMJ RnJpIEF1ZyAyMiAwMjoxNToyNCAyMDAzDQpAQCAtMjUxLDcgKzI1MSw3IEBA DQogCWlmIChhZGRyID4gdHJ1bmNfcGFnZSgodm1fb2Zmc2V0X3QpYnRleHQp IC0gc2l6ZSAmJg0KIAkgICAgYWRkciA8IHJvdW5kX3BhZ2UoKHZtX29mZnNl dF90KWV0ZXh0KSkgew0KIA0KLQkgICAgcHRlcDAgPSB2dG9wdGUoYWRkcik7 DQorCSAgICBwdGVwMCA9IHBtYXBfcHRlKGtlcm5lbF9wbWFwLCBhZGRyKTsN CiAJICAgIG9sZG1hcDAgPSAqcHRlcDA7DQogCSAgICAqcHRlcDAgfD0gUEdf Ulc7DQogDQpAQCAtMjU5LDE0ICsyNTksMTQgQEANCiAJICAgIGlmICgoKnB0 ZXAwICYgUEdfUFMpID09IDApIHsNCiAJICAgIAlhZGRyMSA9IHRydW5jX3Bh Z2UoYWRkciArIHNpemUgLSAxKTsNCiAJICAgIAlpZiAodHJ1bmNfcGFnZShh ZGRyKSAhPSBhZGRyMSkgew0KLQkJICAgIHB0ZXAxID0gdnRvcHRlKGFkZHIx KTsNCisJCSAgICBwdGVwMSA9IHBtYXBfcHRlKGtlcm5lbF9wbWFwLCBhZGRy MSk7DQogCQkgICAgb2xkbWFwMSA9ICpwdGVwMTsNCiAJCSAgICAqcHRlcDEg fD0gUEdfUlc7DQogCSAgICAJfQ0KIAkgICAgfSBlbHNlIHsNCiAJCWFkZHIx ID0gdHJ1bmNfNG1wYWdlKGFkZHIgKyBzaXplIC0gMSk7DQogCQlpZiAodHJ1 bmNfNG1wYWdlKGFkZHIpICE9IGFkZHIxKSB7DQotCQkgICAgcHRlcDEgPSB2 dG9wdGUoYWRkcjEpOw0KKwkJICAgIHB0ZXAxID0gcG1hcF9wdGUoa2VybmVs X3BtYXAsIGFkZHIxKTsNCiAJCSAgICBvbGRtYXAxID0gKnB0ZXAxOw0KIAkJ ICAgICpwdGVwMSB8PSBQR19SVzsNCiAJCX0NCk9ubHkgaW4gL3Vzci9zcmMv c3lzL2kzODYvaTM4NjogZGJfaW50ZXJmYWNlLmMub3JpZw0KT25seSBpbiAv dXNyL3NyYy9zeXMvaTM4Ni9pMzg2OiBkYl9pbnRlcmZhY2UuYy5yZWoNCmRp ZmYgLXUgLXIgL3Vzci9zcmMvc3lzLm9sZC9pMzg2L2kzODYvZ2VuYXNzeW0u YyAvdXNyL3NyYy9zeXMvaTM4Ni9pMzg2L2dlbmFzc3ltLmMNCi0tLSAvdXNy L3NyYy9zeXMub2xkL2kzODYvaTM4Ni9nZW5hc3N5bS5jCVRodSBBdWcgMjEg MTg6MzU6MzMgMjAwMw0KKysrIC91c3Ivc3JjL3N5cy9pMzg2L2kzODYvZ2Vu YXNzeW0uYwlGcmkgQXVnIDIyIDAyOjE1OjAyIDIwMDMNCkBAIC05NiwxMCAr OTYsNiBAQA0KIEFTU1lNKE5QREVQRywgTlBERVBHKTsNCiBBU1NZTShQREVT SVpFLCBQREVTSVpFKTsNCiBBU1NZTShQVEVTSVpFLCBQVEVTSVpFKTsNCi1B U1NZTShQREVTSElGVCwgUERFU0hJRlQpOw0KLUFTU1lNKFBURVNISUZULCBQ VEVTSElGVCk7DQotQVNTWU0oTlBHUFRELCBOUEdQVEQpOw0KLUFTU1lNKE5Q REVQVEQsIE5QREVQVEQpOw0KIEFTU1lNKFBBR0VfU0hJRlQsIFBBR0VfU0hJ RlQpOw0KIEFTU1lNKFBBR0VfTUFTSywgUEFHRV9NQVNLKTsNCiBBU1NZTShQ RFJTSElGVCwgUERSU0hJRlQpOw0KT25seSBpbiAvdXNyL3NyYy9zeXMvaTM4 Ni9pMzg2OiBnZW5hc3N5bS5jLm9yaWcNCk9ubHkgaW4gL3Vzci9zcmMvc3lz L2kzODYvaTM4NjogZ2VuYXNzeW0uYy5yZWoNCmRpZmYgLXUgLXIgL3Vzci9z cmMvc3lzLm9sZC9pMzg2L2kzODYvbG9jb3JlLnMgL3Vzci9zcmMvc3lzL2kz ODYvaTM4Ni9sb2NvcmUucw0KLS0tIC91c3Ivc3JjL3N5cy5vbGQvaTM4Ni9p Mzg2L2xvY29yZS5zCVRodSBBdWcgMjEgMTg6MzU6MzMgMjAwMw0KKysrIC91 c3Ivc3JjL3N5cy9pMzg2L2kzODYvbG9jb3JlLnMJRnJpIEF1ZyAyMiAwMjox NDo0MiAyMDAzDQpAQCAtNzUsNiArNzUsMTUgQEANCiAJLnNldAlfUFREcGRl LF9QVEQgKyAoUFREUFRESSAqIFBERVNJWkUpDQogDQogLyoNCisgKiBBUFRt YXAsIEFQVEQgaXMgdGhlIGFsdGVybmF0ZSByZWN1cnNpdmUgcGFnZW1hcC4N CisgKiBJdCdzIHVzZWQgd2hlbiBtb2RpZnlpbmcgYW5vdGhlciBwcm9jZXNz J3MgcGFnZSB0YWJsZXMuDQorICovDQorCS5nbG9ibAlfQVBUbWFwLF9BUFRE LF9BUFREcGRlDQorCS5zZXQJX0FQVG1hcCxBUFREUFRESSA8PCBQRFJTSElG VA0KKwkuc2V0CV9BUFRELF9BUFRtYXAgKyAoQVBURFBUREkgKiBQQUdFX1NJ WkUpDQorCS5zZXQJX0FQVERwZGUsX1BURCArIChBUFREUFRESSAqIFBERVNJ WkUpDQorDQorLyoNCiAgKiBDb21waWxlZCBLRVJOQkFTRSBsb2NhdGlvbg0K ICAqLw0KIAkuZ2xvYmwJX2tlcm5iYXNlDQpAQCAtMTAzLDE2ICsxMTIsMTUg QEANCiBfY3B1X3ZlbmRvcjoJLnNwYWNlCTIwCQkJLyogQ1BVIG9yaWdpbiBj b2RlICovDQogX2Jvb3RpbmZvOgkuc3BhY2UJQk9PVElORk9fU0laRQkJLyog Ym9vdGluZm8gdGhhdCB3ZSBjYW4gaGFuZGxlICovDQogDQotCSAgICAuZ2xv YmwJX0tFUk5lbmQNCiBfS0VSTmVuZDoJLmxvbmcJMAkJCS8qIHBoeXMgYWRk ciBlbmQgb2Yga2VybmVsIChqdXN0IGFmdGVyIGJzcykgKi8NCiBwaHlzZnJl ZToJLmxvbmcJMAkJCS8qIHBoeXMgYWRkciBvZiBuZXh0IGZyZWUgcGFnZSAq Lw0KIA0KICNpZmRlZiBTTVANCi0JICAgIC5nbG9ibAlfY3B1MHBydnBhZ2UN CisJCS5nbG9ibAlfY3B1MHBydnBhZ2UNCiBjcHUwcHA6CQkubG9uZwkwCQkJ LyogcGh5cyBhZGRyIGNwdTAgcHJpdmF0ZSBwZyAqLw0KIF9jcHUwcHJ2cGFn ZToJLmxvbmcJMAkJCS8qIHJlbG9jYXRlZCB2ZXJzaW9uICovDQogDQotCSAg ICAuZ2xvYmwJX1NNUHB0DQorCQkuZ2xvYmwJX1NNUHB0DQogU01QcHRwYToJ LmxvbmcJMAkJCS8qIHBoeXMgYWRkciBTTVAgcGFnZSB0YWJsZSAqLw0KIF9T TVBwdDoJCS5sb25nCTAJCQkvKiByZWxvY2F0ZWQgdmVyc2lvbiAqLw0KICNl bmRpZiAvKiBTTVAgKi8NCkBAIC0xMjAsMTIgKzEyOCw2IEBADQogCS5nbG9i bAlfSWRsZVBURA0KIF9JZGxlUFREOgkubG9uZwkwCQkJLyogcGh5cyBhZGRy IG9mIGtlcm5lbCBQVEQgKi8NCiANCi0jaWZkZWYgUEFFDQotCS5nbG9ibAlf SWRsZVBEUFQNCi0JLnAyYWxpZ24gNQ0KLV9JZGxlUERQVDoJLnNwYWNlCTMy DQotI2VuZGlmDQotDQogI2lmZGVmIFNNUA0KIAkuZ2xvYmwJX0tQVHBoeXMN CiAjZW5kaWYNCkBAIC0xODEsMTMgKzE4MywxMyBAQA0KICAqCXByb3QgPSBw cm90ZWN0aW9uIGJpdHMNCiAgKi8NCiAjZGVmaW5lCWZpbGxrcHQoYmFzZSwg cHJvdCkJCSAgXA0KLQlzaGxsCSRQVEVTSElGVCwlZWJ4CQk7IFwNCisJc2hs bAkkMiwlZWJ4CQkJOyBcDQogCWFkZGwJYmFzZSwlZWJ4CQk7IFwNCiAJb3Js CSRQR19WLCVlYXgJCTsgXA0KIAlvcmwJcHJvdCwlZWF4CQk7IFwNCiAxOglt b3ZsCSVlYXgsKCVlYngpCQk7IFwNCiAJYWRkbAkkUEFHRV9TSVpFLCVlYXgJ CTsgLyogaW5jcmVtZW50IHBoeXNpY2FsIGFkZHJlc3MgKi8gXA0KLQlhZGRs CSRQVEVTSVpFLCVlYngJCTsgLyogbmV4dCBwdGUgKi8gXA0KKwlhZGRsCSQ0 LCVlYngJCQk7IC8qIG5leHQgcHRlICovIFwNCiAJbG9vcAkxYg0KIA0KIC8q DQpAQCAtMzI4LDE0ICszMzAsNyBAQA0KICNlbmRpZg0KIA0KIC8qIE5vdyBl bmFibGUgcGFnaW5nICovDQotI2lmZGVmIFBBRQ0KLQltb3ZsCSVjcjQsJWVh eA0KLQlvcmwJJENSNF9QQUUsJWVheA0KLQltb3ZsCSVlYXgsJWNyNA0KLQlt b3ZsCSRSKF9JZGxlUERQVCksJWVheA0KLSNlbHNlDQotCW1vdmwJUihfSWRs ZVBURCksJWVheA0KLSNlbmRpZg0KKwltb3ZsCVIoX0lkbGVQVEQpLCAlZWF4 DQogCW1vdmwJJWVheCwlY3IzCQkJLyogbG9hZCBwdGQgYWRkciBpbnRvIG1t dSAqLw0KIAltb3ZsCSVjcjAsJWVheAkJCS8qIGdldCBjb250cm9sIHdvcmQg Ki8NCiAJb3JsCSRDUjBfUEV8Q1IwX1BHLCVlYXgJCS8qIGVuYWJsZSBwYWdp bmcgKi8NCkBAIC0zNTgsMTAgKzM1MywxMCBAQA0KIAkvKiBzZXQgdXAgYm9v dHN0cmFwIHN0YWNrICovDQogCW1vdmwJX3Byb2MwcGFkZHIsJWVzcAkvKiBs b2NhdGlvbiBvZiBpbi1rZXJuZWwgcGFnZXMgKi8NCiAJYWRkbAkkVVBBR0VT KlBBR0VfU0laRSwlZXNwCS8qIGJvb3RzdHJhcCBzdGFjayBlbmQgbG9jYXRp b24gKi8NCi0JeG9ybAklZWF4LCVlYXgJCS8qIG1hcmsgZW5kIG9mIGZyYW1l cyAqLw0KKwl4b3JsCSVlYXgsJWVheAkJCS8qIG1hcmsgZW5kIG9mIGZyYW1l cyAqLw0KIAltb3ZsCSVlYXgsJWVicA0KIAltb3ZsCV9wcm9jMHBhZGRyLCVl YXgNCi0JbW92bAklY3IzLCVlc2kNCisJbW92bAlfSWRsZVBURCwgJWVzaQ0K IAltb3ZsCSVlc2ksUENCX0NSMyglZWF4KQ0KIA0KIAl0ZXN0bAkkQ1BVSURf UEdFLCBSKF9jcHVfZmVhdHVyZSkNCkBAIC0zNzIsMTEgKzM2NywxMSBAQA0K IDE6DQogDQogCW1vdmwJcGh5c2ZyZWUsICVlc2kNCi0JcHVzaGwJJWVzaQkJ CS8qIHZhbHVlIG9mIGZpcnN0IGZvciBpbml0Mzg2KGZpcnN0KSAqLw0KLQlj YWxsCV9pbml0Mzg2CQkvKiB3aXJlIDM4NiBjaGlwIGZvciB1bml4IG9wZXJh dGlvbiAqLw0KKwlwdXNobAklZXNpCQkJCS8qIHZhbHVlIG9mIGZpcnN0IGZv ciBpbml0Mzg2KGZpcnN0KSAqLw0KKwljYWxsCV9pbml0Mzg2CQkJLyogd2ly ZSAzODYgY2hpcCBmb3IgdW5peCBvcGVyYXRpb24gKi8NCiAJcG9wbAklZXNp DQogDQotCWNhbGwJX21pX3N0YXJ0dXAJCS8qIGF1dG9jb25maWd1cmF0aW9u LCBtb3VudHJvb3QgZXRjICovDQorCWNhbGwJX21pX3N0YXJ0dXAJCQkvKiBh dXRvY29uZmlndXJhdGlvbiwgbW91bnRyb290IGV0YyAqLw0KIA0KIAlobHQJ CS8qIG5ldmVyIHJldHVybnMgdG8gaGVyZSAqLw0KIA0KQEAgLTc0Miw3ICs3 MzcsNyBAQA0KIAltb3ZsCSVlc2ksUihfS1BUcGh5cykNCiANCiAvKiBBbGxv Y2F0ZSBQYWdlIFRhYmxlIERpcmVjdG9yeSAqLw0KLQlBTExPQ1BBR0VTKE5Q R1BURCkNCisJQUxMT0NQQUdFUygxKQ0KIAltb3ZsCSVlc2ksUihfSWRsZVBU RCkNCiANCiAvKiBBbGxvY2F0ZSBVUEFHRVMgKi8NCkBAIC04MTIsNyArODA3 LDcgQEANCiANCiAvKiBNYXAgcGFnZSBkaXJlY3RvcnkuICovDQogCW1vdmwJ UihfSWRsZVBURCksICVlYXgNCi0JbW92bAkkTlBHUFRELCAlZWN4DQorCW1v dmwJJDEsICVlY3gNCiAJZmlsbGtwdHBoeXMoJFBHX1JXKQ0KIA0KIC8qIE1h cCBwcm9jMCdzIFVQQUdFUyBpbiB0aGUgcGh5c2ljYWwgd2F5IC4uLiAqLw0K QEAgLTg5MSwxNSArODg2LDkgQEANCiAvKiBpbnN0YWxsIGEgcGRlIHJlY3Vy c2l2ZWx5IG1hcHBpbmcgcGFnZSBkaXJlY3RvcnkgYXMgYSBwYWdlIHRhYmxl ICovDQogCW1vdmwJUihfSWRsZVBURCksICVlYXgNCiAJbW92bAkkUFREUFRE SSwgJWVieA0KLQltb3ZsCSROUEdQVEQsICVlY3gNCisJbW92bAkkMSwlZWN4 DQogCWZpbGxrcHQoUihfSWRsZVBURCksICRQR19SVykNCiANCi0jaWZkZWYg UEFFDQotCW1vdmwJUihfSWRsZVBURCksJWVheA0KLQl4b3JsCSVlYngsJWVi eA0KLQltb3ZsCSROUEdQVEQsJWVjeA0KLQlmaWxsa3B0KCRSKF9JZGxlUERQ VCksICQwKQ0KLSNlbmRpZg0KIAlyZXQNCiANCiAjaWZkZWYgQkRFX0RFQlVH R0VSDQpPbmx5IGluIC91c3Ivc3JjL3N5cy9pMzg2L2kzODY6IGxvY29yZS5z Lm9yaWcNCk9ubHkgaW4gL3Vzci9zcmMvc3lzL2kzODYvaTM4NjogbG9jb3Jl LnMucmVqDQpkaWZmIC11IC1yIC91c3Ivc3JjL3N5cy5vbGQvaTM4Ni9pMzg2 L21hY2hkZXAuYyAvdXNyL3NyYy9zeXMvaTM4Ni9pMzg2L21hY2hkZXAuYw0K LS0tIC91c3Ivc3JjL3N5cy5vbGQvaTM4Ni9pMzg2L21hY2hkZXAuYwlUaHUg QXVnIDIxIDE4OjM1OjMzIDIwMDMNCisrKyAvdXNyL3NyYy9zeXMvaTM4Ni9p Mzg2L21hY2hkZXAuYwlGcmkgQXVnIDIyIDAyOjM3OjE2IDIwMDMNCkBAIC0y NzEsOCArMjcxLDcgQEANCiAjaWZkZWYgUEVSRk1PTg0KIAlwZXJmbW9uX2lu aXQoKTsNCiAjZW5kaWYNCi0JcHJpbnRmKCJyZWFsIG1lbW9yeSAgPSAlbGx1 ICglbGx1SyBieXRlcylcbiIsDQotCSAgICBwdG9hKCh1X2ludDY0X3QpTWF4 bWVtKSwgcHRvYSgodV9pbnQ2NF90KU1heG1lbSkgLyAxMDI0KTsNCisJcHJp bnRmKCJyZWFsIG1lbW9yeSAgPSAldSAoJXVLIGJ5dGVzKVxuIiwgcHRvYShN YXhtZW0pLCBwdG9hKE1heG1lbSkgLyAxMDI0KTsNCiAJLyoNCiAJICogRGlz cGxheSBhbnkgaG9sZXMgYWZ0ZXIgdGhlIGZpcnN0IGNodW5rIG9mIGV4dGVu ZGVkIG1lbW9yeS4NCiAJICovDQpAQCAtMjgxLDE0ICsyODAsMTEgQEANCiAN CiAJCXByaW50ZigiUGh5c2ljYWwgbWVtb3J5IGNodW5rKHMpOlxuIik7DQog CQlmb3IgKGluZHggPSAwOyBwaHlzX2F2YWlsW2luZHggKyAxXSAhPSAwOyBp bmR4ICs9IDIpIHsNCi0JCQl2bV9wYWRkcl90IHNpemUxOw0KKwkJCXVuc2ln bmVkIGludCBzaXplMSA9IHBoeXNfYXZhaWxbaW5keCArIDFdIC0gcGh5c19h dmFpbFtpbmR4XTsNCiANCi0JCQlzaXplMSA9IHBoeXNfYXZhaWxbaW5keCAr IDFdIC0gcGh5c19hdmFpbFtpbmR4XTsNCi0JCQlwcmludGYoIjB4JTA5bGx4 IC0gMHglMDlsbHgsICVsbHUgYnl0ZXMgKCVsbHUgcGFnZXMpXG4iLA0KLQkJ CSAgICAodV9pbnQ2NF90KXBoeXNfYXZhaWxbaW5keF0sDQotCQkJICAgICh1 X2ludDY0X3QpcGh5c19hdmFpbFtpbmR4ICsgMV0gLSAxLA0KLQkJCSAgICAo dV9pbnQ2NF90KXNpemUxLA0KLQkJCSAgICAodV9pbnQ2NF90KXNpemUxIC8g UEFHRV9TSVpFKTsNCisJCQlwcmludGYoIjB4JTA4eCAtIDB4JTA4eCwgJXUg Ynl0ZXMgKCV1IHBhZ2VzKVxuIiwNCisJCQkgICAgcGh5c19hdmFpbFtpbmR4 XSwgcGh5c19hdmFpbFtpbmR4ICsgMV0gLSAxLCBzaXplMSwNCisJCQkgICAg c2l6ZTEgLyBQQUdFX1NJWkUpOw0KIAkJfQ0KIAl9DQogDQpAQCAtNDM5LDkg KzQzNSw4IEBADQogCWNuaW5pdCgpOwkJLyogdGhlIHByZWZlcnJlZCBjb25z b2xlIG1heSBoYXZlIGNoYW5nZWQgKi8NCiAjZW5kaWYNCiANCi0JcHJpbnRm KCJhdmFpbCBtZW1vcnkgPSAlbGx1ICglbGx1SyBieXRlcylcbiIsDQotCSAg ICBwdG9hKCh1X2ludDY0X3QpY250LnZfZnJlZV9jb3VudCksDQotCSAgICBw dG9hKCh1X2ludDY0X3QpY250LnZfZnJlZV9jb3VudCkgLyAxMDI0KTsNCisJ cHJpbnRmKCJhdmFpbCBtZW1vcnkgPSAldSAoJXVLIGJ5dGVzKVxuIiwgcHRv YShjbnQudl9mcmVlX2NvdW50KSwNCisJICAgIHB0b2EoY250LnZfZnJlZV9j b3VudCkgLyAxMDI0KTsNCiANCiAJLyoNCiAJICogU2V0IHVwIGJ1ZmZlcnMs IHNvIHRoZXkgY2FuIGJlIHVzZWQgdG8gcmVhZCBkaXNrIGxhYmVscy4NCkBA IC0xNDIyLDggKzE0MTcsNiBAQA0KICAqDQogICogVG90YWwgbWVtb3J5IHNp emUgbWF5IGJlIHNldCBieSB0aGUga2VybmVsIGVudmlyb25tZW50IHZhcmlh YmxlDQogICogaHcucGh5c21lbSBvciB0aGUgY29tcGlsZS10aW1lIGRlZmlu ZSBNQVhNRU0uDQotICoNCi0gKiBYWFggZmlyc3Qgc2hvdWxkIGJlIHZtX3Bh ZGRyX3QuDQogICovDQogc3RhdGljIHZvaWQNCiBnZXRtZW1zaXplKGludCBm aXJzdCkNCkBAIC0xNDMzLDggKzE0MjYsOCBAQA0KIAl1X2ludCBiYXNlbWVt LCBleHRtZW07DQogCXN0cnVjdCB2bTg2ZnJhbWUgdm1mOw0KIAlzdHJ1Y3Qg dm04NmNvbnRleHQgdm1jOw0KLQl2bV9wYWRkcl90IHBhLCBwaHlzbWFwW1BI WVNNQVBfU0laRV07DQotCXB0X2VudHJ5X3QgKnB0ZTsNCisJdm1fb2Zmc2V0 X3QgcGEsIHBoeXNtYXBbUEhZU01BUF9TSVpFXTsNCisJcHRfZW50cnlfdCBw dGU7DQogCWNvbnN0IGNoYXIgKmNwOw0KIAlzdHJ1Y3Qgew0KIAkJdV9pbnQ2 NF90IGJhc2U7DQpAQCAtMTQ5MCw3ICsxNDgzLDcgQEANCiAJICovDQogCWZv ciAocGEgPSB0cnVuY19wYWdlKGJhc2VtZW0gKiAxMDI0KTsNCiAJICAgICBw YSA8IElTQV9IT0xFX1NUQVJUOyBwYSArPSBQQUdFX1NJWkUpIHsNCi0JCXB0 ZSA9IHZ0b3B0ZShwYSArIEtFUk5CQVNFKTsNCisJCXB0ZSA9IChwdF9lbnRy eV90KXZ0b3B0ZShwYSArIEtFUk5CQVNFKTsNCiAJCSpwdGUgPSBwYSB8IFBH X1JXIHwgUEdfVjsNCiAJfQ0KIA0KQEAgLTE0OTgsNyArMTQ5MSw3IEBADQog CSAqIGlmIGJhc2VtZW0gIT0gNjQwLCBtYXAgcGFnZXMgci93IGludG8gdm04 NiBwYWdlIHRhYmxlIHNvIA0KIAkgKiB0aGF0IHRoZSBiaW9zIGNhbiBzY3Jp YmJsZSBvbiBpdC4NCiAJICovDQotCXB0ZSA9IChwdF9lbnRyeV90ICopdm04 NnBhZGRyOw0KKwlwdGUgPSAocHRfZW50cnlfdCl2bTg2cGFkZHI7DQogCWZv ciAoaSA9IGJhc2VtZW0gLyA0OyBpIDwgMTYwOyBpKyspDQogCQlwdGVbaV0g PSAoaSA8PCBQQUdFX1NISUZUKSB8IFBHX1YgfCBQR19SVyB8IFBHX1U7DQog DQpAQCAtMTUwNyw3ICsxNTAwLDcgQEANCiAJICogbWFwIHBhZ2UgMSBSL1cg aW50byB0aGUga2VybmVsIHBhZ2UgdGFibGUgc28gd2UgY2FuIHVzZSBpdA0K IAkgKiBhcyBhIGJ1ZmZlci4gIFRoZSBrZXJuZWwgd2lsbCB1bm1hcCB0aGlz IHBhZ2UgbGF0ZXIuDQogCSAqLw0KLQlwdGUgPSB2dG9wdGUoS0VSTkJBU0Ug KyAoMSA8PCBQQUdFX1NISUZUKSk7DQorCXB0ZSA9IChwdF9lbnRyeV90KXZ0 b3B0ZShLRVJOQkFTRSArICgxIDw8IFBBR0VfU0hJRlQpKTsNCiAJKnB0ZSA9 ICgxIDw8IFBBR0VfU0hJRlQpIHwgUEdfUlcgfCBQR19WOw0KIA0KIAkvKg0K QEAgLTE1MzAsOCArMTUyMywxMiBAQA0KIAkJaWYgKGkgfHwgdm1mLnZtZl9l YXggIT0gU01BUF9TSUcpDQogCQkJYnJlYWs7DQogCQlpZiAoYm9vdGhvd3Rv ICYgUkJfVkVSQk9TRSkNCi0JCQlwcmludGYoIlNNQVAgdHlwZT0lMDJ4IGJh c2U9JTAxNmxseCBsZW49JTAxNmxseFxuIiwNCi0JCQkgICAgc21hcC0+dHlw ZSwgc21hcC0+YmFzZSwgc21hcC0+bGVuZ3RoKTsNCisJCQlwcmludGYoIlNN QVAgdHlwZT0lMDJ4IGJhc2U9JTA4eCAlMDh4IGxlbj0lMDh4ICUwOHhcbiIs DQorCQkJCXNtYXAtPnR5cGUsDQorCQkJCSoodV9pbnQzMl90ICopKChjaGFy ICopJnNtYXAtPmJhc2UgKyA0KSwNCisJCQkJKHVfaW50MzJfdClzbWFwLT5i YXNlLA0KKwkJCQkqKHVfaW50MzJfdCAqKSgoY2hhciAqKSZzbWFwLT5sZW5n dGggKyA0KSwNCisJCQkJKHVfaW50MzJfdClzbWFwLT5sZW5ndGgpOw0KIA0K IAkJaWYgKHNtYXAtPnR5cGUgIT0gMHgwMSkNCiAJCQlnb3RvIG5leHRfcnVu Ow0KQEAgLTE1MzksMTMgKzE1MzYsMTEgQEANCiAJCWlmIChzbWFwLT5sZW5n dGggPT0gMCkNCiAJCQlnb3RvIG5leHRfcnVuOw0KIA0KLSNpZm5kZWYgUEFF DQogCQlpZiAoc21hcC0+YmFzZSA+PSAweGZmZmZmZmZmKSB7DQogCQkJcHJp bnRmKCIldUsgb2YgbWVtb3J5IGFib3ZlIDRHQiBpZ25vcmVkXG4iLA0KIAkJ CSAgICAodV9pbnQpKHNtYXAtPmxlbmd0aCAvIDEwMjQpKTsNCiAJCQlnb3Rv IG5leHRfcnVuOw0KIAkJfQ0KLSNlbmRpZg0KIA0KIAkJZm9yIChpID0gMDsg aSA8PSBwaHlzbWFwX2lkeDsgaSArPSAyKSB7DQogCQkJaWYgKHNtYXAtPmJh c2UgPCBwaHlzbWFwW2kgKyAxXSkgew0KQEAgLTE1OTUsMTEgKzE1OTAsMTEg QEANCiANCiAJCWZvciAocGEgPSB0cnVuY19wYWdlKGJhc2VtZW0gKiAxMDI0 KTsNCiAJCSAgICAgcGEgPCBJU0FfSE9MRV9TVEFSVDsgcGEgKz0gUEFHRV9T SVpFKSB7DQotCQkJcHRlID0gdnRvcHRlKHBhICsgS0VSTkJBU0UpOw0KKwkJ CXB0ZSA9IChwdF9lbnRyeV90KXZ0b3B0ZShwYSArIEtFUk5CQVNFKTsNCiAJ CQkqcHRlID0gcGEgfCBQR19SVyB8IFBHX1Y7DQogCQl9DQogDQotCQlwdGUg PSAocHRfZW50cnlfdCAqKXZtODZwYWRkcjsNCisJCXB0ZSA9IChwdF9lbnRy eV90KXZtODZwYWRkcjsNCiAJCWZvciAoaSA9IGJhc2VtZW0gLyA0OyBpIDwg MTYwOyBpKyspDQogCQkJcHRlW2ldID0gKGkgPDwgUEFHRV9TSElGVCkgfCBQ R19WIHwgUEdfUlcgfCBQR19VOw0KIAl9DQpAQCAtMTcxMiw3ICsxNzA3LDEw IEBADQogCSAqIGV4dGVuZCB0aGUgbGFzdCBtZW1vcnkgc2VnbWVudCB0byB0 aGUgbmV3IGxpbWl0Lg0KIAkgKi8gDQogCWlmIChhdG9wKHBoeXNtYXBbcGh5 c21hcF9pZHggKyAxXSkgPCBNYXhtZW0pDQotCQlwaHlzbWFwW3BoeXNtYXBf aWR4ICsgMV0gPSBwdG9hKCh2bV9wYWRkcl90KU1heG1lbSk7DQorCQlwaHlz bWFwW3BoeXNtYXBfaWR4ICsgMV0gPSBwdG9hKE1heG1lbSk7DQorDQorCS8q IGNhbGwgcG1hcCBpbml0aWFsaXphdGlvbiB0byBtYWtlIG5ldyBrZXJuZWwg YWRkcmVzcyBzcGFjZSAqLw0KKwlwbWFwX2Jvb3RzdHJhcChmaXJzdCwgMCk7 DQogDQogCS8qDQogCSAqIFNpemUgdXAgZWFjaCBhdmFpbGFibGUgY2h1bmsg b2YgcGh5c2ljYWwgbWVtb3J5Lg0KQEAgLTE3MjEsMjEgKzE3MTksMjkgQEAN CiAJcGFfaW5keCA9IDA7DQogCXBoeXNfYXZhaWxbcGFfaW5keCsrXSA9IHBo eXNtYXBbMF07DQogCXBoeXNfYXZhaWxbcGFfaW5keF0gPSBwaHlzbWFwWzBd Ow0KLQlwdGUgPSB2dG9wdGUoS0VSTkJBU0UgKyBQQUdFX1NJWkUpOw0KKyNp ZiAwDQorCXB0ZSA9IChwdF9lbnRyeV90KXZ0b3B0ZShLRVJOQkFTRSk7DQor I2Vsc2UNCisJcHRlID0gKHB0X2VudHJ5X3QpQ01BUDE7DQorI2VuZGlmDQog DQogCS8qDQogCSAqIHBoeXNtYXAgaXMgaW4gYnl0ZXMsIHNvIHdoZW4gY29u dmVydGluZyB0byBwYWdlIGJvdW5kYXJpZXMsDQogCSAqIHJvdW5kIHVwIHRo ZSBzdGFydCBhZGRyZXNzIGFuZCByb3VuZCBkb3duIHRoZSBlbmQgYWRkcmVz cy4NCiAJICovDQogCWZvciAoaSA9IDA7IGkgPD0gcGh5c21hcF9pZHg7IGkg Kz0gMikgew0KLQkJdm1fcGFkZHJfdCBlbmQ7DQorCQl2bV9vZmZzZXRfdCBl bmQ7DQogDQotCQllbmQgPSBwdG9hKCh2bV9wYWRkcl90KU1heG1lbSk7DQor CQllbmQgPSBwdG9hKE1heG1lbSk7DQogCQlpZiAocGh5c21hcFtpICsgMV0g PCBlbmQpDQogCQkJZW5kID0gdHJ1bmNfcGFnZShwaHlzbWFwW2kgKyAxXSk7 DQogCQlmb3IgKHBhID0gcm91bmRfcGFnZShwaHlzbWFwW2ldKTsgcGEgPCBl bmQ7IHBhICs9IFBBR0VfU0laRSkgew0KIAkJCWludCB0bXAsIHBhZ2VfYmFk Ow0KLQkJCXZvbGF0aWxlIGludCAqcHRyID0gKGludCAqKShLRVJOQkFTRSAr IFBBR0VfU0laRSk7DQorI2lmIDANCisJCQlpbnQgKnB0ciA9IDA7DQorI2Vs c2UNCisJCQlpbnQgKnB0ciA9IChpbnQgKilDQUREUjE7DQorI2VuZGlmDQog DQogCQkJLyoNCiAJCQkgKiBibG9jayBvdXQga2VybmVsIG1lbW9yeSBhcyBu b3QgYXZhaWxhYmxlLg0KQEAgLTE3NTEsMzkgKzE3NTcsMzkgQEANCiAJCQkq cHRlID0gcGEgfCBQR19WIHwgUEdfUlcgfCBQR19OOw0KIAkJCWludmx0bGIo KTsNCiANCi0JCQl0bXAgPSAqcHRyOw0KKwkJCXRtcCA9ICooaW50ICopcHRy Ow0KIAkJCS8qDQogCQkJICogVGVzdCBmb3IgYWx0ZXJuYXRpbmcgMSdzIGFu ZCAwJ3MNCiAJCQkgKi8NCi0JCQkqcHRyID0gMHhhYWFhYWFhYTsNCi0JCQlp ZiAoKnB0ciAhPSAweGFhYWFhYWFhKSB7DQorCQkJKih2b2xhdGlsZSBpbnQg KilwdHIgPSAweGFhYWFhYWFhOw0KKwkJCWlmICgqKHZvbGF0aWxlIGludCAq KXB0ciAhPSAweGFhYWFhYWFhKSB7DQogCQkJCXBhZ2VfYmFkID0gVFJVRTsN CiAJCQl9DQogCQkJLyoNCiAJCQkgKiBUZXN0IGZvciBhbHRlcm5hdGluZyAw J3MgYW5kIDEncw0KIAkJCSAqLw0KLQkJCSpwdHIgPSAweDU1NTU1NTU1Ow0K LQkJCWlmICgqcHRyICE9IDB4NTU1NTU1NTUpIHsNCi0JCQkJcGFnZV9iYWQg PSBUUlVFOw0KKwkJCSoodm9sYXRpbGUgaW50ICopcHRyID0gMHg1NTU1NTU1 NTsNCisJCQlpZiAoKih2b2xhdGlsZSBpbnQgKilwdHIgIT0gMHg1NTU1NTU1 NSkgew0KKwkJCXBhZ2VfYmFkID0gVFJVRTsNCiAJCQl9DQogCQkJLyoNCiAJ CQkgKiBUZXN0IGZvciBhbGwgMSdzDQogCQkJICovDQotCQkJKnB0ciA9IDB4 ZmZmZmZmZmY7DQotCQkJaWYgKCpwdHIgIT0gMHhmZmZmZmZmZikgew0KKwkJ CSoodm9sYXRpbGUgaW50ICopcHRyID0gMHhmZmZmZmZmZjsNCisJCQlpZiAo Kih2b2xhdGlsZSBpbnQgKilwdHIgIT0gMHhmZmZmZmZmZikgew0KIAkJCQlw YWdlX2JhZCA9IFRSVUU7DQogCQkJfQ0KIAkJCS8qDQogCQkJICogVGVzdCBm b3IgYWxsIDAncw0KIAkJCSAqLw0KLQkJCSpwdHIgPSAweDA7DQotCQkJaWYg KCpwdHIgIT0gMHgwKSB7DQorCQkJKih2b2xhdGlsZSBpbnQgKilwdHIgPSAw eDA7DQorCQkJaWYgKCoodm9sYXRpbGUgaW50ICopcHRyICE9IDB4MCkgew0K IAkJCQlwYWdlX2JhZCA9IFRSVUU7DQogCQkJfQ0KIAkJCS8qDQogCQkJICog UmVzdG9yZSBvcmlnaW5hbCB2YWx1ZS4NCiAJCQkgKi8NCi0JCQkqcHRyID0g dG1wOw0KKwkJCSooaW50ICopcHRyID0gdG1wOw0KIA0KIAkJCS8qDQogCQkJ ICogQWRqdXN0IGFycmF5IG9mIHZhbGlkL2dvb2QgcGFnZXMuDQpAQCAtMTk5 NSwxMSArMjAwMSw3IEBADQogCSAgICBkYmxmYXVsdF90c3MudHNzX2VzcDIg PSAoaW50KSAmZGJsZmF1bHRfc3RhY2tbc2l6ZW9mKGRibGZhdWx0X3N0YWNr KV07DQogCWRibGZhdWx0X3Rzcy50c3Nfc3MgPSBkYmxmYXVsdF90c3MudHNz X3NzMCA9IGRibGZhdWx0X3Rzcy50c3Nfc3MxID0NCiAJICAgIGRibGZhdWx0 X3Rzcy50c3Nfc3MyID0gR1NFTChHREFUQV9TRUwsIFNFTF9LUEwpOw0KLSNp ZmRlZiBQQUUNCi0JZGJsZmF1bHRfdHNzLnRzc19jcjMgPSAoaW50KUlkbGVQ RFBUIC0gS0VSTkJBU0U7DQotI2Vsc2UNCiAJZGJsZmF1bHRfdHNzLnRzc19j cjMgPSAoaW50KUlkbGVQVEQ7DQotI2VuZGlmDQogCWRibGZhdWx0X3Rzcy50 c3NfZWlwID0gKGludCkgZGJsZmF1bHRfaGFuZGxlcjsNCiAJZGJsZmF1bHRf dHNzLnRzc19lZmxhZ3MgPSBQU0xfS0VSTkVMOw0KIAlkYmxmYXVsdF90c3Mu dHNzX2RzID0gZGJsZmF1bHRfdHNzLnRzc19lcyA9DQpAQCAtMjAxMCw3ICsy MDEyLDYgQEANCiANCiAJdm04Nl9pbml0aWFsaXplKCk7DQogCWdldG1lbXNp emUoZmlyc3QpOw0KLQlwbWFwX2Jvb3RzdHJhcChmaXJzdCwgMCk7DQogCWlu aXRfcGFyYW0yKHBoeXNtZW0pOw0KIA0KIAkvKiBub3cgcnVubmluZyBvbiBu ZXcgcGFnZSB0YWJsZXMsIGNvbmZpZ3VyZWQsYW5kIHUvaW9tIGlzIGFjY2Vz c2libGUgKi8NCkBAIC0yMDQ0LDExICsyMDQ1LDcgQEANCiANCiAJLyogc2V0 dXAgcHJvYyAwJ3MgcGNiICovDQogCXByb2MwLnBfYWRkci0+dV9wY2IucGNi X2ZsYWdzID0gMDsNCi0jaWZkZWYgUEFFDQotICAgICAgICBwcm9jMC5wX2Fk ZHItPnVfcGNiLnBjYl9jcjMgPSAoaW50KUlkbGVQRFBUIC0gS0VSTkJBU0U7 DQotI2Vsc2UNCi0gICAgICAgIHByb2MwLnBfYWRkci0+dV9wY2IucGNiX2Ny MyA9IChpbnQpSWRsZVBURDsNCi0jZW5kaWYNCisJcHJvYzAucF9hZGRyLT51 X3BjYi5wY2JfY3IzID0gKGludClJZGxlUFREOw0KICNpZmRlZiBTTVANCiAJ cHJvYzAucF9hZGRyLT51X3BjYi5wY2JfbXBuZXN0ID0gMTsNCiAjZW5kaWYN Ck9ubHkgaW4gL3Vzci9zcmMvc3lzL2kzODYvaTM4NjogbWFjaGRlcC5jLm9y aWcNCk9ubHkgaW4gL3Vzci9zcmMvc3lzL2kzODYvaTM4NjogbWFjaGRlcC5j LnJlag0KZGlmZiAtdSAtciAvdXNyL3NyYy9zeXMub2xkL2kzODYvaTM4Ni9t ZW0uYyAvdXNyL3NyYy9zeXMvaTM4Ni9pMzg2L21lbS5jDQotLS0gL3Vzci9z cmMvc3lzLm9sZC9pMzg2L2kzODYvbWVtLmMJVGh1IEF1ZyAyMSAxODozNToz MyAyMDAzDQorKysgL3Vzci9zcmMvc3lzL2kzODYvaTM4Ni9tZW0uYwlGcmkg QXVnIDIyIDAyOjEwOjQxIDIwMDMNCkBAIC0xNTksNyArMTU5LDcgQEANCiAJ aW50IGZsYWdzOw0KIHsNCiAJcmVnaXN0ZXIgaW50IG87DQotCXJlZ2lzdGVy IHVfaW50IGM7DQorCXJlZ2lzdGVyIHVfaW50IGMsIHY7DQogCXVfaW50IHBv b2xzaXplOw0KIAlyZWdpc3RlciBzdHJ1Y3QgaW92ZWMgKmlvdjsNCiAJaW50 IGVycm9yID0gMDsNCkBAIC0xNzgsOCArMTc4LDkgQEANCiANCiAvKiBtaW5v ciBkZXZpY2UgMCBpcyBwaHlzaWNhbCBtZW1vcnkgKi8NCiAJCWNhc2UgMDoN Ci0JCQlwbWFwX2tlbnRlcigodm1fb2Zmc2V0X3QpcHR2bW1hcCwgDQotCQkJ ICAgIHVpby0+dWlvX29mZnNldCAmIH5QQUdFX01BU0spOw0KKwkJCXYgPSB1 aW8tPnVpb19vZmZzZXQ7DQorCQkJdiAmPSB+UEFHRV9NQVNLOw0KKwkJCXBt YXBfa2VudGVyKCh2bV9vZmZzZXRfdClwdHZtbWFwLCB2KTsNCiAJCQlvID0g KGludCl1aW8tPnVpb19vZmZzZXQgJiBQQUdFX01BU0s7DQogCQkJYyA9ICh1 X2ludCkoUEFHRV9TSVpFIC0gKChpbnQpaW92LT5pb3ZfYmFzZSAmIFBBR0Vf TUFTSykpOw0KIAkJCWMgPSBtaW4oYywgKHVfaW50KShQQUdFX1NJWkUgLSBv KSk7DQpAQCAtMjAxLDYgKzIwMiw4IEBADQogCQkJZWFkZHIgPSByb3VuZF9w YWdlKHVpby0+dWlvX29mZnNldCArIGMpOw0KIA0KIAkJCWlmIChhZGRyIDwg KHZtX29mZnNldF90KVZBRERSKFBURFBUREksIDApKQ0KKwkJCQlyZXR1cm4g RUZBVUxUOw0KKwkJCWlmIChlYWRkciA+PSAodm1fb2Zmc2V0X3QpVkFERFIo QVBURFBUREksIDApKQ0KIAkJCQlyZXR1cm4gRUZBVUxUOw0KIAkJCWZvciAo OyBhZGRyIDwgZWFkZHI7IGFkZHIgKz0gUEFHRV9TSVpFKSANCiAJCQkJaWYg KHBtYXBfZXh0cmFjdChrZXJuZWxfcG1hcCwgYWRkcikgPT0gMCkNCk9ubHkg aW4gL3Vzci9zcmMvc3lzL2kzODYvaTM4NjogbWVtLmMub3JpZw0KT25seSBp biAvdXNyL3NyYy9zeXMvaTM4Ni9pMzg2OiBtZW0uYy5yZWoNCmRpZmYgLXUg LXIgL3Vzci9zcmMvc3lzLm9sZC9pMzg2L2kzODYvbXBfbWFjaGRlcC5jIC91 c3Ivc3JjL3N5cy9pMzg2L2kzODYvbXBfbWFjaGRlcC5jDQotLS0gL3Vzci9z cmMvc3lzLm9sZC9pMzg2L2kzODYvbXBfbWFjaGRlcC5jCVRodSBBdWcgMjEg MTg6MzU6MzMgMjAwMw0KKysrIC91c3Ivc3JjL3N5cy9pMzg2L2kzODYvbXBf bWFjaGRlcC5jCUZyaSBBdWcgMjIgMDI6MTA6MTYgMjAwMw0KQEAgLTIxNDcs MTEgKzIxNDcsMTEgQEANCiAJCWdkLT5nZF9wcnZfQ01BUDEgPSAmU01QcHRb cGcgKyAxXTsNCiAJCWdkLT5nZF9wcnZfQ01BUDIgPSAmU01QcHRbcGcgKyAy XTsNCiAJCWdkLT5nZF9wcnZfQ01BUDMgPSAmU01QcHRbcGcgKyAzXTsNCi0J CWdkLT5nZF9wcnZfUE1BUDEgPSAocGRfZW50cnlfdCAqKSZTTVBwdFtwZyAr IDRdOw0KKwkJZ2QtPmdkX3Bydl9QTUFQMSA9ICZTTVBwdFtwZyArIDRdOw0K IAkJZ2QtPmdkX3Bydl9DQUREUjEgPSBTTVBfcHJ2c3BhY2VbeF0uQ1BBR0Ux Ow0KIAkJZ2QtPmdkX3Bydl9DQUREUjIgPSBTTVBfcHJ2c3BhY2VbeF0uQ1BB R0UyOw0KIAkJZ2QtPmdkX3Bydl9DQUREUjMgPSBTTVBfcHJ2c3BhY2VbeF0u Q1BBR0UzOw0KLQkJZ2QtPmdkX3Bydl9QQUREUjEgPSAocHRfZW50cnlfdCAq KVNNUF9wcnZzcGFjZVt4XS5QUEFHRTE7DQorCQlnZC0+Z2RfcHJ2X1BBRERS MSA9ICh1bnNpZ25lZCAqKVNNUF9wcnZzcGFjZVt4XS5QUEFHRTE7DQogDQog CQkvKiBzZXR1cCBhIHZlY3RvciB0byBvdXIgYm9vdCBjb2RlICovDQogCQkq KCh2b2xhdGlsZSB1X3Nob3J0ICopIFdBUk1CT09UX09GRikgPSBXQVJNQk9P VF9UQVJHRVQ7DQpAQCAtMjUzNiw3ICsyNTM2LDcgQEANCiAJaWYgKGNwdWlk ICE9IGFwaWNfaWQpIHsNCiAJCXByaW50ZigiU01QOiBjcHVpZCA9ICVkXG4i LCBjcHVpZCk7DQogCQlwcmludGYoIlNNUDogYXBpY19pZCA9ICVkXG4iLCBh cGljX2lkKTsNCi0JCXByaW50ZigiUFREW01QUFRESV0gPSAlbGx4XG4iLCAo dV9pbnQ2NF90KVBURFtNUFBUREldKTsNCisJCXByaW50ZigiUFREW01QUFRE SV0gPSAlcFxuIiwgKHZvaWQgKilQVERbTVBQVERJXSk7DQogCQlwYW5pYygi Y3B1aWQgbWlzbWF0Y2ghIGJvb20hISIpOw0KIAl9DQogDQpPbmx5IGluIC91 c3Ivc3JjL3N5cy9pMzg2L2kzODY6IG1wX21hY2hkZXAuYy5vcmlnDQpPbmx5 IGluIC91c3Ivc3JjL3N5cy9pMzg2L2kzODY6IG1wX21hY2hkZXAuYy5yZWoN CmRpZmYgLXUgLXIgL3Vzci9zcmMvc3lzLm9sZC9pMzg2L2kzODYvbXBib290 LnMgL3Vzci9zcmMvc3lzL2kzODYvaTM4Ni9tcGJvb3Qucw0KLS0tIC91c3Iv c3JjL3N5cy5vbGQvaTM4Ni9pMzg2L21wYm9vdC5zCVRodSBBdWcgMjEgMTg6 MzU6MzMgMjAwMw0KKysrIC91c3Ivc3JjL3N5cy9pMzg2L2kzODYvbXBib290 LnMJRnJpIEF1ZyAyMiAwMjowOToyOCAyMDAzDQpAQCAtNDAsOCArNDAsNiBA QA0KIA0KICNpbmNsdWRlICJhc3N5bS5zIg0KIA0KLSNkZWZpbmUJUih4KQko KHgpLUtFUk5CQVNFKQ0KLQ0KIC8qDQogICogdGhpcyBjb2RlIE1VU1QgYmUg ZW5hYmxlZCBoZXJlIGFuZCBpbiBtcF9tYWNoZGVwLmMNCiAgKiBpdCBmb2xs b3dzIHRoZSB2ZXJ5IGVhcmx5IHN0YWdlcyBvZiBBUCBib290IGJ5IHBsYWNp bmcgdmFsdWVzIGluIENNT1MgcmFtLg0KQEAgLTc2LDE0ICs3NCw3IEBADQog Tk9OX0dQUk9GX0VOVFJZKE1QZW50cnkpDQogCUNIRUNLUE9JTlQoMHgzNiwg MykNCiAJLyogTm93IGVuYWJsZSBwYWdpbmcgbW9kZSAqLw0KLSNpZmRlZiBQ QUUNCi0JbW92bAklY3I0LCVlYXgNCi0Jb3JsCSRDUjRfUEFFLCVlYXgNCi0J bW92bAklZWF4LCVjcjQNCi0JbW92bAkkUihfSWRsZVBEUFQpLCVlYXgNCi0j ZWxzZQ0KLQltb3ZsCVIoX0lkbGVQVEQpLCVlYXgNCi0jZW5kaWYNCisJbW92 bAlfSWRsZVBURC1LRVJOQkFTRSwgJWVheA0KIAltb3ZsCSVlYXgsJWNyMwkN CiAJbW92bAklY3IwLCVlYXgNCiAJb3JsCSRDUjBfUEV8Q1IwX1BHLCVlYXgJ CS8qIGVuYWJsZSBwYWdpbmcgKi8NCk9ubHkgaW4gL3Vzci9zcmMvc3lzL2kz ODYvaTM4NjogbXBib290LnMub3JpZw0KT25seSBpbiAvdXNyL3NyYy9zeXMv aTM4Ni9pMzg2OiBtcGJvb3Qucy5yZWoNCmRpZmYgLXUgLXIgL3Vzci9zcmMv c3lzLm9sZC9pMzg2L2kzODYvcG1hcC5jIC91c3Ivc3JjL3N5cy9pMzg2L2kz ODYvcG1hcC5jDQotLS0gL3Vzci9zcmMvc3lzLm9sZC9pMzg2L2kzODYvcG1h cC5jCVRodSBBdWcgMjEgMTg6MzU6MzQgMjAwMw0KKysrIC91c3Ivc3JjL3N5 cy9pMzg2L2kzODYvcG1hcC5jCVdlZCBNYXIgIDYgMTY6NDg6NTMgMjAwMg0K QEAgLTM5LDM5ICszOSw3IEBADQogICogU1VDSCBEQU1BR0UuDQogICoNCiAg Kglmcm9tOglAKCMpcG1hcC5jCTcuNyAoQmVya2VsZXkpCTUvMTIvOTENCi0g KiAkRnJlZUJTRDogc3JjL3N5cy9pMzg2L2kzODYvcG1hcC5jLHYgMS4yNTAu Mi4xOSAyMDAzLzA4LzA5IDE2OjIxOjE4IGx1b3FpIEV4cCAkDQotICovDQot DQotLyotDQotICogQ29weXJpZ2h0IChjKSAyMDAzIE5ldHdvcmtzIEFzc29j aWF0ZXMgVGVjaG5vbG9neSwgSW5jLg0KLSAqIEFsbCByaWdodHMgcmVzZXJ2 ZWQuDQotICoNCi0gKiBUaGlzIHNvZnR3YXJlIHdhcyBkZXZlbG9wZWQgZm9y IHRoZSBGcmVlQlNEIFByb2plY3QgYnkgSmFrZSBCdXJraG9sZGVyLA0KLSAq IFNhZmVwb3J0IE5ldHdvcmsgU2VydmljZXMsIGFuZCBOZXR3b3JrIEFzc29j aWF0ZXMgTGFib3JhdG9yaWVzLCB0aGUNCi0gKiBTZWN1cml0eSBSZXNlYXJj aCBEaXZpc2lvbiBvZiBOZXR3b3JrIEFzc29jaWF0ZXMsIEluYy4gdW5kZXIN Ci0gKiBEQVJQQS9TUEFXQVIgY29udHJhY3QgTjY2MDAxLTAxLUMtODAzNSAo IkNCT1NTIiksIGFzIHBhcnQgb2YgdGhlIERBUlBBDQotICogQ0hBVFMgcmVz ZWFyY2ggcHJvZ3JhbS4NCi0gKg0KLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1 c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91 dA0KLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0 aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucw0KLSAqIGFyZSBtZXQ6DQot ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0 YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQNCi0gKiAgICBub3RpY2UsIHRoaXMg bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt ZXIuDQotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11 c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQNCi0gKiAgICBub3Rp Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n IGRpc2NsYWltZXIgaW4gdGhlDQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1 dGlvbi4NCi0gKg0KLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg VEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQNCi0g KiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUNCi0gKiBJTVBMSUVEIFdBUlJB TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRQ0KLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g RVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElB QkxFDQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwNCi0gKiBE QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUw0KLSAqIE9SIFNFUlZJQ0VTOyBM T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U RVJSVVBUSU9OKQ0KLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU DQotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQ0KLSAqIE9VVCBP RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP RiBUSEUgUE9TU0lCSUxJVFkgT0YNCi0gKiBTVUNIIERBTUFHRS4NCisgKiAk RnJlZUJTRDogL3JlcG9tYW4vci9uY3ZzL3NyYy9zeXMvaTM4Ni9pMzg2L3Bt YXAuYyx2IDEuMjUwLjIuMTggMjAwMi8wMy8wNiAyMjo0ODo1MyBzaWxieSBF eHAgJA0KICAqLw0KIA0KIC8qDQpAQCAtMTEyLDcgKzgwLDYgQEANCiAjaW5j bHVkZSA8c3lzL21zZ2J1Zi5oPg0KICNpbmNsdWRlIDxzeXMvdm1tZXRlci5o Pg0KICNpbmNsdWRlIDxzeXMvbW1hbi5oPg0KLSNpbmNsdWRlIDxzeXMvbWFs bG9jLmg+DQogDQogI2luY2x1ZGUgPHZtL3ZtLmg+DQogI2luY2x1ZGUgPHZt L3ZtX3BhcmFtLmg+DQpAQCAtMTI5LDcgKzk2LDYgQEANCiANCiAjaW5jbHVk ZSA8c3lzL3VzZXIuaD4NCiANCi0jaW5jbHVkZSA8bWFjaGluZS9jcHUuaD4N CiAjaW5jbHVkZSA8bWFjaGluZS9jcHV0eXBlcy5oPg0KICNpbmNsdWRlIDxt YWNoaW5lL21kX3Zhci5oPg0KICNpbmNsdWRlIDxtYWNoaW5lL3NwZWNpYWxy ZWcuaD4NCkBAIC0xNjIsMTYgKzEyOCwxNiBAQA0KICAqIEdldCBQREVzIGFu ZCBQVEVzIGZvciB1c2VyL2tlcm5lbCBhZGRyZXNzIHNwYWNlDQogICovDQog I2RlZmluZQlwbWFwX3BkZShtLCB2KQkoJigobSktPnBtX3BkaXJbKHZtX29m ZnNldF90KSh2KSA+PiBQRFJTSElGVF0pKQ0KLSNkZWZpbmUgcGRpcl9wZGUo bSwgdikJKG1bKHZtX29mZnNldF90KSh2KSA+PiBQRFJTSElGVF0pDQorI2Rl ZmluZSBwZGlyX3BkZShtLCB2KSAobVsodm1fb2Zmc2V0X3QpKHYpID4+IFBE UlNISUZUXSkNCiANCi0jZGVmaW5lIHBtYXBfcGRlX3YocHRlKQkJKCgqcHRl ICYgUEdfVikgIT0gMCkNCi0jZGVmaW5lIHBtYXBfcHRlX3cocHRlKQkJKCgq cHRlICYgUEdfVykgIT0gMCkNCi0jZGVmaW5lIHBtYXBfcHRlX20ocHRlKQkJ KCgqcHRlICYgUEdfTSkgIT0gMCkNCi0jZGVmaW5lIHBtYXBfcHRlX3UocHRl KQkJKCgqcHRlICYgUEdfQSkgIT0gMCkNCi0jZGVmaW5lIHBtYXBfcHRlX3Yo cHRlKQkJKCgqcHRlICYgUEdfVikgIT0gMCkNCisjZGVmaW5lIHBtYXBfcGRl X3YocHRlKQkJKCgqKGludCAqKXB0ZSAmIFBHX1YpICE9IDApDQorI2RlZmlu ZSBwbWFwX3B0ZV93KHB0ZSkJCSgoKihpbnQgKilwdGUgJiBQR19XKSAhPSAw KQ0KKyNkZWZpbmUgcG1hcF9wdGVfbShwdGUpCQkoKCooaW50ICopcHRlICYg UEdfTSkgIT0gMCkNCisjZGVmaW5lIHBtYXBfcHRlX3UocHRlKQkJKCgqKGlu dCAqKXB0ZSAmIFBHX0EpICE9IDApDQorI2RlZmluZSBwbWFwX3B0ZV92KHB0 ZSkJCSgoKihpbnQgKilwdGUgJiBQR19WKSAhPSAwKQ0KIA0KLSNkZWZpbmUg cG1hcF9wdGVfc2V0X3cocHRlLCB2KQkoKHYpID8gKCpwdGUgfD0gUEdfVykg OiAoKnB0ZSAmPSB+UEdfVykpDQotI2RlZmluZSBwbWFwX3B0ZV9zZXRfcHJv dChwdGUsIHYpICgqcHRlID0gKCpwdGUgJiB+UEdfUFJPVCkgfCAodikpDQor I2RlZmluZSBwbWFwX3B0ZV9zZXRfdyhwdGUsIHYpICgodik/KCooaW50ICop cHRlIHw9IFBHX1cpOigqKGludCAqKXB0ZSAmPSB+UEdfVykpDQorI2RlZmlu ZSBwbWFwX3B0ZV9zZXRfcHJvdChwdGUsIHYpICgoKihpbnQgKilwdGUgJj0g flBHX1BST1QpLCAoKihpbnQgKilwdGUgfD0gKHYpKSkNCiANCiAvKg0KICAq IEdpdmVuIGEgbWFwIGFuZCBhIG1hY2hpbmUgaW5kZXBlbmRlbnQgcHJvdGVj dGlvbiBjb2RlLA0KQEAgLTE4Myw4ICsxNDksOCBAQA0KIHN0YXRpYyBzdHJ1 Y3QgcG1hcCBrZXJuZWxfcG1hcF9zdG9yZTsNCiBwbWFwX3Qga2VybmVsX3Bt YXA7DQogDQotdm1fcGFkZHJfdCBhdmFpbF9zdGFydDsJLyogUEEgb2YgZmly c3QgYXZhaWxhYmxlIHBoeXNpY2FsIHBhZ2UgKi8NCi12bV9wYWRkcl90IGF2 YWlsX2VuZDsJLyogUEEgb2YgbGFzdCBhdmFpbGFibGUgcGh5c2ljYWwgcGFn ZSAqLw0KK3ZtX29mZnNldF90IGF2YWlsX3N0YXJ0OwkvKiBQQSBvZiBmaXJz dCBhdmFpbGFibGUgcGh5c2ljYWwgcGFnZSAqLw0KK3ZtX29mZnNldF90IGF2 YWlsX2VuZDsJCS8qIFBBIG9mIGxhc3QgYXZhaWxhYmxlIHBoeXNpY2FsIHBh Z2UgKi8NCiB2bV9vZmZzZXRfdCB2aXJ0dWFsX2F2YWlsOwkvKiBWQSBvZiBm aXJzdCBhdmFpbCBwYWdlIChhZnRlciBrZXJuZWwgYnNzKSAqLw0KIHZtX29m ZnNldF90IHZpcnR1YWxfZW5kOwkvKiBWQSBvZiBsYXN0IGF2YWlsIHBhZ2Ug KGVuZCBvZiBrZXJuZWwgQVMpICovDQogc3RhdGljIGJvb2xlYW5fdCBwbWFw X2luaXRpYWxpemVkID0gRkFMU0U7CS8qIEhhcyBwbWFwX2luaXQgY29tcGxl dGVkPyAqLw0KQEAgLTIwMiwzNCArMTY4LDE5IEBADQogc3RhdGljIHZtX3pv bmVfdCBwdnpvbmU7DQogc3RhdGljIHN0cnVjdCB2bV96b25lIHB2em9uZV9z dG9yZTsNCiBzdGF0aWMgc3RydWN0IHZtX29iamVjdCBwdnpvbmVfb2JqOw0K LXN0YXRpYyBpbnQgcHZfZW50cnlfY291bnQgPSAwLCBwdl9lbnRyeV9tYXgg PSAwLCBwdl9lbnRyeV9oaWdoX3dhdGVyID0gMDsNCitzdGF0aWMgaW50IHB2 X2VudHJ5X2NvdW50PTAsIHB2X2VudHJ5X21heD0wLCBwdl9lbnRyeV9oaWdo X3dhdGVyPTA7DQogc3RhdGljIGludCBwbWFwX3BhZ2VkYWVtb25fd2FrZW4g PSAwOw0KIHN0YXRpYyBzdHJ1Y3QgcHZfZW50cnkgKnB2aW5pdDsNCiANCiAv Kg0KICAqIEFsbCB0aG9zZSBrZXJuZWwgUFQgc3VibWFwcyB0aGF0IEJTRCBp cyBzbyBmb25kIG9mDQogICovDQotI2lmZGVmIFNNUA0KLWV4dGVybiBwdF9l bnRyeV90ICpTTVBwdDsNCi0jZGVmaW5lCUNNQVAxCXBydl9DTUFQMQ0KLSNk ZWZpbmUJQ01BUDIJcHJ2X0NNQVAyDQotI2RlZmluZQlDTUFQMwlwcnZfQ01B UDMNCi0jZGVmaW5lCVBNQVAxCXBydl9QTUFQMQ0KLSNkZWZpbmUJQ0FERFIx CXBydl9DQUREUjENCi0jZGVmaW5lCUNBRERSMglwcnZfQ0FERFIyDQotI2Rl ZmluZQlDQUREUjMJcHJ2X0NBRERSMw0KLSNkZWZpbmUJUEFERFIxCXBydl9Q QUREUjENCi0jZWxzZQ0KLXN0YXRpYyBwdF9lbnRyeV90ICpDTUFQMSwgKkNN QVAyLCAqQ01BUDM7DQotc3RhdGljIGNhZGRyX3QgQ0FERFIxLCBDQUREUjIs IENBRERSMzsNCi1zdGF0aWMgcGRfZW50cnlfdCAqUE1BUDE7DQotc3RhdGlj IHB0X2VudHJ5X3QgKlBBRERSMTsNCi0jZW5kaWYNCi0NCi1zdGF0aWMgcHRf ZW50cnlfdCAqcHRtbWFwOw0KLWNhZGRyX3QgcHR2bW1hcCA9IDA7DQorcHRf ZW50cnlfdCAqQ01BUDEgPSAwOw0KK3N0YXRpYyBwdF9lbnRyeV90ICpDTUFQ MiwgKnB0bW1hcDsNCitjYWRkcl90IENBRERSMSA9IDAsIHB0dm1tYXAgPSAw Ow0KK3N0YXRpYyBjYWRkcl90IENBRERSMjsNCiBzdGF0aWMgcHRfZW50cnlf dCAqbXNnYnVmbWFwOw0KLXN0cnVjdCBtc2didWYgKm1zZ2J1ZnAgPSAwOw0K K3N0cnVjdCBtc2didWYgKm1zZ2J1ZnA9MDsNCiANCiAvKg0KICAqIENyYXNo ZHVtcCBtYXBzLg0KQEAgLTIzNywzNiArMTg4LDY2IEBADQogc3RhdGljIHB0 X2VudHJ5X3QgKnB0X2NyYXNoZHVtcG1hcDsNCiBzdGF0aWMgY2FkZHJfdCBj cmFzaGR1bXBtYXA7DQogDQotc3RhdGljIHBkX2VudHJ5X3QgcGRpcjRtYjsN CisjaWZkZWYgU01QDQorZXh0ZXJuIHB0X2VudHJ5X3QgKlNNUHB0Ow0KKyNl bHNlDQorc3RhdGljIHB0X2VudHJ5X3QgKlBNQVAxID0gMDsNCitzdGF0aWMg dW5zaWduZWQgKlBBRERSMSA9IDA7DQorI2VuZGlmDQogDQogc3RhdGljIFBN QVBfSU5MSU5FIHZvaWQJZnJlZV9wdl9lbnRyeSBfX1AoKHB2X2VudHJ5X3Qg cHYpKTsNCitzdGF0aWMgdW5zaWduZWQgKiBnZXRfcHRiYXNlIF9fUCgocG1h cF90IHBtYXApKTsNCiBzdGF0aWMgcHZfZW50cnlfdCBnZXRfcHZfZW50cnkg X19QKCh2b2lkKSk7DQogc3RhdGljIHZvaWQJaTM4Nl9wcm90ZWN0aW9uX2lu aXQgX19QKCh2b2lkKSk7DQogc3RhdGljIF9faW5saW5lIHZvaWQJcG1hcF9j aGFuZ2ViaXQgX19QKCh2bV9wYWdlX3QgbSwgaW50IGJpdCwgYm9vbGVhbl90 IHNldGVtKSk7DQorDQogc3RhdGljIHZvaWQJcG1hcF9yZW1vdmVfYWxsIF9f UCgodm1fcGFnZV90IG0pKTsNCiBzdGF0aWMgdm1fcGFnZV90IHBtYXBfZW50 ZXJfcXVpY2sgX19QKChwbWFwX3QgcG1hcCwgdm1fb2Zmc2V0X3QgdmEsDQog CQkJCSAgICAgIHZtX3BhZ2VfdCBtLCB2bV9wYWdlX3QgbXB0ZSkpOw0KLXN0 YXRpYyBpbnQgcG1hcF9yZW1vdmVfcHRlIF9fUCgocG1hcF90IHBtYXAsIHB0 X2VudHJ5X3QqIHB0cSwNCitzdGF0aWMgaW50IHBtYXBfcmVtb3ZlX3B0ZSBf X1AoKHN0cnVjdCBwbWFwICpwbWFwLCB1bnNpZ25lZCAqcHRxLA0KIAkJCQkJ dm1fb2Zmc2V0X3Qgc3ZhKSk7DQotc3RhdGljIHZvaWQgcG1hcF9yZW1vdmVf cGFnZSBfX1AoKHBtYXBfdCBwbWFwLCB2bV9vZmZzZXRfdCB2YSkpOw0KLXN0 YXRpYyBpbnQgcG1hcF9yZW1vdmVfZW50cnkgX19QKChwbWFwX3QgcG1hcCwg dm1fcGFnZV90IG0sDQorc3RhdGljIHZvaWQgcG1hcF9yZW1vdmVfcGFnZSBf X1AoKHN0cnVjdCBwbWFwICpwbWFwLCB2bV9vZmZzZXRfdCB2YSkpOw0KK3N0 YXRpYyBpbnQgcG1hcF9yZW1vdmVfZW50cnkgX19QKChzdHJ1Y3QgcG1hcCAq cG1hcCwgdm1fcGFnZV90IG0sDQogCQkJCQl2bV9vZmZzZXRfdCB2YSkpOw0K IHN0YXRpYyBib29sZWFuX3QgcG1hcF90ZXN0Yml0IF9fUCgodm1fcGFnZV90 IG0sIGludCBiaXQpKTsNCiBzdGF0aWMgdm9pZCBwbWFwX2luc2VydF9lbnRy eSBfX1AoKHBtYXBfdCBwbWFwLCB2bV9vZmZzZXRfdCB2YSwNCiAJCXZtX3Bh Z2VfdCBtcHRlLCB2bV9wYWdlX3QgbSkpOw0KIA0KIHN0YXRpYyB2bV9wYWdl X3QgcG1hcF9hbGxvY3B0ZSBfX1AoKHBtYXBfdCBwbWFwLCB2bV9vZmZzZXRf dCB2YSkpOw0KKw0KK3N0YXRpYyBpbnQgcG1hcF9yZWxlYXNlX2ZyZWVfcGFn ZSBfX1AoKHBtYXBfdCBwbWFwLCB2bV9wYWdlX3QgcCkpOw0KIHN0YXRpYyB2 bV9wYWdlX3QgX3BtYXBfYWxsb2NwdGUgX19QKChwbWFwX3QgcG1hcCwgdW5z aWduZWQgcHRlcGluZGV4KSk7DQorc3RhdGljIHVuc2lnbmVkICogcG1hcF9w dGVfcXVpY2sgX19QKChwbWFwX3QgcG1hcCwgdm1fb2Zmc2V0X3QgdmEpKTsN CiBzdGF0aWMgdm1fcGFnZV90IHBtYXBfcGFnZV9sb29rdXAgX19QKCh2bV9v YmplY3RfdCBvYmplY3QsIHZtX3BpbmRleF90IHBpbmRleCkpOw0KIHN0YXRp YyBpbnQgcG1hcF91bnVzZV9wdCBfX1AoKHBtYXBfdCwgdm1fb2Zmc2V0X3Qs IHZtX3BhZ2VfdCkpOw0KIHN0YXRpYyB2bV9vZmZzZXRfdCBwbWFwX2ttZW1f Y2hvb3NlKHZtX29mZnNldF90IGFkZHIpOw0KIA0KLXN0YXRpYyBpbnQJcG1h cF9pc19jdXJyZW50KHBtYXBfdCk7DQorc3RhdGljIHVuc2lnbmVkIHBkaXI0 bWI7DQogDQotI2lmZGVmIFBBRQ0KLXN0YXRpYyBwZHB0X2VudHJ5X3QgKnBt YXBfYWxsb2NfcGRwdCh2b2lkKTsNCi1zdGF0aWMgdm9pZAlwbWFwX2ZyZWVf cGRwdChwZHB0X2VudHJ5X3QgKik7DQotI2VuZGlmDQorLyoNCisgKglSb3V0 aW5lOglwbWFwX3B0ZQ0KKyAqCUZ1bmN0aW9uOg0KKyAqCQlFeHRyYWN0IHRo ZSBwYWdlIHRhYmxlIGVudHJ5IGFzc29jaWF0ZWQNCisgKgkJd2l0aCB0aGUg Z2l2ZW4gbWFwL3ZpcnR1YWxfYWRkcmVzcyBwYWlyLg0KKyAqLw0KKw0KK1BN QVBfSU5MSU5FIHVuc2lnbmVkICoNCitwbWFwX3B0ZShwbWFwLCB2YSkNCisJ cmVnaXN0ZXIgcG1hcF90IHBtYXA7DQorCXZtX29mZnNldF90IHZhOw0KK3sN CisJdW5zaWduZWQgKnBkZWFkZHI7DQorDQorCWlmIChwbWFwKSB7DQorCQlw ZGVhZGRyID0gKHVuc2lnbmVkICopIHBtYXBfcGRlKHBtYXAsIHZhKTsNCisJ CWlmICgqcGRlYWRkciAmIFBHX1BTKQ0KKwkJCXJldHVybiBwZGVhZGRyOw0K KwkJaWYgKCpwZGVhZGRyKSB7DQorCQkJcmV0dXJuIGdldF9wdGJhc2UocG1h cCkgKyBpMzg2X2J0b3AodmEpOw0KKwkJfQ0KKwl9DQorCXJldHVybiAoMCk7 DQorfQ0KIA0KIC8qDQogICogTW92ZSB0aGUga2VybmVsIHZpcnR1YWwgZnJl ZSBwb2ludGVyIHRvIHRoZSBuZXh0DQpAQCAtMjk3LDcgKzI3OCw5IEBADQog ICoJKHBoeXNpY2FsKSBhZGRyZXNzIHN0YXJ0aW5nIHJlbGF0aXZlIHRvIDBd DQogICovDQogdm9pZA0KLXBtYXBfYm9vdHN0cmFwKHZtX3BhZGRyX3QgZmly c3RhZGRyLCB2bV9wYWRkcl90IGxvYWRhZGRyKQ0KK3BtYXBfYm9vdHN0cmFw KGZpcnN0YWRkciwgbG9hZGFkZHIpDQorCXZtX29mZnNldF90IGZpcnN0YWRk cjsNCisJdm1fb2Zmc2V0X3QgbG9hZGFkZHI7DQogew0KIAl2bV9vZmZzZXRf dCB2YTsNCiAJcHRfZW50cnlfdCAqcHRlOw0KQEAgLTMwOSw3ICsyOTIsNyBA QA0KIAlhdmFpbF9zdGFydCA9IGZpcnN0YWRkcjsNCiANCiAJLyoNCi0JICog VGhlIGNhbGN1bGF0aW9uIG9mIHZpcnR1YWxfYXZhaWwgaXMgd3JvbmcuIEl0 J3MgTktQVCpQQUdFX1NJWkUgdG9vDQorCSAqIFhYWCBUaGUgY2FsY3VsYXRp b24gb2YgdmlydHVhbF9hdmFpbCBpcyB3cm9uZy4gSXQncyBOS1BUKlBBR0Vf U0laRSB0b28NCiAJICogbGFyZ2UuIEl0IHNob3VsZCBpbnN0ZWFkIGJlIGNv cnJlY3RseSBjYWxjdWxhdGVkIGluIGxvY29yZS5zIGFuZA0KIAkgKiBub3Qg YmFzZWQgb24gJ2ZpcnN0JyAod2hpY2ggaXMgYSBwaHlzaWNhbCBhZGRyZXNz LCBub3QgYSB2aXJ0dWFsDQogCSAqIGFkZHJlc3MsIGZvciB0aGUgc3RhcnQg b2YgdW51c2VkIHBoeXNpY2FsIG1lbW9yeSkuIFRoZSBrZXJuZWwNCkBAIC0z MzMsMTEgKzMxNiw5IEBADQogCSAqLw0KIAlrZXJuZWxfcG1hcCA9ICZrZXJu ZWxfcG1hcF9zdG9yZTsNCiANCi0Ja2VybmVsX3BtYXAtPnBtX3BkaXIgPSAo cGRfZW50cnlfdCAqKSAoS0VSTkJBU0UgKyBJZGxlUFREKTsNCisJa2VybmVs X3BtYXAtPnBtX3BkaXIgPSAocGRfZW50cnlfdCAqKSAoS0VSTkJBU0UgKyAo dV9pbnQpSWRsZVBURCk7DQorCWtlcm5lbF9wbWFwLT5wbV9jb3VudCA9IDE7 DQogCWtlcm5lbF9wbWFwLT5wbV9hY3RpdmUgPSAtMTsJLyogZG9uJ3QgYWxs b3cgZGVhY3RpdmF0aW9uICovDQotI2lmZGVmIFBBRQ0KLQlrZXJuZWxfcG1h cC0+cG1fcGRwdCA9IElkbGVQRFBUOw0KLSNlbmRpZg0KIAlUQUlMUV9JTklU KCZrZXJuZWxfcG1hcC0+cG1fcHZsaXN0KTsNCiAJbmtwdCA9IE5LUFQ7DQog DQpAQCAtMzQ5LDIyICszMzAsMTMgQEANCiAJdiA9IChjKXZhOyB2YSArPSAo KG4pKlBBR0VfU0laRSk7IHAgPSBwdGU7IHB0ZSArPSAobik7DQogDQogCXZh ID0gdmlydHVhbF9hdmFpbDsNCi0JcHRlID0gdnRvcHRlKHZhKTsNCisJcHRl ID0gKHB0X2VudHJ5X3QgKikgcG1hcF9wdGUoa2VybmVsX3BtYXAsIHZhKTsN CiANCi0jaWZuZGVmIFNNUA0KIAkvKg0KLQkgKiBDTUFQMS9DTUFQMi9DTUFQ MyBhcmUgdXNlZCBmb3IgemVyb2luZyBhbmQgY29weWluZyBwYWdlcy4NCisJ ICogQ01BUDEvQ01BUDIgYXJlIHVzZWQgZm9yIHplcm9pbmcgYW5kIGNvcHlp bmcgcGFnZXMuDQogCSAqLw0KIAlTWVNNQVAoY2FkZHJfdCwgQ01BUDEsIENB RERSMSwgMSkNCiAJU1lTTUFQKGNhZGRyX3QsIENNQVAyLCBDQUREUjIsIDEp DQotCVNZU01BUChjYWRkcl90LCBDTUFQMywgQ0FERFIzLCAxKQ0KLQkqQ01B UDEgPSAqQ01BUDIgPSAqQ01BUDMgPSAwOw0KLQ0KLQkvKg0KLQkgKiBwdGVt YXAgaXMgdXNlZCBmb3IgcG1hcF9wdGUNCi0JICovDQotCVNZU01BUChwZF9l bnRyeV90ICosIFBNQVAxLCBQQUREUjEsIDEpOw0KLSNlbmRpZg0KIA0KIAkv Kg0KIAkgKiBDcmFzaGR1bXAgbWFwcy4NCkBAIC0zODQsMzggKzM1Niw0NCBA QA0KIAlTWVNNQVAoc3RydWN0IG1zZ2J1ZiAqLCBtc2didWZtYXAsIG1zZ2J1 ZnAsDQogCSAgICAgICBhdG9wKHJvdW5kX3BhZ2UoTVNHQlVGX1NJWkUpKSkN CiANCisjaWYgIWRlZmluZWQoU01QKQ0KKwkvKg0KKwkgKiBwdGVtYXAgaXMg dXNlZCBmb3IgcG1hcF9wdGVfcXVpY2sNCisJICovDQorCVNZU01BUCh1bnNp Z25lZCAqLCBQTUFQMSwgUEFERFIxLCAxKTsNCisjZW5kaWYNCisNCiAJdmly dHVhbF9hdmFpbCA9IHZhOw0KIA0KKwkqKGludCAqKSBDTUFQMSA9ICooaW50 ICopIENNQVAyID0gMDsNCiAJZm9yIChpID0gMDsgaSA8IE5LUFQ7IGkrKykN CiAJCVBURFtpXSA9IDA7DQogDQotCS8qDQotCSAqIEluaXRpYWxpemUgdGhl IGdsb2JhbCBwYWdlIGZsYWcNCi0JICovDQogCXBnZWZsYWcgPSAwOw0KICNp ZiAhZGVmaW5lZChTTVApCQkJLyogWFhYIC0gc2VlIGFsc28gbXBfbWFjaGRl cC5jICovDQotCWlmIChjcHVfZmVhdHVyZSAmIENQVUlEX1BHRSkNCi0gCQlw Z2VmbGFnID0gUEdfRzsNCisJaWYgKGNwdV9mZWF0dXJlICYgQ1BVSURfUEdF KSB7DQorCQlwZ2VmbGFnID0gUEdfRzsNCisJfQ0KICNlbmRpZg0KLQ0KLQkv Kg0KLQkgKiBJbml0aWFsaXplIHRoZSA0TUIgcGFnZSBzaXplIGZsYWcNCi0J ICovDQorCQ0KKy8qDQorICogSW5pdGlhbGl6ZSB0aGUgNE1CIHBhZ2Ugc2l6 ZSBmbGFnDQorICovDQogCXBzZWZsYWcgPSAwOw0KLSNpZm5kZWYgRElTQUJM RV9QU0UNCi0JaWYgKGNwdV9mZWF0dXJlICYgQ1BVSURfUFNFKQ0KLQkJcHNl ZmxhZyA9IFBHX1BTOw0KLSNlbmRpZg0KLQkvKg0KLQkgKiBUaGUgNE1CIHBh Z2UgdmVyc2lvbiBvZiB0aGUgaW5pdGlhbA0KLQkgKiBrZXJuZWwgcGFnZSBt YXBwaW5nLg0KLQkgKi8NCi0JaWYgKHBzZWZsYWcpIHsNCi0JCXBkX2VudHJ5 X3QgcHRkaXRtcDsNCisvKg0KKyAqIFRoZSA0TUIgcGFnZSB2ZXJzaW9uIG9m IHRoZSBpbml0aWFsDQorICoga2VybmVsIHBhZ2UgbWFwcGluZy4NCisgKi8N CisJcGRpcjRtYiA9IDA7DQorDQorI2lmICFkZWZpbmVkKERJU0FCTEVfUFNF KQ0KKwlpZiAoY3B1X2ZlYXR1cmUgJiBDUFVJRF9QU0UpIHsNCisJCXVuc2ln bmVkIHB0ZGl0bXA7DQogCQkvKg0KIAkJICogTm90ZSB0aGF0IHdlIGhhdmUg ZW5hYmxlZCBQU0UgbW9kZQ0KIAkJICovDQotCQlwdGRpdG1wID0gKihQVG1h cCArIGkzODZfYnRvcChLRVJOQkFTRSkpOw0KKwkJcHNlZmxhZyA9IFBHX1BT Ow0KKwkJcHRkaXRtcCA9ICooKHVuc2lnbmVkICopUFRtYXAgKyBpMzg2X2J0 b3AoS0VSTkJBU0UpKTsNCiAJCXB0ZGl0bXAgJj0gfihOQlBEUiAtIDEpOw0K IAkJcHRkaXRtcCB8PSBQR19WIHwgUEdfUlcgfCBQR19QUyB8IFBHX1UgfCBw Z2VmbGFnOw0KIAkJcGRpcjRtYiA9IHB0ZGl0bXA7DQpAQCAtNDM1LDE4ICs0 MTMsMjAgQEANCiAJCSAqIEZvciBTTVAsIHdlIHN0aWxsIG5lZWQgNEsgcGFn ZXMgdG8gYm9vdHN0cmFwIEFQcywNCiAJCSAqIFBTRSB3aWxsIGJlIGVuYWJs ZWQgYXMgc29vbiBhcyBhbGwgQVBzIGFyZSB1cC4NCiAJCSAqLw0KLQkJa2Vy bmVsX3BtYXAtPnBtX3BkaXJbS1BUREldID0gUFREW0tQVERJXSA9IHBkaXI0 bWI7DQorCQlQVERbS1BUREldID0gKHBkX2VudHJ5X3QpIHB0ZGl0bXA7DQor CQlrZXJuZWxfcG1hcC0+cG1fcGRpcltLUFRESV0gPSAocGRfZW50cnlfdCkg cHRkaXRtcDsNCiAJCWludmx0bGIoKTsNCiAjZW5kaWYNCiAJfQ0KKyNlbmRp Zg0KIA0KICNpZmRlZiBTTVANCiAJaWYgKGNwdV9hcGljX2FkZHJlc3MgPT0g MCkNCiAJCXBhbmljKCJwbWFwX2Jvb3RzdHJhcDogbm8gbG9jYWwgYXBpYyEi KTsNCiANCiAJLyogbG9jYWwgYXBpYyBpcyBtYXBwZWQgb24gbGFzdCBwYWdl ICovDQotCVNNUHB0W05QVEVQRyAtIDFdID0gUEdfViB8IFBHX1JXIHwgUEdf TiB8IHBnZWZsYWcgfA0KLQkgICAgKGNwdV9hcGljX2FkZHJlc3MgJiBQR19G UkFNRSk7DQorCVNNUHB0W05QVEVQRyAtIDFdID0gKHB0X2VudHJ5X3QpKFBH X1YgfCBQR19SVyB8IFBHX04gfCBwZ2VmbGFnIHwNCisJICAgIChjcHVfYXBp Y19hZGRyZXNzICYgUEdfRlJBTUUpKTsNCiANCiAJLyogQlNQIGRvZXMgdGhp cyBpdHNlbGYsIEFQJ3MgZ2V0IGl0IHByZS1zZXQgKi8NCiAJZ2QgPSAmU01Q X3BydnNwYWNlWzBdLmdsb2JhbGRhdGE7DQpAQCAtNDU3LDcgKzQzNyw3IEBA DQogCWdkLT5nZF9wcnZfQ0FERFIxID0gU01QX3BydnNwYWNlWzBdLkNQQUdF MTsNCiAJZ2QtPmdkX3Bydl9DQUREUjIgPSBTTVBfcHJ2c3BhY2VbMF0uQ1BB R0UyOw0KIAlnZC0+Z2RfcHJ2X0NBRERSMyA9IFNNUF9wcnZzcGFjZVswXS5D UEFHRTM7DQotCWdkLT5nZF9wcnZfUEFERFIxID0gKHB0X2VudHJ5X3QgKilT TVBfcHJ2c3BhY2VbMF0uUFBBR0UxOw0KKwlnZC0+Z2RfcHJ2X1BBRERSMSA9 ICh1bnNpZ25lZCAqKVNNUF9wcnZzcGFjZVswXS5QUEFHRTE7DQogI2VuZGlm DQogDQogCWludmx0bGIoKTsNCkBAIC00NzMsNyArNDUzLDggQEANCiAJaWYg KHBzZWZsYWcgJiYgKGNwdV9mZWF0dXJlICYgQ1BVSURfUFNFKSkgew0KIAkJ bG9hZF9jcjQocmNyNCgpIHwgQ1I0X1BTRSk7DQogCQlpZiAocGRpcjRtYiAm JiBjcHVpZCA9PSAwKSB7CS8qIG9ubHkgb24gQlNQICovDQotCQkJa2VybmVs X3BtYXAtPnBtX3BkaXJbS1BUREldID0gUFREW0tQVERJXSA9IHBkaXI0bWI7 DQorCQkJa2VybmVsX3BtYXAtPnBtX3BkaXJbS1BUREldID0NCisJCQkgICAg UFREW0tQVERJXSA9IChwZF9lbnRyeV90KXBkaXI0bWI7DQogCQkJY3B1X2lu dmx0bGIoKTsNCiAJCX0NCiAJfQ0KQEAgLTQ4OCw3ICs0NjksOCBAQA0KICAq CXdheSwgZGlzY29udGlndW91cyBwaHlzaWNhbCBtZW1vcnkuDQogICovDQog dm9pZA0KLXBtYXBfaW5pdCh2bV9wYWRkcl90IHBoeXNfc3RhcnQsIHZtX3Bh ZGRyX3QgcGh5c19lbmQpDQorcG1hcF9pbml0KHBoeXNfc3RhcnQsIHBoeXNf ZW5kKQ0KKwl2bV9vZmZzZXRfdCBwaHlzX3N0YXJ0LCBwaHlzX2VuZDsNCiB7 DQogCWludCBpOw0KIAlpbnQgaW5pdGlhbF9wdnM7DQpAQCAtNTUyLDE3ICs1 MzQsMjYgQEANCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqLw0KIA0KICNpZiBkZWZpbmVkKFBNQVBfRElB R05PU1RJQykNCisNCiAvKg0KICAqIFRoaXMgY29kZSBjaGVja3MgZm9yIG5v bi13cml0ZWFibGUvbW9kaWZpZWQgcGFnZXMuDQogICogVGhpcyBzaG91bGQg YmUgYW4gaW52YWxpZCBjb25kaXRpb24uDQogICovDQogc3RhdGljIGludA0K LXBtYXBfbndfbW9kaWZpZWQocHRfZW50cnlfdCBwdGUpDQorcG1hcF9ud19t b2RpZmllZChwdF9lbnRyeV90IHB0ZWEpDQogew0KLQlyZXR1cm4gKChwdGUg JiAoUEdfTXxQR19SVykpID09IFBHX00pOw0KKwlpbnQgcHRlOw0KKw0KKwlw dGUgPSAoaW50KSBwdGVhOw0KKw0KKwlpZiAoKHB0ZSAmIChQR19NfFBHX1JX KSkgPT0gUEdfTSkNCisJCXJldHVybiAxOw0KKwllbHNlDQorCQlyZXR1cm4g MDsNCiB9DQogI2VuZGlmDQogDQorDQogLyoNCiAgKiB0aGlzIHJvdXRpbmUg ZGVmaW5lcyB0aGUgcmVnaW9uKHMpIG9mIG1lbW9yeSB0aGF0IHNob3VsZA0K ICAqIG5vdCBiZSB0ZXN0ZWQgZm9yIHRoZSBtb2RpZmllZCBiaXQuDQpAQCAt NTcwLDcgKzU2MSwxMCBAQA0KIHN0YXRpYyBQTUFQX0lOTElORSBpbnQNCiBw bWFwX3RyYWNrX21vZGlmaWVkKHZtX29mZnNldF90IHZhKQ0KIHsNCi0JcmV0 dXJuICh2YSA8IGNsZWFuX3N2YSkgfHwgKHZhID49IGNsZWFuX2V2YSk7DQor CWlmICgodmEgPCBjbGVhbl9zdmEpIHx8ICh2YSA+PSBjbGVhbl9ldmEpKSAN CisJCXJldHVybiAxOw0KKwllbHNlDQorCQlyZXR1cm4gMDsNCiB9DQogDQog c3RhdGljIFBNQVBfSU5MSU5FIHZvaWQNCkBAIC02MTQsNzggKzYwOCw2NSBA QA0KICNlbmRpZg0KIH0NCiANCi0jaWZkZWYgUEFFDQotc3RhdGljIF9faW5s aW5lIHB0X2VudHJ5X3QNCi1wdGVfbG9hZChwdF9lbnRyeV90ICpwdGUpDQot ew0KLQlwdF9lbnRyeV90IHJ2ID0gMDsNCi0JX19hc20gX192b2xhdGlsZShN UExPQ0tFRCAiY21weGNoZzhiICUxIg0KLQkgICAgOiAiK0EiIChydikgOiAi bSIgKCpwdGUpLCAiYiIgKDApLCAiYyIgKDApKTsNCi0JcmV0dXJuIHJ2Ow0K LX0NCi0NCi1zdGF0aWMgX19pbmxpbmUgcHRfZW50cnlfdA0KLXB0ZV9zdG9y ZShwdF9lbnRyeV90ICpwdGUsIHB0X2VudHJ5X3QgdikNCi17DQotCXB0X2Vu dHJ5X3QgcnYgPSAqcHRlOw0KLQlfX2FzbSBfX3ZvbGF0aWxlKCIxOjsiIE1Q TE9DS0VEICJjbXB4Y2hnOGIgJTE7IGpueiAxYiINCi0JICAgIDogIitBIiAo cnYpDQotCSAgICA6ICJtIiAoKnB0ZSksICJiIiAoKHVfaW50MzJfdCl2KSwg ImMiICgodV9pbnQzMl90KSh2ID4+IDMyKSkpOw0KLQlyZXR1cm4gcnY7DQot fQ0KLSNlbHNlDQotc3RhdGljIF9faW5saW5lIHB0X2VudHJ5X3QNCi1wdGVf bG9hZChwdF9lbnRyeV90ICpwdGUpDQorc3RhdGljIHVuc2lnbmVkICoNCitn ZXRfcHRiYXNlKHBtYXApDQorCXBtYXBfdCBwbWFwOw0KIHsNCi0JcmV0dXJu ICpwdGU7DQotfQ0KKwl1bnNpZ25lZCBmcmFtZSA9ICh1bnNpZ25lZCkgcG1h cC0+cG1fcGRpcltQVERQVERJXSAmIFBHX0ZSQU1FOw0KIA0KLXN0YXRpYyBf X2lubGluZSBwdF9lbnRyeV90DQotcHRlX3N0b3JlKHB0X2VudHJ5X3QgKnB0 ZSwgcHRfZW50cnlfdCB2KQ0KLXsNCi0JX19hc20gX192b2xhdGlsZSgieGNo Z2wgJTEsJTAiIDogIityIiAodikgOiAibSIgKCpwdGUpKTsNCi0JcmV0dXJu IHY7DQotfQ0KKwkvKiBhcmUgd2UgY3VycmVudCBhZGRyZXNzIHNwYWNlIG9y IGtlcm5lbD8gKi8NCisJaWYgKHBtYXAgPT0ga2VybmVsX3BtYXAgfHwgZnJh bWUgPT0gKCgodW5zaWduZWQpIFBURHBkZSkgJiBQR19GUkFNRSkpIHsNCisJ CXJldHVybiAodW5zaWduZWQgKikgUFRtYXA7DQorCX0NCisJLyogb3RoZXJ3 aXNlLCB3ZSBhcmUgYWx0ZXJuYXRlIGFkZHJlc3Mgc3BhY2UgKi8NCisJaWYg KGZyYW1lICE9ICgoKHVuc2lnbmVkKSBBUFREcGRlKSAmIFBHX0ZSQU1FKSkg ew0KKwkJQVBURHBkZSA9IChwZF9lbnRyeV90KSAoZnJhbWUgfCBQR19SVyB8 IFBHX1YpOw0KKyNpZiBkZWZpbmVkKFNNUCkNCisJCS8qIFRoZSBwYWdlIGRp cmVjdG9yeSBpcyBub3Qgc2hhcmVkIGJldHdlZW4gQ1BVcyAqLw0KKwkJY3B1 X2ludmx0bGIoKTsNCisjZWxzZQ0KKwkJaW52bHRsYigpOw0KICNlbmRpZg0K LQ0KLS8qDQotICogQXJlIHdlIGN1cnJlbnQgYWRkcmVzcyBzcGFjZSBvciBr ZXJuZWw/DQotICovDQotc3RhdGljIF9faW5saW5lIGludA0KLXBtYXBfaXNf Y3VycmVudChwbWFwX3QgcG1hcCkNCi17DQotCXJldHVybiAocG1hcCA9PSBr ZXJuZWxfcG1hcCB8fA0KLQkgICAgKHBtYXAtPnBtX3BkaXJbUFREUFRESV0g JiBQR19GUkFNRSkgPT0gKFBURHBkZVswXSAmIFBHX0ZSQU1FKSk7DQorCX0N CisJcmV0dXJuICh1bnNpZ25lZCAqKSBBUFRtYXA7DQogfQ0KIA0KIC8qDQot ICoJUm91dGluZToJcG1hcF9wdGUNCi0gKglGdW5jdGlvbjoNCi0gKgkJRXh0 cmFjdCB0aGUgcGFnZSB0YWJsZSBlbnRyeSBhc3NvY2lhdGVkDQotICoJCXdp dGggdGhlIGdpdmVuIG1hcC92aXJ0dWFsX2FkZHJlc3MgcGFpci4NCisgKiBT dXBlciBmYXN0IHBtYXBfcHRlIHJvdXRpbmUgYmVzdCB1c2VkIHdoZW4gc2Nh bm5pbmcNCisgKiB0aGUgcHYgbGlzdHMuICBUaGlzIGVsaW1pbmF0ZXMgbWFu eSBjb2Fyc2UtZ3JhaW5lZA0KKyAqIGludmx0bGIgY2FsbHMuICBOb3RlIHRo YXQgbWFueSBvZiB0aGUgcHYgbGlzdA0KKyAqIHNjYW5zIGFyZSBhY3Jvc3Mg ZGlmZmVyZW50IHBtYXBzLiAgSXQgaXMgdmVyeSB3YXN0ZWZ1bA0KKyAqIHRv IGRvIGFuIGVudGlyZSBpbnZsdGxiIGZvciBjaGVja2luZyBhIHNpbmdsZSBt YXBwaW5nLg0KICAqLw0KIA0KLXB0X2VudHJ5X3QgKg0KLXBtYXBfcHRlKHBt YXBfdCBwbWFwLCB2bV9vZmZzZXRfdCB2YSkNCitzdGF0aWMgdW5zaWduZWQg KiANCitwbWFwX3B0ZV9xdWljayhwbWFwLCB2YSkNCisJcmVnaXN0ZXIgcG1h cF90IHBtYXA7DQorCXZtX29mZnNldF90IHZhOw0KIHsNCi0JcGRfZW50cnlf dCAqcGRlLCBuZXdwZjsNCi0NCi0JcGRlID0gcG1hcF9wZGUocG1hcCwgdmEp Ow0KLQlpZiAoKnBkZSAmIFBHX1YpIHsNCi0JCWlmICgqcGRlICYgUEdfUFMp DQotCQkJcmV0dXJuIChwdF9lbnRyeV90ICopcGRlOw0KLQkJaWYgKHBtYXBf aXNfY3VycmVudChwbWFwKSkNCi0JCQlyZXR1cm4gdnRvcHRlKHZhKTsNCi0J CW5ld3BmID0gKnBkZSAmIFBHX0ZSQU1FOw0KLQkJaWYgKCgqUE1BUDEgJiBQ R19GUkFNRSkgIT0gbmV3cGYpIHsNCi0JCQkqUE1BUDEgPSBuZXdwZiB8IFBH X1JXIHwgUEdfVjsNCisJdW5zaWduZWQgcGRlLCBuZXdwZjsNCisJaWYgKChw ZGUgPSAodW5zaWduZWQpIHBtYXAtPnBtX3BkaXJbdmEgPj4gUERSU0hJRlRd KSAhPSAwKSB7DQorCQl1bnNpZ25lZCBmcmFtZSA9ICh1bnNpZ25lZCkgcG1h cC0+cG1fcGRpcltQVERQVERJXSAmIFBHX0ZSQU1FOw0KKwkJdW5zaWduZWQg aW5kZXggPSBpMzg2X2J0b3AodmEpOw0KKwkJLyogYXJlIHdlIGN1cnJlbnQg YWRkcmVzcyBzcGFjZSBvciBrZXJuZWw/ICovDQorCQlpZiAoKHBtYXAgPT0g a2VybmVsX3BtYXApIHx8DQorCQkJKGZyYW1lID09ICgoKHVuc2lnbmVkKSBQ VERwZGUpICYgUEdfRlJBTUUpKSkgew0KKwkJCXJldHVybiAodW5zaWduZWQg KikgUFRtYXAgKyBpbmRleDsNCisJCX0NCisJCW5ld3BmID0gcGRlICYgUEdf RlJBTUU7DQogI2lmZGVmIFNNUA0KLQkJCWNwdV9pbnZscGcoUEFERFIxKTsN CisJCWlmICggKCgqICh1bnNpZ25lZCAqKSBwcnZfUE1BUDEpICYgUEdfRlJB TUUpICE9IG5ld3BmKSB7DQorCQkJKiAodW5zaWduZWQgKikgcHJ2X1BNQVAx ID0gbmV3cGYgfCBQR19SVyB8IFBHX1Y7DQorCQkJY3B1X2ludmxwZyhwcnZf UEFERFIxKTsNCisJCX0NCisJCXJldHVybiBwcnZfUEFERFIxICsgKCh1bnNp Z25lZCkgaW5kZXggJiAoTlBURVBHIC0gMSkpOw0KICNlbHNlDQorCQlpZiAo ICgoKiAodW5zaWduZWQgKikgUE1BUDEpICYgUEdfRlJBTUUpICE9IG5ld3Bm KSB7DQorCQkJKiAodW5zaWduZWQgKikgUE1BUDEgPSBuZXdwZiB8IFBHX1JX IHwgUEdfVjsNCiAJCQlpbnZsdGxiXzFwZygodm1fb2Zmc2V0X3QpIFBBRERS MSk7DQotI2VuZGlmDQogCQl9DQotCQlyZXR1cm4gUEFERFIxICsgKGkzODZf YnRvcCh2YSkgJiAoTlBURVBHIC0gMSkpOw0KKwkJcmV0dXJuIFBBRERSMSAr ICgodW5zaWduZWQpIGluZGV4ICYgKE5QVEVQRyAtIDEpKTsNCisjZW5kaWYN CiAJfQ0KIAlyZXR1cm4gKDApOw0KIH0NCkBAIC02OTYsMjAgKzY3NywyNyBA QA0KICAqCQlFeHRyYWN0IHRoZSBwaHlzaWNhbCBwYWdlIGFkZHJlc3MgYXNz b2NpYXRlZA0KICAqCQl3aXRoIHRoZSBnaXZlbiBtYXAvdmlydHVhbF9hZGRy ZXNzIHBhaXIuDQogICovDQotdm1fcGFkZHJfdCANCi1wbWFwX2V4dHJhY3Qo cG1hcF90IHBtYXAsIHZtX29mZnNldF90IHZhKQ0KK3ZtX29mZnNldF90IA0K K3BtYXBfZXh0cmFjdChwbWFwLCB2YSkNCisJcmVnaXN0ZXIgcG1hcF90IHBt YXA7DQorCXZtX29mZnNldF90IHZhOw0KIHsNCi0JcHRfZW50cnlfdCAqcHRl Ow0KLQ0KLQlpZiAocG1hcCA9PSAwKQ0KLQkJcmV0dXJuIDA7DQotCXB0ZSA9 IHBtYXBfcHRlKHBtYXAsIHZhKTsNCi0JaWYgKHB0ZSkgew0KLQkJaWYgKCpw dGUgJiBQR19QUykNCi0JCQlyZXR1cm4gKCpwdGUgJiB+UERSTUFTSykgfCAo dmEgJiBQRFJNQVNLKTsNCi0JCXJldHVybiAoKnB0ZSAmIFBHX0ZSQU1FKSB8 ICh2YSAmIFBBR0VfTUFTSyk7DQorCXZtX29mZnNldF90IHJ0dmFsOw0KKwl2 bV9vZmZzZXRfdCBwZGlyaW5kZXg7DQorCXBkaXJpbmRleCA9IHZhID4+IFBE UlNISUZUOw0KKwlpZiAocG1hcCAmJiAocnR2YWwgPSAodW5zaWduZWQpIHBt YXAtPnBtX3BkaXJbcGRpcmluZGV4XSkpIHsNCisJCXVuc2lnbmVkICpwdGU7 DQorCQlpZiAoKHJ0dmFsICYgUEdfUFMpICE9IDApIHsNCisJCQlydHZhbCAm PSB+KE5CUERSIC0gMSk7DQorCQkJcnR2YWwgfD0gdmEgJiAoTkJQRFIgLSAx KTsNCisJCQlyZXR1cm4gcnR2YWw7DQorCQl9DQorCQlwdGUgPSBnZXRfcHRi YXNlKHBtYXApICsgaTM4Nl9idG9wKHZhKTsNCisJCXJ0dmFsID0gKCgqcHRl ICYgUEdfRlJBTUUpIHwgKHZhICYgUEFHRV9NQVNLKSk7DQorCQlyZXR1cm4g cnR2YWw7DQogCX0NCiAJcmV0dXJuIDA7DQorDQogfQ0KIA0KIC8qKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioN CkBAIC03MjIsMTIgKzcxMCwxNyBAQA0KICAqIHNob3VsZCBkbyBhIGludmx0 bGIgYWZ0ZXIgZG9pbmcgdGhlIHBtYXBfa2VudGVyLi4uDQogICovDQogUE1B UF9JTkxJTkUgdm9pZCANCi1wbWFwX2tlbnRlcih2bV9vZmZzZXRfdCB2YSwg dm1fcGFkZHJfdCBwYSkNCitwbWFwX2tlbnRlcih2YSwgcGEpDQorCXZtX29m ZnNldF90IHZhOw0KKwlyZWdpc3RlciB2bV9vZmZzZXRfdCBwYTsNCiB7DQot CXB0X2VudHJ5X3QgKnB0ZTsNCisJcmVnaXN0ZXIgdW5zaWduZWQgKnB0ZTsN CisJdW5zaWduZWQgbnB0ZSwgb3B0ZTsNCiANCi0JcHRlID0gdnRvcHRlKHZh KTsNCi0JKnB0ZSA9IHBhIHwgUEdfUlcgfCBQR19WIHwgcGdlZmxhZzsNCisJ bnB0ZSA9IHBhIHwgUEdfUlcgfCBQR19WIHwgcGdlZmxhZzsNCisJcHRlID0g KHVuc2lnbmVkICopdnRvcHRlKHZhKTsNCisJb3B0ZSA9ICpwdGU7DQorCSpw dGUgPSBucHRlOw0KIAlpbnZsdGxiXzFwZyh2YSk7DQogfQ0KIA0KQEAgLTcz NSwxMSArNzI4LDEyIEBADQogICogcmVtb3ZlIGEgcGFnZSBmcm9tIHRoZSBr ZXJuZWwgcGFnZXRhYmxlcw0KICAqLw0KIFBNQVBfSU5MSU5FIHZvaWQNCi1w bWFwX2tyZW1vdmUodm1fb2Zmc2V0X3QgdmEpDQorcG1hcF9rcmVtb3ZlKHZh KQ0KKwl2bV9vZmZzZXRfdCB2YTsNCiB7DQotCXB0X2VudHJ5X3QgKnB0ZTsN CisJcmVnaXN0ZXIgdW5zaWduZWQgKnB0ZTsNCiANCi0JcHRlID0gdnRvcHRl KHZhKTsNCisJcHRlID0gKHVuc2lnbmVkICopdnRvcHRlKHZhKTsNCiAJKnB0 ZSA9IDA7DQogCWludmx0bGJfMXBnKHZhKTsNCiB9DQpAQCAtNzUyLDcgKzc0 NiwxMSBAQA0KICAqCXNwZWNpZmllZCBtZW1vcnkuDQogICovDQogdm1fb2Zm c2V0X3QNCi1wbWFwX21hcCh2bV9vZmZzZXRfdCB2aXJ0LCB2bV9wYWRkcl90 IHN0YXJ0LCB2bV9wYWRkcl90IGVuZCwgaW50IHByb3QpDQorcG1hcF9tYXAo dmlydCwgc3RhcnQsIGVuZCwgcHJvdCkNCisJdm1fb2Zmc2V0X3QgdmlydDsN CisJdm1fb2Zmc2V0X3Qgc3RhcnQ7DQorCXZtX29mZnNldF90IGVuZDsNCisJ aW50IHByb3Q7DQogew0KIAl3aGlsZSAoc3RhcnQgPCBlbmQpIHsNCiAJCXBt YXBfa2VudGVyKHZpcnQsIHN0YXJ0KTsNCkBAIC03NzIsMTAgKzc3MCwxOSBA QA0KICAqIG92ZXIuICBUaGUgcGFnZSAqbXVzdCogYmUgd2lyZWQuDQogICov DQogdm9pZA0KLXBtYXBfcWVudGVyKHZtX29mZnNldF90IHZhLCB2bV9wYWdl X3QgKm0sIGludCBjb3VudCkNCitwbWFwX3FlbnRlcih2YSwgbSwgY291bnQp DQorCXZtX29mZnNldF90IHZhOw0KKwl2bV9wYWdlX3QgKm07DQorCWludCBj b3VudDsNCiB7DQotCXdoaWxlIChjb3VudC0tID4gMCkgew0KLQkJcHRfZW50 cnlfdCAqcHRlID0gdnRvcHRlKHZhKTsNCisJdm1fb2Zmc2V0X3QgZW5kX3Zh Ow0KKw0KKwllbmRfdmEgPSB2YSArIGNvdW50ICogUEFHRV9TSVpFOw0KKwkJ DQorCXdoaWxlICh2YSA8IGVuZF92YSkgew0KKwkJdW5zaWduZWQgKnB0ZTsN CisNCisJCXB0ZSA9ICh1bnNpZ25lZCAqKXZ0b3B0ZSh2YSk7DQogCQkqcHRl ID0gVk1fUEFHRV9UT19QSFlTKCptKSB8IFBHX1JXIHwgUEdfViB8IHBnZWZs YWc7DQogI2lmZGVmIFNNUA0KIAkJY3B1X2ludmxwZygodm9pZCAqKXZhKTsN CkBAIC03OTUsMTAgKzgwMiwxOCBAQA0KICAqIGtlcm5lbCAtLSBpdCBpcyBt ZWFudCBvbmx5IGZvciB0ZW1wb3JhcnkgbWFwcGluZ3MuDQogICovDQogdm9p ZA0KLXBtYXBfcXJlbW92ZSh2bV9vZmZzZXRfdCB2YSwgaW50IGNvdW50KQ0K K3BtYXBfcXJlbW92ZSh2YSwgY291bnQpDQorCXZtX29mZnNldF90IHZhOw0K KwlpbnQgY291bnQ7DQogew0KLQl3aGlsZSAoY291bnQtLSA+IDApIHsNCi0J CXB0X2VudHJ5X3QgKnB0ZSA9IHZ0b3B0ZSh2YSk7DQorCXZtX29mZnNldF90 IGVuZF92YTsNCisNCisJZW5kX3ZhID0gdmEgKyBjb3VudCpQQUdFX1NJWkU7 DQorDQorCXdoaWxlICh2YSA8IGVuZF92YSkgew0KKwkJdW5zaWduZWQgKnB0 ZTsNCisNCisJCXB0ZSA9ICh1bnNpZ25lZCAqKXZ0b3B0ZSh2YSk7DQogCQkq cHRlID0gMDsNCiAjaWZkZWYgU01QDQogCQljcHVfaW52bHBnKCh2b2lkICop dmEpOw0KQEAgLTgxMyw3ICs4MjgsOSBAQA0KIH0NCiANCiBzdGF0aWMgdm1f cGFnZV90DQotcG1hcF9wYWdlX2xvb2t1cCh2bV9vYmplY3RfdCBvYmplY3Qs IHZtX3BpbmRleF90IHBpbmRleCkNCitwbWFwX3BhZ2VfbG9va3VwKG9iamVj dCwgcGluZGV4KQ0KKwl2bV9vYmplY3RfdCBvYmplY3Q7DQorCXZtX3BpbmRl eF90IHBpbmRleDsNCiB7DQogCXZtX3BhZ2VfdCBtOw0KIHJldHJ5Og0KQEAg LTgyOCwxMiArODQ1LDE0IEBADQogICogVGhpcyByb3V0aW5lIGRpcmVjdGx5 IGFmZmVjdHMgdGhlIGZvcmsgcGVyZiBmb3IgYSBwcm9jZXNzLg0KICAqLw0K IHZvaWQNCi1wbWFwX25ld19wcm9jKHN0cnVjdCBwcm9jICpwKQ0KK3BtYXBf bmV3X3Byb2MocCkNCisJc3RydWN0IHByb2MgKnA7DQogew0KLQlpbnQgaTsN CisJaW50IGksIHVwZGF0ZW5lZWRlZDsNCiAJdm1fb2JqZWN0X3QgdXBvYmo7 DQotCXZtX3BhZ2VfdCBtLCBtYVtVUEFHRVNdOw0KLQl2bV9vZmZzZXRfdCB1 cDsNCisJdm1fcGFnZV90IG07DQorCXN0cnVjdCB1c2VyICp1cDsNCisJdW5z aWduZWQgKnB0ZWssIG9sZHB0ZTsNCiANCiAJLyoNCiAJICogYWxsb2NhdGUg b2JqZWN0IGZvciB0aGUgdXBhZ2VzDQpAQCAtODQ0LDE5ICs4NjMsMjIgQEAN CiAJfQ0KIA0KIAkvKiBnZXQgYSBrZXJuZWwgdmlydHVhbCBhZGRyZXNzIGZv ciB0aGUgVVBBR0VTIGZvciB0aGlzIHByb2MgKi8NCi0JaWYgKCh1cCA9ICh2 bV9vZmZzZXRfdCkgcC0+cF9hZGRyKSA9PSAwKSB7DQotCQl1cCA9IGttZW1f YWxsb2Nfbm9mYXVsdChrZXJuZWxfbWFwLCBVUEFHRVMgKiBQQUdFX1NJWkUp Ow0KLQkJaWYgKHVwID09IDApDQorCWlmICgodXAgPSBwLT5wX2FkZHIpID09 IE5VTEwpIHsNCisJCXVwID0gKHN0cnVjdCB1c2VyICopIGttZW1fYWxsb2Nf bm9mYXVsdChrZXJuZWxfbWFwLA0KKwkJCQlVUEFHRVMgKiBQQUdFX1NJWkUp Ow0KKwkJaWYgKHVwID09IE5VTEwpDQogCQkJcGFuaWMoInBtYXBfbmV3X3By b2M6IHVfbWFwIGFsbG9jYXRpb24gZmFpbGVkIik7DQotCQlwLT5wX2FkZHIg PSAoc3RydWN0IHVzZXIgKikgdXA7DQorCQlwLT5wX2FkZHIgPSB1cDsNCiAJ fQ0KIA0KLQlmb3IoaSA9IDA7IGkgPCBVUEFHRVM7IGkrKykgew0KKwlwdGVr ID0gKHVuc2lnbmVkICopIHZ0b3B0ZSgodm1fb2Zmc2V0X3QpIHVwKTsNCisN CisJdXBkYXRlbmVlZGVkID0gMDsNCisJZm9yKGk9MDtpPFVQQUdFUztpKysp IHsNCiAJCS8qDQogCQkgKiBHZXQgYSBrZXJuZWwgc3RhY2sgcGFnZQ0KIAkJ ICovDQogCQltID0gdm1fcGFnZV9ncmFiKHVwb2JqLCBpLCBWTV9BTExPQ19O T1JNQUwgfCBWTV9BTExPQ19SRVRSWSk7DQotCQltYVtpXSA9IG07DQogDQog CQkvKg0KIAkJICogV2lyZSB0aGUgcGFnZQ0KQEAgLTg2NCwxMiArODg2LDI2 IEBADQogCQltLT53aXJlX2NvdW50Kys7DQogCQljbnQudl93aXJlX2NvdW50 Kys7DQogDQorCQlvbGRwdGUgPSAqKHB0ZWsgKyBpKTsNCisJCS8qDQorCQkg KiBFbnRlciB0aGUgcGFnZSBpbnRvIHRoZSBrZXJuZWwgYWRkcmVzcyBzcGFj ZS4NCisJCSAqLw0KKwkJKihwdGVrICsgaSkgPSBWTV9QQUdFX1RPX1BIWVMo bSkgfCBQR19SVyB8IFBHX1YgfCBwZ2VmbGFnOw0KKwkJaWYgKG9sZHB0ZSkg ew0KKwkJCWlmICgob2xkcHRlICYgUEdfRykgfHwgKGNwdV9jbGFzcyA+IENQ VUNMQVNTXzM4NikpIHsNCisJCQkJaW52bHBnKCh2bV9vZmZzZXRfdCkgdXAg KyBpICogUEFHRV9TSVpFKTsNCisJCQl9IGVsc2Ugew0KKwkJCQl1cGRhdGVu ZWVkZWQgPSAxOw0KKwkJCX0NCisJCX0NCisNCiAJCXZtX3BhZ2Vfd2FrZXVw KG0pOw0KIAkJdm1fcGFnZV9mbGFnX2NsZWFyKG0sIFBHX1pFUk8pOw0KIAkJ dm1fcGFnZV9mbGFnX3NldChtLCBQR19NQVBQRUQgfCBQR19XUklURUFCTEUp Ow0KIAkJbS0+dmFsaWQgPSBWTV9QQUdFX0JJVFNfQUxMOw0KIAl9DQotCXBt YXBfcWVudGVyKHVwLCBtYSwgVVBBR0VTKTsNCisJaWYgKHVwZGF0ZW5lZWRl ZCkNCisJCWludmx0bGIoKTsNCiB9DQogDQogLyoNCkBAIC04NzcsMjMgKzkx MywzNSBAQA0KICAqIFRoaXMgcm91dGluZSBkaXJlY3RseSBpbXBhY3RzIHRo ZSBleGl0IHBlcmYgb2YgYSBwcm9jZXNzLg0KICAqLw0KIHZvaWQNCi1wbWFw X2Rpc3Bvc2VfcHJvYyhzdHJ1Y3QgcHJvYyAqcCkNCitwbWFwX2Rpc3Bvc2Vf cHJvYyhwKQ0KKwlzdHJ1Y3QgcHJvYyAqcDsNCiB7DQogCWludCBpOw0KIAl2 bV9vYmplY3RfdCB1cG9iajsNCiAJdm1fcGFnZV90IG07DQorCXVuc2lnbmVk ICpwdGVrLCBvbGRwdGU7DQogDQogCXVwb2JqID0gcC0+cF91cGFnZXNfb2Jq Ow0KLQlwbWFwX3FyZW1vdmUoKHZtX29mZnNldF90KSBwLT5wX2FkZHIsIFVQ QUdFUyk7DQogDQotCWZvcihpID0gMDsgaSA8IFVQQUdFUzsgaSsrKSB7DQor CXB0ZWsgPSAodW5zaWduZWQgKikgdnRvcHRlKCh2bV9vZmZzZXRfdCkgcC0+ cF9hZGRyKTsNCisJZm9yKGk9MDtpPFVQQUdFUztpKyspIHsNCisNCiAJCWlm ICgobSA9IHZtX3BhZ2VfbG9va3VwKHVwb2JqLCBpKSkgPT0gTlVMTCkNCiAJ CQlwYW5pYygicG1hcF9kaXNwb3NlX3Byb2M6IHVwYWdlIGFscmVhZHkgbWlz c2luZz8/PyIpOw0KIA0KIAkJdm1fcGFnZV9idXN5KG0pOw0KKw0KKwkJb2xk cHRlID0gKihwdGVrICsgaSk7DQorCQkqKHB0ZWsgKyBpKSA9IDA7DQorCQlp ZiAoKG9sZHB0ZSAmIFBHX0cpIHx8IChjcHVfY2xhc3MgPiBDUFVDTEFTU18z ODYpKQ0KKwkJCWludmxwZygodm1fb2Zmc2V0X3QpIHAtPnBfYWRkciArIGkg KiBQQUdFX1NJWkUpOw0KIAkJdm1fcGFnZV91bndpcmUobSwgMCk7DQogCQl2 bV9wYWdlX2ZyZWUobSk7DQogCX0NCisjaWYgZGVmaW5lZChJMzg2X0NQVSkN CisJaWYgKGNwdV9jbGFzcyA8PSBDUFVDTEFTU18zODYpDQorCQlpbnZsdGxi KCk7DQorI2VuZGlmDQogDQogCS8qDQogCSAqIElmIHRoZSBwcm9jZXNzIGdv dCBzd2FwcGVkIG91dCBzb21lIG9mIGl0cyBVUEFHRVMgbWlnaHQgaGF2ZSBn b3R0ZW4NCkBAIC05MTAsMjMgKzk1OCwyMyBAQA0KICAqIEFsbG93IHRoZSBV UEFHRVMgZm9yIGEgcHJvY2VzcyB0byBiZSBwcmVqdWRpY2lhbGx5IHBhZ2Vk IG91dC4NCiAgKi8NCiB2b2lkDQotcG1hcF9zd2Fwb3V0X3Byb2Moc3RydWN0 IHByb2MgKnApDQorcG1hcF9zd2Fwb3V0X3Byb2MocCkNCisJc3RydWN0IHBy b2MgKnA7DQogew0KIAlpbnQgaTsNCiAJdm1fb2JqZWN0X3QgdXBvYmo7DQog CXZtX3BhZ2VfdCBtOw0KIA0KIAl1cG9iaiA9IHAtPnBfdXBhZ2VzX29iajsN Ci0JcG1hcF9xcmVtb3ZlKCh2bV9vZmZzZXRfdCkgcC0+cF9hZGRyLCBVUEFH RVMpOw0KLQ0KIAkvKg0KIAkgKiBsZXQgdGhlIHVwYWdlcyBiZSBwYWdlZA0K IAkgKi8NCi0JZm9yKGkgPSAwOyBpIDwgVVBBR0VTOyBpKyspIHsNCisJZm9y KGk9MDtpPFVQQUdFUztpKyspIHsNCiAJCWlmICgobSA9IHZtX3BhZ2VfbG9v a3VwKHVwb2JqLCBpKSkgPT0gTlVMTCkNCiAJCQlwYW5pYygicG1hcF9zd2Fw b3V0X3Byb2M6IHVwYWdlIGFscmVhZHkgbWlzc2luZz8/PyIpOw0KIAkJdm1f cGFnZV9kaXJ0eShtKTsNCiAJCXZtX3BhZ2VfdW53aXJlKG0sIDApOw0KKwkJ cG1hcF9rcmVtb3ZlKCAodm1fb2Zmc2V0X3QpIHAtPnBfYWRkciArIFBBR0Vf U0laRSAqIGkpOw0KIAl9DQogfQ0KIA0KQEAgLTkzNCwxNyArOTgyLDIwIEBA DQogICogQnJpbmcgdGhlIFVQQUdFUyBmb3IgYSBzcGVjaWZpZWQgcHJvY2Vz cyBiYWNrIGluLg0KICAqLw0KIHZvaWQNCi1wbWFwX3N3YXBpbl9wcm9jKHN0 cnVjdCBwcm9jICpwKQ0KK3BtYXBfc3dhcGluX3Byb2MocCkNCisJc3RydWN0 IHByb2MgKnA7DQogew0KLQlpbnQgaSwgcnY7DQorCWludCBpLHJ2Ow0KIAl2 bV9vYmplY3RfdCB1cG9iajsNCi0Jdm1fcGFnZV90IG0sIG1hW1VQQUdFU107 DQorCXZtX3BhZ2VfdCBtOw0KIA0KIAl1cG9iaiA9IHAtPnBfdXBhZ2VzX29i ajsNCisJZm9yKGk9MDtpPFVQQUdFUztpKyspIHsNCiANCi0JZm9yKGkgPSAw OyBpIDwgVVBBR0VTOyBpKyspIHsNCiAJCW0gPSB2bV9wYWdlX2dyYWIodXBv YmosIGksIFZNX0FMTE9DX05PUk1BTCB8IFZNX0FMTE9DX1JFVFJZKTsNCi0J CW1hW2ldID0gbTsNCisNCisJCXBtYXBfa2VudGVyKCgodm1fb2Zmc2V0X3Qp IHAtPnBfYWRkcikgKyBpICogUEFHRV9TSVpFLA0KKwkJCVZNX1BBR0VfVE9f UEhZUyhtKSk7DQogDQogCQlpZiAobS0+dmFsaWQgIT0gVk1fUEFHRV9CSVRT X0FMTCkgew0KIAkJCXJ2ID0gdm1fcGFnZXJfZ2V0X3BhZ2VzKHVwb2JqLCAm bSwgMSwgMCk7DQpAQCAtOTU4LDggKzEwMDksNiBAQA0KIAkJdm1fcGFnZV93 YWtldXAobSk7DQogCQl2bV9wYWdlX2ZsYWdfc2V0KG0sIFBHX01BUFBFRCB8 IFBHX1dSSVRFQUJMRSk7DQogCX0NCi0NCi0JcG1hcF9xZW50ZXIoKHZtX29m ZnNldF90KSBwLT5wX2FkZHIsIG1hLCBVUEFHRVMpOw0KIH0NCiANCiAvKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqDQpAQCAtOTcxLDggKzEwMjAsOCBAQA0KICAqIGRyb3BzIHRvIHplcm8s IHRoZW4gaXQgZGVjcmVtZW50cyB0aGUgd2lyZSBjb3VudC4NCiAgKi8NCiBz dGF0aWMgaW50IA0KLV9wbWFwX3Vud2lyZV9wdGVfaG9sZChwbWFwX3QgcG1h cCwgdm1fcGFnZV90IG0pDQotew0KK19wbWFwX3Vud2lyZV9wdGVfaG9sZChw bWFwX3QgcG1hcCwgdm1fcGFnZV90IG0pIHsNCisNCiAJd2hpbGUgKHZtX3Bh Z2Vfc2xlZXBfYnVzeShtLCBGQUxTRSwgInBtdXdwdCIpKQ0KIAkJOw0KIA0K QEAgLTk4Myw3ICsxMDMyLDggQEANCiAJCSAqLw0KIAkJcG1hcC0+cG1fcGRp clttLT5waW5kZXhdID0gMDsNCiAJCS0tcG1hcC0+cG1fc3RhdHMucmVzaWRl bnRfY291bnQ7DQotCQlpZiAocG1hcF9pc19jdXJyZW50KHBtYXApKSB7DQor CQlpZiAoKCgodW5zaWduZWQpcG1hcC0+cG1fcGRpcltQVERQVERJXSkgJiBQ R19GUkFNRSkgPT0NCisJCQkoKCh1bnNpZ25lZCkgUFREcGRlKSAmIFBHX0ZS QU1FKSkgew0KIAkJCS8qDQogCQkJICogRG8gYSBpbnZsdGxiIHRvIG1ha2Ug dGhlIGludmFsaWRhdGVkIG1hcHBpbmcNCiAJCQkgKiB0YWtlIGVmZmVjdCBp bW1lZGlhdGVseS4NCkBAIC0xMDAwLDYgKzEwNTAsNyBAQA0KIAkJICovDQog CQktLW0tPndpcmVfY291bnQ7DQogCQlpZiAobS0+d2lyZV9jb3VudCA9PSAw KSB7DQorDQogCQkJdm1fcGFnZV9mbGFzaChtKTsNCiAJCQl2bV9wYWdlX2J1 c3kobSk7DQogCQkJdm1fcGFnZV9mcmVlX3plcm8obSk7DQpAQCAtMTAyNSwy MCArMTA3NiwyMiBAQA0KICAqIGNvbmRpdGlvbmFsbHkgZnJlZSB0aGUgcGFn ZSwgYW5kIG1hbmFnZSB0aGUgaG9sZC93aXJlIGNvdW50cy4NCiAgKi8NCiBz dGF0aWMgaW50DQotcG1hcF91bnVzZV9wdChwbWFwX3QgcG1hcCwgdm1fb2Zm c2V0X3QgdmEsIHZtX3BhZ2VfdCBtcHRlKQ0KK3BtYXBfdW51c2VfcHQocG1h cCwgdmEsIG1wdGUpDQorCXBtYXBfdCBwbWFwOw0KKwl2bV9vZmZzZXRfdCB2 YTsNCisJdm1fcGFnZV90IG1wdGU7DQogew0KIAl1bnNpZ25lZCBwdGVwaW5k ZXg7DQotDQogCWlmICh2YSA+PSBVUFRfTUlOX0FERFJFU1MpDQogCQlyZXR1 cm4gMDsNCiANCiAJaWYgKG1wdGUgPT0gTlVMTCkgew0KIAkJcHRlcGluZGV4 ID0gKHZhID4+IFBEUlNISUZUKTsNCiAJCWlmIChwbWFwLT5wbV9wdHBoaW50 ICYmDQotCQkgICAgKHBtYXAtPnBtX3B0cGhpbnQtPnBpbmRleCA9PSBwdGVw aW5kZXgpKSB7DQorCQkJKHBtYXAtPnBtX3B0cGhpbnQtPnBpbmRleCA9PSBw dGVwaW5kZXgpKSB7DQogCQkJbXB0ZSA9IHBtYXAtPnBtX3B0cGhpbnQ7DQog CQl9IGVsc2Ugew0KLQkJCW1wdGUgPSBwbWFwX3BhZ2VfbG9va3VwKHBtYXAt PnBtX3B0ZW9iaiwgcHRlcGluZGV4KTsNCisJCQltcHRlID0gcG1hcF9wYWdl X2xvb2t1cCggcG1hcC0+cG1fcHRlb2JqLCBwdGVwaW5kZXgpOw0KIAkJCXBt YXAtPnBtX3B0cGhpbnQgPSBtcHRlOw0KIAkJfQ0KIAl9DQpAQCAtMTA0Nywx NiArMTEwMCwxNyBAQA0KIH0NCiANCiB2b2lkDQotcG1hcF9waW5pdDAocG1h cF90IHBtYXApDQorcG1hcF9waW5pdDAocG1hcCkNCisJc3RydWN0IHBtYXAg KnBtYXA7DQogew0KLQlwbWFwLT5wbV9wZGlyID0gKHBkX2VudHJ5X3QgKiko S0VSTkJBU0UgKyBJZGxlUFREKTsNCisJcG1hcC0+cG1fcGRpciA9DQorCQko cGRfZW50cnlfdCAqKWttZW1fYWxsb2NfcGFnZWFibGUoa2VybmVsX21hcCwg UEFHRV9TSVpFKTsNCisJcG1hcF9rZW50ZXIoKHZtX29mZnNldF90KSBwbWFw LT5wbV9wZGlyLCAodm1fb2Zmc2V0X3QpIElkbGVQVEQpOw0KKwlwbWFwLT5w bV9jb3VudCA9IDE7DQogCXBtYXAtPnBtX2FjdGl2ZSA9IDA7DQogCXBtYXAt PnBtX3B0cGhpbnQgPSBOVUxMOw0KIAlUQUlMUV9JTklUKCZwbWFwLT5wbV9w dmxpc3QpOw0KIAliemVybygmcG1hcC0+cG1fc3RhdHMsIHNpemVvZiBwbWFw LT5wbV9zdGF0cyk7DQotI2lmZGVmIFBBRQ0KLQlwbWFwLT5wbV9wZHB0ID0g SWRsZVBEUFQ7DQotI2VuZGlmDQogfQ0KIA0KIC8qDQpAQCAtMTA2NCw2NiAr MTExOCw1MSBAQA0KICAqIHN1Y2ggYXMgb25lIGluIGEgdm1zcGFjZSBzdHJ1 Y3R1cmUuDQogICovDQogdm9pZA0KLXBtYXBfcGluaXQocG1hcF90IHBtYXAp DQorcG1hcF9waW5pdChwbWFwKQ0KKwlyZWdpc3RlciBzdHJ1Y3QgcG1hcCAq cG1hcDsNCiB7DQotCXZtX3BhZ2VfdCBtLCBtYVtOUEdQVERdOw0KLQl2bV9w YWRkcl90IHBhOw0KLQlpbnQgaTsNCisJdm1fcGFnZV90IHB0ZHBnOw0KIA0K IAkvKg0KIAkgKiBObyBuZWVkIHRvIGFsbG9jYXRlIHBhZ2UgdGFibGUgc3Bh Y2UgeWV0IGJ1dCB3ZSBkbyBuZWVkIGEgdmFsaWQNCiAJICogcGFnZSBkaXJl Y3RvcnkgdGFibGUuDQogCSAqLw0KLQlpZiAocG1hcC0+cG1fcGRpciA9PSBO VUxMKSB7DQotCQlwbWFwLT5wbV9wZGlyID0gKHBkX2VudHJ5X3QgKilrbWVt X2FsbG9jX3BhZ2VhYmxlKGtlcm5lbF9tYXAsDQotCQkgICAgTlBHUFREICog UEFHRV9TSVpFKTsNCi0jaWZkZWYgUEFFDQotCQlwbWFwLT5wbV9wZHB0ID0g cG1hcF9hbGxvY19wZHB0KCk7DQotI2VuZGlmDQotCX0NCisJaWYgKHBtYXAt PnBtX3BkaXIgPT0gTlVMTCkNCisJCXBtYXAtPnBtX3BkaXIgPQ0KKwkJCShw ZF9lbnRyeV90ICopa21lbV9hbGxvY19wYWdlYWJsZShrZXJuZWxfbWFwLCBQ QUdFX1NJWkUpOw0KIA0KIAkvKg0KIAkgKiBhbGxvY2F0ZSBvYmplY3QgZm9y IHRoZSBwdGVzDQogCSAqLw0KIAlpZiAocG1hcC0+cG1fcHRlb2JqID09IE5V TEwpDQotCQlwbWFwLT5wbV9wdGVvYmogPSB2bV9vYmplY3RfYWxsb2NhdGUo T0JKVF9ERUZBVUxULA0KLQkJICAgIFBURFBUREkgKyBOUEdQVEQpOw0KKwkJ cG1hcC0+cG1fcHRlb2JqID0gdm1fb2JqZWN0X2FsbG9jYXRlKCBPQkpUX0RF RkFVTFQsIFBURFBUREkgKyAxKTsNCiANCiAJLyoNCiAJICogYWxsb2NhdGUg dGhlIHBhZ2UgZGlyZWN0b3J5IHBhZ2UNCiAJICovDQotCWZvciAoaSA9IDA7 IGkgPCBOUEdQVEQ7IGkrKykgew0KLQkJbSA9IHZtX3BhZ2VfZ3JhYihwbWFw LT5wbV9wdGVvYmosIFBURFBUREkgKyBpLA0KLQkJICAgIFZNX0FMTE9DX05P Uk1BTCB8IFZNX0FMTE9DX1JFVFJZKTsNCi0JCW1hW2ldID0gbTsNCisJcHRk cGcgPSB2bV9wYWdlX2dyYWIoIHBtYXAtPnBtX3B0ZW9iaiwgUFREUFRESSwN CisJCQlWTV9BTExPQ19OT1JNQUwgfCBWTV9BTExPQ19SRVRSWSk7DQogDQot CQltLT53aXJlX2NvdW50ID0gMTsNCi0JCSsrY250LnZfd2lyZV9jb3VudDsN CisJcHRkcGctPndpcmVfY291bnQgPSAxOw0KKwkrK2NudC52X3dpcmVfY291 bnQ7DQogDQotCQl2bV9wYWdlX2ZsYWdfY2xlYXIobSwgUEdfTUFQUEVEIHwg UEdfQlVTWSk7DQotCQltLT52YWxpZCA9IFZNX1BBR0VfQklUU19BTEw7DQot CX0NCiANCi0JcG1hcF9xZW50ZXIoKHZtX29mZnNldF90KXBtYXAtPnBtX3Bk aXIsIG1hLCBOUEdQVEQpOw0KKwl2bV9wYWdlX2ZsYWdfY2xlYXIocHRkcGcs IFBHX01BUFBFRCB8IFBHX0JVU1kpOyAvKiBub3QgdXN1YWxseSBtYXBwZWQq Lw0KKwlwdGRwZy0+dmFsaWQgPSBWTV9QQUdFX0JJVFNfQUxMOw0KIA0KLQlm b3IgKGkgPSAwOyBpIDwgTlBHUFREOyBpKyspIHsNCi0JCWlmICgobWFbaV0t PmZsYWdzICYgUEdfWkVSTykgPT0gMCkNCi0JCQliemVybyhwbWFwLT5wbV9w ZGlyICsgaSAqIE5QREVQRywgUEFHRV9TSVpFKTsNCi0JfQ0KKwlwbWFwX2tl bnRlcigodm1fb2Zmc2V0X3QpIHBtYXAtPnBtX3BkaXIsIFZNX1BBR0VfVE9f UEhZUyhwdGRwZykpOw0KKwlpZiAoKHB0ZHBnLT5mbGFncyAmIFBHX1pFUk8p ID09IDApDQorCQliemVybyhwbWFwLT5wbV9wZGlyLCBQQUdFX1NJWkUpOw0K IA0KICNpZmRlZiBTTVANCiAJcG1hcC0+cG1fcGRpcltNUFBUREldID0gUFRE W01QUFRESV07DQogI2VuZGlmDQogDQogCS8qIGluc3RhbGwgc2VsZi1yZWZl cmVudGlhbCBhZGRyZXNzIG1hcHBpbmcgZW50cnkgKi8NCi0JZm9yIChpID0g MDsgaSA8IE5QR1BURDsgaSsrKSB7DQotCQlwYSA9IFZNX1BBR0VfVE9fUEhZ UyhtYVtpXSk7DQotCQlwbWFwLT5wbV9wZGlyW1BURFBUREkgKyBpXSA9IHBh IHwgUEdfViB8IFBHX1JXIHwgUEdfQSB8IFBHX007DQotI2lmZGVmIFBBRQ0K LQkJcG1hcC0+cG1fcGRwdFtpXSA9IHBhIHwgUEdfVjsNCi0jZW5kaWYNCi0J fQ0KKwkqKHVuc2lnbmVkICopIChwbWFwLT5wbV9wZGlyICsgUFREUFRESSkg PQ0KKwkJVk1fUEFHRV9UT19QSFlTKHB0ZHBnKSB8IFBHX1YgfCBQR19SVyB8 IFBHX0EgfCBQR19NOw0KIA0KKwlwbWFwLT5wbV9jb3VudCA9IDE7DQogCXBt YXAtPnBtX2FjdGl2ZSA9IDA7DQogCXBtYXAtPnBtX3B0cGhpbnQgPSBOVUxM Ow0KIAlUQUlMUV9JTklUKCZwbWFwLT5wbV9wdmxpc3QpOw0KQEAgLTExMzcs MTAgKzExNzYsNTggQEANCiAgKiBidXQgYmVmb3JlIHRoaXMgcG1hcCBpcyBh Y3RpdmF0ZWQuDQogICovDQogdm9pZA0KLXBtYXBfcGluaXQyKHBtYXBfdCBw bWFwKQ0KK3BtYXBfcGluaXQyKHBtYXApDQorCXN0cnVjdCBwbWFwICpwbWFw Ow0KIHsNCiAJLyogWFhYIGNvcGllcyBjdXJyZW50IHByb2Nlc3MsIGRvZXMg bm90IGZpbGwgaW4gTVBQVERJICovDQotCWJjb3B5KFBURCArIEtQVERJLCBw bWFwLT5wbV9wZGlyICsgS1BUREksIG5rcHQgKiBQREVTSVpFKTsNCisJYmNv cHkoUFREICsgS1BUREksIHBtYXAtPnBtX3BkaXIgKyBLUFRESSwgbmtwdCAq IFBURVNJWkUpOw0KK30NCisNCitzdGF0aWMgaW50DQorcG1hcF9yZWxlYXNl X2ZyZWVfcGFnZShwbWFwLCBwKQ0KKwlzdHJ1Y3QgcG1hcCAqcG1hcDsNCisJ dm1fcGFnZV90IHA7DQorew0KKwl1bnNpZ25lZCAqcGRlID0gKHVuc2lnbmVk ICopIHBtYXAtPnBtX3BkaXI7DQorCS8qDQorCSAqIFRoaXMgY29kZSBvcHRp bWl6ZXMgdGhlIGNhc2Ugb2YgZnJlZWluZyBub24tYnVzeQ0KKwkgKiBwYWdl LXRhYmxlIHBhZ2VzLiAgVGhvc2UgcGFnZXMgYXJlIHplcm8gbm93LCBhbmQN CisJICogbWlnaHQgYXMgd2VsbCBiZSBwbGFjZWQgZGlyZWN0bHkgaW50byB0 aGUgemVybyBxdWV1ZS4NCisJICovDQorCWlmICh2bV9wYWdlX3NsZWVwX2J1 c3kocCwgRkFMU0UsICJwbWFwcmwiKSkNCisJCXJldHVybiAwOw0KKw0KKwl2 bV9wYWdlX2J1c3kocCk7DQorDQorCS8qDQorCSAqIFJlbW92ZSB0aGUgcGFn ZSB0YWJsZSBwYWdlIGZyb20gdGhlIHByb2Nlc3NlcyBhZGRyZXNzIHNwYWNl Lg0KKwkgKi8NCisJcGRlW3AtPnBpbmRleF0gPSAwOw0KKwlwbWFwLT5wbV9z dGF0cy5yZXNpZGVudF9jb3VudC0tOw0KKw0KKwlpZiAocC0+aG9sZF9jb3Vu dCkgIHsNCisJCXBhbmljKCJwbWFwX3JlbGVhc2U6IGZyZWVpbmcgaGVsZCBw YWdlIHRhYmxlIHBhZ2UiKTsNCisJfQ0KKwkvKg0KKwkgKiBQYWdlIGRpcmVj dG9yeSBwYWdlcyBuZWVkIHRvIGhhdmUgdGhlIGtlcm5lbA0KKwkgKiBzdHVm ZiBjbGVhcmVkLCBzbyB0aGV5IGNhbiBnbyBpbnRvIHRoZSB6ZXJvIHF1ZXVl IGFsc28uDQorCSAqLw0KKwlpZiAocC0+cGluZGV4ID09IFBURFBUREkpIHsN CisJCWJ6ZXJvKHBkZSArIEtQVERJLCBua3B0ICogUFRFU0laRSk7DQorI2lm ZGVmIFNNUA0KKwkJcGRlW01QUFRESV0gPSAwOw0KKyNlbmRpZg0KKwkJcGRl W0FQVERQVERJXSA9IDA7DQorCQlwbWFwX2tyZW1vdmUoKHZtX29mZnNldF90 KSBwbWFwLT5wbV9wZGlyKTsNCisJfQ0KKw0KKwlpZiAocG1hcC0+cG1fcHRw aGludCAmJiAocG1hcC0+cG1fcHRwaGludC0+cGluZGV4ID09IHAtPnBpbmRl eCkpDQorCQlwbWFwLT5wbV9wdHBoaW50ID0gTlVMTDsNCisNCisJcC0+d2ly ZV9jb3VudC0tOw0KKwljbnQudl93aXJlX2NvdW50LS07DQorCXZtX3BhZ2Vf ZnJlZV96ZXJvKHApOw0KKwlyZXR1cm4gMTsNCiB9DQogDQogLyoNCkBAIC0x MTQ4LDEwICsxMjM1LDExIEBADQogICogbWFwcGVkIGNvcnJlY3RseS4NCiAg Ki8NCiBzdGF0aWMgdm1fcGFnZV90DQotX3BtYXBfYWxsb2NwdGUocG1hcF90 IHBtYXAsIHVuc2lnbmVkIHB0ZXBpbmRleCkNCitfcG1hcF9hbGxvY3B0ZShw bWFwLCBwdGVwaW5kZXgpDQorCXBtYXBfdAlwbWFwOw0KKwl1bnNpZ25lZCBw dGVwaW5kZXg7DQogew0KLQl2bV9vZmZzZXRfdCBwdGV2YTsNCi0Jdm1fcGFk ZHJfdCBwdGVwYTsNCisJdm1fb2Zmc2V0X3QgcHRldmEsIHB0ZXBhOw0KIAl2 bV9wYWdlX3QgbTsNCiANCiAJLyoNCkBAIC0xMTgxLDcgKzEyNjksOCBAQA0K IAlwbWFwLT5wbV9zdGF0cy5yZXNpZGVudF9jb3VudCsrOw0KIA0KIAlwdGVw YSA9IFZNX1BBR0VfVE9fUEhZUyhtKTsNCi0JcG1hcC0+cG1fcGRpcltwdGVw aW5kZXhdID0gcHRlcGEgfCBQR19VIHwgUEdfUlcgfCBQR19WIHwgUEdfQSB8 IFBHX007DQorCXBtYXAtPnBtX3BkaXJbcHRlcGluZGV4XSA9DQorCQkocGRf ZW50cnlfdCkgKHB0ZXBhIHwgUEdfVSB8IFBHX1JXIHwgUEdfViB8IFBHX0Eg fCBQR19NKTsNCiANCiAJLyoNCiAJICogU2V0IHRoZSBwYWdlIHRhYmxlIGhp bnQNCkBAIC0xMTkzLDcgKzEyODIsOCBAQA0KIAkgKiBkbyBpdCB3aXRoIHRo ZSByb3V0aW5lIHRoYXQgbWFwcyB0aGUgcGFnZSBleHBsaWNpdGx5Lg0KIAkg Ki8NCiAJaWYgKChtLT5mbGFncyAmIFBHX1pFUk8pID09IDApIHsNCi0JCWlm IChwbWFwX2lzX2N1cnJlbnQocG1hcCkpIHsNCisJCWlmICgoKCh1bnNpZ25l ZClwbWFwLT5wbV9wZGlyW1BURFBUREldKSAmIFBHX0ZSQU1FKSA9PQ0KKwkJ CSgoKHVuc2lnbmVkKSBQVERwZGUpICYgUEdfRlJBTUUpKSB7DQogCQkJcHRl dmEgPSBVUFRfTUlOX0FERFJFU1MgKyBpMzg2X3B0b2IocHRlcGluZGV4KTsN CiAJCQliemVybygoY2FkZHJfdCkgcHRldmEsIFBBR0VfU0laRSk7DQogCQl9 IGVsc2Ugew0KQEAgLTEyMTAsMTAgKzEzMDAsMTIgQEANCiB9DQogDQogc3Rh dGljIHZtX3BhZ2VfdA0KLXBtYXBfYWxsb2NwdGUocG1hcF90IHBtYXAsIHZt X29mZnNldF90IHZhKQ0KK3BtYXBfYWxsb2NwdGUocG1hcCwgdmEpDQorCXBt YXBfdAlwbWFwOw0KKwl2bV9vZmZzZXRfdCB2YTsNCiB7DQogCXVuc2lnbmVk IHB0ZXBpbmRleDsNCi0JcGRfZW50cnlfdCBwZGU7DQorCXZtX29mZnNldF90 IHB0ZXBhOw0KIAl2bV9wYWdlX3QgbTsNCiANCiAJLyoNCkBAIC0xMjI0LDE1 ICsxMzE2LDE1IEBADQogCS8qDQogCSAqIEdldCB0aGUgcGFnZSBkaXJlY3Rv cnkgZW50cnkNCiAJICovDQotCXBkZSA9IHBtYXAtPnBtX3BkaXJbcHRlcGlu ZGV4XTsNCisJcHRlcGEgPSAodm1fb2Zmc2V0X3QpIHBtYXAtPnBtX3BkaXJb cHRlcGluZGV4XTsNCiANCiAJLyoNCiAJICogVGhpcyBzdXBwb3J0cyBzd2l0 Y2hpbmcgZnJvbSBhIDRNQiBwYWdlIHRvIGENCiAJICogbm9ybWFsIDRLIHBh Z2UuDQogCSAqLw0KLQlpZiAocGRlICYgUEdfUFMpIHsNCisJaWYgKHB0ZXBh ICYgUEdfUFMpIHsNCiAJCXBtYXAtPnBtX3BkaXJbcHRlcGluZGV4XSA9IDA7 DQotCQlwZGUgPSAwOw0KKwkJcHRlcGEgPSAwOw0KIAkJaW52bHRsYigpOw0K IAl9DQogDQpAQCAtMTI0MCwxNSArMTMzMiwxNiBAQA0KIAkgKiBJZiB0aGUg cGFnZSB0YWJsZSBwYWdlIGlzIG1hcHBlZCwgd2UganVzdCBpbmNyZW1lbnQg dGhlDQogCSAqIGhvbGQgY291bnQsIGFuZCBhY3RpdmF0ZSBpdC4NCiAJICov DQotCWlmIChwZGUgJiBQR19WKSB7DQorCWlmIChwdGVwYSkgew0KIAkJLyoN CiAJCSAqIEluIG9yZGVyIHRvIGdldCB0aGUgcGFnZSB0YWJsZSBwYWdlLCB0 cnkgdGhlDQogCQkgKiBoaW50IGZpcnN0Lg0KIAkJICovDQotCQlpZiAocG1h cC0+cG1fcHRwaGludCAmJiBwbWFwLT5wbV9wdHBoaW50LT5waW5kZXggPT0g cHRlcGluZGV4KSB7DQorCQlpZiAocG1hcC0+cG1fcHRwaGludCAmJg0KKwkJ CShwbWFwLT5wbV9wdHBoaW50LT5waW5kZXggPT0gcHRlcGluZGV4KSkgew0K IAkJCW0gPSBwbWFwLT5wbV9wdHBoaW50Ow0KIAkJfSBlbHNlIHsNCi0JCQlt ID0gcG1hcF9wYWdlX2xvb2t1cChwbWFwLT5wbV9wdGVvYmosIHB0ZXBpbmRl eCk7DQorCQkJbSA9IHBtYXBfcGFnZV9sb29rdXAoIHBtYXAtPnBtX3B0ZW9i aiwgcHRlcGluZGV4KTsNCiAJCQlwbWFwLT5wbV9wdHBoaW50ID0gbTsNCiAJ CX0NCiAJCW0tPmhvbGRfY291bnQrKzsNCkBAIC0xMjcxLDI3ICsxMzY0LDM3 IEBADQogICogU2hvdWxkIG9ubHkgYmUgY2FsbGVkIGlmIHRoZSBtYXAgY29u dGFpbnMgbm8gdmFsaWQgbWFwcGluZ3MuDQogICovDQogdm9pZA0KLXBtYXBf cmVsZWFzZShwbWFwX3QgcG1hcCkNCitwbWFwX3JlbGVhc2UocG1hcCkNCisJ cmVnaXN0ZXIgc3RydWN0IHBtYXAgKnBtYXA7DQogew0KLQl2bV9wYWdlX3Qg bTsNCisJdm1fcGFnZV90IHAsbixwdGRwZzsNCiAJdm1fb2JqZWN0X3Qgb2Jq ZWN0ID0gcG1hcC0+cG1fcHRlb2JqOw0KKwlpbnQgY3VyZ2VuZXJhdGlvbjsN CiANCi0JYnplcm8ocG1hcC0+cG1fcGRpciArIFBURFBUREksIChua3B0ICsg TlBHUFREKSAqIFBERVNJWkUpOw0KLSNpZmRlZiBTTVANCi0JcG1hcC0+cG1f cGRpcltNUFBUREldID0gMDsNCisjaWYgZGVmaW5lZChESUFHTk9TVElDKQ0K KwlpZiAob2JqZWN0LT5yZWZfY291bnQgIT0gMSkNCisJCXBhbmljKCJwbWFw X3JlbGVhc2U6IHB0ZW9iaiByZWZlcmVuY2UgY291bnQgIT0gMSIpOw0KICNl bmRpZg0KLQlwbWFwX3FyZW1vdmUoKHZtX29mZnNldF90KXBtYXAtPnBtX3Bk aXIsIE5QR1BURCk7DQotDQotCXdoaWxlICgobSA9IFRBSUxRX0ZJUlNUKCZv YmplY3QtPm1lbXEpKSkgew0KLQkJaWYgKG0tPnBpbmRleCA8IFBURFBUREkg fHwgbS0+cGluZGV4ID49IEtQVERJKQ0KLQkJCXBhbmljKCJwbWFwX3JlbGVh c2U6IG5vbiBwdGQgcGFnZSIpOw0KLQkJbS0+d2lyZV9jb3VudC0tOw0KLQkJ Y250LnZfd2lyZV9jb3VudC0tOw0KLQkJdm1fcGFnZV9idXN5KG0pOw0KLQkJ dm1fcGFnZV9mcmVlX3plcm8obSk7DQorCQ0KKwlwdGRwZyA9IE5VTEw7DQor cmV0cnk6DQorCWN1cmdlbmVyYXRpb24gPSBvYmplY3QtPmdlbmVyYXRpb247 DQorCWZvciAocCA9IFRBSUxRX0ZJUlNUKCZvYmplY3QtPm1lbXEpOyBwICE9 IE5VTEw7IHAgPSBuKSB7DQorCQluID0gVEFJTFFfTkVYVChwLCBsaXN0cSk7 DQorCQlpZiAocC0+cGluZGV4ID09IFBURFBUREkpIHsNCisJCQlwdGRwZyA9 IHA7DQorCQkJY29udGludWU7DQorCQl9DQorCQl3aGlsZSAoMSkgew0KKwkJ CWlmICghcG1hcF9yZWxlYXNlX2ZyZWVfcGFnZShwbWFwLCBwKSAmJg0KKwkJ CQkob2JqZWN0LT5nZW5lcmF0aW9uICE9IGN1cmdlbmVyYXRpb24pKQ0KKwkJ CQlnb3RvIHJldHJ5Ow0KKwkJfQ0KIAl9DQotfQ0KIA0KKwlpZiAocHRkcGcg JiYgIXBtYXBfcmVsZWFzZV9mcmVlX3BhZ2UocG1hcCwgcHRkcGcpKQ0KKwkJ Z290byByZXRyeTsNCit9DQogDA0KIHN0YXRpYyBpbnQNCiBrdm1fc2l6ZShT WVNDVExfSEFORExFUl9BUkdTKQ0KQEAgLTEzMjIsNyArMTQyNSw3IEBADQog CXN0cnVjdCBwcm9jICpwOw0KIAlzdHJ1Y3QgcG1hcCAqcG1hcDsNCiAJaW50 IHM7DQotCXZtX3BhZGRyX3QgcHRwcGFkZHI7DQorCXZtX29mZnNldF90IHB0 cHBhZGRyOw0KIAl2bV9wYWdlX3QgbmtwZzsNCiAJcGRfZW50cnlfdCBuZXdw ZGlyOw0KIA0KQEAgLTEzMzAsMTcgKzE0MzMsMTUgQEANCiAJaWYgKGtlcm5l bF92bV9lbmQgPT0gMCkgew0KIAkJa2VybmVsX3ZtX2VuZCA9IEtFUk5CQVNF Ow0KIAkJbmtwdCA9IDA7DQotCQl3aGlsZSAocGRpcl9wZGUoUFRELCBrZXJu ZWxfdm1fZW5kKSAmIFBHX1YpIHsNCi0JCQlrZXJuZWxfdm1fZW5kID0gKGtl cm5lbF92bV9lbmQgKyBQQUdFX1NJWkUgKiBOUFRFUEcpICYNCi0JCQkgICAg fihQQUdFX1NJWkUgKiBOUFRFUEcgLSAxKTsNCisJCXdoaWxlIChwZGlyX3Bk ZShQVEQsIGtlcm5lbF92bV9lbmQpKSB7DQorCQkJa2VybmVsX3ZtX2VuZCA9 IChrZXJuZWxfdm1fZW5kICsgUEFHRV9TSVpFICogTlBURVBHKSAmIH4oUEFH RV9TSVpFICogTlBURVBHIC0gMSk7DQogCQkJbmtwdCsrOw0KIAkJfQ0KIAl9 DQogCWFkZHIgPSAoYWRkciArIFBBR0VfU0laRSAqIE5QVEVQRykgJiB+KFBB R0VfU0laRSAqIE5QVEVQRyAtIDEpOw0KIAl3aGlsZSAoa2VybmVsX3ZtX2Vu ZCA8IGFkZHIpIHsNCi0JCWlmIChwZGlyX3BkZShQVEQsIGtlcm5lbF92bV9l bmQpICYgUEdfVikgew0KLQkJCWtlcm5lbF92bV9lbmQgPSAoa2VybmVsX3Zt X2VuZCArIFBBR0VfU0laRSAqIE5QVEVQRykgJg0KLQkJCSAgICB+KFBBR0Vf U0laRSAqIE5QVEVQRyAtIDEpOw0KKwkJaWYgKHBkaXJfcGRlKFBURCwga2Vy bmVsX3ZtX2VuZCkpIHsNCisJCQlrZXJuZWxfdm1fZW5kID0gKGtlcm5lbF92 bV9lbmQgKyBQQUdFX1NJWkUgKiBOUFRFUEcpICYgfihQQUdFX1NJWkUgKiBO UFRFUEcgLSAxKTsNCiAJCQljb250aW51ZTsNCiAJCX0NCiANCkBAIC0xMzU2 LDcgKzE0NTcsNyBAQA0KIAkJdm1fcGFnZV93aXJlKG5rcGcpOw0KIAkJcHRw cGFkZHIgPSBWTV9QQUdFX1RPX1BIWVMobmtwZyk7DQogCQlwbWFwX3plcm9f cGFnZShwdHBwYWRkcik7DQotCQluZXdwZGlyID0gcHRwcGFkZHIgfCBQR19W IHwgUEdfUlcgfCBQR19BIHwgUEdfTTsNCisJCW5ld3BkaXIgPSAocGRfZW50 cnlfdCkgKHB0cHBhZGRyIHwgUEdfViB8IFBHX1JXIHwgUEdfQSB8IFBHX00p Ow0KIAkJcGRpcl9wZGUoUFRELCBrZXJuZWxfdm1fZW5kKSA9IG5ld3BkaXI7 DQogDQogCQlMSVNUX0ZPUkVBQ0gocCwgJmFsbHByb2MsIHBfbGlzdCkgew0K QEAgLTEzNjYsMTIgKzE0NjcsNDQgQEANCiAJCQl9DQogCQl9DQogCQkqcG1h cF9wZGUoa2VybmVsX3BtYXAsIGtlcm5lbF92bV9lbmQpID0gbmV3cGRpcjsN Ci0JCWtlcm5lbF92bV9lbmQgPSAoa2VybmVsX3ZtX2VuZCArIFBBR0VfU0la RSAqIE5QVEVQRykgJg0KLQkJICAgIH4oUEFHRV9TSVpFICogTlBURVBHIC0g MSk7DQorCQlrZXJuZWxfdm1fZW5kID0gKGtlcm5lbF92bV9lbmQgKyBQQUdF X1NJWkUgKiBOUFRFUEcpICYgfihQQUdFX1NJWkUgKiBOUFRFUEcgLSAxKTsN CiAJfQ0KIAlzcGx4KHMpOw0KIH0NCiANCisvKg0KKyAqCVJldGlyZSB0aGUg Z2l2ZW4gcGh5c2ljYWwgbWFwIGZyb20gc2VydmljZS4NCisgKglTaG91bGQg b25seSBiZSBjYWxsZWQgaWYgdGhlIG1hcCBjb250YWlucw0KKyAqCW5vIHZh bGlkIG1hcHBpbmdzLg0KKyAqLw0KK3ZvaWQNCitwbWFwX2Rlc3Ryb3kocG1h cCkNCisJcmVnaXN0ZXIgcG1hcF90IHBtYXA7DQorew0KKwlpbnQgY291bnQ7 DQorDQorCWlmIChwbWFwID09IE5VTEwpDQorCQlyZXR1cm47DQorDQorCWNv dW50ID0gLS1wbWFwLT5wbV9jb3VudDsNCisJaWYgKGNvdW50ID09IDApIHsN CisJCXBtYXBfcmVsZWFzZShwbWFwKTsNCisJCXBhbmljKCJkZXN0cm95aW5n IGEgcG1hcCBpcyBub3QgeWV0IGltcGxlbWVudGVkIik7DQorCX0NCit9DQor DQorLyoNCisgKglBZGQgYSByZWZlcmVuY2UgdG8gdGhlIHNwZWNpZmllZCBw bWFwLg0KKyAqLw0KK3ZvaWQNCitwbWFwX3JlZmVyZW5jZShwbWFwKQ0KKwlw bWFwX3QgcG1hcDsNCit7DQorCWlmIChwbWFwICE9IE5VTEwpIHsNCisJCXBt YXAtPnBtX2NvdW50Kys7DQorCX0NCit9DQorDQogLyoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICogcGFn ZSBtYW5hZ2VtZW50IHJvdXRpbmVzLg0KICAqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQpAQCAtMTM4MCw3 ICsxNTEzLDggQEANCiAgKiBmcmVlIHRoZSBwdl9lbnRyeSBiYWNrIHRvIHRo ZSBmcmVlIGxpc3QNCiAgKi8NCiBzdGF0aWMgUE1BUF9JTkxJTkUgdm9pZA0K LWZyZWVfcHZfZW50cnkocHZfZW50cnlfdCBwdikNCitmcmVlX3B2X2VudHJ5 KHB2KQ0KKwlwdl9lbnRyeV90IHB2Ow0KIHsNCiAJcHZfZW50cnlfY291bnQt LTsNCiAJemZyZWVpKHB2em9uZSwgcHYpOw0KQEAgLTEzOTYsOCArMTUzMCw5 IEBADQogZ2V0X3B2X2VudHJ5KHZvaWQpDQogew0KIAlwdl9lbnRyeV9jb3Vu dCsrOw0KLQlpZiAocHZfZW50cnlfaGlnaF93YXRlciAmJiAocHZfZW50cnlf Y291bnQgPiBwdl9lbnRyeV9oaWdoX3dhdGVyKSAmJg0KLQkgICAgKHBtYXBf cGFnZWRhZW1vbl93YWtlbiA9PSAwKSkgew0KKwlpZiAocHZfZW50cnlfaGln aF93YXRlciAmJg0KKwkJKHB2X2VudHJ5X2NvdW50ID4gcHZfZW50cnlfaGln aF93YXRlcikgJiYNCisJCShwbWFwX3BhZ2VkYWVtb25fd2FrZW4gPT0gMCkp IHsNCiAJCXBtYXBfcGFnZWRhZW1vbl93YWtlbiA9IDE7DQogCQl3YWtldXAg KCZ2bV9wYWdlc19uZWVkZWQpOw0KIAl9DQpAQCAtMTQ0Miw3ICsxNTc3LDEw IEBADQogICovDQogDQogc3RhdGljIGludA0KLXBtYXBfcmVtb3ZlX2VudHJ5 KHBtYXBfdCBwbWFwLCB2bV9wYWdlX3QgbSwgdm1fb2Zmc2V0X3QgdmEpDQor cG1hcF9yZW1vdmVfZW50cnkocG1hcCwgbSwgdmEpDQorCXN0cnVjdCBwbWFw ICpwbWFwOw0KKwl2bV9wYWdlX3QgbTsNCisJdm1fb2Zmc2V0X3QgdmE7DQog ew0KIAlwdl9lbnRyeV90IHB2Ow0KIAlpbnQgcnR2YWw7DQpAQCAtMTQ2Myw2 ICsxNjAxLDcgQEANCiANCiAJcnR2YWwgPSAwOw0KIAlpZiAocHYpIHsNCisN CiAJCXJ0dmFsID0gcG1hcF91bnVzZV9wdChwbWFwLCB2YSwgcHYtPnB2X3B0 ZW0pOw0KIAkJVEFJTFFfUkVNT1ZFKCZtLT5tZC5wdl9saXN0LCBwdiwgcHZf bGlzdCk7DQogCQltLT5tZC5wdl9saXN0X2NvdW50LS07DQpAQCAtMTQ4Miw4 ICsxNjIxLDEzIEBADQogICogKHBtYXAsIHZhKS4NCiAgKi8NCiBzdGF0aWMg dm9pZA0KLXBtYXBfaW5zZXJ0X2VudHJ5KHBtYXBfdCBwbWFwLCB2bV9vZmZz ZXRfdCB2YSwgdm1fcGFnZV90IG1wdGUsIHZtX3BhZ2VfdCBtKQ0KK3BtYXBf aW5zZXJ0X2VudHJ5KHBtYXAsIHZhLCBtcHRlLCBtKQ0KKwlwbWFwX3QgcG1h cDsNCisJdm1fb2Zmc2V0X3QgdmE7DQorCXZtX3BhZ2VfdCBtcHRlOw0KKwl2 bV9wYWdlX3QgbTsNCiB7DQorDQogCWludCBzOw0KIAlwdl9lbnRyeV90IHB2 Ow0KIA0KQEAgLTE1MDQsMTIgKzE2NDgsMTUgQEANCiAgKiBwbWFwX3JlbW92 ZV9wdGU6IGRvIHRoZSB0aGluZ3MgdG8gdW5tYXAgYSBwYWdlIGluIGEgcHJv Y2Vzcw0KICAqLw0KIHN0YXRpYyBpbnQNCi1wbWFwX3JlbW92ZV9wdGUocG1h cF90IHBtYXAsIHB0X2VudHJ5X3QgKnB0cSwgdm1fb2Zmc2V0X3QgdmEpDQor cG1hcF9yZW1vdmVfcHRlKHBtYXAsIHB0cSwgdmEpDQorCXN0cnVjdCBwbWFw ICpwbWFwOw0KKwl1bnNpZ25lZCAqcHRxOw0KKwl2bV9vZmZzZXRfdCB2YTsN CiB7DQotCXB0X2VudHJ5X3Qgb2xkcHRlOw0KKwl1bnNpZ25lZCBvbGRwdGU7 DQogCXZtX3BhZ2VfdCBtOw0KIA0KLQlvbGRwdGUgPSBwdGVfc3RvcmUocHRx LCAwKTsNCisJb2xkcHRlID0gbG9hZGFuZGNsZWFyKHB0cSk7DQogCWlmIChv bGRwdGUgJiBQR19XKQ0KIAkJcG1hcC0+cG1fc3RhdHMud2lyZWRfY291bnQg LT0gMTsNCiAJLyoNCkBAIC0xNTIzLDcgKzE2NzAsNyBAQA0KIAkJbSA9IFBI WVNfVE9fVk1fUEFHRShvbGRwdGUpOw0KIAkJaWYgKG9sZHB0ZSAmIFBHX00p IHsNCiAjaWYgZGVmaW5lZChQTUFQX0RJQUdOT1NUSUMpDQotCQkJaWYgKHBt YXBfbndfbW9kaWZpZWQob2xkcHRlKSkgew0KKwkJCWlmIChwbWFwX253X21v ZGlmaWVkKChwdF9lbnRyeV90KSBvbGRwdGUpKSB7DQogCQkJCXByaW50ZigN CiAJInBtYXBfcmVtb3ZlOiBtb2RpZmllZCBwYWdlIG5vdCB3cml0YWJsZTog dmE6IDB4JXgsIHB0ZTogMHgleFxuIiwNCiAJCQkJICAgIHZhLCBvbGRwdGUp Ow0KQEAgLTE1NDYsMTggKzE2OTMsMjUgQEANCiAgKiBSZW1vdmUgYSBzaW5n bGUgcGFnZSBmcm9tIGEgcHJvY2VzcyBhZGRyZXNzIHNwYWNlDQogICovDQog c3RhdGljIHZvaWQNCi1wbWFwX3JlbW92ZV9wYWdlKHBtYXBfdCBwbWFwLCB2 bV9vZmZzZXRfdCB2YSkNCitwbWFwX3JlbW92ZV9wYWdlKHBtYXAsIHZhKQ0K KwlzdHJ1Y3QgcG1hcCAqcG1hcDsNCisJcmVnaXN0ZXIgdm1fb2Zmc2V0X3Qg dmE7DQogew0KLQlwdF9lbnRyeV90ICpwdGU7DQorCXJlZ2lzdGVyIHVuc2ln bmVkICpwdHE7DQogDQogCS8qDQotCSAqIGdldCBhIGxvY2FsIHZhIGZvciBt YXBwaW5ncyBmb3IgdGhpcyBwbWFwLg0KKwkgKiBpZiB0aGVyZSBpcyBubyBw dGUgZm9yIHRoaXMgYWRkcmVzcywganVzdCBza2lwIGl0ISEhDQogCSAqLw0K LQlwdGUgPSBwbWFwX3B0ZShwbWFwLCB2YSk7DQotCWlmICghcHRlKQ0KKwlp ZiAoKnBtYXBfcGRlKHBtYXAsIHZhKSA9PSAwKSB7DQogCQlyZXR1cm47DQot CWlmICgqcHRlICYgUEdfVikgew0KLQkJKHZvaWQpIHBtYXBfcmVtb3ZlX3B0 ZShwbWFwLCBwdGUsIHZhKTsNCisJfQ0KKw0KKwkvKg0KKwkgKiBnZXQgYSBs b2NhbCB2YSBmb3IgbWFwcGluZ3MgZm9yIHRoaXMgcG1hcC4NCisJICovDQor CXB0cSA9IGdldF9wdGJhc2UocG1hcCkgKyBpMzg2X2J0b3AodmEpOw0KKwlp ZiAoKnB0cSkgew0KKwkJKHZvaWQpIHBtYXBfcmVtb3ZlX3B0ZShwbWFwLCBw dHEsIHZhKTsNCiAJCXBtYXBfVExCX2ludmFsaWRhdGUocG1hcCwgdmEpOw0K IAl9DQogCXJldHVybjsNCkBAIC0xNTcwLDExICsxNzI0LDE1IEBADQogICoJ cm91bmRlZCB0byB0aGUgcGFnZSBzaXplLg0KICAqLw0KIHZvaWQNCi1wbWFw X3JlbW92ZShwbWFwX3QgcG1hcCwgdm1fb2Zmc2V0X3Qgc3ZhLCB2bV9vZmZz ZXRfdCBldmEpDQorcG1hcF9yZW1vdmUocG1hcCwgc3ZhLCBldmEpDQorCXN0 cnVjdCBwbWFwICpwbWFwOw0KKwlyZWdpc3RlciB2bV9vZmZzZXRfdCBzdmE7 DQorCXJlZ2lzdGVyIHZtX29mZnNldF90IGV2YTsNCiB7DQotCXB0X2VudHJ5 X3QgKnB0ZTsNCi0JcGRfZW50cnlfdCBwZGU7DQotCXZtX29mZnNldF90IG52 YTsNCisJcmVnaXN0ZXIgdW5zaWduZWQgKnB0YmFzZTsNCisJdm1fb2Zmc2V0 X3QgcGRueHQ7DQorCXZtX29mZnNldF90IHB0cGFkZHI7DQorCXZtX29mZnNl dF90IHNpbmRleCwgZWluZGV4Ow0KIAlpbnQgYW55dmFsaWQ7DQogDQogCWlm IChwbWFwID09IE5VTEwpDQpAQCAtMTU4OCw4ICsxNzQ2LDggQEANCiAJICog Y29tbW9uIG9wZXJhdGlvbiBhbmQgZWFzeSB0byBzaG9ydCBjaXJjdWl0IHNv bWUNCiAJICogY29kZS4NCiAJICovDQotCWlmIChzdmEgKyBQQUdFX1NJWkUg PT0gZXZhICYmIA0KLQkgICAgKHBtYXAtPnBtX3BkaXJbc3ZhID4+IFBEUlNI SUZUXSAmIFBHX1BTKSA9PSAwKSB7DQorCWlmICgoKHN2YSArIFBBR0VfU0la RSkgPT0gZXZhKSAmJiANCisJCSgoKHVuc2lnbmVkKSBwbWFwLT5wbV9wZGly WyhzdmEgPj4gUERSU0hJRlQpXSAmIFBHX1BTKSA9PSAwKSkgew0KIAkJcG1h cF9yZW1vdmVfcGFnZShwbWFwLCBzdmEpOw0KIAkJcmV0dXJuOw0KIAl9DQpA QCAtMTYwMCwyMCArMTc1OCwyMyBAQA0KIAkgKiBHZXQgYSBsb2NhbCB2aXJ0 dWFsIGFkZHJlc3MgZm9yIHRoZSBtYXBwaW5ncyB0aGF0IGFyZSBiZWluZw0K IAkgKiB3b3JrZWQgd2l0aC4NCiAJICovDQorCXB0YmFzZSA9IGdldF9wdGJh c2UocG1hcCk7DQorDQorCXNpbmRleCA9IGkzODZfYnRvcChzdmEpOw0KKwll aW5kZXggPSBpMzg2X2J0b3AoZXZhKTsNCiANCi0JZm9yICg7IHN2YSA8IGV2 YTsgc3ZhID0gbnZhKSB7DQorCWZvciAoOyBzaW5kZXggPCBlaW5kZXg7IHNp bmRleCA9IHBkbnh0KSB7DQogCQl1bnNpZ25lZCBwZGlyaW5kZXg7DQogDQog CQkvKg0KLQkJICogQ2FsY3VsYXRlIGFkZHJlc3MgZm9yIG5leHQgcGFnZSB0 YWJsZS4NCisJCSAqIENhbGN1bGF0ZSBpbmRleCBmb3IgbmV4dCBwYWdlIHRh YmxlLg0KIAkJICovDQotCQludmEgPSAoc3ZhICsgTkJQRFIpICYgflBEUk1B U0s7DQotDQorCQlwZG54dCA9ICgoc2luZGV4ICsgTlBURVBHKSAmIH4oTlBU RVBHIC0gMSkpOw0KIAkJaWYgKHBtYXAtPnBtX3N0YXRzLnJlc2lkZW50X2Nv dW50ID09IDApDQogCQkJYnJlYWs7DQogDQotCQlwZGlyaW5kZXggPSBzdmEg Pj4gUERSU0hJRlQ7DQotCQlpZiAoKChwZGUgPSBwbWFwLT5wbV9wZGlyW3Bk aXJpbmRleF0pICYgUEdfUFMpICE9IDApIHsNCisJCXBkaXJpbmRleCA9IHNp bmRleCAvIE5QREVQRzsNCisJCWlmICgoKHB0cGFkZHIgPSAodW5zaWduZWQp IHBtYXAtPnBtX3BkaXJbcGRpcmluZGV4XSkgJiBQR19QUykgIT0gMCkgew0K IAkJCXBtYXAtPnBtX3BkaXJbcGRpcmluZGV4XSA9IDA7DQogCQkJcG1hcC0+ cG1fc3RhdHMucmVzaWRlbnRfY291bnQgLT0gTkJQRFIgLyBQQUdFX1NJWkU7 DQogCQkJYW55dmFsaWQrKzsNCkBAIC0xNjI0LDcgKzE3ODUsNyBAQA0KIAkJ ICogV2VlZCBvdXQgaW52YWxpZCBtYXBwaW5ncy4gTm90ZTogd2UgYXNzdW1l IHRoYXQgdGhlIHBhZ2UNCiAJCSAqIGRpcmVjdG9yeSB0YWJsZSBpcyBhbHdh eXMgYWxsb2NhdGVkLCBhbmQgaW4ga2VybmVsIHZpcnR1YWwuDQogCQkgKi8N Ci0JCWlmICgocGRlICYgUEdfVikgPT0gMCkNCisJCWlmIChwdHBhZGRyID09 IDApDQogCQkJY29udGludWU7DQogDQogCQkvKg0KQEAgLTE2MzIsMTYgKzE3 OTMsMjAgQEANCiAJCSAqIGJ5IHRoZSBjdXJyZW50IHBhZ2UgdGFibGUgcGFn ZSwgb3IgdG8gdGhlIGVuZCBvZiB0aGUNCiAJCSAqIHJhbmdlIGJlaW5nIHJl bW92ZWQuDQogCQkgKi8NCi0JCWlmIChudmEgPiBldmEpDQotCQkJbnZhID0g ZXZhOw0KKwkJaWYgKHBkbnh0ID4gZWluZGV4KSB7DQorCQkJcGRueHQgPSBl aW5kZXg7DQorCQl9DQogDQotCQlwdGUgPSBwbWFwX3B0ZShwbWFwLCBzdmEp Ow0KLQkJZm9yICg7IHN2YSA8IG52YTsgc3ZhICs9IFBBR0VfU0laRSwgcHRl KyspIHsNCi0JCQlpZiAoKCpwdGUgJiBQR19WKSA9PSAwKQ0KKwkJZm9yICgg O3NpbmRleCAhPSBwZG54dDsgc2luZGV4KyspIHsNCisJCQl2bV9vZmZzZXRf dCB2YTsNCisJCQlpZiAocHRiYXNlW3NpbmRleF0gPT0gMCkgew0KIAkJCQlj b250aW51ZTsNCisJCQl9DQorCQkJdmEgPSBpMzg2X3B0b2Ioc2luZGV4KTsN CiAJCQkNCiAJCQlhbnl2YWxpZCsrOw0KLQkJCWlmIChwbWFwX3JlbW92ZV9w dGUocG1hcCwgcHRlLCBzdmEpKQ0KKwkJCWlmIChwbWFwX3JlbW92ZV9wdGUo cG1hcCwNCisJCQkJcHRiYXNlICsgc2luZGV4LCB2YSkpDQogCQkJCWJyZWFr Ow0KIAkJfQ0KIAl9DQpAQCAtMTY2NCwxMCArMTgyOSwxMSBAQA0KICAqLw0K IA0KIHN0YXRpYyB2b2lkDQotcG1hcF9yZW1vdmVfYWxsKHZtX3BhZ2VfdCBt KQ0KK3BtYXBfcmVtb3ZlX2FsbChtKQ0KKwl2bV9wYWdlX3QgbTsNCiB7DQot CXB2X2VudHJ5X3QgcHY7DQotCXB0X2VudHJ5X3QgKnB0ZSwgdHB0ZTsNCisJ cmVnaXN0ZXIgcHZfZW50cnlfdCBwdjsNCisJcmVnaXN0ZXIgdW5zaWduZWQg KnB0ZSwgdHB0ZTsNCiAJaW50IHM7DQogDQogI2lmIGRlZmluZWQoUE1BUF9E SUFHTk9TVElDKQ0KQEAgLTE2ODQsOSArMTg1MCw5IEBADQogCXdoaWxlICgo cHYgPSBUQUlMUV9GSVJTVCgmbS0+bWQucHZfbGlzdCkpICE9IE5VTEwpIHsN CiAJCXB2LT5wdl9wbWFwLT5wbV9zdGF0cy5yZXNpZGVudF9jb3VudC0tOw0K IA0KLQkJcHRlID0gcG1hcF9wdGUocHYtPnB2X3BtYXAsIHB2LT5wdl92YSk7 DQorCQlwdGUgPSBwbWFwX3B0ZV9xdWljayhwdi0+cHZfcG1hcCwgcHYtPnB2 X3ZhKTsNCiANCi0JCXRwdGUgPSBwdGVfc3RvcmUocHRlLCAwKTsNCisJCXRw dGUgPSBsb2FkYW5kY2xlYXIocHRlKTsNCiAJCWlmICh0cHRlICYgUEdfVykN CiAJCQlwdi0+cHZfcG1hcC0+cG1fc3RhdHMud2lyZWRfY291bnQtLTsNCiAN CkBAIC0xNjk4LDcgKzE4NjQsNyBAQA0KIAkJICovDQogCQlpZiAodHB0ZSAm IFBHX00pIHsNCiAjaWYgZGVmaW5lZChQTUFQX0RJQUdOT1NUSUMpDQotCQkJ aWYgKHBtYXBfbndfbW9kaWZpZWQodHB0ZSkpIHsNCisJCQlpZiAocG1hcF9u d19tb2RpZmllZCgocHRfZW50cnlfdCkgdHB0ZSkpIHsNCiAJCQkJcHJpbnRm KA0KIAkicG1hcF9yZW1vdmVfYWxsOiBtb2RpZmllZCBwYWdlIG5vdCB3cml0 YWJsZTogdmE6IDB4JXgsIHB0ZTogMHgleFxuIiwNCiAJCQkJICAgIHB2LT5w dl92YSwgdHB0ZSk7DQpAQCAtMTcyOCw5ICsxODk0LDkgQEANCiB2b2lkDQog cG1hcF9wcm90ZWN0KHBtYXBfdCBwbWFwLCB2bV9vZmZzZXRfdCBzdmEsIHZt X29mZnNldF90IGV2YSwgdm1fcHJvdF90IHByb3QpDQogew0KLQlwdF9lbnRy eV90ICpwdGU7DQotCXBkX2VudHJ5X3QgcGRlOw0KLQl2bV9vZmZzZXRfdCBu dmE7DQorCXJlZ2lzdGVyIHVuc2lnbmVkICpwdGJhc2U7DQorCXZtX29mZnNl dF90IHBkbnh0LCBwdHBhZGRyOw0KKwl2bV9waW5kZXhfdCBzaW5kZXgsIGVp bmRleDsNCiAJaW50IGFueWNoYW5nZWQ7DQogDQogCWlmIChwbWFwID09IE5V TEwpDQpAQCAtMTc0NiwxNSArMTkxMiwyMCBAQA0KIA0KIAlhbnljaGFuZ2Vk ID0gMDsNCiANCi0JZm9yICg7IHN2YSA8IGV2YTsgc3ZhID0gbnZhKSB7DQor CXB0YmFzZSA9IGdldF9wdGJhc2UocG1hcCk7DQorDQorCXNpbmRleCA9IGkz ODZfYnRvcChzdmEpOw0KKwllaW5kZXggPSBpMzg2X2J0b3AoZXZhKTsNCisN CisJZm9yICg7IHNpbmRleCA8IGVpbmRleDsgc2luZGV4ID0gcGRueHQpIHsN CiANCiAJCXVuc2lnbmVkIHBkaXJpbmRleDsNCiANCi0JCW52YSA9IChzdmEg KyBOQlBEUikgJiB+UERSTUFTSzsNCisJCXBkbnh0ID0gKChzaW5kZXggKyBO UFRFUEcpICYgfihOUFRFUEcgLSAxKSk7DQogDQotCQlwZGlyaW5kZXggPSBz dmEgPj4gUERSU0hJRlQ7DQotCQlpZiAoKChwZGUgPSBwbWFwLT5wbV9wZGly W3BkaXJpbmRleF0pICYgUEdfUFMpICE9IDApIHsNCi0JCQlwbWFwLT5wbV9w ZGlyW3BkaXJpbmRleF0gJj0gfihQR19NfFBHX1JXKTsNCisJCXBkaXJpbmRl eCA9IHNpbmRleCAvIE5QREVQRzsNCisJCWlmICgoKHB0cGFkZHIgPSAodW5z aWduZWQpIHBtYXAtPnBtX3BkaXJbcGRpcmluZGV4XSkgJiBQR19QUykgIT0g MCkgew0KKwkJCSh1bnNpZ25lZCkgcG1hcC0+cG1fcGRpcltwZGlyaW5kZXhd ICY9IH4oUEdfTXxQR19SVyk7DQogCQkJcG1hcC0+cG1fc3RhdHMucmVzaWRl bnRfY291bnQgLT0gTkJQRFIgLyBQQUdFX1NJWkU7DQogCQkJYW55Y2hhbmdl ZCsrOw0KIAkJCWNvbnRpbnVlOw0KQEAgLTE3NjQsMTggKzE5MzUsMTkgQEAN CiAJCSAqIFdlZWQgb3V0IGludmFsaWQgbWFwcGluZ3MuIE5vdGU6IHdlIGFz c3VtZSB0aGF0IHRoZSBwYWdlDQogCQkgKiBkaXJlY3RvcnkgdGFibGUgaXMg YWx3YXlzIGFsbG9jYXRlZCwgYW5kIGluIGtlcm5lbCB2aXJ0dWFsLg0KIAkJ ICovDQotCQlpZiAoKHBkZSAmIFBHX1YpID09IDApDQorCQlpZiAocHRwYWRk ciA9PSAwKQ0KIAkJCWNvbnRpbnVlOw0KIA0KLQkJaWYgKG52YSA+IGV2YSkN Ci0JCQludmEgPSBldmE7DQorCQlpZiAocGRueHQgPiBlaW5kZXgpIHsNCisJ CQlwZG54dCA9IGVpbmRleDsNCisJCX0NCisNCisJCWZvciAoOyBzaW5kZXgg IT0gcGRueHQ7IHNpbmRleCsrKSB7DQogDQotCQlwdGUgPSBwbWFwX3B0ZShw bWFwLCBzdmEpOw0KLQkJZm9yICg7IHN2YSA8IG52YTsgc3ZhICs9IFBBR0Vf U0laRSwgcHRlKyspIHsNCi0JCQlwdF9lbnRyeV90IHBiaXRzOw0KKwkJCXVu c2lnbmVkIHBiaXRzOw0KIAkJCXZtX3BhZ2VfdCBtOw0KIA0KLQkJCXBiaXRz ID0gKnB0ZTsNCisJCQlwYml0cyA9IHB0YmFzZVtzaW5kZXhdOw0KIA0KIAkJ CWlmIChwYml0cyAmIFBHX01BTkFHRUQpIHsNCiAJCQkJbSA9IE5VTEw7DQpA QCAtMTc4NSw3ICsxOTU3LDcgQEANCiAJCQkJCXBiaXRzICY9IH5QR19BOw0K IAkJCQl9DQogCQkJCWlmIChwYml0cyAmIFBHX00pIHsNCi0JCQkJCWlmIChw bWFwX3RyYWNrX21vZGlmaWVkKHN2YSkpIHsNCisJCQkJCWlmIChwbWFwX3Ry YWNrX21vZGlmaWVkKGkzODZfcHRvYihzaW5kZXgpKSkgew0KIAkJCQkJCWlm IChtID09IE5VTEwpDQogCQkJCQkJCW0gPSBQSFlTX1RPX1ZNX1BBR0UocGJp dHMpOw0KIAkJCQkJCXZtX3BhZ2VfZGlydHkobSk7DQpAQCAtMTc5Niw4ICsx OTY4LDggQEANCiANCiAJCQlwYml0cyAmPSB+UEdfUlc7DQogDQotCQkJaWYg KHBiaXRzICE9ICpwdGUpIHsNCi0JCQkJKnB0ZSA9IHBiaXRzOw0KKwkJCWlm IChwYml0cyAhPSBwdGJhc2Vbc2luZGV4XSkgew0KKwkJCQlwdGJhc2Vbc2lu ZGV4XSA9IHBiaXRzOw0KIAkJCQlhbnljaGFuZ2VkID0gMTsNCiAJCQl9DQog CQl9DQpAQCAtMTgyMiw4ICsxOTk0LDEwIEBADQogcG1hcF9lbnRlcihwbWFw X3QgcG1hcCwgdm1fb2Zmc2V0X3QgdmEsIHZtX3BhZ2VfdCBtLCB2bV9wcm90 X3QgcHJvdCwNCiAJICAgYm9vbGVhbl90IHdpcmVkKQ0KIHsNCi0Jdm1fcGFk ZHJfdCBwYSwgb3BhOw0KLQlwdF9lbnRyeV90ICpwdGUsIG9yaWdwdGUsIG5l d3B0ZTsNCisJdm1fb2Zmc2V0X3QgcGE7DQorCXJlZ2lzdGVyIHVuc2lnbmVk ICpwdGU7DQorCXZtX29mZnNldF90IG9wYTsNCisJdm1fb2Zmc2V0X3Qgb3Jp Z3B0ZSwgbmV3cHRlOw0KIAl2bV9wYWdlX3QgbXB0ZTsNCiANCiAJaWYgKHBt YXAgPT0gTlVMTCkNCkBAIC0xODQ3LDE1ICsyMDIxLDE1IEBADQogCX0NCiAj aWYgMCAmJiBkZWZpbmVkKFBNQVBfRElBR05PU1RJQykNCiAJZWxzZSB7DQot CQlwZF9lbnRyeV90ICpwZGVhZGRyID0gcG1hcF9wZGUocG1hcCwgdmEpOw0K LQkJaWYgKCgob3JpZ3B0ZSA9ICpwZGVhZGRyKSAmIFBHX1YpID09IDApIHsg DQorCQl2bV9vZmZzZXRfdCAqcGRlYWRkciA9ICh2bV9vZmZzZXRfdCAqKXBt YXBfcGRlKHBtYXAsIHZhKTsNCisJCWlmICgoKG9yaWdwdGUgPSAodm1fb2Zm c2V0X3QpICpwZGVhZGRyKSAmIFBHX1YpID09IDApIHsgDQogCQkJcGFuaWMo InBtYXBfZW50ZXI6IGludmFsaWQga2VybmVsIHBhZ2UgdGFibGUgcGFnZSgw KSwgcGRpcj0lcCwgcGRlPSVwLCB2YT0lcFxuIiwNCiAJCQkJcG1hcC0+cG1f cGRpcltQVERQVERJXSwgb3JpZ3B0ZSwgdmEpOw0KIAkJfQ0KIAkJaWYgKHNt cF9hY3RpdmUpIHsNCi0JCQlwZGVhZGRyID0gSWRsZVBURFNbY3B1aWRdOw0K KwkJCXBkZWFkZHIgPSAodm1fb2Zmc2V0X3QgKikgSWRsZVBURFNbY3B1aWRd Ow0KIAkJCWlmICgoKG5ld3B0ZSA9IHBkZWFkZHJbdmEgPj4gUERSU0hJRlRd KSAmIFBHX1YpID09IDApIHsNCi0JCQkJaWYgKG15X2lkbGVQVEQgIT0gdnRv cGh5cyhwZGVhZGRyKSkNCisJCQkJaWYgKCh2bV9vZmZzZXRfdCkgbXlfaWRs ZVBURCAhPSAodm1fb2Zmc2V0X3QpIHZ0b3BoeXMocGRlYWRkcikpDQogCQkJ CQlwcmludGYoInBkZSBtaXNtYXRjaDogJXgsICV4XG4iLCBteV9pZGxlUFRE LCBwZGVhZGRyKTsNCiAJCQkJcHJpbnRmKCJjcHVpZDogJWQsIHBkZWFkZHI6 IDB4JXhcbiIsIGNwdWlkLCBwZGVhZGRyKTsNCiAJCQkJcGFuaWMoInBtYXBf ZW50ZXI6IGludmFsaWQga2VybmVsIHBhZ2UgdGFibGUgcGFnZSgxKSwgcGRp cj0lcCwgbnBkZT0lcCwgcGRlPSVwLCB2YT0lcFxuIiwNCkBAIC0xODcxLDEy ICsyMDQ1LDEyIEBADQogCSAqIFBhZ2UgRGlyZWN0b3J5IHRhYmxlIGVudHJ5 IG5vdCB2YWxpZCwgd2UgbmVlZCBhIG5ldyBQVCBwYWdlDQogCSAqLw0KIAlp ZiAocHRlID09IE5VTEwpIHsNCi0JCXBhbmljKCJwbWFwX2VudGVyOiBpbnZh bGlkIHBhZ2UgZGlyZWN0b3J5IHBkaXI9JSNsbHgsIHZhPSUjeFxuIiwNCi0J CQkodV9pbnQ2NF90KXBtYXAtPnBtX3BkaXJbUFREUFRESV0sIHZhKTsNCisJ CXBhbmljKCJwbWFwX2VudGVyOiBpbnZhbGlkIHBhZ2UgZGlyZWN0b3J5LCBw ZGlyPSVwLCB2YT0weCV4XG4iLA0KKwkJCSh2b2lkICopcG1hcC0+cG1fcGRp cltQVERQVERJXSwgdmEpOw0KIAl9DQogDQogCXBhID0gVk1fUEFHRV9UT19Q SFlTKG0pICYgUEdfRlJBTUU7DQotCW9yaWdwdGUgPSAqcHRlOw0KKwlvcmln cHRlID0gKih2bV9vZmZzZXRfdCAqKXB0ZTsNCiAJb3BhID0gb3JpZ3B0ZSAm IFBHX0ZSQU1FOw0KIA0KIAlpZiAob3JpZ3B0ZSAmIFBHX1BTKQ0KQEAgLTE4 ODUsNyArMjA1OSw3IEBADQogCS8qDQogCSAqIE1hcHBpbmcgaGFzIG5vdCBj aGFuZ2VkLCBtdXN0IGJlIHByb3RlY3Rpb24gb3Igd2lyaW5nIGNoYW5nZS4N CiAJICovDQotCWlmICgob3JpZ3B0ZSAmIFBHX1YpICYmIChvcGEgPT0gcGEp KSB7DQorCWlmIChvcmlncHRlICYmIChvcGEgPT0gcGEpKSB7DQogCQkvKg0K IAkJICogV2lyaW5nIGNoYW5nZSwganVzdCB1cGRhdGUgc3RhdHMuIFdlIGRv bid0IHdvcnJ5IGFib3V0DQogCQkgKiB3aXJpbmcgUFQgcGFnZXMgYXMgdGhl eSByZW1haW4gcmVzaWRlbnQgYXMgbG9uZyBhcyB0aGVyZQ0KQEAgLTE5MTEs MTAgKzIwODUsMTYgQEANCiAJCWlmIChtcHRlKQ0KIAkJCW1wdGUtPmhvbGRf Y291bnQtLTsNCiANCi0JCWlmICgocHJvdCAmIFZNX1BST1RfV1JJVEUpKSB7 DQorCQlpZiAoKHByb3QgJiBWTV9QUk9UX1dSSVRFKSAmJiAob3JpZ3B0ZSAm IFBHX1YpKSB7DQogCQkJaWYgKChvcmlncHRlICYgUEdfUlcpID09IDApIHsN CiAJCQkJKnB0ZSB8PSBQR19SVzsNCi0JCQkJcG1hcF9UTEJfaW52YWxpZGF0 ZShwbWFwLCB2YSk7DQorI2lmZGVmIFNNUA0KKwkJCQljcHVfaW52bHBnKCh2 b2lkICopdmEpOw0KKwkJCQlpZiAocG1hcC0+cG1fYWN0aXZlICYgb3RoZXJf Y3B1cykNCisJCQkJCXNtcF9pbnZsdGxiKCk7DQorI2Vsc2UNCisJCQkJaW52 bHRsYl8xcGcodmEpOw0KKyNlbmRpZg0KIAkJCX0NCiAJCQlyZXR1cm47DQog CQl9DQpAQCAtMTkzMiwxMiArMjExMiwxMiBAQA0KIAkJCXBhIHw9IFBHX01B TkFHRUQ7DQogCQl9DQogCQlnb3RvIHZhbGlkYXRlOw0KLQl9DQorCX0gDQog CS8qDQogCSAqIE1hcHBpbmcgaGFzIGNoYW5nZWQsIGludmFsaWRhdGUgb2xk IHJhbmdlIGFuZCBmYWxsIHRocm91Z2ggdG8NCiAJICogaGFuZGxlIHZhbGlk YXRpbmcgbmV3IG1hcHBpbmcuDQogCSAqLw0KLQlpZiAoKG9yaWdwdGUgJiBQ R19WKSkgew0KKwlpZiAob3BhKSB7DQogCQlpbnQgZXJyOw0KIAkJZXJyID0g cG1hcF9yZW1vdmVfcHRlKHBtYXAsIHB0ZSwgdmEpOw0KIAkJaWYgKGVycikN CkBAIC0xOTQ5LDcgKzIxMjksOCBAQA0KIAkgKiByYWlzZSBJUEwgd2hpbGUg bWFuaXB1bGF0aW5nIHB2X3RhYmxlIHNpbmNlIHBtYXBfZW50ZXIgY2FuIGJl DQogCSAqIGNhbGxlZCBhdCBpbnRlcnJ1cHQgdGltZS4NCiAJICovDQotCWlm IChwbWFwX2luaXRpYWxpemVkICYmICEobS0+ZmxhZ3MgJiAoUEdfRklDVElU SU9VU3xQR19VTk1BTkFHRUQpKSkgew0KKwlpZiAocG1hcF9pbml0aWFsaXpl ZCAmJiANCisJICAgIChtLT5mbGFncyAmIChQR19GSUNUSVRJT1VTfFBHX1VO TUFOQUdFRCkpID09IDApIHsNCiAJCXBtYXBfaW5zZXJ0X2VudHJ5KHBtYXAs IHZhLCBtcHRlLCBtKTsNCiAJCXBhIHw9IFBHX01BTkFHRUQ7DQogCX0NCkBA IC0xOTY1LDcgKzIxNDYsNyBAQA0KIAkvKg0KIAkgKiBOb3cgdmFsaWRhdGUg bWFwcGluZyB3aXRoIGRlc2lyZWQgcHJvdGVjdGlvbi93aXJpbmcuDQogCSAq Lw0KLQluZXdwdGUgPSBwYSB8IHB0ZV9wcm90KHBtYXAsIHByb3QpIHwgUEdf VjsNCisJbmV3cHRlID0gKHZtX29mZnNldF90KSAocGEgfCBwdGVfcHJvdChw bWFwLCBwcm90KSB8IFBHX1YpOw0KIA0KIAlpZiAod2lyZWQpDQogCQluZXdw dGUgfD0gUEdfVzsNCkBAIC0xOTgwLDcgKzIxNjEsMTUgQEANCiAJICovDQog CWlmICgob3JpZ3B0ZSAmIH4oUEdfTXxQR19BKSkgIT0gbmV3cHRlKSB7DQog CQkqcHRlID0gbmV3cHRlIHwgUEdfQTsNCi0JCXBtYXBfVExCX2ludmFsaWRh dGUocG1hcCwgdmEpOw0KKwkJLyppZiAob3JpZ3B0ZSkqLyB7DQorI2lmZGVm IFNNUA0KKwkJCWNwdV9pbnZscGcoKHZvaWQgKil2YSk7DQorCQkJaWYgKHBt YXAtPnBtX2FjdGl2ZSAmIG90aGVyX2NwdXMpDQorCQkJCXNtcF9pbnZsdGxi KCk7DQorI2Vsc2UNCisJCQlpbnZsdGxiXzFwZyh2YSk7DQorI2VuZGlmDQor CQl9DQogCX0NCiB9DQogDQpAQCAtMTk5NiwxMCArMjE4NSwxNCBAQA0KICAq Lw0KIA0KIHN0YXRpYyB2bV9wYWdlX3QNCi1wbWFwX2VudGVyX3F1aWNrKHBt YXBfdCBwbWFwLCB2bV9vZmZzZXRfdCB2YSwgdm1fcGFnZV90IG0sIHZtX3Bh Z2VfdCBtcHRlKQ0KK3BtYXBfZW50ZXJfcXVpY2socG1hcCwgdmEsIG0sIG1w dGUpDQorCXJlZ2lzdGVyIHBtYXBfdCBwbWFwOw0KKwl2bV9vZmZzZXRfdCB2 YTsNCisJdm1fcGFnZV90IG07DQorCXZtX3BhZ2VfdCBtcHRlOw0KIHsNCi0J cHRfZW50cnlfdCAqcHRlOw0KLQl2bV9wYWRkcl90IHBhOw0KKwl1bnNpZ25l ZCAqcHRlOw0KKwl2bV9vZmZzZXRfdCBwYTsNCiANCiAJLyoNCiAJICogSW4g dGhlIGNhc2UgdGhhdCBhIHBhZ2UgdGFibGUgcGFnZSBpcyBub3QNCkBAIC0y MDA3LDcgKzIyMDAsNyBAQA0KIAkgKi8NCiAJaWYgKHZhIDwgVVBUX01JTl9B RERSRVNTKSB7DQogCQl1bnNpZ25lZCBwdGVwaW5kZXg7DQotCQlwZF9lbnRy eV90IHBkZTsNCisJCXZtX29mZnNldF90IHB0ZXBhOw0KIA0KIAkJLyoNCiAJ CSAqIENhbGN1bGF0ZSBwYWdldGFibGUgcGFnZSBpbmRleA0KQEAgLTIwMjAs MjAgKzIyMTMsMjAgQEANCiAJCQkvKg0KIAkJCSAqIEdldCB0aGUgcGFnZSBk aXJlY3RvcnkgZW50cnkNCiAJCQkgKi8NCi0JCQlwZGUgPSBwbWFwLT5wbV9w ZGlyW3B0ZXBpbmRleF07DQorCQkJcHRlcGEgPSAodm1fb2Zmc2V0X3QpIHBt YXAtPnBtX3BkaXJbcHRlcGluZGV4XTsNCiANCiAJCQkvKg0KIAkJCSAqIElm IHRoZSBwYWdlIHRhYmxlIHBhZ2UgaXMgbWFwcGVkLCB3ZSBqdXN0IGluY3Jl bWVudA0KIAkJCSAqIHRoZSBob2xkIGNvdW50LCBhbmQgYWN0aXZhdGUgaXQu DQogCQkJICovDQotCQkJaWYgKChwZGUgJiBQR19WKSkgew0KLQkJCQlpZiAo cGRlICYgUEdfUFMpDQorCQkJaWYgKHB0ZXBhKSB7DQorCQkJCWlmIChwdGVw YSAmIFBHX1BTKQ0KIAkJCQkJcGFuaWMoInBtYXBfZW50ZXJfcXVpY2s6IHVu ZXhwZWN0ZWQgbWFwcGluZyBpbnRvIDRNQiBwYWdlIik7DQogCQkJCWlmIChw bWFwLT5wbV9wdHBoaW50ICYmDQotCQkJCSAgICAocG1hcC0+cG1fcHRwaGlu dC0+cGluZGV4ID09IHB0ZXBpbmRleCkpIHsNCisJCQkJCShwbWFwLT5wbV9w dHBoaW50LT5waW5kZXggPT0gcHRlcGluZGV4KSkgew0KIAkJCQkJbXB0ZSA9 IHBtYXAtPnBtX3B0cGhpbnQ7DQogCQkJCX0gZWxzZSB7DQotCQkJCQltcHRl ID0gcG1hcF9wYWdlX2xvb2t1cChwbWFwLT5wbV9wdGVvYmosIHB0ZXBpbmRl eCk7DQorCQkJCQltcHRlID0gcG1hcF9wYWdlX2xvb2t1cCggcG1hcC0+cG1f cHRlb2JqLCBwdGVwaW5kZXgpOw0KIAkJCQkJcG1hcC0+cG1fcHRwaGludCA9 IG1wdGU7DQogCQkJCX0NCiAJCQkJaWYgKG1wdGUgPT0gTlVMTCkNCkBAIC0y MDUwLDEwICsyMjQzLDEwIEBADQogCS8qDQogCSAqIFRoaXMgY2FsbCB0byB2 dG9wdGUgbWFrZXMgdGhlIGFzc3VtcHRpb24gdGhhdCB3ZSBhcmUNCiAJICog ZW50ZXJpbmcgdGhlIHBhZ2UgaW50byB0aGUgY3VycmVudCBwbWFwLiAgSW4g b3JkZXIgdG8gc3VwcG9ydA0KLQkgKiBxdWljayBlbnRyeSBpbnRvIGFueSBw bWFwLCBvbmUgd291bGQgbGlrZWx5IHVzZSBwbWFwX3B0ZS4NCisJICogcXVp Y2sgZW50cnkgaW50byBhbnkgcG1hcCwgb25lIHdvdWxkIGxpa2VseSB1c2Ug cG1hcF9wdGVfcXVpY2suDQogCSAqIEJ1dCB0aGF0IGlzbid0IGFzIHF1aWNr IGFzIHZ0b3B0ZS4NCiAJICovDQotCXB0ZSA9IHZ0b3B0ZSh2YSk7DQorCXB0 ZSA9ICh1bnNpZ25lZCAqKXZ0b3B0ZSh2YSk7DQogCWlmICgqcHRlKSB7DQog CQlpZiAobXB0ZSkNCiAJCQlwbWFwX3Vud2lyZV9wdGVfaG9sZChwbWFwLCBt cHRlKTsNCkBAIC0yMDkxLDcgKzIyODQsNyBAQA0KICAqIHRvIGJlIHVzZWQg Zm9yIHBhbmljIGR1bXBzLg0KICAqLw0KIHZvaWQgKg0KLXBtYXBfa2VudGVy X3RlbXBvcmFyeSh2bV9wYWRkcl90IHBhLCBpbnQgaSkNCitwbWFwX2tlbnRl cl90ZW1wb3Jhcnkodm1fb2Zmc2V0X3QgcGEsIGludCBpKQ0KIHsNCiAJcG1h cF9rZW50ZXIoKHZtX29mZnNldF90KWNyYXNoZHVtcG1hcCArIChpICogUEFH RV9TSVpFKSwgcGEpOw0KIAlyZXR1cm4gKCh2b2lkICopY3Jhc2hkdW1wbWFw KTsNCkBAIC0yMTI2LDE2ICsyMzE5LDE2IEBADQogCSAqIGFyZSB0YWtlbiwg YnV0IHRoZSBjb2RlIHdvcmtzLg0KIAkgKi8NCiAJaWYgKHBzZWZsYWcgJiYN Ci0JICAgIChvYmplY3QtPnR5cGUgPT0gT0JKVF9ERVZJQ0UpICYmDQotCSAg ICAoKGFkZHIgJiAoTkJQRFIgLSAxKSkgPT0gMCkgJiYNCi0JICAgICgoc2l6 ZSAmIChOQlBEUiAtIDEpKSA9PSAwKSApIHsNCisJCShvYmplY3QtPnR5cGUg PT0gT0JKVF9ERVZJQ0UpICYmDQorCQkoKGFkZHIgJiAoTkJQRFIgLSAxKSkg PT0gMCkgJiYNCisJCSgoc2l6ZSAmIChOQlBEUiAtIDEpKSA9PSAwKSApIHsN CiAJCWludCBpOw0KIAkJdm1fcGFnZV90IG1bMV07DQogCQl1bnNpZ25lZCBp bnQgcHRlcGluZGV4Ow0KIAkJaW50IG5wZGVzOw0KLQkJcGRfZW50cnlfdCBw dGVwYTsNCisJCXZtX29mZnNldF90IHB0ZXBhOw0KIA0KLQkJaWYgKHBtYXAt PnBtX3BkaXJbcHRlcGluZGV4ID0gKGFkZHIgPj4gUERSU0hJRlQpXSAmIFBH X1YpDQorCQlpZiAocG1hcC0+cG1fcGRpcltwdGVwaW5kZXggPSAoYWRkciA+ PiBQRFJTSElGVCldKQ0KIAkJCXJldHVybjsNCiANCiByZXRyeToNCkBAIC0y MTU4LDcgKzIzNTEsNyBAQA0KIAkJCXZtX3BhZ2Vfd2FrZXVwKHApOw0KIAkJ fQ0KIA0KLQkJcHRlcGEgPSBWTV9QQUdFX1RPX1BIWVMocCk7DQorCQlwdGVw YSA9ICh2bV9vZmZzZXRfdCkgVk1fUEFHRV9UT19QSFlTKHApOw0KIAkJaWYg KHB0ZXBhICYgKE5CUERSIC0gMSkpIHsNCiAJCQlyZXR1cm47DQogCQl9DQpA QCAtMjE2Nyw5ICsyMzYwLDkgQEANCiANCiAJCXBtYXAtPnBtX3N0YXRzLnJl c2lkZW50X2NvdW50ICs9IHNpemUgPj4gUEFHRV9TSElGVDsNCiAJCW5wZGVz ID0gc2l6ZSA+PiBQRFJTSElGVDsNCi0JCWZvcihpID0gMDsgaSA8IG5wZGVz OyBpKyspIHsNCisJCWZvcihpPTA7aTxucGRlcztpKyspIHsNCiAJCQlwbWFw LT5wbV9wZGlyW3B0ZXBpbmRleF0gPQ0KLQkJCQlwdGVwYSB8IFBHX1UgfCBQ R19SVyB8IFBHX1YgfCBQR19QUzsNCisJCQkJKHBkX2VudHJ5X3QpIChwdGVw YSB8IFBHX1UgfCBQR19SVyB8IFBHX1YgfCBQR19QUyk7DQogCQkJcHRlcGEg Kz0gTkJQRFI7DQogCQkJcHRlcGluZGV4ICs9IDE7DQogCQl9DQpAQCAtMjIy MCw3ICsyNDEzLDcgQEANCiAJCQkgICAgY250LnZfZnJlZV9jb3VudCA8IGNu dC52X2ZyZWVfcmVzZXJ2ZWQpIHsNCiAJCQkJYnJlYWs7DQogCQkJfQ0KLQkJ CWlmICgocC0+dmFsaWQgJiBWTV9QQUdFX0JJVFNfQUxMKSA9PSBWTV9QQUdF X0JJVFNfQUxMICYmDQorCQkJaWYgKCgocC0+dmFsaWQgJiBWTV9QQUdFX0JJ VFNfQUxMKSA9PSBWTV9QQUdFX0JJVFNfQUxMKSAmJg0KIAkJCQkocC0+YnVz eSA9PSAwKSAmJg0KIAkJCSAgICAocC0+ZmxhZ3MgJiAoUEdfQlVTWSB8IFBH X0ZJQ1RJVElPVVMpKSA9PSAwKSB7DQogCQkJCWlmICgocC0+cXVldWUgLSBw LT5wYykgPT0gUFFfQ0FDSEUpDQpAQCAtMjI0OCw3ICsyNDQxLDcgQEANCiAJ CQl9DQogCQkJcCA9IHZtX3BhZ2VfbG9va3VwKG9iamVjdCwgdG1waWR4ICsg cGluZGV4KTsNCiAJCQlpZiAocCAmJg0KLQkJCSAgICAocC0+dmFsaWQgJiBW TV9QQUdFX0JJVFNfQUxMKSA9PSBWTV9QQUdFX0JJVFNfQUxMICYmDQorCQkJ ICAgICgocC0+dmFsaWQgJiBWTV9QQUdFX0JJVFNfQUxMKSA9PSBWTV9QQUdF X0JJVFNfQUxMKSAmJg0KIAkJCQkocC0+YnVzeSA9PSAwKSAmJg0KIAkJCSAg ICAocC0+ZmxhZ3MgJiAoUEdfQlVTWSB8IFBHX0ZJQ1RJVElPVVMpKSA9PSAw KSB7DQogCQkJCWlmICgocC0+cXVldWUgLSBwLT5wYykgPT0gUFFfQ0FDSEUp DQpAQCAtMjI2MSw2ICsyNDU0LDcgQEANCiAJCQl9DQogCQl9DQogCX0NCisJ cmV0dXJuOw0KIH0NCiANCiAvKg0KQEAgLTIzMDgsNyArMjUwMiw3IEBADQog CW1wdGUgPSBOVUxMOw0KIAlmb3IgKGkgPSAwOyBpIDwgUEFHRU9SREVSX1NJ WkU7IGkrKykgew0KIAkJdm1fb2JqZWN0X3QgbG9iamVjdDsNCi0JCXB0X2Vu dHJ5X3QgKnB0ZTsNCisJCXVuc2lnbmVkICpwdGU7DQogDQogCQlhZGRyID0g YWRkcmEgKyBwbWFwX3ByZWZhdWx0X3BhZ2VvcmRlcltpXTsNCiAJCWlmIChh ZGRyID4gYWRkcmEgKyAoUEZGT1IgKiBQQUdFX1NJWkUpKQ0KQEAgLTIzMTcs MTEgKzI1MTEsMTEgQEANCiAJCWlmIChhZGRyIDwgc3RhcnRhIHx8IGFkZHIg Pj0gZW50cnktPmVuZCkNCiAJCQljb250aW51ZTsNCiANCi0JCWlmICgoKnBt YXBfcGRlKHBtYXAsIGFkZHIpICYgUEdfVikgPT0gMCkgDQorCQlpZiAoKCpw bWFwX3BkZShwbWFwLCBhZGRyKSkgPT0gTlVMTCkgDQogCQkJY29udGludWU7 DQogDQotCQlwdGUgPSB2dG9wdGUoYWRkcik7DQotCQlpZiAoKCpwdGUgJiBQ R19WKSkNCisJCXB0ZSA9ICh1bnNpZ25lZCAqKSB2dG9wdGUoYWRkcik7DQor CQlpZiAoKnB0ZSkNCiAJCQljb250aW51ZTsNCiANCiAJCXBpbmRleCA9ICgo YWRkciAtIGVudHJ5LT5zdGFydCkgKyBlbnRyeS0+b2Zmc2V0KSA+PiBQQUdF X1NISUZUOw0KQEAgLTIzNDEsNyArMjUzNSw3IEBADQogCQlpZiAobSA9PSBO VUxMKQ0KIAkJCWJyZWFrOw0KIA0KLQkJaWYgKChtLT52YWxpZCAmIFZNX1BB R0VfQklUU19BTEwpID09IFZNX1BBR0VfQklUU19BTEwgJiYNCisJCWlmICgo KG0tPnZhbGlkICYgVk1fUEFHRV9CSVRTX0FMTCkgPT0gVk1fUEFHRV9CSVRT X0FMTCkgJiYNCiAJCQkobS0+YnVzeSA9PSAwKSAmJg0KIAkJICAgIChtLT5m bGFncyAmIChQR19CVVNZIHwgUEdfRklDVElUSU9VUykpID09IDApIHsNCiAN CkBAIC0yMzY0LDkgKzI1NTgsMTIgQEANCiAgKgkJCVRoZSBtYXBwaW5nIG11 c3QgYWxyZWFkeSBleGlzdCBpbiB0aGUgcG1hcC4NCiAgKi8NCiB2b2lkDQot cG1hcF9jaGFuZ2Vfd2lyaW5nKHBtYXBfdCBwbWFwLCB2bV9vZmZzZXRfdCB2 YSwgYm9vbGVhbl90IHdpcmVkKQ0KK3BtYXBfY2hhbmdlX3dpcmluZyhwbWFw LCB2YSwgd2lyZWQpDQorCXJlZ2lzdGVyIHBtYXBfdCBwbWFwOw0KKwl2bV9v ZmZzZXRfdCB2YTsNCisJYm9vbGVhbl90IHdpcmVkOw0KIHsNCi0JcHRfZW50 cnlfdCAqcHRlOw0KKwlyZWdpc3RlciB1bnNpZ25lZCAqcHRlOw0KIA0KIAlp ZiAocG1hcCA9PSBOVUxMKQ0KIAkJcmV0dXJuOw0KQEAgLTI0MDUsMjEgKzI2 MDIsMzIgQEANCiAJdm1fb2Zmc2V0X3QgYWRkcjsNCiAJdm1fb2Zmc2V0X3Qg ZW5kX2FkZHIgPSBzcmNfYWRkciArIGxlbjsNCiAJdm1fb2Zmc2V0X3QgcGRu eHQ7DQotCXZtX3BhZGRyX3Qgc3JjX2ZyYW1lOw0KKwl1bnNpZ25lZCBzcmNf ZnJhbWUsIGRzdF9mcmFtZTsNCiAJdm1fcGFnZV90IG07DQogDQogCWlmIChk c3RfYWRkciAhPSBzcmNfYWRkcikNCiAJCXJldHVybjsNCiANCi0Jc3JjX2Zy YW1lID0gc3JjX3BtYXAtPnBtX3BkaXJbUFREUFRESV0gJiBQR19GUkFNRTsN Ci0JaWYgKHNyY19mcmFtZSAhPSAoUFREcGRlWzBdICYgUEdfRlJBTUUpKSB7 DQorCXNyY19mcmFtZSA9ICgodW5zaWduZWQpIHNyY19wbWFwLT5wbV9wZGly W1BURFBUREldKSAmIFBHX0ZSQU1FOw0KKwlpZiAoc3JjX2ZyYW1lICE9ICgo KHVuc2lnbmVkKSBQVERwZGUpICYgUEdfRlJBTUUpKSB7DQogCQlyZXR1cm47 DQogCX0NCiANCisJZHN0X2ZyYW1lID0gKCh1bnNpZ25lZCkgZHN0X3BtYXAt PnBtX3BkaXJbUFREUFRESV0pICYgUEdfRlJBTUU7DQorCWlmIChkc3RfZnJh bWUgIT0gKCgodW5zaWduZWQpIEFQVERwZGUpICYgUEdfRlJBTUUpKSB7DQor CQlBUFREcGRlID0gKHBkX2VudHJ5X3QpIChkc3RfZnJhbWUgfCBQR19SVyB8 IFBHX1YpOw0KKyNpZiBkZWZpbmVkKFNNUCkNCisJCS8qIFRoZSBwYWdlIGRp cmVjdG9yeSBpcyBub3Qgc2hhcmVkIGJldHdlZW4gQ1BVcyAqLw0KKwkJY3B1 X2ludmx0bGIoKTsNCisjZWxzZQ0KKwkJaW52bHRsYigpOw0KKyNlbmRpZg0K Kwl9DQorDQogCWZvcihhZGRyID0gc3JjX2FkZHI7IGFkZHIgPCBlbmRfYWRk cjsgYWRkciA9IHBkbnh0KSB7DQotCQlwdF9lbnRyeV90ICpzcmNfcHRlLCAq ZHN0X3B0ZTsNCisJCXVuc2lnbmVkICpzcmNfcHRlLCAqZHN0X3B0ZTsNCiAJ CXZtX3BhZ2VfdCBkc3RtcHRlLCBzcmNtcHRlOw0KLQkJcGRfZW50cnlfdCBz cmNwdGVwYWRkcjsNCisJCXZtX29mZnNldF90IHNyY3B0ZXBhZGRyOw0KIAkJ dW5zaWduZWQgcHRlcGluZGV4Ow0KIA0KIAkJaWYgKGFkZHIgPj0gVVBUX01J Tl9BRERSRVNTKQ0KQEAgLTI0MzQsMzIgKzI2NDIsMzMgQEANCiAJCSAgICBw dl9lbnRyeV9jb3VudCA+IHB2X2VudHJ5X2hpZ2hfd2F0ZXIpDQogCQkJYnJl YWs7DQogCQkNCi0JCXBkbnh0ID0gKGFkZHIgKyBOQlBEUikgJiB+KE5CUERS IC0gMSk7DQorCQlwZG54dCA9ICgoYWRkciArIFBBR0VfU0laRSpOUFRFUEcp ICYgfihQQUdFX1NJWkUqTlBURVBHIC0gMSkpOw0KIAkJcHRlcGluZGV4ID0g YWRkciA+PiBQRFJTSElGVDsNCiANCi0JCXNyY3B0ZXBhZGRyID0gc3JjX3Bt YXAtPnBtX3BkaXJbcHRlcGluZGV4XTsNCisJCXNyY3B0ZXBhZGRyID0gKHZt X29mZnNldF90KSBzcmNfcG1hcC0+cG1fcGRpcltwdGVwaW5kZXhdOw0KIAkJ aWYgKHNyY3B0ZXBhZGRyID09IDApDQogCQkJY29udGludWU7DQogCQkJDQog CQlpZiAoc3JjcHRlcGFkZHIgJiBQR19QUykgew0KIAkJCWlmIChkc3RfcG1h cC0+cG1fcGRpcltwdGVwaW5kZXhdID09IDApIHsNCi0JCQkJZHN0X3BtYXAt PnBtX3BkaXJbcHRlcGluZGV4XSA9IHNyY3B0ZXBhZGRyOw0KLQkJCQlkc3Rf cG1hcC0+cG1fc3RhdHMucmVzaWRlbnRfY291bnQgKz0gTlBERVBHOw0KKwkJ CQlkc3RfcG1hcC0+cG1fcGRpcltwdGVwaW5kZXhdID0gKHBkX2VudHJ5X3Qp IHNyY3B0ZXBhZGRyOw0KKwkJCQlkc3RfcG1hcC0+cG1fc3RhdHMucmVzaWRl bnRfY291bnQgKz0gTkJQRFIgLyBQQUdFX1NJWkU7DQogCQkJfQ0KIAkJCWNv bnRpbnVlOw0KIAkJfQ0KIA0KIAkJc3JjbXB0ZSA9IHZtX3BhZ2VfbG9va3Vw KHNyY19wbWFwLT5wbV9wdGVvYmosIHB0ZXBpbmRleCk7DQogCQlpZiAoKHNy Y21wdGUgPT0gTlVMTCkgfHwNCi0JCSAgICAoc3JjbXB0ZS0+aG9sZF9jb3Vu dCA9PSAwKSB8fCAoc3JjbXB0ZS0+ZmxhZ3MgJiBQR19CVVNZKSkNCisJCQko c3JjbXB0ZS0+aG9sZF9jb3VudCA9PSAwKSB8fCAoc3JjbXB0ZS0+ZmxhZ3Mg JiBQR19CVVNZKSkNCiAJCQljb250aW51ZTsNCiANCiAJCWlmIChwZG54dCA+ IGVuZF9hZGRyKQ0KIAkJCXBkbnh0ID0gZW5kX2FkZHI7DQogDQotCQlzcmNf cHRlID0gdnRvcHRlKGFkZHIpOw0KKwkJc3JjX3B0ZSA9ICh1bnNpZ25lZCAq KSB2dG9wdGUoYWRkcik7DQorCQlkc3RfcHRlID0gKHVuc2lnbmVkICopIGF2 dG9wdGUoYWRkcik7DQogCQl3aGlsZSAoYWRkciA8IHBkbnh0KSB7DQotCQkJ cHRfZW50cnlfdCBwdGV0ZW1wOw0KKwkJCXVuc2lnbmVkIHB0ZXRlbXA7DQog CQkJcHRldGVtcCA9ICpzcmNfcHRlOw0KIAkJCS8qDQogCQkJICogd2Ugb25s eSB2aXJ0dWFsIGNvcHkgbWFuYWdlZCBwYWdlcw0KQEAgLTI0NzEsNyArMjY4 MCw2IEBADQogCQkJCSAqIGJsb2NrLg0KIAkJCQkgKi8NCiAJCQkJZHN0bXB0 ZSA9IHBtYXBfYWxsb2NwdGUoZHN0X3BtYXAsIGFkZHIpOw0KLQkJCQlkc3Rf cHRlID0gcG1hcF9wdGUoZHN0X3BtYXAsIGFkZHIpOw0KIAkJCQlpZiAoKCpk c3RfcHRlID09IDApICYmIChwdGV0ZW1wID0gKnNyY19wdGUpKSB7DQogCQkJ CQkvKg0KIAkJCQkJICogQ2xlYXIgdGhlIG1vZGlmaWVkIGFuZA0KQEAgLTI0 OTEsOSArMjY5OSwxMCBAQA0KIAkJCX0NCiAJCQlhZGRyICs9IFBBR0VfU0la RTsNCiAJCQlzcmNfcHRlKys7DQorCQkJZHN0X3B0ZSsrOw0KIAkJfQ0KIAl9 DQotfQ0KK30JDQogDQogLyoNCiAgKglSb3V0aW5lOglwbWFwX2tlcm5lbA0K QEAgLTI1MTEsMjUgKzI3MjAsMzkgQEANCiAgKgl0aGUgcGFnZSBpbnRvIEtW TSBhbmQgdXNpbmcgYnplcm8gdG8gY2xlYXIgaXRzIGNvbnRlbnRzLg0KICAq Lw0KIHZvaWQNCi1wbWFwX3plcm9fcGFnZSh2bV9wYWRkcl90IHBoeXMpDQor cG1hcF96ZXJvX3BhZ2UocGh5cykNCisJdm1fb2Zmc2V0X3QgcGh5czsNCiB7 DQotCWlmICgqQ01BUDMpDQotCQlwYW5pYygicG1hcF96ZXJvX3BhZ2U6IENN QVAzIGJ1c3kiKTsNCi0NCi0JKkNNQVAzID0gUEdfViB8IFBHX1JXIHwgKHBo eXMgJiBQR19GUkFNRSkgfCBQR19BIHwgUEdfTTsNCiAjaWZkZWYgU01QDQot CWNwdV9pbnZscGcoQ0FERFIzKTsNCi0jZWxzZQ0KLQlpbnZsdGxiXzFwZygo dm1fb2Zmc2V0X3QpQ0FERFIzKTsNCisJaWYgKCooaW50ICopIHBydl9DTUFQ MykNCisJCXBhbmljKCJwbWFwX3plcm9fcGFnZTogcHJ2X0NNQVAzIGJ1c3ki KTsNCisNCisJKihpbnQgKikgcHJ2X0NNQVAzID0gUEdfViB8IFBHX1JXIHwg KHBoeXMgJiBQR19GUkFNRSkgfCBQR19BIHwgUEdfTTsNCisJY3B1X2ludmxw ZyhwcnZfQ0FERFIzKTsNCisNCisjaWYgZGVmaW5lZChJNjg2X0NQVSkNCisJ aWYgKGNwdV9jbGFzcyA9PSBDUFVDTEFTU182ODYpDQorCQlpNjg2X3BhZ2V6 ZXJvKHBydl9DQUREUjMpOw0KKwllbHNlDQogI2VuZGlmDQorCQliemVybyhw cnZfQ0FERFIzLCBQQUdFX1NJWkUpOw0KKw0KKwkqKGludCAqKSBwcnZfQ01B UDMgPSAwOw0KKyNlbHNlDQorCWlmICgqKGludCAqKSBDTUFQMikNCisJCXBh bmljKCJwbWFwX3plcm9fcGFnZTogQ01BUDIgYnVzeSIpOw0KKw0KKwkqKGlu dCAqKSBDTUFQMiA9IFBHX1YgfCBQR19SVyB8IChwaHlzICYgUEdfRlJBTUUp IHwgUEdfQSB8IFBHX007DQorCWludmx0bGJfMXBnKCh2bV9vZmZzZXRfdClD QUREUjIpOw0KIA0KICNpZiBkZWZpbmVkKEk2ODZfQ1BVKQ0KIAlpZiAoY3B1 X2NsYXNzID09IENQVUNMQVNTXzY4NikNCi0JCWk2ODZfcGFnZXplcm8oQ0FE RFIzKTsNCisJCWk2ODZfcGFnZXplcm8oQ0FERFIyKTsNCiAJZWxzZQ0KICNl bmRpZg0KLQkJYnplcm8oQ0FERFIzLCBQQUdFX1NJWkUpOw0KLQkqQ01BUDMg PSAwOw0KKwkJYnplcm8oQ0FERFIyLCBQQUdFX1NJWkUpOw0KKwkqKGludCAq KSBDTUFQMiA9IDA7DQorI2VuZGlmDQogfQ0KIA0KIC8qDQpAQCAtMjUzOSwy NSArMjc2Miw0MSBAQA0KICAqCW9mZiBhbmQgc2l6ZSBtYXkgbm90IGNvdmVy IGFuIGFyZWEgYmV5b25kIGEgc2luZ2xlIGhhcmR3YXJlIHBhZ2UuDQogICov DQogdm9pZA0KLXBtYXBfemVyb19wYWdlX2FyZWEodm1fcGFkZHJfdCBwaHlz LCBpbnQgb2ZmLCBpbnQgc2l6ZSkNCitwbWFwX3plcm9fcGFnZV9hcmVhKHBo eXMsIG9mZiwgc2l6ZSkNCisJdm1fb2Zmc2V0X3QgcGh5czsNCisJaW50IG9m ZjsNCisJaW50IHNpemU7DQogew0KLQlpZiAoKkNNQVAzKQ0KLQkJcGFuaWMo InBtYXBfemVyb19wYWdlOiBDTUFQMyBidXN5Iik7DQotDQotCSpDTUFQMyA9 IFBHX1YgfCBQR19SVyB8IChwaHlzICYgUEdfRlJBTUUpIHwgUEdfQSB8IFBH X007DQogI2lmZGVmIFNNUA0KLQljcHVfaW52bHBnKENBRERSMyk7DQotI2Vs c2UNCi0JaW52bHRsYl8xcGcoKHZtX29mZnNldF90KUNBRERSMyk7DQorCWlm ICgqKGludCAqKSBwcnZfQ01BUDMpDQorCQlwYW5pYygicG1hcF96ZXJvX3Bh Z2U6IHBydl9DTUFQMyBidXN5Iik7DQorDQorCSooaW50ICopIHBydl9DTUFQ MyA9IFBHX1YgfCBQR19SVyB8IChwaHlzICYgUEdfRlJBTUUpIHwgUEdfQSB8 IFBHX007DQorCWNwdV9pbnZscGcocHJ2X0NBRERSMyk7DQorDQorI2lmIGRl ZmluZWQoSTY4Nl9DUFUpDQorCWlmIChjcHVfY2xhc3MgPT0gQ1BVQ0xBU1Nf Njg2ICYmIG9mZiA9PSAwICYmIHNpemUgPT0gUEFHRV9TSVpFKQ0KKwkJaTY4 Nl9wYWdlemVybyhwcnZfQ0FERFIzKTsNCisJZWxzZQ0KICNlbmRpZg0KKwkJ Ynplcm8oKGNoYXIgKilwcnZfQ0FERFIzICsgb2ZmLCBzaXplKTsNCisNCisJ KihpbnQgKikgcHJ2X0NNQVAzID0gMDsNCisjZWxzZQ0KKwlpZiAoKihpbnQg KikgQ01BUDIpDQorCQlwYW5pYygicG1hcF96ZXJvX3BhZ2U6IENNQVAyIGJ1 c3kiKTsNCisNCisJKihpbnQgKikgQ01BUDIgPSBQR19WIHwgUEdfUlcgfCAo cGh5cyAmIFBHX0ZSQU1FKSB8IFBHX0EgfCBQR19NOw0KKwlpbnZsdGxiXzFw Zygodm1fb2Zmc2V0X3QpQ0FERFIyKTsNCiANCiAjaWYgZGVmaW5lZChJNjg2 X0NQVSkNCiAJaWYgKGNwdV9jbGFzcyA9PSBDUFVDTEFTU182ODYgJiYgb2Zm ID09IDAgJiYgc2l6ZSA9PSBQQUdFX1NJWkUpDQotCQlpNjg2X3BhZ2V6ZXJv KENBRERSMyk7DQorCQlpNjg2X3BhZ2V6ZXJvKENBRERSMik7DQogCWVsc2UN CiAjZW5kaWYNCi0JCWJ6ZXJvKENBRERSMyArIG9mZiwgc2l6ZSk7DQotCSpD TUFQMyA9IDA7DQorCQliemVybygoY2hhciAqKUNBRERSMiArIG9mZiwgc2l6 ZSk7DQorCSooaW50ICopIENNQVAyID0gMDsNCisjZW5kaWYNCiB9DQogDQog LyoNCkBAIC0yNTY3LDI4ICsyODA2LDQ3IEBADQogICoJdGltZS4NCiAgKi8N CiB2b2lkDQotcG1hcF9jb3B5X3BhZ2Uodm1fcGFkZHJfdCBzcmMsIHZtX3Bh ZGRyX3QgZHN0KQ0KK3BtYXBfY29weV9wYWdlKHNyYywgZHN0KQ0KKwl2bV9v ZmZzZXRfdCBzcmM7DQorCXZtX29mZnNldF90IGRzdDsNCiB7DQotCWlmICgq Q01BUDEpDQotCQlwYW5pYygicG1hcF9jb3B5X3BhZ2U6IENNQVAxIGJ1c3ki KTsNCi0JaWYgKCpDTUFQMikNCi0JCXBhbmljKCJwbWFwX2NvcHlfcGFnZTog Q01BUDIgYnVzeSIpOw0KKyNpZmRlZiBTTVANCisJaWYgKCooaW50ICopIHBy dl9DTUFQMSkNCisJCXBhbmljKCJwbWFwX2NvcHlfcGFnZTogcHJ2X0NNQVAx IGJ1c3kiKTsNCisJaWYgKCooaW50ICopIHBydl9DTUFQMikNCisJCXBhbmlj KCJwbWFwX2NvcHlfcGFnZTogcHJ2X0NNQVAyIGJ1c3kiKTsNCiANCi0JKkNN QVAxID0gUEdfViB8IChzcmMgJiBQR19GUkFNRSkgfCBQR19BOw0KLQkqQ01B UDIgPSBQR19WIHwgUEdfUlcgfCAoZHN0ICYgUEdfRlJBTUUpIHwgUEdfQSB8 IFBHX007DQorCSooaW50ICopIHBydl9DTUFQMSA9IFBHX1YgfCAoc3JjICYg UEdfRlJBTUUpIHwgUEdfQTsNCisJKihpbnQgKikgcHJ2X0NNQVAyID0gUEdf ViB8IFBHX1JXIHwgKGRzdCAmIFBHX0ZSQU1FKSB8IFBHX0EgfCBQR19NOw0K IA0KLSNpZmRlZiBTTVANCi0JY3B1X2ludmxwZyhDQUREUjEpOw0KLQljcHVf aW52bHBnKENBRERSMik7DQorCWNwdV9pbnZscGcocHJ2X0NBRERSMSk7DQor CWNwdV9pbnZscGcocHJ2X0NBRERSMik7DQorDQorCWJjb3B5KHBydl9DQURE UjEsIHBydl9DQUREUjIsIFBBR0VfU0laRSk7DQorDQorCSooaW50ICopIHBy dl9DTUFQMSA9IDA7DQorCSooaW50ICopIHBydl9DTUFQMiA9IDA7DQogI2Vs c2UNCi0JaW52bHRsYl8xcGcoKHZtX29mZnNldF90KUNBRERSMSk7DQotCWlu dmx0bGJfMXBnKCh2bV9vZmZzZXRfdClDQUREUjIpOw0KKwlpZiAoKihpbnQg KikgQ01BUDEgfHwgKihpbnQgKikgQ01BUDIpDQorCQlwYW5pYygicG1hcF9j b3B5X3BhZ2U6IENNQVAgYnVzeSIpOw0KKw0KKwkqKGludCAqKSBDTUFQMSA9 IFBHX1YgfCAoc3JjICYgUEdfRlJBTUUpIHwgUEdfQTsNCisJKihpbnQgKikg Q01BUDIgPSBQR19WIHwgUEdfUlcgfCAoZHN0ICYgUEdfRlJBTUUpIHwgUEdf QSB8IFBHX007DQorI2lmIGRlZmluZWQoSTM4Nl9DUFUpDQorCWlmIChjcHVf Y2xhc3MgPT0gQ1BVQ0xBU1NfMzg2KSB7DQorCQlpbnZsdGxiKCk7DQorCX0g ZWxzZQ0KICNlbmRpZg0KKwl7DQorCQlpbnZscGcoKHVfaW50KUNBRERSMSk7 DQorCQlpbnZscGcoKHVfaW50KUNBRERSMik7DQorCX0NCiANCiAJYmNvcHko Q0FERFIxLCBDQUREUjIsIFBBR0VfU0laRSk7DQogDQotCSpDTUFQMSA9IDA7 DQotCSpDTUFQMiA9IDA7DQorCSooaW50ICopIENNQVAxID0gMDsNCisJKihp bnQgKikgQ01BUDIgPSAwOw0KKyNlbmRpZg0KIH0NCiANCiANCkBAIC0yNjIy LDcgKzI4ODAsOSBAQA0KICAqIHN1YnNldCBvZiBwbWFwcyBmb3IgcHJvcGVy IHBhZ2UgYWdpbmcuDQogICovDQogYm9vbGVhbl90DQotcG1hcF9wYWdlX2V4 aXN0c19xdWljayhwbWFwX3QgcG1hcCwgdm1fcGFnZV90IG0pDQorcG1hcF9w YWdlX2V4aXN0c19xdWljayhwbWFwLCBtKQ0KKwlwbWFwX3QgcG1hcDsNCisJ dm1fcGFnZV90IG07DQogew0KIAlwdl9lbnRyeV90IHB2Ow0KIAlpbnQgbG9v cHMgPSAwOw0KQEAgLTI2NTYsOSArMjkxNiwxMSBAQA0KICAqIGluIHRoZSBj YXNlIG9mIHJ1bm5pbmcgZG93biBhbiBlbnRpcmUgYWRkcmVzcyBzcGFjZS4N CiAgKi8NCiB2b2lkDQotcG1hcF9yZW1vdmVfcGFnZXMocG1hcF90IHBtYXAs IHZtX29mZnNldF90IHN2YSwgdm1fb2Zmc2V0X3QgZXZhKQ0KK3BtYXBfcmVt b3ZlX3BhZ2VzKHBtYXAsIHN2YSwgZXZhKQ0KKwlwbWFwX3QgcG1hcDsNCisJ dm1fb2Zmc2V0X3Qgc3ZhLCBldmE7DQogew0KLQlwdF9lbnRyeV90ICpwdGUs IHRwdGU7DQorCXVuc2lnbmVkICpwdGUsIHRwdGU7DQogCXB2X2VudHJ5X3Qg cHYsIG5wdjsNCiAJaW50IHM7DQogCXZtX3BhZ2VfdCBtOw0KQEAgLTI2NzEs NyArMjkzMyw5IEBADQogI2VuZGlmDQogDQogCXMgPSBzcGx2bSgpOw0KLQlm b3IocHYgPSBUQUlMUV9GSVJTVCgmcG1hcC0+cG1fcHZsaXN0KTsgcHY7IHB2 ID0gbnB2KSB7DQorCWZvcihwdiA9IFRBSUxRX0ZJUlNUKCZwbWFwLT5wbV9w dmxpc3QpOw0KKwkJcHY7DQorCQlwdiA9IG5wdikgew0KIA0KIAkJaWYgKHB2 LT5wdl92YSA+PSBldmEgfHwgcHYtPnB2X3ZhIDwgc3ZhKSB7DQogCQkJbnB2 ID0gVEFJTFFfTkVYVChwdiwgcHZfcGxpc3QpOw0KQEAgLTI2NzksOSArMjk0 Myw5IEBADQogCQl9DQogDQogI2lmZGVmIFBNQVBfUkVNT1ZFX1BBR0VTX0NV UlBST0NfT05MWQ0KLQkJcHRlID0gdnRvcHRlKHB2LT5wdl92YSk7DQorCQlw dGUgPSAodW5zaWduZWQgKil2dG9wdGUocHYtPnB2X3ZhKTsNCiAjZWxzZQ0K LQkJcHRlID0gcG1hcF9wdGUocHYtPnB2X3BtYXAsIHB2LT5wdl92YSk7DQor CQlwdGUgPSBwbWFwX3B0ZV9xdWljayhwdi0+cHZfcG1hcCwgcHYtPnB2X3Zh KTsNCiAjZW5kaWYNCiAJCXRwdGUgPSAqcHRlOw0KIA0KQEAgLTI3MzEsMTAg KzI5OTUsMTIgQEANCiAgKiBhbmQgYSBsb3Qgb2YgdGhpbmdzIGNvbXBpbGUt dGltZSBldmFsdWF0ZS4NCiAgKi8NCiBzdGF0aWMgYm9vbGVhbl90DQotcG1h cF90ZXN0Yml0KHZtX3BhZ2VfdCBtLCBpbnQgYml0KQ0KK3BtYXBfdGVzdGJp dChtLCBiaXQpDQorCXZtX3BhZ2VfdCBtOw0KKwlpbnQgYml0Ow0KIHsNCiAJ cHZfZW50cnlfdCBwdjsNCi0JcHRfZW50cnlfdCAqcHRlOw0KKwl1bnNpZ25l ZCAqcHRlOw0KIAlpbnQgczsNCiANCiAJaWYgKCFwbWFwX2luaXRpYWxpemVk IHx8IChtLT5mbGFncyAmIFBHX0ZJQ1RJVElPVVMpKQ0KQEAgLTI3NjIsNyAr MzAyOCw3IEBADQogCQkJY29udGludWU7DQogCQl9DQogI2VuZGlmDQotCQlw dGUgPSBwbWFwX3B0ZShwdi0+cHZfcG1hcCwgcHYtPnB2X3ZhKTsNCisJCXB0 ZSA9IHBtYXBfcHRlX3F1aWNrKHB2LT5wdl9wbWFwLCBwdi0+cHZfdmEpOw0K IAkJaWYgKCpwdGUgJiBiaXQpIHsNCiAJCQlzcGx4KHMpOw0KIAkJCXJldHVy biBUUlVFOw0KQEAgLTI3NzYsMTAgKzMwNDIsMTMgQEANCiAgKiB0aGlzIHJv dXRpbmUgaXMgdXNlZCB0byBtb2RpZnkgYml0cyBpbiBwdGVzDQogICovDQog c3RhdGljIF9faW5saW5lIHZvaWQNCi1wbWFwX2NoYW5nZWJpdCh2bV9wYWdl X3QgbSwgaW50IGJpdCwgYm9vbGVhbl90IHNldGVtKQ0KK3BtYXBfY2hhbmdl Yml0KG0sIGJpdCwgc2V0ZW0pDQorCXZtX3BhZ2VfdCBtOw0KKwlpbnQgYml0 Ow0KKwlib29sZWFuX3Qgc2V0ZW07DQogew0KLQlwdl9lbnRyeV90IHB2Ow0K LQlwdF9lbnRyeV90ICpwdGU7DQorCXJlZ2lzdGVyIHB2X2VudHJ5X3QgcHY7 DQorCXJlZ2lzdGVyIHVuc2lnbmVkICpwdGU7DQogCWludCBzOw0KIA0KIAlp ZiAoIXBtYXBfaW5pdGlhbGl6ZWQgfHwgKG0tPmZsYWdzICYgUEdfRklDVElU SU9VUykpDQpAQCAtMjgwNywyMSArMzA3NiwyMSBAQA0KIAkJfQ0KICNlbmRp Zg0KIA0KLQkJcHRlID0gcG1hcF9wdGUocHYtPnB2X3BtYXAsIHB2LT5wdl92 YSk7DQorCQlwdGUgPSBwbWFwX3B0ZV9xdWljayhwdi0+cHZfcG1hcCwgcHYt PnB2X3ZhKTsNCiANCiAJCWlmIChzZXRlbSkgew0KLQkJCSpwdGUgfD0gYml0 Ow0KKwkJCSooaW50ICopcHRlIHw9IGJpdDsNCiAJCQlwbWFwX1RMQl9pbnZh bGlkYXRlKHB2LT5wdl9wbWFwLCBwdi0+cHZfdmEpOw0KIAkJfSBlbHNlIHsN Ci0JCQlwdF9lbnRyeV90IHBiaXRzID0gKnB0ZTsNCisJCQl2bV9vZmZzZXRf dCBwYml0cyA9ICoodm1fb2Zmc2V0X3QgKilwdGU7DQogCQkJaWYgKHBiaXRz ICYgYml0KSB7DQogCQkJCWlmIChiaXQgPT0gUEdfUlcpIHsNCiAJCQkJCWlm IChwYml0cyAmIFBHX00pIHsNCiAJCQkJCQl2bV9wYWdlX2RpcnR5KG0pOw0K IAkJCQkJfQ0KLQkJCQkJKnB0ZSA9IHBiaXRzICYgfihQR19NfFBHX1JXKTsN CisJCQkJCSooaW50ICopcHRlID0gcGJpdHMgJiB+KFBHX018UEdfUlcpOw0K IAkJCQl9IGVsc2Ugew0KLQkJCQkJKnB0ZSA9IHBiaXRzICYgfmJpdDsNCisJ CQkJCSooaW50ICopcHRlID0gcGJpdHMgJiB+Yml0Ow0KIAkJCQl9DQogCQkJ CXBtYXBfVExCX2ludmFsaWRhdGUocHYtPnB2X3BtYXAsIHB2LT5wdl92YSk7 DQogCQkJfQ0KQEAgLTI4NDcsMTEgKzMxMTYsMTEgQEANCiAJfQ0KIH0NCiAN Ci12bV9wYWRkcl90DQordm1fb2Zmc2V0X3QNCiBwbWFwX3BoeXNfYWRkcmVz cyhwcG4pDQogCWludCBwcG47DQogew0KLQlyZXR1cm4gKGkzODZfcHRvYigo dm1fcGFkZHJfdClwcG4pKTsNCisJcmV0dXJuIChpMzg2X3B0b2IocHBuKSk7 DQogfQ0KIA0KIC8qDQpAQCAtMjg2OSw4ICszMTM4LDggQEANCiBpbnQNCiBw bWFwX3RzX3JlZmVyZW5jZWQodm1fcGFnZV90IG0pDQogew0KLQlwdl9lbnRy eV90IHB2LCBwdmYsIHB2bjsNCi0JcHRfZW50cnlfdCAqcHRlOw0KKwlyZWdp c3RlciBwdl9lbnRyeV90IHB2LCBwdmYsIHB2bjsNCisJdW5zaWduZWQgKnB0 ZTsNCiAJaW50IHM7DQogCWludCBydHZhbCA9IDA7DQogDQpAQCAtMjg5Myw3 ICszMTYyLDcgQEANCiAJCQlpZiAoIXBtYXBfdHJhY2tfbW9kaWZpZWQocHYt PnB2X3ZhKSkNCiAJCQkJY29udGludWU7DQogDQotCQkJcHRlID0gcG1hcF9w dGUocHYtPnB2X3BtYXAsIHB2LT5wdl92YSk7DQorCQkJcHRlID0gcG1hcF9w dGVfcXVpY2socHYtPnB2X3BtYXAsIHB2LT5wdl92YSk7DQogDQogCQkJaWYg KHB0ZSAmJiAoKnB0ZSAmIFBHX0EpKSB7DQogCQkJCSpwdGUgJj0gflBHX0E7 DQpAQCAtMjk4MywxMCArMzI1MiwxMiBAQA0KICAqIE5PVCByZWFsIG1lbW9y eS4NCiAgKi8NCiB2b2lkICoNCi1wbWFwX21hcGRldih2bV9wYWRkcl90IHBh LCB2bV9zaXplX3Qgc2l6ZSkNCitwbWFwX21hcGRldihwYSwgc2l6ZSkNCisJ dm1fb2Zmc2V0X3QgcGE7DQorCXZtX3NpemVfdCBzaXplOw0KIHsNCiAJdm1f b2Zmc2V0X3QgdmEsIHRtcHZhLCBvZmZzZXQ7DQotCXB0X2VudHJ5X3QgKnB0 ZTsNCisJdW5zaWduZWQgKnB0ZTsNCiANCiAJb2Zmc2V0ID0gcGEgJiBQQUdF X01BU0s7DQogCXNpemUgPSByb3VuZHVwKG9mZnNldCArIHNpemUsIFBBR0Vf U0laRSk7DQpAQCAtMjk5Nyw3ICszMjY4LDcgQEANCiANCiAJcGEgPSBwYSAm IFBHX0ZSQU1FOw0KIAlmb3IgKHRtcHZhID0gdmE7IHNpemUgPiAwOykgew0K LQkJcHRlID0gdnRvcHRlKHRtcHZhKTsNCisJCXB0ZSA9ICh1bnNpZ25lZCAq KXZ0b3B0ZSh0bXB2YSk7DQogCQkqcHRlID0gcGEgfCBQR19SVyB8IFBHX1Yg fCBwZ2VmbGFnOw0KIAkJc2l6ZSAtPSBQQUdFX1NJWkU7DQogCQl0bXB2YSAr PSBQQUdFX1NJWkU7DQpAQCAtMzAwOSw3ICszMjgwLDkgQEANCiB9DQogDQog dm9pZA0KLXBtYXBfdW5tYXBkZXYodm1fb2Zmc2V0X3QgdmEsIHZtX3NpemVf dCBzaXplKQ0KK3BtYXBfdW5tYXBkZXYodmEsIHNpemUpDQorCXZtX29mZnNl dF90IHZhOw0KKwl2bV9zaXplX3Qgc2l6ZTsNCiB7DQogCXZtX29mZnNldF90 IGJhc2UsIG9mZnNldDsNCiANCkBAIC0zMDIzLDkgKzMyOTYsMTIgQEANCiAg KiBwZXJmb3JtIHRoZSBwbWFwIHdvcmsgZm9yIG1pbmNvcmUNCiAgKi8NCiBp bnQNCi1wbWFwX21pbmNvcmUocG1hcF90IHBtYXAsIHZtX29mZnNldF90IGFk ZHIpDQorcG1hcF9taW5jb3JlKHBtYXAsIGFkZHIpDQorCXBtYXBfdCBwbWFw Ow0KKwl2bV9vZmZzZXRfdCBhZGRyOw0KIHsNCi0JcHRfZW50cnlfdCAqcHRl cCwgcHRlOw0KKwkNCisJdW5zaWduZWQgKnB0ZXAsIHB0ZTsNCiAJdm1fcGFn ZV90IG07DQogCWludCB2YWwgPSAwOw0KIAkNCkBAIC0zMDM1LDcgKzMzMTEs NyBAQA0KIAl9DQogDQogCWlmICgocHRlID0gKnB0ZXApICE9IDApIHsNCi0J CXZtX3BhZGRyX3QgcGE7DQorCQl2bV9vZmZzZXRfdCBwYTsNCiANCiAJCXZh bCA9IE1JTkNPUkVfSU5DT1JFOw0KIAkJaWYgKChwdGUgJiBQR19NQU5BR0VE KSA9PSAwKQ0KQEAgLTMwODYsMTEgKzMzNjIsNyBAQA0KICNpZiBkZWZpbmVk KFNXVENIX09QVElNX1NUQVRTKQ0KIAl0bGJfZmx1c2hfY291bnQrKzsNCiAj ZW5kaWYNCi0jaWZkZWYgUEFFDQotCWxvYWRfY3IzKHAtPnBfYWRkci0+dV9w Y2IucGNiX2NyMyA9IHZ0b3BoeXMocG1hcC0+cG1fcGRwdCkpOw0KLSNlbHNl DQogCWxvYWRfY3IzKHAtPnBfYWRkci0+dV9wY2IucGNiX2NyMyA9IHZ0b3Bo eXMocG1hcC0+cG1fcGRpcikpOw0KLSNlbmRpZg0KIH0NCiANCiB2bV9vZmZz ZXRfdA0KQEAgLTMxMDUsNzMgKzMzNzcsNiBAQA0KIAlyZXR1cm4gYWRkcjsN CiB9DQogDQotI2lmZGVmIFBBRQ0KLS8qDQotICogQWxsb2NhdGUgUERQVCBp biBsb3dlciAzMi1iaXQgcGFnZXMNCi0gKi8NCi1zdHJ1Y3QgcGRwdF9wYWdl IHsNCi0JU0xJU1RfRU5UUlkocGRwdF9wYWdlKQlsaW5rOw0KLQl1X2ludDMy X3QJCWF2YWlsOw0KLQl2bV9wYWRkcl90CQlwaHlzOw0KLQl1X2ludDMyX3QJ CWJpdHNbNF07DQotfTsNCi0NCi1TTElTVF9IRUFEKCxwZHB0X3BhZ2UpIHBk cHRfcGFnZXMgPSBTTElTVF9IRUFEX0lOSVRJQUxJWkVSKCZwZHB0X3BhZ2Vz KTsNCi1pbnQgcGRwdF9hdmFpbCA9IDA7DQotDQotc3RhdGljIHBkcHRfZW50 cnlfdCAqDQotcG1hcF9hbGxvY19wZHB0KCkNCi17DQotCXN0cnVjdCBwZHB0 X3BhZ2UgKnBwOw0KLQlwZHB0X2VudHJ5X3QgKnBkcHQgPSAwOw0KLQlpbnQg aTsNCi0NCi0JaWYgKHBkcHRfYXZhaWwgPT0gMCkgew0KLQkJcHAgPSAoc3Ry dWN0IHBkcHRfcGFnZSAqKWNvbnRpZ21hbGxvYyhQQUdFX1NJWkUsIE1fREVW QlVGLA0KLQkJICAgIE1fV0FJVE9LLCAwdWxsLCAweGZmZmZmZmZmdWxsLCBQ QUdFX1NJWkUsIDApOw0KLQkJaWYgKCFwcCkNCi0JCQlwYW5pYygicG1hcF9h bGxvY19wZHB0OiBhbGxvYyBmYWlsZWQiKTsNCi0JCXBwLT5waHlzID0gdnRv cGh5cyhwcCk7DQotCQlwcC0+YXZhaWwgPSBQQUdFX1NJWkUgLyAzMiAtIDE7 DQotCQlwcC0+Yml0c1swXSA9IDE7DQotCQlwcC0+Yml0c1sxXSA9IHBwLT5i aXRzWzJdID0gcHAtPmJpdHNbM10gPSAwOw0KLQkJU0xJU1RfSU5TRVJUX0hF QUQoJnBkcHRfcGFnZXMsIHBwLCBsaW5rKTsNCi0JCXBkcHRfYXZhaWwgKz0g cHAtPmF2YWlsOw0KLQl9IGVsc2Ugew0KLQkJU0xJU1RfRk9SRUFDSChwcCwg JnBkcHRfcGFnZXMsIGxpbmspIHsNCi0JCQlpZiAocHAtPmF2YWlsID4gMCkN Ci0JCQkJYnJlYWs7DQotCQl9DQotCX0NCi0NCi0JZm9yIChpID0gMDsgaSA8 IDQ7IGkrKykgew0KLQkJaW50IGogPSBmZnMofnBwLT5iaXRzW2ldKTsNCi0J CWlmIChqID09IDApDQotCQkJY29udGludWU7DQotCQlwcC0+Yml0c1tpXSB8 PSAxIDw8IChqIC0gMSk7DQotCQlwcC0+YXZhaWwtLTsNCi0JCXBkcHRfYXZh aWwtLTsNCi0JCXBkcHQgPSAocGRwdF9lbnRyeV90ICopcHAgKyAoMzIgKiBp ICsgaiAtIDEpICogTlBHUFREOw0KLQl9DQotDQotCXJldHVybiBwZHB0Ow0K LX0NCi0NCi0jaWYgMA0KLXN0YXRpYyB2b2lkDQotcG1hcF9mcmVlX3BkcHQo cGRwdF9lbnRyeV90ICpwZHB0KQ0KLXsNCi0Jc3RydWN0IHBkcHRfcGFnZSAq cHA7DQotCWludCBpOw0KLQ0KLQlwcCA9IChzdHJ1Y3QgcGRwdF9wYWdlICop KCh2bV9vZmZzZXRfdClwZHB0ICYgflBBR0VfTUFTSyk7DQotCWkgPSAocGRw dCAtIChwZHB0X2VudHJ5X3QgKilwcCkgLyBOUEdQVEQ7DQotCXBwLT5iaXRz W2kgLyAzMl0gJj0gfigxIDw8IChpICUgMzIpKTsNCi0JcHAtPmF2YWlsKys7 DQotCXBkcHRfYXZhaWwrKzsNCi19DQotI2VuZGlmDQotI2VuZGlmDQogDQog I2lmIGRlZmluZWQoUE1BUF9ERUJVRykNCiBwbWFwX3BpZF9kdW1wKGludCBw aWQpDQpAQCAtMzIwNCw3ICszNDA5LDcgQEANCiAJCQkJCQkJfQ0KIAkJCQkJ CQlyZXR1cm4gbnB0ZTsNCiAJCQkJCQl9DQotCQkJCQkJcHRlID0gcG1hcF9w dGUoIHBtYXAsIHZhKTsNCisJCQkJCQlwdGUgPSBwbWFwX3B0ZV9xdWljaygg cG1hcCwgdmEpOw0KIAkJCQkJCWlmIChwdGUgJiYgcG1hcF9wdGVfdihwdGUp KSB7DQogCQkJCQkJCXZtX29mZnNldF90IHBhOw0KIAkJCQkJCQl2bV9wYWdl X3QgbTsNCkBAIC0zMjUzLDcgKzM0NTgsNyBAQA0KIAkJCQkJY29udGludWU7 DQogCQkJCWlmIChwbSAhPSBrZXJuZWxfcG1hcCAmJiB2YSA+IFVQVF9NQVhf QUREUkVTUykNCiAJCQkJCWNvbnRpbnVlOw0KLQkJCQlwdGVwID0gcG1hcF9w dGUocG0sIHZhKTsNCisJCQkJcHRlcCA9IHBtYXBfcHRlX3F1aWNrKHBtLCB2 YSk7DQogCQkJCWlmIChwbWFwX3B0ZV92KHB0ZXApKQ0KIAkJCQkJcHJpbnRm KCIleDoleCAiLCB2YSwgKihpbnQgKikgcHRlcCk7DQogCQkJfTsNCkBAIC0z MjYyLDcgKzM0NjcsNyBAQA0KIA0KIHZvaWQNCiBwbWFwX3B2ZHVtcChwYSkN Ci0Jdm1fcGFkZHJfdCBwYTsNCisJdm1fb2Zmc2V0X3QgcGE7DQogew0KIAly ZWdpc3RlciBwdl9lbnRyeV90IHB2Ow0KIAl2bV9wYWdlX3QgbTsNCmRpZmYg LXUgLXIgL3Vzci9zcmMvc3lzLm9sZC9pMzg2L2kzODYvdm04Ni5jIC91c3Iv c3JjL3N5cy9pMzg2L2kzODYvdm04Ni5jDQotLS0gL3Vzci9zcmMvc3lzLm9s ZC9pMzg2L2kzODYvdm04Ni5jCVRodSBBdWcgMjEgMTg6MzU6MzQgMjAwMw0K KysrIC91c3Ivc3JjL3N5cy9pMzg2L2kzODYvdm04Ni5jCUZyaSBBdWcgMjIg MDI6MDk6MDAgMjAwMw0KQEAgLTU4NCw3ICs1ODQsNyBAQA0KIAlzdHJ1Y3Qg dm04NmZyYW1lICp2bWY7DQogCXN0cnVjdCB2bTg2Y29udGV4dCAqdm1jOw0K IHsNCi0JcHRfZW50cnlfdCAqcHRlID0gKHB0X2VudHJ5X3QgKil2bTg2cGFk ZHI7DQorCXB0X2VudHJ5X3QgcHRlID0gKHB0X2VudHJ5X3Qpdm04NnBhZGRy Ow0KIAl2bV9wYWRkcl90IHBhZ2U7DQogCWludCBpLCBlbnRyeSwgcmV0dmFs Ow0KIA0KZGlmZiAtdSAtciAvdXNyL3NyYy9zeXMub2xkL2kzODYvaW5jbHVk ZS9hc25hbWVzLmggL3Vzci9zcmMvc3lzL2kzODYvaW5jbHVkZS9hc25hbWVz LmgNCi0tLSAvdXNyL3NyYy9zeXMub2xkL2kzODYvaW5jbHVkZS9hc25hbWVz LmgJVGh1IEF1ZyAyMSAxODozNTozNiAyMDAzDQorKysgL3Vzci9zcmMvc3lz L2kzODYvaW5jbHVkZS9hc25hbWVzLmgJRnJpIEF1ZyAyMiAwMjowNzoyMyAy MDAzDQpAQCAtNTIsMTAgKzUyLDExIEBADQogDQogI2lmZGVmIF9fRUxGX18N CiANCisjZGVmaW5lIF9BUFRECQkJCUFQVEQNCisjZGVmaW5lIF9BUFREcGRl CQkJQVBURHBkZQ0KKyNkZWZpbmUgX0FQVG1hcAkJCQlBUFRtYXANCiAjZGVm aW5lIF9DT05TVF9RTmFOCQkJQ09OU1RfUU5hTg0KLSNkZWZpbmUgX0lkbGVQ RFBUCQkJSWRsZVBEUFQNCiAjZGVmaW5lIF9JZGxlUFRECQkJSWRsZVBURA0K LSNkZWZpbmUgX0tFUk5lbmQJCQlLRVJOZW5kDQogI2RlZmluZSBfS1BUcGh5 cwkJCUtQVHBoeXMNCiAjZGVmaW5lIF9NUF9HRFQJCQkJTVBfR0RUDQogI2Rl ZmluZSBfTVBnZXRsb2NrCQkJTVBnZXRsb2NrDQpPbmx5IGluIC91c3Ivc3Jj L3N5cy9pMzg2L2luY2x1ZGU6IGFzbmFtZXMuaC5vcmlnDQpPbmx5IGluIC91 c3Ivc3JjL3N5cy9pMzg2L2luY2x1ZGU6IGFzbmFtZXMuaC5yZWoNCmRpZmYg LXUgLXIgL3Vzci9zcmMvc3lzLm9sZC9pMzg2L2luY2x1ZGUvY3B1LmggL3Vz ci9zcmMvc3lzL2kzODYvaW5jbHVkZS9jcHUuaA0KLS0tIC91c3Ivc3JjL3N5 cy5vbGQvaTM4Ni9pbmNsdWRlL2NwdS5oCVRodSBBdWcgMjEgMTg6MzU6MzYg MjAwMw0KKysrIC91c3Ivc3JjL3N5cy9pMzg2L2luY2x1ZGUvY3B1LmgJRnJp IEF1ZyAyMiAwMjowNjoyNiAyMDAzDQpAQCAtMTM1LDcgKzEzNSw2IEBADQog I2lmZGVmIF9LRVJORUwNCiBleHRlcm4gY2hhcglidGV4dFtdOw0KIGV4dGVy biBjaGFyCWV0ZXh0W107DQotZXh0ZXJuIGNoYXIJS0VSTmVuZFtdOw0KIGV4 dGVybiB1X2NoYXIJaW50cl9uZXN0aW5nX2xldmVsOw0KIA0KIHZvaWQJZm9y a190cmFtcG9saW5lIF9fUCgodm9pZCkpOw0KZGlmZiAtdSAtciAvdXNyL3Ny Yy9zeXMub2xkL2kzODYvaW5jbHVkZS9nbG9iYWxkYXRhLmggL3Vzci9zcmMv c3lzL2kzODYvaW5jbHVkZS9nbG9iYWxkYXRhLmgNCi0tLSAvdXNyL3NyYy9z eXMub2xkL2kzODYvaW5jbHVkZS9nbG9iYWxkYXRhLmgJVGh1IEF1ZyAyMSAx ODozNTozNiAyMDAzDQorKysgL3Vzci9zcmMvc3lzL2kzODYvaW5jbHVkZS9n bG9iYWxkYXRhLmgJRnJpIEF1ZyAyMiAwMjowNjoxMCAyMDAzDQpAQCAtNjAs MTEgKzYwLDExIEBADQogCXB0X2VudHJ5X3QJKmdkX3Bydl9DTUFQMTsNCiAJ cHRfZW50cnlfdAkqZ2RfcHJ2X0NNQVAyOw0KIAlwdF9lbnRyeV90CSpnZF9w cnZfQ01BUDM7DQotCXBkX2VudHJ5X3QJKmdkX3Bydl9QTUFQMTsNCisJcHRf ZW50cnlfdAkqZ2RfcHJ2X1BNQVAxOw0KIAljYWRkcl90CQlnZF9wcnZfQ0FE RFIxOw0KIAljYWRkcl90CQlnZF9wcnZfQ0FERFIyOw0KIAljYWRkcl90CQln ZF9wcnZfQ0FERFIzOw0KLQlwdF9lbnRyeV90CSpnZF9wcnZfUEFERFIxOw0K Kwl1bnNpZ25lZAkqZ2RfcHJ2X1BBRERSMTsNCiAjZW5kaWYNCiAJdV9pbnQJ CWdkX2FzdHBlbmRpbmc7DQogfTsNCmRpZmYgLXUgLXIgL3Vzci9zcmMvc3lz Lm9sZC9pMzg2L2luY2x1ZGUvZ2xvYmFscy5oIC91c3Ivc3JjL3N5cy9pMzg2 L2luY2x1ZGUvZ2xvYmFscy5oDQotLS0gL3Vzci9zcmMvc3lzLm9sZC9pMzg2 L2luY2x1ZGUvZ2xvYmFscy5oCVRodSBBdWcgMjEgMTg6MzU6MzYgMjAwMw0K KysrIC91c3Ivc3JjL3N5cy9pMzg2L2luY2x1ZGUvZ2xvYmFscy5oCUZyaSBB dWcgMjIgMDI6MDU6NDAgMjAwMw0KQEAgLTEwMywxMSArMTAzLDExIEBADQog I2RlZmluZQlwcnZfQ01BUDEJR0xPQkFMX0xWQUxVRShwcnZfQ01BUDEsIHB0 X2VudHJ5X3QgKikNCiAjZGVmaW5lCXBydl9DTUFQMglHTE9CQUxfTFZBTFVF KHBydl9DTUFQMiwgcHRfZW50cnlfdCAqKQ0KICNkZWZpbmUJcHJ2X0NNQVAz CUdMT0JBTF9MVkFMVUUocHJ2X0NNQVAzLCBwdF9lbnRyeV90ICopDQotI2Rl ZmluZQlwcnZfUE1BUDEJR0xPQkFMX0xWQUxVRShwcnZfUE1BUDEsIHBkX2Vu dHJ5X3QgKikNCisjZGVmaW5lCXBydl9QTUFQMQlHTE9CQUxfTFZBTFVFKHBy dl9QTUFQMSwgcHRfZW50cnlfdCAqKQ0KICNkZWZpbmUJcHJ2X0NBRERSMQlH TE9CQUxfUlZBTFVFKHBydl9DQUREUjEsIGNhZGRyX3QpDQogI2RlZmluZQlw cnZfQ0FERFIyCUdMT0JBTF9SVkFMVUUocHJ2X0NBRERSMiwgY2FkZHJfdCkN CiAjZGVmaW5lCXBydl9DQUREUjMJR0xPQkFMX1JWQUxVRShwcnZfQ0FERFIz LCBjYWRkcl90KQ0KLSNkZWZpbmUJcHJ2X1BBRERSMQlHTE9CQUxfUlZBTFVF KHBydl9QQUREUjEsIHB0X2VudHJ5X3QgKikNCisjZGVmaW5lCXBydl9QQURE UjEJR0xPQkFMX1JWQUxVRShwcnZfUEFERFIxLCB1bnNpZ25lZCAqKQ0KICNl bmRpZg0KICNlbmRpZgkvKlVQIGtlcm5lbCovDQogDQpPbmx5IGluIC91c3Iv c3JjL3N5cy9pMzg2L2luY2x1ZGU6IGdsb2JhbHMuaC5vcmlnDQpPbmx5IGlu IC91c3Ivc3JjL3N5cy9pMzg2L2luY2x1ZGU6IGdsb2JhbHMuaC5yZWoNCmRp ZmYgLXUgLXIgL3Vzci9zcmMvc3lzLm9sZC9pMzg2L2luY2x1ZGUvbWRfdmFy LmggL3Vzci9zcmMvc3lzL2kzODYvaW5jbHVkZS9tZF92YXIuaA0KLS0tIC91 c3Ivc3JjL3N5cy5vbGQvaTM4Ni9pbmNsdWRlL21kX3Zhci5oCVRodSBBdWcg MjEgMTg6MzU6MzYgMjAwMw0KKysrIC91c3Ivc3JjL3N5cy9pMzg2L2luY2x1 ZGUvbWRfdmFyLmgJRnJpIEF1ZyAyMiAwMjowNToxMSAyMDAzDQpAQCAtNzIs NyArNzIsNiBAQA0KIHZvaWQJYmNvcHliIF9fUCgoY29uc3Qgdm9pZCAqZnJv bSwgdm9pZCAqdG8sIHNpemVfdCBsZW4pKTsNCiB2b2lkCWJ1c2RtYV9zd2kg X19QKCh2b2lkKSk7DQogdm9pZAljcHVfaGFsdCBfX1AoKHZvaWQpKTsNCi12 b2lkCWNwdV9pZGxlIF9fUCgodm9pZCkpOw0KIHZvaWQJY3B1X3Jlc2V0IF9f UCgodm9pZCkpOw0KIHZvaWQJY3B1X3NldHJlZ3MgX19QKCh2b2lkKSk7DQog dm9pZAljcHVfc3dpdGNoX2xvYWRfZ3MgX19QKCh2b2lkKSkgX19hc20oX19T VFJJTkcoY3B1X3N3aXRjaF9sb2FkX2dzKSk7DQpkaWZmIC11IC1yIC91c3Iv c3JjL3N5cy5vbGQvaTM4Ni9pbmNsdWRlL3BhcmFtLmggL3Vzci9zcmMvc3lz L2kzODYvaW5jbHVkZS9wYXJhbS5oDQotLS0gL3Vzci9zcmMvc3lzLm9sZC9p Mzg2L2luY2x1ZGUvcGFyYW0uaAlUaHUgQXVnIDIxIDE4OjM1OjM2IDIwMDMN CisrKyAvdXNyL3NyYy9zeXMvaTM4Ni9pbmNsdWRlL3BhcmFtLmgJRnJpIEF1 ZyAyMiAwMjowNDo0MyAyMDAzDQpAQCAtOTQsMTggKzk0LDEwIEBADQogI2Rl ZmluZSBQQUdFX01BU0sJKFBBR0VfU0laRS0xKQ0KICNkZWZpbmUgTlBURVBH CQkoUEFHRV9TSVpFLyhzaXplb2YgKHB0X2VudHJ5X3QpKSkNCiANCi0jaWZk ZWYgUEFFDQotI2RlZmluZSBOUEdQVEQJCTQNCi0jZGVmaW5lIFBEUlNISUZU CTIxCQkvKiBMT0cyKE5CUERSKSAqLw0KLSNlbHNlDQotI2RlZmluZSBOUEdQ VEQJCTENCisjZGVmaW5lIE5QREVQRwkJKFBBR0VfU0laRS8oc2l6ZW9mIChw ZF9lbnRyeV90KSkpDQogI2RlZmluZSBQRFJTSElGVAkyMgkJLyogTE9HMihO QlBEUikgKi8NCi0jZW5kaWYNCi0NCiAjZGVmaW5lIE5CUERSCQkoMTw8UERS U0hJRlQpCS8qIGJ5dGVzL3BhZ2UgZGlyICovDQogI2RlZmluZSBQRFJNQVNL CQkoTkJQRFItMSkNCi0jZGVmaW5lIE5QREVQRwkJKFBBR0VfU0laRS8oc2l6 ZW9mIChwZF9lbnRyeV90KSkpDQotI2RlZmluZSBOUERFUFRECQkoTlBERVBH Kk5QR1BURCkNCiANCiAjZGVmaW5lIERFVl9CU0hJRlQJOQkJLyogbG9nMihE RVZfQlNJWkUpICovDQogI2RlZmluZSBERVZfQlNJWkUJKDE8PERFVl9CU0hJ RlQpDQpPbmx5IGluIC91c3Ivc3JjL3N5cy9pMzg2L2luY2x1ZGU6IHBhcmFt Lmgub3JpZw0KZGlmZiAtdSAtciAvdXNyL3NyYy9zeXMub2xkL2kzODYvaW5j bHVkZS9wbWFwLmggL3Vzci9zcmMvc3lzL2kzODYvaW5jbHVkZS9wbWFwLmgN Ci0tLSAvdXNyL3NyYy9zeXMub2xkL2kzODYvaW5jbHVkZS9wbWFwLmgJVGh1 IEF1ZyAyMSAxODozNTozNiAyMDAzDQorKysgL3Vzci9zcmMvc3lzL2kzODYv aW5jbHVkZS9wbWFwLmgJRnJpIEF1ZyAyMiAwMjowMzo1MiAyMDAzDQpAQCAt NzAsNyArNzAsNyBAQA0KIC8qIE91ciB2YXJpb3VzIGludGVycHJldGF0aW9u cyBvZiB0aGUgYWJvdmUgKi8NCiAjZGVmaW5lIFBHX1cJCVBHX0FWQUlMMQkv KiAiV2lyZWQiIHBzZXVkb2ZsYWcgKi8NCiAjZGVmaW5lCVBHX01BTkFHRUQJ UEdfQVZBSUwyDQotI2RlZmluZQlQR19GUkFNRQkofigodm1fcGFkZHJfdClQ QUdFX01BU0spKQ0KKyNkZWZpbmUJUEdfRlJBTUUJKH5QQUdFX01BU0spDQog I2RlZmluZQlQR19QUk9UCQkoUEdfUld8UEdfVSkJLyogYWxsIHByb3RlY3Rp b24gYml0cyAuICovDQogI2RlZmluZSBQR19OCQkoUEdfTkNfUFdUfFBHX05D X1BDRCkJLyogTm9uLWNhY2hlYWJsZSAqLw0KIA0KQEAgLTg4LDcgKzg4LDcg QEANCiAgKiBUaGlzICoqTVVTVCoqIGJlIGEgbXVsdGlwbGUgb2YgNCAoZWc6 IDI1MiwgMjU2LCAyNjAsIGV0YykuDQogICovDQogI2lmbmRlZiBLVkFfUEFH RVMNCi0jZGVmaW5lIEtWQV9QQUdFUwkoMSA8PCAoMzAgLSBQRFJTSElGVCkp DQorI2RlZmluZSBLVkFfUEFHRVMJMjU2DQogI2VuZGlmDQogDQogLyoNCkBA IC05NywxNyArOTcsMTMgQEANCiAjZGVmaW5lIFZBRERSKHBkaSwgcHRpKSAo KHZtX29mZnNldF90KSgoKHBkaSk8PFBEUlNISUZUKXwoKHB0aSk8PFBBR0Vf U0hJRlQpKSkNCiANCiAjaWZuZGVmIE5LUFQNCi0jaWZkZWYgUEFFDQotI2Rl ZmluZQlOS1BUCTEyMAkJLyogYWN0dWFsIG51bWJlciBvZiBrZXJuZWwgcGFn ZSB0YWJsZXMgKi8NCi0jZWxzZQ0KLSNkZWZpbmUJTktQVAkzMAkJLyogYWN0 dWFsIG51bWJlciBvZiBrZXJuZWwgcGFnZSB0YWJsZXMgKi8NCi0jZW5kaWYN CisjZGVmaW5lCU5LUFQJCTMwCS8qIGFjdHVhbCBudW1iZXIgb2Yga2VybmVs IHBhZ2UgdGFibGVzICovDQogI2VuZGlmDQogI2lmbmRlZiBOS1BERQ0KICNp ZmRlZiBTTVANCi0jZGVmaW5lIE5LUERFCShLVkFfUEFHRVMgLSAxKQkvKiBh ZGRyZXNzYWJsZSBudW1iZXIgb2YgcGFnZSB0YWJsZXMvcGRlJ3MgKi8NCisj ZGVmaW5lIE5LUERFCShLVkFfUEFHRVMgLSAyKQkvKiBhZGRyZXNzYWJsZSBu dW1iZXIgb2YgcGFnZSB0YWJsZXMvcGRlJ3MgKi8NCiAjZWxzZQ0KLSNkZWZp bmUgTktQREUJKEtWQV9QQUdFUykJLyogYWRkcmVzc2FibGUgbnVtYmVyIG9m IHBhZ2UgdGFibGVzL3BkZSdzICovDQorI2RlZmluZSBOS1BERQkoS1ZBX1BB R0VTIC0gMSkJLyogYWRkcmVzc2FibGUgbnVtYmVyIG9mIHBhZ2UgdGFibGVz L3BkZSdzICovDQogI2VuZGlmDQogI2VuZGlmDQogDQpAQCAtMTE5LDEzICsx MTUsMTYgQEANCiAgKg0KICAqIFNNUF9QUklWUEFHRVM6IFRoZSBwZXItY3B1 IGFkZHJlc3Mgc3BhY2UgaXMgMHhmZjgwMDAwIC0+IDB4ZmZiZmZmZmYNCiAg Ki8NCisjZGVmaW5lCUFQVERQVERJCShOUERFUEctMSkJLyogYWx0IHB0ZCBl bnRyeSB0aGF0IHBvaW50cyB0byBBUFREICovDQogI2lmZGVmIFNNUA0KLSNk ZWZpbmUgTVBQVERJCQkoTlBERVBURC0xKQkvKiBwZXIgY3B1IHB0ZCBlbnRy eSAqLw0KKyNkZWZpbmUgTVBQVERJCQkoQVBURFBUREktMSkJLyogcGVyIGNw dSBwdGQgZW50cnkgKi8NCiAjZGVmaW5lCUtQVERJCQkoTVBQVERJLU5LUERF KQkvKiBzdGFydCBvZiBrZXJuZWwgdmlydHVhbCBwZGUncyAqLw0KICNlbHNl DQotI2RlZmluZQlLUFRESQkJKE5QREVQVEQtTktQREUpCS8qIHN0YXJ0IG9m IGtlcm5lbCB2aXJ0dWFsIHBkZSdzICovDQorI2RlZmluZQlLUFRESQkJKEFQ VERQVERJLU5LUERFKS8qIHN0YXJ0IG9mIGtlcm5lbCB2aXJ0dWFsIHBkZSdz ICovDQogI2VuZGlmCS8qIFNNUCAqLw0KLSNkZWZpbmUJUFREUFRESQkJKEtQ VERJLU5QR1BURCkJLyogcHRkIGVudHJ5IHRoYXQgcG9pbnRzIHRvIHB0ZCEg Ki8NCisjZGVmaW5lCVBURFBUREkJCShLUFRESS0xKQkvKiBwdGQgZW50cnkg dGhhdCBwb2ludHMgdG8gcHRkISAqLw0KKyNkZWZpbmUJVU1BWFBUREkJKFBU RFBUREktMSkJLyogcHRkIGVudHJ5IGZvciB1c2VyIHNwYWNlIGVuZCAqLw0K KyNkZWZpbmUJVU1BWFBURU9GRgkoTlBURVBHKQkvKiBwdGUgZW50cnkgZm9y IHVzZXIgc3BhY2UgZW5kICovDQogDQogLyoNCiAgKiBYWFggZG9lc24ndCBy ZWFsbHkgYmVsb25nIGhlcmUgSSBndWVzcy4uLg0KQEAgLTEzNywxOCArMTM2 LDggQEANCiANCiAjaW5jbHVkZSA8c3lzL3F1ZXVlLmg+DQogDQotI2lmZGVm IFBBRQ0KLXR5cGVkZWYgdV9pbnQ2NF90CXBkcHRfZW50cnlfdDsNCi10eXBl ZGVmIHVfaW50NjRfdAlwZF9lbnRyeV90Ow0KLXR5cGVkZWYgdV9pbnQ2NF90 CXB0X2VudHJ5X3Q7DQotI2RlZmluZSBQVEVTSElGVAkzDQotI2RlZmluZSBQ REVTSElGVAkzDQotI2Vsc2UNCi10eXBlZGVmIHVfaW50MzJfdAlwZF9lbnRy eV90Ow0KLXR5cGVkZWYgdV9pbnQzMl90CXB0X2VudHJ5X3Q7DQotI2RlZmlu ZSBQVEVTSElGVAkyDQotI2RlZmluZSBQREVTSElGVAkyDQotI2VuZGlmDQor dHlwZWRlZiB1bnNpZ25lZCBpbnQgKnBkX2VudHJ5X3Q7DQordHlwZWRlZiB1 bnNpZ25lZCBpbnQgKnB0X2VudHJ5X3Q7DQogDQogI2RlZmluZSBQREVTSVpF CQlzaXplb2YocGRfZW50cnlfdCkgLyogZm9yIGFzc2VtYmx5IGZpbGVzICov DQogI2RlZmluZSBQVEVTSVpFCQlzaXplb2YocHRfZW50cnlfdCkgLyogZm9y IGFzc2VtYmx5IGZpbGVzICovDQpAQCAtMTU4LDEzICsxNDcsMTAgQEANCiAg KiBhbmQgZGlyZWN0b3JpZXMuDQogICovDQogI2lmZGVmIF9LRVJORUwNCi1l eHRlcm4gcHRfZW50cnlfdCBQVG1hcFtdOw0KLWV4dGVybiBwZF9lbnRyeV90 IFBURFtdLCBQVERwZGVbXTsNCitleHRlcm4gcHRfZW50cnlfdCBQVG1hcFtd LCBBUFRtYXBbXSwgVXB0ZTsNCitleHRlcm4gcGRfZW50cnlfdCBQVERbXSwg QVBURFtdLCBQVERwZGUsIEFQVERwZGUsIFVwZGU7DQogDQotZXh0ZXJuIHVf aW50MzJfdCBJZGxlUFREOwkvKiBwaHlzaWNhbCBhZGRyZXNzIG9mICJJZGxl IiBzdGF0ZSBkaXJlY3RvcnkgKi8NCi0jaWZkZWYgUEFFDQotZXh0ZXJuIHBk cHRfZW50cnlfdCBJZGxlUERQVFtdOw0KLSNlbmRpZg0KK2V4dGVybiBwZF9l bnRyeV90IElkbGVQVEQ7CS8qIHBoeXNpY2FsIGFkZHJlc3Mgb2YgIklkbGUi IHN0YXRlIGRpcmVjdG9yeSAqLw0KICNlbmRpZg0KIA0KICNpZmRlZiBfS0VS TkVMDQpAQCAtMTc2LDYgKzE2Miw4IEBADQogICovDQogI2RlZmluZQl2dG9w dGUodmEpCShQVG1hcCArIGkzODZfYnRvcCh2YSkpDQogDQorI2RlZmluZQlh dnRvcHRlKHZhKQkoQVBUbWFwICsgaTM4Nl9idG9wKHZhKSkNCisNCiAvKg0K ICAqCVJvdXRpbmU6CXBtYXBfa2V4dHJhY3QNCiAgKglGdW5jdGlvbjoNCkBA IC0xODYsMTcgKzE3NCwyMiBAQA0KIHBtYXBfa2V4dHJhY3Qodm1fb2Zmc2V0 X3QgdmEpDQogew0KIAl2bV9wYWRkcl90IHBhOw0KLQ0KLQlpZiAoKHBhID0g UFREW3ZhID4+IFBEUlNISUZUXSkgJiBQR19QUykgew0KKwlpZiAoKHBhID0g KHZtX29mZnNldF90KSBQVERbdmEgPj4gUERSU0hJRlRdKSAmIFBHX1BTKSB7 DQogCQlwYSA9IChwYSAmIH4oTkJQRFIgLSAxKSkgfCAodmEgJiAoTkJQRFIg LSAxKSk7DQogCX0gZWxzZSB7DQotCQlwYSA9ICp2dG9wdGUodmEpOw0KKwkJ cGEgPSAqKHZtX29mZnNldF90ICopdnRvcHRlKHZhKTsNCiAJCXBhID0gKHBh ICYgUEdfRlJBTUUpIHwgKHZhICYgUEFHRV9NQVNLKTsNCiAJfQ0KIAlyZXR1 cm4gcGE7DQogfQ0KIA0KLSNkZWZpbmUJdnRvcGh5cyh2YSkJcG1hcF9rZXh0 cmFjdCgodm1fb2Zmc2V0X3QpICh2YSkpDQorI2lmIDANCisjZGVmaW5lCXZ0 b3BoeXModmEpCSgoKHZtX29mZnNldF90KSAoKnZ0b3B0ZSh2YSkpJlBHX0ZS QU1FKSB8ICgodm1fb2Zmc2V0X3QpKHZhKSAmIFBBR0VfTUFTSykpDQorI2Vs c2UNCisjZGVmaW5lCXZ0b3BoeXModmEpCXBtYXBfa2V4dHJhY3QoKCh2bV9v ZmZzZXRfdCkgKHZhKSkpDQorI2VuZGlmDQorDQorI2RlZmluZQlhdnRvcGh5 cyh2YSkJKCgodm1fb2Zmc2V0X3QpICgqYXZ0b3B0ZSh2YSkpJlBHX0ZSQU1F KSB8ICgodm1fb2Zmc2V0X3QpKHZhKSAmIFBBR0VfTUFTSykpDQogDQogI2Vu ZGlmDQogDQpAQCAtMjE0LDE0ICsyMDcsMTAgQEANCiAJcGRfZW50cnlfdAkJ KnBtX3BkaXI7CS8qIEtWQSBvZiBwYWdlIGRpcmVjdG9yeSAqLw0KIAl2bV9v YmplY3RfdAkJcG1fcHRlb2JqOwkvKiBDb250YWluZXIgZm9yIHB0ZSdzICov DQogCVRBSUxRX0hFQUQoLHB2X2VudHJ5KQlwbV9wdmxpc3Q7CS8qIGxpc3Qg b2YgbWFwcGluZ3MgaW4gcG1hcCAqLw0KKwlpbnQJCQlwbV9jb3VudDsJLyog cmVmZXJlbmNlIGNvdW50ICovDQogCWludAkJCXBtX2FjdGl2ZTsJLyogYWN0 aXZlIG9uIGNwdXMgKi8NCiAJc3RydWN0IHBtYXBfc3RhdGlzdGljcwlwbV9z dGF0czsJLyogcG1hcCBzdGF0aXN0aWNzICovDQogCXN0cnVjdAl2bV9wYWdl CQkqcG1fcHRwaGludDsJLyogcG1hcCBwdHAgaGludCAqLw0KLSNpZmRlZiBQ QUUNCi0JcGRwdF9lbnRyeV90CQkqcG1fcGRwdDsJLyogS1ZBIG9mIHBhZ2Ug ZGlyIHB0ciB0YWJsZSAqLw0KLSNlbHNlDQotCXZvaWQJCQkqcG1fcGRwdF9k b250dXNlOw0KLSNlbmRpZg0KIH07DQogDQogI2RlZmluZSBwbWFwX3Jlc2lk ZW50X2NvdW50KHBtYXApIChwbWFwKS0+cG1fc3RhdHMucmVzaWRlbnRfY291 bnQNCkBAIC0yNDQsNiArMjMzLDExIEBADQogCXZtX3BhZ2VfdAlwdl9wdGVt OwkvKiBWTSBwYWdlIGZvciBwdGUgKi8NCiB9ICpwdl9lbnRyeV90Ow0KIA0K KyNkZWZpbmUJUFZfRU5UUllfTlVMTAkoKHB2X2VudHJ5X3QpIDApDQorDQor I2RlZmluZQlQVl9DSQkJMHgwMQkvKiBhbGwgZW50cmllcyBtdXN0IGJlIGNh Y2hlIGluaGliaXRlZCAqLw0KKyNkZWZpbmUJUFZfUFRQQUdFCTB4MDIJLyog ZW50cnkgbWFwcyBhIHBhZ2UgdGFibGUgcGFnZSAqLw0KKw0KICNpZmRlZglf S0VSTkVMDQogDQogI2RlZmluZSBOUFBST1ZNVFJSCQk4DQpAQCAtMjU0LDYg KzI0OCw4IEBADQogfTsNCiBleHRlcm4gc3RydWN0IHBwcm9fdm10cnIgUFBy b192bXRycltOUFBST1ZNVFJSXTsNCiANCitleHRlcm4gY2FkZHJfdAlDQURE UjE7DQorZXh0ZXJuIHB0X2VudHJ5X3QgKkNNQVAxOw0KIGV4dGVybiB2bV9w YWRkcl90IGF2YWlsX2VuZDsNCiBleHRlcm4gdm1fcGFkZHJfdCBhdmFpbF9z dGFydDsNCiBleHRlcm4gdm1fb2Zmc2V0X3QgY2xlYW5fZXZhOw0KQEAgLTI2 MywxMSArMjU5LDEyIEBADQogZXh0ZXJuIHZtX29mZnNldF90IHZpcnR1YWxf YXZhaWw7DQogZXh0ZXJuIHZtX29mZnNldF90IHZpcnR1YWxfZW5kOw0KIA0K LXZvaWQJcG1hcF9ib290c3RyYXAgX19QKCh2bV9wYWRkcl90LCB2bV9wYWRk cl90KSk7DQordm9pZAlwbWFwX2Jvb3RzdHJhcCBfX1AoKCB2bV9wYWRkcl90 LCB2bV9wYWRkcl90KSk7DQogcG1hcF90CXBtYXBfa2VybmVsIF9fUCgodm9p ZCkpOw0KIHZvaWQJKnBtYXBfbWFwZGV2IF9fUCgodm1fcGFkZHJfdCwgdm1f c2l6ZV90KSk7DQogdm9pZAlwbWFwX3VubWFwZGV2IF9fUCgodm1fb2Zmc2V0 X3QsIHZtX3NpemVfdCkpOw0KLXB0X2VudHJ5X3QgKnBtYXBfcHRlIF9fUCgo cG1hcF90LCB2bV9vZmZzZXRfdCkpOw0KK3Vuc2lnbmVkICpwbWFwX3B0ZSBf X1AoKHBtYXBfdCwgdm1fb2Zmc2V0X3QpKSBfX3B1cmUyOw0KK3ZtX3BhZ2Vf dCBwbWFwX3VzZV9wdCBfX1AoKHBtYXBfdCwgdm1fb2Zmc2V0X3QpKTsNCiAj aWZkZWYgU01QDQogdm9pZAlwbWFwX3NldF9vcHQgX19QKCh2b2lkKSk7DQog I2VuZGlmDQpPbmx5IGluIC91c3Ivc3JjL3N5cy9pMzg2L2luY2x1ZGU6IHBt YXAuaC5vcmlnDQpkaWZmIC11IC1yIC91c3Ivc3JjL3N5cy5vbGQvaTM4Ni9p bmNsdWRlL3ZtcGFyYW0uaCAvdXNyL3NyYy9zeXMvaTM4Ni9pbmNsdWRlL3Zt cGFyYW0uaA0KLS0tIC91c3Ivc3JjL3N5cy5vbGQvaTM4Ni9pbmNsdWRlL3Zt cGFyYW0uaAlUaHUgQXVnIDIxIDE4OjM1OjM3IDIwMDMNCisrKyAvdXNyL3Ny Yy9zeXMvaTM4Ni9pbmNsdWRlL3ZtcGFyYW0uaAlGcmkgQXVnIDIyIDAyOjAw OjA4IDIwMDMNCkBAIC05MCw3ICs5MCw3IEBADQogICogbWVzc3kgYXQgdGlt ZXMsIGJ1dCBoZXksIHdlJ2xsIGRvIGFueXRoaW5nIHRvIHNhdmUgYSBwYWdl IDotKQ0KICAqLw0KIA0KLSNkZWZpbmUgVk1fTUFYX0tFUk5FTF9BRERSRVNT CVZBRERSKEtQVERJK05LUERFLTEsIE5QVEVQRy0xKQ0KKyNkZWZpbmUgVk1f TUFYX0tFUk5FTF9BRERSRVNTCVZBRERSKEtQVERJK05LUERFLCAwKQ0KICNk ZWZpbmUgVk1fTUlOX0tFUk5FTF9BRERSRVNTCVZBRERSKFBURFBUREksIFBU RFBUREkpDQogDQogI2RlZmluZQlLRVJOQkFTRQkJVkFERFIoS1BUREksIDAp DQpAQCAtMTAxLDcgKzEwMSw3IEBADQogI2RlZmluZSBVUFRfTUFYX0FERFJF U1MJCVZBRERSKFBURFBUREksIFBURFBUREkpDQogI2RlZmluZSBVUFRfTUlO X0FERFJFU1MJCVZBRERSKFBURFBUREksIDApDQogDQotI2RlZmluZSBWTV9N QVhVU0VSX0FERFJFU1MJVkFERFIoUFREUFRESSwgMCkNCisjZGVmaW5lIFZN X01BWFVTRVJfQUREUkVTUwlWQUREUihVTUFYUFRESSwgVU1BWFBURU9GRikN CiANCiAjZGVmaW5lIFVTUlNUQUNLCQlWTV9NQVhVU0VSX0FERFJFU1MNCiAN Ck9ubHkgaW4gL3Vzci9zcmMvc3lzL2kzODYvaW5jbHVkZTogdm1wYXJhbS5o Lm9yaWcNCmRpZmYgLXUgLXIgL3Vzci9zcmMvc3lzLm9sZC9pMzg2L2lzYS93 ZC5jIC91c3Ivc3JjL3N5cy9pMzg2L2lzYS93ZC5jDQotLS0gL3Vzci9zcmMv c3lzLm9sZC9pMzg2L2lzYS93ZC5jCVRodSBBdWcgMjEgMTg6MzU6NDAgMjAw Mw0KKysrIC91c3Ivc3JjL3N5cy9pMzg2L2lzYS93ZC5jCUZyaSBBdWcgMjIg MDE6NTk6MjQgMjAwMw0KQEAgLTE5MjcsMTQgKzE5MjcsMTIgQEANCiAJCQly ZXR1cm4gKEVJTyk7DQogCQl9DQogCQl3aGlsZSAoYmxrY250ICE9IDApIHsN Ci0JCQljYWRkcl90IHZhOw0KLQ0KIAkJCWlmIChpc19waHlzaWNhbF9tZW1v cnkoKHZtX29mZnNldF90KWFkZHIpKQ0KLQkJCQl2YSA9IHBtYXBfa2VudGVy X3RlbXBvcmFyeSgNCi0JCQkJCXRydW5jX3BhZ2UoKHZtX29mZnNldF90KWFk ZHIpLCAwKTsNCisJCQkJcG1hcF9rZW50ZXIoKHZtX29mZnNldF90KUNBRERS MSwNCisJCQkJCSAgIHRydW5jX3BhZ2UoKHZtX29mZnNldF90KWFkZHIpKTsN CiAJCQllbHNlDQotCQkJCXZhID0gcG1hcF9rZW50ZXJfdGVtcG9yYXJ5KA0K LQkJCQkJdHJ1bmNfcGFnZSgwKSwgMCk7DQorCQkJCXBtYXBfa2VudGVyKCh2 bV9vZmZzZXRfdClDQUREUjEsDQorCQkJCQkgICB0cnVuY19wYWdlKDApKTsN CiANCiAJCQkvKiBSZWFkeSB0byBzZW5kIGRhdGE/ICovDQogCQkJREVMQVko NSk7CS8qIEFUQSBzcGVjICovDQpAQCAtMTk0NiwxMSArMTk0NCwxMSBAQA0K IAkJCX0NCiAJCQlpZiAoZHUtPmRrX2ZsYWdzICYgREtGTF8zMkJJVCkNCiAJ CQkJb3V0c2woZHUtPmRrX3BvcnQgKyB3ZF9kYXRhLA0KLQkJCQkgICAgICB2 YSArICgoaW50KWFkZHIgJiBQQUdFX01BU0spLA0KKwkJCQkgICAgICBDQURE UjEgKyAoKGludClhZGRyICYgUEFHRV9NQVNLKSwNCiAJCQkJICAgICAgREVW X0JTSVpFIC8gc2l6ZW9mKGxvbmcpKTsNCiAJCQllbHNlDQogCQkJCW91dHN3 KGR1LT5ka19wb3J0ICsgd2RfZGF0YSwNCi0JCQkJICAgICAgdmEgKyAoKGlu dClhZGRyICYgUEFHRV9NQVNLKSwNCisJCQkJICAgICAgQ0FERFIxICsgKChp bnQpYWRkciAmIFBBR0VfTUFTSyksDQogCQkJCSAgICAgIERFVl9CU0laRSAv IHNpemVvZihzaG9ydCkpOw0KIAkJCWFkZHIgKz0gREVWX0JTSVpFOw0KIAkJ CS8qDQpPbmx5IGluIC91c3Ivc3JjL3N5cy9pMzg2L2lzYTogd2QuYy5vcmln DQpPbmx5IGluIC91c3Ivc3JjL3N5cy9pMzg2L2lzYTogd2QuYy5yZWoNCk9u bHkgaW4gL3Vzci9zcmMvc3lzL2kzODYvaXNhOiB3ZC5jLnJlai5vcmlnDQpk aWZmIC11IC1yIC91c3Ivc3JjL3N5cy5vbGQvdm0vcG1hcC5oIC91c3Ivc3Jj L3N5cy92bS9wbWFwLmgNCi0tLSAvdXNyL3NyYy9zeXMub2xkL3ZtL3BtYXAu aAlUaHUgQXVnIDIxIDE4OjM2OjI1IDIwMDMNCisrKyAvdXNyL3NyYy9zeXMv dm0vcG1hcC5oCUZyaSBBdWcgMjIgMDE6NTY6NTkgMjAwMw0KQEAgLTEyNSw2 ICsxMjUsNyBAQA0KIAkJICAgIHZtX3Byb3RfdCkpOw0KIHZvaWQJCSBwbWFw X3FlbnRlciBfX1AoKHZtX29mZnNldF90LCB2bV9wYWdlX3QgKiwgaW50KSk7 DQogdm9pZAkJIHBtYXBfcXJlbW92ZSBfX1AoKHZtX29mZnNldF90LCBpbnQp KTsNCit2b2lkCQkgcG1hcF9yZWZlcmVuY2UgX19QKChwbWFwX3QpKTsNCiB2 b2lkCQkgcG1hcF9yZWxlYXNlIF9fUCgocG1hcF90KSk7DQogdm9pZAkJIHBt YXBfcmVtb3ZlIF9fUCgocG1hcF90LCB2bV9vZmZzZXRfdCwgdm1fb2Zmc2V0 X3QpKTsNCiB2b2lkCQkgcG1hcF9yZW1vdmVfcGFnZXMgX19QKChwbWFwX3Qs IHZtX29mZnNldF90LCB2bV9vZmZzZXRfdCkpOw0KZGlmZiAtdSAtciAvdXNy L3NyYy9zeXMub2xkL3ZtL3ZtX2tlcm4uYyAvdXNyL3NyYy9zeXMvdm0vdm1f a2Vybi5jDQotLS0gL3Vzci9zcmMvc3lzLm9sZC92bS92bV9rZXJuLmMJVGh1 IEF1ZyAyMSAxODozNjoyNSAyMDAzDQorKysgL3Vzci9zcmMvc3lzL3ZtL3Zt X2tlcm4uYwlGcmkgQXVnIDIyIDAxOjU2OjA5IDIwMDMNCkBAIC0yNjUsNiAr MjY1LDcgQEANCiAJCXBhbmljKCJrbWVtX3N1YmFsbG9jIik7DQogCX0NCiAJ Km1heCA9ICptaW4gKyBzaXplOw0KKwlwbWFwX3JlZmVyZW5jZSh2bV9tYXBf cG1hcChwYXJlbnQpKTsNCiAJcmVzdWx0ID0gdm1fbWFwX2NyZWF0ZSh2bV9t YXBfcG1hcChwYXJlbnQpLCAqbWluLCAqbWF4KTsNCiAJaWYgKHJlc3VsdCA9 PSBOVUxMKQ0KIAkJcGFuaWMoImttZW1fc3ViYWxsb2M6IGNhbm5vdCBjcmVh dGUgc3VibWFwIik7DQo= --0-1454759381-1061539781=:7877--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20030822030729.A7877>