LyoKICogIGFybWJvb3QgLSBTdGFydHVwIENvZGUgZm9yIE9NUDI0MjAvQVJNMTEzNiBDUFUtY29yZQogKgogKiAgQ29weXJpZ2h0IChjKSAyMDA0CVRleGFzIEluc3RydW1lbnRzIDxyLXdvb2RydWZmMkB0aS5jb20+CiAqCiAqICBDb3B5cmlnaHQgKGMpIDIwMDEJTWFyaXVzIEdy9mdlciA8bWFnQHN5c2dvLmRlPgogKiAgQ29weXJpZ2h0IChjKSAyMDAyCUFsZXggWvxwa2UgPGF6dUBzeXNnby5kZT4KICogIENvcHlyaWdodCAoYykgMjAwMglHYXJ5IEplbm5lam9obiA8Z2FyeWpAZGVueC5kZT4KICogIENvcHlyaWdodCAoYykgMjAwMwlSaWNoYXJkIFdvb2RydWZmIDxyLXdvb2RydWZmMkB0aS5jb20+CiAqICBDb3B5cmlnaHQgKGMpIDIwMDMJS3NoaXRpaiA8a3NoaXRpakB0aS5jb20+CiAqCiAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCiAqIHByb2plY3QuCiAqCiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCSBTZWUgdGhlCiAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCiAqIE1BIDAyMTExLTEzMDcgVVNBCiAqLwoKI2luY2x1ZGUgPGNvbmZpZy5oPgojaW5jbHVkZSA8dmVyc2lvbi5oPgouZ2xvYmwgX3N0YXJ0Cl9zdGFydDogYglyZXNldAojaWZkZWYgQ09ORklHX1BSRUxPQURFUgoJbGRyCXBjLCBfaGFuZwoJbGRyCXBjLCBfaGFuZwoJbGRyCXBjLCBfaGFuZwoJbGRyCXBjLCBfaGFuZwoJbGRyCXBjLCBfaGFuZwoJbGRyCXBjLCBfaGFuZwoJbGRyCXBjLCBfaGFuZwoKX2hhbmc6Cgkud29yZAlkb19oYW5nCgkud29yZAkweDEyMzQ1Njc4Cgkud29yZAkweDEyMzQ1Njc4Cgkud29yZAkweDEyMzQ1Njc4Cgkud29yZAkweDEyMzQ1Njc4Cgkud29yZAkweDEyMzQ1Njc4Cgkud29yZAkweDEyMzQ1Njc4Cgkud29yZAkweDEyMzQ1Njc4CS8qIG5vdyAxNio0PTY0ICovCiNlbHNlCglsZHIJcGMsIF91bmRlZmluZWRfaW5zdHJ1Y3Rpb24KCWxkcglwYywgX3NvZnR3YXJlX2ludGVycnVwdAoJbGRyCXBjLCBfcHJlZmV0Y2hfYWJvcnQKCWxkcglwYywgX2RhdGFfYWJvcnQKCWxkcglwYywgX25vdF91c2VkCglsZHIJcGMsIF9pcnEKCWxkcglwYywgX2ZpcQoKX3VuZGVmaW5lZF9pbnN0cnVjdGlvbjogLndvcmQgdW5kZWZpbmVkX2luc3RydWN0aW9uCl9zb2Z0d2FyZV9pbnRlcnJ1cHQ6CS53b3JkIHNvZnR3YXJlX2ludGVycnVwdApfcHJlZmV0Y2hfYWJvcnQ6CS53b3JkIHByZWZldGNoX2Fib3J0Cl9kYXRhX2Fib3J0OgkJLndvcmQgZGF0YV9hYm9ydApfbm90X3VzZWQ6CQkud29yZCBub3RfdXNlZApfaXJxOgkJCS53b3JkIGlycQpfZmlxOgkJCS53b3JkIGZpcQpfcGFkOgkJCS53b3JkIDB4MTIzNDU2NzggLyogbm93IDE2KjQ9NjQgKi8KI2VuZGlmCS8qIENPTkZJR19QUkVMT0FERVIgKi8KLmdsb2JhbCBfZW5kX3ZlY3QKX2VuZF92ZWN0OgoKCS5iYWxpZ25sIDE2LDB4ZGVhZGJlZWYKLyoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICoKICogU3RhcnR1cCBDb2RlIChyZXNldCB2ZWN0b3IpCiAqCiAqIGRvIGltcG9ydGFudCBpbml0IG9ubHkgaWYgd2UgZG9uJ3Qgc3RhcnQgZnJvbSBtZW1vcnkhCiAqIHNldHVwIE1lbW9yeSBhbmQgYm9hcmQgc3BlY2lmaWMgYml0cyBwcmlvciB0byByZWxvY2F0aW9uLgogKiByZWxvY2F0ZSBhcm1ib290IHRvIHJhbQogKiBzZXR1cCBzdGFjawogKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKi8KCl9URVhUX0JBU0U6Cgkud29yZAlURVhUX0JBU0UKCi5nbG9ibCBfYXJtYm9vdF9zdGFydApfYXJtYm9vdF9zdGFydDoKCS53b3JkIF9zdGFydAoKLyoKICogVGhlc2UgYXJlIGRlZmluZWQgaW4gdGhlIGJvYXJkLXNwZWNpZmljIGxpbmtlciBzY3JpcHQuCiAqLwouZ2xvYmwgX2Jzc19zdGFydApfYnNzX3N0YXJ0OgoJLndvcmQgX19ic3Nfc3RhcnQKCi5nbG9ibCBfYnNzX2VuZApfYnNzX2VuZDoKCS53b3JkIF9lbmQKCiNpZmRlZiBDT05GSUdfVVNFX0lSUQovKiBJUlEgc3RhY2sgbWVtb3J5IChjYWxjdWxhdGVkIGF0IHJ1bi10aW1lKSAqLwouZ2xvYmwgSVJRX1NUQUNLX1NUQVJUCklSUV9TVEFDS19TVEFSVDoKCS53b3JkCTB4MGJhZGMwZGUKCi8qIElSUSBzdGFjayBtZW1vcnkgKGNhbGN1bGF0ZWQgYXQgcnVuLXRpbWUpICovCi5nbG9ibCBGSVFfU1RBQ0tfU1RBUlQKRklRX1NUQUNLX1NUQVJUOgoJLndvcmQgMHgwYmFkYzBkZQojZW5kaWYKCi8qCiAqIHRoZSBhY3R1YWwgcmVzZXQgY29kZQogKi8KCnJlc2V0OgoJLyoKCSAqIHNldCB0aGUgY3B1IHRvIFNWQzMyIG1vZGUKCSAqLwoJbXJzCXIwLGNwc3IKCWJpYwlyMCxyMCwjMHgxZgoJb3JyCXIwLHIwLCMweGQzCgltc3IJY3BzcixyMAoKI2lmZGVmIENPTkZJR19PTUFQMjQyMEg0CiAgICAgICAvKiBDb3B5IHZlY3RvcnMgdG8gbWFzayBST00gaW5kaXJlY3QgYWRkciAqLwoJYWRyCXIwLCBfc3RhcnQJCS8qIHIwIDwtIGN1cnJlbnQgcG9zaXRpb24gb2YgY29kZSAgICovCgkJYWRkICAgICByMCwgcjAsICM0CQkJCS8qIHNraXAgcmVzZXQgdmVjdG9yCQkJKi8KCW1vdglyMiwgIzY0CQkJLyogcjIgPC0gc2l6ZSB0byBjb3B5ICAqLwoJYWRkCXIyLCByMCwgcjIJCS8qIHIyIDwtIHNvdXJjZSBlbmQgYWRkcmVzcwkgICAgKi8KCW1vdglyMSwgI1NSQU1fT0ZGU0VUMAkgIC8qIGJ1aWxkIHZlY3QgYWRkciAqLwoJbW92CXIzLCAjU1JBTV9PRkZTRVQxCglhZGQJcjEsIHIxLCByMwoJbW92CXIzLCAjU1JBTV9PRkZTRVQyCglhZGQJcjEsIHIxLCByMwpuZXh0OgoJbGRtaWEJcjAhLCB7cjMtcjEwfQkJLyogY29weSBmcm9tIHNvdXJjZSBhZGRyZXNzIFtyMF0gICAgKi8KCXN0bWlhCXIxISwge3IzLXIxMH0JCS8qIGNvcHkgdG8gICB0YXJnZXQgYWRkcmVzcyBbcjFdICAgICovCgljbXAJcjAsIHIyCQkJLyogdW50aWwgc291cmNlIGVuZCBhZGRyZXNzIFtyMl0gICAgKi8KCWJuZQluZXh0CQkJLyogbG9vcCB1bnRpbCBlcXVhbCAqLwoJYmwJY3B5X2Nsa19jb2RlCQkvKiBwdXQgZHBsbCBhZGp1c3QgY29kZSBiZWhpbmQgdmVjdG9ycyAqLwojZW5kaWYKCS8qIHRoZSBtYXNrIFJPTSBjb2RlIHNob3VsZCBoYXZlIFBMTCBhbmQgb3RoZXJzIHN0YWJsZSAqLwojaWZuZGVmIENPTkZJR19TS0lQX0xPV0xFVkVMX0lOSVQKCWJsICBjcHVfaW5pdF9jcml0CiNlbmRpZgoKI2lmbmRlZiBDT05GSUdfU0tJUF9SRUxPQ0FURV9VQk9PVApyZWxvY2F0ZToJCQkJLyogcmVsb2NhdGUgVS1Cb290IHRvIFJBTQkgICAgKi8KCWFkcglyMCwgX3N0YXJ0CQkvKiByMCA8LSBjdXJyZW50IHBvc2l0aW9uIG9mIGNvZGUgICAqLwoJbGRyCXIxLCBfVEVYVF9CQVNFCQkvKiB0ZXN0IGlmIHdlIHJ1biBmcm9tIGZsYXNoIG9yIFJBTSAqLwoJY21wCXIwLCByMQkJCS8qIGRvbid0IHJlbG9jIGR1cmluZyBkZWJ1ZwkgICAgKi8KI2lmbmRlZiBDT05GSUdfUFJFTE9BREVSCgliZXEJc3RhY2tfc2V0dXAKI2VuZGlmCS8qIENPTkZJR19QUkVMT0FERVIgKi8KCglsZHIJcjIsIF9hcm1ib290X3N0YXJ0CglsZHIJcjMsIF9ic3Nfc3RhcnQKCXN1YglyMiwgcjMsIHIyCQkvKiByMiA8LSBzaXplIG9mIGFybWJvb3QJICAgICovCglhZGQJcjIsIHIwLCByMgkJLyogcjIgPC0gc291cmNlIGVuZCBhZGRyZXNzCSAgICAqLwoKY29weV9sb29wOgoJbGRtaWEJcjAhLCB7cjMtcjEwfQkJLyogY29weSBmcm9tIHNvdXJjZSBhZGRyZXNzIFtyMF0gICAgKi8KCXN0bWlhCXIxISwge3IzLXIxMH0JCS8qIGNvcHkgdG8gICB0YXJnZXQgYWRkcmVzcyBbcjFdICAgICovCgljbXAJcjAsIHIyCQkJLyogdW50aWwgc291cmNlIGVuZCBhZGRyZWVlIFtyMl0gICAgKi8KCWJsZQljb3B5X2xvb3AKI2VuZGlmCS8qIENPTkZJR19TS0lQX1JFTE9DQVRFX1VCT09UICovCgoJLyogU2V0IHVwIHRoZSBzdGFjawkJCQkJCSAgICAqLwpzdGFja19zZXR1cDoKCWxkcglyMCwgX1RFWFRfQkFTRQkJLyogdXBwZXIgMTI4IEtpQjogcmVsb2NhdGVkIHVib290ICAgKi8KI2lmZGVmIENPTkZJR19QUkVMT0FERVIKCXN1YglzcCwgcjAsICMxMjgJCS8qIGxlYXZlIDMyIHdvcmRzIGZvciBhYm9ydC1zdGFjayAgICovCiNlbHNlCglzdWIJcjAsIHIwLCAjQ09ORklHX1NZU19NQUxMT0NfTEVOIC8qIG1hbGxvYyBhcmVhCQkJICAgICovCglzdWIJcjAsIHIwLCAjQ09ORklHX1NZU19HQkxfREFUQV9TSVpFIC8qIGJkaW5mbwkJCSAgICAqLwojaWZkZWYgQ09ORklHX1VTRV9JUlEKCXN1YglyMCwgcjAsICMoQ09ORklHX1NUQUNLU0laRV9JUlErQ09ORklHX1NUQUNLU0laRV9GSVEpCiNlbmRpZgoJc3ViCXNwLCByMCwgIzEyCQkvKiBsZWF2ZSAzIHdvcmRzIGZvciBhYm9ydC1zdGFjayAgICAqLwojZW5kaWYJLyogQ09ORklHX1BSRUxPQURFUiAqLwoJYmljCXNwLCBzcCwgIzcJCS8qIDgtYnl0ZSBhbGlnbm1lbnQgZm9yIEFCSSBjb21wbGlhbmNlICovCgpjbGVhcl9ic3M6CglsZHIJcjAsIF9ic3Nfc3RhcnQJCS8qIGZpbmQgc3RhcnQgb2YgYnNzIHNlZ21lbnQJICAgICovCglsZHIJcjEsIF9ic3NfZW5kCQkvKiBzdG9wIGhlcmUJCQkgICAgKi8KCW1vdglyMiwgIzB4MDAwMDAwMDAJCS8qIGNsZWFyCQkJICAgICovCgojaWZuZGVmIENPTkZJR19QUkVMT0FERVIKY2xic3NfbDpzdHIJcjIsIFtyMF0JCS8qIGNsZWFyIGxvb3AuLi4JCSAgICAqLwoJYWRkCXIwLCByMCwgIzQKCWNtcAlyMCwgcjEKCWJuZQljbGJzc19sCiNlbmRpZgoKCWxkcglwYywgX3N0YXJ0X2FybWJvb3QKCiNpZmRlZiBDT05GSUdfTkFORF9TUEwKX3N0YXJ0X2FybWJvb3Q6IC53b3JkIG5hbmRfYm9vdAojZWxzZQojaWZkZWYgQ09ORklHX09ORU5BTkRfSVBMCl9zdGFydF9hcm1ib290OiAud29yZCBzdGFydF9vbmVib290CiNlbHNlCl9zdGFydF9hcm1ib290OiAud29yZCBzdGFydF9hcm1ib290CiNlbmRpZiAvKiBDT05GSUdfT05FTkFORF9JUEwgKi8KI2VuZGlmIC8qIENPTkZJR19OQU5EX1NQTCAqLwoKLyoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICoKICogQ1BVX2luaXRfY3JpdGljYWwgcmVnaXN0ZXJzCiAqCiAqIHNldHVwIGltcG9ydGFudCByZWdpc3RlcnMKICogc2V0dXAgbWVtb3J5IHRpbWluZwogKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKi8KI2lmbmRlZiBDT05GSUdfU0tJUF9MT1dMRVZFTF9JTklUCmNwdV9pbml0X2NyaXQ6CgkvKgoJICogZmx1c2ggdjQgSS9EIGNhY2hlcwoJICovCgltb3YJcjAsICMwCgltY3IJcDE1LCAwLCByMCwgYzcsIGM3LCAwCS8qIEludmFsaWRhdGUgSStEK0JUQiBjYWNoZXMgKi8KCW1jcglwMTUsIDAsIHIwLCBjOCwgYzcsIDAJLyogSW52YWxpZGF0ZSBVbmlmaWVkIFRMQiAqLwoKCS8qCgkgKiBkaXNhYmxlIE1NVSBzdHVmZiBhbmQgY2FjaGVzCgkgKi8KCW1yYwlwMTUsIDAsIHIwLCBjMSwgYzAsIDAKCWJpYwlyMCwgcjAsICMweDAwMDAyMzAwCUAgY2xlYXIgYml0cyAxMywgOTo4ICgtLVYtIC0tUlMpCgliaWMJcjAsIHIwLCAjMHgwMDAwMDA4NwlAIGNsZWFyIGJpdHMgNywgMjowIChCLS0tIC1DQU0pCglvcnIJcjAsIHIwLCAjMHgwMDAwMDAwMglAIHNldCBiaXQgMiAoQSkgQWxpZ24KCW9ycglyMCwgcjAsICMweDAwMDAxMDAwCUAgc2V0IGJpdCAxMiAoSSkgSS1DYWNoZQoJbWNyCXAxNSwgMCwgcjAsIGMxLCBjMCwgMAoKCS8qCgkgKiBKdW1wIHRvIGJvYXJkIHNwZWNpZmljIGluaXRpYWxpemF0aW9uLi4uIFRoZSBNYXNrIFJPTSB3aWxsIGhhdmUgYWxyZWFkeSBpbml0aWFsaXplZAoJICogYmFzaWMgbWVtb3J5LiAgR28gaGVyZSB0byBidW1wIHVwIGNsb2NrIHJhdGUgYW5kIGhhbmRsZSB3YWtlIHVwIGNvbmRpdGlvbnMuCgkgKi8KCW1vdglpcCwgbHIJCS8qIHBlcnNldmVyZSBsaW5rIHJlZyBhY3Jvc3MgY2FsbCAqLwoJYmwJbG93bGV2ZWxfaW5pdAkvKiBnbyBzZXR1cCBwbGwsbXV4LG1lbW9yeSAqLwoJbW92CWxyLCBpcAkJLyogcmVzdG9yZSBsaW5rICovCgltb3YJcGMsIGxyCQkvKiBiYWNrIHRvIG15IGNhbGxlciAqLwojZW5kaWYgLyogQ09ORklHX1NLSVBfTE9XTEVWRUxfSU5JVCAqLwoKI2lmbmRlZiBDT05GSUdfUFJFTE9BREVSCi8qCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqCiAqIEludGVycnVwdCBoYW5kbGluZwogKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKi8KQApAIElSUSBzdGFjayBmcmFtZS4KQAojZGVmaW5lIFNfRlJBTUVfU0laRQk3MgoKI2RlZmluZSBTX09MRF9SMAk2OAojZGVmaW5lIFNfUFNSCQk2NAojZGVmaW5lIFNfUEMJCTYwCiNkZWZpbmUgU19MUgkJNTYKI2RlZmluZSBTX1NQCQk1MgoKI2RlZmluZSBTX0lQCQk0OAojZGVmaW5lIFNfRlAJCTQ0CiNkZWZpbmUgU19SMTAJCTQwCiNkZWZpbmUgU19SOQkJMzYKI2RlZmluZSBTX1I4CQkzMgojZGVmaW5lIFNfUjcJCTI4CiNkZWZpbmUgU19SNgkJMjQKI2RlZmluZSBTX1I1CQkyMAojZGVmaW5lIFNfUjQJCTE2CiNkZWZpbmUgU19SMwkJMTIKI2RlZmluZSBTX1IyCQk4CiNkZWZpbmUgU19SMQkJNAojZGVmaW5lIFNfUjAJCTAKCiNkZWZpbmUgTU9ERV9TVkMgMHgxMwojZGVmaW5lIElfQklUCSAweDgwCgovKgogKiB1c2UgYmFkX3NhdmVfdXNlcl9yZWdzIGZvciBhYm9ydC9wcmVmZXRjaC91bmRlZi9zd2kgLi4uCiAqIHVzZSBpcnFfc2F2ZV91c2VyX3JlZ3MgLyBpcnFfcmVzdG9yZV91c2VyX3JlZ3MgZm9yIElSUS9GSVEgaGFuZGxpbmcKICovCgoJLm1hY3JvCWJhZF9zYXZlX3VzZXJfcmVncwoJc3ViCXNwLCBzcCwgI1NfRlJBTUVfU0laRQkJQCBjYXJ2ZSBvdXQgYSBmcmFtZSBvbiBjdXJyZW50IHVzZXIgc3RhY2sKCXN0bWlhCXNwLCB7cjAgLSByMTJ9CQkJQCBTYXZlIHVzZXIgcmVnaXN0ZXJzIChub3cgaW4gc3ZjIG1vZGUpIHIwLXIxMgoKCWxkcglyMiwgX2FybWJvb3Rfc3RhcnQKCXN1YglyMiwgcjIsICMoQ09ORklHX1NZU19NQUxMT0NfTEVOKQoJc3ViCXIyLCByMiwgIyhDT05GSUdfU1lTX0dCTF9EQVRBX1NJWkUrOCkJQCBzZXQgYmFzZSAyIHdvcmRzIGludG8gYWJvcnQgc3RhY2sKCWxkbWlhCXIyLCB7cjIgLSByM30JCQlAIGdldCB2YWx1ZXMgZm9yICJhYm9ydGVkIiBwYyBhbmQgY3BzciAoaW50byBwYXJtIHJlZ3MpCglhZGQJcjAsIHNwLCAjU19GUkFNRV9TSVpFCQlAIGdyYWIgcG9pbnRlciB0byBvbGQgc3RhY2sKCglhZGQJcjUsIHNwLCAjU19TUAoJbW92CXIxLCBscgoJc3RtaWEJcjUsIHtyMCAtIHIzfQkJCUAgc2F2ZSBzcF9TVkMsIGxyX1NWQywgcGMsIGNwc3IKCW1vdglyMCwgc3AJCQkJQCBzYXZlIGN1cnJlbnQgc3RhY2sgaW50byByMCAocGFyYW0gcmVnaXN0ZXIpCgkuZW5kbQoKCS5tYWNybwlpcnFfc2F2ZV91c2VyX3JlZ3MKCXN1YglzcCwgc3AsICNTX0ZSQU1FX1NJWkUKCXN0bWlhCXNwLCB7cjAgLSByMTJ9CQkJQCBDYWxsaW5nIHIwLXIxMgoJYWRkCXI4LCBzcCwgI1NfUEMJCQlAICEhISEgUjggTkVFRFMgdG8gYmUgc2F2ZWQgISEhISBhIHJlc2VydmVkIHN0YWNrIHNwb3Qgd291bGQgYmUgZ29vZC4KCXN0bWRiCXI4LCB7c3AsIGxyfV4JCQlAIENhbGxpbmcgU1AsIExSCglzdHIJbHIsIFtyOCwgIzBdCQkJQCBTYXZlIGNhbGxpbmcgUEMKCW1ycwlyNiwgc3BzcgoJc3RyCXI2LCBbcjgsICM0XQkJCUAgU2F2ZSBDUFNSCglzdHIJcjAsIFtyOCwgIzhdCQkJQCBTYXZlIE9MRF9SMAoJbW92CXIwLCBzcAoJLmVuZG0KCgkubWFjcm8JaXJxX3Jlc3RvcmVfdXNlcl9yZWdzCglsZG1pYQlzcCwge3IwIC0gbHJ9XgkJCUAgQ2FsbGluZyByMCAtIGxyCgltb3YJcjAsIHIwCglsZHIJbHIsIFtzcCwgI1NfUENdCQkJQCBHZXQgUEMKCWFkZAlzcCwgc3AsICNTX0ZSQU1FX1NJWkUKCXN1YnMJcGMsIGxyLCAjNAkJCUAgcmV0dXJuICYgbW92ZSBzcHNyX3N2YyBpbnRvIGNwc3IKCS5lbmRtCgoJLm1hY3JvIGdldF9iYWRfc3RhY2sKCWxkcglyMTMsIF9hcm1ib290X3N0YXJ0CQlAIHNldHVwIG91ciBtb2RlIHN0YWNrIChlbnRlciBpbiBiYW5rZWQgbW9kZSkKCXN1YglyMTMsIHIxMywgIyhDT05GSUdfU1lTX01BTExPQ19MRU4pCUAgbW92ZSBwYXN0IG1hbGxvYyBwb29sCglzdWIJcjEzLCByMTMsICMoQ09ORklHX1NZU19HQkxfREFUQV9TSVpFKzgpIEAgbW92ZSB0byByZXNlcnZlZCBhIGNvdXBsZSBzcG90cyBmb3IgYWJvcnQgc3RhY2sKCglzdHIJbHIsIFtyMTNdCQkJQCBzYXZlIGNhbGxlciBsciBpbiBwb3NpdGlvbiAwIG9mIHNhdmVkIHN0YWNrCgltcnMJbHIsIHNwc3IJCQlAIGdldCB0aGUgc3BzcgoJc3RyCWxyLCBbcjEzLCAjNF0JCQlAIHNhdmUgc3BzciBpbiBwb3NpdGlvbiAxIG9mIHNhdmVkIHN0YWNrCgoJbW92CXIxMywgI01PREVfU1ZDCQkJQCBwcmVwYXJlIFNWQy1Nb2RlCglAIG1zcglzcHNyX2MsIHIxMwoJbXNyCXNwc3IsIHIxMwkJCUAgc3dpdGNoIG1vZGVzLCBtYWtlIHN1cmUgbW92ZXMgd2lsbCBleGVjdXRlCgltb3YJbHIsIHBjCQkJCUAgY2FwdHVyZSByZXR1cm4gcGMKCW1vdnMJcGMsIGxyCQkJCUAganVtcCB0byBuZXh0IGluc3RydWN0aW9uICYgc3dpdGNoIG1vZGVzLgoJLmVuZG0KCgkubWFjcm8gZ2V0X2JhZF9zdGFja19zd2kKCXN1YglyMTMsIHIxMywgIzQJCQlAIHNwYWNlIG9uIGN1cnJlbnQgc3RhY2sgZm9yIHNjcmF0Y2ggcmVnLgoJc3RyCXIwLCBbcjEzXQkJCUAgc2F2ZSBSMCdzIHZhbHVlLgoJbGRyCXIwLCBfYXJtYm9vdF9zdGFydAkJQCBnZXQgZGF0YSByZWdpb25zIHN0YXJ0CglzdWIJcjAsIHIwLCAjKENPTkZJR19TWVNfTUFMTE9DX0xFTikJQCBtb3ZlIHBhc3QgbWFsbG9jIHBvb2wKCXN1YglyMCwgcjAsICMoQ09ORklHX1NZU19HQkxfREFUQV9TSVpFKzgpCUAgbW92ZSBwYXN0IGdibCBhbmQgYSBjb3VwbGUgc3BvdHMgZm9yIGFib3J0IHN0YWNrCglzdHIJbHIsIFtyMF0JCQlAIHNhdmUgY2FsbGVyIGxyIGluIHBvc2l0aW9uIDAgb2Ygc2F2ZWQgc3RhY2sKCW1ycwlyMCwgc3BzcgkJCUAgZ2V0IHRoZSBzcHNyCglzdHIJbHIsIFtyMCwgIzRdCQkJQCBzYXZlIHNwc3IgaW4gcG9zaXRpb24gMSBvZiBzYXZlZCBzdGFjawoJbGRyCXIwLCBbcjEzXQkJCUAgcmVzdG9yZSByMAoJYWRkCXIxMywgcjEzLCAjNAkJCUAgcG9wIHN0YWNrIGVudHJ5CgkuZW5kbQoKCS5tYWNybyBnZXRfaXJxX3N0YWNrCQkJQCBzZXR1cCBJUlEgc3RhY2sKCWxkcglzcCwgSVJRX1NUQUNLX1NUQVJUCgkuZW5kbQoKCS5tYWNybyBnZXRfZmlxX3N0YWNrCQkJQCBzZXR1cCBGSVEgc3RhY2sKCWxkcglzcCwgRklRX1NUQUNLX1NUQVJUCgkuZW5kbQojZW5kaWYJLyogQ09ORklHX1BSRUxPQURFUiAqLwoKLyoKICogZXhjZXB0aW9uIGhhbmRsZXJzCiAqLwojaWZkZWYgQ09ORklHX1BSRUxPQURFUgoJLmFsaWduCTUKZG9faGFuZzoKCWxkcglzcCwgX1RFWFRfQkFTRQkJCS8qIHVzZSAzMiB3b3JkcyBhYm91dCBzdGFjayAqLwoJYmwJaGFuZwkJCQkvKiBoYW5nIGFuZCBuZXZlciByZXR1cm4gKi8KI2Vsc2UJLyogIUNPTkZJR19QUkVMT0FERVIgKi8KCS5hbGlnbgk1CnVuZGVmaW5lZF9pbnN0cnVjdGlvbjoKCWdldF9iYWRfc3RhY2sKCWJhZF9zYXZlX3VzZXJfcmVncwoJYmwJZG9fdW5kZWZpbmVkX2luc3RydWN0aW9uCgoJLmFsaWduCTUKc29mdHdhcmVfaW50ZXJydXB0OgoJZ2V0X2JhZF9zdGFja19zd2kKCWJhZF9zYXZlX3VzZXJfcmVncwoJYmwJZG9fc29mdHdhcmVfaW50ZXJydXB0CgoJLmFsaWduCTUKcHJlZmV0Y2hfYWJvcnQ6CglnZXRfYmFkX3N0YWNrCgliYWRfc2F2ZV91c2VyX3JlZ3MKCWJsCWRvX3ByZWZldGNoX2Fib3J0CgoJLmFsaWduCTUKZGF0YV9hYm9ydDoKCWdldF9iYWRfc3RhY2sKCWJhZF9zYXZlX3VzZXJfcmVncwoJYmwJZG9fZGF0YV9hYm9ydAoKCS5hbGlnbgk1Cm5vdF91c2VkOgoJZ2V0X2JhZF9zdGFjawoJYmFkX3NhdmVfdXNlcl9yZWdzCglibAlkb19ub3RfdXNlZAoKI2lmZGVmIENPTkZJR19VU0VfSVJRCgoJLmFsaWduCTUKaXJxOgoJZ2V0X2lycV9zdGFjawoJaXJxX3NhdmVfdXNlcl9yZWdzCglibAlkb19pcnEKCWlycV9yZXN0b3JlX3VzZXJfcmVncwoKCS5hbGlnbgk1CmZpcToKCWdldF9maXFfc3RhY2sKCS8qIHNvbWVvbmUgb3VnaHQgdG8gd3JpdGUgYSBtb3JlIGVmZmljdGlvbiBmaXFfc2F2ZV91c2VyX3JlZ3MgKi8KCWlycV9zYXZlX3VzZXJfcmVncwoJYmwJZG9fZmlxCglpcnFfcmVzdG9yZV91c2VyX3JlZ3MKCiNlbHNlCgoJLmFsaWduCTUKaXJxOgoJZ2V0X2JhZF9zdGFjawoJYmFkX3NhdmVfdXNlcl9yZWdzCglibAlkb19pcnEKCgkuYWxpZ24JNQpmaXE6CglnZXRfYmFkX3N0YWNrCgliYWRfc2F2ZV91c2VyX3JlZ3MKCWJsCWRvX2ZpcQoKI2VuZGlmCgkuYWxpZ24gNQouZ2xvYmFsIGFybTExMzZfY2FjaGVfZmx1c2gKYXJtMTEzNl9jYWNoZV9mbHVzaDoKCQltY3IJcDE1LCAwLCByMSwgYzcsIGM1LCAwCUAgaW52YWxpZGF0ZSBJIGNhY2hlCgkJbW92CXBjLCBscgkJCUAgYmFjayB0byBjYWxsZXIKI2VuZGlmCS8qIENPTkZJR19QUkVMT0FERVIgKi8K