LyoNCglGaWxlOgkJaVR1bmVzVmlzdWFsQVBJLmgNCgkNCglDb3B5cmlnaHQ6IAmpIENvcHlyaWdodCAyMDAzIEFwcGxlIENvbXB1dGVyLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQoJDQoJRGlzY2xhaW1lcjoJSU1QT1JUQU5UOiAgVGhpcyBBcHBsZSBzb2Z0d2FyZSBpcyBzdXBwbGllZCB0byB5b3UgYnkgQXBwbGUgQ29tcHV0ZXIsIEluYy4NCgkJCQkoIkFwcGxlIikgaW4gY29uc2lkZXJhdGlvbiBvZiB5b3VyIGFncmVlbWVudCB0byB0aGUgZm9sbG93aW5nIHRlcm1zLCBhbmQgeW91cg0KCQkJCXVzZSwgaW5zdGFsbGF0aW9uLCBtb2RpZmljYXRpb24gb3IgcmVkaXN0cmlidXRpb24gb2YgdGhpcyBBcHBsZSBzb2Z0d2FyZQ0KCQkJCWNvbnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMuICBJZiB5b3UgZG8gbm90IGFncmVlIHdpdGggdGhlc2UgdGVybXMsDQoJCQkJcGxlYXNlIGRvIG5vdCB1c2UsIGluc3RhbGwsIG1vZGlmeSBvciByZWRpc3RyaWJ1dGUgdGhpcyBBcHBsZSBzb2Z0d2FyZS4NCg0KCQkJCUluIGNvbnNpZGVyYXRpb24gb2YgeW91ciBhZ3JlZW1lbnQgdG8gYWJpZGUgYnkgdGhlIGZvbGxvd2luZyB0ZXJtcywgYW5kIHN1YmplY3QNCgkJCQl0byB0aGVzZSB0ZXJtcywgQXBwbGUgZ3JhbnRzIHlvdSBhIHBlcnNvbmFsLCBub24tZXhjbHVzaXZlIGxpY2Vuc2UsIHVuZGVyIEFwcGxl1XMNCgkJCQljb3B5cmlnaHRzIGluIHRoaXMgb3JpZ2luYWwgQXBwbGUgc29mdHdhcmUgKHRoZSAiQXBwbGUgU29mdHdhcmUiKSwgdG8gdXNlLA0KCQkJCXJlcHJvZHVjZSwgbW9kaWZ5IGFuZCByZWRpc3RyaWJ1dGUgdGhlIEFwcGxlIFNvZnR3YXJlLCB3aXRoIG9yIHdpdGhvdXQNCgkJCQltb2RpZmljYXRpb25zLCBpbiBzb3VyY2UgYW5kL29yIGJpbmFyeSBmb3JtczsgcHJvdmlkZWQgdGhhdCBpZiB5b3UgcmVkaXN0cmlidXRlDQoJCQkJdGhlIEFwcGxlIFNvZnR3YXJlIGluIGl0cyBlbnRpcmV0eSBhbmQgd2l0aG91dCBtb2RpZmljYXRpb25zLCB5b3UgbXVzdCByZXRhaW4NCgkJCQl0aGlzIG5vdGljZSBhbmQgdGhlIGZvbGxvd2luZyB0ZXh0IGFuZCBkaXNjbGFpbWVycyBpbiBhbGwgc3VjaCByZWRpc3RyaWJ1dGlvbnMgb2YNCgkJCQl0aGUgQXBwbGUgU29mdHdhcmUuICBOZWl0aGVyIHRoZSBuYW1lLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzIG9yIGxvZ29zIG9mDQoJCQkJQXBwbGUgQ29tcHV0ZXIsIEluYy4gbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGUNCgkJCQlBcHBsZSBTb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBmcm9tIEFwcGxlLiAgRXhjZXB0IGFzDQoJCQkJZXhwcmVzc2x5IHN0YXRlZCBpbiB0aGlzIG5vdGljZSwgbm8gb3RoZXIgcmlnaHRzIG9yIGxpY2Vuc2VzLCBleHByZXNzIG9yIGltcGxpZWQsDQoJCQkJYXJlIGdyYW50ZWQgYnkgQXBwbGUgaGVyZWluLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIGFueSBwYXRlbnQgcmlnaHRzIHRoYXQNCgkJCQltYXkgYmUgaW5mcmluZ2VkIGJ5IHlvdXIgZGVyaXZhdGl2ZSB3b3JrcyBvciBieSBvdGhlciB3b3JrcyBpbiB3aGljaCB0aGUgQXBwbGUNCgkJCQlTb2Z0d2FyZSBtYXkgYmUgaW5jb3Jwb3JhdGVkLg0KDQoJCQkJVGhlIEFwcGxlIFNvZnR3YXJlIGlzIHByb3ZpZGVkIGJ5IEFwcGxlIG9uIGFuICJBUyBJUyIgYmFzaXMuICBBUFBMRSBNQUtFUyBOTw0KCQkJCVdBUlJBTlRJRVMsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBUSEUgSU1QTElFRA0KCQkJCVdBUlJBTlRJRVMgT0YgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVINCgkJCQlQVVJQT1NFLCBSRUdBUkRJTkcgVEhFIEFQUExFIFNPRlRXQVJFIE9SIElUUyBVU0UgQU5EIE9QRVJBVElPTiBBTE9ORSBPUiBJTg0KCQkJCUNPTUJJTkFUSU9OIFdJVEggWU9VUiBQUk9EVUNUUy4NCg0KCQkJCUlOIE5PIEVWRU5UIFNIQUxMIEFQUExFIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElORElSRUNULCBJTkNJREVOVEFMIE9SDQoJCQkJQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURQ0KCQkJCUdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQ0KCQkJCUFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSwgUkVQUk9EVUNUSU9OLCBNT0RJRklDQVRJT04gQU5EL09SIERJU1RSSUJVVElPTg0KCQkJCU9GIFRIRSBBUFBMRSBTT0ZUV0FSRSwgSE9XRVZFUiBDQVVTRUQgQU5EIFdIRVRIRVIgVU5ERVIgVEhFT1JZIE9GIENPTlRSQUNULCBUT1JUDQoJCQkJKElOQ0xVRElORyBORUdMSUdFTkNFKSwgU1RSSUNUIExJQUJJTElUWSBPUiBPVEhFUldJU0UsIEVWRU4gSUYgQVBQTEUgSEFTIEJFRU4NCgkJCQlBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCgkJCQkNCiovDQoNCiNpZm5kZWYgSVRVTkVTVklTVUFMQVBJX0hfCiNkZWZpbmUgSVRVTkVTVklTVUFMQVBJX0hfCgojaW5jbHVkZSAiaVR1bmVzQVBJLmgiCgojaWYgUFJBR01BX09OQ0UKI3ByYWdtYSBvbmNlCiNlbmRpZgoKI2lmZGVmIF9fY3BsdXNwbHVzCmV4dGVybiAiQyIgewojZW5kaWYKCiNpZiBQUkFHTUFfU1RSVUNUX0FMSUdOCiAgICAjcHJhZ21hIG9wdGlvbnMgYWxpZ249cG93ZXIKI2VsaWYgUFJBR01BX1NUUlVDVF9QQUNLUFVTSAogICAgI3ByYWdtYSBwYWNrKHB1c2gsIDQpCiNlbGlmIFBSQUdNQV9TVFJVQ1RfUEFDSwogICAgI3ByYWdtYSBwYWNrKDQpCiNlbmRpZgoKc3RydWN0IElUVHJhY2tJbmZvVjEgewoJSVRUSUZpZWxkTWFzawkJdmFsaWRGaWVsZHM7CglVSW50MzIJCQkJcmVzZXJ2ZWQ7CQkJCQkJLyogTXVzdCBiZSB6ZXJvICovCgkKCVN0cjI1NQkJCQluYW1lOwkKCVN0cjI1NQkJCQlmaWxlTmFtZTsKCVN0cjI1NQkJCQlhcnRpc3Q7CglTdHIyNTUJCQkJYWxidW07CgkJCglTdHIyNTUJCQkJZ2VucmU7CglTdHIyNTUJCQkJa2luZDsKCQoJVUludDMyCQkJCXRyYWNrTnVtYmVyOwoJVUludDMyCQkJCW51bVRyYWNrczsKCQkKCVVJbnQxNgkJCQl5ZWFyOwoJU0ludDE2CQkJCXNvdW5kVm9sdW1lQWRqdXN0bWVudDsJCQkvKiBWYWxpZCByYW5nZSBpcyAtMjU1IHRvICsyNTUgKi8KCQoJU3RyMjU1CQkJCWVxUHJlc2V0TmFtZTsKCVN0cjI1NQkJCQljb21tZW50czsKCQoJVUludDMyCQkJCXRvdGFsVGltZUluTVM7CglVSW50MzIJCQkJc3RhcnRUaW1lSW5NUzsKCVVJbnQzMgkJCQlzdG9wVGltZUluTVM7CgoJVUludDMyCQkJCXNpemVJbkJ5dGVzOwoKCVVJbnQzMgkJCQliaXRSYXRlOwoJVUludDMyCQkJCXNhbXBsZVJhdGVGaXhlZDsKCglPU1R5cGUJCQkJZmlsZVR5cGU7CgkKCVVJbnQzMgkJCQlkYXRlOwoJVUludDMyCQkJCXVudXNlZFJlc2VydmVkMjsJCQkJLyogTXVzdCBiZSB6ZXJvICovCgkKCUlUVHJhY2tBdHRyaWJ1dGVzCWF0dHJpYnV0ZXM7CglJVFRyYWNrQXR0cmlidXRlcwl2YWxpZEF0dHJpYnV0ZXM7CQkJCS8qIE1hc2sgaW5kaWNhdGluZyB3aGljaCBhdHRyaWJ1dGVzIGFyZSBhcHBsaWNhYmxlICovCgoJT1NUeXBlCQkJCWZpbGVDcmVhdG9yOwp9Owp0eXBlZGVmIHN0cnVjdCBJVFRyYWNrSW5mb1YxIElUVHJhY2tJbmZvVjE7CgplbnVtIHsKCWtDdXJyZW50SVRTdHJlYW1JbmZvVmVyc2lvbiA9IDEKfTsKCnN0cnVjdCBJVFN0cmVhbUluZm9WMSB7CglTSW50MzIJCQkJdmVyc2lvbjsKCVN0cjI1NQkJCQlzdHJlYW1UaXRsZTsKCVN0cjI1NQkJCQlzdHJlYW1VUkw7CglTdHIyNTUJCQkJc3RyZWFtTWVzc2FnZTsKfTsKdHlwZWRlZiBzdHJ1Y3QgSVRTdHJlYW1JbmZvVjEgSVRTdHJlYW1JbmZvVjE7CgoKZW51bSB7CglrSVRWaXN1YWxQbHVnaW5NYWpvck1lc3NhZ2VWZXJzaW9uID0gMTAsCglrSVRWaXN1YWxQbHVnaW5NaW5vck1lc3NhZ2VWZXJzaW9uID0gNQp9OwoKZW51bSB7CgkvKiBWaXN1YWxQbHVnaW4gbWVzc2FnZXMgKi8KCQoJa1Zpc3VhbFBsdWdpbklkbGVNZXNzYWdlCQkJPSAnbnVsbCcsCgoJa1Zpc3VhbFBsdWdpbkluaXRNZXNzYWdlCQkJPSAnaW5pdCcsCglrVmlzdWFsUGx1Z2luQ2xlYW51cE1lc3NhZ2UJCQk9ICdjbHIgJywKCQoJa1Zpc3VhbFBsdWdpbkNvbmZpZ3VyZU1lc3NhZ2UJCT0gJ2NuZmcnLAkvKiBDb25maWd1cmUgdGhlIHBsdWdpbiAobWF5IG5vdCBiZSBlbmFibGVkKSAqLwoJCglrVmlzdWFsUGx1Z2luRW5hYmxlTWVzc2FnZQkJCT0gJ3ZvbiAnLAkvKiBUdXJuIG9uIHRoZSBtb2R1bGUgKGF1dG9tYXRpYykqLwoJa1Zpc3VhbFBsdWdpbkRpc2FibGVNZXNzYWdlCQkJPSAndm9mZicsCS8qIFR1cm4gb2ZmIHRoZSBtb2R1bGUgKi8KCQoJa1Zpc3VhbFBsdWdpblNob3dXaW5kb3dNZXNzYWdlCQk9ICdzaG93JywJLyogU2hvdyB0aGUgcGx1Z2luIHdpbmRvdyAoYWxsb2NhdGUgbGFyZ2UgbWVtb3J5IGhlcmUhKSAqLwoJa1Zpc3VhbFBsdWdpbkhpZGVXaW5kb3dNZXNzYWdlCQk9ICdoaWRlJywJLyogSGlkZSB0aGUgcGx1Z2luIHdpbmRvdyAoZGVhbGxvY2F0ZSBsYXJnZSBtZW1vcnkgaGVyZSEpICovCgkJCglrVmlzdWFsUGx1Z2luU2V0V2luZG93TWVzc2FnZQkJPSAnc3dpbicsCS8qIENoYW5nZSB0aGUgd2luZG93IHBhcmFtZXRlcnMgKi8KCglrVmlzdWFsUGx1Z2luUmVuZGVyTWVzc2FnZQkJCT0gJ3ZybmQnLAkvKiBSZW5kZXIgdG8gd2luZG93ICovCgkKCWtWaXN1YWxQbHVnaW5VcGRhdGVNZXNzYWdlCQkJPSAndnVwZCcsCS8qIFVwZGF0ZSB0aGUgd2luZG93ICovCgkKCWtWaXN1YWxQbHVnaW5QbGF5TWVzc2FnZQkJCT0gJ3ZwbHknLAkvKiBQbGF5aW5nIGEgdHJhY2sgKi8KCWtWaXN1YWxQbHVnaW5DaGFuZ2VUcmFja01lc3NhZ2UJCT0gJ2N0cmsnLAkvKiBDaGFuZ2UgdHJhY2sgKGZvciBDRCBjb250aW51b3VzIHBsYXkpICovCglrVmlzdWFsUGx1Z2luU3RvcE1lc3NhZ2UJCQk9ICd2c3RwJywJLyogU3RvcHBpbmcgYSB0cmFjayAqLwoJa1Zpc3VhbFBsdWdpblNldFBvc2l0aW9uTWVzc2FnZQkJPSAnc2V0cCcsCS8qIFNldHRpbmcgdGhlIHBvc2l0aW9uIG9mIGEgdHJhY2sgKi8KCQoJa1Zpc3VhbFBsdWdpblBhdXNlTWVzc2FnZQkJCT0gJ3ZwYXUnLAkvKiBQYXVzaW5nIGEgdHJhY2sgKHVudXNlZCAtIFBhdXNlIGlzIHN0b3ApICovCglrVmlzdWFsUGx1Z2luVW5wYXVzZU1lc3NhZ2UJCQk9ICd2dW5wJywJLyogVW5wYXVzaW5nIGEgdHJhY2sgKHVudXNlZCAtIFBhdXNlIGlzIHN0b3ApICovCgkKCWtWaXN1YWxQbHVnaW5FdmVudE1lc3NhZ2UJCQk9ICd2ZXZ0JywJLyogTWFjLWV2ZW50LiAqLwoJCglrVmlzdWFsUGx1Z2luRGlzcGxheUNoYW5nZWRNZXNzYWdlCT0gJ2RjaG4nCS8qIFNvbWV0aGluZyBhYm91dCBkaXNwbGF5IHN0YXRlIGNoYW5nZWQgKi8KfTsKCi8qCglWaXN1YWxQbHVnaW4gbWVzc2FnZXMKKi8KCmVudW0gewoJa1Zpc3VhbE1heERhdGFDaGFubmVscwkJPSAyLAoKCWtWaXN1YWxOdW1XYXZlZm9ybUVudHJpZXMJPSA1MTIsCglrVmlzdWFsTnVtU3BlY3RydW1FbnRyaWVzCT0gNTEyCn07CgplbnVtIHsKCS8qIFNldC9TaG93V2luZG93IG9wdGlvbnMgKi8KCQoJa1dpbmRvd0lzRnVsbFNjcmVlbiA9ICgxTCA8PCAwKSwKCWtXaW5kb3dJc1N0cmV0Y2hlZAk9ICgxTCA8PCAxKQp9OwoKc3RydWN0IFJlbmRlclZpc3VhbERhdGEgewoJVUludDgJCQkJCQkJbnVtV2F2ZWZvcm1DaGFubmVsczsKCVVJbnQ4CQkJCQkJCXdhdmVmb3JtRGF0YVtrVmlzdWFsTWF4RGF0YUNoYW5uZWxzXVtrVmlzdWFsTnVtV2F2ZWZvcm1FbnRyaWVzXTsKCQoJVUludDgJCQkJCQkJbnVtU3BlY3RydW1DaGFubmVsczsKCVVJbnQ4CQkJCQkJCXNwZWN0cnVtRGF0YVtrVmlzdWFsTWF4RGF0YUNoYW5uZWxzXVtrVmlzdWFsTnVtU3BlY3RydW1FbnRyaWVzXTsKfTsKdHlwZWRlZiBzdHJ1Y3QgUmVuZGVyVmlzdWFsRGF0YSBSZW5kZXJWaXN1YWxEYXRhOwoKc3RydWN0IFZpc3VhbFBsdWdpbkluaXRNZXNzYWdlIHsKCVVJbnQzMgkJCQkJCQltZXNzYWdlTWFqb3JWZXJzaW9uOwkvKiBJbnB1dCAqLwoJVUludDMyCQkJCQkJCW1lc3NhZ2VNaW5vclZlcnNpb247CS8qIElucHV0ICovCglOdW1WZXJzaW9uCQkJCQkJYXBwVmVyc2lvbjsJCQkJLyogSW5wdXQgKi8KCgl2b2lkICoJCQkJCQkJYXBwQ29va2llOwkJCQkvKiBJbnB1dCAqLwoJSVRBcHBQcm9jUHRyCQkJCQlhcHBQcm9jOwkJCQkvKiBJbnB1dCAqLwoKCU9wdGlvbkJpdHMJCQkJCQlvcHRpb25zOwkJCQkvKiBPdXRwdXQgKi8KCXZvaWQgKgkJCQkJCQlyZWZDb247CQkJCQkvKiBPdXRwdXQgKi8KfTsKdHlwZWRlZiBzdHJ1Y3QgVmlzdWFsUGx1Z2luSW5pdE1lc3NhZ2UgVmlzdWFsUGx1Z2luSW5pdE1lc3NhZ2U7CgpzdHJ1Y3QgVmlzdWFsUGx1Z2luU2hvd1dpbmRvd01lc3NhZ2UgewoJSFdORAkJCQkJCQl3aW5kb3c7CQkJCQkvKiBJbnB1dCAqLwoJUmVjdAkJCQkJCQlkcmF3UmVjdDsJCQkJLyogSW5wdXQgKi8KCU9wdGlvbkJpdHMJCQkJCQlvcHRpb25zOwkJCQkvKiBJbnB1dCAqLwp9Owp0eXBlZGVmIHN0cnVjdCBWaXN1YWxQbHVnaW5TaG93V2luZG93TWVzc2FnZSBWaXN1YWxQbHVnaW5TaG93V2luZG93TWVzc2FnZTsKCnN0cnVjdCBWaXN1YWxQbHVnaW5TZXRXaW5kb3dNZXNzYWdlIHsKCUhXTkQJCQkJCQkJd2luZG93OwkJCQkJLyogSW5wdXQgKi8KCVJlY3QJCQkJCQkJZHJhd1JlY3Q7CQkJCS8qIElucHV0ICovCglPcHRpb25CaXRzCQkJCQkJb3B0aW9uczsJCQkJLyogSW5wdXQgKi8KfTsKdHlwZWRlZiBzdHJ1Y3QgVmlzdWFsUGx1Z2luU2V0V2luZG93TWVzc2FnZSBWaXN1YWxQbHVnaW5TZXRXaW5kb3dNZXNzYWdlOwoKc3RydWN0IFZpc3VhbFBsdWdpblBsYXlNZXNzYWdlIHsKCUlUVHJhY2tJbmZvVjEgKgkJCQkJdHJhY2tJbmZvOwkJCQkvKiBJbnB1dCAqLwoJSVRTdHJlYW1JbmZvVjEgKgkJCQlzdHJlYW1JbmZvOwkJCQkvKiBJbnB1dCAqLwoJU0ludDMyCQkJCQkJCXZvbHVtZTsJCQkJCS8qIElucHV0ICovCgkKCVVJbnQzMgkJCQkJCQliaXRSYXRlOwkJCQkvKiBJbnB1dCAqLwoJCglTb3VuZENvbXBvbmVudERhdGEJCQkJc291bmRGb3JtYXQ7CQkJLyogSW5wdXQgKi8KCUlUVHJhY2tJbmZvICoJCQkJCXRyYWNrSW5mb1VuaWNvZGU7CQkvKiBJbnB1dCAqLwoJSVRTdHJlYW1JbmZvICoJCQkJCXN0cmVhbUluZm9Vbmljb2RlOwkJLyogSW5wdXQgKi8KfTsKdHlwZWRlZiBzdHJ1Y3QgVmlzdWFsUGx1Z2luUGxheU1lc3NhZ2UgVmlzdWFsUGx1Z2luUGxheU1lc3NhZ2U7CgpzdHJ1Y3QgVmlzdWFsUGx1Z2luQ2hhbmdlVHJhY2tNZXNzYWdlIHsKCUlUVHJhY2tJbmZvVjEgKgkJCQkJdHJhY2tJbmZvOwkJCQkvKiBJbnB1dCAqLwoJSVRTdHJlYW1JbmZvVjEgKgkJCQlzdHJlYW1JbmZvOwkJCQkvKiBJbnB1dCAqLwoJSVRUcmFja0luZm8gKgkJCQkJdHJhY2tJbmZvVW5pY29kZTsJCS8qIElucHV0ICovCglJVFN0cmVhbUluZm8gKgkJCQkJc3RyZWFtSW5mb1VuaWNvZGU7CQkvKiBJbnB1dCAqLwp9Owp0eXBlZGVmIHN0cnVjdCBWaXN1YWxQbHVnaW5DaGFuZ2VUcmFja01lc3NhZ2UgVmlzdWFsUGx1Z2luQ2hhbmdlVHJhY2tNZXNzYWdlOwoKc3RydWN0IFZpc3VhbFBsdWdpblJlbmRlck1lc3NhZ2UgewoJUmVuZGVyVmlzdWFsRGF0YSAqCQkJCXJlbmRlckRhdGE7CQkJCS8qIElucHV0ICovCglVSW50MzIJCQkJCQkJdGltZVN0YW1wSUQ7CQkJLyogSW5wdXQgKi8KfTsKdHlwZWRlZiBzdHJ1Y3QgVmlzdWFsUGx1Z2luUmVuZGVyTWVzc2FnZSBWaXN1YWxQbHVnaW5SZW5kZXJNZXNzYWdlOwoKc3RydWN0IFZpc3VhbFBsdWdpblNldFBvc2l0aW9uTWVzc2FnZSB7CglVSW50MzIJCQkJCQkJcG9zaXRpb25UaW1lSW5NUzsJCS8qIElucHV0ICovCn07CnR5cGVkZWYgc3RydWN0IFZpc3VhbFBsdWdpblNldFBvc2l0aW9uTWVzc2FnZSBWaXN1YWxQbHVnaW5TZXRQb3NpdGlvbk1lc3NhZ2U7CgplbnVtIHsKCWtWaXN1YWxEaXNwbGF5RGVwdGhDaGFuZ2VkIAk9IDEgPDwgMCwJCQkJCS8qIHRoZSBkaXNwbGF5J3MgZGVwdGggaGFzIGNoYW5nZWQgKi8KCWtWaXN1YWxEaXNwbGF5UmVjdENoYW5nZWQJPSAxIDw8IDEsCQkJCQkvKiB0aGUgZGlzcGxheSdzIGxvY2F0aW9uIGNoYW5nZWQgKi8KCWtWaXN1YWxXaW5kb3dNb3ZlZE1vdmVkIAk9IDEgPDwgMgkJCQkJLyogdGhlIHdpbmRvdyBoYXMgbW92ZWQgbG9jYXRpb24gKi8JCn07CgpzdHJ1Y3QgVmlzdWFsUGx1Z2luRGlzcGxheUNoYW5nZWRNZXNzYWdlIHsKCVVJbnQzMgkJCQkJCQlmbGFnczsJCS8qIElucHV0ICovCn07CnR5cGVkZWYgc3RydWN0IFZpc3VhbFBsdWdpbkRpc3BsYXlDaGFuZ2VkTWVzc2FnZSBWaXN1YWxQbHVnaW5EaXNwbGF5Q2hhbmdlZE1lc3NhZ2U7CgpzdHJ1Y3QgVmlzdWFsUGx1Z2luTWVzc2FnZUluZm8gewoJdW5pb24gewoJCVZpc3VhbFBsdWdpbkluaXRNZXNzYWdlCQkJCWluaXRNZXNzYWdlOwoJCVZpc3VhbFBsdWdpblNob3dXaW5kb3dNZXNzYWdlCQlzaG93V2luZG93TWVzc2FnZTsKCQlWaXN1YWxQbHVnaW5TZXRXaW5kb3dNZXNzYWdlCQlzZXRXaW5kb3dNZXNzYWdlOwoJCVZpc3VhbFBsdWdpblBsYXlNZXNzYWdlCQkJCXBsYXlNZXNzYWdlOwoJCVZpc3VhbFBsdWdpbkNoYW5nZVRyYWNrTWVzc2FnZQkJY2hhbmdlVHJhY2tNZXNzYWdlOwoJCVZpc3VhbFBsdWdpblJlbmRlck1lc3NhZ2UJCQlyZW5kZXJNZXNzYWdlOwoJCVZpc3VhbFBsdWdpblNldFBvc2l0aW9uTWVzc2FnZQkJc2V0UG9zaXRpb25NZXNzYWdlOwoJCVZpc3VhbFBsdWdpbkRpc3BsYXlDaGFuZ2VkTWVzc2FnZQlkaXNwbGF5Q2hhbmdlZE1lc3NhZ2U7Cgl9IHU7Cn07CnR5cGVkZWYgc3RydWN0IFZpc3VhbFBsdWdpbk1lc3NhZ2VJbmZvIFZpc3VhbFBsdWdpbk1lc3NhZ2VJbmZvOwoKI2lmIFBSQUdNQV9TVFJVQ1RfQUxJR04KICAgICNwcmFnbWEgb3B0aW9ucyBhbGlnbj1yZXNldAojZWxpZiBQUkFHTUFfU1RSVUNUX1BBQ0tQVVNICiAgICAjcHJhZ21hIHBhY2socG9wKQojZWxpZiBQUkFHTUFfU1RSVUNUX1BBQ0sKICAgICNwcmFnbWEgcGFjaygpCiNlbmRpZgoKI2lmZGVmIF9fY3BsdXNwbHVzCn0KI2VuZGlmCgojZW5kaWYgLyogSVRVTkVTVklTVUFMQVBJX0hfICovCg==