LyoKICoKICogKEMpIENvcHlyaWdodCAyMDAyCiAqIERhbmllbCBFbmdzdHL2bSwgT21pY3JvbiBDZXRpIEFCIDxkYW5pZWxAb21pY3Jvbi5zZT4uCiAqCiAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCiAqIHByb2plY3QuCiAqCiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCiAqIE1BIDAyMTExLTEzMDcgVVNBCiAqLwoKI2luY2x1ZGUgPGNvbW1vbi5oPgojaW5jbHVkZSA8cGNpLmg+CiNpbmNsdWRlIDxkczE3MjIuaD4KI2luY2x1ZGUgPGFzbS9pby5oPgojaW5jbHVkZSA8YXNtL3BjaS5oPgojaW5jbHVkZSA8YXNtL2ljL3NjNTIwLmg+CiNpbmNsdWRlIDxhc20vaWMvcGNpLmg+CgpERUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsKCnN0YXRpYyB2b2lkIHBjaV9zYzUyMF9zcHVua19maXh1cF9pcnEoc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlLCBwY2lfZGV2X3QgZGV2KQp7CglpbnQgdmVyc2lvbiA9IHNjNTIwX21tY3ItPnN5c2luZm87CgoJLyogYSBjb25maWd1cmFibGUgbGlzdHMgb2YgaXJxcyB0byBzdGVhbAoJICogd2hlbiB3ZSBuZWVkIG9uZSAoYSBib2FyZCB3aXRoIG1vcmUgcGNpIGludGVycnVwdCBwaW5zCgkgKiB3b3VsZCB1c2UgYSBsYXJnZXIgdGFibGUgKi8KCXN0YXRpYyBpbnQgaXJxX2xpc3RbXSA9IHsKCQlDT05GSUdfU1lTX0ZJUlNUX1BDSV9JUlEsCgkJQ09ORklHX1NZU19TRUNPTkRfUENJX0lSUSwKCQlDT05GSUdfU1lTX1RISVJEX1BDSV9JUlEsCgkJQ09ORklHX1NZU19GT1JUSF9QQ0lfSVJRCgl9OwoJc3RhdGljIGludCBuZXh0X2lycV9pbmRleD0wOwoKCXVjaGFyIHRtcF9waW47CglpbnQgcGluOwoKCXBjaV9ob3NlX3JlYWRfY29uZmlnX2J5dGUoaG9zZSwgZGV2LCBQQ0lfSU5URVJSVVBUX1BJTiwgJnRtcF9waW4pOwoJcGluID0gdG1wX3BpbjsKCglwaW4tPTE7IC8qIHBjaSBjb25maWcgc3BhY2UgdXNlIDEtYmFzZWQgbnVtYmVyaW5nICovCglpZiAoLTEgPT0gcGluKSB7CgkJcmV0dXJuOyAvKiBkZXZpY2UgdXNlIG5vIGlycSAqLwoJfQoKCgkvKiBtYXAgZGV2aWNlIG51bWJlciArICBwaW4gdG8gYSBwaW4gb24gdGhlIHNjNTIwICovCglzd2l0Y2ggKFBDSV9ERVYoZGV2KSkgewoJY2FzZSA2OiAgLyogRVRIMCAqLwoJCXBpbis9U0M1MjBfUENJX0lOVEE7CgkJYnJlYWs7CgoJY2FzZSA3OiAgLyogRVRIMSAqLwoJCXBpbis9U0M1MjBfUENJX0lOVEI7CgkJYnJlYWs7CgoJY2FzZSA4OiAgLyogQ3J5cHRvICovCgkJcGluKz1TQzUyMF9QQ0lfSU5UQzsKCQlicmVhazsKCgljYXNlIDk6IC8qIFBNQyBzbG90ICovCgkJcGluKz1TQzUyMF9QQ0lfSU5URDsKCQlicmVhazsKCgljYXNlIDEwOiAvKiBQQy1DYXJkICovCgoJCWlmICh2ZXJzaW9uIDwgMTApIHsKCQkJcGluKz1TQzUyMF9QQ0lfSU5URDsKCQl9IGVsc2UgewoJCQlwaW4rPVNDNTIwX1BDSV9JTlRDOwoJCX0KCQlicmVhazsKCglkZWZhdWx0OgoJCXJldHVybjsKCX0KCglwaW4mPTM7IC8qIHdyYXAgYXJvdW5kICovCgoJaWYgKHNjNTIwX3BjaV9pbnRzW3Bpbl0gPT0gLTEpIHsKCQkvKiByZS1yb3V0ZSBvbmUgaW50ZXJydXB0IGZvciB1cyAqLwoJCWlmIChuZXh0X2lycV9pbmRleCA+IDMpIHsKCQkJcmV0dXJuOwoJCX0KCQlpZiAocGNpX3NjNTIwX3NldF9pcnEocGluLCBpcnFfbGlzdFtuZXh0X2lycV9pbmRleF0pKSB7CgkJCXJldHVybjsKCQl9CgkJbmV4dF9pcnFfaW5kZXgrKzsKCX0KCgoJaWYgKC0xICE9IHNjNTIwX3BjaV9pbnRzW3Bpbl0pIHsKCQlwY2lfaG9zZV93cml0ZV9jb25maWdfYnl0ZShob3NlLCBkZXYsIFBDSV9JTlRFUlJVUFRfTElORSwKCQkJCQkgICBzYzUyMF9wY2lfaW50c1twaW5dKTsKCX0KI2lmIDAKCXByaW50ZigiZml4dXBfaXJxOiBkZXZpY2UgJWQgcGluICVjIGlycSAlZFxuIiwKCSAgICAgICBQQ0lfREVWKGRldiksICdBJyArIHBpbiwgc2M1MjBfcGNpX2ludHNbcGluXSk7CiNlbmRpZgp9CgoKc3RhdGljIHZvaWQgcGNpX3NjNTIwX3NwdW5rX2NvbmZpZ3VyZV9jYXJkYnVzKHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSwKCQkJCQkgICAgICBwY2lfZGV2X3QgZGV2LCBzdHJ1Y3QgcGNpX2NvbmZpZ190YWJsZSAqdGUpCnsKCXUzMiBpb19iYXNlOwoJdTMyIHRlbXA7CgoJcGNpYXV0b19jb25maWdfZGV2aWNlKGhvc2UsIGRldik7CgoJcGNpX2hvc2Vfd3JpdGVfY29uZmlnX3dvcmQoaG9zZSwgZGV2LCBQQ0lfQ09NTUFORCwgMHgwNyk7ICAvKiBlbmFibGUgZGV2aWNlICovCglwY2lfaG9zZV93cml0ZV9jb25maWdfYnl0ZShob3NlLCBkZXYsIDB4MGMsIDB4MTApOyAgICAgICAgIC8qIGNhY2hlbGluZSBzaXplICovCglwY2lfaG9zZV93cml0ZV9jb25maWdfYnl0ZShob3NlLCBkZXYsIDB4MGQsIDB4NDApOyAgICAgICAgIC8qIGxhdGVuY3kgdGltZXIgKi8KCXBjaV9ob3NlX3dyaXRlX2NvbmZpZ19ieXRlKGhvc2UsIGRldiwgMHgxYiwgMHg0MCk7ICAgICAgICAgLyogY2FyZGJ1cyBsYXRlbmN5IHRpbWVyICovCglwY2lfaG9zZV93cml0ZV9jb25maWdfd29yZChob3NlLCBkZXYsIFBDSV9CUklER0VfQ09OVFJPTCwgMHgwMDQwKTsgIC8qIHJlc2V0IGNhcmRidXMgKi8KCXBjaV9ob3NlX3dyaXRlX2NvbmZpZ193b3JkKGhvc2UsIGRldiwgUENJX0JSSURHRV9DT05UUk9MLCAweDAwODApOyAgLyogcm91dGUgaW50ZXJydXB0cyB0aG91Z2ggRXhDQSAqLwoJcGNpX2hvc2Vfd3JpdGVfY29uZmlnX3dvcmQoaG9zZSwgZGV2LCAgMHg0NCwgMHgzZTApOyAvKiBtYXAgbGVnYWN5IEkvTyBwb3J0IHRvIDB4M2UwICovCgoJcGNpX2hvc2VfcmVhZF9jb25maWdfZHdvcmQoaG9zZSwgZGV2LCAgMHg4MCwgJnRlbXApOyAvKiBTeXN0ZW0gY29udHJvbCAqLwoJcGNpX2hvc2Vfd3JpdGVfY29uZmlnX2R3b3JkKGhvc2UsIGRldiwgIDB4ODAsIHRlbXAgfCAweDYwKTsgLyogU3lzdGVtIGNvbnRyb2w6IGRpc2FibGUgY2xvY2tydW4gKi8KCS8qIHJvdXRlIE1GMCB0byB+SU5UIGFuZCBNRjMgdG8gSVJRNwoJICogcmVzZXJ2ZSBhbGwgb3RoZXJzICovCglwY2lfaG9zZV93cml0ZV9jb25maWdfZHdvcmQoaG9zZSwgZGV2LCAweDhjLCAweDAwMDA3MDAyKTsKCXBjaV9ob3NlX3dyaXRlX2NvbmZpZ19ieXRlKGhvc2UsIGRldiwgMHg5MSwgMHgwMCk7ICAgIC8qIGNhcmQgY29udHJvbCAqLwoJcGNpX2hvc2Vfd3JpdGVfY29uZmlnX2J5dGUoaG9zZSwgZGV2LCAweDkyLCAweDYyKTsgICAgLyogZGV2aWNlIGNvbnRyb2wgKi8KCglpZiAodGUtPmRldmljZSAhPSAweGFjNTYpIHsKCQlwY2lfaG9zZV93cml0ZV9jb25maWdfYnl0ZShob3NlLCBkZXYsIDB4OTMsIDB4MjEpOyAgICAvKiBhc3luYyBpbnRlcnJ1cHQgZW5hYmxlICovCgkJcGNpX2hvc2Vfd3JpdGVfY29uZmlnX3dvcmQoaG9zZSwgZGV2LCAweGE4LCAweDAwMDApOyAgLyogcmVzZXQgR1BJTyAqLwoJCXBjaV9ob3NlX3dyaXRlX2NvbmZpZ193b3JkKGhvc2UsIGRldiwgMHhhYywgMHgwMDAwKTsgIC8qIHJlc2V0IEdQSU8gKi8KCQlwY2lfaG9zZV93cml0ZV9jb25maWdfd29yZChob3NlLCBkZXYsIDB4YWEsIDB4MDAwMCk7ICAvKiByZXNldCBHUElPICovCgkJcGNpX2hvc2Vfd3JpdGVfY29uZmlnX3dvcmQoaG9zZSwgZGV2LCAweGFlLCAweDAwMDApOyAgLyogcmVzZXQgR1BJTyAqLwoJfSBlbHNlIHsKCQlwY2lfaG9zZV93cml0ZV9jb25maWdfYnl0ZShob3NlLCBkZXYsIDB4OTMsIDB4MjApOyAgICAvKiAgKi8KCX0KCXBjaV9ob3NlX3dyaXRlX2NvbmZpZ193b3JkKGhvc2UsIGRldiwgMHhhNCwgMHg4MDAwKTsgIC8qIHJlc2V0IHBvd2VyIG1hbmFnZW1lbnQgKi8KCgoJcGNpX2hvc2VfcmVhZF9jb25maWdfZHdvcmQoaG9zZSwgZGV2LCBQQ0lfQkFTRV9BRERSRVNTXzAsICZpb19iYXNlKTsKCWlvX2Jhc2UgJj0gfjB4Zkw7CgoJd3JpdGViKDB4MDcsIGlvX2Jhc2UrMHg4MDMpOyAvKiByb3V0ZSBDU0MgaXJxIHRob3VnaCBFeENBIGFuZCBlbmFibGUgSVJRNyAqLwoJd3JpdGVsKDAsIGlvX2Jhc2UrMHgxMCk7ICAgICAvKiBDTEtSVU4gZGVmYXVsdCAqLwoJd3JpdGVsKDAsIGlvX2Jhc2UrMHgyMCk7ICAgICAvKiBDTEtSVU4gZGVmYXVsdCAqLwoKfQoKCnN0YXRpYyBzdHJ1Y3QgcGNpX2NvbmZpZ190YWJsZSBwY2lfc2M1MjBfc3B1bmtfY29uZmlnX3RhYmxlW10gPSB7Cgl7IDB4MTA0YywgMHhhYzUwLCBQQ0lfQU5ZX0lELCAwLCAweDBhLCAwLCBwY2lfc2M1MjBfc3B1bmtfY29uZmlndXJlX2NhcmRidXMsIHsgMCwgMCwgMH0gfSwKCXsgMHgxMDRjLCAweGFjNTYsIFBDSV9BTllfSUQsIDAsIDB4MGEsIDAsIHBjaV9zYzUyMF9zcHVua19jb25maWd1cmVfY2FyZGJ1cywgeyAwLCAwLCAwfSB9LAoJeyAwLCAwLCAwLCAwLCAwLCAwLCBOVUxMLCB7MCwwLDB9fQp9OwoKc3RhdGljIHN0cnVjdCBwY2lfY29udHJvbGxlciBzYzUyMF9zcHVua19ob3NlID0gewoJZml4dXBfaXJxOiBwY2lfc2M1MjBfc3B1bmtfZml4dXBfaXJxLAoJY29uZmlnX3RhYmxlOiBwY2lfc2M1MjBfc3B1bmtfY29uZmlnX3RhYmxlLAoJZmlyc3RfYnVzbm86IDB4MDAsCglsYXN0X2J1c25vOiAweGZmLAp9OwoKdm9pZCBwY2lfaW5pdF9ib2FyZCh2b2lkKQp7CglwY2lfc2M1MjBfaW5pdCgmc2M1MjBfc3B1bmtfaG9zZSk7Cn0KCi8qCiAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG1hcCBhIGNodW5rIG9mIHNpemUgYnl0ZXMKICogb2YgdGhlIHN5c3RlbSBhZGRyZXNzIHNwYWNlIHRvIHRoZSBJU0EgYnVzCiAqCiAqIFRoZSBmdW5jdGlvbiB3aWxsIHJldHVybiB0aGUgbWVtb3J5IGFkZHJlc3MKICogYXMgc2VlbiBieSB0aGUgaG9zdCAod2hpY2ggbWF5IHZlcnkgd2lsbCBiZSB0aGUKICogc2FtZSBhcyB0aGUgYnVzIGFkZHJlc3MpCiAqLwp1MzIgaXNhX21hcF9yb20odTMyIGJ1c19hZGRyLCBpbnQgc2l6ZSkKewoJdTMyIHBhcjsKCglwcmludGYoImlzYV9tYXBfcm9tIGFza2VkIHRvIG1hcCAlZCBieXRlcyBhdCAleFxuIiwKCSAgICAgICBzaXplLCBidXNfYWRkcik7CgoJcGFyID0gc2l6ZTsKCWlmIChwYXIgPCAweDgwMDAwKSB7CgkJcGFyID0gMHg4MDAwMDsKCX0KCXBhciA+Pj0gMTI7CglwYXItLTsKCXBhciY9MHg3ZjsKCXBhciA8PD0gMTg7CglwYXIgfD0gKGJ1c19hZGRyPj4xMik7CglwYXIgfD0gMHg1MDAwMDAwMDsKCglwcmludGYgKCJzZXR0aW5nIFBBUjExIHRvICV4XG4iLCBwYXIpOwoKCS8qIE1hcCByb20gMHgxMDAwMCB3aXRoIFBBUjEgKi8KCXNjNTIwX21tY3ItPnBhclsxMV0gPSBwYXI7CgoJcmV0dXJuIGJ1c19hZGRyOwp9CgovKgogKiB0aGlzIGZ1bmN0aW9uIHJlbW92ZWQgYW55IG1hcHBpbmcgY3JlYXRlZAogKiB3aXRoIHBjaV9nZXRfcm9tX3dpbmRvdygpCiAqLwp2b2lkIGlzYV91bm1hcF9yb20odTMyIGFkZHIpCnsKCXByaW50ZigiaXNhX3VubWFwX3JvbSBhc2tlZCB0byB1bm1hcCAleCIsIGFkZHIpOwoJaWYgKChhZGRyPj4xMikgPT0gKHNjNTIwX21tY3ItPnBhclsxMV0gJiAweDNmZmZmKSkgewoJCXNjNTIwX21tY3ItPnBhclsxMV0gPSAwOwoJCXByaW50ZigiIGRvbmVcbiIpOwoJCXJldHVybjsKCX0KCXByaW50ZigiIG5vdCBvdXJzXG4iKTsKfQoKI2RlZmluZSBQQ0lfUk9NX1RFTVBfU1BBQ0UgMHgxMDAwMAovKgogKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBtYXAgYSBjaHVuayBvZiBzaXplIGJ5dGVzCiAqIG9mIHRoZSBzeXN0ZW0gYWRkcmVzcyBzcGFjZSB0byB0aGUgUENJIGJ1cywKICogc3VpdGFibGUgdG8gbWFwIFBDSSBST01TIChidXMgYWRkcmVzcyA8IDE2TSkKICogdGhlIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIHRoZSBob3N0IG1lbW9yeSBhZGRyZXNzCiAqIHdoaWNoIHNob3VsZCBiZSBjb252ZXJ0ZWQgaW50byBhIGJ1cyBhZGRyZXNzCiAqIGJlZm9yZSB1c2VkIHRvIGNvbmZpZ3VyZSB0aGUgUENJIHJvbSBhZGRyZXNzCiAqIGRlY29kZXIKICovCnUzMiBwY2lfZ2V0X3JvbV93aW5kb3coc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlLCBpbnQgc2l6ZSkKewoJdTMyIHBhcjsKCglwYXIgPSBzaXplOwoJaWYgKHBhciA8IDB4ODAwMDApIHsKCQlwYXIgPSAweDgwMDAwOwoJfQoJcGFyID4+PSAxNjsKCXBhci0tOwoJcGFyJj0weDdmZjsKCXBhciA8PD0gMTQ7CglwYXIgfD0gKFBDSV9ST01fVEVNUF9TUEFDRT4+MTYpOwoJcGFyIHw9IDB4NzIwMDAwMDA7CgoJcHJpbnRmICgic2V0dGluZyBQQVIxIHRvICV4XG4iLCBwYXIpOwoKCS8qIE1hcCByb20gMHgxMDAwMCB3aXRoIFBBUjEgKi8KCXNjNTIwX21tY3ItPnBhclsxXSA9IHBhcjsKCglyZXR1cm4gUENJX1JPTV9URU1QX1NQQUNFOwp9CgovKgogKiB0aGlzIGZ1bmN0aW9uIHJlbW92ZWQgYW55IG1hcHBpbmcgY3JlYXRlZAogKiB3aXRoIHBjaV9nZXRfcm9tX3dpbmRvdygpCiAqLwp2b2lkIHBjaV9yZW1vdmVfcm9tX3dpbmRvdyhzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UsIHUzMiBhZGRyKQp7CglwcmludGYoInBjaV9yZW1vdmVfcm9tX3dpbmRvdzogJXgiLCBhZGRyKTsKCWlmIChhZGRyID09IFBDSV9ST01fVEVNUF9TUEFDRSkgewoJCXNjNTIwX21tY3ItPnBhclsxXSA9IDA7CgkJcHJpbnRmKCIgZG9uZVxuIik7CgkJcmV0dXJuOwoJfQoJcHJpbnRmKCIgbm90IG91cnNcbiIpOwoKfQoKLyoKICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgaW4gb3JkZXIgdG8gcHJvdmlkZSBhY2NlcyB0byB0aGUKICogbGVnYWN5IHZpZGVvIEkvTyBwb3J0cyBvbiB0aGUgUENJIGJ1cy4KICogQWZ0ZXIgdGhpcyBmdW5jdGlvbiBhY2Nlc3NlcyB0byBJL08gcG9ydHMgMHgzYjAtMHgzYmIgYW5kCiAqIDB4M2MwLTB4M2RmIHNodWxkIHJlc3VsdCBpbiB0cmFuc2FjdGlvbnMgb24gdGhlIFBDSSBidXMuCiAqCiAqLwppbnQgcGNpX2VuYWJsZV9sZWdhY3lfdmlkZW9fcG9ydHMoc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlKQp7CgkvKiBNYXAgdmlkZW8gbWVtb3J5IHRvIDB4YTAwMDAqLwoJc2M1MjBfbW1jci0+cGFyWzBdID0gMHg3MjAwNDAwYTsKCgkvKiBmb3J3YXJkIGFsbCBJL08gYWNjZXNzZXMgdG8gUENJICovCglzYzUyMF9tbWNyLT5hZGRkZWNjdGwgPSBzYzUyMF9tbWNyLT5hZGRkZWNjdGwgfCBJT19IT0xFX0RFU1RfUENJOwoKCgkvKiBzbyB3ZSBtYXAgYXdheSBhbGwgaW8gcG9ydHMgdG8gcGNpIChvbmx5IHdheSB0byBhY2Nlc3MgcGNpIGlvCgkgKiBiZWxvdyAweDQwMC4gQnV0IHRoZW4gd2UgaGF2ZSB0byBtYXAgYmFjayB0aGUgcG9ydGlvbnMgdGhhdCB3ZSBkb250CgkgKiB1c2Ugc28gdGhhdCB0aGUgZ2VuZXJhdGUgY3ljbGVzIG9uIHRoZSBHUElPIGJ1cyB3aGVyZSB0aGUgc2lvIGFuZAoJICogSVNBIHNsb3RzIGFyZSBjb25uZWN0ZWQsIHRoaXMgcmVxdXJlIHRoZSB1c2Ugb2Ygc2V2ZXJhbCBQQVIgcmVnaXN0ZXJzCgkgKi8KCgkvKiBicmluZyAweDEwMCAtIDB4MmY3IGJhY2sgdG8gSVNBIHVzaW5nIFBBUjUgKi8KCXNjNTIwX21tY3ItPnBhcls1XSA9IDB4MzFmNzAxMDA7CgoJLyogY29tMiB1c2UgMmY4LTJmZiAqLwoKCS8qIGJyaW5nIDB4MzAwIC0gMHgzYWYgYmFjayB0byBJU0EgdXNpbmcgUEFSNyAqLwoJc2M1MjBfbW1jci0+cGFyWzddID0gMHgzMGFmMDMwMDsKCgkvKiB2Z2EgdXNlIDNiMC0zYmIgKi8KCgkvKiBicmluZyAweDNiYyAtIDB4M2JmIGJhY2sgdG8gSVNBIHVzaW5nIFBBUjggKi8KCXNjNTIwX21tY3ItPnBhcls4XSA9IDB4MzAwMzAzYmM7CgoJLyogdmdhIHVzZSAzYzAtM2RmICovCgoJLyogYnJpbmcgMHgzZTAgLSAweDNmNyBiYWNrIHRvIElTQSB1c2luZyBQQVI5ICovCglzYzUyMF9tbWNyLT5wYXJbOV0gPSAweDMwMTcwM2UwOwoKCS8qIGNvbTEgdXNlIDNmOC0zZmYgKi8KCglyZXR1cm4gMDsKfQo=