From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alexander Atanasov Date: Tue, 04 Jun 2002 23:08:55 +0000 Subject: [LARTC] Some work to extend SFQ to be more configurable MIME-Version: 1 Content-Type: multipart/mixed; boundary="1607778983-867809566-1023232135=:1858" Message-Id: List-Id: To: lartc@vger.kernel.org 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. --1607778983-867809566-1023232135=:1858 Content-Type: TEXT/PLAIN; charset=US-ASCII Hi there! On Tue, 4 Jun 2002, Martin Devera wrote: > This is often discussed and is on "TODO" for someone ;) > > > > > SFQ is connection oriented. right? > > Would be a good idea to make the queues per ip rather than per tcp flow? > > So there would be per host fairnes. I've done some in this direction , probably needs more work, and it's poorly tested - expect b00ms ;) This adds a new qdisc for now - esfq which is a 100% clone of original sfq. - You can set all sfq parameters: hash table size, queue depths, queue limits. - You can choose from 3 hash types: original(classic), dst ip, src ip. Things to consider: perturbation with dst and src hashes is not good IMHO, you can try with perturb 0 if it couses trouble. Please, see the attached files. Plaing with it gives interesting results: higher depth -> makes flows equal slower small depth -> makes flows equal faster limit kills big delays when set at about 75-85% of depth. Needs testings and mesurements - that's why i made it separate qdisc and not a patch over sfq, i wanted to compare both. Any feedback good or bad is welcome. -- have fun, alex --1607778983-867809566-1023232135=:1858 Content-Type: TEXT/PLAIN; charset=US-ASCII; name=README Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename=README CVlvdSBuZWVkOg0KCQlpcHJvdXRlMi0yLjIuNC1ub3ctc3MwMDEwMDcudGFy Lmd6DQoJCWxpbnV4LTIuNC4xOC50YXIuZ3oNCgkNCglUaGlzIG1heSB3b3Jr IHdpdGggbmV4dCB2ZXJzaW9ucyB0b28uIA0KDQoJRXhhbXBsZSBTdGVwIGJ5 IFN0ZXAgaW5zdGFsbA0KCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KCUluc3Rh bGwga2VybmVsOg0KCXRhciB6eHZmIGxpbnV4LTIuNC4xOC50YXIuZ3oNCglj ZCBsaW51eA0KCWNhdCBsaW51eC0yLjQuMTgtZXNmcS5kaWZmIHwgcGF0Y2gg LXAxDQoJbWFrZSBtZW51Y29uZmlnDQoNCglOb3cgeW91IGhhdmUgaXQgaW46 DQoJTmV0d29ya2luZyBvcHRpb25zICAtLS0+IFFvUyBhbmQvb3IgZmFpciBx dWV1ZWluZyAtLS0+IEVTRlEgcXVldWUNCg0KCUNvbmZpZ3VyZSBhbmQgaW5z dGFsbCBrZXJuZWwNCgltYWtlIGRlcCBjbGVhbiBiekltYWdlIG1vZHVsZXNf aW5zdGFsbA0KCWNwIFN5c3RlbS5tYXAgL2Jvb3QvDQoJY3AgYXJjaC9pMzg2 L2Jvb3QvYnpJbWFnZSAvYm9vdC9iekltYWdlDQoJDQoJRWRpdCBsaWxvLmNv bmYgYW5kIGFkZCB5b3VyIG5ldyBrZXJuZWwuDQoNCgktLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0NCglJbnN0YWxsIGlwcm91dGU6DQoJdGFyIHp4dmYgaXByb3V0 ZTItMi4yLjQtbm93LXNzMDAxMDA3LnRhci5neg0KCWNkIGlwcm91dGUyDQoJ Y2F0IGlwcm91dGUyLTIuMi40LW5vdy1zczAwMTAwNy1lc2ZxLmRpZmYgfCBw YXRjaCAtcDENCgltYWtlDQovKiBOb3RlOiBJZiB5b3UgZ2V0IGFuIGVycm9y IGluIGxpYi9sbF9wcm90by5jIGNvbW1lbnQgX1BGKEVDSE8sZWNobykgKi8N CgljcCB0Yy90YyB5b3VyX2Zhdm91cml0ZV9pcHJvdXRlX3BhdGgvdGMNCglj cCBpcC9pcCB5b3VyX2Zhdm91cml0ZV9pcHJvdXRlX3BhdGgvaXANCg0KCS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQ0KCQ0KCVVzYWdlOiAuLi4gZXNmcSBbIHBl cnR1cmIgU0VDUyBdIFsgcXVhbnR1bSBCWVRFUyBdIFsgZGVwdGggRkxPV1Mg XQ0KICAgICAgICBbIGRpdmlzb3IgSEFTSEJJVFMgXSBbIGxpbWl0IFBLVFMg XSBbIGhhc2ggSEFTSFRZUEVdDQoNCglXaGVyZToNCglIQVNIVFlQRSA6PSB7 IGNsYXNzaWMgfCBzcmMgfCBkc3QgfQ0KDQoJRXhhbXBsZXM6DQoJdGMgcWRp c2MgYWRkIGRldiBldGgwIHJvb3QgZXNmcSBsaW1pdCAxMjggZGVwdGggMTI4 IGRpdmlzb3IgMTAgXA0KCSBoYXNoIGNsYXNzaWMgcGVydHVyYiAxNQ0KDQoJ U2V0dXBzIGEgY2xhc3NpYyBTRlEuDQoNCiAgICAgICAgdGMgcWRpc2MgYWRk IGRldiBldGgwIHJvb3QgZXNmcSBsaW1pdCA2NCBkZXB0aCA2NCBkaXZpc29y IDExIFwNCiAgICAgICAgIGhhc2ggZHN0DQoNCglTZXR1cHMgYSBkc3QgU0ZR IHdpdGggbGltaXQgYW5kIGRlcHRoIG9mIDY0IHBhY2tldHMgYW5kDQoJMTFi aXRzICgyMDQ4IHJvd3MpIGhhc2ggdGFibGUuIDE6MSB3aXRoIHNjaF9zZnEu DQoNCglZb3UgY2FuIGV4cGVyaW1lbnQgd2l0aCB0aGUgdmFsdWVzIGFzIHlv dSBsaWtlIHRvIGZpbmQNCgl0aGUgYmVzdCB3aGljaCBzZnEgY2FuIGRvIGZv ciB5b3UuDQoNCglNb3JlIGNhbiBiZSBmb3VuZCBpbjoNCglsaW51eC9uZXQv c2NoZWQvc2NoX3NmcS5jDQoJbGludXgvbmV0L3NjaGVkL3NjaF9lc2ZxLmMN Cg0KCUxpbWl0czogDQoJCS0gbGltaXQgbXVzdCBiZSBsZXNzIHRoYW4gZGVw dGgNCgkJLSBkaXZpc29yIG11c3QgYmUgbGVzcyB0aGFuIDE1DQo= --1607778983-867809566-1023232135=:1858 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="iproute2-2.2.4-now-ss001007-esfq.diff" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename="iproute2-2.2.4-now-ss001007-esfq.diff" ZGlmZiAtdXJOIGlwcm91dGUyLm9yaWcvdGMvTWFrZWZpbGUgaXByb3V0ZTIv dGMvTWFrZWZpbGUNCi0tLSBpcHJvdXRlMi5vcmlnL3RjL01ha2VmaWxlCVN1 biBBcHIgMTYgMjA6NDI6NTMgMjAwMA0KKysrIGlwcm91dGUyL3RjL01ha2Vm aWxlCVR1ZSBNYXkgMTQgMjM6MDQ6MTAgMjAwMg0KQEAgLTUsNiArNSw3IEBA DQogVENNT0RVTEVTIDo9DQogVENNT0RVTEVTICs9IHFfZmlmby5vDQogVENN T0RVTEVTICs9IHFfc2ZxLm8NCitUQ01PRFVMRVMgKz0gcV9lc2ZxLm8NCiBU Q01PRFVMRVMgKz0gcV9yZWQubw0KIFRDTU9EVUxFUyArPSBxX3ByaW8ubw0K IFRDTU9EVUxFUyArPSBxX3RiZi5vDQpkaWZmIC11ck4gaXByb3V0ZTIub3Jp Zy90Yy9xX2VzZnEuYyBpcHJvdXRlMi90Yy9xX2VzZnEuYw0KLS0tIGlwcm91 dGUyLm9yaWcvdGMvcV9lc2ZxLmMJVGh1IEphbiAgMSAwMjowMDowMCAxOTcw DQorKysgaXByb3V0ZTIvdGMvcV9lc2ZxLmMJVGh1IE1heSAxNiAwMjoxMzoz MCAyMDAyDQpAQCAtMCwwICsxLDE2OSBAQA0KKy8qDQorICogcV9lc2ZxLmMJ CUVTRlEuDQorICoNCisgKgkJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdh cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcg0KKyAqCQltb2Rp ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZQ0KKyAqCQlhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24NCisgKgkJMiBvZiB0 aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy c2lvbi4NCisgKg0KKyAqIEF1dGhvcnM6CUFsZXhleSBLdXpuZXRzb3YsIDxr dXpuZXRAbXMyLmluci5hYy5ydT4NCisgKg0KKyAqIENoYW5nZXM6CUFsZXhh bmRlciBBdGFuYXNvdiwgPGFsZXhAc3NpLmJnPg0KKyAqCQlBZGRlZCBkZXB0 aCxsaW1pdCxkaXZpc29yLGhhc2hfa2luZCBvcHRpb25zLg0KKyAqLw0KKw0K KyNpbmNsdWRlIDxzdGRpby5oPg0KKyNpbmNsdWRlIDxzdGRsaWIuaD4NCisj aW5jbHVkZSA8dW5pc3RkLmg+DQorI2luY2x1ZGUgPHN5c2xvZy5oPg0KKyNp bmNsdWRlIDxmY250bC5oPg0KKyNpbmNsdWRlIDxtYXRoLmg+IA0KKyNpbmNs dWRlIDxzeXMvc29ja2V0Lmg+DQorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4N CisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+DQorI2luY2x1ZGUgPHN0cmluZy5o Pg0KKw0KKyNpbmNsdWRlICJ1dGlscy5oIg0KKyNpbmNsdWRlICJ0Y191dGls LmgiDQorDQorc3RhdGljIHZvaWQgZXhwbGFpbih2b2lkKQ0KK3sNCisJZnBy aW50ZihzdGRlcnIsICJVc2FnZTogLi4uIGVzZnEgWyBwZXJ0dXJiIFNFQ1Mg XSBbIHF1YW50dW0gQllURVMgXSBbIGRlcHRoIEZMT1dTIF1cblx0WyBkaXZp c29yIEhBU0hCSVRTIF0gWyBsaW1pdCBQS1RTIF0gWyBoYXNoIEhBU0hUWVBF XVxuIik7DQorCWZwcmludGYoc3RkZXJyLCJXaGVyZTogXG4iKTsNCisJZnBy aW50ZihzdGRlcnIsIkhBU0hUWVBFIDo9IHsgY2xhc3NpYyB8IHNyYyB8IGRz dCB9XG4iKTsNCit9DQorDQorI2RlZmluZSB1c2FnZSgpIHJldHVybigtMSkN CisNCitzdGF0aWMgaW50IGVzZnFfcGFyc2Vfb3B0KHN0cnVjdCBxZGlzY191 dGlsICpxdSwgaW50IGFyZ2MsIGNoYXIgKiphcmd2LCBzdHJ1Y3Qgbmxtc2do ZHIgKm4pDQorew0KKwlpbnQgb2s9MDsNCisJc3RydWN0IHRjX3NmcV9xb3B0 IG9wdDsNCisNCisJbWVtc2V0KCZvcHQsIDAsIHNpemVvZihvcHQpKTsNCisN CisJb3B0Lmhhc2hfa2luZD0gVENBX1NGUV9IQVNIX0NMQVNTSUM7DQorCQ0K Kwl3aGlsZSAoYXJnYyA+IDApIHsNCisJCWlmIChzdHJjbXAoKmFyZ3YsICJx dWFudHVtIikgPT0gMCkgew0KKwkJCU5FWFRfQVJHKCk7DQorCQkJaWYgKGdl dF9zaXplKCZvcHQucXVhbnR1bSwgKmFyZ3YpKSB7DQorCQkJCWZwcmludGYo c3RkZXJyLCAiSWxsZWdhbCBcInF1YW50dW1cIlxuIik7DQorCQkJCXJldHVy biAtMTsNCisJCQl9DQorCQkJb2srKzsNCisJCX0gZWxzZSBpZiAoc3RyY21w KCphcmd2LCAicGVydHVyYiIpID09IDApIHsNCisJCQlORVhUX0FSRygpOw0K KwkJCWlmIChnZXRfaW50ZWdlcigmb3B0LnBlcnR1cmJfcGVyaW9kLCAqYXJn diwgMCkpIHsNCisJCQkJZnByaW50ZihzdGRlcnIsICJJbGxlZ2FsIFwicGVy dHVyYlwiXG4iKTsNCisJCQkJcmV0dXJuIC0xOw0KKwkJCX0NCisJCQlvaysr Ow0KKwkJfSBlbHNlIGlmIChzdHJjbXAoKmFyZ3YsICJkZXB0aCIpID09IDAp IHsNCisJCQlORVhUX0FSRygpOw0KKwkJCWlmIChnZXRfaW50ZWdlcigmb3B0 LmZsb3dzLCAqYXJndiwgMCkpIHsNCisJCQkJZnByaW50ZihzdGRlcnIsICJJ bGxlZ2FsIFwiZGVwdGhcIlxuIik7DQorCQkJCXJldHVybiAtMTsNCisJCQl9 DQorCQkJb2srKzsNCisJCX0gZWxzZSBpZiAoc3RyY21wKCphcmd2LCAiZGl2 aXNvciIpID09IDApIHsNCisJCQlORVhUX0FSRygpOw0KKwkJCWlmIChnZXRf aW50ZWdlcigmb3B0LmRpdmlzb3IsICphcmd2LCAwKSkgew0KKwkJCQlmcHJp bnRmKHN0ZGVyciwgIklsbGVnYWwgXCJkaXZpc29yXCJcbiIpOw0KKwkJCQly ZXR1cm4gLTE7DQorCQkJfQ0KKwkJCWlmKG9wdC5kaXZpc29yID49IDE1KSB7 DQorCQkJCWZwcmludGYoc3RkZXJyLCAiSWxsZWdhbCBcImRpdmlzb3JcIiBt dXN0IGJlIDwgMTVcbiIpOw0KKwkJCQlyZXR1cm4gLTE7DQorCQkJfQ0KKwkJ CW9wdC5kaXZpc29yPXBvdygyLG9wdC5kaXZpc29yKTsNCisJCQlvaysrOw0K KwkJfSBlbHNlIGlmIChzdHJjbXAoKmFyZ3YsICJsaW1pdCIpID09IDApIHsN CisJCQlORVhUX0FSRygpOw0KKwkJCWlmIChnZXRfaW50ZWdlcigmb3B0Lmxp bWl0LCAqYXJndiwgMCkpIHsNCisJCQkJZnByaW50ZihzdGRlcnIsICJJbGxl Z2FsIFwibGltaXRcIlxuIik7DQorCQkJCXJldHVybiAtMTsNCisJCQl9DQor CQkJb2srKzsNCisJCX0gZWxzZSBpZiAoc3RyY21wKCphcmd2LCAiaGFzaCIp ID09IDApIHsNCisJCQlORVhUX0FSRygpOw0KKwkJCWlmKHN0cmNtcCgqYXJn diwiY2xhc3NpYyIpID09IDApIHsNCisJCQkJb3B0Lmhhc2hfa2luZD0gVENB X1NGUV9IQVNIX0NMQVNTSUM7DQorCQkJfSBlbHNlIA0KKwkJCWlmKHN0cmNt cCgqYXJndiwiZHN0IikgPT0gMCkgew0KKwkJCQlvcHQuaGFzaF9raW5kPSBU Q0FfU0ZRX0hBU0hfRFNUOw0KKwkJCX0gZWxzZQ0KKwkJCWlmKHN0cmNtcCgq YXJndiwic3JjIikgPT0gMCkgew0KKwkJCQlvcHQuaGFzaF9raW5kPSBUQ0Ff U0ZRX0hBU0hfU1JDOw0KKwkJCX0gZWxzZSB7DQorCQkJCWZwcmludGYoc3Rk ZXJyLCAiSWxsZWdhbCBcImhhc2hcIlxuIik7DQorCQkJCWV4cGxhaW4oKTsN CisJCQkJcmV0dXJuIC0xOw0KKwkJCX0NCisJCQlvaysrOw0KKwkJfSBlbHNl IGlmIChzdHJjbXAoKmFyZ3YsICJoZWxwIikgPT0gMCkgew0KKwkJCWV4cGxh aW4oKTsNCisJCQlyZXR1cm4gLTE7DQorCQl9IGVsc2Ugew0KKwkJCWZwcmlu dGYoc3RkZXJyLCAiV2hhdCBpcyBcIiVzXCI/XG4iLCAqYXJndik7DQorCQkJ ZXhwbGFpbigpOw0KKwkJCXJldHVybiAtMTsNCisJCX0NCisJCWFyZ2MtLTsg YXJndisrOw0KKwl9DQorDQorCWlmIChvaykNCisJCWFkZGF0dHJfbChuLCAx MDI0LCBUQ0FfT1BUSU9OUywgJm9wdCwgc2l6ZW9mKG9wdCkpOw0KKwlyZXR1 cm4gMDsNCit9DQorDQorc3RhdGljIGludCBlc2ZxX3ByaW50X29wdChzdHJ1 Y3QgcWRpc2NfdXRpbCAqcXUsIEZJTEUgKmYsIHN0cnVjdCBydGF0dHIgKm9w dCkNCit7DQorCXN0cnVjdCB0Y19zZnFfcW9wdCAqcW9wdDsNCisJU1BSSU5U X0JVRihiMSk7DQorDQorCWlmIChvcHQgPT0gTlVMTCkNCisJCXJldHVybiAw Ow0KKw0KKwlpZiAoUlRBX1BBWUxPQUQob3B0KSAgPCBzaXplb2YoKnFvcHQp KQ0KKwkJcmV0dXJuIC0xOw0KKwlxb3B0ID0gUlRBX0RBVEEob3B0KTsNCisJ ZnByaW50ZihmLCAicXVhbnR1bSAlcyAiLCBzcHJpbnRfc2l6ZShxb3B0LT5x dWFudHVtLCBiMSkpOw0KKwlpZiAoc2hvd19kZXRhaWxzKSB7DQorCQlmcHJp bnRmKGYsICJsaW1pdCAldXAgZmxvd3MgJXUvJXUgIiwNCisJCQlxb3B0LT5s aW1pdCwgcW9wdC0+Zmxvd3MsIHFvcHQtPmRpdmlzb3IpOw0KKwl9DQorCWlm IChxb3B0LT5wZXJ0dXJiX3BlcmlvZCkNCisJCWZwcmludGYoZiwgInBlcnR1 cmIgJWRzZWMgIiwgcW9wdC0+cGVydHVyYl9wZXJpb2QpOw0KKw0KKwkJZnBy aW50ZihmLCJoYXNoOiAiKTsNCisJc3dpdGNoKHFvcHQtPmhhc2hfa2luZCkN CisJew0KKwljYXNlIFRDQV9TRlFfSEFTSF9DTEFTU0lDOg0KKwkJZnByaW50 ZihmLCJjbGFzc2ljIik7DQorCQlicmVhazsNCisJY2FzZSBUQ0FfU0ZRX0hB U0hfRFNUOg0KKwkJZnByaW50ZihmLCJkc3QiKTsNCisJCWJyZWFrOw0KKwlj YXNlIFRDQV9TRlFfSEFTSF9TUkM6DQorCQlmcHJpbnRmKGYsInNyYyIpOw0K KwkJYnJlYWs7DQorCWRlZmF1bHQ6DQorCQlmcHJpbnRmKGYsIlVua25vd24i KTsNCisJfQ0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGludCBlc2Zx X3ByaW50X3hzdGF0cyhzdHJ1Y3QgcWRpc2NfdXRpbCAqcXUsIEZJTEUgKmYs IHN0cnVjdCBydGF0dHIgKnhzdGF0cykNCit7DQorCXJldHVybiAwOw0KK30N CisNCisNCitzdHJ1Y3QgcWRpc2NfdXRpbCBlc2ZxX3V0aWwgPSB7DQorCU5V TEwsDQorCSJlc2ZxIiwNCisJZXNmcV9wYXJzZV9vcHQsDQorCWVzZnFfcHJp bnRfb3B0LA0KKwllc2ZxX3ByaW50X3hzdGF0cywNCit9Ow0K --1607778983-867809566-1023232135=:1858 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="linux-2.4.18-esfq.diff" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename="linux-2.4.18-esfq.diff" LS0tIGxpbnV4LTIuNC4xOC9pbmNsdWRlL2xpbnV4L3BrdF9zY2hlZC5oLm9y aWcJVHVlIE1heSAxNCAyMzoyNToxMyAyMDAyDQorKysgbGludXgtMi40LjE4 L2luY2x1ZGUvbGludXgvcGt0X3NjaGVkLmgJVHVlIE1heSAxNCAyMzozNDo1 NyAyMDAyDQpAQCAtMTU3LDYgKzE1NywxMyBAQA0KIA0KIC8qIFNGUSBzZWN0 aW9uICovDQogDQorZW51bQ0KK3sNCisJVENBX1NGUV9IQVNIX0NMQVNTSUMs DQorCVRDQV9TRlFfSEFTSF9EU1QsDQorCVRDQV9TRlFfSEFTSF9TUkMsDQor fTsNCisNCiBzdHJ1Y3QgdGNfc2ZxX3FvcHQNCiB7DQogCXVuc2lnbmVkCXF1 YW50dW07CS8qIEJ5dGVzIHBlciByb3VuZCBhbGxvY2F0ZWQgdG8gZmxvdyAq Lw0KQEAgLTE2NCw2ICsxNzEsNyBAQA0KIAlfX3UzMgkJbGltaXQ7CQkvKiBN YXhpbWFsIHBhY2tldHMgaW4gcXVldWUgKi8NCiAJdW5zaWduZWQJZGl2aXNv cjsJLyogSGFzaCBkaXZpc29yICAqLw0KIAl1bnNpZ25lZAlmbG93czsJCS8q IE1heGltYWwgbnVtYmVyIG9mIGZsb3dzICAqLw0KKwl1bnNpZ25lZAloYXNo X2tpbmQ7CS8qIEhhc2ggZnVuY3Rpb24gdG8gdXNlIGZvciBmbG93IGlkZW50 aWZpY2F0aW9uICovDQogfTsNCiANCiAvKg0KQEAgLTE3Myw2ICsxODEsOCBA QA0KICAqDQogICoJVGhlIG9ubHkgcmVhc29uIGZvciB0aGlzIGlzIGVmZmlj aWVuY3ksIGl0IGlzIHBvc3NpYmxlDQogICoJdG8gY2hhbmdlIHRoZXNlIHBh cmFtZXRlcnMgaW4gY29tcGlsZSB0aW1lLg0KKyAqCQ0KKyAqCUlmIHlvdSBu ZWVkIHRvIHBsYXkgd2l0aCB0aGlzIHZhbHVlcyB1c2UgZXNmcS4NCiAgKi8N CiANCiAvKiBSRUQgc2VjdGlvbiAqLw0KLS0tIGxpbnV4LTIuNC4xOC9uZXQv aXB2NC9uZXRmaWx0ZXIvaXBjaGFpbnNfY29yZS5jLm9yaWcJRnJpIE1heSAy NCAxOToyNzowMSAyMDAyDQorKysgbGludXgtMi40LjE4L25ldC9pcHY0L25l dGZpbHRlci9pcGNoYWluc19jb3JlLmMJRnJpIE1heSAyNCAxOTozMToyNCAy MDAyDQpAQCAtNzIzLDYgKzcyMyw3IEBADQogCQkJCQkJICAgICAgc3JjX3Bv cnQsIGRzdF9wb3J0LA0KIAkJCQkJCSAgICAgIGNvdW50LCB0Y3BzeW4pKSB7 DQogCQkJCQlyZXQgPSBGV19CTE9DSzsNCisJCQkJCWNsZWFudXAoY2hhaW4s IDAsIHNsb3QpOw0KIAkJCQkJZ290byBvdXQ7DQogCQkJCX0NCiAJCQkJYnJl YWs7DQotLS0gbGludXgtMi40LjE4L25ldC9zY2hlZC9NYWtlZmlsZS5vcmln CVR1ZSBNYXkgMTQgMjM6MDY6NTUgMjAwMg0KKysrIGxpbnV4LTIuNC4xOC9u ZXQvc2NoZWQvTWFrZWZpbGUJVHVlIE1heSAxNCAyMzowNzowOCAyMDAyDQpA QCAtMTcsNiArMTcsNyBAQA0KIG9iai0kKENPTkZJR19ORVRfU0NIX0hQRlEp CSs9IHNjaF9ocGZxLm8NCiBvYmotJChDT05GSUdfTkVUX1NDSF9IRlNDKQkr PSBzY2hfaGZzYy5vDQogb2JqLSQoQ09ORklHX05FVF9TQ0hfU0ZRKQkrPSBz Y2hfc2ZxLm8NCitvYmotJChDT05GSUdfTkVUX1NDSF9FU0ZRKQkrPSBzY2hf ZXNmcS5vDQogb2JqLSQoQ09ORklHX05FVF9TQ0hfUkVEKQkrPSBzY2hfcmVk Lm8NCiBvYmotJChDT05GSUdfTkVUX1NDSF9UQkYpCSs9IHNjaF90YmYubw0K IG9iai0kKENPTkZJR19ORVRfU0NIX1BSSU8pCSs9IHNjaF9wcmlvLm8NCi0t LSBsaW51eC0yLjQuMTgvbmV0L3NjaGVkL0NvbmZpZy5pbi5vcmlnCVR1ZSBN YXkgMTQgMjM6MDc6MTUgMjAwMg0KKysrIGxpbnV4LTIuNC4xOC9uZXQvc2No ZWQvQ29uZmlnLmluCVR1ZSBNYXkgMTQgMjM6MDk6MDMgMjAwMg0KQEAgLTEx LDYgKzExLDcgQEANCiB0cmlzdGF0ZSAnICBUaGUgc2ltcGxlc3QgUFJJTyBw c2V1ZG9zY2hlZHVsZXInIENPTkZJR19ORVRfU0NIX1BSSU8NCiB0cmlzdGF0 ZSAnICBSRUQgcXVldWUnIENPTkZJR19ORVRfU0NIX1JFRA0KIHRyaXN0YXRl ICcgIFNGUSBxdWV1ZScgQ09ORklHX05FVF9TQ0hfU0ZRDQordHJpc3RhdGUg JyAgRVNGUSBxdWV1ZScgQ09ORklHX05FVF9TQ0hfRVNGUQ0KIHRyaXN0YXRl ICcgIFRFUUwgcXVldWUnIENPTkZJR19ORVRfU0NIX1RFUUwNCiB0cmlzdGF0 ZSAnICBUQkYgcXVldWUnIENPTkZJR19ORVRfU0NIX1RCRg0KIHRyaXN0YXRl ICcgIEdSRUQgcXVldWUnIENPTkZJR19ORVRfU0NIX0dSRUQNCi0tLSBsaW51 eC0yLjQuMTgvRG9jdW1lbnRhdGlvbi9Db25maWd1cmUuaGVscC5vcmlnCVRo dSBNYXkgMTYgMDE6Mzc6MjIgMjAwMg0KKysrIGxpbnV4LTIuNC4xOC9Eb2N1 bWVudGF0aW9uL0NvbmZpZ3VyZS5oZWxwCU1vbiBNYXkgMjcgMDE6MDk6MDMg MjAwMg0KQEAgLTk0MzMsNiArOTQzMywyNCBAQA0KICAgd2hlbmV2ZXIgeW91 IHdhbnQpLiBJZiB5b3Ugd2FudCB0byBjb21waWxlIGl0IGFzIGEgbW9kdWxl LCBzYXkgTQ0KICAgaGVyZSBhbmQgcmVhZCA8ZmlsZTpEb2N1bWVudGF0aW9u L21vZHVsZXMudHh0Pi4NCiANCitFU0ZRIHF1ZXVlDQorQ09ORklHX05FVF9T Q0hfRVNGUQ0KKyAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgdGhl IFN0b2NoYXN0aWMgRmFpcm5lc3MgUXVldWVpbmcgKFNGUSkNCisgIHBhY2tl dCBzY2hlZHVsaW5nIGFsZ29yaXRobSBmb3Igc29tZSBvZiB5b3VyIG5ldHdv cmsgZGV2aWNlcyBvciBhcyBhDQorICBsZWFmIGRpc2NpcGxpbmUgZm9yIHRo ZSBDQlEgc2NoZWR1bGluZyBhbGdvcml0aG0gKHNlZSB0aGUgdG9wIG9mDQor ICA8ZmlsZTpuZXQvc2NoZWQvc2NoX2VzZnEuYz4gZm9yIGRldGFpbHMgYW5k IHJlZmVyZW5jZXMgYWJvdXQgdGhlIFNGUQ0KKyAgYWxnb3JpdGhtKS4NCisN CisgIFRoaXMgaXMgYW4gZW5jaGFuY2VkIFNGUSB2ZXJzaW9uIHdoaWNoIGFs bG93cyB5b3UgdG8gY29udHJvbCB0aGUNCisgIGhhcmRjb2RlZCB2YWx1ZXMg aW4gdGhlIFNGUSBzY2hlZHVsZXI6IHF1ZXVlIGRlcHRoLCBoYXNoIHRhYmxl IHNpemUsDQorICBxdWV1ZXMgbGltaXQuIEFsc28gYWRkcyBjb250cm9sIHRv IHRoZSBoYXNoIGZ1bmN0aW9uIHVzZWQgdG8gaWRlbnRpZnkNCisgIHBhY2tl dCBmbG93cy4gSGFzaCBieSBzcmMgb3IgZHN0IGlwIGFuZCBvcmlnaW5hbCBz ZnEgaGFzaC4NCisNCisgIFRoaXMgY29kZSBpcyBhbHNvIGF2YWlsYWJsZSBh cyBhIG1vZHVsZSBjYWxsZWQgc2NoX2VzZnEubyAoID0gY29kZQ0KKyAgd2hp Y2ggY2FuIGJlIGluc2VydGVkIGluIGFuZCByZW1vdmVkIGZyb20gdGhlIHJ1 bm5pbmcga2VybmVsDQorICB3aGVuZXZlciB5b3Ugd2FudCkuIElmIHlvdSB3 YW50IHRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIHNheSBNDQorICBoZXJl IGFuZCByZWFkIDxmaWxlOkRvY3VtZW50YXRpb24vbW9kdWxlcy50eHQ+Lg0K Kw0KIFRFUUwgcXVldWUNCiBDT05GSUdfTkVUX1NDSF9URVFMDQogICBTYXkg WSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSB0aGUgVHJ1ZSBMaW5rIEVxdWFs aXplciAoVExFKSBwYWNrZXQNCi0tLSAvZGV2L251bGwJTW9uIEp1bCAxOCAw Mjo0NjoxOCAxOTk0DQorKysgbGludXgtMi40LjE4L25ldC9zY2hlZC9zY2hf ZXNmcS5jCU1vbiBNYXkgMjcgMDE6NDk6MTkgMjAwMg0KQEAgLTAsMCArMSw1 OTEgQEANCisvKg0KKyAqIG5ldC9zY2hlZC9zY2hfZXNmcS5jCUV4dGVuZGVk IFN0b2NoYXN0aWMgRmFpcm5lc3MgUXVldWVpbmcgZGlzY2lwbGluZS4NCisg Kg0KKyAqCQlUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yDQorICoJCW1vZGlmeSBpdCB1bmRl ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl DQorICoJCWFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uOyBlaXRoZXIgdmVyc2lvbg0KKyAqCQkyIG9mIHRoZSBMaWNlbnNl LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLg0KKyAq DQorICogQXV0aG9yczoJQWxleGV5IEt1em5ldHNvdiwgPGt1em5ldEBtczIu aW5yLmFjLnJ1Pg0KKyAqDQorICogQ2hhbmdlczoJQWxleGFuZGVyIEF0YW5h c292LCA8YWxleEBzc2kuYmc+DQorICoJCUFkZGVkIGR5bmFtaWMgZGVwdGgs bGltaXQsZGl2aXNvcixoYXNoX2tpbmQgb3B0aW9ucy4NCisgKgkJQWRkZWQg ZHN0IGFuZCBzcmMgaGFzaGVzLg0KKyAqLw0KKw0KKyNpbmNsdWRlIDxsaW51 eC9jb25maWcuaD4NCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+DQorI2lu Y2x1ZGUgPGFzbS91YWNjZXNzLmg+DQorI2luY2x1ZGUgPGFzbS9zeXN0ZW0u aD4NCisjaW5jbHVkZSA8YXNtL2JpdG9wcy5oPg0KKyNpbmNsdWRlIDxsaW51 eC90eXBlcy5oPg0KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4NCisjaW5j bHVkZSA8bGludXgvc2NoZWQuaD4NCisjaW5jbHVkZSA8bGludXgvc3RyaW5n Lmg+DQorI2luY2x1ZGUgPGxpbnV4L21tLmg+DQorI2luY2x1ZGUgPGxpbnV4 L3NvY2tldC5oPg0KKyNpbmNsdWRlIDxsaW51eC9zb2NraW9zLmg+DQorI2lu Y2x1ZGUgPGxpbnV4L2luLmg+DQorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+ DQorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPg0KKyNpbmNsdWRlIDxs aW51eC9pZl9ldGhlci5oPg0KKyNpbmNsdWRlIDxsaW51eC9pbmV0Lmg+DQor I2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPg0KKyNpbmNsdWRlIDxsaW51 eC9ldGhlcmRldmljZS5oPg0KKyNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5o Pg0KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+DQorI2luY2x1ZGUgPG5ldC9p cC5oPg0KKyNpbmNsdWRlIDxsaW51eC9pcHY2Lmg+DQorI2luY2x1ZGUgPG5l dC9yb3V0ZS5oPg0KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4NCisjaW5j bHVkZSA8bmV0L3NvY2suaD4NCisjaW5jbHVkZSA8bmV0L3BrdF9zY2hlZC5o Pg0KKw0KKw0KKy8qCVN0b2NoYXN0aWMgRmFpcm5lc3MgUXVldWluZyBhbGdv cml0aG0uDQorCUZvciBtb3JlIGNvbW1lbnRzIGxvb2sgYXQgc2NoX3NmcS5j Lg0KKwlUaGUgZGlmZmVyZW5jZSBpcyB0aGF0IHlvdSBjYW4gY2hhbmdlIGxp bWl0LCBkZXB0aCwNCisJaGFzaCB0YWJsZSBzaXplIGFuZCBjaG9vc2UgMyBo YXNoIHR5cGVzLg0KKwkNCisJY2xhc3NpYzoJc2FtZSBhcyBpbiBzY2hfc2Zx LmMNCisJZHN0OgkJZGVzdGluYXRpb24gSVAgYWRkcmVzcw0KKwlzcmM6CQlz b3VyY2UgSVAgYWRkcmVzcw0KKwkNCisJVE9ETzogDQorCQltYWtlIHNmcV9j aGFuZ2Ugd29yay4NCisqLw0KKw0KKw0KKy8qIFRoaXMgdHlwZSBzaG91bGQg Y29udGFpbiBhdCBsZWFzdCBTRlFfREVQVEgqMiB2YWx1ZXMgKi8NCit0eXBl ZGVmIHVuc2lnbmVkIGludCBlc2ZxX2luZGV4Ow0KKw0KK3N0cnVjdCBlc2Zx X2hlYWQNCit7DQorCWVzZnFfaW5kZXgJbmV4dDsNCisJZXNmcV9pbmRleAlw cmV2Ow0KK307DQorDQorc3RydWN0IGVzZnFfc2NoZWRfZGF0YQ0KK3sNCisv KiBQYXJhbWV0ZXJzICovDQorCWludAkJcGVydHVyYl9wZXJpb2Q7DQorCXVu c2lnbmVkCXF1YW50dW07CS8qIEFsbG90bWVudCBwZXIgcm91bmQ6IE1VU1Qg QkUgPj0gTVRVICovDQorCWludAkJbGltaXQ7DQorCXVuc2lnbmVkCWRlcHRo Ow0KKwl1bnNpZ25lZAloYXNoX2Rpdmlzb3I7DQorCXVuc2lnbmVkCWhhc2hf a2luZDsNCisvKiBWYXJpYWJsZXMgKi8NCisJc3RydWN0IHRpbWVyX2xpc3Qg cGVydHVyYl90aW1lcjsNCisJaW50CQlwZXJ0dXJiYXRpb247DQorCWVzZnFf aW5kZXgJdGFpbDsJCS8qIEluZGV4IG9mIGN1cnJlbnQgc2xvdCBpbiByb3Vu ZCAqLw0KKwllc2ZxX2luZGV4CW1heF9kZXB0aDsJLyogTWF4aW1hbCBkZXB0 aCAqLw0KKw0KKwllc2ZxX2luZGV4CSpodDsJCQkvKiBIYXNoIHRhYmxlICov DQorCWVzZnFfaW5kZXgJKm5leHQ7CQkJLyogQWN0aXZlIHNsb3RzIGxpbmsg Ki8NCisJc2hvcnQJCSphbGxvdDsJCQkvKiBDdXJyZW50IGFsbG90bWVudCBw ZXIgc2xvdCAqLw0KKwl1bnNpZ25lZCBzaG9ydAkqaGFzaDsJCQkvKiBIYXNo IHZhbHVlIGluZGV4ZWQgYnkgc2xvdHMgKi8NCisJc3RydWN0IHNrX2J1ZmZf aGVhZAkqcXM7CQkvKiBTbG90IHF1ZXVlICovDQorCXN0cnVjdCBlc2ZxX2hl YWQJKmRlcDsJCS8qIExpbmtlZCBsaXN0IG9mIHNsb3RzLCBpbmRleGVkIGJ5 IGRlcHRoICovDQorfTsNCisNCitzdGF0aWMgX19pbmxpbmVfXyB1bnNpZ25l ZCBlc2ZxX2hhc2hfdTMyKHN0cnVjdCBlc2ZxX3NjaGVkX2RhdGEgKnEsdTMy IGgpDQorew0KKwlpbnQgcGVydCA9IHEtPnBlcnR1cmJhdGlvbjsNCisJDQor CWlmIChwZXJ0KQ0KKwkJaCA9IChoPDxwZXJ0KSBeIChoPj4oMHgxRiAtIHBl cnQpKTsNCisJaCA9IG50b2hsKGgpICogMjY1NDQzNTc2MVVMOw0KKwlyZXR1 cm4gaCAmIChxLT5oYXNoX2Rpdmlzb3ItMSk7DQorfQ0KKw0KK3N0YXRpYyBf X2lubGluZV9fIHVuc2lnbmVkIGVzZnFfZm9sZF9oYXNoX2NsYXNzaWMoc3Ry dWN0IGVzZnFfc2NoZWRfZGF0YSAqcSwgdTMyIGgsIHUzMiBoMSkNCit7DQor CWludCBwZXJ0ID0gcS0+cGVydHVyYmF0aW9uOw0KKw0KKwkvKiBIYXZlIHdl IGFueSByb3RhdGlvbiBwcmltaXRpdmVzPyBJZiBub3QsIFdIWT8gKi8NCisJ aCBePSAoaDE8PHBlcnQpIF4gKGgxPj4oMHgxRiAtIHBlcnQpKTsNCisJaCBe PSBoPj4xMDsNCisJcmV0dXJuIGggJiAocS0+aGFzaF9kaXZpc29yLTEpOw0K K30NCisNCisjaWZuZGVmIElQUFJPVE9fRVNQDQorI2RlZmluZSBJUFBST1RP X0VTUCA1MA0KKyNlbmRpZg0KKw0KK3N0YXRpYyB1bnNpZ25lZCBlc2ZxX2hh c2goc3RydWN0IGVzZnFfc2NoZWRfZGF0YSAqcSwgc3RydWN0IHNrX2J1ZmYg KnNrYikNCit7DQorCXUzMiBoLCBoMjsNCisJdTMyIGhzOw0KKwkNCisJc3dp dGNoIChza2ItPnByb3RvY29sKSB7DQorCWNhc2UgX19jb25zdGFudF9odG9u cyhFVEhfUF9JUCk6DQorCXsNCisJCXN0cnVjdCBpcGhkciAqaXBoID0gc2ti LT5uaC5pcGg7DQorCQloID0gaXBoLT5kYWRkcjsNCisJCWhzID0gaXBoLT5z YWRkcjsNCisJCWgyID0gaHNeaXBoLT5wcm90b2NvbDsNCisJCWlmICghKGlw aC0+ZnJhZ19vZmYmaHRvbnMoSVBfTUZ8SVBfT0ZGU0VUKSkgJiYNCisJCSAg ICAoaXBoLT5wcm90b2NvbCA9PSBJUFBST1RPX1RDUCB8fA0KKwkJICAgICBp cGgtPnByb3RvY29sID09IElQUFJPVE9fVURQIHx8DQorCQkgICAgIGlwaC0+ cHJvdG9jb2wgPT0gSVBQUk9UT19FU1ApKQ0KKwkJCWgyIF49ICooKCh1MzIq KWlwaCkgKyBpcGgtPmlobCk7DQorCQlicmVhazsNCisJfQ0KKwljYXNlIF9f Y29uc3RhbnRfaHRvbnMoRVRIX1BfSVBWNik6DQorCXsNCisJCXN0cnVjdCBp cHY2aGRyICppcGggPSBza2ItPm5oLmlwdjZoOw0KKwkJaCA9IGlwaC0+ZGFk ZHIuczZfYWRkcjMyWzNdOw0KKwkJaHMgPSBpcGgtPnNhZGRyLnM2X2FkZHIz MlszXTsNCisJCWgyID0gaHNeaXBoLT5uZXh0aGRyOw0KKwkJaWYgKGlwaC0+ bmV4dGhkciA9PSBJUFBST1RPX1RDUCB8fA0KKwkJICAgIGlwaC0+bmV4dGhk ciA9PSBJUFBST1RPX1VEUCB8fA0KKwkJICAgIGlwaC0+bmV4dGhkciA9PSBJ UFBST1RPX0VTUCkNCisJCQloMiBePSAqKHUzMiopJmlwaFsxXTsNCisJCWJy ZWFrOw0KKwl9DQorCWRlZmF1bHQ6DQorCQloID0gKHUzMikodW5zaWduZWQg bG9uZylza2ItPmRzdDsNCisJCWhzID0gKHUzMikodW5zaWduZWQgbG9uZylz a2ItPnNrOw0KKwkJaDIgPSBoc15za2ItPnByb3RvY29sOw0KKwl9DQorCXN3 aXRjaChxLT5oYXNoX2tpbmQpDQorCXsNCisJY2FzZSBUQ0FfU0ZRX0hBU0hf Q0xBU1NJQzoNCisJCXJldHVybiBlc2ZxX2ZvbGRfaGFzaF9jbGFzc2ljKHEs IGgsIGgyKTsNCisJY2FzZSBUQ0FfU0ZRX0hBU0hfRFNUOg0KKwkJcmV0dXJu IGVzZnFfaGFzaF91MzIocSxoKTsNCisJY2FzZSBUQ0FfU0ZRX0hBU0hfU1JD Og0KKwkJcmV0dXJuIGVzZnFfaGFzaF91MzIocSxocyk7DQorCWRlZmF1bHQ6 DQorCQlpZiAobmV0X3JhdGVsaW1pdCgpKQ0KKwkJCXByaW50ayhLRVJOX0RF QlVHICJlc2ZxIHVua25vd24gaGFzaCBtZXRob2QsIGZhbGxiYWNrIHRvIGNs YXNzaWNcbiIpOw0KKwl9DQorCXJldHVybiBlc2ZxX2ZvbGRfaGFzaF9jbGFz c2ljKHEsIGgsIGgyKTsNCit9DQorDQorZXh0ZXJuIF9faW5saW5lX18gdm9p ZCBlc2ZxX2xpbmsoc3RydWN0IGVzZnFfc2NoZWRfZGF0YSAqcSwgZXNmcV9p bmRleCB4KQ0KK3sNCisJZXNmcV9pbmRleCBwLCBuOw0KKwlpbnQgZCA9IHEt PnFzW3hdLnFsZW4gKyBxLT5kZXB0aDsNCisNCisJcCA9IGQ7DQorCW4gPSBx LT5kZXBbZF0ubmV4dDsNCisJcS0+ZGVwW3hdLm5leHQgPSBuOw0KKwlxLT5k ZXBbeF0ucHJldiA9IHA7DQorCXEtPmRlcFtwXS5uZXh0ID0gcS0+ZGVwW25d LnByZXYgPSB4Ow0KK30NCisNCitleHRlcm4gX19pbmxpbmVfXyB2b2lkIGVz ZnFfZGVjKHN0cnVjdCBlc2ZxX3NjaGVkX2RhdGEgKnEsIGVzZnFfaW5kZXgg eCkNCit7DQorCWVzZnFfaW5kZXggcCwgbjsNCisNCisJbiA9IHEtPmRlcFt4 XS5uZXh0Ow0KKwlwID0gcS0+ZGVwW3hdLnByZXY7DQorCXEtPmRlcFtwXS5u ZXh0ID0gbjsNCisJcS0+ZGVwW25dLnByZXYgPSBwOw0KKw0KKwlpZiAobiA9 PSBwICYmIHEtPm1heF9kZXB0aCA9PSBxLT5xc1t4XS5xbGVuICsgMSkNCisJ CXEtPm1heF9kZXB0aC0tOw0KKw0KKwllc2ZxX2xpbmsocSwgeCk7DQorfQ0K Kw0KK2V4dGVybiBfX2lubGluZV9fIHZvaWQgZXNmcV9pbmMoc3RydWN0IGVz ZnFfc2NoZWRfZGF0YSAqcSwgZXNmcV9pbmRleCB4KQ0KK3sNCisJZXNmcV9p bmRleCBwLCBuOw0KKwlpbnQgZDsNCisNCisJbiA9IHEtPmRlcFt4XS5uZXh0 Ow0KKwlwID0gcS0+ZGVwW3hdLnByZXY7DQorCXEtPmRlcFtwXS5uZXh0ID0g bjsNCisJcS0+ZGVwW25dLnByZXYgPSBwOw0KKwlkID0gcS0+cXNbeF0ucWxl bjsNCisJaWYgKHEtPm1heF9kZXB0aCA8IGQpDQorCQlxLT5tYXhfZGVwdGgg PSBkOw0KKw0KKwllc2ZxX2xpbmsocSwgeCk7DQorfQ0KKw0KK3N0YXRpYyBp bnQgZXNmcV9kcm9wKHN0cnVjdCBRZGlzYyAqc2NoKQ0KK3sNCisJc3RydWN0 IGVzZnFfc2NoZWRfZGF0YSAqcSA9IChzdHJ1Y3QgZXNmcV9zY2hlZF9kYXRh ICopc2NoLT5kYXRhOw0KKwllc2ZxX2luZGV4IGQgPSBxLT5tYXhfZGVwdGg7 DQorCXN0cnVjdCBza19idWZmICpza2I7DQorDQorCS8qIFF1ZXVlIGlzIGZ1 bGwhIEZpbmQgdGhlIGxvbmdlc3Qgc2xvdCBhbmQNCisJICAgZHJvcCBhIHBh Y2tldCBmcm9tIGl0ICovDQorDQorCWlmIChkID4gMSkgew0KKwkJZXNmcV9p bmRleCB4ID0gcS0+ZGVwW2QrcS0+ZGVwdGhdLm5leHQ7DQorCQlza2IgPSBx LT5xc1t4XS5wcmV2Ow0KKwkJX19za2JfdW5saW5rKHNrYiwgJnEtPnFzW3hd KTsNCisJCWtmcmVlX3NrYihza2IpOw0KKwkJZXNmcV9kZWMocSwgeCk7DQor CQlzY2gtPnEucWxlbi0tOw0KKwkJc2NoLT5zdGF0cy5kcm9wcysrOw0KKwkJ cmV0dXJuIDE7DQorCX0NCisNCisJaWYgKGQgPT0gMSkgew0KKwkJLyogSXQg aXMgZGlmZmljdWx0IHRvIGJlbGlldmUsIGJ1dCBBTEwgVEhFIFNMT1RTIEhB VkUgTEVOR1RIIDEuICovDQorCQlkID0gcS0+bmV4dFtxLT50YWlsXTsNCisJ CXEtPm5leHRbcS0+dGFpbF0gPSBxLT5uZXh0W2RdOw0KKwkJcS0+YWxsb3Rb cS0+bmV4dFtkXV0gKz0gcS0+cXVhbnR1bTsNCisJCXNrYiA9IHEtPnFzW2Rd LnByZXY7DQorCQlfX3NrYl91bmxpbmsoc2tiLCAmcS0+cXNbZF0pOw0KKwkJ a2ZyZWVfc2tiKHNrYik7DQorCQllc2ZxX2RlYyhxLCBkKTsNCisJCXNjaC0+ cS5xbGVuLS07DQorCQlxLT5odFtxLT5oYXNoW2RdXSA9IHEtPmRlcHRoOw0K KwkJc2NoLT5zdGF0cy5kcm9wcysrOw0KKwkJcmV0dXJuIDE7DQorCX0NCisN CisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBpbnQNCitlc2ZxX2VucXVl dWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjKiBzY2gpDQor ew0KKwlzdHJ1Y3QgZXNmcV9zY2hlZF9kYXRhICpxID0gKHN0cnVjdCBlc2Zx X3NjaGVkX2RhdGEgKilzY2gtPmRhdGE7DQorCXVuc2lnbmVkIGhhc2ggPSBl c2ZxX2hhc2gocSwgc2tiKTsNCisJdW5zaWduZWQgZGVwdGggPSBxLT5kZXB0 aDsNCisJZXNmcV9pbmRleCB4Ow0KKw0KKwl4ID0gcS0+aHRbaGFzaF07DQor CWlmICh4ID09IGRlcHRoKSB7DQorCQlxLT5odFtoYXNoXSA9IHggPSBxLT5k ZXBbZGVwdGhdLm5leHQ7DQorCQlxLT5oYXNoW3hdID0gaGFzaDsNCisJfQ0K KwlfX3NrYl9xdWV1ZV90YWlsKCZxLT5xc1t4XSwgc2tiKTsNCisJZXNmcV9p bmMocSwgeCk7DQorCWlmIChxLT5xc1t4XS5xbGVuID09IDEpIHsJCS8qIFRo ZSBmbG93IGlzIG5ldyAqLw0KKwkJaWYgKHEtPnRhaWwgPT0gZGVwdGgpIHsJ LyogSXQgaXMgdGhlIGZpcnN0IGZsb3cgKi8NCisJCQlxLT50YWlsID0geDsN CisJCQlxLT5uZXh0W3hdID0geDsNCisJCQlxLT5hbGxvdFt4XSA9IHEtPnF1 YW50dW07DQorCQl9IGVsc2Ugew0KKwkJCXEtPm5leHRbeF0gPSBxLT5uZXh0 W3EtPnRhaWxdOw0KKwkJCXEtPm5leHRbcS0+dGFpbF0gPSB4Ow0KKwkJCXEt PnRhaWwgPSB4Ow0KKwkJfQ0KKwl9DQorCWlmICgrK3NjaC0+cS5xbGVuIDwg cS0+bGltaXQtMSkgew0KKwkJc2NoLT5zdGF0cy5ieXRlcyArPSBza2ItPmxl bjsNCisJCXNjaC0+c3RhdHMucGFja2V0cysrOw0KKwkJcmV0dXJuIDA7DQor CX0NCisNCisJZXNmcV9kcm9wKHNjaCk7DQorCXJldHVybiBORVRfWE1JVF9D TjsNCit9DQorDQorc3RhdGljIGludA0KK2VzZnFfcmVxdWV1ZShzdHJ1Y3Qg c2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MqIHNjaCkNCit7DQorCXN0cnVj dCBlc2ZxX3NjaGVkX2RhdGEgKnEgPSAoc3RydWN0IGVzZnFfc2NoZWRfZGF0 YSAqKXNjaC0+ZGF0YTsNCisJdW5zaWduZWQgaGFzaCA9IGVzZnFfaGFzaChx LCBza2IpOw0KKwl1bnNpZ25lZCBkZXB0aCA9IHEtPmRlcHRoOw0KKwllc2Zx X2luZGV4IHg7DQorDQorCXggPSBxLT5odFtoYXNoXTsNCisJaWYgKHggPT0g ZGVwdGgpIHsNCisJCXEtPmh0W2hhc2hdID0geCA9IHEtPmRlcFtkZXB0aF0u bmV4dDsNCisJCXEtPmhhc2hbeF0gPSBoYXNoOw0KKwl9DQorCV9fc2tiX3F1 ZXVlX2hlYWQoJnEtPnFzW3hdLCBza2IpOw0KKwllc2ZxX2luYyhxLCB4KTsN CisJaWYgKHEtPnFzW3hdLnFsZW4gPT0gMSkgewkJLyogVGhlIGZsb3cgaXMg bmV3ICovDQorCQlpZiAocS0+dGFpbCA9PSBkZXB0aCkgewkvKiBJdCBpcyB0 aGUgZmlyc3QgZmxvdyAqLw0KKwkJCXEtPnRhaWwgPSB4Ow0KKwkJCXEtPm5l eHRbeF0gPSB4Ow0KKwkJCXEtPmFsbG90W3hdID0gcS0+cXVhbnR1bTsNCisJ CX0gZWxzZSB7DQorCQkJcS0+bmV4dFt4XSA9IHEtPm5leHRbcS0+dGFpbF07 DQorCQkJcS0+bmV4dFtxLT50YWlsXSA9IHg7DQorCQkJcS0+dGFpbCA9IHg7 DQorCQl9DQorCX0NCisJaWYgKCsrc2NoLT5xLnFsZW4gPCBxLT5saW1pdCAt IDEpDQorCQlyZXR1cm4gMDsNCisNCisJc2NoLT5zdGF0cy5kcm9wcysrOw0K Kwllc2ZxX2Ryb3Aoc2NoKTsNCisJcmV0dXJuIE5FVF9YTUlUX0NOOw0KK30N CisNCisNCisNCisNCitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKg0KK2VzZnFf ZGVxdWV1ZShzdHJ1Y3QgUWRpc2MqIHNjaCkNCit7DQorCXN0cnVjdCBlc2Zx X3NjaGVkX2RhdGEgKnEgPSAoc3RydWN0IGVzZnFfc2NoZWRfZGF0YSAqKXNj aC0+ZGF0YTsNCisJc3RydWN0IHNrX2J1ZmYgKnNrYjsNCisJdW5zaWduZWQg ZGVwdGggPSBxLT5kZXB0aDsNCisJZXNmcV9pbmRleCBhLCBvbGRfYTsNCisN CisJLyogTm8gYWN0aXZlIHNsb3RzICovDQorCWlmIChxLT50YWlsID09IGRl cHRoKQ0KKwkJcmV0dXJuIE5VTEw7DQorCQ0KKwlhID0gb2xkX2EgPSBxLT5u ZXh0W3EtPnRhaWxdOw0KKwkNCisJLyogR3JhYiBwYWNrZXQgKi8NCisJc2ti ID0gX19za2JfZGVxdWV1ZSgmcS0+cXNbYV0pOw0KKwllc2ZxX2RlYyhxLCBh KTsNCisJc2NoLT5xLnFsZW4tLTsNCisJDQorCS8qIElzIHRoZSBzbG90IGVt cHR5PyAqLw0KKwlpZiAocS0+cXNbYV0ucWxlbiA9PSAwKSB7DQorCQlhID0g cS0+bmV4dFthXTsNCisJCWlmIChhID09IG9sZF9hKSB7DQorCQkJcS0+dGFp bCA9IGRlcHRoOw0KKwkJCXJldHVybiBza2I7DQorCQl9DQorCQlxLT5uZXh0 W3EtPnRhaWxdID0gYTsNCisJCXEtPmFsbG90W2FdICs9IHEtPnF1YW50dW07 DQorCX0gZWxzZSBpZiAoKHEtPmFsbG90W2FdIC09IHNrYi0+bGVuKSA8PSAw KSB7DQorCQlxLT50YWlsID0gYTsNCisJCWEgPSBxLT5uZXh0W2FdOw0KKwkJ cS0+YWxsb3RbYV0gKz0gcS0+cXVhbnR1bTsNCisJfQ0KKwkNCisJcmV0dXJu IHNrYjsNCit9DQorDQorc3RhdGljIHZvaWQNCitlc2ZxX3Jlc2V0KHN0cnVj dCBRZGlzYyogc2NoKQ0KK3sNCisJc3RydWN0IHNrX2J1ZmYgKnNrYjsNCisN CisJd2hpbGUgKChza2IgPSBlc2ZxX2RlcXVldWUoc2NoKSkgIT0gTlVMTCkN CisJCWtmcmVlX3NrYihza2IpOw0KK30NCisNCitzdGF0aWMgdm9pZCBlc2Zx X3BlcnR1cmJhdGlvbih1bnNpZ25lZCBsb25nIGFyZykNCit7DQorCXN0cnVj dCBRZGlzYyAqc2NoID0gKHN0cnVjdCBRZGlzYyopYXJnOw0KKwlzdHJ1Y3Qg ZXNmcV9zY2hlZF9kYXRhICpxID0gKHN0cnVjdCBlc2ZxX3NjaGVkX2RhdGEg KilzY2gtPmRhdGE7DQorDQorCXEtPnBlcnR1cmJhdGlvbiA9IG5ldF9yYW5k b20oKSYweDFGOw0KKwlxLT5wZXJ0dXJiX3RpbWVyLmV4cGlyZXMgPSBqaWZm aWVzICsgcS0+cGVydHVyYl9wZXJpb2Q7DQorDQorCWlmIChxLT5wZXJ0dXJi X3BlcmlvZCkgew0KKwkJcS0+cGVydHVyYl90aW1lci5leHBpcmVzID0gamlm ZmllcyArIHEtPnBlcnR1cmJfcGVyaW9kOw0KKwkJYWRkX3RpbWVyKCZxLT5w ZXJ0dXJiX3RpbWVyKTsNCisJfQ0KK30NCisNCitzdGF0aWMgaW50IGVzZnFf Y2hhbmdlKHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgcnRhdHRyICpvcHQp DQorew0KKwlzdHJ1Y3QgZXNmcV9zY2hlZF9kYXRhICpxID0gKHN0cnVjdCBl c2ZxX3NjaGVkX2RhdGEgKilzY2gtPmRhdGE7DQorCXN0cnVjdCB0Y19zZnFf cW9wdCAqY3RsID0gUlRBX0RBVEEob3B0KTsNCisJaW50IG9sZF9wZXJ0dXJi ID0gcS0+cGVydHVyYl9wZXJpb2Q7DQorCQ0KKwlpZiAob3B0LT5ydGFfbGVu IDwgUlRBX0xFTkdUSChzaXplb2YoKmN0bCkpKQ0KKwkJcmV0dXJuIC1FSU5W QUw7DQorCQ0KKwlzY2hfdHJlZV9sb2NrKHNjaCk7DQorCXEtPnF1YW50dW0g PSBjdGwtPnF1YW50dW0gPyA6IHBzY2hlZF9tdHUoc2NoLT5kZXYpOw0KKwlx LT5wZXJ0dXJiX3BlcmlvZCA9IGN0bC0+cGVydHVyYl9wZXJpb2QqSFo7DQor Ly8JcS0+aGFzaF9kaXZpc29yID0gY3RsLT5kaXZpc29yOw0KKy8vCXEtPnRh aWwgPSBxLT5saW1pdCA9IHEtPmRlcHRoID0gY3RsLT5mbG93czsNCisJDQor CWlmIChjdGwtPmxpbWl0KQ0KKwkJcS0+bGltaXQgPSBtaW5fdCh1MzIsIGN0 bC0+bGltaXQsIHEtPmRlcHRoKTsNCisJDQorCWlmIChjdGwtPmhhc2hfa2lu ZCkgew0KKwkJcS0+aGFzaF9raW5kID0gY3RsLT5oYXNoX2tpbmQ7DQorCQlp ZiAocS0+aGFzaF9raW5kICE9ICBUQ0FfU0ZRX0hBU0hfQ0xBU1NJQykNCisJ CQlxLT5wZXJ0dXJiX3BlcmlvZCA9IDA7DQorCX0NCisJDQorCS8vIGlzIHNj aF90cmVlX2xvY2sgZW5vdWdoIHRvIGRvIHRoaXMgPw0KKwl3aGlsZSAoc2No LT5xLnFsZW4gPj0gcS0+bGltaXQtMSkNCisJCWVzZnFfZHJvcChzY2gpOw0K KwkNCisJaWYgKG9sZF9wZXJ0dXJiKQ0KKwkJZGVsX3RpbWVyKCZxLT5wZXJ0 dXJiX3RpbWVyKTsNCisJaWYgKHEtPnBlcnR1cmJfcGVyaW9kKSB7DQorCQlx LT5wZXJ0dXJiX3RpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgcS0+cGVydHVy Yl9wZXJpb2Q7DQorCQlhZGRfdGltZXIoJnEtPnBlcnR1cmJfdGltZXIpOw0K Kwl9IGVsc2Ugew0KKwkJcS0+cGVydHVyYmF0aW9uID0gMDsNCisJfQ0KKwlz Y2hfdHJlZV91bmxvY2soc2NoKTsNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0 YXRpYyBpbnQgZXNmcV9pbml0KHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3Qg cnRhdHRyICpvcHQpDQorew0KKwlzdHJ1Y3QgZXNmcV9zY2hlZF9kYXRhICpx ID0gKHN0cnVjdCBlc2ZxX3NjaGVkX2RhdGEgKilzY2gtPmRhdGE7DQorCXN0 cnVjdCB0Y19zZnFfcW9wdCAqY3RsOw0KKwllc2ZxX2luZGV4IHAgPSB+MFVM LzI7DQorCWludCBpOw0KKwkNCisJaWYgKG9wdCAmJiBvcHQtPnJ0YV9sZW4g PCBSVEFfTEVOR1RIKHNpemVvZigqY3RsKSkpDQorCQlyZXR1cm4gLUVJTlZB TDsNCisJcS0+cGVydHVyYl90aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcp c2NoOw0KKwlxLT5wZXJ0dXJiX3RpbWVyLmZ1bmN0aW9uID0gZXNmcV9wZXJ0 dXJiYXRpb247DQorCWluaXRfdGltZXIoJnEtPnBlcnR1cmJfdGltZXIpOw0K KwlxLT5wZXJ0dXJiYXRpb24gPSAwOw0KKwlxLT5oYXNoX2tpbmQgPSBUQ0Ff U0ZRX0hBU0hfQ0xBU1NJQzsNCisJcS0+bWF4X2RlcHRoID0gMDsNCisJaWYg KG9wdCA9PSBOVUxMKSB7DQorCQlxLT5xdWFudHVtID0gcHNjaGVkX210dShz Y2gtPmRldik7DQorCQlxLT5wZXJ0dXJiX3BlcmlvZCA9IDA7DQorCQlxLT5o YXNoX2Rpdmlzb3IgPSAxMDI0Ow0KKwkJcS0+dGFpbCA9IHEtPmxpbWl0ID0g cS0+ZGVwdGggPSAxMjg7DQorCQkNCisJfSBlbHNlIHsNCisJCWN0bCA9IFJU QV9EQVRBKG9wdCk7DQorCQlxLT5xdWFudHVtID0gY3RsLT5xdWFudHVtID8g OiBwc2NoZWRfbXR1KHNjaC0+ZGV2KTsNCisJCXEtPnBlcnR1cmJfcGVyaW9k ID0gY3RsLT5wZXJ0dXJiX3BlcmlvZCpIWjsNCisJCXEtPmhhc2hfZGl2aXNv ciA9IGN0bC0+ZGl2aXNvcjsNCisJCXEtPnRhaWwgPSBxLT5saW1pdCA9IHEt PmRlcHRoID0gY3RsLT5mbG93czsNCisJCQ0KKwkJaWYgKCBxLT5kZXB0aCA+ IHAgLSAxICkNCisJCQlyZXR1cm4gLUVJTlZBTDsNCisJCQ0KKwkJaWYgKGN0 bC0+bGltaXQpDQorCQkJcS0+bGltaXQgPSBtaW5fdCh1MzIsIGN0bC0+bGlt aXQsIHEtPmRlcHRoKTsNCisJCQ0KKwkJaWYgKGN0bC0+aGFzaF9raW5kKSB7 DQorCQkJcS0+aGFzaF9raW5kID0gY3RsLT5oYXNoX2tpbmQ7DQorCQkJaWYg KHEtPmhhc2hfa2luZCAhPSAgVENBX1NGUV9IQVNIX0NMQVNTSUMpDQorCQkJ CXEtPnBlcnR1cmJfcGVyaW9kID0gMDsNCisJCX0NCisJCQ0KKwkJd2hpbGUg KHNjaC0+cS5xbGVuID49IHEtPmxpbWl0LTEpDQorCQkJZXNmcV9kcm9wKHNj aCk7DQorCQkNCisJCWlmIChxLT5wZXJ0dXJiX3BlcmlvZCkgew0KKwkJCXEt PnBlcnR1cmJfdGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBxLT5wZXJ0dXJi X3BlcmlvZDsNCisJCQlhZGRfdGltZXIoJnEtPnBlcnR1cmJfdGltZXIpOw0K KwkJfQ0KKwl9DQorCQ0KKwlxLT5odCA9IGttYWxsb2MocS0+aGFzaF9kaXZp c29yKnNpemVvZihlc2ZxX2luZGV4KSwgR0ZQX0tFUk5FTCk7DQorCWlmICgh cS0+aHQpDQorCQlnb3RvIGVycl9jYXNlOw0KKwkJDQorCXEtPmRlcCA9IGtt YWxsb2MoKDErcS0+ZGVwdGgqMikqc2l6ZW9mKHN0cnVjdCBlc2ZxX2hlYWQp LCBHRlBfS0VSTkVMKTsNCisJaWYgKCFxLT5kZXApDQorCQlnb3RvIGVycl9j YXNlOw0KKwlxLT5uZXh0ID0ga21hbGxvYyhxLT5kZXB0aCpzaXplb2YoZXNm cV9pbmRleCksIEdGUF9LRVJORUwpOw0KKwlpZiAoIXEtPm5leHQpDQorCQln b3RvIGVycl9jYXNlOw0KKwkNCisJcS0+YWxsb3QgPSBrbWFsbG9jKHEtPmRl cHRoKnNpemVvZihzaG9ydCksIEdGUF9LRVJORUwpOw0KKwlpZiAoIXEtPmFs bG90KQ0KKwkJZ290byBlcnJfY2FzZTsNCisJcS0+aGFzaCA9IGttYWxsb2Mo cS0+ZGVwdGgqc2l6ZW9mKHVuc2lnbmVkIHNob3J0KSwgR0ZQX0tFUk5FTCk7 DQorCWlmICghcS0+aGFzaCkNCisJCWdvdG8gZXJyX2Nhc2U7DQorCXEtPnFz ID0ga21hbGxvYyhxLT5kZXB0aCpzaXplb2Yoc3RydWN0IHNrX2J1ZmZfaGVh ZCksIEdGUF9LRVJORUwpOw0KKwlpZiAoIXEtPnFzKQ0KKwkJZ290byBlcnJf Y2FzZTsNCisJDQorCWZvciAoaT0wOyBpPCBxLT5oYXNoX2Rpdmlzb3I7IGkr KykNCisJCXEtPmh0W2ldID0gcS0+ZGVwdGg7DQorCWZvciAoaT0wOyBpPHEt PmRlcHRoOyBpKyspIHsNCisJCXNrYl9xdWV1ZV9oZWFkX2luaXQoJnEtPnFz W2ldKTsNCisJCXEtPmRlcFtpK3EtPmRlcHRoXS5uZXh0ID0gaStxLT5kZXB0 aDsNCisJCXEtPmRlcFtpK3EtPmRlcHRoXS5wcmV2ID0gaStxLT5kZXB0aDsN CisJfQ0KKwkNCisJZm9yIChpPTA7IGk8cS0+ZGVwdGg7IGkrKykNCisJCWVz ZnFfbGluayhxLCBpKTsNCisJTU9EX0lOQ19VU0VfQ09VTlQ7DQorCXJldHVy biAwOw0KK2Vycl9jYXNlOg0KKwlpZiAocS0+aHQpDQorCQlrZnJlZShxLT5o dCk7DQorCWlmIChxLT5kZXApDQorCQlrZnJlZShxLT5kZXApOw0KKwlpZiAo cS0+bmV4dCkNCisJCWtmcmVlKHEtPm5leHQpOw0KKwlpZiAocS0+YWxsb3Qp DQorCQlrZnJlZShxLT5hbGxvdCk7DQorCWlmIChxLT5oYXNoKQ0KKwkJa2Zy ZWUocS0+aGFzaCk7DQorCWlmIChxLT5xcykNCisJCWtmcmVlKHEtPnFzKTsN CisJcmV0dXJuIC1FTk9CVUZTOw0KK30NCisNCitzdGF0aWMgdm9pZCBlc2Zx X2Rlc3Ryb3koc3RydWN0IFFkaXNjICpzY2gpDQorew0KKwlzdHJ1Y3QgZXNm cV9zY2hlZF9kYXRhICpxID0gKHN0cnVjdCBlc2ZxX3NjaGVkX2RhdGEgKilz Y2gtPmRhdGE7DQorCWRlbF90aW1lcigmcS0+cGVydHVyYl90aW1lcik7DQor CWlmKHEtPmh0KQ0KKwkJa2ZyZWUocS0+aHQpOw0KKwlpZihxLT5kZXApDQor CQlrZnJlZShxLT5kZXApOw0KKwlpZihxLT5uZXh0KQ0KKwkJa2ZyZWUocS0+ bmV4dCk7DQorCWlmKHEtPmFsbG90KQ0KKwkJa2ZyZWUocS0+YWxsb3QpOw0K KwlpZihxLT5oYXNoKQ0KKwkJa2ZyZWUocS0+aGFzaCk7DQorCWlmKHEtPnFz KQ0KKwkJa2ZyZWUocS0+cXMpOw0KKwlNT0RfREVDX1VTRV9DT1VOVDsNCit9 DQorDQorc3RhdGljIGludCBlc2ZxX2R1bXAoc3RydWN0IFFkaXNjICpzY2gs IHN0cnVjdCBza19idWZmICpza2IpDQorew0KKwlzdHJ1Y3QgZXNmcV9zY2hl ZF9kYXRhICpxID0gKHN0cnVjdCBlc2ZxX3NjaGVkX2RhdGEgKilzY2gtPmRh dGE7DQorCXVuc2lnbmVkIGNoYXIJICpiID0gc2tiLT50YWlsOw0KKwlzdHJ1 Y3QgdGNfc2ZxX3FvcHQgb3B0Ow0KKw0KKwlvcHQucXVhbnR1bSA9IHEtPnF1 YW50dW07DQorCW9wdC5wZXJ0dXJiX3BlcmlvZCA9IHEtPnBlcnR1cmJfcGVy aW9kL0haOw0KKw0KKwlvcHQubGltaXQgPSBxLT5saW1pdDsNCisJb3B0LmRp dmlzb3IgPSBxLT5oYXNoX2Rpdmlzb3I7DQorCW9wdC5mbG93cyA9IHEtPmRl cHRoOw0KKwlvcHQuaGFzaF9raW5kID0gcS0+aGFzaF9raW5kOw0KKw0KKwlS VEFfUFVUKHNrYiwgVENBX09QVElPTlMsIHNpemVvZihvcHQpLCAmb3B0KTsN CisNCisJcmV0dXJuIHNrYi0+bGVuOw0KKw0KK3J0YXR0cl9mYWlsdXJlOg0K Kwlza2JfdHJpbShza2IsIGIgLSBza2ItPmRhdGEpOw0KKwlyZXR1cm4gLTE7 DQorfQ0KKw0KK3N0cnVjdCBRZGlzY19vcHMgZXNmcV9xZGlzY19vcHMgPQ0K K3sNCisJTlVMTCwNCisJTlVMTCwNCisJImVzZnEiLA0KKwlzaXplb2Yoc3Ry dWN0IGVzZnFfc2NoZWRfZGF0YSksDQorDQorCWVzZnFfZW5xdWV1ZSwNCisJ ZXNmcV9kZXF1ZXVlLA0KKwllc2ZxX3JlcXVldWUsDQorCWVzZnFfZHJvcCwN CisNCisJZXNmcV9pbml0LA0KKwllc2ZxX3Jlc2V0LA0KKwllc2ZxX2Rlc3Ry b3ksDQorCU5VTEwsIC8qIGVzZnFfY2hhbmdlIC0gbmVlZHMgbW9yZSB3b3Jr ICovDQorDQorCWVzZnFfZHVtcCwNCit9Ow0KKw0KKyNpZmRlZiBNT0RVTEUN CitpbnQgaW5pdF9tb2R1bGUodm9pZCkNCit7DQorCXJldHVybiByZWdpc3Rl cl9xZGlzYygmZXNmcV9xZGlzY19vcHMpOw0KK30NCisNCit2b2lkIGNsZWFu dXBfbW9kdWxlKHZvaWQpIA0KK3sNCisJdW5yZWdpc3Rlcl9xZGlzYygmZXNm cV9xZGlzY19vcHMpOw0KK30NCisjZW5kaWYNCitNT0RVTEVfTElDRU5TRSgi R1BMIik7DQo= --1607778983-867809566-1023232135=:1858-- _______________________________________________ LARTC mailing list / LARTC@mailman.ds9a.nl http://mailman.ds9a.nl/mailman/listinfo/lartc HOWTO: http://lartc.org/