LyoKICogIGFybWJvb3QgLSBTdGFydHVwIENvZGUgZm9yIFhTY2FsZQogKgogKiAgQ29weXJpZ2h0IChDKSAxOTk4CURhbiBNYWxlayA8ZG1hbGVrQGpsYy5uZXQ+CiAqICBDb3B5cmlnaHQgKEMpIDE5OTkJTWFnbnVzIERhbW0gPGtpZXJheXBjMDEucC55LmtpZS5lcmEuZXJpY3Nzb24uc2U+CiAqICBDb3B5cmlnaHQgKEMpIDIwMDAJV29sZmdhbmcgRGVuayA8d2RAZGVueC5kZT4KICogIENvcHlyaWdodCAoQykgMjAwMQlBbGV4IFr8cGtlIDxhenVAc3lzZ28uZGU+CiAqICBDb3B5cmlnaHQgKEMpIDIwMDIJS3lsZSBIYXJyaXMgPGtoYXJyaXNAbmV4dXMtdGVjaC5uZXQ+CiAqICBDb3B5cmlnaHQgKEMpIDIwMDMgIFJvYmVydCBTY2h3ZWJlbCA8ci5zY2h3ZWJlbEBwZW5ndXRyb25peC5kZT4KICogIENvcHlyaWdodCAoQykgMjAwMyAgS2FpLVV3ZSBCbG9laG0gPGthaS11d2UuYmxvZW1AYXVlcnN3YWxkLmRlPgogKgogKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwogKiBwcm9qZWN0LgogKgogKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCiAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCiAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgkgU2VlIHRoZQogKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAogKiBNQSAwMjExMS0xMzA3IFVTQQogKi8KCiNpbmNsdWRlIDxjb25maWcuaD4KI2luY2x1ZGUgPHZlcnNpb24uaD4KCi5nbG9ibCBfc3RhcnQKX3N0YXJ0OiBiCXJlc2V0CglsZHIJcGMsIF91bmRlZmluZWRfaW5zdHJ1Y3Rpb24KCWxkcglwYywgX3NvZnR3YXJlX2ludGVycnVwdAoJbGRyCXBjLCBfcHJlZmV0Y2hfYWJvcnQKCWxkcglwYywgX2RhdGFfYWJvcnQKCWxkcglwYywgX25vdF91c2VkCglsZHIJcGMsIF9pcnEKCWxkcglwYywgX2ZpcQoKX3VuZGVmaW5lZF9pbnN0cnVjdGlvbjogLndvcmQgdW5kZWZpbmVkX2luc3RydWN0aW9uCl9zb2Z0d2FyZV9pbnRlcnJ1cHQ6CS53b3JkIHNvZnR3YXJlX2ludGVycnVwdApfcHJlZmV0Y2hfYWJvcnQ6CS53b3JkIHByZWZldGNoX2Fib3J0Cl9kYXRhX2Fib3J0OgkJLndvcmQgZGF0YV9hYm9ydApfbm90X3VzZWQ6CQkud29yZCBub3RfdXNlZApfaXJxOgkJCS53b3JkIGlycQpfZmlxOgkJCS53b3JkIGZpcQoKCS5iYWxpZ25sIDE2LDB4ZGVhZGJlZWYKCgovKgogKiBTdGFydHVwIENvZGUgKHJlc2V0IHZlY3RvcikKICoKICogZG8gaW1wb3J0YW50IGluaXQgb25seSBpZiB3ZSBkb24ndCBzdGFydCBmcm9tIG1lbW9yeSEKICogLSByZWxvY2F0ZSBhcm1ib290IHRvIHJhbQogKiAtIHNldHVwIHN0YWNrCiAqIC0ganVtcCB0byBzZWNvbmQgc3RhZ2UKICovCgovKgogKiBDRkdfTUVNX0VORCBpcyBpbiB0aGUgYm9hcmQgZGVwZW5kZW50IGNvbmZpZy1maWxlIChjb25maWdzL2NvbmZpZ19CT0FSRC5oKQogKi8KX1RFWFRfQkFTRToKCS53b3JkCVRFWFRfQkFTRQoKLmdsb2JsIF9hcm1ib290X3N0YXJ0Cl9hcm1ib290X3N0YXJ0OgoJLndvcmQgX3N0YXJ0CgovKgogKiBOb3RlOiBfYXJtYm9vdF9lbmRfZGF0YSBhbmQgX2FybWJvb3RfZW5kIGFyZSBkZWZpbmVkCiAqIGJ5IHRoZSAoYm9hcmQtZGVwZW5kZW50KSBsaW5rZXIgc2NyaXB0LgogKiBfYXJtYm9vdF9lbmRfZGF0YSBpcyB0aGUgZmlyc3QgdXNhYmxlIEZMQVNIIGFkZHJlc3MgYWZ0ZXIgYXJtYm9vdAogKi8KLmdsb2JsIF9hcm1ib290X2VuZF9kYXRhCl9hcm1ib290X2VuZF9kYXRhOgoJLndvcmQgYXJtYm9vdF9lbmRfZGF0YQouZ2xvYmwgX2FybWJvb3RfZW5kCl9hcm1ib290X2VuZDoKCS53b3JkIGFybWJvb3RfZW5kCgovKgogKiBUaGlzIGlzIGRlZmluZWQgaW4gdGhlIGJvYXJkIHNwZWNpZmljIGxpbmtlciBzY3JpcHQKICovCi5nbG9ibCBfYnNzX3N0YXJ0CQpfYnNzX3N0YXJ0OgkKCS53b3JkIGJzc19zdGFydAoKLmdsb2JsIF9ic3NfZW5kCl9ic3NfZW5kOgoJLndvcmQgYnNzX2VuZAoKLyoKICogX2FybWJvb3RfcmVhbF9lbmQgaXMgdGhlIGZpcnN0IHVzYWJsZSBSQU0gYWRkcmVzcyBiZWhpbmQgYXJtYm9vdAogKiBhbmQgdGhlIHZhcmlvdXMgc3RhY2tzCiAqLwouZ2xvYmwgX2FybWJvb3RfcmVhbF9lbmQKX2FybWJvb3RfcmVhbF9lbmQ6Cgkud29yZCAweDBiYWRjMGRlCgovKgogKiBXZSByZWxvY2F0ZSB1Ym9vdCB0byB0aGlzIGFkZHJlc3MgKGVuZCBvZiBSQU0gLSAxMjggS2lCKQogKi8KLmdsb2JsIF91Ym9vdF9yZWxvYwpfdWJvb3RfcmVsb2M6Cgkud29yZCBURVhUX0JBU0UKCiNpZmRlZiBDT05GSUdfVVNFX0lSUQovKiBJUlEgc3RhY2sgbWVtb3J5IChjYWxjdWxhdGVkIGF0IHJ1bi10aW1lKSAqLwouZ2xvYmwgSVJRX1NUQUNLX1NUQVJUCklSUV9TVEFDS19TVEFSVDoKCS53b3JkCTB4MGJhZGMwZGUKCi8qIElSUSBzdGFjayBtZW1vcnkgKGNhbGN1bGF0ZWQgYXQgcnVuLXRpbWUpICovCi5nbG9ibCBGSVFfU1RBQ0tfU1RBUlQKRklRX1NUQUNLX1NUQVJUOgoJLndvcmQgMHgwYmFkYzBkZQojZW5kaWYKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyoJCQkJCQkJCQkgICAgKi8KLyogdGhlIGFjdHVhbCByZXNldCBjb2RlCQkJCQkJICAgICovCi8qCQkJCQkJCQkJICAgICovCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKcmVzZXQ6CgltcnMJcjAsY3BzcgkJCS8qIHNldCB0aGUgY3B1IHRvIFNWQzMyIG1vZGUJICAgICovCgliaWMJcjAscjAsIzB4MWYJCS8qIChzdXBlcnZpc2VyIG1vZGUsIE09MTAwMTEpCSAgICAqLwoJb3JyCXIwLHIwLCMweDEzCgltc3IJY3BzcixyMAoKCWJsCWNwdV9pbml0X2NyaXQJCS8qIHdlIGRvIHN5cy1jcml0aWNhbCBpbml0cwkgICAgKi8KCnJlbG9jYXRlOgkJCQkvKiByZWxvY2F0ZSBVLUJvb3QgdG8gUkFNCSAgICAqLwoJYWRyCXIwLCBfc3RhcnQJCS8qIHIwIDwtIGN1cnJlbnQgcG9zaXRpb24gb2YgY29kZSAgICovCglsZHIJcjEsIF9URVhUX0JBU0UJCS8qIHRlc3QgaWYgd2UgcnVuIGZyb20gZmxhc2ggb3IgUkFNICovCQoJY21wICAgICByMCwgcjEgICAgICAgICAgICAgICAgICAvKiBkb24ndCByZWxvYyBkdXJpbmcgZGVidWcgICAgICAgICAqLwoJYmVxICAgICBzdGFja19zZXR1cAoKCWxkcglyMiwgX2FybWJvb3Rfc3RhcnQKCWxkcglyMywgX2FybWJvb3RfZW5kCglzdWIJcjIsIHIzLCByMgkJLyogcjIgPC0gc2l6ZSBvZiBhcm1ib290ICAgICAgICAgICAgKi8KCWFkZAlyMiwgcjAsIHIyCQkvKiByMiA8LSBzb3VyY2UgZW5kIGFkZHJlc3MgICAgICAgICAqLwoKY29weV9sb29wOgoJbGRtaWEJcjAhLCB7cjMtcjEwfQkJLyogY29weSBmcm9tIHNvdXJjZSBhZGRyZXNzIFtyMF0gICAgKi8KCXN0bWlhCXIxISwge3IzLXIxMH0JCS8qIGNvcHkgdG8gICB0YXJnZXQgYWRkcmVzcyBbcjFdICAgICovCgljbXAJcjAsIHIyCQkJLyogdW50aWwgc291cmNlIGVuZCBhZGRyZWVlIFtyMl0gICAgKi8KCWJsZQljb3B5X2xvb3AKCgkvKiBTZXQgdXAgdGhlIHN0YWNrCQkJCQkJICAgICovCgpzdGFja19zZXR1cDoKCglsZHIJcjAsIF91Ym9vdF9yZWxvYwkvKiB1cHBlciAxMjggS2lCOiByZWxvY2F0ZWQgdWJvb3QgICAqLwoJc3ViCXIwLCByMCwgI0NGR19NQUxMT0NfTEVOIC8qIG1hbGxvYyBhcmVhCQkJICAgICovCgkJCQkJLyogRklYTUU6IGJkaW5mbyBzaG91bGQgYmUgaGVyZQkgICAgKi8KCXN1YglzcCwgcjAsICMxMgkJLyogbGVhdmUgMyB3b3JkcyBmb3IgYWJvcnQtc3RhY2sgICAgKi8KCmNsZWFyX2JzczoKCglsZHIJcjAsIF9ic3Nfc3RhcnQJCS8qIGZpbmQgc3RhcnQgb2YgYnNzIHNlZ21lbnQgICAgICAgICovCglhZGQJcjAsIHIwLCAjNAkJLyogc3RhcnQgYXQgZmlyc3QgYnl0ZSBvZiBic3MgICAgICAgKi8KCWxkcglyMSwgX2Jzc19lbmQJCS8qIHN0b3AgaGVyZSAgICAgICAgICAgICAgICAgICAgICAgICovCgltb3YgCXIyLCAjMHgwMDAwMDAwMAkJLyogY2xlYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KCmNsYnNzX2w6c3RyCXIyLCBbcjBdCQkvKiBjbGVhciBsb29wLi4uICAgICAgICAgICAgICAgICAgICAqLwoJYWRkCXIwLCByMCwgIzQKCWNtcAlyMCwgcjEKCWJuZQljbGJzc19sCSAKCgoJbGRyCXBjLCBfc3RhcnRfYXJtYm9vdAoKX3N0YXJ0X2FybWJvb3Q6IC53b3JkIHN0YXJ0X2FybWJvb3QKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyoJCQkJCQkJCQkgICAgKi8KLyogQ1BVX2luaXRfY3JpdGljYWwgcmVnaXN0ZXJzCQkJCQkJICAgICovCi8qCQkJCQkJCQkJICAgICovCi8qIC0gc2V0dXAgaW1wb3J0YW50IHJlZ2lzdGVycwkJCQkJCSAgICAqLwovKiAtIHNldHVwIG1lbW9yeSB0aW1pbmcJCQkJCQkgICAgKi8KLyoJCQkJCQkJCQkgICAgKi8KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgovKiBJbnRlcnJ1cHQtQ29udHJvbGxlciBiYXNlIGFkZHJlc3MJCQkJICAgICAgICAgICAgKi8KSUNfQkFTRToJICAgLndvcmQJICAgMHg0MGQwMDAwMAojZGVmaW5lIElDTVIJMHgwNAoKLyogUmVzZXQtQ29udHJvbGxlciAqLwpSU1RfQkFTRToJLndvcmQJMHg0MGYwMDAzMAojZGVmaW5lIFJDU1IJMHgwMAoKLyogT3BlcmF0aW5nIFN5c3RlbSBUaW1lciAqLwpPU1RJTUVSX0JBU0U6CS53b3JkCTB4NDBhMDAwMDAKI2RlZmluZSBPU01SMwkweDBDCiNkZWZpbmUgT1NDUgkweDEwCiNkZWZpbmUgT1dFUgkweDE4CiNkZWZpbmUgT0lFUgkweDFDCgovKiBDbG9jayBNYW5hZ2VyIFJlZ2lzdGVycwkJCQkJICAgICAgICAgICAgKi8KQ0NfQkFTRToJLndvcmQJMHg0MTMwMDAwMAojZGVmaW5lIENDQ1IJMHgwMApjcHVzcGVlZDoJLndvcmQJQ0ZHX0NQVVNQRUVECgoKCS8qIFJTOiA/Pz8JCQkJCQkJICAgICovCgkubWFjcm8gQ1BXQUlUCgltcmMgIHAxNSwwLHIwLGMyLGMwLDAKCW1vdiAgcjAscjAKCXN1YiAgcGMscGMsIzQKCS5lbmRtCgoKY3B1X2luaXRfY3JpdDoKCgkvKiBtYXNrIGFsbCBJUlFzCQkJCQkJICAgICovCglsZHIJcjAsIElDX0JBU0UKCW1vdglyMSwgIzB4MDAKCXN0cglyMSwgW3IwLCAjSUNNUl0KCiNpZiBkZWZpbmVkKENGR19DUFVTUEVFRCkKCgkvKiBzZXQgY2xvY2sgc3BlZWQgKi8KCWxkcglyMCwgQ0NfQkFTRQoJbGRyCXIxLCBjcHVzcGVlZAoJc3RyCXIxLCBbcjAsICNDQ0NSXQoJbW92CXIwLCAjMgoJbWNyCXAxNCwgMCwgcjAsIGM2LCBjMCwgMAoKc2V0c3BlZWRfZG9uZToKI2VuZGlmCgoJLyoKCSAqIGJlZm9yZSByZWxvY2F0aW5nLCB3ZSBoYXZlIHRvIHNldHVwIFJBTSB0aW1pbmcKCSAqIGJlY2F1c2UgbWVtb3J5IHRpbWluZyBpcyBib2FyZC1kZXBlbmRlbmQsIHlvdSB3aWxsCgkgKiBmaW5kIGEgbWVtc2V0dXAuUyBpbiB5b3VyIGJvYXJkIGRpcmVjdG9yeS4KCSAqLwoJbW92CWlwLAlscgoJYmwJbWVtc2V0dXAKCW1vdglsciwJaXAKCgkvKiBNZW1vcnkgaW50ZXJmYWNlcyBhcmUgd29ya2luZy4gRGlzYWJsZSBNTVUgYW5kIGVuYWJsZSBJLWNhY2hlLiAgICovCgoJbGRyCXIwLCA9MHgyMDAxCQkvKiBlbmFibGUgYWNjZXNzIHRvIGFsbCBjb3Byb2MuCSAgICAqLwoJbWNyCXAxNSwgMCwgcjAsIGMxNSwgYzEsIDAKCUNQV0FJVAoKCW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCA0CS8qIGRyYWluIHRoZSB3cml0ZSAmIGZpbGwgYnVmZmVycyAgICovCglDUFdBSVQKCgltY3IJcDE1LCAwLCByMCwgYzcsIGM3LCAwCS8qIGZsdXNoIEljYWNoZSwgRGNhY2hlIGFuZCBCVEIJICAgICovCglDUFdBSVQKCgltY3IJcDE1LCAwLCByMCwgYzgsIGM3LCAwCS8qIGZsdXNoIGluc3R1Y3Rpb24gYW5kIGRhdGEgVExCcyAgICovCglDUFdBSVQKCgkvKiBFbmFibGUgdGhlIEljYWNoZQkJCQkJCSAgICAqLwovKgoJbXJjCXAxNSwgMCwgcjAsIGMxLCBjMCwgMAoJb3JyCXIwLCByMCwgIzB4MTgwMAoJbWNyCXAxNSwgMCwgcjAsIGMxLCBjMCwgMAoJQ1BXQUlUCiovCgltb3YJcGMsIGxyCgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qCQkJCQkJCQkJICAgICovCi8qIEludGVycnVwdCBoYW5kbGluZwkJCQkJCQkgICAgKi8KLyoJCQkJCQkJCQkgICAgKi8KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgovKiBJUlEgc3RhY2sgZnJhbWUJCQkJCQkJICAgICovCgojZGVmaW5lIFNfRlJBTUVfU0laRQk3MgoKI2RlZmluZSBTX09MRF9SMAk2OAojZGVmaW5lIFNfUFNSCQk2NAojZGVmaW5lIFNfUEMJCTYwCiNkZWZpbmUgU19MUgkJNTYKI2RlZmluZSBTX1NQCQk1MgoKI2RlZmluZSBTX0lQCQk0OAojZGVmaW5lIFNfRlAJCTQ0CiNkZWZpbmUgU19SMTAJCTQwCiNkZWZpbmUgU19SOQkJMzYKI2RlZmluZSBTX1I4CQkzMgojZGVmaW5lIFNfUjcJCTI4CiNkZWZpbmUgU19SNgkJMjQKI2RlZmluZSBTX1I1CQkyMAojZGVmaW5lIFNfUjQJCTE2CiNkZWZpbmUgU19SMwkJMTIKI2RlZmluZSBTX1IyCQk4CiNkZWZpbmUgU19SMQkJNAojZGVmaW5lIFNfUjAJCTAKCiNkZWZpbmUgTU9ERV9TVkMgMHgxMwoKCS8qIHVzZSBiYWRfc2F2ZV91c2VyX3JlZ3MgZm9yIGFib3J0L3ByZWZldGNoL3VuZGVmL3N3aSAuLi4JICAgICovCgoJLm1hY3JvCWJhZF9zYXZlX3VzZXJfcmVncwoJc3ViCXNwLCBzcCwgI1NfRlJBTUVfU0laRQoJc3RtaWEJc3AsIHtyMCAtIHIxMn0JCQkvKiBDYWxsaW5nIHIwLXIxMgkgICAgKi8KCWFkZAlyOCwgc3AsICNTX1BDCgoJbGRyCXIyLCBfYXJtYm9vdF9lbmQKCWFkZAlyMiwgcjIsICNDT05GSUdfU1RBQ0tTSVpFCglzdWIJcjIsIHIyLCAjOAoJbGRtaWEJcjIsIHtyMiAtIHI0fQkJCS8qIGdldCBwYywgY3Bzciwgb2xkX3IwCSAgICAqLwoJYWRkCXIwLCBzcCwgI1NfRlJBTUVfU0laRQkJLyogcmVzdG9yZSBzcF9TVkMJICAgICovCgoJYWRkCXI1LCBzcCwgI1NfU1AKCW1vdglyMSwgbHIKCXN0bWlhCXI1LCB7cjAgLSByNH0JCQkvKiBzYXZlIHNwX1NWQywgbHJfU1ZDLCBwYywgY3Bzciwgb2xkX3IgKi8KCW1vdglyMCwgc3AKCS5lbmRtCgoKCS8qIHVzZSBpcnFfc2F2ZV91c2VyX3JlZ3MgLyBpcnFfcmVzdG9yZV91c2VyX3JlZ3MgZm9yCQkgICAgICovCgkvKiBJUlEvRklRIGhhbmRsaW5nCQkJCQkJICAgICAqLwoKCS5tYWNybwlpcnFfc2F2ZV91c2VyX3JlZ3MKCXN1YglzcCwgc3AsICNTX0ZSQU1FX1NJWkUKCXN0bWlhCXNwLCB7cjAgLSByMTJ9CQkJLyogQ2FsbGluZyByMC1yMTIJICAgICAqLwoJYWRkCXI4LCBzcCwgI1NfUEMKCXN0bWRiCXI4LCB7c3AsIGxyfV4JCQkvKiBDYWxsaW5nIFNQLCBMUgkgICAgICovCglzdHIJbHIsIFtyOCwgIzBdCQkJLyogU2F2ZSBjYWxsaW5nIFBDCSAgICAgKi8KCW1ycwlyNiwgc3BzcgoJc3RyCXI2LCBbcjgsICM0XQkJCS8qIFNhdmUgQ1BTUgkJICAgICAqLwoJc3RyCXIwLCBbcjgsICM4XQkJCS8qIFNhdmUgT0xEX1IwCQkgICAgICovCgltb3YJcjAsIHNwCgkuZW5kbQoKCS5tYWNybwlpcnFfcmVzdG9yZV91c2VyX3JlZ3MKCWxkbWlhCXNwLCB7cjAgLSBscn1eCQkJQCBDYWxsaW5nIHIwIC0gbHIKCW1vdglyMCwgcjAKCWxkcglsciwgW3NwLCAjU19QQ10JCQlAIEdldCBQQwoJYWRkCXNwLCBzcCwgI1NfRlJBTUVfU0laRQoJc3VicwlwYywgbHIsICM0CQkJQCByZXR1cm4gJiBtb3ZlIHNwc3Jfc3ZjIGludG8gY3BzcgoJLmVuZG0KCgkubWFjcm8gZ2V0X2JhZF9zdGFjawoJbGRyCXIxMywgX2FybWJvb3RfZW5kCQlAIHNldHVwIG91ciBtb2RlIHN0YWNrCglhZGQJcjEzLCByMTMsICNDT05GSUdfU1RBQ0tTSVpFCUAgcmVzaWRlcyBhdCB0b3Agb2Ygbm9ybWFsIHN0YWNrCglzdWIJcjEzLCByMTMsICM4CgoJc3RyCWxyLCBbcjEzXQkJCUAgc2F2ZSBjYWxsZXIgbHIgLyBzcHNyCgltcnMJbHIsIHNwc3IKCXN0cglsciwgW3IxMywgIzRdCgoJbW92CXIxMywgI01PREVfU1ZDCQkJQCBwcmVwYXJlIFNWQy1Nb2RlCgltc3IJc3Bzcl9jLCByMTMKCW1vdglsciwgcGMKCW1vdnMJcGMsIGxyCgkuZW5kbQoKCS5tYWNybyBnZXRfaXJxX3N0YWNrCQkJQCBzZXR1cCBJUlEgc3RhY2sKCWxkcglzcCwgSVJRX1NUQUNLX1NUQVJUCgkuZW5kbQoKCS5tYWNybyBnZXRfZmlxX3N0YWNrCQkJQCBzZXR1cCBGSVEgc3RhY2sKCWxkcglzcCwgRklRX1NUQUNLX1NUQVJUCgkuZW5kbQoKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKgkJCQkJCQkJCSAgICAqLwovKiBleGNlcHRpb24gaGFuZGxlcnMJCQkJCQkJICAgICovCi8qCQkJCQkJCQkJICAgICovCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKCS5hbGlnbgk1CnVuZGVmaW5lZF9pbnN0cnVjdGlvbjoKCWdldF9iYWRfc3RhY2sKCWJhZF9zYXZlX3VzZXJfcmVncwoJYmwJZG9fdW5kZWZpbmVkX2luc3RydWN0aW9uCgoJLmFsaWduCTUKc29mdHdhcmVfaW50ZXJydXB0OgoJZ2V0X2JhZF9zdGFjawoJYmFkX3NhdmVfdXNlcl9yZWdzCglibAlkb19zb2Z0d2FyZV9pbnRlcnJ1cHQKCgkuYWxpZ24JNQpwcmVmZXRjaF9hYm9ydDoKCWdldF9iYWRfc3RhY2sKCWJhZF9zYXZlX3VzZXJfcmVncwoJYmwJZG9fcHJlZmV0Y2hfYWJvcnQKCgkuYWxpZ24JNQpkYXRhX2Fib3J0OgoJZ2V0X2JhZF9zdGFjawoJYmFkX3NhdmVfdXNlcl9yZWdzCglibAlkb19kYXRhX2Fib3J0CgoJLmFsaWduCTUKbm90X3VzZWQ6CglnZXRfYmFkX3N0YWNrCgliYWRfc2F2ZV91c2VyX3JlZ3MKCWJsCWRvX25vdF91c2VkCgojaWZkZWYgQ09ORklHX1VTRV9JUlEKCgkuYWxpZ24JNQppcnE6CglnZXRfaXJxX3N0YWNrCglpcnFfc2F2ZV91c2VyX3JlZ3MKCWJsCWRvX2lycQoJaXJxX3Jlc3RvcmVfdXNlcl9yZWdzCgoJLmFsaWduCTUKZmlxOgoJZ2V0X2ZpcV9zdGFjawoJaXJxX3NhdmVfdXNlcl9yZWdzCQkvKiBzb21lb25lIG91Z2h0IHRvIHdyaXRlIGEgbW9yZSAgICAqLwoJYmwJZG9fZmlxCQkJLyogZWZmaWN0aW9uIGZpcV9zYXZlX3VzZXJfcmVncwkgICAgKi8KCWlycV9yZXN0b3JlX3VzZXJfcmVncwoKI2Vsc2UKCgkuYWxpZ24JNQppcnE6CglnZXRfYmFkX3N0YWNrCgliYWRfc2F2ZV91c2VyX3JlZ3MKCWJsCWRvX2lycQoKCS5hbGlnbgk1CmZpcToKCWdldF9iYWRfc3RhY2sKCWJhZF9zYXZlX3VzZXJfcmVncwoJYmwJZG9fZmlxCgojZW5kaWYKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLyogUmVzZXQgZnVuY3Rpb246IHRoZSBQWEEyNTAgZG9lc24ndCBoYXZlIGEgcmVzZXQgZnVuY3Rpb24sIHNvIHdlIGhhdmUgdG8gICovCi8qIHBlcmZvcm0gYSB3YXRjaGRvZyB0aW1lb3V0IGZvciBhIHNvZnQgcmVzZXQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwovKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgoJLmFsaWduCTUKLmdsb2JsIHJlc2V0X2NwdQoKCS8qIEZJWE1FOiB0aGlzIGNvZGUgaXMgUFhBMjUwIHNwZWNpZmljLiBIb3cgaXMgdGhpcyBoYW5kbGVkIG9uICAgICAgKi8KCS8qICAgICAgICBvdGhlciBYU2NhbGUgcHJvY2Vzc29ycz8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KCnJlc2V0X2NwdToKCgkvKiBXZSBzZXQgT1dFOldNRSAod2F0Y2hkb2cgZW5hYmxlKSBhbmQgd2FpdCB1bnRpbCB0aW1lb3V0IGhhcHBlbnMgICovCgoJbGRyCXIwLCBPU1RJTUVSX0JBU0UKCWxkcglyMSwgW3IwLCAjT1dFUl0KCW9ycglyMSwgcjEsICMweDAwMDEJCQkvKiBiaXQwOiBXTUUgICAgICAgICAgICAgICAgKi8KCXN0cglyMSwgW3IwLCAjT1dFUl0KCgkvKiBPUyB0aW1lciBkb2VzIG9ubHkgd3JhcCBldmVyeSAxMTY1IHNlY29uZHMsIHNvIHdlIGhhdmUgdG8gc2V0ICAgICovCgkvKiB0aGUgbWF0Y2ggcmVnaXN0ZXIgYXMgd2VsbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCgoJbGRyCXIxLCBbcjAsICNPU0NSXQkJCS8qIHJlYWQgT1MgdGltZXIgICAgICAgICAgICAqLwoJYWRkCXIxLCByMSwgIzB4ODAwCQkJLyogbGV0IE9TTVIzIG1hdGNoIGFmdGVyICAgICovCglhZGQJcjEsIHIxLCAjMHg4MDAJCQkvKiA0MDk2KigxLzMuNjg2NE1Ieik9MW1zICAgKi8KCXN0cglyMSwgW3IwLCAjT1NNUjNdCgpyZXNldF9lbmRsZXNzOgoKCWIJcmVzZXRfZW5kbGVzcwoK