LyoKICogIGFybWJvb3QgLSBTdGFydHVwIENvZGUgZm9yIEFSTTcyMCBDUFUtY29yZQogKgogKiAgQ29weXJpZ2h0IChjKSAyMDAxCU1hcml1cyBHcvZnZXIgPG1hZ0BzeXNnby5kZT4KICogIENvcHlyaWdodCAoYykgMjAwMglBbGV4IFr8cGtlIDxhenVAc3lzZ28uZGU+CiAqCiAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCiAqIHByb2plY3QuCiAqCiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCSBTZWUgdGhlCiAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCiAqIE1BIDAyMTExLTEzMDcgVVNBCiAqLwoKCiNpbmNsdWRlIDxjb25maWcuaD4KI2luY2x1ZGUgPHZlcnNpb24uaD4KI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgoKLyoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICoKICogSnVtcCB2ZWN0b3IgdGFibGUgYXMgaW4gdGFibGUgMy4xIGluIFsxXQogKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKi8KCgouZ2xvYmwgX3N0YXJ0Cl9zdGFydDogYglyZXNldAoJbGRyCXBjLCBfdW5kZWZpbmVkX2luc3RydWN0aW9uCglsZHIJcGMsIF9zb2Z0d2FyZV9pbnRlcnJ1cHQKCWxkcglwYywgX3ByZWZldGNoX2Fib3J0CglsZHIJcGMsIF9kYXRhX2Fib3J0CiNpZmRlZiBDT05GSUdfTFBDMjI5MgoJLndvcmQJMHhCNDQwNUY3NiAvKiAyJ3MgY29tcGxlbWVudCBvZiB0aGUgY2hlY2tzdW0gb2YgdGhlIHZlY3RvcnMgKi8KI2Vsc2UKCWxkcglwYywgX25vdF91c2VkCiNlbmRpZgoJbGRyCXBjLCBfaXJxCglsZHIJcGMsIF9maXEKCl91bmRlZmluZWRfaW5zdHJ1Y3Rpb246IC53b3JkIHVuZGVmaW5lZF9pbnN0cnVjdGlvbgpfc29mdHdhcmVfaW50ZXJydXB0Ogkud29yZCBzb2Z0d2FyZV9pbnRlcnJ1cHQKX3ByZWZldGNoX2Fib3J0Ogkud29yZCBwcmVmZXRjaF9hYm9ydApfZGF0YV9hYm9ydDoJCS53b3JkIGRhdGFfYWJvcnQKX25vdF91c2VkOgkJLndvcmQgbm90X3VzZWQKX2lycToJCQkud29yZCBpcnEKX2ZpcToJCQkud29yZCBmaXEKCgkuYmFsaWdubCAxNiwweGRlYWRiZWVmCgoKLyoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICoKICogU3RhcnR1cCBDb2RlIChyZXNldCB2ZWN0b3IpCiAqCiAqIGRvIGltcG9ydGFudCBpbml0IG9ubHkgaWYgd2UgZG9uJ3Qgc3RhcnQgZnJvbSBSQU0hCiAqIHJlbG9jYXRlIGFybWJvb3QgdG8gcmFtCiAqIHNldHVwIHN0YWNrCiAqIGp1bXAgdG8gc2Vjb25kIHN0YWdlCiAqCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqLwoKX1RFWFRfQkFTRToKCS53b3JkCVRFWFRfQkFTRQoKLmdsb2JsIF9hcm1ib290X3N0YXJ0Cl9hcm1ib290X3N0YXJ0OgoJLndvcmQgX3N0YXJ0CgovKgogKiBUaGVzZSBhcmUgZGVmaW5lZCBpbiB0aGUgYm9hcmQtc3BlY2lmaWMgbGlua2VyIHNjcmlwdC4KICovCi5nbG9ibCBfYnNzX3N0YXJ0Cl9ic3Nfc3RhcnQ6Cgkud29yZCBfX2Jzc19zdGFydAoKLmdsb2JsIF9ic3NfZW5kCl9ic3NfZW5kOgoJLndvcmQgX2VuZAoKI2lmZGVmIENPTkZJR19VU0VfSVJRCi8qIElSUSBzdGFjayBtZW1vcnkgKGNhbGN1bGF0ZWQgYXQgcnVuLXRpbWUpICovCi5nbG9ibCBJUlFfU1RBQ0tfU1RBUlQKSVJRX1NUQUNLX1NUQVJUOgoJLndvcmQJMHgwYmFkYzBkZQoKLyogSVJRIHN0YWNrIG1lbW9yeSAoY2FsY3VsYXRlZCBhdCBydW4tdGltZSkgKi8KLmdsb2JsIEZJUV9TVEFDS19TVEFSVApGSVFfU1RBQ0tfU1RBUlQ6Cgkud29yZCAweDBiYWRjMGRlCiNlbmRpZgoKCi8qCiAqIHRoZSBhY3R1YWwgcmVzZXQgY29kZQogKi8KCnJlc2V0OgoJLyoKCSAqIHNldCB0aGUgY3B1IHRvIFNWQzMyIG1vZGUKCSAqLwoJbXJzCXIwLGNwc3IKCWJpYwlyMCxyMCwjMHgxZgoJb3JyCXIwLHIwLCMweDEzCgltc3IJY3BzcixyMAoKCS8qCgkgKiB3ZSBkbyBzeXMtY3JpdGljYWwgaW5pdHMgb25seSBhdCByZWJvb3QsCgkgKiBub3Qgd2hlbiBib290aW5nIGZyb20gcmFtIQoJICovCiNpZm5kZWYgQ09ORklHX1NLSVBfTE9XTEVWRUxfSU5JVAoJYmwJY3B1X2luaXRfY3JpdAojZW5kaWYKCiNpZmRlZiBDT05GSUdfTFBDMjI5MgoJYmwJbG93bGV2ZWxfaW5pdAojZW5kaWYKCiNpZm5kZWYgQ09ORklHX1NLSVBfUkVMT0NBVEVfVUJPT1QKcmVsb2NhdGU6CQkJCS8qIHJlbG9jYXRlIFUtQm9vdCB0byBSQU0JICAgICovCglhZHIJcjAsIF9zdGFydAkJLyogcjAgPC0gY3VycmVudCBwb3NpdGlvbiBvZiBjb2RlICAgKi8KCWxkcglyMSwgX1RFWFRfQkFTRQkJLyogdGVzdCBpZiB3ZSBydW4gZnJvbSBmbGFzaCBvciBSQU0gKi8KCWNtcAlyMCwgcjEJCQkvKiBkb24ndCByZWxvYyBkdXJpbmcgZGVidWcJICAgICovCgliZXEJc3RhY2tfc2V0dXAKCiNpZiBURVhUX0JBU0UKI2lmbmRlZiBDT05GSUdfTFBDMjI5MiAvKiBhbHJlYWR5IGRvbmUgaW4gbG93bGV2ZWxfaW5pdCAqLwoJbGRyCXIyLCA9MHgwCQkvKiBSZWxvY2F0ZSB0aGUgZXhjZXB0aW9uIHZlY3RvcnMgICAqLwoJY21wCXIxLCByMgkJCS8qIGFuZCBhc3NvY2lhdGVkIGRhdGEgdG8gYWRkcmVzcyAgICovCglsZG1uZWlhIHIwISwge3IzLXIxMH0JCS8qIDB4MC4gRG8gbm90aGluZyBpZiBURVhUX0JBU0UgaXMgICovCglzdG1uZWlhIHIyISwge3IzLXIxMH0JCS8qIDB4MC4gQ29weSB0aGUgZmlyc3QgMTUgd29yZHMuICAgICovCglsZG1uZWlhIHIwLCB7cjMtcjl9CglzdG1uZWlhIHIyLCB7cjMtcjl9CglhZHJuZQlyMCwgX3N0YXJ0CQkvKiByZXN0b3JlIHIwCQkJICAgICovCiNlbmRpZgkvKiAhQ09ORklHX0xQQzIyOTIgKi8KI2VuZGlmCgoJbGRyCXIyLCBfYXJtYm9vdF9zdGFydAoJbGRyCXIzLCBfYnNzX3N0YXJ0CglzdWIJcjIsIHIzLCByMgkJLyogcjIgPC0gc2l6ZSBvZiBhcm1ib290CSAgICAqLwoJYWRkCXIyLCByMCwgcjIJCS8qIHIyIDwtIHNvdXJjZSBlbmQgYWRkcmVzcwkgICAgKi8KCmNvcHlfbG9vcDoKCWxkbWlhCXIwISwge3IzLXIxMH0JCS8qIGNvcHkgZnJvbSBzb3VyY2UgYWRkcmVzcyBbcjBdICAgICovCglzdG1pYQlyMSEsIHtyMy1yMTB9CQkvKiBjb3B5IHRvICAgdGFyZ2V0IGFkZHJlc3MgW3IxXSAgICAqLwoJY21wCXIwLCByMgkJCS8qIHVudGlsIHNvdXJjZSBlbmQgYWRkcmVlZSBbcjJdICAgICovCglibGUJY29weV9sb29wCgojZW5kaWYJLyogQ09ORklHX1NLSVBfUkVMT0NBVEVfVUJPT1QgKi8KCgkvKiBTZXQgdXAgdGhlIHN0YWNrCQkJCQkJICAgICovCnN0YWNrX3NldHVwOgoJbGRyCXIwLCBfVEVYVF9CQVNFCQkvKiB1cHBlciAxMjggS2lCOiByZWxvY2F0ZWQgdWJvb3QgICAqLwoJc3ViCXIwLCByMCwgI0NGR19NQUxMT0NfTEVOIC8qIG1hbGxvYyBhcmVhCQkJICAgICovCglzdWIJcjAsIHIwLCAjQ0ZHX0dCTF9EQVRBX1NJWkUgLyogYmRpbmZvCQkJICAgICovCiNpZmRlZiBDT05GSUdfVVNFX0lSUQoJc3ViCXIwLCByMCwgIyhDT05GSUdfU1RBQ0tTSVpFX0lSUStDT05GSUdfU1RBQ0tTSVpFX0ZJUSkKI2VuZGlmCglzdWIJc3AsIHIwLCAjMTIJCS8qIGxlYXZlIDMgd29yZHMgZm9yIGFib3J0LXN0YWNrICAgICovCgpjbGVhcl9ic3M6CglsZHIJcjAsIF9ic3Nfc3RhcnQJCS8qIGZpbmQgc3RhcnQgb2YgYnNzIHNlZ21lbnQJICAgICovCglsZHIJcjEsIF9ic3NfZW5kCQkvKiBzdG9wIGhlcmUJCQkgICAgKi8KCW1vdglyMiwgIzB4MDAwMDAwMDAJCS8qIGNsZWFyCQkJICAgICovCgpjbGJzc19sOnN0cglyMiwgW3IwXQkJLyogY2xlYXIgbG9vcC4uLgkJICAgICovCglhZGQJcjAsIHIwLCAjNAoJY21wCXIwLCByMQoJYmxlCWNsYnNzX2wKCglsZHIJcGMsIF9zdGFydF9hcm1ib290Cgpfc3RhcnRfYXJtYm9vdDogLndvcmQgc3RhcnRfYXJtYm9vdAoKLyoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICoKICogQ1BVX2luaXRfY3JpdGljYWwgcmVnaXN0ZXJzCiAqCiAqIHNldHVwIGltcG9ydGFudCByZWdpc3RlcnMKICogc2V0dXAgbWVtb3J5IHRpbWluZwogKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKi8KCiNpZiBkZWZpbmVkKENPTkZJR19JTVBBNykgfHwgZGVmaW5lZChDT05GSUdfRVA3MzEyKSB8fCBkZWZpbmVkKENPTkZJR19BUk1BRElMTE8pCgovKiBJbnRlcnVwdC1Db250cm9sbGVyIGJhc2UgYWRkcmVzc2VzICovCklOVE1SMToJCS53b3JkCTB4ODAwMDAyODAgQCAzMiBiaXQgc2l6ZQpJTlRNUjI6CQkud29yZAkweDgwMDAxMjgwIEAgMTYgYml0IHNpemUKSU5UTVIzOgkJLndvcmQJMHg4MDAwMjI4MCBAICA4IGJpdCBzaXplCgovKiBTWVNDT05zICovClNZU0NPTjE6CS53b3JkCTB4ODAwMDAxMDAKU1lTQ09OMjoJLndvcmQJMHg4MDAwMTEwMApTWVNDT04zOgkud29yZAkweDgwMDAyMjAwCgojZGVmaW5lIENMS0NUTAkgICAgICAgMHg2ICAvKiBtYXNrICovCiNkZWZpbmUgQ0xLQ1RMXzE4ICAgICAgMHgwICAvKiAxOC40MzIgTUh6ICovCiNkZWZpbmUgQ0xLQ1RMXzM2ICAgICAgMHgyICAvKiAzNi44NjQgTUh6ICovCiNkZWZpbmUgQ0xLQ1RMXzQ5ICAgICAgMHg0ICAvKiA0OS4xNTIgTUh6ICovCiNkZWZpbmUgQ0xLQ1RMXzczICAgICAgMHg2ICAvKiA3My43MjggTUh6ICovCgojZWxpZiBkZWZpbmVkKENPTkZJR19MUEMyMjkyKQpQTExDRkdfQURSOgkud29yZAlQTExDRkcKUExMRkVFRF9BRFI6CS53b3JkCVBMTEZFRUQKUExMQ09OX0FEUjoJLndvcmQJUExMQ09OClBMTFNUQVRfQURSOgkud29yZAlQTExTVEFUClZQQkRJVl9BRFI6CS53b3JkCVZQQkRJVgpNRU1NQVBfQURSOgkud29yZAlNRU1NQVAKCiNlbmRpZgoKY3B1X2luaXRfY3JpdDoKI2lmIGRlZmluZWQoQ09ORklHX0lNUEE3KSB8fCBkZWZpbmVkKENPTkZJR19FUDczMTIpIHx8IGRlZmluZWQoQ09ORklHX0FSTUFESUxMTykKCgkvKgoJICogbWFzayBhbGwgSVJRcyBieSBjbGVhcmluZyBhbGwgYml0cyBpbiB0aGUgSU5UTVJzCgkgKi8KCW1vdglyMSwgIzB4MDAKCWxkcglyMCwgSU5UTVIxCglzdHIJcjEsIFtyMF0KCWxkcglyMCwgSU5UTVIyCglzdHIJcjEsIFtyMF0KCWxkcglyMCwgSU5UTVIzCglzdHIJcjEsIFtyMF0KCgkvKgoJICogZmx1c2ggdjQgSS9EIGNhY2hlcwoJICovCgltb3YJcjAsICMwCgltY3IJcDE1LCAwLCByMCwgYzcsIGM3LCAwCS8qIGZsdXNoIHYzL3Y0IGNhY2hlICovCgltY3IJcDE1LCAwLCByMCwgYzgsIGM3LCAwCS8qIGZsdXNoIHY0IFRMQiAqLwoKCS8qCgkgKiBkaXNhYmxlIE1NVSBzdHVmZiBhbmQgY2FjaGVzCgkgKi8KCW1yYwlwMTUsMCxyMCxjMSxjMAoJYmljCXIwLCByMCwgIzB4MDAwMDIzMDAJQCBjbGVhciBiaXRzIDEzLCA5OjggKC0tVi0gLS1SUykKCWJpYwlyMCwgcjAsICMweDAwMDAwMDhmCUAgY2xlYXIgYml0cyA3LCAzOjAgKEItLS0gV0NBTSkKCW9ycglyMCwgcjAsICMweDAwMDAwMDAyCUAgc2V0IGJpdCAyIChBKSBBbGlnbgoJbWNyCXAxNSwwLHIwLGMxLGMwCiNlbGlmIGRlZmluZWQoQ09ORklHX05FVEFSTSkKCS8qCgkgKiBwcmlvciB0byBzb2Z0d2FyZSByZXNldCA6IG5lZWQgdG8gc2V0IHBpbiBQT1JUQzQgdG8gYmUgKkhSRVNFVAoJICovCglsZHIJcjAsID1ORVRBUk1fR0VOX01PRFVMRV9CQVNFCglsZHIJcjEsID0oTkVUQVJNX0dFTl9QT1JUX01PREUoMHgxMCkgfCBcCgkJCU5FVEFSTV9HRU5fUE9SVF9ESVIoMHgxMCkpCglzdHIJcjEsIFtyMCwgIytORVRBUk1fR0VOX1BPUlRDXQoJLyoKCSAqIHNvZnR3YXJlIHJlc2V0IDogc2VlIEhXIFJlZi4gR3VpZGUgOC4yLjQgOiBTb2Z0d2FyZSBTZXJ2aWNlIHJlZ2lzdGVyCgkgKgkJICAgIGZvciBhbiBleHBsYW5hdGlvbiBvZiB0aGlzIHByb2Nlc3MKCSAqLwoJbGRyCXIwLCA9TkVUQVJNX0dFTl9NT0RVTEVfQkFTRQoJbGRyCXIxLCA9TkVUQVJNX0dFTl9TV19TVkNfUkVTRVRBCglzdHIJcjEsIFtyMCwgIytORVRBUk1fR0VOX1NPRlRXQVJFX1NFUlZJQ0VdCglsZHIJcjEsID1ORVRBUk1fR0VOX1NXX1NWQ19SRVNFVEIKCXN0cglyMSwgW3IwLCAjK05FVEFSTV9HRU5fU09GVFdBUkVfU0VSVklDRV0KCWxkcglyMSwgPU5FVEFSTV9HRU5fU1dfU1ZDX1JFU0VUQQoJc3RyCXIxLCBbcjAsICMrTkVUQVJNX0dFTl9TT0ZUV0FSRV9TRVJWSUNFXQoJbGRyCXIxLCA9TkVUQVJNX0dFTl9TV19TVkNfUkVTRVRCCglzdHIJcjEsIFtyMCwgIytORVRBUk1fR0VOX1NPRlRXQVJFX1NFUlZJQ0VdCgkvKgoJICogc2V0dXAgUExMIGFuZCBTeXN0ZW0gQ29uZmlnCgkgKi8KCWxkcglyMCwgPU5FVEFSTV9HRU5fTU9EVUxFX0JBU0UKCglsZHIJcjEsID0oCU5FVEFSTV9HRU5fU1lTX0NGR19MRU5ESUFOIHwgXAoJCQlORVRBUk1fR0VOX1NZU19DRkdfQlVTRlVMTCB8IFwKCQkJTkVUQVJNX0dFTl9TWVNfQ0ZHX1VTRVJfRU4gfCBcCgkJCU5FVEFSTV9HRU5fU1lTX0NGR19BTElHTl9BQk9SVCB8IFwKCQkJTkVUQVJNX0dFTl9TWVNfQ0ZHX0JVU0FSQl9JTlQgfCBcCgkJCU5FVEFSTV9HRU5fU1lTX0NGR19CVVNNT05fRU4gKQoKCXN0cglyMSwgW3IwLCAjK05FVEFSTV9HRU5fU1lTVEVNX0NPTlRST0xdCgojaWZuZGVmIENPTkZJR19ORVRBUk1fUExMX0JZUEFTUwoJbGRyCXIxLCA9KAlORVRBUk1fR0VOX1BMTF9DVExfUExMQ05UKE5FVEFSTV9QTExfQ09VTlRfVkFMKSB8IFwKCQkJTkVUQVJNX0dFTl9QTExfQ1RMX1BPTFRTVF9ERUYgfCBcCgkJCU5FVEFSTV9HRU5fUExMX0NUTF9JTkRJVigxKSB8IFwKCQkJTkVUQVJNX0dFTl9QTExfQ1RMX0lDUF9ERUYgfCBcCgkJCU5FVEFSTV9HRU5fUExMX0NUTF9PVVRESVYoMikgKQoJc3RyCXIxLCBbcjAsICMrTkVUQVJNX0dFTl9QTExfQ09OVFJPTF0KI2VuZGlmCgoJLyoKCSAqIG1hc2sgYWxsIElSUXMgYnkgY2xlYXJpbmcgYWxsIGJpdHMgaW4gdGhlIElOVE1ScwoJICovCgltb3YJcjEsICMwCglsZHIJcjAsID1ORVRBUk1fR0VOX01PRFVMRV9CQVNFCglzdHIJcjEsIFtyMCwgIytORVRBUk1fR0VOX0lOVFJfRU5BQkxFXQoKI2VsaWYgZGVmaW5lZChDT05GSUdfUzNDNDUxMEIpCgoJLyoKCSAqIE1hc2sgb2ZmIGFsbCBJUlEgc291cmNlcwoJICovCglsZHIJcjEsID1SRUdfSU5UTUFTSwoJbGRyCXIwLCA9MHgzRkZGRkYKCXN0cglyMCwgW3IxXQoKCS8qCgkgKiBEaXNhYmxlIENhY2hlCgkgKi8KCWxkciByMCwgPVJFR19TWVNDRkcKCWxkciByMSwgPTB4ODNmZmZmYTAJLyogY2FjaGUtZGlzYWJsZWQgICovCglzdHIgcjEsIFtyMF0KCiNlbGlmIGRlZmluZWQoQ09ORklHX0lOVEVHUkFUT1IpICYmIGRlZmluZWQoQ09ORklHX0FSQ0hfSU5URUdSQVRPUikKCS8qIE5vIHNwZWNpZmljIGluaXRpYWxpc2F0aW9uIGZvciBJbnRlZ3JhdG9yQVAvQ003MjBUIGFzIHlldCAqLwojZWxpZiBkZWZpbmVkKENPTkZJR19MUEMyMjkyKQoJLyogU2V0LXVwIFBMTCAqLwoJbW92CXIzLCAjMHhBQQoJbW92CXI0LCAjMHg1NQoJLyogRmlyc3QgZGlzY29ubmVjdCBhbmQgZGlzYWJsZSB0aGUgUExMICovCQoJbGRyCXIwLCBQTExDT05fQURSCgltb3YJcjEsICMweDAwCglzdHIJcjEsIFtyMF0KCWxkcglyMCwgUExMRkVFRF9BRFIgLyogc3RhcnQgZmVlZCBzZXF1ZW5jZSAqLwoJc3RyCXIzLCBbcjBdCglzdHIJcjQsIFtyMF0JLyogZmVlZCBzZXF1ZW5jZSBkb25lICovCQoJLyogU2V0IG5ldyBNIGFuZCBQIHZhbHVlcyAqLwoJbGRyCXIwLCBQTExDRkdfQURSCgltb3YJcjEsICMweDIzCS8qIE09NCBhbmQgUD0yICovCglzdHIJcjEsIFtyMF0KCWxkcglyMCwgUExMRkVFRF9BRFIgLyogc3RhcnQgZmVlZCBzZXF1ZW5jZSAqLwoJc3RyCXIzLCBbcjBdCglzdHIJcjQsIFtyMF0JLyogZmVlZCBzZXF1ZW5jZSBkb25lICovCgkvKiBUaGVuIGVuYWJsZSB0aGUgUExMICovCglsZHIJcjAsIFBMTENPTl9BRFIKCW1vdglyMSwgIzB4MDEJLyogUExMIGVuYWJsZSBiaXQgKi8KCXN0cglyMSwgW3IwXQoJbGRyCXIwLCBQTExGRUVEX0FEUiAvKiBzdGFydCBmZWVkIHNlcXVlbmNlICovCglzdHIJcjMsIFtyMF0KCXN0cglyNCwgW3IwXQkvKiBmZWVkIHNlcXVlbmNlIGRvbmUgKi8KCS8qIFdhaXQgZm9yIHRoZSBsb2NrICovCQoJbGRyCXIwLCBQTExTVEFUX0FEUgoJbW92CXIxLCAjMHg0MDAJLyogbG9jayBiaXQgKi8KbG9ja19sb29wOgkKCWxkcglyMiwgW3IwXQoJYW5kCXIyLCByMSwgcjIKCWNtcAlyMiwgIzAKCWJlcQlsb2NrX2xvb3AKCS8qIEFuZCBmaW5hbGx5IGNvbm5lY3QgdGhlIFBMTCAqLwoJbGRyCXIwLCBQTExDT05fQURSCgltb3YJcjEsICMweDAzCS8qIFBMTCBlbmFibGUgYml0IGFuZCBjb25uZWN0IGJpdCAqLwoJc3RyCXIxLCBbcjBdCglsZHIJcjAsIFBMTEZFRURfQURSIC8qIHN0YXJ0IGZlZWQgc2VxdWVuY2UgKi8KCXN0cglyMywgW3IwXQoJc3RyCXI0LCBbcjBdCS8qIGZlZWQgc2VxdWVuY2UgZG9uZSAqLwkJCgkvKiBTZXQtdXAgVlBCRElWIHJlZ2lzdGVyICovCglsZHIJcjAsIFZQQkRJVl9BRFIKCW1vdglyMSwgIzB4MDEJLyogVlBCIGNsb2NrIGlzIHNhbWUgYXMgcHJvY2VzcyBjbG9jayAqLwoJc3RyCXIxLCBbcjBdCiNlbHNlCiNlcnJvciBObyBjcHVfaW5pdF9jcml0KCkgZGVmaW5lZCBmb3IgY3VycmVudCBDUFUgdHlwZQojZW5kaWYKCiNpZmRlZiBDT05GSUdfQVJNN19SRVZECgkvKiBzZXQgY2xvY2sgc3BlZWQgKi8KCS8qICEhISB3ZSBydW4gQCAzNiBNSHogZHVlIHRvIGEgaGFyZHdhcmUgZmxhdyBpbiBSZXYuIEQgcHJvY2Vzc29ycyAqLwoJLyogISEhIG5vdCBkb2luZyBEUkFNIHJlZnJlc2ggcHJvcGVybHkhICovCglsZHIJcjAsIFNZU0NPTjMKCWxkcglyMSwgW3IwXQoJYmljCXIxLCByMSwgI0NMS0NUTAoJb3JyCXIxLCByMSwgI0NMS0NUTF8zNgoJc3RyCXIxLCBbcjBdCiNlbmRpZgoKI2lmbmRlZiBDT05GSUdfTFBDMjI5MgoJbW92CWlwLCBscgoJLyoKCSAqIGJlZm9yZSByZWxvY2F0aW5nLCB3ZSBoYXZlIHRvIHNldHVwIFJBTSB0aW1pbmcKCSAqIGJlY2F1c2UgbWVtb3J5IHRpbWluZyBpcyBib2FyZC1kZXBlbmRlbnQsIHlvdSB3aWxsCgkgKiBmaW5kIGEgbG93bGV2ZWxfaW5pdC5TIGluIHlvdXIgYm9hcmQgZGlyZWN0b3J5LgoJICovCglibAlsb3dsZXZlbF9pbml0Cgltb3YJbHIsIGlwCiNlbmRpZgoKCW1vdglwYywgbHIKCgovKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKgogKiBJbnRlcnJ1cHQgaGFuZGxpbmcKICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICovCgpACkAgSVJRIHN0YWNrIGZyYW1lLgpACiNkZWZpbmUgU19GUkFNRV9TSVpFCTcyCgojZGVmaW5lIFNfT0xEX1IwCTY4CiNkZWZpbmUgU19QU1IJCTY0CiNkZWZpbmUgU19QQwkJNjAKI2RlZmluZSBTX0xSCQk1NgojZGVmaW5lIFNfU1AJCTUyCgojZGVmaW5lIFNfSVAJCTQ4CiNkZWZpbmUgU19GUAkJNDQKI2RlZmluZSBTX1IxMAkJNDAKI2RlZmluZSBTX1I5CQkzNgojZGVmaW5lIFNfUjgJCTMyCiNkZWZpbmUgU19SNwkJMjgKI2RlZmluZSBTX1I2CQkyNAojZGVmaW5lIFNfUjUJCTIwCiNkZWZpbmUgU19SNAkJMTYKI2RlZmluZSBTX1IzCQkxMgojZGVmaW5lIFNfUjIJCTgKI2RlZmluZSBTX1IxCQk0CiNkZWZpbmUgU19SMAkJMAoKI2RlZmluZSBNT0RFX1NWQyAweDEzCiNkZWZpbmUgSV9CSVQJIDB4ODAKCi8qCiAqIHVzZSBiYWRfc2F2ZV91c2VyX3JlZ3MgZm9yIGFib3J0L3ByZWZldGNoL3VuZGVmL3N3aSAuLi4KICogdXNlIGlycV9zYXZlX3VzZXJfcmVncyAvIGlycV9yZXN0b3JlX3VzZXJfcmVncyBmb3IgSVJRL0ZJUSBoYW5kbGluZwogKi8KCgkubWFjcm8JYmFkX3NhdmVfdXNlcl9yZWdzCglzdWIJc3AsIHNwLCAjU19GUkFNRV9TSVpFCglzdG1pYQlzcCwge3IwIC0gcjEyfQkJCUAgQ2FsbGluZyByMC1yMTIKCWFkZAlyOCwgc3AsICNTX1BDCgoJbGRyCXIyLCBfYXJtYm9vdF9zdGFydAoJc3ViCXIyLCByMiwgIyhDT05GSUdfU1RBQ0tTSVpFK0NGR19NQUxMT0NfTEVOKQoJc3ViCXIyLCByMiwgIyhDRkdfR0JMX0RBVEFfU0laRSs4KQlAIHNldCBiYXNlIDIgd29yZHMgaW50byBhYm9ydCBzdGFjawoJbGRtaWEJcjIsIHtyMiAtIHI0fQkJCUAgZ2V0IHBjLCBjcHNyLCBvbGRfcjAKCWFkZAlyMCwgc3AsICNTX0ZSQU1FX1NJWkUJCUAgcmVzdG9yZSBzcF9TVkMKCglhZGQJcjUsIHNwLCAjU19TUAoJbW92CXIxLCBscgoJc3RtaWEJcjUsIHtyMCAtIHI0fQkJCUAgc2F2ZSBzcF9TVkMsIGxyX1NWQywgcGMsIGNwc3IsIG9sZF9yCgltb3YJcjAsIHNwCgkuZW5kbQoKCS5tYWNybwlpcnFfc2F2ZV91c2VyX3JlZ3MKCXN1YglzcCwgc3AsICNTX0ZSQU1FX1NJWkUKCXN0bWlhCXNwLCB7cjAgLSByMTJ9CQkJQCBDYWxsaW5nIHIwLXIxMgoJYWRkCXI4LCBzcCwgI1NfUEMKCXN0bWRiCXI4LCB7c3AsIGxyfV4JCQlAIENhbGxpbmcgU1AsIExSCglzdHIJbHIsIFtyOCwgIzBdCQkJQCBTYXZlIGNhbGxpbmcgUEMKCW1ycwlyNiwgc3BzcgoJc3RyCXI2LCBbcjgsICM0XQkJCUAgU2F2ZSBDUFNSCglzdHIJcjAsIFtyOCwgIzhdCQkJQCBTYXZlIE9MRF9SMAoJbW92CXIwLCBzcAoJLmVuZG0KCgkubWFjcm8JaXJxX3Jlc3RvcmVfdXNlcl9yZWdzCglsZG1pYQlzcCwge3IwIC0gbHJ9XgkJCUAgQ2FsbGluZyByMCAtIGxyCgltb3YJcjAsIHIwCglsZHIJbHIsIFtzcCwgI1NfUENdCQkJQCBHZXQgUEMKCWFkZAlzcCwgc3AsICNTX0ZSQU1FX1NJWkUKCXN1YnMJcGMsIGxyLCAjNAkJCUAgcmV0dXJuICYgbW92ZSBzcHNyX3N2YyBpbnRvIGNwc3IKCS5lbmRtCgoJLm1hY3JvIGdldF9iYWRfc3RhY2sKCWxkcglyMTMsIF9hcm1ib290X3N0YXJ0CQlAIHNldHVwIG91ciBtb2RlIHN0YWNrCglzdWIJcjEzLCByMTMsICMoQ09ORklHX1NUQUNLU0laRStDRkdfTUFMTE9DX0xFTikKCXN1YglyMTMsIHIxMywgIyhDRkdfR0JMX0RBVEFfU0laRSs4KSBAIHJlc2VydmVkIGEgY291cGxlIHNwb3RzIGluIGFib3J0IHN0YWNrCgoJc3RyCWxyLCBbcjEzXQkJCUAgc2F2ZSBjYWxsZXIgbHIgLyBzcHNyCgltcnMJbHIsIHNwc3IKCXN0cglsciwgW3IxMywgIzRdCgoJbW92CXIxMywgI01PREVfU1ZDCQkJQCBwcmVwYXJlIFNWQy1Nb2RlCgltc3IJc3Bzcl9jLCByMTMKCW1vdglsciwgcGMKCW1vdnMJcGMsIGxyCgkuZW5kbQoKCS5tYWNybyBnZXRfaXJxX3N0YWNrCQkJQCBzZXR1cCBJUlEgc3RhY2sKCWxkcglzcCwgSVJRX1NUQUNLX1NUQVJUCgkuZW5kbQoKCS5tYWNybyBnZXRfZmlxX3N0YWNrCQkJQCBzZXR1cCBGSVEgc3RhY2sKCWxkcglzcCwgRklRX1NUQUNLX1NUQVJUCgkuZW5kbQoKLyoKICogZXhjZXB0aW9uIGhhbmRsZXJzCiAqLwoJLmFsaWduCTUKdW5kZWZpbmVkX2luc3RydWN0aW9uOgoJZ2V0X2JhZF9zdGFjawoJYmFkX3NhdmVfdXNlcl9yZWdzCglibAlkb191bmRlZmluZWRfaW5zdHJ1Y3Rpb24KCgkuYWxpZ24JNQpzb2Z0d2FyZV9pbnRlcnJ1cHQ6CglnZXRfYmFkX3N0YWNrCgliYWRfc2F2ZV91c2VyX3JlZ3MKCWJsCWRvX3NvZnR3YXJlX2ludGVycnVwdAoKCS5hbGlnbgk1CnByZWZldGNoX2Fib3J0OgoJZ2V0X2JhZF9zdGFjawoJYmFkX3NhdmVfdXNlcl9yZWdzCglibAlkb19wcmVmZXRjaF9hYm9ydAoKCS5hbGlnbgk1CmRhdGFfYWJvcnQ6CglnZXRfYmFkX3N0YWNrCgliYWRfc2F2ZV91c2VyX3JlZ3MKCWJsCWRvX2RhdGFfYWJvcnQKCgkuYWxpZ24JNQpub3RfdXNlZDoKCWdldF9iYWRfc3RhY2sKCWJhZF9zYXZlX3VzZXJfcmVncwoJYmwJZG9fbm90X3VzZWQKCiNpZmRlZiBDT05GSUdfVVNFX0lSUQoKCS5hbGlnbgk1CmlycToKCWdldF9pcnFfc3RhY2sKCWlycV9zYXZlX3VzZXJfcmVncwoJYmwJZG9faXJxCglpcnFfcmVzdG9yZV91c2VyX3JlZ3MKCgkuYWxpZ24JNQpmaXE6CglnZXRfZmlxX3N0YWNrCgkvKiBzb21lb25lIG91Z2h0IHRvIHdyaXRlIGEgbW9yZSBlZmZpY3Rpb24gZmlxX3NhdmVfdXNlcl9yZWdzICovCglpcnFfc2F2ZV91c2VyX3JlZ3MKCWJsCWRvX2ZpcQoJaXJxX3Jlc3RvcmVfdXNlcl9yZWdzCgojZWxzZQoKCS5hbGlnbgk1CmlycToKCWdldF9iYWRfc3RhY2sKCWJhZF9zYXZlX3VzZXJfcmVncwoJYmwJZG9faXJxCgoJLmFsaWduCTUKZmlxOgoJZ2V0X2JhZF9zdGFjawoJYmFkX3NhdmVfdXNlcl9yZWdzCglibAlkb19maXEKCiNlbmRpZgoKI2lmIGRlZmluZWQoQ09ORklHX0lNUEE3KSB8fCBkZWZpbmVkKENPTkZJR19FUDczMTIpIHx8IGRlZmluZWQoQ09ORklHX0FSTUFESUxMTykKCS5hbGlnbgk1Ci5nbG9ibCByZXNldF9jcHUKcmVzZXRfY3B1OgoJbW92CWlwLCAjMAoJbWNyCXAxNSwgMCwgaXAsIGM3LCBjNywgMAkJQCBpbnZhbGlkYXRlIGNhY2hlCgltY3IJcDE1LCAwLCBpcCwgYzgsIGM3LCAwCQlAIGZsdXNoIFRMQiAodjQpCgltcmMJcDE1LCAwLCBpcCwgYzEsIGMwLCAwCQlAIGdldCBjdHJsIHJlZ2lzdGVyCgliaWMJaXAsIGlwLCAjMHgwMDBmCQkJQCAuLi4uLi4uLi4uLi53Y2FtCgliaWMJaXAsIGlwLCAjMHgyMTAwCQkJQCAuLnYuLi4ucy4uLi4uLi4uCgltY3IJcDE1LCAwLCBpcCwgYzEsIGMwLCAwCQlAIGN0cmwgcmVnaXN0ZXIKCW1vdglwYywgcjAKI2VsaWYgZGVmaW5lZChDT05GSUdfTkVUQVJNKQoJLmFsaWduCTUKLmdsb2JsIHJlc2V0X2NwdQpyZXNldF9jcHU6CglsZHIJcjEsID1ORVRBUk1fTUVNX01PRFVMRV9CQVNFCglsZHIJcjAsIFtyMSwgIytORVRBUk1fTUVNX0NTMF9CQVNFX0FERFJdCglsZHIJcjEsID0weEZGRkZGMDAwCglhbmQJcjAsIHIxLCByMAoJbGRyCXIxLCA9KHJlbG9jYXRlLVRFWFRfQkFTRSkKCWFkZAlyMCwgcjEsIHIwCglsZHIJcjQsID1ORVRBUk1fR0VOX01PRFVMRV9CQVNFCglsZHIJcjEsID1ORVRBUk1fR0VOX1NXX1NWQ19SRVNFVEEKCXN0cglyMSwgW3I0LCAjK05FVEFSTV9HRU5fU09GVFdBUkVfU0VSVklDRV0KCWxkcglyMSwgPU5FVEFSTV9HRU5fU1dfU1ZDX1JFU0VUQgoJc3RyCXIxLCBbcjQsICMrTkVUQVJNX0dFTl9TT0ZUV0FSRV9TRVJWSUNFXQoJbGRyCXIxLCA9TkVUQVJNX0dFTl9TV19TVkNfUkVTRVRBCglzdHIJcjEsIFtyNCwgIytORVRBUk1fR0VOX1NPRlRXQVJFX1NFUlZJQ0VdCglsZHIJcjEsID1ORVRBUk1fR0VOX1NXX1NWQ19SRVNFVEIKCXN0cglyMSwgW3I0LCAjK05FVEFSTV9HRU5fU09GVFdBUkVfU0VSVklDRV0KCW1vdglwYywgcjAKI2VsaWYgZGVmaW5lZChDT05GSUdfUzNDNDUxMEIpCi8qIE5vdGhpbmcgZG9uZSBoZXJlIGFzIHJlc2V0aW5nIHRoZSBDUFUgaXMgYm9hcmQgc3BlY2lmaWMsIGRlcGVuZGluZwogKiBvbiBleHRlcm5hbCBwZXJpcGhlcmFscyBzdWNoIGFzIHdhdGNoZG9nIHRpbWVycywgZXRjLiAqLwojZWxpZiBkZWZpbmVkKENPTkZJR19JTlRFR1JBVE9SKSAmJiBkZWZpbmVkKENPTkZJR19BUkNIX0lOVEVHUkFUT1IpCgkvKiBObyBzcGVjaWZpYyByZXNldCBhY3Rpb25zIGZvciBJbnRlZ3JhdG9yQVAvQ003MjBUIGFzIHlldCAqLwojZWxpZiBkZWZpbmVkKENPTkZJR19MUEMyMjkyKQoJLmFsaWduCTUKLmdsb2JsIHJlc2V0X2NwdQpyZXNldF9jcHU6Cgltb3YJcGMsIHIwCiNlbHNlCiNlcnJvciBObyByZXNldF9jcHUoKSBkZWZpbmVkIGZvciBjdXJyZW50IENQVSB0eXBlCiNlbmRpZgo=