LyoKICogIGFybWJvb3QgLSBTdGFydHVwIENvZGUgZm9yIEFSTTkyMCBDUFUtY29yZQogKgogKiAgQ29weXJpZ2h0IChjKSAyMDAxCU1hcml1cyBHcvZnZXIgPG1hZ0BzeXNnby5kZT4KICogIENvcHlyaWdodCAoYykgMjAwMglBbGV4IFr8cGtlIDxhenVAc3lzZ28uZGU+CiAqICBDb3B5cmlnaHQgKGMpIDIwMDIJR2FyeSBKZW5uZWpvaG4gPGdqQGRlbnguZGU+CiAqCiAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCiAqIHByb2plY3QuCiAqCiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCiAqIE1BIDAyMTExLTEzMDcgVVNBCiAqLwoKCiNpbmNsdWRlIDxjb25maWcuaD4KI2luY2x1ZGUgPHZlcnNpb24uaD4KI2luY2x1ZGUgPHN0YXR1c19sZWQuaD4KCi8qCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqCiAqIEp1bXAgdmVjdG9yIHRhYmxlIGFzIGluIHRhYmxlIDMuMSBpbiBbMV0KICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICovCgoKLmdsb2JsIF9zdGFydApfc3RhcnQ6CWIgICAgICAgc3RhcnRfY29kZQoJbGRyCXBjLCBfdW5kZWZpbmVkX2luc3RydWN0aW9uCglsZHIJcGMsIF9zb2Z0d2FyZV9pbnRlcnJ1cHQKCWxkcglwYywgX3ByZWZldGNoX2Fib3J0CglsZHIJcGMsIF9kYXRhX2Fib3J0CglsZHIJcGMsIF9ub3RfdXNlZAoJbGRyCXBjLCBfaXJxCglsZHIJcGMsIF9maXEKCl91bmRlZmluZWRfaW5zdHJ1Y3Rpb246CS53b3JkIHVuZGVmaW5lZF9pbnN0cnVjdGlvbgpfc29mdHdhcmVfaW50ZXJydXB0Ogkud29yZCBzb2Z0d2FyZV9pbnRlcnJ1cHQKX3ByZWZldGNoX2Fib3J0Ogkud29yZCBwcmVmZXRjaF9hYm9ydApfZGF0YV9hYm9ydDoJCS53b3JkIGRhdGFfYWJvcnQKX25vdF91c2VkOgkJLndvcmQgbm90X3VzZWQKX2lycToJCQkud29yZCBpcnEKX2ZpcToJCQkud29yZCBmaXEKCgkuYmFsaWdubCAxNiwweGRlYWRiZWVmCgoKLyoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICoKICogU3RhcnR1cCBDb2RlIChjYWxsZWQgZnJvbSB0aGUgQVJNIHJlc2V0IGV4Y2VwdGlvbiB2ZWN0b3IpCiAqCiAqIGRvIGltcG9ydGFudCBpbml0IG9ubHkgaWYgd2UgZG9uJ3Qgc3RhcnQgZnJvbSBtZW1vcnkhCiAqIHJlbG9jYXRlIGFybWJvb3QgdG8gcmFtCiAqIHNldHVwIHN0YWNrCiAqIGp1bXAgdG8gc2Vjb25kIHN0YWdlCiAqCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqLwoKX1RFWFRfQkFTRToKCS53b3JkCVRFWFRfQkFTRQoKLmdsb2JsIF9hcm1ib290X3N0YXJ0Cl9hcm1ib290X3N0YXJ0OgoJLndvcmQgX3N0YXJ0CgovKgogKiBUaGVzZSBhcmUgZGVmaW5lZCBpbiB0aGUgYm9hcmQtc3BlY2lmaWMgbGlua2VyIHNjcmlwdC4KICovCi5nbG9ibCBfYnNzX3N0YXJ0Cl9ic3Nfc3RhcnQ6Cgkud29yZCBfX2Jzc19zdGFydAoKLmdsb2JsIF9ic3NfZW5kCl9ic3NfZW5kOgoJLndvcmQgX2VuZAoKI2lmZGVmIENPTkZJR19VU0VfSVJRCi8qIElSUSBzdGFjayBtZW1vcnkgKGNhbGN1bGF0ZWQgYXQgcnVuLXRpbWUpICovCi5nbG9ibCBJUlFfU1RBQ0tfU1RBUlQKSVJRX1NUQUNLX1NUQVJUOgoJLndvcmQJMHgwYmFkYzBkZQoKLyogSVJRIHN0YWNrIG1lbW9yeSAoY2FsY3VsYXRlZCBhdCBydW4tdGltZSkgKi8KLmdsb2JsIEZJUV9TVEFDS19TVEFSVApGSVFfU1RBQ0tfU1RBUlQ6Cgkud29yZCAweDBiYWRjMGRlCiNlbmRpZgoKCi8qCiAqIHRoZSBhY3R1YWwgc3RhcnQgY29kZQogKi8KCnN0YXJ0X2NvZGU6CgkvKgoJICogc2V0IHRoZSBjcHUgdG8gU1ZDMzIgbW9kZQoJICovCgltcnMJcjAsY3BzcgoJYmljCXIwLHIwLCMweDFmCglvcnIJcjAscjAsIzB4ZDMKCW1zcgljcHNyLHIwCgoJYmwgY29sb3VyZWRfTEVEX2luaXQKCWJsIHJlZF9MRURfb24KCiNpZglkZWZpbmVkKENPTkZJR19BVDkxUk05MjAwREspIHx8IGRlZmluZWQoQ09ORklHX0FUOTFSTTkyMDBFSykgfHwgZGVmaW5lZChDT05GSUdfQVQ5MVJNOTIwMERGKQoJLyoKCSAqIHJlbG9jYXRlIGV4Y2VwdGlvbiB0YWJsZQoJICovCglsZHIJcjAsID1fc3RhcnQKCWxkcglyMSwgPTB4MAoJbW92CXIyLCAjMTYKY29weWV4OgoJc3VicwlyMiwgcjIsICMxCglsZHIJcjMsIFtyMF0sICM0CglzdHIJcjMsIFtyMV0sICM0CglibmUJY29weWV4CiNlbmRpZgoKI2lmIGRlZmluZWQoQ09ORklHX1MzQzI0MDApIHx8IGRlZmluZWQoQ09ORklHX1MzQzI0MTApCgkvKiB0dXJuIG9mZiB0aGUgd2F0Y2hkb2cgKi8KCiMgaWYgZGVmaW5lZChDT05GSUdfUzNDMjQwMCkKIyAgZGVmaW5lIHBXVENPTgkJMHgxNTMwMDAwMAojICBkZWZpbmUgSU5UTVNLCQkweDE0NDAwMDA4CS8qIEludGVydXB0LUNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzZXMgKi8KIyAgZGVmaW5lIENMS0RJVk4JMHgxNDgwMDAxNAkvKiBjbG9jayBkaXZpc29yIHJlZ2lzdGVyICovCiNlbHNlCiMgIGRlZmluZSBwV1RDT04JCTB4NTMwMDAwMDAKIyAgZGVmaW5lIElOVE1TSwkJMHg0QTAwMDAwOAkvKiBJbnRlcnVwdC1Db250cm9sbGVyIGJhc2UgYWRkcmVzc2VzICovCiMgIGRlZmluZSBJTlRTVUJNU0sJMHg0QTAwMDAxQwojICBkZWZpbmUgQ0xLRElWTgkweDRDMDAwMDE0CS8qIGNsb2NrIGRpdmlzb3IgcmVnaXN0ZXIgKi8KIyBlbmRpZgoKCWxkciAgICAgcjAsID1wV1RDT04KCW1vdiAgICAgcjEsICMweDAKCXN0ciAgICAgcjEsIFtyMF0KCgkvKgoJICogbWFzayBhbGwgSVJRcyBieSBzZXR0aW5nIGFsbCBiaXRzIGluIHRoZSBJTlRNUiAtIGRlZmF1bHQKCSAqLwoJbW92CXIxLCAjMHhmZmZmZmZmZgoJbGRyCXIwLCA9SU5UTVNLCglzdHIJcjEsIFtyMF0KIyBpZiBkZWZpbmVkKENPTkZJR19TM0MyNDEwKQoJbGRyCXIxLCA9MHgzZmYKCWxkcglyMCwgPUlOVFNVQk1TSwoJc3RyCXIxLCBbcjBdCiMgZW5kaWYKCgkvKiBGQ0xLOkhDTEs6UENMSyA9IDE6Mjo0ICovCgkvKiBkZWZhdWx0IEZDTEsgaXMgMTIwIE1IeiAhICovCglsZHIJcjAsID1DTEtESVZOCgltb3YJcjEsICMzCglzdHIJcjEsIFtyMF0KI2VuZGlmCS8qIENPTkZJR19TM0MyNDAwIHx8IENPTkZJR19TM0MyNDEwICovCgoJLyoKCSAqIHdlIGRvIHN5cy1jcml0aWNhbCBpbml0cyBvbmx5IGF0IHJlYm9vdCwKCSAqIG5vdCB3aGVuIGJvb3RpbmcgZnJvbSByYW0hCgkgKi8KI2lmbmRlZiBDT05GSUdfU0tJUF9MT1dMRVZFTF9JTklUCglibAljcHVfaW5pdF9jcml0CiNlbmRpZgoKI2lmbmRlZglDT05GSUdfQVQ5MVJNOTIwMAoKI2lmbmRlZiBDT05GSUdfU0tJUF9SRUxPQ0FURV9VQk9PVApyZWxvY2F0ZToJCQkJLyogcmVsb2NhdGUgVS1Cb290IHRvIFJBTQkgICAgKi8KCWFkcglyMCwgX3N0YXJ0CQkvKiByMCA8LSBjdXJyZW50IHBvc2l0aW9uIG9mIGNvZGUgICAqLwoJbGRyCXIxLCBfVEVYVF9CQVNFCQkvKiB0ZXN0IGlmIHdlIHJ1biBmcm9tIGZsYXNoIG9yIFJBTSAqLwoJY21wICAgICByMCwgcjEgICAgICAgICAgICAgICAgICAvKiBkb24ndCByZWxvYyBkdXJpbmcgZGVidWcgICAgICAgICAqLwoJYmVxICAgICBzdGFja19zZXR1cAoKCWxkcglyMiwgX2FybWJvb3Rfc3RhcnQKCWxkcglyMywgX2Jzc19zdGFydAoJc3ViCXIyLCByMywgcjIJCS8qIHIyIDwtIHNpemUgb2YgYXJtYm9vdCAgICAgICAgICAgICovCglhZGQJcjIsIHIwLCByMgkJLyogcjIgPC0gc291cmNlIGVuZCBhZGRyZXNzICAgICAgICAgKi8KCmNvcHlfbG9vcDoKCWxkbWlhCXIwISwge3IzLXIxMH0JCS8qIGNvcHkgZnJvbSBzb3VyY2UgYWRkcmVzcyBbcjBdICAgICovCglzdG1pYQlyMSEsIHtyMy1yMTB9CQkvKiBjb3B5IHRvICAgdGFyZ2V0IGFkZHJlc3MgW3IxXSAgICAqLwoJY21wCXIwLCByMgkJCS8qIHVudGlsIHNvdXJjZSBlbmQgYWRkcmVlZSBbcjJdICAgICovCglibGUJY29weV9sb29wCiNlbmRpZgkvKiBDT05GSUdfU0tJUF9SRUxPQ0FURV9VQk9PVCAqLwojZW5kaWYKCS8qIFNldCB1cCB0aGUgc3RhY2sJCQkJCQkgICAgKi8Kc3RhY2tfc2V0dXA6CglsZHIJcjAsIF9URVhUX0JBU0UJCS8qIHVwcGVyIDEyOCBLaUI6IHJlbG9jYXRlZCB1Ym9vdCAgICovCglzdWIJcjAsIHIwLCAjQ0ZHX01BTExPQ19MRU4JLyogbWFsbG9jIGFyZWEgICAgICAgICAgICAgICAgICAgICAgKi8KCXN1YglyMCwgcjAsICNDRkdfR0JMX0RBVEFfU0laRSAvKiBiZGluZm8gICAgICAgICAgICAgICAgICAgICAgICAqLwojaWZkZWYgQ09ORklHX1VTRV9JUlEKCXN1YglyMCwgcjAsICMoQ09ORklHX1NUQUNLU0laRV9JUlErQ09ORklHX1NUQUNLU0laRV9GSVEpCiNlbmRpZgoJc3ViCXNwLCByMCwgIzEyCQkvKiBsZWF2ZSAzIHdvcmRzIGZvciBhYm9ydC1zdGFjayAgICAqLwoKY2xlYXJfYnNzOgoJbGRyCXIwLCBfYnNzX3N0YXJ0CQkvKiBmaW5kIHN0YXJ0IG9mIGJzcyBzZWdtZW50ICAgICAgICAqLwoJbGRyCXIxLCBfYnNzX2VuZAkJLyogc3RvcCBoZXJlICAgICAgICAgICAgICAgICAgICAgICAgKi8KCW1vdiAJcjIsICMweDAwMDAwMDAwCQkvKiBjbGVhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwoKY2xic3NfbDpzdHIJcjIsIFtyMF0JCS8qIGNsZWFyIGxvb3AuLi4gICAgICAgICAgICAgICAgICAgICovCglhZGQJcjAsIHIwLCAjNAoJY21wCXIwLCByMQoJYmxlCWNsYnNzX2wKCglsZHIJcGMsIF9zdGFydF9hcm1ib290Cgpfc3RhcnRfYXJtYm9vdDoJLndvcmQgc3RhcnRfYXJtYm9vdAoKCi8qCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqCiAqIENQVV9pbml0X2NyaXRpY2FsIHJlZ2lzdGVycwogKgogKiBzZXR1cCBpbXBvcnRhbnQgcmVnaXN0ZXJzCiAqIHNldHVwIG1lbW9yeSB0aW1pbmcKICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICovCgoKI2lmbmRlZiBDT05GSUdfU0tJUF9MT1dMRVZFTF9JTklUCmNwdV9pbml0X2NyaXQ6CgkvKgoJICogZmx1c2ggdjQgSS9EIGNhY2hlcwoJICovCgltb3YJcjAsICMwCgltY3IJcDE1LCAwLCByMCwgYzcsIGM3LCAwCS8qIGZsdXNoIHYzL3Y0IGNhY2hlICovCgltY3IJcDE1LCAwLCByMCwgYzgsIGM3LCAwCS8qIGZsdXNoIHY0IFRMQiAqLwoKCS8qCgkgKiBkaXNhYmxlIE1NVSBzdHVmZiBhbmQgY2FjaGVzCgkgKi8KCW1yYwlwMTUsIDAsIHIwLCBjMSwgYzAsIDAKCWJpYwlyMCwgcjAsICMweDAwMDAyMzAwCUAgY2xlYXIgYml0cyAxMywgOTo4ICgtLVYtIC0tUlMpCgliaWMJcjAsIHIwLCAjMHgwMDAwMDA4NwlAIGNsZWFyIGJpdHMgNywgMjowIChCLS0tIC1DQU0pCglvcnIJcjAsIHIwLCAjMHgwMDAwMDAwMglAIHNldCBiaXQgMiAoQSkgQWxpZ24KCW9ycglyMCwgcjAsICMweDAwMDAxMDAwCUAgc2V0IGJpdCAxMiAoSSkgSS1DYWNoZQoJbWNyCXAxNSwgMCwgcjAsIGMxLCBjMCwgMAoKCS8qCgkgKiBiZWZvcmUgcmVsb2NhdGluZywgd2UgaGF2ZSB0byBzZXR1cCBSQU0gdGltaW5nCgkgKiBiZWNhdXNlIG1lbW9yeSB0aW1pbmcgaXMgYm9hcmQtZGVwZW5kZW5kLCB5b3Ugd2lsbAoJICogZmluZCBhIGxvd2xldmVsX2luaXQuUyBpbiB5b3VyIGJvYXJkIGRpcmVjdG9yeS4KCSAqLwoJbW92CWlwLCBscgojaWYJZGVmaW5lZChDT05GSUdfQVQ5MVJNOTIwMERLKSB8fCBkZWZpbmVkKENPTkZJR19BVDkxUk05MjAwRUspIHx8IGRlZmluZWQoQ09ORklHX0FUOTFSTTkyMDBERikKCiNlbHNlCglibAlsb3dsZXZlbF9pbml0CiNlbmRpZgoJbW92CWxyLCBpcAoJbW92CXBjLCBscgojZW5kaWYgLyogQ09ORklHX1NLSVBfTE9XTEVWRUxfSU5JVCAqLwoKLyoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICoKICogSW50ZXJydXB0IGhhbmRsaW5nCiAqCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqLwoKQApAIElSUSBzdGFjayBmcmFtZS4KQAojZGVmaW5lIFNfRlJBTUVfU0laRQk3MgoKI2RlZmluZSBTX09MRF9SMAk2OAojZGVmaW5lIFNfUFNSCQk2NAojZGVmaW5lIFNfUEMJCTYwCiNkZWZpbmUgU19MUgkJNTYKI2RlZmluZSBTX1NQCQk1MgoKI2RlZmluZSBTX0lQCQk0OAojZGVmaW5lIFNfRlAJCTQ0CiNkZWZpbmUgU19SMTAJCTQwCiNkZWZpbmUgU19SOQkJMzYKI2RlZmluZSBTX1I4CQkzMgojZGVmaW5lIFNfUjcJCTI4CiNkZWZpbmUgU19SNgkJMjQKI2RlZmluZSBTX1I1CQkyMAojZGVmaW5lIFNfUjQJCTE2CiNkZWZpbmUgU19SMwkJMTIKI2RlZmluZSBTX1IyCQk4CiNkZWZpbmUgU19SMQkJNAojZGVmaW5lIFNfUjAJCTAKCiNkZWZpbmUgTU9ERV9TVkMgMHgxMwojZGVmaW5lIElfQklUCSAweDgwCgovKgogKiB1c2UgYmFkX3NhdmVfdXNlcl9yZWdzIGZvciBhYm9ydC9wcmVmZXRjaC91bmRlZi9zd2kgLi4uCiAqIHVzZSBpcnFfc2F2ZV91c2VyX3JlZ3MgLyBpcnFfcmVzdG9yZV91c2VyX3JlZ3MgZm9yIElSUS9GSVEgaGFuZGxpbmcKICovCgoJLm1hY3JvCWJhZF9zYXZlX3VzZXJfcmVncwoJc3ViCXNwLCBzcCwgI1NfRlJBTUVfU0laRQoJc3RtaWEJc3AsIHtyMCAtIHIxMn0JCQlAIENhbGxpbmcgcjAtcjEyCglsZHIJcjIsIF9hcm1ib290X3N0YXJ0CglzdWIJcjIsIHIyLCAjKENPTkZJR19TVEFDS1NJWkUrQ0ZHX01BTExPQ19MRU4pCglzdWIJcjIsIHIyLCAjKENGR19HQkxfREFUQV9TSVpFKzgpICBAIHNldCBiYXNlIDIgd29yZHMgaW50byBhYm9ydCBzdGFjawoJbGRtaWEJcjIsIHtyMiAtIHIzfQkJCUAgZ2V0IHBjLCBjcHNyCglhZGQJcjAsIHNwLCAjU19GUkFNRV9TSVpFCQlAIHJlc3RvcmUgc3BfU1ZDCgoJYWRkCXI1LCBzcCwgI1NfU1AKCW1vdglyMSwgbHIKCXN0bWlhCXI1LCB7cjAgLSByM30JCQlAIHNhdmUgc3BfU1ZDLCBscl9TVkMsIHBjLCBjcHNyCgltb3YJcjAsIHNwCgkuZW5kbQoKCS5tYWNybwlpcnFfc2F2ZV91c2VyX3JlZ3MKCXN1YglzcCwgc3AsICNTX0ZSQU1FX1NJWkUKCXN0bWlhCXNwLCB7cjAgLSByMTJ9CQkJQCBDYWxsaW5nIHIwLXIxMgoJYWRkICAgICByNywgc3AsICNTX1BDCglzdG1kYiAgIHI3LCB7c3AsIGxyfV4gICAgICAgICAgICAgICAgICAgQCBDYWxsaW5nIFNQLCBMUgoJc3RyICAgICBsciwgW3I3LCAjMF0gICAgICAgICAgICAgICAgICAgIEAgU2F2ZSBjYWxsaW5nIFBDCgltcnMgICAgIHI2LCBzcHNyCglzdHIgICAgIHI2LCBbcjcsICM0XSAgICAgICAgICAgICAgICAgICAgQCBTYXZlIENQU1IKCXN0ciAgICAgcjAsIFtyNywgIzhdICAgICAgICAgICAgICAgICAgICBAIFNhdmUgT0xEX1IwCgltb3YJcjAsIHNwCgkuZW5kbQoKCS5tYWNybwlpcnFfcmVzdG9yZV91c2VyX3JlZ3MKCWxkbWlhCXNwLCB7cjAgLSBscn1eCQkJQCBDYWxsaW5nIHIwIC0gbHIKCW1vdglyMCwgcjAKCWxkcglsciwgW3NwLCAjU19QQ10JCQlAIEdldCBQQwoJYWRkCXNwLCBzcCwgI1NfRlJBTUVfU0laRQoJc3VicwlwYywgbHIsICM0CQkJQCByZXR1cm4gJiBtb3ZlIHNwc3Jfc3ZjIGludG8gY3BzcgoJLmVuZG0KCgkubWFjcm8gZ2V0X2JhZF9zdGFjawoJbGRyCXIxMywgX2FybWJvb3Rfc3RhcnQJCUAgc2V0dXAgb3VyIG1vZGUgc3RhY2sKCXN1YglyMTMsIHIxMywgIyhDT05GSUdfU1RBQ0tTSVpFK0NGR19NQUxMT0NfTEVOKQoJc3ViCXIxMywgcjEzLCAjKENGR19HQkxfREFUQV9TSVpFKzgpIEAgcmVzZXJ2ZWQgYSBjb3VwbGUgc3BvdHMgaW4gYWJvcnQgc3RhY2sKCglzdHIJbHIsIFtyMTNdCQkJQCBzYXZlIGNhbGxlciBsciAvIHNwc3IKCW1ycwlsciwgc3BzcgoJc3RyICAgICBsciwgW3IxMywgIzRdCgoJbW92CXIxMywgI01PREVfU1ZDCQkJQCBwcmVwYXJlIFNWQy1Nb2RlCglAIG1zcglzcHNyX2MsIHIxMwoJbXNyCXNwc3IsIHIxMwoJbW92CWxyLCBwYwoJbW92cwlwYywgbHIKCS5lbmRtCgoJLm1hY3JvIGdldF9pcnFfc3RhY2sJCQlAIHNldHVwIElSUSBzdGFjawoJbGRyCXNwLCBJUlFfU1RBQ0tfU1RBUlQKCS5lbmRtCgoJLm1hY3JvIGdldF9maXFfc3RhY2sJCQlAIHNldHVwIEZJUSBzdGFjawoJbGRyCXNwLCBGSVFfU1RBQ0tfU1RBUlQKCS5lbmRtCgovKgogKiBleGNlcHRpb24gaGFuZGxlcnMKICovCgkuYWxpZ24gIDUKdW5kZWZpbmVkX2luc3RydWN0aW9uOgoJZ2V0X2JhZF9zdGFjawoJYmFkX3NhdmVfdXNlcl9yZWdzCglibCAJZG9fdW5kZWZpbmVkX2luc3RydWN0aW9uCgoJLmFsaWduCTUKc29mdHdhcmVfaW50ZXJydXB0OgoJZ2V0X2JhZF9zdGFjawoJYmFkX3NhdmVfdXNlcl9yZWdzCglibCAJZG9fc29mdHdhcmVfaW50ZXJydXB0CgoJLmFsaWduCTUKcHJlZmV0Y2hfYWJvcnQ6CglnZXRfYmFkX3N0YWNrCgliYWRfc2F2ZV91c2VyX3JlZ3MKCWJsIAlkb19wcmVmZXRjaF9hYm9ydAoKCS5hbGlnbgk1CmRhdGFfYWJvcnQ6CglnZXRfYmFkX3N0YWNrCgliYWRfc2F2ZV91c2VyX3JlZ3MKCWJsIAlkb19kYXRhX2Fib3J0CgoJLmFsaWduCTUKbm90X3VzZWQ6CglnZXRfYmFkX3N0YWNrCgliYWRfc2F2ZV91c2VyX3JlZ3MKCWJsIAlkb19ub3RfdXNlZAoKI2lmZGVmIENPTkZJR19VU0VfSVJRCgoJLmFsaWduCTUKaXJxOgoJZ2V0X2lycV9zdGFjawoJaXJxX3NhdmVfdXNlcl9yZWdzCglibCAJZG9faXJxCglpcnFfcmVzdG9yZV91c2VyX3JlZ3MKCgkuYWxpZ24JNQpmaXE6CglnZXRfZmlxX3N0YWNrCgkvKiBzb21lb25lIG91Z2h0IHRvIHdyaXRlIGEgbW9yZSBlZmZpY3Rpb24gZmlxX3NhdmVfdXNlcl9yZWdzICovCglpcnFfc2F2ZV91c2VyX3JlZ3MKCWJsIAlkb19maXEKCWlycV9yZXN0b3JlX3VzZXJfcmVncwoKI2Vsc2UKCgkuYWxpZ24JNQppcnE6CglnZXRfYmFkX3N0YWNrCgliYWRfc2F2ZV91c2VyX3JlZ3MKCWJsIAlkb19pcnEKCgkuYWxpZ24JNQpmaXE6CglnZXRfYmFkX3N0YWNrCgliYWRfc2F2ZV91c2VyX3JlZ3MKCWJsIAlkb19maXEKCiNlbmRpZgo=