From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lin Ming Subject: Re: panic in do_last() Date: Thu, 17 Apr 2014 19:22:16 -0700 Message-ID: References: <20140418015750.GG18016@ZenIV.linux.org.uk> <20140418021707.GH18016@ZenIV.linux.org.uk> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary=089e0115fd3c7d099c04f747d1fc Cc: David Howells , linux-fsdevel@vger.kernel.org, Hugh Dickins To: Al Viro Return-path: Received: from mail-la0-f44.google.com ([209.85.215.44]:45045 "EHLO mail-la0-f44.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750970AbaDRCWS (ORCPT ); Thu, 17 Apr 2014 22:22:18 -0400 Received: by mail-la0-f44.google.com with SMTP id c6so989445lan.3 for ; Thu, 17 Apr 2014 19:22:16 -0700 (PDT) In-Reply-To: <20140418021707.GH18016@ZenIV.linux.org.uk> Sender: linux-fsdevel-owner@vger.kernel.org List-ID: --089e0115fd3c7d099c04f747d1fc Content-Type: text/plain; charset=UTF-8 On Thu, Apr 17, 2014 at 7:17 PM, Al Viro wrote: > I'd still like the disassembly of your do_last() and the missing hex dump... disassmebly of do_last() attached. the missing hex dump should be in previous panic.log --089e0115fd3c7d099c04f747d1fc Content-Type: application/octet-stream; name="do_last.S" Content-Disposition: attachment; filename="do_last.S" Content-Transfer-Encoding: base64 X-Attachment-Id: f_hu4upyhc0 CnZtbGludXg6ICAgICBmaWxlIGZvcm1hdCBlbGY2NC14ODYtNjQKCgpEaXNhc3NlbWJseSBvZiBz ZWN0aW9uIC50ZXh0OgoKZmZmZmZmZmY4MTEwOGRkMyA8ZG9fbGFzdC5pc3JhLjQ0PjoKfQoKLyoK ICogSGFuZGxlIHRoZSBsYXN0IHN0ZXAgb2Ygb3BlbigpCiAqLwpzdGF0aWMgaW50IGRvX2xhc3Qo c3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBwYXRoICpwYXRoLApmZmZmZmZmZjgxMTA4ZGQz OgllOCA2OCBhNyAyNyAwMCAgICAgICAJY2FsbHEgIGZmZmZmZmZmODEzODM1NDAgPF9fZmVudHJ5 X18+CmZmZmZmZmZmODExMDhkZDg6CTU1ICAgICAgICAgICAgICAgICAgIAlwdXNoICAgJXJicApm ZmZmZmZmZjgxMTA4ZGQ5Ogk0OCA4OSBlNSAgICAgICAgICAgICAJbW92ICAgICVyc3AsJXJicApm ZmZmZmZmZjgxMTA4ZGRjOgk0MSA1NyAgICAgICAgICAgICAgICAJcHVzaCAgICVyMTUKZmZmZmZm ZmY4MTEwOGRkZToJNDEgNTYgICAgICAgICAgICAgICAgCXB1c2ggICAlcjE0CmZmZmZmZmZmODEx MDhkZTA6CTQxIDU1ICAgICAgICAgICAgICAgIAlwdXNoICAgJXIxMwpmZmZmZmZmZjgxMTA4ZGUy Ogk0OSA4OSBkNSAgICAgICAgICAgICAJbW92ICAgICVyZHgsJXIxMwpmZmZmZmZmZjgxMTA4ZGU1 Ogk0MSA1NCAgICAgICAgICAgICAgICAJcHVzaCAgICVyMTIKZmZmZmZmZmY4MTEwOGRlNzoJNDkg ODkgZjQgICAgICAgICAgICAgCW1vdiAgICAlcnNpLCVyMTIKZmZmZmZmZmY4MTEwOGRlYToJNTMg ICAgICAgICAgICAgICAgICAgCXB1c2ggICAlcmJ4CmZmZmZmZmZmODExMDhkZWI6CTQ4IDg5IGZi ICAgICAgICAgICAgIAltb3YgICAgJXJkaSwlcmJ4CmZmZmZmZmZmODExMDhkZWU6CTQ4IDgzIGVj IDc4ICAgICAgICAgIAlzdWIgICAgJDB4NzgsJXJzcAoJCSAgIHN0cnVjdCBmaWxlICpmaWxlLCBj b25zdCBzdHJ1Y3Qgb3Blbl9mbGFncyAqb3AsCgkJICAgaW50ICpvcGVuZWQsIHN0cnVjdCBmaWxl bmFtZSAqbmFtZSkKewoJc3RydWN0IGRlbnRyeSAqZGlyID0gbmQtPnBhdGguZGVudHJ5OwoJaW50 IG9wZW5fZmxhZyA9IG9wLT5vcGVuX2ZsYWc7CmZmZmZmZmZmODExMDhkZjI6CThiIDExICAgICAg ICAgICAgICAgIAltb3YgICAgKCVyY3gpLCVlZHgKICovCnN0YXRpYyBpbnQgZG9fbGFzdChzdHJ1 Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IHBhdGggKnBhdGgsCgkJICAgc3RydWN0IGZpbGUgKmZp bGUsIGNvbnN0IHN0cnVjdCBvcGVuX2ZsYWdzICpvcCwKCQkgICBpbnQgKm9wZW5lZCwgc3RydWN0 IGZpbGVuYW1lICpuYW1lKQp7CglzdHJ1Y3QgZGVudHJ5ICpkaXIgPSBuZC0+cGF0aC5kZW50cnk7 CmZmZmZmZmZmODExMDhkZjQ6CTQ4IDhiIDQ3IDA4ICAgICAgICAgIAltb3YgICAgMHg4KCVyZGkp LCVyYXgKfQoKLyoKICogSGFuZGxlIHRoZSBsYXN0IHN0ZXAgb2Ygb3BlbigpCiAqLwpzdGF0aWMg aW50IGRvX2xhc3Qoc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBwYXRoICpwYXRoLApmZmZm ZmZmZjgxMTA4ZGY4Ogk0OCA4OSA0ZCA5OCAgICAgICAgICAJbW92ICAgICVyY3gsLTB4NjgoJXJi cCkKZmZmZmZmZmY4MTEwOGRmYzoJNGMgODkgNDUgYTAgICAgICAgICAgCW1vdiAgICAlcjgsLTB4 NjAoJXJicCkKCWJvb2wgd2lsbF90cnVuY2F0ZSA9IChvcGVuX2ZsYWcgJiBPX1RSVU5DKSAhPSAw OwoJYm9vbCBnb3Rfd3JpdGUgPSBmYWxzZTsKCWludCBhY2NfbW9kZSA9IG9wLT5hY2NfbW9kZTsK CXN0cnVjdCBpbm9kZSAqaW5vZGU7Cglib29sIHN5bWxpbmtfb2sgPSBmYWxzZTsKCXN0cnVjdCBw YXRoIHNhdmVfcGFyZW50ID0geyAuZGVudHJ5ID0gTlVMTCwgLm1udCA9IE5VTEwgfTsKZmZmZmZm ZmY4MTEwOGUwMDoJNDggYzcgNDUgYzAgMDAgMDAgMDAgCW1vdnEgICAkMHgwLC0weDQwKCVyYnAp CmZmZmZmZmZmODExMDhlMDc6CTAwIApmZmZmZmZmZjgxMTA4ZTA4Ogk0OCBjNyA0NSBjOCAwMCAw MCAwMCAJbW92cSAgICQweDAsLTB4MzgoJXJicCkKZmZmZmZmZmY4MTEwOGUwZjoJMDAgCiAqLwpz dGF0aWMgaW50IGRvX2xhc3Qoc3RydWN0IG5hbWVpZGF0YSAqbmQsIHN0cnVjdCBwYXRoICpwYXRo LAoJCSAgIHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBzdHJ1Y3Qgb3Blbl9mbGFncyAqb3AsCgkJ ICAgaW50ICpvcGVuZWQsIHN0cnVjdCBmaWxlbmFtZSAqbmFtZSkKewoJc3RydWN0IGRlbnRyeSAq ZGlyID0gbmQtPnBhdGguZGVudHJ5OwpmZmZmZmZmZjgxMTA4ZTEwOgk0OCA4OSA0NSA4MCAgICAg ICAgICAJbW92ICAgICVyYXgsLTB4ODAoJXJicCkKCWludCBvcGVuX2ZsYWcgPSBvcC0+b3Blbl9m bGFnOwoJYm9vbCB3aWxsX3RydW5jYXRlID0gKG9wZW5fZmxhZyAmIE9fVFJVTkMpICE9IDA7CmZm ZmZmZmZmODExMDhlMTQ6CTg5IGQwICAgICAgICAgICAgICAgIAltb3YgICAgJWVkeCwlZWF4CnN0 YXRpYyBpbnQgZG9fbGFzdChzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IHBhdGggKnBhdGgs CgkJICAgc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IHN0cnVjdCBvcGVuX2ZsYWdzICpvcCwKCQkg ICBpbnQgKm9wZW5lZCwgc3RydWN0IGZpbGVuYW1lICpuYW1lKQp7CglzdHJ1Y3QgZGVudHJ5ICpk aXIgPSBuZC0+cGF0aC5kZW50cnk7CglpbnQgb3Blbl9mbGFnID0gb3AtPm9wZW5fZmxhZzsKZmZm ZmZmZmY4MTEwOGUxNjoJODkgNTUgOTQgICAgICAgICAgICAgCW1vdiAgICAlZWR4LC0weDZjKCVy YnApCglib29sIHdpbGxfdHJ1bmNhdGUgPSAob3Blbl9mbGFnICYgT19UUlVOQykgIT0gMDsKZmZm ZmZmZmY4MTEwOGUxOToJYzEgZTggMDkgICAgICAgICAgICAgCXNociAgICAkMHg5LCVlYXgKCWlu dCBlcnJvcjsKCgluZC0+ZmxhZ3MgJj0gfkxPT0tVUF9QQVJFTlQ7CgluZC0+ZmxhZ3MgfD0gb3At PmludGVudDsKCglpZiAobmQtPmxhc3RfdHlwZSAhPSBMQVNUX05PUk0pIHsKZmZmZmZmZmY4MTEw OGUxYzoJOGIgNTcgNDQgICAgICAgICAgICAgCW1vdiAgICAweDQ0KCVyZGkpLCVlZHgKCQkgICBz dHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3Qgc3RydWN0IG9wZW5fZmxhZ3MgKm9wLAoJCSAgIGludCAq b3BlbmVkLCBzdHJ1Y3QgZmlsZW5hbWUgKm5hbWUpCnsKCXN0cnVjdCBkZW50cnkgKmRpciA9IG5k LT5wYXRoLmRlbnRyeTsKCWludCBvcGVuX2ZsYWcgPSBvcC0+b3Blbl9mbGFnOwoJYm9vbCB3aWxs X3RydW5jYXRlID0gKG9wZW5fZmxhZyAmIE9fVFJVTkMpICE9IDA7CmZmZmZmZmZmODExMDhlMWY6 CTgzIGUwIDAxICAgICAgICAgICAgIAlhbmQgICAgJDB4MSwlZWF4CmZmZmZmZmZmODExMDhlMjI6 CTg4IDQ1IGFhICAgICAgICAgICAgIAltb3YgICAgJWFsLC0weDU2KCVyYnApCglib29sIGdvdF93 cml0ZSA9IGZhbHNlOwoJaW50IGFjY19tb2RlID0gb3AtPmFjY19tb2RlOwpmZmZmZmZmZjgxMTA4 ZTI1Ogk4YiA0MSAwOCAgICAgICAgICAgICAJbW92ICAgIDB4OCglcmN4KSwlZWF4CmZmZmZmZmZm ODExMDhlMjg6CTg5IDg1IDdjIGZmIGZmIGZmICAgIAltb3YgICAgJWVheCwtMHg4NCglcmJwKQoJ Ym9vbCBzeW1saW5rX29rID0gZmFsc2U7CglzdHJ1Y3QgcGF0aCBzYXZlX3BhcmVudCA9IHsgLmRl bnRyeSA9IE5VTEwsIC5tbnQgPSBOVUxMIH07Cglib29sIHJldHJpZWQgPSBmYWxzZTsKCWludCBl cnJvcjsKCgluZC0+ZmxhZ3MgJj0gfkxPT0tVUF9QQVJFTlQ7CmZmZmZmZmZmODExMDhlMmU6CThi IDQ3IDM4ICAgICAgICAgICAgIAltb3YgICAgMHgzOCglcmRpKSwlZWF4CmZmZmZmZmZmODExMDhl MzE6CTgzIGUwIGVmICAgICAgICAgICAgIAlhbmQgICAgJDB4ZmZmZmZmZWYsJWVheApmZmZmZmZm ZjgxMTA4ZTM0Ogk4OSA0NyAzOCAgICAgICAgICAgICAJbW92ICAgICVlYXgsMHgzOCglcmRpKQoJ bmQtPmZsYWdzIHw9IG9wLT5pbnRlbnQ7CmZmZmZmZmZmODExMDhlMzc6CTBiIDQxIDBjICAgICAg ICAgICAgIAlvciAgICAgMHhjKCVyY3gpLCVlYXgKCglpZiAobmQtPmxhc3RfdHlwZSAhPSBMQVNU X05PUk0pIHsKZmZmZmZmZmY4MTEwOGUzYToJODUgZDIgICAgICAgICAgICAgICAgCXRlc3QgICAl ZWR4LCVlZHgKCXN0cnVjdCBwYXRoIHNhdmVfcGFyZW50ID0geyAuZGVudHJ5ID0gTlVMTCwgLm1u dCA9IE5VTEwgfTsKCWJvb2wgcmV0cmllZCA9IGZhbHNlOwoJaW50IGVycm9yOwoKCW5kLT5mbGFn cyAmPSB+TE9PS1VQX1BBUkVOVDsKCW5kLT5mbGFncyB8PSBvcC0+aW50ZW50OwpmZmZmZmZmZjgx MTA4ZTNjOgk4OSA0NyAzOCAgICAgICAgICAgICAJbW92ICAgICVlYXgsMHgzOCglcmRpKQoKCWlm IChuZC0+bGFzdF90eXBlICE9IExBU1RfTk9STSkgewpmZmZmZmZmZjgxMTA4ZTNmOgk3NCAyOSAg ICAgICAgICAgICAgICAJamUgICAgIGZmZmZmZmZmODExMDhlNmEgPGRvX2xhc3QuaXNyYS40NCsw eDk3PgoJcmV0dXJuIGlub2RlX3Blcm1pc3Npb24obmQtPmlub2RlLCBNQVlfRVhFQyk7Cn0KCnN0 YXRpYyBpbmxpbmUgaW50IGhhbmRsZV9kb3RzKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBpbnQgdHlw ZSkKewoJaWYgKHR5cGUgPT0gTEFTVF9ET1RET1QpIHsKZmZmZmZmZmY4MTEwOGU0MToJODMgZmEg MDMgICAgICAgICAgICAgCWNtcCAgICAkMHgzLCVlZHgKZmZmZmZmZmY4MTEwOGU0NDoJMGYgODUg MGMgMDkgMDAgMDAgICAgCWpuZSAgICBmZmZmZmZmZjgxMTA5NzU2IDxkb19sYXN0LmlzcmEuNDQr MHg5ODM+CgkJaWYgKG5kLT5mbGFncyAmIExPT0tVUF9SQ1UpIHsKZmZmZmZmZmY4MTEwOGU0YToJ YTggNDAgICAgICAgICAgICAgICAgCXRlc3QgICAkMHg0MCwlYWwKZmZmZmZmZmY4MTEwOGU0YzoJ NzQgMTIgICAgICAgICAgICAgICAgCWplICAgICBmZmZmZmZmZjgxMTA4ZTYwIDxkb19sYXN0Lmlz cmEuNDQrMHg4ZD4KCQkJaWYgKGZvbGxvd19kb3Rkb3RfcmN1KG5kKSkKZmZmZmZmZmY4MTEwOGU0 ZToJZTggZDggYzAgZmYgZmYgICAgICAgCWNhbGxxICBmZmZmZmZmZjgxMTA0ZjJiIDxmb2xsb3df ZG90ZG90X3JjdT4KZmZmZmZmZmY4MTEwOGU1MzoJODUgYzAgICAgICAgICAgICAgICAgCXRlc3Qg ICAlZWF4LCVlYXgKZmZmZmZmZmY4MTEwOGU1NToJMGYgODUgZjMgMDggMDAgMDAgICAgCWpuZSAg ICBmZmZmZmZmZjgxMTA5NzRlIDxkb19sYXN0LmlzcmEuNDQrMHg5N2I+CmZmZmZmZmZmODExMDhl NWI6CWU5IGY2IDA4IDAwIDAwICAgICAgIAlqbXBxICAgZmZmZmZmZmY4MTEwOTc1NiA8ZG9fbGFz dC5pc3JhLjQ0KzB4OTgzPgoJCQkJcmV0dXJuIC1FQ0hJTEQ7CgkJfSBlbHNlCgkJCWZvbGxvd19k b3Rkb3QobmQpOwpmZmZmZmZmZjgxMTA4ZTYwOgllOCAxNiBjNSBmZiBmZiAgICAgICAJY2FsbHEg IGZmZmZmZmZmODExMDUzN2IgPGZvbGxvd19kb3Rkb3Q+CmZmZmZmZmZmODExMDhlNjU6CWU5IGVj IDA4IDAwIDAwICAgICAgIAlqbXBxICAgZmZmZmZmZmY4MTEwOTc1NiA8ZG9fbGFzdC5pc3JhLjQ0 KzB4OTgzPgoJCWlmIChlcnJvcikKCQkJcmV0dXJuIGVycm9yOwoJCWdvdG8gZmluaXNoX29wZW47 Cgl9CgoJaWYgKCEob3Blbl9mbGFnICYgT19DUkVBVCkpIHsKZmZmZmZmZmY4MTEwOGU2YToJZjYg NDUgOTQgNDAgICAgICAgICAgCXRlc3RiICAkMHg0MCwtMHg2YyglcmJwKQpmZmZmZmZmZjgxMTA4 ZTZlOgk3NSA2NCAgICAgICAgICAgICAgICAJam5lICAgIGZmZmZmZmZmODExMDhlZDQgPGRvX2xh c3QuaXNyYS40NCsweDEwMT4KCQlpZiAobmQtPmxhc3QubmFtZVtuZC0+bGFzdC5sZW5dKQpmZmZm ZmZmZjgxMTA4ZTcwOgk4YiA1NyAxNCAgICAgICAgICAgICAJbW92ICAgIDB4MTQoJXJkaSksJWVk eApmZmZmZmZmZjgxMTA4ZTczOgk0OCA4YiA0ZiAxOCAgICAgICAgICAJbW92ICAgIDB4MTgoJXJk aSksJXJjeApmZmZmZmZmZjgxMTA4ZTc3Ogk4MCAzYyAxMSAwMCAgICAgICAgICAJY21wYiAgICQw eDAsKCVyY3gsJXJkeCwxKQpmZmZmZmZmZjgxMTA4ZTdiOgk3NCAwNiAgICAgICAgICAgICAgICAJ amUgICAgIGZmZmZmZmZmODExMDhlODMgPGRvX2xhc3QuaXNyYS40NCsweGIwPgoJCQluZC0+Zmxh Z3MgfD0gTE9PS1VQX0ZPTExPVyB8IExPT0tVUF9ESVJFQ1RPUlk7CmZmZmZmZmZmODExMDhlN2Q6 CTgzIGM4IDAzICAgICAgICAgICAgIAlvciAgICAgJDB4MywlZWF4CmZmZmZmZmZmODExMDhlODA6 CTg5IDQ3IDM4ICAgICAgICAgICAgIAltb3YgICAgJWVheCwweDM4KCVyZGkpCgkJaWYgKG9wZW5f ZmxhZyAmIE9fUEFUSCAmJiAhKG5kLT5mbGFncyAmIExPT0tVUF9GT0xMT1cpKQpmZmZmZmZmZjgx MTA4ZTgzOglmNyA0NSA5NCAwMCAwMCAyMCAwMCAJdGVzdGwgICQweDIwMDAwMCwtMHg2YyglcmJw KQoJaW50IG9wZW5fZmxhZyA9IG9wLT5vcGVuX2ZsYWc7Cglib29sIHdpbGxfdHJ1bmNhdGUgPSAo b3Blbl9mbGFnICYgT19UUlVOQykgIT0gMDsKCWJvb2wgZ290X3dyaXRlID0gZmFsc2U7CglpbnQg YWNjX21vZGUgPSBvcC0+YWNjX21vZGU7CglzdHJ1Y3QgaW5vZGUgKmlub2RlOwoJYm9vbCBzeW1s aW5rX29rID0gZmFsc2U7CmZmZmZmZmZmODExMDhlOGE6CWM2IDQ1IDkzIDAwICAgICAgICAgIAlt b3ZiICAgJDB4MCwtMHg2ZCglcmJwKQoJfQoKCWlmICghKG9wZW5fZmxhZyAmIE9fQ1JFQVQpKSB7 CgkJaWYgKG5kLT5sYXN0Lm5hbWVbbmQtPmxhc3QubGVuXSkKCQkJbmQtPmZsYWdzIHw9IExPT0tV UF9GT0xMT1cgfCBMT09LVVBfRElSRUNUT1JZOwoJCWlmIChvcGVuX2ZsYWcgJiBPX1BBVEggJiYg IShuZC0+ZmxhZ3MgJiBMT09LVVBfRk9MTE9XKSkKZmZmZmZmZmY4MTEwOGU4ZToJNzQgMGYgICAg ICAgICAgICAgICAgCWplICAgICBmZmZmZmZmZjgxMTA4ZTlmIDxkb19sYXN0LmlzcmEuNDQrMHhj Yz4KZmZmZmZmZmY4MTEwOGU5MDoJOGIgNDMgMzggICAgICAgICAgICAgCW1vdiAgICAweDM4KCVy YngpLCVlYXgKZmZmZmZmZmY4MTEwOGU5MzoJODMgZTAgMDEgICAgICAgICAgICAgCWFuZCAgICAk MHgxLCVlYXgKZmZmZmZmZmY4MTEwOGU5NjoJODMgZjAgMDEgICAgICAgICAgICAgCXhvciAgICAk MHgxLCVlYXgKZmZmZmZmZmY4MTEwOGU5OToJODMgZTAgMDEgICAgICAgICAgICAgCWFuZCAgICAk MHgxLCVlYXgKZmZmZmZmZmY4MTEwOGU5YzoJODggNDUgOTMgICAgICAgICAgICAgCW1vdiAgICAl YWwsLTB4NmQoJXJicCkKCQkJc3ltbGlua19vayA9IHRydWU7CgkJLyogd2UgX2Nhbl8gYmUgaW4g UkNVIG1vZGUgaGVyZSAqLwoJCWVycm9yID0gbG9va3VwX2Zhc3QobmQsIHBhdGgsICZpbm9kZSk7 CmZmZmZmZmZmODExMDhlOWY6CTQ4IDhkIDU1IGI4ICAgICAgICAgIAlsZWEgICAgLTB4NDgoJXJi cCksJXJkeApmZmZmZmZmZjgxMTA4ZWEzOgk0YyA4OSBlNiAgICAgICAgICAgICAJbW92ICAgICVy MTIsJXJzaQpmZmZmZmZmZjgxMTA4ZWE2Ogk0OCA4OSBkZiAgICAgICAgICAgICAJbW92ICAgICVy YngsJXJkaQpmZmZmZmZmZjgxMTA4ZWE5OgllOCBlYiBjYyBmZiBmZiAgICAgICAJY2FsbHEgIGZm ZmZmZmZmODExMDViOTkgPGxvb2t1cF9mYXN0PgoJCWlmIChsaWtlbHkoIWVycm9yKSkKZmZmZmZm ZmY4MTEwOGVhZToJODMgZjggMDAgICAgICAgICAgICAgCWNtcCAgICAkMHgwLCVlYXgKCQlpZiAo bmQtPmxhc3QubmFtZVtuZC0+bGFzdC5sZW5dKQoJCQluZC0+ZmxhZ3MgfD0gTE9PS1VQX0ZPTExP VyB8IExPT0tVUF9ESVJFQ1RPUlk7CgkJaWYgKG9wZW5fZmxhZyAmIE9fUEFUSCAmJiAhKG5kLT5m bGFncyAmIExPT0tVUF9GT0xMT1cpKQoJCQlzeW1saW5rX29rID0gdHJ1ZTsKCQkvKiB3ZSBfY2Fu XyBiZSBpbiBSQ1UgbW9kZSBoZXJlICovCgkJZXJyb3IgPSBsb29rdXBfZmFzdChuZCwgcGF0aCwg Jmlub2RlKTsKZmZmZmZmZmY4MTEwOGViMToJNDEgODkgYzYgICAgICAgICAgICAgCW1vdiAgICAl ZWF4LCVyMTRkCglib29sIGdvdF93cml0ZSA9IGZhbHNlOwoJaW50IGFjY19tb2RlID0gb3AtPmFj Y19tb2RlOwoJc3RydWN0IGlub2RlICppbm9kZTsKCWJvb2wgc3ltbGlua19vayA9IGZhbHNlOwoJ c3RydWN0IHBhdGggc2F2ZV9wYXJlbnQgPSB7IC5kZW50cnkgPSBOVUxMLCAubW50ID0gTlVMTCB9 OwoJYm9vbCByZXRyaWVkID0gZmFsc2U7CmZmZmZmZmZmODExMDhlYjQ6CWM2IDQ1IDkyIDAwICAg ICAgICAgIAltb3ZiICAgJDB4MCwtMHg2ZSglcmJwKQoJCQluZC0+ZmxhZ3MgfD0gTE9PS1VQX0ZP TExPVyB8IExPT0tVUF9ESVJFQ1RPUlk7CgkJaWYgKG9wZW5fZmxhZyAmIE9fUEFUSCAmJiAhKG5k LT5mbGFncyAmIExPT0tVUF9GT0xMT1cpKQoJCQlzeW1saW5rX29rID0gdHJ1ZTsKCQkvKiB3ZSBf Y2FuXyBiZSBpbiBSQ1UgbW9kZSBoZXJlICovCgkJZXJyb3IgPSBsb29rdXBfZmFzdChuZCwgcGF0 aCwgJmlub2RlKTsKCQlpZiAobGlrZWx5KCFlcnJvcikpCmZmZmZmZmZmODExMDhlYjg6CTBmIDg0 IDlkIDA1IDAwIDAwICAgIAlqZSAgICAgZmZmZmZmZmY4MTEwOTQ1YiA8ZG9fbGFzdC5pc3JhLjQ0 KzB4Njg4PgoJCQlnb3RvIGZpbmlzaF9sb29rdXA7CgoJCWlmIChlcnJvciA8IDApCmZmZmZmZmZm ODExMDhlYmU6CTBmIDhjIGY1IDA3IDAwIDAwICAgIAlqbCAgICAgZmZmZmZmZmY4MTEwOTZiOSA8 ZG9fbGFzdC5pc3JhLjQ0KzB4OGU2PgoJCQlnb3RvIG91dDsKCgkJQlVHX09OKG5kLT5pbm9kZSAh PSBkaXItPmRfaW5vZGUpOwpmZmZmZmZmZjgxMTA4ZWM0Ogk0OCA4YiA0NSA4MCAgICAgICAgICAJ bW92ICAgIC0weDgwKCVyYnApLCVyYXgKZmZmZmZmZmY4MTEwOGVjODoJNDggOGIgNDAgMzAgICAg ICAgICAgCW1vdiAgICAweDMwKCVyYXgpLCVyYXgKZmZmZmZmZmY4MTEwOGVjYzoJNDggMzkgNDMg MzAgICAgICAgICAgCWNtcCAgICAlcmF4LDB4MzAoJXJieCkKZmZmZmZmZmY4MTEwOGVkMDoJNzQg MzIgICAgICAgICAgICAgICAgCWplICAgICBmZmZmZmZmZjgxMTA4ZjA0IDxkb19sYXN0LmlzcmEu NDQrMHgxMzE+CmZmZmZmZmZmODExMDhlZDI6CTBmIDBiICAgICAgICAgICAgICAgIAl1ZDIgICAg CgkJLyoKCQkgKiBUaGlzIHdpbGwgKm9ubHkqIGRlYWwgd2l0aCBsZWF2aW5nIFJDVSBtb2RlIC0g TE9PS1VQX0pVTVBFRAoJCSAqIGhhcyBiZWVuIGNsZWFyZWQgd2hlbiB3ZSBnb3QgdG8gdGhlIGxh c3QgY29tcG9uZW50IHdlIGFyZQoJCSAqIGFib3V0IHRvIGxvb2sgdXAKCQkgKi8KCQllcnJvciA9 IGNvbXBsZXRlX3dhbGsobmQpOwpmZmZmZmZmZjgxMTA4ZWQ0OgllOCBkOCBjMSBmZiBmZiAgICAg ICAJY2FsbHEgIGZmZmZmZmZmODExMDUwYjEgPGNvbXBsZXRlX3dhbGs+CgkJaWYgKGVycm9yKQpm ZmZmZmZmZjgxMTA4ZWQ5Ogk4NSBjMCAgICAgICAgICAgICAgICAJdGVzdCAgICVlYXgsJWVheAoJ CS8qCgkJICogVGhpcyB3aWxsICpvbmx5KiBkZWFsIHdpdGggbGVhdmluZyBSQ1UgbW9kZSAtIExP T0tVUF9KVU1QRUQKCQkgKiBoYXMgYmVlbiBjbGVhcmVkIHdoZW4gd2UgZ290IHRvIHRoZSBsYXN0 IGNvbXBvbmVudCB3ZSBhcmUKCQkgKiBhYm91dCB0byBsb29rIHVwCgkJICovCgkJZXJyb3IgPSBj b21wbGV0ZV93YWxrKG5kKTsKZmZmZmZmZmY4MTEwOGVkYjoJNDEgODkgYzYgICAgICAgICAgICAg CW1vdiAgICAlZWF4LCVyMTRkCgkJaWYgKGVycm9yKQpmZmZmZmZmZjgxMTA4ZWRlOgkwZiA4NSBj NyAwOCAwMCAwMCAgICAJam5lICAgIGZmZmZmZmZmODExMDk3YWIgPGRvX2xhc3QuaXNyYS40NCsw eDlkOD4KCQkJcmV0dXJuIGVycm9yOwoKCQlhdWRpdF9pbm9kZShuYW1lLCBkaXIsIExPT0tVUF9Q QVJFTlQpOwoJCWVycm9yID0gLUVJU0RJUjsKCQkvKiB0cmFpbGluZyBzbGFzaGVzPyAqLwoJCWlm IChuZC0+bGFzdC5uYW1lW25kLT5sYXN0Lmxlbl0pCmZmZmZmZmZmODExMDhlZTQ6CThiIDQzIDE0 ICAgICAgICAgICAgIAltb3YgICAgMHgxNCglcmJ4KSwlZWF4CmZmZmZmZmZmODExMDhlZTc6CTQ4 IDhiIDUzIDE4ICAgICAgICAgIAltb3YgICAgMHgxOCglcmJ4KSwlcmR4CmZmZmZmZmZmODExMDhl ZWI6CTgwIDNjIDAyIDAwICAgICAgICAgIAljbXBiICAgJDB4MCwoJXJkeCwlcmF4LDEpCmZmZmZm ZmZmODExMDhlZWY6CTc0IDBiICAgICAgICAgICAgICAgIAlqZSAgICAgZmZmZmZmZmY4MTEwOGVm YyA8ZG9fbGFzdC5pc3JhLjQ0KzB4MTI5PgoJCWVycm9yID0gY29tcGxldGVfd2FsayhuZCk7CgkJ aWYgKGVycm9yKQoJCQlyZXR1cm4gZXJyb3I7CgoJCWF1ZGl0X2lub2RlKG5hbWUsIGRpciwgTE9P S1VQX1BBUkVOVCk7CgkJZXJyb3IgPSAtRUlTRElSOwpmZmZmZmZmZjgxMTA4ZWYxOgk0MSBiZSBl YiBmZiBmZiBmZiAgICAJbW92ICAgICQweGZmZmZmZmViLCVyMTRkCmZmZmZmZmZmODExMDhlZjc6 CWU5IGJkIDA3IDAwIDAwICAgICAgIAlqbXBxICAgZmZmZmZmZmY4MTEwOTZiOSA8ZG9fbGFzdC5p c3JhLjQ0KzB4OGU2PgoJYm9vbCBnb3Rfd3JpdGUgPSBmYWxzZTsKCWludCBhY2NfbW9kZSA9IG9w LT5hY2NfbW9kZTsKCXN0cnVjdCBpbm9kZSAqaW5vZGU7Cglib29sIHN5bWxpbmtfb2sgPSBmYWxz ZTsKCXN0cnVjdCBwYXRoIHNhdmVfcGFyZW50ID0geyAuZGVudHJ5ID0gTlVMTCwgLm1udCA9IE5V TEwgfTsKCWJvb2wgcmV0cmllZCA9IGZhbHNlOwpmZmZmZmZmZjgxMTA4ZWZjOgljNiA0NSA5MiAw MCAgICAgICAgICAJbW92YiAgICQweDAsLTB4NmUoJXJicCkKCWludCBvcGVuX2ZsYWcgPSBvcC0+ b3Blbl9mbGFnOwoJYm9vbCB3aWxsX3RydW5jYXRlID0gKG9wZW5fZmxhZyAmIE9fVFJVTkMpICE9 IDA7Cglib29sIGdvdF93cml0ZSA9IGZhbHNlOwoJaW50IGFjY19tb2RlID0gb3AtPmFjY19tb2Rl OwoJc3RydWN0IGlub2RlICppbm9kZTsKCWJvb2wgc3ltbGlua19vayA9IGZhbHNlOwpmZmZmZmZm ZjgxMTA4ZjAwOgljNiA0NSA5MyAwMCAgICAgICAgICAJbW92YiAgICQweDAsLTB4NmQoJXJicCkK CQlpZiAobmQtPmxhc3QubmFtZVtuZC0+bGFzdC5sZW5dKQoJCQlnb3RvIG91dDsKCX0KCnJldHJ5 X2xvb2t1cDoKCWlmIChvcC0+b3Blbl9mbGFnICYgKE9fQ1JFQVQgfCBPX1RSVU5DIHwgT19XUk9O TFkgfCBPX1JEV1IpKSB7CmZmZmZmZmZmODExMDhmMDQ6CTQ4IDhiIDU1IDk4ICAgICAgICAgIAlt b3YgICAgLTB4NjgoJXJicCksJXJkeApmZmZmZmZmZjgxMTA4ZjA4OgljNiA0NSBhYiAwMCAgICAg ICAgICAJbW92YiAgICQweDAsLTB4NTUoJXJicCkKZmZmZmZmZmY4MTEwOGYwYzoJZjcgMDIgNDMg MDIgMDAgMDAgICAgCXRlc3RsICAkMHgyNDMsKCVyZHgpCmZmZmZmZmZmODExMDhmMTI6CTc0IDBl ICAgICAgICAgICAgICAgIAlqZSAgICAgZmZmZmZmZmY4MTEwOGYyMiA8ZG9fbGFzdC5pc3JhLjQ0 KzB4MTRmPgoJCWVycm9yID0gbW50X3dhbnRfd3JpdGUobmQtPnBhdGgubW50KTsKZmZmZmZmZmY4 MTEwOGYxNDoJNDggOGIgM2IgICAgICAgICAgICAgCW1vdiAgICAoJXJieCksJXJkaQpmZmZmZmZm ZjgxMTA4ZjE3OgllOCAyYyBkMiAwMCAwMCAgICAgICAJY2FsbHEgIGZmZmZmZmZmODExMTYxNDgg PG1udF93YW50X3dyaXRlPgoJCWlmICghZXJyb3IpCmZmZmZmZmZmODExMDhmMWM6CTg1IGMwICAg ICAgICAgICAgICAgIAl0ZXN0ICAgJWVheCwlZWF4CmZmZmZmZmZmODExMDhmMWU6CTBmIDk0IDQ1 IGFiICAgICAgICAgIAlzZXRlICAgLTB4NTUoJXJicCkKCQkgKiBkbyBfbm90XyBmYWlsIHlldCAt IHdlIG1pZ2h0IG5vdCBuZWVkIHRoYXQgb3IgZmFpbCB3aXRoCgkJICogYSBkaWZmZXJlbnQgZXJy b3I7IGxldCBsb29rdXBfb3BlbigpIGRlY2lkZTsgd2UnbGwgYmUKCQkgKiBkcm9wcGluZyB0aGlz IG9uZSBhbnl3YXkuCgkJICovCgl9CgltdXRleF9sb2NrKCZkaXItPmRfaW5vZGUtPmlfbXV0ZXgp OwpmZmZmZmZmZjgxMTA4ZjIyOgk0OCA4YiA0NSA4MCAgICAgICAgICAJbW92ICAgIC0weDgwKCVy YnApLCVyYXgKZmZmZmZmZmY4MTEwOGYyNjoJNDggOGIgNDAgMzAgICAgICAgICAgCW1vdiAgICAw eDMwKCVyYXgpLCVyYXgKZmZmZmZmZmY4MTEwOGYyYToJNDggODkgYzcgICAgICAgICAgICAgCW1v diAgICAlcmF4LCVyZGkKZmZmZmZmZmY4MTEwOGYyZDoJNDggODEgYzcgYTAgMDAgMDAgMDAgCWFk ZCAgICAkMHhhMCwlcmRpCmZmZmZmZmZmODExMDhmMzQ6CWU4IDdlIDhiIDI3IDAwICAgICAgIAlj YWxscSAgZmZmZmZmZmY4MTM4MWFiNyA8bXV0ZXhfbG9jaz4Kc3RhdGljIGludCBsb29rdXBfb3Bl bihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IHBhdGggKnBhdGgsCgkJCXN0cnVjdCBmaWxl ICpmaWxlLAoJCQljb25zdCBzdHJ1Y3Qgb3Blbl9mbGFncyAqb3AsCgkJCWJvb2wgZ290X3dyaXRl LCBpbnQgKm9wZW5lZCkKewoJc3RydWN0IGRlbnRyeSAqZGlyID0gbmQtPnBhdGguZGVudHJ5Owpm ZmZmZmZmZjgxMTA4ZjM5Ogk0YyA4YiA3MyAwOCAgICAgICAgICAJbW92ICAgIDB4OCglcmJ4KSwl cjE0CglzdHJ1Y3QgaW5vZGUgKmRpcl9pbm9kZSA9IGRpci0+ZF9pbm9kZTsKCXN0cnVjdCBkZW50 cnkgKmRlbnRyeTsKCWludCBlcnJvcjsKCWJvb2wgbmVlZF9sb29rdXA7CgoJKm9wZW5lZCAmPSB+ RklMRV9DUkVBVEVEOwpmZmZmZmZmZjgxMTA4ZjNkOgk0OCA4YiA1NSBhMCAgICAgICAgICAJbW92 ICAgIC0weDYwKCVyYnApLCVyZHgKCWRlbnRyeSA9IGxvb2t1cF9kY2FjaGUoJm5kLT5sYXN0LCBk aXIsIG5kLT5mbGFncywgJm5lZWRfbG9va3VwKTsKZmZmZmZmZmY4MTEwOGY0MToJNDggOGQgN2Ig MTAgICAgICAgICAgCWxlYSAgICAweDEwKCVyYngpLCVyZGkKZmZmZmZmZmY4MTEwOGY0NToJNDgg OGQgNGQgYjcgICAgICAgICAgCWxlYSAgICAtMHg0OSglcmJwKSwlcmN4CgkJCXN0cnVjdCBmaWxl ICpmaWxlLAoJCQljb25zdCBzdHJ1Y3Qgb3Blbl9mbGFncyAqb3AsCgkJCWJvb2wgZ290X3dyaXRl LCBpbnQgKm9wZW5lZCkKewoJc3RydWN0IGRlbnRyeSAqZGlyID0gbmQtPnBhdGguZGVudHJ5OwoJ c3RydWN0IGlub2RlICpkaXJfaW5vZGUgPSBkaXItPmRfaW5vZGU7CmZmZmZmZmZmODExMDhmNDk6 CTRkIDhiIDQ2IDMwICAgICAgICAgIAltb3YgICAgMHgzMCglcjE0KSwlcjgKCXN0cnVjdCBkZW50 cnkgKmRlbnRyeTsKCWludCBlcnJvcjsKCWJvb2wgbmVlZF9sb29rdXA7CgoJKm9wZW5lZCAmPSB+ RklMRV9DUkVBVEVEOwpmZmZmZmZmZjgxMTA4ZjRkOgk4MyAyMiBmZSAgICAgICAgICAgICAJYW5k bCAgICQweGZmZmZmZmZlLCglcmR4KQoJZGVudHJ5ID0gbG9va3VwX2RjYWNoZSgmbmQtPmxhc3Qs IGRpciwgbmQtPmZsYWdzLCAmbmVlZF9sb29rdXApOwpmZmZmZmZmZjgxMTA4ZjUwOgk0YyA4OSBm NiAgICAgICAgICAgICAJbW92ICAgICVyMTQsJXJzaQpmZmZmZmZmZjgxMTA4ZjUzOgk4YiA1MyAz OCAgICAgICAgICAgICAJbW92ICAgIDB4MzgoJXJieCksJWVkeApmZmZmZmZmZjgxMTA4ZjU2Ogk0 YyA4OSA4NSA2MCBmZiBmZiBmZiAJbW92ICAgICVyOCwtMHhhMCglcmJwKQpmZmZmZmZmZjgxMTA4 ZjVkOgllOCA1MCBjOCBmZiBmZiAgICAgICAJY2FsbHEgIGZmZmZmZmZmODExMDU3YjIgPGxvb2t1 cF9kY2FjaGU+CglpZiAoSVNfRVJSKGRlbnRyeSkpCmZmZmZmZmZmODExMDhmNjI6CTQ4IDNkIDAw IGYwIGZmIGZmICAgIAljbXAgICAgJDB4ZmZmZmZmZmZmZmZmZjAwMCwlcmF4CglzdHJ1Y3QgZGVu dHJ5ICpkZW50cnk7CglpbnQgZXJyb3I7Cglib29sIG5lZWRfbG9va3VwOwoKCSpvcGVuZWQgJj0g fkZJTEVfQ1JFQVRFRDsKCWRlbnRyeSA9IGxvb2t1cF9kY2FjaGUoJm5kLT5sYXN0LCBkaXIsIG5k LT5mbGFncywgJm5lZWRfbG9va3VwKTsKZmZmZmZmZmY4MTEwOGY2ODoJNDkgODkgYzcgICAgICAg ICAgICAgCW1vdiAgICAlcmF4LCVyMTUKCWlmIChJU19FUlIoZGVudHJ5KSkKZmZmZmZmZmY4MTEw OGY2YjoJNGMgOGIgODUgNjAgZmYgZmYgZmYgCW1vdiAgICAtMHhhMCglcmJwKSwlcjgKZmZmZmZm ZmY4MTEwOGY3MjoJNzYgMDUgICAgICAgICAgICAgICAgCWpiZSAgICBmZmZmZmZmZjgxMTA4Zjc5 IDxkb19sYXN0LmlzcmEuNDQrMHgxYTY+CmZmZmZmZmZmODExMDhmNzQ6CWU5IDYxIDAzIDAwIDAw ICAgICAgIAlqbXBxICAgZmZmZmZmZmY4MTEwOTJkYSA8ZG9fbGFzdC5pc3JhLjQ0KzB4NTA3PgoJ CXJldHVybiBQVFJfRVJSKGRlbnRyeSk7CgoJLyogQ2FjaGVkIHBvc2l0aXZlIGRlbnRyeTogd2ls bCBvcGVuIGluIGZfb3AtPm9wZW4gKi8KCWlmICghbmVlZF9sb29rdXAgJiYgZGVudHJ5LT5kX2lu b2RlKQpmZmZmZmZmZjgxMTA4Zjc5Ogk4YSA0NSBiNyAgICAgICAgICAgICAJbW92ICAgIC0weDQ5 KCVyYnApLCVhbApmZmZmZmZmZjgxMTA4ZjdjOgk4NCBjMCAgICAgICAgICAgICAgICAJdGVzdCAg ICVhbCwlYWwKZmZmZmZmZmY4MTEwOGY3ZToJODggNDUgYTkgICAgICAgICAgICAgCW1vdiAgICAl YWwsLTB4NTcoJXJicCkKZmZmZmZmZmY4MTEwOGY4MToJNzUgMGIgICAgICAgICAgICAgICAgCWpu ZSAgICBmZmZmZmZmZjgxMTA4ZjhlIDxkb19sYXN0LmlzcmEuNDQrMHgxYmI+CmZmZmZmZmZmODEx MDhmODM6CTQ5IDgzIDdmIDMwIDAwICAgICAgIAljbXBxICAgJDB4MCwweDMwKCVyMTUpCmZmZmZm ZmZmODExMDhmODg6CTBmIDg1IGI3IDAzIDAwIDAwICAgIAlqbmUgICAgZmZmZmZmZmY4MTEwOTM0 NSA8ZG9fbGFzdC5pc3JhLjQ0KzB4NTcyPgoJCWdvdG8gb3V0X25vX29wZW47CgoJaWYgKChuZC0+ ZmxhZ3MgJiBMT09LVVBfT1BFTikgJiYgZGlyX2lub2RlLT5pX29wLT5hdG9taWNfb3Blbikgewpm ZmZmZmZmZjgxMTA4ZjhlOgk4YiA1MyAzOCAgICAgICAgICAgICAJbW92ICAgIDB4MzgoJXJieCks JWVkeApmZmZmZmZmZjgxMTA4ZjkxOglmNiBjNiAwMSAgICAgICAgICAgICAJdGVzdCAgICQweDEs JWRoCmZmZmZmZmZmODExMDhmOTQ6CTBmIDg0IDFiIDAzIDAwIDAwICAgIAlqZSAgICAgZmZmZmZm ZmY4MTEwOTJiNSA8ZG9fbGFzdC5pc3JhLjQ0KzB4NGUyPgpmZmZmZmZmZjgxMTA4ZjlhOgk0OSA4 YiA0MCAyMCAgICAgICAgICAJbW92ICAgIDB4MjAoJXI4KSwlcmF4CmZmZmZmZmZmODExMDhmOWU6 CTQ4IDgzIGI4IGI4IDAwIDAwIDAwIAljbXBxICAgJDB4MCwweGI4KCVyYXgpCmZmZmZmZmZmODEx MDhmYTU6CTAwIApmZmZmZmZmZjgxMTA4ZmE2OgkwZiA4NCAwOSAwMyAwMCAwMCAgICAJamUgICAg IGZmZmZmZmZmODExMDkyYjUgPGRvX2xhc3QuaXNyYS40NCsweDRlMj4KCQkJc3RydWN0IHBhdGgg KnBhdGgsIHN0cnVjdCBmaWxlICpmaWxlLAoJCQljb25zdCBzdHJ1Y3Qgb3Blbl9mbGFncyAqb3As CgkJCWJvb2wgZ290X3dyaXRlLCBib29sIG5lZWRfbG9va3VwLAoJCQlpbnQgKm9wZW5lZCkKewoJ c3RydWN0IGlub2RlICpkaXIgPSAgbmQtPnBhdGguZGVudHJ5LT5kX2lub2RlOwpmZmZmZmZmZjgx MTA4ZmFjOgk0OCA4YiA0MyAwOCAgICAgICAgICAJbW92ICAgIDB4OCglcmJ4KSwlcmF4Cgl1bnNp Z25lZCBvcGVuX2ZsYWcgPSBvcGVuX3RvX25hbWVpX2ZsYWdzKG9wLT5vcGVuX2ZsYWcpOwpmZmZm ZmZmZjgxMTA4ZmIwOgk0OCA4YiA1NSA5OCAgICAgICAgICAJbW92ICAgIC0weDY4KCVyYnApLCVy ZHgKCQkJc3RydWN0IHBhdGggKnBhdGgsIHN0cnVjdCBmaWxlICpmaWxlLAoJCQljb25zdCBzdHJ1 Y3Qgb3Blbl9mbGFncyAqb3AsCgkJCWJvb2wgZ290X3dyaXRlLCBib29sIG5lZWRfbG9va3VwLAoJ CQlpbnQgKm9wZW5lZCkKewoJc3RydWN0IGlub2RlICpkaXIgPSAgbmQtPnBhdGguZGVudHJ5LT5k X2lub2RlOwpmZmZmZmZmZjgxMTA4ZmI0Ogk0OCA4YiA0MCAzMCAgICAgICAgICAJbW92ICAgIDB4 MzAoJXJheCksJXJheAoJdW5zaWduZWQgb3Blbl9mbGFnID0gb3Blbl90b19uYW1laV9mbGFncyhv cC0+b3Blbl9mbGFnKTsKZmZmZmZmZmY4MTEwOGZiODoJNDQgOGIgMzIgICAgICAgICAgICAgCW1v diAgICAoJXJkeCksJXIxNGQKCQkJc3RydWN0IHBhdGggKnBhdGgsIHN0cnVjdCBmaWxlICpmaWxl LAoJCQljb25zdCBzdHJ1Y3Qgb3Blbl9mbGFncyAqb3AsCgkJCWJvb2wgZ290X3dyaXRlLCBib29s IG5lZWRfbG9va3VwLAoJCQlpbnQgKm9wZW5lZCkKewoJc3RydWN0IGlub2RlICpkaXIgPSAgbmQt PnBhdGguZGVudHJ5LT5kX2lub2RlOwpmZmZmZmZmZjgxMTA4ZmJiOgk0OCA4OSA0NSA4OCAgICAg ICAgICAJbW92ICAgICVyYXgsLTB4NzgoJXJicCkKCXJldHVybiBlcnJvcjsKfQoKc3RhdGljIGlu bGluZSBpbnQgb3Blbl90b19uYW1laV9mbGFncyhpbnQgZmxhZykKewoJaWYgKChmbGFnICYgT19B Q0NNT0RFKSA9PSAzKQpmZmZmZmZmZjgxMTA4ZmJmOgk0NCA4OSBmMCAgICAgICAgICAgICAJbW92 ICAgICVyMTRkLCVlYXgKZmZmZmZmZmY4MTEwOGZjMjoJODMgZTAgMDMgICAgICAgICAgICAgCWFu ZCAgICAkMHgzLCVlYXgKCQlmbGFnLS07CmZmZmZmZmZmODExMDhmYzU6CTgzIGY4IDAzICAgICAg ICAgICAgIAljbXAgICAgJDB4MywlZWF4CmZmZmZmZmZmODExMDhmYzg6CTBmIDk0IGMwICAgICAg ICAgICAgIAlzZXRlICAgJWFsCmZmZmZmZmZmODExMDhmY2I6CTBmIGI2IGMwICAgICAgICAgICAg IAltb3Z6YmwgJWFsLCVlYXgKZmZmZmZmZmY4MTEwOGZjZToJNDEgMjkgYzYgICAgICAgICAgICAg CXN1YiAgICAlZWF4LCVyMTRkCglpbnQgYWNjX21vZGU7CglpbnQgY3JlYXRlX2Vycm9yID0gMDsK CXN0cnVjdCBkZW50cnkgKmNvbnN0IERFTlRSWV9OT1RfU0VUID0gKHZvaWQgKikgLTFVTDsKCWJv b2wgZXhjbDsKCglCVUdfT04oZGVudHJ5LT5kX2lub2RlKTsKZmZmZmZmZmY4MTEwOGZkMToJNDkg ODMgN2YgMzAgMDAgICAgICAgCWNtcHEgICAkMHgwLDB4MzAoJXIxNSkKZmZmZmZmZmY4MTEwOGZk NjoJNzQgMDIgICAgICAgICAgICAgICAgCWplICAgICBmZmZmZmZmZjgxMTA4ZmRhIDxkb19sYXN0 LmlzcmEuNDQrMHgyMDc+CmZmZmZmZmZmODExMDhmZDg6CTBmIDBiICAgICAgICAgICAgICAgIAl1 ZDIgICAgCgoJLyogRG9uJ3QgY3JlYXRlIGNoaWxkIGRlbnRyeSBmb3IgYSBkZWFkIGRpcmVjdG9y eS4gKi8KCWlmICh1bmxpa2VseShJU19ERUFERElSKGRpcikpKSB7CmZmZmZmZmZmODExMDhmZGE6 CTQ4IDhiIDQ1IDg4ICAgICAgICAgIAltb3YgICAgLTB4NzgoJXJicCksJXJheApmZmZmZmZmZjgx MTA4ZmRlOglmNiA0MCAwYyAxMCAgICAgICAgICAJdGVzdGIgICQweDEwLDB4YyglcmF4KQpmZmZm ZmZmZjgxMTA4ZmUyOgkwZiA4NSAzZCAwMiAwMCAwMCAgICAJam5lICAgIGZmZmZmZmZmODExMDky MjUgPGRvX2xhc3QuaXNyYS40NCsweDQ1Mj4KCQllcnJvciA9IC1FTk9FTlQ7CgkJZ290byBvdXQ7 Cgl9CgoJbW9kZSA9IG9wLT5tb2RlOwpmZmZmZmZmZjgxMTA4ZmU4Ogk0OCA4YiA1NSA5OCAgICAg ICAgICAJbW92ICAgIC0weDY4KCVyYnApLCVyZHgKCWlmICgob3Blbl9mbGFnICYgT19DUkVBVCkg JiYgIUlTX1BPU0lYQUNMKGRpcikpCmZmZmZmZmZmODExMDhmZWM6CTQxIGY2IGM2IDQwICAgICAg ICAgIAl0ZXN0ICAgJDB4NDAsJXIxNGIKCWlmICh1bmxpa2VseShJU19ERUFERElSKGRpcikpKSB7 CgkJZXJyb3IgPSAtRU5PRU5UOwoJCWdvdG8gb3V0OwoJfQoKCW1vZGUgPSBvcC0+bW9kZTsKZmZm ZmZmZmY4MTEwOGZmMDoJOGIgNTIgMDQgICAgICAgICAgICAgCW1vdiAgICAweDQoJXJkeCksJWVk eApmZmZmZmZmZjgxMTA4ZmYzOgk2NiA4OSA1NSA5MCAgICAgICAgICAJbW92ICAgICVkeCwtMHg3 MCglcmJwKQoJaWYgKChvcGVuX2ZsYWcgJiBPX0NSRUFUKSAmJiAhSVNfUE9TSVhBQ0woZGlyKSkK ZmZmZmZmZmY4MTEwOGZmNzoJNzQgMTUgICAgICAgICAgICAgICAgCWplICAgICBmZmZmZmZmZjgx MTA5MDBlIDxkb19sYXN0LmlzcmEuNDQrMHgyM2I+CmZmZmZmZmZmODExMDhmZjk6CTQ4IDhiIDQw IDI4ICAgICAgICAgIAltb3YgICAgMHgyOCglcmF4KSwlcmF4CmZmZmZmZmZmODExMDhmZmQ6CWY2 IDQwIDUyIDAxICAgICAgICAgIAl0ZXN0YiAgJDB4MSwweDUyKCVyYXgpCmZmZmZmZmZmODExMDkw MDE6CTc1IDBiICAgICAgICAgICAgICAgIAlqbmUgICAgZmZmZmZmZmY4MTEwOTAwZSA8ZG9fbGFz dC5pc3JhLjQ0KzB4MjNiPgoJCW1vZGUgJj0gfmN1cnJlbnRfdW1hc2soKTsKZmZmZmZmZmY4MTEw OTAwMzoJZTggYzAgYTUgMDEgMDAgICAgICAgCWNhbGxxICBmZmZmZmZmZjgxMTIzNWM4IDxjdXJy ZW50X3VtYXNrPgpmZmZmZmZmZjgxMTA5MDA4OglmNyBkMCAgICAgICAgICAgICAgICAJbm90ICAg ICVlYXgKZmZmZmZmZmY4MTEwOTAwYToJNjYgMjEgNDUgOTAgICAgICAgICAgCWFuZCAgICAlYXgs LTB4NzAoJXJicCkKCglleGNsID0gKG9wZW5fZmxhZyAmIChPX0VYQ0wgfCBPX0NSRUFUKSkgPT0g KE9fRVhDTCB8IE9fQ1JFQVQpOwpmZmZmZmZmZjgxMTA5MDBlOgk0NCA4OSBmMCAgICAgICAgICAg ICAJbW92ICAgICVyMTRkLCVlYXgKZmZmZmZmZmY4MTEwOTAxMToJMjUgYzAgMDAgMDAgMDAgICAg ICAgCWFuZCAgICAkMHhjMCwlZWF4CmZmZmZmZmZmODExMDkwMTY6CTNkIGMwIDAwIDAwIDAwICAg ICAgIAljbXAgICAgJDB4YzAsJWVheAoJaWYgKGV4Y2wpCgkJb3Blbl9mbGFnICY9IH5PX1RSVU5D OwpmZmZmZmZmZjgxMTA5MDFiOgk0NCA4OSBmMCAgICAgICAgICAgICAJbW92ICAgICVyMTRkLCVl YXgKCgltb2RlID0gb3AtPm1vZGU7CglpZiAoKG9wZW5fZmxhZyAmIE9fQ1JFQVQpICYmICFJU19Q T1NJWEFDTChkaXIpKQoJCW1vZGUgJj0gfmN1cnJlbnRfdW1hc2soKTsKCglleGNsID0gKG9wZW5f ZmxhZyAmIChPX0VYQ0wgfCBPX0NSRUFUKSkgPT0gKE9fRVhDTCB8IE9fQ1JFQVQpOwpmZmZmZmZm ZjgxMTA5MDFlOgkwZiA5NCA0NSBhOCAgICAgICAgICAJc2V0ZSAgIC0weDU4KCVyYnApCglpZiAo ZXhjbCkKCQlvcGVuX2ZsYWcgJj0gfk9fVFJVTkM7CmZmZmZmZmZmODExMDkwMjI6CTgwIGU0IGZk ICAgICAgICAgICAgIAlhbmQgICAgJDB4ZmQsJWFoCmZmZmZmZmZmODExMDkwMjU6CTgwIDdkIGE4 IDAwICAgICAgICAgIAljbXBiICAgJDB4MCwtMHg1OCglcmJwKQpmZmZmZmZmZjgxMTA5MDI5Ogk0 NCAwZiA0NSBmMCAgICAgICAgICAJY21vdm5lICVlYXgsJXIxNGQKZmZmZmZmZmY4MTEwOTAyZDoJ NDQgODkgNzUgYWMgICAgICAgICAgCW1vdiAgICAlcjE0ZCwtMHg1NCglcmJwKQoJICogdG8gY2hl Y2sgYWNjZXNzIGFuZCBpZiBub3QgZ3JhbnRlZCBjbGVhciBPX0NSRUFUIGZyb20gdGhlIGZsYWdz LgoJICoKCSAqIEFub3RoZXIgcHJvYmxlbSBpcyByZXR1cmluZyB0aGUgInJpZ2h0IiBlcnJvciB2 YWx1ZSAoZS5nLiBmb3IgYW4KCSAqIE9fRVhDTCBvcGVuIHdlIHdhbnQgdG8gcmV0dXJuIEVFWElT VCBub3QgRVJPRlMpLgoJICovCglpZiAoKChvcGVuX2ZsYWcgJiAoT19DUkVBVCB8IE9fVFJVTkMp KSB8fApmZmZmZmZmZjgxMTA5MDMxOgk0MSA4MSBlNiA0MyAwMiAwMCAwMCAJYW5kICAgICQweDI0 MywlcjE0ZAoJc3RydWN0IGlub2RlICpkaXIgPSAgbmQtPnBhdGguZGVudHJ5LT5kX2lub2RlOwoJ dW5zaWduZWQgb3Blbl9mbGFnID0gb3Blbl90b19uYW1laV9mbGFncyhvcC0+b3Blbl9mbGFnKTsK CXVtb2RlX3QgbW9kZTsKCWludCBlcnJvcjsKCWludCBhY2NfbW9kZTsKCWludCBjcmVhdGVfZXJy b3IgPSAwOwpmZmZmZmZmZjgxMTA5MDM4Ogk0MSBiZSAwMCAwMCAwMCAwMCAgICAJbW92ICAgICQw eDAsJXIxNGQKCSAqIHRvIGNoZWNrIGFjY2VzcyBhbmQgaWYgbm90IGdyYW50ZWQgY2xlYXIgT19D UkVBVCBmcm9tIHRoZSBmbGFncy4KCSAqCgkgKiBBbm90aGVyIHByb2JsZW0gaXMgcmV0dXJpbmcg dGhlICJyaWdodCIgZXJyb3IgdmFsdWUgKGUuZy4gZm9yIGFuCgkgKiBPX0VYQ0wgb3BlbiB3ZSB3 YW50IHRvIHJldHVybiBFRVhJU1Qgbm90IEVST0ZTKS4KCSAqLwoJaWYgKCgob3Blbl9mbGFnICYg KE9fQ1JFQVQgfCBPX1RSVU5DKSkgfHwKZmZmZmZmZmY4MTEwOTAzZToJNzQgMjcgICAgICAgICAg ICAgICAgCWplICAgICBmZmZmZmZmZjgxMTA5MDY3IDxkb19sYXN0LmlzcmEuNDQrMHgyOTQ+Cgkg ICAgKG9wZW5fZmxhZyAmIE9fQUNDTU9ERSkgIT0gT19SRE9OTFkpICYmIHVubGlrZWx5KCFnb3Rf d3JpdGUpKSB7CmZmZmZmZmZmODExMDkwNDA6CTgwIDdkIGFiIDAwICAgICAgICAgIAljbXBiICAg JDB4MCwtMHg1NSglcmJwKQpmZmZmZmZmZjgxMTA5MDQ0Ogk3NSAyMSAgICAgICAgICAgICAgICAJ am5lICAgIGZmZmZmZmZmODExMDkwNjcgPGRvX2xhc3QuaXNyYS40NCsweDI5ND4KCQlpZiAoIShv cGVuX2ZsYWcgJiBPX0NSRUFUKSkgewpmZmZmZmZmZjgxMTA5MDQ2OglmNiA0NSBhYyA0MCAgICAg ICAgICAJdGVzdGIgICQweDQwLC0weDU0KCVyYnApCmZmZmZmZmZmODExMDkwNGE6CTBmIDg0IGY5 IDAxIDAwIDAwICAgIAlqZSAgICAgZmZmZmZmZmY4MTEwOTI0OSA8ZG9fbGFzdC5pc3JhLjQ0KzB4 NDc2PgoJCQkvKgoJCQkgKiBObyBPX0NSRUFURSAtPiBhdG9taWNpdHkgbm90IGEgcmVxdWlyZW1l bnQgLT4gZmFsbAoJCQkgKiBiYWNrIHRvIGxvb2t1cCArIG9wZW4KCQkJICovCgkJCWdvdG8gbm9f b3BlbjsKCQl9IGVsc2UgaWYgKG9wZW5fZmxhZyAmIChPX0VYQ0wgfCBPX1RSVU5DKSkgewpmZmZm ZmZmZjgxMTA5MDUwOglmNyA0NSBhYyA4MCAwMiAwMCAwMCAJdGVzdGwgICQweDI4MCwtMHg1NCgl cmJwKQpmZmZmZmZmZjgxMTA5MDU3OgkwZiA4NSBlNiAwMSAwMCAwMCAgICAJam5lICAgIGZmZmZm ZmZmODExMDkyNDMgPGRvX2xhc3QuaXNyYS40NCsweDQ3MD4KCQkJY3JlYXRlX2Vycm9yID0gLUVS T0ZTOwoJCQlnb3RvIG5vX29wZW47CgkJfSBlbHNlIHsKCQkJLyogTm8gc2lkZSBlZmZlY3RzLCBz YWZlIHRvIGNsZWFyIE9fQ1JFQVQgKi8KCQkJY3JlYXRlX2Vycm9yID0gLUVST0ZTOwoJCQlvcGVu X2ZsYWcgJj0gfk9fQ1JFQVQ7CmZmZmZmZmZmODExMDkwNWQ6CTgzIDY1IGFjIGJmICAgICAgICAg IAlhbmRsICAgJDB4ZmZmZmZmYmYsLTB4NTQoJXJicCkKCQkJLyogRmFsbCBiYWNrIGFuZCBmYWls IHdpdGggdGhlIHJpZ2h0IGVycm9yICovCgkJCWNyZWF0ZV9lcnJvciA9IC1FUk9GUzsKCQkJZ290 byBub19vcGVuOwoJCX0gZWxzZSB7CgkJCS8qIE5vIHNpZGUgZWZmZWN0cywgc2FmZSB0byBjbGVh ciBPX0NSRUFUICovCgkJCWNyZWF0ZV9lcnJvciA9IC1FUk9GUzsKZmZmZmZmZmY4MTEwOTA2MToJ NDEgYmUgZTIgZmYgZmYgZmYgICAgCW1vdiAgICAkMHhmZmZmZmZlMiwlcjE0ZAoJCQlvcGVuX2Zs YWcgJj0gfk9fQ1JFQVQ7CgkJfQoJfQoKCWlmIChvcGVuX2ZsYWcgJiBPX0NSRUFUKSB7CmZmZmZm ZmZmODExMDkwNjc6CWY2IDQ1IGFjIDQwICAgICAgICAgIAl0ZXN0YiAgJDB4NDAsLTB4NTQoJXJi cCkKZmZmZmZmZmY4MTEwOTA2YjoJNzQgM2YgICAgICAgICAgICAgICAgCWplICAgICBmZmZmZmZm ZjgxMTA5MGFjIDxkb19sYXN0LmlzcmEuNDQrMHgyZDk+CnsKCWludCBlcnJvciA9IHNlY3VyaXR5 X3BhdGhfbWtub2QoZGlyLCBkZW50cnksIG1vZGUsIDApOwoJaWYgKGVycm9yKQoJCXJldHVybiBl cnJvcjsKCgllcnJvciA9IGlub2RlX3Blcm1pc3Npb24oZGlyLT5kZW50cnktPmRfaW5vZGUsIE1B WV9XUklURSB8IE1BWV9FWEVDKTsKZmZmZmZmZmY4MTEwOTA2ZDoJNDggOGIgNDMgMDggICAgICAg ICAgCW1vdiAgICAweDgoJXJieCksJXJheApmZmZmZmZmZjgxMTA5MDcxOgliZSAwMyAwMCAwMCAw MCAgICAgICAJbW92ICAgICQweDMsJWVzaQpmZmZmZmZmZjgxMTA5MDc2Ogk0OCA4YiA3OCAzMCAg ICAgICAgICAJbW92ICAgIDB4MzAoJXJheCksJXJkaQpmZmZmZmZmZjgxMTA5MDdhOgllOCA3YyBk MiBmZiBmZiAgICAgICAJY2FsbHEgIGZmZmZmZmZmODExMDYyZmIgPGlub2RlX3Blcm1pc3Npb24+ CglpZiAoZXJyb3IpCmZmZmZmZmZmODExMDkwN2Y6CTg1IGMwICAgICAgICAgICAgICAgIAl0ZXN0 ICAgJWVheCwlZWF4CmZmZmZmZmZmODExMDkwODE6CTc1IDE4ICAgICAgICAgICAgICAgIAlqbmUg ICAgZmZmZmZmZmY4MTEwOTA5YiA8ZG9fbGFzdC5pc3JhLjQ0KzB4MmM4PgoJCXJldHVybiBlcnJv cjsKCglyZXR1cm4gc2VjdXJpdHlfaW5vZGVfY3JlYXRlKGRpci0+ZGVudHJ5LT5kX2lub2RlLCBk ZW50cnksIG1vZGUpOwpmZmZmZmZmZjgxMTA5MDgzOgk0OCA4YiA0MyAwOCAgICAgICAgICAJbW92 ICAgIDB4OCglcmJ4KSwlcmF4CmZmZmZmZmZmODExMDkwODc6CTBmIGI3IDU1IDkwICAgICAgICAg IAltb3Z6d2wgLTB4NzAoJXJicCksJWVkeApmZmZmZmZmZjgxMTA5MDhiOgk0YyA4OSBmZSAgICAg ICAgICAgICAJbW92ICAgICVyMTUsJXJzaQpmZmZmZmZmZjgxMTA5MDhlOgk0OCA4YiA3OCAzMCAg ICAgICAgICAJbW92ICAgIDB4MzAoJXJheCksJXJkaQpmZmZmZmZmZjgxMTA5MDkyOgllOCAzYyBk MCAwZCAwMCAgICAgICAJY2FsbHEgIGZmZmZmZmZmODExZTYwZDMgPHNlY3VyaXR5X2lub2RlX2Ny ZWF0ZT4KCQl9Cgl9CgoJaWYgKG9wZW5fZmxhZyAmIE9fQ1JFQVQpIHsKCQllcnJvciA9IG1heV9v X2NyZWF0ZSgmbmQtPnBhdGgsIGRlbnRyeSwgbW9kZSk7CgkJaWYgKGVycm9yKSB7CmZmZmZmZmZm ODExMDkwOTc6CTg1IGMwICAgICAgICAgICAgICAgIAl0ZXN0ICAgJWVheCwlZWF4CmZmZmZmZmZm ODExMDkwOTk6CTc0IDExICAgICAgICAgICAgICAgIAlqZSAgICAgZmZmZmZmZmY4MTEwOTBhYyA8 ZG9fbGFzdC5pc3JhLjQ0KzB4MmQ5PgoJCQljcmVhdGVfZXJyb3IgPSBlcnJvcjsKCQkJaWYgKG9w ZW5fZmxhZyAmIE9fRVhDTCkKZmZmZmZmZmY4MTEwOTA5YjoJZjYgNDUgYWMgODAgICAgICAgICAg CXRlc3RiICAkMHg4MCwtMHg1NCglcmJwKQoJaW50IGVycm9yID0gc2VjdXJpdHlfcGF0aF9ta25v ZChkaXIsIGRlbnRyeSwgbW9kZSwgMCk7CglpZiAoZXJyb3IpCgkJcmV0dXJuIGVycm9yOwoKCWVy cm9yID0gaW5vZGVfcGVybWlzc2lvbihkaXItPmRlbnRyeS0+ZF9pbm9kZSwgTUFZX1dSSVRFIHwg TUFZX0VYRUMpOwoJaWYgKGVycm9yKQpmZmZmZmZmZjgxMTA5MDlmOgk0MSA4OSBjNiAgICAgICAg ICAgICAJbW92ICAgICVlYXgsJXIxNGQKCglpZiAob3Blbl9mbGFnICYgT19DUkVBVCkgewoJCWVy cm9yID0gbWF5X29fY3JlYXRlKCZuZC0+cGF0aCwgZGVudHJ5LCBtb2RlKTsKCQlpZiAoZXJyb3Ip IHsKCQkJY3JlYXRlX2Vycm9yID0gZXJyb3I7CgkJCWlmIChvcGVuX2ZsYWcgJiBPX0VYQ0wpCmZm ZmZmZmZmODExMDkwYTI6CTBmIDg1IGExIDAxIDAwIDAwICAgIAlqbmUgICAgZmZmZmZmZmY4MTEw OTI0OSA8ZG9fbGFzdC5pc3JhLjQ0KzB4NDc2PgoJCQkJZ290byBub19vcGVuOwoJCQlvcGVuX2Zs YWcgJj0gfk9fQ1JFQVQ7CmZmZmZmZmZmODExMDkwYTg6CTgzIDY1IGFjIGJmICAgICAgICAgIAlh bmRsICAgJDB4ZmZmZmZmYmYsLTB4NTQoJXJicCkKCQl9Cgl9CgoJaWYgKG5kLT5mbGFncyAmIExP T0tVUF9ESVJFQ1RPUlkpCgkJb3Blbl9mbGFnIHw9IE9fRElSRUNUT1JZOwpmZmZmZmZmZjgxMTA5 MGFjOgk4YiA0NSBhYyAgICAgICAgICAgICAJbW92ICAgIC0weDU0KCVyYnApLCVlYXgKCglmaWxl LT5mX3BhdGguZGVudHJ5ID0gREVOVFJZX05PVF9TRVQ7CglmaWxlLT5mX3BhdGgubW50ID0gbmQt PnBhdGgubW50OwoJZXJyb3IgPSBkaXItPmlfb3AtPmF0b21pY19vcGVuKGRpciwgZGVudHJ5LCBm aWxlLCBvcGVuX2ZsYWcsIG1vZGUsCmZmZmZmZmZmODExMDkwYWY6CTQ4IDhiIDU1IDg4ICAgICAg ICAgIAltb3YgICAgLTB4NzgoJXJicCksJXJkeApmZmZmZmZmZjgxMTA5MGIzOgk0YyA4OSBmZSAg ICAgICAgICAgICAJbW92ICAgICVyMTUsJXJzaQpmZmZmZmZmZjgxMTA5MGI2Ogk0NCAwZiBiNyA0 NSA5MCAgICAgICAJbW92endsIC0weDcwKCVyYnApLCVyOGQKZmZmZmZmZmY4MTEwOTBiYjoJNGMg OGIgNGQgYTAgICAgICAgICAgCW1vdiAgICAtMHg2MCglcmJwKSwlcjkKZmZmZmZmZmY4MTEwOTBi ZjoJNDggOGIgN2QgODggICAgICAgICAgCW1vdiAgICAtMHg3OCglcmJwKSwlcmRpCgkJCW9wZW5f ZmxhZyAmPSB+T19DUkVBVDsKCQl9Cgl9CgoJaWYgKG5kLT5mbGFncyAmIExPT0tVUF9ESVJFQ1RP UlkpCgkJb3Blbl9mbGFnIHw9IE9fRElSRUNUT1JZOwpmZmZmZmZmZjgxMTA5MGMzOgkwZCAwMCAw MCAwMSAwMCAgICAgICAJb3IgICAgICQweDEwMDAwLCVlYXgKZmZmZmZmZmY4MTEwOTBjODoJZjYg NDMgMzggMDIgICAgICAgICAgCXRlc3RiICAkMHgyLDB4MzgoJXJieCkKCglmaWxlLT5mX3BhdGgu ZGVudHJ5ID0gREVOVFJZX05PVF9TRVQ7CmZmZmZmZmZmODExMDkwY2M6CTQ5IGM3IDQ1IDE4IGZm IGZmIGZmIAltb3ZxICAgJDB4ZmZmZmZmZmZmZmZmZmZmZiwweDE4KCVyMTMpCmZmZmZmZmZmODEx MDkwZDM6CWZmIAoJCQlvcGVuX2ZsYWcgJj0gfk9fQ1JFQVQ7CgkJfQoJfQoKCWlmIChuZC0+Zmxh Z3MgJiBMT09LVVBfRElSRUNUT1JZKQoJCW9wZW5fZmxhZyB8PSBPX0RJUkVDVE9SWTsKZmZmZmZm ZmY4MTEwOTBkNDoJMGYgNDQgNDUgYWMgICAgICAgICAgCWNtb3ZlICAtMHg1NCglcmJwKSwlZWF4 CmZmZmZmZmZmODExMDkwZDg6CTg5IDQ1IGFjICAgICAgICAgICAgIAltb3YgICAgJWVheCwtMHg1 NCglcmJwKQoKCWZpbGUtPmZfcGF0aC5kZW50cnkgPSBERU5UUllfTk9UX1NFVDsKCWZpbGUtPmZf cGF0aC5tbnQgPSBuZC0+cGF0aC5tbnQ7CmZmZmZmZmZmODExMDkwZGI6CTQ4IDhiIDAzICAgICAg ICAgICAgIAltb3YgICAgKCVyYngpLCVyYXgKCWVycm9yID0gZGlyLT5pX29wLT5hdG9taWNfb3Bl bihkaXIsIGRlbnRyeSwgZmlsZSwgb3Blbl9mbGFnLCBtb2RlLApmZmZmZmZmZjgxMTA5MGRlOgk4 YiA0ZCBhYyAgICAgICAgICAgICAJbW92ICAgIC0weDU0KCVyYnApLCVlY3gKCglpZiAobmQtPmZs YWdzICYgTE9PS1VQX0RJUkVDVE9SWSkKCQlvcGVuX2ZsYWcgfD0gT19ESVJFQ1RPUlk7CgoJZmls ZS0+Zl9wYXRoLmRlbnRyeSA9IERFTlRSWV9OT1RfU0VUOwoJZmlsZS0+Zl9wYXRoLm1udCA9IG5k LT5wYXRoLm1udDsKZmZmZmZmZmY4MTEwOTBlMToJNDkgODkgNDUgMTAgICAgICAgICAgCW1vdiAg ICAlcmF4LDB4MTAoJXIxMykKCWVycm9yID0gZGlyLT5pX29wLT5hdG9taWNfb3BlbihkaXIsIGRl bnRyeSwgZmlsZSwgb3Blbl9mbGFnLCBtb2RlLApmZmZmZmZmZjgxMTA5MGU1Ogk0OCA4YiA0MiAy MCAgICAgICAgICAJbW92ICAgIDB4MjAoJXJkeCksJXJheApmZmZmZmZmZjgxMTA5MGU5Ogk0YyA4 OSBlYSAgICAgICAgICAgICAJbW92ICAgICVyMTMsJXJkeApmZmZmZmZmZjgxMTA5MGVjOglmZiA5 MCBiOCAwMCAwMCAwMCAgICAJY2FsbHEgICoweGI4KCVyYXgpCgkJCQkgICAgICBvcGVuZWQpOwoJ aWYgKGVycm9yIDwgMCkgewpmZmZmZmZmZjgxMTA5MGYyOgk4MyBmOCAwMCAgICAgICAgICAgICAJ Y21wICAgICQweDAsJWVheApmZmZmZmZmZjgxMTA5MGY1Ogk3ZCAxNyAgICAgICAgICAgICAgICAJ amdlICAgIGZmZmZmZmZmODExMDkxMGUgPGRvX2xhc3QuaXNyYS40NCsweDMzYj4KCQlpZiAoY3Jl YXRlX2Vycm9yICYmIGVycm9yID09IC1FTk9FTlQpCmZmZmZmZmZmODExMDkwZjc6CTgzIGY4IGZl ICAgICAgICAgICAgIAljbXAgICAgJDB4ZmZmZmZmZmUsJWVheApmZmZmZmZmZjgxMTA5MGZhOgkw ZiA4NSAzMCAwMSAwMCAwMCAgICAJam5lICAgIGZmZmZmZmZmODExMDkyMzAgPGRvX2xhc3QuaXNy YS40NCsweDQ1ZD4KZmZmZmZmZmY4MTEwOTEwMDoJNDUgODUgZjYgICAgICAgICAgICAgCXRlc3Qg ICAlcjE0ZCwlcjE0ZApmZmZmZmZmZjgxMTA5MTAzOgkwZiA4NSA1NiAwMiAwMCAwMCAgICAJam5l ICAgIGZmZmZmZmZmODExMDkzNWYgPGRvX2xhc3QuaXNyYS40NCsweDU4Yz4KZmZmZmZmZmY4MTEw OTEwOToJZTkgMjIgMDEgMDAgMDAgICAgICAgCWptcHEgICBmZmZmZmZmZjgxMTA5MjMwIDxkb19s YXN0LmlzcmEuNDQrMHg0NWQ+CgkJCWVycm9yID0gY3JlYXRlX2Vycm9yOwoJCWdvdG8gb3V0OwoJ fQoKCWlmIChlcnJvcikgewkvKiByZXR1cm5lZCAxLCB0aGF0IGlzICovCmZmZmZmZmZmODExMDkx MGU6CTBmIDg0IGEzIDAwIDAwIDAwICAgIAlqZSAgICAgZmZmZmZmZmY4MTEwOTFiNyA8ZG9fbGFz dC5pc3JhLjQ0KzB4M2U0PgoJCWlmIChXQVJOX09OKGZpbGUtPmZfcGF0aC5kZW50cnkgPT0gREVO VFJZX05PVF9TRVQpKSB7CmZmZmZmZmZmODExMDkxMTQ6CTQ5IDhiIDQ1IDE4ICAgICAgICAgIAlt b3YgICAgMHgxOCglcjEzKSwlcmF4CmZmZmZmZmZmODExMDkxMTg6CTQ4IDgzIGY4IGZmICAgICAg ICAgIAljbXAgICAgJDB4ZmZmZmZmZmZmZmZmZmZmZiwlcmF4CmZmZmZmZmZmODExMDkxMWM6CTBm IDg1IDQxIDA2IDAwIDAwICAgIAlqbmUgICAgZmZmZmZmZmY4MTEwOTc2MyA8ZG9fbGFzdC5pc3Jh LjQ0KzB4OTkwPgpmZmZmZmZmZjgxMTA5MTIyOgliZSA5OCAwYSAwMCAwMCAgICAgICAJbW92ICAg ICQweGE5OCwlZXNpCmZmZmZmZmZmODExMDkxMjc6CTQ4IGM3IGM3IDkxIGEwIDRlIDgxIAltb3Yg ICAgJDB4ZmZmZmZmZmY4MTRlYTA5MSwlcmRpCgkJCWVycm9yID0gLUVJTzsKZmZmZmZmZmY4MTEw OTEyZToJNDEgYmUgZmIgZmYgZmYgZmYgICAgCW1vdiAgICAkMHhmZmZmZmZmYiwlcjE0ZAoJCQll cnJvciA9IGNyZWF0ZV9lcnJvcjsKCQlnb3RvIG91dDsKCX0KCglpZiAoZXJyb3IpIHsJLyogcmV0 dXJuZWQgMSwgdGhhdCBpcyAqLwoJCWlmIChXQVJOX09OKGZpbGUtPmZfcGF0aC5kZW50cnkgPT0g REVOVFJZX05PVF9TRVQpKSB7CmZmZmZmZmZmODExMDkxMzQ6CWU4IDlhIDA1IGYzIGZmICAgICAg IAljYWxscSAgZmZmZmZmZmY4MTAzOTZkMyA8d2Fybl9zbG93cGF0aF9udWxsPgpmZmZmZmZmZjgx MTA5MTM5OgllOSAyMSAwMiAwMCAwMCAgICAgICAJam1wcSAgIGZmZmZmZmZmODExMDkzNWYgPGRv X2xhc3QuaXNyYS40NCsweDU4Yz4KCQkJZXJyb3IgPSAtRUlPOwoJCQlnb3RvIG91dDsKCQl9CgkJ aWYgKGZpbGUtPmZfcGF0aC5kZW50cnkpIHsKCQkJZHB1dChkZW50cnkpOwpmZmZmZmZmZjgxMTA5 MTNlOgk0YyA4OSBmZiAgICAgICAgICAgICAJbW92ICAgICVyMTUsJXJkaQpmZmZmZmZmZjgxMTA5 MTQxOgllOCA4MyA2NSAwMCAwMCAgICAgICAJY2FsbHEgIGZmZmZmZmZmODExMGY2YzkgPGRwdXQ+ CgkJCWRlbnRyeSA9IGZpbGUtPmZfcGF0aC5kZW50cnk7CmZmZmZmZmZmODExMDkxNDY6CTRkIDhi IDdkIDE4ICAgICAgICAgIAltb3YgICAgMHgxOCglcjEzKSwlcjE1CgkJfQoJCWlmICgqb3BlbmVk ICYgRklMRV9DUkVBVEVEKQpmZmZmZmZmZjgxMTA5MTRhOgk0OCA4YiA0NSBhMCAgICAgICAgICAJ bW92ICAgIC0weDYwKCVyYnApLCVyYXgKZmZmZmZmZmY4MTEwOTE0ZToJZjYgMDAgMDEgICAgICAg ICAgICAgCXRlc3RiICAkMHgxLCglcmF4KQpmZmZmZmZmZjgxMTA5MTUxOgk3NCAxZSAgICAgICAg ICAgICAgICAJamUgICAgIGZmZmZmZmZmODExMDkxNzEgPGRvX2xhc3QuaXNyYS40NCsweDM5ZT4K ICovCnN0YXRpYyBpbmxpbmUgdm9pZCBmc25vdGlmeV9jcmVhdGUoc3RydWN0IGlub2RlICppbm9k ZSwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQp7CglhdWRpdF9pbm9kZV9jaGlsZChpbm9kZSwgZGVu dHJ5LCBBVURJVF9UWVBFX0NISUxEX0NSRUFURSk7CgoJZnNub3RpZnkoaW5vZGUsIEZTX0NSRUFU RSwgZGVudHJ5LT5kX2lub2RlLCBGU05PVElGWV9FVkVOVF9JTk9ERSwgZGVudHJ5LT5kX25hbWUu bmFtZSwgMCk7CmZmZmZmZmZmODExMDkxNTM6CTQ5IDhiIDU3IDMwICAgICAgICAgIAltb3YgICAg MHgzMCglcjE1KSwlcmR4CmZmZmZmZmZmODExMDkxNTc6CTRkIDhiIDQ3IDI4ICAgICAgICAgIAlt b3YgICAgMHgyOCglcjE1KSwlcjgKZmZmZmZmZmY4MTEwOTE1YjoJNDUgMzEgYzkgICAgICAgICAg ICAgCXhvciAgICAlcjlkLCVyOWQKZmZmZmZmZmY4MTEwOTE1ZToJNDggOGIgN2QgODggICAgICAg ICAgCW1vdiAgICAtMHg3OCglcmJwKSwlcmRpCmZmZmZmZmZmODExMDkxNjI6CWI5IDAyIDAwIDAw IDAwICAgICAgIAltb3YgICAgJDB4MiwlZWN4CmZmZmZmZmZmODExMDkxNjc6CWJlIDAwIDAxIDAw IDAwICAgICAgIAltb3YgICAgJDB4MTAwLCVlc2kKZmZmZmZmZmY4MTEwOTE2YzoJZTggZDQgNzMg MDIgMDAgICAgICAgCWNhbGxxICBmZmZmZmZmZjgxMTMwNTQ1IDxmc25vdGlmeT4KCQkJZnNub3Rp ZnlfY3JlYXRlKGRpciwgZGVudHJ5KTsKCQlpZiAoIWRlbnRyeS0+ZF9pbm9kZSkgewpmZmZmZmZm ZjgxMTA5MTcxOgk0OSA4MyA3ZiAzMCAwMCAgICAgICAJY21wcSAgICQweDAsMHgzMCglcjE1KQpm ZmZmZmZmZjgxMTA5MTc2Ogk3NSAyMyAgICAgICAgICAgICAgICAJam5lICAgIGZmZmZmZmZmODEx MDkxOWIgPGRvX2xhc3QuaXNyYS40NCsweDNjOD4KCQkJV0FSTl9PTigqb3BlbmVkICYgRklMRV9D UkVBVEVEKTsKZmZmZmZmZmY4MTEwOTE3ODoJNDggOGIgNTUgYTAgICAgICAgICAgCW1vdiAgICAt MHg2MCglcmJwKSwlcmR4CmZmZmZmZmZmODExMDkxN2M6CWY2IDAyIDAxICAgICAgICAgICAgIAl0 ZXN0YiAgJDB4MSwoJXJkeCkKZmZmZmZmZmY4MTEwOTE3ZjoJMGYgODQgYmIgMDEgMDAgMDAgICAg CWplICAgICBmZmZmZmZmZjgxMTA5MzQwIDxkb19sYXN0LmlzcmEuNDQrMHg1NmQ+CmZmZmZmZmZm ODExMDkxODU6CWJlIGEzIDBhIDAwIDAwICAgICAgIAltb3YgICAgJDB4YWEzLCVlc2kKZmZmZmZm ZmY4MTEwOTE4YToJNDggYzcgYzcgOTEgYTAgNGUgODEgCW1vdiAgICAkMHhmZmZmZmZmZjgxNGVh MDkxLCVyZGkKZmZmZmZmZmY4MTEwOTE5MToJZTggM2QgMDUgZjMgZmYgICAgICAgCWNhbGxxICBm ZmZmZmZmZjgxMDM5NmQzIDx3YXJuX3Nsb3dwYXRoX251bGw+CmZmZmZmZmZmODExMDkxOTY6CWU5 IGE1IDAxIDAwIDAwICAgICAgIAlqbXBxICAgZmZmZmZmZmY4MTEwOTM0MCA8ZG9fbGFzdC5pc3Jh LjQ0KzB4NTZkPgoJCQlpZiAoY3JlYXRlX2Vycm9yKSB7CgkJCQllcnJvciA9IGNyZWF0ZV9lcnJv cjsKCQkJCWdvdG8gb3V0OwoJCQl9CgkJfSBlbHNlIHsKCQkJaWYgKGV4Y2wgJiYgISgqb3BlbmVk ICYgRklMRV9DUkVBVEVEKSkgewpmZmZmZmZmZjgxMTA5MTliOgk4MCA3ZCBhOCAwMCAgICAgICAg ICAJY21wYiAgICQweDAsLTB4NTgoJXJicCkKZmZmZmZmZmY4MTEwOTE5ZjoJMGYgODQgYTAgMDEg MDAgMDAgICAgCWplICAgICBmZmZmZmZmZjgxMTA5MzQ1IDxkb19sYXN0LmlzcmEuNDQrMHg1NzI+ CmZmZmZmZmZmODExMDkxYTU6CTQ4IDhiIDQ1IGEwICAgICAgICAgIAltb3YgICAgLTB4NjAoJXJi cCksJXJheApmZmZmZmZmZjgxMTA5MWE5OglmNiAwMCAwMSAgICAgICAgICAgICAJdGVzdGIgICQw eDEsKCVyYXgpCmZmZmZmZmZmODExMDkxYWM6CTBmIDg1IDkzIDAxIDAwIDAwICAgIAlqbmUgICAg ZmZmZmZmZmY4MTEwOTM0NSA8ZG9fbGFzdC5pc3JhLjQ0KzB4NTcyPgpmZmZmZmZmZjgxMTA5MWIy OgllOSA4MSAwMCAwMCAwMCAgICAgICAJam1wcSAgIGZmZmZmZmZmODExMDkyMzggPGRvX2xhc3Qu aXNyYS40NCsweDQ2NT4KCS8qCgkgKiBXZSBkaWRuJ3QgaGF2ZSB0aGUgaW5vZGUgYmVmb3JlIHRo ZSBvcGVuLCBzbyBjaGVjayBvcGVuIHBlcm1pc3Npb24KCSAqIGhlcmUuCgkgKi8KCWFjY19tb2Rl ID0gb3AtPmFjY19tb2RlOwoJaWYgKCpvcGVuZWQgJiBGSUxFX0NSRUFURUQpIHsKZmZmZmZmZmY4 MTEwOTFiNzoJNDggOGIgNDUgYTAgICAgICAgICAgCW1vdiAgICAtMHg2MCglcmJwKSwlcmF4CgoJ LyoKCSAqIFdlIGRpZG4ndCBoYXZlIHRoZSBpbm9kZSBiZWZvcmUgdGhlIG9wZW4sIHNvIGNoZWNr IG9wZW4gcGVybWlzc2lvbgoJICogaGVyZS4KCSAqLwoJYWNjX21vZGUgPSBvcC0+YWNjX21vZGU7 CmZmZmZmZmZmODExMDkxYmI6CTQ4IDhiIDU1IDk4ICAgICAgICAgIAltb3YgICAgLTB4NjgoJXJi cCksJXJkeAoJaWYgKCpvcGVuZWQgJiBGSUxFX0NSRUFURUQpIHsKZmZmZmZmZmY4MTEwOTFiZjoJ ZjYgMDAgMDEgICAgICAgICAgICAgCXRlc3RiICAkMHgxLCglcmF4KQoKCS8qCgkgKiBXZSBkaWRu J3QgaGF2ZSB0aGUgaW5vZGUgYmVmb3JlIHRoZSBvcGVuLCBzbyBjaGVjayBvcGVuIHBlcm1pc3Np b24KCSAqIGhlcmUuCgkgKi8KCWFjY19tb2RlID0gb3AtPmFjY19tb2RlOwpmZmZmZmZmZjgxMTA5 MWMyOgk4YiA3MiAwOCAgICAgICAgICAgICAJbW92ICAgIDB4OCglcmR4KSwlZXNpCglpZiAoKm9w ZW5lZCAmIEZJTEVfQ1JFQVRFRCkgewpmZmZmZmZmZjgxMTA5MWM1Ogk3NCAzYSAgICAgICAgICAg ICAgICAJamUgICAgIGZmZmZmZmZmODExMDkyMDEgPGRvX2xhc3QuaXNyYS40NCsweDQyZT4KCQlX QVJOX09OKCEob3Blbl9mbGFnICYgT19DUkVBVCkpOwpmZmZmZmZmZjgxMTA5MWM3OglmNiA0NSBh YyA0MCAgICAgICAgICAJdGVzdGIgICQweDQwLC0weDU0KCVyYnApCmZmZmZmZmZmODExMDkxY2I6 CTc1IDExICAgICAgICAgICAgICAgIAlqbmUgICAgZmZmZmZmZmY4MTEwOTFkZSA8ZG9fbGFzdC5p c3JhLjQ0KzB4NDBiPgpmZmZmZmZmZjgxMTA5MWNkOgliZSBiNyAwYSAwMCAwMCAgICAgICAJbW92 ICAgICQweGFiNywlZXNpCmZmZmZmZmZmODExMDkxZDI6CTQ4IGM3IGM3IDkxIGEwIDRlIDgxIAlt b3YgICAgJDB4ZmZmZmZmZmY4MTRlYTA5MSwlcmRpCmZmZmZmZmZmODExMDkxZDk6CWU4IGY1IDA0 IGYzIGZmICAgICAgIAljYWxscSAgZmZmZmZmZmY4MTAzOTZkMyA8d2Fybl9zbG93cGF0aF9udWxs PgpmZmZmZmZmZjgxMTA5MWRlOgk0OSA4YiA1NyAzMCAgICAgICAgICAJbW92ICAgIDB4MzAoJXIx NSksJXJkeApmZmZmZmZmZjgxMTA5MWUyOgk0ZCA4YiA0NyAyOCAgICAgICAgICAJbW92ICAgIDB4 MjgoJXIxNSksJXI4CmZmZmZmZmZmODExMDkxZTY6CWJlIDAwIDAxIDAwIDAwICAgICAgIAltb3Yg ICAgJDB4MTAwLCVlc2kKZmZmZmZmZmY4MTEwOTFlYjoJNDggOGIgN2QgODggICAgICAgICAgCW1v diAgICAtMHg3OCglcmJwKSwlcmRpCmZmZmZmZmZmODExMDkxZWY6CTQ1IDMxIGM5ICAgICAgICAg ICAgIAl4b3IgICAgJXI5ZCwlcjlkCmZmZmZmZmZmODExMDkxZjI6CWI5IDAyIDAwIDAwIDAwICAg ICAgIAltb3YgICAgJDB4MiwlZWN4CmZmZmZmZmZmODExMDkxZjc6CWU4IDQ5IDczIDAyIDAwICAg ICAgIAljYWxscSAgZmZmZmZmZmY4MTEzMDU0NSA8ZnNub3RpZnk+CgkJZnNub3RpZnlfY3JlYXRl KGRpciwgZGVudHJ5KTsKCQlhY2NfbW9kZSA9IE1BWV9PUEVOOwpmZmZmZmZmZjgxMTA5MWZjOgli ZSAyMCAwMCAwMCAwMCAgICAgICAJbW92ICAgICQweDIwLCVlc2kKCX0KCWVycm9yID0gbWF5X29w ZW4oJmZpbGUtPmZfcGF0aCwgYWNjX21vZGUsIG9wZW5fZmxhZyk7CmZmZmZmZmZmODExMDkyMDE6 CThiIDU1IGFjICAgICAgICAgICAgIAltb3YgICAgLTB4NTQoJXJicCksJWVkeApmZmZmZmZmZjgx MTA5MjA0Ogk0OSA4ZCA3ZCAxMCAgICAgICAgICAJbGVhICAgIDB4MTAoJXIxMyksJXJkaQpmZmZm ZmZmZjgxMTA5MjA4OgllOCBkYyBmYSBmZiBmZiAgICAgICAJY2FsbHEgIGZmZmZmZmZmODExMDhj ZTkgPG1heV9vcGVuPgoJaWYgKGVycm9yKQpmZmZmZmZmZjgxMTA5MjBkOgk4NSBjMCAgICAgICAg ICAgICAgICAJdGVzdCAgICVlYXgsJWVheAoJaWYgKCpvcGVuZWQgJiBGSUxFX0NSRUFURUQpIHsK CQlXQVJOX09OKCEob3Blbl9mbGFnICYgT19DUkVBVCkpOwoJCWZzbm90aWZ5X2NyZWF0ZShkaXIs IGRlbnRyeSk7CgkJYWNjX21vZGUgPSBNQVlfT1BFTjsKCX0KCWVycm9yID0gbWF5X29wZW4oJmZp bGUtPmZfcGF0aCwgYWNjX21vZGUsIG9wZW5fZmxhZyk7CmZmZmZmZmZmODExMDkyMGY6CTQxIDg5 IGM2ICAgICAgICAgICAgIAltb3YgICAgJWVheCwlcjE0ZAoJaWYgKGVycm9yKQpmZmZmZmZmZjgx MTA5MjEyOgkwZiA4NCA0NyAwMSAwMCAwMCAgICAJamUgICAgIGZmZmZmZmZmODExMDkzNWYgPGRv X2xhc3QuaXNyYS40NCsweDU4Yz4KCQlmcHV0KGZpbGUpOwpmZmZmZmZmZjgxMTA5MjE4Ogk0YyA4 OSBlZiAgICAgICAgICAgICAJbW92ICAgICVyMTMsJXJkaQpmZmZmZmZmZjgxMTA5MjFiOgllOCBk NiA1NiBmZiBmZiAgICAgICAJY2FsbHEgIGZmZmZmZmZmODEwZmU4ZjYgPGZwdXQ+CmZmZmZmZmZm ODExMDkyMjA6CWU5IDNhIDAxIDAwIDAwICAgICAgIAlqbXBxICAgZmZmZmZmZmY4MTEwOTM1ZiA8 ZG9fbGFzdC5pc3JhLjQ0KzB4NThjPgoKCUJVR19PTihkZW50cnktPmRfaW5vZGUpOwoKCS8qIERv bid0IGNyZWF0ZSBjaGlsZCBkZW50cnkgZm9yIGEgZGVhZCBkaXJlY3RvcnkuICovCglpZiAodW5s aWtlbHkoSVNfREVBRERJUihkaXIpKSkgewoJCWVycm9yID0gLUVOT0VOVDsKZmZmZmZmZmY4MTEw OTIyNToJNDEgYmUgZmUgZmYgZmYgZmYgICAgCW1vdiAgICAkMHhmZmZmZmZmZSwlcjE0ZApmZmZm ZmZmZjgxMTA5MjJiOgllOSAyZiAwMSAwMCAwMCAgICAgICAJam1wcSAgIGZmZmZmZmZmODExMDkz NWYgPGRvX2xhc3QuaXNyYS40NCsweDU4Yz4KCWZpbGUtPmZfcGF0aC5kZW50cnkgPSBERU5UUllf Tk9UX1NFVDsKCWZpbGUtPmZfcGF0aC5tbnQgPSBuZC0+cGF0aC5tbnQ7CgllcnJvciA9IGRpci0+ aV9vcC0+YXRvbWljX29wZW4oZGlyLCBkZW50cnksIGZpbGUsIG9wZW5fZmxhZywgbW9kZSwKCQkJ CSAgICAgIG9wZW5lZCk7CglpZiAoZXJyb3IgPCAwKSB7CgkJaWYgKGNyZWF0ZV9lcnJvciAmJiBl cnJvciA9PSAtRU5PRU5UKQpmZmZmZmZmZjgxMTA5MjMwOgk0MSA4OSBjNiAgICAgICAgICAgICAJ bW92ICAgICVlYXgsJXIxNGQKZmZmZmZmZmY4MTEwOTIzMzoJZTkgMjcgMDEgMDAgMDAgICAgICAg CWptcHEgICBmZmZmZmZmZjgxMTA5MzVmIDxkb19sYXN0LmlzcmEuNDQrMHg1OGM+CgkJCQllcnJv ciA9IGNyZWF0ZV9lcnJvcjsKCQkJCWdvdG8gb3V0OwoJCQl9CgkJfSBlbHNlIHsKCQkJaWYgKGV4 Y2wgJiYgISgqb3BlbmVkICYgRklMRV9DUkVBVEVEKSkgewoJCQkJZXJyb3IgPSAtRUVYSVNUOwpm ZmZmZmZmZjgxMTA5MjM4Ogk0MSBiZSBlZiBmZiBmZiBmZiAgICAJbW92ICAgICQweGZmZmZmZmVm LCVyMTRkCmZmZmZmZmZmODExMDkyM2U6CWU5IDFjIDAxIDAwIDAwICAgICAgIAlqbXBxICAgZmZm ZmZmZmY4MTEwOTM1ZiA8ZG9fbGFzdC5pc3JhLjQ0KzB4NThjPgoJCQkgKiBiYWNrIHRvIGxvb2t1 cCArIG9wZW4KCQkJICovCgkJCWdvdG8gbm9fb3BlbjsKCQl9IGVsc2UgaWYgKG9wZW5fZmxhZyAm IChPX0VYQ0wgfCBPX1RSVU5DKSkgewoJCQkvKiBGYWxsIGJhY2sgYW5kIGZhaWwgd2l0aCB0aGUg cmlnaHQgZXJyb3IgKi8KCQkJY3JlYXRlX2Vycm9yID0gLUVST0ZTOwpmZmZmZmZmZjgxMTA5MjQz Ogk0MSBiZSBlMiBmZiBmZiBmZiAgICAJbW92ICAgICQweGZmZmZmZmUyLCVyMTRkCm91dDoKCWRw dXQoZGVudHJ5KTsKCXJldHVybiBlcnJvcjsKCm5vX29wZW46CglpZiAobmVlZF9sb29rdXApIHsK ZmZmZmZmZmY4MTEwOTI0OToJODAgN2QgYTkgMDAgICAgICAgICAgCWNtcGIgICAkMHgwLC0weDU3 KCVyYnApCmZmZmZmZmZmODExMDkyNGQ6CTBmIDg0IGYyIDAwIDAwIDAwICAgIAlqZSAgICAgZmZm ZmZmZmY4MTEwOTM0NSA8ZG9fbGFzdC5pc3JhLjQ0KzB4NTcyPgoJCWRlbnRyeSA9IGxvb2t1cF9y ZWFsKGRpciwgZGVudHJ5LCBuZC0+ZmxhZ3MpOwpmZmZmZmZmZjgxMTA5MjUzOgk4YiA1MyAzOCAg ICAgICAgICAgICAJbW92ICAgIDB4MzgoJXJieCksJWVkeApmZmZmZmZmZjgxMTA5MjU2Ogk0OCA4 YiA3ZCA4OCAgICAgICAgICAJbW92ICAgIC0weDc4KCVyYnApLCVyZGkKZmZmZmZmZmY4MTEwOTI1 YToJNGMgODkgZmUgICAgICAgICAgICAgCW1vdiAgICAlcjE1LCVyc2kKZmZmZmZmZmY4MTEwOTI1 ZDoJZTggODIgYmMgZmYgZmYgICAgICAgCWNhbGxxICBmZmZmZmZmZjgxMTA0ZWU0IDxsb29rdXBf cmVhbD4KCQlpZiAoSVNfRVJSKGRlbnRyeSkpCmZmZmZmZmZmODExMDkyNjI6CTQ4IDNkIDAwIGYw IGZmIGZmICAgIAljbXAgICAgJDB4ZmZmZmZmZmZmZmZmZjAwMCwlcmF4CglkcHV0KGRlbnRyeSk7 CglyZXR1cm4gZXJyb3I7Cgpub19vcGVuOgoJaWYgKG5lZWRfbG9va3VwKSB7CgkJZGVudHJ5ID0g bG9va3VwX3JlYWwoZGlyLCBkZW50cnksIG5kLT5mbGFncyk7CmZmZmZmZmZmODExMDkyNjg6CTQ5 IDg5IGM3ICAgICAgICAgICAgIAltb3YgICAgJXJheCwlcjE1CgkJaWYgKElTX0VSUihkZW50cnkp KQpmZmZmZmZmZjgxMTA5MjZiOgk3NiAwMiAgICAgICAgICAgICAgICAJamJlICAgIGZmZmZmZmZm ODExMDkyNmYgPGRvX2xhc3QuaXNyYS40NCsweDQ5Yz4KZmZmZmZmZmY4MTEwOTI2ZDoJZWIgNmIg ICAgICAgICAgICAgICAgCWptcCAgICBmZmZmZmZmZjgxMTA5MmRhIDxkb19sYXN0LmlzcmEuNDQr MHg1MDc+CgkJCXJldHVybiBQVFJfRVJSKGRlbnRyeSk7CgoJCWlmIChjcmVhdGVfZXJyb3IpIHsK ZmZmZmZmZmY4MTEwOTI2ZjoJNDUgODUgZjYgICAgICAgICAgICAgCXRlc3QgICAlcjE0ZCwlcjE0 ZApmZmZmZmZmZjgxMTA5MjcyOgkwZiA4NCBjZCAwMCAwMCAwMCAgICAJamUgICAgIGZmZmZmZmZm ODExMDkzNDUgPGRvX2xhc3QuaXNyYS40NCsweDU3Mj4KCQkJaW50IG9wZW5fZmxhZyA9IG9wLT5v cGVuX2ZsYWc7CmZmZmZmZmZmODExMDkyNzg6CTQ4IDhiIDQ1IDk4ICAgICAgICAgIAltb3YgICAg LTB4NjgoJXJicCksJXJheApmZmZmZmZmZjgxMTA5MjdjOgk4YiAxMCAgICAgICAgICAgICAgICAJ bW92ICAgICglcmF4KSwlZWR4CgoJCQllcnJvciA9IGNyZWF0ZV9lcnJvcjsKCQkJaWYgKChvcGVu X2ZsYWcgJiBPX0VYQ0wpKSB7CmZmZmZmZmZmODExMDkyN2U6CWY2IGMyIDgwICAgICAgICAgICAg IAl0ZXN0ICAgJDB4ODAsJWRsCmZmZmZmZmZmODExMDkyODE6CTc0IDA3ICAgICAgICAgICAgICAg IAlqZSAgICAgZmZmZmZmZmY4MTEwOTI4YSA8ZG9fbGFzdC5pc3JhLjQ0KzB4NGI3PgoJCQkJaWYg KCFkZW50cnktPmRfaW5vZGUpCmZmZmZmZmZmODExMDkyODM6CTQ5IDgzIDdmIDMwIDAwICAgICAg IAljbXBxICAgJDB4MCwweDMwKCVyMTUpCmZmZmZmZmZmODExMDkyODg6CWViIDIwICAgICAgICAg ICAgICAgIAlqbXAgICAgZmZmZmZmZmY4MTEwOTJhYSA8ZG9fbGFzdC5pc3JhLjQ0KzB4NGQ3PgoJ CQkJCWdvdG8gb3V0OwoJCQl9IGVsc2UgaWYgKCFkZW50cnktPmRfaW5vZGUpIHsKZmZmZmZmZmY4 MTEwOTI4YToJNDkgOGIgNDcgMzAgICAgICAgICAgCW1vdiAgICAweDMwKCVyMTUpLCVyYXgKZmZm ZmZmZmY4MTEwOTI4ZToJNDggODUgYzAgICAgICAgICAgICAgCXRlc3QgICAlcmF4LCVyYXgKZmZm ZmZmZmY4MTEwOTI5MToJMGYgODQgYzggMDAgMDAgMDAgICAgCWplICAgICBmZmZmZmZmZjgxMTA5 MzVmIDxkb19sYXN0LmlzcmEuNDQrMHg1OGM+CgkJCQlnb3RvIG91dDsKCQkJfSBlbHNlIGlmICgo b3Blbl9mbGFnICYgT19UUlVOQykgJiYKZmZmZmZmZmY4MTEwOTI5NzoJODAgZTYgMDIgICAgICAg ICAgICAgCWFuZCAgICAkMHgyLCVkaApmZmZmZmZmZjgxMTA5MjlhOgkwZiA4NCBhNSAwMCAwMCAw MCAgICAJamUgICAgIGZmZmZmZmZmODExMDkzNDUgPGRvX2xhc3QuaXNyYS40NCsweDU3Mj4KCQkJ CSAgIFNfSVNSRUcoZGVudHJ5LT5kX2lub2RlLT5pX21vZGUpKSB7CmZmZmZmZmZmODExMDkyYTA6 CThiIDAwICAgICAgICAgICAgICAgIAltb3YgICAgKCVyYXgpLCVlYXgKZmZmZmZmZmY4MTEwOTJh MjoJNjYgMjUgMDAgZjAgICAgICAgICAgCWFuZCAgICAkMHhmMDAwLCVheAoJCQlpZiAoKG9wZW5f ZmxhZyAmIE9fRVhDTCkpIHsKCQkJCWlmICghZGVudHJ5LT5kX2lub2RlKQoJCQkJCWdvdG8gb3V0 OwoJCQl9IGVsc2UgaWYgKCFkZW50cnktPmRfaW5vZGUpIHsKCQkJCWdvdG8gb3V0OwoJCQl9IGVs c2UgaWYgKChvcGVuX2ZsYWcgJiBPX1RSVU5DKSAmJgpmZmZmZmZmZjgxMTA5MmE2Ogk2NiAzZCAw MCA4MCAgICAgICAgICAJY21wICAgICQweDgwMDAsJWF4CmZmZmZmZmZmODExMDkyYWE6CTBmIDg0 IGFmIDAwIDAwIDAwICAgIAlqZSAgICAgZmZmZmZmZmY4MTEwOTM1ZiA8ZG9fbGFzdC5pc3JhLjQ0 KzB4NThjPgpmZmZmZmZmZjgxMTA5MmIwOgllOSA5MCAwMCAwMCAwMCAgICAgICAJam1wcSAgIGZm ZmZmZmZmODExMDkzNDUgPGRvX2xhc3QuaXNyYS40NCsweDU3Mj4KCWlmICgobmQtPmZsYWdzICYg TE9PS1VQX09QRU4pICYmIGRpcl9pbm9kZS0+aV9vcC0+YXRvbWljX29wZW4pIHsKCQlyZXR1cm4g YXRvbWljX29wZW4obmQsIGRlbnRyeSwgcGF0aCwgZmlsZSwgb3AsIGdvdF93cml0ZSwKCQkJCSAg IG5lZWRfbG9va3VwLCBvcGVuZWQpOwoJfQoKCWlmIChuZWVkX2xvb2t1cCkgewpmZmZmZmZmZjgx MTA5MmI1Ogk4MCA3ZCBhOSAwMCAgICAgICAgICAJY21wYiAgICQweDAsLTB4NTcoJXJicCkKZmZm ZmZmZmY4MTEwOTJiOToJNzQgMjcgICAgICAgICAgICAgICAgCWplICAgICBmZmZmZmZmZjgxMTA5 MmUyIDxkb19sYXN0LmlzcmEuNDQrMHg1MGY+CgkJQlVHX09OKGRlbnRyeS0+ZF9pbm9kZSk7CmZm ZmZmZmZmODExMDkyYmI6CTQ5IDgzIDdmIDMwIDAwICAgICAgIAljbXBxICAgJDB4MCwweDMwKCVy MTUpCmZmZmZmZmZmODExMDkyYzA6CTc0IDAyICAgICAgICAgICAgICAgIAlqZSAgICAgZmZmZmZm ZmY4MTEwOTJjNCA8ZG9fbGFzdC5pc3JhLjQ0KzB4NGYxPgpmZmZmZmZmZjgxMTA5MmMyOgkwZiAw YiAgICAgICAgICAgICAgICAJdWQyICAgIAoKCQlkZW50cnkgPSBsb29rdXBfcmVhbChkaXJfaW5v ZGUsIGRlbnRyeSwgbmQtPmZsYWdzKTsKZmZmZmZmZmY4MTEwOTJjNDoJNGMgODkgZmUgICAgICAg ICAgICAgCW1vdiAgICAlcjE1LCVyc2kKZmZmZmZmZmY4MTEwOTJjNzoJNGMgODkgYzcgICAgICAg ICAgICAgCW1vdiAgICAlcjgsJXJkaQpmZmZmZmZmZjgxMTA5MmNhOgllOCAxNSBiYyBmZiBmZiAg ICAgICAJY2FsbHEgIGZmZmZmZmZmODExMDRlZTQgPGxvb2t1cF9yZWFsPgoJCWlmIChJU19FUlIo ZGVudHJ5KSkKZmZmZmZmZmY4MTEwOTJjZjoJNDggM2QgMDAgZjAgZmYgZmYgICAgCWNtcCAgICAk MHhmZmZmZmZmZmZmZmZmMDAwLCVyYXgKCX0KCglpZiAobmVlZF9sb29rdXApIHsKCQlCVUdfT04o ZGVudHJ5LT5kX2lub2RlKTsKCgkJZGVudHJ5ID0gbG9va3VwX3JlYWwoZGlyX2lub2RlLCBkZW50 cnksIG5kLT5mbGFncyk7CmZmZmZmZmZmODExMDkyZDU6CTQ5IDg5IGM3ICAgICAgICAgICAgIAlt b3YgICAgJXJheCwlcjE1CgkJaWYgKElTX0VSUihkZW50cnkpKQpmZmZmZmZmZjgxMTA5MmQ4Ogk3 NiAwOCAgICAgICAgICAgICAgICAJamJlICAgIGZmZmZmZmZmODExMDkyZTIgPGRvX2xhc3QuaXNy YS40NCsweDUwZj4KCQkJcmV0dXJuIFBUUl9FUlIoZGVudHJ5KTsKZmZmZmZmZmY4MTEwOTJkYToJ NDUgODkgZmUgICAgICAgICAgICAgCW1vdiAgICAlcjE1ZCwlcjE0ZApmZmZmZmZmZjgxMTA5MmRk OgllOSA4NSAwMCAwMCAwMCAgICAgICAJam1wcSAgIGZmZmZmZmZmODExMDkzNjcgPGRvX2xhc3Qu aXNyYS40NCsweDU5ND4KCX0KCgkvKiBOZWdhdGl2ZSBkZW50cnksIGp1c3QgY3JlYXRlIHRoZSBm aWxlICovCglpZiAoIWRlbnRyeS0+ZF9pbm9kZSAmJiAob3AtPm9wZW5fZmxhZyAmIE9fQ1JFQVQp KSB7CmZmZmZmZmZmODExMDkyZTI6CTQ5IDgzIDdmIDMwIDAwICAgICAgIAljbXBxICAgJDB4MCww eDMwKCVyMTUpCmZmZmZmZmZmODExMDkyZTc6CTc1IDVjICAgICAgICAgICAgICAgIAlqbmUgICAg ZmZmZmZmZmY4MTEwOTM0NSA8ZG9fbGFzdC5pc3JhLjQ0KzB4NTcyPgpmZmZmZmZmZjgxMTA5MmU5 Ogk0OCA4YiA1NSA5OCAgICAgICAgICAJbW92ICAgIC0weDY4KCVyYnApLCVyZHgKZmZmZmZmZmY4 MTEwOTJlZDoJZjYgMDIgNDAgICAgICAgICAgICAgCXRlc3RiICAkMHg0MCwoJXJkeCkKZmZmZmZm ZmY4MTEwOTJmMDoJNzQgNTMgICAgICAgICAgICAgICAgCWplICAgICBmZmZmZmZmZjgxMTA5MzQ1 IDxkb19sYXN0LmlzcmEuNDQrMHg1NzI+CgkJdW1vZGVfdCBtb2RlID0gb3AtPm1vZGU7CgkJaWYg KCFJU19QT1NJWEFDTChkaXItPmRfaW5vZGUpKQpmZmZmZmZmZjgxMTA5MmYyOgk0OSA4YiA0NiAz MCAgICAgICAgICAJbW92ICAgIDB4MzAoJXIxNCksJXJheAoJCQlyZXR1cm4gUFRSX0VSUihkZW50 cnkpOwoJfQoKCS8qIE5lZ2F0aXZlIGRlbnRyeSwganVzdCBjcmVhdGUgdGhlIGZpbGUgKi8KCWlm ICghZGVudHJ5LT5kX2lub2RlICYmIChvcC0+b3Blbl9mbGFnICYgT19DUkVBVCkpIHsKCQl1bW9k ZV90IG1vZGUgPSBvcC0+bW9kZTsKZmZmZmZmZmY4MTEwOTJmNjoJOGIgNTIgMDQgICAgICAgICAg ICAgCW1vdiAgICAweDQoJXJkeCksJWVkeAoJCWlmICghSVNfUE9TSVhBQ0woZGlyLT5kX2lub2Rl KSkKZmZmZmZmZmY4MTEwOTJmOToJNDggOGIgNDAgMjggICAgICAgICAgCW1vdiAgICAweDI4KCVy YXgpLCVyYXgKZmZmZmZmZmY4MTEwOTJmZDoJZjYgNDAgNTIgMDEgICAgICAgICAgCXRlc3RiICAk MHgxLDB4NTIoJXJheCkKZmZmZmZmZmY4MTEwOTMwMToJNzUgMTUgICAgICAgICAgICAgICAgCWpu ZSAgICBmZmZmZmZmZjgxMTA5MzE4IDxkb19sYXN0LmlzcmEuNDQrMHg1NDU+CgkJCW1vZGUgJj0g fmN1cnJlbnRfdW1hc2soKTsKZmZmZmZmZmY4MTEwOTMwMzoJODkgOTUgNjAgZmYgZmYgZmYgICAg CW1vdiAgICAlZWR4LC0weGEwKCVyYnApCmZmZmZmZmZmODExMDkzMDk6CWU4IGJhIGEyIDAxIDAw ICAgICAgIAljYWxscSAgZmZmZmZmZmY4MTEyMzVjOCA8Y3VycmVudF91bWFzaz4KZmZmZmZmZmY4 MTEwOTMwZToJOGIgOTUgNjAgZmYgZmYgZmYgICAgCW1vdiAgICAtMHhhMCglcmJwKSwlZWR4CmZm ZmZmZmZmODExMDkzMTQ6CWY3IGQwICAgICAgICAgICAgICAgIAlub3QgICAgJWVheApmZmZmZmZm ZjgxMTA5MzE2OgkyMSBjMiAgICAgICAgICAgICAgICAJYW5kICAgICVlYXgsJWVkeAoJCSAqIHJ3 LT5ybyB0cmFuc2l0aW9uIGRvZXMgbm90IG9jY3VyIGJldHdlZW4KCQkgKiB0aGUgdGltZSB3aGVu IHRoZSBmaWxlIGlzIGNyZWF0ZWQgYW5kIHdoZW4KCQkgKiBhIHBlcm1hbmVudCB3cml0ZSBjb3Vu dCBpcyB0YWtlbiB0aHJvdWdoCgkJICogdGhlICdzdHJ1Y3QgZmlsZScgaW4gZmluaXNoX29wZW4o KS4KCQkgKi8KCQlpZiAoIWdvdF93cml0ZSkgewpmZmZmZmZmZjgxMTA5MzE4Ogk4MCA3ZCBhYiAw MCAgICAgICAgICAJY21wYiAgICQweDAsLTB4NTUoJXJicCkKZmZmZmZmZmY4MTEwOTMxYzoJNzQg M2IgICAgICAgICAgICAgICAgCWplICAgICBmZmZmZmZmZjgxMTA5MzU5IDxkb19sYXN0LmlzcmEu NDQrMHg1ODY+CgkJCWVycm9yID0gLUVST0ZTOwoJCQlnb3RvIG91dF9kcHV0OwoJCX0KCQkqb3Bl bmVkIHw9IEZJTEVfQ1JFQVRFRDsKZmZmZmZmZmY4MTEwOTMxZToJNDggOGIgNDUgYTAgICAgICAg ICAgCW1vdiAgICAtMHg2MCglcmJwKSwlcmF4CgkJZXJyb3IgPSBzZWN1cml0eV9wYXRoX21rbm9k KCZuZC0+cGF0aCwgZGVudHJ5LCBtb2RlLCAwKTsKCQlpZiAoZXJyb3IpCgkJCWdvdG8gb3V0X2Rw dXQ7CgkJZXJyb3IgPSB2ZnNfY3JlYXRlKGRpci0+ZF9pbm9kZSwgZGVudHJ5LCBtb2RlLApmZmZm ZmZmZjgxMTA5MzIyOgkwZiBiNyBkMiAgICAgICAgICAgICAJbW92endsICVkeCwlZWR4CmZmZmZm ZmZmODExMDkzMjU6CTRjIDg5IGZlICAgICAgICAgICAgIAltb3YgICAgJXIxNSwlcnNpCgkJICov CgkJaWYgKCFnb3Rfd3JpdGUpIHsKCQkJZXJyb3IgPSAtRVJPRlM7CgkJCWdvdG8gb3V0X2RwdXQ7 CgkJfQoJCSpvcGVuZWQgfD0gRklMRV9DUkVBVEVEOwpmZmZmZmZmZjgxMTA5MzI4Ogk4MyAwOCAw MSAgICAgICAgICAgICAJb3JsICAgICQweDEsKCVyYXgpCgkJZXJyb3IgPSBzZWN1cml0eV9wYXRo X21rbm9kKCZuZC0+cGF0aCwgZGVudHJ5LCBtb2RlLCAwKTsKCQlpZiAoZXJyb3IpCgkJCWdvdG8g b3V0X2RwdXQ7CgkJZXJyb3IgPSB2ZnNfY3JlYXRlKGRpci0+ZF9pbm9kZSwgZGVudHJ5LCBtb2Rl LApmZmZmZmZmZjgxMTA5MzJiOgk4YiA0YiAzOCAgICAgICAgICAgICAJbW92ICAgIDB4MzgoJXJi eCksJWVjeApmZmZmZmZmZjgxMTA5MzJlOgk0OSA4YiA3ZSAzMCAgICAgICAgICAJbW92ICAgIDB4 MzAoJXIxNCksJXJkaQpmZmZmZmZmZjgxMTA5MzMyOgljMSBlOSAwYSAgICAgICAgICAgICAJc2hy ICAgICQweGEsJWVjeApmZmZmZmZmZjgxMTA5MzM1Ogk4MyBlMSAwMSAgICAgICAgICAgICAJYW5k ICAgICQweDEsJWVjeApmZmZmZmZmZjgxMTA5MzM4OgllOCA5NCBkYiBmZiBmZiAgICAgICAJY2Fs bHEgIGZmZmZmZmZmODExMDZlZDEgPHZmc19jcmVhdGU+CmZmZmZmZmZmODExMDkzM2Q6CTQxIDg5 IGM2ICAgICAgICAgICAgIAltb3YgICAgJWVheCwlcjE0ZAoJCQkJICAgbmQtPmZsYWdzICYgTE9P S1VQX0VYQ0wpOwoJCWlmIChlcnJvcikKZmZmZmZmZmY4MTEwOTM0MDoJNDUgODUgZjYgICAgICAg ICAgICAgCXRlc3QgICAlcjE0ZCwlcjE0ZApmZmZmZmZmZjgxMTA5MzQzOgk3NSAxYSAgICAgICAg ICAgICAgICAJam5lICAgIGZmZmZmZmZmODExMDkzNWYgPGRvX2xhc3QuaXNyYS40NCsweDU4Yz4K CQkJZ290byBvdXRfZHB1dDsKCX0Kb3V0X25vX29wZW46CglwYXRoLT5kZW50cnkgPSBkZW50cnk7 CmZmZmZmZmZmODExMDkzNDU6CTRkIDg5IDdjIDI0IDA4ICAgICAgIAltb3YgICAgJXIxNSwweDgo JXIxMikKCXBhdGgtPm1udCA9IG5kLT5wYXRoLm1udDsKZmZmZmZmZmY4MTEwOTM0YToJNDggOGIg MDMgICAgICAgICAgICAgCW1vdiAgICAoJXJieCksJXJheAoJcmV0dXJuIDE7CmZmZmZmZmZmODEx MDkzNGQ6CTQxIGJlIDAxIDAwIDAwIDAwICAgIAltb3YgICAgJDB4MSwlcjE0ZAoJCWlmIChlcnJv cikKCQkJZ290byBvdXRfZHB1dDsKCX0Kb3V0X25vX29wZW46CglwYXRoLT5kZW50cnkgPSBkZW50 cnk7CglwYXRoLT5tbnQgPSBuZC0+cGF0aC5tbnQ7CmZmZmZmZmZmODExMDkzNTM6CTQ5IDg5IDA0 IDI0ICAgICAgICAgIAltb3YgICAgJXJheCwoJXIxMikKZmZmZmZmZmY4MTEwOTM1NzoJZWIgMGUg ICAgICAgICAgICAgICAgCWptcCAgICBmZmZmZmZmZjgxMTA5MzY3IDxkb19sYXN0LmlzcmEuNDQr MHg1OTQ+CgkJICogdGhlIHRpbWUgd2hlbiB0aGUgZmlsZSBpcyBjcmVhdGVkIGFuZCB3aGVuCgkJ ICogYSBwZXJtYW5lbnQgd3JpdGUgY291bnQgaXMgdGFrZW4gdGhyb3VnaAoJCSAqIHRoZSAnc3Ry dWN0IGZpbGUnIGluIGZpbmlzaF9vcGVuKCkuCgkJICovCgkJaWYgKCFnb3Rfd3JpdGUpIHsKCQkJ ZXJyb3IgPSAtRVJPRlM7CmZmZmZmZmZmODExMDkzNTk6CTQxIGJlIGUyIGZmIGZmIGZmICAgIAlt b3YgICAgJDB4ZmZmZmZmZTIsJXIxNGQKCXBhdGgtPmRlbnRyeSA9IGRlbnRyeTsKCXBhdGgtPm1u dCA9IG5kLT5wYXRoLm1udDsKCXJldHVybiAxOwoKb3V0X2RwdXQ6CglkcHV0KGRlbnRyeSk7CmZm ZmZmZmZmODExMDkzNWY6CTRjIDg5IGZmICAgICAgICAgICAgIAltb3YgICAgJXIxNSwlcmRpCmZm ZmZmZmZmODExMDkzNjI6CWU4IDYyIDYzIDAwIDAwICAgICAgIAljYWxscSAgZmZmZmZmZmY4MTEw ZjZjOSA8ZHB1dD4KCQkgKiBkcm9wcGluZyB0aGlzIG9uZSBhbnl3YXkuCgkJICovCgl9CgltdXRl eF9sb2NrKCZkaXItPmRfaW5vZGUtPmlfbXV0ZXgpOwoJZXJyb3IgPSBsb29rdXBfb3BlbihuZCwg cGF0aCwgZmlsZSwgb3AsIGdvdF93cml0ZSwgb3BlbmVkKTsKCW11dGV4X3VubG9jaygmZGlyLT5k X2lub2RlLT5pX211dGV4KTsKZmZmZmZmZmY4MTEwOTM2NzoJNDggOGIgNTUgODAgICAgICAgICAg CW1vdiAgICAtMHg4MCglcmJwKSwlcmR4CmZmZmZmZmZmODExMDkzNmI6CTQ4IDhiIDUyIDMwICAg ICAgICAgIAltb3YgICAgMHgzMCglcmR4KSwlcmR4CmZmZmZmZmZmODExMDkzNmY6CTQ4IDg5IGQ3 ICAgICAgICAgICAgIAltb3YgICAgJXJkeCwlcmRpCmZmZmZmZmZmODExMDkzNzI6CTQ4IDgxIGM3 IGEwIDAwIDAwIDAwIAlhZGQgICAgJDB4YTAsJXJkaQpmZmZmZmZmZjgxMTA5Mzc5OgllOCA0YSA4 NSAyNyAwMCAgICAgICAJY2FsbHEgIGZmZmZmZmZmODEzODE4YzggPG11dGV4X3VubG9jaz4KCglp ZiAoZXJyb3IgPD0gMCkgewpmZmZmZmZmZjgxMTA5MzdlOgk0MSA4MyBmZSAwMCAgICAgICAgICAJ Y21wICAgICQweDAsJXIxNGQKZmZmZmZmZmY4MTEwOTM4MjoJN2YgMzEgICAgICAgICAgICAgICAg CWpnICAgICBmZmZmZmZmZjgxMTA5M2I1IDxkb19sYXN0LmlzcmEuNDQrMHg1ZTI+CgkJaWYgKGVy cm9yKQpmZmZmZmZmZjgxMTA5Mzg0OgkwZiA4NSAyMSAwMyAwMCAwMCAgICAJam5lICAgIGZmZmZm ZmZmODExMDk2YWIgPGRvX2xhc3QuaXNyYS40NCsweDhkOD4KCQkJZ290byBvdXQ7CgoJCWlmICgo Km9wZW5lZCAmIEZJTEVfQ1JFQVRFRCkgfHwKZmZmZmZmZmY4MTEwOTM4YToJNDggOGIgNDUgYTAg ICAgICAgICAgCW1vdiAgICAtMHg2MCglcmJwKSwlcmF4CmZmZmZmZmZmODExMDkzOGU6CWY2IDAw IDAxICAgICAgICAgICAgIAl0ZXN0YiAgJDB4MSwoJXJheCkKZmZmZmZmZmY4MTEwOTM5MToJMGYg ODUgOTMgMDIgMDAgMDAgICAgCWpuZSAgICBmZmZmZmZmZjgxMTA5NjJhIDxkb19sYXN0LmlzcmEu NDQrMHg4NTc+CgkJICAgICFTX0lTUkVHKGZpbGVfaW5vZGUoZmlsZSktPmlfbW9kZSkpCmZmZmZm ZmZmODExMDkzOTc6CTQ5IDhiIDQ1IDIwICAgICAgICAgIAltb3YgICAgMHgyMCglcjEzKSwlcmF4 CgkJCXdpbGxfdHJ1bmNhdGUgPSBmYWxzZTsKZmZmZmZmZmY4MTEwOTM5YjoJOGEgNTUgYWEgICAg ICAgICAgICAgCW1vdiAgICAtMHg1NiglcmJwKSwlZGwKCWlmIChlcnJvciA8PSAwKSB7CgkJaWYg KGVycm9yKQoJCQlnb3RvIG91dDsKCgkJaWYgKCgqb3BlbmVkICYgRklMRV9DUkVBVEVEKSB8fAoJ CSAgICAhU19JU1JFRyhmaWxlX2lub2RlKGZpbGUpLT5pX21vZGUpKQpmZmZmZmZmZjgxMTA5Mzll Ogk4YiAwMCAgICAgICAgICAgICAgICAJbW92ICAgICglcmF4KSwlZWF4CmZmZmZmZmZmODExMDkz YTA6CTY2IDI1IDAwIGYwICAgICAgICAgIAlhbmQgICAgJDB4ZjAwMCwlYXgKCQkJd2lsbF90cnVu Y2F0ZSA9IGZhbHNlOwpmZmZmZmZmZjgxMTA5M2E0Ogk2NiAzZCAwMCA4MCAgICAgICAgICAJY21w ICAgICQweDgwMDAsJWF4CmZmZmZmZmZmODExMDkzYTg6CWIwIDAwICAgICAgICAgICAgICAgIAlt b3YgICAgJDB4MCwlYWwKZmZmZmZmZmY4MTEwOTNhYToJMGYgNDUgZDAgICAgICAgICAgICAgCWNt b3ZuZSAlZWF4LCVlZHgKZmZmZmZmZmY4MTEwOTNhZDoJODggNTUgYWEgICAgICAgICAgICAgCW1v diAgICAlZGwsLTB4NTYoJXJicCkKZmZmZmZmZmY4MTEwOTNiMDoJZTkgNzkgMDIgMDAgMDAgICAg ICAgCWptcHEgICBmZmZmZmZmZjgxMTA5NjJlIDxkb19sYXN0LmlzcmEuNDQrMHg4NWI+CgoJCWF1 ZGl0X2lub2RlKG5hbWUsIGZpbGUtPmZfcGF0aC5kZW50cnksIDApOwoJCWdvdG8gb3BlbmVkOwoJ fQoKCWlmICgqb3BlbmVkICYgRklMRV9DUkVBVEVEKSB7CmZmZmZmZmZmODExMDkzYjU6CTQ4IDhi IDQ1IGEwICAgICAgICAgIAltb3YgICAgLTB4NjAoJXJicCksJXJheApmZmZmZmZmZjgxMTA5M2I5 OglmNiAwMCAwMSAgICAgICAgICAgICAJdGVzdGIgICQweDEsKCVyYXgpCmZmZmZmZmZmODExMDkz YmM6CTc0IDQ3ICAgICAgICAgICAgICAgIAlqZSAgICAgZmZmZmZmZmY4MTEwOTQwNSA8ZG9fbGFz dC5pc3JhLjQ0KzB4NjMyPgoJCS8qIERvbid0IGNoZWNrIGZvciB3cml0ZSBwZXJtaXNzaW9uLCBk b24ndCB0cnVuY2F0ZSAqLwoJCW9wZW5fZmxhZyAmPSB+T19UUlVOQzsKZmZmZmZmZmY4MTEwOTNi ZToJODEgNjUgOTQgZmYgZmQgZmYgZmYgCWFuZGwgICAkMHhmZmZmZmRmZiwtMHg2YyglcmJwKQp9 CgpzdGF0aWMgaW5saW5lIHZvaWQgcGF0aF90b19uYW1laWRhdGEoY29uc3Qgc3RydWN0IHBhdGgg KnBhdGgsCgkJCQkJc3RydWN0IG5hbWVpZGF0YSAqbmQpCnsKCWlmICghKG5kLT5mbGFncyAmIExP T0tVUF9SQ1UpKSB7CmZmZmZmZmZmODExMDkzYzU6CWY2IDQzIDM4IDQwICAgICAgICAgIAl0ZXN0 YiAgJDB4NDAsMHgzOCglcmJ4KQpmZmZmZmZmZjgxMTA5M2M5Ogk3NSAxNyAgICAgICAgICAgICAg ICAJam5lICAgIGZmZmZmZmZmODExMDkzZTIgPGRvX2xhc3QuaXNyYS40NCsweDYwZj4KCQlkcHV0 KG5kLT5wYXRoLmRlbnRyeSk7CmZmZmZmZmZmODExMDkzY2I6CTQ4IDhiIDdiIDA4ICAgICAgICAg IAltb3YgICAgMHg4KCVyYngpLCVyZGkKZmZmZmZmZmY4MTEwOTNjZjoJZTggZjUgNjIgMDAgMDAg ICAgICAgCWNhbGxxICBmZmZmZmZmZjgxMTBmNmM5IDxkcHV0PgoJCWlmIChuZC0+cGF0aC5tbnQg IT0gcGF0aC0+bW50KQpmZmZmZmZmZjgxMTA5M2Q0Ogk0OCA4YiAzYiAgICAgICAgICAgICAJbW92 ICAgICglcmJ4KSwlcmRpCmZmZmZmZmZmODExMDkzZDc6CTQ5IDNiIDNjIDI0ICAgICAgICAgIAlj bXAgICAgKCVyMTIpLCVyZGkKZmZmZmZmZmY4MTEwOTNkYjoJNzQgMDUgICAgICAgICAgICAgICAg CWplICAgICBmZmZmZmZmZjgxMTA5M2UyIDxkb19sYXN0LmlzcmEuNDQrMHg2MGY+CgkJCW1udHB1 dChuZC0+cGF0aC5tbnQpOwpmZmZmZmZmZjgxMTA5M2RkOgllOCBiMSBjYSAwMCAwMCAgICAgICAJ Y2FsbHEgIGZmZmZmZmZmODExMTVlOTMgPG1udHB1dD4KCX0KCW5kLT5wYXRoLm1udCA9IHBhdGgt Pm1udDsKZmZmZmZmZmY4MTEwOTNlMjoJNDkgOGIgMDQgMjQgICAgICAgICAgCW1vdiAgICAoJXIx MiksJXJheAoJfQoKCWlmICgqb3BlbmVkICYgRklMRV9DUkVBVEVEKSB7CgkJLyogRG9uJ3QgY2hl Y2sgZm9yIHdyaXRlIHBlcm1pc3Npb24sIGRvbid0IHRydW5jYXRlICovCgkJb3Blbl9mbGFnICY9 IH5PX1RSVU5DOwoJCXdpbGxfdHJ1bmNhdGUgPSBmYWxzZTsKZmZmZmZmZmY4MTEwOTNlNjoJYzYg NDUgYWEgMDAgICAgICAgICAgCW1vdmIgICAkMHgwLC0weDU2KCVyYnApCgkJYWNjX21vZGUgPSBN QVlfT1BFTjsKZmZmZmZmZmY4MTEwOTNlYToJYzcgODUgN2MgZmYgZmYgZmYgMjAgCW1vdmwgICAk MHgyMCwtMHg4NCglcmJwKQpmZmZmZmZmZjgxMTA5M2YxOgkwMCAwMCAwMCAKCWlmICghKG5kLT5m bGFncyAmIExPT0tVUF9SQ1UpKSB7CgkJZHB1dChuZC0+cGF0aC5kZW50cnkpOwoJCWlmIChuZC0+ cGF0aC5tbnQgIT0gcGF0aC0+bW50KQoJCQltbnRwdXQobmQtPnBhdGgubW50KTsKCX0KCW5kLT5w YXRoLm1udCA9IHBhdGgtPm1udDsKZmZmZmZmZmY4MTEwOTNmNDoJNDggODkgMDMgICAgICAgICAg ICAgCW1vdiAgICAlcmF4LCglcmJ4KQoJbmQtPnBhdGguZGVudHJ5ID0gcGF0aC0+ZGVudHJ5Owpm ZmZmZmZmZjgxMTA5M2Y3Ogk0OSA4YiA0NCAyNCAwOCAgICAgICAJbW92ICAgIDB4OCglcjEyKSwl cmF4CmZmZmZmZmZmODExMDkzZmM6CTQ4IDg5IDQzIDA4ICAgICAgICAgIAltb3YgICAgJXJheCww eDgoJXJieCkKZmZmZmZmZmY4MTEwOTQwMDoJZTkgZDkgMDEgMDAgMDAgICAgICAgCWptcHEgICBm ZmZmZmZmZjgxMTA5NWRlIDxkb19sYXN0LmlzcmEuNDQrMHg4MGI+CgkvKgoJICogSWYgYXRvbWlj X29wZW4oKSBhY3F1aXJlZCB3cml0ZSBhY2Nlc3MgaXQgaXMgZHJvcHBlZCBub3cgZHVlIHRvCgkg KiBwb3NzaWJsZSBtb3VudCBhbmQgc3ltbGluayBmb2xsb3dpbmcgKHRoaXMgbWlnaHQgYmUgb3B0 aW1pemVkIGF3YXkgaWYKCSAqIG5lY2Vzc2FyeS4uLikKCSAqLwoJaWYgKGdvdF93cml0ZSkgewpm ZmZmZmZmZjgxMTA5NDA1Ogk4MCA3ZCBhYiAwMCAgICAgICAgICAJY21wYiAgICQweDAsLTB4NTUo JXJicCkKZmZmZmZmZmY4MTEwOTQwOToJNzQgMDggICAgICAgICAgICAgICAgCWplICAgICBmZmZm ZmZmZjgxMTA5NDEzIDxkb19sYXN0LmlzcmEuNDQrMHg2NDA+CgkJbW50X2Ryb3Bfd3JpdGUobmQt PnBhdGgubW50KTsKZmZmZmZmZmY4MTEwOTQwYjoJNDggOGIgM2IgICAgICAgICAgICAgCW1vdiAg ICAoJXJieCksJXJkaQpmZmZmZmZmZjgxMTA5NDBlOgllOCA3NSBiZiAwMCAwMCAgICAgICAJY2Fs bHEgIGZmZmZmZmZmODExMTUzODggPG1udF9kcm9wX3dyaXRlPgoJCWdvdF93cml0ZSA9IGZhbHNl OwoJfQoKCWVycm9yID0gLUVFWElTVDsKCWlmICgob3Blbl9mbGFnICYgKE9fRVhDTCB8IE9fQ1JF QVQpKSA9PSAoT19FWENMIHwgT19DUkVBVCkpCmZmZmZmZmZmODExMDk0MTM6CThiIDQ1IDk0ICAg ICAgICAgICAgIAltb3YgICAgLTB4NmMoJXJicCksJWVheApmZmZmZmZmZjgxMTA5NDE2OgkyNSBj MCAwMCAwMCAwMCAgICAgICAJYW5kICAgICQweGMwLCVlYXgKZmZmZmZmZmY4MTEwOTQxYjoJM2Qg YzAgMDAgMDAgMDAgICAgICAgCWNtcCAgICAkMHhjMCwlZWF4CmZmZmZmZmZmODExMDk0MjA6CTBm IDg0IGE5IDAyIDAwIDAwICAgIAlqZSAgICAgZmZmZmZmZmY4MTEwOTZjZiA8ZG9fbGFzdC5pc3Jh LjQ0KzB4OGZjPgoJCWdvdG8gZXhpdF9kcHV0OwoKCWVycm9yID0gZm9sbG93X21hbmFnZWQocGF0 aCwgbmQtPmZsYWdzKTsKZmZmZmZmZmY4MTEwOTQyNjoJOGIgNzMgMzggICAgICAgICAgICAgCW1v diAgICAweDM4KCVyYngpLCVlc2kKZmZmZmZmZmY4MTEwOTQyOToJNGMgODkgZTcgICAgICAgICAg ICAgCW1vdiAgICAlcjEyLCVyZGkKZmZmZmZmZmY4MTEwOTQyYzoJZTggZjIgYzAgZmYgZmYgICAg ICAgCWNhbGxxICBmZmZmZmZmZjgxMTA1NTIzIDxmb2xsb3dfbWFuYWdlZD4KCWlmIChlcnJvciA8 IDApCmZmZmZmZmZmODExMDk0MzE6CTgzIGY4IDAwICAgICAgICAgICAgIAljbXAgICAgJDB4MCwl ZWF4CgoJZXJyb3IgPSAtRUVYSVNUOwoJaWYgKChvcGVuX2ZsYWcgJiAoT19FWENMIHwgT19DUkVB VCkpID09IChPX0VYQ0wgfCBPX0NSRUFUKSkKCQlnb3RvIGV4aXRfZHB1dDsKCgllcnJvciA9IGZv bGxvd19tYW5hZ2VkKHBhdGgsIG5kLT5mbGFncyk7CmZmZmZmZmZmODExMDk0MzQ6CTQxIDg5IGM2 ICAgICAgICAgICAgIAltb3YgICAgJWVheCwlcjE0ZAoJaWYgKGVycm9yIDwgMCkKZmZmZmZmZmY4 MTEwOTQzNzoJMGYgOGMgOTggMDIgMDAgMDAgICAgCWpsICAgICBmZmZmZmZmZjgxMTA5NmQ1IDxk b19sYXN0LmlzcmEuNDQrMHg5MDI+CgkJZ290byBleGl0X2RwdXQ7CgoJaWYgKGVycm9yKQpmZmZm ZmZmZjgxMTA5NDNkOgk3NCAwNyAgICAgICAgICAgICAgICAJamUgICAgIGZmZmZmZmZmODExMDk0 NDYgPGRvX2xhc3QuaXNyYS40NCsweDY3Mz4KCQluZC0+ZmxhZ3MgfD0gTE9PS1VQX0pVTVBFRDsK ZmZmZmZmZmY4MTEwOTQzZjoJODEgNGIgMzggMDAgMTAgMDAgMDAgCW9ybCAgICAkMHgxMDAwLDB4 MzgoJXJieCkKCglCVUdfT04obmQtPmZsYWdzICYgTE9PS1VQX1JDVSk7CmZmZmZmZmZmODExMDk0 NDY6CWY2IDQzIDM4IDQwICAgICAgICAgIAl0ZXN0YiAgJDB4NDAsMHgzOCglcmJ4KQpmZmZmZmZm ZjgxMTA5NDRhOgk3NCAwMiAgICAgICAgICAgICAgICAJamUgICAgIGZmZmZmZmZmODExMDk0NGUg PGRvX2xhc3QuaXNyYS40NCsweDY3Yj4KZmZmZmZmZmY4MTEwOTQ0YzoJMGYgMGIgICAgICAgICAg ICAgICAgCXVkMiAgICAKCWlub2RlID0gcGF0aC0+ZGVudHJ5LT5kX2lub2RlOwpmZmZmZmZmZjgx MTA5NDRlOgk0OSA4YiA0NCAyNCAwOCAgICAgICAJbW92ICAgIDB4OCglcjEyKSwlcmF4CmZmZmZm ZmZmODExMDk0NTM6CTQ4IDhiIDQwIDMwICAgICAgICAgIAltb3YgICAgMHgzMCglcmF4KSwlcmF4 CmZmZmZmZmZmODExMDk0NTc6CTQ4IDg5IDQ1IGI4ICAgICAgICAgIAltb3YgICAgJXJheCwtMHg0 OCglcmJwKQpmaW5pc2hfbG9va3VwOgoJLyogd2UgX2Nhbl8gYmUgaW4gUkNVIG1vZGUgaGVyZSAq LwoJZXJyb3IgPSAtRU5PRU5UOwoJaWYgKGRfaXNfbmVnYXRpdmUocGF0aC0+ZGVudHJ5KSkgewpm ZmZmZmZmZjgxMTA5NDViOgk0OSA4YiA3NCAyNCAwOCAgICAgICAJbW92ICAgIDB4OCglcjEyKSwl cnNpCmZmZmZmZmZmODExMDk0NjA6CThiIDQzIDM4ICAgICAgICAgICAgIAltb3YgICAgMHgzOCgl cmJ4KSwlZWF4CmZmZmZmZmZmODExMDk0NjM6CThiIDE2ICAgICAgICAgICAgICAgIAltb3YgICAg KCVyc2kpLCVlZHgKZmZmZmZmZmY4MTEwOTQ2NToJODEgZTIgMDAgMDAgNzAgMDAgICAgCWFuZCAg ICAkMHg3MDAwMDAsJWVkeApmZmZmZmZmZjgxMTA5NDZiOgk3NSAzNiAgICAgICAgICAgICAgICAJ am5lICAgIGZmZmZmZmZmODExMDk0YTMgPGRvX2xhc3QuaXNyYS40NCsweDZkMD4KfQoKc3RhdGlj IGlubGluZSB2b2lkIHBhdGhfdG9fbmFtZWlkYXRhKGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLAoJ CQkJCXN0cnVjdCBuYW1laWRhdGEgKm5kKQp7CglpZiAoIShuZC0+ZmxhZ3MgJiBMT09LVVBfUkNV KSkgewpmZmZmZmZmZjgxMTA5NDZkOglhOCA0MCAgICAgICAgICAgICAgICAJdGVzdCAgICQweDQw LCVhbApmZmZmZmZmZjgxMTA5NDZmOgk3NSAxNyAgICAgICAgICAgICAgICAJam5lICAgIGZmZmZm ZmZmODExMDk0ODggPGRvX2xhc3QuaXNyYS40NCsweDZiNT4KCQlkcHV0KG5kLT5wYXRoLmRlbnRy eSk7CmZmZmZmZmZmODExMDk0NzE6CTQ4IDhiIDdiIDA4ICAgICAgICAgIAltb3YgICAgMHg4KCVy YngpLCVyZGkKZmZmZmZmZmY4MTEwOTQ3NToJZTggNGYgNjIgMDAgMDAgICAgICAgCWNhbGxxICBm ZmZmZmZmZjgxMTBmNmM5IDxkcHV0PgoJCWlmIChuZC0+cGF0aC5tbnQgIT0gcGF0aC0+bW50KQpm ZmZmZmZmZjgxMTA5NDdhOgk0OCA4YiAzYiAgICAgICAgICAgICAJbW92ICAgICglcmJ4KSwlcmRp CmZmZmZmZmZmODExMDk0N2Q6CTQ5IDNiIDNjIDI0ICAgICAgICAgIAljbXAgICAgKCVyMTIpLCVy ZGkKZmZmZmZmZmY4MTEwOTQ4MToJNzQgMDUgICAgICAgICAgICAgICAgCWplICAgICBmZmZmZmZm ZjgxMTA5NDg4IDxkb19sYXN0LmlzcmEuNDQrMHg2YjU+CgkJCW1udHB1dChuZC0+cGF0aC5tbnQp OwpmZmZmZmZmZjgxMTA5NDgzOgllOCAwYiBjYSAwMCAwMCAgICAgICAJY2FsbHEgIGZmZmZmZmZm ODExMTVlOTMgPG1udHB1dD4KCX0KCW5kLT5wYXRoLm1udCA9IHBhdGgtPm1udDsKZmZmZmZmZmY4 MTEwOTQ4ODoJNDkgOGIgMDQgMjQgICAgICAgICAgCW1vdiAgICAoJXIxMiksJXJheAoKCUJVR19P TihuZC0+ZmxhZ3MgJiBMT09LVVBfUkNVKTsKCWlub2RlID0gcGF0aC0+ZGVudHJ5LT5kX2lub2Rl OwpmaW5pc2hfbG9va3VwOgoJLyogd2UgX2Nhbl8gYmUgaW4gUkNVIG1vZGUgaGVyZSAqLwoJZXJy b3IgPSAtRU5PRU5UOwpmZmZmZmZmZjgxMTA5NDhjOgk0MSBiZSBmZSBmZiBmZiBmZiAgICAJbW92 ICAgICQweGZmZmZmZmZlLCVyMTRkCglpZiAoIShuZC0+ZmxhZ3MgJiBMT09LVVBfUkNVKSkgewoJ CWRwdXQobmQtPnBhdGguZGVudHJ5KTsKCQlpZiAobmQtPnBhdGgubW50ICE9IHBhdGgtPm1udCkK CQkJbW50cHV0KG5kLT5wYXRoLm1udCk7Cgl9CgluZC0+cGF0aC5tbnQgPSBwYXRoLT5tbnQ7CmZm ZmZmZmZmODExMDk0OTI6CTQ4IDg5IDAzICAgICAgICAgICAgIAltb3YgICAgJXJheCwoJXJieCkK CW5kLT5wYXRoLmRlbnRyeSA9IHBhdGgtPmRlbnRyeTsKZmZmZmZmZmY4MTEwOTQ5NToJNDkgOGIg NDQgMjQgMDggICAgICAgCW1vdiAgICAweDgoJXIxMiksJXJheApmZmZmZmZmZjgxMTA5NDlhOgk0 OCA4OSA0MyAwOCAgICAgICAgICAJbW92ICAgICVyYXgsMHg4KCVyYngpCmZmZmZmZmZmODExMDk0 OWU6CWU5IDE2IDAyIDAwIDAwICAgICAgIAlqbXBxICAgZmZmZmZmZmY4MTEwOTZiOSA8ZG9fbGFz dC5pc3JhLjQ0KzB4OGU2PgogKiBzbyB3ZSBrZWVwIGEgY2FjaGUgb2YgIm5vLCB0aGlzIGRvZXNu J3QgbmVlZCBmb2xsb3dfbGluayIKICogZm9yIHRoZSBjb21tb24gY2FzZS4KICovCnN0YXRpYyBp bmxpbmUgaW50IHNob3VsZF9mb2xsb3dfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGludCBm b2xsb3cpCnsKCXJldHVybiB1bmxpa2VseShkX2lzX3N5bWxpbmsoZGVudHJ5KSkgPyBmb2xsb3cg OiAwOwpmZmZmZmZmZjgxMTA5NGEzOgk4MSBmYSAwMCAwMCAzMCAwMCAgICAJY21wICAgICQweDMw MDAwMCwlZWR4CmZmZmZmZmZmODExMDk0YTk6CTc1IDM3ICAgICAgICAgICAgICAgIAlqbmUgICAg ZmZmZmZmZmY4MTEwOTRlMiA8ZG9fbGFzdC5pc3JhLjQ0KzB4NzBmPgoJaWYgKGRfaXNfbmVnYXRp dmUocGF0aC0+ZGVudHJ5KSkgewoJCXBhdGhfdG9fbmFtZWlkYXRhKHBhdGgsIG5kKTsKCQlnb3Rv IG91dDsKCX0KCglpZiAoc2hvdWxkX2ZvbGxvd19saW5rKHBhdGgtPmRlbnRyeSwgIXN5bWxpbmtf b2spKSB7CmZmZmZmZmZmODExMDk0YWI6CTgwIDdkIDkzIDAwICAgICAgICAgIAljbXBiICAgJDB4 MCwtMHg2ZCglcmJwKQpmZmZmZmZmZjgxMTA5NGFmOgk3NSAzMSAgICAgICAgICAgICAgICAJam5l ICAgIGZmZmZmZmZmODExMDk0ZTIgPGRvX2xhc3QuaXNyYS40NCsweDcwZj4KCQlpZiAobmQtPmZs YWdzICYgTE9PS1VQX1JDVSkgewpmZmZmZmZmZjgxMTA5NGIxOglhOCA0MCAgICAgICAgICAgICAg ICAJdGVzdCAgICQweDQwLCVhbApmZmZmZmZmZjgxMTA5NGIzOgk3NSAxYSAgICAgICAgICAgICAg ICAJam5lICAgIGZmZmZmZmZmODExMDk0Y2YgPGRvX2xhc3QuaXNyYS40NCsweDZmYz4KCQkJaWYg KHVubGlrZWx5KHVubGF6eV93YWxrKG5kLCBwYXRoLT5kZW50cnkpKSkgewoJCQkJZXJyb3IgPSAt RUNISUxEOwoJCQkJZ290byBvdXQ7CgkJCX0KCQl9CgkJQlVHX09OKGlub2RlICE9IHBhdGgtPmRl bnRyeS0+ZF9pbm9kZSk7CmZmZmZmZmZmODExMDk0YjU6CTQ5IDhiIDQ0IDI0IDA4ICAgICAgIAlt b3YgICAgMHg4KCVyMTIpLCVyYXgKZmZmZmZmZmY4MTEwOTRiYToJNDggOGIgNTAgMzAgICAgICAg ICAgCW1vdiAgICAweDMwKCVyYXgpLCVyZHgKZmZmZmZmZmY4MTEwOTRiZToJNDggMzkgNTUgYjgg ICAgICAgICAgCWNtcCAgICAlcmR4LC0weDQ4KCVyYnApCmZmZmZmZmZmODExMDk0YzI6CTc1IDFj ICAgICAgICAgICAgICAgIAlqbmUgICAgZmZmZmZmZmY4MTEwOTRlMCA8ZG9fbGFzdC5pc3JhLjQ0 KzB4NzBkPgoJCXJldHVybiAxOwpmZmZmZmZmZjgxMTA5NGM0Ogk0MSBiZSAwMSAwMCAwMCAwMCAg ICAJbW92ICAgICQweDEsJXIxNGQKZmZmZmZmZmY4MTEwOTRjYToJZTkgZGMgMDIgMDAgMDAgICAg ICAgCWptcHEgICBmZmZmZmZmZjgxMTA5N2FiIDxkb19sYXN0LmlzcmEuNDQrMHg5ZDg+CgkJZ290 byBvdXQ7Cgl9CgoJaWYgKHNob3VsZF9mb2xsb3dfbGluayhwYXRoLT5kZW50cnksICFzeW1saW5r X29rKSkgewoJCWlmIChuZC0+ZmxhZ3MgJiBMT09LVVBfUkNVKSB7CgkJCWlmICh1bmxpa2VseSh1 bmxhenlfd2FsayhuZCwgcGF0aC0+ZGVudHJ5KSkpIHsKZmZmZmZmZmY4MTEwOTRjZjoJNDggODkg ZGYgICAgICAgICAgICAgCW1vdiAgICAlcmJ4LCVyZGkKZmZmZmZmZmY4MTEwOTRkMjoJZTggNDgg YmYgZmYgZmYgICAgICAgCWNhbGxxICBmZmZmZmZmZjgxMTA1NDFmIDx1bmxhenlfd2Fsaz4KZmZm ZmZmZmY4MTEwOTRkNzoJODUgYzAgICAgICAgICAgICAgICAgCXRlc3QgICAlZWF4LCVlYXgKZmZm ZmZmZmY4MTEwOTRkOToJNzQgZGEgICAgICAgICAgICAgICAgCWplICAgICBmZmZmZmZmZjgxMTA5 NGI1IDxkb19sYXN0LmlzcmEuNDQrMHg2ZTI+CmZmZmZmZmZmODExMDk0ZGI6CWU5IGMwIDAyIDAw IDAwICAgICAgIAlqbXBxICAgZmZmZmZmZmY4MTEwOTdhMCA8ZG9fbGFzdC5pc3JhLjQ0KzB4OWNk PgoJCQkJZXJyb3IgPSAtRUNISUxEOwoJCQkJZ290byBvdXQ7CgkJCX0KCQl9CgkJQlVHX09OKGlu b2RlICE9IHBhdGgtPmRlbnRyeS0+ZF9pbm9kZSk7CmZmZmZmZmZmODExMDk0ZTA6CTBmIDBiICAg ICAgICAgICAgICAgIAl1ZDIgICAgCgkJcmV0dXJuIDE7Cgl9CgoJaWYgKChuZC0+ZmxhZ3MgJiBM T09LVVBfUkNVKSB8fCBuZC0+cGF0aC5tbnQgIT0gcGF0aC0+bW50KSB7CmZmZmZmZmZmODExMDk0 ZTI6CWE4IDQwICAgICAgICAgICAgICAgIAl0ZXN0ICAgJDB4NDAsJWFsCmZmZmZmZmZmODExMDk0 ZTQ6CTc1IDIwICAgICAgICAgICAgICAgIAlqbmUgICAgZmZmZmZmZmY4MTEwOTUwNiA8ZG9fbGFz dC5pc3JhLjQ0KzB4NzMzPgpmZmZmZmZmZjgxMTA5NGU2Ogk0OCA4YiAwMyAgICAgICAgICAgICAJ bW92ICAgICglcmJ4KSwlcmF4CmZmZmZmZmZmODExMDk0ZTk6CTQ5IDNiIDA0IDI0ICAgICAgICAg IAljbXAgICAgKCVyMTIpLCVyYXgKZmZmZmZmZmY4MTEwOTRlZDoJNDggOGIgN2IgMDggICAgICAg ICAgCW1vdiAgICAweDgoJXJieCksJXJkaQpmZmZmZmZmZjgxMTA5NGYxOgk3NCAxYyAgICAgICAg ICAgICAgICAJamUgICAgIGZmZmZmZmZmODExMDk1MGYgPGRvX2xhc3QuaXNyYS40NCsweDczYz4K CnN0YXRpYyBpbmxpbmUgdm9pZCBwYXRoX3RvX25hbWVpZGF0YShjb25zdCBzdHJ1Y3QgcGF0aCAq cGF0aCwKCQkJCQlzdHJ1Y3QgbmFtZWlkYXRhICpuZCkKewoJaWYgKCEobmQtPmZsYWdzICYgTE9P S1VQX1JDVSkpIHsKCQlkcHV0KG5kLT5wYXRoLmRlbnRyeSk7CmZmZmZmZmZmODExMDk0ZjM6CWU4 IGQxIDYxIDAwIDAwICAgICAgIAljYWxscSAgZmZmZmZmZmY4MTEwZjZjOSA8ZHB1dD4KCQlpZiAo bmQtPnBhdGgubW50ICE9IHBhdGgtPm1udCkKZmZmZmZmZmY4MTEwOTRmODoJNDggOGIgM2IgICAg ICAgICAgICAgCW1vdiAgICAoJXJieCksJXJkaQpmZmZmZmZmZjgxMTA5NGZiOgk0OSAzYiAzYyAy NCAgICAgICAgICAJY21wICAgICglcjEyKSwlcmRpCmZmZmZmZmZmODExMDk0ZmY6CTc0IDA1ICAg ICAgICAgICAgICAgIAlqZSAgICAgZmZmZmZmZmY4MTEwOTUwNiA8ZG9fbGFzdC5pc3JhLjQ0KzB4 NzMzPgoJCQltbnRwdXQobmQtPnBhdGgubW50KTsKZmZmZmZmZmY4MTEwOTUwMToJZTggOGQgYzkg MDAgMDAgICAgICAgCWNhbGxxICBmZmZmZmZmZjgxMTE1ZTkzIDxtbnRwdXQ+Cgl9CgluZC0+cGF0 aC5tbnQgPSBwYXRoLT5tbnQ7CmZmZmZmZmZmODExMDk1MDY6CTQ5IDhiIDA0IDI0ICAgICAgICAg IAltb3YgICAgKCVyMTIpLCVyYXgKZmZmZmZmZmY4MTEwOTUwYToJNDggODkgMDMgICAgICAgICAg ICAgCW1vdiAgICAlcmF4LCglcmJ4KQpmZmZmZmZmZjgxMTA5NTBkOgllYiAxMCAgICAgICAgICAg ICAgICAJam1wICAgIGZmZmZmZmZmODExMDk1MWYgPGRvX2xhc3QuaXNyYS40NCsweDc0Yz4KCX0K CglpZiAoKG5kLT5mbGFncyAmIExPT0tVUF9SQ1UpIHx8IG5kLT5wYXRoLm1udCAhPSBwYXRoLT5t bnQpIHsKCQlwYXRoX3RvX25hbWVpZGF0YShwYXRoLCBuZCk7Cgl9IGVsc2UgewoJCXNhdmVfcGFy ZW50LmRlbnRyeSA9IG5kLT5wYXRoLmRlbnRyeTsKZmZmZmZmZmY4MTEwOTUwZjoJNDggODkgN2Qg YzggICAgICAgICAgCW1vdiAgICAlcmRpLC0weDM4KCVyYnApCgkJc2F2ZV9wYXJlbnQubW50ID0g bW50Z2V0KHBhdGgtPm1udCk7CmZmZmZmZmZmODExMDk1MTM6CTQ4IDg5IGM3ICAgICAgICAgICAg IAltb3YgICAgJXJheCwlcmRpCmZmZmZmZmZmODExMDk1MTY6CWU4IGQwIGI5IDAwIDAwICAgICAg IAljYWxscSAgZmZmZmZmZmY4MTExNGVlYiA8bW50Z2V0PgpmZmZmZmZmZjgxMTA5NTFiOgk0OCA4 OSA0NSBjMCAgICAgICAgICAJbW92ICAgICVyYXgsLTB4NDAoJXJicCkKCQluZC0+cGF0aC5kZW50 cnkgPSBwYXRoLT5kZW50cnk7CmZmZmZmZmZmODExMDk1MWY6CTQ5IDhiIDQ0IDI0IDA4ICAgICAg IAltb3YgICAgMHg4KCVyMTIpLCVyYXgKZmZmZmZmZmY4MTEwOTUyNDoJNDggODkgNDMgMDggICAg ICAgICAgCW1vdiAgICAlcmF4LDB4OCglcmJ4KQoKCX0KCW5kLT5pbm9kZSA9IGlub2RlOwpmZmZm ZmZmZjgxMTA5NTI4Ogk0OCA4YiA0NSBiOCAgICAgICAgICAJbW92ICAgIC0weDQ4KCVyYnApLCVy YXgKZmZmZmZmZmY4MTEwOTUyYzoJNDggODkgNDMgMzAgICAgICAgICAgCW1vdiAgICAlcmF4LDB4 MzAoJXJieCkKCS8qIFdoeSB0aGlzLCB5b3UgYXNrPyAgX05vd18gd2UgbWlnaHQgaGF2ZSBncm93 biBMT09LVVBfSlVNUEVELi4uICovCmZpbmlzaF9vcGVuOgoJZXJyb3IgPSBjb21wbGV0ZV93YWxr KG5kKTsKZmZmZmZmZmY4MTEwOTUzMDoJNDggODkgZGYgICAgICAgICAgICAgCW1vdiAgICAlcmJ4 LCVyZGkKZmZmZmZmZmY4MTEwOTUzMzoJZTggNzkgYmIgZmYgZmYgICAgICAgCWNhbGxxICBmZmZm ZmZmZjgxMTA1MGIxIDxjb21wbGV0ZV93YWxrPgoJaWYgKGVycm9yKSB7CmZmZmZmZmZmODExMDk1 Mzg6CTg1IGMwICAgICAgICAgICAgICAgIAl0ZXN0ICAgJWVheCwlZWF4CgoJfQoJbmQtPmlub2Rl ID0gaW5vZGU7CgkvKiBXaHkgdGhpcywgeW91IGFzaz8gIF9Ob3dfIHdlIG1pZ2h0IGhhdmUgZ3Jv d24gTE9PS1VQX0pVTVBFRC4uLiAqLwpmaW5pc2hfb3BlbjoKCWVycm9yID0gY29tcGxldGVfd2Fs ayhuZCk7CmZmZmZmZmZmODExMDk1M2E6CTQxIDg5IGM2ICAgICAgICAgICAgIAltb3YgICAgJWVh eCwlcjE0ZAoJaWYgKGVycm9yKSB7CmZmZmZmZmZmODExMDk1M2Q6CTc0IDBlICAgICAgICAgICAg ICAgIAlqZSAgICAgZmZmZmZmZmY4MTEwOTU0ZCA8ZG9fbGFzdC5pc3JhLjQ0KzB4NzdhPgoJCXBh dGhfcHV0KCZzYXZlX3BhcmVudCk7CmZmZmZmZmZmODExMDk1M2Y6CTQ4IDhkIDdkIGMwICAgICAg ICAgIAlsZWEgICAgLTB4NDAoJXJicCksJXJkaQpmZmZmZmZmZjgxMTA5NTQzOgllOCAxNSBiYiBm ZiBmZiAgICAgICAJY2FsbHEgIGZmZmZmZmZmODExMDUwNWQgPHBhdGhfcHV0PgpmZmZmZmZmZjgx MTA5NTQ4OgllOSA1ZSAwMiAwMCAwMCAgICAgICAJam1wcSAgIGZmZmZmZmZmODExMDk3YWIgPGRv X2xhc3QuaXNyYS40NCsweDlkOD4KCQlyZXR1cm4gZXJyb3I7Cgl9CglhdWRpdF9pbm9kZShuYW1l LCBuZC0+cGF0aC5kZW50cnksIDApOwoJZXJyb3IgPSAtRUlTRElSOwoJaWYgKChvcGVuX2ZsYWcg JiBPX0NSRUFUKSAmJiBkX2lzX2RpcihuZC0+cGF0aC5kZW50cnkpKQpmZmZmZmZmZjgxMTA5NTRk OglmNiA0NSA5NCA0MCAgICAgICAgICAJdGVzdGIgICQweDQwLC0weDZjKCVyYnApCmZmZmZmZmZm ODExMDk1NTE6CTc0IDJjICAgICAgICAgICAgICAgIAlqZSAgICAgZmZmZmZmZmY4MTEwOTU3ZiA8 ZG9fbGFzdC5pc3JhLjQ0KzB4N2FjPgpjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBwYWdl X3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9ucyA9IHsKCS5yZWFkbGluawk9IGdlbmVyaWNfcmVhZGxp bmssCgkuZm9sbG93X2xpbmsJPSBwYWdlX2ZvbGxvd19saW5rX2xpZ2h0LAoJLnB1dF9saW5rCT0g cGFnZV9wdXRfbGluaywKfTsKRVhQT1JUX1NZTUJPTChwYWdlX3N5bWxpbmtfaW5vZGVfb3BlcmF0 aW9ucyk7CmZmZmZmZmZmODExMDk1NTM6CTQ4IDhiIDQzIDA4ICAgICAgICAgIAltb3YgICAgMHg4 KCVyYngpLCVyYXgKCXNwaW5fdW5sb2NrKCZkZW50cnktPmRfbG9jayk7Cn0KCnN0YXRpYyBpbmxp bmUgdW5zaWduZWQgX19kX2VudHJ5X3R5cGUoY29uc3Qgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQp7 CglyZXR1cm4gZGVudHJ5LT5kX2ZsYWdzICYgRENBQ0hFX0VOVFJZX1RZUEU7CmZmZmZmZmZmODEx MDk1NTc6CThiIDAwICAgICAgICAgICAgICAgIAltb3YgICAgKCVyYXgpLCVlYXgKZmZmZmZmZmY4 MTEwOTU1OToJMjUgMDAgMDAgNzAgMDAgICAgICAgCWFuZCAgICAkMHg3MDAwMDAsJWVheAoJcmV0 dXJuIF9fZF9lbnRyeV90eXBlKGRlbnRyeSkgPT0gRENBQ0hFX0FVVE9ESVJfVFlQRTsKfQoKc3Rh dGljIGlubGluZSBib29sIGRfaXNfZGlyKGNvbnN0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKewoJ cmV0dXJuIGRfY2FuX2xvb2t1cChkZW50cnkpIHx8IGRfaXNfYXV0b2RpcihkZW50cnkpOwpmZmZm ZmZmZjgxMTA5NTVlOgkzZCAwMCAwMCAxMCAwMCAgICAgICAJY21wICAgICQweDEwMDAwMCwlZWF4 CmZmZmZmZmZmODExMDk1NjM6CTc0IDBkICAgICAgICAgICAgICAgIAlqZSAgICAgZmZmZmZmZmY4 MTEwOTU3MiA8ZG9fbGFzdC5pc3JhLjQ0KzB4NzlmPgpmZmZmZmZmZjgxMTA5NTY1OgkzZCAwMCAw MCAyMCAwMCAgICAgICAJY21wICAgICQweDIwMDAwMCwlZWF4CmZmZmZmZmZmODExMDk1NmE6CTBm IDk0IGMwICAgICAgICAgICAgIAlzZXRlICAgJWFsCmZmZmZmZmZmODExMDk1NmQ6CTBmIGI2IGMw ICAgICAgICAgICAgIAltb3Z6YmwgJWFsLCVlYXgKZmZmZmZmZmY4MTEwOTU3MDoJZWIgMDUgICAg ICAgICAgICAgICAgCWptcCAgICBmZmZmZmZmZjgxMTA5NTc3IDxkb19sYXN0LmlzcmEuNDQrMHg3 YTQ+CmZmZmZmZmZmODExMDk1NzI6CWI4IDAxIDAwIDAwIDAwICAgICAgIAltb3YgICAgJDB4MSwl ZWF4CgkJcGF0aF9wdXQoJnNhdmVfcGFyZW50KTsKCQlyZXR1cm4gZXJyb3I7Cgl9CglhdWRpdF9p bm9kZShuYW1lLCBuZC0+cGF0aC5kZW50cnksIDApOwoJZXJyb3IgPSAtRUlTRElSOwoJaWYgKChv cGVuX2ZsYWcgJiBPX0NSRUFUKSAmJiBkX2lzX2RpcihuZC0+cGF0aC5kZW50cnkpKQpmZmZmZmZm ZjgxMTA5NTc3Ogk4NSBjMCAgICAgICAgICAgICAgICAJdGVzdCAgICVlYXgsJWVheApmZmZmZmZm ZjgxMTA5NTc5OgkwZiA4NSA3MiBmOSBmZiBmZiAgICAJam5lICAgIGZmZmZmZmZmODExMDhlZjEg PGRvX2xhc3QuaXNyYS40NCsweDExZT4KCQlnb3RvIG91dDsKCWVycm9yID0gLUVOT1RESVI7Cglp ZiAoKG5kLT5mbGFncyAmIExPT0tVUF9ESVJFQ1RPUlkpICYmICFkX2Nhbl9sb29rdXAobmQtPnBh dGguZGVudHJ5KSkKZmZmZmZmZmY4MTEwOTU3ZjoJZjYgNDMgMzggMDIgICAgICAgICAgCXRlc3Ri ICAkMHgyLDB4MzgoJXJieCkKZmZmZmZmZmY4MTEwOTU4MzoJNzQgMWMgICAgICAgICAgICAgICAg CWplICAgICBmZmZmZmZmZjgxMTA5NWExIDxkb19sYXN0LmlzcmEuNDQrMHg3Y2U+CmNvbnN0IHN0 cnVjdCBpbm9kZV9vcGVyYXRpb25zIHBhZ2Vfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zID0gewoJ LnJlYWRsaW5rCT0gZ2VuZXJpY19yZWFkbGluaywKCS5mb2xsb3dfbGluawk9IHBhZ2VfZm9sbG93 X2xpbmtfbGlnaHQsCgkucHV0X2xpbmsJPSBwYWdlX3B1dF9saW5rLAp9OwpFWFBPUlRfU1lNQk9M KHBhZ2Vfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zKTsKZmZmZmZmZmY4MTEwOTU4NToJNDggOGIg NDMgMDggICAgICAgICAgCW1vdiAgICAweDgoJXJieCksJXJheAoJfQoJYXVkaXRfaW5vZGUobmFt ZSwgbmQtPnBhdGguZGVudHJ5LCAwKTsKCWVycm9yID0gLUVJU0RJUjsKCWlmICgob3Blbl9mbGFn ICYgT19DUkVBVCkgJiYgZF9pc19kaXIobmQtPnBhdGguZGVudHJ5KSkKCQlnb3RvIG91dDsKCWVy cm9yID0gLUVOT1RESVI7CmZmZmZmZmZmODExMDk1ODk6CTQxIGJlIGVjIGZmIGZmIGZmICAgIAlt b3YgICAgJDB4ZmZmZmZmZWMsJXIxNGQKCXNwaW5fdW5sb2NrKCZkZW50cnktPmRfbG9jayk7Cn0K CnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgX19kX2VudHJ5X3R5cGUoY29uc3Qgc3RydWN0IGRlbnRy eSAqZGVudHJ5KQp7CglyZXR1cm4gZGVudHJ5LT5kX2ZsYWdzICYgRENBQ0hFX0VOVFJZX1RZUEU7 CmZmZmZmZmZmODExMDk1OGY6CThiIDAwICAgICAgICAgICAgICAgIAltb3YgICAgKCVyYXgpLCVl YXgKZmZmZmZmZmY4MTEwOTU5MToJMjUgMDAgMDAgNzAgMDAgICAgICAgCWFuZCAgICAkMHg3MDAw MDAsJWVheAoJaWYgKChuZC0+ZmxhZ3MgJiBMT09LVVBfRElSRUNUT1JZKSAmJiAhZF9jYW5fbG9v a3VwKG5kLT5wYXRoLmRlbnRyeSkpCmZmZmZmZmZmODExMDk1OTY6CTNkIDAwIDAwIDEwIDAwICAg ICAgIAljbXAgICAgJDB4MTAwMDAwLCVlYXgKZmZmZmZmZmY4MTEwOTU5YjoJMGYgODUgMTggMDEg MDAgMDAgICAgCWpuZSAgICBmZmZmZmZmZjgxMTA5NmI5IDxkb19sYXN0LmlzcmEuNDQrMHg4ZTY+ CgkJZ290byBvdXQ7CglpZiAoIVNfSVNSRUcobmQtPmlub2RlLT5pX21vZGUpKQpmZmZmZmZmZjgx MTA5NWExOgk0OCA4YiA0MyAzMCAgICAgICAgICAJbW92ICAgIDB4MzAoJXJieCksJXJheApmZmZm ZmZmZjgxMTA5NWE1Ogk4YiAwMCAgICAgICAgICAgICAgICAJbW92ICAgICglcmF4KSwlZWF4CmZm ZmZmZmZmODExMDk1YTc6CTY2IDI1IDAwIGYwICAgICAgICAgIAlhbmQgICAgJDB4ZjAwMCwlYXgK ZmZmZmZmZmY4MTEwOTVhYjoJNjYgM2QgMDAgODAgICAgICAgICAgCWNtcCAgICAkMHg4MDAwLCVh eApmZmZmZmZmZjgxMTA5NWFmOgk3NSAxZiAgICAgICAgICAgICAgICAJam5lICAgIGZmZmZmZmZm ODExMDk1ZDAgPGRvX2xhc3QuaXNyYS40NCsweDdmZD4KCQl3aWxsX3RydW5jYXRlID0gZmFsc2U7 CgoJaWYgKHdpbGxfdHJ1bmNhdGUpIHsKZmZmZmZmZmY4MTEwOTViMToJODAgN2QgYWEgMDAgICAg ICAgICAgCWNtcGIgICAkMHgwLC0weDU2KCVyYnApCmZmZmZmZmZmODExMDk1YjU6CTc0IDIzICAg ICAgICAgICAgICAgIAlqZSAgICAgZmZmZmZmZmY4MTEwOTVkYSA8ZG9fbGFzdC5pc3JhLjQ0KzB4 ODA3PgoJCWVycm9yID0gbW50X3dhbnRfd3JpdGUobmQtPnBhdGgubW50KTsKZmZmZmZmZmY4MTEw OTViNzoJNDggOGIgM2IgICAgICAgICAgICAgCW1vdiAgICAoJXJieCksJXJkaQpmZmZmZmZmZjgx MTA5NWJhOgllOCA4OSBjYiAwMCAwMCAgICAgICAJY2FsbHEgIGZmZmZmZmZmODExMTYxNDggPG1u dF93YW50X3dyaXRlPgoJCWlmIChlcnJvcikKZmZmZmZmZmY4MTEwOTViZjoJODUgYzAgICAgICAg ICAgICAgICAgCXRlc3QgICAlZWF4LCVlYXgKCQlnb3RvIG91dDsKCWlmICghU19JU1JFRyhuZC0+ aW5vZGUtPmlfbW9kZSkpCgkJd2lsbF90cnVuY2F0ZSA9IGZhbHNlOwoKCWlmICh3aWxsX3RydW5j YXRlKSB7CgkJZXJyb3IgPSBtbnRfd2FudF93cml0ZShuZC0+cGF0aC5tbnQpOwpmZmZmZmZmZjgx MTA5NWMxOgk0MSA4OSBjNiAgICAgICAgICAgICAJbW92ICAgICVlYXgsJXIxNGQKCQlpZiAoZXJy b3IpCmZmZmZmZmZmODExMDk1YzQ6CTBmIDg1IGVmIDAwIDAwIDAwICAgIAlqbmUgICAgZmZmZmZm ZmY4MTEwOTZiOSA8ZG9fbGFzdC5pc3JhLjQ0KzB4OGU2PgoJCQlnb3RvIG91dDsKCQlnb3Rfd3Jp dGUgPSB0cnVlOwpmZmZmZmZmZjgxMTA5NWNhOgljNiA0NSBhYiAwMSAgICAgICAgICAJbW92YiAg ICQweDEsLTB4NTUoJXJicCkKZmZmZmZmZmY4MTEwOTVjZToJZWIgMGUgICAgICAgICAgICAgICAg CWptcCAgICBmZmZmZmZmZjgxMTA5NWRlIDxkb19sYXN0LmlzcmEuNDQrMHg4MGI+CglpZiAoKG9w ZW5fZmxhZyAmIE9fQ1JFQVQpICYmIGRfaXNfZGlyKG5kLT5wYXRoLmRlbnRyeSkpCgkJZ290byBv dXQ7CgllcnJvciA9IC1FTk9URElSOwoJaWYgKChuZC0+ZmxhZ3MgJiBMT09LVVBfRElSRUNUT1JZ KSAmJiAhZF9jYW5fbG9va3VwKG5kLT5wYXRoLmRlbnRyeSkpCgkJZ290byBvdXQ7CglpZiAoIVNf SVNSRUcobmQtPmlub2RlLT5pX21vZGUpKQpmZmZmZmZmZjgxMTA5NWQwOgljNiA0NSBhYiAwMCAg ICAgICAgICAJbW92YiAgICQweDAsLTB4NTUoJXJicCkKZmZmZmZmZmY4MTEwOTVkNDoJYzYgNDUg YWEgMDAgICAgICAgICAgCW1vdmIgICAkMHgwLC0weDU2KCVyYnApCmZmZmZmZmZmODExMDk1ZDg6 CWViIDA0ICAgICAgICAgICAgICAgIAlqbXAgICAgZmZmZmZmZmY4MTEwOTVkZSA8ZG9fbGFzdC5p c3JhLjQ0KzB4ODBiPgoJCXdpbGxfdHJ1bmNhdGUgPSBmYWxzZTsKCglpZiAod2lsbF90cnVuY2F0 ZSkgewpmZmZmZmZmZjgxMTA5NWRhOgljNiA0NSBhYiAwMCAgICAgICAgICAJbW92YiAgICQweDAs LTB4NTUoJXJicCkKCQlpZiAoZXJyb3IpCgkJCWdvdG8gb3V0OwoJCWdvdF93cml0ZSA9IHRydWU7 Cgl9CmZpbmlzaF9vcGVuX2NyZWF0ZWQ6CgllcnJvciA9IG1heV9vcGVuKCZuZC0+cGF0aCwgYWNj X21vZGUsIG9wZW5fZmxhZyk7CmZmZmZmZmZmODExMDk1ZGU6CThiIDU1IDk0ICAgICAgICAgICAg IAltb3YgICAgLTB4NmMoJXJicCksJWVkeApmZmZmZmZmZjgxMTA5NWUxOgk4YiBiNSA3YyBmZiBm ZiBmZiAgICAJbW92ICAgIC0weDg0KCVyYnApLCVlc2kKZmZmZmZmZmY4MTEwOTVlNzoJNDggODkg ZGYgICAgICAgICAgICAgCW1vdiAgICAlcmJ4LCVyZGkKZmZmZmZmZmY4MTEwOTVlYToJZTggZmEg ZjYgZmYgZmYgICAgICAgCWNhbGxxICBmZmZmZmZmZjgxMTA4Y2U5IDxtYXlfb3Blbj4KCWlmIChl cnJvcikKZmZmZmZmZmY4MTEwOTVlZjoJODUgYzAgICAgICAgICAgICAgICAgCXRlc3QgICAlZWF4 LCVlYXgKCQlpZiAoZXJyb3IpCgkJCWdvdG8gb3V0OwoJCWdvdF93cml0ZSA9IHRydWU7Cgl9CmZp bmlzaF9vcGVuX2NyZWF0ZWQ6CgllcnJvciA9IG1heV9vcGVuKCZuZC0+cGF0aCwgYWNjX21vZGUs IG9wZW5fZmxhZyk7CmZmZmZmZmZmODExMDk1ZjE6CTQxIDg5IGM2ICAgICAgICAgICAgIAltb3Yg ICAgJWVheCwlcjE0ZAoJaWYgKGVycm9yKQpmZmZmZmZmZjgxMTA5NWY0OgkwZiA4NSBiMSAwMCAw MCAwMCAgICAJam5lICAgIGZmZmZmZmZmODExMDk2YWIgPGRvX2xhc3QuaXNyYS40NCsweDhkOD4K CQlnb3RvIG91dDsKCWZpbGUtPmZfcGF0aC5tbnQgPSBuZC0+cGF0aC5tbnQ7CmZmZmZmZmZmODEx MDk1ZmE6CTQ4IDhiIDAzICAgICAgICAgICAgIAltb3YgICAgKCVyYngpLCVyYXgKCWVycm9yID0g ZmluaXNoX29wZW4oZmlsZSwgbmQtPnBhdGguZGVudHJ5LCBOVUxMLCBvcGVuZWQpOwpmZmZmZmZm ZjgxMTA5NWZkOgk0OCA4YiA0ZCBhMCAgICAgICAgICAJbW92ICAgIC0weDYwKCVyYnApLCVyY3gK ZmZmZmZmZmY4MTEwOTYwMToJMzEgZDIgICAgICAgICAgICAgICAgCXhvciAgICAlZWR4LCVlZHgK ZmZmZmZmZmY4MTEwOTYwMzoJNGMgODkgZWYgICAgICAgICAgICAgCW1vdiAgICAlcjEzLCVyZGkK CX0KZmluaXNoX29wZW5fY3JlYXRlZDoKCWVycm9yID0gbWF5X29wZW4oJm5kLT5wYXRoLCBhY2Nf bW9kZSwgb3Blbl9mbGFnKTsKCWlmIChlcnJvcikKCQlnb3RvIG91dDsKCWZpbGUtPmZfcGF0aC5t bnQgPSBuZC0+cGF0aC5tbnQ7CmZmZmZmZmZmODExMDk2MDY6CTQ5IDg5IDQ1IDEwICAgICAgICAg IAltb3YgICAgJXJheCwweDEwKCVyMTMpCgllcnJvciA9IGZpbmlzaF9vcGVuKGZpbGUsIG5kLT5w YXRoLmRlbnRyeSwgTlVMTCwgb3BlbmVkKTsKZmZmZmZmZmY4MTEwOTYwYToJNDggOGIgNzMgMDgg ICAgICAgICAgCW1vdiAgICAweDgoJXJieCksJXJzaQpmZmZmZmZmZjgxMTA5NjBlOgllOCA5MSAy OSBmZiBmZiAgICAgICAJY2FsbHEgIGZmZmZmZmZmODEwZmJmYTQgPGZpbmlzaF9vcGVuPgoJaWYg KGVycm9yKSB7CmZmZmZmZmZmODExMDk2MTM6CTg1IGMwICAgICAgICAgICAgICAgIAl0ZXN0ICAg JWVheCwlZWF4CmZpbmlzaF9vcGVuX2NyZWF0ZWQ6CgllcnJvciA9IG1heV9vcGVuKCZuZC0+cGF0 aCwgYWNjX21vZGUsIG9wZW5fZmxhZyk7CglpZiAoZXJyb3IpCgkJZ290byBvdXQ7CglmaWxlLT5m X3BhdGgubW50ID0gbmQtPnBhdGgubW50OwoJZXJyb3IgPSBmaW5pc2hfb3BlbihmaWxlLCBuZC0+ cGF0aC5kZW50cnksIE5VTEwsIG9wZW5lZCk7CmZmZmZmZmZmODExMDk2MTU6CTQxIDg5IGM2ICAg ICAgICAgICAgIAltb3YgICAgJWVheCwlcjE0ZAoJaWYgKGVycm9yKSB7CmZmZmZmZmZmODExMDk2 MTg6CTc0IDE0ICAgICAgICAgICAgICAgIAlqZSAgICAgZmZmZmZmZmY4MTEwOTYyZSA8ZG9fbGFz dC5pc3JhLjQ0KzB4ODViPgoJCWlmIChlcnJvciA9PSAtRU9QRU5TVEFMRSkKZmZmZmZmZmY4MTEw OTYxYToJM2QgZmEgZmQgZmYgZmYgICAgICAgCWNtcCAgICAkMHhmZmZmZmRmYSwlZWF4CmZmZmZm ZmZmODExMDk2MWY6CTBmIDg1IDg2IDAwIDAwIDAwICAgIAlqbmUgICAgZmZmZmZmZmY4MTEwOTZh YiA8ZG9fbGFzdC5pc3JhLjQ0KzB4OGQ4PgpmZmZmZmZmZjgxMTA5NjI1OgllOSBjMiAwMCAwMCAw MCAgICAgICAJam1wcSAgIGZmZmZmZmZmODExMDk2ZWMgPGRvX2xhc3QuaXNyYS40NCsweDkxOT4K CQlpZiAoZXJyb3IpCgkJCWdvdG8gb3V0OwoKCQlpZiAoKCpvcGVuZWQgJiBGSUxFX0NSRUFURUQp IHx8CgkJICAgICFTX0lTUkVHKGZpbGVfaW5vZGUoZmlsZSktPmlfbW9kZSkpCgkJCXdpbGxfdHJ1 bmNhdGUgPSBmYWxzZTsKZmZmZmZmZmY4MTEwOTYyYToJYzYgNDUgYWEgMDAgICAgICAgICAgCW1v dmIgICAkMHgwLC0weDU2KCVyYnApCgkJaWYgKGVycm9yID09IC1FT1BFTlNUQUxFKQoJCQlnb3Rv IHN0YWxlX29wZW47CgkJZ290byBvdXQ7Cgl9Cm9wZW5lZDoKCWVycm9yID0gb3Blbl9jaGVja19v X2RpcmVjdChmaWxlKTsKZmZmZmZmZmY4MTEwOTYyZToJNGMgODkgZWYgICAgICAgICAgICAgCW1v diAgICAlcjEzLCVyZGkKZmZmZmZmZmY4MTEwOTYzMToJZTggZTYgMzUgZmYgZmYgICAgICAgCWNh bGxxICBmZmZmZmZmZjgxMGZjYzFjIDxvcGVuX2NoZWNrX29fZGlyZWN0PgoJaWYgKGVycm9yKQpm ZmZmZmZmZjgxMTA5NjM2Ogk4NSBjMCAgICAgICAgICAgICAgICAJdGVzdCAgICVlYXgsJWVheAoJ CWlmIChlcnJvciA9PSAtRU9QRU5TVEFMRSkKCQkJZ290byBzdGFsZV9vcGVuOwoJCWdvdG8gb3V0 OwoJfQpvcGVuZWQ6CgllcnJvciA9IG9wZW5fY2hlY2tfb19kaXJlY3QoZmlsZSk7CmZmZmZmZmZm ODExMDk2Mzg6CTQxIDg5IGM2ICAgICAgICAgICAgIAltb3YgICAgJWVheCwlcjE0ZAoJaWYgKGVy cm9yKQpmZmZmZmZmZjgxMTA5NjNiOgkwZiA4NSBhMSAwMCAwMCAwMCAgICAJam5lICAgIGZmZmZm ZmZmODExMDk2ZTIgPGRvX2xhc3QuaXNyYS40NCsweDkwZj4KCQlnb3RvIGV4aXRfZnB1dDsKCWVy cm9yID0gaW1hX2ZpbGVfY2hlY2soZmlsZSwgb3AtPmFjY19tb2RlKTsKCWlmIChlcnJvcikKCQln b3RvIGV4aXRfZnB1dDsKCglpZiAod2lsbF90cnVuY2F0ZSkgewpmZmZmZmZmZjgxMTA5NjQxOgk4 MCA3ZCBhYSAwMCAgICAgICAgICAJY21wYiAgICQweDAsLTB4NTYoJXJicCkKZmZmZmZmZmY4MTEw OTY0NToJNzQgNjQgICAgICAgICAgICAgICAgCWplICAgICBmZmZmZmZmZjgxMTA5NmFiIDxkb19s YXN0LmlzcmEuNDQrMHg4ZDg+Cn0KCnN0YXRpYyBpbnQgaGFuZGxlX3RydW5jYXRlKHN0cnVjdCBm aWxlICpmaWxwKQp7CglzdHJ1Y3QgcGF0aCAqcGF0aCA9ICZmaWxwLT5mX3BhdGg7CglzdHJ1Y3Qg aW5vZGUgKmlub2RlID0gcGF0aC0+ZGVudHJ5LT5kX2lub2RlOwpmZmZmZmZmZjgxMTA5NjQ3Ogk0 OSA4YiA0NSAxOCAgICAgICAgICAJbW92ICAgIDB4MTgoJXIxMyksJXJheAoKI2lmbmRlZiBhdG9t aWNfaW5jX3VubGVzc19uZWdhdGl2ZQpzdGF0aWMgaW5saW5lIGludCBhdG9taWNfaW5jX3VubGVz c19uZWdhdGl2ZShhdG9taWNfdCAqcCkKewoJaW50IHYsIHYxOwoJZm9yICh2ID0gMDsgdiA+PSAw OyB2ID0gdjEpIHsKZmZmZmZmZmY4MTEwOTY0YjoJMzEgZDIgICAgICAgICAgICAgICAgCXhvciAg ICAlZWR4LCVlZHgKZmZmZmZmZmY4MTEwOTY0ZDoJNGMgOGIgNjAgMzAgICAgICAgICAgCW1vdiAg ICAweDMwKCVyYXgpLCVyMTIKCQl2MSA9IGF0b21pY19jbXB4Y2hnKHAsIHYsIHYgKyAxKTsKZmZm ZmZmZmY4MTEwOTY1MToJOGQgNGEgMDEgICAgICAgICAgICAgCWxlYSAgICAweDEoJXJkeCksJWVj eAojZGVmaW5lIGF0b21pY19pbmNfcmV0dXJuKHYpICAoYXRvbWljX2FkZF9yZXR1cm4oMSwgdikp CiNkZWZpbmUgYXRvbWljX2RlY19yZXR1cm4odikgIChhdG9taWNfc3ViX3JldHVybigxLCB2KSkK CnN0YXRpYyBpbmxpbmUgaW50IGF0b21pY19jbXB4Y2hnKGF0b21pY190ICp2LCBpbnQgb2xkLCBp bnQgbmV3KQp7CglyZXR1cm4gY21weGNoZygmdi0+Y291bnRlciwgb2xkLCBuZXcpOwpmZmZmZmZm ZjgxMTA5NjU0Ogk4OSBkMCAgICAgICAgICAgICAgICAJbW92ICAgICVlZHgsJWVheApmZmZmZmZm ZjgxMTA5NjU2OglmMCA0MSAwZiBiMSA4YyAyNCAzMCAJbG9jayBjbXB4Y2hnICVlY3gsMHgxMzAo JXIxMikKZmZmZmZmZmY4MTEwOTY1ZDoJMDEgMDAgMDAgCgkJaWYgKGxpa2VseSh2MSA9PSB2KSkK ZmZmZmZmZmY4MTEwOTY2MDoJMzkgZDAgICAgICAgICAgICAgICAgCWNtcCAgICAlZWR4LCVlYXgK ZmZmZmZmZmY4MTEwOTY2MjoJMGYgODQgMDkgMDEgMDAgMDAgICAgCWplICAgICBmZmZmZmZmZjgx MTA5NzcxIDxkb19sYXN0LmlzcmEuNDQrMHg5OWU+CgojaWZuZGVmIGF0b21pY19pbmNfdW5sZXNz X25lZ2F0aXZlCnN0YXRpYyBpbmxpbmUgaW50IGF0b21pY19pbmNfdW5sZXNzX25lZ2F0aXZlKGF0 b21pY190ICpwKQp7CglpbnQgdiwgdjE7Cglmb3IgKHYgPSAwOyB2ID49IDA7IHYgPSB2MSkgewpm ZmZmZmZmZjgxMTA5NjY4Ogk4NSBjMCAgICAgICAgICAgICAgICAJdGVzdCAgICVlYXgsJWVheApm ZmZmZmZmZjgxMTA5NjZhOgk4OSBjMiAgICAgICAgICAgICAgICAJbW92ICAgICVlYXgsJWVkeApm ZmZmZmZmZjgxMTA5NjZjOgk3OSBlMyAgICAgICAgICAgICAgICAJam5zICAgIGZmZmZmZmZmODEx MDk2NTEgPGRvX2xhc3QuaXNyYS40NCsweDg3ZT4KICogdXNlIHtnZXQsZGVueX1fd3JpdGVfYWNj ZXNzKCkgLSB0aGVzZSBmdW5jdGlvbnMgY2hlY2sgdGhlIHNpZ24gYW5kIHJlZnVzZQogKiB0byBk byB0aGUgY2hhbmdlIGlmIHNpZ24gaXMgd3JvbmcuCiAqLwpzdGF0aWMgaW5saW5lIGludCBnZXRf d3JpdGVfYWNjZXNzKHN0cnVjdCBpbm9kZSAqaW5vZGUpCnsKCXJldHVybiBhdG9taWNfaW5jX3Vu bGVzc19uZWdhdGl2ZSgmaW5vZGUtPmlfd3JpdGVjb3VudCkgPyAwIDogLUVUWFRCU1k7CmZmZmZm ZmZmODExMDk2NmU6CTQxIGJlIGU2IGZmIGZmIGZmICAgIAltb3YgICAgJDB4ZmZmZmZmZTYsJXIx NGQKZmZmZmZmZmY4MTEwOTY3NDoJZWIgNmMgICAgICAgICAgICAgICAgCWptcCAgICBmZmZmZmZm ZjgxMTA5NmUyIDxkb19sYXN0LmlzcmEuNDQrMHg5MGY+CiAqIGJ1dCBubyBncm91cCBleGVjdXRl IGJpdCAtICBhbiBvdGhlcndpc2UgbWVhbmluZ2xlc3MgY29tYmluYXRpb24uCiAqLwoKc3RhdGlj IGlubGluZSBpbnQgX19tYW5kYXRvcnlfbG9jayhzdHJ1Y3QgaW5vZGUgKmlubykKewoJcmV0dXJu IChpbm8tPmlfbW9kZSAmIChTX0lTR0lEIHwgU19JWEdSUCkpID09IFNfSVNHSUQ7CmZmZmZmZmZm ODExMDk2NzY6CTY2IDhiIDAwICAgICAgICAgICAgIAltb3YgICAgKCVyYXgpLCVheApmZmZmZmZm ZjgxMTA5Njc5Ogk2NiAyNSAwOCAwNCAgICAgICAgICAJYW5kICAgICQweDQwOCwlYXgKICogb3Ro ZXJ3aXNlIHRoZXNlIHdpbGwgYmUgYWR2aXNvcnkgbG9ja3MKICovCgpzdGF0aWMgaW5saW5lIGlu dCBtYW5kYXRvcnlfbG9jayhzdHJ1Y3QgaW5vZGUgKmlubykKewoJcmV0dXJuIElTX01BTkRMT0NL KGlubykgJiYgX19tYW5kYXRvcnlfbG9jayhpbm8pOwpmZmZmZmZmZjgxMTA5NjdkOgk2NiAzZCAw MCAwNCAgICAgICAgICAJY21wICAgICQweDQwMCwlYXgKZmZmZmZmZmY4MTEwOTY4MToJMGYgODQg MDEgMDEgMDAgMDAgICAgCWplICAgICBmZmZmZmZmZjgxMTA5Nzg4IDxkb19sYXN0LmlzcmEuNDQr MHg5YjU+CgkgKi8KCWVycm9yID0gbG9ja3NfdmVyaWZ5X2xvY2tlZChmaWxwKTsKCWlmICghZXJy b3IpCgkJZXJyb3IgPSBzZWN1cml0eV9wYXRoX3RydW5jYXRlKHBhdGgpOwoJaWYgKCFlcnJvcikg ewoJCWVycm9yID0gZG9fdHJ1bmNhdGUocGF0aC0+ZGVudHJ5LCAwLApmZmZmZmZmZjgxMTA5Njg3 Ogk0OSA4YiA3ZCAxOCAgICAgICAgICAJbW92ICAgIDB4MTgoJXIxMyksJXJkaQpmZmZmZmZmZjgx MTA5NjhiOgk0YyA4OSBlOSAgICAgICAgICAgICAJbW92ICAgICVyMTMsJXJjeApmZmZmZmZmZjgx MTA5NjhlOgliYSA2MCA4MCAwMCAwMCAgICAgICAJbW92ICAgICQweDgwNjAsJWVkeApmZmZmZmZm ZjgxMTA5NjkzOgkzMSBmNiAgICAgICAgICAgICAgICAJeG9yICAgICVlc2ksJWVzaQpmZmZmZmZm ZjgxMTA5Njk1OgllOCAxYyAyYSBmZiBmZiAgICAgICAJY2FsbHEgIGZmZmZmZmZmODEwZmMwYjYg PGRvX3RydW5jYXRlPgpmZmZmZmZmZjgxMTA5NjlhOgk0MSA4OSBjNiAgICAgICAgICAgICAJbW92 ICAgICVlYXgsJXIxNGQKICoKICogQXRvbWljYWxseSBkZWNyZW1lbnRzIEB2IGJ5IDEuCiAqLwpz dGF0aWMgaW5saW5lIHZvaWQgYXRvbWljX2RlYyhhdG9taWNfdCAqdikKewoJYXNtIHZvbGF0aWxl KExPQ0tfUFJFRklYICJkZWNsICUwIgpmZmZmZmZmZjgxMTA5NjlkOglmMCA0MSBmZiA4YyAyNCAz MCAwMSAJbG9jayBkZWNsIDB4MTMwKCVyMTIpCmZmZmZmZmZmODExMDk2YTQ6CTAwIDAwIAoJaWYg KGVycm9yKQoJCWdvdG8gZXhpdF9mcHV0OwoKCWlmICh3aWxsX3RydW5jYXRlKSB7CgkJZXJyb3Ig PSBoYW5kbGVfdHJ1bmNhdGUoZmlsZSk7CgkJaWYgKGVycm9yKQpmZmZmZmZmZjgxMTA5NmE2Ogk0 NSA4NSBmNiAgICAgICAgICAgICAJdGVzdCAgICVyMTRkLCVyMTRkCmZmZmZmZmZmODExMDk2YTk6 CTc1IDM3ICAgICAgICAgICAgICAgIAlqbmUgICAgZmZmZmZmZmY4MTEwOTZlMiA8ZG9fbGFzdC5p c3JhLjQ0KzB4OTBmPgoJCQlnb3RvIGV4aXRfZnB1dDsKCX0Kb3V0OgoJaWYgKGdvdF93cml0ZSkK ZmZmZmZmZmY4MTEwOTZhYjoJODAgN2QgYWIgMDAgICAgICAgICAgCWNtcGIgICAkMHgwLC0weDU1 KCVyYnApCmZmZmZmZmZmODExMDk2YWY6CTc0IDA4ICAgICAgICAgICAgICAgIAlqZSAgICAgZmZm ZmZmZmY4MTEwOTZiOSA8ZG9fbGFzdC5pc3JhLjQ0KzB4OGU2PgoJCW1udF9kcm9wX3dyaXRlKG5k LT5wYXRoLm1udCk7CmZmZmZmZmZmODExMDk2YjE6CTQ4IDhiIDNiICAgICAgICAgICAgIAltb3Yg ICAgKCVyYngpLCVyZGkKZmZmZmZmZmY4MTEwOTZiNDoJZTggY2YgYmMgMDAgMDAgICAgICAgCWNh bGxxICBmZmZmZmZmZjgxMTE1Mzg4IDxtbnRfZHJvcF93cml0ZT4KCXBhdGhfcHV0KCZzYXZlX3Bh cmVudCk7CmZmZmZmZmZmODExMDk2Yjk6CTQ4IDhkIDdkIGMwICAgICAgICAgIAlsZWEgICAgLTB4 NDAoJXJicCksJXJkaQpmZmZmZmZmZjgxMTA5NmJkOgllOCA5YiBiOSBmZiBmZiAgICAgICAJY2Fs bHEgIGZmZmZmZmZmODExMDUwNWQgPHBhdGhfcHV0PgoJdGVybWluYXRlX3dhbGsobmQpOwpmZmZm ZmZmZjgxMTA5NmMyOgk0OCA4OSBkZiAgICAgICAgICAgICAJbW92ICAgICVyYngsJXJkaQpmZmZm ZmZmZjgxMTA5NmM1OgllOCBiOCBiOSBmZiBmZiAgICAgICAJY2FsbHEgIGZmZmZmZmZmODExMDUw ODIgPHRlcm1pbmF0ZV93YWxrPgpmZmZmZmZmZjgxMTA5NmNhOgllOSBkYyAwMCAwMCAwMCAgICAg ICAJam1wcSAgIGZmZmZmZmZmODExMDk3YWIgPGRvX2xhc3QuaXNyYS40NCsweDlkOD4KCWlmIChn b3Rfd3JpdGUpIHsKCQltbnRfZHJvcF93cml0ZShuZC0+cGF0aC5tbnQpOwoJCWdvdF93cml0ZSA9 IGZhbHNlOwoJfQoKCWVycm9yID0gLUVFWElTVDsKZmZmZmZmZmY4MTEwOTZjZjoJNDEgYmUgZWYg ZmYgZmYgZmYgICAgCW1vdiAgICAkMHhmZmZmZmZlZiwlcjE0ZAoJcGF0aF9wdXQoJnNhdmVfcGFy ZW50KTsKCXRlcm1pbmF0ZV93YWxrKG5kKTsKCXJldHVybiBlcnJvcjsKCmV4aXRfZHB1dDoKCXBh dGhfcHV0X2NvbmRpdGlvbmFsKHBhdGgsIG5kKTsKZmZmZmZmZmY4MTEwOTZkNToJNDggODkgZGUg ICAgICAgICAgICAgCW1vdiAgICAlcmJ4LCVyc2kKZmZmZmZmZmY4MTEwOTZkODoJNGMgODkgZTcg ICAgICAgICAgICAgCW1vdiAgICAlcjEyLCVyZGkKZmZmZmZmZmY4MTEwOTZkYjoJZTggOGIgYzQg ZmYgZmYgICAgICAgCWNhbGxxICBmZmZmZmZmZjgxMTA1YjZiIDxwYXRoX3B1dF9jb25kaXRpb25h bC5pc3JhLjI4PgpmZmZmZmZmZjgxMTA5NmUwOgllYiBkNyAgICAgICAgICAgICAgICAJam1wICAg IGZmZmZmZmZmODExMDk2YjkgPGRvX2xhc3QuaXNyYS40NCsweDhlNj4KCWdvdG8gb3V0OwpleGl0 X2ZwdXQ6CglmcHV0KGZpbGUpOwpmZmZmZmZmZjgxMTA5NmUyOgk0YyA4OSBlZiAgICAgICAgICAg ICAJbW92ICAgICVyMTMsJXJkaQpmZmZmZmZmZjgxMTA5NmU1OgllOCAwYyA1MiBmZiBmZiAgICAg ICAJY2FsbHEgIGZmZmZmZmZmODEwZmU4ZjYgPGZwdXQ+CmZmZmZmZmZmODExMDk2ZWE6CWViIGJm ICAgICAgICAgICAgICAgIAlqbXAgICAgZmZmZmZmZmY4MTEwOTZhYiA8ZG9fbGFzdC5pc3JhLjQ0 KzB4OGQ4PgoJZ290byBvdXQ7CgpzdGFsZV9vcGVuOgoJLyogSWYgbm8gc2F2ZWQgcGFyZW50IG9y IGFscmVhZHkgcmV0cmllZCB0aGVuIGNhbid0IHJldHJ5ICovCglpZiAoIXNhdmVfcGFyZW50LmRl bnRyeSB8fCByZXRyaWVkKQpmZmZmZmZmZjgxMTA5NmVjOgk0OCA4YiA0NSBjOCAgICAgICAgICAJ bW92ICAgIC0weDM4KCVyYnApLCVyYXgKZmZmZmZmZmY4MTEwOTZmMDoJNDggODUgYzAgICAgICAg ICAgICAgCXRlc3QgICAlcmF4LCVyYXgKZmZmZmZmZmY4MTEwOTZmMzoJNzQgYjYgICAgICAgICAg ICAgICAgCWplICAgICBmZmZmZmZmZjgxMTA5NmFiIDxkb19sYXN0LmlzcmEuNDQrMHg4ZDg+CmZm ZmZmZmZmODExMDk2ZjU6CTgwIDdkIDkyIDAwICAgICAgICAgIAljbXBiICAgJDB4MCwtMHg2ZSgl cmJwKQpmZmZmZmZmZjgxMTA5NmY5Ogk3NSBiMCAgICAgICAgICAgICAgICAJam5lICAgIGZmZmZm ZmZmODExMDk2YWIgPGRvX2xhc3QuaXNyYS40NCsweDhkOD4KCQlnb3RvIG91dDsKCglCVUdfT04o c2F2ZV9wYXJlbnQuZGVudHJ5ICE9IGRpcik7CmZmZmZmZmZmODExMDk2ZmI6CTQ4IDNiIDQ1IDgw ICAgICAgICAgIAljbXAgICAgLTB4ODAoJXJicCksJXJheApmZmZmZmZmZjgxMTA5NmZmOgk3NCAw MiAgICAgICAgICAgICAgICAJamUgICAgIGZmZmZmZmZmODExMDk3MDMgPGRvX2xhc3QuaXNyYS40 NCsweDkzMD4KZmZmZmZmZmY4MTEwOTcwMToJMGYgMGIgICAgICAgICAgICAgICAgCXVkMiAgICAK CXBhdGhfcHV0KCZuZC0+cGF0aCk7CmZmZmZmZmZmODExMDk3MDM6CTQ4IDg5IGRmICAgICAgICAg ICAgIAltb3YgICAgJXJieCwlcmRpCmZmZmZmZmZmODExMDk3MDY6CWU4IDUyIGI5IGZmIGZmICAg ICAgIAljYWxscSAgZmZmZmZmZmY4MTEwNTA1ZCA8cGF0aF9wdXQ+CgluZC0+cGF0aCA9IHNhdmVf cGFyZW50OwpmZmZmZmZmZjgxMTA5NzBiOgk0OCA4YiA0NSBjOCAgICAgICAgICAJbW92ICAgIC0w eDM4KCVyYnApLCVyYXgKZmZmZmZmZmY4MTEwOTcwZjoJNDggOGIgN2QgYzAgICAgICAgICAgCW1v diAgICAtMHg0MCglcmJwKSwlcmRpCgluZC0+aW5vZGUgPSBkaXItPmRfaW5vZGU7CmZmZmZmZmZm ODExMDk3MTM6CTQ4IDhiIDU1IDgwICAgICAgICAgIAltb3YgICAgLTB4ODAoJXJicCksJXJkeAoJ c2F2ZV9wYXJlbnQubW50ID0gTlVMTDsKCXNhdmVfcGFyZW50LmRlbnRyeSA9IE5VTEw7CglpZiAo Z290X3dyaXRlKSB7CmZmZmZmZmZmODExMDk3MTc6CTgwIDdkIGFiIDAwICAgICAgICAgIAljbXBi ICAgJDB4MCwtMHg1NSglcmJwKQoKCUJVR19PTihzYXZlX3BhcmVudC5kZW50cnkgIT0gZGlyKTsK CXBhdGhfcHV0KCZuZC0+cGF0aCk7CgluZC0+cGF0aCA9IHNhdmVfcGFyZW50OwoJbmQtPmlub2Rl ID0gZGlyLT5kX2lub2RlOwoJc2F2ZV9wYXJlbnQubW50ID0gTlVMTDsKZmZmZmZmZmY4MTEwOTcx YjoJNDggYzcgNDUgYzAgMDAgMDAgMDAgCW1vdnEgICAkMHgwLC0weDQwKCVyYnApCmZmZmZmZmZm ODExMDk3MjI6CTAwIAoJc2F2ZV9wYXJlbnQuZGVudHJ5ID0gTlVMTDsKZmZmZmZmZmY4MTEwOTcy MzoJNDggYzcgNDUgYzggMDAgMDAgMDAgCW1vdnEgICAkMHgwLC0weDM4KCVyYnApCmZmZmZmZmZm ODExMDk3MmE6CTAwIAoJaWYgKCFzYXZlX3BhcmVudC5kZW50cnkgfHwgcmV0cmllZCkKCQlnb3Rv IG91dDsKCglCVUdfT04oc2F2ZV9wYXJlbnQuZGVudHJ5ICE9IGRpcik7CglwYXRoX3B1dCgmbmQt PnBhdGgpOwoJbmQtPnBhdGggPSBzYXZlX3BhcmVudDsKZmZmZmZmZmY4MTEwOTcyYjoJNDggODkg M2IgICAgICAgICAgICAgCW1vdiAgICAlcmRpLCglcmJ4KQpmZmZmZmZmZjgxMTA5NzJlOgk0OCA4 OSA0MyAwOCAgICAgICAgICAJbW92ICAgICVyYXgsMHg4KCVyYngpCgluZC0+aW5vZGUgPSBkaXIt PmRfaW5vZGU7CmZmZmZmZmZmODExMDk3MzI6CTQ4IDhiIDQyIDMwICAgICAgICAgIAltb3YgICAg MHgzMCglcmR4KSwlcmF4CglzYXZlX3BhcmVudC5kZW50cnkgPSBOVUxMOwoJaWYgKGdvdF93cml0 ZSkgewoJCW1udF9kcm9wX3dyaXRlKG5kLT5wYXRoLm1udCk7CgkJZ290X3dyaXRlID0gZmFsc2U7 Cgl9CglyZXRyaWVkID0gdHJ1ZTsKZmZmZmZmZmY4MTEwOTczNjoJYzYgNDUgOTIgMDEgICAgICAg ICAgCW1vdmIgICAkMHgxLC0weDZlKCVyYnApCgkJZ290byBvdXQ7CgoJQlVHX09OKHNhdmVfcGFy ZW50LmRlbnRyeSAhPSBkaXIpOwoJcGF0aF9wdXQoJm5kLT5wYXRoKTsKCW5kLT5wYXRoID0gc2F2 ZV9wYXJlbnQ7CgluZC0+aW5vZGUgPSBkaXItPmRfaW5vZGU7CmZmZmZmZmZmODExMDk3M2E6CTQ4 IDg5IDQzIDMwICAgICAgICAgIAltb3YgICAgJXJheCwweDMwKCVyYngpCglzYXZlX3BhcmVudC5t bnQgPSBOVUxMOwoJc2F2ZV9wYXJlbnQuZGVudHJ5ID0gTlVMTDsKCWlmIChnb3Rfd3JpdGUpIHsK ZmZmZmZmZmY4MTEwOTczZToJMGYgODQgYzAgZjcgZmYgZmYgICAgCWplICAgICBmZmZmZmZmZjgx MTA4ZjA0IDxkb19sYXN0LmlzcmEuNDQrMHgxMzE+CgkJbW50X2Ryb3Bfd3JpdGUobmQtPnBhdGgu bW50KTsKZmZmZmZmZmY4MTEwOTc0NDoJZTggM2YgYmMgMDAgMDAgICAgICAgCWNhbGxxICBmZmZm ZmZmZjgxMTE1Mzg4IDxtbnRfZHJvcF93cml0ZT4KZmZmZmZmZmY4MTEwOTc0OToJZTkgYjYgZjcg ZmYgZmYgICAgICAgCWptcHEgICBmZmZmZmZmZjgxMTA4ZjA0IDxkb19sYXN0LmlzcmEuNDQrMHgx MzE+CnN0YXRpYyBpbmxpbmUgaW50IGhhbmRsZV9kb3RzKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBp bnQgdHlwZSkKewoJaWYgKHR5cGUgPT0gTEFTVF9ET1RET1QpIHsKCQlpZiAobmQtPmZsYWdzICYg TE9PS1VQX1JDVSkgewoJCQlpZiAoZm9sbG93X2RvdGRvdF9yY3UobmQpKQoJCQkJcmV0dXJuIC1F Q0hJTEQ7CmZmZmZmZmZmODExMDk3NGU6CTQxIGJlIGY2IGZmIGZmIGZmICAgIAltb3YgICAgJDB4 ZmZmZmZmZjYsJXIxNGQKZmZmZmZmZmY4MTEwOTc1NDoJZWIgNTUgICAgICAgICAgICAgICAgCWpt cCAgICBmZmZmZmZmZjgxMTA5N2FiIDxkb19sYXN0LmlzcmEuNDQrMHg5ZDg+Cglib29sIGdvdF93 cml0ZSA9IGZhbHNlOwoJaW50IGFjY19tb2RlID0gb3AtPmFjY19tb2RlOwoJc3RydWN0IGlub2Rl ICppbm9kZTsKCWJvb2wgc3ltbGlua19vayA9IGZhbHNlOwoJc3RydWN0IHBhdGggc2F2ZV9wYXJl bnQgPSB7IC5kZW50cnkgPSBOVUxMLCAubW50ID0gTlVMTCB9OwoJYm9vbCByZXRyaWVkID0gZmFs c2U7CmZmZmZmZmZmODExMDk3NTY6CWM2IDQ1IDkyIDAwICAgICAgICAgIAltb3ZiICAgJDB4MCwt MHg2ZSglcmJwKQoJaW50IG9wZW5fZmxhZyA9IG9wLT5vcGVuX2ZsYWc7Cglib29sIHdpbGxfdHJ1 bmNhdGUgPSAob3Blbl9mbGFnICYgT19UUlVOQykgIT0gMDsKCWJvb2wgZ290X3dyaXRlID0gZmFs c2U7CglpbnQgYWNjX21vZGUgPSBvcC0+YWNjX21vZGU7CglzdHJ1Y3QgaW5vZGUgKmlub2RlOwoJ Ym9vbCBzeW1saW5rX29rID0gZmFsc2U7CmZmZmZmZmZmODExMDk3NWE6CWM2IDQ1IDkzIDAwICAg ICAgICAgIAltb3ZiICAgJDB4MCwtMHg2ZCglcmJwKQpmZmZmZmZmZjgxMTA5NzVlOgllOSBjZCBm ZCBmZiBmZiAgICAgICAJam1wcSAgIGZmZmZmZmZmODExMDk1MzAgPGRvX2xhc3QuaXNyYS40NCsw eDc1ZD4KCWlmIChlcnJvcikgewkvKiByZXR1cm5lZCAxLCB0aGF0IGlzICovCgkJaWYgKFdBUk5f T04oZmlsZS0+Zl9wYXRoLmRlbnRyeSA9PSBERU5UUllfTk9UX1NFVCkpIHsKCQkJZXJyb3IgPSAt RUlPOwoJCQlnb3RvIG91dDsKCQl9CgkJaWYgKGZpbGUtPmZfcGF0aC5kZW50cnkpIHsKZmZmZmZm ZmY4MTEwOTc2MzoJNDggODUgYzAgICAgICAgICAgICAgCXRlc3QgICAlcmF4LCVyYXgKZmZmZmZm ZmY4MTEwOTc2NjoJMGYgODUgZDIgZjkgZmYgZmYgICAgCWpuZSAgICBmZmZmZmZmZjgxMTA5MTNl IDxkb19sYXN0LmlzcmEuNDQrMHgzNmI+CmZmZmZmZmZmODExMDk3NmM6CWU5IGQ5IGY5IGZmIGZm ICAgICAgIAlqbXBxICAgZmZmZmZmZmY4MTEwOTE0YSA8ZG9fbGFzdC5pc3JhLjQ0KzB4Mzc3Pgpj b25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBwYWdlX3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9u cyA9IHsKCS5yZWFkbGluawk9IGdlbmVyaWNfcmVhZGxpbmssCgkuZm9sbG93X2xpbmsJPSBwYWdl X2ZvbGxvd19saW5rX2xpZ2h0LAoJLnB1dF9saW5rCT0gcGFnZV9wdXRfbGluaywKfTsKRVhQT1JU X1NZTUJPTChwYWdlX3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9ucyk7CmZmZmZmZmZmODExMDk3NzE6 CTQ5IDhiIDQ1IDIwICAgICAgICAgIAltb3YgICAgMHgyMCglcjEzKSwlcmF4CmZmZmZmZmZmODEx MDk3NzU6CTQ4IDhiIDUwIDI4ICAgICAgICAgIAltb3YgICAgMHgyOCglcmF4KSwlcmR4CmZmZmZm ZmZmODExMDk3Nzk6CWY2IDQyIDUwIDQwICAgICAgICAgIAl0ZXN0YiAgJDB4NDAsMHg1MCglcmR4 KQpmZmZmZmZmZjgxMTA5NzdkOgkwZiA4NSBmMyBmZSBmZiBmZiAgICAJam5lICAgIGZmZmZmZmZm ODExMDk2NzYgPGRvX2xhc3QuaXNyYS40NCsweDhhMz4KZmZmZmZmZmY4MTEwOTc4MzoJZTkgZmYg ZmUgZmYgZmYgICAgICAgCWptcHEgICBmZmZmZmZmZjgxMTA5Njg3IDxkb19sYXN0LmlzcmEuNDQr MHg4YjQ+Cn0KCnN0YXRpYyBpbmxpbmUgaW50IGxvY2tzX3ZlcmlmeV9sb2NrZWQoc3RydWN0IGZp bGUgKmZpbGUpCnsKCWlmIChtYW5kYXRvcnlfbG9jayhmaWxlX2lub2RlKGZpbGUpKSkKCQlyZXR1 cm4gbG9ja3NfbWFuZGF0b3J5X2xvY2tlZChmaWxlKTsKZmZmZmZmZmY4MTEwOTc4ODoJNGMgODkg ZWYgICAgICAgICAgICAgCW1vdiAgICAlcjEzLCVyZGkKZmZmZmZmZmY4MTEwOTc4YjoJZTggNTIg MGMgMDMgMDAgICAgICAgCWNhbGxxICBmZmZmZmZmZjgxMTNhM2UyIDxsb2Nrc19tYW5kYXRvcnlf bG9ja2VkPgoJCXJldHVybiBlcnJvcjsKCS8qCgkgKiBSZWZ1c2UgdG8gdHJ1bmNhdGUgZmlsZXMg d2l0aCBtYW5kYXRvcnkgbG9ja3MgaGVsZCBvbiB0aGVtLgoJICovCgllcnJvciA9IGxvY2tzX3Zl cmlmeV9sb2NrZWQoZmlscCk7CglpZiAoIWVycm9yKQpmZmZmZmZmZjgxMTA5NzkwOgk4NSBjMCAg ICAgICAgICAgICAgICAJdGVzdCAgICVlYXgsJWVheApmZmZmZmZmZjgxMTA5NzkyOgk0MSA4OSBj NiAgICAgICAgICAgICAJbW92ICAgICVlYXgsJXIxNGQKZmZmZmZmZmY4MTEwOTc5NToJMGYgODUg MDIgZmYgZmYgZmYgICAgCWpuZSAgICBmZmZmZmZmZjgxMTA5NjlkIDxkb19sYXN0LmlzcmEuNDQr MHg4Y2E+CmZmZmZmZmZmODExMDk3OWI6CWU5IGU3IGZlIGZmIGZmICAgICAgIAlqbXBxICAgZmZm ZmZmZmY4MTEwOTY4NyA8ZG9fbGFzdC5pc3JhLjQ0KzB4OGI0PgoJfQoKCWlmIChzaG91bGRfZm9s bG93X2xpbmsocGF0aC0+ZGVudHJ5LCAhc3ltbGlua19vaykpIHsKCQlpZiAobmQtPmZsYWdzICYg TE9PS1VQX1JDVSkgewoJCQlpZiAodW5saWtlbHkodW5sYXp5X3dhbGsobmQsIHBhdGgtPmRlbnRy eSkpKSB7CgkJCQllcnJvciA9IC1FQ0hJTEQ7CmZmZmZmZmZmODExMDk3YTA6CTQxIGJlIGY2IGZm IGZmIGZmICAgIAltb3YgICAgJDB4ZmZmZmZmZjYsJXIxNGQKZmZmZmZmZmY4MTEwOTdhNjoJZTkg MGUgZmYgZmYgZmYgICAgICAgCWptcHEgICBmZmZmZmZmZjgxMTA5NmI5IDxkb19sYXN0LmlzcmEu NDQrMHg4ZTY+CgkJbW50X2Ryb3Bfd3JpdGUobmQtPnBhdGgubW50KTsKCQlnb3Rfd3JpdGUgPSBm YWxzZTsKCX0KCXJldHJpZWQgPSB0cnVlOwoJZ290byByZXRyeV9sb29rdXA7Cn0KZmZmZmZmZmY4 MTEwOTdhYjoJNDggODMgYzQgNzggICAgICAgICAgCWFkZCAgICAkMHg3OCwlcnNwCmZmZmZmZmZm ODExMDk3YWY6CTQ0IDg5IGYwICAgICAgICAgICAgIAltb3YgICAgJXIxNGQsJWVheApmZmZmZmZm ZjgxMTA5N2IyOgk1YiAgICAgICAgICAgICAgICAgICAJcG9wICAgICVyYngKZmZmZmZmZmY4MTEw OTdiMzoJNDEgNWMgICAgICAgICAgICAgICAgCXBvcCAgICAlcjEyCmZmZmZmZmZmODExMDk3YjU6 CTQxIDVkICAgICAgICAgICAgICAgIAlwb3AgICAgJXIxMwpmZmZmZmZmZjgxMTA5N2I3Ogk0MSA1 ZSAgICAgICAgICAgICAgICAJcG9wICAgICVyMTQKZmZmZmZmZmY4MTEwOTdiOToJNDEgNWYgICAg ICAgICAgICAgICAgCXBvcCAgICAlcjE1CmZmZmZmZmZmODExMDk3YmI6CTVkICAgICAgICAgICAg ICAgICAgIAlwb3AgICAgJXJicApmZmZmZmZmZjgxMTA5N2JjOgljMyAgICAgICAgICAgICAgICAg ICAJcmV0cSAgIAo= --089e0115fd3c7d099c04f747d1fc--